@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
package/dist/load-env.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"load-env.js","sourceRoot":"","sources":["../src/load-env.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { config } from \"dotenv\";\nimport { ENV_VARS } from \"./config/env-vars.js\";\nimport { resetDefaultRuntimeEnv } from \"./runtime/env.js\";\n\nconst ENV_FILES = [\".env.local\", \".env\"];\n\n// Keys that must never be sourced from a repo-controlled dotenv file. These are\n// stripped immediately at load time so they can never reach process.env.\nconst BLOCKED_DOTENV_KEYS = new Set([\n\t\"HOME\",\n\t\"FACTORY_HOME\",\n\t\"MAESTRO_HOME\",\n\t\"MAESTRO_CONFIG\",\n\t\"MAESTRO_PROFILE\",\n\t\"MAESTRO_LLM_GATEWAY_URL\",\n\t\"MAESTRO_MODELS_FILE\",\n\t\"MAESTRO_TRUST_PROJECT_MODEL_CONFIG\",\n\t\"USERPROFILE\",\n\t// Agent-directory overrides decide where the \"global\" APPEND_SYSTEM.md and\n\t// other agent-scoped files are loaded from. A repo-controlled value can\n\t// redirect that fallback back into the workspace, bypassing the\n\t// untrusted-project gate. See resolveLoadedAppendSystemPromptPath.\n\t\"MAESTRO_AGENT_DIR\",\n\t\"PLAYWRIGHT_AGENT_DIR\",\n\t\"CODING_AGENT_DIR\",\n]);\n\n// Security-relevant settings that may legitimately come from a user's real\n// shell environment but must not be silently set by a repo-controlled dotenv\n// file. These are loaded normally and then scrubbed via\n// scrubLoadedSecurityOverrideEnv() once trust has been established.\nconst DOTENV_SECURITY_OVERRIDE_KEYS = [\n\tENV_VARS.PROFILE,\n\t\"MAESTRO_WEB_PROFILE\",\n\tENV_VARS.APPROVAL_POLICY,\n\t\"MAESTRO_APPROVAL_MODE\",\n\tENV_VARS.SANDBOX_MODE,\n\tENV_VARS.SAFE_MODE,\n\t\"MAESTRO_SAFE_REQUIRE_PLAN\",\n\t\"MAESTRO_SAFE_VALIDATORS\",\n\tENV_VARS.CONTEXT_FIREWALL_BLOCKING,\n\t\"MAESTRO_HOME\",\n\t\"MAESTRO_AGENT_DIR\",\n\t\"PLAYWRIGHT_AGENT_DIR\",\n\t\"CODING_AGENT_DIR\",\n\t\"NODE_OPTIONS\",\n\t\"MAESTRO_CONFIG\",\n\t\"MAESTRO_MODELS_FILE\",\n\t\"MAESTRO_NOTIFY_EVENTS\",\n\t\"MAESTRO_NOTIFY_PROGRAM\",\n\t\"MAESTRO_ENTERPRISE_POLICY_PATH\",\n\t\"MAESTRO_POLICY_PATH\",\n\t\"MAESTRO_PROMPT_HISTORY_FILE\",\n\t\"MAESTRO_TOOL_HISTORY_FILE\",\n\t\"MAESTRO_TUI_TIP_HISTORY_FILE\",\n\t\"MAESTRO_BASH_HISTORY\",\n\t\"MAESTRO_PLATFORM_BASE_URL\",\n\t\"MAESTRO_EVALOPS_BASE_URL\",\n\t\"EVALOPS_BASE_URL\",\n\t// EvalOps identity service URL: `bootstrapEvalOpsAgent()` and the OAuth\n\t// flow honor these aliases before the stored/derived URL. A repo .env\n\t// could otherwise point identity at an attacker service and capture the\n\t// user's OAuth bearer during agent bootstrap.\n\t\"MAESTRO_IDENTITY_URL\",\n\t\"EVALOPS_IDENTITY_URL\",\n\t\"MAESTRO_EVALOPS_ACCESS_TOKEN\",\n\t\"EVALOPS_TOKEN\",\n\t// EvalOps tenant identity aliases: any of these can scope durable-memory\n\t// writes (`X-Organization-ID`), remote-runner workspace selection, and\n\t// managed-context lookups. A repo-controlled dotenv must not be able to\n\t// redirect those tenant identifiers when a real EvalOps token is present.\n\t\"MAESTRO_EVALOPS_ORG_ID\",\n\t\"EVALOPS_ORGANIZATION_ID\",\n\t\"EVALOPS_ORG_ID\",\n\t\"MAESTRO_ENTERPRISE_ORG_ID\",\n\t\"MAESTRO_EVALOPS_WORKSPACE_ID\",\n\t\"EVALOPS_WORKSPACE_ID\",\n\t\"MAESTRO_WORKSPACE_ID\",\n\t\"MAESTRO_REMOTE_RUNNER_WORKSPACE_ID\",\n\t\"MAESTRO_EVALOPS_USER_ID\",\n\t\"EVALOPS_USER_ID\",\n\t\"MAESTRO_USER_ID\",\n\t\"EVALOPS_NATS_URL\",\n\t\"NATS_URL\",\n\t\"NATS_TOKEN\",\n\t\"NATS_USER\",\n\t\"NATS_PASSWORD\",\n\t\"MAESTRO_WEB_REQUIRE_KEY\",\n\t\"MAESTRO_WEB_REQUIRE_CSRF\",\n\t\"MAESTRO_WEB_REQUIRE_REDIS\",\n\t\"MAESTRO_WEB_ROOT\",\n\t// CORS / WebSocket origin policy: a repo-controlled dotenv must not be\n\t// able to broaden cross-origin browser access to the local API by\n\t// setting `MAESTRO_WEB_ORIGIN=*` (or an attacker-controlled origin)\n\t// before the user's real env is checked.\n\t\"MAESTRO_WEB_ORIGIN\",\n\t// Content-Security-Policy override: web-server.ts prefers a non-empty\n\t// MAESTRO_WEB_CSP over the prod default when building SECURITY_HEADERS,\n\t// so a repo .env could otherwise weaken the browser policy in any\n\t// hardened profile.\n\t\"MAESTRO_WEB_CSP\",\n\t\"MAESTRO_STRICT_SESSION_ACCESS\",\n\t// Session scoping controls: a repo-controlled dotenv must not be able to\n\t// collapse authenticated web sessions back to the global file store.\n\tENV_VARS.SESSION_SCOPE,\n\tENV_VARS.MULTI_USER,\n\t\"MAESTRO_REDIS_URL\",\n\t\"MAESTRO_DATABASE_URL\",\n\t\"DATABASE_URL\",\n\t\"MAESTRO_HOSTED_SESSION_STORAGE\",\n\t\"MAESTRO_SESSION_STORAGE\",\n\t\"MAESTRO_TRUST_PROXY\",\n\t\"MAESTRO_TRUST_PROXY_HOPS\",\n\t// Web/auth secret material: a repo-controlled dotenv must not be able to\n\t// choose a known API key, CSRF token, JWT signing secret, or shared secret\n\t// for endpoints that are supposed to require a user-provided credential.\n\t\"MAESTRO_WEB_API_KEY\",\n\t\"MAESTRO_WEB_CSRF_TOKEN\",\n\t\"MAESTRO_JWT_SECRET\",\n\t// `JWT_SECRET` is the unprefixed fallback honored by src/auth/jwt.ts when\n\t// `MAESTRO_JWT_SECRET` is not set; a repo-controlled dotenv must not be\n\t// able to choose the signing key for enterprise auth via this fallback.\n\t\"JWT_SECRET\",\n\t// OAuth credential file overrides: `src/providers/openai-auth.ts:91`\n\t// binds AUTH_FILE to OPENAI_OAUTH_FILE, and `saveOpenAIOAuthCredential()`\n\t// then writes access/refresh/ID tokens and the derived API key to that\n\t// path. A repo .env must not be able to redirect fresh OAuth credentials\n\t// into the checkout where they can be read on the next install.\n\t\"OPENAI_OAUTH_FILE\",\n\t\"MAESTRO_AUTH_SHARED_SECRET\",\n\t\"MAESTRO_DEVICE_IDENTITY_HELPER\",\n\t\"MAESTRO_DEVICE_IDENTITY_ALLOW_TEST_HELPER\",\n\t\"MAESTRO_USER_MCP_PATH\",\n\t\"MAESTRO_ENTERPRISE_MCP_PATH\",\n\t\"MAESTRO_MCP_PROJECT_APPROVALS_FILE\",\n\t\"MAESTRO_MCP_WORKSPACE_TRUST_FILE\",\n\t\"MAESTRO_PACKAGE_CACHE_DIR\",\n\t\"MAESTRO_RUN_SCRIPT_ALLOWLIST\",\n\t\"MAESTRO_SCRIPT_RUNNER\",\n\t// Session storage location: a repo-controlled dotenv must not be able to\n\t// redirect where session transcripts are read from or written to.\n\tENV_VARS.SESSION_DIR,\n\t// Local-state file/dir overrides: a repo-controlled dotenv must not be\n\t// able to redirect where the todo store or background-task logs are\n\t// written, which would otherwise let a checkout capture future task\n\t// content or command output for files that live outside the workspace\n\t// by default. Same reasoning extends to the web queue store and\n\t// automations store, which write user prompt/output text to env-selected\n\t// paths.\n\t\"MAESTRO_TODO_FILE\",\n\t\"MAESTRO_BACKGROUND_LOG_DIR\",\n\t\"MAESTRO_QUEUE_STATE\",\n\t\"MAESTRO_AUTOMATIONS_STATE\",\n\t// Sandbox enforcement opt-out: a repo-controlled dotenv must not be able to\n\t// enable unsandboxed fallback execution.\n\t\"MAESTRO_ALLOW_UNSANDBOXED_SANDBOX_FALLBACK\",\n\t// Bash guard / shell egress / allowlist controls: a repo-controlled dotenv\n\t// must not be able to disable command approvals or widen the allowlist.\n\t\"MAESTRO_BASH_GUARD\",\n\t\"MAESTRO_ALLOW_EGRESS_SHELL\",\n\t\"MAESTRO_FAIL_UNTAGGED_EGRESS\",\n\t\"MAESTRO_BACKGROUND_SHELL_DISABLE\",\n\t\"MAESTRO_BASH_ALLOWLIST_PATHS\",\n\t\"MAESTRO_GUARDIAN\",\n\t\"MAESTRO_MARKITDOWN\",\n\t\"MAESTRO_EVENT_BUS\",\n\t\"MAESTRO_AUDIT_BUS\",\n\t\"MAESTRO_TELEMETRY\",\n\t\"PLAYWRIGHT_TELEMETRY\",\n\t\"MAESTRO_OTEL\",\n\t// Auto-verify custom command: a repo-controlled dotenv must not be able to\n\t// inject an arbitrary shell command that AutoVerifyService runs after edits.\n\t\"MAESTRO_AUTO_TEST_COMMAND\",\n] as const;\n\nconst normalizeEnvKey = (key: string) => key.toUpperCase();\nconst DOTENV_SECURITY_OVERRIDE_KEY_SET = new Set<string>(\n\tDOTENV_SECURITY_OVERRIDE_KEYS.map(normalizeEnvKey),\n);\nconst DOTENV_SECURITY_OVERRIDE_PREFIXES = [\n\t\"APPROVALS_SERVICE_\",\n\t\"MAESTRO_ARTIFACT_ACCESS_\",\n\t\"MAESTRO_APPROVALS_\",\n\t\"MAESTRO_AGENT_MCP_\",\n\t\"MAESTRO_BEACON_\",\n\t\"MAESTRO_CEREBRO_MCP_\",\n\t\"MAESTRO_EVENT_BUS_\",\n\t\"MAESTRO_EVALOPS_AGENT_MCP_\",\n\t\"GOVERNANCE_SERVICE_\",\n\t\"MAESTRO_GOVERNANCE_\",\n\t// Internal service clients must not accept repo-selected endpoints while\n\t// falling back to user-provided bearer tokens or tenant headers.\n\t\"PIPELINE_\",\n\t\"MAESTRO_AGENT_REGISTRY_\",\n\t\"AGENT_REGISTRY_\",\n\t\"PLATFORM_AGENT_REGISTRY_\",\n\t\"MAESTRO_PLATFORM_A2A_\",\n\t\"MAESTRO_A2A_\",\n\t\"MAESTRO_AGENT_RUNTIME_\",\n\t\"AGENT_RUNTIME_\",\n\t\"PLATFORM_AGENT_RUNTIME_\",\n\t// Platform tool-execution bridge: a repo .env must not be able to point\n\t// the Connect endpoint, auth token, or tenant identifiers at an\n\t// attacker-controlled service, or bash/MCP tool args and observation\n\t// output get posted there with the user's real credentials.\n\t\"TOOL_EXECUTION_SERVICE_\",\n\t\"MAESTRO_TOOL_EXECUTION_\",\n\t\"MAESTRO_GUARDIAN_\",\n\t\"MAESTRO_HISTORY_\",\n\t\"MAESTRO_HOOKS_\",\n\t\"MAESTRO_JWT_\",\n\t\"MAESTRO_MARKITDOWN_\",\n\t\"MAESTRO_MEMORY_\",\n\t\"MAESTRO_OTEL_\",\n\t// Web rate-limit controls: `session-rate-limit.ts` and\n\t// `session-share-store.ts` read these at module load when web-server.ts\n\t// imports its handlers. A repo .env could otherwise weaken per-session\n\t// or share rate limits even in a hardened web profile.\n\t\"MAESTRO_RATE_LIMIT_\",\n\t\"MAESTRO_SHARE_RATE_LIMIT_\",\n\t\"MAESTRO_PLATFORM_MCP_\",\n\t// Prompt-service controls: these can redirect system prompt resolution and\n\t// credential-bearing service calls to a repo-selected endpoint.\n\t\"PROMPTS_SERVICE_\",\n\t\"MAESTRO_PROMPTS_\",\n\t\"MAESTRO_SAFE_\",\n\t\"MAESTRO_SCENARIO_\",\n\t\"MAESTRO_SESSION_BACKUP_\",\n\t\"MAESTRO_SESSION_RECOVERY_\",\n\t\"MAESTRO_SHARED_MEMORY_\",\n\t\"MAESTRO_TELEMETRY_\",\n\t\"OTEL_\",\n\t\"PLAYWRIGHT_TELEMETRY_\",\n\t\"SENTRY_\",\n] as const;\nconst isDotenvSecurityOverrideKey = (key: string): boolean => {\n\tconst normalizedKey = normalizeEnvKey(key);\n\treturn (\n\t\tDOTENV_SECURITY_OVERRIDE_KEY_SET.has(normalizedKey) ||\n\t\tDOTENV_SECURITY_OVERRIDE_PREFIXES.some((prefix) =>\n\t\t\tnormalizedKey.startsWith(prefix),\n\t\t)\n\t);\n};\nconst loadedEnvKeys = new Set<string>();\n\nexport function loadEnv(): string[] {\n\tconst newlyLoadedKeys = new Set<string>();\n\tfor (const file of ENV_FILES) {\n\t\tconst resolved = join(process.cwd(), file);\n\t\tif (existsSync(resolved)) {\n\t\t\tconst before = new Set(Object.keys(process.env));\n\t\t\tconst beforeNormalized = new Set([...before].map(normalizeEnvKey));\n\t\t\tconst result = config({ path: resolved, override: false });\n\t\t\tconst after = new Set(Object.keys(process.env));\n\t\t\tfor (const key of Object.keys(result.parsed ?? {})) {\n\t\t\t\tconst normalizedKey = normalizeEnvKey(key);\n\t\t\t\tconst wasLoadedByDotenv = !before.has(key) && after.has(key);\n\t\t\t\tif (!wasLoadedByDotenv) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (BLOCKED_DOTENV_KEYS.has(normalizedKey)) {\n\t\t\t\t\tReflect.deleteProperty(process.env, key);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t// Track newly loaded keys so they can be scrubbed later. For\n\t\t\t\t// security override keys we record the exact dotenv-loaded key even\n\t\t\t\t// when a differently cased variant already existed in the real\n\t\t\t\t// environment: env names are case-sensitive on POSIX, so dotenv can\n\t\t\t\t// create a distinct uppercase `MAESTRO_PROFILE` alongside a user's\n\t\t\t\t// `maestro_profile`, and that repo-controlled value must still be\n\t\t\t\t// scrubbed rather than survive due to the normalized collision.\n\t\t\t\tif (\n\t\t\t\t\t!beforeNormalized.has(normalizedKey) ||\n\t\t\t\t\tisDotenvSecurityOverrideKey(normalizedKey)\n\t\t\t\t) {\n\t\t\t\t\tnewlyLoadedKeys.add(key);\n\t\t\t\t\tloadedEnvKeys.add(key);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn [...newlyLoadedKeys];\n}\n\nexport function getLoadedEnvKeys(): string[] {\n\treturn [...loadedEnvKeys];\n}\n\nexport function scrubLoadedSecurityOverrideEnv(): string[] {\n\tconst scrubbed: string[] = [];\n\tfor (const key of DOTENV_SECURITY_OVERRIDE_KEYS) {\n\t\tconst matchingLoadedKeys = [...loadedEnvKeys].filter(\n\t\t\t(loadedKey) => normalizeEnvKey(loadedKey) === normalizeEnvKey(key),\n\t\t);\n\t\tif (matchingLoadedKeys.length === 0) {\n\t\t\tcontinue;\n\t\t}\n\t\tfor (const loadedKey of matchingLoadedKeys) {\n\t\t\tReflect.deleteProperty(process.env, loadedKey);\n\t\t\tloadedEnvKeys.delete(loadedKey);\n\t\t\tscrubbed.push(loadedKey);\n\t\t}\n\t}\n\tfor (const loadedKey of [...loadedEnvKeys]) {\n\t\tif (!isDotenvSecurityOverrideKey(loadedKey)) {\n\t\t\tcontinue;\n\t\t}\n\t\tReflect.deleteProperty(process.env, loadedKey);\n\t\tloadedEnvKeys.delete(loadedKey);\n\t\tscrubbed.push(loadedKey);\n\t}\n\treturn scrubbed;\n}\n\nexport interface FinalizedEnvLoad {\n\tloadedEnvKeys: string[];\n\tscrubbedEnvKeys: string[];\n}\n\n/**\n * Finish dotenv bootstrap after any trust-sensitive keys have been loaded.\n *\n * The order is load -> scrub -> reset RuntimeEnv. Resetting before the scrub\n * can preserve repo-controlled security overrides in the cached runtime\n * snapshot, which is exactly the bug class closed by the OTel follow-up.\n */\nexport function finalizeLoadedEnv(\n\tloadedEnvKeys: string[] = [],\n): FinalizedEnvLoad {\n\tconst scrubbedEnvKeys = scrubLoadedSecurityOverrideEnv();\n\tresetDefaultRuntimeEnv();\n\treturn { loadedEnvKeys, scrubbedEnvKeys };\n}\n\nexport function loadAndFinalizeEnv(): FinalizedEnvLoad {\n\treturn finalizeLoadedEnv(loadEnv());\n}\n"]}
|
|
1
|
+
{"version":3,"file":"load-env.js","sourceRoot":"","sources":["../src/load-env.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { config } from \"dotenv\";\nimport { ENV_VARS } from \"./config/env-vars.js\";\nimport {\n\tmarkRuntimeEnvFinalized,\n\tresetDefaultRuntimeEnv,\n} from \"./runtime/env.js\";\n\nconst ENV_FILES = [\".env.local\", \".env\"];\n\n// Keys that must never be sourced from a repo-controlled dotenv file. These are\n// stripped immediately at load time so they can never reach process.env.\nconst BLOCKED_DOTENV_KEYS = new Set([\n\t\"HOME\",\n\t\"FACTORY_HOME\",\n\t\"MAESTRO_HOME\",\n\t\"MAESTRO_CONFIG\",\n\t\"MAESTRO_PROFILE\",\n\t\"MAESTRO_LLM_GATEWAY_URL\",\n\t\"MAESTRO_MODELS_FILE\",\n\t\"MAESTRO_TRUST_PROJECT_MODEL_CONFIG\",\n\t\"USERPROFILE\",\n\t// Agent-directory overrides decide where the \"global\" APPEND_SYSTEM.md and\n\t// other agent-scoped files are loaded from. A repo-controlled value can\n\t// redirect that fallback back into the workspace, bypassing the\n\t// untrusted-project gate. See resolveLoadedAppendSystemPromptPath.\n\t\"MAESTRO_AGENT_DIR\",\n\t\"PLAYWRIGHT_AGENT_DIR\",\n\t\"CODING_AGENT_DIR\",\n]);\n\n// Security-relevant settings that may legitimately come from a user's real\n// shell environment but must not be silently set by a repo-controlled dotenv\n// file. These are loaded normally and then scrubbed via\n// scrubLoadedSecurityOverrideEnv() once trust has been established.\nconst DOTENV_SECURITY_OVERRIDE_KEYS = [\n\tENV_VARS.PROFILE,\n\t\"MAESTRO_WEB_PROFILE\",\n\tENV_VARS.APPROVAL_POLICY,\n\t\"MAESTRO_APPROVAL_MODE\",\n\tENV_VARS.SANDBOX_MODE,\n\tENV_VARS.SAFE_MODE,\n\t\"MAESTRO_SAFE_REQUIRE_PLAN\",\n\t\"MAESTRO_SAFE_VALIDATORS\",\n\tENV_VARS.CONTEXT_FIREWALL_BLOCKING,\n\t\"MAESTRO_HOME\",\n\t\"MAESTRO_AGENT_DIR\",\n\t\"PLAYWRIGHT_AGENT_DIR\",\n\t\"CODING_AGENT_DIR\",\n\t\"NODE_OPTIONS\",\n\t\"MAESTRO_CONFIG\",\n\t\"MAESTRO_MODELS_FILE\",\n\t\"MAESTRO_NOTIFY_EVENTS\",\n\t\"MAESTRO_NOTIFY_PROGRAM\",\n\t\"MAESTRO_ENTERPRISE_POLICY_PATH\",\n\t\"MAESTRO_POLICY_PATH\",\n\t\"MAESTRO_PROMPT_HISTORY_FILE\",\n\t\"MAESTRO_TOOL_HISTORY_FILE\",\n\t\"MAESTRO_TUI_TIP_HISTORY_FILE\",\n\t\"MAESTRO_BASH_HISTORY\",\n\t\"MAESTRO_PLATFORM_BASE_URL\",\n\t\"MAESTRO_EVALOPS_BASE_URL\",\n\t\"EVALOPS_BASE_URL\",\n\t// EvalOps identity service URL: `bootstrapEvalOpsAgent()` and the OAuth\n\t// flow honor these aliases before the stored/derived URL. A repo .env\n\t// could otherwise point identity at an attacker service and capture the\n\t// user's OAuth bearer during agent bootstrap.\n\t\"MAESTRO_IDENTITY_URL\",\n\t\"EVALOPS_IDENTITY_URL\",\n\t\"MAESTRO_EVALOPS_ACCESS_TOKEN\",\n\t\"EVALOPS_TOKEN\",\n\t// EvalOps tenant identity aliases: any of these can scope durable-memory\n\t// writes (`X-Organization-ID`), remote-runner workspace selection, and\n\t// managed-context lookups. A repo-controlled dotenv must not be able to\n\t// redirect those tenant identifiers when a real EvalOps token is present.\n\t\"MAESTRO_EVALOPS_ORG_ID\",\n\t\"EVALOPS_ORGANIZATION_ID\",\n\t\"EVALOPS_ORG_ID\",\n\t\"MAESTRO_ENTERPRISE_ORG_ID\",\n\t\"MAESTRO_EVALOPS_WORKSPACE_ID\",\n\t\"EVALOPS_WORKSPACE_ID\",\n\t\"MAESTRO_WORKSPACE_ID\",\n\t\"MAESTRO_REMOTE_RUNNER_WORKSPACE_ID\",\n\t\"MAESTRO_EVALOPS_USER_ID\",\n\t\"EVALOPS_USER_ID\",\n\t\"MAESTRO_USER_ID\",\n\t\"EVALOPS_NATS_URL\",\n\t\"NATS_URL\",\n\t\"NATS_TOKEN\",\n\t\"NATS_USER\",\n\t\"NATS_PASSWORD\",\n\t\"MAESTRO_WEB_REQUIRE_KEY\",\n\t\"MAESTRO_WEB_REQUIRE_CSRF\",\n\t\"MAESTRO_WEB_REQUIRE_REDIS\",\n\t\"MAESTRO_WEB_ROOT\",\n\t// CORS / WebSocket origin policy: a repo-controlled dotenv must not be\n\t// able to broaden cross-origin browser access to the local API by\n\t// setting `MAESTRO_WEB_ORIGIN=*` (or an attacker-controlled origin)\n\t// before the user's real env is checked.\n\t\"MAESTRO_WEB_ORIGIN\",\n\t// Content-Security-Policy override: web-server.ts prefers a non-empty\n\t// MAESTRO_WEB_CSP over the prod default when building SECURITY_HEADERS,\n\t// so a repo .env could otherwise weaken the browser policy in any\n\t// hardened profile.\n\t\"MAESTRO_WEB_CSP\",\n\t\"MAESTRO_STRICT_SESSION_ACCESS\",\n\t// Session scoping controls: a repo-controlled dotenv must not be able to\n\t// collapse authenticated web sessions back to the global file store.\n\tENV_VARS.SESSION_SCOPE,\n\tENV_VARS.MULTI_USER,\n\t\"MAESTRO_REDIS_URL\",\n\t\"MAESTRO_DATABASE_URL\",\n\t\"DATABASE_URL\",\n\t\"MAESTRO_HOSTED_SESSION_STORAGE\",\n\t\"MAESTRO_SESSION_STORAGE\",\n\t\"MAESTRO_TRUST_PROXY\",\n\t\"MAESTRO_TRUST_PROXY_HOPS\",\n\t// Web/auth secret material: a repo-controlled dotenv must not be able to\n\t// choose a known API key, CSRF token, JWT signing secret, or shared secret\n\t// for endpoints that are supposed to require a user-provided credential.\n\t\"MAESTRO_WEB_API_KEY\",\n\t\"MAESTRO_WEB_CSRF_TOKEN\",\n\t\"MAESTRO_JWT_SECRET\",\n\t// `JWT_SECRET` is the unprefixed fallback honored by src/auth/jwt.ts when\n\t// `MAESTRO_JWT_SECRET` is not set; a repo-controlled dotenv must not be\n\t// able to choose the signing key for enterprise auth via this fallback.\n\t\"JWT_SECRET\",\n\t// OAuth credential file overrides: `src/providers/openai-auth.ts:91`\n\t// binds AUTH_FILE to OPENAI_OAUTH_FILE, and `saveOpenAIOAuthCredential()`\n\t// then writes access/refresh/ID tokens and the derived API key to that\n\t// path. A repo .env must not be able to redirect fresh OAuth credentials\n\t// into the checkout where they can be read on the next install.\n\t\"OPENAI_OAUTH_FILE\",\n\t\"MAESTRO_AUTH_SHARED_SECRET\",\n\t\"MAESTRO_DEVICE_IDENTITY_HELPER\",\n\t\"MAESTRO_DEVICE_IDENTITY_ALLOW_TEST_HELPER\",\n\t\"MAESTRO_USER_MCP_PATH\",\n\t\"MAESTRO_ENTERPRISE_MCP_PATH\",\n\t\"MAESTRO_MCP_PROJECT_APPROVALS_FILE\",\n\t\"MAESTRO_MCP_WORKSPACE_TRUST_FILE\",\n\t\"MAESTRO_PACKAGE_CACHE_DIR\",\n\t\"MAESTRO_RUN_SCRIPT_ALLOWLIST\",\n\t\"MAESTRO_SCRIPT_RUNNER\",\n\t// Session storage location: a repo-controlled dotenv must not be able to\n\t// redirect where session transcripts are read from or written to.\n\tENV_VARS.SESSION_DIR,\n\t// Local-state file/dir overrides: a repo-controlled dotenv must not be\n\t// able to redirect where the todo store or background-task logs are\n\t// written, which would otherwise let a checkout capture future task\n\t// content or command output for files that live outside the workspace\n\t// by default. Same reasoning extends to the web queue store and\n\t// automations store, which write user prompt/output text to env-selected\n\t// paths.\n\t\"MAESTRO_TODO_FILE\",\n\t\"MAESTRO_BACKGROUND_LOG_DIR\",\n\t\"MAESTRO_QUEUE_STATE\",\n\t\"MAESTRO_AUTOMATIONS_STATE\",\n\t// Sandbox enforcement opt-out: a repo-controlled dotenv must not be able to\n\t// enable unsandboxed fallback execution.\n\t\"MAESTRO_ALLOW_UNSANDBOXED_SANDBOX_FALLBACK\",\n\t// Bash guard / shell egress / allowlist controls: a repo-controlled dotenv\n\t// must not be able to disable command approvals or widen the allowlist.\n\t\"MAESTRO_BASH_GUARD\",\n\t\"MAESTRO_ALLOW_EGRESS_SHELL\",\n\t\"MAESTRO_FAIL_UNTAGGED_EGRESS\",\n\t\"MAESTRO_BACKGROUND_SHELL_DISABLE\",\n\t\"MAESTRO_BASH_ALLOWLIST_PATHS\",\n\t\"MAESTRO_GUARDIAN\",\n\t\"MAESTRO_MARKITDOWN\",\n\t\"MAESTRO_EVENT_BUS\",\n\t\"MAESTRO_AUDIT_BUS\",\n\t\"MAESTRO_TELEMETRY\",\n\t\"PLAYWRIGHT_TELEMETRY\",\n\t\"MAESTRO_OTEL\",\n\t// Auto-verify custom command: a repo-controlled dotenv must not be able to\n\t// inject an arbitrary shell command that AutoVerifyService runs after edits.\n\t\"MAESTRO_AUTO_TEST_COMMAND\",\n] as const;\n\nconst normalizeEnvKey = (key: string) => key.toUpperCase();\nconst DOTENV_SECURITY_OVERRIDE_KEY_SET = new Set<string>(\n\tDOTENV_SECURITY_OVERRIDE_KEYS.map(normalizeEnvKey),\n);\nconst DOTENV_SECURITY_OVERRIDE_PREFIXES = [\n\t\"APPROVALS_SERVICE_\",\n\t\"MAESTRO_ARTIFACT_ACCESS_\",\n\t\"MAESTRO_APPROVALS_\",\n\t\"MAESTRO_AGENT_MCP_\",\n\t\"MAESTRO_BEACON_\",\n\t\"MAESTRO_CEREBRO_MCP_\",\n\t\"MAESTRO_EVENT_BUS_\",\n\t\"MAESTRO_EVALOPS_AGENT_MCP_\",\n\t\"GOVERNANCE_SERVICE_\",\n\t\"MAESTRO_GOVERNANCE_\",\n\t// Internal service clients must not accept repo-selected endpoints while\n\t// falling back to user-provided bearer tokens or tenant headers.\n\t\"PIPELINE_\",\n\t\"MAESTRO_AGENT_REGISTRY_\",\n\t\"AGENT_REGISTRY_\",\n\t\"PLATFORM_AGENT_REGISTRY_\",\n\t\"MAESTRO_PLATFORM_A2A_\",\n\t\"MAESTRO_A2A_\",\n\t\"MAESTRO_AGENT_RUNTIME_\",\n\t\"AGENT_RUNTIME_\",\n\t\"PLATFORM_AGENT_RUNTIME_\",\n\t// Platform tool-execution bridge: a repo .env must not be able to point\n\t// the Connect endpoint, auth token, or tenant identifiers at an\n\t// attacker-controlled service, or bash/MCP tool args and observation\n\t// output get posted there with the user's real credentials.\n\t\"TOOL_EXECUTION_SERVICE_\",\n\t\"MAESTRO_TOOL_EXECUTION_\",\n\t\"MAESTRO_GUARDIAN_\",\n\t\"MAESTRO_HISTORY_\",\n\t\"MAESTRO_HOOKS_\",\n\t\"MAESTRO_JWT_\",\n\t\"MAESTRO_MARKITDOWN_\",\n\t\"MAESTRO_MEMORY_\",\n\t\"MAESTRO_OTEL_\",\n\t// Web rate-limit controls: `session-rate-limit.ts` and\n\t// `session-share-store.ts` read these at module load when web-server.ts\n\t// imports its handlers. A repo .env could otherwise weaken per-session\n\t// or share rate limits even in a hardened web profile.\n\t\"MAESTRO_RATE_LIMIT_\",\n\t\"MAESTRO_SHARE_RATE_LIMIT_\",\n\t\"MAESTRO_PLATFORM_MCP_\",\n\t// Prompt-service controls: these can redirect system prompt resolution and\n\t// credential-bearing service calls to a repo-selected endpoint.\n\t\"PROMPTS_SERVICE_\",\n\t\"MAESTRO_PROMPTS_\",\n\t\"MAESTRO_SAFE_\",\n\t\"MAESTRO_SCENARIO_\",\n\t\"MAESTRO_SESSION_BACKUP_\",\n\t\"MAESTRO_SESSION_RECOVERY_\",\n\t\"MAESTRO_SHARED_MEMORY_\",\n\t\"MAESTRO_TELEMETRY_\",\n\t\"OTEL_\",\n\t\"PLAYWRIGHT_TELEMETRY_\",\n\t\"SENTRY_\",\n] as const;\nconst isDotenvSecurityOverrideKey = (key: string): boolean => {\n\tconst normalizedKey = normalizeEnvKey(key);\n\treturn (\n\t\tDOTENV_SECURITY_OVERRIDE_KEY_SET.has(normalizedKey) ||\n\t\tDOTENV_SECURITY_OVERRIDE_PREFIXES.some((prefix) =>\n\t\t\tnormalizedKey.startsWith(prefix),\n\t\t)\n\t);\n};\nconst loadedEnvKeys = new Set<string>();\n\nexport function loadEnv(): string[] {\n\tconst newlyLoadedKeys = new Set<string>();\n\tfor (const file of ENV_FILES) {\n\t\tconst resolved = join(process.cwd(), file);\n\t\tif (existsSync(resolved)) {\n\t\t\tconst before = new Set(Object.keys(process.env));\n\t\t\tconst beforeNormalized = new Set([...before].map(normalizeEnvKey));\n\t\t\tconst result = config({ path: resolved, override: false });\n\t\t\tconst after = new Set(Object.keys(process.env));\n\t\t\tfor (const key of Object.keys(result.parsed ?? {})) {\n\t\t\t\tconst normalizedKey = normalizeEnvKey(key);\n\t\t\t\tconst wasLoadedByDotenv = !before.has(key) && after.has(key);\n\t\t\t\tif (!wasLoadedByDotenv) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (BLOCKED_DOTENV_KEYS.has(normalizedKey)) {\n\t\t\t\t\tReflect.deleteProperty(process.env, key);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t// Track newly loaded keys so they can be scrubbed later. For\n\t\t\t\t// security override keys we record the exact dotenv-loaded key even\n\t\t\t\t// when a differently cased variant already existed in the real\n\t\t\t\t// environment: env names are case-sensitive on POSIX, so dotenv can\n\t\t\t\t// create a distinct uppercase `MAESTRO_PROFILE` alongside a user's\n\t\t\t\t// `maestro_profile`, and that repo-controlled value must still be\n\t\t\t\t// scrubbed rather than survive due to the normalized collision.\n\t\t\t\tif (\n\t\t\t\t\t!beforeNormalized.has(normalizedKey) ||\n\t\t\t\t\tisDotenvSecurityOverrideKey(normalizedKey)\n\t\t\t\t) {\n\t\t\t\t\tnewlyLoadedKeys.add(key);\n\t\t\t\t\tloadedEnvKeys.add(key);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn [...newlyLoadedKeys];\n}\n\nexport function getLoadedEnvKeys(): string[] {\n\treturn [...loadedEnvKeys];\n}\n\nexport function scrubLoadedSecurityOverrideEnv(): string[] {\n\tconst scrubbed: string[] = [];\n\tfor (const key of DOTENV_SECURITY_OVERRIDE_KEYS) {\n\t\tconst matchingLoadedKeys = [...loadedEnvKeys].filter(\n\t\t\t(loadedKey) => normalizeEnvKey(loadedKey) === normalizeEnvKey(key),\n\t\t);\n\t\tif (matchingLoadedKeys.length === 0) {\n\t\t\tcontinue;\n\t\t}\n\t\tfor (const loadedKey of matchingLoadedKeys) {\n\t\t\tReflect.deleteProperty(process.env, loadedKey);\n\t\t\tloadedEnvKeys.delete(loadedKey);\n\t\t\tscrubbed.push(loadedKey);\n\t\t}\n\t}\n\tfor (const loadedKey of [...loadedEnvKeys]) {\n\t\tif (!isDotenvSecurityOverrideKey(loadedKey)) {\n\t\t\tcontinue;\n\t\t}\n\t\tReflect.deleteProperty(process.env, loadedKey);\n\t\tloadedEnvKeys.delete(loadedKey);\n\t\tscrubbed.push(loadedKey);\n\t}\n\treturn scrubbed;\n}\n\nexport interface FinalizedEnvLoad {\n\tloadedEnvKeys: string[];\n\tscrubbedEnvKeys: string[];\n}\n\n/**\n * Finish dotenv bootstrap after any trust-sensitive keys have been loaded.\n *\n * The order is load -> scrub -> reset RuntimeEnv. Resetting before the scrub\n * can preserve repo-controlled security overrides in the cached runtime\n * snapshot, which is exactly the bug class closed by the OTel follow-up.\n */\nexport function finalizeLoadedEnv(\n\tloadedEnvKeys: string[] = [],\n): FinalizedEnvLoad {\n\tconst scrubbedEnvKeys = scrubLoadedSecurityOverrideEnv();\n\tresetDefaultRuntimeEnv();\n\tmarkRuntimeEnvFinalized();\n\treturn { loadedEnvKeys, scrubbedEnvKeys };\n}\n\nexport function loadAndFinalizeEnv(): FinalizedEnvLoad {\n\treturn finalizeLoadedEnv(loadEnv());\n}\n"]}
|
package/dist/main.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsFG;
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsFG;AA2fH;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,iBAokDxC"}
|
package/dist/main.js
CHANGED
|
@@ -118,6 +118,37 @@ const STARTUP_TELEMETRY_EXIT_WAIT_GRACE_MS = 25;
|
|
|
118
118
|
let enterpriseCleanupRegistered = false;
|
|
119
119
|
let checkpointCleanupRegistered = false;
|
|
120
120
|
let sandboxCleanupRegistered = false;
|
|
121
|
+
async function cleanupNonInteractiveRuntimeResources() {
|
|
122
|
+
let timeout;
|
|
123
|
+
const timeoutPromise = new Promise((resolve) => {
|
|
124
|
+
timeout = setTimeout(() => resolve("timeout"), 5_000);
|
|
125
|
+
});
|
|
126
|
+
const cleanupPromise = (async () => {
|
|
127
|
+
try {
|
|
128
|
+
const [{ mcpManager }, { lspManager }] = await Promise.all([
|
|
129
|
+
import("./mcp/manager.js"),
|
|
130
|
+
import("./lsp/manager.js"),
|
|
131
|
+
]);
|
|
132
|
+
await Promise.allSettled([
|
|
133
|
+
mcpManager.disconnectAll(),
|
|
134
|
+
lspManager.shutdownAll(),
|
|
135
|
+
]);
|
|
136
|
+
}
|
|
137
|
+
catch {
|
|
138
|
+
// Best-effort shutdown must not mask the command's original result.
|
|
139
|
+
}
|
|
140
|
+
return "done";
|
|
141
|
+
})();
|
|
142
|
+
try {
|
|
143
|
+
await Promise.race([cleanupPromise, timeoutPromise]);
|
|
144
|
+
}
|
|
145
|
+
finally {
|
|
146
|
+
void cleanupPromise.catch(() => undefined);
|
|
147
|
+
if (timeout) {
|
|
148
|
+
clearTimeout(timeout);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
121
152
|
function isTruthyEnvFlag(value) {
|
|
122
153
|
switch (value?.trim().toLowerCase()) {
|
|
123
154
|
case "1":
|
|
@@ -611,6 +642,13 @@ export async function main(args) {
|
|
|
611
642
|
await handleStatusCommand();
|
|
612
643
|
return;
|
|
613
644
|
}
|
|
645
|
+
if (parsed.command === "mission") {
|
|
646
|
+
const { handleMissionCommand } = await import("./cli/commands/mission.js");
|
|
647
|
+
await handleMissionCommand(parsed.subcommand, parsed.messages, {
|
|
648
|
+
json: parsed.execJson,
|
|
649
|
+
});
|
|
650
|
+
return;
|
|
651
|
+
}
|
|
614
652
|
if (parsed.command === "update") {
|
|
615
653
|
const { handleUpdateCommand } = await import("./cli/commands/update.js");
|
|
616
654
|
await handleUpdateCommand(parsed.commandArgs ?? []);
|
|
@@ -1021,6 +1059,34 @@ export async function main(args) {
|
|
|
1021
1059
|
process.exit(1);
|
|
1022
1060
|
}
|
|
1023
1061
|
}
|
|
1062
|
+
if (parsed.command === "value") {
|
|
1063
|
+
const { handleValueCommand } = await import("./cli/commands/value.js");
|
|
1064
|
+
switch (parsed.subcommand) {
|
|
1065
|
+
case undefined:
|
|
1066
|
+
case "today":
|
|
1067
|
+
case "yesterday":
|
|
1068
|
+
case "week":
|
|
1069
|
+
case "7d":
|
|
1070
|
+
case "month":
|
|
1071
|
+
case "30d":
|
|
1072
|
+
case "all":
|
|
1073
|
+
await handleValueCommand(parsed.subcommand, {
|
|
1074
|
+
format: parsed.exportFormat,
|
|
1075
|
+
outputDir: parsed.outputDir,
|
|
1076
|
+
writeArtifacts: parsed.valueWrite,
|
|
1077
|
+
});
|
|
1078
|
+
return;
|
|
1079
|
+
default:
|
|
1080
|
+
console.error(chalk.red(`Unknown value subcommand: ${parsed.subcommand}`));
|
|
1081
|
+
console.log(chalk.dim("\nAvailable commands:"));
|
|
1082
|
+
console.log(chalk.dim(" maestro value - Show last 30 days"));
|
|
1083
|
+
console.log(chalk.dim(" maestro value week - Show last 7 days"));
|
|
1084
|
+
console.log(chalk.dim(" maestro value all - Show all local evidence"));
|
|
1085
|
+
console.log(chalk.dim(" maestro value --format json|md - Export value report"));
|
|
1086
|
+
console.log(chalk.dim(" maestro value --write --output-dir .maestro/value-reports - Persist report artifacts"));
|
|
1087
|
+
process.exit(1);
|
|
1088
|
+
}
|
|
1089
|
+
}
|
|
1024
1090
|
// Handle models commands
|
|
1025
1091
|
if (parsed.command === "models") {
|
|
1026
1092
|
const { handleModelsList, handleModelsProviders } = await import("./cli/commands/models.js");
|
|
@@ -1064,13 +1130,30 @@ export async function main(args) {
|
|
|
1064
1130
|
: "maestro agents init --force";
|
|
1065
1131
|
// Handle "maestro agents init" command to generate AGENTS.md
|
|
1066
1132
|
if (parsed.command === "agents") {
|
|
1067
|
-
const { buildAgentsInitPrompt, handleAgentsInit } = await import("./cli/commands/agents.js");
|
|
1133
|
+
const { buildAgentsInitPrompt, handleAgentsInit, handleAgentsProfileCommand, } = await import("./cli/commands/agents.js");
|
|
1134
|
+
if (parsed.subcommand === "profile") {
|
|
1135
|
+
try {
|
|
1136
|
+
handleAgentsProfileCommand(parsed.commandArgs ?? parsed.messages, {
|
|
1137
|
+
force: parsed.force,
|
|
1138
|
+
json: parsed.execJson,
|
|
1139
|
+
});
|
|
1140
|
+
return;
|
|
1141
|
+
}
|
|
1142
|
+
catch (error) {
|
|
1143
|
+
const message = error instanceof Error
|
|
1144
|
+
? error.message
|
|
1145
|
+
: "Failed to manage specialist profile";
|
|
1146
|
+
console.error(chalk.red(message));
|
|
1147
|
+
process.exit(1);
|
|
1148
|
+
}
|
|
1149
|
+
}
|
|
1068
1150
|
if (parsed.subcommand && parsed.subcommand !== "init") {
|
|
1069
|
-
console.error(chalk.red(`Unknown agents subcommand: ${parsed.subcommand}. Try "maestro agents init"`));
|
|
1151
|
+
console.error(chalk.red(`Unknown agents subcommand: ${parsed.subcommand}. Try "maestro agents init" or "maestro agents profile list"`));
|
|
1070
1152
|
process.exit(1);
|
|
1071
1153
|
}
|
|
1072
1154
|
try {
|
|
1073
|
-
const
|
|
1155
|
+
const agentsArgs = parsed.commandArgs ?? parsed.messages;
|
|
1156
|
+
const targetArg = agentsArgs[0];
|
|
1074
1157
|
const result = handleAgentsInit(targetArg, { force: parsed.force });
|
|
1075
1158
|
if (result.action === "preview") {
|
|
1076
1159
|
const { sanitizeTerminalPreview } = await import("./cli-tui/utils/text-formatting.js");
|
|
@@ -1568,6 +1651,12 @@ export async function main(args) {
|
|
|
1568
1651
|
}
|
|
1569
1652
|
finally {
|
|
1570
1653
|
await automaticMemory.flush();
|
|
1654
|
+
if (!isInteractive ||
|
|
1655
|
+
mode === "rpc" ||
|
|
1656
|
+
mode === "headless" ||
|
|
1657
|
+
parsed.headless) {
|
|
1658
|
+
await cleanupNonInteractiveRuntimeResources();
|
|
1659
|
+
}
|
|
1571
1660
|
}
|
|
1572
1661
|
}
|
|
1573
1662
|
//# sourceMappingURL=main.js.map
|