@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-peer-registry.js","sourceRoot":"","sources":["../../src/platform/a2a-peer-registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAyB,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAC7E,OAAO,EAGN,mCAAmC,GACnC,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEtD,MAAM,kBAAkB,GAAG,OAAO,CAAC;AACnC,MAAM,oBAAoB,GAAG,CAAC,CAAC;AA0D/B,MAAM,UAAU,sBAAsB,CAAC,IAAa;IACnD,MAAM,UAAU,GACf,UAAU,CAAC,IAAI,CAAC;QAChB,WAAW,CAAC,CAAC,wBAAwB,EAAE,sBAAsB,CAAC,CAAC,CAAC;IACjE,IAAI,UAAU,EAAE,CAAC;QAChB,OAAO,UAAU,CAAC,UAAU,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACxC,UAAkC,EAAE;IAEpC,MAAM,IAAI,GAAG,sBAAsB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACJ,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACpC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,IAAI,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE,CAAC;YAClC,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;QACtB,CAAC;QACD,MAAM,KAAK,CAAC;IACb,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAY,CAAC;IAC1C,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,wBAAwB,IAAI,wBAAwB,CAAC,CAAC;IACvE,CAAC;IACD,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IACzD,MAAM,QAAQ,GAAwB;QACrC,KAAK,EAAE,MAAM,CAAC,WAAW,CACxB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;YAC5C,IAAI;YACJ,sBAAsB,CAAC,KAAK,EAAE,SAAS,IAAI,EAAE,CAAC;SAC9C,CAAC,CACF;KACD,CAAC;IACF,IAAI,OAAO,MAAM,CAAC,WAAW,KAAK,QAAQ,IAAI,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC;QACzE,QAAQ,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;IAClD,CAAC;IACD,IAAI,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC;QAClE,QAAQ,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;IACvC,CAAC;IACD,IAAI,OAAO,MAAM,CAAC,WAAW,KAAK,QAAQ,IAAI,MAAM,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC;QACtE,QAAQ,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;IAC3C,CAAC;IACD,OAAO,QAAQ,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACxC,QAA6B,EAC7B,UAAkC,EAAE;IAEpC,MAAM,IAAI,GAAG,sBAAsB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7D,MAAM,SAAS,CAAC,GAAG,IAAI,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;QACxE,IAAI,EAAE,KAAK;KACX,CAAC,CAAC;IACH,MAAM,MAAM,CAAC,GAAG,IAAI,MAAM,EAAE,IAAI,CAAC,CAAC;IAClC,OAAO,IAAI,CAAC;AACb,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,+BAA+B,CACpD,OAA8B,EAC9B,UAAgC,EAAE;IAMlC,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,OAAO,CAAC,CAAC;IACpD,MAAM,UAAU,GAAG,mCAAmC,CAAC,OAAO,CAAC,CAAC;IAChE,MAAM,IAAI,GAAG,iBAAiB,CAAC,OAAO,CAAC,IAAI,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;IAClE,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACtD,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,WAAW,GAAG,iBAAiB,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAC1D,MAAM,EACL,QAAQ,EAAE,gBAAgB,EAC1B,SAAS,EAAE,iBAAiB,EAC5B,cAAc,EAAE,uBAAuB,EACvC,GAAG,cAAc,EACjB,GAAG,QAAQ,IAAI,EAAE,CAAC;IACnB,MAAM,eAAe,GAAG,OAAO,CAC9B,QAAQ;QACP,CAAC,iBAAiB,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,WAAW;YAC/C,oBAAoB,CAAC,QAAQ,CAAC,YAAY,EAAE,UAAU,CAAC,YAAY,CAAC;YACpE,oBAAoB,CACnB,QAAQ,CAAC,eAAe,EACxB,UAAU,CAAC,eAAe,CAC1B;YACD,oBAAoB,CACnB,QAAQ,CAAC,eAAe,EACxB,UAAU,CAAC,eAAe,CAC1B;YACD,4BAA4B,CAC3B,QAAQ,CAAC,cAAc,EACvB,UAAU,CAAC,cAAc,CACzB,CAAC,CACJ,CAAC;IACF,MAAM,KAAK,GAAyB;QACnC,GAAG,cAAc;QACjB,GAAG,EAAE,UAAU,CAAC,OAAO;QACvB,WAAW,EAAE,UAAU,CAAC,WAAW;QACnC,YAAY,EAAE,UAAU,CAAC,YAAY;QACrC,eAAe,EAAE,UAAU,CAAC,eAAe;QAC3C,eAAe,EAAE,UAAU,CAAC,eAAe;QAC3C,GAAG,wBAAwB,CAAC;YAC3B,gBAAgB;YAChB,iBAAiB;YACjB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,cAAc,EAAE,CAAC,eAAe;SAChC,CAAC;QACF,GAAG,CAAC,OAAO,CAAC,cAAc;YACzB,CAAC,CAAC,EAAE,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE;YAC5C,CAAC,CAAC,EAAE,CAAC;QACN,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpE,GAAG,CAAC,UAAU,CAAC,YAAY;YAC1B,CAAC,CAAC,EAAE,YAAY,EAAE,UAAU,CAAC,YAAY,EAAE;YAC3C,CAAC,CAAC,EAAE,CAAC;QACN,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,GAAG,CAAC,UAAU,CAAC,cAAc;YAC5B,CAAC,CAAC,EAAE,cAAc,EAAE,UAAU,CAAC,cAAc,EAAE;YAC/C,CAAC,CAAC,EAAE,CAAC;QACN,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjE,SAAS,EAAE,QAAQ,EAAE,SAAS,IAAI,GAAG;QACrC,SAAS,EAAE,GAAG;KACd,CAAC;IACF,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;IAC7B,IAAI,OAAO,CAAC,WAAW,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;QAClD,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC;IAC7B,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC1D,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAC9B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CACjC,UAAkC,EAAE;IAKpC,OAAO;QACN,IAAI,EAAE,sBAAsB,CAAC,OAAO,CAAC,IAAI,CAAC;QAC1C,QAAQ,EAAE,MAAM,mBAAmB,CAAC,OAAO,CAAC;KAC5C,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CACnC,IAAwB,EACxB,UAAiC,EAAE;IAEnC,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,OAAO,CAAC,CAAC;IACpD,MAAM,YAAY,GAAG,iBAAiB,CAAC,IAAI,IAAI,QAAQ,CAAC,WAAW,CAAC,CAAC;IACrE,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAC3C,IAAI,CAAC,KAAK,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACd,qBAAqB,YAAY,sDAAsD,CACvF,CAAC;IACH,CAAC;IACD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,CAAC,MAAM,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/D,MAAM,MAAM,GAAqB;QAChC,OAAO,EAAE,mBAAmB,CAAC,KAAK,CAAC,GAAG,CAAC;QACvC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3B,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzE,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChE,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;QACxE,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1D,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpD,SAAS,EACR,OAAO,CAAC,SAAS;YACjB,KAAK,CAAC,SAAS;YACf,QAAQ,CAAC,SAAS;YAClB,kBAAkB;QACnB,WAAW,EACV,OAAO,CAAC,WAAW;YACnB,KAAK,CAAC,WAAW;YACjB,QAAQ,CAAC,WAAW;YACpB,oBAAoB;KACrB,CAAC;IACF,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AAC9C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACrC,KAA2D;IAE3D,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QACpB,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;QACzD,IAAI,QAAQ,EAAE,CAAC;YACd,OAAO,QAAQ,CAAC;QACjB,CAAC;IACF,CAAC;IACD,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACrB,OAAO,UAAU,CAAC,MAAM,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,SAAS,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAwB;IACzD,MAAM,UAAU,GAAG,IAAI,EAAE,IAAI,EAAE,CAAC;IAChC,IAAI,CAAC,UAAU,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAC9C,CAAC;IACD,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QACjD,MAAM,IAAI,KAAK,CACd,iFAAiF,CACjF,CAAC;IACH,CAAC;IACD,OAAO,UAAU,CAAC;AACnB,CAAC;AAED,SAAS,wBAAwB,CAAC,KAMjC;IACA,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC5C,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAC9C,IAAI,QAAQ,IAAI,SAAS,EAAE,CAAC;QAC3B,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;IACvD,CAAC;IACD,IAAI,QAAQ,EAAE,CAAC;QACd,OAAO,EAAE,QAAQ,EAAE,CAAC;IACrB,CAAC;IACD,IAAI,SAAS,EAAE,CAAC;QACf,OAAO,EAAE,SAAS,EAAE,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;IAC7C,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;QAC3B,OAAO,EAAE,CAAC;IACX,CAAC;IACD,OAAO;QACN,GAAG,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvE,GAAG,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC1E,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAW;IACrC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;IAChC,OAAO,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC3D,CAAC;AAED,SAAS,oBAAoB,CAC5B,aAAiC,EACjC,SAA6B;IAE7B,MAAM,QAAQ,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;IACnC,OAAO,OAAO,CAAC,QAAQ,IAAI,IAAI,IAAI,QAAQ,KAAK,IAAI,CAAC,CAAC;AACvD,CAAC;AAED,SAAS,4BAA4B,CACpC,aAAiC,EACjC,SAA6B;IAE7B,MAAM,QAAQ,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;IACnC,OAAO,QAAQ,KAAK,IAAI,CAAC;AAC1B,CAAC;AAED,SAAS,sBAAsB,CAC9B,KAAc,EACd,KAAa;IAEb,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,oBAAoB,CAAC,CAAC;IAC/C,CAAC;IACD,MAAM,GAAG,GAAG,OAAO,KAAK,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAClE,IAAI,CAAC,GAAG,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,kBAAkB,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO;QACN,GAAG;QACH,GAAG,UAAU,CAAC,KAAK,EAAE,aAAa,CAAC;QACnC,GAAG,UAAU,CAAC,KAAK,EAAE,cAAc,CAAC;QACpC,GAAG,UAAU,CAAC,KAAK,EAAE,iBAAiB,CAAC;QACvC,GAAG,UAAU,CAAC,KAAK,EAAE,iBAAiB,CAAC;QACvC,GAAG,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC;QAChC,GAAG,UAAU,CAAC,KAAK,EAAE,WAAW,CAAC;QACjC,GAAG,UAAU,CAAC,KAAK,EAAE,gBAAgB,CAAC;QACtC,GAAG,UAAU,CAAC,KAAK,EAAE,aAAa,CAAC;QACnC,GAAG,UAAU,CAAC,KAAK,EAAE,SAAS,CAAC;QAC/B,GAAG,UAAU,CAAC,KAAK,EAAE,WAAW,CAAC;QACjC,GAAG,UAAU,CAAC,KAAK,EAAE,SAAS,CAAC;QAC/B,GAAG,CAAC,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,IAAI,KAAK,CAAC,SAAS,GAAG,CAAC;YAC7D,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE;YAChC,CAAC,CAAC,EAAE,CAAC;QACN,GAAG,CAAC,OAAO,KAAK,CAAC,WAAW,KAAK,QAAQ,IAAI,KAAK,CAAC,WAAW,GAAG,CAAC;YACjE,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE;YACpC,CAAC,CAAC,EAAE,CAAC;QACN,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC;YAC/B,CAAC,CAAC;gBACA,YAAY,EAAE;oBACb,GAAG,CAAC,OAAO,KAAK,CAAC,YAAY,CAAC,SAAS,KAAK,SAAS;wBACpD,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,YAAY,CAAC,SAAS,EAAE;wBAC7C,CAAC,CAAC,EAAE,CAAC;oBACN,GAAG,CAAC,OAAO,KAAK,CAAC,YAAY,CAAC,iBAAiB,KAAK,SAAS;wBAC5D,CAAC,CAAC,EAAE,iBAAiB,EAAE,KAAK,CAAC,YAAY,CAAC,iBAAiB,EAAE;wBAC7D,CAAC,CAAC,EAAE,CAAC;oBACN,GAAG,CAAC,OAAO,KAAK,CAAC,YAAY,CAAC,iBAAiB,KAAK,SAAS;wBAC5D,CAAC,CAAC,EAAE,iBAAiB,EAAE,KAAK,CAAC,YAAY,CAAC,iBAAiB,EAAE;wBAC7D,CAAC,CAAC,EAAE,CAAC;iBACN;aACD;YACF,CAAC,CAAC,EAAE,CAAC;QACN,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC;YAC9B,CAAC,CAAC,EAAE,MAAM,EAAE,uBAAuB,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;YACnD,CAAC,CAAC,EAAE,CAAC;QACN,GAAG,UAAU,CAAC,KAAK,EAAE,gBAAgB,CAAC;QACtC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC;YAC3B,CAAC,CAAC;gBACA,QAAQ,EAAE,KAAK,CAAC,QAAqD;aACrE;YACF,CAAC,CAAC,EAAE,CAAC;QACN,GAAG,UAAU,CAAC,KAAK,EAAE,WAAW,CAAC;QACjC,GAAG,UAAU,CAAC,KAAK,EAAE,WAAW,CAAC;KACjC,CAAC;AACH,CAAC;AAED,SAAS,uBAAuB,CAC/B,KAAyB;IAEzB,OAAO,KAAK;SACV,MAAM,CAAC,QAAQ,CAAC;SAChB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAChB,EAAE,EAAE,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;QAChD,IAAI,EAAE,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;QACtD,GAAG,UAAU,CAAC,KAAK,EAAE,aAAa,CAAC;QACnC,GAAG,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC;QAChC,GAAG,cAAc,CAAC,KAAK,EAAE,UAAU,CAAC;QACpC,GAAG,cAAc,CAAC,KAAK,EAAE,YAAY,CAAC;QACtC,GAAG,cAAc,CAAC,KAAK,EAAE,aAAa,CAAC;QACvC,GAAG,cAAc,CAAC,KAAK,EAAE,uBAAuB,CAAC;QACjD,GAAG,UAAU,CAAC,KAAK,EAAE,mBAAmB,CAAC;QACzC,GAAG,UAAU,CAAC,KAAK,EAAE,aAAa,CAAC;QACnC,GAAG,cAAc,CAAC,KAAK,EAAE,uBAAuB,CAAC;QACjD,GAAG,cAAc,CAAC,KAAK,EAAE,uBAAuB,CAAC;QACjD,GAAG,cAAc,CAAC,KAAK,EAAE,oBAAoB,CAAC;QAC9C,GAAG,cAAc,CAAC,KAAK,EAAE,mBAAmB,CAAC;QAC7C,GAAG,gBAAgB,CAAC,KAAK,EAAE,YAAY,CAAC;QACxC,GAAG,mBAAmB,CAAC,KAAK,EAAE,UAAU,CAAC;KACzC,CAAC,CAAC;SACF,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,cAAc,CACtB,KAA8B,EAC9B,GAAW;IAEX,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;IACzB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,CAAC;IACX,CAAC;IACD,MAAM,OAAO,GAAG,KAAK;SACnB,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC;SAC1D,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC1B,MAAM,CAAC,OAAO,CAAC,CAAC;IAClB,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AACrD,CAAC;AAED,SAAS,gBAAgB,CACxB,KAA8B,EAC9B,GAAW;IAEX,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;IACzB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,EAAE,CAAC;IACX,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;SACnC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC;QAChC,QAAQ,CAAC,IAAI,EAAE;QACf,OAAO,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE;KACvD,CAAC;SACD,MAAM,CACN,CAAC,KAAK,EAA6B,EAAE,CACpC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CACvC,CAAC;IACH,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AACzE,CAAC;AAED,SAAS,mBAAmB,CAC3B,KAA8B,EAC9B,GAAW;IAEX,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;IACzB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,EAAE,CAAC;IACX,CAAC;IACD,MAAM,MAAM,GAA8C,EAAE,CAAC;IAC7D,KAAK,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5D,MAAM,aAAa,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;QACtC,IAAI,CAAC,aAAa,EAAE,CAAC;YACpB,SAAS;QACV,CAAC;QACD,IACC,OAAO,UAAU,KAAK,QAAQ;YAC9B,OAAO,UAAU,KAAK,QAAQ;YAC9B,OAAO,UAAU,KAAK,SAAS,EAC9B,CAAC;YACF,MAAM,CAAC,aAAa,CAAC;gBACpB,OAAO,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC;QAClE,CAAC;IACF,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAChE,CAAC;AAED,SAAS,UAAU,CAClB,KAA8B,EAC9B,GAAW;IAEX,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;IACzB,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE;QAC/C,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE;QACzB,CAAC,CAAC,EAAE,CAAC;AACP,CAAC;AAED,SAAS,UAAU,CAAC,IAAY;IAC/B,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;QAClB,OAAO,OAAO,EAAE,CAAC;IAClB,CAAC;IACD,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3B,OAAO,OAAO,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC;AACtB,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC/B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC7E,CAAC;AAED,SAAS,WAAW,CAAC,KAAc,EAAE,IAAY;IAChD,OAAO,CACN,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,MAAM,IAAI,KAAK;QACd,KAA4B,CAAC,IAAI,KAAK,IAAI,CAC3C,CAAC;AACH,CAAC","sourcesContent":["import { mkdir, readFile, rename, writeFile } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { dirname, join, resolve } from \"node:path\";\nimport { type A2AServiceConfig, normalizeA2ABaseUrl } from \"./a2a-client.js\";\nimport {\n\ttype A2APeerConnection,\n\ttype A2APeerPairingPayload,\n\ta2aPeerConnectionFromPairingPayload,\n} from \"./a2a-peer-pairing.js\";\nimport { getEnvValue, trimString } from \"./client.js\";\n\nconst DEFAULT_TIMEOUT_MS = 600_000;\nconst DEFAULT_MAX_ATTEMPTS = 1;\n\nexport interface A2APeerRegistryEntry {\n\turl: string;\n\tdisplayName?: string;\n\tagentCardUrl?: string;\n\tprotocolBinding?: string;\n\tprotocolVersion?: string;\n\ttokenEnv?: string;\n\ttokenFile?: string;\n\torganizationId?: string;\n\tworkspaceId?: string;\n\tagentId?: string;\n\tsessionId?: string;\n\tactorId?: string;\n\ttimeoutMs?: number;\n\tmaxAttempts?: number;\n\tcapabilities?: A2APeerConnection[\"capabilities\"];\n\tskills?: A2APeerConnection[\"skills\"];\n\tkeyFingerprint?: string;\n\tmetadata?: Record<string, string | number | boolean>;\n\tcreatedAt?: string;\n\tupdatedAt?: string;\n}\n\nexport interface A2APeerRegistryFile {\n\tdefaultPeer?: string;\n\ttimeoutMs?: number;\n\tmaxAttempts?: number;\n\tpeers: Record<string, A2APeerRegistryEntry>;\n}\n\nexport interface A2APeerRegistryOptions {\n\tpath?: string;\n\tnow?: Date;\n}\n\nexport interface UpsertA2APeerOptions extends A2APeerRegistryOptions {\n\tname?: string;\n\tmakeDefault?: boolean;\n\ttokenEnv?: string;\n\ttokenFile?: string;\n\tworkspaceId?: string;\n\torganizationId?: string;\n}\n\nexport interface ResolveA2APeerOptions extends A2APeerRegistryOptions {\n\ttoken?: string;\n\ttimeoutMs?: number;\n\tmaxAttempts?: number;\n}\n\nexport interface ResolvedA2APeer {\n\tname: string;\n\tentry: A2APeerRegistryEntry;\n\tconfig: A2AServiceConfig;\n}\n\nexport function getA2APeerRegistryPath(path?: string): string {\n\tconst configured =\n\t\ttrimString(path) ??\n\t\tgetEnvValue([\"MAESTRO_A2A_PEERS_FILE\", \"CODEX_A2A_PEERS_FILE\"]);\n\tif (configured) {\n\t\treturn expandHome(configured);\n\t}\n\treturn join(homedir(), \".maestro\", \"a2a\", \"peers.json\");\n}\n\nexport async function loadA2APeerRegistry(\n\toptions: A2APeerRegistryOptions = {},\n): Promise<A2APeerRegistryFile> {\n\tconst path = getA2APeerRegistryPath(options.path);\n\tlet raw: string;\n\ttry {\n\t\traw = await readFile(path, \"utf8\");\n\t} catch (error) {\n\t\tif (hasNodeCode(error, \"ENOENT\")) {\n\t\t\treturn { peers: {} };\n\t\t}\n\t\tthrow error;\n\t}\n\tconst parsed = JSON.parse(raw) as unknown;\n\tif (!isRecord(parsed)) {\n\t\tthrow new Error(`A2A peer registry at ${path} must be a JSON object`);\n\t}\n\tconst peers = isRecord(parsed.peers) ? parsed.peers : {};\n\tconst registry: A2APeerRegistryFile = {\n\t\tpeers: Object.fromEntries(\n\t\t\tObject.entries(peers).map(([name, value]) => [\n\t\t\t\tname,\n\t\t\t\tnormalizeRegistryEntry(value, `peers.${name}`),\n\t\t\t]),\n\t\t),\n\t};\n\tif (typeof parsed.defaultPeer === \"string\" && parsed.defaultPeer.trim()) {\n\t\tregistry.defaultPeer = parsed.defaultPeer.trim();\n\t}\n\tif (typeof parsed.timeoutMs === \"number\" && parsed.timeoutMs > 0) {\n\t\tregistry.timeoutMs = parsed.timeoutMs;\n\t}\n\tif (typeof parsed.maxAttempts === \"number\" && parsed.maxAttempts > 0) {\n\t\tregistry.maxAttempts = parsed.maxAttempts;\n\t}\n\treturn registry;\n}\n\nexport async function saveA2APeerRegistry(\n\tregistry: A2APeerRegistryFile,\n\toptions: A2APeerRegistryOptions = {},\n): Promise<string> {\n\tconst path = getA2APeerRegistryPath(options.path);\n\tawait mkdir(dirname(path), { recursive: true, mode: 0o700 });\n\tawait writeFile(`${path}.tmp`, `${JSON.stringify(registry, null, 2)}\\n`, {\n\t\tmode: 0o600,\n\t});\n\tawait rename(`${path}.tmp`, path);\n\treturn path;\n}\n\nexport async function upsertA2APeerFromPairingPayload(\n\tpayload: A2APeerPairingPayload,\n\toptions: UpsertA2APeerOptions = {},\n): Promise<{\n\tname: string;\n\tentry: A2APeerRegistryEntry;\n\tpath: string;\n}> {\n\tconst registry = await loadA2APeerRegistry(options);\n\tconst connection = a2aPeerConnectionFromPairingPayload(payload);\n\tconst name = normalizePeerName(options.name ?? connection.peerId);\n\tconst now = (options.now ?? new Date()).toISOString();\n\tconst previous = registry.peers[name];\n\tconst nextBaseUrl = normalizedPeerUrl(connection.baseUrl);\n\tconst {\n\t\ttokenEnv: previousTokenEnv,\n\t\ttokenFile: previousTokenFile,\n\t\tkeyFingerprint: _previousKeyFingerprint,\n\t\t...previousFields\n\t} = previous ?? {};\n\tconst identityChanged = Boolean(\n\t\tprevious &&\n\t\t\t(normalizedPeerUrl(previous.url) !== nextBaseUrl ||\n\t\t\t\tidentityFieldChanged(previous.agentCardUrl, connection.agentCardUrl) ||\n\t\t\t\tidentityFieldChanged(\n\t\t\t\t\tprevious.protocolBinding,\n\t\t\t\t\tconnection.protocolBinding,\n\t\t\t\t) ||\n\t\t\t\tidentityFieldChanged(\n\t\t\t\t\tprevious.protocolVersion,\n\t\t\t\t\tconnection.protocolVersion,\n\t\t\t\t) ||\n\t\t\t\tidentityOptionalFieldChanged(\n\t\t\t\t\tprevious.keyFingerprint,\n\t\t\t\t\tconnection.keyFingerprint,\n\t\t\t\t)),\n\t);\n\tconst entry: A2APeerRegistryEntry = {\n\t\t...previousFields,\n\t\turl: connection.baseUrl,\n\t\tdisplayName: connection.displayName,\n\t\tagentCardUrl: connection.agentCardUrl,\n\t\tprotocolBinding: connection.protocolBinding,\n\t\tprotocolVersion: connection.protocolVersion,\n\t\t...resolveUpsertTokenFields({\n\t\t\tpreviousTokenEnv,\n\t\t\tpreviousTokenFile,\n\t\t\ttokenEnv: options.tokenEnv,\n\t\t\ttokenFile: options.tokenFile,\n\t\t\tretainExisting: !identityChanged,\n\t\t}),\n\t\t...(options.organizationId\n\t\t\t? { organizationId: options.organizationId }\n\t\t\t: {}),\n\t\t...(options.workspaceId ? { workspaceId: options.workspaceId } : {}),\n\t\t...(connection.capabilities\n\t\t\t? { capabilities: connection.capabilities }\n\t\t\t: {}),\n\t\t...(connection.skills ? { skills: connection.skills } : {}),\n\t\t...(connection.keyFingerprint\n\t\t\t? { keyFingerprint: connection.keyFingerprint }\n\t\t\t: {}),\n\t\t...(connection.metadata ? { metadata: connection.metadata } : {}),\n\t\tcreatedAt: previous?.createdAt ?? now,\n\t\tupdatedAt: now,\n\t};\n\tregistry.peers[name] = entry;\n\tif (options.makeDefault || !registry.defaultPeer) {\n\t\tregistry.defaultPeer = name;\n\t}\n\tconst path = await saveA2APeerRegistry(registry, options);\n\treturn { name, entry, path };\n}\n\nexport async function listA2APeers(\n\toptions: A2APeerRegistryOptions = {},\n): Promise<{\n\tpath: string;\n\tregistry: A2APeerRegistryFile;\n}> {\n\treturn {\n\t\tpath: getA2APeerRegistryPath(options.path),\n\t\tregistry: await loadA2APeerRegistry(options),\n\t};\n}\n\nexport async function resolveA2APeer(\n\tname: string | undefined,\n\toptions: ResolveA2APeerOptions = {},\n): Promise<ResolvedA2APeer> {\n\tconst registry = await loadA2APeerRegistry(options);\n\tconst resolvedName = normalizePeerName(name ?? registry.defaultPeer);\n\tconst entry = registry.peers[resolvedName];\n\tif (!entry) {\n\t\tthrow new Error(\n\t\t\t`Unknown A2A peer \"${resolvedName}\". Run \"maestro a2a peers\" to list registered peers.`,\n\t\t);\n\t}\n\tconst token = options.token ?? (await resolvePeerToken(entry));\n\tconst config: A2AServiceConfig = {\n\t\tbaseUrl: normalizeA2ABaseUrl(entry.url),\n\t\t...(token ? { token } : {}),\n\t\t...(entry.organizationId ? { organizationId: entry.organizationId } : {}),\n\t\t...(entry.workspaceId ? { workspaceId: entry.workspaceId } : {}),\n\t\t...(entry.agentId ? { agentId: entry.agentId } : { agentId: \"maestro\" }),\n\t\t...(entry.sessionId ? { sessionId: entry.sessionId } : {}),\n\t\t...(entry.actorId ? { actorId: entry.actorId } : {}),\n\t\ttimeoutMs:\n\t\t\toptions.timeoutMs ??\n\t\t\tentry.timeoutMs ??\n\t\t\tregistry.timeoutMs ??\n\t\t\tDEFAULT_TIMEOUT_MS,\n\t\tmaxAttempts:\n\t\t\toptions.maxAttempts ??\n\t\t\tentry.maxAttempts ??\n\t\t\tregistry.maxAttempts ??\n\t\t\tDEFAULT_MAX_ATTEMPTS,\n\t};\n\treturn { name: resolvedName, entry, config };\n}\n\nexport async function resolvePeerToken(\n\tentry: Pick<A2APeerRegistryEntry, \"tokenEnv\" | \"tokenFile\">,\n): Promise<string | undefined> {\n\tif (entry.tokenEnv) {\n\t\tconst envToken = trimString(process.env[entry.tokenEnv]);\n\t\tif (envToken) {\n\t\t\treturn envToken;\n\t\t}\n\t}\n\tif (entry.tokenFile) {\n\t\treturn trimString(await readFile(expandHome(entry.tokenFile), \"utf8\"));\n\t}\n\treturn undefined;\n}\n\nexport function normalizePeerName(name: string | undefined): string {\n\tconst normalized = name?.trim();\n\tif (!normalized) {\n\t\tthrow new Error(\"A2A peer name is required\");\n\t}\n\tif (!/^[A-Za-z0-9_.-]{1,80}$/u.test(normalized)) {\n\t\tthrow new Error(\n\t\t\t\"A2A peer names may only contain letters, numbers, dots, underscores, and dashes\",\n\t\t);\n\t}\n\treturn normalized;\n}\n\nfunction resolveUpsertTokenFields(input: {\n\tpreviousTokenEnv?: string;\n\tpreviousTokenFile?: string;\n\ttokenEnv?: string;\n\ttokenFile?: string;\n\tretainExisting?: boolean;\n}): Pick<A2APeerRegistryEntry, \"tokenEnv\" | \"tokenFile\"> {\n\tconst tokenEnv = trimString(input.tokenEnv);\n\tconst tokenFile = trimString(input.tokenFile);\n\tif (tokenEnv && tokenFile) {\n\t\treturn { tokenEnv, tokenFile: expandHome(tokenFile) };\n\t}\n\tif (tokenEnv) {\n\t\treturn { tokenEnv };\n\t}\n\tif (tokenFile) {\n\t\treturn { tokenFile: expandHome(tokenFile) };\n\t}\n\tif (!input.retainExisting) {\n\t\treturn {};\n\t}\n\treturn {\n\t\t...(input.previousTokenEnv ? { tokenEnv: input.previousTokenEnv } : {}),\n\t\t...(input.previousTokenFile ? { tokenFile: input.previousTokenFile } : {}),\n\t};\n}\n\nfunction normalizedPeerUrl(url: string): string | undefined {\n\tconst peerUrl = trimString(url);\n\treturn peerUrl ? normalizeA2ABaseUrl(peerUrl) : undefined;\n}\n\nfunction identityFieldChanged(\n\tpreviousValue: string | undefined,\n\tnextValue: string | undefined,\n): boolean {\n\tconst previous = trimString(previousValue);\n\tconst next = trimString(nextValue);\n\treturn Boolean(previous && next && previous !== next);\n}\n\nfunction identityOptionalFieldChanged(\n\tpreviousValue: string | undefined,\n\tnextValue: string | undefined,\n): boolean {\n\tconst previous = trimString(previousValue);\n\tconst next = trimString(nextValue);\n\treturn previous !== next;\n}\n\nfunction normalizeRegistryEntry(\n\tinput: unknown,\n\tlabel: string,\n): A2APeerRegistryEntry {\n\tif (!isRecord(input)) {\n\t\tthrow new Error(`${label} must be an object`);\n\t}\n\tconst url = typeof input.url === \"string\" ? input.url.trim() : \"\";\n\tif (!url) {\n\t\tthrow new Error(`${label}.url is required`);\n\t}\n\treturn {\n\t\turl,\n\t\t...copyString(input, \"displayName\"),\n\t\t...copyString(input, \"agentCardUrl\"),\n\t\t...copyString(input, \"protocolBinding\"),\n\t\t...copyString(input, \"protocolVersion\"),\n\t\t...copyString(input, \"tokenEnv\"),\n\t\t...copyString(input, \"tokenFile\"),\n\t\t...copyString(input, \"organizationId\"),\n\t\t...copyString(input, \"workspaceId\"),\n\t\t...copyString(input, \"agentId\"),\n\t\t...copyString(input, \"sessionId\"),\n\t\t...copyString(input, \"actorId\"),\n\t\t...(typeof input.timeoutMs === \"number\" && input.timeoutMs > 0\n\t\t\t? { timeoutMs: input.timeoutMs }\n\t\t\t: {}),\n\t\t...(typeof input.maxAttempts === \"number\" && input.maxAttempts > 0\n\t\t\t? { maxAttempts: input.maxAttempts }\n\t\t\t: {}),\n\t\t...(isRecord(input.capabilities)\n\t\t\t? {\n\t\t\t\t\tcapabilities: {\n\t\t\t\t\t\t...(typeof input.capabilities.streaming === \"boolean\"\n\t\t\t\t\t\t\t? { streaming: input.capabilities.streaming }\n\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t\t...(typeof input.capabilities.pushNotifications === \"boolean\"\n\t\t\t\t\t\t\t? { pushNotifications: input.capabilities.pushNotifications }\n\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t\t...(typeof input.capabilities.extendedAgentCard === \"boolean\"\n\t\t\t\t\t\t\t? { extendedAgentCard: input.capabilities.extendedAgentCard }\n\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t: {}),\n\t\t...(Array.isArray(input.skills)\n\t\t\t? { skills: normalizeRegistrySkills(input.skills) }\n\t\t\t: {}),\n\t\t...copyString(input, \"keyFingerprint\"),\n\t\t...(isRecord(input.metadata)\n\t\t\t? {\n\t\t\t\t\tmetadata: input.metadata as Record<string, string | number | boolean>,\n\t\t\t\t}\n\t\t\t: {}),\n\t\t...copyString(input, \"createdAt\"),\n\t\t...copyString(input, \"updatedAt\"),\n\t};\n}\n\nfunction normalizeRegistrySkills(\n\tinput: readonly unknown[],\n): A2APeerConnection[\"skills\"] {\n\treturn input\n\t\t.filter(isRecord)\n\t\t.map((skill) => ({\n\t\t\tid: typeof skill.id === \"string\" ? skill.id : \"\",\n\t\t\tname: typeof skill.name === \"string\" ? skill.name : \"\",\n\t\t\t...copyString(skill, \"description\"),\n\t\t\t...copyStringList(skill, \"tags\"),\n\t\t\t...copyStringList(skill, \"examples\"),\n\t\t\t...copyStringList(skill, \"inputModes\"),\n\t\t\t...copyStringList(skill, \"outputModes\"),\n\t\t\t...copyStringList(skill, \"requiredContextGrants\"),\n\t\t\t...copyString(skill, \"approvalPolicyRef\"),\n\t\t\t...copyString(skill, \"maxAutonomy\"),\n\t\t\t...copyStringList(skill, \"requiredArtifactKinds\"),\n\t\t\t...copyStringList(skill, \"optionalArtifactKinds\"),\n\t\t\t...copyStringList(skill, \"allowedTaskClasses\"),\n\t\t\t...copyStringList(skill, \"deniedTaskClasses\"),\n\t\t\t...copyStringRecord(skill, \"attributes\"),\n\t\t\t...copyPrimitiveRecord(skill, \"metadata\"),\n\t\t}))\n\t\t.filter((skill) => skill.id.trim() && skill.name.trim());\n}\n\nfunction copyStringList(\n\tinput: Record<string, unknown>,\n\tkey: string,\n): Record<string, string[]> {\n\tconst value = input[key];\n\tif (!Array.isArray(value)) {\n\t\treturn {};\n\t}\n\tconst strings = value\n\t\t.filter((item): item is string => typeof item === \"string\")\n\t\t.map((item) => item.trim())\n\t\t.filter(Boolean);\n\treturn strings.length > 0 ? { [key]: strings } : {};\n}\n\nfunction copyStringRecord(\n\tinput: Record<string, unknown>,\n\tkey: string,\n): Record<string, Record<string, string>> {\n\tconst value = input[key];\n\tif (!isRecord(value)) {\n\t\treturn {};\n\t}\n\tconst entries = Object.entries(value)\n\t\t.map(([entryKey, entryValue]) => [\n\t\t\tentryKey.trim(),\n\t\t\ttypeof entryValue === \"string\" ? entryValue.trim() : \"\",\n\t\t])\n\t\t.filter(\n\t\t\t(entry): entry is [string, string] =>\n\t\t\t\tBoolean(entry[0]) && Boolean(entry[1]),\n\t\t);\n\treturn entries.length > 0 ? { [key]: Object.fromEntries(entries) } : {};\n}\n\nfunction copyPrimitiveRecord(\n\tinput: Record<string, unknown>,\n\tkey: string,\n): Record<string, Record<string, string | number | boolean>> {\n\tconst value = input[key];\n\tif (!isRecord(value)) {\n\t\treturn {};\n\t}\n\tconst output: Record<string, string | number | boolean> = {};\n\tfor (const [entryKey, entryValue] of Object.entries(value)) {\n\t\tconst normalizedKey = entryKey.trim();\n\t\tif (!normalizedKey) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (\n\t\t\ttypeof entryValue === \"string\" ||\n\t\t\ttypeof entryValue === \"number\" ||\n\t\t\ttypeof entryValue === \"boolean\"\n\t\t) {\n\t\t\toutput[normalizedKey] =\n\t\t\t\ttypeof entryValue === \"string\" ? entryValue.trim() : entryValue;\n\t\t}\n\t}\n\treturn Object.keys(output).length > 0 ? { [key]: output } : {};\n}\n\nfunction copyString(\n\tinput: Record<string, unknown>,\n\tkey: string,\n): Record<string, string> {\n\tconst value = input[key];\n\treturn typeof value === \"string\" && value.trim()\n\t\t? { [key]: value.trim() }\n\t\t: {};\n}\n\nfunction expandHome(path: string): string {\n\tif (path === \"~\") {\n\t\treturn homedir();\n\t}\n\tif (path.startsWith(\"~/\")) {\n\t\treturn resolve(homedir(), path.slice(2));\n\t}\n\treturn resolve(path);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction hasNodeCode(error: unknown, code: string): boolean {\n\treturn (\n\t\ttypeof error === \"object\" &&\n\t\terror !== null &&\n\t\t\"code\" in error &&\n\t\t(error as { code?: unknown }).code === code\n\t);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"a2a-peer-registry.js","sourceRoot":"","sources":["../../src/platform/a2a-peer-registry.ts"],"names":[],"mappings":"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","sourcesContent":["import { mkdir, readFile, rename, writeFile } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { dirname, join, resolve } from \"node:path\";\nimport { isRecord } from \"../utils/json.js\";\nimport { type A2AServiceConfig, normalizeA2ABaseUrl } from \"./a2a-client.js\";\nimport {\n\ttype A2APeerConnection,\n\ttype A2APeerPairingPayload,\n\ta2aPeerConnectionFromPairingPayload,\n} from \"./a2a-peer-pairing.js\";\nimport { getEnvValue, trimString } from \"./client.js\";\n\nconst DEFAULT_TIMEOUT_MS = 600_000;\nconst DEFAULT_MAX_ATTEMPTS = 1;\n\nexport interface A2APeerRegistryEntry {\n\turl: string;\n\tdisplayName?: string;\n\tagentCardUrl?: string;\n\tprotocolBinding?: string;\n\tprotocolVersion?: string;\n\ttokenEnv?: string;\n\ttokenFile?: string;\n\torganizationId?: string;\n\tworkspaceId?: string;\n\tagentId?: string;\n\tsessionId?: string;\n\tactorId?: string;\n\ttimeoutMs?: number;\n\tmaxAttempts?: number;\n\tcapabilities?: A2APeerConnection[\"capabilities\"];\n\tskills?: A2APeerConnection[\"skills\"];\n\tkeyFingerprint?: string;\n\tmetadata?: Record<string, string | number | boolean>;\n\tcreatedAt?: string;\n\tupdatedAt?: string;\n}\n\nexport interface A2APeerRegistryFile {\n\tdefaultPeer?: string;\n\ttimeoutMs?: number;\n\tmaxAttempts?: number;\n\tpeers: Record<string, A2APeerRegistryEntry>;\n}\n\nexport interface A2APeerRegistryOptions {\n\tpath?: string;\n\tnow?: Date;\n}\n\nexport interface UpsertA2APeerOptions extends A2APeerRegistryOptions {\n\tname?: string;\n\tmakeDefault?: boolean;\n\ttokenEnv?: string;\n\ttokenFile?: string;\n\tworkspaceId?: string;\n\torganizationId?: string;\n}\n\nexport interface ResolveA2APeerOptions extends A2APeerRegistryOptions {\n\ttoken?: string;\n\ttimeoutMs?: number;\n\tmaxAttempts?: number;\n}\n\nexport interface ResolvedA2APeer {\n\tname: string;\n\tentry: A2APeerRegistryEntry;\n\tconfig: A2AServiceConfig;\n}\n\nexport function getA2APeerRegistryPath(path?: string): string {\n\tconst configured =\n\t\ttrimString(path) ??\n\t\tgetEnvValue([\"MAESTRO_A2A_PEERS_FILE\", \"CODEX_A2A_PEERS_FILE\"]);\n\tif (configured) {\n\t\treturn expandHome(configured);\n\t}\n\treturn join(homedir(), \".maestro\", \"a2a\", \"peers.json\");\n}\n\nexport async function loadA2APeerRegistry(\n\toptions: A2APeerRegistryOptions = {},\n): Promise<A2APeerRegistryFile> {\n\tconst path = getA2APeerRegistryPath(options.path);\n\tlet raw: string;\n\ttry {\n\t\traw = await readFile(path, \"utf8\");\n\t} catch (error) {\n\t\tif (hasNodeCode(error, \"ENOENT\")) {\n\t\t\treturn { peers: {} };\n\t\t}\n\t\tthrow error;\n\t}\n\tconst parsed = JSON.parse(raw) as unknown;\n\tif (!isRecord(parsed)) {\n\t\tthrow new Error(`A2A peer registry at ${path} must be a JSON object`);\n\t}\n\tconst peers = isRecord(parsed.peers) ? parsed.peers : {};\n\tconst registry: A2APeerRegistryFile = {\n\t\tpeers: Object.fromEntries(\n\t\t\tObject.entries(peers).map(([name, value]) => [\n\t\t\t\tname,\n\t\t\t\tnormalizeRegistryEntry(value, `peers.${name}`),\n\t\t\t]),\n\t\t),\n\t};\n\tif (typeof parsed.defaultPeer === \"string\" && parsed.defaultPeer.trim()) {\n\t\tregistry.defaultPeer = parsed.defaultPeer.trim();\n\t}\n\tif (typeof parsed.timeoutMs === \"number\" && parsed.timeoutMs > 0) {\n\t\tregistry.timeoutMs = parsed.timeoutMs;\n\t}\n\tif (typeof parsed.maxAttempts === \"number\" && parsed.maxAttempts > 0) {\n\t\tregistry.maxAttempts = parsed.maxAttempts;\n\t}\n\treturn registry;\n}\n\nexport async function saveA2APeerRegistry(\n\tregistry: A2APeerRegistryFile,\n\toptions: A2APeerRegistryOptions = {},\n): Promise<string> {\n\tconst path = getA2APeerRegistryPath(options.path);\n\tawait mkdir(dirname(path), { recursive: true, mode: 0o700 });\n\tawait writeFile(`${path}.tmp`, `${JSON.stringify(registry, null, 2)}\\n`, {\n\t\tmode: 0o600,\n\t});\n\tawait rename(`${path}.tmp`, path);\n\treturn path;\n}\n\nexport async function upsertA2APeerFromPairingPayload(\n\tpayload: A2APeerPairingPayload,\n\toptions: UpsertA2APeerOptions = {},\n): Promise<{\n\tname: string;\n\tentry: A2APeerRegistryEntry;\n\tpath: string;\n}> {\n\tconst registry = await loadA2APeerRegistry(options);\n\tconst connection = a2aPeerConnectionFromPairingPayload(payload);\n\tconst name = normalizePeerName(options.name ?? connection.peerId);\n\tconst now = (options.now ?? new Date()).toISOString();\n\tconst previous = registry.peers[name];\n\tconst nextBaseUrl = normalizedPeerUrl(connection.baseUrl);\n\tconst {\n\t\ttokenEnv: previousTokenEnv,\n\t\ttokenFile: previousTokenFile,\n\t\tkeyFingerprint: _previousKeyFingerprint,\n\t\t...previousFields\n\t} = previous ?? {};\n\tconst identityChanged = Boolean(\n\t\tprevious &&\n\t\t\t(normalizedPeerUrl(previous.url) !== nextBaseUrl ||\n\t\t\t\tidentityFieldChanged(previous.agentCardUrl, connection.agentCardUrl) ||\n\t\t\t\tidentityFieldChanged(\n\t\t\t\t\tprevious.protocolBinding,\n\t\t\t\t\tconnection.protocolBinding,\n\t\t\t\t) ||\n\t\t\t\tidentityFieldChanged(\n\t\t\t\t\tprevious.protocolVersion,\n\t\t\t\t\tconnection.protocolVersion,\n\t\t\t\t) ||\n\t\t\t\tidentityOptionalFieldChanged(\n\t\t\t\t\tprevious.keyFingerprint,\n\t\t\t\t\tconnection.keyFingerprint,\n\t\t\t\t)),\n\t);\n\tconst entry: A2APeerRegistryEntry = {\n\t\t...previousFields,\n\t\turl: connection.baseUrl,\n\t\tdisplayName: connection.displayName,\n\t\tagentCardUrl: connection.agentCardUrl,\n\t\tprotocolBinding: connection.protocolBinding,\n\t\tprotocolVersion: connection.protocolVersion,\n\t\t...resolveUpsertTokenFields({\n\t\t\tpreviousTokenEnv,\n\t\t\tpreviousTokenFile,\n\t\t\ttokenEnv: options.tokenEnv,\n\t\t\ttokenFile: options.tokenFile,\n\t\t\tretainExisting: !identityChanged,\n\t\t}),\n\t\t...(options.organizationId\n\t\t\t? { organizationId: options.organizationId }\n\t\t\t: {}),\n\t\t...(options.workspaceId ? { workspaceId: options.workspaceId } : {}),\n\t\t...(connection.capabilities\n\t\t\t? { capabilities: connection.capabilities }\n\t\t\t: {}),\n\t\t...(connection.skills ? { skills: connection.skills } : {}),\n\t\t...(connection.keyFingerprint\n\t\t\t? { keyFingerprint: connection.keyFingerprint }\n\t\t\t: {}),\n\t\t...(connection.metadata ? { metadata: connection.metadata } : {}),\n\t\tcreatedAt: previous?.createdAt ?? now,\n\t\tupdatedAt: now,\n\t};\n\tregistry.peers[name] = entry;\n\tif (options.makeDefault || !registry.defaultPeer) {\n\t\tregistry.defaultPeer = name;\n\t}\n\tconst path = await saveA2APeerRegistry(registry, options);\n\treturn { name, entry, path };\n}\n\nexport async function listA2APeers(\n\toptions: A2APeerRegistryOptions = {},\n): Promise<{\n\tpath: string;\n\tregistry: A2APeerRegistryFile;\n}> {\n\treturn {\n\t\tpath: getA2APeerRegistryPath(options.path),\n\t\tregistry: await loadA2APeerRegistry(options),\n\t};\n}\n\nexport async function resolveA2APeer(\n\tname: string | undefined,\n\toptions: ResolveA2APeerOptions = {},\n): Promise<ResolvedA2APeer> {\n\tconst registry = await loadA2APeerRegistry(options);\n\tconst resolvedName = normalizePeerName(name ?? registry.defaultPeer);\n\tconst entry = registry.peers[resolvedName];\n\tif (!entry) {\n\t\tthrow new Error(\n\t\t\t`Unknown A2A peer \"${resolvedName}\". Run \"maestro a2a peers\" to list registered peers.`,\n\t\t);\n\t}\n\tconst token = options.token ?? (await resolvePeerToken(entry));\n\tconst config: A2AServiceConfig = {\n\t\tbaseUrl: normalizeA2ABaseUrl(entry.url),\n\t\t...(token ? { token } : {}),\n\t\t...(entry.organizationId ? { organizationId: entry.organizationId } : {}),\n\t\t...(entry.workspaceId ? { workspaceId: entry.workspaceId } : {}),\n\t\t...(entry.agentId ? { agentId: entry.agentId } : { agentId: \"maestro\" }),\n\t\t...(entry.sessionId ? { sessionId: entry.sessionId } : {}),\n\t\t...(entry.actorId ? { actorId: entry.actorId } : {}),\n\t\ttimeoutMs:\n\t\t\toptions.timeoutMs ??\n\t\t\tentry.timeoutMs ??\n\t\t\tregistry.timeoutMs ??\n\t\t\tDEFAULT_TIMEOUT_MS,\n\t\tmaxAttempts:\n\t\t\toptions.maxAttempts ??\n\t\t\tentry.maxAttempts ??\n\t\t\tregistry.maxAttempts ??\n\t\t\tDEFAULT_MAX_ATTEMPTS,\n\t};\n\treturn { name: resolvedName, entry, config };\n}\n\nexport async function resolvePeerToken(\n\tentry: Pick<A2APeerRegistryEntry, \"tokenEnv\" | \"tokenFile\">,\n): Promise<string | undefined> {\n\tif (entry.tokenEnv) {\n\t\tconst envToken = trimString(process.env[entry.tokenEnv]);\n\t\tif (envToken) {\n\t\t\treturn envToken;\n\t\t}\n\t}\n\tif (entry.tokenFile) {\n\t\treturn trimString(await readFile(expandHome(entry.tokenFile), \"utf8\"));\n\t}\n\treturn undefined;\n}\n\nexport function normalizePeerName(name: string | undefined): string {\n\tconst normalized = name?.trim();\n\tif (!normalized) {\n\t\tthrow new Error(\"A2A peer name is required\");\n\t}\n\tif (!/^[A-Za-z0-9_.-]{1,80}$/u.test(normalized)) {\n\t\tthrow new Error(\n\t\t\t\"A2A peer names may only contain letters, numbers, dots, underscores, and dashes\",\n\t\t);\n\t}\n\treturn normalized;\n}\n\nfunction resolveUpsertTokenFields(input: {\n\tpreviousTokenEnv?: string;\n\tpreviousTokenFile?: string;\n\ttokenEnv?: string;\n\ttokenFile?: string;\n\tretainExisting?: boolean;\n}): Pick<A2APeerRegistryEntry, \"tokenEnv\" | \"tokenFile\"> {\n\tconst tokenEnv = trimString(input.tokenEnv);\n\tconst tokenFile = trimString(input.tokenFile);\n\tif (tokenEnv && tokenFile) {\n\t\treturn { tokenEnv, tokenFile: expandHome(tokenFile) };\n\t}\n\tif (tokenEnv) {\n\t\treturn { tokenEnv };\n\t}\n\tif (tokenFile) {\n\t\treturn { tokenFile: expandHome(tokenFile) };\n\t}\n\tif (!input.retainExisting) {\n\t\treturn {};\n\t}\n\treturn {\n\t\t...(input.previousTokenEnv ? { tokenEnv: input.previousTokenEnv } : {}),\n\t\t...(input.previousTokenFile ? { tokenFile: input.previousTokenFile } : {}),\n\t};\n}\n\nfunction normalizedPeerUrl(url: string): string | undefined {\n\tconst peerUrl = trimString(url);\n\treturn peerUrl ? normalizeA2ABaseUrl(peerUrl) : undefined;\n}\n\nfunction identityFieldChanged(\n\tpreviousValue: string | undefined,\n\tnextValue: string | undefined,\n): boolean {\n\tconst previous = trimString(previousValue);\n\tconst next = trimString(nextValue);\n\treturn Boolean(previous && next && previous !== next);\n}\n\nfunction identityOptionalFieldChanged(\n\tpreviousValue: string | undefined,\n\tnextValue: string | undefined,\n): boolean {\n\tconst previous = trimString(previousValue);\n\tconst next = trimString(nextValue);\n\treturn previous !== next;\n}\n\nfunction normalizeRegistryEntry(\n\tinput: unknown,\n\tlabel: string,\n): A2APeerRegistryEntry {\n\tif (!isRecord(input)) {\n\t\tthrow new Error(`${label} must be an object`);\n\t}\n\tconst url = typeof input.url === \"string\" ? input.url.trim() : \"\";\n\tif (!url) {\n\t\tthrow new Error(`${label}.url is required`);\n\t}\n\treturn {\n\t\turl,\n\t\t...copyString(input, \"displayName\"),\n\t\t...copyString(input, \"agentCardUrl\"),\n\t\t...copyString(input, \"protocolBinding\"),\n\t\t...copyString(input, \"protocolVersion\"),\n\t\t...copyString(input, \"tokenEnv\"),\n\t\t...copyString(input, \"tokenFile\"),\n\t\t...copyString(input, \"organizationId\"),\n\t\t...copyString(input, \"workspaceId\"),\n\t\t...copyString(input, \"agentId\"),\n\t\t...copyString(input, \"sessionId\"),\n\t\t...copyString(input, \"actorId\"),\n\t\t...(typeof input.timeoutMs === \"number\" && input.timeoutMs > 0\n\t\t\t? { timeoutMs: input.timeoutMs }\n\t\t\t: {}),\n\t\t...(typeof input.maxAttempts === \"number\" && input.maxAttempts > 0\n\t\t\t? { maxAttempts: input.maxAttempts }\n\t\t\t: {}),\n\t\t...(isRecord(input.capabilities)\n\t\t\t? {\n\t\t\t\t\tcapabilities: {\n\t\t\t\t\t\t...(typeof input.capabilities.streaming === \"boolean\"\n\t\t\t\t\t\t\t? { streaming: input.capabilities.streaming }\n\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t\t...(typeof input.capabilities.pushNotifications === \"boolean\"\n\t\t\t\t\t\t\t? { pushNotifications: input.capabilities.pushNotifications }\n\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t\t...(typeof input.capabilities.extendedAgentCard === \"boolean\"\n\t\t\t\t\t\t\t? { extendedAgentCard: input.capabilities.extendedAgentCard }\n\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t: {}),\n\t\t...(Array.isArray(input.skills)\n\t\t\t? { skills: normalizeRegistrySkills(input.skills) }\n\t\t\t: {}),\n\t\t...copyString(input, \"keyFingerprint\"),\n\t\t...(isRecord(input.metadata)\n\t\t\t? {\n\t\t\t\t\tmetadata: input.metadata as Record<string, string | number | boolean>,\n\t\t\t\t}\n\t\t\t: {}),\n\t\t...copyString(input, \"createdAt\"),\n\t\t...copyString(input, \"updatedAt\"),\n\t};\n}\n\nfunction normalizeRegistrySkills(\n\tinput: readonly unknown[],\n): A2APeerConnection[\"skills\"] {\n\treturn input\n\t\t.filter(isRecord)\n\t\t.map((skill) => ({\n\t\t\tid: typeof skill.id === \"string\" ? skill.id : \"\",\n\t\t\tname: typeof skill.name === \"string\" ? skill.name : \"\",\n\t\t\t...copyString(skill, \"description\"),\n\t\t\t...copyStringList(skill, \"tags\"),\n\t\t\t...copyStringList(skill, \"examples\"),\n\t\t\t...copyStringList(skill, \"inputModes\"),\n\t\t\t...copyStringList(skill, \"outputModes\"),\n\t\t\t...copyStringList(skill, \"requiredContextGrants\"),\n\t\t\t...copyString(skill, \"approvalPolicyRef\"),\n\t\t\t...copyString(skill, \"maxAutonomy\"),\n\t\t\t...copyStringList(skill, \"requiredArtifactKinds\"),\n\t\t\t...copyStringList(skill, \"optionalArtifactKinds\"),\n\t\t\t...copyStringList(skill, \"allowedTaskClasses\"),\n\t\t\t...copyStringList(skill, \"deniedTaskClasses\"),\n\t\t\t...copyStringRecord(skill, \"attributes\"),\n\t\t\t...copyPrimitiveRecord(skill, \"metadata\"),\n\t\t}))\n\t\t.filter((skill) => skill.id.trim() && skill.name.trim());\n}\n\nfunction copyStringList(\n\tinput: Record<string, unknown>,\n\tkey: string,\n): Record<string, string[]> {\n\tconst value = input[key];\n\tif (!Array.isArray(value)) {\n\t\treturn {};\n\t}\n\tconst strings = value\n\t\t.filter((item): item is string => typeof item === \"string\")\n\t\t.map((item) => item.trim())\n\t\t.filter(Boolean);\n\treturn strings.length > 0 ? { [key]: strings } : {};\n}\n\nfunction copyStringRecord(\n\tinput: Record<string, unknown>,\n\tkey: string,\n): Record<string, Record<string, string>> {\n\tconst value = input[key];\n\tif (!isRecord(value)) {\n\t\treturn {};\n\t}\n\tconst entries = Object.entries(value)\n\t\t.map(([entryKey, entryValue]) => [\n\t\t\tentryKey.trim(),\n\t\t\ttypeof entryValue === \"string\" ? entryValue.trim() : \"\",\n\t\t])\n\t\t.filter(\n\t\t\t(entry): entry is [string, string] =>\n\t\t\t\tBoolean(entry[0]) && Boolean(entry[1]),\n\t\t);\n\treturn entries.length > 0 ? { [key]: Object.fromEntries(entries) } : {};\n}\n\nfunction copyPrimitiveRecord(\n\tinput: Record<string, unknown>,\n\tkey: string,\n): Record<string, Record<string, string | number | boolean>> {\n\tconst value = input[key];\n\tif (!isRecord(value)) {\n\t\treturn {};\n\t}\n\tconst output: Record<string, string | number | boolean> = {};\n\tfor (const [entryKey, entryValue] of Object.entries(value)) {\n\t\tconst normalizedKey = entryKey.trim();\n\t\tif (!normalizedKey) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (\n\t\t\ttypeof entryValue === \"string\" ||\n\t\t\ttypeof entryValue === \"number\" ||\n\t\t\ttypeof entryValue === \"boolean\"\n\t\t) {\n\t\t\toutput[normalizedKey] =\n\t\t\t\ttypeof entryValue === \"string\" ? entryValue.trim() : entryValue;\n\t\t}\n\t}\n\treturn Object.keys(output).length > 0 ? { [key]: output } : {};\n}\n\nfunction copyString(\n\tinput: Record<string, unknown>,\n\tkey: string,\n): Record<string, string> {\n\tconst value = input[key];\n\treturn typeof value === \"string\" && value.trim()\n\t\t? { [key]: value.trim() }\n\t\t: {};\n}\n\nfunction expandHome(path: string): string {\n\tif (path === \"~\") {\n\t\treturn homedir();\n\t}\n\tif (path.startsWith(\"~/\")) {\n\t\treturn resolve(homedir(), path.slice(2));\n\t}\n\treturn resolve(path);\n}\n\nfunction hasNodeCode(error: unknown, code: string): boolean {\n\treturn (\n\t\ttypeof error === \"object\" &&\n\t\terror !== null &&\n\t\t\"code\" in error &&\n\t\t(error as { code?: unknown }).code === code\n\t);\n}\n"]}
|
|
@@ -32,6 +32,19 @@ export interface A2ATaskLedgerEntry {
|
|
|
32
32
|
export interface A2ATaskLedgerFile {
|
|
33
33
|
tasks: A2ATaskLedgerEntry[];
|
|
34
34
|
}
|
|
35
|
+
export type A2ATaskEvidenceGap = "terminal-completion" | "work-graph" | "response-artifact" | "transcript";
|
|
36
|
+
export interface A2ATaskLedgerRollup {
|
|
37
|
+
taskCount: number;
|
|
38
|
+
delegatedTaskCount: number;
|
|
39
|
+
completedTaskCount: number;
|
|
40
|
+
failedTaskCount: number;
|
|
41
|
+
actionRequiredTaskCount: number;
|
|
42
|
+
runningTaskCount: number;
|
|
43
|
+
workGraphTaskCount: number;
|
|
44
|
+
transcriptMessageCount: number;
|
|
45
|
+
auditReadyTaskCount: number;
|
|
46
|
+
evidenceGapCount: number;
|
|
47
|
+
}
|
|
35
48
|
export interface A2ATaskLedgerOptions {
|
|
36
49
|
path?: string;
|
|
37
50
|
now?: Date;
|
|
@@ -78,9 +91,16 @@ export declare function updateA2ATaskInLedger(input: UpdateA2ATaskInput): Promis
|
|
|
78
91
|
export declare function listA2ATaskEntries(ledger: A2ATaskLedgerFile, options?: {
|
|
79
92
|
peer?: string;
|
|
80
93
|
}): A2ATaskLedgerEntry[];
|
|
94
|
+
export declare function summarizeA2ATaskLedger(tasks: readonly A2ATaskLedgerEntry[]): A2ATaskLedgerRollup;
|
|
95
|
+
export declare function isAuditReadyA2ATask(task: A2ATaskLedgerEntry): boolean;
|
|
96
|
+
export declare function isAuditReadyA2ADelegationTask(task: A2ATaskLedgerEntry): boolean;
|
|
97
|
+
export declare function a2aTaskEvidenceGaps(task: A2ATaskLedgerEntry): A2ATaskEvidenceGap[];
|
|
81
98
|
export declare function latestA2ATaskForPeer(ledger: A2ATaskLedgerFile, peer: string): A2ATaskLedgerEntry | undefined;
|
|
82
99
|
export declare function extractA2ATaskText(task: A2ATask): string | undefined;
|
|
83
100
|
export declare function isTerminalA2AState(state: string): boolean;
|
|
101
|
+
export declare function normalizeA2AState(state: string): string;
|
|
102
|
+
export declare function isCompletedA2AState(state: string): boolean;
|
|
103
|
+
export declare function isFailedA2AState(state: string): boolean;
|
|
84
104
|
export declare function isFinalA2AState(state: string): boolean;
|
|
85
105
|
export declare function isActionRequiredA2AState(state: string): boolean;
|
|
86
106
|
//# sourceMappingURL=a2a-task-ledger.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"a2a-task-ledger.d.ts","sourceRoot":"","sources":["../../src/platform/a2a-task-ledger.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"a2a-task-ledger.d.ts","sourceRoot":"","sources":["../../src/platform/a2a-task-ledger.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,10 +2,12 @@ import { randomUUID } from "node:crypto";
|
|
|
2
2
|
import { mkdir, readFile, rename, rm, stat, writeFile } from "node:fs/promises";
|
|
3
3
|
import { homedir } from "node:os";
|
|
4
4
|
import { dirname, join } from "node:path";
|
|
5
|
+
import { isRecord } from "../utils/json.js";
|
|
5
6
|
import { extractA2AWorkGraphMetadata, normalizeA2AWorkGraphMetadata, } from "./a2a-work-graph.js";
|
|
6
7
|
import { getEnvValue, trimString } from "./client.js";
|
|
7
|
-
const
|
|
8
|
-
const
|
|
8
|
+
const COMPLETED_STATE_PATTERN = /^(?:(?:TASK_)?STATE_)?(?:COMPLETED|SUCCEEDED|SUCCESS)$/u;
|
|
9
|
+
const FAILED_STATE_PATTERN = /^(?:(?:TASK_)?STATE_)?(?:FAILED|CANCELED|CANCELLED|REJECTED)$/u;
|
|
10
|
+
const ACTION_REQUIRED_STATE_PATTERN = /^(?:(?:TASK_)?STATE_)?(?:INPUT_REQUIRED|AUTH_REQUIRED)$/u;
|
|
9
11
|
const LEDGER_LOCK_RETRY_MS = 25;
|
|
10
12
|
const LEDGER_LOCK_HEARTBEAT_MS = 10_000;
|
|
11
13
|
const LEDGER_LOCK_STALE_MS = 30_000;
|
|
@@ -389,6 +391,75 @@ export function listA2ATaskEntries(ledger, options = {}) {
|
|
|
389
391
|
.filter((entry) => !peer || entry.peer === peer)
|
|
390
392
|
.sort((left, right) => right.updatedAt.localeCompare(left.updatedAt));
|
|
391
393
|
}
|
|
394
|
+
export function summarizeA2ATaskLedger(tasks) {
|
|
395
|
+
const rollup = {
|
|
396
|
+
taskCount: tasks.length,
|
|
397
|
+
delegatedTaskCount: 0,
|
|
398
|
+
completedTaskCount: 0,
|
|
399
|
+
failedTaskCount: 0,
|
|
400
|
+
actionRequiredTaskCount: 0,
|
|
401
|
+
runningTaskCount: 0,
|
|
402
|
+
workGraphTaskCount: 0,
|
|
403
|
+
transcriptMessageCount: 0,
|
|
404
|
+
auditReadyTaskCount: 0,
|
|
405
|
+
evidenceGapCount: 0,
|
|
406
|
+
};
|
|
407
|
+
for (const task of tasks) {
|
|
408
|
+
if (task.kind === "delegation") {
|
|
409
|
+
rollup.delegatedTaskCount += 1;
|
|
410
|
+
}
|
|
411
|
+
if (isCompletedA2AState(task.state)) {
|
|
412
|
+
rollup.completedTaskCount += 1;
|
|
413
|
+
}
|
|
414
|
+
else if (isFailedA2AState(task.state)) {
|
|
415
|
+
rollup.failedTaskCount += 1;
|
|
416
|
+
}
|
|
417
|
+
else if (isActionRequiredA2AState(task.state)) {
|
|
418
|
+
rollup.actionRequiredTaskCount += 1;
|
|
419
|
+
}
|
|
420
|
+
else {
|
|
421
|
+
rollup.runningTaskCount += 1;
|
|
422
|
+
}
|
|
423
|
+
if (task.workGraph) {
|
|
424
|
+
rollup.workGraphTaskCount += 1;
|
|
425
|
+
}
|
|
426
|
+
rollup.transcriptMessageCount += task.transcript.length;
|
|
427
|
+
const gaps = a2aTaskEvidenceGaps(task);
|
|
428
|
+
rollup.evidenceGapCount += gaps.length;
|
|
429
|
+
if (task.kind === "delegation") {
|
|
430
|
+
if (gaps.length === 0) {
|
|
431
|
+
rollup.auditReadyTaskCount += 1;
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
return rollup;
|
|
436
|
+
}
|
|
437
|
+
export function isAuditReadyA2ATask(task) {
|
|
438
|
+
return a2aTaskEvidenceGaps(task).length === 0;
|
|
439
|
+
}
|
|
440
|
+
export function isAuditReadyA2ADelegationTask(task) {
|
|
441
|
+
return task.kind === "delegation" && isAuditReadyA2ATask(task);
|
|
442
|
+
}
|
|
443
|
+
export function a2aTaskEvidenceGaps(task) {
|
|
444
|
+
const gaps = [];
|
|
445
|
+
if (!isCompletedA2AState(task.state)) {
|
|
446
|
+
gaps.push("terminal-completion");
|
|
447
|
+
}
|
|
448
|
+
if (!task.workGraph) {
|
|
449
|
+
gaps.push("work-graph");
|
|
450
|
+
}
|
|
451
|
+
if (!trimString(task.responseText)) {
|
|
452
|
+
const hasAgentTranscript = task.transcript.some((entry) => entry.role === "agent" && Boolean(trimString(entry.text)));
|
|
453
|
+
if (!hasAgentTranscript) {
|
|
454
|
+
gaps.push("response-artifact");
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
const transcriptRoles = new Set(task.transcript.map((entry) => entry.role.toLowerCase()));
|
|
458
|
+
if (!transcriptRoles.has("user") || !transcriptRoles.has("agent")) {
|
|
459
|
+
gaps.push("transcript");
|
|
460
|
+
}
|
|
461
|
+
return gaps;
|
|
462
|
+
}
|
|
392
463
|
export function latestA2ATaskForPeer(ledger, peer) {
|
|
393
464
|
return listA2ATaskEntries(ledger, { peer })[0];
|
|
394
465
|
}
|
|
@@ -430,18 +501,33 @@ function shouldAppendAgentTranscript(entry, response) {
|
|
|
430
501
|
export function isTerminalA2AState(state) {
|
|
431
502
|
return isFinalA2AState(state) || isActionRequiredA2AState(state);
|
|
432
503
|
}
|
|
504
|
+
export function normalizeA2AState(state) {
|
|
505
|
+
return state
|
|
506
|
+
.trim()
|
|
507
|
+
.toUpperCase()
|
|
508
|
+
.replace(/[\s-]+/gu, "_");
|
|
509
|
+
}
|
|
510
|
+
export function isCompletedA2AState(state) {
|
|
511
|
+
return COMPLETED_STATE_PATTERN.test(normalizeA2AState(state));
|
|
512
|
+
}
|
|
513
|
+
export function isFailedA2AState(state) {
|
|
514
|
+
return FAILED_STATE_PATTERN.test(normalizeA2AState(state));
|
|
515
|
+
}
|
|
433
516
|
export function isFinalA2AState(state) {
|
|
434
|
-
return
|
|
517
|
+
return isCompletedA2AState(state) || isFailedA2AState(state);
|
|
435
518
|
}
|
|
436
519
|
export function isActionRequiredA2AState(state) {
|
|
437
|
-
return ACTION_REQUIRED_STATE_PATTERN.test(state
|
|
520
|
+
return ACTION_REQUIRED_STATE_PATTERN.test(normalizeA2AState(state));
|
|
438
521
|
}
|
|
439
522
|
function firstMessageText(message) {
|
|
440
523
|
return message?.parts.map((part) => trimString(part.text)).find(Boolean);
|
|
441
524
|
}
|
|
442
525
|
function isAgentMessage(message) {
|
|
443
|
-
|
|
444
|
-
|
|
526
|
+
return isAgentRole(message.role);
|
|
527
|
+
}
|
|
528
|
+
function isAgentRole(role) {
|
|
529
|
+
const normalizedRole = role.toUpperCase();
|
|
530
|
+
return normalizedRole === "ROLE_AGENT" || normalizedRole === "AGENT";
|
|
445
531
|
}
|
|
446
532
|
function latestAgentMessageInHistory(history) {
|
|
447
533
|
if (!history) {
|
|
@@ -499,17 +585,94 @@ function normalizeLedgerEntry(input, path) {
|
|
|
499
585
|
if (isRecord(input.metadata)) {
|
|
500
586
|
entry.metadata = cleanMetadata(input.metadata);
|
|
501
587
|
}
|
|
502
|
-
const
|
|
588
|
+
const embeddedTask = isRecord(input.a2aTask) ? input.a2aTask : undefined;
|
|
589
|
+
if (embeddedTask) {
|
|
590
|
+
const authoritativeTranscriptState = stringValue(entry.state);
|
|
591
|
+
entry.transcript = mergeTranscriptEntries(entry.transcript, transcriptFromA2AHistory(embeddedTask, updatedAt, authoritativeTranscriptState));
|
|
592
|
+
}
|
|
593
|
+
if (!entry.responseText) {
|
|
594
|
+
entry.responseText =
|
|
595
|
+
latestAgentTranscriptText(transcript) ??
|
|
596
|
+
latestAgentTranscriptText(entry.transcript);
|
|
597
|
+
}
|
|
598
|
+
if (!entry.responseText && embeddedTask) {
|
|
599
|
+
const response = extractA2ATaskResponse(embeddedTask);
|
|
600
|
+
if (response?.text) {
|
|
601
|
+
entry.responseText = response.text;
|
|
602
|
+
}
|
|
603
|
+
}
|
|
604
|
+
const embeddedWorkGraph = isRecord(embeddedTask?.metadata)
|
|
605
|
+
? embeddedTask.metadata.workGraph
|
|
606
|
+
: undefined;
|
|
607
|
+
const workGraph = normalizeA2AWorkGraphMetadata(input.workGraph) ??
|
|
608
|
+
normalizeA2AWorkGraphMetadata(embeddedWorkGraph);
|
|
503
609
|
if (workGraph) {
|
|
504
610
|
entry.workGraph = workGraph;
|
|
505
611
|
}
|
|
506
612
|
return entry;
|
|
507
613
|
}
|
|
614
|
+
function transcriptFromA2AHistory(task, fallbackAt, authoritativeState) {
|
|
615
|
+
return (task.history ?? [])
|
|
616
|
+
.map((message) => {
|
|
617
|
+
const text = firstMessageText(message);
|
|
618
|
+
if (!text) {
|
|
619
|
+
return undefined;
|
|
620
|
+
}
|
|
621
|
+
const role = isAgentMessage(message) ? "agent" : "user";
|
|
622
|
+
const entry = {
|
|
623
|
+
at: isRecord(message)
|
|
624
|
+
? (stringValue(message.at) ?? fallbackAt)
|
|
625
|
+
: fallbackAt,
|
|
626
|
+
role,
|
|
627
|
+
text,
|
|
628
|
+
};
|
|
629
|
+
const messageId = stringValue(message.messageId);
|
|
630
|
+
if (messageId) {
|
|
631
|
+
entry.messageId = messageId;
|
|
632
|
+
}
|
|
633
|
+
if (role === "agent") {
|
|
634
|
+
const state = authoritativeState ?? stringValue(task.status?.state);
|
|
635
|
+
if (state) {
|
|
636
|
+
entry.state = state;
|
|
637
|
+
}
|
|
638
|
+
}
|
|
639
|
+
return entry;
|
|
640
|
+
})
|
|
641
|
+
.filter((entry) => Boolean(entry));
|
|
642
|
+
}
|
|
643
|
+
function latestAgentTranscriptText(transcript) {
|
|
644
|
+
return [...transcript]
|
|
645
|
+
.reverse()
|
|
646
|
+
.find((entry) => entry.role === "agent" && Boolean(trimString(entry.text)))
|
|
647
|
+
?.text;
|
|
648
|
+
}
|
|
649
|
+
function mergeTranscriptEntries(base, extra) {
|
|
650
|
+
const merged = [...base];
|
|
651
|
+
for (const entry of extra) {
|
|
652
|
+
if (!transcriptHasMatchingEntry(merged, entry)) {
|
|
653
|
+
merged.push(entry);
|
|
654
|
+
}
|
|
655
|
+
}
|
|
656
|
+
return merged;
|
|
657
|
+
}
|
|
658
|
+
function transcriptHasMatchingEntry(entries, candidate) {
|
|
659
|
+
if (candidate.messageId) {
|
|
660
|
+
const idMatch = entries.find((entry) => entry.messageId === candidate.messageId);
|
|
661
|
+
if (idMatch) {
|
|
662
|
+
return true;
|
|
663
|
+
}
|
|
664
|
+
}
|
|
665
|
+
return entries.some((entry) => transcriptEntriesHaveSameRoleText(entry, candidate));
|
|
666
|
+
}
|
|
667
|
+
function transcriptEntriesHaveSameRoleText(entry, candidate) {
|
|
668
|
+
return (entry.role === candidate.role &&
|
|
669
|
+
trimString(entry.text) === trimString(candidate.text));
|
|
670
|
+
}
|
|
508
671
|
function normalizeTranscriptEntry(input, path) {
|
|
509
672
|
if (!isRecord(input)) {
|
|
510
673
|
throw new Error(`A2A task ledger ${path} must be a JSON object`);
|
|
511
674
|
}
|
|
512
|
-
const role = input.role
|
|
675
|
+
const role = normalizeTranscriptRole(input.role);
|
|
513
676
|
const entry = {
|
|
514
677
|
at: requiredString(input.at, `${path}.at`),
|
|
515
678
|
role,
|
|
@@ -523,6 +686,14 @@ function normalizeTranscriptEntry(input, path) {
|
|
|
523
686
|
}
|
|
524
687
|
return entry;
|
|
525
688
|
}
|
|
689
|
+
function normalizeTranscriptRole(input) {
|
|
690
|
+
const normalized = typeof input === "string"
|
|
691
|
+
? input.toUpperCase().replace(/[\s-]+/gu, "_")
|
|
692
|
+
: "";
|
|
693
|
+
return normalized === "AGENT" || normalized === "ROLE_AGENT"
|
|
694
|
+
? "agent"
|
|
695
|
+
: "user";
|
|
696
|
+
}
|
|
526
697
|
function cleanMetadata(input) {
|
|
527
698
|
if (!input) {
|
|
528
699
|
return undefined;
|
|
@@ -544,6 +715,9 @@ function mergeLedgerMetadata(...inputs) {
|
|
|
544
715
|
}
|
|
545
716
|
function isSecretLikeKey(key) {
|
|
546
717
|
const normalized = key.toLowerCase().replace(/[-_]/gu, "");
|
|
718
|
+
if (isTokenMetricKey(normalized)) {
|
|
719
|
+
return false;
|
|
720
|
+
}
|
|
547
721
|
return (normalized === "authorization" ||
|
|
548
722
|
normalized === "token" ||
|
|
549
723
|
normalized.endsWith("token") ||
|
|
@@ -557,6 +731,31 @@ function isSecretLikeKey(key) {
|
|
|
557
731
|
normalized.endsWith("credentials") ||
|
|
558
732
|
normalized === "bearer");
|
|
559
733
|
}
|
|
734
|
+
function isTokenMetricKey(normalized) {
|
|
735
|
+
return TOKEN_METRIC_METADATA_KEYS.has(normalized);
|
|
736
|
+
}
|
|
737
|
+
const TOKEN_METRIC_METADATA_KEYS = new Set([
|
|
738
|
+
"totaltoken",
|
|
739
|
+
"totaltokens",
|
|
740
|
+
"inputtoken",
|
|
741
|
+
"inputtokens",
|
|
742
|
+
"outputtoken",
|
|
743
|
+
"outputtokens",
|
|
744
|
+
"cachetoken",
|
|
745
|
+
"cachetokens",
|
|
746
|
+
"cachereadtoken",
|
|
747
|
+
"cachereadtokens",
|
|
748
|
+
"cachewritetoken",
|
|
749
|
+
"cachewritetokens",
|
|
750
|
+
"prompttoken",
|
|
751
|
+
"prompttokens",
|
|
752
|
+
"completiontoken",
|
|
753
|
+
"completiontokens",
|
|
754
|
+
"maxtoken",
|
|
755
|
+
"maxtokens",
|
|
756
|
+
"tokencount",
|
|
757
|
+
"tokenscount",
|
|
758
|
+
]);
|
|
560
759
|
function stringValue(input) {
|
|
561
760
|
return typeof input === "string" ? trimString(input) : undefined;
|
|
562
761
|
}
|
|
@@ -578,9 +777,6 @@ function hasNodeCode(error, code) {
|
|
|
578
777
|
function sleep(ms) {
|
|
579
778
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
580
779
|
}
|
|
581
|
-
function isRecord(value) {
|
|
582
|
-
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
583
|
-
}
|
|
584
780
|
function fail(message) {
|
|
585
781
|
throw new Error(message);
|
|
586
782
|
}
|