proofscan 0.10.61 → 0.11.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 (223) hide show
  1. package/README.ja.md +1 -0
  2. package/README.md +2 -0
  3. package/dist/a2a/agent-card.d.ts +40 -0
  4. package/dist/a2a/agent-card.d.ts.map +1 -0
  5. package/dist/a2a/agent-card.js +227 -0
  6. package/dist/a2a/agent-card.js.map +1 -0
  7. package/dist/a2a/client.d.ts +169 -0
  8. package/dist/a2a/client.d.ts.map +1 -0
  9. package/dist/a2a/client.js +854 -0
  10. package/dist/a2a/client.js.map +1 -0
  11. package/dist/a2a/config.d.ts +35 -0
  12. package/dist/a2a/config.d.ts.map +1 -0
  13. package/dist/a2a/config.js +474 -0
  14. package/dist/a2a/config.js.map +1 -0
  15. package/dist/a2a/index.d.ts +11 -0
  16. package/dist/a2a/index.d.ts.map +1 -0
  17. package/dist/a2a/index.js +11 -0
  18. package/dist/a2a/index.js.map +1 -0
  19. package/dist/a2a/normalizer.d.ts +66 -0
  20. package/dist/a2a/normalizer.d.ts.map +1 -0
  21. package/dist/a2a/normalizer.js +146 -0
  22. package/dist/a2a/normalizer.js.map +1 -0
  23. package/dist/a2a/session-manager.d.ts +81 -0
  24. package/dist/a2a/session-manager.d.ts.map +1 -0
  25. package/dist/a2a/session-manager.js +176 -0
  26. package/dist/a2a/session-manager.js.map +1 -0
  27. package/dist/a2a/types.d.ts +249 -0
  28. package/dist/a2a/types.d.ts.map +1 -0
  29. package/dist/a2a/types.js +8 -0
  30. package/dist/a2a/types.js.map +1 -0
  31. package/dist/cli.d.ts +2 -1
  32. package/dist/cli.d.ts.map +1 -1
  33. package/dist/cli.js +8 -3
  34. package/dist/cli.js.map +1 -1
  35. package/dist/commands/agent.d.ts +12 -0
  36. package/dist/commands/agent.d.ts.map +1 -0
  37. package/dist/commands/agent.js +339 -0
  38. package/dist/commands/agent.js.map +1 -0
  39. package/dist/commands/analyze.d.ts.map +1 -1
  40. package/dist/commands/analyze.js +12 -10
  41. package/dist/commands/analyze.js.map +1 -1
  42. package/dist/commands/connectors.js +2 -2
  43. package/dist/commands/connectors.js.map +1 -1
  44. package/dist/commands/index.d.ts +2 -0
  45. package/dist/commands/index.d.ts.map +1 -1
  46. package/dist/commands/index.js +2 -0
  47. package/dist/commands/index.js.map +1 -1
  48. package/dist/commands/plans.js +1 -1
  49. package/dist/commands/plans.js.map +1 -1
  50. package/dist/commands/record.js +5 -4
  51. package/dist/commands/record.js.map +1 -1
  52. package/dist/commands/rpc.d.ts.map +1 -1
  53. package/dist/commands/rpc.js +220 -3
  54. package/dist/commands/rpc.js.map +1 -1
  55. package/dist/commands/scan.d.ts.map +1 -1
  56. package/dist/commands/scan.js +8 -10
  57. package/dist/commands/scan.js.map +1 -1
  58. package/dist/commands/secrets.d.ts.map +1 -1
  59. package/dist/commands/secrets.js +11 -10
  60. package/dist/commands/secrets.js.map +1 -1
  61. package/dist/commands/sessions.js +2 -2
  62. package/dist/commands/sessions.js.map +1 -1
  63. package/dist/commands/summary.d.ts.map +1 -1
  64. package/dist/commands/summary.js +4 -2
  65. package/dist/commands/summary.js.map +1 -1
  66. package/dist/commands/task.d.ts +14 -0
  67. package/dist/commands/task.d.ts.map +1 -0
  68. package/dist/commands/task.js +520 -0
  69. package/dist/commands/task.js.map +1 -0
  70. package/dist/db/agent-cache-store.d.ts +57 -0
  71. package/dist/db/agent-cache-store.d.ts.map +1 -0
  72. package/dist/db/agent-cache-store.js +99 -0
  73. package/dist/db/agent-cache-store.js.map +1 -0
  74. package/dist/db/connection.d.ts.map +1 -1
  75. package/dist/db/connection.js +86 -1
  76. package/dist/db/connection.js.map +1 -1
  77. package/dist/db/events-store.d.ts +321 -7
  78. package/dist/db/events-store.d.ts.map +1 -1
  79. package/dist/db/events-store.js +659 -31
  80. package/dist/db/events-store.js.map +1 -1
  81. package/dist/db/index.d.ts +2 -0
  82. package/dist/db/index.d.ts.map +1 -1
  83. package/dist/db/index.js +2 -0
  84. package/dist/db/index.js.map +1 -1
  85. package/dist/db/proofs-store.d.ts +8 -1
  86. package/dist/db/proofs-store.d.ts.map +1 -1
  87. package/dist/db/proofs-store.js +18 -8
  88. package/dist/db/proofs-store.js.map +1 -1
  89. package/dist/db/schema.d.ts +27 -3
  90. package/dist/db/schema.d.ts.map +1 -1
  91. package/dist/db/schema.js +201 -5
  92. package/dist/db/schema.js.map +1 -1
  93. package/dist/db/targets-store.d.ts +79 -0
  94. package/dist/db/targets-store.d.ts.map +1 -0
  95. package/dist/db/targets-store.js +150 -0
  96. package/dist/db/targets-store.js.map +1 -0
  97. package/dist/db/tool-analysis.d.ts +15 -3
  98. package/dist/db/tool-analysis.d.ts.map +1 -1
  99. package/dist/db/tool-analysis.js +35 -17
  100. package/dist/db/tool-analysis.js.map +1 -1
  101. package/dist/db/types.d.ts +86 -2
  102. package/dist/db/types.d.ts.map +1 -1
  103. package/dist/db/types.js +1 -1
  104. package/dist/filter/fields.d.ts.map +1 -1
  105. package/dist/filter/fields.js +22 -0
  106. package/dist/filter/fields.js.map +1 -1
  107. package/dist/filter/parser.js +2 -2
  108. package/dist/filter/parser.js.map +1 -1
  109. package/dist/filter/types.d.ts +1 -1
  110. package/dist/filter/types.d.ts.map +1 -1
  111. package/dist/html/analytics.test.ts +682 -0
  112. package/dist/html/analytics.ts +499 -0
  113. package/dist/html/browser.ts +39 -0
  114. package/dist/html/index.ts +97 -0
  115. package/dist/html/rpc-inspector.test.ts +529 -0
  116. package/dist/html/rpc-inspector.ts +1700 -0
  117. package/dist/html/templates.js +4 -4
  118. package/dist/html/templates.js.map +1 -1
  119. package/dist/html/templates.test.ts +861 -0
  120. package/dist/html/templates.ts +3163 -0
  121. package/dist/html/trace-viewer.html +624 -0
  122. package/dist/html/types.d.ts +3 -3
  123. package/dist/html/types.d.ts.map +1 -1
  124. package/dist/html/types.ts +491 -0
  125. package/dist/html/utils.ts +107 -0
  126. package/dist/monitor/data/connectors.d.ts.map +1 -1
  127. package/dist/monitor/data/connectors.js +113 -8
  128. package/dist/monitor/data/connectors.js.map +1 -1
  129. package/dist/monitor/data/popl.js +2 -2
  130. package/dist/monitor/data/popl.js.map +1 -1
  131. package/dist/monitor/routes/api.js +2 -2
  132. package/dist/monitor/routes/api.js.map +1 -1
  133. package/dist/monitor/routes/connectors.js +15 -15
  134. package/dist/monitor/routes/connectors.js.map +1 -1
  135. package/dist/monitor/routes/popl.js +5 -5
  136. package/dist/monitor/routes/popl.js.map +1 -1
  137. package/dist/monitor/templates/components.js +2 -2
  138. package/dist/monitor/templates/components.js.map +1 -1
  139. package/dist/monitor/templates/popl.js +4 -4
  140. package/dist/monitor/templates/popl.js.map +1 -1
  141. package/dist/monitor/types.d.ts +2 -2
  142. package/dist/monitor/types.d.ts.map +1 -1
  143. package/dist/proxy/bridge-utils.d.ts +41 -0
  144. package/dist/proxy/bridge-utils.d.ts.map +1 -0
  145. package/dist/proxy/bridge-utils.js +60 -0
  146. package/dist/proxy/bridge-utils.js.map +1 -0
  147. package/dist/proxy/ipc-client.d.ts.map +1 -1
  148. package/dist/proxy/ipc-client.js +1 -2
  149. package/dist/proxy/ipc-client.js.map +1 -1
  150. package/dist/proxy/ipc-server.d.ts.map +1 -1
  151. package/dist/proxy/ipc-server.js +4 -2
  152. package/dist/proxy/ipc-server.js.map +1 -1
  153. package/dist/proxy/mcp-server.d.ts +31 -0
  154. package/dist/proxy/mcp-server.d.ts.map +1 -1
  155. package/dist/proxy/mcp-server.js +393 -4
  156. package/dist/proxy/mcp-server.js.map +1 -1
  157. package/dist/proxy/types.d.ts +95 -0
  158. package/dist/proxy/types.d.ts.map +1 -1
  159. package/dist/secrets/management.d.ts +2 -2
  160. package/dist/secrets/management.d.ts.map +1 -1
  161. package/dist/secrets/management.js +7 -7
  162. package/dist/secrets/management.js.map +1 -1
  163. package/dist/shell/completer.d.ts.map +1 -1
  164. package/dist/shell/completer.js +16 -0
  165. package/dist/shell/completer.js.map +1 -1
  166. package/dist/shell/context-applicator.d.ts.map +1 -1
  167. package/dist/shell/context-applicator.js +32 -0
  168. package/dist/shell/context-applicator.js.map +1 -1
  169. package/dist/shell/filter-mappers.d.ts +5 -1
  170. package/dist/shell/filter-mappers.d.ts.map +1 -1
  171. package/dist/shell/filter-mappers.js +12 -0
  172. package/dist/shell/filter-mappers.js.map +1 -1
  173. package/dist/shell/find-command.js +13 -13
  174. package/dist/shell/find-command.js.map +1 -1
  175. package/dist/shell/inscribe-commands.js +5 -5
  176. package/dist/shell/inscribe-commands.js.map +1 -1
  177. package/dist/shell/pager/less-pager.d.ts +1 -1
  178. package/dist/shell/pager/less-pager.d.ts.map +1 -1
  179. package/dist/shell/pager/less-pager.js +5 -2
  180. package/dist/shell/pager/less-pager.js.map +1 -1
  181. package/dist/shell/pager/more-pager.d.ts +1 -1
  182. package/dist/shell/pager/more-pager.d.ts.map +1 -1
  183. package/dist/shell/pager/more-pager.js +3 -2
  184. package/dist/shell/pager/more-pager.js.map +1 -1
  185. package/dist/shell/pager/renderer.d.ts.map +1 -1
  186. package/dist/shell/pager/renderer.js +66 -15
  187. package/dist/shell/pager/renderer.js.map +1 -1
  188. package/dist/shell/pager/types.d.ts +5 -2
  189. package/dist/shell/pager/types.d.ts.map +1 -1
  190. package/dist/shell/pager/utils.d.ts +5 -2
  191. package/dist/shell/pager/utils.d.ts.map +1 -1
  192. package/dist/shell/pager/utils.js +14 -17
  193. package/dist/shell/pager/utils.js.map +1 -1
  194. package/dist/shell/pipeline-types.d.ts +12 -4
  195. package/dist/shell/pipeline-types.d.ts.map +1 -1
  196. package/dist/shell/ref-commands.js +7 -7
  197. package/dist/shell/ref-commands.js.map +1 -1
  198. package/dist/shell/ref-resolver.d.ts +15 -15
  199. package/dist/shell/ref-resolver.d.ts.map +1 -1
  200. package/dist/shell/ref-resolver.js +34 -20
  201. package/dist/shell/ref-resolver.js.map +1 -1
  202. package/dist/shell/repl.d.ts +25 -0
  203. package/dist/shell/repl.d.ts.map +1 -1
  204. package/dist/shell/repl.js +285 -51
  205. package/dist/shell/repl.js.map +1 -1
  206. package/dist/shell/router-commands.d.ts +30 -0
  207. package/dist/shell/router-commands.d.ts.map +1 -1
  208. package/dist/shell/router-commands.js +1011 -62
  209. package/dist/shell/router-commands.js.map +1 -1
  210. package/dist/shell/selector.d.ts +1 -1
  211. package/dist/shell/selector.d.ts.map +1 -1
  212. package/dist/shell/selector.js +1 -1
  213. package/dist/shell/selector.js.map +1 -1
  214. package/dist/shell/types.d.ts.map +1 -1
  215. package/dist/shell/types.js +3 -1
  216. package/dist/shell/types.js.map +1 -1
  217. package/dist/shell/where-command.d.ts.map +1 -1
  218. package/dist/shell/where-command.js +19 -3
  219. package/dist/shell/where-command.js.map +1 -1
  220. package/dist/utils/output.d.ts.map +1 -1
  221. package/dist/utils/output.js +7 -1
  222. package/dist/utils/output.js.map +1 -1
  223. 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
 
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Agent Card Fetching
3
+ *
4
+ * Fetches and parses Agent Cards from A2A agent endpoints.
5
+ */
6
+ import type { AgentCard } from './types.js';
7
+ export interface FetchAgentCardOptions {
8
+ timeout?: number;
9
+ headers?: Record<string, string>;
10
+ /** Allow private/local URLs (development only) */
11
+ allowLocal?: boolean;
12
+ }
13
+ export interface FetchAgentCardResult {
14
+ ok: boolean;
15
+ agentCard?: AgentCard;
16
+ hash?: string;
17
+ error?: string;
18
+ statusCode?: number;
19
+ }
20
+ /**
21
+ * Validates that a URL is not a private/internal URL
22
+ * Blocks localhost, private IP ranges, and non-HTTP/HTTPS protocols
23
+ * @param url - URL string to validate
24
+ * @returns true if URL should be blocked (private/local)
25
+ */
26
+ export declare function isPrivateUrl(url: string): boolean;
27
+ /**
28
+ * Normalizes URL for Agent Card endpoint
29
+ * Appends /.well-known/agent.json if not present
30
+ * Exported for testing
31
+ */
32
+ export declare function normalizeAgentCardUrl(url: string): string;
33
+ /**
34
+ * Fetch Agent Card from A2A agent endpoint
35
+ * @param url - Agent base URL or full Agent Card URL
36
+ * @param options - Fetch options (timeout, headers)
37
+ * @returns FetchAgentCardResult with parsed AgentCard or error
38
+ */
39
+ export declare function fetchAgentCard(url: string, options?: FetchAgentCardOptions): Promise<FetchAgentCardResult>;
40
+ //# sourceMappingURL=agent-card.d.ts.map
@@ -0,0 +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;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"}
@@ -0,0 +1,227 @@
1
+ /**
2
+ * Agent Card Fetching
3
+ *
4
+ * Fetches and parses Agent Cards from A2A agent endpoints.
5
+ */
6
+ import { createHash } from 'crypto';
7
+ import { parseAgentCard } from './config.js';
8
+ /**
9
+ * Maximum allowed response body size (1MB)
10
+ */
11
+ const MAX_RESPONSE_SIZE = 1024 * 1024;
12
+ /**
13
+ * Validates that a URL is not a private/internal URL
14
+ * Blocks localhost, private IP ranges, and non-HTTP/HTTPS protocols
15
+ * @param url - URL string to validate
16
+ * @returns true if URL should be blocked (private/local)
17
+ */
18
+ export function isPrivateUrl(url) {
19
+ const parsed = new URL(url);
20
+ const hostname = parsed.hostname.toLowerCase();
21
+ // localhost variants
22
+ if (hostname === 'localhost' || hostname === '127.0.0.1' || hostname === '::1') {
23
+ return true;
24
+ }
25
+ // IPv6 loopback addresses (any within ::1/128)
26
+ if (hostname.startsWith('[') && hostname.includes('::')) {
27
+ const ipv6 = hostname.slice(1, -1);
28
+ if (ipv6 === '::1' || ipv6 === '0:0:0:0:0:0:0:1') {
29
+ return true;
30
+ }
31
+ }
32
+ // Private IPv4 address ranges
33
+ const ipv4Match = hostname.match(/^(\d+)\.(\d+)\.(\d+)\.(\d+)$/);
34
+ if (ipv4Match) {
35
+ const [, a, b] = ipv4Match.map(Number);
36
+ // 10.0.0.0/8
37
+ if (a === 10)
38
+ return true;
39
+ // 172.16.0.0/12
40
+ if (a === 172 && b >= 16 && b <= 31)
41
+ return true;
42
+ // 192.168.0.0/16
43
+ if (a === 192 && b === 168)
44
+ return true;
45
+ // 169.254.0.0/16 (link-local)
46
+ if (a === 169 && b === 254)
47
+ return true;
48
+ // 127.0.0.0/8 (loopback - extra safety)
49
+ if (a === 127)
50
+ return true;
51
+ }
52
+ // Private IPv6 address ranges
53
+ if (hostname.startsWith('[') && hostname.endsWith(']')) {
54
+ const ipv6 = hostname.slice(1, -1);
55
+ // fc00::/7 (unique local)
56
+ if (ipv6.startsWith('fc') || ipv6.startsWith('fd'))
57
+ return true;
58
+ // fe80::/10 (link-local)
59
+ if (ipv6.startsWith('fe8') || ipv6.startsWith('fe9') ||
60
+ ipv6.startsWith('fea') || ipv6.startsWith('feb'))
61
+ return true;
62
+ }
63
+ // Only allow HTTP and HTTPS protocols
64
+ if (!['http:', 'https:'].includes(parsed.protocol)) {
65
+ return true;
66
+ }
67
+ return false;
68
+ }
69
+ /**
70
+ * Normalizes URL for Agent Card endpoint
71
+ * Appends /.well-known/agent.json if not present
72
+ * Exported for testing
73
+ */
74
+ export function normalizeAgentCardUrl(url) {
75
+ const normalizedUrl = url.trim();
76
+ // Check if URL already contains /.well-known/agent.json
77
+ if (normalizedUrl.includes('/.well-known/agent.json')) {
78
+ return normalizedUrl;
79
+ }
80
+ // Parse URL to handle query parameters and hash correctly
81
+ try {
82
+ const urlObj = new URL(normalizedUrl);
83
+ // Build base URL without trailing slash
84
+ const baseUrl = normalizedUrl.split('?')[0].split('#')[0].replace(/\/+$/, '');
85
+ const query = urlObj.search;
86
+ const hash = urlObj.hash;
87
+ // Reconstruct URL with agent.json appended
88
+ let result = `${baseUrl}/.well-known/agent.json`;
89
+ if (query)
90
+ result += query;
91
+ if (hash)
92
+ result += hash;
93
+ return result;
94
+ }
95
+ catch {
96
+ // Fallback: just append to the end if URL parsing fails
97
+ const baseUrl = normalizedUrl.replace(/\/+$/, '');
98
+ return `${baseUrl}/.well-known/agent.json`;
99
+ }
100
+ }
101
+ /**
102
+ * Computes SHA-256 hash of response body
103
+ */
104
+ function computeHash(body) {
105
+ return createHash('sha256').update(body).digest('hex');
106
+ }
107
+ /**
108
+ * Fetch Agent Card from A2A agent endpoint
109
+ * @param url - Agent base URL or full Agent Card URL
110
+ * @param options - Fetch options (timeout, headers)
111
+ * @returns FetchAgentCardResult with parsed AgentCard or error
112
+ */
113
+ export async function fetchAgentCard(url, options = {}) {
114
+ const { timeout = 10000, headers = {}, allowLocal = false } = options;
115
+ const agentCardUrl = normalizeAgentCardUrl(url);
116
+ // Validate URL format
117
+ try {
118
+ new URL(agentCardUrl);
119
+ }
120
+ catch {
121
+ return {
122
+ ok: false,
123
+ error: `Invalid URL: ${url}`,
124
+ };
125
+ }
126
+ // SSRF protection: Block private and local URLs
127
+ if (isPrivateUrl(agentCardUrl) && !allowLocal) {
128
+ return {
129
+ ok: false,
130
+ error: 'Private or local URLs are not allowed',
131
+ };
132
+ }
133
+ // Set up abort controller for timeout
134
+ const controller = new AbortController();
135
+ const timeoutId = setTimeout(() => controller.abort(), timeout);
136
+ try {
137
+ const response = await fetch(agentCardUrl, {
138
+ headers: {
139
+ 'Accept': 'application/json',
140
+ ...headers,
141
+ },
142
+ signal: controller.signal,
143
+ });
144
+ clearTimeout(timeoutId);
145
+ // Response size limit: Check Content-Length header first
146
+ const contentLength = response.headers.get('content-length');
147
+ if (contentLength) {
148
+ const length = parseInt(contentLength, 10);
149
+ if (length > MAX_RESPONSE_SIZE) {
150
+ return {
151
+ ok: false,
152
+ statusCode: response.status,
153
+ error: `Response too large: ${length} bytes (max ${MAX_RESPONSE_SIZE})`,
154
+ };
155
+ }
156
+ }
157
+ // Get response body
158
+ const bodyText = await response.text();
159
+ // Response size limit: Check actual body size
160
+ if (bodyText.length > MAX_RESPONSE_SIZE) {
161
+ return {
162
+ ok: false,
163
+ statusCode: response.status,
164
+ error: `Response body too large: ${bodyText.length} bytes (max ${MAX_RESPONSE_SIZE})`,
165
+ };
166
+ }
167
+ const hash = computeHash(bodyText);
168
+ // Handle non-OK responses
169
+ if (!response.ok) {
170
+ return {
171
+ ok: false,
172
+ statusCode: response.status,
173
+ error: `HTTP ${response.status}: ${response.statusText}`,
174
+ hash,
175
+ };
176
+ }
177
+ // Parse JSON
178
+ let parsedBody;
179
+ try {
180
+ parsedBody = JSON.parse(bodyText);
181
+ }
182
+ catch {
183
+ return {
184
+ ok: false,
185
+ statusCode: response.status,
186
+ error: 'Invalid JSON response',
187
+ hash,
188
+ };
189
+ }
190
+ // Validate Agent Card
191
+ const result = parseAgentCard(parsedBody);
192
+ if (!result.ok) {
193
+ return {
194
+ ok: false,
195
+ statusCode: response.status,
196
+ error: `Invalid Agent Card: ${result.error}`,
197
+ hash,
198
+ };
199
+ }
200
+ return {
201
+ ok: true,
202
+ agentCard: result.value,
203
+ hash,
204
+ statusCode: response.status,
205
+ };
206
+ }
207
+ catch (error) {
208
+ clearTimeout(timeoutId);
209
+ if (error instanceof Error) {
210
+ if (error.name === 'AbortError') {
211
+ return {
212
+ ok: false,
213
+ error: `Request timeout after ${timeout}ms`,
214
+ };
215
+ }
216
+ return {
217
+ ok: false,
218
+ error: error.message,
219
+ };
220
+ }
221
+ return {
222
+ ok: false,
223
+ error: String(error),
224
+ };
225
+ }
226
+ }
227
+ //# sourceMappingURL=agent-card.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-card.js","sourceRoot":"","sources":["../../src/a2a/agent-card.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,169 @@
1
+ /**
2
+ * A2A Client
3
+ *
4
+ * Client for sending messages to A2A agents via JSON-RPC 2.0.
5
+ * Implements message/send, tasks/get, tasks/list, and tasks/cancel operations.
6
+ *
7
+ * Phase 4 - Client Implementation
8
+ * Phase 2 - Task Management (getTask, listTasks, cancelTask)
9
+ * Phase 2.4 - Task DB event recording
10
+ */
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';
14
+ export interface SendMessageOptions {
15
+ timeout?: number;
16
+ headers?: Record<string, string>;
17
+ blocking?: boolean;
18
+ }
19
+ export interface SendMessageResult {
20
+ ok: boolean;
21
+ task?: A2ATask;
22
+ message?: A2AMessage;
23
+ error?: string;
24
+ statusCode?: number;
25
+ }
26
+ export interface StreamMessageOptions {
27
+ timeout?: number;
28
+ headers?: Record<string, string>;
29
+ onStatus?: (event: TaskStatusUpdateEvent) => void;
30
+ onArtifact?: (event: TaskArtifactUpdateEvent) => void;
31
+ onMessage?: (message: A2AMessage) => void;
32
+ onTask?: (task: A2ATask) => void;
33
+ onError?: (error: string) => void;
34
+ signal?: AbortSignal;
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
+ }
59
+ /**
60
+ * A2A Client for sending messages to agents
61
+ */
62
+ export declare class A2AClient {
63
+ private baseUrl;
64
+ private defaultHeaders;
65
+ private agentCard;
66
+ private allowLocal;
67
+ private eventsStore?;
68
+ constructor(agentCard: AgentCard, options?: {
69
+ headers?: Record<string, string>;
70
+ allowLocal?: boolean;
71
+ eventsStore?: EventsStore;
72
+ });
73
+ /**
74
+ * Get EventsStore instance (Phase 2.4)
75
+ * @private
76
+ */
77
+ private getEventsStore;
78
+ /**
79
+ * Send a message to the agent
80
+ * POST /message/send (JSON-RPC 2.0)
81
+ */
82
+ sendMessage(message: string | A2AMessage, options?: SendMessageOptions): Promise<SendMessageResult>;
83
+ /**
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
98
+ */
99
+ listTasks(params?: ListTasksParams): Promise<ListTasksResult>;
100
+ /**
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
106
+ */
107
+ cancelTask(taskId: string): Promise<CancelTaskResult>;
108
+ /**
109
+ * Stream message to agent
110
+ * POST /message/stream (JSON-RPC 2.0 + SSE response)
111
+ */
112
+ streamMessage(message: string | A2AMessage, options?: StreamMessageOptions): Promise<StreamMessageResult>;
113
+ /**
114
+ * Parse Task from JSON-RPC response
115
+ */
116
+ private parseTask;
117
+ /**
118
+ * Parse Message from JSON-RPC response
119
+ */
120
+ private parseMessage;
121
+ /**
122
+ * Parse Message Part from JSON-RPC response
123
+ */
124
+ private parsePart;
125
+ /**
126
+ * Parse task status string
127
+ */
128
+ private parseTaskStatus;
129
+ /**
130
+ * Parse SSE event data
131
+ */
132
+ private parseStreamEvent;
133
+ /**
134
+ * Parse status event
135
+ */
136
+ private parseStatusEvent;
137
+ /**
138
+ * Parse artifact event
139
+ */
140
+ private parseArtifactEvent;
141
+ }
142
+ /**
143
+ * Create A2A client from agent ID
144
+ * Fetches Agent Card from cache or remote endpoint
145
+ */
146
+ export declare function createA2AClient(configDir: string, agentId: string): Promise<{
147
+ ok: true;
148
+ client: A2AClient;
149
+ agentCard: AgentCard;
150
+ } | {
151
+ ok: false;
152
+ error: string;
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>;
169
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/a2a/client.ts"],"names":[],"mappings":"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"}