@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":"agent-bootstrap.js","sourceRoot":"","sources":["../../src/evalops/agent-bootstrap.ts"],"names":[],"mappings":"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","sourcesContent":["import { hostname } from \"node:os\";\nimport { Client } from \"@modelcontextprotocol/sdk/client/index.js\";\nimport { StreamableHTTPClientTransport } from \"@modelcontextprotocol/sdk/client/streamableHttp.js\";\nimport type { CallToolResult } from \"@modelcontextprotocol/sdk/types.js\";\nimport { getOAuthToken, hasOAuthCredentials, login } from \"../oauth/index.js\";\nimport {\n\ttype OAuthCredentials,\n\tloadOAuthCredentials,\n\tsaveOAuthCredentials,\n} from \"../oauth/storage.js\";\nimport { getPackageVersion } from \"../package-metadata.js\";\nimport { getEnvValue, normalizeBaseUrl } from \"../platform/client.js\";\nimport { PLATFORM_HTTP_ROUTES } from \"../platform/core-services.js\";\nimport {\n\ttype EvalOpsAgentMcpMetadata,\n\tgetStoredAgentMcpMetadata,\n} from \"./agent-mcp-metadata.js\";\n\nexport {\n\ttype EvalOpsAgentMcpMetadata,\n\tgetStoredEvalOpsAgentMcpMetadata,\n} from \"./agent-mcp-metadata.js\";\n\nconst DEFAULT_AGENT_MCP_BASE_URL = \"https://app.evalops.dev\";\nconst DEFAULT_IDENTITY_BASE_URL = \"https://identity.evalops.dev\";\nconst AGENT_MCP_MANIFEST_PATH = \"/.well-known/evalops/agent-mcp.json\";\nconst AGENT_MCP_PATH = \"/mcp\";\nconst DEFAULT_AGENT_TYPE = \"maestro\";\nconst DEFAULT_SURFACE = \"cli\";\nconst DEFAULT_AGENT_NEUTRAL_CAPABILITIES = [\n\t\"mcp\",\n\t\"tool.use\",\n\t\"responses:create\",\n];\nconst DEFAULT_MAESTRO_AGENT_CAPABILITIES = [\n\t\"maestro:init\",\n\t\"maestro:cli\",\n\t\"conversation:manage\",\n\t\"workflow:orchestrate\",\n\t\"code:write\",\n\t\"code:review\",\n\t\"code:test\",\n\t\"shell\",\n\t\"git\",\n\t\"fs\",\n\t\"mcp\",\n\t\"tool.use\",\n\t\"research\",\n\t\"responses:create\",\n];\nconst DEFAULT_API_KEY_SCOPES = [\n\t\"agent:register\",\n\t\"agent:heartbeat\",\n\t\"governance:evaluate\",\n\t\"llm_gateway:invoke\",\n\t\"memories:read\",\n\t\"memories:write\",\n\t\"meter:record\",\n];\n\nexport interface EvalOpsInitOptions {\n\tagentType?: string;\n\tapiKeyScopes?: string[];\n\tcapabilities?: string[];\n\texpiresInDays?: number;\n\tforceLogin?: boolean;\n\tintegrationProfile?: string;\n\tjson?: boolean;\n\tkeyName?: string;\n\tmanifestUrl?: string;\n\tmemoryMode?: string;\n\tmcpUrl?: string;\n\tregisterScopes?: string[];\n\trotateKey?: boolean;\n\truntimeOwner?: string;\n\tshimType?: string;\n\tsurface?: string;\n\ttraceMode?: string;\n\tttlSeconds?: number;\n\tworkspaceId?: string;\n}\n\nexport interface EvalOpsInitResult {\n\tagentId?: string;\n\tapiKeyCreated: boolean;\n\tapprovalPolicyAttached?: boolean;\n\tauthenticatedAs?: string;\n\tconsoleUrl?: string;\n\tendpoint: string;\n\tevidenceEventPublished?: boolean;\n\tevidenceEvents?: number;\n\tgovernedActionsLoaded?: number;\n\tgovernedInferenceCheckRan?: boolean;\n\tintegrationProfile?: string;\n\tkeyPrefix?: string;\n\tmanifestUrl?: string;\n\tmemoryMode?: string;\n\torganizationId?: string;\n\tregistryVisible?: boolean;\n\triskFindings?: number;\n\trunId?: string;\n\truntimeOwner?: string;\n\tscopesGranted?: string[];\n\tsessionExpiresAt?: string;\n\tshimType?: string;\n\tstored: boolean;\n\ttraceIngestionStarted?: boolean;\n\ttraceMode?: string;\n}\n\nexport interface EvalOpsInitStatus {\n\tmessage: string;\n}\n\nexport interface EvalOpsInitDependencies {\n\tcreateMcpClient?: (endpoint: string, bearerToken: string) => EvalOpsMcpClient;\n\tfetch?: typeof fetch;\n\tgetOAuthToken?: typeof getOAuthToken;\n\thasOAuthCredentials?: typeof hasOAuthCredentials;\n\tloadCredentials?: typeof loadOAuthCredentials;\n\tlogin?: typeof login;\n\tnow?: () => Date;\n\tonAuthUrl?: (url: string) => void;\n\tonStatus?: (status: EvalOpsInitStatus) => void;\n\tsaveCredentials?: typeof saveOAuthCredentials;\n}\n\nexport interface EvalOpsMcpClient {\n\tcallTool(\n\t\tname: string,\n\t\targs: Record<string, unknown>,\n\t): Promise<CallToolResult>;\n\tclose(): Promise<void>;\n\tconnect(): Promise<void>;\n}\n\ninterface CreateAPIKeyOutput {\n\tapi_key: string;\n\texpires_at?: string;\n\tkey_id?: string;\n\tname?: string;\n\tprefix?: string;\n\tscopes?: string[];\n}\n\ninterface CreateAPIKeyHTTPOutput extends Partial<CreateAPIKeyOutput> {\n\terror?: string;\n\tkey?: Record<string, unknown>;\n\tscopes_granted?: unknown;\n}\n\ninterface RegisterOutput {\n\tagent_id?: string;\n\texpires_at?: string;\n\tintegration_profile?: string;\n\tmemory_mode?: string;\n\tregistered?: boolean;\n\tregistry_visible?: boolean;\n\trun_id?: string;\n\truntime_owner?: string;\n\tscopes_denied?: string[];\n\tscopes_granted?: string[];\n\tshim_type?: string;\n\ttrace_mode?: string;\n}\n\ninterface CheckActionOutput {\n\tdecision?: string;\n\trisk_level?: string;\n\treasons?: string[];\n}\n\ninterface ControlPlaneSummaryOutput {\n\tevidence?: unknown[];\n\tfindings?: unknown[];\n\tmetrics?: {\n\t\tapproval_required_tools?: number;\n\t\thigh_risk_tools?: number;\n\t\ttotal_tools?: number;\n\t};\n\tpolicy_controls?: unknown[];\n\ttools?: unknown[];\n}\n\ninterface AgentMcpEndpoint {\n\tendpoint: string;\n\tidentityBaseUrl?: string;\n\tmanifestUrl?: string;\n\tpreferDerivedIdentity?: boolean;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction nonEmptyString(value: unknown): string | undefined {\n\treturn typeof value === \"string\" && value.trim().length > 0\n\t\t? value.trim()\n\t\t: undefined;\n}\n\nfunction stringArray(value: unknown): string[] | undefined {\n\tif (!Array.isArray(value)) {\n\t\treturn undefined;\n\t}\n\tconst values = value\n\t\t.map((entry) => nonEmptyString(entry))\n\t\t.filter((entry): entry is string => Boolean(entry));\n\treturn values.length > 0 ? values : undefined;\n}\n\nfunction positiveInteger(value: number | undefined): number | undefined {\n\treturn typeof value === \"number\" && Number.isInteger(value) && value > 0\n\t\t? value\n\t\t: undefined;\n}\n\nfunction normalizeMcpEndpoint(url: string): string {\n\tconst normalized = normalizeBaseUrl(url);\n\tconst parsed = new URL(normalized);\n\tif (\n\t\tparsed.pathname === \"\" ||\n\t\tparsed.pathname === \"/\" ||\n\t\tparsed.pathname === AGENT_MCP_MANIFEST_PATH\n\t) {\n\t\tparsed.pathname = AGENT_MCP_PATH;\n\t\tparsed.search = \"\";\n\t\tparsed.hash = \"\";\n\t}\n\treturn normalizeBaseUrl(parsed.toString());\n}\n\nfunction normalizeManifestUrl(url: string): string {\n\tconst normalized = normalizeBaseUrl(url);\n\tconst parsed = new URL(normalized);\n\tif (parsed.pathname === \"\" || parsed.pathname === \"/\") {\n\t\tparsed.pathname = AGENT_MCP_MANIFEST_PATH;\n\t}\n\treturn parsed.toString();\n}\n\nfunction resolveIdentityBaseUrl(\n\tcredentials: OAuthCredentials | null,\n\tendpoint?: AgentMcpEndpoint,\n): string {\n\tconst configured = getEnvValue([\n\t\t\"MAESTRO_IDENTITY_URL\",\n\t\t\"EVALOPS_IDENTITY_URL\",\n\t\t\"MAESTRO_PLATFORM_BASE_URL\",\n\t\t\"MAESTRO_EVALOPS_BASE_URL\",\n\t\t\"EVALOPS_BASE_URL\",\n\t]);\n\tconst stored =\n\t\ttypeof credentials?.metadata?.identityBaseUrl === \"string\"\n\t\t\t? credentials.metadata.identityBaseUrl\n\t\t\t: undefined;\n\tconst derived = identityBaseUrlFromMcpEndpoint(endpoint?.endpoint);\n\tconst storedBeforeDerived = endpoint\n\t\t? !endpoint.preferDerivedIdentity && isCustomMcpEndpoint(endpoint.endpoint)\n\t\t: false;\n\treturn normalizeBaseUrl(\n\t\tconfigured ??\n\t\t\tendpoint?.identityBaseUrl ??\n\t\t\t(endpoint?.preferDerivedIdentity ? derived : undefined) ??\n\t\t\t(storedBeforeDerived ? stored : undefined) ??\n\t\t\tderived ??\n\t\t\tstored ??\n\t\t\tDEFAULT_IDENTITY_BASE_URL,\n\t\tObject.values(PLATFORM_HTTP_ROUTES.identity),\n\t);\n}\n\nfunction isCustomMcpEndpoint(endpoint: string): boolean {\n\tconst parsed = new URL(normalizeBaseUrl(endpoint));\n\treturn (\n\t\tparsed.hostname !== \"app.evalops.dev\" &&\n\t\tparsed.hostname !== \"staging.evalops.dev\"\n\t);\n}\n\nfunction identityBaseUrlFromMcpEndpoint(\n\tendpoint: string | undefined,\n): string | undefined {\n\tif (!endpoint) {\n\t\treturn undefined;\n\t}\n\tconst parsed = new URL(normalizeBaseUrl(endpoint));\n\tif (parsed.hostname === \"app.evalops.dev\") {\n\t\treturn DEFAULT_IDENTITY_BASE_URL;\n\t}\n\tif (parsed.hostname === \"staging.evalops.dev\") {\n\t\treturn \"https://api.staging.evalops.dev\";\n\t}\n\tif (parsed.hostname.startsWith(\"app.\")) {\n\t\tparsed.hostname = `identity.${parsed.hostname.slice(\"app.\".length)}`;\n\t}\n\tparsed.pathname = \"\";\n\tparsed.search = \"\";\n\tparsed.hash = \"\";\n\treturn normalizeBaseUrl(parsed.toString());\n}\n\nasync function resolveEndpointFromManifest(\n\tmanifestUrl: string,\n\tfetchImpl: typeof fetch,\n): Promise<AgentMcpEndpoint> {\n\tconst response = await fetchImpl(manifestUrl, {\n\t\theaders: { accept: \"application/json\" },\n\t});\n\tif (!response.ok) {\n\t\tthrow new Error(\n\t\t\t`Failed to fetch EvalOps MCP manifest (${response.status} ${response.statusText})`,\n\t\t);\n\t}\n\tconst payload = (await response.json()) as unknown;\n\tconst payloadRecord = isRecord(payload) ? payload : undefined;\n\tconst protocol =\n\t\tpayloadRecord && isRecord(payloadRecord.protocol)\n\t\t\t? payloadRecord.protocol\n\t\t\t: undefined;\n\tconst endpoint = nonEmptyString(protocol?.endpoint);\n\tif (!endpoint) {\n\t\tthrow new Error(\"EvalOps MCP manifest did not include protocol.endpoint\");\n\t}\n\tconst identity = payloadRecord?.identity;\n\tconst identityBaseUrl =\n\t\tnonEmptyString(isRecord(identity) ? identity.base_url : undefined) ??\n\t\tnonEmptyString(isRecord(identity) ? identity.baseUrl : undefined) ??\n\t\tnonEmptyString(isRecord(identity) ? identity.url : undefined) ??\n\t\tnonEmptyString(payloadRecord?.identity_base_url) ??\n\t\tnonEmptyString(payloadRecord?.identityBaseUrl);\n\treturn {\n\t\tendpoint: normalizeMcpEndpoint(endpoint),\n\t\tidentityBaseUrl,\n\t\tmanifestUrl,\n\t\tpreferDerivedIdentity: true,\n\t};\n}\n\nasync function resolveAgentMcpEndpoint(\n\toptions: EvalOpsInitOptions,\n\tdeps: Required<Pick<EvalOpsInitDependencies, \"fetch\" | \"loadCredentials\">>,\n): Promise<AgentMcpEndpoint> {\n\tif (options.mcpUrl) {\n\t\treturn {\n\t\t\tendpoint: normalizeMcpEndpoint(options.mcpUrl),\n\t\t\tpreferDerivedIdentity: true,\n\t\t};\n\t}\n\tif (options.manifestUrl) {\n\t\treturn resolveEndpointFromManifest(\n\t\t\tnormalizeManifestUrl(options.manifestUrl),\n\t\t\tdeps.fetch,\n\t\t);\n\t}\n\n\tconst configuredMcpUrl = getEnvValue([\n\t\t\"MAESTRO_PLATFORM_MCP_URL\",\n\t\t\"MAESTRO_AGENT_MCP_URL\",\n\t\t\"MAESTRO_EVALOPS_AGENT_MCP_URL\",\n\t]);\n\tif (configuredMcpUrl) {\n\t\treturn {\n\t\t\tendpoint: normalizeMcpEndpoint(configuredMcpUrl),\n\t\t\tpreferDerivedIdentity: true,\n\t\t};\n\t}\n\n\tconst configuredManifestUrl = getEnvValue([\n\t\t\"MAESTRO_PLATFORM_MCP_MANIFEST_URL\",\n\t\t\"MAESTRO_AGENT_MCP_MANIFEST_URL\",\n\t\t\"MAESTRO_EVALOPS_AGENT_MCP_MANIFEST_URL\",\n\t]);\n\tif (configuredManifestUrl) {\n\t\treturn resolveEndpointFromManifest(\n\t\t\tnormalizeManifestUrl(configuredManifestUrl),\n\t\t\tdeps.fetch,\n\t\t);\n\t}\n\n\tconst stored = getStoredAgentMcpMetadata(deps.loadCredentials(\"evalops\"));\n\tif (stored?.endpoint) {\n\t\treturn {\n\t\t\tendpoint: normalizeMcpEndpoint(stored.endpoint),\n\t\t\tmanifestUrl: stored.manifestUrl,\n\t\t};\n\t}\n\n\treturn resolveEndpointFromManifest(\n\t\t`${DEFAULT_AGENT_MCP_BASE_URL}${AGENT_MCP_MANIFEST_PATH}`,\n\t\tdeps.fetch,\n\t);\n}\n\nfunction createDefaultMcpClient(\n\tendpoint: string,\n\tbearerToken: string,\n): EvalOpsMcpClient {\n\tconst client = new Client(\n\t\t{\n\t\t\tname: \"maestro\",\n\t\t\tversion: getPackageVersion(),\n\t\t},\n\t\t{\n\t\t\tcapabilities: {},\n\t\t},\n\t);\n\tconst headers = {\n\t\taccept: \"application/json, text/event-stream\",\n\t\t\"content-type\": \"application/json\",\n\t\t...(bearerToken ? { authorization: `Bearer ${bearerToken}` } : {}),\n\t};\n\tconst transport = new StreamableHTTPClientTransport(new URL(endpoint), {\n\t\trequestInit: {\n\t\t\theaders,\n\t\t},\n\t});\n\treturn {\n\t\tcallTool: (name, args) =>\n\t\t\tclient.callTool({\n\t\t\t\tname,\n\t\t\t\targuments: args,\n\t\t\t}) as Promise<CallToolResult>,\n\t\tclose: () => client.close(),\n\t\tconnect: () => client.connect(transport),\n\t};\n}\n\nasync function callConnectedMcpTool<T>(\n\tclient: EvalOpsMcpClient,\n\ttoolName: string,\n\targs: Record<string, unknown>,\n): Promise<T> {\n\tconst result = await client.callTool(toolName, args);\n\tif (result.isError) {\n\t\tthrow new Error(`${toolName} returned an MCP error`);\n\t}\n\treturn parseToolOutput<T>(toolName, result);\n}\n\nfunction parseToolOutput<T>(toolName: string, result: CallToolResult): T {\n\tconst structuredContent = isRecord(result.structuredContent)\n\t\t? result.structuredContent\n\t\t: undefined;\n\tif (structuredContent) {\n\t\treturn structuredContent as T;\n\t}\n\tconst text = Array.isArray(result.content)\n\t\t? result.content\n\t\t\t\t.map((entry) =>\n\t\t\t\t\tentry.type === \"text\" && typeof entry.text === \"string\"\n\t\t\t\t\t\t? entry.text\n\t\t\t\t\t\t: undefined,\n\t\t\t\t)\n\t\t\t\t.find((entry): entry is string => Boolean(entry))\n\t\t: undefined;\n\tif (text) {\n\t\tconst parsed = JSON.parse(text) as unknown;\n\t\tif (isRecord(parsed)) {\n\t\t\treturn parsed as T;\n\t\t}\n\t}\n\tthrow new Error(`${toolName} did not return structured JSON output`);\n}\n\nasync function ensureEvalOpsLogin(\n\toptions: EvalOpsInitOptions,\n\tdeps: Required<\n\t\tPick<\n\t\t\tEvalOpsInitDependencies,\n\t\t\t| \"getOAuthToken\"\n\t\t\t| \"hasOAuthCredentials\"\n\t\t\t| \"login\"\n\t\t\t| \"onAuthUrl\"\n\t\t\t| \"onStatus\"\n\t\t>\n\t>,\n): Promise<string> {\n\tif (options.forceLogin || !deps.hasOAuthCredentials(\"evalops\")) {\n\t\tdeps.onStatus({ message: \"Opening EvalOps login\" });\n\t\tawait deps.login(\"evalops\", {\n\t\t\tonAuthUrl: deps.onAuthUrl,\n\t\t\tonStatus: (message) => deps.onStatus({ message }),\n\t\t});\n\t}\n\n\tlet token = await deps.getOAuthToken(\"evalops\");\n\tif (!token) {\n\t\tdeps.onStatus({ message: \"Refreshing EvalOps login\" });\n\t\tawait deps.login(\"evalops\", {\n\t\t\tonAuthUrl: deps.onAuthUrl,\n\t\t\tonStatus: (message) => deps.onStatus({ message }),\n\t\t});\n\t\ttoken = await deps.getOAuthToken(\"evalops\");\n\t}\n\tif (!token) {\n\t\tthrow new Error(\"EvalOps login did not produce an access token\");\n\t}\n\treturn token;\n}\n\nfunction buildKeyName(options: EvalOpsInitOptions, now: Date): string {\n\tif (options.keyName?.trim()) {\n\t\treturn options.keyName.trim();\n\t}\n\tconst host = hostname()\n\t\t.replace(/[^a-zA-Z0-9._-]+/gu, \"-\")\n\t\t.slice(0, 48);\n\treturn `maestro-init-${host || \"local\"}-${now.toISOString().slice(0, 10)}`;\n}\n\nfunction integrationProfileForOptions(options: EvalOpsInitOptions): string {\n\treturn (\n\t\tnonEmptyString(options.integrationProfile) ??\n\t\t(options.agentType && options.agentType !== DEFAULT_AGENT_TYPE\n\t\t\t? \"mcp_otlp\"\n\t\t\t: \"managed_runtime\")\n\t);\n}\n\nfunction shimTypeForOptions(options: EvalOpsInitOptions): string {\n\treturn (\n\t\tnonEmptyString(options.shimType) ??\n\t\t(integrationProfileForOptions(options) === \"managed_runtime\"\n\t\t\t? \"sdk\"\n\t\t\t: \"native_mcp\")\n\t);\n}\n\nfunction traceModeForOptions(options: EvalOpsInitOptions): string {\n\treturn (\n\t\tnonEmptyString(options.traceMode) ??\n\t\t(integrationProfileForOptions(options) === \"mcp_only\"\n\t\t\t? \"mcp_events\"\n\t\t\t: \"otlp\")\n\t);\n}\n\nfunction memoryModeForOptions(options: EvalOpsInitOptions): string {\n\treturn (\n\t\tnonEmptyString(options.memoryMode) ??\n\t\t(integrationProfileForOptions(options) === \"managed_runtime\"\n\t\t\t? \"durable\"\n\t\t\t: \"none\")\n\t);\n}\n\nfunction runtimeOwnerForOptions(options: EvalOpsInitOptions): string {\n\treturn (\n\t\tnonEmptyString(options.runtimeOwner) ??\n\t\t(integrationProfileForOptions(options) === \"managed_runtime\"\n\t\t\t? \"evalops\"\n\t\t\t: \"external\")\n\t);\n}\n\nfunction capabilitiesForOptions(options: EvalOpsInitOptions): string[] {\n\tconst requested = stringArray(options.capabilities);\n\tconst defaults =\n\t\t(options.agentType ?? DEFAULT_AGENT_TYPE) === DEFAULT_AGENT_TYPE\n\t\t\t? DEFAULT_MAESTRO_AGENT_CAPABILITIES\n\t\t\t: DEFAULT_AGENT_NEUTRAL_CAPABILITIES;\n\tconst out: string[] = [];\n\tconst seen = new Set<string>();\n\tfor (const capability of requested ?? defaults) {\n\t\tconst normalized = nonEmptyString(capability);\n\t\tif (!normalized) continue;\n\t\tconst key = normalized.toLowerCase();\n\t\tif (seen.has(key)) continue;\n\t\tseen.add(key);\n\t\tout.push(normalized);\n\t}\n\treturn out;\n}\n\nasync function createAgentAPIKey(\n\toptions: EvalOpsInitOptions,\n\tidentityBaseUrl: string,\n\toauthToken: string,\n\tfetchImpl: typeof fetch,\n\tnow: Date,\n): Promise<CreateAPIKeyOutput> {\n\tconst expiresInDays = positiveInteger(options.expiresInDays);\n\tconst expiresAt = expiresInDays\n\t\t? new Date(\n\t\t\t\tnow.getTime() + expiresInDays * 24 * 60 * 60 * 1000,\n\t\t\t).toISOString()\n\t\t: undefined;\n\tconst response = await fetchImpl(\n\t\t`${identityBaseUrl}${PLATFORM_HTTP_ROUTES.identity.apiKeys}`,\n\t\t{\n\t\t\tmethod: \"POST\",\n\t\t\theaders: {\n\t\t\t\tAuthorization: `Bearer ${oauthToken}`,\n\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t},\n\t\t\tbody: JSON.stringify({\n\t\t\t\tname: buildKeyName(options, now),\n\t\t\t\tscopes: options.apiKeyScopes ?? DEFAULT_API_KEY_SCOPES,\n\t\t\t\t...(expiresAt ? { expires_at: expiresAt } : {}),\n\t\t\t}),\n\t\t},\n\t);\n\tconst output = (await response\n\t\t.json()\n\t\t.catch(() => ({}))) as CreateAPIKeyHTTPOutput;\n\tif (!response.ok) {\n\t\tthrow new Error(\n\t\t\ttypeof output.error === \"string\" && output.error.trim()\n\t\t\t\t? output.error\n\t\t\t\t: `EvalOps API key creation failed (${response.status})`,\n\t\t);\n\t}\n\tconst key = isRecord(output.key) ? output.key : undefined;\n\tconst normalized: CreateAPIKeyOutput = {\n\t\tapi_key: nonEmptyString(output.api_key) ?? \"\",\n\t\texpires_at:\n\t\t\tnonEmptyString(output.expires_at) ?? nonEmptyString(key?.expires_at),\n\t\tkey_id: nonEmptyString(output.key_id) ?? nonEmptyString(key?.id),\n\t\tname: nonEmptyString(output.name) ?? nonEmptyString(key?.name),\n\t\tprefix: nonEmptyString(output.prefix) ?? nonEmptyString(key?.prefix),\n\t\tscopes:\n\t\t\tstringArray(output.scopes) ??\n\t\t\tstringArray(key?.scopes) ??\n\t\t\tstringArray(output.scopes_granted),\n\t};\n\tif (!nonEmptyString(normalized.api_key)) {\n\t\tthrow new Error(\"EvalOps API key creation did not return api_key\");\n\t}\n\treturn normalized;\n}\n\nasync function registerAgent(\n\toptions: EvalOpsInitOptions,\n\tclient: EvalOpsMcpClient,\n): Promise<RegisterOutput> {\n\tconst output = await callConnectedMcpTool<RegisterOutput>(\n\t\tclient,\n\t\t\"evalops_register\",\n\t\t{\n\t\t\tagent_type: options.agentType ?? DEFAULT_AGENT_TYPE,\n\t\t\tcapabilities: capabilitiesForOptions(options),\n\t\t\tintegration_profile: integrationProfileForOptions(options),\n\t\t\tmemory_mode: memoryModeForOptions(options),\n\t\t\truntime_owner: runtimeOwnerForOptions(options),\n\t\t\t...(options.registerScopes?.length\n\t\t\t\t? { scopes: options.registerScopes }\n\t\t\t\t: {}),\n\t\t\tshim_type: shimTypeForOptions(options),\n\t\t\tsurface: options.surface ?? DEFAULT_SURFACE,\n\t\t\ttrace_mode: traceModeForOptions(options),\n\t\t\t...(positiveInteger(options.ttlSeconds)\n\t\t\t\t? { ttl_seconds: options.ttlSeconds }\n\t\t\t\t: {}),\n\t\t\t...(options.workspaceId ? { workspace_id: options.workspaceId } : {}),\n\t\t},\n\t);\n\tif (output.registered !== true || !nonEmptyString(output.agent_id)) {\n\t\tthrow new Error(\"EvalOps agent registration did not return an agent_id\");\n\t}\n\treturn output;\n}\n\nasync function runGovernedInferenceCheck(\n\tclient: EvalOpsMcpClient,\n): Promise<CheckActionOutput> {\n\treturn callConnectedMcpTool<CheckActionOutput>(\n\t\tclient,\n\t\t\"evalops_check_action\",\n\t\t{\n\t\t\taction_type: \"llm_gateway.invoke\",\n\t\t\taction_payload: \"maestro init first governed inference check\",\n\t\t\tdeclared_risk_level: \"low\",\n\t\t},\n\t);\n}\n\nasync function loadControlPlaneSummary(\n\tclient: EvalOpsMcpClient,\n): Promise<ControlPlaneSummaryOutput> {\n\treturn callConnectedMcpTool<ControlPlaneSummaryOutput>(\n\t\tclient,\n\t\t\"evalops_control_plane_summary\",\n\t\t{},\n\t);\n}\n\nfunction organizationIdFromCredentials(\n\tcredentials: OAuthCredentials | null,\n): string | undefined {\n\treturn (\n\t\tnonEmptyString(credentials?.metadata?.organizationId) ??\n\t\tnonEmptyString(credentials?.metadata?.organization_id)\n\t);\n}\n\nfunction authenticatedAsFromCredentials(\n\tcredentials: OAuthCredentials | null,\n): string | undefined {\n\tconst metadata = credentials?.metadata;\n\tconst user = isRecord(metadata?.user) ? metadata.user : undefined;\n\treturn (\n\t\tnonEmptyString(metadata?.email) ??\n\t\tnonEmptyString(metadata?.preferred_username) ??\n\t\tnonEmptyString(metadata?.preferredUsername) ??\n\t\tnonEmptyString(metadata?.user) ??\n\t\tnonEmptyString(user?.email) ??\n\t\tnonEmptyString(user?.name)\n\t);\n}\n\nfunction consoleUrlFromEndpoint(endpoint: string): string {\n\tconst parsed = new URL(endpoint);\n\tparsed.pathname = \"/overview\";\n\tparsed.search = \"\";\n\tparsed.hash = \"\";\n\tconst env =\n\t\tparsed.hostname === \"app.evalops.dev\"\n\t\t\t? \"production\"\n\t\t\t: parsed.hostname === \"staging.evalops.dev\"\n\t\t\t\t? \"staging\"\n\t\t\t\t: \"local\";\n\tparsed.searchParams.set(\"env\", env);\n\treturn parsed.toString();\n}\n\nfunction countHighRiskFindings(summary: ControlPlaneSummaryOutput): number {\n\tconst findings = Array.isArray(summary.findings) ? summary.findings : [];\n\tconst findingCount = findings.filter((finding) => {\n\t\tconst record = isRecord(finding) ? finding : undefined;\n\t\tconst severity = nonEmptyString(record?.severity)?.toLowerCase();\n\t\treturn severity === \"critical\" || severity === \"high\";\n\t}).length;\n\tconst metricCount = summary.metrics?.high_risk_tools;\n\tif (typeof metricCount === \"number\" && Number.isFinite(metricCount)) {\n\t\treturn Math.max(findingCount, Math.max(0, Math.trunc(metricCount)));\n\t}\n\treturn findingCount;\n}\n\nfunction hasPolicyControl(summary: ControlPlaneSummaryOutput): boolean {\n\tconst approvalRequired = summary.metrics?.approval_required_tools ?? 0;\n\tif (approvalRequired > 0) {\n\t\treturn true;\n\t}\n\tconst controls = Array.isArray(summary.policy_controls)\n\t\t? summary.policy_controls\n\t\t: [];\n\treturn controls.some((control) => {\n\t\tconst record = isRecord(control) ? control : undefined;\n\t\treturn /approval|policy|starter/i.test(\n\t\t\t[\n\t\t\t\tnonEmptyString(record?.label),\n\t\t\t\tnonEmptyString(record?.value),\n\t\t\t\tnonEmptyString(record?.detail),\n\t\t\t]\n\t\t\t\t.filter(Boolean)\n\t\t\t\t.join(\" \"),\n\t\t);\n\t});\n}\n\nfunction hasTraceEvidence(summary: ControlPlaneSummaryOutput): boolean {\n\tconst evidence = Array.isArray(summary.evidence) ? summary.evidence : [];\n\treturn evidence.some((entry) => {\n\t\tconst record = isRecord(entry) ? entry : undefined;\n\t\treturn Boolean(\n\t\t\tnonEmptyString(record?.trace) ??\n\t\t\t\tnonEmptyString(record?.trace_id) ??\n\t\t\t\tnonEmptyString(record?.traceId),\n\t\t);\n\t});\n}\n\nfunction governedActionCount(summary: ControlPlaneSummaryOutput): number {\n\tconst metricTotal = summary.metrics?.total_tools;\n\tif (typeof metricTotal === \"number\" && Number.isFinite(metricTotal)) {\n\t\treturn Math.max(0, Math.trunc(metricTotal));\n\t}\n\treturn Array.isArray(summary.tools) ? summary.tools.length : 0;\n}\n\nfunction saveBootstrapMetadata(\n\tcredentials: OAuthCredentials,\n\tagentMcp: EvalOpsAgentMcpMetadata,\n\tsaveCredentials: typeof saveOAuthCredentials,\n): void {\n\tsaveCredentials(\"evalops\", {\n\t\t...credentials,\n\t\tmetadata: {\n\t\t\t...credentials.metadata,\n\t\t\tagentId: agentMcp.agentId ?? credentials.metadata?.agentId,\n\t\t\trunId: agentMcp.runId ?? credentials.metadata?.runId,\n\t\t\tsurface: agentMcp.surface,\n\t\t\tagentMcp,\n\t\t},\n\t});\n}\n\nexport async function bootstrapEvalOpsAgent(\n\toptions: EvalOpsInitOptions = {},\n\tdependencies: EvalOpsInitDependencies = {},\n): Promise<EvalOpsInitResult> {\n\tconst deps = {\n\t\tcreateMcpClient: dependencies.createMcpClient ?? createDefaultMcpClient,\n\t\tfetch: dependencies.fetch ?? fetch,\n\t\tgetOAuthToken: dependencies.getOAuthToken ?? getOAuthToken,\n\t\thasOAuthCredentials:\n\t\t\tdependencies.hasOAuthCredentials ?? hasOAuthCredentials,\n\t\tloadCredentials: dependencies.loadCredentials ?? loadOAuthCredentials,\n\t\tlogin: dependencies.login ?? login,\n\t\tnow: dependencies.now ?? (() => new Date()),\n\t\tonAuthUrl:\n\t\t\tdependencies.onAuthUrl ??\n\t\t\t((url: string) => {\n\t\t\t\tprocess.stdout.write(`${url}\\n`);\n\t\t\t}),\n\t\tonStatus: dependencies.onStatus ?? (() => undefined),\n\t\tsaveCredentials: dependencies.saveCredentials ?? saveOAuthCredentials,\n\t};\n\n\tconst oauthToken = await ensureEvalOpsLogin(options, deps);\n\tconst endpoint = await resolveAgentMcpEndpoint(options, deps);\n\tconst credentialsBeforeKey = deps.loadCredentials(\"evalops\");\n\tconst stored = getStoredAgentMcpMetadata(credentialsBeforeKey);\n\tconst identityBaseUrl = resolveIdentityBaseUrl(\n\t\tcredentialsBeforeKey,\n\t\tendpoint,\n\t);\n\tconst now = deps.now();\n\n\tlet apiKey = stored && !options.rotateKey ? stored.apiKey : undefined;\n\tlet keyOutput: CreateAPIKeyOutput | undefined;\n\tlet apiKeyCreated = false;\n\n\tif (!apiKey) {\n\t\tdeps.onStatus({ message: \"Creating EvalOps agent API key\" });\n\t\tkeyOutput = await createAgentAPIKey(\n\t\t\toptions,\n\t\t\tidentityBaseUrl,\n\t\t\toauthToken,\n\t\t\tdeps.fetch,\n\t\t\tnow,\n\t\t);\n\t\tapiKey = keyOutput.api_key;\n\t\tapiKeyCreated = true;\n\t} else {\n\t\tdeps.onStatus({ message: \"Reusing stored EvalOps agent API key\" });\n\t}\n\n\tdeps.onStatus({ message: \"Registering Maestro with EvalOps agent MCP\" });\n\tlet registerOutput: RegisterOutput;\n\tlet client: EvalOpsMcpClient;\n\tconst openAndRegister = async (token: string) => {\n\t\tconst mcpClient = deps.createMcpClient(endpoint.endpoint, token);\n\t\tawait mcpClient.connect();\n\t\ttry {\n\t\t\tconst output = await registerAgent(options, mcpClient);\n\t\t\treturn { client: mcpClient, registerOutput: output };\n\t\t} catch (error) {\n\t\t\tawait mcpClient.close().catch(() => undefined);\n\t\t\tthrow error;\n\t\t}\n\t};\n\ttry {\n\t\t({ client, registerOutput } = await openAndRegister(apiKey));\n\t} catch (error) {\n\t\tif (apiKeyCreated) {\n\t\t\tthrow error;\n\t\t}\n\t\tdeps.onStatus({\n\t\t\tmessage: \"Stored EvalOps agent API key failed; rotating and retrying\",\n\t\t});\n\t\tkeyOutput = await createAgentAPIKey(\n\t\t\t{ ...options, rotateKey: true },\n\t\t\tidentityBaseUrl,\n\t\t\toauthToken,\n\t\t\tdeps.fetch,\n\t\t\tnow,\n\t\t);\n\t\tapiKey = keyOutput.api_key;\n\t\tapiKeyCreated = true;\n\t\t({ client, registerOutput } = await openAndRegister(apiKey));\n\t}\n\n\tlet governedInferenceCheck: CheckActionOutput = {};\n\tlet controlPlaneSummary: ControlPlaneSummaryOutput = {};\n\ttry {\n\t\tdeps.onStatus({ message: \"Running first governed inference check\" });\n\t\tgovernedInferenceCheck = await runGovernedInferenceCheck(client);\n\t} catch (error) {\n\t\tconst reason = error instanceof Error ? error.message : String(error);\n\t\tdeps.onStatus({\n\t\t\tmessage: `EvalOps governed inference check unavailable; continuing bootstrap (${reason})`,\n\t\t});\n\t}\n\ttry {\n\t\tdeps.onStatus({ message: \"Loading EvalOps control-plane status\" });\n\t\tcontrolPlaneSummary = await loadControlPlaneSummary(client);\n\t} catch (error) {\n\t\tconst reason = error instanceof Error ? error.message : String(error);\n\t\tdeps.onStatus({\n\t\t\tmessage: `EvalOps control-plane status unavailable; continuing bootstrap (${reason})`,\n\t\t});\n\t} finally {\n\t\tawait client.close().catch(() => undefined);\n\t}\n\n\tconst credentials = deps.loadCredentials(\"evalops\");\n\tif (!credentials) {\n\t\tthrow new Error(\"EvalOps OAuth credentials disappeared during init\");\n\t}\n\tconst keyPrefix = nonEmptyString(keyOutput?.prefix) ?? stored?.keyPrefix;\n\tconst scopes = keyOutput?.scopes ?? stored?.scopes;\n\tconst integrationProfile =\n\t\tnonEmptyString(registerOutput.integration_profile) ??\n\t\tintegrationProfileForOptions(options);\n\tconst memoryMode =\n\t\tnonEmptyString(registerOutput.memory_mode) ?? memoryModeForOptions(options);\n\tconst runtimeOwner =\n\t\tnonEmptyString(registerOutput.runtime_owner) ??\n\t\truntimeOwnerForOptions(options);\n\tconst shimType =\n\t\tnonEmptyString(registerOutput.shim_type) ?? shimTypeForOptions(options);\n\tconst traceMode =\n\t\tnonEmptyString(registerOutput.trace_mode) ?? traceModeForOptions(options);\n\tconst agentMcp: EvalOpsAgentMcpMetadata = {\n\t\ttype: \"agent-mcp\",\n\t\tapiKey,\n\t\tcreatedAt: (apiKeyCreated\n\t\t\t? now\n\t\t\t: new Date(stored?.createdAt ?? now)\n\t\t).toISOString(),\n\t\tendpoint: endpoint.endpoint,\n\t\tregisteredAt: deps.now().toISOString(),\n\t\tsurface: options.surface ?? DEFAULT_SURFACE,\n\t\tagentId: registerOutput.agent_id,\n\t\texpiresAt: nonEmptyString(keyOutput?.expires_at) ?? stored?.expiresAt,\n\t\tintegrationProfile,\n\t\tkeyId: nonEmptyString(keyOutput?.key_id) ?? stored?.keyId,\n\t\tkeyName: nonEmptyString(keyOutput?.name) ?? stored?.keyName,\n\t\tkeyPrefix,\n\t\tmanifestUrl: endpoint.manifestUrl,\n\t\tmemoryMode,\n\t\tregistryVisible: registerOutput.registry_visible,\n\t\trunId: registerOutput.run_id,\n\t\truntimeOwner,\n\t\tscopes,\n\t\tsessionExpiresAt: registerOutput.expires_at,\n\t\tshimType,\n\t\ttraceMode,\n\t\tworkspaceId:\n\t\t\toptions.workspaceId ?? organizationIdFromCredentials(credentials),\n\t};\n\tsaveBootstrapMetadata(credentials, agentMcp, deps.saveCredentials);\n\n\treturn {\n\t\tagentId: registerOutput.agent_id,\n\t\tapiKeyCreated,\n\t\tapprovalPolicyAttached: hasPolicyControl(controlPlaneSummary),\n\t\tauthenticatedAs: authenticatedAsFromCredentials(credentials),\n\t\tconsoleUrl: consoleUrlFromEndpoint(endpoint.endpoint),\n\t\tendpoint: endpoint.endpoint,\n\t\tevidenceEventPublished: (controlPlaneSummary.evidence ?? []).length > 0,\n\t\tevidenceEvents: (controlPlaneSummary.evidence ?? []).length,\n\t\tgovernedActionsLoaded: governedActionCount(controlPlaneSummary),\n\t\tgovernedInferenceCheckRan: Boolean(governedInferenceCheck.decision),\n\t\tintegrationProfile,\n\t\tkeyPrefix,\n\t\tmanifestUrl: endpoint.manifestUrl,\n\t\tmemoryMode,\n\t\torganizationId: organizationIdFromCredentials(credentials),\n\t\tregistryVisible: registerOutput.registry_visible,\n\t\triskFindings: countHighRiskFindings(controlPlaneSummary),\n\t\trunId: registerOutput.run_id,\n\t\truntimeOwner,\n\t\tscopesGranted: registerOutput.scopes_granted,\n\t\tsessionExpiresAt: registerOutput.expires_at,\n\t\tshimType,\n\t\tstored: true,\n\t\ttraceIngestionStarted: hasTraceEvidence(controlPlaneSummary),\n\t\ttraceMode,\n\t};\n}\n"]}
|
|
1
|
+
{"version":3,"file":"agent-bootstrap.js","sourceRoot":"","sources":["../../src/evalops/agent-bootstrap.ts"],"names":[],"mappings":"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","sourcesContent":["import { hostname } from \"node:os\";\nimport { Client } from \"@modelcontextprotocol/sdk/client/index.js\";\nimport { StreamableHTTPClientTransport } from \"@modelcontextprotocol/sdk/client/streamableHttp.js\";\nimport type { CallToolResult } from \"@modelcontextprotocol/sdk/types.js\";\nimport { getOAuthToken, hasOAuthCredentials, login } from \"../oauth/index.js\";\nimport {\n\ttype OAuthCredentials,\n\tloadOAuthCredentials,\n\tsaveOAuthCredentials,\n} from \"../oauth/storage.js\";\nimport { getPackageVersion } from \"../package-metadata.js\";\nimport { getEnvValue, normalizeBaseUrl } from \"../platform/client.js\";\nimport { PLATFORM_HTTP_ROUTES } from \"../platform/core-services.js\";\nimport { isRecord } from \"../utils/json.js\";\nimport {\n\ttype EvalOpsAgentMcpMetadata,\n\tgetStoredAgentMcpMetadata,\n} from \"./agent-mcp-metadata.js\";\n\nexport {\n\ttype EvalOpsAgentMcpMetadata,\n\tgetStoredEvalOpsAgentMcpMetadata,\n} from \"./agent-mcp-metadata.js\";\n\nconst DEFAULT_AGENT_MCP_BASE_URL = \"https://app.evalops.dev\";\nconst DEFAULT_IDENTITY_BASE_URL = \"https://identity.evalops.dev\";\nconst AGENT_MCP_MANIFEST_PATH = \"/.well-known/evalops/agent-mcp.json\";\nconst AGENT_MCP_PATH = \"/mcp\";\nconst DEFAULT_AGENT_TYPE = \"maestro\";\nconst DEFAULT_SURFACE = \"cli\";\nconst DEFAULT_AGENT_NEUTRAL_CAPABILITIES = [\n\t\"mcp\",\n\t\"tool.use\",\n\t\"responses:create\",\n];\nconst DEFAULT_MAESTRO_AGENT_CAPABILITIES = [\n\t\"maestro:init\",\n\t\"maestro:cli\",\n\t\"conversation:manage\",\n\t\"workflow:orchestrate\",\n\t\"code:write\",\n\t\"code:review\",\n\t\"code:test\",\n\t\"shell\",\n\t\"git\",\n\t\"fs\",\n\t\"mcp\",\n\t\"tool.use\",\n\t\"research\",\n\t\"responses:create\",\n];\nconst DEFAULT_API_KEY_SCOPES = [\n\t\"agent:register\",\n\t\"agent:heartbeat\",\n\t\"governance:evaluate\",\n\t\"llm_gateway:invoke\",\n\t\"memories:read\",\n\t\"memories:write\",\n\t\"meter:record\",\n];\n\nexport interface EvalOpsInitOptions {\n\tagentType?: string;\n\tapiKeyScopes?: string[];\n\tcapabilities?: string[];\n\texpiresInDays?: number;\n\tforceLogin?: boolean;\n\tintegrationProfile?: string;\n\tjson?: boolean;\n\tkeyName?: string;\n\tmanifestUrl?: string;\n\tmemoryMode?: string;\n\tmcpUrl?: string;\n\tregisterScopes?: string[];\n\trotateKey?: boolean;\n\truntimeOwner?: string;\n\tshimType?: string;\n\tsurface?: string;\n\ttraceMode?: string;\n\tttlSeconds?: number;\n\tworkspaceId?: string;\n}\n\nexport interface EvalOpsInitResult {\n\tagentId?: string;\n\tapiKeyCreated: boolean;\n\tapprovalPolicyAttached?: boolean;\n\tauthenticatedAs?: string;\n\tconsoleUrl?: string;\n\tendpoint: string;\n\tevidenceEventPublished?: boolean;\n\tevidenceEvents?: number;\n\tgovernedActionsLoaded?: number;\n\tgovernedInferenceCheckRan?: boolean;\n\tintegrationProfile?: string;\n\tkeyPrefix?: string;\n\tmanifestUrl?: string;\n\tmemoryMode?: string;\n\torganizationId?: string;\n\tregistryVisible?: boolean;\n\triskFindings?: number;\n\trunId?: string;\n\truntimeOwner?: string;\n\tscopesGranted?: string[];\n\tsessionExpiresAt?: string;\n\tshimType?: string;\n\tstored: boolean;\n\ttraceIngestionStarted?: boolean;\n\ttraceMode?: string;\n}\n\nexport interface EvalOpsInitStatus {\n\tmessage: string;\n}\n\nexport interface EvalOpsInitDependencies {\n\tcreateMcpClient?: (endpoint: string, bearerToken: string) => EvalOpsMcpClient;\n\tfetch?: typeof fetch;\n\tgetOAuthToken?: typeof getOAuthToken;\n\thasOAuthCredentials?: typeof hasOAuthCredentials;\n\tloadCredentials?: typeof loadOAuthCredentials;\n\tlogin?: typeof login;\n\tnow?: () => Date;\n\tonAuthUrl?: (url: string) => void;\n\tonStatus?: (status: EvalOpsInitStatus) => void;\n\tsaveCredentials?: typeof saveOAuthCredentials;\n}\n\nexport interface EvalOpsMcpClient {\n\tcallTool(\n\t\tname: string,\n\t\targs: Record<string, unknown>,\n\t): Promise<CallToolResult>;\n\tclose(): Promise<void>;\n\tconnect(): Promise<void>;\n}\n\ninterface CreateAPIKeyOutput {\n\tapi_key: string;\n\texpires_at?: string;\n\tkey_id?: string;\n\tname?: string;\n\tprefix?: string;\n\tscopes?: string[];\n}\n\ninterface CreateAPIKeyHTTPOutput extends Partial<CreateAPIKeyOutput> {\n\terror?: string;\n\tkey?: Record<string, unknown>;\n\tscopes_granted?: unknown;\n}\n\ninterface RegisterOutput {\n\tagent_id?: string;\n\texpires_at?: string;\n\tintegration_profile?: string;\n\tmemory_mode?: string;\n\tregistered?: boolean;\n\tregistry_visible?: boolean;\n\trun_id?: string;\n\truntime_owner?: string;\n\tscopes_denied?: string[];\n\tscopes_granted?: string[];\n\tshim_type?: string;\n\ttrace_mode?: string;\n}\n\ninterface CheckActionOutput {\n\tdecision?: string;\n\trisk_level?: string;\n\treasons?: string[];\n}\n\ninterface ControlPlaneSummaryOutput {\n\tevidence?: unknown[];\n\tfindings?: unknown[];\n\tmetrics?: {\n\t\tapproval_required_tools?: number;\n\t\thigh_risk_tools?: number;\n\t\ttotal_tools?: number;\n\t};\n\tpolicy_controls?: unknown[];\n\ttools?: unknown[];\n}\n\ninterface AgentMcpEndpoint {\n\tendpoint: string;\n\tidentityBaseUrl?: string;\n\tmanifestUrl?: string;\n\tpreferDerivedIdentity?: boolean;\n}\n\nfunction nonEmptyString(value: unknown): string | undefined {\n\treturn typeof value === \"string\" && value.trim().length > 0\n\t\t? value.trim()\n\t\t: undefined;\n}\n\nfunction stringArray(value: unknown): string[] | undefined {\n\tif (!Array.isArray(value)) {\n\t\treturn undefined;\n\t}\n\tconst values = value\n\t\t.map((entry) => nonEmptyString(entry))\n\t\t.filter((entry): entry is string => Boolean(entry));\n\treturn values.length > 0 ? values : undefined;\n}\n\nfunction positiveInteger(value: number | undefined): number | undefined {\n\treturn typeof value === \"number\" && Number.isInteger(value) && value > 0\n\t\t? value\n\t\t: undefined;\n}\n\nfunction normalizeMcpEndpoint(url: string): string {\n\tconst normalized = normalizeBaseUrl(url);\n\tconst parsed = new URL(normalized);\n\tif (\n\t\tparsed.pathname === \"\" ||\n\t\tparsed.pathname === \"/\" ||\n\t\tparsed.pathname === AGENT_MCP_MANIFEST_PATH\n\t) {\n\t\tparsed.pathname = AGENT_MCP_PATH;\n\t\tparsed.search = \"\";\n\t\tparsed.hash = \"\";\n\t}\n\treturn normalizeBaseUrl(parsed.toString());\n}\n\nfunction normalizeManifestUrl(url: string): string {\n\tconst normalized = normalizeBaseUrl(url);\n\tconst parsed = new URL(normalized);\n\tif (parsed.pathname === \"\" || parsed.pathname === \"/\") {\n\t\tparsed.pathname = AGENT_MCP_MANIFEST_PATH;\n\t}\n\treturn parsed.toString();\n}\n\nfunction resolveIdentityBaseUrl(\n\tcredentials: OAuthCredentials | null,\n\tendpoint?: AgentMcpEndpoint,\n): string {\n\tconst configured = getEnvValue([\n\t\t\"MAESTRO_IDENTITY_URL\",\n\t\t\"EVALOPS_IDENTITY_URL\",\n\t\t\"MAESTRO_PLATFORM_BASE_URL\",\n\t\t\"MAESTRO_EVALOPS_BASE_URL\",\n\t\t\"EVALOPS_BASE_URL\",\n\t]);\n\tconst stored =\n\t\ttypeof credentials?.metadata?.identityBaseUrl === \"string\"\n\t\t\t? credentials.metadata.identityBaseUrl\n\t\t\t: undefined;\n\tconst derived = identityBaseUrlFromMcpEndpoint(endpoint?.endpoint);\n\tconst storedBeforeDerived = endpoint\n\t\t? !endpoint.preferDerivedIdentity && isCustomMcpEndpoint(endpoint.endpoint)\n\t\t: false;\n\treturn normalizeBaseUrl(\n\t\tconfigured ??\n\t\t\tendpoint?.identityBaseUrl ??\n\t\t\t(endpoint?.preferDerivedIdentity ? derived : undefined) ??\n\t\t\t(storedBeforeDerived ? stored : undefined) ??\n\t\t\tderived ??\n\t\t\tstored ??\n\t\t\tDEFAULT_IDENTITY_BASE_URL,\n\t\tObject.values(PLATFORM_HTTP_ROUTES.identity),\n\t);\n}\n\nfunction isCustomMcpEndpoint(endpoint: string): boolean {\n\tconst parsed = new URL(normalizeBaseUrl(endpoint));\n\treturn (\n\t\tparsed.hostname !== \"app.evalops.dev\" &&\n\t\tparsed.hostname !== \"staging.evalops.dev\"\n\t);\n}\n\nfunction identityBaseUrlFromMcpEndpoint(\n\tendpoint: string | undefined,\n): string | undefined {\n\tif (!endpoint) {\n\t\treturn undefined;\n\t}\n\tconst parsed = new URL(normalizeBaseUrl(endpoint));\n\tif (parsed.hostname === \"app.evalops.dev\") {\n\t\treturn DEFAULT_IDENTITY_BASE_URL;\n\t}\n\tif (parsed.hostname === \"staging.evalops.dev\") {\n\t\treturn \"https://api.staging.evalops.dev\";\n\t}\n\tif (parsed.hostname.startsWith(\"app.\")) {\n\t\tparsed.hostname = `identity.${parsed.hostname.slice(\"app.\".length)}`;\n\t}\n\tparsed.pathname = \"\";\n\tparsed.search = \"\";\n\tparsed.hash = \"\";\n\treturn normalizeBaseUrl(parsed.toString());\n}\n\nasync function resolveEndpointFromManifest(\n\tmanifestUrl: string,\n\tfetchImpl: typeof fetch,\n): Promise<AgentMcpEndpoint> {\n\tconst response = await fetchImpl(manifestUrl, {\n\t\theaders: { accept: \"application/json\" },\n\t});\n\tif (!response.ok) {\n\t\tthrow new Error(\n\t\t\t`Failed to fetch EvalOps MCP manifest (${response.status} ${response.statusText})`,\n\t\t);\n\t}\n\tconst payload = (await response.json()) as unknown;\n\tconst payloadRecord = isRecord(payload) ? payload : undefined;\n\tconst protocol =\n\t\tpayloadRecord && isRecord(payloadRecord.protocol)\n\t\t\t? payloadRecord.protocol\n\t\t\t: undefined;\n\tconst endpoint = nonEmptyString(protocol?.endpoint);\n\tif (!endpoint) {\n\t\tthrow new Error(\"EvalOps MCP manifest did not include protocol.endpoint\");\n\t}\n\tconst identity = payloadRecord?.identity;\n\tconst identityBaseUrl =\n\t\tnonEmptyString(isRecord(identity) ? identity.base_url : undefined) ??\n\t\tnonEmptyString(isRecord(identity) ? identity.baseUrl : undefined) ??\n\t\tnonEmptyString(isRecord(identity) ? identity.url : undefined) ??\n\t\tnonEmptyString(payloadRecord?.identity_base_url) ??\n\t\tnonEmptyString(payloadRecord?.identityBaseUrl);\n\treturn {\n\t\tendpoint: normalizeMcpEndpoint(endpoint),\n\t\tidentityBaseUrl,\n\t\tmanifestUrl,\n\t\tpreferDerivedIdentity: true,\n\t};\n}\n\nasync function resolveAgentMcpEndpoint(\n\toptions: EvalOpsInitOptions,\n\tdeps: Required<Pick<EvalOpsInitDependencies, \"fetch\" | \"loadCredentials\">>,\n): Promise<AgentMcpEndpoint> {\n\tif (options.mcpUrl) {\n\t\treturn {\n\t\t\tendpoint: normalizeMcpEndpoint(options.mcpUrl),\n\t\t\tpreferDerivedIdentity: true,\n\t\t};\n\t}\n\tif (options.manifestUrl) {\n\t\treturn resolveEndpointFromManifest(\n\t\t\tnormalizeManifestUrl(options.manifestUrl),\n\t\t\tdeps.fetch,\n\t\t);\n\t}\n\n\tconst configuredMcpUrl = getEnvValue([\n\t\t\"MAESTRO_PLATFORM_MCP_URL\",\n\t\t\"MAESTRO_AGENT_MCP_URL\",\n\t\t\"MAESTRO_EVALOPS_AGENT_MCP_URL\",\n\t]);\n\tif (configuredMcpUrl) {\n\t\treturn {\n\t\t\tendpoint: normalizeMcpEndpoint(configuredMcpUrl),\n\t\t\tpreferDerivedIdentity: true,\n\t\t};\n\t}\n\n\tconst configuredManifestUrl = getEnvValue([\n\t\t\"MAESTRO_PLATFORM_MCP_MANIFEST_URL\",\n\t\t\"MAESTRO_AGENT_MCP_MANIFEST_URL\",\n\t\t\"MAESTRO_EVALOPS_AGENT_MCP_MANIFEST_URL\",\n\t]);\n\tif (configuredManifestUrl) {\n\t\treturn resolveEndpointFromManifest(\n\t\t\tnormalizeManifestUrl(configuredManifestUrl),\n\t\t\tdeps.fetch,\n\t\t);\n\t}\n\n\tconst stored = getStoredAgentMcpMetadata(deps.loadCredentials(\"evalops\"));\n\tif (stored?.endpoint) {\n\t\treturn {\n\t\t\tendpoint: normalizeMcpEndpoint(stored.endpoint),\n\t\t\tmanifestUrl: stored.manifestUrl,\n\t\t};\n\t}\n\n\treturn resolveEndpointFromManifest(\n\t\t`${DEFAULT_AGENT_MCP_BASE_URL}${AGENT_MCP_MANIFEST_PATH}`,\n\t\tdeps.fetch,\n\t);\n}\n\nfunction createDefaultMcpClient(\n\tendpoint: string,\n\tbearerToken: string,\n): EvalOpsMcpClient {\n\tconst client = new Client(\n\t\t{\n\t\t\tname: \"maestro\",\n\t\t\tversion: getPackageVersion(),\n\t\t},\n\t\t{\n\t\t\tcapabilities: {},\n\t\t},\n\t);\n\tconst headers = {\n\t\taccept: \"application/json, text/event-stream\",\n\t\t\"content-type\": \"application/json\",\n\t\t...(bearerToken ? { authorization: `Bearer ${bearerToken}` } : {}),\n\t};\n\tconst transport = new StreamableHTTPClientTransport(new URL(endpoint), {\n\t\trequestInit: {\n\t\t\theaders,\n\t\t},\n\t});\n\treturn {\n\t\tcallTool: (name, args) =>\n\t\t\tclient.callTool({\n\t\t\t\tname,\n\t\t\t\targuments: args,\n\t\t\t}) as Promise<CallToolResult>,\n\t\tclose: () => client.close(),\n\t\tconnect: () => client.connect(transport),\n\t};\n}\n\nasync function callConnectedMcpTool<T>(\n\tclient: EvalOpsMcpClient,\n\ttoolName: string,\n\targs: Record<string, unknown>,\n): Promise<T> {\n\tconst result = await client.callTool(toolName, args);\n\tif (result.isError) {\n\t\tthrow new Error(`${toolName} returned an MCP error`);\n\t}\n\treturn parseToolOutput<T>(toolName, result);\n}\n\nfunction parseToolOutput<T>(toolName: string, result: CallToolResult): T {\n\tconst structuredContent = isRecord(result.structuredContent)\n\t\t? result.structuredContent\n\t\t: undefined;\n\tif (structuredContent) {\n\t\treturn structuredContent as T;\n\t}\n\tconst text = Array.isArray(result.content)\n\t\t? result.content\n\t\t\t\t.map((entry) =>\n\t\t\t\t\tentry.type === \"text\" && typeof entry.text === \"string\"\n\t\t\t\t\t\t? entry.text\n\t\t\t\t\t\t: undefined,\n\t\t\t\t)\n\t\t\t\t.find((entry): entry is string => Boolean(entry))\n\t\t: undefined;\n\tif (text) {\n\t\tconst parsed = JSON.parse(text) as unknown;\n\t\tif (isRecord(parsed)) {\n\t\t\treturn parsed as T;\n\t\t}\n\t}\n\tthrow new Error(`${toolName} did not return structured JSON output`);\n}\n\nasync function ensureEvalOpsLogin(\n\toptions: EvalOpsInitOptions,\n\tdeps: Required<\n\t\tPick<\n\t\t\tEvalOpsInitDependencies,\n\t\t\t| \"getOAuthToken\"\n\t\t\t| \"hasOAuthCredentials\"\n\t\t\t| \"login\"\n\t\t\t| \"onAuthUrl\"\n\t\t\t| \"onStatus\"\n\t\t>\n\t>,\n): Promise<string> {\n\tif (options.forceLogin || !deps.hasOAuthCredentials(\"evalops\")) {\n\t\tdeps.onStatus({ message: \"Opening EvalOps login\" });\n\t\tawait deps.login(\"evalops\", {\n\t\t\tonAuthUrl: deps.onAuthUrl,\n\t\t\tonStatus: (message) => deps.onStatus({ message }),\n\t\t});\n\t}\n\n\tlet token = await deps.getOAuthToken(\"evalops\");\n\tif (!token) {\n\t\tdeps.onStatus({ message: \"Refreshing EvalOps login\" });\n\t\tawait deps.login(\"evalops\", {\n\t\t\tonAuthUrl: deps.onAuthUrl,\n\t\t\tonStatus: (message) => deps.onStatus({ message }),\n\t\t});\n\t\ttoken = await deps.getOAuthToken(\"evalops\");\n\t}\n\tif (!token) {\n\t\tthrow new Error(\"EvalOps login did not produce an access token\");\n\t}\n\treturn token;\n}\n\nfunction buildKeyName(options: EvalOpsInitOptions, now: Date): string {\n\tif (options.keyName?.trim()) {\n\t\treturn options.keyName.trim();\n\t}\n\tconst host = hostname()\n\t\t.replace(/[^a-zA-Z0-9._-]+/gu, \"-\")\n\t\t.slice(0, 48);\n\treturn `maestro-init-${host || \"local\"}-${now.toISOString().slice(0, 10)}`;\n}\n\nfunction integrationProfileForOptions(options: EvalOpsInitOptions): string {\n\treturn (\n\t\tnonEmptyString(options.integrationProfile) ??\n\t\t(options.agentType && options.agentType !== DEFAULT_AGENT_TYPE\n\t\t\t? \"mcp_otlp\"\n\t\t\t: \"managed_runtime\")\n\t);\n}\n\nfunction shimTypeForOptions(options: EvalOpsInitOptions): string {\n\treturn (\n\t\tnonEmptyString(options.shimType) ??\n\t\t(integrationProfileForOptions(options) === \"managed_runtime\"\n\t\t\t? \"sdk\"\n\t\t\t: \"native_mcp\")\n\t);\n}\n\nfunction traceModeForOptions(options: EvalOpsInitOptions): string {\n\treturn (\n\t\tnonEmptyString(options.traceMode) ??\n\t\t(integrationProfileForOptions(options) === \"mcp_only\"\n\t\t\t? \"mcp_events\"\n\t\t\t: \"otlp\")\n\t);\n}\n\nfunction memoryModeForOptions(options: EvalOpsInitOptions): string {\n\treturn (\n\t\tnonEmptyString(options.memoryMode) ??\n\t\t(integrationProfileForOptions(options) === \"managed_runtime\"\n\t\t\t? \"durable\"\n\t\t\t: \"none\")\n\t);\n}\n\nfunction runtimeOwnerForOptions(options: EvalOpsInitOptions): string {\n\treturn (\n\t\tnonEmptyString(options.runtimeOwner) ??\n\t\t(integrationProfileForOptions(options) === \"managed_runtime\"\n\t\t\t? \"evalops\"\n\t\t\t: \"external\")\n\t);\n}\n\nfunction capabilitiesForOptions(options: EvalOpsInitOptions): string[] {\n\tconst requested = stringArray(options.capabilities);\n\tconst defaults =\n\t\t(options.agentType ?? DEFAULT_AGENT_TYPE) === DEFAULT_AGENT_TYPE\n\t\t\t? DEFAULT_MAESTRO_AGENT_CAPABILITIES\n\t\t\t: DEFAULT_AGENT_NEUTRAL_CAPABILITIES;\n\tconst out: string[] = [];\n\tconst seen = new Set<string>();\n\tfor (const capability of requested ?? defaults) {\n\t\tconst normalized = nonEmptyString(capability);\n\t\tif (!normalized) continue;\n\t\tconst key = normalized.toLowerCase();\n\t\tif (seen.has(key)) continue;\n\t\tseen.add(key);\n\t\tout.push(normalized);\n\t}\n\treturn out;\n}\n\nasync function createAgentAPIKey(\n\toptions: EvalOpsInitOptions,\n\tidentityBaseUrl: string,\n\toauthToken: string,\n\tfetchImpl: typeof fetch,\n\tnow: Date,\n): Promise<CreateAPIKeyOutput> {\n\tconst expiresInDays = positiveInteger(options.expiresInDays);\n\tconst expiresAt = expiresInDays\n\t\t? new Date(\n\t\t\t\tnow.getTime() + expiresInDays * 24 * 60 * 60 * 1000,\n\t\t\t).toISOString()\n\t\t: undefined;\n\tconst response = await fetchImpl(\n\t\t`${identityBaseUrl}${PLATFORM_HTTP_ROUTES.identity.apiKeys}`,\n\t\t{\n\t\t\tmethod: \"POST\",\n\t\t\theaders: {\n\t\t\t\tAuthorization: `Bearer ${oauthToken}`,\n\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t},\n\t\t\tbody: JSON.stringify({\n\t\t\t\tname: buildKeyName(options, now),\n\t\t\t\tscopes: options.apiKeyScopes ?? DEFAULT_API_KEY_SCOPES,\n\t\t\t\t...(expiresAt ? { expires_at: expiresAt } : {}),\n\t\t\t}),\n\t\t},\n\t);\n\tconst output = (await response\n\t\t.json()\n\t\t.catch(() => ({}))) as CreateAPIKeyHTTPOutput;\n\tif (!response.ok) {\n\t\tthrow new Error(\n\t\t\ttypeof output.error === \"string\" && output.error.trim()\n\t\t\t\t? output.error\n\t\t\t\t: `EvalOps API key creation failed (${response.status})`,\n\t\t);\n\t}\n\tconst key = isRecord(output.key) ? output.key : undefined;\n\tconst normalized: CreateAPIKeyOutput = {\n\t\tapi_key: nonEmptyString(output.api_key) ?? \"\",\n\t\texpires_at:\n\t\t\tnonEmptyString(output.expires_at) ?? nonEmptyString(key?.expires_at),\n\t\tkey_id: nonEmptyString(output.key_id) ?? nonEmptyString(key?.id),\n\t\tname: nonEmptyString(output.name) ?? nonEmptyString(key?.name),\n\t\tprefix: nonEmptyString(output.prefix) ?? nonEmptyString(key?.prefix),\n\t\tscopes:\n\t\t\tstringArray(output.scopes) ??\n\t\t\tstringArray(key?.scopes) ??\n\t\t\tstringArray(output.scopes_granted),\n\t};\n\tif (!nonEmptyString(normalized.api_key)) {\n\t\tthrow new Error(\"EvalOps API key creation did not return api_key\");\n\t}\n\treturn normalized;\n}\n\nasync function registerAgent(\n\toptions: EvalOpsInitOptions,\n\tclient: EvalOpsMcpClient,\n): Promise<RegisterOutput> {\n\tconst output = await callConnectedMcpTool<RegisterOutput>(\n\t\tclient,\n\t\t\"evalops_register\",\n\t\t{\n\t\t\tagent_type: options.agentType ?? DEFAULT_AGENT_TYPE,\n\t\t\tcapabilities: capabilitiesForOptions(options),\n\t\t\tintegration_profile: integrationProfileForOptions(options),\n\t\t\tmemory_mode: memoryModeForOptions(options),\n\t\t\truntime_owner: runtimeOwnerForOptions(options),\n\t\t\t...(options.registerScopes?.length\n\t\t\t\t? { scopes: options.registerScopes }\n\t\t\t\t: {}),\n\t\t\tshim_type: shimTypeForOptions(options),\n\t\t\tsurface: options.surface ?? DEFAULT_SURFACE,\n\t\t\ttrace_mode: traceModeForOptions(options),\n\t\t\t...(positiveInteger(options.ttlSeconds)\n\t\t\t\t? { ttl_seconds: options.ttlSeconds }\n\t\t\t\t: {}),\n\t\t\t...(options.workspaceId ? { workspace_id: options.workspaceId } : {}),\n\t\t},\n\t);\n\tif (output.registered !== true || !nonEmptyString(output.agent_id)) {\n\t\tthrow new Error(\"EvalOps agent registration did not return an agent_id\");\n\t}\n\treturn output;\n}\n\nasync function runGovernedInferenceCheck(\n\tclient: EvalOpsMcpClient,\n): Promise<CheckActionOutput> {\n\treturn callConnectedMcpTool<CheckActionOutput>(\n\t\tclient,\n\t\t\"evalops_check_action\",\n\t\t{\n\t\t\taction_type: \"llm_gateway.invoke\",\n\t\t\taction_payload: \"maestro init first governed inference check\",\n\t\t\tdeclared_risk_level: \"low\",\n\t\t},\n\t);\n}\n\nasync function loadControlPlaneSummary(\n\tclient: EvalOpsMcpClient,\n): Promise<ControlPlaneSummaryOutput> {\n\treturn callConnectedMcpTool<ControlPlaneSummaryOutput>(\n\t\tclient,\n\t\t\"evalops_control_plane_summary\",\n\t\t{},\n\t);\n}\n\nfunction organizationIdFromCredentials(\n\tcredentials: OAuthCredentials | null,\n): string | undefined {\n\treturn (\n\t\tnonEmptyString(credentials?.metadata?.organizationId) ??\n\t\tnonEmptyString(credentials?.metadata?.organization_id)\n\t);\n}\n\nfunction authenticatedAsFromCredentials(\n\tcredentials: OAuthCredentials | null,\n): string | undefined {\n\tconst metadata = credentials?.metadata;\n\tconst user = isRecord(metadata?.user) ? metadata.user : undefined;\n\treturn (\n\t\tnonEmptyString(metadata?.email) ??\n\t\tnonEmptyString(metadata?.preferred_username) ??\n\t\tnonEmptyString(metadata?.preferredUsername) ??\n\t\tnonEmptyString(metadata?.user) ??\n\t\tnonEmptyString(user?.email) ??\n\t\tnonEmptyString(user?.name)\n\t);\n}\n\nfunction consoleUrlFromEndpoint(endpoint: string): string {\n\tconst parsed = new URL(endpoint);\n\tparsed.pathname = \"/overview\";\n\tparsed.search = \"\";\n\tparsed.hash = \"\";\n\tconst env =\n\t\tparsed.hostname === \"app.evalops.dev\"\n\t\t\t? \"production\"\n\t\t\t: parsed.hostname === \"staging.evalops.dev\"\n\t\t\t\t? \"staging\"\n\t\t\t\t: \"local\";\n\tparsed.searchParams.set(\"env\", env);\n\treturn parsed.toString();\n}\n\nfunction countHighRiskFindings(summary: ControlPlaneSummaryOutput): number {\n\tconst findings = Array.isArray(summary.findings) ? summary.findings : [];\n\tconst findingCount = findings.filter((finding) => {\n\t\tconst record = isRecord(finding) ? finding : undefined;\n\t\tconst severity = nonEmptyString(record?.severity)?.toLowerCase();\n\t\treturn severity === \"critical\" || severity === \"high\";\n\t}).length;\n\tconst metricCount = summary.metrics?.high_risk_tools;\n\tif (typeof metricCount === \"number\" && Number.isFinite(metricCount)) {\n\t\treturn Math.max(findingCount, Math.max(0, Math.trunc(metricCount)));\n\t}\n\treturn findingCount;\n}\n\nfunction hasPolicyControl(summary: ControlPlaneSummaryOutput): boolean {\n\tconst approvalRequired = summary.metrics?.approval_required_tools ?? 0;\n\tif (approvalRequired > 0) {\n\t\treturn true;\n\t}\n\tconst controls = Array.isArray(summary.policy_controls)\n\t\t? summary.policy_controls\n\t\t: [];\n\treturn controls.some((control) => {\n\t\tconst record = isRecord(control) ? control : undefined;\n\t\treturn /approval|policy|starter/i.test(\n\t\t\t[\n\t\t\t\tnonEmptyString(record?.label),\n\t\t\t\tnonEmptyString(record?.value),\n\t\t\t\tnonEmptyString(record?.detail),\n\t\t\t]\n\t\t\t\t.filter(Boolean)\n\t\t\t\t.join(\" \"),\n\t\t);\n\t});\n}\n\nfunction hasTraceEvidence(summary: ControlPlaneSummaryOutput): boolean {\n\tconst evidence = Array.isArray(summary.evidence) ? summary.evidence : [];\n\treturn evidence.some((entry) => {\n\t\tconst record = isRecord(entry) ? entry : undefined;\n\t\treturn Boolean(\n\t\t\tnonEmptyString(record?.trace) ??\n\t\t\t\tnonEmptyString(record?.trace_id) ??\n\t\t\t\tnonEmptyString(record?.traceId),\n\t\t);\n\t});\n}\n\nfunction governedActionCount(summary: ControlPlaneSummaryOutput): number {\n\tconst metricTotal = summary.metrics?.total_tools;\n\tif (typeof metricTotal === \"number\" && Number.isFinite(metricTotal)) {\n\t\treturn Math.max(0, Math.trunc(metricTotal));\n\t}\n\treturn Array.isArray(summary.tools) ? summary.tools.length : 0;\n}\n\nfunction saveBootstrapMetadata(\n\tcredentials: OAuthCredentials,\n\tagentMcp: EvalOpsAgentMcpMetadata,\n\tsaveCredentials: typeof saveOAuthCredentials,\n): void {\n\tsaveCredentials(\"evalops\", {\n\t\t...credentials,\n\t\tmetadata: {\n\t\t\t...credentials.metadata,\n\t\t\tagentId: agentMcp.agentId ?? credentials.metadata?.agentId,\n\t\t\trunId: agentMcp.runId ?? credentials.metadata?.runId,\n\t\t\tsurface: agentMcp.surface,\n\t\t\tagentMcp,\n\t\t},\n\t});\n}\n\nexport async function bootstrapEvalOpsAgent(\n\toptions: EvalOpsInitOptions = {},\n\tdependencies: EvalOpsInitDependencies = {},\n): Promise<EvalOpsInitResult> {\n\tconst deps = {\n\t\tcreateMcpClient: dependencies.createMcpClient ?? createDefaultMcpClient,\n\t\tfetch: dependencies.fetch ?? fetch,\n\t\tgetOAuthToken: dependencies.getOAuthToken ?? getOAuthToken,\n\t\thasOAuthCredentials:\n\t\t\tdependencies.hasOAuthCredentials ?? hasOAuthCredentials,\n\t\tloadCredentials: dependencies.loadCredentials ?? loadOAuthCredentials,\n\t\tlogin: dependencies.login ?? login,\n\t\tnow: dependencies.now ?? (() => new Date()),\n\t\tonAuthUrl:\n\t\t\tdependencies.onAuthUrl ??\n\t\t\t((url: string) => {\n\t\t\t\tprocess.stdout.write(`${url}\\n`);\n\t\t\t}),\n\t\tonStatus: dependencies.onStatus ?? (() => undefined),\n\t\tsaveCredentials: dependencies.saveCredentials ?? saveOAuthCredentials,\n\t};\n\n\tconst oauthToken = await ensureEvalOpsLogin(options, deps);\n\tconst endpoint = await resolveAgentMcpEndpoint(options, deps);\n\tconst credentialsBeforeKey = deps.loadCredentials(\"evalops\");\n\tconst stored = getStoredAgentMcpMetadata(credentialsBeforeKey);\n\tconst identityBaseUrl = resolveIdentityBaseUrl(\n\t\tcredentialsBeforeKey,\n\t\tendpoint,\n\t);\n\tconst now = deps.now();\n\n\tlet apiKey = stored && !options.rotateKey ? stored.apiKey : undefined;\n\tlet keyOutput: CreateAPIKeyOutput | undefined;\n\tlet apiKeyCreated = false;\n\n\tif (!apiKey) {\n\t\tdeps.onStatus({ message: \"Creating EvalOps agent API key\" });\n\t\tkeyOutput = await createAgentAPIKey(\n\t\t\toptions,\n\t\t\tidentityBaseUrl,\n\t\t\toauthToken,\n\t\t\tdeps.fetch,\n\t\t\tnow,\n\t\t);\n\t\tapiKey = keyOutput.api_key;\n\t\tapiKeyCreated = true;\n\t} else {\n\t\tdeps.onStatus({ message: \"Reusing stored EvalOps agent API key\" });\n\t}\n\n\tdeps.onStatus({ message: \"Registering Maestro with EvalOps agent MCP\" });\n\tlet registerOutput: RegisterOutput;\n\tlet client: EvalOpsMcpClient;\n\tconst openAndRegister = async (token: string) => {\n\t\tconst mcpClient = deps.createMcpClient(endpoint.endpoint, token);\n\t\tawait mcpClient.connect();\n\t\ttry {\n\t\t\tconst output = await registerAgent(options, mcpClient);\n\t\t\treturn { client: mcpClient, registerOutput: output };\n\t\t} catch (error) {\n\t\t\tawait mcpClient.close().catch(() => undefined);\n\t\t\tthrow error;\n\t\t}\n\t};\n\ttry {\n\t\t({ client, registerOutput } = await openAndRegister(apiKey));\n\t} catch (error) {\n\t\tif (apiKeyCreated) {\n\t\t\tthrow error;\n\t\t}\n\t\tdeps.onStatus({\n\t\t\tmessage: \"Stored EvalOps agent API key failed; rotating and retrying\",\n\t\t});\n\t\tkeyOutput = await createAgentAPIKey(\n\t\t\t{ ...options, rotateKey: true },\n\t\t\tidentityBaseUrl,\n\t\t\toauthToken,\n\t\t\tdeps.fetch,\n\t\t\tnow,\n\t\t);\n\t\tapiKey = keyOutput.api_key;\n\t\tapiKeyCreated = true;\n\t\t({ client, registerOutput } = await openAndRegister(apiKey));\n\t}\n\n\tlet governedInferenceCheck: CheckActionOutput = {};\n\tlet controlPlaneSummary: ControlPlaneSummaryOutput = {};\n\ttry {\n\t\tdeps.onStatus({ message: \"Running first governed inference check\" });\n\t\tgovernedInferenceCheck = await runGovernedInferenceCheck(client);\n\t} catch (error) {\n\t\tconst reason = error instanceof Error ? error.message : String(error);\n\t\tdeps.onStatus({\n\t\t\tmessage: `EvalOps governed inference check unavailable; continuing bootstrap (${reason})`,\n\t\t});\n\t}\n\ttry {\n\t\tdeps.onStatus({ message: \"Loading EvalOps control-plane status\" });\n\t\tcontrolPlaneSummary = await loadControlPlaneSummary(client);\n\t} catch (error) {\n\t\tconst reason = error instanceof Error ? error.message : String(error);\n\t\tdeps.onStatus({\n\t\t\tmessage: `EvalOps control-plane status unavailable; continuing bootstrap (${reason})`,\n\t\t});\n\t} finally {\n\t\tawait client.close().catch(() => undefined);\n\t}\n\n\tconst credentials = deps.loadCredentials(\"evalops\");\n\tif (!credentials) {\n\t\tthrow new Error(\"EvalOps OAuth credentials disappeared during init\");\n\t}\n\tconst keyPrefix = nonEmptyString(keyOutput?.prefix) ?? stored?.keyPrefix;\n\tconst scopes = keyOutput?.scopes ?? stored?.scopes;\n\tconst integrationProfile =\n\t\tnonEmptyString(registerOutput.integration_profile) ??\n\t\tintegrationProfileForOptions(options);\n\tconst memoryMode =\n\t\tnonEmptyString(registerOutput.memory_mode) ?? memoryModeForOptions(options);\n\tconst runtimeOwner =\n\t\tnonEmptyString(registerOutput.runtime_owner) ??\n\t\truntimeOwnerForOptions(options);\n\tconst shimType =\n\t\tnonEmptyString(registerOutput.shim_type) ?? shimTypeForOptions(options);\n\tconst traceMode =\n\t\tnonEmptyString(registerOutput.trace_mode) ?? traceModeForOptions(options);\n\tconst agentMcp: EvalOpsAgentMcpMetadata = {\n\t\ttype: \"agent-mcp\",\n\t\tapiKey,\n\t\tcreatedAt: (apiKeyCreated\n\t\t\t? now\n\t\t\t: new Date(stored?.createdAt ?? now)\n\t\t).toISOString(),\n\t\tendpoint: endpoint.endpoint,\n\t\tregisteredAt: deps.now().toISOString(),\n\t\tsurface: options.surface ?? DEFAULT_SURFACE,\n\t\tagentId: registerOutput.agent_id,\n\t\texpiresAt: nonEmptyString(keyOutput?.expires_at) ?? stored?.expiresAt,\n\t\tintegrationProfile,\n\t\tkeyId: nonEmptyString(keyOutput?.key_id) ?? stored?.keyId,\n\t\tkeyName: nonEmptyString(keyOutput?.name) ?? stored?.keyName,\n\t\tkeyPrefix,\n\t\tmanifestUrl: endpoint.manifestUrl,\n\t\tmemoryMode,\n\t\tregistryVisible: registerOutput.registry_visible,\n\t\trunId: registerOutput.run_id,\n\t\truntimeOwner,\n\t\tscopes,\n\t\tsessionExpiresAt: registerOutput.expires_at,\n\t\tshimType,\n\t\ttraceMode,\n\t\tworkspaceId:\n\t\t\toptions.workspaceId ?? organizationIdFromCredentials(credentials),\n\t};\n\tsaveBootstrapMetadata(credentials, agentMcp, deps.saveCredentials);\n\n\treturn {\n\t\tagentId: registerOutput.agent_id,\n\t\tapiKeyCreated,\n\t\tapprovalPolicyAttached: hasPolicyControl(controlPlaneSummary),\n\t\tauthenticatedAs: authenticatedAsFromCredentials(credentials),\n\t\tconsoleUrl: consoleUrlFromEndpoint(endpoint.endpoint),\n\t\tendpoint: endpoint.endpoint,\n\t\tevidenceEventPublished: (controlPlaneSummary.evidence ?? []).length > 0,\n\t\tevidenceEvents: (controlPlaneSummary.evidence ?? []).length,\n\t\tgovernedActionsLoaded: governedActionCount(controlPlaneSummary),\n\t\tgovernedInferenceCheckRan: Boolean(governedInferenceCheck.decision),\n\t\tintegrationProfile,\n\t\tkeyPrefix,\n\t\tmanifestUrl: endpoint.manifestUrl,\n\t\tmemoryMode,\n\t\torganizationId: organizationIdFromCredentials(credentials),\n\t\tregistryVisible: registerOutput.registry_visible,\n\t\triskFindings: countHighRiskFindings(controlPlaneSummary),\n\t\trunId: registerOutput.run_id,\n\t\truntimeOwner,\n\t\tscopesGranted: registerOutput.scopes_granted,\n\t\tsessionExpiresAt: registerOutput.expires_at,\n\t\tshimType,\n\t\tstored: true,\n\t\ttraceIngestionStarted: hasTraceEvidence(controlPlaneSummary),\n\t\ttraceMode,\n\t};\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-mcp-metadata.d.ts","sourceRoot":"","sources":["../../src/evalops/agent-mcp-metadata.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,KAAK,gBAAgB,EAErB,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"agent-mcp-metadata.d.ts","sourceRoot":"","sources":["../../src/evalops/agent-mcp-metadata.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,KAAK,gBAAgB,EAErB,MAAM,qBAAqB,CAAC;AAG7B,MAAM,WAAW,uBAAuB;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,WAAW,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB;AAkBD,wBAAgB,yBAAyB,CACxC,WAAW,EAAE,gBAAgB,GAAG,IAAI,GAClC,uBAAuB,GAAG,SAAS,CAsCrC;AAED,wBAAgB,gCAAgC,IAC7C,uBAAuB,GACvB,SAAS,CAEX"}
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
import { loadOAuthCredentials, } from "../oauth/storage.js";
|
|
2
|
-
|
|
3
|
-
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
4
|
-
}
|
|
2
|
+
import { isRecord } from "../utils/json.js";
|
|
5
3
|
function nonEmptyString(value) {
|
|
6
4
|
return typeof value === "string" && value.trim().length > 0
|
|
7
5
|
? value.trim()
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-mcp-metadata.js","sourceRoot":"","sources":["../../src/evalops/agent-mcp-metadata.ts"],"names":[],"mappings":"AAAA,OAAO,EAEN,oBAAoB,GACpB,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"agent-mcp-metadata.js","sourceRoot":"","sources":["../../src/evalops/agent-mcp-metadata.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\ttype OAuthCredentials,\n\tloadOAuthCredentials,\n} from \"../oauth/storage.js\";\nimport { isRecord } from \"../utils/json.js\";\n\nexport interface EvalOpsAgentMcpMetadata {\n\tagentId?: string;\n\tapiKey?: string;\n\tcreatedAt: string;\n\tendpoint: string;\n\texpiresAt?: string;\n\tintegrationProfile?: string;\n\tkeyId?: string;\n\tkeyName?: string;\n\tkeyPrefix?: string;\n\tmanifestUrl?: string;\n\tmemoryMode?: string;\n\tregisteredAt: string;\n\tregistryVisible?: boolean;\n\trunId?: string;\n\truntimeOwner?: string;\n\tscopes?: string[];\n\tsessionExpiresAt?: string;\n\tshimType?: string;\n\tsurface: string;\n\ttraceMode?: string;\n\ttype: \"agent-mcp\";\n\tworkspaceId?: string;\n}\n\nfunction nonEmptyString(value: unknown): string | undefined {\n\treturn typeof value === \"string\" && value.trim().length > 0\n\t\t? value.trim()\n\t\t: undefined;\n}\n\nfunction stringArray(value: unknown): string[] | undefined {\n\tif (!Array.isArray(value)) {\n\t\treturn undefined;\n\t}\n\tconst values = value\n\t\t.map((entry) => nonEmptyString(entry))\n\t\t.filter((entry): entry is string => Boolean(entry));\n\treturn values.length > 0 ? values : undefined;\n}\n\nexport function getStoredAgentMcpMetadata(\n\tcredentials: OAuthCredentials | null,\n): EvalOpsAgentMcpMetadata | undefined {\n\tconst metadata = credentials?.metadata;\n\tconst agentMcp = isRecord(metadata?.agentMcp) ? metadata.agentMcp : undefined;\n\tconst apiKey = nonEmptyString(agentMcp?.apiKey);\n\tconst endpoint = nonEmptyString(agentMcp?.endpoint);\n\tconst registeredAt = nonEmptyString(agentMcp?.registeredAt);\n\tconst createdAt = nonEmptyString(agentMcp?.createdAt);\n\tconst surface = nonEmptyString(agentMcp?.surface);\n\tif (!apiKey || !endpoint || !registeredAt || !createdAt || !surface) {\n\t\treturn undefined;\n\t}\n\treturn {\n\t\ttype: \"agent-mcp\",\n\t\tapiKey,\n\t\tcreatedAt,\n\t\tendpoint,\n\t\tregisteredAt,\n\t\tsurface,\n\t\tagentId: nonEmptyString(agentMcp?.agentId),\n\t\texpiresAt: nonEmptyString(agentMcp?.expiresAt),\n\t\tintegrationProfile: nonEmptyString(agentMcp?.integrationProfile),\n\t\tkeyId: nonEmptyString(agentMcp?.keyId),\n\t\tkeyName: nonEmptyString(agentMcp?.keyName),\n\t\tkeyPrefix: nonEmptyString(agentMcp?.keyPrefix),\n\t\tmanifestUrl: nonEmptyString(agentMcp?.manifestUrl),\n\t\tmemoryMode: nonEmptyString(agentMcp?.memoryMode),\n\t\tregistryVisible:\n\t\t\ttypeof agentMcp?.registryVisible === \"boolean\"\n\t\t\t\t? agentMcp.registryVisible\n\t\t\t\t: undefined,\n\t\trunId: nonEmptyString(agentMcp?.runId),\n\t\truntimeOwner: nonEmptyString(agentMcp?.runtimeOwner),\n\t\tscopes: stringArray(agentMcp?.scopes),\n\t\tsessionExpiresAt: nonEmptyString(agentMcp?.sessionExpiresAt),\n\t\tshimType: nonEmptyString(agentMcp?.shimType),\n\t\ttraceMode: nonEmptyString(agentMcp?.traceMode),\n\t\tworkspaceId: nonEmptyString(agentMcp?.workspaceId),\n\t};\n}\n\nexport function getStoredEvalOpsAgentMcpMetadata():\n\t| EvalOpsAgentMcpMetadata\n\t| undefined {\n\treturn getStoredAgentMcpMetadata(loadOAuthCredentials(\"evalops\"));\n}\n"]}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { main } from "./main.js";
|
|
2
|
+
export { MAESTRO_REVIEW_WORKFLOW_PATH, buildMaestroReviewWorkflow, writeMaestroReviewWorkflow, type MaestroReviewWorkflowOptions, } from "./installers/maestro-review-workflow.js";
|
|
2
3
|
export { SessionManager } from "./session/manager.js";
|
|
3
4
|
export { askUserTool, bashTool, backgroundTasksTool, codingTools, editTool, notebookEditTool, readTool, todoTool, writeTool, ToolResultCache, createToolResultCache, getGlobalToolResultCache, } from "./tools/index.js";
|
|
4
5
|
export { recordEvaluationResult, recordSubagentDispatch, recordToolExecution, } from "./telemetry.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EACN,WAAW,EACX,QAAQ,EACR,mBAAmB,EACnB,WAAW,EACX,QAAQ,EACR,gBAAgB,EAChB,QAAQ,EACR,QAAQ,EACR,SAAS,EAET,eAAe,EACf,qBAAqB,EACrB,wBAAwB,GACxB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACN,sBAAsB,EACtB,sBAAsB,EACtB,mBAAmB,GACnB,MAAM,gBAAgB,CAAC;AAGxB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,0BAA0B,CAAC;AACzC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iCAAiC,CAAC;AAChD,cAAc,sCAAsC,CAAC;AACrD,cAAc,uCAAuC,CAAC;AAGtD,OAAO,EACN,sBAAsB,EACtB,iBAAiB,EACjB,oBAAoB,EACpB,sBAAsB,EACtB,QAAQ,EACR,KAAK,UAAU,EACf,KAAK,QAAQ,EACb,KAAK,WAAW,EAChB,KAAK,iBAAiB,GACtB,MAAM,kCAAkC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EACN,4BAA4B,EAC5B,0BAA0B,EAC1B,0BAA0B,EAC1B,KAAK,4BAA4B,GACjC,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EACN,WAAW,EACX,QAAQ,EACR,mBAAmB,EACnB,WAAW,EACX,QAAQ,EACR,gBAAgB,EAChB,QAAQ,EACR,QAAQ,EACR,SAAS,EAET,eAAe,EACf,qBAAqB,EACrB,wBAAwB,GACxB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACN,sBAAsB,EACtB,sBAAsB,EACtB,mBAAmB,GACnB,MAAM,gBAAgB,CAAC;AAGxB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,0BAA0B,CAAC;AACzC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iCAAiC,CAAC;AAChD,cAAc,sCAAsC,CAAC;AACrD,cAAc,uCAAuC,CAAC;AAGtD,OAAO,EACN,sBAAsB,EACtB,iBAAiB,EACjB,oBAAoB,EACpB,sBAAsB,EACtB,QAAQ,EACR,KAAK,UAAU,EACf,KAAK,QAAQ,EACb,KAAK,WAAW,EAChB,KAAK,iBAAiB,GACtB,MAAM,kCAAkC,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { main } from "./main.js";
|
|
2
|
+
export { MAESTRO_REVIEW_WORKFLOW_PATH, buildMaestroReviewWorkflow, writeMaestroReviewWorkflow, } from "./installers/maestro-review-workflow.js";
|
|
2
3
|
export { SessionManager } from "./session/manager.js";
|
|
3
4
|
export { askUserTool, bashTool, backgroundTasksTool, codingTools, editTool, notebookEditTool, readTool, todoTool, writeTool,
|
|
4
5
|
// Tool result caching
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EACN,WAAW,EACX,QAAQ,EACR,mBAAmB,EACnB,WAAW,EACX,QAAQ,EACR,gBAAgB,EAChB,QAAQ,EACR,QAAQ,EACR,SAAS;AACT,sBAAsB;AACtB,eAAe,EACf,qBAAqB,EACrB,wBAAwB,GACxB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACN,sBAAsB,EACtB,sBAAsB,EACtB,mBAAmB,GACnB,MAAM,gBAAgB,CAAC;AAExB,wCAAwC;AACxC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,0BAA0B,CAAC;AACzC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iCAAiC,CAAC;AAChD,cAAc,sCAAsC,CAAC;AACrD,cAAc,uCAAuC,CAAC;AAEtD,qDAAqD;AACrD,OAAO,EACN,sBAAsB,EACtB,iBAAiB,EACjB,oBAAoB,EACpB,sBAAsB,EACtB,QAAQ,GAKR,MAAM,kCAAkC,CAAC","sourcesContent":["export { main } from \"./main.js\";\nexport { SessionManager } from \"./session/manager.js\";\nexport {\n\taskUserTool,\n\tbashTool,\n\tbackgroundTasksTool,\n\tcodingTools,\n\teditTool,\n\tnotebookEditTool,\n\treadTool,\n\ttodoTool,\n\twriteTool,\n\t// Tool result caching\n\tToolResultCache,\n\tcreateToolResultCache,\n\tgetGlobalToolResultCache,\n} from \"./tools/index.js\";\nexport {\n\trecordEvaluationResult,\n\trecordSubagentDispatch,\n\trecordToolExecution,\n} from \"./telemetry.js\";\n\n// SDK tool types for external consumers\nexport * from \"./sdk-tools.js\";\nexport * from \"./platform/a2a-client.js\";\nexport * from \"./platform/a2a-peer-pairing.js\";\nexport * from \"./platform/a2a-peer-registry.js\";\nexport * from \"./platform/operating-plane-client.js\";\nexport * from \"./platform/operating-plane-summary.js\";\n\n// Distributed lock manager for concurrent operations\nexport {\n\tDistributedLockManager,\n\tcreateLockManager,\n\tgetGlobalLockManager,\n\tresetGlobalLockManager,\n\twithLock,\n\ttype LockResult,\n\ttype LockInfo,\n\ttype LockOptions,\n\ttype LockManagerConfig,\n} from \"./db/distributed-lock-manager.js\";\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EACN,4BAA4B,EAC5B,0BAA0B,EAC1B,0BAA0B,GAE1B,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EACN,WAAW,EACX,QAAQ,EACR,mBAAmB,EACnB,WAAW,EACX,QAAQ,EACR,gBAAgB,EAChB,QAAQ,EACR,QAAQ,EACR,SAAS;AACT,sBAAsB;AACtB,eAAe,EACf,qBAAqB,EACrB,wBAAwB,GACxB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACN,sBAAsB,EACtB,sBAAsB,EACtB,mBAAmB,GACnB,MAAM,gBAAgB,CAAC;AAExB,wCAAwC;AACxC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,0BAA0B,CAAC;AACzC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iCAAiC,CAAC;AAChD,cAAc,sCAAsC,CAAC;AACrD,cAAc,uCAAuC,CAAC;AAEtD,qDAAqD;AACrD,OAAO,EACN,sBAAsB,EACtB,iBAAiB,EACjB,oBAAoB,EACpB,sBAAsB,EACtB,QAAQ,GAKR,MAAM,kCAAkC,CAAC","sourcesContent":["export { main } from \"./main.js\";\nexport {\n\tMAESTRO_REVIEW_WORKFLOW_PATH,\n\tbuildMaestroReviewWorkflow,\n\twriteMaestroReviewWorkflow,\n\ttype MaestroReviewWorkflowOptions,\n} from \"./installers/maestro-review-workflow.js\";\nexport { SessionManager } from \"./session/manager.js\";\nexport {\n\taskUserTool,\n\tbashTool,\n\tbackgroundTasksTool,\n\tcodingTools,\n\teditTool,\n\tnotebookEditTool,\n\treadTool,\n\ttodoTool,\n\twriteTool,\n\t// Tool result caching\n\tToolResultCache,\n\tcreateToolResultCache,\n\tgetGlobalToolResultCache,\n} from \"./tools/index.js\";\nexport {\n\trecordEvaluationResult,\n\trecordSubagentDispatch,\n\trecordToolExecution,\n} from \"./telemetry.js\";\n\n// SDK tool types for external consumers\nexport * from \"./sdk-tools.js\";\nexport * from \"./platform/a2a-client.js\";\nexport * from \"./platform/a2a-peer-pairing.js\";\nexport * from \"./platform/a2a-peer-registry.js\";\nexport * from \"./platform/operating-plane-client.js\";\nexport * from \"./platform/operating-plane-summary.js\";\n\n// Distributed lock manager for concurrent operations\nexport {\n\tDistributedLockManager,\n\tcreateLockManager,\n\tgetGlobalLockManager,\n\tresetGlobalLockManager,\n\twithLock,\n\ttype LockResult,\n\ttype LockInfo,\n\ttype LockOptions,\n\ttype LockManagerConfig,\n} from \"./db/distributed-lock-manager.js\";\n"]}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/** Repo-relative path the workflow is written to. */
|
|
2
|
+
export declare const MAESTRO_REVIEW_WORKFLOW_PATH = ".github/workflows/maestro-review.yml";
|
|
3
|
+
export interface MaestroReviewWorkflowOptions {
|
|
4
|
+
/** Node major version used to run Maestro in CI. Default "20". */
|
|
5
|
+
nodeVersion?: string;
|
|
6
|
+
/** npm package installed in CI. Default "maestro". */
|
|
7
|
+
maestroPackage?: string;
|
|
8
|
+
/** Version/tag of the package to install. Default "latest". */
|
|
9
|
+
maestroVersion?: string;
|
|
10
|
+
/**
|
|
11
|
+
* Optional provider passed to `maestro exec --provider` when no model is set.
|
|
12
|
+
* Defaults to the provider inferred from the API key secret/env var and falls
|
|
13
|
+
* back to "anthropic".
|
|
14
|
+
*/
|
|
15
|
+
provider?: string;
|
|
16
|
+
/** Optional model id passed to `maestro exec --model`. */
|
|
17
|
+
model?: string;
|
|
18
|
+
/**
|
|
19
|
+
* Name of the repository secret holding the model provider API key. Defaults
|
|
20
|
+
* to the provider's expected runtime env var (e.g. "ANTHROPIC_API_KEY").
|
|
21
|
+
*/
|
|
22
|
+
apiKeySecretName?: string;
|
|
23
|
+
/**
|
|
24
|
+
* Environment variable exposed to Maestro. Defaults to the provider-specific
|
|
25
|
+
* API key env var so custom secret names still work at runtime.
|
|
26
|
+
*/
|
|
27
|
+
apiKeyEnvName?: string;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Build the `.github/workflows/maestro-review.yml` contents as a YAML string.
|
|
31
|
+
*/
|
|
32
|
+
export declare function buildMaestroReviewWorkflow(options?: MaestroReviewWorkflowOptions): string;
|
|
33
|
+
/**
|
|
34
|
+
* Write the review workflow into the target repository, creating the
|
|
35
|
+
* `.github/workflows` directory if needed. Returns the absolute path written.
|
|
36
|
+
*/
|
|
37
|
+
export declare function writeMaestroReviewWorkflow(repoRoot: string, options?: MaestroReviewWorkflowOptions): string;
|
|
38
|
+
//# sourceMappingURL=maestro-review-workflow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"maestro-review-workflow.d.ts","sourceRoot":"","sources":["../../src/installers/maestro-review-workflow.ts"],"names":[],"mappings":"AAGA,qDAAqD;AACrD,eAAO,MAAM,4BAA4B,yCACF,CAAC;AAExC,MAAM,WAAW,4BAA4B;IAC5C,kEAAkE;IAClE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sDAAsD;IACtD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,+DAA+D;IAC/D,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0DAA0D;IAC1D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACvB;AAwID;;GAEG;AACH,wBAAgB,0BAA0B,CACzC,OAAO,GAAE,4BAAiC,GACxC,MAAM,CA0DR;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CACzC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,4BAAiC,GACxC,MAAM,CAIR"}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import { join } from "node:path";
|
|
2
|
+
import { writeTextFileAtomic } from "../utils/fs.js";
|
|
3
|
+
/** Repo-relative path the workflow is written to. */
|
|
4
|
+
export const MAESTRO_REVIEW_WORKFLOW_PATH = ".github/workflows/maestro-review.yml";
|
|
5
|
+
const PROVIDER_API_KEY_ENV_NAMES = {
|
|
6
|
+
anthropic: "ANTHROPIC_API_KEY",
|
|
7
|
+
openai: "OPENAI_API_KEY",
|
|
8
|
+
"openai-codex": "OPENAI_CODEX_TOKEN",
|
|
9
|
+
"azure-openai": "AZURE_OPENAI_API_KEY",
|
|
10
|
+
google: "GEMINI_API_KEY",
|
|
11
|
+
evalops: "MAESTRO_EVALOPS_ACCESS_TOKEN",
|
|
12
|
+
groq: "GROQ_API_KEY",
|
|
13
|
+
cerebras: "CEREBRAS_API_KEY",
|
|
14
|
+
openrouter: "OPENROUTER_API_KEY",
|
|
15
|
+
mistral: "MISTRAL_API_KEY",
|
|
16
|
+
deepseek: "DEEPSEEK_API_KEY",
|
|
17
|
+
xai: "XAI_API_KEY",
|
|
18
|
+
zai: "ZAI_API_KEY",
|
|
19
|
+
writer: "WRITER_API_KEY",
|
|
20
|
+
moonshot: "MOONSHOT_API_KEY",
|
|
21
|
+
dashscope: "DASHSCOPE_API_KEY",
|
|
22
|
+
minimax: "MINIMAX_API_KEY",
|
|
23
|
+
};
|
|
24
|
+
function validateEnvName(name, optionName) {
|
|
25
|
+
if (!/^[A-Z_][A-Z0-9_]*$/.test(name)) {
|
|
26
|
+
throw new Error(`${optionName} must be a valid GitHub Actions env name: ${name}`);
|
|
27
|
+
}
|
|
28
|
+
return name;
|
|
29
|
+
}
|
|
30
|
+
function validateSecretName(name) {
|
|
31
|
+
if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(name)) {
|
|
32
|
+
throw new Error(`apiKeySecretName must be a valid GitHub Actions secret name: ${name}`);
|
|
33
|
+
}
|
|
34
|
+
return name;
|
|
35
|
+
}
|
|
36
|
+
function getDefaultApiKeyEnvName(provider) {
|
|
37
|
+
return (PROVIDER_API_KEY_ENV_NAMES[provider] ??
|
|
38
|
+
`${provider.toUpperCase().replace(/[^A-Z0-9]/g, "_")}_API_KEY`);
|
|
39
|
+
}
|
|
40
|
+
function validateYamlScalar(value, optionName) {
|
|
41
|
+
if (/\r|\n/.test(value)) {
|
|
42
|
+
throw new Error(`${optionName} must not contain newlines`);
|
|
43
|
+
}
|
|
44
|
+
return value;
|
|
45
|
+
}
|
|
46
|
+
function shellQuote(value) {
|
|
47
|
+
return `'${value.replaceAll("'", "'\\''")}'`;
|
|
48
|
+
}
|
|
49
|
+
const PROVIDER_BY_API_KEY_ENV_VAR = {
|
|
50
|
+
ANTHROPIC_API_KEY: "anthropic",
|
|
51
|
+
GEMINI_API_KEY: "google",
|
|
52
|
+
GOOGLE_GEMINI_CLI_TOKEN: "google-gemini-cli",
|
|
53
|
+
GOOGLE_ANTIGRAVITY_TOKEN: "google-antigravity",
|
|
54
|
+
OPENAI_API_KEY: "openai",
|
|
55
|
+
OPENAI_CODEX_TOKEN: "openai-codex",
|
|
56
|
+
OPENAI_CODEX_ACCESS_TOKEN: "openai-codex",
|
|
57
|
+
CODEX_API_KEY: "openai-codex",
|
|
58
|
+
AZURE_OPENAI_API_KEY: "azure-openai",
|
|
59
|
+
MAESTRO_EVALOPS_ACCESS_TOKEN: "evalops",
|
|
60
|
+
WRITER_API_KEY: "writer",
|
|
61
|
+
XAI_API_KEY: "xai",
|
|
62
|
+
GROQ_API_KEY: "groq",
|
|
63
|
+
CEREBRAS_API_KEY: "cerebras",
|
|
64
|
+
OPENROUTER_API_KEY: "openrouter",
|
|
65
|
+
ZAI_API_KEY: "zai",
|
|
66
|
+
MISTRAL_API_KEY: "mistral",
|
|
67
|
+
DEEPSEEK_API_KEY: "deepseek",
|
|
68
|
+
MOONSHOT_API_KEY: "moonshot",
|
|
69
|
+
KIMI_API_KEY: "moonshot",
|
|
70
|
+
DASHSCOPE_API_KEY: "dashscope",
|
|
71
|
+
QWEN_API_KEY: "dashscope",
|
|
72
|
+
MINIMAX_API_KEY: "minimax",
|
|
73
|
+
};
|
|
74
|
+
function inferProviderFromApiKeyEnvVar(apiKeySecretName) {
|
|
75
|
+
return PROVIDER_BY_API_KEY_ENV_VAR[apiKeySecretName];
|
|
76
|
+
}
|
|
77
|
+
function resolveOptions(options) {
|
|
78
|
+
const inferredProvider = options.apiKeySecretName &&
|
|
79
|
+
inferProviderFromApiKeyEnvVar(options.apiKeySecretName);
|
|
80
|
+
const provider = validateYamlScalar(options.provider ?? inferredProvider ?? "anthropic", "provider");
|
|
81
|
+
const apiKeyEnvName = validateEnvName(options.apiKeyEnvName ?? getDefaultApiKeyEnvName(provider), "apiKeyEnvName");
|
|
82
|
+
return {
|
|
83
|
+
nodeVersion: validateYamlScalar(options.nodeVersion ?? "20", "nodeVersion"),
|
|
84
|
+
maestroPackage: validateYamlScalar(options.maestroPackage ?? "maestro", "maestroPackage"),
|
|
85
|
+
maestroVersion: validateYamlScalar(options.maestroVersion ?? "latest", "maestroVersion"),
|
|
86
|
+
provider,
|
|
87
|
+
model: options.model === undefined
|
|
88
|
+
? undefined
|
|
89
|
+
: validateYamlScalar(options.model, "model"),
|
|
90
|
+
apiKeySecretName: validateSecretName(options.apiKeySecretName ?? apiKeyEnvName),
|
|
91
|
+
apiKeyEnvName,
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Build the `.github/workflows/maestro-review.yml` contents as a YAML string.
|
|
96
|
+
*/
|
|
97
|
+
export function buildMaestroReviewWorkflow(options = {}) {
|
|
98
|
+
const resolved = resolveOptions(options);
|
|
99
|
+
const modelFlag = resolved.model
|
|
100
|
+
? ` --model ${shellQuote(resolved.model)}`
|
|
101
|
+
: "";
|
|
102
|
+
const packageSpec = `${resolved.maestroPackage}@${resolved.maestroVersion}`;
|
|
103
|
+
// Keep ${...} placeholders as literal shell expansions in the generated YAML.
|
|
104
|
+
const reviewPrompt = "Use the pr-review skill to review the changes in this pull request " +
|
|
105
|
+
"(#${MAESTRO_PR_NUMBER}) from merge base ${MAESTRO_MERGE_BASE_SHA} to " +
|
|
106
|
+
"${MAESTRO_HEAD_SHA} (equivalent to the three-dot PR diff " +
|
|
107
|
+
"${MAESTRO_BASE_SHA}...${MAESTRO_HEAD_SHA}). Produce a " +
|
|
108
|
+
"merge-readiness review ordered by severity, with file and line " +
|
|
109
|
+
"references.";
|
|
110
|
+
return `# Generated by Maestro (install-code-review). Re-running the installer
|
|
111
|
+
# overwrites this file; hand edits may be lost.
|
|
112
|
+
name: Maestro Code Review
|
|
113
|
+
|
|
114
|
+
on:
|
|
115
|
+
pull_request:
|
|
116
|
+
types: [opened, synchronize, reopened]
|
|
117
|
+
|
|
118
|
+
permissions:
|
|
119
|
+
contents: read
|
|
120
|
+
pull-requests: write
|
|
121
|
+
|
|
122
|
+
concurrency:
|
|
123
|
+
group: maestro-review-\${{ github.event.pull_request.number }}
|
|
124
|
+
cancel-in-progress: true
|
|
125
|
+
|
|
126
|
+
jobs:
|
|
127
|
+
review:
|
|
128
|
+
runs-on: ubuntu-latest
|
|
129
|
+
steps:
|
|
130
|
+
- uses: actions/checkout@v4
|
|
131
|
+
with:
|
|
132
|
+
fetch-depth: 0
|
|
133
|
+
- uses: actions/setup-node@v4
|
|
134
|
+
with:
|
|
135
|
+
node-version: ${JSON.stringify(resolved.nodeVersion)}
|
|
136
|
+
- name: Install Maestro
|
|
137
|
+
run: npm install -g ${shellQuote(packageSpec)}
|
|
138
|
+
- name: Review pull request
|
|
139
|
+
env:
|
|
140
|
+
${resolved.apiKeyEnvName}: \${{ secrets.${resolved.apiKeySecretName} }}
|
|
141
|
+
GH_TOKEN: \${{ github.token }}
|
|
142
|
+
GITHUB_PERSONAL_ACCESS_TOKEN: \${{ github.token }}
|
|
143
|
+
MAESTRO_PR_NUMBER: \${{ github.event.pull_request.number }}
|
|
144
|
+
MAESTRO_BASE_SHA: \${{ github.event.pull_request.base.sha }}
|
|
145
|
+
MAESTRO_HEAD_SHA: \${{ github.event.pull_request.head.sha }}
|
|
146
|
+
run: |
|
|
147
|
+
export MAESTRO_MERGE_BASE_SHA="$(git merge-base "\${MAESTRO_BASE_SHA}" "\${MAESTRO_HEAD_SHA}")"
|
|
148
|
+
maestro exec --provider ${shellQuote(resolved.provider)}${modelFlag} --output-last-message review.md \\
|
|
149
|
+
"${reviewPrompt}"
|
|
150
|
+
gh pr comment "\${MAESTRO_PR_NUMBER}" --edit-last --body-file review.md || \\
|
|
151
|
+
gh pr comment "\${MAESTRO_PR_NUMBER}" --body-file review.md
|
|
152
|
+
`;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Write the review workflow into the target repository, creating the
|
|
156
|
+
* `.github/workflows` directory if needed. Returns the absolute path written.
|
|
157
|
+
*/
|
|
158
|
+
export function writeMaestroReviewWorkflow(repoRoot, options = {}) {
|
|
159
|
+
const target = join(repoRoot, MAESTRO_REVIEW_WORKFLOW_PATH);
|
|
160
|
+
writeTextFileAtomic(target, buildMaestroReviewWorkflow(options));
|
|
161
|
+
return target;
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=maestro-review-workflow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"maestro-review-workflow.js","sourceRoot":"","sources":["../../src/installers/maestro-review-workflow.ts"],"names":[],"mappings":"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","sourcesContent":["import { join } from \"node:path\";\nimport { writeTextFileAtomic } from \"../utils/fs.js\";\n\n/** Repo-relative path the workflow is written to. */\nexport const MAESTRO_REVIEW_WORKFLOW_PATH =\n\t\".github/workflows/maestro-review.yml\";\n\nexport interface MaestroReviewWorkflowOptions {\n\t/** Node major version used to run Maestro in CI. Default \"20\". */\n\tnodeVersion?: string;\n\t/** npm package installed in CI. Default \"maestro\". */\n\tmaestroPackage?: string;\n\t/** Version/tag of the package to install. Default \"latest\". */\n\tmaestroVersion?: string;\n\t/**\n\t * Optional provider passed to `maestro exec --provider` when no model is set.\n\t * Defaults to the provider inferred from the API key secret/env var and falls\n\t * back to \"anthropic\".\n\t */\n\tprovider?: string;\n\t/** Optional model id passed to `maestro exec --model`. */\n\tmodel?: string;\n\t/**\n\t * Name of the repository secret holding the model provider API key. Defaults\n\t * to the provider's expected runtime env var (e.g. \"ANTHROPIC_API_KEY\").\n\t */\n\tapiKeySecretName?: string;\n\t/**\n\t * Environment variable exposed to Maestro. Defaults to the provider-specific\n\t * API key env var so custom secret names still work at runtime.\n\t */\n\tapiKeyEnvName?: string;\n}\n\ninterface ResolvedOptions {\n\tnodeVersion: string;\n\tmaestroPackage: string;\n\tmaestroVersion: string;\n\tprovider: string;\n\tmodel?: string;\n\tapiKeySecretName: string;\n\tapiKeyEnvName: string;\n}\n\nconst PROVIDER_API_KEY_ENV_NAMES: Record<string, string> = {\n\tanthropic: \"ANTHROPIC_API_KEY\",\n\topenai: \"OPENAI_API_KEY\",\n\t\"openai-codex\": \"OPENAI_CODEX_TOKEN\",\n\t\"azure-openai\": \"AZURE_OPENAI_API_KEY\",\n\tgoogle: \"GEMINI_API_KEY\",\n\tevalops: \"MAESTRO_EVALOPS_ACCESS_TOKEN\",\n\tgroq: \"GROQ_API_KEY\",\n\tcerebras: \"CEREBRAS_API_KEY\",\n\topenrouter: \"OPENROUTER_API_KEY\",\n\tmistral: \"MISTRAL_API_KEY\",\n\tdeepseek: \"DEEPSEEK_API_KEY\",\n\txai: \"XAI_API_KEY\",\n\tzai: \"ZAI_API_KEY\",\n\twriter: \"WRITER_API_KEY\",\n\tmoonshot: \"MOONSHOT_API_KEY\",\n\tdashscope: \"DASHSCOPE_API_KEY\",\n\tminimax: \"MINIMAX_API_KEY\",\n};\n\nfunction validateEnvName(name: string, optionName: string): string {\n\tif (!/^[A-Z_][A-Z0-9_]*$/.test(name)) {\n\t\tthrow new Error(\n\t\t\t`${optionName} must be a valid GitHub Actions env name: ${name}`,\n\t\t);\n\t}\n\treturn name;\n}\n\nfunction validateSecretName(name: string): string {\n\tif (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(name)) {\n\t\tthrow new Error(\n\t\t\t`apiKeySecretName must be a valid GitHub Actions secret name: ${name}`,\n\t\t);\n\t}\n\treturn name;\n}\n\nfunction getDefaultApiKeyEnvName(provider: string): string {\n\treturn (\n\t\tPROVIDER_API_KEY_ENV_NAMES[provider] ??\n\t\t`${provider.toUpperCase().replace(/[^A-Z0-9]/g, \"_\")}_API_KEY`\n\t);\n}\n\nfunction validateYamlScalar(value: string, optionName: string): string {\n\tif (/\\r|\\n/.test(value)) {\n\t\tthrow new Error(`${optionName} must not contain newlines`);\n\t}\n\treturn value;\n}\n\nfunction shellQuote(value: string): string {\n\treturn `'${value.replaceAll(\"'\", \"'\\\\''\")}'`;\n}\n\nconst PROVIDER_BY_API_KEY_ENV_VAR: Record<string, string> = {\n\tANTHROPIC_API_KEY: \"anthropic\",\n\tGEMINI_API_KEY: \"google\",\n\tGOOGLE_GEMINI_CLI_TOKEN: \"google-gemini-cli\",\n\tGOOGLE_ANTIGRAVITY_TOKEN: \"google-antigravity\",\n\tOPENAI_API_KEY: \"openai\",\n\tOPENAI_CODEX_TOKEN: \"openai-codex\",\n\tOPENAI_CODEX_ACCESS_TOKEN: \"openai-codex\",\n\tCODEX_API_KEY: \"openai-codex\",\n\tAZURE_OPENAI_API_KEY: \"azure-openai\",\n\tMAESTRO_EVALOPS_ACCESS_TOKEN: \"evalops\",\n\tWRITER_API_KEY: \"writer\",\n\tXAI_API_KEY: \"xai\",\n\tGROQ_API_KEY: \"groq\",\n\tCEREBRAS_API_KEY: \"cerebras\",\n\tOPENROUTER_API_KEY: \"openrouter\",\n\tZAI_API_KEY: \"zai\",\n\tMISTRAL_API_KEY: \"mistral\",\n\tDEEPSEEK_API_KEY: \"deepseek\",\n\tMOONSHOT_API_KEY: \"moonshot\",\n\tKIMI_API_KEY: \"moonshot\",\n\tDASHSCOPE_API_KEY: \"dashscope\",\n\tQWEN_API_KEY: \"dashscope\",\n\tMINIMAX_API_KEY: \"minimax\",\n};\n\nfunction inferProviderFromApiKeyEnvVar(\n\tapiKeySecretName: string,\n): string | undefined {\n\treturn PROVIDER_BY_API_KEY_ENV_VAR[apiKeySecretName];\n}\n\nfunction resolveOptions(\n\toptions: MaestroReviewWorkflowOptions,\n): ResolvedOptions {\n\tconst inferredProvider =\n\t\toptions.apiKeySecretName &&\n\t\tinferProviderFromApiKeyEnvVar(options.apiKeySecretName);\n\tconst provider = validateYamlScalar(\n\t\toptions.provider ?? inferredProvider ?? \"anthropic\",\n\t\t\"provider\",\n\t);\n\tconst apiKeyEnvName = validateEnvName(\n\t\toptions.apiKeyEnvName ?? getDefaultApiKeyEnvName(provider),\n\t\t\"apiKeyEnvName\",\n\t);\n\treturn {\n\t\tnodeVersion: validateYamlScalar(options.nodeVersion ?? \"20\", \"nodeVersion\"),\n\t\tmaestroPackage: validateYamlScalar(\n\t\t\toptions.maestroPackage ?? \"maestro\",\n\t\t\t\"maestroPackage\",\n\t\t),\n\t\tmaestroVersion: validateYamlScalar(\n\t\t\toptions.maestroVersion ?? \"latest\",\n\t\t\t\"maestroVersion\",\n\t\t),\n\t\tprovider,\n\t\tmodel:\n\t\t\toptions.model === undefined\n\t\t\t\t? undefined\n\t\t\t\t: validateYamlScalar(options.model, \"model\"),\n\t\tapiKeySecretName: validateSecretName(\n\t\t\toptions.apiKeySecretName ?? apiKeyEnvName,\n\t\t),\n\t\tapiKeyEnvName,\n\t};\n}\n\n/**\n * Build the `.github/workflows/maestro-review.yml` contents as a YAML string.\n */\nexport function buildMaestroReviewWorkflow(\n\toptions: MaestroReviewWorkflowOptions = {},\n): string {\n\tconst resolved = resolveOptions(options);\n\tconst modelFlag = resolved.model\n\t\t? ` --model ${shellQuote(resolved.model)}`\n\t\t: \"\";\n\tconst packageSpec = `${resolved.maestroPackage}@${resolved.maestroVersion}`;\n\t// Keep ${...} placeholders as literal shell expansions in the generated YAML.\n\tconst reviewPrompt =\n\t\t\"Use the pr-review skill to review the changes in this pull request \" +\n\t\t\"(#${MAESTRO_PR_NUMBER}) from merge base ${MAESTRO_MERGE_BASE_SHA} to \" +\n\t\t\"${MAESTRO_HEAD_SHA} (equivalent to the three-dot PR diff \" +\n\t\t\"${MAESTRO_BASE_SHA}...${MAESTRO_HEAD_SHA}). Produce a \" +\n\t\t\"merge-readiness review ordered by severity, with file and line \" +\n\t\t\"references.\";\n\n\treturn `# Generated by Maestro (install-code-review). Re-running the installer\n# overwrites this file; hand edits may be lost.\nname: Maestro Code Review\n\non:\n pull_request:\n types: [opened, synchronize, reopened]\n\npermissions:\n contents: read\n pull-requests: write\n\nconcurrency:\n group: maestro-review-\\${{ github.event.pull_request.number }}\n cancel-in-progress: true\n\njobs:\n review:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v4\n with:\n fetch-depth: 0\n - uses: actions/setup-node@v4\n with:\n node-version: ${JSON.stringify(resolved.nodeVersion)}\n - name: Install Maestro\n run: npm install -g ${shellQuote(packageSpec)}\n - name: Review pull request\n env:\n ${resolved.apiKeyEnvName}: \\${{ secrets.${resolved.apiKeySecretName} }}\n GH_TOKEN: \\${{ github.token }}\n GITHUB_PERSONAL_ACCESS_TOKEN: \\${{ github.token }}\n MAESTRO_PR_NUMBER: \\${{ github.event.pull_request.number }}\n MAESTRO_BASE_SHA: \\${{ github.event.pull_request.base.sha }}\n MAESTRO_HEAD_SHA: \\${{ github.event.pull_request.head.sha }}\n run: |\n export MAESTRO_MERGE_BASE_SHA=\"$(git merge-base \"\\${MAESTRO_BASE_SHA}\" \"\\${MAESTRO_HEAD_SHA}\")\"\n maestro exec --provider ${shellQuote(resolved.provider)}${modelFlag} --output-last-message review.md \\\\\n \"${reviewPrompt}\"\n gh pr comment \"\\${MAESTRO_PR_NUMBER}\" --edit-last --body-file review.md || \\\\\n gh pr comment \"\\${MAESTRO_PR_NUMBER}\" --body-file review.md\n`;\n}\n\n/**\n * Write the review workflow into the target repository, creating the\n * `.github/workflows` directory if needed. Returns the absolute path written.\n */\nexport function writeMaestroReviewWorkflow(\n\trepoRoot: string,\n\toptions: MaestroReviewWorkflowOptions = {},\n): string {\n\tconst target = join(repoRoot, MAESTRO_REVIEW_WORKFLOW_PATH);\n\twriteTextFileAtomic(target, buildMaestroReviewWorkflow(options));\n\treturn target;\n}\n"]}
|
package/dist/load-env.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"load-env.d.ts","sourceRoot":"","sources":["../src/load-env.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"load-env.d.ts","sourceRoot":"","sources":["../src/load-env.ts"],"names":[],"mappings":"AA2PA,wBAAgB,OAAO,IAAI,MAAM,EAAE,CAqClC;AAED,wBAAgB,gBAAgB,IAAI,MAAM,EAAE,CAE3C;AAED,wBAAgB,8BAA8B,IAAI,MAAM,EAAE,CAwBzD;AAED,MAAM,WAAW,gBAAgB;IAChC,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,eAAe,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAChC,aAAa,GAAE,MAAM,EAAO,GAC1B,gBAAgB,CAKlB;AAED,wBAAgB,kBAAkB,IAAI,gBAAgB,CAErD"}
|
package/dist/load-env.js
CHANGED
|
@@ -2,7 +2,7 @@ import { existsSync } from "node:fs";
|
|
|
2
2
|
import { join } from "node:path";
|
|
3
3
|
import { config } from "dotenv";
|
|
4
4
|
import { ENV_VARS } from "./config/env-vars.js";
|
|
5
|
-
import { resetDefaultRuntimeEnv } from "./runtime/env.js";
|
|
5
|
+
import { markRuntimeEnvFinalized, resetDefaultRuntimeEnv, } from "./runtime/env.js";
|
|
6
6
|
const ENV_FILES = [".env.local", ".env"];
|
|
7
7
|
// Keys that must never be sourced from a repo-controlled dotenv file. These are
|
|
8
8
|
// stripped immediately at load time so they can never reach process.env.
|
|
@@ -307,6 +307,7 @@ export function scrubLoadedSecurityOverrideEnv() {
|
|
|
307
307
|
export function finalizeLoadedEnv(loadedEnvKeys = []) {
|
|
308
308
|
const scrubbedEnvKeys = scrubLoadedSecurityOverrideEnv();
|
|
309
309
|
resetDefaultRuntimeEnv();
|
|
310
|
+
markRuntimeEnvFinalized();
|
|
310
311
|
return { loadedEnvKeys, scrubbedEnvKeys };
|
|
311
312
|
}
|
|
312
313
|
export function loadAndFinalizeEnv() {
|