UNPKG

autosnippet

Version:

Extract code patterns into a knowledge base for AI coding assistants

51 lines (50 loc) 2.03 kB
/** * EventAggregator — 信号聚类引擎(受 Continue EditAggregator 启发) * * 在短时间窗口内将多个同类事件聚合为一个 batch 事件,避免: * 1. SignalCollector 对相同类型的信号重复触发 AI 分析 * 2. 高频操作(如连续文件保存)产生大量冗余事件 * 3. 多个 Guard 违规在同一编辑中重复推送 * * 聚合策略: * 时间窗口 — 同 key 事件在 windowMs 内合并为一个 batch * 空间聚类 — 支持自定义 key 提取函数(如按文件路径/违规规则分组) * 去重 —— 已处理的事件在 dedupeWindowMs 内不重复触发 * * 用法: * const agg = new EventAggregator({ windowMs: 5000 }); * agg.on('batch', (key, events) => { ... }); * agg.push('file_change', { filePath: 'a.js' }); * // 5 秒内的多次 push 会合并为一次 batch 回调 */ export declare class EventAggregator { #private; /** * @param [opts.windowMs=5000] 聚合时间窗口(毫秒) * @param [opts.maxBatch=50] 单次 batch 最大事件数 * @param [opts.dedupeMs=60000] 相同事件去重窗口(毫秒) */ constructor({ windowMs, maxBatch, dedupeMs, }?: { windowMs?: number | undefined; maxBatch?: number | undefined; dedupeMs?: number | undefined; }); /** * 推送一个事件到聚合器 * @param key 聚合键(如 'file_change', 'guard_violation') * @param event 事件数据 * @param [opts.dedupeId] 去重标识(默认为 JSON hash) */ push(key: string, event: Record<string, unknown>, { dedupeId }?: { dedupeId?: string; }): void; /** 注册 batch 事件监听器 */ on(eventName: string, fn: (key: string, events: Record<string, unknown>[]) => void): void; /** 立即刷新所有待处理 bucket */ flushAll(): void; /** 停止所有计时器 */ destroy(): void; /** 获取待处理事件数 */ get pendingCount(): number; } export default EventAggregator;