agent-bober 0.12.0 → 0.17.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/.claude-plugin/marketplace.json +20 -0
- package/.claude-plugin/plugin.json +2 -2
- package/CHANGELOG.md +243 -0
- package/README.md +238 -5
- package/agents/bober-architect.md +72 -0
- package/agents/bober-code-reviewer.md +238 -0
- package/agents/bober-curator.md +49 -0
- package/agents/bober-deployer.md +267 -0
- package/agents/bober-diagnoser.md +289 -0
- package/agents/bober-documenter.md +129 -0
- package/agents/bober-evaluator.md +135 -1
- package/agents/bober-generator.md +80 -3
- package/agents/bober-planner.md +47 -1
- 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 +40 -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/memory.d.ts +14 -0
- package/dist/cli/commands/memory.d.ts.map +1 -0
- package/dist/cli/commands/memory.js +132 -0
- package/dist/cli/commands/memory.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 +56 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +41 -3
- 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 +25 -1
- package/dist/config/loader.js.map +1 -1
- package/dist/config/role-providers.d.ts +29 -0
- package/dist/config/role-providers.d.ts.map +1 -0
- package/dist/config/role-providers.js +115 -0
- package/dist/config/role-providers.js.map +1 -0
- package/dist/config/schema.d.ts +1350 -61
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +189 -0
- package/dist/config/schema.js.map +1 -1
- package/dist/contracts/eval-result.d.ts +112 -56
- package/dist/contracts/eval-result.d.ts.map +1 -1
- package/dist/contracts/eval-result.js +3 -0
- package/dist/contracts/eval-result.js.map +1 -1
- package/dist/contracts/sprint-contract.d.ts +30 -30
- package/dist/fleet/aggregator.d.ts +5 -0
- package/dist/fleet/aggregator.d.ts.map +1 -0
- package/dist/fleet/aggregator.js +39 -0
- package/dist/fleet/aggregator.js.map +1 -0
- package/dist/fleet/child-config.d.ts +12 -0
- package/dist/fleet/child-config.d.ts.map +1 -0
- package/dist/fleet/child-config.js +38 -0
- package/dist/fleet/child-config.js.map +1 -0
- package/dist/fleet/coordinator.d.ts +25 -0
- package/dist/fleet/coordinator.d.ts.map +1 -0
- package/dist/fleet/coordinator.js +40 -0
- package/dist/fleet/coordinator.js.map +1 -0
- package/dist/fleet/index.d.ts +40 -0
- package/dist/fleet/index.d.ts.map +1 -0
- package/dist/fleet/index.js +117 -0
- package/dist/fleet/index.js.map +1 -0
- package/dist/fleet/manifest.d.ts +51 -0
- package/dist/fleet/manifest.d.ts.map +1 -0
- package/dist/fleet/manifest.js +32 -0
- package/dist/fleet/manifest.js.map +1 -0
- package/dist/fleet/reporter.d.ts +32 -0
- package/dist/fleet/reporter.d.ts.map +1 -0
- package/dist/fleet/reporter.js +71 -0
- package/dist/fleet/reporter.js.map +1 -0
- package/dist/fleet/runner.d.ts +48 -0
- package/dist/fleet/runner.d.ts.map +1 -0
- package/dist/fleet/runner.js +104 -0
- package/dist/fleet/runner.js.map +1 -0
- package/dist/fleet/scaffolder.d.ts +12 -0
- package/dist/fleet/scaffolder.d.ts.map +1 -0
- package/dist/fleet/scaffolder.js +82 -0
- package/dist/fleet/scaffolder.js.map +1 -0
- package/dist/fleet/types.d.ts +21 -0
- package/dist/fleet/types.d.ts.map +1 -0
- package/dist/fleet/types.js +2 -0
- package/dist/fleet/types.js.map +1 -0
- 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 +53 -0
- package/dist/graph/cli.d.ts.map +1 -0
- package/dist/graph/cli.js +181 -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 +95 -0
- package/dist/graph/pipeline-lifecycle.d.ts.map +1 -0
- package/dist/graph/pipeline-lifecycle.js +341 -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 +130 -0
- package/dist/graph/preflight-injector.d.ts.map +1 -0
- package/dist/graph/preflight-injector.js +618 -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/init.d.ts.map +1 -1
- package/dist/mcp/tools/init.js +2 -0
- package/dist/mcp/tools/init.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 +30 -0
- package/dist/orchestrator/agent-loader.js.map +1 -1
- package/dist/orchestrator/agentic-loop.d.ts +51 -0
- package/dist/orchestrator/agentic-loop.d.ts.map +1 -1
- package/dist/orchestrator/agentic-loop.js +123 -4
- package/dist/orchestrator/agentic-loop.js.map +1 -1
- package/dist/orchestrator/arch-lenses.d.ts +7 -0
- package/dist/orchestrator/arch-lenses.d.ts.map +1 -0
- package/dist/orchestrator/arch-lenses.js +22 -0
- package/dist/orchestrator/arch-lenses.js.map +1 -0
- package/dist/orchestrator/architect-agent.d.ts +16 -0
- package/dist/orchestrator/architect-agent.d.ts.map +1 -1
- package/dist/orchestrator/architect-agent.js +546 -9
- 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 +60 -9
- 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/documenter-agent.d.ts +57 -0
- package/dist/orchestrator/documenter-agent.d.ts.map +1 -0
- package/dist/orchestrator/documenter-agent.js +195 -0
- package/dist/orchestrator/documenter-agent.js.map +1 -0
- package/dist/orchestrator/environment.d.ts +45 -0
- package/dist/orchestrator/environment.d.ts.map +1 -0
- package/dist/orchestrator/environment.js +151 -0
- package/dist/orchestrator/environment.js.map +1 -0
- package/dist/orchestrator/eval-lenses.d.ts +7 -0
- package/dist/orchestrator/eval-lenses.d.ts.map +1 -0
- package/dist/orchestrator/eval-lenses.js +19 -0
- package/dist/orchestrator/eval-lenses.js.map +1 -0
- package/dist/orchestrator/eval-persist.d.ts +25 -0
- package/dist/orchestrator/eval-persist.d.ts.map +1 -0
- package/dist/orchestrator/eval-persist.js +74 -0
- package/dist/orchestrator/eval-persist.js.map +1 -0
- package/dist/orchestrator/evaluator-agent.d.ts +23 -0
- package/dist/orchestrator/evaluator-agent.d.ts.map +1 -1
- package/dist/orchestrator/evaluator-agent.js +80 -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 +53 -8
- package/dist/orchestrator/generator-agent.js.map +1 -1
- package/dist/orchestrator/memory/distill.d.ts +60 -0
- package/dist/orchestrator/memory/distill.d.ts.map +1 -0
- package/dist/orchestrator/memory/distill.js +177 -0
- package/dist/orchestrator/memory/distill.js.map +1 -0
- package/dist/orchestrator/memory/eval-source.d.ts +20 -0
- package/dist/orchestrator/memory/eval-source.d.ts.map +1 -0
- package/dist/orchestrator/memory/eval-source.js +88 -0
- package/dist/orchestrator/memory/eval-source.js.map +1 -0
- package/dist/orchestrator/memory/retrieve.d.ts +45 -0
- package/dist/orchestrator/memory/retrieve.d.ts.map +1 -0
- package/dist/orchestrator/memory/retrieve.js +102 -0
- package/dist/orchestrator/memory/retrieve.js.map +1 -0
- package/dist/orchestrator/model-resolver.d.ts.map +1 -1
- package/dist/orchestrator/model-resolver.js +15 -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 +31 -0
- package/dist/orchestrator/pipeline.d.ts.map +1 -1
- package/dist/orchestrator/pipeline.js +267 -5
- package/dist/orchestrator/pipeline.js.map +1 -1
- package/dist/orchestrator/planner-agent.d.ts +22 -1
- package/dist/orchestrator/planner-agent.d.ts.map +1 -1
- package/dist/orchestrator/planner-agent.js +165 -8
- 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 +48 -11
- package/dist/orchestrator/research-agent.js.map +1 -1
- package/dist/orchestrator/tools/handlers.d.ts +16 -0
- package/dist/orchestrator/tools/handlers.d.ts.map +1 -1
- package/dist/orchestrator/tools/handlers.js +30 -5
- 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/tools/schemas.js +5 -5
- package/dist/orchestrator/tools/schemas.js.map +1 -1
- package/dist/orchestrator/workflow/args-builder.d.ts +35 -0
- package/dist/orchestrator/workflow/args-builder.d.ts.map +1 -0
- package/dist/orchestrator/workflow/args-builder.js +142 -0
- package/dist/orchestrator/workflow/args-builder.js.map +1 -0
- package/dist/orchestrator/workflow/budget.d.ts +57 -0
- package/dist/orchestrator/workflow/budget.d.ts.map +1 -0
- package/dist/orchestrator/workflow/budget.js +80 -0
- package/dist/orchestrator/workflow/budget.js.map +1 -0
- package/dist/orchestrator/workflow/conformance.d.ts +27 -0
- package/dist/orchestrator/workflow/conformance.d.ts.map +1 -0
- package/dist/orchestrator/workflow/conformance.js +111 -0
- package/dist/orchestrator/workflow/conformance.js.map +1 -0
- package/dist/orchestrator/workflow/eligibility.d.ts +8 -0
- package/dist/orchestrator/workflow/eligibility.d.ts.map +1 -0
- package/dist/orchestrator/workflow/eligibility.js +10 -0
- package/dist/orchestrator/workflow/eligibility.js.map +1 -0
- package/dist/orchestrator/workflow/engine.d.ts +10 -0
- package/dist/orchestrator/workflow/engine.d.ts.map +1 -0
- package/dist/orchestrator/workflow/engine.js +2 -0
- package/dist/orchestrator/workflow/engine.js.map +1 -0
- package/dist/orchestrator/workflow/errors.d.ts +13 -0
- package/dist/orchestrator/workflow/errors.d.ts.map +1 -0
- package/dist/orchestrator/workflow/errors.js +26 -0
- package/dist/orchestrator/workflow/errors.js.map +1 -0
- package/dist/orchestrator/workflow/flusher.d.ts +19 -0
- package/dist/orchestrator/workflow/flusher.d.ts.map +1 -0
- package/dist/orchestrator/workflow/flusher.js +81 -0
- package/dist/orchestrator/workflow/flusher.js.map +1 -0
- package/dist/orchestrator/workflow/interpreter.d.ts +48 -0
- package/dist/orchestrator/workflow/interpreter.d.ts.map +1 -0
- package/dist/orchestrator/workflow/interpreter.js +92 -0
- package/dist/orchestrator/workflow/interpreter.js.map +1 -0
- package/dist/orchestrator/workflow/pure-sprint.d.ts +65 -0
- package/dist/orchestrator/workflow/pure-sprint.d.ts.map +1 -0
- package/dist/orchestrator/workflow/pure-sprint.js +82 -0
- package/dist/orchestrator/workflow/pure-sprint.js.map +1 -0
- package/dist/orchestrator/workflow/reconciler.d.ts +15 -0
- package/dist/orchestrator/workflow/reconciler.d.ts.map +1 -0
- package/dist/orchestrator/workflow/reconciler.js +65 -0
- package/dist/orchestrator/workflow/reconciler.js.map +1 -0
- package/dist/orchestrator/workflow/resume-cursor.d.ts +10 -0
- package/dist/orchestrator/workflow/resume-cursor.d.ts.map +1 -0
- package/dist/orchestrator/workflow/resume-cursor.js +25 -0
- package/dist/orchestrator/workflow/resume-cursor.js.map +1 -0
- package/dist/orchestrator/workflow/retry.d.ts +50 -0
- package/dist/orchestrator/workflow/retry.d.ts.map +1 -0
- package/dist/orchestrator/workflow/retry.js +100 -0
- package/dist/orchestrator/workflow/retry.js.map +1 -0
- package/dist/orchestrator/workflow/scheduler.d.ts +87 -0
- package/dist/orchestrator/workflow/scheduler.d.ts.map +1 -0
- package/dist/orchestrator/workflow/scheduler.js +158 -0
- package/dist/orchestrator/workflow/scheduler.js.map +1 -0
- package/dist/orchestrator/workflow/selector.d.ts +26 -0
- package/dist/orchestrator/workflow/selector.d.ts.map +1 -0
- package/dist/orchestrator/workflow/selector.js +54 -0
- package/dist/orchestrator/workflow/selector.js.map +1 -0
- package/dist/orchestrator/workflow/synthesizer.d.ts +52 -0
- package/dist/orchestrator/workflow/synthesizer.d.ts.map +1 -0
- package/dist/orchestrator/workflow/synthesizer.js +75 -0
- package/dist/orchestrator/workflow/synthesizer.js.map +1 -0
- package/dist/orchestrator/workflow/ts-engine.d.ts +13 -0
- package/dist/orchestrator/workflow/ts-engine.d.ts.map +1 -0
- package/dist/orchestrator/workflow/ts-engine.js +14 -0
- package/dist/orchestrator/workflow/ts-engine.js.map +1 -0
- package/dist/orchestrator/workflow/types.d.ts +55 -0
- package/dist/orchestrator/workflow/types.d.ts.map +1 -0
- package/dist/orchestrator/workflow/types.js +3 -0
- package/dist/orchestrator/workflow/types.js.map +1 -0
- package/dist/orchestrator/workflow/workflow-engine.d.ts +31 -0
- package/dist/orchestrator/workflow/workflow-engine.d.ts.map +1 -0
- package/dist/orchestrator/workflow/workflow-engine.js +70 -0
- package/dist/orchestrator/workflow/workflow-engine.js.map +1 -0
- 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 +135 -11
- package/dist/providers/anthropic.js.map +1 -1
- package/dist/providers/claude-code.d.ts +44 -0
- package/dist/providers/claude-code.d.ts.map +1 -0
- package/dist/providers/claude-code.js +143 -0
- package/dist/providers/claude-code.js.map +1 -0
- package/dist/providers/factory.d.ts +16 -2
- package/dist/providers/factory.d.ts.map +1 -1
- package/dist/providers/factory.js +101 -14
- package/dist/providers/factory.js.map +1 -1
- package/dist/providers/google.d.ts.map +1 -1
- package/dist/providers/google.js +32 -3
- package/dist/providers/google.js.map +1 -1
- package/dist/providers/index.d.ts +4 -2
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +3 -1
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/openai.d.ts.map +1 -1
- package/dist/providers/openai.js +28 -3
- package/dist/providers/openai.js.map +1 -1
- package/dist/providers/preflight.d.ts +22 -0
- package/dist/providers/preflight.d.ts.map +1 -0
- package/dist/providers/preflight.js +54 -0
- package/dist/providers/preflight.js.map +1 -0
- package/dist/providers/structured.d.ts +130 -0
- package/dist/providers/structured.d.ts.map +1 -0
- package/dist/providers/structured.js +205 -0
- package/dist/providers/structured.js.map +1 -0
- package/dist/providers/types.d.ts +53 -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-rotation.d.ts +17 -0
- package/dist/state/history-rotation.d.ts.map +1 -0
- package/dist/state/history-rotation.js +84 -0
- package/dist/state/history-rotation.js.map +1 -0
- package/dist/state/history.d.ts +16 -4
- package/dist/state/history.d.ts.map +1 -1
- package/dist/state/history.js +62 -20
- package/dist/state/history.js.map +1 -1
- package/dist/state/index.d.ts +4 -1
- package/dist/state/index.d.ts.map +1 -1
- package/dist/state/index.js +5 -2
- package/dist/state/index.js.map +1 -1
- package/dist/state/memory.d.ts +60 -0
- package/dist/state/memory.d.ts.map +1 -0
- package/dist/state/memory.js +242 -0
- package/dist/state/memory.js.map +1 -0
- 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 +27 -1
- package/hooks/session-start +42 -0
- package/package.json +13 -6
- 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/spike-claude-code-provider.mjs +66 -0
- package/scripts/spike-deepseek.mjs +63 -0
- package/scripts/sync-skills.mjs +4 -1
- package/scripts/sync-targets.json +12 -0
- package/scripts/update-all.mjs +255 -0
- package/skills/bober.architect/SKILL.md +13 -0
- package/skills/bober.architect/references/arch-lens-panel.md +126 -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.eval/SKILL.md +9 -0
- package/skills/bober.eval/references/lens-panel.md +115 -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 +16 -0
- package/skills/bober.postmortem/SKILL.md +231 -0
- package/skills/bober.run/SKILL.md +23 -4
- package/skills/bober.run/references/lens-panel.md +115 -0
- package/skills/bober.runbook/SKILL.md +335 -0
- package/skills/bober.sprint/SKILL.md +44 -2
- package/skills/bober.sprint/references/lens-panel.md +115 -0
- package/skills/bober.using-bober/SKILL.md +133 -0
- package/skills/bober.verify/SKILL.md +143 -0
- package/skills/shared/arch-lens-panel.md +126 -0
- package/skills/shared/lens-panel.md +115 -0
|
@@ -0,0 +1,452 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Incident timeline append helpers (Sprint 19).
|
|
3
|
+
*
|
|
4
|
+
* Every helper that writes a domain artifact (observations.jsonl,
|
|
5
|
+
* actions.jsonl, changelog.jsonl, runbook-execution.jsonl) ALSO appends
|
|
6
|
+
* a corresponding event to timeline.jsonl in the same mutex tick. This
|
|
7
|
+
* makes "show me what happened in chronological order" a single file read.
|
|
8
|
+
*
|
|
9
|
+
* Append atomicity: fs.open with O_WRONLY|O_APPEND|O_CREAT plus explicit
|
|
10
|
+
* fh.chmod(0o600) after open — mirrors the audit.ts pattern from Sprint 13.
|
|
11
|
+
* fs.appendFile is NOT used because it does not reliably honor the mode
|
|
12
|
+
* argument across all Node versions (see audit.ts header comment).
|
|
13
|
+
*
|
|
14
|
+
* POSIX O_APPEND atomicity: single-line records are well under PIPE_BUF
|
|
15
|
+
* (4096 bytes), so cross-process appends are safe in practice.
|
|
16
|
+
*
|
|
17
|
+
* Concurrent appends to the same incident are serialized via a per-incidentId
|
|
18
|
+
* Promise-chain mutex. Unrelated incidents proceed in parallel.
|
|
19
|
+
*
|
|
20
|
+
* setIncidentStatus uses atomic temp-file + rename to avoid a torn write
|
|
21
|
+
* if the process crashes mid-update.
|
|
22
|
+
*
|
|
23
|
+
* Sprint 19 — src/incident/timeline.ts
|
|
24
|
+
*/
|
|
25
|
+
import { open, mkdir, writeFile, readdir, readFile, rename } from "node:fs/promises";
|
|
26
|
+
import { constants } from "node:fs";
|
|
27
|
+
import { join } from "node:path";
|
|
28
|
+
import { emit } from "../telemetry/emit.js";
|
|
29
|
+
import { IncidentMetadataSchema, TimelineEventSchema, ObservationEntrySchema, ActionEntrySchema, ChangeEntrySchema, RunbookExecutionEntrySchema, } from "./types.js";
|
|
30
|
+
import { logger } from "../utils/logger.js";
|
|
31
|
+
// ── Per-incidentId mutex (Promise-chain pattern) ──────────────────────────────
|
|
32
|
+
// One chain per incidentId so unrelated incidents proceed in parallel.
|
|
33
|
+
// Mirrors the per-runId mutex in src/orchestrator/checkpoints/audit.ts.
|
|
34
|
+
const writeChains = new Map();
|
|
35
|
+
// ── Internal: append one JSON line ────────────────────────────────────────────
|
|
36
|
+
/**
|
|
37
|
+
* Append a single newline-terminated JSON line to `filePath`.
|
|
38
|
+
*
|
|
39
|
+
* The directory is created if absent. Mode 0600 is guaranteed via an
|
|
40
|
+
* explicit fh.chmod() call after open — the umask may reduce the mode
|
|
41
|
+
* set by the open() call itself.
|
|
42
|
+
*/
|
|
43
|
+
async function appendOneLine(filePath, record) {
|
|
44
|
+
const dir = join(filePath, "..");
|
|
45
|
+
await mkdir(dir, { recursive: true });
|
|
46
|
+
const line = JSON.stringify(record) + "\n";
|
|
47
|
+
const flags = constants.O_WRONLY | constants.O_APPEND | constants.O_CREAT;
|
|
48
|
+
const fh = await open(filePath, flags, 0o600);
|
|
49
|
+
try {
|
|
50
|
+
// Guarantee mode 0600 even if umask would have reduced it.
|
|
51
|
+
await fh.chmod(0o600);
|
|
52
|
+
await fh.write(line);
|
|
53
|
+
}
|
|
54
|
+
finally {
|
|
55
|
+
await fh.close();
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
// ── Internal: atomic JSON rewrite via temp + rename ───────────────────────────
|
|
59
|
+
async function atomicWriteJson(filePath, data) {
|
|
60
|
+
const tmp = `${filePath}.${process.pid}.${Date.now()}.tmp`;
|
|
61
|
+
await writeFile(tmp, JSON.stringify(data, null, 2) + "\n", {
|
|
62
|
+
encoding: "utf-8",
|
|
63
|
+
mode: 0o600,
|
|
64
|
+
});
|
|
65
|
+
await rename(tmp, filePath);
|
|
66
|
+
}
|
|
67
|
+
// ── Internal: incident directory path ─────────────────────────────────────────
|
|
68
|
+
function incidentDir(projectRoot, incidentId) {
|
|
69
|
+
return join(projectRoot, ".bober", "incidents", incidentId);
|
|
70
|
+
}
|
|
71
|
+
// ── deriveSlug ─────────────────────────────────────────────────────────────────
|
|
72
|
+
/**
|
|
73
|
+
* Derive a short kebab-case slug from a symptom string.
|
|
74
|
+
*
|
|
75
|
+
* Rules:
|
|
76
|
+
* 1. Lowercase the input.
|
|
77
|
+
* 2. Split on whitespace; take the first 3 non-empty tokens.
|
|
78
|
+
* 3. For each token, strip all characters outside [a-z0-9] (unicode is stripped).
|
|
79
|
+
* 4. Join surviving tokens with '-'.
|
|
80
|
+
* 5. Strip leading/trailing hyphens.
|
|
81
|
+
* 6. Truncate to 30 characters (hard limit).
|
|
82
|
+
* 7. If the result is empty (empty input / all-punctuation / unicode-only), return 'untitled'.
|
|
83
|
+
*
|
|
84
|
+
* Exported for unit testing.
|
|
85
|
+
*/
|
|
86
|
+
export function deriveSlug(symptom) {
|
|
87
|
+
const tokens = symptom
|
|
88
|
+
.toLowerCase()
|
|
89
|
+
.split(/\s+/)
|
|
90
|
+
.filter((t) => t.length > 0)
|
|
91
|
+
.slice(0, 3)
|
|
92
|
+
.map((t) => t.replace(/[^a-z0-9]/g, ""))
|
|
93
|
+
.filter((t) => t.length > 0);
|
|
94
|
+
const slug = tokens.join("-").replace(/^-+|-+$/g, "").slice(0, 30);
|
|
95
|
+
return slug.length > 0 ? slug : "untitled";
|
|
96
|
+
}
|
|
97
|
+
// ── createIncident ─────────────────────────────────────────────────────────────
|
|
98
|
+
/**
|
|
99
|
+
* Create a new incident artifact directory with all required files.
|
|
100
|
+
*
|
|
101
|
+
* Layout created:
|
|
102
|
+
* ```
|
|
103
|
+
* .bober/incidents/<incidentId>/
|
|
104
|
+
* incident.json — metadata (JSON)
|
|
105
|
+
* timeline.jsonl — chronological master event log (JSONL, empty)
|
|
106
|
+
* observations.jsonl — verified facts (JSONL, empty)
|
|
107
|
+
* actions.jsonl — actions taken/proposed (JSONL, empty)
|
|
108
|
+
* changelog.jsonl — deploys/config changes (JSONL, empty)
|
|
109
|
+
* runbook-execution.jsonl — runbook step results (JSONL, empty)
|
|
110
|
+
* hypotheses.md — current hypotheses (Markdown, empty)
|
|
111
|
+
* diagnoses/ — diagnosis JSON files from bober-diagnoser
|
|
112
|
+
* ```
|
|
113
|
+
*
|
|
114
|
+
* @param symptom Human-readable description of the incident trigger.
|
|
115
|
+
* @param projectRoot Absolute path to the project root (caller resolves this).
|
|
116
|
+
* @returns The new incident ID, e.g. 'inc-20260524-500-errors-on'.
|
|
117
|
+
*/
|
|
118
|
+
export async function createIncident(symptom, projectRoot) {
|
|
119
|
+
const date = new Date().toISOString().slice(0, 10).replace(/-/g, "");
|
|
120
|
+
const slug = deriveSlug(symptom);
|
|
121
|
+
const incidentId = `inc-${date}-${slug}`;
|
|
122
|
+
const dir = incidentDir(projectRoot, incidentId);
|
|
123
|
+
await mkdir(dir, { recursive: true });
|
|
124
|
+
await mkdir(join(dir, "diagnoses"), { recursive: true });
|
|
125
|
+
// Initialize empty JSONL files with mode 0600.
|
|
126
|
+
const jsonlFiles = [
|
|
127
|
+
"timeline.jsonl",
|
|
128
|
+
"observations.jsonl",
|
|
129
|
+
"actions.jsonl",
|
|
130
|
+
"changelog.jsonl",
|
|
131
|
+
"runbook-execution.jsonl",
|
|
132
|
+
];
|
|
133
|
+
for (const fname of jsonlFiles) {
|
|
134
|
+
const fpath = join(dir, fname);
|
|
135
|
+
const flags = constants.O_WRONLY | constants.O_CREAT;
|
|
136
|
+
const fh = await open(fpath, flags, 0o600);
|
|
137
|
+
await fh.chmod(0o600);
|
|
138
|
+
await fh.close();
|
|
139
|
+
}
|
|
140
|
+
// Initialize empty hypotheses.md with mode 0600.
|
|
141
|
+
await writeFile(join(dir, "hypotheses.md"), "", { encoding: "utf-8", mode: 0o600 });
|
|
142
|
+
// Write incident.json atomically.
|
|
143
|
+
const now = new Date().toISOString();
|
|
144
|
+
const metadata = {
|
|
145
|
+
incidentId,
|
|
146
|
+
symptom,
|
|
147
|
+
createdAt: now,
|
|
148
|
+
status: "investigating",
|
|
149
|
+
};
|
|
150
|
+
await atomicWriteJson(join(dir, "incident.json"), metadata);
|
|
151
|
+
// Emit initial timeline event.
|
|
152
|
+
const event = {
|
|
153
|
+
timestamp: now,
|
|
154
|
+
eventKind: "incident_created",
|
|
155
|
+
source: "system",
|
|
156
|
+
summary: `Incident created: ${symptom}`,
|
|
157
|
+
refPath: `.bober/incidents/${incidentId}/incident.json`,
|
|
158
|
+
};
|
|
159
|
+
await appendTimeline(projectRoot, incidentId, event);
|
|
160
|
+
return incidentId;
|
|
161
|
+
}
|
|
162
|
+
// ── appendTimeline ─────────────────────────────────────────────────────────────
|
|
163
|
+
/**
|
|
164
|
+
* Append a TimelineEvent to timeline.jsonl.
|
|
165
|
+
*
|
|
166
|
+
* This is the only append helper that writes ONLY to timeline.jsonl.
|
|
167
|
+
* All other append helpers call this implicitly via the double-write pattern.
|
|
168
|
+
*/
|
|
169
|
+
export async function appendTimeline(projectRoot, incidentId, event) {
|
|
170
|
+
TimelineEventSchema.parse(event);
|
|
171
|
+
const dir = incidentDir(projectRoot, incidentId);
|
|
172
|
+
const timelinePath = join(dir, "timeline.jsonl");
|
|
173
|
+
const prev = writeChains.get(incidentId) ?? Promise.resolve();
|
|
174
|
+
const next = prev.then(() => appendOneLine(timelinePath, event));
|
|
175
|
+
writeChains.set(incidentId, next.catch(() => { }));
|
|
176
|
+
return next;
|
|
177
|
+
}
|
|
178
|
+
// ── appendObservation ──────────────────────────────────────────────────────────
|
|
179
|
+
/**
|
|
180
|
+
* Append an ObservationEntry to observations.jsonl AND emit a timeline event.
|
|
181
|
+
*
|
|
182
|
+
* Both writes happen inside the same mutex tick so they are ordered
|
|
183
|
+
* deterministically relative to other concurrent appends on this incident.
|
|
184
|
+
*/
|
|
185
|
+
export async function appendObservation(projectRoot, incidentId, entry) {
|
|
186
|
+
ObservationEntrySchema.parse(entry);
|
|
187
|
+
const dir = incidentDir(projectRoot, incidentId);
|
|
188
|
+
const obsPath = join(dir, "observations.jsonl");
|
|
189
|
+
const timelinePath = join(dir, "timeline.jsonl");
|
|
190
|
+
const timelineEvent = {
|
|
191
|
+
timestamp: entry.timestamp,
|
|
192
|
+
eventKind: "observation_recorded",
|
|
193
|
+
source: "diagnoser",
|
|
194
|
+
summary: entry.observation.slice(0, 200),
|
|
195
|
+
refPath: `.bober/incidents/${incidentId}/observations.jsonl`,
|
|
196
|
+
};
|
|
197
|
+
const prev = writeChains.get(incidentId) ?? Promise.resolve();
|
|
198
|
+
const next = prev.then(async () => {
|
|
199
|
+
await appendOneLine(obsPath, entry);
|
|
200
|
+
await appendOneLine(timelinePath, timelineEvent);
|
|
201
|
+
});
|
|
202
|
+
writeChains.set(incidentId, next.catch(() => { }));
|
|
203
|
+
return next;
|
|
204
|
+
}
|
|
205
|
+
// ── appendAction ───────────────────────────────────────────────────────────────
|
|
206
|
+
/**
|
|
207
|
+
* Append an ActionEntry to actions.jsonl AND emit a timeline event.
|
|
208
|
+
*/
|
|
209
|
+
export async function appendAction(projectRoot, incidentId, entry) {
|
|
210
|
+
ActionEntrySchema.parse(entry);
|
|
211
|
+
const dir = incidentDir(projectRoot, incidentId);
|
|
212
|
+
const actionsPath = join(dir, "actions.jsonl");
|
|
213
|
+
const timelinePath = join(dir, "timeline.jsonl");
|
|
214
|
+
const timelineEvent = {
|
|
215
|
+
timestamp: entry.timestamp,
|
|
216
|
+
eventKind: "action_taken",
|
|
217
|
+
source: "human",
|
|
218
|
+
summary: entry.action.slice(0, 200),
|
|
219
|
+
refPath: `.bober/incidents/${incidentId}/actions.jsonl`,
|
|
220
|
+
};
|
|
221
|
+
const prev = writeChains.get(incidentId) ?? Promise.resolve();
|
|
222
|
+
const next = prev.then(async () => {
|
|
223
|
+
await appendOneLine(actionsPath, entry);
|
|
224
|
+
await appendOneLine(timelinePath, timelineEvent);
|
|
225
|
+
});
|
|
226
|
+
writeChains.set(incidentId, next.catch(() => { }));
|
|
227
|
+
return next;
|
|
228
|
+
}
|
|
229
|
+
// ── appendChange ───────────────────────────────────────────────────────────────
|
|
230
|
+
/**
|
|
231
|
+
* Append a ChangeEntry to changelog.jsonl AND emit a timeline event.
|
|
232
|
+
*
|
|
233
|
+
* Throws a ZodError if `entry.inverse` is missing — the field is REQUIRED
|
|
234
|
+
* at the schema level so Sprint 21 rollback awareness can always find an
|
|
235
|
+
* inverse for every executed change.
|
|
236
|
+
*
|
|
237
|
+
* The zod validation runs BEFORE the mutex is entered so no file is
|
|
238
|
+
* touched if validation fails.
|
|
239
|
+
*/
|
|
240
|
+
export async function appendChange(projectRoot, incidentId, entry) {
|
|
241
|
+
// Validate BEFORE entering the mutex — throws ZodError if inverse is missing.
|
|
242
|
+
ChangeEntrySchema.parse(entry);
|
|
243
|
+
const dir = incidentDir(projectRoot, incidentId);
|
|
244
|
+
const changelogPath = join(dir, "changelog.jsonl");
|
|
245
|
+
const timelinePath = join(dir, "timeline.jsonl");
|
|
246
|
+
const timelineEvent = {
|
|
247
|
+
timestamp: entry.executedAt,
|
|
248
|
+
eventKind: "change_recorded",
|
|
249
|
+
source: "deployer",
|
|
250
|
+
summary: entry.description.slice(0, 200),
|
|
251
|
+
refPath: `.bober/incidents/${incidentId}/changelog.jsonl`,
|
|
252
|
+
};
|
|
253
|
+
const prev = writeChains.get(incidentId) ?? Promise.resolve();
|
|
254
|
+
const next = prev.then(async () => {
|
|
255
|
+
await appendOneLine(changelogPath, entry);
|
|
256
|
+
await appendOneLine(timelinePath, timelineEvent);
|
|
257
|
+
});
|
|
258
|
+
writeChains.set(incidentId, next.catch(() => { }));
|
|
259
|
+
return next;
|
|
260
|
+
}
|
|
261
|
+
// ── appendRunbookExecution ─────────────────────────────────────────────────────
|
|
262
|
+
/**
|
|
263
|
+
* Append a RunbookExecutionEntry to runbook-execution.jsonl AND emit a
|
|
264
|
+
* timeline event.
|
|
265
|
+
*/
|
|
266
|
+
export async function appendRunbookExecution(projectRoot, incidentId, entry) {
|
|
267
|
+
RunbookExecutionEntrySchema.parse(entry);
|
|
268
|
+
const dir = incidentDir(projectRoot, incidentId);
|
|
269
|
+
const runbookPath = join(dir, "runbook-execution.jsonl");
|
|
270
|
+
const timelinePath = join(dir, "timeline.jsonl");
|
|
271
|
+
const timelineEvent = {
|
|
272
|
+
timestamp: entry.timestamp,
|
|
273
|
+
eventKind: "runbook_step_executed",
|
|
274
|
+
source: "system",
|
|
275
|
+
summary: `${entry.runbookName} step ${entry.stepNumber}: ${entry.status}`,
|
|
276
|
+
refPath: `.bober/incidents/${incidentId}/runbook-execution.jsonl`,
|
|
277
|
+
};
|
|
278
|
+
const prev = writeChains.get(incidentId) ?? Promise.resolve();
|
|
279
|
+
const next = prev.then(async () => {
|
|
280
|
+
await appendOneLine(runbookPath, entry);
|
|
281
|
+
await appendOneLine(timelinePath, timelineEvent);
|
|
282
|
+
});
|
|
283
|
+
writeChains.set(incidentId, next.catch(() => { }));
|
|
284
|
+
return next;
|
|
285
|
+
}
|
|
286
|
+
// ── setIncidentStatus ──────────────────────────────────────────────────────────
|
|
287
|
+
/** Override token regex: prefix 'SKIP_METRIC_VERIFY:' with at least one non-whitespace char after optional spaces. */
|
|
288
|
+
const OVERRIDE_TOKEN_RE = /^SKIP_METRIC_VERIFY:\s*(.+)$/;
|
|
289
|
+
/**
|
|
290
|
+
* Update the status field in incident.json atomically.
|
|
291
|
+
*
|
|
292
|
+
* If status is 'resolved', sets resolvedAt to now (ISO-8601) automatically.
|
|
293
|
+
* Any additional fields in `extras` are merged in.
|
|
294
|
+
*
|
|
295
|
+
* Sprint 22 resolution gate: when transitioning to 'resolved', one of the
|
|
296
|
+
* following MUST be provided via opts:
|
|
297
|
+
* 1. opts.verifyResult with verified=true — metric verification passed.
|
|
298
|
+
* 2. opts.overrideToken matching 'SKIP_METRIC_VERIFY: <reason>' with a
|
|
299
|
+
* non-empty, non-whitespace reason — operator override with audit trail.
|
|
300
|
+
* Any other call to setIncidentStatus(id, 'resolved') will THROW.
|
|
301
|
+
*
|
|
302
|
+
* Uses temp-file + POSIX rename for crash safety.
|
|
303
|
+
*/
|
|
304
|
+
export async function setIncidentStatus(projectRoot, incidentId, status, extras, opts) {
|
|
305
|
+
const dir = incidentDir(projectRoot, incidentId);
|
|
306
|
+
const metaPath = join(dir, "incident.json");
|
|
307
|
+
const raw = await readFile(metaPath, "utf-8");
|
|
308
|
+
const existing = IncidentMetadataSchema.parse(JSON.parse(raw));
|
|
309
|
+
// ── Resolution gate (s22-c3, s22-c4) ──────────────────────────────────────
|
|
310
|
+
let resolutionEvidence;
|
|
311
|
+
let timelineEvent;
|
|
312
|
+
const now = new Date().toISOString();
|
|
313
|
+
if (status === "resolved") {
|
|
314
|
+
const verified = opts?.verifyResult?.verified === true;
|
|
315
|
+
const overrideMatch = opts?.overrideToken
|
|
316
|
+
? OVERRIDE_TOKEN_RE.exec(opts.overrideToken)
|
|
317
|
+
: null;
|
|
318
|
+
// Trim the override reason and require non-empty after trim.
|
|
319
|
+
const overrideReason = overrideMatch?.[1]?.trim();
|
|
320
|
+
if (verified && opts?.verifyResult) {
|
|
321
|
+
resolutionEvidence = {
|
|
322
|
+
verified: true,
|
|
323
|
+
observedValue: opts.verifyResult.observedValue,
|
|
324
|
+
sampledAt: opts.verifyResult.sampledAt,
|
|
325
|
+
evidencePath: opts.verifyResult.evidencePath,
|
|
326
|
+
reason: opts.verifyResult.reason,
|
|
327
|
+
hint: opts.verifyResult.hint,
|
|
328
|
+
};
|
|
329
|
+
timelineEvent = {
|
|
330
|
+
timestamp: now,
|
|
331
|
+
eventKind: "incident_resolved",
|
|
332
|
+
source: "system",
|
|
333
|
+
summary: `Resolved: metric verified (observedValue=${opts.verifyResult.observedValue ?? "n/a"})`,
|
|
334
|
+
refPath: opts.verifyResult.evidencePath,
|
|
335
|
+
};
|
|
336
|
+
}
|
|
337
|
+
else if (overrideReason && overrideReason.length > 0) {
|
|
338
|
+
resolutionEvidence = {
|
|
339
|
+
verified: false,
|
|
340
|
+
override: { reason: overrideReason, at: now },
|
|
341
|
+
};
|
|
342
|
+
timelineEvent = {
|
|
343
|
+
timestamp: now,
|
|
344
|
+
eventKind: "incident_resolved_override",
|
|
345
|
+
source: "human",
|
|
346
|
+
summary: `Resolved via override: ${overrideReason}`,
|
|
347
|
+
};
|
|
348
|
+
}
|
|
349
|
+
else {
|
|
350
|
+
throw new Error(`setIncidentStatus to 'resolved' requires opts.verifyResult.verified=true ` +
|
|
351
|
+
`OR opts.overrideToken='SKIP_METRIC_VERIFY: <reason>' with a non-empty reason. ` +
|
|
352
|
+
`Got: verifyResult.verified=${opts?.verifyResult?.verified ?? "<missing>"}, ` +
|
|
353
|
+
`overrideToken=${opts?.overrideToken !== undefined ? `'${opts.overrideToken}'` : "<missing>"}.`);
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
const updated = {
|
|
357
|
+
...existing,
|
|
358
|
+
...extras,
|
|
359
|
+
status,
|
|
360
|
+
...(status === "resolved" && !existing.resolvedAt ? { resolvedAt: now } : {}),
|
|
361
|
+
...(resolutionEvidence !== undefined ? { resolutionEvidence } : {}),
|
|
362
|
+
};
|
|
363
|
+
await atomicWriteJson(metaPath, updated);
|
|
364
|
+
if (timelineEvent !== undefined) {
|
|
365
|
+
await appendTimeline(projectRoot, incidentId, timelineEvent);
|
|
366
|
+
}
|
|
367
|
+
// ── Sprint 28: telemetry emit for incident-resolved (fire-and-forget) ────────
|
|
368
|
+
// Only when opts.config is provided (callers without config skip telemetry).
|
|
369
|
+
if (status === "resolved" && opts?.config && opts.telemetryProjectRoot) {
|
|
370
|
+
const durationMs = existing.createdAt
|
|
371
|
+
? Date.now() - new Date(existing.createdAt).getTime()
|
|
372
|
+
: undefined;
|
|
373
|
+
void emit(opts.telemetryProjectRoot, opts.config, "incident-resolved", {
|
|
374
|
+
incidentId,
|
|
375
|
+
durationMs,
|
|
376
|
+
});
|
|
377
|
+
}
|
|
378
|
+
// ── Sprint 23: async postmortem trigger (fire-and-forget) ─────────────────
|
|
379
|
+
// Default ON when status='resolved' — explicit autoPostmortem=false disables.
|
|
380
|
+
// Do NOT await: status transition returns immediately. Postmortem completion
|
|
381
|
+
// updates incident.json.postmortemPath in a follow-up atomic write.
|
|
382
|
+
if (status === "resolved" && opts?.autoPostmortem !== false) {
|
|
383
|
+
// Dynamic import avoids a static load-order coupling between timeline.ts
|
|
384
|
+
// and postmortem.ts — postmortem.ts is a leaf module with no deps on
|
|
385
|
+
// timeline.ts, but the dynamic import keeps the boundary clean.
|
|
386
|
+
const p = (async () => {
|
|
387
|
+
try {
|
|
388
|
+
const { generatePostmortem } = await import("./postmortem.js");
|
|
389
|
+
const result = await generatePostmortem(projectRoot, incidentId);
|
|
390
|
+
// After synthesis: update incident.json.postmortemPath in a NEW
|
|
391
|
+
// atomic write. Re-read fresh to avoid stomping concurrent changes.
|
|
392
|
+
const freshRaw = await readFile(metaPath, "utf-8");
|
|
393
|
+
const fresh = IncidentMetadataSchema.parse(JSON.parse(freshRaw));
|
|
394
|
+
await atomicWriteJson(metaPath, { ...fresh, postmortemPath: result.path });
|
|
395
|
+
}
|
|
396
|
+
catch (err) {
|
|
397
|
+
logger.warn(`[setIncidentStatus] Auto-postmortem failed for ${incidentId}: ${err instanceof Error ? err.message : String(err)}`);
|
|
398
|
+
}
|
|
399
|
+
})();
|
|
400
|
+
if (opts?.onPostmortemPromise)
|
|
401
|
+
opts.onPostmortemPromise(p);
|
|
402
|
+
void p;
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
// ── listIncidents ──────────────────────────────────────────────────────────────
|
|
406
|
+
/**
|
|
407
|
+
* List all incidents in .bober/incidents/, sorted by createdAt descending.
|
|
408
|
+
*
|
|
409
|
+
* Gracefully handles:
|
|
410
|
+
* - Missing .bober/incidents/ directory → returns [].
|
|
411
|
+
* - Malformed incident.json → logged via logger.warn, skipped.
|
|
412
|
+
*
|
|
413
|
+
* ENOENT on readdir is caught and returns []. Any other readdir error is
|
|
414
|
+
* re-thrown (do NOT silence unexpected failures).
|
|
415
|
+
*/
|
|
416
|
+
export async function listIncidents(projectRoot) {
|
|
417
|
+
const incidentsDir = join(projectRoot, ".bober", "incidents");
|
|
418
|
+
let entries;
|
|
419
|
+
try {
|
|
420
|
+
entries = await readdir(incidentsDir);
|
|
421
|
+
}
|
|
422
|
+
catch (err) {
|
|
423
|
+
if (typeof err === "object" &&
|
|
424
|
+
err !== null &&
|
|
425
|
+
err.code === "ENOENT") {
|
|
426
|
+
return [];
|
|
427
|
+
}
|
|
428
|
+
throw err;
|
|
429
|
+
}
|
|
430
|
+
const summaries = [];
|
|
431
|
+
for (const entry of entries) {
|
|
432
|
+
const metaPath = join(incidentsDir, entry, "incident.json");
|
|
433
|
+
try {
|
|
434
|
+
const raw = await readFile(metaPath, "utf-8");
|
|
435
|
+
const meta = IncidentMetadataSchema.parse(JSON.parse(raw));
|
|
436
|
+
summaries.push({
|
|
437
|
+
incidentId: meta.incidentId,
|
|
438
|
+
symptom: meta.symptom,
|
|
439
|
+
createdAt: meta.createdAt,
|
|
440
|
+
status: meta.status,
|
|
441
|
+
...(meta.resolvedAt !== undefined ? { resolvedAt: meta.resolvedAt } : {}),
|
|
442
|
+
});
|
|
443
|
+
}
|
|
444
|
+
catch (err) {
|
|
445
|
+
logger.warn(`[listIncidents] Skipping malformed incident.json at ${metaPath}: ${err instanceof Error ? err.message : String(err)}`);
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
// Sort descending by createdAt (ISO strings compare lexicographically).
|
|
449
|
+
summaries.sort((a, b) => (a.createdAt < b.createdAt ? 1 : a.createdAt > b.createdAt ? -1 : 0));
|
|
450
|
+
return summaries;
|
|
451
|
+
}
|
|
452
|
+
//# sourceMappingURL=timeline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeline.js","sourceRoot":"","sources":["../../src/incident/timeline.ts"],"names":[],"mappings":"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"}
|