@evalops/maestro 0.10.21 → 0.10.23

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 (154) hide show
  1. package/dist/agent/agent.d.ts +1 -0
  2. package/dist/agent/agent.d.ts.map +1 -1
  3. package/dist/agent/agent.js +15 -4
  4. package/dist/agent/agent.js.map +1 -1
  5. package/dist/agent/swarm/executor.d.ts.map +1 -1
  6. package/dist/agent/swarm/executor.js +68 -3
  7. package/dist/agent/swarm/executor.js.map +1 -1
  8. package/dist/agent/swarm/types.d.ts +3 -0
  9. package/dist/agent/swarm/types.d.ts.map +1 -1
  10. package/dist/agent/swarm/types.js.map +1 -1
  11. package/dist/agent/transport.d.ts.map +1 -1
  12. package/dist/agent/transport.js +7 -1
  13. package/dist/agent/transport.js.map +1 -1
  14. package/dist/audit/logger.d.ts +1 -1
  15. package/dist/bootstrap/tools-setup.d.ts.map +1 -1
  16. package/dist/bootstrap/tools-setup.js +3 -2
  17. package/dist/bootstrap/tools-setup.js.map +1 -1
  18. package/dist/cli/commands/a2a.d.ts.map +1 -1
  19. package/dist/cli/commands/a2a.js +141 -8
  20. package/dist/cli/commands/a2a.js.map +1 -1
  21. package/dist/cli/commands/codex.d.ts.map +1 -1
  22. package/dist/cli/commands/codex.js +4 -3
  23. package/dist/cli/commands/codex.js.map +1 -1
  24. package/dist/cli/commands/hosted-runner.d.ts +1 -0
  25. package/dist/cli/commands/hosted-runner.d.ts.map +1 -1
  26. package/dist/cli/commands/hosted-runner.js +31 -2
  27. package/dist/cli/commands/hosted-runner.js.map +1 -1
  28. package/dist/cli/commands/run.d.ts.map +1 -1
  29. package/dist/cli/commands/run.js +2 -9
  30. package/dist/cli/commands/run.js.map +1 -1
  31. package/dist/cli-tui/commands/a2a-handlers.d.ts.map +1 -1
  32. package/dist/cli-tui/commands/a2a-handlers.js +55 -0
  33. package/dist/cli-tui/commands/a2a-handlers.js.map +1 -1
  34. package/dist/cli.js +3925 -2024
  35. package/dist/codex/compatibility.d.ts +17 -1
  36. package/dist/codex/compatibility.d.ts.map +1 -1
  37. package/dist/codex/compatibility.js +57 -1
  38. package/dist/codex/compatibility.js.map +1 -1
  39. package/dist/guardian/config.d.ts +8 -6
  40. package/dist/guardian/config.d.ts.map +1 -1
  41. package/dist/guardian/config.js +33 -7
  42. package/dist/guardian/config.js.map +1 -1
  43. package/dist/guardian/runner.d.ts.map +1 -1
  44. package/dist/guardian/runner.js +54 -9
  45. package/dist/guardian/runner.js.map +1 -1
  46. package/dist/mcp/config.d.ts.map +1 -1
  47. package/dist/mcp/config.js +2 -0
  48. package/dist/mcp/config.js.map +1 -1
  49. package/dist/mcp/fathom-cua.d.ts +3 -0
  50. package/dist/mcp/fathom-cua.d.ts.map +1 -0
  51. package/dist/mcp/fathom-cua.js +158 -0
  52. package/dist/mcp/fathom-cua.js.map +1 -0
  53. package/dist/mcp/index.d.ts +1 -0
  54. package/dist/mcp/index.d.ts.map +1 -1
  55. package/dist/mcp/index.js +1 -0
  56. package/dist/mcp/index.js.map +1 -1
  57. package/dist/node_modules/@evalops/contracts/dist/artifacts.d.ts +58 -0
  58. package/dist/node_modules/@evalops/contracts/dist/artifacts.d.ts.map +1 -0
  59. package/dist/node_modules/@evalops/contracts/dist/artifacts.js +191 -0
  60. package/dist/node_modules/@evalops/contracts/dist/artifacts.js.map +1 -0
  61. package/dist/node_modules/@evalops/contracts/dist/headless-protocol-schemas.generated.d.ts +10 -10
  62. package/dist/node_modules/@evalops/contracts/dist/index.d.ts +1 -0
  63. package/dist/node_modules/@evalops/contracts/dist/index.d.ts.map +1 -1
  64. package/dist/node_modules/@evalops/contracts/dist/index.js +1 -0
  65. package/dist/node_modules/@evalops/contracts/dist/index.js.map +1 -1
  66. package/dist/node_modules/@evalops/contracts/dist/runtime-app-server.d.ts +1 -1
  67. package/dist/node_modules/@evalops/contracts/dist/runtime-server-request.d.ts +3 -3
  68. package/dist/node_modules/@evalops/contracts/package.json +1 -1
  69. package/dist/node_modules/@evalops/tui/package.json +1 -1
  70. package/dist/platform/a2a-cockpit.d.ts +90 -0
  71. package/dist/platform/a2a-cockpit.d.ts.map +1 -0
  72. package/dist/platform/a2a-cockpit.js +302 -0
  73. package/dist/platform/a2a-cockpit.js.map +1 -0
  74. package/dist/platform/a2a-fleet.d.ts +14 -0
  75. package/dist/platform/a2a-fleet.d.ts.map +1 -1
  76. package/dist/platform/a2a-fleet.js +66 -1
  77. package/dist/platform/a2a-fleet.js.map +1 -1
  78. package/dist/platform/a2a-ownership.d.ts +27 -0
  79. package/dist/platform/a2a-ownership.d.ts.map +1 -0
  80. package/dist/platform/a2a-ownership.js +149 -0
  81. package/dist/platform/a2a-ownership.js.map +1 -0
  82. package/dist/platform/a2a-task-ledger.d.ts.map +1 -1
  83. package/dist/platform/a2a-task-ledger.js +29 -5
  84. package/dist/platform/a2a-task-ledger.js.map +1 -1
  85. package/dist/server/agent-trajectory-replay-lab.d.ts +36 -0
  86. package/dist/server/agent-trajectory-replay-lab.d.ts.map +1 -0
  87. package/dist/server/agent-trajectory-replay-lab.js +48 -0
  88. package/dist/server/agent-trajectory-replay-lab.js.map +1 -0
  89. package/dist/server/any-agent-control-plane-proof.d.ts +42 -0
  90. package/dist/server/any-agent-control-plane-proof.d.ts.map +1 -0
  91. package/dist/server/any-agent-control-plane-proof.js +175 -0
  92. package/dist/server/any-agent-control-plane-proof.js.map +1 -0
  93. package/dist/server/app-context.d.ts +1 -0
  94. package/dist/server/app-context.d.ts.map +1 -1
  95. package/dist/server/app-context.js.map +1 -1
  96. package/dist/server/handlers/a2a-cockpit.d.ts +3 -0
  97. package/dist/server/handlers/a2a-cockpit.d.ts.map +1 -0
  98. package/dist/server/handlers/a2a-cockpit.js +71 -0
  99. package/dist/server/handlers/a2a-cockpit.js.map +1 -0
  100. package/dist/server/handlers/headless-sessions.d.ts.map +1 -1
  101. package/dist/server/handlers/headless-sessions.js +17 -2
  102. package/dist/server/handlers/headless-sessions.js.map +1 -1
  103. package/dist/server/handlers/session-artifacts.d.ts.map +1 -1
  104. package/dist/server/handlers/session-artifacts.js +14 -58
  105. package/dist/server/handlers/session-artifacts.js.map +1 -1
  106. package/dist/server/handlers/session-replay-lab.d.ts +13 -0
  107. package/dist/server/handlers/session-replay-lab.d.ts.map +1 -0
  108. package/dist/server/handlers/session-replay-lab.js +80 -0
  109. package/dist/server/handlers/session-replay-lab.js.map +1 -0
  110. package/dist/server/handlers/stats.js +1 -1
  111. package/dist/server/handlers/stats.js.map +1 -1
  112. package/dist/server/handlers/status.d.ts +44 -3
  113. package/dist/server/handlers/status.d.ts.map +1 -1
  114. package/dist/server/handlers/status.js +227 -17
  115. package/dist/server/handlers/status.js.map +1 -1
  116. package/dist/server/headless-runtime-service.d.ts +17 -0
  117. package/dist/server/headless-runtime-service.d.ts.map +1 -1
  118. package/dist/server/headless-runtime-service.js +143 -3
  119. package/dist/server/headless-runtime-service.js.map +1 -1
  120. package/dist/server/hosted-agent-runtime-progress.d.ts +17 -0
  121. package/dist/server/hosted-agent-runtime-progress.d.ts.map +1 -1
  122. package/dist/server/hosted-agent-runtime-progress.js +352 -15
  123. package/dist/server/hosted-agent-runtime-progress.js.map +1 -1
  124. package/dist/server/routes.d.ts.map +1 -1
  125. package/dist/server/routes.js +14 -0
  126. package/dist/server/routes.js.map +1 -1
  127. package/dist/services/intelligent-router/index.d.ts +1 -1
  128. package/dist/services/intelligent-router/index.d.ts.map +1 -1
  129. package/dist/services/intelligent-router/index.js +1 -1
  130. package/dist/services/intelligent-router/index.js.map +1 -1
  131. package/dist/services/intelligent-router/normalize.d.ts +10 -2
  132. package/dist/services/intelligent-router/normalize.d.ts.map +1 -1
  133. package/dist/services/intelligent-router/normalize.js +20 -1
  134. package/dist/services/intelligent-router/normalize.js.map +1 -1
  135. package/dist/services/intelligent-router/service.d.ts.map +1 -1
  136. package/dist/services/intelligent-router/service.js +35 -0
  137. package/dist/services/intelligent-router/service.js.map +1 -1
  138. package/dist/services/intelligent-router/types.d.ts +13 -0
  139. package/dist/services/intelligent-router/types.d.ts.map +1 -1
  140. package/dist/services/intelligent-router/types.js +1 -0
  141. package/dist/services/intelligent-router/types.js.map +1 -1
  142. package/dist/telemetry/cli-command-aggregator.d.ts +1 -0
  143. package/dist/telemetry/cli-command-aggregator.d.ts.map +1 -1
  144. package/dist/telemetry/cli-command-aggregator.js +23 -0
  145. package/dist/telemetry/cli-command-aggregator.js.map +1 -1
  146. package/dist/telemetry/maestro-event-bus.d.ts.map +1 -1
  147. package/dist/telemetry/maestro-event-bus.js +11 -5
  148. package/dist/telemetry/maestro-event-bus.js.map +1 -1
  149. package/dist/telemetry/maestro-event-catalog.d.ts +15 -1
  150. package/dist/telemetry/maestro-event-catalog.d.ts.map +1 -1
  151. package/dist/telemetry/maestro-event-catalog.js +30 -0
  152. package/dist/telemetry/maestro-event-catalog.js.map +1 -1
  153. package/dist/version.json +2 -2
  154. package/package.json +289 -283
@@ -132,8 +132,8 @@ export declare function queryAuditLogs(filters: {
132
132
  action: string;
133
133
  createdAt: Date;
134
134
  sessionId: string | null;
135
- traceId: string | null;
136
135
  userId: string | null;
136
+ traceId: string | null;
137
137
  requestId: string | null;
138
138
  durationMs: number | null;
139
139
  resourceId: string | null;
@@ -1 +1 @@
1
- {"version":3,"file":"tools-setup.d.ts","sourceRoot":"","sources":["../../src/bootstrap/tools-setup.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAKxD,OAAO,EACN,KAAK,WAAW,EAChB,aAAa,EAEb,MAAM,qBAAqB,CAAC;AAI7B,MAAM,WAAW,gBAAgB;IAChC,gCAAgC;IAChC,QAAQ,EAAE,SAAS,EAAE,CAAC;IACtB,uDAAuD;IACvD,SAAS,EAAE,SAAS,EAAE,CAAC;IACvB,oCAAoC;IACpC,OAAO,EAAE,UAAU,CAAC,OAAO,aAAa,CAAC,SAAS,OAAO,CAAC,MAAM,CAAC,CAAC,GAC/D,CAAC,GACD,KAAK,GAAG,SAAS,CAAC;IACrB,4BAA4B;IAC5B,WAAW,EAAE,WAAW,GAAG,SAAS,CAAC;IACrC,0DAA0D;IAC1D,cAAc,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACrC;AAED;;;;GAIG;AACH,wBAAsB,qBAAqB,CAAC,MAAM,EAAE;IACnD,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC;IACxB,GAAG,EAAE,MAAM,CAAC;CACZ,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAgD5B"}
1
+ {"version":3,"file":"tools-setup.d.ts","sourceRoot":"","sources":["../../src/bootstrap/tools-setup.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAMxD,OAAO,EACN,KAAK,WAAW,EAChB,aAAa,EAEb,MAAM,qBAAqB,CAAC;AAI7B,MAAM,WAAW,gBAAgB;IAChC,gCAAgC;IAChC,QAAQ,EAAE,SAAS,EAAE,CAAC;IACtB,uDAAuD;IACvD,SAAS,EAAE,SAAS,EAAE,CAAC;IACvB,oCAAoC;IACpC,OAAO,EAAE,UAAU,CAAC,OAAO,aAAa,CAAC,SAAS,OAAO,CAAC,MAAM,CAAC,CAAC,GAC/D,CAAC,GACD,KAAK,GAAG,SAAS,CAAC;IACrB,4BAA4B;IAC5B,WAAW,EAAE,WAAW,GAAG,SAAS,CAAC;IACrC,0DAA0D;IAC1D,cAAc,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACrC;AAED;;;;GAIG;AACH,wBAAsB,qBAAqB,CAAC,MAAM,EAAE;IACnD,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC;IACxB,GAAG,EAAE,MAAM,CAAC;CACZ,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAmD5B"}
@@ -6,7 +6,7 @@
6
6
  * @module bootstrap/tools-setup
7
7
  */
8
8
  import chalk from "chalk";
9
- import { isCodexAppServerApi, selectCodexDefaultTools, } from "../codex/compatibility.js";
9
+ import { isCodexAppServerApi, resolveCodexToolProfileName, selectCodexToolProfile, } from "../codex/compatibility.js";
10
10
  import { createSandbox, disposeSandbox, } from "../sandbox/index.js";
11
11
  import { codingTools, filterTools, toolRegistry } from "../tools/index.js";
12
12
  import { loadInlineTools } from "../tools/inline-tools.js";
@@ -29,7 +29,8 @@ export async function createToolsAndSandbox(params) {
29
29
  console.log(chalk.dim(`Tools restricted to: ${filteredTools.map((t) => t.name).join(", ")}`));
30
30
  }
31
31
  else if (isCodexAppServerApi(modelApi)) {
32
- baseTools = selectCodexDefaultTools(codingTools);
32
+ const profileName = resolveCodexToolProfileName(process.env.MAESTRO_CODEX_TOOL_PROFILE);
33
+ baseTools = selectCodexToolProfile(codingTools, profileName);
33
34
  }
34
35
  // Load inline tools from .maestro/tools.json and ~/.maestro/tools.json
35
36
  const inlineTools = loadInlineTools();
@@ -1 +1 @@
1
- {"version":3,"file":"tools-setup.js","sourceRoot":"","sources":["../../src/bootstrap/tools-setup.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EACN,mBAAmB,EACnB,uBAAuB,GACvB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAEN,aAAa,EACb,cAAc,GACd,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAiB3D;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,MAK3C;IACA,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC;IAE7D,kDAAkD;IAClD,IAAI,SAAS,GAAG,WAAW,CAAC;IAC5B,IAAI,WAAW,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3C,MAAM,aAAa,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC;QAC/C,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CACd,0CAA0C,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;gBACnE,oBAAoB,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAClE,CAAC;QACH,CAAC;QACD,SAAS,GAAG,aAAa,CAAC;QAC1B,OAAO,CAAC,GAAG,CACV,KAAK,CAAC,GAAG,CACR,wBAAwB,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACrE,CACD,CAAC;IACH,CAAC;SAAM,IAAI,mBAAmB,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1C,SAAS,GAAG,uBAAuB,CAAC,WAAW,CAAC,CAAC;IAClD,CAAC;IAED,uEAAuE;IACvE,MAAM,WAAW,GAAG,eAAe,EAAE,CAAC;IACtC,MAAM,QAAQ,GAAG,CAAC,GAAG,SAAS,EAAE,GAAG,WAAW,CAAC,CAAC;IAEhD,0DAA0D;IAC1D,MAAM,WAAW,GAAG,CAAC,aAAa,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAE1D,CAAC;IACb,MAAM,OAAO,GAAG,WAAW;QAC1B,CAAC,CAAC,MAAM,aAAa,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC;QACjD,CAAC,CAAC,SAAS,CAAC;IAEb,MAAM,cAAc,GAAG,OAAO;QAC7B,CAAC,CAAC,KAAK,IAAI,EAAE;YACX,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC;QAC/B,CAAC;QACF,CAAC,CAAC,SAAS,CAAC;IAEb,OAAO;QACN,QAAQ;QACR,SAAS;QACT,OAAO;QACP,WAAW;QACX,cAAc,EAAE,cAAc;KAC9B,CAAC;AACH,CAAC","sourcesContent":["/**\n * Tools & Sandbox Setup - Tool filtering and sandbox initialization.\n *\n * Extracts tool registry filtering and sandbox creation from main.ts Phase 10.\n *\n * @module bootstrap/tools-setup\n */\n\nimport chalk from \"chalk\";\nimport type { AgentTool, Api } from \"../agent/types.js\";\nimport {\n\tisCodexAppServerApi,\n\tselectCodexDefaultTools,\n} from \"../codex/compatibility.js\";\nimport {\n\ttype SandboxMode,\n\tcreateSandbox,\n\tdisposeSandbox,\n} from \"../sandbox/index.js\";\nimport { codingTools, filterTools, toolRegistry } from \"../tools/index.js\";\nimport { loadInlineTools } from \"../tools/inline-tools.js\";\n\nexport interface ToolsSetupResult {\n\t/** All tools (base + inline) */\n\tallTools: AgentTool[];\n\t/** Base tools after filtering (used for MCP merges) */\n\tbaseTools: AgentTool[];\n\t/** Sandbox instance if requested */\n\tsandbox: ReturnType<typeof createSandbox> extends Promise<infer T>\n\t\t? T\n\t\t: never | undefined;\n\t/** Resolved sandbox mode */\n\tsandboxMode: SandboxMode | undefined;\n\t/** Cleanup function for sandbox (call on process exit) */\n\tdisposeSandbox?: () => Promise<void>;\n}\n\n/**\n * Build the tool set and optionally create a sandbox.\n *\n * @throws Error if --tools filter matches no tools\n */\nexport async function createToolsAndSandbox(params: {\n\tparsedTools?: string[];\n\tparsedSandbox?: string;\n\tmodelApi?: Api | string;\n\tcwd: string;\n}): Promise<ToolsSetupResult> {\n\tconst { parsedTools, parsedSandbox, modelApi, cwd } = params;\n\n\t// Apply --tools filter if user specified a subset\n\tlet baseTools = codingTools;\n\tif (parsedTools && parsedTools.length > 0) {\n\t\tconst filteredTools = filterTools(parsedTools);\n\t\tif (filteredTools.length === 0) {\n\t\t\tthrow new Error(\n\t\t\t\t`No valid tools matched --tools filter: ${parsedTools.join(\", \")}. ` +\n\t\t\t\t\t`Available tools: ${Object.keys(toolRegistry).sort().join(\", \")}`,\n\t\t\t);\n\t\t}\n\t\tbaseTools = filteredTools;\n\t\tconsole.log(\n\t\t\tchalk.dim(\n\t\t\t\t`Tools restricted to: ${filteredTools.map((t) => t.name).join(\", \")}`,\n\t\t\t),\n\t\t);\n\t} else if (isCodexAppServerApi(modelApi)) {\n\t\tbaseTools = selectCodexDefaultTools(codingTools);\n\t}\n\n\t// Load inline tools from .maestro/tools.json and ~/.maestro/tools.json\n\tconst inlineTools = loadInlineTools();\n\tconst allTools = [...baseTools, ...inlineTools];\n\n\t// Create sandbox for isolated tool execution if requested\n\tconst sandboxMode = (parsedSandbox ?? process.env.MAESTRO_SANDBOX_MODE) as\n\t\t| SandboxMode\n\t\t| undefined;\n\tconst sandbox = sandboxMode\n\t\t? await createSandbox({ mode: sandboxMode, cwd })\n\t\t: undefined;\n\n\tconst cleanupSandbox = sandbox\n\t\t? async () => {\n\t\t\t\tawait disposeSandbox(sandbox);\n\t\t\t}\n\t\t: undefined;\n\n\treturn {\n\t\tallTools,\n\t\tbaseTools,\n\t\tsandbox,\n\t\tsandboxMode,\n\t\tdisposeSandbox: cleanupSandbox,\n\t};\n}\n"]}
1
+ {"version":3,"file":"tools-setup.js","sourceRoot":"","sources":["../../src/bootstrap/tools-setup.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EACN,mBAAmB,EACnB,2BAA2B,EAC3B,sBAAsB,GACtB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAEN,aAAa,EACb,cAAc,GACd,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAiB3D;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,MAK3C;IACA,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC;IAE7D,kDAAkD;IAClD,IAAI,SAAS,GAAG,WAAW,CAAC;IAC5B,IAAI,WAAW,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3C,MAAM,aAAa,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC;QAC/C,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CACd,0CAA0C,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;gBACnE,oBAAoB,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAClE,CAAC;QACH,CAAC;QACD,SAAS,GAAG,aAAa,CAAC;QAC1B,OAAO,CAAC,GAAG,CACV,KAAK,CAAC,GAAG,CACR,wBAAwB,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACrE,CACD,CAAC;IACH,CAAC;SAAM,IAAI,mBAAmB,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1C,MAAM,WAAW,GAAG,2BAA2B,CAC9C,OAAO,CAAC,GAAG,CAAC,0BAA0B,CACtC,CAAC;QACF,SAAS,GAAG,sBAAsB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IAC9D,CAAC;IAED,uEAAuE;IACvE,MAAM,WAAW,GAAG,eAAe,EAAE,CAAC;IACtC,MAAM,QAAQ,GAAG,CAAC,GAAG,SAAS,EAAE,GAAG,WAAW,CAAC,CAAC;IAEhD,0DAA0D;IAC1D,MAAM,WAAW,GAAG,CAAC,aAAa,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAE1D,CAAC;IACb,MAAM,OAAO,GAAG,WAAW;QAC1B,CAAC,CAAC,MAAM,aAAa,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC;QACjD,CAAC,CAAC,SAAS,CAAC;IAEb,MAAM,cAAc,GAAG,OAAO;QAC7B,CAAC,CAAC,KAAK,IAAI,EAAE;YACX,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC;QAC/B,CAAC;QACF,CAAC,CAAC,SAAS,CAAC;IAEb,OAAO;QACN,QAAQ;QACR,SAAS;QACT,OAAO;QACP,WAAW;QACX,cAAc,EAAE,cAAc;KAC9B,CAAC;AACH,CAAC","sourcesContent":["/**\n * Tools & Sandbox Setup - Tool filtering and sandbox initialization.\n *\n * Extracts tool registry filtering and sandbox creation from main.ts Phase 10.\n *\n * @module bootstrap/tools-setup\n */\n\nimport chalk from \"chalk\";\nimport type { AgentTool, Api } from \"../agent/types.js\";\nimport {\n\tisCodexAppServerApi,\n\tresolveCodexToolProfileName,\n\tselectCodexToolProfile,\n} from \"../codex/compatibility.js\";\nimport {\n\ttype SandboxMode,\n\tcreateSandbox,\n\tdisposeSandbox,\n} from \"../sandbox/index.js\";\nimport { codingTools, filterTools, toolRegistry } from \"../tools/index.js\";\nimport { loadInlineTools } from \"../tools/inline-tools.js\";\n\nexport interface ToolsSetupResult {\n\t/** All tools (base + inline) */\n\tallTools: AgentTool[];\n\t/** Base tools after filtering (used for MCP merges) */\n\tbaseTools: AgentTool[];\n\t/** Sandbox instance if requested */\n\tsandbox: ReturnType<typeof createSandbox> extends Promise<infer T>\n\t\t? T\n\t\t: never | undefined;\n\t/** Resolved sandbox mode */\n\tsandboxMode: SandboxMode | undefined;\n\t/** Cleanup function for sandbox (call on process exit) */\n\tdisposeSandbox?: () => Promise<void>;\n}\n\n/**\n * Build the tool set and optionally create a sandbox.\n *\n * @throws Error if --tools filter matches no tools\n */\nexport async function createToolsAndSandbox(params: {\n\tparsedTools?: string[];\n\tparsedSandbox?: string;\n\tmodelApi?: Api | string;\n\tcwd: string;\n}): Promise<ToolsSetupResult> {\n\tconst { parsedTools, parsedSandbox, modelApi, cwd } = params;\n\n\t// Apply --tools filter if user specified a subset\n\tlet baseTools = codingTools;\n\tif (parsedTools && parsedTools.length > 0) {\n\t\tconst filteredTools = filterTools(parsedTools);\n\t\tif (filteredTools.length === 0) {\n\t\t\tthrow new Error(\n\t\t\t\t`No valid tools matched --tools filter: ${parsedTools.join(\", \")}. ` +\n\t\t\t\t\t`Available tools: ${Object.keys(toolRegistry).sort().join(\", \")}`,\n\t\t\t);\n\t\t}\n\t\tbaseTools = filteredTools;\n\t\tconsole.log(\n\t\t\tchalk.dim(\n\t\t\t\t`Tools restricted to: ${filteredTools.map((t) => t.name).join(\", \")}`,\n\t\t\t),\n\t\t);\n\t} else if (isCodexAppServerApi(modelApi)) {\n\t\tconst profileName = resolveCodexToolProfileName(\n\t\t\tprocess.env.MAESTRO_CODEX_TOOL_PROFILE,\n\t\t);\n\t\tbaseTools = selectCodexToolProfile(codingTools, profileName);\n\t}\n\n\t// Load inline tools from .maestro/tools.json and ~/.maestro/tools.json\n\tconst inlineTools = loadInlineTools();\n\tconst allTools = [...baseTools, ...inlineTools];\n\n\t// Create sandbox for isolated tool execution if requested\n\tconst sandboxMode = (parsedSandbox ?? process.env.MAESTRO_SANDBOX_MODE) as\n\t\t| SandboxMode\n\t\t| undefined;\n\tconst sandbox = sandboxMode\n\t\t? await createSandbox({ mode: sandboxMode, cwd })\n\t\t: undefined;\n\n\tconst cleanupSandbox = sandbox\n\t\t? async () => {\n\t\t\t\tawait disposeSandbox(sandbox);\n\t\t\t}\n\t\t: undefined;\n\n\treturn {\n\t\tallTools,\n\t\tbaseTools,\n\t\tsandbox,\n\t\tsandboxMode,\n\t\tdisposeSandbox: cleanupSandbox,\n\t};\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"a2a.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/a2a.ts"],"names":[],"mappings":"AAiCA,OAAO,EAMN,kBAAkB,EAMlB,MAAM,mCAAmC,CAAC;AA4K3C,MAAM,WAAW,aAAa;IAC7B,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC;CACrC;AAED,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAyDpE;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,aAAa,CA2F1D;AAihDD,eAAO,MAAM,wBAAwB,2BAAqB,CAAC"}
1
+ {"version":3,"file":"a2a.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/a2a.ts"],"names":[],"mappings":"AAkCA,OAAO,EAMN,kBAAkB,EAMlB,MAAM,mCAAmC,CAAC;AAoL3C,MAAM,WAAW,aAAa;IAC7B,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC;CACrC;AAED,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA6DpE;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,aAAa,CA2F1D;AAyoDD,eAAO,MAAM,wBAAwB,2BAAqB,CAAC"}
@@ -2,6 +2,7 @@ import { randomUUID } from "node:crypto";
2
2
  import chalk from "chalk";
3
3
  import { selectA2ACapabilityPeer } from "../../platform/a2a-capability-market.js";
4
4
  import { buildA2AUserMessage, discoverA2AAgentCard, getA2ATask, sendA2AMessage, } from "../../platform/a2a-client.js";
5
+ import { buildA2ACockpit } from "../../platform/a2a-cockpit.js";
5
6
  import { inspectA2AFleet } from "../../platform/a2a-fleet.js";
6
7
  import { buildMaestroA2APeerProjection, defaultMaestroA2ACapabilities, } from "../../platform/a2a-maestro-peer.js";
7
8
  import { createA2APeerPairingPayload, createA2APeerPairingPayloadFromAgentCard, decodeA2APeerPairingCode, encodeA2APeerPairingCode, resolveA2AAgentCardUrl, } from "../../platform/a2a-peer-pairing.js";
@@ -23,6 +24,7 @@ const A2A_VALUE_FLAGS_BY_SUBCOMMAND = {
23
24
  "--workspace-id",
24
25
  ],
25
26
  card: ["--registry", "--timeout-ms"],
27
+ cockpit: ["--registry", "--tasks", "--timeout-ms", "--peer", "--limit"],
26
28
  discover: [
27
29
  "--capability",
28
30
  "--limit",
@@ -119,7 +121,13 @@ const A2A_VALUE_FLAGS_BY_SUBCOMMAND = {
119
121
  "--tasks",
120
122
  "--timeout-ms",
121
123
  ],
122
- send: ["--interval-ms", "--max-wait-ms", "--registry", "--timeout-ms"],
124
+ send: [
125
+ "--interval-ms",
126
+ "--max-wait-ms",
127
+ "--registry",
128
+ "--tasks",
129
+ "--timeout-ms",
130
+ ],
123
131
  tasks: ["--registry", "--tasks", "--timeout-ms"],
124
132
  wait: [
125
133
  "--interval-ms",
@@ -131,6 +139,7 @@ const A2A_VALUE_FLAGS_BY_SUBCOMMAND = {
131
139
  };
132
140
  const A2A_BOOLEAN_FLAGS_BY_SUBCOMMAND = {
133
141
  accept: ["--default"],
142
+ cockpit: ["--json"],
134
143
  coordinate: ["--json", "--refresh", "--wait", "--work-graph"],
135
144
  delegate: [
136
145
  "--discover",
@@ -179,6 +188,10 @@ export async function handleA2ACommand(args) {
179
188
  case "fleet":
180
189
  await handleA2AFleet(parsed);
181
190
  return;
191
+ case "cockpit":
192
+ case "dashboard":
193
+ await handleA2ACockpit(parsed);
194
+ return;
182
195
  case "card":
183
196
  await handleA2ACard(parsed);
184
197
  return;
@@ -331,6 +344,8 @@ function canonicalA2ASubcommand(input) {
331
344
  return "offer";
332
345
  case "list":
333
346
  return "peers";
347
+ case "dashboard":
348
+ return "cockpit";
334
349
  case "delegation":
335
350
  return "delegate";
336
351
  case "continue":
@@ -775,6 +790,78 @@ async function handleA2AFleet(parsed) {
775
790
  }
776
791
  }
777
792
  }
793
+ async function handleA2ACockpit(parsed) {
794
+ const cockpit = await buildA2ACockpit({
795
+ registryPath: stringFlag(parsed, "--registry"),
796
+ tasksPath: stringFlag(parsed, "--tasks"),
797
+ timeoutMs: numberFlag(parsed, "--timeout-ms"),
798
+ peer: stringFlag(parsed, "--peer"),
799
+ limit: numberFlag(parsed, "--limit"),
800
+ });
801
+ if (booleanFlag(parsed, "--json")) {
802
+ console.log(JSON.stringify(cockpit, null, 2));
803
+ return;
804
+ }
805
+ console.log(`A2A cockpit (${cockpit.registryPath})`);
806
+ console.log(chalk.dim(` tasks=${cockpit.tasksPath}`));
807
+ console.log([
808
+ `${cockpit.counts.onlinePeers}/${cockpit.counts.peers} peers online`,
809
+ `${cockpit.counts.runningTasks} running`,
810
+ `${cockpit.counts.actionRequiredTasks} waiting`,
811
+ `${cockpit.counts.failedTasks} failed`,
812
+ `${cockpit.counts.completedTasks} completed`,
813
+ ].join(" · "));
814
+ console.log(chalk.bold("\nPeers"));
815
+ if (cockpit.peers.length === 0) {
816
+ console.log(chalk.dim(" No peers registered. Run maestro a2a accept <code>."));
817
+ }
818
+ else {
819
+ for (const peer of cockpit.peers) {
820
+ const status = peer.status === "online" ? chalk.green("online") : chalk.yellow("down");
821
+ const waiting = peer.taskCounts.actionRequiredTasks;
822
+ const failed = peer.taskCounts.failedTasks;
823
+ const taskSummary = [
824
+ peer.taskCounts.runningTasks
825
+ ? `${peer.taskCounts.runningTasks} running`
826
+ : "",
827
+ waiting ? chalk.yellow(`${waiting} waiting`) : "",
828
+ failed ? chalk.red(`${failed} failed`) : "",
829
+ ]
830
+ .filter(Boolean)
831
+ .join(", ");
832
+ console.log(`${status} ${chalk.bold(peer.name)} ${chalk.dim(peer.url)}${taskSummary ? ` ${chalk.dim(`(${taskSummary})`)}` : ""}`);
833
+ if (peer.lastTask) {
834
+ console.log(chalk.dim(` last=${peer.lastTask.id} ${peer.lastTask.state} ${peer.lastTask.text}`));
835
+ }
836
+ if (peer.error) {
837
+ console.log(chalk.dim(` error=${peer.error}`));
838
+ }
839
+ }
840
+ }
841
+ console.log(chalk.bold("\nTasks"));
842
+ if (cockpit.tasks.length === 0) {
843
+ console.log(chalk.dim(" No delegated tasks recorded yet."));
844
+ }
845
+ else {
846
+ for (const task of cockpit.tasks) {
847
+ const peerLabel = task.orphanedPeer
848
+ ? `${task.peer} ${chalk.yellow("(orphaned peer)")}`
849
+ : task.peer;
850
+ console.log(`${peerLabel} ${chalk.bold(task.taskId)} ${formatCockpitTaskStatus(task.status)} ${chalk.dim(task.updatedAt)}`);
851
+ console.log(chalk.dim(` ${task.text}`));
852
+ if (task.nextCommand) {
853
+ console.log(chalk.dim(` next: ${task.nextCommand}`));
854
+ }
855
+ }
856
+ }
857
+ if (cockpit.nextActions.length > 0) {
858
+ console.log(chalk.bold("\nNext actions"));
859
+ for (const action of cockpit.nextActions) {
860
+ console.log(`${formatCockpitActionSeverity(action.severity)} ${action.label}`);
861
+ console.log(chalk.dim(` ${action.command}`));
862
+ }
863
+ }
864
+ }
778
865
  async function handleA2ASend(parsed) {
779
866
  const peerName = parsed.positionals.shift() ?? fail("Usage: maestro a2a send <peer> <text>");
780
867
  const text = parsed.positionals.join(" ").trim();
@@ -786,21 +873,42 @@ async function handleA2ASend(parsed) {
786
873
  timeoutMs: numberFlag(parsed, "--timeout-ms"),
787
874
  });
788
875
  const wait = booleanFlag(parsed, "--wait");
876
+ const messageId = `maestro-a2a-message-${randomUUID()}`;
877
+ const contextId = `maestro-a2a-context-${randomUUID()}`;
878
+ const metadata = {
879
+ requestKind: "maestro-peer-message",
880
+ relayPeer: peer.name,
881
+ };
789
882
  const sent = await sendA2AMessage(peer.config, {
790
883
  message: buildA2AUserMessage({
791
- messageId: `maestro-a2a-message-${randomUUID()}`,
792
- contextId: `maestro-a2a-context-${randomUUID()}`,
884
+ messageId,
885
+ contextId,
793
886
  text,
794
- metadata: {
795
- requestKind: "maestro-peer-message",
796
- relayPeer: peer.name,
797
- },
887
+ metadata,
798
888
  }),
799
889
  ...(wait ? { configuration: { returnImmediately: true } } : {}),
800
890
  });
891
+ await persistA2ALedgerBestEffort("record sent task locally", () => recordA2ATaskStart({
892
+ path: stringFlag(parsed, "--tasks"),
893
+ peer: peer.name,
894
+ peerDisplayName: peer.entry.displayName,
895
+ task: sent.task,
896
+ text,
897
+ messageId,
898
+ contextId,
899
+ kind: "message",
900
+ metadata,
901
+ }));
801
902
  const task = wait
802
903
  ? await waitForA2ATask(peer.config, sent.task.id, parsed)
803
904
  : sent.task;
905
+ if (wait) {
906
+ await persistA2ALedgerBestEffort("sync sent task result locally", () => updateA2ATaskInLedger({
907
+ path: stringFlag(parsed, "--tasks"),
908
+ peer: peer.name,
909
+ task,
910
+ }));
911
+ }
804
912
  printTask(task, {
805
913
  includeWorkGraphDetails: booleanFlag(parsed, "--work-graph"),
806
914
  });
@@ -1648,6 +1756,30 @@ function minutesFlag(parsed, name) {
1648
1756
  function booleanFlag(parsed, name) {
1649
1757
  return parsed.flags.get(name) === true;
1650
1758
  }
1759
+ function formatCockpitTaskStatus(status) {
1760
+ switch (status) {
1761
+ case "waiting":
1762
+ return chalk.yellow(status);
1763
+ case "failed":
1764
+ return chalk.red(status);
1765
+ case "completed":
1766
+ return chalk.green(status);
1767
+ case "running":
1768
+ return chalk.cyan(status);
1769
+ default:
1770
+ return chalk.dim(status);
1771
+ }
1772
+ }
1773
+ function formatCockpitActionSeverity(severity) {
1774
+ switch (severity) {
1775
+ case "critical":
1776
+ return chalk.red("!");
1777
+ case "warning":
1778
+ return chalk.yellow("!");
1779
+ default:
1780
+ return chalk.cyan(">");
1781
+ }
1782
+ }
1651
1783
  async function persistA2ALedgerBestEffort(description, action) {
1652
1784
  try {
1653
1785
  await action();
@@ -1696,6 +1828,7 @@ function printA2AHelp() {
1696
1828
  maestro a2a discover [--capability <capability>] [--skill <skill-id>] [--import]
1697
1829
  maestro a2a register --url <base-url> [--agent-id <id>] [--workspace-id <id>] [--json]
1698
1830
  maestro a2a fleet [--json]
1831
+ maestro a2a cockpit [--peer <peer>] [--json]
1699
1832
  maestro a2a card <peer>
1700
1833
  maestro a2a coordinate [peer] [--reply <text>] [--wait] [--json] [--work-graph]
1701
1834
  maestro a2a delegate <peer> <text> [--role <role>] [--cwd <path>] [--wait] [--work-graph]
@@ -1704,7 +1837,7 @@ function printA2AHelp() {
1704
1837
  maestro a2a control <delegation-id> --mode steer|followup|collect|interrupt|cancel [--workspace-id <id>] [message]
1705
1838
  maestro a2a graph <delegation-id> [--workspace-id <id>] [--json]
1706
1839
  maestro a2a reply <peer> <task-id> <text> [--wait] [--work-graph]
1707
- maestro a2a send <peer> <text> [--wait] [--work-graph]
1840
+ maestro a2a send <peer> <text> [--wait] [--tasks <path>] [--work-graph]
1708
1841
  maestro a2a tasks [peer] [--json] [--refresh] [--work-graph]
1709
1842
  maestro a2a wait <peer> <task-id> [--work-graph]
1710
1843