@openrig/cli 0.5.10 → 0.5.12

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 (1007) hide show
  1. package/LICENSE +190 -0
  2. package/daemon/assets/plugins/openrig-core/README.md +24 -5
  3. package/daemon/assets/plugins/openrig-core/skills/agent-operated-software/SKILL.md +7 -4
  4. package/daemon/assets/plugins/openrig-core/skills/agent-operated-workflows/SKILL.md +4 -2
  5. package/daemon/assets/plugins/openrig-core/skills/applying-a-permission-policy/SKILL.md +11 -14
  6. package/daemon/assets/plugins/openrig-core/skills/claude-compaction-restore/SKILL.md +51 -59
  7. package/daemon/assets/plugins/openrig-core/skills/forming-an-openrig-mental-model/SKILL.md +11 -10
  8. package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/SKILL.md +66 -66
  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 +55 -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 +143 -41
  23. package/daemon/context-packs/skills/agent-operated-software/SKILL.md +7 -4
  24. package/daemon/context-packs/skills/agent-operated-software/manifest.yaml +1 -1
  25. package/daemon/context-packs/skills/agent-operated-workflows/SKILL.md +4 -2
  26. package/daemon/context-packs/skills/agent-operated-workflows/manifest.yaml +1 -1
  27. package/daemon/context-packs/skills/applying-a-permission-policy/SKILL.md +11 -14
  28. package/daemon/context-packs/skills/applying-a-permission-policy/manifest.yaml +1 -1
  29. package/daemon/context-packs/skills/claude-compaction-restore/SKILL.md +51 -59
  30. package/daemon/context-packs/skills/claude-compaction-restore/manifest.yaml +1 -1
  31. package/daemon/context-packs/skills/core/agent-starters/SKILL.md +21 -19
  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 +11 -10
  34. package/daemon/context-packs/skills/core/agent-startup-and-context-ingestion/manifest.yaml +1 -1
  35. package/daemon/context-packs/skills/core/cross-host-rig-commands/SKILL.md +84 -148
  36. package/daemon/context-packs/skills/core/cross-host-rig-commands/manifest.yaml +3 -3
  37. package/daemon/context-packs/skills/core/human-in-the-loop/manifest.yaml +1 -1
  38. package/daemon/context-packs/skills/core/messaging-the-human/manifest.yaml +1 -1
  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/manifest.yaml +1 -1
  59. package/daemon/context-packs/skills/openrig-operating-model/SKILL.md +66 -66
  60. package/daemon/context-packs/skills/openrig-operating-model/manifest.yaml +1 -1
  61. package/daemon/context-packs/skills/openrig-operating-model/scripts/trunk-diff.sh +1 -1
  62. package/daemon/context-packs/skills/openrig-operating-model/templates/LEARNED.md +7 -5
  63. package/daemon/context-packs/skills/openrig-operating-model/templates/PLAYBOOK.md +3 -4
  64. package/daemon/context-packs/skills/openrig-operating-model/templates/SPEC.md +7 -7
  65. package/daemon/context-packs/skills/openrig-user/SKILL.md +55 -64
  66. package/daemon/context-packs/skills/openrig-user/manifest.yaml +1 -1
  67. package/daemon/context-packs/skills/orienting-to-an-inherited-seat/CHANGELOG.md +14 -58
  68. package/daemon/context-packs/skills/orienting-to-an-inherited-seat/manifest.yaml +1 -1
  69. package/daemon/context-packs/skills/pm/backlog-capture/manifest.yaml +1 -1
  70. package/daemon/context-packs/skills/pm/context-builder/manifest.yaml +1 -1
  71. package/daemon/context-packs/skills/pm/exec-summary/SKILL.md +1 -1
  72. package/daemon/context-packs/skills/pm/exec-summary/manifest.yaml +1 -1
  73. package/daemon/context-packs/skills/pm/office-hours/manifest.yaml +1 -1
  74. package/daemon/context-packs/skills/pm/plan-review/SKILL.md +2 -2
  75. package/daemon/context-packs/skills/pm/plan-review/manifest.yaml +1 -1
  76. package/daemon/context-packs/skills/pm/requirements-writer/SKILL.md +1 -1
  77. package/daemon/context-packs/skills/pm/requirements-writer/manifest.yaml +1 -1
  78. package/daemon/context-packs/skills/pm/ui-mockup/SKILL.md +3 -3
  79. package/daemon/context-packs/skills/pm/ui-mockup/manifest.yaml +1 -1
  80. package/daemon/context-packs/skills/pods/development-team/manifest.yaml +1 -1
  81. package/daemon/context-packs/skills/pods/orchestration-team/SKILL.md +41 -59
  82. package/daemon/context-packs/skills/pods/orchestration-team/manifest.yaml +1 -1
  83. package/daemon/context-packs/skills/pods/oversight-team/manifest.yaml +1 -1
  84. package/daemon/context-packs/skills/pods/review-team/manifest.yaml +1 -1
  85. package/daemon/context-packs/skills/process/agent-browser/LOCAL-INSIGHTS.md +24 -53
  86. package/daemon/context-packs/skills/process/agent-browser/manifest.yaml +1 -1
  87. package/daemon/context-packs/skills/process/context-engineering/manifest.yaml +1 -1
  88. package/daemon/context-packs/skills/process/dogfood/manifest.yaml +1 -1
  89. package/daemon/context-packs/skills/process/frontend-design/manifest.yaml +1 -1
  90. package/daemon/context-packs/skills/process/systematic-debugging/find-polluter.sh +29 -15
  91. package/daemon/context-packs/skills/process/systematic-debugging/manifest.yaml +1 -1
  92. package/daemon/context-packs/skills/process/test-driven-development/SKILL.md +47 -40
  93. package/daemon/context-packs/skills/process/test-driven-development/manifest.yaml +1 -1
  94. package/daemon/context-packs/skills/process/verification-before-completion/SKILL.md +3 -3
  95. package/daemon/context-packs/skills/process/verification-before-completion/manifest.yaml +1 -1
  96. package/daemon/context-packs/skills/queue-handoff/SKILL.md +8 -9
  97. package/daemon/context-packs/skills/queue-handoff/manifest.yaml +1 -1
  98. package/daemon/context-packs/skills/refocusing/manifest.yaml +1 -1
  99. package/daemon/context-packs/skills/retiring-and-inheriting-a-seat/CHANGELOG.md +20 -46
  100. package/daemon/context-packs/skills/retiring-and-inheriting-a-seat/SKILL.md +62 -76
  101. package/daemon/context-packs/skills/retiring-and-inheriting-a-seat/manifest.yaml +1 -1
  102. package/daemon/context-packs/skills/seat-continuity-and-handover/SKILL.md +28 -22
  103. package/daemon/context-packs/skills/seat-continuity-and-handover/manifest.yaml +1 -1
  104. package/daemon/context-packs/skills/session-compaction-and-restore/SKILL.md +13 -15
  105. package/daemon/context-packs/skills/session-compaction-and-restore/manifest.yaml +1 -1
  106. package/daemon/context-packs/skills/software-for-agents/manifest.yaml +1 -1
  107. package/daemon/context-packs/world-example/manifest.yaml +1 -1
  108. package/daemon/context-packs/world-public/build-your-world.md +12 -7
  109. package/daemon/context-packs/world-public/manifest.yaml +1 -1
  110. package/daemon/dist/adapters/codex-resume.d.ts +1 -0
  111. package/daemon/dist/adapters/codex-resume.d.ts.map +1 -1
  112. package/daemon/dist/adapters/codex-resume.js +2 -9
  113. package/daemon/dist/adapters/codex-resume.js.map +1 -1
  114. package/daemon/dist/adapters/codex-runtime-adapter.d.ts +7 -3
  115. package/daemon/dist/adapters/codex-runtime-adapter.d.ts.map +1 -1
  116. package/daemon/dist/adapters/codex-runtime-adapter.js +26 -30
  117. package/daemon/dist/adapters/codex-runtime-adapter.js.map +1 -1
  118. package/daemon/dist/adapters/tmux.d.ts +22 -10
  119. package/daemon/dist/adapters/tmux.d.ts.map +1 -1
  120. package/daemon/dist/adapters/tmux.js +71 -36
  121. package/daemon/dist/adapters/tmux.js.map +1 -1
  122. package/daemon/dist/build-info.js +3 -3
  123. package/daemon/dist/daemon-shutdown.d.ts +27 -0
  124. package/daemon/dist/daemon-shutdown.d.ts.map +1 -0
  125. package/daemon/dist/daemon-shutdown.js +84 -0
  126. package/daemon/dist/daemon-shutdown.js.map +1 -0
  127. package/daemon/dist/domain/active-occupant.d.ts +2 -2
  128. package/daemon/dist/domain/active-occupant.d.ts.map +1 -1
  129. package/daemon/dist/domain/active-occupant.js +5 -5
  130. package/daemon/dist/domain/active-occupant.js.map +1 -1
  131. package/daemon/dist/domain/codex-thread-id.d.ts +1 -0
  132. package/daemon/dist/domain/codex-thread-id.d.ts.map +1 -1
  133. package/daemon/dist/domain/codex-thread-id.js +32 -23
  134. package/daemon/dist/domain/codex-thread-id.js.map +1 -1
  135. package/daemon/dist/domain/context-usage-store.d.ts +2 -0
  136. package/daemon/dist/domain/context-usage-store.d.ts.map +1 -1
  137. package/daemon/dist/domain/context-usage-store.js +7 -28
  138. package/daemon/dist/domain/context-usage-store.js.map +1 -1
  139. package/daemon/dist/domain/crash-cart-conductor.js +1 -1
  140. package/daemon/dist/domain/crash-cart-conductor.js.map +1 -1
  141. package/daemon/dist/domain/crash-cart-discovery.d.ts +3 -1
  142. package/daemon/dist/domain/crash-cart-discovery.d.ts.map +1 -1
  143. package/daemon/dist/domain/crash-cart-discovery.js +15 -4
  144. package/daemon/dist/domain/crash-cart-discovery.js.map +1 -1
  145. package/daemon/dist/domain/execution-view.d.ts.map +1 -1
  146. package/daemon/dist/domain/execution-view.js +68 -5
  147. package/daemon/dist/domain/execution-view.js.map +1 -1
  148. package/daemon/dist/domain/fresh-occupant-relation.d.ts +8 -0
  149. package/daemon/dist/domain/fresh-occupant-relation.d.ts.map +1 -0
  150. package/daemon/dist/domain/fresh-occupant-relation.js +31 -0
  151. package/daemon/dist/domain/fresh-occupant-relation.js.map +1 -0
  152. package/daemon/dist/domain/gateway/channel-operations.d.ts +1 -1
  153. package/daemon/dist/domain/gateway/channel-operations.d.ts.map +1 -1
  154. package/daemon/dist/domain/gateway/connections-projection.d.ts +90 -0
  155. package/daemon/dist/domain/gateway/connections-projection.d.ts.map +1 -0
  156. package/daemon/dist/domain/gateway/connections-projection.js +171 -0
  157. package/daemon/dist/domain/gateway/connections-projection.js.map +1 -0
  158. package/daemon/dist/domain/gateway/human-registry.d.ts +3 -1
  159. package/daemon/dist/domain/gateway/human-registry.d.ts.map +1 -1
  160. package/daemon/dist/domain/gateway/human-registry.js +3 -1
  161. package/daemon/dist/domain/gateway/human-registry.js.map +1 -1
  162. package/daemon/dist/domain/gateway/slack/slack-subsystem.d.ts.map +1 -1
  163. package/daemon/dist/domain/gateway/slack/slack-subsystem.js +3 -2
  164. package/daemon/dist/domain/gateway/slack/slack-subsystem.js.map +1 -1
  165. package/daemon/dist/domain/health-diagnosis.js +1 -1
  166. package/daemon/dist/domain/health-diagnosis.js.map +1 -1
  167. package/daemon/dist/domain/kernel-boot.d.ts +2 -0
  168. package/daemon/dist/domain/kernel-boot.d.ts.map +1 -1
  169. package/daemon/dist/domain/kernel-boot.js +1 -1
  170. package/daemon/dist/domain/kernel-boot.js.map +1 -1
  171. package/daemon/dist/domain/lifecycle-obligations.d.ts +18 -0
  172. package/daemon/dist/domain/lifecycle-obligations.d.ts.map +1 -0
  173. package/daemon/dist/domain/lifecycle-obligations.js +35 -0
  174. package/daemon/dist/domain/lifecycle-obligations.js.map +1 -0
  175. package/daemon/dist/domain/model-divergence/current-generation-record.d.ts.map +1 -1
  176. package/daemon/dist/domain/model-divergence/current-generation-record.js +6 -1
  177. package/daemon/dist/domain/model-divergence/current-generation-record.js.map +1 -1
  178. package/daemon/dist/domain/native-resume-probe.d.ts.map +1 -1
  179. package/daemon/dist/domain/native-resume-probe.js +35 -23
  180. package/daemon/dist/domain/native-resume-probe.js.map +1 -1
  181. package/daemon/dist/domain/parked-query.d.ts +1 -0
  182. package/daemon/dist/domain/parked-query.d.ts.map +1 -1
  183. package/daemon/dist/domain/parked-query.js +2 -1
  184. package/daemon/dist/domain/parked-query.js.map +1 -1
  185. package/daemon/dist/domain/policies/parked-owner-consumer.d.ts +2 -0
  186. package/daemon/dist/domain/policies/parked-owner-consumer.d.ts.map +1 -1
  187. package/daemon/dist/domain/policies/parked-owner-consumer.js +2 -2
  188. package/daemon/dist/domain/policies/parked-owner-consumer.js.map +1 -1
  189. package/daemon/dist/domain/policies/workflow-keepalive.d.ts +1 -0
  190. package/daemon/dist/domain/policies/workflow-keepalive.d.ts.map +1 -1
  191. package/daemon/dist/domain/policies/workflow-keepalive.js +19 -9
  192. package/daemon/dist/domain/policies/workflow-keepalive.js.map +1 -1
  193. package/daemon/dist/domain/project-lifecycle-compiler.d.ts +9 -0
  194. package/daemon/dist/domain/project-lifecycle-compiler.d.ts.map +1 -1
  195. package/daemon/dist/domain/project-lifecycle-compiler.js +121 -23
  196. package/daemon/dist/domain/project-lifecycle-compiler.js.map +1 -1
  197. package/daemon/dist/domain/proof/judgments.d.ts +138 -0
  198. package/daemon/dist/domain/proof/judgments.d.ts.map +1 -0
  199. package/daemon/dist/domain/proof/judgments.js +361 -0
  200. package/daemon/dist/domain/proof/judgments.js.map +1 -0
  201. package/daemon/dist/domain/proof/source-watch.d.ts +17 -0
  202. package/daemon/dist/domain/proof/source-watch.d.ts.map +1 -0
  203. package/daemon/dist/domain/proof/source-watch.js +60 -0
  204. package/daemon/dist/domain/proof/source-watch.js.map +1 -0
  205. package/daemon/dist/domain/queue-owner.d.ts +12 -0
  206. package/daemon/dist/domain/queue-owner.d.ts.map +1 -0
  207. package/daemon/dist/domain/queue-owner.js +28 -0
  208. package/daemon/dist/domain/queue-owner.js.map +1 -0
  209. package/daemon/dist/domain/queue-pickup.d.ts +3 -0
  210. package/daemon/dist/domain/queue-pickup.d.ts.map +1 -1
  211. package/daemon/dist/domain/queue-pickup.js +14 -15
  212. package/daemon/dist/domain/queue-pickup.js.map +1 -1
  213. package/daemon/dist/domain/queue-recovery.d.ts +10 -0
  214. package/daemon/dist/domain/queue-recovery.d.ts.map +1 -0
  215. package/daemon/dist/domain/queue-recovery.js +27 -0
  216. package/daemon/dist/domain/queue-recovery.js.map +1 -0
  217. package/daemon/dist/domain/queue-repository.d.ts +13 -6
  218. package/daemon/dist/domain/queue-repository.d.ts.map +1 -1
  219. package/daemon/dist/domain/queue-repository.js +177 -63
  220. package/daemon/dist/domain/queue-repository.js.map +1 -1
  221. package/daemon/dist/domain/queue-stuck-sweep.d.ts +2 -11
  222. package/daemon/dist/domain/queue-stuck-sweep.d.ts.map +1 -1
  223. package/daemon/dist/domain/queue-stuck-sweep.js +52 -52
  224. package/daemon/dist/domain/queue-stuck-sweep.js.map +1 -1
  225. package/daemon/dist/domain/queue-wait-backoff.d.ts +29 -2
  226. package/daemon/dist/domain/queue-wait-backoff.d.ts.map +1 -1
  227. package/daemon/dist/domain/queue-wait-backoff.js +73 -14
  228. package/daemon/dist/domain/queue-wait-backoff.js.map +1 -1
  229. package/daemon/dist/domain/queue-waiting.d.ts +61 -0
  230. package/daemon/dist/domain/queue-waiting.d.ts.map +1 -0
  231. package/daemon/dist/domain/queue-waiting.js +108 -0
  232. package/daemon/dist/domain/queue-waiting.js.map +1 -0
  233. package/daemon/dist/domain/queue-wake-ladder.d.ts +9 -0
  234. package/daemon/dist/domain/queue-wake-ladder.d.ts.map +1 -1
  235. package/daemon/dist/domain/queue-wake-ladder.js +122 -62
  236. package/daemon/dist/domain/queue-wake-ladder.js.map +1 -1
  237. package/daemon/dist/domain/queue-wake-repository.d.ts +2 -0
  238. package/daemon/dist/domain/queue-wake-repository.d.ts.map +1 -1
  239. package/daemon/dist/domain/queue-wake-repository.js +1 -0
  240. package/daemon/dist/domain/queue-wake-repository.js.map +1 -1
  241. package/daemon/dist/domain/rehydrate-eligibility.d.ts.map +1 -1
  242. package/daemon/dist/domain/rehydrate-eligibility.js +5 -3
  243. package/daemon/dist/domain/rehydrate-eligibility.js.map +1 -1
  244. package/daemon/dist/domain/restore-orchestrator.d.ts.map +1 -1
  245. package/daemon/dist/domain/restore-orchestrator.js +1 -0
  246. package/daemon/dist/domain/restore-orchestrator.js.map +1 -1
  247. package/daemon/dist/domain/restore-plan-preview.d.ts +7 -4
  248. package/daemon/dist/domain/restore-plan-preview.d.ts.map +1 -1
  249. package/daemon/dist/domain/restore-plan-preview.js +12 -6
  250. package/daemon/dist/domain/restore-plan-preview.js.map +1 -1
  251. package/daemon/dist/domain/review/compose.d.ts +9 -1
  252. package/daemon/dist/domain/review/compose.d.ts.map +1 -1
  253. package/daemon/dist/domain/review/compose.js +26 -7
  254. package/daemon/dist/domain/review/compose.js.map +1 -1
  255. package/daemon/dist/domain/review/gather.d.ts.map +1 -1
  256. package/daemon/dist/domain/review/gather.js +3 -0
  257. package/daemon/dist/domain/review/gather.js.map +1 -1
  258. package/daemon/dist/domain/review/types.d.ts +2 -0
  259. package/daemon/dist/domain/review/types.d.ts.map +1 -1
  260. package/daemon/dist/domain/runtime-adapter.d.ts.map +1 -1
  261. package/daemon/dist/domain/runtime-adapter.js +1 -0
  262. package/daemon/dist/domain/runtime-adapter.js.map +1 -1
  263. package/daemon/dist/domain/scope/scope-view-projection.d.ts +8 -0
  264. package/daemon/dist/domain/scope/scope-view-projection.d.ts.map +1 -1
  265. package/daemon/dist/domain/scope/scope-view-projection.js +6 -25
  266. package/daemon/dist/domain/scope/scope-view-projection.js.map +1 -1
  267. package/daemon/dist/domain/seat-lifecycle-service.d.ts +21 -0
  268. package/daemon/dist/domain/seat-lifecycle-service.d.ts.map +1 -1
  269. package/daemon/dist/domain/seat-lifecycle-service.js +55 -2
  270. package/daemon/dist/domain/seat-lifecycle-service.js.map +1 -1
  271. package/daemon/dist/domain/slices/slice-detail-projector.d.ts +2 -0
  272. package/daemon/dist/domain/slices/slice-detail-projector.d.ts.map +1 -1
  273. package/daemon/dist/domain/slices/slice-detail-projector.js +11 -4
  274. package/daemon/dist/domain/slices/slice-detail-projector.js.map +1 -1
  275. package/daemon/dist/domain/slices/slice-indexer.d.ts +2 -0
  276. package/daemon/dist/domain/slices/slice-indexer.d.ts.map +1 -1
  277. package/daemon/dist/domain/slices/slice-indexer.js +26 -0
  278. package/daemon/dist/domain/slices/slice-indexer.js.map +1 -1
  279. package/daemon/dist/domain/snapshot-capture.d.ts.map +1 -1
  280. package/daemon/dist/domain/snapshot-capture.js +4 -2
  281. package/daemon/dist/domain/snapshot-capture.js.map +1 -1
  282. package/daemon/dist/domain/startup-orchestrator.d.ts +11 -0
  283. package/daemon/dist/domain/startup-orchestrator.d.ts.map +1 -1
  284. package/daemon/dist/domain/startup-orchestrator.js +69 -20
  285. package/daemon/dist/domain/startup-orchestrator.js.map +1 -1
  286. package/daemon/dist/domain/startup-proof.d.ts.map +1 -1
  287. package/daemon/dist/domain/startup-proof.js +10 -9
  288. package/daemon/dist/domain/startup-proof.js.map +1 -1
  289. package/daemon/dist/domain/startup-resolver.d.ts +3 -1
  290. package/daemon/dist/domain/startup-resolver.d.ts.map +1 -1
  291. package/daemon/dist/domain/startup-resolver.js +18 -0
  292. package/daemon/dist/domain/startup-resolver.js.map +1 -1
  293. package/daemon/dist/domain/startup-validation.d.ts.map +1 -1
  294. package/daemon/dist/domain/startup-validation.js +12 -1
  295. package/daemon/dist/domain/startup-validation.js.map +1 -1
  296. package/daemon/dist/domain/types.d.ts +26 -1
  297. package/daemon/dist/domain/types.d.ts.map +1 -1
  298. package/daemon/dist/domain/types.js.map +1 -1
  299. package/daemon/dist/domain/user-settings/settings-browser.d.ts +33 -0
  300. package/daemon/dist/domain/user-settings/settings-browser.d.ts.map +1 -0
  301. package/daemon/dist/domain/user-settings/settings-browser.js +261 -0
  302. package/daemon/dist/domain/user-settings/settings-browser.js.map +1 -0
  303. package/daemon/dist/domain/user-settings/settings-store.d.ts +1 -1
  304. package/daemon/dist/domain/user-settings/settings-store.d.ts.map +1 -1
  305. package/daemon/dist/domain/user-settings/settings-store.js +14 -0
  306. package/daemon/dist/domain/user-settings/settings-store.js.map +1 -1
  307. package/daemon/dist/domain/view-event-bridge.d.ts.map +1 -1
  308. package/daemon/dist/domain/view-event-bridge.js +2 -0
  309. package/daemon/dist/domain/view-event-bridge.js.map +1 -1
  310. package/daemon/dist/domain/view-projector.d.ts.map +1 -1
  311. package/daemon/dist/domain/view-projector.js +4 -0
  312. package/daemon/dist/domain/view-projector.js.map +1 -1
  313. package/daemon/dist/domain/watchdog-policy-engine.d.ts +4 -0
  314. package/daemon/dist/domain/watchdog-policy-engine.d.ts.map +1 -1
  315. package/daemon/dist/domain/watchdog-policy-engine.js +8 -1
  316. package/daemon/dist/domain/watchdog-policy-engine.js.map +1 -1
  317. package/daemon/dist/domain/watchdog-scheduler.d.ts +3 -0
  318. package/daemon/dist/domain/watchdog-scheduler.d.ts.map +1 -1
  319. package/daemon/dist/domain/watchdog-scheduler.js +3 -0
  320. package/daemon/dist/domain/watchdog-scheduler.js.map +1 -1
  321. package/daemon/dist/domain/workflow-boot-sweep.d.ts +1 -0
  322. package/daemon/dist/domain/workflow-boot-sweep.d.ts.map +1 -1
  323. package/daemon/dist/domain/workflow-boot-sweep.js +3 -0
  324. package/daemon/dist/domain/workflow-boot-sweep.js.map +1 -1
  325. package/daemon/dist/domain/workflow-exception-escalation.d.ts +4 -3
  326. package/daemon/dist/domain/workflow-exception-escalation.d.ts.map +1 -1
  327. package/daemon/dist/domain/workflow-exception-escalation.js +32 -50
  328. package/daemon/dist/domain/workflow-exception-escalation.js.map +1 -1
  329. package/daemon/dist/domain/workflow-exception-readiness.d.ts +39 -0
  330. package/daemon/dist/domain/workflow-exception-readiness.d.ts.map +1 -0
  331. package/daemon/dist/domain/workflow-exception-readiness.js +77 -0
  332. package/daemon/dist/domain/workflow-exception-readiness.js.map +1 -0
  333. package/daemon/dist/domain/workflow-exception-router.d.ts +7 -3
  334. package/daemon/dist/domain/workflow-exception-router.d.ts.map +1 -1
  335. package/daemon/dist/domain/workflow-exception-router.js +13 -7
  336. package/daemon/dist/domain/workflow-exception-router.js.map +1 -1
  337. package/daemon/dist/domain/workflow-exception.d.ts +6 -0
  338. package/daemon/dist/domain/workflow-exception.d.ts.map +1 -1
  339. package/daemon/dist/domain/workflow-exception.js +10 -3
  340. package/daemon/dist/domain/workflow-exception.js.map +1 -1
  341. package/daemon/dist/domain/workflow-guidance.d.ts +53 -0
  342. package/daemon/dist/domain/workflow-guidance.d.ts.map +1 -0
  343. package/daemon/dist/domain/workflow-guidance.js +212 -0
  344. package/daemon/dist/domain/workflow-guidance.js.map +1 -0
  345. package/daemon/dist/domain/workflow-human-destination.d.ts +18 -0
  346. package/daemon/dist/domain/workflow-human-destination.d.ts.map +1 -0
  347. package/daemon/dist/domain/workflow-human-destination.js +40 -0
  348. package/daemon/dist/domain/workflow-human-destination.js.map +1 -0
  349. package/daemon/dist/domain/workflow-instance-store.d.ts +2 -0
  350. package/daemon/dist/domain/workflow-instance-store.d.ts.map +1 -1
  351. package/daemon/dist/domain/workflow-instance-store.js +7 -0
  352. package/daemon/dist/domain/workflow-instance-store.js.map +1 -1
  353. package/daemon/dist/domain/workflow-planning-context.d.ts +3 -0
  354. package/daemon/dist/domain/workflow-planning-context.d.ts.map +1 -0
  355. package/daemon/dist/domain/workflow-planning-context.js +36 -0
  356. package/daemon/dist/domain/workflow-planning-context.js.map +1 -0
  357. package/daemon/dist/domain/workflow-projector.d.ts +15 -5
  358. package/daemon/dist/domain/workflow-projector.d.ts.map +1 -1
  359. package/daemon/dist/domain/workflow-projector.js +97 -78
  360. package/daemon/dist/domain/workflow-projector.js.map +1 -1
  361. package/daemon/dist/domain/workflow-reconciliation.d.ts +55 -0
  362. package/daemon/dist/domain/workflow-reconciliation.d.ts.map +1 -0
  363. package/daemon/dist/domain/workflow-reconciliation.js +228 -0
  364. package/daemon/dist/domain/workflow-reconciliation.js.map +1 -0
  365. package/daemon/dist/domain/workflow-role-context.d.ts +4 -6
  366. package/daemon/dist/domain/workflow-role-context.d.ts.map +1 -1
  367. package/daemon/dist/domain/workflow-role-context.js +7 -14
  368. package/daemon/dist/domain/workflow-role-context.js.map +1 -1
  369. package/daemon/dist/domain/workflow-runtime.d.ts +91 -5
  370. package/daemon/dist/domain/workflow-runtime.d.ts.map +1 -1
  371. package/daemon/dist/domain/workflow-runtime.js +163 -39
  372. package/daemon/dist/domain/workflow-runtime.js.map +1 -1
  373. package/daemon/dist/domain/workflow-validator.d.ts.map +1 -1
  374. package/daemon/dist/domain/workflow-validator.js +39 -24
  375. package/daemon/dist/domain/workflow-validator.js.map +1 -1
  376. package/daemon/dist/index.d.ts.map +1 -1
  377. package/daemon/dist/index.js +38 -96
  378. package/daemon/dist/index.js.map +1 -1
  379. package/daemon/dist/project-lifecycle-surface.d.ts +1 -1
  380. package/daemon/dist/project-lifecycle-surface.d.ts.map +1 -1
  381. package/daemon/dist/routes/activity.js +1 -1
  382. package/daemon/dist/routes/activity.js.map +1 -1
  383. package/daemon/dist/routes/config.d.ts +3 -1
  384. package/daemon/dist/routes/config.d.ts.map +1 -1
  385. package/daemon/dist/routes/config.js +11 -1
  386. package/daemon/dist/routes/config.js.map +1 -1
  387. package/daemon/dist/routes/gateway.d.ts.map +1 -1
  388. package/daemon/dist/routes/gateway.js +10 -0
  389. package/daemon/dist/routes/gateway.js.map +1 -1
  390. package/daemon/dist/routes/missions.d.ts.map +1 -1
  391. package/daemon/dist/routes/missions.js +5 -2
  392. package/daemon/dist/routes/missions.js.map +1 -1
  393. package/daemon/dist/routes/proof.d.ts +3 -0
  394. package/daemon/dist/routes/proof.d.ts.map +1 -0
  395. package/daemon/dist/routes/proof.js +65 -0
  396. package/daemon/dist/routes/proof.js.map +1 -0
  397. package/daemon/dist/routes/queue.d.ts.map +1 -1
  398. package/daemon/dist/routes/queue.js +4 -3
  399. package/daemon/dist/routes/queue.js.map +1 -1
  400. package/daemon/dist/routes/require-sender-identity.d.ts +3 -1
  401. package/daemon/dist/routes/require-sender-identity.d.ts.map +1 -1
  402. package/daemon/dist/routes/require-sender-identity.js +11 -5
  403. package/daemon/dist/routes/require-sender-identity.js.map +1 -1
  404. package/daemon/dist/routes/review.d.ts.map +1 -1
  405. package/daemon/dist/routes/review.js +3 -2
  406. package/daemon/dist/routes/review.js.map +1 -1
  407. package/daemon/dist/routes/rigs.d.ts.map +1 -1
  408. package/daemon/dist/routes/rigs.js +4 -3
  409. package/daemon/dist/routes/rigs.js.map +1 -1
  410. package/daemon/dist/routes/scopes.d.ts.map +1 -1
  411. package/daemon/dist/routes/scopes.js +15 -4
  412. package/daemon/dist/routes/scopes.js.map +1 -1
  413. package/daemon/dist/routes/seat.d.ts +4 -0
  414. package/daemon/dist/routes/seat.d.ts.map +1 -1
  415. package/daemon/dist/routes/seat.js +1 -1
  416. package/daemon/dist/routes/seat.js.map +1 -1
  417. package/daemon/dist/routes/sessions.d.ts.map +1 -1
  418. package/daemon/dist/routes/sessions.js +95 -27
  419. package/daemon/dist/routes/sessions.js.map +1 -1
  420. package/daemon/dist/routes/slices.d.ts.map +1 -1
  421. package/daemon/dist/routes/slices.js +8 -2
  422. package/daemon/dist/routes/slices.js.map +1 -1
  423. package/daemon/dist/routes/startup.d.ts +7 -0
  424. package/daemon/dist/routes/startup.d.ts.map +1 -0
  425. package/daemon/dist/routes/startup.js +221 -0
  426. package/daemon/dist/routes/startup.js.map +1 -0
  427. package/daemon/dist/routes/up.d.ts.map +1 -1
  428. package/daemon/dist/routes/up.js +2 -1
  429. package/daemon/dist/routes/up.js.map +1 -1
  430. package/daemon/dist/routes/workflow.d.ts.map +1 -1
  431. package/daemon/dist/routes/workflow.js +49 -3
  432. package/daemon/dist/routes/workflow.js.map +1 -1
  433. package/daemon/dist/server.d.ts +1 -0
  434. package/daemon/dist/server.d.ts.map +1 -1
  435. package/daemon/dist/server.js +7 -1
  436. package/daemon/dist/server.js.map +1 -1
  437. package/daemon/dist/startup.d.ts.map +1 -1
  438. package/daemon/dist/startup.js +21 -5
  439. package/daemon/dist/startup.js.map +1 -1
  440. package/daemon/docs/reference/agent-spec.md +7 -1
  441. package/daemon/docs/reference/getting-started.md +147 -30
  442. package/daemon/docs/reference/health-diagnosis.md +26 -0
  443. package/daemon/docs/reference/legacy-topology-migration.md +1 -2
  444. package/daemon/docs/reference/mission-install.md +10 -11
  445. package/daemon/docs/reference/planning-dial.md +12 -14
  446. package/daemon/docs/reference/project-release-profile.yaml +86 -0
  447. package/daemon/docs/reference/refocus-channel.md +1 -4
  448. package/daemon/docs/reference/release-boundary.md +38 -30
  449. package/daemon/docs/reference/rig-spec.md +49 -10
  450. package/daemon/docs/reference/sdlc-conventions.md +16 -5
  451. package/daemon/docs/reference/wave-sdlc.md +5 -16
  452. package/daemon/docs/reference/worktree-builds.md +3 -3
  453. package/daemon/policies/examples/my-cautious-dev.policy.md +1 -1
  454. package/daemon/specs/agents/conveyor/planner/guidance/role.md +5 -3
  455. package/daemon/specs/agents/conveyor/planner/startup/context.md +13 -4
  456. package/daemon/specs/agents/design/product-designer/agent.yaml +4 -3
  457. package/daemon/specs/agents/design/product-designer/guidance/role.md +12 -10
  458. package/daemon/specs/agents/product-management/pm/guidance/role.md +19 -17
  459. package/daemon/specs/agents/shared/skills/core/agent-starters/SKILL.md +21 -19
  460. package/daemon/specs/agents/shared/skills/core/agent-startup-and-context-ingestion/SKILL.md +11 -10
  461. package/daemon/specs/agents/shared/skills/core/cross-host-rig-commands/SKILL.md +84 -148
  462. package/daemon/specs/agents/shared/skills/core/openrig-architect/SKILL.md +40 -47
  463. package/daemon/specs/agents/shared/skills/core/openrig-upgrade/SKILL.md +16 -0
  464. package/daemon/specs/agents/shared/skills/core/session-source-fork/SKILL.md +12 -10
  465. package/daemon/specs/agents/shared/skills/core/topology-mutation-and-seat-management/SKILL.md +15 -13
  466. package/daemon/specs/agents/shared/skills/pm/exec-summary/SKILL.md +1 -1
  467. package/daemon/specs/agents/shared/skills/pm/plan-review/SKILL.md +2 -2
  468. package/daemon/specs/agents/shared/skills/pm/requirements-writer/SKILL.md +1 -1
  469. package/daemon/specs/agents/shared/skills/pm/ui-mockup/SKILL.md +3 -3
  470. package/daemon/specs/agents/shared/skills/pods/orchestration-team/SKILL.md +41 -59
  471. package/daemon/specs/agents/shared/skills/process/agent-browser/LOCAL-INSIGHTS.md +24 -53
  472. package/daemon/specs/agents/shared/skills/process/systematic-debugging/find-polluter.sh +29 -15
  473. package/daemon/specs/agents/shared/skills/process/test-driven-development/SKILL.md +47 -40
  474. package/daemon/specs/agents/shared/skills/process/verification-before-completion/SKILL.md +3 -3
  475. package/daemon/specs/rigs/launch/first-project/CULTURE.md +39 -0
  476. package/daemon/specs/rigs/launch/first-project/rig.yaml +31 -0
  477. package/daemon/specs/rigs/launch/kernel/agents/advisor/lead/startup/context.md +1 -1
  478. package/daemon/specs/rigs/launch/kernel/agents/operator/agent/guidance/role.md +24 -10
  479. package/daemon/specs/rigs/launch/kernel/agents/operator/agent/startup/context.md +11 -12
  480. package/daemon/specs/rigs/launch/kernel/agents/queue/worker/guidance/role.md +19 -11
  481. package/daemon/specs/rigs/launch/kernel/agents/queue/worker/startup/context.md +3 -2
  482. package/daemon/specs/rigs/launch/kernel/culture/CULTURE.md +15 -8
  483. package/daemon/specs/rigs/launch/kernel/rig-claude-only.yaml +7 -0
  484. package/daemon/specs/rigs/launch/kernel/rig-codex-only.yaml +7 -0
  485. package/daemon/specs/rigs/launch/kernel/rig.yaml +9 -4
  486. package/daemon/specs/rigs/preview/product-team/topology/seats/dev1-qa/CRAFT.md +6 -4
  487. package/dist/bin-wrapper.d.ts +1 -0
  488. package/dist/bin-wrapper.d.ts.map +1 -1
  489. package/dist/bin-wrapper.js +13 -0
  490. package/dist/bin-wrapper.js.map +1 -1
  491. package/dist/build-info.js +3 -3
  492. package/dist/client.d.ts +6 -20
  493. package/dist/client.d.ts.map +1 -1
  494. package/dist/client.js +53 -32
  495. package/dist/client.js.map +1 -1
  496. package/dist/commands/config.d.ts.map +1 -1
  497. package/dist/commands/config.js +1 -0
  498. package/dist/commands/config.js.map +1 -1
  499. package/dist/commands/context.d.ts.map +1 -1
  500. package/dist/commands/context.js +15 -13
  501. package/dist/commands/context.js.map +1 -1
  502. package/dist/commands/crash-cart.d.ts.map +1 -1
  503. package/dist/commands/crash-cart.js +20 -6
  504. package/dist/commands/crash-cart.js.map +1 -1
  505. package/dist/commands/daemon.d.ts.map +1 -1
  506. package/dist/commands/daemon.js +31 -27
  507. package/dist/commands/daemon.js.map +1 -1
  508. package/dist/commands/destroy.js +1 -1
  509. package/dist/commands/destroy.js.map +1 -1
  510. package/dist/commands/health.d.ts.map +1 -1
  511. package/dist/commands/health.js +59 -7
  512. package/dist/commands/health.js.map +1 -1
  513. package/dist/commands/launch.d.ts.map +1 -1
  514. package/dist/commands/launch.js +2 -2
  515. package/dist/commands/launch.js.map +1 -1
  516. package/dist/commands/proof.d.ts +2 -2
  517. package/dist/commands/proof.d.ts.map +1 -1
  518. package/dist/commands/proof.js +84 -4
  519. package/dist/commands/proof.js.map +1 -1
  520. package/dist/commands/queue.d.ts.map +1 -1
  521. package/dist/commands/queue.js +10 -6
  522. package/dist/commands/queue.js.map +1 -1
  523. package/dist/commands/send.d.ts.map +1 -1
  524. package/dist/commands/send.js +4 -8
  525. package/dist/commands/send.js.map +1 -1
  526. package/dist/commands/setup.d.ts.map +1 -1
  527. package/dist/commands/setup.js +10 -9
  528. package/dist/commands/setup.js.map +1 -1
  529. package/dist/commands/tui.d.ts +2 -0
  530. package/dist/commands/tui.d.ts.map +1 -1
  531. package/dist/commands/tui.js +26 -10
  532. package/dist/commands/tui.js.map +1 -1
  533. package/dist/commands/walk.d.ts.map +1 -1
  534. package/dist/commands/walk.js +24 -48
  535. package/dist/commands/walk.js.map +1 -1
  536. package/dist/commands/workflow-render.d.ts +69 -0
  537. package/dist/commands/workflow-render.d.ts.map +1 -1
  538. package/dist/commands/workflow-render.js +53 -1
  539. package/dist/commands/workflow-render.js.map +1 -1
  540. package/dist/commands/workflow.d.ts.map +1 -1
  541. package/dist/commands/workflow.js +110 -7
  542. package/dist/commands/workflow.js.map +1 -1
  543. package/dist/config-store.d.ts +2 -1
  544. package/dist/config-store.d.ts.map +1 -1
  545. package/dist/config-store.js +15 -0
  546. package/dist/config-store.js.map +1 -1
  547. package/dist/cross-host-executor.d.ts +1 -1
  548. package/dist/cross-host-executor.js +2 -2
  549. package/dist/cross-host-executor.js.map +1 -1
  550. package/dist/daemon-lifecycle.d.ts +8 -11
  551. package/dist/daemon-lifecycle.d.ts.map +1 -1
  552. package/dist/daemon-lifecycle.js +281 -146
  553. package/dist/daemon-lifecycle.js.map +1 -1
  554. package/dist/daemon-start-lock.d.ts +9 -0
  555. package/dist/daemon-start-lock.d.ts.map +1 -0
  556. package/dist/daemon-start-lock.js +47 -0
  557. package/dist/daemon-start-lock.js.map +1 -0
  558. package/dist/front-door.d.ts.map +1 -1
  559. package/dist/front-door.js +11 -1
  560. package/dist/front-door.js.map +1 -1
  561. package/dist/lib/file-transfer.js +1 -1
  562. package/dist/lib/file-transfer.js.map +1 -1
  563. package/dist/lib/walk-consumption.d.ts +6 -0
  564. package/dist/lib/walk-consumption.d.ts.map +1 -0
  565. package/dist/lib/walk-consumption.js +78 -0
  566. package/dist/lib/walk-consumption.js.map +1 -0
  567. package/dist/local-origin.d.ts +3 -0
  568. package/dist/local-origin.d.ts.map +1 -0
  569. package/dist/local-origin.js +37 -0
  570. package/dist/local-origin.js.map +1 -0
  571. package/dist/read-view.d.ts +17 -0
  572. package/dist/read-view.d.ts.map +1 -0
  573. package/dist/read-view.js +17 -0
  574. package/dist/read-view.js.map +1 -0
  575. package/dist/shared-tui.d.ts +12 -0
  576. package/dist/shared-tui.d.ts.map +1 -0
  577. package/dist/shared-tui.js +37 -0
  578. package/dist/shared-tui.js.map +1 -0
  579. package/node_modules/@openrig/daemon/dist/adapters/codex-resume.d.ts +1 -0
  580. package/node_modules/@openrig/daemon/dist/adapters/codex-resume.d.ts.map +1 -1
  581. package/node_modules/@openrig/daemon/dist/adapters/codex-resume.js +2 -9
  582. package/node_modules/@openrig/daemon/dist/adapters/codex-resume.js.map +1 -1
  583. package/node_modules/@openrig/daemon/dist/adapters/codex-runtime-adapter.d.ts +7 -3
  584. package/node_modules/@openrig/daemon/dist/adapters/codex-runtime-adapter.d.ts.map +1 -1
  585. package/node_modules/@openrig/daemon/dist/adapters/codex-runtime-adapter.js +26 -30
  586. package/node_modules/@openrig/daemon/dist/adapters/codex-runtime-adapter.js.map +1 -1
  587. package/node_modules/@openrig/daemon/dist/adapters/tmux.d.ts +22 -10
  588. package/node_modules/@openrig/daemon/dist/adapters/tmux.d.ts.map +1 -1
  589. package/node_modules/@openrig/daemon/dist/adapters/tmux.js +71 -36
  590. package/node_modules/@openrig/daemon/dist/adapters/tmux.js.map +1 -1
  591. package/node_modules/@openrig/daemon/dist/build-info.js +3 -3
  592. package/node_modules/@openrig/daemon/dist/daemon-shutdown.d.ts +27 -0
  593. package/node_modules/@openrig/daemon/dist/daemon-shutdown.d.ts.map +1 -0
  594. package/node_modules/@openrig/daemon/dist/daemon-shutdown.js +84 -0
  595. package/node_modules/@openrig/daemon/dist/daemon-shutdown.js.map +1 -0
  596. package/node_modules/@openrig/daemon/dist/domain/active-occupant.d.ts +2 -2
  597. package/node_modules/@openrig/daemon/dist/domain/active-occupant.d.ts.map +1 -1
  598. package/node_modules/@openrig/daemon/dist/domain/active-occupant.js +5 -5
  599. package/node_modules/@openrig/daemon/dist/domain/active-occupant.js.map +1 -1
  600. package/node_modules/@openrig/daemon/dist/domain/codex-thread-id.d.ts +1 -0
  601. package/node_modules/@openrig/daemon/dist/domain/codex-thread-id.d.ts.map +1 -1
  602. package/node_modules/@openrig/daemon/dist/domain/codex-thread-id.js +32 -23
  603. package/node_modules/@openrig/daemon/dist/domain/codex-thread-id.js.map +1 -1
  604. package/node_modules/@openrig/daemon/dist/domain/context-usage-store.d.ts +2 -0
  605. package/node_modules/@openrig/daemon/dist/domain/context-usage-store.d.ts.map +1 -1
  606. package/node_modules/@openrig/daemon/dist/domain/context-usage-store.js +7 -28
  607. package/node_modules/@openrig/daemon/dist/domain/context-usage-store.js.map +1 -1
  608. package/node_modules/@openrig/daemon/dist/domain/crash-cart-conductor.js +1 -1
  609. package/node_modules/@openrig/daemon/dist/domain/crash-cart-conductor.js.map +1 -1
  610. package/node_modules/@openrig/daemon/dist/domain/crash-cart-discovery.d.ts +3 -1
  611. package/node_modules/@openrig/daemon/dist/domain/crash-cart-discovery.d.ts.map +1 -1
  612. package/node_modules/@openrig/daemon/dist/domain/crash-cart-discovery.js +15 -4
  613. package/node_modules/@openrig/daemon/dist/domain/crash-cart-discovery.js.map +1 -1
  614. package/node_modules/@openrig/daemon/dist/domain/execution-view.d.ts.map +1 -1
  615. package/node_modules/@openrig/daemon/dist/domain/execution-view.js +68 -5
  616. package/node_modules/@openrig/daemon/dist/domain/execution-view.js.map +1 -1
  617. package/node_modules/@openrig/daemon/dist/domain/fresh-occupant-relation.d.ts +8 -0
  618. package/node_modules/@openrig/daemon/dist/domain/fresh-occupant-relation.d.ts.map +1 -0
  619. package/node_modules/@openrig/daemon/dist/domain/fresh-occupant-relation.js +31 -0
  620. package/node_modules/@openrig/daemon/dist/domain/fresh-occupant-relation.js.map +1 -0
  621. package/node_modules/@openrig/daemon/dist/domain/gateway/channel-operations.d.ts +1 -1
  622. package/node_modules/@openrig/daemon/dist/domain/gateway/channel-operations.d.ts.map +1 -1
  623. package/node_modules/@openrig/daemon/dist/domain/gateway/connections-projection.d.ts +90 -0
  624. package/node_modules/@openrig/daemon/dist/domain/gateway/connections-projection.d.ts.map +1 -0
  625. package/node_modules/@openrig/daemon/dist/domain/gateway/connections-projection.js +171 -0
  626. package/node_modules/@openrig/daemon/dist/domain/gateway/connections-projection.js.map +1 -0
  627. package/node_modules/@openrig/daemon/dist/domain/gateway/human-registry.d.ts +3 -1
  628. package/node_modules/@openrig/daemon/dist/domain/gateway/human-registry.d.ts.map +1 -1
  629. package/node_modules/@openrig/daemon/dist/domain/gateway/human-registry.js +3 -1
  630. package/node_modules/@openrig/daemon/dist/domain/gateway/human-registry.js.map +1 -1
  631. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-subsystem.d.ts.map +1 -1
  632. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-subsystem.js +3 -2
  633. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-subsystem.js.map +1 -1
  634. package/node_modules/@openrig/daemon/dist/domain/health-diagnosis.js +1 -1
  635. package/node_modules/@openrig/daemon/dist/domain/health-diagnosis.js.map +1 -1
  636. package/node_modules/@openrig/daemon/dist/domain/kernel-boot.d.ts +2 -0
  637. package/node_modules/@openrig/daemon/dist/domain/kernel-boot.d.ts.map +1 -1
  638. package/node_modules/@openrig/daemon/dist/domain/kernel-boot.js +1 -1
  639. package/node_modules/@openrig/daemon/dist/domain/kernel-boot.js.map +1 -1
  640. package/node_modules/@openrig/daemon/dist/domain/lifecycle-obligations.d.ts +18 -0
  641. package/node_modules/@openrig/daemon/dist/domain/lifecycle-obligations.d.ts.map +1 -0
  642. package/node_modules/@openrig/daemon/dist/domain/lifecycle-obligations.js +35 -0
  643. package/node_modules/@openrig/daemon/dist/domain/lifecycle-obligations.js.map +1 -0
  644. package/node_modules/@openrig/daemon/dist/domain/model-divergence/current-generation-record.d.ts.map +1 -1
  645. package/node_modules/@openrig/daemon/dist/domain/model-divergence/current-generation-record.js +6 -1
  646. package/node_modules/@openrig/daemon/dist/domain/model-divergence/current-generation-record.js.map +1 -1
  647. package/node_modules/@openrig/daemon/dist/domain/native-resume-probe.d.ts.map +1 -1
  648. package/node_modules/@openrig/daemon/dist/domain/native-resume-probe.js +35 -23
  649. package/node_modules/@openrig/daemon/dist/domain/native-resume-probe.js.map +1 -1
  650. package/node_modules/@openrig/daemon/dist/domain/parked-query.d.ts +1 -0
  651. package/node_modules/@openrig/daemon/dist/domain/parked-query.d.ts.map +1 -1
  652. package/node_modules/@openrig/daemon/dist/domain/parked-query.js +2 -1
  653. package/node_modules/@openrig/daemon/dist/domain/parked-query.js.map +1 -1
  654. package/node_modules/@openrig/daemon/dist/domain/policies/parked-owner-consumer.d.ts +2 -0
  655. package/node_modules/@openrig/daemon/dist/domain/policies/parked-owner-consumer.d.ts.map +1 -1
  656. package/node_modules/@openrig/daemon/dist/domain/policies/parked-owner-consumer.js +2 -2
  657. package/node_modules/@openrig/daemon/dist/domain/policies/parked-owner-consumer.js.map +1 -1
  658. package/node_modules/@openrig/daemon/dist/domain/policies/workflow-keepalive.d.ts +1 -0
  659. package/node_modules/@openrig/daemon/dist/domain/policies/workflow-keepalive.d.ts.map +1 -1
  660. package/node_modules/@openrig/daemon/dist/domain/policies/workflow-keepalive.js +19 -9
  661. package/node_modules/@openrig/daemon/dist/domain/policies/workflow-keepalive.js.map +1 -1
  662. package/node_modules/@openrig/daemon/dist/domain/project-lifecycle-compiler.d.ts +9 -0
  663. package/node_modules/@openrig/daemon/dist/domain/project-lifecycle-compiler.d.ts.map +1 -1
  664. package/node_modules/@openrig/daemon/dist/domain/project-lifecycle-compiler.js +121 -23
  665. package/node_modules/@openrig/daemon/dist/domain/project-lifecycle-compiler.js.map +1 -1
  666. package/node_modules/@openrig/daemon/dist/domain/proof/judgments.d.ts +138 -0
  667. package/node_modules/@openrig/daemon/dist/domain/proof/judgments.d.ts.map +1 -0
  668. package/node_modules/@openrig/daemon/dist/domain/proof/judgments.js +361 -0
  669. package/node_modules/@openrig/daemon/dist/domain/proof/judgments.js.map +1 -0
  670. package/node_modules/@openrig/daemon/dist/domain/proof/source-watch.d.ts +17 -0
  671. package/node_modules/@openrig/daemon/dist/domain/proof/source-watch.d.ts.map +1 -0
  672. package/node_modules/@openrig/daemon/dist/domain/proof/source-watch.js +60 -0
  673. package/node_modules/@openrig/daemon/dist/domain/proof/source-watch.js.map +1 -0
  674. package/node_modules/@openrig/daemon/dist/domain/queue-owner.d.ts +12 -0
  675. package/node_modules/@openrig/daemon/dist/domain/queue-owner.d.ts.map +1 -0
  676. package/node_modules/@openrig/daemon/dist/domain/queue-owner.js +28 -0
  677. package/node_modules/@openrig/daemon/dist/domain/queue-owner.js.map +1 -0
  678. package/node_modules/@openrig/daemon/dist/domain/queue-pickup.d.ts +3 -0
  679. package/node_modules/@openrig/daemon/dist/domain/queue-pickup.d.ts.map +1 -1
  680. package/node_modules/@openrig/daemon/dist/domain/queue-pickup.js +14 -15
  681. package/node_modules/@openrig/daemon/dist/domain/queue-pickup.js.map +1 -1
  682. package/node_modules/@openrig/daemon/dist/domain/queue-recovery.d.ts +10 -0
  683. package/node_modules/@openrig/daemon/dist/domain/queue-recovery.d.ts.map +1 -0
  684. package/node_modules/@openrig/daemon/dist/domain/queue-recovery.js +27 -0
  685. package/node_modules/@openrig/daemon/dist/domain/queue-recovery.js.map +1 -0
  686. package/node_modules/@openrig/daemon/dist/domain/queue-repository.d.ts +13 -6
  687. package/node_modules/@openrig/daemon/dist/domain/queue-repository.d.ts.map +1 -1
  688. package/node_modules/@openrig/daemon/dist/domain/queue-repository.js +177 -63
  689. package/node_modules/@openrig/daemon/dist/domain/queue-repository.js.map +1 -1
  690. package/node_modules/@openrig/daemon/dist/domain/queue-stuck-sweep.d.ts +2 -11
  691. package/node_modules/@openrig/daemon/dist/domain/queue-stuck-sweep.d.ts.map +1 -1
  692. package/node_modules/@openrig/daemon/dist/domain/queue-stuck-sweep.js +52 -52
  693. package/node_modules/@openrig/daemon/dist/domain/queue-stuck-sweep.js.map +1 -1
  694. package/node_modules/@openrig/daemon/dist/domain/queue-wait-backoff.d.ts +29 -2
  695. package/node_modules/@openrig/daemon/dist/domain/queue-wait-backoff.d.ts.map +1 -1
  696. package/node_modules/@openrig/daemon/dist/domain/queue-wait-backoff.js +73 -14
  697. package/node_modules/@openrig/daemon/dist/domain/queue-wait-backoff.js.map +1 -1
  698. package/node_modules/@openrig/daemon/dist/domain/queue-waiting.d.ts +61 -0
  699. package/node_modules/@openrig/daemon/dist/domain/queue-waiting.d.ts.map +1 -0
  700. package/node_modules/@openrig/daemon/dist/domain/queue-waiting.js +108 -0
  701. package/node_modules/@openrig/daemon/dist/domain/queue-waiting.js.map +1 -0
  702. package/node_modules/@openrig/daemon/dist/domain/queue-wake-ladder.d.ts +9 -0
  703. package/node_modules/@openrig/daemon/dist/domain/queue-wake-ladder.d.ts.map +1 -1
  704. package/node_modules/@openrig/daemon/dist/domain/queue-wake-ladder.js +122 -62
  705. package/node_modules/@openrig/daemon/dist/domain/queue-wake-ladder.js.map +1 -1
  706. package/node_modules/@openrig/daemon/dist/domain/queue-wake-repository.d.ts +2 -0
  707. package/node_modules/@openrig/daemon/dist/domain/queue-wake-repository.d.ts.map +1 -1
  708. package/node_modules/@openrig/daemon/dist/domain/queue-wake-repository.js +1 -0
  709. package/node_modules/@openrig/daemon/dist/domain/queue-wake-repository.js.map +1 -1
  710. package/node_modules/@openrig/daemon/dist/domain/rehydrate-eligibility.d.ts.map +1 -1
  711. package/node_modules/@openrig/daemon/dist/domain/rehydrate-eligibility.js +5 -3
  712. package/node_modules/@openrig/daemon/dist/domain/rehydrate-eligibility.js.map +1 -1
  713. package/node_modules/@openrig/daemon/dist/domain/restore-orchestrator.d.ts.map +1 -1
  714. package/node_modules/@openrig/daemon/dist/domain/restore-orchestrator.js +1 -0
  715. package/node_modules/@openrig/daemon/dist/domain/restore-orchestrator.js.map +1 -1
  716. package/node_modules/@openrig/daemon/dist/domain/restore-plan-preview.d.ts +7 -4
  717. package/node_modules/@openrig/daemon/dist/domain/restore-plan-preview.d.ts.map +1 -1
  718. package/node_modules/@openrig/daemon/dist/domain/restore-plan-preview.js +12 -6
  719. package/node_modules/@openrig/daemon/dist/domain/restore-plan-preview.js.map +1 -1
  720. package/node_modules/@openrig/daemon/dist/domain/review/compose.d.ts +9 -1
  721. package/node_modules/@openrig/daemon/dist/domain/review/compose.d.ts.map +1 -1
  722. package/node_modules/@openrig/daemon/dist/domain/review/compose.js +26 -7
  723. package/node_modules/@openrig/daemon/dist/domain/review/compose.js.map +1 -1
  724. package/node_modules/@openrig/daemon/dist/domain/review/gather.d.ts.map +1 -1
  725. package/node_modules/@openrig/daemon/dist/domain/review/gather.js +3 -0
  726. package/node_modules/@openrig/daemon/dist/domain/review/gather.js.map +1 -1
  727. package/node_modules/@openrig/daemon/dist/domain/review/types.d.ts +2 -0
  728. package/node_modules/@openrig/daemon/dist/domain/review/types.d.ts.map +1 -1
  729. package/node_modules/@openrig/daemon/dist/domain/runtime-adapter.d.ts.map +1 -1
  730. package/node_modules/@openrig/daemon/dist/domain/runtime-adapter.js +1 -0
  731. package/node_modules/@openrig/daemon/dist/domain/runtime-adapter.js.map +1 -1
  732. package/node_modules/@openrig/daemon/dist/domain/scope/scope-view-projection.d.ts +8 -0
  733. package/node_modules/@openrig/daemon/dist/domain/scope/scope-view-projection.d.ts.map +1 -1
  734. package/node_modules/@openrig/daemon/dist/domain/scope/scope-view-projection.js +6 -25
  735. package/node_modules/@openrig/daemon/dist/domain/scope/scope-view-projection.js.map +1 -1
  736. package/node_modules/@openrig/daemon/dist/domain/seat-lifecycle-service.d.ts +21 -0
  737. package/node_modules/@openrig/daemon/dist/domain/seat-lifecycle-service.d.ts.map +1 -1
  738. package/node_modules/@openrig/daemon/dist/domain/seat-lifecycle-service.js +55 -2
  739. package/node_modules/@openrig/daemon/dist/domain/seat-lifecycle-service.js.map +1 -1
  740. package/node_modules/@openrig/daemon/dist/domain/slices/slice-detail-projector.d.ts +2 -0
  741. package/node_modules/@openrig/daemon/dist/domain/slices/slice-detail-projector.d.ts.map +1 -1
  742. package/node_modules/@openrig/daemon/dist/domain/slices/slice-detail-projector.js +11 -4
  743. package/node_modules/@openrig/daemon/dist/domain/slices/slice-detail-projector.js.map +1 -1
  744. package/node_modules/@openrig/daemon/dist/domain/slices/slice-indexer.d.ts +2 -0
  745. package/node_modules/@openrig/daemon/dist/domain/slices/slice-indexer.d.ts.map +1 -1
  746. package/node_modules/@openrig/daemon/dist/domain/slices/slice-indexer.js +26 -0
  747. package/node_modules/@openrig/daemon/dist/domain/slices/slice-indexer.js.map +1 -1
  748. package/node_modules/@openrig/daemon/dist/domain/snapshot-capture.d.ts.map +1 -1
  749. package/node_modules/@openrig/daemon/dist/domain/snapshot-capture.js +4 -2
  750. package/node_modules/@openrig/daemon/dist/domain/snapshot-capture.js.map +1 -1
  751. package/node_modules/@openrig/daemon/dist/domain/startup-orchestrator.d.ts +11 -0
  752. package/node_modules/@openrig/daemon/dist/domain/startup-orchestrator.d.ts.map +1 -1
  753. package/node_modules/@openrig/daemon/dist/domain/startup-orchestrator.js +69 -20
  754. package/node_modules/@openrig/daemon/dist/domain/startup-orchestrator.js.map +1 -1
  755. package/node_modules/@openrig/daemon/dist/domain/startup-proof.d.ts.map +1 -1
  756. package/node_modules/@openrig/daemon/dist/domain/startup-proof.js +10 -9
  757. package/node_modules/@openrig/daemon/dist/domain/startup-proof.js.map +1 -1
  758. package/node_modules/@openrig/daemon/dist/domain/startup-resolver.d.ts +3 -1
  759. package/node_modules/@openrig/daemon/dist/domain/startup-resolver.d.ts.map +1 -1
  760. package/node_modules/@openrig/daemon/dist/domain/startup-resolver.js +18 -0
  761. package/node_modules/@openrig/daemon/dist/domain/startup-resolver.js.map +1 -1
  762. package/node_modules/@openrig/daemon/dist/domain/startup-validation.d.ts.map +1 -1
  763. package/node_modules/@openrig/daemon/dist/domain/startup-validation.js +12 -1
  764. package/node_modules/@openrig/daemon/dist/domain/startup-validation.js.map +1 -1
  765. package/node_modules/@openrig/daemon/dist/domain/types.d.ts +26 -1
  766. package/node_modules/@openrig/daemon/dist/domain/types.d.ts.map +1 -1
  767. package/node_modules/@openrig/daemon/dist/domain/types.js.map +1 -1
  768. package/node_modules/@openrig/daemon/dist/domain/user-settings/settings-browser.d.ts +33 -0
  769. package/node_modules/@openrig/daemon/dist/domain/user-settings/settings-browser.d.ts.map +1 -0
  770. package/node_modules/@openrig/daemon/dist/domain/user-settings/settings-browser.js +261 -0
  771. package/node_modules/@openrig/daemon/dist/domain/user-settings/settings-browser.js.map +1 -0
  772. package/node_modules/@openrig/daemon/dist/domain/user-settings/settings-store.d.ts +1 -1
  773. package/node_modules/@openrig/daemon/dist/domain/user-settings/settings-store.d.ts.map +1 -1
  774. package/node_modules/@openrig/daemon/dist/domain/user-settings/settings-store.js +14 -0
  775. package/node_modules/@openrig/daemon/dist/domain/user-settings/settings-store.js.map +1 -1
  776. package/node_modules/@openrig/daemon/dist/domain/view-event-bridge.d.ts.map +1 -1
  777. package/node_modules/@openrig/daemon/dist/domain/view-event-bridge.js +2 -0
  778. package/node_modules/@openrig/daemon/dist/domain/view-event-bridge.js.map +1 -1
  779. package/node_modules/@openrig/daemon/dist/domain/view-projector.d.ts.map +1 -1
  780. package/node_modules/@openrig/daemon/dist/domain/view-projector.js +4 -0
  781. package/node_modules/@openrig/daemon/dist/domain/view-projector.js.map +1 -1
  782. package/node_modules/@openrig/daemon/dist/domain/watchdog-policy-engine.d.ts +4 -0
  783. package/node_modules/@openrig/daemon/dist/domain/watchdog-policy-engine.d.ts.map +1 -1
  784. package/node_modules/@openrig/daemon/dist/domain/watchdog-policy-engine.js +8 -1
  785. package/node_modules/@openrig/daemon/dist/domain/watchdog-policy-engine.js.map +1 -1
  786. package/node_modules/@openrig/daemon/dist/domain/watchdog-scheduler.d.ts +3 -0
  787. package/node_modules/@openrig/daemon/dist/domain/watchdog-scheduler.d.ts.map +1 -1
  788. package/node_modules/@openrig/daemon/dist/domain/watchdog-scheduler.js +3 -0
  789. package/node_modules/@openrig/daemon/dist/domain/watchdog-scheduler.js.map +1 -1
  790. package/node_modules/@openrig/daemon/dist/domain/workflow-boot-sweep.d.ts +1 -0
  791. package/node_modules/@openrig/daemon/dist/domain/workflow-boot-sweep.d.ts.map +1 -1
  792. package/node_modules/@openrig/daemon/dist/domain/workflow-boot-sweep.js +3 -0
  793. package/node_modules/@openrig/daemon/dist/domain/workflow-boot-sweep.js.map +1 -1
  794. package/node_modules/@openrig/daemon/dist/domain/workflow-exception-escalation.d.ts +4 -3
  795. package/node_modules/@openrig/daemon/dist/domain/workflow-exception-escalation.d.ts.map +1 -1
  796. package/node_modules/@openrig/daemon/dist/domain/workflow-exception-escalation.js +32 -50
  797. package/node_modules/@openrig/daemon/dist/domain/workflow-exception-escalation.js.map +1 -1
  798. package/node_modules/@openrig/daemon/dist/domain/workflow-exception-readiness.d.ts +39 -0
  799. package/node_modules/@openrig/daemon/dist/domain/workflow-exception-readiness.d.ts.map +1 -0
  800. package/node_modules/@openrig/daemon/dist/domain/workflow-exception-readiness.js +77 -0
  801. package/node_modules/@openrig/daemon/dist/domain/workflow-exception-readiness.js.map +1 -0
  802. package/node_modules/@openrig/daemon/dist/domain/workflow-exception-router.d.ts +7 -3
  803. package/node_modules/@openrig/daemon/dist/domain/workflow-exception-router.d.ts.map +1 -1
  804. package/node_modules/@openrig/daemon/dist/domain/workflow-exception-router.js +13 -7
  805. package/node_modules/@openrig/daemon/dist/domain/workflow-exception-router.js.map +1 -1
  806. package/node_modules/@openrig/daemon/dist/domain/workflow-exception.d.ts +6 -0
  807. package/node_modules/@openrig/daemon/dist/domain/workflow-exception.d.ts.map +1 -1
  808. package/node_modules/@openrig/daemon/dist/domain/workflow-exception.js +10 -3
  809. package/node_modules/@openrig/daemon/dist/domain/workflow-exception.js.map +1 -1
  810. package/node_modules/@openrig/daemon/dist/domain/workflow-guidance.d.ts +53 -0
  811. package/node_modules/@openrig/daemon/dist/domain/workflow-guidance.d.ts.map +1 -0
  812. package/node_modules/@openrig/daemon/dist/domain/workflow-guidance.js +212 -0
  813. package/node_modules/@openrig/daemon/dist/domain/workflow-guidance.js.map +1 -0
  814. package/node_modules/@openrig/daemon/dist/domain/workflow-human-destination.d.ts +18 -0
  815. package/node_modules/@openrig/daemon/dist/domain/workflow-human-destination.d.ts.map +1 -0
  816. package/node_modules/@openrig/daemon/dist/domain/workflow-human-destination.js +40 -0
  817. package/node_modules/@openrig/daemon/dist/domain/workflow-human-destination.js.map +1 -0
  818. package/node_modules/@openrig/daemon/dist/domain/workflow-instance-store.d.ts +2 -0
  819. package/node_modules/@openrig/daemon/dist/domain/workflow-instance-store.d.ts.map +1 -1
  820. package/node_modules/@openrig/daemon/dist/domain/workflow-instance-store.js +7 -0
  821. package/node_modules/@openrig/daemon/dist/domain/workflow-instance-store.js.map +1 -1
  822. package/node_modules/@openrig/daemon/dist/domain/workflow-planning-context.d.ts +3 -0
  823. package/node_modules/@openrig/daemon/dist/domain/workflow-planning-context.d.ts.map +1 -0
  824. package/node_modules/@openrig/daemon/dist/domain/workflow-planning-context.js +36 -0
  825. package/node_modules/@openrig/daemon/dist/domain/workflow-planning-context.js.map +1 -0
  826. package/node_modules/@openrig/daemon/dist/domain/workflow-projector.d.ts +15 -5
  827. package/node_modules/@openrig/daemon/dist/domain/workflow-projector.d.ts.map +1 -1
  828. package/node_modules/@openrig/daemon/dist/domain/workflow-projector.js +97 -78
  829. package/node_modules/@openrig/daemon/dist/domain/workflow-projector.js.map +1 -1
  830. package/node_modules/@openrig/daemon/dist/domain/workflow-reconciliation.d.ts +55 -0
  831. package/node_modules/@openrig/daemon/dist/domain/workflow-reconciliation.d.ts.map +1 -0
  832. package/node_modules/@openrig/daemon/dist/domain/workflow-reconciliation.js +228 -0
  833. package/node_modules/@openrig/daemon/dist/domain/workflow-reconciliation.js.map +1 -0
  834. package/node_modules/@openrig/daemon/dist/domain/workflow-role-context.d.ts +4 -6
  835. package/node_modules/@openrig/daemon/dist/domain/workflow-role-context.d.ts.map +1 -1
  836. package/node_modules/@openrig/daemon/dist/domain/workflow-role-context.js +7 -14
  837. package/node_modules/@openrig/daemon/dist/domain/workflow-role-context.js.map +1 -1
  838. package/node_modules/@openrig/daemon/dist/domain/workflow-runtime.d.ts +91 -5
  839. package/node_modules/@openrig/daemon/dist/domain/workflow-runtime.d.ts.map +1 -1
  840. package/node_modules/@openrig/daemon/dist/domain/workflow-runtime.js +163 -39
  841. package/node_modules/@openrig/daemon/dist/domain/workflow-runtime.js.map +1 -1
  842. package/node_modules/@openrig/daemon/dist/domain/workflow-validator.d.ts.map +1 -1
  843. package/node_modules/@openrig/daemon/dist/domain/workflow-validator.js +39 -24
  844. package/node_modules/@openrig/daemon/dist/domain/workflow-validator.js.map +1 -1
  845. package/node_modules/@openrig/daemon/dist/index.d.ts.map +1 -1
  846. package/node_modules/@openrig/daemon/dist/index.js +38 -96
  847. package/node_modules/@openrig/daemon/dist/index.js.map +1 -1
  848. package/node_modules/@openrig/daemon/dist/project-lifecycle-surface.d.ts +1 -1
  849. package/node_modules/@openrig/daemon/dist/project-lifecycle-surface.d.ts.map +1 -1
  850. package/node_modules/@openrig/daemon/dist/routes/activity.js +1 -1
  851. package/node_modules/@openrig/daemon/dist/routes/activity.js.map +1 -1
  852. package/node_modules/@openrig/daemon/dist/routes/config.d.ts +3 -1
  853. package/node_modules/@openrig/daemon/dist/routes/config.d.ts.map +1 -1
  854. package/node_modules/@openrig/daemon/dist/routes/config.js +11 -1
  855. package/node_modules/@openrig/daemon/dist/routes/config.js.map +1 -1
  856. package/node_modules/@openrig/daemon/dist/routes/gateway.d.ts.map +1 -1
  857. package/node_modules/@openrig/daemon/dist/routes/gateway.js +10 -0
  858. package/node_modules/@openrig/daemon/dist/routes/gateway.js.map +1 -1
  859. package/node_modules/@openrig/daemon/dist/routes/missions.d.ts.map +1 -1
  860. package/node_modules/@openrig/daemon/dist/routes/missions.js +5 -2
  861. package/node_modules/@openrig/daemon/dist/routes/missions.js.map +1 -1
  862. package/node_modules/@openrig/daemon/dist/routes/proof.d.ts +3 -0
  863. package/node_modules/@openrig/daemon/dist/routes/proof.d.ts.map +1 -0
  864. package/node_modules/@openrig/daemon/dist/routes/proof.js +65 -0
  865. package/node_modules/@openrig/daemon/dist/routes/proof.js.map +1 -0
  866. package/node_modules/@openrig/daemon/dist/routes/queue.d.ts.map +1 -1
  867. package/node_modules/@openrig/daemon/dist/routes/queue.js +4 -3
  868. package/node_modules/@openrig/daemon/dist/routes/queue.js.map +1 -1
  869. package/node_modules/@openrig/daemon/dist/routes/require-sender-identity.d.ts +3 -1
  870. package/node_modules/@openrig/daemon/dist/routes/require-sender-identity.d.ts.map +1 -1
  871. package/node_modules/@openrig/daemon/dist/routes/require-sender-identity.js +11 -5
  872. package/node_modules/@openrig/daemon/dist/routes/require-sender-identity.js.map +1 -1
  873. package/node_modules/@openrig/daemon/dist/routes/review.d.ts.map +1 -1
  874. package/node_modules/@openrig/daemon/dist/routes/review.js +3 -2
  875. package/node_modules/@openrig/daemon/dist/routes/review.js.map +1 -1
  876. package/node_modules/@openrig/daemon/dist/routes/rigs.d.ts.map +1 -1
  877. package/node_modules/@openrig/daemon/dist/routes/rigs.js +4 -3
  878. package/node_modules/@openrig/daemon/dist/routes/rigs.js.map +1 -1
  879. package/node_modules/@openrig/daemon/dist/routes/scopes.d.ts.map +1 -1
  880. package/node_modules/@openrig/daemon/dist/routes/scopes.js +15 -4
  881. package/node_modules/@openrig/daemon/dist/routes/scopes.js.map +1 -1
  882. package/node_modules/@openrig/daemon/dist/routes/seat.d.ts +4 -0
  883. package/node_modules/@openrig/daemon/dist/routes/seat.d.ts.map +1 -1
  884. package/node_modules/@openrig/daemon/dist/routes/seat.js +1 -1
  885. package/node_modules/@openrig/daemon/dist/routes/seat.js.map +1 -1
  886. package/node_modules/@openrig/daemon/dist/routes/sessions.d.ts.map +1 -1
  887. package/node_modules/@openrig/daemon/dist/routes/sessions.js +95 -27
  888. package/node_modules/@openrig/daemon/dist/routes/sessions.js.map +1 -1
  889. package/node_modules/@openrig/daemon/dist/routes/slices.d.ts.map +1 -1
  890. package/node_modules/@openrig/daemon/dist/routes/slices.js +8 -2
  891. package/node_modules/@openrig/daemon/dist/routes/slices.js.map +1 -1
  892. package/node_modules/@openrig/daemon/dist/routes/startup.d.ts +7 -0
  893. package/node_modules/@openrig/daemon/dist/routes/startup.d.ts.map +1 -0
  894. package/node_modules/@openrig/daemon/dist/routes/startup.js +221 -0
  895. package/node_modules/@openrig/daemon/dist/routes/startup.js.map +1 -0
  896. package/node_modules/@openrig/daemon/dist/routes/up.d.ts.map +1 -1
  897. package/node_modules/@openrig/daemon/dist/routes/up.js +2 -1
  898. package/node_modules/@openrig/daemon/dist/routes/up.js.map +1 -1
  899. package/node_modules/@openrig/daemon/dist/routes/workflow.d.ts.map +1 -1
  900. package/node_modules/@openrig/daemon/dist/routes/workflow.js +49 -3
  901. package/node_modules/@openrig/daemon/dist/routes/workflow.js.map +1 -1
  902. package/node_modules/@openrig/daemon/dist/server.d.ts +1 -0
  903. package/node_modules/@openrig/daemon/dist/server.d.ts.map +1 -1
  904. package/node_modules/@openrig/daemon/dist/server.js +7 -1
  905. package/node_modules/@openrig/daemon/dist/server.js.map +1 -1
  906. package/node_modules/@openrig/daemon/dist/startup.d.ts.map +1 -1
  907. package/node_modules/@openrig/daemon/dist/startup.js +21 -5
  908. package/node_modules/@openrig/daemon/dist/startup.js.map +1 -1
  909. package/node_modules/@openrig/daemon/package.json +5 -1
  910. package/package.json +3 -2
  911. package/tui/dist/commands/completion.d.ts +8 -0
  912. package/tui/dist/commands/completion.d.ts.map +1 -0
  913. package/tui/dist/commands/completion.js +37 -0
  914. package/tui/dist/commands/completion.js.map +1 -0
  915. package/tui/dist/commands/registry.d.ts +7 -1
  916. package/tui/dist/commands/registry.d.ts.map +1 -1
  917. package/tui/dist/commands/registry.js +51 -0
  918. package/tui/dist/commands/registry.js.map +1 -1
  919. package/tui/dist/config/config-model.d.ts +69 -0
  920. package/tui/dist/config/config-model.d.ts.map +1 -0
  921. package/tui/dist/config/config-model.js +215 -0
  922. package/tui/dist/config/config-model.js.map +1 -0
  923. package/tui/dist/connections/connections-model.d.ts +72 -0
  924. package/tui/dist/connections/connections-model.d.ts.map +1 -0
  925. package/tui/dist/connections/connections-model.js +64 -0
  926. package/tui/dist/connections/connections-model.js.map +1 -0
  927. package/tui/dist/crash-cart/from-emit.d.ts +5 -5
  928. package/tui/dist/crash-cart/from-emit.d.ts.map +1 -1
  929. package/tui/dist/crash-cart/from-emit.js +15 -9
  930. package/tui/dist/crash-cart/from-emit.js.map +1 -1
  931. package/tui/dist/crash-cart/keys.d.ts +1 -1
  932. package/tui/dist/crash-cart/keys.d.ts.map +1 -1
  933. package/tui/dist/crash-cart/keys.js +2 -0
  934. package/tui/dist/crash-cart/keys.js.map +1 -1
  935. package/tui/dist/crash-cart/start-daemon.d.ts +4 -0
  936. package/tui/dist/crash-cart/start-daemon.d.ts.map +1 -0
  937. package/tui/dist/crash-cart/start-daemon.js +12 -0
  938. package/tui/dist/crash-cart/start-daemon.js.map +1 -0
  939. package/tui/dist/daemon-client.d.ts +11 -0
  940. package/tui/dist/daemon-client.d.ts.map +1 -1
  941. package/tui/dist/daemon-client.js +38 -3
  942. package/tui/dist/daemon-client.js.map +1 -1
  943. package/tui/dist/detail.d.ts +3 -0
  944. package/tui/dist/detail.d.ts.map +1 -1
  945. package/tui/dist/detail.js +23 -0
  946. package/tui/dist/detail.js.map +1 -1
  947. package/tui/dist/execution/execution-model.d.ts +15 -1
  948. package/tui/dist/execution/execution-model.d.ts.map +1 -1
  949. package/tui/dist/execution/execution-model.js +90 -187
  950. package/tui/dist/execution/execution-model.js.map +1 -1
  951. package/tui/dist/execution/workflow-model.d.ts +6 -0
  952. package/tui/dist/execution/workflow-model.d.ts.map +1 -0
  953. package/tui/dist/execution/workflow-model.js +231 -0
  954. package/tui/dist/execution/workflow-model.js.map +1 -0
  955. package/tui/dist/grammar.d.ts.map +1 -1
  956. package/tui/dist/grammar.js +1 -2
  957. package/tui/dist/grammar.js.map +1 -1
  958. package/tui/dist/health/health-model.d.ts +1 -1
  959. package/tui/dist/health/health-model.d.ts.map +1 -1
  960. package/tui/dist/health/health-model.js +5 -4
  961. package/tui/dist/health/health-model.js.map +1 -1
  962. package/tui/dist/hydrate.d.ts.map +1 -1
  963. package/tui/dist/hydrate.js +85 -8
  964. package/tui/dist/hydrate.js.map +1 -1
  965. package/tui/dist/input.d.ts +2 -0
  966. package/tui/dist/input.d.ts.map +1 -1
  967. package/tui/dist/input.js +28 -6
  968. package/tui/dist/input.js.map +1 -1
  969. package/tui/dist/live.d.ts +2 -0
  970. package/tui/dist/live.d.ts.map +1 -1
  971. package/tui/dist/live.js +17 -1
  972. package/tui/dist/live.js.map +1 -1
  973. package/tui/dist/main.js +196 -18
  974. package/tui/dist/main.js.map +1 -1
  975. package/tui/dist/render.d.ts +9 -0
  976. package/tui/dist/render.d.ts.map +1 -1
  977. package/tui/dist/render.js +177 -80
  978. package/tui/dist/render.js.map +1 -1
  979. package/tui/dist/scopes/scopes-model.d.ts +44 -0
  980. package/tui/dist/scopes/scopes-model.d.ts.map +1 -1
  981. package/tui/dist/scopes/scopes-model.js +68 -6
  982. package/tui/dist/scopes/scopes-model.js.map +1 -1
  983. package/tui/dist/sections.d.ts.map +1 -1
  984. package/tui/dist/sections.js +2 -0
  985. package/tui/dist/sections.js.map +1 -1
  986. package/tui/dist/socket-server.d.ts +4 -0
  987. package/tui/dist/socket-server.d.ts.map +1 -1
  988. package/tui/dist/socket-server.js +4 -0
  989. package/tui/dist/socket-server.js.map +1 -1
  990. package/tui/dist/startup.d.ts +82 -0
  991. package/tui/dist/startup.d.ts.map +1 -0
  992. package/tui/dist/startup.js +273 -0
  993. package/tui/dist/startup.js.map +1 -0
  994. package/tui/dist/state.d.ts +3 -1
  995. package/tui/dist/state.d.ts.map +1 -1
  996. package/tui/dist/state.js +74 -10
  997. package/tui/dist/state.js.map +1 -1
  998. package/tui/dist/stylize.js +3 -3
  999. package/tui/dist/stylize.js.map +1 -1
  1000. package/tui/dist/time.d.ts +9 -0
  1001. package/tui/dist/time.d.ts.map +1 -0
  1002. package/tui/dist/time.js +42 -0
  1003. package/tui/dist/time.js.map +1 -0
  1004. package/tui/dist/types.d.ts +51 -1
  1005. package/tui/dist/types.d.ts.map +1 -1
  1006. package/ui/dist/assets/{index-wyX378xb.js → index-BVW54ItO.js} +165 -165
  1007. package/ui/dist/index.html +1 -1
@@ -1,3 +1,7 @@
1
+ import { DEFAULT_TIME_ZONE, displayTime } from "./time.js";
2
+ import { startupLines } from "./startup.js";
3
+ import { configLines } from "./config/config-model.js";
4
+ import { connectionsLines } from "./connections/connections-model.js";
1
5
  // Hand-rolled ANSI renderer (Phase-0 substrate decision). Pure function:
2
6
  // (state, snapshot) → {lines, hitMap, explorerRows}. BOTH panes emit hit
3
7
  // targets — explorer rows AND content-pane surfaces (table rows, view tabs,
@@ -18,7 +22,7 @@ import { buildLedgerExplorer } from "./crash-cart/ledger-explorer.js";
18
22
  import { runtimeMarkSegs } from "./topology/runtime-marks.js";
19
23
  import { barCells, flashActive, reducedMotion, spinnerFrame } from "./motion.js";
20
24
  import { explorerWidth, MOTION_FRAME_MS } from "./visual-layout.js";
21
- import { detailPage, fieldLine, sectionRule, listItem, alignedRow, LABEL_W } from "./detail.js";
25
+ import { detailPage, fieldLine, sectionRule, listItem, alignedRow, LABEL_W, wrapDetailLines } from "./detail.js";
22
26
  import { healthAgentLines, healthDetailLines, healthListLines, healthSummaryLine } from "./health/health-model.js";
23
27
  function pad(text, width) {
24
28
  const t = String(text ?? "");
@@ -216,7 +220,7 @@ function workRows(rows, width) {
216
220
  ];
217
221
  });
218
222
  }
219
- function agentDetailLines(snap, found, contentWidth) {
223
+ function agentDetailLines(snap, found, contentWidth, timeZone = DEFAULT_TIME_ZONE) {
220
224
  const { agent, rig, pod } = found;
221
225
  const session = agent.session;
222
226
  const specInLibrary = !!agent.spec && !!findSpec(snap, agent.spec);
@@ -271,7 +275,7 @@ function agentDetailLines(snap, found, contentWidth) {
271
275
  ...(activityReason ? [{ label: "reason", value: activityReason }] : []),
272
276
  ...(agent.activity?.decidedBy ? [{ label: "decided by", value: agent.activity.decidedBy }] : []),
273
277
  ...(agent.activity?.signalSource || agent.activity?.signalReason ? [{ label: "signal", value: `${agent.activity.signalSource ?? "unknown"} · ${agent.activity.signalReason ?? "no reason"}` }] : []),
274
- ...(agent.activity?.eventAt ? [{ label: "changed", value: agent.activity.eventAt }] : []),
278
+ ...(agent.activity?.eventAt ? [{ label: "changed", value: displayTime(agent.activity.eventAt, timeZone) }] : []),
275
279
  ],
276
280
  },
277
281
  {
@@ -307,10 +311,16 @@ function agentDetailLines(snap, found, contentWidth) {
307
311
  ],
308
312
  },
309
313
  {
310
- title: "SPEC",
314
+ title: "SPEC · effective seat binding",
311
315
  fields: [specInLibrary
312
316
  ? { label: "spec", value: agent.spec, link: { type: "cross", kind: "spec-of", name: agent.name, target: { host: found.host.name, rig: rig.name, pod: pod.name } } }
313
317
  : { label: "spec", value: agent.spec ? `${agent.spec} (not in library)` : "—" }],
318
+ lines: [
319
+ ...wrapDetailValue("profile", agent.profile ?? "not served", contentWidth),
320
+ ...wrapDetailValue("version", agent.specVersion ?? "not served", contentWidth),
321
+ ...wrapDetailValue("source hash", agent.specHash ?? "not served", contentWidth),
322
+ ...wrapDetailValue("basis", "Served seat binding; the authored library may have changed since launch.", contentWidth),
323
+ ],
314
324
  },
315
325
  ]),
316
326
  ];
@@ -335,12 +345,6 @@ function tabsLine(state, suffix) {
335
345
  }
336
346
  return [{ text, zones }];
337
347
  }
338
- function localClock(iso) {
339
- const date = new Date(iso);
340
- if (Number.isNaN(date.getTime()))
341
- return "??:??";
342
- return `${String(date.getHours()).padStart(2, "0")}:${String(date.getMinutes()).padStart(2, "0")}`;
343
- }
344
348
  function queueRows(snap) {
345
349
  return [...snap.attention, ...snap.blocked, ...snap.inProgress, ...snap.pending, ...snap.recentlyFinished];
346
350
  }
@@ -381,53 +385,54 @@ function recentScopeMatches(snap, scope) {
381
385
  return false;
382
386
  return scope.kind === "instance" || (served.kind === "rig" && served.rig === scope.rig);
383
387
  }
384
- function recentLines(snap, scope, width, expanded) {
388
+ function recentLines(snap, scope, width, expanded, timeZone) {
385
389
  if (!recentScopeMatches(snap, scope) || snap.recentTransitions == null)
386
390
  return [];
387
- const timeW = 5;
388
391
  const rows = expanded ? snap.recentTransitions : snap.recentTransitions.slice(-5);
389
392
  const lines = [
390
393
  ...(expanded ? [] : [{ text: "" }]),
391
- sectionRule(`RECENT · ${scope.kind === "instance" ? "instance" : `rig ${scope.rig}`} · material queue transitions · newest last`, width),
394
+ sectionRule(`RECENT · ${scope.kind === "instance" ? "instance" : `rig ${scope.rig}`}`, width),
395
+ { text: " Recorded queue changes · oldest to newest · Enter inspects" },
392
396
  ];
393
397
  if (rows.length === 0)
394
398
  return [...lines, { text: " No recorded transitions in the current window." }];
395
- if (width < 78) {
396
- const rigW = scope.kind === "instance" ? 9 : 0;
397
- const changeW = Math.max(16, width - timeW - rigW - 2);
398
- lines.push({ text: alignedRow([["TIME", timeW], ...(rigW ? [["RIG", rigW]] : []), ["CHANGE", changeW]]) });
399
- for (const row of rows) {
400
- const action = recentTargetAction(snap, row);
401
- lines.push({
402
- text: alignedRow([[localClock(row.ts), timeW], ...(rigW ? [[pad(row.rig ?? "?", rigW), rigW]] : []), [pad(row.change, changeW), changeW]]).slice(0, width),
403
- ...(action ? { action } : {}),
404
- });
405
- lines.push({ text: ` ${pad(row.actorSession, Math.max(8, width - 8))}`.slice(0, width), ...(action ? { action } : {}) });
406
- lines.push({ text: ` → ${row.target}`.slice(0, width), ...(action ? { action } : {}) });
407
- lines.push(...wrapDetailValue("work", recentWorkText(snap, row), width)
408
- .map((line) => ({ ...line, ...(action ? { action } : {}) })));
409
- }
410
- return lines;
411
- }
412
- const rigW = scope.kind === "instance" ? Math.min(16, Math.max(9, Math.floor(width * 0.13))) : 0;
413
- const actorW = Math.min(26, Math.max(16, Math.floor(width * 0.21)));
414
- const changeW = Math.min(36, Math.max(20, Math.floor(width * 0.28)));
415
- const targetW = Math.max(10, width - timeW - rigW - actorW - changeW - (scope.kind === "instance" ? 4 : 3));
416
- lines.push({ text: alignedRow([["TIME", timeW], ...(scope.kind === "instance" ? [["RIG", rigW]] : []), ["ACTOR", actorW], ["CHANGE", changeW], ["TARGET", targetW]]) });
417
399
  for (const row of rows) {
418
- const action = recentTargetAction(snap, row);
419
- const text = alignedRow([
420
- [localClock(row.ts), timeW],
421
- ...(scope.kind === "instance" ? [[pad(row.rig ?? "?", rigW), rigW]] : []),
422
- [pad(row.actorSession, actorW), actorW],
423
- [pad(row.change, changeW), changeW],
424
- [pad(row.target, targetW), targetW],
425
- ]).slice(0, width);
426
- lines.push({ text, ...(action ? { action } : {}) });
427
- lines.push(...wrapDetailValue("work", recentWorkText(snap, row), width)
428
- .map((line) => ({ ...line, ...(action ? { action } : {}) })));
400
+ lines.push(listItem(`${displayTime(row.ts, timeZone)} · #${row.transitionId}`, { type: "recent-open", transitionId: row.transitionId }), { text: ` ${row.actorSession || "actor unknown"} · ${row.change || "change unknown"}` }, { text: ` ${recentWorkText(snap, row)}` }, { text: ` ${row.targetKind}: ${row.target}${scope.kind === "instance" ? ` · rig ${row.rig ?? "unknown"}` : ""}` }, { text: "" });
429
401
  }
430
- return lines;
402
+ return wrapDetailLines(lines, width);
403
+ }
404
+ function recentDetailLines(state, snap, width) {
405
+ const row = state.recentOpen;
406
+ const target = recentTargetAction(snap, row);
407
+ return wrapDetailLines([
408
+ { text: `Recent event #${row.transitionId} · Esc returns` },
409
+ fieldLine({ label: "when", value: displayTime(row.ts, state.timeZone) }),
410
+ fieldLine({ label: "actor", value: row.actorSession || "unknown" }),
411
+ fieldLine({ label: "change", value: row.change || "unknown" }),
412
+ fieldLine({ label: "work", value: recentWorkText(snap, row) }),
413
+ fieldLine({ label: "target", value: `${row.targetKind}: ${row.target}` }),
414
+ fieldLine({ label: "rig", value: row.rig ?? "not served" }),
415
+ fieldLine({ label: "queue item", value: row.qitemId }),
416
+ fieldLine({ label: "raw time", value: row.ts }),
417
+ { text: " This is the recorded change, not an independent check of its outcome." },
418
+ ...(target ? [listItem("Related work / owner", target)] : [{ text: " Related work is outside the current snapshot." }]),
419
+ listItem("Back · Esc", { type: "back" }),
420
+ ], width);
421
+ }
422
+ function timeZoneLines(state, width) {
423
+ return wrapDetailLines([
424
+ { text: "Local time · presentation setting" },
425
+ fieldLine({ label: "timezone", value: state.timeZone }),
426
+ ...(state.timeZoneWarning ? [{ text: ` ${state.timeZoneWarning}` }] : []),
427
+ { text: " Absolute times include date and zone. Daylight saving follows the named zone. Elapsed ages stay relative; source timestamps are unchanged." },
428
+ { text: "" },
429
+ { text: " Change the persistent setting from the shell, then reopen this TUI:" },
430
+ { text: " rig config set ui.timezone Europe/London" },
431
+ { text: " rig config reset ui.timezone" },
432
+ { text: " rig config get ui.timezone --show-source" },
433
+ { text: " Default: America/Los_Angeles. OPENRIG_UI_TIMEZONE overrides the file setting on this TUI's instance." },
434
+ listItem("Back · Esc", { type: "back" }),
435
+ ], width);
431
436
  }
432
437
  function specTabsLine(state, name) {
433
438
  const active = state.viewTab === "topology" || state.viewTab === "yaml" ? state.viewTab : "configuration";
@@ -511,7 +516,7 @@ function instanceContentLines(state, snap, host, contentWidth, motion) {
511
516
  if (state.viewTab === "health")
512
517
  return [...lines, { text: "" }, ...healthListLines(snap, scope, contentWidth)];
513
518
  if (state.viewTab === "recent") {
514
- const recent = recentLines(snap, scope, contentWidth, true);
519
+ const recent = recentLines(snap, scope, contentWidth, true, state.timeZone);
515
520
  return recent.length > 0
516
521
  ? [...lines, ...recent]
517
522
  : [...lines, { text: "" }, { text: motion.loading ? `${motion.frame} instance RECENT read pending` : "(instance RECENT window not served)" }];
@@ -623,15 +628,23 @@ function instanceContentLines(state, snap, host, contentWidth, motion) {
623
628
  }
624
629
  }
625
630
  lines.push({ text: "" }, { text: `${host.rigs.length} rigs · ${seatCount} seats · ${workingCount} working · ${attentionCount} need attention · ${openCount} open rows` });
626
- lines.push(...recentLines(snap, scope, contentWidth, false));
631
+ lines.push(...recentLines(snap, scope, contentWidth, false, state.timeZone));
627
632
  return lines;
628
633
  }
629
634
  function contentLines(state, snap, contentWidth, motion) {
630
635
  const contentWidthForGraph = contentWidth;
631
636
  void contentWidthForGraph;
632
637
  const lines = [];
638
+ if (state.timeZoneHelp)
639
+ return timeZoneLines(state, contentWidth);
640
+ if (state.recentOpen)
641
+ return recentDetailLines(state, snap, contentWidth);
642
+ if (state.section === "config")
643
+ return configLines(state, snap, contentWidth);
644
+ if (state.section === "connections")
645
+ return connectionsLines(snap, contentWidth, state.timeZone);
633
646
  if (state.healthOpen)
634
- return healthDetailLines(snap, state.healthOpen, contentWidth);
647
+ return healthDetailLines(snap, state.healthOpen, contentWidth, state.timeZone);
635
648
  // PULSE is a FULL-WIDTH view handled by an early return in renderScreen
636
649
  // (renderPulseScreen) — it never reaches the sidebar+content layout below.
637
650
  if (state.section === "topology") {
@@ -658,7 +671,7 @@ function contentLines(state, snap, contentWidth, motion) {
658
671
  const found = hostName ? findAgent(snap, leaf.name, { host: hostName, rig: rigName, pod: podName }) : findAgent(snap, leaf.name);
659
672
  if (!found)
660
673
  return [{ text: `agent "${leaf.name}" not in the current snapshot` }];
661
- return agentDetailLines(snap, found, contentWidth);
674
+ return agentDetailLines(snap, found, contentWidth, state.timeZone);
662
675
  }
663
676
  const hostName = state.drill.find((d) => d.kind === "host")?.name;
664
677
  const host = (hostName ? snap.hosts.find((candidate) => candidate.name === hostName) : snap.hosts[0]);
@@ -692,7 +705,7 @@ function contentLines(state, snap, contentWidth, motion) {
692
705
  if (state.viewTab === "health")
693
706
  return [...lines, { text: "" }, ...healthListLines(snap, healthScope, contentWidth)];
694
707
  if (state.viewTab === "recent") {
695
- const recent = recentLines(snap, { kind: "rig", rig: rig.name }, contentWidth, true);
708
+ const recent = recentLines(snap, { kind: "rig", rig: rig.name }, contentWidth, true, state.timeZone);
696
709
  return recent.length > 0
697
710
  ? [...lines, ...recent]
698
711
  : [...lines, { text: "" }, { text: motion.loading ? `${motion.frame} rig RECENT read pending` : "(rig RECENT window not served)" }];
@@ -745,6 +758,7 @@ function contentLines(state, snap, contentWidth, motion) {
745
758
  lines.push({ text: ` style: ${state.graphStyle} · style hatchet|braille|braille-fallback rides the command bar` });
746
759
  return lines;
747
760
  }
761
+ lines.push(listItem("CONFIG · instance settings", { type: "jump", section: "config" }));
748
762
  lines.push(healthSummaryLine(snap, healthScope, contentWidth));
749
763
  lines.push({ text: state.filter ? `/ filter agents: ${state.filter} · / replace · esc clear` : "/ filter agents…" });
750
764
  if (state.viewTab === "overview") {
@@ -826,7 +840,7 @@ function contentLines(state, snap, contentWidth, motion) {
826
840
  const attention = rows.filter((agent) => /attention|needs|blocked|unknown|failed/.test(agent.status)).length;
827
841
  lines.push({ text: `${rows.length} seats · ${working} working · ${attention} need attention · ${rows.reduce((n, agent) => n + queueFacts(snap, agent.session).count, 0)} open rows` });
828
842
  if (!podFilter)
829
- lines.push(...recentLines(snap, { kind: "rig", rig: rig.name }, contentWidth, false));
843
+ lines.push(...recentLines(snap, { kind: "rig", rig: rig.name }, contentWidth, false, state.timeZone));
830
844
  return lines;
831
845
  }
832
846
  if (state.section === "specs") {
@@ -835,8 +849,28 @@ function contentLines(state, snap, contentWidth, motion) {
835
849
  const spec = findSpec(snap, leaf.name);
836
850
  if (!spec)
837
851
  return [{ text: `spec "${leaf.name}" not in the current snapshot` }];
838
- if (spec.kind === "rig") {
852
+ if (spec.kind === "rig")
839
853
  lines.push(specTabsLine(state, spec.name));
854
+ lines.push({ text: `${spec.kind} spec ${spec.name}` });
855
+ lines.push(fieldLine({ label: "purpose", value: spec.description ?? "not declared in the available source" }));
856
+ lines.push(fieldLine({ label: "provenance", value: `${sourceProvenance(spec)} · ${spec.sourceState ?? "source state not served"}` }));
857
+ lines.push(fieldLine({ label: "source", value: spec.sourcePath ?? "path unavailable" }));
858
+ lines.push({ text: " Authored declaration. Resource availability is not the effective loadout of a running seat." });
859
+ lines.push(sectionRule("Observed consumers · open for effective runtime/configuration", contentWidth));
860
+ for (const consumer of spec.consumers ?? []) {
861
+ const resource = consumer.agent ? "agent" : "rig";
862
+ lines.push(listItem(`${consumer.agent ?? consumer.rig} · ${consumer.status ?? "unknown"}${consumer.runtime ? ` · ${consumer.runtime}` : ""}${consumer.model ? ` · ${consumer.model}` : ""}`, { type: "drill", resource, name: consumer.agent ?? consumer.rig, target: { host: consumer.host, rig: consumer.rig } }));
863
+ }
864
+ if (spec.consumers && !spec.consumers.length)
865
+ lines.push({ text: " No consumers observed in the available local inventory (remote seats are not enumerated)." });
866
+ if (spec.consumers === undefined)
867
+ lines.push({ text: " Consumer projection unavailable." });
868
+ for (const error of snap.readErrors.filter((error) => error.startsWith("nodes(") || error.startsWith("rig-spec(") || error.startsWith("rigs-summary:")))
869
+ lines.push({ text: ` Inventory incomplete: ${error}` });
870
+ lines.push(listItem("Back · Esc", { type: "back" }));
871
+ if (spec.sourceUnavailable)
872
+ return wrapDetailLines([...lines, { text: ` Source unavailable: ${spec.sourceUnavailable}` }], contentWidth);
873
+ if (spec.kind === "rig") {
840
874
  if (spec.sourcePath)
841
875
  lines.push(fieldLine({ label: "source", value: `${displayPath(spec.sourcePath, 56)} · ${sourceProvenance(spec)}` }));
842
876
  if (state.viewTab === "topology") {
@@ -848,7 +882,7 @@ function contentLines(state, snap, contentWidth, motion) {
848
882
  lines.push({ text: "" });
849
883
  if (nodes.length === 0) {
850
884
  lines.push({ text: " (topology projection is empty)" });
851
- return lines;
885
+ return wrapDetailLines(lines, contentWidth);
852
886
  }
853
887
  lines.push({ text: ` ${alignedRow(NODE_COLS)}` });
854
888
  lines.push({ text: ` ${"─".repeat(NODE_COLS.reduce((n, [, w]) => n + w + 1, -1))}` });
@@ -860,12 +894,12 @@ function contentLines(state, snap, contentWidth, motion) {
860
894
  for (const edge of graphEdges)
861
895
  lines.push({ text: ` ${alignedRow([[edge.source, 16], ["→", 2], [edge.target, 20]])} (${edge.kind})` });
862
896
  }
863
- return lines;
897
+ return wrapDetailLines(lines, contentWidth);
864
898
  }
865
899
  if (state.viewTab === "yaml") {
866
900
  for (const rawLine of (spec.raw ?? "# raw YAML unavailable").split("\n"))
867
901
  lines.push({ text: ` ${rawLine}` });
868
- return lines;
902
+ return wrapDetailLines(lines, contentWidth);
869
903
  }
870
904
  const members = spec.pods?.reduce((count, pod) => count + pod.members.length, 0) ?? spec.legacyNodes?.length ?? 0;
871
905
  const edges = (spec.edges?.length ?? 0) + (spec.pods?.reduce((count, pod) => count + pod.edges.length, 0) ?? 0);
@@ -940,12 +974,12 @@ function contentLines(state, snap, contentWidth, motion) {
940
974
  fields: [{ label: "source", value: spec.sourcePath ? `${displayPath(spec.sourcePath, 56)} · ${sourceProvenance(spec)}` : "—" }],
941
975
  },
942
976
  {
943
- title: "where it runs",
977
+ title: "Declared rig references",
944
978
  fields: [
945
979
  ...((spec.usedByRigs?.length ?? 0) === 0
946
- ? [{ label: "used by", value: "—" }]
980
+ ? [{ label: "declared by", value: "—" }]
947
981
  : (spec.usedByRigs ?? []).map((rig) => ({
948
- label: "used by",
982
+ label: "declared by",
949
983
  value: `rig ${rig}`,
950
984
  link: { type: "drill", resource: "spec", name: rig },
951
985
  }))),
@@ -958,7 +992,7 @@ function contentLines(state, snap, contentWidth, motion) {
958
992
  },
959
993
  ]));
960
994
  }
961
- return lines;
995
+ return wrapDetailLines(lines, contentWidth);
962
996
  }
963
997
  lines.push({ text: "SPEC LIBRARY" });
964
998
  lines.push({ text: state.filter ? `/ filter specs: ${state.filter} · / replace · esc clear` : "/ filter specs…" });
@@ -1055,6 +1089,16 @@ function contentLines(state, snap, contentWidth, motion) {
1055
1089
  return lines;
1056
1090
  }
1057
1091
  if (state.section === "scopes") {
1092
+ if (!state.scopesMission && snap.execution) {
1093
+ const selected = snap.execution;
1094
+ const instances = selected.lifecycle_instances;
1095
+ return wrapDetailLines([
1096
+ { text: "SCOPES · choose a mission in the explorer" },
1097
+ listItem(`Default mission · ${selected.mission}`, { type: "scopes-mission-open", mission: selected.mission }),
1098
+ { text: ` Workflows: ${instances ? instances.map((instance) => String(instance.status ?? "unknown")).join(", ") || "none bound" : "projection unavailable"}` },
1099
+ { text: ` Execution snapshot: ${displayTime(selected.derived_at, state.timeZone)}. Other missions load when selected.` },
1100
+ ], contentWidth);
1101
+ }
1058
1102
  // SCOPES owns both levels. Both mission-graph and Explorer slice routes land
1059
1103
  // on the same execution-backed canonical detail; store-direct content is
1060
1104
  // composed into that page instead of surviving as a competing destination.
@@ -1068,16 +1112,16 @@ function contentLines(state, snap, contentWidth, motion) {
1068
1112
  return executionContentLines(execution, snap.scopes, snap.readErrors, state.executionOpen, contentWidth, false, snap.sliceDetail, {
1069
1113
  collapseReqs: state.scopesCollapseReqs,
1070
1114
  narrative: state.scopesNarrative,
1071
- });
1115
+ }, state.timeZone);
1072
1116
  }
1073
1117
  if (detail && execution) {
1074
1118
  return executionContentLines(execution, snap.scopes, snap.readErrors, `slice:${detail.id ?? detail.dirName}`, contentWidth, false, snap.sliceDetail, {
1075
1119
  collapseReqs: state.scopesCollapseReqs,
1076
1120
  narrative: state.scopesNarrative,
1077
- });
1121
+ }, state.timeZone);
1078
1122
  }
1079
1123
  if (!detail && missionName) {
1080
- const lines = executionContentLines(execution, snap.scopes, snap.readErrors, state.executionOpen, contentWidth, !snap.hydratedAt || snap.executionMission !== missionName);
1124
+ const lines = executionContentLines(execution, snap.scopes, snap.readErrors, state.executionOpen, contentWidth, !snap.hydratedAt || snap.executionMission !== missionName, undefined, undefined, state.timeZone);
1081
1125
  return execution ? lines : [{ text: ` ${missionName} EXECUTION` }, ...lines];
1082
1126
  }
1083
1127
  return scopesContentLines(detail, missionName, {
@@ -1128,11 +1172,15 @@ function keybindHints(state) {
1128
1172
  // hint hid exactly where it was needed). When ↑↓ themselves scroll (a
1129
1173
  // scrollable spec detail), the nav label says so; otherwise ↑↓ move and the
1130
1174
  // page keys carry the scroll.
1175
+ if (state.section === "config")
1176
+ return state.configKey
1177
+ ? `${specDetailArrowsScroll(state) ? "↑↓ scroll" : "↑↓ move"} · esc back · v select/copy · refresh · q quit`
1178
+ : "↑↓ move · ←→ pane · ⏎ open · / search · esc back · refresh · q quit";
1131
1179
  const arrowsScroll = specDetailArrowsScroll(state);
1132
1180
  const nav = arrowsScroll ? "↑↓ scroll" : "↑↓ move";
1133
1181
  const pageScroll = state.contentMaxOffset > 0 && !arrowsScroll ? "⇞⇟ scroll · " : "";
1134
1182
  const filter = state.filter ? "/ replace · esc clear" : "/ filter";
1135
- return `${nav} · ←→ pane · ⏎ open · ${pageScroll}: command · ${filter} · v select/copy · f footer · q quit`;
1183
+ return `${nav} · ←→ pane · ⏎ open · ${pageScroll}: command · ${filter} · S startup · v select/copy · f footer · q quit`;
1136
1184
  }
1137
1185
  /** The PULSE view renders FULL-WIDTH with NO explorer sidebar (increment 2). A
1138
1186
  * minimal self-contained screen: cmd bar + a full-width titled rule + the pulse
@@ -1201,7 +1249,14 @@ function renderPulseScreen(state, snap, options, inputLine) {
1201
1249
  const contentTargets = [];
1202
1250
  const flashRows = [];
1203
1251
  let flashAck = false;
1204
- lines.push(pad(`cmd ▸ ${inputLine}▊`, cols));
1252
+ lines.push(pad(`cmd ▸ ${inputLine}▊${load.stale ? " · readiness unconfirmed — refreshing or authority unavailable" : load.connection && load.connection !== "connected" ? " · live updates unavailable — last HTTP basis; quiet refresh active" : inputLine ? "" : " Tab complete · ? help · timezone"}`, cols));
1253
+ if (options.completion) {
1254
+ lines.push(pad(options.completion.message, cols));
1255
+ for (const candidate of options.completion.candidates.slice(0, 4))
1256
+ lines.push(pad(` ${candidate}`, cols));
1257
+ if (options.completion.candidates.length > 4)
1258
+ lines.push(pad(" … keep typing to narrow matches", cols));
1259
+ }
1205
1260
  // REGISTRY I3 — the palette overlay: fuzzy rows over the ONE registry; unavailable
1206
1261
  // entries render DIMMED-WITH-REASON, never hidden (PM pin); bounded height.
1207
1262
  if (state.palette) {
@@ -1223,7 +1278,7 @@ function renderPulseScreen(state, snap, options, inputLine) {
1223
1278
  const contentWidth = Math.max(cols - explW - 2, 0);
1224
1279
  const model = buildPulseModel(snap, nowMs);
1225
1280
  const chromeRows = 3; // bottom rule + hint bar + status line
1226
- const bodyRows = Math.max(rows - 2 - chromeRows, 1);
1281
+ const bodyRows = Math.max(rows - lines.length - chromeRows, 1);
1227
1282
  const maxContentOffset = Math.max(renderPulseView(model).length - bodyRows, 0);
1228
1283
  const contentStart = Math.min(state.contentOffset, maxContentOffset);
1229
1284
  // Lane cells (column-major), CLIPPED to the content width: a cell whose column
@@ -1309,7 +1364,7 @@ function renderPulseScreen(state, snap, options, inputLine) {
1309
1364
  // the footer's live "updated Ns ago" IS the ongoing refresh signal (reader
1310
1365
  // clock), so a settled empty view stays calm. Reduced motion → static "·".
1311
1366
  const loadTag = loading ? ` ${frame} loading` : "";
1312
- lines.push(pad(`[${state.instanceId}] ${state.section}${drillPath ? " · " + drillPath : ""}${state.lastError ? " ✗ " + state.lastError : ""}${state.notice ? " ▸ " + state.notice : ""}${readWarn}${loadTag}`, cols));
1367
+ lines.push(pad(`[${state.instanceId}] ${state.section}${drillPath ? " · " + drillPath : ""}${state.lastError ? " ✗ " + state.lastError : ""}${state.notice ? " ▸ " + state.notice : ""}${readWarn}${loadTag}${state.timeZoneWarning ? " · ⚠ timezone; run timezone" : ""}`, cols));
1313
1368
  while (lines.length < rows)
1314
1369
  lines.push("");
1315
1370
  const anyFlash = model.lanes.some((l) => l.rows.some((r) => r.flashed));
@@ -1356,7 +1411,7 @@ function wrapContentLines(content, width) {
1356
1411
  }
1357
1412
  const chunk = rest.slice(0, cut).trimEnd();
1358
1413
  rest = rest.slice(cut).replace(/^\s+/, "");
1359
- out.push(first ? { text: chunk, segs: item.segs } : { text: indent + chunk });
1414
+ out.push(first ? { text: chunk, segs: item.segs, action: item.action } : { text: indent + chunk });
1360
1415
  first = false;
1361
1416
  }
1362
1417
  }
@@ -1366,9 +1421,10 @@ function crashCartShell(content, led, contentTitle, cols, rows, inputLine, opts)
1366
1421
  const explW = explorerWidth(cols);
1367
1422
  const lines = [];
1368
1423
  const segRows = {};
1424
+ const hitMap = [];
1369
1425
  lines.push(pad(`cmd ▸ ${inputLine}▊`, cols));
1370
1426
  lines.push(paneRule(cols, explW, "top", "{ EXPLORER }", contentTitle));
1371
- // The ledger-fed explorer column: the honest marker, then one row per rig (name + seat count).
1427
+ // The explorer's source note, then any discovered rigs (name + seat count).
1372
1428
  const leftRows = [led.note, "", ...led.rows.map((r) => `${r.label} (${r.seatCount})`)];
1373
1429
  const contentWidth = Math.max(cols - explW - 2, 0);
1374
1430
  if (opts?.wrap)
@@ -1384,6 +1440,8 @@ function crashCartShell(content, led, contentTitle, cols, rows, inputLine, opts)
1384
1440
  const left = pad(leftRows[i] ?? "", explW);
1385
1441
  const citem = content[scroll + i];
1386
1442
  const contentText = (citem?.text ?? "").slice(0, contentWidth);
1443
+ if (citem?.action)
1444
+ hitMap.push({ y, x1: explW + 2, x2: cols, action: citem.action });
1387
1445
  lines.push(pad(`${left}┃ ${contentText}`, cols));
1388
1446
  if (citem?.segs)
1389
1447
  segRows[y] = truncateSegs(citem.segs, contentWidth);
@@ -1391,13 +1449,13 @@ function crashCartShell(content, led, contentTitle, cols, rows, inputLine, opts)
1391
1449
  lines.push(paneRule(cols, explW, "bottom"));
1392
1450
  lines.push(pad("", cols));
1393
1451
  const scrollHint = contentMaxOffset > 0 ? ` · ↑↓ scroll (${scroll}/${contentMaxOffset})` : "";
1394
- lines.push(pad(`[crash-cart] daemon down · explorer ${led.note}${scrollHint}`, cols));
1452
+ lines.push(pad(`[crash-cart] ${led.note}${scrollHint}`, cols));
1395
1453
  while (lines.length < rows)
1396
1454
  lines.push("");
1397
1455
  return {
1398
1456
  lines: lines.slice(0, rows),
1399
1457
  explorerWidth: explW,
1400
- hitMap: [],
1458
+ hitMap,
1401
1459
  contentTargets: [],
1402
1460
  contentMaxOffset,
1403
1461
  explorerRows: [],
@@ -1407,6 +1465,18 @@ function crashCartShell(content, led, contentTitle, cols, rows, inputLine, opts)
1407
1465
  export function renderScreen(state, snap, options = {}, inputLine = "") {
1408
1466
  const { cols = 120, rows = 32, nowMs = 0 } = options;
1409
1467
  const explW = explorerWidth(cols);
1468
+ if (options.startup?.open) {
1469
+ const startup = options.startup;
1470
+ const content = wrapContentLines(startupLines(startup).map((line) => ({ ...line,
1471
+ text: line.text.replace(/\x1b\[[0-9;?]*[A-Za-z]/g, "").replace(/[\x00-\x1f\x7f]/g, " ")
1472
+ .replace(/(https?:\/\/)[^\s/@]+:[^\s/@]+@/gi, "$1[redacted]@").replace(/Bearer\s+[^\s]+/gi, "Bearer [redacted]"),
1473
+ })), Math.max(1, cols - explW - 2));
1474
+ const selected = content.findIndex((line) => line.action?.type === "startup" && line.action.key === `select:${startup.selected}`);
1475
+ const scroll = startup.expanded ? startup.scroll : Math.max(0, selected - Math.max(1, rows - 12));
1476
+ const screen = crashCartShell(content, { note: "startup", rows: [] }, "START AND RETURN", cols, rows, "", { scroll });
1477
+ screen.lines[rows - 1] = pad("↑↓ choose · Enter select · r refresh · d details · Esc back · q quit", cols);
1478
+ return screen;
1479
+ }
1410
1480
  // 5.2 crash-cart (shell-placement rework, ruling 3c6c2be0): daemon-DOWN renders as a CONTENT-PANE
1411
1481
  // view inside the standard shell — the explorer sidebar is ALWAYS present, ledger-fed + honestly
1412
1482
  // marked (from the SAME one-JSON discovery, never a second read). Content moves into the right pane
@@ -1423,17 +1493,37 @@ export function renderScreen(state, snap, options = {}, inputLine = "") {
1423
1493
  scroll: options.restoreScroll ?? 0,
1424
1494
  });
1425
1495
  }
1496
+ if (options.unavailable) {
1497
+ const detail = options.unavailable
1498
+ .replace(/\x1b\[[0-9;?]*[A-Za-z]/g, "")
1499
+ .replace(/[\x00-\x1f\x7f]/g, " ")
1500
+ .replace(/(https?:\/\/)[^\s/@]+:[^\s/@]+@/gi, "$1[redacted]@")
1501
+ .replace(/Bearer\s+[^\s]+/gi, "Bearer [redacted]");
1502
+ const summary = /NODE_MODULE_VERSION|ERR_DLOPEN_FAILED|better-sqlite3/i.test(detail)
1503
+ ? "The installed native module cannot load in this runtime. Repair the installation prerequisite, then retry."
1504
+ : "Startup state could not be read. Retry after resolving the reported prerequisite.";
1505
+ return crashCartShell([
1506
+ { text: "Startup prerequisite unavailable" },
1507
+ { text: summary },
1508
+ { text: "Saved identity and conversation history have not been classified as missing." },
1509
+ { text: "" },
1510
+ { text: "r retry · d details · q quit" },
1511
+ ...(options.unavailableExpanded ? [{ text: "" }, { text: detail }] : []),
1512
+ ], { note: "state unavailable", rows: [] }, "STARTUP", cols, rows, inputLine, { wrap: true, scroll: options.restoreScroll ?? 0 });
1513
+ }
1426
1514
  if (options.daemonState === "down" && options.crashCart) {
1427
1515
  const led = buildLedgerExplorer(options.crashCart.foundOnHost);
1428
1516
  // B1 ROUND 10 — when a confirm is armed, render it at the TOP of the cockpit (where the operator
1429
1517
  // looks) so the first ⏎ is visibly acknowledged; wrap so the sentence is not clipped at the pane edge.
1430
- const content = options.confirm
1431
- ? [...renderConfirmBanner(options.confirm), ...renderCrashCartView(options.crashCart)]
1432
- : renderCrashCartView(options.crashCart);
1518
+ const content = options.starting
1519
+ ? [{ text: `Starting daemon at ${options.starting}…` }, { text: "Seats remain stopped until selected." }]
1520
+ : options.confirm
1521
+ ? [...renderConfirmBanner(options.confirm), ...renderCrashCartView(options.crashCart)]
1522
+ : renderCrashCartView(options.crashCart);
1433
1523
  return crashCartShell(content, led, "CRASH-CART", cols, rows, inputLine, options.confirm ? { wrap: true } : undefined);
1434
1524
  }
1435
1525
  if (options.daemonState === "unverified" && options.daemonEvidence) {
1436
- const led = buildLedgerExplorer([]); // no rigs listed when we cannot verify — honest empty ledger
1526
+ const led = { note: "daemon unverified", rows: [] }; // No ledger discovery occurred on this path.
1437
1527
  return crashCartShell(renderUnverifiedView(options.daemonEvidence), led, "DAEMON?", cols, rows, inputLine);
1438
1528
  }
1439
1529
  // PULSE (founder Option-B): a content-pane view inside the NORMAL explorer│
@@ -1459,7 +1549,14 @@ export function renderScreen(state, snap, options = {}, inputLine = "") {
1459
1549
  // shell accepts typing from the empty state, so the honest readiness
1460
1550
  // affordance must show BEFORE the first key (no new focus state; stylize
1461
1551
  // gives the cell SGR blink; zero effect on hit geometry).
1462
- lines.push(pad(`cmd ▸ ${inputLine}▊`, cols));
1552
+ lines.push(pad(`cmd ▸ ${inputLine}▊${inputLine ? "" : " Tab complete · ? help · timezone"}`, cols));
1553
+ if (options.completion) {
1554
+ lines.push(pad(options.completion.message, cols));
1555
+ for (const candidate of options.completion.candidates.slice(0, 4))
1556
+ lines.push(pad(` ${candidate}`, cols));
1557
+ if (options.completion.candidates.length > 4)
1558
+ lines.push(pad(" … keep typing to narrow matches", cols));
1559
+ }
1463
1560
  // REGISTRY I3 — the palette overlay: fuzzy rows over the ONE registry; unavailable
1464
1561
  // entries render DIMMED-WITH-REASON, never hidden (PM pin); bounded height.
1465
1562
  if (state.palette) {
@@ -1497,7 +1594,7 @@ export function renderScreen(state, snap, options = {}, inputLine = "") {
1497
1594
  const liveFlashes = (options.rowFlashes ?? []).filter((f) => flashActive(f.at, nowMs, 600, reduced));
1498
1595
  const ackFlashes = (options.rowFlashes ?? []).filter((f) => flashActive(f.at, nowMs, 600, false));
1499
1596
  const chromeRows = footer ? 4 : 3; // bottom rule + hint bar + status line (+ footer)
1500
- const bodyRows = Math.max(rows - 2 - chromeRows, 1);
1597
+ const bodyRows = Math.max(rows - lines.length - chromeRows, 1);
1501
1598
  const explorerStart = Math.min(Math.max(state.selection - bodyRows + 1, 0), Math.max(explorer.length - bodyRows, 0));
1502
1599
  const contentRows = content.length > bodyRows ? Math.max(bodyRows - 1, 0) : bodyRows;
1503
1600
  const maxContentOffset = Math.max(content.length - contentRows, 0);
@@ -1581,12 +1678,12 @@ export function renderScreen(state, snap, options = {}, inputLine = "") {
1581
1678
  segRows[y] = rowSegs;
1582
1679
  }
1583
1680
  if (footer)
1584
- lines.push(pad(`≋ ${footer.tsEmitted.slice(11, 16)} ${footer.sourceSession}: ${footer.body}`, cols));
1681
+ lines.push(pad(`≋ ${displayTime(footer.tsEmitted, state.timeZone)} ${footer.sourceSession}: ${footer.body}`, cols));
1585
1682
  const drillPath = state.drill.map((d) => d.name).join(" → ");
1586
1683
  const readWarn = snap.readErrors.length > 0 ? ` ⚠ ${snap.readErrors.length} read(s) failed: ${snap.readErrors[0]}` : "";
1587
1684
  lines.push(paneRule(cols, explW, "bottom"));
1588
1685
  lines.push(pad(keybindHints(state), cols));
1589
- lines.push(pad(`[${state.instanceId}] ${state.section}${drillPath ? " · " + drillPath : ""}${state.lastError ? " ✗ " + state.lastError : ""}${state.notice ? " ▸ " + state.notice : ""}${readWarn}`, cols));
1686
+ lines.push(pad(`[${state.instanceId}] ${state.section}${drillPath ? " · " + drillPath : ""}${state.lastError ? " ✗ " + state.lastError : ""}${state.notice ? " ▸ " + state.notice : ""}${readWarn}${state.timeZoneWarning ? " · ⚠ timezone; run timezone" : ""}`, cols));
1590
1687
  while (lines.length < rows)
1591
1688
  lines.push("");
1592
1689
  return {