@evalops/maestro 0.10.17 → 0.10.20

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 (930) hide show
  1. package/README.md +56 -1
  2. package/dist/agent/action-approval.d.ts +12 -2
  3. package/dist/agent/action-approval.d.ts.map +1 -1
  4. package/dist/agent/action-approval.js +19 -32
  5. package/dist/agent/action-approval.js.map +1 -1
  6. package/dist/agent/agent.d.ts +1 -0
  7. package/dist/agent/agent.d.ts.map +1 -1
  8. package/dist/agent/agent.js +26 -0
  9. package/dist/agent/agent.js.map +1 -1
  10. package/dist/agent/compaction.d.ts +2 -0
  11. package/dist/agent/compaction.d.ts.map +1 -1
  12. package/dist/agent/compaction.js +4 -2
  13. package/dist/agent/compaction.js.map +1 -1
  14. package/dist/agent/index.d.ts +1 -1
  15. package/dist/agent/index.d.ts.map +1 -1
  16. package/dist/agent/index.js +1 -1
  17. package/dist/agent/index.js.map +1 -1
  18. package/dist/agent/modes.d.ts +56 -4
  19. package/dist/agent/modes.d.ts.map +1 -1
  20. package/dist/agent/modes.js +163 -2
  21. package/dist/agent/modes.js.map +1 -1
  22. package/dist/agent/prompt-recovery.d.ts.map +1 -1
  23. package/dist/agent/prompt-recovery.js +1 -3
  24. package/dist/agent/prompt-recovery.js.map +1 -1
  25. package/dist/agent/providers/anthropic.d.ts.map +1 -1
  26. package/dist/agent/providers/anthropic.js +9 -1
  27. package/dist/agent/providers/anthropic.js.map +1 -1
  28. package/dist/agent/providers/codex-app-server.d.ts +12 -0
  29. package/dist/agent/providers/codex-app-server.d.ts.map +1 -0
  30. package/dist/agent/providers/codex-app-server.js +788 -0
  31. package/dist/agent/providers/codex-app-server.js.map +1 -0
  32. package/dist/agent/providers/google-gemini-cli.js +14 -3
  33. package/dist/agent/providers/google.js +22 -3
  34. package/dist/agent/providers/scripted.d.ts +11 -0
  35. package/dist/agent/providers/scripted.d.ts.map +1 -0
  36. package/dist/agent/providers/scripted.js +399 -0
  37. package/dist/agent/providers/scripted.js.map +1 -0
  38. package/dist/agent/providers/vertex.js +14 -3
  39. package/dist/agent/scenario-source.d.ts +19 -0
  40. package/dist/agent/scenario-source.d.ts.map +1 -0
  41. package/dist/agent/scenario-source.js +112 -0
  42. package/dist/agent/scenario-source.js.map +1 -0
  43. package/dist/agent/subagent-specs.d.ts +1 -1
  44. package/dist/agent/subagent-specs.js +1 -1
  45. package/dist/agent/subagent-specs.js.map +1 -1
  46. package/dist/agent/swarm/executor.d.ts +25 -0
  47. package/dist/agent/swarm/executor.d.ts.map +1 -1
  48. package/dist/agent/swarm/executor.js +795 -20
  49. package/dist/agent/swarm/executor.js.map +1 -1
  50. package/dist/agent/swarm/runtime-events.d.ts +11 -0
  51. package/dist/agent/swarm/runtime-events.d.ts.map +1 -0
  52. package/dist/agent/swarm/runtime-events.js +26 -0
  53. package/dist/agent/swarm/runtime-events.js.map +1 -0
  54. package/dist/agent/swarm/types.d.ts +78 -0
  55. package/dist/agent/swarm/types.d.ts.map +1 -1
  56. package/dist/agent/swarm/types.js.map +1 -1
  57. package/dist/agent/tracing.d.ts +1 -1
  58. package/dist/agent/tracing.d.ts.map +1 -1
  59. package/dist/agent/tracing.js +17 -9
  60. package/dist/agent/tracing.js.map +1 -1
  61. package/dist/agent/transport/create-provider-stream.d.ts.map +1 -1
  62. package/dist/agent/transport/create-provider-stream.js +14 -0
  63. package/dist/agent/transport/create-provider-stream.js.map +1 -1
  64. package/dist/agent/transport/stable-stringify.d.ts +2 -0
  65. package/dist/agent/transport/stable-stringify.d.ts.map +1 -0
  66. package/dist/agent/transport/stable-stringify.js +14 -0
  67. package/dist/agent/transport/stable-stringify.js.map +1 -0
  68. package/dist/agent/transport/tool-execution-bridge.d.ts.map +1 -1
  69. package/dist/agent/transport/tool-execution-bridge.js +2 -15
  70. package/dist/agent/transport/tool-execution-bridge.js.map +1 -1
  71. package/dist/agent/transport/tool-safety-pipeline.d.ts +5 -1
  72. package/dist/agent/transport/tool-safety-pipeline.d.ts.map +1 -1
  73. package/dist/agent/transport/tool-safety-pipeline.js +184 -36
  74. package/dist/agent/transport/tool-safety-pipeline.js.map +1 -1
  75. package/dist/agent/transport.d.ts +8 -0
  76. package/dist/agent/transport.d.ts.map +1 -1
  77. package/dist/agent/transport.js +1613 -68
  78. package/dist/agent/transport.js.map +1 -1
  79. package/dist/agent/types.d.ts +170 -2
  80. package/dist/agent/types.d.ts.map +1 -1
  81. package/dist/agent/types.js.map +1 -1
  82. package/dist/api/enterprise-routes.d.ts.map +1 -1
  83. package/dist/api/enterprise-routes.js +34 -3
  84. package/dist/api/enterprise-routes.js.map +1 -1
  85. package/dist/app-server/in-process-client.d.ts +32 -0
  86. package/dist/app-server/in-process-client.d.ts.map +1 -0
  87. package/dist/app-server/in-process-client.js +73 -0
  88. package/dist/app-server/in-process-client.js.map +1 -0
  89. package/dist/app-server/session-api.d.ts +36 -0
  90. package/dist/app-server/session-api.d.ts.map +1 -0
  91. package/dist/app-server/session-api.js +713 -0
  92. package/dist/app-server/session-api.js.map +1 -0
  93. package/dist/approvals/platform-action-approval.d.ts +3 -1
  94. package/dist/approvals/platform-action-approval.d.ts.map +1 -1
  95. package/dist/approvals/platform-action-approval.js +16 -9
  96. package/dist/approvals/platform-action-approval.js.map +1 -1
  97. package/dist/approvals/service-client.d.ts.map +1 -1
  98. package/dist/approvals/service-client.js +7 -7
  99. package/dist/approvals/service-client.js.map +1 -1
  100. package/dist/audit/logger.d.ts +4 -4
  101. package/dist/bootstrap/agent-creation-setup.d.ts +4 -0
  102. package/dist/bootstrap/agent-creation-setup.d.ts.map +1 -1
  103. package/dist/bootstrap/agent-creation-setup.js +3 -1
  104. package/dist/bootstrap/agent-creation-setup.js.map +1 -1
  105. package/dist/bootstrap/auth-setup.js +1 -1
  106. package/dist/bootstrap/auth-setup.js.map +1 -1
  107. package/dist/bootstrap/event-subscriptions-setup.d.ts +6 -0
  108. package/dist/bootstrap/event-subscriptions-setup.d.ts.map +1 -1
  109. package/dist/bootstrap/event-subscriptions-setup.js +26 -2
  110. package/dist/bootstrap/event-subscriptions-setup.js.map +1 -1
  111. package/dist/bootstrap/model-resolution-setup.d.ts.map +1 -1
  112. package/dist/bootstrap/model-resolution-setup.js +4 -1
  113. package/dist/bootstrap/model-resolution-setup.js.map +1 -1
  114. package/dist/bootstrap/tools-setup.d.ts +2 -1
  115. package/dist/bootstrap/tools-setup.d.ts.map +1 -1
  116. package/dist/bootstrap/tools-setup.js +5 -1
  117. package/dist/bootstrap/tools-setup.js.map +1 -1
  118. package/dist/cli/args.d.ts +9 -1
  119. package/dist/cli/args.d.ts.map +1 -1
  120. package/dist/cli/args.js +130 -5
  121. package/dist/cli/args.js.map +1 -1
  122. package/dist/cli/commands/a2a.d.ts +9 -0
  123. package/dist/cli/commands/a2a.d.ts.map +1 -0
  124. package/dist/cli/commands/a2a.js +1714 -0
  125. package/dist/cli/commands/a2a.js.map +1 -0
  126. package/dist/cli/commands/agents.d.ts +16 -2
  127. package/dist/cli/commands/agents.d.ts.map +1 -1
  128. package/dist/cli/commands/agents.js +223 -35
  129. package/dist/cli/commands/agents.js.map +1 -1
  130. package/dist/cli/commands/codex.d.ts +1 -1
  131. package/dist/cli/commands/codex.d.ts.map +1 -1
  132. package/dist/cli/commands/codex.js +145 -39
  133. package/dist/cli/commands/codex.js.map +1 -1
  134. package/dist/cli/commands/context.d.ts +10 -0
  135. package/dist/cli/commands/context.d.ts.map +1 -0
  136. package/dist/cli/commands/context.js +176 -0
  137. package/dist/cli/commands/context.js.map +1 -0
  138. package/dist/cli/commands/hosted-runner.d.ts +1 -0
  139. package/dist/cli/commands/hosted-runner.d.ts.map +1 -1
  140. package/dist/cli/commands/hosted-runner.js +9 -1
  141. package/dist/cli/commands/hosted-runner.js.map +1 -1
  142. package/dist/cli/commands/init.d.ts.map +1 -1
  143. package/dist/cli/commands/init.js +6 -0
  144. package/dist/cli/commands/init.js.map +1 -1
  145. package/dist/cli/commands/modes.d.ts +8 -0
  146. package/dist/cli/commands/modes.d.ts.map +1 -0
  147. package/dist/cli/commands/modes.js +151 -0
  148. package/dist/cli/commands/modes.js.map +1 -0
  149. package/dist/cli/commands/operating-plane.d.ts +14 -0
  150. package/dist/cli/commands/operating-plane.d.ts.map +1 -0
  151. package/dist/cli/commands/operating-plane.js +160 -0
  152. package/dist/cli/commands/operating-plane.js.map +1 -0
  153. package/dist/cli/commands/run.d.ts +87 -0
  154. package/dist/cli/commands/run.d.ts.map +1 -0
  155. package/dist/cli/commands/run.js +356 -0
  156. package/dist/cli/commands/run.js.map +1 -0
  157. package/dist/cli/commands/scenario.d.ts +7 -0
  158. package/dist/cli/commands/scenario.d.ts.map +1 -0
  159. package/dist/cli/commands/scenario.js +195 -0
  160. package/dist/cli/commands/scenario.js.map +1 -0
  161. package/dist/cli/commands/skill.d.ts +7 -0
  162. package/dist/cli/commands/skill.d.ts.map +1 -0
  163. package/dist/cli/commands/skill.js +286 -0
  164. package/dist/cli/commands/skill.js.map +1 -0
  165. package/dist/cli/headless-protocol.d.ts +55 -1
  166. package/dist/cli/headless-protocol.d.ts.map +1 -1
  167. package/dist/cli/headless-protocol.js +446 -7
  168. package/dist/cli/headless-protocol.js.map +1 -1
  169. package/dist/cli/headless-runtime-selection.d.ts +38 -0
  170. package/dist/cli/headless-runtime-selection.d.ts.map +1 -0
  171. package/dist/cli/headless-runtime-selection.js +48 -0
  172. package/dist/cli/headless-runtime-selection.js.map +1 -0
  173. package/dist/cli/headless.d.ts +5 -1
  174. package/dist/cli/headless.d.ts.map +1 -1
  175. package/dist/cli/headless.js +11 -1
  176. package/dist/cli/headless.js.map +1 -1
  177. package/dist/cli/help.d.ts +3 -1
  178. package/dist/cli/help.d.ts.map +1 -1
  179. package/dist/cli/help.js +136 -30
  180. package/dist/cli/help.js.map +1 -1
  181. package/dist/cli/system-prompt.d.ts +22 -4
  182. package/dist/cli/system-prompt.d.ts.map +1 -1
  183. package/dist/cli/system-prompt.js +224 -127
  184. package/dist/cli/system-prompt.js.map +1 -1
  185. package/dist/cli-tui/commands/a2a-handlers.d.ts +7 -0
  186. package/dist/cli-tui/commands/a2a-handlers.d.ts.map +1 -0
  187. package/dist/cli-tui/commands/a2a-handlers.js +160 -0
  188. package/dist/cli-tui/commands/a2a-handlers.js.map +1 -0
  189. package/dist/cli-tui/commands/command-catalog.d.ts.map +1 -1
  190. package/dist/cli-tui/commands/command-catalog.js +15 -0
  191. package/dist/cli-tui/commands/command-catalog.js.map +1 -1
  192. package/dist/cli-tui/commands/command-registry-adapter.js +10 -1
  193. package/dist/cli-tui/commands/command-registry-adapter.js.map +1 -1
  194. package/dist/cli-tui/commands/handlers/mode-handler.d.ts.map +1 -1
  195. package/dist/cli-tui/commands/handlers/mode-handler.js +22 -10
  196. package/dist/cli-tui/commands/handlers/mode-handler.js.map +1 -1
  197. package/dist/cli-tui/commands/mcp-handlers.d.ts.map +1 -1
  198. package/dist/cli-tui/commands/mcp-handlers.js +6 -5
  199. package/dist/cli-tui/commands/mcp-handlers.js.map +1 -1
  200. package/dist/cli-tui/commands/types.d.ts +1 -0
  201. package/dist/cli-tui/commands/types.d.ts.map +1 -1
  202. package/dist/cli-tui/commands/types.js.map +1 -1
  203. package/dist/cli-tui/commands/utility-handlers.d.ts +4 -0
  204. package/dist/cli-tui/commands/utility-handlers.d.ts.map +1 -1
  205. package/dist/cli-tui/commands/utility-handlers.js +45 -6
  206. package/dist/cli-tui/commands/utility-handlers.js.map +1 -1
  207. package/dist/cli-tui/run/run-shell-command.d.ts.map +1 -1
  208. package/dist/cli-tui/run/run-shell-command.js +14 -5
  209. package/dist/cli-tui/run/run-shell-command.js.map +1 -1
  210. package/dist/cli-tui/run/streaming-shell-command.d.ts.map +1 -1
  211. package/dist/cli-tui/run/streaming-shell-command.js +14 -5
  212. package/dist/cli-tui/run/streaming-shell-command.js.map +1 -1
  213. package/dist/cli-tui/selectors/model-selector.d.ts +1 -0
  214. package/dist/cli-tui/selectors/model-selector.d.ts.map +1 -1
  215. package/dist/cli-tui/selectors/model-selector.js +6 -2
  216. package/dist/cli-tui/selectors/model-selector.js.map +1 -1
  217. package/dist/cli-tui/tui-renderer/command-registry-options.d.ts.map +1 -1
  218. package/dist/cli-tui/tui-renderer/command-registry-options.js +5 -0
  219. package/dist/cli-tui/tui-renderer/command-registry-options.js.map +1 -1
  220. package/dist/cli-tui/utils/commands/review-prompt.d.ts +1 -1
  221. package/dist/cli-tui/utils/commands/review-prompt.d.ts.map +1 -1
  222. package/dist/cli-tui/utils/commands/review-prompt.js +8 -3
  223. package/dist/cli-tui/utils/commands/review-prompt.js.map +1 -1
  224. package/dist/cli-tui/utils/runtime-badges.d.ts +1 -0
  225. package/dist/cli-tui/utils/runtime-badges.d.ts.map +1 -1
  226. package/dist/cli-tui/utils/runtime-badges.js +7 -0
  227. package/dist/cli-tui/utils/runtime-badges.js.map +1 -1
  228. package/dist/cli-tui/utils/text-formatting.d.ts +1 -0
  229. package/dist/cli-tui/utils/text-formatting.d.ts.map +1 -1
  230. package/dist/cli-tui/utils/text-formatting.js +5 -0
  231. package/dist/cli-tui/utils/text-formatting.js.map +1 -1
  232. package/dist/cli.js +49209 -26165
  233. package/dist/cli.js.map +1 -1
  234. package/dist/codex/app-server-client.d.ts +139 -0
  235. package/dist/codex/app-server-client.d.ts.map +1 -0
  236. package/dist/codex/app-server-client.js +352 -0
  237. package/dist/codex/app-server-client.js.map +1 -0
  238. package/dist/codex/compatibility.d.ts +48 -0
  239. package/dist/codex/compatibility.d.ts.map +1 -0
  240. package/dist/codex/compatibility.js +344 -0
  241. package/dist/codex/compatibility.js.map +1 -0
  242. package/dist/codex/subagent-dispatch-table.d.ts +66 -0
  243. package/dist/codex/subagent-dispatch-table.d.ts.map +1 -0
  244. package/dist/codex/subagent-dispatch-table.js +127 -0
  245. package/dist/codex/subagent-dispatch-table.js.map +1 -0
  246. package/dist/codex/subagent-workgraph.d.ts +56 -0
  247. package/dist/codex/subagent-workgraph.d.ts.map +1 -0
  248. package/dist/codex/subagent-workgraph.js +89 -0
  249. package/dist/codex/subagent-workgraph.js.map +1 -0
  250. package/dist/config/constants.d.ts +3 -1
  251. package/dist/config/constants.d.ts.map +1 -1
  252. package/dist/config/constants.js +9 -0
  253. package/dist/config/constants.js.map +1 -1
  254. package/dist/config/feature-flags.d.ts +10 -1
  255. package/dist/config/feature-flags.d.ts.map +1 -1
  256. package/dist/config/feature-flags.js +17 -6
  257. package/dist/config/feature-flags.js.map +1 -1
  258. package/dist/config/index.d.ts +1 -1
  259. package/dist/config/index.d.ts.map +1 -1
  260. package/dist/config/index.js +1 -1
  261. package/dist/config/index.js.map +1 -1
  262. package/dist/config/toml-config.d.ts +32 -0
  263. package/dist/config/toml-config.d.ts.map +1 -1
  264. package/dist/config/toml-config.js +152 -43
  265. package/dist/config/toml-config.js.map +1 -1
  266. package/dist/connectors/service-client.d.ts.map +1 -1
  267. package/dist/connectors/service-client.js +4 -7
  268. package/dist/connectors/service-client.js.map +1 -1
  269. package/dist/context/manifest-types.d.ts +59 -0
  270. package/dist/context/manifest-types.d.ts.map +1 -0
  271. package/dist/context/manifest-types.js +2 -0
  272. package/dist/context/manifest-types.js.map +1 -0
  273. package/dist/context/manifest.d.ts +16 -0
  274. package/dist/context/manifest.d.ts.map +1 -0
  275. package/dist/context/manifest.js +503 -0
  276. package/dist/context/manifest.js.map +1 -0
  277. package/dist/db/schema.d.ts +10 -1
  278. package/dist/db/schema.d.ts.map +1 -1
  279. package/dist/db/schema.js.map +1 -1
  280. package/dist/evalops/agent-bootstrap.d.ts +1 -0
  281. package/dist/evalops/agent-bootstrap.d.ts.map +1 -1
  282. package/dist/evalops/agent-bootstrap.js +41 -1
  283. package/dist/evalops/agent-bootstrap.js.map +1 -1
  284. package/dist/evalops/env-aliases.d.ts +13 -0
  285. package/dist/evalops/env-aliases.d.ts.map +1 -0
  286. package/dist/evalops/env-aliases.js +60 -0
  287. package/dist/evalops/env-aliases.js.map +1 -0
  288. package/dist/evalops/managed-context.d.ts.map +1 -1
  289. package/dist/evalops/managed-context.js +28 -62
  290. package/dist/evalops/managed-context.js.map +1 -1
  291. package/dist/guardian/config.d.ts.map +1 -1
  292. package/dist/guardian/config.js +1 -0
  293. package/dist/guardian/config.js.map +1 -1
  294. package/dist/guardian/runner.d.ts +2 -0
  295. package/dist/guardian/runner.d.ts.map +1 -1
  296. package/dist/guardian/runner.js +105 -2
  297. package/dist/guardian/runner.js.map +1 -1
  298. package/dist/guardian/types.d.ts +1 -0
  299. package/dist/guardian/types.d.ts.map +1 -1
  300. package/dist/guardian/types.js.map +1 -1
  301. package/dist/index.d.ts +6 -1
  302. package/dist/index.d.ts.map +1 -1
  303. package/dist/index.js +6 -1
  304. package/dist/index.js.map +1 -1
  305. package/dist/main.d.ts.map +1 -1
  306. package/dist/main.js +267 -55
  307. package/dist/main.js.map +1 -1
  308. package/dist/mcp/config.d.ts.map +1 -1
  309. package/dist/mcp/config.js +89 -7
  310. package/dist/mcp/config.js.map +1 -1
  311. package/dist/mcp/manager.d.ts +5 -1
  312. package/dist/mcp/manager.d.ts.map +1 -1
  313. package/dist/mcp/manager.js +159 -4
  314. package/dist/mcp/manager.js.map +1 -1
  315. package/dist/mcp/platform-plugin.d.ts.map +1 -1
  316. package/dist/mcp/platform-plugin.js +9 -26
  317. package/dist/mcp/platform-plugin.js.map +1 -1
  318. package/dist/mcp/schema.d.ts +15 -0
  319. package/dist/mcp/schema.d.ts.map +1 -1
  320. package/dist/mcp/schema.js +24 -0
  321. package/dist/mcp/schema.js.map +1 -1
  322. package/dist/mcp/tool-bridge.d.ts +39 -10
  323. package/dist/mcp/tool-bridge.d.ts.map +1 -1
  324. package/dist/mcp/tool-bridge.js +101 -24
  325. package/dist/mcp/tool-bridge.js.map +1 -1
  326. package/dist/mcp/types.d.ts +27 -0
  327. package/dist/mcp/types.d.ts.map +1 -1
  328. package/dist/mcp/types.js.map +1 -1
  329. package/dist/mcp/workspace-trust.d.ts +10 -0
  330. package/dist/mcp/workspace-trust.d.ts.map +1 -0
  331. package/dist/mcp/workspace-trust.js +295 -0
  332. package/dist/mcp/workspace-trust.js.map +1 -0
  333. package/dist/memory/service-client.d.ts +1 -0
  334. package/dist/memory/service-client.d.ts.map +1 -1
  335. package/dist/memory/service-client.js +194 -9
  336. package/dist/memory/service-client.js.map +1 -1
  337. package/dist/models/builtin.d.ts.map +1 -1
  338. package/dist/models/builtin.js +66 -25
  339. package/dist/models/builtin.js.map +1 -1
  340. package/dist/models/config-loader.d.ts +10 -10
  341. package/dist/models/config-loader.d.ts.map +1 -1
  342. package/dist/models/config-loader.js +2 -0
  343. package/dist/models/config-loader.js.map +1 -1
  344. package/dist/models/registry.d.ts +1 -0
  345. package/dist/models/registry.d.ts.map +1 -1
  346. package/dist/models/registry.js +1 -0
  347. package/dist/models/registry.js.map +1 -1
  348. package/dist/oauth/device-identity.d.ts.map +1 -1
  349. package/dist/oauth/device-identity.js +1 -3
  350. package/dist/oauth/device-identity.js.map +1 -1
  351. package/dist/oauth/evalops.d.ts.map +1 -1
  352. package/dist/oauth/evalops.js +2 -5
  353. package/dist/oauth/evalops.js.map +1 -1
  354. package/dist/opentelemetry.d.ts.map +1 -1
  355. package/dist/opentelemetry.js +12 -12
  356. package/dist/opentelemetry.js.map +1 -1
  357. package/dist/package-version.d.ts +2 -0
  358. package/dist/package-version.d.ts.map +1 -0
  359. package/dist/package-version.js +11 -0
  360. package/dist/package-version.js.map +1 -0
  361. package/dist/packages/constants.d.ts +3 -0
  362. package/dist/packages/constants.d.ts.map +1 -0
  363. package/dist/packages/constants.js +3 -0
  364. package/dist/packages/constants.js.map +1 -0
  365. package/dist/packages/inspection.d.ts.map +1 -1
  366. package/dist/packages/inspection.js +2 -1
  367. package/dist/packages/inspection.js.map +1 -1
  368. package/dist/packages/search.d.ts.map +1 -1
  369. package/dist/packages/search.js +1 -1
  370. package/dist/packages/search.js.map +1 -1
  371. package/dist/platform/a2a-capability-market.d.ts +21 -0
  372. package/dist/platform/a2a-capability-market.d.ts.map +1 -0
  373. package/dist/platform/a2a-capability-market.js +176 -0
  374. package/dist/platform/a2a-capability-market.js.map +1 -0
  375. package/dist/platform/a2a-client.d.ts +217 -0
  376. package/dist/platform/a2a-client.d.ts.map +1 -0
  377. package/dist/platform/a2a-client.js +589 -0
  378. package/dist/platform/a2a-client.js.map +1 -0
  379. package/dist/platform/a2a-fleet.d.ts +41 -0
  380. package/dist/platform/a2a-fleet.d.ts.map +1 -0
  381. package/dist/platform/a2a-fleet.js +109 -0
  382. package/dist/platform/a2a-fleet.js.map +1 -0
  383. package/dist/platform/a2a-maestro-peer.d.ts +20 -0
  384. package/dist/platform/a2a-maestro-peer.d.ts.map +1 -0
  385. package/dist/platform/a2a-maestro-peer.js +176 -0
  386. package/dist/platform/a2a-maestro-peer.js.map +1 -0
  387. package/dist/platform/a2a-peer-pairing.d.ts +107 -0
  388. package/dist/platform/a2a-peer-pairing.d.ts.map +1 -0
  389. package/dist/platform/a2a-peer-pairing.js +489 -0
  390. package/dist/platform/a2a-peer-pairing.js.map +1 -0
  391. package/dist/platform/a2a-peer-registry.d.ts +68 -0
  392. package/dist/platform/a2a-peer-registry.d.ts.map +1 -0
  393. package/dist/platform/a2a-peer-registry.js +320 -0
  394. package/dist/platform/a2a-peer-registry.js.map +1 -0
  395. package/dist/platform/a2a-task-ledger.d.ts +86 -0
  396. package/dist/platform/a2a-task-ledger.d.ts.map +1 -0
  397. package/dist/platform/a2a-task-ledger.js +546 -0
  398. package/dist/platform/a2a-task-ledger.js.map +1 -0
  399. package/dist/platform/a2a-work-graph.d.ts +43 -0
  400. package/dist/platform/a2a-work-graph.d.ts.map +1 -0
  401. package/dist/platform/a2a-work-graph.js +267 -0
  402. package/dist/platform/a2a-work-graph.js.map +1 -0
  403. package/dist/platform/agent-registry-client.d.ts +327 -0
  404. package/dist/platform/agent-registry-client.d.ts.map +1 -0
  405. package/dist/platform/agent-registry-client.js +803 -0
  406. package/dist/platform/agent-registry-client.js.map +1 -0
  407. package/dist/platform/agent-runtime-client.d.ts +135 -1
  408. package/dist/platform/agent-runtime-client.d.ts.map +1 -1
  409. package/dist/platform/agent-runtime-client.js +467 -10
  410. package/dist/platform/agent-runtime-client.js.map +1 -1
  411. package/dist/platform/cerebro-facts-client.d.ts.map +1 -1
  412. package/dist/platform/cerebro-facts-client.js +4 -7
  413. package/dist/platform/cerebro-facts-client.js.map +1 -1
  414. package/dist/platform/client.d.ts +2 -0
  415. package/dist/platform/client.d.ts.map +1 -1
  416. package/dist/platform/client.js +7 -14
  417. package/dist/platform/client.js.map +1 -1
  418. package/dist/platform/core-services.d.ts +68 -0
  419. package/dist/platform/core-services.d.ts.map +1 -1
  420. package/dist/platform/core-services.js +68 -0
  421. package/dist/platform/core-services.js.map +1 -1
  422. package/dist/platform/fermata-eval-client.d.ts +195 -0
  423. package/dist/platform/fermata-eval-client.d.ts.map +1 -0
  424. package/dist/platform/fermata-eval-client.js +146 -0
  425. package/dist/platform/fermata-eval-client.js.map +1 -0
  426. package/dist/platform/fermata-scenario-suite.d.ts +99 -0
  427. package/dist/platform/fermata-scenario-suite.d.ts.map +1 -0
  428. package/dist/platform/fermata-scenario-suite.js +459 -0
  429. package/dist/platform/fermata-scenario-suite.js.map +1 -0
  430. package/dist/platform/maestro-timeline-client.d.ts.map +1 -1
  431. package/dist/platform/maestro-timeline-client.js +5 -11
  432. package/dist/platform/maestro-timeline-client.js.map +1 -1
  433. package/dist/platform/operating-plane-client.d.ts +156 -0
  434. package/dist/platform/operating-plane-client.d.ts.map +1 -0
  435. package/dist/platform/operating-plane-client.js +131 -0
  436. package/dist/platform/operating-plane-client.js.map +1 -0
  437. package/dist/platform/operating-plane-summary.d.ts +47 -0
  438. package/dist/platform/operating-plane-summary.d.ts.map +1 -0
  439. package/dist/platform/operating-plane-summary.js +209 -0
  440. package/dist/platform/operating-plane-summary.js.map +1 -0
  441. package/dist/platform/tool-execution-client.d.ts.map +1 -1
  442. package/dist/platform/tool-execution-client.js +4 -11
  443. package/dist/platform/tool-execution-client.js.map +1 -1
  444. package/dist/prompts/service-client.d.ts.map +1 -1
  445. package/dist/prompts/service-client.js +3 -5
  446. package/dist/prompts/service-client.js.map +1 -1
  447. package/dist/prompts/system-prompt.d.ts +3 -0
  448. package/dist/prompts/system-prompt.d.ts.map +1 -1
  449. package/dist/prompts/system-prompt.js +13 -3
  450. package/dist/prompts/system-prompt.js.map +1 -1
  451. package/dist/prompts/types.d.ts +2 -0
  452. package/dist/prompts/types.d.ts.map +1 -1
  453. package/dist/prompts/types.js.map +1 -1
  454. package/dist/providers/api-keys.d.ts +1 -1
  455. package/dist/providers/api-keys.d.ts.map +1 -1
  456. package/dist/providers/api-keys.js +2 -1
  457. package/dist/providers/api-keys.js.map +1 -1
  458. package/dist/providers/auth.d.ts.map +1 -1
  459. package/dist/providers/auth.js +48 -25
  460. package/dist/providers/auth.js.map +1 -1
  461. package/dist/remote-runner/attach-client.d.ts.map +1 -1
  462. package/dist/remote-runner/attach-client.js +1 -0
  463. package/dist/remote-runner/attach-client.js.map +1 -1
  464. package/dist/remote-runner/client.d.ts.map +1 -1
  465. package/dist/remote-runner/client.js +4 -7
  466. package/dist/remote-runner/client.js.map +1 -1
  467. package/dist/rpc/rpc-types.d.ts.map +1 -1
  468. package/dist/rpc/rpc-types.js +1 -0
  469. package/dist/rpc/rpc-types.js.map +1 -1
  470. package/dist/safety/action-firewall.d.ts.map +1 -1
  471. package/dist/safety/action-firewall.js +69 -6
  472. package/dist/safety/action-firewall.js.map +1 -1
  473. package/dist/safety/attack-patterns.d.ts.map +1 -1
  474. package/dist/safety/attack-patterns.js +31 -14
  475. package/dist/safety/attack-patterns.js.map +1 -1
  476. package/dist/safety/bash-parser.d.ts.map +1 -1
  477. package/dist/safety/bash-parser.js +4 -3
  478. package/dist/safety/bash-parser.js.map +1 -1
  479. package/dist/safety/execpolicy.d.ts +15 -3
  480. package/dist/safety/execpolicy.d.ts.map +1 -1
  481. package/dist/safety/execpolicy.js +248 -37
  482. package/dist/safety/execpolicy.js.map +1 -1
  483. package/dist/safety/governance-service-client.d.ts.map +1 -1
  484. package/dist/safety/governance-service-client.js +4 -7
  485. package/dist/safety/governance-service-client.js.map +1 -1
  486. package/dist/safety/guarded-files.d.ts +34 -0
  487. package/dist/safety/guarded-files.d.ts.map +1 -0
  488. package/dist/safety/guarded-files.js +372 -0
  489. package/dist/safety/guarded-files.js.map +1 -0
  490. package/dist/safety/loop-detector.d.ts.map +1 -1
  491. package/dist/safety/loop-detector.js +6 -1
  492. package/dist/safety/loop-detector.js.map +1 -1
  493. package/dist/safety/permission-profile.d.ts +47 -0
  494. package/dist/safety/permission-profile.d.ts.map +1 -0
  495. package/dist/safety/permission-profile.js +349 -0
  496. package/dist/safety/permission-profile.js.map +1 -0
  497. package/dist/safety/safety-middleware.d.ts +5 -1
  498. package/dist/safety/safety-middleware.d.ts.map +1 -1
  499. package/dist/safety/safety-middleware.js +3 -2
  500. package/dist/safety/safety-middleware.js.map +1 -1
  501. package/dist/safety/suspicious-patterns.d.ts.map +1 -1
  502. package/dist/safety/suspicious-patterns.js +12 -7
  503. package/dist/safety/suspicious-patterns.js.map +1 -1
  504. package/dist/safety/tool-categorization.js +1 -1
  505. package/dist/safety/tool-categorization.js.map +1 -1
  506. package/dist/safety/validators/path-policy-validator.d.ts.map +1 -1
  507. package/dist/safety/validators/path-policy-validator.js +7 -0
  508. package/dist/safety/validators/path-policy-validator.js.map +1 -1
  509. package/dist/sandbox/index.d.ts +6 -1
  510. package/dist/sandbox/index.d.ts.map +1 -1
  511. package/dist/sandbox/index.js +30 -4
  512. package/dist/sandbox/index.js.map +1 -1
  513. package/dist/sandbox/native-sandbox.d.ts +3 -0
  514. package/dist/sandbox/native-sandbox.d.ts.map +1 -1
  515. package/dist/sandbox/native-sandbox.js +139 -18
  516. package/dist/sandbox/native-sandbox.js.map +1 -1
  517. package/dist/sentry.d.ts +17 -0
  518. package/dist/sentry.d.ts.map +1 -0
  519. package/dist/sentry.js +91 -0
  520. package/dist/sentry.js.map +1 -0
  521. package/dist/server/agent-runtime-ledger.d.ts +141 -0
  522. package/dist/server/agent-runtime-ledger.d.ts.map +1 -0
  523. package/dist/server/agent-runtime-ledger.js +334 -0
  524. package/dist/server/agent-runtime-ledger.js.map +1 -0
  525. package/dist/server/agent-trajectory-inspection.d.ts +104 -0
  526. package/dist/server/agent-trajectory-inspection.d.ts.map +1 -0
  527. package/dist/server/agent-trajectory-inspection.js +168 -0
  528. package/dist/server/agent-trajectory-inspection.js.map +1 -0
  529. package/dist/server/agent-trajectory-replay.d.ts +56 -0
  530. package/dist/server/agent-trajectory-replay.d.ts.map +1 -0
  531. package/dist/server/agent-trajectory-replay.js +214 -0
  532. package/dist/server/agent-trajectory-replay.js.map +1 -0
  533. package/dist/server/agent-trajectory-scenarios.d.ts +109 -0
  534. package/dist/server/agent-trajectory-scenarios.d.ts.map +1 -0
  535. package/dist/server/agent-trajectory-scenarios.js +822 -0
  536. package/dist/server/agent-trajectory-scenarios.js.map +1 -0
  537. package/dist/server/agent-trajectory-scorers.d.ts +61 -0
  538. package/dist/server/agent-trajectory-scorers.d.ts.map +1 -0
  539. package/dist/server/agent-trajectory-scorers.js +162 -0
  540. package/dist/server/agent-trajectory-scorers.js.map +1 -0
  541. package/dist/server/agent-trajectory-validation.d.ts +7 -0
  542. package/dist/server/agent-trajectory-validation.d.ts.map +1 -0
  543. package/dist/server/agent-trajectory-validation.js +101 -0
  544. package/dist/server/agent-trajectory-validation.js.map +1 -0
  545. package/dist/server/agent-trajectory.d.ts +50 -0
  546. package/dist/server/agent-trajectory.d.ts.map +1 -0
  547. package/dist/server/agent-trajectory.js +159 -0
  548. package/dist/server/agent-trajectory.js.map +1 -0
  549. package/dist/server/app-context.d.ts +18 -0
  550. package/dist/server/app-context.d.ts.map +1 -1
  551. package/dist/server/app-context.js.map +1 -1
  552. package/dist/server/handlers/headless-sessions.d.ts.map +1 -1
  553. package/dist/server/handlers/headless-sessions.js +64 -27
  554. package/dist/server/handlers/headless-sessions.js.map +1 -1
  555. package/dist/server/handlers/health.d.ts +6 -0
  556. package/dist/server/handlers/health.d.ts.map +1 -1
  557. package/dist/server/handlers/health.js +6 -0
  558. package/dist/server/handlers/health.js.map +1 -1
  559. package/dist/server/handlers/hosted-runner-drain.d.ts +69 -1
  560. package/dist/server/handlers/hosted-runner-drain.d.ts.map +1 -1
  561. package/dist/server/handlers/hosted-runner-drain.js +309 -18
  562. package/dist/server/handlers/hosted-runner-drain.js.map +1 -1
  563. package/dist/server/handlers/hosted-runner-identity.d.ts +16 -0
  564. package/dist/server/handlers/hosted-runner-identity.d.ts.map +1 -1
  565. package/dist/server/handlers/hosted-runner-identity.js +43 -0
  566. package/dist/server/handlers/hosted-runner-identity.js.map +1 -1
  567. package/dist/server/handlers/mode.d.ts.map +1 -1
  568. package/dist/server/handlers/mode.js +3 -1
  569. package/dist/server/handlers/mode.js.map +1 -1
  570. package/dist/server/handlers/pending-requests.d.ts.map +1 -1
  571. package/dist/server/handlers/pending-requests.js +336 -51
  572. package/dist/server/handlers/pending-requests.js.map +1 -1
  573. package/dist/server/handlers/platform-a2a-push.d.ts +6 -0
  574. package/dist/server/handlers/platform-a2a-push.d.ts.map +1 -0
  575. package/dist/server/handlers/platform-a2a-push.js +136 -0
  576. package/dist/server/handlers/platform-a2a-push.js.map +1 -0
  577. package/dist/server/handlers/sessions.d.ts.map +1 -1
  578. package/dist/server/handlers/sessions.js +21 -1
  579. package/dist/server/handlers/sessions.js.map +1 -1
  580. package/dist/server/headless-runtime-service.d.ts +9 -2
  581. package/dist/server/headless-runtime-service.d.ts.map +1 -1
  582. package/dist/server/headless-runtime-service.js +39 -0
  583. package/dist/server/headless-runtime-service.js.map +1 -1
  584. package/dist/server/hosted-agent-runtime-progress.d.ts +144 -0
  585. package/dist/server/hosted-agent-runtime-progress.d.ts.map +1 -0
  586. package/dist/server/hosted-agent-runtime-progress.js +1650 -0
  587. package/dist/server/hosted-agent-runtime-progress.js.map +1 -0
  588. package/dist/server/hosted-runner-lease.d.ts +41 -0
  589. package/dist/server/hosted-runner-lease.d.ts.map +1 -0
  590. package/dist/server/hosted-runner-lease.js +140 -0
  591. package/dist/server/hosted-runner-lease.js.map +1 -0
  592. package/dist/server/hosted-session-manager.d.ts +16 -8
  593. package/dist/server/hosted-session-manager.d.ts.map +1 -1
  594. package/dist/server/hosted-session-manager.js +98 -76
  595. package/dist/server/hosted-session-manager.js.map +1 -1
  596. package/dist/server/junit-xml.d.ts +2 -0
  597. package/dist/server/junit-xml.d.ts.map +1 -0
  598. package/dist/server/junit-xml.js +9 -0
  599. package/dist/server/junit-xml.js.map +1 -0
  600. package/dist/server/routes.d.ts.map +1 -1
  601. package/dist/server/routes.js +6 -0
  602. package/dist/server/routes.js.map +1 -1
  603. package/dist/server/scenario-recorder.d.ts +56 -0
  604. package/dist/server/scenario-recorder.d.ts.map +1 -0
  605. package/dist/server/scenario-recorder.js +109 -0
  606. package/dist/server/scenario-recorder.js.map +1 -0
  607. package/dist/server/scripted-scenario-runner.d.ts +46 -0
  608. package/dist/server/scripted-scenario-runner.d.ts.map +1 -0
  609. package/dist/server/scripted-scenario-runner.js +190 -0
  610. package/dist/server/scripted-scenario-runner.js.map +1 -0
  611. package/dist/server/server-middlewares.d.ts +6 -2
  612. package/dist/server/server-middlewares.d.ts.map +1 -1
  613. package/dist/server/server-middlewares.js +8 -2
  614. package/dist/server/server-middlewares.js.map +1 -1
  615. package/dist/server/server-request-manager.d.ts +9 -1
  616. package/dist/server/server-request-manager.d.ts.map +1 -1
  617. package/dist/server/server-request-manager.js +49 -4
  618. package/dist/server/server-request-manager.js.map +1 -1
  619. package/dist/services/intelligent-router/service.d.ts +2 -0
  620. package/dist/services/intelligent-router/service.d.ts.map +1 -1
  621. package/dist/services/intelligent-router/service.js +4 -0
  622. package/dist/services/intelligent-router/service.js.map +1 -1
  623. package/dist/services/service-authority.d.ts +25 -0
  624. package/dist/services/service-authority.d.ts.map +1 -0
  625. package/dist/services/service-authority.js +143 -0
  626. package/dist/services/service-authority.js.map +1 -0
  627. package/dist/services/workspace-config/service.d.ts +2 -0
  628. package/dist/services/workspace-config/service.d.ts.map +1 -1
  629. package/dist/services/workspace-config/service.js +4 -0
  630. package/dist/services/workspace-config/service.js.map +1 -1
  631. package/dist/session/manager.d.ts +8 -2
  632. package/dist/session/manager.d.ts.map +1 -1
  633. package/dist/session/manager.js +19 -4
  634. package/dist/session/manager.js.map +1 -1
  635. package/dist/session/session-branch.d.ts.map +1 -1
  636. package/dist/session/session-branch.js +5 -1
  637. package/dist/session/session-branch.js.map +1 -1
  638. package/dist/session/session-catalog.d.ts +7 -2
  639. package/dist/session/session-catalog.d.ts.map +1 -1
  640. package/dist/session/session-catalog.js +13 -2
  641. package/dist/session/session-catalog.js.map +1 -1
  642. package/dist/session/session-context.d.ts +6 -2
  643. package/dist/session/session-context.d.ts.map +1 -1
  644. package/dist/session/session-context.js +44 -4
  645. package/dist/session/session-context.js.map +1 -1
  646. package/dist/session/session-graph-projection.d.ts +32 -0
  647. package/dist/session/session-graph-projection.d.ts.map +1 -0
  648. package/dist/session/session-graph-projection.js +133 -0
  649. package/dist/session/session-graph-projection.js.map +1 -0
  650. package/dist/session/types.d.ts +18 -0
  651. package/dist/session/types.d.ts.map +1 -1
  652. package/dist/session/types.js +8 -0
  653. package/dist/session/types.js.map +1 -1
  654. package/dist/session/wire-format.generated.d.ts +3 -0
  655. package/dist/session/wire-format.generated.d.ts.map +1 -1
  656. package/dist/session/wire-format.generated.js +20 -0
  657. package/dist/session/wire-format.generated.js.map +1 -1
  658. package/dist/skills/eval-harness.d.ts +38 -0
  659. package/dist/skills/eval-harness.d.ts.map +1 -0
  660. package/dist/skills/eval-harness.js +112 -0
  661. package/dist/skills/eval-harness.js.map +1 -0
  662. package/dist/skills/index.d.ts +5 -1
  663. package/dist/skills/index.d.ts.map +1 -1
  664. package/dist/skills/index.js +5 -1
  665. package/dist/skills/index.js.map +1 -1
  666. package/dist/skills/linter.d.ts +36 -0
  667. package/dist/skills/linter.d.ts.map +1 -0
  668. package/dist/skills/linter.js +398 -0
  669. package/dist/skills/linter.js.map +1 -0
  670. package/dist/skills/loader.d.ts +36 -6
  671. package/dist/skills/loader.d.ts.map +1 -1
  672. package/dist/skills/loader.js +169 -86
  673. package/dist/skills/loader.js.map +1 -1
  674. package/dist/skills/package-contract.d.ts +45 -0
  675. package/dist/skills/package-contract.d.ts.map +1 -0
  676. package/dist/skills/package-contract.js +153 -0
  677. package/dist/skills/package-contract.js.map +1 -0
  678. package/dist/skills/runtime-activation.d.ts +68 -0
  679. package/dist/skills/runtime-activation.d.ts.map +1 -0
  680. package/dist/skills/runtime-activation.js +228 -0
  681. package/dist/skills/runtime-activation.js.map +1 -0
  682. package/dist/skills/service-client.d.ts.map +1 -1
  683. package/dist/skills/service-client.js +3 -4
  684. package/dist/skills/service-client.js.map +1 -1
  685. package/dist/skills/tool.d.ts.map +1 -1
  686. package/dist/skills/tool.js +2 -0
  687. package/dist/skills/tool.js.map +1 -1
  688. package/dist/skills/types.d.ts +14 -0
  689. package/dist/skills/types.d.ts.map +1 -1
  690. package/dist/skills/types.js.map +1 -1
  691. package/dist/telemetry/agent-operating-plane-context.d.ts +24 -0
  692. package/dist/telemetry/agent-operating-plane-context.d.ts.map +1 -0
  693. package/dist/telemetry/agent-operating-plane-context.js +54 -0
  694. package/dist/telemetry/agent-operating-plane-context.js.map +1 -0
  695. package/dist/telemetry/beacon.d.ts +24 -0
  696. package/dist/telemetry/beacon.d.ts.map +1 -0
  697. package/dist/telemetry/beacon.js +115 -0
  698. package/dist/telemetry/beacon.js.map +1 -0
  699. package/dist/telemetry/cli-command-aggregator.d.ts +36 -0
  700. package/dist/telemetry/cli-command-aggregator.d.ts.map +1 -0
  701. package/dist/telemetry/cli-command-aggregator.js +251 -0
  702. package/dist/telemetry/cli-command-aggregator.js.map +1 -0
  703. package/dist/telemetry/cli-startup.d.ts +21 -0
  704. package/dist/telemetry/cli-startup.d.ts.map +1 -0
  705. package/dist/telemetry/cli-startup.js +83 -0
  706. package/dist/telemetry/cli-startup.js.map +1 -0
  707. package/dist/telemetry/disablement.d.ts +13 -0
  708. package/dist/telemetry/disablement.d.ts.map +1 -0
  709. package/dist/telemetry/disablement.js +19 -0
  710. package/dist/telemetry/disablement.js.map +1 -0
  711. package/dist/telemetry/index.d.ts +6 -2
  712. package/dist/telemetry/index.d.ts.map +1 -1
  713. package/dist/telemetry/index.js +6 -2
  714. package/dist/telemetry/index.js.map +1 -1
  715. package/dist/telemetry/maestro-event-bus.d.ts +52 -0
  716. package/dist/telemetry/maestro-event-bus.d.ts.map +1 -1
  717. package/dist/telemetry/maestro-event-bus.js +179 -3
  718. package/dist/telemetry/maestro-event-bus.js.map +1 -1
  719. package/dist/telemetry/maestro-event-catalog.d.ts +3 -1
  720. package/dist/telemetry/maestro-event-catalog.d.ts.map +1 -1
  721. package/dist/telemetry/maestro-event-catalog.js +2 -0
  722. package/dist/telemetry/maestro-event-catalog.js.map +1 -1
  723. package/dist/telemetry/maestro-platform-replay-fixture.d.ts.map +1 -1
  724. package/dist/telemetry/maestro-platform-replay-fixture.js +74 -9
  725. package/dist/telemetry/maestro-platform-replay-fixture.js.map +1 -1
  726. package/dist/telemetry/maestro-publisher-conformance-fixture.d.ts +1 -1
  727. package/dist/telemetry/maestro-publisher-conformance-fixture.d.ts.map +1 -1
  728. package/dist/telemetry/maestro-publisher-conformance-fixture.js +46 -11
  729. package/dist/telemetry/maestro-publisher-conformance-fixture.js.map +1 -1
  730. package/dist/telemetry/mcp-beacon.d.ts +20 -0
  731. package/dist/telemetry/mcp-beacon.d.ts.map +1 -0
  732. package/dist/telemetry/mcp-beacon.js +54 -0
  733. package/dist/telemetry/mcp-beacon.js.map +1 -0
  734. package/dist/telemetry/metadata-normalization.d.ts +7 -0
  735. package/dist/telemetry/metadata-normalization.d.ts.map +1 -0
  736. package/dist/telemetry/metadata-normalization.js +189 -0
  737. package/dist/telemetry/metadata-normalization.js.map +1 -0
  738. package/dist/telemetry/meter-service-client.d.ts.map +1 -1
  739. package/dist/telemetry/meter-service-client.js +5 -10
  740. package/dist/telemetry/meter-service-client.js.map +1 -1
  741. package/dist/telemetry/metrics.d.ts +123 -0
  742. package/dist/telemetry/metrics.d.ts.map +1 -0
  743. package/dist/telemetry/metrics.js +184 -0
  744. package/dist/telemetry/metrics.js.map +1 -0
  745. package/dist/telemetry/turn-tracker.d.ts +1 -0
  746. package/dist/telemetry/turn-tracker.d.ts.map +1 -1
  747. package/dist/telemetry/turn-tracker.js +22 -1
  748. package/dist/telemetry/turn-tracker.js.map +1 -1
  749. package/dist/telemetry/wide-events.d.ts +31 -1
  750. package/dist/telemetry/wide-events.d.ts.map +1 -1
  751. package/dist/telemetry/wide-events.js +229 -1
  752. package/dist/telemetry/wide-events.js.map +1 -1
  753. package/dist/telemetry.d.ts +39 -3
  754. package/dist/telemetry.d.ts.map +1 -1
  755. package/dist/telemetry.js +160 -3
  756. package/dist/telemetry.js.map +1 -1
  757. package/dist/testing/test-verification-hook.d.ts.map +1 -1
  758. package/dist/testing/test-verification-hook.js +34 -21
  759. package/dist/testing/test-verification-hook.js.map +1 -1
  760. package/dist/tools/apply-patch-parser.d.ts +26 -0
  761. package/dist/tools/apply-patch-parser.d.ts.map +1 -0
  762. package/dist/tools/apply-patch-parser.js +146 -0
  763. package/dist/tools/apply-patch-parser.js.map +1 -0
  764. package/dist/tools/apply-patch.d.ts +42 -0
  765. package/dist/tools/apply-patch.d.ts.map +1 -0
  766. package/dist/tools/apply-patch.js +648 -0
  767. package/dist/tools/apply-patch.js.map +1 -0
  768. package/dist/tools/ask-user.d.ts +1 -0
  769. package/dist/tools/ask-user.d.ts.map +1 -1
  770. package/dist/tools/background/tool-handler.d.ts +1 -0
  771. package/dist/tools/background/tool-handler.d.ts.map +1 -1
  772. package/dist/tools/bash.d.ts +1 -0
  773. package/dist/tools/bash.d.ts.map +1 -1
  774. package/dist/tools/codesearch.d.ts +1 -0
  775. package/dist/tools/codesearch.d.ts.map +1 -1
  776. package/dist/tools/conductor-client.d.ts +1 -0
  777. package/dist/tools/conductor-client.d.ts.map +1 -1
  778. package/dist/tools/conductor-client.js +63 -0
  779. package/dist/tools/conductor-client.js.map +1 -1
  780. package/dist/tools/diff.d.ts +1 -0
  781. package/dist/tools/diff.d.ts.map +1 -1
  782. package/dist/tools/edit.d.ts +1 -0
  783. package/dist/tools/edit.d.ts.map +1 -1
  784. package/dist/tools/extract-document.d.ts +1 -0
  785. package/dist/tools/extract-document.d.ts.map +1 -1
  786. package/dist/tools/find.d.ts +10 -0
  787. package/dist/tools/find.d.ts.map +1 -1
  788. package/dist/tools/find.js +236 -27
  789. package/dist/tools/find.js.map +1 -1
  790. package/dist/tools/gh.d.ts +3 -0
  791. package/dist/tools/gh.d.ts.map +1 -1
  792. package/dist/tools/index.d.ts +50 -0
  793. package/dist/tools/index.d.ts.map +1 -1
  794. package/dist/tools/index.js +4 -0
  795. package/dist/tools/index.js.map +1 -1
  796. package/dist/tools/list.d.ts +1 -0
  797. package/dist/tools/list.d.ts.map +1 -1
  798. package/dist/tools/notebook.d.ts +1 -0
  799. package/dist/tools/notebook.d.ts.map +1 -1
  800. package/dist/tools/oracle.d.ts +1 -0
  801. package/dist/tools/oracle.d.ts.map +1 -1
  802. package/dist/tools/oracle.js +17 -32
  803. package/dist/tools/oracle.js.map +1 -1
  804. package/dist/tools/parallel-execution.d.ts +13 -2
  805. package/dist/tools/parallel-execution.d.ts.map +1 -1
  806. package/dist/tools/parallel-execution.js +178 -7
  807. package/dist/tools/parallel-execution.js.map +1 -1
  808. package/dist/tools/parallel-ripgrep.d.ts +1 -0
  809. package/dist/tools/parallel-ripgrep.d.ts.map +1 -1
  810. package/dist/tools/pipeline.d.ts +4 -0
  811. package/dist/tools/pipeline.d.ts.map +1 -1
  812. package/dist/tools/read.d.ts +1 -0
  813. package/dist/tools/read.d.ts.map +1 -1
  814. package/dist/tools/search.d.ts +1 -0
  815. package/dist/tools/search.d.ts.map +1 -1
  816. package/dist/tools/status.d.ts +1 -0
  817. package/dist/tools/status.d.ts.map +1 -1
  818. package/dist/tools/todo.d.ts +1 -0
  819. package/dist/tools/todo.d.ts.map +1 -1
  820. package/dist/tools/tool-dsl.d.ts +5 -1
  821. package/dist/tools/tool-dsl.d.ts.map +1 -1
  822. package/dist/tools/tool-dsl.js +1 -0
  823. package/dist/tools/tool-dsl.js.map +1 -1
  824. package/dist/tools/tool-result-cache.d.ts.map +1 -1
  825. package/dist/tools/tool-result-cache.js +1 -0
  826. package/dist/tools/tool-result-cache.js.map +1 -1
  827. package/dist/tools/typebox-tool.d.ts.map +1 -1
  828. package/dist/tools/typebox-tool.js +3 -0
  829. package/dist/tools/typebox-tool.js.map +1 -1
  830. package/dist/tools/webfetch.d.ts +1 -0
  831. package/dist/tools/webfetch.d.ts.map +1 -1
  832. package/dist/tools/websearch.d.ts +1 -0
  833. package/dist/tools/websearch.d.ts.map +1 -1
  834. package/dist/tools/write.d.ts +1 -0
  835. package/dist/tools/write.d.ts.map +1 -1
  836. package/dist/utils/abort-error.d.ts +2 -0
  837. package/dist/utils/abort-error.d.ts.map +1 -0
  838. package/dist/utils/abort-error.js +7 -0
  839. package/dist/utils/abort-error.js.map +1 -0
  840. package/dist/utils/downstream.d.ts.map +1 -1
  841. package/dist/utils/downstream.js +4 -0
  842. package/dist/utils/downstream.js.map +1 -1
  843. package/dist/utils/logger.d.ts +3 -0
  844. package/dist/utils/logger.d.ts.map +1 -1
  845. package/dist/utils/logger.js +14 -3
  846. package/dist/utils/logger.js.map +1 -1
  847. package/dist/utils/path-containment.d.ts +2 -0
  848. package/dist/utils/path-containment.d.ts.map +1 -0
  849. package/dist/utils/path-containment.js +14 -0
  850. package/dist/utils/path-containment.js.map +1 -0
  851. package/dist/utils/prompt-safe-text.d.ts +7 -0
  852. package/dist/utils/prompt-safe-text.d.ts.map +1 -0
  853. package/dist/utils/prompt-safe-text.js +44 -0
  854. package/dist/utils/prompt-safe-text.js.map +1 -0
  855. package/dist/version.json +2 -2
  856. package/dist/web-server.d.ts.map +1 -1
  857. package/dist/web-server.js +32 -7
  858. package/dist/web-server.js.map +1 -1
  859. package/dist/workspace/root-resolver.d.ts +4 -1
  860. package/dist/workspace/root-resolver.d.ts.map +1 -1
  861. package/dist/workspace/root-resolver.js +16 -6
  862. package/dist/workspace/root-resolver.js.map +1 -1
  863. package/node_modules/@evalops/contracts/dist/advisor-effort.d.ts +8 -0
  864. package/node_modules/@evalops/contracts/dist/advisor-effort.d.ts.map +1 -0
  865. package/node_modules/@evalops/contracts/dist/advisor-effort.js +35 -0
  866. package/node_modules/@evalops/contracts/dist/advisor-effort.js.map +1 -0
  867. package/node_modules/@evalops/contracts/dist/delegation-prompt.d.ts +10 -0
  868. package/node_modules/@evalops/contracts/dist/delegation-prompt.d.ts.map +1 -0
  869. package/node_modules/@evalops/contracts/dist/delegation-prompt.js +48 -0
  870. package/node_modules/@evalops/contracts/dist/delegation-prompt.js.map +1 -0
  871. package/node_modules/@evalops/contracts/dist/guarded-files-settings.d.ts +20 -0
  872. package/node_modules/@evalops/contracts/dist/guarded-files-settings.d.ts.map +1 -0
  873. package/node_modules/@evalops/contracts/dist/guarded-files-settings.js +147 -0
  874. package/node_modules/@evalops/contracts/dist/guarded-files-settings.js.map +1 -0
  875. package/node_modules/@evalops/contracts/dist/headless-protocol-generated.d.ts +2 -0
  876. package/node_modules/@evalops/contracts/dist/headless-protocol-generated.d.ts.map +1 -1
  877. package/node_modules/@evalops/contracts/dist/headless-protocol-generated.js +1 -0
  878. package/node_modules/@evalops/contracts/dist/headless-protocol-generated.js.map +1 -1
  879. package/node_modules/@evalops/contracts/dist/headless-protocol-schemas.generated.d.ts +280 -5
  880. package/node_modules/@evalops/contracts/dist/headless-protocol-schemas.generated.d.ts.map +1 -1
  881. package/node_modules/@evalops/contracts/dist/headless-protocol-schemas.generated.js +36 -1
  882. package/node_modules/@evalops/contracts/dist/headless-protocol-schemas.generated.js.map +1 -1
  883. package/node_modules/@evalops/contracts/dist/index.d.ts +15 -1
  884. package/node_modules/@evalops/contracts/dist/index.d.ts.map +1 -1
  885. package/node_modules/@evalops/contracts/dist/index.js +6 -0
  886. package/node_modules/@evalops/contracts/dist/index.js.map +1 -1
  887. package/node_modules/@evalops/contracts/dist/maestro-app-server.d.ts +593 -0
  888. package/node_modules/@evalops/contracts/dist/maestro-app-server.d.ts.map +1 -0
  889. package/node_modules/@evalops/contracts/dist/maestro-app-server.js +218 -0
  890. package/node_modules/@evalops/contracts/dist/maestro-app-server.js.map +1 -0
  891. package/node_modules/@evalops/contracts/dist/proto/maestro/v1/headless_pb.d.ts +91 -0
  892. package/node_modules/@evalops/contracts/dist/proto/maestro/v1/headless_pb.d.ts.map +1 -1
  893. package/node_modules/@evalops/contracts/dist/proto/maestro/v1/headless_pb.js +92 -61
  894. package/node_modules/@evalops/contracts/dist/proto/maestro/v1/headless_pb.js.map +1 -1
  895. package/node_modules/@evalops/contracts/dist/runtime-app-server.d.ts +3 -0
  896. package/node_modules/@evalops/contracts/dist/runtime-app-server.d.ts.map +1 -1
  897. package/node_modules/@evalops/contracts/dist/runtime-constraints.d.ts +28 -0
  898. package/node_modules/@evalops/contracts/dist/runtime-constraints.d.ts.map +1 -0
  899. package/node_modules/@evalops/contracts/dist/runtime-constraints.js +71 -0
  900. package/node_modules/@evalops/contracts/dist/runtime-constraints.js.map +1 -0
  901. package/node_modules/@evalops/contracts/dist/runtime-server-request.d.ts +7 -0
  902. package/node_modules/@evalops/contracts/dist/runtime-server-request.d.ts.map +1 -1
  903. package/node_modules/@evalops/contracts/dist/runtime-server-request.js +2 -0
  904. package/node_modules/@evalops/contracts/dist/runtime-server-request.js.map +1 -1
  905. package/node_modules/@evalops/contracts/dist/scenario.d.ts +191 -0
  906. package/node_modules/@evalops/contracts/dist/scenario.d.ts.map +1 -0
  907. package/node_modules/@evalops/contracts/dist/scenario.js +4 -0
  908. package/node_modules/@evalops/contracts/dist/scenario.js.map +1 -0
  909. package/node_modules/@evalops/contracts/dist/schemas.d.ts +17 -3
  910. package/node_modules/@evalops/contracts/dist/schemas.d.ts.map +1 -1
  911. package/node_modules/@evalops/contracts/dist/schemas.js +16 -0
  912. package/node_modules/@evalops/contracts/dist/schemas.js.map +1 -1
  913. package/node_modules/@evalops/contracts/package.json +1 -1
  914. package/node_modules/@evalops/tui/package.json +1 -1
  915. package/package.json +41 -7
  916. package/skills/incident-triage/SKILL.md +40 -0
  917. package/skills/incident-triage/mcp.json +14 -0
  918. package/skills/incident-triage/reference/triage.md +20 -0
  919. package/skills/incident-triage/toolbox/incident-timeline +22 -0
  920. package/skills/incident-triage/toolbox/incident-timeline.cmd +16 -0
  921. package/skills/pr-review/SKILL.md +40 -0
  922. package/skills/pr-review/mcp.json +14 -0
  923. package/skills/pr-review/reference/rubric.md +20 -0
  924. package/skills/pr-review/toolbox/review-summary +20 -0
  925. package/skills/pr-review/toolbox/review-summary.cmd +14 -0
  926. package/skills/release-verification/SKILL.md +40 -0
  927. package/skills/release-verification/mcp.json +15 -0
  928. package/skills/release-verification/reference/checklist.md +21 -0
  929. package/skills/release-verification/toolbox/release-readiness +18 -0
  930. package/skills/release-verification/toolbox/release-readiness.cmd +12 -0
@@ -10,13 +10,48 @@ import { randomUUID } from "node:crypto";
10
10
  import { unlinkSync, writeFileSync } from "node:fs";
11
11
  import { tmpdir } from "node:os";
12
12
  import { join } from "node:path";
13
+ import { formatDelegation } from "@evalops/contracts";
14
+ import { codexSubagentTypeA2ASkillID } from "../../codex/subagent-dispatch-table.js";
13
15
  import { buildEvalOpsDelegationEnvironment, issueEvalOpsDelegationToken, } from "../../oauth/index.js";
16
+ import { rankA2ACapabilityPeers } from "../../platform/a2a-capability-market.js";
17
+ import { buildA2AUserMessage, cancelA2ATask, getA2ATask, normalizeA2ABaseUrl, sendA2AMessage, } from "../../platform/a2a-client.js";
18
+ import { resolveA2APeer, } from "../../platform/a2a-peer-registry.js";
19
+ import { extractA2ATaskText, isTerminalA2AState, recordA2ATaskStart, updateA2ATaskInLedger, } from "../../platform/a2a-task-ledger.js";
20
+ import { PlatformAgentStatusValue, listA2APeerCandidatesWithPlatform, resolveAgentRegistryServiceConfig, } from "../../platform/agent-registry-client.js";
21
+ import { getEnvValue, trimString } from "../../platform/client.js";
22
+ import { recordSubagentDispatch } from "../../telemetry.js";
14
23
  import { createLogger } from "../../utils/logger.js";
24
+ import { parseMode, resolveSubagentDispatch, } from "../modes.js";
25
+ import { publishSwarmRuntimeEvent } from "./runtime-events.js";
15
26
  const logger = createLogger("agent:swarm:executor");
16
27
  /** Default timeout per task (5 minutes) */
17
28
  const DEFAULT_TASK_TIMEOUT_MS = 5 * 60 * 1000;
18
29
  /** Maximum concurrent teammates */
19
30
  const MAX_TEAMMATES = 10;
31
+ const DEFAULT_A2A_POLL_INTERVAL_MS = 2_000;
32
+ const A2A_SKILL_PRIMARY_TASK_CLASSES = new Map([
33
+ ["maestro.subagent.code-writer", "code.implementation"],
34
+ ["maestro.subagent.code-review", "code.review"],
35
+ ["maestro.subagent.test-runner", "test.execution"],
36
+ ["maestro.subagent.repo-explorer", "repo.inspect"],
37
+ ["maestro.subagent.release-shepherd", "release.follow-through"],
38
+ ]);
39
+ const SWARM_SUBAGENT_TASK_CLASSES = new Map([
40
+ ["coder", "code.implementation"],
41
+ ["worker", "code.implementation"],
42
+ ["review", "code.review"],
43
+ ["reviewer", "code.review"],
44
+ ["explore", "repo.inspect"],
45
+ ["explorer", "repo.inspect"],
46
+ ["research", "repo.inspect"],
47
+ ["researcher", "repo.inspect"],
48
+ ["test", "test.execution"],
49
+ ["ci", "test.execution"],
50
+ ["ci-monitor", "test.execution"],
51
+ ["planner", "agent.delegation"],
52
+ ["minimal", "agent.delegation"],
53
+ ["custom", "agent.delegation"],
54
+ ]);
20
55
  /** Teammate name prefixes for friendly identification */
21
56
  const TEAMMATE_NAMES = [
22
57
  "Alpha",
@@ -30,6 +65,12 @@ const TEAMMATE_NAMES = [
30
65
  "Iota",
31
66
  "Kappa",
32
67
  ];
68
+ const MODEL_PROVIDERS = [
69
+ "anthropic",
70
+ "openai",
71
+ "openai-codex",
72
+ "google",
73
+ ];
33
74
  function toSafeTaskTempBasename(taskId) {
34
75
  const safeId = taskId
35
76
  .replace(/[^A-Za-z0-9_-]+/g, "_")
@@ -50,11 +91,18 @@ function cloneTeammate(teammate) {
50
91
  ? cloneTask(teammate.currentTask)
51
92
  : undefined,
52
93
  completedTasks: [...teammate.completedTasks],
94
+ a2a: teammate.a2a ? { ...teammate.a2a } : undefined,
53
95
  };
54
96
  }
55
97
  function cloneConfig(config) {
56
98
  return {
57
99
  ...config,
100
+ a2a: config.a2a
101
+ ? {
102
+ ...config.a2a,
103
+ peers: config.a2a.peers ? [...config.a2a.peers] : undefined,
104
+ }
105
+ : undefined,
58
106
  tasks: config.tasks.map(cloneTask),
59
107
  };
60
108
  }
@@ -69,12 +117,81 @@ function cloneState(state) {
69
117
  failedTasks: new Set(state.failedTasks),
70
118
  };
71
119
  }
120
+ function parseModelProvider(value) {
121
+ const provider = value?.trim();
122
+ if (!provider) {
123
+ return undefined;
124
+ }
125
+ return MODEL_PROVIDERS.includes(provider)
126
+ ? provider
127
+ : undefined;
128
+ }
129
+ function parseAgentMode(value) {
130
+ const mode = value?.trim();
131
+ if (!mode) {
132
+ return undefined;
133
+ }
134
+ return parseMode(mode) ?? undefined;
135
+ }
136
+ function providerFromPrefixedModel(model) {
137
+ const slashIndex = model?.indexOf("/") ?? -1;
138
+ if (!model || slashIndex <= 0) {
139
+ return undefined;
140
+ }
141
+ return parseModelProvider(model.slice(0, slashIndex));
142
+ }
143
+ function parseBooleanEnv(value) {
144
+ const normalized = value?.trim().toLowerCase();
145
+ if (!normalized) {
146
+ return undefined;
147
+ }
148
+ if (["1", "true", "yes", "on"].includes(normalized)) {
149
+ return true;
150
+ }
151
+ if (["0", "false", "no", "off"].includes(normalized)) {
152
+ return false;
153
+ }
154
+ return undefined;
155
+ }
156
+ function parsePositiveIntEnv(value) {
157
+ const parsed = Number.parseInt(value ?? "", 10);
158
+ return Number.isFinite(parsed) && parsed > 0 ? parsed : undefined;
159
+ }
160
+ function parseCSVEnv(value) {
161
+ const parsed = value
162
+ ?.split(",")
163
+ .map((item) => item.trim())
164
+ .filter(Boolean);
165
+ return parsed && parsed.length > 0 ? parsed : undefined;
166
+ }
167
+ function a2aStateCompleted(state) {
168
+ return /COMPLETED/u.test((state ?? "").toUpperCase().replace(/[\s-]+/gu, "_"));
169
+ }
170
+ function buildDispatchEnv(dispatch, reasoningEffortOverride, runtimeSelection) {
171
+ if (!dispatch) {
172
+ return {};
173
+ }
174
+ const env = {
175
+ MAESTRO_SWARM_MODE_NAME: dispatch.mode,
176
+ MAESTRO_SWARM_SUBAGENT_TYPE: dispatch.type,
177
+ MAESTRO_SWARM_MODEL: runtimeSelection?.model ?? dispatch.model,
178
+ MAESTRO_SWARM_REASONING_EFFORT: reasoningEffortOverride ?? dispatch.reasoningEffort,
179
+ MAESTRO_SWARM_DISPATCH_SOURCE: runtimeSelection?.source ?? dispatch.source,
180
+ };
181
+ const provider = runtimeSelection?.provider ?? dispatch.provider;
182
+ if (provider) {
183
+ env.MAESTRO_SWARM_MODEL_PROVIDER = provider;
184
+ }
185
+ return env;
186
+ }
72
187
  /**
73
188
  * SwarmExecutor manages a swarm of parallel agent instances.
74
189
  */
75
190
  export class SwarmExecutor {
76
191
  constructor(config) {
77
192
  this.processes = new Map();
193
+ this.remoteA2ATasks = new Map();
194
+ this.a2aRouteCursor = 0;
78
195
  this.eventHandlers = new Set();
79
196
  // Validate config
80
197
  if (config.teammateCount < 1 || config.teammateCount > MAX_TEAMMATES) {
@@ -119,6 +236,12 @@ export class SwarmExecutor {
119
236
  * Emit an event to all handlers.
120
237
  */
121
238
  emit(event) {
239
+ publishSwarmRuntimeEvent({
240
+ event,
241
+ parentSessionId: this.state.config.parentSessionId,
242
+ cwd: this.state.config.cwd,
243
+ planFile: this.state.config.planFile,
244
+ });
122
245
  for (const handler of this.eventHandlers) {
123
246
  try {
124
247
  handler(event);
@@ -138,6 +261,10 @@ export class SwarmExecutor {
138
261
  * Cancel the swarm execution.
139
262
  */
140
263
  cancel() {
264
+ const remoteTasks = [...this.remoteA2ATasks.entries()];
265
+ for (const [teammateId, remoteTask] of remoteTasks) {
266
+ void this.cancelRemoteA2ATask(teammateId, remoteTask);
267
+ }
141
268
  this.abortController.abort();
142
269
  this.state.status = "cancelled";
143
270
  // Kill all running processes
@@ -165,6 +292,24 @@ export class SwarmExecutor {
165
292
  this.processes.clear();
166
293
  logger.info("Swarm cancelled", { swarmId: this.state.id });
167
294
  }
295
+ async cancelRemoteA2ATask(teammateId, remoteTask) {
296
+ try {
297
+ const cancelledTask = await cancelA2ATask(remoteTask.route.config, remoteTask.taskId);
298
+ await this.updateA2ASwarmTaskLedger(remoteTask.route, cancelledTask);
299
+ }
300
+ catch (error) {
301
+ logger.warn("Failed to cancel remote A2A swarm task", {
302
+ error: error instanceof Error ? error.message : String(error),
303
+ swarmId: this.state.id,
304
+ teammateId,
305
+ remoteTaskId: remoteTask.taskId,
306
+ peer: remoteTask.route.name,
307
+ });
308
+ }
309
+ finally {
310
+ this.remoteA2ATasks.delete(teammateId);
311
+ }
312
+ }
168
313
  /**
169
314
  * Execute the swarm - runs all tasks with available teammates.
170
315
  */
@@ -181,6 +326,7 @@ export class SwarmExecutor {
181
326
  // Main execution loop
182
327
  while (this.state.status === "running" &&
183
328
  (this.state.pendingTasks.length > 0 || this.state.activeTasks.size > 0)) {
329
+ this.skipTasksBlockedByFailedDependencies();
184
330
  // Assign tasks to idle teammates
185
331
  await this.assignTasks();
186
332
  // Wait for any task to complete
@@ -265,8 +411,7 @@ export class SwarmExecutor {
265
411
  for (const task of this.state.pendingTasks) {
266
412
  // Check dependencies
267
413
  if (task.dependsOn && task.dependsOn.length > 0) {
268
- const allDepsCompleted = task.dependsOn.every((depId) => this.state.completedTasks.has(depId) ||
269
- this.state.failedTasks.has(depId));
414
+ const allDepsCompleted = task.dependsOn.every((depId) => this.state.completedTasks.has(depId));
270
415
  if (!allDepsCompleted)
271
416
  continue;
272
417
  }
@@ -274,15 +419,38 @@ export class SwarmExecutor {
274
419
  }
275
420
  return null;
276
421
  }
422
+ skipTasksBlockedByFailedDependencies() {
423
+ const blockedTasks = this.state.pendingTasks.filter((task) => task.dependsOn?.some((depId) => this.state.failedTasks.has(depId)));
424
+ for (const task of blockedTasks) {
425
+ const pendingIndex = this.state.pendingTasks.findIndex((candidate) => candidate.id === task.id);
426
+ if (pendingIndex >= 0) {
427
+ this.state.pendingTasks.splice(pendingIndex, 1);
428
+ }
429
+ this.state.failedTasks.add(task.id);
430
+ const failedDependency = task.dependsOn?.find((depId) => this.state.failedTasks.has(depId));
431
+ const error = `Dependency ${failedDependency ?? "unknown"} failed`;
432
+ this.emit({
433
+ type: "task_fail",
434
+ swarmId: this.state.id,
435
+ teammateId: "dependency",
436
+ taskId: task.id,
437
+ error,
438
+ });
439
+ if (!this.state.config.continueOnFailure) {
440
+ this.state.status = "failed";
441
+ }
442
+ }
443
+ }
277
444
  /**
278
445
  * Spawn a subprocess agent for a teammate.
279
446
  */
280
- async buildTeammateEnv(teammate, task) {
447
+ async buildTeammateEnv(teammate, task, dispatch, runtimeSelection) {
281
448
  const baseEnv = {
282
449
  ...process.env,
283
450
  MAESTRO_SWARM_MODE: "1",
284
451
  MAESTRO_SWARM_ID: this.state.id,
285
452
  MAESTRO_TEAMMATE_ID: teammate.id,
453
+ ...buildDispatchEnv(dispatch, this.state.config.reasoningEffort, runtimeSelection),
286
454
  };
287
455
  try {
288
456
  const delegation = await issueEvalOpsDelegationToken({
@@ -314,31 +482,302 @@ export class SwarmExecutor {
314
482
  return baseEnv;
315
483
  }
316
484
  }
485
+ resolveTaskDispatch(task, teammate, options = {}) {
486
+ const startedAt = Date.now();
487
+ const subagentType = task.subagentType ?? this.state.config.subagentType;
488
+ if (!subagentType) {
489
+ return null;
490
+ }
491
+ const mode = this.resolveParentMode();
492
+ const parentProvider = this.resolveParentModelProvider();
493
+ const dispatch = resolveSubagentDispatch(mode, subagentType, parentProvider ?? "anthropic");
494
+ if (!parentProvider && dispatch.modelTier && !options.hasModelOverride) {
495
+ this.recordTaskDispatch(task, dispatch, Math.max(0, Date.now() - startedAt), false, {
496
+ parentMode: mode,
497
+ parentModelProvider: parentProvider,
498
+ teammateId: teammate.id,
499
+ reason: "missing_parent_model_provider",
500
+ });
501
+ return null;
502
+ }
503
+ return {
504
+ dispatch,
505
+ startedAt,
506
+ latencyMs: Math.max(0, Date.now() - startedAt),
507
+ parentMode: mode,
508
+ parentModelProvider: parentProvider,
509
+ };
510
+ }
511
+ recordTaskDispatch(task, dispatch, latencyMs, success, options) {
512
+ recordSubagentDispatch({
513
+ mode: dispatch.mode,
514
+ subagentType: dispatch.type,
515
+ model: options.model ?? dispatch.model,
516
+ provider: options.provider ?? dispatch.provider,
517
+ reasoningEffort: this.state.config.reasoningEffort ?? dispatch.reasoningEffort,
518
+ latencyMs,
519
+ success,
520
+ source: options.source ?? dispatch.source,
521
+ metadata: {
522
+ swarmId: this.state.id,
523
+ teammateId: options.teammateId,
524
+ taskId: task.id,
525
+ parentMode: options.parentMode,
526
+ parentModelProvider: options.parentModelProvider,
527
+ dispatchModel: dispatch.model,
528
+ dispatchProvider: dispatch.provider,
529
+ dispatchSource: dispatch.source,
530
+ modelTier: dispatch.modelTier,
531
+ modelOverride: options.modelOverride,
532
+ reason: options.reason,
533
+ },
534
+ });
535
+ }
536
+ resolveParentMode() {
537
+ return (this.state.config.mode ??
538
+ parseAgentMode(process.env.MAESTRO_MODE) ??
539
+ "smart");
540
+ }
541
+ resolveParentModelProvider() {
542
+ return (this.state.config.modelProvider ??
543
+ parseModelProvider(process.env.MAESTRO_MODEL_PROVIDER) ??
544
+ providerFromPrefixedModel(process.env.MAESTRO_MODEL));
545
+ }
546
+ resolveA2AConfig() {
547
+ const transport = this.state.config.transport ??
548
+ trimString(process.env.MAESTRO_SWARM_TRANSPORT);
549
+ if (transport !== "a2a") {
550
+ return null;
551
+ }
552
+ const configured = this.state.config.a2a ?? {};
553
+ const peers = configured.peers ?? parseCSVEnv(getEnvValue(["MAESTRO_SWARM_A2A_PEERS"]));
554
+ return {
555
+ ...configured,
556
+ ...(peers ? { peers } : {}),
557
+ registryPath: configured.registryPath ??
558
+ trimString(process.env.MAESTRO_SWARM_A2A_REGISTRY),
559
+ tasksPath: configured.tasksPath ?? trimString(process.env.MAESTRO_SWARM_A2A_TASKS),
560
+ skillId: configured.skillId ??
561
+ trimString(process.env.MAESTRO_SWARM_A2A_SKILL_ID),
562
+ role: configured.role ?? trimString(process.env.MAESTRO_SWARM_A2A_ROLE),
563
+ discover: configured.discover ??
564
+ parseBooleanEnv(process.env.MAESTRO_SWARM_A2A_DISCOVER),
565
+ workspaceId: configured.workspaceId ??
566
+ trimString(process.env.MAESTRO_SWARM_A2A_WORKSPACE_ID),
567
+ capability: configured.capability ??
568
+ trimString(process.env.MAESTRO_SWARM_A2A_CAPABILITY),
569
+ surface: configured.surface ?? trimString(process.env.MAESTRO_SWARM_A2A_SURFACE),
570
+ preferInternalEndpoint: configured.preferInternalEndpoint ??
571
+ parseBooleanEnv(process.env.MAESTRO_SWARM_A2A_PREFER_INTERNAL),
572
+ limit: configured.limit ??
573
+ parsePositiveIntEnv(process.env.MAESTRO_SWARM_A2A_LIMIT),
574
+ timeoutMs: configured.timeoutMs ??
575
+ parsePositiveIntEnv(process.env.MAESTRO_SWARM_A2A_TIMEOUT_MS),
576
+ maxAttempts: configured.maxAttempts ??
577
+ parsePositiveIntEnv(process.env.MAESTRO_SWARM_A2A_MAX_ATTEMPTS),
578
+ maxWaitMs: configured.maxWaitMs ??
579
+ parsePositiveIntEnv(process.env.MAESTRO_SWARM_A2A_MAX_WAIT_MS),
580
+ pollIntervalMs: configured.pollIntervalMs ??
581
+ parsePositiveIntEnv(process.env.MAESTRO_SWARM_A2A_POLL_INTERVAL_MS),
582
+ };
583
+ }
584
+ async resolveA2ATeammateRoute(teammate, task, options) {
585
+ if (options.discover) {
586
+ return this.resolvePlatformDiscoveredA2ATeammateRoute(teammate, task, options);
587
+ }
588
+ const peerName = this.selectA2APeerName(teammate, task, options);
589
+ const peer = await resolveA2APeer(peerName, {
590
+ path: options.registryPath,
591
+ timeoutMs: options.timeoutMs,
592
+ maxAttempts: options.maxAttempts,
593
+ });
594
+ return {
595
+ name: peer.name,
596
+ displayName: peer.entry.displayName,
597
+ config: peer.config,
598
+ skillId: this.resolveA2ASkillId(task, options, peer),
599
+ role: options.role ?? task.subagentType,
600
+ tasksPath: options.tasksPath,
601
+ source: "registry",
602
+ };
603
+ }
604
+ async resolvePlatformDiscoveredA2ATeammateRoute(teammate, task, options) {
605
+ const skillId = this.resolveA2ASkillId(task, options);
606
+ const pinnedPeer = trimString(task.a2aPeer);
607
+ const routeIndex = pinnedPeer ? 0 : this.nextA2ARouteIndex();
608
+ const candidates = await listA2APeerCandidatesWithPlatform({
609
+ workspaceId: options.workspaceId,
610
+ capability: options.capability,
611
+ surface: options.surface ?? "a2a",
612
+ status: PlatformAgentStatusValue.Idle,
613
+ limit: options.limit ??
614
+ (pinnedPeer ? undefined : this.defaultA2ADiscoveryLimit()),
615
+ skillId,
616
+ preferInternalEndpoint: options.preferInternalEndpoint,
617
+ });
618
+ if (!candidates || candidates.length === 0) {
619
+ throw new Error(`No Platform A2A peers available for swarm task ${task.id}${skillId ? ` with skill ${skillId}` : ""}`);
620
+ }
621
+ const candidatePool = pinnedPeer
622
+ ? candidates.filter((candidate) => platformA2ACandidateMatchesPeer(candidate, pinnedPeer))
623
+ : candidates;
624
+ if (candidatePool.length === 0) {
625
+ throw new Error(`No Platform A2A peer matched task ${task.id} a2aPeer ${pinnedPeer}`);
626
+ }
627
+ const rankedCandidates = rankA2ACapabilityPeers(candidatePool, {
628
+ skillId,
629
+ taskClass: this.resolveA2ATaskClass(task, options, skillId),
630
+ preferInternalEndpoint: options.preferInternalEndpoint,
631
+ });
632
+ if (rankedCandidates.length === 0) {
633
+ throw new Error(`No Platform A2A peer satisfied capability policy for swarm task ${task.id}${skillId ? ` with skill ${skillId}` : ""}`);
634
+ }
635
+ const candidateIndex = pinnedPeer
636
+ ? 0
637
+ : routeIndex % rankedCandidates.length;
638
+ const ranked = rankedCandidates[candidateIndex];
639
+ const candidate = ranked?.candidate;
640
+ if (!candidate || !ranked) {
641
+ throw new Error("Platform A2A peer discovery returned an invalid candidate");
642
+ }
643
+ logger.info("Selected Platform A2A peer through capability market", {
644
+ swarmId: this.state.id,
645
+ taskId: task.id,
646
+ agentId: candidate.agent.id,
647
+ score: ranked.score,
648
+ reasons: ranked.reasons,
649
+ skillId: ranked.selectedSkill?.id ?? skillId,
650
+ });
651
+ const config = await this.a2aConfigForPlatformCandidate(candidate, options);
652
+ return {
653
+ name: candidate.agent.name ?? candidate.agent.id ?? candidate.endpointUrl,
654
+ displayName: candidate.agent.name,
655
+ config,
656
+ skillId: ranked.selectedSkill?.id ?? skillId,
657
+ role: options.role ?? task.subagentType,
658
+ tasksPath: options.tasksPath,
659
+ source: "platform-agent-registry",
660
+ };
661
+ }
662
+ async a2aConfigForPlatformCandidate(candidate, options) {
663
+ const platformConfig = await resolveAgentRegistryServiceConfig();
664
+ if (!platformConfig) {
665
+ throw new Error("Platform Agent Registry service is not configured for A2A swarm discovery");
666
+ }
667
+ return {
668
+ baseUrl: normalizeA2ABaseUrl(candidate.endpointUrl),
669
+ ...(platformConfig.token ? { token: platformConfig.token } : {}),
670
+ ...(platformConfig.organizationId
671
+ ? { organizationId: platformConfig.organizationId }
672
+ : {}),
673
+ workspaceId: candidate.agent.workspaceId ??
674
+ options.workspaceId ??
675
+ platformConfig.workspaceId,
676
+ ...(candidate.agent.id ? { agentId: candidate.agent.id } : {}),
677
+ actorId: "maestro-swarm",
678
+ timeoutMs: options.timeoutMs ?? platformConfig.timeoutMs,
679
+ maxAttempts: options.maxAttempts ?? platformConfig.maxAttempts,
680
+ };
681
+ }
682
+ selectA2APeerName(teammate, task, options) {
683
+ const peerName = trimString(task.a2aPeer);
684
+ if (peerName) {
685
+ return peerName;
686
+ }
687
+ const peers = options.peers ?? [];
688
+ const selected = peers[this.nextA2ARouteIndex() % peers.length];
689
+ if (!selected) {
690
+ throw new Error("Remote A2A swarm transport requires a task a2aPeer, a2a.peers, MAESTRO_SWARM_A2A_PEERS, or a2a.discover=true");
691
+ }
692
+ return selected;
693
+ }
694
+ resolveA2ASkillId(task, options, peer) {
695
+ const configured = trimString(task.a2aSkillId) ??
696
+ trimString(options.skillId) ??
697
+ codexSubagentTypeA2ASkillID(task.subagentType ?? this.state.config.subagentType);
698
+ if (configured) {
699
+ return configured;
700
+ }
701
+ return peer?.entry.skills?.[0]?.id;
702
+ }
703
+ resolveA2ATaskClass(task, options, skillId) {
704
+ const mappedSkillTaskClass = skillId
705
+ ? A2A_SKILL_PRIMARY_TASK_CLASSES.get(skillId)
706
+ : undefined;
707
+ if (mappedSkillTaskClass) {
708
+ return mappedSkillTaskClass;
709
+ }
710
+ if (skillId &&
711
+ (trimString(task.a2aSkillId) || trimString(options.skillId))) {
712
+ return undefined;
713
+ }
714
+ const subagentType = trimString(task.subagentType ?? this.state.config.subagentType);
715
+ return ((subagentType
716
+ ? SWARM_SUBAGENT_TASK_CLASSES.get(subagentType)
717
+ : undefined) ?? subagentType);
718
+ }
719
+ teammateIndex(teammate) {
720
+ const index = this.state.teammates.findIndex((item) => item.id === teammate.id);
721
+ return index >= 0 ? index : 0;
722
+ }
723
+ nextA2ARouteIndex() {
724
+ const index = this.a2aRouteCursor;
725
+ this.a2aRouteCursor += 1;
726
+ return index;
727
+ }
728
+ defaultA2ADiscoveryLimit() {
729
+ return Math.max(1, this.state.config.teammateCount, this.state.config.tasks.length);
730
+ }
317
731
  async spawnTeammate(teammate, task) {
318
732
  const tmpFile = join(tmpdir(), `${this.state.id}-${toSafeTaskTempBasename(task.id)}`);
319
- // Build prompt for the teammate
320
- let prompt = `# Swarm Task: ${task.id}\n\n`;
321
- prompt += `You are teammate "${teammate.name}" in a swarm working on a plan.\n\n`;
322
- prompt += `## Your Task\n\n${task.prompt}\n\n`;
323
- if (task.files && task.files.length > 0) {
324
- prompt += `## Relevant Files\n\n${task.files.map((f) => `- ${f}`).join("\n")}\n\n`;
325
- }
326
- prompt += "## Instructions\n\n";
327
- prompt += "1. Focus ONLY on your assigned task\n";
328
- prompt += "2. Make changes directly - do not ask for confirmation\n";
329
- prompt += "3. Report completion by summarizing what you did\n";
733
+ const delegationPrompt = {
734
+ goal: `Complete swarm task ${task.id} as teammate "${teammate.name}".`,
735
+ context: `You are teammate "${teammate.name}" in swarm ${this.state.id}, working from plan file ${this.state.config.planFile}.`,
736
+ task: task.prompt,
737
+ evidence: task.files?.length
738
+ ? task.files.map((file) => `Relevant file: ${file}`)
739
+ : [],
740
+ validation: "Make the requested changes directly, add or update focused tests when behavior changes, and run the relevant verification before finishing.",
741
+ stoppingCondition: "Stop when the assigned task is complete and report what changed, what you verified, and any blockers. Do not broaden into unrelated tasks.",
742
+ };
743
+ const prompt = formatDelegation(delegationPrompt);
330
744
  writeFileSync(tmpFile, prompt);
745
+ const a2aConfig = this.resolveA2AConfig();
746
+ if (a2aConfig) {
747
+ void this.spawnA2ATeammate(teammate, task, prompt, tmpFile, a2aConfig);
748
+ return;
749
+ }
750
+ const modelOverride = task.model !== undefined
751
+ ? "task"
752
+ : this.state.config.model !== undefined
753
+ ? "config"
754
+ : undefined;
755
+ const hasModelOverride = Boolean(modelOverride);
756
+ const dispatchResolution = this.resolveTaskDispatch(task, teammate, {
757
+ hasModelOverride,
758
+ });
759
+ const dispatch = dispatchResolution?.dispatch ?? null;
760
+ const model = task.model ?? this.state.config.model ?? dispatch?.model;
761
+ const overrideProvider = hasModelOverride
762
+ ? (providerFromPrefixedModel(model) ?? "unknown")
763
+ : undefined;
764
+ const telemetryProvider = overrideProvider ?? (hasModelOverride ? "unknown" : dispatch?.provider);
765
+ const dispatchSource = hasModelOverride ? "override" : dispatch?.source;
766
+ const provider = hasModelOverride ? undefined : dispatch?.provider;
331
767
  const args = [
332
768
  "--no-session",
333
- ...(task.model
334
- ? ["--model", task.model]
335
- : this.state.config.model
336
- ? ["--model", this.state.config.model]
337
- : []),
769
+ ...(provider ? ["--provider", provider] : []),
770
+ ...(model ? ["--model", model] : []),
338
771
  "exec",
339
772
  tmpFile,
340
773
  ];
341
- const env = await this.buildTeammateEnv(teammate, task);
774
+ const env = await this.buildTeammateEnv(teammate, task, dispatch, dispatch
775
+ ? {
776
+ model,
777
+ provider: telemetryProvider,
778
+ source: dispatchSource,
779
+ }
780
+ : undefined);
342
781
  if (this.state.status !== "running" ||
343
782
  this.abortController.signal.aborted) {
344
783
  try {
@@ -368,6 +807,26 @@ export class SwarmExecutor {
368
807
  });
369
808
  teammate.pid = proc.pid;
370
809
  this.processes.set(teammate.id, proc);
810
+ let dispatchRecorded = false;
811
+ const recordDispatchOutcome = (success, reason) => {
812
+ if (!dispatch || !dispatchResolution || dispatchRecorded) {
813
+ return;
814
+ }
815
+ dispatchRecorded = true;
816
+ this.recordTaskDispatch(task, dispatch, Math.max(0, Date.now() - dispatchResolution.startedAt), success, {
817
+ parentMode: dispatchResolution.parentMode,
818
+ parentModelProvider: dispatchResolution.parentModelProvider,
819
+ teammateId: teammate.id,
820
+ model,
821
+ provider: telemetryProvider,
822
+ source: dispatchSource,
823
+ modelOverride,
824
+ reason,
825
+ });
826
+ };
827
+ proc.once("spawn", () => {
828
+ recordDispatchOutcome(true);
829
+ });
371
830
  let output = "";
372
831
  let errorOutput = "";
373
832
  proc.stdout?.on("data", (data) => {
@@ -449,6 +908,7 @@ export class SwarmExecutor {
449
908
  }
450
909
  });
451
910
  proc.on("error", (err) => {
911
+ recordDispatchOutcome(false, "spawn_error");
452
912
  clearTimeout(timeoutHandle);
453
913
  this.processes.delete(teammate.id);
454
914
  this.state.activeTasks.delete(task.id);
@@ -499,6 +959,291 @@ export class SwarmExecutor {
499
959
  }
500
960
  });
501
961
  }
962
+ async spawnA2ATeammate(teammate, task, prompt, tmpFile, options) {
963
+ try {
964
+ const route = await this.resolveA2ATeammateRoute(teammate, task, options);
965
+ const messageId = `maestro-swarm-message-${randomUUID()}`;
966
+ const contextId = `maestro-swarm:${this.state.id}:${task.id}`;
967
+ const sent = await sendA2AMessage(route.config, {
968
+ message: buildA2AUserMessage({
969
+ messageId,
970
+ contextId,
971
+ text: prompt,
972
+ metadata: this.buildA2ASwarmMessageMetadata(teammate, task, route),
973
+ }),
974
+ configuration: {
975
+ returnImmediately: true,
976
+ acceptedOutputModes: ["text/plain", "application/json"],
977
+ },
978
+ metadata: {
979
+ route: "maestro_swarm",
980
+ transport: "a2a",
981
+ swarmId: this.state.id,
982
+ taskId: task.id,
983
+ teammateId: teammate.id,
984
+ peer: route.name,
985
+ source: route.source,
986
+ },
987
+ });
988
+ teammate.a2a = {
989
+ peer: route.name,
990
+ peerDisplayName: route.displayName,
991
+ source: route.source,
992
+ taskId: sent.task.id,
993
+ contextId: sent.task.contextId ?? contextId,
994
+ messageId,
995
+ skillId: route.skillId,
996
+ role: route.role,
997
+ };
998
+ this.remoteA2ATasks.set(teammate.id, {
999
+ route,
1000
+ taskId: sent.task.id,
1001
+ });
1002
+ await this.recordA2ASwarmTaskStart(route, task, sent.task, {
1003
+ messageId,
1004
+ contextId,
1005
+ });
1006
+ if (this.state.status === "cancelled" ||
1007
+ this.abortController.signal.aborted) {
1008
+ await this.cancelRemoteA2ATask(teammate.id, {
1009
+ route,
1010
+ taskId: sent.task.id,
1011
+ });
1012
+ return;
1013
+ }
1014
+ const remoteTask = await this.waitForA2ASwarmTask(route.config, sent.task, options);
1015
+ await this.updateA2ASwarmTaskLedger(route, remoteTask);
1016
+ this.completeA2ATeammate(teammate, task, remoteTask, route);
1017
+ }
1018
+ catch (error) {
1019
+ if (this.state.status !== "cancelled" &&
1020
+ !this.abortController.signal.aborted) {
1021
+ const remoteTask = this.remoteA2ATasks.get(teammate.id);
1022
+ if (remoteTask) {
1023
+ await this.cancelRemoteA2ATask(teammate.id, remoteTask);
1024
+ }
1025
+ }
1026
+ this.failA2ATeammate(teammate, task, error);
1027
+ }
1028
+ finally {
1029
+ this.remoteA2ATasks.delete(teammate.id);
1030
+ try {
1031
+ unlinkSync(tmpFile);
1032
+ }
1033
+ catch {
1034
+ // Ignore cleanup errors
1035
+ }
1036
+ }
1037
+ }
1038
+ buildA2ASwarmMessageMetadata(teammate, task, route) {
1039
+ const currentDelegationId = `${this.state.id}:${task.id}`;
1040
+ const lineage = {
1041
+ rootDelegationId: this.state.id,
1042
+ ...(this.state.config.parentSessionId
1043
+ ? { parentDelegationId: this.state.config.parentSessionId }
1044
+ : {}),
1045
+ currentDelegationId,
1046
+ delegationChain: [this.state.id, currentDelegationId],
1047
+ delegationChainDepth: 1,
1048
+ maxDelegationChainDepth: 1,
1049
+ };
1050
+ const subagentRequest = route.skillId
1051
+ ? {
1052
+ skillId: route.skillId,
1053
+ role: route.role,
1054
+ cwd: this.state.config.cwd,
1055
+ taskId: task.id,
1056
+ swarmId: this.state.id,
1057
+ }
1058
+ : undefined;
1059
+ return {
1060
+ requestKind: "maestro-swarm-task",
1061
+ transport: "a2a",
1062
+ relayPeer: route.name,
1063
+ swarmId: this.state.id,
1064
+ teammateId: teammate.id,
1065
+ teammateName: teammate.name,
1066
+ taskId: task.id,
1067
+ ...(route.skillId ? { a2aSkillId: route.skillId } : {}),
1068
+ ...(task.files?.length ? { files: task.files } : {}),
1069
+ swarm: lineage,
1070
+ evalops: {
1071
+ swarm: lineage,
1072
+ transport: "a2a",
1073
+ peer: route.name,
1074
+ },
1075
+ ...(subagentRequest
1076
+ ? { "evalops.subagentRequest": subagentRequest }
1077
+ : {}),
1078
+ };
1079
+ }
1080
+ async waitForA2ASwarmTask(config, initialTask, options) {
1081
+ const maxWaitMs = options.maxWaitMs ??
1082
+ this.state.config.taskTimeout ??
1083
+ DEFAULT_TASK_TIMEOUT_MS;
1084
+ const pollIntervalMs = options.pollIntervalMs ?? DEFAULT_A2A_POLL_INTERVAL_MS;
1085
+ const deadline = Date.now() + maxWaitMs;
1086
+ let task = initialTask;
1087
+ while (!isTerminalA2AState(task.status.state) &&
1088
+ Date.now() < deadline &&
1089
+ !this.abortController.signal.aborted) {
1090
+ await new Promise((resolve) => setTimeout(resolve, pollIntervalMs));
1091
+ task = await getA2ATask(config, task.id, {
1092
+ signal: this.abortController.signal,
1093
+ });
1094
+ }
1095
+ if (!isTerminalA2AState(task.status.state)) {
1096
+ throw new Error(`Timed out waiting for remote A2A task ${task.id}; last state ${task.status.state}`);
1097
+ }
1098
+ return task;
1099
+ }
1100
+ completeA2ATeammate(teammate, task, remoteTask, route) {
1101
+ this.state.activeTasks.delete(task.id);
1102
+ teammate.completedAt = Date.now();
1103
+ teammate.currentTask = undefined;
1104
+ teammate.output =
1105
+ extractA2ATaskText(remoteTask) ??
1106
+ `Remote A2A task ${remoteTask.id} finished with ${remoteTask.status.state}`;
1107
+ if (this.state.status === "cancelled" || teammate.status === "cancelled") {
1108
+ teammate.status = "cancelled";
1109
+ this.emit({
1110
+ type: "teammate_complete",
1111
+ swarmId: this.state.id,
1112
+ teammate,
1113
+ });
1114
+ return;
1115
+ }
1116
+ if (a2aStateCompleted(remoteTask.status.state)) {
1117
+ teammate.status = "completed";
1118
+ teammate.completedTasks.push(task.id);
1119
+ this.state.completedTasks.add(task.id);
1120
+ this.emit({
1121
+ type: "task_complete",
1122
+ swarmId: this.state.id,
1123
+ teammateId: teammate.id,
1124
+ taskId: task.id,
1125
+ output: teammate.output,
1126
+ });
1127
+ }
1128
+ else {
1129
+ teammate.status = "failed";
1130
+ teammate.error = `Remote A2A task ${remoteTask.id} on ${route.name} ended in ${remoteTask.status.state}`;
1131
+ this.state.failedTasks.add(task.id);
1132
+ this.emit({
1133
+ type: "task_fail",
1134
+ swarmId: this.state.id,
1135
+ teammateId: teammate.id,
1136
+ taskId: task.id,
1137
+ error: teammate.error,
1138
+ });
1139
+ if (!this.state.config.continueOnFailure) {
1140
+ this.state.status = "failed";
1141
+ }
1142
+ }
1143
+ this.emit({
1144
+ type: "teammate_complete",
1145
+ swarmId: this.state.id,
1146
+ teammate,
1147
+ });
1148
+ if (this.state.status === "running" &&
1149
+ (this.state.pendingTasks.length > 0 || this.state.activeTasks.size > 0) &&
1150
+ (teammate.status === "completed" || this.state.config.continueOnFailure)) {
1151
+ teammate.status = "pending";
1152
+ teammate.error = undefined;
1153
+ }
1154
+ }
1155
+ failA2ATeammate(teammate, task, error) {
1156
+ this.state.activeTasks.delete(task.id);
1157
+ teammate.completedAt = Date.now();
1158
+ teammate.currentTask = undefined;
1159
+ if (this.state.status === "cancelled" || teammate.status === "cancelled") {
1160
+ teammate.status = "cancelled";
1161
+ this.emit({
1162
+ type: "teammate_complete",
1163
+ swarmId: this.state.id,
1164
+ teammate,
1165
+ });
1166
+ return;
1167
+ }
1168
+ if (teammate.a2a && !this.remoteA2ATasks.has(teammate.id)) {
1169
+ teammate.a2a = undefined;
1170
+ }
1171
+ teammate.status = "failed";
1172
+ teammate.error = error instanceof Error ? error.message : String(error);
1173
+ this.state.failedTasks.add(task.id);
1174
+ this.emit({
1175
+ type: "task_fail",
1176
+ swarmId: this.state.id,
1177
+ teammateId: teammate.id,
1178
+ taskId: task.id,
1179
+ error: teammate.error,
1180
+ });
1181
+ if (!this.state.config.continueOnFailure) {
1182
+ this.state.status = "failed";
1183
+ }
1184
+ this.emit({
1185
+ type: "teammate_complete",
1186
+ swarmId: this.state.id,
1187
+ teammate,
1188
+ });
1189
+ if (this.state.status === "running" &&
1190
+ (this.state.pendingTasks.length > 0 || this.state.activeTasks.size > 0) &&
1191
+ this.state.config.continueOnFailure) {
1192
+ teammate.status = "pending";
1193
+ teammate.error = undefined;
1194
+ teammate.a2a = undefined;
1195
+ }
1196
+ }
1197
+ async recordA2ASwarmTaskStart(route, task, remoteTask, ids) {
1198
+ try {
1199
+ await recordA2ATaskStart({
1200
+ path: route.tasksPath,
1201
+ peer: route.name,
1202
+ peerDisplayName: route.displayName,
1203
+ task: remoteTask,
1204
+ text: task.prompt,
1205
+ messageId: ids.messageId,
1206
+ contextId: remoteTask.contextId ?? ids.contextId,
1207
+ kind: "delegation",
1208
+ role: route.role,
1209
+ cwd: this.state.config.cwd,
1210
+ metadata: {
1211
+ requestKind: "maestro-swarm-task",
1212
+ relayPeer: route.name,
1213
+ swarmId: this.state.id,
1214
+ taskId: task.id,
1215
+ transport: "a2a",
1216
+ source: route.source,
1217
+ a2aSkillId: route.skillId,
1218
+ },
1219
+ });
1220
+ }
1221
+ catch (error) {
1222
+ logger.warn("Failed to record remote A2A swarm task in local ledger", {
1223
+ error: error instanceof Error ? error.message : String(error),
1224
+ swarmId: this.state.id,
1225
+ taskId: task.id,
1226
+ peer: route.name,
1227
+ });
1228
+ }
1229
+ }
1230
+ async updateA2ASwarmTaskLedger(route, remoteTask) {
1231
+ try {
1232
+ await updateA2ATaskInLedger({
1233
+ path: route.tasksPath,
1234
+ peer: route.name,
1235
+ task: remoteTask,
1236
+ });
1237
+ }
1238
+ catch (error) {
1239
+ logger.warn("Failed to update remote A2A swarm task in local ledger", {
1240
+ error: error instanceof Error ? error.message : String(error),
1241
+ swarmId: this.state.id,
1242
+ remoteTaskId: remoteTask.id,
1243
+ peer: route.name,
1244
+ });
1245
+ }
1246
+ }
502
1247
  /**
503
1248
  * Wait for any active task to complete.
504
1249
  */
@@ -516,6 +1261,36 @@ export class SwarmExecutor {
516
1261
  });
517
1262
  }
518
1263
  }
1264
+ function platformA2ACandidateMatchesPeer(candidate, peer) {
1265
+ const selector = normalizePeerSelector(peer);
1266
+ const selectorBaseUrl = normalizePeerBaseUrl(peer);
1267
+ if (!selector) {
1268
+ return false;
1269
+ }
1270
+ const values = [
1271
+ candidate.agent.id,
1272
+ candidate.agent.name,
1273
+ candidate.endpointUrl,
1274
+ candidate.agentCardUrl,
1275
+ ];
1276
+ return values.some((value) => {
1277
+ const candidateSelector = normalizePeerSelector(value);
1278
+ if (candidateSelector && candidateSelector === selector) {
1279
+ return true;
1280
+ }
1281
+ const candidateBaseUrl = normalizePeerBaseUrl(value);
1282
+ return Boolean(selectorBaseUrl &&
1283
+ candidateBaseUrl &&
1284
+ candidateBaseUrl === selectorBaseUrl);
1285
+ });
1286
+ }
1287
+ function normalizePeerSelector(value) {
1288
+ return trimString(value)?.toLowerCase();
1289
+ }
1290
+ function normalizePeerBaseUrl(value) {
1291
+ const trimmed = trimString(value);
1292
+ return trimmed ? normalizeA2ABaseUrl(trimmed).toLowerCase() : undefined;
1293
+ }
519
1294
  /**
520
1295
  * Create and execute a swarm.
521
1296
  */