@aipack-ai/multi-agent 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,523 @@
1
+ import { Result, Tool, Request, Runtime, RuntimeOptions } from '@aipack-ai/agent';
2
+
3
+ /**
4
+ * core/types.ts - 多Agent编排核心类型
5
+ *
6
+ * 定义 AgentNode, AgentEdge, SharedContext, AgentGraph 等核心抽象。
7
+ * P0 范围:AgentGraph + Pipeline + Router。
8
+ */
9
+
10
+ /** 事件总线监听器 */
11
+ type EventListener<T = unknown> = (event: T) => void;
12
+ /** 事件总线:Agent间异步通知 */
13
+ interface EventBus {
14
+ /** 订阅事件 */
15
+ on(event: string, listener: EventListener): this;
16
+ /** 取消订阅 */
17
+ off(event: string, listener: EventListener): this;
18
+ /** 发射事件 */
19
+ emit(event: string, data?: unknown): this;
20
+ }
21
+ /** 工具注册表:跨Agent工具共享 */
22
+ interface ToolRegistry {
23
+ /** 注册工具 */
24
+ register(tool: Tool): this;
25
+ /** 批量注册 */
26
+ registerAll(tools: Tool[]): this;
27
+ /** 获取工具 */
28
+ get(name: string): Tool | undefined;
29
+ /** 获取所有工具 */
30
+ getAll(): Tool[];
31
+ /** 检查工具是否存在 */
32
+ has(name: string): boolean;
33
+ }
34
+ /** Agent间共享上下文 */
35
+ interface SharedContext {
36
+ /** 黑板:键值共享存储 */
37
+ blackboard: Map<string, unknown>;
38
+ /** 事件总线:Agent间异步通知 */
39
+ bus: EventBus;
40
+ /** 全局工具注册表 */
41
+ toolRegistry: ToolRegistry;
42
+ /** 运行元数据(traceId, startTime, etc.) */
43
+ meta: Record<string, unknown>;
44
+ }
45
+ /** Agent节点:图中的执行单元 */
46
+ interface AgentNode {
47
+ /** 唯一标识 */
48
+ id: string;
49
+ /** 节点显示名 */
50
+ name: string;
51
+ /** Agent描述(注入到systemPrompt) */
52
+ description: string;
53
+ /** Runtime实例(或创建选项) */
54
+ runtime: Runtime | RuntimeOptions;
55
+ /** 该Agent专有的工具(除了共享工具外) */
56
+ tools?: Tool[];
57
+ /** 输入转换:从SharedContext提取该Agent需要的上下文 */
58
+ inputMapping?: (ctx: SharedContext) => string | Request;
59
+ /** 输出转换:将Agent结果写入SharedContext */
60
+ outputMapping?: (result: Result, ctx: SharedContext) => void;
61
+ }
62
+ /** Agent间流转边 */
63
+ interface AgentEdge {
64
+ /** 源Agent ID */
65
+ from: string;
66
+ /** 目标Agent ID */
67
+ to: string;
68
+ /** 条件:决定是否走这条边(默认always true) */
69
+ condition?: (result: Result, ctx: SharedContext) => boolean;
70
+ /** 边上的转换:修改传递给下一个Agent的输入 */
71
+ transform?: (result: Result, ctx: SharedContext) => string | Request;
72
+ }
73
+ /** 单个Agent的执行状态 */
74
+ type NodeExecutionState = 'pending' | 'running' | 'completed' | 'failed' | 'skipped';
75
+ /** 图执行状态快照 */
76
+ interface GraphExecutionState {
77
+ /** 当前执行到哪个节点 */
78
+ currentAgentId?: string;
79
+ /** 各节点执行状态 */
80
+ nodeStates: Map<string, NodeExecutionState>;
81
+ /** 各节点的执行结果 */
82
+ nodeResults: Map<string, Result>;
83
+ /** 已完成的步数 */
84
+ stepsCompleted: number;
85
+ /** 总步数(预估) */
86
+ totalSteps?: number;
87
+ /** 是否已完成 */
88
+ finished: boolean;
89
+ /** 是否出错 */
90
+ error?: string;
91
+ }
92
+ /** 多Agent运行结果 */
93
+ interface MultiAgentResult {
94
+ /** 最终输出文本 */
95
+ content: string;
96
+ /** 最后一个执行的Agent ID */
97
+ lastAgentId: string;
98
+ /** 各Agent执行结果 */
99
+ agentResults: Map<string, Result>;
100
+ /** 累计token用量 */
101
+ totalUsage: Record<string, number>;
102
+ /** 执行步数 */
103
+ stepsCompleted: number;
104
+ /** 停止原因 */
105
+ stopReason: string;
106
+ /** 共享上下文快照 */
107
+ context: SharedContext;
108
+ /** 是否成功 */
109
+ success: boolean;
110
+ /** 错误信息 */
111
+ error?: string;
112
+ }
113
+ /** 多Agent流式事件类型 */
114
+ type MultiAgentEvent = {
115
+ type: 'agent_start';
116
+ agentId: string;
117
+ agentName: string;
118
+ } | {
119
+ type: 'agent_result';
120
+ agentId: string;
121
+ agentName: string;
122
+ result: Result;
123
+ } | {
124
+ type: 'agent_error';
125
+ agentId: string;
126
+ agentName: string;
127
+ error: string;
128
+ } | {
129
+ type: 'edge_traversed';
130
+ from: string;
131
+ to: string;
132
+ } | {
133
+ type: 'parallel_start';
134
+ agentIds: string[];
135
+ } | {
136
+ type: 'parallel_done';
137
+ results: Map<string, Result>;
138
+ } | {
139
+ type: 'round_start';
140
+ round: number;
141
+ } | {
142
+ type: 'converged';
143
+ round: number;
144
+ reason: string;
145
+ } | {
146
+ type: 'graph_done';
147
+ result: MultiAgentResult;
148
+ } | {
149
+ type: 'graph_error';
150
+ error: string;
151
+ };
152
+ /** AgentGraph: 编排核心 */
153
+ interface AgentGraph {
154
+ /** 添加Agent节点 */
155
+ addNode(node: AgentNode): this;
156
+ /** 添加流转边 */
157
+ addEdge(edge: AgentEdge): this;
158
+ /** 设置入口Agent */
159
+ setEntry(agentId: string): this;
160
+ /** 设置终止条件 */
161
+ setFinish(condition: (ctx: SharedContext) => boolean): this;
162
+ /** 执行图 */
163
+ run(input: string | Request): Promise<MultiAgentResult>;
164
+ /** 流式执行 */
165
+ stream(input: string | Request): AsyncGenerator<MultiAgentEvent>;
166
+ /** 获取执行状态 */
167
+ getState(): GraphExecutionState;
168
+ /** 中止执行 */
169
+ abort(): void;
170
+ /** 事件监听 */
171
+ on(event: string, listener: EventListener): this;
172
+ }
173
+ /** Pipeline 配置选项 */
174
+ interface PipelineOpts {
175
+ /** 是否传递前一个Agent的完整Result到下一个Agent(默认只传content文本) */
176
+ passFullResult?: boolean;
177
+ /** 节点间输出转换(全局,优先级低于AgentNode.outputMapping) */
178
+ outputTransform?: (result: Result, ctx: SharedContext) => string;
179
+ }
180
+ /** Router 配置选项 */
181
+ interface RouterOpts {
182
+ /** 从路由Agent输出中解析目标Agent ID */
183
+ resolve: (routerResult: Result) => string;
184
+ /** 未匹配到目标时的默认路由Agent ID */
185
+ defaultTarget?: string;
186
+ /** 是否将原始输入传递给目标Agent(默认true),否则传递路由Agent的输出 */
187
+ passOriginalInput?: boolean;
188
+ }
189
+ /** 执行调度策略 */
190
+ type ScheduleMode = 'auto' | 'sequential' | 'parallel';
191
+ /** Supervisor 配置选项 */
192
+ interface SupervisorOpts {
193
+ /**
194
+ * 执行调度策略:
195
+ * - 'parallel': 所有工作者并行执行
196
+ * - 'sequential': 工作者按顺序依次执行
197
+ * - 'auto': 根据工作者 inputMapping 的 blackboard 依赖自动推导执行顺序
198
+ * (仅读 supervisor 输出的并行,依赖其他工作者结果的串行在后)
199
+ * 默认 'parallel'
200
+ */
201
+ schedule?: ScheduleMode;
202
+ /**
203
+ * 并行执行时的最大并发数(默认 Infinity,不限制)
204
+ * 用于避免 API 限流
205
+ */
206
+ concurrency?: number;
207
+ /** Supervisor 输出后,是否将原始用户输入也传递给工作者(通过 blackboard.__original_input__)
208
+ * 默认 true
209
+ */
210
+ passOriginalInput?: boolean;
211
+ }
212
+ /** Debate 配置选项 */
213
+ interface DebateOpts {
214
+ /** 最大辩论轮数(默认 3) */
215
+ maxRounds?: number;
216
+ /** 收敛条件:当 reviewer 的输出满足此条件时提前结束 */
217
+ convergeWhen: (reviewerResult: Result) => boolean;
218
+ /** 将 reviewer 的反馈如何转换为 proposer 的输入(默认:将 reviewer 输出拼接为修复指令) */
219
+ feedbackTransform?: (reviewerResult: Result, proposerResult: Result) => string;
220
+ }
221
+ /** MapReduce 配置选项 */
222
+ interface MapReduceOpts {
223
+ /** 将输入拆分为多个子任务的函数 */
224
+ split: (input: string) => string[];
225
+ /** 并行执行时的最大并发数(默认 Infinity) */
226
+ concurrency?: number;
227
+ /** Reducer 的输入格式化(默认将所有 mapper 结果用分隔符连接) */
228
+ reduceInputFormat?: (mapperResults: Map<number, Result>) => string;
229
+ }
230
+ /** MCPBridge 配置选项 */
231
+ interface MCPBridgeOpts {
232
+ /** MCP Server 名称(默认 'aipack-multi-agent') */
233
+ serverName?: string;
234
+ /** MCP Server 版本(默认 '1.0.0') */
235
+ serverVersion?: string;
236
+ /** 将 AgentGraph 注册为 MCP 工具时的工具名前缀 */
237
+ toolPrefix?: string;
238
+ }
239
+ /** 单步追踪记录 */
240
+ interface TraceStep {
241
+ /** 步骤序号(从 1 开始) */
242
+ step: number;
243
+ /** 执行的 Agent ID */
244
+ agentId: string;
245
+ /** Agent 名称 */
246
+ agentName: string;
247
+ /** 执行开始时间(ms 时间戳) */
248
+ startTime: number;
249
+ /** 执行耗时(ms) */
250
+ duration: number;
251
+ /** 输入摘要 */
252
+ input: string;
253
+ /** 输出摘要 */
254
+ output: string;
255
+ /** 执行状态 */
256
+ state: NodeExecutionState;
257
+ /** 错误信息(仅失败时有) */
258
+ error?: string;
259
+ }
260
+ /** 图执行追踪记录 */
261
+ interface GraphTrace {
262
+ /** 追踪 ID */
263
+ traceId: string;
264
+ /** 图开始时间(ms 时间戳) */
265
+ startTime: number;
266
+ /** 图总耗时(ms) */
267
+ duration: number;
268
+ /** 各步骤记录 */
269
+ steps: TraceStep[];
270
+ /** 最终结果摘要 */
271
+ result: {
272
+ success: boolean;
273
+ content: string;
274
+ stopReason: string;
275
+ stepsCompleted: number;
276
+ };
277
+ }
278
+
279
+ /**
280
+ * core/context.ts - SharedContext 实现
281
+ *
282
+ * 提供 EventBus、ToolRegistry 和 SharedContext 的默认实现。
283
+ */
284
+
285
+ /** 简单同步事件总线实现 */
286
+ declare class SimpleEventBus implements EventBus {
287
+ private listeners;
288
+ on(event: string, listener: EventListener): this;
289
+ off(event: string, listener: EventListener): this;
290
+ emit(event: string, data?: unknown): this;
291
+ }
292
+ /** 简单工具注册表实现 */
293
+ declare class SimpleToolRegistry implements ToolRegistry {
294
+ private tools;
295
+ register(tool: Tool): this;
296
+ registerAll(tools: Tool[]): this;
297
+ get(name: string): Tool | undefined;
298
+ getAll(): Tool[];
299
+ has(name: string): boolean;
300
+ }
301
+ /** 创建默认 SharedContext */
302
+ declare function createSharedContext(init?: Partial<SharedContext>): SharedContext;
303
+
304
+ /**
305
+ * core/graph.ts - AgentGraph 实现
306
+ *
307
+ * 基于声明式 API(addNode/addEdge/setEntry/setFinish)构建图,
308
+ * 委托 GraphExecutor 执行。
309
+ */
310
+
311
+ /** 创建空的 AgentGraph,通过链式调用定义图结构 */
312
+ declare function createAgentGraph(): AgentGraph;
313
+
314
+ /**
315
+ * patterns/pipeline.ts - Pipeline 顺序链模式
316
+ *
317
+ * 将多个 Agent 按顺序串联:A → B → C → ...
318
+ * 前一个 Agent 的输出作为后一个 Agent 的输入。
319
+ */
320
+
321
+ /**
322
+ * 创建 Pipeline 顺序链
323
+ *
324
+ * @param agents - 按顺序排列的 Agent 节点列表
325
+ * @param opts - Pipeline 配置选项
326
+ * @returns AgentGraph 实例
327
+ */
328
+ declare function createPipeline(agents: AgentNode[], opts?: PipelineOpts): AgentGraph;
329
+
330
+ /**
331
+ * patterns/router.ts - Router 条件路由模式
332
+ *
333
+ * 路由器 Agent 根据输入选择目标 Agent 执行。
334
+ * 结构:Router → (条件匹配) → Target Agent
335
+ */
336
+
337
+ /**
338
+ * 创建 Router 条件路由
339
+ *
340
+ * @param router - 路由器 Agent(负责意图识别)
341
+ * @param targets - 目标 Agent 列表
342
+ * @param opts - Router 配置选项(必须提供 resolve 函数)
343
+ * @returns AgentGraph 实例
344
+ */
345
+ declare function createRouter(router: AgentNode, targets: AgentNode[], opts: RouterOpts): AgentGraph;
346
+
347
+ /**
348
+ * patterns/supervisor.ts - Supervisor 层级委派模式
349
+ *
350
+ * Supervisor Agent 拆解任务分配给 Worker Agents,
351
+ * 根据调度策略执行(parallel / sequential / auto)。
352
+ */
353
+
354
+ /**
355
+ * 创建 Supervisor 层级委派模式
356
+ *
357
+ * @param supervisor - Supervisor Agent(负责拆解任务并分配)
358
+ * @param workers - Worker Agent 列表(负责执行具体任务)
359
+ * @param opts - Supervisor 配置选项
360
+ * @returns AgentGraph 实例
361
+ */
362
+ declare function createSupervisor(supervisor: AgentNode, workers: AgentNode[], opts?: SupervisorOpts): AgentGraph;
363
+
364
+ /**
365
+ * patterns/debate.ts - Debate 对抗评审模式
366
+ *
367
+ * Proposer 和 Reviewer 循环辩论,直到收敛或达最大轮次。
368
+ */
369
+
370
+ /**
371
+ * 创建 Debate 对抗评审模式
372
+ *
373
+ * @param proposer - 生成/修复方 Agent
374
+ * @param reviewer - 审查方 Agent
375
+ * @param opts - Debate 配置选项(必须提供 convergeWhen)
376
+ * @returns AgentGraph 实例
377
+ */
378
+ declare function createDebate(proposer: AgentNode, reviewer: AgentNode, opts: DebateOpts): AgentGraph;
379
+
380
+ /**
381
+ * patterns/map-reduce.ts - MapReduce 并行聚合模式
382
+ *
383
+ * 将输入拆分为子任务,用 mapper 并行处理,再用 reducer 汇总。
384
+ */
385
+
386
+ /**
387
+ * 创建 MapReduce 并行聚合模式
388
+ *
389
+ * @param mapper - 映射方 Agent(处理单个子任务)
390
+ * @param reducer - 汇总方 Agent(合并所有 mapper 结果)
391
+ * @param opts - MapReduce 配置选项(必须提供 split 函数)
392
+ * @returns AgentGraph 实例
393
+ */
394
+ declare function createMapReduce(mapper: AgentNode, reducer: AgentNode, opts: MapReduceOpts): AgentGraph;
395
+
396
+ /**
397
+ * extensions/mcp-bridge.ts - MCPBridge Extension
398
+ *
399
+ * 将 AgentGraph 暴露为 MCP (Model Context Protocol) 工具,
400
+ * 使外部 MCP 客户端可以直接调用多 Agent 编排图。
401
+ *
402
+ * 设计原则:不依赖外部 MCP SDK,仅输出符合 MCP 规范的 JSON 结构,
403
+ * 由宿主环境(如 aipack CLI)负责实际的 MCP 传输层。
404
+ */
405
+
406
+ /** MCP 工具参数定义 */
407
+ interface MCPToolParameter {
408
+ name: string;
409
+ description: string;
410
+ type: 'string' | 'number' | 'boolean' | 'object' | 'array';
411
+ required?: boolean;
412
+ }
413
+ /** MCP 工具定义 */
414
+ interface MCPToolDefinition {
415
+ /** 工具名 */
416
+ name: string;
417
+ /** 工具描述 */
418
+ description: string;
419
+ /** 参数 schema */
420
+ parameters: MCPToolParameter[];
421
+ }
422
+ /** MCP 工具调用请求 */
423
+ interface MCPToolCallRequest {
424
+ /** 工具名 */
425
+ name: string;
426
+ /** 参数 */
427
+ arguments: Record<string, unknown>;
428
+ }
429
+ /** MCP 工具调用结果 */
430
+ interface MCPToolCallResult {
431
+ /** 是否错误 */
432
+ isError?: boolean;
433
+ /** 结果内容列表 */
434
+ content: Array<{
435
+ type: 'text' | 'image' | 'resource';
436
+ text?: string;
437
+ data?: string;
438
+ mimeType?: string;
439
+ }>;
440
+ }
441
+ /**
442
+ * MCPBridge:将 AgentGraph 注册为 MCP 工具
443
+ *
444
+ * 用法:
445
+ * ```typescript
446
+ * const bridge = new MCPBridge(graph, { toolPrefix: 'ma_' });
447
+ *
448
+ * // 获取工具列表(供 MCP Server 注册)
449
+ * const tools = bridge.listTools();
450
+ *
451
+ * // 处理工具调用
452
+ * const result = await bridge.handleCall({ name: 'ma_run', arguments: { input: '...' } });
453
+ * ```
454
+ */
455
+ declare class MCPBridge {
456
+ private graph;
457
+ private opts;
458
+ constructor(graph: AgentGraph, opts?: MCPBridgeOpts);
459
+ /** 获取 MCP Server 信息 */
460
+ getServerInfo(): {
461
+ name: string;
462
+ version: string;
463
+ };
464
+ /** 列出所有可用 MCP 工具 */
465
+ listTools(): MCPToolDefinition[];
466
+ /** 处理 MCP 工具调用 */
467
+ handleCall(request: MCPToolCallRequest): Promise<MCPToolCallResult>;
468
+ }
469
+ /** 创建 MCPBridge */
470
+ declare function createMCPBridge(graph: AgentGraph, opts?: MCPBridgeOpts): MCPBridge;
471
+
472
+ /**
473
+ * extensions/debug.ts - 可视化调试扩展
474
+ *
475
+ * 提供:
476
+ * 1. DOT 格式图结构导出(可用 Graphviz 渲染)
477
+ * 2. 执行 Trace 记录(GraphTrace)
478
+ * 3. 执行过程日志
479
+ */
480
+
481
+ /**
482
+ * GraphDebugger:图可视化调试工具
483
+ *
484
+ * 用法:
485
+ * ```typescript
486
+ * const debugger_ = new GraphDebugger(graph);
487
+ *
488
+ * // 导出 DOT 格式
489
+ * const dot = debugger_.toDOT();
490
+ *
491
+ * // 运行并记录 trace
492
+ * const trace = await debugger_.trace('用户输入');
493
+ *
494
+ * // 导出 trace 为 JSON
495
+ * const json = debugger_.traceToJSON(trace);
496
+ * ```
497
+ */
498
+ declare class GraphDebugger {
499
+ private graph;
500
+ private nodes;
501
+ private edges;
502
+ private entryId?;
503
+ constructor(graph: AgentGraph, nodes?: AgentNode[], edges?: AgentEdge[], entryId?: string);
504
+ /** 设置图元数据(供无法直接访问内部结构的场景使用) */
505
+ setGraphMeta(nodes: AgentNode[], edges: AgentEdge[], entryId?: string): void;
506
+ /** 导出为 DOT 格式 */
507
+ toDOT(): string;
508
+ /** 执行图并记录 Trace */
509
+ trace(input: string): Promise<GraphTrace>;
510
+ /** 将 Trace 转为 JSON 字符串 */
511
+ traceToJSON(trace: GraphTrace): string;
512
+ /** 将 Trace 转为可读的执行日志 */
513
+ traceToLog(trace: GraphTrace): string;
514
+ private truncate;
515
+ /** 找最后一个匹配 agentId 且状态为 running 的 step */
516
+ private findLastRunning;
517
+ /** 找最后一个匹配 agentId 的 step(不管状态) */
518
+ private findLastById;
519
+ }
520
+ /** 创建 GraphDebugger */
521
+ declare function createDebugger(graph: AgentGraph): GraphDebugger;
522
+
523
+ export { type AgentEdge, type AgentGraph, type AgentNode, type DebateOpts, type EventBus, type EventListener, GraphDebugger, type GraphExecutionState, type GraphTrace, MCPBridge, type MCPBridgeOpts, type MCPToolCallRequest, type MCPToolCallResult, type MCPToolDefinition, type MCPToolParameter, type MapReduceOpts, type MultiAgentEvent, type MultiAgentResult, type NodeExecutionState, type PipelineOpts, type RouterOpts, type ScheduleMode, type SharedContext, SimpleEventBus, SimpleToolRegistry, type SupervisorOpts, type ToolRegistry, type TraceStep, createAgentGraph, createDebate, createDebugger, createMCPBridge, createMapReduce, createPipeline, createRouter, createSharedContext, createSupervisor };