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
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,219 @@ All notable changes to `agent-bober` will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [Unreleased]
|
|
9
|
+
|
|
10
|
+
## [0.15.0] — 2026-05-29
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- **Claude Opus 4.8 support** ([#17](https://github.com/BOBER3r/agent-bober/pull/17)): the `opus` shorthand now resolves to `claude-opus-4-8` (1M context, adaptive thinking); added an `opus-4-7` shorthand to pin the previous model.
|
|
15
|
+
- **`@anthropic-ai/sdk` upgraded `0.39.0` → `0.100.1`** to expose the Opus 4.8 request fields, with zero adapter behavior change.
|
|
16
|
+
- **Anthropic prompt caching** (pattern borrowed from nousresearch/hermes-agent): ephemeral `cache_control` breakpoints on the system prompt + recent messages (system-and-last-3, capped at 4 per request), behind `providerConfig.promptCaching` — default **on** for Anthropic, no-op for other providers.
|
|
17
|
+
- **`effort` control**: optional `ChatParams.effort` (`low` | `medium` | `high` | `xhigh` | `max`) forwarded as top-level `output_config.effort`; omitted when unset so the API default (`high` on Opus 4.8) applies. Non-Anthropic adapters ignore it.
|
|
18
|
+
- **Mid-conversation system blocks**: a `SystemUpdateMessage` message variant renders to an Anthropic `mid_conv_system` content block with optional ephemeral `cache_control`; OpenAI and Google adapters handle it best-effort without error.
|
|
19
|
+
- **`bober_list_pending_approvals`**: List all pending careful-flow checkpoints awaiting human
|
|
20
|
+
approval. Accepts optional `{ projectPath?: string }` (must be absolute when supplied; defaults
|
|
21
|
+
to cwd). Returns `[{ checkpointId, ageMs, prompt }]` — identical shape to `bober list-approvals
|
|
22
|
+
--json`. Backed by the new shared `listPendingApprovals(projectRoot)` helper in
|
|
23
|
+
`src/state/approval-state.ts`.
|
|
24
|
+
- **`bober_approve_checkpoint`**: Approve a pending checkpoint over MCP by writing
|
|
25
|
+
`.bober/approvals/<id>.approved.json` with the same payload shape as `bober approve`
|
|
26
|
+
(`{ approvedAt, approverId, editDelta? }`). Accepts `{ checkpointId, projectPath?, editDelta? }`.
|
|
27
|
+
Guards with `pendingExists` before writing. Returns `{ approvedAt, checkpointId }`.
|
|
28
|
+
- **`bober_reject_checkpoint`**: Reject a pending checkpoint over MCP by writing
|
|
29
|
+
`.bober/approvals/<id>.rejected.json` with the same payload shape as `bober reject`
|
|
30
|
+
(`{ rejectedAt, rejecterId, feedback }`). Accepts `{ checkpointId, projectPath?, feedback }`
|
|
31
|
+
(feedback required and non-empty). Guards with `pendingExists` before writing.
|
|
32
|
+
Returns `{ rejectedAt, checkpointId }`.
|
|
33
|
+
- **`bober_list_projects`**: Enumerate bober projects under one or more search roots.
|
|
34
|
+
Accepts `{ searchRoots: string[] }`. Walks each root one level deep; returns
|
|
35
|
+
`[{ projectPath, name, mode?, hasActiveRuns, lastRunAt? }]` for every directory
|
|
36
|
+
containing `bober.config.json`. Unreadable roots are skipped with a stderr warning.
|
|
37
|
+
READ-ONLY — does not instantiate RunManager; reads `.bober/runs/*/state.json` directly.
|
|
38
|
+
- **`bober_list_specs`**: List PlanSpecs in a project. Accepts `{ projectPath }`.
|
|
39
|
+
Reads `.bober/specs/*.json` with loose parsing (invalid files silently skipped).
|
|
40
|
+
Returns `[{ specId, title, status, sprintCount, completedAt? }]`.
|
|
41
|
+
- **`bober_get_project_state`**: Aggregate per-project state counts for the cockpit sidebar.
|
|
42
|
+
Accepts `{ projectPath }`. Returns `{ configExists, activeRunCount, lastRunAt?,
|
|
43
|
+
openIncidentCount, pendingApprovalCount, specCount, mode? }`. READ-ONLY — does not
|
|
44
|
+
instantiate RunManager.
|
|
45
|
+
- All six new tools accept an optional `projectPath` (required for discovery tools; optional
|
|
46
|
+
for approval tools). When supplied, `projectPath` must be absolute — a relative path returns
|
|
47
|
+
a soft-error JSON `{ error: "projectPath must be absolute" }` rather than throwing.
|
|
48
|
+
- **`listPendingApprovals(projectRoot)`** helper extracted from
|
|
49
|
+
`src/cli/commands/list-approvals.ts` into `src/state/approval-state.ts`. Both the CLI and
|
|
50
|
+
the MCP tool `bober_list_pending_approvals` share this helper. Exported from
|
|
51
|
+
`src/state/index.ts` as `listPendingApprovals` / `PendingApprovalRow`.
|
|
52
|
+
- **`readRunStatesFromDisk(projectRoot)`** helper added to `src/state/run-state.ts` as a
|
|
53
|
+
named alias for `listRunStateFiles`. Exported from `src/state/index.ts`. Cockpit discovery
|
|
54
|
+
tools use it to enumerate run states for arbitrary project roots without touching the
|
|
55
|
+
RunManager singleton.
|
|
56
|
+
- MCP tool count: **23 → 29**.
|
|
57
|
+
|
|
58
|
+
- **`bober_run_in_worktree`**: Start a pipeline inside an isolated git worktree on a new branch.
|
|
59
|
+
Input: `{ task: string, allowDirty?: boolean, keepOnSuccess?: boolean }`. Returns
|
|
60
|
+
`{ runId, branch, worktreePath, status: 'running' }` immediately (fire-and-forget like `bober_run`).
|
|
61
|
+
Multiple worktree runs can execute concurrently on the same project. Use `bober_get_run_status`
|
|
62
|
+
to track progress.
|
|
63
|
+
- **`bober worktree run <task>`** CLI subcommand mirroring the MCP tool. Flags:
|
|
64
|
+
`--allow-dirty` (skip uncommitted-changes guard), `--keep-on-success` (retain worktree after success).
|
|
65
|
+
Prints `{ runId, branch, worktreePath, projectRoot }` JSON to stdout.
|
|
66
|
+
- **`runInWorktree(task, projectRoot, config, opts)`** (`src/orchestrator/worktree.ts`): the shared helper
|
|
67
|
+
the CLI and MCP tool both use. Creates a git worktree under `<pipeline.worktreeRoot>/<runId>` on a
|
|
68
|
+
branch derived from `generator.branchPattern`, runs the pipeline inside it, and on success removes
|
|
69
|
+
the worktree per `pipeline.cleanupWorktreeOnSuccess`. On failure (or if `--keep-on-success`/`keepOnSuccess`)
|
|
70
|
+
the worktree is retained for debugging and its path is printed to stderr.
|
|
71
|
+
- **`pipeline.worktreeRoot`** config field: directory (relative to projectRoot) under which
|
|
72
|
+
worktrees are created. Default `.bober/worktrees`.
|
|
73
|
+
- **`pipeline.cleanupWorktreeOnSuccess`** config field: when true (default), remove the worktree
|
|
74
|
+
via `git worktree remove` after a successful run. On failure the worktree is always retained.
|
|
75
|
+
- **`RunState.worktreePath`** and **`RunState.branch`** optional fields. Populated by `runInWorktree`
|
|
76
|
+
before the pipeline starts; surfaced in `bober_get_run_status` output.
|
|
77
|
+
- **`RunManager.startRun(task, projectRoot, config, pipelineFn?, opts?)`** signature extended with
|
|
78
|
+
optional `opts: { runId?, worktreePath?, branch? }`. Existing 3- and 4-arg callers are unchanged.
|
|
79
|
+
- **`git.ts`** helpers: `addWorktree`, `removeWorktree`, `isClean` shelling out to git CLI (no new deps).
|
|
80
|
+
|
|
81
|
+
### Follow-ups (documented, NOT implemented this sprint)
|
|
82
|
+
|
|
83
|
+
- Garbage collection of orphaned worktrees from prior failed runs (`bober worktree prune`).
|
|
84
|
+
- Worktree-aware bober_status (the cockpit uses bober_get_run_status by runId instead).
|
|
85
|
+
- Cross-worktree merge automation.
|
|
86
|
+
|
|
87
|
+
- **`bober_subscribe_events`**: Subscribe to runId-scoped live events. Input: `{ runId: string, since?: string }`. Returns `{ subscriptionId, status: 'subscribed', startedAt }`. The server begins emitting `bober/events` notifications for every line appended to `.bober/history.jsonl` or `.bober/telemetry/<date>.jsonl` whose `runId` matches the subscription. The optional `since` parameter triggers a one-time backfill of pre-existing events with `timestamp > since`.
|
|
88
|
+
- **`bober_unsubscribe_events`**: Unsubscribe from a runId-scoped event stream. Input: `{ subscriptionId: string }`. Releases file-watch handles when no other subscription is watching the same files. Returns `{ subscriptionId, status: 'unsubscribed' }` or a soft-error `{ error: 'Subscription not found: <id>' }`.
|
|
89
|
+
- **`EventStreamManager`** (`src/mcp/event-stream.ts`): In-process class that tails `.bober/history.jsonl` and `.bober/telemetry/<date>.jsonl` using `fs.watch`. One file-watch handle is shared across all subscriptions watching the same file (reference-counted). Date roll-over is detected via a polling interval (5 s, `unref()`'d). Lines without an extractable `runId` (top-level or `details.runId`) are silently skipped. Per-subscription bounded queue (default 1000) drops the oldest events on overflow; a single `bober/events.dropped` notification with `{ subscriptionId, dropped: N }` is emitted once per overflow window. All diagnostic output is routed to `process.stderr` (stdout is reserved for the MCP JSON-RPC transport).
|
|
90
|
+
- **`pipeline.eventQueueBound`** config field: per-subscription bounded queue limit. Default `1000`, minimum `1`. Readable by the server from `bober.config.json` and passed to `EventStreamManager` at startup.
|
|
91
|
+
- **`bober_list_active_runs`**: Lists all runs tracked by the RunManager. Accepts optional `{ status?: 'running'|'completed'|'failed'|'aborted' }` filter. Returns a JSON array of RunState objects. Omit the filter to get all runs regardless of status.
|
|
92
|
+
- **`bober_get_run_status`**: Fetches the full RunState for a specific run by `runId`. Input: `{ runId: string }` (required). Returns the complete RunState JSON or `{ error: 'Run not found: <runId>' }` when the runId is unknown.
|
|
93
|
+
- **`bober_abort_run`**: Aborts a currently running pipeline run. Input: `{ runId: string, reason?: string }`. Flips `status` to `'aborted'`, persists `abortedAt` and `abortReason` to `state.json`, and returns `{ runId, status: 'aborted', abortedAt }`. Returns `{ error: 'Run not found: <runId>' }` for unknown runs, `{ error: 'Run is not active' }` for non-running runs. Note: this sprint flips state only; forceful in-flight subprocess termination (SIGTERM propagation) is deferred to a future hardening sprint.
|
|
94
|
+
- **`RunState.status`** type union widened to include `'aborted'`; new optional fields `abortedAt?: string` and `abortReason?: string` added.
|
|
95
|
+
|
|
96
|
+
## [0.14.0] — 2026-05-25
|
|
97
|
+
|
|
98
|
+
Bober Vision — agent-bober becomes a four-mode software engineering teammate
|
|
99
|
+
instead of a single-mode autopilot. The pipeline you already know is Mode 1;
|
|
100
|
+
the other three modes share its scaffolding (planner, evaluator, audit log)
|
|
101
|
+
but pause at different boundaries and operate at different blast radii.
|
|
102
|
+
|
|
103
|
+
The headline change: it is now safe to delegate production-touching work.
|
|
104
|
+
Careful-flow gates every meaningful boundary; Diagnose has a native vocabulary
|
|
105
|
+
for incidents; Postmortem auto-synthesizes from the audit trail.
|
|
106
|
+
|
|
107
|
+
See [VISION.md](./VISION.md) for the full design rationale and example flows.
|
|
108
|
+
|
|
109
|
+
### Added
|
|
110
|
+
|
|
111
|
+
- **Mode 1 — Autopilot** (unchanged): the existing generator-evaluator loop.
|
|
112
|
+
Use for spikes and greenfield. `bober run`.
|
|
113
|
+
- **Mode 2 — Careful-flow**: checkpoint-gated execution. Every
|
|
114
|
+
research/plan/sprint boundary surfaces a diff and waits for approval via
|
|
115
|
+
CLI prompt, disk marker (`.bober/approvals/*.pending.json`), or GitHub PR.
|
|
116
|
+
Per-run audit log at `.bober/audits/<runId>.jsonl`. New CLI:
|
|
117
|
+
`bober approve <checkpointId>`, `bober reject <checkpointId>`,
|
|
118
|
+
`bober list-approvals`, `bober audit-show <runId>`.
|
|
119
|
+
- **Mode 3 — Diagnose**: production-incident response. Generic observability
|
|
120
|
+
MCP plugin slots (any MCP server matching the schema can supply metrics
|
|
121
|
+
and logs). Structured incident timeline at `.bober/incidents/<id>/`.
|
|
122
|
+
Change-management gates around destructive actions. Playbook library
|
|
123
|
+
searchable by symptom. New CLI: `bober incident [start|status|end|list|abort]`,
|
|
124
|
+
`bober rollback <incidentId>`, `bober playbook [list|show|search]`.
|
|
125
|
+
- **Mode 4 — Postmortem**: auto-synthesized from incident artifacts when an
|
|
126
|
+
incident transitions to `resolved`. Every claim has an inline citation
|
|
127
|
+
back to timeline/changelog/observations. Required sections enforced
|
|
128
|
+
(TL;DR, Impact, Timeline, Root Cause 5-Whys, Contributing Factors, What
|
|
129
|
+
Went Well, What Went Wrong, Action Items). New CLI:
|
|
130
|
+
`bober postmortem [generate|show] <incidentId>`.
|
|
131
|
+
- **Behavioral discipline foundation** (verbatim port of obra/superpowers):
|
|
132
|
+
Iron Laws, Red Flags, Rationalization-Prevention tables, SessionStart
|
|
133
|
+
bootstrap, anti-pattern catalog, AGENTS.md contract. Surfaces as 9 new
|
|
134
|
+
universal skills: `bober.using-bober`, `bober.verify`, `bober.debug`,
|
|
135
|
+
`bober.code-review`, `bober.incident`, `bober.diagnose`, `bober.deploy`,
|
|
136
|
+
`bober.runbook`, `bober.postmortem`. Installed by `agent-bober init` and
|
|
137
|
+
copied to `.claude/commands/`.
|
|
138
|
+
- **4 new agent definitions** in `agents/`: `bober-code-reviewer`,
|
|
139
|
+
`bober-diagnoser`, `bober-deployer`, `bober-postmortemer`.
|
|
140
|
+
- **Opt-in local-only telemetry** (default OFF). When enabled, writes mode-0600
|
|
141
|
+
JSONL events to `.bober/telemetry/<date>.jsonl`. ESLint rule
|
|
142
|
+
(`no-restricted-imports` + `no-restricted-globals`) scoped to
|
|
143
|
+
`src/telemetry/**` blocks all network primitives at lint time. Privacy
|
|
144
|
+
invariant: only IDs, counts, durations, and enums in payloads; never
|
|
145
|
+
user-content strings. New CLI: `bober telemetry [status|purge|export]`.
|
|
146
|
+
- **Config schema migration**: `bober config migrate` rewrites an existing
|
|
147
|
+
`bober.config.json` to explicitly include all new vision-era fields with
|
|
148
|
+
default values. Back-compat parsing handles missing fields automatically —
|
|
149
|
+
the migrate command is informative, not required.
|
|
150
|
+
- **Mode + checkpoint config**: `pipeline.mode` (`autopilot` | `careful`,
|
|
151
|
+
default `autopilot`), `pipeline.checkpointMechanism` (`noop` | `disk` |
|
|
152
|
+
`cli` | `github-pr`, default `noop`). All optional; absence means autopilot.
|
|
153
|
+
- **End-to-end correctness gate**: `tests/e2e/four-modes.test.ts` (11 tests)
|
|
154
|
+
exercises all four modes on a fixture project. Uses the real
|
|
155
|
+
`DiskCheckpointMechanism` (not a mock), spawns the real
|
|
156
|
+
`ExternalMcpServer` subprocess for the MCP protocol boundary, runs the
|
|
157
|
+
real incident lifecycle including `verifyResolution`, and validates the
|
|
158
|
+
auto-generated postmortem against the required-sections + citation rules.
|
|
159
|
+
|
|
160
|
+
### Changed
|
|
161
|
+
|
|
162
|
+
- `src/cli/commands/init.ts`: `UNIVERSAL_COMMANDS` extended with the 9 new
|
|
163
|
+
vision skills. `agentFiles` extended with the 4 new agent definitions.
|
|
164
|
+
All vision-era surfaces now ship with every brownfield/preset init.
|
|
165
|
+
- `VISION.md`, `README.md`, `AGENTS.md` updated to document the four modes,
|
|
166
|
+
the careful-flow mechanisms, the incident lifecycle, the telemetry
|
|
167
|
+
guarantee, and the slash-command set.
|
|
168
|
+
|
|
169
|
+
### Tests
|
|
170
|
+
|
|
171
|
+
563 → **1115 tests passing** across 82 test files (4 pre-existing skipped).
|
|
172
|
+
New test coverage includes: incident timeline + state machine, resolution
|
|
173
|
+
verification, rollback (full + per-step gates), postmortem section/citation
|
|
174
|
+
assertions, playbook search, careful-flow integration, observability MCP
|
|
175
|
+
spawn, deployer change classification + ChangeEntry recording, config
|
|
176
|
+
schema back-compat, telemetry writer (mode-0600, default-off, concurrency,
|
|
177
|
+
privacy), CLI subcommands for config/telemetry.
|
|
178
|
+
|
|
179
|
+
### Backward compatibility
|
|
180
|
+
|
|
181
|
+
- Existing `bober.config.json` files (pre-vision) parse cleanly with the
|
|
182
|
+
extended schema — all new fields are optional and default to current
|
|
183
|
+
autopilot behavior. No migration required.
|
|
184
|
+
- Existing CLI surface (`bober plan`, `bober sprint`, `bober eval`,
|
|
185
|
+
`bober run`, `bober graph`, etc.) is unchanged.
|
|
186
|
+
- Telemetry defaults OFF. No network egress under any condition; enforced
|
|
187
|
+
statically by ESLint and verified at runtime.
|
|
188
|
+
|
|
189
|
+
## [0.13.0] — 2026-05-24
|
|
190
|
+
|
|
191
|
+
Graph (tokensave) integration — user-facing CLI commands and slash-command skills for code-graph workflows.
|
|
192
|
+
|
|
193
|
+
### Added
|
|
194
|
+
|
|
195
|
+
- **`agent-bober graph [init|sync|status]`** — manage the code graph index.
|
|
196
|
+
- `init`: runs `tokensave init`, writes `.bober/graph/manifest.json`. Exits 2 with platform-aware install hint when tokensave is missing.
|
|
197
|
+
- `sync [--force]`: re-indexes changed files (full re-index with `--force`). Updates manifest.
|
|
198
|
+
- `status [--json]`: prints `{ready, indexedFileCount, tokensaveVersion, lastSyncedHeadSha, stale}`. Human-readable or JSON.
|
|
199
|
+
- **`agent-bober onboard`** — generate 5 onboarding markdown files in `.bober/onboarding/` using the code graph (architecture overview, hotspots, knowledge gaps, communities, README). Prints a summary table on completion.
|
|
200
|
+
- **`agent-bober impact <symbol|file>`** — analyse the impact radius of a symbol or file. Writes `.bober/graph/impact/<slug>.md` with sections `# Impact: <target>`, `## Affected symbols`, `## Tests covering this symbol`.
|
|
201
|
+
- **3 new universal skills** (installed in all presets and brownfield):
|
|
202
|
+
- `skills/bober.graph/SKILL.md` (`/bober-graph`) — code graph management
|
|
203
|
+
- `skills/bober.onboard/SKILL.md` (`/bober-onboard`) — onboarding doc generation
|
|
204
|
+
- `skills/bober.impact/SKILL.md` (`/bober-impact`) — impact analysis (with `argument-hint: <symbol|file>`)
|
|
205
|
+
- **`scripts/e2e-graph-smoke.sh`** — end-to-end smoke test script (gates on tokensave binary availability).
|
|
206
|
+
- Architecture document: [`.bober/architecture/arch-20260524-port-code-review-graph-architecture.md`](.bober/architecture/arch-20260524-port-code-review-graph-architecture.md)
|
|
207
|
+
|
|
208
|
+
### Changed
|
|
209
|
+
|
|
210
|
+
- All 3 graph commands respect `graph.enabled=false` — exit 1 with message: *"Graph integration is disabled. Enable via `graph.enabled: true` in bober.config.json."*
|
|
211
|
+
- `src/cli/commands/init.ts` skill map: `bober.graph`, `bober.onboard`, `bober.impact` added to `UNIVERSAL_COMMANDS` — included in every preset and brownfield init.
|
|
212
|
+
|
|
213
|
+
### KPI gate result
|
|
214
|
+
|
|
215
|
+
60% combined reduction (synthetic-fixture baseline; real-pipeline measurement via `node scripts/run-kpi-gate.mjs`).
|
|
216
|
+
|
|
217
|
+
### Tests
|
|
218
|
+
|
|
219
|
+
549 → **563 tests passing** (added 14 tests: slug derivation, command success paths, disabled-graph paths, skill bundle frontmatter, init.ts skill inclusion).
|
|
220
|
+
|
|
8
221
|
## [0.12.0] — 2026-04-17
|
|
9
222
|
|
|
10
223
|
Tuned for Claude Opus 4.7 — the model now follows instructions literally and
|
package/README.md
CHANGED
|
@@ -48,6 +48,20 @@ You describe a feature
|
|
|
48
48
|
|
|
49
49
|
---
|
|
50
50
|
|
|
51
|
+
## Operating Modes
|
|
52
|
+
|
|
53
|
+
agent-bober operates in four modes — pick the one that matches your situation. See
|
|
54
|
+
[VISION.md](./VISION.md) for full documentation, worked examples, and configuration details.
|
|
55
|
+
|
|
56
|
+
| Mode | When to Use | Entry Point |
|
|
57
|
+
|------|-------------|-------------|
|
|
58
|
+
| **Autopilot** | Feature spikes, greenfield work, no production risk | `bober run` |
|
|
59
|
+
| **Careful-Flow** | Production behavior changes, want checkpoint approval | `bober run --mode careful` |
|
|
60
|
+
| **Diagnose** | Production system is broken right now | `bober incident start` |
|
|
61
|
+
| **Postmortem** | After resolving an incident, generate a retrospective | `bober postmortem generate` |
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
51
65
|
## Installation
|
|
52
66
|
|
|
53
67
|
```bash
|
|
@@ -60,8 +74,8 @@ npx agent-bober init
|
|
|
60
74
|
|
|
61
75
|
agent-bober works in multiple environments:
|
|
62
76
|
|
|
63
|
-
- **Claude Code** -- Plugin with
|
|
64
|
-
- **Cursor / Windsurf** -- MCP server with
|
|
77
|
+
- **Claude Code** -- Plugin with 20+ slash commands (`/bober-plan`, `/bober-run`, etc.)
|
|
78
|
+
- **Cursor / Windsurf** -- MCP server with 37 tools in the chat interface
|
|
65
79
|
- **Any MCP-compatible IDE** -- MCP server via stdio transport
|
|
66
80
|
- **Any terminal** -- CLI commands (`npx agent-bober run "feature"`)
|
|
67
81
|
|
|
@@ -114,6 +128,52 @@ Specialized workflows:
|
|
|
114
128
|
|
|
115
129
|
---
|
|
116
130
|
|
|
131
|
+
## Graph (Tokensave) Integration
|
|
132
|
+
|
|
133
|
+
> **Optional.** The graph is an opt-in enhancement — agent-bober's core pipeline (Researcher → Planner → Curator → Generator → Evaluator) works fully without it. Enable it only if you want semantic code search, impact analysis, and auto-generated onboarding docs.
|
|
134
|
+
|
|
135
|
+
agent-bober integrates with [tokensave](https://github.com/aovestdipaperino/tokensave) to build a structural code graph that powers semantic search, impact analysis, and automated onboarding documentation.
|
|
136
|
+
|
|
137
|
+
**Prerequisite — install the `tokensave` binary.** It is a native Rust binary, **not** an npm package, so `npm install -g agent-bober` does **not** install it. Install it separately:
|
|
138
|
+
|
|
139
|
+
```bash
|
|
140
|
+
# macOS (Homebrew)
|
|
141
|
+
brew install aovestdipaperino/tap/tokensave
|
|
142
|
+
# Windows (Scoop)
|
|
143
|
+
scoop bucket add tokensave https://github.com/aovestdipaperino/scoop-bucket && scoop install tokensave
|
|
144
|
+
# Any platform (Cargo / Rust)
|
|
145
|
+
cargo install tokensave
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
Required version range: **`>=6.0.0-beta.1 <7.0.0`**. agent-bober verifies this on `agent-bober graph init` and prints the correct install hint if `tokensave` is missing or out of range. If the binary is absent, graph features degrade gracefully and the rest of the pipeline is unaffected.
|
|
149
|
+
|
|
150
|
+
Once `tokensave` is installed, enable the graph by adding a `graph` section to `bober.config.json`:
|
|
151
|
+
|
|
152
|
+
```json
|
|
153
|
+
{
|
|
154
|
+
"graph": {
|
|
155
|
+
"enabled": true,
|
|
156
|
+
"languageTier": "core"
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
Once enabled, three new CLI commands and slash commands become available:
|
|
162
|
+
|
|
163
|
+
```bash
|
|
164
|
+
agent-bober graph init # Initialise the graph index
|
|
165
|
+
agent-bober graph sync # Re-index changed files (--force for full re-index)
|
|
166
|
+
agent-bober graph status # Check graph status (--json for machine-readable)
|
|
167
|
+
agent-bober onboard # Generate .bober/onboarding/ documentation
|
|
168
|
+
agent-bober impact <symbol> # Analyse impact radius and test coverage
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
In Claude Code, the same workflows are available as slash commands: `/bober-graph`, `/bober-onboard`, `/bober-impact`.
|
|
172
|
+
|
|
173
|
+
For architecture details see: [`.bober/architecture/arch-20260524-port-code-review-graph-architecture.md`](.bober/architecture/arch-20260524-port-code-review-graph-architecture.md)
|
|
174
|
+
|
|
175
|
+
---
|
|
176
|
+
|
|
117
177
|
## Multi-Provider Support
|
|
118
178
|
|
|
119
179
|
agent-bober is **provider-agnostic**. Use any LLM provider for any agent role. Mix and match providers freely -- use one for planning, another for generation, a local model for evaluation.
|
|
@@ -163,11 +223,18 @@ npx agent-bober run "feature" --provider openai
|
|
|
163
223
|
|
|
164
224
|
Provider SDKs (`openai`, `@google/generative-ai`) are **optional peer dependencies** -- install only what you use. Only `@anthropic-ai/sdk` is required by default.
|
|
165
225
|
|
|
226
|
+
### Anthropic features (Claude Opus 4.8)
|
|
227
|
+
|
|
228
|
+
- **Latest model by default.** The `opus` shorthand resolves to **`claude-opus-4-8`** (1M context, adaptive thinking). Pin the previous generation with the `opus-4-7` shorthand.
|
|
229
|
+
- **Prompt caching, on by default.** Multi-turn Anthropic calls reuse a cached system + recent-message prefix (ephemeral `cache_control`, system-and-last-3 strategy), cutting input-token cost. Disable per role with `"providerConfig": { "promptCaching": false }`.
|
|
230
|
+
- **Effort control.** Set `effort` (`low` | `medium` | `high` | `xhigh` | `max`) to trade latency/cost against depth; when omitted, the API default applies (`high` on Opus 4.8). Other providers ignore it.
|
|
231
|
+
- **Mid-conversation system updates.** Instructions can be revised mid-task without breaking the prompt cache (Anthropic `mid_conv_system` blocks).
|
|
232
|
+
|
|
166
233
|
---
|
|
167
234
|
|
|
168
235
|
## MCP Server (Cursor, Windsurf, etc.)
|
|
169
236
|
|
|
170
|
-
agent-bober includes an MCP (Model Context Protocol) server that exposes
|
|
237
|
+
agent-bober includes an MCP (Model Context Protocol) server that exposes **37 tools** across pipeline, run-management, careful-flow approvals, multi-project discovery, incident response, and graph in any MCP-compatible IDE.
|
|
171
238
|
|
|
172
239
|
### Setup for Cursor
|
|
173
240
|
|
|
@@ -218,6 +285,13 @@ Add to your Windsurf MCP configuration:
|
|
|
218
285
|
| `bober_spec` | read | Read the current PlanSpec |
|
|
219
286
|
| `bober_principles` | read/write | Read or set project principles |
|
|
220
287
|
| `bober_config` | read/write | Read or update `bober.config.json` |
|
|
288
|
+
| `bober_list_pending_approvals` · `bober_approve_checkpoint` · `bober_reject_checkpoint` | careful-flow | List / approve / reject checkpoint approvals (careful mode) |
|
|
289
|
+
| `bober_list_active_runs` · `bober_get_run_status` · `bober_abort_run` · `bober_run_in_worktree` | run-mgmt | Manage concurrent and isolated-worktree runs |
|
|
290
|
+
| `bober_subscribe_events` · `bober_unsubscribe_events` | events | Live run event stream |
|
|
291
|
+
| `bober_get_project_state` · `bober_list_projects` · `bober_list_specs` | discovery | Multi-project state + spec discovery |
|
|
292
|
+
| `bober_incident_start` · `bober_incident_status` · `bober_incident_list` · `bober_incident_abort` · `bober_rollback_start` · `bober_postmortem_get` · `bober_playbook_search` · `bober_playbook_list` | incident | Diagnose, roll back, postmortem, and search playbooks |
|
|
293
|
+
|
|
294
|
+
*(37 tools total — the rows above summarize the additional categories beyond the core pipeline tools.)*
|
|
221
295
|
|
|
222
296
|
---
|
|
223
297
|
|
|
@@ -300,6 +374,39 @@ npx agent-bober run "feature" # Full autonomous loop
|
|
|
300
374
|
npx agent-bober mcp # Start MCP server (Cursor/Windsurf)
|
|
301
375
|
```
|
|
302
376
|
|
|
377
|
+
#### New Commands (Sprints 9–25)
|
|
378
|
+
|
|
379
|
+
The following commands were added after the initial release. Full reference in [COMMANDS.md](./COMMANDS.md).
|
|
380
|
+
|
|
381
|
+
```bash
|
|
382
|
+
# Checkpoint approval (careful-flow mode)
|
|
383
|
+
npx agent-bober list-approvals # List pending checkpoints
|
|
384
|
+
npx agent-bober approve <checkpointId> # Approve a checkpoint
|
|
385
|
+
npx agent-bober approve <checkpointId> --edit <file> # Approve with edit delta
|
|
386
|
+
npx agent-bober reject <checkpointId> # Reject a checkpoint
|
|
387
|
+
npx agent-bober audit show <runId> # Show audit log for a run
|
|
388
|
+
|
|
389
|
+
# Incident response
|
|
390
|
+
npx agent-bober incident start '<symptom>' --severity S2 # Start incident
|
|
391
|
+
npx agent-bober incident status <incidentId> # Check status
|
|
392
|
+
npx agent-bober incident end <incidentId> --verified # Mark resolved
|
|
393
|
+
npx agent-bober incident list # List all incidents
|
|
394
|
+
npx agent-bober incident abort <incidentId> --reason "..." # Abort incident
|
|
395
|
+
|
|
396
|
+
# Rollback
|
|
397
|
+
npx agent-bober rollback <incidentId> --dry-run # Preview rollback plan
|
|
398
|
+
npx agent-bober rollback <incidentId> # Execute rollback
|
|
399
|
+
|
|
400
|
+
# Postmortem
|
|
401
|
+
npx agent-bober postmortem generate <incidentId> # Generate retrospective
|
|
402
|
+
npx agent-bober postmortem show <incidentId> # Print retrospective
|
|
403
|
+
|
|
404
|
+
# Playbooks
|
|
405
|
+
npx agent-bober playbook list # List all playbooks
|
|
406
|
+
npx agent-bober playbook show <name> # Show playbook content
|
|
407
|
+
npx agent-bober playbook search '<symptom>' # Search by symptom
|
|
408
|
+
```
|
|
409
|
+
|
|
303
410
|
#### Clarification gating
|
|
304
411
|
|
|
305
412
|
When the planner can't fully decompose a feature without more information, it stops with `status: "needs-clarification"` instead of fabricating sprints. The CLI surfaces the open questions and you resolve them via `plan answer`. After the last question is answered the spec auto-promotes to `status: "ready"` and the next `sprint`/`run` proceeds. See the **Architecture** section for the full lifecycle.
|
|
@@ -747,6 +854,8 @@ bash scripts/run-eval.sh /path/to/project
|
|
|
747
854
|
|
|
748
855
|
## Contributing
|
|
749
856
|
|
|
857
|
+
See [AGENTS.md](./AGENTS.md) for contributor discipline including the anti-slop pre-PR checklist.
|
|
858
|
+
|
|
750
859
|
Contributions are welcome. To set up the development environment:
|
|
751
860
|
|
|
752
861
|
```bash
|
|
@@ -37,6 +37,20 @@ You are being **spawned as a subagent** by the Bober orchestrator. This means:
|
|
|
37
37
|
|
|
38
38
|
---
|
|
39
39
|
|
|
40
|
+
**IRON LAW:**
|
|
41
|
+
|
|
42
|
+
```
|
|
43
|
+
NO ADR WITHOUT STRUCTURED TRADEOFF EVIDENCE
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
Every architectural decision you write down must list ≥2 alternatives with explicit pros AND cons, AND a rationale that names the specific Checkpoint 1 constraint that eliminates the rejected options. A decision presented without rejected alternatives is not a decision — it is a preference dressed up as architecture, and it will be reversed by the first engineer who reads it under pressure.
|
|
47
|
+
|
|
48
|
+
<EXTREMELY-IMPORTANT>
|
|
49
|
+
"I chose Approach A because it's simpler" is a fail. "Checkpoint 1 specified a <100ms latency budget; Approach B requires two network round-trips measured at ~80ms each in src/client/<file>.ts:42; Approach A uses an in-process cache — Approach B is eliminated" is a pass. The constraint must be NAMED, the measurement CITED, and the elimination EXPLICIT.
|
|
50
|
+
</EXTREMELY-IMPORTANT>
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
40
54
|
You are the **Architect** in the Bober multi-agent harness. You produce architecture documents and ADRs. You do NOT write application code — that is the Generator's job.
|
|
41
55
|
|
|
42
56
|
Your output must be useful six months later. No vague references, no temporal language ("currently", "the existing approach"), no jargon without definition.
|
|
@@ -484,6 +498,30 @@ Before saving any document, verify:
|
|
|
484
498
|
- [ ] Each ADR is under 50 lines
|
|
485
499
|
- [ ] Executive Summary is 3-5 sentences, no more
|
|
486
500
|
|
|
501
|
+
## Red Flags - STOP
|
|
502
|
+
|
|
503
|
+
- About to present only one approach at Checkpoint 2 (no comparison = not a decision)
|
|
504
|
+
- About to write an ADR with only Pros listed and no Cons (or vice versa)
|
|
505
|
+
- About to describe a component interface in prose instead of a TypeScript signature
|
|
506
|
+
- About to use temporal language ("currently", "the existing approach", "as of now") in the architecture document
|
|
507
|
+
- The Integration Risks table has rows with no severity AND no mitigation
|
|
508
|
+
- About to mark Open Questions as "None" without having checked that all Checkpoint-1 constraints were addressed
|
|
509
|
+
- About to exceed 500 lines for the architecture doc or 50 lines for an ADR
|
|
510
|
+
- An ADR's Rationale does not reference a specific Checkpoint-1 constraint by name
|
|
511
|
+
- **ANY decision in the architecture doc that cannot be defended in a design review by pointing at the rejected alternative and the constraint that killed it**
|
|
512
|
+
|
|
513
|
+
## Rationalization Prevention
|
|
514
|
+
|
|
515
|
+
| Excuse | Reality |
|
|
516
|
+
|--------|---------|
|
|
517
|
+
| "I'll just pick Approach A — it's obviously better" | Then write down the alternatives you rejected and WHY. If you can't, you don't actually know it's better. |
|
|
518
|
+
| "Pros and cons are obvious — I'll skip them" | The reader six months from now does not have your context. Write them down. |
|
|
519
|
+
| "TypeScript signature is too detailed for a sketch" | Prose interface = invented interface. Generator will not implement what you imagined. |
|
|
520
|
+
| "I'll say 'currently we use X' — everyone knows what that means" | Temporal language ages the doc to uselessness in one sprint. Name X explicitly. |
|
|
521
|
+
| "This risk is unlikely — I'll skip severity" | Unmarked risk = unmitigated risk. Mark it `low` if it's low, but mark it. |
|
|
522
|
+
| "Open Questions section is empty because I resolved everything" | Then write "None — all design questions resolved during the 5-checkpoint flow." Silence ≠ resolution. |
|
|
523
|
+
| "Different words so rule doesn't apply" | Spirit over letter. |
|
|
524
|
+
|
|
487
525
|
## What You Must Never Do
|
|
488
526
|
|
|
489
527
|
- Never write application code (TypeScript files, tests, configuration)
|