agent-bober 0.11.6 → 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 +311 -0
- package/README.md +124 -9
- 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 +127 -1
- package/agents/bober-generator.md +122 -3
- package/agents/bober-planner.md +293 -32
- 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/eval.js +6 -6
- package/dist/cli/commands/eval.js.map +1 -1
- 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 +82 -3
- 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/plan.d.ts +12 -0
- package/dist/cli/commands/plan.d.ts.map +1 -1
- package/dist/cli/commands/plan.js +232 -37
- package/dist/cli/commands/plan.js.map +1 -1
- 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 +31 -2
- package/dist/cli/commands/run.js.map +1 -1
- package/dist/cli/commands/sprint.d.ts.map +1 -1
- package/dist/cli/commands/sprint.js +8 -8
- package/dist/cli/commands/sprint.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 +73 -2
- 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 +1016 -96
- 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/contracts/eval-result.d.ts +38 -38
- package/dist/contracts/index.d.ts +2 -2
- package/dist/contracts/index.d.ts.map +1 -1
- package/dist/contracts/index.js +8 -4
- package/dist/contracts/index.js.map +1 -1
- package/dist/contracts/spec.d.ts +335 -40
- package/dist/contracts/spec.d.ts.map +1 -1
- package/dist/contracts/spec.js +210 -18
- package/dist/contracts/spec.js.map +1 -1
- package/dist/contracts/sprint-contract.d.ts +155 -88
- package/dist/contracts/sprint-contract.d.ts.map +1 -1
- package/dist/contracts/sprint-contract.js +176 -29
- package/dist/contracts/sprint-contract.js.map +1 -1
- package/dist/evaluators/builtin/api-check.js +1 -1
- package/dist/evaluators/builtin/api-check.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 +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- 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/contracts.js +2 -2
- package/dist/mcp/tools/contracts.js.map +1 -1
- package/dist/mcp/tools/eval.js +8 -8
- package/dist/mcp/tools/eval.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/plan.d.ts.map +1 -1
- package/dist/mcp/tools/plan.js +40 -14
- package/dist/mcp/tools/plan.js.map +1 -1
- 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/sprint.d.ts.map +1 -1
- package/dist/mcp/tools/sprint.js +11 -11
- package/dist/mcp/tools/sprint.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/context-handoff.d.ts +484 -224
- package/dist/orchestrator/context-handoff.d.ts.map +1 -1
- package/dist/orchestrator/context-handoff.js +32 -12
- package/dist/orchestrator/context-handoff.js.map +1 -1
- package/dist/orchestrator/curator-agent.d.ts.map +1 -1
- package/dist/orchestrator/curator-agent.js +63 -12
- 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 +23 -10
- 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 +24 -11
- 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 +4 -2
- 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 +28 -0
- package/dist/orchestrator/pipeline.d.ts.map +1 -1
- package/dist/orchestrator/pipeline.js +223 -30
- package/dist/orchestrator/pipeline.js.map +1 -1
- package/dist/orchestrator/planner-agent.d.ts +21 -1
- package/dist/orchestrator/planner-agent.d.ts.map +1 -1
- package/dist/orchestrator/planner-agent.js +16 -6
- 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/history.d.ts.map +1 -1
- package/dist/state/history.js +3 -3
- package/dist/state/history.js.map +1 -1
- 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/plan-state.js +1 -1
- package/dist/state/plan-state.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/state/sprint-state.d.ts +9 -2
- package/dist/state/sprint-state.d.ts.map +1 -1
- package/dist/state/sprint-state.js +25 -11
- package/dist/state/sprint-state.js.map +1 -1
- 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 +6 -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/migrate-specs.mjs +127 -0
- package/scripts/run-kpi-gate.mjs +245 -0
- package/scripts/sync-skills.mjs +99 -0
- 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 +51 -0
- package/skills/bober.plan/references/spec-schema.md +31 -4
- package/skills/bober.postmortem/SKILL.md +231 -0
- package/skills/bober.run/SKILL.md +41 -7
- package/skills/bober.runbook/SKILL.md +335 -0
- package/skills/bober.sprint/SKILL.md +6 -259
- package/skills/bober.using-bober/SKILL.md +133 -0
- package/skills/bober.verify/SKILL.md +143 -0
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: bober.impact
|
|
3
|
+
description: Analyse the impact radius of a symbol or file in the code graph — which symbols are affected and which tests cover it. Writes a markdown report to .bober/graph/impact/<slug>.md.
|
|
4
|
+
argument-hint: <symbol|file>
|
|
5
|
+
handoffs:
|
|
6
|
+
- label: "Plan Feature"
|
|
7
|
+
command: /bober-plan
|
|
8
|
+
prompt: "Plan changes to the analysed symbol"
|
|
9
|
+
- label: "Run Sprint"
|
|
10
|
+
command: /bober-sprint
|
|
11
|
+
prompt: "Build changes to the affected code"
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# bober.impact — Impact Analysis Skill
|
|
15
|
+
|
|
16
|
+
You are running the **bober.impact** skill. Your job is to analyse the impact radius of a symbol or file — what other symbols depend on it and which tests cover it.
|
|
17
|
+
|
|
18
|
+
## Usage
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
/bober-impact <symbol|file>
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Examples:
|
|
25
|
+
- `/bober-impact sandboxPath` — analyse a function by name
|
|
26
|
+
- `/bober-impact src/graph/client.ts` — analyse a file
|
|
27
|
+
- `/bober-impact GraphClient` — analyse a class
|
|
28
|
+
- `/bober-impact TokensaveCli.sync` — analyse a method
|
|
29
|
+
|
|
30
|
+
## What This Skill Produces
|
|
31
|
+
|
|
32
|
+
A markdown file at `.bober/graph/impact/<slug>.md` with three sections:
|
|
33
|
+
|
|
34
|
+
```markdown
|
|
35
|
+
# Impact: <target>
|
|
36
|
+
|
|
37
|
+
## Affected symbols
|
|
38
|
+
- `<symbol>` (<kind>) — <file>:<line>
|
|
39
|
+
...
|
|
40
|
+
|
|
41
|
+
## Tests covering this symbol
|
|
42
|
+
- `<symbol>` (<kind>) — <file>:<line>
|
|
43
|
+
...
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
The slug is derived from the target: lowercase, non-alphanumeric characters replaced with `-`, consecutive `-` collapsed, leading/trailing `-` stripped, truncated to 40 characters.
|
|
47
|
+
|
|
48
|
+
## Running via CLI
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
agent-bober impact sandboxPath
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Output:
|
|
55
|
+
```
|
|
56
|
+
Starting graph engine...
|
|
57
|
+
Analysing impact for: sandboxPath
|
|
58
|
+
Impact report written: .bober/graph/impact/sandboxpath.md
|
|
59
|
+
Affected symbols: N
|
|
60
|
+
Test coverage: N
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## Running via MCP Tools (Alternative)
|
|
64
|
+
|
|
65
|
+
You can produce equivalent output directly using MCP tools:
|
|
66
|
+
|
|
67
|
+
1. Get impact radius: `get_impact_radius` with `{ target: "<symbol>" }`
|
|
68
|
+
2. Find test coverage: `query_graph` with `{ pattern: "tests_for", target: { symbol: "<symbol>", ... } }`
|
|
69
|
+
3. Format as markdown with the exact section headings:
|
|
70
|
+
- `# Impact: <target>`
|
|
71
|
+
- `## Affected symbols`
|
|
72
|
+
- `## Tests covering this symbol`
|
|
73
|
+
4. Write to `.bober/graph/impact/<slug>.md`
|
|
74
|
+
|
|
75
|
+
## Slug Derivation Rules
|
|
76
|
+
|
|
77
|
+
```
|
|
78
|
+
target.toLowerCase()
|
|
79
|
+
.replace(/[^a-z0-9]+/g, '-') // non-alphanumeric → -
|
|
80
|
+
.replace(/-+/g, '-') // collapse consecutive -
|
|
81
|
+
.replace(/^-+|-+$/g, '') // strip leading/trailing -
|
|
82
|
+
.slice(0, 40) // max 40 chars
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
Examples:
|
|
86
|
+
- `sandboxPath` → `sandboxpath`
|
|
87
|
+
- `src/orchestrator/tools/handlers.ts` → `src-orchestrator-tools-handlers-ts`
|
|
88
|
+
- `MyClass.doThing` → `myclass-dothing`
|
|
89
|
+
- `__internal__` → `internal`
|
|
90
|
+
|
|
91
|
+
## Prerequisites
|
|
92
|
+
|
|
93
|
+
- `graph.enabled: true` in `bober.config.json`
|
|
94
|
+
- `tokensave` >= 6.0.0-beta.1 installed
|
|
95
|
+
- Graph must be initialised and synced (`agent-bober graph init && agent-bober graph sync`)
|
|
96
|
+
|
|
97
|
+
## Error Handling
|
|
98
|
+
|
|
99
|
+
- If graph.enabled=false: exits 1 with instructions to enable it
|
|
100
|
+
- If tokensave missing: exits 1 with install hint
|
|
101
|
+
- If the symbol is not found in the graph: writes a report noting no affected symbols
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: bober-incident
|
|
3
|
+
description: Use when responding to a production incident or system-level failure — kicks off the incident pipeline (diagnose → propose actions → deploy with gates → verify resolution → postmortem). The top-level entry that routes between bober-diagnoser, bober-deployer, and bober-postmortemer based on incident phase.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Top-Level Incident Response
|
|
7
|
+
|
|
8
|
+
## Overview
|
|
9
|
+
|
|
10
|
+
This skill governs the **full incident lifecycle** — from the first symptom report through root-cause diagnosis, remediation execution, resolution verification, and postmortem synthesis. It is the entry point that routes between all Tier 3 sub-disciplines.
|
|
11
|
+
|
|
12
|
+
The lifecycle is **phased and deterministic**. Each phase transition is driven by the output of a sub-skill (diagnoser, deployer, verifier) and gated by the incident state machine. No phase can be skipped. No resolution can bypass verification. This is the architecture that prevents "I fixed it" from meaning "I changed something and it seems better now."
|
|
13
|
+
|
|
14
|
+
Key architectural invariants:
|
|
15
|
+
- Every incident has a timeline (`timeline.jsonl`) from creation to resolution.
|
|
16
|
+
- Every destructive action passes through a checkpoint gate before execution.
|
|
17
|
+
- Every resolution requires a verifiable artifact (metric evidence or an override token with an audit trail).
|
|
18
|
+
- Every resolved incident triggers a postmortem automatically.
|
|
19
|
+
|
|
20
|
+
This skill does **not** replace `bober.diagnose`, `bober.deploy`, `bober.runbook`, or `bober.postmortem`. It orchestrates them.
|
|
21
|
+
|
|
22
|
+
## The Iron Law
|
|
23
|
+
|
|
24
|
+
```
|
|
25
|
+
NO INCIDENT WITHOUT TIMELINE; NO RESOLUTION WITHOUT VERIFICATION
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Both clauses are unconditional. They do not have exceptions for urgency, familiarity, or pipeline mode.
|
|
29
|
+
|
|
30
|
+
## When to Use
|
|
31
|
+
|
|
32
|
+
Use this skill when:
|
|
33
|
+
- A page fires (PagerDuty, OpsGenie, or any on-call alert)
|
|
34
|
+
- An SLO breach is detected (error rate, latency, availability below threshold)
|
|
35
|
+
- A user-reported outage is confirmed by at least one objective signal
|
|
36
|
+
- A deployment causes observable regression (rollout watchdog fires)
|
|
37
|
+
- Any system-level failure requires coordinated diagnosis + remediation
|
|
38
|
+
|
|
39
|
+
Do NOT use this skill for:
|
|
40
|
+
- Planned maintenance (no incident, no postmortem required)
|
|
41
|
+
- Feature work that happens to touch infrastructure
|
|
42
|
+
- Read-only investigation with no remediation intent (use `bober.diagnose` directly)
|
|
43
|
+
|
|
44
|
+
## Workflow
|
|
45
|
+
|
|
46
|
+
Execute each phase in order. Do not skip phases. Phase transitions are guarded by the incident state machine.
|
|
47
|
+
|
|
48
|
+
### Phase 1: Start the Incident
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
bober incident start "<symptom>" [--severity S1|S2|S3|S4]
|
|
52
|
+
# Returns: incidentId
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
This creates the incident artifact directory (`.bober/incidents/<id>/`) with all required files. The incident is immediately in status `investigating`. The incidentId anchors all subsequent artifacts.
|
|
56
|
+
|
|
57
|
+
Severity semantics (informational — does NOT affect routing):
|
|
58
|
+
- **S1** — Total outage; all users affected; no workaround.
|
|
59
|
+
- **S2** — Major degradation; significant user impact; partial workaround available.
|
|
60
|
+
- **S3** — Partial degradation; moderate impact; workaround available.
|
|
61
|
+
- **S4** — Minor issue; limited impact; no immediate user harm.
|
|
62
|
+
|
|
63
|
+
### Phase 2: Diagnose
|
|
64
|
+
|
|
65
|
+
Invoke the `bober-diagnoser` agent with the incidentId and symptom. The diagnoser:
|
|
66
|
+
1. Queries observability tools (`obs__*__*`).
|
|
67
|
+
2. Writes a `diagnoses/<diagnosisId>.json` with hypotheses + nextActions.
|
|
68
|
+
3. Each nextAction declares `blastRadius: safe | risky`.
|
|
69
|
+
|
|
70
|
+
The incident state machine reads `nextActions`:
|
|
71
|
+
- One or more `risky` actions → transition to `remediating`.
|
|
72
|
+
- No risky actions (or no actions at all) → stay at `investigating`. Operator ends the incident with `bober incident end`.
|
|
73
|
+
|
|
74
|
+
### Phase 3: Remediate (if nextActions include risky steps)
|
|
75
|
+
|
|
76
|
+
Invoke the `bober-deployer` agent for each risky nextAction.
|
|
77
|
+
|
|
78
|
+
Each action passes through the Sprint 20 gate:
|
|
79
|
+
- Gate mechanism is resolved from `bober.config.json` → `pipeline.checkpointMechanism`.
|
|
80
|
+
- In `careful` mode: operator must explicitly approve each risky action before execution.
|
|
81
|
+
- In `autopilot` mode: gate fires and auto-approves but STILL writes an audit trail.
|
|
82
|
+
|
|
83
|
+
No action is executed without a `ChangeEntry` (with `inverse.description`) written first.
|
|
84
|
+
|
|
85
|
+
After execution, verify resolution:
|
|
86
|
+
```bash
|
|
87
|
+
bober incident end --verified # if external verification confirms
|
|
88
|
+
bober incident end --override "Investigation concluded; no metric available" # operator override
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### Phase 4: Verify Resolution
|
|
92
|
+
|
|
93
|
+
Resolution requires one of:
|
|
94
|
+
1. `opts.verifyResult.verified === true` — metric confirmation from `verifyResolution()`.
|
|
95
|
+
2. `opts.overrideToken = 'SKIP_METRIC_VERIFY: <reason>'` — operator asserts resolution with documented reason.
|
|
96
|
+
|
|
97
|
+
Neither path can be skipped. The gate is enforced in `setIncidentStatus` (Sprint 22).
|
|
98
|
+
|
|
99
|
+
### Phase 5: Postmortem
|
|
100
|
+
|
|
101
|
+
On transition to `resolved`, Sprint 23's auto-trigger fires:
|
|
102
|
+
- `generatePostmortem(projectRoot, incidentId)` synthesizes `postmortem.md` from all artifacts.
|
|
103
|
+
- The postmortemPath is written to `incident.json`.
|
|
104
|
+
|
|
105
|
+
The postmortem is automatic. Operators can view or regenerate:
|
|
106
|
+
```bash
|
|
107
|
+
bober postmortem show <incidentId>
|
|
108
|
+
bober postmortem generate <incidentId> # re-synthesize
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
## Slash Command Flow (/bober-incident)
|
|
112
|
+
|
|
113
|
+
When a user invokes `/bober-incident` from Claude Code:
|
|
114
|
+
|
|
115
|
+
1. **If no symptom provided in the invocation:**
|
|
116
|
+
- Prompt: "What is the symptom or alert? (e.g., '500 errors on checkout endpoint', 'p99 latency >3s on API gateway')"
|
|
117
|
+
- Wait for a clear, specific symptom description before proceeding.
|
|
118
|
+
- Do NOT proceed with a vague symptom like "something is wrong".
|
|
119
|
+
|
|
120
|
+
2. **If symptom is provided:**
|
|
121
|
+
- Run: `bober incident start "<symptom>" [--severity <S1|S2|S3|S4>]`
|
|
122
|
+
- Surface the incidentId to the user immediately.
|
|
123
|
+
- Transition to diagnosis phase.
|
|
124
|
+
|
|
125
|
+
3. **At each phase transition:**
|
|
126
|
+
- Announce the transition clearly: "Phase transition: investigating → remediating"
|
|
127
|
+
- Display the incidentId so the operator can track state.
|
|
128
|
+
- Surface any gate approvals required before proceeding.
|
|
129
|
+
|
|
130
|
+
4. **Output format:**
|
|
131
|
+
- Use markdown headers for phases.
|
|
132
|
+
- Use code blocks for commands.
|
|
133
|
+
- Use bold for incidentId and phase names.
|
|
134
|
+
- Show `bober incident status <id>` output at each transition.
|
|
135
|
+
|
|
136
|
+
Example invocation flow:
|
|
137
|
+
```
|
|
138
|
+
/bober-incident 500 errors spiking on checkout endpoint
|
|
139
|
+
|
|
140
|
+
→ Incident created: inc-20260524-500-errors-on
|
|
141
|
+
→ Phase: investigating
|
|
142
|
+
→ Severity: S2 (user-visible checkout failure)
|
|
143
|
+
|
|
144
|
+
[Diagnoser output: connection pool exhausted after migration 042]
|
|
145
|
+
|
|
146
|
+
→ Phase transition: investigating → remediating
|
|
147
|
+
→ Risky actions proposed: 2
|
|
148
|
+
|
|
149
|
+
1. Scale deployment api 3→6 replicas (risky)
|
|
150
|
+
2. Disable flag new_checkout_flow (risky)
|
|
151
|
+
|
|
152
|
+
[Gate approval required for each step]
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
## Phase Transition Diagram
|
|
156
|
+
|
|
157
|
+
```
|
|
158
|
+
┌──────────────────────────────────────────────────────┐
|
|
159
|
+
│ │
|
|
160
|
+
▼ │
|
|
161
|
+
┌───────────────┐ │
|
|
162
|
+
│ investigating │ │
|
|
163
|
+
└───────┬───────┘ │
|
|
164
|
+
│ │
|
|
165
|
+
diagnoser produces │
|
|
166
|
+
nextActions with │
|
|
167
|
+
≥1 risky │
|
|
168
|
+
│ │
|
|
169
|
+
▼ │
|
|
170
|
+
┌───────────────┐ │
|
|
171
|
+
│ remediating │ │
|
|
172
|
+
└───────┬───────┘ │
|
|
173
|
+
│ │
|
|
174
|
+
all proposed actions executed │
|
|
175
|
+
+ postcondition passed │
|
|
176
|
+
│ │
|
|
177
|
+
▼ │
|
|
178
|
+
┌───────────────┐ ──── verifyResolution fails ─────────────────┤
|
|
179
|
+
│ monitoring │ │
|
|
180
|
+
└───────┬───────┘ │
|
|
181
|
+
│ │
|
|
182
|
+
verifyResolution.verified=true │
|
|
183
|
+
for criteria.windowMinutes │
|
|
184
|
+
│ │
|
|
185
|
+
▼ │
|
|
186
|
+
┌───────────────┐ ──── user re-opens (reason REQUIRED) ────────┘
|
|
187
|
+
│ resolved │
|
|
188
|
+
└───────────────┘ (auto-postmortem triggered by setIncidentStatus)
|
|
189
|
+
|
|
190
|
+
At any phase: user issues `bober incident abort <id> --reason <text> [--confirm-rollback]`
|
|
191
|
+
──────────────────────────────────────► aborted (terminal)
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
State machine constraints enforced by `transitionPhase()` in `src/incident/orchestrator.ts`:
|
|
195
|
+
- `aborted` is **terminal**: no transitions out.
|
|
196
|
+
- `resolved → remediating` is **forbidden** (must re-open to `investigating` first).
|
|
197
|
+
- `resolved → investigating` requires an explicit `reason` (re-open path).
|
|
198
|
+
- All other transitions follow the table exactly; invalid transitions throw `InvalidTransitionError`.
|
|
199
|
+
|
|
200
|
+
## Red Flags - STOP and Follow Process
|
|
201
|
+
|
|
202
|
+
Encountering any of these signals means the incident is being handled incorrectly. STOP the current action and follow the documented path.
|
|
203
|
+
|
|
204
|
+
- **About to mark resolved without a verifyResult or overrideToken.** Resolution without evidence is conjecture. Use `--verified` or `--override <reason>` — never skip the gate.
|
|
205
|
+
- **About to execute a rollback without `--confirm-rollback`.** Silent rollback is a footgun. Rollback changes system state; it must be explicit. If you want rollback, use `bober incident abort <id> --reason <text> --confirm-rollback`.
|
|
206
|
+
- **About to run a risky action directly in the shell, bypassing `executeAction`.** Any command that modifies system state MUST go through the deploy gate so an inverse is recorded. No exceptions for "trivial" changes.
|
|
207
|
+
- **About to batch-approve multiple risky actions in a single gate invocation.** Each risky action requires its own checkpoint approval. Per-step gates exist to prevent "approve all" disasters.
|
|
208
|
+
- **About to close an incident without a timeline event.** Every phase transition and every action MUST be recorded in `timeline.jsonl`. Closing an incident with an empty timeline means the postmortem will have no evidence to synthesize.
|
|
209
|
+
- **About to re-open a resolved incident without a reason.** The re-open path (`resolved → investigating`) requires an explicit reason. A reason-less re-open erases the audit trail of why the incident was re-opened.
|
|
210
|
+
- **About to skip the diagnoser and go straight to remediation.** "I know what's wrong" is the most dangerous statement in incident response. Run the diagnoser first to document hypotheses.
|
|
211
|
+
|
|
212
|
+
## Common Rationalizations
|
|
213
|
+
|
|
214
|
+
| Rationalization | Why It's Wrong |
|
|
215
|
+
|----------------|---------------|
|
|
216
|
+
| "I know what's wrong — skipping diagnosis to save time." | Without documented hypotheses, the postmortem will have no root cause. Skipping diagnosis means you cannot verify the fix addressed the actual cause. |
|
|
217
|
+
| "The metric is unavailable but I know it's resolved." | Use `--override <reason>` with a documented reason. This creates an audit trail. Do NOT skip the gate entirely — the `resolved` gate exists to prevent wishful resolution. |
|
|
218
|
+
| "It's a tiny change — the gate is overkill." | The gate's cost is one approval. The cost of an ungated risky change to production is a potential second incident. Classify risky when in doubt. |
|
|
219
|
+
| "The rollback will fix the abort side-effects automatically." | Rollback must be explicitly confirmed with `--confirm-rollback`. Silent rollback could make the situation worse. Document the abort reason first; then decide on rollback separately. |
|
|
220
|
+
| "I'll write the postmortem later when I have more time." | The postmortem auto-triggers on `resolved`. If you are deferring it, you are either not marking the incident resolved or suppressing auto-generation. Both are process violations. |
|
|
221
|
+
| "We don't need a severity — it's obvious." | Severity is metadata that feeds into postmortem priority, SLO budgets, and escalation decisions. Set it at `bober incident start` so downstream tooling can use it. |
|
|
222
|
+
|
|
223
|
+
## Quick Reference
|
|
224
|
+
|
|
225
|
+
| Question | Answer |
|
|
226
|
+
|---------|--------|
|
|
227
|
+
| How do I start a Severity 1 incident? | `bober incident start "<symptom>" --severity S1` |
|
|
228
|
+
| How do I check the current phase? | `bober incident status <id>` |
|
|
229
|
+
| How do I end an incident after external verification? | `bober incident end <id> --verified` |
|
|
230
|
+
| How do I end an incident when no metric is available? | `bober incident end <id> --override "reason here"` |
|
|
231
|
+
| How do I abort without rolling back? | `bober incident abort <id> --reason "<text>"` |
|
|
232
|
+
| How do I abort AND roll back? | `bober incident abort <id> --reason "<text>" --confirm-rollback` |
|
|
233
|
+
| How do I re-open a resolved incident? | `bober incident start "<symptom>"` (new incident) OR `transitionPhase(..., 'investigating', { reason })` programmatically |
|
|
234
|
+
| Where are the artifacts? | `.bober/incidents/<incidentId>/` |
|
|
235
|
+
| What gates a risky action? | `resolveRiskyActionMechanismName()` → disk/cli/pr/noop per `bober.config.json` |
|
|
236
|
+
| When is the postmortem generated? | Automatically when `setIncidentStatus(_, _, 'resolved', ...)` is called |
|
|
237
|
+
|
|
238
|
+
## Related Skills
|
|
239
|
+
|
|
240
|
+
| Skill | Use when |
|
|
241
|
+
|-------|---------|
|
|
242
|
+
| [`bober.diagnose`](../bober.diagnose/SKILL.md) | Running the 4-phase root-cause investigation. Invoked by `/bober-incident` after `start`. |
|
|
243
|
+
| [`bober.deploy`](../bober.deploy/SKILL.md) | Executing a remediation action with gate discipline. Invoked for each risky nextAction. |
|
|
244
|
+
| [`bober.runbook`](../bober.runbook/SKILL.md) | Executing a known remediation procedure step-by-step. Runbook steps delegate to `bober.deploy` for risky steps. |
|
|
245
|
+
| [`bober.postmortem`](../bober.postmortem/SKILL.md) | Synthesizing the incident postmortem after resolution. Auto-triggered; also available manually via `bober postmortem generate <id>`. |
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: bober.onboard
|
|
3
|
+
description: Generate onboarding documentation from the code graph — architecture overview, hotspots, knowledge gaps, and communities. Writes 5 markdown files to .bober/onboarding/.
|
|
4
|
+
handoffs:
|
|
5
|
+
- label: "Analyse Impact"
|
|
6
|
+
command: /bober-impact
|
|
7
|
+
prompt: "Analyse the impact radius of a hotspot symbol"
|
|
8
|
+
- label: "Plan Feature"
|
|
9
|
+
command: /bober-plan
|
|
10
|
+
prompt: "Plan a feature using onboarding context"
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# bober.onboard — Onboarding Documentation Skill
|
|
14
|
+
|
|
15
|
+
You are running the **bober.onboard** skill. Your job is to generate a complete set of onboarding documents for this codebase using the code graph.
|
|
16
|
+
|
|
17
|
+
## What This Skill Produces
|
|
18
|
+
|
|
19
|
+
Five markdown files in `.bober/onboarding/`:
|
|
20
|
+
|
|
21
|
+
1. **README.md** — entry point with links to all other documents
|
|
22
|
+
2. **architecture-overview.md** — public API per module, sorted alphabetically
|
|
23
|
+
3. **hotspots.md** — high-complexity symbols worth reviewing (table with score + reason)
|
|
24
|
+
4. **knowledge-gaps.md** — potentially unused (dead code) + public APIs without internal callers
|
|
25
|
+
5. **communities.md** — module groupings by community
|
|
26
|
+
|
|
27
|
+
## Prerequisites
|
|
28
|
+
|
|
29
|
+
- `graph.enabled: true` in `bober.config.json`
|
|
30
|
+
- `tokensave` >= 6.0.0-beta.1 installed
|
|
31
|
+
- Graph must be initialised (`agent-bober graph init`)
|
|
32
|
+
|
|
33
|
+
## Running via CLI
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
agent-bober onboard
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
This command:
|
|
40
|
+
1. Starts a short-lived tokensave engine
|
|
41
|
+
2. Queries the graph for status, hotspots, dead code, circular deps, module APIs, and file inventory
|
|
42
|
+
3. Passes results to the OnboardingComposer renderer
|
|
43
|
+
4. Writes all 5 files to `.bober/onboarding/`
|
|
44
|
+
5. Prints a summary table with file paths and sizes
|
|
45
|
+
|
|
46
|
+
Expected output:
|
|
47
|
+
```
|
|
48
|
+
Starting graph engine...
|
|
49
|
+
Querying code graph...
|
|
50
|
+
Writing artifacts to .bober/onboarding/...
|
|
51
|
+
|
|
52
|
+
Onboarding artifacts written:
|
|
53
|
+
|
|
54
|
+
.bober/onboarding/README.md <size> bytes
|
|
55
|
+
.bober/onboarding/architecture-overview.md <size> bytes
|
|
56
|
+
.bober/onboarding/hotspots.md <size> bytes
|
|
57
|
+
.bober/onboarding/knowledge-gaps.md <size> bytes
|
|
58
|
+
.bober/onboarding/communities.md <size> bytes
|
|
59
|
+
|
|
60
|
+
5 files written (<total> bytes total)
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## Running via MCP Tools (Alternative)
|
|
64
|
+
|
|
65
|
+
You can also produce equivalent onboarding content directly using the MCP tools:
|
|
66
|
+
|
|
67
|
+
1. Get architecture overview: `get_architecture_overview`
|
|
68
|
+
2. Find hotspots: `semantic_search_nodes` with query `"hotspots high complexity"`
|
|
69
|
+
3. Find dead code: `semantic_search_nodes` with query `"dead code unused symbols"`
|
|
70
|
+
4. Find communities: `list_communities` (if available) or `get_architecture_overview`
|
|
71
|
+
|
|
72
|
+
Format the results using the same structure as the generated documents and write to `.bober/onboarding/`.
|
|
73
|
+
|
|
74
|
+
## Re-running
|
|
75
|
+
|
|
76
|
+
The command is safe to re-run. Files with the generation marker are updated in-place (preserving any content you wrote above the marker). Files without the marker are refused to prevent overwriting manual edits.
|
|
77
|
+
|
|
78
|
+
To force a fresh generation, delete the files in `.bober/onboarding/` and re-run.
|
|
79
|
+
|
|
80
|
+
## Error Handling
|
|
81
|
+
|
|
82
|
+
- If graph.enabled=false: exits 1 with instructions to enable it
|
|
83
|
+
- If tokensave missing: exits 1 with install hint
|
|
84
|
+
- If a file lacks the generation marker: exits with an error explaining which file needs attention
|
|
@@ -152,6 +152,16 @@ After receiving the user's answers, generate a complete PlanSpec. Follow the sch
|
|
|
152
152
|
7. **Non-functional requirements:** Performance, security, accessibility, reliability considerations
|
|
153
153
|
8. **Tech notes:** Integration points, data model overview, security considerations
|
|
154
154
|
|
|
155
|
+
<HARD-GATE>
|
|
156
|
+
Do NOT write any .bober/contracts/*.json file until one of the following has happened:
|
|
157
|
+
|
|
158
|
+
1. INTERACTIVE protocol — the user has explicitly approved the assumptions and outOfScope sections above. Record approval as a resolvedClarifications entry with questionId='gate-design-approval' and the user's verbatim approval in the answer field.
|
|
159
|
+
|
|
160
|
+
2. AUTONOMOUS protocol — every assumption in the spec is backed by cited evidence (minimum: a file path; preferred: file:line). Record self-approval as resolvedClarifications entry with questionId='gate-design-approval', answer='Autonomous self-approval', resolvedBy='planner', and metadata.approvalEvidence field listing the cited file paths.
|
|
161
|
+
|
|
162
|
+
Violating this gate produces orphan contracts that diverge from the spec. Discovered violations result in contracts being deleted and spec status reverted to 'needs-clarification'.
|
|
163
|
+
</HARD-GATE>
|
|
164
|
+
|
|
155
165
|
## Step 6: Decompose into Sprint Contracts
|
|
156
166
|
|
|
157
167
|
Decompose the PlanSpec into ordered sprints. This is the most critical step.
|
|
@@ -210,6 +220,47 @@ Save all artifacts to the `.bober/` directory:
|
|
|
210
220
|
{"event":"plan-created","specId":"...","title":"...","sprintCount":N,"timestamp":"..."}
|
|
211
221
|
```
|
|
212
222
|
|
|
223
|
+
## Step 7.5: Decide — Ready or Needs Clarification?
|
|
224
|
+
|
|
225
|
+
After self-answering the clarifying questions in Step 4, score the remaining ambiguity 0-10 using this rubric:
|
|
226
|
+
|
|
227
|
+
| Score | Meaning |
|
|
228
|
+
|-------|---------|
|
|
229
|
+
| 0-2 | Fully specified. Every behavior, edge case, error path is concrete. |
|
|
230
|
+
| 3-4 | Mostly specified. Small judgment calls remain (library choice, exact wording). |
|
|
231
|
+
| 5-6 | Some load-bearing decisions deferred to the generator, but codebase has clear patterns. |
|
|
232
|
+
| 7-8 | Significant ambiguity. The generator would have to make architectural guesses. |
|
|
233
|
+
| 9-10 | Fundamental specification gaps. Sprint cannot be reliably implemented. |
|
|
234
|
+
|
|
235
|
+
**Decision:**
|
|
236
|
+
|
|
237
|
+
- If score < 7 AND no questions are unresolved → set `status: "draft"` and proceed to Step 8 (sprint contracts get saved).
|
|
238
|
+
- If score >= 7 OR any question remains unresolved → set `status: "needs-clarification"`, populate `clarificationQuestions`, populate `resolvedClarifications` for any you self-answered, and STOP. Do not write sprint contracts. Save the spec, surface the open questions to the user, and exit.
|
|
239
|
+
|
|
240
|
+
**When clarification is needed, surface it like this:**
|
|
241
|
+
|
|
242
|
+
```
|
|
243
|
+
⚠ Plan needs clarification before sprints can run.
|
|
244
|
+
Spec: <title>
|
|
245
|
+
Ambiguity score: <N>/10
|
|
246
|
+
|
|
247
|
+
Open questions:
|
|
248
|
+
|
|
249
|
+
Q1 [scope]: <question>
|
|
250
|
+
A) <option>
|
|
251
|
+
B) <option>
|
|
252
|
+
💡 Suggested: <recommendation if available>
|
|
253
|
+
|
|
254
|
+
Q2 [data-model]: <question>
|
|
255
|
+
|
|
256
|
+
Resolve via either:
|
|
257
|
+
/bober-plan answer <specId> Q1 "<your answer>" (one-shot per question)
|
|
258
|
+
npx agent-bober plan answer <specId> (interactive walkthrough)
|
|
259
|
+
Or edit .bober/specs/<specId>.json directly and flip status to "ready".
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
The user resolves the questions via the `bober plan answer` CLI command (or by editing the spec file directly). Once all questions are answered, the runtime flips status to `ready` and the next `/bober-sprint` or `/bober-run` invocation can proceed.
|
|
263
|
+
|
|
213
264
|
## Step 8: Output Summary
|
|
214
265
|
|
|
215
266
|
Present a clean, readable summary to the user:
|
|
@@ -24,10 +24,34 @@ PlanSpec files are stored at: `.bober/specs/<specId>.json`
|
|
|
24
24
|
"description": "string (required, 2-3 sentences)",
|
|
25
25
|
"mode": "string (required, one of: greenfield, brownfield)",
|
|
26
26
|
"preset": "string (optional, e.g.: nextjs, react-vite, solidity, anchor, api-node, python-api)",
|
|
27
|
-
"status": "string (required, one of:
|
|
27
|
+
"status": "string (required, one of: draft, needs-clarification, ready, in-progress, completed, abandoned)",
|
|
28
|
+
|
|
29
|
+
"ambiguityScore": "number (optional, 0-10) — planner's self-rated ambiguity. >= 7 forces status='needs-clarification'.",
|
|
30
|
+
|
|
31
|
+
"clarificationQuestions": [
|
|
32
|
+
{
|
|
33
|
+
"questionId": "string (required, e.g. 'Q1')",
|
|
34
|
+
"category": "string (required, one of: scope | user-personas | data-model | tech-constraints | design-ux | integrations | non-functional | error-handling | integration-risk | pattern-conflict | regression-risk | other)",
|
|
35
|
+
"question": "string (required, ends in '?')",
|
|
36
|
+
"options": [
|
|
37
|
+
{ "label": "string (e.g. 'A')", "description": "string" }
|
|
38
|
+
],
|
|
39
|
+
"recommendation": "string (optional, planner's suggested answer based on codebase evidence)",
|
|
40
|
+
"ambiguityWeight": "number (optional, 0-10, how much this question contributes to overall ambiguity)"
|
|
41
|
+
}
|
|
42
|
+
],
|
|
43
|
+
|
|
44
|
+
"resolvedClarifications": [
|
|
45
|
+
{
|
|
46
|
+
"questionId": "string (required, matches a clarificationQuestions entry)",
|
|
47
|
+
"answer": "string (required, free-form)",
|
|
48
|
+
"resolvedAt": "string (required, ISO-8601)",
|
|
49
|
+
"resolvedBy": "string (required, one of: user | planner)"
|
|
50
|
+
}
|
|
51
|
+
],
|
|
28
52
|
|
|
29
53
|
"assumptions": [
|
|
30
|
-
"string — each assumption the planner is making"
|
|
54
|
+
"string — each assumption the planner is making, ideally with codebase evidence"
|
|
31
55
|
],
|
|
32
56
|
|
|
33
57
|
"outOfScope": [
|
|
@@ -90,7 +114,10 @@ PlanSpec files are stored at: `.bober/specs/<specId>.json`
|
|
|
90
114
|
| `description` | 2-3 sentence summary of the feature and its user value. |
|
|
91
115
|
| `mode` | Must match the `project.mode` in `bober.config.json` (`greenfield` or `brownfield`). |
|
|
92
116
|
| `preset` | Must match the `project.preset` in `bober.config.json`, if set (e.g., `nextjs`, `solidity`, `anchor`). |
|
|
93
|
-
| `status` | Lifecycle state
|
|
117
|
+
| `status` | Lifecycle state. `draft`: planner emitted a complete plan, no sprints run yet. `needs-clarification`: planner refused to fully decompose; user must answer the open `clarificationQuestions` before sprints can run. `ready`: clarifications resolved, pipeline may proceed. `in-progress`: at least one sprint has started. `completed`: all sprints done. `abandoned`: planner or user dropped this spec. |
|
|
118
|
+
| `ambiguityScore` | Planner's self-rating 0-10. If `>= 7`, the planner MUST set `status: "needs-clarification"` and emit at least one `clarificationQuestions` entry — the pipeline will refuse to run sprints from such a spec. |
|
|
119
|
+
| `clarificationQuestions` | Open questions awaiting user answers. Each unresolved entry blocks sprint execution. |
|
|
120
|
+
| `resolvedClarifications` | Question/answer history (both autonomous self-answers and user inputs via `bober plan answer`). |
|
|
94
121
|
|
|
95
122
|
### Features Array
|
|
96
123
|
|
|
@@ -155,7 +182,7 @@ Bad criteria:
|
|
|
155
182
|
"description": "A complete user authentication system supporting email/password registration and login, with session management and protected routes. This enables the application to identify users and restrict access to authorized content.",
|
|
156
183
|
"mode": "greenfield",
|
|
157
184
|
"preset": "react-vite",
|
|
158
|
-
"status": "
|
|
185
|
+
"status": "draft",
|
|
159
186
|
"assumptions": [
|
|
160
187
|
"The application does not currently have any authentication system",
|
|
161
188
|
"PostgreSQL is the database, as configured in the project",
|