@cicctencent/agent-core 0.1.20 → 0.1.22

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 (153) hide show
  1. package/dist/cjs/a2a/index.d.ts +4 -0
  2. package/dist/cjs/a2a/index.d.ts.map +1 -1
  3. package/dist/cjs/a2a/index.js +6 -1
  4. package/dist/cjs/a2a/index.js.map +1 -1
  5. package/dist/cjs/a2a/rest-client.d.ts +111 -0
  6. package/dist/cjs/a2a/rest-client.d.ts.map +1 -0
  7. package/dist/cjs/a2a/rest-client.js +342 -0
  8. package/dist/cjs/a2a/rest-client.js.map +1 -0
  9. package/dist/cjs/a2a/rest-runner.d.ts +41 -0
  10. package/dist/cjs/a2a/rest-runner.d.ts.map +1 -0
  11. package/dist/cjs/a2a/rest-runner.js +188 -0
  12. package/dist/cjs/a2a/rest-runner.js.map +1 -0
  13. package/dist/cjs/agent/engine.d.ts +17 -0
  14. package/dist/cjs/agent/engine.d.ts.map +1 -1
  15. package/dist/cjs/agent/engine.js +208 -13
  16. package/dist/cjs/agent/engine.js.map +1 -1
  17. package/dist/cjs/agent/llm-caller.d.ts +12 -1
  18. package/dist/cjs/agent/llm-caller.d.ts.map +1 -1
  19. package/dist/cjs/agent/llm-caller.js +101 -32
  20. package/dist/cjs/agent/llm-caller.js.map +1 -1
  21. package/dist/cjs/agent/types.d.ts +1 -1
  22. package/dist/cjs/agent/types.d.ts.map +1 -1
  23. package/dist/cjs/index.d.ts +3 -0
  24. package/dist/cjs/index.d.ts.map +1 -1
  25. package/dist/cjs/index.js +8 -1
  26. package/dist/cjs/index.js.map +1 -1
  27. package/dist/cjs/kb/in-memory-kb.d.ts.map +1 -1
  28. package/dist/cjs/kb/in-memory-kb.js +2 -1
  29. package/dist/cjs/kb/in-memory-kb.js.map +1 -1
  30. package/dist/cjs/llm/anthropic-provider.d.ts.map +1 -1
  31. package/dist/cjs/llm/anthropic-provider.js +1 -0
  32. package/dist/cjs/llm/anthropic-provider.js.map +1 -1
  33. package/dist/cjs/llm/ollama-provider.d.ts.map +1 -1
  34. package/dist/cjs/llm/ollama-provider.js +1 -0
  35. package/dist/cjs/llm/ollama-provider.js.map +1 -1
  36. package/dist/cjs/llm/openai-provider.d.ts.map +1 -1
  37. package/dist/cjs/llm/openai-provider.js +17 -12
  38. package/dist/cjs/llm/openai-provider.js.map +1 -1
  39. package/dist/cjs/llm/types.d.ts +4 -0
  40. package/dist/cjs/llm/types.d.ts.map +1 -1
  41. package/dist/cjs/llm/types.js.map +1 -1
  42. package/dist/cjs/memory/checkpoint.d.ts.map +1 -1
  43. package/dist/cjs/memory/checkpoint.js +3 -2
  44. package/dist/cjs/memory/checkpoint.js.map +1 -1
  45. package/dist/cjs/memory/extractor.d.ts +7 -0
  46. package/dist/cjs/memory/extractor.d.ts.map +1 -1
  47. package/dist/cjs/memory/extractor.js +18 -1
  48. package/dist/cjs/memory/extractor.js.map +1 -1
  49. package/dist/cjs/memory/persona.d.ts +4 -0
  50. package/dist/cjs/memory/persona.d.ts.map +1 -1
  51. package/dist/cjs/memory/persona.js +15 -1
  52. package/dist/cjs/memory/persona.js.map +1 -1
  53. package/dist/cjs/memory/pipeline.d.ts +3 -0
  54. package/dist/cjs/memory/pipeline.d.ts.map +1 -1
  55. package/dist/cjs/memory/pipeline.js +7 -4
  56. package/dist/cjs/memory/pipeline.js.map +1 -1
  57. package/dist/cjs/memory/scene.d.ts +4 -0
  58. package/dist/cjs/memory/scene.d.ts.map +1 -1
  59. package/dist/cjs/memory/scene.js +15 -1
  60. package/dist/cjs/memory/scene.js.map +1 -1
  61. package/dist/cjs/middleware/audit-log.d.ts.map +1 -1
  62. package/dist/cjs/middleware/audit-log.js +3 -2
  63. package/dist/cjs/middleware/audit-log.js.map +1 -1
  64. package/dist/cjs/store/file-tool-result-store.d.ts.map +1 -1
  65. package/dist/cjs/store/file-tool-result-store.js +2 -1
  66. package/dist/cjs/store/file-tool-result-store.js.map +1 -1
  67. package/dist/cjs/store/json-store.d.ts +5 -1
  68. package/dist/cjs/store/json-store.d.ts.map +1 -1
  69. package/dist/cjs/store/json-store.js +5 -1
  70. package/dist/cjs/store/json-store.js.map +1 -1
  71. package/dist/cjs/tool/delegate.js +1 -1
  72. package/dist/cjs/tool/delegate.js.map +1 -1
  73. package/dist/cjs/utils/date.d.ts +36 -0
  74. package/dist/cjs/utils/date.d.ts.map +1 -0
  75. package/dist/cjs/utils/date.js +52 -0
  76. package/dist/cjs/utils/date.js.map +1 -0
  77. package/dist/esm/a2a/index.d.ts +4 -0
  78. package/dist/esm/a2a/index.d.ts.map +1 -1
  79. package/dist/esm/a2a/index.js +3 -0
  80. package/dist/esm/a2a/index.js.map +1 -1
  81. package/dist/esm/a2a/rest-client.d.ts +111 -0
  82. package/dist/esm/a2a/rest-client.d.ts.map +1 -0
  83. package/dist/esm/a2a/rest-client.js +338 -0
  84. package/dist/esm/a2a/rest-client.js.map +1 -0
  85. package/dist/esm/a2a/rest-runner.d.ts +41 -0
  86. package/dist/esm/a2a/rest-runner.d.ts.map +1 -0
  87. package/dist/esm/a2a/rest-runner.js +185 -0
  88. package/dist/esm/a2a/rest-runner.js.map +1 -0
  89. package/dist/esm/agent/engine.d.ts +17 -0
  90. package/dist/esm/agent/engine.d.ts.map +1 -1
  91. package/dist/esm/agent/engine.js +208 -13
  92. package/dist/esm/agent/engine.js.map +1 -1
  93. package/dist/esm/agent/llm-caller.d.ts +12 -1
  94. package/dist/esm/agent/llm-caller.d.ts.map +1 -1
  95. package/dist/esm/agent/llm-caller.js +101 -32
  96. package/dist/esm/agent/llm-caller.js.map +1 -1
  97. package/dist/esm/agent/types.d.ts +1 -1
  98. package/dist/esm/agent/types.d.ts.map +1 -1
  99. package/dist/esm/index.d.ts +3 -0
  100. package/dist/esm/index.d.ts.map +1 -1
  101. package/dist/esm/index.js +3 -0
  102. package/dist/esm/index.js.map +1 -1
  103. package/dist/esm/kb/in-memory-kb.d.ts.map +1 -1
  104. package/dist/esm/kb/in-memory-kb.js +2 -1
  105. package/dist/esm/kb/in-memory-kb.js.map +1 -1
  106. package/dist/esm/llm/anthropic-provider.d.ts.map +1 -1
  107. package/dist/esm/llm/anthropic-provider.js +1 -0
  108. package/dist/esm/llm/anthropic-provider.js.map +1 -1
  109. package/dist/esm/llm/ollama-provider.d.ts.map +1 -1
  110. package/dist/esm/llm/ollama-provider.js +1 -0
  111. package/dist/esm/llm/ollama-provider.js.map +1 -1
  112. package/dist/esm/llm/openai-provider.d.ts.map +1 -1
  113. package/dist/esm/llm/openai-provider.js +17 -12
  114. package/dist/esm/llm/openai-provider.js.map +1 -1
  115. package/dist/esm/llm/types.d.ts +4 -0
  116. package/dist/esm/llm/types.d.ts.map +1 -1
  117. package/dist/esm/llm/types.js.map +1 -1
  118. package/dist/esm/memory/checkpoint.d.ts.map +1 -1
  119. package/dist/esm/memory/checkpoint.js +3 -2
  120. package/dist/esm/memory/checkpoint.js.map +1 -1
  121. package/dist/esm/memory/extractor.d.ts +7 -0
  122. package/dist/esm/memory/extractor.d.ts.map +1 -1
  123. package/dist/esm/memory/extractor.js +18 -1
  124. package/dist/esm/memory/extractor.js.map +1 -1
  125. package/dist/esm/memory/persona.d.ts +4 -0
  126. package/dist/esm/memory/persona.d.ts.map +1 -1
  127. package/dist/esm/memory/persona.js +15 -1
  128. package/dist/esm/memory/persona.js.map +1 -1
  129. package/dist/esm/memory/pipeline.d.ts +3 -0
  130. package/dist/esm/memory/pipeline.d.ts.map +1 -1
  131. package/dist/esm/memory/pipeline.js +7 -4
  132. package/dist/esm/memory/pipeline.js.map +1 -1
  133. package/dist/esm/memory/scene.d.ts +4 -0
  134. package/dist/esm/memory/scene.d.ts.map +1 -1
  135. package/dist/esm/memory/scene.js +15 -1
  136. package/dist/esm/memory/scene.js.map +1 -1
  137. package/dist/esm/middleware/audit-log.d.ts.map +1 -1
  138. package/dist/esm/middleware/audit-log.js +3 -2
  139. package/dist/esm/middleware/audit-log.js.map +1 -1
  140. package/dist/esm/store/file-tool-result-store.d.ts.map +1 -1
  141. package/dist/esm/store/file-tool-result-store.js +2 -1
  142. package/dist/esm/store/file-tool-result-store.js.map +1 -1
  143. package/dist/esm/store/json-store.d.ts +5 -1
  144. package/dist/esm/store/json-store.d.ts.map +1 -1
  145. package/dist/esm/store/json-store.js +5 -1
  146. package/dist/esm/store/json-store.js.map +1 -1
  147. package/dist/esm/tool/delegate.js +1 -1
  148. package/dist/esm/tool/delegate.js.map +1 -1
  149. package/dist/esm/utils/date.d.ts +36 -0
  150. package/dist/esm/utils/date.d.ts.map +1 -0
  151. package/dist/esm/utils/date.js +48 -0
  152. package/dist/esm/utils/date.js.map +1 -0
  153. package/package.json +2 -2
@@ -5,4 +5,8 @@ export { createA2ARemoteRunner, extractTextFromMessage } from './runner.js';
5
5
  export type { A2ARemoteRunnerConfig } from './runner.js';
6
6
  export { A2AServerHandler, InMemoryA2ATaskStore, createA2AAgentCard, createA2AMessage, mapAgentEventToA2AEvent, } from './server.js';
7
7
  export type { A2AHandlerResponse, A2AServerAgentConfig, A2AServerHandlerOptions, A2AStreamingJsonRpcResponse, A2ATaskStore, } from './server.js';
8
+ export { RestA2AClient } from './rest-client.js';
9
+ export type { RestCapabilityCard, RestCapabilityResult, RestSSEEvent, RestTaskStatus, RestA2AClientOptions, } from './rest-client.js';
10
+ export { createRestA2ARemoteRunner } from './rest-runner.js';
11
+ export type { RestA2ARemoteRunnerConfig } from './rest-runner.js';
8
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/a2a/index.ts"],"names":[],"mappings":"AAIA,YAAY,EACV,YAAY,EACZ,aAAa,EACb,oBAAoB,EACpB,WAAW,EACX,WAAW,EACX,WAAW,EACX,OAAO,EACP,UAAU,EACV,YAAY,EACZ,aAAa,EACb,WAAW,EACX,OAAO,EACP,wBAAwB,EACxB,0BAA0B,EAC1B,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,iBAAiB,EACjB,sBAAsB,EACtB,gBAAgB,EAChB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC1D,YAAY,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEhE,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAC5E,YAAY,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEzD,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,kBAAkB,EAClB,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,kBAAkB,EAClB,oBAAoB,EACpB,uBAAuB,EACvB,2BAA2B,EAC3B,YAAY,GACb,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/a2a/index.ts"],"names":[],"mappings":"AAIA,YAAY,EACV,YAAY,EACZ,aAAa,EACb,oBAAoB,EACpB,WAAW,EACX,WAAW,EACX,WAAW,EACX,OAAO,EACP,UAAU,EACV,YAAY,EACZ,aAAa,EACb,WAAW,EACX,OAAO,EACP,wBAAwB,EACxB,0BAA0B,EAC1B,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,iBAAiB,EACjB,sBAAsB,EACtB,gBAAgB,EAChB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC1D,YAAY,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEhE,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAC5E,YAAY,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEzD,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,kBAAkB,EAClB,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,kBAAkB,EAClB,oBAAoB,EACpB,uBAAuB,EACvB,2BAA2B,EAC3B,YAAY,GACb,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,YAAY,EACV,kBAAkB,EAClB,oBAAoB,EACpB,YAAY,EACZ,cAAc,EACd,oBAAoB,GACrB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,YAAY,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC"}
@@ -3,7 +3,7 @@
3
3
  // A2A 模块统一导出
4
4
  // ============================================================
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.mapAgentEventToA2AEvent = exports.createA2AMessage = exports.createA2AAgentCard = exports.InMemoryA2ATaskStore = exports.A2AServerHandler = exports.extractTextFromMessage = exports.createA2ARemoteRunner = exports.buildAuthHeaders = exports.A2AClient = void 0;
6
+ exports.createRestA2ARemoteRunner = exports.RestA2AClient = exports.mapAgentEventToA2AEvent = exports.createA2AMessage = exports.createA2AAgentCard = exports.InMemoryA2ATaskStore = exports.A2AServerHandler = exports.extractTextFromMessage = exports.createA2ARemoteRunner = exports.buildAuthHeaders = exports.A2AClient = void 0;
7
7
  var client_ts_1 = require("./client.js");
8
8
  Object.defineProperty(exports, "A2AClient", { enumerable: true, get: function () { return client_ts_1.A2AClient; } });
9
9
  Object.defineProperty(exports, "buildAuthHeaders", { enumerable: true, get: function () { return client_ts_1.buildAuthHeaders; } });
@@ -16,4 +16,9 @@ Object.defineProperty(exports, "InMemoryA2ATaskStore", { enumerable: true, get:
16
16
  Object.defineProperty(exports, "createA2AAgentCard", { enumerable: true, get: function () { return server_ts_1.createA2AAgentCard; } });
17
17
  Object.defineProperty(exports, "createA2AMessage", { enumerable: true, get: function () { return server_ts_1.createA2AMessage; } });
18
18
  Object.defineProperty(exports, "mapAgentEventToA2AEvent", { enumerable: true, get: function () { return server_ts_1.mapAgentEventToA2AEvent; } });
19
+ // ---- REST 风格 A2A ----
20
+ var rest_client_ts_1 = require("./rest-client.js");
21
+ Object.defineProperty(exports, "RestA2AClient", { enumerable: true, get: function () { return rest_client_ts_1.RestA2AClient; } });
22
+ var rest_runner_ts_1 = require("./rest-runner.js");
23
+ Object.defineProperty(exports, "createRestA2ARemoteRunner", { enumerable: true, get: function () { return rest_runner_ts_1.createRestA2ARemoteRunner; } });
19
24
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/a2a/index.ts"],"names":[],"mappings":";AAAA,+DAA+D;AAC/D,aAAa;AACb,+DAA+D;;;AA4B/D,yCAA0D;AAAjD,sGAAA,SAAS,OAAA;AAAE,6GAAA,gBAAgB,OAAA;AAGpC,yCAA4E;AAAnE,kHAAA,qBAAqB,OAAA;AAAE,mHAAA,sBAAsB,OAAA;AAGtD,yCAMqB;AALnB,6GAAA,gBAAgB,OAAA;AAChB,iHAAA,oBAAoB,OAAA;AACpB,+GAAA,kBAAkB,OAAA;AAClB,6GAAA,gBAAgB,OAAA;AAChB,oHAAA,uBAAuB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/a2a/index.ts"],"names":[],"mappings":";AAAA,+DAA+D;AAC/D,aAAa;AACb,+DAA+D;;;AA4B/D,yCAA0D;AAAjD,sGAAA,SAAS,OAAA;AAAE,6GAAA,gBAAgB,OAAA;AAGpC,yCAA4E;AAAnE,kHAAA,qBAAqB,OAAA;AAAE,mHAAA,sBAAsB,OAAA;AAGtD,yCAMqB;AALnB,6GAAA,gBAAgB,OAAA;AAChB,iHAAA,oBAAoB,OAAA;AACpB,+GAAA,kBAAkB,OAAA;AAClB,6GAAA,gBAAgB,OAAA;AAChB,oHAAA,uBAAuB,OAAA;AAUzB,wBAAwB;AACxB,mDAAiD;AAAxC,+GAAA,aAAa,OAAA;AAQtB,mDAA6D;AAApD,2HAAA,yBAAyB,OAAA"}
@@ -0,0 +1,111 @@
1
+ import { type AuthConfig } from './client.js';
2
+ /** REST 风格 A2A Capability Card */
3
+ export interface RestCapabilityCard {
4
+ capability_id: string;
5
+ capability_name?: string;
6
+ description?: string;
7
+ input_schema?: Record<string, unknown>;
8
+ output_schema?: Record<string, unknown>;
9
+ [key: string]: unknown;
10
+ }
11
+ /** REST 风格 A2A 能力执行结果 */
12
+ export interface RestCapabilityResult {
13
+ capability_id: string;
14
+ capability_name?: string;
15
+ status: string;
16
+ result?: {
17
+ summary?: string;
18
+ strengths?: string[];
19
+ weaknesses?: string[];
20
+ risks?: string[];
21
+ analysis_findings?: string[];
22
+ final_text?: string;
23
+ [key: string]: unknown;
24
+ };
25
+ task_id?: string;
26
+ error?: string;
27
+ [key: string]: unknown;
28
+ }
29
+ /** REST 风格 A2A SSE 事件 */
30
+ export interface RestSSEEvent {
31
+ /** 事件类型:status / stage / tool_call / tool_result / message_chunk / result / error */
32
+ event: string;
33
+ /** 事件数据(已解析的 JSON 对象) */
34
+ data: Record<string, unknown>;
35
+ }
36
+ /** REST 风格 A2A 异步任务状态 */
37
+ export interface RestTaskStatus {
38
+ task_id: string;
39
+ capability_id?: string;
40
+ capability_name?: string;
41
+ status: string;
42
+ caller_agent_id?: string;
43
+ created_at?: string;
44
+ updated_at?: string;
45
+ error_code?: string | null;
46
+ result?: RestCapabilityResult['result'];
47
+ [key: string]: unknown;
48
+ }
49
+ export interface RestA2AClientOptions {
50
+ /** 请求超时(毫秒),默认 300000(5分钟) */
51
+ timeout?: number;
52
+ /** SSE 连接超时(毫秒),默认 30000(30秒) */
53
+ connectTimeout?: number;
54
+ /** SSE 逐 chunk 读取超时(毫秒),默认 60000 */
55
+ chunkTimeout?: number;
56
+ /** 自定义 fetch 实现(默认使用 globalThis.fetch) */
57
+ fetch?: typeof fetch;
58
+ /** 自定义请求头 */
59
+ headers?: Record<string, string>;
60
+ /** 认证配置 */
61
+ auth?: AuthConfig;
62
+ }
63
+ /**
64
+ * REST 风格 A2A 协议客户端
65
+ *
66
+ * 用法:
67
+ * const client = new RestA2AClient({ auth: { type: 'custom', name: 'X-Service-Token', value: 'xxx' } });
68
+ * const card = await client.discoverCapability('http://localhost:8000', 'competitive_review');
69
+ * const result = await client.invoke('http://localhost:8000', 'competitive_review', { ... });
70
+ */
71
+ export declare class RestA2AClient {
72
+ private timeout;
73
+ private connectTimeout;
74
+ private chunkTimeout;
75
+ private fetchFn;
76
+ private headers;
77
+ constructor(options?: RestA2AClientOptions);
78
+ /** 获取 Capability Card:GET /capabilities/{capabilityId},失败时尝试 :stream 探测 */
79
+ discoverCapability(baseUrl: string, capabilityId: string): Promise<RestCapabilityCard>;
80
+ /** 同步调用:POST /api/v1/a2a/capabilities/{capabilityId}:invoke */
81
+ invoke(baseUrl: string, capabilityId: string, input: Record<string, unknown>): Promise<RestCapabilityResult>;
82
+ /**
83
+ * 流式调用:POST /api/v1/a2a/capabilities/{capabilityId}:stream (SSE)
84
+ *
85
+ * SSE 事件格式(标准 text/event-stream):
86
+ * event: status data: {"status":"running","trace_id":"..."}
87
+ * event: stage data: {"stage":"loading_skill",...}
88
+ * event: tool_call data: {"tool_name":"...","args":{...}}
89
+ * event: tool_result data: {"tool_name":"..."}
90
+ * event: message_chunk data: {"content":"..."}
91
+ * event: result data: {"capability_id":"...","status":"completed","result":{...}}
92
+ * event: error data: {"error":"..."}
93
+ *
94
+ * @returns 最后一个 result 事件的数据,或 null(流中断且无 result)
95
+ */
96
+ invokeStreaming(baseUrl: string, capabilityId: string, input: Record<string, unknown>, onEvent?: (event: RestSSEEvent) => void, abortSignal?: AbortSignal): Promise<RestCapabilityResult | null>;
97
+ /** 异步提交:POST /api/v1/a2a/capabilities/{capabilityId}:submit */
98
+ submit(baseUrl: string, capabilityId: string, input: Record<string, unknown>): Promise<{
99
+ task_id: string;
100
+ [key: string]: unknown;
101
+ }>;
102
+ /** 查询任务状态:GET /api/v1/a2a/tasks/{taskId} */
103
+ getTask(baseUrl: string, taskId: string): Promise<RestTaskStatus>;
104
+ /** 构建 Capability URL */
105
+ private buildCapabilityUrl;
106
+ /** 带 chunkTimeout 的 reader.read() */
107
+ private readChunkWithTimeout;
108
+ /** 带超时的 fetch */
109
+ private fetchWithTimeout;
110
+ }
111
+ //# sourceMappingURL=rest-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rest-client.d.ts","sourceRoot":"","sources":["../../../src/a2a/rest-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,342 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // RestA2AClient — REST 风格 A2A 协议客户端
4
+ // 适用于非标准 JSON-RPC 的 A2A 实现(如 capability invoke/stream 风格)
5
+ // 协议特征:
6
+ // 发现:GET /api/v1/a2a/capabilities/{capabilityId}
7
+ // 同步:POST /api/v1/a2a/capabilities/{capabilityId}:invoke
8
+ // 流式:POST /api/v1/a2a/capabilities/{capabilityId}:stream (SSE)
9
+ // 异步:POST /api/v1/a2a/capabilities/{capabilityId}:submit
10
+ // 查询:GET /api/v1/a2a/tasks/{taskId}
11
+ // 认证:X-Service-Token 请求头
12
+ // ============================================================
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.RestA2AClient = void 0;
15
+ const client_ts_1 = require("./client.js");
16
+ // ---- RestA2AClient ----
17
+ /**
18
+ * REST 风格 A2A 协议客户端
19
+ *
20
+ * 用法:
21
+ * const client = new RestA2AClient({ auth: { type: 'custom', name: 'X-Service-Token', value: 'xxx' } });
22
+ * const card = await client.discoverCapability('http://localhost:8000', 'competitive_review');
23
+ * const result = await client.invoke('http://localhost:8000', 'competitive_review', { ... });
24
+ */
25
+ class RestA2AClient {
26
+ timeout;
27
+ connectTimeout;
28
+ chunkTimeout;
29
+ fetchFn;
30
+ headers;
31
+ constructor(options = {}) {
32
+ this.timeout = options.timeout ?? 300_000;
33
+ this.connectTimeout = options.connectTimeout ?? 30_000;
34
+ this.chunkTimeout = options.chunkTimeout ?? 60_000;
35
+ this.fetchFn = options.fetch ?? globalThis.fetch.bind(globalThis);
36
+ this.headers = { ...(0, client_ts_1.buildAuthHeaders)(options.auth), ...(options.headers ?? {}) };
37
+ }
38
+ // ---- Capability 发现 ----
39
+ /** 获取 Capability Card:GET /capabilities/{capabilityId},失败时尝试 :stream 探测 */
40
+ async discoverCapability(baseUrl, capabilityId) {
41
+ const url = this.buildCapabilityUrl(baseUrl, capabilityId);
42
+ console.log(`[REST-A2A] discoverCapability -> GET ${url}`);
43
+ try {
44
+ const res = await this.fetchWithTimeout(url, { method: 'GET' });
45
+ const contentType = res.headers.get('content-type') || '';
46
+ console.log(`[REST-A2A] discoverCapability response: HTTP ${res.status}, content-type: ${contentType}`);
47
+ if (res.ok && contentType.includes('application/json')) {
48
+ return (await res.json());
49
+ }
50
+ const bodyText = await res.text().catch(() => '');
51
+ console.warn(`[REST-A2A] discoverCapability GET not JSON: HTTP ${res.status}, content-type: ${contentType}, body: ${bodyText.slice(0, 200)}`);
52
+ }
53
+ catch (err) {
54
+ console.warn(`[REST-A2A] discoverCapability GET error: ${err?.message}`);
55
+ }
56
+ // GET 失败,尝试 POST :stream 发送空请求,读取第一个 SSE data 行提取 capability 信息
57
+ console.log(`[REST-A2A] discoverCapability fallback -> POST :stream (read first event only)`);
58
+ try {
59
+ const streamUrl = this.buildCapabilityUrl(baseUrl, capabilityId, 'stream');
60
+ const controller = new AbortController();
61
+ const timer = setTimeout(() => controller.abort(), 10_000);
62
+ const res = await this.fetchFn(streamUrl, {
63
+ method: 'POST',
64
+ headers: { 'Content-Type': 'application/json', ...this.headers },
65
+ body: JSON.stringify({}),
66
+ signal: controller.signal,
67
+ });
68
+ console.log(`[REST-A2A] discoverCapability stream response: HTTP ${res.status}, content-type: ${res.headers.get('content-type') || ''}`);
69
+ if (res.ok && res.body) {
70
+ const reader = res.body.getReader();
71
+ const decoder = new TextDecoder();
72
+ let buffer = '';
73
+ while (true) {
74
+ const { done, value } = await reader.read();
75
+ if (done)
76
+ break;
77
+ buffer += decoder.decode(value, { stream: true });
78
+ // 尝试从已收到的数据中解析第一个 data: 行
79
+ const dataMatch = buffer.match(/data:\s*(\{.+\})/);
80
+ if (dataMatch) {
81
+ reader.cancel().catch(() => { });
82
+ clearTimeout(timer);
83
+ const parsed = JSON.parse(dataMatch[1]);
84
+ console.log(`[REST-A2A] discoverCapability stream first event: ${JSON.stringify(parsed).slice(0, 300)}`);
85
+ return {
86
+ capability_id: String(parsed.capability_id || capabilityId),
87
+ capability_name: String(parsed.capability_name || ''),
88
+ description: String(parsed.description || parsed.result?.summary || ''),
89
+ ...parsed,
90
+ };
91
+ }
92
+ // 如果积累太多数据还没找到 data 行,放弃
93
+ if (buffer.length > 10000)
94
+ break;
95
+ }
96
+ reader.cancel().catch(() => { });
97
+ clearTimeout(timer);
98
+ console.warn(`[REST-A2A] discoverCapability stream: no data event found in stream`);
99
+ }
100
+ else {
101
+ const bodyText = await res.text().catch(() => '');
102
+ console.warn(`[REST-A2A] discoverCapability stream fallback failed: HTTP ${res.status}, body: ${bodyText.slice(0, 200)}`);
103
+ }
104
+ }
105
+ catch (err) {
106
+ console.warn(`[REST-A2A] discoverCapability stream fallback error: ${err?.message}`);
107
+ }
108
+ // 所有方式都失败,返回最小化 card
109
+ return { capability_id: capabilityId, capability_name: capabilityId };
110
+ }
111
+ // ---- 同步调用 ----
112
+ /** 同步调用:POST /api/v1/a2a/capabilities/{capabilityId}:invoke */
113
+ async invoke(baseUrl, capabilityId, input) {
114
+ const url = this.buildCapabilityUrl(baseUrl, capabilityId, 'invoke');
115
+ const res = await this.fetchWithTimeout(url, {
116
+ method: 'POST',
117
+ headers: { 'Content-Type': 'application/json', ...this.headers },
118
+ body: JSON.stringify(input),
119
+ });
120
+ if (!res.ok) {
121
+ let bodyText = '';
122
+ try {
123
+ bodyText = await res.text();
124
+ }
125
+ catch { /* ignore */ }
126
+ throw new Error(`REST A2A invoke failed: HTTP ${res.status} from ${url}: ${bodyText.slice(0, 200)}`);
127
+ }
128
+ return (await res.json());
129
+ }
130
+ // ---- 流式调用 ----
131
+ /**
132
+ * 流式调用:POST /api/v1/a2a/capabilities/{capabilityId}:stream (SSE)
133
+ *
134
+ * SSE 事件格式(标准 text/event-stream):
135
+ * event: status data: {"status":"running","trace_id":"..."}
136
+ * event: stage data: {"stage":"loading_skill",...}
137
+ * event: tool_call data: {"tool_name":"...","args":{...}}
138
+ * event: tool_result data: {"tool_name":"..."}
139
+ * event: message_chunk data: {"content":"..."}
140
+ * event: result data: {"capability_id":"...","status":"completed","result":{...}}
141
+ * event: error data: {"error":"..."}
142
+ *
143
+ * @returns 最后一个 result 事件的数据,或 null(流中断且无 result)
144
+ */
145
+ async invokeStreaming(baseUrl, capabilityId, input, onEvent, abortSignal) {
146
+ const url = this.buildCapabilityUrl(baseUrl, capabilityId, 'stream');
147
+ // 连接阶段:独立 AbortController + connectTimeout + 外部 signal 联动
148
+ const connectAbort = new AbortController();
149
+ const connectTimer = setTimeout(() => connectAbort.abort(), this.connectTimeout);
150
+ if (abortSignal) {
151
+ if (abortSignal.aborted) {
152
+ connectAbort.abort();
153
+ }
154
+ else {
155
+ abortSignal.addEventListener('abort', () => connectAbort.abort(), { once: true });
156
+ }
157
+ }
158
+ let res;
159
+ try {
160
+ res = await this.fetchFn(url, {
161
+ method: 'POST',
162
+ headers: { 'Content-Type': 'application/json', ...this.headers },
163
+ body: JSON.stringify(input),
164
+ signal: connectAbort.signal,
165
+ });
166
+ }
167
+ catch (fetchErr) {
168
+ if (abortSignal?.aborted)
169
+ return null;
170
+ if (fetchErr?.name === 'AbortError') {
171
+ throw new Error(`REST A2A streaming connect timeout (${this.connectTimeout}ms) → ${url}`);
172
+ }
173
+ throw new Error(`REST A2A streaming connect error → ${url}: ${fetchErr?.message || fetchErr}`);
174
+ }
175
+ finally {
176
+ clearTimeout(connectTimer);
177
+ }
178
+ if (!res.ok) {
179
+ let bodyText = '';
180
+ try {
181
+ bodyText = await res.text();
182
+ }
183
+ catch { /* ignore */ }
184
+ console.error(`[REST-A2A-Client] HTTP ${res.status} from ${url}: ${bodyText.slice(0, 200)}`);
185
+ throw new Error(`REST A2A streaming failed: HTTP ${res.status} from ${url}`);
186
+ }
187
+ const body = res.body;
188
+ if (!body)
189
+ throw new Error('REST A2A streaming: empty response body');
190
+ let lastResult = null;
191
+ const reader = body.getReader();
192
+ const decoder = new TextDecoder();
193
+ let buffer = '';
194
+ let currentEvent = '';
195
+ try {
196
+ while (true) {
197
+ if (abortSignal?.aborted)
198
+ break;
199
+ const { done, value } = await this.readChunkWithTimeout(reader);
200
+ if (done)
201
+ break;
202
+ buffer += decoder.decode(value, { stream: true });
203
+ const lines = buffer.split('\n');
204
+ buffer = lines.pop() || '';
205
+ for (const line of lines) {
206
+ const trimmed = line.trim();
207
+ if (!trimmed || trimmed.startsWith(':'))
208
+ continue;
209
+ if (trimmed.startsWith('event:')) {
210
+ currentEvent = trimmed.slice(6).trim();
211
+ }
212
+ else if (trimmed.startsWith('data:')) {
213
+ const jsonStr = trimmed.slice(5).trim();
214
+ if (!jsonStr || jsonStr === '[DONE]') {
215
+ currentEvent = '';
216
+ continue;
217
+ }
218
+ try {
219
+ const data = JSON.parse(jsonStr);
220
+ const sseEvent = { event: currentEvent || 'message', data };
221
+ onEvent?.(sseEvent);
222
+ // 捕获最终结果
223
+ if (sseEvent.event === 'result') {
224
+ lastResult = data;
225
+ }
226
+ else if (sseEvent.event === 'error') {
227
+ lastResult = {
228
+ capability_id: capabilityId,
229
+ status: 'failed',
230
+ error: data.error || JSON.stringify(data),
231
+ };
232
+ }
233
+ }
234
+ catch { /* skip non-JSON */ }
235
+ currentEvent = '';
236
+ }
237
+ }
238
+ }
239
+ }
240
+ catch (streamErr) {
241
+ // 流异常时保留已接收结果(优雅降级)
242
+ if (abortSignal?.aborted)
243
+ return lastResult;
244
+ if (lastResult) {
245
+ console.warn(`[REST-A2A-Client] SSE stream error but have result, returning partial: ${streamErr?.message}`);
246
+ return lastResult;
247
+ }
248
+ throw streamErr;
249
+ }
250
+ finally {
251
+ try {
252
+ reader.releaseLock();
253
+ }
254
+ catch { /* ignore */ }
255
+ }
256
+ return lastResult;
257
+ }
258
+ // ---- 异步任务 ----
259
+ /** 异步提交:POST /api/v1/a2a/capabilities/{capabilityId}:submit */
260
+ async submit(baseUrl, capabilityId, input) {
261
+ const url = this.buildCapabilityUrl(baseUrl, capabilityId, 'submit');
262
+ const res = await this.fetchWithTimeout(url, {
263
+ method: 'POST',
264
+ headers: { 'Content-Type': 'application/json', ...this.headers },
265
+ body: JSON.stringify(input),
266
+ });
267
+ if (!res.ok) {
268
+ throw new Error(`REST A2A submit failed: HTTP ${res.status} from ${url}`);
269
+ }
270
+ return (await res.json());
271
+ }
272
+ /** 查询任务状态:GET /api/v1/a2a/tasks/{taskId} */
273
+ async getTask(baseUrl, taskId) {
274
+ const trimmed = baseUrl.replace(/\/+$/, '');
275
+ const url = `${trimmed}/api/v1/a2a/tasks/${taskId}`;
276
+ const res = await this.fetchWithTimeout(url, { method: 'GET' });
277
+ if (!res.ok) {
278
+ throw new Error(`REST A2A getTask failed: HTTP ${res.status} from ${url}`);
279
+ }
280
+ return (await res.json());
281
+ }
282
+ // ---- 内部方法 ----
283
+ /** 构建 Capability URL */
284
+ buildCapabilityUrl(baseUrl, capabilityId, action) {
285
+ const trimmed = baseUrl.trim().replace(/\/+$/, '');
286
+ // 如果 baseUrl 已包含 /capabilities/ 路径,保留原始路径前缀,仅替换 capabilityId 和 action
287
+ const capMatch = trimmed.match(/^(.+?\/capabilities\/)[^:/]+(?::\w+)?\/?$/);
288
+ if (capMatch) {
289
+ const prefix = capMatch[1];
290
+ const base = `${prefix}${capabilityId}`;
291
+ return action ? `${base}:${action}` : base;
292
+ }
293
+ // 标准拼接
294
+ const base = `${trimmed}/api/v1/a2a/capabilities/${capabilityId}`;
295
+ return action ? `${base}:${action}` : base;
296
+ }
297
+ /** 带 chunkTimeout 的 reader.read() */
298
+ async readChunkWithTimeout(reader) {
299
+ let timer;
300
+ const timeout = new Promise((_, reject) => {
301
+ timer = setTimeout(() => {
302
+ reject(new Error(`REST A2A streaming chunk timeout: no data for ${this.chunkTimeout}ms`));
303
+ }, this.chunkTimeout);
304
+ });
305
+ try {
306
+ return await Promise.race([reader.read(), timeout]);
307
+ }
308
+ finally {
309
+ clearTimeout(timer);
310
+ }
311
+ }
312
+ /** 带超时的 fetch */
313
+ async fetchWithTimeout(url, init) {
314
+ const controller = new AbortController();
315
+ const timer = setTimeout(() => controller.abort(), this.timeout);
316
+ try {
317
+ return await this.fetchFn(url, { ...init, signal: controller.signal });
318
+ }
319
+ catch (err) {
320
+ const msg = err?.message || String(err);
321
+ // 提供更友好的错误信息
322
+ if (err?.name === 'AbortError') {
323
+ throw new Error(`REST A2A request timeout after ${this.timeout}ms: ${url}`);
324
+ }
325
+ if (err?.cause?.code === 'ECONNREFUSED') {
326
+ throw new Error(`REST A2A connection refused: ${url} (is the server running?)`);
327
+ }
328
+ if (err?.cause?.code === 'ENOTFOUND' || msg.includes('getaddrinfo')) {
329
+ throw new Error(`REST A2A DNS resolution failed: ${url}`);
330
+ }
331
+ if (err?.cause?.code === 'ECONNRESET') {
332
+ throw new Error(`REST A2A connection reset: ${url}`);
333
+ }
334
+ throw new Error(`REST A2A fetch failed: ${url} — ${msg} (cause: ${err?.cause?.code || err?.cause?.message || 'unknown'})`);
335
+ }
336
+ finally {
337
+ clearTimeout(timer);
338
+ }
339
+ }
340
+ }
341
+ exports.RestA2AClient = RestA2AClient;
342
+ //# sourceMappingURL=rest-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rest-client.js","sourceRoot":"","sources":["../../../src/a2a/rest-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import type { SubAgentRunner } from '../tool/delegate.js';
2
+ import type { RestA2AClient } from './rest-client.js';
3
+ /** createRestA2ARemoteRunner 配置项 */
4
+ export interface RestA2ARemoteRunnerConfig {
5
+ /** 远程 Agent 的 base URL(如 http://localhost:8000) */
6
+ baseUrl: string;
7
+ /** Capability ID(如 'competitive_review') */
8
+ capabilityId: string;
9
+ /** Runner 标识名(展示用) */
10
+ name: string;
11
+ /** Runner 能力描述(供 LLM 理解) */
12
+ description: string;
13
+ /** REST A2A 客户端实例 */
14
+ client: RestA2AClient;
15
+ /** 静态输入字段(如 { caller_agent_id: 'agent-alpha', business_line: '固定收益' }) */
16
+ staticFields?: Record<string, string>;
17
+ /** 任务字符串映射到的字段名(默认 'analysis_focus') */
18
+ taskField?: string;
19
+ /** 是否启用流式(默认 true) */
20
+ streaming?: boolean;
21
+ /** 流式失败时是否自动回退到同步模式,默认 true */
22
+ fallbackToSync?: boolean;
23
+ }
24
+ /**
25
+ * 创建 REST 风格远程 A2A Agent 的 SubAgentRunner
26
+ *
27
+ * 核心逻辑:
28
+ * - streaming=true && ctx.emitSubEvent 存在 → invokeStreaming + 事件转发
29
+ * - 否则 → invoke 同步阻塞
30
+ *
31
+ * 事件映射:
32
+ * - status(running) → start
33
+ * - stage → progress
34
+ * - tool_call → tool_call
35
+ * - tool_result → tool_result
36
+ * - message_chunk → content
37
+ * - result → done(由 runStreaming 提取最终文本)
38
+ * - error → error
39
+ */
40
+ export declare function createRestA2ARemoteRunner(config: RestA2ARemoteRunnerConfig): SubAgentRunner;
41
+ //# sourceMappingURL=rest-runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rest-runner.d.ts","sourceRoot":"","sources":["../../../src/a2a/rest-runner.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1D,OAAO,KAAK,EAAE,aAAa,EAAsC,MAAM,kBAAkB,CAAC;AAE1F,oCAAoC;AACpC,MAAM,WAAW,yBAAyB;IACxC,mDAAmD;IACnD,OAAO,EAAE,MAAM,CAAC;IAChB,4CAA4C;IAC5C,YAAY,EAAE,MAAM,CAAC;IACrB,sBAAsB;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,4BAA4B;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,qBAAqB;IACrB,MAAM,EAAE,aAAa,CAAC;IACtB,0EAA0E;IAC1E,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,wCAAwC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sBAAsB;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,+BAA+B;IAC/B,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,yBAAyB,GAAG,cAAc,CA4F3F"}