@evalops/maestro 0.10.49 → 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 (422) 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-command-runtime.js +2 -2
  143. package/dist/cli-command-runtime.js.map +1 -1
  144. package/dist/cli-runtime.js +7798 -2805
  145. package/dist/cli-tui/client-tools/client-tool-controller.d.ts.map +1 -1
  146. package/dist/cli-tui/client-tools/client-tool-controller.js +1 -3
  147. package/dist/cli-tui/client-tools/client-tool-controller.js.map +1 -1
  148. package/dist/cli-tui/commands/undo-handlers.d.ts.map +1 -1
  149. package/dist/cli-tui/commands/undo-handlers.js +7 -2
  150. package/dist/cli-tui/commands/undo-handlers.js.map +1 -1
  151. package/dist/cli-tui/tui-renderer/skills-controller.d.ts +3 -0
  152. package/dist/cli-tui/tui-renderer/skills-controller.d.ts.map +1 -1
  153. package/dist/cli-tui/tui-renderer/skills-controller.js +77 -33
  154. package/dist/cli-tui/tui-renderer/skills-controller.js.map +1 -1
  155. package/dist/cli.js +4 -6
  156. package/dist/cli.js.map +1 -1
  157. package/dist/codex/app-server-client.d.ts.map +1 -1
  158. package/dist/codex/app-server-client.js +1 -3
  159. package/dist/codex/app-server-client.js.map +1 -1
  160. package/dist/codex/compatibility.d.ts.map +1 -1
  161. package/dist/codex/compatibility.js +1 -3
  162. package/dist/codex/compatibility.js.map +1 -1
  163. package/dist/codex/subagent-dispatch-table.d.ts +8 -0
  164. package/dist/codex/subagent-dispatch-table.d.ts.map +1 -1
  165. package/dist/codex/subagent-dispatch-table.js +23 -0
  166. package/dist/codex/subagent-dispatch-table.js.map +1 -1
  167. package/dist/context/manifest.d.ts.map +1 -1
  168. package/dist/context/manifest.js +1 -3
  169. package/dist/context/manifest.js.map +1 -1
  170. package/dist/conversation/render-model.d.ts +0 -36
  171. package/dist/conversation/render-model.d.ts.map +1 -1
  172. package/dist/conversation/render-model.js +1 -3
  173. package/dist/conversation/render-model.js.map +1 -1
  174. package/dist/customer-value/ambient-learning.d.ts +75 -0
  175. package/dist/customer-value/ambient-learning.d.ts.map +1 -0
  176. package/dist/customer-value/ambient-learning.js +472 -0
  177. package/dist/customer-value/ambient-learning.js.map +1 -0
  178. package/dist/customer-value/internal-helpers.d.ts +13 -0
  179. package/dist/customer-value/internal-helpers.d.ts.map +1 -0
  180. package/dist/customer-value/internal-helpers.js +70 -0
  181. package/dist/customer-value/internal-helpers.js.map +1 -0
  182. package/dist/customer-value/report.d.ts +282 -0
  183. package/dist/customer-value/report.d.ts.map +1 -0
  184. package/dist/customer-value/report.js +2085 -0
  185. package/dist/customer-value/report.js.map +1 -0
  186. package/dist/db/health.d.ts +1 -1
  187. package/dist/db/health.d.ts.map +1 -1
  188. package/dist/db/health.js +10 -0
  189. package/dist/db/health.js.map +1 -1
  190. package/dist/db/migrations/0009_operating_layer_evidence.sql +30 -0
  191. package/dist/db/migrations/meta/_journal.json +7 -0
  192. package/dist/db/schema.d.ts +268 -1
  193. package/dist/db/schema.d.ts.map +1 -1
  194. package/dist/db/schema.js +28 -0
  195. package/dist/db/schema.js.map +1 -1
  196. package/dist/evalops/agent-bootstrap.d.ts.map +1 -1
  197. package/dist/evalops/agent-bootstrap.js +1 -3
  198. package/dist/evalops/agent-bootstrap.js.map +1 -1
  199. package/dist/evalops/agent-mcp-metadata.d.ts.map +1 -1
  200. package/dist/evalops/agent-mcp-metadata.js +1 -3
  201. package/dist/evalops/agent-mcp-metadata.js.map +1 -1
  202. package/dist/index.d.ts +1 -0
  203. package/dist/index.d.ts.map +1 -1
  204. package/dist/index.js +1 -0
  205. package/dist/index.js.map +1 -1
  206. package/dist/installers/maestro-review-workflow.d.ts +38 -0
  207. package/dist/installers/maestro-review-workflow.d.ts.map +1 -0
  208. package/dist/installers/maestro-review-workflow.js +163 -0
  209. package/dist/installers/maestro-review-workflow.js.map +1 -0
  210. package/dist/load-env.d.ts +13 -0
  211. package/dist/load-env.d.ts.map +1 -1
  212. package/dist/load-env.js +17 -0
  213. package/dist/load-env.js.map +1 -1
  214. package/dist/main.d.ts.map +1 -1
  215. package/dist/main.js +96 -7
  216. package/dist/main.js.map +1 -1
  217. package/dist/mcp/config.d.ts.map +1 -1
  218. package/dist/mcp/config.js +1 -3
  219. package/dist/mcp/config.js.map +1 -1
  220. package/dist/mcp/elicitation.d.ts.map +1 -1
  221. package/dist/mcp/elicitation.js +1 -3
  222. package/dist/mcp/elicitation.js.map +1 -1
  223. package/dist/mcp/official-registry.d.ts.map +1 -1
  224. package/dist/mcp/official-registry.js +1 -3
  225. package/dist/mcp/official-registry.js.map +1 -1
  226. package/dist/mcp/workspace-trust.d.ts.map +1 -1
  227. package/dist/mcp/workspace-trust.js +1 -3
  228. package/dist/mcp/workspace-trust.js.map +1 -1
  229. package/dist/memory/service-client.d.ts.map +1 -1
  230. package/dist/memory/service-client.js +1 -3
  231. package/dist/memory/service-client.js.map +1 -1
  232. package/dist/models/config-loader.d.ts.map +1 -1
  233. package/dist/models/config-loader.js +1 -3
  234. package/dist/models/config-loader.js.map +1 -1
  235. package/dist/node_modules/@evalops/contracts/dist/index.d.ts +1 -0
  236. package/dist/node_modules/@evalops/contracts/dist/index.d.ts.map +1 -1
  237. package/dist/node_modules/@evalops/contracts/dist/index.js +1 -0
  238. package/dist/node_modules/@evalops/contracts/dist/index.js.map +1 -1
  239. package/dist/node_modules/@evalops/contracts/dist/maestro-settings.d.ts +61 -0
  240. package/dist/node_modules/@evalops/contracts/dist/maestro-settings.d.ts.map +1 -0
  241. package/dist/node_modules/@evalops/contracts/dist/maestro-settings.js +183 -0
  242. package/dist/node_modules/@evalops/contracts/dist/maestro-settings.js.map +1 -0
  243. package/dist/node_modules/@evalops/contracts/package.json +1 -1
  244. package/dist/node_modules/@evalops/tui/package.json +1 -1
  245. package/dist/oauth/connectors.d.ts.map +1 -1
  246. package/dist/oauth/connectors.js +1 -3
  247. package/dist/oauth/connectors.js.map +1 -1
  248. package/dist/oauth/evalops.d.ts.map +1 -1
  249. package/dist/oauth/evalops.js +1 -3
  250. package/dist/oauth/evalops.js.map +1 -1
  251. package/dist/platform/a2a-client.d.ts.map +1 -1
  252. package/dist/platform/a2a-client.js +1 -3
  253. package/dist/platform/a2a-client.js.map +1 -1
  254. package/dist/platform/a2a-cockpit.d.ts +1 -0
  255. package/dist/platform/a2a-cockpit.d.ts.map +1 -1
  256. package/dist/platform/a2a-cockpit.js +42 -11
  257. package/dist/platform/a2a-cockpit.js.map +1 -1
  258. package/dist/platform/a2a-completion-audit.d.ts +1 -1
  259. package/dist/platform/a2a-completion-audit.d.ts.map +1 -1
  260. package/dist/platform/a2a-completion-audit.js +7 -11
  261. package/dist/platform/a2a-completion-audit.js.map +1 -1
  262. package/dist/platform/a2a-maestro-peer.js +16 -0
  263. package/dist/platform/a2a-maestro-peer.js.map +1 -1
  264. package/dist/platform/a2a-peer-pairing.d.ts.map +1 -1
  265. package/dist/platform/a2a-peer-pairing.js +1 -3
  266. package/dist/platform/a2a-peer-pairing.js.map +1 -1
  267. package/dist/platform/a2a-peer-registry.d.ts.map +1 -1
  268. package/dist/platform/a2a-peer-registry.js +1 -3
  269. package/dist/platform/a2a-peer-registry.js.map +1 -1
  270. package/dist/platform/a2a-task-ledger.d.ts +20 -0
  271. package/dist/platform/a2a-task-ledger.d.ts.map +1 -1
  272. package/dist/platform/a2a-task-ledger.js +207 -11
  273. package/dist/platform/a2a-task-ledger.js.map +1 -1
  274. package/dist/platform/a2a-work-graph.d.ts.map +1 -1
  275. package/dist/platform/a2a-work-graph.js +1 -3
  276. package/dist/platform/a2a-work-graph.js.map +1 -1
  277. package/dist/platform/operating-layer.d.ts +127 -0
  278. package/dist/platform/operating-layer.d.ts.map +1 -0
  279. package/dist/platform/operating-layer.js +360 -0
  280. package/dist/platform/operating-layer.js.map +1 -0
  281. package/dist/platform/tool-execution-client.d.ts.map +1 -1
  282. package/dist/platform/tool-execution-client.js +19 -2
  283. package/dist/platform/tool-execution-client.js.map +1 -1
  284. package/dist/providers/auth.d.ts.map +1 -1
  285. package/dist/providers/auth.js +1 -3
  286. package/dist/providers/auth.js.map +1 -1
  287. package/dist/runtime/env.d.ts +9 -1
  288. package/dist/runtime/env.d.ts.map +1 -1
  289. package/dist/runtime/env.js +63 -1
  290. package/dist/runtime/env.js.map +1 -1
  291. package/dist/safety/policy.d.ts.map +1 -1
  292. package/dist/safety/policy.js +1 -4
  293. package/dist/safety/policy.js.map +1 -1
  294. package/dist/sandbox/docker-sandbox.d.ts.map +1 -1
  295. package/dist/sandbox/docker-sandbox.js +6 -1
  296. package/dist/sandbox/docker-sandbox.js.map +1 -1
  297. package/dist/server/handlers/hosted-runner-drain.d.ts.map +1 -1
  298. package/dist/server/handlers/hosted-runner-drain.js +1 -3
  299. package/dist/server/handlers/hosted-runner-drain.js.map +1 -1
  300. package/dist/server/handlers/platform-a2a-push.d.ts.map +1 -1
  301. package/dist/server/handlers/platform-a2a-push.js +53 -2
  302. package/dist/server/handlers/platform-a2a-push.js.map +1 -1
  303. package/dist/server/handlers/runtime-app-server-ws.d.ts.map +1 -1
  304. package/dist/server/handlers/runtime-app-server-ws.js +1 -3
  305. package/dist/server/handlers/runtime-app-server-ws.js.map +1 -1
  306. package/dist/server/headless-runtime-service.d.ts +16 -0
  307. package/dist/server/headless-runtime-service.d.ts.map +1 -1
  308. package/dist/server/headless-runtime-service.js +232 -206
  309. package/dist/server/headless-runtime-service.js.map +1 -1
  310. package/dist/server/hosted-agent-runtime-progress.d.ts.map +1 -1
  311. package/dist/server/hosted-agent-runtime-progress.js +12 -3
  312. package/dist/server/hosted-agent-runtime-progress.js.map +1 -1
  313. package/dist/server/pending-request-payload.d.ts.map +1 -1
  314. package/dist/server/pending-request-payload.js +1 -3
  315. package/dist/server/pending-request-payload.js.map +1 -1
  316. package/dist/server/route-auth.d.ts.map +1 -1
  317. package/dist/server/route-auth.js +2 -0
  318. package/dist/server/route-auth.js.map +1 -1
  319. package/dist/server/session-serialization.d.ts.map +1 -1
  320. package/dist/server/session-serialization.js +1 -3
  321. package/dist/server/session-serialization.js.map +1 -1
  322. package/dist/services/compliance/normalize.d.ts.map +1 -1
  323. package/dist/services/compliance/normalize.js +1 -3
  324. package/dist/services/compliance/normalize.js.map +1 -1
  325. package/dist/services/intelligent-router/normalize.d.ts.map +1 -1
  326. package/dist/services/intelligent-router/normalize.js +1 -3
  327. package/dist/services/intelligent-router/normalize.js.map +1 -1
  328. package/dist/services/revenue-attribution/normalize.d.ts.map +1 -1
  329. package/dist/services/revenue-attribution/normalize.js +1 -3
  330. package/dist/services/revenue-attribution/normalize.js.map +1 -1
  331. package/dist/services/traces/normalize.d.ts.map +1 -1
  332. package/dist/services/traces/normalize.js +1 -3
  333. package/dist/services/traces/normalize.js.map +1 -1
  334. package/dist/services/workspace-config/normalize.d.ts.map +1 -1
  335. package/dist/services/workspace-config/normalize.js +1 -3
  336. package/dist/services/workspace-config/normalize.js.map +1 -1
  337. package/dist/skills/composer.d.ts.map +1 -1
  338. package/dist/skills/composer.js +13 -1
  339. package/dist/skills/composer.js.map +1 -1
  340. package/dist/skills/index.d.ts +1 -0
  341. package/dist/skills/index.d.ts.map +1 -1
  342. package/dist/skills/index.js +1 -0
  343. package/dist/skills/index.js.map +1 -1
  344. package/dist/skills/learned-guidelines.d.ts +33 -0
  345. package/dist/skills/learned-guidelines.d.ts.map +1 -0
  346. package/dist/skills/learned-guidelines.js +291 -0
  347. package/dist/skills/learned-guidelines.js.map +1 -0
  348. package/dist/skills/linter.d.ts.map +1 -1
  349. package/dist/skills/linter.js +1 -3
  350. package/dist/skills/linter.js.map +1 -1
  351. package/dist/skills/runtime-activation.d.ts +1 -0
  352. package/dist/skills/runtime-activation.d.ts.map +1 -1
  353. package/dist/skills/runtime-activation.js +2 -3
  354. package/dist/skills/runtime-activation.js.map +1 -1
  355. package/dist/skills/tool.d.ts.map +1 -1
  356. package/dist/skills/tool.js +26 -21
  357. package/dist/skills/tool.js.map +1 -1
  358. package/dist/skills/trust-cache.d.ts +7 -0
  359. package/dist/skills/trust-cache.d.ts.map +1 -1
  360. package/dist/skills/trust-cache.js +16 -0
  361. package/dist/skills/trust-cache.js.map +1 -1
  362. package/dist/telemetry/agent-workforce-native-event.d.ts.map +1 -1
  363. package/dist/telemetry/agent-workforce-native-event.js +1 -3
  364. package/dist/telemetry/agent-workforce-native-event.js.map +1 -1
  365. package/dist/telemetry/maestro-event-bus.d.ts.map +1 -1
  366. package/dist/telemetry/maestro-event-bus.js +42 -81
  367. package/dist/telemetry/maestro-event-bus.js.map +1 -1
  368. package/dist/telemetry/maestro-platform-replay-fixture.d.ts.map +1 -1
  369. package/dist/telemetry/maestro-platform-replay-fixture.js +1 -3
  370. package/dist/telemetry/maestro-platform-replay-fixture.js.map +1 -1
  371. package/dist/telemetry.d.ts.map +1 -1
  372. package/dist/telemetry.js +54 -43
  373. package/dist/telemetry.js.map +1 -1
  374. package/dist/theme/theme-loader.d.ts.map +1 -1
  375. package/dist/theme/theme-loader.js +1 -3
  376. package/dist/theme/theme-loader.js.map +1 -1
  377. package/dist/tools/apply-patch.d.ts.map +1 -1
  378. package/dist/tools/apply-patch.js +76 -8
  379. package/dist/tools/apply-patch.js.map +1 -1
  380. package/dist/tools/diff-preview.d.ts.map +1 -1
  381. package/dist/tools/diff-preview.js +10 -1
  382. package/dist/tools/diff-preview.js.map +1 -1
  383. package/dist/tools/edit.d.ts.map +1 -1
  384. package/dist/tools/edit.js +17 -0
  385. package/dist/tools/edit.js.map +1 -1
  386. package/dist/tools/write.d.ts.map +1 -1
  387. package/dist/tools/write.js +9 -0
  388. package/dist/tools/write.js.map +1 -1
  389. package/dist/undo/tracker.d.ts +5 -0
  390. package/dist/undo/tracker.d.ts.map +1 -1
  391. package/dist/undo/tracker.js +13 -0
  392. package/dist/undo/tracker.js.map +1 -1
  393. package/dist/utils/fs.d.ts +1 -1
  394. package/dist/utils/fs.d.ts.map +1 -1
  395. package/dist/utils/fs.js +29 -2
  396. package/dist/utils/fs.js.map +1 -1
  397. package/dist/utils/git-stash.d.ts.map +1 -1
  398. package/dist/utils/git-stash.js +15 -8
  399. package/dist/utils/git-stash.js.map +1 -1
  400. package/dist/utils/json.d.ts +11 -0
  401. package/dist/utils/json.d.ts.map +1 -1
  402. package/dist/utils/json.js +9 -0
  403. package/dist/utils/json.js.map +1 -1
  404. package/dist/utils/shell-env.d.ts.map +1 -1
  405. package/dist/utils/shell-env.js +2 -0
  406. package/dist/utils/shell-env.js.map +1 -1
  407. package/dist/utils/url-extractor-git.d.ts +26 -0
  408. package/dist/utils/url-extractor-git.d.ts.map +1 -0
  409. package/dist/utils/url-extractor-git.js +259 -0
  410. package/dist/utils/url-extractor-git.js.map +1 -0
  411. package/dist/utils/url-extractor.d.ts.map +1 -1
  412. package/dist/utils/url-extractor.js +23 -251
  413. package/dist/utils/url-extractor.js.map +1 -1
  414. package/dist/version.json +2 -2
  415. package/dist/web-server.d.ts.map +1 -1
  416. package/dist/web-server.js +2 -5
  417. package/dist/web-server.js.map +1 -1
  418. package/package.json +310 -306
  419. package/skills/incident-triage/SKILL.md +19 -1
  420. package/skills/install-code-review/SKILL.md +69 -0
  421. package/skills/security-review/SKILL.md +68 -0
  422. package/skills/security-review/reference/rubric.md +85 -0
@@ -1 +1 @@
1
- {"version":3,"file":"a2a-peer-registry.js","sourceRoot":"","sources":["../../src/platform/a2a-peer-registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAyB,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAC7E,OAAO,EAGN,mCAAmC,GACnC,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEtD,MAAM,kBAAkB,GAAG,OAAO,CAAC;AACnC,MAAM,oBAAoB,GAAG,CAAC,CAAC;AA0D/B,MAAM,UAAU,sBAAsB,CAAC,IAAa;IACnD,MAAM,UAAU,GACf,UAAU,CAAC,IAAI,CAAC;QAChB,WAAW,CAAC,CAAC,wBAAwB,EAAE,sBAAsB,CAAC,CAAC,CAAC;IACjE,IAAI,UAAU,EAAE,CAAC;QAChB,OAAO,UAAU,CAAC,UAAU,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACxC,UAAkC,EAAE;IAEpC,MAAM,IAAI,GAAG,sBAAsB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACJ,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACpC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,IAAI,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE,CAAC;YAClC,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;QACtB,CAAC;QACD,MAAM,KAAK,CAAC;IACb,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAY,CAAC;IAC1C,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,wBAAwB,IAAI,wBAAwB,CAAC,CAAC;IACvE,CAAC;IACD,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IACzD,MAAM,QAAQ,GAAwB;QACrC,KAAK,EAAE,MAAM,CAAC,WAAW,CACxB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;YAC5C,IAAI;YACJ,sBAAsB,CAAC,KAAK,EAAE,SAAS,IAAI,EAAE,CAAC;SAC9C,CAAC,CACF;KACD,CAAC;IACF,IAAI,OAAO,MAAM,CAAC,WAAW,KAAK,QAAQ,IAAI,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC;QACzE,QAAQ,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;IAClD,CAAC;IACD,IAAI,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC;QAClE,QAAQ,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;IACvC,CAAC;IACD,IAAI,OAAO,MAAM,CAAC,WAAW,KAAK,QAAQ,IAAI,MAAM,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC;QACtE,QAAQ,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;IAC3C,CAAC;IACD,OAAO,QAAQ,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACxC,QAA6B,EAC7B,UAAkC,EAAE;IAEpC,MAAM,IAAI,GAAG,sBAAsB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7D,MAAM,SAAS,CAAC,GAAG,IAAI,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;QACxE,IAAI,EAAE,KAAK;KACX,CAAC,CAAC;IACH,MAAM,MAAM,CAAC,GAAG,IAAI,MAAM,EAAE,IAAI,CAAC,CAAC;IAClC,OAAO,IAAI,CAAC;AACb,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,+BAA+B,CACpD,OAA8B,EAC9B,UAAgC,EAAE;IAMlC,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,OAAO,CAAC,CAAC;IACpD,MAAM,UAAU,GAAG,mCAAmC,CAAC,OAAO,CAAC,CAAC;IAChE,MAAM,IAAI,GAAG,iBAAiB,CAAC,OAAO,CAAC,IAAI,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;IAClE,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACtD,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,WAAW,GAAG,iBAAiB,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAC1D,MAAM,EACL,QAAQ,EAAE,gBAAgB,EAC1B,SAAS,EAAE,iBAAiB,EAC5B,cAAc,EAAE,uBAAuB,EACvC,GAAG,cAAc,EACjB,GAAG,QAAQ,IAAI,EAAE,CAAC;IACnB,MAAM,eAAe,GAAG,OAAO,CAC9B,QAAQ;QACP,CAAC,iBAAiB,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,WAAW;YAC/C,oBAAoB,CAAC,QAAQ,CAAC,YAAY,EAAE,UAAU,CAAC,YAAY,CAAC;YACpE,oBAAoB,CACnB,QAAQ,CAAC,eAAe,EACxB,UAAU,CAAC,eAAe,CAC1B;YACD,oBAAoB,CACnB,QAAQ,CAAC,eAAe,EACxB,UAAU,CAAC,eAAe,CAC1B;YACD,4BAA4B,CAC3B,QAAQ,CAAC,cAAc,EACvB,UAAU,CAAC,cAAc,CACzB,CAAC,CACJ,CAAC;IACF,MAAM,KAAK,GAAyB;QACnC,GAAG,cAAc;QACjB,GAAG,EAAE,UAAU,CAAC,OAAO;QACvB,WAAW,EAAE,UAAU,CAAC,WAAW;QACnC,YAAY,EAAE,UAAU,CAAC,YAAY;QACrC,eAAe,EAAE,UAAU,CAAC,eAAe;QAC3C,eAAe,EAAE,UAAU,CAAC,eAAe;QAC3C,GAAG,wBAAwB,CAAC;YAC3B,gBAAgB;YAChB,iBAAiB;YACjB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,cAAc,EAAE,CAAC,eAAe;SAChC,CAAC;QACF,GAAG,CAAC,OAAO,CAAC,cAAc;YACzB,CAAC,CAAC,EAAE,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE;YAC5C,CAAC,CAAC,EAAE,CAAC;QACN,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpE,GAAG,CAAC,UAAU,CAAC,YAAY;YAC1B,CAAC,CAAC,EAAE,YAAY,EAAE,UAAU,CAAC,YAAY,EAAE;YAC3C,CAAC,CAAC,EAAE,CAAC;QACN,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,GAAG,CAAC,UAAU,CAAC,cAAc;YAC5B,CAAC,CAAC,EAAE,cAAc,EAAE,UAAU,CAAC,cAAc,EAAE;YAC/C,CAAC,CAAC,EAAE,CAAC;QACN,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjE,SAAS,EAAE,QAAQ,EAAE,SAAS,IAAI,GAAG;QACrC,SAAS,EAAE,GAAG;KACd,CAAC;IACF,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;IAC7B,IAAI,OAAO,CAAC,WAAW,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;QAClD,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC;IAC7B,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC1D,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAC9B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CACjC,UAAkC,EAAE;IAKpC,OAAO;QACN,IAAI,EAAE,sBAAsB,CAAC,OAAO,CAAC,IAAI,CAAC;QAC1C,QAAQ,EAAE,MAAM,mBAAmB,CAAC,OAAO,CAAC;KAC5C,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CACnC,IAAwB,EACxB,UAAiC,EAAE;IAEnC,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,OAAO,CAAC,CAAC;IACpD,MAAM,YAAY,GAAG,iBAAiB,CAAC,IAAI,IAAI,QAAQ,CAAC,WAAW,CAAC,CAAC;IACrE,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAC3C,IAAI,CAAC,KAAK,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACd,qBAAqB,YAAY,sDAAsD,CACvF,CAAC;IACH,CAAC;IACD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,CAAC,MAAM,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/D,MAAM,MAAM,GAAqB;QAChC,OAAO,EAAE,mBAAmB,CAAC,KAAK,CAAC,GAAG,CAAC;QACvC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3B,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzE,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChE,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;QACxE,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1D,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpD,SAAS,EACR,OAAO,CAAC,SAAS;YACjB,KAAK,CAAC,SAAS;YACf,QAAQ,CAAC,SAAS;YAClB,kBAAkB;QACnB,WAAW,EACV,OAAO,CAAC,WAAW;YACnB,KAAK,CAAC,WAAW;YACjB,QAAQ,CAAC,WAAW;YACpB,oBAAoB;KACrB,CAAC;IACF,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AAC9C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACrC,KAA2D;IAE3D,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QACpB,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;QACzD,IAAI,QAAQ,EAAE,CAAC;YACd,OAAO,QAAQ,CAAC;QACjB,CAAC;IACF,CAAC;IACD,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACrB,OAAO,UAAU,CAAC,MAAM,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,SAAS,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAwB;IACzD,MAAM,UAAU,GAAG,IAAI,EAAE,IAAI,EAAE,CAAC;IAChC,IAAI,CAAC,UAAU,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAC9C,CAAC;IACD,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QACjD,MAAM,IAAI,KAAK,CACd,iFAAiF,CACjF,CAAC;IACH,CAAC;IACD,OAAO,UAAU,CAAC;AACnB,CAAC;AAED,SAAS,wBAAwB,CAAC,KAMjC;IACA,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC5C,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAC9C,IAAI,QAAQ,IAAI,SAAS,EAAE,CAAC;QAC3B,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;IACvD,CAAC;IACD,IAAI,QAAQ,EAAE,CAAC;QACd,OAAO,EAAE,QAAQ,EAAE,CAAC;IACrB,CAAC;IACD,IAAI,SAAS,EAAE,CAAC;QACf,OAAO,EAAE,SAAS,EAAE,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;IAC7C,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;QAC3B,OAAO,EAAE,CAAC;IACX,CAAC;IACD,OAAO;QACN,GAAG,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvE,GAAG,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC1E,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAW;IACrC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;IAChC,OAAO,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC3D,CAAC;AAED,SAAS,oBAAoB,CAC5B,aAAiC,EACjC,SAA6B;IAE7B,MAAM,QAAQ,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;IACnC,OAAO,OAAO,CAAC,QAAQ,IAAI,IAAI,IAAI,QAAQ,KAAK,IAAI,CAAC,CAAC;AACvD,CAAC;AAED,SAAS,4BAA4B,CACpC,aAAiC,EACjC,SAA6B;IAE7B,MAAM,QAAQ,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;IACnC,OAAO,QAAQ,KAAK,IAAI,CAAC;AAC1B,CAAC;AAED,SAAS,sBAAsB,CAC9B,KAAc,EACd,KAAa;IAEb,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,oBAAoB,CAAC,CAAC;IAC/C,CAAC;IACD,MAAM,GAAG,GAAG,OAAO,KAAK,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAClE,IAAI,CAAC,GAAG,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,kBAAkB,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO;QACN,GAAG;QACH,GAAG,UAAU,CAAC,KAAK,EAAE,aAAa,CAAC;QACnC,GAAG,UAAU,CAAC,KAAK,EAAE,cAAc,CAAC;QACpC,GAAG,UAAU,CAAC,KAAK,EAAE,iBAAiB,CAAC;QACvC,GAAG,UAAU,CAAC,KAAK,EAAE,iBAAiB,CAAC;QACvC,GAAG,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC;QAChC,GAAG,UAAU,CAAC,KAAK,EAAE,WAAW,CAAC;QACjC,GAAG,UAAU,CAAC,KAAK,EAAE,gBAAgB,CAAC;QACtC,GAAG,UAAU,CAAC,KAAK,EAAE,aAAa,CAAC;QACnC,GAAG,UAAU,CAAC,KAAK,EAAE,SAAS,CAAC;QAC/B,GAAG,UAAU,CAAC,KAAK,EAAE,WAAW,CAAC;QACjC,GAAG,UAAU,CAAC,KAAK,EAAE,SAAS,CAAC;QAC/B,GAAG,CAAC,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,IAAI,KAAK,CAAC,SAAS,GAAG,CAAC;YAC7D,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE;YAChC,CAAC,CAAC,EAAE,CAAC;QACN,GAAG,CAAC,OAAO,KAAK,CAAC,WAAW,KAAK,QAAQ,IAAI,KAAK,CAAC,WAAW,GAAG,CAAC;YACjE,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE;YACpC,CAAC,CAAC,EAAE,CAAC;QACN,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC;YAC/B,CAAC,CAAC;gBACA,YAAY,EAAE;oBACb,GAAG,CAAC,OAAO,KAAK,CAAC,YAAY,CAAC,SAAS,KAAK,SAAS;wBACpD,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,YAAY,CAAC,SAAS,EAAE;wBAC7C,CAAC,CAAC,EAAE,CAAC;oBACN,GAAG,CAAC,OAAO,KAAK,CAAC,YAAY,CAAC,iBAAiB,KAAK,SAAS;wBAC5D,CAAC,CAAC,EAAE,iBAAiB,EAAE,KAAK,CAAC,YAAY,CAAC,iBAAiB,EAAE;wBAC7D,CAAC,CAAC,EAAE,CAAC;oBACN,GAAG,CAAC,OAAO,KAAK,CAAC,YAAY,CAAC,iBAAiB,KAAK,SAAS;wBAC5D,CAAC,CAAC,EAAE,iBAAiB,EAAE,KAAK,CAAC,YAAY,CAAC,iBAAiB,EAAE;wBAC7D,CAAC,CAAC,EAAE,CAAC;iBACN;aACD;YACF,CAAC,CAAC,EAAE,CAAC;QACN,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC;YAC9B,CAAC,CAAC,EAAE,MAAM,EAAE,uBAAuB,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;YACnD,CAAC,CAAC,EAAE,CAAC;QACN,GAAG,UAAU,CAAC,KAAK,EAAE,gBAAgB,CAAC;QACtC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC;YAC3B,CAAC,CAAC;gBACA,QAAQ,EAAE,KAAK,CAAC,QAAqD;aACrE;YACF,CAAC,CAAC,EAAE,CAAC;QACN,GAAG,UAAU,CAAC,KAAK,EAAE,WAAW,CAAC;QACjC,GAAG,UAAU,CAAC,KAAK,EAAE,WAAW,CAAC;KACjC,CAAC;AACH,CAAC;AAED,SAAS,uBAAuB,CAC/B,KAAyB;IAEzB,OAAO,KAAK;SACV,MAAM,CAAC,QAAQ,CAAC;SAChB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAChB,EAAE,EAAE,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;QAChD,IAAI,EAAE,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;QACtD,GAAG,UAAU,CAAC,KAAK,EAAE,aAAa,CAAC;QACnC,GAAG,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC;QAChC,GAAG,cAAc,CAAC,KAAK,EAAE,UAAU,CAAC;QACpC,GAAG,cAAc,CAAC,KAAK,EAAE,YAAY,CAAC;QACtC,GAAG,cAAc,CAAC,KAAK,EAAE,aAAa,CAAC;QACvC,GAAG,cAAc,CAAC,KAAK,EAAE,uBAAuB,CAAC;QACjD,GAAG,UAAU,CAAC,KAAK,EAAE,mBAAmB,CAAC;QACzC,GAAG,UAAU,CAAC,KAAK,EAAE,aAAa,CAAC;QACnC,GAAG,cAAc,CAAC,KAAK,EAAE,uBAAuB,CAAC;QACjD,GAAG,cAAc,CAAC,KAAK,EAAE,uBAAuB,CAAC;QACjD,GAAG,cAAc,CAAC,KAAK,EAAE,oBAAoB,CAAC;QAC9C,GAAG,cAAc,CAAC,KAAK,EAAE,mBAAmB,CAAC;QAC7C,GAAG,gBAAgB,CAAC,KAAK,EAAE,YAAY,CAAC;QACxC,GAAG,mBAAmB,CAAC,KAAK,EAAE,UAAU,CAAC;KACzC,CAAC,CAAC;SACF,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,cAAc,CACtB,KAA8B,EAC9B,GAAW;IAEX,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;IACzB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,CAAC;IACX,CAAC;IACD,MAAM,OAAO,GAAG,KAAK;SACnB,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC;SAC1D,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC1B,MAAM,CAAC,OAAO,CAAC,CAAC;IAClB,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AACrD,CAAC;AAED,SAAS,gBAAgB,CACxB,KAA8B,EAC9B,GAAW;IAEX,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;IACzB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,EAAE,CAAC;IACX,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;SACnC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC;QAChC,QAAQ,CAAC,IAAI,EAAE;QACf,OAAO,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE;KACvD,CAAC;SACD,MAAM,CACN,CAAC,KAAK,EAA6B,EAAE,CACpC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CACvC,CAAC;IACH,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AACzE,CAAC;AAED,SAAS,mBAAmB,CAC3B,KAA8B,EAC9B,GAAW;IAEX,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;IACzB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,EAAE,CAAC;IACX,CAAC;IACD,MAAM,MAAM,GAA8C,EAAE,CAAC;IAC7D,KAAK,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5D,MAAM,aAAa,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;QACtC,IAAI,CAAC,aAAa,EAAE,CAAC;YACpB,SAAS;QACV,CAAC;QACD,IACC,OAAO,UAAU,KAAK,QAAQ;YAC9B,OAAO,UAAU,KAAK,QAAQ;YAC9B,OAAO,UAAU,KAAK,SAAS,EAC9B,CAAC;YACF,MAAM,CAAC,aAAa,CAAC;gBACpB,OAAO,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC;QAClE,CAAC;IACF,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAChE,CAAC;AAED,SAAS,UAAU,CAClB,KAA8B,EAC9B,GAAW;IAEX,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;IACzB,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE;QAC/C,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE;QACzB,CAAC,CAAC,EAAE,CAAC;AACP,CAAC;AAED,SAAS,UAAU,CAAC,IAAY;IAC/B,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;QAClB,OAAO,OAAO,EAAE,CAAC;IAClB,CAAC;IACD,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3B,OAAO,OAAO,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC;AACtB,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC/B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC7E,CAAC;AAED,SAAS,WAAW,CAAC,KAAc,EAAE,IAAY;IAChD,OAAO,CACN,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,MAAM,IAAI,KAAK;QACd,KAA4B,CAAC,IAAI,KAAK,IAAI,CAC3C,CAAC;AACH,CAAC","sourcesContent":["import { mkdir, readFile, rename, writeFile } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { dirname, join, resolve } from \"node:path\";\nimport { type A2AServiceConfig, normalizeA2ABaseUrl } from \"./a2a-client.js\";\nimport {\n\ttype A2APeerConnection,\n\ttype A2APeerPairingPayload,\n\ta2aPeerConnectionFromPairingPayload,\n} from \"./a2a-peer-pairing.js\";\nimport { getEnvValue, trimString } from \"./client.js\";\n\nconst DEFAULT_TIMEOUT_MS = 600_000;\nconst DEFAULT_MAX_ATTEMPTS = 1;\n\nexport interface A2APeerRegistryEntry {\n\turl: string;\n\tdisplayName?: string;\n\tagentCardUrl?: string;\n\tprotocolBinding?: string;\n\tprotocolVersion?: string;\n\ttokenEnv?: string;\n\ttokenFile?: string;\n\torganizationId?: string;\n\tworkspaceId?: string;\n\tagentId?: string;\n\tsessionId?: string;\n\tactorId?: string;\n\ttimeoutMs?: number;\n\tmaxAttempts?: number;\n\tcapabilities?: A2APeerConnection[\"capabilities\"];\n\tskills?: A2APeerConnection[\"skills\"];\n\tkeyFingerprint?: string;\n\tmetadata?: Record<string, string | number | boolean>;\n\tcreatedAt?: string;\n\tupdatedAt?: string;\n}\n\nexport interface A2APeerRegistryFile {\n\tdefaultPeer?: string;\n\ttimeoutMs?: number;\n\tmaxAttempts?: number;\n\tpeers: Record<string, A2APeerRegistryEntry>;\n}\n\nexport interface A2APeerRegistryOptions {\n\tpath?: string;\n\tnow?: Date;\n}\n\nexport interface UpsertA2APeerOptions extends A2APeerRegistryOptions {\n\tname?: string;\n\tmakeDefault?: boolean;\n\ttokenEnv?: string;\n\ttokenFile?: string;\n\tworkspaceId?: string;\n\torganizationId?: string;\n}\n\nexport interface ResolveA2APeerOptions extends A2APeerRegistryOptions {\n\ttoken?: string;\n\ttimeoutMs?: number;\n\tmaxAttempts?: number;\n}\n\nexport interface ResolvedA2APeer {\n\tname: string;\n\tentry: A2APeerRegistryEntry;\n\tconfig: A2AServiceConfig;\n}\n\nexport function getA2APeerRegistryPath(path?: string): string {\n\tconst configured =\n\t\ttrimString(path) ??\n\t\tgetEnvValue([\"MAESTRO_A2A_PEERS_FILE\", \"CODEX_A2A_PEERS_FILE\"]);\n\tif (configured) {\n\t\treturn expandHome(configured);\n\t}\n\treturn join(homedir(), \".maestro\", \"a2a\", \"peers.json\");\n}\n\nexport async function loadA2APeerRegistry(\n\toptions: A2APeerRegistryOptions = {},\n): Promise<A2APeerRegistryFile> {\n\tconst path = getA2APeerRegistryPath(options.path);\n\tlet raw: string;\n\ttry {\n\t\traw = await readFile(path, \"utf8\");\n\t} catch (error) {\n\t\tif (hasNodeCode(error, \"ENOENT\")) {\n\t\t\treturn { peers: {} };\n\t\t}\n\t\tthrow error;\n\t}\n\tconst parsed = JSON.parse(raw) as unknown;\n\tif (!isRecord(parsed)) {\n\t\tthrow new Error(`A2A peer registry at ${path} must be a JSON object`);\n\t}\n\tconst peers = isRecord(parsed.peers) ? parsed.peers : {};\n\tconst registry: A2APeerRegistryFile = {\n\t\tpeers: Object.fromEntries(\n\t\t\tObject.entries(peers).map(([name, value]) => [\n\t\t\t\tname,\n\t\t\t\tnormalizeRegistryEntry(value, `peers.${name}`),\n\t\t\t]),\n\t\t),\n\t};\n\tif (typeof parsed.defaultPeer === \"string\" && parsed.defaultPeer.trim()) {\n\t\tregistry.defaultPeer = parsed.defaultPeer.trim();\n\t}\n\tif (typeof parsed.timeoutMs === \"number\" && parsed.timeoutMs > 0) {\n\t\tregistry.timeoutMs = parsed.timeoutMs;\n\t}\n\tif (typeof parsed.maxAttempts === \"number\" && parsed.maxAttempts > 0) {\n\t\tregistry.maxAttempts = parsed.maxAttempts;\n\t}\n\treturn registry;\n}\n\nexport async function saveA2APeerRegistry(\n\tregistry: A2APeerRegistryFile,\n\toptions: A2APeerRegistryOptions = {},\n): Promise<string> {\n\tconst path = getA2APeerRegistryPath(options.path);\n\tawait mkdir(dirname(path), { recursive: true, mode: 0o700 });\n\tawait writeFile(`${path}.tmp`, `${JSON.stringify(registry, null, 2)}\\n`, {\n\t\tmode: 0o600,\n\t});\n\tawait rename(`${path}.tmp`, path);\n\treturn path;\n}\n\nexport async function upsertA2APeerFromPairingPayload(\n\tpayload: A2APeerPairingPayload,\n\toptions: UpsertA2APeerOptions = {},\n): Promise<{\n\tname: string;\n\tentry: A2APeerRegistryEntry;\n\tpath: string;\n}> {\n\tconst registry = await loadA2APeerRegistry(options);\n\tconst connection = a2aPeerConnectionFromPairingPayload(payload);\n\tconst name = normalizePeerName(options.name ?? connection.peerId);\n\tconst now = (options.now ?? new Date()).toISOString();\n\tconst previous = registry.peers[name];\n\tconst nextBaseUrl = normalizedPeerUrl(connection.baseUrl);\n\tconst {\n\t\ttokenEnv: previousTokenEnv,\n\t\ttokenFile: previousTokenFile,\n\t\tkeyFingerprint: _previousKeyFingerprint,\n\t\t...previousFields\n\t} = previous ?? {};\n\tconst identityChanged = Boolean(\n\t\tprevious &&\n\t\t\t(normalizedPeerUrl(previous.url) !== nextBaseUrl ||\n\t\t\t\tidentityFieldChanged(previous.agentCardUrl, connection.agentCardUrl) ||\n\t\t\t\tidentityFieldChanged(\n\t\t\t\t\tprevious.protocolBinding,\n\t\t\t\t\tconnection.protocolBinding,\n\t\t\t\t) ||\n\t\t\t\tidentityFieldChanged(\n\t\t\t\t\tprevious.protocolVersion,\n\t\t\t\t\tconnection.protocolVersion,\n\t\t\t\t) ||\n\t\t\t\tidentityOptionalFieldChanged(\n\t\t\t\t\tprevious.keyFingerprint,\n\t\t\t\t\tconnection.keyFingerprint,\n\t\t\t\t)),\n\t);\n\tconst entry: A2APeerRegistryEntry = {\n\t\t...previousFields,\n\t\turl: connection.baseUrl,\n\t\tdisplayName: connection.displayName,\n\t\tagentCardUrl: connection.agentCardUrl,\n\t\tprotocolBinding: connection.protocolBinding,\n\t\tprotocolVersion: connection.protocolVersion,\n\t\t...resolveUpsertTokenFields({\n\t\t\tpreviousTokenEnv,\n\t\t\tpreviousTokenFile,\n\t\t\ttokenEnv: options.tokenEnv,\n\t\t\ttokenFile: options.tokenFile,\n\t\t\tretainExisting: !identityChanged,\n\t\t}),\n\t\t...(options.organizationId\n\t\t\t? { organizationId: options.organizationId }\n\t\t\t: {}),\n\t\t...(options.workspaceId ? { workspaceId: options.workspaceId } : {}),\n\t\t...(connection.capabilities\n\t\t\t? { capabilities: connection.capabilities }\n\t\t\t: {}),\n\t\t...(connection.skills ? { skills: connection.skills } : {}),\n\t\t...(connection.keyFingerprint\n\t\t\t? { keyFingerprint: connection.keyFingerprint }\n\t\t\t: {}),\n\t\t...(connection.metadata ? { metadata: connection.metadata } : {}),\n\t\tcreatedAt: previous?.createdAt ?? now,\n\t\tupdatedAt: now,\n\t};\n\tregistry.peers[name] = entry;\n\tif (options.makeDefault || !registry.defaultPeer) {\n\t\tregistry.defaultPeer = name;\n\t}\n\tconst path = await saveA2APeerRegistry(registry, options);\n\treturn { name, entry, path };\n}\n\nexport async function listA2APeers(\n\toptions: A2APeerRegistryOptions = {},\n): Promise<{\n\tpath: string;\n\tregistry: A2APeerRegistryFile;\n}> {\n\treturn {\n\t\tpath: getA2APeerRegistryPath(options.path),\n\t\tregistry: await loadA2APeerRegistry(options),\n\t};\n}\n\nexport async function resolveA2APeer(\n\tname: string | undefined,\n\toptions: ResolveA2APeerOptions = {},\n): Promise<ResolvedA2APeer> {\n\tconst registry = await loadA2APeerRegistry(options);\n\tconst resolvedName = normalizePeerName(name ?? registry.defaultPeer);\n\tconst entry = registry.peers[resolvedName];\n\tif (!entry) {\n\t\tthrow new Error(\n\t\t\t`Unknown A2A peer \"${resolvedName}\". Run \"maestro a2a peers\" to list registered peers.`,\n\t\t);\n\t}\n\tconst token = options.token ?? (await resolvePeerToken(entry));\n\tconst config: A2AServiceConfig = {\n\t\tbaseUrl: normalizeA2ABaseUrl(entry.url),\n\t\t...(token ? { token } : {}),\n\t\t...(entry.organizationId ? { organizationId: entry.organizationId } : {}),\n\t\t...(entry.workspaceId ? { workspaceId: entry.workspaceId } : {}),\n\t\t...(entry.agentId ? { agentId: entry.agentId } : { agentId: \"maestro\" }),\n\t\t...(entry.sessionId ? { sessionId: entry.sessionId } : {}),\n\t\t...(entry.actorId ? { actorId: entry.actorId } : {}),\n\t\ttimeoutMs:\n\t\t\toptions.timeoutMs ??\n\t\t\tentry.timeoutMs ??\n\t\t\tregistry.timeoutMs ??\n\t\t\tDEFAULT_TIMEOUT_MS,\n\t\tmaxAttempts:\n\t\t\toptions.maxAttempts ??\n\t\t\tentry.maxAttempts ??\n\t\t\tregistry.maxAttempts ??\n\t\t\tDEFAULT_MAX_ATTEMPTS,\n\t};\n\treturn { name: resolvedName, entry, config };\n}\n\nexport async function resolvePeerToken(\n\tentry: Pick<A2APeerRegistryEntry, \"tokenEnv\" | \"tokenFile\">,\n): Promise<string | undefined> {\n\tif (entry.tokenEnv) {\n\t\tconst envToken = trimString(process.env[entry.tokenEnv]);\n\t\tif (envToken) {\n\t\t\treturn envToken;\n\t\t}\n\t}\n\tif (entry.tokenFile) {\n\t\treturn trimString(await readFile(expandHome(entry.tokenFile), \"utf8\"));\n\t}\n\treturn undefined;\n}\n\nexport function normalizePeerName(name: string | undefined): string {\n\tconst normalized = name?.trim();\n\tif (!normalized) {\n\t\tthrow new Error(\"A2A peer name is required\");\n\t}\n\tif (!/^[A-Za-z0-9_.-]{1,80}$/u.test(normalized)) {\n\t\tthrow new Error(\n\t\t\t\"A2A peer names may only contain letters, numbers, dots, underscores, and dashes\",\n\t\t);\n\t}\n\treturn normalized;\n}\n\nfunction resolveUpsertTokenFields(input: {\n\tpreviousTokenEnv?: string;\n\tpreviousTokenFile?: string;\n\ttokenEnv?: string;\n\ttokenFile?: string;\n\tretainExisting?: boolean;\n}): Pick<A2APeerRegistryEntry, \"tokenEnv\" | \"tokenFile\"> {\n\tconst tokenEnv = trimString(input.tokenEnv);\n\tconst tokenFile = trimString(input.tokenFile);\n\tif (tokenEnv && tokenFile) {\n\t\treturn { tokenEnv, tokenFile: expandHome(tokenFile) };\n\t}\n\tif (tokenEnv) {\n\t\treturn { tokenEnv };\n\t}\n\tif (tokenFile) {\n\t\treturn { tokenFile: expandHome(tokenFile) };\n\t}\n\tif (!input.retainExisting) {\n\t\treturn {};\n\t}\n\treturn {\n\t\t...(input.previousTokenEnv ? { tokenEnv: input.previousTokenEnv } : {}),\n\t\t...(input.previousTokenFile ? { tokenFile: input.previousTokenFile } : {}),\n\t};\n}\n\nfunction normalizedPeerUrl(url: string): string | undefined {\n\tconst peerUrl = trimString(url);\n\treturn peerUrl ? normalizeA2ABaseUrl(peerUrl) : undefined;\n}\n\nfunction identityFieldChanged(\n\tpreviousValue: string | undefined,\n\tnextValue: string | undefined,\n): boolean {\n\tconst previous = trimString(previousValue);\n\tconst next = trimString(nextValue);\n\treturn Boolean(previous && next && previous !== next);\n}\n\nfunction identityOptionalFieldChanged(\n\tpreviousValue: string | undefined,\n\tnextValue: string | undefined,\n): boolean {\n\tconst previous = trimString(previousValue);\n\tconst next = trimString(nextValue);\n\treturn previous !== next;\n}\n\nfunction normalizeRegistryEntry(\n\tinput: unknown,\n\tlabel: string,\n): A2APeerRegistryEntry {\n\tif (!isRecord(input)) {\n\t\tthrow new Error(`${label} must be an object`);\n\t}\n\tconst url = typeof input.url === \"string\" ? input.url.trim() : \"\";\n\tif (!url) {\n\t\tthrow new Error(`${label}.url is required`);\n\t}\n\treturn {\n\t\turl,\n\t\t...copyString(input, \"displayName\"),\n\t\t...copyString(input, \"agentCardUrl\"),\n\t\t...copyString(input, \"protocolBinding\"),\n\t\t...copyString(input, \"protocolVersion\"),\n\t\t...copyString(input, \"tokenEnv\"),\n\t\t...copyString(input, \"tokenFile\"),\n\t\t...copyString(input, \"organizationId\"),\n\t\t...copyString(input, \"workspaceId\"),\n\t\t...copyString(input, \"agentId\"),\n\t\t...copyString(input, \"sessionId\"),\n\t\t...copyString(input, \"actorId\"),\n\t\t...(typeof input.timeoutMs === \"number\" && input.timeoutMs > 0\n\t\t\t? { timeoutMs: input.timeoutMs }\n\t\t\t: {}),\n\t\t...(typeof input.maxAttempts === \"number\" && input.maxAttempts > 0\n\t\t\t? { maxAttempts: input.maxAttempts }\n\t\t\t: {}),\n\t\t...(isRecord(input.capabilities)\n\t\t\t? {\n\t\t\t\t\tcapabilities: {\n\t\t\t\t\t\t...(typeof input.capabilities.streaming === \"boolean\"\n\t\t\t\t\t\t\t? { streaming: input.capabilities.streaming }\n\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t\t...(typeof input.capabilities.pushNotifications === \"boolean\"\n\t\t\t\t\t\t\t? { pushNotifications: input.capabilities.pushNotifications }\n\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t\t...(typeof input.capabilities.extendedAgentCard === \"boolean\"\n\t\t\t\t\t\t\t? { extendedAgentCard: input.capabilities.extendedAgentCard }\n\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t: {}),\n\t\t...(Array.isArray(input.skills)\n\t\t\t? { skills: normalizeRegistrySkills(input.skills) }\n\t\t\t: {}),\n\t\t...copyString(input, \"keyFingerprint\"),\n\t\t...(isRecord(input.metadata)\n\t\t\t? {\n\t\t\t\t\tmetadata: input.metadata as Record<string, string | number | boolean>,\n\t\t\t\t}\n\t\t\t: {}),\n\t\t...copyString(input, \"createdAt\"),\n\t\t...copyString(input, \"updatedAt\"),\n\t};\n}\n\nfunction normalizeRegistrySkills(\n\tinput: readonly unknown[],\n): A2APeerConnection[\"skills\"] {\n\treturn input\n\t\t.filter(isRecord)\n\t\t.map((skill) => ({\n\t\t\tid: typeof skill.id === \"string\" ? skill.id : \"\",\n\t\t\tname: typeof skill.name === \"string\" ? skill.name : \"\",\n\t\t\t...copyString(skill, \"description\"),\n\t\t\t...copyStringList(skill, \"tags\"),\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...copyString(skill, \"approvalPolicyRef\"),\n\t\t\t...copyString(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\t.filter((skill) => skill.id.trim() && skill.name.trim());\n}\n\nfunction copyStringList(\n\tinput: Record<string, unknown>,\n\tkey: string,\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\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 copyString(\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 expandHome(path: string): string {\n\tif (path === \"~\") {\n\t\treturn homedir();\n\t}\n\tif (path.startsWith(\"~/\")) {\n\t\treturn resolve(homedir(), path.slice(2));\n\t}\n\treturn resolve(path);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction hasNodeCode(error: unknown, code: string): boolean {\n\treturn (\n\t\ttypeof error === \"object\" &&\n\t\terror !== null &&\n\t\t\"code\" in error &&\n\t\t(error as { code?: unknown }).code === code\n\t);\n}\n"]}
1
+ {"version":3,"file":"a2a-peer-registry.js","sourceRoot":"","sources":["../../src/platform/a2a-peer-registry.ts"],"names":[],"mappings":"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","sourcesContent":["import { mkdir, readFile, rename, writeFile } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { dirname, join, resolve } from \"node:path\";\nimport { isRecord } from \"../utils/json.js\";\nimport { type A2AServiceConfig, normalizeA2ABaseUrl } from \"./a2a-client.js\";\nimport {\n\ttype A2APeerConnection,\n\ttype A2APeerPairingPayload,\n\ta2aPeerConnectionFromPairingPayload,\n} from \"./a2a-peer-pairing.js\";\nimport { getEnvValue, trimString } from \"./client.js\";\n\nconst DEFAULT_TIMEOUT_MS = 600_000;\nconst DEFAULT_MAX_ATTEMPTS = 1;\n\nexport interface A2APeerRegistryEntry {\n\turl: string;\n\tdisplayName?: string;\n\tagentCardUrl?: string;\n\tprotocolBinding?: string;\n\tprotocolVersion?: string;\n\ttokenEnv?: string;\n\ttokenFile?: string;\n\torganizationId?: string;\n\tworkspaceId?: string;\n\tagentId?: string;\n\tsessionId?: string;\n\tactorId?: string;\n\ttimeoutMs?: number;\n\tmaxAttempts?: number;\n\tcapabilities?: A2APeerConnection[\"capabilities\"];\n\tskills?: A2APeerConnection[\"skills\"];\n\tkeyFingerprint?: string;\n\tmetadata?: Record<string, string | number | boolean>;\n\tcreatedAt?: string;\n\tupdatedAt?: string;\n}\n\nexport interface A2APeerRegistryFile {\n\tdefaultPeer?: string;\n\ttimeoutMs?: number;\n\tmaxAttempts?: number;\n\tpeers: Record<string, A2APeerRegistryEntry>;\n}\n\nexport interface A2APeerRegistryOptions {\n\tpath?: string;\n\tnow?: Date;\n}\n\nexport interface UpsertA2APeerOptions extends A2APeerRegistryOptions {\n\tname?: string;\n\tmakeDefault?: boolean;\n\ttokenEnv?: string;\n\ttokenFile?: string;\n\tworkspaceId?: string;\n\torganizationId?: string;\n}\n\nexport interface ResolveA2APeerOptions extends A2APeerRegistryOptions {\n\ttoken?: string;\n\ttimeoutMs?: number;\n\tmaxAttempts?: number;\n}\n\nexport interface ResolvedA2APeer {\n\tname: string;\n\tentry: A2APeerRegistryEntry;\n\tconfig: A2AServiceConfig;\n}\n\nexport function getA2APeerRegistryPath(path?: string): string {\n\tconst configured =\n\t\ttrimString(path) ??\n\t\tgetEnvValue([\"MAESTRO_A2A_PEERS_FILE\", \"CODEX_A2A_PEERS_FILE\"]);\n\tif (configured) {\n\t\treturn expandHome(configured);\n\t}\n\treturn join(homedir(), \".maestro\", \"a2a\", \"peers.json\");\n}\n\nexport async function loadA2APeerRegistry(\n\toptions: A2APeerRegistryOptions = {},\n): Promise<A2APeerRegistryFile> {\n\tconst path = getA2APeerRegistryPath(options.path);\n\tlet raw: string;\n\ttry {\n\t\traw = await readFile(path, \"utf8\");\n\t} catch (error) {\n\t\tif (hasNodeCode(error, \"ENOENT\")) {\n\t\t\treturn { peers: {} };\n\t\t}\n\t\tthrow error;\n\t}\n\tconst parsed = JSON.parse(raw) as unknown;\n\tif (!isRecord(parsed)) {\n\t\tthrow new Error(`A2A peer registry at ${path} must be a JSON object`);\n\t}\n\tconst peers = isRecord(parsed.peers) ? parsed.peers : {};\n\tconst registry: A2APeerRegistryFile = {\n\t\tpeers: Object.fromEntries(\n\t\t\tObject.entries(peers).map(([name, value]) => [\n\t\t\t\tname,\n\t\t\t\tnormalizeRegistryEntry(value, `peers.${name}`),\n\t\t\t]),\n\t\t),\n\t};\n\tif (typeof parsed.defaultPeer === \"string\" && parsed.defaultPeer.trim()) {\n\t\tregistry.defaultPeer = parsed.defaultPeer.trim();\n\t}\n\tif (typeof parsed.timeoutMs === \"number\" && parsed.timeoutMs > 0) {\n\t\tregistry.timeoutMs = parsed.timeoutMs;\n\t}\n\tif (typeof parsed.maxAttempts === \"number\" && parsed.maxAttempts > 0) {\n\t\tregistry.maxAttempts = parsed.maxAttempts;\n\t}\n\treturn registry;\n}\n\nexport async function saveA2APeerRegistry(\n\tregistry: A2APeerRegistryFile,\n\toptions: A2APeerRegistryOptions = {},\n): Promise<string> {\n\tconst path = getA2APeerRegistryPath(options.path);\n\tawait mkdir(dirname(path), { recursive: true, mode: 0o700 });\n\tawait writeFile(`${path}.tmp`, `${JSON.stringify(registry, null, 2)}\\n`, {\n\t\tmode: 0o600,\n\t});\n\tawait rename(`${path}.tmp`, path);\n\treturn path;\n}\n\nexport async function upsertA2APeerFromPairingPayload(\n\tpayload: A2APeerPairingPayload,\n\toptions: UpsertA2APeerOptions = {},\n): Promise<{\n\tname: string;\n\tentry: A2APeerRegistryEntry;\n\tpath: string;\n}> {\n\tconst registry = await loadA2APeerRegistry(options);\n\tconst connection = a2aPeerConnectionFromPairingPayload(payload);\n\tconst name = normalizePeerName(options.name ?? connection.peerId);\n\tconst now = (options.now ?? new Date()).toISOString();\n\tconst previous = registry.peers[name];\n\tconst nextBaseUrl = normalizedPeerUrl(connection.baseUrl);\n\tconst {\n\t\ttokenEnv: previousTokenEnv,\n\t\ttokenFile: previousTokenFile,\n\t\tkeyFingerprint: _previousKeyFingerprint,\n\t\t...previousFields\n\t} = previous ?? {};\n\tconst identityChanged = Boolean(\n\t\tprevious &&\n\t\t\t(normalizedPeerUrl(previous.url) !== nextBaseUrl ||\n\t\t\t\tidentityFieldChanged(previous.agentCardUrl, connection.agentCardUrl) ||\n\t\t\t\tidentityFieldChanged(\n\t\t\t\t\tprevious.protocolBinding,\n\t\t\t\t\tconnection.protocolBinding,\n\t\t\t\t) ||\n\t\t\t\tidentityFieldChanged(\n\t\t\t\t\tprevious.protocolVersion,\n\t\t\t\t\tconnection.protocolVersion,\n\t\t\t\t) ||\n\t\t\t\tidentityOptionalFieldChanged(\n\t\t\t\t\tprevious.keyFingerprint,\n\t\t\t\t\tconnection.keyFingerprint,\n\t\t\t\t)),\n\t);\n\tconst entry: A2APeerRegistryEntry = {\n\t\t...previousFields,\n\t\turl: connection.baseUrl,\n\t\tdisplayName: connection.displayName,\n\t\tagentCardUrl: connection.agentCardUrl,\n\t\tprotocolBinding: connection.protocolBinding,\n\t\tprotocolVersion: connection.protocolVersion,\n\t\t...resolveUpsertTokenFields({\n\t\t\tpreviousTokenEnv,\n\t\t\tpreviousTokenFile,\n\t\t\ttokenEnv: options.tokenEnv,\n\t\t\ttokenFile: options.tokenFile,\n\t\t\tretainExisting: !identityChanged,\n\t\t}),\n\t\t...(options.organizationId\n\t\t\t? { organizationId: options.organizationId }\n\t\t\t: {}),\n\t\t...(options.workspaceId ? { workspaceId: options.workspaceId } : {}),\n\t\t...(connection.capabilities\n\t\t\t? { capabilities: connection.capabilities }\n\t\t\t: {}),\n\t\t...(connection.skills ? { skills: connection.skills } : {}),\n\t\t...(connection.keyFingerprint\n\t\t\t? { keyFingerprint: connection.keyFingerprint }\n\t\t\t: {}),\n\t\t...(connection.metadata ? { metadata: connection.metadata } : {}),\n\t\tcreatedAt: previous?.createdAt ?? now,\n\t\tupdatedAt: now,\n\t};\n\tregistry.peers[name] = entry;\n\tif (options.makeDefault || !registry.defaultPeer) {\n\t\tregistry.defaultPeer = name;\n\t}\n\tconst path = await saveA2APeerRegistry(registry, options);\n\treturn { name, entry, path };\n}\n\nexport async function listA2APeers(\n\toptions: A2APeerRegistryOptions = {},\n): Promise<{\n\tpath: string;\n\tregistry: A2APeerRegistryFile;\n}> {\n\treturn {\n\t\tpath: getA2APeerRegistryPath(options.path),\n\t\tregistry: await loadA2APeerRegistry(options),\n\t};\n}\n\nexport async function resolveA2APeer(\n\tname: string | undefined,\n\toptions: ResolveA2APeerOptions = {},\n): Promise<ResolvedA2APeer> {\n\tconst registry = await loadA2APeerRegistry(options);\n\tconst resolvedName = normalizePeerName(name ?? registry.defaultPeer);\n\tconst entry = registry.peers[resolvedName];\n\tif (!entry) {\n\t\tthrow new Error(\n\t\t\t`Unknown A2A peer \"${resolvedName}\". Run \"maestro a2a peers\" to list registered peers.`,\n\t\t);\n\t}\n\tconst token = options.token ?? (await resolvePeerToken(entry));\n\tconst config: A2AServiceConfig = {\n\t\tbaseUrl: normalizeA2ABaseUrl(entry.url),\n\t\t...(token ? { token } : {}),\n\t\t...(entry.organizationId ? { organizationId: entry.organizationId } : {}),\n\t\t...(entry.workspaceId ? { workspaceId: entry.workspaceId } : {}),\n\t\t...(entry.agentId ? { agentId: entry.agentId } : { agentId: \"maestro\" }),\n\t\t...(entry.sessionId ? { sessionId: entry.sessionId } : {}),\n\t\t...(entry.actorId ? { actorId: entry.actorId } : {}),\n\t\ttimeoutMs:\n\t\t\toptions.timeoutMs ??\n\t\t\tentry.timeoutMs ??\n\t\t\tregistry.timeoutMs ??\n\t\t\tDEFAULT_TIMEOUT_MS,\n\t\tmaxAttempts:\n\t\t\toptions.maxAttempts ??\n\t\t\tentry.maxAttempts ??\n\t\t\tregistry.maxAttempts ??\n\t\t\tDEFAULT_MAX_ATTEMPTS,\n\t};\n\treturn { name: resolvedName, entry, config };\n}\n\nexport async function resolvePeerToken(\n\tentry: Pick<A2APeerRegistryEntry, \"tokenEnv\" | \"tokenFile\">,\n): Promise<string | undefined> {\n\tif (entry.tokenEnv) {\n\t\tconst envToken = trimString(process.env[entry.tokenEnv]);\n\t\tif (envToken) {\n\t\t\treturn envToken;\n\t\t}\n\t}\n\tif (entry.tokenFile) {\n\t\treturn trimString(await readFile(expandHome(entry.tokenFile), \"utf8\"));\n\t}\n\treturn undefined;\n}\n\nexport function normalizePeerName(name: string | undefined): string {\n\tconst normalized = name?.trim();\n\tif (!normalized) {\n\t\tthrow new Error(\"A2A peer name is required\");\n\t}\n\tif (!/^[A-Za-z0-9_.-]{1,80}$/u.test(normalized)) {\n\t\tthrow new Error(\n\t\t\t\"A2A peer names may only contain letters, numbers, dots, underscores, and dashes\",\n\t\t);\n\t}\n\treturn normalized;\n}\n\nfunction resolveUpsertTokenFields(input: {\n\tpreviousTokenEnv?: string;\n\tpreviousTokenFile?: string;\n\ttokenEnv?: string;\n\ttokenFile?: string;\n\tretainExisting?: boolean;\n}): Pick<A2APeerRegistryEntry, \"tokenEnv\" | \"tokenFile\"> {\n\tconst tokenEnv = trimString(input.tokenEnv);\n\tconst tokenFile = trimString(input.tokenFile);\n\tif (tokenEnv && tokenFile) {\n\t\treturn { tokenEnv, tokenFile: expandHome(tokenFile) };\n\t}\n\tif (tokenEnv) {\n\t\treturn { tokenEnv };\n\t}\n\tif (tokenFile) {\n\t\treturn { tokenFile: expandHome(tokenFile) };\n\t}\n\tif (!input.retainExisting) {\n\t\treturn {};\n\t}\n\treturn {\n\t\t...(input.previousTokenEnv ? { tokenEnv: input.previousTokenEnv } : {}),\n\t\t...(input.previousTokenFile ? { tokenFile: input.previousTokenFile } : {}),\n\t};\n}\n\nfunction normalizedPeerUrl(url: string): string | undefined {\n\tconst peerUrl = trimString(url);\n\treturn peerUrl ? normalizeA2ABaseUrl(peerUrl) : undefined;\n}\n\nfunction identityFieldChanged(\n\tpreviousValue: string | undefined,\n\tnextValue: string | undefined,\n): boolean {\n\tconst previous = trimString(previousValue);\n\tconst next = trimString(nextValue);\n\treturn Boolean(previous && next && previous !== next);\n}\n\nfunction identityOptionalFieldChanged(\n\tpreviousValue: string | undefined,\n\tnextValue: string | undefined,\n): boolean {\n\tconst previous = trimString(previousValue);\n\tconst next = trimString(nextValue);\n\treturn previous !== next;\n}\n\nfunction normalizeRegistryEntry(\n\tinput: unknown,\n\tlabel: string,\n): A2APeerRegistryEntry {\n\tif (!isRecord(input)) {\n\t\tthrow new Error(`${label} must be an object`);\n\t}\n\tconst url = typeof input.url === \"string\" ? input.url.trim() : \"\";\n\tif (!url) {\n\t\tthrow new Error(`${label}.url is required`);\n\t}\n\treturn {\n\t\turl,\n\t\t...copyString(input, \"displayName\"),\n\t\t...copyString(input, \"agentCardUrl\"),\n\t\t...copyString(input, \"protocolBinding\"),\n\t\t...copyString(input, \"protocolVersion\"),\n\t\t...copyString(input, \"tokenEnv\"),\n\t\t...copyString(input, \"tokenFile\"),\n\t\t...copyString(input, \"organizationId\"),\n\t\t...copyString(input, \"workspaceId\"),\n\t\t...copyString(input, \"agentId\"),\n\t\t...copyString(input, \"sessionId\"),\n\t\t...copyString(input, \"actorId\"),\n\t\t...(typeof input.timeoutMs === \"number\" && input.timeoutMs > 0\n\t\t\t? { timeoutMs: input.timeoutMs }\n\t\t\t: {}),\n\t\t...(typeof input.maxAttempts === \"number\" && input.maxAttempts > 0\n\t\t\t? { maxAttempts: input.maxAttempts }\n\t\t\t: {}),\n\t\t...(isRecord(input.capabilities)\n\t\t\t? {\n\t\t\t\t\tcapabilities: {\n\t\t\t\t\t\t...(typeof input.capabilities.streaming === \"boolean\"\n\t\t\t\t\t\t\t? { streaming: input.capabilities.streaming }\n\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t\t...(typeof input.capabilities.pushNotifications === \"boolean\"\n\t\t\t\t\t\t\t? { pushNotifications: input.capabilities.pushNotifications }\n\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t\t...(typeof input.capabilities.extendedAgentCard === \"boolean\"\n\t\t\t\t\t\t\t? { extendedAgentCard: input.capabilities.extendedAgentCard }\n\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t: {}),\n\t\t...(Array.isArray(input.skills)\n\t\t\t? { skills: normalizeRegistrySkills(input.skills) }\n\t\t\t: {}),\n\t\t...copyString(input, \"keyFingerprint\"),\n\t\t...(isRecord(input.metadata)\n\t\t\t? {\n\t\t\t\t\tmetadata: input.metadata as Record<string, string | number | boolean>,\n\t\t\t\t}\n\t\t\t: {}),\n\t\t...copyString(input, \"createdAt\"),\n\t\t...copyString(input, \"updatedAt\"),\n\t};\n}\n\nfunction normalizeRegistrySkills(\n\tinput: readonly unknown[],\n): A2APeerConnection[\"skills\"] {\n\treturn input\n\t\t.filter(isRecord)\n\t\t.map((skill) => ({\n\t\t\tid: typeof skill.id === \"string\" ? skill.id : \"\",\n\t\t\tname: typeof skill.name === \"string\" ? skill.name : \"\",\n\t\t\t...copyString(skill, \"description\"),\n\t\t\t...copyStringList(skill, \"tags\"),\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...copyString(skill, \"approvalPolicyRef\"),\n\t\t\t...copyString(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\t.filter((skill) => skill.id.trim() && skill.name.trim());\n}\n\nfunction copyStringList(\n\tinput: Record<string, unknown>,\n\tkey: string,\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\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 copyString(\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 expandHome(path: string): string {\n\tif (path === \"~\") {\n\t\treturn homedir();\n\t}\n\tif (path.startsWith(\"~/\")) {\n\t\treturn resolve(homedir(), path.slice(2));\n\t}\n\treturn resolve(path);\n}\n\nfunction hasNodeCode(error: unknown, code: string): boolean {\n\treturn (\n\t\ttypeof error === \"object\" &&\n\t\terror !== null &&\n\t\t\"code\" in error &&\n\t\t(error as { code?: unknown }).code === code\n\t);\n}\n"]}
@@ -32,6 +32,19 @@ export interface A2ATaskLedgerEntry {
32
32
  export interface A2ATaskLedgerFile {
33
33
  tasks: A2ATaskLedgerEntry[];
34
34
  }
35
+ export type A2ATaskEvidenceGap = "terminal-completion" | "work-graph" | "response-artifact" | "transcript";
36
+ export interface A2ATaskLedgerRollup {
37
+ taskCount: number;
38
+ delegatedTaskCount: number;
39
+ completedTaskCount: number;
40
+ failedTaskCount: number;
41
+ actionRequiredTaskCount: number;
42
+ runningTaskCount: number;
43
+ workGraphTaskCount: number;
44
+ transcriptMessageCount: number;
45
+ auditReadyTaskCount: number;
46
+ evidenceGapCount: number;
47
+ }
35
48
  export interface A2ATaskLedgerOptions {
36
49
  path?: string;
37
50
  now?: Date;
@@ -78,9 +91,16 @@ export declare function updateA2ATaskInLedger(input: UpdateA2ATaskInput): Promis
78
91
  export declare function listA2ATaskEntries(ledger: A2ATaskLedgerFile, options?: {
79
92
  peer?: string;
80
93
  }): A2ATaskLedgerEntry[];
94
+ export declare function summarizeA2ATaskLedger(tasks: readonly A2ATaskLedgerEntry[]): A2ATaskLedgerRollup;
95
+ export declare function isAuditReadyA2ATask(task: A2ATaskLedgerEntry): boolean;
96
+ export declare function isAuditReadyA2ADelegationTask(task: A2ATaskLedgerEntry): boolean;
97
+ export declare function a2aTaskEvidenceGaps(task: A2ATaskLedgerEntry): A2ATaskEvidenceGap[];
81
98
  export declare function latestA2ATaskForPeer(ledger: A2ATaskLedgerFile, peer: string): A2ATaskLedgerEntry | undefined;
82
99
  export declare function extractA2ATaskText(task: A2ATask): string | undefined;
83
100
  export declare function isTerminalA2AState(state: string): boolean;
101
+ export declare function normalizeA2AState(state: string): string;
102
+ export declare function isCompletedA2AState(state: string): boolean;
103
+ export declare function isFailedA2AState(state: string): boolean;
84
104
  export declare function isFinalA2AState(state: string): boolean;
85
105
  export declare function isActionRequiredA2AState(state: string): boolean;
86
106
  //# sourceMappingURL=a2a-task-ledger.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"a2a-task-ledger.d.ts","sourceRoot":"","sources":["../../src/platform/a2a-task-ledger.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"a2a-task-ledger.d.ts","sourceRoot":"","sources":["../../src/platform/a2a-task-ledger.ts"],"names":[],"mappings":"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"}
@@ -2,10 +2,12 @@ import { randomUUID } from "node:crypto";
2
2
  import { mkdir, readFile, rename, rm, stat, writeFile } from "node:fs/promises";
3
3
  import { homedir } from "node:os";
4
4
  import { dirname, join } from "node:path";
5
+ import { isRecord } from "../utils/json.js";
5
6
  import { extractA2AWorkGraphMetadata, normalizeA2AWorkGraphMetadata, } from "./a2a-work-graph.js";
6
7
  import { getEnvValue, trimString } from "./client.js";
7
- const FINAL_STATE_PATTERN = /(COMPLETED|FAILED|CANCELED|CANCELLED|REJECTED)/u;
8
- const ACTION_REQUIRED_STATE_PATTERN = /(INPUT_REQUIRED|AUTH_REQUIRED)/u;
8
+ const COMPLETED_STATE_PATTERN = /^(?:(?:TASK_)?STATE_)?(?:COMPLETED|SUCCEEDED|SUCCESS)$/u;
9
+ const FAILED_STATE_PATTERN = /^(?:(?:TASK_)?STATE_)?(?:FAILED|CANCELED|CANCELLED|REJECTED)$/u;
10
+ const ACTION_REQUIRED_STATE_PATTERN = /^(?:(?:TASK_)?STATE_)?(?:INPUT_REQUIRED|AUTH_REQUIRED)$/u;
9
11
  const LEDGER_LOCK_RETRY_MS = 25;
10
12
  const LEDGER_LOCK_HEARTBEAT_MS = 10_000;
11
13
  const LEDGER_LOCK_STALE_MS = 30_000;
@@ -389,6 +391,75 @@ export function listA2ATaskEntries(ledger, options = {}) {
389
391
  .filter((entry) => !peer || entry.peer === peer)
390
392
  .sort((left, right) => right.updatedAt.localeCompare(left.updatedAt));
391
393
  }
394
+ export function summarizeA2ATaskLedger(tasks) {
395
+ const rollup = {
396
+ taskCount: tasks.length,
397
+ delegatedTaskCount: 0,
398
+ completedTaskCount: 0,
399
+ failedTaskCount: 0,
400
+ actionRequiredTaskCount: 0,
401
+ runningTaskCount: 0,
402
+ workGraphTaskCount: 0,
403
+ transcriptMessageCount: 0,
404
+ auditReadyTaskCount: 0,
405
+ evidenceGapCount: 0,
406
+ };
407
+ for (const task of tasks) {
408
+ if (task.kind === "delegation") {
409
+ rollup.delegatedTaskCount += 1;
410
+ }
411
+ if (isCompletedA2AState(task.state)) {
412
+ rollup.completedTaskCount += 1;
413
+ }
414
+ else if (isFailedA2AState(task.state)) {
415
+ rollup.failedTaskCount += 1;
416
+ }
417
+ else if (isActionRequiredA2AState(task.state)) {
418
+ rollup.actionRequiredTaskCount += 1;
419
+ }
420
+ else {
421
+ rollup.runningTaskCount += 1;
422
+ }
423
+ if (task.workGraph) {
424
+ rollup.workGraphTaskCount += 1;
425
+ }
426
+ rollup.transcriptMessageCount += task.transcript.length;
427
+ const gaps = a2aTaskEvidenceGaps(task);
428
+ rollup.evidenceGapCount += gaps.length;
429
+ if (task.kind === "delegation") {
430
+ if (gaps.length === 0) {
431
+ rollup.auditReadyTaskCount += 1;
432
+ }
433
+ }
434
+ }
435
+ return rollup;
436
+ }
437
+ export function isAuditReadyA2ATask(task) {
438
+ return a2aTaskEvidenceGaps(task).length === 0;
439
+ }
440
+ export function isAuditReadyA2ADelegationTask(task) {
441
+ return task.kind === "delegation" && isAuditReadyA2ATask(task);
442
+ }
443
+ export function a2aTaskEvidenceGaps(task) {
444
+ const gaps = [];
445
+ if (!isCompletedA2AState(task.state)) {
446
+ gaps.push("terminal-completion");
447
+ }
448
+ if (!task.workGraph) {
449
+ gaps.push("work-graph");
450
+ }
451
+ if (!trimString(task.responseText)) {
452
+ const hasAgentTranscript = task.transcript.some((entry) => entry.role === "agent" && Boolean(trimString(entry.text)));
453
+ if (!hasAgentTranscript) {
454
+ gaps.push("response-artifact");
455
+ }
456
+ }
457
+ const transcriptRoles = new Set(task.transcript.map((entry) => entry.role.toLowerCase()));
458
+ if (!transcriptRoles.has("user") || !transcriptRoles.has("agent")) {
459
+ gaps.push("transcript");
460
+ }
461
+ return gaps;
462
+ }
392
463
  export function latestA2ATaskForPeer(ledger, peer) {
393
464
  return listA2ATaskEntries(ledger, { peer })[0];
394
465
  }
@@ -430,18 +501,33 @@ function shouldAppendAgentTranscript(entry, response) {
430
501
  export function isTerminalA2AState(state) {
431
502
  return isFinalA2AState(state) || isActionRequiredA2AState(state);
432
503
  }
504
+ export function normalizeA2AState(state) {
505
+ return state
506
+ .trim()
507
+ .toUpperCase()
508
+ .replace(/[\s-]+/gu, "_");
509
+ }
510
+ export function isCompletedA2AState(state) {
511
+ return COMPLETED_STATE_PATTERN.test(normalizeA2AState(state));
512
+ }
513
+ export function isFailedA2AState(state) {
514
+ return FAILED_STATE_PATTERN.test(normalizeA2AState(state));
515
+ }
433
516
  export function isFinalA2AState(state) {
434
- return FINAL_STATE_PATTERN.test(state.toUpperCase().replace(/[\s-]+/gu, "_"));
517
+ return isCompletedA2AState(state) || isFailedA2AState(state);
435
518
  }
436
519
  export function isActionRequiredA2AState(state) {
437
- return ACTION_REQUIRED_STATE_PATTERN.test(state.toUpperCase().replace(/[\s-]+/gu, "_"));
520
+ return ACTION_REQUIRED_STATE_PATTERN.test(normalizeA2AState(state));
438
521
  }
439
522
  function firstMessageText(message) {
440
523
  return message?.parts.map((part) => trimString(part.text)).find(Boolean);
441
524
  }
442
525
  function isAgentMessage(message) {
443
- const role = message.role.toUpperCase();
444
- return role === "ROLE_AGENT" || role === "AGENT";
526
+ return isAgentRole(message.role);
527
+ }
528
+ function isAgentRole(role) {
529
+ const normalizedRole = role.toUpperCase();
530
+ return normalizedRole === "ROLE_AGENT" || normalizedRole === "AGENT";
445
531
  }
446
532
  function latestAgentMessageInHistory(history) {
447
533
  if (!history) {
@@ -499,17 +585,94 @@ function normalizeLedgerEntry(input, path) {
499
585
  if (isRecord(input.metadata)) {
500
586
  entry.metadata = cleanMetadata(input.metadata);
501
587
  }
502
- const workGraph = normalizeA2AWorkGraphMetadata(input.workGraph);
588
+ const embeddedTask = isRecord(input.a2aTask) ? input.a2aTask : undefined;
589
+ if (embeddedTask) {
590
+ const authoritativeTranscriptState = stringValue(entry.state);
591
+ entry.transcript = mergeTranscriptEntries(entry.transcript, transcriptFromA2AHistory(embeddedTask, updatedAt, authoritativeTranscriptState));
592
+ }
593
+ if (!entry.responseText) {
594
+ entry.responseText =
595
+ latestAgentTranscriptText(transcript) ??
596
+ latestAgentTranscriptText(entry.transcript);
597
+ }
598
+ if (!entry.responseText && embeddedTask) {
599
+ const response = extractA2ATaskResponse(embeddedTask);
600
+ if (response?.text) {
601
+ entry.responseText = response.text;
602
+ }
603
+ }
604
+ const embeddedWorkGraph = isRecord(embeddedTask?.metadata)
605
+ ? embeddedTask.metadata.workGraph
606
+ : undefined;
607
+ const workGraph = normalizeA2AWorkGraphMetadata(input.workGraph) ??
608
+ normalizeA2AWorkGraphMetadata(embeddedWorkGraph);
503
609
  if (workGraph) {
504
610
  entry.workGraph = workGraph;
505
611
  }
506
612
  return entry;
507
613
  }
614
+ function transcriptFromA2AHistory(task, fallbackAt, authoritativeState) {
615
+ return (task.history ?? [])
616
+ .map((message) => {
617
+ const text = firstMessageText(message);
618
+ if (!text) {
619
+ return undefined;
620
+ }
621
+ const role = isAgentMessage(message) ? "agent" : "user";
622
+ const entry = {
623
+ at: isRecord(message)
624
+ ? (stringValue(message.at) ?? fallbackAt)
625
+ : fallbackAt,
626
+ role,
627
+ text,
628
+ };
629
+ const messageId = stringValue(message.messageId);
630
+ if (messageId) {
631
+ entry.messageId = messageId;
632
+ }
633
+ if (role === "agent") {
634
+ const state = authoritativeState ?? stringValue(task.status?.state);
635
+ if (state) {
636
+ entry.state = state;
637
+ }
638
+ }
639
+ return entry;
640
+ })
641
+ .filter((entry) => Boolean(entry));
642
+ }
643
+ function latestAgentTranscriptText(transcript) {
644
+ return [...transcript]
645
+ .reverse()
646
+ .find((entry) => entry.role === "agent" && Boolean(trimString(entry.text)))
647
+ ?.text;
648
+ }
649
+ function mergeTranscriptEntries(base, extra) {
650
+ const merged = [...base];
651
+ for (const entry of extra) {
652
+ if (!transcriptHasMatchingEntry(merged, entry)) {
653
+ merged.push(entry);
654
+ }
655
+ }
656
+ return merged;
657
+ }
658
+ function transcriptHasMatchingEntry(entries, candidate) {
659
+ if (candidate.messageId) {
660
+ const idMatch = entries.find((entry) => entry.messageId === candidate.messageId);
661
+ if (idMatch) {
662
+ return true;
663
+ }
664
+ }
665
+ return entries.some((entry) => transcriptEntriesHaveSameRoleText(entry, candidate));
666
+ }
667
+ function transcriptEntriesHaveSameRoleText(entry, candidate) {
668
+ return (entry.role === candidate.role &&
669
+ trimString(entry.text) === trimString(candidate.text));
670
+ }
508
671
  function normalizeTranscriptEntry(input, path) {
509
672
  if (!isRecord(input)) {
510
673
  throw new Error(`A2A task ledger ${path} must be a JSON object`);
511
674
  }
512
- const role = input.role === "agent" ? "agent" : "user";
675
+ const role = normalizeTranscriptRole(input.role);
513
676
  const entry = {
514
677
  at: requiredString(input.at, `${path}.at`),
515
678
  role,
@@ -523,6 +686,14 @@ function normalizeTranscriptEntry(input, path) {
523
686
  }
524
687
  return entry;
525
688
  }
689
+ function normalizeTranscriptRole(input) {
690
+ const normalized = typeof input === "string"
691
+ ? input.toUpperCase().replace(/[\s-]+/gu, "_")
692
+ : "";
693
+ return normalized === "AGENT" || normalized === "ROLE_AGENT"
694
+ ? "agent"
695
+ : "user";
696
+ }
526
697
  function cleanMetadata(input) {
527
698
  if (!input) {
528
699
  return undefined;
@@ -544,6 +715,9 @@ function mergeLedgerMetadata(...inputs) {
544
715
  }
545
716
  function isSecretLikeKey(key) {
546
717
  const normalized = key.toLowerCase().replace(/[-_]/gu, "");
718
+ if (isTokenMetricKey(normalized)) {
719
+ return false;
720
+ }
547
721
  return (normalized === "authorization" ||
548
722
  normalized === "token" ||
549
723
  normalized.endsWith("token") ||
@@ -557,6 +731,31 @@ function isSecretLikeKey(key) {
557
731
  normalized.endsWith("credentials") ||
558
732
  normalized === "bearer");
559
733
  }
734
+ function isTokenMetricKey(normalized) {
735
+ return TOKEN_METRIC_METADATA_KEYS.has(normalized);
736
+ }
737
+ const TOKEN_METRIC_METADATA_KEYS = new Set([
738
+ "totaltoken",
739
+ "totaltokens",
740
+ "inputtoken",
741
+ "inputtokens",
742
+ "outputtoken",
743
+ "outputtokens",
744
+ "cachetoken",
745
+ "cachetokens",
746
+ "cachereadtoken",
747
+ "cachereadtokens",
748
+ "cachewritetoken",
749
+ "cachewritetokens",
750
+ "prompttoken",
751
+ "prompttokens",
752
+ "completiontoken",
753
+ "completiontokens",
754
+ "maxtoken",
755
+ "maxtokens",
756
+ "tokencount",
757
+ "tokenscount",
758
+ ]);
560
759
  function stringValue(input) {
561
760
  return typeof input === "string" ? trimString(input) : undefined;
562
761
  }
@@ -578,9 +777,6 @@ function hasNodeCode(error, code) {
578
777
  function sleep(ms) {
579
778
  return new Promise((resolve) => setTimeout(resolve, ms));
580
779
  }
581
- function isRecord(value) {
582
- return typeof value === "object" && value !== null && !Array.isArray(value);
583
- }
584
780
  function fail(message) {
585
781
  throw new Error(message);
586
782
  }