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
|
@@ -30,9 +30,13 @@ Also read `.bober/principles.md` if it exists. You will include the principles t
|
|
|
30
30
|
|
|
31
31
|
## Step 1: Identify the Target Sprint
|
|
32
32
|
|
|
33
|
-
**Find the active PlanSpec.** List all specs in `.bober/specs/`. For each spec, read only the **first
|
|
33
|
+
**Find the active PlanSpec.** List all specs in `.bober/specs/`. For each spec, read only the **first 10 lines** — the `status` field is near the top. Apply this triage:
|
|
34
34
|
|
|
35
|
-
|
|
35
|
+
- `"completed"` or `"abandoned"` → skip entirely.
|
|
36
|
+
- `"needs-clarification"` → BLOCK this spec from sprint execution. Print the open `clarificationQuestions` from the spec and tell the user to resolve via `npx agent-bober plan answer <specId>` (interactive) or `npx agent-bober plan answer <specId> <questionId> "<answer>"` (one-shot). Do NOT spawn the generator. Do NOT pick this spec as the active one. If it's the only spec, exit.
|
|
37
|
+
- `"draft"`, `"ready"`, `"in-progress"` → eligible. From the eligible specs, pick the most recent one (sort by `createdAt` descending).
|
|
38
|
+
|
|
39
|
+
If all specs are `completed`/`abandoned` and no sprint number was provided, tell the user all plans are complete. If the only remaining spec is `needs-clarification`, exit with the clarification message.
|
|
36
40
|
|
|
37
41
|
**If a sprint number was provided as an argument:**
|
|
38
42
|
- Find the contract for that sprint number: `.bober/contracts/sprint-<specId>-<N>.json`
|
|
@@ -463,260 +467,3 @@ Read `pipeline.contextReset` from config:
|
|
|
463
467
|
After completing this phase, suggest the following next steps to the user:
|
|
464
468
|
- `/bober-eval` — Evaluate the current sprint output independently
|
|
465
469
|
- `/bober-sprint` — Execute the next sprint in the plan
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
---
|
|
469
|
-
|
|
470
|
-
<!-- Reference: contract-schema.md -->
|
|
471
|
-
|
|
472
|
-
# SprintContract JSON Schema
|
|
473
|
-
|
|
474
|
-
This document defines the complete schema for SprintContract documents. Sprint contracts are the binding agreement between the Planner, Generator, and Evaluator for a single sprint.
|
|
475
|
-
|
|
476
|
-
## Location
|
|
477
|
-
|
|
478
|
-
SprintContract files are stored at: `.bober/contracts/<contractId>.json`
|
|
479
|
-
|
|
480
|
-
## Naming Convention
|
|
481
|
-
|
|
482
|
-
- `contractId` format: `sprint-<specId>-<sprint-number>`
|
|
483
|
-
- Example: `sprint-spec-20260326-user-auth-1`
|
|
484
|
-
- Sprint numbers are 1-indexed (first sprint is 1, not 0)
|
|
485
|
-
|
|
486
|
-
## Full Schema
|
|
487
|
-
|
|
488
|
-
```json
|
|
489
|
-
{
|
|
490
|
-
"contractId": "string (required)",
|
|
491
|
-
"specId": "string (required, references parent PlanSpec)",
|
|
492
|
-
"sprintNumber": "number (required, 1-indexed)",
|
|
493
|
-
"title": "string (required, concise sprint title)",
|
|
494
|
-
"description": "string (required, what this sprint delivers)",
|
|
495
|
-
"status": "string (required, one of: proposed, in-progress, completed, needs-rework)",
|
|
496
|
-
"createdAt": "string (required, ISO-8601)",
|
|
497
|
-
"updatedAt": "string (required, ISO-8601)",
|
|
498
|
-
"completedAt": "string (optional, ISO-8601, set when status becomes completed)",
|
|
499
|
-
|
|
500
|
-
"dependsOn": [
|
|
501
|
-
"string — contractId references for sprints that must complete before this one"
|
|
502
|
-
],
|
|
503
|
-
|
|
504
|
-
"features": [
|
|
505
|
-
"string — featureId references from the parent PlanSpec"
|
|
506
|
-
],
|
|
507
|
-
|
|
508
|
-
"successCriteria": [
|
|
509
|
-
{
|
|
510
|
-
"criterionId": "string (required, format: sc-<sprint>-<index>)",
|
|
511
|
-
"description": "string (required, specific testable criterion)",
|
|
512
|
-
"verificationMethod": "string (required, one of: manual, typecheck, lint, unit-test, playwright, api-check, build, custom)",
|
|
513
|
-
"required": "boolean (required, true = must pass for sprint to pass)",
|
|
514
|
-
"customCommand": "string (optional, command to run for custom verification)"
|
|
515
|
-
}
|
|
516
|
-
],
|
|
517
|
-
|
|
518
|
-
"generatorNotes": "string (required, guidance for the Generator agent)",
|
|
519
|
-
"evaluatorNotes": "string (required, guidance for the Evaluator agent)",
|
|
520
|
-
|
|
521
|
-
"estimatedFiles": [
|
|
522
|
-
"string — file paths expected to be created or modified"
|
|
523
|
-
],
|
|
524
|
-
|
|
525
|
-
"estimatedDuration": "string (required, one of: small, medium, large)",
|
|
526
|
-
|
|
527
|
-
"iterationHistory": [
|
|
528
|
-
{
|
|
529
|
-
"iteration": "number",
|
|
530
|
-
"evalId": "string — reference to EvalResult",
|
|
531
|
-
"result": "string (pass | fail)",
|
|
532
|
-
"timestamp": "string (ISO-8601)"
|
|
533
|
-
}
|
|
534
|
-
],
|
|
535
|
-
|
|
536
|
-
"lastEvalId": "string (optional, reference to most recent EvalResult)"
|
|
537
|
-
}
|
|
538
|
-
```
|
|
539
|
-
|
|
540
|
-
## Field Descriptions
|
|
541
|
-
|
|
542
|
-
### Core Fields
|
|
543
|
-
|
|
544
|
-
| Field | Description |
|
|
545
|
-
|-------|-------------|
|
|
546
|
-
| `contractId` | Unique identifier. Generated by the Planner. Never changes. |
|
|
547
|
-
| `specId` | Reference to the parent PlanSpec. Used to load broader context. |
|
|
548
|
-
| `sprintNumber` | Position in the sprint sequence. 1-indexed. |
|
|
549
|
-
| `title` | Concise description of what this sprint delivers. Should start with a verb: "Implement...", "Add...", "Create...". |
|
|
550
|
-
| `description` | 2-4 sentences describing the sprint's deliverables and scope. |
|
|
551
|
-
| `status` | Lifecycle state. See Status Transitions below. |
|
|
552
|
-
|
|
553
|
-
### Status Transitions
|
|
554
|
-
|
|
555
|
-
```
|
|
556
|
-
proposed → in-progress → completed
|
|
557
|
-
↓
|
|
558
|
-
needs-rework → in-progress → completed
|
|
559
|
-
```
|
|
560
|
-
|
|
561
|
-
- `proposed`: Created by the Planner. Not yet started or reviewed.
|
|
562
|
-
- `in-progress`: Contract negotiated and Generator is working on it.
|
|
563
|
-
- `completed`: All required success criteria passed evaluation.
|
|
564
|
-
- `needs-rework`: Failed evaluation after maximum iterations. Requires human intervention or plan revision.
|
|
565
|
-
|
|
566
|
-
### Dependencies
|
|
567
|
-
|
|
568
|
-
| Field | Description |
|
|
569
|
-
|-------|-------------|
|
|
570
|
-
| `dependsOn` | Array of `contractId` values that must have status `completed` before this sprint can start. Empty array for the first sprint. |
|
|
571
|
-
| `features` | Array of `featureId` values from the parent PlanSpec that this sprint implements (partially or fully). |
|
|
572
|
-
|
|
573
|
-
### Success Criteria
|
|
574
|
-
|
|
575
|
-
Each success criterion is a single testable statement that the Evaluator checks independently.
|
|
576
|
-
|
|
577
|
-
| Field | Description |
|
|
578
|
-
|-------|-------------|
|
|
579
|
-
| `criterionId` | Unique within the contract. Format: `sc-<sprintNumber>-<index>` (1-indexed). |
|
|
580
|
-
| `description` | Specific, testable criterion. Must describe observable behavior or measurable outcome. |
|
|
581
|
-
| `verificationMethod` | How the Evaluator should verify this criterion. |
|
|
582
|
-
| `required` | If `true`, this criterion MUST pass for the sprint to pass. If `false`, it is advisory. |
|
|
583
|
-
| `customCommand` | Only for `verificationMethod: "custom"`. The command the Evaluator should run. |
|
|
584
|
-
|
|
585
|
-
### Verification Methods
|
|
586
|
-
|
|
587
|
-
| Method | What the Evaluator Does |
|
|
588
|
-
|--------|------------------------|
|
|
589
|
-
| `manual` | Reads source code and assesses whether the criterion is met based on code inspection and logic tracing. |
|
|
590
|
-
| `typecheck` | Runs the configured typecheck command. Criterion passes if zero type errors. |
|
|
591
|
-
| `lint` | Runs the configured lint command. Criterion passes if zero lint errors (warnings OK). |
|
|
592
|
-
| `unit-test` | Runs the configured test command. Criterion passes if all tests pass. |
|
|
593
|
-
| `playwright` | Runs Playwright E2E tests. Criterion passes if all relevant E2E tests pass. |
|
|
594
|
-
| `api-check` | Tests specific API endpoints using curl or similar. Criterion passes if responses match expectations. |
|
|
595
|
-
| `build` | Runs the configured build command. Criterion passes if build succeeds with exit code 0. |
|
|
596
|
-
| `custom` | Runs `customCommand` and interprets the result. Exit code 0 = pass. |
|
|
597
|
-
|
|
598
|
-
### Agent Notes
|
|
599
|
-
|
|
600
|
-
| Field | Description |
|
|
601
|
-
|-------|-------------|
|
|
602
|
-
| `generatorNotes` | Free-form guidance for the Generator. Should include: key files to examine for patterns, known gotchas, suggested implementation order, references to similar existing code. |
|
|
603
|
-
| `evaluatorNotes` | Free-form guidance for the Evaluator. Should include: specific things to test, edge cases to check, how to verify UI criteria, expected API response shapes. |
|
|
604
|
-
|
|
605
|
-
### Estimates
|
|
606
|
-
|
|
607
|
-
| Field | Description |
|
|
608
|
-
|-------|-------------|
|
|
609
|
-
| `estimatedFiles` | Array of file paths the Generator is expected to create or modify. This is advisory -- the Generator may touch additional files if needed. The Evaluator uses this to check for unexpected changes. |
|
|
610
|
-
| `estimatedDuration` | Relative size estimate: `small` (30-60 min), `medium` (1-3 hours), `large` (3-5 hours). |
|
|
611
|
-
|
|
612
|
-
### Iteration History
|
|
613
|
-
|
|
614
|
-
| Field | Description |
|
|
615
|
-
|-------|-------------|
|
|
616
|
-
| `iterationHistory` | Array of past evaluation attempts. Appended after each evaluation. |
|
|
617
|
-
| `lastEvalId` | Reference to the most recent EvalResult. Updated after each evaluation. |
|
|
618
|
-
|
|
619
|
-
## Complete Example
|
|
620
|
-
|
|
621
|
-
```json
|
|
622
|
-
{
|
|
623
|
-
"contractId": "sprint-spec-20260326-user-auth-1",
|
|
624
|
-
"specId": "spec-20260326-user-auth",
|
|
625
|
-
"sprintNumber": 1,
|
|
626
|
-
"title": "Implement user registration with form and API",
|
|
627
|
-
"description": "Create the user registration flow end-to-end: a React registration form with email, password, and confirm-password fields; an Express API endpoint that validates input and creates a user record in PostgreSQL with a bcrypt-hashed password; and basic form validation on both client and server.",
|
|
628
|
-
"status": "proposed",
|
|
629
|
-
"createdAt": "2026-03-26T10:00:00Z",
|
|
630
|
-
"updatedAt": "2026-03-26T10:00:00Z",
|
|
631
|
-
"completedAt": null,
|
|
632
|
-
|
|
633
|
-
"dependsOn": [],
|
|
634
|
-
|
|
635
|
-
"features": ["feat-1"],
|
|
636
|
-
|
|
637
|
-
"successCriteria": [
|
|
638
|
-
{
|
|
639
|
-
"criterionId": "sc-1-1",
|
|
640
|
-
"description": "The project builds successfully with zero errors.",
|
|
641
|
-
"verificationMethod": "build",
|
|
642
|
-
"required": true
|
|
643
|
-
},
|
|
644
|
-
{
|
|
645
|
-
"criterionId": "sc-1-2",
|
|
646
|
-
"description": "TypeScript compilation produces zero type errors.",
|
|
647
|
-
"verificationMethod": "typecheck",
|
|
648
|
-
"required": true
|
|
649
|
-
},
|
|
650
|
-
{
|
|
651
|
-
"criterionId": "sc-1-3",
|
|
652
|
-
"description": "A registration form component exists at the /register route with email, password, and confirm-password input fields, each with an associated label.",
|
|
653
|
-
"verificationMethod": "manual",
|
|
654
|
-
"required": true
|
|
655
|
-
},
|
|
656
|
-
{
|
|
657
|
-
"criterionId": "sc-1-4",
|
|
658
|
-
"description": "POST /api/auth/register accepts { email, password } and returns 201 with { id, email } on success.",
|
|
659
|
-
"verificationMethod": "api-check",
|
|
660
|
-
"required": true
|
|
661
|
-
},
|
|
662
|
-
{
|
|
663
|
-
"criterionId": "sc-1-5",
|
|
664
|
-
"description": "POST /api/auth/register returns 400 with an error message when email is already registered.",
|
|
665
|
-
"verificationMethod": "api-check",
|
|
666
|
-
"required": true
|
|
667
|
-
},
|
|
668
|
-
{
|
|
669
|
-
"criterionId": "sc-1-6",
|
|
670
|
-
"description": "The password is stored as a bcrypt hash in the database, never in plain text.",
|
|
671
|
-
"verificationMethod": "manual",
|
|
672
|
-
"required": true
|
|
673
|
-
},
|
|
674
|
-
{
|
|
675
|
-
"criterionId": "sc-1-7",
|
|
676
|
-
"description": "Client-side validation shows an error when password is shorter than 8 characters before form submission.",
|
|
677
|
-
"verificationMethod": "manual",
|
|
678
|
-
"required": true
|
|
679
|
-
},
|
|
680
|
-
{
|
|
681
|
-
"criterionId": "sc-1-8",
|
|
682
|
-
"description": "ESLint reports zero errors on all new and modified files.",
|
|
683
|
-
"verificationMethod": "lint",
|
|
684
|
-
"required": false
|
|
685
|
-
}
|
|
686
|
-
],
|
|
687
|
-
|
|
688
|
-
"generatorNotes": "Look at existing route definitions in src/routes/ for the Express routing pattern. The project uses Prisma -- check prisma/schema.prisma for the existing schema and add a User model. Use bcrypt (already in package.json) for password hashing. For the React form, follow the pattern in src/components/ -- the project uses controlled components with useState. The registration form should be at src/pages/Register.tsx and the route added to src/App.tsx.",
|
|
689
|
-
|
|
690
|
-
"evaluatorNotes": "For sc-1-3: Read the Register component source and verify it renders three labeled input fields. For sc-1-4 and sc-1-5: Start the dev server and use curl to test the endpoint. For sc-1-6: Read the route handler code and verify bcrypt.hash is called before database insertion. For sc-1-7: Read the form component code and verify client-side validation logic exists for password length.",
|
|
691
|
-
|
|
692
|
-
"estimatedFiles": [
|
|
693
|
-
"prisma/schema.prisma",
|
|
694
|
-
"src/routes/auth.ts",
|
|
695
|
-
"src/pages/Register.tsx",
|
|
696
|
-
"src/App.tsx"
|
|
697
|
-
],
|
|
698
|
-
|
|
699
|
-
"estimatedDuration": "medium",
|
|
700
|
-
|
|
701
|
-
"iterationHistory": [],
|
|
702
|
-
"lastEvalId": null
|
|
703
|
-
}
|
|
704
|
-
```
|
|
705
|
-
|
|
706
|
-
## Writing Good Success Criteria
|
|
707
|
-
|
|
708
|
-
### Do
|
|
709
|
-
|
|
710
|
-
- Start with an observable action or state: "The form displays...", "The API returns...", "The database contains..."
|
|
711
|
-
- Include specific values: "returns 201", "displays 'Invalid email'", "at least 8 characters"
|
|
712
|
-
- Map each criterion to exactly one verification method
|
|
713
|
-
- Include at least one `build` criterion and one functional criterion per sprint
|
|
714
|
-
- Write criteria the Evaluator can verify without guessing
|
|
715
|
-
|
|
716
|
-
### Do Not
|
|
717
|
-
|
|
718
|
-
- Use subjective language: "looks good", "works well", "clean code"
|
|
719
|
-
- Combine multiple checks in one criterion (split them)
|
|
720
|
-
- Reference internal implementation details unless checking them IS the criterion
|
|
721
|
-
- Write criteria that require human visual judgment (unless verification method is `manual` and the check is code-inspectable)
|
|
722
|
-
- Assume the Evaluator has context beyond the contract and handoff documents
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: bober-using-bober
|
|
3
|
+
description: Use when starting any conversation - establishes how to find and use bober skills, requiring Skill tool invocation before ANY response including clarifying questions
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
<SUBAGENT-STOP>
|
|
7
|
+
If you were dispatched as a subagent to execute a specific task, skip this skill.
|
|
8
|
+
</SUBAGENT-STOP>
|
|
9
|
+
|
|
10
|
+
<EXTREMELY-IMPORTANT>
|
|
11
|
+
If you think there is even a 1% chance a skill might apply to what you are doing, you ABSOLUTELY MUST invoke the skill.
|
|
12
|
+
|
|
13
|
+
IF A SKILL APPLIES TO YOUR TASK, YOU DO NOT HAVE A CHOICE. YOU MUST USE IT.
|
|
14
|
+
|
|
15
|
+
This is not negotiable. This is not optional. You cannot rationalize your way out of this.
|
|
16
|
+
</EXTREMELY-IMPORTANT>
|
|
17
|
+
|
|
18
|
+
## You Are agent-bober
|
|
19
|
+
|
|
20
|
+
You are agent-bober, a multi-mode software-engineering teammate. Your behavior is shaped by a catalog of skills, each enforcing a specific discipline. The Iron Law of agent-bober is: **if a skill applies, invoke it. No exceptions.**
|
|
21
|
+
|
|
22
|
+
## The Iron Law
|
|
23
|
+
|
|
24
|
+
When a bober skill states an "Iron Law," it is non-negotiable. Iron Laws are always capitalized, marked with **IRON LAW:** or wrapped in `<EXTREMELY-IMPORTANT>` tags. You do not work around an Iron Law. You do not rationalize an exception. You follow it exactly.
|
|
25
|
+
|
|
26
|
+
## Instruction Priority
|
|
27
|
+
|
|
28
|
+
Bober skills override default system prompt behavior, but **user instructions always take precedence**:
|
|
29
|
+
|
|
30
|
+
1. **User's explicit instructions** (CLAUDE.md, AGENTS.md, direct requests) — highest priority
|
|
31
|
+
2. **Bober skills** — override default system behavior where they conflict
|
|
32
|
+
3. **Default system prompt** — lowest priority
|
|
33
|
+
|
|
34
|
+
If CLAUDE.md or AGENTS.md says "don't use TDD" and a skill says "always use TDD," follow the user's instructions. The user is in control.
|
|
35
|
+
|
|
36
|
+
See [AGENTS.md](../../AGENTS.md) at the repo root for the contributor discipline — this file defines non-negotiable project conventions.
|
|
37
|
+
|
|
38
|
+
## How to Access Skills
|
|
39
|
+
|
|
40
|
+
**In Claude Code:** Use the `Skill` tool. When you invoke a skill, its content is loaded and presented to you — follow it directly. Never use the Read tool on skill files.
|
|
41
|
+
|
|
42
|
+
**In Copilot CLI:** Use the `skill` tool. Skills are auto-discovered. The `skill` tool works the same as Claude Code's `Skill` tool.
|
|
43
|
+
|
|
44
|
+
**In other environments:** Check your platform's documentation for how skills are loaded.
|
|
45
|
+
|
|
46
|
+
# Using Skills
|
|
47
|
+
|
|
48
|
+
## The Rule
|
|
49
|
+
|
|
50
|
+
**Invoke relevant or requested skills BEFORE any response or action.** Even a 1% chance a skill might apply means that you should invoke the skill to check. If an invoked skill turns out to be wrong for the situation, you don't need to use it.
|
|
51
|
+
|
|
52
|
+
## Red Flags
|
|
53
|
+
|
|
54
|
+
These thoughts mean STOP — you're rationalizing:
|
|
55
|
+
|
|
56
|
+
| Thought | Reality |
|
|
57
|
+
|---------|---------|
|
|
58
|
+
| "This is just a simple question" | Questions are tasks. Check for skills. |
|
|
59
|
+
| "I need more context first" | Skill check comes BEFORE clarifying questions. |
|
|
60
|
+
| "Let me explore the codebase first" | Skills tell you HOW to explore. Check first. |
|
|
61
|
+
| "I can check git/files quickly" | Files lack conversation context. Check for skills. |
|
|
62
|
+
| "Let me gather information first" | Skills tell you HOW to gather information. |
|
|
63
|
+
| "This doesn't need a formal skill" | If a skill exists, use it. |
|
|
64
|
+
| "I remember this skill" | Skills evolve. Read current version. |
|
|
65
|
+
| "This doesn't count as a task" | Action = task. Check for skills. |
|
|
66
|
+
| "The skill is overkill" | Simple things become complex. Use it. |
|
|
67
|
+
| "I'll just do this one thing first" | Check BEFORE doing anything. |
|
|
68
|
+
| "This feels productive" | Undisciplined action wastes time. Skills prevent this. |
|
|
69
|
+
| "I know what that means" | Knowing the concept != using the skill. Invoke it. |
|
|
70
|
+
|
|
71
|
+
## Skill Priority
|
|
72
|
+
|
|
73
|
+
When multiple skills could apply, use this order:
|
|
74
|
+
|
|
75
|
+
1. **Process skills first** (bober.plan, bober.research, bober.debug) — these determine HOW to approach the task
|
|
76
|
+
2. **Implementation skills second** (bober.sprint, bober.run) — these guide execution
|
|
77
|
+
|
|
78
|
+
"Let's build X" → bober.plan first, then bober.sprint.
|
|
79
|
+
"Fix this bug" → bober.debug first, then domain-specific skills.
|
|
80
|
+
|
|
81
|
+
## Skill Types
|
|
82
|
+
|
|
83
|
+
**Rigid** (bober.sprint, bober.eval, bober.debug): Follow exactly. Don't adapt away discipline.
|
|
84
|
+
|
|
85
|
+
**Flexible** (bober.principles, bober.architect): Adapt principles to context.
|
|
86
|
+
|
|
87
|
+
The skill itself tells you which.
|
|
88
|
+
|
|
89
|
+
## The Bober Skill Catalog
|
|
90
|
+
|
|
91
|
+
### Process and Discipline Skills
|
|
92
|
+
|
|
93
|
+
- `bober.principles` — define and maintain project principles; generates `.bober/principles.md`
|
|
94
|
+
- `bober.plan` — transform feature ideas into sprint contracts with clarifying questions and acceptance criteria
|
|
95
|
+
- `bober.research` — two-phase researcher isolation: research-only phase before any implementation
|
|
96
|
+
- `bober.architect` — 5-checkpoint architecture flow: problem → options → decision → ADR → review
|
|
97
|
+
- `bober.sprint` — execute a single sprint contract with generator-evaluator verification
|
|
98
|
+
- `bober.run` — full autonomous pipeline: plan → research → architect → sprint loop
|
|
99
|
+
|
|
100
|
+
### Quality and Verification Skills
|
|
101
|
+
|
|
102
|
+
- `bober.eval` — run evaluation strategies (typecheck, lint, build, unit-test, playwright, agent-evaluation)
|
|
103
|
+
- `bober.verify` (planned) — verification-before-completion discipline; prevents shipping unverified work
|
|
104
|
+
- `bober.debug` (planned) — systematic debugging: reproduce → isolate → hypothesize → fix → verify
|
|
105
|
+
- `bober.code-review` (planned) — advisory code review with risk-scored analysis using the knowledge graph
|
|
106
|
+
|
|
107
|
+
### Operations Skills
|
|
108
|
+
|
|
109
|
+
- `bober.diagnose` (planned) — incident response: triage → identify → contain → resolve → document
|
|
110
|
+
- `bober.runbook` (planned) — playbook execution for known operational procedures
|
|
111
|
+
- `bober.deploy` (planned) — change-management gates: staging → smoke → canary → promote → verify
|
|
112
|
+
- `bober.postmortem` (planned) — incident timeline synthesis and blameless retrospective
|
|
113
|
+
|
|
114
|
+
### Existing Domain Skills (not in core discipline catalog)
|
|
115
|
+
|
|
116
|
+
The following skills are available in this repo but are domain-specific, not part of the forward-looking discipline catalog above. Invoke them when relevant:
|
|
117
|
+
|
|
118
|
+
- `bober.anchor` — project anchoring and context establishment
|
|
119
|
+
- `bober.brownfield` — brownfield (existing codebase) conventions and anti-patterns
|
|
120
|
+
- `bober.graph` — knowledge graph queries and code review using code-review-graph MCP
|
|
121
|
+
- `bober.impact` — change impact analysis
|
|
122
|
+
- `bober.onboard` — project onboarding
|
|
123
|
+
- `bober.playwright` — Playwright end-to-end test generation
|
|
124
|
+
- `bober.react` — React component and hook conventions
|
|
125
|
+
- `bober.solidity` — Solidity smart contract patterns
|
|
126
|
+
|
|
127
|
+
## User Instructions
|
|
128
|
+
|
|
129
|
+
Instructions say WHAT, not HOW. "Add X" or "Fix Y" doesn't mean skip workflows. Always invoke the relevant skill first to determine HOW.
|
|
130
|
+
|
|
131
|
+
## Attribution
|
|
132
|
+
|
|
133
|
+
Structural pattern and voice ported from [obra/superpowers](https://github.com/obra/superpowers) (MIT licensed). Adapted for the agent-bober skill catalog.
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: bober-verify
|
|
3
|
+
description: Use when about to claim work is complete, fixed, or passing, before committing or creating PRs - requires running verification commands and confirming output before making any success claims; evidence before assertions always
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
> Verbatim port from [obra/superpowers](https://github.com/obra/superpowers) — MIT License.
|
|
7
|
+
> Original: skills/verification-before-completion/SKILL.md.
|
|
8
|
+
> Adaptations: skill name (bober.verify), tool name references where bober has equivalents.
|
|
9
|
+
|
|
10
|
+
# Verification Before Completion
|
|
11
|
+
|
|
12
|
+
## Overview
|
|
13
|
+
|
|
14
|
+
Claiming work is complete without verification is dishonesty, not efficiency.
|
|
15
|
+
|
|
16
|
+
**Core principle:** Evidence before claims, always.
|
|
17
|
+
|
|
18
|
+
**Violating the letter of this rule is violating the spirit of this rule.**
|
|
19
|
+
|
|
20
|
+
## The Iron Law
|
|
21
|
+
|
|
22
|
+
```
|
|
23
|
+
NO COMPLETION CLAIMS WITHOUT FRESH VERIFICATION EVIDENCE
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
If you haven't run the verification command in this message, you cannot claim it passes.
|
|
27
|
+
|
|
28
|
+
## The Gate Function
|
|
29
|
+
|
|
30
|
+
```
|
|
31
|
+
BEFORE claiming any status or expressing satisfaction:
|
|
32
|
+
|
|
33
|
+
1. IDENTIFY: What command proves this claim?
|
|
34
|
+
2. RUN: Execute the FULL command (fresh, complete)
|
|
35
|
+
3. READ: Full output, check exit code, count failures
|
|
36
|
+
4. VERIFY: Does output confirm the claim?
|
|
37
|
+
- If NO: State actual status with evidence
|
|
38
|
+
- If YES: State claim WITH evidence
|
|
39
|
+
5. ONLY THEN: Make the claim
|
|
40
|
+
|
|
41
|
+
Skip any step = lying, not verifying
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Common Failures
|
|
45
|
+
|
|
46
|
+
| Claim | Requires | Not Sufficient |
|
|
47
|
+
|-------|----------|----------------|
|
|
48
|
+
| Tests pass | Test command output: 0 failures | Previous run, "should pass" |
|
|
49
|
+
| Linter clean | Linter output: 0 errors | Partial check, extrapolation |
|
|
50
|
+
| Build succeeds | Build command: exit 0 | Linter passing, logs look good |
|
|
51
|
+
| Bug fixed | Test original symptom: passes | Code changed, assumed fixed |
|
|
52
|
+
| Regression test works | Red-green cycle verified | Test passes once |
|
|
53
|
+
| Agent completed | VCS diff shows changes | Agent reports "success" |
|
|
54
|
+
| Requirements met | Line-by-line checklist | Tests passing |
|
|
55
|
+
|
|
56
|
+
## Red Flags - STOP
|
|
57
|
+
|
|
58
|
+
- Using "should", "probably", "seems to"
|
|
59
|
+
- Expressing satisfaction before verification ("Great!", "Perfect!", "Done!", etc.)
|
|
60
|
+
- About to commit/push/PR without verification
|
|
61
|
+
- Trusting agent success reports
|
|
62
|
+
- Relying on partial verification
|
|
63
|
+
- Thinking "just this once"
|
|
64
|
+
- Tired and wanting work over
|
|
65
|
+
- **ANY wording implying success without having run verification**
|
|
66
|
+
|
|
67
|
+
## Rationalization Prevention
|
|
68
|
+
|
|
69
|
+
| Excuse | Reality |
|
|
70
|
+
|--------|---------|
|
|
71
|
+
| "Should work now" | RUN the verification |
|
|
72
|
+
| "I'm confident" | Confidence ≠ evidence |
|
|
73
|
+
| "Just this once" | No exceptions |
|
|
74
|
+
| "Linter passed" | Linter ≠ compiler |
|
|
75
|
+
| "Agent said success" | Verify independently |
|
|
76
|
+
| "I'm tired" | Exhaustion ≠ excuse |
|
|
77
|
+
| "Partial check is enough" | Partial proves nothing |
|
|
78
|
+
| "Different words so rule doesn't apply" | Spirit over letter |
|
|
79
|
+
|
|
80
|
+
## Key Patterns
|
|
81
|
+
|
|
82
|
+
**Tests:**
|
|
83
|
+
```
|
|
84
|
+
✅ [Run test command] [See: 34/34 pass] "All tests pass"
|
|
85
|
+
❌ "Should pass now" / "Looks correct"
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
**Regression tests (TDD Red-Green):**
|
|
89
|
+
```
|
|
90
|
+
✅ Write → Run (pass) → Revert fix → Run (MUST FAIL) → Restore → Run (pass)
|
|
91
|
+
❌ "I've written a regression test" (without red-green verification)
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
**Build:**
|
|
95
|
+
```
|
|
96
|
+
✅ [Run build] [See: exit 0] "Build passes"
|
|
97
|
+
❌ "Linter passed" (linter doesn't check compilation)
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
**Requirements:**
|
|
101
|
+
```
|
|
102
|
+
✅ Re-read plan → Create checklist → Verify each → Report gaps or completion
|
|
103
|
+
❌ "Tests pass, phase complete"
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
**Agent delegation:**
|
|
107
|
+
```
|
|
108
|
+
✅ Agent reports success → Check VCS diff → Verify changes → Report actual state
|
|
109
|
+
❌ Trust agent report
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
## Why This Matters
|
|
113
|
+
|
|
114
|
+
From 24 failure memories:
|
|
115
|
+
- your human partner said "I don't believe you" - trust broken
|
|
116
|
+
- Undefined functions shipped - would crash
|
|
117
|
+
- Missing requirements shipped - incomplete features
|
|
118
|
+
- Time wasted on false completion → redirect → rework
|
|
119
|
+
- Violates: "Honesty is a core value. If you lie, you'll be replaced."
|
|
120
|
+
|
|
121
|
+
## When To Apply
|
|
122
|
+
|
|
123
|
+
**ALWAYS before:**
|
|
124
|
+
- ANY variation of success/completion claims
|
|
125
|
+
- ANY expression of satisfaction
|
|
126
|
+
- ANY positive statement about work state
|
|
127
|
+
- Committing, PR creation, task completion
|
|
128
|
+
- Moving to next task
|
|
129
|
+
- Delegating to agents
|
|
130
|
+
|
|
131
|
+
**Rule applies to:**
|
|
132
|
+
- Exact phrases
|
|
133
|
+
- Paraphrases and synonyms
|
|
134
|
+
- Implications of success
|
|
135
|
+
- ANY communication suggesting completion/correctness
|
|
136
|
+
|
|
137
|
+
## The Bottom Line
|
|
138
|
+
|
|
139
|
+
**No shortcuts for verification.**
|
|
140
|
+
|
|
141
|
+
Run the command. Read the output. THEN claim the result.
|
|
142
|
+
|
|
143
|
+
This is non-negotiable.
|