@cicctencent/agent-core 0.1.15 → 0.1.17

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.
Files changed (122) hide show
  1. package/README.md +1 -0
  2. package/dist/cjs/a2a/client.d.ts +32 -2
  3. package/dist/cjs/a2a/client.d.ts.map +1 -1
  4. package/dist/cjs/a2a/client.js +59 -10
  5. package/dist/cjs/a2a/client.js.map +1 -1
  6. package/dist/cjs/a2a/index.d.ts +4 -1
  7. package/dist/cjs/a2a/index.d.ts.map +1 -1
  8. package/dist/cjs/a2a/index.js +8 -1
  9. package/dist/cjs/a2a/index.js.map +1 -1
  10. package/dist/cjs/a2a/runner.d.ts +11 -0
  11. package/dist/cjs/a2a/runner.d.ts.map +1 -1
  12. package/dist/cjs/a2a/runner.js +157 -68
  13. package/dist/cjs/a2a/runner.js.map +1 -1
  14. package/dist/cjs/a2a/server.d.ts +50 -0
  15. package/dist/cjs/a2a/server.d.ts.map +1 -0
  16. package/dist/cjs/a2a/server.js +173 -0
  17. package/dist/cjs/a2a/server.js.map +1 -0
  18. package/dist/cjs/agent/history-manager.d.ts +8 -2
  19. package/dist/cjs/agent/history-manager.d.ts.map +1 -1
  20. package/dist/cjs/agent/history-manager.js +6 -6
  21. package/dist/cjs/agent/history-manager.js.map +1 -1
  22. package/dist/cjs/agent/runtime-builder.d.ts +83 -0
  23. package/dist/cjs/agent/runtime-builder.d.ts.map +1 -0
  24. package/dist/cjs/agent/runtime-builder.js +127 -0
  25. package/dist/cjs/agent/runtime-builder.js.map +1 -0
  26. package/dist/cjs/agent/types.d.ts +17 -0
  27. package/dist/cjs/agent/types.d.ts.map +1 -1
  28. package/dist/cjs/agent/types.js +43 -0
  29. package/dist/cjs/agent/types.js.map +1 -1
  30. package/dist/cjs/index.d.ts +13 -5
  31. package/dist/cjs/index.d.ts.map +1 -1
  32. package/dist/cjs/index.js +30 -6
  33. package/dist/cjs/index.js.map +1 -1
  34. package/dist/cjs/memory/types.d.ts +48 -0
  35. package/dist/cjs/memory/types.d.ts.map +1 -1
  36. package/dist/cjs/memory/types.js +52 -0
  37. package/dist/cjs/memory/types.js.map +1 -1
  38. package/dist/cjs/runtime/run-controller.d.ts +40 -0
  39. package/dist/cjs/runtime/run-controller.d.ts.map +1 -0
  40. package/dist/cjs/runtime/run-controller.js +93 -0
  41. package/dist/cjs/runtime/run-controller.js.map +1 -0
  42. package/dist/cjs/sandbox/local-sandbox.d.ts +59 -0
  43. package/dist/cjs/sandbox/local-sandbox.d.ts.map +1 -0
  44. package/dist/cjs/sandbox/local-sandbox.js +228 -0
  45. package/dist/cjs/sandbox/local-sandbox.js.map +1 -0
  46. package/dist/cjs/security/guard.d.ts +11 -0
  47. package/dist/cjs/security/guard.d.ts.map +1 -1
  48. package/dist/cjs/security/guard.js +46 -0
  49. package/dist/cjs/security/guard.js.map +1 -1
  50. package/dist/cjs/tool/builtin-tools.d.ts +22 -0
  51. package/dist/cjs/tool/builtin-tools.d.ts.map +1 -0
  52. package/dist/cjs/tool/builtin-tools.js +221 -0
  53. package/dist/cjs/tool/builtin-tools.js.map +1 -0
  54. package/dist/cjs/tool/registry.d.ts +76 -1
  55. package/dist/cjs/tool/registry.d.ts.map +1 -1
  56. package/dist/cjs/tool/registry.js +81 -0
  57. package/dist/cjs/tool/registry.js.map +1 -1
  58. package/dist/cjs/utils/event-adapter.d.ts +25 -0
  59. package/dist/cjs/utils/event-adapter.d.ts.map +1 -0
  60. package/dist/cjs/utils/event-adapter.js +93 -0
  61. package/dist/cjs/utils/event-adapter.js.map +1 -0
  62. package/dist/esm/a2a/client.d.ts +32 -2
  63. package/dist/esm/a2a/client.d.ts.map +1 -1
  64. package/dist/esm/a2a/client.js +58 -10
  65. package/dist/esm/a2a/client.js.map +1 -1
  66. package/dist/esm/a2a/index.d.ts +4 -1
  67. package/dist/esm/a2a/index.d.ts.map +1 -1
  68. package/dist/esm/a2a/index.js +2 -1
  69. package/dist/esm/a2a/index.js.map +1 -1
  70. package/dist/esm/a2a/runner.d.ts +11 -0
  71. package/dist/esm/a2a/runner.d.ts.map +1 -1
  72. package/dist/esm/a2a/runner.js +157 -68
  73. package/dist/esm/a2a/runner.js.map +1 -1
  74. package/dist/esm/a2a/server.d.ts +50 -0
  75. package/dist/esm/a2a/server.d.ts.map +1 -0
  76. package/dist/esm/a2a/server.js +165 -0
  77. package/dist/esm/a2a/server.js.map +1 -0
  78. package/dist/esm/agent/history-manager.d.ts +8 -2
  79. package/dist/esm/agent/history-manager.d.ts.map +1 -1
  80. package/dist/esm/agent/history-manager.js +6 -6
  81. package/dist/esm/agent/history-manager.js.map +1 -1
  82. package/dist/esm/agent/runtime-builder.d.ts +83 -0
  83. package/dist/esm/agent/runtime-builder.d.ts.map +1 -0
  84. package/dist/esm/agent/runtime-builder.js +120 -0
  85. package/dist/esm/agent/runtime-builder.js.map +1 -0
  86. package/dist/esm/agent/types.d.ts +17 -0
  87. package/dist/esm/agent/types.d.ts.map +1 -1
  88. package/dist/esm/agent/types.js +42 -1
  89. package/dist/esm/agent/types.js.map +1 -1
  90. package/dist/esm/index.d.ts +13 -5
  91. package/dist/esm/index.d.ts.map +1 -1
  92. package/dist/esm/index.js +6 -1
  93. package/dist/esm/index.js.map +1 -1
  94. package/dist/esm/memory/types.d.ts +48 -0
  95. package/dist/esm/memory/types.d.ts.map +1 -1
  96. package/dist/esm/memory/types.js +50 -1
  97. package/dist/esm/memory/types.js.map +1 -1
  98. package/dist/esm/runtime/run-controller.d.ts +40 -0
  99. package/dist/esm/runtime/run-controller.d.ts.map +1 -0
  100. package/dist/esm/runtime/run-controller.js +89 -0
  101. package/dist/esm/runtime/run-controller.js.map +1 -0
  102. package/dist/esm/sandbox/local-sandbox.d.ts +59 -0
  103. package/dist/esm/sandbox/local-sandbox.d.ts.map +1 -0
  104. package/dist/esm/sandbox/local-sandbox.js +188 -0
  105. package/dist/esm/sandbox/local-sandbox.js.map +1 -0
  106. package/dist/esm/security/guard.d.ts +11 -0
  107. package/dist/esm/security/guard.d.ts.map +1 -1
  108. package/dist/esm/security/guard.js +46 -0
  109. package/dist/esm/security/guard.js.map +1 -1
  110. package/dist/esm/tool/builtin-tools.d.ts +22 -0
  111. package/dist/esm/tool/builtin-tools.d.ts.map +1 -0
  112. package/dist/esm/tool/builtin-tools.js +214 -0
  113. package/dist/esm/tool/builtin-tools.js.map +1 -0
  114. package/dist/esm/tool/registry.d.ts +76 -1
  115. package/dist/esm/tool/registry.d.ts.map +1 -1
  116. package/dist/esm/tool/registry.js +81 -0
  117. package/dist/esm/tool/registry.js.map +1 -1
  118. package/dist/esm/utils/event-adapter.d.ts +25 -0
  119. package/dist/esm/utils/event-adapter.d.ts.map +1 -0
  120. package/dist/esm/utils/event-adapter.js +87 -0
  121. package/dist/esm/utils/event-adapter.js.map +1 -0
  122. package/package.json +1 -1
@@ -0,0 +1,221 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // Builtin Tools — 可选通用工具工厂
4
+ // ============================================================
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.createShellTools = createShellTools;
7
+ exports.createFileSystemTools = createFileSystemTools;
8
+ exports.createToolDocTool = createToolDocTool;
9
+ exports.createSkillLoaderTool = createSkillLoaderTool;
10
+ exports.createBuiltinTools = createBuiltinTools;
11
+ function createShellTools() {
12
+ return [
13
+ {
14
+ definition: {
15
+ type: 'function',
16
+ function: {
17
+ name: 'execute_command',
18
+ description: 'Execute a shell command through the injected ToolContext.shell executor.',
19
+ parameters: {
20
+ type: 'object',
21
+ properties: {
22
+ command: { type: 'string', description: 'Shell command to execute' },
23
+ timeout: { type: 'number', description: 'Timeout in milliseconds' },
24
+ },
25
+ required: ['command'],
26
+ },
27
+ },
28
+ },
29
+ executor: async (args, ctx) => {
30
+ const command = String(args.command || '').trim();
31
+ if (!command)
32
+ return 'ERROR: execute_command requires non-empty command.';
33
+ return ctx.shell.exec(command, Number(args.timeout) || undefined);
34
+ },
35
+ category: 'builtin',
36
+ concurrent: false,
37
+ },
38
+ {
39
+ definition: {
40
+ type: 'function',
41
+ function: {
42
+ name: 'read_terminal',
43
+ description: 'Read recent terminal output from the injected ToolContext.shell executor.',
44
+ parameters: {
45
+ type: 'object',
46
+ properties: { lines: { type: 'number', description: 'Number of lines to read' } },
47
+ },
48
+ },
49
+ },
50
+ executor: async (args, ctx) => ctx.shell.read(Number(args.lines) || 50),
51
+ category: 'builtin',
52
+ concurrent: true,
53
+ },
54
+ ];
55
+ }
56
+ function createFileSystemTools() {
57
+ return [
58
+ {
59
+ definition: {
60
+ type: 'function',
61
+ function: {
62
+ name: 'read_file',
63
+ description: 'Read a text file through the injected ToolContext.fs executor.',
64
+ parameters: {
65
+ type: 'object',
66
+ properties: { path: { type: 'string', description: 'File path to read' } },
67
+ required: ['path'],
68
+ },
69
+ },
70
+ },
71
+ executor: async (args, ctx) => {
72
+ if (!ctx.fs)
73
+ return 'Error: FileSystem executor not available';
74
+ const filePath = String(args.path || '').trim();
75
+ if (!filePath)
76
+ return 'Error: path is required.';
77
+ return ctx.fs.readFile(filePath);
78
+ },
79
+ category: 'builtin',
80
+ concurrent: true,
81
+ },
82
+ {
83
+ definition: {
84
+ type: 'function',
85
+ function: {
86
+ name: 'write_file',
87
+ description: 'Write text content to a file through the injected ToolContext.fs executor.',
88
+ parameters: {
89
+ type: 'object',
90
+ properties: {
91
+ path: { type: 'string', description: 'File path to write' },
92
+ content: { type: 'string', description: 'Text content' },
93
+ },
94
+ required: ['path', 'content'],
95
+ },
96
+ },
97
+ },
98
+ executor: async (args, ctx) => {
99
+ if (!ctx.fs)
100
+ return 'Error: FileSystem executor not available';
101
+ const filePath = String(args.path || '').trim();
102
+ if (!filePath)
103
+ return 'Error: path is required.';
104
+ await ctx.fs.writeFile(filePath, String(args.content ?? ''));
105
+ return `File written: ${filePath}`;
106
+ },
107
+ category: 'builtin',
108
+ concurrent: false,
109
+ },
110
+ {
111
+ definition: {
112
+ type: 'function',
113
+ function: {
114
+ name: 'append_file',
115
+ description: 'Append text content to a file through the injected ToolContext.fs executor.',
116
+ parameters: {
117
+ type: 'object',
118
+ properties: {
119
+ path: { type: 'string', description: 'File path to append' },
120
+ content: { type: 'string', description: 'Text content to append' },
121
+ },
122
+ required: ['path', 'content'],
123
+ },
124
+ },
125
+ },
126
+ executor: async (args, ctx) => {
127
+ if (!ctx.fs)
128
+ return 'Error: FileSystem executor not available';
129
+ const filePath = String(args.path || '').trim();
130
+ if (!filePath)
131
+ return 'Error: path is required.';
132
+ if (ctx.fs.appendFile)
133
+ await ctx.fs.appendFile(filePath, String(args.content ?? ''));
134
+ else {
135
+ let existing = '';
136
+ try {
137
+ existing = await ctx.fs.readFile(filePath);
138
+ }
139
+ catch {
140
+ existing = '';
141
+ }
142
+ await ctx.fs.writeFile(filePath, existing + String(args.content ?? ''));
143
+ }
144
+ return `Content appended to: ${filePath}`;
145
+ },
146
+ category: 'builtin',
147
+ concurrent: false,
148
+ },
149
+ ];
150
+ }
151
+ function createToolDocTool(registry) {
152
+ return {
153
+ definition: {
154
+ type: 'function',
155
+ function: {
156
+ name: 'read_tool_doc',
157
+ description: 'Read full schema/documentation for a registered tool. Use tool_name="list" to list names.',
158
+ parameters: {
159
+ type: 'object',
160
+ properties: { tool_name: { type: 'string', description: 'Tool name, or "list"' } },
161
+ required: ['tool_name'],
162
+ },
163
+ },
164
+ },
165
+ executor: async (args, ctx) => {
166
+ const toolRegistry = ctx.custom?.toolRegistry || registry;
167
+ if (!toolRegistry)
168
+ return 'Error: ToolRegistry not available';
169
+ const name = String(args.tool_name || '').trim();
170
+ if (name === 'list')
171
+ return toolRegistry.listNames().join('\n');
172
+ const tool = toolRegistry.get(name);
173
+ if (!tool)
174
+ return `Tool not found: ${name}`;
175
+ return JSON.stringify(tool.definition.function, null, 2);
176
+ },
177
+ category: 'builtin',
178
+ concurrent: true,
179
+ };
180
+ }
181
+ function createSkillLoaderTool(skillManager) {
182
+ return {
183
+ definition: {
184
+ type: 'function',
185
+ function: {
186
+ name: 'load_skill',
187
+ description: 'Load full instructions for an available skill by skill_id.',
188
+ parameters: {
189
+ type: 'object',
190
+ properties: { skill_id: { type: 'string', description: 'Skill id' } },
191
+ required: ['skill_id'],
192
+ },
193
+ },
194
+ },
195
+ executor: async (args, ctx) => {
196
+ const manager = ctx.custom?.skillManager || skillManager;
197
+ if (!manager)
198
+ return 'Error: SkillManager not available';
199
+ const id = String(args.skill_id || '').trim();
200
+ const skill = manager.get(id);
201
+ if (!skill)
202
+ return `Skill not found: ${id}`;
203
+ return skill.content || '';
204
+ },
205
+ category: 'builtin',
206
+ concurrent: true,
207
+ };
208
+ }
209
+ function createBuiltinTools(options = {}) {
210
+ const tools = [];
211
+ if (options.includeShell ?? true)
212
+ tools.push(...createShellTools());
213
+ if (options.includeFileSystem ?? true)
214
+ tools.push(...createFileSystemTools());
215
+ if (options.includeToolDoc ?? true)
216
+ tools.push(createToolDocTool(options.toolRegistry));
217
+ if (options.includeSkillLoader ?? true)
218
+ tools.push(createSkillLoaderTool(options.skillManager));
219
+ return tools;
220
+ }
221
+ //# sourceMappingURL=builtin-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builtin-tools.js","sourceRoot":"","sources":["../../../src/tool/builtin-tools.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import type { ToolDefinition, ToolExecutor, ToolContext, RegisteredTool, ToolCategory } from './types.js';
2
- /** defineTool 简化参数 */
2
+ /** defineTool 简化参数(OpenAI Function Calling 格式) */
3
3
  export interface DefineToolOptions {
4
4
  name: string;
5
5
  description: string;
@@ -7,6 +7,44 @@ export interface DefineToolOptions {
7
7
  executor: ToolExecutor;
8
8
  category?: ToolCategory;
9
9
  concurrent?: boolean;
10
+ metadata?: Record<string, unknown>;
11
+ }
12
+ /**
13
+ * defineFlatTool 简化参数(扁平格式,兼容 BI 项目风格)
14
+ *
15
+ * 扁平格式更直观:直接声明 id / name / description / parameters / execute,
16
+ * 内部自动转换为 OpenAI Function Calling 格式。
17
+ *
18
+ * @example
19
+ * registry.defineFlatTool({
20
+ * id: 'web_search',
21
+ * name: '网络搜索',
22
+ * description: 'Search the web for information',
23
+ * parameters: {
24
+ * type: 'object',
25
+ * properties: { query: { type: 'string', description: '...' } },
26
+ * required: ['query'],
27
+ * },
28
+ * execute: async (input, ctx) => { ... },
29
+ * });
30
+ */
31
+ export interface FlatToolOptions {
32
+ /** 工具唯一标识(将作为 OpenAI function name) */
33
+ id: string;
34
+ /** 工具显示名(仅用于展示,不影响 LLM 调用) */
35
+ name?: string;
36
+ /** 工具描述(给 LLM 理解用途) */
37
+ description: string;
38
+ /** 参数 Schema(JSON Schema 子集) */
39
+ parameters: ToolDefinition['function']['parameters'];
40
+ /** 执行函数 */
41
+ execute: ToolExecutor;
42
+ /** 工具分类 */
43
+ category?: ToolCategory;
44
+ /** 是否支持并行执行 */
45
+ concurrent?: boolean;
46
+ /** 扩展元数据 */
47
+ metadata?: Record<string, unknown>;
10
48
  }
11
49
  export declare class ToolRegistry {
12
50
  private tools;
@@ -28,10 +66,47 @@ export declare class ToolRegistry {
28
66
  * });
29
67
  */
30
68
  defineTool(options: DefineToolOptions): void;
69
+ /**
70
+ * 扁平格式注册(兼容 BI 项目风格,内部自动转换为 OpenAI Function Calling 格式)
71
+ *
72
+ * @example
73
+ * registry.defineFlatTool({
74
+ * id: 'search_data_sources',
75
+ * description: '搜索候选数据源',
76
+ * parameters: { type: 'object', properties: { query: { type: 'string', description: '...' } } },
77
+ * execute: async (args, ctx) => { ... },
78
+ * });
79
+ */
80
+ defineFlatTool(options: FlatToolOptions): void;
31
81
  /** 批量注册 */
32
82
  registerAll(tools: RegisteredTool[]): void;
33
83
  /** 注销工具 */
34
84
  unregister(name: string): void;
85
+ /** 克隆当前注册表(浅拷贝工具定义与 executor 引用) */
86
+ clone(filter?: {
87
+ category?: ToolCategory;
88
+ names?: string[];
89
+ predicate?: (tool: RegisteredTool) => boolean;
90
+ }): ToolRegistry;
91
+ /** 按分类生成新注册表 */
92
+ filterByCategory(category: ToolCategory): ToolRegistry;
93
+ /** 按 metadata 条件生成新注册表 */
94
+ filterByMetadata(predicate: (metadata: Record<string, unknown>, tool: RegisteredTool) => boolean): ToolRegistry;
95
+ /** 导出扁平工具定义(用于使用方适配旧 API 或 UI 展示) */
96
+ toFlatTools(): Array<Omit<FlatToolOptions, 'execute'> & {
97
+ execute: ToolExecutor;
98
+ }>;
99
+ /** 转为 OpenAI function calling tools 格式 */
100
+ toOpenAITools(filter?: {
101
+ category?: ToolCategory;
102
+ names?: string[];
103
+ }): ToolDefinition[];
104
+ /** 生成工具摘要,适合注入 prompt 或 UI 列表 */
105
+ summary(options?: {
106
+ maxDescriptionLength?: number;
107
+ category?: ToolCategory;
108
+ names?: string[];
109
+ }): string;
35
110
  /** 获取指定工具 */
36
111
  get(name: string): RegisteredTool | undefined;
37
112
  /** 获取所有工具定义(传给 LLM) */
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/tool/registry.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1G,sBAAsB;AACtB,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC,YAAY,CAAC,CAAC;IACrD,QAAQ,EAAE,YAAY,CAAC;IACvB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,KAAK,CAAqC;IAElD,WAAW;IACX,QAAQ,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAKpC;;;;;;;;;;;;;;OAcG;IACH,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI;IAgB5C,WAAW;IACX,WAAW,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,IAAI;IAM1C,WAAW;IACX,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI9B,aAAa;IACb,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAI7C,uBAAuB;IACvB,cAAc,CAAC,MAAM,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,YAAY,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,cAAc,EAAE;IAcxF,gCAAgC;IAC1B,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC;IAM7F,kBAAkB;IAClB,SAAS,IAAI,MAAM,EAAE;IAIrB,eAAe;IACf,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;CAG3B"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/tool/registry.ts"],"names":[],"mappings":"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"}
@@ -39,6 +39,34 @@ class ToolRegistry {
39
39
  executor: options.executor,
40
40
  category: options.category ?? 'custom',
41
41
  concurrent: options.concurrent,
42
+ metadata: options.metadata,
43
+ });
44
+ }
45
+ /**
46
+ * 扁平格式注册(兼容 BI 项目风格,内部自动转换为 OpenAI Function Calling 格式)
47
+ *
48
+ * @example
49
+ * registry.defineFlatTool({
50
+ * id: 'search_data_sources',
51
+ * description: '搜索候选数据源',
52
+ * parameters: { type: 'object', properties: { query: { type: 'string', description: '...' } } },
53
+ * execute: async (args, ctx) => { ... },
54
+ * });
55
+ */
56
+ defineFlatTool(options) {
57
+ this.register({
58
+ definition: {
59
+ type: 'function',
60
+ function: {
61
+ name: options.id,
62
+ description: options.description,
63
+ parameters: options.parameters,
64
+ },
65
+ },
66
+ executor: options.execute,
67
+ category: options.category ?? 'custom',
68
+ concurrent: options.concurrent,
69
+ metadata: { ...options.metadata, ...(options.name ? { displayName: options.name } : {}) },
42
70
  });
43
71
  }
44
72
  /** 批量注册 */
@@ -51,6 +79,59 @@ class ToolRegistry {
51
79
  unregister(name) {
52
80
  this.tools.delete(name);
53
81
  }
82
+ /** 克隆当前注册表(浅拷贝工具定义与 executor 引用) */
83
+ clone(filter) {
84
+ const registry = new ToolRegistry();
85
+ const names = filter?.names ? new Set(filter.names) : undefined;
86
+ for (const tool of this.tools.values()) {
87
+ const name = tool.definition.function.name;
88
+ if (filter?.category && tool.category !== filter.category)
89
+ continue;
90
+ if (names && !names.has(name))
91
+ continue;
92
+ if (filter?.predicate && !filter.predicate(tool))
93
+ continue;
94
+ registry.register(tool);
95
+ }
96
+ return registry;
97
+ }
98
+ /** 按分类生成新注册表 */
99
+ filterByCategory(category) {
100
+ return this.clone({ category });
101
+ }
102
+ /** 按 metadata 条件生成新注册表 */
103
+ filterByMetadata(predicate) {
104
+ return this.clone({ predicate: tool => predicate(tool.metadata || {}, tool) });
105
+ }
106
+ /** 导出扁平工具定义(用于使用方适配旧 API 或 UI 展示) */
107
+ toFlatTools() {
108
+ return [...this.tools.values()].map(tool => ({
109
+ id: tool.definition.function.name,
110
+ name: tool.metadata?.displayName,
111
+ description: tool.definition.function.description,
112
+ parameters: tool.definition.function.parameters,
113
+ execute: tool.executor,
114
+ category: tool.category,
115
+ concurrent: tool.concurrent,
116
+ metadata: tool.metadata,
117
+ }));
118
+ }
119
+ /** 转为 OpenAI function calling tools 格式 */
120
+ toOpenAITools(filter) {
121
+ return this.getDefinitions(filter);
122
+ }
123
+ /** 生成工具摘要,适合注入 prompt 或 UI 列表 */
124
+ summary(options = {}) {
125
+ const max = options.maxDescriptionLength ?? 120;
126
+ const defs = this.getDefinitions({ category: options.category, names: options.names });
127
+ if (defs.length === 0)
128
+ return 'No tools available.';
129
+ return defs.map(def => {
130
+ const desc = def.function.description || '';
131
+ const shortDesc = desc.length > max ? `${desc.slice(0, max)}...` : desc;
132
+ return `- ${def.function.name}: ${shortDesc}`;
133
+ }).join('\n');
134
+ }
54
135
  /** 获取指定工具 */
55
136
  get(name) {
56
137
  return this.tools.get(name);
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/tool/registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/tool/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import type { AgentEvent, TokenUsage } from '../types.js';
2
+ import type { ToolRegistry } from '../tool/registry.js';
3
+ export interface MappedAgentEvent {
4
+ event: string;
5
+ data: unknown;
6
+ }
7
+ export type AgentEventPreset = 'core' | 'sse' | 'bi' | 'codebuddy-like';
8
+ export interface AgentEventAdapterOptions {
9
+ preset?: AgentEventPreset;
10
+ toolRegistry?: ToolRegistry;
11
+ resolveToolDisplayName?: (toolName: string, args: Record<string, unknown>, registry?: ToolRegistry) => string;
12
+ includeTimestamps?: boolean;
13
+ }
14
+ export interface AgentEventCollectorState {
15
+ fullContent: string;
16
+ reasoningText: string;
17
+ toolCallCount: number;
18
+ stepCount: number;
19
+ usage?: TokenUsage;
20
+ }
21
+ export declare function createAgentEventCollectorState(): AgentEventCollectorState;
22
+ export declare function defaultResolveToolDisplayName(toolName: string, _args: Record<string, unknown>, registry?: ToolRegistry): string;
23
+ export declare function mapAgentEvent(event: AgentEvent, state?: AgentEventCollectorState, options?: AgentEventAdapterOptions): MappedAgentEvent | null;
24
+ export declare function mapAgentEventStream(events: AsyncIterable<AgentEvent>, options?: AgentEventAdapterOptions): AsyncGenerator<MappedAgentEvent>;
25
+ //# sourceMappingURL=event-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-adapter.d.ts","sourceRoot":"","sources":["../../../src/utils/event-adapter.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;CACf;AAED,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,KAAK,GAAG,IAAI,GAAG,gBAAgB,CAAC;AAExE,MAAM,WAAW,wBAAwB;IACvC,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,sBAAsB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,CAAC,EAAE,YAAY,KAAK,MAAM,CAAC;IAC9G,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,MAAM,WAAW,wBAAwB;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,UAAU,CAAC;CACpB;AAED,wBAAgB,8BAA8B,IAAI,wBAAwB,CAEzE;AAED,wBAAgB,6BAA6B,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,CAAC,EAAE,YAAY,GAAG,MAAM,CAG/H;AAED,wBAAgB,aAAa,CAC3B,KAAK,EAAE,UAAU,EACjB,KAAK,GAAE,wBAA2D,EAClE,OAAO,GAAE,wBAA6B,GACrC,gBAAgB,GAAG,IAAI,CAoEzB;AAED,wBAAuB,mBAAmB,CACxC,MAAM,EAAE,aAAa,CAAC,UAAU,CAAC,EACjC,OAAO,GAAE,wBAA6B,GACrC,cAAc,CAAC,gBAAgB,CAAC,CAMlC"}
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // AgentEventAdapter — AgentEvent 到通用 UI/SSE 事件的映射
4
+ // ============================================================
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.createAgentEventCollectorState = createAgentEventCollectorState;
7
+ exports.defaultResolveToolDisplayName = defaultResolveToolDisplayName;
8
+ exports.mapAgentEvent = mapAgentEvent;
9
+ exports.mapAgentEventStream = mapAgentEventStream;
10
+ function createAgentEventCollectorState() {
11
+ return { fullContent: '', reasoningText: '', toolCallCount: 0, stepCount: 0 };
12
+ }
13
+ function defaultResolveToolDisplayName(toolName, _args, registry) {
14
+ const tool = registry?.get(toolName);
15
+ return tool?.metadata?.displayName || toolName;
16
+ }
17
+ function mapAgentEvent(event, state = createAgentEventCollectorState(), options = {}) {
18
+ const preset = options.preset ?? 'sse';
19
+ const resolveName = options.resolveToolDisplayName ?? defaultResolveToolDisplayName;
20
+ const withMeta = (data) => options.includeTimestamps ? { ...data, timestamp: event.timestamp, sessionId: event.sessionId } : data;
21
+ if (preset === 'core')
22
+ return { event: event.type, data: event };
23
+ switch (event.type) {
24
+ case 'thinking': {
25
+ const content = event.content || '';
26
+ state.reasoningText += content;
27
+ return { event: preset === 'bi' ? 'reasoning' : 'reasoning', data: options.includeTimestamps ? withMeta({ content }) : content };
28
+ }
29
+ case 'message': {
30
+ const content = event.content || '';
31
+ state.fullContent += content;
32
+ return { event: preset === 'bi' ? 'content' : 'content', data: options.includeTimestamps ? withMeta({ content }) : content };
33
+ }
34
+ case 'tool_call': {
35
+ state.toolCallCount++;
36
+ return {
37
+ event: preset === 'bi' ? 'tool-call' : 'tool-call',
38
+ data: withMeta({
39
+ toolCallId: event.callId,
40
+ toolName: event.tool,
41
+ displayName: resolveName(event.tool, event.args || {}, options.toolRegistry),
42
+ input: event.args || {},
43
+ startedAt: Date.now(),
44
+ }),
45
+ };
46
+ }
47
+ case 'tool_result': {
48
+ return {
49
+ event: preset === 'bi' ? 'tool-result' : 'tool-result',
50
+ data: withMeta({
51
+ toolCallId: event.callId,
52
+ toolName: event.tool,
53
+ input: {},
54
+ output: event.result,
55
+ duration: event.duration,
56
+ error: event.isError ? event.result : undefined,
57
+ completedAt: Date.now(),
58
+ }),
59
+ };
60
+ }
61
+ case 'done': {
62
+ state.stepCount = event.iterations || state.stepCount;
63
+ state.usage = event.usage;
64
+ return {
65
+ event: 'done',
66
+ data: withMeta({
67
+ text: state.fullContent || event.content || '',
68
+ steps: state.stepCount,
69
+ toolCalls: state.toolCallCount,
70
+ reasoning: state.reasoningText || undefined,
71
+ usage: event.usage,
72
+ }),
73
+ };
74
+ }
75
+ case 'error':
76
+ return { event: 'error', data: withMeta({ error: event.error || 'Unknown error', recoverable: event.recoverable }) };
77
+ case 'steering':
78
+ return { event: 'steering', data: withMeta({ messages: event.messages, count: event.count }) };
79
+ case 'retry':
80
+ return { event: 'retry', data: withMeta({ attempt: event.attempt, maxRetries: event.maxRetries, delay: event.delay, error: event.error, provider: event.provider }) };
81
+ default:
82
+ return null;
83
+ }
84
+ }
85
+ async function* mapAgentEventStream(events, options = {}) {
86
+ const state = createAgentEventCollectorState();
87
+ for await (const event of events) {
88
+ const mapped = mapAgentEvent(event, state, options);
89
+ if (mapped)
90
+ yield mapped;
91
+ }
92
+ }
93
+ //# sourceMappingURL=event-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-adapter.js","sourceRoot":"","sources":["../../../src/utils/event-adapter.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,33 @@
1
1
  import type { A2AAgentCard, A2ASendTaskParams, A2ATask, A2ATaskEvent } from './types.js';
2
+ /**
3
+ * 认证配置(统一 bearer / basic / apiKey / custom 四种方式)
4
+ *
5
+ * value 支持 `${env.VAR_NAME}` 模板,运行时从环境变量读取敏感凭证。
6
+ */
7
+ export interface AuthConfig {
8
+ /** 认证方式 */
9
+ type: 'bearer' | 'basic' | 'apiKey' | 'custom';
10
+ /** 认证凭证值(支持 `${env.VAR_NAME}` 模板语法) */
11
+ value: string;
12
+ /** apiKey/custom 模式下的 header 名称(如 X-API-Key) */
13
+ name?: string;
14
+ }
15
+ /** 将 AuthConfig 转为 HTTP 请求头 */
16
+ export declare function buildAuthHeaders(auth?: AuthConfig | null): Record<string, string>;
2
17
  /** A2A 客户端配置 */
3
18
  export interface A2AClientOptions {
4
19
  /** 请求超时(毫秒),默认 300000(5分钟) */
5
20
  timeout?: number;
21
+ /** SSE 连接超时(毫秒),默认 30000(30秒) */
22
+ connectTimeout?: number;
23
+ /** SSE 逐 chunk 读取超时(毫秒),默认 60000(60秒无数据视为流中断) */
24
+ chunkTimeout?: number;
6
25
  /** 自定义 fetch 实现(默认使用 globalThis.fetch) */
7
26
  fetch?: typeof fetch;
8
27
  /** 自定义请求头(如认证 token) */
9
28
  headers?: Record<string, string>;
29
+ /** 认证配置(自动转为 headers,与 headers 合并) */
30
+ auth?: AuthConfig;
10
31
  }
11
32
  /**
12
33
  * 轻量 A2A 协议客户端
@@ -18,6 +39,8 @@ export interface A2AClientOptions {
18
39
  */
19
40
  export declare class A2AClient {
20
41
  private timeout;
42
+ private connectTimeout;
43
+ private chunkTimeout;
21
44
  private fetchFn;
22
45
  private headers;
23
46
  constructor(options?: A2AClientOptions);
@@ -31,6 +54,13 @@ export declare class A2AClient {
31
54
  /**
32
55
  * 流式发送任务(tasks/sendSubscribe),通过回调逐步接收事件
33
56
  * 返回最后一个 status-update 事件(通常为 final 事件),用于提取最终结果
57
+ *
58
+ * 增强特性:
59
+ * - connectTimeout: SSE 连接超时(默认 30s)
60
+ * - chunkTimeout: 逐 chunk 读取超时(默认 60s 无数据视为流中断)
61
+ * - 外部 AbortSignal 联动(前端断开时中止连接和读取)
62
+ * - 流异常时保留已接收事件(优雅降级)
63
+ *
34
64
  * @param abortSignal 外部中止信号(前端断开时中止 SSE 读取)
35
65
  */
36
66
  sendTaskStreaming(agentUrl: string, params: A2ASendTaskParams, onEvent?: (event: A2ATaskEvent) => void, abortSignal?: AbortSignal): Promise<A2ATaskEvent | null>;
@@ -42,8 +72,8 @@ export declare class A2AClient {
42
72
  private resolveAgentCardUrl;
43
73
  /** 发送 JSON-RPC 请求 */
44
74
  private jsonRpcCall;
45
- /** 带超时的 reader.read()(每次读取单独计时,收到数据即重置) */
46
- private readWithTimeout;
75
+ /** chunkTimeout 的 reader.read()(每次读取单独计时,收到数据即重置) */
76
+ private readChunkWithTimeout;
47
77
  /** 带超时的 fetch */
48
78
  private fetchWithTimeout;
49
79
  }