agent-bober 0.12.0 → 0.15.0
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/CHANGELOG.md +213 -0
- package/README.md +112 -3
- package/agents/bober-architect.md +38 -0
- package/agents/bober-code-reviewer.md +236 -0
- package/agents/bober-curator.md +37 -0
- package/agents/bober-deployer.md +267 -0
- package/agents/bober-diagnoser.md +289 -0
- package/agents/bober-evaluator.md +89 -1
- package/agents/bober-generator.md +68 -3
- package/agents/bober-planner.md +39 -0
- package/agents/bober-postmortemer.md +185 -0
- package/agents/bober-researcher.md +38 -0
- package/dist/cli/commands/approve.d.ts +17 -0
- package/dist/cli/commands/approve.d.ts.map +1 -0
- package/dist/cli/commands/approve.js +64 -0
- package/dist/cli/commands/approve.js.map +1 -0
- package/dist/cli/commands/audit-show.d.ts +14 -0
- package/dist/cli/commands/audit-show.d.ts.map +1 -0
- package/dist/cli/commands/audit-show.js +85 -0
- package/dist/cli/commands/audit-show.js.map +1 -0
- package/dist/cli/commands/config.d.ts +10 -0
- package/dist/cli/commands/config.d.ts.map +1 -0
- package/dist/cli/commands/config.js +73 -0
- package/dist/cli/commands/config.js.map +1 -0
- package/dist/cli/commands/graph.d.ts +8 -0
- package/dist/cli/commands/graph.d.ts.map +1 -0
- package/dist/cli/commands/graph.js +219 -0
- package/dist/cli/commands/graph.js.map +1 -0
- package/dist/cli/commands/impact.d.ts +19 -0
- package/dist/cli/commands/impact.d.ts.map +1 -0
- package/dist/cli/commands/impact.js +191 -0
- package/dist/cli/commands/impact.js.map +1 -0
- package/dist/cli/commands/incident.d.ts +19 -0
- package/dist/cli/commands/incident.d.ts.map +1 -0
- package/dist/cli/commands/incident.js +324 -0
- package/dist/cli/commands/incident.js.map +1 -0
- package/dist/cli/commands/init.js +36 -1
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/list-approvals.d.ts +16 -0
- package/dist/cli/commands/list-approvals.d.ts.map +1 -0
- package/dist/cli/commands/list-approvals.js +57 -0
- package/dist/cli/commands/list-approvals.js.map +1 -0
- package/dist/cli/commands/onboard.d.ts +3 -0
- package/dist/cli/commands/onboard.d.ts.map +1 -0
- package/dist/cli/commands/onboard.js +190 -0
- package/dist/cli/commands/onboard.js.map +1 -0
- package/dist/cli/commands/playbook.d.ts +17 -0
- package/dist/cli/commands/playbook.d.ts.map +1 -0
- package/dist/cli/commands/playbook.js +123 -0
- package/dist/cli/commands/playbook.js.map +1 -0
- package/dist/cli/commands/postmortem.d.ts +12 -0
- package/dist/cli/commands/postmortem.d.ts.map +1 -0
- package/dist/cli/commands/postmortem.js +67 -0
- package/dist/cli/commands/postmortem.js.map +1 -0
- package/dist/cli/commands/reject.d.ts +17 -0
- package/dist/cli/commands/reject.d.ts.map +1 -0
- package/dist/cli/commands/reject.js +52 -0
- package/dist/cli/commands/reject.js.map +1 -0
- package/dist/cli/commands/rollback.d.ts +21 -0
- package/dist/cli/commands/rollback.d.ts.map +1 -0
- package/dist/cli/commands/rollback.js +90 -0
- package/dist/cli/commands/rollback.js.map +1 -0
- package/dist/cli/commands/run.d.ts +9 -0
- package/dist/cli/commands/run.d.ts.map +1 -1
- package/dist/cli/commands/run.js +29 -0
- package/dist/cli/commands/run.js.map +1 -1
- package/dist/cli/commands/telemetry.d.ts +16 -0
- package/dist/cli/commands/telemetry.d.ts.map +1 -0
- package/dist/cli/commands/telemetry.js +152 -0
- package/dist/cli/commands/telemetry.js.map +1 -0
- package/dist/cli/commands/worktree.d.ts +12 -0
- package/dist/cli/commands/worktree.d.ts.map +1 -0
- package/dist/cli/commands/worktree.js +57 -0
- package/dist/cli/commands/worktree.js.map +1 -0
- package/dist/cli/index.js +50 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +27 -0
- package/dist/config/defaults.js.map +1 -1
- package/dist/config/index.d.ts +1 -1
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +4 -0
- package/dist/config/index.js.map +1 -1
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +18 -1
- package/dist/config/loader.js.map +1 -1
- package/dist/config/schema.d.ts +976 -56
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +147 -0
- package/dist/config/schema.js.map +1 -1
- package/dist/graph/artifact-store.d.ts +14 -0
- package/dist/graph/artifact-store.d.ts.map +1 -0
- package/dist/graph/artifact-store.js +100 -0
- package/dist/graph/artifact-store.js.map +1 -0
- package/dist/graph/cli.d.ts +49 -0
- package/dist/graph/cli.d.ts.map +1 -0
- package/dist/graph/cli.js +140 -0
- package/dist/graph/cli.js.map +1 -0
- package/dist/graph/client.d.ts +64 -0
- package/dist/graph/client.d.ts.map +1 -0
- package/dist/graph/client.js +216 -0
- package/dist/graph/client.js.map +1 -0
- package/dist/graph/fallback.d.ts +13 -0
- package/dist/graph/fallback.d.ts.map +1 -0
- package/dist/graph/fallback.js +57 -0
- package/dist/graph/fallback.js.map +1 -0
- package/dist/graph/hook-handler.d.ts +50 -0
- package/dist/graph/hook-handler.d.ts.map +1 -0
- package/dist/graph/hook-handler.js +217 -0
- package/dist/graph/hook-handler.js.map +1 -0
- package/dist/graph/incidents.d.ts +59 -0
- package/dist/graph/incidents.d.ts.map +1 -0
- package/dist/graph/incidents.js +22 -0
- package/dist/graph/incidents.js.map +1 -0
- package/dist/graph/mcp-client.d.ts +51 -0
- package/dist/graph/mcp-client.d.ts.map +1 -0
- package/dist/graph/mcp-client.js +285 -0
- package/dist/graph/mcp-client.js.map +1 -0
- package/dist/graph/onboarding-composer.d.ts +30 -0
- package/dist/graph/onboarding-composer.d.ts.map +1 -0
- package/dist/graph/onboarding-composer.js +275 -0
- package/dist/graph/onboarding-composer.js.map +1 -0
- package/dist/graph/pipeline-lifecycle.d.ts +86 -0
- package/dist/graph/pipeline-lifecycle.d.ts.map +1 -0
- package/dist/graph/pipeline-lifecycle.js +329 -0
- package/dist/graph/pipeline-lifecycle.js.map +1 -0
- package/dist/graph/preflight-budgets.d.ts +52 -0
- package/dist/graph/preflight-budgets.d.ts.map +1 -0
- package/dist/graph/preflight-budgets.js +78 -0
- package/dist/graph/preflight-budgets.js.map +1 -0
- package/dist/graph/preflight-injector.d.ts +116 -0
- package/dist/graph/preflight-injector.d.ts.map +1 -0
- package/dist/graph/preflight-injector.js +538 -0
- package/dist/graph/preflight-injector.js.map +1 -0
- package/dist/graph/prereq.d.ts +12 -0
- package/dist/graph/prereq.d.ts.map +1 -0
- package/dist/graph/prereq.js +61 -0
- package/dist/graph/prereq.js.map +1 -0
- package/dist/graph/prompts.d.ts +42 -0
- package/dist/graph/prompts.d.ts.map +1 -0
- package/dist/graph/prompts.js +80 -0
- package/dist/graph/prompts.js.map +1 -0
- package/dist/graph/sandbox.d.ts +19 -0
- package/dist/graph/sandbox.d.ts.map +1 -0
- package/dist/graph/sandbox.js +25 -0
- package/dist/graph/sandbox.js.map +1 -0
- package/dist/graph/token-usage.d.ts +21 -0
- package/dist/graph/token-usage.d.ts.map +1 -0
- package/dist/graph/token-usage.js +22 -0
- package/dist/graph/token-usage.js.map +1 -0
- package/dist/graph/types.d.ts +129 -0
- package/dist/graph/types.d.ts.map +1 -0
- package/dist/graph/types.js +12 -0
- package/dist/graph/types.js.map +1 -0
- package/dist/incident/orchestrator.d.ts +168 -0
- package/dist/incident/orchestrator.d.ts.map +1 -0
- package/dist/incident/orchestrator.js +279 -0
- package/dist/incident/orchestrator.js.map +1 -0
- package/dist/incident/playbook-search.d.ts +67 -0
- package/dist/incident/playbook-search.d.ts.map +1 -0
- package/dist/incident/playbook-search.js +288 -0
- package/dist/incident/playbook-search.js.map +1 -0
- package/dist/incident/postmortem.d.ts +44 -0
- package/dist/incident/postmortem.d.ts.map +1 -0
- package/dist/incident/postmortem.js +486 -0
- package/dist/incident/postmortem.js.map +1 -0
- package/dist/incident/resolution-verify.d.ts +186 -0
- package/dist/incident/resolution-verify.d.ts.map +1 -0
- package/dist/incident/resolution-verify.js +210 -0
- package/dist/incident/resolution-verify.js.map +1 -0
- package/dist/incident/rollback.d.ts +137 -0
- package/dist/incident/rollback.d.ts.map +1 -0
- package/dist/incident/rollback.js +328 -0
- package/dist/incident/rollback.js.map +1 -0
- package/dist/incident/timeline.d.ts +147 -0
- package/dist/incident/timeline.d.ts.map +1 -0
- package/dist/incident/timeline.js +452 -0
- package/dist/incident/timeline.js.map +1 -0
- package/dist/incident/types.d.ts +335 -0
- package/dist/incident/types.d.ts.map +1 -0
- package/dist/incident/types.js +158 -0
- package/dist/incident/types.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/mcp/event-stream.d.ts +46 -0
- package/dist/mcp/event-stream.d.ts.map +1 -0
- package/dist/mcp/event-stream.js +421 -0
- package/dist/mcp/event-stream.js.map +1 -0
- package/dist/mcp/external-client.d.ts +38 -0
- package/dist/mcp/external-client.d.ts.map +1 -0
- package/dist/mcp/external-client.js +121 -0
- package/dist/mcp/external-client.js.map +1 -0
- package/dist/mcp/run-manager.d.ts +74 -9
- package/dist/mcp/run-manager.d.ts.map +1 -1
- package/dist/mcp/run-manager.js +127 -31
- package/dist/mcp/run-manager.js.map +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +56 -0
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools/abort-run.d.ts +2 -0
- package/dist/mcp/tools/abort-run.d.ts.map +1 -0
- package/dist/mcp/tools/abort-run.js +62 -0
- package/dist/mcp/tools/abort-run.js.map +1 -0
- package/dist/mcp/tools/anchor.js +1 -1
- package/dist/mcp/tools/anchor.js.map +1 -1
- package/dist/mcp/tools/approve-checkpoint.d.ts +2 -0
- package/dist/mcp/tools/approve-checkpoint.d.ts.map +1 -0
- package/dist/mcp/tools/approve-checkpoint.js +70 -0
- package/dist/mcp/tools/approve-checkpoint.js.map +1 -0
- package/dist/mcp/tools/brownfield.js +1 -1
- package/dist/mcp/tools/brownfield.js.map +1 -1
- package/dist/mcp/tools/get-project-state.d.ts +2 -0
- package/dist/mcp/tools/get-project-state.d.ts.map +1 -0
- package/dist/mcp/tools/get-project-state.js +107 -0
- package/dist/mcp/tools/get-project-state.js.map +1 -0
- package/dist/mcp/tools/get-run-status.d.ts +2 -0
- package/dist/mcp/tools/get-run-status.d.ts.map +1 -0
- package/dist/mcp/tools/get-run-status.js +40 -0
- package/dist/mcp/tools/get-run-status.js.map +1 -0
- package/dist/mcp/tools/graph-schemas.d.ts +100 -0
- package/dist/mcp/tools/graph-schemas.d.ts.map +1 -0
- package/dist/mcp/tools/graph-schemas.js +39 -0
- package/dist/mcp/tools/graph-schemas.js.map +1 -0
- package/dist/mcp/tools/graph.d.ts +19 -0
- package/dist/mcp/tools/graph.d.ts.map +1 -0
- package/dist/mcp/tools/graph.js +263 -0
- package/dist/mcp/tools/graph.js.map +1 -0
- package/dist/mcp/tools/incident.d.ts +2 -0
- package/dist/mcp/tools/incident.d.ts.map +1 -0
- package/dist/mcp/tools/incident.js +246 -0
- package/dist/mcp/tools/incident.js.map +1 -0
- package/dist/mcp/tools/index.d.ts +38 -18
- package/dist/mcp/tools/index.d.ts.map +1 -1
- package/dist/mcp/tools/index.js +74 -18
- package/dist/mcp/tools/index.js.map +1 -1
- package/dist/mcp/tools/list-active-runs.d.ts +2 -0
- package/dist/mcp/tools/list-active-runs.d.ts.map +1 -0
- package/dist/mcp/tools/list-active-runs.js +35 -0
- package/dist/mcp/tools/list-active-runs.js.map +1 -0
- package/dist/mcp/tools/list-pending-approvals.d.ts +2 -0
- package/dist/mcp/tools/list-pending-approvals.d.ts.map +1 -0
- package/dist/mcp/tools/list-pending-approvals.js +40 -0
- package/dist/mcp/tools/list-pending-approvals.js.map +1 -0
- package/dist/mcp/tools/list-projects.d.ts +2 -0
- package/dist/mcp/tools/list-projects.d.ts.map +1 -0
- package/dist/mcp/tools/list-projects.js +101 -0
- package/dist/mcp/tools/list-projects.js.map +1 -0
- package/dist/mcp/tools/list-specs.d.ts +2 -0
- package/dist/mcp/tools/list-specs.d.ts.map +1 -0
- package/dist/mcp/tools/list-specs.js +48 -0
- package/dist/mcp/tools/list-specs.js.map +1 -0
- package/dist/mcp/tools/playbook.d.ts +2 -0
- package/dist/mcp/tools/playbook.d.ts.map +1 -0
- package/dist/mcp/tools/playbook.js +104 -0
- package/dist/mcp/tools/playbook.js.map +1 -0
- package/dist/mcp/tools/postmortem.d.ts +2 -0
- package/dist/mcp/tools/postmortem.d.ts.map +1 -0
- package/dist/mcp/tools/postmortem.js +75 -0
- package/dist/mcp/tools/postmortem.js.map +1 -0
- package/dist/mcp/tools/react.js +1 -1
- package/dist/mcp/tools/react.js.map +1 -1
- package/dist/mcp/tools/reject-checkpoint.d.ts +2 -0
- package/dist/mcp/tools/reject-checkpoint.d.ts.map +1 -0
- package/dist/mcp/tools/reject-checkpoint.js +79 -0
- package/dist/mcp/tools/reject-checkpoint.js.map +1 -0
- package/dist/mcp/tools/rollback.d.ts +2 -0
- package/dist/mcp/tools/rollback.d.ts.map +1 -0
- package/dist/mcp/tools/rollback.js +78 -0
- package/dist/mcp/tools/rollback.js.map +1 -0
- package/dist/mcp/tools/run-in-worktree.d.ts +2 -0
- package/dist/mcp/tools/run-in-worktree.d.ts.map +1 -0
- package/dist/mcp/tools/run-in-worktree.js +90 -0
- package/dist/mcp/tools/run-in-worktree.js.map +1 -0
- package/dist/mcp/tools/run.js +1 -1
- package/dist/mcp/tools/run.js.map +1 -1
- package/dist/mcp/tools/solidity.js +1 -1
- package/dist/mcp/tools/solidity.js.map +1 -1
- package/dist/mcp/tools/status.d.ts.map +1 -1
- package/dist/mcp/tools/status.js +11 -0
- package/dist/mcp/tools/status.js.map +1 -1
- package/dist/mcp/tools/subscribe-events.d.ts +2 -0
- package/dist/mcp/tools/subscribe-events.d.ts.map +1 -0
- package/dist/mcp/tools/subscribe-events.js +48 -0
- package/dist/mcp/tools/subscribe-events.js.map +1 -0
- package/dist/mcp/tools/unsubscribe-events.d.ts +2 -0
- package/dist/mcp/tools/unsubscribe-events.d.ts.map +1 -0
- package/dist/mcp/tools/unsubscribe-events.js +45 -0
- package/dist/mcp/tools/unsubscribe-events.js.map +1 -0
- package/dist/orchestrator/agent-loader.d.ts +16 -0
- package/dist/orchestrator/agent-loader.d.ts.map +1 -1
- package/dist/orchestrator/agent-loader.js +16 -0
- package/dist/orchestrator/agent-loader.js.map +1 -1
- package/dist/orchestrator/architect-agent.d.ts.map +1 -1
- package/dist/orchestrator/architect-agent.js +37 -8
- package/dist/orchestrator/architect-agent.js.map +1 -1
- package/dist/orchestrator/checkpoints/audit.d.ts +128 -0
- package/dist/orchestrator/checkpoints/audit.d.ts.map +1 -0
- package/dist/orchestrator/checkpoints/audit.js +272 -0
- package/dist/orchestrator/checkpoints/audit.js.map +1 -0
- package/dist/orchestrator/checkpoints/feedback-router.d.ts +213 -0
- package/dist/orchestrator/checkpoints/feedback-router.d.ts.map +1 -0
- package/dist/orchestrator/checkpoints/feedback-router.js +438 -0
- package/dist/orchestrator/checkpoints/feedback-router.js.map +1 -0
- package/dist/orchestrator/checkpoints/index.d.ts +11 -0
- package/dist/orchestrator/checkpoints/index.d.ts.map +1 -0
- package/dist/orchestrator/checkpoints/index.js +12 -0
- package/dist/orchestrator/checkpoints/index.js.map +1 -0
- package/dist/orchestrator/checkpoints/mechanisms/cli.d.ts +35 -0
- package/dist/orchestrator/checkpoints/mechanisms/cli.d.ts.map +1 -0
- package/dist/orchestrator/checkpoints/mechanisms/cli.js +153 -0
- package/dist/orchestrator/checkpoints/mechanisms/cli.js.map +1 -0
- package/dist/orchestrator/checkpoints/mechanisms/disk.d.ts +34 -0
- package/dist/orchestrator/checkpoints/mechanisms/disk.d.ts.map +1 -0
- package/dist/orchestrator/checkpoints/mechanisms/disk.js +139 -0
- package/dist/orchestrator/checkpoints/mechanisms/disk.js.map +1 -0
- package/dist/orchestrator/checkpoints/mechanisms/pr.d.ts +141 -0
- package/dist/orchestrator/checkpoints/mechanisms/pr.d.ts.map +1 -0
- package/dist/orchestrator/checkpoints/mechanisms/pr.js +445 -0
- package/dist/orchestrator/checkpoints/mechanisms/pr.js.map +1 -0
- package/dist/orchestrator/checkpoints/noop.d.ts +12 -0
- package/dist/orchestrator/checkpoints/noop.d.ts.map +1 -0
- package/dist/orchestrator/checkpoints/noop.js +13 -0
- package/dist/orchestrator/checkpoints/noop.js.map +1 -0
- package/dist/orchestrator/checkpoints/registry.d.ts +48 -0
- package/dist/orchestrator/checkpoints/registry.d.ts.map +1 -0
- package/dist/orchestrator/checkpoints/registry.js +89 -0
- package/dist/orchestrator/checkpoints/registry.js.map +1 -0
- package/dist/orchestrator/checkpoints/renderers/_util.d.ts +50 -0
- package/dist/orchestrator/checkpoints/renderers/_util.d.ts.map +1 -0
- package/dist/orchestrator/checkpoints/renderers/_util.js +137 -0
- package/dist/orchestrator/checkpoints/renderers/_util.js.map +1 -0
- package/dist/orchestrator/checkpoints/renderers/code-review.d.ts +15 -0
- package/dist/orchestrator/checkpoints/renderers/code-review.d.ts.map +1 -0
- package/dist/orchestrator/checkpoints/renderers/code-review.js +66 -0
- package/dist/orchestrator/checkpoints/renderers/code-review.js.map +1 -0
- package/dist/orchestrator/checkpoints/renderers/curator-briefing.d.ts +15 -0
- package/dist/orchestrator/checkpoints/renderers/curator-briefing.d.ts.map +1 -0
- package/dist/orchestrator/checkpoints/renderers/curator-briefing.js +40 -0
- package/dist/orchestrator/checkpoints/renderers/curator-briefing.js.map +1 -0
- package/dist/orchestrator/checkpoints/renderers/eval-result.d.ts +15 -0
- package/dist/orchestrator/checkpoints/renderers/eval-result.d.ts.map +1 -0
- package/dist/orchestrator/checkpoints/renderers/eval-result.js +54 -0
- package/dist/orchestrator/checkpoints/renderers/eval-result.js.map +1 -0
- package/dist/orchestrator/checkpoints/renderers/generator-diff.d.ts +49 -0
- package/dist/orchestrator/checkpoints/renderers/generator-diff.d.ts.map +1 -0
- package/dist/orchestrator/checkpoints/renderers/generator-diff.js +154 -0
- package/dist/orchestrator/checkpoints/renderers/generator-diff.js.map +1 -0
- package/dist/orchestrator/checkpoints/renderers/pipeline-summary.d.ts +15 -0
- package/dist/orchestrator/checkpoints/renderers/pipeline-summary.d.ts.map +1 -0
- package/dist/orchestrator/checkpoints/renderers/pipeline-summary.js +59 -0
- package/dist/orchestrator/checkpoints/renderers/pipeline-summary.js.map +1 -0
- package/dist/orchestrator/checkpoints/renderers/plan.d.ts +15 -0
- package/dist/orchestrator/checkpoints/renderers/plan.d.ts.map +1 -0
- package/dist/orchestrator/checkpoints/renderers/plan.js +34 -0
- package/dist/orchestrator/checkpoints/renderers/plan.js.map +1 -0
- package/dist/orchestrator/checkpoints/renderers/registry.d.ts +43 -0
- package/dist/orchestrator/checkpoints/renderers/registry.d.ts.map +1 -0
- package/dist/orchestrator/checkpoints/renderers/registry.js +83 -0
- package/dist/orchestrator/checkpoints/renderers/registry.js.map +1 -0
- package/dist/orchestrator/checkpoints/renderers/research.d.ts +15 -0
- package/dist/orchestrator/checkpoints/renderers/research.d.ts.map +1 -0
- package/dist/orchestrator/checkpoints/renderers/research.js +39 -0
- package/dist/orchestrator/checkpoints/renderers/research.js.map +1 -0
- package/dist/orchestrator/checkpoints/renderers/sprint-contract.d.ts +20 -0
- package/dist/orchestrator/checkpoints/renderers/sprint-contract.d.ts.map +1 -0
- package/dist/orchestrator/checkpoints/renderers/sprint-contract.js +57 -0
- package/dist/orchestrator/checkpoints/renderers/sprint-contract.js.map +1 -0
- package/dist/orchestrator/checkpoints/renderers/sprint-summary.d.ts +15 -0
- package/dist/orchestrator/checkpoints/renderers/sprint-summary.d.ts.map +1 -0
- package/dist/orchestrator/checkpoints/renderers/sprint-summary.js +38 -0
- package/dist/orchestrator/checkpoints/renderers/sprint-summary.js.map +1 -0
- package/dist/orchestrator/checkpoints/sites.d.ts +22 -0
- package/dist/orchestrator/checkpoints/sites.d.ts.map +1 -0
- package/dist/orchestrator/checkpoints/sites.js +57 -0
- package/dist/orchestrator/checkpoints/sites.js.map +1 -0
- package/dist/orchestrator/checkpoints/types.d.ts +51 -0
- package/dist/orchestrator/checkpoints/types.d.ts.map +1 -0
- package/dist/orchestrator/checkpoints/types.js +9 -0
- package/dist/orchestrator/checkpoints/types.js.map +1 -0
- package/dist/orchestrator/code-reviewer-agent.d.ts +50 -0
- package/dist/orchestrator/code-reviewer-agent.d.ts.map +1 -0
- package/dist/orchestrator/code-reviewer-agent.js +283 -0
- package/dist/orchestrator/code-reviewer-agent.js.map +1 -0
- package/dist/orchestrator/curator-agent.d.ts.map +1 -1
- package/dist/orchestrator/curator-agent.js +59 -8
- package/dist/orchestrator/curator-agent.js.map +1 -1
- package/dist/orchestrator/deploy/classify.d.ts +31 -0
- package/dist/orchestrator/deploy/classify.d.ts.map +1 -0
- package/dist/orchestrator/deploy/classify.js +109 -0
- package/dist/orchestrator/deploy/classify.js.map +1 -0
- package/dist/orchestrator/deploy/execute.d.ts +45 -0
- package/dist/orchestrator/deploy/execute.d.ts.map +1 -0
- package/dist/orchestrator/deploy/execute.js +146 -0
- package/dist/orchestrator/deploy/execute.js.map +1 -0
- package/dist/orchestrator/deploy/executor.d.ts +22 -0
- package/dist/orchestrator/deploy/executor.d.ts.map +1 -0
- package/dist/orchestrator/deploy/executor.js +31 -0
- package/dist/orchestrator/deploy/executor.js.map +1 -0
- package/dist/orchestrator/deploy/index.d.ts +21 -0
- package/dist/orchestrator/deploy/index.d.ts.map +1 -0
- package/dist/orchestrator/deploy/index.js +21 -0
- package/dist/orchestrator/deploy/index.js.map +1 -0
- package/dist/orchestrator/deploy/resolve.d.ts +51 -0
- package/dist/orchestrator/deploy/resolve.d.ts.map +1 -0
- package/dist/orchestrator/deploy/resolve.js +53 -0
- package/dist/orchestrator/deploy/resolve.js.map +1 -0
- package/dist/orchestrator/deploy/spawn.d.ts +60 -0
- package/dist/orchestrator/deploy/spawn.d.ts.map +1 -0
- package/dist/orchestrator/deploy/spawn.js +62 -0
- package/dist/orchestrator/deploy/spawn.js.map +1 -0
- package/dist/orchestrator/deploy/types.d.ts +98 -0
- package/dist/orchestrator/deploy/types.d.ts.map +1 -0
- package/dist/orchestrator/deploy/types.js +39 -0
- package/dist/orchestrator/deploy/types.js.map +1 -0
- package/dist/orchestrator/evaluator-agent.d.ts.map +1 -1
- package/dist/orchestrator/evaluator-agent.js +21 -8
- package/dist/orchestrator/evaluator-agent.js.map +1 -1
- package/dist/orchestrator/generator-agent.d.ts.map +1 -1
- package/dist/orchestrator/generator-agent.js +21 -8
- package/dist/orchestrator/generator-agent.js.map +1 -1
- package/dist/orchestrator/model-resolver.d.ts.map +1 -1
- package/dist/orchestrator/model-resolver.js +3 -1
- package/dist/orchestrator/model-resolver.js.map +1 -1
- package/dist/orchestrator/observability/index.d.ts +12 -0
- package/dist/orchestrator/observability/index.d.ts.map +1 -0
- package/dist/orchestrator/observability/index.js +12 -0
- package/dist/orchestrator/observability/index.js.map +1 -0
- package/dist/orchestrator/observability/merge.d.ts +73 -0
- package/dist/orchestrator/observability/merge.d.ts.map +1 -0
- package/dist/orchestrator/observability/merge.js +110 -0
- package/dist/orchestrator/observability/merge.js.map +1 -0
- package/dist/orchestrator/pipeline.d.ts +21 -0
- package/dist/orchestrator/pipeline.d.ts.map +1 -1
- package/dist/orchestrator/pipeline.js +156 -2
- package/dist/orchestrator/pipeline.js.map +1 -1
- package/dist/orchestrator/planner-agent.d.ts.map +1 -1
- package/dist/orchestrator/planner-agent.js +5 -4
- package/dist/orchestrator/planner-agent.js.map +1 -1
- package/dist/orchestrator/research-agent.d.ts.map +1 -1
- package/dist/orchestrator/research-agent.js +46 -9
- package/dist/orchestrator/research-agent.js.map +1 -1
- package/dist/orchestrator/tools/handlers.d.ts +2 -0
- package/dist/orchestrator/tools/handlers.d.ts.map +1 -1
- package/dist/orchestrator/tools/handlers.js +1 -1
- package/dist/orchestrator/tools/handlers.js.map +1 -1
- package/dist/orchestrator/tools/index.d.ts +84 -1
- package/dist/orchestrator/tools/index.d.ts.map +1 -1
- package/dist/orchestrator/tools/index.js +164 -1
- package/dist/orchestrator/tools/index.js.map +1 -1
- package/dist/orchestrator/worktree.d.ts +18 -0
- package/dist/orchestrator/worktree.d.ts.map +1 -0
- package/dist/orchestrator/worktree.js +129 -0
- package/dist/orchestrator/worktree.js.map +1 -0
- package/dist/providers/anthropic.d.ts +8 -1
- package/dist/providers/anthropic.d.ts.map +1 -1
- package/dist/providers/anthropic.js +86 -5
- package/dist/providers/anthropic.js.map +1 -1
- package/dist/providers/factory.d.ts.map +1 -1
- package/dist/providers/factory.js +35 -2
- package/dist/providers/factory.js.map +1 -1
- package/dist/providers/google.d.ts.map +1 -1
- package/dist/providers/google.js +5 -0
- package/dist/providers/google.js.map +1 -1
- package/dist/providers/index.d.ts +1 -1
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/openai.d.ts.map +1 -1
- package/dist/providers/openai.js +4 -0
- package/dist/providers/openai.js.map +1 -1
- package/dist/providers/types.d.ts +25 -2
- package/dist/providers/types.d.ts.map +1 -1
- package/dist/state/approval-state.d.ts +74 -0
- package/dist/state/approval-state.d.ts.map +1 -0
- package/dist/state/approval-state.js +127 -0
- package/dist/state/approval-state.js.map +1 -0
- package/dist/state/index.d.ts +3 -0
- package/dist/state/index.d.ts.map +1 -1
- package/dist/state/index.js +4 -1
- package/dist/state/index.js.map +1 -1
- package/dist/state/review-state.d.ts +15 -0
- package/dist/state/review-state.d.ts.map +1 -0
- package/dist/state/review-state.js +51 -0
- package/dist/state/review-state.js.map +1 -0
- package/dist/state/run-state.d.ts +39 -0
- package/dist/state/run-state.d.ts.map +1 -0
- package/dist/state/run-state.js +101 -0
- package/dist/state/run-state.js.map +1 -0
- package/dist/telemetry/emit.d.ts +41 -0
- package/dist/telemetry/emit.d.ts.map +1 -0
- package/dist/telemetry/emit.js +65 -0
- package/dist/telemetry/emit.js.map +1 -0
- package/dist/utils/git.d.ts +27 -0
- package/dist/utils/git.d.ts.map +1 -1
- package/dist/utils/git.js +50 -0
- package/dist/utils/git.js.map +1 -1
- package/hooks/hooks.json +17 -1
- package/hooks/session-start +42 -0
- package/package.json +5 -2
- package/scripts/check-prereqs.sh +12 -0
- package/scripts/e2e-graph-smoke.sh +167 -0
- package/scripts/graph-hook.mjs +151 -0
- package/scripts/run-kpi-gate.mjs +245 -0
- package/scripts/sync-skills.mjs +4 -1
- package/skills/bober.code-review/SKILL.md +186 -0
- package/skills/bober.debug/SKILL.md +300 -0
- package/skills/bober.deploy/SKILL.md +262 -0
- package/skills/bober.diagnose/SKILL.md +254 -0
- package/skills/bober.graph/SKILL.md +85 -0
- package/skills/bober.impact/SKILL.md +101 -0
- package/skills/bober.incident/SKILL.md +245 -0
- package/skills/bober.onboard/SKILL.md +84 -0
- package/skills/bober.plan/SKILL.md +10 -0
- package/skills/bober.postmortem/SKILL.md +231 -0
- package/skills/bober.runbook/SKILL.md +335 -0
- package/skills/bober.using-bober/SKILL.md +133 -0
- package/skills/bober.verify/SKILL.md +143 -0
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AgentGraphPrompts — ADR-5.
|
|
3
|
+
*
|
|
4
|
+
* Per-role system-prompt fragments that teach agents when to prefer graph_* tools.
|
|
5
|
+
* All fragments are static top-level const strings (no interpolation, no I/O).
|
|
6
|
+
*
|
|
7
|
+
* Invariants (ADR-5):
|
|
8
|
+
* - RESEARCHER-PHASE2 fragment is a literal const with ZERO template interpolation.
|
|
9
|
+
* The snapshot test in tests/researcher-phase2-prompt-isolation.test.ts pins
|
|
10
|
+
* the exact bytes. Any edit forces an explicit snapshot update + reviewer ack.
|
|
11
|
+
* - All fragments are <100 words and contain no feature/task/sprint references.
|
|
12
|
+
* - 'disabled' mode returns "" for every role.
|
|
13
|
+
* - decorate() is pure and synchronous — no I/O, no async.
|
|
14
|
+
*/
|
|
15
|
+
import type { BoberAgentRole } from "./preflight-injector.js";
|
|
16
|
+
export type AgentPromptMode = "gated" | "dual" | "disabled";
|
|
17
|
+
export declare class AgentGraphPrompts {
|
|
18
|
+
/**
|
|
19
|
+
* Return the prompt fragment for a (role, mode) pair. Returns "" when no
|
|
20
|
+
* fragment exists (e.g. planner, or 'disabled' mode). Callers MUST treat
|
|
21
|
+
* the empty string as "no decoration".
|
|
22
|
+
*/
|
|
23
|
+
static fragmentFor(role: BoberAgentRole, mode: AgentPromptMode): string;
|
|
24
|
+
/**
|
|
25
|
+
* Append the role's graph-prompt fragment to baseSystemPrompt.
|
|
26
|
+
*
|
|
27
|
+
* Returns baseSystemPrompt UNCHANGED when:
|
|
28
|
+
* - graph is not enabled, OR
|
|
29
|
+
* - engine health is not 'ready', OR
|
|
30
|
+
* - the fragment for (role, modeForRole(role)) is empty.
|
|
31
|
+
*
|
|
32
|
+
* Otherwise returns `baseSystemPrompt + "\n\n---\n\n" + fragment`.
|
|
33
|
+
*
|
|
34
|
+
* Gating predicate mirrors src/orchestrator/tools/index.ts:204-211 exactly
|
|
35
|
+
* so the prompt surface and tool surface flip atomically.
|
|
36
|
+
*/
|
|
37
|
+
static decorate(role: BoberAgentRole, baseSystemPrompt: string, ctx: {
|
|
38
|
+
graphEnabled: boolean;
|
|
39
|
+
engineHealth: string;
|
|
40
|
+
}): string;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=prompts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/graph/prompts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAI9D,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,MAAM,GAAG,UAAU,CAAC;AA4B5D,qBAAa,iBAAiB;IAC5B;;;;OAIG;IACH,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,eAAe,GAAG,MAAM;IAIvE;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,QAAQ,CACb,IAAI,EAAE,cAAc,EACpB,gBAAgB,EAAE,MAAM,EACxB,GAAG,EAAE;QAAE,YAAY,EAAE,OAAO,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,GACnD,MAAM;CAOV"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AgentGraphPrompts — ADR-5.
|
|
3
|
+
*
|
|
4
|
+
* Per-role system-prompt fragments that teach agents when to prefer graph_* tools.
|
|
5
|
+
* All fragments are static top-level const strings (no interpolation, no I/O).
|
|
6
|
+
*
|
|
7
|
+
* Invariants (ADR-5):
|
|
8
|
+
* - RESEARCHER-PHASE2 fragment is a literal const with ZERO template interpolation.
|
|
9
|
+
* The snapshot test in tests/researcher-phase2-prompt-isolation.test.ts pins
|
|
10
|
+
* the exact bytes. Any edit forces an explicit snapshot update + reviewer ack.
|
|
11
|
+
* - All fragments are <100 words and contain no feature/task/sprint references.
|
|
12
|
+
* - 'disabled' mode returns "" for every role.
|
|
13
|
+
* - decorate() is pure and synchronous — no I/O, no async.
|
|
14
|
+
*/
|
|
15
|
+
// ── Fragments (top-level const strings — see ADR-5) ───────────────
|
|
16
|
+
const RESEARCHER_PHASE2_GATED = "For codebase exploration use graph_search, graph_query, graph_review_context, and read_file. Bash, grep, and glob are unavailable for this role.";
|
|
17
|
+
const CURATOR_GATED = "You have graph_search, graph_query, graph_review_context. Use them for ALL exploration. read_file is only for reading specific known files. Prefer graph_query(pattern: \"callers_of\", target: <symbol>) over grep when looking for who calls a function.";
|
|
18
|
+
const ARCHITECT_GATED = "You have graph_search, graph_query, graph_review_context. Use them for ALL exploration. Prefer graph_query(pattern: \"imports_of\", target: <symbol>) to map module boundaries and graph_search for high-level structure discovery.";
|
|
19
|
+
const GENERATOR_DUAL = "You have BOTH grep and graph_* tools. Prefer graph_impact(target: <symbol>) before editing any function with callers. Use grep for line-precise edits and known-file inspection.";
|
|
20
|
+
const EVALUATOR_DUAL = "You have BOTH grep and graph_* tools. Prefer graph_changes(since: <baseline>) and graph_impact(target: <symbol>) to triage the diff. Use grep when you need a literal-string search across the working tree.";
|
|
21
|
+
// ── Lookup table ──────────────────────────────────────────────────
|
|
22
|
+
const FRAGMENTS = {
|
|
23
|
+
"planner": {},
|
|
24
|
+
"researcher-phase1": {},
|
|
25
|
+
"researcher-phase2": { gated: RESEARCHER_PHASE2_GATED },
|
|
26
|
+
"curator": { gated: CURATOR_GATED },
|
|
27
|
+
"architect": { gated: ARCHITECT_GATED },
|
|
28
|
+
"generator": { dual: GENERATOR_DUAL },
|
|
29
|
+
"evaluator": { dual: EVALUATOR_DUAL },
|
|
30
|
+
};
|
|
31
|
+
// ── Public API ────────────────────────────────────────────────────
|
|
32
|
+
export class AgentGraphPrompts {
|
|
33
|
+
/**
|
|
34
|
+
* Return the prompt fragment for a (role, mode) pair. Returns "" when no
|
|
35
|
+
* fragment exists (e.g. planner, or 'disabled' mode). Callers MUST treat
|
|
36
|
+
* the empty string as "no decoration".
|
|
37
|
+
*/
|
|
38
|
+
static fragmentFor(role, mode) {
|
|
39
|
+
return FRAGMENTS[role]?.[mode] ?? "";
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Append the role's graph-prompt fragment to baseSystemPrompt.
|
|
43
|
+
*
|
|
44
|
+
* Returns baseSystemPrompt UNCHANGED when:
|
|
45
|
+
* - graph is not enabled, OR
|
|
46
|
+
* - engine health is not 'ready', OR
|
|
47
|
+
* - the fragment for (role, modeForRole(role)) is empty.
|
|
48
|
+
*
|
|
49
|
+
* Otherwise returns `baseSystemPrompt + "\n\n---\n\n" + fragment`.
|
|
50
|
+
*
|
|
51
|
+
* Gating predicate mirrors src/orchestrator/tools/index.ts:204-211 exactly
|
|
52
|
+
* so the prompt surface and tool surface flip atomically.
|
|
53
|
+
*/
|
|
54
|
+
static decorate(role, baseSystemPrompt, ctx) {
|
|
55
|
+
if (!ctx.graphEnabled || ctx.engineHealth !== "ready")
|
|
56
|
+
return baseSystemPrompt;
|
|
57
|
+
const mode = modeForRole(role);
|
|
58
|
+
const fragment = AgentGraphPrompts.fragmentFor(role, mode);
|
|
59
|
+
if (fragment.length === 0)
|
|
60
|
+
return baseSystemPrompt;
|
|
61
|
+
return `${baseSystemPrompt}\n\n---\n\n${fragment}`;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
// ── Per-role mode selection ───────────────────────────────────────
|
|
65
|
+
function modeForRole(role) {
|
|
66
|
+
switch (role) {
|
|
67
|
+
case "researcher-phase2":
|
|
68
|
+
case "curator":
|
|
69
|
+
case "architect":
|
|
70
|
+
return "gated";
|
|
71
|
+
case "generator":
|
|
72
|
+
case "evaluator":
|
|
73
|
+
return "dual";
|
|
74
|
+
case "planner":
|
|
75
|
+
case "researcher-phase1":
|
|
76
|
+
default:
|
|
77
|
+
return "disabled";
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=prompts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/graph/prompts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAQH,qEAAqE;AAErE,MAAM,uBAAuB,GAAG,kJAAkJ,CAAC;AAEnL,MAAM,aAAa,GAAG,4PAA4P,CAAC;AAEnR,MAAM,eAAe,GAAG,qOAAqO,CAAC;AAE9P,MAAM,cAAc,GAAG,kLAAkL,CAAC;AAE1M,MAAM,cAAc,GAAG,8MAA8M,CAAC;AAEtO,qEAAqE;AAErE,MAAM,SAAS,GAAqE;IAClF,SAAS,EAAE,EAAE;IACb,mBAAmB,EAAE,EAAE;IACvB,mBAAmB,EAAE,EAAE,KAAK,EAAE,uBAAuB,EAAE;IACvD,SAAS,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE;IACnC,WAAW,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE;IACvC,WAAW,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE;IACrC,WAAW,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE;CACtC,CAAC;AAEF,qEAAqE;AAErE,MAAM,OAAO,iBAAiB;IAC5B;;;;OAIG;IACH,MAAM,CAAC,WAAW,CAAC,IAAoB,EAAE,IAAqB;QAC5D,OAAO,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IACvC,CAAC;IAED;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,QAAQ,CACb,IAAoB,EACpB,gBAAwB,EACxB,GAAoD;QAEpD,IAAI,CAAC,GAAG,CAAC,YAAY,IAAI,GAAG,CAAC,YAAY,KAAK,OAAO;YAAE,OAAO,gBAAgB,CAAC;QAC/E,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;QAC/B,MAAM,QAAQ,GAAG,iBAAiB,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC3D,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,gBAAgB,CAAC;QACnD,OAAO,GAAG,gBAAgB,cAAc,QAAQ,EAAE,CAAC;IACrD,CAAC;CACF;AAED,qEAAqE;AAErE,SAAS,WAAW,CAAC,IAAoB;IACvC,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,mBAAmB,CAAC;QACzB,KAAK,SAAS,CAAC;QACf,KAAK,WAAW;YACd,OAAO,OAAO,CAAC;QACjB,KAAK,WAAW,CAAC;QACjB,KAAK,WAAW;YACd,OAAO,MAAM,CAAC;QAChB,KAAK,SAAS,CAAC;QACf,KAAK,mBAAmB,CAAC;QACzB;YACE,OAAO,UAAU,CAAC;IACtB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validate a path lives inside projectRoot.
|
|
3
|
+
*
|
|
4
|
+
* Returns `{ok: true, abs}` if `inputPath` resolves to a location
|
|
5
|
+
* within `projectRoot`. Returns `{ok: false}` for:
|
|
6
|
+
* - null/undefined inputs (buggy upstream responses)
|
|
7
|
+
* - paths that resolve outside the project root (e.g. "../../etc/passwd")
|
|
8
|
+
*
|
|
9
|
+
* Mirrors `sandboxPath` from src/orchestrator/tools/handlers.ts:31-45
|
|
10
|
+
* but returns a result envelope instead of throwing — graph code drops
|
|
11
|
+
* out-of-sandbox NodeRefs silently rather than crashing the agent loop.
|
|
12
|
+
*/
|
|
13
|
+
export declare function sandboxNodePath(projectRoot: string, inputPath: string | null | undefined): {
|
|
14
|
+
ok: true;
|
|
15
|
+
abs: string;
|
|
16
|
+
} | {
|
|
17
|
+
ok: false;
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=sandbox.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sandbox.d.ts","sourceRoot":"","sources":["../../src/graph/sandbox.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAC7B,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GACnC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAA;CAAE,CAW3C"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { resolve, relative, isAbsolute } from "node:path";
|
|
2
|
+
/**
|
|
3
|
+
* Validate a path lives inside projectRoot.
|
|
4
|
+
*
|
|
5
|
+
* Returns `{ok: true, abs}` if `inputPath` resolves to a location
|
|
6
|
+
* within `projectRoot`. Returns `{ok: false}` for:
|
|
7
|
+
* - null/undefined inputs (buggy upstream responses)
|
|
8
|
+
* - paths that resolve outside the project root (e.g. "../../etc/passwd")
|
|
9
|
+
*
|
|
10
|
+
* Mirrors `sandboxPath` from src/orchestrator/tools/handlers.ts:31-45
|
|
11
|
+
* but returns a result envelope instead of throwing — graph code drops
|
|
12
|
+
* out-of-sandbox NodeRefs silently rather than crashing the agent loop.
|
|
13
|
+
*/
|
|
14
|
+
export function sandboxNodePath(projectRoot, inputPath) {
|
|
15
|
+
if (!inputPath || typeof inputPath !== "string")
|
|
16
|
+
return { ok: false };
|
|
17
|
+
const abs = isAbsolute(inputPath)
|
|
18
|
+
? resolve(inputPath)
|
|
19
|
+
: resolve(projectRoot, inputPath);
|
|
20
|
+
const rel = relative(projectRoot, abs);
|
|
21
|
+
if (rel.startsWith("..") || isAbsolute(rel))
|
|
22
|
+
return { ok: false };
|
|
23
|
+
return { ok: true, abs };
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=sandbox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sandbox.js","sourceRoot":"","sources":["../../src/graph/sandbox.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE1D;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,eAAe,CAC7B,WAAmB,EACnB,SAAoC;IAEpC,IAAI,CAAC,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC;IAEtE,MAAM,GAAG,GAAG,UAAU,CAAC,SAAS,CAAC;QAC/B,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;QACpB,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IAEpC,MAAM,GAAG,GAAG,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;IACvC,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC;IAElE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;AAC3B,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export interface TokenUsageRecord {
|
|
2
|
+
agent: "generator" | "researcher-phase2" | "curator" | "architect";
|
|
3
|
+
runId: string;
|
|
4
|
+
timestamp: string;
|
|
5
|
+
inputTokens: number;
|
|
6
|
+
outputTokens: number;
|
|
7
|
+
graphEnabled: boolean;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Append-only writer for .bober/graph/token-usage.jsonl.
|
|
11
|
+
*
|
|
12
|
+
* Each call writes ONE line (one JSON object) per agent run.
|
|
13
|
+
* A metrics-write failure must not break the agent — callers should
|
|
14
|
+
* wrap calls in try/catch and swallow errors.
|
|
15
|
+
*/
|
|
16
|
+
export declare class TokenUsageLog {
|
|
17
|
+
private readonly path;
|
|
18
|
+
constructor(projectRoot: string);
|
|
19
|
+
append(r: TokenUsageRecord): Promise<void>;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=token-usage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-usage.d.ts","sourceRoot":"","sources":["../../src/graph/token-usage.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,WAAW,GAAG,mBAAmB,GAAG,SAAS,GAAG,WAAW,CAAC;IACnE,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,OAAO,CAAC;CACvB;AAID;;;;;;GAMG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;gBAElB,WAAW,EAAE,MAAM;IAIzB,MAAM,CAAC,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;CAIjD"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { appendFile } from "node:fs/promises";
|
|
2
|
+
import { resolve } from "node:path";
|
|
3
|
+
import { ensureDir } from "../utils/fs.js";
|
|
4
|
+
// ── TokenUsageLog ──────────────────────────────────────────────────
|
|
5
|
+
/**
|
|
6
|
+
* Append-only writer for .bober/graph/token-usage.jsonl.
|
|
7
|
+
*
|
|
8
|
+
* Each call writes ONE line (one JSON object) per agent run.
|
|
9
|
+
* A metrics-write failure must not break the agent — callers should
|
|
10
|
+
* wrap calls in try/catch and swallow errors.
|
|
11
|
+
*/
|
|
12
|
+
export class TokenUsageLog {
|
|
13
|
+
path;
|
|
14
|
+
constructor(projectRoot) {
|
|
15
|
+
this.path = resolve(projectRoot, ".bober/graph/token-usage.jsonl");
|
|
16
|
+
}
|
|
17
|
+
async append(r) {
|
|
18
|
+
await ensureDir(resolve(this.path, ".."));
|
|
19
|
+
await appendFile(this.path, JSON.stringify(r) + "\n", "utf-8");
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=token-usage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-usage.js","sourceRoot":"","sources":["../../src/graph/token-usage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAa3C,sEAAsE;AAEtE;;;;;;GAMG;AACH,MAAM,OAAO,aAAa;IACP,IAAI,CAAS;IAE9B,YAAY,WAAmB;QAC7B,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,WAAW,EAAE,gCAAgC,CAAC,CAAC;IACrE,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,CAAmB;QAC9B,MAAM,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QAC1C,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;IACjE,CAAC;CACF"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import type { z } from "zod";
|
|
2
|
+
import type { GraphSectionSchema } from "../config/schema.js";
|
|
3
|
+
export type GraphSection = z.infer<typeof GraphSectionSchema>;
|
|
4
|
+
export type PrereqResult = {
|
|
5
|
+
ok: true;
|
|
6
|
+
version: string;
|
|
7
|
+
} | {
|
|
8
|
+
ok: false;
|
|
9
|
+
reason: "MISSING" | "INCOMPATIBLE";
|
|
10
|
+
hint: string;
|
|
11
|
+
};
|
|
12
|
+
export type GraphManifest = {
|
|
13
|
+
schemaVersion: 1;
|
|
14
|
+
tokensaveVersion: string;
|
|
15
|
+
createdAt: string;
|
|
16
|
+
lastSyncAt: string;
|
|
17
|
+
indexedFileCount: number;
|
|
18
|
+
languageTier: string;
|
|
19
|
+
lastSyncedHeadSha: string | null;
|
|
20
|
+
pendingFiles: string[];
|
|
21
|
+
};
|
|
22
|
+
export type StalenessVerdict = {
|
|
23
|
+
stale: false;
|
|
24
|
+
} | {
|
|
25
|
+
stale: true;
|
|
26
|
+
reason: "HEAD_DIFFERS" | "NEWER_MTIME" | "NO_MANIFEST";
|
|
27
|
+
detail: string;
|
|
28
|
+
newerFiles?: string[];
|
|
29
|
+
};
|
|
30
|
+
/** Discriminated union for all GraphClient method returns. ADR-3. */
|
|
31
|
+
export type GraphResult<T> = {
|
|
32
|
+
ok: true;
|
|
33
|
+
data: T;
|
|
34
|
+
backend: "mcp" | "binding";
|
|
35
|
+
durationMs: number;
|
|
36
|
+
/** Present only when manifest is stale. Stale data is still data. */
|
|
37
|
+
stale?: true;
|
|
38
|
+
} | {
|
|
39
|
+
ok: false;
|
|
40
|
+
reason: GraphFailureReason;
|
|
41
|
+
detail: string;
|
|
42
|
+
};
|
|
43
|
+
/** Exhaustive set of graph failure modes. Extending this requires a new
|
|
44
|
+
* case in every `switch (reason)` — assertNever enforces this at compile time. */
|
|
45
|
+
export type GraphFailureReason = "GRAPH_DISABLED" | "GRAPH_UNAVAILABLE" | "GRAPH_STALE" | "GRAPH_TIMEOUT" | "GRAPH_ERROR";
|
|
46
|
+
export type NodeRef = {
|
|
47
|
+
id: string;
|
|
48
|
+
kind: "function" | "class" | "module" | "symbol";
|
|
49
|
+
file: string;
|
|
50
|
+
line: number;
|
|
51
|
+
symbol: string;
|
|
52
|
+
};
|
|
53
|
+
export type SearchHit = {
|
|
54
|
+
node: NodeRef;
|
|
55
|
+
score: number;
|
|
56
|
+
snippet: string;
|
|
57
|
+
};
|
|
58
|
+
export type ImpactReport = {
|
|
59
|
+
root: NodeRef;
|
|
60
|
+
affected: NodeRef[];
|
|
61
|
+
testsAffected: NodeRef[];
|
|
62
|
+
};
|
|
63
|
+
export type FallbackHint = {
|
|
64
|
+
message: string;
|
|
65
|
+
suggestedTools: string[];
|
|
66
|
+
retryable: boolean;
|
|
67
|
+
};
|
|
68
|
+
export type PrefetchOp = "search" | "query" | "impact" | "reviewContext" | "overview" | "changes";
|
|
69
|
+
export type PrefetchSpec = {
|
|
70
|
+
key: string;
|
|
71
|
+
op: PrefetchOp;
|
|
72
|
+
/** Op-specific args; GraphClient.prefetch dispatches by `op`. */
|
|
73
|
+
args: unknown;
|
|
74
|
+
};
|
|
75
|
+
export interface OnboardingInputs {
|
|
76
|
+
status: {
|
|
77
|
+
tokensaveVersion: string;
|
|
78
|
+
indexedFileCount: number;
|
|
79
|
+
};
|
|
80
|
+
hotspots: Array<{
|
|
81
|
+
symbol: string;
|
|
82
|
+
file: string;
|
|
83
|
+
line: number;
|
|
84
|
+
score: number;
|
|
85
|
+
reason?: string;
|
|
86
|
+
}>;
|
|
87
|
+
deadCode: Array<{
|
|
88
|
+
symbol: string;
|
|
89
|
+
file: string;
|
|
90
|
+
line: number;
|
|
91
|
+
}>;
|
|
92
|
+
circular: Array<{
|
|
93
|
+
cycle: string[];
|
|
94
|
+
}>;
|
|
95
|
+
largest: Array<{
|
|
96
|
+
symbol: string;
|
|
97
|
+
file: string;
|
|
98
|
+
line: number;
|
|
99
|
+
loc: number;
|
|
100
|
+
}>;
|
|
101
|
+
moduleApis: Array<{
|
|
102
|
+
module: string;
|
|
103
|
+
community?: string;
|
|
104
|
+
symbols: Array<{
|
|
105
|
+
name: string;
|
|
106
|
+
file: string;
|
|
107
|
+
line: number;
|
|
108
|
+
hasInternalCallers: boolean;
|
|
109
|
+
}>;
|
|
110
|
+
}>;
|
|
111
|
+
files: Array<{
|
|
112
|
+
path: string;
|
|
113
|
+
symbols: number;
|
|
114
|
+
}>;
|
|
115
|
+
}
|
|
116
|
+
export interface OnboardingArtifacts {
|
|
117
|
+
readme: string;
|
|
118
|
+
architectureOverview: string;
|
|
119
|
+
hotspots: string;
|
|
120
|
+
knowledgeGaps: string;
|
|
121
|
+
communities: string;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Use as `default: return assertNever(reason);` in switch statements
|
|
125
|
+
* over discriminated unions. If a new variant is added without a case,
|
|
126
|
+
* `tsc --noEmit` fails because the discriminator is no longer `never`.
|
|
127
|
+
*/
|
|
128
|
+
export declare function assertNever(x: never): never;
|
|
129
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/graph/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// Source-of-truth graph types for the harness integration.
|
|
2
|
+
// Mirrors arch-20260524-port-code-review-graph-architecture.md §Data Model.
|
|
3
|
+
// ── Exhaustiveness helper ──────────────────────────────────────────
|
|
4
|
+
/**
|
|
5
|
+
* Use as `default: return assertNever(reason);` in switch statements
|
|
6
|
+
* over discriminated unions. If a new variant is added without a case,
|
|
7
|
+
* `tsc --noEmit` fails because the discriminator is no longer `never`.
|
|
8
|
+
*/
|
|
9
|
+
export function assertNever(x) {
|
|
10
|
+
throw new Error(`Unreachable: ${JSON.stringify(x)}`);
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/graph/types.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,4EAA4E;AA4H5E,sEAAsE;AAEtE;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,CAAQ;IAClC,MAAM,IAAI,KAAK,CAAC,gBAAgB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACvD,CAAC"}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Incident state machine + phase routing (Sprint 24).
|
|
3
|
+
*
|
|
4
|
+
* Wraps Sprint 19 setIncidentStatus with a GUARDED transition table:
|
|
5
|
+
* invalid transitions reject with a typed error before any disk write.
|
|
6
|
+
*
|
|
7
|
+
* The state machine is deterministic: given (currentPhase, agentOutput),
|
|
8
|
+
* the next phase is fully determined. No human-in-loop required for
|
|
9
|
+
* happy-path autopilot (subject to Tier 2 risky-action gates that fire
|
|
10
|
+
* inside executeAction). This is the integration capstone — no new
|
|
11
|
+
* primitives, only orchestration.
|
|
12
|
+
*
|
|
13
|
+
* Re-open path (resolved → investigating) is the ONLY transition that
|
|
14
|
+
* requires an explicit `reason` arg. Every other transition is implicit
|
|
15
|
+
* from the agent's output.
|
|
16
|
+
*
|
|
17
|
+
* Phase transition diagram:
|
|
18
|
+
*
|
|
19
|
+
* ┌──────────────────────────────────────────────────────┐
|
|
20
|
+
* │ │
|
|
21
|
+
* ▼ │
|
|
22
|
+
* ┌───────────────┐ │
|
|
23
|
+
* │ investigating │ │
|
|
24
|
+
* └───────┬───────┘ │
|
|
25
|
+
* │ │
|
|
26
|
+
* diagnoser produces │
|
|
27
|
+
* nextActions with │
|
|
28
|
+
* ≥1 risky │
|
|
29
|
+
* │ │
|
|
30
|
+
* ▼ │
|
|
31
|
+
* ┌───────────────┐ │
|
|
32
|
+
* │ remediating │ │
|
|
33
|
+
* └───────┬───────┘ │
|
|
34
|
+
* │ │
|
|
35
|
+
* all proposed actions executed │
|
|
36
|
+
* + postcondition passed │
|
|
37
|
+
* │ │
|
|
38
|
+
* ▼ │
|
|
39
|
+
* ┌───────────────┐ ──── verifyResolution fails ─────────────────┤
|
|
40
|
+
* │ monitoring │ │
|
|
41
|
+
* └───────┬───────┘ │
|
|
42
|
+
* │ │
|
|
43
|
+
* verifyResolution.verified=true │
|
|
44
|
+
* for criteria.windowMinutes │
|
|
45
|
+
* │ │
|
|
46
|
+
* ▼ │
|
|
47
|
+
* ┌───────────────┐ ──── user re-opens (reason REQUIRED) ────────┘
|
|
48
|
+
* │ resolved │
|
|
49
|
+
* └───────────────┘ (auto-postmortem triggered by setIncidentStatus)
|
|
50
|
+
*
|
|
51
|
+
* At any phase: user issues `bober incident abort <id> --reason <text> [--confirm-rollback]`
|
|
52
|
+
* ──────────────────────────────────────► aborted (terminal)
|
|
53
|
+
*
|
|
54
|
+
* Sprint 24 — src/incident/orchestrator.ts
|
|
55
|
+
*/
|
|
56
|
+
import { type SetStatusOpts } from "./timeline.js";
|
|
57
|
+
import { type IncidentId, type IncidentMetadata, type IncidentPhase } from "./types.js";
|
|
58
|
+
import { type ExecuteRollbackOpts, type RollbackResult } from "./rollback.js";
|
|
59
|
+
import { type ResolutionCriteria, type VerifyResolutionDeps } from "./resolution-verify.js";
|
|
60
|
+
import type { RiskyActionConfig } from "../orchestrator/deploy/resolve.js";
|
|
61
|
+
import type { BoberConfig } from "../config/schema.js";
|
|
62
|
+
export declare class InvalidTransitionError extends Error {
|
|
63
|
+
from: IncidentPhase;
|
|
64
|
+
to: IncidentPhase;
|
|
65
|
+
reasonRequired: boolean;
|
|
66
|
+
constructor(from: IncidentPhase, to: IncidentPhase, reasonRequired?: boolean);
|
|
67
|
+
}
|
|
68
|
+
export interface TransitionOpts {
|
|
69
|
+
reason?: string;
|
|
70
|
+
setStatus?: SetStatusOpts;
|
|
71
|
+
}
|
|
72
|
+
export interface DiagnosisNextAction {
|
|
73
|
+
blastRadius: "safe" | "risky";
|
|
74
|
+
action?: string;
|
|
75
|
+
requiresApproval?: boolean;
|
|
76
|
+
}
|
|
77
|
+
export interface DiagnosisResult {
|
|
78
|
+
nextActions: DiagnosisNextAction[];
|
|
79
|
+
summary?: string;
|
|
80
|
+
}
|
|
81
|
+
export interface ApplyDiagnosisOpts {
|
|
82
|
+
/** Override clock for tests. */
|
|
83
|
+
now?: () => Date;
|
|
84
|
+
}
|
|
85
|
+
export interface ApplyDeploymentDeployedEntry {
|
|
86
|
+
status: "executed" | "failed";
|
|
87
|
+
}
|
|
88
|
+
export interface ApplyDeploymentResult {
|
|
89
|
+
executed: ApplyDeploymentDeployedEntry[];
|
|
90
|
+
}
|
|
91
|
+
export interface ApplyDeploymentOpts {
|
|
92
|
+
/** Forwarded to verifyResolution when monitoring transition is attempted. */
|
|
93
|
+
verifyDeps?: Omit<VerifyResolutionDeps, "projectRoot">;
|
|
94
|
+
resolutionCriteria?: ResolutionCriteria;
|
|
95
|
+
/** Skip verifyResolution call (test seam). */
|
|
96
|
+
skipVerification?: boolean;
|
|
97
|
+
now?: () => Date;
|
|
98
|
+
}
|
|
99
|
+
export interface AbortOpts {
|
|
100
|
+
reason: string;
|
|
101
|
+
confirmRollback?: boolean;
|
|
102
|
+
config?: RiskyActionConfig;
|
|
103
|
+
rollbackOpts?: ExecuteRollbackOpts;
|
|
104
|
+
now?: () => Date;
|
|
105
|
+
/** Sprint 28 — optional BoberConfig for telemetry emit on incident-aborted. */
|
|
106
|
+
boberConfig?: BoberConfig;
|
|
107
|
+
}
|
|
108
|
+
export interface AbortResult {
|
|
109
|
+
rollback?: RollbackResult;
|
|
110
|
+
abortReportPath: string;
|
|
111
|
+
}
|
|
112
|
+
export declare function readIncidentMetadata(projectRoot: string, incidentId: IncidentId): Promise<IncidentMetadata>;
|
|
113
|
+
export declare function transitionPhase(projectRoot: string, incidentId: IncidentId, toPhase: IncidentPhase, opts?: TransitionOpts): Promise<void>;
|
|
114
|
+
/**
|
|
115
|
+
* Inspect a diagnosis output and transition the incident phase accordingly.
|
|
116
|
+
*
|
|
117
|
+
* If any nextAction has blastRadius='risky' → transition to 'remediating'.
|
|
118
|
+
* If nextActions is empty (diagnoser found no remediation needed) → leave at
|
|
119
|
+
* 'investigating'; the operator should call transitionPhase or `bober incident end`.
|
|
120
|
+
* If nextActions has entries but all are safe → leave at 'investigating' (no
|
|
121
|
+
* state-mutating actions are needed; diagnose further or end the incident).
|
|
122
|
+
*
|
|
123
|
+
* Returns { newPhase } — the phase AFTER the call. Callers can use this to
|
|
124
|
+
* branch their own logic.
|
|
125
|
+
*/
|
|
126
|
+
export declare function applyDiagnosisOutcome(projectRoot: string, incidentId: IncidentId, diagnosis: DiagnosisResult, _opts?: ApplyDiagnosisOpts): Promise<{
|
|
127
|
+
newPhase: IncidentPhase;
|
|
128
|
+
}>;
|
|
129
|
+
/**
|
|
130
|
+
* After deployment actions complete, transition the incident phase.
|
|
131
|
+
*
|
|
132
|
+
* If all actions executed successfully AND verifyResolution is available:
|
|
133
|
+
* - call verifyResolution
|
|
134
|
+
* - if verified=true → transition to 'monitoring'
|
|
135
|
+
* - Returns { newPhase: 'monitoring', verified: true }
|
|
136
|
+
*
|
|
137
|
+
* Transitioning from monitoring → resolved is the caller's responsibility
|
|
138
|
+
* (the CLI / orchestration layer drives the second transition after the
|
|
139
|
+
* criteria window elapses). This function ONLY moves to monitoring.
|
|
140
|
+
*
|
|
141
|
+
* If verifyDeps is not provided or skipVerification=true:
|
|
142
|
+
* - Transition to monitoring unconditionally (operator is asserting success).
|
|
143
|
+
*
|
|
144
|
+
* If any action failed:
|
|
145
|
+
* - Stay in remediating (return { newPhase: 'remediating', verified: false }).
|
|
146
|
+
*/
|
|
147
|
+
export declare function applyDeploymentOutcome(projectRoot: string, incidentId: IncidentId, deployResult: ApplyDeploymentResult, opts?: ApplyDeploymentOpts): Promise<{
|
|
148
|
+
newPhase: IncidentPhase;
|
|
149
|
+
verified?: boolean;
|
|
150
|
+
}>;
|
|
151
|
+
/**
|
|
152
|
+
* Abort an incident at any phase.
|
|
153
|
+
*
|
|
154
|
+
* Writes .bober/incidents/<id>/aborted.txt with reason.
|
|
155
|
+
* Writes .bober/incidents/<id>/abort-report.md with reason + rollback plan.
|
|
156
|
+
* Transitions the incident to status='aborted' (terminal).
|
|
157
|
+
*
|
|
158
|
+
* IF confirmRollback=true: plans + executes rollback for executed-not-rolled-back
|
|
159
|
+
* changes (each step goes through the deploy gate individually).
|
|
160
|
+
* IF confirmRollback=false (default): does NOT execute any rollbacks.
|
|
161
|
+
*
|
|
162
|
+
* Silent rollback on abort is a footgun — confirmRollback=true is the explicit
|
|
163
|
+
* opt-in. Without it, the operator is on the hook for manual cleanup.
|
|
164
|
+
*
|
|
165
|
+
* @throws Error if the incident is already aborted (abort is terminal).
|
|
166
|
+
*/
|
|
167
|
+
export declare function abort(projectRoot: string, incidentId: IncidentId, opts: AbortOpts): Promise<AbortResult>;
|
|
168
|
+
//# sourceMappingURL=orchestrator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/incident/orchestrator.ts"],"names":[],"mappings":"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"}
|