@evalops/maestro 0.10.49 → 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-command-runtime.js +2 -2
- package/dist/cli-command-runtime.js.map +1 -1
- package/dist/cli-runtime.js +7798 -2805
- 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/cli.js +4 -6
- package/dist/cli.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/health.d.ts +1 -1
- package/dist/db/health.d.ts.map +1 -1
- package/dist/db/health.js +10 -0
- package/dist/db/health.js.map +1 -1
- package/dist/db/migrations/0009_operating_layer_evidence.sql +30 -0
- package/dist/db/migrations/meta/_journal.json +7 -0
- package/dist/db/schema.d.ts +268 -1
- package/dist/db/schema.d.ts.map +1 -1
- package/dist/db/schema.js +28 -0
- 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 +13 -0
- package/dist/load-env.d.ts.map +1 -1
- package/dist/load-env.js +17 -0
- package/dist/load-env.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +96 -7
- 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 +127 -0
- package/dist/platform/operating-layer.d.ts.map +1 -0
- package/dist/platform/operating-layer.js +360 -0
- package/dist/platform/operating-layer.js.map +1 -0
- 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/dist/web-server.d.ts.map +1 -1
- package/dist/web-server.js +2 -5
- package/dist/web-server.js.map +1 -1
- 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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mission-store.js","sourceRoot":"","sources":["../../src/agent/mission-store.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, mkdirSync, readdirSync, rmSync, statSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { PATHS } from \"../config/constants.js\";\nimport { defaultRuntimeEnv } from \"../runtime/env.js\";\nimport { readJsonFile, writeJsonFile } from \"../utils/fs.js\";\nimport {\n\tMISSION_MANIFEST_VERSION,\n\ttype MissionFeature,\n\ttype MissionManifest,\n\tisMissionFeature,\n} from \"./mission-manifest.js\";\n\nexport const MISSION_STORE_SCHEMA = \"evalops.maestro.mission-store.v1\";\nconst MISSION_STATE_LOCK_STALE_MS = 60_000;\n\nexport type MissionState =\n\t| \"awaiting-input\"\n\t| \"ready\"\n\t| \"running\"\n\t| \"blocked\"\n\t| \"completed\"\n\t| \"failed\";\n\nexport interface MissionWorkerState {\n\tstartedAt: string;\n\tcompletedAt?: string;\n\texitCode?: number;\n}\n\nexport interface MissionTokenUsage {\n\tinputTokens: number;\n\toutputTokens: number;\n\tcacheCreationTokens?: number;\n\tcacheReadTokens?: number;\n\tthinkingTokens?: number;\n\tcredits?: number;\n}\n\nexport interface MissionProgressEntry {\n\ttype:\n\t\t| \"mission_created\"\n\t\t| \"mission_started\"\n\t\t| \"mission_blocked\"\n\t\t| \"mission_completed\"\n\t\t| \"worker_started\"\n\t\t| \"worker_completed\"\n\t\t| \"worker_failed\"\n\t\t| \"note\";\n\ttimestamp: string;\n\tmessage?: string;\n\tfeatureId?: string;\n\tworkerSessionId?: string;\n\texitCode?: number;\n}\n\nexport interface MissionStoreSnapshot {\n\tschemaVersion: typeof MISSION_STORE_SCHEMA;\n\tmissionId: string;\n\tsourceMissionId?: string;\n\ttitle?: string;\n\tstate: MissionState;\n\tfeatures: MissionFeature[];\n\tprogressLog: MissionProgressEntry[];\n\tworkerSessionIds: string[];\n\tworkerStates: Record<string, MissionWorkerState>;\n\ttokenUsageBySessionId: Record<string, MissionTokenUsage>;\n\ttokenUsage?: MissionTokenUsage;\n\tcreatedAt: string;\n\tupdatedAt: string;\n}\n\nexport interface MissionStoreConfig {\n\trootDir?: string;\n\tnow?: () => string;\n}\n\nexport function getMissionStoreRoot(rootDir?: string): string {\n\treturn (\n\t\trootDir ??\n\t\tdefaultRuntimeEnv().missionStoreDir ??\n\t\tjoin(PATHS.MAESTRO_HOME, \"missions\")\n\t);\n}\n\nexport function sanitizeMissionId(missionId: string): string {\n\tconst trimmed = normalizeMissionIdInput(missionId);\n\tif (!trimmed) {\n\t\tthrow new Error(\"missionId is required\");\n\t}\n\tconst safe = trimmed\n\t\t.replace(/[^A-Za-z0-9._-]+/g, \"-\")\n\t\t.replace(/^-+|-+$/g, \"\");\n\tif (!safe || !/[A-Za-z0-9]/u.test(safe)) {\n\t\tthrow new Error(\n\t\t\t\"missionId must include at least one alphanumeric character\",\n\t\t);\n\t}\n\treturn safe;\n}\n\nfunction normalizeMissionIdInput(missionId: string): string {\n\tconst trimmed = missionId.trim();\n\tif (!trimmed) {\n\t\tthrow new Error(\"missionId is required\");\n\t}\n\treturn trimmed;\n}\n\nexport function getMissionDir(missionId: string, rootDir?: string): string {\n\treturn join(getMissionStoreRoot(rootDir), sanitizeMissionId(missionId));\n}\n\nexport function getMissionStatePath(\n\tmissionId: string,\n\trootDir?: string,\n): string {\n\treturn join(getMissionDir(missionId, rootDir), \"state.json\");\n}\n\nexport function createMissionStoreSnapshot(options: {\n\tmissionId: string;\n\ttitle?: string;\n\tmanifest?: MissionManifest;\n\tnow?: string;\n}): MissionStoreSnapshot {\n\tconst now = options.now ?? new Date().toISOString();\n\treturn {\n\t\tschemaVersion: MISSION_STORE_SCHEMA,\n\t\tmissionId: sanitizeMissionId(options.missionId),\n\t\tsourceMissionId: normalizeMissionIdInput(options.missionId),\n\t\ttitle: options.title,\n\t\tstate: \"awaiting-input\",\n\t\tfeatures: options.manifest?.features ? [...options.manifest.features] : [],\n\t\tprogressLog: [\n\t\t\t{\n\t\t\t\ttype: \"mission_created\",\n\t\t\t\ttimestamp: now,\n\t\t\t\tmessage: options.title,\n\t\t\t},\n\t\t],\n\t\tworkerSessionIds: [],\n\t\tworkerStates: {},\n\t\ttokenUsageBySessionId: {},\n\t\tcreatedAt: now,\n\t\tupdatedAt: now,\n\t};\n}\n\nexport function sumMissionTokenUsage(\n\tusages: Record<string, MissionTokenUsage>,\n): MissionTokenUsage | undefined {\n\tconst values = Object.values(usages);\n\tif (values.length === 0) return undefined;\n\treturn values.reduce<MissionTokenUsage>(\n\t\t(total, usage) => ({\n\t\t\tinputTokens: total.inputTokens + usage.inputTokens,\n\t\t\toutputTokens: total.outputTokens + usage.outputTokens,\n\t\t\tcacheCreationTokens:\n\t\t\t\t(total.cacheCreationTokens ?? 0) + (usage.cacheCreationTokens ?? 0),\n\t\t\tcacheReadTokens:\n\t\t\t\t(total.cacheReadTokens ?? 0) + (usage.cacheReadTokens ?? 0),\n\t\t\tthinkingTokens: (total.thinkingTokens ?? 0) + (usage.thinkingTokens ?? 0),\n\t\t\tcredits: (total.credits ?? 0) + (usage.credits ?? 0),\n\t\t}),\n\t\t{ inputTokens: 0, outputTokens: 0 },\n\t);\n}\n\nfunction deriveWorkerState(\n\tprogressLog: readonly MissionProgressEntry[],\n\tprevious: Record<string, MissionWorkerState>,\n): Record<string, MissionWorkerState> {\n\tconst next = { ...previous };\n\tfor (const entry of progressLog) {\n\t\tif (!entry.workerSessionId) continue;\n\t\tconst existing = next[entry.workerSessionId];\n\t\tif (!existing) {\n\t\t\tnext[entry.workerSessionId] = { startedAt: entry.timestamp };\n\t\t}\n\t\tif (entry.type === \"worker_completed\" || entry.type === \"worker_failed\") {\n\t\t\tnext[entry.workerSessionId] = {\n\t\t\t\tstartedAt: next[entry.workerSessionId]?.startedAt ?? entry.timestamp,\n\t\t\t\tcompletedAt: entry.timestamp,\n\t\t\t\texitCode: entry.exitCode,\n\t\t\t};\n\t\t}\n\t}\n\treturn next;\n}\n\nfunction normalizeSnapshot(\n\tsnapshot: MissionStoreSnapshot,\n): MissionStoreSnapshot {\n\tconst workerStates = deriveWorkerState(\n\t\tsnapshot.progressLog ?? [],\n\t\tsnapshot.workerStates ?? {},\n\t);\n\tconst workerSessionIds = Array.from(\n\t\tnew Set([\n\t\t\t...(snapshot.workerSessionIds ?? []),\n\t\t\t...Object.keys(workerStates),\n\t\t\t...(snapshot.features ?? []).flatMap((feature) =>\n\t\t\t\tfeature.handoff?.workerId ? [feature.handoff.workerId] : [],\n\t\t\t),\n\t\t]),\n\t).sort();\n\tconst tokenUsageBySessionId = snapshot.tokenUsageBySessionId ?? {};\n\treturn {\n\t\t...snapshot,\n\t\tschemaVersion: MISSION_STORE_SCHEMA,\n\t\tmissionId: sanitizeMissionId(snapshot.missionId),\n\t\tsourceMissionId:\n\t\t\ttypeof snapshot.sourceMissionId === \"string\"\n\t\t\t\t? snapshot.sourceMissionId\n\t\t\t\t: undefined,\n\t\tfeatures: snapshot.features ?? [],\n\t\tprogressLog: snapshot.progressLog ?? [],\n\t\tworkerSessionIds,\n\t\tworkerStates,\n\t\ttokenUsageBySessionId,\n\t\ttokenUsage: sumMissionTokenUsage(tokenUsageBySessionId),\n\t};\n}\n\nexport class MissionStore {\n\tprivate snapshot: MissionStoreSnapshot;\n\tprivate lastSavedSnapshot: MissionStoreSnapshot;\n\tprivate stateTouched = false;\n\tprivate readonly rootDir?: string;\n\tprivate readonly now: () => string;\n\n\tconstructor(snapshot: MissionStoreSnapshot, config: MissionStoreConfig = {}) {\n\t\tthis.snapshot = normalizeSnapshot(snapshot);\n\t\tthis.lastSavedSnapshot = this.snapshot;\n\t\tthis.rootDir = config.rootDir;\n\t\tthis.now = config.now ?? (() => new Date().toISOString());\n\t}\n\n\tstatic create(options: {\n\t\tmissionId: string;\n\t\ttitle?: string;\n\t\tmanifest?: MissionManifest;\n\t\tconfig?: MissionStoreConfig;\n\t}): MissionStore {\n\t\tassertMissionCreateTargetAvailable(\n\t\t\toptions.missionId,\n\t\t\toptions.config?.rootDir,\n\t\t);\n\t\treturn new MissionStore(\n\t\t\tcreateMissionStoreSnapshot({\n\t\t\t\tmissionId: options.missionId,\n\t\t\t\ttitle: options.title,\n\t\t\t\tmanifest: options.manifest,\n\t\t\t\tnow: options.config?.now?.(),\n\t\t\t}),\n\t\t\toptions.config,\n\t\t);\n\t}\n\n\tstatic load(\n\t\tmissionId: string,\n\t\tconfig: MissionStoreConfig = {},\n\t): MissionStore {\n\t\tconst path = getMissionStatePath(missionId, config.rootDir);\n\t\tif (!existsSync(path)) {\n\t\t\tthrow new Error(`mission not found: ${sanitizeMissionId(missionId)}`);\n\t\t}\n\t\tconst requestedId = normalizeMissionIdInput(missionId);\n\t\tconst snapshot = readJsonFile<MissionStoreSnapshot>(path, {\n\t\t\trotateOnParseFail: true,\n\t\t});\n\t\tif (\n\t\t\tsnapshot.sourceMissionId?.trim() &&\n\t\t\tsnapshot.sourceMissionId.trim() !== requestedId &&\n\t\t\tsnapshot.missionId !== requestedId\n\t\t) {\n\t\t\tthrow new Error(\n\t\t\t\t`missionId \"${requestedId}\" collides with existing mission \"${snapshot.sourceMissionId.trim()}\"`,\n\t\t\t);\n\t\t}\n\t\treturn new MissionStore(\n\t\t\tapplyArtifactFeaturesToSnapshot(snapshot, config.rootDir),\n\t\t\tconfig,\n\t\t);\n\t}\n\n\tgetSnapshot(): MissionStoreSnapshot {\n\t\treturn normalizeSnapshot(this.snapshot);\n\t}\n\n\tsave(): MissionStoreSnapshot {\n\t\tconst snapshot = this.getSnapshot();\n\t\tconst path = getMissionStatePath(snapshot.missionId, this.rootDir);\n\t\tmkdirSync(getMissionDir(snapshot.missionId, this.rootDir), {\n\t\t\trecursive: true,\n\t\t});\n\t\treturn withMissionStateLock(path, () => {\n\t\t\tassertNoMissionIdCollision(path, snapshot);\n\t\t\tconst existing = existsSync(path)\n\t\t\t\t? normalizeSnapshot(readJsonFile<MissionStoreSnapshot>(path))\n\t\t\t\t: null;\n\t\t\tconst merged = existing\n\t\t\t\t? mergeSnapshots(\n\t\t\t\t\t\tthis.lastSavedSnapshot,\n\t\t\t\t\t\tsnapshot,\n\t\t\t\t\t\tapplyArtifactFeaturesToSnapshot(existing, this.rootDir),\n\t\t\t\t\t\t{ stateTouched: this.stateTouched },\n\t\t\t\t\t)\n\t\t\t\t: snapshot;\n\t\t\ttry {\n\t\t\t\twriteJsonFile(path, merged);\n\t\t\t\twriteMissionManifest(merged, this.rootDir);\n\t\t\t} catch (error) {\n\t\t\t\trestoreMissionStateFile(path, existing);\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthis.snapshot = merged;\n\t\t\tthis.lastSavedSnapshot = merged;\n\t\t\tthis.stateTouched = false;\n\t\t\treturn merged;\n\t\t});\n\t}\n\n\tsetState(state: MissionState, message?: string): MissionStoreSnapshot {\n\t\tif (isTerminalMissionState(this.snapshot.state)) {\n\t\t\tif (this.snapshot.state !== state) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`mission ${this.snapshot.missionId} is already ${this.snapshot.state}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn this.getSnapshot();\n\t\t}\n\t\tconst timestamp = this.now();\n\t\tconst progressType = stateToProgressType(state);\n\t\tconst previousSnapshot = this.snapshot;\n\t\tconst previousStateTouched = this.stateTouched;\n\t\tthis.stateTouched = true;\n\t\tthis.snapshot = {\n\t\t\t...this.snapshot,\n\t\t\tstate,\n\t\t\tprogressLog:\n\t\t\t\tprogressType === \"note\" && !message?.trim()\n\t\t\t\t\t? this.snapshot.progressLog\n\t\t\t\t\t: [\n\t\t\t\t\t\t\t...this.snapshot.progressLog,\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttype: progressType,\n\t\t\t\t\t\t\t\ttimestamp,\n\t\t\t\t\t\t\t\tmessage: message?.trim() || defaultStateProgressMessage(state),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\tupdatedAt: timestamp,\n\t\t};\n\t\treturn this.saveOrRestore(previousSnapshot, previousStateTouched);\n\t}\n\n\tsetFeatures(features: readonly MissionFeature[]): MissionStoreSnapshot {\n\t\tconst previousSnapshot = this.snapshot;\n\t\tconst previousStateTouched = this.stateTouched;\n\t\tthis.snapshot = {\n\t\t\t...this.snapshot,\n\t\t\tfeatures: [...features],\n\t\t\tupdatedAt: this.now(),\n\t\t};\n\t\treturn this.saveOrRestore(previousSnapshot, previousStateTouched);\n\t}\n\n\tappendProgress(\n\t\tentry: Omit<MissionProgressEntry, \"timestamp\"> & { timestamp?: string },\n\t): MissionStoreSnapshot {\n\t\tconst timestamp = entry.timestamp ?? this.now();\n\t\tconst previousSnapshot = this.snapshot;\n\t\tconst previousStateTouched = this.stateTouched;\n\t\tthis.snapshot = {\n\t\t\t...this.snapshot,\n\t\t\tprogressLog: [...this.snapshot.progressLog, { ...entry, timestamp }],\n\t\t\tupdatedAt: timestamp,\n\t\t};\n\t\treturn this.saveOrRestore(previousSnapshot, previousStateTouched);\n\t}\n\n\tsetSessionTokenUsage(\n\t\tsessionId: string,\n\t\ttokenUsage: MissionTokenUsage,\n\t): MissionStoreSnapshot {\n\t\tconst previousSnapshot = this.snapshot;\n\t\tconst previousStateTouched = this.stateTouched;\n\t\tthis.snapshot = {\n\t\t\t...this.snapshot,\n\t\t\ttokenUsageBySessionId: {\n\t\t\t\t...this.snapshot.tokenUsageBySessionId,\n\t\t\t\t[sessionId]: tokenUsage,\n\t\t\t},\n\t\t\tupdatedAt: this.now(),\n\t\t};\n\t\treturn this.saveOrRestore(previousSnapshot, previousStateTouched);\n\t}\n\n\tprivate saveOrRestore(\n\t\tpreviousSnapshot: MissionStoreSnapshot,\n\t\tpreviousStateTouched: boolean,\n\t): MissionStoreSnapshot {\n\t\ttry {\n\t\t\treturn this.save();\n\t\t} catch (error) {\n\t\t\tthis.snapshot = previousSnapshot;\n\t\t\tthis.stateTouched = previousStateTouched;\n\t\t\tthrow error;\n\t\t}\n\t}\n}\n\nfunction restoreMissionStateFile(\n\tpath: string,\n\tprevious: MissionStoreSnapshot | null,\n): void {\n\tif (previous) {\n\t\twriteJsonFile(path, previous);\n\t\treturn;\n\t}\n\trmSync(path, { force: true });\n}\n\nfunction defaultStateProgressMessage(state: MissionState): string | undefined {\n\tswitch (state) {\n\t\tcase \"running\":\n\t\t\treturn \"Mission started\";\n\t\tcase \"blocked\":\n\t\t\treturn \"Mission is blocked\";\n\t\tcase \"completed\":\n\t\t\treturn \"Mission completed\";\n\t\tdefault:\n\t\t\treturn undefined;\n\t}\n}\n\nfunction withMissionStateLock<T>(path: string, operation: () => T): T {\n\tconst lockPath = `${path}.lock`;\n\tconst startedAt = Date.now();\n\twhile (true) {\n\t\ttry {\n\t\t\tmkdirSync(lockPath);\n\t\t\twriteMissionLockOwner(lockPath);\n\t\t\tbreak;\n\t\t} catch (error) {\n\t\t\tconst code = (error as NodeJS.ErrnoException).code;\n\t\t\tif (code !== \"EEXIST\") throw error;\n\t\t\tif (recoverStaleMissionStateLock(lockPath)) continue;\n\t\t\tif (Date.now() - startedAt > 5000) {\n\t\t\t\tthrow new Error(`timed out waiting for mission state lock: ${path}`);\n\t\t\t}\n\t\t\tsleepSync(25);\n\t\t}\n\t}\n\ttry {\n\t\treturn operation();\n\t} finally {\n\t\trmSync(lockPath, { recursive: true, force: true });\n\t}\n}\n\nfunction writeMissionLockOwner(lockPath: string): void {\n\ttry {\n\t\twriteJsonFile(join(lockPath, \"owner.json\"), {\n\t\t\tpid: process.pid,\n\t\t\tcreatedAt: new Date().toISOString(),\n\t\t});\n\t} catch {\n\t\t// Best-effort metadata: lock ownership should not make acquisition fail.\n\t}\n}\n\nfunction recoverStaleMissionStateLock(lockPath: string): boolean {\n\ttry {\n\t\tconst stats = statSync(lockPath);\n\t\tif (Date.now() - stats.mtimeMs <= MISSION_STATE_LOCK_STALE_MS) {\n\t\t\treturn false;\n\t\t}\n\t\tconst owner = readJsonFile<{ pid?: unknown } | null>(\n\t\t\tjoin(lockPath, \"owner.json\"),\n\t\t\t{ fallback: null },\n\t\t);\n\t\tif (typeof owner?.pid === \"number\" && isProcessAlive(owner.pid)) {\n\t\t\treturn false;\n\t\t}\n\t\trmSync(lockPath, { recursive: true, force: true });\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction isProcessAlive(pid: number): boolean {\n\tif (!Number.isInteger(pid) || pid <= 0) return false;\n\ttry {\n\t\tprocess.kill(pid, 0);\n\t\treturn true;\n\t} catch (error) {\n\t\treturn (error as NodeJS.ErrnoException).code === \"EPERM\";\n\t}\n}\n\nfunction sleepSync(ms: number): void {\n\tconst buffer = new SharedArrayBuffer(4);\n\tAtomics.wait(new Int32Array(buffer), 0, 0, ms);\n}\n\nfunction mergeSnapshots(\n\tbase: MissionStoreSnapshot,\n\tintended: MissionStoreSnapshot,\n\texisting: MissionStoreSnapshot,\n\toptions: { stateTouched?: boolean } = {},\n): MissionStoreSnapshot {\n\tconst state = mergeMissionState(\n\t\tbase,\n\t\tintended,\n\t\texisting,\n\t\toptions.stateTouched,\n\t);\n\tconst progressLog = mergeProgressLog(\n\t\texisting.progressLog,\n\t\tbase.progressLog,\n\t\twithoutRejectedStateTransitionProgress(\n\t\t\tbase,\n\t\t\tintended,\n\t\t\tstate,\n\t\t\toptions.stateTouched,\n\t\t),\n\t);\n\tconst tokenUsageBySessionId = { ...existing.tokenUsageBySessionId };\n\tfor (const [sessionId, usage] of Object.entries(\n\t\tintended.tokenUsageBySessionId,\n\t)) {\n\t\tif (!jsonEqual(usage, base.tokenUsageBySessionId[sessionId])) {\n\t\t\ttokenUsageBySessionId[sessionId] = usage;\n\t\t}\n\t}\n\treturn normalizeSnapshot({\n\t\t...existing,\n\t\ttitle: fieldChanged(intended.title, base.title)\n\t\t\t? intended.title\n\t\t\t: existing.title,\n\t\tstate,\n\t\tfeatures: mergeFeatures(\n\t\t\tbase.features,\n\t\t\tintended.features,\n\t\t\texisting.features,\n\t\t),\n\t\tprogressLog,\n\t\ttokenUsageBySessionId,\n\t\tupdatedAt: maxIsoTimestamp(existing.updatedAt, intended.updatedAt),\n\t});\n}\n\nfunction withoutRejectedStateTransitionProgress(\n\tbase: MissionStoreSnapshot,\n\tintended: MissionStoreSnapshot,\n\tmergedState: MissionState,\n\tstateTouched = false,\n): readonly MissionProgressEntry[] {\n\tconst intendedChanged =\n\t\tstateTouched || fieldChanged(intended.state, base.state);\n\tif (!intendedChanged || mergedState === intended.state) {\n\t\treturn intended.progressLog;\n\t}\n\tconst lastEntry = intended.progressLog.at(-1);\n\tif (!lastEntry) return intended.progressLog;\n\tconst baseKeys = new Set(base.progressLog.map(progressEntryKey));\n\tif (\n\t\tbaseKeys.has(progressEntryKey(lastEntry)) ||\n\t\tlastEntry.timestamp !== intended.updatedAt ||\n\t\tlastEntry.type !== stateToProgressType(intended.state)\n\t) {\n\t\treturn intended.progressLog;\n\t}\n\treturn intended.progressLog.slice(0, -1);\n}\n\nfunction mergeMissionState(\n\tbase: MissionStoreSnapshot,\n\tintended: MissionStoreSnapshot,\n\texisting: MissionStoreSnapshot,\n\tstateTouched = false,\n): MissionState {\n\tconst intendedChanged =\n\t\tstateTouched || fieldChanged(intended.state, base.state);\n\tif (!intendedChanged) {\n\t\treturn existing.state;\n\t}\n\tif (\n\t\tisTerminalMissionState(existing.state) &&\n\t\texisting.state !== intended.state\n\t) {\n\t\treturn existing.state;\n\t}\n\tif (\n\t\t!fieldChanged(existing.state, base.state) ||\n\t\tjsonEqual(intended.state, existing.state)\n\t) {\n\t\treturn intended.state;\n\t}\n\treturn existing.state;\n}\n\nfunction isTerminalMissionState(state: MissionState): boolean {\n\treturn state === \"completed\" || state === \"failed\";\n}\n\nfunction mergeFeatures(\n\tbase: readonly MissionFeature[],\n\tintended: readonly MissionFeature[],\n\texisting: readonly MissionFeature[],\n): MissionFeature[] {\n\tconst baseById = new Map(\n\t\tbase.map((feature) => [feature.id, feature] as const),\n\t);\n\tconst intendedById = new Map(\n\t\tintended.map((feature) => [feature.id, feature] as const),\n\t);\n\tconst existingById = new Map(\n\t\texisting.map((feature) => [feature.id, feature] as const),\n\t);\n\tconst orderedIds = Array.from(\n\t\tnew Set([\n\t\t\t...existing.map((feature) => feature.id),\n\t\t\t...intended.map((feature) => feature.id),\n\t\t]),\n\t);\n\tconst merged: MissionFeature[] = [];\n\tfor (const featureId of orderedIds) {\n\t\tconst baseFeature = baseById.get(featureId);\n\t\tconst intendedFeature = intendedById.get(featureId);\n\t\tconst existingFeature = existingById.get(featureId);\n\t\tconst intendedChanged = !jsonEqual(intendedFeature, baseFeature);\n\t\tconst existingChanged = !jsonEqual(existingFeature, baseFeature);\n\t\tif (!intendedChanged) {\n\t\t\tif (existingFeature) merged.push(existingFeature);\n\t\t\tcontinue;\n\t\t}\n\t\tif (!existingChanged || jsonEqual(intendedFeature, existingFeature)) {\n\t\t\tif (intendedFeature) merged.push(intendedFeature);\n\t\t\tcontinue;\n\t\t}\n\t\tthrow new Error(\n\t\t\t`mission feature ${featureId} changed concurrently; reload before saving`,\n\t\t);\n\t}\n\treturn merged;\n}\n\nfunction mergeProgressLog(\n\texisting: readonly MissionProgressEntry[],\n\tbase: readonly MissionProgressEntry[],\n\tintended: readonly MissionProgressEntry[],\n): MissionProgressEntry[] {\n\tconst baseKeys = new Set(base.map(progressEntryKey));\n\tconst existingKeys = new Set(existing.map(progressEntryKey));\n\tconst next = [...existing];\n\tfor (const entry of intended) {\n\t\tconst key = progressEntryKey(entry);\n\t\tif (baseKeys.has(key) || existingKeys.has(key)) continue;\n\t\tnext.push(entry);\n\t\texistingKeys.add(key);\n\t}\n\treturn next.sort((left, right) =>\n\t\tleft.timestamp.localeCompare(right.timestamp),\n\t);\n}\n\nfunction progressEntryKey(entry: MissionProgressEntry): string {\n\treturn JSON.stringify(entry);\n}\n\nfunction fieldChanged<T>(intended: T, base: T): boolean {\n\treturn !jsonEqual(intended, base);\n}\n\nfunction jsonEqual(left: unknown, right: unknown): boolean {\n\treturn JSON.stringify(left) === JSON.stringify(right);\n}\n\nfunction maxIsoTimestamp(left: string, right: string): string {\n\treturn left.localeCompare(right) >= 0 ? left : right;\n}\n\nfunction stateToProgressType(\n\tstate: MissionState,\n): MissionProgressEntry[\"type\"] {\n\tswitch (state) {\n\t\tcase \"running\":\n\t\t\treturn \"mission_started\";\n\t\tcase \"blocked\":\n\t\t\treturn \"mission_blocked\";\n\t\tcase \"completed\":\n\t\t\treturn \"mission_completed\";\n\t\tdefault:\n\t\t\treturn \"note\";\n\t}\n}\n\nexport function listMissionStoreSnapshots(\n\trootDir?: string,\n): MissionStoreSnapshot[] {\n\tconst root = getMissionStoreRoot(rootDir);\n\tif (!existsSync(root)) return [];\n\treturn readdirSync(root, { withFileTypes: true })\n\t\t.filter((entry) => entry.isDirectory())\n\t\t.flatMap((entry) => {\n\t\t\ttry {\n\t\t\t\tconst path = join(root, entry.name, \"state.json\");\n\t\t\t\tif (!existsSync(path)) return [];\n\t\t\t\tconst snapshot = readJsonFile<MissionStoreSnapshot | null>(path, {\n\t\t\t\t\tfallback: null,\n\t\t\t\t\trotateOnParseFail: true,\n\t\t\t\t});\n\t\t\t\treturn snapshot\n\t\t\t\t\t? [normalizeSnapshot(applyArtifactFeaturesToSnapshot(snapshot, root))]\n\t\t\t\t\t: [];\n\t\t\t} catch {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t})\n\t\t.sort((left, right) => right.updatedAt.localeCompare(left.updatedAt));\n}\n\nfunction applyArtifactFeaturesToSnapshot(\n\tsnapshot: MissionStoreSnapshot,\n\trootDir?: string,\n): MissionStoreSnapshot {\n\tconst featuresPath = join(\n\t\tgetMissionDir(snapshot.missionId, rootDir),\n\t\t\"features.json\",\n\t);\n\tif (!existsSync(featuresPath)) return snapshot;\n\tconst manifest = readJsonFile<MissionManifest | null>(featuresPath, {\n\t\tfallback: null,\n\t\trotateOnParseFail: true,\n\t});\n\tconst features = getValidArtifactFeatures(manifest, snapshot);\n\treturn features\n\t\t? {\n\t\t\t\t...snapshot,\n\t\t\t\tfeatures,\n\t\t\t\tupdatedAt:\n\t\t\t\t\ttypeof (manifest as { updatedAt?: unknown }).updatedAt === \"string\"\n\t\t\t\t\t\t? (manifest as { updatedAt: string }).updatedAt\n\t\t\t\t\t\t: snapshot.updatedAt,\n\t\t\t}\n\t\t: snapshot;\n}\n\nfunction getValidArtifactFeatures(\n\tvalue: unknown,\n\tsnapshot: MissionStoreSnapshot,\n): MissionFeature[] | null {\n\tif (!value || typeof value !== \"object\") return null;\n\tconst record = value as Record<string, unknown>;\n\tif (typeof record.version !== \"number\") return null;\n\tif (typeof record.missionId !== \"string\") return null;\n\tlet missionId: string;\n\ttry {\n\t\tmissionId = sanitizeMissionId(record.missionId);\n\t} catch {\n\t\treturn null;\n\t}\n\tif (missionId !== snapshot.missionId) return null;\n\tif (\n\t\ttypeof record.updatedAt !== \"string\" ||\n\t\tNumber.isNaN(Date.parse(record.updatedAt)) ||\n\t\tDate.parse(record.updatedAt) < Date.parse(snapshot.updatedAt)\n\t) {\n\t\treturn null;\n\t}\n\tif (!Array.isArray(record.features)) return null;\n\tif (record.features.length === 0 && snapshot.features.length > 0) return null;\n\tconst featureIds = new Set<string>();\n\tfor (const feature of record.features) {\n\t\tif (!isMissionFeature(feature)) return null;\n\t\tif (featureIds.has(feature.id)) return null;\n\t\tfeatureIds.add(feature.id);\n\t}\n\treturn record.features as MissionFeature[];\n}\n\nfunction assertNoMissionIdCollision(\n\tpath: string,\n\tsnapshot: MissionStoreSnapshot,\n): void {\n\tif (!existsSync(path)) return;\n\tconst existing = readJsonFile<MissionStoreSnapshot | null>(path, {\n\t\tfallback: null,\n\t});\n\tif (!existing?.sourceMissionId || !snapshot.sourceMissionId) return;\n\tif (existing.sourceMissionId !== snapshot.sourceMissionId) {\n\t\tthrow new Error(\n\t\t\t`missionId collision: ${snapshot.sourceMissionId} maps to existing mission ${existing.sourceMissionId}`,\n\t\t);\n\t}\n}\n\nfunction assertMissionCreateTargetAvailable(\n\tmissionId: string,\n\trootDir?: string,\n): void {\n\tconst statePath = getMissionStatePath(missionId, rootDir);\n\tif (existsSync(statePath)) {\n\t\tconst snapshot = readJsonFile<MissionStoreSnapshot>(statePath, {\n\t\t\trotateOnParseFail: true,\n\t\t});\n\t\tconst requestedId = normalizeMissionIdInput(missionId);\n\t\tif (\n\t\t\tsnapshot.sourceMissionId?.trim() &&\n\t\t\tsnapshot.sourceMissionId.trim() !== requestedId\n\t\t) {\n\t\t\tthrow new Error(\n\t\t\t\t`missionId \"${requestedId}\" collides with existing mission \"${snapshot.sourceMissionId.trim()}\"`,\n\t\t\t);\n\t\t}\n\t\tthrow new Error(`mission already exists: ${sanitizeMissionId(missionId)}`);\n\t}\n\tconst missionDir = getMissionDir(missionId, rootDir);\n\tif (existsSync(missionDir) && readdirSync(missionDir).length > 0) {\n\t\tthrow new Error(\n\t\t\t`mission already exists without durable state: ${sanitizeMissionId(missionId)}`,\n\t\t);\n\t}\n}\n\nfunction writeMissionManifest(\n\tsnapshot: MissionStoreSnapshot,\n\trootDir?: string,\n): void {\n\tconst path = join(\n\t\tgetMissionDir(snapshot.missionId, rootDir),\n\t\t\"features.json\",\n\t);\n\tconst existing = readJsonFile<MissionManifest | null>(path, {\n\t\tfallback: null,\n\t\trotateOnParseFail: true,\n\t});\n\tif (isNewerMissionManifest(existing, snapshot)) return;\n\twriteJsonFile(path, {\n\t\tversion:\n\t\t\ttypeof existing?.version === \"number\"\n\t\t\t\t? existing.version\n\t\t\t\t: MISSION_MANIFEST_VERSION,\n\t\tmissionId: snapshot.missionId,\n\t\tmilestones: Array.isArray(existing?.milestones) ? existing.milestones : [],\n\t\tfeatures: snapshot.features,\n\t\tcreatedAt:\n\t\t\ttypeof existing?.createdAt === \"string\"\n\t\t\t\t? existing.createdAt\n\t\t\t\t: snapshot.createdAt,\n\t\tupdatedAt: snapshot.updatedAt,\n\t});\n}\n\nfunction isNewerMissionManifest(\n\tmanifest: MissionManifest | null,\n\tsnapshot: MissionStoreSnapshot,\n): boolean {\n\treturn Boolean(\n\t\tgetValidArtifactFeatures(manifest, snapshot) &&\n\t\t\ttypeof manifest?.updatedAt === \"string\" &&\n\t\t\tDate.parse(manifest.updatedAt) > Date.parse(snapshot.updatedAt),\n\t);\n}\n"]}
|
package/dist/agent/modes.d.ts
CHANGED
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
*
|
|
45
45
|
* - `MAESTRO_MODE`: Override the default mode at startup
|
|
46
46
|
*/
|
|
47
|
-
import type
|
|
47
|
+
import { type SubagentType } from "./subagent-specs.js";
|
|
48
48
|
/**
|
|
49
49
|
* Available agent modes representing different quality/speed/cost tradeoffs.
|
|
50
50
|
*
|
|
@@ -185,7 +185,7 @@ export declare function getModelForTier(tier: ModelTier, provider?: ModelProvide
|
|
|
185
185
|
/**
|
|
186
186
|
* Resolve the concrete model/provider a subagent should use in a mode.
|
|
187
187
|
*/
|
|
188
|
-
export declare function resolveSubagentDispatch(mode: AgentMode, type: SubagentType, provider?: ModelProvider): ResolvedSubagentDispatch;
|
|
188
|
+
export declare function resolveSubagentDispatch(mode: AgentMode, type: SubagentType | string, provider?: ModelProvider): ResolvedSubagentDispatch;
|
|
189
189
|
/**
|
|
190
190
|
* Get the configuration for a mode.
|
|
191
191
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"modes.d.ts","sourceRoot":"","sources":["../../src/agent/modes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AAIH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"modes.d.ts","sourceRoot":"","sources":["../../src/agent/modes.ts"],"names":[],"mappings":"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"}
|
package/dist/agent/modes.js
CHANGED
|
@@ -46,6 +46,7 @@
|
|
|
46
46
|
*/
|
|
47
47
|
import { recordStagedRolloutSurfaceUsage } from "../telemetry.js";
|
|
48
48
|
import { createLogger } from "../utils/logger.js";
|
|
49
|
+
import { parseSubagentType } from "./subagent-specs.js";
|
|
49
50
|
// Logger scoped to agent modes for debugging mode transitions
|
|
50
51
|
const logger = createLogger("agent:modes");
|
|
51
52
|
const PROVIDERS = [
|
|
@@ -87,6 +88,7 @@ export const MODE_CONFIGS = {
|
|
|
87
88
|
coder: { model: "openai-codex/gpt-5.5", reasoningEffort: "medium" },
|
|
88
89
|
reviewer: { model: "sonnet", reasoningEffort: "medium" },
|
|
89
90
|
researcher: { model: "sonnet", reasoningEffort: "medium" },
|
|
91
|
+
"browser-qa": { model: "sonnet", reasoningEffort: "medium" },
|
|
90
92
|
minimal: { model: "haiku", reasoningEffort: "low" },
|
|
91
93
|
},
|
|
92
94
|
},
|
|
@@ -110,6 +112,7 @@ export const MODE_CONFIGS = {
|
|
|
110
112
|
coder: { model: "sonnet", reasoningEffort: "low" },
|
|
111
113
|
reviewer: { model: "haiku", reasoningEffort: "low" },
|
|
112
114
|
researcher: { model: "haiku", reasoningEffort: "low" },
|
|
115
|
+
"browser-qa": { model: "sonnet", reasoningEffort: "low" },
|
|
113
116
|
minimal: { model: "haiku", reasoningEffort: "low" },
|
|
114
117
|
},
|
|
115
118
|
},
|
|
@@ -133,6 +136,7 @@ export const MODE_CONFIGS = {
|
|
|
133
136
|
coder: { model: "haiku", reasoningEffort: "low" },
|
|
134
137
|
reviewer: { model: "haiku", reasoningEffort: "low" },
|
|
135
138
|
researcher: { model: "haiku", reasoningEffort: "low" },
|
|
139
|
+
"browser-qa": { model: "haiku", reasoningEffort: "low" },
|
|
136
140
|
minimal: { model: "haiku", reasoningEffort: "low" },
|
|
137
141
|
},
|
|
138
142
|
},
|
|
@@ -170,6 +174,7 @@ export const MODE_CONFIGS = {
|
|
|
170
174
|
coder: { model: "openai-codex/gpt-5.5", reasoningEffort: "high" },
|
|
171
175
|
reviewer: { model: "openai-codex/gpt-5.5", reasoningEffort: "medium" },
|
|
172
176
|
researcher: { model: "sonnet", reasoningEffort: "medium" },
|
|
177
|
+
"browser-qa": { model: "sonnet", reasoningEffort: "high" },
|
|
173
178
|
minimal: { model: "haiku", reasoningEffort: "low" },
|
|
174
179
|
},
|
|
175
180
|
rolloutOwner: "agent-runtime",
|
|
@@ -193,6 +198,7 @@ export const MODE_CONFIGS = {
|
|
|
193
198
|
coder: { model: "haiku", reasoningEffort: "low" },
|
|
194
199
|
reviewer: { model: "haiku", reasoningEffort: "low" },
|
|
195
200
|
researcher: { model: "haiku", reasoningEffort: "low" },
|
|
201
|
+
"browser-qa": { model: "haiku", reasoningEffort: "low" },
|
|
196
202
|
minimal: { model: "haiku", reasoningEffort: "low" },
|
|
197
203
|
},
|
|
198
204
|
rolloutOwner: "agent-evals",
|
|
@@ -273,7 +279,8 @@ function defaultReasoningEffort(config) {
|
|
|
273
279
|
*/
|
|
274
280
|
export function resolveSubagentDispatch(mode, type, provider = "openai-codex") {
|
|
275
281
|
const config = getModeConfig(mode);
|
|
276
|
-
const
|
|
282
|
+
const resolvedType = parseSubagentType(type) ?? "coder";
|
|
283
|
+
const dispatch = config.subagents?.[resolvedType];
|
|
277
284
|
const source = dispatch ? "mode" : "fallback";
|
|
278
285
|
const requestedModel = dispatch?.model ?? config.primaryTier;
|
|
279
286
|
const reasoningEffort = dispatch?.reasoningEffort ?? defaultReasoningEffort(config);
|
|
@@ -281,7 +288,7 @@ export function resolveSubagentDispatch(mode, type, provider = "openai-codex") {
|
|
|
281
288
|
const resolvedProvider = dispatch?.provider ?? provider;
|
|
282
289
|
return {
|
|
283
290
|
mode,
|
|
284
|
-
type,
|
|
291
|
+
type: resolvedType,
|
|
285
292
|
provider: resolvedProvider,
|
|
286
293
|
model: getModelForTier(requestedModel, resolvedProvider),
|
|
287
294
|
modelTier: requestedModel,
|
|
@@ -297,7 +304,7 @@ export function resolveSubagentDispatch(mode, type, provider = "openai-codex") {
|
|
|
297
304
|
const resolvedProvider = dispatch?.provider ?? explicit.provider ?? provider;
|
|
298
305
|
return {
|
|
299
306
|
mode,
|
|
300
|
-
type,
|
|
307
|
+
type: resolvedType,
|
|
301
308
|
provider: resolvedProvider,
|
|
302
309
|
model: explicit.model,
|
|
303
310
|
reasoningEffort,
|
package/dist/agent/modes.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"modes.js","sourceRoot":"","sources":["../../src/agent/modes.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Agent Modes - Different operating modes for the agent.\n *\n * This module implements a tiered model selection system inspired by Amp's\n * smart/rush/free modes. Each mode represents a different balance between\n * response quality, speed, and cost:\n *\n * - **smart**: Uses the highest capability model (opus) for complex reasoning\n * tasks. Enables thinking/reasoning mode with extended context windows.\n * Best for: Architecture decisions, complex refactoring, debugging.\n *\n * - **rush**: Uses mid-tier models (sonnet) for faster responses. Disables\n * thinking mode to reduce latency. Best for: Quick fixes, simple edits,\n * straightforward code generation.\n *\n * - **free**: Uses the most cost-effective models (haiku) with minimal\n * features. Best for: Simple questions, file searches, documentation\n * lookups where speed and cost matter more than depth.\n *\n * - **custom**: User-defined configuration allowing fine-tuned control\n * over model selection and feature toggles.\n *\n * ## Architecture\n *\n * The mode system uses a two-level abstraction:\n * 1. **ModelTier** (opus/sonnet/haiku): Logical capability levels\n * 2. **ModelMapping**: Provider-specific model IDs for each tier\n *\n * This allows the same mode configuration to work across different\n * LLM providers (Anthropic, OpenAI, Google) by mapping tiers to\n * provider-specific model identifiers.\n *\n * ## Usage\n *\n * ```typescript\n * // Set mode based on task\n * setCurrentMode(suggestMode(\"refactor the auth module\")); // → \"smart\"\n *\n * // Get model for current provider\n * const model = getModelForMode(getCurrentMode(), \"anthropic\");\n * ```\n *\n * ## Environment Variables\n *\n * - `MAESTRO_MODE`: Override the default mode at startup\n */\n\nimport { recordStagedRolloutSurfaceUsage } from \"../telemetry.js\";\nimport { createLogger } from \"../utils/logger.js\";\nimport type { SubagentType } from \"./subagent-specs.js\";\n\n// Logger scoped to agent modes for debugging mode transitions\nconst logger = createLogger(\"agent:modes\");\n\n/**\n * Available agent modes representing different quality/speed/cost tradeoffs.\n *\n * - \"smart\": Maximum capability, uses opus-class models with reasoning enabled\n * - \"rush\": Balanced speed, uses sonnet-class models without reasoning overhead\n * - \"free\": Cost-optimized, uses haiku-class models for simple operations\n * - \"custom\": User-defined settings for specialized workflows\n */\nexport type AgentMode =\n\t| \"smart\"\n\t| \"rush\"\n\t| \"free\"\n\t| \"custom\"\n\t| \"frontier\"\n\t| \"replay\";\n\n/**\n * Model tier representing capability levels that map to provider-specific models.\n *\n * The tier abstraction allows the same configuration to work across providers:\n * - \"opus\": Highest capability (claude-opus, gpt-5.2, gemini-thinking)\n * - \"sonnet\": Balanced capability (claude-sonnet, gpt-4o, gemini-flash)\n * - \"haiku\": Fast/efficient (claude-haiku, gpt-4o-mini, gemini-flash-lite)\n */\nexport type ModelTier = \"opus\" | \"sonnet\" | \"haiku\";\n\n/** Supported model providers for tier and subagent dispatch. */\nexport type ModelProvider = \"anthropic\" | \"openai\" | \"openai-codex\" | \"google\";\n\n/** Reasoning budget hint passed to subagents that support it. */\nexport type ReasoningEffort = \"low\" | \"medium\" | \"high\" | \"xhigh\";\n\n/** Where the resolved subagent dispatch came from. */\nexport type DispatchSource = \"mode\" | \"fallback\";\n\n/**\n * Per-subagent model routing override.\n *\n * `model` can be a logical model tier (`opus`, `sonnet`, `haiku`) or an\n * explicit model ID. Explicit model IDs may be provider-prefixed, for example\n * `openai-codex/gpt-5.5`.\n */\nexport interface SubagentDispatch {\n\tmodel: ModelTier | string;\n\tprovider?: ModelProvider;\n\treasoningEffort?: ReasoningEffort;\n\tmaxTokens?: number;\n\ttemperature?: number;\n\ttimeoutMs?: number;\n\tpromptTemplate?: string;\n}\n\n/** Fully resolved model routing for one subagent invocation. */\nexport interface ResolvedSubagentDispatch {\n\tmode: AgentMode;\n\ttype: SubagentType;\n\tprovider: ModelProvider;\n\tmodel: string;\n\tmodelTier?: ModelTier;\n\treasoningEffort: ReasoningEffort;\n\tmaxTokens?: number;\n\ttemperature?: number;\n\ttimeoutMs?: number;\n\tpromptTemplate?: string;\n\tsource: DispatchSource;\n}\n\n/**\n * Mode configuration that determines model selection and behavior.\n *\n * Each mode has a complete configuration that controls:\n * - Which model tier to use (primary and fallback)\n * - Whether to enable extended reasoning/thinking\n * - Context and retry limits\n * - UI hints for cost/speed display\n */\nexport interface ModeConfig {\n\t/** Display name for the mode */\n\tdisplayName: string;\n\t/** Description of what this mode does */\n\tdescription: string;\n\t/** Primary model tier to use */\n\tprimaryTier: ModelTier;\n\t/** Fallback model tier if primary is unavailable */\n\tfallbackTier: ModelTier;\n\t/** Whether to enable thinking/reasoning */\n\tenableThinking: boolean;\n\t/** Default reasoning effort for mode-level and fallback subagent routing. */\n\treasoningEffort?: ReasoningEffort;\n\t/** Maximum thinking budget (tokens) */\n\tthinkingBudget: number;\n\t/** Whether to use extended context */\n\tuseExtendedContext: boolean;\n\t/** Retry configuration */\n\tmaxRetries: number;\n\t/** Cost multiplier hint (for UI display) */\n\tcostMultiplier: number;\n\t/** Speed hint (1-10, higher is faster) */\n\tspeedHint: number;\n\t/** Whether this mode is shown in default user-facing mode lists. */\n\tvisible: boolean;\n\t/** Optional dispatch table for mode-specific subagent routing. */\n\tsubagents?: Partial<Record<SubagentType, SubagentDispatch>>;\n\t/** Owner responsible for promotion or removal when hidden. */\n\trolloutOwner?: string;\n}\n\n/**\n * Model mapping for different providers.\n */\nexport interface ModelMapping {\n\tanthropic: string;\n\topenai?: string;\n\t\"openai-codex\"?: string;\n\tgoogle?: string;\n}\n\nconst PROVIDERS: ModelProvider[] = [\n\t\"anthropic\",\n\t\"openai\",\n\t\"openai-codex\",\n\t\"google\",\n];\n\n/**\n * Default mode configurations defining the behavior of each agent mode.\n *\n * These configurations are the canonical source of truth for how each mode\n * behaves. The settings are carefully tuned based on model capabilities\n * and typical use case requirements:\n *\n * - **smart**: Full-featured for complex tasks (16k thinking budget, 3 retries)\n * - **rush**: Optimized for speed (no thinking, 2 retries, smaller context)\n * - **free**: Minimal resource usage (no thinking, 1 retry, no extended context)\n * - **custom**: Balanced defaults that users can override\n */\nexport const MODE_CONFIGS: Record<AgentMode, ModeConfig> = {\n\t// Smart mode: Maximum capability for complex reasoning tasks\n\tsmart: {\n\t\tdisplayName: \"Smart\",\n\t\tdescription: \"Best quality, uses opus for complex tasks\",\n\t\tprimaryTier: \"opus\",\n\t\tfallbackTier: \"sonnet\",\n\t\tenableThinking: true,\n\t\treasoningEffort: \"medium\",\n\t\tthinkingBudget: 16000,\n\t\tuseExtendedContext: true,\n\t\tmaxRetries: 3,\n\t\tcostMultiplier: 1.0,\n\t\tspeedHint: 5,\n\t\tvisible: true,\n\t\tsubagents: {\n\t\t\texplorer: { model: \"haiku\", reasoningEffort: \"low\" },\n\t\t\tplanner: { model: \"opus\", reasoningEffort: \"high\" },\n\t\t\tcoder: { model: \"openai-codex/gpt-5.5\", reasoningEffort: \"medium\" },\n\t\t\treviewer: { model: \"sonnet\", reasoningEffort: \"medium\" },\n\t\t\tresearcher: { model: \"sonnet\", reasoningEffort: \"medium\" },\n\t\t\tminimal: { model: \"haiku\", reasoningEffort: \"low\" },\n\t\t},\n\t},\n\t// Rush mode: Speed-optimized for quick iterations\n\trush: {\n\t\tdisplayName: \"Rush\",\n\t\tdescription: \"Fast responses, uses sonnet for speed\",\n\t\tprimaryTier: \"sonnet\",\n\t\tfallbackTier: \"haiku\",\n\t\tenableThinking: false,\n\t\treasoningEffort: \"low\",\n\t\tthinkingBudget: 4000,\n\t\tuseExtendedContext: false,\n\t\tmaxRetries: 2,\n\t\tcostMultiplier: 0.5,\n\t\tspeedHint: 8,\n\t\tvisible: true,\n\t\tsubagents: {\n\t\t\texplorer: { model: \"haiku\", reasoningEffort: \"low\" },\n\t\t\tplanner: { model: \"sonnet\", reasoningEffort: \"low\" },\n\t\t\tcoder: { model: \"sonnet\", reasoningEffort: \"low\" },\n\t\t\treviewer: { model: \"haiku\", reasoningEffort: \"low\" },\n\t\t\tresearcher: { model: \"haiku\", reasoningEffort: \"low\" },\n\t\t\tminimal: { model: \"haiku\", reasoningEffort: \"low\" },\n\t\t},\n\t},\n\t// Free mode: Cost-optimized for simple tasks\n\tfree: {\n\t\tdisplayName: \"Free\",\n\t\tdescription: \"Most cost-effective, uses haiku\",\n\t\tprimaryTier: \"haiku\",\n\t\tfallbackTier: \"haiku\",\n\t\tenableThinking: false,\n\t\treasoningEffort: \"low\",\n\t\tthinkingBudget: 2000,\n\t\tuseExtendedContext: false,\n\t\tmaxRetries: 1,\n\t\tcostMultiplier: 0.1,\n\t\tspeedHint: 10,\n\t\tvisible: true,\n\t\tsubagents: {\n\t\t\texplorer: { model: \"haiku\", reasoningEffort: \"low\" },\n\t\t\tplanner: { model: \"haiku\", reasoningEffort: \"low\" },\n\t\t\tcoder: { model: \"haiku\", reasoningEffort: \"low\" },\n\t\t\treviewer: { model: \"haiku\", reasoningEffort: \"low\" },\n\t\t\tresearcher: { model: \"haiku\", reasoningEffort: \"low\" },\n\t\t\tminimal: { model: \"haiku\", reasoningEffort: \"low\" },\n\t\t},\n\t},\n\t// Custom mode: User-configurable defaults (can be overridden at runtime)\n\tcustom: {\n\t\tdisplayName: \"Custom\",\n\t\tdescription: \"User-defined configuration\",\n\t\tprimaryTier: \"sonnet\",\n\t\tfallbackTier: \"haiku\",\n\t\tenableThinking: true,\n\t\treasoningEffort: \"medium\",\n\t\tthinkingBudget: 8000,\n\t\tuseExtendedContext: true,\n\t\tmaxRetries: 2,\n\t\tcostMultiplier: 0.7,\n\t\tspeedHint: 6,\n\t\tvisible: true,\n\t},\n\tfrontier: {\n\t\tdisplayName: \"Frontier\",\n\t\tdescription: \"Experimental high-capability orchestration mode\",\n\t\tprimaryTier: \"opus\",\n\t\tfallbackTier: \"sonnet\",\n\t\tenableThinking: true,\n\t\treasoningEffort: \"high\",\n\t\tthinkingBudget: 20000,\n\t\tuseExtendedContext: true,\n\t\tmaxRetries: 3,\n\t\tcostMultiplier: 1.25,\n\t\tspeedHint: 4,\n\t\tvisible: false,\n\t\tsubagents: {\n\t\t\texplorer: { model: \"sonnet\", reasoningEffort: \"medium\" },\n\t\t\tplanner: { model: \"opus\", reasoningEffort: \"xhigh\" },\n\t\t\tcoder: { model: \"openai-codex/gpt-5.5\", reasoningEffort: \"high\" },\n\t\t\treviewer: { model: \"openai-codex/gpt-5.5\", reasoningEffort: \"medium\" },\n\t\t\tresearcher: { model: \"sonnet\", reasoningEffort: \"medium\" },\n\t\t\tminimal: { model: \"haiku\", reasoningEffort: \"low\" },\n\t\t},\n\t\trolloutOwner: \"agent-runtime\",\n\t},\n\treplay: {\n\t\tdisplayName: \"Replay\",\n\t\tdescription: \"Deterministic scripted scenario replay\",\n\t\tprimaryTier: \"haiku\",\n\t\tfallbackTier: \"haiku\",\n\t\tenableThinking: false,\n\t\treasoningEffort: \"low\",\n\t\tthinkingBudget: 0,\n\t\tuseExtendedContext: false,\n\t\tmaxRetries: 0,\n\t\tcostMultiplier: 0,\n\t\tspeedHint: 10,\n\t\tvisible: false,\n\t\tsubagents: {\n\t\t\texplorer: { model: \"haiku\", reasoningEffort: \"low\" },\n\t\t\tplanner: { model: \"haiku\", reasoningEffort: \"low\" },\n\t\t\tcoder: { model: \"haiku\", reasoningEffort: \"low\" },\n\t\t\treviewer: { model: \"haiku\", reasoningEffort: \"low\" },\n\t\t\tresearcher: { model: \"haiku\", reasoningEffort: \"low\" },\n\t\t\tminimal: { model: \"haiku\", reasoningEffort: \"low\" },\n\t\t},\n\t\trolloutOwner: \"agent-evals\",\n\t},\n};\n\n/**\n * Model mappings by tier for each provider.\n *\n * This lookup table maps abstract capability tiers to concrete model IDs\n * for each supported LLM provider. When adding new providers or updating\n * model versions, update this table to maintain consistent tier behavior.\n *\n * Note: Model IDs include version dates to ensure reproducibility.\n * Update these periodically as providers release improved versions.\n */\nexport const MODEL_BY_TIER: Record<ModelTier, ModelMapping> = {\n\t// Opus tier: Highest capability models with advanced reasoning\n\topus: {\n\t\tanthropic: \"claude-opus-4-6\",\n\t\topenai: \"gpt-5.2\",\n\t\t\"openai-codex\": \"gpt-5.5\",\n\t\tgoogle: \"gemini-2.0-flash-thinking-exp\",\n\t},\n\t// Sonnet tier: Balanced performance models for general use\n\tsonnet: {\n\t\tanthropic: \"claude-sonnet-4-5-20250929\",\n\t\topenai: \"gpt-4o\",\n\t\t\"openai-codex\": \"gpt-5.4\",\n\t\tgoogle: \"gemini-2.0-flash-exp\",\n\t},\n\t// Haiku tier: Fast, efficient models for simple tasks\n\thaiku: {\n\t\tanthropic: \"claude-haiku-4-5-20251001\",\n\t\topenai: \"gpt-4o-mini\",\n\t\t\"openai-codex\": \"gpt-5.4-mini\",\n\t\tgoogle: \"gemini-2.0-flash-lite-exp\",\n\t},\n};\n\n/**\n * Get the model ID for a given tier and provider.\n *\n * @param tier - The capability tier (opus/sonnet/haiku)\n * @param provider - The LLM provider (defaults to openai-codex)\n * @returns The concrete model ID string for the provider\n *\n * Falls back to the OpenAI Codex model if the requested provider\n * doesn't have a mapping for the tier.\n */\nexport function getModelForTier(\n\ttier: ModelTier,\n\tprovider: ModelProvider = \"openai-codex\",\n): string {\n\tconst mapping = MODEL_BY_TIER[tier];\n\treturn mapping[provider] ?? mapping[\"openai-codex\"] ?? \"gpt-5.5\";\n}\n\nfunction isModelTier(model: string): model is ModelTier {\n\treturn model in MODEL_BY_TIER;\n}\n\nfunction isModelProvider(provider: string): provider is ModelProvider {\n\treturn PROVIDERS.includes(provider as ModelProvider);\n}\n\nfunction splitExplicitModel(model: string): {\n\tprovider?: ModelProvider;\n\tmodel: string;\n} {\n\tconst slashIndex = model.indexOf(\"/\");\n\tif (slashIndex <= 0) {\n\t\treturn { model };\n\t}\n\n\tconst provider = model.slice(0, slashIndex);\n\tif (!isModelProvider(provider)) {\n\t\treturn { model };\n\t}\n\n\treturn {\n\t\tprovider,\n\t\tmodel: model.slice(slashIndex + 1),\n\t};\n}\n\nfunction defaultReasoningEffort(config: ModeConfig): ReasoningEffort {\n\treturn config.reasoningEffort ?? (config.enableThinking ? \"medium\" : \"low\");\n}\n\n/**\n * Resolve the concrete model/provider a subagent should use in a mode.\n */\nexport function resolveSubagentDispatch(\n\tmode: AgentMode,\n\ttype: SubagentType,\n\tprovider: ModelProvider = \"openai-codex\",\n): ResolvedSubagentDispatch {\n\tconst config = getModeConfig(mode);\n\tconst dispatch = config.subagents?.[type];\n\tconst source: DispatchSource = dispatch ? \"mode\" : \"fallback\";\n\tconst requestedModel = dispatch?.model ?? config.primaryTier;\n\tconst reasoningEffort =\n\t\tdispatch?.reasoningEffort ?? defaultReasoningEffort(config);\n\n\tif (isModelTier(requestedModel)) {\n\t\tconst resolvedProvider = dispatch?.provider ?? provider;\n\t\treturn {\n\t\t\tmode,\n\t\t\ttype,\n\t\t\tprovider: resolvedProvider,\n\t\t\tmodel: getModelForTier(requestedModel, resolvedProvider),\n\t\t\tmodelTier: requestedModel,\n\t\t\treasoningEffort,\n\t\t\tmaxTokens: dispatch?.maxTokens,\n\t\t\ttemperature: dispatch?.temperature,\n\t\t\ttimeoutMs: dispatch?.timeoutMs,\n\t\t\tpromptTemplate: dispatch?.promptTemplate,\n\t\t\tsource,\n\t\t};\n\t}\n\n\tconst explicit = splitExplicitModel(requestedModel);\n\tconst resolvedProvider = dispatch?.provider ?? explicit.provider ?? provider;\n\treturn {\n\t\tmode,\n\t\ttype,\n\t\tprovider: resolvedProvider,\n\t\tmodel: explicit.model,\n\t\treasoningEffort,\n\t\tmaxTokens: dispatch?.maxTokens,\n\t\ttemperature: dispatch?.temperature,\n\t\ttimeoutMs: dispatch?.timeoutMs,\n\t\tpromptTemplate: dispatch?.promptTemplate,\n\t\tsource,\n\t};\n}\n\n/**\n * Get the configuration for a mode.\n */\nexport function getModeConfig(mode: AgentMode): ModeConfig {\n\treturn MODE_CONFIGS[mode];\n}\n\n/**\n * Get the recommended model for a mode and provider.\n */\nexport function getModelForMode(\n\tmode: AgentMode,\n\tprovider: ModelProvider = \"openai-codex\",\n): string {\n\tconst config = getModeConfig(mode);\n\treturn getModelForTier(config.primaryTier, provider);\n}\n\n/**\n * Current agent mode state (module-level singleton).\n *\n * This tracks the active mode for the current process. In multi-session\n * scenarios, each session should manage its own mode state rather than\n * relying on this global.\n */\nlet currentMode: AgentMode = \"smart\";\n\n/**\n * Get the current agent mode.\n *\n * @returns The currently active agent mode\n */\nexport function getCurrentMode(): AgentMode {\n\treturn currentMode;\n}\n\n/**\n * Set the current agent mode.\n *\n * This updates the global mode state and logs the transition for debugging.\n * Mode changes take effect immediately for subsequent operations.\n *\n * @param mode - The new mode to activate\n */\nexport function setCurrentMode(mode: AgentMode): void {\n\tlogger.info(\"Setting agent mode\", { mode });\n\tcurrentMode = mode;\n\tconst config = getModeConfig(mode);\n\tif (config.visible === false) {\n\t\tvoid recordStagedRolloutSurfaceUsage(\"hidden_mode_used\", {\n\t\t\tsurfaceId: `mode:${mode}`,\n\t\t\tsurfaceType: \"mode\",\n\t\t\towner: config.rolloutOwner,\n\t\t});\n\t}\n}\n\n/**\n * Parse mode from string (case-insensitive).\n *\n * Validates user input and converts to a valid AgentMode type.\n *\n * @param modeStr - User-provided mode string (e.g., \"Smart\", \"RUSH\")\n * @returns The parsed AgentMode, or null if invalid\n */\nexport function parseMode(modeStr: string): AgentMode | null {\n\tconst normalized = modeStr.toLowerCase().trim();\n\tif (normalized in MODE_CONFIGS) {\n\t\treturn normalized as AgentMode;\n\t}\n\treturn null;\n}\n\n/**\n * Get mode from environment variable.\n *\n * Reads MAESTRO_MODE from environment and validates it.\n * Defaults to \"smart\" if not set or invalid.\n *\n * @returns The configured mode or \"smart\" as default\n */\nexport function getModeFromEnv(): AgentMode {\n\tconst envMode = process.env.MAESTRO_MODE?.toLowerCase();\n\tif (envMode && envMode in MODE_CONFIGS) {\n\t\treturn envMode as AgentMode;\n\t}\n\t// Default to smart mode for best quality when not specified\n\treturn \"smart\";\n}\n\n/**\n * Format mode for display.\n */\nexport function formatModeDisplay(mode: AgentMode): string {\n\tconst config = getModeConfig(mode);\n\treturn `${config.displayName} - ${config.description}`;\n}\n\n/**\n * Get all available modes with their descriptions.\n */\nexport function getAllModes(options?: {\n\tincludeHidden?: boolean;\n}): Array<{ mode: AgentMode; config: ModeConfig }> {\n\treturn (Object.entries(MODE_CONFIGS) as [AgentMode, ModeConfig][])\n\t\t.filter(([, config]) => options?.includeHidden === true || config.visible)\n\t\t.map(([mode, config]) => ({\n\t\t\tmode,\n\t\t\tconfig,\n\t\t}));\n}\n\n/**\n * Suggest a mode based on task complexity heuristics.\n *\n * This function analyzes the task description to recommend an appropriate\n * mode based on keyword matching. It uses a scoring system to determine\n * task complexity:\n *\n * **Scoring Algorithm:**\n * 1. Count matches against complex/simple/info indicator word lists\n * 2. Compare scores to determine dominant category\n * 3. Return mode matching the highest score\n *\n * **Keyword Categories:**\n * - Complex (→ smart): refactor, architect, design, implement, build...\n * - Simple (→ rush): fix, typo, rename, update, small changes...\n * - Info (→ free): what, where, explain, find, search queries...\n *\n * @param taskDescription - The user's task description to analyze\n * @returns The recommended AgentMode based on task complexity\n *\n * @example\n * suggestMode(\"refactor the authentication module\") // → \"smart\"\n * suggestMode(\"fix typo in README\") // → \"rush\"\n * suggestMode(\"what does this function do?\") // → \"free\"\n */\nexport function suggestMode(taskDescription: string): AgentMode {\n\tconst lowerTask = taskDescription.toLowerCase();\n\n\t// Complex tasks → smart mode (require deep reasoning)\n\tconst complexIndicators = [\n\t\t\"refactor\",\n\t\t\"architect\",\n\t\t\"design\",\n\t\t\"implement\",\n\t\t\"create\",\n\t\t\"build\",\n\t\t\"complex\",\n\t\t\"system\",\n\t\t\"full\",\n\t\t\"entire\",\n\t\t\"comprehensive\",\n\t];\n\n\t// Simple tasks → rush mode (straightforward modifications)\n\tconst simpleIndicators = [\n\t\t\"fix\",\n\t\t\"typo\",\n\t\t\"simple\",\n\t\t\"quick\",\n\t\t\"small\",\n\t\t\"minor\",\n\t\t\"rename\",\n\t\t\"update\",\n\t\t\"change\",\n\t];\n\n\t// Information tasks → free mode (queries, not modifications)\n\tconst infoIndicators = [\n\t\t\"what\",\n\t\t\"where\",\n\t\t\"explain\",\n\t\t\"describe\",\n\t\t\"list\",\n\t\t\"show\",\n\t\t\"find\",\n\t\t\"search\",\n\t];\n\n\t// Calculate match scores for each category\n\tconst complexScore = complexIndicators.filter((i) =>\n\t\tlowerTask.includes(i),\n\t).length;\n\tconst simpleScore = simpleIndicators.filter((i) =>\n\t\tlowerTask.includes(i),\n\t).length;\n\tconst infoScore = infoIndicators.filter((i) => lowerTask.includes(i)).length;\n\n\t// Determine mode based on highest scoring category\n\tif (complexScore > simpleScore && complexScore > infoScore) {\n\t\treturn \"smart\";\n\t}\n\tif (infoScore > simpleScore) {\n\t\treturn \"free\";\n\t}\n\tif (simpleScore > 0) {\n\t\treturn \"rush\";\n\t}\n\n\t// Default to smart mode when no clear indicators found\n\t// (better to over-estimate complexity than under-estimate)\n\treturn \"smart\";\n}\n"]}
|
|
1
|
+
{"version":3,"file":"modes.js","sourceRoot":"","sources":["../../src/agent/modes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AAEH,OAAO,EAAE,+BAA+B,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAqB,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE3E,8DAA8D;AAC9D,MAAM,MAAM,GAAG,YAAY,CAAC,aAAa,CAAC,CAAC;AAuH3C,MAAM,SAAS,GAAoB;IAClC,WAAW;IACX,QAAQ;IACR,cAAc;IACd,QAAQ;CACR,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,YAAY,GAAkC;IAC1D,6DAA6D;IAC7D,KAAK,EAAE;QACN,WAAW,EAAE,OAAO;QACpB,WAAW,EAAE,2CAA2C;QACxD,WAAW,EAAE,MAAM;QACnB,YAAY,EAAE,QAAQ;QACtB,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,QAAQ;QACzB,cAAc,EAAE,KAAK;QACrB,kBAAkB,EAAE,IAAI;QACxB,UAAU,EAAE,CAAC;QACb,cAAc,EAAE,GAAG;QACnB,SAAS,EAAE,CAAC;QACZ,OAAO,EAAE,IAAI;QACb,SAAS,EAAE;YACV,QAAQ,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE;YACpD,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE;YACnD,KAAK,EAAE,EAAE,KAAK,EAAE,sBAAsB,EAAE,eAAe,EAAE,QAAQ,EAAE;YACnE,QAAQ,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,QAAQ,EAAE;YACxD,UAAU,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,QAAQ,EAAE;YAC1D,YAAY,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,QAAQ,EAAE;YAC5D,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE;SACnD;KACD;IACD,kDAAkD;IAClD,IAAI,EAAE;QACL,WAAW,EAAE,MAAM;QACnB,WAAW,EAAE,uCAAuC;QACpD,WAAW,EAAE,QAAQ;QACrB,YAAY,EAAE,OAAO;QACrB,cAAc,EAAE,KAAK;QACrB,eAAe,EAAE,KAAK;QACtB,cAAc,EAAE,IAAI;QACpB,kBAAkB,EAAE,KAAK;QACzB,UAAU,EAAE,CAAC;QACb,cAAc,EAAE,GAAG;QACnB,SAAS,EAAE,CAAC;QACZ,OAAO,EAAE,IAAI;QACb,SAAS,EAAE;YACV,QAAQ,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE;YACpD,OAAO,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,KAAK,EAAE;YACpD,KAAK,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,KAAK,EAAE;YAClD,QAAQ,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE;YACpD,UAAU,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE;YACtD,YAAY,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,KAAK,EAAE;YACzD,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE;SACnD;KACD;IACD,6CAA6C;IAC7C,IAAI,EAAE;QACL,WAAW,EAAE,MAAM;QACnB,WAAW,EAAE,iCAAiC;QAC9C,WAAW,EAAE,OAAO;QACpB,YAAY,EAAE,OAAO;QACrB,cAAc,EAAE,KAAK;QACrB,eAAe,EAAE,KAAK;QACtB,cAAc,EAAE,IAAI;QACpB,kBAAkB,EAAE,KAAK;QACzB,UAAU,EAAE,CAAC;QACb,cAAc,EAAE,GAAG;QACnB,SAAS,EAAE,EAAE;QACb,OAAO,EAAE,IAAI;QACb,SAAS,EAAE;YACV,QAAQ,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE;YACpD,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE;YACnD,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE;YACjD,QAAQ,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE;YACpD,UAAU,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE;YACtD,YAAY,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE;YACxD,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE;SACnD;KACD;IACD,yEAAyE;IACzE,MAAM,EAAE;QACP,WAAW,EAAE,QAAQ;QACrB,WAAW,EAAE,4BAA4B;QACzC,WAAW,EAAE,QAAQ;QACrB,YAAY,EAAE,OAAO;QACrB,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,QAAQ;QACzB,cAAc,EAAE,IAAI;QACpB,kBAAkB,EAAE,IAAI;QACxB,UAAU,EAAE,CAAC;QACb,cAAc,EAAE,GAAG;QACnB,SAAS,EAAE,CAAC;QACZ,OAAO,EAAE,IAAI;KACb;IACD,QAAQ,EAAE;QACT,WAAW,EAAE,UAAU;QACvB,WAAW,EAAE,iDAAiD;QAC9D,WAAW,EAAE,MAAM;QACnB,YAAY,EAAE,QAAQ;QACtB,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,MAAM;QACvB,cAAc,EAAE,KAAK;QACrB,kBAAkB,EAAE,IAAI;QACxB,UAAU,EAAE,CAAC;QACb,cAAc,EAAE,IAAI;QACpB,SAAS,EAAE,CAAC;QACZ,OAAO,EAAE,KAAK;QACd,SAAS,EAAE;YACV,QAAQ,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,QAAQ,EAAE;YACxD,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE;YACpD,KAAK,EAAE,EAAE,KAAK,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,EAAE;YACjE,QAAQ,EAAE,EAAE,KAAK,EAAE,sBAAsB,EAAE,eAAe,EAAE,QAAQ,EAAE;YACtE,UAAU,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,QAAQ,EAAE;YAC1D,YAAY,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,EAAE;YAC1D,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE;SACnD;QACD,YAAY,EAAE,eAAe;KAC7B;IACD,MAAM,EAAE;QACP,WAAW,EAAE,QAAQ;QACrB,WAAW,EAAE,wCAAwC;QACrD,WAAW,EAAE,OAAO;QACpB,YAAY,EAAE,OAAO;QACrB,cAAc,EAAE,KAAK;QACrB,eAAe,EAAE,KAAK;QACtB,cAAc,EAAE,CAAC;QACjB,kBAAkB,EAAE,KAAK;QACzB,UAAU,EAAE,CAAC;QACb,cAAc,EAAE,CAAC;QACjB,SAAS,EAAE,EAAE;QACb,OAAO,EAAE,KAAK;QACd,SAAS,EAAE;YACV,QAAQ,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE;YACpD,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE;YACnD,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE;YACjD,QAAQ,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE;YACpD,UAAU,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE;YACtD,YAAY,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE;YACxD,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE;SACnD;QACD,YAAY,EAAE,aAAa;KAC3B;CACD,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,aAAa,GAAoC;IAC7D,+DAA+D;IAC/D,IAAI,EAAE;QACL,SAAS,EAAE,iBAAiB;QAC5B,MAAM,EAAE,SAAS;QACjB,cAAc,EAAE,SAAS;QACzB,MAAM,EAAE,+BAA+B;KACvC;IACD,2DAA2D;IAC3D,MAAM,EAAE;QACP,SAAS,EAAE,4BAA4B;QACvC,MAAM,EAAE,QAAQ;QAChB,cAAc,EAAE,SAAS;QACzB,MAAM,EAAE,sBAAsB;KAC9B;IACD,sDAAsD;IACtD,KAAK,EAAE;QACN,SAAS,EAAE,2BAA2B;QACtC,MAAM,EAAE,aAAa;QACrB,cAAc,EAAE,cAAc;QAC9B,MAAM,EAAE,2BAA2B;KACnC;CACD,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,UAAU,eAAe,CAC9B,IAAe,EACf,WAA0B,cAAc;IAExC,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACpC,OAAO,OAAO,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,cAAc,CAAC,IAAI,SAAS,CAAC;AAClE,CAAC;AAED,SAAS,WAAW,CAAC,KAAa;IACjC,OAAO,KAAK,IAAI,aAAa,CAAC;AAC/B,CAAC;AAED,SAAS,eAAe,CAAC,QAAgB;IACxC,OAAO,SAAS,CAAC,QAAQ,CAAC,QAAyB,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAa;IAIxC,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACtC,IAAI,UAAU,IAAI,CAAC,EAAE,CAAC;QACrB,OAAO,EAAE,KAAK,EAAE,CAAC;IAClB,CAAC;IAED,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IAC5C,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC;QAChC,OAAO,EAAE,KAAK,EAAE,CAAC;IAClB,CAAC;IAED,OAAO;QACN,QAAQ;QACR,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC;KAClC,CAAC;AACH,CAAC;AAED,SAAS,sBAAsB,CAAC,MAAkB;IACjD,OAAO,MAAM,CAAC,eAAe,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAC7E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CACtC,IAAe,EACf,IAA2B,EAC3B,WAA0B,cAAc;IAExC,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,YAAY,GAAG,iBAAiB,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC;IACxD,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC,YAAY,CAAC,CAAC;IAClD,MAAM,MAAM,GAAmB,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC;IAC9D,MAAM,cAAc,GAAG,QAAQ,EAAE,KAAK,IAAI,MAAM,CAAC,WAAW,CAAC;IAC7D,MAAM,eAAe,GACpB,QAAQ,EAAE,eAAe,IAAI,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAE7D,IAAI,WAAW,CAAC,cAAc,CAAC,EAAE,CAAC;QACjC,MAAM,gBAAgB,GAAG,QAAQ,EAAE,QAAQ,IAAI,QAAQ,CAAC;QACxD,OAAO;YACN,IAAI;YACJ,IAAI,EAAE,YAAY;YAClB,QAAQ,EAAE,gBAAgB;YAC1B,KAAK,EAAE,eAAe,CAAC,cAAc,EAAE,gBAAgB,CAAC;YACxD,SAAS,EAAE,cAAc;YACzB,eAAe;YACf,SAAS,EAAE,QAAQ,EAAE,SAAS;YAC9B,WAAW,EAAE,QAAQ,EAAE,WAAW;YAClC,SAAS,EAAE,QAAQ,EAAE,SAAS;YAC9B,cAAc,EAAE,QAAQ,EAAE,cAAc;YACxC,MAAM;SACN,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,kBAAkB,CAAC,cAAc,CAAC,CAAC;IACpD,MAAM,gBAAgB,GAAG,QAAQ,EAAE,QAAQ,IAAI,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC;IAC7E,OAAO;QACN,IAAI;QACJ,IAAI,EAAE,YAAY;QAClB,QAAQ,EAAE,gBAAgB;QAC1B,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,eAAe;QACf,SAAS,EAAE,QAAQ,EAAE,SAAS;QAC9B,WAAW,EAAE,QAAQ,EAAE,WAAW;QAClC,SAAS,EAAE,QAAQ,EAAE,SAAS;QAC9B,cAAc,EAAE,QAAQ,EAAE,cAAc;QACxC,MAAM;KACN,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,IAAe;IAC5C,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC;AAC3B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAC9B,IAAe,EACf,WAA0B,cAAc;IAExC,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACnC,OAAO,eAAe,CAAC,MAAM,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;AACtD,CAAC;AAED;;;;;;GAMG;AACH,IAAI,WAAW,GAAc,OAAO,CAAC;AAErC;;;;GAIG;AACH,MAAM,UAAU,cAAc;IAC7B,OAAO,WAAW,CAAC;AACpB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAAC,IAAe;IAC7C,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,WAAW,GAAG,IAAI,CAAC;IACnB,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;QAC9B,KAAK,+BAA+B,CAAC,kBAAkB,EAAE;YACxD,SAAS,EAAE,QAAQ,IAAI,EAAE;YACzB,WAAW,EAAE,MAAM;YACnB,KAAK,EAAE,MAAM,CAAC,YAAY;SAC1B,CAAC,CAAC;IACJ,CAAC;AACF,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,SAAS,CAAC,OAAe;IACxC,MAAM,UAAU,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;IAChD,IAAI,UAAU,IAAI,YAAY,EAAE,CAAC;QAChC,OAAO,UAAuB,CAAC;IAChC,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc;IAC7B,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,WAAW,EAAE,CAAC;IACxD,IAAI,OAAO,IAAI,OAAO,IAAI,YAAY,EAAE,CAAC;QACxC,OAAO,OAAoB,CAAC;IAC7B,CAAC;IACD,4DAA4D;IAC5D,OAAO,OAAO,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAe;IAChD,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACnC,OAAO,GAAG,MAAM,CAAC,WAAW,MAAM,MAAM,CAAC,WAAW,EAAE,CAAC;AACxD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,OAE3B;IACA,OAAQ,MAAM,CAAC,OAAO,CAAC,YAAY,CAA+B;SAChE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI,IAAI,MAAM,CAAC,OAAO,CAAC;SACzE,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;QACzB,IAAI;QACJ,MAAM;KACN,CAAC,CAAC,CAAC;AACN,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,UAAU,WAAW,CAAC,eAAuB;IAClD,MAAM,SAAS,GAAG,eAAe,CAAC,WAAW,EAAE,CAAC;IAEhD,sDAAsD;IACtD,MAAM,iBAAiB,GAAG;QACzB,UAAU;QACV,WAAW;QACX,QAAQ;QACR,WAAW;QACX,QAAQ;QACR,OAAO;QACP,SAAS;QACT,QAAQ;QACR,MAAM;QACN,QAAQ;QACR,eAAe;KACf,CAAC;IAEF,2DAA2D;IAC3D,MAAM,gBAAgB,GAAG;QACxB,KAAK;QACL,MAAM;QACN,QAAQ;QACR,OAAO;QACP,OAAO;QACP,OAAO;QACP,QAAQ;QACR,QAAQ;QACR,QAAQ;KACR,CAAC;IAEF,6DAA6D;IAC7D,MAAM,cAAc,GAAG;QACtB,MAAM;QACN,OAAO;QACP,SAAS;QACT,UAAU;QACV,MAAM;QACN,MAAM;QACN,MAAM;QACN,QAAQ;KACR,CAAC;IAEF,2CAA2C;IAC3C,MAAM,YAAY,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CACnD,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CACrB,CAAC,MAAM,CAAC;IACT,MAAM,WAAW,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CACjD,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CACrB,CAAC,MAAM,CAAC;IACT,MAAM,SAAS,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAE7E,mDAAmD;IACnD,IAAI,YAAY,GAAG,WAAW,IAAI,YAAY,GAAG,SAAS,EAAE,CAAC;QAC5D,OAAO,OAAO,CAAC;IAChB,CAAC;IACD,IAAI,SAAS,GAAG,WAAW,EAAE,CAAC;QAC7B,OAAO,MAAM,CAAC;IACf,CAAC;IACD,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;QACrB,OAAO,MAAM,CAAC;IACf,CAAC;IAED,uDAAuD;IACvD,2DAA2D;IAC3D,OAAO,OAAO,CAAC;AAChB,CAAC","sourcesContent":["/**\n * Agent Modes - Different operating modes for the agent.\n *\n * This module implements a tiered model selection system inspired by Amp's\n * smart/rush/free modes. Each mode represents a different balance between\n * response quality, speed, and cost:\n *\n * - **smart**: Uses the highest capability model (opus) for complex reasoning\n * tasks. Enables thinking/reasoning mode with extended context windows.\n * Best for: Architecture decisions, complex refactoring, debugging.\n *\n * - **rush**: Uses mid-tier models (sonnet) for faster responses. Disables\n * thinking mode to reduce latency. Best for: Quick fixes, simple edits,\n * straightforward code generation.\n *\n * - **free**: Uses the most cost-effective models (haiku) with minimal\n * features. Best for: Simple questions, file searches, documentation\n * lookups where speed and cost matter more than depth.\n *\n * - **custom**: User-defined configuration allowing fine-tuned control\n * over model selection and feature toggles.\n *\n * ## Architecture\n *\n * The mode system uses a two-level abstraction:\n * 1. **ModelTier** (opus/sonnet/haiku): Logical capability levels\n * 2. **ModelMapping**: Provider-specific model IDs for each tier\n *\n * This allows the same mode configuration to work across different\n * LLM providers (Anthropic, OpenAI, Google) by mapping tiers to\n * provider-specific model identifiers.\n *\n * ## Usage\n *\n * ```typescript\n * // Set mode based on task\n * setCurrentMode(suggestMode(\"refactor the auth module\")); // → \"smart\"\n *\n * // Get model for current provider\n * const model = getModelForMode(getCurrentMode(), \"anthropic\");\n * ```\n *\n * ## Environment Variables\n *\n * - `MAESTRO_MODE`: Override the default mode at startup\n */\n\nimport { recordStagedRolloutSurfaceUsage } from \"../telemetry.js\";\nimport { createLogger } from \"../utils/logger.js\";\nimport { type SubagentType, parseSubagentType } from \"./subagent-specs.js\";\n\n// Logger scoped to agent modes for debugging mode transitions\nconst logger = createLogger(\"agent:modes\");\n\n/**\n * Available agent modes representing different quality/speed/cost tradeoffs.\n *\n * - \"smart\": Maximum capability, uses opus-class models with reasoning enabled\n * - \"rush\": Balanced speed, uses sonnet-class models without reasoning overhead\n * - \"free\": Cost-optimized, uses haiku-class models for simple operations\n * - \"custom\": User-defined settings for specialized workflows\n */\nexport type AgentMode =\n\t| \"smart\"\n\t| \"rush\"\n\t| \"free\"\n\t| \"custom\"\n\t| \"frontier\"\n\t| \"replay\";\n\n/**\n * Model tier representing capability levels that map to provider-specific models.\n *\n * The tier abstraction allows the same configuration to work across providers:\n * - \"opus\": Highest capability (claude-opus, gpt-5.2, gemini-thinking)\n * - \"sonnet\": Balanced capability (claude-sonnet, gpt-4o, gemini-flash)\n * - \"haiku\": Fast/efficient (claude-haiku, gpt-4o-mini, gemini-flash-lite)\n */\nexport type ModelTier = \"opus\" | \"sonnet\" | \"haiku\";\n\n/** Supported model providers for tier and subagent dispatch. */\nexport type ModelProvider = \"anthropic\" | \"openai\" | \"openai-codex\" | \"google\";\n\n/** Reasoning budget hint passed to subagents that support it. */\nexport type ReasoningEffort = \"low\" | \"medium\" | \"high\" | \"xhigh\";\n\n/** Where the resolved subagent dispatch came from. */\nexport type DispatchSource = \"mode\" | \"fallback\";\n\n/**\n * Per-subagent model routing override.\n *\n * `model` can be a logical model tier (`opus`, `sonnet`, `haiku`) or an\n * explicit model ID. Explicit model IDs may be provider-prefixed, for example\n * `openai-codex/gpt-5.5`.\n */\nexport interface SubagentDispatch {\n\tmodel: ModelTier | string;\n\tprovider?: ModelProvider;\n\treasoningEffort?: ReasoningEffort;\n\tmaxTokens?: number;\n\ttemperature?: number;\n\ttimeoutMs?: number;\n\tpromptTemplate?: string;\n}\n\n/** Fully resolved model routing for one subagent invocation. */\nexport interface ResolvedSubagentDispatch {\n\tmode: AgentMode;\n\ttype: SubagentType;\n\tprovider: ModelProvider;\n\tmodel: string;\n\tmodelTier?: ModelTier;\n\treasoningEffort: ReasoningEffort;\n\tmaxTokens?: number;\n\ttemperature?: number;\n\ttimeoutMs?: number;\n\tpromptTemplate?: string;\n\tsource: DispatchSource;\n}\n\n/**\n * Mode configuration that determines model selection and behavior.\n *\n * Each mode has a complete configuration that controls:\n * - Which model tier to use (primary and fallback)\n * - Whether to enable extended reasoning/thinking\n * - Context and retry limits\n * - UI hints for cost/speed display\n */\nexport interface ModeConfig {\n\t/** Display name for the mode */\n\tdisplayName: string;\n\t/** Description of what this mode does */\n\tdescription: string;\n\t/** Primary model tier to use */\n\tprimaryTier: ModelTier;\n\t/** Fallback model tier if primary is unavailable */\n\tfallbackTier: ModelTier;\n\t/** Whether to enable thinking/reasoning */\n\tenableThinking: boolean;\n\t/** Default reasoning effort for mode-level and fallback subagent routing. */\n\treasoningEffort?: ReasoningEffort;\n\t/** Maximum thinking budget (tokens) */\n\tthinkingBudget: number;\n\t/** Whether to use extended context */\n\tuseExtendedContext: boolean;\n\t/** Retry configuration */\n\tmaxRetries: number;\n\t/** Cost multiplier hint (for UI display) */\n\tcostMultiplier: number;\n\t/** Speed hint (1-10, higher is faster) */\n\tspeedHint: number;\n\t/** Whether this mode is shown in default user-facing mode lists. */\n\tvisible: boolean;\n\t/** Optional dispatch table for mode-specific subagent routing. */\n\tsubagents?: Partial<Record<SubagentType, SubagentDispatch>>;\n\t/** Owner responsible for promotion or removal when hidden. */\n\trolloutOwner?: string;\n}\n\n/**\n * Model mapping for different providers.\n */\nexport interface ModelMapping {\n\tanthropic: string;\n\topenai?: string;\n\t\"openai-codex\"?: string;\n\tgoogle?: string;\n}\n\nconst PROVIDERS: ModelProvider[] = [\n\t\"anthropic\",\n\t\"openai\",\n\t\"openai-codex\",\n\t\"google\",\n];\n\n/**\n * Default mode configurations defining the behavior of each agent mode.\n *\n * These configurations are the canonical source of truth for how each mode\n * behaves. The settings are carefully tuned based on model capabilities\n * and typical use case requirements:\n *\n * - **smart**: Full-featured for complex tasks (16k thinking budget, 3 retries)\n * - **rush**: Optimized for speed (no thinking, 2 retries, smaller context)\n * - **free**: Minimal resource usage (no thinking, 1 retry, no extended context)\n * - **custom**: Balanced defaults that users can override\n */\nexport const MODE_CONFIGS: Record<AgentMode, ModeConfig> = {\n\t// Smart mode: Maximum capability for complex reasoning tasks\n\tsmart: {\n\t\tdisplayName: \"Smart\",\n\t\tdescription: \"Best quality, uses opus for complex tasks\",\n\t\tprimaryTier: \"opus\",\n\t\tfallbackTier: \"sonnet\",\n\t\tenableThinking: true,\n\t\treasoningEffort: \"medium\",\n\t\tthinkingBudget: 16000,\n\t\tuseExtendedContext: true,\n\t\tmaxRetries: 3,\n\t\tcostMultiplier: 1.0,\n\t\tspeedHint: 5,\n\t\tvisible: true,\n\t\tsubagents: {\n\t\t\texplorer: { model: \"haiku\", reasoningEffort: \"low\" },\n\t\t\tplanner: { model: \"opus\", reasoningEffort: \"high\" },\n\t\t\tcoder: { model: \"openai-codex/gpt-5.5\", reasoningEffort: \"medium\" },\n\t\t\treviewer: { model: \"sonnet\", reasoningEffort: \"medium\" },\n\t\t\tresearcher: { model: \"sonnet\", reasoningEffort: \"medium\" },\n\t\t\t\"browser-qa\": { model: \"sonnet\", reasoningEffort: \"medium\" },\n\t\t\tminimal: { model: \"haiku\", reasoningEffort: \"low\" },\n\t\t},\n\t},\n\t// Rush mode: Speed-optimized for quick iterations\n\trush: {\n\t\tdisplayName: \"Rush\",\n\t\tdescription: \"Fast responses, uses sonnet for speed\",\n\t\tprimaryTier: \"sonnet\",\n\t\tfallbackTier: \"haiku\",\n\t\tenableThinking: false,\n\t\treasoningEffort: \"low\",\n\t\tthinkingBudget: 4000,\n\t\tuseExtendedContext: false,\n\t\tmaxRetries: 2,\n\t\tcostMultiplier: 0.5,\n\t\tspeedHint: 8,\n\t\tvisible: true,\n\t\tsubagents: {\n\t\t\texplorer: { model: \"haiku\", reasoningEffort: \"low\" },\n\t\t\tplanner: { model: \"sonnet\", reasoningEffort: \"low\" },\n\t\t\tcoder: { model: \"sonnet\", reasoningEffort: \"low\" },\n\t\t\treviewer: { model: \"haiku\", reasoningEffort: \"low\" },\n\t\t\tresearcher: { model: \"haiku\", reasoningEffort: \"low\" },\n\t\t\t\"browser-qa\": { model: \"sonnet\", reasoningEffort: \"low\" },\n\t\t\tminimal: { model: \"haiku\", reasoningEffort: \"low\" },\n\t\t},\n\t},\n\t// Free mode: Cost-optimized for simple tasks\n\tfree: {\n\t\tdisplayName: \"Free\",\n\t\tdescription: \"Most cost-effective, uses haiku\",\n\t\tprimaryTier: \"haiku\",\n\t\tfallbackTier: \"haiku\",\n\t\tenableThinking: false,\n\t\treasoningEffort: \"low\",\n\t\tthinkingBudget: 2000,\n\t\tuseExtendedContext: false,\n\t\tmaxRetries: 1,\n\t\tcostMultiplier: 0.1,\n\t\tspeedHint: 10,\n\t\tvisible: true,\n\t\tsubagents: {\n\t\t\texplorer: { model: \"haiku\", reasoningEffort: \"low\" },\n\t\t\tplanner: { model: \"haiku\", reasoningEffort: \"low\" },\n\t\t\tcoder: { model: \"haiku\", reasoningEffort: \"low\" },\n\t\t\treviewer: { model: \"haiku\", reasoningEffort: \"low\" },\n\t\t\tresearcher: { model: \"haiku\", reasoningEffort: \"low\" },\n\t\t\t\"browser-qa\": { model: \"haiku\", reasoningEffort: \"low\" },\n\t\t\tminimal: { model: \"haiku\", reasoningEffort: \"low\" },\n\t\t},\n\t},\n\t// Custom mode: User-configurable defaults (can be overridden at runtime)\n\tcustom: {\n\t\tdisplayName: \"Custom\",\n\t\tdescription: \"User-defined configuration\",\n\t\tprimaryTier: \"sonnet\",\n\t\tfallbackTier: \"haiku\",\n\t\tenableThinking: true,\n\t\treasoningEffort: \"medium\",\n\t\tthinkingBudget: 8000,\n\t\tuseExtendedContext: true,\n\t\tmaxRetries: 2,\n\t\tcostMultiplier: 0.7,\n\t\tspeedHint: 6,\n\t\tvisible: true,\n\t},\n\tfrontier: {\n\t\tdisplayName: \"Frontier\",\n\t\tdescription: \"Experimental high-capability orchestration mode\",\n\t\tprimaryTier: \"opus\",\n\t\tfallbackTier: \"sonnet\",\n\t\tenableThinking: true,\n\t\treasoningEffort: \"high\",\n\t\tthinkingBudget: 20000,\n\t\tuseExtendedContext: true,\n\t\tmaxRetries: 3,\n\t\tcostMultiplier: 1.25,\n\t\tspeedHint: 4,\n\t\tvisible: false,\n\t\tsubagents: {\n\t\t\texplorer: { model: \"sonnet\", reasoningEffort: \"medium\" },\n\t\t\tplanner: { model: \"opus\", reasoningEffort: \"xhigh\" },\n\t\t\tcoder: { model: \"openai-codex/gpt-5.5\", reasoningEffort: \"high\" },\n\t\t\treviewer: { model: \"openai-codex/gpt-5.5\", reasoningEffort: \"medium\" },\n\t\t\tresearcher: { model: \"sonnet\", reasoningEffort: \"medium\" },\n\t\t\t\"browser-qa\": { model: \"sonnet\", reasoningEffort: \"high\" },\n\t\t\tminimal: { model: \"haiku\", reasoningEffort: \"low\" },\n\t\t},\n\t\trolloutOwner: \"agent-runtime\",\n\t},\n\treplay: {\n\t\tdisplayName: \"Replay\",\n\t\tdescription: \"Deterministic scripted scenario replay\",\n\t\tprimaryTier: \"haiku\",\n\t\tfallbackTier: \"haiku\",\n\t\tenableThinking: false,\n\t\treasoningEffort: \"low\",\n\t\tthinkingBudget: 0,\n\t\tuseExtendedContext: false,\n\t\tmaxRetries: 0,\n\t\tcostMultiplier: 0,\n\t\tspeedHint: 10,\n\t\tvisible: false,\n\t\tsubagents: {\n\t\t\texplorer: { model: \"haiku\", reasoningEffort: \"low\" },\n\t\t\tplanner: { model: \"haiku\", reasoningEffort: \"low\" },\n\t\t\tcoder: { model: \"haiku\", reasoningEffort: \"low\" },\n\t\t\treviewer: { model: \"haiku\", reasoningEffort: \"low\" },\n\t\t\tresearcher: { model: \"haiku\", reasoningEffort: \"low\" },\n\t\t\t\"browser-qa\": { model: \"haiku\", reasoningEffort: \"low\" },\n\t\t\tminimal: { model: \"haiku\", reasoningEffort: \"low\" },\n\t\t},\n\t\trolloutOwner: \"agent-evals\",\n\t},\n};\n\n/**\n * Model mappings by tier for each provider.\n *\n * This lookup table maps abstract capability tiers to concrete model IDs\n * for each supported LLM provider. When adding new providers or updating\n * model versions, update this table to maintain consistent tier behavior.\n *\n * Note: Model IDs include version dates to ensure reproducibility.\n * Update these periodically as providers release improved versions.\n */\nexport const MODEL_BY_TIER: Record<ModelTier, ModelMapping> = {\n\t// Opus tier: Highest capability models with advanced reasoning\n\topus: {\n\t\tanthropic: \"claude-opus-4-6\",\n\t\topenai: \"gpt-5.2\",\n\t\t\"openai-codex\": \"gpt-5.5\",\n\t\tgoogle: \"gemini-2.0-flash-thinking-exp\",\n\t},\n\t// Sonnet tier: Balanced performance models for general use\n\tsonnet: {\n\t\tanthropic: \"claude-sonnet-4-5-20250929\",\n\t\topenai: \"gpt-4o\",\n\t\t\"openai-codex\": \"gpt-5.4\",\n\t\tgoogle: \"gemini-2.0-flash-exp\",\n\t},\n\t// Haiku tier: Fast, efficient models for simple tasks\n\thaiku: {\n\t\tanthropic: \"claude-haiku-4-5-20251001\",\n\t\topenai: \"gpt-4o-mini\",\n\t\t\"openai-codex\": \"gpt-5.4-mini\",\n\t\tgoogle: \"gemini-2.0-flash-lite-exp\",\n\t},\n};\n\n/**\n * Get the model ID for a given tier and provider.\n *\n * @param tier - The capability tier (opus/sonnet/haiku)\n * @param provider - The LLM provider (defaults to openai-codex)\n * @returns The concrete model ID string for the provider\n *\n * Falls back to the OpenAI Codex model if the requested provider\n * doesn't have a mapping for the tier.\n */\nexport function getModelForTier(\n\ttier: ModelTier,\n\tprovider: ModelProvider = \"openai-codex\",\n): string {\n\tconst mapping = MODEL_BY_TIER[tier];\n\treturn mapping[provider] ?? mapping[\"openai-codex\"] ?? \"gpt-5.5\";\n}\n\nfunction isModelTier(model: string): model is ModelTier {\n\treturn model in MODEL_BY_TIER;\n}\n\nfunction isModelProvider(provider: string): provider is ModelProvider {\n\treturn PROVIDERS.includes(provider as ModelProvider);\n}\n\nfunction splitExplicitModel(model: string): {\n\tprovider?: ModelProvider;\n\tmodel: string;\n} {\n\tconst slashIndex = model.indexOf(\"/\");\n\tif (slashIndex <= 0) {\n\t\treturn { model };\n\t}\n\n\tconst provider = model.slice(0, slashIndex);\n\tif (!isModelProvider(provider)) {\n\t\treturn { model };\n\t}\n\n\treturn {\n\t\tprovider,\n\t\tmodel: model.slice(slashIndex + 1),\n\t};\n}\n\nfunction defaultReasoningEffort(config: ModeConfig): ReasoningEffort {\n\treturn config.reasoningEffort ?? (config.enableThinking ? \"medium\" : \"low\");\n}\n\n/**\n * Resolve the concrete model/provider a subagent should use in a mode.\n */\nexport function resolveSubagentDispatch(\n\tmode: AgentMode,\n\ttype: SubagentType | string,\n\tprovider: ModelProvider = \"openai-codex\",\n): ResolvedSubagentDispatch {\n\tconst config = getModeConfig(mode);\n\tconst resolvedType = parseSubagentType(type) ?? \"coder\";\n\tconst dispatch = config.subagents?.[resolvedType];\n\tconst source: DispatchSource = dispatch ? \"mode\" : \"fallback\";\n\tconst requestedModel = dispatch?.model ?? config.primaryTier;\n\tconst reasoningEffort =\n\t\tdispatch?.reasoningEffort ?? defaultReasoningEffort(config);\n\n\tif (isModelTier(requestedModel)) {\n\t\tconst resolvedProvider = dispatch?.provider ?? provider;\n\t\treturn {\n\t\t\tmode,\n\t\t\ttype: resolvedType,\n\t\t\tprovider: resolvedProvider,\n\t\t\tmodel: getModelForTier(requestedModel, resolvedProvider),\n\t\t\tmodelTier: requestedModel,\n\t\t\treasoningEffort,\n\t\t\tmaxTokens: dispatch?.maxTokens,\n\t\t\ttemperature: dispatch?.temperature,\n\t\t\ttimeoutMs: dispatch?.timeoutMs,\n\t\t\tpromptTemplate: dispatch?.promptTemplate,\n\t\t\tsource,\n\t\t};\n\t}\n\n\tconst explicit = splitExplicitModel(requestedModel);\n\tconst resolvedProvider = dispatch?.provider ?? explicit.provider ?? provider;\n\treturn {\n\t\tmode,\n\t\ttype: resolvedType,\n\t\tprovider: resolvedProvider,\n\t\tmodel: explicit.model,\n\t\treasoningEffort,\n\t\tmaxTokens: dispatch?.maxTokens,\n\t\ttemperature: dispatch?.temperature,\n\t\ttimeoutMs: dispatch?.timeoutMs,\n\t\tpromptTemplate: dispatch?.promptTemplate,\n\t\tsource,\n\t};\n}\n\n/**\n * Get the configuration for a mode.\n */\nexport function getModeConfig(mode: AgentMode): ModeConfig {\n\treturn MODE_CONFIGS[mode];\n}\n\n/**\n * Get the recommended model for a mode and provider.\n */\nexport function getModelForMode(\n\tmode: AgentMode,\n\tprovider: ModelProvider = \"openai-codex\",\n): string {\n\tconst config = getModeConfig(mode);\n\treturn getModelForTier(config.primaryTier, provider);\n}\n\n/**\n * Current agent mode state (module-level singleton).\n *\n * This tracks the active mode for the current process. In multi-session\n * scenarios, each session should manage its own mode state rather than\n * relying on this global.\n */\nlet currentMode: AgentMode = \"smart\";\n\n/**\n * Get the current agent mode.\n *\n * @returns The currently active agent mode\n */\nexport function getCurrentMode(): AgentMode {\n\treturn currentMode;\n}\n\n/**\n * Set the current agent mode.\n *\n * This updates the global mode state and logs the transition for debugging.\n * Mode changes take effect immediately for subsequent operations.\n *\n * @param mode - The new mode to activate\n */\nexport function setCurrentMode(mode: AgentMode): void {\n\tlogger.info(\"Setting agent mode\", { mode });\n\tcurrentMode = mode;\n\tconst config = getModeConfig(mode);\n\tif (config.visible === false) {\n\t\tvoid recordStagedRolloutSurfaceUsage(\"hidden_mode_used\", {\n\t\t\tsurfaceId: `mode:${mode}`,\n\t\t\tsurfaceType: \"mode\",\n\t\t\towner: config.rolloutOwner,\n\t\t});\n\t}\n}\n\n/**\n * Parse mode from string (case-insensitive).\n *\n * Validates user input and converts to a valid AgentMode type.\n *\n * @param modeStr - User-provided mode string (e.g., \"Smart\", \"RUSH\")\n * @returns The parsed AgentMode, or null if invalid\n */\nexport function parseMode(modeStr: string): AgentMode | null {\n\tconst normalized = modeStr.toLowerCase().trim();\n\tif (normalized in MODE_CONFIGS) {\n\t\treturn normalized as AgentMode;\n\t}\n\treturn null;\n}\n\n/**\n * Get mode from environment variable.\n *\n * Reads MAESTRO_MODE from environment and validates it.\n * Defaults to \"smart\" if not set or invalid.\n *\n * @returns The configured mode or \"smart\" as default\n */\nexport function getModeFromEnv(): AgentMode {\n\tconst envMode = process.env.MAESTRO_MODE?.toLowerCase();\n\tif (envMode && envMode in MODE_CONFIGS) {\n\t\treturn envMode as AgentMode;\n\t}\n\t// Default to smart mode for best quality when not specified\n\treturn \"smart\";\n}\n\n/**\n * Format mode for display.\n */\nexport function formatModeDisplay(mode: AgentMode): string {\n\tconst config = getModeConfig(mode);\n\treturn `${config.displayName} - ${config.description}`;\n}\n\n/**\n * Get all available modes with their descriptions.\n */\nexport function getAllModes(options?: {\n\tincludeHidden?: boolean;\n}): Array<{ mode: AgentMode; config: ModeConfig }> {\n\treturn (Object.entries(MODE_CONFIGS) as [AgentMode, ModeConfig][])\n\t\t.filter(([, config]) => options?.includeHidden === true || config.visible)\n\t\t.map(([mode, config]) => ({\n\t\t\tmode,\n\t\t\tconfig,\n\t\t}));\n}\n\n/**\n * Suggest a mode based on task complexity heuristics.\n *\n * This function analyzes the task description to recommend an appropriate\n * mode based on keyword matching. It uses a scoring system to determine\n * task complexity:\n *\n * **Scoring Algorithm:**\n * 1. Count matches against complex/simple/info indicator word lists\n * 2. Compare scores to determine dominant category\n * 3. Return mode matching the highest score\n *\n * **Keyword Categories:**\n * - Complex (→ smart): refactor, architect, design, implement, build...\n * - Simple (→ rush): fix, typo, rename, update, small changes...\n * - Info (→ free): what, where, explain, find, search queries...\n *\n * @param taskDescription - The user's task description to analyze\n * @returns The recommended AgentMode based on task complexity\n *\n * @example\n * suggestMode(\"refactor the authentication module\") // → \"smart\"\n * suggestMode(\"fix typo in README\") // → \"rush\"\n * suggestMode(\"what does this function do?\") // → \"free\"\n */\nexport function suggestMode(taskDescription: string): AgentMode {\n\tconst lowerTask = taskDescription.toLowerCase();\n\n\t// Complex tasks → smart mode (require deep reasoning)\n\tconst complexIndicators = [\n\t\t\"refactor\",\n\t\t\"architect\",\n\t\t\"design\",\n\t\t\"implement\",\n\t\t\"create\",\n\t\t\"build\",\n\t\t\"complex\",\n\t\t\"system\",\n\t\t\"full\",\n\t\t\"entire\",\n\t\t\"comprehensive\",\n\t];\n\n\t// Simple tasks → rush mode (straightforward modifications)\n\tconst simpleIndicators = [\n\t\t\"fix\",\n\t\t\"typo\",\n\t\t\"simple\",\n\t\t\"quick\",\n\t\t\"small\",\n\t\t\"minor\",\n\t\t\"rename\",\n\t\t\"update\",\n\t\t\"change\",\n\t];\n\n\t// Information tasks → free mode (queries, not modifications)\n\tconst infoIndicators = [\n\t\t\"what\",\n\t\t\"where\",\n\t\t\"explain\",\n\t\t\"describe\",\n\t\t\"list\",\n\t\t\"show\",\n\t\t\"find\",\n\t\t\"search\",\n\t];\n\n\t// Calculate match scores for each category\n\tconst complexScore = complexIndicators.filter((i) =>\n\t\tlowerTask.includes(i),\n\t).length;\n\tconst simpleScore = simpleIndicators.filter((i) =>\n\t\tlowerTask.includes(i),\n\t).length;\n\tconst infoScore = infoIndicators.filter((i) => lowerTask.includes(i)).length;\n\n\t// Determine mode based on highest scoring category\n\tif (complexScore > simpleScore && complexScore > infoScore) {\n\t\treturn \"smart\";\n\t}\n\tif (infoScore > simpleScore) {\n\t\treturn \"free\";\n\t}\n\tif (simpleScore > 0) {\n\t\treturn \"rush\";\n\t}\n\n\t// Default to smart mode when no clear indicators found\n\t// (better to over-estimate complexity than under-estimate)\n\treturn \"smart\";\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex-app-server.d.ts","sourceRoot":"","sources":["../../../src/agent/providers/codex-app-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAEN,KAAK,wBAAwB,EAK7B,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"codex-app-server.d.ts","sourceRoot":"","sources":["../../../src/agent/providers/codex-app-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAEN,KAAK,wBAAwB,EAK7B,MAAM,kCAAkC,CAAC;AAa1C,OAAO,KAAK,EAGX,qBAAqB,EACrB,OAAO,EAGP,KAAK,EACL,eAAe,EACf,aAAa,EAKb,MAAM,aAAa,CAAC;AAGrB,MAAM,WAAW,6BAA8B,SAAQ,aAAa;IACnE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,gBAAgB,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,GAAG,IAAI,CAAC;IAC1D,oBAAoB,CAAC,EAAE,wBAAwB,CAAC;IAChD,2BAA2B,CAAC,EAAE,MAC3B,wBAAwB,GACxB,OAAO,CAAC,wBAAwB,CAAC,CAAC;IACrC,aAAa,CAAC,EAAE,MAAM,CAAC;CACvB;AAqED,wBAAuB,oBAAoB,CAC1C,KAAK,EAAE,KAAK,CAAC,yBAAyB,CAAC,EACvC,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,6BAA6B,GACpC,cAAc,CAAC,qBAAqB,EAAE,IAAI,EAAE,OAAO,CAAC,CA+QtD"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { createCodexAppServerClient, } from "../../codex/app-server-client.js";
|
|
2
2
|
import { compileCodexDynamicToolSpecs, createCodexDynamicToolNameMap, } from "../../codex/compatibility.js";
|
|
3
3
|
import { CODEX_SUBAGENT_WORK_GRAPH_SCHEMA, CODEX_THREAD_CHILD_RUN_PREFIX, canonicalCodexSubagentTool, } from "../../codex/subagent-workgraph.js";
|
|
4
|
+
import { isRecord } from "../../utils/json.js";
|
|
4
5
|
import { sanitizeSurrogates } from "./sanitize-unicode.js";
|
|
5
6
|
const DEFAULT_TURN_TIMEOUT_MS = 30 * 60_000;
|
|
6
7
|
export async function* streamCodexAppServer(model, context, options) {
|
|
@@ -782,7 +783,4 @@ function createAbortError(message) {
|
|
|
782
783
|
function isAbortError(error) {
|
|
783
784
|
return error instanceof Error && error.name === "AbortError";
|
|
784
785
|
}
|
|
785
|
-
function isRecord(value) {
|
|
786
|
-
return Boolean(value && typeof value === "object" && !Array.isArray(value));
|
|
787
|
-
}
|
|
788
786
|
//# sourceMappingURL=codex-app-server.js.map
|