@evalops/maestro 0.10.50 → 0.10.51
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent/agent-outcome.d.ts +54 -0
- package/dist/agent/agent-outcome.d.ts.map +1 -0
- package/dist/agent/agent-outcome.js +142 -0
- package/dist/agent/agent-outcome.js.map +1 -0
- package/dist/agent/agent-resume.d.ts.map +1 -1
- package/dist/agent/agent-resume.js +3 -3
- package/dist/agent/agent-resume.js.map +1 -1
- package/dist/agent/agent-run-summary.d.ts +37 -0
- package/dist/agent/agent-run-summary.d.ts.map +1 -0
- package/dist/agent/agent-run-summary.js +15 -0
- package/dist/agent/agent-run-summary.js.map +1 -0
- package/dist/agent/agent-work-board.d.ts +82 -0
- package/dist/agent/agent-work-board.d.ts.map +1 -0
- package/dist/agent/agent-work-board.js +312 -0
- package/dist/agent/agent-work-board.js.map +1 -0
- package/dist/agent/auto-compaction.d.ts +7 -2
- package/dist/agent/auto-compaction.d.ts.map +1 -1
- package/dist/agent/auto-compaction.js +23 -10
- package/dist/agent/auto-compaction.js.map +1 -1
- package/dist/agent/mission-artifacts.d.ts +62 -0
- package/dist/agent/mission-artifacts.d.ts.map +1 -0
- package/dist/agent/mission-artifacts.js +438 -0
- package/dist/agent/mission-artifacts.js.map +1 -0
- package/dist/agent/mission-manifest.d.ts +139 -3
- package/dist/agent/mission-manifest.d.ts.map +1 -1
- package/dist/agent/mission-manifest.js +549 -3
- package/dist/agent/mission-manifest.js.map +1 -1
- package/dist/agent/mission-store.d.ts +80 -0
- package/dist/agent/mission-store.d.ts.map +1 -0
- package/dist/agent/mission-store.js +603 -0
- package/dist/agent/mission-store.js.map +1 -0
- package/dist/agent/modes.d.ts +2 -2
- package/dist/agent/modes.d.ts.map +1 -1
- package/dist/agent/modes.js +10 -3
- package/dist/agent/modes.js.map +1 -1
- package/dist/agent/providers/codex-app-server.d.ts.map +1 -1
- package/dist/agent/providers/codex-app-server.js +1 -3
- package/dist/agent/providers/codex-app-server.js.map +1 -1
- package/dist/agent/providers/google-gemini-cli.js +203 -107
- package/dist/agent/providers/google.js +100 -41
- package/dist/agent/providers/scripted.d.ts.map +1 -1
- package/dist/agent/providers/scripted.js +1 -3
- package/dist/agent/providers/scripted.js.map +1 -1
- package/dist/agent/providers/validation.d.ts.map +1 -1
- package/dist/agent/providers/validation.js +1 -3
- package/dist/agent/providers/validation.js.map +1 -1
- package/dist/agent/providers/vertex.js +203 -107
- package/dist/agent/snapshot-store.d.ts +32 -0
- package/dist/agent/snapshot-store.d.ts.map +1 -0
- package/dist/agent/snapshot-store.js +195 -0
- package/dist/agent/snapshot-store.js.map +1 -0
- package/dist/agent/specialist-profiles.d.ts +36 -0
- package/dist/agent/specialist-profiles.d.ts.map +1 -0
- package/dist/agent/specialist-profiles.js +159 -0
- package/dist/agent/specialist-profiles.js.map +1 -0
- package/dist/agent/subagent-specs.d.ts +4 -1
- package/dist/agent/subagent-specs.d.ts.map +1 -1
- package/dist/agent/subagent-specs.js +81 -8
- package/dist/agent/subagent-specs.js.map +1 -1
- package/dist/agent/swarm/coverage-gate.d.ts +37 -0
- package/dist/agent/swarm/coverage-gate.d.ts.map +1 -0
- package/dist/agent/swarm/coverage-gate.js +48 -0
- package/dist/agent/swarm/coverage-gate.js.map +1 -0
- package/dist/agent/swarm/executor.d.ts +1 -0
- package/dist/agent/swarm/executor.d.ts.map +1 -1
- package/dist/agent/swarm/executor.js +151 -15
- package/dist/agent/swarm/executor.js.map +1 -1
- package/dist/agent/swarm/orchestrator-prompt.d.ts +25 -0
- package/dist/agent/swarm/orchestrator-prompt.d.ts.map +1 -0
- package/dist/agent/swarm/orchestrator-prompt.js +48 -0
- package/dist/agent/swarm/orchestrator-prompt.js.map +1 -0
- package/dist/agent/swarm/plan-parser.d.ts.map +1 -1
- package/dist/agent/swarm/plan-parser.js +27 -2
- package/dist/agent/swarm/plan-parser.js.map +1 -1
- package/dist/agent/swarm/types.d.ts +17 -0
- package/dist/agent/swarm/types.d.ts.map +1 -1
- package/dist/agent/swarm/types.js.map +1 -1
- package/dist/agent/swarm/validation-directive.d.ts +21 -0
- package/dist/agent/swarm/validation-directive.d.ts.map +1 -0
- package/dist/agent/swarm/validation-directive.js +25 -0
- package/dist/agent/swarm/validation-directive.js.map +1 -0
- package/dist/agent/transport/tool-execution-bridge.d.ts.map +1 -1
- package/dist/agent/transport/tool-execution-bridge.js +4 -1
- package/dist/agent/transport/tool-execution-bridge.js.map +1 -1
- package/dist/api/enterprise-routes.d.ts.map +1 -1
- package/dist/api/enterprise-routes.js +87 -10
- package/dist/api/enterprise-routes.js.map +1 -1
- package/dist/api/org-settings-merge.d.ts +12 -0
- package/dist/api/org-settings-merge.d.ts.map +1 -0
- package/dist/api/org-settings-merge.js +38 -0
- package/dist/api/org-settings-merge.js.map +1 -0
- package/dist/api/user-settings-merge.d.ts +16 -0
- package/dist/api/user-settings-merge.d.ts.map +1 -0
- package/dist/api/user-settings-merge.js +37 -0
- package/dist/api/user-settings-merge.js.map +1 -0
- package/dist/app-server/daemon-lifecycle-api.d.ts.map +1 -1
- package/dist/app-server/daemon-lifecycle-api.js +1 -3
- package/dist/app-server/daemon-lifecycle-api.js.map +1 -1
- package/dist/app-server/external-agent-import-api.d.ts.map +1 -1
- package/dist/app-server/external-agent-import-api.js +1 -3
- package/dist/app-server/external-agent-import-api.js.map +1 -1
- package/dist/app-server/network-governance-api.d.ts.map +1 -1
- package/dist/app-server/network-governance-api.js +1 -3
- package/dist/app-server/network-governance-api.js.map +1 -1
- package/dist/app-server/plugin-bundle-api.d.ts.map +1 -1
- package/dist/app-server/plugin-bundle-api.js +1 -3
- package/dist/app-server/plugin-bundle-api.js.map +1 -1
- package/dist/app-server/policy-control-api.d.ts.map +1 -1
- package/dist/app-server/policy-control-api.js +1 -3
- package/dist/app-server/policy-control-api.js.map +1 -1
- package/dist/app-server/protocol-modes-api.d.ts.map +1 -1
- package/dist/app-server/protocol-modes-api.js +1 -3
- package/dist/app-server/protocol-modes-api.js.map +1 -1
- package/dist/cli/args.d.ts +2 -0
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +15 -0
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/commands/a2a.d.ts.map +1 -1
- package/dist/cli/commands/a2a.js +1 -3
- package/dist/cli/commands/a2a.js.map +1 -1
- package/dist/cli/commands/agents.d.ts +4 -0
- package/dist/cli/commands/agents.d.ts.map +1 -1
- package/dist/cli/commands/agents.js +149 -0
- package/dist/cli/commands/agents.js.map +1 -1
- package/dist/cli/commands/mission.d.ts +4 -0
- package/dist/cli/commands/mission.d.ts.map +1 -0
- package/dist/cli/commands/mission.js +196 -0
- package/dist/cli/commands/mission.js.map +1 -0
- package/dist/cli/commands/value.d.ts +10 -0
- package/dist/cli/commands/value.d.ts.map +1 -0
- package/dist/cli/commands/value.js +33 -0
- package/dist/cli/commands/value.js.map +1 -0
- package/dist/cli/headless-protocol.d.ts.map +1 -1
- package/dist/cli/headless-protocol.js +1 -3
- package/dist/cli/headless-protocol.js.map +1 -1
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/help.js +10 -0
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/system-prompt.d.ts.map +1 -1
- package/dist/cli/system-prompt.js +38 -7
- package/dist/cli/system-prompt.js.map +1 -1
- package/dist/cli-runtime.js +7756 -2800
- package/dist/cli-tui/client-tools/client-tool-controller.d.ts.map +1 -1
- package/dist/cli-tui/client-tools/client-tool-controller.js +1 -3
- package/dist/cli-tui/client-tools/client-tool-controller.js.map +1 -1
- package/dist/cli-tui/commands/undo-handlers.d.ts.map +1 -1
- package/dist/cli-tui/commands/undo-handlers.js +7 -2
- package/dist/cli-tui/commands/undo-handlers.js.map +1 -1
- package/dist/cli-tui/tui-renderer/skills-controller.d.ts +3 -0
- package/dist/cli-tui/tui-renderer/skills-controller.d.ts.map +1 -1
- package/dist/cli-tui/tui-renderer/skills-controller.js +77 -33
- package/dist/cli-tui/tui-renderer/skills-controller.js.map +1 -1
- package/dist/codex/app-server-client.d.ts.map +1 -1
- package/dist/codex/app-server-client.js +1 -3
- package/dist/codex/app-server-client.js.map +1 -1
- package/dist/codex/compatibility.d.ts.map +1 -1
- package/dist/codex/compatibility.js +1 -3
- package/dist/codex/compatibility.js.map +1 -1
- package/dist/codex/subagent-dispatch-table.d.ts +8 -0
- package/dist/codex/subagent-dispatch-table.d.ts.map +1 -1
- package/dist/codex/subagent-dispatch-table.js +23 -0
- package/dist/codex/subagent-dispatch-table.js.map +1 -1
- package/dist/context/manifest.d.ts.map +1 -1
- package/dist/context/manifest.js +1 -3
- package/dist/context/manifest.js.map +1 -1
- package/dist/conversation/render-model.d.ts +0 -36
- package/dist/conversation/render-model.d.ts.map +1 -1
- package/dist/conversation/render-model.js +1 -3
- package/dist/conversation/render-model.js.map +1 -1
- package/dist/customer-value/ambient-learning.d.ts +75 -0
- package/dist/customer-value/ambient-learning.d.ts.map +1 -0
- package/dist/customer-value/ambient-learning.js +472 -0
- package/dist/customer-value/ambient-learning.js.map +1 -0
- package/dist/customer-value/internal-helpers.d.ts +13 -0
- package/dist/customer-value/internal-helpers.d.ts.map +1 -0
- package/dist/customer-value/internal-helpers.js +70 -0
- package/dist/customer-value/internal-helpers.js.map +1 -0
- package/dist/customer-value/report.d.ts +282 -0
- package/dist/customer-value/report.d.ts.map +1 -0
- package/dist/customer-value/report.js +2085 -0
- package/dist/customer-value/report.js.map +1 -0
- package/dist/db/schema.d.ts +5 -1
- package/dist/db/schema.d.ts.map +1 -1
- package/dist/db/schema.js.map +1 -1
- package/dist/evalops/agent-bootstrap.d.ts.map +1 -1
- package/dist/evalops/agent-bootstrap.js +1 -3
- package/dist/evalops/agent-bootstrap.js.map +1 -1
- package/dist/evalops/agent-mcp-metadata.d.ts.map +1 -1
- package/dist/evalops/agent-mcp-metadata.js +1 -3
- package/dist/evalops/agent-mcp-metadata.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/installers/maestro-review-workflow.d.ts +38 -0
- package/dist/installers/maestro-review-workflow.d.ts.map +1 -0
- package/dist/installers/maestro-review-workflow.js +163 -0
- package/dist/installers/maestro-review-workflow.js.map +1 -0
- package/dist/load-env.d.ts.map +1 -1
- package/dist/load-env.js +2 -1
- package/dist/load-env.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +92 -3
- package/dist/main.js.map +1 -1
- package/dist/mcp/config.d.ts.map +1 -1
- package/dist/mcp/config.js +1 -3
- package/dist/mcp/config.js.map +1 -1
- package/dist/mcp/elicitation.d.ts.map +1 -1
- package/dist/mcp/elicitation.js +1 -3
- package/dist/mcp/elicitation.js.map +1 -1
- package/dist/mcp/official-registry.d.ts.map +1 -1
- package/dist/mcp/official-registry.js +1 -3
- package/dist/mcp/official-registry.js.map +1 -1
- package/dist/mcp/workspace-trust.d.ts.map +1 -1
- package/dist/mcp/workspace-trust.js +1 -3
- package/dist/mcp/workspace-trust.js.map +1 -1
- package/dist/memory/service-client.d.ts.map +1 -1
- package/dist/memory/service-client.js +1 -3
- package/dist/memory/service-client.js.map +1 -1
- package/dist/models/config-loader.d.ts.map +1 -1
- package/dist/models/config-loader.js +1 -3
- package/dist/models/config-loader.js.map +1 -1
- package/dist/node_modules/@evalops/contracts/dist/index.d.ts +1 -0
- package/dist/node_modules/@evalops/contracts/dist/index.d.ts.map +1 -1
- package/dist/node_modules/@evalops/contracts/dist/index.js +1 -0
- package/dist/node_modules/@evalops/contracts/dist/index.js.map +1 -1
- package/dist/node_modules/@evalops/contracts/dist/maestro-settings.d.ts +61 -0
- package/dist/node_modules/@evalops/contracts/dist/maestro-settings.d.ts.map +1 -0
- package/dist/node_modules/@evalops/contracts/dist/maestro-settings.js +183 -0
- package/dist/node_modules/@evalops/contracts/dist/maestro-settings.js.map +1 -0
- package/dist/node_modules/@evalops/contracts/package.json +1 -1
- package/dist/node_modules/@evalops/tui/package.json +1 -1
- package/dist/oauth/connectors.d.ts.map +1 -1
- package/dist/oauth/connectors.js +1 -3
- package/dist/oauth/connectors.js.map +1 -1
- package/dist/oauth/evalops.d.ts.map +1 -1
- package/dist/oauth/evalops.js +1 -3
- package/dist/oauth/evalops.js.map +1 -1
- package/dist/platform/a2a-client.d.ts.map +1 -1
- package/dist/platform/a2a-client.js +1 -3
- package/dist/platform/a2a-client.js.map +1 -1
- package/dist/platform/a2a-cockpit.d.ts +1 -0
- package/dist/platform/a2a-cockpit.d.ts.map +1 -1
- package/dist/platform/a2a-cockpit.js +42 -11
- package/dist/platform/a2a-cockpit.js.map +1 -1
- package/dist/platform/a2a-completion-audit.d.ts +1 -1
- package/dist/platform/a2a-completion-audit.d.ts.map +1 -1
- package/dist/platform/a2a-completion-audit.js +7 -11
- package/dist/platform/a2a-completion-audit.js.map +1 -1
- package/dist/platform/a2a-maestro-peer.js +16 -0
- package/dist/platform/a2a-maestro-peer.js.map +1 -1
- package/dist/platform/a2a-peer-pairing.d.ts.map +1 -1
- package/dist/platform/a2a-peer-pairing.js +1 -3
- package/dist/platform/a2a-peer-pairing.js.map +1 -1
- package/dist/platform/a2a-peer-registry.d.ts.map +1 -1
- package/dist/platform/a2a-peer-registry.js +1 -3
- package/dist/platform/a2a-peer-registry.js.map +1 -1
- package/dist/platform/a2a-task-ledger.d.ts +20 -0
- package/dist/platform/a2a-task-ledger.d.ts.map +1 -1
- package/dist/platform/a2a-task-ledger.js +207 -11
- package/dist/platform/a2a-task-ledger.js.map +1 -1
- package/dist/platform/a2a-work-graph.d.ts.map +1 -1
- package/dist/platform/a2a-work-graph.js +1 -3
- package/dist/platform/a2a-work-graph.js.map +1 -1
- package/dist/platform/operating-layer.d.ts.map +1 -1
- package/dist/platform/operating-layer.js +14 -8
- package/dist/platform/operating-layer.js.map +1 -1
- package/dist/platform/tool-execution-client.d.ts.map +1 -1
- package/dist/platform/tool-execution-client.js +19 -2
- package/dist/platform/tool-execution-client.js.map +1 -1
- package/dist/providers/auth.d.ts.map +1 -1
- package/dist/providers/auth.js +1 -3
- package/dist/providers/auth.js.map +1 -1
- package/dist/runtime/env.d.ts +9 -1
- package/dist/runtime/env.d.ts.map +1 -1
- package/dist/runtime/env.js +63 -1
- package/dist/runtime/env.js.map +1 -1
- package/dist/safety/policy.d.ts.map +1 -1
- package/dist/safety/policy.js +1 -4
- package/dist/safety/policy.js.map +1 -1
- package/dist/sandbox/docker-sandbox.d.ts.map +1 -1
- package/dist/sandbox/docker-sandbox.js +6 -1
- package/dist/sandbox/docker-sandbox.js.map +1 -1
- package/dist/server/handlers/hosted-runner-drain.d.ts.map +1 -1
- package/dist/server/handlers/hosted-runner-drain.js +1 -3
- package/dist/server/handlers/hosted-runner-drain.js.map +1 -1
- package/dist/server/handlers/platform-a2a-push.d.ts.map +1 -1
- package/dist/server/handlers/platform-a2a-push.js +53 -2
- package/dist/server/handlers/platform-a2a-push.js.map +1 -1
- package/dist/server/handlers/runtime-app-server-ws.d.ts.map +1 -1
- package/dist/server/handlers/runtime-app-server-ws.js +1 -3
- package/dist/server/handlers/runtime-app-server-ws.js.map +1 -1
- package/dist/server/headless-runtime-service.d.ts +16 -0
- package/dist/server/headless-runtime-service.d.ts.map +1 -1
- package/dist/server/headless-runtime-service.js +232 -206
- package/dist/server/headless-runtime-service.js.map +1 -1
- package/dist/server/hosted-agent-runtime-progress.d.ts.map +1 -1
- package/dist/server/hosted-agent-runtime-progress.js +12 -3
- package/dist/server/hosted-agent-runtime-progress.js.map +1 -1
- package/dist/server/pending-request-payload.d.ts.map +1 -1
- package/dist/server/pending-request-payload.js +1 -3
- package/dist/server/pending-request-payload.js.map +1 -1
- package/dist/server/route-auth.d.ts.map +1 -1
- package/dist/server/route-auth.js +2 -0
- package/dist/server/route-auth.js.map +1 -1
- package/dist/server/session-serialization.d.ts.map +1 -1
- package/dist/server/session-serialization.js +1 -3
- package/dist/server/session-serialization.js.map +1 -1
- package/dist/services/compliance/normalize.d.ts.map +1 -1
- package/dist/services/compliance/normalize.js +1 -3
- package/dist/services/compliance/normalize.js.map +1 -1
- package/dist/services/intelligent-router/normalize.d.ts.map +1 -1
- package/dist/services/intelligent-router/normalize.js +1 -3
- package/dist/services/intelligent-router/normalize.js.map +1 -1
- package/dist/services/revenue-attribution/normalize.d.ts.map +1 -1
- package/dist/services/revenue-attribution/normalize.js +1 -3
- package/dist/services/revenue-attribution/normalize.js.map +1 -1
- package/dist/services/traces/normalize.d.ts.map +1 -1
- package/dist/services/traces/normalize.js +1 -3
- package/dist/services/traces/normalize.js.map +1 -1
- package/dist/services/workspace-config/normalize.d.ts.map +1 -1
- package/dist/services/workspace-config/normalize.js +1 -3
- package/dist/services/workspace-config/normalize.js.map +1 -1
- package/dist/skills/composer.d.ts.map +1 -1
- package/dist/skills/composer.js +13 -1
- package/dist/skills/composer.js.map +1 -1
- package/dist/skills/index.d.ts +1 -0
- package/dist/skills/index.d.ts.map +1 -1
- package/dist/skills/index.js +1 -0
- package/dist/skills/index.js.map +1 -1
- package/dist/skills/learned-guidelines.d.ts +33 -0
- package/dist/skills/learned-guidelines.d.ts.map +1 -0
- package/dist/skills/learned-guidelines.js +291 -0
- package/dist/skills/learned-guidelines.js.map +1 -0
- package/dist/skills/linter.d.ts.map +1 -1
- package/dist/skills/linter.js +1 -3
- package/dist/skills/linter.js.map +1 -1
- package/dist/skills/runtime-activation.d.ts +1 -0
- package/dist/skills/runtime-activation.d.ts.map +1 -1
- package/dist/skills/runtime-activation.js +2 -3
- package/dist/skills/runtime-activation.js.map +1 -1
- package/dist/skills/tool.d.ts.map +1 -1
- package/dist/skills/tool.js +26 -21
- package/dist/skills/tool.js.map +1 -1
- package/dist/skills/trust-cache.d.ts +7 -0
- package/dist/skills/trust-cache.d.ts.map +1 -1
- package/dist/skills/trust-cache.js +16 -0
- package/dist/skills/trust-cache.js.map +1 -1
- package/dist/telemetry/agent-workforce-native-event.d.ts.map +1 -1
- package/dist/telemetry/agent-workforce-native-event.js +1 -3
- package/dist/telemetry/agent-workforce-native-event.js.map +1 -1
- package/dist/telemetry/maestro-event-bus.d.ts.map +1 -1
- package/dist/telemetry/maestro-event-bus.js +42 -81
- package/dist/telemetry/maestro-event-bus.js.map +1 -1
- package/dist/telemetry/maestro-platform-replay-fixture.d.ts.map +1 -1
- package/dist/telemetry/maestro-platform-replay-fixture.js +1 -3
- package/dist/telemetry/maestro-platform-replay-fixture.js.map +1 -1
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js +54 -43
- package/dist/telemetry.js.map +1 -1
- package/dist/theme/theme-loader.d.ts.map +1 -1
- package/dist/theme/theme-loader.js +1 -3
- package/dist/theme/theme-loader.js.map +1 -1
- package/dist/tools/apply-patch.d.ts.map +1 -1
- package/dist/tools/apply-patch.js +76 -8
- package/dist/tools/apply-patch.js.map +1 -1
- package/dist/tools/diff-preview.d.ts.map +1 -1
- package/dist/tools/diff-preview.js +10 -1
- package/dist/tools/diff-preview.js.map +1 -1
- package/dist/tools/edit.d.ts.map +1 -1
- package/dist/tools/edit.js +17 -0
- package/dist/tools/edit.js.map +1 -1
- package/dist/tools/write.d.ts.map +1 -1
- package/dist/tools/write.js +9 -0
- package/dist/tools/write.js.map +1 -1
- package/dist/undo/tracker.d.ts +5 -0
- package/dist/undo/tracker.d.ts.map +1 -1
- package/dist/undo/tracker.js +13 -0
- package/dist/undo/tracker.js.map +1 -1
- package/dist/utils/fs.d.ts +1 -1
- package/dist/utils/fs.d.ts.map +1 -1
- package/dist/utils/fs.js +29 -2
- package/dist/utils/fs.js.map +1 -1
- package/dist/utils/git-stash.d.ts.map +1 -1
- package/dist/utils/git-stash.js +15 -8
- package/dist/utils/git-stash.js.map +1 -1
- package/dist/utils/json.d.ts +11 -0
- package/dist/utils/json.d.ts.map +1 -1
- package/dist/utils/json.js +9 -0
- package/dist/utils/json.js.map +1 -1
- package/dist/utils/shell-env.d.ts.map +1 -1
- package/dist/utils/shell-env.js +2 -0
- package/dist/utils/shell-env.js.map +1 -1
- package/dist/utils/url-extractor-git.d.ts +26 -0
- package/dist/utils/url-extractor-git.d.ts.map +1 -0
- package/dist/utils/url-extractor-git.js +259 -0
- package/dist/utils/url-extractor-git.js.map +1 -0
- package/dist/utils/url-extractor.d.ts.map +1 -1
- package/dist/utils/url-extractor.js +23 -251
- package/dist/utils/url-extractor.js.map +1 -1
- package/dist/version.json +2 -2
- package/package.json +310 -306
- package/skills/incident-triage/SKILL.md +19 -1
- package/skills/install-code-review/SKILL.md +69 -0
- package/skills/security-review/SKILL.md +68 -0
- package/skills/security-review/reference/rubric.md +85 -0
package/dist/cli/help.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../src/cli/help.ts"],"names":[],"mappings":"AAyFA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,SAAS,CACxB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;IAAE,aAAa,CAAC,EAAE,OAAO,CAAA;CAAE,
|
|
1
|
+
{"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../src/cli/help.ts"],"names":[],"mappings":"AAyFA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,SAAS,CACxB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;IAAE,aAAa,CAAC,EAAE,OAAO,CAAA;CAAE,QAiTrC"}
|
package/dist/cli/help.js
CHANGED
|
@@ -178,6 +178,16 @@ export function printHelp(version, options) {
|
|
|
178
178
|
# Show usage analytics for one session
|
|
179
179
|
maestro stats --session <session-id>
|
|
180
180
|
|
|
181
|
+
# Show customer value, trust cards, durable handoffs, open work, and admin gaps
|
|
182
|
+
maestro value
|
|
183
|
+
maestro value --format json
|
|
184
|
+
maestro value all --format md
|
|
185
|
+
maestro value week --write --output-dir .maestro/value-reports
|
|
186
|
+
|
|
187
|
+
# Manage durable mission state, artifacts, and progress
|
|
188
|
+
maestro mission init checkout-reliability "Checkout reliability"
|
|
189
|
+
maestro mission status checkout-reliability --json
|
|
190
|
+
|
|
181
191
|
# Reconstruct the timeline, trajectory, and evidence coverage for a saved run
|
|
182
192
|
maestro run inspect <session-id> --json
|
|
183
193
|
maestro run promote <session-id>
|
package/dist/cli/help.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"help.js","sourceRoot":"","sources":["../../src/cli/help.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @fileoverview CLI Help Output Module\n *\n * This module generates and displays the `--help` output for the Maestro CLI.\n * It provides a comprehensive overview of:\n *\n * - **Usage syntax** and common invocation patterns\n * - **Command-line options** for provider, model, session management, etc.\n * - **Environment variables** for API keys and configuration\n * - **Available tools** and their capabilities\n * - **Subcommands** like `maestro exec` for headless execution\n * - **Session management** commands and workflows\n *\n * ## Styling\n *\n * The output uses the application's theme system for consistent terminal styling:\n * - `heading()` - Main title styling\n * - `sectionHeading()` - Section headers\n * - `muted()` - De-emphasized text for descriptions\n * - `badge()` - Highlighted tips and hints\n *\n * @module cli/help\n */\nimport { badge, heading, muted, sectionHeading } from \"../style/theme.js\";\n\ninterface CliHelpOption {\n\ttext: string;\n\thidden?: boolean;\n}\n\nconst CLI_OPTIONS: CliHelpOption[] = [\n\t{ text: \"--provider <name> Provider name (default: openai-codex)\" },\n\t{ text: \"-m, --model <id> Model ID (default: gpt-5.5)\" },\n\t{ text: \"--task-budget <tokens> API-side Anthropic task budget in tokens\" },\n\t{\n\t\ttext: \"--models <patterns> Comma-separated patterns for Ctrl+P model cycling\",\n\t},\n\t{\n\t\ttext: \"--tools <names> Comma-separated tool names to enable (e.g., read,search,list,find)\",\n\t},\n\t{ text: \"--api-key <key> API key (defaults to env vars)\" },\n\t{\n\t\ttext: \"--system-prompt <text> System prompt (default: coding assistant prompt)\",\n\t},\n\t{\n\t\ttext: \"--append-system-prompt <text> Append instructions to the system prompt\",\n\t},\n\t{ text: \"--mode <mode> Output mode: text (default), json, or rpc\" },\n\t{\n\t\ttext: \"--auth <mode> Credential mode: auto (default), api-key\",\n\t},\n\t{\n\t\ttext: \"--approval-mode <mode> Action approvals: prompt (default in TUI), auto, fail\",\n\t},\n\t{\n\t\ttext: \"--sandbox <mode> Sandbox mode: read-only, workspace-write, danger-full-access, native, docker, local, none\",\n\t},\n\t{\n\t\ttext: \"--port <n> Port for `maestro web` (defaults to PORT env or 8080)\",\n\t},\n\t{ text: \"--continue, -c Continue previous session\" },\n\t{ text: \"--resume, -r Select a session to resume\" },\n\t{ text: \"--session <path> Use specific session file\" },\n\t{ text: \"--no-session Don't save session (ephemeral)\" },\n\t{ text: \"--safe-mode Enable extra safety restrictions\" },\n\t{\n\t\ttext: \"--replay <path|uri> Open a scripted deterministic replay session\",\n\t},\n\t{\n\t\ttext: \"--record-scenario <path> Record assistant turns as a replay fixture\",\n\t},\n\t{ text: \"--help, -h Show this help\" },\n\t{\n\t\ttext: \"--help-hidden Show hidden support and staged-rollout flags\",\n\t\thidden: true,\n\t},\n\t{\n\t\ttext: \"--list-modes-all List visible and hidden agent modes\",\n\t\thidden: true,\n\t},\n];\n\nfunction renderHelpOptions(options: CliHelpOption[], includeHidden: boolean) {\n\treturn options\n\t\t.filter((option) => includeHidden || option.hidden !== true)\n\t\t.map((option) => ` ${muted(option.text)}`)\n\t\t.join(\"\\n\");\n}\n\n/**\n * Prints the complete CLI help message to stdout.\n *\n * This function is invoked when the user runs `maestro --help` or `maestro -h`.\n * It formats and displays all available options, commands, and usage examples\n * using the terminal theme for consistent styling.\n *\n * @param version - The current Maestro version string (e.g., \"1.2.3\")\n *\n * @example\n * ```typescript\n * import { printHelp } from \"./help.js\";\n * import { version } from \"../../package.json\";\n *\n * if (args.includes(\"--help\")) {\n * printHelp(version);\n * process.exit(0);\n * }\n * ```\n */\nexport function printHelp(\n\tversion: string,\n\toptions?: { includeHidden?: boolean },\n) {\n\tconst includeHidden = options?.includeHidden === true;\n\tconst header = `${heading(\"Maestro\")} ${muted(\n\t\t`v${version} by EvalOps — AI coding assistant with read, list, search, diff, bash, edit, write, todo tools`,\n\t)}`;\n\tconst usage = `${sectionHeading(\"Usage\")}${muted(\n\t\t\"maestro [options] [messages...]\",\n\t)}`;\n\tconst renderedOptions = `${sectionHeading(\"Options\")}${renderHelpOptions(\n\t\tCLI_OPTIONS,\n\t\tincludeHidden,\n\t)}`;\n\tconst hiddenSupportSection = includeHidden\n\t\t? `${sectionHeading(\"Hidden Support Flags\")}${muted(\n\t\t\t\t\" Hidden flags are external support surfaces. Keep them in docs/CONVENTIONS/staged-rollout-registry.json with an owner, telemetry event, and promotion/removal target.\",\n\t\t\t)}`\n\t\t: null;\n\tconst examples = `${sectionHeading(\"Examples\")}${muted(\n\t\t` # Interactive mode (defaults to openai-codex/gpt-5.5 after \\`maestro codex login\\`)\n maestro\n\n # Single message\n maestro \"List all .ts files in src/\"\n\n # Multiple messages\n maestro \"Read package.json\" \"What dependencies do we have?\"\n\n # Continue previous session\n maestro --continue \"What did we discuss?\"\n\n # Use different model\n maestro --provider openai --model gpt-4o-mini \"Help me refactor this code\"\n\n # Use Codex subscription models explicitly\n maestro --provider openai-codex --model gpt-5.5 \"Plan this migration\"\n maestro codex doctor\n\n # Bootstrap EvalOps login, API key, and agent registration in one flow\n maestro init\n\n # Use EvalOps managed gateway models after \\`maestro init\\`\n maestro --provider evalops --model gpt-4o-mini \"Say hello in one sentence\"\n\n # Confirm managed mode sinks and EvalOps org identity\n maestro status\n\n # Check or install the newest published Maestro CLI\n maestro update --check\n maestro update\n\n # Inspect mode-level subagent model dispatch before running a swarm\n maestro modes describe smart\n\n # Explain which instruction files and MCP context sources are visible\n maestro context explain\n\n # Compare context sources between two workspaces\n maestro context diff ./before ./after\n\n # Include live MCP resources and prompts in context diagnostics\n maestro context explain --live-mcp\n\n # Export a portable session log\n maestro export <session-id> ./session.jsonl --format jsonl\n\n # Export a portable JSON archive with secret redaction\n maestro export <session-id> ./session.json --format json --redact-secrets\n maestro sessions export <session-id> ./session.json --format json --redact-secrets\n\n # Import a portable session log into this workspace\n maestro import ./session.json\n maestro sessions import ./session.json\n\n # Scaffold and validate progressive skill packages\n maestro skill new processing-incidents --description \"Process incident reports. Use when the user asks for incident triage.\"\n maestro skill lint .maestro/skills\n\n # Start a hosted EvalOps runner session and wait for attach readiness\n maestro remote start --workspace ws_123 --repo evalops/foo --branch main --ttl 90m --wait --verify\n\n # Run a single-session hosted runtime pod entrypoint\n maestro hosted-runner --runner-session-id mrs_abc --workspace-root /workspace --listen 0.0.0.0:8080\n\n # Show usage analytics for the last 7 days\n maestro stats\n\n # Show usage analytics for one session\n maestro stats --session <session-id>\n\n # Reconstruct the timeline, trajectory, and evidence coverage for a saved run\n maestro run inspect <session-id> --json\n maestro run promote <session-id>\n\n # Discover saved sessions without opening the TUI\n maestro sessions list --json\n maestro sessions search \"release verification\"\n\n # Stream machine-readable exec events\n maestro exec --stream-json \"Summarize recent changes\"\n\n # Validate and run a deterministic scenario fixture\n maestro scenario validate ./test/fixtures/agent-trajectory-scenarios/local-diagnostic-success.json\n maestro scenario run ./test/fixtures/agent-trajectory-scenarios/local-diagnostic-success.json --junit ./tmp/scenario.xml\n\n # Open a real agent session backed by a scripted model fixture\n maestro --replay ./test/fixtures/scripted-replay/basic-tool-call.json\n maestro --replay gs://evalops-prod-maestro-scenario-fixtures/maestro/scenarios/example.json\n\n # Record a live run into a replayable scripted scenario\n maestro --record-scenario ./tmp/recorded-scenario.json \"inspect package.json\"`,\n\t)}`;\n\tconst env = `${sectionHeading(\"Environment Variables:\")}${muted(\n\t\t` GEMINI_API_KEY - Google Gemini API key\n OPENAI_API_KEY - OpenAI API key\n OPENAI_CODEX_TOKEN - OpenAI Codex ChatGPT access token\n OPENAI_CODEX_ACCOUNT_ID - ChatGPT account id when using a raw Codex token\n ANTHROPIC_API_KEY - Anthropic API key\n MAESTRO_AGENT_DIR - Session storage directory (default: ~/.maestro/agent)\n MAESTRO_SANDBOX_MODE - Sandbox mode: read-only, workspace-write, danger-full-access\n MAESTRO_CHANGELOG - Set to off/false/hide/hidden/skip/0 to hide startup changelog banner\n MAESTRO_TUI_MINIMAL - Set to 1/true to disable animations and reduce TUI effects (SSH-friendly)\n MAESTRO_TUI_TOOL_MAX_CHARS - Max chars shown per tool output panel (0 = unlimited)\n MAESTRO_TUI_TOOL_MAX_LINES - Max lines shown per tool output panel (0 = unlimited)\n MAESTRO_MEMORY_BASE - Durable memory service base URL\n MAESTRO_MEMORY_ACCESS_TOKEN - Override bearer token for durable memory service\n MAESTRO_MEMORY_TEAM_ID - Optional team scope for durable memory service\n MAESTRO_SHARED_MEMORY_BASE - Shared memory base URL (Cloudflare Durable Objects worker)\n MAESTRO_SHARED_MEMORY_API_KEY - API key for shared memory service\n MAESTRO_REMOTE_RUNNER_URL - Hosted runner control-plane URL (default: https://runner.evalops.dev)\n MAESTRO_REMOTE_RUNNER_TOKEN - Hosted runner bearer token override\n MAESTRO_REMOTE_RUNNER_ORG_ID - EvalOps organization id for hosted runner sessions\n MAESTRO_REMOTE_RUNNER_WORKSPACE_ID - EvalOps workspace id for hosted runner sessions\n CODING_AGENT_DIR - Legacy session directory override (fallback)`,\n\t)}`;\n\tconst execSection = `${sectionHeading(\"maestro exec\")}${muted(\n\t\t` maestro exec \"Summarize recent changes\" --json\n maestro exec --stream-json \"Summarize recent changes\"\n\n Flags:\n --json, --stream-json Stream JSONL thread/turn events\n --output-schema <file|json> Validate final assistant JSON against a schema\n --output-last-message <path> Write the final assistant message to disk\n --full-auto | --read-only Force approval policy (auto or fail)\n --sandbox <mode> Run in sandbox: read-only, workspace-write, danger-full-access, native, docker, local, none\n --resume <sessionId> Resume a prior exec session by id\n --last Resume the most recent exec session`,\n\t)}`;\n\tconst webSection = `${sectionHeading(\"maestro web\")}${muted(\n\t\t` # Start the bundled web UI + API server\n maestro web\n\n # Use a custom port\n maestro web --port 3000`,\n\t)}`;\n\tconst portabilitySection = `${sectionHeading(\"Session Portability\")}${muted(\n\t\t` maestro export <session-id> [output-path] --format json|jsonl [--redact-secrets]\n maestro import <file.json|file.jsonl>\n maestro sessions export <session-id> [output-path] --format json|jsonl [--redact-secrets]\n maestro sessions import <file.json|file.jsonl>\n\n Notes:\n - json preserves the full session in a portable wrapper object\n - jsonl preserves the append-only session log verbatim unless redaction is requested\n - --redact-secrets scrubs detected credentials from exported payloads\n - import restores the session into the current workspace session directory`,\n\t)}`;\n\tconst modesSection = `${sectionHeading(\"maestro modes\")}${muted(\n\t\t` maestro modes list\n maestro modes describe <mode> [--provider <provider>] [--json]\n\n Prints the mode primary/fallback model policy and resolved subagent dispatch\n table, including cross-provider overrides such as smart-mode coder lanes\n routed to openai-codex/gpt-5.5.`,\n\t)}`;\n\tconst memorySection = `${sectionHeading(\"maestro memory\")}${muted(\n\t\t` maestro memory [status] Show shared memory service status\n maestro memory session <id> Show per-session metrics\n maestro memory audit <id> [n] Show recent sync audit entries\n maestro memory export <id> Export metrics log as JSONL\n maestro memory watch [id] [ms] Poll status/metrics continuously`,\n\t)}`;\n\tconst skillSection = `${sectionHeading(\"maestro skill\")}${muted(\n\t\t` maestro skill list List available progressive skills\n maestro skill inspect <name> Print one skill package manifest\n maestro skill install <source> Validate and install an OSS skill package\n maestro skill publish-check <src> Validate an OSS skill package for publishing\n maestro skill new <name> Scaffold SKILL.md, reference/, scripts/, toolbox/, and mcp.json.example\n maestro skill lint [path...] Validate frontmatter, budget, mcp.json includeTools, and toolbox shape`,\n\t)}`;\n\tconst remoteSection = `${sectionHeading(\"maestro remote\")}${muted(\n\t\t` maestro remote start --workspace <id> --repo <repo> --branch <branch> [--ttl 90m] [--wait] [--verify]\n maestro remote list --workspace <id> [--state running]\n maestro remote attach <session-id> [--verify] [--print-env]\n maestro remote extend <session-id> --ttl 2h\n maestro remote stop <session-id> [--reason <text>]`,\n\t)}`;\n\tconst operatingPlaneHelp = [\n\t\t\" maestro operating-plane status --thread-id <slack-thread> [--artifact-id <id>] [--auth-subject <subject>]\",\n\t\t\" maestro operating-plane status --trace-id <id> --json\",\n\t\t\" Fetches the Platform operating-plane ledger and prints content-free runtime\",\n\t\t\" status with identity, model/tool/approval/trace/artifact/cost signals,\",\n\t\t\" allowed artifact ids/revisions, blockers, next actions, and withheld reasons.\",\n\t].join(\"\\n\");\n\tconst operatingPlaneSection = `${sectionHeading(\"maestro operating-plane\")}${muted(operatingPlaneHelp)}`;\n\tconst runSection = `${sectionHeading(\"maestro run\")}${muted(\n\t\t` maestro run inspect <session-id> [--json]\n maestro run ledger <session-id>\n maestro run replay <session-id>\n maestro run promote <session-id>\n\n Reconstructs a saved session into a timeline plus canonical agent trajectory\n with prompt, tool, file-change, artifact, policy, diagnostic, compaction,\n pending-wait, and MCP-context coverage. The ledger/replay/promote commands\n expose the local AgentRuntime projection and dry-run Platform promotion plan.`,\n\t)}`;\n\tconst initSection = `${sectionHeading(\"maestro init\")}${muted(\n\t\t` maestro init Login, create or reuse an API key, and register this agent\n maestro init --rotate-key Replace the stored agent MCP API key\n maestro init --mcp-url <url> Override the EvalOps agent MCP endpoint\n maestro init --capability code:write Declare an agent-registry capability\n maestro init --json Emit machine-readable bootstrap output`,\n\t)}`;\n\tconst hostedRunnerSection = `${sectionHeading(\"maestro hosted-runner\")}${muted(\n\t\t` maestro hosted-runner --runner-session-id <id> --workspace-root <path> [--listen 0.0.0.0:8080]\n\n Env mode:\n MAESTRO_RUNNER_SESSION_ID=mrs_abc MAESTRO_WORKSPACE_ROOT=/workspace maestro hosted-runner`,\n\t)}`;\n\tconst sessionsSection = `${sectionHeading(\"Session Metadata\")}${muted(\n\t\t` /session favorite|unfavorite Toggle favorite for current session\n /session summary \"<text>\" Save a manual summary for current session\n /sessions summarize <id> Auto-summarize a saved session`,\n\t)}`;\n\tconst sessionsDiscovery = `${sectionHeading(\"Session Commands\")}${muted(\n\t\t` maestro sessions [list|search <query>|export <session-id>|import <file>] [--json]\n /session [info|favorite|unfavorite|summary \"<text>\"]\n /sessions [list|load <id>|favorite <id>|unfavorite <id>|summarize <id>]\n (Also available via TUI command palette)`,\n\t)}`;\n\tconst tools = `${sectionHeading(\"Available Tools\")}${muted(\n\t\t` read - Read file contents\n list - List files in a directory\n find - Fast file search using fd (glob patterns)\n search - Search files with ripgrep-style filtering\n parallel_ripgrep - Run multiple ripgrep patterns in parallel and merge line ranges\n diff - Show git diffs (workspace, staged, or ranges)\n bash - Execute bash commands\n edit - Edit files with find/replace\n write - Write files (creates/overwrites)\n todo - Create TodoWrite-style checklists\n\n Read-only tools: read,list,find,search,parallel_ripgrep,diff,status\n Example: maestro --tools read,list,find,search,parallel_ripgrep,diff \"Analyze this code\"`,\n\t)}`;\n\n\tconst frameworkSection = `${sectionHeading(\"Framework Preference\")}${muted(\n\t\t` /framework <id> Set default stack (fastapi, express, node)\n /framework <id> --workspace Set workspace-scoped default\n /framework list Show available options\n Precedence: policy (locked) > policy > env override > env default > workspace > user file > none`,\n\t)}`;\n\n\tconsole.log(\n\t\t[\n\t\t\theader,\n\t\t\tusage,\n\t\t\trenderedOptions,\n\t\t\thiddenSupportSection,\n\t\t\texamples,\n\t\t\tenv,\n\t\t\texecSection,\n\t\t\twebSection,\n\t\t\tportabilitySection,\n\t\t\tmodesSection,\n\t\t\tmemorySection,\n\t\t\tskillSection,\n\t\t\tinitSection,\n\t\t\trunSection,\n\t\t\tremoteSection,\n\t\t\toperatingPlaneSection,\n\t\t\thostedRunnerSection,\n\t\t\tsessionsSection,\n\t\t\tsessionsDiscovery,\n\t\t\t`${sectionHeading(\"Tips\")}${badge(\n\t\t\t\t\"Need models?\",\n\t\t\t\t\"maestro models list\",\n\t\t\t\t\"info\",\n\t\t\t)}`,\n\t\t\tframeworkSection,\n\t\t\ttools,\n\t\t]\n\t\t\t.filter((section): section is string => section !== null)\n\t\t\t.join(\"\\n\\n\"),\n\t);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"help.js","sourceRoot":"","sources":["../../src/cli/help.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @fileoverview CLI Help Output Module\n *\n * This module generates and displays the `--help` output for the Maestro CLI.\n * It provides a comprehensive overview of:\n *\n * - **Usage syntax** and common invocation patterns\n * - **Command-line options** for provider, model, session management, etc.\n * - **Environment variables** for API keys and configuration\n * - **Available tools** and their capabilities\n * - **Subcommands** like `maestro exec` for headless execution\n * - **Session management** commands and workflows\n *\n * ## Styling\n *\n * The output uses the application's theme system for consistent terminal styling:\n * - `heading()` - Main title styling\n * - `sectionHeading()` - Section headers\n * - `muted()` - De-emphasized text for descriptions\n * - `badge()` - Highlighted tips and hints\n *\n * @module cli/help\n */\nimport { badge, heading, muted, sectionHeading } from \"../style/theme.js\";\n\ninterface CliHelpOption {\n\ttext: string;\n\thidden?: boolean;\n}\n\nconst CLI_OPTIONS: CliHelpOption[] = [\n\t{ text: \"--provider <name> Provider name (default: openai-codex)\" },\n\t{ text: \"-m, --model <id> Model ID (default: gpt-5.5)\" },\n\t{ text: \"--task-budget <tokens> API-side Anthropic task budget in tokens\" },\n\t{\n\t\ttext: \"--models <patterns> Comma-separated patterns for Ctrl+P model cycling\",\n\t},\n\t{\n\t\ttext: \"--tools <names> Comma-separated tool names to enable (e.g., read,search,list,find)\",\n\t},\n\t{ text: \"--api-key <key> API key (defaults to env vars)\" },\n\t{\n\t\ttext: \"--system-prompt <text> System prompt (default: coding assistant prompt)\",\n\t},\n\t{\n\t\ttext: \"--append-system-prompt <text> Append instructions to the system prompt\",\n\t},\n\t{ text: \"--mode <mode> Output mode: text (default), json, or rpc\" },\n\t{\n\t\ttext: \"--auth <mode> Credential mode: auto (default), api-key\",\n\t},\n\t{\n\t\ttext: \"--approval-mode <mode> Action approvals: prompt (default in TUI), auto, fail\",\n\t},\n\t{\n\t\ttext: \"--sandbox <mode> Sandbox mode: read-only, workspace-write, danger-full-access, native, docker, local, none\",\n\t},\n\t{\n\t\ttext: \"--port <n> Port for `maestro web` (defaults to PORT env or 8080)\",\n\t},\n\t{ text: \"--continue, -c Continue previous session\" },\n\t{ text: \"--resume, -r Select a session to resume\" },\n\t{ text: \"--session <path> Use specific session file\" },\n\t{ text: \"--no-session Don't save session (ephemeral)\" },\n\t{ text: \"--safe-mode Enable extra safety restrictions\" },\n\t{\n\t\ttext: \"--replay <path|uri> Open a scripted deterministic replay session\",\n\t},\n\t{\n\t\ttext: \"--record-scenario <path> Record assistant turns as a replay fixture\",\n\t},\n\t{ text: \"--help, -h Show this help\" },\n\t{\n\t\ttext: \"--help-hidden Show hidden support and staged-rollout flags\",\n\t\thidden: true,\n\t},\n\t{\n\t\ttext: \"--list-modes-all List visible and hidden agent modes\",\n\t\thidden: true,\n\t},\n];\n\nfunction renderHelpOptions(options: CliHelpOption[], includeHidden: boolean) {\n\treturn options\n\t\t.filter((option) => includeHidden || option.hidden !== true)\n\t\t.map((option) => ` ${muted(option.text)}`)\n\t\t.join(\"\\n\");\n}\n\n/**\n * Prints the complete CLI help message to stdout.\n *\n * This function is invoked when the user runs `maestro --help` or `maestro -h`.\n * It formats and displays all available options, commands, and usage examples\n * using the terminal theme for consistent styling.\n *\n * @param version - The current Maestro version string (e.g., \"1.2.3\")\n *\n * @example\n * ```typescript\n * import { printHelp } from \"./help.js\";\n * import { version } from \"../../package.json\";\n *\n * if (args.includes(\"--help\")) {\n * printHelp(version);\n * process.exit(0);\n * }\n * ```\n */\nexport function printHelp(\n\tversion: string,\n\toptions?: { includeHidden?: boolean },\n) {\n\tconst includeHidden = options?.includeHidden === true;\n\tconst header = `${heading(\"Maestro\")} ${muted(\n\t\t`v${version} by EvalOps — AI coding assistant with read, list, search, diff, bash, edit, write, todo tools`,\n\t)}`;\n\tconst usage = `${sectionHeading(\"Usage\")}${muted(\n\t\t\"maestro [options] [messages...]\",\n\t)}`;\n\tconst renderedOptions = `${sectionHeading(\"Options\")}${renderHelpOptions(\n\t\tCLI_OPTIONS,\n\t\tincludeHidden,\n\t)}`;\n\tconst hiddenSupportSection = includeHidden\n\t\t? `${sectionHeading(\"Hidden Support Flags\")}${muted(\n\t\t\t\t\" Hidden flags are external support surfaces. Keep them in docs/CONVENTIONS/staged-rollout-registry.json with an owner, telemetry event, and promotion/removal target.\",\n\t\t\t)}`\n\t\t: null;\n\tconst examples = `${sectionHeading(\"Examples\")}${muted(\n\t\t` # Interactive mode (defaults to openai-codex/gpt-5.5 after \\`maestro codex login\\`)\n maestro\n\n # Single message\n maestro \"List all .ts files in src/\"\n\n # Multiple messages\n maestro \"Read package.json\" \"What dependencies do we have?\"\n\n # Continue previous session\n maestro --continue \"What did we discuss?\"\n\n # Use different model\n maestro --provider openai --model gpt-4o-mini \"Help me refactor this code\"\n\n # Use Codex subscription models explicitly\n maestro --provider openai-codex --model gpt-5.5 \"Plan this migration\"\n maestro codex doctor\n\n # Bootstrap EvalOps login, API key, and agent registration in one flow\n maestro init\n\n # Use EvalOps managed gateway models after \\`maestro init\\`\n maestro --provider evalops --model gpt-4o-mini \"Say hello in one sentence\"\n\n # Confirm managed mode sinks and EvalOps org identity\n maestro status\n\n # Check or install the newest published Maestro CLI\n maestro update --check\n maestro update\n\n # Inspect mode-level subagent model dispatch before running a swarm\n maestro modes describe smart\n\n # Explain which instruction files and MCP context sources are visible\n maestro context explain\n\n # Compare context sources between two workspaces\n maestro context diff ./before ./after\n\n # Include live MCP resources and prompts in context diagnostics\n maestro context explain --live-mcp\n\n # Export a portable session log\n maestro export <session-id> ./session.jsonl --format jsonl\n\n # Export a portable JSON archive with secret redaction\n maestro export <session-id> ./session.json --format json --redact-secrets\n maestro sessions export <session-id> ./session.json --format json --redact-secrets\n\n # Import a portable session log into this workspace\n maestro import ./session.json\n maestro sessions import ./session.json\n\n # Scaffold and validate progressive skill packages\n maestro skill new processing-incidents --description \"Process incident reports. Use when the user asks for incident triage.\"\n maestro skill lint .maestro/skills\n\n # Start a hosted EvalOps runner session and wait for attach readiness\n maestro remote start --workspace ws_123 --repo evalops/foo --branch main --ttl 90m --wait --verify\n\n # Run a single-session hosted runtime pod entrypoint\n maestro hosted-runner --runner-session-id mrs_abc --workspace-root /workspace --listen 0.0.0.0:8080\n\n # Show usage analytics for the last 7 days\n maestro stats\n\n # Show usage analytics for one session\n maestro stats --session <session-id>\n\n # Show customer value, trust cards, durable handoffs, open work, and admin gaps\n maestro value\n maestro value --format json\n maestro value all --format md\n maestro value week --write --output-dir .maestro/value-reports\n\n # Manage durable mission state, artifacts, and progress\n maestro mission init checkout-reliability \"Checkout reliability\"\n maestro mission status checkout-reliability --json\n\n # Reconstruct the timeline, trajectory, and evidence coverage for a saved run\n maestro run inspect <session-id> --json\n maestro run promote <session-id>\n\n # Discover saved sessions without opening the TUI\n maestro sessions list --json\n maestro sessions search \"release verification\"\n\n # Stream machine-readable exec events\n maestro exec --stream-json \"Summarize recent changes\"\n\n # Validate and run a deterministic scenario fixture\n maestro scenario validate ./test/fixtures/agent-trajectory-scenarios/local-diagnostic-success.json\n maestro scenario run ./test/fixtures/agent-trajectory-scenarios/local-diagnostic-success.json --junit ./tmp/scenario.xml\n\n # Open a real agent session backed by a scripted model fixture\n maestro --replay ./test/fixtures/scripted-replay/basic-tool-call.json\n maestro --replay gs://evalops-prod-maestro-scenario-fixtures/maestro/scenarios/example.json\n\n # Record a live run into a replayable scripted scenario\n maestro --record-scenario ./tmp/recorded-scenario.json \"inspect package.json\"`,\n\t)}`;\n\tconst env = `${sectionHeading(\"Environment Variables:\")}${muted(\n\t\t` GEMINI_API_KEY - Google Gemini API key\n OPENAI_API_KEY - OpenAI API key\n OPENAI_CODEX_TOKEN - OpenAI Codex ChatGPT access token\n OPENAI_CODEX_ACCOUNT_ID - ChatGPT account id when using a raw Codex token\n ANTHROPIC_API_KEY - Anthropic API key\n MAESTRO_AGENT_DIR - Session storage directory (default: ~/.maestro/agent)\n MAESTRO_SANDBOX_MODE - Sandbox mode: read-only, workspace-write, danger-full-access\n MAESTRO_CHANGELOG - Set to off/false/hide/hidden/skip/0 to hide startup changelog banner\n MAESTRO_TUI_MINIMAL - Set to 1/true to disable animations and reduce TUI effects (SSH-friendly)\n MAESTRO_TUI_TOOL_MAX_CHARS - Max chars shown per tool output panel (0 = unlimited)\n MAESTRO_TUI_TOOL_MAX_LINES - Max lines shown per tool output panel (0 = unlimited)\n MAESTRO_MEMORY_BASE - Durable memory service base URL\n MAESTRO_MEMORY_ACCESS_TOKEN - Override bearer token for durable memory service\n MAESTRO_MEMORY_TEAM_ID - Optional team scope for durable memory service\n MAESTRO_SHARED_MEMORY_BASE - Shared memory base URL (Cloudflare Durable Objects worker)\n MAESTRO_SHARED_MEMORY_API_KEY - API key for shared memory service\n MAESTRO_REMOTE_RUNNER_URL - Hosted runner control-plane URL (default: https://runner.evalops.dev)\n MAESTRO_REMOTE_RUNNER_TOKEN - Hosted runner bearer token override\n MAESTRO_REMOTE_RUNNER_ORG_ID - EvalOps organization id for hosted runner sessions\n MAESTRO_REMOTE_RUNNER_WORKSPACE_ID - EvalOps workspace id for hosted runner sessions\n CODING_AGENT_DIR - Legacy session directory override (fallback)`,\n\t)}`;\n\tconst execSection = `${sectionHeading(\"maestro exec\")}${muted(\n\t\t` maestro exec \"Summarize recent changes\" --json\n maestro exec --stream-json \"Summarize recent changes\"\n\n Flags:\n --json, --stream-json Stream JSONL thread/turn events\n --output-schema <file|json> Validate final assistant JSON against a schema\n --output-last-message <path> Write the final assistant message to disk\n --full-auto | --read-only Force approval policy (auto or fail)\n --sandbox <mode> Run in sandbox: read-only, workspace-write, danger-full-access, native, docker, local, none\n --resume <sessionId> Resume a prior exec session by id\n --last Resume the most recent exec session`,\n\t)}`;\n\tconst webSection = `${sectionHeading(\"maestro web\")}${muted(\n\t\t` # Start the bundled web UI + API server\n maestro web\n\n # Use a custom port\n maestro web --port 3000`,\n\t)}`;\n\tconst portabilitySection = `${sectionHeading(\"Session Portability\")}${muted(\n\t\t` maestro export <session-id> [output-path] --format json|jsonl [--redact-secrets]\n maestro import <file.json|file.jsonl>\n maestro sessions export <session-id> [output-path] --format json|jsonl [--redact-secrets]\n maestro sessions import <file.json|file.jsonl>\n\n Notes:\n - json preserves the full session in a portable wrapper object\n - jsonl preserves the append-only session log verbatim unless redaction is requested\n - --redact-secrets scrubs detected credentials from exported payloads\n - import restores the session into the current workspace session directory`,\n\t)}`;\n\tconst modesSection = `${sectionHeading(\"maestro modes\")}${muted(\n\t\t` maestro modes list\n maestro modes describe <mode> [--provider <provider>] [--json]\n\n Prints the mode primary/fallback model policy and resolved subagent dispatch\n table, including cross-provider overrides such as smart-mode coder lanes\n routed to openai-codex/gpt-5.5.`,\n\t)}`;\n\tconst memorySection = `${sectionHeading(\"maestro memory\")}${muted(\n\t\t` maestro memory [status] Show shared memory service status\n maestro memory session <id> Show per-session metrics\n maestro memory audit <id> [n] Show recent sync audit entries\n maestro memory export <id> Export metrics log as JSONL\n maestro memory watch [id] [ms] Poll status/metrics continuously`,\n\t)}`;\n\tconst skillSection = `${sectionHeading(\"maestro skill\")}${muted(\n\t\t` maestro skill list List available progressive skills\n maestro skill inspect <name> Print one skill package manifest\n maestro skill install <source> Validate and install an OSS skill package\n maestro skill publish-check <src> Validate an OSS skill package for publishing\n maestro skill new <name> Scaffold SKILL.md, reference/, scripts/, toolbox/, and mcp.json.example\n maestro skill lint [path...] Validate frontmatter, budget, mcp.json includeTools, and toolbox shape`,\n\t)}`;\n\tconst remoteSection = `${sectionHeading(\"maestro remote\")}${muted(\n\t\t` maestro remote start --workspace <id> --repo <repo> --branch <branch> [--ttl 90m] [--wait] [--verify]\n maestro remote list --workspace <id> [--state running]\n maestro remote attach <session-id> [--verify] [--print-env]\n maestro remote extend <session-id> --ttl 2h\n maestro remote stop <session-id> [--reason <text>]`,\n\t)}`;\n\tconst operatingPlaneHelp = [\n\t\t\" maestro operating-plane status --thread-id <slack-thread> [--artifact-id <id>] [--auth-subject <subject>]\",\n\t\t\" maestro operating-plane status --trace-id <id> --json\",\n\t\t\" Fetches the Platform operating-plane ledger and prints content-free runtime\",\n\t\t\" status with identity, model/tool/approval/trace/artifact/cost signals,\",\n\t\t\" allowed artifact ids/revisions, blockers, next actions, and withheld reasons.\",\n\t].join(\"\\n\");\n\tconst operatingPlaneSection = `${sectionHeading(\"maestro operating-plane\")}${muted(operatingPlaneHelp)}`;\n\tconst runSection = `${sectionHeading(\"maestro run\")}${muted(\n\t\t` maestro run inspect <session-id> [--json]\n maestro run ledger <session-id>\n maestro run replay <session-id>\n maestro run promote <session-id>\n\n Reconstructs a saved session into a timeline plus canonical agent trajectory\n with prompt, tool, file-change, artifact, policy, diagnostic, compaction,\n pending-wait, and MCP-context coverage. The ledger/replay/promote commands\n expose the local AgentRuntime projection and dry-run Platform promotion plan.`,\n\t)}`;\n\tconst initSection = `${sectionHeading(\"maestro init\")}${muted(\n\t\t` maestro init Login, create or reuse an API key, and register this agent\n maestro init --rotate-key Replace the stored agent MCP API key\n maestro init --mcp-url <url> Override the EvalOps agent MCP endpoint\n maestro init --capability code:write Declare an agent-registry capability\n maestro init --json Emit machine-readable bootstrap output`,\n\t)}`;\n\tconst hostedRunnerSection = `${sectionHeading(\"maestro hosted-runner\")}${muted(\n\t\t` maestro hosted-runner --runner-session-id <id> --workspace-root <path> [--listen 0.0.0.0:8080]\n\n Env mode:\n MAESTRO_RUNNER_SESSION_ID=mrs_abc MAESTRO_WORKSPACE_ROOT=/workspace maestro hosted-runner`,\n\t)}`;\n\tconst sessionsSection = `${sectionHeading(\"Session Metadata\")}${muted(\n\t\t` /session favorite|unfavorite Toggle favorite for current session\n /session summary \"<text>\" Save a manual summary for current session\n /sessions summarize <id> Auto-summarize a saved session`,\n\t)}`;\n\tconst sessionsDiscovery = `${sectionHeading(\"Session Commands\")}${muted(\n\t\t` maestro sessions [list|search <query>|export <session-id>|import <file>] [--json]\n /session [info|favorite|unfavorite|summary \"<text>\"]\n /sessions [list|load <id>|favorite <id>|unfavorite <id>|summarize <id>]\n (Also available via TUI command palette)`,\n\t)}`;\n\tconst tools = `${sectionHeading(\"Available Tools\")}${muted(\n\t\t` read - Read file contents\n list - List files in a directory\n find - Fast file search using fd (glob patterns)\n search - Search files with ripgrep-style filtering\n parallel_ripgrep - Run multiple ripgrep patterns in parallel and merge line ranges\n diff - Show git diffs (workspace, staged, or ranges)\n bash - Execute bash commands\n edit - Edit files with find/replace\n write - Write files (creates/overwrites)\n todo - Create TodoWrite-style checklists\n\n Read-only tools: read,list,find,search,parallel_ripgrep,diff,status\n Example: maestro --tools read,list,find,search,parallel_ripgrep,diff \"Analyze this code\"`,\n\t)}`;\n\n\tconst frameworkSection = `${sectionHeading(\"Framework Preference\")}${muted(\n\t\t` /framework <id> Set default stack (fastapi, express, node)\n /framework <id> --workspace Set workspace-scoped default\n /framework list Show available options\n Precedence: policy (locked) > policy > env override > env default > workspace > user file > none`,\n\t)}`;\n\n\tconsole.log(\n\t\t[\n\t\t\theader,\n\t\t\tusage,\n\t\t\trenderedOptions,\n\t\t\thiddenSupportSection,\n\t\t\texamples,\n\t\t\tenv,\n\t\t\texecSection,\n\t\t\twebSection,\n\t\t\tportabilitySection,\n\t\t\tmodesSection,\n\t\t\tmemorySection,\n\t\t\tskillSection,\n\t\t\tinitSection,\n\t\t\trunSection,\n\t\t\tremoteSection,\n\t\t\toperatingPlaneSection,\n\t\t\thostedRunnerSection,\n\t\t\tsessionsSection,\n\t\t\tsessionsDiscovery,\n\t\t\t`${sectionHeading(\"Tips\")}${badge(\n\t\t\t\t\"Need models?\",\n\t\t\t\t\"maestro models list\",\n\t\t\t\t\"info\",\n\t\t\t)}`,\n\t\t\tframeworkSection,\n\t\t\ttools,\n\t\t]\n\t\t\t.filter((section): section is string => section !== null)\n\t\t\t.join(\"\\n\\n\"),\n\t);\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"system-prompt.d.ts","sourceRoot":"","sources":["../../src/cli/system-prompt.ts"],"names":[],"mappings":"AAKA,OAAO,EACN,KAAK,wBAAwB,EAI7B,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACN,KAAK,cAAc,EACnB,KAAK,wBAAwB,EAI7B,MAAM,oBAAoB,CAAC;AAiD5B,wBAAgB,2BAA2B,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAezE;AASD,wBAAgB,sCAAsC,CACrD,YAAY,CAAC,EAAE,MAAM,EACrB,YAAY,CAAC,EAAE,MAAM,GACnB,MAAM,EAAE,CAQV;AAiBD,UAAU,iCAAiC;IAC1C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;CACzC;AAED,MAAM,WAAW,2BAA2B;IAC3C,kBAAkB,CAAC,EAAE,wBAAwB,GAAG,IAAI,CAAC;IACrD,qBAAqB,CAAC,EAAE,wBAAwB,CAAC;IACjD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;CACvC;AAmGD,wBAAgB,8BAA8B,CAC7C,OAAO,GAAE,iCAAsC,GAC7C,wBAAwB,CAkC1B;
|
|
1
|
+
{"version":3,"file":"system-prompt.d.ts","sourceRoot":"","sources":["../../src/cli/system-prompt.ts"],"names":[],"mappings":"AAKA,OAAO,EACN,KAAK,wBAAwB,EAI7B,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACN,KAAK,cAAc,EACnB,KAAK,wBAAwB,EAI7B,MAAM,oBAAoB,CAAC;AAiD5B,wBAAgB,2BAA2B,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAezE;AASD,wBAAgB,sCAAsC,CACrD,YAAY,CAAC,EAAE,MAAM,EACrB,YAAY,CAAC,EAAE,MAAM,GACnB,MAAM,EAAE,CAQV;AAiBD,UAAU,iCAAiC;IAC1C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;CACzC;AAED,MAAM,WAAW,2BAA2B;IAC3C,kBAAkB,CAAC,EAAE,wBAAwB,GAAG,IAAI,CAAC;IACrD,qBAAqB,CAAC,EAAE,wBAAwB,CAAC;IACjD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;CACvC;AAmGD,wBAAgB,8BAA8B,CAC7C,OAAO,GAAE,iCAAsC,GAC7C,wBAAwB,CAkC1B;AA+FD,MAAM,WAAW,WAAW;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,YAAY,CAC3B,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACd;IACF,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACd,CA6CA;AAED,wBAAgB,uBAAuB,CACtC,WAAW,CAAC,EAAE,MAAM,EACpB,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,cAAc,CAAA;CAAO,GACvC,WAAW,EAAE,CAOf;AA0PD,wBAAgB,+BAA+B,CAAC,GAAG,SAAgB,GAAG,MAAM,CAc3E;AAkDD,wBAAgB,4BAA4B,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAYzE;AAED,wBAAgB,oBAAoB,CACnC,UAAU,EAAE,MAAM,EAClB,YAAY,CAAC,EAAE,MAAM,EACrB,GAAG,SAAgB,EACnB,OAAO,GAAE,2BAAgC,GACvC,MAAM,CAuCR;AAED,wBAAgB,iBAAiB,CAChC,YAAY,CAAC,EAAE,MAAM,EACrB,SAAS,CAAC,EAAE,MAAM,EAAE,EACpB,YAAY,CAAC,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE,2BAA2B,GACnC,MAAM,CAUR"}
|
|
@@ -218,12 +218,6 @@ function buildGuidelines(toolNames, currentYear) {
|
|
|
218
218
|
if (toolNames.has("diff")) {
|
|
219
219
|
guidelines.push("Use diff to review pending changes before summarizing or committing");
|
|
220
220
|
}
|
|
221
|
-
// Only add validation guidance if mutation tools are available
|
|
222
|
-
if (toolNames.has("edit") ||
|
|
223
|
-
toolNames.has("write") ||
|
|
224
|
-
toolNames.has("bash")) {
|
|
225
|
-
guidelines.push("After finishing any non-trivial set of code changes, run all required project validators (lint, tests, evals, etc.) before summarizing or committing unless the user explicitly waives them");
|
|
226
|
-
}
|
|
227
221
|
if (toolNames.has("todo")) {
|
|
228
222
|
guidelines.push("Use todo when you need a structured task list; supply a goal plus an items array shaped like TodoWrite entries or updates for existing tasks");
|
|
229
223
|
}
|
|
@@ -501,11 +495,48 @@ export function buildFileCitationPromptFragment(cwd = process.cwd()) {
|
|
|
501
495
|
"Bad: See src/auth/middleware.ts for the validation logic.",
|
|
502
496
|
].join("\n");
|
|
503
497
|
}
|
|
498
|
+
/**
|
|
499
|
+
* Behavioral discipline baked into the bundled (offline) prompt so a Maestro
|
|
500
|
+
* run without a remote prompt service still holds the standards a strong
|
|
501
|
+
* coding agent applies: follow existing conventions, keep changes scoped,
|
|
502
|
+
* surface problems, and verify before claiming done. Sections that depend on
|
|
503
|
+
* specific tools are included only when those tools are available.
|
|
504
|
+
*/
|
|
505
|
+
function buildEngineeringDisciplineSection(toolNames) {
|
|
506
|
+
const sections = [];
|
|
507
|
+
sections.push([
|
|
508
|
+
"## Following conventions",
|
|
509
|
+
"- Before using a library, confirm it is already a dependency of this project — check imports in neighbouring files and the package manifest. Never assume a package is available because it is popular.",
|
|
510
|
+
"- Match the conventions of the surrounding code: its naming, typing, error handling, and file layout. New code should be hard to distinguish from what is already there.",
|
|
511
|
+
"- Add a comment only to explain intent the code cannot convey. Do not narrate what the code plainly does.",
|
|
512
|
+
].join("\n"));
|
|
513
|
+
const doingTask = [
|
|
514
|
+
"## Doing the task",
|
|
515
|
+
"- Do what was asked, then stop. Prefer the smallest change that fully solves the problem, and do not refactor adjacent code the task did not require.",
|
|
516
|
+
"- Surface problems as you find them. If an assumption turns out wrong, a requirement is missing, or a change is riskier than it looked, say so instead of quietly working around it.",
|
|
517
|
+
];
|
|
518
|
+
if (toolNames.has("todo")) {
|
|
519
|
+
doingTask.push("- Track multi-step work with the todo tool. Keep exactly one item in_progress, and mark an item completed as soon as its work is verified rather than batching updates at the end.");
|
|
520
|
+
}
|
|
521
|
+
sections.push(doingTask.join("\n"));
|
|
522
|
+
if (toolNames.has("edit") ||
|
|
523
|
+
toolNames.has("write") ||
|
|
524
|
+
toolNames.has("bash")) {
|
|
525
|
+
sections.push([
|
|
526
|
+
"## Verifying your work",
|
|
527
|
+
"- A change is not finished until it is verified. After a non-trivial change run the project's validators — build, lint, and the tests that cover what you touched — unless the user explicitly waives them, and report what you ran and what it showed.",
|
|
528
|
+
"- Do not report that something works on the basis of reading the code when you could have run it.",
|
|
529
|
+
].join("\n"));
|
|
530
|
+
}
|
|
531
|
+
return `# Engineering discipline\n\n${sections.join("\n\n")}`;
|
|
532
|
+
}
|
|
504
533
|
export function buildBundledSystemPromptBase(toolNames) {
|
|
505
534
|
const currentYear = new Date().getFullYear();
|
|
506
535
|
const activeToolNames = toolNames ?? DEFAULT_TOOL_NAMES;
|
|
507
536
|
const toolNameSet = new Set(activeToolNames);
|
|
508
|
-
return `You are an expert
|
|
537
|
+
return `You are Maestro, an expert software engineering agent. You help users with real software work — reading files, executing commands, editing code, and writing new files — and you optimize for correct, verified changes over volume of output.
|
|
538
|
+
|
|
539
|
+
${buildEngineeringDisciplineSection(toolNameSet)}
|
|
509
540
|
|
|
510
541
|
${buildToolsSection(activeToolNames)}
|
|
511
542
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"system-prompt.js","sourceRoot":"","sources":["../../src/cli/system-prompt.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, readFileSync, readdirSync, statSync } from \"node:fs\";\nimport type { Dirent } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { basename, dirname, join, resolve } from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport {\n\ttype RuntimeConstraintContext,\n\ttype RuntimeNetworkAccess,\n\tbuildRuntimeConstraintPrompt,\n\tisSandboxModeEnabled,\n} from \"@evalops/contracts\";\nimport chalk from \"chalk\";\nimport { buildSearchGuidelines } from \"../agent/search-guidance.js\";\nimport {\n\ttype ComposerConfig,\n\ttype PromptProjectDocManifest,\n\ttype PromptProjectDocManifestEntry,\n\tloadPromptProjectDocManifest,\n\tresolveLoadedAppendSystemPromptPath,\n} from \"../config/index.js\";\nimport { DEFAULT_GUARDED_FILE_RULES } from \"../safety/guarded-files.js\";\n\n// Tool descriptions for dynamic system prompt generation\nconst TOOL_DESCRIPTIONS: Record<string, string> = {\n\tread: \"Read file contents\",\n\tlist: \"List files and directories safely using glob patterns\",\n\tfind: \"Fast file search using fd with glob patterns. Respects .gitignore. Use for discovering files across large codebases.\",\n\tsearch: \"Search files with ripgrep (pattern, glob, context options)\",\n\tparallel_ripgrep:\n\t\t\"Run multiple ripgrep searches in parallel, merge overlapping matches into line ranges, and return their content.\",\n\tdiff: \"Inspect git diffs (workspace, staged, or revision ranges)\",\n\tbash: \"Execute bash commands (ls, grep, find, etc.)\",\n\tbackground_tasks:\n\t\t\"Launch and manage long-running commands asynchronously. `start` requires `command` (optional `cwd`, `env`, `shell`, per-task `limits`, and `restart={maxAttempts, delayMs, strategy?, maxDelayMs?, jitterRatio?}`), `stop`/`logs` require `taskId`, and `logs` accepts `lines` (default 40).\",\n\tedit: \"Make surgical edits to files (find exact text and replace)\",\n\twrite: \"Create or overwrite files\",\n\ttodo: 'Produce TodoWrite-style checklists. Provide payload { goal: \"...\", items: [{ content: \"...\", status: \"pending\", priority: \"medium\" }] } (items may also be a JSON string) and optionally supply updates [{ id: \"...\", status: \"completed\" }] to check off existing tasks.',\n\twebsearch:\n\t\t'Search the web using Exa AI for real-time information beyond training cutoff. Returns LLM-optimized context by default. Use for: current events (after training cutoff), recent news, company information, research papers. Supports domain filtering (includeDomains: [\"arxiv.org\"]) and categories (category: \"research paper\").',\n\tcodesearch:\n\t\t'Search billions of GitHub repos, docs, and Stack Overflow for code examples. ALWAYS use this FIRST for any programming question before searching local files. Returns working code snippets with source URLs. Examples: \"how to use Exa search in python\", \"React hooks patterns\", \"Express middleware authentication\".',\n\twebfetch:\n\t\t\"Fetch and extract content from specific URLs. More efficient than websearch when URL is known. Use for reading documentation pages, articles, or when you have specific URLs to analyze.\",\n\tstatus: \"Get git repository status and information\",\n\tgh_pr: \"Manage GitHub Pull Requests using gh CLI\",\n\tgh_issue: \"Manage GitHub Issues using gh CLI\",\n\tgh_repo: \"Manage GitHub Repositories using gh CLI\",\n\tpipeline_search_contacts:\n\t\t\"Search Pipeline CRM contacts through the internal evalops Pipeline service. Requires PIPELINE_API_URL and PIPELINE_SERVICE_TOKEN.\",\n\tpipeline_search_deals:\n\t\t\"Search Pipeline CRM deals through the internal evalops Pipeline service. Requires PIPELINE_API_URL and PIPELINE_SERVICE_TOKEN.\",\n\tpipeline_create_signal:\n\t\t\"Create a signal in Pipeline CRM through the internal evalops Pipeline service. Requires PIPELINE_API_URL and PIPELINE_SERVICE_TOKEN.\",\n\tpipeline_log_activity:\n\t\t\"Log a customer, deal, or company activity in Pipeline CRM through the internal evalops Pipeline service. Requires PIPELINE_API_URL and PIPELINE_SERVICE_TOKEN.\",\n};\n\nfunction buildToolsSection(toolNames: string[]): string {\n\tconst lines = [\"Available tools:\"];\n\tfor (const name of toolNames) {\n\t\tconst desc = TOOL_DESCRIPTIONS[name];\n\t\tif (desc) {\n\t\t\tlines.push(`- ${name}: ${desc}`);\n\t\t}\n\t}\n\treturn lines.join(\"\\n\");\n}\n\nexport function resolveSystemPromptOverride(value?: string): string | null {\n\tif (!value) return null;\n\tif (existsSync(value)) {\n\t\ttry {\n\t\t\treturn readFileSync(value, \"utf-8\");\n\t\t} catch (error) {\n\t\t\tconsole.error(\n\t\t\t\tchalk.yellow(\n\t\t\t\t\t`Warning: Could not read system prompt file ${value}: ${error}`,\n\t\t\t\t),\n\t\t\t);\n\t\t\treturn null;\n\t\t}\n\t}\n\treturn value;\n}\n\nfunction resolvePromptInputPath(value?: string): string | null {\n\tif (!value || !existsSync(value)) {\n\t\treturn null;\n\t}\n\treturn resolve(value);\n}\n\nexport function resolveExplicitSystemPromptSourcePaths(\n\tcustomPrompt?: string,\n\tappendPrompt?: string,\n): string[] {\n\treturn [\n\t\t...new Set(\n\t\t\t[customPrompt, appendPrompt]\n\t\t\t\t.map((value) => resolvePromptInputPath(value))\n\t\t\t\t.filter((value): value is string => typeof value === \"string\"),\n\t\t),\n\t];\n}\n\nfunction loadAppendSystemPrompt(\n\tcwd: string,\n\tprofileName?: string,\n\tcliOverrides?: Partial<ComposerConfig>,\n): string | null {\n\tconst appendSystemPath = resolveLoadedAppendSystemPromptPath(\n\t\tcwd,\n\t\tprofileName,\n\t\tcliOverrides,\n\t);\n\treturn appendSystemPath\n\t\t? resolveSystemPromptOverride(appendSystemPath)\n\t\t: null;\n}\n\ninterface RuntimeConstraintDetectionOptions {\n\tcwd?: string;\n\tsandboxMode?: string | null;\n\tsandboxEnabled?: boolean;\n\treadOnly?: boolean;\n\tenv?: Record<string, string | undefined>;\n}\n\nexport interface FinalizeSystemPromptOptions {\n\truntimeConstraints?: RuntimeConstraintContext | null;\n\tpromptContextManifest?: PromptProjectDocManifest;\n\tprofileName?: string;\n\tcliOverrides?: Partial<ComposerConfig>;\n}\n\nfunction readEnvFlag(\n\tenv: Record<string, string | undefined>,\n\tname: string,\n): boolean {\n\tconst value = env[name]?.trim().toLowerCase();\n\treturn value === \"1\" || value === \"true\" || value === \"yes\" || value === \"on\";\n}\n\nfunction normalizeNetworkAccess(\n\tvalue?: string,\n): RuntimeNetworkAccess | undefined {\n\tconst normalized = value?.trim().toLowerCase();\n\tif (!normalized) {\n\t\treturn undefined;\n\t}\n\tif (\n\t\tnormalized === \"disabled\" ||\n\t\tnormalized === \"offline\" ||\n\t\tnormalized === \"none\" ||\n\t\tnormalized === \"no-network\"\n\t) {\n\t\treturn \"disabled\";\n\t}\n\tif (\n\t\tnormalized === \"restricted\" ||\n\t\tnormalized === \"firewall\" ||\n\t\tnormalized === \"gated\"\n\t) {\n\t\treturn \"restricted\";\n\t}\n\tif (normalized === \"available\" || normalized === \"enabled\") {\n\t\treturn \"available\";\n\t}\n\treturn \"unknown\";\n}\n\nfunction resolveGitDirectoryAtPath(path: string): string | null {\n\tconst gitPath = join(path, \".git\");\n\ttry {\n\t\tconst gitStat = statSync(gitPath);\n\t\tif (gitStat.isDirectory()) {\n\t\t\treturn gitPath;\n\t\t}\n\t\tif (!gitStat.isFile()) {\n\t\t\treturn null;\n\t\t}\n\t\tconst gitFile = readFileSync(gitPath, \"utf8\");\n\t\tconst match = /^gitdir:\\s*(.+?)\\s*$/m.exec(gitFile);\n\t\tconst gitDir = match?.[1];\n\t\tif (!gitDir) {\n\t\t\treturn null;\n\t\t}\n\t\treturn resolve(path, gitDir);\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nfunction resolveGitDirectory(cwd: string): string | null {\n\tlet current = resolve(cwd);\n\twhile (true) {\n\t\tconst gitDir = resolveGitDirectoryAtPath(current);\n\t\tif (gitDir) {\n\t\t\treturn gitDir;\n\t\t}\n\t\tconst parent = dirname(current);\n\t\tif (parent === current) {\n\t\t\treturn null;\n\t\t}\n\t\tcurrent = parent;\n\t}\n}\n\nfunction resolveGitCommonDirectory(gitDir: string): string {\n\ttry {\n\t\tconst commonDir = readFileSync(join(gitDir, \"commondir\"), \"utf8\").trim();\n\t\tif (commonDir) {\n\t\t\treturn resolve(gitDir, commonDir);\n\t\t}\n\t} catch {\n\t\t// Older/non-worktree repositories do not have a commondir file.\n\t}\n\treturn gitDir;\n}\n\nfunction isShallowGitCheckout(cwd: string): boolean {\n\tconst gitDir = resolveGitDirectory(cwd);\n\tif (!gitDir) {\n\t\treturn false;\n\t}\n\tconst commonGitDir = resolveGitCommonDirectory(gitDir);\n\treturn (\n\t\texistsSync(join(commonGitDir, \"shallow\")) ||\n\t\texistsSync(join(gitDir, \"shallow\"))\n\t);\n}\n\nexport function detectRuntimeConstraintContext(\n\toptions: RuntimeConstraintDetectionOptions = {},\n): RuntimeConstraintContext {\n\tconst cwd = options.cwd ?? process.cwd();\n\tconst env = options.env ?? process.env;\n\tconst sandboxMode =\n\t\toptions.sandboxMode ??\n\t\tenv.MAESTRO_SANDBOX_MODE ??\n\t\tenv.CODEX_SANDBOX_MODE ??\n\t\tenv.MAESTRO_SANDBOX ??\n\t\tnull;\n\tconst networkAccess =\n\t\treadEnvFlag(env, \"MAESTRO_OFFLINE_EVAL\") ||\n\t\treadEnvFlag(env, \"CODEX_OFFLINE_EVAL\")\n\t\t\t? \"disabled\"\n\t\t\t: normalizeNetworkAccess(\n\t\t\t\t\tenv.MAESTRO_NETWORK_ACCESS ?? env.CODEX_NETWORK_ACCESS,\n\t\t\t\t);\n\n\treturn {\n\t\tsandboxMode,\n\t\tsandboxEnabled: options.sandboxEnabled ?? isSandboxModeEnabled(sandboxMode),\n\t\tisShallowGitCheckout: isShallowGitCheckout(cwd),\n\t\treadOnly:\n\t\t\toptions.readOnly ??\n\t\t\t(readEnvFlag(env, \"MAESTRO_READ_ONLY\") ||\n\t\t\t\treadEnvFlag(env, \"CODEX_READ_ONLY\")),\n\t\tnetworkAccess,\n\t\thostedRunner:\n\t\t\treadEnvFlag(env, \"MAESTRO_HOSTED_RUNNER\") ||\n\t\t\tenv.MAESTRO_RUNNER_KIND?.trim().toLowerCase() === \"hosted\",\n\t\tfirewallRestricted:\n\t\t\treadEnvFlag(env, \"MAESTRO_FIREWALL_RESTRICTED\") ||\n\t\t\treadEnvFlag(env, \"CODEX_FIREWALL_RESTRICTED\"),\n\t\trunnerImage: env.MAESTRO_RUNNER_IMAGE ?? null,\n\t};\n}\n\nfunction buildGuidelines(toolNames: Set<string>, currentYear: number): string {\n\tconst guidelines: string[] = [];\n\n\tguidelines.push(\n\t\t\"You can emit multiple tool calls in a single turn; the runtime will execute independent calls in parallel. No batch tool is needed—just include separate tool calls when parallelism helps.\",\n\t);\n\tguidelines.push(\n\t\t\"Emit independent safe tool calls together when their inputs are known, including read-only inspections, trusted MCP reads, and disjoint file mutations with explicit paths.\",\n\t);\n\tguidelines.push(\n\t\t\"Avoid one-tool-per-turn inspection chains: when the next few read/list/search calls are already known and independent, emit them together.\",\n\t);\n\tguidelines.push(...buildSearchGuidelines(toolNames, currentYear));\n\n\tif (toolNames.has(\"bash\")) {\n\t\tguidelines.push(\n\t\t\t\"Always use bash tool for file operations like ls, grep, find\",\n\t\t);\n\t\tguidelines.push(\n\t\t\t\"Destructive commands (e.g., `rm -rf`, `mkfs`, `dd if=/dev/zero`, `chmod 000`) always require manual approval—even through `background_tasks`—so only run them when absolutely necessary\",\n\t\t);\n\t}\n\n\tif (toolNames.has(\"background_tasks\")) {\n\t\tguidelines.push(\n\t\t\t\"Running `background_tasks` with `shell: true` requires approval because it enables pipes/redirects/globbing; prefer direct exec unless shell mode is unavoidable\",\n\t\t);\n\t}\n\n\tif (toolNames.has(\"read\")) {\n\t\tguidelines.push(\"Use read to examine files before editing\");\n\t}\n\n\tif (toolNames.has(\"edit\")) {\n\t\tguidelines.push(\n\t\t\t\"Use edit for precise changes (old text must match exactly)\",\n\t\t);\n\t}\n\n\tif (toolNames.has(\"write\")) {\n\t\tguidelines.push(\"Use write only for new files or complete rewrites\");\n\t}\n\n\tif (toolNames.has(\"list\")) {\n\t\tguidelines.push(\n\t\t\t\"Use list to inspect directory structures when you only need filenames\",\n\t\t);\n\t}\n\n\tif (toolNames.has(\"find\")) {\n\t\tguidelines.push(\n\t\t\t\"Use find for fast file discovery with glob patterns across large codebases\",\n\t\t);\n\t}\n\n\tif (toolNames.has(\"search\")) {\n\t\tguidelines.push(\n\t\t\t\"Use search to locate relevant files or symbols before editing\",\n\t\t);\n\t}\n\n\tif (toolNames.has(\"diff\")) {\n\t\tguidelines.push(\n\t\t\t\"Use diff to review pending changes before summarizing or committing\",\n\t\t);\n\t}\n\n\t// Only add validation guidance if mutation tools are available\n\tif (\n\t\ttoolNames.has(\"edit\") ||\n\t\ttoolNames.has(\"write\") ||\n\t\ttoolNames.has(\"bash\")\n\t) {\n\t\tguidelines.push(\n\t\t\t\"After finishing any non-trivial set of code changes, run all required project validators (lint, tests, evals, etc.) before summarizing or committing unless the user explicitly waives them\",\n\t\t);\n\t}\n\n\tif (toolNames.has(\"todo\")) {\n\t\tguidelines.push(\n\t\t\t\"Use todo when you need a structured task list; supply a goal plus an items array shaped like TodoWrite entries or updates for existing tasks\",\n\t\t);\n\t}\n\n\t// Always include these\n\tguidelines.push(\"Be concise in your responses\");\n\tguidelines.push(\"Show file paths clearly when working with files\");\n\tguidelines.push(\n\t\t\"When evaluating new features, use precise, technical language\",\n\t);\n\tguidelines.push(\n\t\t'When the user specifies an explicit output token target such as \"+500k\", \"use 2M tokens\", or \"spend 1B tokens\", keep working until you approach that target productively instead of stopping early.',\n\t);\n\tguidelines.push(\n\t\t\"Length limits: keep text between tool calls to <=25 words. Keep final responses to <=100 words unless the task requires more detail.\",\n\t);\n\tguidelines.push(\"Avoid unnecessary emojis unless humor improves clarity\");\n\tguidelines.push(\n\t\t\"Do NOT create summary documents or CHANGELOG files unless explicitly requested by the user\",\n\t);\n\n\treturn `Guidelines:\\n${guidelines.map((g) => `- ${g}`).join(\"\\n\")}`;\n}\n\nexport interface ContextFile {\n\tpath: string;\n\tcontent: string;\n}\n\nexport function truncateUtf8(\n\tbuffer: Buffer,\n\tmaxBytes: number,\n): {\n\tcontent: string;\n\tbytes: number;\n} {\n\tlet end = Math.min(maxBytes, buffer.length);\n\tif (end === 0) {\n\t\treturn { content: \"\", bytes: 0 };\n\t}\n\n\tlet start = end - 1;\n\twhile (start >= 0) {\n\t\tconst byte = buffer[start];\n\t\tif (byte === undefined) {\n\t\t\treturn { content: \"\", bytes: 0 };\n\t\t}\n\t\tif ((byte & 0b1100_0000) !== 0b1000_0000) {\n\t\t\tbreak;\n\t\t}\n\t\tstart -= 1;\n\t}\n\n\tif (start < 0) {\n\t\treturn { content: \"\", bytes: 0 };\n\t}\n\n\tconst lead = buffer[start];\n\tif (lead === undefined) {\n\t\treturn { content: \"\", bytes: 0 };\n\t}\n\tlet expected = 1;\n\tif ((lead & 0b1000_0000) === 0) {\n\t\texpected = 1;\n\t} else if ((lead & 0b1110_0000) === 0b1100_0000) {\n\t\texpected = 2;\n\t} else if ((lead & 0b1111_0000) === 0b1110_0000) {\n\t\texpected = 3;\n\t} else if ((lead & 0b1111_1000) === 0b1111_0000) {\n\t\texpected = 4;\n\t} else {\n\t\tend = start;\n\t}\n\n\tif (start + expected > end) {\n\t\tend = start;\n\t}\n\n\tconst slice = buffer.slice(0, Math.max(0, end));\n\treturn { content: slice.toString(\"utf-8\"), bytes: slice.length };\n}\n\nexport function loadProjectContextFiles(\n\tcwdOverride?: string,\n\toptions: { config?: ComposerConfig } = {},\n): ContextFile[] {\n\treturn loadPromptProjectDocManifest(cwdOverride, options.config).entries.map(\n\t\t(entry) => ({\n\t\t\tpath: entry.path,\n\t\t\tcontent: entry.content,\n\t\t}),\n\t);\n}\n\nfunction formatProjectContextFile(\n\tfile: ContextFile | PromptProjectDocManifestEntry,\n): string {\n\tconst filename = basename(file.path);\n\tconst dir = dirname(file.path);\n\tconst content = escapeXml(file.content.trimEnd());\n\treturn [\n\t\t`# ${filename} instructions for ${dir}`,\n\t\t\"\",\n\t\t\"<INSTRUCTIONS>\",\n\t\tcontent,\n\t\t\"</INSTRUCTIONS>\",\n\t\t\"\",\n\t\t\"\",\n\t].join(\"\\n\");\n}\n\nfunction escapeXml(str: string): string {\n\treturn str\n\t\t.replace(/&/g, \"&\")\n\t\t.replace(/</g, \"<\")\n\t\t.replace(/>/g, \">\")\n\t\t.replace(/\"/g, \""\")\n\t\t.replace(/'/g, \"'\");\n}\n\n// Default tool names when no filter is applied\nconst DEFAULT_TOOL_NAMES = [\n\t\"read\",\n\t\"list\",\n\t\"find\",\n\t\"search\",\n\t\"diff\",\n\t\"bash\",\n\t\"background_tasks\",\n\t\"edit\",\n\t\"write\",\n\t\"todo\",\n\t\"websearch\",\n\t\"codesearch\",\n\t\"webfetch\",\n\t\"status\",\n\t\"gh_pr\",\n\t\"gh_issue\",\n\t\"gh_repo\",\n\t\"pipeline_search_contacts\",\n\t\"pipeline_search_deals\",\n\t\"pipeline_create_signal\",\n\t\"pipeline_log_activity\",\n];\n\nfunction formatCurrentDateTime(): string {\n\treturn new Date().toLocaleString(\"en-US\", {\n\t\tweekday: \"long\",\n\t\tyear: \"numeric\",\n\t\tmonth: \"long\",\n\t\tday: \"numeric\",\n\t\thour: \"2-digit\",\n\t\tminute: \"2-digit\",\n\t\tsecond: \"2-digit\",\n\t\ttimeZoneName: \"short\",\n\t});\n}\n\nconst GUARDED_WORKSPACE_SCAN_IGNORES = new Set([\n\t\".git\",\n\t\".hg\",\n\t\".svn\",\n\t\"node_modules\",\n\t\"dist\",\n\t\"build\",\n\t\"coverage\",\n\t\".next\",\n\t\".turbo\",\n\t\".nx\",\n\t\".cache\",\n\t\"tmp\",\n]);\n\nconst DEFAULT_GUARDED_CATEGORY_BY_KEY = new Map(\n\tDEFAULT_GUARDED_FILE_RULES.map((rule) => [rule.key, rule.category]),\n);\n\nconst GUARDED_WORKSPACE_ENTRY_KEYS = new Map<string, string>([\n\t[\".cursor\", \"cursor-config\"],\n\t[\".windsurf\", \"windsurf-config\"],\n\t[\".idea\", \"jetbrains-project-config\"],\n\t[\".amp\", \"amp-settings\"],\n\t[\"amp.json\", \"amp-settings\"],\n\t[\".ssh\", \"ssh-gpg-keys\"],\n\t[\".gnupg\", \"ssh-gpg-keys\"],\n]);\n\ninterface GuardedAbsolutePathRule {\n\tkey: string;\n\tpath: string;\n\tmatch: \"exact\" | \"prefix\";\n}\n\nfunction normalizeGuardScanPath(path: string): string {\n\treturn resolve(path).replace(/\\\\/g, \"/\");\n}\n\nfunction addGuardedCategory(categories: Set<string>, key: string): void {\n\tconst category = DEFAULT_GUARDED_CATEGORY_BY_KEY.get(key);\n\tif (category) {\n\t\tcategories.add(category);\n\t}\n}\n\nfunction buildGuardedAbsolutePathRules(\n\tenv: Record<string, string | undefined> = process.env,\n): GuardedAbsolutePathRule[] {\n\tconst home = normalizeGuardScanPath(homedir());\n\tconst prefix = (key: string, path: string): GuardedAbsolutePathRule => ({\n\t\tkey,\n\t\tpath: normalizeGuardScanPath(path),\n\t\tmatch: \"prefix\",\n\t});\n\tconst exact = (key: string, path: string): GuardedAbsolutePathRule => ({\n\t\tkey,\n\t\tpath: normalizeGuardScanPath(path),\n\t\tmatch: \"exact\",\n\t});\n\tconst envPrefix = (\n\t\tkey: string,\n\t\tname: string,\n\t\tchild: string,\n\t): GuardedAbsolutePathRule[] => {\n\t\tconst base = (env[name] ?? env[name.toUpperCase()])?.trim();\n\t\treturn base ? [prefix(key, join(base, child))] : [];\n\t};\n\n\treturn [\n\t\tprefix(\"cursor-config\", join(home, \".cursor\")),\n\t\tprefix(\"cursor-config\", join(home, \"Library/Application Support/Cursor\")),\n\t\tprefix(\"cursor-config\", join(home, \".config/Cursor\")),\n\t\t...envPrefix(\"cursor-config\", \"APPDATA\", \"Cursor\"),\n\t\tprefix(\"windsurf-config\", join(home, \".codeium/windsurf\")),\n\t\tprefix(\n\t\t\t\"windsurf-config\",\n\t\t\tjoin(home, \"Library/Application Support/Windsurf\"),\n\t\t),\n\t\tprefix(\"windsurf-config\", join(home, \".config/Windsurf\")),\n\t\tprefix(\"windsurf-config\", \"/Library/Application Support/Windsurf\"),\n\t\tprefix(\"windsurf-config\", \"/etc/windsurf\"),\n\t\t...envPrefix(\"windsurf-config\", \"APPDATA\", \"Windsurf\"),\n\t\t...envPrefix(\"windsurf-config\", \"LOCALAPPDATA\", \"Windsurf\"),\n\t\t...envPrefix(\"windsurf-config\", \"ProgramData\", \"Windsurf\"),\n\t\tprefix(\"antigravity-config\", join(home, \".gemini\")),\n\t\tprefix(\n\t\t\t\"jetbrains-app-config\",\n\t\t\tjoin(home, \"Library/Application Support/JetBrains\"),\n\t\t),\n\t\tprefix(\"jetbrains-app-config\", join(home, \".config/JetBrains\")),\n\t\tprefix(\"jetbrains-app-config\", join(home, \".local/share/JetBrains\")),\n\t\t...envPrefix(\"jetbrains-app-config\", \"APPDATA\", \"JetBrains\"),\n\t\t...envPrefix(\"jetbrains-app-config\", \"LOCALAPPDATA\", \"JetBrains\"),\n\t\tprefix(\"neovim-config\", join(home, \".config/nvim\")),\n\t\tprefix(\"neovim-config\", join(home, \".local/share/nvim\")),\n\t\tprefix(\"neovim-config\", join(home, \".local/state/nvim\")),\n\t\texact(\"shell-config\", join(home, \".bashrc\")),\n\t\texact(\"shell-config\", join(home, \".zshrc\")),\n\t\texact(\"shell-config\", join(home, \".cshrc\")),\n\t\texact(\"shell-config\", join(home, \".tcshrc\")),\n\t\texact(\"shell-config\", join(home, \".config/fish/config.fish\")),\n\t\tprefix(\"shell-config\", join(home, \".config/fish/conf.d\")),\n\t\tprefix(\"ssh-gpg-keys\", join(home, \".ssh\")),\n\t\tprefix(\"ssh-gpg-keys\", join(home, \".gnupg\")),\n\t];\n}\n\nfunction matchesGuardedAbsolutePath(\n\tpath: string,\n\trule: GuardedAbsolutePathRule,\n): boolean {\n\tif (rule.match === \"exact\") {\n\t\treturn path === rule.path;\n\t}\n\treturn path === rule.path || path.startsWith(`${rule.path}/`);\n}\n\nfunction collectGuardedWorkspaceCategories(\n\tcwd: string,\n\toptions: { maxEntries?: number } = {},\n): string[] {\n\tconst maxEntries = options.maxEntries ?? 5000;\n\tconst categories = new Set<string>();\n\tconst absoluteRules = buildGuardedAbsolutePathRules();\n\tconst stack = [cwd];\n\tlet entriesVisited = 0;\n\n\twhile (stack.length > 0 && entriesVisited < maxEntries) {\n\t\tconst dir = stack.pop();\n\t\tif (!dir) break;\n\n\t\tlet entries: Dirent[];\n\t\ttry {\n\t\t\tentries = readdirSync(dir, { withFileTypes: true });\n\t\t} catch {\n\t\t\tcontinue;\n\t\t}\n\n\t\tfor (const entry of entries) {\n\t\t\tif (entriesVisited >= maxEntries) break;\n\t\t\tentriesVisited += 1;\n\t\t\tconst path = join(dir, entry.name);\n\t\t\tconst normalizedPath = normalizeGuardScanPath(path);\n\t\t\tconst entryKey = GUARDED_WORKSPACE_ENTRY_KEYS.get(entry.name);\n\t\t\tif (entryKey) {\n\t\t\t\taddGuardedCategory(categories, entryKey);\n\t\t\t}\n\t\t\tfor (const rule of absoluteRules) {\n\t\t\t\tif (matchesGuardedAbsolutePath(normalizedPath, rule)) {\n\t\t\t\t\taddGuardedCategory(categories, rule.key);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tentry.isDirectory() &&\n\t\t\t\t!GUARDED_WORKSPACE_SCAN_IGNORES.has(entry.name)\n\t\t\t) {\n\t\t\t\tstack.push(path);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn DEFAULT_GUARDED_FILE_RULES.map((rule) => rule.category).filter(\n\t\t(category) => categories.has(category),\n\t);\n}\n\nfunction buildGuardedWorkspacePromptFragment(cwd: string): string | null {\n\tconst categories = collectGuardedWorkspaceCategories(cwd);\n\tif (categories.length === 0) {\n\t\treturn null;\n\t}\n\n\tconst categoryText = categories.join(\", \");\n\treturn [\n\t\t\"# Guarded Workspace Paths\",\n\t\t\"\",\n\t\t`This workspace contains paths covered by Maestro's default guarded-files policy: ${categoryText}.`,\n\t\t\"Ask for explicit user approval before attempting to read, list, search, execute against, or modify these guarded paths.\",\n\t].join(\"\\n\");\n}\n\nexport function buildFileCitationPromptFragment(cwd = process.cwd()): string {\n\tconst examplePath = join(cwd, \"src/auth/middleware.ts\");\n\tconst exampleUri = `${pathToFileURL(examplePath).href}#L42`;\n\n\treturn [\n\t\t\"# File Citations\",\n\t\t\"\",\n\t\t\"When mentioning a workspace file in any user-facing response, link it using Markdown with a `file:///` URI so every surface can make the reference clickable.\",\n\t\t\"Prefer the displayed text users expect to read, such as `src/auth/middleware.ts`, and percent-encode spaces and other URI characters in the link target.\",\n\t\t\"Include known line references as URL fragments, such as `#L42`, `#L42-L48`, or `#L42C8`.\",\n\t\t\"At GitHub comment boundaries, use repository blob URLs instead of local `file:///` URIs when repository metadata is available.\",\n\t\t`Good: See [src/auth/middleware.ts](${exampleUri}) for the validation logic.`,\n\t\t\"Bad: See src/auth/middleware.ts for the validation logic.\",\n\t].join(\"\\n\");\n}\n\nexport function buildBundledSystemPromptBase(toolNames?: string[]): string {\n\tconst currentYear = new Date().getFullYear();\n\tconst activeToolNames = toolNames ?? DEFAULT_TOOL_NAMES;\n\tconst toolNameSet = new Set(activeToolNames);\n\n\treturn `You are an expert coding assistant. You help users with coding tasks by reading files, executing commands, editing code, and writing new files.\n\n${buildToolsSection(activeToolNames)}\n\n${buildGuidelines(toolNameSet, currentYear)}`;\n}\n\nexport function finalizeSystemPrompt(\n\tbasePrompt: string,\n\tappendPrompt?: string,\n\tcwd = process.cwd(),\n\toptions: FinalizeSystemPromptOptions = {},\n): string {\n\tconst appendSource =\n\t\tresolveSystemPromptOverride(appendPrompt) ??\n\t\tloadAppendSystemPrompt(cwd, options.profileName, options.cliOverrides);\n\tconst appendText = appendSource?.trim();\n\tlet prompt = basePrompt;\n\tconst contextFiles =\n\t\toptions.promptContextManifest?.entries ?? loadProjectContextFiles(cwd);\n\tif (contextFiles.length > 0) {\n\t\tprompt += \"\\n\\n# Project Context\\n\\n\";\n\t\tprompt += \"The following project context files have been loaded:\\n\\n\";\n\t\tfor (const file of contextFiles) {\n\t\t\tprompt += formatProjectContextFile(file);\n\t\t}\n\t}\n\n\tconst guardedWorkspaceFragment = buildGuardedWorkspacePromptFragment(cwd);\n\tif (guardedWorkspaceFragment) {\n\t\tprompt += `\\n\\n${guardedWorkspaceFragment}\\n`;\n\t}\n\n\tconst runtimeConstraintPrompt = buildRuntimeConstraintPrompt(\n\t\toptions.runtimeConstraints,\n\t);\n\tif (runtimeConstraintPrompt) {\n\t\tprompt += `\\n\\n${runtimeConstraintPrompt}\\n`;\n\t}\n\n\tprompt += `\\n\\n${buildFileCitationPromptFragment(cwd)}\\n`;\n\n\tif (appendText) {\n\t\tprompt += \"\\n\\n# Additional System Instructions\\n\\n\";\n\t\tprompt += `${appendText}\\n\\n`;\n\t}\n\n\tprompt += `\\nCurrent date and time: ${formatCurrentDateTime()}`;\n\tprompt += `\\nCurrent working directory: ${cwd}`;\n\n\treturn prompt;\n}\n\nexport function buildSystemPrompt(\n\tcustomPrompt?: string,\n\ttoolNames?: string[],\n\tappendPrompt?: string,\n\toptions?: FinalizeSystemPromptOptions,\n): string {\n\tconst promptSource =\n\t\tresolveSystemPromptOverride(customPrompt) ??\n\t\tbuildBundledSystemPromptBase(toolNames);\n\treturn finalizeSystemPrompt(\n\t\tpromptSource,\n\t\tappendPrompt,\n\t\tprocess.cwd(),\n\t\toptions,\n\t);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"system-prompt.js","sourceRoot":"","sources":["../../src/cli/system-prompt.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, readFileSync, readdirSync, statSync } from \"node:fs\";\nimport type { Dirent } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { basename, dirname, join, resolve } from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport {\n\ttype RuntimeConstraintContext,\n\ttype RuntimeNetworkAccess,\n\tbuildRuntimeConstraintPrompt,\n\tisSandboxModeEnabled,\n} from \"@evalops/contracts\";\nimport chalk from \"chalk\";\nimport { buildSearchGuidelines } from \"../agent/search-guidance.js\";\nimport {\n\ttype ComposerConfig,\n\ttype PromptProjectDocManifest,\n\ttype PromptProjectDocManifestEntry,\n\tloadPromptProjectDocManifest,\n\tresolveLoadedAppendSystemPromptPath,\n} from \"../config/index.js\";\nimport { DEFAULT_GUARDED_FILE_RULES } from \"../safety/guarded-files.js\";\n\n// Tool descriptions for dynamic system prompt generation\nconst TOOL_DESCRIPTIONS: Record<string, string> = {\n\tread: \"Read file contents\",\n\tlist: \"List files and directories safely using glob patterns\",\n\tfind: \"Fast file search using fd with glob patterns. Respects .gitignore. Use for discovering files across large codebases.\",\n\tsearch: \"Search files with ripgrep (pattern, glob, context options)\",\n\tparallel_ripgrep:\n\t\t\"Run multiple ripgrep searches in parallel, merge overlapping matches into line ranges, and return their content.\",\n\tdiff: \"Inspect git diffs (workspace, staged, or revision ranges)\",\n\tbash: \"Execute bash commands (ls, grep, find, etc.)\",\n\tbackground_tasks:\n\t\t\"Launch and manage long-running commands asynchronously. `start` requires `command` (optional `cwd`, `env`, `shell`, per-task `limits`, and `restart={maxAttempts, delayMs, strategy?, maxDelayMs?, jitterRatio?}`), `stop`/`logs` require `taskId`, and `logs` accepts `lines` (default 40).\",\n\tedit: \"Make surgical edits to files (find exact text and replace)\",\n\twrite: \"Create or overwrite files\",\n\ttodo: 'Produce TodoWrite-style checklists. Provide payload { goal: \"...\", items: [{ content: \"...\", status: \"pending\", priority: \"medium\" }] } (items may also be a JSON string) and optionally supply updates [{ id: \"...\", status: \"completed\" }] to check off existing tasks.',\n\twebsearch:\n\t\t'Search the web using Exa AI for real-time information beyond training cutoff. Returns LLM-optimized context by default. Use for: current events (after training cutoff), recent news, company information, research papers. Supports domain filtering (includeDomains: [\"arxiv.org\"]) and categories (category: \"research paper\").',\n\tcodesearch:\n\t\t'Search billions of GitHub repos, docs, and Stack Overflow for code examples. ALWAYS use this FIRST for any programming question before searching local files. Returns working code snippets with source URLs. Examples: \"how to use Exa search in python\", \"React hooks patterns\", \"Express middleware authentication\".',\n\twebfetch:\n\t\t\"Fetch and extract content from specific URLs. More efficient than websearch when URL is known. Use for reading documentation pages, articles, or when you have specific URLs to analyze.\",\n\tstatus: \"Get git repository status and information\",\n\tgh_pr: \"Manage GitHub Pull Requests using gh CLI\",\n\tgh_issue: \"Manage GitHub Issues using gh CLI\",\n\tgh_repo: \"Manage GitHub Repositories using gh CLI\",\n\tpipeline_search_contacts:\n\t\t\"Search Pipeline CRM contacts through the internal evalops Pipeline service. Requires PIPELINE_API_URL and PIPELINE_SERVICE_TOKEN.\",\n\tpipeline_search_deals:\n\t\t\"Search Pipeline CRM deals through the internal evalops Pipeline service. Requires PIPELINE_API_URL and PIPELINE_SERVICE_TOKEN.\",\n\tpipeline_create_signal:\n\t\t\"Create a signal in Pipeline CRM through the internal evalops Pipeline service. Requires PIPELINE_API_URL and PIPELINE_SERVICE_TOKEN.\",\n\tpipeline_log_activity:\n\t\t\"Log a customer, deal, or company activity in Pipeline CRM through the internal evalops Pipeline service. Requires PIPELINE_API_URL and PIPELINE_SERVICE_TOKEN.\",\n};\n\nfunction buildToolsSection(toolNames: string[]): string {\n\tconst lines = [\"Available tools:\"];\n\tfor (const name of toolNames) {\n\t\tconst desc = TOOL_DESCRIPTIONS[name];\n\t\tif (desc) {\n\t\t\tlines.push(`- ${name}: ${desc}`);\n\t\t}\n\t}\n\treturn lines.join(\"\\n\");\n}\n\nexport function resolveSystemPromptOverride(value?: string): string | null {\n\tif (!value) return null;\n\tif (existsSync(value)) {\n\t\ttry {\n\t\t\treturn readFileSync(value, \"utf-8\");\n\t\t} catch (error) {\n\t\t\tconsole.error(\n\t\t\t\tchalk.yellow(\n\t\t\t\t\t`Warning: Could not read system prompt file ${value}: ${error}`,\n\t\t\t\t),\n\t\t\t);\n\t\t\treturn null;\n\t\t}\n\t}\n\treturn value;\n}\n\nfunction resolvePromptInputPath(value?: string): string | null {\n\tif (!value || !existsSync(value)) {\n\t\treturn null;\n\t}\n\treturn resolve(value);\n}\n\nexport function resolveExplicitSystemPromptSourcePaths(\n\tcustomPrompt?: string,\n\tappendPrompt?: string,\n): string[] {\n\treturn [\n\t\t...new Set(\n\t\t\t[customPrompt, appendPrompt]\n\t\t\t\t.map((value) => resolvePromptInputPath(value))\n\t\t\t\t.filter((value): value is string => typeof value === \"string\"),\n\t\t),\n\t];\n}\n\nfunction loadAppendSystemPrompt(\n\tcwd: string,\n\tprofileName?: string,\n\tcliOverrides?: Partial<ComposerConfig>,\n): string | null {\n\tconst appendSystemPath = resolveLoadedAppendSystemPromptPath(\n\t\tcwd,\n\t\tprofileName,\n\t\tcliOverrides,\n\t);\n\treturn appendSystemPath\n\t\t? resolveSystemPromptOverride(appendSystemPath)\n\t\t: null;\n}\n\ninterface RuntimeConstraintDetectionOptions {\n\tcwd?: string;\n\tsandboxMode?: string | null;\n\tsandboxEnabled?: boolean;\n\treadOnly?: boolean;\n\tenv?: Record<string, string | undefined>;\n}\n\nexport interface FinalizeSystemPromptOptions {\n\truntimeConstraints?: RuntimeConstraintContext | null;\n\tpromptContextManifest?: PromptProjectDocManifest;\n\tprofileName?: string;\n\tcliOverrides?: Partial<ComposerConfig>;\n}\n\nfunction readEnvFlag(\n\tenv: Record<string, string | undefined>,\n\tname: string,\n): boolean {\n\tconst value = env[name]?.trim().toLowerCase();\n\treturn value === \"1\" || value === \"true\" || value === \"yes\" || value === \"on\";\n}\n\nfunction normalizeNetworkAccess(\n\tvalue?: string,\n): RuntimeNetworkAccess | undefined {\n\tconst normalized = value?.trim().toLowerCase();\n\tif (!normalized) {\n\t\treturn undefined;\n\t}\n\tif (\n\t\tnormalized === \"disabled\" ||\n\t\tnormalized === \"offline\" ||\n\t\tnormalized === \"none\" ||\n\t\tnormalized === \"no-network\"\n\t) {\n\t\treturn \"disabled\";\n\t}\n\tif (\n\t\tnormalized === \"restricted\" ||\n\t\tnormalized === \"firewall\" ||\n\t\tnormalized === \"gated\"\n\t) {\n\t\treturn \"restricted\";\n\t}\n\tif (normalized === \"available\" || normalized === \"enabled\") {\n\t\treturn \"available\";\n\t}\n\treturn \"unknown\";\n}\n\nfunction resolveGitDirectoryAtPath(path: string): string | null {\n\tconst gitPath = join(path, \".git\");\n\ttry {\n\t\tconst gitStat = statSync(gitPath);\n\t\tif (gitStat.isDirectory()) {\n\t\t\treturn gitPath;\n\t\t}\n\t\tif (!gitStat.isFile()) {\n\t\t\treturn null;\n\t\t}\n\t\tconst gitFile = readFileSync(gitPath, \"utf8\");\n\t\tconst match = /^gitdir:\\s*(.+?)\\s*$/m.exec(gitFile);\n\t\tconst gitDir = match?.[1];\n\t\tif (!gitDir) {\n\t\t\treturn null;\n\t\t}\n\t\treturn resolve(path, gitDir);\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nfunction resolveGitDirectory(cwd: string): string | null {\n\tlet current = resolve(cwd);\n\twhile (true) {\n\t\tconst gitDir = resolveGitDirectoryAtPath(current);\n\t\tif (gitDir) {\n\t\t\treturn gitDir;\n\t\t}\n\t\tconst parent = dirname(current);\n\t\tif (parent === current) {\n\t\t\treturn null;\n\t\t}\n\t\tcurrent = parent;\n\t}\n}\n\nfunction resolveGitCommonDirectory(gitDir: string): string {\n\ttry {\n\t\tconst commonDir = readFileSync(join(gitDir, \"commondir\"), \"utf8\").trim();\n\t\tif (commonDir) {\n\t\t\treturn resolve(gitDir, commonDir);\n\t\t}\n\t} catch {\n\t\t// Older/non-worktree repositories do not have a commondir file.\n\t}\n\treturn gitDir;\n}\n\nfunction isShallowGitCheckout(cwd: string): boolean {\n\tconst gitDir = resolveGitDirectory(cwd);\n\tif (!gitDir) {\n\t\treturn false;\n\t}\n\tconst commonGitDir = resolveGitCommonDirectory(gitDir);\n\treturn (\n\t\texistsSync(join(commonGitDir, \"shallow\")) ||\n\t\texistsSync(join(gitDir, \"shallow\"))\n\t);\n}\n\nexport function detectRuntimeConstraintContext(\n\toptions: RuntimeConstraintDetectionOptions = {},\n): RuntimeConstraintContext {\n\tconst cwd = options.cwd ?? process.cwd();\n\tconst env = options.env ?? process.env;\n\tconst sandboxMode =\n\t\toptions.sandboxMode ??\n\t\tenv.MAESTRO_SANDBOX_MODE ??\n\t\tenv.CODEX_SANDBOX_MODE ??\n\t\tenv.MAESTRO_SANDBOX ??\n\t\tnull;\n\tconst networkAccess =\n\t\treadEnvFlag(env, \"MAESTRO_OFFLINE_EVAL\") ||\n\t\treadEnvFlag(env, \"CODEX_OFFLINE_EVAL\")\n\t\t\t? \"disabled\"\n\t\t\t: normalizeNetworkAccess(\n\t\t\t\t\tenv.MAESTRO_NETWORK_ACCESS ?? env.CODEX_NETWORK_ACCESS,\n\t\t\t\t);\n\n\treturn {\n\t\tsandboxMode,\n\t\tsandboxEnabled: options.sandboxEnabled ?? isSandboxModeEnabled(sandboxMode),\n\t\tisShallowGitCheckout: isShallowGitCheckout(cwd),\n\t\treadOnly:\n\t\t\toptions.readOnly ??\n\t\t\t(readEnvFlag(env, \"MAESTRO_READ_ONLY\") ||\n\t\t\t\treadEnvFlag(env, \"CODEX_READ_ONLY\")),\n\t\tnetworkAccess,\n\t\thostedRunner:\n\t\t\treadEnvFlag(env, \"MAESTRO_HOSTED_RUNNER\") ||\n\t\t\tenv.MAESTRO_RUNNER_KIND?.trim().toLowerCase() === \"hosted\",\n\t\tfirewallRestricted:\n\t\t\treadEnvFlag(env, \"MAESTRO_FIREWALL_RESTRICTED\") ||\n\t\t\treadEnvFlag(env, \"CODEX_FIREWALL_RESTRICTED\"),\n\t\trunnerImage: env.MAESTRO_RUNNER_IMAGE ?? null,\n\t};\n}\n\nfunction buildGuidelines(toolNames: Set<string>, currentYear: number): string {\n\tconst guidelines: string[] = [];\n\n\tguidelines.push(\n\t\t\"You can emit multiple tool calls in a single turn; the runtime will execute independent calls in parallel. No batch tool is needed—just include separate tool calls when parallelism helps.\",\n\t);\n\tguidelines.push(\n\t\t\"Emit independent safe tool calls together when their inputs are known, including read-only inspections, trusted MCP reads, and disjoint file mutations with explicit paths.\",\n\t);\n\tguidelines.push(\n\t\t\"Avoid one-tool-per-turn inspection chains: when the next few read/list/search calls are already known and independent, emit them together.\",\n\t);\n\tguidelines.push(...buildSearchGuidelines(toolNames, currentYear));\n\n\tif (toolNames.has(\"bash\")) {\n\t\tguidelines.push(\n\t\t\t\"Always use bash tool for file operations like ls, grep, find\",\n\t\t);\n\t\tguidelines.push(\n\t\t\t\"Destructive commands (e.g., `rm -rf`, `mkfs`, `dd if=/dev/zero`, `chmod 000`) always require manual approval—even through `background_tasks`—so only run them when absolutely necessary\",\n\t\t);\n\t}\n\n\tif (toolNames.has(\"background_tasks\")) {\n\t\tguidelines.push(\n\t\t\t\"Running `background_tasks` with `shell: true` requires approval because it enables pipes/redirects/globbing; prefer direct exec unless shell mode is unavoidable\",\n\t\t);\n\t}\n\n\tif (toolNames.has(\"read\")) {\n\t\tguidelines.push(\"Use read to examine files before editing\");\n\t}\n\n\tif (toolNames.has(\"edit\")) {\n\t\tguidelines.push(\n\t\t\t\"Use edit for precise changes (old text must match exactly)\",\n\t\t);\n\t}\n\n\tif (toolNames.has(\"write\")) {\n\t\tguidelines.push(\"Use write only for new files or complete rewrites\");\n\t}\n\n\tif (toolNames.has(\"list\")) {\n\t\tguidelines.push(\n\t\t\t\"Use list to inspect directory structures when you only need filenames\",\n\t\t);\n\t}\n\n\tif (toolNames.has(\"find\")) {\n\t\tguidelines.push(\n\t\t\t\"Use find for fast file discovery with glob patterns across large codebases\",\n\t\t);\n\t}\n\n\tif (toolNames.has(\"search\")) {\n\t\tguidelines.push(\n\t\t\t\"Use search to locate relevant files or symbols before editing\",\n\t\t);\n\t}\n\n\tif (toolNames.has(\"diff\")) {\n\t\tguidelines.push(\n\t\t\t\"Use diff to review pending changes before summarizing or committing\",\n\t\t);\n\t}\n\n\tif (toolNames.has(\"todo\")) {\n\t\tguidelines.push(\n\t\t\t\"Use todo when you need a structured task list; supply a goal plus an items array shaped like TodoWrite entries or updates for existing tasks\",\n\t\t);\n\t}\n\n\t// Always include these\n\tguidelines.push(\"Be concise in your responses\");\n\tguidelines.push(\"Show file paths clearly when working with files\");\n\tguidelines.push(\n\t\t\"When evaluating new features, use precise, technical language\",\n\t);\n\tguidelines.push(\n\t\t'When the user specifies an explicit output token target such as \"+500k\", \"use 2M tokens\", or \"spend 1B tokens\", keep working until you approach that target productively instead of stopping early.',\n\t);\n\tguidelines.push(\n\t\t\"Length limits: keep text between tool calls to <=25 words. Keep final responses to <=100 words unless the task requires more detail.\",\n\t);\n\tguidelines.push(\"Avoid unnecessary emojis unless humor improves clarity\");\n\tguidelines.push(\n\t\t\"Do NOT create summary documents or CHANGELOG files unless explicitly requested by the user\",\n\t);\n\n\treturn `Guidelines:\\n${guidelines.map((g) => `- ${g}`).join(\"\\n\")}`;\n}\n\nexport interface ContextFile {\n\tpath: string;\n\tcontent: string;\n}\n\nexport function truncateUtf8(\n\tbuffer: Buffer,\n\tmaxBytes: number,\n): {\n\tcontent: string;\n\tbytes: number;\n} {\n\tlet end = Math.min(maxBytes, buffer.length);\n\tif (end === 0) {\n\t\treturn { content: \"\", bytes: 0 };\n\t}\n\n\tlet start = end - 1;\n\twhile (start >= 0) {\n\t\tconst byte = buffer[start];\n\t\tif (byte === undefined) {\n\t\t\treturn { content: \"\", bytes: 0 };\n\t\t}\n\t\tif ((byte & 0b1100_0000) !== 0b1000_0000) {\n\t\t\tbreak;\n\t\t}\n\t\tstart -= 1;\n\t}\n\n\tif (start < 0) {\n\t\treturn { content: \"\", bytes: 0 };\n\t}\n\n\tconst lead = buffer[start];\n\tif (lead === undefined) {\n\t\treturn { content: \"\", bytes: 0 };\n\t}\n\tlet expected = 1;\n\tif ((lead & 0b1000_0000) === 0) {\n\t\texpected = 1;\n\t} else if ((lead & 0b1110_0000) === 0b1100_0000) {\n\t\texpected = 2;\n\t} else if ((lead & 0b1111_0000) === 0b1110_0000) {\n\t\texpected = 3;\n\t} else if ((lead & 0b1111_1000) === 0b1111_0000) {\n\t\texpected = 4;\n\t} else {\n\t\tend = start;\n\t}\n\n\tif (start + expected > end) {\n\t\tend = start;\n\t}\n\n\tconst slice = buffer.slice(0, Math.max(0, end));\n\treturn { content: slice.toString(\"utf-8\"), bytes: slice.length };\n}\n\nexport function loadProjectContextFiles(\n\tcwdOverride?: string,\n\toptions: { config?: ComposerConfig } = {},\n): ContextFile[] {\n\treturn loadPromptProjectDocManifest(cwdOverride, options.config).entries.map(\n\t\t(entry) => ({\n\t\t\tpath: entry.path,\n\t\t\tcontent: entry.content,\n\t\t}),\n\t);\n}\n\nfunction formatProjectContextFile(\n\tfile: ContextFile | PromptProjectDocManifestEntry,\n): string {\n\tconst filename = basename(file.path);\n\tconst dir = dirname(file.path);\n\tconst content = escapeXml(file.content.trimEnd());\n\treturn [\n\t\t`# ${filename} instructions for ${dir}`,\n\t\t\"\",\n\t\t\"<INSTRUCTIONS>\",\n\t\tcontent,\n\t\t\"</INSTRUCTIONS>\",\n\t\t\"\",\n\t\t\"\",\n\t].join(\"\\n\");\n}\n\nfunction escapeXml(str: string): string {\n\treturn str\n\t\t.replace(/&/g, \"&\")\n\t\t.replace(/</g, \"<\")\n\t\t.replace(/>/g, \">\")\n\t\t.replace(/\"/g, \""\")\n\t\t.replace(/'/g, \"'\");\n}\n\n// Default tool names when no filter is applied\nconst DEFAULT_TOOL_NAMES = [\n\t\"read\",\n\t\"list\",\n\t\"find\",\n\t\"search\",\n\t\"diff\",\n\t\"bash\",\n\t\"background_tasks\",\n\t\"edit\",\n\t\"write\",\n\t\"todo\",\n\t\"websearch\",\n\t\"codesearch\",\n\t\"webfetch\",\n\t\"status\",\n\t\"gh_pr\",\n\t\"gh_issue\",\n\t\"gh_repo\",\n\t\"pipeline_search_contacts\",\n\t\"pipeline_search_deals\",\n\t\"pipeline_create_signal\",\n\t\"pipeline_log_activity\",\n];\n\nfunction formatCurrentDateTime(): string {\n\treturn new Date().toLocaleString(\"en-US\", {\n\t\tweekday: \"long\",\n\t\tyear: \"numeric\",\n\t\tmonth: \"long\",\n\t\tday: \"numeric\",\n\t\thour: \"2-digit\",\n\t\tminute: \"2-digit\",\n\t\tsecond: \"2-digit\",\n\t\ttimeZoneName: \"short\",\n\t});\n}\n\nconst GUARDED_WORKSPACE_SCAN_IGNORES = new Set([\n\t\".git\",\n\t\".hg\",\n\t\".svn\",\n\t\"node_modules\",\n\t\"dist\",\n\t\"build\",\n\t\"coverage\",\n\t\".next\",\n\t\".turbo\",\n\t\".nx\",\n\t\".cache\",\n\t\"tmp\",\n]);\n\nconst DEFAULT_GUARDED_CATEGORY_BY_KEY = new Map(\n\tDEFAULT_GUARDED_FILE_RULES.map((rule) => [rule.key, rule.category]),\n);\n\nconst GUARDED_WORKSPACE_ENTRY_KEYS = new Map<string, string>([\n\t[\".cursor\", \"cursor-config\"],\n\t[\".windsurf\", \"windsurf-config\"],\n\t[\".idea\", \"jetbrains-project-config\"],\n\t[\".amp\", \"amp-settings\"],\n\t[\"amp.json\", \"amp-settings\"],\n\t[\".ssh\", \"ssh-gpg-keys\"],\n\t[\".gnupg\", \"ssh-gpg-keys\"],\n]);\n\ninterface GuardedAbsolutePathRule {\n\tkey: string;\n\tpath: string;\n\tmatch: \"exact\" | \"prefix\";\n}\n\nfunction normalizeGuardScanPath(path: string): string {\n\treturn resolve(path).replace(/\\\\/g, \"/\");\n}\n\nfunction addGuardedCategory(categories: Set<string>, key: string): void {\n\tconst category = DEFAULT_GUARDED_CATEGORY_BY_KEY.get(key);\n\tif (category) {\n\t\tcategories.add(category);\n\t}\n}\n\nfunction buildGuardedAbsolutePathRules(\n\tenv: Record<string, string | undefined> = process.env,\n): GuardedAbsolutePathRule[] {\n\tconst home = normalizeGuardScanPath(homedir());\n\tconst prefix = (key: string, path: string): GuardedAbsolutePathRule => ({\n\t\tkey,\n\t\tpath: normalizeGuardScanPath(path),\n\t\tmatch: \"prefix\",\n\t});\n\tconst exact = (key: string, path: string): GuardedAbsolutePathRule => ({\n\t\tkey,\n\t\tpath: normalizeGuardScanPath(path),\n\t\tmatch: \"exact\",\n\t});\n\tconst envPrefix = (\n\t\tkey: string,\n\t\tname: string,\n\t\tchild: string,\n\t): GuardedAbsolutePathRule[] => {\n\t\tconst base = (env[name] ?? env[name.toUpperCase()])?.trim();\n\t\treturn base ? [prefix(key, join(base, child))] : [];\n\t};\n\n\treturn [\n\t\tprefix(\"cursor-config\", join(home, \".cursor\")),\n\t\tprefix(\"cursor-config\", join(home, \"Library/Application Support/Cursor\")),\n\t\tprefix(\"cursor-config\", join(home, \".config/Cursor\")),\n\t\t...envPrefix(\"cursor-config\", \"APPDATA\", \"Cursor\"),\n\t\tprefix(\"windsurf-config\", join(home, \".codeium/windsurf\")),\n\t\tprefix(\n\t\t\t\"windsurf-config\",\n\t\t\tjoin(home, \"Library/Application Support/Windsurf\"),\n\t\t),\n\t\tprefix(\"windsurf-config\", join(home, \".config/Windsurf\")),\n\t\tprefix(\"windsurf-config\", \"/Library/Application Support/Windsurf\"),\n\t\tprefix(\"windsurf-config\", \"/etc/windsurf\"),\n\t\t...envPrefix(\"windsurf-config\", \"APPDATA\", \"Windsurf\"),\n\t\t...envPrefix(\"windsurf-config\", \"LOCALAPPDATA\", \"Windsurf\"),\n\t\t...envPrefix(\"windsurf-config\", \"ProgramData\", \"Windsurf\"),\n\t\tprefix(\"antigravity-config\", join(home, \".gemini\")),\n\t\tprefix(\n\t\t\t\"jetbrains-app-config\",\n\t\t\tjoin(home, \"Library/Application Support/JetBrains\"),\n\t\t),\n\t\tprefix(\"jetbrains-app-config\", join(home, \".config/JetBrains\")),\n\t\tprefix(\"jetbrains-app-config\", join(home, \".local/share/JetBrains\")),\n\t\t...envPrefix(\"jetbrains-app-config\", \"APPDATA\", \"JetBrains\"),\n\t\t...envPrefix(\"jetbrains-app-config\", \"LOCALAPPDATA\", \"JetBrains\"),\n\t\tprefix(\"neovim-config\", join(home, \".config/nvim\")),\n\t\tprefix(\"neovim-config\", join(home, \".local/share/nvim\")),\n\t\tprefix(\"neovim-config\", join(home, \".local/state/nvim\")),\n\t\texact(\"shell-config\", join(home, \".bashrc\")),\n\t\texact(\"shell-config\", join(home, \".zshrc\")),\n\t\texact(\"shell-config\", join(home, \".cshrc\")),\n\t\texact(\"shell-config\", join(home, \".tcshrc\")),\n\t\texact(\"shell-config\", join(home, \".config/fish/config.fish\")),\n\t\tprefix(\"shell-config\", join(home, \".config/fish/conf.d\")),\n\t\tprefix(\"ssh-gpg-keys\", join(home, \".ssh\")),\n\t\tprefix(\"ssh-gpg-keys\", join(home, \".gnupg\")),\n\t];\n}\n\nfunction matchesGuardedAbsolutePath(\n\tpath: string,\n\trule: GuardedAbsolutePathRule,\n): boolean {\n\tif (rule.match === \"exact\") {\n\t\treturn path === rule.path;\n\t}\n\treturn path === rule.path || path.startsWith(`${rule.path}/`);\n}\n\nfunction collectGuardedWorkspaceCategories(\n\tcwd: string,\n\toptions: { maxEntries?: number } = {},\n): string[] {\n\tconst maxEntries = options.maxEntries ?? 5000;\n\tconst categories = new Set<string>();\n\tconst absoluteRules = buildGuardedAbsolutePathRules();\n\tconst stack = [cwd];\n\tlet entriesVisited = 0;\n\n\twhile (stack.length > 0 && entriesVisited < maxEntries) {\n\t\tconst dir = stack.pop();\n\t\tif (!dir) break;\n\n\t\tlet entries: Dirent[];\n\t\ttry {\n\t\t\tentries = readdirSync(dir, { withFileTypes: true });\n\t\t} catch {\n\t\t\tcontinue;\n\t\t}\n\n\t\tfor (const entry of entries) {\n\t\t\tif (entriesVisited >= maxEntries) break;\n\t\t\tentriesVisited += 1;\n\t\t\tconst path = join(dir, entry.name);\n\t\t\tconst normalizedPath = normalizeGuardScanPath(path);\n\t\t\tconst entryKey = GUARDED_WORKSPACE_ENTRY_KEYS.get(entry.name);\n\t\t\tif (entryKey) {\n\t\t\t\taddGuardedCategory(categories, entryKey);\n\t\t\t}\n\t\t\tfor (const rule of absoluteRules) {\n\t\t\t\tif (matchesGuardedAbsolutePath(normalizedPath, rule)) {\n\t\t\t\t\taddGuardedCategory(categories, rule.key);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tentry.isDirectory() &&\n\t\t\t\t!GUARDED_WORKSPACE_SCAN_IGNORES.has(entry.name)\n\t\t\t) {\n\t\t\t\tstack.push(path);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn DEFAULT_GUARDED_FILE_RULES.map((rule) => rule.category).filter(\n\t\t(category) => categories.has(category),\n\t);\n}\n\nfunction buildGuardedWorkspacePromptFragment(cwd: string): string | null {\n\tconst categories = collectGuardedWorkspaceCategories(cwd);\n\tif (categories.length === 0) {\n\t\treturn null;\n\t}\n\n\tconst categoryText = categories.join(\", \");\n\treturn [\n\t\t\"# Guarded Workspace Paths\",\n\t\t\"\",\n\t\t`This workspace contains paths covered by Maestro's default guarded-files policy: ${categoryText}.`,\n\t\t\"Ask for explicit user approval before attempting to read, list, search, execute against, or modify these guarded paths.\",\n\t].join(\"\\n\");\n}\n\nexport function buildFileCitationPromptFragment(cwd = process.cwd()): string {\n\tconst examplePath = join(cwd, \"src/auth/middleware.ts\");\n\tconst exampleUri = `${pathToFileURL(examplePath).href}#L42`;\n\n\treturn [\n\t\t\"# File Citations\",\n\t\t\"\",\n\t\t\"When mentioning a workspace file in any user-facing response, link it using Markdown with a `file:///` URI so every surface can make the reference clickable.\",\n\t\t\"Prefer the displayed text users expect to read, such as `src/auth/middleware.ts`, and percent-encode spaces and other URI characters in the link target.\",\n\t\t\"Include known line references as URL fragments, such as `#L42`, `#L42-L48`, or `#L42C8`.\",\n\t\t\"At GitHub comment boundaries, use repository blob URLs instead of local `file:///` URIs when repository metadata is available.\",\n\t\t`Good: See [src/auth/middleware.ts](${exampleUri}) for the validation logic.`,\n\t\t\"Bad: See src/auth/middleware.ts for the validation logic.\",\n\t].join(\"\\n\");\n}\n\n/**\n * Behavioral discipline baked into the bundled (offline) prompt so a Maestro\n * run without a remote prompt service still holds the standards a strong\n * coding agent applies: follow existing conventions, keep changes scoped,\n * surface problems, and verify before claiming done. Sections that depend on\n * specific tools are included only when those tools are available.\n */\nfunction buildEngineeringDisciplineSection(toolNames: Set<string>): string {\n\tconst sections: string[] = [];\n\n\tsections.push(\n\t\t[\n\t\t\t\"## Following conventions\",\n\t\t\t\"- Before using a library, confirm it is already a dependency of this project — check imports in neighbouring files and the package manifest. Never assume a package is available because it is popular.\",\n\t\t\t\"- Match the conventions of the surrounding code: its naming, typing, error handling, and file layout. New code should be hard to distinguish from what is already there.\",\n\t\t\t\"- Add a comment only to explain intent the code cannot convey. Do not narrate what the code plainly does.\",\n\t\t].join(\"\\n\"),\n\t);\n\n\tconst doingTask: string[] = [\n\t\t\"## Doing the task\",\n\t\t\"- Do what was asked, then stop. Prefer the smallest change that fully solves the problem, and do not refactor adjacent code the task did not require.\",\n\t\t\"- Surface problems as you find them. If an assumption turns out wrong, a requirement is missing, or a change is riskier than it looked, say so instead of quietly working around it.\",\n\t];\n\tif (toolNames.has(\"todo\")) {\n\t\tdoingTask.push(\n\t\t\t\"- Track multi-step work with the todo tool. Keep exactly one item in_progress, and mark an item completed as soon as its work is verified rather than batching updates at the end.\",\n\t\t);\n\t}\n\tsections.push(doingTask.join(\"\\n\"));\n\n\tif (\n\t\ttoolNames.has(\"edit\") ||\n\t\ttoolNames.has(\"write\") ||\n\t\ttoolNames.has(\"bash\")\n\t) {\n\t\tsections.push(\n\t\t\t[\n\t\t\t\t\"## Verifying your work\",\n\t\t\t\t\"- A change is not finished until it is verified. After a non-trivial change run the project's validators — build, lint, and the tests that cover what you touched — unless the user explicitly waives them, and report what you ran and what it showed.\",\n\t\t\t\t\"- Do not report that something works on the basis of reading the code when you could have run it.\",\n\t\t\t].join(\"\\n\"),\n\t\t);\n\t}\n\n\treturn `# Engineering discipline\\n\\n${sections.join(\"\\n\\n\")}`;\n}\n\nexport function buildBundledSystemPromptBase(toolNames?: string[]): string {\n\tconst currentYear = new Date().getFullYear();\n\tconst activeToolNames = toolNames ?? DEFAULT_TOOL_NAMES;\n\tconst toolNameSet = new Set(activeToolNames);\n\n\treturn `You are Maestro, an expert software engineering agent. You help users with real software work — reading files, executing commands, editing code, and writing new files — and you optimize for correct, verified changes over volume of output.\n\n${buildEngineeringDisciplineSection(toolNameSet)}\n\n${buildToolsSection(activeToolNames)}\n\n${buildGuidelines(toolNameSet, currentYear)}`;\n}\n\nexport function finalizeSystemPrompt(\n\tbasePrompt: string,\n\tappendPrompt?: string,\n\tcwd = process.cwd(),\n\toptions: FinalizeSystemPromptOptions = {},\n): string {\n\tconst appendSource =\n\t\tresolveSystemPromptOverride(appendPrompt) ??\n\t\tloadAppendSystemPrompt(cwd, options.profileName, options.cliOverrides);\n\tconst appendText = appendSource?.trim();\n\tlet prompt = basePrompt;\n\tconst contextFiles =\n\t\toptions.promptContextManifest?.entries ?? loadProjectContextFiles(cwd);\n\tif (contextFiles.length > 0) {\n\t\tprompt += \"\\n\\n# Project Context\\n\\n\";\n\t\tprompt += \"The following project context files have been loaded:\\n\\n\";\n\t\tfor (const file of contextFiles) {\n\t\t\tprompt += formatProjectContextFile(file);\n\t\t}\n\t}\n\n\tconst guardedWorkspaceFragment = buildGuardedWorkspacePromptFragment(cwd);\n\tif (guardedWorkspaceFragment) {\n\t\tprompt += `\\n\\n${guardedWorkspaceFragment}\\n`;\n\t}\n\n\tconst runtimeConstraintPrompt = buildRuntimeConstraintPrompt(\n\t\toptions.runtimeConstraints,\n\t);\n\tif (runtimeConstraintPrompt) {\n\t\tprompt += `\\n\\n${runtimeConstraintPrompt}\\n`;\n\t}\n\n\tprompt += `\\n\\n${buildFileCitationPromptFragment(cwd)}\\n`;\n\n\tif (appendText) {\n\t\tprompt += \"\\n\\n# Additional System Instructions\\n\\n\";\n\t\tprompt += `${appendText}\\n\\n`;\n\t}\n\n\tprompt += `\\nCurrent date and time: ${formatCurrentDateTime()}`;\n\tprompt += `\\nCurrent working directory: ${cwd}`;\n\n\treturn prompt;\n}\n\nexport function buildSystemPrompt(\n\tcustomPrompt?: string,\n\ttoolNames?: string[],\n\tappendPrompt?: string,\n\toptions?: FinalizeSystemPromptOptions,\n): string {\n\tconst promptSource =\n\t\tresolveSystemPromptOverride(customPrompt) ??\n\t\tbuildBundledSystemPromptBase(toolNames);\n\treturn finalizeSystemPrompt(\n\t\tpromptSource,\n\t\tappendPrompt,\n\t\tprocess.cwd(),\n\t\toptions,\n\t);\n}\n"]}
|