@openrig/cli 0.5.9 → 0.5.11

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 (862) hide show
  1. package/daemon/assets/plugins/openrig-core/README.md +24 -5
  2. package/daemon/assets/plugins/openrig-core/skills/agent-operated-workflows/SKILL.md +4 -2
  3. package/daemon/assets/plugins/openrig-core/skills/applying-a-permission-policy/SKILL.md +11 -14
  4. package/daemon/assets/plugins/openrig-core/skills/claude-compaction-restore/SKILL.md +51 -59
  5. package/daemon/assets/plugins/openrig-core/skills/forming-an-openrig-mental-model/SKILL.md +11 -10
  6. package/daemon/assets/plugins/openrig-core/skills/messaging-the-human/SKILL.md +48 -61
  7. package/daemon/assets/plugins/openrig-core/skills/mission-slice-sop/SKILL.md +19 -5
  8. package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/SKILL.md +39 -50
  9. package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/scripts/trunk-diff.sh +1 -1
  10. package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/templates/LEARNED.md +7 -5
  11. package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/templates/PLAYBOOK.md +3 -4
  12. package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/templates/SPEC.md +7 -7
  13. package/daemon/assets/plugins/openrig-core/skills/openrig-user/SKILL.md +80 -64
  14. package/daemon/assets/plugins/openrig-core/skills/orienting-to-an-inherited-seat/CHANGELOG.md +14 -58
  15. package/daemon/assets/plugins/openrig-core/skills/queue-handoff/SKILL.md +8 -9
  16. package/daemon/assets/plugins/openrig-core/skills/retiring-and-inheriting-a-seat/CHANGELOG.md +20 -46
  17. package/daemon/assets/plugins/openrig-core/skills/retiring-and-inheriting-a-seat/SKILL.md +62 -76
  18. package/daemon/assets/plugins/openrig-core/skills/seat-continuity-and-handover/SKILL.md +28 -22
  19. package/daemon/assets/plugins/openrig-core/skills/session-compaction-and-restore/SKILL.md +13 -15
  20. package/daemon/context-packs/onboarding-width/manifest.yaml +1 -3
  21. package/daemon/context-packs/onboarding-width/public-reference-material.md +19 -24
  22. package/daemon/context-packs/onboarding-width/public-what-you-can-do.md +80 -33
  23. package/daemon/context-packs/skills/agent-operated-software/manifest.yaml +1 -1
  24. package/daemon/context-packs/skills/agent-operated-workflows/SKILL.md +4 -2
  25. package/daemon/context-packs/skills/agent-operated-workflows/manifest.yaml +1 -1
  26. package/daemon/context-packs/skills/applying-a-permission-policy/SKILL.md +11 -14
  27. package/daemon/context-packs/skills/applying-a-permission-policy/manifest.yaml +1 -1
  28. package/daemon/context-packs/skills/claude-compaction-restore/SKILL.md +51 -59
  29. package/daemon/context-packs/skills/claude-compaction-restore/manifest.yaml +1 -1
  30. package/daemon/context-packs/skills/core/agent-starters/SKILL.md +21 -19
  31. package/daemon/context-packs/skills/core/agent-starters/manifest.yaml +1 -1
  32. package/daemon/context-packs/skills/core/agent-startup-and-context-ingestion/SKILL.md +32 -16
  33. package/daemon/context-packs/skills/core/agent-startup-and-context-ingestion/manifest.yaml +1 -1
  34. package/daemon/context-packs/skills/core/cross-host-rig-commands/SKILL.md +84 -148
  35. package/daemon/context-packs/skills/core/cross-host-rig-commands/manifest.yaml +3 -3
  36. package/daemon/context-packs/skills/core/human-in-the-loop/manifest.yaml +1 -1
  37. package/daemon/context-packs/skills/core/messaging-the-human/SKILL.md +48 -61
  38. package/daemon/context-packs/skills/core/messaging-the-human/manifest.yaml +3 -3
  39. package/daemon/context-packs/skills/core/openrig-architect/SKILL.md +40 -47
  40. package/daemon/context-packs/skills/core/openrig-architect/manifest.yaml +1 -1
  41. package/daemon/context-packs/skills/core/openrig-cmux/manifest.yaml +1 -1
  42. package/daemon/context-packs/skills/core/openrig-herdr/manifest.yaml +1 -1
  43. package/daemon/context-packs/skills/core/openrig-skills/manifest.yaml +1 -1
  44. package/daemon/context-packs/skills/core/openrig-upgrade/SKILL.md +16 -0
  45. package/daemon/context-packs/skills/core/openrig-upgrade/manifest.yaml +1 -1
  46. package/daemon/context-packs/skills/core/rig-bundles-and-shareable-artifacts/manifest.yaml +1 -1
  47. package/daemon/context-packs/skills/core/rig-lifecycle/manifest.yaml +1 -1
  48. package/daemon/context-packs/skills/core/session-source-fork/SKILL.md +12 -10
  49. package/daemon/context-packs/skills/core/session-source-fork/manifest.yaml +1 -1
  50. package/daemon/context-packs/skills/core/specification-system/manifest.yaml +1 -1
  51. package/daemon/context-packs/skills/core/topology-mutation-and-seat-management/SKILL.md +15 -13
  52. package/daemon/context-packs/skills/core/topology-mutation-and-seat-management/manifest.yaml +1 -1
  53. package/daemon/context-packs/skills/core/watchdog/manifest.yaml +1 -1
  54. package/daemon/context-packs/skills/delegating-work/manifest.yaml +1 -1
  55. package/daemon/context-packs/skills/forming-an-openrig-mental-model/SKILL.md +11 -10
  56. package/daemon/context-packs/skills/forming-an-openrig-mental-model/manifest.yaml +1 -1
  57. package/daemon/context-packs/skills/loading-addressable-markdown/manifest.yaml +1 -1
  58. package/daemon/context-packs/skills/mission-slice-sop/SKILL.md +19 -5
  59. package/daemon/context-packs/skills/mission-slice-sop/manifest.yaml +1 -1
  60. package/daemon/context-packs/skills/openrig-operating-model/SKILL.md +39 -50
  61. package/daemon/context-packs/skills/openrig-operating-model/manifest.yaml +1 -1
  62. package/daemon/context-packs/skills/openrig-operating-model/scripts/trunk-diff.sh +1 -1
  63. package/daemon/context-packs/skills/openrig-operating-model/templates/LEARNED.md +7 -5
  64. package/daemon/context-packs/skills/openrig-operating-model/templates/PLAYBOOK.md +3 -4
  65. package/daemon/context-packs/skills/openrig-operating-model/templates/SPEC.md +7 -7
  66. package/daemon/context-packs/skills/openrig-user/SKILL.md +80 -64
  67. package/daemon/context-packs/skills/openrig-user/manifest.yaml +1 -1
  68. package/daemon/context-packs/skills/orienting-to-an-inherited-seat/CHANGELOG.md +14 -58
  69. package/daemon/context-packs/skills/orienting-to-an-inherited-seat/manifest.yaml +1 -1
  70. package/daemon/context-packs/skills/pm/backlog-capture/manifest.yaml +1 -1
  71. package/daemon/context-packs/skills/pm/context-builder/manifest.yaml +1 -1
  72. package/daemon/context-packs/skills/pm/exec-summary/SKILL.md +1 -1
  73. package/daemon/context-packs/skills/pm/exec-summary/manifest.yaml +1 -1
  74. package/daemon/context-packs/skills/pm/office-hours/manifest.yaml +1 -1
  75. package/daemon/context-packs/skills/pm/plan-review/SKILL.md +2 -2
  76. package/daemon/context-packs/skills/pm/plan-review/manifest.yaml +1 -1
  77. package/daemon/context-packs/skills/pm/requirements-writer/SKILL.md +1 -1
  78. package/daemon/context-packs/skills/pm/requirements-writer/manifest.yaml +1 -1
  79. package/daemon/context-packs/skills/pm/ui-mockup/SKILL.md +3 -3
  80. package/daemon/context-packs/skills/pm/ui-mockup/manifest.yaml +1 -1
  81. package/daemon/context-packs/skills/pods/development-team/SKILL.md +40 -139
  82. package/daemon/context-packs/skills/pods/development-team/manifest.yaml +3 -3
  83. package/daemon/context-packs/skills/pods/orchestration-team/SKILL.md +80 -118
  84. package/daemon/context-packs/skills/pods/orchestration-team/manifest.yaml +3 -3
  85. package/daemon/context-packs/skills/pods/oversight-team/manifest.yaml +1 -1
  86. package/daemon/context-packs/skills/pods/review-team/SKILL.md +34 -31
  87. package/daemon/context-packs/skills/pods/review-team/manifest.yaml +3 -3
  88. package/daemon/context-packs/skills/process/agent-browser/LOCAL-INSIGHTS.md +24 -53
  89. package/daemon/context-packs/skills/process/agent-browser/manifest.yaml +1 -1
  90. package/daemon/context-packs/skills/process/context-engineering/manifest.yaml +1 -1
  91. package/daemon/context-packs/skills/process/dogfood/manifest.yaml +1 -1
  92. package/daemon/context-packs/skills/process/frontend-design/manifest.yaml +1 -1
  93. package/daemon/context-packs/skills/process/systematic-debugging/find-polluter.sh +29 -15
  94. package/daemon/context-packs/skills/process/systematic-debugging/manifest.yaml +1 -1
  95. package/daemon/context-packs/skills/process/test-driven-development/SKILL.md +53 -48
  96. package/daemon/context-packs/skills/process/test-driven-development/manifest.yaml +1 -1
  97. package/daemon/context-packs/skills/process/verification-before-completion/SKILL.md +3 -3
  98. package/daemon/context-packs/skills/process/verification-before-completion/manifest.yaml +1 -1
  99. package/daemon/context-packs/skills/queue-handoff/SKILL.md +8 -9
  100. package/daemon/context-packs/skills/queue-handoff/manifest.yaml +1 -1
  101. package/daemon/context-packs/skills/refocusing/manifest.yaml +1 -1
  102. package/daemon/context-packs/skills/retiring-and-inheriting-a-seat/CHANGELOG.md +20 -46
  103. package/daemon/context-packs/skills/retiring-and-inheriting-a-seat/SKILL.md +62 -76
  104. package/daemon/context-packs/skills/retiring-and-inheriting-a-seat/manifest.yaml +1 -1
  105. package/daemon/context-packs/skills/seat-continuity-and-handover/SKILL.md +28 -22
  106. package/daemon/context-packs/skills/seat-continuity-and-handover/manifest.yaml +1 -1
  107. package/daemon/context-packs/skills/session-compaction-and-restore/SKILL.md +13 -15
  108. package/daemon/context-packs/skills/session-compaction-and-restore/manifest.yaml +1 -1
  109. package/daemon/context-packs/skills/software-for-agents/manifest.yaml +1 -1
  110. package/daemon/context-packs/world-example/manifest.yaml +1 -1
  111. package/daemon/context-packs/world-public/build-your-world.md +12 -7
  112. package/daemon/context-packs/world-public/manifest.yaml +1 -1
  113. package/daemon/dist/adapters/tmux.d.ts +7 -9
  114. package/daemon/dist/adapters/tmux.d.ts.map +1 -1
  115. package/daemon/dist/adapters/tmux.js +7 -35
  116. package/daemon/dist/adapters/tmux.js.map +1 -1
  117. package/daemon/dist/build-info.js +3 -3
  118. package/daemon/dist/daemon-shutdown.d.ts +27 -0
  119. package/daemon/dist/daemon-shutdown.d.ts.map +1 -0
  120. package/daemon/dist/daemon-shutdown.js +84 -0
  121. package/daemon/dist/daemon-shutdown.js.map +1 -0
  122. package/daemon/dist/domain/codex-thread-id.d.ts +1 -0
  123. package/daemon/dist/domain/codex-thread-id.d.ts.map +1 -1
  124. package/daemon/dist/domain/codex-thread-id.js +32 -23
  125. package/daemon/dist/domain/codex-thread-id.js.map +1 -1
  126. package/daemon/dist/domain/context-usage-store.d.ts +2 -0
  127. package/daemon/dist/domain/context-usage-store.d.ts.map +1 -1
  128. package/daemon/dist/domain/context-usage-store.js +7 -28
  129. package/daemon/dist/domain/context-usage-store.js.map +1 -1
  130. package/daemon/dist/domain/crash-cart-conductor.js +1 -1
  131. package/daemon/dist/domain/crash-cart-conductor.js.map +1 -1
  132. package/daemon/dist/domain/execution-view.d.ts.map +1 -1
  133. package/daemon/dist/domain/execution-view.js +24 -3
  134. package/daemon/dist/domain/execution-view.js.map +1 -1
  135. package/daemon/dist/domain/gateway/channel-operations.d.ts +39 -0
  136. package/daemon/dist/domain/gateway/channel-operations.d.ts.map +1 -0
  137. package/daemon/dist/domain/gateway/channel-operations.js +35 -0
  138. package/daemon/dist/domain/gateway/channel-operations.js.map +1 -0
  139. package/daemon/dist/domain/gateway/connections-projection.d.ts +61 -0
  140. package/daemon/dist/domain/gateway/connections-projection.d.ts.map +1 -0
  141. package/daemon/dist/domain/gateway/connections-projection.js +149 -0
  142. package/daemon/dist/domain/gateway/connections-projection.js.map +1 -0
  143. package/daemon/dist/domain/gateway/gateway-subsystem.d.ts +3 -0
  144. package/daemon/dist/domain/gateway/gateway-subsystem.d.ts.map +1 -1
  145. package/daemon/dist/domain/gateway/gateway-subsystem.js +3 -0
  146. package/daemon/dist/domain/gateway/gateway-subsystem.js.map +1 -1
  147. package/daemon/dist/domain/gateway/human-readiness.d.ts +37 -0
  148. package/daemon/dist/domain/gateway/human-readiness.d.ts.map +1 -0
  149. package/daemon/dist/domain/gateway/human-readiness.js +44 -0
  150. package/daemon/dist/domain/gateway/human-readiness.js.map +1 -0
  151. package/daemon/dist/domain/gateway/human-registry.d.ts +5 -8
  152. package/daemon/dist/domain/gateway/human-registry.d.ts.map +1 -1
  153. package/daemon/dist/domain/gateway/human-registry.js +5 -8
  154. package/daemon/dist/domain/gateway/human-registry.js.map +1 -1
  155. package/daemon/dist/domain/gateway/slack/inbound.d.ts +16 -1
  156. package/daemon/dist/domain/gateway/slack/inbound.d.ts.map +1 -1
  157. package/daemon/dist/domain/gateway/slack/inbound.js +35 -12
  158. package/daemon/dist/domain/gateway/slack/inbound.js.map +1 -1
  159. package/daemon/dist/domain/gateway/slack/queue-access.d.ts +1 -0
  160. package/daemon/dist/domain/gateway/slack/queue-access.d.ts.map +1 -1
  161. package/daemon/dist/domain/gateway/slack/queue-access.js +1 -0
  162. package/daemon/dist/domain/gateway/slack/queue-access.js.map +1 -1
  163. package/daemon/dist/domain/gateway/slack/slack-subsystem.d.ts +18 -0
  164. package/daemon/dist/domain/gateway/slack/slack-subsystem.d.ts.map +1 -1
  165. package/daemon/dist/domain/gateway/slack/slack-subsystem.js +63 -8
  166. package/daemon/dist/domain/gateway/slack/slack-subsystem.js.map +1 -1
  167. package/daemon/dist/domain/gateway/slack/socket-inbound.d.ts +13 -0
  168. package/daemon/dist/domain/gateway/slack/socket-inbound.d.ts.map +1 -1
  169. package/daemon/dist/domain/gateway/slack/socket-inbound.js +59 -1
  170. package/daemon/dist/domain/gateway/slack/socket-inbound.js.map +1 -1
  171. package/daemon/dist/domain/gateway/slack/state-store.d.ts +21 -0
  172. package/daemon/dist/domain/gateway/slack/state-store.d.ts.map +1 -1
  173. package/daemon/dist/domain/gateway/slack/state-store.js +28 -1
  174. package/daemon/dist/domain/gateway/slack/state-store.js.map +1 -1
  175. package/daemon/dist/domain/gateway/slack/thread-routing.d.ts +2 -0
  176. package/daemon/dist/domain/gateway/slack/thread-routing.d.ts.map +1 -1
  177. package/daemon/dist/domain/gateway/slack/thread-routing.js +6 -1
  178. package/daemon/dist/domain/gateway/slack/thread-routing.js.map +1 -1
  179. package/daemon/dist/domain/gateway/slack/thread-seat-map.d.ts +4 -0
  180. package/daemon/dist/domain/gateway/slack/thread-seat-map.d.ts.map +1 -1
  181. package/daemon/dist/domain/gateway/slack/thread-seat-map.js +11 -0
  182. package/daemon/dist/domain/gateway/slack/thread-seat-map.js.map +1 -1
  183. package/daemon/dist/domain/health-checkpoints.d.ts +57 -0
  184. package/daemon/dist/domain/health-checkpoints.d.ts.map +1 -0
  185. package/daemon/dist/domain/health-checkpoints.js +198 -0
  186. package/daemon/dist/domain/health-checkpoints.js.map +1 -0
  187. package/daemon/dist/domain/health-context.d.ts +14 -0
  188. package/daemon/dist/domain/health-context.d.ts.map +1 -0
  189. package/daemon/dist/domain/health-context.js +93 -0
  190. package/daemon/dist/domain/health-context.js.map +1 -0
  191. package/daemon/dist/domain/health-detectors.d.ts +106 -0
  192. package/daemon/dist/domain/health-detectors.d.ts.map +1 -0
  193. package/daemon/dist/domain/health-detectors.js +392 -0
  194. package/daemon/dist/domain/health-detectors.js.map +1 -0
  195. package/daemon/dist/domain/health-diagnosis.d.ts +143 -0
  196. package/daemon/dist/domain/health-diagnosis.d.ts.map +1 -0
  197. package/daemon/dist/domain/health-diagnosis.js +249 -0
  198. package/daemon/dist/domain/health-diagnosis.js.map +1 -0
  199. package/daemon/dist/domain/health-passive-ceremony.d.ts +19 -0
  200. package/daemon/dist/domain/health-passive-ceremony.d.ts.map +1 -0
  201. package/daemon/dist/domain/health-passive-ceremony.js +234 -0
  202. package/daemon/dist/domain/health-passive-ceremony.js.map +1 -0
  203. package/daemon/dist/domain/health-policy.d.ts +45 -0
  204. package/daemon/dist/domain/health-policy.d.ts.map +1 -0
  205. package/daemon/dist/domain/health-policy.js +89 -0
  206. package/daemon/dist/domain/health-policy.js.map +1 -0
  207. package/daemon/dist/domain/health-projection.d.ts +237 -0
  208. package/daemon/dist/domain/health-projection.d.ts.map +1 -0
  209. package/daemon/dist/domain/health-projection.js +312 -0
  210. package/daemon/dist/domain/health-projection.js.map +1 -0
  211. package/daemon/dist/domain/lifecycle-obligations.d.ts +18 -0
  212. package/daemon/dist/domain/lifecycle-obligations.d.ts.map +1 -0
  213. package/daemon/dist/domain/lifecycle-obligations.js +35 -0
  214. package/daemon/dist/domain/lifecycle-obligations.js.map +1 -0
  215. package/daemon/dist/domain/mission-control/mission-control-read-layer.d.ts.map +1 -1
  216. package/daemon/dist/domain/mission-control/mission-control-read-layer.js +14 -11
  217. package/daemon/dist/domain/mission-control/mission-control-read-layer.js.map +1 -1
  218. package/daemon/dist/domain/model-divergence/current-generation-record.d.ts.map +1 -1
  219. package/daemon/dist/domain/model-divergence/current-generation-record.js +6 -1
  220. package/daemon/dist/domain/model-divergence/current-generation-record.js.map +1 -1
  221. package/daemon/dist/domain/node-inventory.d.ts.map +1 -1
  222. package/daemon/dist/domain/node-inventory.js +1 -0
  223. package/daemon/dist/domain/node-inventory.js.map +1 -1
  224. package/daemon/dist/domain/policies/workflow-keepalive.d.ts +1 -0
  225. package/daemon/dist/domain/policies/workflow-keepalive.d.ts.map +1 -1
  226. package/daemon/dist/domain/policies/workflow-keepalive.js +7 -4
  227. package/daemon/dist/domain/policies/workflow-keepalive.js.map +1 -1
  228. package/daemon/dist/domain/project-lifecycle-compiler.d.ts +7 -0
  229. package/daemon/dist/domain/project-lifecycle-compiler.d.ts.map +1 -1
  230. package/daemon/dist/domain/project-lifecycle-compiler.js +133 -8
  231. package/daemon/dist/domain/project-lifecycle-compiler.js.map +1 -1
  232. package/daemon/dist/domain/queue-repository.d.ts +14 -0
  233. package/daemon/dist/domain/queue-repository.d.ts.map +1 -1
  234. package/daemon/dist/domain/queue-repository.js +60 -5
  235. package/daemon/dist/domain/queue-repository.js.map +1 -1
  236. package/daemon/dist/domain/queue-stuck-sweep.d.ts.map +1 -1
  237. package/daemon/dist/domain/queue-stuck-sweep.js +1 -0
  238. package/daemon/dist/domain/queue-stuck-sweep.js.map +1 -1
  239. package/daemon/dist/domain/queue-transition-log.d.ts +5 -0
  240. package/daemon/dist/domain/queue-transition-log.d.ts.map +1 -1
  241. package/daemon/dist/domain/queue-transition-log.js +28 -0
  242. package/daemon/dist/domain/queue-transition-log.js.map +1 -1
  243. package/daemon/dist/domain/queue-wait-backoff.d.ts +21 -0
  244. package/daemon/dist/domain/queue-wait-backoff.d.ts.map +1 -0
  245. package/daemon/dist/domain/queue-wait-backoff.js +96 -0
  246. package/daemon/dist/domain/queue-wait-backoff.js.map +1 -0
  247. package/daemon/dist/domain/queue-wake-repository.d.ts +1 -0
  248. package/daemon/dist/domain/queue-wake-repository.d.ts.map +1 -1
  249. package/daemon/dist/domain/queue-wake-repository.js +8 -3
  250. package/daemon/dist/domain/queue-wake-repository.js.map +1 -1
  251. package/daemon/dist/domain/seat-lifecycle-service.d.ts.map +1 -1
  252. package/daemon/dist/domain/seat-lifecycle-service.js +8 -1
  253. package/daemon/dist/domain/seat-lifecycle-service.js.map +1 -1
  254. package/daemon/dist/domain/startup-orchestrator.d.ts.map +1 -1
  255. package/daemon/dist/domain/startup-orchestrator.js +27 -11
  256. package/daemon/dist/domain/startup-orchestrator.js.map +1 -1
  257. package/daemon/dist/domain/startup-proof.d.ts.map +1 -1
  258. package/daemon/dist/domain/startup-proof.js +10 -9
  259. package/daemon/dist/domain/startup-proof.js.map +1 -1
  260. package/daemon/dist/domain/startup-resolver.d.ts +3 -1
  261. package/daemon/dist/domain/startup-resolver.d.ts.map +1 -1
  262. package/daemon/dist/domain/startup-resolver.js +18 -0
  263. package/daemon/dist/domain/startup-resolver.js.map +1 -1
  264. package/daemon/dist/domain/startup-validation.d.ts.map +1 -1
  265. package/daemon/dist/domain/startup-validation.js +12 -1
  266. package/daemon/dist/domain/startup-validation.js.map +1 -1
  267. package/daemon/dist/domain/types.d.ts +16 -1
  268. package/daemon/dist/domain/types.d.ts.map +1 -1
  269. package/daemon/dist/domain/types.js.map +1 -1
  270. package/daemon/dist/domain/user-settings/settings-store.d.ts +9 -1
  271. package/daemon/dist/domain/user-settings/settings-store.d.ts.map +1 -1
  272. package/daemon/dist/domain/user-settings/settings-store.js +86 -12
  273. package/daemon/dist/domain/user-settings/settings-store.js.map +1 -1
  274. package/daemon/dist/domain/watchdog-jobs-repository.d.ts +2 -0
  275. package/daemon/dist/domain/watchdog-jobs-repository.d.ts.map +1 -1
  276. package/daemon/dist/domain/watchdog-jobs-repository.js +5 -0
  277. package/daemon/dist/domain/watchdog-jobs-repository.js.map +1 -1
  278. package/daemon/dist/domain/workflow-boot-sweep.d.ts +1 -0
  279. package/daemon/dist/domain/workflow-boot-sweep.d.ts.map +1 -1
  280. package/daemon/dist/domain/workflow-boot-sweep.js +3 -0
  281. package/daemon/dist/domain/workflow-boot-sweep.js.map +1 -1
  282. package/daemon/dist/domain/workflow-exception-escalation.d.ts +4 -3
  283. package/daemon/dist/domain/workflow-exception-escalation.d.ts.map +1 -1
  284. package/daemon/dist/domain/workflow-exception-escalation.js +22 -21
  285. package/daemon/dist/domain/workflow-exception-escalation.js.map +1 -1
  286. package/daemon/dist/domain/workflow-exception-router.d.ts +4 -3
  287. package/daemon/dist/domain/workflow-exception-router.d.ts.map +1 -1
  288. package/daemon/dist/domain/workflow-exception-router.js +7 -6
  289. package/daemon/dist/domain/workflow-exception-router.js.map +1 -1
  290. package/daemon/dist/domain/workflow-human-destination.d.ts +18 -0
  291. package/daemon/dist/domain/workflow-human-destination.d.ts.map +1 -0
  292. package/daemon/dist/domain/workflow-human-destination.js +40 -0
  293. package/daemon/dist/domain/workflow-human-destination.js.map +1 -0
  294. package/daemon/dist/domain/workflow-projector.d.ts +28 -3
  295. package/daemon/dist/domain/workflow-projector.d.ts.map +1 -1
  296. package/daemon/dist/domain/workflow-projector.js +134 -33
  297. package/daemon/dist/domain/workflow-projector.js.map +1 -1
  298. package/daemon/dist/domain/workflow-role-context.d.ts +4 -6
  299. package/daemon/dist/domain/workflow-role-context.d.ts.map +1 -1
  300. package/daemon/dist/domain/workflow-role-context.js +7 -14
  301. package/daemon/dist/domain/workflow-role-context.js.map +1 -1
  302. package/daemon/dist/domain/workflow-runtime.d.ts +12 -3
  303. package/daemon/dist/domain/workflow-runtime.d.ts.map +1 -1
  304. package/daemon/dist/domain/workflow-runtime.js +124 -25
  305. package/daemon/dist/domain/workflow-runtime.js.map +1 -1
  306. package/daemon/dist/domain/workflow-spec-cache.d.ts +2 -2
  307. package/daemon/dist/domain/workflow-spec-cache.d.ts.map +1 -1
  308. package/daemon/dist/domain/workflow-spec-cache.js +16 -0
  309. package/daemon/dist/domain/workflow-spec-cache.js.map +1 -1
  310. package/daemon/dist/domain/workflow-types.d.ts +8 -0
  311. package/daemon/dist/domain/workflow-types.d.ts.map +1 -1
  312. package/daemon/dist/domain/workflow-types.js.map +1 -1
  313. package/daemon/dist/domain/workflow-validator.d.ts.map +1 -1
  314. package/daemon/dist/domain/workflow-validator.js +57 -24
  315. package/daemon/dist/domain/workflow-validator.js.map +1 -1
  316. package/daemon/dist/gateway-human-registry-surface.d.ts +1 -0
  317. package/daemon/dist/gateway-human-registry-surface.d.ts.map +1 -1
  318. package/daemon/dist/gateway-human-registry-surface.js +1 -0
  319. package/daemon/dist/gateway-human-registry-surface.js.map +1 -1
  320. package/daemon/dist/gateway-slack-surface.d.ts +1 -0
  321. package/daemon/dist/gateway-slack-surface.d.ts.map +1 -1
  322. package/daemon/dist/gateway-slack-surface.js +1 -0
  323. package/daemon/dist/gateway-slack-surface.js.map +1 -1
  324. package/daemon/dist/health-detectors-surface.d.ts +2 -0
  325. package/daemon/dist/health-detectors-surface.d.ts.map +1 -0
  326. package/daemon/dist/health-detectors-surface.js +2 -0
  327. package/daemon/dist/health-detectors-surface.js.map +1 -0
  328. package/daemon/dist/health-projection-surface.d.ts +2 -0
  329. package/daemon/dist/health-projection-surface.d.ts.map +1 -0
  330. package/daemon/dist/health-projection-surface.js +2 -0
  331. package/daemon/dist/health-projection-surface.js.map +1 -0
  332. package/daemon/dist/index.d.ts.map +1 -1
  333. package/daemon/dist/index.js +38 -95
  334. package/daemon/dist/index.js.map +1 -1
  335. package/daemon/dist/lib/pane-envelope.d.ts.map +1 -1
  336. package/daemon/dist/lib/pane-envelope.js +4 -1
  337. package/daemon/dist/lib/pane-envelope.js.map +1 -1
  338. package/daemon/dist/project-lifecycle-surface.d.ts +1 -1
  339. package/daemon/dist/project-lifecycle-surface.d.ts.map +1 -1
  340. package/daemon/dist/routes/gateway.d.ts +5 -1
  341. package/daemon/dist/routes/gateway.d.ts.map +1 -1
  342. package/daemon/dist/routes/gateway.js +80 -22
  343. package/daemon/dist/routes/gateway.js.map +1 -1
  344. package/daemon/dist/routes/health-diagnosis.d.ts +3 -0
  345. package/daemon/dist/routes/health-diagnosis.d.ts.map +1 -0
  346. package/daemon/dist/routes/health-diagnosis.js +47 -0
  347. package/daemon/dist/routes/health-diagnosis.js.map +1 -0
  348. package/daemon/dist/routes/health.d.ts +3 -0
  349. package/daemon/dist/routes/health.d.ts.map +1 -0
  350. package/daemon/dist/routes/health.js +50 -0
  351. package/daemon/dist/routes/health.js.map +1 -0
  352. package/daemon/dist/routes/hosts.d.ts +2 -0
  353. package/daemon/dist/routes/hosts.d.ts.map +1 -1
  354. package/daemon/dist/routes/hosts.js +12 -5
  355. package/daemon/dist/routes/hosts.js.map +1 -1
  356. package/daemon/dist/routes/queue.d.ts.map +1 -1
  357. package/daemon/dist/routes/queue.js +4 -3
  358. package/daemon/dist/routes/queue.js.map +1 -1
  359. package/daemon/dist/routes/require-sender-identity.d.ts +3 -1
  360. package/daemon/dist/routes/require-sender-identity.d.ts.map +1 -1
  361. package/daemon/dist/routes/require-sender-identity.js +11 -5
  362. package/daemon/dist/routes/require-sender-identity.js.map +1 -1
  363. package/daemon/dist/routes/sessions.d.ts.map +1 -1
  364. package/daemon/dist/routes/sessions.js +95 -27
  365. package/daemon/dist/routes/sessions.js.map +1 -1
  366. package/daemon/dist/routes/workflow.d.ts.map +1 -1
  367. package/daemon/dist/routes/workflow.js +6 -1
  368. package/daemon/dist/routes/workflow.js.map +1 -1
  369. package/daemon/dist/server.d.ts +8 -0
  370. package/daemon/dist/server.d.ts.map +1 -1
  371. package/daemon/dist/server.js +10 -1
  372. package/daemon/dist/server.js.map +1 -1
  373. package/daemon/dist/startup.d.ts.map +1 -1
  374. package/daemon/dist/startup.js +35 -4
  375. package/daemon/dist/startup.js.map +1 -1
  376. package/daemon/docs/reference/agent-spec.md +6 -0
  377. package/daemon/docs/reference/getting-started.md +134 -28
  378. package/daemon/docs/reference/health-diagnosis.md +331 -0
  379. package/daemon/docs/reference/mission-install.md +5 -0
  380. package/daemon/docs/reference/product-journey-sdlc.md +53 -15
  381. package/daemon/docs/reference/project-release-profile.yaml +82 -0
  382. package/daemon/docs/reference/release-boundary.md +5 -0
  383. package/daemon/docs/reference/rig-spec.md +43 -4
  384. package/daemon/docs/reference/sdlc-conventions.md +6 -4
  385. package/daemon/specs/agents/conveyor/planner/guidance/role.md +5 -3
  386. package/daemon/specs/agents/conveyor/planner/startup/context.md +13 -4
  387. package/daemon/specs/agents/design/product-designer/agent.yaml +4 -3
  388. package/daemon/specs/agents/design/product-designer/guidance/role.md +12 -10
  389. package/daemon/specs/agents/development/implementer/agent.yaml +1 -9
  390. package/daemon/specs/agents/development/implementer/guidance/role.md +21 -43
  391. package/daemon/specs/agents/development/qa/agent.yaml +2 -11
  392. package/daemon/specs/agents/development/qa/guidance/role.md +21 -73
  393. package/daemon/specs/agents/orchestration/orchestrator/agent.yaml +1 -9
  394. package/daemon/specs/agents/orchestration/orchestrator/guidance/role.md +25 -72
  395. package/daemon/specs/agents/product-management/pm/guidance/role.md +19 -17
  396. package/daemon/specs/agents/review/independent-reviewer/agent.yaml +1 -9
  397. package/daemon/specs/agents/review/independent-reviewer/guidance/role.md +20 -35
  398. package/daemon/specs/agents/shared/skills/core/agent-starters/SKILL.md +21 -19
  399. package/daemon/specs/agents/shared/skills/core/agent-startup-and-context-ingestion/SKILL.md +32 -16
  400. package/daemon/specs/agents/shared/skills/core/cross-host-rig-commands/SKILL.md +84 -148
  401. package/daemon/specs/agents/shared/skills/core/messaging-the-human/SKILL.md +48 -61
  402. package/daemon/specs/agents/shared/skills/core/openrig-architect/SKILL.md +40 -47
  403. package/daemon/specs/agents/shared/skills/core/openrig-upgrade/SKILL.md +16 -0
  404. package/daemon/specs/agents/shared/skills/core/session-source-fork/SKILL.md +12 -10
  405. package/daemon/specs/agents/shared/skills/core/topology-mutation-and-seat-management/SKILL.md +15 -13
  406. package/daemon/specs/agents/shared/skills/pm/exec-summary/SKILL.md +1 -1
  407. package/daemon/specs/agents/shared/skills/pm/plan-review/SKILL.md +2 -2
  408. package/daemon/specs/agents/shared/skills/pm/requirements-writer/SKILL.md +1 -1
  409. package/daemon/specs/agents/shared/skills/pm/ui-mockup/SKILL.md +3 -3
  410. package/daemon/specs/agents/shared/skills/pods/development-team/SKILL.md +40 -139
  411. package/daemon/specs/agents/shared/skills/pods/orchestration-team/SKILL.md +80 -118
  412. package/daemon/specs/agents/shared/skills/pods/review-team/SKILL.md +34 -31
  413. package/daemon/specs/agents/shared/skills/process/agent-browser/LOCAL-INSIGHTS.md +24 -53
  414. package/daemon/specs/agents/shared/skills/process/systematic-debugging/find-polluter.sh +29 -15
  415. package/daemon/specs/agents/shared/skills/process/test-driven-development/SKILL.md +53 -48
  416. package/daemon/specs/agents/shared/skills/process/verification-before-completion/SKILL.md +3 -3
  417. package/daemon/specs/rigs/launch/demo/CULTURE.md +21 -30
  418. package/daemon/specs/rigs/launch/first-project/CULTURE.md +39 -0
  419. package/daemon/specs/rigs/launch/first-project/rig.yaml +31 -0
  420. package/daemon/specs/rigs/launch/implementation-pair/rig.yaml +3 -3
  421. package/daemon/specs/rigs/launch/kernel/agents/advisor/lead/startup/context.md +1 -1
  422. package/daemon/specs/rigs/launch/kernel/agents/operator/agent/guidance/role.md +21 -7
  423. package/daemon/specs/rigs/launch/kernel/agents/operator/agent/startup/context.md +2 -2
  424. package/daemon/specs/rigs/launch/kernel/agents/queue/worker/guidance/role.md +19 -11
  425. package/daemon/specs/rigs/launch/kernel/agents/queue/worker/startup/context.md +3 -2
  426. package/daemon/specs/rigs/launch/kernel/culture/CULTURE.md +15 -8
  427. package/daemon/specs/rigs/launch/kernel/rig-claude-only.yaml +7 -0
  428. package/daemon/specs/rigs/launch/kernel/rig-codex-only.yaml +7 -0
  429. package/daemon/specs/rigs/launch/kernel/rig.yaml +9 -4
  430. package/daemon/specs/rigs/preview/product-team/CULTURE.md +26 -71
  431. package/daemon/specs/rigs/preview/product-team/topology/seats/dev1-qa/CRAFT.md +6 -4
  432. package/dist/build-info.js +3 -3
  433. package/dist/client.d.ts +6 -20
  434. package/dist/client.d.ts.map +1 -1
  435. package/dist/client.js +53 -32
  436. package/dist/client.js.map +1 -1
  437. package/dist/commands/config.d.ts.map +1 -1
  438. package/dist/commands/config.js +2 -0
  439. package/dist/commands/config.js.map +1 -1
  440. package/dist/commands/context.d.ts.map +1 -1
  441. package/dist/commands/context.js +15 -13
  442. package/dist/commands/context.js.map +1 -1
  443. package/dist/commands/daemon.d.ts.map +1 -1
  444. package/dist/commands/daemon.js +31 -27
  445. package/dist/commands/daemon.js.map +1 -1
  446. package/dist/commands/destroy.js +1 -1
  447. package/dist/commands/destroy.js.map +1 -1
  448. package/dist/commands/gateway.d.ts +17 -0
  449. package/dist/commands/gateway.d.ts.map +1 -1
  450. package/dist/commands/gateway.js +99 -13
  451. package/dist/commands/gateway.js.map +1 -1
  452. package/dist/commands/health.d.ts +12 -0
  453. package/dist/commands/health.d.ts.map +1 -0
  454. package/dist/commands/health.js +403 -0
  455. package/dist/commands/health.js.map +1 -0
  456. package/dist/commands/host.d.ts.map +1 -1
  457. package/dist/commands/host.js +2 -0
  458. package/dist/commands/host.js.map +1 -1
  459. package/dist/commands/launch.d.ts.map +1 -1
  460. package/dist/commands/launch.js +2 -2
  461. package/dist/commands/launch.js.map +1 -1
  462. package/dist/commands/queue.d.ts +18 -0
  463. package/dist/commands/queue.d.ts.map +1 -1
  464. package/dist/commands/queue.js +71 -5
  465. package/dist/commands/queue.js.map +1 -1
  466. package/dist/commands/send.d.ts.map +1 -1
  467. package/dist/commands/send.js +8 -9
  468. package/dist/commands/send.js.map +1 -1
  469. package/dist/commands/setup.d.ts.map +1 -1
  470. package/dist/commands/setup.js +10 -9
  471. package/dist/commands/setup.js.map +1 -1
  472. package/dist/commands/slack.d.ts.map +1 -1
  473. package/dist/commands/slack.js +39 -11
  474. package/dist/commands/slack.js.map +1 -1
  475. package/dist/commands/tui.d.ts +2 -0
  476. package/dist/commands/tui.d.ts.map +1 -1
  477. package/dist/commands/tui.js +26 -10
  478. package/dist/commands/tui.js.map +1 -1
  479. package/dist/commands/walk.d.ts.map +1 -1
  480. package/dist/commands/walk.js +24 -48
  481. package/dist/commands/walk.js.map +1 -1
  482. package/dist/commands/workflow-render.d.ts +19 -0
  483. package/dist/commands/workflow-render.d.ts.map +1 -1
  484. package/dist/commands/workflow-render.js +12 -1
  485. package/dist/commands/workflow-render.js.map +1 -1
  486. package/dist/commands/workflow.d.ts.map +1 -1
  487. package/dist/commands/workflow.js +12 -8
  488. package/dist/commands/workflow.js.map +1 -1
  489. package/dist/config-store.d.ts +10 -1
  490. package/dist/config-store.d.ts.map +1 -1
  491. package/dist/config-store.js +87 -14
  492. package/dist/config-store.js.map +1 -1
  493. package/dist/cross-host-executor.d.ts +1 -1
  494. package/dist/cross-host-executor.js +2 -2
  495. package/dist/cross-host-executor.js.map +1 -1
  496. package/dist/daemon-lifecycle.d.ts +12 -11
  497. package/dist/daemon-lifecycle.d.ts.map +1 -1
  498. package/dist/daemon-lifecycle.js +283 -146
  499. package/dist/daemon-lifecycle.js.map +1 -1
  500. package/dist/daemon-start-lock.d.ts +9 -0
  501. package/dist/daemon-start-lock.d.ts.map +1 -0
  502. package/dist/daemon-start-lock.js +47 -0
  503. package/dist/daemon-start-lock.js.map +1 -0
  504. package/dist/front-door.d.ts.map +1 -1
  505. package/dist/front-door.js +8 -1
  506. package/dist/front-door.js.map +1 -1
  507. package/dist/index.d.ts +4 -0
  508. package/dist/index.d.ts.map +1 -1
  509. package/dist/index.js +3 -1
  510. package/dist/index.js.map +1 -1
  511. package/dist/lib/file-transfer.js +1 -1
  512. package/dist/lib/file-transfer.js.map +1 -1
  513. package/dist/lib/scope/scope-fs.js +2 -2
  514. package/dist/lib/scope/scope-fs.js.map +1 -1
  515. package/dist/lib/walk-consumption.d.ts +6 -0
  516. package/dist/lib/walk-consumption.d.ts.map +1 -0
  517. package/dist/lib/walk-consumption.js +78 -0
  518. package/dist/lib/walk-consumption.js.map +1 -0
  519. package/dist/local-origin.d.ts +3 -0
  520. package/dist/local-origin.d.ts.map +1 -0
  521. package/dist/local-origin.js +37 -0
  522. package/dist/local-origin.js.map +1 -0
  523. package/dist/read-view.d.ts +17 -0
  524. package/dist/read-view.d.ts.map +1 -0
  525. package/dist/read-view.js +17 -0
  526. package/dist/read-view.js.map +1 -0
  527. package/dist/shared-tui.d.ts +12 -0
  528. package/dist/shared-tui.d.ts.map +1 -0
  529. package/dist/shared-tui.js +37 -0
  530. package/dist/shared-tui.js.map +1 -0
  531. package/node_modules/@openrig/daemon/dist/adapters/tmux.d.ts +7 -9
  532. package/node_modules/@openrig/daemon/dist/adapters/tmux.d.ts.map +1 -1
  533. package/node_modules/@openrig/daemon/dist/adapters/tmux.js +7 -35
  534. package/node_modules/@openrig/daemon/dist/adapters/tmux.js.map +1 -1
  535. package/node_modules/@openrig/daemon/dist/build-info.js +3 -3
  536. package/node_modules/@openrig/daemon/dist/daemon-shutdown.d.ts +27 -0
  537. package/node_modules/@openrig/daemon/dist/daemon-shutdown.d.ts.map +1 -0
  538. package/node_modules/@openrig/daemon/dist/daemon-shutdown.js +84 -0
  539. package/node_modules/@openrig/daemon/dist/daemon-shutdown.js.map +1 -0
  540. package/node_modules/@openrig/daemon/dist/domain/codex-thread-id.d.ts +1 -0
  541. package/node_modules/@openrig/daemon/dist/domain/codex-thread-id.d.ts.map +1 -1
  542. package/node_modules/@openrig/daemon/dist/domain/codex-thread-id.js +32 -23
  543. package/node_modules/@openrig/daemon/dist/domain/codex-thread-id.js.map +1 -1
  544. package/node_modules/@openrig/daemon/dist/domain/context-usage-store.d.ts +2 -0
  545. package/node_modules/@openrig/daemon/dist/domain/context-usage-store.d.ts.map +1 -1
  546. package/node_modules/@openrig/daemon/dist/domain/context-usage-store.js +7 -28
  547. package/node_modules/@openrig/daemon/dist/domain/context-usage-store.js.map +1 -1
  548. package/node_modules/@openrig/daemon/dist/domain/crash-cart-conductor.js +1 -1
  549. package/node_modules/@openrig/daemon/dist/domain/crash-cart-conductor.js.map +1 -1
  550. package/node_modules/@openrig/daemon/dist/domain/execution-view.d.ts.map +1 -1
  551. package/node_modules/@openrig/daemon/dist/domain/execution-view.js +24 -3
  552. package/node_modules/@openrig/daemon/dist/domain/execution-view.js.map +1 -1
  553. package/node_modules/@openrig/daemon/dist/domain/gateway/channel-operations.d.ts +39 -0
  554. package/node_modules/@openrig/daemon/dist/domain/gateway/channel-operations.d.ts.map +1 -0
  555. package/node_modules/@openrig/daemon/dist/domain/gateway/channel-operations.js +35 -0
  556. package/node_modules/@openrig/daemon/dist/domain/gateway/channel-operations.js.map +1 -0
  557. package/node_modules/@openrig/daemon/dist/domain/gateway/connections-projection.d.ts +61 -0
  558. package/node_modules/@openrig/daemon/dist/domain/gateway/connections-projection.d.ts.map +1 -0
  559. package/node_modules/@openrig/daemon/dist/domain/gateway/connections-projection.js +149 -0
  560. package/node_modules/@openrig/daemon/dist/domain/gateway/connections-projection.js.map +1 -0
  561. package/node_modules/@openrig/daemon/dist/domain/gateway/gateway-subsystem.d.ts +3 -0
  562. package/node_modules/@openrig/daemon/dist/domain/gateway/gateway-subsystem.d.ts.map +1 -1
  563. package/node_modules/@openrig/daemon/dist/domain/gateway/gateway-subsystem.js +3 -0
  564. package/node_modules/@openrig/daemon/dist/domain/gateway/gateway-subsystem.js.map +1 -1
  565. package/node_modules/@openrig/daemon/dist/domain/gateway/human-readiness.d.ts +37 -0
  566. package/node_modules/@openrig/daemon/dist/domain/gateway/human-readiness.d.ts.map +1 -0
  567. package/node_modules/@openrig/daemon/dist/domain/gateway/human-readiness.js +44 -0
  568. package/node_modules/@openrig/daemon/dist/domain/gateway/human-readiness.js.map +1 -0
  569. package/node_modules/@openrig/daemon/dist/domain/gateway/human-registry.d.ts +5 -8
  570. package/node_modules/@openrig/daemon/dist/domain/gateway/human-registry.d.ts.map +1 -1
  571. package/node_modules/@openrig/daemon/dist/domain/gateway/human-registry.js +5 -8
  572. package/node_modules/@openrig/daemon/dist/domain/gateway/human-registry.js.map +1 -1
  573. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/inbound.d.ts +16 -1
  574. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/inbound.d.ts.map +1 -1
  575. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/inbound.js +35 -12
  576. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/inbound.js.map +1 -1
  577. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/queue-access.d.ts +1 -0
  578. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/queue-access.d.ts.map +1 -1
  579. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/queue-access.js +1 -0
  580. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/queue-access.js.map +1 -1
  581. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-subsystem.d.ts +18 -0
  582. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-subsystem.d.ts.map +1 -1
  583. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-subsystem.js +63 -8
  584. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-subsystem.js.map +1 -1
  585. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/socket-inbound.d.ts +13 -0
  586. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/socket-inbound.d.ts.map +1 -1
  587. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/socket-inbound.js +59 -1
  588. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/socket-inbound.js.map +1 -1
  589. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/state-store.d.ts +21 -0
  590. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/state-store.d.ts.map +1 -1
  591. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/state-store.js +28 -1
  592. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/state-store.js.map +1 -1
  593. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/thread-routing.d.ts +2 -0
  594. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/thread-routing.d.ts.map +1 -1
  595. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/thread-routing.js +6 -1
  596. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/thread-routing.js.map +1 -1
  597. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/thread-seat-map.d.ts +4 -0
  598. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/thread-seat-map.d.ts.map +1 -1
  599. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/thread-seat-map.js +11 -0
  600. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/thread-seat-map.js.map +1 -1
  601. package/node_modules/@openrig/daemon/dist/domain/health-checkpoints.d.ts +57 -0
  602. package/node_modules/@openrig/daemon/dist/domain/health-checkpoints.d.ts.map +1 -0
  603. package/node_modules/@openrig/daemon/dist/domain/health-checkpoints.js +198 -0
  604. package/node_modules/@openrig/daemon/dist/domain/health-checkpoints.js.map +1 -0
  605. package/node_modules/@openrig/daemon/dist/domain/health-context.d.ts +14 -0
  606. package/node_modules/@openrig/daemon/dist/domain/health-context.d.ts.map +1 -0
  607. package/node_modules/@openrig/daemon/dist/domain/health-context.js +93 -0
  608. package/node_modules/@openrig/daemon/dist/domain/health-context.js.map +1 -0
  609. package/node_modules/@openrig/daemon/dist/domain/health-detectors.d.ts +106 -0
  610. package/node_modules/@openrig/daemon/dist/domain/health-detectors.d.ts.map +1 -0
  611. package/node_modules/@openrig/daemon/dist/domain/health-detectors.js +392 -0
  612. package/node_modules/@openrig/daemon/dist/domain/health-detectors.js.map +1 -0
  613. package/node_modules/@openrig/daemon/dist/domain/health-diagnosis.d.ts +143 -0
  614. package/node_modules/@openrig/daemon/dist/domain/health-diagnosis.d.ts.map +1 -0
  615. package/node_modules/@openrig/daemon/dist/domain/health-diagnosis.js +249 -0
  616. package/node_modules/@openrig/daemon/dist/domain/health-diagnosis.js.map +1 -0
  617. package/node_modules/@openrig/daemon/dist/domain/health-passive-ceremony.d.ts +19 -0
  618. package/node_modules/@openrig/daemon/dist/domain/health-passive-ceremony.d.ts.map +1 -0
  619. package/node_modules/@openrig/daemon/dist/domain/health-passive-ceremony.js +234 -0
  620. package/node_modules/@openrig/daemon/dist/domain/health-passive-ceremony.js.map +1 -0
  621. package/node_modules/@openrig/daemon/dist/domain/health-policy.d.ts +45 -0
  622. package/node_modules/@openrig/daemon/dist/domain/health-policy.d.ts.map +1 -0
  623. package/node_modules/@openrig/daemon/dist/domain/health-policy.js +89 -0
  624. package/node_modules/@openrig/daemon/dist/domain/health-policy.js.map +1 -0
  625. package/node_modules/@openrig/daemon/dist/domain/health-projection.d.ts +237 -0
  626. package/node_modules/@openrig/daemon/dist/domain/health-projection.d.ts.map +1 -0
  627. package/node_modules/@openrig/daemon/dist/domain/health-projection.js +312 -0
  628. package/node_modules/@openrig/daemon/dist/domain/health-projection.js.map +1 -0
  629. package/node_modules/@openrig/daemon/dist/domain/lifecycle-obligations.d.ts +18 -0
  630. package/node_modules/@openrig/daemon/dist/domain/lifecycle-obligations.d.ts.map +1 -0
  631. package/node_modules/@openrig/daemon/dist/domain/lifecycle-obligations.js +35 -0
  632. package/node_modules/@openrig/daemon/dist/domain/lifecycle-obligations.js.map +1 -0
  633. package/node_modules/@openrig/daemon/dist/domain/mission-control/mission-control-read-layer.d.ts.map +1 -1
  634. package/node_modules/@openrig/daemon/dist/domain/mission-control/mission-control-read-layer.js +14 -11
  635. package/node_modules/@openrig/daemon/dist/domain/mission-control/mission-control-read-layer.js.map +1 -1
  636. package/node_modules/@openrig/daemon/dist/domain/model-divergence/current-generation-record.d.ts.map +1 -1
  637. package/node_modules/@openrig/daemon/dist/domain/model-divergence/current-generation-record.js +6 -1
  638. package/node_modules/@openrig/daemon/dist/domain/model-divergence/current-generation-record.js.map +1 -1
  639. package/node_modules/@openrig/daemon/dist/domain/node-inventory.d.ts.map +1 -1
  640. package/node_modules/@openrig/daemon/dist/domain/node-inventory.js +1 -0
  641. package/node_modules/@openrig/daemon/dist/domain/node-inventory.js.map +1 -1
  642. package/node_modules/@openrig/daemon/dist/domain/policies/workflow-keepalive.d.ts +1 -0
  643. package/node_modules/@openrig/daemon/dist/domain/policies/workflow-keepalive.d.ts.map +1 -1
  644. package/node_modules/@openrig/daemon/dist/domain/policies/workflow-keepalive.js +7 -4
  645. package/node_modules/@openrig/daemon/dist/domain/policies/workflow-keepalive.js.map +1 -1
  646. package/node_modules/@openrig/daemon/dist/domain/project-lifecycle-compiler.d.ts +7 -0
  647. package/node_modules/@openrig/daemon/dist/domain/project-lifecycle-compiler.d.ts.map +1 -1
  648. package/node_modules/@openrig/daemon/dist/domain/project-lifecycle-compiler.js +133 -8
  649. package/node_modules/@openrig/daemon/dist/domain/project-lifecycle-compiler.js.map +1 -1
  650. package/node_modules/@openrig/daemon/dist/domain/queue-repository.d.ts +14 -0
  651. package/node_modules/@openrig/daemon/dist/domain/queue-repository.d.ts.map +1 -1
  652. package/node_modules/@openrig/daemon/dist/domain/queue-repository.js +60 -5
  653. package/node_modules/@openrig/daemon/dist/domain/queue-repository.js.map +1 -1
  654. package/node_modules/@openrig/daemon/dist/domain/queue-stuck-sweep.d.ts.map +1 -1
  655. package/node_modules/@openrig/daemon/dist/domain/queue-stuck-sweep.js +1 -0
  656. package/node_modules/@openrig/daemon/dist/domain/queue-stuck-sweep.js.map +1 -1
  657. package/node_modules/@openrig/daemon/dist/domain/queue-transition-log.d.ts +5 -0
  658. package/node_modules/@openrig/daemon/dist/domain/queue-transition-log.d.ts.map +1 -1
  659. package/node_modules/@openrig/daemon/dist/domain/queue-transition-log.js +28 -0
  660. package/node_modules/@openrig/daemon/dist/domain/queue-transition-log.js.map +1 -1
  661. package/node_modules/@openrig/daemon/dist/domain/queue-wait-backoff.d.ts +21 -0
  662. package/node_modules/@openrig/daemon/dist/domain/queue-wait-backoff.d.ts.map +1 -0
  663. package/node_modules/@openrig/daemon/dist/domain/queue-wait-backoff.js +96 -0
  664. package/node_modules/@openrig/daemon/dist/domain/queue-wait-backoff.js.map +1 -0
  665. package/node_modules/@openrig/daemon/dist/domain/queue-wake-repository.d.ts +1 -0
  666. package/node_modules/@openrig/daemon/dist/domain/queue-wake-repository.d.ts.map +1 -1
  667. package/node_modules/@openrig/daemon/dist/domain/queue-wake-repository.js +8 -3
  668. package/node_modules/@openrig/daemon/dist/domain/queue-wake-repository.js.map +1 -1
  669. package/node_modules/@openrig/daemon/dist/domain/seat-lifecycle-service.d.ts.map +1 -1
  670. package/node_modules/@openrig/daemon/dist/domain/seat-lifecycle-service.js +8 -1
  671. package/node_modules/@openrig/daemon/dist/domain/seat-lifecycle-service.js.map +1 -1
  672. package/node_modules/@openrig/daemon/dist/domain/startup-orchestrator.d.ts.map +1 -1
  673. package/node_modules/@openrig/daemon/dist/domain/startup-orchestrator.js +27 -11
  674. package/node_modules/@openrig/daemon/dist/domain/startup-orchestrator.js.map +1 -1
  675. package/node_modules/@openrig/daemon/dist/domain/startup-proof.d.ts.map +1 -1
  676. package/node_modules/@openrig/daemon/dist/domain/startup-proof.js +10 -9
  677. package/node_modules/@openrig/daemon/dist/domain/startup-proof.js.map +1 -1
  678. package/node_modules/@openrig/daemon/dist/domain/startup-resolver.d.ts +3 -1
  679. package/node_modules/@openrig/daemon/dist/domain/startup-resolver.d.ts.map +1 -1
  680. package/node_modules/@openrig/daemon/dist/domain/startup-resolver.js +18 -0
  681. package/node_modules/@openrig/daemon/dist/domain/startup-resolver.js.map +1 -1
  682. package/node_modules/@openrig/daemon/dist/domain/startup-validation.d.ts.map +1 -1
  683. package/node_modules/@openrig/daemon/dist/domain/startup-validation.js +12 -1
  684. package/node_modules/@openrig/daemon/dist/domain/startup-validation.js.map +1 -1
  685. package/node_modules/@openrig/daemon/dist/domain/types.d.ts +16 -1
  686. package/node_modules/@openrig/daemon/dist/domain/types.d.ts.map +1 -1
  687. package/node_modules/@openrig/daemon/dist/domain/types.js.map +1 -1
  688. package/node_modules/@openrig/daemon/dist/domain/user-settings/settings-store.d.ts +9 -1
  689. package/node_modules/@openrig/daemon/dist/domain/user-settings/settings-store.d.ts.map +1 -1
  690. package/node_modules/@openrig/daemon/dist/domain/user-settings/settings-store.js +86 -12
  691. package/node_modules/@openrig/daemon/dist/domain/user-settings/settings-store.js.map +1 -1
  692. package/node_modules/@openrig/daemon/dist/domain/watchdog-jobs-repository.d.ts +2 -0
  693. package/node_modules/@openrig/daemon/dist/domain/watchdog-jobs-repository.d.ts.map +1 -1
  694. package/node_modules/@openrig/daemon/dist/domain/watchdog-jobs-repository.js +5 -0
  695. package/node_modules/@openrig/daemon/dist/domain/watchdog-jobs-repository.js.map +1 -1
  696. package/node_modules/@openrig/daemon/dist/domain/workflow-boot-sweep.d.ts +1 -0
  697. package/node_modules/@openrig/daemon/dist/domain/workflow-boot-sweep.d.ts.map +1 -1
  698. package/node_modules/@openrig/daemon/dist/domain/workflow-boot-sweep.js +3 -0
  699. package/node_modules/@openrig/daemon/dist/domain/workflow-boot-sweep.js.map +1 -1
  700. package/node_modules/@openrig/daemon/dist/domain/workflow-exception-escalation.d.ts +4 -3
  701. package/node_modules/@openrig/daemon/dist/domain/workflow-exception-escalation.d.ts.map +1 -1
  702. package/node_modules/@openrig/daemon/dist/domain/workflow-exception-escalation.js +22 -21
  703. package/node_modules/@openrig/daemon/dist/domain/workflow-exception-escalation.js.map +1 -1
  704. package/node_modules/@openrig/daemon/dist/domain/workflow-exception-router.d.ts +4 -3
  705. package/node_modules/@openrig/daemon/dist/domain/workflow-exception-router.d.ts.map +1 -1
  706. package/node_modules/@openrig/daemon/dist/domain/workflow-exception-router.js +7 -6
  707. package/node_modules/@openrig/daemon/dist/domain/workflow-exception-router.js.map +1 -1
  708. package/node_modules/@openrig/daemon/dist/domain/workflow-human-destination.d.ts +18 -0
  709. package/node_modules/@openrig/daemon/dist/domain/workflow-human-destination.d.ts.map +1 -0
  710. package/node_modules/@openrig/daemon/dist/domain/workflow-human-destination.js +40 -0
  711. package/node_modules/@openrig/daemon/dist/domain/workflow-human-destination.js.map +1 -0
  712. package/node_modules/@openrig/daemon/dist/domain/workflow-projector.d.ts +28 -3
  713. package/node_modules/@openrig/daemon/dist/domain/workflow-projector.d.ts.map +1 -1
  714. package/node_modules/@openrig/daemon/dist/domain/workflow-projector.js +134 -33
  715. package/node_modules/@openrig/daemon/dist/domain/workflow-projector.js.map +1 -1
  716. package/node_modules/@openrig/daemon/dist/domain/workflow-role-context.d.ts +4 -6
  717. package/node_modules/@openrig/daemon/dist/domain/workflow-role-context.d.ts.map +1 -1
  718. package/node_modules/@openrig/daemon/dist/domain/workflow-role-context.js +7 -14
  719. package/node_modules/@openrig/daemon/dist/domain/workflow-role-context.js.map +1 -1
  720. package/node_modules/@openrig/daemon/dist/domain/workflow-runtime.d.ts +12 -3
  721. package/node_modules/@openrig/daemon/dist/domain/workflow-runtime.d.ts.map +1 -1
  722. package/node_modules/@openrig/daemon/dist/domain/workflow-runtime.js +124 -25
  723. package/node_modules/@openrig/daemon/dist/domain/workflow-runtime.js.map +1 -1
  724. package/node_modules/@openrig/daemon/dist/domain/workflow-spec-cache.d.ts +2 -2
  725. package/node_modules/@openrig/daemon/dist/domain/workflow-spec-cache.d.ts.map +1 -1
  726. package/node_modules/@openrig/daemon/dist/domain/workflow-spec-cache.js +16 -0
  727. package/node_modules/@openrig/daemon/dist/domain/workflow-spec-cache.js.map +1 -1
  728. package/node_modules/@openrig/daemon/dist/domain/workflow-types.d.ts +8 -0
  729. package/node_modules/@openrig/daemon/dist/domain/workflow-types.d.ts.map +1 -1
  730. package/node_modules/@openrig/daemon/dist/domain/workflow-types.js.map +1 -1
  731. package/node_modules/@openrig/daemon/dist/domain/workflow-validator.d.ts.map +1 -1
  732. package/node_modules/@openrig/daemon/dist/domain/workflow-validator.js +57 -24
  733. package/node_modules/@openrig/daemon/dist/domain/workflow-validator.js.map +1 -1
  734. package/node_modules/@openrig/daemon/dist/gateway-human-registry-surface.d.ts +1 -0
  735. package/node_modules/@openrig/daemon/dist/gateway-human-registry-surface.d.ts.map +1 -1
  736. package/node_modules/@openrig/daemon/dist/gateway-human-registry-surface.js +1 -0
  737. package/node_modules/@openrig/daemon/dist/gateway-human-registry-surface.js.map +1 -1
  738. package/node_modules/@openrig/daemon/dist/gateway-slack-surface.d.ts +1 -0
  739. package/node_modules/@openrig/daemon/dist/gateway-slack-surface.d.ts.map +1 -1
  740. package/node_modules/@openrig/daemon/dist/gateway-slack-surface.js +1 -0
  741. package/node_modules/@openrig/daemon/dist/gateway-slack-surface.js.map +1 -1
  742. package/node_modules/@openrig/daemon/dist/health-detectors-surface.d.ts +2 -0
  743. package/node_modules/@openrig/daemon/dist/health-detectors-surface.d.ts.map +1 -0
  744. package/node_modules/@openrig/daemon/dist/health-detectors-surface.js +2 -0
  745. package/node_modules/@openrig/daemon/dist/health-detectors-surface.js.map +1 -0
  746. package/node_modules/@openrig/daemon/dist/health-projection-surface.d.ts +2 -0
  747. package/node_modules/@openrig/daemon/dist/health-projection-surface.d.ts.map +1 -0
  748. package/node_modules/@openrig/daemon/dist/health-projection-surface.js +2 -0
  749. package/node_modules/@openrig/daemon/dist/health-projection-surface.js.map +1 -0
  750. package/node_modules/@openrig/daemon/dist/index.d.ts.map +1 -1
  751. package/node_modules/@openrig/daemon/dist/index.js +38 -95
  752. package/node_modules/@openrig/daemon/dist/index.js.map +1 -1
  753. package/node_modules/@openrig/daemon/dist/lib/pane-envelope.d.ts.map +1 -1
  754. package/node_modules/@openrig/daemon/dist/lib/pane-envelope.js +4 -1
  755. package/node_modules/@openrig/daemon/dist/lib/pane-envelope.js.map +1 -1
  756. package/node_modules/@openrig/daemon/dist/project-lifecycle-surface.d.ts +1 -1
  757. package/node_modules/@openrig/daemon/dist/project-lifecycle-surface.d.ts.map +1 -1
  758. package/node_modules/@openrig/daemon/dist/routes/gateway.d.ts +5 -1
  759. package/node_modules/@openrig/daemon/dist/routes/gateway.d.ts.map +1 -1
  760. package/node_modules/@openrig/daemon/dist/routes/gateway.js +80 -22
  761. package/node_modules/@openrig/daemon/dist/routes/gateway.js.map +1 -1
  762. package/node_modules/@openrig/daemon/dist/routes/health-diagnosis.d.ts +3 -0
  763. package/node_modules/@openrig/daemon/dist/routes/health-diagnosis.d.ts.map +1 -0
  764. package/node_modules/@openrig/daemon/dist/routes/health-diagnosis.js +47 -0
  765. package/node_modules/@openrig/daemon/dist/routes/health-diagnosis.js.map +1 -0
  766. package/node_modules/@openrig/daemon/dist/routes/health.d.ts +3 -0
  767. package/node_modules/@openrig/daemon/dist/routes/health.d.ts.map +1 -0
  768. package/node_modules/@openrig/daemon/dist/routes/health.js +50 -0
  769. package/node_modules/@openrig/daemon/dist/routes/health.js.map +1 -0
  770. package/node_modules/@openrig/daemon/dist/routes/hosts.d.ts +2 -0
  771. package/node_modules/@openrig/daemon/dist/routes/hosts.d.ts.map +1 -1
  772. package/node_modules/@openrig/daemon/dist/routes/hosts.js +12 -5
  773. package/node_modules/@openrig/daemon/dist/routes/hosts.js.map +1 -1
  774. package/node_modules/@openrig/daemon/dist/routes/queue.d.ts.map +1 -1
  775. package/node_modules/@openrig/daemon/dist/routes/queue.js +4 -3
  776. package/node_modules/@openrig/daemon/dist/routes/queue.js.map +1 -1
  777. package/node_modules/@openrig/daemon/dist/routes/require-sender-identity.d.ts +3 -1
  778. package/node_modules/@openrig/daemon/dist/routes/require-sender-identity.d.ts.map +1 -1
  779. package/node_modules/@openrig/daemon/dist/routes/require-sender-identity.js +11 -5
  780. package/node_modules/@openrig/daemon/dist/routes/require-sender-identity.js.map +1 -1
  781. package/node_modules/@openrig/daemon/dist/routes/sessions.d.ts.map +1 -1
  782. package/node_modules/@openrig/daemon/dist/routes/sessions.js +95 -27
  783. package/node_modules/@openrig/daemon/dist/routes/sessions.js.map +1 -1
  784. package/node_modules/@openrig/daemon/dist/routes/workflow.d.ts.map +1 -1
  785. package/node_modules/@openrig/daemon/dist/routes/workflow.js +6 -1
  786. package/node_modules/@openrig/daemon/dist/routes/workflow.js.map +1 -1
  787. package/node_modules/@openrig/daemon/dist/server.d.ts +8 -0
  788. package/node_modules/@openrig/daemon/dist/server.d.ts.map +1 -1
  789. package/node_modules/@openrig/daemon/dist/server.js +10 -1
  790. package/node_modules/@openrig/daemon/dist/server.js.map +1 -1
  791. package/node_modules/@openrig/daemon/dist/startup.d.ts.map +1 -1
  792. package/node_modules/@openrig/daemon/dist/startup.js +35 -4
  793. package/node_modules/@openrig/daemon/dist/startup.js.map +1 -1
  794. package/node_modules/@openrig/daemon/package.json +13 -1
  795. package/package.json +1 -1
  796. package/tui/dist/commands/completion.d.ts +8 -0
  797. package/tui/dist/commands/completion.d.ts.map +1 -0
  798. package/tui/dist/commands/completion.js +37 -0
  799. package/tui/dist/commands/completion.js.map +1 -0
  800. package/tui/dist/commands/registry.d.ts +7 -1
  801. package/tui/dist/commands/registry.d.ts.map +1 -1
  802. package/tui/dist/commands/registry.js +48 -1
  803. package/tui/dist/commands/registry.js.map +1 -1
  804. package/tui/dist/connections/connections-model.d.ts +72 -0
  805. package/tui/dist/connections/connections-model.d.ts.map +1 -0
  806. package/tui/dist/connections/connections-model.js +64 -0
  807. package/tui/dist/connections/connections-model.js.map +1 -0
  808. package/tui/dist/daemon-client.d.ts +3 -0
  809. package/tui/dist/daemon-client.d.ts.map +1 -1
  810. package/tui/dist/daemon-client.js +5 -0
  811. package/tui/dist/daemon-client.js.map +1 -1
  812. package/tui/dist/detail.d.ts +3 -0
  813. package/tui/dist/detail.d.ts.map +1 -1
  814. package/tui/dist/detail.js +23 -0
  815. package/tui/dist/detail.js.map +1 -1
  816. package/tui/dist/execution/execution-model.d.ts +1 -1
  817. package/tui/dist/execution/execution-model.d.ts.map +1 -1
  818. package/tui/dist/execution/execution-model.js +46 -170
  819. package/tui/dist/execution/execution-model.js.map +1 -1
  820. package/tui/dist/execution/workflow-model.d.ts +6 -0
  821. package/tui/dist/execution/workflow-model.d.ts.map +1 -0
  822. package/tui/dist/execution/workflow-model.js +219 -0
  823. package/tui/dist/execution/workflow-model.js.map +1 -0
  824. package/tui/dist/grammar.d.ts.map +1 -1
  825. package/tui/dist/grammar.js +1 -2
  826. package/tui/dist/grammar.js.map +1 -1
  827. package/tui/dist/health/health-model.d.ts +25 -0
  828. package/tui/dist/health/health-model.d.ts.map +1 -0
  829. package/tui/dist/health/health-model.js +323 -0
  830. package/tui/dist/health/health-model.js.map +1 -0
  831. package/tui/dist/hydrate.d.ts.map +1 -1
  832. package/tui/dist/hydrate.js +57 -9
  833. package/tui/dist/hydrate.js.map +1 -1
  834. package/tui/dist/input.d.ts +2 -0
  835. package/tui/dist/input.d.ts.map +1 -1
  836. package/tui/dist/input.js +30 -6
  837. package/tui/dist/input.js.map +1 -1
  838. package/tui/dist/main.js +47 -10
  839. package/tui/dist/main.js.map +1 -1
  840. package/tui/dist/render.d.ts +4 -0
  841. package/tui/dist/render.d.ts.map +1 -1
  842. package/tui/dist/render.js +150 -75
  843. package/tui/dist/render.js.map +1 -1
  844. package/tui/dist/sections.d.ts.map +1 -1
  845. package/tui/dist/sections.js +1 -0
  846. package/tui/dist/sections.js.map +1 -1
  847. package/tui/dist/socket-server.d.ts +4 -0
  848. package/tui/dist/socket-server.d.ts.map +1 -1
  849. package/tui/dist/socket-server.js +4 -0
  850. package/tui/dist/socket-server.js.map +1 -1
  851. package/tui/dist/state.d.ts +3 -1
  852. package/tui/dist/state.d.ts.map +1 -1
  853. package/tui/dist/state.js +58 -14
  854. package/tui/dist/state.js.map +1 -1
  855. package/tui/dist/stylize.js +3 -3
  856. package/tui/dist/stylize.js.map +1 -1
  857. package/tui/dist/time.d.ts +9 -0
  858. package/tui/dist/time.d.ts.map +1 -0
  859. package/tui/dist/time.js +42 -0
  860. package/tui/dist/time.js.map +1 -0
  861. package/tui/dist/types.d.ts +126 -2
  862. package/tui/dist/types.d.ts.map +1 -1
@@ -1,4 +1,5 @@
1
1
  import type { ChildProcess } from "node:child_process";
2
+ import type { DaemonStartLock } from "./daemon-start-lock.js";
2
3
  import { type InitWorkspaceResult, type ManagedPathKind } from "@openrig/daemon/instance-initialization";
3
4
  export interface DaemonState {
4
5
  pid: number;
@@ -45,6 +46,10 @@ export interface DaemonStatus {
45
46
  /** OPR.0.4.3.21 — event-loop evidence when healthz answered with a monitor. */
46
47
  eventLoop?: DaemonEventLoopEvidence;
47
48
  }
49
+ export interface GetDaemonStatusOptions {
50
+ /** Observers may disable cleanup; only a matching clean shutdown permits removal. */
51
+ cleanupStaleState?: boolean;
52
+ }
48
53
  /** Build the daemon HTTP URL from status. Uses persisted host or defaults to 127.0.0.1. */
49
54
  export declare function getDaemonUrl(status: DaemonStatus): string;
50
55
  /**
@@ -96,6 +101,8 @@ export interface StartOptions {
96
101
  skipKernelBoot?: boolean;
97
102
  }
98
103
  export interface LifecycleDeps {
104
+ /** Required by startDaemon; read-only lifecycle consumers need no launch capability. */
105
+ acquireStartLock?: () => DaemonStartLock;
99
106
  spawn: (cmd: string, args: string[], opts: {
100
107
  env: Record<string, string>;
101
108
  stdio: unknown;
@@ -115,6 +122,7 @@ export interface LifecycleDeps {
115
122
  * not exercise collisions may omit it and use the legacy exists seam. */
116
123
  pathKind?: (path: string) => ManagedPathKind;
117
124
  openForAppend: (path: string) => number;
125
+ closeFile?: (fd: number) => void;
118
126
  isProcessAlive: (pid: number) => boolean;
119
127
  sleep?: (ms: number) => Promise<void>;
120
128
  homeDir?: string;
@@ -219,8 +227,8 @@ export declare function verifyRequiredListeners(input: {
219
227
  reason: string;
220
228
  }>;
221
229
  export declare function startDaemon(opts: StartOptions, deps: LifecycleDeps): Promise<DaemonState>;
222
- export declare function stopDaemon(deps: LifecycleDeps): Promise<void>;
223
- export declare function getDaemonStatus(deps: LifecycleDeps): Promise<DaemonStatus>;
230
+ export declare function stopDaemon(deps: LifecycleDeps): Promise<"stopped" | "no-target">;
231
+ export declare function getDaemonStatus(deps: LifecycleDeps, options?: GetDaemonStatusOptions): Promise<DaemonStatus>;
224
232
  export declare function readLogs(deps: LifecycleDeps): string | null;
225
233
  export declare function tailLogs(deps: LifecycleDeps, opts: {
226
234
  follow: boolean;
@@ -246,15 +254,8 @@ export declare function fetchSelfHostIdentity(deps: LifecycleDeps, url: string):
246
254
  selfHostId: string;
247
255
  selfHostIdSource?: string;
248
256
  } | undefined>;
249
- /**
250
- * A4 HTTP-path origin-triple carry: resolve THIS host's `selfHostId` for a REMOTE-targeting client,
251
- * so the stamped X-OpenRig-Session becomes the origin TRIPLE (member@rig@selfHostId) and the remote
252
- * daemon renders the ORIGIN host. The id comes from the LOCAL daemon's /healthz (env OPENRIG_URL,
253
- * else the running local daemon), via the shipped fail-open `fetchSelfHostId`. C1 fail-open all the
254
- * way down: no env URL and no running local daemon ⇒ `undefined` ⇒ the 2-part header stamps (today's
255
- * behavior, no new failure mode). This is THIS host's own derived id, never a caller-supplied string.
256
- */
257
- export declare function resolveOriginSelfHostId(deps: LifecycleDeps): Promise<string | undefined>;
257
+ /** Resolve this instance's persisted identity even during an outage; never read it from the target. */
258
+ export declare function resolveOriginSelfHostId(_deps: LifecycleDeps): Promise<string | undefined>;
258
259
  export interface KernelReadyResult {
259
260
  ok: boolean;
260
261
  kernelState: string | null;
@@ -1 +1 @@
1
- {"version":3,"file":"daemon-lifecycle.d.ts","sourceRoot":"","sources":["../src/daemon-lifecycle.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"daemon-lifecycle.d.ts","sourceRoot":"","sources":["../src/daemon-lifecycle.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,8 @@
1
1
  import path from "node:path";
2
2
  import { existsSync } from "node:fs";
3
+ import { DAEMON_STOP_WAIT_MS, DAEMON_SHUTDOWN_RECEIPT } from "@openrig/daemon/daemon-shutdown";
3
4
  import { ConfigStore } from "./config-store.js";
5
+ import { readLocalOrigin } from "./local-origin.js";
4
6
  import { OPENRIG_HOME, LEGACY_RIGGED_HOME, readOpenRigEnv } from "./openrig-compat.js";
5
7
  import { ensureDefaultWorkspace, ensureOpenRigInstance, formatInstanceInitializationConflicts, } from "@openrig/daemon/instance-initialization";
6
8
  /** Build the daemon HTTP URL from status. Uses persisted host or defaults to 127.0.0.1. */
@@ -202,7 +204,7 @@ function readState(deps) {
202
204
  }
203
205
  catch {
204
206
  // Malformed daemon.json — treat as no state
205
- console.error("Warning: malformed daemon.json, treating as stopped");
207
+ console.error("Warning: malformed daemon.json; target identity unavailable");
206
208
  return null;
207
209
  }
208
210
  }
@@ -385,7 +387,27 @@ export async function verifyRequiredListeners(input) {
385
387
  }
386
388
  return { ok: true, verified };
387
389
  }
390
+ class StartupIdentityError extends Error {
391
+ }
392
+ class StartupChildPendingError extends Error {
393
+ }
388
394
  export async function startDaemon(opts, deps) {
395
+ if (!deps.acquireStartLock)
396
+ throw new Error("Daemon startup requires a local launch reservation");
397
+ const lock = deps.acquireStartLock();
398
+ let preserve = false;
399
+ try {
400
+ return await startOwnedDaemon(opts, deps, lock);
401
+ }
402
+ catch (error) {
403
+ preserve = error instanceof StartupChildPendingError;
404
+ throw error;
405
+ }
406
+ finally {
407
+ lock.release(preserve);
408
+ }
409
+ }
410
+ async function startOwnedDaemon(opts, deps, lock) {
389
411
  const port = opts.port ?? DEFAULT_PORT;
390
412
  const db = opts.db ?? DEFAULT_DB;
391
413
  // bug-fix slice auth-bearer-tailscale-trust: preserve the
@@ -437,151 +459,285 @@ export async function startDaemon(opts, deps) {
437
459
  throw new Error(`OpenRig instance initialization blocked: ${formatInstanceInitializationConflicts(initialization)}`);
438
460
  }
439
461
  const logFd = deps.openForAppend(LOG_FILE);
440
- const child = deps.spawn(process.execPath, [daemonEntry], {
441
- env: buildDaemonEnv(process.env, {
442
- port,
443
- host: explicitHost,
444
- db,
445
- transcriptsEnabled: opts.transcriptsEnabled,
446
- transcriptsPath: opts.transcriptsPath,
447
- transcriptsLines: opts.transcriptsLines,
448
- transcriptsPollIntervalSeconds: opts.transcriptsPollIntervalSeconds,
449
- skipKernelBoot: opts.skipKernelBoot,
450
- }),
451
- stdio: ["ignore", logFd, logFd],
452
- detached: true,
453
- });
462
+ let child;
463
+ try {
464
+ child = deps.spawn(process.execPath, [daemonEntry], {
465
+ env: buildDaemonEnv(process.env, {
466
+ port,
467
+ host: explicitHost,
468
+ db,
469
+ transcriptsEnabled: opts.transcriptsEnabled,
470
+ transcriptsPath: opts.transcriptsPath,
471
+ transcriptsLines: opts.transcriptsLines,
472
+ transcriptsPollIntervalSeconds: opts.transcriptsPollIntervalSeconds,
473
+ skipKernelBoot: opts.skipKernelBoot,
474
+ }),
475
+ stdio: ["ignore", logFd, logFd],
476
+ detached: true,
477
+ });
478
+ }
479
+ finally {
480
+ deps.closeFile?.(logFd);
481
+ }
482
+ let childFailure;
483
+ let rejectExit;
484
+ let resolveExit;
485
+ const exited = new Promise((resolve) => { resolveExit = resolve; });
486
+ const failed = new Promise((_, reject) => { rejectExit = reject; });
487
+ // An error can arrive during synchronous publication/cleanup, between awaits.
488
+ void failed.catch(() => { });
489
+ const onError = (error) => {
490
+ childFailure = new Error(`Daemon child failed to spawn: ${error.message}`);
491
+ rejectExit(childFailure);
492
+ };
493
+ const onExit = (code, signal) => {
494
+ childFailure = new Error(`Daemon child ${child.pid ?? "unknown"} exited before startup completed (code ${code}, signal ${signal ?? "none"})`);
495
+ rejectExit(childFailure);
496
+ resolveExit();
497
+ };
498
+ child.once("error", onError);
499
+ child.once("exit", onExit);
454
500
  child.unref();
455
501
  const pid = child.pid;
456
- // Poll healthz against the configured probe host (loopback default
457
- // when operator didn't opt in to a specific bind).
502
+ const hasExited = () => child.exitCode != null || child.signalCode != null;
503
+ const assertChild = () => {
504
+ if (childFailure)
505
+ throw childFailure;
506
+ if (!Number.isSafeInteger(pid) || pid <= 0)
507
+ throw new Error("Daemon spawn returned no valid child PID");
508
+ if (hasExited())
509
+ throw new Error(`Daemon child ${pid} exited before startup completed`);
510
+ };
458
511
  const healthzUrl = `http://${probeHost}:${port}/healthz`;
459
- let healthy = false;
460
- for (let i = 0; i < HEALTHZ_RETRIES; i++) {
512
+ const readOwnedHealth = async (url) => {
513
+ assertChild();
514
+ let timer;
461
515
  try {
462
- const res = await fetchDaemonProbe(deps, healthzUrl, HEALTHZ_PROBE_TIMEOUT_MS);
463
- if (res.ok) {
464
- healthy = true;
465
- break;
466
- }
467
- }
468
- catch {
469
- // Not ready yet
516
+ return await Promise.race([
517
+ failed,
518
+ new Promise((_, reject) => {
519
+ timer = setTimeout(() => reject(new HealthProbeTimeoutError(url)), HEALTHZ_PROBE_TIMEOUT_MS);
520
+ }),
521
+ (async () => {
522
+ const res = await deps.fetch(url);
523
+ if (!res.ok)
524
+ return null;
525
+ let body;
526
+ try {
527
+ body = res.json ? await res.json() : null;
528
+ }
529
+ catch {
530
+ throw new StartupIdentityError(`Daemon startup identity unavailable at ${url}: expected child PID ${pid}; invalid health response`);
531
+ }
532
+ if (body?.pid !== pid) {
533
+ throw new StartupIdentityError(`Daemon startup identity mismatch at ${url}: expected child PID ${pid}, observed ${typeof body?.pid === "number" ? body.pid : "unknown"}; state not published`);
534
+ }
535
+ assertChild();
536
+ return body;
537
+ })(),
538
+ ]);
470
539
  }
471
- await new Promise((r) => setTimeout(r, HEALTHZ_DELAY_MS));
472
- }
473
- if (!healthy) {
474
- try {
475
- deps.kill(pid, "SIGTERM");
540
+ finally {
541
+ if (timer)
542
+ clearTimeout(timer);
476
543
  }
477
- catch { /* best effort */ }
478
- const logContent = deps.readFile(resolveLifecycleFile(deps, "daemon.log"));
479
- throw new Error(summarizeDaemonStartFailure(healthzUrl, logContent));
480
- }
481
- // S20 — the restored adoption/upgrade gate: when the daemon reports its bind plan,
482
- // derive the required listener set from the EFFECTIVE mode and prove every listener
483
- // by probing its own /healthz. A silently dropped listener fails the start LOUDLY
484
- // (the 0.5.3-receipt regression accepted loopback health alone and missed exactly
485
- // this). Older daemons without the payload skip the gate unchanged (additive).
544
+ };
486
545
  try {
487
- const healthRes = await fetchDaemonProbe(deps, healthzUrl, HEALTHZ_PROBE_TIMEOUT_MS);
488
- const healthBody = (await (healthRes.json?.() ?? Promise.resolve(null)).catch(() => null));
489
- if (healthBody?.bind) {
490
- const gate = await verifyRequiredListeners({
491
- bind: healthBody.bind,
492
- port,
493
- // r2 repair — error PROVENANCE preserved: an explicit non-OK answer or a
494
- // connection refusal is positive evidence ("unhealthy"); a timeout or any
495
- // other transient probe exception is "indeterminate" and can never kill.
496
- probe: async (url) => {
497
- try {
498
- const r = await fetchDaemonProbe(deps, url, HEALTHZ_PROBE_TIMEOUT_MS);
499
- return r.ok ? "healthy" : "unhealthy";
546
+ assertChild();
547
+ lock.recordChild(pid);
548
+ let healthy = false;
549
+ let lastProbe = "health endpoint not responding";
550
+ for (let i = 0; i < HEALTHZ_RETRIES; i++) {
551
+ try {
552
+ const body = await readOwnedHealth(healthzUrl);
553
+ if (body) {
554
+ const bind = body.bind;
555
+ if (!bind || !["explicit", "default"].includes(bind.mode) || !Array.isArray(bind.hosts)
556
+ || bind.hosts.length === 0 || !bind.hosts.every((host) => typeof host === "string" && host.length > 0)
557
+ || typeof bind.tailscaleDetected !== "boolean") {
558
+ throw new StartupIdentityError(`Daemon startup listener identity unavailable for child PID ${pid}; state not published`);
500
559
  }
501
- catch (err) {
502
- const code = err.code
503
- ?? err.cause?.code;
504
- return code === "ECONNREFUSED" ? "unhealthy" : "indeterminate";
560
+ const gate = await verifyRequiredListeners({ bind, port, probe: async (url) => {
561
+ try {
562
+ return await readOwnedHealth(url) ? "healthy" : "unhealthy";
563
+ }
564
+ catch (error) {
565
+ if (error instanceof StartupIdentityError || childFailure)
566
+ throw error;
567
+ const code = error.code
568
+ ?? error.cause?.code;
569
+ return code === "ECONNREFUSED" ? "unhealthy" : "indeterminate";
570
+ }
571
+ } });
572
+ if (gate.ok === false)
573
+ throw new StartupIdentityError(`Daemon child ${pid} FAILED the listener adoption gate: ${gate.reason}`);
574
+ if (gate.ok === true) {
575
+ healthy = true;
576
+ break;
505
577
  }
506
- },
507
- });
508
- if (gate.ok === false) {
509
- try {
510
- deps.kill(pid, "SIGTERM");
578
+ lastProbe = gate.reason;
511
579
  }
512
- catch { /* best effort */ }
513
- throw new Error(`daemon started but FAILED the listener adoption gate: ${gate.reason}`);
514
580
  }
515
- // gate.ok === "indeterminate" falls through healthy: no evidence, no action.
581
+ catch (error) {
582
+ assertChild();
583
+ if (error instanceof StartupIdentityError)
584
+ throw error;
585
+ lastProbe = error instanceof Error ? error.message : String(error);
586
+ }
587
+ await Promise.race([new Promise((resolve) => setTimeout(resolve, HEALTHZ_DELAY_MS)), failed]);
588
+ }
589
+ if (!healthy) {
590
+ throw new Error(`${summarizeDaemonStartFailure(healthzUrl, deps.readFile(resolveLifecycleFile(deps, "daemon.log")))}. Last probe: ${lastProbe}`);
591
+ }
592
+ assertChild();
593
+ if (!deps.isProcessAlive(pid))
594
+ throw new Error(`Daemon child ${pid} liveness could not be confirmed; state not published`);
595
+ const state = { pid: pid, port, host: probeHost, db, startedAt: new Date().toISOString() };
596
+ try {
597
+ deps.writeFile(STATE_FILE, JSON.stringify(state, null, 2));
598
+ assertChild();
599
+ // A synchronous writer can outlast the process while exit events remain
600
+ // undelivered. Recheck physical evidence on the other side of publication.
601
+ if (!deps.isProcessAlive(pid))
602
+ throw new Error(`Daemon child ${pid} liveness could not be confirmed at state publication; startup not accepted`);
603
+ }
604
+ catch (error) {
605
+ removeMatchingState(deps, STATE_FILE, state);
606
+ throw error;
516
607
  }
608
+ return state;
517
609
  }
518
- catch (err) {
519
- if (err instanceof Error && err.message.includes("listener adoption gate"))
520
- throw err;
521
- // A parse/probe hiccup on the gate read must not kill an otherwise healthy start;
522
- // the gate acts only on POSITIVE evidence of a bad bind (never on its own failure).
523
- }
524
- const state = {
525
- pid,
526
- port,
527
- // Persist the probe host (operator-explicit when set, loopback
528
- // default otherwise) so subsequent status reads can reach the
529
- // daemon regardless of whether tailscale was added at multi-bind.
530
- host: probeHost,
531
- db,
532
- startedAt: new Date().toISOString(),
533
- };
534
- deps.writeFile(STATE_FILE, JSON.stringify(state, null, 2));
535
- return state;
610
+ catch (error) {
611
+ // Only this launch's child may be cleaned up. A retained child also retains
612
+ // the reservation so a retry cannot run another pre-bind initialization.
613
+ // A failed ps is not exit evidence. This is our unreaped child: signal only
614
+ // that PID, then release exclusion only after its own exit is observed.
615
+ if (Number.isSafeInteger(pid) && pid > 0 && !hasExited()) {
616
+ try {
617
+ deps.kill(pid, "SIGTERM");
618
+ }
619
+ catch { /* confirm exit below */ }
620
+ let timer;
621
+ try {
622
+ const gone = await Promise.race([
623
+ exited.then(() => true),
624
+ new Promise((resolve) => { timer = setTimeout(() => resolve(false), DAEMON_STOP_WAIT_MS); }),
625
+ ]);
626
+ if (!gone)
627
+ throw new StartupChildPendingError(`${error instanceof Error ? error.message : error}. Child PID ${pid} exit is unconfirmed; startup reservation retained. Inspect daemon-start.lock and daemon.log before recovery.`);
628
+ }
629
+ finally {
630
+ if (timer)
631
+ clearTimeout(timer);
632
+ }
633
+ }
634
+ throw error;
635
+ }
636
+ finally {
637
+ // A native spawn failure with no PID emits its error on the next turn.
638
+ if (pid !== undefined || childFailure)
639
+ child.off("error", onError);
640
+ child.off("exit", onExit);
641
+ }
642
+ }
643
+ function readShutdownReceipt(deps, stateFile) {
644
+ const receiptPath = path.join(path.dirname(stateFile), DAEMON_SHUTDOWN_RECEIPT);
645
+ const raw = deps.readFile(receiptPath);
646
+ let receipt;
647
+ try {
648
+ receipt = JSON.parse(raw ?? "null") ?? undefined;
649
+ }
650
+ catch { /* unavailable */ }
651
+ if (receipt?.schema !== "openrig.daemon-shutdown/v1" || !Number.isSafeInteger(receipt.pid) || receipt.pid <= 0
652
+ || !Number.isFinite(Date.parse(receipt.startedAt)) || !(Date.parse(receipt.completedAt) >= Date.parse(receipt.startedAt))
653
+ || !(Date.parse(receipt.completedAt) <= Date.now()) || typeof receipt.phase !== "string"
654
+ || !Array.isArray(receipt.failures) || !["clean", "failed", "timed-out"].includes(receipt.outcome))
655
+ receipt = undefined;
656
+ return { receipt, present: raw !== null || deps.exists(receiptPath), receiptPath };
657
+ }
658
+ function receiptMatchesState(receipt, state, notBefore = Date.parse(state.startedAt)) {
659
+ return receipt?.pid === state.pid && Date.parse(receipt.startedAt) >= notBefore;
660
+ }
661
+ function isCleanShutdown(receipt) {
662
+ return receipt?.outcome === "clean" && receipt.phase === "complete" && receipt.failures.length === 0;
663
+ }
664
+ function removeMatchingState(deps, stateFile, state) {
665
+ // A concurrent start/rebind must not have its state removed by an old stop/status.
666
+ const current = readState(deps);
667
+ if (current?.pid === state.pid && current.startedAt === state.startedAt && current.port === state.port
668
+ && current.host === state.host && current.db === state.db)
669
+ deps.removeFile(stateFile);
536
670
  }
537
671
  export async function stopDaemon(deps) {
538
672
  const state = readState(deps);
539
- if (!state) {
540
- const configured = resolveConfiguredDaemonTarget();
541
- let recoveredRunning = false;
673
+ const configured = resolveConfiguredDaemonTarget();
674
+ const explicitUrl = readOpenRigEnv("OPENRIG_URL", "RIGGED_URL");
675
+ const stateUrl = state ? `http://${state.host ?? DEFAULT_HOST}:${state.port}` : undefined;
676
+ const target = stateUrl ?? explicitUrl?.replace(/\/+$/, "") ?? `http://${configured.host}:${configured.port}`;
677
+ if (stateUrl && explicitUrl && new URL(explicitUrl).origin !== new URL(stateUrl).origin) {
678
+ throw new Error(`Cannot stop safely: addressed ${explicitUrl}/healthz does not match local PID ${state.pid} at ${stateUrl}/healthz; no signal sent.`);
679
+ }
680
+ const check = `${target}/healthz`;
681
+ const listener = async () => {
542
682
  try {
543
- await fetchDaemonProbe(deps, `http://${configured.host}:${configured.port}/healthz`, HEALTHZ_PROBE_TIMEOUT_MS);
544
- recoveredRunning = true;
683
+ await fetchDaemonProbe(deps, check, HEALTHZ_PROBE_TIMEOUT_MS);
684
+ return "responding";
545
685
  }
546
- catch (err) {
547
- if (err instanceof HealthProbeTimeoutError) {
548
- throw new Error(`Daemon state is missing and port ${configured.port} is unresponsive — cannot stop safely.`);
549
- }
686
+ catch (error) {
687
+ return isRefusedError(error) ? "refused" : "unavailable";
550
688
  }
551
- if (recoveredRunning) {
552
- throw new Error(`Daemon is running on port ${configured.port}, but daemon state is missing — cannot stop safely.`);
689
+ };
690
+ if (!state) {
691
+ const effect = await listener();
692
+ const sibling = findSiblingHome(deps);
693
+ if (effect !== "refused" || sibling) {
694
+ throw new Error(`Daemon state is missing — cannot stop safely. Checked ${check}; listener ${effect}.` +
695
+ (sibling ? ` Resolved home ${sibling.resolvedHome}; live sibling ${sibling.siblingHome}.` : ""));
553
696
  }
554
- return;
697
+ const stateFile = resolveLifecycleFile(deps, "daemon.json");
698
+ if (deps.exists(stateFile)) {
699
+ throw new Error(`Daemon target state is unreadable; drain completion unverified. Checked ${check}; listener refused; no signal sent. Inspect ${stateFile}.`);
700
+ }
701
+ const prior = readShutdownReceipt(deps, stateFile);
702
+ if (prior.present && !isCleanShutdown(prior.receipt)) {
703
+ throw new Error(`Drain completion unverified: local shutdown evidence exists but no target state is recorded; cannot attribute it to ${target}. Checked ${check}; listener refused. Inspect ${prior.receiptPath}.`);
704
+ }
705
+ // No target is not a clean-drain verdict, including after an earlier clean stop.
706
+ return "no-target";
555
707
  }
556
708
  const stateFile = resolveLifecycleFile(deps, "daemon.json");
557
709
  const pidState = await checkPid(state, deps);
558
- if (pidState === "dead") {
559
- // Already dead — clean up stale state
560
- deps.removeFile(stateFile);
561
- return;
562
- }
563
710
  if (pidState === "not_openrig") {
564
- // PID alive but not our daemon (reused PID) — clean up state, don't kill
565
- deps.removeFile(stateFile);
566
- return;
711
+ throw new Error(`Cannot stop safely: PID ${state.pid} is present but identity is not confirmed at ${check}; no signal sent, state preserved.`);
567
712
  }
568
- // pidState === "openrig" or "unresponsive" — safe to SIGTERM
569
- deps.kill(state.pid, "SIGTERM");
570
- // Wait briefly for process to exit
571
- let exited = false;
572
- for (let i = 0; i < 20; i++) {
573
- if (!deps.isProcessAlive(state.pid)) {
574
- exited = true;
575
- break;
713
+ let notBefore = Date.parse(state.startedAt);
714
+ if (pidState !== "dead") {
715
+ notBefore = Date.now();
716
+ deps.kill(state.pid, "SIGTERM");
717
+ // One signal. An already-exited target goes straight to the same judgment.
718
+ const deadline = Date.now() + DAEMON_STOP_WAIT_MS;
719
+ while (deps.isProcessAlive(state.pid) && Date.now() < deadline) {
720
+ await new Promise((r) => setTimeout(r, 100));
576
721
  }
577
- await new Promise((r) => setTimeout(r, 100));
578
722
  }
579
- if (exited) {
580
- deps.removeFile(stateFile);
723
+ const present = deps.isProcessAlive(state.pid);
724
+ const effect = await listener();
725
+ const observation = `targeted ${target}; checked ${check}; PID ${state.pid} ${present ? "present" : "absent"}; listener ${effect}`;
726
+ if (present) {
727
+ throw new Error(`Daemon did not exit after SIGTERM within ${DAEMON_STOP_WAIT_MS}ms; ${observation}` +
728
+ (effect === "responding" ? " (still listening)" : "") + "; state file preserved.");
581
729
  }
582
- else {
583
- throw new Error(`Daemon (pid ${state.pid}) did not exit after SIGTERM — state file preserved`);
730
+ if (effect !== "refused")
731
+ throw new Error(`Daemon stop verification is unverified: ${observation}; state preserved.`);
732
+ const { receipt, receiptPath } = readShutdownReceipt(deps, stateFile);
733
+ if (!receiptMatchesState(receipt, state, notBefore)) {
734
+ throw new Error(`Daemon process stopped; ${observation}; drain completion unverified (no matching shutdown receipt); state preserved. Inspect ${path.join(path.dirname(stateFile), "daemon.log")}.`);
584
735
  }
736
+ if (!isCleanShutdown(receipt)) {
737
+ throw new Error(`Daemon stopped with incomplete shutdown: ${receipt.outcome}; phase=${receipt.phase}; ${observation}. Pending effects are unverified; state preserved; inspect ${receiptPath}.`);
738
+ }
739
+ removeMatchingState(deps, stateFile, state);
740
+ return "stopped";
585
741
  }
586
742
  /** RULING 1ae863d2 — positive-down evidence classifier (lockstep with the daemon's
587
743
  * crash-cart-detect semantics): ONLY a connection refusal is strong down evidence;
@@ -635,7 +791,7 @@ function findSiblingHome(deps) {
635
791
  }
636
792
  return undefined;
637
793
  }
638
- export async function getDaemonStatus(deps) {
794
+ export async function getDaemonStatus(deps, options = {}) {
639
795
  // If OPENRIG_URL is set, bypass daemon.json and probe that URL directly
640
796
  const openrigUrl = readOpenRigEnv("OPENRIG_URL", "RIGGED_URL");
641
797
  if (openrigUrl) {
@@ -675,8 +831,12 @@ export async function getDaemonStatus(deps) {
675
831
  }
676
832
  }
677
833
  if (!deps.isProcessAlive(state.pid)) {
678
- // Process dead — stale state
679
- deps.removeFile(resolveLifecycleFile(deps, "daemon.json"));
834
+ // A status read must not erase the identity needed to judge a failed stop.
835
+ const stateFile = resolveLifecycleFile(deps, "daemon.json");
836
+ const { receipt } = readShutdownReceipt(deps, stateFile);
837
+ if (options.cleanupStaleState !== false && receiptMatchesState(receipt, state) && isCleanShutdown(receipt)) {
838
+ removeMatchingState(deps, stateFile, state);
839
+ }
680
840
  return { state: "stale" };
681
841
  }
682
842
  // Process alive — check healthz
@@ -816,32 +976,9 @@ export async function fetchSelfHostIdentity(deps, url) {
816
976
  return undefined;
817
977
  }
818
978
  }
819
- /**
820
- * A4 HTTP-path origin-triple carry: resolve THIS host's `selfHostId` for a REMOTE-targeting client,
821
- * so the stamped X-OpenRig-Session becomes the origin TRIPLE (member@rig@selfHostId) and the remote
822
- * daemon renders the ORIGIN host. The id comes from the LOCAL daemon's /healthz (env OPENRIG_URL,
823
- * else the running local daemon), via the shipped fail-open `fetchSelfHostId`. C1 fail-open all the
824
- * way down: no env URL and no running local daemon ⇒ `undefined` ⇒ the 2-part header stamps (today's
825
- * behavior, no new failure mode). This is THIS host's own derived id, never a caller-supplied string.
826
- */
827
- export async function resolveOriginSelfHostId(deps) {
828
- // C1 fail-open around the WHOLE resolution, not just fetchSelfHostId: a remote op must NEVER depend on
829
- // local daemon health. getDaemonStatus can throw (down / mid-restart / minimal test deps); ANY failure
830
- // ⇒ undefined ⇒ the 2-part header stamps (today's behavior). Pin 5: no new failure mode on the remote path.
831
- try {
832
- let localUrl = readOpenRigEnv("OPENRIG_URL", "RIGGED_URL");
833
- if (!localUrl) {
834
- const status = await getDaemonStatus(deps);
835
- if (status.state === "running" && status.port !== undefined)
836
- localUrl = getDaemonUrl(status);
837
- }
838
- if (!localUrl)
839
- return undefined;
840
- return await fetchSelfHostId(deps, localUrl);
841
- }
842
- catch {
843
- return undefined;
844
- }
979
+ /** Resolve this instance's persisted identity even during an outage; never read it from the target. */
980
+ export async function resolveOriginSelfHostId(_deps) {
981
+ return readLocalOrigin();
845
982
  }
846
983
  const defaultSleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
847
984
  /**