@openrig/cli 0.6.4-rc.1 → 0.6.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (986) hide show
  1. package/README.md +384 -0
  2. package/daemon/assets/onboarding/02-self-and-competent-action.md +5 -0
  3. package/daemon/assets/plugins/openrig-core/.claude-plugin/plugin.json +1 -1
  4. package/daemon/assets/plugins/openrig-core/.codex-plugin/plugin.json +1 -1
  5. package/daemon/assets/plugins/openrig-core/hooks/scripts/refocus.cjs +100 -20
  6. package/daemon/assets/plugins/openrig-core/skills/claude-compaction-restore/SKILL.md +201 -132
  7. package/daemon/assets/plugins/openrig-core/skills/claude-compaction-restore/reference/SKILL-v1.md +143 -0
  8. package/daemon/assets/plugins/openrig-core/skills/forming-an-openrig-mental-model/SKILL.md +11 -11
  9. package/daemon/assets/plugins/openrig-core/skills/loading-addressable-markdown/scripts/resolve-markdown.mjs +2 -1
  10. package/daemon/assets/plugins/openrig-core/skills/messaging-the-human/SKILL.md +24 -0
  11. package/daemon/assets/plugins/openrig-core/skills/mission-slice-sop/SKILL.md +2 -2
  12. package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/SKILL.md +17 -0
  13. package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/scripts/compose.py +2 -2
  14. package/daemon/assets/plugins/openrig-core/skills/openrig-skills/SKILL.md +6 -0
  15. package/daemon/assets/plugins/openrig-core/skills/openrig-user/SKILL.md +45 -19
  16. package/daemon/assets/plugins/openrig-core/skills/orienting-to-an-inherited-seat/SKILL.md +5 -7
  17. package/daemon/assets/plugins/openrig-core/skills/queue-handoff/SKILL.md +1 -19
  18. package/daemon/assets/plugins/openrig-core/skills/refocusing/SKILL.md +3 -0
  19. package/daemon/assets/plugins/openrig-core/skills/refocusing/scripts/trace-to-root.py +56 -4
  20. package/daemon/assets/plugins/openrig-core/skills/seat-continuity-and-handover/SKILL.md +0 -5
  21. package/daemon/assets/plugins/openrig-core/skills/session-compaction-and-restore/SKILL.md +5 -6
  22. package/daemon/context-packs/help/help.md +9 -4
  23. package/daemon/context-packs/help/manifest.yaml +1 -1
  24. package/daemon/context-packs/onboarding-width/manifest.yaml +1 -1
  25. package/daemon/context-packs/onboarding-width/public-what-you-can-do.md +25 -12
  26. package/daemon/context-packs/reference/getting-started.md +7 -2
  27. package/daemon/context-packs/reference/instance-layout.md +11 -0
  28. package/daemon/context-packs/reference/manifest.yaml +1 -1
  29. package/daemon/context-packs/reference/rig-spec.md +32 -5
  30. package/daemon/context-packs/skills/agent-operated-software/manifest.yaml +1 -1
  31. package/daemon/context-packs/skills/agent-operated-workflows/manifest.yaml +1 -1
  32. package/daemon/context-packs/skills/applying-a-permission-policy/manifest.yaml +1 -1
  33. package/daemon/context-packs/skills/claude-compaction-restore/SKILL.md +201 -132
  34. package/daemon/context-packs/skills/claude-compaction-restore/manifest.yaml +5 -3
  35. package/daemon/context-packs/skills/claude-compaction-restore/reference/SKILL-v1.md +143 -0
  36. package/daemon/context-packs/skills/core/agent-starters/manifest.yaml +1 -1
  37. package/daemon/context-packs/skills/core/agent-startup-and-context-ingestion/manifest.yaml +1 -1
  38. package/daemon/context-packs/skills/core/cross-host-rig-commands/manifest.yaml +1 -1
  39. package/daemon/context-packs/skills/core/human-in-the-loop/manifest.yaml +1 -1
  40. package/daemon/context-packs/skills/core/messaging-the-human/SKILL.md +24 -0
  41. package/daemon/context-packs/skills/core/messaging-the-human/manifest.yaml +1 -1
  42. package/daemon/context-packs/skills/core/openrig-architect/manifest.yaml +1 -1
  43. package/daemon/context-packs/skills/core/openrig-cmux/manifest.yaml +1 -1
  44. package/daemon/context-packs/skills/core/openrig-herdr/manifest.yaml +1 -1
  45. package/daemon/context-packs/skills/core/openrig-skills/SKILL.md +6 -0
  46. package/daemon/context-packs/skills/core/openrig-skills/manifest.yaml +1 -1
  47. package/daemon/context-packs/skills/core/openrig-software-factory/manifest.yaml +1 -1
  48. package/daemon/context-packs/skills/core/openrig-upgrade/manifest.yaml +1 -1
  49. package/daemon/context-packs/skills/core/rig-bundles-and-shareable-artifacts/manifest.yaml +1 -1
  50. package/daemon/context-packs/skills/core/rig-lifecycle/manifest.yaml +1 -1
  51. package/daemon/context-packs/skills/core/session-source-fork/manifest.yaml +1 -1
  52. package/daemon/context-packs/skills/core/specification-system/manifest.yaml +1 -1
  53. package/daemon/context-packs/skills/core/topology-mutation-and-seat-management/SKILL.md +24 -3
  54. package/daemon/context-packs/skills/core/topology-mutation-and-seat-management/manifest.yaml +3 -3
  55. package/daemon/context-packs/skills/core/watchdog/manifest.yaml +1 -1
  56. package/daemon/context-packs/skills/delegating-work/manifest.yaml +1 -1
  57. package/daemon/context-packs/skills/forming-an-openrig-mental-model/SKILL.md +11 -11
  58. package/daemon/context-packs/skills/forming-an-openrig-mental-model/manifest.yaml +1 -1
  59. package/daemon/context-packs/skills/loading-addressable-markdown/manifest.yaml +1 -1
  60. package/daemon/context-packs/skills/loading-addressable-markdown/scripts/resolve-markdown.mjs +2 -1
  61. package/daemon/context-packs/skills/mission-slice-sop/SKILL.md +2 -2
  62. package/daemon/context-packs/skills/mission-slice-sop/manifest.yaml +1 -1
  63. package/daemon/context-packs/skills/openrig-operating-model/SKILL.md +17 -0
  64. package/daemon/context-packs/skills/openrig-operating-model/manifest.yaml +1 -1
  65. package/daemon/context-packs/skills/openrig-operating-model/scripts/compose.py +2 -2
  66. package/daemon/context-packs/skills/openrig-user/SKILL.md +45 -19
  67. package/daemon/context-packs/skills/openrig-user/manifest.yaml +1 -1
  68. package/daemon/context-packs/skills/orienting-to-an-inherited-seat/SKILL.md +5 -7
  69. package/daemon/context-packs/skills/orienting-to-an-inherited-seat/manifest.yaml +1 -1
  70. package/daemon/context-packs/skills/pm/backlog-capture/manifest.yaml +1 -1
  71. package/daemon/context-packs/skills/pm/context-builder/manifest.yaml +1 -1
  72. package/daemon/context-packs/skills/pm/exec-summary/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/manifest.yaml +1 -1
  75. package/daemon/context-packs/skills/pm/requirements-writer/manifest.yaml +1 -1
  76. package/daemon/context-packs/skills/pm/ui-mockup/manifest.yaml +1 -1
  77. package/daemon/context-packs/skills/pods/development-team/manifest.yaml +1 -1
  78. package/daemon/context-packs/skills/pods/orchestration-team/manifest.yaml +1 -1
  79. package/daemon/context-packs/skills/pods/oversight-team/manifest.yaml +1 -1
  80. package/daemon/context-packs/skills/pods/review-team/manifest.yaml +1 -1
  81. package/daemon/context-packs/skills/process/agent-browser/manifest.yaml +1 -1
  82. package/daemon/context-packs/skills/process/context-engineering/manifest.yaml +1 -1
  83. package/daemon/context-packs/skills/process/dogfood/manifest.yaml +1 -1
  84. package/daemon/context-packs/skills/process/frontend-design/manifest.yaml +1 -1
  85. package/daemon/context-packs/skills/process/systematic-debugging/manifest.yaml +1 -1
  86. package/daemon/context-packs/skills/process/test-driven-development/manifest.yaml +1 -1
  87. package/daemon/context-packs/skills/process/verification-before-completion/manifest.yaml +1 -1
  88. package/daemon/context-packs/skills/queue-handoff/SKILL.md +1 -19
  89. package/daemon/context-packs/skills/queue-handoff/manifest.yaml +1 -1
  90. package/daemon/context-packs/skills/refocusing/SKILL.md +3 -0
  91. package/daemon/context-packs/skills/refocusing/manifest.yaml +1 -1
  92. package/daemon/context-packs/skills/refocusing/scripts/trace-to-root.py +56 -4
  93. package/daemon/context-packs/skills/retiring-and-inheriting-a-seat/manifest.yaml +1 -1
  94. package/daemon/context-packs/skills/seat-continuity-and-handover/SKILL.md +0 -5
  95. package/daemon/context-packs/skills/seat-continuity-and-handover/manifest.yaml +1 -1
  96. package/daemon/context-packs/skills/session-compaction-and-restore/SKILL.md +5 -6
  97. package/daemon/context-packs/skills/session-compaction-and-restore/manifest.yaml +1 -1
  98. package/daemon/context-packs/skills/software-for-agents/manifest.yaml +1 -1
  99. package/daemon/context-packs/world-example/manifest.yaml +1 -1
  100. package/daemon/context-packs/world-public/manifest.yaml +1 -1
  101. package/daemon/dist/adapters/claude-code-adapter.d.ts +17 -3
  102. package/daemon/dist/adapters/claude-code-adapter.d.ts.map +1 -1
  103. package/daemon/dist/adapters/claude-code-adapter.js +157 -53
  104. package/daemon/dist/adapters/claude-code-adapter.js.map +1 -1
  105. package/daemon/dist/adapters/claude-resume.d.ts +7 -1
  106. package/daemon/dist/adapters/claude-resume.d.ts.map +1 -1
  107. package/daemon/dist/adapters/claude-resume.js +39 -8
  108. package/daemon/dist/adapters/claude-resume.js.map +1 -1
  109. package/daemon/dist/adapters/codex-resume.d.ts +7 -1
  110. package/daemon/dist/adapters/codex-resume.d.ts.map +1 -1
  111. package/daemon/dist/adapters/codex-resume.js +14 -6
  112. package/daemon/dist/adapters/codex-resume.js.map +1 -1
  113. package/daemon/dist/adapters/codex-runtime-adapter.d.ts +8 -0
  114. package/daemon/dist/adapters/codex-runtime-adapter.d.ts.map +1 -1
  115. package/daemon/dist/adapters/codex-runtime-adapter.js +34 -12
  116. package/daemon/dist/adapters/codex-runtime-adapter.js.map +1 -1
  117. package/daemon/dist/adapters/compose-services-adapter.d.ts +2 -1
  118. package/daemon/dist/adapters/compose-services-adapter.d.ts.map +1 -1
  119. package/daemon/dist/adapters/compose-services-adapter.js +5 -2
  120. package/daemon/dist/adapters/compose-services-adapter.js.map +1 -1
  121. package/daemon/dist/adapters/daemon-url.d.ts +7 -0
  122. package/daemon/dist/adapters/daemon-url.d.ts.map +1 -0
  123. package/daemon/dist/adapters/daemon-url.js +12 -0
  124. package/daemon/dist/adapters/daemon-url.js.map +1 -0
  125. package/daemon/dist/adapters/omp-resume.d.ts +6 -0
  126. package/daemon/dist/adapters/omp-resume.d.ts.map +1 -0
  127. package/daemon/dist/adapters/omp-resume.js +6 -0
  128. package/daemon/dist/adapters/omp-resume.js.map +1 -0
  129. package/daemon/dist/adapters/omp-runtime-adapter.d.ts +10 -0
  130. package/daemon/dist/adapters/omp-runtime-adapter.d.ts.map +1 -0
  131. package/daemon/dist/adapters/omp-runtime-adapter.js +16 -0
  132. package/daemon/dist/adapters/omp-runtime-adapter.js.map +1 -0
  133. package/daemon/dist/adapters/pi-resume.d.ts +4 -0
  134. package/daemon/dist/adapters/pi-resume.d.ts.map +1 -1
  135. package/daemon/dist/adapters/pi-resume.js +20 -18
  136. package/daemon/dist/adapters/pi-resume.js.map +1 -1
  137. package/daemon/dist/adapters/pi-runner-protocol.d.ts +14 -2
  138. package/daemon/dist/adapters/pi-runner-protocol.d.ts.map +1 -1
  139. package/daemon/dist/adapters/pi-runner-protocol.js +62 -5
  140. package/daemon/dist/adapters/pi-runner-protocol.js.map +1 -1
  141. package/daemon/dist/adapters/pi-runner.d.ts +49 -5
  142. package/daemon/dist/adapters/pi-runner.d.ts.map +1 -1
  143. package/daemon/dist/adapters/pi-runner.js +362 -67
  144. package/daemon/dist/adapters/pi-runner.js.map +1 -1
  145. package/daemon/dist/adapters/pi-runtime-adapter.d.ts +3 -2
  146. package/daemon/dist/adapters/pi-runtime-adapter.d.ts.map +1 -1
  147. package/daemon/dist/adapters/pi-runtime-adapter.js +49 -32
  148. package/daemon/dist/adapters/pi-runtime-adapter.js.map +1 -1
  149. package/daemon/dist/adapters/preflight-exec.d.ts +11 -0
  150. package/daemon/dist/adapters/preflight-exec.d.ts.map +1 -0
  151. package/daemon/dist/adapters/preflight-exec.js +52 -0
  152. package/daemon/dist/adapters/preflight-exec.js.map +1 -0
  153. package/daemon/dist/adapters/stub-runner.d.ts.map +1 -1
  154. package/daemon/dist/adapters/stub-runner.js +3 -1
  155. package/daemon/dist/adapters/stub-runner.js.map +1 -1
  156. package/daemon/dist/adapters/stub-runtime-adapter.js +1 -1
  157. package/daemon/dist/adapters/stub-runtime-adapter.js.map +1 -1
  158. package/daemon/dist/adapters/tmux.d.ts +47 -5
  159. package/daemon/dist/adapters/tmux.d.ts.map +1 -1
  160. package/daemon/dist/adapters/tmux.js +305 -54
  161. package/daemon/dist/adapters/tmux.js.map +1 -1
  162. package/daemon/dist/build-info.js +3 -3
  163. package/daemon/dist/daemon-shutdown.d.ts +19 -0
  164. package/daemon/dist/daemon-shutdown.d.ts.map +1 -1
  165. package/daemon/dist/daemon-shutdown.js +81 -0
  166. package/daemon/dist/daemon-shutdown.js.map +1 -1
  167. package/daemon/dist/db/all-migrations.d.ts +1 -1
  168. package/daemon/dist/db/all-migrations.d.ts.map +1 -1
  169. package/daemon/dist/db/all-migrations.js +10 -2
  170. package/daemon/dist/db/all-migrations.js.map +1 -1
  171. package/daemon/dist/db/migrations/090_human_reply_to.d.ts +3 -0
  172. package/daemon/dist/db/migrations/090_human_reply_to.d.ts.map +1 -0
  173. package/daemon/dist/db/migrations/090_human_reply_to.js +7 -0
  174. package/daemon/dist/db/migrations/090_human_reply_to.js.map +1 -0
  175. package/daemon/dist/db/migrations/091_human_questions.d.ts +3 -0
  176. package/daemon/dist/db/migrations/091_human_questions.d.ts.map +1 -0
  177. package/daemon/dist/db/migrations/091_human_questions.js +9 -0
  178. package/daemon/dist/db/migrations/091_human_questions.js.map +1 -0
  179. package/daemon/dist/db/migrations/092_node_effort.d.ts +3 -0
  180. package/daemon/dist/db/migrations/092_node_effort.d.ts.map +1 -0
  181. package/daemon/dist/db/migrations/092_node_effort.js +8 -0
  182. package/daemon/dist/db/migrations/092_node_effort.js.map +1 -0
  183. package/daemon/dist/db/migrations/094_usage_samples_latest_indexes.d.ts +3 -0
  184. package/daemon/dist/db/migrations/094_usage_samples_latest_indexes.d.ts.map +1 -0
  185. package/daemon/dist/db/migrations/094_usage_samples_latest_indexes.js +12 -0
  186. package/daemon/dist/db/migrations/094_usage_samples_latest_indexes.js.map +1 -0
  187. package/daemon/dist/domain/activity-endpoint.d.ts.map +1 -1
  188. package/daemon/dist/domain/activity-endpoint.js +3 -1
  189. package/daemon/dist/domain/activity-endpoint.js.map +1 -1
  190. package/daemon/dist/domain/agent-activity-store.d.ts +3 -1
  191. package/daemon/dist/domain/agent-activity-store.d.ts.map +1 -1
  192. package/daemon/dist/domain/agent-activity-store.js +13 -3
  193. package/daemon/dist/domain/agent-activity-store.js.map +1 -1
  194. package/daemon/dist/domain/agent-images/agent-image-library-service.d.ts.map +1 -1
  195. package/daemon/dist/domain/agent-images/agent-image-library-service.js +76 -56
  196. package/daemon/dist/domain/agent-images/agent-image-library-service.js.map +1 -1
  197. package/daemon/dist/domain/agent-manifest.d.ts.map +1 -1
  198. package/daemon/dist/domain/agent-manifest.js +24 -3
  199. package/daemon/dist/domain/agent-manifest.js.map +1 -1
  200. package/daemon/dist/domain/bootstrap-orchestrator.d.ts.map +1 -1
  201. package/daemon/dist/domain/bootstrap-orchestrator.js +3 -2
  202. package/daemon/dist/domain/bootstrap-orchestrator.js.map +1 -1
  203. package/daemon/dist/domain/bundle-archive.d.ts.map +1 -1
  204. package/daemon/dist/domain/bundle-archive.js +25 -5
  205. package/daemon/dist/domain/bundle-archive.js.map +1 -1
  206. package/daemon/dist/domain/chat-repository.d.ts.map +1 -1
  207. package/daemon/dist/domain/chat-repository.js +3 -1
  208. package/daemon/dist/domain/chat-repository.js.map +1 -1
  209. package/daemon/dist/domain/checkpoint-store.d.ts.map +1 -1
  210. package/daemon/dist/domain/checkpoint-store.js +2 -2
  211. package/daemon/dist/domain/checkpoint-store.js.map +1 -1
  212. package/daemon/dist/domain/claim-service.d.ts +7 -0
  213. package/daemon/dist/domain/claim-service.d.ts.map +1 -1
  214. package/daemon/dist/domain/claim-service.js +6 -2
  215. package/daemon/dist/domain/claim-service.js.map +1 -1
  216. package/daemon/dist/domain/claude-compaction-enforcer.d.ts +35 -12
  217. package/daemon/dist/domain/claude-compaction-enforcer.d.ts.map +1 -1
  218. package/daemon/dist/domain/claude-compaction-enforcer.js +256 -128
  219. package/daemon/dist/domain/claude-compaction-enforcer.js.map +1 -1
  220. package/daemon/dist/domain/claude-managed-launch.d.ts +13 -0
  221. package/daemon/dist/domain/claude-managed-launch.d.ts.map +1 -1
  222. package/daemon/dist/domain/claude-managed-launch.js +31 -4
  223. package/daemon/dist/domain/claude-managed-launch.js.map +1 -1
  224. package/daemon/dist/domain/codex-daemon-support.d.ts +1 -1
  225. package/daemon/dist/domain/codex-daemon-support.d.ts.map +1 -1
  226. package/daemon/dist/domain/codex-daemon-support.js +2 -2
  227. package/daemon/dist/domain/codex-daemon-support.js.map +1 -1
  228. package/daemon/dist/domain/codex-network-default.d.ts +42 -0
  229. package/daemon/dist/domain/codex-network-default.d.ts.map +1 -0
  230. package/daemon/dist/domain/codex-network-default.js +230 -0
  231. package/daemon/dist/domain/codex-network-default.js.map +1 -0
  232. package/daemon/dist/domain/codex-profile-preflight.d.ts +1 -1
  233. package/daemon/dist/domain/codex-profile-preflight.d.ts.map +1 -1
  234. package/daemon/dist/domain/codex-profile-preflight.js +3 -3
  235. package/daemon/dist/domain/codex-profile-preflight.js.map +1 -1
  236. package/daemon/dist/domain/codex-thread-id.d.ts +4 -2
  237. package/daemon/dist/domain/codex-thread-id.d.ts.map +1 -1
  238. package/daemon/dist/domain/codex-thread-id.js +10 -6
  239. package/daemon/dist/domain/codex-thread-id.js.map +1 -1
  240. package/daemon/dist/domain/context-monitor.d.ts.map +1 -1
  241. package/daemon/dist/domain/context-monitor.js +2 -1
  242. package/daemon/dist/domain/context-monitor.js.map +1 -1
  243. package/daemon/dist/domain/context-packs/context-pack-library-service.d.ts.map +1 -1
  244. package/daemon/dist/domain/context-packs/context-pack-library-service.js +13 -2
  245. package/daemon/dist/domain/context-packs/context-pack-library-service.js.map +1 -1
  246. package/daemon/dist/domain/context-packs/profile-composer.d.ts +5 -0
  247. package/daemon/dist/domain/context-packs/profile-composer.d.ts.map +1 -1
  248. package/daemon/dist/domain/context-packs/profile-composer.js +30 -15
  249. package/daemon/dist/domain/context-packs/profile-composer.js.map +1 -1
  250. package/daemon/dist/domain/context-packs/profile-source-resolver.d.ts +10 -0
  251. package/daemon/dist/domain/context-packs/profile-source-resolver.d.ts.map +1 -1
  252. package/daemon/dist/domain/context-packs/profile-source-resolver.js +43 -8
  253. package/daemon/dist/domain/context-packs/profile-source-resolver.js.map +1 -1
  254. package/daemon/dist/domain/context-packs/seat-recap-store.d.ts.map +1 -1
  255. package/daemon/dist/domain/context-packs/seat-recap-store.js +73 -16
  256. package/daemon/dist/domain/context-packs/seat-recap-store.js.map +1 -1
  257. package/daemon/dist/domain/context-usage-store.d.ts +3 -0
  258. package/daemon/dist/domain/context-usage-store.d.ts.map +1 -1
  259. package/daemon/dist/domain/context-usage-store.js +4 -2
  260. package/daemon/dist/domain/context-usage-store.js.map +1 -1
  261. package/daemon/dist/domain/crash-cart-detect.d.ts.map +1 -1
  262. package/daemon/dist/domain/crash-cart-detect.js +2 -1
  263. package/daemon/dist/domain/crash-cart-detect.js.map +1 -1
  264. package/daemon/dist/domain/crash-cart-discovery.d.ts.map +1 -1
  265. package/daemon/dist/domain/crash-cart-discovery.js +4 -2
  266. package/daemon/dist/domain/crash-cart-discovery.js.map +1 -1
  267. package/daemon/dist/domain/current-work.d.ts +17 -0
  268. package/daemon/dist/domain/current-work.d.ts.map +1 -1
  269. package/daemon/dist/domain/current-work.js +46 -0
  270. package/daemon/dist/domain/current-work.js.map +1 -1
  271. package/daemon/dist/domain/cwd-resolution.js +1 -1
  272. package/daemon/dist/domain/cwd-resolution.js.map +1 -1
  273. package/daemon/dist/domain/daemon-url.d.ts +7 -0
  274. package/daemon/dist/domain/daemon-url.d.ts.map +1 -0
  275. package/daemon/dist/domain/daemon-url.js +12 -0
  276. package/daemon/dist/domain/daemon-url.js.map +1 -0
  277. package/daemon/dist/domain/discovery-types.d.ts +1 -1
  278. package/daemon/dist/domain/discovery-types.d.ts.map +1 -1
  279. package/daemon/dist/domain/event-bus.d.ts +1 -0
  280. package/daemon/dist/domain/event-bus.d.ts.map +1 -1
  281. package/daemon/dist/domain/event-bus.js +18 -7
  282. package/daemon/dist/domain/event-bus.js.map +1 -1
  283. package/daemon/dist/domain/execution-view.d.ts +3 -3
  284. package/daemon/dist/domain/execution-view.d.ts.map +1 -1
  285. package/daemon/dist/domain/execution-view.js +116 -93
  286. package/daemon/dist/domain/execution-view.js.map +1 -1
  287. package/daemon/dist/domain/gateway/operator-delivery-engine.d.ts +9 -7
  288. package/daemon/dist/domain/gateway/operator-delivery-engine.d.ts.map +1 -1
  289. package/daemon/dist/domain/gateway/operator-delivery-engine.js +38 -16
  290. package/daemon/dist/domain/gateway/operator-delivery-engine.js.map +1 -1
  291. package/daemon/dist/domain/gateway/slack/inbound.d.ts +71 -3
  292. package/daemon/dist/domain/gateway/slack/inbound.d.ts.map +1 -1
  293. package/daemon/dist/domain/gateway/slack/inbound.js +145 -11
  294. package/daemon/dist/domain/gateway/slack/inbound.js.map +1 -1
  295. package/daemon/dist/domain/gateway/slack/manifest.js +1 -1
  296. package/daemon/dist/domain/gateway/slack/manifest.js.map +1 -1
  297. package/daemon/dist/domain/gateway/slack/message.d.ts +17 -0
  298. package/daemon/dist/domain/gateway/slack/message.d.ts.map +1 -1
  299. package/daemon/dist/domain/gateway/slack/message.js +77 -3
  300. package/daemon/dist/domain/gateway/slack/message.js.map +1 -1
  301. package/daemon/dist/domain/gateway/slack/outbound-driver.d.ts +3 -0
  302. package/daemon/dist/domain/gateway/slack/outbound-driver.d.ts.map +1 -1
  303. package/daemon/dist/domain/gateway/slack/outbound-driver.js +2 -0
  304. package/daemon/dist/domain/gateway/slack/outbound-driver.js.map +1 -1
  305. package/daemon/dist/domain/gateway/slack/queue-access.d.ts +3 -0
  306. package/daemon/dist/domain/gateway/slack/queue-access.d.ts.map +1 -1
  307. package/daemon/dist/domain/gateway/slack/queue-access.js +15 -5
  308. package/daemon/dist/domain/gateway/slack/queue-access.js.map +1 -1
  309. package/daemon/dist/domain/gateway/slack/secrets.d.ts.map +1 -1
  310. package/daemon/dist/domain/gateway/slack/secrets.js +5 -4
  311. package/daemon/dist/domain/gateway/slack/secrets.js.map +1 -1
  312. package/daemon/dist/domain/gateway/slack/slack-api.d.ts +16 -10
  313. package/daemon/dist/domain/gateway/slack/slack-api.d.ts.map +1 -1
  314. package/daemon/dist/domain/gateway/slack/slack-api.js +91 -23
  315. package/daemon/dist/domain/gateway/slack/slack-api.js.map +1 -1
  316. package/daemon/dist/domain/gateway/slack/slack-delivery.d.ts +33 -10
  317. package/daemon/dist/domain/gateway/slack/slack-delivery.d.ts.map +1 -1
  318. package/daemon/dist/domain/gateway/slack/slack-delivery.js +107 -26
  319. package/daemon/dist/domain/gateway/slack/slack-delivery.js.map +1 -1
  320. package/daemon/dist/domain/gateway/slack/slack-subsystem.d.ts +1 -1
  321. package/daemon/dist/domain/gateway/slack/slack-subsystem.d.ts.map +1 -1
  322. package/daemon/dist/domain/gateway/slack/slack-subsystem.js +114 -27
  323. package/daemon/dist/domain/gateway/slack/slack-subsystem.js.map +1 -1
  324. package/daemon/dist/domain/gateway/slack/socket-inbound.d.ts.map +1 -1
  325. package/daemon/dist/domain/gateway/slack/socket-inbound.js +3 -0
  326. package/daemon/dist/domain/gateway/slack/socket-inbound.js.map +1 -1
  327. package/daemon/dist/domain/gateway/slack/state-store.d.ts +3 -0
  328. package/daemon/dist/domain/gateway/slack/state-store.d.ts.map +1 -1
  329. package/daemon/dist/domain/gateway/slack/state-store.js +18 -0
  330. package/daemon/dist/domain/gateway/slack/state-store.js.map +1 -1
  331. package/daemon/dist/domain/gateway/slack/thread-routing.d.ts.map +1 -1
  332. package/daemon/dist/domain/gateway/slack/thread-routing.js +7 -2
  333. package/daemon/dist/domain/gateway/slack/thread-routing.js.map +1 -1
  334. package/daemon/dist/domain/gateway/slack/thread-seat-map.d.ts +3 -0
  335. package/daemon/dist/domain/gateway/slack/thread-seat-map.d.ts.map +1 -1
  336. package/daemon/dist/domain/gateway/slack/thread-seat-map.js +14 -2
  337. package/daemon/dist/domain/gateway/slack/thread-seat-map.js.map +1 -1
  338. package/daemon/dist/domain/graph-projection.d.ts.map +1 -1
  339. package/daemon/dist/domain/graph-projection.js +1 -0
  340. package/daemon/dist/domain/graph-projection.js.map +1 -1
  341. package/daemon/dist/domain/health-checkpoints.d.ts +2 -0
  342. package/daemon/dist/domain/health-checkpoints.d.ts.map +1 -1
  343. package/daemon/dist/domain/health-checkpoints.js +2 -0
  344. package/daemon/dist/domain/health-checkpoints.js.map +1 -1
  345. package/daemon/dist/domain/health-detectors.d.ts +32 -1
  346. package/daemon/dist/domain/health-detectors.d.ts.map +1 -1
  347. package/daemon/dist/domain/health-detectors.js +40 -9
  348. package/daemon/dist/domain/health-detectors.js.map +1 -1
  349. package/daemon/dist/domain/health-diagnosis.d.ts +3 -1
  350. package/daemon/dist/domain/health-diagnosis.d.ts.map +1 -1
  351. package/daemon/dist/domain/health-diagnosis.js +6 -3
  352. package/daemon/dist/domain/health-diagnosis.js.map +1 -1
  353. package/daemon/dist/domain/health-passive-ceremony.d.ts +5 -1
  354. package/daemon/dist/domain/health-passive-ceremony.d.ts.map +1 -1
  355. package/daemon/dist/domain/health-passive-ceremony.js +20 -4
  356. package/daemon/dist/domain/health-passive-ceremony.js.map +1 -1
  357. package/daemon/dist/domain/hosts/remote-daemon-http.d.ts +3 -1
  358. package/daemon/dist/domain/hosts/remote-daemon-http.d.ts.map +1 -1
  359. package/daemon/dist/domain/hosts/remote-daemon-http.js +10 -3
  360. package/daemon/dist/domain/hosts/remote-daemon-http.js.map +1 -1
  361. package/daemon/dist/domain/human-questions.d.ts +41 -0
  362. package/daemon/dist/domain/human-questions.d.ts.map +1 -0
  363. package/daemon/dist/domain/human-questions.js +81 -0
  364. package/daemon/dist/domain/human-questions.js.map +1 -0
  365. package/daemon/dist/domain/markdown-address.js +1 -1
  366. package/daemon/dist/domain/markdown-address.js.map +1 -1
  367. package/daemon/dist/domain/mission-control/audit-browse.d.ts +5 -0
  368. package/daemon/dist/domain/mission-control/audit-browse.d.ts.map +1 -1
  369. package/daemon/dist/domain/mission-control/audit-browse.js +11 -1
  370. package/daemon/dist/domain/mission-control/audit-browse.js.map +1 -1
  371. package/daemon/dist/domain/mission-control/mission-control-fleet-cli-capability.d.ts +25 -63
  372. package/daemon/dist/domain/mission-control/mission-control-fleet-cli-capability.d.ts.map +1 -1
  373. package/daemon/dist/domain/mission-control/mission-control-fleet-cli-capability.js +34 -100
  374. package/daemon/dist/domain/mission-control/mission-control-fleet-cli-capability.js.map +1 -1
  375. package/daemon/dist/domain/mission-control/mission-control-read-layer.d.ts +1 -0
  376. package/daemon/dist/domain/mission-control/mission-control-read-layer.d.ts.map +1 -1
  377. package/daemon/dist/domain/mission-control/mission-control-read-layer.js +6 -3
  378. package/daemon/dist/domain/mission-control/mission-control-read-layer.js.map +1 -1
  379. package/daemon/dist/domain/mission-control/notification-adapter-ntfy.d.ts +5 -0
  380. package/daemon/dist/domain/mission-control/notification-adapter-ntfy.d.ts.map +1 -1
  381. package/daemon/dist/domain/mission-control/notification-adapter-ntfy.js +33 -2
  382. package/daemon/dist/domain/mission-control/notification-adapter-ntfy.js.map +1 -1
  383. package/daemon/dist/domain/mission-control/notification-adapter-types.d.ts +2 -0
  384. package/daemon/dist/domain/mission-control/notification-adapter-types.d.ts.map +1 -1
  385. package/daemon/dist/domain/mission-control/notification-adapter-webhook.d.ts +4 -0
  386. package/daemon/dist/domain/mission-control/notification-adapter-webhook.d.ts.map +1 -1
  387. package/daemon/dist/domain/mission-control/notification-adapter-webhook.js +33 -2
  388. package/daemon/dist/domain/mission-control/notification-adapter-webhook.js.map +1 -1
  389. package/daemon/dist/domain/mission-control/outbound-url-validator.d.ts +27 -0
  390. package/daemon/dist/domain/mission-control/outbound-url-validator.d.ts.map +1 -0
  391. package/daemon/dist/domain/mission-control/outbound-url-validator.js +60 -0
  392. package/daemon/dist/domain/mission-control/outbound-url-validator.js.map +1 -0
  393. package/daemon/dist/domain/native-process-lineage.d.ts +9 -2
  394. package/daemon/dist/domain/native-process-lineage.d.ts.map +1 -1
  395. package/daemon/dist/domain/native-process-lineage.js +104 -11
  396. package/daemon/dist/domain/native-process-lineage.js.map +1 -1
  397. package/daemon/dist/domain/native-resume-probe.d.ts +5 -1
  398. package/daemon/dist/domain/native-resume-probe.d.ts.map +1 -1
  399. package/daemon/dist/domain/native-resume-probe.js +17 -4
  400. package/daemon/dist/domain/native-resume-probe.js.map +1 -1
  401. package/daemon/dist/domain/node-inventory.d.ts.map +1 -1
  402. package/daemon/dist/domain/node-inventory.js +91 -44
  403. package/daemon/dist/domain/node-inventory.js.map +1 -1
  404. package/daemon/dist/domain/node-launcher.d.ts +4 -0
  405. package/daemon/dist/domain/node-launcher.d.ts.map +1 -1
  406. package/daemon/dist/domain/node-launcher.js +4 -1
  407. package/daemon/dist/domain/node-launcher.js.map +1 -1
  408. package/daemon/dist/domain/periodic-snapshot-scheduler.d.ts +1 -0
  409. package/daemon/dist/domain/periodic-snapshot-scheduler.d.ts.map +1 -1
  410. package/daemon/dist/domain/periodic-snapshot-scheduler.js +25 -0
  411. package/daemon/dist/domain/periodic-snapshot-scheduler.js.map +1 -1
  412. package/daemon/dist/domain/permission-drift.d.ts +1 -0
  413. package/daemon/dist/domain/permission-drift.d.ts.map +1 -1
  414. package/daemon/dist/domain/permission-drift.js +13 -1
  415. package/daemon/dist/domain/permission-drift.js.map +1 -1
  416. package/daemon/dist/domain/plugin-discovery-service.d.ts +5 -6
  417. package/daemon/dist/domain/plugin-discovery-service.d.ts.map +1 -1
  418. package/daemon/dist/domain/plugin-discovery-service.js +14 -8
  419. package/daemon/dist/domain/plugin-discovery-service.js.map +1 -1
  420. package/daemon/dist/domain/pod-bundle-assembler.d.ts +6 -2
  421. package/daemon/dist/domain/pod-bundle-assembler.d.ts.map +1 -1
  422. package/daemon/dist/domain/pod-bundle-assembler.js +58 -15
  423. package/daemon/dist/domain/pod-bundle-assembler.js.map +1 -1
  424. package/daemon/dist/domain/policies/parked-owner-consumer.d.ts +6 -0
  425. package/daemon/dist/domain/policies/parked-owner-consumer.d.ts.map +1 -1
  426. package/daemon/dist/domain/policies/parked-owner-consumer.js +11 -0
  427. package/daemon/dist/domain/policies/parked-owner-consumer.js.map +1 -1
  428. package/daemon/dist/domain/profile-resolver.d.ts +1 -0
  429. package/daemon/dist/domain/profile-resolver.d.ts.map +1 -1
  430. package/daemon/dist/domain/profile-resolver.js +7 -0
  431. package/daemon/dist/domain/profile-resolver.js.map +1 -1
  432. package/daemon/dist/domain/project-lifecycle-compiler.d.ts.map +1 -1
  433. package/daemon/dist/domain/project-lifecycle-compiler.js +10 -2
  434. package/daemon/dist/domain/project-lifecycle-compiler.js.map +1 -1
  435. package/daemon/dist/domain/projection-planner.d.ts.map +1 -1
  436. package/daemon/dist/domain/projection-planner.js +14 -5
  437. package/daemon/dist/domain/projection-planner.js.map +1 -1
  438. package/daemon/dist/domain/proof/judgments.d.ts +3 -0
  439. package/daemon/dist/domain/proof/judgments.d.ts.map +1 -1
  440. package/daemon/dist/domain/proof/judgments.js +13 -8
  441. package/daemon/dist/domain/proof/judgments.js.map +1 -1
  442. package/daemon/dist/domain/proof/source-watch.d.ts.map +1 -1
  443. package/daemon/dist/domain/proof/source-watch.js +45 -27
  444. package/daemon/dist/domain/proof/source-watch.js.map +1 -1
  445. package/daemon/dist/domain/provider/host-usage-rollup.js +9 -5
  446. package/daemon/dist/domain/provider/host-usage-rollup.js.map +1 -1
  447. package/daemon/dist/domain/ps-projection.d.ts +22 -3
  448. package/daemon/dist/domain/ps-projection.d.ts.map +1 -1
  449. package/daemon/dist/domain/ps-projection.js +50 -11
  450. package/daemon/dist/domain/ps-projection.js.map +1 -1
  451. package/daemon/dist/domain/queue-recovery.d.ts.map +1 -1
  452. package/daemon/dist/domain/queue-recovery.js +7 -1
  453. package/daemon/dist/domain/queue-recovery.js.map +1 -1
  454. package/daemon/dist/domain/queue-repository.d.ts +98 -6
  455. package/daemon/dist/domain/queue-repository.d.ts.map +1 -1
  456. package/daemon/dist/domain/queue-repository.js +301 -33
  457. package/daemon/dist/domain/queue-repository.js.map +1 -1
  458. package/daemon/dist/domain/queue-stuck-sweep.d.ts +3 -0
  459. package/daemon/dist/domain/queue-stuck-sweep.d.ts.map +1 -1
  460. package/daemon/dist/domain/queue-stuck-sweep.js +111 -26
  461. package/daemon/dist/domain/queue-stuck-sweep.js.map +1 -1
  462. package/daemon/dist/domain/queue-wake-ladder.d.ts +8 -7
  463. package/daemon/dist/domain/queue-wake-ladder.d.ts.map +1 -1
  464. package/daemon/dist/domain/queue-wake-ladder.js +278 -19
  465. package/daemon/dist/domain/queue-wake-ladder.js.map +1 -1
  466. package/daemon/dist/domain/queue-wake-repository.d.ts +10 -9
  467. package/daemon/dist/domain/queue-wake-repository.d.ts.map +1 -1
  468. package/daemon/dist/domain/queue-wake-repository.js +31 -11
  469. package/daemon/dist/domain/queue-wake-repository.js.map +1 -1
  470. package/daemon/dist/domain/reply-to-choice.d.ts +26 -0
  471. package/daemon/dist/domain/reply-to-choice.d.ts.map +1 -0
  472. package/daemon/dist/domain/reply-to-choice.js +45 -0
  473. package/daemon/dist/domain/reply-to-choice.js.map +1 -0
  474. package/daemon/dist/domain/restore-check-service.d.ts +27 -8
  475. package/daemon/dist/domain/restore-check-service.d.ts.map +1 -1
  476. package/daemon/dist/domain/restore-check-service.js +202 -126
  477. package/daemon/dist/domain/restore-check-service.js.map +1 -1
  478. package/daemon/dist/domain/restore-orchestrator.d.ts +3 -2
  479. package/daemon/dist/domain/restore-orchestrator.d.ts.map +1 -1
  480. package/daemon/dist/domain/restore-orchestrator.js +65 -208
  481. package/daemon/dist/domain/restore-orchestrator.js.map +1 -1
  482. package/daemon/dist/domain/restore-plan-preview.d.ts.map +1 -1
  483. package/daemon/dist/domain/restore-plan-preview.js +2 -6
  484. package/daemon/dist/domain/restore-plan-preview.js.map +1 -1
  485. package/daemon/dist/domain/restore-preconditions.d.ts +12 -0
  486. package/daemon/dist/domain/restore-preconditions.d.ts.map +1 -0
  487. package/daemon/dist/domain/restore-preconditions.js +202 -0
  488. package/daemon/dist/domain/restore-preconditions.js.map +1 -0
  489. package/daemon/dist/domain/resume-metadata-refresher.d.ts +20 -4
  490. package/daemon/dist/domain/resume-metadata-refresher.d.ts.map +1 -1
  491. package/daemon/dist/domain/resume-metadata-refresher.js +70 -8
  492. package/daemon/dist/domain/resume-metadata-refresher.js.map +1 -1
  493. package/daemon/dist/domain/resume-token-capture.d.ts +22 -1
  494. package/daemon/dist/domain/resume-token-capture.d.ts.map +1 -1
  495. package/daemon/dist/domain/resume-token-capture.js +32 -4
  496. package/daemon/dist/domain/resume-token-capture.js.map +1 -1
  497. package/daemon/dist/domain/resume-token-validation.d.ts +1 -1
  498. package/daemon/dist/domain/resume-token-validation.d.ts.map +1 -1
  499. package/daemon/dist/domain/resume-token-validation.js +24 -24
  500. package/daemon/dist/domain/resume-token-validation.js.map +1 -1
  501. package/daemon/dist/domain/rig-repository.d.ts +3 -0
  502. package/daemon/dist/domain/rig-repository.d.ts.map +1 -1
  503. package/daemon/dist/domain/rig-repository.js +21 -0
  504. package/daemon/dist/domain/rig-repository.js.map +1 -1
  505. package/daemon/dist/domain/rig-teardown.d.ts +3 -0
  506. package/daemon/dist/domain/rig-teardown.d.ts.map +1 -1
  507. package/daemon/dist/domain/rig-teardown.js +96 -19
  508. package/daemon/dist/domain/rig-teardown.js.map +1 -1
  509. package/daemon/dist/domain/rigspec-codec.d.ts.map +1 -1
  510. package/daemon/dist/domain/rigspec-codec.js +6 -0
  511. package/daemon/dist/domain/rigspec-codec.js.map +1 -1
  512. package/daemon/dist/domain/rigspec-exporter.d.ts.map +1 -1
  513. package/daemon/dist/domain/rigspec-exporter.js +4 -0
  514. package/daemon/dist/domain/rigspec-exporter.js.map +1 -1
  515. package/daemon/dist/domain/rigspec-instantiator.d.ts.map +1 -1
  516. package/daemon/dist/domain/rigspec-instantiator.js +37 -8
  517. package/daemon/dist/domain/rigspec-instantiator.js.map +1 -1
  518. package/daemon/dist/domain/rigspec-preflight.d.ts +2 -0
  519. package/daemon/dist/domain/rigspec-preflight.d.ts.map +1 -1
  520. package/daemon/dist/domain/rigspec-preflight.js +20 -5
  521. package/daemon/dist/domain/rigspec-preflight.js.map +1 -1
  522. package/daemon/dist/domain/rigspec-schema.d.ts.map +1 -1
  523. package/daemon/dist/domain/rigspec-schema.js +14 -2
  524. package/daemon/dist/domain/rigspec-schema.js.map +1 -1
  525. package/daemon/dist/domain/runtime-adapter.d.ts +7 -0
  526. package/daemon/dist/domain/runtime-adapter.d.ts.map +1 -1
  527. package/daemon/dist/domain/runtime-adapter.js.map +1 -1
  528. package/daemon/dist/domain/runtime-verifier.d.ts +3 -1
  529. package/daemon/dist/domain/runtime-verifier.d.ts.map +1 -1
  530. package/daemon/dist/domain/runtime-verifier.js +10 -1
  531. package/daemon/dist/domain/runtime-verifier.js.map +1 -1
  532. package/daemon/dist/domain/scope/scaffold-placeholder.d.ts +4 -4
  533. package/daemon/dist/domain/scope/scaffold-placeholder.d.ts.map +1 -1
  534. package/daemon/dist/domain/scope/scaffold-placeholder.js +4 -4
  535. package/daemon/dist/domain/scope/scaffold-placeholder.js.map +1 -1
  536. package/daemon/dist/domain/seat-activity-service.d.ts +9 -4
  537. package/daemon/dist/domain/seat-activity-service.d.ts.map +1 -1
  538. package/daemon/dist/domain/seat-activity-service.js +73 -22
  539. package/daemon/dist/domain/seat-activity-service.js.map +1 -1
  540. package/daemon/dist/domain/seat-attention-reconciler.d.ts +1 -0
  541. package/daemon/dist/domain/seat-attention-reconciler.d.ts.map +1 -1
  542. package/daemon/dist/domain/seat-attention-reconciler.js +32 -9
  543. package/daemon/dist/domain/seat-attention-reconciler.js.map +1 -1
  544. package/daemon/dist/domain/seat-handover-service.d.ts +6 -0
  545. package/daemon/dist/domain/seat-handover-service.d.ts.map +1 -1
  546. package/daemon/dist/domain/seat-handover-service.js +8 -5
  547. package/daemon/dist/domain/seat-handover-service.js.map +1 -1
  548. package/daemon/dist/domain/seat-identity-reconciler.d.ts +1 -1
  549. package/daemon/dist/domain/seat-identity-reconciler.d.ts.map +1 -1
  550. package/daemon/dist/domain/seat-identity-reconciler.js +99 -18
  551. package/daemon/dist/domain/seat-identity-reconciler.js.map +1 -1
  552. package/daemon/dist/domain/seat-launch-environment.d.ts +26 -0
  553. package/daemon/dist/domain/seat-launch-environment.d.ts.map +1 -0
  554. package/daemon/dist/domain/seat-launch-environment.js +178 -0
  555. package/daemon/dist/domain/seat-launch-environment.js.map +1 -0
  556. package/daemon/dist/domain/seat-lifecycle-service.d.ts +7 -0
  557. package/daemon/dist/domain/seat-lifecycle-service.d.ts.map +1 -1
  558. package/daemon/dist/domain/seat-lifecycle-service.js +37 -2
  559. package/daemon/dist/domain/seat-lifecycle-service.js.map +1 -1
  560. package/daemon/dist/domain/seat-status-service.d.ts.map +1 -1
  561. package/daemon/dist/domain/seat-status-service.js +4 -2
  562. package/daemon/dist/domain/seat-status-service.js.map +1 -1
  563. package/daemon/dist/domain/seat-structural-activity-service.d.ts +5 -4
  564. package/daemon/dist/domain/seat-structural-activity-service.d.ts.map +1 -1
  565. package/daemon/dist/domain/seat-structural-activity-service.js +23 -9
  566. package/daemon/dist/domain/seat-structural-activity-service.js.map +1 -1
  567. package/daemon/dist/domain/seat-switch-client-service.d.ts.map +1 -1
  568. package/daemon/dist/domain/seat-switch-client-service.js +3 -2
  569. package/daemon/dist/domain/seat-switch-client-service.js.map +1 -1
  570. package/daemon/dist/domain/services-readiness.d.ts.map +1 -1
  571. package/daemon/dist/domain/services-readiness.js +6 -2
  572. package/daemon/dist/domain/services-readiness.js.map +1 -1
  573. package/daemon/dist/domain/session-fingerprinter.d.ts.map +1 -1
  574. package/daemon/dist/domain/session-fingerprinter.js +16 -1
  575. package/daemon/dist/domain/session-fingerprinter.js.map +1 -1
  576. package/daemon/dist/domain/session-name.d.ts.map +1 -1
  577. package/daemon/dist/domain/session-name.js +6 -0
  578. package/daemon/dist/domain/session-name.js.map +1 -1
  579. package/daemon/dist/domain/session-registry.d.ts +3 -0
  580. package/daemon/dist/domain/session-registry.d.ts.map +1 -1
  581. package/daemon/dist/domain/session-registry.js +7 -0
  582. package/daemon/dist/domain/session-registry.js.map +1 -1
  583. package/daemon/dist/domain/session-transport.d.ts +30 -1
  584. package/daemon/dist/domain/session-transport.d.ts.map +1 -1
  585. package/daemon/dist/domain/session-transport.js +290 -145
  586. package/daemon/dist/domain/session-transport.js.map +1 -1
  587. package/daemon/dist/domain/snapshot-repository.d.ts +2 -1
  588. package/daemon/dist/domain/snapshot-repository.d.ts.map +1 -1
  589. package/daemon/dist/domain/snapshot-repository.js +39 -15
  590. package/daemon/dist/domain/snapshot-repository.js.map +1 -1
  591. package/daemon/dist/domain/spec-library-workflow-scanner.d.ts +1 -1
  592. package/daemon/dist/domain/spec-library-workflow-scanner.d.ts.map +1 -1
  593. package/daemon/dist/domain/spec-library-workflow-scanner.js +70 -11
  594. package/daemon/dist/domain/spec-library-workflow-scanner.js.map +1 -1
  595. package/daemon/dist/domain/spec-validation-service.d.ts +6 -0
  596. package/daemon/dist/domain/spec-validation-service.d.ts.map +1 -1
  597. package/daemon/dist/domain/spec-validation-service.js +16 -1
  598. package/daemon/dist/domain/spec-validation-service.js.map +1 -1
  599. package/daemon/dist/domain/startup-orchestrator.d.ts +8 -0
  600. package/daemon/dist/domain/startup-orchestrator.d.ts.map +1 -1
  601. package/daemon/dist/domain/startup-orchestrator.js +148 -37
  602. package/daemon/dist/domain/startup-orchestrator.js.map +1 -1
  603. package/daemon/dist/domain/startup-submission-evidence.d.ts +41 -0
  604. package/daemon/dist/domain/startup-submission-evidence.d.ts.map +1 -0
  605. package/daemon/dist/domain/startup-submission-evidence.js +67 -0
  606. package/daemon/dist/domain/startup-submission-evidence.js.map +1 -0
  607. package/daemon/dist/domain/startup-validation.d.ts.map +1 -1
  608. package/daemon/dist/domain/startup-validation.js +4 -0
  609. package/daemon/dist/domain/startup-validation.js.map +1 -1
  610. package/daemon/dist/domain/successor-session-launcher.d.ts +5 -0
  611. package/daemon/dist/domain/successor-session-launcher.d.ts.map +1 -1
  612. package/daemon/dist/domain/successor-session-launcher.js +8 -6
  613. package/daemon/dist/domain/successor-session-launcher.js.map +1 -1
  614. package/daemon/dist/domain/terminal/view-composer.d.ts.map +1 -1
  615. package/daemon/dist/domain/terminal/view-composer.js +2 -1
  616. package/daemon/dist/domain/terminal/view-composer.js.map +1 -1
  617. package/daemon/dist/domain/tmux-discovery-scanner.d.ts.map +1 -1
  618. package/daemon/dist/domain/tmux-discovery-scanner.js +7 -2
  619. package/daemon/dist/domain/tmux-discovery-scanner.js.map +1 -1
  620. package/daemon/dist/domain/tmux-option-defaults.d.ts.map +1 -1
  621. package/daemon/dist/domain/tmux-option-defaults.js +5 -0
  622. package/daemon/dist/domain/tmux-option-defaults.js.map +1 -1
  623. package/daemon/dist/domain/transcript-capture.d.ts.map +1 -1
  624. package/daemon/dist/domain/transcript-capture.js +1 -1
  625. package/daemon/dist/domain/transcript-capture.js.map +1 -1
  626. package/daemon/dist/domain/transcript-rotation.d.ts +26 -5
  627. package/daemon/dist/domain/transcript-rotation.d.ts.map +1 -1
  628. package/daemon/dist/domain/transcript-rotation.js +176 -25
  629. package/daemon/dist/domain/transcript-rotation.js.map +1 -1
  630. package/daemon/dist/domain/transcript-store.d.ts +1 -1
  631. package/daemon/dist/domain/transcript-store.d.ts.map +1 -1
  632. package/daemon/dist/domain/transcript-store.js +11 -4
  633. package/daemon/dist/domain/transcript-store.js.map +1 -1
  634. package/daemon/dist/domain/types.d.ts +18 -5
  635. package/daemon/dist/domain/types.d.ts.map +1 -1
  636. package/daemon/dist/domain/types.js.map +1 -1
  637. package/daemon/dist/domain/usage-series.d.ts.map +1 -1
  638. package/daemon/dist/domain/usage-series.js +11 -6
  639. package/daemon/dist/domain/usage-series.js.map +1 -1
  640. package/daemon/dist/domain/user-settings/settings-store.d.ts +2 -0
  641. package/daemon/dist/domain/user-settings/settings-store.d.ts.map +1 -1
  642. package/daemon/dist/domain/user-settings/settings-store.js +88 -6
  643. package/daemon/dist/domain/user-settings/settings-store.js.map +1 -1
  644. package/daemon/dist/domain/view-projector.d.ts +11 -6
  645. package/daemon/dist/domain/view-projector.d.ts.map +1 -1
  646. package/daemon/dist/domain/view-projector.js +2 -6
  647. package/daemon/dist/domain/view-projector.js.map +1 -1
  648. package/daemon/dist/domain/workflow-spec-cache.d.ts +29 -7
  649. package/daemon/dist/domain/workflow-spec-cache.d.ts.map +1 -1
  650. package/daemon/dist/domain/workflow-spec-cache.js +103 -14
  651. package/daemon/dist/domain/workflow-spec-cache.js.map +1 -1
  652. package/daemon/dist/domain/workspace/workspace-doctor.js +1 -1
  653. package/daemon/dist/domain/workspace/workspace-doctor.js.map +1 -1
  654. package/daemon/dist/domain/workspace/workspace-resolver.js +1 -1
  655. package/daemon/dist/domain/workspace/workspace-resolver.js.map +1 -1
  656. package/daemon/dist/health-detectors-surface.d.ts +1 -1
  657. package/daemon/dist/health-detectors-surface.d.ts.map +1 -1
  658. package/daemon/dist/health-detectors-surface.js.map +1 -1
  659. package/daemon/dist/index.d.ts +4 -4
  660. package/daemon/dist/index.d.ts.map +1 -1
  661. package/daemon/dist/index.js +11 -7
  662. package/daemon/dist/index.js.map +1 -1
  663. package/daemon/dist/middleware/json-body-error.d.ts +17 -0
  664. package/daemon/dist/middleware/json-body-error.d.ts.map +1 -0
  665. package/daemon/dist/middleware/json-body-error.js +42 -0
  666. package/daemon/dist/middleware/json-body-error.js.map +1 -0
  667. package/daemon/dist/routes/activity.d.ts.map +1 -1
  668. package/daemon/dist/routes/activity.js +85 -6
  669. package/daemon/dist/routes/activity.js.map +1 -1
  670. package/daemon/dist/routes/attention.d.ts.map +1 -1
  671. package/daemon/dist/routes/attention.js +7 -1
  672. package/daemon/dist/routes/attention.js.map +1 -1
  673. package/daemon/dist/routes/bundles.js +32 -3
  674. package/daemon/dist/routes/bundles.js.map +1 -1
  675. package/daemon/dist/routes/compaction.d.ts.map +1 -1
  676. package/daemon/dist/routes/compaction.js +30 -2
  677. package/daemon/dist/routes/compaction.js.map +1 -1
  678. package/daemon/dist/routes/context-packs.d.ts.map +1 -1
  679. package/daemon/dist/routes/context-packs.js +10 -2
  680. package/daemon/dist/routes/context-packs.js.map +1 -1
  681. package/daemon/dist/routes/files.js +2 -2
  682. package/daemon/dist/routes/files.js.map +1 -1
  683. package/daemon/dist/routes/gateway.d.ts.map +1 -1
  684. package/daemon/dist/routes/gateway.js +6 -1
  685. package/daemon/dist/routes/gateway.js.map +1 -1
  686. package/daemon/dist/routes/hosts.d.ts.map +1 -1
  687. package/daemon/dist/routes/hosts.js +51 -12
  688. package/daemon/dist/routes/hosts.js.map +1 -1
  689. package/daemon/dist/routes/mission-control.d.ts.map +1 -1
  690. package/daemon/dist/routes/mission-control.js +6 -2
  691. package/daemon/dist/routes/mission-control.js.map +1 -1
  692. package/daemon/dist/routes/missions.d.ts.map +1 -1
  693. package/daemon/dist/routes/missions.js +17 -5
  694. package/daemon/dist/routes/missions.js.map +1 -1
  695. package/daemon/dist/routes/plugins.d.ts.map +1 -1
  696. package/daemon/dist/routes/plugins.js +5 -1
  697. package/daemon/dist/routes/plugins.js.map +1 -1
  698. package/daemon/dist/routes/proof.d.ts.map +1 -1
  699. package/daemon/dist/routes/proof.js +9 -2
  700. package/daemon/dist/routes/proof.js.map +1 -1
  701. package/daemon/dist/routes/ps.d.ts.map +1 -1
  702. package/daemon/dist/routes/ps.js +18 -0
  703. package/daemon/dist/routes/ps.js.map +1 -1
  704. package/daemon/dist/routes/queue.d.ts.map +1 -1
  705. package/daemon/dist/routes/queue.js +150 -67
  706. package/daemon/dist/routes/queue.js.map +1 -1
  707. package/daemon/dist/routes/restore-check.d.ts.map +1 -1
  708. package/daemon/dist/routes/restore-check.js +40 -1
  709. package/daemon/dist/routes/restore-check.js.map +1 -1
  710. package/daemon/dist/routes/rigs.js +1 -1
  711. package/daemon/dist/routes/rigs.js.map +1 -1
  712. package/daemon/dist/routes/rigspec.d.ts.map +1 -1
  713. package/daemon/dist/routes/rigspec.js +7 -10
  714. package/daemon/dist/routes/rigspec.js.map +1 -1
  715. package/daemon/dist/routes/seat.d.ts.map +1 -1
  716. package/daemon/dist/routes/seat.js +11 -0
  717. package/daemon/dist/routes/seat.js.map +1 -1
  718. package/daemon/dist/routes/sessions.js +1 -1
  719. package/daemon/dist/routes/sessions.js.map +1 -1
  720. package/daemon/dist/routes/telemetry.d.ts.map +1 -1
  721. package/daemon/dist/routes/telemetry.js +6 -1
  722. package/daemon/dist/routes/telemetry.js.map +1 -1
  723. package/daemon/dist/routes/terminal-ws.d.ts +1 -2
  724. package/daemon/dist/routes/terminal-ws.d.ts.map +1 -1
  725. package/daemon/dist/routes/terminal-ws.js +1 -2
  726. package/daemon/dist/routes/terminal-ws.js.map +1 -1
  727. package/daemon/dist/routes/up.js +2 -1
  728. package/daemon/dist/routes/up.js.map +1 -1
  729. package/daemon/dist/routes/views.js +2 -2
  730. package/daemon/dist/routes/views.js.map +1 -1
  731. package/daemon/dist/server.d.ts +2 -0
  732. package/daemon/dist/server.d.ts.map +1 -1
  733. package/daemon/dist/server.js +7 -2
  734. package/daemon/dist/server.js.map +1 -1
  735. package/daemon/dist/spec-validation-surface.d.ts +2 -0
  736. package/daemon/dist/spec-validation-surface.d.ts.map +1 -0
  737. package/daemon/dist/spec-validation-surface.js +2 -0
  738. package/daemon/dist/spec-validation-surface.js.map +1 -0
  739. package/daemon/dist/startup.d.ts +1 -1
  740. package/daemon/dist/startup.d.ts.map +1 -1
  741. package/daemon/dist/startup.js +137 -50
  742. package/daemon/dist/startup.js.map +1 -1
  743. package/daemon/dist/terminal/TerminalSessionBroker.d.ts +1 -0
  744. package/daemon/dist/terminal/TerminalSessionBroker.d.ts.map +1 -1
  745. package/daemon/dist/terminal/TerminalSessionBroker.js +8 -1
  746. package/daemon/dist/terminal/TerminalSessionBroker.js.map +1 -1
  747. package/daemon/docs/reference/agent-spec.md +36 -1
  748. package/daemon/docs/reference/agent-startup-guide.md +81 -2
  749. package/daemon/docs/reference/browser-access.md +4 -1
  750. package/daemon/docs/reference/developing.md +17 -9
  751. package/daemon/docs/reference/getting-started.md +7 -2
  752. package/daemon/docs/reference/health-diagnosis.md +10 -3
  753. package/daemon/docs/reference/help.md +9 -4
  754. package/daemon/docs/reference/host-resources.md +60 -0
  755. package/daemon/docs/reference/instance-layout.md +11 -0
  756. package/daemon/docs/reference/rig-spec.md +32 -5
  757. package/daemon/docs/reference/sdlc-conventions.md +6 -3
  758. package/daemon/docs/reference/slack-app-setup.md +6 -0
  759. package/daemon/specs/agents/shared/agent.yaml +1 -1
  760. package/daemon/specs/agents/shared/skills/core/messaging-the-human/SKILL.md +24 -0
  761. package/daemon/specs/agents/shared/skills/core/openrig-skills/SKILL.md +6 -0
  762. package/daemon/specs/agents/shared/skills/core/topology-mutation-and-seat-management/SKILL.md +24 -3
  763. package/daemon/specs/rigs/launch/kernel/agents/advisor/lead/agent.yaml +2 -8
  764. package/daemon/specs/rigs/launch/kernel/agents/operator/agent/agent.yaml +2 -8
  765. package/daemon/specs/rigs/launch/kernel/agents/queue/worker/agent.yaml +2 -8
  766. package/daemon/specs/rigs/preview/product-team/topology/rig/ORCHESTRATION-CRAFT.md +1 -1
  767. package/dist/atomic-text-write.d.ts +3 -0
  768. package/dist/atomic-text-write.d.ts.map +1 -0
  769. package/dist/atomic-text-write.js +79 -0
  770. package/dist/atomic-text-write.js.map +1 -0
  771. package/dist/build-info.js +3 -3
  772. package/dist/cli-error.d.ts.map +1 -1
  773. package/dist/cli-error.js +15 -2
  774. package/dist/cli-error.js.map +1 -1
  775. package/dist/client.d.ts +14 -1
  776. package/dist/client.d.ts.map +1 -1
  777. package/dist/client.js +29 -4
  778. package/dist/client.js.map +1 -1
  779. package/dist/commands/agent-image.d.ts.map +1 -1
  780. package/dist/commands/agent-image.js +2 -0
  781. package/dist/commands/agent-image.js.map +1 -1
  782. package/dist/commands/ask.d.ts.map +1 -1
  783. package/dist/commands/ask.js +10 -1
  784. package/dist/commands/ask.js.map +1 -1
  785. package/dist/commands/bootstrap.d.ts.map +1 -1
  786. package/dist/commands/bootstrap.js +4 -6
  787. package/dist/commands/bootstrap.js.map +1 -1
  788. package/dist/commands/broadcast.js +1 -1
  789. package/dist/commands/broadcast.js.map +1 -1
  790. package/dist/commands/chatroom.d.ts.map +1 -1
  791. package/dist/commands/chatroom.js +22 -1
  792. package/dist/commands/chatroom.js.map +1 -1
  793. package/dist/commands/compact-plan.d.ts.map +1 -1
  794. package/dist/commands/compact-plan.js +34 -5
  795. package/dist/commands/compact-plan.js.map +1 -1
  796. package/dist/commands/compact.d.ts.map +1 -1
  797. package/dist/commands/compact.js +24 -4
  798. package/dist/commands/compact.js.map +1 -1
  799. package/dist/commands/config.d.ts.map +1 -1
  800. package/dist/commands/config.js +2 -4
  801. package/dist/commands/config.js.map +1 -1
  802. package/dist/commands/context.d.ts.map +1 -1
  803. package/dist/commands/context.js +19 -14
  804. package/dist/commands/context.js.map +1 -1
  805. package/dist/commands/crash-cart.d.ts.map +1 -1
  806. package/dist/commands/crash-cart.js +2 -1
  807. package/dist/commands/crash-cart.js.map +1 -1
  808. package/dist/commands/daemon.d.ts +13 -1
  809. package/dist/commands/daemon.d.ts.map +1 -1
  810. package/dist/commands/daemon.js +35 -17
  811. package/dist/commands/daemon.js.map +1 -1
  812. package/dist/commands/destroy.d.ts.map +1 -1
  813. package/dist/commands/destroy.js +3 -2
  814. package/dist/commands/destroy.js.map +1 -1
  815. package/dist/commands/discover.d.ts.map +1 -1
  816. package/dist/commands/discover.js +2 -4
  817. package/dist/commands/discover.js.map +1 -1
  818. package/dist/commands/doctor.d.ts.map +1 -1
  819. package/dist/commands/doctor.js +3 -2
  820. package/dist/commands/doctor.js.map +1 -1
  821. package/dist/commands/env.d.ts.map +1 -1
  822. package/dist/commands/env.js +8 -0
  823. package/dist/commands/env.js.map +1 -1
  824. package/dist/commands/export.js +2 -2
  825. package/dist/commands/export.js.map +1 -1
  826. package/dist/commands/gateway.d.ts.map +1 -1
  827. package/dist/commands/gateway.js +23 -3
  828. package/dist/commands/gateway.js.map +1 -1
  829. package/dist/commands/health.d.ts.map +1 -1
  830. package/dist/commands/health.js +9 -0
  831. package/dist/commands/health.js.map +1 -1
  832. package/dist/commands/host.d.ts.map +1 -1
  833. package/dist/commands/host.js +13 -3
  834. package/dist/commands/host.js.map +1 -1
  835. package/dist/commands/plugin.d.ts.map +1 -1
  836. package/dist/commands/plugin.js +12 -2
  837. package/dist/commands/plugin.js.map +1 -1
  838. package/dist/commands/ps.d.ts +1 -0
  839. package/dist/commands/ps.d.ts.map +1 -1
  840. package/dist/commands/ps.js +97 -35
  841. package/dist/commands/ps.js.map +1 -1
  842. package/dist/commands/queue.d.ts +2 -0
  843. package/dist/commands/queue.d.ts.map +1 -1
  844. package/dist/commands/queue.js +129 -17
  845. package/dist/commands/queue.js.map +1 -1
  846. package/dist/commands/requirements.d.ts.map +1 -1
  847. package/dist/commands/requirements.js +6 -3
  848. package/dist/commands/requirements.js.map +1 -1
  849. package/dist/commands/rig-mode.d.ts.map +1 -1
  850. package/dist/commands/rig-mode.js +6 -1
  851. package/dist/commands/rig-mode.js.map +1 -1
  852. package/dist/commands/rig.d.ts.map +1 -1
  853. package/dist/commands/rig.js +20 -20
  854. package/dist/commands/rig.js.map +1 -1
  855. package/dist/commands/scope.d.ts.map +1 -1
  856. package/dist/commands/scope.js +22 -0
  857. package/dist/commands/scope.js.map +1 -1
  858. package/dist/commands/seat.d.ts.map +1 -1
  859. package/dist/commands/seat.js +39 -9
  860. package/dist/commands/seat.js.map +1 -1
  861. package/dist/commands/setup.d.ts.map +1 -1
  862. package/dist/commands/setup.js +6 -5
  863. package/dist/commands/setup.js.map +1 -1
  864. package/dist/commands/slack.d.ts.map +1 -1
  865. package/dist/commands/slack.js +8 -1
  866. package/dist/commands/slack.js.map +1 -1
  867. package/dist/commands/specs.d.ts.map +1 -1
  868. package/dist/commands/specs.js +2 -0
  869. package/dist/commands/specs.js.map +1 -1
  870. package/dist/commands/start.js +6 -5
  871. package/dist/commands/start.js.map +1 -1
  872. package/dist/commands/startup-proof.d.ts.map +1 -1
  873. package/dist/commands/startup-proof.js +2 -1
  874. package/dist/commands/startup-proof.js.map +1 -1
  875. package/dist/commands/status.d.ts.map +1 -1
  876. package/dist/commands/status.js +7 -0
  877. package/dist/commands/status.js.map +1 -1
  878. package/dist/commands/terminal.d.ts.map +1 -1
  879. package/dist/commands/terminal.js +4 -0
  880. package/dist/commands/terminal.js.map +1 -1
  881. package/dist/commands/transcript.js +5 -3
  882. package/dist/commands/transcript.js.map +1 -1
  883. package/dist/commands/up.d.ts +8 -0
  884. package/dist/commands/up.d.ts.map +1 -1
  885. package/dist/commands/up.js +78 -4
  886. package/dist/commands/up.js.map +1 -1
  887. package/dist/commands/walk.d.ts.map +1 -1
  888. package/dist/commands/walk.js +3 -0
  889. package/dist/commands/walk.js.map +1 -1
  890. package/dist/commands/workflow-follow.d.ts +2 -0
  891. package/dist/commands/workflow-follow.d.ts.map +1 -1
  892. package/dist/commands/workflow-follow.js +6 -4
  893. package/dist/commands/workflow-follow.js.map +1 -1
  894. package/dist/commands/workflow.d.ts.map +1 -1
  895. package/dist/commands/workflow.js +2 -4
  896. package/dist/commands/workflow.js.map +1 -1
  897. package/dist/commands/workspace.d.ts.map +1 -1
  898. package/dist/commands/workspace.js +2 -4
  899. package/dist/commands/workspace.js.map +1 -1
  900. package/dist/config-store.d.ts +2 -0
  901. package/dist/config-store.d.ts.map +1 -1
  902. package/dist/config-store.js +24 -6
  903. package/dist/config-store.js.map +1 -1
  904. package/dist/daemon-lifecycle.d.ts +9 -0
  905. package/dist/daemon-lifecycle.d.ts.map +1 -1
  906. package/dist/daemon-lifecycle.js +61 -19
  907. package/dist/daemon-lifecycle.js.map +1 -1
  908. package/dist/daemon-reachability.d.ts +18 -0
  909. package/dist/daemon-reachability.d.ts.map +1 -0
  910. package/dist/daemon-reachability.js +48 -0
  911. package/dist/daemon-reachability.js.map +1 -0
  912. package/dist/lib/file-transfer.d.ts +1 -1
  913. package/dist/lib/file-transfer.d.ts.map +1 -1
  914. package/dist/lib/file-transfer.js +17 -5
  915. package/dist/lib/file-transfer.js.map +1 -1
  916. package/dist/lib/scope/mission-composition.d.ts.map +1 -1
  917. package/dist/lib/scope/mission-composition.js +11 -0
  918. package/dist/lib/scope/mission-composition.js.map +1 -1
  919. package/dist/lib/scope/scaffold-placeholder.d.ts +4 -4
  920. package/dist/lib/scope/scaffold-placeholder.d.ts.map +1 -1
  921. package/dist/lib/scope/scaffold-placeholder.js +4 -4
  922. package/dist/lib/scope/scaffold-placeholder.js.map +1 -1
  923. package/dist/lib/scope/scope-fs.d.ts.map +1 -1
  924. package/dist/lib/scope/scope-fs.js +10 -16
  925. package/dist/lib/scope/scope-fs.js.map +1 -1
  926. package/dist/lib/scope-templates/slice-progress.md +11 -7
  927. package/dist/restore-packet/claude-transcript-parser.d.ts.map +1 -1
  928. package/dist/restore-packet/claude-transcript-parser.js +2 -0
  929. package/dist/restore-packet/claude-transcript-parser.js.map +1 -1
  930. package/dist/restore-packet/codex-jsonl-parser.d.ts.map +1 -1
  931. package/dist/restore-packet/codex-jsonl-parser.js +2 -0
  932. package/dist/restore-packet/codex-jsonl-parser.js.map +1 -1
  933. package/dist/restore-packet/runtime-detect.d.ts.map +1 -1
  934. package/dist/restore-packet/runtime-detect.js +2 -0
  935. package/dist/restore-packet/runtime-detect.js.map +1 -1
  936. package/package.json +4 -3
  937. package/tui/dist/attention/source-continuity.d.ts.map +1 -1
  938. package/tui/dist/attention/source-continuity.js +5 -3
  939. package/tui/dist/attention/source-continuity.js.map +1 -1
  940. package/tui/dist/daemon-client.d.ts +2 -1
  941. package/tui/dist/daemon-client.d.ts.map +1 -1
  942. package/tui/dist/daemon-client.js +13 -4
  943. package/tui/dist/daemon-client.js.map +1 -1
  944. package/tui/dist/execution/execution-model.d.ts.map +1 -1
  945. package/tui/dist/execution/execution-model.js +19 -7
  946. package/tui/dist/execution/execution-model.js.map +1 -1
  947. package/tui/dist/grammar.d.ts.map +1 -1
  948. package/tui/dist/grammar.js +3 -2
  949. package/tui/dist/grammar.js.map +1 -1
  950. package/tui/dist/health/health-model.d.ts.map +1 -1
  951. package/tui/dist/health/health-model.js +17 -5
  952. package/tui/dist/health/health-model.js.map +1 -1
  953. package/tui/dist/hydrate.d.ts.map +1 -1
  954. package/tui/dist/hydrate.js +1 -0
  955. package/tui/dist/hydrate.js.map +1 -1
  956. package/tui/dist/input.d.ts.map +1 -1
  957. package/tui/dist/input.js +5 -0
  958. package/tui/dist/input.js.map +1 -1
  959. package/tui/dist/live-events.d.ts +2 -2
  960. package/tui/dist/live-events.d.ts.map +1 -1
  961. package/tui/dist/live-events.js +65 -27
  962. package/tui/dist/live-events.js.map +1 -1
  963. package/tui/dist/local-reading.d.ts.map +1 -1
  964. package/tui/dist/local-reading.js +2 -0
  965. package/tui/dist/local-reading.js.map +1 -1
  966. package/tui/dist/main.js +16 -3
  967. package/tui/dist/main.js.map +1 -1
  968. package/tui/dist/page-read.d.ts.map +1 -1
  969. package/tui/dist/page-read.js +4 -1
  970. package/tui/dist/page-read.js.map +1 -1
  971. package/tui/dist/render.d.ts +2 -0
  972. package/tui/dist/render.d.ts.map +1 -1
  973. package/tui/dist/render.js +15 -4
  974. package/tui/dist/render.js.map +1 -1
  975. package/tui/dist/scopes/scopes-model.d.ts.map +1 -1
  976. package/tui/dist/scopes/scopes-model.js +36 -31
  977. package/tui/dist/scopes/scopes-model.js.map +1 -1
  978. package/tui/dist/socket-server.d.ts +6 -2
  979. package/tui/dist/socket-server.d.ts.map +1 -1
  980. package/tui/dist/socket-server.js +159 -14
  981. package/tui/dist/socket-server.js.map +1 -1
  982. package/tui/dist/types.d.ts +18 -0
  983. package/tui/dist/types.d.ts.map +1 -1
  984. package/ui/dist/assets/{index-N-SdPj-I.css → index-DNU3XZr_.css} +1 -1
  985. package/ui/dist/assets/{index-BVW54ItO.js → index-HHSvwF97.js} +75 -75
  986. package/ui/dist/index.html +2 -2
@@ -1,4 +1,6 @@
1
1
  import { randomUUID } from "node:crypto";
2
+ import { inspectStartupStagedText, startupSubmissionEvidence } from "./startup-submission-evidence.js";
3
+ export { inspectStartupStagedText } from "./startup-submission-evidence.js";
2
4
  import { OutboxHandler } from "./outbox-handler.js";
3
5
  import { wrapPaneEnvelope, appendDeliveredSegment } from "../lib/pane-envelope.js";
4
6
  import { SeatIdentityStore } from "./seat-identity-store.js";
@@ -26,8 +28,20 @@ const MID_WORK_PATTERNS = [
26
28
  // Idle-prompt patterns: empty prompt line (no typed text after the char).
27
29
  // Lines like '❯ Working on a task.' have text after the prompt char and
28
30
  // are NOT idle — the prompt is active with input that may look mid-work.
31
+ // Codex 0.157 renders a fixed placeholder in the empty composer (codex-rs/tui/src/chatwidget.rs
32
+ // `PLACEHOLDER`) and its footer no longer carries the `· Context [` status bar. The placeholder
33
+ // is visible both idle and mid-turn; mid-turn the status row (`Working … esc to interrupt`)
34
+ // normally sits above it, but Codex hides that row while it streams assistant output. So the
35
+ // placeholder counts as idle only through MID_WORK_PATTERNS here, and classifySendReadiness
36
+ // never lets a placeholder-only verdict override a display-fresh running/needs_input hook.
37
+ const CODEX_EMPTY_COMPOSER_PATTERN = /^›\s+Ask Codex to do anything\s*$/;
38
+ // Codex's live turn-status row: a bullet, a header ("Working", or the reasoning summary Codex shows in its place),
39
+ // then the elapsed time and "esc to interrupt" in parentheses, e.g. "• Working (1h 09m 39s • esc to interrupt)".
40
+ // Completed output that merely says "Working directory: …" or "Working tree is clean." never matches.
41
+ const CODEX_TURN_STATUS_PATTERN = /^[•◦]\s+\S.*\((?:\d+[hms]\s*)+•\s*esc to interrupt\)/;
29
42
  const IDLE_PROMPT_PATTERNS = [
30
43
  /^[❯›]\s*$/, // prompt char + optional whitespace + end-of-line only
44
+ CODEX_EMPTY_COMPOSER_PATTERN,
31
45
  ];
32
46
  const PROMPT_DRAFT_PATTERNS = [
33
47
  /^[❯›]\s+\S/,
@@ -152,6 +166,21 @@ export function classifyPaneActivity(paneContent) {
152
166
  evidence: truncateEvidence(idleStatusBarLine),
153
167
  };
154
168
  }
169
+ // Codex keeps its empty-composer placeholder on screen during a turn, and its turn-status row
170
+ // (`• Working (… esc to interrupt)`) can sit well above the composer when queued or incoming
171
+ // message blocks come in between. So under the placeholder, that row anywhere in the capture is
172
+ // the turn still running. Only the status-row signature counts at that range: completed prose
173
+ // ("Working tree is clean.") further up is history, and the 8-line generic check below still applies.
174
+ const placeholderMidWork = idlePromptLine && CODEX_EMPTY_COMPOSER_PATTERN.test(idlePromptLine)
175
+ ? findPatternEvidence(lastNonBlank, [CODEX_TURN_STATUS_PATTERN])
176
+ : null;
177
+ if (placeholderMidWork) {
178
+ return {
179
+ state: "agent_active",
180
+ reason: "mid_work_pattern",
181
+ evidence: placeholderMidWork,
182
+ };
183
+ }
155
184
  if (idlePromptLine && !MID_WORK_PATTERNS.some((pattern) => pattern.test(recentWindow))) {
156
185
  return {
157
186
  state: "agent_idle",
@@ -377,6 +406,101 @@ export function scopeForTarget(target, recipients) {
377
406
  return { kind: "rig-broadcast", rig: target.rig ? `${target.rig}/${target.pod}` : target.pod, seats: recipients.length };
378
407
  return { kind: "topology" }; // { global: true }
379
408
  }
409
+ /** The existing submit-only identity check, also used to inspect startup's own paste.
410
+ * A false result is no matching staged evidence, not proof of model consumption. */
411
+ export function hasExpectedStagedText(pane, expected) {
412
+ const norm = (s) => s.replace(/\s+/g, "");
413
+ // Round-2 (r2 HIGH-1): the evidence must be the CURRENT ACTIVE INPUT and must identify
414
+ // THIS piece — stale scrollback can carry an old placeholder while a LATER interactive
415
+ // prompt owns the input, and an Enter there approves the prompt. So:
416
+ // 1. Only the pane's LAST input-marker line counts (the current input; everything above
417
+ // is history).
418
+ // 2. A numbered-option line (`❯ 1. …`) is a PROMPT SELECTION, never staged input: refuse.
419
+ // 3. A pasted-text placeholder is identity-qualified: "[Pasted text #N +X lines]" counts
420
+ // only when X matches the expected piece's own line count (±1 for a trailing newline).
421
+ // More than one placeholder is COALESCED staging (several pieces, one Enter): refuse.
422
+ // 4. Otherwise the line must carry the content's own head (24 normalized chars — a short
423
+ // paste renders inline, possibly truncated).
424
+ const paneLines = (pane ?? "").split("\n");
425
+ let currentInputAt = -1;
426
+ for (let i = paneLines.length - 1; i >= 0; i--) {
427
+ if (paneLines[i].trimStart().startsWith("❯")) {
428
+ currentInputAt = i;
429
+ break;
430
+ }
431
+ }
432
+ let stagedEvidence = false;
433
+ if (currentInputAt >= 0) {
434
+ const inputLine = paneLines[currentInputAt].trimStart();
435
+ // The region is the last ❯-line through the input box's closing separator (a box-drawing
436
+ // line) or pane end — wrapped input continues below the marker; everything ABOVE the
437
+ // marker is history and everything below the separator is hint-bar chrome.
438
+ let regionEnd = paneLines.length;
439
+ for (let i = currentInputAt + 1; i < paneLines.length; i++) {
440
+ const t = paneLines[i].trim();
441
+ if (t.length >= 10 && /^[─═-]+$/.test(t)) {
442
+ regionEnd = i;
443
+ break;
444
+ }
445
+ }
446
+ const region = paneLines.slice(currentInputAt, regionEnd).join("\n");
447
+ if (!/^❯\s*\d+\./.test(inputLine)) {
448
+ // Round-3 (r2 R2 HIGH-1, specimen-pinned): Claude renders ONE staged piece as MANY
449
+ // placeholders whose displayed counts are SEGMENT sizes (sum ≤ source lines), followed
450
+ // by the piece's own literal tail wrapped across pane lines — and the placeholder
451
+ // tokens themselves wrap. So: collapse wrapping, then
452
+ // IDENTITY — the literal residual (region minus tokens minus hint chrome) must be a
453
+ // CONTIGUOUS substring of the piece: the visible words are the piece's
454
+ // words. Foreign residual (another piece, stale content) refuses.
455
+ // SANITY — the segment-count sum must not exceed the piece's own line count
456
+ // (small slack), and with NO residual anchor must reach at least 60% of
457
+ // it — a bare unrelated placeholder cannot masquerade as this piece.
458
+ const placeholderRe = /\[Pasted text #\d+ \+(\d+) lines\]/g;
459
+ const regionFlat = region.replace(/\s+/g, " ");
460
+ const counts = [...regionFlat.matchAll(placeholderRe)].map((m) => Number(m[1]));
461
+ if (counts.length === 0) {
462
+ const head = norm(expected).slice(0, 24);
463
+ stagedEvidence = head.length > 0 && norm(region).includes(head);
464
+ }
465
+ else {
466
+ // Round-4 (r2 R3 HIGH-1): identity is the rendering's own structure, specimen-proven —
467
+ // the placeholders are the piece's HEAD chunks and the literal residual is the piece's
468
+ // normalized SUFFIX (524 chars in the preserved capture). Size similarity and short
469
+ // shared phrases are NOT identity: with no residual, or one under 48 normalized chars,
470
+ // or one that is not the piece's own suffix, FAIL CLOSED — the TUI did not expose
471
+ // enough content to identify the staged state, and a bare Enter is never guessed.
472
+ const chrome = /paste again to expand|ctrl\+g to edit( in Vim)?/gi;
473
+ const residual = norm(regionFlat.replace(placeholderRe, "").replace(chrome, "")).replace(/^❯/, "");
474
+ const pieceNorm = norm(expected);
475
+ const sum = counts.reduce((a, b) => a + b, 0);
476
+ // Round-5 (r2 R4 HIGH-1): the suffix anchor is JOINED to the opaque prefix. The
477
+ // placeholder sum identifies the hidden SOURCE BOUNDARY immediately before the
478
+ // visible suffix (specimen: sum 130 = the residual begins after exactly 130 of the
479
+ // piece's 142 source newlines). Compute the boundary from the piece bytes — the
480
+ // number of leading source lines whose normalized text the residual does NOT cover —
481
+ // and require the sum to EQUAL it exactly (round-6, r2 R5: both separately staged
482
+ // preserved pieces are exact — 130=130 and 82=82; a tolerance was unsupported by the
483
+ // renderer evidence). A matched suffix with a non-matching sum is a truncated or
484
+ // wrong prefix: refuse.
485
+ let boundary = -1;
486
+ if (residual.length >= 48 && pieceNorm.endsWith(residual)) {
487
+ const srcLines = expected.split("\n");
488
+ let acc = 0;
489
+ boundary = 0;
490
+ for (let i = srcLines.length - 1; i >= 0; i--) {
491
+ acc += norm(srcLines[i]).length;
492
+ if (acc >= residual.length) {
493
+ boundary = i;
494
+ break;
495
+ }
496
+ }
497
+ }
498
+ stagedEvidence = boundary >= 0 && sum === boundary;
499
+ }
500
+ }
501
+ }
502
+ return stagedEvidence;
503
+ }
380
504
  export class SessionTransport {
381
505
  db;
382
506
  rigRepo;
@@ -890,98 +1014,29 @@ export class SessionTransport {
890
1014
  if (expected.trim().length === 0) {
891
1015
  return { ok: false, sessionName, reason: "invalid_submit_only", error: "submitOnly requires expectedStagedText — the Enter is only pressed onto the exact staged content." };
892
1016
  }
893
- const norm = (s) => s.replace(/\s+/g, "");
894
- const pane = await this.runStage("session_transport.submit_only_precheck", () => this.tmuxAdapter.capturePaneContent(sessionName, 50));
895
- // Round-2 (r2 HIGH-1): the evidence must be the CURRENT ACTIVE INPUT and must identify
896
- // THIS piece — stale scrollback can carry an old placeholder while a LATER interactive
897
- // prompt owns the input, and an Enter there approves the prompt. So:
898
- // 1. Only the pane's LAST input-marker line counts (the current input; everything above
899
- // is history).
900
- // 2. A numbered-option line (`❯ 1. …`) is a PROMPT SELECTION, never staged input: refuse.
901
- // 3. A pasted-text placeholder is identity-qualified: "[Pasted text #N +X lines]" counts
902
- // only when X matches the expected piece's own line count (±1 for a trailing newline).
903
- // More than one placeholder is COALESCED staging (several pieces, one Enter): refuse.
904
- // 4. Otherwise the line must carry the content's own head (24 normalized chars — a short
905
- // paste renders inline, possibly truncated).
906
- const paneLines = (pane ?? "").split("\n");
907
- let currentInputAt = -1;
908
- for (let i = paneLines.length - 1; i >= 0; i--) {
909
- if (paneLines[i].trimStart().startsWith("❯")) {
910
- currentInputAt = i;
911
- break;
1017
+ const recordMismatch = (pane) => {
1018
+ if (!opts.requireFullStagedText || !opts.onStartupMismatch)
1019
+ return;
1020
+ try {
1021
+ const evidence = startupSubmissionEvidence(pane, expected, opts.submitOnlyCaptureLines ?? 50);
1022
+ if (evidence)
1023
+ opts.onStartupMismatch(evidence);
912
1024
  }
1025
+ catch { /* Observation has no delivery authority. */ }
1026
+ };
1027
+ let pane;
1028
+ try {
1029
+ pane = await this.runStage("session_transport.submit_only_precheck", () => this.tmuxAdapter.capturePaneContent(sessionName, opts.submitOnlyCaptureLines ?? 50));
913
1030
  }
914
- let stagedEvidence = false;
915
- if (currentInputAt >= 0) {
916
- const inputLine = paneLines[currentInputAt].trimStart();
917
- // The region is the last ❯-line through the input box's closing separator (a box-drawing
918
- // line) or pane end — wrapped input continues below the marker; everything ABOVE the
919
- // marker is history and everything below the separator is hint-bar chrome.
920
- let regionEnd = paneLines.length;
921
- for (let i = currentInputAt + 1; i < paneLines.length; i++) {
922
- const t = paneLines[i].trim();
923
- if (t.length >= 10 && /^[─═-]+$/.test(t)) {
924
- regionEnd = i;
925
- break;
926
- }
927
- }
928
- const region = paneLines.slice(currentInputAt, regionEnd).join("\n");
929
- if (!/^❯\s*\d+\./.test(inputLine)) {
930
- // Round-3 (r2 R2 HIGH-1, specimen-pinned): Claude renders ONE staged piece as MANY
931
- // placeholders whose displayed counts are SEGMENT sizes (sum ≤ source lines), followed
932
- // by the piece's own literal tail wrapped across pane lines — and the placeholder
933
- // tokens themselves wrap. So: collapse wrapping, then
934
- // IDENTITY — the literal residual (region minus tokens minus hint chrome) must be a
935
- // CONTIGUOUS substring of the piece: the visible words are the piece's
936
- // words. Foreign residual (another piece, stale content) refuses.
937
- // SANITY — the segment-count sum must not exceed the piece's own line count
938
- // (small slack), and with NO residual anchor must reach at least 60% of
939
- // it — a bare unrelated placeholder cannot masquerade as this piece.
940
- const placeholderRe = /\[Pasted text #\d+ \+(\d+) lines\]/g;
941
- const regionFlat = region.replace(/\s+/g, " ");
942
- const counts = [...regionFlat.matchAll(placeholderRe)].map((m) => Number(m[1]));
943
- if (counts.length === 0) {
944
- const head = norm(expected).slice(0, 24);
945
- stagedEvidence = head.length > 0 && norm(region).includes(head);
946
- }
947
- else {
948
- // Round-4 (r2 R3 HIGH-1): identity is the rendering's own structure, specimen-proven —
949
- // the placeholders are the piece's HEAD chunks and the literal residual is the piece's
950
- // normalized SUFFIX (524 chars in the preserved capture). Size similarity and short
951
- // shared phrases are NOT identity: with no residual, or one under 48 normalized chars,
952
- // or one that is not the piece's own suffix, FAIL CLOSED — the TUI did not expose
953
- // enough content to identify the staged state, and a bare Enter is never guessed.
954
- const chrome = /paste again to expand|ctrl\+g to edit( in Vim)?/gi;
955
- const residual = norm(regionFlat.replace(placeholderRe, "").replace(chrome, "")).replace(/^❯/, "");
956
- const pieceNorm = norm(expected);
957
- const sum = counts.reduce((a, b) => a + b, 0);
958
- // Round-5 (r2 R4 HIGH-1): the suffix anchor is JOINED to the opaque prefix. The
959
- // placeholder sum identifies the hidden SOURCE BOUNDARY immediately before the
960
- // visible suffix (specimen: sum 130 = the residual begins after exactly 130 of the
961
- // piece's 142 source newlines). Compute the boundary from the piece bytes — the
962
- // number of leading source lines whose normalized text the residual does NOT cover —
963
- // and require the sum to EQUAL it exactly (round-6, r2 R5: both separately staged
964
- // preserved pieces are exact — 130=130 and 82=82; a tolerance was unsupported by the
965
- // renderer evidence). A matched suffix with a non-matching sum is a truncated or
966
- // wrong prefix: refuse.
967
- let boundary = -1;
968
- if (residual.length >= 48 && pieceNorm.endsWith(residual)) {
969
- const srcLines = expected.split("\n");
970
- let acc = 0;
971
- boundary = 0;
972
- for (let i = srcLines.length - 1; i >= 0; i--) {
973
- acc += norm(srcLines[i]).length;
974
- if (acc >= residual.length) {
975
- boundary = i;
976
- break;
977
- }
978
- }
979
- }
980
- stagedEvidence = boundary >= 0 && sum === boundary;
981
- }
982
- }
1031
+ catch (error) {
1032
+ recordMismatch(null);
1033
+ throw error; // Preserve the existing guarded/unguarded error handling.
983
1034
  }
984
- if (!stagedEvidence) {
1035
+ const staged = opts.requireFullStagedText
1036
+ ? inspectStartupStagedText(pane, expected) === "staged"
1037
+ : hasExpectedStagedText(pane, expected);
1038
+ if (!staged) {
1039
+ recordMismatch(pane);
985
1040
  return {
986
1041
  ok: false,
987
1042
  sessionName,
@@ -992,7 +1047,7 @@ export class SessionTransport {
992
1047
  const targetFailure = await checkClaudeTarget();
993
1048
  if (targetFailure)
994
1049
  return targetFailure;
995
- const submitResult = await this.runStage("session_transport.submit", () => this.tmuxAdapter.sendKeys(sessionName, ["C-m"]), (result) => result.ok ? "ok" : "failed");
1050
+ const submitResult = await this.runStage("session_transport.submit", () => this.tmuxAdapter.sendKeys(sessionName, ["Enter"]), (result) => result.ok ? "ok" : "failed");
996
1051
  if (!submitResult.ok) {
997
1052
  return { ok: false, sessionName, reason: "submit_failed", outcome: "failed", error: `submitOnly: Enter did not land on '${sessionName}': ${submitResult.message}` };
998
1053
  }
@@ -1134,7 +1189,7 @@ export class SessionTransport {
1134
1189
  // 3. Send text (paste)
1135
1190
  if (observed)
1136
1191
  observed.sentHash = hashSentText(text);
1137
- const textResult = await this.runStage("session_transport.send_text", () => this.tmuxAdapter.sendText(sessionName, text), (result) => result.ok ? "ok" : "failed");
1192
+ const textResult = await this.runStage("session_transport.send_text", () => { opts?.beforeWrite?.(); return opts?.beforeWrite ? this.tmuxAdapter.sendText(sessionName, text, opts.beforeWrite) : this.tmuxAdapter.sendText(sessionName, text); }, (result) => result.ok ? "ok" : "failed");
1138
1193
  if (!textResult.ok) {
1139
1194
  return observe({
1140
1195
  ok: false,
@@ -1149,8 +1204,8 @@ export class SessionTransport {
1149
1204
  await this.sleep(200);
1150
1205
  if (runtime === "claude-code" && bindingChanged())
1151
1206
  return observe(changedRecipient(true));
1152
- // 5. Submit (C-m)
1153
- const submitResult = await this.runStage("session_transport.submit", () => this.tmuxAdapter.sendKeys(sessionName, ["C-m"]), (result) => result.ok ? "ok" : "failed");
1207
+ // 5. Submit (Enter)
1208
+ const submitResult = await this.runStage("session_transport.submit", () => { opts?.beforeWrite?.(); return opts?.beforeWrite ? this.tmuxAdapter.sendKeys(sessionName, ["Enter"], opts.beforeWrite) : this.tmuxAdapter.sendKeys(sessionName, ["Enter"]); }, (result) => result.ok ? "ok" : "failed");
1154
1209
  if (!submitResult.ok) {
1155
1210
  return observe({
1156
1211
  ok: false,
@@ -1192,13 +1247,67 @@ export class SessionTransport {
1192
1247
  ? this.slowOpRecorder.runStage(site, fn, classify)
1193
1248
  : fn();
1194
1249
  }
1250
+ /** Wait on the existing classifier without occupying the input/lifecycle lease. */
1251
+ async waitUntilIdle(sessionName, timeoutMs, signal) {
1252
+ const meta = this.getSessionMeta(sessionName);
1253
+ return this.waitForIdle({ sessionName, runtime: meta.runtime, attachmentType: meta.attachmentType, timeoutMs, signal,
1254
+ binding: { sessionName, nodeId: meta.nodeId, occupant: meta.occupant, pane: meta.pane } });
1255
+ }
1195
1256
  async waitForIdle(input) {
1196
- const startedAt = Date.now();
1257
+ // ONE deadline. UNKNOWN is retried like busy and never authorizes the send. No observation
1258
+ // starts after the deadline (one starting exactly at it races a 0 ms timer), each one is raced
1259
+ // against the time left, and one that completes after the deadline is discarded, so a late idle
1260
+ // can never lead to input. At expiry the result names the last observation that completed in
1261
+ // time; waitedMs is the wait itself.
1262
+ const deadline = Date.now() + input.timeoutMs;
1197
1263
  let attempts = 0;
1264
+ let last = null;
1265
+ const expire = () => {
1266
+ const count = `${attempts} observation${attempts === 1 ? "" : "s"}`;
1267
+ const activity = last ?? {
1268
+ state: "unknown", reason: "no_observation_in_time", evidenceSource: "pane_heuristic",
1269
+ sampledAt: this.now().toISOString(), evidence: null,
1270
+ };
1271
+ return activity.state === "unknown"
1272
+ ? {
1273
+ ok: false,
1274
+ reason: "target_activity_unknown",
1275
+ error: last
1276
+ ? `Target activity could not be determined (${activity.reason}) when the ${input.timeoutMs}ms wait ended (${count}). No text was sent.`
1277
+ : `Target activity could not be determined: no observation completed within the ${input.timeoutMs}ms wait. No text was sent.`,
1278
+ activity, waitedMs: input.timeoutMs, attempts,
1279
+ }
1280
+ : {
1281
+ ok: false,
1282
+ reason: "wait_for_idle_timeout",
1283
+ error: `Target was still busy (${activity.reason}) when the ${input.timeoutMs}ms wait ended (${count}). No text was sent.`,
1284
+ activity, waitedMs: input.timeoutMs, attempts,
1285
+ };
1286
+ };
1287
+ const cancelled = () => ({
1288
+ ok: false,
1289
+ reason: "preparation_cancelled",
1290
+ error: "Managed preparation ended; no compact authorized.",
1291
+ activity: last ?? {
1292
+ state: "unknown", reason: "preparation_cancelled", evidenceSource: "pane_heuristic",
1293
+ sampledAt: this.now().toISOString(), evidence: null,
1294
+ },
1295
+ waitedMs: Math.max(0, Math.min(input.timeoutMs, input.timeoutMs - (deadline - Date.now()))),
1296
+ attempts,
1297
+ });
1198
1298
  while (true) {
1299
+ if (input.signal?.aborted)
1300
+ return cancelled();
1301
+ if (attempts > 0 && Date.now() > deadline)
1302
+ return expire();
1199
1303
  attempts++;
1200
- const activity = await this.classifySendReadiness(input);
1201
- const waitedMs = Date.now() - startedAt;
1304
+ const activity = await this.observeReadinessWithin(input, deadline - Date.now());
1305
+ if (input.signal?.aborted)
1306
+ return cancelled();
1307
+ if (activity === null || Date.now() > deadline)
1308
+ return expire();
1309
+ last = activity;
1310
+ const waitedMs = input.timeoutMs - (deadline - Date.now());
1202
1311
  if (activity.state === "idle") {
1203
1312
  return { ok: true, activity, waitedMs, attempts };
1204
1313
  }
@@ -1212,28 +1321,27 @@ export class SessionTransport {
1212
1321
  attempts,
1213
1322
  };
1214
1323
  }
1215
- if (activity.state === "unknown") {
1216
- return {
1217
- ok: false,
1218
- reason: "target_activity_unknown",
1219
- error: `Target activity could not be determined (${activity.reason}). No text was sent.`,
1220
- activity,
1221
- waitedMs,
1222
- attempts,
1223
- };
1224
- }
1225
- if (waitedMs >= input.timeoutMs) {
1226
- return {
1227
- ok: false,
1228
- reason: "wait_for_idle_timeout",
1229
- error: `Target remained busy for ${waitedMs}ms. No text was sent.`,
1230
- activity,
1231
- waitedMs,
1232
- attempts,
1233
- };
1234
- }
1235
- const remainingMs = input.timeoutMs - waitedMs;
1236
- await this.sleep(Math.min(this.waitForIdlePollMs, Math.max(1, remainingMs)));
1324
+ const remainingMs = deadline - Date.now();
1325
+ if (remainingMs <= 0)
1326
+ return expire();
1327
+ await this.sleep(Math.min(this.waitForIdlePollMs, remainingMs));
1328
+ }
1329
+ }
1330
+ /** One readiness observation, raced against the time left before the wait's deadline. Null
1331
+ * when the deadline wins; the abandoned observation is ignored, never delivered on. */
1332
+ async observeReadinessWithin(input, remainingMs) {
1333
+ const observation = this.classifySendReadiness(input);
1334
+ observation.catch(() => undefined);
1335
+ let timer;
1336
+ try {
1337
+ return await Promise.race([
1338
+ observation,
1339
+ new Promise((resolve) => { timer = setTimeout(() => resolve(null), Math.max(0, remainingMs)); }),
1340
+ ]);
1341
+ }
1342
+ finally {
1343
+ if (timer !== undefined)
1344
+ clearTimeout(timer);
1237
1345
  }
1238
1346
  }
1239
1347
  async claudeDeliveryObservation(sessionName, pane, resumeToken) {
@@ -1332,7 +1440,7 @@ export class SessionTransport {
1332
1440
  return hookActivity;
1333
1441
  }
1334
1442
  }
1335
- return probeSessionActivity({
1443
+ const probe = await probeSessionActivity({
1336
1444
  sessionName: input.sessionName,
1337
1445
  runtime: input.runtime,
1338
1446
  attachmentType: input.attachmentType,
@@ -1341,6 +1449,20 @@ export class SessionTransport {
1341
1449
  captureObserver: this.captureObserver,
1342
1450
  binding: input.binding,
1343
1451
  });
1452
+ // A Codex empty-composer placeholder is also on screen while Codex streams with its status
1453
+ // row hidden, so a placeholder-only idle verdict must not override a display-fresh (<5min)
1454
+ // running/needs_input hook such as UserPromptSubmit: keep it until it ages out. An `unknown`
1455
+ // hook (e.g. SessionStart) carries no evidence of work and does not block.
1456
+ if (probe.state === "idle" &&
1457
+ probe.reason === "idle_prompt" &&
1458
+ CODEX_EMPTY_COMPOSER_PATTERN.test(probe.evidence ?? "") &&
1459
+ hookActivity &&
1460
+ hookActivity.evidenceSource === "runtime_hook" &&
1461
+ hookActivity.stale !== true &&
1462
+ (hookActivity.state === "running" || hookActivity.state === "needs_input")) {
1463
+ return hookActivity;
1464
+ }
1465
+ return probe;
1344
1466
  }
1345
1467
  // OPR.0.4.1.10 — a runtime-hook is authoritative for send-readiness only within the tight send
1346
1468
  // window. No usable hook timestamp → not send-fresh (fall through to real-time capture).
@@ -1356,12 +1478,15 @@ export class SessionTransport {
1356
1478
  // `no_activity_signal`. NEVER surfaces a token value — env checks are
1357
1479
  // presence-only, and the store carries no token.
1358
1480
  async diagnoseProducerLink(sessionName) {
1359
- // Link 1 — the SEAT ENV: can the relay even reach the daemon?
1481
+ // Link 1 — the relay's prerequisites: the daemon URL, the activity token, and the runtime
1482
+ // (without OPENRIG_RUNTIME the relay builds no payload and posts nothing). Only the tmux SESSION
1483
+ // environment is inspected; the agent process's own environment is not read, and an env-prefixed
1484
+ // launch carries these without the session environment showing them. So a name absent from the
1485
+ // session environment is reported as UNPROVEN absent from the agent: UNKNOWN, never DOWN.
1360
1486
  let hasUrl = null;
1361
1487
  let hasToken = null;
1362
- let inspectedEnv = false;
1488
+ let hasRuntime = null;
1363
1489
  if (typeof this.tmuxAdapter?.hasSessionEnv === "function") {
1364
- inspectedEnv = true;
1365
1490
  const anyPresent = async (names) => {
1366
1491
  let unknown = false;
1367
1492
  for (const name of names) {
@@ -1380,53 +1505,73 @@ export class SessionTransport {
1380
1505
  };
1381
1506
  hasUrl = await anyPresent(["OPENRIG_URL", "RIGGED_URL", "OPENRIG_PORT", "RIGGED_PORT"]);
1382
1507
  hasToken = await anyPresent(["OPENRIG_ACTIVITY_HOOK_TOKEN", "RIGGED_ACTIVITY_HOOK_TOKEN"]);
1508
+ hasRuntime = await anyPresent(["OPENRIG_RUNTIME", "RIGGED_RUNTIME"]);
1383
1509
  }
1384
1510
  let fileEndpoint = null;
1385
1511
  try {
1386
1512
  fileEndpoint = this.activityEndpointFile();
1387
1513
  }
1388
1514
  catch { /* unreadable fallback remains unavailable */ }
1389
- if (!fileEndpoint && (hasUrl === false || hasToken === false)) {
1390
- const label = (value) => value === true ? "present" : value === false ? "MISSING" : "UNKNOWN";
1391
- return `seat-env link DOWN — effective relay URL ${label(hasUrl)}, activity token ${label(hasToken)}, and no valid activity-endpoint.json fallback; the activity relay cannot reach the daemon. Relaunch the seat after confirming the effective endpoint is unavailable`;
1392
- }
1393
- if (!fileEndpoint && inspectedEnv && (hasUrl === null || hasToken === null)) {
1394
- return `seat-env link UNKNOWN — tmux session-environment lookup failed and no valid activity-endpoint.json fallback could be confirmed; URL/token absence is unproven`;
1395
- }
1396
- // Link 2 — the DAEMON INGEST + store: did any hook actually land, and how stale?
1515
+ // The endpoint file covers the URL and token, never the runtime. Presence-only: no value is read out.
1516
+ const prerequisites = [
1517
+ { label: "relay URL", present: fileEndpoint ? true : hasUrl },
1518
+ { label: "activity token", present: fileEndpoint ? true : hasToken },
1519
+ { label: "OPENRIG_RUNTIME", present: hasRuntime },
1520
+ ];
1521
+ const absent = prerequisites.filter((p) => p.present === false).map((p) => p.label);
1522
+ const unread = typeof this.tmuxAdapter?.hasSessionEnv === "function"
1523
+ ? prerequisites.filter((p) => p.present === null).map((p) => p.label) : [];
1524
+ const envNote = absent.length > 0 || unread.length > 0
1525
+ ? `seat-env UNKNOWN — ${[
1526
+ absent.length > 0 ? `${absent.join(", ")} absent from the tmux session environment` : null,
1527
+ unread.length > 0 ? `session-environment lookup failed for ${unread.join(", ")}` : null,
1528
+ ].filter(Boolean).join("; ")}; the agent process environment was not inspected and an env-prefixed launch can still carry them, so absence from the agent is unproven`
1529
+ : null;
1530
+ const withEnv = (verdict) => envNote ? `${verdict}. ${envNote}` : verdict;
1531
+ // Link 2 — the DAEMON INGEST + store: did any hook land, and how old is it?
1397
1532
  const store = this.agentActivityStore;
1398
1533
  if (!store) {
1399
- return `daemon-ingest link DOWN — the activity store is not configured on this daemon (ingest returns 503)`;
1534
+ return withEnv(`daemon-ingest link DOWN — the activity store is not configured on this daemon (ingest returns 503)`);
1400
1535
  }
1401
1536
  const latest = store.getLatestForNode({ sessionName, now: this.now() });
1402
1537
  if (!latest || latest.evidenceSource !== "runtime_hook") {
1403
- return `daemon-ingest link DOWN — no activity hook has ever been received for this seat; the ingest is rejecting posts (token mismatch → 401, or ingest unconfigured → 503) or Codex hook-trust is uncleared. Verify the seat was OpenRig-launched with hook-trust cleared`;
1538
+ return withEnv(`no activity hook is stored for this seat — which link failed is not identified: the relay may never have posted (it needs OPENRIG_RUNTIME, the relay URL and the token in the agent process), Codex hook-trust may be uncleared, or ingest may have rejected posts (401 token mismatch, 503 unconfigured)`);
1404
1539
  }
1405
- // W2a-1 — a GENERATION verdict is stale:true but the hook is RECENT (age ~0); collapsing it to
1406
- // "beyond the store window / seat quiet" mislabels per-path missing carry / dead-tenure as a DARK
1407
- // seat and defeats the inert-visible differentiation. Distinguish the generation cause explicitly
1408
- // BEFORE the clock-stale fallback. generation_unverifiable is the per-hook no-generation signal
1409
- // (sound, not dark); the others name a real generation condition, not a quiet seat.
1540
+ const ageMs = latest.eventAt ? this.now().getTime() - Date.parse(latest.eventAt) : NaN;
1541
+ const ageText = Number.isFinite(ageMs) ? `${Math.round(ageMs / 1000)}s ago` : "at an unknown time";
1542
+ const recent = Number.isFinite(ageMs) && ageMs <= store.freshnessMs;
1543
+ // W2a-1 — a GENERATION verdict is stale:true even for a RECENT hook; collapsing a recent one to
1544
+ // "seat quiet" mislabels per-path missing carry / dead-tenure as a DARK seat. Age is checked FIRST
1545
+ // so an old hook is never called recent; its generation verdict is still reported, separately.
1410
1546
  if (latest.stale === true && typeof latest.reason === "string" && latest.reason.startsWith("generation_")) {
1411
- const ageS = latest.eventAt ? Math.round((this.now().getTime() - Date.parse(latest.eventAt)) / 1000) : null;
1412
- const age = ageS !== null ? `${ageS}s ago` : "recently";
1547
+ if (!recent) {
1548
+ const verdict = {
1549
+ generation_unverifiable: "it carried NO occupant generation",
1550
+ generation_unresolvable: "the LIVE occupant generation could not be resolved",
1551
+ generation_mismatch: "it belongs to a PRIOR occupant generation (a dead tenure)",
1552
+ generation_resolver_error: "the occupant-generation resolver errored",
1553
+ };
1554
+ return withEnv(`producer link STALE — the last activity hook arrived ${ageText}, beyond the ${Math.round(store.freshnessMs / 1000)}s store window, and ${verdict[latest.reason] ?? `its generation verdict is ${latest.reason}`}; no recent hook from this live occupant`);
1555
+ }
1556
+ // A recent hook not verified as the LIVE occupant's says nothing about this occupant's own
1557
+ // producer prerequisites, so none of these is "producer link OK" and each keeps the env note.
1558
+ const age = ageText;
1413
1559
  switch (latest.reason) {
1414
1560
  case "generation_unverifiable":
1415
1561
  // Carried generation was null on THIS hook. Managed launch and fresh-handover producers carry
1416
1562
  // it; legacy/excluded launch paths or an occupant with no tenure at fire time may not. Sound,
1417
1563
  // not dark; not a quiet seat.
1418
- return `producer link OK — a recent hook exists (${age}) but carried NO occupant generation; the emitting launch path supplied NO occupant generation (legacy/excluded path), or the emitting occupant had no tenure at fire time. Generation UNVERIFIABLE, not a quiet seat`;
1564
+ return withEnv(`hook received, producer unverified — a recent hook exists (${age}) but carried NO occupant generation; the emitting launch path supplied NO occupant generation (legacy/excluded path), or the emitting occupant had no tenure at fire time. Generation UNVERIFIABLE, not a quiet seat`);
1419
1565
  case "generation_unresolvable":
1420
- return `producer link OK — a recent hook exists (${age}) but the LIVE occupant generation could not be resolved (no tenure row); generation UNRESOLVABLE, not a quiet seat`;
1566
+ return withEnv(`hook received, producer unverified — a recent hook exists (${age}) but the LIVE occupant generation could not be resolved (no tenure row); generation UNRESOLVABLE, not a quiet seat`);
1421
1567
  case "generation_mismatch":
1422
- return `producer link OK — a recent hook exists (${age}) but it belongs to a PRIOR occupant generation (a dead tenure), not this live occupant; the seat is NOT quiet`;
1568
+ return withEnv(`hook received from a prior occupant — a recent hook exists (${age}) but it belongs to a PRIOR occupant generation (a dead tenure), not this live occupant; it is no evidence for this occupant's producer`);
1423
1569
  case "generation_resolver_error":
1424
- return `producer link OK — a recent hook exists (${age}) but the occupant-generation resolver errored; generation verdict DEGRADED, not a quiet seat`;
1570
+ return withEnv(`hook received, producer unverified — a recent hook exists (${age}) but the occupant-generation resolver errored; generation verdict DEGRADED, not a quiet seat`);
1425
1571
  }
1426
1572
  }
1427
1573
  if (latest.stale === true) {
1428
- const ageS = latest.eventAt ? Math.round((this.now().getTime() - Date.parse(latest.eventAt)) / 1000) : null;
1429
- return `producer link OK but STALE — the last activity hook arrived ${ageS !== null ? `${ageS}s ago` : "long ago"} (beyond the store window); the seat has gone quiet or its hooks stopped firing`;
1574
+ return withEnv(`producer link STALE — the last activity hook arrived ${ageText} (beyond the store window); the seat has gone quiet or its hooks stopped firing`);
1430
1575
  }
1431
1576
  return `a recent activity hook exists but the live pane probe could not confirm idle (possible identity mismatch between the seat env, the DB, and the stored payload)`;
1432
1577
  }