@openrig/cli 0.5.4 → 0.5.6
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/continuity/apprentice-cutover.md +19 -0
- package/daemon/assets/continuity/apprentice-prepare.md +17 -0
- 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 +271 -124
- package/daemon/assets/plugins/openrig-core/skills/applying-a-permission-policy/SKILL.md +3 -3
- package/daemon/assets/plugins/openrig-core/skills/claude-compaction-restore/scripts/precompact-hook.mjs +0 -0
- package/daemon/assets/plugins/openrig-core/skills/claude-compaction-restore/scripts/restore-from-jsonl.mjs +0 -0
- package/daemon/assets/plugins/openrig-core/skills/forming-an-openrig-mental-model/SKILL.md +4 -9
- package/daemon/assets/plugins/openrig-core/skills/messaging-the-human/SKILL.md +82 -118
- package/daemon/assets/plugins/openrig-core/skills/mission-slice-sop/SKILL.md +20 -26
- package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/SKILL.md +397 -0
- package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/scripts/compose.py +572 -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 +11 -6
- package/daemon/assets/plugins/openrig-core/skills/openrig-user/SKILL.md +1 -12
- package/daemon/assets/plugins/openrig-core/skills/orienting-to-an-inherited-seat/CHANGELOG.md +1 -1
- package/daemon/assets/plugins/openrig-core/skills/orienting-to-an-inherited-seat/SKILL.md +15 -0
- package/daemon/assets/plugins/openrig-core/skills/queue-handoff/SKILL.md +4 -16
- 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 +264 -0
- package/daemon/assets/plugins/openrig-core/skills/retiring-and-inheriting-a-seat/SKILL.md +26 -6
- package/daemon/assets/plugins/openrig-core/skills/seat-continuity-and-handover/SKILL.md +3 -0
- package/daemon/assets/plugins/openrig-core/skills/seat-continuity-and-handover/references/apprentice-evidence-toolkit.md +32 -0
- package/daemon/assets/plugins/openrig-core/skills/seat-continuity-and-handover/references/apprentice-successor-seat-cutover.md +256 -0
- package/daemon/assets/plugins/openrig-core/skills/seat-continuity-and-handover/references/orchestrator-role.md +40 -0
- package/daemon/assets/plugins/openrig-core/skills/software-for-agents/SKILL.md +9 -4
- package/daemon/assets/vm-preview-fixtures/README.md +16 -38
- package/daemon/assets/vm-preview-fixtures/workflows/sample-basic-loop.yaml +4 -5
- package/daemon/context-packs/onboarding-width/manifest.yaml +14 -0
- package/daemon/context-packs/{world/install/reference-material.md → onboarding-width/public-reference-material.md} +5 -27
- 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 +2 -1
- package/daemon/context-packs/skills/core/agent-startup-and-context-ingestion/manifest.yaml +2 -1
- package/daemon/context-packs/skills/core/cross-host-rig-commands/SKILL.md +6 -13
- package/daemon/context-packs/skills/core/cross-host-rig-commands/manifest.yaml +2 -1
- package/daemon/context-packs/skills/core/human-in-the-loop/manifest.yaml +2 -1
- package/daemon/context-packs/skills/core/messaging-the-human/SKILL.md +98 -0
- package/daemon/context-packs/skills/core/messaging-the-human/manifest.yaml +10 -0
- package/daemon/context-packs/skills/core/openrig-architect/manifest.yaml +2 -1
- package/daemon/context-packs/skills/core/openrig-cmux/manifest.yaml +2 -1
- package/daemon/context-packs/skills/core/openrig-herdr/manifest.yaml +2 -1
- package/daemon/context-packs/skills/core/openrig-skills/SKILL.md +118 -0
- package/daemon/context-packs/skills/core/openrig-skills/manifest.yaml +10 -0
- package/daemon/context-packs/skills/core/openrig-upgrade/SKILL.md +19 -75
- package/daemon/context-packs/skills/core/openrig-upgrade/manifest.yaml +2 -1
- package/daemon/context-packs/skills/core/rig-bundles-and-shareable-artifacts/manifest.yaml +2 -1
- package/daemon/context-packs/skills/core/rig-lifecycle/manifest.yaml +2 -1
- package/daemon/context-packs/skills/core/session-source-fork/manifest.yaml +2 -1
- package/daemon/context-packs/skills/core/specification-system/manifest.yaml +2 -1
- package/daemon/context-packs/skills/core/topology-mutation-and-seat-management/manifest.yaml +2 -1
- package/daemon/context-packs/skills/core/watchdog/SKILL.md +4 -10
- package/daemon/context-packs/skills/core/watchdog/manifest.yaml +2 -1
- package/daemon/context-packs/skills/pm/backlog-capture/manifest.yaml +2 -1
- package/daemon/context-packs/skills/pm/context-builder/manifest.yaml +2 -1
- package/daemon/context-packs/skills/pm/exec-summary/manifest.yaml +2 -1
- package/daemon/context-packs/skills/pm/office-hours/manifest.yaml +2 -1
- package/daemon/context-packs/skills/pm/plan-review/manifest.yaml +2 -1
- package/daemon/context-packs/skills/pm/requirements-writer/manifest.yaml +2 -1
- package/daemon/context-packs/skills/pm/ui-mockup/manifest.yaml +2 -1
- package/daemon/context-packs/skills/pods/development-team/manifest.yaml +2 -1
- package/daemon/context-packs/skills/pods/orchestration-team/manifest.yaml +2 -1
- package/daemon/context-packs/skills/pods/oversight-team/manifest.yaml +2 -1
- package/daemon/context-packs/skills/pods/review-team/manifest.yaml +2 -1
- package/daemon/context-packs/skills/process/agent-browser/manifest.yaml +2 -1
- package/daemon/context-packs/skills/process/brainstorming/manifest.yaml +2 -1
- package/daemon/context-packs/skills/process/context-engineering/manifest.yaml +2 -1
- package/daemon/context-packs/skills/process/dogfood/manifest.yaml +2 -1
- package/daemon/context-packs/skills/process/executing-plans/manifest.yaml +2 -1
- package/daemon/context-packs/skills/process/frontend-design/manifest.yaml +2 -1
- package/daemon/context-packs/skills/process/systematic-debugging/find-polluter.sh +0 -0
- package/daemon/context-packs/skills/process/systematic-debugging/manifest.yaml +2 -1
- package/daemon/context-packs/skills/process/test-driven-development/manifest.yaml +2 -1
- package/daemon/context-packs/skills/process/using-superpowers/manifest.yaml +2 -1
- package/daemon/context-packs/skills/process/verification-before-completion/manifest.yaml +2 -1
- package/daemon/context-packs/skills/process/writing-plans/manifest.yaml +2 -1
- package/daemon/context-packs/world-example/manifest.yaml +21 -0
- package/daemon/context-packs/world-example/your-world.md +54 -0
- package/daemon/context-packs/world-public/boundaries.md +33 -0
- package/daemon/context-packs/world-public/build-your-world.md +84 -0
- package/daemon/context-packs/world-public/claims.yaml +205 -0
- package/daemon/context-packs/world-public/manifest.yaml +59 -0
- package/daemon/context-packs/world-public/start-here.md +51 -0
- package/daemon/context-packs/world-public/verify-world.sh +522 -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/context-pack-taxonomy-surface.d.ts +2 -0
- package/daemon/dist/context-pack-taxonomy-surface.d.ts.map +1 -0
- package/daemon/dist/context-pack-taxonomy-surface.js +6 -0
- package/daemon/dist/context-pack-taxonomy-surface.js.map +1 -0
- package/daemon/dist/db/all-migrations.d.ts +1 -1
- package/daemon/dist/db/all-migrations.d.ts.map +1 -1
- package/daemon/dist/db/all-migrations.js +12 -2
- 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/db/migrations/074_context_usage_watchdog.d.ts +4 -0
- package/daemon/dist/db/migrations/074_context_usage_watchdog.d.ts.map +1 -0
- package/daemon/dist/db/migrations/074_context_usage_watchdog.js +11 -0
- package/daemon/dist/db/migrations/074_context_usage_watchdog.js.map +1 -0
- package/daemon/dist/db/migrations/075_context_usage_watchdog_generation.d.ts +4 -0
- package/daemon/dist/db/migrations/075_context_usage_watchdog_generation.d.ts.map +1 -0
- package/daemon/dist/db/migrations/075_context_usage_watchdog_generation.js +8 -0
- package/daemon/dist/db/migrations/075_context_usage_watchdog_generation.js.map +1 -0
- package/daemon/dist/db/migrations/076_owner_notification_levels.d.ts +8 -0
- package/daemon/dist/db/migrations/076_owner_notification_levels.d.ts.map +1 -0
- package/daemon/dist/db/migrations/076_owner_notification_levels.js +15 -0
- package/daemon/dist/db/migrations/076_owner_notification_levels.js.map +1 -0
- package/daemon/dist/domain/active-occupant.d.ts +44 -0
- package/daemon/dist/domain/active-occupant.d.ts.map +1 -0
- package/daemon/dist/domain/active-occupant.js +72 -0
- package/daemon/dist/domain/active-occupant.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/agent-manifest.d.ts +6 -0
- package/daemon/dist/domain/agent-manifest.d.ts.map +1 -1
- package/daemon/dist/domain/agent-manifest.js +77 -15
- package/daemon/dist/domain/agent-manifest.js.map +1 -1
- package/daemon/dist/domain/agent-resolver.d.ts +11 -0
- package/daemon/dist/domain/agent-resolver.d.ts.map +1 -1
- package/daemon/dist/domain/agent-resolver.js +55 -0
- package/daemon/dist/domain/agent-resolver.js.map +1 -1
- 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/bundle-context-packs-router.d.ts +9 -2
- package/daemon/dist/domain/bundle-context-packs-router.d.ts.map +1 -1
- package/daemon/dist/domain/bundle-context-packs-router.js +18 -0
- package/daemon/dist/domain/bundle-context-packs-router.js.map +1 -1
- package/daemon/dist/domain/claude-compaction-enforcer.d.ts +7 -0
- package/daemon/dist/domain/claude-compaction-enforcer.d.ts.map +1 -1
- package/daemon/dist/domain/claude-compaction-enforcer.js +10 -0
- package/daemon/dist/domain/claude-compaction-enforcer.js.map +1 -1
- package/daemon/dist/domain/context-packs/context-pack-library-service.d.ts.map +1 -1
- package/daemon/dist/domain/context-packs/context-pack-library-service.js +7 -0
- package/daemon/dist/domain/context-packs/context-pack-library-service.js.map +1 -1
- package/daemon/dist/domain/context-packs/context-pack-types.d.ts +11 -0
- package/daemon/dist/domain/context-packs/context-pack-types.d.ts.map +1 -1
- package/daemon/dist/domain/context-packs/context-pack-types.js +11 -0
- package/daemon/dist/domain/context-packs/context-pack-types.js.map +1 -1
- package/daemon/dist/domain/context-packs/manifest-parser.d.ts.map +1 -1
- package/daemon/dist/domain/context-packs/manifest-parser.js +13 -1
- package/daemon/dist/domain/context-packs/manifest-parser.js.map +1 -1
- package/daemon/dist/domain/continuity-policy-materializer.d.ts +88 -0
- package/daemon/dist/domain/continuity-policy-materializer.d.ts.map +1 -0
- package/daemon/dist/domain/continuity-policy-materializer.js +290 -0
- package/daemon/dist/domain/continuity-policy-materializer.js.map +1 -0
- package/daemon/dist/domain/continuity-stack-packets.d.ts +65 -0
- package/daemon/dist/domain/continuity-stack-packets.d.ts.map +1 -0
- package/daemon/dist/domain/continuity-stack-packets.js +99 -0
- package/daemon/dist/domain/continuity-stack-packets.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/execution-view.d.ts +39 -0
- package/daemon/dist/domain/execution-view.d.ts.map +1 -0
- package/daemon/dist/domain/execution-view.js +707 -0
- package/daemon/dist/domain/execution-view.js.map +1 -0
- package/daemon/dist/domain/gateway/delivery-rules-engine.d.ts +60 -0
- package/daemon/dist/domain/gateway/delivery-rules-engine.d.ts.map +1 -0
- package/daemon/dist/domain/gateway/delivery-rules-engine.js +144 -0
- package/daemon/dist/domain/gateway/delivery-rules-engine.js.map +1 -0
- package/daemon/dist/domain/gateway/destination-resolver.d.ts +20 -0
- package/daemon/dist/domain/gateway/destination-resolver.d.ts.map +1 -0
- package/daemon/dist/domain/gateway/destination-resolver.js +52 -0
- package/daemon/dist/domain/gateway/destination-resolver.js.map +1 -0
- package/daemon/dist/domain/gateway/dispatcher.d.ts +3 -1
- package/daemon/dist/domain/gateway/dispatcher.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/dispatcher.js +9 -2
- package/daemon/dist/domain/gateway/dispatcher.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 +84 -0
- package/daemon/dist/domain/gateway/gateway-subsystem.d.ts.map +1 -0
- package/daemon/dist/domain/gateway/gateway-subsystem.js +151 -0
- package/daemon/dist/domain/gateway/gateway-subsystem.js.map +1 -0
- package/daemon/dist/domain/gateway/human-registry.d.ts +118 -1
- package/daemon/dist/domain/gateway/human-registry.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/human-registry.js +282 -1
- package/daemon/dist/domain/gateway/human-registry.js.map +1 -1
- package/daemon/dist/domain/gateway/operator-delivery-engine.d.ts +32 -0
- package/daemon/dist/domain/gateway/operator-delivery-engine.d.ts.map +1 -0
- package/daemon/dist/domain/gateway/operator-delivery-engine.js +86 -0
- package/daemon/dist/domain/gateway/operator-delivery-engine.js.map +1 -0
- package/{dist → daemon/dist/domain/gateway}/slack/config.d.ts +11 -7
- package/daemon/dist/domain/gateway/slack/config.d.ts.map +1 -0
- package/{dist → daemon/dist/domain/gateway}/slack/config.js +28 -10
- 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 +48 -9
- package/daemon/dist/domain/gateway/slack/inbound.d.ts.map +1 -0
- package/{dist → daemon/dist/domain/gateway}/slack/inbound.js +66 -14
- 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 +57 -0
- package/daemon/dist/domain/gateway/slack/outbound-driver.d.ts.map +1 -0
- package/daemon/dist/domain/gateway/slack/outbound-driver.js +103 -0
- package/daemon/dist/domain/gateway/slack/outbound-driver.js.map +1 -0
- package/daemon/dist/domain/gateway/slack/queue-access.d.ts +58 -0
- package/daemon/dist/domain/gateway/slack/queue-access.d.ts.map +1 -0
- package/daemon/dist/domain/gateway/slack/queue-access.js +99 -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 +129 -0
- package/daemon/dist/domain/gateway/slack/slack-api.d.ts.map +1 -0
- package/daemon/dist/domain/gateway/slack/slack-api.js +236 -0
- package/daemon/dist/domain/gateway/slack/slack-api.js.map +1 -0
- package/daemon/dist/domain/gateway/slack/slack-delivery.d.ts +53 -0
- package/daemon/dist/domain/gateway/slack/slack-delivery.d.ts.map +1 -0
- package/daemon/dist/domain/gateway/slack/slack-delivery.js +267 -0
- package/daemon/dist/domain/gateway/slack/slack-delivery.js.map +1 -0
- package/daemon/dist/domain/gateway/slack/slack-subsystem.d.ts +31 -0
- package/daemon/dist/domain/gateway/slack/slack-subsystem.d.ts.map +1 -0
- package/daemon/dist/domain/gateway/slack/slack-subsystem.js +473 -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/graph-projection.d.ts +6 -0
- package/daemon/dist/domain/graph-projection.d.ts.map +1 -1
- package/daemon/dist/domain/graph-projection.js +6 -0
- package/daemon/dist/domain/graph-projection.js.map +1 -1
- package/daemon/dist/domain/mission-control/mission-control-write-contract.d.ts.map +1 -1
- package/daemon/dist/domain/mission-control/mission-control-write-contract.js +1 -0
- package/daemon/dist/domain/mission-control/mission-control-write-contract.js.map +1 -1
- package/daemon/dist/domain/node-inventory.d.ts +41 -3
- package/daemon/dist/domain/node-inventory.d.ts.map +1 -1
- package/daemon/dist/domain/node-inventory.js +65 -48
- package/daemon/dist/domain/node-inventory.js.map +1 -1
- package/daemon/dist/domain/parked-query.d.ts +82 -0
- package/daemon/dist/domain/parked-query.d.ts.map +1 -0
- package/daemon/dist/domain/parked-query.js +127 -0
- package/daemon/dist/domain/parked-query.js.map +1 -0
- package/daemon/dist/domain/pod-bundle-assembler.d.ts.map +1 -1
- package/daemon/dist/domain/pod-bundle-assembler.js +12 -5
- package/daemon/dist/domain/pod-bundle-assembler.js.map +1 -1
- package/daemon/dist/domain/policies/context-usage-threshold.d.ts +7 -0
- package/daemon/dist/domain/policies/context-usage-threshold.d.ts.map +1 -0
- package/daemon/dist/domain/policies/context-usage-threshold.js +99 -0
- package/daemon/dist/domain/policies/context-usage-threshold.js.map +1 -0
- package/daemon/dist/domain/policies/delivery-deferral.d.ts +54 -0
- package/daemon/dist/domain/policies/delivery-deferral.d.ts.map +1 -0
- package/daemon/dist/domain/policies/delivery-deferral.js +153 -0
- package/daemon/dist/domain/policies/delivery-deferral.js.map +1 -0
- package/daemon/dist/domain/policies/delivery-digest-flush.d.ts +45 -0
- package/daemon/dist/domain/policies/delivery-digest-flush.d.ts.map +1 -0
- package/daemon/dist/domain/policies/delivery-digest-flush.js +94 -0
- package/daemon/dist/domain/policies/delivery-digest-flush.js.map +1 -0
- package/daemon/dist/domain/policies/parked-owner-consumer.d.ts +65 -0
- package/daemon/dist/domain/policies/parked-owner-consumer.d.ts.map +1 -0
- package/daemon/dist/domain/policies/parked-owner-consumer.js +244 -0
- package/daemon/dist/domain/policies/parked-owner-consumer.js.map +1 -0
- package/daemon/dist/domain/policies/types.d.ts +8 -0
- package/daemon/dist/domain/policies/types.d.ts.map +1 -1
- package/daemon/dist/domain/profile-resolver.d.ts +4 -0
- package/daemon/dist/domain/profile-resolver.d.ts.map +1 -1
- package/daemon/dist/domain/profile-resolver.js +58 -0
- package/daemon/dist/domain/profile-resolver.js.map +1 -1
- package/daemon/dist/domain/provider/provider-signals.d.ts +20 -1
- package/daemon/dist/domain/provider/provider-signals.d.ts.map +1 -1
- package/daemon/dist/domain/provider/provider-signals.js +64 -0
- package/daemon/dist/domain/provider/provider-signals.js.map +1 -1
- package/daemon/dist/domain/ps-projection.d.ts +7 -5
- package/daemon/dist/domain/ps-projection.d.ts.map +1 -1
- package/daemon/dist/domain/ps-projection.js +19 -32
- package/daemon/dist/domain/ps-projection.js.map +1 -1
- 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 +72 -0
- package/daemon/dist/domain/queue-pickup.js.map +1 -0
- package/daemon/dist/domain/queue-repository.d.ts +93 -28
- package/daemon/dist/domain/queue-repository.d.ts.map +1 -1
- package/daemon/dist/domain/queue-repository.js +626 -90
- package/daemon/dist/domain/queue-repository.js.map +1 -1
- package/daemon/dist/domain/queue-retention.d.ts.map +1 -1
- package/daemon/dist/domain/queue-retention.js +8 -2
- package/daemon/dist/domain/queue-retention.js.map +1 -1
- package/daemon/dist/domain/queue-stuck-sweep.d.ts +100 -0
- package/daemon/dist/domain/queue-stuck-sweep.d.ts.map +1 -0
- package/daemon/dist/domain/queue-stuck-sweep.js +485 -0
- package/daemon/dist/domain/queue-stuck-sweep.js.map +1 -0
- package/daemon/dist/domain/queue-transition-log.d.ts +10 -0
- package/daemon/dist/domain/queue-transition-log.d.ts.map +1 -1
- package/daemon/dist/domain/queue-transition-log.js +49 -11
- package/daemon/dist/domain/queue-transition-log.js.map +1 -1
- package/daemon/dist/domain/queue-wake-ladder.d.ts +114 -0
- package/daemon/dist/domain/queue-wake-ladder.d.ts.map +1 -0
- package/daemon/dist/domain/queue-wake-ladder.js +705 -0
- package/daemon/dist/domain/queue-wake-ladder.js.map +1 -0
- package/daemon/dist/domain/queue-wake-repository.d.ts +53 -0
- package/daemon/dist/domain/queue-wake-repository.d.ts.map +1 -0
- package/daemon/dist/domain/queue-wake-repository.js +129 -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/restore-check-service.js +1 -1
- package/daemon/dist/domain/restore-check-service.js.map +1 -1
- package/daemon/dist/domain/restore-orchestrator.d.ts +2 -1
- package/daemon/dist/domain/restore-orchestrator.d.ts.map +1 -1
- package/daemon/dist/domain/restore-orchestrator.js +88 -15
- package/daemon/dist/domain/restore-orchestrator.js.map +1 -1
- package/daemon/dist/domain/restore-plan-preview.d.ts +6 -2
- package/daemon/dist/domain/restore-plan-preview.d.ts.map +1 -1
- package/daemon/dist/domain/restore-plan-preview.js +37 -19
- package/daemon/dist/domain/restore-plan-preview.js.map +1 -1
- 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/rig-expansion-service.d.ts.map +1 -1
- package/daemon/dist/domain/rig-expansion-service.js +10 -9
- package/daemon/dist/domain/rig-expansion-service.js.map +1 -1
- package/daemon/dist/domain/rig-repository.d.ts +4 -0
- package/daemon/dist/domain/rig-repository.d.ts.map +1 -1
- package/daemon/dist/domain/rig-repository.js +21 -3
- package/daemon/dist/domain/rig-repository.js.map +1 -1
- package/daemon/dist/domain/rigspec-codec.d.ts.map +1 -1
- package/daemon/dist/domain/rigspec-codec.js +74 -4
- package/daemon/dist/domain/rigspec-codec.js.map +1 -1
- package/daemon/dist/domain/rigspec-instantiator.d.ts +7 -0
- package/daemon/dist/domain/rigspec-instantiator.d.ts.map +1 -1
- package/daemon/dist/domain/rigspec-instantiator.js +32 -0
- package/daemon/dist/domain/rigspec-instantiator.js.map +1 -1
- package/daemon/dist/domain/rigspec-schema.d.ts.map +1 -1
- package/daemon/dist/domain/rigspec-schema.js +32 -4
- package/daemon/dist/domain/rigspec-schema.js.map +1 -1
- package/daemon/dist/domain/scope/node-file.d.ts +8 -0
- package/daemon/dist/domain/scope/node-file.d.ts.map +1 -1
- package/daemon/dist/domain/scope/node-file.js +18 -0
- package/daemon/dist/domain/scope/node-file.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 +46 -4
- package/daemon/dist/domain/scope/scope-audit.d.ts.map +1 -1
- package/daemon/dist/domain/scope/scope-audit.js +79 -94
- 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/snapshot-capture.d.ts.map +1 -1
- package/daemon/dist/domain/snapshot-capture.js +6 -0
- package/daemon/dist/domain/snapshot-capture.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 +59 -4
- 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 +5 -1
- package/daemon/dist/domain/view-projector.d.ts.map +1 -1
- package/daemon/dist/domain/view-projector.js +65 -2
- package/daemon/dist/domain/view-projector.js.map +1 -1
- package/daemon/dist/domain/watchdog-jobs-repository.d.ts +25 -6
- package/daemon/dist/domain/watchdog-jobs-repository.d.ts.map +1 -1
- package/daemon/dist/domain/watchdog-jobs-repository.js +115 -32
- package/daemon/dist/domain/watchdog-jobs-repository.js.map +1 -1
- package/daemon/dist/domain/watchdog-policy-engine.d.ts +47 -1
- package/daemon/dist/domain/watchdog-policy-engine.d.ts.map +1 -1
- package/daemon/dist/domain/watchdog-policy-engine.js +115 -6
- package/daemon/dist/domain/watchdog-policy-engine.js.map +1 -1
- package/daemon/dist/domain/watchdog-scheduler.d.ts.map +1 -1
- package/daemon/dist/domain/watchdog-scheduler.js +3 -2
- package/daemon/dist/domain/watchdog-scheduler.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 +22 -26
- 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 +38 -0
- package/daemon/dist/index.d.ts.map +1 -1
- package/daemon/dist/index.js +122 -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/agent-images.d.ts.map +1 -1
- package/daemon/dist/routes/agent-images.js +9 -0
- package/daemon/dist/routes/agent-images.js.map +1 -1
- package/daemon/dist/routes/bundles.d.ts.map +1 -1
- package/daemon/dist/routes/bundles.js +61 -1
- package/daemon/dist/routes/bundles.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 +25 -12
- package/daemon/dist/routes/queue.js.map +1 -1
- package/daemon/dist/routes/rigs.js +38 -2
- package/daemon/dist/routes/rigs.js.map +1 -1
- package/daemon/dist/routes/scope-audit.d.ts.map +1 -1
- package/daemon/dist/routes/scope-audit.js +73 -14
- 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/routes/views.d.ts.map +1 -1
- package/daemon/dist/routes/views.js +4 -1
- package/daemon/dist/routes/views.js.map +1 -1
- package/daemon/dist/routes/watchdog.d.ts.map +1 -1
- package/daemon/dist/routes/watchdog.js +40 -3
- package/daemon/dist/routes/watchdog.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 +30 -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 +227 -5
- package/daemon/dist/startup.js.map +1 -1
- package/daemon/docs/reference/agent-spec.md +4 -4
- package/daemon/docs/reference/agent-state-taxonomy.md +101 -0
- package/daemon/docs/reference/chain-file-convention.md +2 -2
- package/daemon/docs/reference/knowledge-maturity.md +123 -0
- package/daemon/docs/reference/lore-routing.md +173 -0
- package/daemon/docs/reference/mission-install.md +194 -0
- package/daemon/docs/reference/planning-dial.md +55 -0
- package/daemon/docs/reference/product-management-pass.md +139 -0
- package/daemon/docs/reference/project-workspace.md +22 -14
- package/daemon/docs/reference/refocus-channel.md +27 -14
- package/daemon/docs/reference/release-boundary.md +88 -0
- package/daemon/docs/reference/sdlc-conventions.md +66 -82
- package/daemon/docs/reference/wave-sdlc.md +113 -0
- package/daemon/policies/builtin/standard.policy.md +3 -3
- package/daemon/policies/builtin/yolo.policy.md +7 -2
- package/daemon/specs/agents/shared/skills/core/cross-host-rig-commands/SKILL.md +6 -13
- package/daemon/specs/agents/shared/skills/core/messaging-the-human/SKILL.md +98 -0
- package/daemon/specs/agents/shared/skills/core/openrig-skills/SKILL.md +118 -0
- package/daemon/specs/agents/shared/skills/core/openrig-upgrade/SKILL.md +19 -75
- package/daemon/specs/agents/shared/skills/core/watchdog/SKILL.md +4 -10
- package/daemon/specs/agents/shared/skills/process/systematic-debugging/find-polluter.sh +0 -0
- package/daemon/specs/rigs/launch/kernel/agents/advisor/lead/guidance/role.md +3 -3
- package/daemon/specs/rigs/launch/kernel/agents/advisor/lead/startup/context.md +3 -3
- package/daemon/specs/rigs/launch/kernel/agents/operator/agent/guidance/role.md +3 -3
- package/daemon/specs/rigs/launch/kernel/agents/queue/worker/guidance/role.md +1 -1
- package/daemon/specs/rigs/launch/kernel/agents/queue/worker/startup/context.md +1 -1
- package/daemon/substance-surfaces.json +8 -0
- package/dist/build-info.js +3 -3
- package/dist/commands/broadcast.d.ts.map +1 -1
- package/dist/commands/broadcast.js +6 -1
- package/dist/commands/broadcast.js.map +1 -1
- package/dist/commands/capture.js +1 -1
- 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/context.d.ts.map +1 -1
- package/dist/commands/context.js +12 -1
- package/dist/commands/context.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/expand.d.ts.map +1 -1
- package/dist/commands/expand.js +9 -13
- package/dist/commands/expand.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 +14 -0
- package/dist/commands/ps.d.ts.map +1 -1
- package/dist/commands/ps.js +27 -8
- 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 +284 -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 +3 -1
- package/dist/commands/send.d.ts.map +1 -1
- package/dist/commands/send.js +37 -16
- 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 +77 -189
- 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 +4 -1
- package/dist/commands/view.js.map +1 -1
- package/dist/commands/watchdog.d.ts.map +1 -1
- package/dist/commands/watchdog.js +64 -8
- 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 +6 -5
- 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/host-registry.d.ts +2 -2
- package/dist/host-registry.js +2 -2
- 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 +46 -4
- package/dist/lib/scope/scope-audit.d.ts.map +1 -1
- package/dist/lib/scope/scope-audit.js +79 -94
- package/dist/lib/scope/scope-audit.js.map +1 -1
- package/dist/lib/scope/scope-fs.d.ts +26 -14
- package/dist/lib/scope/scope-fs.d.ts.map +1 -1
- package/dist/lib/scope/scope-fs.js +78 -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 +4 -2
- package/dist/lib/scope-templates/backlog-tech-debt.md +4 -2
- package/dist/lib/scope-templates/bug-fix.md +4 -2
- package/dist/lib/scope-templates/capability-delta.md +61 -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 +4 -2
- package/dist/lib/scope-templates/proof.md +1 -1
- package/dist/lib/scope-templates/release-feature.md +4 -2
- package/dist/lib/scope-templates/research.md +4 -2
- 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/context-pack-taxonomy-surface.d.ts +2 -0
- package/node_modules/@openrig/daemon/dist/context-pack-taxonomy-surface.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/context-pack-taxonomy-surface.js +6 -0
- package/node_modules/@openrig/daemon/dist/context-pack-taxonomy-surface.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/db/all-migrations.d.ts +1 -1
- package/node_modules/@openrig/daemon/dist/db/all-migrations.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/db/all-migrations.js +12 -2
- 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/db/migrations/074_context_usage_watchdog.d.ts +4 -0
- package/node_modules/@openrig/daemon/dist/db/migrations/074_context_usage_watchdog.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/db/migrations/074_context_usage_watchdog.js +11 -0
- package/node_modules/@openrig/daemon/dist/db/migrations/074_context_usage_watchdog.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/db/migrations/075_context_usage_watchdog_generation.d.ts +4 -0
- package/node_modules/@openrig/daemon/dist/db/migrations/075_context_usage_watchdog_generation.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/db/migrations/075_context_usage_watchdog_generation.js +8 -0
- package/node_modules/@openrig/daemon/dist/db/migrations/075_context_usage_watchdog_generation.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/db/migrations/076_owner_notification_levels.d.ts +8 -0
- package/node_modules/@openrig/daemon/dist/db/migrations/076_owner_notification_levels.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/db/migrations/076_owner_notification_levels.js +15 -0
- package/node_modules/@openrig/daemon/dist/db/migrations/076_owner_notification_levels.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/active-occupant.d.ts +44 -0
- package/node_modules/@openrig/daemon/dist/domain/active-occupant.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/active-occupant.js +72 -0
- package/node_modules/@openrig/daemon/dist/domain/active-occupant.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/agent-manifest.d.ts +6 -0
- package/node_modules/@openrig/daemon/dist/domain/agent-manifest.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/agent-manifest.js +77 -15
- package/node_modules/@openrig/daemon/dist/domain/agent-manifest.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/agent-resolver.d.ts +11 -0
- package/node_modules/@openrig/daemon/dist/domain/agent-resolver.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/agent-resolver.js +55 -0
- package/node_modules/@openrig/daemon/dist/domain/agent-resolver.js.map +1 -1
- 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/bundle-context-packs-router.d.ts +9 -2
- package/node_modules/@openrig/daemon/dist/domain/bundle-context-packs-router.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/bundle-context-packs-router.js +18 -0
- package/node_modules/@openrig/daemon/dist/domain/bundle-context-packs-router.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/claude-compaction-enforcer.d.ts +7 -0
- package/node_modules/@openrig/daemon/dist/domain/claude-compaction-enforcer.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/claude-compaction-enforcer.js +10 -0
- package/node_modules/@openrig/daemon/dist/domain/claude-compaction-enforcer.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/context-packs/context-pack-library-service.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/context-packs/context-pack-library-service.js +7 -0
- package/node_modules/@openrig/daemon/dist/domain/context-packs/context-pack-library-service.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/context-packs/context-pack-types.d.ts +11 -0
- package/node_modules/@openrig/daemon/dist/domain/context-packs/context-pack-types.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/context-packs/context-pack-types.js +11 -0
- package/node_modules/@openrig/daemon/dist/domain/context-packs/context-pack-types.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/context-packs/manifest-parser.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/context-packs/manifest-parser.js +13 -1
- package/node_modules/@openrig/daemon/dist/domain/context-packs/manifest-parser.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/continuity-policy-materializer.d.ts +88 -0
- package/node_modules/@openrig/daemon/dist/domain/continuity-policy-materializer.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/continuity-policy-materializer.js +290 -0
- package/node_modules/@openrig/daemon/dist/domain/continuity-policy-materializer.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/continuity-stack-packets.d.ts +65 -0
- package/node_modules/@openrig/daemon/dist/domain/continuity-stack-packets.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/continuity-stack-packets.js +99 -0
- package/node_modules/@openrig/daemon/dist/domain/continuity-stack-packets.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/execution-view.d.ts +39 -0
- package/node_modules/@openrig/daemon/dist/domain/execution-view.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/execution-view.js +707 -0
- package/node_modules/@openrig/daemon/dist/domain/execution-view.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/delivery-rules-engine.d.ts +60 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/delivery-rules-engine.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/delivery-rules-engine.js +144 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/delivery-rules-engine.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/destination-resolver.d.ts +20 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/destination-resolver.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/destination-resolver.js +52 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/destination-resolver.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/dispatcher.d.ts +3 -1
- package/node_modules/@openrig/daemon/dist/domain/gateway/dispatcher.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/gateway/dispatcher.js +9 -2
- package/node_modules/@openrig/daemon/dist/domain/gateway/dispatcher.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 +84 -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 +151 -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 +118 -1
- 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 +282 -1
- package/node_modules/@openrig/daemon/dist/domain/gateway/human-registry.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/gateway/operator-delivery-engine.d.ts +32 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/operator-delivery-engine.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/operator-delivery-engine.js +86 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/operator-delivery-engine.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/config.d.ts +45 -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 +78 -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 +141 -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 +197 -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 +57 -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 +103 -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 +58 -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 +99 -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 +129 -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 +236 -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 +53 -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 +267 -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 +31 -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 +473 -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/graph-projection.d.ts +6 -0
- package/node_modules/@openrig/daemon/dist/domain/graph-projection.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/graph-projection.js +6 -0
- package/node_modules/@openrig/daemon/dist/domain/graph-projection.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/mission-control/mission-control-write-contract.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/mission-control/mission-control-write-contract.js +1 -0
- package/node_modules/@openrig/daemon/dist/domain/mission-control/mission-control-write-contract.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/node-inventory.d.ts +41 -3
- package/node_modules/@openrig/daemon/dist/domain/node-inventory.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/node-inventory.js +65 -48
- package/node_modules/@openrig/daemon/dist/domain/node-inventory.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/parked-query.d.ts +82 -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 +127 -0
- package/node_modules/@openrig/daemon/dist/domain/parked-query.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/pod-bundle-assembler.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/pod-bundle-assembler.js +12 -5
- package/node_modules/@openrig/daemon/dist/domain/pod-bundle-assembler.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/policies/context-usage-threshold.d.ts +7 -0
- package/node_modules/@openrig/daemon/dist/domain/policies/context-usage-threshold.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/policies/context-usage-threshold.js +99 -0
- package/node_modules/@openrig/daemon/dist/domain/policies/context-usage-threshold.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/policies/delivery-deferral.d.ts +54 -0
- package/node_modules/@openrig/daemon/dist/domain/policies/delivery-deferral.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/policies/delivery-deferral.js +153 -0
- package/node_modules/@openrig/daemon/dist/domain/policies/delivery-deferral.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/policies/delivery-digest-flush.d.ts +45 -0
- package/node_modules/@openrig/daemon/dist/domain/policies/delivery-digest-flush.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/policies/delivery-digest-flush.js +94 -0
- package/node_modules/@openrig/daemon/dist/domain/policies/delivery-digest-flush.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/policies/parked-owner-consumer.d.ts +65 -0
- package/node_modules/@openrig/daemon/dist/domain/policies/parked-owner-consumer.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/policies/parked-owner-consumer.js +244 -0
- package/node_modules/@openrig/daemon/dist/domain/policies/parked-owner-consumer.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/policies/types.d.ts +8 -0
- package/node_modules/@openrig/daemon/dist/domain/policies/types.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/profile-resolver.d.ts +4 -0
- package/node_modules/@openrig/daemon/dist/domain/profile-resolver.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/profile-resolver.js +58 -0
- package/node_modules/@openrig/daemon/dist/domain/profile-resolver.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/provider/provider-signals.d.ts +20 -1
- package/node_modules/@openrig/daemon/dist/domain/provider/provider-signals.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/provider/provider-signals.js +64 -0
- package/node_modules/@openrig/daemon/dist/domain/provider/provider-signals.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/ps-projection.d.ts +7 -5
- package/node_modules/@openrig/daemon/dist/domain/ps-projection.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/ps-projection.js +19 -32
- package/node_modules/@openrig/daemon/dist/domain/ps-projection.js.map +1 -1
- 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 +72 -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 +93 -28
- package/node_modules/@openrig/daemon/dist/domain/queue-repository.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/queue-repository.js +626 -90
- package/node_modules/@openrig/daemon/dist/domain/queue-repository.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/queue-retention.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/queue-retention.js +8 -2
- package/node_modules/@openrig/daemon/dist/domain/queue-retention.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/queue-stuck-sweep.d.ts +100 -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 +485 -0
- package/node_modules/@openrig/daemon/dist/domain/queue-stuck-sweep.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/queue-transition-log.d.ts +10 -0
- package/node_modules/@openrig/daemon/dist/domain/queue-transition-log.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/queue-transition-log.js +49 -11
- package/node_modules/@openrig/daemon/dist/domain/queue-transition-log.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/queue-wake-ladder.d.ts +114 -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 +705 -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 +53 -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 +129 -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/restore-check-service.js +1 -1
- package/node_modules/@openrig/daemon/dist/domain/restore-check-service.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/restore-orchestrator.d.ts +2 -1
- package/node_modules/@openrig/daemon/dist/domain/restore-orchestrator.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/restore-orchestrator.js +88 -15
- package/node_modules/@openrig/daemon/dist/domain/restore-orchestrator.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/restore-plan-preview.d.ts +6 -2
- package/node_modules/@openrig/daemon/dist/domain/restore-plan-preview.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/restore-plan-preview.js +37 -19
- package/node_modules/@openrig/daemon/dist/domain/restore-plan-preview.js.map +1 -1
- 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/rig-expansion-service.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/rig-expansion-service.js +10 -9
- package/node_modules/@openrig/daemon/dist/domain/rig-expansion-service.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/rig-repository.d.ts +4 -0
- package/node_modules/@openrig/daemon/dist/domain/rig-repository.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/rig-repository.js +21 -3
- package/node_modules/@openrig/daemon/dist/domain/rig-repository.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/rigspec-codec.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/rigspec-codec.js +74 -4
- package/node_modules/@openrig/daemon/dist/domain/rigspec-codec.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/rigspec-instantiator.d.ts +7 -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 +32 -0
- package/node_modules/@openrig/daemon/dist/domain/rigspec-instantiator.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/rigspec-schema.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/rigspec-schema.js +32 -4
- package/node_modules/@openrig/daemon/dist/domain/rigspec-schema.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/scope/node-file.d.ts +8 -0
- package/node_modules/@openrig/daemon/dist/domain/scope/node-file.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/scope/node-file.js +18 -0
- package/node_modules/@openrig/daemon/dist/domain/scope/node-file.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 +46 -4
- 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 +79 -94
- 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/snapshot-capture.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/snapshot-capture.js +6 -0
- package/node_modules/@openrig/daemon/dist/domain/snapshot-capture.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 +59 -4
- 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 +5 -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 +65 -2
- package/node_modules/@openrig/daemon/dist/domain/view-projector.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/watchdog-jobs-repository.d.ts +25 -6
- package/node_modules/@openrig/daemon/dist/domain/watchdog-jobs-repository.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/watchdog-jobs-repository.js +115 -32
- package/node_modules/@openrig/daemon/dist/domain/watchdog-jobs-repository.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/watchdog-policy-engine.d.ts +47 -1
- 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 +115 -6
- package/node_modules/@openrig/daemon/dist/domain/watchdog-policy-engine.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/watchdog-scheduler.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/watchdog-scheduler.js +3 -2
- package/node_modules/@openrig/daemon/dist/domain/watchdog-scheduler.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 +22 -26
- 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 +38 -0
- package/node_modules/@openrig/daemon/dist/index.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/index.js +122 -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/agent-images.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/agent-images.js +9 -0
- package/node_modules/@openrig/daemon/dist/routes/agent-images.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/bundles.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/bundles.js +61 -1
- package/node_modules/@openrig/daemon/dist/routes/bundles.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 +25 -12
- package/node_modules/@openrig/daemon/dist/routes/queue.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/rigs.js +38 -2
- package/node_modules/@openrig/daemon/dist/routes/rigs.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 +73 -14
- 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/routes/views.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/views.js +4 -1
- package/node_modules/@openrig/daemon/dist/routes/views.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/watchdog.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/watchdog.js +40 -3
- package/node_modules/@openrig/daemon/dist/routes/watchdog.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 +30 -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 +227 -5
- package/node_modules/@openrig/daemon/dist/startup.js.map +1 -1
- package/node_modules/@openrig/daemon/package.json +9 -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/demo-data.js +2 -2
- package/tui/dist/demo-data.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/skills/core/attention-queue/SKILL.md +0 -264
- package/daemon/context-packs/skills/core/attention-queue/manifest.yaml +0 -9
- 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/daemon/specs/agents/shared/skills/core/attention-queue/SKILL.md +0 -264
- 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,705 @@
|
|
|
1
|
+
// S01 (OPR.0.5.5.1) — WAKE OR ESCALATE ON BATONS. A handoff whose wake fails must never
|
|
2
|
+
// silently park: today one failed nudge is recorded and nothing follows (the measured
|
|
3
|
+
// dominant 0.5.3 failure class — a perfect surviving packet, a recipient never woken).
|
|
4
|
+
// This module gives every baton (handed-off row) whose wake FAILED a bounded retry ladder,
|
|
5
|
+
// then named escalation rungs — the destination's orchestrator (aggregated per destination,
|
|
6
|
+
// never a duplicate row per baton), then the operator surface — each step a recorded
|
|
7
|
+
// transition, none silent.
|
|
8
|
+
//
|
|
9
|
+
// NAMED INVARIANT (mini-req 7): THE ROW CARRIES THE OBLIGATION EXACTLY-ONCE; THE WAKE IS
|
|
10
|
+
// AT-LEAST-ONCE. The ladder retries the NUDGE — an envelope pointer at the row — never the
|
|
11
|
+
// content, so a re-attempt can never double-deliver the obligation.
|
|
12
|
+
//
|
|
13
|
+
// AM-P3-F6: the transitions ARE the ladder state. Attempts, rungs, suspension and
|
|
14
|
+
// exhaustion are all markers on the row's transition log, and every tick DERIVES its
|
|
15
|
+
// position from them — a daemon restart can neither forget a ladder (silent park returns)
|
|
16
|
+
// nor restart its counts (cap violated by repetition). Marker vocabulary is imported from
|
|
17
|
+
// queue-stuck-sweep (AM-P3-F5): S02's undelivered half skips rows whose ladder is live and
|
|
18
|
+
// remains the net for the exhausted handback; created-with-destination obligations stay
|
|
19
|
+
// S02 territory (the baton filter here is handed_off_from — the named hole is explicit).
|
|
20
|
+
//
|
|
21
|
+
// AM-P3-F1: `rendered-unconfirmed`-class outcomes (queue grammar: delivered-ack-pending,
|
|
22
|
+
// indeterminate:*, gateway-owned:*) NEVER retry — the measured false-negative class — but
|
|
23
|
+
// they enter the ladder on a confirmation path: unconfirmed + zero pickup evidence within
|
|
24
|
+
// the config-keyed window escalates directly, skipping the retry rung entirely (escalation
|
|
25
|
+
// is not a re-send; it cannot double-deliver).
|
|
26
|
+
//
|
|
27
|
+
// AM-P3-F2: suspension is DERIVED, never declared — the destination's post-swap state
|
|
28
|
+
// (nodes.handover_at within a bounded grace; the handover txn itself is atomic and
|
|
29
|
+
// unobservable) suspends wake attempts, with suspend/resume recorded. The manually
|
|
30
|
+
// declared window survives ONLY as an operator override (OPENRIG_WAKE_SUSPEND, fresh-read).
|
|
31
|
+
//
|
|
32
|
+
// AM-P3-F4 + AM-R25: rungs DELIVER, not just record. The orchestrator rung attempts a real
|
|
33
|
+
// wake on the aggregate escalation row; a rung whose own wake fails advances after one
|
|
34
|
+
// bounded cycle. OPR.0.5.6.1 (A1.2/AM-F3): the operator rung's delivery leg IS the
|
|
35
|
+
// delivery rules engine — the rung dispatches through the injected engine port, records
|
|
36
|
+
// dispatched-to-engine with the decision, and the ladder does NOT advance past the rung
|
|
37
|
+
// until the engine's outcome resolves (a posted receipt or a delivery-termination record);
|
|
38
|
+
// exactly one delivery per episode, never immediate-plus-deferred. When no engine port is
|
|
39
|
+
// wired (fixtures, pre-wire boot), the rung keeps the pre-engine floor honestly
|
|
40
|
+
// (escalation view + daemon-health) and exhausts as before.
|
|
41
|
+
import { deriveUsageLimitPools } from "./provider/provider-signals.js";
|
|
42
|
+
import { USAGE_LIMIT_BLOCKER_TAG, USAGE_LIMIT_POOL_TAG_PREFIX, } from "./queue-wake-repository.js";
|
|
43
|
+
import { SettingsStore } from "./user-settings/settings-store.js";
|
|
44
|
+
import { LADDER_ATTEMPT_PREFIX, LADDER_RUNG_PREFIX, LADDER_EXHAUSTED_PREFIX, defaultResolveOrchestrator, resolveSessionNodeId, } from "./queue-stuck-sweep.js";
|
|
45
|
+
export const WAKE_RETRY_INTERVAL_KEY = "queue.wake_retry_interval_seconds";
|
|
46
|
+
export const DEFAULT_WAKE_RETRY_INTERVAL_SECONDS = 300;
|
|
47
|
+
export const WAKE_RETRY_CAP_KEY = "queue.wake_retry_cap";
|
|
48
|
+
export const DEFAULT_WAKE_RETRY_CAP = 3;
|
|
49
|
+
export const WAKE_UNCONFIRMED_WINDOW_KEY = "queue.wake_unconfirmed_window_minutes";
|
|
50
|
+
export const DEFAULT_WAKE_UNCONFIRMED_WINDOW_MINUTES = 30;
|
|
51
|
+
export const WAKE_SWAP_GRACE_KEY = "queue.wake_swap_grace_seconds";
|
|
52
|
+
export const DEFAULT_WAKE_SWAP_GRACE_SECONDS = 180;
|
|
53
|
+
// S16: this margin absorbs provider reset granularity and host/provider clock
|
|
54
|
+
// skew. Fleet dedup already prevents a thundering herd; narrowing it toward zero
|
|
55
|
+
// would recreate a wake delivered while the seat is still usage-limited.
|
|
56
|
+
export const USAGE_LIMIT_JITTER_FLOOR_SECONDS = 30;
|
|
57
|
+
export const USAGE_LIMIT_JITTER_CEILING_SECONDS = 90;
|
|
58
|
+
export function drawUsageLimitJitterSeconds(random = Math.random) {
|
|
59
|
+
return USAGE_LIMIT_JITTER_FLOOR_SECONDS + Math.floor(random() * (USAGE_LIMIT_JITTER_CEILING_SECONDS - USAGE_LIMIT_JITTER_FLOOR_SECONDS + 1));
|
|
60
|
+
}
|
|
61
|
+
/** The operator-declared suspension override (F2: override, never the mechanism).
|
|
62
|
+
* Format: comma-separated `<session>:<untilIso>` pairs; fresh-read every tick. */
|
|
63
|
+
export const WAKE_SUSPEND_OVERRIDE_ENV = "OPENRIG_WAKE_SUSPEND";
|
|
64
|
+
/** Stamp tag on the per-destination aggregate escalation row. */
|
|
65
|
+
export const WAKE_ESCALATION_TAG = "wake-escalation";
|
|
66
|
+
export function escalationDedupTag(destination) {
|
|
67
|
+
return `wake-escalation:${destination}`;
|
|
68
|
+
}
|
|
69
|
+
// Suspension markers (attempt/rung/exhausted come from the S02 seam vocabulary).
|
|
70
|
+
export const LADDER_SUSPEND_PREFIX = "ladder-suspend:";
|
|
71
|
+
export const LADDER_RESUME_PREFIX = "ladder-resume:";
|
|
72
|
+
const LADDER_ACTOR = "wake-ladder@system";
|
|
73
|
+
/** The loop's observable heartbeat — rides /healthz beside the S02 sweep's. */
|
|
74
|
+
export function createWakeLadderStatus() {
|
|
75
|
+
const state = {
|
|
76
|
+
lastTickAt: null,
|
|
77
|
+
lastOutcome: null,
|
|
78
|
+
lastError: null,
|
|
79
|
+
consecutiveFailures: 0,
|
|
80
|
+
activeLadders: 0,
|
|
81
|
+
escalationsOpen: 0,
|
|
82
|
+
exhaustedTotal: 0,
|
|
83
|
+
};
|
|
84
|
+
return {
|
|
85
|
+
record(outcome, detail) {
|
|
86
|
+
state.lastTickAt = new Date().toISOString();
|
|
87
|
+
state.lastOutcome = outcome;
|
|
88
|
+
state.lastError = outcome === "failed" ? (detail?.error ?? "unknown error") : null;
|
|
89
|
+
state.consecutiveFailures = outcome === "failed" ? state.consecutiveFailures + 1 : 0;
|
|
90
|
+
if (detail?.active !== undefined)
|
|
91
|
+
state.activeLadders = detail.active;
|
|
92
|
+
if (detail?.escalations !== undefined)
|
|
93
|
+
state.escalationsOpen = detail.escalations;
|
|
94
|
+
if (detail?.exhausted)
|
|
95
|
+
state.exhaustedTotal += detail.exhausted;
|
|
96
|
+
},
|
|
97
|
+
snapshot() {
|
|
98
|
+
return { ...state };
|
|
99
|
+
},
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
/** The operator seat for the self-skip floor (workspace.operator_seat_name — the
|
|
103
|
+
* conventional `operator-${USER}@kernel`); null when settings resolution fails. */
|
|
104
|
+
function resolveOperatorSeat() {
|
|
105
|
+
try {
|
|
106
|
+
const v = new SettingsStore().resolveOne("workspace.operator_seat_name").value;
|
|
107
|
+
return typeof v === "string" && v.length > 0 ? v : null;
|
|
108
|
+
}
|
|
109
|
+
catch {
|
|
110
|
+
return null;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
function resolveNumber(key, fallback) {
|
|
114
|
+
try {
|
|
115
|
+
const v = new SettingsStore().resolveOne(key).value;
|
|
116
|
+
const n = typeof v === "number" ? v : Number(v);
|
|
117
|
+
return Number.isFinite(n) && n > 0 ? n : fallback;
|
|
118
|
+
}
|
|
119
|
+
catch {
|
|
120
|
+
return fallback;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
export const resolveWakeRetryIntervalSeconds = () => resolveNumber(WAKE_RETRY_INTERVAL_KEY, DEFAULT_WAKE_RETRY_INTERVAL_SECONDS);
|
|
124
|
+
export const resolveWakeRetryCap = () => resolveNumber(WAKE_RETRY_CAP_KEY, DEFAULT_WAKE_RETRY_CAP);
|
|
125
|
+
export const resolveWakeUnconfirmedWindowMinutes = () => resolveNumber(WAKE_UNCONFIRMED_WINDOW_KEY, DEFAULT_WAKE_UNCONFIRMED_WINDOW_MINUTES);
|
|
126
|
+
export const resolveWakeSwapGraceSeconds = () => resolveNumber(WAKE_SWAP_GRACE_KEY, DEFAULT_WAKE_SWAP_GRACE_SECONDS);
|
|
127
|
+
function readLadder(db, qitemId) {
|
|
128
|
+
const rows = db
|
|
129
|
+
.prepare("SELECT ts, transition_note FROM queue_transitions WHERE qitem_id = ? ORDER BY ts, rowid")
|
|
130
|
+
.all(qitemId);
|
|
131
|
+
const view = {
|
|
132
|
+
attempts: 0,
|
|
133
|
+
lastMarkerTs: null,
|
|
134
|
+
orchRung: false,
|
|
135
|
+
orchRungFailed: false,
|
|
136
|
+
opRung: false,
|
|
137
|
+
opEngineDispatched: false,
|
|
138
|
+
opEngineKey: null,
|
|
139
|
+
opOutcomeResolved: false,
|
|
140
|
+
exhausted: false,
|
|
141
|
+
suspendEpisodeOpen: false,
|
|
142
|
+
firstMarkerTs: null,
|
|
143
|
+
};
|
|
144
|
+
let suspends = 0;
|
|
145
|
+
let resumes = 0;
|
|
146
|
+
for (const r of rows) {
|
|
147
|
+
const note = r.transition_note ?? "";
|
|
148
|
+
const isAttempt = note.startsWith(LADDER_ATTEMPT_PREFIX);
|
|
149
|
+
const isRung = note.startsWith(LADDER_RUNG_PREFIX);
|
|
150
|
+
if (isAttempt)
|
|
151
|
+
view.attempts += 1;
|
|
152
|
+
if (isRung && /^escalation-rung:\s*orchestrator/.test(note)) {
|
|
153
|
+
view.orchRung = true;
|
|
154
|
+
view.orchRungFailed = /outcome=failed:/.test(note);
|
|
155
|
+
}
|
|
156
|
+
if (isRung && /^escalation-rung:\s*operator/.test(note))
|
|
157
|
+
view.opRung = true;
|
|
158
|
+
if (isRung && /^escalation-rung:\s*operator dispatched-to-engine/.test(note)) {
|
|
159
|
+
view.opEngineDispatched = true;
|
|
160
|
+
const keyMatch = note.match(/notification_key=(\S+)/);
|
|
161
|
+
if (keyMatch)
|
|
162
|
+
view.opEngineKey = keyMatch[1];
|
|
163
|
+
// R2 003f4786: the key derives BEFORE any resolution note counts — a
|
|
164
|
+
// receipt that PRECEDES this dispatch belongs to an older episode, so
|
|
165
|
+
// any provisional resolution seen so far is discarded here.
|
|
166
|
+
view.opOutcomeResolved = false;
|
|
167
|
+
}
|
|
168
|
+
// Outcome resolution (AM-F3, R1 B-3, R2 pre-marker discriminator): the S14
|
|
169
|
+
// posted receipt or the termination record closes the episode ONLY when it
|
|
170
|
+
// (a) follows the dispatch marker chronologically (this loop resets the
|
|
171
|
+
// flag at each dispatch, so pre-marker notes never survive) and (b) carries
|
|
172
|
+
// the dispatched key when the marker is keyed. An unkeyed dispatch
|
|
173
|
+
// (injected legacy ports) keeps the any-following-note shape.
|
|
174
|
+
if (note.startsWith("slack-owner-notification-posted ") || note.startsWith("delivery-termination:")) {
|
|
175
|
+
if (view.opEngineKey === null || note.split(/\s+/).includes(`notification_key=${view.opEngineKey}`)) {
|
|
176
|
+
view.opOutcomeResolved = true;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
if (note.startsWith(LADDER_EXHAUSTED_PREFIX))
|
|
180
|
+
view.exhausted = true;
|
|
181
|
+
if (note.startsWith(LADDER_SUSPEND_PREFIX))
|
|
182
|
+
suspends += 1;
|
|
183
|
+
if (note.startsWith(LADDER_RESUME_PREFIX))
|
|
184
|
+
resumes += 1;
|
|
185
|
+
if (isAttempt || isRung) {
|
|
186
|
+
const t = Date.parse(r.ts);
|
|
187
|
+
if (!Number.isNaN(t)) {
|
|
188
|
+
view.lastMarkerTs = Math.max(view.lastMarkerTs ?? t, t);
|
|
189
|
+
view.firstMarkerTs = view.firstMarkerTs === null ? t : Math.min(view.firstMarkerTs, t);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
view.suspendEpisodeOpen = suspends > resumes;
|
|
194
|
+
return view;
|
|
195
|
+
}
|
|
196
|
+
/** Pickup evidence (the S04 receipt join, F1): a claim, a heartbeat, or any transition
|
|
197
|
+
* that is neither a founding record nor ladder machinery — someone real moved. */
|
|
198
|
+
function hasPickupEvidence(db, row) {
|
|
199
|
+
if (row.claimedAt)
|
|
200
|
+
return true;
|
|
201
|
+
// Keep this null arm for the 0.5.7 mechanized-pull turn-end hook that knows the in-flight row;
|
|
202
|
+
// it is the first honest row-scoped writer, and wiring reopens only in that slice.
|
|
203
|
+
if (row.lastHeartbeat)
|
|
204
|
+
return true;
|
|
205
|
+
const rows = db
|
|
206
|
+
.prepare("SELECT transition_note FROM queue_transitions WHERE qitem_id = ?")
|
|
207
|
+
.all(row.qitemId);
|
|
208
|
+
for (const r of rows) {
|
|
209
|
+
const note = r.transition_note ?? "";
|
|
210
|
+
if (note === "created")
|
|
211
|
+
continue;
|
|
212
|
+
if (note.startsWith("handoff"))
|
|
213
|
+
continue;
|
|
214
|
+
if (note.startsWith(LADDER_ATTEMPT_PREFIX) ||
|
|
215
|
+
note.startsWith(LADDER_RUNG_PREFIX) ||
|
|
216
|
+
note.startsWith(LADDER_EXHAUSTED_PREFIX) ||
|
|
217
|
+
note.startsWith(LADDER_SUSPEND_PREFIX) ||
|
|
218
|
+
note.startsWith(LADDER_RESUME_PREFIX) ||
|
|
219
|
+
// OPR.0.5.6.1: delivery-leg records are ladder machinery, not pickup —
|
|
220
|
+
// a receipt/termination/deferral stamp must not pull the row out of the
|
|
221
|
+
// ladder before the resolution pass reads it.
|
|
222
|
+
note.startsWith("slack-owner-notification-") ||
|
|
223
|
+
note.startsWith("delivery-termination:") ||
|
|
224
|
+
note.startsWith("delivery-deferral-"))
|
|
225
|
+
continue;
|
|
226
|
+
return true;
|
|
227
|
+
}
|
|
228
|
+
return false;
|
|
229
|
+
}
|
|
230
|
+
function classifyWakeResult(lastNudgeResult) {
|
|
231
|
+
if (!lastNudgeResult)
|
|
232
|
+
return null;
|
|
233
|
+
if (lastNudgeResult.startsWith("failed:"))
|
|
234
|
+
return "failed";
|
|
235
|
+
if (lastNudgeResult === "delivered-ack-pending" ||
|
|
236
|
+
lastNudgeResult.startsWith("indeterminate:") ||
|
|
237
|
+
lastNudgeResult.startsWith("gateway-owned:"))
|
|
238
|
+
return "unconfirmed";
|
|
239
|
+
return null; // verified (or unknown vocabulary) — never enters the ladder
|
|
240
|
+
}
|
|
241
|
+
/** F2 — derived suspension: the destination's post-swap grace (nodes.handover_at within
|
|
242
|
+
* the bound), or the operator-declared override. Returns the reason, or null. */
|
|
243
|
+
function suspensionReason(db, destination, graceSeconds, now) {
|
|
244
|
+
const override = process.env[WAKE_SUSPEND_OVERRIDE_ENV];
|
|
245
|
+
if (override) {
|
|
246
|
+
for (const entry of override.split(",")) {
|
|
247
|
+
const idx = entry.lastIndexOf(":");
|
|
248
|
+
const session = entry.slice(0, entry.indexOf(":"));
|
|
249
|
+
const untilIso = entry.slice(entry.indexOf(":") + 1);
|
|
250
|
+
void idx;
|
|
251
|
+
if (session === destination) {
|
|
252
|
+
const until = Date.parse(untilIso);
|
|
253
|
+
if (!Number.isNaN(until) && now.getTime() < until) {
|
|
254
|
+
return `operator override (${WAKE_SUSPEND_OVERRIDE_ENV}) until ${untilIso}`;
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
// The durable session→node binding — never a string transform of the session name
|
|
260
|
+
// (canonical dash-form sessions and dotted logical ids are independent identities).
|
|
261
|
+
const nodeId = resolveSessionNodeId(db, destination);
|
|
262
|
+
if (!nodeId)
|
|
263
|
+
return null;
|
|
264
|
+
const row = db
|
|
265
|
+
.prepare("SELECT handover_at AS handoverAt FROM nodes WHERE id = ? LIMIT 1")
|
|
266
|
+
.get(nodeId);
|
|
267
|
+
if (!row?.handoverAt)
|
|
268
|
+
return null;
|
|
269
|
+
const swapAt = Date.parse(row.handoverAt);
|
|
270
|
+
if (Number.isNaN(swapAt))
|
|
271
|
+
return null;
|
|
272
|
+
const ageS = (now.getTime() - swapAt) / 1000;
|
|
273
|
+
if (ageS >= 0 && ageS < graceSeconds) {
|
|
274
|
+
return `destination in post-swap grace (handover ${Math.round(ageS)}s ago, grace ${graceSeconds}s)`;
|
|
275
|
+
}
|
|
276
|
+
return null;
|
|
277
|
+
}
|
|
278
|
+
function appendMarker(repo, row, note) {
|
|
279
|
+
repo.transitionLog.append({
|
|
280
|
+
qitemId: row.qitemId,
|
|
281
|
+
state: row.state,
|
|
282
|
+
actorSession: LADDER_ACTOR,
|
|
283
|
+
transitionNote: note,
|
|
284
|
+
});
|
|
285
|
+
}
|
|
286
|
+
function minutesSince(ts, now) {
|
|
287
|
+
if (ts === null || ts === undefined)
|
|
288
|
+
return 0;
|
|
289
|
+
const t = typeof ts === "number" ? ts : Date.parse(ts);
|
|
290
|
+
if (Number.isNaN(t))
|
|
291
|
+
return 0;
|
|
292
|
+
return Math.max(0, Math.round((now.getTime() - t) / 60_000));
|
|
293
|
+
}
|
|
294
|
+
function usageLimitPoolTag(poolKey) {
|
|
295
|
+
return `${USAGE_LIMIT_POOL_TAG_PREFIX}${poolKey}`;
|
|
296
|
+
}
|
|
297
|
+
function rigOf(session) {
|
|
298
|
+
return session.slice(session.lastIndexOf("@") + 1);
|
|
299
|
+
}
|
|
300
|
+
async function ensureUsageLimitBlocker(deps, pool, now, jitterSeconds) {
|
|
301
|
+
const poolTag = usageLimitPoolTag(pool.poolKey);
|
|
302
|
+
const existing = deps.db.prepare(`SELECT qitem_id FROM queue_items
|
|
303
|
+
WHERE state IN ('pending', 'in-progress', 'blocked')
|
|
304
|
+
AND EXISTS (SELECT 1 FROM json_each(queue_items.tags) WHERE value = ?)
|
|
305
|
+
AND EXISTS (SELECT 1 FROM json_each(queue_items.tags) WHERE value = ?)
|
|
306
|
+
LIMIT 1`).get(USAGE_LIMIT_BLOCKER_TAG, poolTag);
|
|
307
|
+
let blocker = existing ? deps.queueRepo.getById(existing.qitem_id) : null;
|
|
308
|
+
if (blocker) {
|
|
309
|
+
const wake = deps.queueRepo.getParkWakeStatus(blocker.qitemId);
|
|
310
|
+
if (wake?.kind === "timer" && wake.live)
|
|
311
|
+
return blocker;
|
|
312
|
+
if (wake)
|
|
313
|
+
throw new Error(`usage-limit blocker ${blocker.qitemId} has a non-live timer`);
|
|
314
|
+
}
|
|
315
|
+
else {
|
|
316
|
+
const rig = rigOf(pool.seatSessions[0]);
|
|
317
|
+
blocker = await deps.queueRepo.create({
|
|
318
|
+
sourceSession: LADDER_ACTOR,
|
|
319
|
+
destinationSession: `wake-ladder@${rig}`,
|
|
320
|
+
body: `Provider usage limit for ${pool.poolKey}; release every dependent once at ${pool.expiresAt}.`,
|
|
321
|
+
tags: [USAGE_LIMIT_BLOCKER_TAG, poolTag],
|
|
322
|
+
expiresAt: new Date(Date.parse(pool.expiresAt) + jitterSeconds * 1000).toISOString(),
|
|
323
|
+
nudge: false,
|
|
324
|
+
});
|
|
325
|
+
}
|
|
326
|
+
const wakeAtMs = Date.parse(pool.expiresAt) + jitterSeconds * 1000;
|
|
327
|
+
const wakeAfterSeconds = Math.max(1, Math.ceil((wakeAtMs - now.getTime()) / 1000));
|
|
328
|
+
deps.queueRepo.update({
|
|
329
|
+
qitemId: blocker.qitemId,
|
|
330
|
+
actorSession: LADDER_ACTOR,
|
|
331
|
+
state: "blocked",
|
|
332
|
+
blockedOn: `external:provider-limit:${pool.poolKey}`,
|
|
333
|
+
transitionNote: `usage-limit cause=${pool.source} pool=${pool.poolKey} reset=${pool.expiresAt} wake=${new Date(wakeAtMs).toISOString()}`,
|
|
334
|
+
wakeAfterSeconds,
|
|
335
|
+
});
|
|
336
|
+
return deps.queueRepo.getById(blocker.qitemId);
|
|
337
|
+
}
|
|
338
|
+
/**
|
|
339
|
+
* One ladder tick. Everything is derived from the row + transition log — the tick holds
|
|
340
|
+
* no memory (F6). Never throws: a tick that cannot run is loud on the status surface
|
|
341
|
+
* and the log, because a silent skip is the exact class this slice kills.
|
|
342
|
+
*/
|
|
343
|
+
export async function runWakeLadderTick(deps) {
|
|
344
|
+
const log = deps.log ?? ((line) => console.error(line));
|
|
345
|
+
const status = deps.status;
|
|
346
|
+
try {
|
|
347
|
+
const now = deps.now ?? new Date();
|
|
348
|
+
const intervalS = deps.retryIntervalSeconds ?? resolveWakeRetryIntervalSeconds();
|
|
349
|
+
const cap = deps.retryCap ?? resolveWakeRetryCap();
|
|
350
|
+
const windowMin = deps.unconfirmedWindowMinutes ?? resolveWakeUnconfirmedWindowMinutes();
|
|
351
|
+
const graceS = deps.swapGraceSeconds ?? resolveWakeSwapGraceSeconds();
|
|
352
|
+
const resolveOrch = deps.resolveOrchestrator ?? ((session) => defaultResolveOrchestrator(deps.db, session));
|
|
353
|
+
const attemptWake = deps.attemptWake ??
|
|
354
|
+
(async (qitemId, target) => {
|
|
355
|
+
await deps.queueRepo.maybeNudge(qitemId, target, true);
|
|
356
|
+
return deps.queueRepo.getById(qitemId)?.lastNudgeResult ?? "indeterminate:no transport available";
|
|
357
|
+
});
|
|
358
|
+
const actions = [];
|
|
359
|
+
let exhaustedThisTick = 0;
|
|
360
|
+
const usagePoolBySeat = new Map();
|
|
361
|
+
if (deps.getProviderReadModel) {
|
|
362
|
+
try {
|
|
363
|
+
const model = await deps.getProviderReadModel();
|
|
364
|
+
const pools = deriveUsageLimitPools({
|
|
365
|
+
...model,
|
|
366
|
+
now,
|
|
367
|
+
fallbackSeconds: intervalS,
|
|
368
|
+
});
|
|
369
|
+
for (const pool of pools) {
|
|
370
|
+
for (const seat of pool.seatSessions)
|
|
371
|
+
usagePoolBySeat.set(seat, pool);
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
catch (err) {
|
|
375
|
+
log(`[wake-ladder] provider signal read unavailable; preserving shipped ladder: ${err instanceof Error ? err.message : String(err)}`);
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
const blockerByPool = new Map();
|
|
379
|
+
// Batons: handed-off rows still pending and unclaimed. Created-with-destination rows
|
|
380
|
+
// are explicitly NOT here — that hole is S02's net (F5).
|
|
381
|
+
const batonRows = deps.db
|
|
382
|
+
.prepare(`SELECT qitem_id FROM queue_items
|
|
383
|
+
WHERE state = 'pending' AND claimed_at IS NULL AND handed_off_from IS NOT NULL`)
|
|
384
|
+
.all();
|
|
385
|
+
// OPR.0.5.6.24 B2 (advisor-ruled one-engine arm): claimed in-progress rows
|
|
386
|
+
// that a parked-owner consumer wake FAILED into join the SAME ladder flow.
|
|
387
|
+
// Consumer ORIGIN is the row's durable FAILED transition note (the ladder's
|
|
388
|
+
// own retries overwrite last_nudge_result with generic transport detail, so
|
|
389
|
+
// the column carries only failed-CLASS eligibility, never origin — R2's
|
|
390
|
+
// one-shot-entry finding). Retry cap and exhaustion stay bounded by the
|
|
391
|
+
// ladder's own derived markers; the consumer never retries.
|
|
392
|
+
const parkedOwnerFailureRows = deps.db
|
|
393
|
+
.prepare(`SELECT q.qitem_id FROM queue_items q
|
|
394
|
+
WHERE q.state = 'in-progress' AND q.claimed_at IS NOT NULL
|
|
395
|
+
AND q.last_nudge_result LIKE 'failed:%'
|
|
396
|
+
AND EXISTS (
|
|
397
|
+
SELECT 1 FROM queue_transitions t
|
|
398
|
+
WHERE t.qitem_id = q.qitem_id
|
|
399
|
+
AND t.transition_note LIKE 'parked-owner wake delivery failed:%'
|
|
400
|
+
)`)
|
|
401
|
+
.all();
|
|
402
|
+
/** Escalation-phase members grouped per destination (F3 aggregation). */
|
|
403
|
+
const escalating = new Map();
|
|
404
|
+
/** Per-destination wake attempts inside the current window, across ALL ladders (F3
|
|
405
|
+
* rate bound). Seeded from recorded markers so restarts keep the bound too. */
|
|
406
|
+
const windowBudget = new Map();
|
|
407
|
+
let activeLadders = 0;
|
|
408
|
+
const budgetFor = (dest) => {
|
|
409
|
+
if (!windowBudget.has(dest)) {
|
|
410
|
+
const since = new Date(now.getTime() - intervalS * 1000).toISOString();
|
|
411
|
+
const counted = deps.db
|
|
412
|
+
.prepare(`SELECT COUNT(*) AS n FROM queue_transitions t JOIN queue_items q ON q.qitem_id = t.qitem_id
|
|
413
|
+
WHERE q.destination_session = ? AND t.transition_note LIKE ? AND t.ts >= ?`)
|
|
414
|
+
.get(dest, `${LADDER_ATTEMPT_PREFIX}%`, since);
|
|
415
|
+
windowBudget.set(dest, counted.n);
|
|
416
|
+
}
|
|
417
|
+
return windowBudget.get(dest);
|
|
418
|
+
};
|
|
419
|
+
for (const { qitem_id } of [...batonRows, ...parkedOwnerFailureRows]) {
|
|
420
|
+
const row = deps.queueRepo.getById(qitem_id);
|
|
421
|
+
if (!row)
|
|
422
|
+
continue;
|
|
423
|
+
const usagePool = usagePoolBySeat.get(row.destinationSession);
|
|
424
|
+
// OPR.0.5.6.24: the usage-limit PARK mutation applies only to pending
|
|
425
|
+
// batons — a claimed in-progress row is someone's live work and is never
|
|
426
|
+
// state-mutated here; it falls through to ordinary mode classification.
|
|
427
|
+
if (usagePool && row.state === "pending") {
|
|
428
|
+
let blocker = blockerByPool.get(usagePool.poolKey);
|
|
429
|
+
if (!blocker) {
|
|
430
|
+
blocker = await ensureUsageLimitBlocker(deps, usagePool, now, deps.usageLimitJitterSeconds ?? drawUsageLimitJitterSeconds());
|
|
431
|
+
blockerByPool.set(usagePool.poolKey, blocker);
|
|
432
|
+
}
|
|
433
|
+
deps.queueRepo.update({
|
|
434
|
+
qitemId: row.qitemId,
|
|
435
|
+
actorSession: LADDER_ACTOR,
|
|
436
|
+
state: "blocked",
|
|
437
|
+
blockedOn: blocker.qitemId,
|
|
438
|
+
transitionNote: `usage-limit suppressed: pool=${usagePool.poolKey} reset=${usagePool.expiresAt}; waiting on shared blocker ${blocker.qitemId}`,
|
|
439
|
+
});
|
|
440
|
+
actions.push({ qitemId: row.qitemId, action: "park-usage-limit" });
|
|
441
|
+
continue;
|
|
442
|
+
}
|
|
443
|
+
const mode = classifyWakeResult(row.lastNudgeResult);
|
|
444
|
+
if (!mode)
|
|
445
|
+
continue;
|
|
446
|
+
const view = readLadder(deps.db, row.qitemId);
|
|
447
|
+
if (view.exhausted)
|
|
448
|
+
continue; // finite: an exhausted ladder never re-fires
|
|
449
|
+
// F1 gates for the unconfirmed class: never re-nudge; enter only past the window
|
|
450
|
+
// with zero pickup evidence.
|
|
451
|
+
if (mode === "unconfirmed") {
|
|
452
|
+
if (minutesSince(row.tsCreated, now) < windowMin)
|
|
453
|
+
continue;
|
|
454
|
+
if (hasPickupEvidence(deps.db, row))
|
|
455
|
+
continue;
|
|
456
|
+
}
|
|
457
|
+
activeLadders += 1;
|
|
458
|
+
// Due-ness: the latest ladder marker (or the original nudge attempt) is older than
|
|
459
|
+
// the retry interval. No markers + no recorded attempt = due now. Gates ACTIONS
|
|
460
|
+
// only — detection (and the aggregate refresh) is not throttled by it.
|
|
461
|
+
const lastActivity = view.lastMarkerTs ?? (row.lastNudgeAttempt ? Date.parse(row.lastNudgeAttempt) : null);
|
|
462
|
+
const due = lastActivity === null || Number.isNaN(lastActivity) || now.getTime() - lastActivity >= intervalS * 1000;
|
|
463
|
+
const suspended = due ? suspensionReason(deps.db, row.destinationSession, graceS, now) : null;
|
|
464
|
+
// Retry rung — failed outcomes only, under the cap, inside the destination budget.
|
|
465
|
+
if (mode === "failed" && view.attempts < cap) {
|
|
466
|
+
if (!due)
|
|
467
|
+
continue;
|
|
468
|
+
// F2 — derived suspension, checked only when the ladder would otherwise act.
|
|
469
|
+
if (suspended) {
|
|
470
|
+
if (!view.suspendEpisodeOpen) {
|
|
471
|
+
appendMarker(deps.queueRepo, row, `${LADDER_SUSPEND_PREFIX} ${suspended}`);
|
|
472
|
+
actions.push({ qitemId: row.qitemId, action: "suspend" });
|
|
473
|
+
}
|
|
474
|
+
continue;
|
|
475
|
+
}
|
|
476
|
+
if (view.suspendEpisodeOpen) {
|
|
477
|
+
appendMarker(deps.queueRepo, row, `${LADDER_RESUME_PREFIX} suspension over; ladder resumes`);
|
|
478
|
+
actions.push({ qitemId: row.qitemId, action: "resume" });
|
|
479
|
+
}
|
|
480
|
+
if (budgetFor(row.destinationSession) >= cap)
|
|
481
|
+
continue; // destination-bounded (F3)
|
|
482
|
+
windowBudget.set(row.destinationSession, budgetFor(row.destinationSession) + 1);
|
|
483
|
+
const outcome = await attemptWake(row.qitemId, row.destinationSession);
|
|
484
|
+
appendMarker(deps.queueRepo, row, `${LADDER_ATTEMPT_PREFIX} ${view.attempts + 1}/${cap} outcome=${outcome}`);
|
|
485
|
+
actions.push({ qitemId: row.qitemId, action: "retry", target: row.destinationSession });
|
|
486
|
+
continue;
|
|
487
|
+
}
|
|
488
|
+
// Escalation phase (past the cap, or the F1 direct path). Grouped per destination
|
|
489
|
+
// regardless of due-ness so the aggregate refresh rides every detection pass.
|
|
490
|
+
const reason = mode === "failed"
|
|
491
|
+
? `wake failed ${view.attempts} times over ${minutesSince(view.firstMarkerTs ?? row.tsCreated, now)} min`
|
|
492
|
+
: `unconfirmed delivery with no pickup evidence over ${minutesSince(row.tsCreated, now)} min`;
|
|
493
|
+
const dest = row.destinationSession;
|
|
494
|
+
if (!escalating.has(dest))
|
|
495
|
+
escalating.set(dest, []);
|
|
496
|
+
escalating.get(dest).push({ row, view, mode, reason, due, suspended });
|
|
497
|
+
}
|
|
498
|
+
// F3 — per-destination aggregation: ONE escalation carrying the row list, refreshed
|
|
499
|
+
// not duplicated (the S02 idempotency shape), and rung markers on every member baton.
|
|
500
|
+
for (const [dest, members] of escalating) {
|
|
501
|
+
const orch = resolveOrch(dest);
|
|
502
|
+
// F3 — the aggregate refresh is detection-gated (the S02 idempotency shape): a
|
|
503
|
+
// live escalation group refreshes its one open row every pass, no wake attached.
|
|
504
|
+
await refreshEscalationRowIfExists(deps, dest, members);
|
|
505
|
+
const actionable = members.filter((m) => m.due && !m.suspended);
|
|
506
|
+
const needsOrchRung = actionable.filter((m) => !m.view.orchRung);
|
|
507
|
+
const reason = needsOrchRung[0]?.reason ?? members[0].reason;
|
|
508
|
+
if (needsOrchRung.length > 0) {
|
|
509
|
+
if (orch === null || orch === dest) {
|
|
510
|
+
// F4: rung 1 self-skips when it resolves to the destination itself (or nowhere)
|
|
511
|
+
// — never escalate INTO the dead seat; fall through to the operator rung now.
|
|
512
|
+
// The operator floor must be a VISIBLE OBJECT, not markers alone: ensure the
|
|
513
|
+
// per-destination escalation row exists (addressed to the operator seat, else
|
|
514
|
+
// the obligation's own creator) so the escalations view and the health count
|
|
515
|
+
// expose it — it stays open past the batons' exhaustion.
|
|
516
|
+
const floorDest = resolveOperatorSeat() ?? needsOrchRung[0].row.sourceSession;
|
|
517
|
+
await ensureEscalationRow(deps, dest, floorDest, needsOrchRung, reason);
|
|
518
|
+
for (const m of needsOrchRung) {
|
|
519
|
+
appendMarker(deps.queueRepo, m.row, `${LADDER_RUNG_PREFIX} orchestrator self-skip (resolves to ${orch === null ? "no orchestrator" : "destination"}) reason=${m.reason}`);
|
|
520
|
+
if (await operatorRung(deps, m.row, m.reason, actions, m.view)) {
|
|
521
|
+
appendExhausted(deps.queueRepo, m.row, "operator rung resolved");
|
|
522
|
+
exhaustedThisTick += 1;
|
|
523
|
+
}
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
|
+
else {
|
|
527
|
+
const escRow = await ensureEscalationRow(deps, dest, orch, members, reason);
|
|
528
|
+
const outcome = await attemptWake(escRow.qitemId, orch);
|
|
529
|
+
for (const m of needsOrchRung) {
|
|
530
|
+
appendMarker(deps.queueRepo, m.row, `${LADDER_RUNG_PREFIX} orchestrator -> ${orch} outcome=${outcome} reason=${m.reason}`);
|
|
531
|
+
actions.push({ qitemId: m.row.qitemId, action: "escalate-orchestrator", target: orch });
|
|
532
|
+
if (!outcome.startsWith("failed:")) {
|
|
533
|
+
// Delivered (or durable-unconfirmed — the aggregate row itself is now the
|
|
534
|
+
// orchestrator's durable obligation; S02 nets it if it sits unclaimed).
|
|
535
|
+
appendExhausted(deps.queueRepo, m.row, `escalated to orchestrator (${outcome === "verified" ? "delivered" : outcome})`);
|
|
536
|
+
exhaustedThisTick += 1;
|
|
537
|
+
}
|
|
538
|
+
}
|
|
539
|
+
}
|
|
540
|
+
continue; // one rung per destination per tick — bounded advance (F4)
|
|
541
|
+
}
|
|
542
|
+
// Orchestrator rung recorded and failed → advance to the operator rung.
|
|
543
|
+
for (const m of actionable) {
|
|
544
|
+
if (m.view.orchRung && m.view.orchRungFailed && !m.view.opRung) {
|
|
545
|
+
if (await operatorRung(deps, m.row, m.reason, actions, m.view)) {
|
|
546
|
+
appendExhausted(deps.queueRepo, m.row, "operator rung resolved");
|
|
547
|
+
exhaustedThisTick += 1;
|
|
548
|
+
}
|
|
549
|
+
}
|
|
550
|
+
}
|
|
551
|
+
// AM-F3 resolution pass: a rung whose engine outcome was pending exhausts
|
|
552
|
+
// once the row carries its resolution (posted receipt or termination) —
|
|
553
|
+
// never before, never silently.
|
|
554
|
+
for (const m of members) {
|
|
555
|
+
if (m.view.opEngineDispatched && !m.view.exhausted && m.view.opOutcomeResolved) {
|
|
556
|
+
appendExhausted(deps.queueRepo, m.row, "engine outcome resolved");
|
|
557
|
+
exhaustedThisTick += 1;
|
|
558
|
+
}
|
|
559
|
+
}
|
|
560
|
+
}
|
|
561
|
+
const escalationsOpen = deps.db
|
|
562
|
+
.prepare(`SELECT COUNT(*) AS n FROM queue_items
|
|
563
|
+
WHERE state IN ('pending','in-progress','blocked') AND tags LIKE ?`)
|
|
564
|
+
.get(`%"${WAKE_ESCALATION_TAG}"%`).n;
|
|
565
|
+
const outcome = actions.length > 0 ? "actions" : "clean";
|
|
566
|
+
status?.record(outcome, { active: activeLadders, escalations: escalationsOpen, exhausted: exhaustedThisTick });
|
|
567
|
+
return { outcome, actions };
|
|
568
|
+
}
|
|
569
|
+
catch (err) {
|
|
570
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
571
|
+
log(`[wake-ladder] TICK FAILED (skipping loudly): ${message}`);
|
|
572
|
+
status?.record("failed", { error: message });
|
|
573
|
+
return { outcome: "failed", actions: [], error: message };
|
|
574
|
+
}
|
|
575
|
+
}
|
|
576
|
+
/** The operator rung (OPR.0.5.6.1 A1.2/AM-F3): the delivery rules engine IS the rung's
|
|
577
|
+
* delivery leg. With an engine port wired, the rung dispatches exactly once per episode,
|
|
578
|
+
* records the decision, and exhausts ONLY when the outcome resolves (synchronously, or
|
|
579
|
+
* later via the posted receipt / termination record the resolution pass reads). Without
|
|
580
|
+
* a port the pre-engine floor stands honestly and exhausts as before.
|
|
581
|
+
* Returns true when the ladder may append its exhausted marker now. */
|
|
582
|
+
async function operatorRung(deps, row, reason, actions, view) {
|
|
583
|
+
const repo = deps.queueRepo;
|
|
584
|
+
if (!deps.deliveryEngine) {
|
|
585
|
+
appendMarker(repo, row, `${LADDER_RUNG_PREFIX} operator floor=escalation view + daemon-health (delivery engine not wired) reason=${reason}`);
|
|
586
|
+
actions.push({ qitemId: row.qitemId, action: "escalate-operator" });
|
|
587
|
+
return true;
|
|
588
|
+
}
|
|
589
|
+
if (view.opEngineDispatched) {
|
|
590
|
+
// Exactly-once per episode: never re-dispatch; the resolution pass decides advance.
|
|
591
|
+
return view.opOutcomeResolved;
|
|
592
|
+
}
|
|
593
|
+
const outcome = await deps.deliveryEngine.dispatchEscalation(row, reason);
|
|
594
|
+
appendMarker(repo, row, `${LADDER_RUNG_PREFIX} operator dispatched-to-engine decision=${outcome.decision} resolved=${outcome.resolved}${outcome.notificationKey ? ` notification_key=${outcome.notificationKey}` : ""} reason=${reason}`);
|
|
595
|
+
actions.push({ qitemId: row.qitemId, action: "escalate-operator" });
|
|
596
|
+
return outcome.resolved;
|
|
597
|
+
}
|
|
598
|
+
function appendExhausted(repo, row, why) {
|
|
599
|
+
appendMarker(repo, row, `${LADDER_EXHAUSTED_PREFIX} ${why}`);
|
|
600
|
+
}
|
|
601
|
+
/** Ensure the per-destination aggregate escalation row (F3): one open row, deduped by
|
|
602
|
+
* tag, refreshed on re-detection — never one row per baton. The row is a NEW durable
|
|
603
|
+
* obligation addressed to the orchestrator; the baton itself is never duplicated. */
|
|
604
|
+
/** Refresh-only leg of the F3 aggregate: an already-open escalation row gains a
|
|
605
|
+
* detection-pass note naming the current member list; creation stays with the rung
|
|
606
|
+
* action so a row never exists before its first delivery attempt. */
|
|
607
|
+
async function refreshEscalationRowIfExists(deps, dest, members) {
|
|
608
|
+
const existing = deps.db
|
|
609
|
+
.prepare(`SELECT qitem_id FROM queue_items
|
|
610
|
+
WHERE state IN ('pending','in-progress','blocked') AND tags LIKE ? LIMIT 1`)
|
|
611
|
+
.get(`%"${escalationDedupTag(dest)}"%`);
|
|
612
|
+
if (!existing)
|
|
613
|
+
return;
|
|
614
|
+
deps.queueRepo.transitionLog.append({
|
|
615
|
+
qitemId: existing.qitem_id,
|
|
616
|
+
state: "pending",
|
|
617
|
+
actorSession: LADDER_ACTOR,
|
|
618
|
+
transitionNote: `wake-escalation refresh: ${members.length} stuck baton(s) for ${dest} — ${members
|
|
619
|
+
.map((m) => m.row.qitemId)
|
|
620
|
+
.join(", ")}`,
|
|
621
|
+
});
|
|
622
|
+
}
|
|
623
|
+
async function ensureEscalationRow(deps, dest, orch, members, reason) {
|
|
624
|
+
const dedupTag = escalationDedupTag(dest);
|
|
625
|
+
const existing = deps.db
|
|
626
|
+
.prepare(`SELECT qitem_id FROM queue_items
|
|
627
|
+
WHERE state IN ('pending','in-progress','blocked') AND tags LIKE ? LIMIT 1`)
|
|
628
|
+
.get(`%"${dedupTag}"%`);
|
|
629
|
+
if (existing) {
|
|
630
|
+
deps.queueRepo.transitionLog.append({
|
|
631
|
+
qitemId: existing.qitem_id,
|
|
632
|
+
state: "pending",
|
|
633
|
+
actorSession: LADDER_ACTOR,
|
|
634
|
+
transitionNote: `wake-escalation refresh: ${members.length} stuck baton(s) for ${dest} — ${members
|
|
635
|
+
.map((m) => m.row.qitemId)
|
|
636
|
+
.join(", ")}`,
|
|
637
|
+
});
|
|
638
|
+
return { qitemId: existing.qitem_id };
|
|
639
|
+
}
|
|
640
|
+
const body = `WAKE ESCALATION (aggregated per destination)\n` +
|
|
641
|
+
`destination: ${dest}\n` +
|
|
642
|
+
`reason: ${reason}\n` +
|
|
643
|
+
`stuck batons (${members.length}):\n` +
|
|
644
|
+
members.map((m) => `- ${m.row.qitemId} (${m.reason})`).join("\n") +
|
|
645
|
+
`\nThe rows above still carry their obligations exactly-once; this escalation is the wake, not the content.`;
|
|
646
|
+
const created = await deps.queueRepo.create({
|
|
647
|
+
sourceSession: members[0].row.sourceSession,
|
|
648
|
+
destinationSession: orch,
|
|
649
|
+
body,
|
|
650
|
+
summary: `Wake escalation: ${members.length} baton(s) stuck at ${dest} — ${reason}`,
|
|
651
|
+
tags: [WAKE_ESCALATION_TAG, dedupTag],
|
|
652
|
+
nudge: false, // delivery is the ladder's own rung attempt, recorded with its outcome
|
|
653
|
+
});
|
|
654
|
+
return { qitemId: created.qitemId };
|
|
655
|
+
}
|
|
656
|
+
/** The standing loop — the watchdog-scheduler pattern (injected seams, runTickNow, no
|
|
657
|
+
* overlapping ticks), so the ladder is unit-drivable without timers. */
|
|
658
|
+
export class WakeLadderScheduler {
|
|
659
|
+
deps;
|
|
660
|
+
timer = null;
|
|
661
|
+
inflight = null;
|
|
662
|
+
shuttingDown = false;
|
|
663
|
+
started = false;
|
|
664
|
+
constructor(deps) {
|
|
665
|
+
this.deps = deps;
|
|
666
|
+
}
|
|
667
|
+
start() {
|
|
668
|
+
if (this.started)
|
|
669
|
+
return;
|
|
670
|
+
this.started = true;
|
|
671
|
+
this.shuttingDown = false;
|
|
672
|
+
this.scheduleNext();
|
|
673
|
+
}
|
|
674
|
+
async stop() {
|
|
675
|
+
this.shuttingDown = true;
|
|
676
|
+
if (this.timer) {
|
|
677
|
+
(this.deps.clearTimer ?? clearTimeout)(this.timer);
|
|
678
|
+
this.timer = null;
|
|
679
|
+
}
|
|
680
|
+
if (this.inflight)
|
|
681
|
+
await this.inflight.catch(() => { });
|
|
682
|
+
this.started = false;
|
|
683
|
+
}
|
|
684
|
+
async runTickNow() {
|
|
685
|
+
if (this.inflight) {
|
|
686
|
+
await this.inflight;
|
|
687
|
+
return;
|
|
688
|
+
}
|
|
689
|
+
this.inflight = this.deps.runTick().finally(() => {
|
|
690
|
+
this.inflight = null;
|
|
691
|
+
});
|
|
692
|
+
await this.inflight;
|
|
693
|
+
}
|
|
694
|
+
scheduleNext() {
|
|
695
|
+
if (this.shuttingDown)
|
|
696
|
+
return;
|
|
697
|
+
const ms = this.deps.tickIntervalMs ?? DEFAULT_WAKE_RETRY_INTERVAL_SECONDS * 1000;
|
|
698
|
+
this.timer = (this.deps.setTimer ?? setTimeout)(() => {
|
|
699
|
+
void this.runTickNow()
|
|
700
|
+
.catch((err) => (this.deps.onTickError ?? console.error)(err))
|
|
701
|
+
.finally(() => this.scheduleNext());
|
|
702
|
+
}, ms);
|
|
703
|
+
}
|
|
704
|
+
}
|
|
705
|
+
//# sourceMappingURL=queue-wake-ladder.js.map
|