autosnippet
Version:
Extract code patterns into a knowledge base for AI coding assistants
82 lines (81 loc) • 2.64 kB
TypeScript
/**
* AgentEventBus — Agent 间事件通信总线
*
* 借鉴 AutoGen Core Event-Driven 架构 + RxJS Observable 模式:
* - Agent 间松耦合通信(publish/subscribe)
* - 支持同步和异步事件处理
* - 内置事件过滤、优先级、TTL
* - 支持 request/reply 模式(Agent 间 RPC)
*
* @module AgentEventBus
*/
import { EventEmitter } from 'node:events';
/** 标准事件类型 */
export declare const AgentEvents: Readonly<{
AGENT_CREATED: "agent:created";
AGENT_STARTED: "agent:started";
AGENT_COMPLETED: "agent:completed";
AGENT_FAILED: "agent:failed";
AGENT_ABORTED: "agent:aborted";
TOOL_CALL_START: "tool:call:start";
TOOL_CALL_END: "tool:call:end";
LLM_CALL_START: "llm:call:start";
LLM_CALL_END: "llm:call:end";
STEP_COMPLETED: "step:completed";
HANDOFF_REQUEST: "handoff:request";
HANDOFF_ACCEPT: "handoff:accept";
HANDOFF_RESULT: "handoff:result";
PROGRESS: "progress";
THINKING: "thinking";
STREAM_DELTA: "stream:delta";
USER_INPUT: "user:input";
LARK_MESSAGE: "lark:message";
SCAN_REQUEST: "scan:request";
}>;
export declare class AgentEventBus extends EventEmitter {
#private;
constructor();
/** 获取全局单例 */
static getInstance(): AgentEventBus;
/** 重置单例(测试用) */
static resetInstance(): void;
/**
* 发布事件(广播)
* @param type 事件类型
* @param payload 事件数据
* @param [opts.source] 发送者 agentId
* @param [opts.target] 目标 agentId
* @param [opts.correlationId] 关联 ID
*/
publish(type: string, payload?: Record<string, unknown>, opts?: {
source?: string;
target?: string;
correlationId?: string;
}): void;
/**
* 订阅事件
* @param type 事件类型
* @param handler 处理函数 (event) => void
* @returns 取消订阅函数
*/
subscribe(type: string, handler: (event: Record<string, unknown>) => void): () => void;
/**
* Request/Reply 模式 — 发送请求并等待响应
* @param requestType 请求事件类型
* @param payload 请求数据
* @param [opts.timeout=30000] 超时毫秒
* @param [opts.source] 发送者
* @returns 响应事件
*/
request(requestType: string, payload?: Record<string, unknown>, opts?: {
timeout?: number;
source?: string;
}): Promise<unknown>;
/** 获取事件统计 */
getStats(): {
totalEvents: number;
subscriptionTopics: number;
pendingReplies: number;
};
}
export default AgentEventBus;