proofscan 0.10.62 → 0.11.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (199) hide show
  1. package/README.ja.md +1 -0
  2. package/README.md +2 -0
  3. package/dist/a2a/agent-card.d.ts +2 -0
  4. package/dist/a2a/agent-card.d.ts.map +1 -1
  5. package/dist/a2a/agent-card.js +2 -2
  6. package/dist/a2a/agent-card.js.map +1 -1
  7. package/dist/a2a/client.d.ts +74 -12
  8. package/dist/a2a/client.d.ts.map +1 -1
  9. package/dist/a2a/client.js +228 -29
  10. package/dist/a2a/client.js.map +1 -1
  11. package/dist/a2a/normalizer.d.ts +4 -0
  12. package/dist/a2a/normalizer.d.ts.map +1 -1
  13. package/dist/a2a/normalizer.js +7 -4
  14. package/dist/a2a/normalizer.js.map +1 -1
  15. package/dist/a2a/session-manager.d.ts +81 -0
  16. package/dist/a2a/session-manager.d.ts.map +1 -0
  17. package/dist/a2a/session-manager.js +176 -0
  18. package/dist/a2a/session-manager.js.map +1 -0
  19. package/dist/a2a/types.d.ts +60 -0
  20. package/dist/a2a/types.d.ts.map +1 -1
  21. package/dist/cli.d.ts +2 -1
  22. package/dist/cli.d.ts.map +1 -1
  23. package/dist/cli.js +6 -3
  24. package/dist/cli.js.map +1 -1
  25. package/dist/commands/agent.d.ts.map +1 -1
  26. package/dist/commands/agent.js +35 -10
  27. package/dist/commands/agent.js.map +1 -1
  28. package/dist/commands/analyze.d.ts.map +1 -1
  29. package/dist/commands/analyze.js +12 -10
  30. package/dist/commands/analyze.js.map +1 -1
  31. package/dist/commands/connectors.js +2 -2
  32. package/dist/commands/connectors.js.map +1 -1
  33. package/dist/commands/index.d.ts +1 -0
  34. package/dist/commands/index.d.ts.map +1 -1
  35. package/dist/commands/index.js +1 -0
  36. package/dist/commands/index.js.map +1 -1
  37. package/dist/commands/plans.js +1 -1
  38. package/dist/commands/plans.js.map +1 -1
  39. package/dist/commands/record.js +5 -4
  40. package/dist/commands/record.js.map +1 -1
  41. package/dist/commands/rpc.d.ts.map +1 -1
  42. package/dist/commands/rpc.js +90 -28
  43. package/dist/commands/rpc.js.map +1 -1
  44. package/dist/commands/scan.d.ts.map +1 -1
  45. package/dist/commands/scan.js +8 -10
  46. package/dist/commands/scan.js.map +1 -1
  47. package/dist/commands/secrets.d.ts.map +1 -1
  48. package/dist/commands/secrets.js +11 -10
  49. package/dist/commands/secrets.js.map +1 -1
  50. package/dist/commands/sessions.js +2 -2
  51. package/dist/commands/sessions.js.map +1 -1
  52. package/dist/commands/summary.d.ts.map +1 -1
  53. package/dist/commands/summary.js +4 -2
  54. package/dist/commands/summary.js.map +1 -1
  55. package/dist/commands/task.d.ts +14 -0
  56. package/dist/commands/task.d.ts.map +1 -0
  57. package/dist/commands/task.js +520 -0
  58. package/dist/commands/task.js.map +1 -0
  59. package/dist/db/connection.d.ts.map +1 -1
  60. package/dist/db/connection.js +68 -21
  61. package/dist/db/connection.js.map +1 -1
  62. package/dist/db/events-store.d.ts +307 -8
  63. package/dist/db/events-store.d.ts.map +1 -1
  64. package/dist/db/events-store.js +620 -26
  65. package/dist/db/events-store.js.map +1 -1
  66. package/dist/db/proofs-store.d.ts +8 -1
  67. package/dist/db/proofs-store.d.ts.map +1 -1
  68. package/dist/db/proofs-store.js +18 -8
  69. package/dist/db/proofs-store.js.map +1 -1
  70. package/dist/db/schema.d.ts +15 -3
  71. package/dist/db/schema.d.ts.map +1 -1
  72. package/dist/db/schema.js +150 -5
  73. package/dist/db/schema.js.map +1 -1
  74. package/dist/db/tool-analysis.d.ts +15 -3
  75. package/dist/db/tool-analysis.d.ts.map +1 -1
  76. package/dist/db/tool-analysis.js +35 -17
  77. package/dist/db/tool-analysis.js.map +1 -1
  78. package/dist/db/types.d.ts +64 -1
  79. package/dist/db/types.d.ts.map +1 -1
  80. package/dist/filter/fields.d.ts.map +1 -1
  81. package/dist/filter/fields.js +22 -0
  82. package/dist/filter/fields.js.map +1 -1
  83. package/dist/filter/parser.js +2 -2
  84. package/dist/filter/parser.js.map +1 -1
  85. package/dist/filter/types.d.ts +1 -1
  86. package/dist/filter/types.d.ts.map +1 -1
  87. package/dist/html/analytics.test.ts +682 -0
  88. package/dist/html/analytics.ts +499 -0
  89. package/dist/html/browser.ts +39 -0
  90. package/dist/html/index.ts +97 -0
  91. package/dist/html/rpc-inspector.test.ts +529 -0
  92. package/dist/html/rpc-inspector.ts +1700 -0
  93. package/dist/html/templates.js +4 -4
  94. package/dist/html/templates.js.map +1 -1
  95. package/dist/html/templates.test.ts +861 -0
  96. package/dist/html/templates.ts +3163 -0
  97. package/dist/html/trace-viewer.html +624 -0
  98. package/dist/html/types.d.ts +3 -3
  99. package/dist/html/types.d.ts.map +1 -1
  100. package/dist/html/types.ts +491 -0
  101. package/dist/html/utils.ts +107 -0
  102. package/dist/monitor/data/connectors.d.ts.map +1 -1
  103. package/dist/monitor/data/connectors.js +113 -8
  104. package/dist/monitor/data/connectors.js.map +1 -1
  105. package/dist/monitor/data/popl.js +2 -2
  106. package/dist/monitor/data/popl.js.map +1 -1
  107. package/dist/monitor/routes/api.js +2 -2
  108. package/dist/monitor/routes/api.js.map +1 -1
  109. package/dist/monitor/routes/connectors.js +15 -15
  110. package/dist/monitor/routes/connectors.js.map +1 -1
  111. package/dist/monitor/routes/popl.js +5 -5
  112. package/dist/monitor/routes/popl.js.map +1 -1
  113. package/dist/monitor/templates/components.js +2 -2
  114. package/dist/monitor/templates/components.js.map +1 -1
  115. package/dist/monitor/templates/popl.js +4 -4
  116. package/dist/monitor/templates/popl.js.map +1 -1
  117. package/dist/monitor/types.d.ts +2 -2
  118. package/dist/monitor/types.d.ts.map +1 -1
  119. package/dist/proxy/bridge-utils.d.ts +41 -0
  120. package/dist/proxy/bridge-utils.d.ts.map +1 -0
  121. package/dist/proxy/bridge-utils.js +60 -0
  122. package/dist/proxy/bridge-utils.js.map +1 -0
  123. package/dist/proxy/ipc-client.d.ts.map +1 -1
  124. package/dist/proxy/ipc-client.js +1 -2
  125. package/dist/proxy/ipc-client.js.map +1 -1
  126. package/dist/proxy/ipc-server.d.ts.map +1 -1
  127. package/dist/proxy/ipc-server.js +4 -2
  128. package/dist/proxy/ipc-server.js.map +1 -1
  129. package/dist/proxy/mcp-server.d.ts +31 -0
  130. package/dist/proxy/mcp-server.d.ts.map +1 -1
  131. package/dist/proxy/mcp-server.js +393 -4
  132. package/dist/proxy/mcp-server.js.map +1 -1
  133. package/dist/proxy/types.d.ts +95 -0
  134. package/dist/proxy/types.d.ts.map +1 -1
  135. package/dist/secrets/management.d.ts +2 -2
  136. package/dist/secrets/management.d.ts.map +1 -1
  137. package/dist/secrets/management.js +7 -7
  138. package/dist/secrets/management.js.map +1 -1
  139. package/dist/shell/completer.d.ts.map +1 -1
  140. package/dist/shell/completer.js +16 -0
  141. package/dist/shell/completer.js.map +1 -1
  142. package/dist/shell/context-applicator.d.ts.map +1 -1
  143. package/dist/shell/context-applicator.js +32 -0
  144. package/dist/shell/context-applicator.js.map +1 -1
  145. package/dist/shell/filter-mappers.d.ts +5 -1
  146. package/dist/shell/filter-mappers.d.ts.map +1 -1
  147. package/dist/shell/filter-mappers.js +12 -0
  148. package/dist/shell/filter-mappers.js.map +1 -1
  149. package/dist/shell/find-command.js +13 -13
  150. package/dist/shell/find-command.js.map +1 -1
  151. package/dist/shell/inscribe-commands.js +5 -5
  152. package/dist/shell/inscribe-commands.js.map +1 -1
  153. package/dist/shell/pager/less-pager.d.ts +1 -1
  154. package/dist/shell/pager/less-pager.d.ts.map +1 -1
  155. package/dist/shell/pager/less-pager.js +5 -2
  156. package/dist/shell/pager/less-pager.js.map +1 -1
  157. package/dist/shell/pager/more-pager.d.ts +1 -1
  158. package/dist/shell/pager/more-pager.d.ts.map +1 -1
  159. package/dist/shell/pager/more-pager.js +3 -2
  160. package/dist/shell/pager/more-pager.js.map +1 -1
  161. package/dist/shell/pager/renderer.d.ts.map +1 -1
  162. package/dist/shell/pager/renderer.js +66 -15
  163. package/dist/shell/pager/renderer.js.map +1 -1
  164. package/dist/shell/pager/types.d.ts +5 -2
  165. package/dist/shell/pager/types.d.ts.map +1 -1
  166. package/dist/shell/pager/utils.d.ts +5 -2
  167. package/dist/shell/pager/utils.d.ts.map +1 -1
  168. package/dist/shell/pager/utils.js +14 -17
  169. package/dist/shell/pager/utils.js.map +1 -1
  170. package/dist/shell/pipeline-types.d.ts +12 -4
  171. package/dist/shell/pipeline-types.d.ts.map +1 -1
  172. package/dist/shell/ref-commands.js +7 -7
  173. package/dist/shell/ref-commands.js.map +1 -1
  174. package/dist/shell/ref-resolver.d.ts +15 -15
  175. package/dist/shell/ref-resolver.d.ts.map +1 -1
  176. package/dist/shell/ref-resolver.js +34 -20
  177. package/dist/shell/ref-resolver.js.map +1 -1
  178. package/dist/shell/repl.d.ts +25 -0
  179. package/dist/shell/repl.d.ts.map +1 -1
  180. package/dist/shell/repl.js +285 -51
  181. package/dist/shell/repl.js.map +1 -1
  182. package/dist/shell/router-commands.d.ts +30 -0
  183. package/dist/shell/router-commands.d.ts.map +1 -1
  184. package/dist/shell/router-commands.js +1011 -62
  185. package/dist/shell/router-commands.js.map +1 -1
  186. package/dist/shell/selector.d.ts +1 -1
  187. package/dist/shell/selector.d.ts.map +1 -1
  188. package/dist/shell/selector.js +1 -1
  189. package/dist/shell/selector.js.map +1 -1
  190. package/dist/shell/types.d.ts.map +1 -1
  191. package/dist/shell/types.js +3 -1
  192. package/dist/shell/types.js.map +1 -1
  193. package/dist/shell/where-command.d.ts.map +1 -1
  194. package/dist/shell/where-command.js +19 -3
  195. package/dist/shell/where-command.js.map +1 -1
  196. package/dist/utils/output.d.ts.map +1 -1
  197. package/dist/utils/output.js +7 -1
  198. package/dist/utils/output.js.map +1 -1
  199. package/package.json +2 -2
package/README.ja.md CHANGED
@@ -24,6 +24,7 @@ proofscan は MCP (Model Context Protocol) サーバー通信の完全な可視
24
24
  - 🐚 **[シェルモードガイド](docs/SHELL.ja.md)** - 対話型シェルと @参照
25
25
  - 🎭 **[プロキシガイド](docs/PROXY.ja.md)** - MCP プロキシサーバードキュメント
26
26
  - 📦 **[POPL ガイド](docs/POPL.ja.md)** - 公開可能証明台帳
27
+ - 🖥️ **[MCP Apps UI](docs/MCP_APPS.ja.md)** - インタラクティブトレースビューア
27
28
  - 🔧 **[API ドキュメント](docs/API.ja.md)** - 開発者向け TypeScript API
28
29
 
29
30
  ## インストール
package/README.md CHANGED
@@ -30,6 +30,7 @@ proofscan provides complete visibility into MCP (Model Context Protocol) server
30
30
  | 📦 **Catalog** | Search and install MCP servers from registry |
31
31
  | 📈 **Analyze** | Tool usage analysis across sessions |
32
32
  | 📝 **Plans** | Validation plans for automated testing |
33
+ | 🖥️ **MCP Apps** | Interactive trace viewer UI in Claude Desktop |
33
34
  | 🌍 **i18n** | Multi-language support (English, 日本語) |
34
35
 
35
36
  ## Quick Links
@@ -41,6 +42,7 @@ proofscan provides complete visibility into MCP (Model Context Protocol) server
41
42
  - 🎭 **[Proxy Guide](docs/PROXY.md)** ([日本語](docs/PROXY.ja.md)) – MCP proxy server
42
43
  - 📦 **[POPL Guide](docs/POPL.md)** ([日本語](docs/POPL.ja.md)) – Public Observable Proof Ledger
43
44
  - 🔧 **[MCP Server Setup](docs/MCP_SERVER_SETUP_GUIDE.md)** ([日本語](docs/MCP_SERVER_SETUP_GUIDE.ja.md)) – Setting up MCP servers
45
+ - 🖥️ **[MCP Apps UI](docs/MCP_APPS.md)** ([日本語](docs/MCP_APPS.ja.md)) – Interactive trace viewer UI
44
46
 
45
47
  ### For Developers
46
48
 
@@ -7,6 +7,8 @@ import type { AgentCard } from './types.js';
7
7
  export interface FetchAgentCardOptions {
8
8
  timeout?: number;
9
9
  headers?: Record<string, string>;
10
+ /** Allow private/local URLs (development only) */
11
+ allowLocal?: boolean;
10
12
  }
11
13
  export interface FetchAgentCardResult {
12
14
  ok: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"agent-card.d.ts","sourceRoot":"","sources":["../../src/a2a/agent-card.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAG5C,MAAM,WAAW,qBAAqB;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,OAAO,CAAC;IACZ,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAOD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAiDjD;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CA4BzD;AASD;;;;;GAKG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,oBAAoB,CAAC,CA4H/B"}
1
+ {"version":3,"file":"agent-card.d.ts","sourceRoot":"","sources":["../../src/a2a/agent-card.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAG5C,MAAM,WAAW,qBAAqB;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,kDAAkD;IAClD,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,OAAO,CAAC;IACZ,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAOD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAiDjD;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CA4BzD;AASD;;;;;GAKG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,oBAAoB,CAAC,CA4H/B"}
@@ -111,7 +111,7 @@ function computeHash(body) {
111
111
  * @returns FetchAgentCardResult with parsed AgentCard or error
112
112
  */
113
113
  export async function fetchAgentCard(url, options = {}) {
114
- const { timeout = 10000, headers = {} } = options;
114
+ const { timeout = 10000, headers = {}, allowLocal = false } = options;
115
115
  const agentCardUrl = normalizeAgentCardUrl(url);
116
116
  // Validate URL format
117
117
  try {
@@ -124,7 +124,7 @@ export async function fetchAgentCard(url, options = {}) {
124
124
  };
125
125
  }
126
126
  // SSRF protection: Block private and local URLs
127
- if (isPrivateUrl(agentCardUrl)) {
127
+ if (isPrivateUrl(agentCardUrl) && !allowLocal) {
128
128
  return {
129
129
  ok: false,
130
130
  error: 'Private or local URLs are not allowed',
@@ -1 +1 @@
1
- {"version":3,"file":"agent-card.js","sourceRoot":"","sources":["../../src/a2a/agent-card.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-card.js","sourceRoot":"","sources":["../../src/a2a/agent-card.ts"],"names":[],"mappings":"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"}
@@ -2,12 +2,15 @@
2
2
  * A2A Client
3
3
  *
4
4
  * Client for sending messages to A2A agents via JSON-RPC 2.0.
5
- * Implements message/send, tasks/get, and tasks/cancel operations.
5
+ * Implements message/send, tasks/get, tasks/list, and tasks/cancel operations.
6
6
  *
7
7
  * Phase 4 - Client Implementation
8
+ * Phase 2 - Task Management (getTask, listTasks, cancelTask)
9
+ * Phase 2.4 - Task DB event recording
8
10
  */
9
- import type { AgentCard, TaskStatusUpdateEvent, TaskArtifactUpdateEvent, StreamMessageResult, A2AMessage, A2ATask } from './types.js';
10
- export type { A2AMessage, A2ATask } from './types.js';
11
+ import type { AgentCard, TaskStatusUpdateEvent, TaskArtifactUpdateEvent, StreamMessageResult, A2AMessage, A2ATask, Task, ListTasksParams, ListTasksResponse, AgentCapabilities } from './types.js';
12
+ import type { EventsStore } from '../db/events-store.js';
13
+ export type { A2AMessage, A2ATask, Task, ListTasksParams, ListTasksResponse } from './types.js';
11
14
  export interface SendMessageOptions {
12
15
  timeout?: number;
13
16
  headers?: Record<string, string>;
@@ -30,6 +33,29 @@ export interface StreamMessageOptions {
30
33
  onError?: (error: string) => void;
31
34
  signal?: AbortSignal;
32
35
  }
36
+ export interface GetTaskOptions {
37
+ historyLength?: number;
38
+ headers?: Record<string, string>;
39
+ timeout?: number;
40
+ }
41
+ export interface GetTaskResult {
42
+ ok: boolean;
43
+ task?: Task;
44
+ error?: string;
45
+ statusCode?: number;
46
+ }
47
+ export interface CancelTaskResult {
48
+ ok: boolean;
49
+ task?: Task;
50
+ error?: string;
51
+ statusCode?: number;
52
+ }
53
+ export interface ListTasksResult {
54
+ ok: boolean;
55
+ response?: ListTasksResponse;
56
+ error?: string;
57
+ statusCode?: number;
58
+ }
33
59
  /**
34
60
  * A2A Client for sending messages to agents
35
61
  */
@@ -37,27 +63,48 @@ export declare class A2AClient {
37
63
  private baseUrl;
38
64
  private defaultHeaders;
39
65
  private agentCard;
66
+ private allowLocal;
67
+ private eventsStore?;
40
68
  constructor(agentCard: AgentCard, options?: {
41
69
  headers?: Record<string, string>;
70
+ allowLocal?: boolean;
71
+ eventsStore?: EventsStore;
42
72
  });
73
+ /**
74
+ * Get EventsStore instance (Phase 2.4)
75
+ * @private
76
+ */
77
+ private getEventsStore;
43
78
  /**
44
79
  * Send a message to the agent
45
80
  * POST /message/send (JSON-RPC 2.0)
46
81
  */
47
82
  sendMessage(message: string | A2AMessage, options?: SendMessageOptions): Promise<SendMessageResult>;
48
83
  /**
49
- * Get task status
50
- * POST /tasks/get (JSON-RPC 2.0)
84
+ * Get task by ID (Phase 2 - A2A Protocol Compliant)
85
+ * POST /a2a (JSON-RPC 2.0)
86
+ *
87
+ * @param taskId - The task ID to retrieve
88
+ * @param options - Optional: historyLength, headers, timeout
89
+ * @returns Promise<GetTaskResult> with task or error
90
+ */
91
+ getTask(taskId: string, options?: GetTaskOptions): Promise<GetTaskResult>;
92
+ /**
93
+ * List tasks with optional filters (Phase 2)
94
+ * POST /a2a (JSON-RPC 2.0)
95
+ *
96
+ * @param params - Optional: contextId, status, pageSize, pageToken, includeArtifacts
97
+ * @returns Promise<ListTasksResult> with tasks list or error
51
98
  */
52
- getTask(taskId: string): Promise<SendMessageResult>;
99
+ listTasks(params?: ListTasksParams): Promise<ListTasksResult>;
53
100
  /**
54
- * Cancel a task
55
- * POST /tasks/cancel (JSON-RPC 2.0)
101
+ * Cancel a task (Phase 2 - A2A Protocol Compliant)
102
+ * POST /a2a (JSON-RPC 2.0)
103
+ *
104
+ * @param taskId - The task ID to cancel
105
+ * @returns Promise<CancelTaskResult> with canceled task or error
56
106
  */
57
- cancelTask(taskId: string): Promise<{
58
- ok: boolean;
59
- error?: string;
60
- }>;
107
+ cancelTask(taskId: string): Promise<CancelTaskResult>;
61
108
  /**
62
109
  * Stream message to agent
63
110
  * POST /message/stream (JSON-RPC 2.0 + SSE response)
@@ -104,4 +151,19 @@ export declare function createA2AClient(configDir: string, agentId: string): Pro
104
151
  ok: false;
105
152
  error: string;
106
153
  }>;
154
+ /**
155
+ * Probe agent capabilities (Phase 2.5)
156
+ *
157
+ * Detects agent capabilities by:
158
+ * 1. Checking Agent Card capabilities field (if present)
159
+ * 2. Probing tasks/list endpoint to detect task support
160
+ *
161
+ * Note: Streaming capability is only detected from Agent Card, not probed,
162
+ * because SSE probing is more complex and unreliable.
163
+ *
164
+ * @param agentCard - The agent's Agent Card
165
+ * @param _allowLocal - Reserved for future use (URL validation)
166
+ * @returns Promise<AgentCapabilities> with detected capabilities
167
+ */
168
+ export declare function probeCapabilities(agentCard: AgentCard, _allowLocal?: boolean): Promise<AgentCapabilities>;
107
169
  //# sourceMappingURL=client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/a2a/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/a2a/client.ts"],"names":[],"mappings":"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"}
@@ -2,9 +2,11 @@
2
2
  * A2A Client
3
3
  *
4
4
  * Client for sending messages to A2A agents via JSON-RPC 2.0.
5
- * Implements message/send, tasks/get, and tasks/cancel operations.
5
+ * Implements message/send, tasks/get, tasks/list, and tasks/cancel operations.
6
6
  *
7
7
  * Phase 4 - Client Implementation
8
+ * Phase 2 - Task Management (getTask, listTasks, cancelTask)
9
+ * Phase 2.4 - Task DB event recording
8
10
  */
9
11
  import { randomUUID } from 'crypto';
10
12
  import { isPrivateUrl } from './agent-card.js';
@@ -18,11 +20,15 @@ export class A2AClient {
18
20
  baseUrl;
19
21
  defaultHeaders;
20
22
  agentCard;
23
+ allowLocal;
24
+ eventsStore; // Phase 2.4: Optional events store for task event recording
21
25
  constructor(agentCard, options) {
22
26
  this.agentCard = agentCard;
23
27
  this.baseUrl = agentCard.url.replace(/\/$/, '');
28
+ this.allowLocal = options?.allowLocal ?? false;
29
+ this.eventsStore = options?.eventsStore; // Phase 2.4
24
30
  // SSRF protection: Block private URLs in constructor
25
- if (isPrivateUrl(this.baseUrl)) {
31
+ if (isPrivateUrl(this.baseUrl) && !this.allowLocal) {
26
32
  throw new Error('Private or local URLs are not allowed');
27
33
  }
28
34
  this.defaultHeaders = {
@@ -31,16 +37,24 @@ export class A2AClient {
31
37
  ...options?.headers,
32
38
  };
33
39
  }
40
+ /**
41
+ * Get EventsStore instance (Phase 2.4)
42
+ * @private
43
+ */
44
+ getEventsStore() {
45
+ return this.eventsStore;
46
+ }
34
47
  /**
35
48
  * Send a message to the agent
36
49
  * POST /message/send (JSON-RPC 2.0)
37
50
  */
38
51
  async sendMessage(message, options = {}) {
39
52
  const { timeout = 30000, headers = {}, blocking = false } = options;
40
- // Convert string message to A2AMessage
53
+ // Convert string message to A2AMessage with unique messageId
54
+ const messageId = randomUUID();
41
55
  const a2aMessage = typeof message === 'string'
42
- ? { role: 'user', parts: [{ text: message }] }
43
- : message;
56
+ ? { role: 'user', parts: [{ text: message }], messageId }
57
+ : { ...message, messageId: message.messageId ?? messageId };
44
58
  // Build JSON-RPC request with unique ID
45
59
  const requestId = randomUUID();
46
60
  const request = {
@@ -57,13 +71,13 @@ export class A2AClient {
57
71
  const timeoutId = setTimeout(() => controller.abort(), timeout);
58
72
  try {
59
73
  // SSRF protection (defense-in-depth): Double-check URL even though constructor validates
60
- if (isPrivateUrl(this.baseUrl)) {
74
+ if (isPrivateUrl(this.baseUrl) && !this.allowLocal) {
61
75
  return {
62
76
  ok: false,
63
77
  error: 'Private or local URLs are not allowed',
64
78
  };
65
79
  }
66
- const response = await fetch(`${this.baseUrl}/message/send`, {
80
+ const response = await fetch(this.baseUrl, {
67
81
  method: 'POST',
68
82
  headers: { ...this.defaultHeaders, ...headers },
69
83
  body: JSON.stringify(request),
@@ -163,26 +177,34 @@ export class A2AClient {
163
177
  }
164
178
  }
165
179
  /**
166
- * Get task status
167
- * POST /tasks/get (JSON-RPC 2.0)
180
+ * Get task by ID (Phase 2 - A2A Protocol Compliant)
181
+ * POST /a2a (JSON-RPC 2.0)
182
+ *
183
+ * @param taskId - The task ID to retrieve
184
+ * @param options - Optional: historyLength, headers, timeout
185
+ * @returns Promise<GetTaskResult> with task or error
168
186
  */
169
- async getTask(taskId) {
187
+ async getTask(taskId, options = {}) {
188
+ const { historyLength, headers = {}, timeout = 30000 } = options;
170
189
  const requestId = randomUUID();
171
190
  const request = {
172
191
  jsonrpc: '2.0',
173
192
  id: requestId,
174
193
  method: 'tasks/get',
175
194
  params: {
176
- name: `tasks/${taskId}`,
195
+ id: taskId,
196
+ ...(historyLength !== undefined && { historyLength }),
177
197
  },
178
198
  };
199
+ const controller = new AbortController();
200
+ const timeoutId = setTimeout(() => controller.abort(), timeout);
179
201
  try {
180
- const response = await fetch(`${this.baseUrl}/tasks/get`, {
202
+ const response = await fetch(this.baseUrl, {
181
203
  method: 'POST',
182
- headers: this.defaultHeaders,
204
+ headers: { ...this.defaultHeaders, ...headers },
183
205
  body: JSON.stringify(request),
206
+ signal: controller.signal,
184
207
  });
185
- // Validate Content-Type
186
208
  const contentType = response.headers.get('content-type');
187
209
  if (!contentType?.includes('application/json')) {
188
210
  return {
@@ -192,7 +214,6 @@ export class A2AClient {
192
214
  };
193
215
  }
194
216
  const responseText = await response.text();
195
- // Validate response size
196
217
  if (responseText.length > MAX_RESPONSE_SIZE) {
197
218
  return {
198
219
  ok: false,
@@ -228,6 +249,105 @@ export class A2AClient {
228
249
  const task = this.parseTask(responseData.result);
229
250
  return { ok: true, task };
230
251
  }
252
+ catch (error) {
253
+ if (error instanceof Error) {
254
+ if (error.name === 'AbortError') {
255
+ return {
256
+ ok: false,
257
+ error: `Request timeout after ${timeout}ms`,
258
+ };
259
+ }
260
+ return {
261
+ ok: false,
262
+ error: error.message,
263
+ };
264
+ }
265
+ return {
266
+ ok: false,
267
+ error: String(error),
268
+ };
269
+ }
270
+ finally {
271
+ clearTimeout(timeoutId);
272
+ }
273
+ }
274
+ /**
275
+ * List tasks with optional filters (Phase 2)
276
+ * POST /a2a (JSON-RPC 2.0)
277
+ *
278
+ * @param params - Optional: contextId, status, pageSize, pageToken, includeArtifacts
279
+ * @returns Promise<ListTasksResult> with tasks list or error
280
+ */
281
+ async listTasks(params) {
282
+ const requestId = randomUUID();
283
+ const request = {
284
+ jsonrpc: '2.0',
285
+ id: requestId,
286
+ method: 'tasks/list',
287
+ params: (params || {}),
288
+ };
289
+ try {
290
+ const response = await fetch(this.baseUrl, {
291
+ method: 'POST',
292
+ headers: this.defaultHeaders,
293
+ body: JSON.stringify(request),
294
+ });
295
+ const contentType = response.headers.get('content-type');
296
+ if (!contentType?.includes('application/json')) {
297
+ return {
298
+ ok: false,
299
+ statusCode: response.status,
300
+ error: `Expected JSON response, got ${contentType || 'unknown'}`,
301
+ };
302
+ }
303
+ const responseText = await response.text();
304
+ if (responseText.length > MAX_RESPONSE_SIZE) {
305
+ return {
306
+ ok: false,
307
+ statusCode: response.status,
308
+ error: `Response too large: ${responseText.length} bytes (max ${MAX_RESPONSE_SIZE})`,
309
+ };
310
+ }
311
+ let responseData;
312
+ try {
313
+ responseData = JSON.parse(responseText);
314
+ }
315
+ catch {
316
+ return {
317
+ ok: false,
318
+ statusCode: response.status,
319
+ error: `Invalid JSON response: ${responseText.slice(0, 200)}`,
320
+ };
321
+ }
322
+ if (responseData.error) {
323
+ return {
324
+ ok: false,
325
+ statusCode: response.status,
326
+ error: `${responseData.error.code}: ${responseData.error.message}`,
327
+ };
328
+ }
329
+ if (!responseData.result) {
330
+ return {
331
+ ok: false,
332
+ statusCode: response.status,
333
+ error: 'No result in response',
334
+ };
335
+ }
336
+ const result = responseData.result;
337
+ const tasks = [];
338
+ if (Array.isArray(result.tasks)) {
339
+ for (const taskData of result.tasks) {
340
+ tasks.push(this.parseTask(taskData));
341
+ }
342
+ }
343
+ const listResponse = {
344
+ tasks,
345
+ nextPageToken: result.nextPageToken ? String(result.nextPageToken) : '',
346
+ pageSize: typeof result.pageSize === 'number' ? result.pageSize : 50,
347
+ totalSize: typeof result.totalSize === 'number' ? result.totalSize : undefined,
348
+ };
349
+ return { ok: true, response: listResponse };
350
+ }
231
351
  catch (error) {
232
352
  if (error instanceof Error) {
233
353
  return {
@@ -242,8 +362,11 @@ export class A2AClient {
242
362
  }
243
363
  }
244
364
  /**
245
- * Cancel a task
246
- * POST /tasks/cancel (JSON-RPC 2.0)
365
+ * Cancel a task (Phase 2 - A2A Protocol Compliant)
366
+ * POST /a2a (JSON-RPC 2.0)
367
+ *
368
+ * @param taskId - The task ID to cancel
369
+ * @returns Promise<CancelTaskResult> with canceled task or error
247
370
  */
248
371
  async cancelTask(taskId) {
249
372
  const requestId = randomUUID();
@@ -252,28 +375,28 @@ export class A2AClient {
252
375
  id: requestId,
253
376
  method: 'tasks/cancel',
254
377
  params: {
255
- name: `tasks/${taskId}`,
378
+ id: taskId,
256
379
  },
257
380
  };
258
381
  try {
259
- const response = await fetch(`${this.baseUrl}/tasks/cancel`, {
382
+ const response = await fetch(this.baseUrl, {
260
383
  method: 'POST',
261
384
  headers: this.defaultHeaders,
262
385
  body: JSON.stringify(request),
263
386
  });
264
- // Validate Content-Type
265
387
  const contentType = response.headers.get('content-type');
266
388
  if (!contentType?.includes('application/json')) {
267
389
  return {
268
390
  ok: false,
391
+ statusCode: response.status,
269
392
  error: `Expected JSON response, got ${contentType || 'unknown'}`,
270
393
  };
271
394
  }
272
395
  const responseText = await response.text();
273
- // Validate response size
274
396
  if (responseText.length > MAX_RESPONSE_SIZE) {
275
397
  return {
276
398
  ok: false,
399
+ statusCode: response.status,
277
400
  error: `Response too large: ${responseText.length} bytes (max ${MAX_RESPONSE_SIZE})`,
278
401
  };
279
402
  }
@@ -284,15 +407,22 @@ export class A2AClient {
284
407
  catch {
285
408
  return {
286
409
  ok: false,
410
+ statusCode: response.status,
287
411
  error: `Invalid JSON response: ${responseText.slice(0, 200)}`,
288
412
  };
289
413
  }
290
414
  if (responseData.error) {
291
415
  return {
292
416
  ok: false,
417
+ statusCode: response.status,
293
418
  error: `${responseData.error.code}: ${responseData.error.message}`,
294
419
  };
295
420
  }
421
+ // Parse the canceled task from response
422
+ if (responseData.result) {
423
+ const task = this.parseTask(responseData.result);
424
+ return { ok: true, task };
425
+ }
296
426
  return { ok: true };
297
427
  }
298
428
  catch (error) {
@@ -334,7 +464,7 @@ export class A2AClient {
334
464
  }
335
465
  try {
336
466
  // SSRF protection (defense-in-depth)
337
- if (isPrivateUrl(this.baseUrl)) {
467
+ if (isPrivateUrl(this.baseUrl) && !this.allowLocal) {
338
468
  return {
339
469
  ok: false,
340
470
  error: 'Private or local URLs are not allowed',
@@ -435,9 +565,11 @@ export class A2AClient {
435
565
  updatedAt: data.updatedAt ? String(data.updatedAt) : undefined,
436
566
  contextId: data.contextId ? String(data.contextId) : undefined,
437
567
  };
438
- // Parse messages
439
- if (Array.isArray(data.messages)) {
440
- task.messages = data.messages.map(msg => this.parseMessage(msg));
568
+ // Parse messages (A2A uses 'history' field, some agents use 'messages')
569
+ const messageList = Array.isArray(data.history) ? data.history :
570
+ Array.isArray(data.messages) ? data.messages : [];
571
+ if (messageList.length > 0) {
572
+ task.messages = messageList.map(msg => this.parseMessage(msg));
441
573
  }
442
574
  // Parse artifacts
443
575
  if (Array.isArray(data.artifacts)) {
@@ -460,7 +592,8 @@ export class A2AClient {
460
592
  }
461
593
  const obj = data;
462
594
  const message = {
463
- role: obj.role === 'assistant' ? 'assistant' : 'user',
595
+ // A2A protocol uses 'agent' for assistant responses
596
+ role: (obj.role === 'assistant' || obj.role === 'agent') ? 'assistant' : 'user',
464
597
  parts: [],
465
598
  metadata: obj.metadata,
466
599
  contextId: obj.contextId ? String(obj.contextId) : undefined,
@@ -629,7 +762,7 @@ export async function createA2AClient(configDir, agentId) {
629
762
  }
630
763
  else {
631
764
  // Fetch fresh agent card
632
- const fetchResult = await fetchAgentCard(config.url);
765
+ const fetchResult = await fetchAgentCard(config.url, { allowLocal: config.allow_local ?? false });
633
766
  if (!fetchResult.ok || !fetchResult.agentCard) {
634
767
  return {
635
768
  ok: false,
@@ -648,8 +781,74 @@ export async function createA2AClient(configDir, agentId) {
648
781
  expiresAt,
649
782
  });
650
783
  }
651
- // Create client
652
- const client = new A2AClient(agentCard);
784
+ // Create client with allowLocal from config
785
+ const client = new A2AClient(agentCard, { allowLocal: config.allow_local ?? false });
653
786
  return { ok: true, client, agentCard };
654
787
  }
788
+ /**
789
+ * Probe agent capabilities (Phase 2.5)
790
+ *
791
+ * Detects agent capabilities by:
792
+ * 1. Checking Agent Card capabilities field (if present)
793
+ * 2. Probing tasks/list endpoint to detect task support
794
+ *
795
+ * Note: Streaming capability is only detected from Agent Card, not probed,
796
+ * because SSE probing is more complex and unreliable.
797
+ *
798
+ * @param agentCard - The agent's Agent Card
799
+ * @param _allowLocal - Reserved for future use (URL validation)
800
+ * @returns Promise<AgentCapabilities> with detected capabilities
801
+ */
802
+ export async function probeCapabilities(agentCard, _allowLocal = false) {
803
+ // Default capabilities (all false)
804
+ const capabilities = {
805
+ tasks: false,
806
+ streaming: false,
807
+ };
808
+ // First, check Agent Card capabilities field (if present)
809
+ // This is the authoritative source if provided by the agent
810
+ if (agentCard.capabilities) {
811
+ if (agentCard.capabilities.streaming !== undefined) {
812
+ capabilities.streaming = agentCard.capabilities.streaming;
813
+ }
814
+ }
815
+ // Probe tasks/list endpoint
816
+ try {
817
+ const response = await fetch(agentCard.url, {
818
+ method: 'POST',
819
+ headers: {
820
+ 'Content-Type': 'application/json',
821
+ },
822
+ body: JSON.stringify({
823
+ jsonrpc: '2.0',
824
+ id: 'probe-tasks',
825
+ method: 'tasks/list',
826
+ params: {},
827
+ }),
828
+ signal: AbortSignal.timeout(5000), // 5 second timeout for probe
829
+ });
830
+ // Check for successful JSON-RPC response
831
+ // A 200 with { "error": { "code": -32601, ... } } means method not found
832
+ if (response.ok) {
833
+ try {
834
+ const data = await response.json();
835
+ // Only set tasks=true if we get a result (not a JSON-RPC error)
836
+ if (data.result !== undefined && !data.error) {
837
+ capabilities.tasks = true;
838
+ }
839
+ }
840
+ catch {
841
+ // If we can't parse JSON, assume tasks not supported
842
+ }
843
+ }
844
+ }
845
+ catch {
846
+ // On network error or timeout, assume tasks not supported (keep false)
847
+ }
848
+ // Note: We don't probe message/stream here because:
849
+ // 1. It's more complex (SSE)
850
+ // 2. The Agent Card capabilities field is the preferred source
851
+ // 3. Most A2A agents that support tasks also support streaming
852
+ return capabilities;
853
+ }
655
854
  //# sourceMappingURL=client.js.map