@openrig/cli 0.5.4 → 0.5.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (747) hide show
  1. package/daemon/assets/guidance/openrig-start.md +7 -0
  2. package/daemon/assets/onboarding/01-world-and-purpose.md +52 -0
  3. package/daemon/assets/onboarding/02-self-and-competent-action.md +57 -0
  4. package/daemon/assets/plugins/openrig-core/README.md +5 -2
  5. package/daemon/assets/plugins/openrig-core/hooks/claude.json +3 -12
  6. package/daemon/assets/plugins/openrig-core/hooks/codex.json +5 -12
  7. package/daemon/assets/plugins/openrig-core/hooks/scripts/refocus.cjs +194 -124
  8. package/daemon/assets/plugins/openrig-core/skills/mission-slice-sop/SKILL.md +18 -23
  9. package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/CHANGELOG.md +92 -0
  10. package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/REVISION-GUIDE.md +34 -0
  11. package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/ROADMAP.md +23 -0
  12. package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/ROLLOUT.md +234 -0
  13. package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/SKILL.md +404 -0
  14. package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/scripts/compose.py +653 -0
  15. package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/scripts/scaffold.sh +34 -0
  16. package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/scripts/trace-due.sh +32 -0
  17. package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/scripts/trace-stamp.sh +5 -0
  18. package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/scripts/trunk-diff.sh +18 -0
  19. package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/templates/LEARNED.md +40 -0
  20. package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/templates/NOTES.md +9 -0
  21. package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/templates/PLAYBOOK.md +5 -0
  22. package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/templates/SOP.md +24 -0
  23. package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/templates/SPEC.md +54 -0
  24. package/daemon/assets/plugins/openrig-core/skills/openrig-skills/SKILL.md +2 -0
  25. package/daemon/assets/plugins/openrig-core/skills/refocusing/SKILL.md +31 -0
  26. package/daemon/assets/plugins/openrig-core/skills/refocusing/references/refocus.md +22 -0
  27. package/daemon/assets/plugins/openrig-core/skills/refocusing/scripts/trace-to-root.py +221 -0
  28. package/daemon/assets/plugins/openrig-core/skills/retiring-and-inheriting-a-seat/SKILL.md +3 -3
  29. package/daemon/context-packs/onboarding-width/manifest.yaml +11 -0
  30. package/daemon/context-packs/{world/install/reference-material.md → onboarding-width/public-reference-material.md} +4 -26
  31. package/daemon/context-packs/{world/install/what-you-can-do.md → onboarding-width/public-what-you-can-do.md} +13 -9
  32. package/daemon/context-packs/skills/core/agent-starters/manifest.yaml +1 -1
  33. package/daemon/context-packs/skills/core/agent-startup-and-context-ingestion/SKILL.md +1 -1
  34. package/daemon/context-packs/skills/core/agent-startup-and-context-ingestion/manifest.yaml +1 -1
  35. package/daemon/context-packs/skills/core/attention-queue/manifest.yaml +1 -1
  36. package/daemon/context-packs/skills/core/cross-host-rig-commands/manifest.yaml +1 -1
  37. package/daemon/context-packs/skills/core/human-in-the-loop/manifest.yaml +1 -1
  38. package/daemon/context-packs/skills/core/openrig-architect/manifest.yaml +1 -1
  39. package/daemon/context-packs/skills/core/openrig-cmux/manifest.yaml +1 -1
  40. package/daemon/context-packs/skills/core/openrig-herdr/manifest.yaml +1 -1
  41. package/daemon/context-packs/skills/core/openrig-upgrade/manifest.yaml +1 -1
  42. package/daemon/context-packs/skills/core/rig-bundles-and-shareable-artifacts/manifest.yaml +1 -1
  43. package/daemon/context-packs/skills/core/rig-lifecycle/manifest.yaml +1 -1
  44. package/daemon/context-packs/skills/core/session-source-fork/manifest.yaml +1 -1
  45. package/daemon/context-packs/skills/core/specification-system/manifest.yaml +1 -1
  46. package/daemon/context-packs/skills/core/topology-mutation-and-seat-management/manifest.yaml +1 -1
  47. package/daemon/context-packs/skills/core/watchdog/manifest.yaml +1 -1
  48. package/daemon/context-packs/skills/pm/backlog-capture/manifest.yaml +1 -1
  49. package/daemon/context-packs/skills/pm/context-builder/manifest.yaml +1 -1
  50. package/daemon/context-packs/skills/pm/exec-summary/manifest.yaml +1 -1
  51. package/daemon/context-packs/skills/pm/office-hours/manifest.yaml +1 -1
  52. package/daemon/context-packs/skills/pm/plan-review/manifest.yaml +1 -1
  53. package/daemon/context-packs/skills/pm/requirements-writer/SKILL.md +21 -15
  54. package/daemon/context-packs/skills/pm/requirements-writer/manifest.yaml +3 -3
  55. package/daemon/context-packs/skills/pm/ui-mockup/manifest.yaml +1 -1
  56. package/daemon/context-packs/skills/pods/development-team/manifest.yaml +1 -1
  57. package/daemon/context-packs/skills/pods/orchestration-team/manifest.yaml +1 -1
  58. package/daemon/context-packs/skills/pods/oversight-team/manifest.yaml +1 -1
  59. package/daemon/context-packs/skills/pods/review-team/manifest.yaml +1 -1
  60. package/daemon/context-packs/skills/process/agent-browser/manifest.yaml +1 -1
  61. package/daemon/context-packs/skills/process/brainstorming/manifest.yaml +1 -1
  62. package/daemon/context-packs/skills/process/context-engineering/manifest.yaml +1 -1
  63. package/daemon/context-packs/skills/process/dogfood/manifest.yaml +1 -1
  64. package/daemon/context-packs/skills/process/executing-plans/manifest.yaml +1 -1
  65. package/daemon/context-packs/skills/process/frontend-design/manifest.yaml +1 -1
  66. package/daemon/context-packs/skills/process/systematic-debugging/manifest.yaml +1 -1
  67. package/daemon/context-packs/skills/process/test-driven-development/manifest.yaml +1 -1
  68. package/daemon/context-packs/skills/process/using-superpowers/manifest.yaml +1 -1
  69. package/daemon/context-packs/skills/process/verification-before-completion/manifest.yaml +1 -1
  70. package/daemon/context-packs/skills/process/writing-plans/manifest.yaml +1 -1
  71. package/daemon/context-packs/world-example/manifest.yaml +8 -0
  72. package/daemon/context-packs/world-example/your-world.md +37 -0
  73. package/daemon/dist/adapters/claude-code-adapter.d.ts +15 -0
  74. package/daemon/dist/adapters/claude-code-adapter.d.ts.map +1 -1
  75. package/daemon/dist/adapters/claude-code-adapter.js +57 -0
  76. package/daemon/dist/adapters/claude-code-adapter.js.map +1 -1
  77. package/daemon/dist/build-info.js +3 -3
  78. package/daemon/dist/db/all-migrations.d.ts.map +1 -1
  79. package/daemon/dist/db/all-migrations.js +4 -0
  80. package/daemon/dist/db/all-migrations.js.map +1 -1
  81. package/daemon/dist/db/migrations/072_thread_seat_map.d.ts +3 -0
  82. package/daemon/dist/db/migrations/072_thread_seat_map.d.ts.map +1 -0
  83. package/daemon/dist/db/migrations/072_thread_seat_map.js +22 -0
  84. package/daemon/dist/db/migrations/072_thread_seat_map.js.map +1 -0
  85. package/daemon/dist/db/migrations/073_queue_transition_wakes.d.ts +3 -0
  86. package/daemon/dist/db/migrations/073_queue_transition_wakes.d.ts.map +1 -0
  87. package/daemon/dist/db/migrations/073_queue_transition_wakes.js +21 -0
  88. package/daemon/dist/db/migrations/073_queue_transition_wakes.js.map +1 -0
  89. package/daemon/dist/domain/activity-taxonomy.d.ts +112 -0
  90. package/daemon/dist/domain/activity-taxonomy.d.ts.map +1 -0
  91. package/daemon/dist/domain/activity-taxonomy.js +99 -0
  92. package/daemon/dist/domain/activity-taxonomy.js.map +1 -0
  93. package/daemon/dist/domain/bind-plan.d.ts +19 -0
  94. package/daemon/dist/domain/bind-plan.d.ts.map +1 -0
  95. package/daemon/dist/domain/bind-plan.js +25 -0
  96. package/daemon/dist/domain/bind-plan.js.map +1 -0
  97. package/daemon/dist/domain/event-bus.d.ts +6 -0
  98. package/daemon/dist/domain/event-bus.d.ts.map +1 -1
  99. package/daemon/dist/domain/event-bus.js +15 -5
  100. package/daemon/dist/domain/event-bus.js.map +1 -1
  101. package/daemon/dist/domain/gateway/gateway-process-main.d.ts.map +1 -1
  102. package/daemon/dist/domain/gateway/gateway-process-main.js +9 -0
  103. package/daemon/dist/domain/gateway/gateway-process-main.js.map +1 -1
  104. package/daemon/dist/domain/gateway/gateway-process.d.ts.map +1 -1
  105. package/daemon/dist/domain/gateway/gateway-process.js +9 -0
  106. package/daemon/dist/domain/gateway/gateway-process.js.map +1 -1
  107. package/daemon/dist/domain/gateway/gateway-subsystem.d.ts +80 -0
  108. package/daemon/dist/domain/gateway/gateway-subsystem.d.ts.map +1 -0
  109. package/daemon/dist/domain/gateway/gateway-subsystem.js +149 -0
  110. package/daemon/dist/domain/gateway/gateway-subsystem.js.map +1 -0
  111. package/daemon/dist/domain/gateway/human-registry.d.ts +109 -0
  112. package/daemon/dist/domain/gateway/human-registry.d.ts.map +1 -1
  113. package/daemon/dist/domain/gateway/human-registry.js +250 -0
  114. package/daemon/dist/domain/gateway/human-registry.js.map +1 -1
  115. package/{dist → daemon/dist/domain/gateway}/slack/config.d.ts +8 -5
  116. package/daemon/dist/domain/gateway/slack/config.d.ts.map +1 -0
  117. package/{dist → daemon/dist/domain/gateway}/slack/config.js +8 -6
  118. package/daemon/dist/domain/gateway/slack/config.js.map +1 -0
  119. package/{dist → daemon/dist/domain/gateway}/slack/inbound-admission.d.ts +1 -1
  120. package/daemon/dist/domain/gateway/slack/inbound-admission.d.ts.map +1 -0
  121. package/daemon/dist/domain/gateway/slack/inbound-admission.js.map +1 -0
  122. package/{dist → daemon/dist/domain/gateway}/slack/inbound.d.ts +14 -3
  123. package/daemon/dist/domain/gateway/slack/inbound.d.ts.map +1 -0
  124. package/{dist → daemon/dist/domain/gateway}/slack/inbound.js +6 -5
  125. package/daemon/dist/domain/gateway/slack/inbound.js.map +1 -0
  126. package/daemon/dist/domain/gateway/slack/message.d.ts +80 -0
  127. package/daemon/dist/domain/gateway/slack/message.d.ts.map +1 -0
  128. package/daemon/dist/domain/gateway/slack/message.js +164 -0
  129. package/daemon/dist/domain/gateway/slack/message.js.map +1 -0
  130. package/daemon/dist/domain/gateway/slack/outbound-driver.d.ts +54 -0
  131. package/daemon/dist/domain/gateway/slack/outbound-driver.d.ts.map +1 -0
  132. package/daemon/dist/domain/gateway/slack/outbound-driver.js +96 -0
  133. package/daemon/dist/domain/gateway/slack/outbound-driver.js.map +1 -0
  134. package/daemon/dist/domain/gateway/slack/queue-access.d.ts +53 -0
  135. package/daemon/dist/domain/gateway/slack/queue-access.d.ts.map +1 -0
  136. package/daemon/dist/domain/gateway/slack/queue-access.js +72 -0
  137. package/daemon/dist/domain/gateway/slack/queue-access.js.map +1 -0
  138. package/daemon/dist/domain/gateway/slack/secrets.d.ts.map +1 -0
  139. package/daemon/dist/domain/gateway/slack/secrets.js.map +1 -0
  140. package/daemon/dist/domain/gateway/slack/slack-api.d.ts +106 -0
  141. package/daemon/dist/domain/gateway/slack/slack-api.d.ts.map +1 -0
  142. package/daemon/dist/domain/gateway/slack/slack-api.js +198 -0
  143. package/daemon/dist/domain/gateway/slack/slack-api.js.map +1 -0
  144. package/daemon/dist/domain/gateway/slack/slack-delivery.d.ts +47 -0
  145. package/daemon/dist/domain/gateway/slack/slack-delivery.d.ts.map +1 -0
  146. package/daemon/dist/domain/gateway/slack/slack-delivery.js +147 -0
  147. package/daemon/dist/domain/gateway/slack/slack-delivery.js.map +1 -0
  148. package/daemon/dist/domain/gateway/slack/slack-subsystem.d.ts +21 -0
  149. package/daemon/dist/domain/gateway/slack/slack-subsystem.d.ts.map +1 -0
  150. package/daemon/dist/domain/gateway/slack/slack-subsystem.js +198 -0
  151. package/daemon/dist/domain/gateway/slack/slack-subsystem.js.map +1 -0
  152. package/daemon/dist/domain/gateway/slack/socket-inbound.d.ts +30 -0
  153. package/daemon/dist/domain/gateway/slack/socket-inbound.d.ts.map +1 -0
  154. package/daemon/dist/domain/gateway/slack/socket-inbound.js +99 -0
  155. package/daemon/dist/domain/gateway/slack/socket-inbound.js.map +1 -0
  156. package/daemon/dist/domain/gateway/slack/state-store.d.ts.map +1 -0
  157. package/daemon/dist/domain/gateway/slack/state-store.js.map +1 -0
  158. package/daemon/dist/domain/gateway/slack/thread-routing.d.ts +17 -0
  159. package/daemon/dist/domain/gateway/slack/thread-routing.d.ts.map +1 -0
  160. package/daemon/dist/domain/gateway/slack/thread-routing.js +35 -0
  161. package/daemon/dist/domain/gateway/slack/thread-routing.js.map +1 -0
  162. package/daemon/dist/domain/gateway/slack/thread-seat-map.d.ts +56 -0
  163. package/daemon/dist/domain/gateway/slack/thread-seat-map.d.ts.map +1 -0
  164. package/daemon/dist/domain/gateway/slack/thread-seat-map.js +103 -0
  165. package/daemon/dist/domain/gateway/slack/thread-seat-map.js.map +1 -0
  166. package/daemon/dist/domain/gateway/spawn-gateway.d.ts.map +1 -1
  167. package/daemon/dist/domain/gateway/spawn-gateway.js +9 -0
  168. package/daemon/dist/domain/gateway/spawn-gateway.js.map +1 -1
  169. package/daemon/dist/domain/gateway/transport.d.ts.map +1 -1
  170. package/daemon/dist/domain/gateway/transport.js +9 -0
  171. package/daemon/dist/domain/gateway/transport.js.map +1 -1
  172. package/daemon/dist/domain/node-inventory.d.ts.map +1 -1
  173. package/daemon/dist/domain/node-inventory.js +20 -0
  174. package/daemon/dist/domain/node-inventory.js.map +1 -1
  175. package/daemon/dist/domain/parked-query.d.ts +81 -0
  176. package/daemon/dist/domain/parked-query.d.ts.map +1 -0
  177. package/daemon/dist/domain/parked-query.js +126 -0
  178. package/daemon/dist/domain/parked-query.js.map +1 -0
  179. package/daemon/dist/domain/queue-pickup.d.ts +38 -0
  180. package/daemon/dist/domain/queue-pickup.d.ts.map +1 -0
  181. package/daemon/dist/domain/queue-pickup.js +67 -0
  182. package/daemon/dist/domain/queue-pickup.js.map +1 -0
  183. package/daemon/dist/domain/queue-repository.d.ts +38 -10
  184. package/daemon/dist/domain/queue-repository.d.ts.map +1 -1
  185. package/daemon/dist/domain/queue-repository.js +267 -35
  186. package/daemon/dist/domain/queue-repository.js.map +1 -1
  187. package/daemon/dist/domain/queue-stuck-sweep.d.ts +77 -0
  188. package/daemon/dist/domain/queue-stuck-sweep.d.ts.map +1 -0
  189. package/daemon/dist/domain/queue-stuck-sweep.js +348 -0
  190. package/daemon/dist/domain/queue-stuck-sweep.js.map +1 -0
  191. package/daemon/dist/domain/queue-wake-ladder.d.ts +96 -0
  192. package/daemon/dist/domain/queue-wake-ladder.d.ts.map +1 -0
  193. package/daemon/dist/domain/queue-wake-ladder.js +533 -0
  194. package/daemon/dist/domain/queue-wake-ladder.js.map +1 -0
  195. package/daemon/dist/domain/queue-wake-repository.d.ts +37 -0
  196. package/daemon/dist/domain/queue-wake-repository.d.ts.map +1 -0
  197. package/daemon/dist/domain/queue-wake-repository.js +80 -0
  198. package/daemon/dist/domain/queue-wake-repository.js.map +1 -0
  199. package/daemon/dist/domain/rebuild-priming-chain.d.ts +28 -0
  200. package/daemon/dist/domain/rebuild-priming-chain.d.ts.map +1 -0
  201. package/daemon/dist/domain/rebuild-priming-chain.js +71 -0
  202. package/daemon/dist/domain/rebuild-priming-chain.js.map +1 -0
  203. package/daemon/dist/domain/review/compose.d.ts +3 -1
  204. package/daemon/dist/domain/review/compose.d.ts.map +1 -1
  205. package/daemon/dist/domain/review/compose.js +14 -8
  206. package/daemon/dist/domain/review/compose.js.map +1 -1
  207. package/daemon/dist/domain/review/gather.d.ts.map +1 -1
  208. package/daemon/dist/domain/review/gather.js +3 -1
  209. package/daemon/dist/domain/review/gather.js.map +1 -1
  210. package/daemon/dist/domain/rigspec-instantiator.d.ts +3 -0
  211. package/daemon/dist/domain/rigspec-instantiator.d.ts.map +1 -1
  212. package/daemon/dist/domain/rigspec-instantiator.js +18 -0
  213. package/daemon/dist/domain/rigspec-instantiator.js.map +1 -1
  214. package/daemon/dist/domain/scope/plan-lock-artifacts.d.ts +6 -5
  215. package/daemon/dist/domain/scope/plan-lock-artifacts.d.ts.map +1 -1
  216. package/daemon/dist/domain/scope/plan-lock-artifacts.js +23 -20
  217. package/daemon/dist/domain/scope/plan-lock-artifacts.js.map +1 -1
  218. package/daemon/dist/domain/scope/scaffold-placeholder.d.ts +4 -5
  219. package/daemon/dist/domain/scope/scaffold-placeholder.d.ts.map +1 -1
  220. package/daemon/dist/domain/scope/scaffold-placeholder.js +6 -7
  221. package/daemon/dist/domain/scope/scaffold-placeholder.js.map +1 -1
  222. package/daemon/dist/domain/scope/scope-approve.d.ts +1 -1
  223. package/daemon/dist/domain/scope/scope-approve.d.ts.map +1 -1
  224. package/daemon/dist/domain/scope/scope-approve.js +5 -4
  225. package/daemon/dist/domain/scope/scope-approve.js.map +1 -1
  226. package/daemon/dist/domain/scope/scope-audit.d.ts +42 -3
  227. package/daemon/dist/domain/scope/scope-audit.d.ts.map +1 -1
  228. package/daemon/dist/domain/scope/scope-audit.js +78 -93
  229. package/daemon/dist/domain/scope/scope-audit.js.map +1 -1
  230. package/daemon/dist/domain/scope/scope-view-projection.d.ts.map +1 -1
  231. package/daemon/dist/domain/scope/scope-view-projection.js +7 -2
  232. package/daemon/dist/domain/scope/scope-view-projection.js.map +1 -1
  233. package/daemon/dist/domain/seat-activity-service.d.ts +91 -0
  234. package/daemon/dist/domain/seat-activity-service.d.ts.map +1 -1
  235. package/daemon/dist/domain/seat-activity-service.js +416 -1
  236. package/daemon/dist/domain/seat-activity-service.js.map +1 -1
  237. package/daemon/dist/domain/seat-handover-planner.d.ts +14 -0
  238. package/daemon/dist/domain/seat-handover-planner.d.ts.map +1 -1
  239. package/daemon/dist/domain/seat-handover-planner.js +14 -1
  240. package/daemon/dist/domain/seat-handover-planner.js.map +1 -1
  241. package/daemon/dist/domain/seat-handover-service.d.ts +54 -1
  242. package/daemon/dist/domain/seat-handover-service.d.ts.map +1 -1
  243. package/daemon/dist/domain/seat-handover-service.js +162 -19
  244. package/daemon/dist/domain/seat-handover-service.js.map +1 -1
  245. package/daemon/dist/domain/session-transport.js +1 -2
  246. package/daemon/dist/domain/session-transport.js.map +1 -1
  247. package/daemon/dist/domain/successor-session-launcher.d.ts +6 -1
  248. package/daemon/dist/domain/successor-session-launcher.d.ts.map +1 -1
  249. package/daemon/dist/domain/successor-session-launcher.js +3 -3
  250. package/daemon/dist/domain/successor-session-launcher.js.map +1 -1
  251. package/daemon/dist/domain/types.d.ts +33 -0
  252. package/daemon/dist/domain/types.d.ts.map +1 -1
  253. package/daemon/dist/domain/types.js.map +1 -1
  254. package/daemon/dist/domain/user-settings/settings-store.d.ts +1 -1
  255. package/daemon/dist/domain/user-settings/settings-store.d.ts.map +1 -1
  256. package/daemon/dist/domain/user-settings/settings-store.js +48 -0
  257. package/daemon/dist/domain/user-settings/settings-store.js.map +1 -1
  258. package/daemon/dist/domain/view-projector.d.ts +1 -1
  259. package/daemon/dist/domain/view-projector.d.ts.map +1 -1
  260. package/daemon/dist/domain/view-projector.js +41 -2
  261. package/daemon/dist/domain/view-projector.js.map +1 -1
  262. package/daemon/dist/domain/watchdog-policy-engine.d.ts +7 -0
  263. package/daemon/dist/domain/watchdog-policy-engine.d.ts.map +1 -1
  264. package/daemon/dist/domain/watchdog-policy-engine.js +3 -0
  265. package/daemon/dist/domain/watchdog-policy-engine.js.map +1 -1
  266. package/daemon/dist/domain/workspace/default-workspace-scaffold.d.ts +4 -3
  267. package/daemon/dist/domain/workspace/default-workspace-scaffold.d.ts.map +1 -1
  268. package/daemon/dist/domain/workspace/default-workspace-scaffold.js +56 -196
  269. package/daemon/dist/domain/workspace/default-workspace-scaffold.js.map +1 -1
  270. package/daemon/dist/domain/workspace/getting-started-narrative.js +1 -1
  271. package/daemon/dist/domain/workspace/getting-started-narrative.js.map +1 -1
  272. package/daemon/dist/domain/workspace/workspace-doctor.d.ts +8 -11
  273. package/daemon/dist/domain/workspace/workspace-doctor.d.ts.map +1 -1
  274. package/daemon/dist/domain/workspace/workspace-doctor.js +23 -25
  275. package/daemon/dist/domain/workspace/workspace-doctor.js.map +1 -1
  276. package/daemon/dist/gateway-slack-surface.d.ts +4 -0
  277. package/daemon/dist/gateway-slack-surface.d.ts.map +1 -0
  278. package/daemon/dist/gateway-slack-surface.js +8 -0
  279. package/daemon/dist/gateway-slack-surface.js.map +1 -0
  280. package/daemon/dist/index.d.ts +29 -0
  281. package/daemon/dist/index.d.ts.map +1 -1
  282. package/daemon/dist/index.js +99 -4
  283. package/daemon/dist/index.js.map +1 -1
  284. package/daemon/dist/lib/pane-envelope.d.ts +1 -1
  285. package/daemon/dist/lib/pane-envelope.d.ts.map +1 -1
  286. package/daemon/dist/lib/pane-envelope.js +8 -14
  287. package/daemon/dist/lib/pane-envelope.js.map +1 -1
  288. package/daemon/dist/routes/activity.d.ts +13 -0
  289. package/daemon/dist/routes/activity.d.ts.map +1 -1
  290. package/daemon/dist/routes/activity.js +186 -0
  291. package/daemon/dist/routes/activity.js.map +1 -1
  292. package/daemon/dist/routes/config.js +2 -2
  293. package/daemon/dist/routes/config.js.map +1 -1
  294. package/daemon/dist/routes/gateway.d.ts +3 -0
  295. package/daemon/dist/routes/gateway.d.ts.map +1 -0
  296. package/daemon/dist/routes/gateway.js +46 -0
  297. package/daemon/dist/routes/gateway.js.map +1 -0
  298. package/daemon/dist/routes/health-summary.d.ts.map +1 -1
  299. package/daemon/dist/routes/health-summary.js +8 -0
  300. package/daemon/dist/routes/health-summary.js.map +1 -1
  301. package/daemon/dist/routes/queue.d.ts.map +1 -1
  302. package/daemon/dist/routes/queue.js +3 -1
  303. package/daemon/dist/routes/queue.js.map +1 -1
  304. package/daemon/dist/routes/scope-audit.d.ts.map +1 -1
  305. package/daemon/dist/routes/scope-audit.js +72 -13
  306. package/daemon/dist/routes/scope-audit.js.map +1 -1
  307. package/daemon/dist/routes/seat.d.ts.map +1 -1
  308. package/daemon/dist/routes/seat.js +15 -0
  309. package/daemon/dist/routes/seat.js.map +1 -1
  310. package/daemon/dist/server.d.ts +17 -0
  311. package/daemon/dist/server.d.ts.map +1 -1
  312. package/daemon/dist/server.js +25 -4
  313. package/daemon/dist/server.js.map +1 -1
  314. package/daemon/dist/startup.d.ts +4 -0
  315. package/daemon/dist/startup.d.ts.map +1 -1
  316. package/daemon/dist/startup.js +33 -0
  317. package/daemon/dist/startup.js.map +1 -1
  318. package/daemon/docs/reference/agent-state-taxonomy.md +106 -0
  319. package/daemon/docs/reference/project-workspace.md +22 -14
  320. package/daemon/docs/reference/refocus-channel.md +27 -14
  321. package/daemon/docs/reference/sdlc-conventions.md +24 -13
  322. package/daemon/specs/agents/shared/skills/core/agent-startup-and-context-ingestion/SKILL.md +1 -1
  323. package/daemon/specs/agents/shared/skills/pm/requirements-writer/SKILL.md +21 -15
  324. package/daemon/specs/rigs/launch/kernel/agents/advisor/lead/guidance/role.md +1 -1
  325. package/dist/build-info.js +3 -3
  326. package/dist/commands/config-init-workspace.d.ts.map +1 -1
  327. package/dist/commands/config-init-workspace.js +32 -57
  328. package/dist/commands/config-init-workspace.js.map +1 -1
  329. package/dist/commands/config.d.ts.map +1 -1
  330. package/dist/commands/config.js +5 -0
  331. package/dist/commands/config.js.map +1 -1
  332. package/dist/commands/daemon.d.ts.map +1 -1
  333. package/dist/commands/daemon.js +14 -4
  334. package/dist/commands/daemon.js.map +1 -1
  335. package/dist/commands/gateway.d.ts +19 -1
  336. package/dist/commands/gateway.d.ts.map +1 -1
  337. package/dist/commands/gateway.js +157 -33
  338. package/dist/commands/gateway.js.map +1 -1
  339. package/dist/commands/parked.d.ts +3 -0
  340. package/dist/commands/parked.d.ts.map +1 -0
  341. package/dist/commands/parked.js +83 -0
  342. package/dist/commands/parked.js.map +1 -0
  343. package/dist/commands/proof.d.ts +2 -1
  344. package/dist/commands/proof.d.ts.map +1 -1
  345. package/dist/commands/proof.js +8 -8
  346. package/dist/commands/proof.js.map +1 -1
  347. package/dist/commands/ps.d.ts +10 -0
  348. package/dist/commands/ps.d.ts.map +1 -1
  349. package/dist/commands/ps.js +14 -3
  350. package/dist/commands/ps.js.map +1 -1
  351. package/dist/commands/queue.d.ts.map +1 -1
  352. package/dist/commands/queue.js +31 -3
  353. package/dist/commands/queue.js.map +1 -1
  354. package/dist/commands/scope.d.ts.map +1 -1
  355. package/dist/commands/scope.js +255 -136
  356. package/dist/commands/scope.js.map +1 -1
  357. package/dist/commands/seat.d.ts.map +1 -1
  358. package/dist/commands/seat.js +40 -10
  359. package/dist/commands/seat.js.map +1 -1
  360. package/dist/commands/send.d.ts +1 -1
  361. package/dist/commands/send.d.ts.map +1 -1
  362. package/dist/commands/send.js +13 -14
  363. package/dist/commands/send.js.map +1 -1
  364. package/dist/commands/slack.d.ts +14 -28
  365. package/dist/commands/slack.d.ts.map +1 -1
  366. package/dist/commands/slack.js +73 -187
  367. package/dist/commands/slack.js.map +1 -1
  368. package/dist/commands/start.d.ts +3 -0
  369. package/dist/commands/start.d.ts.map +1 -1
  370. package/dist/commands/start.js +12 -5
  371. package/dist/commands/start.js.map +1 -1
  372. package/dist/commands/up.d.ts.map +1 -1
  373. package/dist/commands/up.js +11 -4
  374. package/dist/commands/up.js.map +1 -1
  375. package/dist/commands/view.d.ts +4 -2
  376. package/dist/commands/view.d.ts.map +1 -1
  377. package/dist/commands/view.js +1 -1
  378. package/dist/commands/view.js.map +1 -1
  379. package/dist/commands/watchdog.d.ts.map +1 -1
  380. package/dist/commands/watchdog.js +2 -1
  381. package/dist/commands/watchdog.js.map +1 -1
  382. package/dist/commands/workspace.js +1 -1
  383. package/dist/config-store.d.ts +15 -1
  384. package/dist/config-store.d.ts.map +1 -1
  385. package/dist/config-store.js +60 -0
  386. package/dist/config-store.js.map +1 -1
  387. package/dist/cross-host-target.d.ts.map +1 -1
  388. package/dist/cross-host-target.js +5 -4
  389. package/dist/cross-host-target.js.map +1 -1
  390. package/dist/daemon-lifecycle.d.ts +45 -3
  391. package/dist/daemon-lifecycle.d.ts.map +1 -1
  392. package/dist/daemon-lifecycle.js +126 -0
  393. package/dist/daemon-lifecycle.js.map +1 -1
  394. package/dist/index.d.ts.map +1 -1
  395. package/dist/index.js +2 -0
  396. package/dist/index.js.map +1 -1
  397. package/dist/lib/scope/capability-delta.d.ts +9 -0
  398. package/dist/lib/scope/capability-delta.d.ts.map +1 -0
  399. package/dist/lib/scope/capability-delta.js +73 -0
  400. package/dist/lib/scope/capability-delta.js.map +1 -0
  401. package/dist/lib/scope/scaffold-placeholder.d.ts +4 -5
  402. package/dist/lib/scope/scaffold-placeholder.d.ts.map +1 -1
  403. package/dist/lib/scope/scaffold-placeholder.js +6 -7
  404. package/dist/lib/scope/scaffold-placeholder.js.map +1 -1
  405. package/dist/lib/scope/scope-audit.d.ts +42 -3
  406. package/dist/lib/scope/scope-audit.d.ts.map +1 -1
  407. package/dist/lib/scope/scope-audit.js +78 -93
  408. package/dist/lib/scope/scope-audit.js.map +1 -1
  409. package/dist/lib/scope/scope-fs.d.ts +18 -14
  410. package/dist/lib/scope/scope-fs.d.ts.map +1 -1
  411. package/dist/lib/scope/scope-fs.js +60 -29
  412. package/dist/lib/scope/scope-fs.js.map +1 -1
  413. package/dist/lib/scope/templates.d.ts +17 -17
  414. package/dist/lib/scope/templates.d.ts.map +1 -1
  415. package/dist/lib/scope/templates.js +35 -39
  416. package/dist/lib/scope/templates.js.map +1 -1
  417. package/dist/lib/scope-templates/backlog-deprecation.md +3 -1
  418. package/dist/lib/scope-templates/backlog-tech-debt.md +3 -1
  419. package/dist/lib/scope-templates/bug-fix.md +3 -1
  420. package/dist/lib/scope-templates/capability-delta.md +60 -0
  421. package/dist/lib/scope-templates/mission-placeholder.md +9 -40
  422. package/dist/lib/scope-templates/mission-progress.md +5 -6
  423. package/dist/lib/scope-templates/mission-release.md +9 -40
  424. package/dist/lib/scope-templates/notes.md +14 -0
  425. package/dist/lib/scope-templates/placeholder.md +3 -1
  426. package/dist/lib/scope-templates/proof.md +1 -1
  427. package/dist/lib/scope-templates/release-feature.md +3 -1
  428. package/dist/lib/scope-templates/research.md +3 -1
  429. package/dist/lib/scope-templates/slice-progress.md +4 -5
  430. package/node_modules/@openrig/daemon/dist/adapters/claude-code-adapter.d.ts +15 -0
  431. package/node_modules/@openrig/daemon/dist/adapters/claude-code-adapter.d.ts.map +1 -1
  432. package/node_modules/@openrig/daemon/dist/adapters/claude-code-adapter.js +57 -0
  433. package/node_modules/@openrig/daemon/dist/adapters/claude-code-adapter.js.map +1 -1
  434. package/node_modules/@openrig/daemon/dist/build-info.js +3 -3
  435. package/node_modules/@openrig/daemon/dist/db/all-migrations.d.ts.map +1 -1
  436. package/node_modules/@openrig/daemon/dist/db/all-migrations.js +4 -0
  437. package/node_modules/@openrig/daemon/dist/db/all-migrations.js.map +1 -1
  438. package/node_modules/@openrig/daemon/dist/db/migrations/072_thread_seat_map.d.ts +3 -0
  439. package/node_modules/@openrig/daemon/dist/db/migrations/072_thread_seat_map.d.ts.map +1 -0
  440. package/node_modules/@openrig/daemon/dist/db/migrations/072_thread_seat_map.js +22 -0
  441. package/node_modules/@openrig/daemon/dist/db/migrations/072_thread_seat_map.js.map +1 -0
  442. package/node_modules/@openrig/daemon/dist/db/migrations/073_queue_transition_wakes.d.ts +3 -0
  443. package/node_modules/@openrig/daemon/dist/db/migrations/073_queue_transition_wakes.d.ts.map +1 -0
  444. package/node_modules/@openrig/daemon/dist/db/migrations/073_queue_transition_wakes.js +21 -0
  445. package/node_modules/@openrig/daemon/dist/db/migrations/073_queue_transition_wakes.js.map +1 -0
  446. package/node_modules/@openrig/daemon/dist/domain/activity-taxonomy.d.ts +112 -0
  447. package/node_modules/@openrig/daemon/dist/domain/activity-taxonomy.d.ts.map +1 -0
  448. package/node_modules/@openrig/daemon/dist/domain/activity-taxonomy.js +99 -0
  449. package/node_modules/@openrig/daemon/dist/domain/activity-taxonomy.js.map +1 -0
  450. package/node_modules/@openrig/daemon/dist/domain/bind-plan.d.ts +19 -0
  451. package/node_modules/@openrig/daemon/dist/domain/bind-plan.d.ts.map +1 -0
  452. package/node_modules/@openrig/daemon/dist/domain/bind-plan.js +25 -0
  453. package/node_modules/@openrig/daemon/dist/domain/bind-plan.js.map +1 -0
  454. package/node_modules/@openrig/daemon/dist/domain/event-bus.d.ts +6 -0
  455. package/node_modules/@openrig/daemon/dist/domain/event-bus.d.ts.map +1 -1
  456. package/node_modules/@openrig/daemon/dist/domain/event-bus.js +15 -5
  457. package/node_modules/@openrig/daemon/dist/domain/event-bus.js.map +1 -1
  458. package/node_modules/@openrig/daemon/dist/domain/gateway/gateway-process-main.d.ts.map +1 -1
  459. package/node_modules/@openrig/daemon/dist/domain/gateway/gateway-process-main.js +9 -0
  460. package/node_modules/@openrig/daemon/dist/domain/gateway/gateway-process-main.js.map +1 -1
  461. package/node_modules/@openrig/daemon/dist/domain/gateway/gateway-process.d.ts.map +1 -1
  462. package/node_modules/@openrig/daemon/dist/domain/gateway/gateway-process.js +9 -0
  463. package/node_modules/@openrig/daemon/dist/domain/gateway/gateway-process.js.map +1 -1
  464. package/node_modules/@openrig/daemon/dist/domain/gateway/gateway-subsystem.d.ts +80 -0
  465. package/node_modules/@openrig/daemon/dist/domain/gateway/gateway-subsystem.d.ts.map +1 -0
  466. package/node_modules/@openrig/daemon/dist/domain/gateway/gateway-subsystem.js +149 -0
  467. package/node_modules/@openrig/daemon/dist/domain/gateway/gateway-subsystem.js.map +1 -0
  468. package/node_modules/@openrig/daemon/dist/domain/gateway/human-registry.d.ts +109 -0
  469. package/node_modules/@openrig/daemon/dist/domain/gateway/human-registry.d.ts.map +1 -1
  470. package/node_modules/@openrig/daemon/dist/domain/gateway/human-registry.js +250 -0
  471. package/node_modules/@openrig/daemon/dist/domain/gateway/human-registry.js.map +1 -1
  472. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/config.d.ts +44 -0
  473. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/config.d.ts.map +1 -0
  474. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/config.js +62 -0
  475. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/config.js.map +1 -0
  476. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/inbound-admission.d.ts +8 -0
  477. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/inbound-admission.d.ts.map +1 -0
  478. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/inbound-admission.js +20 -0
  479. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/inbound-admission.js.map +1 -0
  480. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/inbound.d.ts +113 -0
  481. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/inbound.d.ts.map +1 -0
  482. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/inbound.js +146 -0
  483. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/inbound.js.map +1 -0
  484. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/message.d.ts +80 -0
  485. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/message.d.ts.map +1 -0
  486. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/message.js +164 -0
  487. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/message.js.map +1 -0
  488. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/outbound-driver.d.ts +54 -0
  489. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/outbound-driver.d.ts.map +1 -0
  490. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/outbound-driver.js +96 -0
  491. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/outbound-driver.js.map +1 -0
  492. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/queue-access.d.ts +53 -0
  493. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/queue-access.d.ts.map +1 -0
  494. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/queue-access.js +72 -0
  495. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/queue-access.js.map +1 -0
  496. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/secrets.d.ts +21 -0
  497. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/secrets.d.ts.map +1 -0
  498. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/secrets.js +73 -0
  499. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/secrets.js.map +1 -0
  500. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-api.d.ts +106 -0
  501. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-api.d.ts.map +1 -0
  502. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-api.js +198 -0
  503. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-api.js.map +1 -0
  504. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-delivery.d.ts +47 -0
  505. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-delivery.d.ts.map +1 -0
  506. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-delivery.js +147 -0
  507. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-delivery.js.map +1 -0
  508. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-subsystem.d.ts +21 -0
  509. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-subsystem.d.ts.map +1 -0
  510. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-subsystem.js +198 -0
  511. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-subsystem.js.map +1 -0
  512. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/socket-inbound.d.ts +30 -0
  513. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/socket-inbound.d.ts.map +1 -0
  514. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/socket-inbound.js +99 -0
  515. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/socket-inbound.js.map +1 -0
  516. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/state-store.d.ts +62 -0
  517. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/state-store.d.ts.map +1 -0
  518. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/state-store.js +132 -0
  519. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/state-store.js.map +1 -0
  520. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/thread-routing.d.ts +17 -0
  521. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/thread-routing.d.ts.map +1 -0
  522. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/thread-routing.js +35 -0
  523. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/thread-routing.js.map +1 -0
  524. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/thread-seat-map.d.ts +56 -0
  525. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/thread-seat-map.d.ts.map +1 -0
  526. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/thread-seat-map.js +103 -0
  527. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/thread-seat-map.js.map +1 -0
  528. package/node_modules/@openrig/daemon/dist/domain/gateway/spawn-gateway.d.ts.map +1 -1
  529. package/node_modules/@openrig/daemon/dist/domain/gateway/spawn-gateway.js +9 -0
  530. package/node_modules/@openrig/daemon/dist/domain/gateway/spawn-gateway.js.map +1 -1
  531. package/node_modules/@openrig/daemon/dist/domain/gateway/transport.d.ts.map +1 -1
  532. package/node_modules/@openrig/daemon/dist/domain/gateway/transport.js +9 -0
  533. package/node_modules/@openrig/daemon/dist/domain/gateway/transport.js.map +1 -1
  534. package/node_modules/@openrig/daemon/dist/domain/node-inventory.d.ts.map +1 -1
  535. package/node_modules/@openrig/daemon/dist/domain/node-inventory.js +20 -0
  536. package/node_modules/@openrig/daemon/dist/domain/node-inventory.js.map +1 -1
  537. package/node_modules/@openrig/daemon/dist/domain/parked-query.d.ts +81 -0
  538. package/node_modules/@openrig/daemon/dist/domain/parked-query.d.ts.map +1 -0
  539. package/node_modules/@openrig/daemon/dist/domain/parked-query.js +126 -0
  540. package/node_modules/@openrig/daemon/dist/domain/parked-query.js.map +1 -0
  541. package/node_modules/@openrig/daemon/dist/domain/queue-pickup.d.ts +38 -0
  542. package/node_modules/@openrig/daemon/dist/domain/queue-pickup.d.ts.map +1 -0
  543. package/node_modules/@openrig/daemon/dist/domain/queue-pickup.js +67 -0
  544. package/node_modules/@openrig/daemon/dist/domain/queue-pickup.js.map +1 -0
  545. package/node_modules/@openrig/daemon/dist/domain/queue-repository.d.ts +38 -10
  546. package/node_modules/@openrig/daemon/dist/domain/queue-repository.d.ts.map +1 -1
  547. package/node_modules/@openrig/daemon/dist/domain/queue-repository.js +267 -35
  548. package/node_modules/@openrig/daemon/dist/domain/queue-repository.js.map +1 -1
  549. package/node_modules/@openrig/daemon/dist/domain/queue-stuck-sweep.d.ts +77 -0
  550. package/node_modules/@openrig/daemon/dist/domain/queue-stuck-sweep.d.ts.map +1 -0
  551. package/node_modules/@openrig/daemon/dist/domain/queue-stuck-sweep.js +348 -0
  552. package/node_modules/@openrig/daemon/dist/domain/queue-stuck-sweep.js.map +1 -0
  553. package/node_modules/@openrig/daemon/dist/domain/queue-wake-ladder.d.ts +96 -0
  554. package/node_modules/@openrig/daemon/dist/domain/queue-wake-ladder.d.ts.map +1 -0
  555. package/node_modules/@openrig/daemon/dist/domain/queue-wake-ladder.js +533 -0
  556. package/node_modules/@openrig/daemon/dist/domain/queue-wake-ladder.js.map +1 -0
  557. package/node_modules/@openrig/daemon/dist/domain/queue-wake-repository.d.ts +37 -0
  558. package/node_modules/@openrig/daemon/dist/domain/queue-wake-repository.d.ts.map +1 -0
  559. package/node_modules/@openrig/daemon/dist/domain/queue-wake-repository.js +80 -0
  560. package/node_modules/@openrig/daemon/dist/domain/queue-wake-repository.js.map +1 -0
  561. package/node_modules/@openrig/daemon/dist/domain/rebuild-priming-chain.d.ts +28 -0
  562. package/node_modules/@openrig/daemon/dist/domain/rebuild-priming-chain.d.ts.map +1 -0
  563. package/node_modules/@openrig/daemon/dist/domain/rebuild-priming-chain.js +71 -0
  564. package/node_modules/@openrig/daemon/dist/domain/rebuild-priming-chain.js.map +1 -0
  565. package/node_modules/@openrig/daemon/dist/domain/review/compose.d.ts +3 -1
  566. package/node_modules/@openrig/daemon/dist/domain/review/compose.d.ts.map +1 -1
  567. package/node_modules/@openrig/daemon/dist/domain/review/compose.js +14 -8
  568. package/node_modules/@openrig/daemon/dist/domain/review/compose.js.map +1 -1
  569. package/node_modules/@openrig/daemon/dist/domain/review/gather.d.ts.map +1 -1
  570. package/node_modules/@openrig/daemon/dist/domain/review/gather.js +3 -1
  571. package/node_modules/@openrig/daemon/dist/domain/review/gather.js.map +1 -1
  572. package/node_modules/@openrig/daemon/dist/domain/rigspec-instantiator.d.ts +3 -0
  573. package/node_modules/@openrig/daemon/dist/domain/rigspec-instantiator.d.ts.map +1 -1
  574. package/node_modules/@openrig/daemon/dist/domain/rigspec-instantiator.js +18 -0
  575. package/node_modules/@openrig/daemon/dist/domain/rigspec-instantiator.js.map +1 -1
  576. package/node_modules/@openrig/daemon/dist/domain/scope/plan-lock-artifacts.d.ts +6 -5
  577. package/node_modules/@openrig/daemon/dist/domain/scope/plan-lock-artifacts.d.ts.map +1 -1
  578. package/node_modules/@openrig/daemon/dist/domain/scope/plan-lock-artifacts.js +23 -20
  579. package/node_modules/@openrig/daemon/dist/domain/scope/plan-lock-artifacts.js.map +1 -1
  580. package/node_modules/@openrig/daemon/dist/domain/scope/scaffold-placeholder.d.ts +4 -5
  581. package/node_modules/@openrig/daemon/dist/domain/scope/scaffold-placeholder.d.ts.map +1 -1
  582. package/node_modules/@openrig/daemon/dist/domain/scope/scaffold-placeholder.js +6 -7
  583. package/node_modules/@openrig/daemon/dist/domain/scope/scaffold-placeholder.js.map +1 -1
  584. package/node_modules/@openrig/daemon/dist/domain/scope/scope-approve.d.ts +1 -1
  585. package/node_modules/@openrig/daemon/dist/domain/scope/scope-approve.d.ts.map +1 -1
  586. package/node_modules/@openrig/daemon/dist/domain/scope/scope-approve.js +5 -4
  587. package/node_modules/@openrig/daemon/dist/domain/scope/scope-approve.js.map +1 -1
  588. package/node_modules/@openrig/daemon/dist/domain/scope/scope-audit.d.ts +42 -3
  589. package/node_modules/@openrig/daemon/dist/domain/scope/scope-audit.d.ts.map +1 -1
  590. package/node_modules/@openrig/daemon/dist/domain/scope/scope-audit.js +78 -93
  591. package/node_modules/@openrig/daemon/dist/domain/scope/scope-audit.js.map +1 -1
  592. package/node_modules/@openrig/daemon/dist/domain/scope/scope-view-projection.d.ts.map +1 -1
  593. package/node_modules/@openrig/daemon/dist/domain/scope/scope-view-projection.js +7 -2
  594. package/node_modules/@openrig/daemon/dist/domain/scope/scope-view-projection.js.map +1 -1
  595. package/node_modules/@openrig/daemon/dist/domain/seat-activity-service.d.ts +91 -0
  596. package/node_modules/@openrig/daemon/dist/domain/seat-activity-service.d.ts.map +1 -1
  597. package/node_modules/@openrig/daemon/dist/domain/seat-activity-service.js +416 -1
  598. package/node_modules/@openrig/daemon/dist/domain/seat-activity-service.js.map +1 -1
  599. package/node_modules/@openrig/daemon/dist/domain/seat-handover-planner.d.ts +14 -0
  600. package/node_modules/@openrig/daemon/dist/domain/seat-handover-planner.d.ts.map +1 -1
  601. package/node_modules/@openrig/daemon/dist/domain/seat-handover-planner.js +14 -1
  602. package/node_modules/@openrig/daemon/dist/domain/seat-handover-planner.js.map +1 -1
  603. package/node_modules/@openrig/daemon/dist/domain/seat-handover-service.d.ts +54 -1
  604. package/node_modules/@openrig/daemon/dist/domain/seat-handover-service.d.ts.map +1 -1
  605. package/node_modules/@openrig/daemon/dist/domain/seat-handover-service.js +162 -19
  606. package/node_modules/@openrig/daemon/dist/domain/seat-handover-service.js.map +1 -1
  607. package/node_modules/@openrig/daemon/dist/domain/session-transport.js +1 -2
  608. package/node_modules/@openrig/daemon/dist/domain/session-transport.js.map +1 -1
  609. package/node_modules/@openrig/daemon/dist/domain/successor-session-launcher.d.ts +6 -1
  610. package/node_modules/@openrig/daemon/dist/domain/successor-session-launcher.d.ts.map +1 -1
  611. package/node_modules/@openrig/daemon/dist/domain/successor-session-launcher.js +3 -3
  612. package/node_modules/@openrig/daemon/dist/domain/successor-session-launcher.js.map +1 -1
  613. package/node_modules/@openrig/daemon/dist/domain/types.d.ts +33 -0
  614. package/node_modules/@openrig/daemon/dist/domain/types.d.ts.map +1 -1
  615. package/node_modules/@openrig/daemon/dist/domain/types.js.map +1 -1
  616. package/node_modules/@openrig/daemon/dist/domain/user-settings/settings-store.d.ts +1 -1
  617. package/node_modules/@openrig/daemon/dist/domain/user-settings/settings-store.d.ts.map +1 -1
  618. package/node_modules/@openrig/daemon/dist/domain/user-settings/settings-store.js +48 -0
  619. package/node_modules/@openrig/daemon/dist/domain/user-settings/settings-store.js.map +1 -1
  620. package/node_modules/@openrig/daemon/dist/domain/view-projector.d.ts +1 -1
  621. package/node_modules/@openrig/daemon/dist/domain/view-projector.d.ts.map +1 -1
  622. package/node_modules/@openrig/daemon/dist/domain/view-projector.js +41 -2
  623. package/node_modules/@openrig/daemon/dist/domain/view-projector.js.map +1 -1
  624. package/node_modules/@openrig/daemon/dist/domain/watchdog-policy-engine.d.ts +7 -0
  625. package/node_modules/@openrig/daemon/dist/domain/watchdog-policy-engine.d.ts.map +1 -1
  626. package/node_modules/@openrig/daemon/dist/domain/watchdog-policy-engine.js +3 -0
  627. package/node_modules/@openrig/daemon/dist/domain/watchdog-policy-engine.js.map +1 -1
  628. package/node_modules/@openrig/daemon/dist/domain/workspace/default-workspace-scaffold.d.ts +4 -3
  629. package/node_modules/@openrig/daemon/dist/domain/workspace/default-workspace-scaffold.d.ts.map +1 -1
  630. package/node_modules/@openrig/daemon/dist/domain/workspace/default-workspace-scaffold.js +56 -196
  631. package/node_modules/@openrig/daemon/dist/domain/workspace/default-workspace-scaffold.js.map +1 -1
  632. package/node_modules/@openrig/daemon/dist/domain/workspace/getting-started-narrative.js +1 -1
  633. package/node_modules/@openrig/daemon/dist/domain/workspace/getting-started-narrative.js.map +1 -1
  634. package/node_modules/@openrig/daemon/dist/domain/workspace/workspace-doctor.d.ts +8 -11
  635. package/node_modules/@openrig/daemon/dist/domain/workspace/workspace-doctor.d.ts.map +1 -1
  636. package/node_modules/@openrig/daemon/dist/domain/workspace/workspace-doctor.js +23 -25
  637. package/node_modules/@openrig/daemon/dist/domain/workspace/workspace-doctor.js.map +1 -1
  638. package/node_modules/@openrig/daemon/dist/gateway-slack-surface.d.ts +4 -0
  639. package/node_modules/@openrig/daemon/dist/gateway-slack-surface.d.ts.map +1 -0
  640. package/node_modules/@openrig/daemon/dist/gateway-slack-surface.js +8 -0
  641. package/node_modules/@openrig/daemon/dist/gateway-slack-surface.js.map +1 -0
  642. package/node_modules/@openrig/daemon/dist/index.d.ts +29 -0
  643. package/node_modules/@openrig/daemon/dist/index.d.ts.map +1 -1
  644. package/node_modules/@openrig/daemon/dist/index.js +99 -4
  645. package/node_modules/@openrig/daemon/dist/index.js.map +1 -1
  646. package/node_modules/@openrig/daemon/dist/lib/pane-envelope.d.ts +1 -1
  647. package/node_modules/@openrig/daemon/dist/lib/pane-envelope.d.ts.map +1 -1
  648. package/node_modules/@openrig/daemon/dist/lib/pane-envelope.js +8 -14
  649. package/node_modules/@openrig/daemon/dist/lib/pane-envelope.js.map +1 -1
  650. package/node_modules/@openrig/daemon/dist/routes/activity.d.ts +13 -0
  651. package/node_modules/@openrig/daemon/dist/routes/activity.d.ts.map +1 -1
  652. package/node_modules/@openrig/daemon/dist/routes/activity.js +186 -0
  653. package/node_modules/@openrig/daemon/dist/routes/activity.js.map +1 -1
  654. package/node_modules/@openrig/daemon/dist/routes/config.js +2 -2
  655. package/node_modules/@openrig/daemon/dist/routes/config.js.map +1 -1
  656. package/node_modules/@openrig/daemon/dist/routes/gateway.d.ts +3 -0
  657. package/node_modules/@openrig/daemon/dist/routes/gateway.d.ts.map +1 -0
  658. package/node_modules/@openrig/daemon/dist/routes/gateway.js +46 -0
  659. package/node_modules/@openrig/daemon/dist/routes/gateway.js.map +1 -0
  660. package/node_modules/@openrig/daemon/dist/routes/health-summary.d.ts.map +1 -1
  661. package/node_modules/@openrig/daemon/dist/routes/health-summary.js +8 -0
  662. package/node_modules/@openrig/daemon/dist/routes/health-summary.js.map +1 -1
  663. package/node_modules/@openrig/daemon/dist/routes/queue.d.ts.map +1 -1
  664. package/node_modules/@openrig/daemon/dist/routes/queue.js +3 -1
  665. package/node_modules/@openrig/daemon/dist/routes/queue.js.map +1 -1
  666. package/node_modules/@openrig/daemon/dist/routes/scope-audit.d.ts.map +1 -1
  667. package/node_modules/@openrig/daemon/dist/routes/scope-audit.js +72 -13
  668. package/node_modules/@openrig/daemon/dist/routes/scope-audit.js.map +1 -1
  669. package/node_modules/@openrig/daemon/dist/routes/seat.d.ts.map +1 -1
  670. package/node_modules/@openrig/daemon/dist/routes/seat.js +15 -0
  671. package/node_modules/@openrig/daemon/dist/routes/seat.js.map +1 -1
  672. package/node_modules/@openrig/daemon/dist/server.d.ts +17 -0
  673. package/node_modules/@openrig/daemon/dist/server.d.ts.map +1 -1
  674. package/node_modules/@openrig/daemon/dist/server.js +25 -4
  675. package/node_modules/@openrig/daemon/dist/server.js.map +1 -1
  676. package/node_modules/@openrig/daemon/dist/startup.d.ts +4 -0
  677. package/node_modules/@openrig/daemon/dist/startup.d.ts.map +1 -1
  678. package/node_modules/@openrig/daemon/dist/startup.js +33 -0
  679. package/node_modules/@openrig/daemon/dist/startup.js.map +1 -1
  680. package/node_modules/@openrig/daemon/package.json +5 -1
  681. package/package.json +1 -1
  682. package/tui/dist/daemon-client.d.ts +5 -0
  683. package/tui/dist/daemon-client.d.ts.map +1 -1
  684. package/tui/dist/daemon-client.js +17 -0
  685. package/tui/dist/daemon-client.js.map +1 -1
  686. package/tui/dist/hydrate.d.ts.map +1 -1
  687. package/tui/dist/hydrate.js +12 -4
  688. package/tui/dist/hydrate.js.map +1 -1
  689. package/tui/dist/live-events.d.ts +21 -0
  690. package/tui/dist/live-events.d.ts.map +1 -0
  691. package/tui/dist/live-events.js +88 -0
  692. package/tui/dist/live-events.js.map +1 -0
  693. package/tui/dist/live.js +1 -1
  694. package/tui/dist/main.js +27 -8
  695. package/tui/dist/main.js.map +1 -1
  696. package/tui/dist/refresh.d.ts +10 -1
  697. package/tui/dist/refresh.d.ts.map +1 -1
  698. package/tui/dist/refresh.js +22 -2
  699. package/tui/dist/refresh.js.map +1 -1
  700. package/daemon/context-packs/world/install/01-world-from-primitives.md +0 -97
  701. package/daemon/context-packs/world/install/02-permission-self-sleep.md +0 -141
  702. package/daemon/context-packs/world/install/03-what-this-is-for.md +0 -86
  703. package/daemon/context-packs/world/install/04-ontology.md +0 -790
  704. package/daemon/context-packs/world/install/05-harness-power-use.md +0 -355
  705. package/daemon/context-packs/world/install/06-a-competent-turn.md +0 -225
  706. package/daemon/context-packs/world/install/manifest.yaml +0 -125
  707. package/dist/lib/scope-templates/mission-brief.md +0 -20
  708. package/dist/lib/scope-templates/mission-notes.md +0 -102
  709. package/dist/slack/config.d.ts.map +0 -1
  710. package/dist/slack/config.js.map +0 -1
  711. package/dist/slack/connector-server.d.ts +0 -31
  712. package/dist/slack/connector-server.d.ts.map +0 -1
  713. package/dist/slack/connector-server.js +0 -108
  714. package/dist/slack/connector-server.js.map +0 -1
  715. package/dist/slack/inbound-admission.d.ts.map +0 -1
  716. package/dist/slack/inbound-admission.js.map +0 -1
  717. package/dist/slack/inbound.d.ts.map +0 -1
  718. package/dist/slack/inbound.js.map +0 -1
  719. package/dist/slack/message.d.ts +0 -39
  720. package/dist/slack/message.d.ts.map +0 -1
  721. package/dist/slack/message.js +0 -88
  722. package/dist/slack/message.js.map +0 -1
  723. package/dist/slack/outbound.d.ts +0 -39
  724. package/dist/slack/outbound.d.ts.map +0 -1
  725. package/dist/slack/outbound.js +0 -63
  726. package/dist/slack/outbound.js.map +0 -1
  727. package/dist/slack/queue-bridge.d.ts +0 -61
  728. package/dist/slack/queue-bridge.d.ts.map +0 -1
  729. package/dist/slack/queue-bridge.js +0 -114
  730. package/dist/slack/queue-bridge.js.map +0 -1
  731. package/dist/slack/secrets.d.ts.map +0 -1
  732. package/dist/slack/secrets.js.map +0 -1
  733. package/dist/slack/slack-api.d.ts +0 -49
  734. package/dist/slack/slack-api.d.ts.map +0 -1
  735. package/dist/slack/slack-api.js +0 -110
  736. package/dist/slack/slack-api.js.map +0 -1
  737. package/dist/slack/slack-delivery.d.ts +0 -14
  738. package/dist/slack/slack-delivery.d.ts.map +0 -1
  739. package/dist/slack/slack-delivery.js +0 -28
  740. package/dist/slack/slack-delivery.js.map +0 -1
  741. package/dist/slack/state-store.d.ts.map +0 -1
  742. package/dist/slack/state-store.js.map +0 -1
  743. /package/{dist → daemon/dist/domain/gateway}/slack/inbound-admission.js +0 -0
  744. /package/{dist → daemon/dist/domain/gateway}/slack/secrets.d.ts +0 -0
  745. /package/{dist → daemon/dist/domain/gateway}/slack/secrets.js +0 -0
  746. /package/{dist → daemon/dist/domain/gateway}/slack/state-store.d.ts +0 -0
  747. /package/{dist → daemon/dist/domain/gateway}/slack/state-store.js +0 -0
@@ -0,0 +1,348 @@
1
+ // S02 (OPR.0.5.5.2) — STANDING STUCK SWEEP. `queue overdue` and `queue undelivered` are the
2
+ // two halves of "is anything silently stuck" — and they were verbs someone had to remember to
3
+ // run. This module makes the sweep a standing daemon loop's body: both halves swept on a
4
+ // config-keyed cadence, findings routed as durable rows to the owning seats, quiet sweeps
5
+ // cheap (one observable heartbeat, never a row), failures loud (named on the status surface).
6
+ //
7
+ // The verbs themselves are UNCHANGED — findOverdue/findUndelivered become this loop's
8
+ // library. Selection is by DESTINATION + obligation shape across ALL states, never by tag
9
+ // (the 0.5.3 custody-sweep lesson: tag sweeps miss founding rows; terminal states are read,
10
+ // not skipped). Sweep-finding rows self-exclude by their own stamp tag — exclusion, not
11
+ // selection.
12
+ //
13
+ // S01 seam (spec Amendment A1, cross-cited in both specs): the undelivered half SKIPS rows
14
+ // carrying a LIVE S01 wake-retry ladder — S01 records its ladder on the row's transitions
15
+ // exactly so this filter is derivable — and remains the net for what S01 excludes: the
16
+ // laddered-then-exhausted handback (exactly one finding, never double-reported) and
17
+ // created-with-destination obligations (S01's baton filter excludes them; the unclaimed
18
+ // net below sweeps them). S01 imports the marker vocabulary from HERE so the two slices
19
+ // share one contract instead of two guesses. S03 owns park/wake honesty: state=blocked rows
20
+ // legitimately wait and are never findings.
21
+ import { stalledPickupFinding } from "./queue-pickup.js";
22
+ import { SettingsStore } from "./user-settings/settings-store.js";
23
+ export const STUCK_SWEEP_INTERVAL_KEY = "queue.stuck_sweep_interval_seconds";
24
+ export const DEFAULT_STUCK_SWEEP_INTERVAL_SECONDS = 300;
25
+ export const STUCK_SWEEP_UNCLAIMED_AGE_KEY = "queue.stuck_sweep_unclaimed_age_minutes";
26
+ export const DEFAULT_STUCK_SWEEP_UNCLAIMED_AGE_MINUTES = 60;
27
+ /** Stamp tag on every routed finding row: the sweep's self-exclusion mark. */
28
+ export const STUCK_SWEEP_FINDING_TAG = "stuck-sweep-finding";
29
+ // S01 ladder marker vocabulary (the seam contract). S01 writes these transition-note
30
+ // prefixes; the sweep derives "live ladder" from their presence. A ladder is LIVE when
31
+ // attempt/rung markers exist without an exhausted marker; an exhausted ladder is the
32
+ // sweep's net again.
33
+ export const LADDER_ATTEMPT_PREFIX = "wake-attempt:";
34
+ export const LADDER_RUNG_PREFIX = "escalation-rung:";
35
+ export const LADDER_EXHAUSTED_PREFIX = "ladder-exhausted:";
36
+ /** Idempotency key: one open finding row per (stuck row, finding kind). */
37
+ export function findingDedupTag(kind, qitemId) {
38
+ return `stuck-sweep:${kind}:${qitemId}`;
39
+ }
40
+ /** The loop's observable heartbeat — surfaced on /healthz so a quiet sweep is cheap but
41
+ * never invisible, and a failing sweep is loud without needing a row. */
42
+ export function createStuckSweepStatus() {
43
+ const state = {
44
+ lastSweepAt: null,
45
+ lastOutcome: null,
46
+ lastError: null,
47
+ consecutiveFailures: 0,
48
+ findingsRouted: 0,
49
+ };
50
+ return {
51
+ record(outcome, detail) {
52
+ state.lastSweepAt = new Date().toISOString();
53
+ state.lastOutcome = outcome;
54
+ state.lastError = outcome === "failed" ? (detail?.error ?? "unknown error") : null;
55
+ state.consecutiveFailures = outcome === "failed" ? state.consecutiveFailures + 1 : 0;
56
+ if (detail?.findings)
57
+ state.findingsRouted += detail.findings;
58
+ },
59
+ snapshot() {
60
+ return { ...state };
61
+ },
62
+ };
63
+ }
64
+ /** Cadence, fresh-read with fail-open defaults (the queue-pickup precedent: a config flip
65
+ * applies to the next tick, and a settings error never silences the sweep). */
66
+ export function resolveStuckSweepIntervalSeconds() {
67
+ try {
68
+ const v = new SettingsStore().resolveOne(STUCK_SWEEP_INTERVAL_KEY).value;
69
+ const n = typeof v === "number" ? v : Number(v);
70
+ return Number.isFinite(n) && n > 0 ? n : DEFAULT_STUCK_SWEEP_INTERVAL_SECONDS;
71
+ }
72
+ catch {
73
+ return DEFAULT_STUCK_SWEEP_INTERVAL_SECONDS;
74
+ }
75
+ }
76
+ export function resolveStuckSweepUnclaimedAgeMinutes() {
77
+ try {
78
+ const v = new SettingsStore().resolveOne(STUCK_SWEEP_UNCLAIMED_AGE_KEY).value;
79
+ const n = typeof v === "number" ? v : Number(v);
80
+ return Number.isFinite(n) && n > 0 ? n : DEFAULT_STUCK_SWEEP_UNCLAIMED_AGE_MINUTES;
81
+ }
82
+ catch {
83
+ return DEFAULT_STUCK_SWEEP_UNCLAIMED_AGE_MINUTES;
84
+ }
85
+ }
86
+ /** The durable session→node binding (the session-registry precedent: latest sessions row
87
+ * for the canonical name). Canonical session names (dash form, `review-r2@rig`) and node
88
+ * logical ids (dotted form, `review.r2`) are INDEPENDENT identities — the live fleet has
89
+ * zero cases where they match — so resolution NEVER string-converts between them. */
90
+ export function resolveSessionNodeId(db, session) {
91
+ const row = db
92
+ .prepare("SELECT node_id FROM sessions WHERE session_name = ? ORDER BY id DESC LIMIT 1")
93
+ .get(session);
94
+ return row?.node_id ?? null;
95
+ }
96
+ /** Default orchestrator derivation: the destination's BOUND node → the source of its
97
+ * delegates_to edge → that parent node's CURRENT canonical session binding. A session
98
+ * outside the recorded topology, or a parent with no session binding, resolves to null
99
+ * (there is no orchestrator session to wake — never synthesize one). */
100
+ export function defaultResolveOrchestrator(db, session) {
101
+ const nodeId = resolveSessionNodeId(db, session);
102
+ if (!nodeId)
103
+ return null;
104
+ const row = db
105
+ .prepare(`SELECT s.session_name AS parentSession FROM edges e
106
+ JOIN sessions s ON s.node_id = e.source_id
107
+ WHERE e.target_id = ? AND e.kind = 'delegates_to'
108
+ ORDER BY s.created_at DESC, s.id DESC
109
+ LIMIT 1`)
110
+ .get(nodeId);
111
+ return row?.parentSession ?? null;
112
+ }
113
+ /** A live ladder = attempt/rung markers present without an exhausted marker. */
114
+ function hasLiveLadder(db, qitemId) {
115
+ const notes = db
116
+ .prepare("SELECT transition_note FROM queue_transitions WHERE qitem_id = ?")
117
+ .all(qitemId);
118
+ let laddered = false;
119
+ for (const { transition_note: note } of notes) {
120
+ if (!note)
121
+ continue;
122
+ if (note.startsWith(LADDER_EXHAUSTED_PREFIX))
123
+ return false;
124
+ if (note.startsWith(LADDER_ATTEMPT_PREFIX) || note.startsWith(LADDER_RUNG_PREFIX))
125
+ laddered = true;
126
+ }
127
+ return laddered;
128
+ }
129
+ function minutesSince(iso, now) {
130
+ if (!iso)
131
+ return 0;
132
+ const then = Date.parse(iso);
133
+ if (Number.isNaN(then))
134
+ return 0;
135
+ return Math.max(0, Math.round((now.getTime() - then) / 60_000));
136
+ }
137
+ function lastTransitionLine(db, qitemId) {
138
+ const row = db
139
+ .prepare("SELECT ts, transition_note FROM queue_transitions WHERE qitem_id = ? ORDER BY ts DESC LIMIT 1")
140
+ .get(qitemId);
141
+ return row ? `${row.transition_note ?? "(no note)"} at ${row.ts}` : "(no transitions)";
142
+ }
143
+ function isFindingRow(item) {
144
+ return (item.tags ?? []).includes(STUCK_SWEEP_FINDING_TAG);
145
+ }
146
+ function evidenceBody(db, c) {
147
+ return (`STUCK SWEEP FINDING (${c.kind})\n` +
148
+ `row: ${c.row.qitemId}\n` +
149
+ `destination: ${c.row.destinationSession} (source ${c.row.sourceSession}, state ${c.row.state})\n` +
150
+ `age: ${c.ageMinutes} min\n` +
151
+ `last transition: ${lastTransitionLine(db, c.row.qitemId)}\n` +
152
+ `why: ${c.why}\n` +
153
+ `Resolve the underlying row; the sweep closes this finding itself once the row is no longer stuck.`);
154
+ }
155
+ /**
156
+ * One sweep pass. Instance-wide (no rig scope — the loop is the net for every rig the
157
+ * daemon carries). Never throws: a sweep that cannot run reports outcome=failed loudly
158
+ * on the status surface and the log, because a silent skip is exactly the class this
159
+ * slice exists to kill.
160
+ */
161
+ export async function runStuckSweep(deps) {
162
+ const log = deps.log ?? ((line) => console.error(line));
163
+ const status = deps.status;
164
+ try {
165
+ const now = deps.now ?? new Date();
166
+ const ageMinutes = deps.unclaimedAgeMinutes ?? resolveStuckSweepUnclaimedAgeMinutes();
167
+ const resolveOrch = deps.resolveOrchestrator ?? ((session) => defaultResolveOrchestrator(deps.db, session));
168
+ const candidates = [];
169
+ // Half 1 — claimed-never-closed. The claimant holds the obligation; the finding
170
+ // routes to them.
171
+ for (const row of deps.queueRepo.findOverdue({ now: now.toISOString() })) {
172
+ if (isFindingRow(row))
173
+ continue;
174
+ candidates.push({
175
+ kind: "overdue-claim",
176
+ row,
177
+ route: row.destinationSession,
178
+ ageMinutes: minutesSince(row.closureRequiredAt ?? row.claimedAt, now),
179
+ why: "claimed and past closure_required_at with no closure",
180
+ });
181
+ }
182
+ // S04 seam — a claimed row with no later motion past the pickup threshold. The
183
+ // pickup module remains the ONE derivation rule; this loop only enumerates and routes.
184
+ const claimedRows = deps.db
185
+ .prepare("SELECT qitem_id FROM queue_items WHERE state = 'in-progress' AND claimed_at IS NOT NULL")
186
+ .all();
187
+ for (const { qitem_id } of claimedRows) {
188
+ const row = deps.queueRepo.getById(qitem_id);
189
+ if (!row || isFindingRow(row))
190
+ continue;
191
+ const stalled = stalledPickupFinding(row);
192
+ if (!stalled)
193
+ continue;
194
+ candidates.push({
195
+ kind: stalled.kind,
196
+ row,
197
+ route: stalled.target,
198
+ ageMinutes: minutesSince(row.claimedAt, now),
199
+ why: stalled.evidence,
200
+ });
201
+ }
202
+ // Half 2 — sender-believed-delivered-never-woken. Nobody holds it (the wake failed),
203
+ // so it routes to the destination's orchestrator when one is derivable. Rows with a
204
+ // live S01 ladder are S01's territory; an exhausted ladder is the handback and lands
205
+ // here exactly once (the dedup tag keeps it to one finding).
206
+ for (const row of deps.queueRepo.findUndelivered()) {
207
+ if (isFindingRow(row))
208
+ continue;
209
+ if (hasLiveLadder(deps.db, row.qitemId))
210
+ continue;
211
+ candidates.push({
212
+ kind: "undelivered-wake",
213
+ row,
214
+ route: resolveOrch(row.destinationSession) ?? row.destinationSession,
215
+ ageMinutes: minutesSince(row.tsCreated, now),
216
+ why: `wake failed (${row.lastNudgeResult ?? "failed"}) and nothing retried it`,
217
+ });
218
+ }
219
+ // The A1 net — created-with-destination rows carrying real obligations, unclaimed past
220
+ // the config-keyed age. Parks (state=blocked) legitimately wait and never appear here;
221
+ // failed-nudge rows already surfaced in half 2; laddered rows are S01's.
222
+ const cutoff = new Date(now.getTime() - ageMinutes * 60_000).toISOString();
223
+ const unclaimedRows = deps.db
224
+ .prepare(`SELECT qitem_id FROM queue_items
225
+ WHERE state = 'pending'
226
+ AND claimed_at IS NULL
227
+ AND destination_session IS NOT NULL AND destination_session != ''
228
+ AND ts_created <= ?
229
+ AND (last_nudge_result IS NULL OR last_nudge_result NOT LIKE 'failed:%')`)
230
+ .all(cutoff);
231
+ for (const { qitem_id } of unclaimedRows) {
232
+ const row = deps.queueRepo.getById(qitem_id);
233
+ if (!row || isFindingRow(row))
234
+ continue;
235
+ if (hasLiveLadder(deps.db, row.qitemId))
236
+ continue;
237
+ candidates.push({
238
+ kind: "unclaimed-obligation",
239
+ row,
240
+ route: resolveOrch(row.destinationSession) ?? row.destinationSession,
241
+ ageMinutes: minutesSince(row.tsCreated, now),
242
+ why: `created with a destination and unclaimed for ${minutesSince(row.tsCreated, now)} min (threshold ${ageMinutes})`,
243
+ });
244
+ }
245
+ // The custody class — a terminal row whose closure names a successor qitem that does
246
+ // not exist. Terminal states are read, not skipped. Shape-discriminated: only
247
+ // closure targets that name a qitem id are successor claims (handoff closures also
248
+ // record plain session names there; those are not successor claims).
249
+ const danglingRows = deps.db
250
+ .prepare(`SELECT q.qitem_id FROM queue_items q
251
+ WHERE q.state IN ('done', 'canceled')
252
+ AND q.closure_target LIKE 'qitem-%'
253
+ AND NOT EXISTS (SELECT 1 FROM queue_items s WHERE s.qitem_id = q.closure_target)`)
254
+ .all();
255
+ for (const { qitem_id } of danglingRows) {
256
+ const row = deps.queueRepo.getById(qitem_id);
257
+ if (!row || isFindingRow(row))
258
+ continue;
259
+ candidates.push({
260
+ kind: "dangling-closure",
261
+ row,
262
+ route: row.destinationSession,
263
+ ageMinutes: minutesSince(row.tsUpdated, now),
264
+ why: `closed (${row.closureReason ?? "?"}) naming successor ${row.closureTarget}, which does not exist`,
265
+ });
266
+ }
267
+ // Route: idempotent per (row, kind). An existing open finding refreshes its age; a
268
+ // new one is created durable + waking (the create path's default nudge).
269
+ const findings = [];
270
+ const liveDedupTags = new Set();
271
+ for (const c of candidates) {
272
+ const dedupTag = findingDedupTag(c.kind, c.row.qitemId);
273
+ liveDedupTags.add(dedupTag);
274
+ const existing = deps.db
275
+ .prepare(`SELECT qitem_id, source_session FROM queue_items
276
+ WHERE state IN ('pending', 'in-progress', 'blocked')
277
+ AND tags LIKE ?
278
+ LIMIT 1`)
279
+ .get(`%"${dedupTag}"%`);
280
+ if (existing) {
281
+ await deps.queueRepo.update({
282
+ qitemId: existing.qitem_id,
283
+ actorSession: existing.source_session,
284
+ transitionNote: `stuck-sweep refresh: age now ${c.ageMinutes} min (${c.kind} on ${c.row.qitemId})`,
285
+ });
286
+ findings.push({ kind: c.kind, qitemId: c.row.qitemId, findingQitemId: existing.qitem_id, action: "refreshed" });
287
+ }
288
+ else {
289
+ const created = await deps.queueRepo.create({
290
+ // The detector is machinery, not a seat: the obligation's own creator is the
291
+ // finding's source (the workflow-exception precedent).
292
+ sourceSession: c.row.sourceSession,
293
+ destinationSession: c.route,
294
+ body: evidenceBody(deps.db, c),
295
+ summary: `Stuck sweep: ${c.kind} on ${c.row.qitemId} (${c.ageMinutes} min)`,
296
+ tags: [STUCK_SWEEP_FINDING_TAG, dedupTag],
297
+ });
298
+ findings.push({ kind: c.kind, qitemId: c.row.qitemId, findingQitemId: created.qitemId, action: "created" });
299
+ }
300
+ }
301
+ // Resolution: an open finding whose underlying condition is no longer detected closes
302
+ // with its reason — the sweep cleans up after itself, no human unwind.
303
+ const openFindings = deps.db
304
+ .prepare(`SELECT qitem_id, source_session, tags FROM queue_items
305
+ WHERE state IN ('pending', 'in-progress', 'blocked')
306
+ AND tags LIKE ?`)
307
+ .all(`%"${STUCK_SWEEP_FINDING_TAG}"%`);
308
+ for (const f of openFindings) {
309
+ let tags = [];
310
+ try {
311
+ tags = JSON.parse(f.tags);
312
+ }
313
+ catch {
314
+ continue;
315
+ }
316
+ const dedupTag = tags.find((t) => t.startsWith("stuck-sweep:"));
317
+ if (!dedupTag || liveDedupTags.has(dedupTag))
318
+ continue;
319
+ const [, kind, stuckId] = dedupTag.match(/^stuck-sweep:([a-z-]+):(.+)$/) ?? [];
320
+ await deps.queueRepo.update({
321
+ qitemId: f.qitem_id,
322
+ actorSession: f.source_session,
323
+ state: "done",
324
+ closureReason: "no-follow-on",
325
+ transitionNote: `stuck-sweep resolved: ${kind ?? "finding"} on ${stuckId ?? "row"} no longer detected`,
326
+ });
327
+ if (kind && stuckId) {
328
+ findings.push({
329
+ kind: kind,
330
+ qitemId: stuckId,
331
+ findingQitemId: f.qitem_id,
332
+ action: "closed",
333
+ });
334
+ }
335
+ }
336
+ const outcome = findings.length > 0 ? "findings" : "clean";
337
+ status?.record(outcome, { findings: findings.filter((f) => f.action !== "closed").length });
338
+ return { outcome, findings };
339
+ }
340
+ catch (err) {
341
+ const message = err instanceof Error ? err.message : String(err);
342
+ // Loud, never silent: the failure lands on the log AND the status surface (healthz).
343
+ log(`[stuck-sweep] SWEEP FAILED (skipping this tick loudly): ${message}`);
344
+ status?.record("failed", { error: message });
345
+ return { outcome: "failed", findings: [], error: message };
346
+ }
347
+ }
348
+ //# sourceMappingURL=queue-stuck-sweep.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue-stuck-sweep.js","sourceRoot":"","sources":["../../src/domain/queue-stuck-sweep.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,96 @@
1
+ import type Database from "better-sqlite3";
2
+ import type { QueueRepository } from "./queue-repository.js";
3
+ export declare const WAKE_RETRY_INTERVAL_KEY = "queue.wake_retry_interval_seconds";
4
+ export declare const DEFAULT_WAKE_RETRY_INTERVAL_SECONDS = 300;
5
+ export declare const WAKE_RETRY_CAP_KEY = "queue.wake_retry_cap";
6
+ export declare const DEFAULT_WAKE_RETRY_CAP = 3;
7
+ export declare const WAKE_UNCONFIRMED_WINDOW_KEY = "queue.wake_unconfirmed_window_minutes";
8
+ export declare const DEFAULT_WAKE_UNCONFIRMED_WINDOW_MINUTES = 30;
9
+ export declare const WAKE_SWAP_GRACE_KEY = "queue.wake_swap_grace_seconds";
10
+ export declare const DEFAULT_WAKE_SWAP_GRACE_SECONDS = 180;
11
+ /** The operator-declared suspension override (F2: override, never the mechanism).
12
+ * Format: comma-separated `<session>:<untilIso>` pairs; fresh-read every tick. */
13
+ export declare const WAKE_SUSPEND_OVERRIDE_ENV = "OPENRIG_WAKE_SUSPEND";
14
+ /** Stamp tag on the per-destination aggregate escalation row. */
15
+ export declare const WAKE_ESCALATION_TAG = "wake-escalation";
16
+ export declare function escalationDedupTag(destination: string): string;
17
+ export declare const LADDER_SUSPEND_PREFIX = "ladder-suspend:";
18
+ export declare const LADDER_RESUME_PREFIX = "ladder-resume:";
19
+ export interface WakeLadderStatusSnapshot {
20
+ lastTickAt: string | null;
21
+ lastOutcome: "clean" | "actions" | "failed" | null;
22
+ lastError: string | null;
23
+ consecutiveFailures: number;
24
+ activeLadders: number;
25
+ escalationsOpen: number;
26
+ exhaustedTotal: number;
27
+ }
28
+ export interface WakeLadderStatus {
29
+ record(outcome: "clean" | "actions" | "failed", detail?: {
30
+ error?: string;
31
+ active?: number;
32
+ escalations?: number;
33
+ exhausted?: number;
34
+ }): void;
35
+ snapshot(): WakeLadderStatusSnapshot;
36
+ }
37
+ /** The loop's observable heartbeat — rides /healthz beside the S02 sweep's. */
38
+ export declare function createWakeLadderStatus(): WakeLadderStatus;
39
+ export declare const resolveWakeRetryIntervalSeconds: () => number;
40
+ export declare const resolveWakeRetryCap: () => number;
41
+ export declare const resolveWakeUnconfirmedWindowMinutes: () => number;
42
+ export declare const resolveWakeSwapGraceSeconds: () => number;
43
+ export interface WakeLadderDeps {
44
+ db: Database.Database;
45
+ queueRepo: QueueRepository;
46
+ status?: WakeLadderStatus;
47
+ /** Attempt a wake to `target` for `qitemId`; returns the outcome in the queue nudge
48
+ * grammar (verified | delivered-ack-pending | indeterminate:* | failed:*). Default
49
+ * rides maybeNudge — the wake is the envelope pointer, never the content. */
50
+ attemptWake?: (qitemId: string, target: string) => Promise<string>;
51
+ resolveOrchestrator?: (session: string) => string | null;
52
+ retryIntervalSeconds?: number;
53
+ retryCap?: number;
54
+ unconfirmedWindowMinutes?: number;
55
+ swapGraceSeconds?: number;
56
+ now?: Date;
57
+ log?: (line: string) => void;
58
+ }
59
+ export interface WakeLadderAction {
60
+ qitemId: string;
61
+ action: "retry" | "escalate-orchestrator" | "escalate-operator" | "suspend" | "resume" | "exhaust";
62
+ target?: string;
63
+ }
64
+ export interface WakeLadderTickResult {
65
+ outcome: "clean" | "actions" | "failed";
66
+ actions: WakeLadderAction[];
67
+ error?: string;
68
+ }
69
+ /**
70
+ * One ladder tick. Everything is derived from the row + transition log — the tick holds
71
+ * no memory (F6). Never throws: a tick that cannot run is loud on the status surface
72
+ * and the log, because a silent skip is the exact class this slice kills.
73
+ */
74
+ export declare function runWakeLadderTick(deps: WakeLadderDeps): Promise<WakeLadderTickResult>;
75
+ export interface WakeLadderSchedulerDeps {
76
+ runTick: () => Promise<WakeLadderTickResult>;
77
+ tickIntervalMs?: number;
78
+ setTimer?: (cb: () => void, ms: number) => NodeJS.Timeout;
79
+ clearTimer?: (handle: NodeJS.Timeout) => void;
80
+ onTickError?: (err: unknown) => void;
81
+ }
82
+ /** The standing loop — the watchdog-scheduler pattern (injected seams, runTickNow, no
83
+ * overlapping ticks), so the ladder is unit-drivable without timers. */
84
+ export declare class WakeLadderScheduler {
85
+ private readonly deps;
86
+ private timer;
87
+ private inflight;
88
+ private shuttingDown;
89
+ private started;
90
+ constructor(deps: WakeLadderSchedulerDeps);
91
+ start(): void;
92
+ stop(): Promise<void>;
93
+ runTickNow(): Promise<void>;
94
+ private scheduleNext;
95
+ }
96
+ //# sourceMappingURL=queue-wake-ladder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue-wake-ladder.d.ts","sourceRoot":"","sources":["../../src/domain/queue-wake-ladder.ts"],"names":[],"mappings":"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"}