@evalops/maestro 0.10.50 → 0.10.51
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent/agent-outcome.d.ts +54 -0
- package/dist/agent/agent-outcome.d.ts.map +1 -0
- package/dist/agent/agent-outcome.js +142 -0
- package/dist/agent/agent-outcome.js.map +1 -0
- package/dist/agent/agent-resume.d.ts.map +1 -1
- package/dist/agent/agent-resume.js +3 -3
- package/dist/agent/agent-resume.js.map +1 -1
- package/dist/agent/agent-run-summary.d.ts +37 -0
- package/dist/agent/agent-run-summary.d.ts.map +1 -0
- package/dist/agent/agent-run-summary.js +15 -0
- package/dist/agent/agent-run-summary.js.map +1 -0
- package/dist/agent/agent-work-board.d.ts +82 -0
- package/dist/agent/agent-work-board.d.ts.map +1 -0
- package/dist/agent/agent-work-board.js +312 -0
- package/dist/agent/agent-work-board.js.map +1 -0
- package/dist/agent/auto-compaction.d.ts +7 -2
- package/dist/agent/auto-compaction.d.ts.map +1 -1
- package/dist/agent/auto-compaction.js +23 -10
- package/dist/agent/auto-compaction.js.map +1 -1
- package/dist/agent/mission-artifacts.d.ts +62 -0
- package/dist/agent/mission-artifacts.d.ts.map +1 -0
- package/dist/agent/mission-artifacts.js +438 -0
- package/dist/agent/mission-artifacts.js.map +1 -0
- package/dist/agent/mission-manifest.d.ts +139 -3
- package/dist/agent/mission-manifest.d.ts.map +1 -1
- package/dist/agent/mission-manifest.js +549 -3
- package/dist/agent/mission-manifest.js.map +1 -1
- package/dist/agent/mission-store.d.ts +80 -0
- package/dist/agent/mission-store.d.ts.map +1 -0
- package/dist/agent/mission-store.js +603 -0
- package/dist/agent/mission-store.js.map +1 -0
- package/dist/agent/modes.d.ts +2 -2
- package/dist/agent/modes.d.ts.map +1 -1
- package/dist/agent/modes.js +10 -3
- package/dist/agent/modes.js.map +1 -1
- package/dist/agent/providers/codex-app-server.d.ts.map +1 -1
- package/dist/agent/providers/codex-app-server.js +1 -3
- package/dist/agent/providers/codex-app-server.js.map +1 -1
- package/dist/agent/providers/google-gemini-cli.js +203 -107
- package/dist/agent/providers/google.js +100 -41
- package/dist/agent/providers/scripted.d.ts.map +1 -1
- package/dist/agent/providers/scripted.js +1 -3
- package/dist/agent/providers/scripted.js.map +1 -1
- package/dist/agent/providers/validation.d.ts.map +1 -1
- package/dist/agent/providers/validation.js +1 -3
- package/dist/agent/providers/validation.js.map +1 -1
- package/dist/agent/providers/vertex.js +203 -107
- package/dist/agent/snapshot-store.d.ts +32 -0
- package/dist/agent/snapshot-store.d.ts.map +1 -0
- package/dist/agent/snapshot-store.js +195 -0
- package/dist/agent/snapshot-store.js.map +1 -0
- package/dist/agent/specialist-profiles.d.ts +36 -0
- package/dist/agent/specialist-profiles.d.ts.map +1 -0
- package/dist/agent/specialist-profiles.js +159 -0
- package/dist/agent/specialist-profiles.js.map +1 -0
- package/dist/agent/subagent-specs.d.ts +4 -1
- package/dist/agent/subagent-specs.d.ts.map +1 -1
- package/dist/agent/subagent-specs.js +81 -8
- package/dist/agent/subagent-specs.js.map +1 -1
- package/dist/agent/swarm/coverage-gate.d.ts +37 -0
- package/dist/agent/swarm/coverage-gate.d.ts.map +1 -0
- package/dist/agent/swarm/coverage-gate.js +48 -0
- package/dist/agent/swarm/coverage-gate.js.map +1 -0
- package/dist/agent/swarm/executor.d.ts +1 -0
- package/dist/agent/swarm/executor.d.ts.map +1 -1
- package/dist/agent/swarm/executor.js +151 -15
- package/dist/agent/swarm/executor.js.map +1 -1
- package/dist/agent/swarm/orchestrator-prompt.d.ts +25 -0
- package/dist/agent/swarm/orchestrator-prompt.d.ts.map +1 -0
- package/dist/agent/swarm/orchestrator-prompt.js +48 -0
- package/dist/agent/swarm/orchestrator-prompt.js.map +1 -0
- package/dist/agent/swarm/plan-parser.d.ts.map +1 -1
- package/dist/agent/swarm/plan-parser.js +27 -2
- package/dist/agent/swarm/plan-parser.js.map +1 -1
- package/dist/agent/swarm/types.d.ts +17 -0
- package/dist/agent/swarm/types.d.ts.map +1 -1
- package/dist/agent/swarm/types.js.map +1 -1
- package/dist/agent/swarm/validation-directive.d.ts +21 -0
- package/dist/agent/swarm/validation-directive.d.ts.map +1 -0
- package/dist/agent/swarm/validation-directive.js +25 -0
- package/dist/agent/swarm/validation-directive.js.map +1 -0
- package/dist/agent/transport/tool-execution-bridge.d.ts.map +1 -1
- package/dist/agent/transport/tool-execution-bridge.js +4 -1
- package/dist/agent/transport/tool-execution-bridge.js.map +1 -1
- package/dist/api/enterprise-routes.d.ts.map +1 -1
- package/dist/api/enterprise-routes.js +87 -10
- package/dist/api/enterprise-routes.js.map +1 -1
- package/dist/api/org-settings-merge.d.ts +12 -0
- package/dist/api/org-settings-merge.d.ts.map +1 -0
- package/dist/api/org-settings-merge.js +38 -0
- package/dist/api/org-settings-merge.js.map +1 -0
- package/dist/api/user-settings-merge.d.ts +16 -0
- package/dist/api/user-settings-merge.d.ts.map +1 -0
- package/dist/api/user-settings-merge.js +37 -0
- package/dist/api/user-settings-merge.js.map +1 -0
- package/dist/app-server/daemon-lifecycle-api.d.ts.map +1 -1
- package/dist/app-server/daemon-lifecycle-api.js +1 -3
- package/dist/app-server/daemon-lifecycle-api.js.map +1 -1
- package/dist/app-server/external-agent-import-api.d.ts.map +1 -1
- package/dist/app-server/external-agent-import-api.js +1 -3
- package/dist/app-server/external-agent-import-api.js.map +1 -1
- package/dist/app-server/network-governance-api.d.ts.map +1 -1
- package/dist/app-server/network-governance-api.js +1 -3
- package/dist/app-server/network-governance-api.js.map +1 -1
- package/dist/app-server/plugin-bundle-api.d.ts.map +1 -1
- package/dist/app-server/plugin-bundle-api.js +1 -3
- package/dist/app-server/plugin-bundle-api.js.map +1 -1
- package/dist/app-server/policy-control-api.d.ts.map +1 -1
- package/dist/app-server/policy-control-api.js +1 -3
- package/dist/app-server/policy-control-api.js.map +1 -1
- package/dist/app-server/protocol-modes-api.d.ts.map +1 -1
- package/dist/app-server/protocol-modes-api.js +1 -3
- package/dist/app-server/protocol-modes-api.js.map +1 -1
- package/dist/cli/args.d.ts +2 -0
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +15 -0
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/commands/a2a.d.ts.map +1 -1
- package/dist/cli/commands/a2a.js +1 -3
- package/dist/cli/commands/a2a.js.map +1 -1
- package/dist/cli/commands/agents.d.ts +4 -0
- package/dist/cli/commands/agents.d.ts.map +1 -1
- package/dist/cli/commands/agents.js +149 -0
- package/dist/cli/commands/agents.js.map +1 -1
- package/dist/cli/commands/mission.d.ts +4 -0
- package/dist/cli/commands/mission.d.ts.map +1 -0
- package/dist/cli/commands/mission.js +196 -0
- package/dist/cli/commands/mission.js.map +1 -0
- package/dist/cli/commands/value.d.ts +10 -0
- package/dist/cli/commands/value.d.ts.map +1 -0
- package/dist/cli/commands/value.js +33 -0
- package/dist/cli/commands/value.js.map +1 -0
- package/dist/cli/headless-protocol.d.ts.map +1 -1
- package/dist/cli/headless-protocol.js +1 -3
- package/dist/cli/headless-protocol.js.map +1 -1
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/help.js +10 -0
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/system-prompt.d.ts.map +1 -1
- package/dist/cli/system-prompt.js +38 -7
- package/dist/cli/system-prompt.js.map +1 -1
- package/dist/cli-runtime.js +7756 -2800
- package/dist/cli-tui/client-tools/client-tool-controller.d.ts.map +1 -1
- package/dist/cli-tui/client-tools/client-tool-controller.js +1 -3
- package/dist/cli-tui/client-tools/client-tool-controller.js.map +1 -1
- package/dist/cli-tui/commands/undo-handlers.d.ts.map +1 -1
- package/dist/cli-tui/commands/undo-handlers.js +7 -2
- package/dist/cli-tui/commands/undo-handlers.js.map +1 -1
- package/dist/cli-tui/tui-renderer/skills-controller.d.ts +3 -0
- package/dist/cli-tui/tui-renderer/skills-controller.d.ts.map +1 -1
- package/dist/cli-tui/tui-renderer/skills-controller.js +77 -33
- package/dist/cli-tui/tui-renderer/skills-controller.js.map +1 -1
- package/dist/codex/app-server-client.d.ts.map +1 -1
- package/dist/codex/app-server-client.js +1 -3
- package/dist/codex/app-server-client.js.map +1 -1
- package/dist/codex/compatibility.d.ts.map +1 -1
- package/dist/codex/compatibility.js +1 -3
- package/dist/codex/compatibility.js.map +1 -1
- package/dist/codex/subagent-dispatch-table.d.ts +8 -0
- package/dist/codex/subagent-dispatch-table.d.ts.map +1 -1
- package/dist/codex/subagent-dispatch-table.js +23 -0
- package/dist/codex/subagent-dispatch-table.js.map +1 -1
- package/dist/context/manifest.d.ts.map +1 -1
- package/dist/context/manifest.js +1 -3
- package/dist/context/manifest.js.map +1 -1
- package/dist/conversation/render-model.d.ts +0 -36
- package/dist/conversation/render-model.d.ts.map +1 -1
- package/dist/conversation/render-model.js +1 -3
- package/dist/conversation/render-model.js.map +1 -1
- package/dist/customer-value/ambient-learning.d.ts +75 -0
- package/dist/customer-value/ambient-learning.d.ts.map +1 -0
- package/dist/customer-value/ambient-learning.js +472 -0
- package/dist/customer-value/ambient-learning.js.map +1 -0
- package/dist/customer-value/internal-helpers.d.ts +13 -0
- package/dist/customer-value/internal-helpers.d.ts.map +1 -0
- package/dist/customer-value/internal-helpers.js +70 -0
- package/dist/customer-value/internal-helpers.js.map +1 -0
- package/dist/customer-value/report.d.ts +282 -0
- package/dist/customer-value/report.d.ts.map +1 -0
- package/dist/customer-value/report.js +2085 -0
- package/dist/customer-value/report.js.map +1 -0
- package/dist/db/schema.d.ts +5 -1
- package/dist/db/schema.d.ts.map +1 -1
- package/dist/db/schema.js.map +1 -1
- package/dist/evalops/agent-bootstrap.d.ts.map +1 -1
- package/dist/evalops/agent-bootstrap.js +1 -3
- package/dist/evalops/agent-bootstrap.js.map +1 -1
- package/dist/evalops/agent-mcp-metadata.d.ts.map +1 -1
- package/dist/evalops/agent-mcp-metadata.js +1 -3
- package/dist/evalops/agent-mcp-metadata.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/installers/maestro-review-workflow.d.ts +38 -0
- package/dist/installers/maestro-review-workflow.d.ts.map +1 -0
- package/dist/installers/maestro-review-workflow.js +163 -0
- package/dist/installers/maestro-review-workflow.js.map +1 -0
- package/dist/load-env.d.ts.map +1 -1
- package/dist/load-env.js +2 -1
- package/dist/load-env.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +92 -3
- package/dist/main.js.map +1 -1
- package/dist/mcp/config.d.ts.map +1 -1
- package/dist/mcp/config.js +1 -3
- package/dist/mcp/config.js.map +1 -1
- package/dist/mcp/elicitation.d.ts.map +1 -1
- package/dist/mcp/elicitation.js +1 -3
- package/dist/mcp/elicitation.js.map +1 -1
- package/dist/mcp/official-registry.d.ts.map +1 -1
- package/dist/mcp/official-registry.js +1 -3
- package/dist/mcp/official-registry.js.map +1 -1
- package/dist/mcp/workspace-trust.d.ts.map +1 -1
- package/dist/mcp/workspace-trust.js +1 -3
- package/dist/mcp/workspace-trust.js.map +1 -1
- package/dist/memory/service-client.d.ts.map +1 -1
- package/dist/memory/service-client.js +1 -3
- package/dist/memory/service-client.js.map +1 -1
- package/dist/models/config-loader.d.ts.map +1 -1
- package/dist/models/config-loader.js +1 -3
- package/dist/models/config-loader.js.map +1 -1
- 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/maestro-settings.d.ts +61 -0
- package/dist/node_modules/@evalops/contracts/dist/maestro-settings.d.ts.map +1 -0
- package/dist/node_modules/@evalops/contracts/dist/maestro-settings.js +183 -0
- package/dist/node_modules/@evalops/contracts/dist/maestro-settings.js.map +1 -0
- package/dist/node_modules/@evalops/contracts/package.json +1 -1
- package/dist/node_modules/@evalops/tui/package.json +1 -1
- package/dist/oauth/connectors.d.ts.map +1 -1
- package/dist/oauth/connectors.js +1 -3
- package/dist/oauth/connectors.js.map +1 -1
- package/dist/oauth/evalops.d.ts.map +1 -1
- package/dist/oauth/evalops.js +1 -3
- package/dist/oauth/evalops.js.map +1 -1
- package/dist/platform/a2a-client.d.ts.map +1 -1
- package/dist/platform/a2a-client.js +1 -3
- package/dist/platform/a2a-client.js.map +1 -1
- package/dist/platform/a2a-cockpit.d.ts +1 -0
- package/dist/platform/a2a-cockpit.d.ts.map +1 -1
- package/dist/platform/a2a-cockpit.js +42 -11
- package/dist/platform/a2a-cockpit.js.map +1 -1
- package/dist/platform/a2a-completion-audit.d.ts +1 -1
- package/dist/platform/a2a-completion-audit.d.ts.map +1 -1
- package/dist/platform/a2a-completion-audit.js +7 -11
- package/dist/platform/a2a-completion-audit.js.map +1 -1
- package/dist/platform/a2a-maestro-peer.js +16 -0
- package/dist/platform/a2a-maestro-peer.js.map +1 -1
- package/dist/platform/a2a-peer-pairing.d.ts.map +1 -1
- package/dist/platform/a2a-peer-pairing.js +1 -3
- package/dist/platform/a2a-peer-pairing.js.map +1 -1
- package/dist/platform/a2a-peer-registry.d.ts.map +1 -1
- package/dist/platform/a2a-peer-registry.js +1 -3
- package/dist/platform/a2a-peer-registry.js.map +1 -1
- package/dist/platform/a2a-task-ledger.d.ts +20 -0
- package/dist/platform/a2a-task-ledger.d.ts.map +1 -1
- package/dist/platform/a2a-task-ledger.js +207 -11
- package/dist/platform/a2a-task-ledger.js.map +1 -1
- package/dist/platform/a2a-work-graph.d.ts.map +1 -1
- package/dist/platform/a2a-work-graph.js +1 -3
- package/dist/platform/a2a-work-graph.js.map +1 -1
- package/dist/platform/operating-layer.d.ts.map +1 -1
- package/dist/platform/operating-layer.js +14 -8
- package/dist/platform/operating-layer.js.map +1 -1
- package/dist/platform/tool-execution-client.d.ts.map +1 -1
- package/dist/platform/tool-execution-client.js +19 -2
- package/dist/platform/tool-execution-client.js.map +1 -1
- package/dist/providers/auth.d.ts.map +1 -1
- package/dist/providers/auth.js +1 -3
- package/dist/providers/auth.js.map +1 -1
- package/dist/runtime/env.d.ts +9 -1
- package/dist/runtime/env.d.ts.map +1 -1
- package/dist/runtime/env.js +63 -1
- package/dist/runtime/env.js.map +1 -1
- package/dist/safety/policy.d.ts.map +1 -1
- package/dist/safety/policy.js +1 -4
- package/dist/safety/policy.js.map +1 -1
- package/dist/sandbox/docker-sandbox.d.ts.map +1 -1
- package/dist/sandbox/docker-sandbox.js +6 -1
- package/dist/sandbox/docker-sandbox.js.map +1 -1
- package/dist/server/handlers/hosted-runner-drain.d.ts.map +1 -1
- package/dist/server/handlers/hosted-runner-drain.js +1 -3
- package/dist/server/handlers/hosted-runner-drain.js.map +1 -1
- package/dist/server/handlers/platform-a2a-push.d.ts.map +1 -1
- package/dist/server/handlers/platform-a2a-push.js +53 -2
- package/dist/server/handlers/platform-a2a-push.js.map +1 -1
- package/dist/server/handlers/runtime-app-server-ws.d.ts.map +1 -1
- package/dist/server/handlers/runtime-app-server-ws.js +1 -3
- package/dist/server/handlers/runtime-app-server-ws.js.map +1 -1
- package/dist/server/headless-runtime-service.d.ts +16 -0
- package/dist/server/headless-runtime-service.d.ts.map +1 -1
- package/dist/server/headless-runtime-service.js +232 -206
- package/dist/server/headless-runtime-service.js.map +1 -1
- package/dist/server/hosted-agent-runtime-progress.d.ts.map +1 -1
- package/dist/server/hosted-agent-runtime-progress.js +12 -3
- package/dist/server/hosted-agent-runtime-progress.js.map +1 -1
- package/dist/server/pending-request-payload.d.ts.map +1 -1
- package/dist/server/pending-request-payload.js +1 -3
- package/dist/server/pending-request-payload.js.map +1 -1
- package/dist/server/route-auth.d.ts.map +1 -1
- package/dist/server/route-auth.js +2 -0
- package/dist/server/route-auth.js.map +1 -1
- package/dist/server/session-serialization.d.ts.map +1 -1
- package/dist/server/session-serialization.js +1 -3
- package/dist/server/session-serialization.js.map +1 -1
- package/dist/services/compliance/normalize.d.ts.map +1 -1
- package/dist/services/compliance/normalize.js +1 -3
- package/dist/services/compliance/normalize.js.map +1 -1
- package/dist/services/intelligent-router/normalize.d.ts.map +1 -1
- package/dist/services/intelligent-router/normalize.js +1 -3
- package/dist/services/intelligent-router/normalize.js.map +1 -1
- package/dist/services/revenue-attribution/normalize.d.ts.map +1 -1
- package/dist/services/revenue-attribution/normalize.js +1 -3
- package/dist/services/revenue-attribution/normalize.js.map +1 -1
- package/dist/services/traces/normalize.d.ts.map +1 -1
- package/dist/services/traces/normalize.js +1 -3
- package/dist/services/traces/normalize.js.map +1 -1
- package/dist/services/workspace-config/normalize.d.ts.map +1 -1
- package/dist/services/workspace-config/normalize.js +1 -3
- package/dist/services/workspace-config/normalize.js.map +1 -1
- package/dist/skills/composer.d.ts.map +1 -1
- package/dist/skills/composer.js +13 -1
- package/dist/skills/composer.js.map +1 -1
- package/dist/skills/index.d.ts +1 -0
- package/dist/skills/index.d.ts.map +1 -1
- package/dist/skills/index.js +1 -0
- package/dist/skills/index.js.map +1 -1
- package/dist/skills/learned-guidelines.d.ts +33 -0
- package/dist/skills/learned-guidelines.d.ts.map +1 -0
- package/dist/skills/learned-guidelines.js +291 -0
- package/dist/skills/learned-guidelines.js.map +1 -0
- package/dist/skills/linter.d.ts.map +1 -1
- package/dist/skills/linter.js +1 -3
- package/dist/skills/linter.js.map +1 -1
- package/dist/skills/runtime-activation.d.ts +1 -0
- package/dist/skills/runtime-activation.d.ts.map +1 -1
- package/dist/skills/runtime-activation.js +2 -3
- package/dist/skills/runtime-activation.js.map +1 -1
- package/dist/skills/tool.d.ts.map +1 -1
- package/dist/skills/tool.js +26 -21
- package/dist/skills/tool.js.map +1 -1
- package/dist/skills/trust-cache.d.ts +7 -0
- package/dist/skills/trust-cache.d.ts.map +1 -1
- package/dist/skills/trust-cache.js +16 -0
- package/dist/skills/trust-cache.js.map +1 -1
- package/dist/telemetry/agent-workforce-native-event.d.ts.map +1 -1
- package/dist/telemetry/agent-workforce-native-event.js +1 -3
- package/dist/telemetry/agent-workforce-native-event.js.map +1 -1
- package/dist/telemetry/maestro-event-bus.d.ts.map +1 -1
- package/dist/telemetry/maestro-event-bus.js +42 -81
- package/dist/telemetry/maestro-event-bus.js.map +1 -1
- package/dist/telemetry/maestro-platform-replay-fixture.d.ts.map +1 -1
- package/dist/telemetry/maestro-platform-replay-fixture.js +1 -3
- package/dist/telemetry/maestro-platform-replay-fixture.js.map +1 -1
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js +54 -43
- package/dist/telemetry.js.map +1 -1
- package/dist/theme/theme-loader.d.ts.map +1 -1
- package/dist/theme/theme-loader.js +1 -3
- package/dist/theme/theme-loader.js.map +1 -1
- package/dist/tools/apply-patch.d.ts.map +1 -1
- package/dist/tools/apply-patch.js +76 -8
- package/dist/tools/apply-patch.js.map +1 -1
- package/dist/tools/diff-preview.d.ts.map +1 -1
- package/dist/tools/diff-preview.js +10 -1
- package/dist/tools/diff-preview.js.map +1 -1
- package/dist/tools/edit.d.ts.map +1 -1
- package/dist/tools/edit.js +17 -0
- package/dist/tools/edit.js.map +1 -1
- package/dist/tools/write.d.ts.map +1 -1
- package/dist/tools/write.js +9 -0
- package/dist/tools/write.js.map +1 -1
- package/dist/undo/tracker.d.ts +5 -0
- package/dist/undo/tracker.d.ts.map +1 -1
- package/dist/undo/tracker.js +13 -0
- package/dist/undo/tracker.js.map +1 -1
- package/dist/utils/fs.d.ts +1 -1
- package/dist/utils/fs.d.ts.map +1 -1
- package/dist/utils/fs.js +29 -2
- package/dist/utils/fs.js.map +1 -1
- package/dist/utils/git-stash.d.ts.map +1 -1
- package/dist/utils/git-stash.js +15 -8
- package/dist/utils/git-stash.js.map +1 -1
- package/dist/utils/json.d.ts +11 -0
- package/dist/utils/json.d.ts.map +1 -1
- package/dist/utils/json.js +9 -0
- package/dist/utils/json.js.map +1 -1
- package/dist/utils/shell-env.d.ts.map +1 -1
- package/dist/utils/shell-env.js +2 -0
- package/dist/utils/shell-env.js.map +1 -1
- package/dist/utils/url-extractor-git.d.ts +26 -0
- package/dist/utils/url-extractor-git.d.ts.map +1 -0
- package/dist/utils/url-extractor-git.js +259 -0
- package/dist/utils/url-extractor-git.js.map +1 -0
- package/dist/utils/url-extractor.d.ts.map +1 -1
- package/dist/utils/url-extractor.js +23 -251
- package/dist/utils/url-extractor.js.map +1 -1
- package/dist/version.json +2 -2
- package/package.json +310 -306
- package/skills/incident-triage/SKILL.md +19 -1
- package/skills/install-code-review/SKILL.md +69 -0
- package/skills/security-review/SKILL.md +68 -0
- package/skills/security-review/reference/rubric.md +85 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"a2a-client.js","sourceRoot":"","sources":["../../src/platform/a2a-client.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\tEVALOPS_ORGANIZATION_ID_ENV_VARS,\n\tEVALOPS_WORKSPACE_ID_ENV_VARS,\n} from \"../evalops/env-aliases.js\";\nimport { fetchDownstream } from \"../utils/downstream-http.js\";\nimport {\n\ttype PlatformServiceConfig,\n\tbuildPlatformJsonHeaders,\n\tgetEnvValue,\n\tresolvePlatformServiceConfig,\n\ttrimString,\n} from \"./client.js\";\n\nconst DEFAULT_TIMEOUT_MS = 2_500;\nconst DEFAULT_MAX_ATTEMPTS = 2;\n\nconst A2A_BASE_URL_ENV_VARS = [\n\t\"MAESTRO_PLATFORM_A2A_URL\",\n\t\"MAESTRO_A2A_URL\",\n\t\"MAESTRO_AGENT_RUNTIME_SERVICE_URL\",\n\t\"PLATFORM_AGENT_RUNTIME_URL\",\n\t\"AGENT_RUNTIME_SERVICE_URL\",\n\t\"MAESTRO_PLATFORM_BASE_URL\",\n\t\"MAESTRO_EVALOPS_BASE_URL\",\n\t\"EVALOPS_BASE_URL\",\n] as const;\n\nconst A2A_TOKEN_ENV_VARS = [\n\t\"MAESTRO_PLATFORM_A2A_TOKEN\",\n\t\"MAESTRO_A2A_TOKEN\",\n\t\"MAESTRO_AGENT_RUNTIME_SERVICE_TOKEN\",\n\t\"AGENT_RUNTIME_SERVICE_TOKEN\",\n] as const;\n\nconst A2A_ORGANIZATION_ENV_VARS = [\n\t\"MAESTRO_PLATFORM_A2A_ORG_ID\",\n\t\"MAESTRO_A2A_ORG_ID\",\n\t\"MAESTRO_AGENT_RUNTIME_ORG_ID\",\n\t\"AGENT_RUNTIME_ORGANIZATION_ID\",\n\t...EVALOPS_ORGANIZATION_ID_ENV_VARS,\n] as const;\n\nconst A2A_WORKSPACE_ENV_VARS = [\n\t\"MAESTRO_PLATFORM_A2A_WORKSPACE_ID\",\n\t\"MAESTRO_A2A_WORKSPACE_ID\",\n\t\"MAESTRO_AGENT_RUNTIME_WORKSPACE_ID\",\n\t\"AGENT_RUNTIME_WORKSPACE_ID\",\n\t...EVALOPS_WORKSPACE_ID_ENV_VARS,\n] as const;\n\nconst A2A_TIMEOUT_ENV_VARS = [\n\t\"MAESTRO_PLATFORM_A2A_TIMEOUT_MS\",\n\t\"MAESTRO_A2A_TIMEOUT_MS\",\n\t\"MAESTRO_AGENT_RUNTIME_TIMEOUT_MS\",\n\t\"AGENT_RUNTIME_SERVICE_TIMEOUT_MS\",\n] as const;\n\nconst A2A_MAX_ATTEMPTS_ENV_VARS = [\n\t\"MAESTRO_PLATFORM_A2A_MAX_ATTEMPTS\",\n\t\"MAESTRO_A2A_MAX_ATTEMPTS\",\n\t\"MAESTRO_AGENT_RUNTIME_MAX_ATTEMPTS\",\n\t\"AGENT_RUNTIME_SERVICE_MAX_ATTEMPTS\",\n] as const;\n\nconst A2A_EXTENSIONS_ENV_VARS = [\n\t\"MAESTRO_PLATFORM_A2A_EXTENSIONS\",\n\t\"MAESTRO_A2A_EXTENSIONS\",\n] as const;\n\nconst A2A_BASE_URL_SUFFIXES = [\n\t\"/.well-known/agent-card.json\",\n\t\"/message:send\",\n\t\"/message:stream\",\n\t\"/agentruntime.v1.AgentRuntimeService/HandleTrigger\",\n\t\"/agentruntime.v1.AgentRuntimeService\",\n] as const;\n\nexport interface A2AServiceConfig extends PlatformServiceConfig {\n\tagentId?: string;\n\tsessionId?: string;\n\tactorId?: string;\n\ttraceparent?: string;\n\ttracestate?: string;\n\textensions?: string[];\n}\n\nexport interface A2AAgentCard {\n\tname: string;\n\tdescription: string;\n\tsupportedInterfaces: A2AAgentInterface[];\n\tprovider?: {\n\t\turl: string;\n\t\torganization: string;\n\t};\n\tversion: string;\n\tcapabilities: {\n\t\tstreaming?: boolean;\n\t\tpushNotifications?: boolean;\n\t\textendedAgentCard?: boolean;\n\t\textensions?: A2AAgentExtension[];\n\t};\n\tdefaultInputModes: string[];\n\tdefaultOutputModes: string[];\n\tskills: A2AAgentSkill[];\n}\n\nexport interface A2AAgentInterface {\n\turl: string;\n\tprotocolBinding: string;\n\ttenant?: string;\n\tprotocolVersion: string;\n}\n\nexport interface A2AAgentSkill {\n\tid: string;\n\tname: string;\n\tdescription: string;\n\ttags: string[];\n\texamples?: string[];\n\tinputModes?: string[];\n\toutputModes?: string[];\n\trequiredContextGrants?: string[];\n\tapprovalPolicyRef?: string;\n\tmaxAutonomy?: string;\n\trequiredArtifactKinds?: string[];\n\toptionalArtifactKinds?: string[];\n\tallowedTaskClasses?: string[];\n\tdeniedTaskClasses?: string[];\n\tattributes?: Record<string, string>;\n\tmetadata?: Record<string, unknown>;\n}\n\nexport interface A2AAgentExtension {\n\turi: string;\n\tdescription?: string;\n\trequired?: boolean;\n\tparams?: Record<string, unknown>;\n}\n\nexport interface A2APart {\n\ttext?: string;\n\traw?: string;\n\turl?: string;\n\tdata?: unknown;\n\tmetadata?: Record<string, unknown>;\n\tfilename?: string;\n\tmediaType?: string;\n}\n\nexport interface A2AMessage {\n\tmessageId: string;\n\tcontextId?: string;\n\ttaskId?: string;\n\trole: \"ROLE_USER\" | \"ROLE_AGENT\" | \"user\" | \"agent\";\n\tparts: A2APart[];\n\tmetadata?: Record<string, unknown>;\n\textensions?: string[];\n\treferenceTaskIds?: string[];\n}\n\nexport interface A2ATaskStatus {\n\tstate: string;\n\tmessage?: A2AMessage;\n\ttimestamp?: string;\n}\n\nexport interface A2ATask {\n\tid: string;\n\tcontextId?: string;\n\tstatus: A2ATaskStatus;\n\tartifacts?: A2AArtifact[];\n\thistory?: A2AMessage[];\n\tmetadata?: Record<string, unknown>;\n}\n\nexport interface A2AArtifact {\n\tartifactId: string;\n\tname?: string;\n\tdescription?: string;\n\tparts: A2APart[];\n\tmetadata?: Record<string, unknown>;\n}\n\nexport interface SendA2AMessageInput {\n\tmessage: A2AMessage;\n\tconfiguration?: {\n\t\tacceptedOutputModes?: string[];\n\t\thistoryLength?: number;\n\t\treturnImmediately?: boolean;\n\t\ttaskPushNotificationConfig?: A2ATaskPushNotificationConfig;\n\t\tpushNotificationConfig?: A2ATaskPushNotificationConfig;\n\t};\n\tmetadata?: Record<string, unknown>;\n\ttraceContext?: A2ATraceContext;\n}\n\nexport interface SendA2AMessageResult {\n\ttask: A2ATask;\n}\n\nexport type A2AStreamEventType =\n\t| \"task\"\n\t| \"message\"\n\t| \"statusUpdate\"\n\t| \"artifactUpdate\";\n\nexport interface A2ATaskStreamEvent {\n\ttype: \"task\";\n\ttask: A2ATask;\n}\n\nexport interface A2AMessageStreamEvent {\n\ttype: \"message\";\n\tmessage: A2AMessage;\n}\n\nexport interface A2AStatusUpdateStreamEvent {\n\ttype: \"statusUpdate\";\n\ttaskId?: string;\n\tcontextId?: string;\n\tstatus: A2ATaskStatus;\n\tfinal?: boolean;\n\tmetadata?: Record<string, unknown>;\n}\n\nexport interface A2AArtifactUpdateStreamEvent {\n\ttype: \"artifactUpdate\";\n\ttaskId?: string;\n\tcontextId?: string;\n\tartifact: A2AArtifact;\n\tappend?: boolean;\n\tlastChunk?: boolean;\n\tmetadata?: Record<string, unknown>;\n}\n\nexport type A2AStreamEvent =\n\t| A2ATaskStreamEvent\n\t| A2AMessageStreamEvent\n\t| A2AStatusUpdateStreamEvent\n\t| A2AArtifactUpdateStreamEvent;\n\nexport interface A2ATraceContext {\n\ttraceparent?: string;\n\ttracestate?: string;\n}\n\nexport type A2ATaskPushNotificationAuthentication =\n\t| {\n\t\t\tschemes: string[];\n\t\t\tcredentials?: string;\n\t\t\t/** @deprecated Use schemes. Accepted only for older Maestro peers. */\n\t\t\tscheme?: string;\n\t }\n\t| {\n\t\t\t/** @deprecated Use schemes. Accepted only for older Maestro peers. */\n\t\t\tscheme: string;\n\t\t\tcredentials?: string;\n\t\t\tschemes?: string[];\n\t };\n\nexport interface A2ATaskPushNotificationConfig {\n\ttenant?: string;\n\tid?: string;\n\ttaskId?: string;\n\turl: string;\n\ttoken?: string;\n\tauthentication?: A2ATaskPushNotificationAuthentication;\n}\n\nexport interface A2ATaskPushNotificationConfigList {\n\tconfigs: A2ATaskPushNotificationConfig[];\n}\n\nexport function normalizeA2ABaseUrl(baseUrl: string): string {\n\tlet normalized = baseUrl.trim().replace(/\\/+$/u, \"\");\n\tfor (const suffix of A2A_BASE_URL_SUFFIXES) {\n\t\tif (normalized.endsWith(suffix)) {\n\t\t\tnormalized = normalized.slice(0, -suffix.length).replace(/\\/+$/u, \"\");\n\t\t}\n\t}\n\treturn normalized;\n}\n\nexport async function resolveA2AServiceConfig(\n\toverrides: Partial<A2AServiceConfig> = {},\n): Promise<A2AServiceConfig | null> {\n\tconst config = await resolvePlatformServiceConfig({\n\t\tbaseUrlEnvVars: A2A_BASE_URL_ENV_VARS,\n\t\ttokenEnvVars: A2A_TOKEN_ENV_VARS,\n\t\torganizationEnvVars: A2A_ORGANIZATION_ENV_VARS,\n\t\tworkspaceEnvVars: A2A_WORKSPACE_ENV_VARS,\n\t\ttimeoutEnvVars: A2A_TIMEOUT_ENV_VARS,\n\t\tmaxAttemptsEnvVars: A2A_MAX_ATTEMPTS_ENV_VARS,\n\t\tbaseUrlSuffixes: A2A_BASE_URL_SUFFIXES,\n\t\tdefaultTimeoutMs: DEFAULT_TIMEOUT_MS,\n\t\tdefaultMaxAttempts: DEFAULT_MAX_ATTEMPTS,\n\t\trequireBaseUrl: false,\n\t\trequireOrganizationId: false,\n\t\trequireToken: false,\n\t\tallowOAuthTokenFallback: false,\n\t});\n\tconst baseUrl = trimString(overrides.baseUrl ?? config?.baseUrl);\n\tconst workspaceId = trimString(overrides.workspaceId ?? config?.workspaceId);\n\tif (!baseUrl || !workspaceId) {\n\t\treturn null;\n\t}\n\treturn {\n\t\t...(config ?? {\n\t\t\tbaseUrl,\n\t\t\ttimeoutMs: DEFAULT_TIMEOUT_MS,\n\t\t\tmaxAttempts: DEFAULT_MAX_ATTEMPTS,\n\t\t}),\n\t\tbaseUrl: normalizeA2ABaseUrl(baseUrl),\n\t\torganizationId:\n\t\t\ttrimString(overrides.organizationId ?? config?.organizationId) ??\n\t\t\tconfig?.organizationId,\n\t\tworkspaceId,\n\t\ttoken: trimString(overrides.token ?? config?.token) ?? config?.token,\n\t\ttimeoutMs: overrides.timeoutMs ?? config?.timeoutMs ?? DEFAULT_TIMEOUT_MS,\n\t\tmaxAttempts:\n\t\t\toverrides.maxAttempts ?? config?.maxAttempts ?? DEFAULT_MAX_ATTEMPTS,\n\t\tagentId:\n\t\t\ttrimString(overrides.agentId) ??\n\t\t\tgetEnvValue([\"MAESTRO_AGENT_ID\", \"MAESTRO_EVALOPS_AGENT_ID\"]) ??\n\t\t\t\"maestro\",\n\t\tsessionId:\n\t\t\ttrimString(overrides.sessionId) ?? getEnvValue([\"MAESTRO_SESSION_ID\"]),\n\t\tactorId:\n\t\t\ttrimString(overrides.actorId) ??\n\t\t\tgetEnvValue([\"MAESTRO_USER_ID\", \"MAESTRO_ACTOR_ID\"]),\n\t\textensions: resolveConfiguredA2AExtensions(overrides.extensions),\n\t};\n}\n\nexport function buildA2AUserMessage(input: {\n\ttext: string;\n\tmessageId: string;\n\tcontextId?: string;\n\ttaskId?: string;\n\tmetadata?: Record<string, unknown>;\n\textensions?: string[];\n}): A2AMessage {\n\treturn {\n\t\tmessageId: input.messageId,\n\t\tcontextId: input.contextId,\n\t\ttaskId: input.taskId,\n\t\trole: \"ROLE_USER\",\n\t\tparts: [{ text: input.text, mediaType: \"text/plain\" }],\n\t\tmetadata: input.metadata,\n\t\textensions: input.extensions,\n\t};\n}\n\nexport async function discoverA2AAgentCard(\n\tconfig: A2AServiceConfig,\n\toptions: { signal?: AbortSignal } = {},\n): Promise<A2AAgentCard> {\n\tconst response = await fetchDownstream(\n\t\t`${config.baseUrl}/.well-known/agent-card.json`,\n\t\t{\n\t\t\tmethod: \"GET\",\n\t\t\theaders: buildA2AHeaders(config),\n\t\t\tsignal: options.signal,\n\t\t},\n\t\t{\n\t\t\tserviceName: \"platform-a2a\",\n\t\t\tfailureMode: \"required\",\n\t\t\ttimeoutMs: config.timeoutMs,\n\t\t\tmaxAttempts: config.maxAttempts,\n\t\t},\n\t);\n\tawait throwForA2AError(response, \"discover agent card\");\n\treturn (await response.json()) as A2AAgentCard;\n}\n\nexport async function sendA2AMessage(\n\tconfig: A2AServiceConfig,\n\tinput: SendA2AMessageInput,\n\toptions: { signal?: AbortSignal } = {},\n): Promise<SendA2AMessageResult> {\n\tconst { body, traceContext } = buildA2AMessageRequestBody(config, input);\n\tconst extensions = resolveA2AExtensions(config, input.message.extensions);\n\tconst response = await fetchDownstream(\n\t\t`${config.baseUrl}/message:send`,\n\t\t{\n\t\t\tmethod: \"POST\",\n\t\t\theaders: buildA2AHeaders(config, traceContext, extensions),\n\t\t\tbody: JSON.stringify(body),\n\t\t\tsignal: options.signal,\n\t\t},\n\t\t{\n\t\t\tserviceName: \"platform-a2a\",\n\t\t\tfailureMode: \"required\",\n\t\t\ttimeoutMs: config.timeoutMs,\n\t\t\tmaxAttempts: config.maxAttempts,\n\t\t},\n\t);\n\tawait throwForA2AError(response, \"send message\");\n\treturn (await response.json()) as SendA2AMessageResult;\n}\n\nexport async function* streamA2AMessage(\n\tconfig: A2AServiceConfig,\n\tinput: SendA2AMessageInput,\n\toptions: { signal?: AbortSignal } = {},\n): AsyncIterable<A2AStreamEvent> {\n\tconst { body, traceContext } = buildA2AMessageRequestBody(config, input);\n\tconst extensions = resolveA2AExtensions(config, input.message.extensions);\n\tconst response = await fetchDownstream(\n\t\t`${config.baseUrl}/message:stream`,\n\t\t{\n\t\t\tmethod: \"POST\",\n\t\t\theaders: {\n\t\t\t\t...buildA2AHeaders(config, traceContext, extensions),\n\t\t\t\tAccept: \"text/event-stream\",\n\t\t\t},\n\t\t\tbody: JSON.stringify(body),\n\t\t\tsignal: options.signal,\n\t\t},\n\t\t{\n\t\t\tserviceName: \"platform-a2a\",\n\t\t\tfailureMode: \"required\",\n\t\t\ttimeoutMs: config.timeoutMs,\n\t\t\tmaxAttempts: config.maxAttempts,\n\t\t},\n\t);\n\tawait throwForA2AError(response, \"stream message\");\n\tyield* parseA2AStreamEvents(response);\n}\n\nexport async function* subscribeA2ATask(\n\tconfig: A2AServiceConfig,\n\ttaskId: string,\n\toptions: {\n\t\tsignal?: AbortSignal;\n\t\ttraceContext?: A2ATraceContext;\n\t\textensions?: string[];\n\t} = {},\n): AsyncIterable<A2AStreamEvent> {\n\tconst trimmedTaskId = trimString(taskId);\n\tif (!trimmedTaskId) {\n\t\tthrow new Error(\"A2A task id is required\");\n\t}\n\tconst response = await fetchDownstream(\n\t\t`${config.baseUrl}/tasks/${encodeURIComponent(trimmedTaskId)}:subscribe`,\n\t\t{\n\t\t\tmethod: \"POST\",\n\t\t\theaders: {\n\t\t\t\t...buildA2AHeaders(\n\t\t\t\t\tconfig,\n\t\t\t\t\toptions.traceContext,\n\t\t\t\t\tresolveA2AExtensions(config, options.extensions),\n\t\t\t\t),\n\t\t\t\tAccept: \"text/event-stream\",\n\t\t\t},\n\t\t\tsignal: options.signal,\n\t\t},\n\t\t{\n\t\t\tserviceName: \"platform-a2a\",\n\t\t\tfailureMode: \"required\",\n\t\t\ttimeoutMs: config.timeoutMs,\n\t\t\tmaxAttempts: config.maxAttempts,\n\t\t},\n\t);\n\tawait throwForA2AError(response, \"subscribe task\");\n\tyield* parseA2AStreamEvents(response);\n}\n\nexport async function createA2ATaskPushNotificationConfig(\n\tconfig: A2AServiceConfig,\n\ttaskId: string,\n\tpushConfig: A2ATaskPushNotificationConfig,\n\toptions: { signal?: AbortSignal; traceContext?: A2ATraceContext } = {},\n): Promise<A2ATaskPushNotificationConfig> {\n\tconst trimmedTaskId = requireA2ATaskId(taskId);\n\tconst response = await fetchDownstream(\n\t\t`${config.baseUrl}/tasks/${encodeURIComponent(trimmedTaskId)}/pushNotificationConfigs`,\n\t\t{\n\t\t\tmethod: \"POST\",\n\t\t\theaders: buildA2AHeaders(config, options.traceContext),\n\t\t\tbody: JSON.stringify(pushConfig),\n\t\t\tsignal: options.signal,\n\t\t},\n\t\t{\n\t\t\tserviceName: \"platform-a2a\",\n\t\t\tfailureMode: \"required\",\n\t\t\ttimeoutMs: config.timeoutMs,\n\t\t\tmaxAttempts: config.maxAttempts,\n\t\t},\n\t);\n\tawait throwForA2AError(response, \"create task push notification config\");\n\treturn (await response.json()) as A2ATaskPushNotificationConfig;\n}\n\nexport async function listA2ATaskPushNotificationConfigs(\n\tconfig: A2AServiceConfig,\n\ttaskId: string,\n\toptions: { signal?: AbortSignal; traceContext?: A2ATraceContext } = {},\n): Promise<A2ATaskPushNotificationConfigList> {\n\tconst trimmedTaskId = requireA2ATaskId(taskId);\n\tconst response = await fetchDownstream(\n\t\t`${config.baseUrl}/tasks/${encodeURIComponent(trimmedTaskId)}/pushNotificationConfigs`,\n\t\t{\n\t\t\tmethod: \"GET\",\n\t\t\theaders: buildA2AHeaders(config, options.traceContext),\n\t\t\tsignal: options.signal,\n\t\t},\n\t\t{\n\t\t\tserviceName: \"platform-a2a\",\n\t\t\tfailureMode: \"required\",\n\t\t\ttimeoutMs: config.timeoutMs,\n\t\t\tmaxAttempts: config.maxAttempts,\n\t\t},\n\t);\n\tawait throwForA2AError(response, \"list task push notification configs\");\n\treturn (await response.json()) as A2ATaskPushNotificationConfigList;\n}\n\nexport async function getA2ATaskPushNotificationConfig(\n\tconfig: A2AServiceConfig,\n\ttaskId: string,\n\tconfigId: string,\n\toptions: { signal?: AbortSignal; traceContext?: A2ATraceContext } = {},\n): Promise<A2ATaskPushNotificationConfig> {\n\tconst trimmedTaskId = requireA2ATaskId(taskId);\n\tconst trimmedConfigId = requireA2APushConfigId(configId);\n\tconst response = await fetchDownstream(\n\t\t`${config.baseUrl}/tasks/${encodeURIComponent(trimmedTaskId)}/pushNotificationConfigs/${encodeURIComponent(trimmedConfigId)}`,\n\t\t{\n\t\t\tmethod: \"GET\",\n\t\t\theaders: buildA2AHeaders(config, options.traceContext),\n\t\t\tsignal: options.signal,\n\t\t},\n\t\t{\n\t\t\tserviceName: \"platform-a2a\",\n\t\t\tfailureMode: \"required\",\n\t\t\ttimeoutMs: config.timeoutMs,\n\t\t\tmaxAttempts: config.maxAttempts,\n\t\t},\n\t);\n\tawait throwForA2AError(response, \"get task push notification config\");\n\treturn (await response.json()) as A2ATaskPushNotificationConfig;\n}\n\nexport async function deleteA2ATaskPushNotificationConfig(\n\tconfig: A2AServiceConfig,\n\ttaskId: string,\n\tconfigId: string,\n\toptions: { signal?: AbortSignal; traceContext?: A2ATraceContext } = {},\n): Promise<void> {\n\tconst trimmedTaskId = requireA2ATaskId(taskId);\n\tconst trimmedConfigId = requireA2APushConfigId(configId);\n\tconst response = await fetchDownstream(\n\t\t`${config.baseUrl}/tasks/${encodeURIComponent(trimmedTaskId)}/pushNotificationConfigs/${encodeURIComponent(trimmedConfigId)}`,\n\t\t{\n\t\t\tmethod: \"DELETE\",\n\t\t\theaders: buildA2AHeaders(config, options.traceContext),\n\t\t\tsignal: options.signal,\n\t\t},\n\t\t{\n\t\t\tserviceName: \"platform-a2a\",\n\t\t\tfailureMode: \"required\",\n\t\t\ttimeoutMs: config.timeoutMs,\n\t\t\tmaxAttempts: config.maxAttempts,\n\t\t},\n\t);\n\tawait throwForA2AError(response, \"delete task push notification config\");\n}\n\nfunction buildA2AMessageRequestBody(\n\tconfig: A2AServiceConfig,\n\tinput: SendA2AMessageInput,\n): {\n\tbody: Omit<SendA2AMessageInput, \"traceContext\">;\n\ttraceContext?: A2ATraceContext;\n} {\n\t// `traceContext` is caller control data, not part of the A2A request body.\n\t// Project it into headers and message metadata so Platform can join\n\t// the task to traces without receiving a Maestro-private wrapper field.\n\tconst { traceContext: inputTraceContext, ...messageInput } = input;\n\tconst traceContext = resolveA2ATraceContext(inputTraceContext ?? config, {\n\t\tenvFallback: !inputTraceContext,\n\t});\n\tconst body = {\n\t\t...messageInput,\n\t\tmessage: {\n\t\t\t...input.message,\n\t\t\tmetadata: {\n\t\t\t\t...(input.message.metadata ?? {}),\n\t\t\t\tworkspaceId: config.workspaceId,\n\t\t\t\tagentId: config.agentId,\n\t\t\t\tsessionId: config.sessionId,\n\t\t\t\tactorId: config.actorId,\n\t\t\t\t...(traceContext?.traceparent\n\t\t\t\t\t? { traceparent: traceContext.traceparent }\n\t\t\t\t\t: {}),\n\t\t\t\t...(traceContext?.tracestate\n\t\t\t\t\t? { tracestate: traceContext.tracestate }\n\t\t\t\t\t: {}),\n\t\t\t},\n\t\t},\n\t};\n\treturn { body, traceContext };\n}\n\nexport function resolveA2ATraceContext(\n\tinput?: A2ATraceContext,\n\toptions: { envFallback?: boolean } = {},\n): A2ATraceContext | undefined {\n\tconst envFallback = options.envFallback ?? true;\n\t// Explicit trace input wins as a unit. A caller-provided traceparent with no\n\t// tracestate should not inherit a stale process-level TRACESTATE value.\n\tconst traceparent =\n\t\ttrimString(input?.traceparent) ??\n\t\t(envFallback\n\t\t\t? getEnvValue([\"TRACEPARENT\", \"TRACE_PARENT\", \"MAESTRO_TRACEPARENT\"])\n\t\t\t: undefined);\n\tconst tracestate =\n\t\ttrimString(input?.tracestate) ??\n\t\t(envFallback\n\t\t\t? getEnvValue([\"TRACESTATE\", \"TRACE_STATE\", \"MAESTRO_TRACESTATE\"])\n\t\t\t: undefined);\n\tif (!traceparent) {\n\t\treturn undefined;\n\t}\n\treturn {\n\t\ttraceparent,\n\t\t...(tracestate ? { tracestate } : {}),\n\t};\n}\n\nexport async function getA2ATask(\n\tconfig: A2AServiceConfig,\n\ttaskId: string,\n\toptions: { signal?: AbortSignal; traceContext?: A2ATraceContext } = {},\n): Promise<A2ATask> {\n\tconst trimmedTaskId = requireA2ATaskId(taskId);\n\tconst response = await fetchDownstream(\n\t\t`${config.baseUrl}/tasks/${encodeURIComponent(trimmedTaskId)}`,\n\t\t{\n\t\t\tmethod: \"GET\",\n\t\t\theaders: buildA2AHeaders(config, options.traceContext),\n\t\t\tsignal: options.signal,\n\t\t},\n\t\t{\n\t\t\tserviceName: \"platform-a2a\",\n\t\t\tfailureMode: \"required\",\n\t\t\ttimeoutMs: config.timeoutMs,\n\t\t\tmaxAttempts: config.maxAttempts,\n\t\t},\n\t);\n\tawait throwForA2AError(response, \"get task\");\n\treturn (await response.json()) as A2ATask;\n}\n\nexport async function cancelA2ATask(\n\tconfig: A2AServiceConfig,\n\ttaskId: string,\n\toptions: { signal?: AbortSignal; traceContext?: A2ATraceContext } = {},\n): Promise<A2ATask> {\n\tconst trimmedTaskId = requireA2ATaskId(taskId);\n\tconst response = await fetchDownstream(\n\t\t`${config.baseUrl}/tasks/${encodeURIComponent(trimmedTaskId)}:cancel`,\n\t\t{\n\t\t\tmethod: \"POST\",\n\t\t\theaders: buildA2AHeaders(config, options.traceContext),\n\t\t\tsignal: options.signal,\n\t\t},\n\t\t{\n\t\t\tserviceName: \"platform-a2a\",\n\t\t\tfailureMode: \"required\",\n\t\t\ttimeoutMs: config.timeoutMs,\n\t\t\tmaxAttempts: config.maxAttempts,\n\t\t},\n\t);\n\tawait throwForA2AError(response, \"cancel task\");\n\treturn (await response.json()) as A2ATask;\n}\n\nasync function* parseA2AStreamEvents(\n\tresponse: Response,\n): AsyncIterable<A2AStreamEvent> {\n\tif (!response.body) {\n\t\treturn;\n\t}\n\n\tconst reader = response.body.getReader();\n\tconst decoder = new TextDecoder();\n\tlet buffer = \"\";\n\tlet completed = false;\n\ttry {\n\t\twhile (true) {\n\t\t\tconst { done, value } = await reader.read();\n\t\t\tif (done) {\n\t\t\t\tcompleted = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tbuffer += decoder.decode(value, { stream: true });\n\t\t\tconst parsed = splitCompleteServerSentEvents(buffer);\n\t\t\tbuffer = parsed.remainder;\n\t\t\tfor (const frame of parsed.frames) {\n\t\t\t\tconst event = parseA2AStreamEventFrame(frame);\n\t\t\t\tif (event) {\n\t\t\t\t\tyield event;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tbuffer += decoder.decode();\n\t\tif (buffer.trim()) {\n\t\t\tconst event = parseA2AStreamEventFrame(buffer);\n\t\t\tif (event) {\n\t\t\t\tyield event;\n\t\t\t}\n\t\t}\n\t} finally {\n\t\tif (!completed) {\n\t\t\tawait reader.cancel().catch(() => undefined);\n\t\t}\n\t\treader.releaseLock();\n\t}\n}\n\nfunction splitCompleteServerSentEvents(input: string): {\n\tframes: string[];\n\tremainder: string;\n} {\n\tconst frames: string[] = [];\n\tlet cursor = 0;\n\twhile (cursor < input.length) {\n\t\tconst lineBreakIndex = findServerSentEventBoundary(input, cursor);\n\t\tif (lineBreakIndex === -1) {\n\t\t\tbreak;\n\t\t}\n\t\tframes.push(input.slice(cursor, lineBreakIndex.start));\n\t\tcursor = lineBreakIndex.end;\n\t}\n\treturn { frames, remainder: input.slice(cursor) };\n}\n\nfunction findServerSentEventBoundary(\n\tinput: string,\n\tstartIndex: number,\n): { start: number; end: number } | -1 {\n\tfor (let index = startIndex; index < input.length; index += 1) {\n\t\tconst firstLineEndingLength = getServerSentEventLineEndingLength(\n\t\t\tinput,\n\t\t\tindex,\n\t\t);\n\t\tif (firstLineEndingLength === 0) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst secondLineEndingLength = getServerSentEventLineEndingLength(\n\t\t\tinput,\n\t\t\tindex + firstLineEndingLength,\n\t\t);\n\t\tif (secondLineEndingLength > 0) {\n\t\t\treturn {\n\t\t\t\tstart: index,\n\t\t\t\tend: index + firstLineEndingLength + secondLineEndingLength,\n\t\t\t};\n\t\t}\n\t}\n\treturn -1;\n}\n\nfunction getServerSentEventLineEndingLength(\n\tinput: string,\n\tindex: number,\n): number {\n\tif (input[index] === \"\\r\") {\n\t\treturn input[index + 1] === \"\\n\" ? 2 : 1;\n\t}\n\treturn input[index] === \"\\n\" ? 1 : 0;\n}\n\nfunction parseA2AStreamEventFrame(frame: string): A2AStreamEvent | undefined {\n\tlet eventType: A2AStreamEventType | undefined;\n\tconst dataLines: string[] = [];\n\tfor (const line of frame.split(/\\r\\n|\\n|\\r/u)) {\n\t\tif (!line || line.startsWith(\":\")) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst separatorIndex = line.indexOf(\":\");\n\t\tconst field = separatorIndex === -1 ? line : line.slice(0, separatorIndex);\n\t\tconst rawValue =\n\t\t\tseparatorIndex === -1 ? \"\" : line.slice(separatorIndex + 1);\n\t\tconst value = rawValue.startsWith(\" \") ? rawValue.slice(1) : rawValue;\n\t\tif (field === \"event\") {\n\t\t\teventType = parseA2AStreamEventType(value);\n\t\t}\n\t\tif (field === \"data\") {\n\t\t\tdataLines.push(value);\n\t\t}\n\t}\n\tif (dataLines.length === 0) {\n\t\treturn undefined;\n\t}\n\n\tlet payload: Record<string, unknown>;\n\ttry {\n\t\tconst parsed = JSON.parse(dataLines.join(\"\\n\")) as unknown;\n\t\tif (!isRecord(parsed)) {\n\t\t\treturn undefined;\n\t\t}\n\t\tpayload = parsed;\n\t} catch {\n\t\treturn undefined;\n\t}\n\tpayload = unwrapA2AStreamPayload(payload);\n\teventType ??= inferA2AStreamEventType(payload);\n\tif (!eventType) {\n\t\treturn undefined;\n\t}\n\treturn normalizeA2AStreamEvent(eventType, payload);\n}\n\nfunction parseA2AStreamEventType(\n\tvalue: string,\n): A2AStreamEventType | undefined {\n\tif (\n\t\tvalue === \"task\" ||\n\t\tvalue === \"message\" ||\n\t\tvalue === \"statusUpdate\" ||\n\t\tvalue === \"artifactUpdate\"\n\t) {\n\t\treturn value;\n\t}\n\treturn undefined;\n}\n\nfunction inferA2AStreamEventType(\n\tpayload: Record<string, unknown>,\n): A2AStreamEventType | undefined {\n\tif (isRecord(payload.task)) {\n\t\treturn \"task\";\n\t}\n\tif (isRecord(payload.message)) {\n\t\treturn \"message\";\n\t}\n\tif (isRecord(payload.statusUpdate)) {\n\t\treturn \"statusUpdate\";\n\t}\n\tif (isRecord(payload.artifactUpdate) || isRecord(payload.artifact)) {\n\t\treturn \"artifactUpdate\";\n\t}\n\tif (isRecord(payload.status) && typeof payload.id === \"string\") {\n\t\treturn \"task\";\n\t}\n\tif (isRecord(payload.status)) {\n\t\treturn \"statusUpdate\";\n\t}\n\tif (\n\t\ttypeof payload.messageId === \"string\" &&\n\t\ttypeof payload.role === \"string\"\n\t) {\n\t\treturn \"message\";\n\t}\n\treturn undefined;\n}\n\nfunction unwrapA2AStreamPayload(\n\tpayload: Record<string, unknown>,\n): Record<string, unknown> {\n\treturn payload.jsonrpc === \"2.0\" && isRecord(payload.result)\n\t\t? payload.result\n\t\t: payload;\n}\n\nfunction normalizeA2AStreamEvent(\n\teventType: A2AStreamEventType,\n\tpayload: Record<string, unknown>,\n): A2AStreamEvent {\n\tif (eventType === \"task\") {\n\t\treturn {\n\t\t\ttype: \"task\",\n\t\t\ttask: (payload.task ?? payload) as A2ATask,\n\t\t};\n\t}\n\tif (eventType === \"message\") {\n\t\treturn {\n\t\t\ttype: \"message\",\n\t\t\tmessage: (payload.message ?? payload) as A2AMessage,\n\t\t};\n\t}\n\tif (eventType === \"statusUpdate\") {\n\t\tconst statusUpdatePayload = isRecord(payload.statusUpdate)\n\t\t\t? payload.statusUpdate\n\t\t\t: payload;\n\t\treturn {\n\t\t\t...statusUpdatePayload,\n\t\t\tstatus: statusUpdatePayload.status as A2ATaskStatus,\n\t\t\ttype: \"statusUpdate\",\n\t\t};\n\t}\n\tconst artifactUpdatePayload = isRecord(payload.artifactUpdate)\n\t\t? payload.artifactUpdate\n\t\t: payload;\n\treturn {\n\t\t...artifactUpdatePayload,\n\t\tartifact: artifactUpdatePayload.artifact as A2AArtifact,\n\t\ttype: \"artifactUpdate\",\n\t};\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction requireA2ATaskId(taskId: string): string {\n\tconst trimmedTaskId = trimString(taskId);\n\tif (!trimmedTaskId) {\n\t\tthrow new Error(\"A2A task id is required\");\n\t}\n\treturn trimmedTaskId;\n}\n\nfunction requireA2APushConfigId(configId: string): string {\n\tconst trimmedConfigId = trimString(configId);\n\tif (!trimmedConfigId) {\n\t\tthrow new Error(\"A2A push notification config id is required\");\n\t}\n\treturn trimmedConfigId;\n}\n\nfunction resolveA2AExtensions(\n\tconfig: A2AServiceConfig,\n\trequestExtensions?: string[],\n): string[] {\n\tconst extensions = new Set<string>();\n\tfor (const extension of [\n\t\t...(config.extensions ?? []),\n\t\t...(requestExtensions ?? []),\n\t]) {\n\t\tconst value = trimString(extension);\n\t\tif (value) {\n\t\t\textensions.add(value);\n\t\t}\n\t}\n\treturn [...extensions];\n}\n\nfunction resolveConfiguredA2AExtensions(\n\toverrides?: string[],\n): string[] | undefined {\n\tconst values =\n\t\toverrides ??\n\t\tgetEnvValue([...A2A_EXTENSIONS_ENV_VARS])\n\t\t\t?.split(\",\")\n\t\t\t.map((value) => value.trim())\n\t\t\t.filter(Boolean);\n\treturn values && values.length > 0 ? [...new Set(values)] : undefined;\n}\n\nfunction buildA2AHeaders(\n\tconfig: A2AServiceConfig,\n\ttraceContext?: A2ATraceContext,\n\textensions: string[] = [],\n): Record<string, string> {\n\t// Header projection mirrors message metadata projection: intermediaries can\n\t// route and trace the HTTP request, while the task itself keeps durable\n\t// correlation metadata for later lookup.\n\tconst resolvedTraceContext = resolveA2ATraceContext(traceContext ?? config, {\n\t\tenvFallback: !traceContext,\n\t});\n\treturn buildPlatformJsonHeaders(config, {\n\t\t\"X-EvalOps-Workspace-Id\": config.workspaceId,\n\t\t\"X-EvalOps-Agent-Id\": config.agentId,\n\t\t\"X-EvalOps-Session-Id\": config.sessionId,\n\t\t\"X-EvalOps-Actor-Id\": config.actorId,\n\t\ttraceparent: resolvedTraceContext?.traceparent,\n\t\ttracestate: resolvedTraceContext?.tracestate,\n\t\t\"A2A-Extensions\": extensions.length > 0 ? extensions.join(\",\") : undefined,\n\t});\n}\n\nasync function throwForA2AError(\n\tresponse: Response,\n\toperation: string,\n): Promise<void> {\n\tif (response.ok) {\n\t\treturn;\n\t}\n\tlet detail = \"\";\n\ttry {\n\t\tconst payload = (await response.json()) as {\n\t\t\terror?: { code?: string; message?: string };\n\t\t};\n\t\tdetail = payload.error?.message ?? payload.error?.code ?? \"\";\n\t} catch {\n\t\tdetail = await response.text().catch(() => \"\");\n\t}\n\tthrow new Error(\n\t\t`Platform A2A ${operation} failed with ${response.status}${\n\t\t\tdetail ? `: ${detail}` : \"\"\n\t\t}`,\n\t);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"a2a-client.js","sourceRoot":"","sources":["../../src/platform/a2a-client.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\tEVALOPS_ORGANIZATION_ID_ENV_VARS,\n\tEVALOPS_WORKSPACE_ID_ENV_VARS,\n} from \"../evalops/env-aliases.js\";\nimport { fetchDownstream } from \"../utils/downstream-http.js\";\nimport { isRecord } from \"../utils/json.js\";\nimport {\n\ttype PlatformServiceConfig,\n\tbuildPlatformJsonHeaders,\n\tgetEnvValue,\n\tresolvePlatformServiceConfig,\n\ttrimString,\n} from \"./client.js\";\n\nconst DEFAULT_TIMEOUT_MS = 2_500;\nconst DEFAULT_MAX_ATTEMPTS = 2;\n\nconst A2A_BASE_URL_ENV_VARS = [\n\t\"MAESTRO_PLATFORM_A2A_URL\",\n\t\"MAESTRO_A2A_URL\",\n\t\"MAESTRO_AGENT_RUNTIME_SERVICE_URL\",\n\t\"PLATFORM_AGENT_RUNTIME_URL\",\n\t\"AGENT_RUNTIME_SERVICE_URL\",\n\t\"MAESTRO_PLATFORM_BASE_URL\",\n\t\"MAESTRO_EVALOPS_BASE_URL\",\n\t\"EVALOPS_BASE_URL\",\n] as const;\n\nconst A2A_TOKEN_ENV_VARS = [\n\t\"MAESTRO_PLATFORM_A2A_TOKEN\",\n\t\"MAESTRO_A2A_TOKEN\",\n\t\"MAESTRO_AGENT_RUNTIME_SERVICE_TOKEN\",\n\t\"AGENT_RUNTIME_SERVICE_TOKEN\",\n] as const;\n\nconst A2A_ORGANIZATION_ENV_VARS = [\n\t\"MAESTRO_PLATFORM_A2A_ORG_ID\",\n\t\"MAESTRO_A2A_ORG_ID\",\n\t\"MAESTRO_AGENT_RUNTIME_ORG_ID\",\n\t\"AGENT_RUNTIME_ORGANIZATION_ID\",\n\t...EVALOPS_ORGANIZATION_ID_ENV_VARS,\n] as const;\n\nconst A2A_WORKSPACE_ENV_VARS = [\n\t\"MAESTRO_PLATFORM_A2A_WORKSPACE_ID\",\n\t\"MAESTRO_A2A_WORKSPACE_ID\",\n\t\"MAESTRO_AGENT_RUNTIME_WORKSPACE_ID\",\n\t\"AGENT_RUNTIME_WORKSPACE_ID\",\n\t...EVALOPS_WORKSPACE_ID_ENV_VARS,\n] as const;\n\nconst A2A_TIMEOUT_ENV_VARS = [\n\t\"MAESTRO_PLATFORM_A2A_TIMEOUT_MS\",\n\t\"MAESTRO_A2A_TIMEOUT_MS\",\n\t\"MAESTRO_AGENT_RUNTIME_TIMEOUT_MS\",\n\t\"AGENT_RUNTIME_SERVICE_TIMEOUT_MS\",\n] as const;\n\nconst A2A_MAX_ATTEMPTS_ENV_VARS = [\n\t\"MAESTRO_PLATFORM_A2A_MAX_ATTEMPTS\",\n\t\"MAESTRO_A2A_MAX_ATTEMPTS\",\n\t\"MAESTRO_AGENT_RUNTIME_MAX_ATTEMPTS\",\n\t\"AGENT_RUNTIME_SERVICE_MAX_ATTEMPTS\",\n] as const;\n\nconst A2A_EXTENSIONS_ENV_VARS = [\n\t\"MAESTRO_PLATFORM_A2A_EXTENSIONS\",\n\t\"MAESTRO_A2A_EXTENSIONS\",\n] as const;\n\nconst A2A_BASE_URL_SUFFIXES = [\n\t\"/.well-known/agent-card.json\",\n\t\"/message:send\",\n\t\"/message:stream\",\n\t\"/agentruntime.v1.AgentRuntimeService/HandleTrigger\",\n\t\"/agentruntime.v1.AgentRuntimeService\",\n] as const;\n\nexport interface A2AServiceConfig extends PlatformServiceConfig {\n\tagentId?: string;\n\tsessionId?: string;\n\tactorId?: string;\n\ttraceparent?: string;\n\ttracestate?: string;\n\textensions?: string[];\n}\n\nexport interface A2AAgentCard {\n\tname: string;\n\tdescription: string;\n\tsupportedInterfaces: A2AAgentInterface[];\n\tprovider?: {\n\t\turl: string;\n\t\torganization: string;\n\t};\n\tversion: string;\n\tcapabilities: {\n\t\tstreaming?: boolean;\n\t\tpushNotifications?: boolean;\n\t\textendedAgentCard?: boolean;\n\t\textensions?: A2AAgentExtension[];\n\t};\n\tdefaultInputModes: string[];\n\tdefaultOutputModes: string[];\n\tskills: A2AAgentSkill[];\n}\n\nexport interface A2AAgentInterface {\n\turl: string;\n\tprotocolBinding: string;\n\ttenant?: string;\n\tprotocolVersion: string;\n}\n\nexport interface A2AAgentSkill {\n\tid: string;\n\tname: string;\n\tdescription: string;\n\ttags: string[];\n\texamples?: string[];\n\tinputModes?: string[];\n\toutputModes?: string[];\n\trequiredContextGrants?: string[];\n\tapprovalPolicyRef?: string;\n\tmaxAutonomy?: string;\n\trequiredArtifactKinds?: string[];\n\toptionalArtifactKinds?: string[];\n\tallowedTaskClasses?: string[];\n\tdeniedTaskClasses?: string[];\n\tattributes?: Record<string, string>;\n\tmetadata?: Record<string, unknown>;\n}\n\nexport interface A2AAgentExtension {\n\turi: string;\n\tdescription?: string;\n\trequired?: boolean;\n\tparams?: Record<string, unknown>;\n}\n\nexport interface A2APart {\n\ttext?: string;\n\traw?: string;\n\turl?: string;\n\tdata?: unknown;\n\tmetadata?: Record<string, unknown>;\n\tfilename?: string;\n\tmediaType?: string;\n}\n\nexport interface A2AMessage {\n\tmessageId: string;\n\tcontextId?: string;\n\ttaskId?: string;\n\trole: \"ROLE_USER\" | \"ROLE_AGENT\" | \"user\" | \"agent\";\n\tparts: A2APart[];\n\tmetadata?: Record<string, unknown>;\n\textensions?: string[];\n\treferenceTaskIds?: string[];\n}\n\nexport interface A2ATaskStatus {\n\tstate: string;\n\tmessage?: A2AMessage;\n\ttimestamp?: string;\n}\n\nexport interface A2ATask {\n\tid: string;\n\tcontextId?: string;\n\tstatus: A2ATaskStatus;\n\tartifacts?: A2AArtifact[];\n\thistory?: A2AMessage[];\n\tmetadata?: Record<string, unknown>;\n}\n\nexport interface A2AArtifact {\n\tartifactId: string;\n\tname?: string;\n\tdescription?: string;\n\tparts: A2APart[];\n\tmetadata?: Record<string, unknown>;\n}\n\nexport interface SendA2AMessageInput {\n\tmessage: A2AMessage;\n\tconfiguration?: {\n\t\tacceptedOutputModes?: string[];\n\t\thistoryLength?: number;\n\t\treturnImmediately?: boolean;\n\t\ttaskPushNotificationConfig?: A2ATaskPushNotificationConfig;\n\t\tpushNotificationConfig?: A2ATaskPushNotificationConfig;\n\t};\n\tmetadata?: Record<string, unknown>;\n\ttraceContext?: A2ATraceContext;\n}\n\nexport interface SendA2AMessageResult {\n\ttask: A2ATask;\n}\n\nexport type A2AStreamEventType =\n\t| \"task\"\n\t| \"message\"\n\t| \"statusUpdate\"\n\t| \"artifactUpdate\";\n\nexport interface A2ATaskStreamEvent {\n\ttype: \"task\";\n\ttask: A2ATask;\n}\n\nexport interface A2AMessageStreamEvent {\n\ttype: \"message\";\n\tmessage: A2AMessage;\n}\n\nexport interface A2AStatusUpdateStreamEvent {\n\ttype: \"statusUpdate\";\n\ttaskId?: string;\n\tcontextId?: string;\n\tstatus: A2ATaskStatus;\n\tfinal?: boolean;\n\tmetadata?: Record<string, unknown>;\n}\n\nexport interface A2AArtifactUpdateStreamEvent {\n\ttype: \"artifactUpdate\";\n\ttaskId?: string;\n\tcontextId?: string;\n\tartifact: A2AArtifact;\n\tappend?: boolean;\n\tlastChunk?: boolean;\n\tmetadata?: Record<string, unknown>;\n}\n\nexport type A2AStreamEvent =\n\t| A2ATaskStreamEvent\n\t| A2AMessageStreamEvent\n\t| A2AStatusUpdateStreamEvent\n\t| A2AArtifactUpdateStreamEvent;\n\nexport interface A2ATraceContext {\n\ttraceparent?: string;\n\ttracestate?: string;\n}\n\nexport type A2ATaskPushNotificationAuthentication =\n\t| {\n\t\t\tschemes: string[];\n\t\t\tcredentials?: string;\n\t\t\t/** @deprecated Use schemes. Accepted only for older Maestro peers. */\n\t\t\tscheme?: string;\n\t }\n\t| {\n\t\t\t/** @deprecated Use schemes. Accepted only for older Maestro peers. */\n\t\t\tscheme: string;\n\t\t\tcredentials?: string;\n\t\t\tschemes?: string[];\n\t };\n\nexport interface A2ATaskPushNotificationConfig {\n\ttenant?: string;\n\tid?: string;\n\ttaskId?: string;\n\turl: string;\n\ttoken?: string;\n\tauthentication?: A2ATaskPushNotificationAuthentication;\n}\n\nexport interface A2ATaskPushNotificationConfigList {\n\tconfigs: A2ATaskPushNotificationConfig[];\n}\n\nexport function normalizeA2ABaseUrl(baseUrl: string): string {\n\tlet normalized = baseUrl.trim().replace(/\\/+$/u, \"\");\n\tfor (const suffix of A2A_BASE_URL_SUFFIXES) {\n\t\tif (normalized.endsWith(suffix)) {\n\t\t\tnormalized = normalized.slice(0, -suffix.length).replace(/\\/+$/u, \"\");\n\t\t}\n\t}\n\treturn normalized;\n}\n\nexport async function resolveA2AServiceConfig(\n\toverrides: Partial<A2AServiceConfig> = {},\n): Promise<A2AServiceConfig | null> {\n\tconst config = await resolvePlatformServiceConfig({\n\t\tbaseUrlEnvVars: A2A_BASE_URL_ENV_VARS,\n\t\ttokenEnvVars: A2A_TOKEN_ENV_VARS,\n\t\torganizationEnvVars: A2A_ORGANIZATION_ENV_VARS,\n\t\tworkspaceEnvVars: A2A_WORKSPACE_ENV_VARS,\n\t\ttimeoutEnvVars: A2A_TIMEOUT_ENV_VARS,\n\t\tmaxAttemptsEnvVars: A2A_MAX_ATTEMPTS_ENV_VARS,\n\t\tbaseUrlSuffixes: A2A_BASE_URL_SUFFIXES,\n\t\tdefaultTimeoutMs: DEFAULT_TIMEOUT_MS,\n\t\tdefaultMaxAttempts: DEFAULT_MAX_ATTEMPTS,\n\t\trequireBaseUrl: false,\n\t\trequireOrganizationId: false,\n\t\trequireToken: false,\n\t\tallowOAuthTokenFallback: false,\n\t});\n\tconst baseUrl = trimString(overrides.baseUrl ?? config?.baseUrl);\n\tconst workspaceId = trimString(overrides.workspaceId ?? config?.workspaceId);\n\tif (!baseUrl || !workspaceId) {\n\t\treturn null;\n\t}\n\treturn {\n\t\t...(config ?? {\n\t\t\tbaseUrl,\n\t\t\ttimeoutMs: DEFAULT_TIMEOUT_MS,\n\t\t\tmaxAttempts: DEFAULT_MAX_ATTEMPTS,\n\t\t}),\n\t\tbaseUrl: normalizeA2ABaseUrl(baseUrl),\n\t\torganizationId:\n\t\t\ttrimString(overrides.organizationId ?? config?.organizationId) ??\n\t\t\tconfig?.organizationId,\n\t\tworkspaceId,\n\t\ttoken: trimString(overrides.token ?? config?.token) ?? config?.token,\n\t\ttimeoutMs: overrides.timeoutMs ?? config?.timeoutMs ?? DEFAULT_TIMEOUT_MS,\n\t\tmaxAttempts:\n\t\t\toverrides.maxAttempts ?? config?.maxAttempts ?? DEFAULT_MAX_ATTEMPTS,\n\t\tagentId:\n\t\t\ttrimString(overrides.agentId) ??\n\t\t\tgetEnvValue([\"MAESTRO_AGENT_ID\", \"MAESTRO_EVALOPS_AGENT_ID\"]) ??\n\t\t\t\"maestro\",\n\t\tsessionId:\n\t\t\ttrimString(overrides.sessionId) ?? getEnvValue([\"MAESTRO_SESSION_ID\"]),\n\t\tactorId:\n\t\t\ttrimString(overrides.actorId) ??\n\t\t\tgetEnvValue([\"MAESTRO_USER_ID\", \"MAESTRO_ACTOR_ID\"]),\n\t\textensions: resolveConfiguredA2AExtensions(overrides.extensions),\n\t};\n}\n\nexport function buildA2AUserMessage(input: {\n\ttext: string;\n\tmessageId: string;\n\tcontextId?: string;\n\ttaskId?: string;\n\tmetadata?: Record<string, unknown>;\n\textensions?: string[];\n}): A2AMessage {\n\treturn {\n\t\tmessageId: input.messageId,\n\t\tcontextId: input.contextId,\n\t\ttaskId: input.taskId,\n\t\trole: \"ROLE_USER\",\n\t\tparts: [{ text: input.text, mediaType: \"text/plain\" }],\n\t\tmetadata: input.metadata,\n\t\textensions: input.extensions,\n\t};\n}\n\nexport async function discoverA2AAgentCard(\n\tconfig: A2AServiceConfig,\n\toptions: { signal?: AbortSignal } = {},\n): Promise<A2AAgentCard> {\n\tconst response = await fetchDownstream(\n\t\t`${config.baseUrl}/.well-known/agent-card.json`,\n\t\t{\n\t\t\tmethod: \"GET\",\n\t\t\theaders: buildA2AHeaders(config),\n\t\t\tsignal: options.signal,\n\t\t},\n\t\t{\n\t\t\tserviceName: \"platform-a2a\",\n\t\t\tfailureMode: \"required\",\n\t\t\ttimeoutMs: config.timeoutMs,\n\t\t\tmaxAttempts: config.maxAttempts,\n\t\t},\n\t);\n\tawait throwForA2AError(response, \"discover agent card\");\n\treturn (await response.json()) as A2AAgentCard;\n}\n\nexport async function sendA2AMessage(\n\tconfig: A2AServiceConfig,\n\tinput: SendA2AMessageInput,\n\toptions: { signal?: AbortSignal } = {},\n): Promise<SendA2AMessageResult> {\n\tconst { body, traceContext } = buildA2AMessageRequestBody(config, input);\n\tconst extensions = resolveA2AExtensions(config, input.message.extensions);\n\tconst response = await fetchDownstream(\n\t\t`${config.baseUrl}/message:send`,\n\t\t{\n\t\t\tmethod: \"POST\",\n\t\t\theaders: buildA2AHeaders(config, traceContext, extensions),\n\t\t\tbody: JSON.stringify(body),\n\t\t\tsignal: options.signal,\n\t\t},\n\t\t{\n\t\t\tserviceName: \"platform-a2a\",\n\t\t\tfailureMode: \"required\",\n\t\t\ttimeoutMs: config.timeoutMs,\n\t\t\tmaxAttempts: config.maxAttempts,\n\t\t},\n\t);\n\tawait throwForA2AError(response, \"send message\");\n\treturn (await response.json()) as SendA2AMessageResult;\n}\n\nexport async function* streamA2AMessage(\n\tconfig: A2AServiceConfig,\n\tinput: SendA2AMessageInput,\n\toptions: { signal?: AbortSignal } = {},\n): AsyncIterable<A2AStreamEvent> {\n\tconst { body, traceContext } = buildA2AMessageRequestBody(config, input);\n\tconst extensions = resolveA2AExtensions(config, input.message.extensions);\n\tconst response = await fetchDownstream(\n\t\t`${config.baseUrl}/message:stream`,\n\t\t{\n\t\t\tmethod: \"POST\",\n\t\t\theaders: {\n\t\t\t\t...buildA2AHeaders(config, traceContext, extensions),\n\t\t\t\tAccept: \"text/event-stream\",\n\t\t\t},\n\t\t\tbody: JSON.stringify(body),\n\t\t\tsignal: options.signal,\n\t\t},\n\t\t{\n\t\t\tserviceName: \"platform-a2a\",\n\t\t\tfailureMode: \"required\",\n\t\t\ttimeoutMs: config.timeoutMs,\n\t\t\tmaxAttempts: config.maxAttempts,\n\t\t},\n\t);\n\tawait throwForA2AError(response, \"stream message\");\n\tyield* parseA2AStreamEvents(response);\n}\n\nexport async function* subscribeA2ATask(\n\tconfig: A2AServiceConfig,\n\ttaskId: string,\n\toptions: {\n\t\tsignal?: AbortSignal;\n\t\ttraceContext?: A2ATraceContext;\n\t\textensions?: string[];\n\t} = {},\n): AsyncIterable<A2AStreamEvent> {\n\tconst trimmedTaskId = trimString(taskId);\n\tif (!trimmedTaskId) {\n\t\tthrow new Error(\"A2A task id is required\");\n\t}\n\tconst response = await fetchDownstream(\n\t\t`${config.baseUrl}/tasks/${encodeURIComponent(trimmedTaskId)}:subscribe`,\n\t\t{\n\t\t\tmethod: \"POST\",\n\t\t\theaders: {\n\t\t\t\t...buildA2AHeaders(\n\t\t\t\t\tconfig,\n\t\t\t\t\toptions.traceContext,\n\t\t\t\t\tresolveA2AExtensions(config, options.extensions),\n\t\t\t\t),\n\t\t\t\tAccept: \"text/event-stream\",\n\t\t\t},\n\t\t\tsignal: options.signal,\n\t\t},\n\t\t{\n\t\t\tserviceName: \"platform-a2a\",\n\t\t\tfailureMode: \"required\",\n\t\t\ttimeoutMs: config.timeoutMs,\n\t\t\tmaxAttempts: config.maxAttempts,\n\t\t},\n\t);\n\tawait throwForA2AError(response, \"subscribe task\");\n\tyield* parseA2AStreamEvents(response);\n}\n\nexport async function createA2ATaskPushNotificationConfig(\n\tconfig: A2AServiceConfig,\n\ttaskId: string,\n\tpushConfig: A2ATaskPushNotificationConfig,\n\toptions: { signal?: AbortSignal; traceContext?: A2ATraceContext } = {},\n): Promise<A2ATaskPushNotificationConfig> {\n\tconst trimmedTaskId = requireA2ATaskId(taskId);\n\tconst response = await fetchDownstream(\n\t\t`${config.baseUrl}/tasks/${encodeURIComponent(trimmedTaskId)}/pushNotificationConfigs`,\n\t\t{\n\t\t\tmethod: \"POST\",\n\t\t\theaders: buildA2AHeaders(config, options.traceContext),\n\t\t\tbody: JSON.stringify(pushConfig),\n\t\t\tsignal: options.signal,\n\t\t},\n\t\t{\n\t\t\tserviceName: \"platform-a2a\",\n\t\t\tfailureMode: \"required\",\n\t\t\ttimeoutMs: config.timeoutMs,\n\t\t\tmaxAttempts: config.maxAttempts,\n\t\t},\n\t);\n\tawait throwForA2AError(response, \"create task push notification config\");\n\treturn (await response.json()) as A2ATaskPushNotificationConfig;\n}\n\nexport async function listA2ATaskPushNotificationConfigs(\n\tconfig: A2AServiceConfig,\n\ttaskId: string,\n\toptions: { signal?: AbortSignal; traceContext?: A2ATraceContext } = {},\n): Promise<A2ATaskPushNotificationConfigList> {\n\tconst trimmedTaskId = requireA2ATaskId(taskId);\n\tconst response = await fetchDownstream(\n\t\t`${config.baseUrl}/tasks/${encodeURIComponent(trimmedTaskId)}/pushNotificationConfigs`,\n\t\t{\n\t\t\tmethod: \"GET\",\n\t\t\theaders: buildA2AHeaders(config, options.traceContext),\n\t\t\tsignal: options.signal,\n\t\t},\n\t\t{\n\t\t\tserviceName: \"platform-a2a\",\n\t\t\tfailureMode: \"required\",\n\t\t\ttimeoutMs: config.timeoutMs,\n\t\t\tmaxAttempts: config.maxAttempts,\n\t\t},\n\t);\n\tawait throwForA2AError(response, \"list task push notification configs\");\n\treturn (await response.json()) as A2ATaskPushNotificationConfigList;\n}\n\nexport async function getA2ATaskPushNotificationConfig(\n\tconfig: A2AServiceConfig,\n\ttaskId: string,\n\tconfigId: string,\n\toptions: { signal?: AbortSignal; traceContext?: A2ATraceContext } = {},\n): Promise<A2ATaskPushNotificationConfig> {\n\tconst trimmedTaskId = requireA2ATaskId(taskId);\n\tconst trimmedConfigId = requireA2APushConfigId(configId);\n\tconst response = await fetchDownstream(\n\t\t`${config.baseUrl}/tasks/${encodeURIComponent(trimmedTaskId)}/pushNotificationConfigs/${encodeURIComponent(trimmedConfigId)}`,\n\t\t{\n\t\t\tmethod: \"GET\",\n\t\t\theaders: buildA2AHeaders(config, options.traceContext),\n\t\t\tsignal: options.signal,\n\t\t},\n\t\t{\n\t\t\tserviceName: \"platform-a2a\",\n\t\t\tfailureMode: \"required\",\n\t\t\ttimeoutMs: config.timeoutMs,\n\t\t\tmaxAttempts: config.maxAttempts,\n\t\t},\n\t);\n\tawait throwForA2AError(response, \"get task push notification config\");\n\treturn (await response.json()) as A2ATaskPushNotificationConfig;\n}\n\nexport async function deleteA2ATaskPushNotificationConfig(\n\tconfig: A2AServiceConfig,\n\ttaskId: string,\n\tconfigId: string,\n\toptions: { signal?: AbortSignal; traceContext?: A2ATraceContext } = {},\n): Promise<void> {\n\tconst trimmedTaskId = requireA2ATaskId(taskId);\n\tconst trimmedConfigId = requireA2APushConfigId(configId);\n\tconst response = await fetchDownstream(\n\t\t`${config.baseUrl}/tasks/${encodeURIComponent(trimmedTaskId)}/pushNotificationConfigs/${encodeURIComponent(trimmedConfigId)}`,\n\t\t{\n\t\t\tmethod: \"DELETE\",\n\t\t\theaders: buildA2AHeaders(config, options.traceContext),\n\t\t\tsignal: options.signal,\n\t\t},\n\t\t{\n\t\t\tserviceName: \"platform-a2a\",\n\t\t\tfailureMode: \"required\",\n\t\t\ttimeoutMs: config.timeoutMs,\n\t\t\tmaxAttempts: config.maxAttempts,\n\t\t},\n\t);\n\tawait throwForA2AError(response, \"delete task push notification config\");\n}\n\nfunction buildA2AMessageRequestBody(\n\tconfig: A2AServiceConfig,\n\tinput: SendA2AMessageInput,\n): {\n\tbody: Omit<SendA2AMessageInput, \"traceContext\">;\n\ttraceContext?: A2ATraceContext;\n} {\n\t// `traceContext` is caller control data, not part of the A2A request body.\n\t// Project it into headers and message metadata so Platform can join\n\t// the task to traces without receiving a Maestro-private wrapper field.\n\tconst { traceContext: inputTraceContext, ...messageInput } = input;\n\tconst traceContext = resolveA2ATraceContext(inputTraceContext ?? config, {\n\t\tenvFallback: !inputTraceContext,\n\t});\n\tconst body = {\n\t\t...messageInput,\n\t\tmessage: {\n\t\t\t...input.message,\n\t\t\tmetadata: {\n\t\t\t\t...(input.message.metadata ?? {}),\n\t\t\t\tworkspaceId: config.workspaceId,\n\t\t\t\tagentId: config.agentId,\n\t\t\t\tsessionId: config.sessionId,\n\t\t\t\tactorId: config.actorId,\n\t\t\t\t...(traceContext?.traceparent\n\t\t\t\t\t? { traceparent: traceContext.traceparent }\n\t\t\t\t\t: {}),\n\t\t\t\t...(traceContext?.tracestate\n\t\t\t\t\t? { tracestate: traceContext.tracestate }\n\t\t\t\t\t: {}),\n\t\t\t},\n\t\t},\n\t};\n\treturn { body, traceContext };\n}\n\nexport function resolveA2ATraceContext(\n\tinput?: A2ATraceContext,\n\toptions: { envFallback?: boolean } = {},\n): A2ATraceContext | undefined {\n\tconst envFallback = options.envFallback ?? true;\n\t// Explicit trace input wins as a unit. A caller-provided traceparent with no\n\t// tracestate should not inherit a stale process-level TRACESTATE value.\n\tconst traceparent =\n\t\ttrimString(input?.traceparent) ??\n\t\t(envFallback\n\t\t\t? getEnvValue([\"TRACEPARENT\", \"TRACE_PARENT\", \"MAESTRO_TRACEPARENT\"])\n\t\t\t: undefined);\n\tconst tracestate =\n\t\ttrimString(input?.tracestate) ??\n\t\t(envFallback\n\t\t\t? getEnvValue([\"TRACESTATE\", \"TRACE_STATE\", \"MAESTRO_TRACESTATE\"])\n\t\t\t: undefined);\n\tif (!traceparent) {\n\t\treturn undefined;\n\t}\n\treturn {\n\t\ttraceparent,\n\t\t...(tracestate ? { tracestate } : {}),\n\t};\n}\n\nexport async function getA2ATask(\n\tconfig: A2AServiceConfig,\n\ttaskId: string,\n\toptions: { signal?: AbortSignal; traceContext?: A2ATraceContext } = {},\n): Promise<A2ATask> {\n\tconst trimmedTaskId = requireA2ATaskId(taskId);\n\tconst response = await fetchDownstream(\n\t\t`${config.baseUrl}/tasks/${encodeURIComponent(trimmedTaskId)}`,\n\t\t{\n\t\t\tmethod: \"GET\",\n\t\t\theaders: buildA2AHeaders(config, options.traceContext),\n\t\t\tsignal: options.signal,\n\t\t},\n\t\t{\n\t\t\tserviceName: \"platform-a2a\",\n\t\t\tfailureMode: \"required\",\n\t\t\ttimeoutMs: config.timeoutMs,\n\t\t\tmaxAttempts: config.maxAttempts,\n\t\t},\n\t);\n\tawait throwForA2AError(response, \"get task\");\n\treturn (await response.json()) as A2ATask;\n}\n\nexport async function cancelA2ATask(\n\tconfig: A2AServiceConfig,\n\ttaskId: string,\n\toptions: { signal?: AbortSignal; traceContext?: A2ATraceContext } = {},\n): Promise<A2ATask> {\n\tconst trimmedTaskId = requireA2ATaskId(taskId);\n\tconst response = await fetchDownstream(\n\t\t`${config.baseUrl}/tasks/${encodeURIComponent(trimmedTaskId)}:cancel`,\n\t\t{\n\t\t\tmethod: \"POST\",\n\t\t\theaders: buildA2AHeaders(config, options.traceContext),\n\t\t\tsignal: options.signal,\n\t\t},\n\t\t{\n\t\t\tserviceName: \"platform-a2a\",\n\t\t\tfailureMode: \"required\",\n\t\t\ttimeoutMs: config.timeoutMs,\n\t\t\tmaxAttempts: config.maxAttempts,\n\t\t},\n\t);\n\tawait throwForA2AError(response, \"cancel task\");\n\treturn (await response.json()) as A2ATask;\n}\n\nasync function* parseA2AStreamEvents(\n\tresponse: Response,\n): AsyncIterable<A2AStreamEvent> {\n\tif (!response.body) {\n\t\treturn;\n\t}\n\n\tconst reader = response.body.getReader();\n\tconst decoder = new TextDecoder();\n\tlet buffer = \"\";\n\tlet completed = false;\n\ttry {\n\t\twhile (true) {\n\t\t\tconst { done, value } = await reader.read();\n\t\t\tif (done) {\n\t\t\t\tcompleted = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tbuffer += decoder.decode(value, { stream: true });\n\t\t\tconst parsed = splitCompleteServerSentEvents(buffer);\n\t\t\tbuffer = parsed.remainder;\n\t\t\tfor (const frame of parsed.frames) {\n\t\t\t\tconst event = parseA2AStreamEventFrame(frame);\n\t\t\t\tif (event) {\n\t\t\t\t\tyield event;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tbuffer += decoder.decode();\n\t\tif (buffer.trim()) {\n\t\t\tconst event = parseA2AStreamEventFrame(buffer);\n\t\t\tif (event) {\n\t\t\t\tyield event;\n\t\t\t}\n\t\t}\n\t} finally {\n\t\tif (!completed) {\n\t\t\tawait reader.cancel().catch(() => undefined);\n\t\t}\n\t\treader.releaseLock();\n\t}\n}\n\nfunction splitCompleteServerSentEvents(input: string): {\n\tframes: string[];\n\tremainder: string;\n} {\n\tconst frames: string[] = [];\n\tlet cursor = 0;\n\twhile (cursor < input.length) {\n\t\tconst lineBreakIndex = findServerSentEventBoundary(input, cursor);\n\t\tif (lineBreakIndex === -1) {\n\t\t\tbreak;\n\t\t}\n\t\tframes.push(input.slice(cursor, lineBreakIndex.start));\n\t\tcursor = lineBreakIndex.end;\n\t}\n\treturn { frames, remainder: input.slice(cursor) };\n}\n\nfunction findServerSentEventBoundary(\n\tinput: string,\n\tstartIndex: number,\n): { start: number; end: number } | -1 {\n\tfor (let index = startIndex; index < input.length; index += 1) {\n\t\tconst firstLineEndingLength = getServerSentEventLineEndingLength(\n\t\t\tinput,\n\t\t\tindex,\n\t\t);\n\t\tif (firstLineEndingLength === 0) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst secondLineEndingLength = getServerSentEventLineEndingLength(\n\t\t\tinput,\n\t\t\tindex + firstLineEndingLength,\n\t\t);\n\t\tif (secondLineEndingLength > 0) {\n\t\t\treturn {\n\t\t\t\tstart: index,\n\t\t\t\tend: index + firstLineEndingLength + secondLineEndingLength,\n\t\t\t};\n\t\t}\n\t}\n\treturn -1;\n}\n\nfunction getServerSentEventLineEndingLength(\n\tinput: string,\n\tindex: number,\n): number {\n\tif (input[index] === \"\\r\") {\n\t\treturn input[index + 1] === \"\\n\" ? 2 : 1;\n\t}\n\treturn input[index] === \"\\n\" ? 1 : 0;\n}\n\nfunction parseA2AStreamEventFrame(frame: string): A2AStreamEvent | undefined {\n\tlet eventType: A2AStreamEventType | undefined;\n\tconst dataLines: string[] = [];\n\tfor (const line of frame.split(/\\r\\n|\\n|\\r/u)) {\n\t\tif (!line || line.startsWith(\":\")) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst separatorIndex = line.indexOf(\":\");\n\t\tconst field = separatorIndex === -1 ? line : line.slice(0, separatorIndex);\n\t\tconst rawValue =\n\t\t\tseparatorIndex === -1 ? \"\" : line.slice(separatorIndex + 1);\n\t\tconst value = rawValue.startsWith(\" \") ? rawValue.slice(1) : rawValue;\n\t\tif (field === \"event\") {\n\t\t\teventType = parseA2AStreamEventType(value);\n\t\t}\n\t\tif (field === \"data\") {\n\t\t\tdataLines.push(value);\n\t\t}\n\t}\n\tif (dataLines.length === 0) {\n\t\treturn undefined;\n\t}\n\n\tlet payload: Record<string, unknown>;\n\ttry {\n\t\tconst parsed = JSON.parse(dataLines.join(\"\\n\")) as unknown;\n\t\tif (!isRecord(parsed)) {\n\t\t\treturn undefined;\n\t\t}\n\t\tpayload = parsed;\n\t} catch {\n\t\treturn undefined;\n\t}\n\tpayload = unwrapA2AStreamPayload(payload);\n\teventType ??= inferA2AStreamEventType(payload);\n\tif (!eventType) {\n\t\treturn undefined;\n\t}\n\treturn normalizeA2AStreamEvent(eventType, payload);\n}\n\nfunction parseA2AStreamEventType(\n\tvalue: string,\n): A2AStreamEventType | undefined {\n\tif (\n\t\tvalue === \"task\" ||\n\t\tvalue === \"message\" ||\n\t\tvalue === \"statusUpdate\" ||\n\t\tvalue === \"artifactUpdate\"\n\t) {\n\t\treturn value;\n\t}\n\treturn undefined;\n}\n\nfunction inferA2AStreamEventType(\n\tpayload: Record<string, unknown>,\n): A2AStreamEventType | undefined {\n\tif (isRecord(payload.task)) {\n\t\treturn \"task\";\n\t}\n\tif (isRecord(payload.message)) {\n\t\treturn \"message\";\n\t}\n\tif (isRecord(payload.statusUpdate)) {\n\t\treturn \"statusUpdate\";\n\t}\n\tif (isRecord(payload.artifactUpdate) || isRecord(payload.artifact)) {\n\t\treturn \"artifactUpdate\";\n\t}\n\tif (isRecord(payload.status) && typeof payload.id === \"string\") {\n\t\treturn \"task\";\n\t}\n\tif (isRecord(payload.status)) {\n\t\treturn \"statusUpdate\";\n\t}\n\tif (\n\t\ttypeof payload.messageId === \"string\" &&\n\t\ttypeof payload.role === \"string\"\n\t) {\n\t\treturn \"message\";\n\t}\n\treturn undefined;\n}\n\nfunction unwrapA2AStreamPayload(\n\tpayload: Record<string, unknown>,\n): Record<string, unknown> {\n\treturn payload.jsonrpc === \"2.0\" && isRecord(payload.result)\n\t\t? payload.result\n\t\t: payload;\n}\n\nfunction normalizeA2AStreamEvent(\n\teventType: A2AStreamEventType,\n\tpayload: Record<string, unknown>,\n): A2AStreamEvent {\n\tif (eventType === \"task\") {\n\t\treturn {\n\t\t\ttype: \"task\",\n\t\t\ttask: (payload.task ?? payload) as A2ATask,\n\t\t};\n\t}\n\tif (eventType === \"message\") {\n\t\treturn {\n\t\t\ttype: \"message\",\n\t\t\tmessage: (payload.message ?? payload) as A2AMessage,\n\t\t};\n\t}\n\tif (eventType === \"statusUpdate\") {\n\t\tconst statusUpdatePayload = isRecord(payload.statusUpdate)\n\t\t\t? payload.statusUpdate\n\t\t\t: payload;\n\t\treturn {\n\t\t\t...statusUpdatePayload,\n\t\t\tstatus: statusUpdatePayload.status as A2ATaskStatus,\n\t\t\ttype: \"statusUpdate\",\n\t\t};\n\t}\n\tconst artifactUpdatePayload = isRecord(payload.artifactUpdate)\n\t\t? payload.artifactUpdate\n\t\t: payload;\n\treturn {\n\t\t...artifactUpdatePayload,\n\t\tartifact: artifactUpdatePayload.artifact as A2AArtifact,\n\t\ttype: \"artifactUpdate\",\n\t};\n}\n\nfunction requireA2ATaskId(taskId: string): string {\n\tconst trimmedTaskId = trimString(taskId);\n\tif (!trimmedTaskId) {\n\t\tthrow new Error(\"A2A task id is required\");\n\t}\n\treturn trimmedTaskId;\n}\n\nfunction requireA2APushConfigId(configId: string): string {\n\tconst trimmedConfigId = trimString(configId);\n\tif (!trimmedConfigId) {\n\t\tthrow new Error(\"A2A push notification config id is required\");\n\t}\n\treturn trimmedConfigId;\n}\n\nfunction resolveA2AExtensions(\n\tconfig: A2AServiceConfig,\n\trequestExtensions?: string[],\n): string[] {\n\tconst extensions = new Set<string>();\n\tfor (const extension of [\n\t\t...(config.extensions ?? []),\n\t\t...(requestExtensions ?? []),\n\t]) {\n\t\tconst value = trimString(extension);\n\t\tif (value) {\n\t\t\textensions.add(value);\n\t\t}\n\t}\n\treturn [...extensions];\n}\n\nfunction resolveConfiguredA2AExtensions(\n\toverrides?: string[],\n): string[] | undefined {\n\tconst values =\n\t\toverrides ??\n\t\tgetEnvValue([...A2A_EXTENSIONS_ENV_VARS])\n\t\t\t?.split(\",\")\n\t\t\t.map((value) => value.trim())\n\t\t\t.filter(Boolean);\n\treturn values && values.length > 0 ? [...new Set(values)] : undefined;\n}\n\nfunction buildA2AHeaders(\n\tconfig: A2AServiceConfig,\n\ttraceContext?: A2ATraceContext,\n\textensions: string[] = [],\n): Record<string, string> {\n\t// Header projection mirrors message metadata projection: intermediaries can\n\t// route and trace the HTTP request, while the task itself keeps durable\n\t// correlation metadata for later lookup.\n\tconst resolvedTraceContext = resolveA2ATraceContext(traceContext ?? config, {\n\t\tenvFallback: !traceContext,\n\t});\n\treturn buildPlatformJsonHeaders(config, {\n\t\t\"X-EvalOps-Workspace-Id\": config.workspaceId,\n\t\t\"X-EvalOps-Agent-Id\": config.agentId,\n\t\t\"X-EvalOps-Session-Id\": config.sessionId,\n\t\t\"X-EvalOps-Actor-Id\": config.actorId,\n\t\ttraceparent: resolvedTraceContext?.traceparent,\n\t\ttracestate: resolvedTraceContext?.tracestate,\n\t\t\"A2A-Extensions\": extensions.length > 0 ? extensions.join(\",\") : undefined,\n\t});\n}\n\nasync function throwForA2AError(\n\tresponse: Response,\n\toperation: string,\n): Promise<void> {\n\tif (response.ok) {\n\t\treturn;\n\t}\n\tlet detail = \"\";\n\ttry {\n\t\tconst payload = (await response.json()) as {\n\t\t\terror?: { code?: string; message?: string };\n\t\t};\n\t\tdetail = payload.error?.message ?? payload.error?.code ?? \"\";\n\t} catch {\n\t\tdetail = await response.text().catch(() => \"\");\n\t}\n\tthrow new Error(\n\t\t`Platform A2A ${operation} failed with ${response.status}${\n\t\t\tdetail ? `: ${detail}` : \"\"\n\t\t}`,\n\t);\n}\n"]}
|
|
@@ -87,4 +87,5 @@ export interface SummarizeA2ACockpitInput {
|
|
|
87
87
|
}
|
|
88
88
|
export declare function buildA2ACockpit(options?: A2ACockpitOptions): Promise<A2ACockpitSummary>;
|
|
89
89
|
export declare function summarizeA2ACockpit(input: SummarizeA2ACockpitInput): A2ACockpitSummary;
|
|
90
|
+
export declare function classifyTaskState(state: string): A2ACockpitTaskStatus;
|
|
90
91
|
//# sourceMappingURL=a2a-cockpit.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"a2a-cockpit.d.ts","sourceRoot":"","sources":["../../src/platform/a2a-cockpit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,eAAe,EAAmB,MAAM,gBAAgB,CAAC;AACvE,OAAO,EACN,KAAK,iBAAiB,EAItB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAEN,KAAK,iBAAiB,
|
|
1
|
+
{"version":3,"file":"a2a-cockpit.d.ts","sourceRoot":"","sources":["../../src/platform/a2a-cockpit.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { inspectA2AFleet } from "./a2a-fleet.js";
|
|
2
2
|
import { hasA2AOwnershipRecordMarkers, hasA2AOwnershipScope, matchesA2AOwnershipScope, } from "./a2a-ownership.js";
|
|
3
|
-
import { isActionRequiredA2AState, isFinalA2AState, isTerminalA2AState, listA2ATaskEntries, loadA2ATaskLedger, } from "./a2a-task-ledger.js";
|
|
3
|
+
import { isActionRequiredA2AState, isCompletedA2AState, isFailedA2AState, isFinalA2AState, isTerminalA2AState, listA2ATaskEntries, loadA2ATaskLedger, normalizeA2AState, } from "./a2a-task-ledger.js";
|
|
4
4
|
export async function buildA2ACockpit(options = {}) {
|
|
5
5
|
if (!hasA2AOwnershipScope(options.ownershipScope)) {
|
|
6
6
|
return buildA2ACockpitUnscoped(options);
|
|
@@ -197,7 +197,7 @@ function nextActionForTask(task) {
|
|
|
197
197
|
severity: "critical",
|
|
198
198
|
peer: task.peer,
|
|
199
199
|
taskId: task.taskId,
|
|
200
|
-
reason: "Peer returned an input-required or auth-required A2A state.",
|
|
200
|
+
reason: taskActionReason(task, "Peer returned an input-required or auth-required A2A state."),
|
|
201
201
|
};
|
|
202
202
|
}
|
|
203
203
|
if (task.status === "running") {
|
|
@@ -209,7 +209,7 @@ function nextActionForTask(task) {
|
|
|
209
209
|
severity: "info",
|
|
210
210
|
peer: task.peer,
|
|
211
211
|
taskId: task.taskId,
|
|
212
|
-
reason: "Task is still non-terminal in the local A2A ledger.",
|
|
212
|
+
reason: taskActionReason(task, "Task is still non-terminal in the local A2A ledger."),
|
|
213
213
|
};
|
|
214
214
|
}
|
|
215
215
|
if (task.status === "failed") {
|
|
@@ -220,11 +220,45 @@ function nextActionForTask(task) {
|
|
|
220
220
|
severity: "warning",
|
|
221
221
|
peer: task.peer,
|
|
222
222
|
taskId: task.taskId,
|
|
223
|
-
reason: "Task reached a failed, rejected, or canceled final state.",
|
|
223
|
+
reason: taskActionReason(task, "Task reached a failed, rejected, or canceled final state."),
|
|
224
224
|
};
|
|
225
225
|
}
|
|
226
226
|
return undefined;
|
|
227
227
|
}
|
|
228
|
+
function taskActionReason(task, baseReason) {
|
|
229
|
+
const workGraphReason = workGraphPressureReason(task.workGraph);
|
|
230
|
+
return workGraphReason ? `${baseReason} ${workGraphReason}` : baseReason;
|
|
231
|
+
}
|
|
232
|
+
function workGraphPressureReason(workGraph) {
|
|
233
|
+
if (!workGraph) {
|
|
234
|
+
return undefined;
|
|
235
|
+
}
|
|
236
|
+
const pressure = [
|
|
237
|
+
countReason("blocked work item", workGraph.blockedItemCount),
|
|
238
|
+
countReason("waiting work item", workGraph.waitingItemCount),
|
|
239
|
+
countReason("pending tool call", workGraph.pendingToolCallCount),
|
|
240
|
+
countReason("open wait", workGraph.waitItemCount),
|
|
241
|
+
].filter((part) => Boolean(part));
|
|
242
|
+
if (pressure.length === 0) {
|
|
243
|
+
return undefined;
|
|
244
|
+
}
|
|
245
|
+
return `Work graph shows ${joinReasonParts(pressure)}.`;
|
|
246
|
+
}
|
|
247
|
+
function countReason(label, count) {
|
|
248
|
+
if (!count || count <= 0) {
|
|
249
|
+
return undefined;
|
|
250
|
+
}
|
|
251
|
+
return `${count} ${label}${count === 1 ? "" : "s"}`;
|
|
252
|
+
}
|
|
253
|
+
function joinReasonParts(parts) {
|
|
254
|
+
if (parts.length <= 1) {
|
|
255
|
+
return parts[0] ?? "";
|
|
256
|
+
}
|
|
257
|
+
if (parts.length === 2) {
|
|
258
|
+
return `${parts[0]} and ${parts[1]}`;
|
|
259
|
+
}
|
|
260
|
+
return `${parts.slice(0, -1).join(", ")}, and ${parts.at(-1)}`;
|
|
261
|
+
}
|
|
228
262
|
function taskCommand(entry, status) {
|
|
229
263
|
if (status === "waiting") {
|
|
230
264
|
return `maestro a2a reply ${shellQuote(entry.peer)} ${shellQuote(entry.taskId)} <response> --wait --work-graph`;
|
|
@@ -234,7 +268,7 @@ function taskCommand(entry, status) {
|
|
|
234
268
|
}
|
|
235
269
|
return undefined;
|
|
236
270
|
}
|
|
237
|
-
function classifyTaskState(state) {
|
|
271
|
+
export function classifyTaskState(state) {
|
|
238
272
|
const normalized = normalizeState(state);
|
|
239
273
|
if (!normalized) {
|
|
240
274
|
return "unknown";
|
|
@@ -242,13 +276,10 @@ function classifyTaskState(state) {
|
|
|
242
276
|
if (isActionRequiredA2AState(normalized)) {
|
|
243
277
|
return "waiting";
|
|
244
278
|
}
|
|
245
|
-
if (normalized
|
|
279
|
+
if (isCompletedA2AState(normalized)) {
|
|
246
280
|
return "completed";
|
|
247
281
|
}
|
|
248
|
-
if (normalized
|
|
249
|
-
normalized.includes("REJECTED") ||
|
|
250
|
-
normalized.includes("CANCELED") ||
|
|
251
|
-
normalized.includes("CANCELLED")) {
|
|
282
|
+
if (isFailedA2AState(normalized)) {
|
|
252
283
|
return "failed";
|
|
253
284
|
}
|
|
254
285
|
if (!isFinalA2AState(normalized)) {
|
|
@@ -291,7 +322,7 @@ function cleanPeer(peer) {
|
|
|
291
322
|
return trimmed ? trimmed : undefined;
|
|
292
323
|
}
|
|
293
324
|
function normalizeState(state) {
|
|
294
|
-
return state
|
|
325
|
+
return normalizeA2AState(state);
|
|
295
326
|
}
|
|
296
327
|
function shellQuote(value) {
|
|
297
328
|
if (/^[A-Za-z0-9_./:-]+$/u.test(value)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"a2a-cockpit.js","sourceRoot":"","sources":["../../src/platform/a2a-cockpit.ts"],"names":[],"mappings":"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","sourcesContent":["import { type A2AFleetSummary, inspectA2AFleet } from \"./a2a-fleet.js\";\nimport {\n\ttype A2AOwnershipScope,\n\thasA2AOwnershipRecordMarkers,\n\thasA2AOwnershipScope,\n\tmatchesA2AOwnershipScope,\n} from \"./a2a-ownership.js\";\nimport {\n\ttype A2ATaskLedgerEntry,\n\ttype A2ATaskLedgerFile,\n\tisActionRequiredA2AState,\n\tisFinalA2AState,\n\tisTerminalA2AState,\n\tlistA2ATaskEntries,\n\tloadA2ATaskLedger,\n} from \"./a2a-task-ledger.js\";\nimport type { A2AWorkGraphMetadata } from \"./a2a-work-graph.js\";\n\nexport type A2ACockpitTaskStatus =\n\t| \"waiting\"\n\t| \"running\"\n\t| \"completed\"\n\t| \"failed\"\n\t| \"unknown\";\n\nexport type A2ACockpitNextActionSeverity = \"info\" | \"warning\" | \"critical\";\n\nexport interface A2ACockpitOptions {\n\tregistryPath?: string;\n\ttasksPath?: string;\n\ttimeoutMs?: number;\n\tpeer?: string;\n\tlimit?: number;\n\townershipScope?: A2AOwnershipScope;\n}\n\nexport interface A2ACockpitSummary {\n\tgeneratedAt: string;\n\tregistryPath: string;\n\ttasksPath: string;\n\tpeer?: string;\n\tcounts: A2ACockpitCounts;\n\tpeers: A2ACockpitPeerSummary[];\n\ttasks: A2ACockpitTaskSummary[];\n\tnextActions: A2ACockpitNextAction[];\n}\n\nexport interface A2ACockpitCounts {\n\tpeers: number;\n\tonlinePeers: number;\n\tunreachablePeers: number;\n\ttasks: number;\n\trunningTasks: number;\n\tactionRequiredTasks: number;\n\tfailedTasks: number;\n\tcompletedTasks: number;\n}\n\nexport interface A2ACockpitPeerSummary {\n\tname: string;\n\tdisplayName?: string;\n\turl: string;\n\tstatus: \"online\" | \"unreachable\";\n\terror?: string;\n\tauth?: string;\n\tmodel?: string;\n\tcwd?: string;\n\ttaskCounts: Pick<\n\t\tA2ACockpitCounts,\n\t\t| \"tasks\"\n\t\t| \"runningTasks\"\n\t\t| \"actionRequiredTasks\"\n\t\t| \"failedTasks\"\n\t\t| \"completedTasks\"\n\t>;\n\tlastTask?: {\n\t\tid: string;\n\t\tstate: string;\n\t\tstatus: A2ACockpitTaskStatus;\n\t\tupdatedAt: string;\n\t\ttext: string;\n\t};\n}\n\nexport interface A2ACockpitTaskSummary {\n\tledgerId: string;\n\tpeer: string;\n\tpeerDisplayName?: string;\n\torphanedPeer?: boolean;\n\ttaskId: string;\n\tstate: string;\n\tstatus: A2ACockpitTaskStatus;\n\trequiresInput: boolean;\n\tterminal: boolean;\n\tfinal: boolean;\n\ttext: string;\n\tresponseText?: string;\n\tupdatedAt: string;\n\tcompletedAt?: string;\n\tworkGraph?: A2AWorkGraphMetadata;\n\tnextCommand?: string;\n}\n\nexport interface A2ACockpitNextAction {\n\tid: string;\n\tlabel: string;\n\tcommand: string;\n\tseverity: A2ACockpitNextActionSeverity;\n\tpeer: string;\n\ttaskId?: string;\n\treason: string;\n}\n\nexport interface SummarizeA2ACockpitInput {\n\tfleet: A2AFleetSummary;\n\tledger: A2ATaskLedgerFile;\n\tpeer?: string;\n\tlimit?: number;\n\tgeneratedAt?: string;\n\townershipScope?: A2AOwnershipScope;\n}\n\nexport async function buildA2ACockpit(\n\toptions: A2ACockpitOptions = {},\n): Promise<A2ACockpitSummary> {\n\tif (!hasA2AOwnershipScope(options.ownershipScope)) {\n\t\treturn buildA2ACockpitUnscoped(options);\n\t}\n\tconst ledger = await loadA2ATaskLedger({ path: options.tasksPath });\n\tconst fleet = await inspectA2AFleet({\n\t\tregistryPath: options.registryPath,\n\t\ttasksPath: options.tasksPath,\n\t\ttimeoutMs: options.timeoutMs,\n\t\townershipScope: options.ownershipScope,\n\t\tincludePeerNames: scopedLedgerPeerNames(ledger, options.ownershipScope),\n\t});\n\treturn summarizeA2ACockpit({\n\t\tfleet,\n\t\tledger,\n\t\tpeer: options.peer,\n\t\tlimit: options.limit,\n\t\townershipScope: options.ownershipScope,\n\t});\n}\n\nasync function buildA2ACockpitUnscoped(\n\toptions: A2ACockpitOptions,\n): Promise<A2ACockpitSummary> {\n\tconst [fleet, ledger] = await Promise.all([\n\t\tinspectA2AFleet({\n\t\t\tregistryPath: options.registryPath,\n\t\t\ttasksPath: options.tasksPath,\n\t\t\ttimeoutMs: options.timeoutMs,\n\t\t}),\n\t\tloadA2ATaskLedger({ path: options.tasksPath }),\n\t]);\n\treturn summarizeA2ACockpit({\n\t\tfleet,\n\t\tledger,\n\t\tpeer: options.peer,\n\t\tlimit: options.limit,\n\t});\n}\n\nexport function summarizeA2ACockpit(\n\tinput: SummarizeA2ACockpitInput,\n): A2ACockpitSummary {\n\tconst peerFilter = cleanPeer(input.peer);\n\tconst limit = normalizeLimit(input.limit);\n\tconst hasOwnershipScope = hasA2AOwnershipScope(input.ownershipScope);\n\tconst scopedOwnedPeerNames = new Set(\n\t\thasOwnershipScope\n\t\t\t? input.fleet.peers\n\t\t\t\t\t.filter((peer) =>\n\t\t\t\t\t\tmatchesA2AOwnershipScope(peer, input.ownershipScope),\n\t\t\t\t\t)\n\t\t\t\t\t.map((peer) => peer.name)\n\t\t\t: [],\n\t);\n\tconst scopedLedger = filterLedgerForOwnership(\n\t\tinput.ledger,\n\t\tinput.ownershipScope,\n\t\tscopedOwnedPeerNames,\n\t);\n\tconst scopedTaskPeerNames = new Set(\n\t\tscopedLedger.tasks.map((task) => task.peer),\n\t);\n\tconst peers = input.fleet.peers\n\t\t.filter(\n\t\t\t(peer) =>\n\t\t\t\t!hasOwnershipScope ||\n\t\t\t\tscopedOwnedPeerNames.has(peer.name) ||\n\t\t\t\tscopedTaskPeerNames.has(peer.name),\n\t\t)\n\t\t.filter((peer) => !peerFilter || peer.name === peerFilter)\n\t\t.map((peer) => summarizePeer(peer, scopedLedger));\n\tconst registeredPeerNames = new Set(peers.map((peer) => peer.name));\n\tconst tasks = listA2ATaskEntries(scopedLedger, { peer: peerFilter })\n\t\t.map((task) => summarizeTask(task, registeredPeerNames))\n\t\t.sort(compareTasksForCockpit);\n\tconst limitedTasks = tasks.slice(0, limit);\n\tconst counts = summarizeCounts(peers, tasks);\n\treturn {\n\t\tgeneratedAt: input.generatedAt ?? input.fleet.generatedAt,\n\t\tregistryPath: input.fleet.registryPath,\n\t\ttasksPath: input.fleet.tasksPath,\n\t\t...(peerFilter ? { peer: peerFilter } : {}),\n\t\tcounts,\n\t\tpeers,\n\t\ttasks: limitedTasks,\n\t\tnextActions: summarizeNextActions(peers, tasks, limit),\n\t};\n}\n\nfunction filterLedgerForOwnership(\n\tledger: A2ATaskLedgerFile,\n\tscope: A2AOwnershipScope | undefined,\n\townedPeerNames: ReadonlySet<string> = new Set(),\n): A2ATaskLedgerFile {\n\tif (!hasA2AOwnershipScope(scope)) {\n\t\treturn ledger;\n\t}\n\treturn {\n\t\ttasks: ledger.tasks.filter((entry) =>\n\t\t\thasA2AOwnershipRecordMarkers(entry)\n\t\t\t\t? matchesA2AOwnershipScope(entry, scope)\n\t\t\t\t: ownedPeerNames.has(entry.peer),\n\t\t),\n\t};\n}\n\nfunction scopedLedgerPeerNames(\n\tledger: A2ATaskLedgerFile,\n\tscope: A2AOwnershipScope,\n): string[] {\n\treturn [\n\t\t...new Set(\n\t\t\tledger.tasks\n\t\t\t\t.filter(\n\t\t\t\t\t(entry) =>\n\t\t\t\t\t\thasA2AOwnershipRecordMarkers(entry) &&\n\t\t\t\t\t\tmatchesA2AOwnershipScope(entry, scope),\n\t\t\t\t)\n\t\t\t\t.map((entry) => entry.peer),\n\t\t),\n\t];\n}\n\nfunction summarizePeer(\n\tpeer: A2AFleetSummary[\"peers\"][number],\n\tledger: A2ATaskLedgerFile,\n): A2ACockpitPeerSummary {\n\tconst tasks = listA2ATaskEntries(ledger, { peer: peer.name }).map((task) =>\n\t\tsummarizeTask(task),\n\t);\n\tconst lastTask = tasks[0];\n\treturn {\n\t\tname: peer.name,\n\t\t...(peer.displayName ? { displayName: peer.displayName } : {}),\n\t\turl: peer.url,\n\t\tstatus: peer.status,\n\t\t...(peer.error ? { error: peer.error } : {}),\n\t\t...(peer.auth ? { auth: peer.auth } : {}),\n\t\t...(peer.model ? { model: peer.model } : {}),\n\t\t...(peer.cwd ? { cwd: peer.cwd } : {}),\n\t\ttaskCounts: {\n\t\t\ttasks: tasks.length,\n\t\t\trunningTasks: tasks.filter((task) => task.status === \"running\").length,\n\t\t\tactionRequiredTasks: tasks.filter((task) => task.status === \"waiting\")\n\t\t\t\t.length,\n\t\t\tfailedTasks: tasks.filter((task) => task.status === \"failed\").length,\n\t\t\tcompletedTasks: tasks.filter((task) => task.status === \"completed\")\n\t\t\t\t.length,\n\t\t},\n\t\t...(lastTask\n\t\t\t? {\n\t\t\t\t\tlastTask: {\n\t\t\t\t\t\tid: lastTask.taskId,\n\t\t\t\t\t\tstate: lastTask.state,\n\t\t\t\t\t\tstatus: lastTask.status,\n\t\t\t\t\t\tupdatedAt: lastTask.updatedAt,\n\t\t\t\t\t\ttext: lastTask.text,\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t: {}),\n\t};\n}\n\nfunction summarizeTask(\n\tentry: A2ATaskLedgerEntry,\n\tregisteredPeerNames?: ReadonlySet<string>,\n): A2ACockpitTaskSummary {\n\tconst status = classifyTaskState(entry.state);\n\tconst requiresInput = isActionRequiredA2AState(entry.state);\n\tconst terminal = isTerminalA2AState(entry.state);\n\tconst final = isFinalA2AState(entry.state);\n\tconst orphanedPeer =\n\t\tregisteredPeerNames !== undefined && !registeredPeerNames.has(entry.peer);\n\tconst nextCommand = orphanedPeer ? undefined : taskCommand(entry, status);\n\treturn {\n\t\tledgerId: entry.id,\n\t\tpeer: entry.peer,\n\t\t...(entry.peerDisplayName\n\t\t\t? { peerDisplayName: entry.peerDisplayName }\n\t\t\t: {}),\n\t\t...(orphanedPeer ? { orphanedPeer: true } : {}),\n\t\ttaskId: entry.taskId,\n\t\tstate: entry.state,\n\t\tstatus,\n\t\trequiresInput,\n\t\tterminal,\n\t\tfinal,\n\t\ttext: entry.text,\n\t\t...(entry.responseText ? { responseText: entry.responseText } : {}),\n\t\tupdatedAt: entry.updatedAt,\n\t\t...(entry.completedAt ? { completedAt: entry.completedAt } : {}),\n\t\t...(entry.workGraph ? { workGraph: entry.workGraph } : {}),\n\t\t...(nextCommand ? { nextCommand } : {}),\n\t};\n}\n\nfunction summarizeCounts(\n\tpeers: A2ACockpitPeerSummary[],\n\ttasks: A2ACockpitTaskSummary[],\n): A2ACockpitCounts {\n\treturn {\n\t\tpeers: peers.length,\n\t\tonlinePeers: peers.filter((peer) => peer.status === \"online\").length,\n\t\tunreachablePeers: peers.filter((peer) => peer.status === \"unreachable\")\n\t\t\t.length,\n\t\ttasks: tasks.length,\n\t\trunningTasks: tasks.filter((task) => task.status === \"running\").length,\n\t\tactionRequiredTasks: tasks.filter((task) => task.status === \"waiting\")\n\t\t\t.length,\n\t\tfailedTasks: tasks.filter((task) => task.status === \"failed\").length,\n\t\tcompletedTasks: tasks.filter((task) => task.status === \"completed\").length,\n\t};\n}\n\nfunction summarizeNextActions(\n\tpeers: A2ACockpitPeerSummary[],\n\ttasks: A2ACockpitTaskSummary[],\n\tlimit: number,\n): A2ACockpitNextAction[] {\n\tconst actions = tasks\n\t\t.map((task) => nextActionForTask(task))\n\t\t.filter((action): action is A2ACockpitNextAction => Boolean(action))\n\t\t.slice(0, limit);\n\tif (actions.length > 0) {\n\t\treturn actions;\n\t}\n\treturn peers\n\t\t.filter(\n\t\t\t(peer) => peer.status === \"online\" && peer.taskCounts.runningTasks === 0,\n\t\t)\n\t\t.slice(0, limit)\n\t\t.map((peer) => ({\n\t\t\tid: `delegate:${peer.name}`,\n\t\t\tlabel: `Delegate fresh work to ${peer.name}`,\n\t\t\tcommand: `maestro a2a delegate ${shellQuote(peer.name)} <objective> --wait --work-graph`,\n\t\t\tseverity: \"info\",\n\t\t\tpeer: peer.name,\n\t\t\treason:\n\t\t\t\t\"Peer is reachable and has no active local A2A task in the ledger.\",\n\t\t}));\n}\n\nfunction nextActionForTask(\n\ttask: A2ACockpitTaskSummary,\n): A2ACockpitNextAction | undefined {\n\tif (task.orphanedPeer) {\n\t\treturn undefined;\n\t}\n\tif (task.status === \"waiting\") {\n\t\treturn {\n\t\t\tid: `reply:${task.peer}:${task.taskId}`,\n\t\t\tlabel: `Reply to ${task.peer} task ${task.taskId}`,\n\t\t\tcommand: `maestro a2a reply ${shellQuote(task.peer)} ${shellQuote(task.taskId)} <response> --wait --work-graph`,\n\t\t\tseverity: \"critical\",\n\t\t\tpeer: task.peer,\n\t\t\ttaskId: task.taskId,\n\t\t\treason: \"Peer returned an input-required or auth-required A2A state.\",\n\t\t};\n\t}\n\tif (task.status === \"running\") {\n\t\treturn {\n\t\t\tid: `wait:${task.peer}:${task.taskId}`,\n\t\t\tlabel: `Wait for ${task.peer} task ${task.taskId}`,\n\t\t\tcommand:\n\t\t\t\ttask.nextCommand ??\n\t\t\t\t`maestro a2a wait ${shellQuote(task.peer)} ${shellQuote(task.taskId)} --work-graph`,\n\t\t\tseverity: \"info\",\n\t\t\tpeer: task.peer,\n\t\t\ttaskId: task.taskId,\n\t\t\treason: \"Task is still non-terminal in the local A2A ledger.\",\n\t\t};\n\t}\n\tif (task.status === \"failed\") {\n\t\treturn {\n\t\t\tid: `refresh:${task.peer}:${task.taskId}`,\n\t\t\tlabel: `Refresh failed ${task.peer} task ${task.taskId}`,\n\t\t\tcommand: `maestro a2a tasks ${shellQuote(task.peer)} --refresh --work-graph`,\n\t\t\tseverity: \"warning\",\n\t\t\tpeer: task.peer,\n\t\t\ttaskId: task.taskId,\n\t\t\treason: \"Task reached a failed, rejected, or canceled final state.\",\n\t\t};\n\t}\n\treturn undefined;\n}\n\nfunction taskCommand(\n\tentry: A2ATaskLedgerEntry,\n\tstatus: A2ACockpitTaskStatus,\n): string | undefined {\n\tif (status === \"waiting\") {\n\t\treturn `maestro a2a reply ${shellQuote(entry.peer)} ${shellQuote(entry.taskId)} <response> --wait --work-graph`;\n\t}\n\tif (status === \"running\") {\n\t\treturn `maestro a2a wait ${shellQuote(entry.peer)} ${shellQuote(entry.taskId)} --work-graph`;\n\t}\n\treturn undefined;\n}\n\nfunction classifyTaskState(state: string): A2ACockpitTaskStatus {\n\tconst normalized = normalizeState(state);\n\tif (!normalized) {\n\t\treturn \"unknown\";\n\t}\n\tif (isActionRequiredA2AState(normalized)) {\n\t\treturn \"waiting\";\n\t}\n\tif (normalized.includes(\"COMPLETED\")) {\n\t\treturn \"completed\";\n\t}\n\tif (\n\t\tnormalized.includes(\"FAILED\") ||\n\t\tnormalized.includes(\"REJECTED\") ||\n\t\tnormalized.includes(\"CANCELED\") ||\n\t\tnormalized.includes(\"CANCELLED\")\n\t) {\n\t\treturn \"failed\";\n\t}\n\tif (!isFinalA2AState(normalized)) {\n\t\treturn \"running\";\n\t}\n\treturn \"unknown\";\n}\n\nfunction compareTasksForCockpit(\n\tleft: A2ACockpitTaskSummary,\n\tright: A2ACockpitTaskSummary,\n): number {\n\tconst urgency = taskUrgency(right.status) - taskUrgency(left.status);\n\tif (urgency !== 0) {\n\t\treturn urgency;\n\t}\n\treturn right.updatedAt.localeCompare(left.updatedAt);\n}\n\nfunction taskUrgency(status: A2ACockpitTaskStatus): number {\n\tswitch (status) {\n\t\tcase \"waiting\":\n\t\t\treturn 4;\n\t\tcase \"failed\":\n\t\t\treturn 3;\n\t\tcase \"running\":\n\t\t\treturn 2;\n\t\tcase \"unknown\":\n\t\t\treturn 1;\n\t\tcase \"completed\":\n\t\t\treturn 0;\n\t}\n}\n\nfunction normalizeLimit(limit: number | undefined): number {\n\tif (limit === undefined) {\n\t\treturn 8;\n\t}\n\tif (!Number.isFinite(limit) || limit <= 0) {\n\t\treturn 8;\n\t}\n\treturn Math.min(Math.floor(limit), 50);\n}\n\nfunction cleanPeer(peer: string | undefined): string | undefined {\n\tconst trimmed = peer?.trim();\n\treturn trimmed ? trimmed : undefined;\n}\n\nfunction normalizeState(state: string): string {\n\treturn state.toUpperCase().replace(/[\\s-]+/gu, \"_\");\n}\n\nfunction shellQuote(value: string): string {\n\tif (/^[A-Za-z0-9_./:-]+$/u.test(value)) {\n\t\treturn value;\n\t}\n\treturn `'${value.replace(/'/gu, \"'\\\\''\")}'`;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"a2a-cockpit.js","sourceRoot":"","sources":["../../src/platform/a2a-cockpit.ts"],"names":[],"mappings":"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","sourcesContent":["import { type A2AFleetSummary, inspectA2AFleet } from \"./a2a-fleet.js\";\nimport {\n\ttype A2AOwnershipScope,\n\thasA2AOwnershipRecordMarkers,\n\thasA2AOwnershipScope,\n\tmatchesA2AOwnershipScope,\n} from \"./a2a-ownership.js\";\nimport {\n\ttype A2ATaskLedgerEntry,\n\ttype A2ATaskLedgerFile,\n\tisActionRequiredA2AState,\n\tisCompletedA2AState,\n\tisFailedA2AState,\n\tisFinalA2AState,\n\tisTerminalA2AState,\n\tlistA2ATaskEntries,\n\tloadA2ATaskLedger,\n\tnormalizeA2AState,\n} from \"./a2a-task-ledger.js\";\nimport type { A2AWorkGraphMetadata } from \"./a2a-work-graph.js\";\n\nexport type A2ACockpitTaskStatus =\n\t| \"waiting\"\n\t| \"running\"\n\t| \"completed\"\n\t| \"failed\"\n\t| \"unknown\";\n\nexport type A2ACockpitNextActionSeverity = \"info\" | \"warning\" | \"critical\";\n\nexport interface A2ACockpitOptions {\n\tregistryPath?: string;\n\ttasksPath?: string;\n\ttimeoutMs?: number;\n\tpeer?: string;\n\tlimit?: number;\n\townershipScope?: A2AOwnershipScope;\n}\n\nexport interface A2ACockpitSummary {\n\tgeneratedAt: string;\n\tregistryPath: string;\n\ttasksPath: string;\n\tpeer?: string;\n\tcounts: A2ACockpitCounts;\n\tpeers: A2ACockpitPeerSummary[];\n\ttasks: A2ACockpitTaskSummary[];\n\tnextActions: A2ACockpitNextAction[];\n}\n\nexport interface A2ACockpitCounts {\n\tpeers: number;\n\tonlinePeers: number;\n\tunreachablePeers: number;\n\ttasks: number;\n\trunningTasks: number;\n\tactionRequiredTasks: number;\n\tfailedTasks: number;\n\tcompletedTasks: number;\n}\n\nexport interface A2ACockpitPeerSummary {\n\tname: string;\n\tdisplayName?: string;\n\turl: string;\n\tstatus: \"online\" | \"unreachable\";\n\terror?: string;\n\tauth?: string;\n\tmodel?: string;\n\tcwd?: string;\n\ttaskCounts: Pick<\n\t\tA2ACockpitCounts,\n\t\t| \"tasks\"\n\t\t| \"runningTasks\"\n\t\t| \"actionRequiredTasks\"\n\t\t| \"failedTasks\"\n\t\t| \"completedTasks\"\n\t>;\n\tlastTask?: {\n\t\tid: string;\n\t\tstate: string;\n\t\tstatus: A2ACockpitTaskStatus;\n\t\tupdatedAt: string;\n\t\ttext: string;\n\t};\n}\n\nexport interface A2ACockpitTaskSummary {\n\tledgerId: string;\n\tpeer: string;\n\tpeerDisplayName?: string;\n\torphanedPeer?: boolean;\n\ttaskId: string;\n\tstate: string;\n\tstatus: A2ACockpitTaskStatus;\n\trequiresInput: boolean;\n\tterminal: boolean;\n\tfinal: boolean;\n\ttext: string;\n\tresponseText?: string;\n\tupdatedAt: string;\n\tcompletedAt?: string;\n\tworkGraph?: A2AWorkGraphMetadata;\n\tnextCommand?: string;\n}\n\nexport interface A2ACockpitNextAction {\n\tid: string;\n\tlabel: string;\n\tcommand: string;\n\tseverity: A2ACockpitNextActionSeverity;\n\tpeer: string;\n\ttaskId?: string;\n\treason: string;\n}\n\nexport interface SummarizeA2ACockpitInput {\n\tfleet: A2AFleetSummary;\n\tledger: A2ATaskLedgerFile;\n\tpeer?: string;\n\tlimit?: number;\n\tgeneratedAt?: string;\n\townershipScope?: A2AOwnershipScope;\n}\n\nexport async function buildA2ACockpit(\n\toptions: A2ACockpitOptions = {},\n): Promise<A2ACockpitSummary> {\n\tif (!hasA2AOwnershipScope(options.ownershipScope)) {\n\t\treturn buildA2ACockpitUnscoped(options);\n\t}\n\tconst ledger = await loadA2ATaskLedger({ path: options.tasksPath });\n\tconst fleet = await inspectA2AFleet({\n\t\tregistryPath: options.registryPath,\n\t\ttasksPath: options.tasksPath,\n\t\ttimeoutMs: options.timeoutMs,\n\t\townershipScope: options.ownershipScope,\n\t\tincludePeerNames: scopedLedgerPeerNames(ledger, options.ownershipScope),\n\t});\n\treturn summarizeA2ACockpit({\n\t\tfleet,\n\t\tledger,\n\t\tpeer: options.peer,\n\t\tlimit: options.limit,\n\t\townershipScope: options.ownershipScope,\n\t});\n}\n\nasync function buildA2ACockpitUnscoped(\n\toptions: A2ACockpitOptions,\n): Promise<A2ACockpitSummary> {\n\tconst [fleet, ledger] = await Promise.all([\n\t\tinspectA2AFleet({\n\t\t\tregistryPath: options.registryPath,\n\t\t\ttasksPath: options.tasksPath,\n\t\t\ttimeoutMs: options.timeoutMs,\n\t\t}),\n\t\tloadA2ATaskLedger({ path: options.tasksPath }),\n\t]);\n\treturn summarizeA2ACockpit({\n\t\tfleet,\n\t\tledger,\n\t\tpeer: options.peer,\n\t\tlimit: options.limit,\n\t});\n}\n\nexport function summarizeA2ACockpit(\n\tinput: SummarizeA2ACockpitInput,\n): A2ACockpitSummary {\n\tconst peerFilter = cleanPeer(input.peer);\n\tconst limit = normalizeLimit(input.limit);\n\tconst hasOwnershipScope = hasA2AOwnershipScope(input.ownershipScope);\n\tconst scopedOwnedPeerNames = new Set(\n\t\thasOwnershipScope\n\t\t\t? input.fleet.peers\n\t\t\t\t\t.filter((peer) =>\n\t\t\t\t\t\tmatchesA2AOwnershipScope(peer, input.ownershipScope),\n\t\t\t\t\t)\n\t\t\t\t\t.map((peer) => peer.name)\n\t\t\t: [],\n\t);\n\tconst scopedLedger = filterLedgerForOwnership(\n\t\tinput.ledger,\n\t\tinput.ownershipScope,\n\t\tscopedOwnedPeerNames,\n\t);\n\tconst scopedTaskPeerNames = new Set(\n\t\tscopedLedger.tasks.map((task) => task.peer),\n\t);\n\tconst peers = input.fleet.peers\n\t\t.filter(\n\t\t\t(peer) =>\n\t\t\t\t!hasOwnershipScope ||\n\t\t\t\tscopedOwnedPeerNames.has(peer.name) ||\n\t\t\t\tscopedTaskPeerNames.has(peer.name),\n\t\t)\n\t\t.filter((peer) => !peerFilter || peer.name === peerFilter)\n\t\t.map((peer) => summarizePeer(peer, scopedLedger));\n\tconst registeredPeerNames = new Set(peers.map((peer) => peer.name));\n\tconst tasks = listA2ATaskEntries(scopedLedger, { peer: peerFilter })\n\t\t.map((task) => summarizeTask(task, registeredPeerNames))\n\t\t.sort(compareTasksForCockpit);\n\tconst limitedTasks = tasks.slice(0, limit);\n\tconst counts = summarizeCounts(peers, tasks);\n\treturn {\n\t\tgeneratedAt: input.generatedAt ?? input.fleet.generatedAt,\n\t\tregistryPath: input.fleet.registryPath,\n\t\ttasksPath: input.fleet.tasksPath,\n\t\t...(peerFilter ? { peer: peerFilter } : {}),\n\t\tcounts,\n\t\tpeers,\n\t\ttasks: limitedTasks,\n\t\tnextActions: summarizeNextActions(peers, tasks, limit),\n\t};\n}\n\nfunction filterLedgerForOwnership(\n\tledger: A2ATaskLedgerFile,\n\tscope: A2AOwnershipScope | undefined,\n\townedPeerNames: ReadonlySet<string> = new Set(),\n): A2ATaskLedgerFile {\n\tif (!hasA2AOwnershipScope(scope)) {\n\t\treturn ledger;\n\t}\n\treturn {\n\t\ttasks: ledger.tasks.filter((entry) =>\n\t\t\thasA2AOwnershipRecordMarkers(entry)\n\t\t\t\t? matchesA2AOwnershipScope(entry, scope)\n\t\t\t\t: ownedPeerNames.has(entry.peer),\n\t\t),\n\t};\n}\n\nfunction scopedLedgerPeerNames(\n\tledger: A2ATaskLedgerFile,\n\tscope: A2AOwnershipScope,\n): string[] {\n\treturn [\n\t\t...new Set(\n\t\t\tledger.tasks\n\t\t\t\t.filter(\n\t\t\t\t\t(entry) =>\n\t\t\t\t\t\thasA2AOwnershipRecordMarkers(entry) &&\n\t\t\t\t\t\tmatchesA2AOwnershipScope(entry, scope),\n\t\t\t\t)\n\t\t\t\t.map((entry) => entry.peer),\n\t\t),\n\t];\n}\n\nfunction summarizePeer(\n\tpeer: A2AFleetSummary[\"peers\"][number],\n\tledger: A2ATaskLedgerFile,\n): A2ACockpitPeerSummary {\n\tconst tasks = listA2ATaskEntries(ledger, { peer: peer.name }).map((task) =>\n\t\tsummarizeTask(task),\n\t);\n\tconst lastTask = tasks[0];\n\treturn {\n\t\tname: peer.name,\n\t\t...(peer.displayName ? { displayName: peer.displayName } : {}),\n\t\turl: peer.url,\n\t\tstatus: peer.status,\n\t\t...(peer.error ? { error: peer.error } : {}),\n\t\t...(peer.auth ? { auth: peer.auth } : {}),\n\t\t...(peer.model ? { model: peer.model } : {}),\n\t\t...(peer.cwd ? { cwd: peer.cwd } : {}),\n\t\ttaskCounts: {\n\t\t\ttasks: tasks.length,\n\t\t\trunningTasks: tasks.filter((task) => task.status === \"running\").length,\n\t\t\tactionRequiredTasks: tasks.filter((task) => task.status === \"waiting\")\n\t\t\t\t.length,\n\t\t\tfailedTasks: tasks.filter((task) => task.status === \"failed\").length,\n\t\t\tcompletedTasks: tasks.filter((task) => task.status === \"completed\")\n\t\t\t\t.length,\n\t\t},\n\t\t...(lastTask\n\t\t\t? {\n\t\t\t\t\tlastTask: {\n\t\t\t\t\t\tid: lastTask.taskId,\n\t\t\t\t\t\tstate: lastTask.state,\n\t\t\t\t\t\tstatus: lastTask.status,\n\t\t\t\t\t\tupdatedAt: lastTask.updatedAt,\n\t\t\t\t\t\ttext: lastTask.text,\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t: {}),\n\t};\n}\n\nfunction summarizeTask(\n\tentry: A2ATaskLedgerEntry,\n\tregisteredPeerNames?: ReadonlySet<string>,\n): A2ACockpitTaskSummary {\n\tconst status = classifyTaskState(entry.state);\n\tconst requiresInput = isActionRequiredA2AState(entry.state);\n\tconst terminal = isTerminalA2AState(entry.state);\n\tconst final = isFinalA2AState(entry.state);\n\tconst orphanedPeer =\n\t\tregisteredPeerNames !== undefined && !registeredPeerNames.has(entry.peer);\n\tconst nextCommand = orphanedPeer ? undefined : taskCommand(entry, status);\n\treturn {\n\t\tledgerId: entry.id,\n\t\tpeer: entry.peer,\n\t\t...(entry.peerDisplayName\n\t\t\t? { peerDisplayName: entry.peerDisplayName }\n\t\t\t: {}),\n\t\t...(orphanedPeer ? { orphanedPeer: true } : {}),\n\t\ttaskId: entry.taskId,\n\t\tstate: entry.state,\n\t\tstatus,\n\t\trequiresInput,\n\t\tterminal,\n\t\tfinal,\n\t\ttext: entry.text,\n\t\t...(entry.responseText ? { responseText: entry.responseText } : {}),\n\t\tupdatedAt: entry.updatedAt,\n\t\t...(entry.completedAt ? { completedAt: entry.completedAt } : {}),\n\t\t...(entry.workGraph ? { workGraph: entry.workGraph } : {}),\n\t\t...(nextCommand ? { nextCommand } : {}),\n\t};\n}\n\nfunction summarizeCounts(\n\tpeers: A2ACockpitPeerSummary[],\n\ttasks: A2ACockpitTaskSummary[],\n): A2ACockpitCounts {\n\treturn {\n\t\tpeers: peers.length,\n\t\tonlinePeers: peers.filter((peer) => peer.status === \"online\").length,\n\t\tunreachablePeers: peers.filter((peer) => peer.status === \"unreachable\")\n\t\t\t.length,\n\t\ttasks: tasks.length,\n\t\trunningTasks: tasks.filter((task) => task.status === \"running\").length,\n\t\tactionRequiredTasks: tasks.filter((task) => task.status === \"waiting\")\n\t\t\t.length,\n\t\tfailedTasks: tasks.filter((task) => task.status === \"failed\").length,\n\t\tcompletedTasks: tasks.filter((task) => task.status === \"completed\").length,\n\t};\n}\n\nfunction summarizeNextActions(\n\tpeers: A2ACockpitPeerSummary[],\n\ttasks: A2ACockpitTaskSummary[],\n\tlimit: number,\n): A2ACockpitNextAction[] {\n\tconst actions = tasks\n\t\t.map((task) => nextActionForTask(task))\n\t\t.filter((action): action is A2ACockpitNextAction => Boolean(action))\n\t\t.slice(0, limit);\n\tif (actions.length > 0) {\n\t\treturn actions;\n\t}\n\treturn peers\n\t\t.filter(\n\t\t\t(peer) => peer.status === \"online\" && peer.taskCounts.runningTasks === 0,\n\t\t)\n\t\t.slice(0, limit)\n\t\t.map((peer) => ({\n\t\t\tid: `delegate:${peer.name}`,\n\t\t\tlabel: `Delegate fresh work to ${peer.name}`,\n\t\t\tcommand: `maestro a2a delegate ${shellQuote(peer.name)} <objective> --wait --work-graph`,\n\t\t\tseverity: \"info\",\n\t\t\tpeer: peer.name,\n\t\t\treason:\n\t\t\t\t\"Peer is reachable and has no active local A2A task in the ledger.\",\n\t\t}));\n}\n\nfunction nextActionForTask(\n\ttask: A2ACockpitTaskSummary,\n): A2ACockpitNextAction | undefined {\n\tif (task.orphanedPeer) {\n\t\treturn undefined;\n\t}\n\tif (task.status === \"waiting\") {\n\t\treturn {\n\t\t\tid: `reply:${task.peer}:${task.taskId}`,\n\t\t\tlabel: `Reply to ${task.peer} task ${task.taskId}`,\n\t\t\tcommand: `maestro a2a reply ${shellQuote(task.peer)} ${shellQuote(task.taskId)} <response> --wait --work-graph`,\n\t\t\tseverity: \"critical\",\n\t\t\tpeer: task.peer,\n\t\t\ttaskId: task.taskId,\n\t\t\treason: taskActionReason(\n\t\t\t\ttask,\n\t\t\t\t\"Peer returned an input-required or auth-required A2A state.\",\n\t\t\t),\n\t\t};\n\t}\n\tif (task.status === \"running\") {\n\t\treturn {\n\t\t\tid: `wait:${task.peer}:${task.taskId}`,\n\t\t\tlabel: `Wait for ${task.peer} task ${task.taskId}`,\n\t\t\tcommand:\n\t\t\t\ttask.nextCommand ??\n\t\t\t\t`maestro a2a wait ${shellQuote(task.peer)} ${shellQuote(task.taskId)} --work-graph`,\n\t\t\tseverity: \"info\",\n\t\t\tpeer: task.peer,\n\t\t\ttaskId: task.taskId,\n\t\t\treason: taskActionReason(\n\t\t\t\ttask,\n\t\t\t\t\"Task is still non-terminal in the local A2A ledger.\",\n\t\t\t),\n\t\t};\n\t}\n\tif (task.status === \"failed\") {\n\t\treturn {\n\t\t\tid: `refresh:${task.peer}:${task.taskId}`,\n\t\t\tlabel: `Refresh failed ${task.peer} task ${task.taskId}`,\n\t\t\tcommand: `maestro a2a tasks ${shellQuote(task.peer)} --refresh --work-graph`,\n\t\t\tseverity: \"warning\",\n\t\t\tpeer: task.peer,\n\t\t\ttaskId: task.taskId,\n\t\t\treason: taskActionReason(\n\t\t\t\ttask,\n\t\t\t\t\"Task reached a failed, rejected, or canceled final state.\",\n\t\t\t),\n\t\t};\n\t}\n\treturn undefined;\n}\n\nfunction taskActionReason(\n\ttask: A2ACockpitTaskSummary,\n\tbaseReason: string,\n): string {\n\tconst workGraphReason = workGraphPressureReason(task.workGraph);\n\treturn workGraphReason ? `${baseReason} ${workGraphReason}` : baseReason;\n}\n\nfunction workGraphPressureReason(\n\tworkGraph: A2ACockpitTaskSummary[\"workGraph\"],\n): string | undefined {\n\tif (!workGraph) {\n\t\treturn undefined;\n\t}\n\tconst pressure = [\n\t\tcountReason(\"blocked work item\", workGraph.blockedItemCount),\n\t\tcountReason(\"waiting work item\", workGraph.waitingItemCount),\n\t\tcountReason(\"pending tool call\", workGraph.pendingToolCallCount),\n\t\tcountReason(\"open wait\", workGraph.waitItemCount),\n\t].filter((part): part is string => Boolean(part));\n\tif (pressure.length === 0) {\n\t\treturn undefined;\n\t}\n\treturn `Work graph shows ${joinReasonParts(pressure)}.`;\n}\n\nfunction countReason(\n\tlabel: string,\n\tcount: number | undefined,\n): string | undefined {\n\tif (!count || count <= 0) {\n\t\treturn undefined;\n\t}\n\treturn `${count} ${label}${count === 1 ? \"\" : \"s\"}`;\n}\n\nfunction joinReasonParts(parts: string[]): string {\n\tif (parts.length <= 1) {\n\t\treturn parts[0] ?? \"\";\n\t}\n\tif (parts.length === 2) {\n\t\treturn `${parts[0]} and ${parts[1]}`;\n\t}\n\treturn `${parts.slice(0, -1).join(\", \")}, and ${parts.at(-1)}`;\n}\n\nfunction taskCommand(\n\tentry: A2ATaskLedgerEntry,\n\tstatus: A2ACockpitTaskStatus,\n): string | undefined {\n\tif (status === \"waiting\") {\n\t\treturn `maestro a2a reply ${shellQuote(entry.peer)} ${shellQuote(entry.taskId)} <response> --wait --work-graph`;\n\t}\n\tif (status === \"running\") {\n\t\treturn `maestro a2a wait ${shellQuote(entry.peer)} ${shellQuote(entry.taskId)} --work-graph`;\n\t}\n\treturn undefined;\n}\n\nexport function classifyTaskState(state: string): A2ACockpitTaskStatus {\n\tconst normalized = normalizeState(state);\n\tif (!normalized) {\n\t\treturn \"unknown\";\n\t}\n\tif (isActionRequiredA2AState(normalized)) {\n\t\treturn \"waiting\";\n\t}\n\tif (isCompletedA2AState(normalized)) {\n\t\treturn \"completed\";\n\t}\n\tif (isFailedA2AState(normalized)) {\n\t\treturn \"failed\";\n\t}\n\tif (!isFinalA2AState(normalized)) {\n\t\treturn \"running\";\n\t}\n\treturn \"unknown\";\n}\n\nfunction compareTasksForCockpit(\n\tleft: A2ACockpitTaskSummary,\n\tright: A2ACockpitTaskSummary,\n): number {\n\tconst urgency = taskUrgency(right.status) - taskUrgency(left.status);\n\tif (urgency !== 0) {\n\t\treturn urgency;\n\t}\n\treturn right.updatedAt.localeCompare(left.updatedAt);\n}\n\nfunction taskUrgency(status: A2ACockpitTaskStatus): number {\n\tswitch (status) {\n\t\tcase \"waiting\":\n\t\t\treturn 4;\n\t\tcase \"failed\":\n\t\t\treturn 3;\n\t\tcase \"running\":\n\t\t\treturn 2;\n\t\tcase \"unknown\":\n\t\t\treturn 1;\n\t\tcase \"completed\":\n\t\t\treturn 0;\n\t}\n}\n\nfunction normalizeLimit(limit: number | undefined): number {\n\tif (limit === undefined) {\n\t\treturn 8;\n\t}\n\tif (!Number.isFinite(limit) || limit <= 0) {\n\t\treturn 8;\n\t}\n\treturn Math.min(Math.floor(limit), 50);\n}\n\nfunction cleanPeer(peer: string | undefined): string | undefined {\n\tconst trimmed = peer?.trim();\n\treturn trimmed ? trimmed : undefined;\n}\n\nfunction normalizeState(state: string): string {\n\treturn normalizeA2AState(state);\n}\nfunction shellQuote(value: string): string {\n\tif (/^[A-Za-z0-9_./:-]+$/u.test(value)) {\n\t\treturn value;\n\t}\n\treturn `'${value.replace(/'/gu, \"'\\\\''\")}'`;\n}\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { SwarmState } from "../agent/swarm/types.js";
|
|
2
2
|
import type { A2ATaskLedgerFile } from "./a2a-task-ledger.js";
|
|
3
3
|
export declare const A2A_COMPLETION_AUDIT_SCHEMA = "evalops.maestro.a2a-completion-audit.v2";
|
|
4
|
-
export type A2ACompletionSignalKey = "status" | "artifact" | "task" | "workGraph" | "push" | "correlation";
|
|
4
|
+
export type A2ACompletionSignalKey = "status" | "artifact" | "task" | "workGraph" | "transcript" | "push" | "correlation";
|
|
5
5
|
export interface A2ACompletionAuditLane {
|
|
6
6
|
laneId: string;
|
|
7
7
|
parentTaskId?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"a2a-completion-audit.d.ts","sourceRoot":"","sources":["../../src/platform/a2a-completion-audit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAiB,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"a2a-completion-audit.d.ts","sourceRoot":"","sources":["../../src/platform/a2a-completion-audit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAiB,MAAM,yBAAyB,CAAC;AAMzE,OAAO,KAAK,EAEX,iBAAiB,EACjB,MAAM,sBAAsB,CAAC;AAE9B,eAAO,MAAM,2BAA2B,4CACE,CAAC;AAE3C,MAAM,MAAM,sBAAsB,GAC/B,QAAQ,GACR,UAAU,GACV,MAAM,GACN,WAAW,GACX,YAAY,GACZ,MAAM,GACN,aAAa,CAAC;AAEjB,MAAM,WAAW,sBAAsB;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC,sBAAsB,EAAE,OAAO,CAAC,CAAC;IACjD,cAAc,EAAE,sBAAsB,EAAE,CAAC;CACzC;AAED,MAAM,WAAW,kBAAkB;IAClC,MAAM,EAAE,OAAO,2BAA2B,CAAC;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE;QACP,WAAW,EAAE,MAAM,CAAC;QACpB,aAAa,EAAE,MAAM,CAAC;QACtB,eAAe,EAAE,MAAM,CAAC;QACxB,gBAAgB,EAAE,MAAM,CAAC;QACzB,qBAAqB,EAAE,MAAM,CAAC;KAC9B,CAAC;IACF,KAAK,EAAE,sBAAsB,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,wBAAwB;IACxC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,YAAY,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,4BAA4B;IAC5C,KAAK,EAAE,UAAU,CAAC;IAClB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,WAAW,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC;IAC5D,cAAc,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACrC,WAAW,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB;AAsBD,wBAAgB,uBAAuB,CACtC,KAAK,EAAE,4BAA4B,GACjC,kBAAkB,CA2BpB;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAErE;AAED,wBAAgB,mBAAmB,CAClC,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,GAClB,MAAM,CAER"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { a2aTaskEvidenceGaps, isCompletedA2AState, isFinalA2AState, } from "./a2a-task-ledger.js";
|
|
2
2
|
export const A2A_COMPLETION_AUDIT_SCHEMA = "evalops.maestro.a2a-completion-audit.v2";
|
|
3
3
|
const SIGNAL_ORDER = [
|
|
4
4
|
"status",
|
|
5
5
|
"artifact",
|
|
6
6
|
"task",
|
|
7
7
|
"workGraph",
|
|
8
|
+
"transcript",
|
|
8
9
|
"push",
|
|
9
10
|
"correlation",
|
|
10
11
|
];
|
|
@@ -93,11 +94,13 @@ function buildLaneAudit(input, lane, remoteTaskIdCounts) {
|
|
|
93
94
|
const parentTaskId = lane.parentTaskId ??
|
|
94
95
|
parentTaskIdForLane(lane.completedTasks, ledgerEntry, a2a);
|
|
95
96
|
const status = ledgerEntry?.state;
|
|
97
|
+
const evidenceGaps = ledgerEntry ? a2aTaskEvidenceGaps(ledgerEntry) : [];
|
|
96
98
|
const signals = {
|
|
97
99
|
status: Boolean(status),
|
|
98
|
-
artifact:
|
|
100
|
+
artifact: Boolean(ledgerEntry) && !evidenceGaps.includes("response-artifact"),
|
|
99
101
|
task: Boolean(ledgerEntry),
|
|
100
|
-
workGraph: Boolean(ledgerEntry
|
|
102
|
+
workGraph: Boolean(ledgerEntry) && !evidenceGaps.includes("work-graph"),
|
|
103
|
+
transcript: Boolean(ledgerEntry) && !evidenceGaps.includes("transcript"),
|
|
101
104
|
push: hasPushSignal(input, a2a, remoteTaskIdCounts),
|
|
102
105
|
correlation: hasCorrelationSignal(input.swarm.id, parentTaskId, a2a, ledgerEntry),
|
|
103
106
|
};
|
|
@@ -110,7 +113,7 @@ function buildLaneAudit(input, lane, remoteTaskIdCounts) {
|
|
|
110
113
|
contextId: a2a.contextId ?? ledgerEntry?.contextId,
|
|
111
114
|
peer: a2a.peer,
|
|
112
115
|
status,
|
|
113
|
-
terminal: Boolean(status &&
|
|
116
|
+
terminal: Boolean(status && isFinalA2AState(status)),
|
|
114
117
|
signals,
|
|
115
118
|
missingSignals,
|
|
116
119
|
};
|
|
@@ -153,19 +156,12 @@ function parentTaskIdForLane(completedTasks, ledgerEntry, a2a) {
|
|
|
153
156
|
}
|
|
154
157
|
return lastValue(completedTasks) ?? ledgerParentTaskId ?? a2aParentTaskId;
|
|
155
158
|
}
|
|
156
|
-
function isCompletedA2AState(state) {
|
|
157
|
-
return /COMPLETED/u.test(state.toUpperCase().replace(/[\s-]+/gu, "_"));
|
|
158
|
-
}
|
|
159
159
|
function lastValue(values) {
|
|
160
160
|
return values.length > 0 ? values[values.length - 1] : undefined;
|
|
161
161
|
}
|
|
162
162
|
function fallbackRemoteLaneId(peer, taskId) {
|
|
163
163
|
return `a2a:${encodeURIComponent(peer)}:remote:${encodeURIComponent(taskId)}`;
|
|
164
164
|
}
|
|
165
|
-
function hasArtifactSignal(entry) {
|
|
166
|
-
return Boolean(entry?.responseText?.trim() ||
|
|
167
|
-
entry?.transcript.some((item) => item.role === "agent" && item.text.trim().length > 0));
|
|
168
|
-
}
|
|
169
165
|
function hasCorrelationSignal(swarmId, parentTaskId, a2a, entry) {
|
|
170
166
|
if (!entry) {
|
|
171
167
|
return false;
|