@evalops/maestro 0.10.50 → 0.10.51

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 (406) hide show
  1. package/dist/agent/agent-outcome.d.ts +54 -0
  2. package/dist/agent/agent-outcome.d.ts.map +1 -0
  3. package/dist/agent/agent-outcome.js +142 -0
  4. package/dist/agent/agent-outcome.js.map +1 -0
  5. package/dist/agent/agent-resume.d.ts.map +1 -1
  6. package/dist/agent/agent-resume.js +3 -3
  7. package/dist/agent/agent-resume.js.map +1 -1
  8. package/dist/agent/agent-run-summary.d.ts +37 -0
  9. package/dist/agent/agent-run-summary.d.ts.map +1 -0
  10. package/dist/agent/agent-run-summary.js +15 -0
  11. package/dist/agent/agent-run-summary.js.map +1 -0
  12. package/dist/agent/agent-work-board.d.ts +82 -0
  13. package/dist/agent/agent-work-board.d.ts.map +1 -0
  14. package/dist/agent/agent-work-board.js +312 -0
  15. package/dist/agent/agent-work-board.js.map +1 -0
  16. package/dist/agent/auto-compaction.d.ts +7 -2
  17. package/dist/agent/auto-compaction.d.ts.map +1 -1
  18. package/dist/agent/auto-compaction.js +23 -10
  19. package/dist/agent/auto-compaction.js.map +1 -1
  20. package/dist/agent/mission-artifacts.d.ts +62 -0
  21. package/dist/agent/mission-artifacts.d.ts.map +1 -0
  22. package/dist/agent/mission-artifacts.js +438 -0
  23. package/dist/agent/mission-artifacts.js.map +1 -0
  24. package/dist/agent/mission-manifest.d.ts +139 -3
  25. package/dist/agent/mission-manifest.d.ts.map +1 -1
  26. package/dist/agent/mission-manifest.js +549 -3
  27. package/dist/agent/mission-manifest.js.map +1 -1
  28. package/dist/agent/mission-store.d.ts +80 -0
  29. package/dist/agent/mission-store.d.ts.map +1 -0
  30. package/dist/agent/mission-store.js +603 -0
  31. package/dist/agent/mission-store.js.map +1 -0
  32. package/dist/agent/modes.d.ts +2 -2
  33. package/dist/agent/modes.d.ts.map +1 -1
  34. package/dist/agent/modes.js +10 -3
  35. package/dist/agent/modes.js.map +1 -1
  36. package/dist/agent/providers/codex-app-server.d.ts.map +1 -1
  37. package/dist/agent/providers/codex-app-server.js +1 -3
  38. package/dist/agent/providers/codex-app-server.js.map +1 -1
  39. package/dist/agent/providers/google-gemini-cli.js +203 -107
  40. package/dist/agent/providers/google.js +100 -41
  41. package/dist/agent/providers/scripted.d.ts.map +1 -1
  42. package/dist/agent/providers/scripted.js +1 -3
  43. package/dist/agent/providers/scripted.js.map +1 -1
  44. package/dist/agent/providers/validation.d.ts.map +1 -1
  45. package/dist/agent/providers/validation.js +1 -3
  46. package/dist/agent/providers/validation.js.map +1 -1
  47. package/dist/agent/providers/vertex.js +203 -107
  48. package/dist/agent/snapshot-store.d.ts +32 -0
  49. package/dist/agent/snapshot-store.d.ts.map +1 -0
  50. package/dist/agent/snapshot-store.js +195 -0
  51. package/dist/agent/snapshot-store.js.map +1 -0
  52. package/dist/agent/specialist-profiles.d.ts +36 -0
  53. package/dist/agent/specialist-profiles.d.ts.map +1 -0
  54. package/dist/agent/specialist-profiles.js +159 -0
  55. package/dist/agent/specialist-profiles.js.map +1 -0
  56. package/dist/agent/subagent-specs.d.ts +4 -1
  57. package/dist/agent/subagent-specs.d.ts.map +1 -1
  58. package/dist/agent/subagent-specs.js +81 -8
  59. package/dist/agent/subagent-specs.js.map +1 -1
  60. package/dist/agent/swarm/coverage-gate.d.ts +37 -0
  61. package/dist/agent/swarm/coverage-gate.d.ts.map +1 -0
  62. package/dist/agent/swarm/coverage-gate.js +48 -0
  63. package/dist/agent/swarm/coverage-gate.js.map +1 -0
  64. package/dist/agent/swarm/executor.d.ts +1 -0
  65. package/dist/agent/swarm/executor.d.ts.map +1 -1
  66. package/dist/agent/swarm/executor.js +151 -15
  67. package/dist/agent/swarm/executor.js.map +1 -1
  68. package/dist/agent/swarm/orchestrator-prompt.d.ts +25 -0
  69. package/dist/agent/swarm/orchestrator-prompt.d.ts.map +1 -0
  70. package/dist/agent/swarm/orchestrator-prompt.js +48 -0
  71. package/dist/agent/swarm/orchestrator-prompt.js.map +1 -0
  72. package/dist/agent/swarm/plan-parser.d.ts.map +1 -1
  73. package/dist/agent/swarm/plan-parser.js +27 -2
  74. package/dist/agent/swarm/plan-parser.js.map +1 -1
  75. package/dist/agent/swarm/types.d.ts +17 -0
  76. package/dist/agent/swarm/types.d.ts.map +1 -1
  77. package/dist/agent/swarm/types.js.map +1 -1
  78. package/dist/agent/swarm/validation-directive.d.ts +21 -0
  79. package/dist/agent/swarm/validation-directive.d.ts.map +1 -0
  80. package/dist/agent/swarm/validation-directive.js +25 -0
  81. package/dist/agent/swarm/validation-directive.js.map +1 -0
  82. package/dist/agent/transport/tool-execution-bridge.d.ts.map +1 -1
  83. package/dist/agent/transport/tool-execution-bridge.js +4 -1
  84. package/dist/agent/transport/tool-execution-bridge.js.map +1 -1
  85. package/dist/api/enterprise-routes.d.ts.map +1 -1
  86. package/dist/api/enterprise-routes.js +87 -10
  87. package/dist/api/enterprise-routes.js.map +1 -1
  88. package/dist/api/org-settings-merge.d.ts +12 -0
  89. package/dist/api/org-settings-merge.d.ts.map +1 -0
  90. package/dist/api/org-settings-merge.js +38 -0
  91. package/dist/api/org-settings-merge.js.map +1 -0
  92. package/dist/api/user-settings-merge.d.ts +16 -0
  93. package/dist/api/user-settings-merge.d.ts.map +1 -0
  94. package/dist/api/user-settings-merge.js +37 -0
  95. package/dist/api/user-settings-merge.js.map +1 -0
  96. package/dist/app-server/daemon-lifecycle-api.d.ts.map +1 -1
  97. package/dist/app-server/daemon-lifecycle-api.js +1 -3
  98. package/dist/app-server/daemon-lifecycle-api.js.map +1 -1
  99. package/dist/app-server/external-agent-import-api.d.ts.map +1 -1
  100. package/dist/app-server/external-agent-import-api.js +1 -3
  101. package/dist/app-server/external-agent-import-api.js.map +1 -1
  102. package/dist/app-server/network-governance-api.d.ts.map +1 -1
  103. package/dist/app-server/network-governance-api.js +1 -3
  104. package/dist/app-server/network-governance-api.js.map +1 -1
  105. package/dist/app-server/plugin-bundle-api.d.ts.map +1 -1
  106. package/dist/app-server/plugin-bundle-api.js +1 -3
  107. package/dist/app-server/plugin-bundle-api.js.map +1 -1
  108. package/dist/app-server/policy-control-api.d.ts.map +1 -1
  109. package/dist/app-server/policy-control-api.js +1 -3
  110. package/dist/app-server/policy-control-api.js.map +1 -1
  111. package/dist/app-server/protocol-modes-api.d.ts.map +1 -1
  112. package/dist/app-server/protocol-modes-api.js +1 -3
  113. package/dist/app-server/protocol-modes-api.js.map +1 -1
  114. package/dist/cli/args.d.ts +2 -0
  115. package/dist/cli/args.d.ts.map +1 -1
  116. package/dist/cli/args.js +15 -0
  117. package/dist/cli/args.js.map +1 -1
  118. package/dist/cli/commands/a2a.d.ts.map +1 -1
  119. package/dist/cli/commands/a2a.js +1 -3
  120. package/dist/cli/commands/a2a.js.map +1 -1
  121. package/dist/cli/commands/agents.d.ts +4 -0
  122. package/dist/cli/commands/agents.d.ts.map +1 -1
  123. package/dist/cli/commands/agents.js +149 -0
  124. package/dist/cli/commands/agents.js.map +1 -1
  125. package/dist/cli/commands/mission.d.ts +4 -0
  126. package/dist/cli/commands/mission.d.ts.map +1 -0
  127. package/dist/cli/commands/mission.js +196 -0
  128. package/dist/cli/commands/mission.js.map +1 -0
  129. package/dist/cli/commands/value.d.ts +10 -0
  130. package/dist/cli/commands/value.d.ts.map +1 -0
  131. package/dist/cli/commands/value.js +33 -0
  132. package/dist/cli/commands/value.js.map +1 -0
  133. package/dist/cli/headless-protocol.d.ts.map +1 -1
  134. package/dist/cli/headless-protocol.js +1 -3
  135. package/dist/cli/headless-protocol.js.map +1 -1
  136. package/dist/cli/help.d.ts.map +1 -1
  137. package/dist/cli/help.js +10 -0
  138. package/dist/cli/help.js.map +1 -1
  139. package/dist/cli/system-prompt.d.ts.map +1 -1
  140. package/dist/cli/system-prompt.js +38 -7
  141. package/dist/cli/system-prompt.js.map +1 -1
  142. package/dist/cli-runtime.js +7756 -2800
  143. package/dist/cli-tui/client-tools/client-tool-controller.d.ts.map +1 -1
  144. package/dist/cli-tui/client-tools/client-tool-controller.js +1 -3
  145. package/dist/cli-tui/client-tools/client-tool-controller.js.map +1 -1
  146. package/dist/cli-tui/commands/undo-handlers.d.ts.map +1 -1
  147. package/dist/cli-tui/commands/undo-handlers.js +7 -2
  148. package/dist/cli-tui/commands/undo-handlers.js.map +1 -1
  149. package/dist/cli-tui/tui-renderer/skills-controller.d.ts +3 -0
  150. package/dist/cli-tui/tui-renderer/skills-controller.d.ts.map +1 -1
  151. package/dist/cli-tui/tui-renderer/skills-controller.js +77 -33
  152. package/dist/cli-tui/tui-renderer/skills-controller.js.map +1 -1
  153. package/dist/codex/app-server-client.d.ts.map +1 -1
  154. package/dist/codex/app-server-client.js +1 -3
  155. package/dist/codex/app-server-client.js.map +1 -1
  156. package/dist/codex/compatibility.d.ts.map +1 -1
  157. package/dist/codex/compatibility.js +1 -3
  158. package/dist/codex/compatibility.js.map +1 -1
  159. package/dist/codex/subagent-dispatch-table.d.ts +8 -0
  160. package/dist/codex/subagent-dispatch-table.d.ts.map +1 -1
  161. package/dist/codex/subagent-dispatch-table.js +23 -0
  162. package/dist/codex/subagent-dispatch-table.js.map +1 -1
  163. package/dist/context/manifest.d.ts.map +1 -1
  164. package/dist/context/manifest.js +1 -3
  165. package/dist/context/manifest.js.map +1 -1
  166. package/dist/conversation/render-model.d.ts +0 -36
  167. package/dist/conversation/render-model.d.ts.map +1 -1
  168. package/dist/conversation/render-model.js +1 -3
  169. package/dist/conversation/render-model.js.map +1 -1
  170. package/dist/customer-value/ambient-learning.d.ts +75 -0
  171. package/dist/customer-value/ambient-learning.d.ts.map +1 -0
  172. package/dist/customer-value/ambient-learning.js +472 -0
  173. package/dist/customer-value/ambient-learning.js.map +1 -0
  174. package/dist/customer-value/internal-helpers.d.ts +13 -0
  175. package/dist/customer-value/internal-helpers.d.ts.map +1 -0
  176. package/dist/customer-value/internal-helpers.js +70 -0
  177. package/dist/customer-value/internal-helpers.js.map +1 -0
  178. package/dist/customer-value/report.d.ts +282 -0
  179. package/dist/customer-value/report.d.ts.map +1 -0
  180. package/dist/customer-value/report.js +2085 -0
  181. package/dist/customer-value/report.js.map +1 -0
  182. package/dist/db/schema.d.ts +5 -1
  183. package/dist/db/schema.d.ts.map +1 -1
  184. package/dist/db/schema.js.map +1 -1
  185. package/dist/evalops/agent-bootstrap.d.ts.map +1 -1
  186. package/dist/evalops/agent-bootstrap.js +1 -3
  187. package/dist/evalops/agent-bootstrap.js.map +1 -1
  188. package/dist/evalops/agent-mcp-metadata.d.ts.map +1 -1
  189. package/dist/evalops/agent-mcp-metadata.js +1 -3
  190. package/dist/evalops/agent-mcp-metadata.js.map +1 -1
  191. package/dist/index.d.ts +1 -0
  192. package/dist/index.d.ts.map +1 -1
  193. package/dist/index.js +1 -0
  194. package/dist/index.js.map +1 -1
  195. package/dist/installers/maestro-review-workflow.d.ts +38 -0
  196. package/dist/installers/maestro-review-workflow.d.ts.map +1 -0
  197. package/dist/installers/maestro-review-workflow.js +163 -0
  198. package/dist/installers/maestro-review-workflow.js.map +1 -0
  199. package/dist/load-env.d.ts.map +1 -1
  200. package/dist/load-env.js +2 -1
  201. package/dist/load-env.js.map +1 -1
  202. package/dist/main.d.ts.map +1 -1
  203. package/dist/main.js +92 -3
  204. package/dist/main.js.map +1 -1
  205. package/dist/mcp/config.d.ts.map +1 -1
  206. package/dist/mcp/config.js +1 -3
  207. package/dist/mcp/config.js.map +1 -1
  208. package/dist/mcp/elicitation.d.ts.map +1 -1
  209. package/dist/mcp/elicitation.js +1 -3
  210. package/dist/mcp/elicitation.js.map +1 -1
  211. package/dist/mcp/official-registry.d.ts.map +1 -1
  212. package/dist/mcp/official-registry.js +1 -3
  213. package/dist/mcp/official-registry.js.map +1 -1
  214. package/dist/mcp/workspace-trust.d.ts.map +1 -1
  215. package/dist/mcp/workspace-trust.js +1 -3
  216. package/dist/mcp/workspace-trust.js.map +1 -1
  217. package/dist/memory/service-client.d.ts.map +1 -1
  218. package/dist/memory/service-client.js +1 -3
  219. package/dist/memory/service-client.js.map +1 -1
  220. package/dist/models/config-loader.d.ts.map +1 -1
  221. package/dist/models/config-loader.js +1 -3
  222. package/dist/models/config-loader.js.map +1 -1
  223. package/dist/node_modules/@evalops/contracts/dist/index.d.ts +1 -0
  224. package/dist/node_modules/@evalops/contracts/dist/index.d.ts.map +1 -1
  225. package/dist/node_modules/@evalops/contracts/dist/index.js +1 -0
  226. package/dist/node_modules/@evalops/contracts/dist/index.js.map +1 -1
  227. package/dist/node_modules/@evalops/contracts/dist/maestro-settings.d.ts +61 -0
  228. package/dist/node_modules/@evalops/contracts/dist/maestro-settings.d.ts.map +1 -0
  229. package/dist/node_modules/@evalops/contracts/dist/maestro-settings.js +183 -0
  230. package/dist/node_modules/@evalops/contracts/dist/maestro-settings.js.map +1 -0
  231. package/dist/node_modules/@evalops/contracts/package.json +1 -1
  232. package/dist/node_modules/@evalops/tui/package.json +1 -1
  233. package/dist/oauth/connectors.d.ts.map +1 -1
  234. package/dist/oauth/connectors.js +1 -3
  235. package/dist/oauth/connectors.js.map +1 -1
  236. package/dist/oauth/evalops.d.ts.map +1 -1
  237. package/dist/oauth/evalops.js +1 -3
  238. package/dist/oauth/evalops.js.map +1 -1
  239. package/dist/platform/a2a-client.d.ts.map +1 -1
  240. package/dist/platform/a2a-client.js +1 -3
  241. package/dist/platform/a2a-client.js.map +1 -1
  242. package/dist/platform/a2a-cockpit.d.ts +1 -0
  243. package/dist/platform/a2a-cockpit.d.ts.map +1 -1
  244. package/dist/platform/a2a-cockpit.js +42 -11
  245. package/dist/platform/a2a-cockpit.js.map +1 -1
  246. package/dist/platform/a2a-completion-audit.d.ts +1 -1
  247. package/dist/platform/a2a-completion-audit.d.ts.map +1 -1
  248. package/dist/platform/a2a-completion-audit.js +7 -11
  249. package/dist/platform/a2a-completion-audit.js.map +1 -1
  250. package/dist/platform/a2a-maestro-peer.js +16 -0
  251. package/dist/platform/a2a-maestro-peer.js.map +1 -1
  252. package/dist/platform/a2a-peer-pairing.d.ts.map +1 -1
  253. package/dist/platform/a2a-peer-pairing.js +1 -3
  254. package/dist/platform/a2a-peer-pairing.js.map +1 -1
  255. package/dist/platform/a2a-peer-registry.d.ts.map +1 -1
  256. package/dist/platform/a2a-peer-registry.js +1 -3
  257. package/dist/platform/a2a-peer-registry.js.map +1 -1
  258. package/dist/platform/a2a-task-ledger.d.ts +20 -0
  259. package/dist/platform/a2a-task-ledger.d.ts.map +1 -1
  260. package/dist/platform/a2a-task-ledger.js +207 -11
  261. package/dist/platform/a2a-task-ledger.js.map +1 -1
  262. package/dist/platform/a2a-work-graph.d.ts.map +1 -1
  263. package/dist/platform/a2a-work-graph.js +1 -3
  264. package/dist/platform/a2a-work-graph.js.map +1 -1
  265. package/dist/platform/operating-layer.d.ts.map +1 -1
  266. package/dist/platform/operating-layer.js +14 -8
  267. package/dist/platform/operating-layer.js.map +1 -1
  268. package/dist/platform/tool-execution-client.d.ts.map +1 -1
  269. package/dist/platform/tool-execution-client.js +19 -2
  270. package/dist/platform/tool-execution-client.js.map +1 -1
  271. package/dist/providers/auth.d.ts.map +1 -1
  272. package/dist/providers/auth.js +1 -3
  273. package/dist/providers/auth.js.map +1 -1
  274. package/dist/runtime/env.d.ts +9 -1
  275. package/dist/runtime/env.d.ts.map +1 -1
  276. package/dist/runtime/env.js +63 -1
  277. package/dist/runtime/env.js.map +1 -1
  278. package/dist/safety/policy.d.ts.map +1 -1
  279. package/dist/safety/policy.js +1 -4
  280. package/dist/safety/policy.js.map +1 -1
  281. package/dist/sandbox/docker-sandbox.d.ts.map +1 -1
  282. package/dist/sandbox/docker-sandbox.js +6 -1
  283. package/dist/sandbox/docker-sandbox.js.map +1 -1
  284. package/dist/server/handlers/hosted-runner-drain.d.ts.map +1 -1
  285. package/dist/server/handlers/hosted-runner-drain.js +1 -3
  286. package/dist/server/handlers/hosted-runner-drain.js.map +1 -1
  287. package/dist/server/handlers/platform-a2a-push.d.ts.map +1 -1
  288. package/dist/server/handlers/platform-a2a-push.js +53 -2
  289. package/dist/server/handlers/platform-a2a-push.js.map +1 -1
  290. package/dist/server/handlers/runtime-app-server-ws.d.ts.map +1 -1
  291. package/dist/server/handlers/runtime-app-server-ws.js +1 -3
  292. package/dist/server/handlers/runtime-app-server-ws.js.map +1 -1
  293. package/dist/server/headless-runtime-service.d.ts +16 -0
  294. package/dist/server/headless-runtime-service.d.ts.map +1 -1
  295. package/dist/server/headless-runtime-service.js +232 -206
  296. package/dist/server/headless-runtime-service.js.map +1 -1
  297. package/dist/server/hosted-agent-runtime-progress.d.ts.map +1 -1
  298. package/dist/server/hosted-agent-runtime-progress.js +12 -3
  299. package/dist/server/hosted-agent-runtime-progress.js.map +1 -1
  300. package/dist/server/pending-request-payload.d.ts.map +1 -1
  301. package/dist/server/pending-request-payload.js +1 -3
  302. package/dist/server/pending-request-payload.js.map +1 -1
  303. package/dist/server/route-auth.d.ts.map +1 -1
  304. package/dist/server/route-auth.js +2 -0
  305. package/dist/server/route-auth.js.map +1 -1
  306. package/dist/server/session-serialization.d.ts.map +1 -1
  307. package/dist/server/session-serialization.js +1 -3
  308. package/dist/server/session-serialization.js.map +1 -1
  309. package/dist/services/compliance/normalize.d.ts.map +1 -1
  310. package/dist/services/compliance/normalize.js +1 -3
  311. package/dist/services/compliance/normalize.js.map +1 -1
  312. package/dist/services/intelligent-router/normalize.d.ts.map +1 -1
  313. package/dist/services/intelligent-router/normalize.js +1 -3
  314. package/dist/services/intelligent-router/normalize.js.map +1 -1
  315. package/dist/services/revenue-attribution/normalize.d.ts.map +1 -1
  316. package/dist/services/revenue-attribution/normalize.js +1 -3
  317. package/dist/services/revenue-attribution/normalize.js.map +1 -1
  318. package/dist/services/traces/normalize.d.ts.map +1 -1
  319. package/dist/services/traces/normalize.js +1 -3
  320. package/dist/services/traces/normalize.js.map +1 -1
  321. package/dist/services/workspace-config/normalize.d.ts.map +1 -1
  322. package/dist/services/workspace-config/normalize.js +1 -3
  323. package/dist/services/workspace-config/normalize.js.map +1 -1
  324. package/dist/skills/composer.d.ts.map +1 -1
  325. package/dist/skills/composer.js +13 -1
  326. package/dist/skills/composer.js.map +1 -1
  327. package/dist/skills/index.d.ts +1 -0
  328. package/dist/skills/index.d.ts.map +1 -1
  329. package/dist/skills/index.js +1 -0
  330. package/dist/skills/index.js.map +1 -1
  331. package/dist/skills/learned-guidelines.d.ts +33 -0
  332. package/dist/skills/learned-guidelines.d.ts.map +1 -0
  333. package/dist/skills/learned-guidelines.js +291 -0
  334. package/dist/skills/learned-guidelines.js.map +1 -0
  335. package/dist/skills/linter.d.ts.map +1 -1
  336. package/dist/skills/linter.js +1 -3
  337. package/dist/skills/linter.js.map +1 -1
  338. package/dist/skills/runtime-activation.d.ts +1 -0
  339. package/dist/skills/runtime-activation.d.ts.map +1 -1
  340. package/dist/skills/runtime-activation.js +2 -3
  341. package/dist/skills/runtime-activation.js.map +1 -1
  342. package/dist/skills/tool.d.ts.map +1 -1
  343. package/dist/skills/tool.js +26 -21
  344. package/dist/skills/tool.js.map +1 -1
  345. package/dist/skills/trust-cache.d.ts +7 -0
  346. package/dist/skills/trust-cache.d.ts.map +1 -1
  347. package/dist/skills/trust-cache.js +16 -0
  348. package/dist/skills/trust-cache.js.map +1 -1
  349. package/dist/telemetry/agent-workforce-native-event.d.ts.map +1 -1
  350. package/dist/telemetry/agent-workforce-native-event.js +1 -3
  351. package/dist/telemetry/agent-workforce-native-event.js.map +1 -1
  352. package/dist/telemetry/maestro-event-bus.d.ts.map +1 -1
  353. package/dist/telemetry/maestro-event-bus.js +42 -81
  354. package/dist/telemetry/maestro-event-bus.js.map +1 -1
  355. package/dist/telemetry/maestro-platform-replay-fixture.d.ts.map +1 -1
  356. package/dist/telemetry/maestro-platform-replay-fixture.js +1 -3
  357. package/dist/telemetry/maestro-platform-replay-fixture.js.map +1 -1
  358. package/dist/telemetry.d.ts.map +1 -1
  359. package/dist/telemetry.js +54 -43
  360. package/dist/telemetry.js.map +1 -1
  361. package/dist/theme/theme-loader.d.ts.map +1 -1
  362. package/dist/theme/theme-loader.js +1 -3
  363. package/dist/theme/theme-loader.js.map +1 -1
  364. package/dist/tools/apply-patch.d.ts.map +1 -1
  365. package/dist/tools/apply-patch.js +76 -8
  366. package/dist/tools/apply-patch.js.map +1 -1
  367. package/dist/tools/diff-preview.d.ts.map +1 -1
  368. package/dist/tools/diff-preview.js +10 -1
  369. package/dist/tools/diff-preview.js.map +1 -1
  370. package/dist/tools/edit.d.ts.map +1 -1
  371. package/dist/tools/edit.js +17 -0
  372. package/dist/tools/edit.js.map +1 -1
  373. package/dist/tools/write.d.ts.map +1 -1
  374. package/dist/tools/write.js +9 -0
  375. package/dist/tools/write.js.map +1 -1
  376. package/dist/undo/tracker.d.ts +5 -0
  377. package/dist/undo/tracker.d.ts.map +1 -1
  378. package/dist/undo/tracker.js +13 -0
  379. package/dist/undo/tracker.js.map +1 -1
  380. package/dist/utils/fs.d.ts +1 -1
  381. package/dist/utils/fs.d.ts.map +1 -1
  382. package/dist/utils/fs.js +29 -2
  383. package/dist/utils/fs.js.map +1 -1
  384. package/dist/utils/git-stash.d.ts.map +1 -1
  385. package/dist/utils/git-stash.js +15 -8
  386. package/dist/utils/git-stash.js.map +1 -1
  387. package/dist/utils/json.d.ts +11 -0
  388. package/dist/utils/json.d.ts.map +1 -1
  389. package/dist/utils/json.js +9 -0
  390. package/dist/utils/json.js.map +1 -1
  391. package/dist/utils/shell-env.d.ts.map +1 -1
  392. package/dist/utils/shell-env.js +2 -0
  393. package/dist/utils/shell-env.js.map +1 -1
  394. package/dist/utils/url-extractor-git.d.ts +26 -0
  395. package/dist/utils/url-extractor-git.d.ts.map +1 -0
  396. package/dist/utils/url-extractor-git.js +259 -0
  397. package/dist/utils/url-extractor-git.js.map +1 -0
  398. package/dist/utils/url-extractor.d.ts.map +1 -1
  399. package/dist/utils/url-extractor.js +23 -251
  400. package/dist/utils/url-extractor.js.map +1 -1
  401. package/dist/version.json +2 -2
  402. package/package.json +310 -306
  403. package/skills/incident-triage/SKILL.md +19 -1
  404. package/skills/install-code-review/SKILL.md +69 -0
  405. package/skills/security-review/SKILL.md +68 -0
  406. package/skills/security-review/reference/rubric.md +85 -0
@@ -1 +1 @@
1
- {"version":3,"file":"a2a-completion-audit.js","sourceRoot":"","sources":["../../src/platform/a2a-completion-audit.ts"],"names":[],"mappings":"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","sourcesContent":["import type { SwarmState, SwarmTeammate } from \"../agent/swarm/types.js\";\nimport type {\n\tA2ATaskLedgerEntry,\n\tA2ATaskLedgerFile,\n} from \"./a2a-task-ledger.js\";\nimport { isTerminalA2AState } from \"./a2a-task-ledger.js\";\n\nexport const A2A_COMPLETION_AUDIT_SCHEMA =\n\t\"evalops.maestro.a2a-completion-audit.v2\";\n\nexport type A2ACompletionSignalKey =\n\t| \"status\"\n\t| \"artifact\"\n\t| \"task\"\n\t| \"workGraph\"\n\t| \"push\"\n\t| \"correlation\";\n\nexport interface A2ACompletionAuditLane {\n\tlaneId: string;\n\tparentTaskId?: string;\n\ta2aTaskId: string;\n\ta2aMessageId?: string;\n\tcontextId?: string;\n\tpeer: string;\n\tstatus?: string;\n\tterminal: boolean;\n\tsignals: Record<A2ACompletionSignalKey, boolean>;\n\tmissingSignals: A2ACompletionSignalKey[];\n}\n\nexport interface A2ACompletionAudit {\n\tschema: typeof A2A_COMPLETION_AUDIT_SCHEMA;\n\tswarmId: string;\n\tgeneratedAt: string;\n\tcomplete: boolean;\n\tcounts: {\n\t\tremoteLanes: number;\n\t\tcompleteLanes: number;\n\t\tincompleteLanes: number;\n\t\tpushCoveredLanes: number;\n\t\tworkGraphCoveredLanes: number;\n\t};\n\tlanes: A2ACompletionAuditLane[];\n}\n\nexport interface A2APushCompletionSignals {\n\tstatusUpdateTerminal?: boolean;\n\tartifactUpdate?: boolean;\n\ttaskTerminal?: boolean;\n}\n\nexport interface BuildA2ACompletionAuditInput {\n\tswarm: SwarmState;\n\tledger: A2ATaskLedgerFile;\n\tpushSignals?: ReadonlyMap<string, A2APushCompletionSignals>;\n\tpushSignalKeys?: ReadonlySet<string>;\n\tpushTaskIds?: ReadonlySet<string>;\n\tgeneratedAt?: string;\n}\n\nconst SIGNAL_ORDER: A2ACompletionSignalKey[] = [\n\t\"status\",\n\t\"artifact\",\n\t\"task\",\n\t\"workGraph\",\n\t\"push\",\n\t\"correlation\",\n];\n\ntype A2AAuditA2A = NonNullable<SwarmTeammate[\"a2a\"]>;\n\ninterface A2AAuditLaneSource {\n\tlaneId: string;\n\tparentTaskId?: string;\n\tcompletedTasks: string[];\n\ta2a: A2AAuditA2A;\n\tledgerEntry?: A2ATaskLedgerEntry;\n}\n\nexport function buildA2ACompletionAudit(\n\tinput: BuildA2ACompletionAuditInput,\n): A2ACompletionAudit {\n\tconst remoteLanes = buildRemoteLaneSources(input);\n\tconst remoteTaskIdCounts = countRemoteTaskIds(remoteLanes);\n\tconst lanes = remoteLanes.map((lane) =>\n\t\tbuildLaneAudit(input, lane, remoteTaskIdCounts),\n\t);\n\tconst completeLanes = lanes.filter(\n\t\t(lane) => lane.terminal && lane.missingSignals.length === 0,\n\t).length;\n\tconst pushCoveredLanes = lanes.filter((lane) => lane.signals.push).length;\n\tconst workGraphCoveredLanes = lanes.filter(\n\t\t(lane) => lane.signals.workGraph,\n\t).length;\n\treturn {\n\t\tschema: A2A_COMPLETION_AUDIT_SCHEMA,\n\t\tswarmId: input.swarm.id,\n\t\tgeneratedAt: input.generatedAt ?? new Date().toISOString(),\n\t\tcomplete: lanes.length === completeLanes,\n\t\tcounts: {\n\t\t\tremoteLanes: lanes.length,\n\t\t\tcompleteLanes,\n\t\t\tincompleteLanes: lanes.length - completeLanes,\n\t\t\tpushCoveredLanes,\n\t\t\tworkGraphCoveredLanes,\n\t\t},\n\t\tlanes,\n\t};\n}\n\nexport function a2aPushSignalKey(peer: string, taskId: string): string {\n\treturn `${peer}\\u0000${taskId}`;\n}\n\nexport function a2aDelegationLaneId(\n\tpeer: string,\n\tparentTaskId: string,\n): string {\n\treturn `a2a:${encodeURIComponent(peer)}:${encodeURIComponent(parentTaskId)}`;\n}\n\nfunction buildRemoteLaneSources(\n\tinput: BuildA2ACompletionAuditInput,\n): A2AAuditLaneSource[] {\n\tconst teammateLanes = input.swarm.teammates\n\t\t.filter(hasA2ATask)\n\t\t.map((teammate) => {\n\t\t\tconst ledgerEntry = findLedgerEntry(input.ledger, teammate.a2a);\n\t\t\tconst parentTaskId = parentTaskIdForLane(\n\t\t\t\tteammate.completedTasks,\n\t\t\t\tledgerEntry,\n\t\t\t\tteammate.a2a,\n\t\t\t);\n\t\t\treturn {\n\t\t\t\tlaneId: parentTaskId\n\t\t\t\t\t? a2aDelegationLaneId(teammate.a2a.peer, parentTaskId)\n\t\t\t\t\t: teammate.id,\n\t\t\t\tparentTaskId,\n\t\t\t\tcompletedTasks: teammate.completedTasks,\n\t\t\t\ta2a: teammate.a2a,\n\t\t\t\tledgerEntry,\n\t\t\t};\n\t\t});\n\tconst seen = new Set(teammateLanes.map((lane) => laneKey(lane.a2a)));\n\tconst ledgerOnlyLanes = input.ledger.tasks\n\t\t.filter((entry) => entry.kind === \"delegation\")\n\t\t.filter((entry) => stringMetadata(entry, \"swarmId\") === input.swarm.id)\n\t\t.filter((entry) => !seen.has(a2aPushSignalKey(entry.peer, entry.taskId)))\n\t\t.map((entry) => {\n\t\t\tconst parentTaskId = parentTaskIdForLedger(entry);\n\t\t\treturn {\n\t\t\t\tlaneId: parentTaskId\n\t\t\t\t\t? a2aDelegationLaneId(entry.peer, parentTaskId)\n\t\t\t\t\t: fallbackRemoteLaneId(entry.peer, entry.taskId),\n\t\t\t\tparentTaskId,\n\t\t\t\tcompletedTasks: [],\n\t\t\t\ta2a: {\n\t\t\t\t\tpeer: entry.peer,\n\t\t\t\t\tpeerDisplayName: entry.peerDisplayName,\n\t\t\t\t\tsource: \"registry\" as const,\n\t\t\t\t\ttaskId: entry.taskId,\n\t\t\t\t\tcontextId: entry.contextId,\n\t\t\t\t\tmessageId: entry.messageId ?? \"\",\n\t\t\t\t\trole: entry.role,\n\t\t\t\t},\n\t\t\t\tledgerEntry: entry,\n\t\t\t};\n\t\t});\n\treturn [...teammateLanes, ...ledgerOnlyLanes];\n}\n\nfunction hasA2ATask(\n\tteammate: SwarmTeammate,\n): teammate is SwarmTeammate & { a2a: A2AAuditA2A } {\n\treturn Boolean(teammate.a2a?.taskId);\n}\n\nfunction laneKey(a2a: A2AAuditA2A): string {\n\treturn a2aPushSignalKey(a2a.peer, a2a.taskId);\n}\n\nfunction findLedgerEntry(\n\tledger: A2ATaskLedgerFile,\n\ta2a: A2AAuditA2A,\n): A2ATaskLedgerEntry | undefined {\n\treturn ledger.tasks.find(\n\t\t(entry) => entry.taskId === a2a.taskId && entry.peer === a2a.peer,\n\t);\n}\n\nfunction buildLaneAudit(\n\tinput: BuildA2ACompletionAuditInput,\n\tlane: A2AAuditLaneSource,\n\tremoteTaskIdCounts: ReadonlyMap<string, number>,\n): A2ACompletionAuditLane {\n\tconst { a2a, ledgerEntry } = lane;\n\tconst parentTaskId =\n\t\tlane.parentTaskId ??\n\t\tparentTaskIdForLane(lane.completedTasks, ledgerEntry, a2a);\n\tconst status = ledgerEntry?.state;\n\tconst signals: Record<A2ACompletionSignalKey, boolean> = {\n\t\tstatus: Boolean(status),\n\t\tartifact: hasArtifactSignal(ledgerEntry),\n\t\ttask: Boolean(ledgerEntry),\n\t\tworkGraph: Boolean(ledgerEntry?.workGraph),\n\t\tpush: hasPushSignal(input, a2a, remoteTaskIdCounts),\n\t\tcorrelation: hasCorrelationSignal(\n\t\t\tinput.swarm.id,\n\t\t\tparentTaskId,\n\t\t\ta2a,\n\t\t\tledgerEntry,\n\t\t),\n\t};\n\tconst missingSignals = SIGNAL_ORDER.filter((key) => !signals[key]);\n\treturn {\n\t\tlaneId: lane.laneId,\n\t\tparentTaskId,\n\t\ta2aTaskId: a2a.taskId,\n\t\ta2aMessageId: a2a.messageId,\n\t\tcontextId: a2a.contextId ?? ledgerEntry?.contextId,\n\t\tpeer: a2a.peer,\n\t\tstatus,\n\t\tterminal: Boolean(status && isTerminalA2AState(status)),\n\t\tsignals,\n\t\tmissingSignals,\n\t};\n}\n\nfunction countRemoteTaskIds(lanes: A2AAuditLaneSource[]): Map<string, number> {\n\tconst counts = new Map<string, number>();\n\tfor (const lane of lanes) {\n\t\tconst taskId = lane.a2a.taskId;\n\t\tcounts.set(taskId, (counts.get(taskId) ?? 0) + 1);\n\t}\n\treturn counts;\n}\n\nfunction hasPushSignal(\n\tinput: BuildA2ACompletionAuditInput,\n\ta2a: NonNullable<SwarmTeammate[\"a2a\"]>,\n\tremoteTaskIdCounts: ReadonlyMap<string, number>,\n): boolean {\n\tconst exactKey = a2aPushSignalKey(a2a.peer, a2a.taskId);\n\tif (input.pushSignals?.has(exactKey)) {\n\t\treturn pushCompletionSignalsAreComplete(input.pushSignals.get(exactKey));\n\t}\n\tif (input.pushSignalKeys?.has(exactKey)) {\n\t\treturn true;\n\t}\n\tif ((remoteTaskIdCounts.get(a2a.taskId) ?? 0) > 1) {\n\t\treturn false;\n\t}\n\treturn input.pushTaskIds?.has(a2a.taskId) ?? false;\n}\n\nfunction pushCompletionSignalsAreComplete(\n\tsignals: A2APushCompletionSignals | undefined,\n): boolean {\n\treturn Boolean(\n\t\tsignals?.statusUpdateTerminal &&\n\t\t\tsignals.artifactUpdate &&\n\t\t\tsignals.taskTerminal,\n\t);\n}\n\nfunction parentTaskIdForLedger(\n\tledgerEntry: A2ATaskLedgerEntry | undefined,\n): string | undefined {\n\treturn (\n\t\tstringMetadata(ledgerEntry, \"taskId\") ??\n\t\tstringMetadata(ledgerEntry, \"task_id\")\n\t);\n}\n\nfunction parentTaskIdForLane(\n\tcompletedTasks: string[],\n\tledgerEntry: A2ATaskLedgerEntry | undefined,\n\ta2a?: A2AAuditA2A,\n): string | undefined {\n\tconst ledgerParentTaskId = parentTaskIdForLedger(ledgerEntry);\n\tconst a2aParentTaskId = a2a?.parentTaskId;\n\tif (ledgerEntry?.state && !isCompletedA2AState(ledgerEntry.state)) {\n\t\treturn ledgerParentTaskId ?? a2aParentTaskId ?? lastValue(completedTasks);\n\t}\n\treturn lastValue(completedTasks) ?? ledgerParentTaskId ?? a2aParentTaskId;\n}\n\nfunction isCompletedA2AState(state: string): boolean {\n\treturn /COMPLETED/u.test(state.toUpperCase().replace(/[\\s-]+/gu, \"_\"));\n}\n\nfunction lastValue(values: string[]): string | undefined {\n\treturn values.length > 0 ? values[values.length - 1] : undefined;\n}\n\nfunction fallbackRemoteLaneId(peer: string, taskId: string): string {\n\treturn `a2a:${encodeURIComponent(peer)}:remote:${encodeURIComponent(taskId)}`;\n}\n\nfunction hasArtifactSignal(entry: A2ATaskLedgerEntry | undefined): boolean {\n\treturn Boolean(\n\t\tentry?.responseText?.trim() ||\n\t\t\tentry?.transcript.some(\n\t\t\t\t(item) => item.role === \"agent\" && item.text.trim().length > 0,\n\t\t\t),\n\t);\n}\n\nfunction hasCorrelationSignal(\n\tswarmId: string,\n\tparentTaskId: string | undefined,\n\ta2a: NonNullable<SwarmTeammate[\"a2a\"]>,\n\tentry: A2ATaskLedgerEntry | undefined,\n): boolean {\n\tif (!entry) {\n\t\treturn false;\n\t}\n\tconst ledgerParentTaskId =\n\t\tstringMetadata(entry, \"taskId\") ?? stringMetadata(entry, \"task_id\");\n\treturn Boolean(\n\t\ta2a.messageId &&\n\t\t\tentry.messageId === a2a.messageId &&\n\t\t\t(a2a.contextId ? entry.contextId === a2a.contextId : entry.contextId) &&\n\t\t\tstringMetadata(entry, \"swarmId\") === swarmId &&\n\t\t\tparentTaskId &&\n\t\t\tledgerParentTaskId === parentTaskId,\n\t);\n}\n\nfunction stringMetadata(\n\tentry: A2ATaskLedgerEntry | undefined,\n\tkey: string,\n): string | undefined {\n\tconst value = entry?.metadata?.[key];\n\treturn typeof value === \"string\" ? value : undefined;\n}\n"]}
1
+ {"version":3,"file":"a2a-completion-audit.js","sourceRoot":"","sources":["../../src/platform/a2a-completion-audit.ts"],"names":[],"mappings":"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","sourcesContent":["import type { SwarmState, SwarmTeammate } from \"../agent/swarm/types.js\";\nimport {\n\ta2aTaskEvidenceGaps,\n\tisCompletedA2AState,\n\tisFinalA2AState,\n} from \"./a2a-task-ledger.js\";\nimport type {\n\tA2ATaskLedgerEntry,\n\tA2ATaskLedgerFile,\n} from \"./a2a-task-ledger.js\";\n\nexport const A2A_COMPLETION_AUDIT_SCHEMA =\n\t\"evalops.maestro.a2a-completion-audit.v2\";\n\nexport type A2ACompletionSignalKey =\n\t| \"status\"\n\t| \"artifact\"\n\t| \"task\"\n\t| \"workGraph\"\n\t| \"transcript\"\n\t| \"push\"\n\t| \"correlation\";\n\nexport interface A2ACompletionAuditLane {\n\tlaneId: string;\n\tparentTaskId?: string;\n\ta2aTaskId: string;\n\ta2aMessageId?: string;\n\tcontextId?: string;\n\tpeer: string;\n\tstatus?: string;\n\tterminal: boolean;\n\tsignals: Record<A2ACompletionSignalKey, boolean>;\n\tmissingSignals: A2ACompletionSignalKey[];\n}\n\nexport interface A2ACompletionAudit {\n\tschema: typeof A2A_COMPLETION_AUDIT_SCHEMA;\n\tswarmId: string;\n\tgeneratedAt: string;\n\tcomplete: boolean;\n\tcounts: {\n\t\tremoteLanes: number;\n\t\tcompleteLanes: number;\n\t\tincompleteLanes: number;\n\t\tpushCoveredLanes: number;\n\t\tworkGraphCoveredLanes: number;\n\t};\n\tlanes: A2ACompletionAuditLane[];\n}\n\nexport interface A2APushCompletionSignals {\n\tstatusUpdateTerminal?: boolean;\n\tartifactUpdate?: boolean;\n\ttaskTerminal?: boolean;\n}\n\nexport interface BuildA2ACompletionAuditInput {\n\tswarm: SwarmState;\n\tledger: A2ATaskLedgerFile;\n\tpushSignals?: ReadonlyMap<string, A2APushCompletionSignals>;\n\tpushSignalKeys?: ReadonlySet<string>;\n\tpushTaskIds?: ReadonlySet<string>;\n\tgeneratedAt?: string;\n}\n\nconst SIGNAL_ORDER: A2ACompletionSignalKey[] = [\n\t\"status\",\n\t\"artifact\",\n\t\"task\",\n\t\"workGraph\",\n\t\"transcript\",\n\t\"push\",\n\t\"correlation\",\n];\n\ntype A2AAuditA2A = NonNullable<SwarmTeammate[\"a2a\"]>;\n\ninterface A2AAuditLaneSource {\n\tlaneId: string;\n\tparentTaskId?: string;\n\tcompletedTasks: string[];\n\ta2a: A2AAuditA2A;\n\tledgerEntry?: A2ATaskLedgerEntry;\n}\n\nexport function buildA2ACompletionAudit(\n\tinput: BuildA2ACompletionAuditInput,\n): A2ACompletionAudit {\n\tconst remoteLanes = buildRemoteLaneSources(input);\n\tconst remoteTaskIdCounts = countRemoteTaskIds(remoteLanes);\n\tconst lanes = remoteLanes.map((lane) =>\n\t\tbuildLaneAudit(input, lane, remoteTaskIdCounts),\n\t);\n\tconst completeLanes = lanes.filter(\n\t\t(lane) => lane.terminal && lane.missingSignals.length === 0,\n\t).length;\n\tconst pushCoveredLanes = lanes.filter((lane) => lane.signals.push).length;\n\tconst workGraphCoveredLanes = lanes.filter(\n\t\t(lane) => lane.signals.workGraph,\n\t).length;\n\treturn {\n\t\tschema: A2A_COMPLETION_AUDIT_SCHEMA,\n\t\tswarmId: input.swarm.id,\n\t\tgeneratedAt: input.generatedAt ?? new Date().toISOString(),\n\t\tcomplete: lanes.length === completeLanes,\n\t\tcounts: {\n\t\t\tremoteLanes: lanes.length,\n\t\t\tcompleteLanes,\n\t\t\tincompleteLanes: lanes.length - completeLanes,\n\t\t\tpushCoveredLanes,\n\t\t\tworkGraphCoveredLanes,\n\t\t},\n\t\tlanes,\n\t};\n}\n\nexport function a2aPushSignalKey(peer: string, taskId: string): string {\n\treturn `${peer}\\u0000${taskId}`;\n}\n\nexport function a2aDelegationLaneId(\n\tpeer: string,\n\tparentTaskId: string,\n): string {\n\treturn `a2a:${encodeURIComponent(peer)}:${encodeURIComponent(parentTaskId)}`;\n}\n\nfunction buildRemoteLaneSources(\n\tinput: BuildA2ACompletionAuditInput,\n): A2AAuditLaneSource[] {\n\tconst teammateLanes = input.swarm.teammates\n\t\t.filter(hasA2ATask)\n\t\t.map((teammate) => {\n\t\t\tconst ledgerEntry = findLedgerEntry(input.ledger, teammate.a2a);\n\t\t\tconst parentTaskId = parentTaskIdForLane(\n\t\t\t\tteammate.completedTasks,\n\t\t\t\tledgerEntry,\n\t\t\t\tteammate.a2a,\n\t\t\t);\n\t\t\treturn {\n\t\t\t\tlaneId: parentTaskId\n\t\t\t\t\t? a2aDelegationLaneId(teammate.a2a.peer, parentTaskId)\n\t\t\t\t\t: teammate.id,\n\t\t\t\tparentTaskId,\n\t\t\t\tcompletedTasks: teammate.completedTasks,\n\t\t\t\ta2a: teammate.a2a,\n\t\t\t\tledgerEntry,\n\t\t\t};\n\t\t});\n\tconst seen = new Set(teammateLanes.map((lane) => laneKey(lane.a2a)));\n\tconst ledgerOnlyLanes = input.ledger.tasks\n\t\t.filter((entry) => entry.kind === \"delegation\")\n\t\t.filter((entry) => stringMetadata(entry, \"swarmId\") === input.swarm.id)\n\t\t.filter((entry) => !seen.has(a2aPushSignalKey(entry.peer, entry.taskId)))\n\t\t.map((entry) => {\n\t\t\tconst parentTaskId = parentTaskIdForLedger(entry);\n\t\t\treturn {\n\t\t\t\tlaneId: parentTaskId\n\t\t\t\t\t? a2aDelegationLaneId(entry.peer, parentTaskId)\n\t\t\t\t\t: fallbackRemoteLaneId(entry.peer, entry.taskId),\n\t\t\t\tparentTaskId,\n\t\t\t\tcompletedTasks: [],\n\t\t\t\ta2a: {\n\t\t\t\t\tpeer: entry.peer,\n\t\t\t\t\tpeerDisplayName: entry.peerDisplayName,\n\t\t\t\t\tsource: \"registry\" as const,\n\t\t\t\t\ttaskId: entry.taskId,\n\t\t\t\t\tcontextId: entry.contextId,\n\t\t\t\t\tmessageId: entry.messageId ?? \"\",\n\t\t\t\t\trole: entry.role,\n\t\t\t\t},\n\t\t\t\tledgerEntry: entry,\n\t\t\t};\n\t\t});\n\treturn [...teammateLanes, ...ledgerOnlyLanes];\n}\n\nfunction hasA2ATask(\n\tteammate: SwarmTeammate,\n): teammate is SwarmTeammate & { a2a: A2AAuditA2A } {\n\treturn Boolean(teammate.a2a?.taskId);\n}\n\nfunction laneKey(a2a: A2AAuditA2A): string {\n\treturn a2aPushSignalKey(a2a.peer, a2a.taskId);\n}\n\nfunction findLedgerEntry(\n\tledger: A2ATaskLedgerFile,\n\ta2a: A2AAuditA2A,\n): A2ATaskLedgerEntry | undefined {\n\treturn ledger.tasks.find(\n\t\t(entry) => entry.taskId === a2a.taskId && entry.peer === a2a.peer,\n\t);\n}\n\nfunction buildLaneAudit(\n\tinput: BuildA2ACompletionAuditInput,\n\tlane: A2AAuditLaneSource,\n\tremoteTaskIdCounts: ReadonlyMap<string, number>,\n): A2ACompletionAuditLane {\n\tconst { a2a, ledgerEntry } = lane;\n\tconst parentTaskId =\n\t\tlane.parentTaskId ??\n\t\tparentTaskIdForLane(lane.completedTasks, ledgerEntry, a2a);\n\tconst status = ledgerEntry?.state;\n\tconst evidenceGaps = ledgerEntry ? a2aTaskEvidenceGaps(ledgerEntry) : [];\n\tconst signals: Record<A2ACompletionSignalKey, boolean> = {\n\t\tstatus: Boolean(status),\n\t\tartifact:\n\t\t\tBoolean(ledgerEntry) && !evidenceGaps.includes(\"response-artifact\"),\n\t\ttask: Boolean(ledgerEntry),\n\t\tworkGraph: Boolean(ledgerEntry) && !evidenceGaps.includes(\"work-graph\"),\n\t\ttranscript: Boolean(ledgerEntry) && !evidenceGaps.includes(\"transcript\"),\n\t\tpush: hasPushSignal(input, a2a, remoteTaskIdCounts),\n\t\tcorrelation: hasCorrelationSignal(\n\t\t\tinput.swarm.id,\n\t\t\tparentTaskId,\n\t\t\ta2a,\n\t\t\tledgerEntry,\n\t\t),\n\t};\n\tconst missingSignals = SIGNAL_ORDER.filter((key) => !signals[key]);\n\treturn {\n\t\tlaneId: lane.laneId,\n\t\tparentTaskId,\n\t\ta2aTaskId: a2a.taskId,\n\t\ta2aMessageId: a2a.messageId,\n\t\tcontextId: a2a.contextId ?? ledgerEntry?.contextId,\n\t\tpeer: a2a.peer,\n\t\tstatus,\n\t\tterminal: Boolean(status && isFinalA2AState(status)),\n\t\tsignals,\n\t\tmissingSignals,\n\t};\n}\n\nfunction countRemoteTaskIds(lanes: A2AAuditLaneSource[]): Map<string, number> {\n\tconst counts = new Map<string, number>();\n\tfor (const lane of lanes) {\n\t\tconst taskId = lane.a2a.taskId;\n\t\tcounts.set(taskId, (counts.get(taskId) ?? 0) + 1);\n\t}\n\treturn counts;\n}\n\nfunction hasPushSignal(\n\tinput: BuildA2ACompletionAuditInput,\n\ta2a: NonNullable<SwarmTeammate[\"a2a\"]>,\n\tremoteTaskIdCounts: ReadonlyMap<string, number>,\n): boolean {\n\tconst exactKey = a2aPushSignalKey(a2a.peer, a2a.taskId);\n\tif (input.pushSignals?.has(exactKey)) {\n\t\treturn pushCompletionSignalsAreComplete(input.pushSignals.get(exactKey));\n\t}\n\tif (input.pushSignalKeys?.has(exactKey)) {\n\t\treturn true;\n\t}\n\tif ((remoteTaskIdCounts.get(a2a.taskId) ?? 0) > 1) {\n\t\treturn false;\n\t}\n\treturn input.pushTaskIds?.has(a2a.taskId) ?? false;\n}\n\nfunction pushCompletionSignalsAreComplete(\n\tsignals: A2APushCompletionSignals | undefined,\n): boolean {\n\treturn Boolean(\n\t\tsignals?.statusUpdateTerminal &&\n\t\t\tsignals.artifactUpdate &&\n\t\t\tsignals.taskTerminal,\n\t);\n}\n\nfunction parentTaskIdForLedger(\n\tledgerEntry: A2ATaskLedgerEntry | undefined,\n): string | undefined {\n\treturn (\n\t\tstringMetadata(ledgerEntry, \"taskId\") ??\n\t\tstringMetadata(ledgerEntry, \"task_id\")\n\t);\n}\n\nfunction parentTaskIdForLane(\n\tcompletedTasks: string[],\n\tledgerEntry: A2ATaskLedgerEntry | undefined,\n\ta2a?: A2AAuditA2A,\n): string | undefined {\n\tconst ledgerParentTaskId = parentTaskIdForLedger(ledgerEntry);\n\tconst a2aParentTaskId = a2a?.parentTaskId;\n\tif (ledgerEntry?.state && !isCompletedA2AState(ledgerEntry.state)) {\n\t\treturn ledgerParentTaskId ?? a2aParentTaskId ?? lastValue(completedTasks);\n\t}\n\treturn lastValue(completedTasks) ?? ledgerParentTaskId ?? a2aParentTaskId;\n}\n\nfunction lastValue(values: string[]): string | undefined {\n\treturn values.length > 0 ? values[values.length - 1] : undefined;\n}\n\nfunction fallbackRemoteLaneId(peer: string, taskId: string): string {\n\treturn `a2a:${encodeURIComponent(peer)}:remote:${encodeURIComponent(taskId)}`;\n}\n\nfunction hasCorrelationSignal(\n\tswarmId: string,\n\tparentTaskId: string | undefined,\n\ta2a: NonNullable<SwarmTeammate[\"a2a\"]>,\n\tentry: A2ATaskLedgerEntry | undefined,\n): boolean {\n\tif (!entry) {\n\t\treturn false;\n\t}\n\tconst ledgerParentTaskId =\n\t\tstringMetadata(entry, \"taskId\") ?? stringMetadata(entry, \"task_id\");\n\treturn Boolean(\n\t\ta2a.messageId &&\n\t\t\tentry.messageId === a2a.messageId &&\n\t\t\t(a2a.contextId ? entry.contextId === a2a.contextId : entry.contextId) &&\n\t\t\tstringMetadata(entry, \"swarmId\") === swarmId &&\n\t\t\tparentTaskId &&\n\t\t\tledgerParentTaskId === parentTaskId,\n\t);\n}\n\nfunction stringMetadata(\n\tentry: A2ATaskLedgerEntry | undefined,\n\tkey: string,\n): string | undefined {\n\tconst value = entry?.metadata?.[key];\n\treturn typeof value === \"string\" ? value : undefined;\n}\n"]}
@@ -132,6 +132,22 @@ function laneSkillPolicy(laneId) {
132
132
  optionalArtifactKinds: ["failure.triage", "coverage.summary"],
133
133
  allowedTaskClasses: ["test.execution", "ci.triage"],
134
134
  };
135
+ case "browser-qa":
136
+ return {
137
+ requiredContextGrants: [
138
+ "browser:control",
139
+ "artifact:write",
140
+ "runtime:events:read",
141
+ ],
142
+ requiredArtifactKinds: ["qa.repro-report"],
143
+ optionalArtifactKinds: [
144
+ "screenshot",
145
+ "repro.video",
146
+ "browser.console",
147
+ "network.error",
148
+ ],
149
+ allowedTaskClasses: ["product.qa", "browser.e2e", "ux.repro"],
150
+ };
135
151
  case "repo-explorer":
136
152
  return {
137
153
  requiredContextGrants: ["repo:read", "context:index:write"],
@@ -1 +1 @@
1
- {"version":3,"file":"a2a-maestro-peer.js","sourceRoot":"","sources":["../../src/platform/a2a-maestro-peer.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\tCODEX_SUBAGENT_DISPATCH_TABLE,\n\ttype CodexSubagentDispatchLane,\n} from \"../codex/subagent-dispatch-table.js\";\nimport type {\n\tPlatformAgentA2APeerProjection,\n\tPlatformAgentA2ASkill,\n} from \"./agent-registry-client.js\";\n\nexport const MAESTRO_A2A_PROTOCOL_VERSION = \"1.0\";\nexport const MAESTRO_A2A_PROTOCOL_BINDING = \"HTTP+JSON\";\nexport const MAESTRO_A2A_AGENT_CARD_PATH = \"/.well-known/agent-card.json\";\nexport const EVALOPS_A2A_OPERATING_PLANE_EXTENSION_URI =\n\t\"https://evalops.com/a2a/extensions/operating-plane/v1\";\n\nconst MAESTRO_TUI_TURN_SKILL: PlatformAgentA2ASkill = {\n\tid: \"maestro-tui-turn\",\n\tname: \"Maestro TUI turn\",\n\tdescription:\n\t\t\"Run a prompt through the local Maestro native TUI agent runner.\",\n\ttags: [\"maestro\", \"tui\", \"codex\", \"a2a\", \"fleet\"],\n\tinputModes: [\"text/plain\"],\n\toutputModes: [\"text/plain\", \"application/json\"],\n\tattributes: {\n\t\tevalopsSkillKind: \"maestro-turn\",\n\t\toperatingPlaneExtension: EVALOPS_A2A_OPERATING_PLANE_EXTENSION_URI,\n\t},\n};\n\nexport interface BuildMaestroA2APeerProjectionInput {\n\tpublicEndpointUrl: string;\n\tinternalEndpointUrl?: string;\n\tagentCardUrl?: string;\n\tprotocolVersion?: string;\n\tagentCardETag?: string;\n\tagentCardHash?: string;\n\tpushNotifications?: boolean;\n\tsecuritySchemes?: string[];\n\tattributes?: Record<string, string>;\n}\n\nexport function defaultMaestroA2ACapabilities(): string[] {\n\treturn uniqueStrings([\n\t\t\"maestro:a2a\",\n\t\t\"maestro:cli\",\n\t\t\"maestro:subagents\",\n\t\t...CODEX_SUBAGENT_DISPATCH_TABLE.a2aSkillLanes.flatMap((lane) =>\n\t\t\tlane.capabilityAliases.filter((capability) => capability.includes(\":\")),\n\t\t),\n\t]);\n}\n\nexport function buildMaestroA2APeerProjection(\n\tinput: BuildMaestroA2APeerProjectionInput,\n): PlatformAgentA2APeerProjection {\n\tconst publicEndpointUrl = normalizeEndpoint(input.publicEndpointUrl);\n\tconst internalEndpointUrl = input.internalEndpointUrl\n\t\t? normalizeEndpoint(input.internalEndpointUrl)\n\t\t: undefined;\n\tconst agentCardUrl =\n\t\tinput.agentCardUrl?.trim() ||\n\t\t`${publicEndpointUrl}${MAESTRO_A2A_AGENT_CARD_PATH}`;\n\treturn stripUndefinedValues({\n\t\tpublicEndpointUrl,\n\t\tinternalEndpointUrl,\n\t\tagentCardUrl,\n\t\tprotocolBinding: MAESTRO_A2A_PROTOCOL_BINDING,\n\t\tprotocolVersion: input.protocolVersion ?? MAESTRO_A2A_PROTOCOL_VERSION,\n\t\tsupportedExtensions: [EVALOPS_A2A_OPERATING_PLANE_EXTENSION_URI],\n\t\tskills: maestroA2AAgentSkills(),\n\t\tsecuritySchemes:\n\t\t\tinput.securitySchemes && input.securitySchemes.length > 0\n\t\t\t\t? uniqueStrings(input.securitySchemes)\n\t\t\t\t: [\"evalops-agent-token\"],\n\t\tagentCardETag: input.agentCardETag,\n\t\tagentCardHash: input.agentCardHash,\n\t\tpushNotifications: input.pushNotifications ?? true,\n\t\tattributes: {\n\t\t\truntime: \"maestro\",\n\t\t\tcontrolPlane: \"rust-control-plane\",\n\t\t\tsubagentDispatchTable: CODEX_SUBAGENT_DISPATCH_TABLE.schemaVersion,\n\t\t\toperatingPlaneExtension: EVALOPS_A2A_OPERATING_PLANE_EXTENSION_URI,\n\t\t\t...(input.attributes ?? {}),\n\t\t},\n\t}) as PlatformAgentA2APeerProjection;\n}\n\nexport function maestroA2AAgentSkills(): PlatformAgentA2ASkill[] {\n\treturn [\n\t\tMAESTRO_TUI_TURN_SKILL,\n\t\t...CODEX_SUBAGENT_DISPATCH_TABLE.a2aSkillLanes.map(\n\t\t\tmaestroSubagentLaneSkill,\n\t\t),\n\t];\n}\n\nfunction maestroSubagentLaneSkill(\n\tlane: CodexSubagentDispatchLane,\n): PlatformAgentA2ASkill {\n\tconst policy = laneSkillPolicy(lane.laneId);\n\treturn {\n\t\tid: lane.skillId,\n\t\tname: lane.displayName,\n\t\tdescription: lane.description,\n\t\ttags: [...lane.tags],\n\t\tinputModes: [\"text/plain\", \"application/json\"],\n\t\toutputModes: [\"text/plain\", \"application/json\"],\n\t\trequiredContextGrants: policy.requiredContextGrants,\n\t\tapprovalPolicyRef: `maestro.subagent.${lane.laneId}.target-policy`,\n\t\tmaxAutonomy: \"bounded\",\n\t\trequiredArtifactKinds: policy.requiredArtifactKinds,\n\t\toptionalArtifactKinds: policy.optionalArtifactKinds,\n\t\tallowedTaskClasses: policy.allowedTaskClasses,\n\t\tdeniedTaskClasses: [\n\t\t\t\"credential.materialization\",\n\t\t\t\"secret.exfiltration\",\n\t\t\t\"unbounded.repository.write\",\n\t\t],\n\t\tattributes: {\n\t\t\tevalopsSkillKind: \"maestro-subagent\",\n\t\t\tsubagentLaneId: lane.laneId,\n\t\t\trequestMetadataPath: \"evalops.subagentRequest\",\n\t\t\toperatingPlaneExtension: EVALOPS_A2A_OPERATING_PLANE_EXTENSION_URI,\n\t\t},\n\t\tmetadata: {\n\t\t\tevalopsSkillKind: \"maestro-subagent\",\n\t\t\tsubagentLaneId: lane.laneId,\n\t\t\toperatingPlaneExtension: EVALOPS_A2A_OPERATING_PLANE_EXTENSION_URI,\n\t\t\trequestMetadataPath: \"evalops.subagentRequest\",\n\t\t\tapprovalPolicy: \"target-maestro-policy\",\n\t\t\tcontextGrantPolicy: \"bounded-policy-grants\",\n\t\t\tresultPolicy: \"summary-and-artifacts\",\n\t\t\tworkGraph: \"target AgentRun child-agent work items\",\n\t\t},\n\t};\n}\n\nfunction laneSkillPolicy(laneId: string): {\n\trequiredContextGrants: string[];\n\trequiredArtifactKinds: string[];\n\toptionalArtifactKinds: string[];\n\tallowedTaskClasses: string[];\n} {\n\tswitch (laneId) {\n\t\tcase \"code-writer\":\n\t\t\treturn {\n\t\t\t\trequiredContextGrants: [\n\t\t\t\t\t\"repo:read\",\n\t\t\t\t\t\"repo:write-scoped\",\n\t\t\t\t\t\"tool:execute-tests\",\n\t\t\t\t],\n\t\t\t\trequiredArtifactKinds: [\"patch.summary\"],\n\t\t\t\toptionalArtifactKinds: [\"test.report\", \"review.summary\"],\n\t\t\t\tallowedTaskClasses: [\"code.implementation\", \"code.refactor\"],\n\t\t\t};\n\t\tcase \"code-review\":\n\t\t\treturn {\n\t\t\t\trequiredContextGrants: [\n\t\t\t\t\t\"repo:read\",\n\t\t\t\t\t\"pull-request:read\",\n\t\t\t\t\t\"artifact:read\",\n\t\t\t\t],\n\t\t\t\trequiredArtifactKinds: [\"review.summary\"],\n\t\t\t\toptionalArtifactKinds: [\"risk.finding\", \"test.plan\"],\n\t\t\t\tallowedTaskClasses: [\"code.review\", \"risk.analysis\"],\n\t\t\t};\n\t\tcase \"test-runner\":\n\t\t\treturn {\n\t\t\t\trequiredContextGrants: [\n\t\t\t\t\t\"repo:read\",\n\t\t\t\t\t\"tool:execute-tests\",\n\t\t\t\t\t\"artifact:write\",\n\t\t\t\t],\n\t\t\t\trequiredArtifactKinds: [\"test.report\"],\n\t\t\t\toptionalArtifactKinds: [\"failure.triage\", \"coverage.summary\"],\n\t\t\t\tallowedTaskClasses: [\"test.execution\", \"ci.triage\"],\n\t\t\t};\n\t\tcase \"repo-explorer\":\n\t\t\treturn {\n\t\t\t\trequiredContextGrants: [\"repo:read\", \"context:index:write\"],\n\t\t\t\trequiredArtifactKinds: [\"repo.map\"],\n\t\t\t\toptionalArtifactKinds: [\"context.index\"],\n\t\t\t\tallowedTaskClasses: [\"repo.inspect\", \"context.gathering\"],\n\t\t\t};\n\t\tcase \"release-shepherd\":\n\t\t\treturn {\n\t\t\t\trequiredContextGrants: [\n\t\t\t\t\t\"repo:read\",\n\t\t\t\t\t\"pull-request:write\",\n\t\t\t\t\t\"deploy:read\",\n\t\t\t\t\t\"artifact:write\",\n\t\t\t\t\t\"runtime:events:read\",\n\t\t\t\t],\n\t\t\t\trequiredArtifactKinds: [\"release.summary\"],\n\t\t\t\toptionalArtifactKinds: [\"ci.summary\", \"deploy.status\"],\n\t\t\t\tallowedTaskClasses: [\"release.follow-through\", \"deployment.smoke\"],\n\t\t\t};\n\t\tdefault:\n\t\t\treturn {\n\t\t\t\trequiredContextGrants: [\"repo:read\"],\n\t\t\t\trequiredArtifactKinds: [\"subagent.summary\"],\n\t\t\t\toptionalArtifactKinds: [\"context.index\"],\n\t\t\t\tallowedTaskClasses: [\"agent.delegation\"],\n\t\t\t};\n\t}\n}\n\nfunction normalizeEndpoint(value: string): string {\n\tconst endpoint = value.trim().replace(/\\/+$/u, \"\");\n\tif (!endpoint) {\n\t\tthrow new Error(\"A2A endpoint URL is required\");\n\t}\n\treturn endpoint;\n}\n\nfunction uniqueStrings(values: readonly string[]): string[] {\n\treturn Array.from(\n\t\tnew Set(values.map((value) => value.trim()).filter(Boolean)),\n\t);\n}\n\nfunction stripUndefinedValues(\n\trecord: Record<string, unknown>,\n): Record<string, unknown> {\n\treturn Object.fromEntries(\n\t\tObject.entries(record).filter(([, value]) => value !== undefined),\n\t);\n}\n"]}
1
+ {"version":3,"file":"a2a-maestro-peer.js","sourceRoot":"","sources":["../../src/platform/a2a-maestro-peer.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\tCODEX_SUBAGENT_DISPATCH_TABLE,\n\ttype CodexSubagentDispatchLane,\n} from \"../codex/subagent-dispatch-table.js\";\nimport type {\n\tPlatformAgentA2APeerProjection,\n\tPlatformAgentA2ASkill,\n} from \"./agent-registry-client.js\";\n\nexport const MAESTRO_A2A_PROTOCOL_VERSION = \"1.0\";\nexport const MAESTRO_A2A_PROTOCOL_BINDING = \"HTTP+JSON\";\nexport const MAESTRO_A2A_AGENT_CARD_PATH = \"/.well-known/agent-card.json\";\nexport const EVALOPS_A2A_OPERATING_PLANE_EXTENSION_URI =\n\t\"https://evalops.com/a2a/extensions/operating-plane/v1\";\n\nconst MAESTRO_TUI_TURN_SKILL: PlatformAgentA2ASkill = {\n\tid: \"maestro-tui-turn\",\n\tname: \"Maestro TUI turn\",\n\tdescription:\n\t\t\"Run a prompt through the local Maestro native TUI agent runner.\",\n\ttags: [\"maestro\", \"tui\", \"codex\", \"a2a\", \"fleet\"],\n\tinputModes: [\"text/plain\"],\n\toutputModes: [\"text/plain\", \"application/json\"],\n\tattributes: {\n\t\tevalopsSkillKind: \"maestro-turn\",\n\t\toperatingPlaneExtension: EVALOPS_A2A_OPERATING_PLANE_EXTENSION_URI,\n\t},\n};\n\nexport interface BuildMaestroA2APeerProjectionInput {\n\tpublicEndpointUrl: string;\n\tinternalEndpointUrl?: string;\n\tagentCardUrl?: string;\n\tprotocolVersion?: string;\n\tagentCardETag?: string;\n\tagentCardHash?: string;\n\tpushNotifications?: boolean;\n\tsecuritySchemes?: string[];\n\tattributes?: Record<string, string>;\n}\n\nexport function defaultMaestroA2ACapabilities(): string[] {\n\treturn uniqueStrings([\n\t\t\"maestro:a2a\",\n\t\t\"maestro:cli\",\n\t\t\"maestro:subagents\",\n\t\t...CODEX_SUBAGENT_DISPATCH_TABLE.a2aSkillLanes.flatMap((lane) =>\n\t\t\tlane.capabilityAliases.filter((capability) => capability.includes(\":\")),\n\t\t),\n\t]);\n}\n\nexport function buildMaestroA2APeerProjection(\n\tinput: BuildMaestroA2APeerProjectionInput,\n): PlatformAgentA2APeerProjection {\n\tconst publicEndpointUrl = normalizeEndpoint(input.publicEndpointUrl);\n\tconst internalEndpointUrl = input.internalEndpointUrl\n\t\t? normalizeEndpoint(input.internalEndpointUrl)\n\t\t: undefined;\n\tconst agentCardUrl =\n\t\tinput.agentCardUrl?.trim() ||\n\t\t`${publicEndpointUrl}${MAESTRO_A2A_AGENT_CARD_PATH}`;\n\treturn stripUndefinedValues({\n\t\tpublicEndpointUrl,\n\t\tinternalEndpointUrl,\n\t\tagentCardUrl,\n\t\tprotocolBinding: MAESTRO_A2A_PROTOCOL_BINDING,\n\t\tprotocolVersion: input.protocolVersion ?? MAESTRO_A2A_PROTOCOL_VERSION,\n\t\tsupportedExtensions: [EVALOPS_A2A_OPERATING_PLANE_EXTENSION_URI],\n\t\tskills: maestroA2AAgentSkills(),\n\t\tsecuritySchemes:\n\t\t\tinput.securitySchemes && input.securitySchemes.length > 0\n\t\t\t\t? uniqueStrings(input.securitySchemes)\n\t\t\t\t: [\"evalops-agent-token\"],\n\t\tagentCardETag: input.agentCardETag,\n\t\tagentCardHash: input.agentCardHash,\n\t\tpushNotifications: input.pushNotifications ?? true,\n\t\tattributes: {\n\t\t\truntime: \"maestro\",\n\t\t\tcontrolPlane: \"rust-control-plane\",\n\t\t\tsubagentDispatchTable: CODEX_SUBAGENT_DISPATCH_TABLE.schemaVersion,\n\t\t\toperatingPlaneExtension: EVALOPS_A2A_OPERATING_PLANE_EXTENSION_URI,\n\t\t\t...(input.attributes ?? {}),\n\t\t},\n\t}) as PlatformAgentA2APeerProjection;\n}\n\nexport function maestroA2AAgentSkills(): PlatformAgentA2ASkill[] {\n\treturn [\n\t\tMAESTRO_TUI_TURN_SKILL,\n\t\t...CODEX_SUBAGENT_DISPATCH_TABLE.a2aSkillLanes.map(\n\t\t\tmaestroSubagentLaneSkill,\n\t\t),\n\t];\n}\n\nfunction maestroSubagentLaneSkill(\n\tlane: CodexSubagentDispatchLane,\n): PlatformAgentA2ASkill {\n\tconst policy = laneSkillPolicy(lane.laneId);\n\treturn {\n\t\tid: lane.skillId,\n\t\tname: lane.displayName,\n\t\tdescription: lane.description,\n\t\ttags: [...lane.tags],\n\t\tinputModes: [\"text/plain\", \"application/json\"],\n\t\toutputModes: [\"text/plain\", \"application/json\"],\n\t\trequiredContextGrants: policy.requiredContextGrants,\n\t\tapprovalPolicyRef: `maestro.subagent.${lane.laneId}.target-policy`,\n\t\tmaxAutonomy: \"bounded\",\n\t\trequiredArtifactKinds: policy.requiredArtifactKinds,\n\t\toptionalArtifactKinds: policy.optionalArtifactKinds,\n\t\tallowedTaskClasses: policy.allowedTaskClasses,\n\t\tdeniedTaskClasses: [\n\t\t\t\"credential.materialization\",\n\t\t\t\"secret.exfiltration\",\n\t\t\t\"unbounded.repository.write\",\n\t\t],\n\t\tattributes: {\n\t\t\tevalopsSkillKind: \"maestro-subagent\",\n\t\t\tsubagentLaneId: lane.laneId,\n\t\t\trequestMetadataPath: \"evalops.subagentRequest\",\n\t\t\toperatingPlaneExtension: EVALOPS_A2A_OPERATING_PLANE_EXTENSION_URI,\n\t\t},\n\t\tmetadata: {\n\t\t\tevalopsSkillKind: \"maestro-subagent\",\n\t\t\tsubagentLaneId: lane.laneId,\n\t\t\toperatingPlaneExtension: EVALOPS_A2A_OPERATING_PLANE_EXTENSION_URI,\n\t\t\trequestMetadataPath: \"evalops.subagentRequest\",\n\t\t\tapprovalPolicy: \"target-maestro-policy\",\n\t\t\tcontextGrantPolicy: \"bounded-policy-grants\",\n\t\t\tresultPolicy: \"summary-and-artifacts\",\n\t\t\tworkGraph: \"target AgentRun child-agent work items\",\n\t\t},\n\t};\n}\n\nfunction laneSkillPolicy(laneId: string): {\n\trequiredContextGrants: string[];\n\trequiredArtifactKinds: string[];\n\toptionalArtifactKinds: string[];\n\tallowedTaskClasses: string[];\n} {\n\tswitch (laneId) {\n\t\tcase \"code-writer\":\n\t\t\treturn {\n\t\t\t\trequiredContextGrants: [\n\t\t\t\t\t\"repo:read\",\n\t\t\t\t\t\"repo:write-scoped\",\n\t\t\t\t\t\"tool:execute-tests\",\n\t\t\t\t],\n\t\t\t\trequiredArtifactKinds: [\"patch.summary\"],\n\t\t\t\toptionalArtifactKinds: [\"test.report\", \"review.summary\"],\n\t\t\t\tallowedTaskClasses: [\"code.implementation\", \"code.refactor\"],\n\t\t\t};\n\t\tcase \"code-review\":\n\t\t\treturn {\n\t\t\t\trequiredContextGrants: [\n\t\t\t\t\t\"repo:read\",\n\t\t\t\t\t\"pull-request:read\",\n\t\t\t\t\t\"artifact:read\",\n\t\t\t\t],\n\t\t\t\trequiredArtifactKinds: [\"review.summary\"],\n\t\t\t\toptionalArtifactKinds: [\"risk.finding\", \"test.plan\"],\n\t\t\t\tallowedTaskClasses: [\"code.review\", \"risk.analysis\"],\n\t\t\t};\n\t\tcase \"test-runner\":\n\t\t\treturn {\n\t\t\t\trequiredContextGrants: [\n\t\t\t\t\t\"repo:read\",\n\t\t\t\t\t\"tool:execute-tests\",\n\t\t\t\t\t\"artifact:write\",\n\t\t\t\t],\n\t\t\t\trequiredArtifactKinds: [\"test.report\"],\n\t\t\t\toptionalArtifactKinds: [\"failure.triage\", \"coverage.summary\"],\n\t\t\t\tallowedTaskClasses: [\"test.execution\", \"ci.triage\"],\n\t\t\t};\n\t\tcase \"browser-qa\":\n\t\t\treturn {\n\t\t\t\trequiredContextGrants: [\n\t\t\t\t\t\"browser:control\",\n\t\t\t\t\t\"artifact:write\",\n\t\t\t\t\t\"runtime:events:read\",\n\t\t\t\t],\n\t\t\t\trequiredArtifactKinds: [\"qa.repro-report\"],\n\t\t\t\toptionalArtifactKinds: [\n\t\t\t\t\t\"screenshot\",\n\t\t\t\t\t\"repro.video\",\n\t\t\t\t\t\"browser.console\",\n\t\t\t\t\t\"network.error\",\n\t\t\t\t],\n\t\t\t\tallowedTaskClasses: [\"product.qa\", \"browser.e2e\", \"ux.repro\"],\n\t\t\t};\n\t\tcase \"repo-explorer\":\n\t\t\treturn {\n\t\t\t\trequiredContextGrants: [\"repo:read\", \"context:index:write\"],\n\t\t\t\trequiredArtifactKinds: [\"repo.map\"],\n\t\t\t\toptionalArtifactKinds: [\"context.index\"],\n\t\t\t\tallowedTaskClasses: [\"repo.inspect\", \"context.gathering\"],\n\t\t\t};\n\t\tcase \"release-shepherd\":\n\t\t\treturn {\n\t\t\t\trequiredContextGrants: [\n\t\t\t\t\t\"repo:read\",\n\t\t\t\t\t\"pull-request:write\",\n\t\t\t\t\t\"deploy:read\",\n\t\t\t\t\t\"artifact:write\",\n\t\t\t\t\t\"runtime:events:read\",\n\t\t\t\t],\n\t\t\t\trequiredArtifactKinds: [\"release.summary\"],\n\t\t\t\toptionalArtifactKinds: [\"ci.summary\", \"deploy.status\"],\n\t\t\t\tallowedTaskClasses: [\"release.follow-through\", \"deployment.smoke\"],\n\t\t\t};\n\t\tdefault:\n\t\t\treturn {\n\t\t\t\trequiredContextGrants: [\"repo:read\"],\n\t\t\t\trequiredArtifactKinds: [\"subagent.summary\"],\n\t\t\t\toptionalArtifactKinds: [\"context.index\"],\n\t\t\t\tallowedTaskClasses: [\"agent.delegation\"],\n\t\t\t};\n\t}\n}\n\nfunction normalizeEndpoint(value: string): string {\n\tconst endpoint = value.trim().replace(/\\/+$/u, \"\");\n\tif (!endpoint) {\n\t\tthrow new Error(\"A2A endpoint URL is required\");\n\t}\n\treturn endpoint;\n}\n\nfunction uniqueStrings(values: readonly string[]): string[] {\n\treturn Array.from(\n\t\tnew Set(values.map((value) => value.trim()).filter(Boolean)),\n\t);\n}\n\nfunction stripUndefinedValues(\n\trecord: Record<string, unknown>,\n): Record<string, unknown> {\n\treturn Object.fromEntries(\n\t\tObject.entries(record).filter(([, value]) => value !== undefined),\n\t);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"a2a-peer-pairing.d.ts","sourceRoot":"","sources":["../../src/platform/a2a-peer-pairing.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"a2a-peer-pairing.d.ts","sourceRoot":"","sources":["../../src/platform/a2a-peer-pairing.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { createHash, timingSafeEqual } from "node:crypto";
2
+ import { isRecord } from "../utils/json.js";
2
3
  import { normalizeA2ABaseUrl, } from "./a2a-client.js";
3
4
  export const A2A_PEER_PAIRING_CODE_PREFIX = "maestro-pair-v1";
4
5
  const PAIRING_CODE_VERSION = 1;
@@ -486,9 +487,6 @@ function stablePeerId(payload) {
486
487
  .slice(0, 16);
487
488
  return `a2a-peer-${hash}`;
488
489
  }
489
- function isRecord(value) {
490
- return typeof value === "object" && value !== null && !Array.isArray(value);
491
- }
492
490
  function errorMessage(error) {
493
491
  return error instanceof Error ? error.message : String(error);
494
492
  }
@@ -1 +1 @@
1
- {"version":3,"file":"a2a-peer-pairing.js","sourceRoot":"","sources":["../../src/platform/a2a-peer-pairing.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash, timingSafeEqual } from \"node:crypto\";\nimport {\n\ttype A2AAgentCard,\n\ttype A2AAgentInterface,\n\tnormalizeA2ABaseUrl,\n} from \"./a2a-client.js\";\n\nexport const A2A_PEER_PAIRING_CODE_PREFIX = \"maestro-pair-v1\";\n\nconst PAIRING_CODE_VERSION = 1;\nconst PAIRING_CODE_CHECKSUM_LENGTH = 16;\nconst MAX_PAIRING_CODE_LENGTH = 8192;\nconst DEFAULT_PAIRING_TTL_MS = 30 * 60 * 1000;\nconst MAX_SKILLS_IN_PAIRING_CODE = 8;\nconst MAX_SKILL_TAGS_IN_PAIRING_CODE = 8;\n\nexport interface A2APeerPairingCapabilities {\n\tstreaming?: boolean;\n\tpushNotifications?: boolean;\n\textendedAgentCard?: boolean;\n}\n\nexport interface A2APeerPairingSkillSummary {\n\tid: string;\n\tname: string;\n\tdescription?: string;\n\ttags?: string[];\n\texamples?: string[];\n\tinputModes?: string[];\n\toutputModes?: string[];\n\trequiredContextGrants?: string[];\n\tapprovalPolicyRef?: string;\n\tmaxAutonomy?: string;\n\trequiredArtifactKinds?: string[];\n\toptionalArtifactKinds?: string[];\n\tallowedTaskClasses?: string[];\n\tdeniedTaskClasses?: string[];\n\tattributes?: Record<string, string>;\n\tmetadata?: Record<string, string | number | boolean>;\n}\n\nexport interface A2APeerPairingProvider {\n\torganization?: string;\n\turl?: string;\n}\n\nexport interface A2APeerPairingRelayHints {\n\thost?: string;\n\tport?: number;\n\ttailscaleName?: string;\n\tpath?: string;\n}\n\nexport interface A2APeerPairingPayload {\n\tversion: 1;\n\tdisplayName: string;\n\tagentCardUrl: string;\n\ttransportUrl: string;\n\tprotocolBinding: string;\n\tprotocolVersion: string;\n\tissuedAt: string;\n\texpiresAt: string;\n\tpeerId?: string;\n\tprovider?: A2APeerPairingProvider;\n\tcapabilities?: A2APeerPairingCapabilities;\n\tskills?: A2APeerPairingSkillSummary[];\n\tkeyFingerprint?: string;\n\trelayHints?: A2APeerPairingRelayHints;\n\tmetadata?: Record<string, string | number | boolean>;\n}\n\nexport interface CreateA2APeerPairingPayloadInput {\n\tdisplayName: string;\n\tagentCardUrl: string;\n\ttransportUrl: string;\n\tprotocolBinding?: string;\n\tprotocolVersion?: string;\n\tissuedAt?: Date | string;\n\texpiresAt?: Date | string;\n\tttlMs?: number;\n\tpeerId?: string;\n\tprovider?: A2APeerPairingProvider;\n\tcapabilities?: A2APeerPairingCapabilities;\n\tskills?: A2APeerPairingSkillSummary[];\n\tkeyFingerprint?: string;\n\trelayHints?: A2APeerPairingRelayHints;\n\tmetadata?: Record<string, string | number | boolean>;\n\tnow?: Date;\n}\n\nexport interface CreateA2APeerPairingPayloadFromAgentCardInput {\n\tagentCard: A2AAgentCard;\n\tagentCardUrl: string;\n\tdisplayName?: string;\n\tissuedAt?: Date | string;\n\texpiresAt?: Date | string;\n\tttlMs?: number;\n\tpeerId?: string;\n\tkeyFingerprint?: string;\n\trelayHints?: A2APeerPairingRelayHints;\n\tmetadata?: Record<string, string | number | boolean>;\n\tnow?: Date;\n}\n\nexport interface DecodeA2APeerPairingCodeOptions {\n\tnow?: Date;\n\tallowExpired?: boolean;\n}\n\nexport interface A2APeerConnection {\n\tpeerId: string;\n\tdisplayName: string;\n\tbaseUrl: string;\n\tagentCardUrl: string;\n\tprotocolBinding: string;\n\tprotocolVersion: string;\n\tcapabilities?: A2APeerPairingCapabilities;\n\tskills?: A2APeerPairingSkillSummary[];\n\tkeyFingerprint?: string;\n\tmetadata?: Record<string, string | number | boolean>;\n}\n\nexport function createA2APeerPairingPayload(\n\tinput: CreateA2APeerPairingPayloadInput,\n): A2APeerPairingPayload {\n\tconst issuedAt = toDate(\n\t\tinput.issuedAt ?? input.now ?? new Date(),\n\t\t\"issuedAt\",\n\t);\n\tconst expiresAt = toDate(\n\t\tinput.expiresAt ??\n\t\t\tnew Date(issuedAt.getTime() + (input.ttlMs ?? DEFAULT_PAIRING_TTL_MS)),\n\t\t\"expiresAt\",\n\t);\n\tconst payload: A2APeerPairingPayload = {\n\t\tversion: PAIRING_CODE_VERSION,\n\t\tdisplayName: requireNonEmptyString(input.displayName, \"displayName\"),\n\t\tagentCardUrl: normalizePairingUrl(input.agentCardUrl, \"agentCardUrl\"),\n\t\ttransportUrl: normalizePairingUrl(input.transportUrl, \"transportUrl\"),\n\t\tprotocolBinding: normalizeProtocolBinding(input.protocolBinding),\n\t\tprotocolVersion: requireNonEmptyString(\n\t\t\tinput.protocolVersion ?? \"1.0\",\n\t\t\t\"protocolVersion\",\n\t\t),\n\t\tissuedAt: issuedAt.toISOString(),\n\t\texpiresAt: expiresAt.toISOString(),\n\t\t...(input.peerId\n\t\t\t? { peerId: requireNonEmptyString(input.peerId, \"peerId\") }\n\t\t\t: {}),\n\t\t...(input.provider ? { provider: normalizeProvider(input.provider) } : {}),\n\t\t...(input.capabilities\n\t\t\t? { capabilities: normalizeCapabilities(input.capabilities) }\n\t\t\t: {}),\n\t\t...(input.skills ? { skills: normalizeSkills(input.skills) } : {}),\n\t\t...(input.keyFingerprint\n\t\t\t? {\n\t\t\t\t\tkeyFingerprint: requireNonEmptyString(\n\t\t\t\t\t\tinput.keyFingerprint,\n\t\t\t\t\t\t\"keyFingerprint\",\n\t\t\t\t\t),\n\t\t\t\t}\n\t\t\t: {}),\n\t\t...(input.relayHints\n\t\t\t? { relayHints: normalizeRelayHints(input.relayHints) }\n\t\t\t: {}),\n\t\t...(input.metadata ? { metadata: normalizeMetadata(input.metadata) } : {}),\n\t};\n\tvalidateA2APeerPairingPayload(payload, { now: input.now });\n\treturn payload;\n}\n\nexport function createA2APeerPairingPayloadFromAgentCard(\n\tinput: CreateA2APeerPairingPayloadFromAgentCardInput,\n): A2APeerPairingPayload {\n\tconst selectedInterface = selectA2AAgentInterface(input.agentCard);\n\treturn createA2APeerPairingPayload({\n\t\tdisplayName: input.displayName ?? input.agentCard.name,\n\t\tagentCardUrl: input.agentCardUrl,\n\t\ttransportUrl: selectedInterface.url,\n\t\tprotocolBinding: selectedInterface.protocolBinding,\n\t\tprotocolVersion: selectedInterface.protocolVersion,\n\t\tissuedAt: input.issuedAt,\n\t\texpiresAt: input.expiresAt,\n\t\tttlMs: input.ttlMs,\n\t\tpeerId: input.peerId,\n\t\tprovider: input.agentCard.provider,\n\t\tcapabilities: input.agentCard.capabilities,\n\t\tskills: normalizeSkills(input.agentCard.skills),\n\t\tkeyFingerprint: input.keyFingerprint,\n\t\trelayHints: input.relayHints,\n\t\tmetadata: input.metadata,\n\t\tnow: input.now,\n\t});\n}\n\nexport function encodeA2APeerPairingCode(\n\tpayload: A2APeerPairingPayload,\n): string {\n\tconst normalized = normalizeDecodedPayload(payload, { allowExpired: true });\n\trejectSecretBearingFields(normalized);\n\tfor (const candidate of pairingCodeSizeCandidates(normalized)) {\n\t\tconst code = encodeNormalizedPairingCode(candidate);\n\t\tif (code.length <= MAX_PAIRING_CODE_LENGTH) {\n\t\t\treturn code;\n\t\t}\n\t}\n\tthrow new Error(\"A2A pairing payload is too large\");\n}\n\nfunction encodeNormalizedPairingCode(payload: A2APeerPairingPayload): string {\n\tconst encoded = Buffer.from(JSON.stringify(payload), \"utf8\").toString(\n\t\t\"base64url\",\n\t);\n\tconst checksum = pairingChecksum(encoded);\n\treturn `${A2A_PEER_PAIRING_CODE_PREFIX}.${encoded}.${checksum}`;\n}\n\nfunction pairingCodeSizeCandidates(\n\tpayload: A2APeerPairingPayload,\n): A2APeerPairingPayload[] {\n\tif (!payload.skills || payload.skills.length === 0) {\n\t\treturn [payload];\n\t}\n\treturn [\n\t\tpayload,\n\t\t{\n\t\t\t...payload,\n\t\t\tskills: payload.skills.map(compactSkillForPairingCode),\n\t\t},\n\t\tomitPairingCodeSkills(payload),\n\t];\n}\n\nfunction compactSkillForPairingCode(\n\tskill: A2APeerPairingSkillSummary,\n): A2APeerPairingSkillSummary {\n\treturn {\n\t\tid: skill.id,\n\t\tname: skill.name,\n\t\t...(skill.tags && skill.tags.length > 0\n\t\t\t? { tags: skill.tags.slice(0, MAX_SKILL_TAGS_IN_PAIRING_CODE) }\n\t\t\t: {}),\n\t};\n}\n\nfunction omitPairingCodeSkills(\n\tpayload: A2APeerPairingPayload,\n): A2APeerPairingPayload {\n\tconst { skills: _skills, ...withoutSkills } = payload;\n\treturn withoutSkills;\n}\n\nexport function decodeA2APeerPairingCode(\n\tcode: string,\n\toptions: DecodeA2APeerPairingCodeOptions = {},\n): A2APeerPairingPayload {\n\tconst compact = code.trim();\n\tif (!compact) {\n\t\tthrow new Error(\"A2A pairing code is required\");\n\t}\n\tif (compact.length > MAX_PAIRING_CODE_LENGTH) {\n\t\tthrow new Error(\"A2A pairing code is too large\");\n\t}\n\tconst parts = compact.split(\".\");\n\tif (\n\t\tparts.length !== 3 ||\n\t\tparts[0] !== A2A_PEER_PAIRING_CODE_PREFIX ||\n\t\t!parts[1] ||\n\t\t!parts[2]\n\t) {\n\t\tthrow new Error(\n\t\t\t`A2A pairing code must use the ${A2A_PEER_PAIRING_CODE_PREFIX} format`,\n\t\t);\n\t}\n\tconst [, encoded, checksum] = parts;\n\tassertPairingChecksum(encoded, checksum);\n\tlet rawPayload: unknown;\n\ttry {\n\t\trawPayload = JSON.parse(Buffer.from(encoded, \"base64url\").toString(\"utf8\"));\n\t} catch (error) {\n\t\tthrow new Error(\n\t\t\t`A2A pairing code payload is not valid JSON: ${errorMessage(error)}`,\n\t\t);\n\t}\n\treturn normalizeDecodedPayload(rawPayload, options);\n}\n\nexport function a2aPeerConnectionFromPairingPayload(\n\tpayload: A2APeerPairingPayload,\n): A2APeerConnection {\n\tvalidateA2APeerPairingPayload(payload, { allowExpired: true });\n\treturn {\n\t\tpeerId: payload.peerId ?? stablePeerId(payload),\n\t\tdisplayName: payload.displayName,\n\t\tbaseUrl: payload.transportUrl.replace(/\\/+$/u, \"\"),\n\t\tagentCardUrl: payload.agentCardUrl,\n\t\tprotocolBinding: payload.protocolBinding,\n\t\tprotocolVersion: payload.protocolVersion,\n\t\t...(payload.capabilities ? { capabilities: payload.capabilities } : {}),\n\t\t...(payload.skills ? { skills: payload.skills } : {}),\n\t\t...(payload.keyFingerprint\n\t\t\t? { keyFingerprint: payload.keyFingerprint }\n\t\t\t: {}),\n\t\t...(payload.metadata ? { metadata: payload.metadata } : {}),\n\t};\n}\n\nexport function selectA2AAgentInterface(\n\tagentCard: A2AAgentCard,\n): A2AAgentInterface {\n\tif (!Array.isArray(agentCard.supportedInterfaces)) {\n\t\tthrow new Error(\"A2A Agent Card must include supportedInterfaces\");\n\t}\n\tconst preferred = agentCard.supportedInterfaces.find(\n\t\t(candidate) =>\n\t\t\tcandidate.protocolBinding.trim().toUpperCase() === \"HTTP+JSON\",\n\t);\n\tif (!preferred) {\n\t\tthrow new Error(\n\t\t\t\"A2A Agent Card does not advertise a supported HTTP+JSON interface\",\n\t\t);\n\t}\n\treturn {\n\t\turl: normalizePairingUrl(preferred.url, \"supportedInterfaces[].url\"),\n\t\tprotocolBinding: normalizeProtocolBinding(preferred.protocolBinding),\n\t\tprotocolVersion: requireNonEmptyString(\n\t\t\tpreferred.protocolVersion,\n\t\t\t\"supportedInterfaces[].protocolVersion\",\n\t\t),\n\t\t...(preferred.tenant ? { tenant: preferred.tenant } : {}),\n\t};\n}\n\nexport function resolveA2AAgentCardUrl(input: string): string {\n\tconst baseUrl = normalizeA2ABaseUrl(\n\t\tnormalizePairingUrl(input, \"agentCardUrl\"),\n\t);\n\tconst parsed = new URL(baseUrl);\n\tparsed.pathname = `${parsed.pathname.replace(/\\/+$/u, \"\")}/.well-known/agent-card.json`;\n\tparsed.search = \"\";\n\tparsed.hash = \"\";\n\treturn normalizePairingUrl(parsed.toString(), \"agentCardUrl\");\n}\n\nfunction normalizeDecodedPayload(\n\tinput: unknown,\n\toptions: DecodeA2APeerPairingCodeOptions = {},\n): A2APeerPairingPayload {\n\tif (!isRecord(input)) {\n\t\tthrow new Error(\"A2A pairing code payload must be an object\");\n\t}\n\tif (input.version !== PAIRING_CODE_VERSION) {\n\t\tthrow new Error(\n\t\t\t`Unsupported A2A pairing code version: ${String(input.version)}`,\n\t\t);\n\t}\n\tconst payload: A2APeerPairingPayload = {\n\t\tversion: PAIRING_CODE_VERSION,\n\t\tdisplayName: requireNonEmptyString(input.displayName, \"displayName\"),\n\t\tagentCardUrl: normalizePairingUrl(input.agentCardUrl, \"agentCardUrl\"),\n\t\ttransportUrl: normalizePairingUrl(input.transportUrl, \"transportUrl\"),\n\t\tprotocolBinding: normalizeProtocolBinding(input.protocolBinding),\n\t\tprotocolVersion: requireNonEmptyString(\n\t\t\tinput.protocolVersion,\n\t\t\t\"protocolVersion\",\n\t\t),\n\t\tissuedAt: toDate(input.issuedAt, \"issuedAt\").toISOString(),\n\t\texpiresAt: toDate(input.expiresAt, \"expiresAt\").toISOString(),\n\t\t...(typeof input.peerId === \"string\"\n\t\t\t? { peerId: requireNonEmptyString(input.peerId, \"peerId\") }\n\t\t\t: {}),\n\t\t...(isRecord(input.provider)\n\t\t\t? { provider: normalizeProvider(input.provider) }\n\t\t\t: {}),\n\t\t...(isRecord(input.capabilities)\n\t\t\t? { capabilities: normalizeCapabilities(input.capabilities) }\n\t\t\t: {}),\n\t\t...(Array.isArray(input.skills)\n\t\t\t? { skills: normalizeSkills(input.skills) }\n\t\t\t: {}),\n\t\t...(typeof input.keyFingerprint === \"string\"\n\t\t\t? {\n\t\t\t\t\tkeyFingerprint: requireNonEmptyString(\n\t\t\t\t\t\tinput.keyFingerprint,\n\t\t\t\t\t\t\"keyFingerprint\",\n\t\t\t\t\t),\n\t\t\t\t}\n\t\t\t: {}),\n\t\t...(isRecord(input.relayHints)\n\t\t\t? { relayHints: normalizeRelayHints(input.relayHints) }\n\t\t\t: {}),\n\t\t...(isRecord(input.metadata)\n\t\t\t? { metadata: normalizeMetadata(input.metadata) }\n\t\t\t: {}),\n\t};\n\tvalidateA2APeerPairingPayload(payload, options);\n\treturn payload;\n}\n\nfunction validateA2APeerPairingPayload(\n\tpayload: A2APeerPairingPayload,\n\toptions: DecodeA2APeerPairingCodeOptions = {},\n): void {\n\trejectSecretBearingFields(payload);\n\tconst issuedAt = toDate(payload.issuedAt, \"issuedAt\");\n\tconst expiresAt = toDate(payload.expiresAt, \"expiresAt\");\n\tif (expiresAt.getTime() <= issuedAt.getTime()) {\n\t\tthrow new Error(\"A2A pairing code expiresAt must be after issuedAt\");\n\t}\n\tif (!options.allowExpired) {\n\t\tconst now = options.now ?? new Date();\n\t\tif (expiresAt.getTime() <= now.getTime()) {\n\t\t\tthrow new Error(\"A2A pairing code has expired\");\n\t\t}\n\t}\n}\n\nfunction normalizePairingUrl(input: unknown, label: string): string {\n\tconst raw = requireNonEmptyString(input, label);\n\tlet parsed: URL;\n\ttry {\n\t\tparsed = new URL(raw);\n\t} catch (error) {\n\t\tthrow new Error(`${label} must be an absolute URL: ${errorMessage(error)}`);\n\t}\n\tparsed.username = \"\";\n\tparsed.password = \"\";\n\tparsed.search = \"\";\n\tparsed.hash = \"\";\n\tif (parsed.protocol === \"https:\") {\n\t\treturn parsed.toString();\n\t}\n\tif (parsed.protocol !== \"http:\") {\n\t\tthrow new Error(`${label} must use http or https`);\n\t}\n\tif (!isLocalPairingHost(parsed.hostname)) {\n\t\tthrow new Error(\n\t\t\t`${label} must use https unless it targets localhost, private LAN, or Tailscale`,\n\t\t);\n\t}\n\treturn parsed.toString();\n}\n\nfunction isLocalPairingHost(hostname: string): boolean {\n\tconst host = hostname.toLowerCase().replace(/^\\[/u, \"\").replace(/\\]$/u, \"\");\n\tif (\n\t\thost === \"localhost\" ||\n\t\thost === \"::1\" ||\n\t\thost.endsWith(\".local\") ||\n\t\thost.endsWith(\".ts.net\") ||\n\t\t!host.includes(\".\")\n\t) {\n\t\treturn true;\n\t}\n\tconst ipv4Parts = host.split(\".\").map((part) => Number(part));\n\tif (\n\t\tipv4Parts.length === 4 &&\n\t\tipv4Parts.every((part) => Number.isInteger(part))\n\t) {\n\t\tconst first = ipv4Parts[0] ?? -1;\n\t\tconst second = ipv4Parts[1] ?? -1;\n\t\treturn (\n\t\t\tfirst === 10 ||\n\t\t\tfirst === 127 ||\n\t\t\t(first === 192 && second === 168) ||\n\t\t\t(first === 172 && second >= 16 && second <= 31) ||\n\t\t\t(first === 100 && second >= 64 && second <= 127)\n\t\t);\n\t}\n\treturn (\n\t\thost.includes(\":\") &&\n\t\t(/^f[cd][0-9a-f]*:/u.test(host) || host.startsWith(\"fe80:\"))\n\t);\n}\n\nfunction normalizeProtocolBinding(input: unknown): string {\n\treturn requireNonEmptyString(input ?? \"HTTP+JSON\", \"protocolBinding\");\n}\n\nfunction normalizeProvider(\n\tinput: A2APeerPairingProvider | Record<string, unknown>,\n): A2APeerPairingProvider {\n\treturn {\n\t\t...(typeof input.organization === \"string\" && input.organization.trim()\n\t\t\t? { organization: input.organization.trim() }\n\t\t\t: {}),\n\t\t...(typeof input.url === \"string\" && input.url.trim()\n\t\t\t? { url: normalizePairingUrl(input.url, \"provider.url\") }\n\t\t\t: {}),\n\t};\n}\n\nfunction normalizeCapabilities(\n\tinput: A2APeerPairingCapabilities | Record<string, unknown>,\n): A2APeerPairingCapabilities {\n\treturn {\n\t\t...(typeof input.streaming === \"boolean\"\n\t\t\t? { streaming: input.streaming }\n\t\t\t: {}),\n\t\t...(typeof input.pushNotifications === \"boolean\"\n\t\t\t? { pushNotifications: input.pushNotifications }\n\t\t\t: {}),\n\t\t...(typeof input.extendedAgentCard === \"boolean\"\n\t\t\t? { extendedAgentCard: input.extendedAgentCard }\n\t\t\t: {}),\n\t};\n}\n\nfunction normalizeSkills(\n\tinput: readonly unknown[],\n): A2APeerPairingSkillSummary[] {\n\treturn input.slice(0, MAX_SKILLS_IN_PAIRING_CODE).map((skill, index) => {\n\t\tif (!isRecord(skill)) {\n\t\t\tthrow new Error(`skills[${index}] must be an object`);\n\t\t}\n\t\treturn {\n\t\t\tid: requireNonEmptyString(skill.id, `skills[${index}].id`),\n\t\t\tname: requireNonEmptyString(skill.name, `skills[${index}].name`),\n\t\t\t...copyOptionalString(skill, \"description\"),\n\t\t\t...copyStringList(skill, \"tags\", MAX_SKILL_TAGS_IN_PAIRING_CODE),\n\t\t\t...copyStringList(skill, \"examples\"),\n\t\t\t...copyStringList(skill, \"inputModes\"),\n\t\t\t...copyStringList(skill, \"outputModes\"),\n\t\t\t...copyStringList(skill, \"requiredContextGrants\"),\n\t\t\t...copyOptionalString(skill, \"approvalPolicyRef\"),\n\t\t\t...copyOptionalString(skill, \"maxAutonomy\"),\n\t\t\t...copyStringList(skill, \"requiredArtifactKinds\"),\n\t\t\t...copyStringList(skill, \"optionalArtifactKinds\"),\n\t\t\t...copyStringList(skill, \"allowedTaskClasses\"),\n\t\t\t...copyStringList(skill, \"deniedTaskClasses\"),\n\t\t\t...copyStringRecord(skill, \"attributes\"),\n\t\t\t...copyPrimitiveRecord(skill, \"metadata\"),\n\t\t};\n\t});\n}\n\nfunction copyOptionalString(\n\tinput: Record<string, unknown>,\n\tkey: string,\n): Record<string, string> {\n\tconst value = input[key];\n\treturn typeof value === \"string\" && value.trim()\n\t\t? { [key]: value.trim() }\n\t\t: {};\n}\n\nfunction copyStringList(\n\tinput: Record<string, unknown>,\n\tkey: string,\n\tlimit = Number.POSITIVE_INFINITY,\n): Record<string, string[]> {\n\tconst value = input[key];\n\tif (!Array.isArray(value)) {\n\t\treturn {};\n\t}\n\tconst strings = value\n\t\t.filter((item): item is string => typeof item === \"string\")\n\t\t.map((item) => item.trim())\n\t\t.filter(Boolean)\n\t\t.slice(0, limit);\n\treturn strings.length > 0 ? { [key]: strings } : {};\n}\n\nfunction copyStringRecord(\n\tinput: Record<string, unknown>,\n\tkey: string,\n): Record<string, Record<string, string>> {\n\tconst value = input[key];\n\tif (!isRecord(value)) {\n\t\treturn {};\n\t}\n\tconst entries = Object.entries(value)\n\t\t.map(([entryKey, entryValue]) => [\n\t\t\tentryKey.trim(),\n\t\t\ttypeof entryValue === \"string\" ? entryValue.trim() : \"\",\n\t\t])\n\t\t.filter(\n\t\t\t(entry): entry is [string, string] =>\n\t\t\t\tBoolean(entry[0]) && Boolean(entry[1]),\n\t\t);\n\treturn entries.length > 0 ? { [key]: Object.fromEntries(entries) } : {};\n}\n\nfunction copyPrimitiveRecord(\n\tinput: Record<string, unknown>,\n\tkey: string,\n): Record<string, Record<string, string | number | boolean>> {\n\tconst value = input[key];\n\tif (!isRecord(value)) {\n\t\treturn {};\n\t}\n\tconst output: Record<string, string | number | boolean> = {};\n\tfor (const [entryKey, entryValue] of Object.entries(value)) {\n\t\tconst normalizedKey = entryKey.trim();\n\t\tif (!normalizedKey) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (\n\t\t\ttypeof entryValue === \"string\" ||\n\t\t\ttypeof entryValue === \"number\" ||\n\t\t\ttypeof entryValue === \"boolean\"\n\t\t) {\n\t\t\toutput[normalizedKey] =\n\t\t\t\ttypeof entryValue === \"string\" ? entryValue.trim() : entryValue;\n\t\t}\n\t}\n\treturn Object.keys(output).length > 0 ? { [key]: output } : {};\n}\n\nfunction normalizeRelayHints(\n\tinput: A2APeerPairingRelayHints | Record<string, unknown>,\n): A2APeerPairingRelayHints {\n\treturn {\n\t\t...(typeof input.host === \"string\" && input.host.trim()\n\t\t\t? { host: input.host.trim() }\n\t\t\t: {}),\n\t\t...(typeof input.port === \"number\" &&\n\t\tNumber.isInteger(input.port) &&\n\t\tinput.port > 0 &&\n\t\tinput.port <= 65535\n\t\t\t? { port: input.port }\n\t\t\t: {}),\n\t\t...(typeof input.tailscaleName === \"string\" && input.tailscaleName.trim()\n\t\t\t? { tailscaleName: input.tailscaleName.trim() }\n\t\t\t: {}),\n\t\t...(typeof input.path === \"string\" && input.path.trim()\n\t\t\t? { path: input.path.trim() }\n\t\t\t: {}),\n\t};\n}\n\nfunction normalizeMetadata(\n\tinput: Record<string, unknown>,\n): Record<string, string | number | boolean> {\n\tconst output: Record<string, string | number | boolean> = {};\n\tfor (const [key, value] of Object.entries(input)) {\n\t\tif (!key.trim()) {\n\t\t\tthrow new Error(\"A2A pairing metadata keys must be non-empty\");\n\t\t}\n\t\tif (\n\t\t\ttypeof value === \"string\" ||\n\t\t\ttypeof value === \"number\" ||\n\t\t\ttypeof value === \"boolean\"\n\t\t) {\n\t\t\toutput[key.trim()] = value;\n\t\t}\n\t}\n\treturn output;\n}\n\nfunction rejectSecretBearingFields(value: unknown, path = \"$\"): void {\n\tif (Array.isArray(value)) {\n\t\tfor (const [index, item] of value.entries()) {\n\t\t\trejectSecretBearingFields(item, `${path}[${index}]`);\n\t\t}\n\t\treturn;\n\t}\n\tif (!isRecord(value)) {\n\t\treturn;\n\t}\n\tfor (const [key, child] of Object.entries(value)) {\n\t\tif (isSecretLikeKey(key)) {\n\t\t\tthrow new Error(\n\t\t\t\t`A2A pairing codes must not include secret field ${path}.${key}`,\n\t\t\t);\n\t\t}\n\t\trejectSecretBearingFields(child, `${path}.${key}`);\n\t}\n}\n\nfunction isSecretLikeKey(key: string): boolean {\n\t// NFKC-normalize first so that fullwidth/homoglyph variants (e.g.\n\t// Cyrillic \"о\", fullwidth \"token\") are folded to their ASCII\n\t// equivalents before comparison, preventing denylist bypass (#2541).\n\tconst normalized = key\n\t\t.normalize(\"NFKC\")\n\t\t.toLowerCase()\n\t\t.replace(/[-_\\s]/gu, \"\");\n\treturn (\n\t\tnormalized === \"authorization\" ||\n\t\tnormalized === \"token\" ||\n\t\tnormalized.endsWith(\"token\") ||\n\t\tnormalized === \"secret\" ||\n\t\tnormalized.endsWith(\"secret\") ||\n\t\tnormalized === \"password\" ||\n\t\tnormalized.endsWith(\"password\") ||\n\t\tnormalized === \"apikey\" ||\n\t\tnormalized.endsWith(\"apikey\") ||\n\t\tnormalized === \"credentials\" ||\n\t\tnormalized.endsWith(\"credentials\") ||\n\t\tnormalized === \"bearer\"\n\t);\n}\n\nfunction requireNonEmptyString(input: unknown, label: string): string {\n\tif (typeof input !== \"string\" || !input.trim()) {\n\t\tthrow new Error(`${label} is required`);\n\t}\n\treturn input.trim();\n}\n\nfunction toDate(input: Date | string | unknown, label: string): Date {\n\tconst date =\n\t\tinput instanceof Date\n\t\t\t? input\n\t\t\t: new Date(requireNonEmptyString(input, label));\n\tif (Number.isNaN(date.getTime())) {\n\t\tthrow new Error(`${label} must be an ISO timestamp`);\n\t}\n\treturn date;\n}\n\nfunction pairingChecksum(encoded: string): string {\n\treturn createHash(\"sha256\")\n\t\t.update(`${A2A_PEER_PAIRING_CODE_PREFIX}.${encoded}`)\n\t\t.digest(\"hex\")\n\t\t.slice(0, PAIRING_CODE_CHECKSUM_LENGTH);\n}\n\nfunction assertPairingChecksum(encoded: string, checksum: string): void {\n\tconst expected = pairingChecksum(encoded);\n\tif (checksum.length !== expected.length) {\n\t\tthrow new Error(\"A2A pairing code checksum does not match\");\n\t}\n\tconst expectedBytes = Buffer.from(expected, \"utf8\");\n\tconst actualBytes = Buffer.from(checksum, \"utf8\");\n\tif (!timingSafeEqual(expectedBytes, actualBytes)) {\n\t\tthrow new Error(\"A2A pairing code checksum does not match\");\n\t}\n}\n\nfunction stablePeerId(payload: A2APeerPairingPayload): string {\n\tconst hash = createHash(\"sha256\")\n\t\t.update(\n\t\t\t`${payload.displayName}\\n${payload.agentCardUrl}\\n${payload.transportUrl}`,\n\t\t)\n\t\t.digest(\"base64url\")\n\t\t.slice(0, 16);\n\treturn `a2a-peer-${hash}`;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction errorMessage(error: unknown): string {\n\treturn error instanceof Error ? error.message : String(error);\n}\n"]}
1
+ {"version":3,"file":"a2a-peer-pairing.js","sourceRoot":"","sources":["../../src/platform/a2a-peer-pairing.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash, timingSafeEqual } from \"node:crypto\";\nimport { isRecord } from \"../utils/json.js\";\nimport {\n\ttype A2AAgentCard,\n\ttype A2AAgentInterface,\n\tnormalizeA2ABaseUrl,\n} from \"./a2a-client.js\";\n\nexport const A2A_PEER_PAIRING_CODE_PREFIX = \"maestro-pair-v1\";\n\nconst PAIRING_CODE_VERSION = 1;\nconst PAIRING_CODE_CHECKSUM_LENGTH = 16;\nconst MAX_PAIRING_CODE_LENGTH = 8192;\nconst DEFAULT_PAIRING_TTL_MS = 30 * 60 * 1000;\nconst MAX_SKILLS_IN_PAIRING_CODE = 8;\nconst MAX_SKILL_TAGS_IN_PAIRING_CODE = 8;\n\nexport interface A2APeerPairingCapabilities {\n\tstreaming?: boolean;\n\tpushNotifications?: boolean;\n\textendedAgentCard?: boolean;\n}\n\nexport interface A2APeerPairingSkillSummary {\n\tid: string;\n\tname: string;\n\tdescription?: string;\n\ttags?: string[];\n\texamples?: string[];\n\tinputModes?: string[];\n\toutputModes?: string[];\n\trequiredContextGrants?: string[];\n\tapprovalPolicyRef?: string;\n\tmaxAutonomy?: string;\n\trequiredArtifactKinds?: string[];\n\toptionalArtifactKinds?: string[];\n\tallowedTaskClasses?: string[];\n\tdeniedTaskClasses?: string[];\n\tattributes?: Record<string, string>;\n\tmetadata?: Record<string, string | number | boolean>;\n}\n\nexport interface A2APeerPairingProvider {\n\torganization?: string;\n\turl?: string;\n}\n\nexport interface A2APeerPairingRelayHints {\n\thost?: string;\n\tport?: number;\n\ttailscaleName?: string;\n\tpath?: string;\n}\n\nexport interface A2APeerPairingPayload {\n\tversion: 1;\n\tdisplayName: string;\n\tagentCardUrl: string;\n\ttransportUrl: string;\n\tprotocolBinding: string;\n\tprotocolVersion: string;\n\tissuedAt: string;\n\texpiresAt: string;\n\tpeerId?: string;\n\tprovider?: A2APeerPairingProvider;\n\tcapabilities?: A2APeerPairingCapabilities;\n\tskills?: A2APeerPairingSkillSummary[];\n\tkeyFingerprint?: string;\n\trelayHints?: A2APeerPairingRelayHints;\n\tmetadata?: Record<string, string | number | boolean>;\n}\n\nexport interface CreateA2APeerPairingPayloadInput {\n\tdisplayName: string;\n\tagentCardUrl: string;\n\ttransportUrl: string;\n\tprotocolBinding?: string;\n\tprotocolVersion?: string;\n\tissuedAt?: Date | string;\n\texpiresAt?: Date | string;\n\tttlMs?: number;\n\tpeerId?: string;\n\tprovider?: A2APeerPairingProvider;\n\tcapabilities?: A2APeerPairingCapabilities;\n\tskills?: A2APeerPairingSkillSummary[];\n\tkeyFingerprint?: string;\n\trelayHints?: A2APeerPairingRelayHints;\n\tmetadata?: Record<string, string | number | boolean>;\n\tnow?: Date;\n}\n\nexport interface CreateA2APeerPairingPayloadFromAgentCardInput {\n\tagentCard: A2AAgentCard;\n\tagentCardUrl: string;\n\tdisplayName?: string;\n\tissuedAt?: Date | string;\n\texpiresAt?: Date | string;\n\tttlMs?: number;\n\tpeerId?: string;\n\tkeyFingerprint?: string;\n\trelayHints?: A2APeerPairingRelayHints;\n\tmetadata?: Record<string, string | number | boolean>;\n\tnow?: Date;\n}\n\nexport interface DecodeA2APeerPairingCodeOptions {\n\tnow?: Date;\n\tallowExpired?: boolean;\n}\n\nexport interface A2APeerConnection {\n\tpeerId: string;\n\tdisplayName: string;\n\tbaseUrl: string;\n\tagentCardUrl: string;\n\tprotocolBinding: string;\n\tprotocolVersion: string;\n\tcapabilities?: A2APeerPairingCapabilities;\n\tskills?: A2APeerPairingSkillSummary[];\n\tkeyFingerprint?: string;\n\tmetadata?: Record<string, string | number | boolean>;\n}\n\nexport function createA2APeerPairingPayload(\n\tinput: CreateA2APeerPairingPayloadInput,\n): A2APeerPairingPayload {\n\tconst issuedAt = toDate(\n\t\tinput.issuedAt ?? input.now ?? new Date(),\n\t\t\"issuedAt\",\n\t);\n\tconst expiresAt = toDate(\n\t\tinput.expiresAt ??\n\t\t\tnew Date(issuedAt.getTime() + (input.ttlMs ?? DEFAULT_PAIRING_TTL_MS)),\n\t\t\"expiresAt\",\n\t);\n\tconst payload: A2APeerPairingPayload = {\n\t\tversion: PAIRING_CODE_VERSION,\n\t\tdisplayName: requireNonEmptyString(input.displayName, \"displayName\"),\n\t\tagentCardUrl: normalizePairingUrl(input.agentCardUrl, \"agentCardUrl\"),\n\t\ttransportUrl: normalizePairingUrl(input.transportUrl, \"transportUrl\"),\n\t\tprotocolBinding: normalizeProtocolBinding(input.protocolBinding),\n\t\tprotocolVersion: requireNonEmptyString(\n\t\t\tinput.protocolVersion ?? \"1.0\",\n\t\t\t\"protocolVersion\",\n\t\t),\n\t\tissuedAt: issuedAt.toISOString(),\n\t\texpiresAt: expiresAt.toISOString(),\n\t\t...(input.peerId\n\t\t\t? { peerId: requireNonEmptyString(input.peerId, \"peerId\") }\n\t\t\t: {}),\n\t\t...(input.provider ? { provider: normalizeProvider(input.provider) } : {}),\n\t\t...(input.capabilities\n\t\t\t? { capabilities: normalizeCapabilities(input.capabilities) }\n\t\t\t: {}),\n\t\t...(input.skills ? { skills: normalizeSkills(input.skills) } : {}),\n\t\t...(input.keyFingerprint\n\t\t\t? {\n\t\t\t\t\tkeyFingerprint: requireNonEmptyString(\n\t\t\t\t\t\tinput.keyFingerprint,\n\t\t\t\t\t\t\"keyFingerprint\",\n\t\t\t\t\t),\n\t\t\t\t}\n\t\t\t: {}),\n\t\t...(input.relayHints\n\t\t\t? { relayHints: normalizeRelayHints(input.relayHints) }\n\t\t\t: {}),\n\t\t...(input.metadata ? { metadata: normalizeMetadata(input.metadata) } : {}),\n\t};\n\tvalidateA2APeerPairingPayload(payload, { now: input.now });\n\treturn payload;\n}\n\nexport function createA2APeerPairingPayloadFromAgentCard(\n\tinput: CreateA2APeerPairingPayloadFromAgentCardInput,\n): A2APeerPairingPayload {\n\tconst selectedInterface = selectA2AAgentInterface(input.agentCard);\n\treturn createA2APeerPairingPayload({\n\t\tdisplayName: input.displayName ?? input.agentCard.name,\n\t\tagentCardUrl: input.agentCardUrl,\n\t\ttransportUrl: selectedInterface.url,\n\t\tprotocolBinding: selectedInterface.protocolBinding,\n\t\tprotocolVersion: selectedInterface.protocolVersion,\n\t\tissuedAt: input.issuedAt,\n\t\texpiresAt: input.expiresAt,\n\t\tttlMs: input.ttlMs,\n\t\tpeerId: input.peerId,\n\t\tprovider: input.agentCard.provider,\n\t\tcapabilities: input.agentCard.capabilities,\n\t\tskills: normalizeSkills(input.agentCard.skills),\n\t\tkeyFingerprint: input.keyFingerprint,\n\t\trelayHints: input.relayHints,\n\t\tmetadata: input.metadata,\n\t\tnow: input.now,\n\t});\n}\n\nexport function encodeA2APeerPairingCode(\n\tpayload: A2APeerPairingPayload,\n): string {\n\tconst normalized = normalizeDecodedPayload(payload, { allowExpired: true });\n\trejectSecretBearingFields(normalized);\n\tfor (const candidate of pairingCodeSizeCandidates(normalized)) {\n\t\tconst code = encodeNormalizedPairingCode(candidate);\n\t\tif (code.length <= MAX_PAIRING_CODE_LENGTH) {\n\t\t\treturn code;\n\t\t}\n\t}\n\tthrow new Error(\"A2A pairing payload is too large\");\n}\n\nfunction encodeNormalizedPairingCode(payload: A2APeerPairingPayload): string {\n\tconst encoded = Buffer.from(JSON.stringify(payload), \"utf8\").toString(\n\t\t\"base64url\",\n\t);\n\tconst checksum = pairingChecksum(encoded);\n\treturn `${A2A_PEER_PAIRING_CODE_PREFIX}.${encoded}.${checksum}`;\n}\n\nfunction pairingCodeSizeCandidates(\n\tpayload: A2APeerPairingPayload,\n): A2APeerPairingPayload[] {\n\tif (!payload.skills || payload.skills.length === 0) {\n\t\treturn [payload];\n\t}\n\treturn [\n\t\tpayload,\n\t\t{\n\t\t\t...payload,\n\t\t\tskills: payload.skills.map(compactSkillForPairingCode),\n\t\t},\n\t\tomitPairingCodeSkills(payload),\n\t];\n}\n\nfunction compactSkillForPairingCode(\n\tskill: A2APeerPairingSkillSummary,\n): A2APeerPairingSkillSummary {\n\treturn {\n\t\tid: skill.id,\n\t\tname: skill.name,\n\t\t...(skill.tags && skill.tags.length > 0\n\t\t\t? { tags: skill.tags.slice(0, MAX_SKILL_TAGS_IN_PAIRING_CODE) }\n\t\t\t: {}),\n\t};\n}\n\nfunction omitPairingCodeSkills(\n\tpayload: A2APeerPairingPayload,\n): A2APeerPairingPayload {\n\tconst { skills: _skills, ...withoutSkills } = payload;\n\treturn withoutSkills;\n}\n\nexport function decodeA2APeerPairingCode(\n\tcode: string,\n\toptions: DecodeA2APeerPairingCodeOptions = {},\n): A2APeerPairingPayload {\n\tconst compact = code.trim();\n\tif (!compact) {\n\t\tthrow new Error(\"A2A pairing code is required\");\n\t}\n\tif (compact.length > MAX_PAIRING_CODE_LENGTH) {\n\t\tthrow new Error(\"A2A pairing code is too large\");\n\t}\n\tconst parts = compact.split(\".\");\n\tif (\n\t\tparts.length !== 3 ||\n\t\tparts[0] !== A2A_PEER_PAIRING_CODE_PREFIX ||\n\t\t!parts[1] ||\n\t\t!parts[2]\n\t) {\n\t\tthrow new Error(\n\t\t\t`A2A pairing code must use the ${A2A_PEER_PAIRING_CODE_PREFIX} format`,\n\t\t);\n\t}\n\tconst [, encoded, checksum] = parts;\n\tassertPairingChecksum(encoded, checksum);\n\tlet rawPayload: unknown;\n\ttry {\n\t\trawPayload = JSON.parse(Buffer.from(encoded, \"base64url\").toString(\"utf8\"));\n\t} catch (error) {\n\t\tthrow new Error(\n\t\t\t`A2A pairing code payload is not valid JSON: ${errorMessage(error)}`,\n\t\t);\n\t}\n\treturn normalizeDecodedPayload(rawPayload, options);\n}\n\nexport function a2aPeerConnectionFromPairingPayload(\n\tpayload: A2APeerPairingPayload,\n): A2APeerConnection {\n\tvalidateA2APeerPairingPayload(payload, { allowExpired: true });\n\treturn {\n\t\tpeerId: payload.peerId ?? stablePeerId(payload),\n\t\tdisplayName: payload.displayName,\n\t\tbaseUrl: payload.transportUrl.replace(/\\/+$/u, \"\"),\n\t\tagentCardUrl: payload.agentCardUrl,\n\t\tprotocolBinding: payload.protocolBinding,\n\t\tprotocolVersion: payload.protocolVersion,\n\t\t...(payload.capabilities ? { capabilities: payload.capabilities } : {}),\n\t\t...(payload.skills ? { skills: payload.skills } : {}),\n\t\t...(payload.keyFingerprint\n\t\t\t? { keyFingerprint: payload.keyFingerprint }\n\t\t\t: {}),\n\t\t...(payload.metadata ? { metadata: payload.metadata } : {}),\n\t};\n}\n\nexport function selectA2AAgentInterface(\n\tagentCard: A2AAgentCard,\n): A2AAgentInterface {\n\tif (!Array.isArray(agentCard.supportedInterfaces)) {\n\t\tthrow new Error(\"A2A Agent Card must include supportedInterfaces\");\n\t}\n\tconst preferred = agentCard.supportedInterfaces.find(\n\t\t(candidate) =>\n\t\t\tcandidate.protocolBinding.trim().toUpperCase() === \"HTTP+JSON\",\n\t);\n\tif (!preferred) {\n\t\tthrow new Error(\n\t\t\t\"A2A Agent Card does not advertise a supported HTTP+JSON interface\",\n\t\t);\n\t}\n\treturn {\n\t\turl: normalizePairingUrl(preferred.url, \"supportedInterfaces[].url\"),\n\t\tprotocolBinding: normalizeProtocolBinding(preferred.protocolBinding),\n\t\tprotocolVersion: requireNonEmptyString(\n\t\t\tpreferred.protocolVersion,\n\t\t\t\"supportedInterfaces[].protocolVersion\",\n\t\t),\n\t\t...(preferred.tenant ? { tenant: preferred.tenant } : {}),\n\t};\n}\n\nexport function resolveA2AAgentCardUrl(input: string): string {\n\tconst baseUrl = normalizeA2ABaseUrl(\n\t\tnormalizePairingUrl(input, \"agentCardUrl\"),\n\t);\n\tconst parsed = new URL(baseUrl);\n\tparsed.pathname = `${parsed.pathname.replace(/\\/+$/u, \"\")}/.well-known/agent-card.json`;\n\tparsed.search = \"\";\n\tparsed.hash = \"\";\n\treturn normalizePairingUrl(parsed.toString(), \"agentCardUrl\");\n}\n\nfunction normalizeDecodedPayload(\n\tinput: unknown,\n\toptions: DecodeA2APeerPairingCodeOptions = {},\n): A2APeerPairingPayload {\n\tif (!isRecord(input)) {\n\t\tthrow new Error(\"A2A pairing code payload must be an object\");\n\t}\n\tif (input.version !== PAIRING_CODE_VERSION) {\n\t\tthrow new Error(\n\t\t\t`Unsupported A2A pairing code version: ${String(input.version)}`,\n\t\t);\n\t}\n\tconst payload: A2APeerPairingPayload = {\n\t\tversion: PAIRING_CODE_VERSION,\n\t\tdisplayName: requireNonEmptyString(input.displayName, \"displayName\"),\n\t\tagentCardUrl: normalizePairingUrl(input.agentCardUrl, \"agentCardUrl\"),\n\t\ttransportUrl: normalizePairingUrl(input.transportUrl, \"transportUrl\"),\n\t\tprotocolBinding: normalizeProtocolBinding(input.protocolBinding),\n\t\tprotocolVersion: requireNonEmptyString(\n\t\t\tinput.protocolVersion,\n\t\t\t\"protocolVersion\",\n\t\t),\n\t\tissuedAt: toDate(input.issuedAt, \"issuedAt\").toISOString(),\n\t\texpiresAt: toDate(input.expiresAt, \"expiresAt\").toISOString(),\n\t\t...(typeof input.peerId === \"string\"\n\t\t\t? { peerId: requireNonEmptyString(input.peerId, \"peerId\") }\n\t\t\t: {}),\n\t\t...(isRecord(input.provider)\n\t\t\t? { provider: normalizeProvider(input.provider) }\n\t\t\t: {}),\n\t\t...(isRecord(input.capabilities)\n\t\t\t? { capabilities: normalizeCapabilities(input.capabilities) }\n\t\t\t: {}),\n\t\t...(Array.isArray(input.skills)\n\t\t\t? { skills: normalizeSkills(input.skills) }\n\t\t\t: {}),\n\t\t...(typeof input.keyFingerprint === \"string\"\n\t\t\t? {\n\t\t\t\t\tkeyFingerprint: requireNonEmptyString(\n\t\t\t\t\t\tinput.keyFingerprint,\n\t\t\t\t\t\t\"keyFingerprint\",\n\t\t\t\t\t),\n\t\t\t\t}\n\t\t\t: {}),\n\t\t...(isRecord(input.relayHints)\n\t\t\t? { relayHints: normalizeRelayHints(input.relayHints) }\n\t\t\t: {}),\n\t\t...(isRecord(input.metadata)\n\t\t\t? { metadata: normalizeMetadata(input.metadata) }\n\t\t\t: {}),\n\t};\n\tvalidateA2APeerPairingPayload(payload, options);\n\treturn payload;\n}\n\nfunction validateA2APeerPairingPayload(\n\tpayload: A2APeerPairingPayload,\n\toptions: DecodeA2APeerPairingCodeOptions = {},\n): void {\n\trejectSecretBearingFields(payload);\n\tconst issuedAt = toDate(payload.issuedAt, \"issuedAt\");\n\tconst expiresAt = toDate(payload.expiresAt, \"expiresAt\");\n\tif (expiresAt.getTime() <= issuedAt.getTime()) {\n\t\tthrow new Error(\"A2A pairing code expiresAt must be after issuedAt\");\n\t}\n\tif (!options.allowExpired) {\n\t\tconst now = options.now ?? new Date();\n\t\tif (expiresAt.getTime() <= now.getTime()) {\n\t\t\tthrow new Error(\"A2A pairing code has expired\");\n\t\t}\n\t}\n}\n\nfunction normalizePairingUrl(input: unknown, label: string): string {\n\tconst raw = requireNonEmptyString(input, label);\n\tlet parsed: URL;\n\ttry {\n\t\tparsed = new URL(raw);\n\t} catch (error) {\n\t\tthrow new Error(`${label} must be an absolute URL: ${errorMessage(error)}`);\n\t}\n\tparsed.username = \"\";\n\tparsed.password = \"\";\n\tparsed.search = \"\";\n\tparsed.hash = \"\";\n\tif (parsed.protocol === \"https:\") {\n\t\treturn parsed.toString();\n\t}\n\tif (parsed.protocol !== \"http:\") {\n\t\tthrow new Error(`${label} must use http or https`);\n\t}\n\tif (!isLocalPairingHost(parsed.hostname)) {\n\t\tthrow new Error(\n\t\t\t`${label} must use https unless it targets localhost, private LAN, or Tailscale`,\n\t\t);\n\t}\n\treturn parsed.toString();\n}\n\nfunction isLocalPairingHost(hostname: string): boolean {\n\tconst host = hostname.toLowerCase().replace(/^\\[/u, \"\").replace(/\\]$/u, \"\");\n\tif (\n\t\thost === \"localhost\" ||\n\t\thost === \"::1\" ||\n\t\thost.endsWith(\".local\") ||\n\t\thost.endsWith(\".ts.net\") ||\n\t\t!host.includes(\".\")\n\t) {\n\t\treturn true;\n\t}\n\tconst ipv4Parts = host.split(\".\").map((part) => Number(part));\n\tif (\n\t\tipv4Parts.length === 4 &&\n\t\tipv4Parts.every((part) => Number.isInteger(part))\n\t) {\n\t\tconst first = ipv4Parts[0] ?? -1;\n\t\tconst second = ipv4Parts[1] ?? -1;\n\t\treturn (\n\t\t\tfirst === 10 ||\n\t\t\tfirst === 127 ||\n\t\t\t(first === 192 && second === 168) ||\n\t\t\t(first === 172 && second >= 16 && second <= 31) ||\n\t\t\t(first === 100 && second >= 64 && second <= 127)\n\t\t);\n\t}\n\treturn (\n\t\thost.includes(\":\") &&\n\t\t(/^f[cd][0-9a-f]*:/u.test(host) || host.startsWith(\"fe80:\"))\n\t);\n}\n\nfunction normalizeProtocolBinding(input: unknown): string {\n\treturn requireNonEmptyString(input ?? \"HTTP+JSON\", \"protocolBinding\");\n}\n\nfunction normalizeProvider(\n\tinput: A2APeerPairingProvider | Record<string, unknown>,\n): A2APeerPairingProvider {\n\treturn {\n\t\t...(typeof input.organization === \"string\" && input.organization.trim()\n\t\t\t? { organization: input.organization.trim() }\n\t\t\t: {}),\n\t\t...(typeof input.url === \"string\" && input.url.trim()\n\t\t\t? { url: normalizePairingUrl(input.url, \"provider.url\") }\n\t\t\t: {}),\n\t};\n}\n\nfunction normalizeCapabilities(\n\tinput: A2APeerPairingCapabilities | Record<string, unknown>,\n): A2APeerPairingCapabilities {\n\treturn {\n\t\t...(typeof input.streaming === \"boolean\"\n\t\t\t? { streaming: input.streaming }\n\t\t\t: {}),\n\t\t...(typeof input.pushNotifications === \"boolean\"\n\t\t\t? { pushNotifications: input.pushNotifications }\n\t\t\t: {}),\n\t\t...(typeof input.extendedAgentCard === \"boolean\"\n\t\t\t? { extendedAgentCard: input.extendedAgentCard }\n\t\t\t: {}),\n\t};\n}\n\nfunction normalizeSkills(\n\tinput: readonly unknown[],\n): A2APeerPairingSkillSummary[] {\n\treturn input.slice(0, MAX_SKILLS_IN_PAIRING_CODE).map((skill, index) => {\n\t\tif (!isRecord(skill)) {\n\t\t\tthrow new Error(`skills[${index}] must be an object`);\n\t\t}\n\t\treturn {\n\t\t\tid: requireNonEmptyString(skill.id, `skills[${index}].id`),\n\t\t\tname: requireNonEmptyString(skill.name, `skills[${index}].name`),\n\t\t\t...copyOptionalString(skill, \"description\"),\n\t\t\t...copyStringList(skill, \"tags\", MAX_SKILL_TAGS_IN_PAIRING_CODE),\n\t\t\t...copyStringList(skill, \"examples\"),\n\t\t\t...copyStringList(skill, \"inputModes\"),\n\t\t\t...copyStringList(skill, \"outputModes\"),\n\t\t\t...copyStringList(skill, \"requiredContextGrants\"),\n\t\t\t...copyOptionalString(skill, \"approvalPolicyRef\"),\n\t\t\t...copyOptionalString(skill, \"maxAutonomy\"),\n\t\t\t...copyStringList(skill, \"requiredArtifactKinds\"),\n\t\t\t...copyStringList(skill, \"optionalArtifactKinds\"),\n\t\t\t...copyStringList(skill, \"allowedTaskClasses\"),\n\t\t\t...copyStringList(skill, \"deniedTaskClasses\"),\n\t\t\t...copyStringRecord(skill, \"attributes\"),\n\t\t\t...copyPrimitiveRecord(skill, \"metadata\"),\n\t\t};\n\t});\n}\n\nfunction copyOptionalString(\n\tinput: Record<string, unknown>,\n\tkey: string,\n): Record<string, string> {\n\tconst value = input[key];\n\treturn typeof value === \"string\" && value.trim()\n\t\t? { [key]: value.trim() }\n\t\t: {};\n}\n\nfunction copyStringList(\n\tinput: Record<string, unknown>,\n\tkey: string,\n\tlimit = Number.POSITIVE_INFINITY,\n): Record<string, string[]> {\n\tconst value = input[key];\n\tif (!Array.isArray(value)) {\n\t\treturn {};\n\t}\n\tconst strings = value\n\t\t.filter((item): item is string => typeof item === \"string\")\n\t\t.map((item) => item.trim())\n\t\t.filter(Boolean)\n\t\t.slice(0, limit);\n\treturn strings.length > 0 ? { [key]: strings } : {};\n}\n\nfunction copyStringRecord(\n\tinput: Record<string, unknown>,\n\tkey: string,\n): Record<string, Record<string, string>> {\n\tconst value = input[key];\n\tif (!isRecord(value)) {\n\t\treturn {};\n\t}\n\tconst entries = Object.entries(value)\n\t\t.map(([entryKey, entryValue]) => [\n\t\t\tentryKey.trim(),\n\t\t\ttypeof entryValue === \"string\" ? entryValue.trim() : \"\",\n\t\t])\n\t\t.filter(\n\t\t\t(entry): entry is [string, string] =>\n\t\t\t\tBoolean(entry[0]) && Boolean(entry[1]),\n\t\t);\n\treturn entries.length > 0 ? { [key]: Object.fromEntries(entries) } : {};\n}\n\nfunction copyPrimitiveRecord(\n\tinput: Record<string, unknown>,\n\tkey: string,\n): Record<string, Record<string, string | number | boolean>> {\n\tconst value = input[key];\n\tif (!isRecord(value)) {\n\t\treturn {};\n\t}\n\tconst output: Record<string, string | number | boolean> = {};\n\tfor (const [entryKey, entryValue] of Object.entries(value)) {\n\t\tconst normalizedKey = entryKey.trim();\n\t\tif (!normalizedKey) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (\n\t\t\ttypeof entryValue === \"string\" ||\n\t\t\ttypeof entryValue === \"number\" ||\n\t\t\ttypeof entryValue === \"boolean\"\n\t\t) {\n\t\t\toutput[normalizedKey] =\n\t\t\t\ttypeof entryValue === \"string\" ? entryValue.trim() : entryValue;\n\t\t}\n\t}\n\treturn Object.keys(output).length > 0 ? { [key]: output } : {};\n}\n\nfunction normalizeRelayHints(\n\tinput: A2APeerPairingRelayHints | Record<string, unknown>,\n): A2APeerPairingRelayHints {\n\treturn {\n\t\t...(typeof input.host === \"string\" && input.host.trim()\n\t\t\t? { host: input.host.trim() }\n\t\t\t: {}),\n\t\t...(typeof input.port === \"number\" &&\n\t\tNumber.isInteger(input.port) &&\n\t\tinput.port > 0 &&\n\t\tinput.port <= 65535\n\t\t\t? { port: input.port }\n\t\t\t: {}),\n\t\t...(typeof input.tailscaleName === \"string\" && input.tailscaleName.trim()\n\t\t\t? { tailscaleName: input.tailscaleName.trim() }\n\t\t\t: {}),\n\t\t...(typeof input.path === \"string\" && input.path.trim()\n\t\t\t? { path: input.path.trim() }\n\t\t\t: {}),\n\t};\n}\n\nfunction normalizeMetadata(\n\tinput: Record<string, unknown>,\n): Record<string, string | number | boolean> {\n\tconst output: Record<string, string | number | boolean> = {};\n\tfor (const [key, value] of Object.entries(input)) {\n\t\tif (!key.trim()) {\n\t\t\tthrow new Error(\"A2A pairing metadata keys must be non-empty\");\n\t\t}\n\t\tif (\n\t\t\ttypeof value === \"string\" ||\n\t\t\ttypeof value === \"number\" ||\n\t\t\ttypeof value === \"boolean\"\n\t\t) {\n\t\t\toutput[key.trim()] = value;\n\t\t}\n\t}\n\treturn output;\n}\n\nfunction rejectSecretBearingFields(value: unknown, path = \"$\"): void {\n\tif (Array.isArray(value)) {\n\t\tfor (const [index, item] of value.entries()) {\n\t\t\trejectSecretBearingFields(item, `${path}[${index}]`);\n\t\t}\n\t\treturn;\n\t}\n\tif (!isRecord(value)) {\n\t\treturn;\n\t}\n\tfor (const [key, child] of Object.entries(value)) {\n\t\tif (isSecretLikeKey(key)) {\n\t\t\tthrow new Error(\n\t\t\t\t`A2A pairing codes must not include secret field ${path}.${key}`,\n\t\t\t);\n\t\t}\n\t\trejectSecretBearingFields(child, `${path}.${key}`);\n\t}\n}\n\nfunction isSecretLikeKey(key: string): boolean {\n\t// NFKC-normalize first so that fullwidth/homoglyph variants (e.g.\n\t// Cyrillic \"о\", fullwidth \"token\") are folded to their ASCII\n\t// equivalents before comparison, preventing denylist bypass (#2541).\n\tconst normalized = key\n\t\t.normalize(\"NFKC\")\n\t\t.toLowerCase()\n\t\t.replace(/[-_\\s]/gu, \"\");\n\treturn (\n\t\tnormalized === \"authorization\" ||\n\t\tnormalized === \"token\" ||\n\t\tnormalized.endsWith(\"token\") ||\n\t\tnormalized === \"secret\" ||\n\t\tnormalized.endsWith(\"secret\") ||\n\t\tnormalized === \"password\" ||\n\t\tnormalized.endsWith(\"password\") ||\n\t\tnormalized === \"apikey\" ||\n\t\tnormalized.endsWith(\"apikey\") ||\n\t\tnormalized === \"credentials\" ||\n\t\tnormalized.endsWith(\"credentials\") ||\n\t\tnormalized === \"bearer\"\n\t);\n}\n\nfunction requireNonEmptyString(input: unknown, label: string): string {\n\tif (typeof input !== \"string\" || !input.trim()) {\n\t\tthrow new Error(`${label} is required`);\n\t}\n\treturn input.trim();\n}\n\nfunction toDate(input: Date | string | unknown, label: string): Date {\n\tconst date =\n\t\tinput instanceof Date\n\t\t\t? input\n\t\t\t: new Date(requireNonEmptyString(input, label));\n\tif (Number.isNaN(date.getTime())) {\n\t\tthrow new Error(`${label} must be an ISO timestamp`);\n\t}\n\treturn date;\n}\n\nfunction pairingChecksum(encoded: string): string {\n\treturn createHash(\"sha256\")\n\t\t.update(`${A2A_PEER_PAIRING_CODE_PREFIX}.${encoded}`)\n\t\t.digest(\"hex\")\n\t\t.slice(0, PAIRING_CODE_CHECKSUM_LENGTH);\n}\n\nfunction assertPairingChecksum(encoded: string, checksum: string): void {\n\tconst expected = pairingChecksum(encoded);\n\tif (checksum.length !== expected.length) {\n\t\tthrow new Error(\"A2A pairing code checksum does not match\");\n\t}\n\tconst expectedBytes = Buffer.from(expected, \"utf8\");\n\tconst actualBytes = Buffer.from(checksum, \"utf8\");\n\tif (!timingSafeEqual(expectedBytes, actualBytes)) {\n\t\tthrow new Error(\"A2A pairing code checksum does not match\");\n\t}\n}\n\nfunction stablePeerId(payload: A2APeerPairingPayload): string {\n\tconst hash = createHash(\"sha256\")\n\t\t.update(\n\t\t\t`${payload.displayName}\\n${payload.agentCardUrl}\\n${payload.transportUrl}`,\n\t\t)\n\t\t.digest(\"base64url\")\n\t\t.slice(0, 16);\n\treturn `a2a-peer-${hash}`;\n}\n\nfunction errorMessage(error: unknown): string {\n\treturn error instanceof Error ? error.message : String(error);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"a2a-peer-registry.d.ts","sourceRoot":"","sources":["../../src/platform/a2a-peer-registry.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,gBAAgB,EAAuB,MAAM,iBAAiB,CAAC;AAC7E,OAAO,EACN,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAE1B,MAAM,uBAAuB,CAAC;AAM/B,MAAM,WAAW,oBAAoB;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,iBAAiB,CAAC,cAAc,CAAC,CAAC;IACjD,MAAM,CAAC,EAAE,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IACrC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;IACrD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;CAC5C;AAED,MAAM,WAAW,sBAAsB;IACtC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,IAAI,CAAC;CACX;AAED,MAAM,WAAW,oBAAqB,SAAQ,sBAAsB;IACnE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,qBAAsB,SAAQ,sBAAsB;IACpE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,oBAAoB,CAAC;IAC5B,MAAM,EAAE,gBAAgB,CAAC;CACzB;AAED,wBAAgB,sBAAsB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAQ5D;AAED,wBAAsB,mBAAmB,CACxC,OAAO,GAAE,sBAA2B,GAClC,OAAO,CAAC,mBAAmB,CAAC,CAkC9B;AAED,wBAAsB,mBAAmB,CACxC,QAAQ,EAAE,mBAAmB,EAC7B,OAAO,GAAE,sBAA2B,GAClC,OAAO,CAAC,MAAM,CAAC,CAQjB;AAED,wBAAsB,+BAA+B,CACpD,OAAO,EAAE,qBAAqB,EAC9B,OAAO,GAAE,oBAAyB,GAChC,OAAO,CAAC;IACV,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,oBAAoB,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC;CACb,CAAC,CAiED;AAED,wBAAsB,YAAY,CACjC,OAAO,GAAE,sBAA2B,GAClC,OAAO,CAAC;IACV,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,mBAAmB,CAAC;CAC9B,CAAC,CAKD;AAED,wBAAsB,cAAc,CACnC,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,OAAO,GAAE,qBAA0B,GACjC,OAAO,CAAC,eAAe,CAAC,CA8B1B;AAED,wBAAsB,gBAAgB,CACrC,KAAK,EAAE,IAAI,CAAC,oBAAoB,EAAE,UAAU,GAAG,WAAW,CAAC,GACzD,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAW7B;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAWlE"}
1
+ {"version":3,"file":"a2a-peer-registry.d.ts","sourceRoot":"","sources":["../../src/platform/a2a-peer-registry.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import { mkdir, readFile, rename, writeFile } from "node:fs/promises";
2
2
  import { homedir } from "node:os";
3
3
  import { dirname, join, resolve } from "node:path";
4
+ import { isRecord } from "../utils/json.js";
4
5
  import { normalizeA2ABaseUrl } from "./a2a-client.js";
5
6
  import { a2aPeerConnectionFromPairingPayload, } from "./a2a-peer-pairing.js";
6
7
  import { getEnvValue, trimString } from "./client.js";
@@ -333,9 +334,6 @@ function expandHome(path) {
333
334
  }
334
335
  return resolve(path);
335
336
  }
336
- function isRecord(value) {
337
- return typeof value === "object" && value !== null && !Array.isArray(value);
338
- }
339
337
  function hasNodeCode(error, code) {
340
338
  return (typeof error === "object" &&
341
339
  error !== null &&