@openrig/cli 0.6.4 → 0.6.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1443) hide show
  1. package/README.md +405 -0
  2. package/daemon/assets/onboarding/02-self-and-competent-action.md +42 -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/applying-a-permission-policy/SKILL.md +41 -21
  7. package/daemon/assets/plugins/openrig-core/skills/claude-compaction-restore/SKILL.md +207 -132
  8. package/daemon/assets/plugins/openrig-core/skills/claude-compaction-restore/reference/SKILL-v1.md +143 -0
  9. package/daemon/assets/plugins/openrig-core/skills/forming-an-openrig-mental-model/SKILL.md +12 -12
  10. package/daemon/assets/plugins/openrig-core/skills/loading-addressable-markdown/scripts/resolve-markdown.mjs +2 -1
  11. package/daemon/assets/plugins/openrig-core/skills/messaging-the-human/SKILL.md +24 -0
  12. package/daemon/assets/plugins/openrig-core/skills/mission-slice-sop/SKILL.md +2 -2
  13. package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/SKILL.md +17 -0
  14. package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/scripts/compose.py +2 -2
  15. package/daemon/assets/plugins/openrig-core/skills/openrig-skills/SKILL.md +9 -4
  16. package/daemon/assets/plugins/openrig-core/skills/openrig-user/SKILL.md +54 -23
  17. package/daemon/assets/plugins/openrig-core/skills/orienting-to-an-inherited-seat/SKILL.md +5 -7
  18. package/daemon/assets/plugins/openrig-core/skills/queue-handoff/SKILL.md +1 -19
  19. package/daemon/assets/plugins/openrig-core/skills/refocusing/SKILL.md +3 -0
  20. package/daemon/assets/plugins/openrig-core/skills/refocusing/scripts/trace-to-root.py +56 -4
  21. package/daemon/assets/plugins/openrig-core/skills/seat-continuity-and-handover/SKILL.md +0 -5
  22. package/daemon/assets/plugins/openrig-core/skills/session-compaction-and-restore/SKILL.md +5 -6
  23. package/daemon/context-packs/help/help.md +40 -10
  24. package/daemon/context-packs/help/manifest.yaml +1 -1
  25. package/daemon/context-packs/onboarding-width/manifest.yaml +1 -1
  26. package/daemon/context-packs/onboarding-width/public-what-you-can-do.md +26 -12
  27. package/daemon/context-packs/reference/getting-started.md +426 -111
  28. package/daemon/context-packs/reference/instance-layout.md +11 -0
  29. package/daemon/context-packs/reference/manifest.yaml +1 -1
  30. package/daemon/context-packs/reference/rig-spec.md +180 -29
  31. package/daemon/context-packs/skills/agent-operated-software/manifest.yaml +1 -1
  32. package/daemon/context-packs/skills/agent-operated-workflows/manifest.yaml +1 -1
  33. package/daemon/context-packs/skills/applying-a-permission-policy/SKILL.md +41 -21
  34. package/daemon/context-packs/skills/applying-a-permission-policy/manifest.yaml +1 -1
  35. package/daemon/context-packs/skills/claude-compaction-restore/SKILL.md +207 -132
  36. package/daemon/context-packs/skills/claude-compaction-restore/manifest.yaml +5 -3
  37. package/daemon/context-packs/skills/claude-compaction-restore/reference/SKILL-v1.md +143 -0
  38. package/daemon/context-packs/skills/core/agent-starters/SKILL.md +0 -6
  39. package/daemon/context-packs/skills/core/agent-starters/manifest.yaml +1 -1
  40. package/daemon/context-packs/skills/core/agent-startup-and-context-ingestion/SKILL.md +1 -8
  41. package/daemon/context-packs/skills/core/agent-startup-and-context-ingestion/manifest.yaml +1 -1
  42. package/daemon/context-packs/skills/core/cross-host-rig-commands/manifest.yaml +1 -1
  43. package/daemon/context-packs/skills/core/human-in-the-loop/manifest.yaml +1 -1
  44. package/daemon/context-packs/skills/core/messaging-the-human/SKILL.md +24 -0
  45. package/daemon/context-packs/skills/core/messaging-the-human/manifest.yaml +1 -1
  46. package/daemon/context-packs/skills/core/openrig-architect/SKILL.md +5 -5
  47. package/daemon/context-packs/skills/core/openrig-architect/manifest.yaml +3 -3
  48. package/daemon/context-packs/skills/core/openrig-cmux/manifest.yaml +1 -1
  49. package/daemon/context-packs/skills/core/openrig-herdr/manifest.yaml +1 -1
  50. package/daemon/context-packs/skills/core/openrig-skills/SKILL.md +9 -4
  51. package/daemon/context-packs/skills/core/openrig-skills/manifest.yaml +1 -1
  52. package/daemon/context-packs/skills/core/openrig-software-factory/SKILL.md +12 -9
  53. package/daemon/context-packs/skills/core/openrig-software-factory/manifest.yaml +1 -1
  54. package/daemon/context-packs/skills/core/openrig-software-factory/references/worked-example.md +29 -29
  55. package/daemon/context-packs/skills/core/openrig-upgrade/manifest.yaml +1 -1
  56. package/daemon/context-packs/skills/core/rig-bundles-and-shareable-artifacts/SKILL.md +0 -1
  57. package/daemon/context-packs/skills/core/rig-bundles-and-shareable-artifacts/manifest.yaml +1 -1
  58. package/daemon/context-packs/skills/core/rig-lifecycle/manifest.yaml +1 -1
  59. package/daemon/context-packs/skills/core/session-source-fork/SKILL.md +0 -5
  60. package/daemon/context-packs/skills/core/session-source-fork/manifest.yaml +1 -1
  61. package/daemon/context-packs/skills/core/specification-system/manifest.yaml +1 -1
  62. package/daemon/context-packs/skills/core/topology-mutation-and-seat-management/SKILL.md +24 -3
  63. package/daemon/context-packs/skills/core/topology-mutation-and-seat-management/manifest.yaml +3 -3
  64. package/daemon/context-packs/skills/core/watchdog/manifest.yaml +1 -1
  65. package/daemon/context-packs/skills/delegating-work/manifest.yaml +1 -1
  66. package/daemon/context-packs/skills/forming-an-openrig-mental-model/SKILL.md +12 -12
  67. package/daemon/context-packs/skills/forming-an-openrig-mental-model/manifest.yaml +1 -1
  68. package/daemon/context-packs/skills/loading-addressable-markdown/manifest.yaml +1 -1
  69. package/daemon/context-packs/skills/loading-addressable-markdown/scripts/resolve-markdown.mjs +2 -1
  70. package/daemon/context-packs/skills/mission-slice-sop/SKILL.md +2 -2
  71. package/daemon/context-packs/skills/mission-slice-sop/manifest.yaml +1 -1
  72. package/daemon/context-packs/skills/openrig-operating-model/SKILL.md +17 -0
  73. package/daemon/context-packs/skills/openrig-operating-model/manifest.yaml +1 -1
  74. package/daemon/context-packs/skills/openrig-operating-model/scripts/compose.py +2 -2
  75. package/daemon/context-packs/skills/openrig-user/SKILL.md +54 -23
  76. package/daemon/context-packs/skills/openrig-user/manifest.yaml +1 -1
  77. package/daemon/context-packs/skills/orienting-to-an-inherited-seat/SKILL.md +5 -7
  78. package/daemon/context-packs/skills/orienting-to-an-inherited-seat/manifest.yaml +1 -1
  79. package/daemon/context-packs/skills/pm/backlog-capture/manifest.yaml +1 -1
  80. package/daemon/context-packs/skills/pm/context-builder/manifest.yaml +1 -1
  81. package/daemon/context-packs/skills/pm/exec-summary/manifest.yaml +1 -1
  82. package/daemon/context-packs/skills/pm/office-hours/manifest.yaml +1 -1
  83. package/daemon/context-packs/skills/pm/plan-review/manifest.yaml +1 -1
  84. package/daemon/context-packs/skills/pm/requirements-writer/manifest.yaml +1 -1
  85. package/daemon/context-packs/skills/pm/ui-mockup/manifest.yaml +1 -1
  86. package/daemon/context-packs/skills/pods/development-team/manifest.yaml +1 -1
  87. package/daemon/context-packs/skills/pods/orchestration-team/manifest.yaml +1 -1
  88. package/daemon/context-packs/skills/pods/oversight-team/manifest.yaml +1 -1
  89. package/daemon/context-packs/skills/pods/review-team/manifest.yaml +1 -1
  90. package/daemon/context-packs/skills/process/agent-browser/OPENRIG.md +1 -1
  91. package/daemon/context-packs/skills/process/agent-browser/manifest.yaml +1 -1
  92. package/daemon/context-packs/skills/process/context-engineering/manifest.yaml +1 -1
  93. package/daemon/context-packs/skills/process/dogfood/manifest.yaml +1 -1
  94. package/daemon/context-packs/skills/process/frontend-design/manifest.yaml +1 -1
  95. package/daemon/context-packs/skills/process/systematic-debugging/SKILL.md +0 -2
  96. package/daemon/context-packs/skills/process/systematic-debugging/manifest.yaml +1 -1
  97. package/daemon/context-packs/skills/process/test-driven-development/manifest.yaml +1 -1
  98. package/daemon/context-packs/skills/process/verification-before-completion/manifest.yaml +1 -1
  99. package/daemon/context-packs/skills/queue-handoff/SKILL.md +1 -19
  100. package/daemon/context-packs/skills/queue-handoff/manifest.yaml +1 -1
  101. package/daemon/context-packs/skills/refocusing/SKILL.md +3 -0
  102. package/daemon/context-packs/skills/refocusing/manifest.yaml +1 -1
  103. package/daemon/context-packs/skills/refocusing/scripts/trace-to-root.py +56 -4
  104. package/daemon/context-packs/skills/retiring-and-inheriting-a-seat/manifest.yaml +1 -1
  105. package/daemon/context-packs/skills/seat-continuity-and-handover/SKILL.md +0 -5
  106. package/daemon/context-packs/skills/seat-continuity-and-handover/manifest.yaml +1 -1
  107. package/daemon/context-packs/skills/session-compaction-and-restore/SKILL.md +5 -6
  108. package/daemon/context-packs/skills/session-compaction-and-restore/manifest.yaml +1 -1
  109. package/daemon/context-packs/skills/software-for-agents/manifest.yaml +1 -1
  110. package/daemon/context-packs/world-example/manifest.yaml +1 -1
  111. package/daemon/context-packs/world-public/manifest.yaml +1 -1
  112. package/daemon/dist/adapters/claude-code-adapter.d.ts +18 -4
  113. package/daemon/dist/adapters/claude-code-adapter.d.ts.map +1 -1
  114. package/daemon/dist/adapters/claude-code-adapter.js +179 -63
  115. package/daemon/dist/adapters/claude-code-adapter.js.map +1 -1
  116. package/daemon/dist/adapters/claude-resume.d.ts +7 -1
  117. package/daemon/dist/adapters/claude-resume.d.ts.map +1 -1
  118. package/daemon/dist/adapters/claude-resume.js +44 -10
  119. package/daemon/dist/adapters/claude-resume.js.map +1 -1
  120. package/daemon/dist/adapters/codex-resume.d.ts +9 -1
  121. package/daemon/dist/adapters/codex-resume.d.ts.map +1 -1
  122. package/daemon/dist/adapters/codex-resume.js +22 -8
  123. package/daemon/dist/adapters/codex-resume.js.map +1 -1
  124. package/daemon/dist/adapters/codex-runtime-adapter.d.ts +11 -0
  125. package/daemon/dist/adapters/codex-runtime-adapter.d.ts.map +1 -1
  126. package/daemon/dist/adapters/codex-runtime-adapter.js +93 -73
  127. package/daemon/dist/adapters/codex-runtime-adapter.js.map +1 -1
  128. package/daemon/dist/adapters/compose-services-adapter.d.ts +2 -1
  129. package/daemon/dist/adapters/compose-services-adapter.d.ts.map +1 -1
  130. package/daemon/dist/adapters/compose-services-adapter.js +6 -3
  131. package/daemon/dist/adapters/compose-services-adapter.js.map +1 -1
  132. package/daemon/dist/adapters/daemon-url.d.ts +7 -0
  133. package/daemon/dist/adapters/daemon-url.d.ts.map +1 -0
  134. package/daemon/dist/adapters/daemon-url.js +12 -0
  135. package/daemon/dist/adapters/daemon-url.js.map +1 -0
  136. package/daemon/dist/adapters/kernel-authority.d.ts +10 -0
  137. package/daemon/dist/adapters/kernel-authority.d.ts.map +1 -0
  138. package/daemon/dist/adapters/kernel-authority.js +53 -0
  139. package/daemon/dist/adapters/kernel-authority.js.map +1 -0
  140. package/daemon/dist/adapters/non-interruptive.d.ts +14 -0
  141. package/daemon/dist/adapters/non-interruptive.d.ts.map +1 -0
  142. package/daemon/dist/adapters/non-interruptive.js +38 -0
  143. package/daemon/dist/adapters/non-interruptive.js.map +1 -0
  144. package/daemon/dist/adapters/omp-resume.d.ts +6 -0
  145. package/daemon/dist/adapters/omp-resume.d.ts.map +1 -0
  146. package/daemon/dist/adapters/omp-resume.js +6 -0
  147. package/daemon/dist/adapters/omp-resume.js.map +1 -0
  148. package/daemon/dist/adapters/omp-runtime-adapter.d.ts +10 -0
  149. package/daemon/dist/adapters/omp-runtime-adapter.d.ts.map +1 -0
  150. package/daemon/dist/adapters/omp-runtime-adapter.js +16 -0
  151. package/daemon/dist/adapters/omp-runtime-adapter.js.map +1 -0
  152. package/daemon/dist/adapters/pi-resume.d.ts +7 -1
  153. package/daemon/dist/adapters/pi-resume.d.ts.map +1 -1
  154. package/daemon/dist/adapters/pi-resume.js +27 -18
  155. package/daemon/dist/adapters/pi-resume.js.map +1 -1
  156. package/daemon/dist/adapters/pi-runner-protocol.d.ts +29 -2
  157. package/daemon/dist/adapters/pi-runner-protocol.d.ts.map +1 -1
  158. package/daemon/dist/adapters/pi-runner-protocol.js +89 -5
  159. package/daemon/dist/adapters/pi-runner-protocol.js.map +1 -1
  160. package/daemon/dist/adapters/pi-runner.d.ts +52 -5
  161. package/daemon/dist/adapters/pi-runner.d.ts.map +1 -1
  162. package/daemon/dist/adapters/pi-runner.js +429 -68
  163. package/daemon/dist/adapters/pi-runner.js.map +1 -1
  164. package/daemon/dist/adapters/pi-runtime-adapter.d.ts +11 -2
  165. package/daemon/dist/adapters/pi-runtime-adapter.d.ts.map +1 -1
  166. package/daemon/dist/adapters/pi-runtime-adapter.js +85 -40
  167. package/daemon/dist/adapters/pi-runtime-adapter.js.map +1 -1
  168. package/daemon/dist/adapters/preflight-exec.d.ts +11 -0
  169. package/daemon/dist/adapters/preflight-exec.d.ts.map +1 -0
  170. package/daemon/dist/adapters/preflight-exec.js +52 -0
  171. package/daemon/dist/adapters/preflight-exec.js.map +1 -0
  172. package/daemon/dist/adapters/stub-runner-protocol.d.ts +1 -1
  173. package/daemon/dist/adapters/stub-runner-protocol.d.ts.map +1 -1
  174. package/daemon/dist/adapters/stub-runner.d.ts +1 -1
  175. package/daemon/dist/adapters/stub-runner.d.ts.map +1 -1
  176. package/daemon/dist/adapters/stub-runner.js +3 -1
  177. package/daemon/dist/adapters/stub-runner.js.map +1 -1
  178. package/daemon/dist/adapters/stub-runtime-adapter.d.ts.map +1 -1
  179. package/daemon/dist/adapters/stub-runtime-adapter.js +11 -8
  180. package/daemon/dist/adapters/stub-runtime-adapter.js.map +1 -1
  181. package/daemon/dist/adapters/tmux.d.ts +52 -6
  182. package/daemon/dist/adapters/tmux.d.ts.map +1 -1
  183. package/daemon/dist/adapters/tmux.js +313 -57
  184. package/daemon/dist/adapters/tmux.js.map +1 -1
  185. package/daemon/dist/adapters/yolo-mode.d.ts +1 -1
  186. package/daemon/dist/adapters/yolo-mode.d.ts.map +1 -1
  187. package/daemon/dist/adapters/yolo-mode.js +3 -0
  188. package/daemon/dist/adapters/yolo-mode.js.map +1 -1
  189. package/daemon/dist/build-info.js +3 -3
  190. package/daemon/dist/bundle-behaviour-surface.d.ts +2 -0
  191. package/daemon/dist/bundle-behaviour-surface.d.ts.map +1 -0
  192. package/daemon/dist/bundle-behaviour-surface.js +2 -0
  193. package/daemon/dist/bundle-behaviour-surface.js.map +1 -0
  194. package/daemon/dist/bundle-identity-surface.d.ts +2 -0
  195. package/daemon/dist/bundle-identity-surface.d.ts.map +1 -0
  196. package/daemon/dist/bundle-identity-surface.js +4 -0
  197. package/daemon/dist/bundle-identity-surface.js.map +1 -0
  198. package/daemon/dist/daemon-shutdown.d.ts +19 -0
  199. package/daemon/dist/daemon-shutdown.d.ts.map +1 -1
  200. package/daemon/dist/daemon-shutdown.js +85 -0
  201. package/daemon/dist/daemon-shutdown.js.map +1 -1
  202. package/daemon/dist/db/all-migrations.d.ts +1 -1
  203. package/daemon/dist/db/all-migrations.d.ts.map +1 -1
  204. package/daemon/dist/db/all-migrations.js +12 -2
  205. package/daemon/dist/db/all-migrations.js.map +1 -1
  206. package/daemon/dist/db/migrations/090_human_reply_to.d.ts +3 -0
  207. package/daemon/dist/db/migrations/090_human_reply_to.d.ts.map +1 -0
  208. package/daemon/dist/db/migrations/090_human_reply_to.js +7 -0
  209. package/daemon/dist/db/migrations/090_human_reply_to.js.map +1 -0
  210. package/daemon/dist/db/migrations/091_human_questions.d.ts +3 -0
  211. package/daemon/dist/db/migrations/091_human_questions.d.ts.map +1 -0
  212. package/daemon/dist/db/migrations/091_human_questions.js +9 -0
  213. package/daemon/dist/db/migrations/091_human_questions.js.map +1 -0
  214. package/daemon/dist/db/migrations/092_node_effort.d.ts +3 -0
  215. package/daemon/dist/db/migrations/092_node_effort.d.ts.map +1 -0
  216. package/daemon/dist/db/migrations/092_node_effort.js +8 -0
  217. package/daemon/dist/db/migrations/092_node_effort.js.map +1 -0
  218. package/daemon/dist/db/migrations/094_usage_samples_latest_indexes.d.ts +3 -0
  219. package/daemon/dist/db/migrations/094_usage_samples_latest_indexes.d.ts.map +1 -0
  220. package/daemon/dist/db/migrations/094_usage_samples_latest_indexes.js +12 -0
  221. package/daemon/dist/db/migrations/094_usage_samples_latest_indexes.js.map +1 -0
  222. package/daemon/dist/db/migrations/095_rig_non_interruptive.d.ts +3 -0
  223. package/daemon/dist/db/migrations/095_rig_non_interruptive.d.ts.map +1 -0
  224. package/daemon/dist/db/migrations/095_rig_non_interruptive.js +5 -0
  225. package/daemon/dist/db/migrations/095_rig_non_interruptive.js.map +1 -0
  226. package/daemon/dist/domain/activity-endpoint.d.ts.map +1 -1
  227. package/daemon/dist/domain/activity-endpoint.js +3 -1
  228. package/daemon/dist/domain/activity-endpoint.js.map +1 -1
  229. package/daemon/dist/domain/agent-activity-store.d.ts +3 -1
  230. package/daemon/dist/domain/agent-activity-store.d.ts.map +1 -1
  231. package/daemon/dist/domain/agent-activity-store.js +13 -3
  232. package/daemon/dist/domain/agent-activity-store.js.map +1 -1
  233. package/daemon/dist/domain/agent-images/agent-image-library-service.d.ts.map +1 -1
  234. package/daemon/dist/domain/agent-images/agent-image-library-service.js +76 -56
  235. package/daemon/dist/domain/agent-images/agent-image-library-service.js.map +1 -1
  236. package/daemon/dist/domain/agent-manifest.d.ts.map +1 -1
  237. package/daemon/dist/domain/agent-manifest.js +28 -5
  238. package/daemon/dist/domain/agent-manifest.js.map +1 -1
  239. package/daemon/dist/domain/bootstrap-orchestrator.d.ts +10 -0
  240. package/daemon/dist/domain/bootstrap-orchestrator.d.ts.map +1 -1
  241. package/daemon/dist/domain/bootstrap-orchestrator.js +136 -33
  242. package/daemon/dist/domain/bootstrap-orchestrator.js.map +1 -1
  243. package/daemon/dist/domain/builtin-policy-reference.d.ts +1 -1
  244. package/daemon/dist/domain/builtin-policy-reference.d.ts.map +1 -1
  245. package/daemon/dist/domain/builtin-policy-reference.js +2 -2
  246. package/daemon/dist/domain/builtin-policy-reference.js.map +1 -1
  247. package/daemon/dist/domain/bundle-archive.d.ts +24 -0
  248. package/daemon/dist/domain/bundle-archive.d.ts.map +1 -1
  249. package/daemon/dist/domain/bundle-archive.js +66 -21
  250. package/daemon/dist/domain/bundle-archive.js.map +1 -1
  251. package/daemon/dist/domain/bundle-audit.d.ts +5 -0
  252. package/daemon/dist/domain/bundle-audit.d.ts.map +1 -1
  253. package/daemon/dist/domain/bundle-audit.js.map +1 -1
  254. package/daemon/dist/domain/bundle-behaviour-inspect.d.ts +4 -0
  255. package/daemon/dist/domain/bundle-behaviour-inspect.d.ts.map +1 -0
  256. package/daemon/dist/domain/bundle-behaviour-inspect.js +56 -0
  257. package/daemon/dist/domain/bundle-behaviour-inspect.js.map +1 -0
  258. package/daemon/dist/domain/bundle-behaviour.d.ts +118 -0
  259. package/daemon/dist/domain/bundle-behaviour.d.ts.map +1 -0
  260. package/daemon/dist/domain/bundle-behaviour.js +364 -0
  261. package/daemon/dist/domain/bundle-behaviour.js.map +1 -0
  262. package/daemon/dist/domain/bundle-carried-context-pack.d.ts +16 -0
  263. package/daemon/dist/domain/bundle-carried-context-pack.d.ts.map +1 -0
  264. package/daemon/dist/domain/bundle-carried-context-pack.js +67 -0
  265. package/daemon/dist/domain/bundle-carried-context-pack.js.map +1 -0
  266. package/daemon/dist/domain/bundle-carried-project.d.ts +13 -0
  267. package/daemon/dist/domain/bundle-carried-project.d.ts.map +1 -0
  268. package/daemon/dist/domain/bundle-carried-project.js +71 -0
  269. package/daemon/dist/domain/bundle-carried-project.js.map +1 -0
  270. package/daemon/dist/domain/bundle-conflict-detector.js +3 -3
  271. package/daemon/dist/domain/bundle-conflict-detector.js.map +1 -1
  272. package/daemon/dist/domain/bundle-content-routing.d.ts +49 -0
  273. package/daemon/dist/domain/bundle-content-routing.d.ts.map +1 -0
  274. package/daemon/dist/domain/bundle-content-routing.js +246 -0
  275. package/daemon/dist/domain/bundle-content-routing.js.map +1 -0
  276. package/daemon/dist/domain/bundle-context-packs-router.d.ts +7 -2
  277. package/daemon/dist/domain/bundle-context-packs-router.d.ts.map +1 -1
  278. package/daemon/dist/domain/bundle-context-packs-router.js +19 -0
  279. package/daemon/dist/domain/bundle-context-packs-router.js.map +1 -1
  280. package/daemon/dist/domain/bundle-identity.d.ts +27 -0
  281. package/daemon/dist/domain/bundle-identity.d.ts.map +1 -0
  282. package/daemon/dist/domain/bundle-identity.js +34 -0
  283. package/daemon/dist/domain/bundle-identity.js.map +1 -0
  284. package/daemon/dist/domain/bundle-install-context.d.ts +22 -0
  285. package/daemon/dist/domain/bundle-install-context.d.ts.map +1 -0
  286. package/daemon/dist/domain/bundle-install-context.js +51 -0
  287. package/daemon/dist/domain/bundle-install-context.js.map +1 -0
  288. package/daemon/dist/domain/bundle-integrity.d.ts +1 -0
  289. package/daemon/dist/domain/bundle-integrity.d.ts.map +1 -1
  290. package/daemon/dist/domain/bundle-integrity.js +1 -1
  291. package/daemon/dist/domain/bundle-integrity.js.map +1 -1
  292. package/daemon/dist/domain/bundle-source-resolver.d.ts +4 -1
  293. package/daemon/dist/domain/bundle-source-resolver.d.ts.map +1 -1
  294. package/daemon/dist/domain/bundle-source-resolver.js +73 -19
  295. package/daemon/dist/domain/bundle-source-resolver.js.map +1 -1
  296. package/daemon/dist/domain/bundle-types.d.ts +37 -0
  297. package/daemon/dist/domain/bundle-types.d.ts.map +1 -1
  298. package/daemon/dist/domain/bundle-types.js +78 -0
  299. package/daemon/dist/domain/bundle-types.js.map +1 -1
  300. package/daemon/dist/domain/chat-repository.d.ts.map +1 -1
  301. package/daemon/dist/domain/chat-repository.js +3 -1
  302. package/daemon/dist/domain/chat-repository.js.map +1 -1
  303. package/daemon/dist/domain/checkpoint-store.d.ts.map +1 -1
  304. package/daemon/dist/domain/checkpoint-store.js +2 -2
  305. package/daemon/dist/domain/checkpoint-store.js.map +1 -1
  306. package/daemon/dist/domain/claim-service.d.ts +7 -0
  307. package/daemon/dist/domain/claim-service.d.ts.map +1 -1
  308. package/daemon/dist/domain/claim-service.js +6 -2
  309. package/daemon/dist/domain/claim-service.js.map +1 -1
  310. package/daemon/dist/domain/claude-compaction-enforcer.d.ts +38 -12
  311. package/daemon/dist/domain/claude-compaction-enforcer.d.ts.map +1 -1
  312. package/daemon/dist/domain/claude-compaction-enforcer.js +291 -128
  313. package/daemon/dist/domain/claude-compaction-enforcer.js.map +1 -1
  314. package/daemon/dist/domain/claude-managed-launch.d.ts +13 -0
  315. package/daemon/dist/domain/claude-managed-launch.d.ts.map +1 -1
  316. package/daemon/dist/domain/claude-managed-launch.js +31 -4
  317. package/daemon/dist/domain/claude-managed-launch.js.map +1 -1
  318. package/daemon/dist/domain/codex-daemon-support.d.ts +1 -1
  319. package/daemon/dist/domain/codex-daemon-support.d.ts.map +1 -1
  320. package/daemon/dist/domain/codex-daemon-support.js +2 -2
  321. package/daemon/dist/domain/codex-daemon-support.js.map +1 -1
  322. package/daemon/dist/domain/codex-network-default.d.ts +42 -0
  323. package/daemon/dist/domain/codex-network-default.d.ts.map +1 -0
  324. package/daemon/dist/domain/codex-network-default.js +230 -0
  325. package/daemon/dist/domain/codex-network-default.js.map +1 -0
  326. package/daemon/dist/domain/codex-profile-preflight.d.ts +1 -1
  327. package/daemon/dist/domain/codex-profile-preflight.d.ts.map +1 -1
  328. package/daemon/dist/domain/codex-profile-preflight.js +3 -3
  329. package/daemon/dist/domain/codex-profile-preflight.js.map +1 -1
  330. package/daemon/dist/domain/codex-team-workspace.d.ts +8 -0
  331. package/daemon/dist/domain/codex-team-workspace.d.ts.map +1 -0
  332. package/daemon/dist/domain/codex-team-workspace.js +54 -0
  333. package/daemon/dist/domain/codex-team-workspace.js.map +1 -0
  334. package/daemon/dist/domain/codex-thread-id.d.ts +4 -2
  335. package/daemon/dist/domain/codex-thread-id.d.ts.map +1 -1
  336. package/daemon/dist/domain/codex-thread-id.js +10 -6
  337. package/daemon/dist/domain/codex-thread-id.js.map +1 -1
  338. package/daemon/dist/domain/context-monitor.d.ts.map +1 -1
  339. package/daemon/dist/domain/context-monitor.js +9 -2
  340. package/daemon/dist/domain/context-monitor.js.map +1 -1
  341. package/daemon/dist/domain/context-packs/context-pack-library-service.d.ts.map +1 -1
  342. package/daemon/dist/domain/context-packs/context-pack-library-service.js +13 -2
  343. package/daemon/dist/domain/context-packs/context-pack-library-service.js.map +1 -1
  344. package/daemon/dist/domain/context-packs/profile-composer.d.ts +5 -0
  345. package/daemon/dist/domain/context-packs/profile-composer.d.ts.map +1 -1
  346. package/daemon/dist/domain/context-packs/profile-composer.js +30 -15
  347. package/daemon/dist/domain/context-packs/profile-composer.js.map +1 -1
  348. package/daemon/dist/domain/context-packs/profile-source-resolver.d.ts +10 -0
  349. package/daemon/dist/domain/context-packs/profile-source-resolver.d.ts.map +1 -1
  350. package/daemon/dist/domain/context-packs/profile-source-resolver.js +43 -8
  351. package/daemon/dist/domain/context-packs/profile-source-resolver.js.map +1 -1
  352. package/daemon/dist/domain/context-packs/seat-recap-store.d.ts.map +1 -1
  353. package/daemon/dist/domain/context-packs/seat-recap-store.js +73 -16
  354. package/daemon/dist/domain/context-packs/seat-recap-store.js.map +1 -1
  355. package/daemon/dist/domain/context-usage-store.d.ts +3 -0
  356. package/daemon/dist/domain/context-usage-store.d.ts.map +1 -1
  357. package/daemon/dist/domain/context-usage-store.js +4 -2
  358. package/daemon/dist/domain/context-usage-store.js.map +1 -1
  359. package/daemon/dist/domain/crash-cart-detect.d.ts.map +1 -1
  360. package/daemon/dist/domain/crash-cart-detect.js +2 -1
  361. package/daemon/dist/domain/crash-cart-detect.js.map +1 -1
  362. package/daemon/dist/domain/crash-cart-discovery.d.ts.map +1 -1
  363. package/daemon/dist/domain/crash-cart-discovery.js +4 -2
  364. package/daemon/dist/domain/crash-cart-discovery.js.map +1 -1
  365. package/daemon/dist/domain/current-work.d.ts +17 -0
  366. package/daemon/dist/domain/current-work.d.ts.map +1 -1
  367. package/daemon/dist/domain/current-work.js +46 -0
  368. package/daemon/dist/domain/current-work.js.map +1 -1
  369. package/daemon/dist/domain/cwd-resolution.js +1 -1
  370. package/daemon/dist/domain/cwd-resolution.js.map +1 -1
  371. package/daemon/dist/domain/daemon-url.d.ts +7 -0
  372. package/daemon/dist/domain/daemon-url.d.ts.map +1 -0
  373. package/daemon/dist/domain/daemon-url.js +12 -0
  374. package/daemon/dist/domain/daemon-url.js.map +1 -0
  375. package/daemon/dist/domain/daemon-version.d.ts +3 -1
  376. package/daemon/dist/domain/daemon-version.d.ts.map +1 -1
  377. package/daemon/dist/domain/daemon-version.js +6 -1
  378. package/daemon/dist/domain/daemon-version.js.map +1 -1
  379. package/daemon/dist/domain/discovery-types.d.ts +1 -1
  380. package/daemon/dist/domain/discovery-types.d.ts.map +1 -1
  381. package/daemon/dist/domain/event-bus.d.ts +1 -0
  382. package/daemon/dist/domain/event-bus.d.ts.map +1 -1
  383. package/daemon/dist/domain/event-bus.js +18 -7
  384. package/daemon/dist/domain/event-bus.js.map +1 -1
  385. package/daemon/dist/domain/event-loop-monitor.d.ts +6 -0
  386. package/daemon/dist/domain/event-loop-monitor.d.ts.map +1 -1
  387. package/daemon/dist/domain/event-loop-monitor.js +13 -0
  388. package/daemon/dist/domain/event-loop-monitor.js.map +1 -1
  389. package/daemon/dist/domain/execution-view.d.ts +3 -3
  390. package/daemon/dist/domain/execution-view.d.ts.map +1 -1
  391. package/daemon/dist/domain/execution-view.js +116 -93
  392. package/daemon/dist/domain/execution-view.js.map +1 -1
  393. package/daemon/dist/domain/finite-telemetry.d.ts +74 -0
  394. package/daemon/dist/domain/finite-telemetry.d.ts.map +1 -0
  395. package/daemon/dist/domain/finite-telemetry.js +236 -0
  396. package/daemon/dist/domain/finite-telemetry.js.map +1 -0
  397. package/daemon/dist/domain/gateway/connections-projection.d.ts +1 -1
  398. package/daemon/dist/domain/gateway/gateway-subsystem.d.ts +2 -0
  399. package/daemon/dist/domain/gateway/gateway-subsystem.d.ts.map +1 -1
  400. package/daemon/dist/domain/gateway/gateway-subsystem.js +4 -0
  401. package/daemon/dist/domain/gateway/gateway-subsystem.js.map +1 -1
  402. package/daemon/dist/domain/gateway/operator-delivery-engine.d.ts +9 -7
  403. package/daemon/dist/domain/gateway/operator-delivery-engine.d.ts.map +1 -1
  404. package/daemon/dist/domain/gateway/operator-delivery-engine.js +38 -16
  405. package/daemon/dist/domain/gateway/operator-delivery-engine.js.map +1 -1
  406. package/daemon/dist/domain/gateway/slack/channel-recovery.d.ts +45 -0
  407. package/daemon/dist/domain/gateway/slack/channel-recovery.d.ts.map +1 -0
  408. package/daemon/dist/domain/gateway/slack/channel-recovery.js +176 -0
  409. package/daemon/dist/domain/gateway/slack/channel-recovery.js.map +1 -0
  410. package/daemon/dist/domain/gateway/slack/inbound.d.ts +74 -4
  411. package/daemon/dist/domain/gateway/slack/inbound.d.ts.map +1 -1
  412. package/daemon/dist/domain/gateway/slack/inbound.js +163 -18
  413. package/daemon/dist/domain/gateway/slack/inbound.js.map +1 -1
  414. package/daemon/dist/domain/gateway/slack/manifest.js +1 -1
  415. package/daemon/dist/domain/gateway/slack/manifest.js.map +1 -1
  416. package/daemon/dist/domain/gateway/slack/message.d.ts +17 -0
  417. package/daemon/dist/domain/gateway/slack/message.d.ts.map +1 -1
  418. package/daemon/dist/domain/gateway/slack/message.js +77 -3
  419. package/daemon/dist/domain/gateway/slack/message.js.map +1 -1
  420. package/daemon/dist/domain/gateway/slack/outbound-driver.d.ts +3 -0
  421. package/daemon/dist/domain/gateway/slack/outbound-driver.d.ts.map +1 -1
  422. package/daemon/dist/domain/gateway/slack/outbound-driver.js +2 -0
  423. package/daemon/dist/domain/gateway/slack/outbound-driver.js.map +1 -1
  424. package/daemon/dist/domain/gateway/slack/queue-access.d.ts +3 -0
  425. package/daemon/dist/domain/gateway/slack/queue-access.d.ts.map +1 -1
  426. package/daemon/dist/domain/gateway/slack/queue-access.js +15 -5
  427. package/daemon/dist/domain/gateway/slack/queue-access.js.map +1 -1
  428. package/daemon/dist/domain/gateway/slack/secrets.d.ts.map +1 -1
  429. package/daemon/dist/domain/gateway/slack/secrets.js +5 -4
  430. package/daemon/dist/domain/gateway/slack/secrets.js.map +1 -1
  431. package/daemon/dist/domain/gateway/slack/slack-api.d.ts +17 -10
  432. package/daemon/dist/domain/gateway/slack/slack-api.d.ts.map +1 -1
  433. package/daemon/dist/domain/gateway/slack/slack-api.js +94 -24
  434. package/daemon/dist/domain/gateway/slack/slack-api.js.map +1 -1
  435. package/daemon/dist/domain/gateway/slack/slack-delivery.d.ts +33 -10
  436. package/daemon/dist/domain/gateway/slack/slack-delivery.d.ts.map +1 -1
  437. package/daemon/dist/domain/gateway/slack/slack-delivery.js +107 -26
  438. package/daemon/dist/domain/gateway/slack/slack-delivery.js.map +1 -1
  439. package/daemon/dist/domain/gateway/slack/slack-subsystem.d.ts +1 -1
  440. package/daemon/dist/domain/gateway/slack/slack-subsystem.d.ts.map +1 -1
  441. package/daemon/dist/domain/gateway/slack/slack-subsystem.js +121 -28
  442. package/daemon/dist/domain/gateway/slack/slack-subsystem.js.map +1 -1
  443. package/daemon/dist/domain/gateway/slack/socket-inbound.d.ts +4 -0
  444. package/daemon/dist/domain/gateway/slack/socket-inbound.d.ts.map +1 -1
  445. package/daemon/dist/domain/gateway/slack/socket-inbound.js +14 -1
  446. package/daemon/dist/domain/gateway/slack/socket-inbound.js.map +1 -1
  447. package/daemon/dist/domain/gateway/slack/state-store.d.ts +27 -0
  448. package/daemon/dist/domain/gateway/slack/state-store.d.ts.map +1 -1
  449. package/daemon/dist/domain/gateway/slack/state-store.js +102 -1
  450. package/daemon/dist/domain/gateway/slack/state-store.js.map +1 -1
  451. package/daemon/dist/domain/gateway/slack/thread-routing.d.ts.map +1 -1
  452. package/daemon/dist/domain/gateway/slack/thread-routing.js +7 -2
  453. package/daemon/dist/domain/gateway/slack/thread-routing.js.map +1 -1
  454. package/daemon/dist/domain/gateway/slack/thread-seat-map.d.ts +3 -0
  455. package/daemon/dist/domain/gateway/slack/thread-seat-map.d.ts.map +1 -1
  456. package/daemon/dist/domain/gateway/slack/thread-seat-map.js +14 -2
  457. package/daemon/dist/domain/gateway/slack/thread-seat-map.js.map +1 -1
  458. package/daemon/dist/domain/generated-file-hygiene.d.ts +3 -0
  459. package/daemon/dist/domain/generated-file-hygiene.d.ts.map +1 -0
  460. package/daemon/dist/domain/generated-file-hygiene.js +142 -0
  461. package/daemon/dist/domain/generated-file-hygiene.js.map +1 -0
  462. package/daemon/dist/domain/graph-projection.d.ts.map +1 -1
  463. package/daemon/dist/domain/graph-projection.js +1 -0
  464. package/daemon/dist/domain/graph-projection.js.map +1 -1
  465. package/daemon/dist/domain/health-checkpoints.d.ts +2 -0
  466. package/daemon/dist/domain/health-checkpoints.d.ts.map +1 -1
  467. package/daemon/dist/domain/health-checkpoints.js +2 -0
  468. package/daemon/dist/domain/health-checkpoints.js.map +1 -1
  469. package/daemon/dist/domain/health-detectors.d.ts +32 -1
  470. package/daemon/dist/domain/health-detectors.d.ts.map +1 -1
  471. package/daemon/dist/domain/health-detectors.js +40 -9
  472. package/daemon/dist/domain/health-detectors.js.map +1 -1
  473. package/daemon/dist/domain/health-diagnosis.d.ts +3 -1
  474. package/daemon/dist/domain/health-diagnosis.d.ts.map +1 -1
  475. package/daemon/dist/domain/health-diagnosis.js +6 -3
  476. package/daemon/dist/domain/health-diagnosis.js.map +1 -1
  477. package/daemon/dist/domain/health-passive-ceremony.d.ts +5 -1
  478. package/daemon/dist/domain/health-passive-ceremony.d.ts.map +1 -1
  479. package/daemon/dist/domain/health-passive-ceremony.js +20 -4
  480. package/daemon/dist/domain/health-passive-ceremony.js.map +1 -1
  481. package/daemon/dist/domain/hosts/remote-daemon-http.d.ts +3 -1
  482. package/daemon/dist/domain/hosts/remote-daemon-http.d.ts.map +1 -1
  483. package/daemon/dist/domain/hosts/remote-daemon-http.js +10 -3
  484. package/daemon/dist/domain/hosts/remote-daemon-http.js.map +1 -1
  485. package/daemon/dist/domain/human-questions.d.ts +41 -0
  486. package/daemon/dist/domain/human-questions.d.ts.map +1 -0
  487. package/daemon/dist/domain/human-questions.js +81 -0
  488. package/daemon/dist/domain/human-questions.js.map +1 -0
  489. package/daemon/dist/domain/install-planner.d.ts.map +1 -1
  490. package/daemon/dist/domain/install-planner.js +17 -0
  491. package/daemon/dist/domain/install-planner.js.map +1 -1
  492. package/daemon/dist/domain/managed-blocks.d.ts +1 -0
  493. package/daemon/dist/domain/managed-blocks.d.ts.map +1 -1
  494. package/daemon/dist/domain/managed-blocks.js +3 -0
  495. package/daemon/dist/domain/managed-blocks.js.map +1 -1
  496. package/daemon/dist/domain/markdown-address.js +1 -1
  497. package/daemon/dist/domain/markdown-address.js.map +1 -1
  498. package/daemon/dist/domain/mission-control/audit-browse.d.ts +5 -0
  499. package/daemon/dist/domain/mission-control/audit-browse.d.ts.map +1 -1
  500. package/daemon/dist/domain/mission-control/audit-browse.js +11 -1
  501. package/daemon/dist/domain/mission-control/audit-browse.js.map +1 -1
  502. package/daemon/dist/domain/mission-control/mission-control-fleet-cli-capability.d.ts +25 -63
  503. package/daemon/dist/domain/mission-control/mission-control-fleet-cli-capability.d.ts.map +1 -1
  504. package/daemon/dist/domain/mission-control/mission-control-fleet-cli-capability.js +34 -100
  505. package/daemon/dist/domain/mission-control/mission-control-fleet-cli-capability.js.map +1 -1
  506. package/daemon/dist/domain/mission-control/mission-control-read-layer.d.ts +1 -0
  507. package/daemon/dist/domain/mission-control/mission-control-read-layer.d.ts.map +1 -1
  508. package/daemon/dist/domain/mission-control/mission-control-read-layer.js +6 -3
  509. package/daemon/dist/domain/mission-control/mission-control-read-layer.js.map +1 -1
  510. package/daemon/dist/domain/mission-control/notification-adapter-ntfy.d.ts +5 -0
  511. package/daemon/dist/domain/mission-control/notification-adapter-ntfy.d.ts.map +1 -1
  512. package/daemon/dist/domain/mission-control/notification-adapter-ntfy.js +33 -2
  513. package/daemon/dist/domain/mission-control/notification-adapter-ntfy.js.map +1 -1
  514. package/daemon/dist/domain/mission-control/notification-adapter-types.d.ts +2 -0
  515. package/daemon/dist/domain/mission-control/notification-adapter-types.d.ts.map +1 -1
  516. package/daemon/dist/domain/mission-control/notification-adapter-webhook.d.ts +4 -0
  517. package/daemon/dist/domain/mission-control/notification-adapter-webhook.d.ts.map +1 -1
  518. package/daemon/dist/domain/mission-control/notification-adapter-webhook.js +33 -2
  519. package/daemon/dist/domain/mission-control/notification-adapter-webhook.js.map +1 -1
  520. package/daemon/dist/domain/mission-control/outbound-url-validator.d.ts +27 -0
  521. package/daemon/dist/domain/mission-control/outbound-url-validator.d.ts.map +1 -0
  522. package/daemon/dist/domain/mission-control/outbound-url-validator.js +60 -0
  523. package/daemon/dist/domain/mission-control/outbound-url-validator.js.map +1 -0
  524. package/daemon/dist/domain/native-permission-store.d.ts +14 -0
  525. package/daemon/dist/domain/native-permission-store.d.ts.map +1 -1
  526. package/daemon/dist/domain/native-permission-store.js +168 -4
  527. package/daemon/dist/domain/native-permission-store.js.map +1 -1
  528. package/daemon/dist/domain/native-process-executable.d.ts +4 -0
  529. package/daemon/dist/domain/native-process-executable.d.ts.map +1 -0
  530. package/daemon/dist/domain/native-process-executable.js +53 -0
  531. package/daemon/dist/domain/native-process-executable.js.map +1 -0
  532. package/daemon/dist/domain/native-process-lineage.d.ts +11 -2
  533. package/daemon/dist/domain/native-process-lineage.d.ts.map +1 -1
  534. package/daemon/dist/domain/native-process-lineage.js +135 -15
  535. package/daemon/dist/domain/native-process-lineage.js.map +1 -1
  536. package/daemon/dist/domain/native-resume-probe.d.ts +8 -2
  537. package/daemon/dist/domain/native-resume-probe.d.ts.map +1 -1
  538. package/daemon/dist/domain/native-resume-probe.js +55 -11
  539. package/daemon/dist/domain/native-resume-probe.js.map +1 -1
  540. package/daemon/dist/domain/node-inventory.d.ts.map +1 -1
  541. package/daemon/dist/domain/node-inventory.js +91 -44
  542. package/daemon/dist/domain/node-inventory.js.map +1 -1
  543. package/daemon/dist/domain/node-launcher.d.ts +4 -0
  544. package/daemon/dist/domain/node-launcher.d.ts.map +1 -1
  545. package/daemon/dist/domain/node-launcher.js +4 -1
  546. package/daemon/dist/domain/node-launcher.js.map +1 -1
  547. package/daemon/dist/domain/periodic-snapshot-scheduler.d.ts +1 -0
  548. package/daemon/dist/domain/periodic-snapshot-scheduler.d.ts.map +1 -1
  549. package/daemon/dist/domain/periodic-snapshot-scheduler.js +25 -0
  550. package/daemon/dist/domain/periodic-snapshot-scheduler.js.map +1 -1
  551. package/daemon/dist/domain/permission-drift.d.ts +1 -0
  552. package/daemon/dist/domain/permission-drift.d.ts.map +1 -1
  553. package/daemon/dist/domain/permission-drift.js +13 -1
  554. package/daemon/dist/domain/permission-drift.js.map +1 -1
  555. package/daemon/dist/domain/permission-policy/policy-ref.d.ts +6 -1
  556. package/daemon/dist/domain/permission-policy/policy-ref.d.ts.map +1 -1
  557. package/daemon/dist/domain/permission-policy/policy-ref.js +16 -4
  558. package/daemon/dist/domain/permission-policy/policy-ref.js.map +1 -1
  559. package/daemon/dist/domain/permission-policy/policy-spec.d.ts +1 -1
  560. package/daemon/dist/domain/permission-policy/policy-spec.d.ts.map +1 -1
  561. package/daemon/dist/domain/permission-policy/policy-spec.js +2 -2
  562. package/daemon/dist/domain/permission-policy/policy-spec.js.map +1 -1
  563. package/daemon/dist/domain/plugin-discovery-service.d.ts +5 -6
  564. package/daemon/dist/domain/plugin-discovery-service.d.ts.map +1 -1
  565. package/daemon/dist/domain/plugin-discovery-service.js +14 -8
  566. package/daemon/dist/domain/plugin-discovery-service.js.map +1 -1
  567. package/daemon/dist/domain/pod-bundle-assembler.d.ts +6 -2
  568. package/daemon/dist/domain/pod-bundle-assembler.d.ts.map +1 -1
  569. package/daemon/dist/domain/pod-bundle-assembler.js +58 -15
  570. package/daemon/dist/domain/pod-bundle-assembler.js.map +1 -1
  571. package/daemon/dist/domain/policies/parked-owner-consumer.d.ts +6 -0
  572. package/daemon/dist/domain/policies/parked-owner-consumer.d.ts.map +1 -1
  573. package/daemon/dist/domain/policies/parked-owner-consumer.js +11 -0
  574. package/daemon/dist/domain/policies/parked-owner-consumer.js.map +1 -1
  575. package/daemon/dist/domain/profile-resolver.d.ts +4 -2
  576. package/daemon/dist/domain/profile-resolver.d.ts.map +1 -1
  577. package/daemon/dist/domain/profile-resolver.js +78 -9
  578. package/daemon/dist/domain/profile-resolver.js.map +1 -1
  579. package/daemon/dist/domain/project-lifecycle-compiler.d.ts.map +1 -1
  580. package/daemon/dist/domain/project-lifecycle-compiler.js +10 -2
  581. package/daemon/dist/domain/project-lifecycle-compiler.js.map +1 -1
  582. package/daemon/dist/domain/projection-planner.d.ts +11 -0
  583. package/daemon/dist/domain/projection-planner.d.ts.map +1 -1
  584. package/daemon/dist/domain/projection-planner.js +14 -5
  585. package/daemon/dist/domain/projection-planner.js.map +1 -1
  586. package/daemon/dist/domain/proof/judgments.d.ts +3 -0
  587. package/daemon/dist/domain/proof/judgments.d.ts.map +1 -1
  588. package/daemon/dist/domain/proof/judgments.js +13 -8
  589. package/daemon/dist/domain/proof/judgments.js.map +1 -1
  590. package/daemon/dist/domain/proof/source-watch.d.ts.map +1 -1
  591. package/daemon/dist/domain/proof/source-watch.js +45 -27
  592. package/daemon/dist/domain/proof/source-watch.js.map +1 -1
  593. package/daemon/dist/domain/provider/host-usage-rollup.js +9 -5
  594. package/daemon/dist/domain/provider/host-usage-rollup.js.map +1 -1
  595. package/daemon/dist/domain/ps-projection.d.ts +22 -3
  596. package/daemon/dist/domain/ps-projection.d.ts.map +1 -1
  597. package/daemon/dist/domain/ps-projection.js +50 -11
  598. package/daemon/dist/domain/ps-projection.js.map +1 -1
  599. package/daemon/dist/domain/queue-recovery.d.ts.map +1 -1
  600. package/daemon/dist/domain/queue-recovery.js +7 -1
  601. package/daemon/dist/domain/queue-recovery.js.map +1 -1
  602. package/daemon/dist/domain/queue-repository.d.ts +98 -6
  603. package/daemon/dist/domain/queue-repository.d.ts.map +1 -1
  604. package/daemon/dist/domain/queue-repository.js +337 -43
  605. package/daemon/dist/domain/queue-repository.js.map +1 -1
  606. package/daemon/dist/domain/queue-stuck-sweep.d.ts +3 -0
  607. package/daemon/dist/domain/queue-stuck-sweep.d.ts.map +1 -1
  608. package/daemon/dist/domain/queue-stuck-sweep.js +111 -26
  609. package/daemon/dist/domain/queue-stuck-sweep.js.map +1 -1
  610. package/daemon/dist/domain/queue-transition-log.d.ts.map +1 -1
  611. package/daemon/dist/domain/queue-transition-log.js +12 -10
  612. package/daemon/dist/domain/queue-transition-log.js.map +1 -1
  613. package/daemon/dist/domain/queue-wake-ladder.d.ts +8 -7
  614. package/daemon/dist/domain/queue-wake-ladder.d.ts.map +1 -1
  615. package/daemon/dist/domain/queue-wake-ladder.js +278 -19
  616. package/daemon/dist/domain/queue-wake-ladder.js.map +1 -1
  617. package/daemon/dist/domain/queue-wake-repository.d.ts +10 -9
  618. package/daemon/dist/domain/queue-wake-repository.d.ts.map +1 -1
  619. package/daemon/dist/domain/queue-wake-repository.js +31 -11
  620. package/daemon/dist/domain/queue-wake-repository.js.map +1 -1
  621. package/daemon/dist/domain/readiness-timeout.d.ts +7 -0
  622. package/daemon/dist/domain/readiness-timeout.d.ts.map +1 -0
  623. package/daemon/dist/domain/readiness-timeout.js +19 -0
  624. package/daemon/dist/domain/readiness-timeout.js.map +1 -0
  625. package/daemon/dist/domain/reply-to-choice.d.ts +26 -0
  626. package/daemon/dist/domain/reply-to-choice.d.ts.map +1 -0
  627. package/daemon/dist/domain/reply-to-choice.js +45 -0
  628. package/daemon/dist/domain/reply-to-choice.js.map +1 -0
  629. package/daemon/dist/domain/request-phase-observer.d.ts +69 -0
  630. package/daemon/dist/domain/request-phase-observer.d.ts.map +1 -0
  631. package/daemon/dist/domain/request-phase-observer.js +206 -0
  632. package/daemon/dist/domain/request-phase-observer.js.map +1 -0
  633. package/daemon/dist/domain/restore-check-service.d.ts +27 -8
  634. package/daemon/dist/domain/restore-check-service.d.ts.map +1 -1
  635. package/daemon/dist/domain/restore-check-service.js +202 -126
  636. package/daemon/dist/domain/restore-check-service.js.map +1 -1
  637. package/daemon/dist/domain/restore-orchestrator.d.ts +5 -2
  638. package/daemon/dist/domain/restore-orchestrator.d.ts.map +1 -1
  639. package/daemon/dist/domain/restore-orchestrator.js +119 -216
  640. package/daemon/dist/domain/restore-orchestrator.js.map +1 -1
  641. package/daemon/dist/domain/restore-plan-preview.d.ts.map +1 -1
  642. package/daemon/dist/domain/restore-plan-preview.js +2 -6
  643. package/daemon/dist/domain/restore-plan-preview.js.map +1 -1
  644. package/daemon/dist/domain/restore-preconditions.d.ts +12 -0
  645. package/daemon/dist/domain/restore-preconditions.d.ts.map +1 -0
  646. package/daemon/dist/domain/restore-preconditions.js +202 -0
  647. package/daemon/dist/domain/restore-preconditions.js.map +1 -0
  648. package/daemon/dist/domain/resume-metadata-refresher.d.ts +20 -4
  649. package/daemon/dist/domain/resume-metadata-refresher.d.ts.map +1 -1
  650. package/daemon/dist/domain/resume-metadata-refresher.js +70 -8
  651. package/daemon/dist/domain/resume-metadata-refresher.js.map +1 -1
  652. package/daemon/dist/domain/resume-token-capture.d.ts +22 -1
  653. package/daemon/dist/domain/resume-token-capture.d.ts.map +1 -1
  654. package/daemon/dist/domain/resume-token-capture.js +32 -4
  655. package/daemon/dist/domain/resume-token-capture.js.map +1 -1
  656. package/daemon/dist/domain/resume-token-validation.d.ts +1 -1
  657. package/daemon/dist/domain/resume-token-validation.d.ts.map +1 -1
  658. package/daemon/dist/domain/resume-token-validation.js +24 -24
  659. package/daemon/dist/domain/resume-token-validation.js.map +1 -1
  660. package/daemon/dist/domain/rig-mode/operating-posture.d.ts +17 -1
  661. package/daemon/dist/domain/rig-mode/operating-posture.d.ts.map +1 -1
  662. package/daemon/dist/domain/rig-mode/operating-posture.js +53 -15
  663. package/daemon/dist/domain/rig-mode/operating-posture.js.map +1 -1
  664. package/daemon/dist/domain/rig-repository.d.ts +15 -5
  665. package/daemon/dist/domain/rig-repository.d.ts.map +1 -1
  666. package/daemon/dist/domain/rig-repository.js +70 -6
  667. package/daemon/dist/domain/rig-repository.js.map +1 -1
  668. package/daemon/dist/domain/rig-teardown.d.ts +3 -0
  669. package/daemon/dist/domain/rig-teardown.d.ts.map +1 -1
  670. package/daemon/dist/domain/rig-teardown.js +105 -19
  671. package/daemon/dist/domain/rig-teardown.js.map +1 -1
  672. package/daemon/dist/domain/rigspec-codec.d.ts.map +1 -1
  673. package/daemon/dist/domain/rigspec-codec.js +8 -0
  674. package/daemon/dist/domain/rigspec-codec.js.map +1 -1
  675. package/daemon/dist/domain/rigspec-exporter.d.ts.map +1 -1
  676. package/daemon/dist/domain/rigspec-exporter.js +5 -0
  677. package/daemon/dist/domain/rigspec-exporter.js.map +1 -1
  678. package/daemon/dist/domain/rigspec-instantiator.d.ts +8 -3
  679. package/daemon/dist/domain/rigspec-instantiator.d.ts.map +1 -1
  680. package/daemon/dist/domain/rigspec-instantiator.js +82 -20
  681. package/daemon/dist/domain/rigspec-instantiator.js.map +1 -1
  682. package/daemon/dist/domain/rigspec-preflight.d.ts +5 -2
  683. package/daemon/dist/domain/rigspec-preflight.d.ts.map +1 -1
  684. package/daemon/dist/domain/rigspec-preflight.js +36 -13
  685. package/daemon/dist/domain/rigspec-preflight.js.map +1 -1
  686. package/daemon/dist/domain/rigspec-schema.d.ts.map +1 -1
  687. package/daemon/dist/domain/rigspec-schema.js +19 -3
  688. package/daemon/dist/domain/rigspec-schema.js.map +1 -1
  689. package/daemon/dist/domain/route-timing-recorder.d.ts.map +1 -1
  690. package/daemon/dist/domain/route-timing-recorder.js +2 -0
  691. package/daemon/dist/domain/route-timing-recorder.js.map +1 -1
  692. package/daemon/dist/domain/runtime-adapter.d.ts +19 -3
  693. package/daemon/dist/domain/runtime-adapter.d.ts.map +1 -1
  694. package/daemon/dist/domain/runtime-adapter.js +1 -0
  695. package/daemon/dist/domain/runtime-adapter.js.map +1 -1
  696. package/daemon/dist/domain/runtime-verifier.d.ts +3 -1
  697. package/daemon/dist/domain/runtime-verifier.d.ts.map +1 -1
  698. package/daemon/dist/domain/runtime-verifier.js +10 -1
  699. package/daemon/dist/domain/runtime-verifier.js.map +1 -1
  700. package/daemon/dist/domain/scope/scaffold-placeholder.d.ts +4 -4
  701. package/daemon/dist/domain/scope/scaffold-placeholder.d.ts.map +1 -1
  702. package/daemon/dist/domain/scope/scaffold-placeholder.js +4 -4
  703. package/daemon/dist/domain/scope/scaffold-placeholder.js.map +1 -1
  704. package/daemon/dist/domain/seat-activity-service.d.ts +9 -4
  705. package/daemon/dist/domain/seat-activity-service.d.ts.map +1 -1
  706. package/daemon/dist/domain/seat-activity-service.js +73 -22
  707. package/daemon/dist/domain/seat-activity-service.js.map +1 -1
  708. package/daemon/dist/domain/seat-attention-reconciler.d.ts +1 -0
  709. package/daemon/dist/domain/seat-attention-reconciler.d.ts.map +1 -1
  710. package/daemon/dist/domain/seat-attention-reconciler.js +38 -9
  711. package/daemon/dist/domain/seat-attention-reconciler.js.map +1 -1
  712. package/daemon/dist/domain/seat-handover-service.d.ts +8 -0
  713. package/daemon/dist/domain/seat-handover-service.d.ts.map +1 -1
  714. package/daemon/dist/domain/seat-handover-service.js +12 -11
  715. package/daemon/dist/domain/seat-handover-service.js.map +1 -1
  716. package/daemon/dist/domain/seat-identity-reconciler.d.ts +1 -1
  717. package/daemon/dist/domain/seat-identity-reconciler.d.ts.map +1 -1
  718. package/daemon/dist/domain/seat-identity-reconciler.js +99 -18
  719. package/daemon/dist/domain/seat-identity-reconciler.js.map +1 -1
  720. package/daemon/dist/domain/seat-launch-environment.d.ts +26 -0
  721. package/daemon/dist/domain/seat-launch-environment.d.ts.map +1 -0
  722. package/daemon/dist/domain/seat-launch-environment.js +182 -0
  723. package/daemon/dist/domain/seat-launch-environment.js.map +1 -0
  724. package/daemon/dist/domain/seat-lifecycle-service.d.ts +11 -0
  725. package/daemon/dist/domain/seat-lifecycle-service.d.ts.map +1 -1
  726. package/daemon/dist/domain/seat-lifecycle-service.js +41 -2
  727. package/daemon/dist/domain/seat-lifecycle-service.js.map +1 -1
  728. package/daemon/dist/domain/seat-status-service.d.ts +2 -1
  729. package/daemon/dist/domain/seat-status-service.d.ts.map +1 -1
  730. package/daemon/dist/domain/seat-status-service.js +10 -6
  731. package/daemon/dist/domain/seat-status-service.js.map +1 -1
  732. package/daemon/dist/domain/seat-structural-activity-service.d.ts +5 -4
  733. package/daemon/dist/domain/seat-structural-activity-service.d.ts.map +1 -1
  734. package/daemon/dist/domain/seat-structural-activity-service.js +23 -9
  735. package/daemon/dist/domain/seat-structural-activity-service.js.map +1 -1
  736. package/daemon/dist/domain/seat-switch-client-service.d.ts.map +1 -1
  737. package/daemon/dist/domain/seat-switch-client-service.js +3 -2
  738. package/daemon/dist/domain/seat-switch-client-service.js.map +1 -1
  739. package/daemon/dist/domain/service-orchestrator.d.ts +1 -0
  740. package/daemon/dist/domain/service-orchestrator.d.ts.map +1 -1
  741. package/daemon/dist/domain/service-orchestrator.js +4 -0
  742. package/daemon/dist/domain/service-orchestrator.js.map +1 -1
  743. package/daemon/dist/domain/services-readiness.d.ts.map +1 -1
  744. package/daemon/dist/domain/services-readiness.js +6 -2
  745. package/daemon/dist/domain/services-readiness.js.map +1 -1
  746. package/daemon/dist/domain/session-fingerprinter.d.ts.map +1 -1
  747. package/daemon/dist/domain/session-fingerprinter.js +16 -1
  748. package/daemon/dist/domain/session-fingerprinter.js.map +1 -1
  749. package/daemon/dist/domain/session-name.d.ts.map +1 -1
  750. package/daemon/dist/domain/session-name.js +6 -0
  751. package/daemon/dist/domain/session-name.js.map +1 -1
  752. package/daemon/dist/domain/session-registry.d.ts +3 -0
  753. package/daemon/dist/domain/session-registry.d.ts.map +1 -1
  754. package/daemon/dist/domain/session-registry.js +7 -0
  755. package/daemon/dist/domain/session-registry.js.map +1 -1
  756. package/daemon/dist/domain/session-transport.d.ts +35 -1
  757. package/daemon/dist/domain/session-transport.d.ts.map +1 -1
  758. package/daemon/dist/domain/session-transport.js +450 -158
  759. package/daemon/dist/domain/session-transport.js.map +1 -1
  760. package/daemon/dist/domain/skill-catalog.d.ts +19 -0
  761. package/daemon/dist/domain/skill-catalog.d.ts.map +1 -1
  762. package/daemon/dist/domain/skill-catalog.js +166 -17
  763. package/daemon/dist/domain/skill-catalog.js.map +1 -1
  764. package/daemon/dist/domain/skill-discovery.d.ts +1 -1
  765. package/daemon/dist/domain/skill-discovery.d.ts.map +1 -1
  766. package/daemon/dist/domain/skill-discovery.js +6 -0
  767. package/daemon/dist/domain/skill-discovery.js.map +1 -1
  768. package/daemon/dist/domain/slow-op-recorder.d.ts +5 -0
  769. package/daemon/dist/domain/slow-op-recorder.d.ts.map +1 -1
  770. package/daemon/dist/domain/slow-op-recorder.js +34 -1
  771. package/daemon/dist/domain/slow-op-recorder.js.map +1 -1
  772. package/daemon/dist/domain/snapshot-repository.d.ts +2 -1
  773. package/daemon/dist/domain/snapshot-repository.d.ts.map +1 -1
  774. package/daemon/dist/domain/snapshot-repository.js +39 -15
  775. package/daemon/dist/domain/snapshot-repository.js.map +1 -1
  776. package/daemon/dist/domain/spec-library-workflow-scanner.d.ts +1 -1
  777. package/daemon/dist/domain/spec-library-workflow-scanner.d.ts.map +1 -1
  778. package/daemon/dist/domain/spec-library-workflow-scanner.js +70 -11
  779. package/daemon/dist/domain/spec-library-workflow-scanner.js.map +1 -1
  780. package/daemon/dist/domain/spec-validation-service.d.ts +6 -0
  781. package/daemon/dist/domain/spec-validation-service.d.ts.map +1 -1
  782. package/daemon/dist/domain/spec-validation-service.js +16 -1
  783. package/daemon/dist/domain/spec-validation-service.js.map +1 -1
  784. package/daemon/dist/domain/startup-orchestrator.d.ts +38 -5
  785. package/daemon/dist/domain/startup-orchestrator.d.ts.map +1 -1
  786. package/daemon/dist/domain/startup-orchestrator.js +275 -64
  787. package/daemon/dist/domain/startup-orchestrator.js.map +1 -1
  788. package/daemon/dist/domain/startup-proof.d.ts +7 -0
  789. package/daemon/dist/domain/startup-proof.d.ts.map +1 -1
  790. package/daemon/dist/domain/startup-proof.js +7 -0
  791. package/daemon/dist/domain/startup-proof.js.map +1 -1
  792. package/daemon/dist/domain/startup-submission-evidence.d.ts +45 -0
  793. package/daemon/dist/domain/startup-submission-evidence.d.ts.map +1 -0
  794. package/daemon/dist/domain/startup-submission-evidence.js +84 -0
  795. package/daemon/dist/domain/startup-submission-evidence.js.map +1 -0
  796. package/daemon/dist/domain/startup-validation.d.ts.map +1 -1
  797. package/daemon/dist/domain/startup-validation.js +4 -0
  798. package/daemon/dist/domain/startup-validation.js.map +1 -1
  799. package/daemon/dist/domain/successor-session-launcher.d.ts +14 -3
  800. package/daemon/dist/domain/successor-session-launcher.d.ts.map +1 -1
  801. package/daemon/dist/domain/successor-session-launcher.js +19 -9
  802. package/daemon/dist/domain/successor-session-launcher.js.map +1 -1
  803. package/daemon/dist/domain/system-world.d.ts +3 -0
  804. package/daemon/dist/domain/system-world.d.ts.map +1 -1
  805. package/daemon/dist/domain/system-world.js +24 -21
  806. package/daemon/dist/domain/system-world.js.map +1 -1
  807. package/daemon/dist/domain/terminal/cmux-provider-adapter.d.ts.map +1 -1
  808. package/daemon/dist/domain/terminal/cmux-provider-adapter.js +2 -3
  809. package/daemon/dist/domain/terminal/cmux-provider-adapter.js.map +1 -1
  810. package/daemon/dist/domain/terminal/herdr-adapter.d.ts +19 -4
  811. package/daemon/dist/domain/terminal/herdr-adapter.d.ts.map +1 -1
  812. package/daemon/dist/domain/terminal/herdr-adapter.js +102 -8
  813. package/daemon/dist/domain/terminal/herdr-adapter.js.map +1 -1
  814. package/daemon/dist/domain/terminal/terminal-provider.d.ts +2 -0
  815. package/daemon/dist/domain/terminal/terminal-provider.d.ts.map +1 -1
  816. package/daemon/dist/domain/terminal/terminal-service.d.ts +10 -0
  817. package/daemon/dist/domain/terminal/terminal-service.d.ts.map +1 -1
  818. package/daemon/dist/domain/terminal/terminal-service.js +75 -6
  819. package/daemon/dist/domain/terminal/terminal-service.js.map +1 -1
  820. package/daemon/dist/domain/terminal/view-composer.d.ts +6 -0
  821. package/daemon/dist/domain/terminal/view-composer.d.ts.map +1 -1
  822. package/daemon/dist/domain/terminal/view-composer.js +6 -3
  823. package/daemon/dist/domain/terminal/view-composer.js.map +1 -1
  824. package/daemon/dist/domain/tmux-discovery-scanner.d.ts.map +1 -1
  825. package/daemon/dist/domain/tmux-discovery-scanner.js +7 -2
  826. package/daemon/dist/domain/tmux-discovery-scanner.js.map +1 -1
  827. package/daemon/dist/domain/tmux-option-defaults.d.ts.map +1 -1
  828. package/daemon/dist/domain/tmux-option-defaults.js +5 -0
  829. package/daemon/dist/domain/tmux-option-defaults.js.map +1 -1
  830. package/daemon/dist/domain/topology/remote-up-leaf.d.ts +1 -0
  831. package/daemon/dist/domain/topology/remote-up-leaf.d.ts.map +1 -1
  832. package/daemon/dist/domain/topology/remote-up-leaf.js.map +1 -1
  833. package/daemon/dist/domain/transcript-capture.d.ts.map +1 -1
  834. package/daemon/dist/domain/transcript-capture.js +1 -1
  835. package/daemon/dist/domain/transcript-capture.js.map +1 -1
  836. package/daemon/dist/domain/transcript-rotation.d.ts +26 -5
  837. package/daemon/dist/domain/transcript-rotation.d.ts.map +1 -1
  838. package/daemon/dist/domain/transcript-rotation.js +176 -25
  839. package/daemon/dist/domain/transcript-rotation.js.map +1 -1
  840. package/daemon/dist/domain/transcript-store.d.ts +1 -1
  841. package/daemon/dist/domain/transcript-store.d.ts.map +1 -1
  842. package/daemon/dist/domain/transcript-store.js +14 -6
  843. package/daemon/dist/domain/transcript-store.js.map +1 -1
  844. package/daemon/dist/domain/types.d.ts +24 -5
  845. package/daemon/dist/domain/types.d.ts.map +1 -1
  846. package/daemon/dist/domain/types.js.map +1 -1
  847. package/daemon/dist/domain/usage-series.d.ts.map +1 -1
  848. package/daemon/dist/domain/usage-series.js +11 -6
  849. package/daemon/dist/domain/usage-series.js.map +1 -1
  850. package/daemon/dist/domain/user-settings/settings-store.d.ts +3 -1
  851. package/daemon/dist/domain/user-settings/settings-store.d.ts.map +1 -1
  852. package/daemon/dist/domain/user-settings/settings-store.js +101 -6
  853. package/daemon/dist/domain/user-settings/settings-store.js.map +1 -1
  854. package/daemon/dist/domain/view-projector.d.ts +11 -6
  855. package/daemon/dist/domain/view-projector.d.ts.map +1 -1
  856. package/daemon/dist/domain/view-projector.js +2 -6
  857. package/daemon/dist/domain/view-projector.js.map +1 -1
  858. package/daemon/dist/domain/workflow-runtime.d.ts +1 -1
  859. package/daemon/dist/domain/workflow-spec-cache.d.ts +29 -7
  860. package/daemon/dist/domain/workflow-spec-cache.d.ts.map +1 -1
  861. package/daemon/dist/domain/workflow-spec-cache.js +103 -14
  862. package/daemon/dist/domain/workflow-spec-cache.js.map +1 -1
  863. package/daemon/dist/domain/workspace/project-catalog.d.ts +20 -0
  864. package/daemon/dist/domain/workspace/project-catalog.d.ts.map +1 -1
  865. package/daemon/dist/domain/workspace/project-catalog.js +92 -0
  866. package/daemon/dist/domain/workspace/project-catalog.js.map +1 -1
  867. package/daemon/dist/domain/workspace/project-registration.d.ts +49 -0
  868. package/daemon/dist/domain/workspace/project-registration.d.ts.map +1 -0
  869. package/daemon/dist/domain/workspace/project-registration.js +251 -0
  870. package/daemon/dist/domain/workspace/project-registration.js.map +1 -0
  871. package/daemon/dist/domain/workspace/workspace-doctor.js +1 -1
  872. package/daemon/dist/domain/workspace/workspace-doctor.js.map +1 -1
  873. package/daemon/dist/domain/workspace/workspace-resolver.js +1 -1
  874. package/daemon/dist/domain/workspace/workspace-resolver.js.map +1 -1
  875. package/daemon/dist/health-detectors-surface.d.ts +1 -1
  876. package/daemon/dist/health-detectors-surface.d.ts.map +1 -1
  877. package/daemon/dist/health-detectors-surface.js.map +1 -1
  878. package/daemon/dist/index.d.ts +4 -4
  879. package/daemon/dist/index.d.ts.map +1 -1
  880. package/daemon/dist/index.js +12 -7
  881. package/daemon/dist/index.js.map +1 -1
  882. package/daemon/dist/middleware/json-body-error.d.ts +17 -0
  883. package/daemon/dist/middleware/json-body-error.d.ts.map +1 -0
  884. package/daemon/dist/middleware/json-body-error.js +42 -0
  885. package/daemon/dist/middleware/json-body-error.js.map +1 -0
  886. package/daemon/dist/project-catalog-surface.d.ts +2 -1
  887. package/daemon/dist/project-catalog-surface.d.ts.map +1 -1
  888. package/daemon/dist/project-catalog-surface.js +1 -1
  889. package/daemon/dist/project-catalog-surface.js.map +1 -1
  890. package/daemon/dist/routes/activity.d.ts.map +1 -1
  891. package/daemon/dist/routes/activity.js +85 -6
  892. package/daemon/dist/routes/activity.js.map +1 -1
  893. package/daemon/dist/routes/attention.d.ts.map +1 -1
  894. package/daemon/dist/routes/attention.js +7 -1
  895. package/daemon/dist/routes/attention.js.map +1 -1
  896. package/daemon/dist/routes/bundles.d.ts.map +1 -1
  897. package/daemon/dist/routes/bundles.js +197 -407
  898. package/daemon/dist/routes/bundles.js.map +1 -1
  899. package/daemon/dist/routes/compaction.d.ts.map +1 -1
  900. package/daemon/dist/routes/compaction.js +44 -4
  901. package/daemon/dist/routes/compaction.js.map +1 -1
  902. package/daemon/dist/routes/context-packs.d.ts.map +1 -1
  903. package/daemon/dist/routes/context-packs.js +10 -2
  904. package/daemon/dist/routes/context-packs.js.map +1 -1
  905. package/daemon/dist/routes/env.d.ts.map +1 -1
  906. package/daemon/dist/routes/env.js +14 -4
  907. package/daemon/dist/routes/env.js.map +1 -1
  908. package/daemon/dist/routes/files.js +2 -2
  909. package/daemon/dist/routes/files.js.map +1 -1
  910. package/daemon/dist/routes/gateway.d.ts.map +1 -1
  911. package/daemon/dist/routes/gateway.js +11 -1
  912. package/daemon/dist/routes/gateway.js.map +1 -1
  913. package/daemon/dist/routes/hosts.d.ts.map +1 -1
  914. package/daemon/dist/routes/hosts.js +51 -12
  915. package/daemon/dist/routes/hosts.js.map +1 -1
  916. package/daemon/dist/routes/mission-control.d.ts.map +1 -1
  917. package/daemon/dist/routes/mission-control.js +6 -2
  918. package/daemon/dist/routes/mission-control.js.map +1 -1
  919. package/daemon/dist/routes/missions.d.ts.map +1 -1
  920. package/daemon/dist/routes/missions.js +17 -5
  921. package/daemon/dist/routes/missions.js.map +1 -1
  922. package/daemon/dist/routes/plugins.d.ts.map +1 -1
  923. package/daemon/dist/routes/plugins.js +5 -1
  924. package/daemon/dist/routes/plugins.js.map +1 -1
  925. package/daemon/dist/routes/projects.d.ts.map +1 -1
  926. package/daemon/dist/routes/projects.js +4 -2
  927. package/daemon/dist/routes/projects.js.map +1 -1
  928. package/daemon/dist/routes/proof.d.ts.map +1 -1
  929. package/daemon/dist/routes/proof.js +9 -2
  930. package/daemon/dist/routes/proof.js.map +1 -1
  931. package/daemon/dist/routes/ps.d.ts.map +1 -1
  932. package/daemon/dist/routes/ps.js +18 -0
  933. package/daemon/dist/routes/ps.js.map +1 -1
  934. package/daemon/dist/routes/queue.d.ts.map +1 -1
  935. package/daemon/dist/routes/queue.js +150 -67
  936. package/daemon/dist/routes/queue.js.map +1 -1
  937. package/daemon/dist/routes/restore-check.d.ts.map +1 -1
  938. package/daemon/dist/routes/restore-check.js +40 -1
  939. package/daemon/dist/routes/restore-check.js.map +1 -1
  940. package/daemon/dist/routes/rigs.d.ts.map +1 -1
  941. package/daemon/dist/routes/rigs.js +4 -3
  942. package/daemon/dist/routes/rigs.js.map +1 -1
  943. package/daemon/dist/routes/rigspec.d.ts.map +1 -1
  944. package/daemon/dist/routes/rigspec.js +11 -12
  945. package/daemon/dist/routes/rigspec.js.map +1 -1
  946. package/daemon/dist/routes/seat.d.ts.map +1 -1
  947. package/daemon/dist/routes/seat.js +22 -4
  948. package/daemon/dist/routes/seat.js.map +1 -1
  949. package/daemon/dist/routes/sessions.d.ts.map +1 -1
  950. package/daemon/dist/routes/sessions.js +3 -2
  951. package/daemon/dist/routes/sessions.js.map +1 -1
  952. package/daemon/dist/routes/telemetry.d.ts +2 -0
  953. package/daemon/dist/routes/telemetry.d.ts.map +1 -1
  954. package/daemon/dist/routes/telemetry.js +22 -1
  955. package/daemon/dist/routes/telemetry.js.map +1 -1
  956. package/daemon/dist/routes/terminal-ws.d.ts +1 -2
  957. package/daemon/dist/routes/terminal-ws.d.ts.map +1 -1
  958. package/daemon/dist/routes/terminal-ws.js +1 -2
  959. package/daemon/dist/routes/terminal-ws.js.map +1 -1
  960. package/daemon/dist/routes/up.js +11 -6
  961. package/daemon/dist/routes/up.js.map +1 -1
  962. package/daemon/dist/routes/views.js +2 -2
  963. package/daemon/dist/routes/views.js.map +1 -1
  964. package/daemon/dist/server.d.ts +3 -0
  965. package/daemon/dist/server.d.ts.map +1 -1
  966. package/daemon/dist/server.js +11 -3
  967. package/daemon/dist/server.js.map +1 -1
  968. package/daemon/dist/spec-validation-surface.d.ts +4 -0
  969. package/daemon/dist/spec-validation-surface.d.ts.map +1 -0
  970. package/daemon/dist/spec-validation-surface.js +4 -0
  971. package/daemon/dist/spec-validation-surface.js.map +1 -0
  972. package/daemon/dist/startup.d.ts +1 -1
  973. package/daemon/dist/startup.d.ts.map +1 -1
  974. package/daemon/dist/startup.js +166 -57
  975. package/daemon/dist/startup.js.map +1 -1
  976. package/daemon/dist/system-world-surface.d.ts +1 -1
  977. package/daemon/dist/system-world-surface.d.ts.map +1 -1
  978. package/daemon/dist/system-world-surface.js +1 -1
  979. package/daemon/dist/system-world-surface.js.map +1 -1
  980. package/daemon/dist/terminal/TerminalSessionBroker.d.ts +1 -0
  981. package/daemon/dist/terminal/TerminalSessionBroker.d.ts.map +1 -1
  982. package/daemon/dist/terminal/TerminalSessionBroker.js +8 -1
  983. package/daemon/dist/terminal/TerminalSessionBroker.js.map +1 -1
  984. package/daemon/docs/reference/agent-spec.md +145 -64
  985. package/daemon/docs/reference/agent-startup-guide.md +187 -35
  986. package/daemon/docs/reference/agent-state-taxonomy.md +44 -13
  987. package/daemon/docs/reference/browser-access.md +8 -4
  988. package/daemon/docs/reference/bundle-formats.md +207 -0
  989. package/daemon/docs/reference/chain-file-convention.md +16 -7
  990. package/daemon/docs/reference/developing.md +24 -9
  991. package/daemon/docs/reference/edge-types.md +18 -10
  992. package/daemon/docs/reference/getting-started.md +426 -111
  993. package/daemon/docs/reference/health-diagnosis.md +23 -8
  994. package/daemon/docs/reference/help.md +40 -10
  995. package/daemon/docs/reference/host-resources.md +61 -0
  996. package/daemon/docs/reference/instance-layout.md +11 -0
  997. package/daemon/docs/reference/inventory-request-diagnostics.md +75 -0
  998. package/daemon/docs/reference/knowledge-maturity.md +3 -1
  999. package/daemon/docs/reference/legacy-topology-migration.md +4 -2
  1000. package/daemon/docs/reference/lore-routing.md +3 -1
  1001. package/daemon/docs/reference/mission-install.md +3 -1
  1002. package/daemon/docs/reference/non-interruptive-mode.md +60 -0
  1003. package/daemon/docs/reference/planning-dial.md +2 -1
  1004. package/daemon/docs/reference/product-journey-sdlc.md +11 -6
  1005. package/daemon/docs/reference/product-management-pass.md +3 -1
  1006. package/daemon/docs/reference/project-workspace.md +80 -3
  1007. package/daemon/docs/reference/publishing-a-rig-bundle.md +144 -0
  1008. package/daemon/docs/reference/refocus-channel.md +14 -5
  1009. package/daemon/docs/reference/release-boundary.md +7 -3
  1010. package/daemon/docs/reference/rig-bundle.md +271 -42
  1011. package/daemon/docs/reference/rig-spec.md +180 -29
  1012. package/daemon/docs/reference/rosters.md +60 -0
  1013. package/daemon/docs/reference/schemas/bundle-behaviour.v1.schema.json +546 -0
  1014. package/daemon/docs/reference/schemas/bundle-common.v1.schema.json +110 -0
  1015. package/daemon/docs/reference/schemas/bundle-configurations.v1.schema.json +67 -0
  1016. package/daemon/docs/reference/schemas/bundle-status.v1.schema.json +323 -0
  1017. package/daemon/docs/reference/schemas/fixtures/identity-vectors.json +80 -0
  1018. package/daemon/docs/reference/schemas/fixtures/invalid/behaviour/not-generated-with-sections.json +60 -0
  1019. package/daemon/docs/reference/schemas/fixtures/invalid/configurations/spaced-member.configurations.yaml +6 -0
  1020. package/daemon/docs/reference/schemas/fixtures/invalid/registry/listed-with-withdrawn-on.yaml +21 -0
  1021. package/daemon/docs/reference/schemas/fixtures/invalid/registry/missing-source.yaml +16 -0
  1022. package/daemon/docs/reference/schemas/fixtures/invalid/registry/parent-folder.yaml +20 -0
  1023. package/daemon/docs/reference/schemas/fixtures/invalid/registry/short-commit.yaml +20 -0
  1024. package/daemon/docs/reference/schemas/fixtures/invalid/registry/withdrawn-without-date.yaml +20 -0
  1025. package/daemon/docs/reference/schemas/fixtures/invalid/run-record/harness-check-with-configuration.json +75 -0
  1026. package/daemon/docs/reference/schemas/fixtures/invalid/run-record/unlabelable-platform.json +97 -0
  1027. package/daemon/docs/reference/schemas/fixtures/invalid/status/hand-edited-notice.json +61 -0
  1028. package/daemon/docs/reference/schemas/fixtures/invalid/status/tested-with-assistance.json +62 -0
  1029. package/daemon/docs/reference/schemas/fixtures/invalid/status/tested-without-records.json +59 -0
  1030. package/daemon/docs/reference/schemas/fixtures/invalid/status/unavailable-harness-with-result.json +61 -0
  1031. package/daemon/docs/reference/schemas/fixtures/invalid/status/unavailable-listing-with-label.json +61 -0
  1032. package/daemon/docs/reference/schemas/fixtures/valid/behaviour/custom-not-generated.json +22 -0
  1033. package/daemon/docs/reference/schemas/fixtures/valid/behaviour/legacy-archive-unknown-identity.json +53 -0
  1034. package/daemon/docs/reference/schemas/fixtures/valid/behaviour/mixed-runtimes-default.json +101 -0
  1035. package/daemon/docs/reference/schemas/fixtures/valid/behaviour/mixed-runtimes-yolo.json +102 -0
  1036. package/daemon/docs/reference/schemas/fixtures/valid/behaviour/openrig-dev.recommended.json +258 -0
  1037. package/daemon/docs/reference/schemas/fixtures/valid/configurations/openrig-dev.configurations.yaml +12 -0
  1038. package/daemon/docs/reference/schemas/fixtures/valid/registry/openrig-dev.yaml +20 -0
  1039. package/daemon/docs/reference/schemas/fixtures/valid/registry/withdrawn.yaml +21 -0
  1040. package/daemon/docs/reference/schemas/fixtures/valid/run-record/pi-harness-check-blocked.json +74 -0
  1041. package/daemon/docs/reference/schemas/fixtures/valid/run-record/team-assisted-pass.json +97 -0
  1042. package/daemon/docs/reference/schemas/fixtures/valid/run-record/team-pass.json +97 -0
  1043. package/daemon/docs/reference/schemas/fixtures/valid/run-record/withdraws-earlier.json +99 -0
  1044. package/daemon/docs/reference/schemas/fixtures/valid/status/status.json +61 -0
  1045. package/daemon/docs/reference/schemas/registry-entry.v1.schema.json +139 -0
  1046. package/daemon/docs/reference/schemas/run-record.v1.schema.json +315 -0
  1047. package/daemon/docs/reference/scoped-operating-posture.md +17 -9
  1048. package/daemon/docs/reference/sdlc-conventions.md +47 -28
  1049. package/daemon/docs/reference/slack-app-setup.md +58 -7
  1050. package/daemon/docs/reference/stream-classifier-worker.md +21 -8
  1051. package/daemon/docs/reference/telemetry.md +114 -0
  1052. package/daemon/docs/reference/worktree-builds.md +12 -6
  1053. package/daemon/policies/builtin/auto.policy.md +24 -0
  1054. package/daemon/specs/agents/development/implementer/agent.yaml +2 -2
  1055. package/daemon/specs/agents/development/qa/agent.yaml +1 -1
  1056. package/daemon/specs/agents/product-management/pm/agent.yaml +10 -0
  1057. package/daemon/specs/agents/shared/agent.yaml +1 -1
  1058. package/daemon/specs/agents/shared/skills/core/agent-starters/SKILL.md +0 -6
  1059. package/daemon/specs/agents/shared/skills/core/agent-startup-and-context-ingestion/SKILL.md +1 -8
  1060. package/daemon/specs/agents/shared/skills/core/messaging-the-human/SKILL.md +24 -0
  1061. package/daemon/specs/agents/shared/skills/core/openrig-architect/SKILL.md +5 -5
  1062. package/daemon/specs/agents/shared/skills/core/openrig-skills/SKILL.md +9 -4
  1063. package/daemon/specs/agents/shared/skills/core/openrig-software-factory/SKILL.md +12 -9
  1064. package/daemon/specs/agents/shared/skills/core/openrig-software-factory/references/worked-example.md +29 -29
  1065. package/daemon/specs/agents/shared/skills/core/rig-bundles-and-shareable-artifacts/SKILL.md +0 -1
  1066. package/daemon/specs/agents/shared/skills/core/session-source-fork/SKILL.md +0 -5
  1067. package/daemon/specs/agents/shared/skills/core/topology-mutation-and-seat-management/SKILL.md +24 -3
  1068. package/daemon/specs/agents/shared/skills/process/agent-browser/OPENRIG.md +1 -1
  1069. package/daemon/specs/agents/shared/skills/process/systematic-debugging/SKILL.md +0 -2
  1070. package/daemon/specs/rigs/focused/{adversarial-review → code-review}/rig.yaml +1 -1
  1071. package/daemon/specs/rigs/focused/pm/CULTURE.md +21 -0
  1072. package/daemon/specs/rigs/focused/{pm-team → pm}/rig.yaml +5 -5
  1073. package/daemon/specs/rigs/focused/{research-team → research}/rig.yaml +1 -1
  1074. package/daemon/specs/rigs/launch/factory/CULTURE.md +96 -0
  1075. package/daemon/specs/rigs/launch/factory/guidance/advisor-role.md +10 -0
  1076. package/daemon/specs/rigs/launch/factory/guidance/lead-first-move.md +23 -0
  1077. package/daemon/specs/rigs/launch/{demo → factory}/rig.yaml +46 -35
  1078. package/daemon/specs/rigs/{preview/product-team → launch/factory}/topology/instance/CRAFT.md +1 -1
  1079. package/daemon/specs/rigs/{preview/product-team → launch/factory}/topology/rig/CRAFT.md +2 -2
  1080. package/daemon/specs/rigs/{preview/product-team → launch/factory}/topology/rig/ORCHESTRATION-CRAFT.md +3 -3
  1081. package/daemon/specs/rigs/{preview/product-team/topology/seats/dev1-qa → launch/factory/topology/seats/dev-qa}/CRAFT.md +1 -1
  1082. package/daemon/specs/rigs/{preview/product-team/topology/seats/orch1-lead → launch/factory/topology/seats/orch-lead}/CRAFT.md +1 -1
  1083. package/daemon/specs/rigs/{preview/product-team/topology/seats/rev1-r1 → launch/factory/topology/seats/review-r1}/CRAFT.md +1 -1
  1084. package/daemon/specs/rigs/{preview/product-team/topology/seats/rev1-r2 → launch/factory/topology/seats/review-r2}/CRAFT.md +1 -1
  1085. package/daemon/specs/rigs/launch/kernel/agents/advisor/lead/agent.yaml +2 -8
  1086. package/daemon/specs/rigs/launch/kernel/agents/advisor/lead/guidance/role.md +37 -0
  1087. package/daemon/specs/rigs/launch/kernel/agents/advisor/lead/startup/context.md +12 -13
  1088. package/daemon/specs/rigs/launch/kernel/agents/operator/agent/agent.yaml +2 -8
  1089. package/daemon/specs/rigs/launch/kernel/agents/operator/agent/guidance/role.md +167 -4
  1090. package/daemon/specs/rigs/launch/kernel/agents/operator/agent/startup/context.md +30 -7
  1091. package/daemon/specs/rigs/launch/kernel/agents/queue/worker/agent.yaml +2 -8
  1092. package/daemon/specs/rigs/launch/kernel/agents/queue/worker/guidance/role.md +37 -0
  1093. package/daemon/specs/rigs/launch/kernel/culture/CULTURE.md +41 -0
  1094. package/daemon/specs/rigs/launch/starter/CULTURE.md +39 -0
  1095. package/daemon/specs/rigs/launch/starter/guidance/lead-first-move.md +23 -0
  1096. package/daemon/specs/rigs/launch/{first-project-mixed → starter}/rig.yaml +11 -8
  1097. package/dist/atomic-text-write.d.ts +3 -0
  1098. package/dist/atomic-text-write.d.ts.map +1 -0
  1099. package/dist/atomic-text-write.js +79 -0
  1100. package/dist/atomic-text-write.js.map +1 -0
  1101. package/dist/build-info.js +3 -3
  1102. package/dist/bundle-behaviour.d.ts +10 -0
  1103. package/dist/bundle-behaviour.d.ts.map +1 -0
  1104. package/dist/bundle-behaviour.js +72 -0
  1105. package/dist/bundle-behaviour.js.map +1 -0
  1106. package/dist/cli-error.d.ts.map +1 -1
  1107. package/dist/cli-error.js +15 -2
  1108. package/dist/cli-error.js.map +1 -1
  1109. package/dist/client.d.ts +14 -1
  1110. package/dist/client.d.ts.map +1 -1
  1111. package/dist/client.js +29 -4
  1112. package/dist/client.js.map +1 -1
  1113. package/dist/commands/agent-image.d.ts.map +1 -1
  1114. package/dist/commands/agent-image.js +2 -0
  1115. package/dist/commands/agent-image.js.map +1 -1
  1116. package/dist/commands/ask.d.ts.map +1 -1
  1117. package/dist/commands/ask.js +10 -1
  1118. package/dist/commands/ask.js.map +1 -1
  1119. package/dist/commands/bootstrap.d.ts.map +1 -1
  1120. package/dist/commands/bootstrap.js +34 -11
  1121. package/dist/commands/bootstrap.js.map +1 -1
  1122. package/dist/commands/broadcast.js +1 -1
  1123. package/dist/commands/broadcast.js.map +1 -1
  1124. package/dist/commands/bundle.d.ts +12 -0
  1125. package/dist/commands/bundle.d.ts.map +1 -1
  1126. package/dist/commands/bundle.js +286 -21
  1127. package/dist/commands/bundle.js.map +1 -1
  1128. package/dist/commands/capture.js +4 -4
  1129. package/dist/commands/capture.js.map +1 -1
  1130. package/dist/commands/chatroom.d.ts.map +1 -1
  1131. package/dist/commands/chatroom.js +22 -1
  1132. package/dist/commands/chatroom.js.map +1 -1
  1133. package/dist/commands/compact-plan.d.ts.map +1 -1
  1134. package/dist/commands/compact-plan.js +36 -7
  1135. package/dist/commands/compact-plan.js.map +1 -1
  1136. package/dist/commands/compact.d.ts.map +1 -1
  1137. package/dist/commands/compact.js +24 -4
  1138. package/dist/commands/compact.js.map +1 -1
  1139. package/dist/commands/config.d.ts.map +1 -1
  1140. package/dist/commands/config.js +5 -4
  1141. package/dist/commands/config.js.map +1 -1
  1142. package/dist/commands/context.d.ts +3 -1
  1143. package/dist/commands/context.d.ts.map +1 -1
  1144. package/dist/commands/context.js +85 -32
  1145. package/dist/commands/context.js.map +1 -1
  1146. package/dist/commands/crash-cart.d.ts.map +1 -1
  1147. package/dist/commands/crash-cart.js +2 -1
  1148. package/dist/commands/crash-cart.js.map +1 -1
  1149. package/dist/commands/daemon.d.ts +13 -1
  1150. package/dist/commands/daemon.d.ts.map +1 -1
  1151. package/dist/commands/daemon.js +36 -18
  1152. package/dist/commands/daemon.js.map +1 -1
  1153. package/dist/commands/destroy.d.ts.map +1 -1
  1154. package/dist/commands/destroy.js +3 -2
  1155. package/dist/commands/destroy.js.map +1 -1
  1156. package/dist/commands/discover.d.ts.map +1 -1
  1157. package/dist/commands/discover.js +2 -4
  1158. package/dist/commands/discover.js.map +1 -1
  1159. package/dist/commands/doctor.d.ts.map +1 -1
  1160. package/dist/commands/doctor.js +10 -4
  1161. package/dist/commands/doctor.js.map +1 -1
  1162. package/dist/commands/down.d.ts.map +1 -1
  1163. package/dist/commands/down.js +7 -1
  1164. package/dist/commands/down.js.map +1 -1
  1165. package/dist/commands/env.d.ts.map +1 -1
  1166. package/dist/commands/env.js +9 -1
  1167. package/dist/commands/env.js.map +1 -1
  1168. package/dist/commands/export.js +2 -2
  1169. package/dist/commands/export.js.map +1 -1
  1170. package/dist/commands/gateway.d.ts.map +1 -1
  1171. package/dist/commands/gateway.js +23 -3
  1172. package/dist/commands/gateway.js.map +1 -1
  1173. package/dist/commands/health.d.ts.map +1 -1
  1174. package/dist/commands/health.js +13 -1
  1175. package/dist/commands/health.js.map +1 -1
  1176. package/dist/commands/host.d.ts +11 -0
  1177. package/dist/commands/host.d.ts.map +1 -1
  1178. package/dist/commands/host.js +38 -4
  1179. package/dist/commands/host.js.map +1 -1
  1180. package/dist/commands/import.d.ts.map +1 -1
  1181. package/dist/commands/import.js +2 -0
  1182. package/dist/commands/import.js.map +1 -1
  1183. package/dist/commands/mcp.d.ts.map +1 -1
  1184. package/dist/commands/mcp.js +25 -12
  1185. package/dist/commands/mcp.js.map +1 -1
  1186. package/dist/commands/plugin.d.ts.map +1 -1
  1187. package/dist/commands/plugin.js +12 -2
  1188. package/dist/commands/plugin.js.map +1 -1
  1189. package/dist/commands/policy.d.ts.map +1 -1
  1190. package/dist/commands/policy.js +3 -2
  1191. package/dist/commands/policy.js.map +1 -1
  1192. package/dist/commands/project-jev.js +1 -1
  1193. package/dist/commands/project-jev.js.map +1 -1
  1194. package/dist/commands/project.d.ts.map +1 -1
  1195. package/dist/commands/project.js +5 -3
  1196. package/dist/commands/project.js.map +1 -1
  1197. package/dist/commands/ps.d.ts +2 -0
  1198. package/dist/commands/ps.d.ts.map +1 -1
  1199. package/dist/commands/ps.js +109 -37
  1200. package/dist/commands/ps.js.map +1 -1
  1201. package/dist/commands/queue.d.ts +2 -0
  1202. package/dist/commands/queue.d.ts.map +1 -1
  1203. package/dist/commands/queue.js +133 -19
  1204. package/dist/commands/queue.js.map +1 -1
  1205. package/dist/commands/requirements.d.ts.map +1 -1
  1206. package/dist/commands/requirements.js +6 -3
  1207. package/dist/commands/requirements.js.map +1 -1
  1208. package/dist/commands/restore.d.ts.map +1 -1
  1209. package/dist/commands/restore.js +5 -0
  1210. package/dist/commands/restore.js.map +1 -1
  1211. package/dist/commands/rig-mode.d.ts.map +1 -1
  1212. package/dist/commands/rig-mode.js +6 -1
  1213. package/dist/commands/rig-mode.js.map +1 -1
  1214. package/dist/commands/rig.d.ts.map +1 -1
  1215. package/dist/commands/rig.js +20 -20
  1216. package/dist/commands/rig.js.map +1 -1
  1217. package/dist/commands/roster.d.ts +63 -0
  1218. package/dist/commands/roster.d.ts.map +1 -0
  1219. package/dist/commands/roster.js +169 -0
  1220. package/dist/commands/roster.js.map +1 -0
  1221. package/dist/commands/scope.d.ts.map +1 -1
  1222. package/dist/commands/scope.js +22 -0
  1223. package/dist/commands/scope.js.map +1 -1
  1224. package/dist/commands/seat.d.ts.map +1 -1
  1225. package/dist/commands/seat.js +96 -17
  1226. package/dist/commands/seat.js.map +1 -1
  1227. package/dist/commands/send.d.ts.map +1 -1
  1228. package/dist/commands/send.js +20 -6
  1229. package/dist/commands/send.js.map +1 -1
  1230. package/dist/commands/setup.d.ts +1 -1
  1231. package/dist/commands/setup.d.ts.map +1 -1
  1232. package/dist/commands/setup.js +78 -30
  1233. package/dist/commands/setup.js.map +1 -1
  1234. package/dist/commands/slack.d.ts +1 -1
  1235. package/dist/commands/slack.d.ts.map +1 -1
  1236. package/dist/commands/slack.js +57 -5
  1237. package/dist/commands/slack.js.map +1 -1
  1238. package/dist/commands/specs.d.ts.map +1 -1
  1239. package/dist/commands/specs.js +21 -2
  1240. package/dist/commands/specs.js.map +1 -1
  1241. package/dist/commands/start.js +7 -6
  1242. package/dist/commands/start.js.map +1 -1
  1243. package/dist/commands/startup-proof.d.ts.map +1 -1
  1244. package/dist/commands/startup-proof.js +2 -1
  1245. package/dist/commands/startup-proof.js.map +1 -1
  1246. package/dist/commands/status.d.ts.map +1 -1
  1247. package/dist/commands/status.js +7 -0
  1248. package/dist/commands/status.js.map +1 -1
  1249. package/dist/commands/telemetry.d.ts +5 -0
  1250. package/dist/commands/telemetry.d.ts.map +1 -0
  1251. package/dist/commands/telemetry.js +58 -0
  1252. package/dist/commands/telemetry.js.map +1 -0
  1253. package/dist/commands/terminal.d.ts.map +1 -1
  1254. package/dist/commands/terminal.js +5 -1
  1255. package/dist/commands/terminal.js.map +1 -1
  1256. package/dist/commands/transcript.js +5 -3
  1257. package/dist/commands/transcript.js.map +1 -1
  1258. package/dist/commands/tui.js +4 -4
  1259. package/dist/commands/tui.js.map +1 -1
  1260. package/dist/commands/up.d.ts +8 -0
  1261. package/dist/commands/up.d.ts.map +1 -1
  1262. package/dist/commands/up.js +193 -72
  1263. package/dist/commands/up.js.map +1 -1
  1264. package/dist/commands/walk.d.ts.map +1 -1
  1265. package/dist/commands/walk.js +3 -0
  1266. package/dist/commands/walk.js.map +1 -1
  1267. package/dist/commands/whoami.d.ts +3 -0
  1268. package/dist/commands/whoami.d.ts.map +1 -1
  1269. package/dist/commands/whoami.js +29 -2
  1270. package/dist/commands/whoami.js.map +1 -1
  1271. package/dist/commands/workflow-follow.d.ts +2 -0
  1272. package/dist/commands/workflow-follow.d.ts.map +1 -1
  1273. package/dist/commands/workflow-follow.js +6 -4
  1274. package/dist/commands/workflow-follow.js.map +1 -1
  1275. package/dist/commands/workflow.d.ts.map +1 -1
  1276. package/dist/commands/workflow.js +2 -4
  1277. package/dist/commands/workflow.js.map +1 -1
  1278. package/dist/commands/workspace.d.ts.map +1 -1
  1279. package/dist/commands/workspace.js +2 -4
  1280. package/dist/commands/workspace.js.map +1 -1
  1281. package/dist/config-store.d.ts +7 -1
  1282. package/dist/config-store.d.ts.map +1 -1
  1283. package/dist/config-store.js +40 -7
  1284. package/dist/config-store.js.map +1 -1
  1285. package/dist/daemon-auto-start.d.ts +8 -0
  1286. package/dist/daemon-auto-start.d.ts.map +1 -0
  1287. package/dist/daemon-auto-start.js +39 -0
  1288. package/dist/daemon-auto-start.js.map +1 -0
  1289. package/dist/daemon-lifecycle.d.ts +9 -0
  1290. package/dist/daemon-lifecycle.d.ts.map +1 -1
  1291. package/dist/daemon-lifecycle.js +61 -19
  1292. package/dist/daemon-lifecycle.js.map +1 -1
  1293. package/dist/daemon-reachability.d.ts +18 -0
  1294. package/dist/daemon-reachability.d.ts.map +1 -0
  1295. package/dist/daemon-reachability.js +48 -0
  1296. package/dist/daemon-reachability.js.map +1 -0
  1297. package/dist/front-door.d.ts.map +1 -1
  1298. package/dist/front-door.js +3 -2
  1299. package/dist/front-door.js.map +1 -1
  1300. package/dist/index.d.ts +1 -0
  1301. package/dist/index.d.ts.map +1 -1
  1302. package/dist/index.js +4 -0
  1303. package/dist/index.js.map +1 -1
  1304. package/dist/lib/bundle-check.d.ts +13 -0
  1305. package/dist/lib/bundle-check.d.ts.map +1 -0
  1306. package/dist/lib/bundle-check.js +191 -0
  1307. package/dist/lib/bundle-check.js.map +1 -0
  1308. package/dist/lib/bundle-configuration.d.ts +60 -0
  1309. package/dist/lib/bundle-configuration.d.ts.map +1 -0
  1310. package/dist/lib/bundle-configuration.js +198 -0
  1311. package/dist/lib/bundle-configuration.js.map +1 -0
  1312. package/dist/lib/bundle-source.d.ts +57 -0
  1313. package/dist/lib/bundle-source.d.ts.map +1 -0
  1314. package/dist/lib/bundle-source.js +355 -0
  1315. package/dist/lib/bundle-source.js.map +1 -0
  1316. package/dist/lib/context-install.d.ts.map +1 -1
  1317. package/dist/lib/context-install.js +2 -3
  1318. package/dist/lib/context-install.js.map +1 -1
  1319. package/dist/lib/file-transfer.d.ts +1 -1
  1320. package/dist/lib/file-transfer.d.ts.map +1 -1
  1321. package/dist/lib/file-transfer.js +17 -5
  1322. package/dist/lib/file-transfer.js.map +1 -1
  1323. package/dist/lib/permission-policy/policy-ref.d.ts +6 -1
  1324. package/dist/lib/permission-policy/policy-ref.d.ts.map +1 -1
  1325. package/dist/lib/permission-policy/policy-ref.js +16 -4
  1326. package/dist/lib/permission-policy/policy-ref.js.map +1 -1
  1327. package/dist/lib/permission-policy/policy-spec.d.ts +1 -1
  1328. package/dist/lib/permission-policy/policy-spec.d.ts.map +1 -1
  1329. package/dist/lib/permission-policy/policy-spec.js +2 -2
  1330. package/dist/lib/permission-policy/policy-spec.js.map +1 -1
  1331. package/dist/lib/scope/mission-composition.d.ts.map +1 -1
  1332. package/dist/lib/scope/mission-composition.js +11 -0
  1333. package/dist/lib/scope/mission-composition.js.map +1 -1
  1334. package/dist/lib/scope/scaffold-placeholder.d.ts +4 -4
  1335. package/dist/lib/scope/scaffold-placeholder.d.ts.map +1 -1
  1336. package/dist/lib/scope/scaffold-placeholder.js +4 -4
  1337. package/dist/lib/scope/scaffold-placeholder.js.map +1 -1
  1338. package/dist/lib/scope/scope-fs.d.ts.map +1 -1
  1339. package/dist/lib/scope/scope-fs.js +10 -16
  1340. package/dist/lib/scope/scope-fs.js.map +1 -1
  1341. package/dist/lib/scope/templates.d.ts.map +1 -1
  1342. package/dist/lib/scope/templates.js +1 -0
  1343. package/dist/lib/scope/templates.js.map +1 -1
  1344. package/dist/lib/scope-templates/notes.md +1 -1
  1345. package/dist/lib/scope-templates/slice-progress.md +11 -7
  1346. package/dist/lib/work-install.d.ts +12 -0
  1347. package/dist/lib/work-install.d.ts.map +1 -1
  1348. package/dist/lib/work-install.js +55 -4
  1349. package/dist/lib/work-install.js.map +1 -1
  1350. package/dist/restore-packet/claude-transcript-parser.d.ts.map +1 -1
  1351. package/dist/restore-packet/claude-transcript-parser.js +2 -0
  1352. package/dist/restore-packet/claude-transcript-parser.js.map +1 -1
  1353. package/dist/restore-packet/codex-jsonl-parser.d.ts.map +1 -1
  1354. package/dist/restore-packet/codex-jsonl-parser.js +2 -0
  1355. package/dist/restore-packet/codex-jsonl-parser.js.map +1 -1
  1356. package/dist/restore-packet/runtime-detect.d.ts.map +1 -1
  1357. package/dist/restore-packet/runtime-detect.js +2 -0
  1358. package/dist/restore-packet/runtime-detect.js.map +1 -1
  1359. package/package.json +4 -3
  1360. package/tui/dist/attention/source-continuity.d.ts.map +1 -1
  1361. package/tui/dist/attention/source-continuity.js +5 -3
  1362. package/tui/dist/attention/source-continuity.js.map +1 -1
  1363. package/tui/dist/commands/registry.d.ts.map +1 -1
  1364. package/tui/dist/commands/registry.js +8 -3
  1365. package/tui/dist/commands/registry.js.map +1 -1
  1366. package/tui/dist/daemon-client.d.ts +3 -1
  1367. package/tui/dist/daemon-client.d.ts.map +1 -1
  1368. package/tui/dist/daemon-client.js +18 -6
  1369. package/tui/dist/daemon-client.js.map +1 -1
  1370. package/tui/dist/execution/execution-model.d.ts.map +1 -1
  1371. package/tui/dist/execution/execution-model.js +19 -7
  1372. package/tui/dist/execution/execution-model.js.map +1 -1
  1373. package/tui/dist/grammar.d.ts.map +1 -1
  1374. package/tui/dist/grammar.js +3 -2
  1375. package/tui/dist/grammar.js.map +1 -1
  1376. package/tui/dist/health/health-model.d.ts.map +1 -1
  1377. package/tui/dist/health/health-model.js +17 -5
  1378. package/tui/dist/health/health-model.js.map +1 -1
  1379. package/tui/dist/hydrate.d.ts.map +1 -1
  1380. package/tui/dist/hydrate.js +1 -0
  1381. package/tui/dist/hydrate.js.map +1 -1
  1382. package/tui/dist/input.d.ts.map +1 -1
  1383. package/tui/dist/input.js +5 -0
  1384. package/tui/dist/input.js.map +1 -1
  1385. package/tui/dist/live-events.d.ts +2 -2
  1386. package/tui/dist/live-events.d.ts.map +1 -1
  1387. package/tui/dist/live-events.js +65 -27
  1388. package/tui/dist/live-events.js.map +1 -1
  1389. package/tui/dist/local-reading.d.ts.map +1 -1
  1390. package/tui/dist/local-reading.js +2 -0
  1391. package/tui/dist/local-reading.js.map +1 -1
  1392. package/tui/dist/main.js +46 -6
  1393. package/tui/dist/main.js.map +1 -1
  1394. package/tui/dist/page-read.d.ts.map +1 -1
  1395. package/tui/dist/page-read.js +4 -1
  1396. package/tui/dist/page-read.js.map +1 -1
  1397. package/tui/dist/render.d.ts +2 -0
  1398. package/tui/dist/render.d.ts.map +1 -1
  1399. package/tui/dist/render.js +81 -23
  1400. package/tui/dist/render.js.map +1 -1
  1401. package/tui/dist/scopes/scopes-model.d.ts.map +1 -1
  1402. package/tui/dist/scopes/scopes-model.js +36 -31
  1403. package/tui/dist/scopes/scopes-model.js.map +1 -1
  1404. package/tui/dist/socket-server.d.ts +6 -2
  1405. package/tui/dist/socket-server.d.ts.map +1 -1
  1406. package/tui/dist/socket-server.js +159 -14
  1407. package/tui/dist/socket-server.js.map +1 -1
  1408. package/tui/dist/specs/graph.d.ts +5 -0
  1409. package/tui/dist/specs/graph.d.ts.map +1 -0
  1410. package/tui/dist/specs/graph.js +16 -0
  1411. package/tui/dist/specs/graph.js.map +1 -0
  1412. package/tui/dist/specs/launch.d.ts +29 -0
  1413. package/tui/dist/specs/launch.d.ts.map +1 -0
  1414. package/tui/dist/specs/launch.js +64 -0
  1415. package/tui/dist/specs/launch.js.map +1 -0
  1416. package/tui/dist/startup.d.ts.map +1 -1
  1417. package/tui/dist/startup.js +15 -6
  1418. package/tui/dist/startup.js.map +1 -1
  1419. package/tui/dist/state.d.ts +2 -2
  1420. package/tui/dist/state.d.ts.map +1 -1
  1421. package/tui/dist/state.js +41 -18
  1422. package/tui/dist/state.js.map +1 -1
  1423. package/tui/dist/terminals/terminal-model.d.ts +1 -0
  1424. package/tui/dist/terminals/terminal-model.d.ts.map +1 -1
  1425. package/tui/dist/terminals/terminal-model.js +19 -2
  1426. package/tui/dist/terminals/terminal-model.js.map +1 -1
  1427. package/tui/dist/types.d.ts +35 -0
  1428. package/tui/dist/types.d.ts.map +1 -1
  1429. package/ui/dist/assets/{index-N-SdPj-I.css → index-DNU3XZr_.css} +1 -1
  1430. package/ui/dist/assets/{index-BVW54ItO.js → index-HHSvwF97.js} +75 -75
  1431. package/ui/dist/index.html +2 -2
  1432. package/daemon/specs/rigs/launch/conveyor/README.md +0 -33
  1433. package/daemon/specs/rigs/launch/conveyor/rig.yaml +0 -72
  1434. package/daemon/specs/rigs/launch/demo/project-example/README.md +0 -25
  1435. package/daemon/specs/rigs/launch/demo/project-example/missions/improve-onboarding/SPEC.md +0 -19
  1436. package/daemon/specs/rigs/launch/demo/project-example/missions/improve-onboarding/slices/01-shorten-first-run/PROGRESS.md +0 -6
  1437. package/daemon/specs/rigs/launch/demo/project-example/missions/improve-onboarding/slices/01-shorten-first-run/PROOF.md +0 -7
  1438. package/daemon/specs/rigs/launch/demo/project-example/missions/improve-onboarding/slices/01-shorten-first-run/SPEC.md +0 -31
  1439. package/daemon/specs/rigs/launch/first-project/rig.yaml +0 -31
  1440. package/daemon/specs/rigs/launch/first-project-claude/rig.yaml +0 -30
  1441. package/daemon/specs/rigs/launch/implementation-pair/rig.yaml +0 -27
  1442. package/daemon/specs/rigs/preview/product-team/rig.yaml +0 -90
  1443. /package/daemon/specs/rigs/launch/factory-rsi/{rig.yaml → world-bundle.yaml} +0 -0
@@ -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,15 +28,26 @@ 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/,
34
48
  ];
35
- // Status-bar patterns that ONLY appear when the harness is at its idle
36
- // prompt. These are more reliable than the prompt char alone because they
37
- // are never rendered during active tool execution.
49
+ // Footer hints, not proof of inactivity: Claude also renders its mode bar
50
+ // during a turn. Current live-status evidence must take precedence below.
38
51
  const IDLE_STATUS_BAR_PATTERNS = [
39
52
  /gpt-\d[\d.]* .+ · Context \[/, // Codex model/context footer
40
53
  /⏵⏵ accept edits/, // Claude Code edit-accept bar
@@ -62,6 +75,7 @@ const PERMISSION_PROMPT_PATTERNS = [
62
75
  // after hitting this. Erring toward "prompt detected" is the SAFE direction for this guard: a false
63
76
  // refusal is overridable; a false-idle lets a message land on a prompt. (EXA: ntm e28763e; AgentDeck.)
64
77
  const PROMPT_SCAN_LINES = 12;
78
+ const CLAUDE_QUESTION_FOOTER = "Enter to select · ↑/↓ to navigate · Esc to cancel";
65
79
  function trimPaneLines(paneContent) {
66
80
  return paneContent
67
81
  .split("\n")
@@ -80,6 +94,88 @@ function findPatternEvidence(lines, patterns) {
80
94
  }
81
95
  return null;
82
96
  }
97
+ function findCurrentClaudeQuestion(paneContent) {
98
+ // Claude 2.1.289 can wrap a current choice beyond the general prompt window.
99
+ // Anchor at its terminal footer, then follow only the adjoining choice block.
100
+ // Preserve columns so indented draft/quoted text does not gain new authority.
101
+ const lines = paneContent.split("\n").map(line => line.trimEnd()).filter(line => line.length > 0);
102
+ if (lines.at(-1) !== CLAUDE_QUESTION_FOOTER)
103
+ return null;
104
+ for (let i = lines.length - 2; i >= 0; i--) {
105
+ const line = lines[i];
106
+ if (/^❯ \d+\.\s+\S/.test(line))
107
+ return truncateEvidence(line);
108
+ if (!/^(?: {2}\d+\.\s+\S| {5}\S|─{3,}$)/.test(line))
109
+ break;
110
+ }
111
+ return null;
112
+ }
113
+ // Claude can leave these noninteractive warnings BELOW the input box and mode bar.
114
+ // Recognize the complete input block, never a warning or historical prompt alone.
115
+ const CLAUDE_STATUS_WARNINGS = [
116
+ /^✘ Auto-update failed: no write permission to npm prefix · Run claude doctor$/,
117
+ /^tmux focus-events off · add 'set -g focus-events on' to ~\/\.tmux\.conf and re…$/,
118
+ /^You've used (?:\d|[1-9]\d)% of your weekly limit · resets \d{1,2}(?::\d{2})?(?:am|pm) \(UTC\)$/,
119
+ ];
120
+ // Claude's permission-mode footers: default, accept edits, bypass, auto and plan, optionally after a
121
+ // vim-mode marker such as "-- INSERT --" (#808). A suffix such as "· 1 shell" can follow the mode.
122
+ const CLAUDE_MODE_FOOTER = /^(?:-- [A-Z]+ -- )?(?:⏵⏵ (?:accept edits|bypass permissions|auto mode) on\b|⏸ plan mode on\b|\? for shortcuts\b)/;
123
+ // Current Claude status rows need not end in "thinking)" or show "esc to interrupt".
124
+ // Completed summaries such as "✻ Crunched for 2s" lack the live ellipsis/timer shape.
125
+ // While a hook runs, the timer follows its label: "(running PostToolUse hook · 3m 12s · …)".
126
+ const CLAUDE_LIVE_STATUS_PATTERN = /^[✶✢✳✻✽·*]\s+\S[^(]*(?:…|\.{3})\s+\((?:running [^()·]+ hook · )?(?:\d+h\s+)?(?:\d+m\s+)?\d+s\b/;
127
+ function findClaudeComposer(paneContent) {
128
+ // Preserve columns: a multiline draft may contain indented border/prompt text.
129
+ // This classifier scans at most 20 physical lines; captures can be taller.
130
+ // Exhausting the scan without reaching the status head is unknown, not idle.
131
+ const lines = paneContent.split("\n").slice(-20)
132
+ .map((line) => line.trimEnd()).filter((line) => line.trim().length > 0);
133
+ let bar = lines.length - 1;
134
+ while (bar >= 0 && CLAUDE_STATUS_WARNINGS.some((pattern) => pattern.test(lines[bar].trim())))
135
+ bar--;
136
+ const supportedWarningFooter = lines[bar]?.trim() === "⏵⏵ accept edits on (shift+tab to cycle) · ← for agents";
137
+ const modeFooter = CLAUDE_MODE_FOOTER.test(lines[bar]?.trim() ?? "");
138
+ let indent = /^([ \t]*)─{3,}$/.exec(lines[bar - 1] ?? "")?.[1];
139
+ const framed = indent !== undefined;
140
+ let prompt = lines[bar - 2] ?? "";
141
+ let statusStart = bar - 4;
142
+ if (indent === undefined) {
143
+ // The unframed Claude prompt has the same current status/task block.
144
+ // Keep Codex footers and a bare prompt with no visible block on their old path.
145
+ if (bar < 2 || !/^(?:⏵⏵ (?:accept edits|bypass permissions) on\b|⏸ plan mode on\b|\? for shortcuts$)/.test(lines[bar].trim()))
146
+ return null;
147
+ prompt = lines[bar - 1] ?? "";
148
+ indent = /^([ \t]*)❯\s*$/.exec(prompt)?.[1];
149
+ if (indent === undefined)
150
+ return null;
151
+ statusStart = bar - 2;
152
+ }
153
+ else {
154
+ const upper = lines[bar - 3] ?? "";
155
+ if (!upper.startsWith(indent) || !/^─{3,}(?: .+ ─+)?$/.test(upper.slice(indent.length)) ||
156
+ !prompt.startsWith(`${indent}❯`) || !/^❯(?:\s|$)/.test(prompt.slice(indent.length)))
157
+ return null;
158
+ }
159
+ let liveStatus = null;
160
+ let headSeen = false;
161
+ for (let i = statusStart; i >= 0; i--) {
162
+ if (!lines[i].startsWith(indent))
163
+ break;
164
+ const line = lines[i].slice(indent.length);
165
+ if ([CLAUDE_LIVE_STATUS_PATTERN, ...MID_WORK_PATTERNS].some((pattern) => pattern.test(line))) {
166
+ liveStatus = truncateEvidence(line);
167
+ headSeen = true;
168
+ break;
169
+ }
170
+ // Indented task rows can follow the live status. A newer unindented output
171
+ // or completed status ends this block; do not revive an older work row.
172
+ if (!/^\s/.test(line)) {
173
+ headSeen = true;
174
+ break;
175
+ }
176
+ }
177
+ return { text: prompt.slice(indent.length), bar: lines[bar].trim(), framed, hasWarnings: bar < lines.length - 1, supportedWarningFooter, modeFooter, headSeen, liveStatus };
178
+ }
83
179
  function findPromptDraftBeforeFooter(paneContent) {
84
180
  const rawLines = paneContent.split("\n").map((line) => line.trimEnd());
85
181
  let lastLineIndex = rawLines.length - 1;
@@ -108,7 +204,6 @@ export function classifyPaneActivity(paneContent) {
108
204
  return { state: "unknown", reason: "empty_capture", evidence: null };
109
205
  }
110
206
  const recentLines = lastNonBlank.slice(-8);
111
- const recentWindow = recentLines.join("\n");
112
207
  // Wider window for prompt SIGNATURES so a tall footer can't push a real prompt out of view (see
113
208
  // PROMPT_SCAN_LINES). The generic activity checks below keep the tighter 8-line window.
114
209
  const promptScanLines = lastNonBlank.slice(-PROMPT_SCAN_LINES);
@@ -118,7 +213,17 @@ export function classifyPaneActivity(paneContent) {
118
213
  const idleStatusBarLine = IDLE_STATUS_BAR_PATTERNS.some((pattern) => pattern.test(lastLine))
119
214
  ? lastLine
120
215
  : null;
121
- const selectionPromptEvidence = findPatternEvidence(promptScanLines, [/^[❯›]\s*\d+\.\s/m]);
216
+ const claudeComposer = findClaudeComposer(paneContent);
217
+ const oldQuestionEnd = promptScanLines.lastIndexOf(CLAUDE_QUESTION_FOOTER);
218
+ // A complete later empty composer with a recognized Claude bar makes the preceding question history.
219
+ // Keep draft handling and selectors without this dialog boundary unchanged.
220
+ const selectionLines = claudeComposer?.framed &&
221
+ /^(?:⏵⏵ (?:accept edits|bypass permissions|auto mode) on\b|⏸ plan mode on\b|\? for shortcuts$)/.test(claudeComposer.bar) &&
222
+ IDLE_PROMPT_PATTERNS.some(pattern => pattern.test(claudeComposer.text)) &&
223
+ oldQuestionEnd >= 0 && oldQuestionEnd < promptScanLines.length - 1
224
+ ? promptScanLines.slice(oldQuestionEnd + 1) : promptScanLines;
225
+ const selectionPromptEvidence = findCurrentClaudeQuestion(paneContent) ??
226
+ findPatternEvidence(selectionLines, [/^[❯›]\s*\d+\.\s/m]);
122
227
  if (selectionPromptEvidence) {
123
228
  return {
124
229
  state: "attention",
@@ -137,6 +242,23 @@ export function classifyPaneActivity(paneContent) {
137
242
  evidence: permissionPromptEvidence,
138
243
  };
139
244
  }
245
+ if (claudeComposer?.hasWarnings && claudeComposer.supportedWarningFooter && PROMPT_DRAFT_PATTERNS.some((pattern) => pattern.test(claudeComposer.text))) {
246
+ return { state: "attention", reason: "prompt_draft", evidence: truncateEvidence(claudeComposer.text) };
247
+ }
248
+ if (claudeComposer?.liveStatus) {
249
+ return { state: "agent_active", reason: "mid_work_pattern", evidence: claudeComposer.liveStatus };
250
+ }
251
+ // Unframed status evidence can veto idle, but warnings require a complete input frame to prove it.
252
+ if (claudeComposer && (!claudeComposer.headSeen || (claudeComposer.hasWarnings && !claudeComposer.framed))) {
253
+ return { state: "unknown", reason: "no_activity_signal", evidence: truncateEvidence(lastLine) };
254
+ }
255
+ // Below warning rows, any Claude mode footer completes the frame for an EMPTY composer (#808).
256
+ // Drafts keep the narrower check above: attention is needs_input, a send refusal for other modes.
257
+ if (claudeComposer && (!claudeComposer.hasWarnings || claudeComposer.modeFooter) &&
258
+ IDLE_PROMPT_PATTERNS.some((pattern) => pattern.test(claudeComposer.text))) {
259
+ return { state: "agent_idle", reason: idleStatusBarLine ? "idle_status_bar" : "idle_prompt",
260
+ evidence: truncateEvidence(idleStatusBarLine ?? claudeComposer.text) };
261
+ }
140
262
  const promptDraftEvidence = findPromptDraftBeforeFooter(paneContent);
141
263
  if (promptDraftEvidence) {
142
264
  return {
@@ -145,21 +267,36 @@ export function classifyPaneActivity(paneContent) {
145
267
  evidence: promptDraftEvidence,
146
268
  };
147
269
  }
148
- if (idleStatusBarLine) {
270
+ const midWorkEvidence = findPatternEvidence(recentLines, [...MID_WORK_PATTERNS, CLAUDE_LIVE_STATUS_PATTERN]);
271
+ if (idleStatusBarLine && (!idleStatusBarLine.includes("⏵⏵ accept edits") || !midWorkEvidence)) {
149
272
  return {
150
273
  state: "agent_idle",
151
274
  reason: "idle_status_bar",
152
275
  evidence: truncateEvidence(idleStatusBarLine),
153
276
  };
154
277
  }
155
- if (idlePromptLine && !MID_WORK_PATTERNS.some((pattern) => pattern.test(recentWindow))) {
278
+ // Codex keeps its empty-composer placeholder on screen during a turn, and its turn-status row
279
+ // (`• Working (… esc to interrupt)`) can sit well above the composer when queued or incoming
280
+ // message blocks come in between. So under the placeholder, that row anywhere in the capture is
281
+ // the turn still running. Only the status-row signature counts at that range: completed prose
282
+ // ("Working tree is clean.") further up is history, and the 8-line generic check below still applies.
283
+ const placeholderMidWork = idlePromptLine && CODEX_EMPTY_COMPOSER_PATTERN.test(idlePromptLine)
284
+ ? findPatternEvidence(lastNonBlank, [CODEX_TURN_STATUS_PATTERN])
285
+ : null;
286
+ if (placeholderMidWork) {
287
+ return {
288
+ state: "agent_active",
289
+ reason: "mid_work_pattern",
290
+ evidence: placeholderMidWork,
291
+ };
292
+ }
293
+ if (idlePromptLine && !midWorkEvidence) {
156
294
  return {
157
295
  state: "agent_idle",
158
296
  reason: "idle_prompt",
159
297
  evidence: truncateEvidence(idlePromptLine),
160
298
  };
161
299
  }
162
- const midWorkEvidence = findPatternEvidence(recentLines, MID_WORK_PATTERNS);
163
300
  if (midWorkEvidence) {
164
301
  return {
165
302
  state: "agent_active",
@@ -377,6 +514,122 @@ export function scopeForTarget(target, recipients) {
377
514
  return { kind: "rig-broadcast", rig: target.rig ? `${target.rig}/${target.pod}` : target.pod, seats: recipients.length };
378
515
  return { kind: "topology" }; // { global: true }
379
516
  }
517
+ /** The existing submit-only identity check, also used to inspect startup's own paste.
518
+ * A false result is no matching staged evidence, not proof of model consumption. */
519
+ export function hasExpectedStagedText(pane, expected) {
520
+ const norm = (s) => s.replace(/\s+/g, "");
521
+ // Round-2 (r2 HIGH-1): the evidence must be the CURRENT ACTIVE INPUT and must identify
522
+ // THIS piece — stale scrollback can carry an old placeholder while a LATER interactive
523
+ // prompt owns the input, and an Enter there approves the prompt. So:
524
+ // 1. Only the pane's LAST input-marker line counts (the current input; everything above
525
+ // is history).
526
+ // 2. A numbered-option line (`❯ 1. …`) is a PROMPT SELECTION, never staged input: refuse.
527
+ // 3. A pasted-text placeholder is identity-qualified: "[Pasted text #N +X lines]" counts
528
+ // only when X matches the expected piece's own line count (±1 for a trailing newline).
529
+ // More than one placeholder is COALESCED staging (several pieces, one Enter): refuse.
530
+ // 4. Otherwise the line must carry the content's own head (24 normalized chars — a short
531
+ // paste renders inline, possibly truncated).
532
+ const paneLines = (pane ?? "").split("\n");
533
+ let currentInputAt = -1;
534
+ for (let i = paneLines.length - 1; i >= 0; i--) {
535
+ if (paneLines[i].trimStart().startsWith("❯")) {
536
+ currentInputAt = i;
537
+ break;
538
+ }
539
+ }
540
+ let stagedEvidence = false;
541
+ if (currentInputAt >= 0) {
542
+ const inputLine = paneLines[currentInputAt].trimStart();
543
+ // The region is the last ❯-line through the input box's closing separator (a box-drawing
544
+ // line) or pane end — wrapped input continues below the marker; everything ABOVE the
545
+ // marker is history and everything below the separator is hint-bar chrome.
546
+ let regionEnd = paneLines.length;
547
+ for (let i = currentInputAt + 1; i < paneLines.length; i++) {
548
+ const t = paneLines[i].trim();
549
+ if (t.length >= 10 && /^[─═-]+$/.test(t)) {
550
+ regionEnd = i;
551
+ break;
552
+ }
553
+ }
554
+ const region = paneLines.slice(currentInputAt, regionEnd).join("\n");
555
+ if (!/^❯\s*\d+\./.test(inputLine)) {
556
+ // Round-3 (r2 R2 HIGH-1, specimen-pinned): Claude renders ONE staged piece as MANY
557
+ // placeholders whose displayed counts are SEGMENT sizes (sum ≤ source lines), followed
558
+ // by the piece's own literal tail wrapped across pane lines — and the placeholder
559
+ // tokens themselves wrap. So: collapse wrapping, then
560
+ // IDENTITY — the literal residual (region minus tokens minus hint chrome) must be a
561
+ // CONTIGUOUS substring of the piece: the visible words are the piece's
562
+ // words. Foreign residual (another piece, stale content) refuses.
563
+ // SANITY — the segment-count sum must not exceed the piece's own line count
564
+ // (small slack), and with NO residual anchor must reach at least 60% of
565
+ // it — a bare unrelated placeholder cannot masquerade as this piece.
566
+ const placeholderRe = /\[Pasted text #\d+ \+(\d+) lines\]/g;
567
+ const regionFlat = region.replace(/\s+/g, " ");
568
+ const counts = [...regionFlat.matchAll(placeholderRe)].map((m) => Number(m[1]));
569
+ if (counts.length === 0) {
570
+ const head = norm(expected).slice(0, 24);
571
+ stagedEvidence = head.length > 0 && norm(region).includes(head);
572
+ }
573
+ else {
574
+ // Round-4 (r2 R3 HIGH-1): identity is the rendering's own structure, specimen-proven —
575
+ // the placeholders are the piece's HEAD chunks and the literal residual is the piece's
576
+ // normalized SUFFIX (524 chars in the preserved capture). Size similarity and short
577
+ // shared phrases are NOT identity: with no residual, or one under 48 normalized chars,
578
+ // or one that is not the piece's own suffix, FAIL CLOSED — the TUI did not expose
579
+ // enough content to identify the staged state, and a bare Enter is never guessed.
580
+ const chrome = /paste again to expand|ctrl\+g to edit( in Vim)?/gi;
581
+ const residual = norm(regionFlat.replace(placeholderRe, "").replace(chrome, "")).replace(/^❯/, "");
582
+ const pieceNorm = norm(expected);
583
+ const sum = counts.reduce((a, b) => a + b, 0);
584
+ // Round-5 (r2 R4 HIGH-1): the suffix anchor is JOINED to the opaque prefix. The
585
+ // placeholder sum identifies the hidden SOURCE BOUNDARY immediately before the
586
+ // visible suffix (specimen: sum 130 = the residual begins after exactly 130 of the
587
+ // piece's 142 source newlines). Compute the boundary from the piece bytes — the
588
+ // number of leading source lines whose normalized text the residual does NOT cover —
589
+ // and require the sum to EQUAL it exactly (round-6, r2 R5: both separately staged
590
+ // preserved pieces are exact — 130=130 and 82=82; a tolerance was unsupported by the
591
+ // renderer evidence). A matched suffix with a non-matching sum is a truncated or
592
+ // wrong prefix: refuse.
593
+ let boundary = -1;
594
+ if (residual.length >= 48 && pieceNorm.endsWith(residual)) {
595
+ const srcLines = expected.split("\n");
596
+ let acc = 0;
597
+ boundary = 0;
598
+ for (let i = srcLines.length - 1; i >= 0; i--) {
599
+ acc += norm(srcLines[i]).length;
600
+ if (acc >= residual.length) {
601
+ boundary = i;
602
+ break;
603
+ }
604
+ }
605
+ }
606
+ stagedEvidence = boundary >= 0 && sum === boundary;
607
+ }
608
+ }
609
+ }
610
+ return stagedEvidence;
611
+ }
612
+ /** An interaction may consume its answer immediately. Only add Enter when the
613
+ * complete answer is still visible in a bounded current text input, never a
614
+ * numbered choice or a partial prefix. Unknown rendering is not consumption. */
615
+ function promptAnswerStaged(pane, answer, runtime) {
616
+ if (!pane || !answer.trim() || /[\r\n\x1b]/.test(answer))
617
+ return false;
618
+ const lines = pane.split("\n");
619
+ for (let i = lines.length - 1; i >= 0; i--) {
620
+ const input = lines[i].trimStart();
621
+ if (!/^[❯›]/.test(input))
622
+ continue;
623
+ if (/^[❯›]\s*\d+[.)]/.test(input))
624
+ return false;
625
+ if (runtime === "codex" ? !input.startsWith("›") : runtime !== "claude-code" || !input.startsWith("❯"))
626
+ return false;
627
+ const end = lines.findIndex((line, index) => index > i && (runtime === "codex"
628
+ ? line.trim() === "" : /^[─═-]{10,}$/.test(line.trim())));
629
+ return end > i && lines.slice(i, end).join("\n").trimStart().slice(1).trim() === answer.trim();
630
+ }
631
+ return false;
632
+ }
380
633
  export class SessionTransport {
381
634
  db;
382
635
  rigRepo;
@@ -890,98 +1143,29 @@ export class SessionTransport {
890
1143
  if (expected.trim().length === 0) {
891
1144
  return { ok: false, sessionName, reason: "invalid_submit_only", error: "submitOnly requires expectedStagedText — the Enter is only pressed onto the exact staged content." };
892
1145
  }
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;
1146
+ const recordMismatch = (pane) => {
1147
+ if (!opts.requireFullStagedText || !opts.onStartupMismatch)
1148
+ return;
1149
+ try {
1150
+ const evidence = startupSubmissionEvidence(pane, expected, opts.submitOnlyCaptureLines ?? 50);
1151
+ if (evidence)
1152
+ opts.onStartupMismatch(evidence);
912
1153
  }
1154
+ catch { /* Observation has no delivery authority. */ }
1155
+ };
1156
+ let pane;
1157
+ try {
1158
+ pane = await this.runStage("session_transport.submit_only_precheck", () => this.tmuxAdapter.capturePaneContent(sessionName, opts.submitOnlyCaptureLines ?? 50));
913
1159
  }
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
- }
1160
+ catch (error) {
1161
+ recordMismatch(null);
1162
+ throw error; // Preserve the existing guarded/unguarded error handling.
983
1163
  }
984
- if (!stagedEvidence) {
1164
+ const staged = opts.requireFullStagedText
1165
+ ? inspectStartupStagedText(pane, expected) === "staged"
1166
+ : hasExpectedStagedText(pane, expected);
1167
+ if (!staged) {
1168
+ recordMismatch(pane);
985
1169
  return {
986
1170
  ok: false,
987
1171
  sessionName,
@@ -992,7 +1176,7 @@ export class SessionTransport {
992
1176
  const targetFailure = await checkClaudeTarget();
993
1177
  if (targetFailure)
994
1178
  return targetFailure;
995
- const submitResult = await this.runStage("session_transport.submit", () => this.tmuxAdapter.sendKeys(sessionName, ["C-m"]), (result) => result.ok ? "ok" : "failed");
1179
+ const submitResult = await this.runStage("session_transport.submit", () => this.tmuxAdapter.sendKeys(sessionName, ["Enter"]), (result) => result.ok ? "ok" : "failed");
996
1180
  if (!submitResult.ok) {
997
1181
  return { ok: false, sessionName, reason: "submit_failed", outcome: "failed", error: `submitOnly: Enter did not land on '${sessionName}': ${submitResult.message}` };
998
1182
  }
@@ -1034,6 +1218,7 @@ export class SessionTransport {
1034
1218
  // the positive-picker guard (FR-4 — the footgun separation). The advisory is carried on the
1035
1219
  // success result via `warning` so the honest telemetry is surfaced.
1036
1220
  let sendAdvisory;
1221
+ let promptOverride = false;
1037
1222
  if (waitForIdleMs === undefined) {
1038
1223
  const readiness = await this.classifySendReadiness({
1039
1224
  sessionName,
@@ -1073,7 +1258,8 @@ export class SessionTransport {
1073
1258
  error: `Refused: --dangerously-interact requires an auditable override record, which could not be persisted (${audit.reason}). No text was sent.`,
1074
1259
  };
1075
1260
  }
1076
- // audited → proceed to the send.
1261
+ // Audited answers use unbracketed input; a choice may submit itself.
1262
+ promptOverride = true;
1077
1263
  }
1078
1264
  else {
1079
1265
  return {
@@ -1131,10 +1317,15 @@ export class SessionTransport {
1131
1317
  const targetFailure = await checkClaudeTarget();
1132
1318
  if (targetFailure)
1133
1319
  return observe(targetFailure);
1134
- // 3. Send text (paste)
1320
+ // 3. Deliver ordinary messages as paste, audited prompt answers as key input.
1135
1321
  if (observed)
1136
1322
  observed.sentHash = hashSentText(text);
1137
- const textResult = await this.runStage("session_transport.send_text", () => this.tmuxAdapter.sendText(sessionName, text), (result) => result.ok ? "ok" : "failed");
1323
+ const textResult = await this.runStage("session_transport.send_text", () => {
1324
+ opts?.beforeWrite?.();
1325
+ if (promptOverride)
1326
+ return this.tmuxAdapter.sendText(sessionName, text, opts?.beforeWrite, { bracketed: false });
1327
+ return opts?.beforeWrite ? this.tmuxAdapter.sendText(sessionName, text, opts.beforeWrite) : this.tmuxAdapter.sendText(sessionName, text);
1328
+ }, (result) => result.ok ? "ok" : "failed");
1138
1329
  if (!textResult.ok) {
1139
1330
  return observe({
1140
1331
  ok: false,
@@ -1149,8 +1340,18 @@ export class SessionTransport {
1149
1340
  await this.sleep(200);
1150
1341
  if (runtime === "claude-code" && bindingChanged())
1151
1342
  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");
1343
+ if (promptOverride) {
1344
+ const pane = await this.runStage("session_transport.prompt_override_pre_submit_capture", () => this.tmuxAdapter.capturePaneContent(sessionName, 50)).catch(() => null);
1345
+ if (runtime === "claude-code" && bindingChanged())
1346
+ return observe(changedRecipient(true));
1347
+ if (!promptAnswerStaged(pane, text, runtime)) {
1348
+ return observe({ ok: true, sessionName, sent: true, verified: false, outcome: "rendered-unconfirmed", promptInteraction: "unverified",
1349
+ warning: "prompt-override: answer sent as unbracketed input; submission unverified. No trailing Enter: the complete answer is not visibly staged (it may have been consumed, the prompt changed, or observation is unavailable)." });
1350
+ }
1351
+ sendAdvisory = "prompt-override: answer sent as unbracketed input; Enter submitted the complete still-staged answer.";
1352
+ }
1353
+ // 5. Submit (Enter)
1354
+ 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
1355
  if (!submitResult.ok) {
1155
1356
  return observe({
1156
1357
  ok: false,
@@ -1161,6 +1362,7 @@ export class SessionTransport {
1161
1362
  ...(waitMode ? { sent: true, ...waitEvidence } : {}),
1162
1363
  });
1163
1364
  }
1365
+ const interaction = promptOverride ? { promptInteraction: "enter-sent" } : {};
1164
1366
  // 6. Verify if requested. At this point text + Enter BOTH succeeded, so the
1165
1367
  // message LANDED; the capture only re-confirms the render. Not re-confirming
1166
1368
  // (a TUI redraw race, or the capture throwing) is therefore the honest
@@ -1176,29 +1378,83 @@ export class SessionTransport {
1176
1378
  const preCount = countOccurrences(preVerifyContent ?? "", snippet);
1177
1379
  const postCount = countOccurrences(content ?? "", snippet);
1178
1380
  const verified = postCount > preCount;
1179
- return observe({ ok: true, sessionName, verified, outcome: verified ? "delivered" : "rendered-unconfirmed", ...(sendAdvisory ? { warning: sendAdvisory } : {}), ...(waitMode ? { sent: true, ...waitEvidence } : {}) });
1381
+ return observe({ ok: true, sessionName, ...interaction, verified, outcome: verified ? "delivered" : "rendered-unconfirmed", ...(sendAdvisory ? { warning: sendAdvisory } : {}), ...(waitMode ? { sent: true, ...waitEvidence } : {}) });
1180
1382
  }
1181
1383
  catch {
1182
1384
  if (observed && observed.post.state === "not_reached") {
1183
1385
  observed.post = { state: "unavailable", cause: "capture_error", capturedAt: this.now().toISOString(), captureSeq };
1184
1386
  }
1185
- return observe({ ok: true, sessionName, verified: false, outcome: "rendered-unconfirmed", ...(sendAdvisory ? { warning: sendAdvisory } : {}), ...(waitMode ? { sent: true, ...waitEvidence } : {}) });
1387
+ return observe({ ok: true, sessionName, ...interaction, verified: false, outcome: "rendered-unconfirmed", ...(sendAdvisory ? { warning: sendAdvisory } : {}), ...(waitMode ? { sent: true, ...waitEvidence } : {}) });
1186
1388
  }
1187
1389
  }
1188
- return observe({ ok: true, sessionName, ...(sendAdvisory ? { warning: sendAdvisory } : {}), ...(waitMode ? { sent: true, ...waitEvidence } : {}) });
1390
+ return observe({ ok: true, sessionName, ...interaction, ...(sendAdvisory ? { warning: sendAdvisory } : {}), ...(waitMode ? { sent: true, ...waitEvidence } : {}) });
1189
1391
  }
1190
1392
  runStage(site, fn, classify) {
1191
1393
  return this.slowOpRecorder?.runStage
1192
1394
  ? this.slowOpRecorder.runStage(site, fn, classify)
1193
1395
  : fn();
1194
1396
  }
1397
+ /** Wait on the existing classifier without occupying the input/lifecycle lease. */
1398
+ async waitUntilIdle(sessionName, timeoutMs, signal) {
1399
+ const meta = this.getSessionMeta(sessionName);
1400
+ return this.waitForIdle({ sessionName, runtime: meta.runtime, attachmentType: meta.attachmentType, timeoutMs, signal,
1401
+ binding: { sessionName, nodeId: meta.nodeId, occupant: meta.occupant, pane: meta.pane } });
1402
+ }
1195
1403
  async waitForIdle(input) {
1196
- const startedAt = Date.now();
1404
+ // ONE deadline. UNKNOWN is retried like busy and never authorizes the send. No observation
1405
+ // starts after the deadline (one starting exactly at it races a 0 ms timer), each one is raced
1406
+ // against the time left, and one that completes after the deadline is discarded, so a late idle
1407
+ // can never lead to input. At expiry the result names the last observation that completed in
1408
+ // time; waitedMs is the wait itself.
1409
+ const deadline = Date.now() + input.timeoutMs;
1197
1410
  let attempts = 0;
1411
+ let last = null;
1412
+ const expire = () => {
1413
+ const count = `${attempts} observation${attempts === 1 ? "" : "s"}`;
1414
+ const activity = last ?? {
1415
+ state: "unknown", reason: "no_observation_in_time", evidenceSource: "pane_heuristic",
1416
+ sampledAt: this.now().toISOString(), evidence: null,
1417
+ };
1418
+ return activity.state === "unknown"
1419
+ ? {
1420
+ ok: false,
1421
+ reason: "target_activity_unknown",
1422
+ error: last
1423
+ ? `Target activity could not be determined (${activity.reason}) when the ${input.timeoutMs}ms wait ended (${count}). No text was sent.`
1424
+ : `Target activity could not be determined: no observation completed within the ${input.timeoutMs}ms wait. No text was sent.`,
1425
+ activity, waitedMs: input.timeoutMs, attempts,
1426
+ }
1427
+ : {
1428
+ ok: false,
1429
+ reason: "wait_for_idle_timeout",
1430
+ error: `Target was still busy (${activity.reason}) when the ${input.timeoutMs}ms wait ended (${count}). No text was sent.`,
1431
+ activity, waitedMs: input.timeoutMs, attempts,
1432
+ };
1433
+ };
1434
+ const cancelled = () => ({
1435
+ ok: false,
1436
+ reason: "preparation_cancelled",
1437
+ error: "Managed preparation ended; no compact authorized.",
1438
+ activity: last ?? {
1439
+ state: "unknown", reason: "preparation_cancelled", evidenceSource: "pane_heuristic",
1440
+ sampledAt: this.now().toISOString(), evidence: null,
1441
+ },
1442
+ waitedMs: Math.max(0, Math.min(input.timeoutMs, input.timeoutMs - (deadline - Date.now()))),
1443
+ attempts,
1444
+ });
1198
1445
  while (true) {
1446
+ if (input.signal?.aborted)
1447
+ return cancelled();
1448
+ if (attempts > 0 && Date.now() > deadline)
1449
+ return expire();
1199
1450
  attempts++;
1200
- const activity = await this.classifySendReadiness(input);
1201
- const waitedMs = Date.now() - startedAt;
1451
+ const activity = await this.observeReadinessWithin(input, deadline - Date.now());
1452
+ if (input.signal?.aborted)
1453
+ return cancelled();
1454
+ if (activity === null || Date.now() > deadline)
1455
+ return expire();
1456
+ last = activity;
1457
+ const waitedMs = input.timeoutMs - (deadline - Date.now());
1202
1458
  if (activity.state === "idle") {
1203
1459
  return { ok: true, activity, waitedMs, attempts };
1204
1460
  }
@@ -1212,28 +1468,27 @@ export class SessionTransport {
1212
1468
  attempts,
1213
1469
  };
1214
1470
  }
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)));
1471
+ const remainingMs = deadline - Date.now();
1472
+ if (remainingMs <= 0)
1473
+ return expire();
1474
+ await this.sleep(Math.min(this.waitForIdlePollMs, remainingMs));
1475
+ }
1476
+ }
1477
+ /** One readiness observation, raced against the time left before the wait's deadline. Null
1478
+ * when the deadline wins; the abandoned observation is ignored, never delivered on. */
1479
+ async observeReadinessWithin(input, remainingMs) {
1480
+ const observation = this.classifySendReadiness(input);
1481
+ observation.catch(() => undefined);
1482
+ let timer;
1483
+ try {
1484
+ return await Promise.race([
1485
+ observation,
1486
+ new Promise((resolve) => { timer = setTimeout(() => resolve(null), Math.max(0, remainingMs)); }),
1487
+ ]);
1488
+ }
1489
+ finally {
1490
+ if (timer !== undefined)
1491
+ clearTimeout(timer);
1237
1492
  }
1238
1493
  }
1239
1494
  async claudeDeliveryObservation(sessionName, pane, resumeToken) {
@@ -1332,7 +1587,7 @@ export class SessionTransport {
1332
1587
  return hookActivity;
1333
1588
  }
1334
1589
  }
1335
- return probeSessionActivity({
1590
+ const probe = await probeSessionActivity({
1336
1591
  sessionName: input.sessionName,
1337
1592
  runtime: input.runtime,
1338
1593
  attachmentType: input.attachmentType,
@@ -1341,6 +1596,20 @@ export class SessionTransport {
1341
1596
  captureObserver: this.captureObserver,
1342
1597
  binding: input.binding,
1343
1598
  });
1599
+ // A Codex empty-composer placeholder is also on screen while Codex streams with its status
1600
+ // row hidden, so a placeholder-only idle verdict must not override a display-fresh (<5min)
1601
+ // running/needs_input hook such as UserPromptSubmit: keep it until it ages out. An `unknown`
1602
+ // hook (e.g. SessionStart) carries no evidence of work and does not block.
1603
+ if (probe.state === "idle" &&
1604
+ probe.reason === "idle_prompt" &&
1605
+ CODEX_EMPTY_COMPOSER_PATTERN.test(probe.evidence ?? "") &&
1606
+ hookActivity &&
1607
+ hookActivity.evidenceSource === "runtime_hook" &&
1608
+ hookActivity.stale !== true &&
1609
+ (hookActivity.state === "running" || hookActivity.state === "needs_input")) {
1610
+ return hookActivity;
1611
+ }
1612
+ return probe;
1344
1613
  }
1345
1614
  // OPR.0.4.1.10 — a runtime-hook is authoritative for send-readiness only within the tight send
1346
1615
  // window. No usable hook timestamp → not send-fresh (fall through to real-time capture).
@@ -1356,12 +1625,15 @@ export class SessionTransport {
1356
1625
  // `no_activity_signal`. NEVER surfaces a token value — env checks are
1357
1626
  // presence-only, and the store carries no token.
1358
1627
  async diagnoseProducerLink(sessionName) {
1359
- // Link 1 — the SEAT ENV: can the relay even reach the daemon?
1628
+ // Link 1 — the relay's prerequisites: the daemon URL, the activity token, and the runtime
1629
+ // (without OPENRIG_RUNTIME the relay builds no payload and posts nothing). Only the tmux SESSION
1630
+ // environment is inspected; the agent process's own environment is not read, and an env-prefixed
1631
+ // launch carries these without the session environment showing them. So a name absent from the
1632
+ // session environment is reported as UNPROVEN absent from the agent: UNKNOWN, never DOWN.
1360
1633
  let hasUrl = null;
1361
1634
  let hasToken = null;
1362
- let inspectedEnv = false;
1635
+ let hasRuntime = null;
1363
1636
  if (typeof this.tmuxAdapter?.hasSessionEnv === "function") {
1364
- inspectedEnv = true;
1365
1637
  const anyPresent = async (names) => {
1366
1638
  let unknown = false;
1367
1639
  for (const name of names) {
@@ -1380,53 +1652,73 @@ export class SessionTransport {
1380
1652
  };
1381
1653
  hasUrl = await anyPresent(["OPENRIG_URL", "RIGGED_URL", "OPENRIG_PORT", "RIGGED_PORT"]);
1382
1654
  hasToken = await anyPresent(["OPENRIG_ACTIVITY_HOOK_TOKEN", "RIGGED_ACTIVITY_HOOK_TOKEN"]);
1655
+ hasRuntime = await anyPresent(["OPENRIG_RUNTIME", "RIGGED_RUNTIME"]);
1383
1656
  }
1384
1657
  let fileEndpoint = null;
1385
1658
  try {
1386
1659
  fileEndpoint = this.activityEndpointFile();
1387
1660
  }
1388
1661
  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?
1662
+ // The endpoint file covers the URL and token, never the runtime. Presence-only: no value is read out.
1663
+ const prerequisites = [
1664
+ { label: "relay URL", present: fileEndpoint ? true : hasUrl },
1665
+ { label: "activity token", present: fileEndpoint ? true : hasToken },
1666
+ { label: "OPENRIG_RUNTIME", present: hasRuntime },
1667
+ ];
1668
+ const absent = prerequisites.filter((p) => p.present === false).map((p) => p.label);
1669
+ const unread = typeof this.tmuxAdapter?.hasSessionEnv === "function"
1670
+ ? prerequisites.filter((p) => p.present === null).map((p) => p.label) : [];
1671
+ const envNote = absent.length > 0 || unread.length > 0
1672
+ ? `seat-env UNKNOWN — ${[
1673
+ absent.length > 0 ? `${absent.join(", ")} absent from the tmux session environment` : null,
1674
+ unread.length > 0 ? `session-environment lookup failed for ${unread.join(", ")}` : null,
1675
+ ].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`
1676
+ : null;
1677
+ const withEnv = (verdict) => envNote ? `${verdict}. ${envNote}` : verdict;
1678
+ // Link 2 — the DAEMON INGEST + store: did any hook land, and how old is it?
1397
1679
  const store = this.agentActivityStore;
1398
1680
  if (!store) {
1399
- return `daemon-ingest link DOWN — the activity store is not configured on this daemon (ingest returns 503)`;
1681
+ return withEnv(`daemon-ingest link DOWN — the activity store is not configured on this daemon (ingest returns 503)`);
1400
1682
  }
1401
1683
  const latest = store.getLatestForNode({ sessionName, now: this.now() });
1402
1684
  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`;
1685
+ 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
1686
  }
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.
1687
+ const ageMs = latest.eventAt ? this.now().getTime() - Date.parse(latest.eventAt) : NaN;
1688
+ const ageText = Number.isFinite(ageMs) ? `${Math.round(ageMs / 1000)}s ago` : "at an unknown time";
1689
+ const recent = Number.isFinite(ageMs) && ageMs <= store.freshnessMs;
1690
+ // W2a-1 — a GENERATION verdict is stale:true even for a RECENT hook; collapsing a recent one to
1691
+ // "seat quiet" mislabels per-path missing carry / dead-tenure as a DARK seat. Age is checked FIRST
1692
+ // so an old hook is never called recent; its generation verdict is still reported, separately.
1410
1693
  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";
1694
+ if (!recent) {
1695
+ const verdict = {
1696
+ generation_unverifiable: "it carried NO occupant generation",
1697
+ generation_unresolvable: "the LIVE occupant generation could not be resolved",
1698
+ generation_mismatch: "it belongs to a PRIOR occupant generation (a dead tenure)",
1699
+ generation_resolver_error: "the occupant-generation resolver errored",
1700
+ };
1701
+ 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`);
1702
+ }
1703
+ // A recent hook not verified as the LIVE occupant's says nothing about this occupant's own
1704
+ // producer prerequisites, so none of these is "producer link OK" and each keeps the env note.
1705
+ const age = ageText;
1413
1706
  switch (latest.reason) {
1414
1707
  case "generation_unverifiable":
1415
1708
  // Carried generation was null on THIS hook. Managed launch and fresh-handover producers carry
1416
1709
  // it; legacy/excluded launch paths or an occupant with no tenure at fire time may not. Sound,
1417
1710
  // 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`;
1711
+ 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
1712
  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`;
1713
+ 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
1714
  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`;
1715
+ 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
1716
  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`;
1717
+ 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
1718
  }
1426
1719
  }
1427
1720
  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`;
1721
+ 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
1722
  }
1431
1723
  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
1724
  }