@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.
- package/dist/agent/agent.d.ts +1 -0
- package/dist/agent/agent.d.ts.map +1 -1
- package/dist/agent/agent.js +15 -4
- package/dist/agent/agent.js.map +1 -1
- package/dist/agent/swarm/executor.d.ts.map +1 -1
- package/dist/agent/swarm/executor.js +68 -3
- package/dist/agent/swarm/executor.js.map +1 -1
- package/dist/agent/swarm/types.d.ts +3 -0
- package/dist/agent/swarm/types.d.ts.map +1 -1
- package/dist/agent/swarm/types.js.map +1 -1
- package/dist/agent/transport.d.ts.map +1 -1
- package/dist/agent/transport.js +7 -1
- package/dist/agent/transport.js.map +1 -1
- package/dist/audit/logger.d.ts +1 -1
- package/dist/bootstrap/tools-setup.d.ts.map +1 -1
- package/dist/bootstrap/tools-setup.js +3 -2
- package/dist/bootstrap/tools-setup.js.map +1 -1
- package/dist/cli/commands/a2a.d.ts.map +1 -1
- package/dist/cli/commands/a2a.js +141 -8
- package/dist/cli/commands/a2a.js.map +1 -1
- package/dist/cli/commands/codex.d.ts.map +1 -1
- package/dist/cli/commands/codex.js +4 -3
- package/dist/cli/commands/codex.js.map +1 -1
- package/dist/cli/commands/hosted-runner.d.ts +1 -0
- package/dist/cli/commands/hosted-runner.d.ts.map +1 -1
- package/dist/cli/commands/hosted-runner.js +31 -2
- package/dist/cli/commands/hosted-runner.js.map +1 -1
- package/dist/cli/commands/run.d.ts.map +1 -1
- package/dist/cli/commands/run.js +2 -9
- package/dist/cli/commands/run.js.map +1 -1
- package/dist/cli-tui/commands/a2a-handlers.d.ts.map +1 -1
- package/dist/cli-tui/commands/a2a-handlers.js +55 -0
- package/dist/cli-tui/commands/a2a-handlers.js.map +1 -1
- package/dist/cli.js +3925 -2024
- package/dist/codex/compatibility.d.ts +17 -1
- package/dist/codex/compatibility.d.ts.map +1 -1
- package/dist/codex/compatibility.js +57 -1
- package/dist/codex/compatibility.js.map +1 -1
- package/dist/guardian/config.d.ts +8 -6
- package/dist/guardian/config.d.ts.map +1 -1
- package/dist/guardian/config.js +33 -7
- package/dist/guardian/config.js.map +1 -1
- package/dist/guardian/runner.d.ts.map +1 -1
- package/dist/guardian/runner.js +54 -9
- package/dist/guardian/runner.js.map +1 -1
- package/dist/mcp/config.d.ts.map +1 -1
- package/dist/mcp/config.js +2 -0
- package/dist/mcp/config.js.map +1 -1
- package/dist/mcp/fathom-cua.d.ts +3 -0
- package/dist/mcp/fathom-cua.d.ts.map +1 -0
- package/dist/mcp/fathom-cua.js +158 -0
- package/dist/mcp/fathom-cua.js.map +1 -0
- package/dist/mcp/index.d.ts +1 -0
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +1 -0
- package/dist/mcp/index.js.map +1 -1
- package/dist/node_modules/@evalops/contracts/dist/artifacts.d.ts +58 -0
- package/dist/node_modules/@evalops/contracts/dist/artifacts.d.ts.map +1 -0
- package/dist/node_modules/@evalops/contracts/dist/artifacts.js +191 -0
- package/dist/node_modules/@evalops/contracts/dist/artifacts.js.map +1 -0
- package/dist/node_modules/@evalops/contracts/dist/headless-protocol-schemas.generated.d.ts +10 -10
- package/dist/node_modules/@evalops/contracts/dist/index.d.ts +1 -0
- package/dist/node_modules/@evalops/contracts/dist/index.d.ts.map +1 -1
- package/dist/node_modules/@evalops/contracts/dist/index.js +1 -0
- package/dist/node_modules/@evalops/contracts/dist/index.js.map +1 -1
- package/dist/node_modules/@evalops/contracts/dist/runtime-app-server.d.ts +1 -1
- package/dist/node_modules/@evalops/contracts/dist/runtime-server-request.d.ts +3 -3
- package/dist/node_modules/@evalops/contracts/package.json +1 -1
- package/dist/node_modules/@evalops/tui/package.json +1 -1
- package/dist/platform/a2a-cockpit.d.ts +90 -0
- package/dist/platform/a2a-cockpit.d.ts.map +1 -0
- package/dist/platform/a2a-cockpit.js +302 -0
- package/dist/platform/a2a-cockpit.js.map +1 -0
- package/dist/platform/a2a-fleet.d.ts +14 -0
- package/dist/platform/a2a-fleet.d.ts.map +1 -1
- package/dist/platform/a2a-fleet.js +66 -1
- package/dist/platform/a2a-fleet.js.map +1 -1
- package/dist/platform/a2a-ownership.d.ts +27 -0
- package/dist/platform/a2a-ownership.d.ts.map +1 -0
- package/dist/platform/a2a-ownership.js +149 -0
- package/dist/platform/a2a-ownership.js.map +1 -0
- package/dist/platform/a2a-task-ledger.d.ts.map +1 -1
- package/dist/platform/a2a-task-ledger.js +29 -5
- package/dist/platform/a2a-task-ledger.js.map +1 -1
- package/dist/server/agent-trajectory-replay-lab.d.ts +36 -0
- package/dist/server/agent-trajectory-replay-lab.d.ts.map +1 -0
- package/dist/server/agent-trajectory-replay-lab.js +48 -0
- package/dist/server/agent-trajectory-replay-lab.js.map +1 -0
- package/dist/server/any-agent-control-plane-proof.d.ts +42 -0
- package/dist/server/any-agent-control-plane-proof.d.ts.map +1 -0
- package/dist/server/any-agent-control-plane-proof.js +175 -0
- package/dist/server/any-agent-control-plane-proof.js.map +1 -0
- package/dist/server/app-context.d.ts +1 -0
- package/dist/server/app-context.d.ts.map +1 -1
- package/dist/server/app-context.js.map +1 -1
- package/dist/server/handlers/a2a-cockpit.d.ts +3 -0
- package/dist/server/handlers/a2a-cockpit.d.ts.map +1 -0
- package/dist/server/handlers/a2a-cockpit.js +71 -0
- package/dist/server/handlers/a2a-cockpit.js.map +1 -0
- package/dist/server/handlers/headless-sessions.d.ts.map +1 -1
- package/dist/server/handlers/headless-sessions.js +17 -2
- package/dist/server/handlers/headless-sessions.js.map +1 -1
- package/dist/server/handlers/session-artifacts.d.ts.map +1 -1
- package/dist/server/handlers/session-artifacts.js +14 -58
- package/dist/server/handlers/session-artifacts.js.map +1 -1
- package/dist/server/handlers/session-replay-lab.d.ts +13 -0
- package/dist/server/handlers/session-replay-lab.d.ts.map +1 -0
- package/dist/server/handlers/session-replay-lab.js +80 -0
- package/dist/server/handlers/session-replay-lab.js.map +1 -0
- package/dist/server/handlers/stats.js +1 -1
- package/dist/server/handlers/stats.js.map +1 -1
- package/dist/server/handlers/status.d.ts +44 -3
- package/dist/server/handlers/status.d.ts.map +1 -1
- package/dist/server/handlers/status.js +227 -17
- package/dist/server/handlers/status.js.map +1 -1
- package/dist/server/headless-runtime-service.d.ts +17 -0
- package/dist/server/headless-runtime-service.d.ts.map +1 -1
- package/dist/server/headless-runtime-service.js +143 -3
- package/dist/server/headless-runtime-service.js.map +1 -1
- package/dist/server/hosted-agent-runtime-progress.d.ts +17 -0
- package/dist/server/hosted-agent-runtime-progress.d.ts.map +1 -1
- package/dist/server/hosted-agent-runtime-progress.js +352 -15
- package/dist/server/hosted-agent-runtime-progress.js.map +1 -1
- package/dist/server/routes.d.ts.map +1 -1
- package/dist/server/routes.js +14 -0
- package/dist/server/routes.js.map +1 -1
- package/dist/services/intelligent-router/index.d.ts +1 -1
- package/dist/services/intelligent-router/index.d.ts.map +1 -1
- package/dist/services/intelligent-router/index.js +1 -1
- package/dist/services/intelligent-router/index.js.map +1 -1
- package/dist/services/intelligent-router/normalize.d.ts +10 -2
- package/dist/services/intelligent-router/normalize.d.ts.map +1 -1
- package/dist/services/intelligent-router/normalize.js +20 -1
- package/dist/services/intelligent-router/normalize.js.map +1 -1
- package/dist/services/intelligent-router/service.d.ts.map +1 -1
- package/dist/services/intelligent-router/service.js +35 -0
- package/dist/services/intelligent-router/service.js.map +1 -1
- package/dist/services/intelligent-router/types.d.ts +13 -0
- package/dist/services/intelligent-router/types.d.ts.map +1 -1
- package/dist/services/intelligent-router/types.js +1 -0
- package/dist/services/intelligent-router/types.js.map +1 -1
- package/dist/telemetry/cli-command-aggregator.d.ts +1 -0
- package/dist/telemetry/cli-command-aggregator.d.ts.map +1 -1
- package/dist/telemetry/cli-command-aggregator.js +23 -0
- package/dist/telemetry/cli-command-aggregator.js.map +1 -1
- package/dist/telemetry/maestro-event-bus.d.ts.map +1 -1
- package/dist/telemetry/maestro-event-bus.js +11 -5
- package/dist/telemetry/maestro-event-bus.js.map +1 -1
- package/dist/telemetry/maestro-event-catalog.d.ts +15 -1
- package/dist/telemetry/maestro-event-catalog.d.ts.map +1 -1
- package/dist/telemetry/maestro-event-catalog.js +30 -0
- package/dist/telemetry/maestro-event-catalog.js.map +1 -1
- package/dist/version.json +2 -2
- package/package.json +289 -283
package/dist/audit/logger.d.ts
CHANGED
|
@@ -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;
|
|
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,
|
|
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
|
-
|
|
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,
|
|
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":"
|
|
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"}
|
package/dist/cli/commands/a2a.js
CHANGED
|
@@ -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: [
|
|
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
|
|
792
|
-
contextId
|
|
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
|
|