@bowenqt/qiniu-ai-sdk 0.33.0 → 0.38.0

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 (155) hide show
  1. package/README.md +58 -10
  2. package/README.zh-CN.md +35 -2
  3. package/bin/qiniu-ai.mjs +13 -0
  4. package/dist/ai/a2a/expert.d.ts +15 -3
  5. package/dist/ai/a2a/expert.d.ts.map +1 -1
  6. package/dist/ai/a2a/expert.js +46 -32
  7. package/dist/ai/a2a/expert.js.map +1 -1
  8. package/dist/ai/a2a/expert.mjs +46 -32
  9. package/dist/ai/a2a/types.d.ts +2 -2
  10. package/dist/ai/a2a/types.d.ts.map +1 -1
  11. package/dist/ai/agent-graph.d.ts +3 -0
  12. package/dist/ai/agent-graph.d.ts.map +1 -1
  13. package/dist/ai/agent-graph.js +17 -7
  14. package/dist/ai/agent-graph.js.map +1 -1
  15. package/dist/ai/agent-graph.mjs +17 -7
  16. package/dist/ai/create-agent.d.ts +13 -1
  17. package/dist/ai/create-agent.d.ts.map +1 -1
  18. package/dist/ai/create-agent.js +147 -8
  19. package/dist/ai/create-agent.js.map +1 -1
  20. package/dist/ai/create-agent.mjs +147 -8
  21. package/dist/ai/generate-text.d.ts +15 -0
  22. package/dist/ai/generate-text.d.ts.map +1 -1
  23. package/dist/ai/generate-text.js +4 -9
  24. package/dist/ai/generate-text.js.map +1 -1
  25. package/dist/ai/generate-text.mjs +4 -9
  26. package/dist/ai/nodes/execute-node.d.ts.map +1 -1
  27. package/dist/ai/nodes/execute-node.js +16 -0
  28. package/dist/ai/nodes/execute-node.js.map +1 -1
  29. package/dist/ai/nodes/execute-node.mjs +16 -0
  30. package/dist/ai/tool-approval.d.ts +6 -0
  31. package/dist/ai/tool-approval.d.ts.map +1 -1
  32. package/dist/ai/tool-approval.js +21 -0
  33. package/dist/ai/tool-approval.js.map +1 -1
  34. package/dist/ai/tool-approval.mjs +21 -0
  35. package/dist/browser/index.js +1 -0
  36. package/dist/browser/index.js.map +1 -1
  37. package/dist/browser/index.mjs +1 -0
  38. package/dist/cli/skill-cli.d.ts +23 -0
  39. package/dist/cli/skill-cli.d.ts.map +1 -0
  40. package/dist/cli/skill-cli.js +335 -0
  41. package/dist/cli/skill-cli.js.map +1 -0
  42. package/dist/cli/skill-cli.mjs +295 -0
  43. package/dist/client.d.ts +16 -0
  44. package/dist/client.d.ts.map +1 -1
  45. package/dist/client.js +17 -0
  46. package/dist/client.js.map +1 -1
  47. package/dist/client.mjs +17 -0
  48. package/dist/index.d.ts +5 -0
  49. package/dist/index.d.ts.map +1 -1
  50. package/dist/index.js +14 -3
  51. package/dist/index.js.map +1 -1
  52. package/dist/index.mjs +5 -0
  53. package/dist/lib/child-transport.d.ts +56 -0
  54. package/dist/lib/child-transport.d.ts.map +1 -0
  55. package/dist/lib/child-transport.js +176 -0
  56. package/dist/lib/child-transport.js.map +1 -0
  57. package/dist/lib/child-transport.mjs +172 -0
  58. package/dist/lib/mcp-host-types.d.ts +79 -0
  59. package/dist/lib/mcp-host-types.d.ts.map +1 -0
  60. package/dist/lib/mcp-host-types.js +11 -0
  61. package/dist/lib/mcp-host-types.js.map +1 -0
  62. package/dist/lib/mcp-host-types.mjs +10 -0
  63. package/dist/lib/tool-registry.d.ts +5 -0
  64. package/dist/lib/tool-registry.d.ts.map +1 -1
  65. package/dist/lib/tool-registry.js +14 -0
  66. package/dist/lib/tool-registry.js.map +1 -1
  67. package/dist/lib/tool-registry.mjs +14 -0
  68. package/dist/lib/tool-schema.d.ts +49 -0
  69. package/dist/lib/tool-schema.d.ts.map +1 -0
  70. package/dist/lib/tool-schema.js +273 -0
  71. package/dist/lib/tool-schema.js.map +1 -0
  72. package/dist/lib/tool-schema.mjs +269 -0
  73. package/dist/lib/types.d.ts +4 -0
  74. package/dist/lib/types.d.ts.map +1 -1
  75. package/dist/lib/version.d.ts +3 -0
  76. package/dist/lib/version.d.ts.map +1 -0
  77. package/dist/lib/version.js +6 -0
  78. package/dist/lib/version.js.map +1 -0
  79. package/dist/lib/version.mjs +3 -0
  80. package/dist/modules/mcp/client.d.ts +4 -0
  81. package/dist/modules/mcp/client.d.ts.map +1 -1
  82. package/dist/modules/mcp/client.js +4 -0
  83. package/dist/modules/mcp/client.js.map +1 -1
  84. package/dist/modules/mcp/client.mjs +4 -0
  85. package/dist/modules/sandbox/index.d.ts +61 -0
  86. package/dist/modules/sandbox/index.d.ts.map +1 -0
  87. package/dist/modules/sandbox/index.js +121 -0
  88. package/dist/modules/sandbox/index.js.map +1 -0
  89. package/dist/modules/sandbox/index.mjs +99 -0
  90. package/dist/modules/sandbox/sandbox.d.ts +211 -0
  91. package/dist/modules/sandbox/sandbox.d.ts.map +1 -0
  92. package/dist/modules/sandbox/sandbox.js +685 -0
  93. package/dist/modules/sandbox/sandbox.js.map +1 -0
  94. package/dist/modules/sandbox/sandbox.mjs +677 -0
  95. package/dist/modules/sandbox/templates.d.ts +55 -0
  96. package/dist/modules/sandbox/templates.d.ts.map +1 -0
  97. package/dist/modules/sandbox/templates.js +109 -0
  98. package/dist/modules/sandbox/templates.js.map +1 -0
  99. package/dist/modules/sandbox/templates.mjs +105 -0
  100. package/dist/modules/sandbox/types.d.ts +324 -0
  101. package/dist/modules/sandbox/types.d.ts.map +1 -0
  102. package/dist/modules/sandbox/types.js +107 -0
  103. package/dist/modules/sandbox/types.js.map +1 -0
  104. package/dist/modules/sandbox/types.mjs +99 -0
  105. package/dist/modules/skills/installer.d.ts +44 -0
  106. package/dist/modules/skills/installer.d.ts.map +1 -0
  107. package/dist/modules/skills/installer.js +102 -0
  108. package/dist/modules/skills/installer.js.map +1 -0
  109. package/dist/modules/skills/installer.mjs +65 -0
  110. package/dist/modules/skills/loader.d.ts +1 -5
  111. package/dist/modules/skills/loader.d.ts.map +1 -1
  112. package/dist/modules/skills/loader.js +4 -18
  113. package/dist/modules/skills/loader.js.map +1 -1
  114. package/dist/modules/skills/loader.mjs +4 -18
  115. package/dist/modules/skills/lockfile.d.ts +43 -0
  116. package/dist/modules/skills/lockfile.d.ts.map +1 -0
  117. package/dist/modules/skills/lockfile.js +81 -0
  118. package/dist/modules/skills/lockfile.js.map +1 -0
  119. package/dist/modules/skills/lockfile.mjs +43 -0
  120. package/dist/modules/skills/manifest.d.ts +36 -0
  121. package/dist/modules/skills/manifest.d.ts.map +1 -1
  122. package/dist/modules/skills/manifest.js +22 -0
  123. package/dist/modules/skills/manifest.js.map +1 -1
  124. package/dist/modules/skills/manifest.mjs +21 -0
  125. package/dist/modules/skills/reference-mode.d.ts +29 -0
  126. package/dist/modules/skills/reference-mode.d.ts.map +1 -0
  127. package/dist/modules/skills/reference-mode.js +56 -0
  128. package/dist/modules/skills/reference-mode.js.map +1 -0
  129. package/dist/modules/skills/reference-mode.mjs +53 -0
  130. package/dist/modules/skills/registry-protocol.d.ts +57 -0
  131. package/dist/modules/skills/registry-protocol.d.ts.map +1 -0
  132. package/dist/modules/skills/registry-protocol.js +26 -0
  133. package/dist/modules/skills/registry-protocol.js.map +1 -0
  134. package/dist/modules/skills/registry-protocol.mjs +22 -0
  135. package/dist/modules/skills/registry.d.ts +39 -2
  136. package/dist/modules/skills/registry.d.ts.map +1 -1
  137. package/dist/modules/skills/registry.js +158 -4
  138. package/dist/modules/skills/registry.js.map +1 -1
  139. package/dist/modules/skills/registry.mjs +158 -4
  140. package/dist/modules/skills/validator.d.ts +31 -0
  141. package/dist/modules/skills/validator.d.ts.map +1 -0
  142. package/dist/modules/skills/validator.js +94 -0
  143. package/dist/modules/skills/validator.js.map +1 -0
  144. package/dist/modules/skills/validator.mjs +57 -0
  145. package/dist/node/index.d.ts +8 -1
  146. package/dist/node/index.d.ts.map +1 -1
  147. package/dist/node/index.js +17 -1
  148. package/dist/node/index.js.map +1 -1
  149. package/dist/node/index.mjs +7 -0
  150. package/dist/node/mcp-host.d.ts +56 -0
  151. package/dist/node/mcp-host.d.ts.map +1 -0
  152. package/dist/node/mcp-host.js +233 -0
  153. package/dist/node/mcp-host.js.map +1 -0
  154. package/dist/node/mcp-host.mjs +229 -0
  155. package/package.json +5 -3
package/README.md CHANGED
@@ -35,14 +35,17 @@
35
35
  ### Advanced Capabilities
36
36
  - 📋 **Skills Injection** — Markdown-based agent knowledge (Claude Skills compatible)
37
37
  - 🏪 **Skill Marketplace** — Remote skill loading with SHA256 integrity verification (v0.32.0+)
38
- - 🔗 **MCP Client** — Model Context Protocol with stdio + HTTP + OAuth 2.0 support
38
+ - 🔐 **Security Hardening** — Atomic remote install, cumulative size limits, deny-first tool policy (v0.38.0+)
39
+ - ⚡ **MCP Tool Policy** — SDK-native timeout, progress reset, output truncation per server (v0.38.0+)
40
+ - 🔗 **MCP Host** — `NodeMCPHost` with stdio + HTTP transport + per-server tool policies
39
41
  - 🖥️ **MCP Server** — Built-in Qiniu MCP server for OCR/Censor/Vframe tools
40
42
  - 💾 **Checkpointer** — State persistence (Memory, Redis, PostgreSQL, Kodo)
41
43
  - 🧠 **Memory Manager** — Short-term + long-term memory with LLM summarization
42
- - ✅ **Tool Approval (HITL)** — Human-in-the-loop for sensitive operations
44
+ - ✅ **Tool Approval (HITL)** — Human-in-the-loop with deny-first source policy (v0.38.0+)
43
45
  - ⏸️ **Interrupt/Resume** — Resumable execution with checkpoint-based restore
44
46
  - 📊 **Structured Telemetry** — MetricsCollector with Prometheus format export (v0.32.0+)
45
47
  - 📋 **Log Export** — Request log export with filtering and pagination (v0.36.0+)
48
+ - 📦 **Cloud Sandbox** — Secure code execution with commands, filesystem, and PTY (v0.37.0+)
46
49
  - 🔌 **Vercel AI SDK Adapter** — Drop-in replacement for Vercel AI SDK
47
50
 
48
51
  ---
@@ -271,25 +274,31 @@ const handler = createMetricsHandler(metrics);
271
274
  // GET /metrics → Prometheus format output
272
275
  ```
273
276
 
274
- ### MCP Client (stdio + HTTP)
277
+ ### MCP Host with Tool Policy (v0.38.0+)
275
278
 
276
279
  ```typescript
277
- import { MCPClient } from '@bowenqt/qiniu-ai-sdk';
280
+ import { NodeMCPHost } from '@bowenqt/qiniu-ai-sdk/node';
278
281
 
279
- const mcpClient = new MCPClient({
282
+ const host = new NodeMCPHost({
280
283
  servers: [
281
284
  {
282
285
  name: 'github',
283
286
  transport: 'stdio',
284
287
  command: 'npx',
285
288
  args: ['-y', '@modelcontextprotocol/server-github'],
286
- token: process.env.GITHUB_TOKEN,
289
+ toolPolicy: {
290
+ timeout: 15000, // SDK-native request timeout
291
+ resetTimeoutOnProgress: true, // Reset on progress notifications
292
+ maxTotalTimeout: 120000, // Absolute ceiling
293
+ maxOutputLength: 500_000, // Output truncation
294
+ requiresApproval: false, // HITL per server
295
+ },
287
296
  },
288
297
  ],
289
298
  });
290
299
 
291
- await mcpClient.connect();
292
- const tools = mcpClient.getAllTools();
300
+ await host.connect();
301
+ const tools = host.getTools();
293
302
  ```
294
303
 
295
304
  ### Checkpointer (State Persistence)
@@ -330,6 +339,36 @@ setGlobalTracer(otelTracer);
330
339
  // - agent_graph.execute
331
340
  ```
332
341
 
342
+ ### Cloud Sandbox (v0.37.0+)
343
+
344
+ ```typescript
345
+ import { QiniuAI } from '@bowenqt/qiniu-ai-sdk';
346
+
347
+ const client = new QiniuAI({ apiKey: process.env.QINIU_API_KEY || '' });
348
+
349
+ // Create sandbox and wait for readiness
350
+ const instance = await client.sandbox.createAndWait(
351
+ { templateId: 'base' },
352
+ { timeoutMs: 60_000 },
353
+ );
354
+
355
+ // Run commands
356
+ const result = await instance.commands.run('echo hello', {
357
+ cwd: '/tmp',
358
+ envs: { MY_VAR: 'test' },
359
+ });
360
+ console.log(result.stdout); // 'hello\n'
361
+ console.log(result.exitCode); // 0
362
+
363
+ // File operations
364
+ await instance.files.write('/tmp/data.txt', 'Hello from SDK');
365
+ const content = await instance.files.readText('/tmp/data.txt');
366
+ const entries = await instance.files.list('/tmp');
367
+
368
+ // Cleanup
369
+ await instance.kill();
370
+ ```
371
+
333
372
  ---
334
373
 
335
374
  ## 📚 Supported Models
@@ -379,14 +418,23 @@ setGlobalTracer(otelTracer);
379
418
 
380
419
  ---
381
420
 
382
- ## 🛠️ CLI: MCP Server
421
+ ## 🛠️ CLI Tools
383
422
 
384
- Run the built-in Qiniu MCP Server:
423
+ ### MCP Server
385
424
 
386
425
  ```bash
387
426
  npx qiniu-mcp-server
388
427
  ```
389
428
 
429
+ ### Skill Manager (v0.38.0+)
430
+
431
+ ```bash
432
+ npx qiniu-ai skill list # List installed skills
433
+ npx qiniu-ai skill verify # Verify integrity (path + hash)
434
+ npx qiniu-ai skill verify --fix # Reconstruct lockfile from local dirs
435
+ npx qiniu-ai skill remove <name> # Remove skill + lockfile entry
436
+ ```
437
+
390
438
  **Environment variables:**
391
439
  - `QINIU_API_KEY` — API key for OCR/Censor operations
392
440
  - `QINIU_ACCESS_KEY` / `QINIU_SECRET_KEY` — For Vframe/signed operations
package/README.zh-CN.md CHANGED
@@ -35,14 +35,17 @@
35
35
  ### 高级能力
36
36
  - 📋 **技能注入** — Markdown 格式的 Agent 知识库(兼容 Claude Skills)
37
37
  - 🏪 **Skill 市场** — 远程技能加载 + SHA256 完整性验证 (v0.32.0+)
38
- - 🔗 **MCP 客户端** 支持 stdio + HTTP + OAuth 2.0 传输协议
38
+ - 🔐 **安全加固**原子远程安装、累计大小限制、deny-first 工具策略 (v0.38.0+)
39
+ - ⚡ **MCP 工具策略** — SDK 原生 timeout、进度重置、输出截断,按服务器配置 (v0.38.0+)
40
+ - 🔗 **MCP Host** — `NodeMCPHost` 支持 stdio + HTTP 传输 + 按服务器工具策略
39
41
  - 🖥️ **MCP 服务端** — 内置七牛 MCP Server(OCR/审核/抽帧)
40
42
  - 💾 **Checkpointer** — 状态持久化(Memory、Redis、PostgreSQL、Kodo)
41
43
  - 🧠 **Memory Manager** — 短期 + 长期记忆,LLM 自动摘要
42
- - ✅ **工具审批 (HITL)** — 敏感操作人工确认
44
+ - ✅ **工具审批 (HITL)** — 敏感操作人工确认 + deny-first 来源策略 (v0.38.0+)
43
45
  - ⏸️ **中断/恢复** — 基于检查点的可恢复执行
44
46
  - 📊 **结构化指标** — MetricsCollector + Prometheus 格式导出 (v0.32.0+)
45
47
  - 📋 **日志导出** — 请求日志导出,支持筛选和分页 (v0.36.0+)
48
+ - 📦 **云沙箱** — 安全代码执行,支持命令、文件系统和 PTY 终端 (v0.37.0+)
46
49
  - 🔌 **Vercel AI SDK 适配器** — 无缝对接 Vercel AI SDK
47
50
 
48
51
  ---
@@ -330,6 +333,36 @@ setGlobalTracer(otelTracer);
330
333
  // - agent_graph.execute
331
334
  ```
332
335
 
336
+ ### 云沙箱 (v0.37.0+)
337
+
338
+ ```typescript
339
+ import { QiniuAI } from '@bowenqt/qiniu-ai-sdk';
340
+
341
+ const client = new QiniuAI({ apiKey: process.env.QINIU_API_KEY || '' });
342
+
343
+ // 创建沙箱并等待就绪
344
+ const instance = await client.sandbox.createAndWait(
345
+ { templateId: 'base' },
346
+ { timeoutMs: 60_000 },
347
+ );
348
+
349
+ // 执行命令
350
+ const result = await instance.commands.run('echo hello', {
351
+ cwd: '/tmp',
352
+ envs: { MY_VAR: 'test' },
353
+ });
354
+ console.log(result.stdout); // 'hello\n'
355
+ console.log(result.exitCode); // 0
356
+
357
+ // 文件操作
358
+ await instance.files.write('/tmp/data.txt', 'Hello from SDK');
359
+ const content = await instance.files.readText('/tmp/data.txt');
360
+ const entries = await instance.files.list('/tmp');
361
+
362
+ // 清理
363
+ await instance.kill();
364
+ ```
365
+
333
366
  ---
334
367
 
335
368
  ## 📚 支持的模型
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Qiniu AI CLI — Skill management and SDK utilities.
4
+ *
5
+ * Usage:
6
+ * npx qiniu-ai skill list [--dir <skills-dir>]
7
+ * npx qiniu-ai skill verify [--fix] [--dir <skills-dir>]
8
+ * npx qiniu-ai skill remove <name> [--dir <skills-dir>]
9
+ */
10
+
11
+ import { runCLI } from '../dist/cli/skill-cli.mjs';
12
+
13
+ runCLI(process.argv.slice(2));
@@ -1,5 +1,10 @@
1
1
  /**
2
2
  * AgentExpert - Expose agent tools for A2A collaboration.
3
+ *
4
+ * v5 changes:
5
+ * - tools getter: lazy lookup from agent._tools (dynamic, reflects MCP hot updates)
6
+ * - expose: '*' | string[] (wildcard or whitelist)
7
+ * - callTool: reads from agent._tools at call time, not from cached snapshot
3
8
  */
4
9
  import type { Agent } from '../create-agent';
5
10
  import type { Tool } from '../generate-text';
@@ -10,19 +15,22 @@ import type { AgentExpertConfig, A2AMessage, CallToolRequest, RunTaskRequest, Ru
10
15
  export declare class AgentExpert {
11
16
  /** Unique expert ID */
12
17
  readonly id: string;
13
- /** Exposed tools (with prefix) */
14
- readonly tools: Record<string, Tool>;
15
18
  private agent;
16
19
  private config;
17
20
  private rateLimiter?;
18
- private originalTools;
19
21
  private constructor();
20
22
  /**
21
23
  * Create an AgentExpert from an Agent.
22
24
  */
23
25
  static from(agent: Agent, config: AgentExpertConfig): AgentExpert;
26
+ /**
27
+ * Dynamic tools getter — reads from agent._tools every time.
28
+ * MCP hot updates are automatically reflected.
29
+ */
30
+ get tools(): Record<string, Tool>;
24
31
  /**
25
32
  * Direct tool call with full request.
33
+ * Uses lazy lookup from agent._tools at call time.
26
34
  */
27
35
  callTool(request: CallToolRequest): Promise<A2AMessage>;
28
36
  /**
@@ -33,5 +41,9 @@ export declare class AgentExpert {
33
41
  * Get list of exposed tool names (without prefix).
34
42
  */
35
43
  getExposedToolNames(): string[];
44
+ /**
45
+ * Build exposed tools from current agent._tools.
46
+ */
47
+ private buildExposedTools;
36
48
  }
37
49
  //# sourceMappingURL=expert.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"expert.d.ts","sourceRoot":"","sources":["../../../src/ai/a2a/expert.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,KAAK,EAAE,IAAI,EAA+B,MAAM,kBAAkB,CAAC;AAC1E,OAAO,KAAK,EACR,iBAAiB,EACjB,UAAU,EACV,eAAe,EACf,cAAc,EACd,aAAa,EAChB,MAAM,SAAS,CAAC;AAajB;;GAEG;AACH,qBAAa,WAAW;IACpB,uBAAuB;IACvB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,kCAAkC;IAClC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAErC,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,MAAM,CAAkG;IAChH,OAAO,CAAC,WAAW,CAAC,CAAiB;IACrC,OAAO,CAAC,aAAa,CAAuB;IAE5C,OAAO;IAoBP;;OAEG;IACH,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAiB,GAAG,WAAW;IAiCjE;;OAEG;IACG,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC;IA8E7D;;OAEG;IACG,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;IAgB9D;;OAEG;IACH,mBAAmB,IAAI,MAAM,EAAE;CAGlC"}
1
+ {"version":3,"file":"expert.d.ts","sourceRoot":"","sources":["../../../src/ai/a2a/expert.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,KAAK,EAAE,IAAI,EAA+B,MAAM,kBAAkB,CAAC;AAC1E,OAAO,KAAK,EACR,iBAAiB,EACjB,UAAU,EACV,eAAe,EACf,cAAc,EACd,aAAa,EAChB,MAAM,SAAS,CAAC;AAajB;;GAEG;AACH,qBAAa,WAAW;IACpB,uBAAuB;IACvB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAEpB,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,MAAM,CAKZ;IACF,OAAO,CAAC,WAAW,CAAC,CAAiB;IAErC,OAAO;IAgBP;;OAEG;IACH,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAiB,GAAG,WAAW;IAQjE;;;OAGG;IACH,IAAI,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAEhC;IAED;;;OAGG;IACG,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC;IA4E7D;;OAEG;IACG,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;IAgB9D;;OAEG;IACH,mBAAmB,IAAI,MAAM,EAAE;IAW/B;;OAEG;IACH,OAAO,CAAC,iBAAiB;CAmB5B"}
@@ -1,6 +1,11 @@
1
1
  "use strict";
2
2
  /**
3
3
  * AgentExpert - Expose agent tools for A2A collaboration.
4
+ *
5
+ * v5 changes:
6
+ * - tools getter: lazy lookup from agent._tools (dynamic, reflects MCP hot updates)
7
+ * - expose: '*' | string[] (wildcard or whitelist)
8
+ * - callTool: reads from agent._tools at call time, not from cached snapshot
4
9
  */
5
10
  Object.defineProperty(exports, "__esModule", { value: true });
6
11
  exports.AgentExpert = void 0;
@@ -14,7 +19,7 @@ const rate_limiter_1 = require("./rate-limiter");
14
19
  * Wraps an Agent to expose selected tools for A2A collaboration.
15
20
  */
16
21
  class AgentExpert {
17
- constructor(agent, config, tools, originalTools, rateLimiter) {
22
+ constructor(agent, config, rateLimiter) {
18
23
  this.agent = agent;
19
24
  this.id = agent.id;
20
25
  this.config = {
@@ -23,41 +28,31 @@ class AgentExpert {
23
28
  validateArgs: config.validateArgs ?? true,
24
29
  rateLimit: config.rateLimit,
25
30
  };
26
- this.tools = tools;
27
- this.originalTools = originalTools;
28
31
  this.rateLimiter = rateLimiter;
29
32
  }
30
33
  /**
31
34
  * Create an AgentExpert from an Agent.
32
35
  */
33
36
  static from(agent, config) {
34
- const originalTools = agent._tools;
35
- const prefix = config.prefix ?? `${agent.id}_`;
36
- const expertId = agent.id;
37
- // Single shared rate limiter instance
38
37
  const rateLimiter = config.rateLimit
39
38
  ? new rate_limiter_1.A2ARateLimiter(config.rateLimit)
40
39
  : undefined;
41
- // Build exposed tools - all go through execute() for FIFO fairness
42
- const exposedTools = {};
43
- for (const toolName of config.expose) {
44
- const tool = originalTools[toolName];
45
- if (!tool) {
46
- console.warn(`[AgentExpert] Tool "${toolName}" not found, skipping`);
47
- continue;
48
- }
49
- const prefixedName = `${prefix}${toolName}`;
50
- exposedTools[prefixedName] = createWrappedTool(tool, toolName, expertId, rateLimiter, config.validateArgs ?? true);
51
- }
52
- return new AgentExpert(agent, config, exposedTools, originalTools, rateLimiter);
40
+ return new AgentExpert(agent, config, rateLimiter);
41
+ }
42
+ /**
43
+ * Dynamic tools getter — reads from agent._tools every time.
44
+ * MCP hot updates are automatically reflected.
45
+ */
46
+ get tools() {
47
+ return this.buildExposedTools();
53
48
  }
54
49
  /**
55
50
  * Direct tool call with full request.
51
+ * Uses lazy lookup from agent._tools at call time.
56
52
  */
57
53
  async callTool(request) {
58
54
  const requestId = request.requestId ?? (0, types_1.generateRequestId)();
59
55
  const { from = '', tool, args, signal } = request;
60
- // Create base request for responses
61
56
  const baseRequest = {
62
57
  requestId,
63
58
  type: 'request',
@@ -67,23 +62,22 @@ class AgentExpert {
67
62
  tool,
68
63
  args,
69
64
  };
70
- // Check if tool is exposed
71
- if (!this.config.expose.includes(tool)) {
65
+ // Expose strategy check
66
+ if (this.config.expose !== '*' && !this.config.expose.includes(tool)) {
72
67
  return (0, types_1.createA2AError)(baseRequest, 'TOOL_NOT_EXPOSED', `Tool "${tool}" is not exposed by this expert`);
73
68
  }
74
- // Get original tool
75
- const originalTool = this.originalTools[tool];
76
- if (!originalTool) {
69
+ // Lazy lookup: get tool from current agent._tools (dynamic)
70
+ const currentTool = this.agent._tools[tool];
71
+ if (!currentTool) {
77
72
  return (0, types_1.createA2AError)(baseRequest, 'TOOL_NOT_FOUND', `Tool "${tool}" not found`);
78
73
  }
79
74
  // Check abort signal
80
75
  if (signal?.aborted) {
81
76
  return (0, types_1.createA2AError)(baseRequest, 'CANCELLED', 'Request was cancelled');
82
77
  }
83
- // Rate limiting via execute() for FIFO fairness with exposed tools
78
+ // Rate limiting
84
79
  if (this.rateLimiter) {
85
80
  try {
86
- // Use execute() which handles queue fairness and abort
87
81
  await this.rateLimiter.execute(this.id, tool, async () => { }, signal);
88
82
  }
89
83
  catch (error) {
@@ -97,18 +91,18 @@ class AgentExpert {
97
91
  }
98
92
  }
99
93
  // Validate args
100
- if (this.config.validateArgs && originalTool.parameters) {
101
- const validationResult = (0, validation_1.validateSchema)(args, originalTool.parameters);
94
+ if (this.config.validateArgs && currentTool.parameters) {
95
+ const validationResult = (0, validation_1.validateSchema)(args, currentTool.parameters);
102
96
  if (!validationResult.valid) {
103
97
  return (0, types_1.createA2AError)(baseRequest, 'VALIDATION_ERROR', validationResult.error?.message ?? 'Validation failed');
104
98
  }
105
99
  }
106
100
  // Execute tool
107
101
  try {
108
- if (!originalTool.execute) {
102
+ if (!currentTool.execute) {
109
103
  throw new Error(`Tool "${tool}" has no execute function`);
110
104
  }
111
- const result = await originalTool.execute(args, {
105
+ const result = await currentTool.execute(args, {
112
106
  toolCallId: requestId,
113
107
  messages: [],
114
108
  abortSignal: signal,
@@ -138,15 +132,35 @@ class AgentExpert {
138
132
  * Get list of exposed tool names (without prefix).
139
133
  */
140
134
  getExposedToolNames() {
135
+ if (this.config.expose === '*') {
136
+ return Object.keys(this.agent._tools);
137
+ }
141
138
  return [...this.config.expose];
142
139
  }
140
+ // ========================================================================
141
+ // Private
142
+ // ========================================================================
143
+ /**
144
+ * Build exposed tools from current agent._tools.
145
+ */
146
+ buildExposedTools() {
147
+ const currentTools = this.agent._tools;
148
+ const result = {};
149
+ for (const [name, tool] of Object.entries(currentTools)) {
150
+ if (this.config.expose === '*' || this.config.expose.includes(name)) {
151
+ const prefixedName = `${this.config.prefix}${name}`;
152
+ result[prefixedName] = createWrappedTool(tool, name, this.id, this.rateLimiter, this.config.validateArgs);
153
+ }
154
+ }
155
+ return result;
156
+ }
143
157
  }
144
158
  exports.AgentExpert = AgentExpert;
145
159
  // ============================================================================
146
160
  // Helper Functions
147
161
  // ============================================================================
148
162
  /**
149
- * Create a wrapped tool - all tools go through execute() for FIFO fairness.
163
+ * Create a wrapped tool all tools go through execute() for FIFO fairness.
150
164
  */
151
165
  function createWrappedTool(original, toolName, expertId, rateLimiter, validateArgs) {
152
166
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"expert.js","sourceRoot":"","sources":["../../../src/ai/a2a/expert.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"expert.js","sourceRoot":"","sources":["../../../src/ai/a2a/expert.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,10 @@
1
1
  /**
2
2
  * AgentExpert - Expose agent tools for A2A collaboration.
3
+ *
4
+ * v5 changes:
5
+ * - tools getter: lazy lookup from agent._tools (dynamic, reflects MCP hot updates)
6
+ * - expose: '*' | string[] (wildcard or whitelist)
7
+ * - callTool: reads from agent._tools at call time, not from cached snapshot
3
8
  */
4
9
  import { generateRequestId, createA2AResponse, createA2AError, } from './types.mjs';
5
10
  import { validateSchema } from './validation.mjs';
@@ -11,7 +16,7 @@ import { A2ARateLimiter, RateLimitError, AbortError } from './rate-limiter.mjs';
11
16
  * Wraps an Agent to expose selected tools for A2A collaboration.
12
17
  */
13
18
  export class AgentExpert {
14
- constructor(agent, config, tools, originalTools, rateLimiter) {
19
+ constructor(agent, config, rateLimiter) {
15
20
  this.agent = agent;
16
21
  this.id = agent.id;
17
22
  this.config = {
@@ -20,41 +25,31 @@ export class AgentExpert {
20
25
  validateArgs: config.validateArgs ?? true,
21
26
  rateLimit: config.rateLimit,
22
27
  };
23
- this.tools = tools;
24
- this.originalTools = originalTools;
25
28
  this.rateLimiter = rateLimiter;
26
29
  }
27
30
  /**
28
31
  * Create an AgentExpert from an Agent.
29
32
  */
30
33
  static from(agent, config) {
31
- const originalTools = agent._tools;
32
- const prefix = config.prefix ?? `${agent.id}_`;
33
- const expertId = agent.id;
34
- // Single shared rate limiter instance
35
34
  const rateLimiter = config.rateLimit
36
35
  ? new A2ARateLimiter(config.rateLimit)
37
36
  : undefined;
38
- // Build exposed tools - all go through execute() for FIFO fairness
39
- const exposedTools = {};
40
- for (const toolName of config.expose) {
41
- const tool = originalTools[toolName];
42
- if (!tool) {
43
- console.warn(`[AgentExpert] Tool "${toolName}" not found, skipping`);
44
- continue;
45
- }
46
- const prefixedName = `${prefix}${toolName}`;
47
- exposedTools[prefixedName] = createWrappedTool(tool, toolName, expertId, rateLimiter, config.validateArgs ?? true);
48
- }
49
- return new AgentExpert(agent, config, exposedTools, originalTools, rateLimiter);
37
+ return new AgentExpert(agent, config, rateLimiter);
38
+ }
39
+ /**
40
+ * Dynamic tools getter — reads from agent._tools every time.
41
+ * MCP hot updates are automatically reflected.
42
+ */
43
+ get tools() {
44
+ return this.buildExposedTools();
50
45
  }
51
46
  /**
52
47
  * Direct tool call with full request.
48
+ * Uses lazy lookup from agent._tools at call time.
53
49
  */
54
50
  async callTool(request) {
55
51
  const requestId = request.requestId ?? generateRequestId();
56
52
  const { from = '', tool, args, signal } = request;
57
- // Create base request for responses
58
53
  const baseRequest = {
59
54
  requestId,
60
55
  type: 'request',
@@ -64,23 +59,22 @@ export class AgentExpert {
64
59
  tool,
65
60
  args,
66
61
  };
67
- // Check if tool is exposed
68
- if (!this.config.expose.includes(tool)) {
62
+ // Expose strategy check
63
+ if (this.config.expose !== '*' && !this.config.expose.includes(tool)) {
69
64
  return createA2AError(baseRequest, 'TOOL_NOT_EXPOSED', `Tool "${tool}" is not exposed by this expert`);
70
65
  }
71
- // Get original tool
72
- const originalTool = this.originalTools[tool];
73
- if (!originalTool) {
66
+ // Lazy lookup: get tool from current agent._tools (dynamic)
67
+ const currentTool = this.agent._tools[tool];
68
+ if (!currentTool) {
74
69
  return createA2AError(baseRequest, 'TOOL_NOT_FOUND', `Tool "${tool}" not found`);
75
70
  }
76
71
  // Check abort signal
77
72
  if (signal?.aborted) {
78
73
  return createA2AError(baseRequest, 'CANCELLED', 'Request was cancelled');
79
74
  }
80
- // Rate limiting via execute() for FIFO fairness with exposed tools
75
+ // Rate limiting
81
76
  if (this.rateLimiter) {
82
77
  try {
83
- // Use execute() which handles queue fairness and abort
84
78
  await this.rateLimiter.execute(this.id, tool, async () => { }, signal);
85
79
  }
86
80
  catch (error) {
@@ -94,18 +88,18 @@ export class AgentExpert {
94
88
  }
95
89
  }
96
90
  // Validate args
97
- if (this.config.validateArgs && originalTool.parameters) {
98
- const validationResult = validateSchema(args, originalTool.parameters);
91
+ if (this.config.validateArgs && currentTool.parameters) {
92
+ const validationResult = validateSchema(args, currentTool.parameters);
99
93
  if (!validationResult.valid) {
100
94
  return createA2AError(baseRequest, 'VALIDATION_ERROR', validationResult.error?.message ?? 'Validation failed');
101
95
  }
102
96
  }
103
97
  // Execute tool
104
98
  try {
105
- if (!originalTool.execute) {
99
+ if (!currentTool.execute) {
106
100
  throw new Error(`Tool "${tool}" has no execute function`);
107
101
  }
108
- const result = await originalTool.execute(args, {
102
+ const result = await currentTool.execute(args, {
109
103
  toolCallId: requestId,
110
104
  messages: [],
111
105
  abortSignal: signal,
@@ -135,14 +129,34 @@ export class AgentExpert {
135
129
  * Get list of exposed tool names (without prefix).
136
130
  */
137
131
  getExposedToolNames() {
132
+ if (this.config.expose === '*') {
133
+ return Object.keys(this.agent._tools);
134
+ }
138
135
  return [...this.config.expose];
139
136
  }
137
+ // ========================================================================
138
+ // Private
139
+ // ========================================================================
140
+ /**
141
+ * Build exposed tools from current agent._tools.
142
+ */
143
+ buildExposedTools() {
144
+ const currentTools = this.agent._tools;
145
+ const result = {};
146
+ for (const [name, tool] of Object.entries(currentTools)) {
147
+ if (this.config.expose === '*' || this.config.expose.includes(name)) {
148
+ const prefixedName = `${this.config.prefix}${name}`;
149
+ result[prefixedName] = createWrappedTool(tool, name, this.id, this.rateLimiter, this.config.validateArgs);
150
+ }
151
+ }
152
+ return result;
153
+ }
140
154
  }
141
155
  // ============================================================================
142
156
  // Helper Functions
143
157
  // ============================================================================
144
158
  /**
145
- * Create a wrapped tool - all tools go through execute() for FIFO fairness.
159
+ * Create a wrapped tool all tools go through execute() for FIFO fairness.
146
160
  */
147
161
  function createWrappedTool(original, toolName, expertId, rateLimiter, validateArgs) {
148
162
  return {
@@ -60,8 +60,8 @@ export interface RateLimitConfig {
60
60
  * AgentExpert configuration.
61
61
  */
62
62
  export interface AgentExpertConfig {
63
- /** Tool names to expose (whitelist, required) */
64
- expose: string[];
63
+ /** Tool names to expose: '*' (all, including dynamic MCP) or string[] (whitelist) */
64
+ expose: '*' | string[];
65
65
  /** Prefix for exposed tool names (default: `{agentId}_`) */
66
66
  prefix?: string;
67
67
  /** Rate limiting configuration */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/ai/a2a/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/ai/a2a/types.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,7 @@ import type { QiniuAI } from '../client';
8
8
  import type { ResponseFormat } from '../lib/types';
9
9
  import type { RegisteredTool } from '../lib/tool-registry';
10
10
  import type { Skill } from '../modules/skills';
11
+ import type { ReferenceMode } from '../modules/skills/reference-mode';
11
12
  import { type TokenEstimatorConfig } from '../lib/token-estimator';
12
13
  import type { MemoryManager } from './memory';
13
14
  import type { AgentState, InternalMessage, StepResult, AgentGraphEvents } from './internal-types';
@@ -46,6 +47,8 @@ export interface AgentGraphOptions {
46
47
  threadId?: string;
47
48
  /** Auto-retry configuration for RecoverableError handling */
48
49
  autoRetry?: AutoRetryConfig;
50
+ /** Skill reference injection mode (default: 'none') */
51
+ skillReferenceMode?: ReferenceMode;
49
52
  }
50
53
  /**
51
54
  * Configuration for automatic retry of recoverable errors.
@@ -1 +1 @@
1
- {"version":3,"file":"agent-graph.d.ts","sourceRoot":"","sources":["../../src/ai/agent-graph.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-graph.d.ts","sourceRoot":"","sources":["../../src/ai/agent-graph.ts"],"names":[],"mappings":"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"}