@openrig/cli 0.5.4 → 0.5.5
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/daemon/assets/guidance/openrig-start.md +7 -0
- package/daemon/assets/onboarding/01-world-and-purpose.md +52 -0
- package/daemon/assets/onboarding/02-self-and-competent-action.md +57 -0
- package/daemon/assets/plugins/openrig-core/README.md +5 -2
- package/daemon/assets/plugins/openrig-core/hooks/claude.json +3 -12
- package/daemon/assets/plugins/openrig-core/hooks/codex.json +5 -12
- package/daemon/assets/plugins/openrig-core/hooks/scripts/refocus.cjs +194 -124
- package/daemon/assets/plugins/openrig-core/skills/mission-slice-sop/SKILL.md +18 -23
- package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/CHANGELOG.md +92 -0
- package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/REVISION-GUIDE.md +34 -0
- package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/ROADMAP.md +23 -0
- package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/ROLLOUT.md +234 -0
- package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/SKILL.md +404 -0
- package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/scripts/compose.py +653 -0
- package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/scripts/scaffold.sh +34 -0
- package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/scripts/trace-due.sh +32 -0
- package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/scripts/trace-stamp.sh +5 -0
- package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/scripts/trunk-diff.sh +18 -0
- package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/templates/LEARNED.md +40 -0
- package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/templates/NOTES.md +9 -0
- package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/templates/PLAYBOOK.md +5 -0
- package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/templates/SOP.md +24 -0
- package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/templates/SPEC.md +54 -0
- package/daemon/assets/plugins/openrig-core/skills/openrig-skills/SKILL.md +2 -0
- package/daemon/assets/plugins/openrig-core/skills/refocusing/SKILL.md +31 -0
- package/daemon/assets/plugins/openrig-core/skills/refocusing/references/refocus.md +22 -0
- package/daemon/assets/plugins/openrig-core/skills/refocusing/scripts/trace-to-root.py +221 -0
- package/daemon/assets/plugins/openrig-core/skills/retiring-and-inheriting-a-seat/SKILL.md +3 -3
- package/daemon/context-packs/onboarding-width/manifest.yaml +11 -0
- package/daemon/context-packs/{world/install/reference-material.md → onboarding-width/public-reference-material.md} +4 -26
- package/daemon/context-packs/{world/install/what-you-can-do.md → onboarding-width/public-what-you-can-do.md} +13 -9
- package/daemon/context-packs/skills/core/agent-starters/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/agent-startup-and-context-ingestion/SKILL.md +1 -1
- package/daemon/context-packs/skills/core/agent-startup-and-context-ingestion/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/attention-queue/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/cross-host-rig-commands/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/human-in-the-loop/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/openrig-architect/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/openrig-cmux/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/openrig-herdr/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/openrig-upgrade/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/rig-bundles-and-shareable-artifacts/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/rig-lifecycle/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/session-source-fork/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/specification-system/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/topology-mutation-and-seat-management/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/watchdog/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pm/backlog-capture/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pm/context-builder/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pm/exec-summary/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pm/office-hours/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pm/plan-review/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pm/requirements-writer/SKILL.md +21 -15
- package/daemon/context-packs/skills/pm/requirements-writer/manifest.yaml +3 -3
- package/daemon/context-packs/skills/pm/ui-mockup/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pods/development-team/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pods/orchestration-team/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pods/oversight-team/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pods/review-team/manifest.yaml +1 -1
- package/daemon/context-packs/skills/process/agent-browser/manifest.yaml +1 -1
- package/daemon/context-packs/skills/process/brainstorming/manifest.yaml +1 -1
- package/daemon/context-packs/skills/process/context-engineering/manifest.yaml +1 -1
- package/daemon/context-packs/skills/process/dogfood/manifest.yaml +1 -1
- package/daemon/context-packs/skills/process/executing-plans/manifest.yaml +1 -1
- package/daemon/context-packs/skills/process/frontend-design/manifest.yaml +1 -1
- package/daemon/context-packs/skills/process/systematic-debugging/manifest.yaml +1 -1
- package/daemon/context-packs/skills/process/test-driven-development/manifest.yaml +1 -1
- package/daemon/context-packs/skills/process/using-superpowers/manifest.yaml +1 -1
- package/daemon/context-packs/skills/process/verification-before-completion/manifest.yaml +1 -1
- package/daemon/context-packs/skills/process/writing-plans/manifest.yaml +1 -1
- package/daemon/context-packs/world-example/manifest.yaml +8 -0
- package/daemon/context-packs/world-example/your-world.md +37 -0
- package/daemon/dist/adapters/claude-code-adapter.d.ts +15 -0
- package/daemon/dist/adapters/claude-code-adapter.d.ts.map +1 -1
- package/daemon/dist/adapters/claude-code-adapter.js +57 -0
- package/daemon/dist/adapters/claude-code-adapter.js.map +1 -1
- package/daemon/dist/build-info.js +3 -3
- package/daemon/dist/db/all-migrations.d.ts.map +1 -1
- package/daemon/dist/db/all-migrations.js +4 -0
- package/daemon/dist/db/all-migrations.js.map +1 -1
- package/daemon/dist/db/migrations/072_thread_seat_map.d.ts +3 -0
- package/daemon/dist/db/migrations/072_thread_seat_map.d.ts.map +1 -0
- package/daemon/dist/db/migrations/072_thread_seat_map.js +22 -0
- package/daemon/dist/db/migrations/072_thread_seat_map.js.map +1 -0
- package/daemon/dist/db/migrations/073_queue_transition_wakes.d.ts +3 -0
- package/daemon/dist/db/migrations/073_queue_transition_wakes.d.ts.map +1 -0
- package/daemon/dist/db/migrations/073_queue_transition_wakes.js +21 -0
- package/daemon/dist/db/migrations/073_queue_transition_wakes.js.map +1 -0
- package/daemon/dist/domain/activity-taxonomy.d.ts +112 -0
- package/daemon/dist/domain/activity-taxonomy.d.ts.map +1 -0
- package/daemon/dist/domain/activity-taxonomy.js +99 -0
- package/daemon/dist/domain/activity-taxonomy.js.map +1 -0
- package/daemon/dist/domain/bind-plan.d.ts +19 -0
- package/daemon/dist/domain/bind-plan.d.ts.map +1 -0
- package/daemon/dist/domain/bind-plan.js +25 -0
- package/daemon/dist/domain/bind-plan.js.map +1 -0
- package/daemon/dist/domain/event-bus.d.ts +6 -0
- package/daemon/dist/domain/event-bus.d.ts.map +1 -1
- package/daemon/dist/domain/event-bus.js +15 -5
- package/daemon/dist/domain/event-bus.js.map +1 -1
- package/daemon/dist/domain/gateway/gateway-process-main.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/gateway-process-main.js +9 -0
- package/daemon/dist/domain/gateway/gateway-process-main.js.map +1 -1
- package/daemon/dist/domain/gateway/gateway-process.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/gateway-process.js +9 -0
- package/daemon/dist/domain/gateway/gateway-process.js.map +1 -1
- package/daemon/dist/domain/gateway/gateway-subsystem.d.ts +80 -0
- package/daemon/dist/domain/gateway/gateway-subsystem.d.ts.map +1 -0
- package/daemon/dist/domain/gateway/gateway-subsystem.js +149 -0
- package/daemon/dist/domain/gateway/gateway-subsystem.js.map +1 -0
- package/daemon/dist/domain/gateway/human-registry.d.ts +109 -0
- package/daemon/dist/domain/gateway/human-registry.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/human-registry.js +250 -0
- package/daemon/dist/domain/gateway/human-registry.js.map +1 -1
- package/{dist → daemon/dist/domain/gateway}/slack/config.d.ts +8 -5
- package/daemon/dist/domain/gateway/slack/config.d.ts.map +1 -0
- package/{dist → daemon/dist/domain/gateway}/slack/config.js +8 -6
- package/daemon/dist/domain/gateway/slack/config.js.map +1 -0
- package/{dist → daemon/dist/domain/gateway}/slack/inbound-admission.d.ts +1 -1
- package/daemon/dist/domain/gateway/slack/inbound-admission.d.ts.map +1 -0
- package/daemon/dist/domain/gateway/slack/inbound-admission.js.map +1 -0
- package/{dist → daemon/dist/domain/gateway}/slack/inbound.d.ts +14 -3
- package/daemon/dist/domain/gateway/slack/inbound.d.ts.map +1 -0
- package/{dist → daemon/dist/domain/gateway}/slack/inbound.js +6 -5
- package/daemon/dist/domain/gateway/slack/inbound.js.map +1 -0
- package/daemon/dist/domain/gateway/slack/message.d.ts +80 -0
- package/daemon/dist/domain/gateway/slack/message.d.ts.map +1 -0
- package/daemon/dist/domain/gateway/slack/message.js +164 -0
- package/daemon/dist/domain/gateway/slack/message.js.map +1 -0
- package/daemon/dist/domain/gateway/slack/outbound-driver.d.ts +54 -0
- package/daemon/dist/domain/gateway/slack/outbound-driver.d.ts.map +1 -0
- package/daemon/dist/domain/gateway/slack/outbound-driver.js +96 -0
- package/daemon/dist/domain/gateway/slack/outbound-driver.js.map +1 -0
- package/daemon/dist/domain/gateway/slack/queue-access.d.ts +53 -0
- package/daemon/dist/domain/gateway/slack/queue-access.d.ts.map +1 -0
- package/daemon/dist/domain/gateway/slack/queue-access.js +72 -0
- package/daemon/dist/domain/gateway/slack/queue-access.js.map +1 -0
- package/daemon/dist/domain/gateway/slack/secrets.d.ts.map +1 -0
- package/daemon/dist/domain/gateway/slack/secrets.js.map +1 -0
- package/daemon/dist/domain/gateway/slack/slack-api.d.ts +106 -0
- package/daemon/dist/domain/gateway/slack/slack-api.d.ts.map +1 -0
- package/daemon/dist/domain/gateway/slack/slack-api.js +198 -0
- package/daemon/dist/domain/gateway/slack/slack-api.js.map +1 -0
- package/daemon/dist/domain/gateway/slack/slack-delivery.d.ts +47 -0
- package/daemon/dist/domain/gateway/slack/slack-delivery.d.ts.map +1 -0
- package/daemon/dist/domain/gateway/slack/slack-delivery.js +147 -0
- package/daemon/dist/domain/gateway/slack/slack-delivery.js.map +1 -0
- package/daemon/dist/domain/gateway/slack/slack-subsystem.d.ts +21 -0
- package/daemon/dist/domain/gateway/slack/slack-subsystem.d.ts.map +1 -0
- package/daemon/dist/domain/gateway/slack/slack-subsystem.js +198 -0
- package/daemon/dist/domain/gateway/slack/slack-subsystem.js.map +1 -0
- package/daemon/dist/domain/gateway/slack/socket-inbound.d.ts +30 -0
- package/daemon/dist/domain/gateway/slack/socket-inbound.d.ts.map +1 -0
- package/daemon/dist/domain/gateway/slack/socket-inbound.js +99 -0
- package/daemon/dist/domain/gateway/slack/socket-inbound.js.map +1 -0
- package/daemon/dist/domain/gateway/slack/state-store.d.ts.map +1 -0
- package/daemon/dist/domain/gateway/slack/state-store.js.map +1 -0
- package/daemon/dist/domain/gateway/slack/thread-routing.d.ts +17 -0
- package/daemon/dist/domain/gateway/slack/thread-routing.d.ts.map +1 -0
- package/daemon/dist/domain/gateway/slack/thread-routing.js +35 -0
- package/daemon/dist/domain/gateway/slack/thread-routing.js.map +1 -0
- package/daemon/dist/domain/gateway/slack/thread-seat-map.d.ts +56 -0
- package/daemon/dist/domain/gateway/slack/thread-seat-map.d.ts.map +1 -0
- package/daemon/dist/domain/gateway/slack/thread-seat-map.js +103 -0
- package/daemon/dist/domain/gateway/slack/thread-seat-map.js.map +1 -0
- package/daemon/dist/domain/gateway/spawn-gateway.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/spawn-gateway.js +9 -0
- package/daemon/dist/domain/gateway/spawn-gateway.js.map +1 -1
- package/daemon/dist/domain/gateway/transport.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/transport.js +9 -0
- package/daemon/dist/domain/gateway/transport.js.map +1 -1
- package/daemon/dist/domain/node-inventory.d.ts.map +1 -1
- package/daemon/dist/domain/node-inventory.js +20 -0
- package/daemon/dist/domain/node-inventory.js.map +1 -1
- package/daemon/dist/domain/parked-query.d.ts +81 -0
- package/daemon/dist/domain/parked-query.d.ts.map +1 -0
- package/daemon/dist/domain/parked-query.js +126 -0
- package/daemon/dist/domain/parked-query.js.map +1 -0
- package/daemon/dist/domain/queue-pickup.d.ts +38 -0
- package/daemon/dist/domain/queue-pickup.d.ts.map +1 -0
- package/daemon/dist/domain/queue-pickup.js +67 -0
- package/daemon/dist/domain/queue-pickup.js.map +1 -0
- package/daemon/dist/domain/queue-repository.d.ts +38 -10
- package/daemon/dist/domain/queue-repository.d.ts.map +1 -1
- package/daemon/dist/domain/queue-repository.js +267 -35
- package/daemon/dist/domain/queue-repository.js.map +1 -1
- package/daemon/dist/domain/queue-stuck-sweep.d.ts +77 -0
- package/daemon/dist/domain/queue-stuck-sweep.d.ts.map +1 -0
- package/daemon/dist/domain/queue-stuck-sweep.js +348 -0
- package/daemon/dist/domain/queue-stuck-sweep.js.map +1 -0
- package/daemon/dist/domain/queue-wake-ladder.d.ts +96 -0
- package/daemon/dist/domain/queue-wake-ladder.d.ts.map +1 -0
- package/daemon/dist/domain/queue-wake-ladder.js +533 -0
- package/daemon/dist/domain/queue-wake-ladder.js.map +1 -0
- package/daemon/dist/domain/queue-wake-repository.d.ts +37 -0
- package/daemon/dist/domain/queue-wake-repository.d.ts.map +1 -0
- package/daemon/dist/domain/queue-wake-repository.js +80 -0
- package/daemon/dist/domain/queue-wake-repository.js.map +1 -0
- package/daemon/dist/domain/rebuild-priming-chain.d.ts +28 -0
- package/daemon/dist/domain/rebuild-priming-chain.d.ts.map +1 -0
- package/daemon/dist/domain/rebuild-priming-chain.js +71 -0
- package/daemon/dist/domain/rebuild-priming-chain.js.map +1 -0
- package/daemon/dist/domain/review/compose.d.ts +3 -1
- package/daemon/dist/domain/review/compose.d.ts.map +1 -1
- package/daemon/dist/domain/review/compose.js +14 -8
- package/daemon/dist/domain/review/compose.js.map +1 -1
- package/daemon/dist/domain/review/gather.d.ts.map +1 -1
- package/daemon/dist/domain/review/gather.js +3 -1
- package/daemon/dist/domain/review/gather.js.map +1 -1
- package/daemon/dist/domain/rigspec-instantiator.d.ts +3 -0
- package/daemon/dist/domain/rigspec-instantiator.d.ts.map +1 -1
- package/daemon/dist/domain/rigspec-instantiator.js +18 -0
- package/daemon/dist/domain/rigspec-instantiator.js.map +1 -1
- package/daemon/dist/domain/scope/plan-lock-artifacts.d.ts +6 -5
- package/daemon/dist/domain/scope/plan-lock-artifacts.d.ts.map +1 -1
- package/daemon/dist/domain/scope/plan-lock-artifacts.js +23 -20
- package/daemon/dist/domain/scope/plan-lock-artifacts.js.map +1 -1
- package/daemon/dist/domain/scope/scaffold-placeholder.d.ts +4 -5
- package/daemon/dist/domain/scope/scaffold-placeholder.d.ts.map +1 -1
- package/daemon/dist/domain/scope/scaffold-placeholder.js +6 -7
- package/daemon/dist/domain/scope/scaffold-placeholder.js.map +1 -1
- package/daemon/dist/domain/scope/scope-approve.d.ts +1 -1
- package/daemon/dist/domain/scope/scope-approve.d.ts.map +1 -1
- package/daemon/dist/domain/scope/scope-approve.js +5 -4
- package/daemon/dist/domain/scope/scope-approve.js.map +1 -1
- package/daemon/dist/domain/scope/scope-audit.d.ts +42 -3
- package/daemon/dist/domain/scope/scope-audit.d.ts.map +1 -1
- package/daemon/dist/domain/scope/scope-audit.js +78 -93
- package/daemon/dist/domain/scope/scope-audit.js.map +1 -1
- package/daemon/dist/domain/scope/scope-view-projection.d.ts.map +1 -1
- package/daemon/dist/domain/scope/scope-view-projection.js +7 -2
- package/daemon/dist/domain/scope/scope-view-projection.js.map +1 -1
- package/daemon/dist/domain/seat-activity-service.d.ts +91 -0
- package/daemon/dist/domain/seat-activity-service.d.ts.map +1 -1
- package/daemon/dist/domain/seat-activity-service.js +416 -1
- package/daemon/dist/domain/seat-activity-service.js.map +1 -1
- package/daemon/dist/domain/seat-handover-planner.d.ts +14 -0
- package/daemon/dist/domain/seat-handover-planner.d.ts.map +1 -1
- package/daemon/dist/domain/seat-handover-planner.js +14 -1
- package/daemon/dist/domain/seat-handover-planner.js.map +1 -1
- package/daemon/dist/domain/seat-handover-service.d.ts +54 -1
- package/daemon/dist/domain/seat-handover-service.d.ts.map +1 -1
- package/daemon/dist/domain/seat-handover-service.js +162 -19
- package/daemon/dist/domain/seat-handover-service.js.map +1 -1
- package/daemon/dist/domain/session-transport.js +1 -2
- package/daemon/dist/domain/session-transport.js.map +1 -1
- package/daemon/dist/domain/successor-session-launcher.d.ts +6 -1
- package/daemon/dist/domain/successor-session-launcher.d.ts.map +1 -1
- package/daemon/dist/domain/successor-session-launcher.js +3 -3
- package/daemon/dist/domain/successor-session-launcher.js.map +1 -1
- package/daemon/dist/domain/types.d.ts +33 -0
- package/daemon/dist/domain/types.d.ts.map +1 -1
- package/daemon/dist/domain/types.js.map +1 -1
- package/daemon/dist/domain/user-settings/settings-store.d.ts +1 -1
- package/daemon/dist/domain/user-settings/settings-store.d.ts.map +1 -1
- package/daemon/dist/domain/user-settings/settings-store.js +48 -0
- package/daemon/dist/domain/user-settings/settings-store.js.map +1 -1
- package/daemon/dist/domain/view-projector.d.ts +1 -1
- package/daemon/dist/domain/view-projector.d.ts.map +1 -1
- package/daemon/dist/domain/view-projector.js +41 -2
- package/daemon/dist/domain/view-projector.js.map +1 -1
- package/daemon/dist/domain/watchdog-policy-engine.d.ts +7 -0
- package/daemon/dist/domain/watchdog-policy-engine.d.ts.map +1 -1
- package/daemon/dist/domain/watchdog-policy-engine.js +3 -0
- package/daemon/dist/domain/watchdog-policy-engine.js.map +1 -1
- package/daemon/dist/domain/workspace/default-workspace-scaffold.d.ts +4 -3
- package/daemon/dist/domain/workspace/default-workspace-scaffold.d.ts.map +1 -1
- package/daemon/dist/domain/workspace/default-workspace-scaffold.js +56 -196
- package/daemon/dist/domain/workspace/default-workspace-scaffold.js.map +1 -1
- package/daemon/dist/domain/workspace/getting-started-narrative.js +1 -1
- package/daemon/dist/domain/workspace/getting-started-narrative.js.map +1 -1
- package/daemon/dist/domain/workspace/workspace-doctor.d.ts +8 -11
- package/daemon/dist/domain/workspace/workspace-doctor.d.ts.map +1 -1
- package/daemon/dist/domain/workspace/workspace-doctor.js +23 -25
- package/daemon/dist/domain/workspace/workspace-doctor.js.map +1 -1
- package/daemon/dist/gateway-slack-surface.d.ts +4 -0
- package/daemon/dist/gateway-slack-surface.d.ts.map +1 -0
- package/daemon/dist/gateway-slack-surface.js +8 -0
- package/daemon/dist/gateway-slack-surface.js.map +1 -0
- package/daemon/dist/index.d.ts +29 -0
- package/daemon/dist/index.d.ts.map +1 -1
- package/daemon/dist/index.js +99 -4
- package/daemon/dist/index.js.map +1 -1
- package/daemon/dist/lib/pane-envelope.d.ts +1 -1
- package/daemon/dist/lib/pane-envelope.d.ts.map +1 -1
- package/daemon/dist/lib/pane-envelope.js +8 -14
- package/daemon/dist/lib/pane-envelope.js.map +1 -1
- package/daemon/dist/routes/activity.d.ts +13 -0
- package/daemon/dist/routes/activity.d.ts.map +1 -1
- package/daemon/dist/routes/activity.js +186 -0
- package/daemon/dist/routes/activity.js.map +1 -1
- package/daemon/dist/routes/config.js +2 -2
- package/daemon/dist/routes/config.js.map +1 -1
- package/daemon/dist/routes/gateway.d.ts +3 -0
- package/daemon/dist/routes/gateway.d.ts.map +1 -0
- package/daemon/dist/routes/gateway.js +46 -0
- package/daemon/dist/routes/gateway.js.map +1 -0
- package/daemon/dist/routes/health-summary.d.ts.map +1 -1
- package/daemon/dist/routes/health-summary.js +8 -0
- package/daemon/dist/routes/health-summary.js.map +1 -1
- package/daemon/dist/routes/queue.d.ts.map +1 -1
- package/daemon/dist/routes/queue.js +3 -1
- package/daemon/dist/routes/queue.js.map +1 -1
- package/daemon/dist/routes/scope-audit.d.ts.map +1 -1
- package/daemon/dist/routes/scope-audit.js +72 -13
- package/daemon/dist/routes/scope-audit.js.map +1 -1
- package/daemon/dist/routes/seat.d.ts.map +1 -1
- package/daemon/dist/routes/seat.js +15 -0
- package/daemon/dist/routes/seat.js.map +1 -1
- package/daemon/dist/server.d.ts +17 -0
- package/daemon/dist/server.d.ts.map +1 -1
- package/daemon/dist/server.js +25 -4
- package/daemon/dist/server.js.map +1 -1
- package/daemon/dist/startup.d.ts +4 -0
- package/daemon/dist/startup.d.ts.map +1 -1
- package/daemon/dist/startup.js +33 -0
- package/daemon/dist/startup.js.map +1 -1
- package/daemon/docs/reference/agent-state-taxonomy.md +106 -0
- package/daemon/docs/reference/project-workspace.md +22 -14
- package/daemon/docs/reference/refocus-channel.md +27 -14
- package/daemon/docs/reference/sdlc-conventions.md +24 -13
- package/daemon/specs/agents/shared/skills/core/agent-startup-and-context-ingestion/SKILL.md +1 -1
- package/daemon/specs/agents/shared/skills/pm/requirements-writer/SKILL.md +21 -15
- package/daemon/specs/rigs/launch/kernel/agents/advisor/lead/guidance/role.md +1 -1
- package/dist/build-info.js +3 -3
- package/dist/commands/config-init-workspace.d.ts.map +1 -1
- package/dist/commands/config-init-workspace.js +32 -57
- package/dist/commands/config-init-workspace.js.map +1 -1
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +5 -0
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/daemon.d.ts.map +1 -1
- package/dist/commands/daemon.js +14 -4
- package/dist/commands/daemon.js.map +1 -1
- package/dist/commands/gateway.d.ts +19 -1
- package/dist/commands/gateway.d.ts.map +1 -1
- package/dist/commands/gateway.js +157 -33
- package/dist/commands/gateway.js.map +1 -1
- package/dist/commands/parked.d.ts +3 -0
- package/dist/commands/parked.d.ts.map +1 -0
- package/dist/commands/parked.js +83 -0
- package/dist/commands/parked.js.map +1 -0
- package/dist/commands/proof.d.ts +2 -1
- package/dist/commands/proof.d.ts.map +1 -1
- package/dist/commands/proof.js +8 -8
- package/dist/commands/proof.js.map +1 -1
- package/dist/commands/ps.d.ts +10 -0
- package/dist/commands/ps.d.ts.map +1 -1
- package/dist/commands/ps.js +14 -3
- package/dist/commands/ps.js.map +1 -1
- package/dist/commands/queue.d.ts.map +1 -1
- package/dist/commands/queue.js +31 -3
- package/dist/commands/queue.js.map +1 -1
- package/dist/commands/scope.d.ts.map +1 -1
- package/dist/commands/scope.js +255 -136
- package/dist/commands/scope.js.map +1 -1
- package/dist/commands/seat.d.ts.map +1 -1
- package/dist/commands/seat.js +40 -10
- package/dist/commands/seat.js.map +1 -1
- package/dist/commands/send.d.ts +1 -1
- package/dist/commands/send.d.ts.map +1 -1
- package/dist/commands/send.js +13 -14
- package/dist/commands/send.js.map +1 -1
- package/dist/commands/slack.d.ts +14 -28
- package/dist/commands/slack.d.ts.map +1 -1
- package/dist/commands/slack.js +73 -187
- package/dist/commands/slack.js.map +1 -1
- package/dist/commands/start.d.ts +3 -0
- package/dist/commands/start.d.ts.map +1 -1
- package/dist/commands/start.js +12 -5
- package/dist/commands/start.js.map +1 -1
- package/dist/commands/up.d.ts.map +1 -1
- package/dist/commands/up.js +11 -4
- package/dist/commands/up.js.map +1 -1
- package/dist/commands/view.d.ts +4 -2
- package/dist/commands/view.d.ts.map +1 -1
- package/dist/commands/view.js +1 -1
- package/dist/commands/view.js.map +1 -1
- package/dist/commands/watchdog.d.ts.map +1 -1
- package/dist/commands/watchdog.js +2 -1
- package/dist/commands/watchdog.js.map +1 -1
- package/dist/commands/workspace.js +1 -1
- package/dist/config-store.d.ts +15 -1
- package/dist/config-store.d.ts.map +1 -1
- package/dist/config-store.js +60 -0
- package/dist/config-store.js.map +1 -1
- package/dist/cross-host-target.d.ts.map +1 -1
- package/dist/cross-host-target.js +5 -4
- package/dist/cross-host-target.js.map +1 -1
- package/dist/daemon-lifecycle.d.ts +45 -3
- package/dist/daemon-lifecycle.d.ts.map +1 -1
- package/dist/daemon-lifecycle.js +126 -0
- package/dist/daemon-lifecycle.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/scope/capability-delta.d.ts +9 -0
- package/dist/lib/scope/capability-delta.d.ts.map +1 -0
- package/dist/lib/scope/capability-delta.js +73 -0
- package/dist/lib/scope/capability-delta.js.map +1 -0
- package/dist/lib/scope/scaffold-placeholder.d.ts +4 -5
- package/dist/lib/scope/scaffold-placeholder.d.ts.map +1 -1
- package/dist/lib/scope/scaffold-placeholder.js +6 -7
- package/dist/lib/scope/scaffold-placeholder.js.map +1 -1
- package/dist/lib/scope/scope-audit.d.ts +42 -3
- package/dist/lib/scope/scope-audit.d.ts.map +1 -1
- package/dist/lib/scope/scope-audit.js +78 -93
- package/dist/lib/scope/scope-audit.js.map +1 -1
- package/dist/lib/scope/scope-fs.d.ts +18 -14
- package/dist/lib/scope/scope-fs.d.ts.map +1 -1
- package/dist/lib/scope/scope-fs.js +60 -29
- package/dist/lib/scope/scope-fs.js.map +1 -1
- package/dist/lib/scope/templates.d.ts +17 -17
- package/dist/lib/scope/templates.d.ts.map +1 -1
- package/dist/lib/scope/templates.js +35 -39
- package/dist/lib/scope/templates.js.map +1 -1
- package/dist/lib/scope-templates/backlog-deprecation.md +3 -1
- package/dist/lib/scope-templates/backlog-tech-debt.md +3 -1
- package/dist/lib/scope-templates/bug-fix.md +3 -1
- package/dist/lib/scope-templates/capability-delta.md +60 -0
- package/dist/lib/scope-templates/mission-placeholder.md +9 -40
- package/dist/lib/scope-templates/mission-progress.md +5 -6
- package/dist/lib/scope-templates/mission-release.md +9 -40
- package/dist/lib/scope-templates/notes.md +14 -0
- package/dist/lib/scope-templates/placeholder.md +3 -1
- package/dist/lib/scope-templates/proof.md +1 -1
- package/dist/lib/scope-templates/release-feature.md +3 -1
- package/dist/lib/scope-templates/research.md +3 -1
- package/dist/lib/scope-templates/slice-progress.md +4 -5
- package/node_modules/@openrig/daemon/dist/adapters/claude-code-adapter.d.ts +15 -0
- package/node_modules/@openrig/daemon/dist/adapters/claude-code-adapter.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/adapters/claude-code-adapter.js +57 -0
- package/node_modules/@openrig/daemon/dist/adapters/claude-code-adapter.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/build-info.js +3 -3
- package/node_modules/@openrig/daemon/dist/db/all-migrations.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/db/all-migrations.js +4 -0
- package/node_modules/@openrig/daemon/dist/db/all-migrations.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/db/migrations/072_thread_seat_map.d.ts +3 -0
- package/node_modules/@openrig/daemon/dist/db/migrations/072_thread_seat_map.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/db/migrations/072_thread_seat_map.js +22 -0
- package/node_modules/@openrig/daemon/dist/db/migrations/072_thread_seat_map.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/db/migrations/073_queue_transition_wakes.d.ts +3 -0
- package/node_modules/@openrig/daemon/dist/db/migrations/073_queue_transition_wakes.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/db/migrations/073_queue_transition_wakes.js +21 -0
- package/node_modules/@openrig/daemon/dist/db/migrations/073_queue_transition_wakes.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/activity-taxonomy.d.ts +112 -0
- package/node_modules/@openrig/daemon/dist/domain/activity-taxonomy.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/activity-taxonomy.js +99 -0
- package/node_modules/@openrig/daemon/dist/domain/activity-taxonomy.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/bind-plan.d.ts +19 -0
- package/node_modules/@openrig/daemon/dist/domain/bind-plan.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/bind-plan.js +25 -0
- package/node_modules/@openrig/daemon/dist/domain/bind-plan.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/event-bus.d.ts +6 -0
- package/node_modules/@openrig/daemon/dist/domain/event-bus.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/event-bus.js +15 -5
- package/node_modules/@openrig/daemon/dist/domain/event-bus.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/gateway/gateway-process-main.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/gateway/gateway-process-main.js +9 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/gateway-process-main.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/gateway/gateway-process.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/gateway/gateway-process.js +9 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/gateway-process.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/gateway/gateway-subsystem.d.ts +80 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/gateway-subsystem.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/gateway-subsystem.js +149 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/gateway-subsystem.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/human-registry.d.ts +109 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/human-registry.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/gateway/human-registry.js +250 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/human-registry.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/config.d.ts +44 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/config.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/config.js +62 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/config.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/inbound-admission.d.ts +8 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/inbound-admission.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/inbound-admission.js +20 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/inbound-admission.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/inbound.d.ts +113 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/inbound.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/inbound.js +146 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/inbound.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/message.d.ts +80 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/message.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/message.js +164 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/message.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/outbound-driver.d.ts +54 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/outbound-driver.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/outbound-driver.js +96 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/outbound-driver.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/queue-access.d.ts +53 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/queue-access.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/queue-access.js +72 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/queue-access.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/secrets.d.ts +21 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/secrets.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/secrets.js +73 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/secrets.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-api.d.ts +106 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-api.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-api.js +198 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-api.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-delivery.d.ts +47 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-delivery.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-delivery.js +147 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-delivery.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-subsystem.d.ts +21 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-subsystem.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-subsystem.js +198 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-subsystem.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/socket-inbound.d.ts +30 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/socket-inbound.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/socket-inbound.js +99 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/socket-inbound.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/state-store.d.ts +62 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/state-store.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/state-store.js +132 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/state-store.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/thread-routing.d.ts +17 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/thread-routing.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/thread-routing.js +35 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/thread-routing.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/thread-seat-map.d.ts +56 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/thread-seat-map.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/thread-seat-map.js +103 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/thread-seat-map.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/spawn-gateway.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/gateway/spawn-gateway.js +9 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/spawn-gateway.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/gateway/transport.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/gateway/transport.js +9 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/transport.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/node-inventory.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/node-inventory.js +20 -0
- package/node_modules/@openrig/daemon/dist/domain/node-inventory.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/parked-query.d.ts +81 -0
- package/node_modules/@openrig/daemon/dist/domain/parked-query.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/parked-query.js +126 -0
- package/node_modules/@openrig/daemon/dist/domain/parked-query.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/queue-pickup.d.ts +38 -0
- package/node_modules/@openrig/daemon/dist/domain/queue-pickup.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/queue-pickup.js +67 -0
- package/node_modules/@openrig/daemon/dist/domain/queue-pickup.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/queue-repository.d.ts +38 -10
- package/node_modules/@openrig/daemon/dist/domain/queue-repository.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/queue-repository.js +267 -35
- package/node_modules/@openrig/daemon/dist/domain/queue-repository.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/queue-stuck-sweep.d.ts +77 -0
- package/node_modules/@openrig/daemon/dist/domain/queue-stuck-sweep.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/queue-stuck-sweep.js +348 -0
- package/node_modules/@openrig/daemon/dist/domain/queue-stuck-sweep.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/queue-wake-ladder.d.ts +96 -0
- package/node_modules/@openrig/daemon/dist/domain/queue-wake-ladder.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/queue-wake-ladder.js +533 -0
- package/node_modules/@openrig/daemon/dist/domain/queue-wake-ladder.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/queue-wake-repository.d.ts +37 -0
- package/node_modules/@openrig/daemon/dist/domain/queue-wake-repository.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/queue-wake-repository.js +80 -0
- package/node_modules/@openrig/daemon/dist/domain/queue-wake-repository.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/rebuild-priming-chain.d.ts +28 -0
- package/node_modules/@openrig/daemon/dist/domain/rebuild-priming-chain.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/rebuild-priming-chain.js +71 -0
- package/node_modules/@openrig/daemon/dist/domain/rebuild-priming-chain.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/review/compose.d.ts +3 -1
- package/node_modules/@openrig/daemon/dist/domain/review/compose.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/review/compose.js +14 -8
- package/node_modules/@openrig/daemon/dist/domain/review/compose.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/review/gather.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/review/gather.js +3 -1
- package/node_modules/@openrig/daemon/dist/domain/review/gather.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/rigspec-instantiator.d.ts +3 -0
- package/node_modules/@openrig/daemon/dist/domain/rigspec-instantiator.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/rigspec-instantiator.js +18 -0
- package/node_modules/@openrig/daemon/dist/domain/rigspec-instantiator.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/scope/plan-lock-artifacts.d.ts +6 -5
- package/node_modules/@openrig/daemon/dist/domain/scope/plan-lock-artifacts.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/scope/plan-lock-artifacts.js +23 -20
- package/node_modules/@openrig/daemon/dist/domain/scope/plan-lock-artifacts.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/scope/scaffold-placeholder.d.ts +4 -5
- package/node_modules/@openrig/daemon/dist/domain/scope/scaffold-placeholder.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/scope/scaffold-placeholder.js +6 -7
- package/node_modules/@openrig/daemon/dist/domain/scope/scaffold-placeholder.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/scope/scope-approve.d.ts +1 -1
- package/node_modules/@openrig/daemon/dist/domain/scope/scope-approve.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/scope/scope-approve.js +5 -4
- package/node_modules/@openrig/daemon/dist/domain/scope/scope-approve.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/scope/scope-audit.d.ts +42 -3
- package/node_modules/@openrig/daemon/dist/domain/scope/scope-audit.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/scope/scope-audit.js +78 -93
- package/node_modules/@openrig/daemon/dist/domain/scope/scope-audit.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/scope/scope-view-projection.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/scope/scope-view-projection.js +7 -2
- package/node_modules/@openrig/daemon/dist/domain/scope/scope-view-projection.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/seat-activity-service.d.ts +91 -0
- package/node_modules/@openrig/daemon/dist/domain/seat-activity-service.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/seat-activity-service.js +416 -1
- package/node_modules/@openrig/daemon/dist/domain/seat-activity-service.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/seat-handover-planner.d.ts +14 -0
- package/node_modules/@openrig/daemon/dist/domain/seat-handover-planner.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/seat-handover-planner.js +14 -1
- package/node_modules/@openrig/daemon/dist/domain/seat-handover-planner.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/seat-handover-service.d.ts +54 -1
- package/node_modules/@openrig/daemon/dist/domain/seat-handover-service.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/seat-handover-service.js +162 -19
- package/node_modules/@openrig/daemon/dist/domain/seat-handover-service.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/session-transport.js +1 -2
- package/node_modules/@openrig/daemon/dist/domain/session-transport.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/successor-session-launcher.d.ts +6 -1
- package/node_modules/@openrig/daemon/dist/domain/successor-session-launcher.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/successor-session-launcher.js +3 -3
- package/node_modules/@openrig/daemon/dist/domain/successor-session-launcher.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/types.d.ts +33 -0
- package/node_modules/@openrig/daemon/dist/domain/types.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/types.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/user-settings/settings-store.d.ts +1 -1
- package/node_modules/@openrig/daemon/dist/domain/user-settings/settings-store.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/user-settings/settings-store.js +48 -0
- package/node_modules/@openrig/daemon/dist/domain/user-settings/settings-store.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/view-projector.d.ts +1 -1
- package/node_modules/@openrig/daemon/dist/domain/view-projector.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/view-projector.js +41 -2
- package/node_modules/@openrig/daemon/dist/domain/view-projector.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/watchdog-policy-engine.d.ts +7 -0
- package/node_modules/@openrig/daemon/dist/domain/watchdog-policy-engine.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/watchdog-policy-engine.js +3 -0
- package/node_modules/@openrig/daemon/dist/domain/watchdog-policy-engine.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/workspace/default-workspace-scaffold.d.ts +4 -3
- package/node_modules/@openrig/daemon/dist/domain/workspace/default-workspace-scaffold.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/workspace/default-workspace-scaffold.js +56 -196
- package/node_modules/@openrig/daemon/dist/domain/workspace/default-workspace-scaffold.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/workspace/getting-started-narrative.js +1 -1
- package/node_modules/@openrig/daemon/dist/domain/workspace/getting-started-narrative.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/workspace/workspace-doctor.d.ts +8 -11
- package/node_modules/@openrig/daemon/dist/domain/workspace/workspace-doctor.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/workspace/workspace-doctor.js +23 -25
- package/node_modules/@openrig/daemon/dist/domain/workspace/workspace-doctor.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/gateway-slack-surface.d.ts +4 -0
- package/node_modules/@openrig/daemon/dist/gateway-slack-surface.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/gateway-slack-surface.js +8 -0
- package/node_modules/@openrig/daemon/dist/gateway-slack-surface.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/index.d.ts +29 -0
- package/node_modules/@openrig/daemon/dist/index.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/index.js +99 -4
- package/node_modules/@openrig/daemon/dist/index.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/lib/pane-envelope.d.ts +1 -1
- package/node_modules/@openrig/daemon/dist/lib/pane-envelope.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/lib/pane-envelope.js +8 -14
- package/node_modules/@openrig/daemon/dist/lib/pane-envelope.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/activity.d.ts +13 -0
- package/node_modules/@openrig/daemon/dist/routes/activity.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/activity.js +186 -0
- package/node_modules/@openrig/daemon/dist/routes/activity.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/config.js +2 -2
- package/node_modules/@openrig/daemon/dist/routes/config.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/gateway.d.ts +3 -0
- package/node_modules/@openrig/daemon/dist/routes/gateway.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/routes/gateway.js +46 -0
- package/node_modules/@openrig/daemon/dist/routes/gateway.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/routes/health-summary.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/health-summary.js +8 -0
- package/node_modules/@openrig/daemon/dist/routes/health-summary.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/queue.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/queue.js +3 -1
- package/node_modules/@openrig/daemon/dist/routes/queue.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/scope-audit.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/scope-audit.js +72 -13
- package/node_modules/@openrig/daemon/dist/routes/scope-audit.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/seat.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/seat.js +15 -0
- package/node_modules/@openrig/daemon/dist/routes/seat.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/server.d.ts +17 -0
- package/node_modules/@openrig/daemon/dist/server.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/server.js +25 -4
- package/node_modules/@openrig/daemon/dist/server.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/startup.d.ts +4 -0
- package/node_modules/@openrig/daemon/dist/startup.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/startup.js +33 -0
- package/node_modules/@openrig/daemon/dist/startup.js.map +1 -1
- package/node_modules/@openrig/daemon/package.json +5 -1
- package/package.json +1 -1
- package/tui/dist/daemon-client.d.ts +5 -0
- package/tui/dist/daemon-client.d.ts.map +1 -1
- package/tui/dist/daemon-client.js +17 -0
- package/tui/dist/daemon-client.js.map +1 -1
- package/tui/dist/hydrate.d.ts.map +1 -1
- package/tui/dist/hydrate.js +12 -4
- package/tui/dist/hydrate.js.map +1 -1
- package/tui/dist/live-events.d.ts +21 -0
- package/tui/dist/live-events.d.ts.map +1 -0
- package/tui/dist/live-events.js +88 -0
- package/tui/dist/live-events.js.map +1 -0
- package/tui/dist/live.js +1 -1
- package/tui/dist/main.js +27 -8
- package/tui/dist/main.js.map +1 -1
- package/tui/dist/refresh.d.ts +10 -1
- package/tui/dist/refresh.d.ts.map +1 -1
- package/tui/dist/refresh.js +22 -2
- package/tui/dist/refresh.js.map +1 -1
- package/daemon/context-packs/world/install/01-world-from-primitives.md +0 -97
- package/daemon/context-packs/world/install/02-permission-self-sleep.md +0 -141
- package/daemon/context-packs/world/install/03-what-this-is-for.md +0 -86
- package/daemon/context-packs/world/install/04-ontology.md +0 -790
- package/daemon/context-packs/world/install/05-harness-power-use.md +0 -355
- package/daemon/context-packs/world/install/06-a-competent-turn.md +0 -225
- package/daemon/context-packs/world/install/manifest.yaml +0 -125
- package/dist/lib/scope-templates/mission-brief.md +0 -20
- package/dist/lib/scope-templates/mission-notes.md +0 -102
- package/dist/slack/config.d.ts.map +0 -1
- package/dist/slack/config.js.map +0 -1
- package/dist/slack/connector-server.d.ts +0 -31
- package/dist/slack/connector-server.d.ts.map +0 -1
- package/dist/slack/connector-server.js +0 -108
- package/dist/slack/connector-server.js.map +0 -1
- package/dist/slack/inbound-admission.d.ts.map +0 -1
- package/dist/slack/inbound-admission.js.map +0 -1
- package/dist/slack/inbound.d.ts.map +0 -1
- package/dist/slack/inbound.js.map +0 -1
- package/dist/slack/message.d.ts +0 -39
- package/dist/slack/message.d.ts.map +0 -1
- package/dist/slack/message.js +0 -88
- package/dist/slack/message.js.map +0 -1
- package/dist/slack/outbound.d.ts +0 -39
- package/dist/slack/outbound.d.ts.map +0 -1
- package/dist/slack/outbound.js +0 -63
- package/dist/slack/outbound.js.map +0 -1
- package/dist/slack/queue-bridge.d.ts +0 -61
- package/dist/slack/queue-bridge.d.ts.map +0 -1
- package/dist/slack/queue-bridge.js +0 -114
- package/dist/slack/queue-bridge.js.map +0 -1
- package/dist/slack/secrets.d.ts.map +0 -1
- package/dist/slack/secrets.js.map +0 -1
- package/dist/slack/slack-api.d.ts +0 -49
- package/dist/slack/slack-api.d.ts.map +0 -1
- package/dist/slack/slack-api.js +0 -110
- package/dist/slack/slack-api.js.map +0 -1
- package/dist/slack/slack-delivery.d.ts +0 -14
- package/dist/slack/slack-delivery.d.ts.map +0 -1
- package/dist/slack/slack-delivery.js +0 -28
- package/dist/slack/slack-delivery.js.map +0 -1
- package/dist/slack/state-store.d.ts.map +0 -1
- package/dist/slack/state-store.js.map +0 -1
- /package/{dist → daemon/dist/domain/gateway}/slack/inbound-admission.js +0 -0
- /package/{dist → daemon/dist/domain/gateway}/slack/secrets.d.ts +0 -0
- /package/{dist → daemon/dist/domain/gateway}/slack/secrets.js +0 -0
- /package/{dist → daemon/dist/domain/gateway}/slack/state-store.d.ts +0 -0
- /package/{dist → daemon/dist/domain/gateway}/slack/state-store.js +0 -0
|
@@ -0,0 +1,348 @@
|
|
|
1
|
+
// S02 (OPR.0.5.5.2) — STANDING STUCK SWEEP. `queue overdue` and `queue undelivered` are the
|
|
2
|
+
// two halves of "is anything silently stuck" — and they were verbs someone had to remember to
|
|
3
|
+
// run. This module makes the sweep a standing daemon loop's body: both halves swept on a
|
|
4
|
+
// config-keyed cadence, findings routed as durable rows to the owning seats, quiet sweeps
|
|
5
|
+
// cheap (one observable heartbeat, never a row), failures loud (named on the status surface).
|
|
6
|
+
//
|
|
7
|
+
// The verbs themselves are UNCHANGED — findOverdue/findUndelivered become this loop's
|
|
8
|
+
// library. Selection is by DESTINATION + obligation shape across ALL states, never by tag
|
|
9
|
+
// (the 0.5.3 custody-sweep lesson: tag sweeps miss founding rows; terminal states are read,
|
|
10
|
+
// not skipped). Sweep-finding rows self-exclude by their own stamp tag — exclusion, not
|
|
11
|
+
// selection.
|
|
12
|
+
//
|
|
13
|
+
// S01 seam (spec Amendment A1, cross-cited in both specs): the undelivered half SKIPS rows
|
|
14
|
+
// carrying a LIVE S01 wake-retry ladder — S01 records its ladder on the row's transitions
|
|
15
|
+
// exactly so this filter is derivable — and remains the net for what S01 excludes: the
|
|
16
|
+
// laddered-then-exhausted handback (exactly one finding, never double-reported) and
|
|
17
|
+
// created-with-destination obligations (S01's baton filter excludes them; the unclaimed
|
|
18
|
+
// net below sweeps them). S01 imports the marker vocabulary from HERE so the two slices
|
|
19
|
+
// share one contract instead of two guesses. S03 owns park/wake honesty: state=blocked rows
|
|
20
|
+
// legitimately wait and are never findings.
|
|
21
|
+
import { stalledPickupFinding } from "./queue-pickup.js";
|
|
22
|
+
import { SettingsStore } from "./user-settings/settings-store.js";
|
|
23
|
+
export const STUCK_SWEEP_INTERVAL_KEY = "queue.stuck_sweep_interval_seconds";
|
|
24
|
+
export const DEFAULT_STUCK_SWEEP_INTERVAL_SECONDS = 300;
|
|
25
|
+
export const STUCK_SWEEP_UNCLAIMED_AGE_KEY = "queue.stuck_sweep_unclaimed_age_minutes";
|
|
26
|
+
export const DEFAULT_STUCK_SWEEP_UNCLAIMED_AGE_MINUTES = 60;
|
|
27
|
+
/** Stamp tag on every routed finding row: the sweep's self-exclusion mark. */
|
|
28
|
+
export const STUCK_SWEEP_FINDING_TAG = "stuck-sweep-finding";
|
|
29
|
+
// S01 ladder marker vocabulary (the seam contract). S01 writes these transition-note
|
|
30
|
+
// prefixes; the sweep derives "live ladder" from their presence. A ladder is LIVE when
|
|
31
|
+
// attempt/rung markers exist without an exhausted marker; an exhausted ladder is the
|
|
32
|
+
// sweep's net again.
|
|
33
|
+
export const LADDER_ATTEMPT_PREFIX = "wake-attempt:";
|
|
34
|
+
export const LADDER_RUNG_PREFIX = "escalation-rung:";
|
|
35
|
+
export const LADDER_EXHAUSTED_PREFIX = "ladder-exhausted:";
|
|
36
|
+
/** Idempotency key: one open finding row per (stuck row, finding kind). */
|
|
37
|
+
export function findingDedupTag(kind, qitemId) {
|
|
38
|
+
return `stuck-sweep:${kind}:${qitemId}`;
|
|
39
|
+
}
|
|
40
|
+
/** The loop's observable heartbeat — surfaced on /healthz so a quiet sweep is cheap but
|
|
41
|
+
* never invisible, and a failing sweep is loud without needing a row. */
|
|
42
|
+
export function createStuckSweepStatus() {
|
|
43
|
+
const state = {
|
|
44
|
+
lastSweepAt: null,
|
|
45
|
+
lastOutcome: null,
|
|
46
|
+
lastError: null,
|
|
47
|
+
consecutiveFailures: 0,
|
|
48
|
+
findingsRouted: 0,
|
|
49
|
+
};
|
|
50
|
+
return {
|
|
51
|
+
record(outcome, detail) {
|
|
52
|
+
state.lastSweepAt = new Date().toISOString();
|
|
53
|
+
state.lastOutcome = outcome;
|
|
54
|
+
state.lastError = outcome === "failed" ? (detail?.error ?? "unknown error") : null;
|
|
55
|
+
state.consecutiveFailures = outcome === "failed" ? state.consecutiveFailures + 1 : 0;
|
|
56
|
+
if (detail?.findings)
|
|
57
|
+
state.findingsRouted += detail.findings;
|
|
58
|
+
},
|
|
59
|
+
snapshot() {
|
|
60
|
+
return { ...state };
|
|
61
|
+
},
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
/** Cadence, fresh-read with fail-open defaults (the queue-pickup precedent: a config flip
|
|
65
|
+
* applies to the next tick, and a settings error never silences the sweep). */
|
|
66
|
+
export function resolveStuckSweepIntervalSeconds() {
|
|
67
|
+
try {
|
|
68
|
+
const v = new SettingsStore().resolveOne(STUCK_SWEEP_INTERVAL_KEY).value;
|
|
69
|
+
const n = typeof v === "number" ? v : Number(v);
|
|
70
|
+
return Number.isFinite(n) && n > 0 ? n : DEFAULT_STUCK_SWEEP_INTERVAL_SECONDS;
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
return DEFAULT_STUCK_SWEEP_INTERVAL_SECONDS;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
export function resolveStuckSweepUnclaimedAgeMinutes() {
|
|
77
|
+
try {
|
|
78
|
+
const v = new SettingsStore().resolveOne(STUCK_SWEEP_UNCLAIMED_AGE_KEY).value;
|
|
79
|
+
const n = typeof v === "number" ? v : Number(v);
|
|
80
|
+
return Number.isFinite(n) && n > 0 ? n : DEFAULT_STUCK_SWEEP_UNCLAIMED_AGE_MINUTES;
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
return DEFAULT_STUCK_SWEEP_UNCLAIMED_AGE_MINUTES;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
/** The durable session→node binding (the session-registry precedent: latest sessions row
|
|
87
|
+
* for the canonical name). Canonical session names (dash form, `review-r2@rig`) and node
|
|
88
|
+
* logical ids (dotted form, `review.r2`) are INDEPENDENT identities — the live fleet has
|
|
89
|
+
* zero cases where they match — so resolution NEVER string-converts between them. */
|
|
90
|
+
export function resolveSessionNodeId(db, session) {
|
|
91
|
+
const row = db
|
|
92
|
+
.prepare("SELECT node_id FROM sessions WHERE session_name = ? ORDER BY id DESC LIMIT 1")
|
|
93
|
+
.get(session);
|
|
94
|
+
return row?.node_id ?? null;
|
|
95
|
+
}
|
|
96
|
+
/** Default orchestrator derivation: the destination's BOUND node → the source of its
|
|
97
|
+
* delegates_to edge → that parent node's CURRENT canonical session binding. A session
|
|
98
|
+
* outside the recorded topology, or a parent with no session binding, resolves to null
|
|
99
|
+
* (there is no orchestrator session to wake — never synthesize one). */
|
|
100
|
+
export function defaultResolveOrchestrator(db, session) {
|
|
101
|
+
const nodeId = resolveSessionNodeId(db, session);
|
|
102
|
+
if (!nodeId)
|
|
103
|
+
return null;
|
|
104
|
+
const row = db
|
|
105
|
+
.prepare(`SELECT s.session_name AS parentSession FROM edges e
|
|
106
|
+
JOIN sessions s ON s.node_id = e.source_id
|
|
107
|
+
WHERE e.target_id = ? AND e.kind = 'delegates_to'
|
|
108
|
+
ORDER BY s.created_at DESC, s.id DESC
|
|
109
|
+
LIMIT 1`)
|
|
110
|
+
.get(nodeId);
|
|
111
|
+
return row?.parentSession ?? null;
|
|
112
|
+
}
|
|
113
|
+
/** A live ladder = attempt/rung markers present without an exhausted marker. */
|
|
114
|
+
function hasLiveLadder(db, qitemId) {
|
|
115
|
+
const notes = db
|
|
116
|
+
.prepare("SELECT transition_note FROM queue_transitions WHERE qitem_id = ?")
|
|
117
|
+
.all(qitemId);
|
|
118
|
+
let laddered = false;
|
|
119
|
+
for (const { transition_note: note } of notes) {
|
|
120
|
+
if (!note)
|
|
121
|
+
continue;
|
|
122
|
+
if (note.startsWith(LADDER_EXHAUSTED_PREFIX))
|
|
123
|
+
return false;
|
|
124
|
+
if (note.startsWith(LADDER_ATTEMPT_PREFIX) || note.startsWith(LADDER_RUNG_PREFIX))
|
|
125
|
+
laddered = true;
|
|
126
|
+
}
|
|
127
|
+
return laddered;
|
|
128
|
+
}
|
|
129
|
+
function minutesSince(iso, now) {
|
|
130
|
+
if (!iso)
|
|
131
|
+
return 0;
|
|
132
|
+
const then = Date.parse(iso);
|
|
133
|
+
if (Number.isNaN(then))
|
|
134
|
+
return 0;
|
|
135
|
+
return Math.max(0, Math.round((now.getTime() - then) / 60_000));
|
|
136
|
+
}
|
|
137
|
+
function lastTransitionLine(db, qitemId) {
|
|
138
|
+
const row = db
|
|
139
|
+
.prepare("SELECT ts, transition_note FROM queue_transitions WHERE qitem_id = ? ORDER BY ts DESC LIMIT 1")
|
|
140
|
+
.get(qitemId);
|
|
141
|
+
return row ? `${row.transition_note ?? "(no note)"} at ${row.ts}` : "(no transitions)";
|
|
142
|
+
}
|
|
143
|
+
function isFindingRow(item) {
|
|
144
|
+
return (item.tags ?? []).includes(STUCK_SWEEP_FINDING_TAG);
|
|
145
|
+
}
|
|
146
|
+
function evidenceBody(db, c) {
|
|
147
|
+
return (`STUCK SWEEP FINDING (${c.kind})\n` +
|
|
148
|
+
`row: ${c.row.qitemId}\n` +
|
|
149
|
+
`destination: ${c.row.destinationSession} (source ${c.row.sourceSession}, state ${c.row.state})\n` +
|
|
150
|
+
`age: ${c.ageMinutes} min\n` +
|
|
151
|
+
`last transition: ${lastTransitionLine(db, c.row.qitemId)}\n` +
|
|
152
|
+
`why: ${c.why}\n` +
|
|
153
|
+
`Resolve the underlying row; the sweep closes this finding itself once the row is no longer stuck.`);
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* One sweep pass. Instance-wide (no rig scope — the loop is the net for every rig the
|
|
157
|
+
* daemon carries). Never throws: a sweep that cannot run reports outcome=failed loudly
|
|
158
|
+
* on the status surface and the log, because a silent skip is exactly the class this
|
|
159
|
+
* slice exists to kill.
|
|
160
|
+
*/
|
|
161
|
+
export async function runStuckSweep(deps) {
|
|
162
|
+
const log = deps.log ?? ((line) => console.error(line));
|
|
163
|
+
const status = deps.status;
|
|
164
|
+
try {
|
|
165
|
+
const now = deps.now ?? new Date();
|
|
166
|
+
const ageMinutes = deps.unclaimedAgeMinutes ?? resolveStuckSweepUnclaimedAgeMinutes();
|
|
167
|
+
const resolveOrch = deps.resolveOrchestrator ?? ((session) => defaultResolveOrchestrator(deps.db, session));
|
|
168
|
+
const candidates = [];
|
|
169
|
+
// Half 1 — claimed-never-closed. The claimant holds the obligation; the finding
|
|
170
|
+
// routes to them.
|
|
171
|
+
for (const row of deps.queueRepo.findOverdue({ now: now.toISOString() })) {
|
|
172
|
+
if (isFindingRow(row))
|
|
173
|
+
continue;
|
|
174
|
+
candidates.push({
|
|
175
|
+
kind: "overdue-claim",
|
|
176
|
+
row,
|
|
177
|
+
route: row.destinationSession,
|
|
178
|
+
ageMinutes: minutesSince(row.closureRequiredAt ?? row.claimedAt, now),
|
|
179
|
+
why: "claimed and past closure_required_at with no closure",
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
// S04 seam — a claimed row with no later motion past the pickup threshold. The
|
|
183
|
+
// pickup module remains the ONE derivation rule; this loop only enumerates and routes.
|
|
184
|
+
const claimedRows = deps.db
|
|
185
|
+
.prepare("SELECT qitem_id FROM queue_items WHERE state = 'in-progress' AND claimed_at IS NOT NULL")
|
|
186
|
+
.all();
|
|
187
|
+
for (const { qitem_id } of claimedRows) {
|
|
188
|
+
const row = deps.queueRepo.getById(qitem_id);
|
|
189
|
+
if (!row || isFindingRow(row))
|
|
190
|
+
continue;
|
|
191
|
+
const stalled = stalledPickupFinding(row);
|
|
192
|
+
if (!stalled)
|
|
193
|
+
continue;
|
|
194
|
+
candidates.push({
|
|
195
|
+
kind: stalled.kind,
|
|
196
|
+
row,
|
|
197
|
+
route: stalled.target,
|
|
198
|
+
ageMinutes: minutesSince(row.claimedAt, now),
|
|
199
|
+
why: stalled.evidence,
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
// Half 2 — sender-believed-delivered-never-woken. Nobody holds it (the wake failed),
|
|
203
|
+
// so it routes to the destination's orchestrator when one is derivable. Rows with a
|
|
204
|
+
// live S01 ladder are S01's territory; an exhausted ladder is the handback and lands
|
|
205
|
+
// here exactly once (the dedup tag keeps it to one finding).
|
|
206
|
+
for (const row of deps.queueRepo.findUndelivered()) {
|
|
207
|
+
if (isFindingRow(row))
|
|
208
|
+
continue;
|
|
209
|
+
if (hasLiveLadder(deps.db, row.qitemId))
|
|
210
|
+
continue;
|
|
211
|
+
candidates.push({
|
|
212
|
+
kind: "undelivered-wake",
|
|
213
|
+
row,
|
|
214
|
+
route: resolveOrch(row.destinationSession) ?? row.destinationSession,
|
|
215
|
+
ageMinutes: minutesSince(row.tsCreated, now),
|
|
216
|
+
why: `wake failed (${row.lastNudgeResult ?? "failed"}) and nothing retried it`,
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
// The A1 net — created-with-destination rows carrying real obligations, unclaimed past
|
|
220
|
+
// the config-keyed age. Parks (state=blocked) legitimately wait and never appear here;
|
|
221
|
+
// failed-nudge rows already surfaced in half 2; laddered rows are S01's.
|
|
222
|
+
const cutoff = new Date(now.getTime() - ageMinutes * 60_000).toISOString();
|
|
223
|
+
const unclaimedRows = deps.db
|
|
224
|
+
.prepare(`SELECT qitem_id FROM queue_items
|
|
225
|
+
WHERE state = 'pending'
|
|
226
|
+
AND claimed_at IS NULL
|
|
227
|
+
AND destination_session IS NOT NULL AND destination_session != ''
|
|
228
|
+
AND ts_created <= ?
|
|
229
|
+
AND (last_nudge_result IS NULL OR last_nudge_result NOT LIKE 'failed:%')`)
|
|
230
|
+
.all(cutoff);
|
|
231
|
+
for (const { qitem_id } of unclaimedRows) {
|
|
232
|
+
const row = deps.queueRepo.getById(qitem_id);
|
|
233
|
+
if (!row || isFindingRow(row))
|
|
234
|
+
continue;
|
|
235
|
+
if (hasLiveLadder(deps.db, row.qitemId))
|
|
236
|
+
continue;
|
|
237
|
+
candidates.push({
|
|
238
|
+
kind: "unclaimed-obligation",
|
|
239
|
+
row,
|
|
240
|
+
route: resolveOrch(row.destinationSession) ?? row.destinationSession,
|
|
241
|
+
ageMinutes: minutesSince(row.tsCreated, now),
|
|
242
|
+
why: `created with a destination and unclaimed for ${minutesSince(row.tsCreated, now)} min (threshold ${ageMinutes})`,
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
// The custody class — a terminal row whose closure names a successor qitem that does
|
|
246
|
+
// not exist. Terminal states are read, not skipped. Shape-discriminated: only
|
|
247
|
+
// closure targets that name a qitem id are successor claims (handoff closures also
|
|
248
|
+
// record plain session names there; those are not successor claims).
|
|
249
|
+
const danglingRows = deps.db
|
|
250
|
+
.prepare(`SELECT q.qitem_id FROM queue_items q
|
|
251
|
+
WHERE q.state IN ('done', 'canceled')
|
|
252
|
+
AND q.closure_target LIKE 'qitem-%'
|
|
253
|
+
AND NOT EXISTS (SELECT 1 FROM queue_items s WHERE s.qitem_id = q.closure_target)`)
|
|
254
|
+
.all();
|
|
255
|
+
for (const { qitem_id } of danglingRows) {
|
|
256
|
+
const row = deps.queueRepo.getById(qitem_id);
|
|
257
|
+
if (!row || isFindingRow(row))
|
|
258
|
+
continue;
|
|
259
|
+
candidates.push({
|
|
260
|
+
kind: "dangling-closure",
|
|
261
|
+
row,
|
|
262
|
+
route: row.destinationSession,
|
|
263
|
+
ageMinutes: minutesSince(row.tsUpdated, now),
|
|
264
|
+
why: `closed (${row.closureReason ?? "?"}) naming successor ${row.closureTarget}, which does not exist`,
|
|
265
|
+
});
|
|
266
|
+
}
|
|
267
|
+
// Route: idempotent per (row, kind). An existing open finding refreshes its age; a
|
|
268
|
+
// new one is created durable + waking (the create path's default nudge).
|
|
269
|
+
const findings = [];
|
|
270
|
+
const liveDedupTags = new Set();
|
|
271
|
+
for (const c of candidates) {
|
|
272
|
+
const dedupTag = findingDedupTag(c.kind, c.row.qitemId);
|
|
273
|
+
liveDedupTags.add(dedupTag);
|
|
274
|
+
const existing = deps.db
|
|
275
|
+
.prepare(`SELECT qitem_id, source_session FROM queue_items
|
|
276
|
+
WHERE state IN ('pending', 'in-progress', 'blocked')
|
|
277
|
+
AND tags LIKE ?
|
|
278
|
+
LIMIT 1`)
|
|
279
|
+
.get(`%"${dedupTag}"%`);
|
|
280
|
+
if (existing) {
|
|
281
|
+
await deps.queueRepo.update({
|
|
282
|
+
qitemId: existing.qitem_id,
|
|
283
|
+
actorSession: existing.source_session,
|
|
284
|
+
transitionNote: `stuck-sweep refresh: age now ${c.ageMinutes} min (${c.kind} on ${c.row.qitemId})`,
|
|
285
|
+
});
|
|
286
|
+
findings.push({ kind: c.kind, qitemId: c.row.qitemId, findingQitemId: existing.qitem_id, action: "refreshed" });
|
|
287
|
+
}
|
|
288
|
+
else {
|
|
289
|
+
const created = await deps.queueRepo.create({
|
|
290
|
+
// The detector is machinery, not a seat: the obligation's own creator is the
|
|
291
|
+
// finding's source (the workflow-exception precedent).
|
|
292
|
+
sourceSession: c.row.sourceSession,
|
|
293
|
+
destinationSession: c.route,
|
|
294
|
+
body: evidenceBody(deps.db, c),
|
|
295
|
+
summary: `Stuck sweep: ${c.kind} on ${c.row.qitemId} (${c.ageMinutes} min)`,
|
|
296
|
+
tags: [STUCK_SWEEP_FINDING_TAG, dedupTag],
|
|
297
|
+
});
|
|
298
|
+
findings.push({ kind: c.kind, qitemId: c.row.qitemId, findingQitemId: created.qitemId, action: "created" });
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
// Resolution: an open finding whose underlying condition is no longer detected closes
|
|
302
|
+
// with its reason — the sweep cleans up after itself, no human unwind.
|
|
303
|
+
const openFindings = deps.db
|
|
304
|
+
.prepare(`SELECT qitem_id, source_session, tags FROM queue_items
|
|
305
|
+
WHERE state IN ('pending', 'in-progress', 'blocked')
|
|
306
|
+
AND tags LIKE ?`)
|
|
307
|
+
.all(`%"${STUCK_SWEEP_FINDING_TAG}"%`);
|
|
308
|
+
for (const f of openFindings) {
|
|
309
|
+
let tags = [];
|
|
310
|
+
try {
|
|
311
|
+
tags = JSON.parse(f.tags);
|
|
312
|
+
}
|
|
313
|
+
catch {
|
|
314
|
+
continue;
|
|
315
|
+
}
|
|
316
|
+
const dedupTag = tags.find((t) => t.startsWith("stuck-sweep:"));
|
|
317
|
+
if (!dedupTag || liveDedupTags.has(dedupTag))
|
|
318
|
+
continue;
|
|
319
|
+
const [, kind, stuckId] = dedupTag.match(/^stuck-sweep:([a-z-]+):(.+)$/) ?? [];
|
|
320
|
+
await deps.queueRepo.update({
|
|
321
|
+
qitemId: f.qitem_id,
|
|
322
|
+
actorSession: f.source_session,
|
|
323
|
+
state: "done",
|
|
324
|
+
closureReason: "no-follow-on",
|
|
325
|
+
transitionNote: `stuck-sweep resolved: ${kind ?? "finding"} on ${stuckId ?? "row"} no longer detected`,
|
|
326
|
+
});
|
|
327
|
+
if (kind && stuckId) {
|
|
328
|
+
findings.push({
|
|
329
|
+
kind: kind,
|
|
330
|
+
qitemId: stuckId,
|
|
331
|
+
findingQitemId: f.qitem_id,
|
|
332
|
+
action: "closed",
|
|
333
|
+
});
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
const outcome = findings.length > 0 ? "findings" : "clean";
|
|
337
|
+
status?.record(outcome, { findings: findings.filter((f) => f.action !== "closed").length });
|
|
338
|
+
return { outcome, findings };
|
|
339
|
+
}
|
|
340
|
+
catch (err) {
|
|
341
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
342
|
+
// Loud, never silent: the failure lands on the log AND the status surface (healthz).
|
|
343
|
+
log(`[stuck-sweep] SWEEP FAILED (skipping this tick loudly): ${message}`);
|
|
344
|
+
status?.record("failed", { error: message });
|
|
345
|
+
return { outcome: "failed", findings: [], error: message };
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
//# sourceMappingURL=queue-stuck-sweep.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queue-stuck-sweep.js","sourceRoot":"","sources":["../../src/domain/queue-stuck-sweep.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import type Database from "better-sqlite3";
|
|
2
|
+
import type { QueueRepository } from "./queue-repository.js";
|
|
3
|
+
export declare const WAKE_RETRY_INTERVAL_KEY = "queue.wake_retry_interval_seconds";
|
|
4
|
+
export declare const DEFAULT_WAKE_RETRY_INTERVAL_SECONDS = 300;
|
|
5
|
+
export declare const WAKE_RETRY_CAP_KEY = "queue.wake_retry_cap";
|
|
6
|
+
export declare const DEFAULT_WAKE_RETRY_CAP = 3;
|
|
7
|
+
export declare const WAKE_UNCONFIRMED_WINDOW_KEY = "queue.wake_unconfirmed_window_minutes";
|
|
8
|
+
export declare const DEFAULT_WAKE_UNCONFIRMED_WINDOW_MINUTES = 30;
|
|
9
|
+
export declare const WAKE_SWAP_GRACE_KEY = "queue.wake_swap_grace_seconds";
|
|
10
|
+
export declare const DEFAULT_WAKE_SWAP_GRACE_SECONDS = 180;
|
|
11
|
+
/** The operator-declared suspension override (F2: override, never the mechanism).
|
|
12
|
+
* Format: comma-separated `<session>:<untilIso>` pairs; fresh-read every tick. */
|
|
13
|
+
export declare const WAKE_SUSPEND_OVERRIDE_ENV = "OPENRIG_WAKE_SUSPEND";
|
|
14
|
+
/** Stamp tag on the per-destination aggregate escalation row. */
|
|
15
|
+
export declare const WAKE_ESCALATION_TAG = "wake-escalation";
|
|
16
|
+
export declare function escalationDedupTag(destination: string): string;
|
|
17
|
+
export declare const LADDER_SUSPEND_PREFIX = "ladder-suspend:";
|
|
18
|
+
export declare const LADDER_RESUME_PREFIX = "ladder-resume:";
|
|
19
|
+
export interface WakeLadderStatusSnapshot {
|
|
20
|
+
lastTickAt: string | null;
|
|
21
|
+
lastOutcome: "clean" | "actions" | "failed" | null;
|
|
22
|
+
lastError: string | null;
|
|
23
|
+
consecutiveFailures: number;
|
|
24
|
+
activeLadders: number;
|
|
25
|
+
escalationsOpen: number;
|
|
26
|
+
exhaustedTotal: number;
|
|
27
|
+
}
|
|
28
|
+
export interface WakeLadderStatus {
|
|
29
|
+
record(outcome: "clean" | "actions" | "failed", detail?: {
|
|
30
|
+
error?: string;
|
|
31
|
+
active?: number;
|
|
32
|
+
escalations?: number;
|
|
33
|
+
exhausted?: number;
|
|
34
|
+
}): void;
|
|
35
|
+
snapshot(): WakeLadderStatusSnapshot;
|
|
36
|
+
}
|
|
37
|
+
/** The loop's observable heartbeat — rides /healthz beside the S02 sweep's. */
|
|
38
|
+
export declare function createWakeLadderStatus(): WakeLadderStatus;
|
|
39
|
+
export declare const resolveWakeRetryIntervalSeconds: () => number;
|
|
40
|
+
export declare const resolveWakeRetryCap: () => number;
|
|
41
|
+
export declare const resolveWakeUnconfirmedWindowMinutes: () => number;
|
|
42
|
+
export declare const resolveWakeSwapGraceSeconds: () => number;
|
|
43
|
+
export interface WakeLadderDeps {
|
|
44
|
+
db: Database.Database;
|
|
45
|
+
queueRepo: QueueRepository;
|
|
46
|
+
status?: WakeLadderStatus;
|
|
47
|
+
/** Attempt a wake to `target` for `qitemId`; returns the outcome in the queue nudge
|
|
48
|
+
* grammar (verified | delivered-ack-pending | indeterminate:* | failed:*). Default
|
|
49
|
+
* rides maybeNudge — the wake is the envelope pointer, never the content. */
|
|
50
|
+
attemptWake?: (qitemId: string, target: string) => Promise<string>;
|
|
51
|
+
resolveOrchestrator?: (session: string) => string | null;
|
|
52
|
+
retryIntervalSeconds?: number;
|
|
53
|
+
retryCap?: number;
|
|
54
|
+
unconfirmedWindowMinutes?: number;
|
|
55
|
+
swapGraceSeconds?: number;
|
|
56
|
+
now?: Date;
|
|
57
|
+
log?: (line: string) => void;
|
|
58
|
+
}
|
|
59
|
+
export interface WakeLadderAction {
|
|
60
|
+
qitemId: string;
|
|
61
|
+
action: "retry" | "escalate-orchestrator" | "escalate-operator" | "suspend" | "resume" | "exhaust";
|
|
62
|
+
target?: string;
|
|
63
|
+
}
|
|
64
|
+
export interface WakeLadderTickResult {
|
|
65
|
+
outcome: "clean" | "actions" | "failed";
|
|
66
|
+
actions: WakeLadderAction[];
|
|
67
|
+
error?: string;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* One ladder tick. Everything is derived from the row + transition log — the tick holds
|
|
71
|
+
* no memory (F6). Never throws: a tick that cannot run is loud on the status surface
|
|
72
|
+
* and the log, because a silent skip is the exact class this slice kills.
|
|
73
|
+
*/
|
|
74
|
+
export declare function runWakeLadderTick(deps: WakeLadderDeps): Promise<WakeLadderTickResult>;
|
|
75
|
+
export interface WakeLadderSchedulerDeps {
|
|
76
|
+
runTick: () => Promise<WakeLadderTickResult>;
|
|
77
|
+
tickIntervalMs?: number;
|
|
78
|
+
setTimer?: (cb: () => void, ms: number) => NodeJS.Timeout;
|
|
79
|
+
clearTimer?: (handle: NodeJS.Timeout) => void;
|
|
80
|
+
onTickError?: (err: unknown) => void;
|
|
81
|
+
}
|
|
82
|
+
/** The standing loop — the watchdog-scheduler pattern (injected seams, runTickNow, no
|
|
83
|
+
* overlapping ticks), so the ladder is unit-drivable without timers. */
|
|
84
|
+
export declare class WakeLadderScheduler {
|
|
85
|
+
private readonly deps;
|
|
86
|
+
private timer;
|
|
87
|
+
private inflight;
|
|
88
|
+
private shuttingDown;
|
|
89
|
+
private started;
|
|
90
|
+
constructor(deps: WakeLadderSchedulerDeps);
|
|
91
|
+
start(): void;
|
|
92
|
+
stop(): Promise<void>;
|
|
93
|
+
runTickNow(): Promise<void>;
|
|
94
|
+
private scheduleNext;
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=queue-wake-ladder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queue-wake-ladder.d.ts","sourceRoot":"","sources":["../../src/domain/queue-wake-ladder.ts"],"names":[],"mappings":"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"}
|