@evalops/maestro 0.10.22 → 0.10.24
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/README.md +4 -4
- package/dist/agent/agent.d.ts +2 -2
- package/dist/agent/agent.d.ts.map +1 -1
- package/dist/agent/agent.js +1 -1
- package/dist/agent/agent.js.map +1 -1
- package/dist/agent/keys.d.ts +2 -5
- package/dist/agent/keys.d.ts.map +1 -1
- package/dist/agent/keys.js +4 -5
- package/dist/agent/keys.js.map +1 -1
- package/dist/agent/modes.d.ts +2 -2
- package/dist/agent/modes.d.ts.map +1 -1
- package/dist/agent/modes.js +6 -7
- package/dist/agent/modes.js.map +1 -1
- package/dist/agent/providers/anthropic.d.ts.map +1 -1
- package/dist/agent/providers/anthropic.js +4 -4
- package/dist/agent/providers/anthropic.js.map +1 -1
- package/dist/agent/providers/google.js +1 -1
- package/dist/agent/swarm/executor.d.ts +2 -0
- package/dist/agent/swarm/executor.d.ts.map +1 -1
- package/dist/agent/swarm/executor.js +208 -35
- package/dist/agent/swarm/executor.js.map +1 -1
- package/dist/agent/swarm/types.d.ts +2 -0
- package/dist/agent/swarm/types.d.ts.map +1 -1
- package/dist/agent/swarm/types.js.map +1 -1
- package/dist/agent/tool-capability-types.d.ts +36 -0
- package/dist/agent/tool-capability-types.d.ts.map +1 -0
- package/dist/agent/tool-capability-types.js +2 -0
- package/dist/agent/tool-capability-types.js.map +1 -0
- package/dist/agent/transport/tool-execution-bridge.d.ts +13 -0
- package/dist/agent/transport/tool-execution-bridge.d.ts.map +1 -1
- package/dist/agent/transport/tool-execution-bridge.js +28 -15
- package/dist/agent/transport/tool-execution-bridge.js.map +1 -1
- package/dist/agent/transport/transport-utils.d.ts.map +1 -1
- package/dist/agent/transport/transport-utils.js +2 -3
- package/dist/agent/transport/transport-utils.js.map +1 -1
- package/dist/agent/transport.js +1 -1
- package/dist/agent/transport.js.map +1 -1
- package/dist/agent/type-guards.d.ts +1 -1
- package/dist/agent/type-guards.js +1 -1
- package/dist/agent/type-guards.js.map +1 -1
- package/dist/agent/types.d.ts +5 -3
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/agent/types.js +2 -2
- package/dist/agent/types.js.map +1 -1
- package/dist/app-server/daemon-lifecycle-api.d.ts +31 -0
- package/dist/app-server/daemon-lifecycle-api.d.ts.map +1 -0
- package/dist/app-server/daemon-lifecycle-api.js +259 -0
- package/dist/app-server/daemon-lifecycle-api.js.map +1 -0
- package/dist/app-server/external-agent-import-api.d.ts +30 -0
- package/dist/app-server/external-agent-import-api.d.ts.map +1 -0
- package/dist/app-server/external-agent-import-api.js +553 -0
- package/dist/app-server/external-agent-import-api.js.map +1 -0
- package/dist/app-server/host-control-api.d.ts +30 -0
- package/dist/app-server/host-control-api.d.ts.map +1 -0
- package/dist/app-server/host-control-api.js +343 -0
- package/dist/app-server/host-control-api.js.map +1 -0
- package/dist/app-server/in-process-client.d.ts +2 -2
- package/dist/app-server/in-process-client.d.ts.map +1 -1
- package/dist/app-server/in-process-client.js.map +1 -1
- package/dist/app-server/network-governance-api.d.ts +26 -0
- package/dist/app-server/network-governance-api.d.ts.map +1 -0
- package/dist/app-server/network-governance-api.js +476 -0
- package/dist/app-server/network-governance-api.js.map +1 -0
- package/dist/app-server/plugin-bundle-api.d.ts +17 -0
- package/dist/app-server/plugin-bundle-api.d.ts.map +1 -0
- package/dist/app-server/plugin-bundle-api.js +219 -0
- package/dist/app-server/plugin-bundle-api.js.map +1 -0
- package/dist/app-server/policy-control-api.d.ts +14 -0
- package/dist/app-server/policy-control-api.d.ts.map +1 -0
- package/dist/app-server/policy-control-api.js +200 -0
- package/dist/app-server/policy-control-api.js.map +1 -0
- package/dist/app-server/protocol-modes-api.d.ts +22 -0
- package/dist/app-server/protocol-modes-api.d.ts.map +1 -0
- package/dist/app-server/protocol-modes-api.js +124 -0
- package/dist/app-server/protocol-modes-api.js.map +1 -0
- package/dist/app-server/sandbox-proof-api.d.ts +21 -0
- package/dist/app-server/sandbox-proof-api.d.ts.map +1 -0
- package/dist/app-server/sandbox-proof-api.js +127 -0
- package/dist/app-server/sandbox-proof-api.js.map +1 -0
- package/dist/app-server/session-api.d.ts +93 -3
- package/dist/app-server/session-api.d.ts.map +1 -1
- package/dist/app-server/session-api.js +706 -18
- package/dist/app-server/session-api.js.map +1 -1
- package/dist/audit/logger.d.ts +1 -1
- package/dist/bootstrap/auth-setup.d.ts.map +1 -1
- package/dist/bootstrap/auth-setup.js +17 -2
- package/dist/bootstrap/auth-setup.js.map +1 -1
- package/dist/bootstrap/model-resolution-setup.d.ts.map +1 -1
- package/dist/bootstrap/model-resolution-setup.js +19 -4
- package/dist/bootstrap/model-resolution-setup.js.map +1 -1
- package/dist/cli/args.d.ts +2 -2
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +2 -2
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/commands/a2a.d.ts.map +1 -1
- package/dist/cli/commands/a2a.js +226 -14
- package/dist/cli/commands/a2a.js.map +1 -1
- package/dist/cli/commands/anthropic.d.ts +1 -1
- package/dist/cli/commands/anthropic.d.ts.map +1 -1
- package/dist/cli/commands/anthropic.js +3 -68
- package/dist/cli/commands/anthropic.js.map +1 -1
- package/dist/cli/commands/modes.js +1 -1
- package/dist/cli/commands/modes.js.map +1 -1
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/help.js +5 -7
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/rpc-mode.d.ts +1 -1
- package/dist/cli/rpc-mode.js +1 -1
- package/dist/cli/rpc-mode.js.map +1 -1
- package/dist/cli/session.js +1 -1
- package/dist/cli/session.js.map +1 -1
- package/dist/cli-tui/commands/command-catalog.d.ts.map +1 -1
- package/dist/cli-tui/commands/command-catalog.js +7 -12
- package/dist/cli-tui/commands/command-catalog.js.map +1 -1
- package/dist/cli-tui/commands/subcommands/auth-commands.d.ts +1 -1
- package/dist/cli-tui/commands/subcommands/auth-commands.d.ts.map +1 -1
- package/dist/cli-tui/commands/subcommands/auth-commands.js +4 -12
- package/dist/cli-tui/commands/subcommands/auth-commands.js.map +1 -1
- package/dist/cli-tui/custom-editor.d.ts +1 -1
- package/dist/cli-tui/custom-editor.js +2 -2
- package/dist/cli-tui/custom-editor.js.map +1 -1
- package/dist/cli-tui/oauth/oauth-flow-controller.d.ts.map +1 -1
- package/dist/cli-tui/oauth/oauth-flow-controller.js +19 -23
- package/dist/cli-tui/oauth/oauth-flow-controller.js.map +1 -1
- package/dist/cli-tui/selectors/model-selector.d.ts.map +1 -1
- package/dist/cli-tui/selectors/model-selector.js +0 -1
- package/dist/cli-tui/selectors/model-selector.js.map +1 -1
- package/dist/cli-tui/selectors/oauth-selector-view.d.ts +2 -2
- package/dist/cli-tui/selectors/oauth-selector-view.d.ts.map +1 -1
- package/dist/cli-tui/selectors/oauth-selector-view.js.map +1 -1
- package/dist/cli-tui/selectors/oauth-selector.d.ts +2 -2
- package/dist/cli-tui/selectors/oauth-selector.d.ts.map +1 -1
- package/dist/cli-tui/selectors/oauth-selector.js +3 -4
- package/dist/cli-tui/selectors/oauth-selector.js.map +1 -1
- package/dist/cli-tui/tui-renderer/mcp-events-setup.js +1 -1
- package/dist/cli-tui/tui-renderer/mcp-events-setup.js.map +1 -1
- package/dist/cli-tui/tui-renderer.js +2 -2
- package/dist/cli-tui/tui-renderer.js.map +1 -1
- package/dist/cli-tui/utils/footer-utils.d.ts +1 -1
- package/dist/cli-tui/utils/footer-utils.js +1 -1
- package/dist/cli-tui/utils/footer-utils.js.map +1 -1
- package/dist/cli.js +15171 -14298
- package/dist/commands/prompts.d.ts +1 -1
- package/dist/commands/prompts.js +1 -1
- package/dist/commands/prompts.js.map +1 -1
- package/dist/config/constants.d.ts +2 -2
- package/dist/config/constants.d.ts.map +1 -1
- package/dist/config/constants.js +2 -2
- package/dist/config/constants.js.map +1 -1
- package/dist/config/index.d.ts +1 -1
- package/dist/config/index.js +1 -1
- package/dist/config/index.js.map +1 -1
- package/dist/config/toml-config.js +3 -3
- package/dist/config/toml-config.js.map +1 -1
- package/dist/db/client.d.ts +2 -2
- package/dist/db/client.js +2 -2
- package/dist/db/client.js.map +1 -1
- package/dist/db/migrate.d.ts +1 -1
- package/dist/db/migrate.js +1 -1
- package/dist/db/migrate.js.map +1 -1
- package/dist/db/schema.d.ts +2 -2
- package/dist/db/schema.js +1 -1
- package/dist/db/schema.js.map +1 -1
- package/dist/errors/index.d.ts +2 -2
- package/dist/errors/index.js +2 -2
- package/dist/errors/index.js.map +1 -1
- package/dist/main.d.ts +4 -5
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +17 -14
- package/dist/main.js.map +1 -1
- package/dist/mcp/config.d.ts +15 -2
- package/dist/mcp/config.d.ts.map +1 -1
- package/dist/mcp/config.js +50 -26
- package/dist/mcp/config.js.map +1 -1
- package/dist/mcp/fathom-cua.d.ts.map +1 -1
- package/dist/mcp/fathom-cua.js +10 -0
- package/dist/mcp/fathom-cua.js.map +1 -1
- package/dist/mcp/manager.d.ts.map +1 -1
- package/dist/mcp/manager.js +32 -1
- package/dist/mcp/manager.js.map +1 -1
- package/dist/mcp/tool-bridge.d.ts.map +1 -1
- package/dist/mcp/tool-bridge.js +12 -3
- package/dist/mcp/tool-bridge.js.map +1 -1
- package/dist/mcp/tool-capabilities.d.ts +5 -0
- package/dist/mcp/tool-capabilities.d.ts.map +1 -0
- package/dist/mcp/tool-capabilities.js +271 -0
- package/dist/mcp/tool-capabilities.js.map +1 -0
- package/dist/mcp/types.d.ts +6 -1
- package/dist/mcp/types.d.ts.map +1 -1
- package/dist/mcp/types.js.map +1 -1
- package/dist/models/config-loader.d.ts +1 -1
- package/dist/models/factory-integration.d.ts +1 -1
- package/dist/models/factory-integration.js +1 -1
- package/dist/models/factory-integration.js.map +1 -1
- package/dist/node_modules/@evalops/contracts/dist/artifacts.d.ts +58 -0
- package/dist/node_modules/@evalops/contracts/dist/artifacts.d.ts.map +1 -0
- package/dist/node_modules/@evalops/contracts/dist/artifacts.js +191 -0
- package/dist/node_modules/@evalops/contracts/dist/artifacts.js.map +1 -0
- package/dist/node_modules/@evalops/contracts/dist/headless-protocol-schemas.generated.d.ts +10 -10
- package/dist/node_modules/@evalops/contracts/dist/index.d.ts +4 -3
- package/dist/node_modules/@evalops/contracts/dist/index.d.ts.map +1 -1
- package/dist/node_modules/@evalops/contracts/dist/index.js +3 -2
- package/dist/node_modules/@evalops/contracts/dist/index.js.map +1 -1
- package/dist/node_modules/@evalops/contracts/dist/maestro-app-server.d.ts +1182 -14
- package/dist/node_modules/@evalops/contracts/dist/maestro-app-server.d.ts.map +1 -1
- package/dist/node_modules/@evalops/contracts/dist/maestro-app-server.js +450 -1
- package/dist/node_modules/@evalops/contracts/dist/maestro-app-server.js.map +1 -1
- package/dist/node_modules/@evalops/contracts/dist/runtime-app-server.d.ts +1 -1
- package/dist/node_modules/@evalops/contracts/dist/runtime-server-request.d.ts +3 -3
- package/dist/node_modules/@evalops/contracts/package.json +1 -1
- package/dist/node_modules/@evalops/tui/package.json +1 -1
- package/dist/oauth/connectors.d.ts +2 -2
- package/dist/oauth/connectors.d.ts.map +1 -1
- package/dist/oauth/connectors.js +3 -5
- package/dist/oauth/connectors.js.map +1 -1
- package/dist/oauth/github-copilot.d.ts +1 -1
- package/dist/oauth/github-copilot.js +1 -1
- package/dist/oauth/github-copilot.js.map +1 -1
- package/dist/oauth/index.d.ts +10 -8
- package/dist/oauth/index.d.ts.map +1 -1
- package/dist/oauth/index.js +54 -31
- package/dist/oauth/index.js.map +1 -1
- package/dist/oauth/openai.d.ts +1 -1
- package/dist/oauth/openai.js +2 -2
- package/dist/oauth/openai.js.map +1 -1
- package/dist/platform/a2a-completion-audit.d.ts +41 -0
- package/dist/platform/a2a-completion-audit.d.ts.map +1 -0
- package/dist/platform/a2a-completion-audit.js +177 -0
- package/dist/platform/a2a-completion-audit.js.map +1 -0
- package/dist/platform/a2a-task-ledger.d.ts.map +1 -1
- package/dist/platform/a2a-task-ledger.js +17 -0
- package/dist/platform/a2a-task-ledger.js.map +1 -1
- package/dist/platform/a2a-telemetry-inspect.d.ts +58 -0
- package/dist/platform/a2a-telemetry-inspect.d.ts.map +1 -0
- package/dist/platform/a2a-telemetry-inspect.js +224 -0
- package/dist/platform/a2a-telemetry-inspect.js.map +1 -0
- package/dist/platform/agent-registry-client.d.ts +8 -0
- package/dist/platform/agent-registry-client.d.ts.map +1 -1
- package/dist/platform/agent-registry-client.js +9 -1
- package/dist/platform/agent-registry-client.js.map +1 -1
- package/dist/providers/api-keys.d.ts +2 -2
- package/dist/providers/api-keys.js +2 -2
- package/dist/providers/api-keys.js.map +1 -1
- package/dist/providers/auth.d.ts +3 -6
- package/dist/providers/auth.d.ts.map +1 -1
- package/dist/providers/auth.js +1 -40
- package/dist/providers/auth.js.map +1 -1
- package/dist/rpc/index.d.ts +2 -2
- package/dist/rpc/index.js +2 -2
- package/dist/rpc/index.js.map +1 -1
- package/dist/rpc/rpc-types.d.ts +1 -1
- package/dist/rpc/rpc-types.js +1 -1
- package/dist/rpc/rpc-types.js.map +1 -1
- package/dist/safety/nested-agent-guard.js +1 -1
- package/dist/safety/nested-agent-guard.js.map +1 -1
- package/dist/safety/policy.d.ts +2 -2
- package/dist/safety/policy.js +2 -2
- package/dist/safety/policy.js.map +1 -1
- package/dist/safety/validators/network-policy-validator.d.ts +8 -0
- package/dist/safety/validators/network-policy-validator.d.ts.map +1 -1
- package/dist/safety/validators/network-policy-validator.js +29 -4
- package/dist/safety/validators/network-policy-validator.js.map +1 -1
- package/dist/sandbox/local-sandbox.d.ts +1 -1
- package/dist/sandbox/local-sandbox.js +1 -1
- package/dist/sandbox/local-sandbox.js.map +1 -1
- package/dist/server/app-context.d.ts +2 -0
- package/dist/server/app-context.d.ts.map +1 -1
- package/dist/server/app-context.js.map +1 -1
- package/dist/server/handlers/attachments.d.ts.map +1 -1
- package/dist/server/handlers/attachments.js +1 -0
- package/dist/server/handlers/attachments.js.map +1 -1
- package/dist/server/handlers/models.d.ts.map +1 -1
- package/dist/server/handlers/models.js +3 -1
- package/dist/server/handlers/models.js.map +1 -1
- package/dist/server/handlers/session-artifacts.d.ts.map +1 -1
- package/dist/server/handlers/session-artifacts.js +13 -74
- package/dist/server/handlers/session-artifacts.js.map +1 -1
- package/dist/server/handlers/session-attachments.d.ts.map +1 -1
- package/dist/server/handlers/session-attachments.js +2 -0
- package/dist/server/handlers/session-attachments.js.map +1 -1
- package/dist/server/handlers/sessions.js +1 -1
- package/dist/server/handlers/sessions.js.map +1 -1
- package/dist/server/handlers/status.d.ts +2 -0
- package/dist/server/handlers/status.d.ts.map +1 -1
- package/dist/server/handlers/status.js +3 -2
- package/dist/server/handlers/status.js.map +1 -1
- package/dist/server/headless-runtime-service.d.ts.map +1 -1
- package/dist/server/headless-runtime-service.js +32 -3
- package/dist/server/headless-runtime-service.js.map +1 -1
- package/dist/server/hosted-session-manager.d.ts +2 -0
- package/dist/server/hosted-session-manager.d.ts.map +1 -1
- package/dist/server/hosted-session-manager.js +9 -0
- package/dist/server/hosted-session-manager.js.map +1 -1
- package/dist/server/model-selection.d.ts.map +1 -1
- package/dist/server/model-selection.js +9 -1
- package/dist/server/model-selection.js.map +1 -1
- package/dist/server/rate-limiter.d.ts +1 -1
- package/dist/server/rate-limiter.js +1 -1
- package/dist/server/rate-limiter.js.map +1 -1
- package/dist/server/router.d.ts +2 -2
- package/dist/server/router.js.map +1 -1
- package/dist/server/session-serialization.d.ts +9 -9
- package/dist/server/session-serialization.js +15 -15
- package/dist/server/session-serialization.js.map +1 -1
- package/dist/session/manager.d.ts +5 -0
- package/dist/session/manager.d.ts.map +1 -1
- package/dist/session/manager.js +56 -8
- package/dist/session/manager.js.map +1 -1
- package/dist/session/session-catalog.d.ts +2 -0
- package/dist/session/session-catalog.d.ts.map +1 -1
- package/dist/session/session-catalog.js +6 -0
- package/dist/session/session-catalog.js.map +1 -1
- package/dist/session/session-context.d.ts +2 -0
- package/dist/session/session-context.d.ts.map +1 -1
- package/dist/session/session-context.js +15 -0
- package/dist/session/session-context.js.map +1 -1
- package/dist/session/types.d.ts +7 -0
- package/dist/session/types.d.ts.map +1 -1
- package/dist/session/types.js.map +1 -1
- package/dist/session/wire-format.generated.d.ts +1 -0
- package/dist/session/wire-format.generated.d.ts.map +1 -1
- package/dist/session/wire-format.generated.js +1 -0
- package/dist/session/wire-format.generated.js.map +1 -1
- package/dist/shared-memory/contract.d.ts +4 -4
- package/dist/shared-memory/contract.js +2 -2
- package/dist/shared-memory/contract.js.map +1 -1
- package/dist/telemetry/index.d.ts +2 -2
- package/dist/telemetry/index.d.ts.map +1 -1
- package/dist/telemetry/index.js +2 -2
- package/dist/telemetry/index.js.map +1 -1
- package/dist/telemetry/maestro-event-bus.d.ts +57 -0
- package/dist/telemetry/maestro-event-bus.d.ts.map +1 -1
- package/dist/telemetry/maestro-event-bus.js +59 -1
- package/dist/telemetry/maestro-event-bus.js.map +1 -1
- package/dist/telemetry/maestro-event-catalog.d.ts +17 -1
- package/dist/telemetry/maestro-event-catalog.d.ts.map +1 -1
- package/dist/telemetry/maestro-event-catalog.js +24 -0
- package/dist/telemetry/maestro-event-catalog.js.map +1 -1
- package/dist/telemetry/mcp-beacon.d.ts +2 -0
- package/dist/telemetry/mcp-beacon.d.ts.map +1 -1
- package/dist/telemetry/mcp-beacon.js +15 -0
- package/dist/telemetry/mcp-beacon.js.map +1 -1
- package/dist/telemetry/metrics.d.ts +62 -0
- package/dist/telemetry/metrics.d.ts.map +1 -1
- package/dist/telemetry/metrics.js +84 -0
- package/dist/telemetry/metrics.js.map +1 -1
- package/dist/telemetry.d.ts +44 -0
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js +84 -2
- package/dist/telemetry.js.map +1 -1
- package/dist/theme/theme-loader.js +2 -2
- package/dist/theme/theme-loader.js.map +1 -1
- package/dist/theme/theme-schema.json +2 -2
- package/dist/theme/theme.d.ts +1 -1
- package/dist/theme/theme.js.map +1 -1
- package/dist/tools/background/task-types.d.ts +1 -1
- package/dist/tools/extract-document.d.ts +1 -0
- package/dist/tools/extract-document.d.ts.map +1 -1
- package/dist/tools/extract-document.js +2 -1
- package/dist/tools/extract-document.js.map +1 -1
- package/dist/tools/index.d.ts +55 -55
- package/dist/tools/index.js +1 -1
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/tool-dsl.d.ts +1 -1
- package/dist/tools/tool-dsl.js +1 -1
- package/dist/tools/tool-dsl.js.map +1 -1
- package/dist/utils/document-extractor.d.ts +1 -0
- package/dist/utils/document-extractor.d.ts.map +1 -1
- package/dist/utils/document-extractor.js +320 -40
- package/dist/utils/document-extractor.js.map +1 -1
- package/dist/utils/logger.d.ts +1 -1
- package/dist/utils/logger.js +1 -1
- package/dist/utils/logger.js.map +1 -1
- package/dist/version.json +2 -2
- package/dist/web-server.d.ts +1 -1
- package/dist/web-server.d.ts.map +1 -1
- package/dist/web-server.js +12 -8
- package/dist/web-server.js.map +1 -1
- package/package.json +4 -2
- package/dist/oauth/anthropic.d.ts +0 -17
- package/dist/oauth/anthropic.d.ts.map +0 -1
- package/dist/oauth/anthropic.js +0 -81
- package/dist/oauth/anthropic.js.map +0 -1
- package/dist/providers/anthropic-auth.d.ts +0 -75
- package/dist/providers/anthropic-auth.d.ts.map +0 -1
- package/dist/providers/anthropic-auth.js +0 -221
- package/dist/providers/anthropic-auth.js.map +0 -1
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* the Oracle tool pattern.
|
|
7
7
|
*/
|
|
8
8
|
import { spawn } from "node:child_process";
|
|
9
|
-
import { randomUUID } from "node:crypto";
|
|
9
|
+
import { createHash, randomUUID } from "node:crypto";
|
|
10
10
|
import { unlinkSync, writeFileSync } from "node:fs";
|
|
11
11
|
import { tmpdir } from "node:os";
|
|
12
12
|
import { join } from "node:path";
|
|
@@ -15,11 +15,12 @@ import { codexSubagentTypeA2ASkillID } from "../../codex/subagent-dispatch-table
|
|
|
15
15
|
import { buildEvalOpsDelegationEnvironment, issueEvalOpsDelegationToken, } from "../../oauth/index.js";
|
|
16
16
|
import { rankA2ACapabilityPeers } from "../../platform/a2a-capability-market.js";
|
|
17
17
|
import { buildA2AUserMessage, cancelA2ATask, getA2ATask, normalizeA2ABaseUrl, sendA2AMessage, } from "../../platform/a2a-client.js";
|
|
18
|
+
import { a2aDelegationLaneId } from "../../platform/a2a-completion-audit.js";
|
|
18
19
|
import { resolveA2APeer, } from "../../platform/a2a-peer-registry.js";
|
|
19
20
|
import { extractA2ATaskText, isTerminalA2AState, recordA2ATaskStart, updateA2ATaskInLedger, } from "../../platform/a2a-task-ledger.js";
|
|
20
21
|
import { PlatformAgentStatusValue, listA2APeerCandidatesWithPlatform, resolveAgentRegistryServiceConfig, } from "../../platform/agent-registry-client.js";
|
|
21
22
|
import { getEnvValue, trimString } from "../../platform/client.js";
|
|
22
|
-
import { recordSubagentDispatch } from "../../telemetry.js";
|
|
23
|
+
import { recordA2ADelegationTelemetry as recordA2ADelegationTelemetryEvent, recordSubagentDispatch, } from "../../telemetry.js";
|
|
23
24
|
import { createLogger } from "../../utils/logger.js";
|
|
24
25
|
import { parseMode, resolveSubagentDispatch, } from "../modes.js";
|
|
25
26
|
import { publishSwarmRuntimeEvent } from "./runtime-events.js";
|
|
@@ -214,6 +215,47 @@ function resolveA2APushNotificationConfig(configured) {
|
|
|
214
215
|
function a2aStateCompleted(state) {
|
|
215
216
|
return /COMPLETED/u.test((state ?? "").toUpperCase().replace(/[\s-]+/gu, "_"));
|
|
216
217
|
}
|
|
218
|
+
function hashA2AEndpointUrlForTelemetry(url) {
|
|
219
|
+
const trimmed = url?.trim();
|
|
220
|
+
if (!trimmed) {
|
|
221
|
+
return undefined;
|
|
222
|
+
}
|
|
223
|
+
const canonical = canonicalizeA2AEndpointUrlForTelemetry(trimmed);
|
|
224
|
+
return `sha256:${createHash("sha256").update(canonical).digest("hex")}`;
|
|
225
|
+
}
|
|
226
|
+
function platformA2APeerRouteName(candidate, endpointHash = hashA2AEndpointUrlForTelemetry(candidate.endpointUrl)) {
|
|
227
|
+
const configuredName = trimString(candidate.agent.name) ?? trimString(candidate.agent.id);
|
|
228
|
+
if (configuredName) {
|
|
229
|
+
return configuredName;
|
|
230
|
+
}
|
|
231
|
+
return endpointHash
|
|
232
|
+
? `endpoint:${endpointHash}`
|
|
233
|
+
: "platform-agent-registry-peer";
|
|
234
|
+
}
|
|
235
|
+
function canonicalizeA2AEndpointUrlForTelemetry(url) {
|
|
236
|
+
try {
|
|
237
|
+
const parsed = new URL(url);
|
|
238
|
+
parsed.username = "";
|
|
239
|
+
parsed.password = "";
|
|
240
|
+
parsed.search = "";
|
|
241
|
+
parsed.hash = "";
|
|
242
|
+
parsed.pathname = parsed.pathname.replace(/\/+$/u, "") || "/";
|
|
243
|
+
return normalizeA2ABaseUrl(parsed.toString().replace(/\/$/u, ""));
|
|
244
|
+
}
|
|
245
|
+
catch {
|
|
246
|
+
return normalizeA2ABaseUrl(url.replace(/[?#].*$/u, "").replace(/\/+$/u, ""));
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
function a2aTerminalPhase(state) {
|
|
250
|
+
const normalized = (state ?? "").toUpperCase().replace(/[\s-]+/gu, "_");
|
|
251
|
+
if (normalized.includes("COMPLETED")) {
|
|
252
|
+
return "task_completed";
|
|
253
|
+
}
|
|
254
|
+
if (normalized.includes("CANCEL")) {
|
|
255
|
+
return "task_cancelled";
|
|
256
|
+
}
|
|
257
|
+
return "task_failed";
|
|
258
|
+
}
|
|
217
259
|
function buildDispatchEnv(dispatch, reasoningEffortOverride, runtimeSelection) {
|
|
218
260
|
if (!dispatch) {
|
|
219
261
|
return {};
|
|
@@ -238,6 +280,7 @@ export class SwarmExecutor {
|
|
|
238
280
|
constructor(config) {
|
|
239
281
|
this.processes = new Map();
|
|
240
282
|
this.remoteA2ATasks = new Map();
|
|
283
|
+
this.remoteA2ACancelTasks = new Map();
|
|
241
284
|
this.a2aRouteCursor = 0;
|
|
242
285
|
this.eventHandlers = new Set();
|
|
243
286
|
// Validate config
|
|
@@ -340,22 +383,32 @@ export class SwarmExecutor {
|
|
|
340
383
|
logger.info("Swarm cancelled", { swarmId: this.state.id });
|
|
341
384
|
}
|
|
342
385
|
async cancelRemoteA2ATask(teammateId, remoteTask) {
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
}
|
|
347
|
-
catch (error) {
|
|
348
|
-
logger.warn("Failed to cancel remote A2A swarm task", {
|
|
349
|
-
error: error instanceof Error ? error.message : String(error),
|
|
350
|
-
swarmId: this.state.id,
|
|
351
|
-
teammateId,
|
|
352
|
-
remoteTaskId: remoteTask.taskId,
|
|
353
|
-
peer: remoteTask.route.name,
|
|
354
|
-
});
|
|
355
|
-
}
|
|
356
|
-
finally {
|
|
357
|
-
this.remoteA2ATasks.delete(teammateId);
|
|
386
|
+
const existingCancel = this.remoteA2ACancelTasks.get(teammateId);
|
|
387
|
+
if (existingCancel) {
|
|
388
|
+
return existingCancel;
|
|
358
389
|
}
|
|
390
|
+
const cancelTask = (async () => {
|
|
391
|
+
try {
|
|
392
|
+
const cancelledTask = await cancelA2ATask(remoteTask.route.config, remoteTask.taskId);
|
|
393
|
+
await this.updateA2ASwarmTaskLedger(remoteTask.route, cancelledTask);
|
|
394
|
+
return cancelledTask;
|
|
395
|
+
}
|
|
396
|
+
catch (error) {
|
|
397
|
+
logger.warn("Failed to cancel remote A2A swarm task", {
|
|
398
|
+
error: error instanceof Error ? error.message : String(error),
|
|
399
|
+
swarmId: this.state.id,
|
|
400
|
+
teammateId,
|
|
401
|
+
remoteTaskId: remoteTask.taskId,
|
|
402
|
+
peer: remoteTask.route.name,
|
|
403
|
+
});
|
|
404
|
+
return undefined;
|
|
405
|
+
}
|
|
406
|
+
finally {
|
|
407
|
+
this.remoteA2ATasks.delete(teammateId);
|
|
408
|
+
}
|
|
409
|
+
})();
|
|
410
|
+
this.remoteA2ACancelTasks.set(teammateId, cancelTask);
|
|
411
|
+
return cancelTask;
|
|
359
412
|
}
|
|
360
413
|
/**
|
|
361
414
|
* Execute the swarm - runs all tasks with available teammates.
|
|
@@ -537,7 +590,7 @@ export class SwarmExecutor {
|
|
|
537
590
|
}
|
|
538
591
|
const mode = this.resolveParentMode();
|
|
539
592
|
const parentProvider = this.resolveParentModelProvider();
|
|
540
|
-
const dispatch = resolveSubagentDispatch(mode, subagentType, parentProvider ?? "
|
|
593
|
+
const dispatch = resolveSubagentDispatch(mode, subagentType, parentProvider ?? "openai-codex");
|
|
541
594
|
if (!parentProvider && dispatch.modelTier && !options.hasModelOverride) {
|
|
542
595
|
this.recordTaskDispatch(task, dispatch, Math.max(0, Date.now() - startedAt), false, {
|
|
543
596
|
parentMode: mode,
|
|
@@ -639,13 +692,16 @@ export class SwarmExecutor {
|
|
|
639
692
|
timeoutMs: options.timeoutMs,
|
|
640
693
|
maxAttempts: options.maxAttempts,
|
|
641
694
|
});
|
|
695
|
+
const skillId = this.resolveA2ASkillId(task, options, peer);
|
|
642
696
|
return {
|
|
643
697
|
name: peer.name,
|
|
644
698
|
displayName: peer.entry.displayName,
|
|
645
699
|
config: peer.config,
|
|
646
|
-
skillId
|
|
700
|
+
skillId,
|
|
701
|
+
taskClass: this.resolveA2ATaskClass(task, options, skillId),
|
|
647
702
|
role: options.role ?? task.subagentType,
|
|
648
703
|
tasksPath: options.tasksPath,
|
|
704
|
+
peerEndpointHash: hashA2AEndpointUrlForTelemetry(peer.config.baseUrl),
|
|
649
705
|
source: "registry",
|
|
650
706
|
};
|
|
651
707
|
}
|
|
@@ -697,13 +753,20 @@ export class SwarmExecutor {
|
|
|
697
753
|
skillId: ranked.selectedSkill?.id ?? skillId,
|
|
698
754
|
});
|
|
699
755
|
const config = await this.a2aConfigForPlatformCandidate(candidate, options);
|
|
756
|
+
const selectedSkillId = ranked.selectedSkill?.id ?? skillId;
|
|
757
|
+
const endpointHash = hashA2AEndpointUrlForTelemetry(candidate.endpointUrl);
|
|
758
|
+
const routeName = platformA2APeerRouteName(candidate, endpointHash);
|
|
700
759
|
return {
|
|
701
|
-
name:
|
|
760
|
+
name: routeName,
|
|
702
761
|
displayName: candidate.agent.name,
|
|
703
762
|
config,
|
|
704
|
-
skillId:
|
|
763
|
+
skillId: selectedSkillId,
|
|
764
|
+
taskClass: this.resolveA2ATaskClass(task, options, selectedSkillId),
|
|
705
765
|
role: options.role ?? task.subagentType,
|
|
706
766
|
tasksPath: options.tasksPath,
|
|
767
|
+
peerAgentId: candidate.agent.id,
|
|
768
|
+
peerEndpointHash: endpointHash,
|
|
769
|
+
peerEndpointKind: candidate.endpointKind,
|
|
707
770
|
source: "platform-agent-registry",
|
|
708
771
|
};
|
|
709
772
|
}
|
|
@@ -1008,10 +1071,20 @@ export class SwarmExecutor {
|
|
|
1008
1071
|
});
|
|
1009
1072
|
}
|
|
1010
1073
|
async spawnA2ATeammate(teammate, task, prompt, tmpFile, options) {
|
|
1074
|
+
let route;
|
|
1075
|
+
let messageId;
|
|
1076
|
+
let contextId;
|
|
1077
|
+
let a2aTaskId;
|
|
1078
|
+
const startedAt = Date.now();
|
|
1011
1079
|
try {
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
|
|
1080
|
+
route = await this.resolveA2ATeammateRoute(teammate, task, options);
|
|
1081
|
+
messageId = `maestro-swarm-message-${randomUUID()}`;
|
|
1082
|
+
contextId = `maestro-swarm:${this.state.id}:${task.id}`;
|
|
1083
|
+
this.recordA2ADelegationTelemetry("peer_selected", route, teammate, task, {
|
|
1084
|
+
contextId,
|
|
1085
|
+
messageId,
|
|
1086
|
+
});
|
|
1087
|
+
const dispatchStartedAt = Date.now();
|
|
1015
1088
|
const sent = await sendA2AMessage(route.config, {
|
|
1016
1089
|
message: buildA2AUserMessage({
|
|
1017
1090
|
messageId,
|
|
@@ -1038,16 +1111,27 @@ export class SwarmExecutor {
|
|
|
1038
1111
|
source: route.source,
|
|
1039
1112
|
},
|
|
1040
1113
|
});
|
|
1114
|
+
a2aTaskId = sent.task.id;
|
|
1115
|
+
contextId = sent.task.contextId ?? contextId;
|
|
1116
|
+
const dispatchLatencyMs = Math.max(0, Date.now() - dispatchStartedAt);
|
|
1041
1117
|
teammate.a2a = {
|
|
1042
1118
|
peer: route.name,
|
|
1043
1119
|
peerDisplayName: route.displayName,
|
|
1044
1120
|
source: route.source,
|
|
1121
|
+
parentTaskId: task.id,
|
|
1045
1122
|
taskId: sent.task.id,
|
|
1046
|
-
contextId
|
|
1123
|
+
contextId,
|
|
1047
1124
|
messageId,
|
|
1048
1125
|
skillId: route.skillId,
|
|
1049
1126
|
role: route.role,
|
|
1050
1127
|
};
|
|
1128
|
+
this.recordA2ADelegationTelemetry("task_dispatched", route, teammate, task, {
|
|
1129
|
+
a2aTaskId: sent.task.id,
|
|
1130
|
+
contextId,
|
|
1131
|
+
messageId,
|
|
1132
|
+
status: sent.task.status.state,
|
|
1133
|
+
latencyMs: dispatchLatencyMs,
|
|
1134
|
+
});
|
|
1051
1135
|
this.remoteA2ATasks.set(teammate.id, {
|
|
1052
1136
|
route,
|
|
1053
1137
|
taskId: sent.task.id,
|
|
@@ -1058,28 +1142,77 @@ export class SwarmExecutor {
|
|
|
1058
1142
|
});
|
|
1059
1143
|
if (this.state.status === "cancelled" ||
|
|
1060
1144
|
this.abortController.signal.aborted) {
|
|
1061
|
-
await this.cancelRemoteA2ATask(teammate.id, {
|
|
1145
|
+
const cancelledTask = await this.cancelRemoteA2ATask(teammate.id, {
|
|
1062
1146
|
route,
|
|
1063
1147
|
taskId: sent.task.id,
|
|
1064
1148
|
});
|
|
1149
|
+
if (!cancelledTask) {
|
|
1150
|
+
return;
|
|
1151
|
+
}
|
|
1152
|
+
this.recordA2ADelegationTelemetry(a2aTerminalPhase(cancelledTask.status.state), route, teammate, task, {
|
|
1153
|
+
a2aTaskId: cancelledTask.id,
|
|
1154
|
+
contextId: cancelledTask.contextId ?? sent.task.contextId ?? contextId,
|
|
1155
|
+
messageId,
|
|
1156
|
+
status: cancelledTask.status.state,
|
|
1157
|
+
terminal: true,
|
|
1158
|
+
success: a2aStateCompleted(cancelledTask.status.state),
|
|
1159
|
+
durationMs: Math.max(0, Date.now() - startedAt),
|
|
1160
|
+
});
|
|
1065
1161
|
return;
|
|
1066
1162
|
}
|
|
1067
1163
|
const remoteTask = await this.waitForA2ASwarmTask(route.config, sent.task, options);
|
|
1068
1164
|
await this.updateA2ASwarmTaskLedger(route, remoteTask);
|
|
1165
|
+
this.recordA2ADelegationTelemetry(a2aTerminalPhase(remoteTask.status.state), route, teammate, task, {
|
|
1166
|
+
a2aTaskId: remoteTask.id,
|
|
1167
|
+
contextId: remoteTask.contextId ?? contextId,
|
|
1168
|
+
messageId,
|
|
1169
|
+
status: remoteTask.status.state,
|
|
1170
|
+
terminal: true,
|
|
1171
|
+
success: a2aStateCompleted(remoteTask.status.state),
|
|
1172
|
+
durationMs: Math.max(0, Date.now() - startedAt),
|
|
1173
|
+
});
|
|
1069
1174
|
this.completeA2ATeammate(teammate, task, remoteTask, route);
|
|
1070
1175
|
}
|
|
1071
1176
|
catch (error) {
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
|
|
1177
|
+
const wasCancelled = this.state.status === "cancelled" ||
|
|
1178
|
+
this.abortController.signal.aborted ||
|
|
1179
|
+
teammate.status === "cancelled";
|
|
1180
|
+
const remoteTask = this.remoteA2ATasks.get(teammate.id);
|
|
1181
|
+
const pendingCancelTask = this.remoteA2ACancelTasks.get(teammate.id);
|
|
1182
|
+
const cancelledTask = wasCancelled
|
|
1183
|
+
? await (pendingCancelTask ??
|
|
1184
|
+
(remoteTask
|
|
1185
|
+
? this.cancelRemoteA2ATask(teammate.id, remoteTask)
|
|
1186
|
+
: Promise.resolve(undefined)))
|
|
1187
|
+
: undefined;
|
|
1188
|
+
if (!wasCancelled && remoteTask) {
|
|
1189
|
+
await this.cancelRemoteA2ATask(teammate.id, remoteTask);
|
|
1190
|
+
}
|
|
1191
|
+
if (route) {
|
|
1192
|
+
if (!wasCancelled || cancelledTask) {
|
|
1193
|
+
this.recordA2ADelegationTelemetry(wasCancelled
|
|
1194
|
+
? a2aTerminalPhase(cancelledTask?.status.state)
|
|
1195
|
+
: "task_failed", route, teammate, task, {
|
|
1196
|
+
a2aTaskId: cancelledTask?.id ?? a2aTaskId,
|
|
1197
|
+
contextId: cancelledTask?.contextId ?? contextId,
|
|
1198
|
+
messageId,
|
|
1199
|
+
status: cancelledTask?.status.state ?? "TASK_STATE_FAILED",
|
|
1200
|
+
terminal: true,
|
|
1201
|
+
success: a2aStateCompleted(cancelledTask?.status.state),
|
|
1202
|
+
durationMs: Math.max(0, Date.now() - startedAt),
|
|
1203
|
+
metadata: {
|
|
1204
|
+
error: error instanceof Error ? error.message : String(error),
|
|
1205
|
+
},
|
|
1206
|
+
});
|
|
1077
1207
|
}
|
|
1078
1208
|
}
|
|
1079
|
-
this.failA2ATeammate(teammate, task, error
|
|
1209
|
+
this.failA2ATeammate(teammate, task, error, {
|
|
1210
|
+
preserveA2A: Boolean(a2aTaskId),
|
|
1211
|
+
});
|
|
1080
1212
|
}
|
|
1081
1213
|
finally {
|
|
1082
1214
|
this.remoteA2ATasks.delete(teammate.id);
|
|
1215
|
+
this.remoteA2ACancelTasks.delete(teammate.id);
|
|
1083
1216
|
try {
|
|
1084
1217
|
unlinkSync(tmpFile);
|
|
1085
1218
|
}
|
|
@@ -1088,6 +1221,40 @@ export class SwarmExecutor {
|
|
|
1088
1221
|
}
|
|
1089
1222
|
}
|
|
1090
1223
|
}
|
|
1224
|
+
recordA2ADelegationTelemetry(phase, route, _teammate, task, options = {}) {
|
|
1225
|
+
const laneId = a2aDelegationLaneId(route.name, task.id);
|
|
1226
|
+
recordA2ADelegationTelemetryEvent({
|
|
1227
|
+
phase,
|
|
1228
|
+
swarmId: this.state.id,
|
|
1229
|
+
laneId,
|
|
1230
|
+
parentTaskId: task.id,
|
|
1231
|
+
a2aTaskId: options.a2aTaskId,
|
|
1232
|
+
a2aMessageId: options.messageId,
|
|
1233
|
+
contextId: options.contextId,
|
|
1234
|
+
peerAgentId: route.peerAgentId,
|
|
1235
|
+
peerName: route.name,
|
|
1236
|
+
peerEndpointHash: route.peerEndpointHash,
|
|
1237
|
+
peerEndpointUrl: undefined,
|
|
1238
|
+
peerEndpointKind: route.peerEndpointKind,
|
|
1239
|
+
skillId: route.skillId,
|
|
1240
|
+
taskClass: route.taskClass,
|
|
1241
|
+
source: route.source,
|
|
1242
|
+
status: options.status,
|
|
1243
|
+
terminal: options.terminal,
|
|
1244
|
+
success: options.success,
|
|
1245
|
+
latencyMs: options.latencyMs,
|
|
1246
|
+
durationMs: options.durationMs,
|
|
1247
|
+
metadata: options.metadata,
|
|
1248
|
+
correlation: {
|
|
1249
|
+
attributes: {
|
|
1250
|
+
swarm_id: this.state.id,
|
|
1251
|
+
lane_id: laneId,
|
|
1252
|
+
parent_task_id: task.id,
|
|
1253
|
+
peer: route.name,
|
|
1254
|
+
},
|
|
1255
|
+
},
|
|
1256
|
+
});
|
|
1257
|
+
}
|
|
1091
1258
|
buildA2ASwarmMessageMetadata(teammate, task, route) {
|
|
1092
1259
|
const currentDelegationId = `${this.state.id}:${task.id}`;
|
|
1093
1260
|
const contextId = `maestro-swarm:${this.state.id}:${task.id}`;
|
|
@@ -1113,7 +1280,7 @@ export class SwarmExecutor {
|
|
|
1113
1280
|
const peerControl = {
|
|
1114
1281
|
schema: "evalops.maestro.a2a-peer-control.v1",
|
|
1115
1282
|
parentSwarmId: this.state.id,
|
|
1116
|
-
laneId:
|
|
1283
|
+
laneId: a2aDelegationLaneId(route.name, task.id),
|
|
1117
1284
|
taskId: task.id,
|
|
1118
1285
|
contextId,
|
|
1119
1286
|
controlModes: ["followup", "steer", "interrupt", "cancel"],
|
|
@@ -1217,7 +1384,7 @@ export class SwarmExecutor {
|
|
|
1217
1384
|
teammate.error = undefined;
|
|
1218
1385
|
}
|
|
1219
1386
|
}
|
|
1220
|
-
failA2ATeammate(teammate, task, error) {
|
|
1387
|
+
failA2ATeammate(teammate, task, error, options = {}) {
|
|
1221
1388
|
this.state.activeTasks.delete(task.id);
|
|
1222
1389
|
teammate.completedAt = Date.now();
|
|
1223
1390
|
teammate.currentTask = undefined;
|
|
@@ -1230,7 +1397,9 @@ export class SwarmExecutor {
|
|
|
1230
1397
|
});
|
|
1231
1398
|
return;
|
|
1232
1399
|
}
|
|
1233
|
-
if (teammate.a2a &&
|
|
1400
|
+
if (teammate.a2a &&
|
|
1401
|
+
!options.preserveA2A &&
|
|
1402
|
+
!this.remoteA2ATasks.has(teammate.id)) {
|
|
1234
1403
|
teammate.a2a = undefined;
|
|
1235
1404
|
}
|
|
1236
1405
|
teammate.status = "failed";
|
|
@@ -1338,6 +1507,10 @@ function platformA2ACandidateMatchesPeer(candidate, peer) {
|
|
|
1338
1507
|
candidate.endpointUrl,
|
|
1339
1508
|
candidate.agentCardUrl,
|
|
1340
1509
|
];
|
|
1510
|
+
const endpointHash = hashA2AEndpointUrlForTelemetry(candidate.endpointUrl);
|
|
1511
|
+
if (endpointHash) {
|
|
1512
|
+
values.push(endpointHash, `endpoint:${endpointHash}`);
|
|
1513
|
+
}
|
|
1341
1514
|
return values.some((value) => {
|
|
1342
1515
|
const candidateSelector = normalizePeerSelector(value);
|
|
1343
1516
|
if (candidateSelector && candidateSelector === selector) {
|