@openrig/cli 0.6.4 → 0.6.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (986) hide show
  1. package/README.md +384 -0
  2. package/daemon/assets/onboarding/02-self-and-competent-action.md +5 -0
  3. package/daemon/assets/plugins/openrig-core/.claude-plugin/plugin.json +1 -1
  4. package/daemon/assets/plugins/openrig-core/.codex-plugin/plugin.json +1 -1
  5. package/daemon/assets/plugins/openrig-core/hooks/scripts/refocus.cjs +100 -20
  6. package/daemon/assets/plugins/openrig-core/skills/claude-compaction-restore/SKILL.md +201 -132
  7. package/daemon/assets/plugins/openrig-core/skills/claude-compaction-restore/reference/SKILL-v1.md +143 -0
  8. package/daemon/assets/plugins/openrig-core/skills/forming-an-openrig-mental-model/SKILL.md +11 -11
  9. package/daemon/assets/plugins/openrig-core/skills/loading-addressable-markdown/scripts/resolve-markdown.mjs +2 -1
  10. package/daemon/assets/plugins/openrig-core/skills/messaging-the-human/SKILL.md +24 -0
  11. package/daemon/assets/plugins/openrig-core/skills/mission-slice-sop/SKILL.md +2 -2
  12. package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/SKILL.md +17 -0
  13. package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/scripts/compose.py +2 -2
  14. package/daemon/assets/plugins/openrig-core/skills/openrig-skills/SKILL.md +6 -0
  15. package/daemon/assets/plugins/openrig-core/skills/openrig-user/SKILL.md +45 -19
  16. package/daemon/assets/plugins/openrig-core/skills/orienting-to-an-inherited-seat/SKILL.md +5 -7
  17. package/daemon/assets/plugins/openrig-core/skills/queue-handoff/SKILL.md +1 -19
  18. package/daemon/assets/plugins/openrig-core/skills/refocusing/SKILL.md +3 -0
  19. package/daemon/assets/plugins/openrig-core/skills/refocusing/scripts/trace-to-root.py +56 -4
  20. package/daemon/assets/plugins/openrig-core/skills/seat-continuity-and-handover/SKILL.md +0 -5
  21. package/daemon/assets/plugins/openrig-core/skills/session-compaction-and-restore/SKILL.md +5 -6
  22. package/daemon/context-packs/help/help.md +9 -4
  23. package/daemon/context-packs/help/manifest.yaml +1 -1
  24. package/daemon/context-packs/onboarding-width/manifest.yaml +1 -1
  25. package/daemon/context-packs/onboarding-width/public-what-you-can-do.md +25 -12
  26. package/daemon/context-packs/reference/getting-started.md +7 -2
  27. package/daemon/context-packs/reference/instance-layout.md +11 -0
  28. package/daemon/context-packs/reference/manifest.yaml +1 -1
  29. package/daemon/context-packs/reference/rig-spec.md +32 -5
  30. package/daemon/context-packs/skills/agent-operated-software/manifest.yaml +1 -1
  31. package/daemon/context-packs/skills/agent-operated-workflows/manifest.yaml +1 -1
  32. package/daemon/context-packs/skills/applying-a-permission-policy/manifest.yaml +1 -1
  33. package/daemon/context-packs/skills/claude-compaction-restore/SKILL.md +201 -132
  34. package/daemon/context-packs/skills/claude-compaction-restore/manifest.yaml +5 -3
  35. package/daemon/context-packs/skills/claude-compaction-restore/reference/SKILL-v1.md +143 -0
  36. package/daemon/context-packs/skills/core/agent-starters/manifest.yaml +1 -1
  37. package/daemon/context-packs/skills/core/agent-startup-and-context-ingestion/manifest.yaml +1 -1
  38. package/daemon/context-packs/skills/core/cross-host-rig-commands/manifest.yaml +1 -1
  39. package/daemon/context-packs/skills/core/human-in-the-loop/manifest.yaml +1 -1
  40. package/daemon/context-packs/skills/core/messaging-the-human/SKILL.md +24 -0
  41. package/daemon/context-packs/skills/core/messaging-the-human/manifest.yaml +1 -1
  42. package/daemon/context-packs/skills/core/openrig-architect/manifest.yaml +1 -1
  43. package/daemon/context-packs/skills/core/openrig-cmux/manifest.yaml +1 -1
  44. package/daemon/context-packs/skills/core/openrig-herdr/manifest.yaml +1 -1
  45. package/daemon/context-packs/skills/core/openrig-skills/SKILL.md +6 -0
  46. package/daemon/context-packs/skills/core/openrig-skills/manifest.yaml +1 -1
  47. package/daemon/context-packs/skills/core/openrig-software-factory/manifest.yaml +1 -1
  48. package/daemon/context-packs/skills/core/openrig-upgrade/manifest.yaml +1 -1
  49. package/daemon/context-packs/skills/core/rig-bundles-and-shareable-artifacts/manifest.yaml +1 -1
  50. package/daemon/context-packs/skills/core/rig-lifecycle/manifest.yaml +1 -1
  51. package/daemon/context-packs/skills/core/session-source-fork/manifest.yaml +1 -1
  52. package/daemon/context-packs/skills/core/specification-system/manifest.yaml +1 -1
  53. package/daemon/context-packs/skills/core/topology-mutation-and-seat-management/SKILL.md +24 -3
  54. package/daemon/context-packs/skills/core/topology-mutation-and-seat-management/manifest.yaml +3 -3
  55. package/daemon/context-packs/skills/core/watchdog/manifest.yaml +1 -1
  56. package/daemon/context-packs/skills/delegating-work/manifest.yaml +1 -1
  57. package/daemon/context-packs/skills/forming-an-openrig-mental-model/SKILL.md +11 -11
  58. package/daemon/context-packs/skills/forming-an-openrig-mental-model/manifest.yaml +1 -1
  59. package/daemon/context-packs/skills/loading-addressable-markdown/manifest.yaml +1 -1
  60. package/daemon/context-packs/skills/loading-addressable-markdown/scripts/resolve-markdown.mjs +2 -1
  61. package/daemon/context-packs/skills/mission-slice-sop/SKILL.md +2 -2
  62. package/daemon/context-packs/skills/mission-slice-sop/manifest.yaml +1 -1
  63. package/daemon/context-packs/skills/openrig-operating-model/SKILL.md +17 -0
  64. package/daemon/context-packs/skills/openrig-operating-model/manifest.yaml +1 -1
  65. package/daemon/context-packs/skills/openrig-operating-model/scripts/compose.py +2 -2
  66. package/daemon/context-packs/skills/openrig-user/SKILL.md +45 -19
  67. package/daemon/context-packs/skills/openrig-user/manifest.yaml +1 -1
  68. package/daemon/context-packs/skills/orienting-to-an-inherited-seat/SKILL.md +5 -7
  69. package/daemon/context-packs/skills/orienting-to-an-inherited-seat/manifest.yaml +1 -1
  70. package/daemon/context-packs/skills/pm/backlog-capture/manifest.yaml +1 -1
  71. package/daemon/context-packs/skills/pm/context-builder/manifest.yaml +1 -1
  72. package/daemon/context-packs/skills/pm/exec-summary/manifest.yaml +1 -1
  73. package/daemon/context-packs/skills/pm/office-hours/manifest.yaml +1 -1
  74. package/daemon/context-packs/skills/pm/plan-review/manifest.yaml +1 -1
  75. package/daemon/context-packs/skills/pm/requirements-writer/manifest.yaml +1 -1
  76. package/daemon/context-packs/skills/pm/ui-mockup/manifest.yaml +1 -1
  77. package/daemon/context-packs/skills/pods/development-team/manifest.yaml +1 -1
  78. package/daemon/context-packs/skills/pods/orchestration-team/manifest.yaml +1 -1
  79. package/daemon/context-packs/skills/pods/oversight-team/manifest.yaml +1 -1
  80. package/daemon/context-packs/skills/pods/review-team/manifest.yaml +1 -1
  81. package/daemon/context-packs/skills/process/agent-browser/manifest.yaml +1 -1
  82. package/daemon/context-packs/skills/process/context-engineering/manifest.yaml +1 -1
  83. package/daemon/context-packs/skills/process/dogfood/manifest.yaml +1 -1
  84. package/daemon/context-packs/skills/process/frontend-design/manifest.yaml +1 -1
  85. package/daemon/context-packs/skills/process/systematic-debugging/manifest.yaml +1 -1
  86. package/daemon/context-packs/skills/process/test-driven-development/manifest.yaml +1 -1
  87. package/daemon/context-packs/skills/process/verification-before-completion/manifest.yaml +1 -1
  88. package/daemon/context-packs/skills/queue-handoff/SKILL.md +1 -19
  89. package/daemon/context-packs/skills/queue-handoff/manifest.yaml +1 -1
  90. package/daemon/context-packs/skills/refocusing/SKILL.md +3 -0
  91. package/daemon/context-packs/skills/refocusing/manifest.yaml +1 -1
  92. package/daemon/context-packs/skills/refocusing/scripts/trace-to-root.py +56 -4
  93. package/daemon/context-packs/skills/retiring-and-inheriting-a-seat/manifest.yaml +1 -1
  94. package/daemon/context-packs/skills/seat-continuity-and-handover/SKILL.md +0 -5
  95. package/daemon/context-packs/skills/seat-continuity-and-handover/manifest.yaml +1 -1
  96. package/daemon/context-packs/skills/session-compaction-and-restore/SKILL.md +5 -6
  97. package/daemon/context-packs/skills/session-compaction-and-restore/manifest.yaml +1 -1
  98. package/daemon/context-packs/skills/software-for-agents/manifest.yaml +1 -1
  99. package/daemon/context-packs/world-example/manifest.yaml +1 -1
  100. package/daemon/context-packs/world-public/manifest.yaml +1 -1
  101. package/daemon/dist/adapters/claude-code-adapter.d.ts +17 -3
  102. package/daemon/dist/adapters/claude-code-adapter.d.ts.map +1 -1
  103. package/daemon/dist/adapters/claude-code-adapter.js +157 -53
  104. package/daemon/dist/adapters/claude-code-adapter.js.map +1 -1
  105. package/daemon/dist/adapters/claude-resume.d.ts +7 -1
  106. package/daemon/dist/adapters/claude-resume.d.ts.map +1 -1
  107. package/daemon/dist/adapters/claude-resume.js +39 -8
  108. package/daemon/dist/adapters/claude-resume.js.map +1 -1
  109. package/daemon/dist/adapters/codex-resume.d.ts +7 -1
  110. package/daemon/dist/adapters/codex-resume.d.ts.map +1 -1
  111. package/daemon/dist/adapters/codex-resume.js +14 -6
  112. package/daemon/dist/adapters/codex-resume.js.map +1 -1
  113. package/daemon/dist/adapters/codex-runtime-adapter.d.ts +8 -0
  114. package/daemon/dist/adapters/codex-runtime-adapter.d.ts.map +1 -1
  115. package/daemon/dist/adapters/codex-runtime-adapter.js +34 -12
  116. package/daemon/dist/adapters/codex-runtime-adapter.js.map +1 -1
  117. package/daemon/dist/adapters/compose-services-adapter.d.ts +2 -1
  118. package/daemon/dist/adapters/compose-services-adapter.d.ts.map +1 -1
  119. package/daemon/dist/adapters/compose-services-adapter.js +5 -2
  120. package/daemon/dist/adapters/compose-services-adapter.js.map +1 -1
  121. package/daemon/dist/adapters/daemon-url.d.ts +7 -0
  122. package/daemon/dist/adapters/daemon-url.d.ts.map +1 -0
  123. package/daemon/dist/adapters/daemon-url.js +12 -0
  124. package/daemon/dist/adapters/daemon-url.js.map +1 -0
  125. package/daemon/dist/adapters/omp-resume.d.ts +6 -0
  126. package/daemon/dist/adapters/omp-resume.d.ts.map +1 -0
  127. package/daemon/dist/adapters/omp-resume.js +6 -0
  128. package/daemon/dist/adapters/omp-resume.js.map +1 -0
  129. package/daemon/dist/adapters/omp-runtime-adapter.d.ts +10 -0
  130. package/daemon/dist/adapters/omp-runtime-adapter.d.ts.map +1 -0
  131. package/daemon/dist/adapters/omp-runtime-adapter.js +16 -0
  132. package/daemon/dist/adapters/omp-runtime-adapter.js.map +1 -0
  133. package/daemon/dist/adapters/pi-resume.d.ts +4 -0
  134. package/daemon/dist/adapters/pi-resume.d.ts.map +1 -1
  135. package/daemon/dist/adapters/pi-resume.js +20 -18
  136. package/daemon/dist/adapters/pi-resume.js.map +1 -1
  137. package/daemon/dist/adapters/pi-runner-protocol.d.ts +14 -2
  138. package/daemon/dist/adapters/pi-runner-protocol.d.ts.map +1 -1
  139. package/daemon/dist/adapters/pi-runner-protocol.js +62 -5
  140. package/daemon/dist/adapters/pi-runner-protocol.js.map +1 -1
  141. package/daemon/dist/adapters/pi-runner.d.ts +49 -5
  142. package/daemon/dist/adapters/pi-runner.d.ts.map +1 -1
  143. package/daemon/dist/adapters/pi-runner.js +362 -67
  144. package/daemon/dist/adapters/pi-runner.js.map +1 -1
  145. package/daemon/dist/adapters/pi-runtime-adapter.d.ts +3 -2
  146. package/daemon/dist/adapters/pi-runtime-adapter.d.ts.map +1 -1
  147. package/daemon/dist/adapters/pi-runtime-adapter.js +49 -32
  148. package/daemon/dist/adapters/pi-runtime-adapter.js.map +1 -1
  149. package/daemon/dist/adapters/preflight-exec.d.ts +11 -0
  150. package/daemon/dist/adapters/preflight-exec.d.ts.map +1 -0
  151. package/daemon/dist/adapters/preflight-exec.js +52 -0
  152. package/daemon/dist/adapters/preflight-exec.js.map +1 -0
  153. package/daemon/dist/adapters/stub-runner.d.ts.map +1 -1
  154. package/daemon/dist/adapters/stub-runner.js +3 -1
  155. package/daemon/dist/adapters/stub-runner.js.map +1 -1
  156. package/daemon/dist/adapters/stub-runtime-adapter.js +1 -1
  157. package/daemon/dist/adapters/stub-runtime-adapter.js.map +1 -1
  158. package/daemon/dist/adapters/tmux.d.ts +47 -5
  159. package/daemon/dist/adapters/tmux.d.ts.map +1 -1
  160. package/daemon/dist/adapters/tmux.js +305 -54
  161. package/daemon/dist/adapters/tmux.js.map +1 -1
  162. package/daemon/dist/build-info.js +3 -3
  163. package/daemon/dist/daemon-shutdown.d.ts +19 -0
  164. package/daemon/dist/daemon-shutdown.d.ts.map +1 -1
  165. package/daemon/dist/daemon-shutdown.js +81 -0
  166. package/daemon/dist/daemon-shutdown.js.map +1 -1
  167. package/daemon/dist/db/all-migrations.d.ts +1 -1
  168. package/daemon/dist/db/all-migrations.d.ts.map +1 -1
  169. package/daemon/dist/db/all-migrations.js +10 -2
  170. package/daemon/dist/db/all-migrations.js.map +1 -1
  171. package/daemon/dist/db/migrations/090_human_reply_to.d.ts +3 -0
  172. package/daemon/dist/db/migrations/090_human_reply_to.d.ts.map +1 -0
  173. package/daemon/dist/db/migrations/090_human_reply_to.js +7 -0
  174. package/daemon/dist/db/migrations/090_human_reply_to.js.map +1 -0
  175. package/daemon/dist/db/migrations/091_human_questions.d.ts +3 -0
  176. package/daemon/dist/db/migrations/091_human_questions.d.ts.map +1 -0
  177. package/daemon/dist/db/migrations/091_human_questions.js +9 -0
  178. package/daemon/dist/db/migrations/091_human_questions.js.map +1 -0
  179. package/daemon/dist/db/migrations/092_node_effort.d.ts +3 -0
  180. package/daemon/dist/db/migrations/092_node_effort.d.ts.map +1 -0
  181. package/daemon/dist/db/migrations/092_node_effort.js +8 -0
  182. package/daemon/dist/db/migrations/092_node_effort.js.map +1 -0
  183. package/daemon/dist/db/migrations/094_usage_samples_latest_indexes.d.ts +3 -0
  184. package/daemon/dist/db/migrations/094_usage_samples_latest_indexes.d.ts.map +1 -0
  185. package/daemon/dist/db/migrations/094_usage_samples_latest_indexes.js +12 -0
  186. package/daemon/dist/db/migrations/094_usage_samples_latest_indexes.js.map +1 -0
  187. package/daemon/dist/domain/activity-endpoint.d.ts.map +1 -1
  188. package/daemon/dist/domain/activity-endpoint.js +3 -1
  189. package/daemon/dist/domain/activity-endpoint.js.map +1 -1
  190. package/daemon/dist/domain/agent-activity-store.d.ts +3 -1
  191. package/daemon/dist/domain/agent-activity-store.d.ts.map +1 -1
  192. package/daemon/dist/domain/agent-activity-store.js +13 -3
  193. package/daemon/dist/domain/agent-activity-store.js.map +1 -1
  194. package/daemon/dist/domain/agent-images/agent-image-library-service.d.ts.map +1 -1
  195. package/daemon/dist/domain/agent-images/agent-image-library-service.js +76 -56
  196. package/daemon/dist/domain/agent-images/agent-image-library-service.js.map +1 -1
  197. package/daemon/dist/domain/agent-manifest.d.ts.map +1 -1
  198. package/daemon/dist/domain/agent-manifest.js +24 -3
  199. package/daemon/dist/domain/agent-manifest.js.map +1 -1
  200. package/daemon/dist/domain/bootstrap-orchestrator.d.ts.map +1 -1
  201. package/daemon/dist/domain/bootstrap-orchestrator.js +3 -2
  202. package/daemon/dist/domain/bootstrap-orchestrator.js.map +1 -1
  203. package/daemon/dist/domain/bundle-archive.d.ts.map +1 -1
  204. package/daemon/dist/domain/bundle-archive.js +25 -5
  205. package/daemon/dist/domain/bundle-archive.js.map +1 -1
  206. package/daemon/dist/domain/chat-repository.d.ts.map +1 -1
  207. package/daemon/dist/domain/chat-repository.js +3 -1
  208. package/daemon/dist/domain/chat-repository.js.map +1 -1
  209. package/daemon/dist/domain/checkpoint-store.d.ts.map +1 -1
  210. package/daemon/dist/domain/checkpoint-store.js +2 -2
  211. package/daemon/dist/domain/checkpoint-store.js.map +1 -1
  212. package/daemon/dist/domain/claim-service.d.ts +7 -0
  213. package/daemon/dist/domain/claim-service.d.ts.map +1 -1
  214. package/daemon/dist/domain/claim-service.js +6 -2
  215. package/daemon/dist/domain/claim-service.js.map +1 -1
  216. package/daemon/dist/domain/claude-compaction-enforcer.d.ts +35 -12
  217. package/daemon/dist/domain/claude-compaction-enforcer.d.ts.map +1 -1
  218. package/daemon/dist/domain/claude-compaction-enforcer.js +256 -128
  219. package/daemon/dist/domain/claude-compaction-enforcer.js.map +1 -1
  220. package/daemon/dist/domain/claude-managed-launch.d.ts +13 -0
  221. package/daemon/dist/domain/claude-managed-launch.d.ts.map +1 -1
  222. package/daemon/dist/domain/claude-managed-launch.js +31 -4
  223. package/daemon/dist/domain/claude-managed-launch.js.map +1 -1
  224. package/daemon/dist/domain/codex-daemon-support.d.ts +1 -1
  225. package/daemon/dist/domain/codex-daemon-support.d.ts.map +1 -1
  226. package/daemon/dist/domain/codex-daemon-support.js +2 -2
  227. package/daemon/dist/domain/codex-daemon-support.js.map +1 -1
  228. package/daemon/dist/domain/codex-network-default.d.ts +42 -0
  229. package/daemon/dist/domain/codex-network-default.d.ts.map +1 -0
  230. package/daemon/dist/domain/codex-network-default.js +230 -0
  231. package/daemon/dist/domain/codex-network-default.js.map +1 -0
  232. package/daemon/dist/domain/codex-profile-preflight.d.ts +1 -1
  233. package/daemon/dist/domain/codex-profile-preflight.d.ts.map +1 -1
  234. package/daemon/dist/domain/codex-profile-preflight.js +3 -3
  235. package/daemon/dist/domain/codex-profile-preflight.js.map +1 -1
  236. package/daemon/dist/domain/codex-thread-id.d.ts +4 -2
  237. package/daemon/dist/domain/codex-thread-id.d.ts.map +1 -1
  238. package/daemon/dist/domain/codex-thread-id.js +10 -6
  239. package/daemon/dist/domain/codex-thread-id.js.map +1 -1
  240. package/daemon/dist/domain/context-monitor.d.ts.map +1 -1
  241. package/daemon/dist/domain/context-monitor.js +2 -1
  242. package/daemon/dist/domain/context-monitor.js.map +1 -1
  243. package/daemon/dist/domain/context-packs/context-pack-library-service.d.ts.map +1 -1
  244. package/daemon/dist/domain/context-packs/context-pack-library-service.js +13 -2
  245. package/daemon/dist/domain/context-packs/context-pack-library-service.js.map +1 -1
  246. package/daemon/dist/domain/context-packs/profile-composer.d.ts +5 -0
  247. package/daemon/dist/domain/context-packs/profile-composer.d.ts.map +1 -1
  248. package/daemon/dist/domain/context-packs/profile-composer.js +30 -15
  249. package/daemon/dist/domain/context-packs/profile-composer.js.map +1 -1
  250. package/daemon/dist/domain/context-packs/profile-source-resolver.d.ts +10 -0
  251. package/daemon/dist/domain/context-packs/profile-source-resolver.d.ts.map +1 -1
  252. package/daemon/dist/domain/context-packs/profile-source-resolver.js +43 -8
  253. package/daemon/dist/domain/context-packs/profile-source-resolver.js.map +1 -1
  254. package/daemon/dist/domain/context-packs/seat-recap-store.d.ts.map +1 -1
  255. package/daemon/dist/domain/context-packs/seat-recap-store.js +73 -16
  256. package/daemon/dist/domain/context-packs/seat-recap-store.js.map +1 -1
  257. package/daemon/dist/domain/context-usage-store.d.ts +3 -0
  258. package/daemon/dist/domain/context-usage-store.d.ts.map +1 -1
  259. package/daemon/dist/domain/context-usage-store.js +4 -2
  260. package/daemon/dist/domain/context-usage-store.js.map +1 -1
  261. package/daemon/dist/domain/crash-cart-detect.d.ts.map +1 -1
  262. package/daemon/dist/domain/crash-cart-detect.js +2 -1
  263. package/daemon/dist/domain/crash-cart-detect.js.map +1 -1
  264. package/daemon/dist/domain/crash-cart-discovery.d.ts.map +1 -1
  265. package/daemon/dist/domain/crash-cart-discovery.js +4 -2
  266. package/daemon/dist/domain/crash-cart-discovery.js.map +1 -1
  267. package/daemon/dist/domain/current-work.d.ts +17 -0
  268. package/daemon/dist/domain/current-work.d.ts.map +1 -1
  269. package/daemon/dist/domain/current-work.js +46 -0
  270. package/daemon/dist/domain/current-work.js.map +1 -1
  271. package/daemon/dist/domain/cwd-resolution.js +1 -1
  272. package/daemon/dist/domain/cwd-resolution.js.map +1 -1
  273. package/daemon/dist/domain/daemon-url.d.ts +7 -0
  274. package/daemon/dist/domain/daemon-url.d.ts.map +1 -0
  275. package/daemon/dist/domain/daemon-url.js +12 -0
  276. package/daemon/dist/domain/daemon-url.js.map +1 -0
  277. package/daemon/dist/domain/discovery-types.d.ts +1 -1
  278. package/daemon/dist/domain/discovery-types.d.ts.map +1 -1
  279. package/daemon/dist/domain/event-bus.d.ts +1 -0
  280. package/daemon/dist/domain/event-bus.d.ts.map +1 -1
  281. package/daemon/dist/domain/event-bus.js +18 -7
  282. package/daemon/dist/domain/event-bus.js.map +1 -1
  283. package/daemon/dist/domain/execution-view.d.ts +3 -3
  284. package/daemon/dist/domain/execution-view.d.ts.map +1 -1
  285. package/daemon/dist/domain/execution-view.js +116 -93
  286. package/daemon/dist/domain/execution-view.js.map +1 -1
  287. package/daemon/dist/domain/gateway/operator-delivery-engine.d.ts +9 -7
  288. package/daemon/dist/domain/gateway/operator-delivery-engine.d.ts.map +1 -1
  289. package/daemon/dist/domain/gateway/operator-delivery-engine.js +38 -16
  290. package/daemon/dist/domain/gateway/operator-delivery-engine.js.map +1 -1
  291. package/daemon/dist/domain/gateway/slack/inbound.d.ts +71 -3
  292. package/daemon/dist/domain/gateway/slack/inbound.d.ts.map +1 -1
  293. package/daemon/dist/domain/gateway/slack/inbound.js +145 -11
  294. package/daemon/dist/domain/gateway/slack/inbound.js.map +1 -1
  295. package/daemon/dist/domain/gateway/slack/manifest.js +1 -1
  296. package/daemon/dist/domain/gateway/slack/manifest.js.map +1 -1
  297. package/daemon/dist/domain/gateway/slack/message.d.ts +17 -0
  298. package/daemon/dist/domain/gateway/slack/message.d.ts.map +1 -1
  299. package/daemon/dist/domain/gateway/slack/message.js +77 -3
  300. package/daemon/dist/domain/gateway/slack/message.js.map +1 -1
  301. package/daemon/dist/domain/gateway/slack/outbound-driver.d.ts +3 -0
  302. package/daemon/dist/domain/gateway/slack/outbound-driver.d.ts.map +1 -1
  303. package/daemon/dist/domain/gateway/slack/outbound-driver.js +2 -0
  304. package/daemon/dist/domain/gateway/slack/outbound-driver.js.map +1 -1
  305. package/daemon/dist/domain/gateway/slack/queue-access.d.ts +3 -0
  306. package/daemon/dist/domain/gateway/slack/queue-access.d.ts.map +1 -1
  307. package/daemon/dist/domain/gateway/slack/queue-access.js +15 -5
  308. package/daemon/dist/domain/gateway/slack/queue-access.js.map +1 -1
  309. package/daemon/dist/domain/gateway/slack/secrets.d.ts.map +1 -1
  310. package/daemon/dist/domain/gateway/slack/secrets.js +5 -4
  311. package/daemon/dist/domain/gateway/slack/secrets.js.map +1 -1
  312. package/daemon/dist/domain/gateway/slack/slack-api.d.ts +16 -10
  313. package/daemon/dist/domain/gateway/slack/slack-api.d.ts.map +1 -1
  314. package/daemon/dist/domain/gateway/slack/slack-api.js +91 -23
  315. package/daemon/dist/domain/gateway/slack/slack-api.js.map +1 -1
  316. package/daemon/dist/domain/gateway/slack/slack-delivery.d.ts +33 -10
  317. package/daemon/dist/domain/gateway/slack/slack-delivery.d.ts.map +1 -1
  318. package/daemon/dist/domain/gateway/slack/slack-delivery.js +107 -26
  319. package/daemon/dist/domain/gateway/slack/slack-delivery.js.map +1 -1
  320. package/daemon/dist/domain/gateway/slack/slack-subsystem.d.ts +1 -1
  321. package/daemon/dist/domain/gateway/slack/slack-subsystem.d.ts.map +1 -1
  322. package/daemon/dist/domain/gateway/slack/slack-subsystem.js +114 -27
  323. package/daemon/dist/domain/gateway/slack/slack-subsystem.js.map +1 -1
  324. package/daemon/dist/domain/gateway/slack/socket-inbound.d.ts.map +1 -1
  325. package/daemon/dist/domain/gateway/slack/socket-inbound.js +3 -0
  326. package/daemon/dist/domain/gateway/slack/socket-inbound.js.map +1 -1
  327. package/daemon/dist/domain/gateway/slack/state-store.d.ts +3 -0
  328. package/daemon/dist/domain/gateway/slack/state-store.d.ts.map +1 -1
  329. package/daemon/dist/domain/gateway/slack/state-store.js +18 -0
  330. package/daemon/dist/domain/gateway/slack/state-store.js.map +1 -1
  331. package/daemon/dist/domain/gateway/slack/thread-routing.d.ts.map +1 -1
  332. package/daemon/dist/domain/gateway/slack/thread-routing.js +7 -2
  333. package/daemon/dist/domain/gateway/slack/thread-routing.js.map +1 -1
  334. package/daemon/dist/domain/gateway/slack/thread-seat-map.d.ts +3 -0
  335. package/daemon/dist/domain/gateway/slack/thread-seat-map.d.ts.map +1 -1
  336. package/daemon/dist/domain/gateway/slack/thread-seat-map.js +14 -2
  337. package/daemon/dist/domain/gateway/slack/thread-seat-map.js.map +1 -1
  338. package/daemon/dist/domain/graph-projection.d.ts.map +1 -1
  339. package/daemon/dist/domain/graph-projection.js +1 -0
  340. package/daemon/dist/domain/graph-projection.js.map +1 -1
  341. package/daemon/dist/domain/health-checkpoints.d.ts +2 -0
  342. package/daemon/dist/domain/health-checkpoints.d.ts.map +1 -1
  343. package/daemon/dist/domain/health-checkpoints.js +2 -0
  344. package/daemon/dist/domain/health-checkpoints.js.map +1 -1
  345. package/daemon/dist/domain/health-detectors.d.ts +32 -1
  346. package/daemon/dist/domain/health-detectors.d.ts.map +1 -1
  347. package/daemon/dist/domain/health-detectors.js +40 -9
  348. package/daemon/dist/domain/health-detectors.js.map +1 -1
  349. package/daemon/dist/domain/health-diagnosis.d.ts +3 -1
  350. package/daemon/dist/domain/health-diagnosis.d.ts.map +1 -1
  351. package/daemon/dist/domain/health-diagnosis.js +6 -3
  352. package/daemon/dist/domain/health-diagnosis.js.map +1 -1
  353. package/daemon/dist/domain/health-passive-ceremony.d.ts +5 -1
  354. package/daemon/dist/domain/health-passive-ceremony.d.ts.map +1 -1
  355. package/daemon/dist/domain/health-passive-ceremony.js +20 -4
  356. package/daemon/dist/domain/health-passive-ceremony.js.map +1 -1
  357. package/daemon/dist/domain/hosts/remote-daemon-http.d.ts +3 -1
  358. package/daemon/dist/domain/hosts/remote-daemon-http.d.ts.map +1 -1
  359. package/daemon/dist/domain/hosts/remote-daemon-http.js +10 -3
  360. package/daemon/dist/domain/hosts/remote-daemon-http.js.map +1 -1
  361. package/daemon/dist/domain/human-questions.d.ts +41 -0
  362. package/daemon/dist/domain/human-questions.d.ts.map +1 -0
  363. package/daemon/dist/domain/human-questions.js +81 -0
  364. package/daemon/dist/domain/human-questions.js.map +1 -0
  365. package/daemon/dist/domain/markdown-address.js +1 -1
  366. package/daemon/dist/domain/markdown-address.js.map +1 -1
  367. package/daemon/dist/domain/mission-control/audit-browse.d.ts +5 -0
  368. package/daemon/dist/domain/mission-control/audit-browse.d.ts.map +1 -1
  369. package/daemon/dist/domain/mission-control/audit-browse.js +11 -1
  370. package/daemon/dist/domain/mission-control/audit-browse.js.map +1 -1
  371. package/daemon/dist/domain/mission-control/mission-control-fleet-cli-capability.d.ts +25 -63
  372. package/daemon/dist/domain/mission-control/mission-control-fleet-cli-capability.d.ts.map +1 -1
  373. package/daemon/dist/domain/mission-control/mission-control-fleet-cli-capability.js +34 -100
  374. package/daemon/dist/domain/mission-control/mission-control-fleet-cli-capability.js.map +1 -1
  375. package/daemon/dist/domain/mission-control/mission-control-read-layer.d.ts +1 -0
  376. package/daemon/dist/domain/mission-control/mission-control-read-layer.d.ts.map +1 -1
  377. package/daemon/dist/domain/mission-control/mission-control-read-layer.js +6 -3
  378. package/daemon/dist/domain/mission-control/mission-control-read-layer.js.map +1 -1
  379. package/daemon/dist/domain/mission-control/notification-adapter-ntfy.d.ts +5 -0
  380. package/daemon/dist/domain/mission-control/notification-adapter-ntfy.d.ts.map +1 -1
  381. package/daemon/dist/domain/mission-control/notification-adapter-ntfy.js +33 -2
  382. package/daemon/dist/domain/mission-control/notification-adapter-ntfy.js.map +1 -1
  383. package/daemon/dist/domain/mission-control/notification-adapter-types.d.ts +2 -0
  384. package/daemon/dist/domain/mission-control/notification-adapter-types.d.ts.map +1 -1
  385. package/daemon/dist/domain/mission-control/notification-adapter-webhook.d.ts +4 -0
  386. package/daemon/dist/domain/mission-control/notification-adapter-webhook.d.ts.map +1 -1
  387. package/daemon/dist/domain/mission-control/notification-adapter-webhook.js +33 -2
  388. package/daemon/dist/domain/mission-control/notification-adapter-webhook.js.map +1 -1
  389. package/daemon/dist/domain/mission-control/outbound-url-validator.d.ts +27 -0
  390. package/daemon/dist/domain/mission-control/outbound-url-validator.d.ts.map +1 -0
  391. package/daemon/dist/domain/mission-control/outbound-url-validator.js +60 -0
  392. package/daemon/dist/domain/mission-control/outbound-url-validator.js.map +1 -0
  393. package/daemon/dist/domain/native-process-lineage.d.ts +9 -2
  394. package/daemon/dist/domain/native-process-lineage.d.ts.map +1 -1
  395. package/daemon/dist/domain/native-process-lineage.js +104 -11
  396. package/daemon/dist/domain/native-process-lineage.js.map +1 -1
  397. package/daemon/dist/domain/native-resume-probe.d.ts +5 -1
  398. package/daemon/dist/domain/native-resume-probe.d.ts.map +1 -1
  399. package/daemon/dist/domain/native-resume-probe.js +17 -4
  400. package/daemon/dist/domain/native-resume-probe.js.map +1 -1
  401. package/daemon/dist/domain/node-inventory.d.ts.map +1 -1
  402. package/daemon/dist/domain/node-inventory.js +91 -44
  403. package/daemon/dist/domain/node-inventory.js.map +1 -1
  404. package/daemon/dist/domain/node-launcher.d.ts +4 -0
  405. package/daemon/dist/domain/node-launcher.d.ts.map +1 -1
  406. package/daemon/dist/domain/node-launcher.js +4 -1
  407. package/daemon/dist/domain/node-launcher.js.map +1 -1
  408. package/daemon/dist/domain/periodic-snapshot-scheduler.d.ts +1 -0
  409. package/daemon/dist/domain/periodic-snapshot-scheduler.d.ts.map +1 -1
  410. package/daemon/dist/domain/periodic-snapshot-scheduler.js +25 -0
  411. package/daemon/dist/domain/periodic-snapshot-scheduler.js.map +1 -1
  412. package/daemon/dist/domain/permission-drift.d.ts +1 -0
  413. package/daemon/dist/domain/permission-drift.d.ts.map +1 -1
  414. package/daemon/dist/domain/permission-drift.js +13 -1
  415. package/daemon/dist/domain/permission-drift.js.map +1 -1
  416. package/daemon/dist/domain/plugin-discovery-service.d.ts +5 -6
  417. package/daemon/dist/domain/plugin-discovery-service.d.ts.map +1 -1
  418. package/daemon/dist/domain/plugin-discovery-service.js +14 -8
  419. package/daemon/dist/domain/plugin-discovery-service.js.map +1 -1
  420. package/daemon/dist/domain/pod-bundle-assembler.d.ts +6 -2
  421. package/daemon/dist/domain/pod-bundle-assembler.d.ts.map +1 -1
  422. package/daemon/dist/domain/pod-bundle-assembler.js +58 -15
  423. package/daemon/dist/domain/pod-bundle-assembler.js.map +1 -1
  424. package/daemon/dist/domain/policies/parked-owner-consumer.d.ts +6 -0
  425. package/daemon/dist/domain/policies/parked-owner-consumer.d.ts.map +1 -1
  426. package/daemon/dist/domain/policies/parked-owner-consumer.js +11 -0
  427. package/daemon/dist/domain/policies/parked-owner-consumer.js.map +1 -1
  428. package/daemon/dist/domain/profile-resolver.d.ts +1 -0
  429. package/daemon/dist/domain/profile-resolver.d.ts.map +1 -1
  430. package/daemon/dist/domain/profile-resolver.js +7 -0
  431. package/daemon/dist/domain/profile-resolver.js.map +1 -1
  432. package/daemon/dist/domain/project-lifecycle-compiler.d.ts.map +1 -1
  433. package/daemon/dist/domain/project-lifecycle-compiler.js +10 -2
  434. package/daemon/dist/domain/project-lifecycle-compiler.js.map +1 -1
  435. package/daemon/dist/domain/projection-planner.d.ts.map +1 -1
  436. package/daemon/dist/domain/projection-planner.js +14 -5
  437. package/daemon/dist/domain/projection-planner.js.map +1 -1
  438. package/daemon/dist/domain/proof/judgments.d.ts +3 -0
  439. package/daemon/dist/domain/proof/judgments.d.ts.map +1 -1
  440. package/daemon/dist/domain/proof/judgments.js +13 -8
  441. package/daemon/dist/domain/proof/judgments.js.map +1 -1
  442. package/daemon/dist/domain/proof/source-watch.d.ts.map +1 -1
  443. package/daemon/dist/domain/proof/source-watch.js +45 -27
  444. package/daemon/dist/domain/proof/source-watch.js.map +1 -1
  445. package/daemon/dist/domain/provider/host-usage-rollup.js +9 -5
  446. package/daemon/dist/domain/provider/host-usage-rollup.js.map +1 -1
  447. package/daemon/dist/domain/ps-projection.d.ts +22 -3
  448. package/daemon/dist/domain/ps-projection.d.ts.map +1 -1
  449. package/daemon/dist/domain/ps-projection.js +50 -11
  450. package/daemon/dist/domain/ps-projection.js.map +1 -1
  451. package/daemon/dist/domain/queue-recovery.d.ts.map +1 -1
  452. package/daemon/dist/domain/queue-recovery.js +7 -1
  453. package/daemon/dist/domain/queue-recovery.js.map +1 -1
  454. package/daemon/dist/domain/queue-repository.d.ts +98 -6
  455. package/daemon/dist/domain/queue-repository.d.ts.map +1 -1
  456. package/daemon/dist/domain/queue-repository.js +301 -33
  457. package/daemon/dist/domain/queue-repository.js.map +1 -1
  458. package/daemon/dist/domain/queue-stuck-sweep.d.ts +3 -0
  459. package/daemon/dist/domain/queue-stuck-sweep.d.ts.map +1 -1
  460. package/daemon/dist/domain/queue-stuck-sweep.js +111 -26
  461. package/daemon/dist/domain/queue-stuck-sweep.js.map +1 -1
  462. package/daemon/dist/domain/queue-wake-ladder.d.ts +8 -7
  463. package/daemon/dist/domain/queue-wake-ladder.d.ts.map +1 -1
  464. package/daemon/dist/domain/queue-wake-ladder.js +278 -19
  465. package/daemon/dist/domain/queue-wake-ladder.js.map +1 -1
  466. package/daemon/dist/domain/queue-wake-repository.d.ts +10 -9
  467. package/daemon/dist/domain/queue-wake-repository.d.ts.map +1 -1
  468. package/daemon/dist/domain/queue-wake-repository.js +31 -11
  469. package/daemon/dist/domain/queue-wake-repository.js.map +1 -1
  470. package/daemon/dist/domain/reply-to-choice.d.ts +26 -0
  471. package/daemon/dist/domain/reply-to-choice.d.ts.map +1 -0
  472. package/daemon/dist/domain/reply-to-choice.js +45 -0
  473. package/daemon/dist/domain/reply-to-choice.js.map +1 -0
  474. package/daemon/dist/domain/restore-check-service.d.ts +27 -8
  475. package/daemon/dist/domain/restore-check-service.d.ts.map +1 -1
  476. package/daemon/dist/domain/restore-check-service.js +202 -126
  477. package/daemon/dist/domain/restore-check-service.js.map +1 -1
  478. package/daemon/dist/domain/restore-orchestrator.d.ts +3 -2
  479. package/daemon/dist/domain/restore-orchestrator.d.ts.map +1 -1
  480. package/daemon/dist/domain/restore-orchestrator.js +65 -208
  481. package/daemon/dist/domain/restore-orchestrator.js.map +1 -1
  482. package/daemon/dist/domain/restore-plan-preview.d.ts.map +1 -1
  483. package/daemon/dist/domain/restore-plan-preview.js +2 -6
  484. package/daemon/dist/domain/restore-plan-preview.js.map +1 -1
  485. package/daemon/dist/domain/restore-preconditions.d.ts +12 -0
  486. package/daemon/dist/domain/restore-preconditions.d.ts.map +1 -0
  487. package/daemon/dist/domain/restore-preconditions.js +202 -0
  488. package/daemon/dist/domain/restore-preconditions.js.map +1 -0
  489. package/daemon/dist/domain/resume-metadata-refresher.d.ts +20 -4
  490. package/daemon/dist/domain/resume-metadata-refresher.d.ts.map +1 -1
  491. package/daemon/dist/domain/resume-metadata-refresher.js +70 -8
  492. package/daemon/dist/domain/resume-metadata-refresher.js.map +1 -1
  493. package/daemon/dist/domain/resume-token-capture.d.ts +22 -1
  494. package/daemon/dist/domain/resume-token-capture.d.ts.map +1 -1
  495. package/daemon/dist/domain/resume-token-capture.js +32 -4
  496. package/daemon/dist/domain/resume-token-capture.js.map +1 -1
  497. package/daemon/dist/domain/resume-token-validation.d.ts +1 -1
  498. package/daemon/dist/domain/resume-token-validation.d.ts.map +1 -1
  499. package/daemon/dist/domain/resume-token-validation.js +24 -24
  500. package/daemon/dist/domain/resume-token-validation.js.map +1 -1
  501. package/daemon/dist/domain/rig-repository.d.ts +3 -0
  502. package/daemon/dist/domain/rig-repository.d.ts.map +1 -1
  503. package/daemon/dist/domain/rig-repository.js +21 -0
  504. package/daemon/dist/domain/rig-repository.js.map +1 -1
  505. package/daemon/dist/domain/rig-teardown.d.ts +3 -0
  506. package/daemon/dist/domain/rig-teardown.d.ts.map +1 -1
  507. package/daemon/dist/domain/rig-teardown.js +96 -19
  508. package/daemon/dist/domain/rig-teardown.js.map +1 -1
  509. package/daemon/dist/domain/rigspec-codec.d.ts.map +1 -1
  510. package/daemon/dist/domain/rigspec-codec.js +6 -0
  511. package/daemon/dist/domain/rigspec-codec.js.map +1 -1
  512. package/daemon/dist/domain/rigspec-exporter.d.ts.map +1 -1
  513. package/daemon/dist/domain/rigspec-exporter.js +4 -0
  514. package/daemon/dist/domain/rigspec-exporter.js.map +1 -1
  515. package/daemon/dist/domain/rigspec-instantiator.d.ts.map +1 -1
  516. package/daemon/dist/domain/rigspec-instantiator.js +37 -8
  517. package/daemon/dist/domain/rigspec-instantiator.js.map +1 -1
  518. package/daemon/dist/domain/rigspec-preflight.d.ts +2 -0
  519. package/daemon/dist/domain/rigspec-preflight.d.ts.map +1 -1
  520. package/daemon/dist/domain/rigspec-preflight.js +20 -5
  521. package/daemon/dist/domain/rigspec-preflight.js.map +1 -1
  522. package/daemon/dist/domain/rigspec-schema.d.ts.map +1 -1
  523. package/daemon/dist/domain/rigspec-schema.js +14 -2
  524. package/daemon/dist/domain/rigspec-schema.js.map +1 -1
  525. package/daemon/dist/domain/runtime-adapter.d.ts +7 -0
  526. package/daemon/dist/domain/runtime-adapter.d.ts.map +1 -1
  527. package/daemon/dist/domain/runtime-adapter.js.map +1 -1
  528. package/daemon/dist/domain/runtime-verifier.d.ts +3 -1
  529. package/daemon/dist/domain/runtime-verifier.d.ts.map +1 -1
  530. package/daemon/dist/domain/runtime-verifier.js +10 -1
  531. package/daemon/dist/domain/runtime-verifier.js.map +1 -1
  532. package/daemon/dist/domain/scope/scaffold-placeholder.d.ts +4 -4
  533. package/daemon/dist/domain/scope/scaffold-placeholder.d.ts.map +1 -1
  534. package/daemon/dist/domain/scope/scaffold-placeholder.js +4 -4
  535. package/daemon/dist/domain/scope/scaffold-placeholder.js.map +1 -1
  536. package/daemon/dist/domain/seat-activity-service.d.ts +9 -4
  537. package/daemon/dist/domain/seat-activity-service.d.ts.map +1 -1
  538. package/daemon/dist/domain/seat-activity-service.js +73 -22
  539. package/daemon/dist/domain/seat-activity-service.js.map +1 -1
  540. package/daemon/dist/domain/seat-attention-reconciler.d.ts +1 -0
  541. package/daemon/dist/domain/seat-attention-reconciler.d.ts.map +1 -1
  542. package/daemon/dist/domain/seat-attention-reconciler.js +32 -9
  543. package/daemon/dist/domain/seat-attention-reconciler.js.map +1 -1
  544. package/daemon/dist/domain/seat-handover-service.d.ts +6 -0
  545. package/daemon/dist/domain/seat-handover-service.d.ts.map +1 -1
  546. package/daemon/dist/domain/seat-handover-service.js +8 -5
  547. package/daemon/dist/domain/seat-handover-service.js.map +1 -1
  548. package/daemon/dist/domain/seat-identity-reconciler.d.ts +1 -1
  549. package/daemon/dist/domain/seat-identity-reconciler.d.ts.map +1 -1
  550. package/daemon/dist/domain/seat-identity-reconciler.js +99 -18
  551. package/daemon/dist/domain/seat-identity-reconciler.js.map +1 -1
  552. package/daemon/dist/domain/seat-launch-environment.d.ts +26 -0
  553. package/daemon/dist/domain/seat-launch-environment.d.ts.map +1 -0
  554. package/daemon/dist/domain/seat-launch-environment.js +178 -0
  555. package/daemon/dist/domain/seat-launch-environment.js.map +1 -0
  556. package/daemon/dist/domain/seat-lifecycle-service.d.ts +7 -0
  557. package/daemon/dist/domain/seat-lifecycle-service.d.ts.map +1 -1
  558. package/daemon/dist/domain/seat-lifecycle-service.js +37 -2
  559. package/daemon/dist/domain/seat-lifecycle-service.js.map +1 -1
  560. package/daemon/dist/domain/seat-status-service.d.ts.map +1 -1
  561. package/daemon/dist/domain/seat-status-service.js +4 -2
  562. package/daemon/dist/domain/seat-status-service.js.map +1 -1
  563. package/daemon/dist/domain/seat-structural-activity-service.d.ts +5 -4
  564. package/daemon/dist/domain/seat-structural-activity-service.d.ts.map +1 -1
  565. package/daemon/dist/domain/seat-structural-activity-service.js +23 -9
  566. package/daemon/dist/domain/seat-structural-activity-service.js.map +1 -1
  567. package/daemon/dist/domain/seat-switch-client-service.d.ts.map +1 -1
  568. package/daemon/dist/domain/seat-switch-client-service.js +3 -2
  569. package/daemon/dist/domain/seat-switch-client-service.js.map +1 -1
  570. package/daemon/dist/domain/services-readiness.d.ts.map +1 -1
  571. package/daemon/dist/domain/services-readiness.js +6 -2
  572. package/daemon/dist/domain/services-readiness.js.map +1 -1
  573. package/daemon/dist/domain/session-fingerprinter.d.ts.map +1 -1
  574. package/daemon/dist/domain/session-fingerprinter.js +16 -1
  575. package/daemon/dist/domain/session-fingerprinter.js.map +1 -1
  576. package/daemon/dist/domain/session-name.d.ts.map +1 -1
  577. package/daemon/dist/domain/session-name.js +6 -0
  578. package/daemon/dist/domain/session-name.js.map +1 -1
  579. package/daemon/dist/domain/session-registry.d.ts +3 -0
  580. package/daemon/dist/domain/session-registry.d.ts.map +1 -1
  581. package/daemon/dist/domain/session-registry.js +7 -0
  582. package/daemon/dist/domain/session-registry.js.map +1 -1
  583. package/daemon/dist/domain/session-transport.d.ts +30 -1
  584. package/daemon/dist/domain/session-transport.d.ts.map +1 -1
  585. package/daemon/dist/domain/session-transport.js +290 -145
  586. package/daemon/dist/domain/session-transport.js.map +1 -1
  587. package/daemon/dist/domain/snapshot-repository.d.ts +2 -1
  588. package/daemon/dist/domain/snapshot-repository.d.ts.map +1 -1
  589. package/daemon/dist/domain/snapshot-repository.js +39 -15
  590. package/daemon/dist/domain/snapshot-repository.js.map +1 -1
  591. package/daemon/dist/domain/spec-library-workflow-scanner.d.ts +1 -1
  592. package/daemon/dist/domain/spec-library-workflow-scanner.d.ts.map +1 -1
  593. package/daemon/dist/domain/spec-library-workflow-scanner.js +70 -11
  594. package/daemon/dist/domain/spec-library-workflow-scanner.js.map +1 -1
  595. package/daemon/dist/domain/spec-validation-service.d.ts +6 -0
  596. package/daemon/dist/domain/spec-validation-service.d.ts.map +1 -1
  597. package/daemon/dist/domain/spec-validation-service.js +16 -1
  598. package/daemon/dist/domain/spec-validation-service.js.map +1 -1
  599. package/daemon/dist/domain/startup-orchestrator.d.ts +8 -0
  600. package/daemon/dist/domain/startup-orchestrator.d.ts.map +1 -1
  601. package/daemon/dist/domain/startup-orchestrator.js +148 -37
  602. package/daemon/dist/domain/startup-orchestrator.js.map +1 -1
  603. package/daemon/dist/domain/startup-submission-evidence.d.ts +41 -0
  604. package/daemon/dist/domain/startup-submission-evidence.d.ts.map +1 -0
  605. package/daemon/dist/domain/startup-submission-evidence.js +67 -0
  606. package/daemon/dist/domain/startup-submission-evidence.js.map +1 -0
  607. package/daemon/dist/domain/startup-validation.d.ts.map +1 -1
  608. package/daemon/dist/domain/startup-validation.js +4 -0
  609. package/daemon/dist/domain/startup-validation.js.map +1 -1
  610. package/daemon/dist/domain/successor-session-launcher.d.ts +5 -0
  611. package/daemon/dist/domain/successor-session-launcher.d.ts.map +1 -1
  612. package/daemon/dist/domain/successor-session-launcher.js +8 -6
  613. package/daemon/dist/domain/successor-session-launcher.js.map +1 -1
  614. package/daemon/dist/domain/terminal/view-composer.d.ts.map +1 -1
  615. package/daemon/dist/domain/terminal/view-composer.js +2 -1
  616. package/daemon/dist/domain/terminal/view-composer.js.map +1 -1
  617. package/daemon/dist/domain/tmux-discovery-scanner.d.ts.map +1 -1
  618. package/daemon/dist/domain/tmux-discovery-scanner.js +7 -2
  619. package/daemon/dist/domain/tmux-discovery-scanner.js.map +1 -1
  620. package/daemon/dist/domain/tmux-option-defaults.d.ts.map +1 -1
  621. package/daemon/dist/domain/tmux-option-defaults.js +5 -0
  622. package/daemon/dist/domain/tmux-option-defaults.js.map +1 -1
  623. package/daemon/dist/domain/transcript-capture.d.ts.map +1 -1
  624. package/daemon/dist/domain/transcript-capture.js +1 -1
  625. package/daemon/dist/domain/transcript-capture.js.map +1 -1
  626. package/daemon/dist/domain/transcript-rotation.d.ts +26 -5
  627. package/daemon/dist/domain/transcript-rotation.d.ts.map +1 -1
  628. package/daemon/dist/domain/transcript-rotation.js +176 -25
  629. package/daemon/dist/domain/transcript-rotation.js.map +1 -1
  630. package/daemon/dist/domain/transcript-store.d.ts +1 -1
  631. package/daemon/dist/domain/transcript-store.d.ts.map +1 -1
  632. package/daemon/dist/domain/transcript-store.js +11 -4
  633. package/daemon/dist/domain/transcript-store.js.map +1 -1
  634. package/daemon/dist/domain/types.d.ts +18 -5
  635. package/daemon/dist/domain/types.d.ts.map +1 -1
  636. package/daemon/dist/domain/types.js.map +1 -1
  637. package/daemon/dist/domain/usage-series.d.ts.map +1 -1
  638. package/daemon/dist/domain/usage-series.js +11 -6
  639. package/daemon/dist/domain/usage-series.js.map +1 -1
  640. package/daemon/dist/domain/user-settings/settings-store.d.ts +2 -0
  641. package/daemon/dist/domain/user-settings/settings-store.d.ts.map +1 -1
  642. package/daemon/dist/domain/user-settings/settings-store.js +88 -6
  643. package/daemon/dist/domain/user-settings/settings-store.js.map +1 -1
  644. package/daemon/dist/domain/view-projector.d.ts +11 -6
  645. package/daemon/dist/domain/view-projector.d.ts.map +1 -1
  646. package/daemon/dist/domain/view-projector.js +2 -6
  647. package/daemon/dist/domain/view-projector.js.map +1 -1
  648. package/daemon/dist/domain/workflow-spec-cache.d.ts +29 -7
  649. package/daemon/dist/domain/workflow-spec-cache.d.ts.map +1 -1
  650. package/daemon/dist/domain/workflow-spec-cache.js +103 -14
  651. package/daemon/dist/domain/workflow-spec-cache.js.map +1 -1
  652. package/daemon/dist/domain/workspace/workspace-doctor.js +1 -1
  653. package/daemon/dist/domain/workspace/workspace-doctor.js.map +1 -1
  654. package/daemon/dist/domain/workspace/workspace-resolver.js +1 -1
  655. package/daemon/dist/domain/workspace/workspace-resolver.js.map +1 -1
  656. package/daemon/dist/health-detectors-surface.d.ts +1 -1
  657. package/daemon/dist/health-detectors-surface.d.ts.map +1 -1
  658. package/daemon/dist/health-detectors-surface.js.map +1 -1
  659. package/daemon/dist/index.d.ts +4 -4
  660. package/daemon/dist/index.d.ts.map +1 -1
  661. package/daemon/dist/index.js +11 -7
  662. package/daemon/dist/index.js.map +1 -1
  663. package/daemon/dist/middleware/json-body-error.d.ts +17 -0
  664. package/daemon/dist/middleware/json-body-error.d.ts.map +1 -0
  665. package/daemon/dist/middleware/json-body-error.js +42 -0
  666. package/daemon/dist/middleware/json-body-error.js.map +1 -0
  667. package/daemon/dist/routes/activity.d.ts.map +1 -1
  668. package/daemon/dist/routes/activity.js +85 -6
  669. package/daemon/dist/routes/activity.js.map +1 -1
  670. package/daemon/dist/routes/attention.d.ts.map +1 -1
  671. package/daemon/dist/routes/attention.js +7 -1
  672. package/daemon/dist/routes/attention.js.map +1 -1
  673. package/daemon/dist/routes/bundles.js +32 -3
  674. package/daemon/dist/routes/bundles.js.map +1 -1
  675. package/daemon/dist/routes/compaction.d.ts.map +1 -1
  676. package/daemon/dist/routes/compaction.js +30 -2
  677. package/daemon/dist/routes/compaction.js.map +1 -1
  678. package/daemon/dist/routes/context-packs.d.ts.map +1 -1
  679. package/daemon/dist/routes/context-packs.js +10 -2
  680. package/daemon/dist/routes/context-packs.js.map +1 -1
  681. package/daemon/dist/routes/files.js +2 -2
  682. package/daemon/dist/routes/files.js.map +1 -1
  683. package/daemon/dist/routes/gateway.d.ts.map +1 -1
  684. package/daemon/dist/routes/gateway.js +6 -1
  685. package/daemon/dist/routes/gateway.js.map +1 -1
  686. package/daemon/dist/routes/hosts.d.ts.map +1 -1
  687. package/daemon/dist/routes/hosts.js +51 -12
  688. package/daemon/dist/routes/hosts.js.map +1 -1
  689. package/daemon/dist/routes/mission-control.d.ts.map +1 -1
  690. package/daemon/dist/routes/mission-control.js +6 -2
  691. package/daemon/dist/routes/mission-control.js.map +1 -1
  692. package/daemon/dist/routes/missions.d.ts.map +1 -1
  693. package/daemon/dist/routes/missions.js +17 -5
  694. package/daemon/dist/routes/missions.js.map +1 -1
  695. package/daemon/dist/routes/plugins.d.ts.map +1 -1
  696. package/daemon/dist/routes/plugins.js +5 -1
  697. package/daemon/dist/routes/plugins.js.map +1 -1
  698. package/daemon/dist/routes/proof.d.ts.map +1 -1
  699. package/daemon/dist/routes/proof.js +9 -2
  700. package/daemon/dist/routes/proof.js.map +1 -1
  701. package/daemon/dist/routes/ps.d.ts.map +1 -1
  702. package/daemon/dist/routes/ps.js +18 -0
  703. package/daemon/dist/routes/ps.js.map +1 -1
  704. package/daemon/dist/routes/queue.d.ts.map +1 -1
  705. package/daemon/dist/routes/queue.js +150 -67
  706. package/daemon/dist/routes/queue.js.map +1 -1
  707. package/daemon/dist/routes/restore-check.d.ts.map +1 -1
  708. package/daemon/dist/routes/restore-check.js +40 -1
  709. package/daemon/dist/routes/restore-check.js.map +1 -1
  710. package/daemon/dist/routes/rigs.js +1 -1
  711. package/daemon/dist/routes/rigs.js.map +1 -1
  712. package/daemon/dist/routes/rigspec.d.ts.map +1 -1
  713. package/daemon/dist/routes/rigspec.js +7 -10
  714. package/daemon/dist/routes/rigspec.js.map +1 -1
  715. package/daemon/dist/routes/seat.d.ts.map +1 -1
  716. package/daemon/dist/routes/seat.js +11 -0
  717. package/daemon/dist/routes/seat.js.map +1 -1
  718. package/daemon/dist/routes/sessions.js +1 -1
  719. package/daemon/dist/routes/sessions.js.map +1 -1
  720. package/daemon/dist/routes/telemetry.d.ts.map +1 -1
  721. package/daemon/dist/routes/telemetry.js +6 -1
  722. package/daemon/dist/routes/telemetry.js.map +1 -1
  723. package/daemon/dist/routes/terminal-ws.d.ts +1 -2
  724. package/daemon/dist/routes/terminal-ws.d.ts.map +1 -1
  725. package/daemon/dist/routes/terminal-ws.js +1 -2
  726. package/daemon/dist/routes/terminal-ws.js.map +1 -1
  727. package/daemon/dist/routes/up.js +2 -1
  728. package/daemon/dist/routes/up.js.map +1 -1
  729. package/daemon/dist/routes/views.js +2 -2
  730. package/daemon/dist/routes/views.js.map +1 -1
  731. package/daemon/dist/server.d.ts +2 -0
  732. package/daemon/dist/server.d.ts.map +1 -1
  733. package/daemon/dist/server.js +7 -2
  734. package/daemon/dist/server.js.map +1 -1
  735. package/daemon/dist/spec-validation-surface.d.ts +2 -0
  736. package/daemon/dist/spec-validation-surface.d.ts.map +1 -0
  737. package/daemon/dist/spec-validation-surface.js +2 -0
  738. package/daemon/dist/spec-validation-surface.js.map +1 -0
  739. package/daemon/dist/startup.d.ts +1 -1
  740. package/daemon/dist/startup.d.ts.map +1 -1
  741. package/daemon/dist/startup.js +137 -50
  742. package/daemon/dist/startup.js.map +1 -1
  743. package/daemon/dist/terminal/TerminalSessionBroker.d.ts +1 -0
  744. package/daemon/dist/terminal/TerminalSessionBroker.d.ts.map +1 -1
  745. package/daemon/dist/terminal/TerminalSessionBroker.js +8 -1
  746. package/daemon/dist/terminal/TerminalSessionBroker.js.map +1 -1
  747. package/daemon/docs/reference/agent-spec.md +36 -1
  748. package/daemon/docs/reference/agent-startup-guide.md +81 -2
  749. package/daemon/docs/reference/browser-access.md +4 -1
  750. package/daemon/docs/reference/developing.md +17 -9
  751. package/daemon/docs/reference/getting-started.md +7 -2
  752. package/daemon/docs/reference/health-diagnosis.md +10 -3
  753. package/daemon/docs/reference/help.md +9 -4
  754. package/daemon/docs/reference/host-resources.md +60 -0
  755. package/daemon/docs/reference/instance-layout.md +11 -0
  756. package/daemon/docs/reference/rig-spec.md +32 -5
  757. package/daemon/docs/reference/sdlc-conventions.md +6 -3
  758. package/daemon/docs/reference/slack-app-setup.md +6 -0
  759. package/daemon/specs/agents/shared/agent.yaml +1 -1
  760. package/daemon/specs/agents/shared/skills/core/messaging-the-human/SKILL.md +24 -0
  761. package/daemon/specs/agents/shared/skills/core/openrig-skills/SKILL.md +6 -0
  762. package/daemon/specs/agents/shared/skills/core/topology-mutation-and-seat-management/SKILL.md +24 -3
  763. package/daemon/specs/rigs/launch/kernel/agents/advisor/lead/agent.yaml +2 -8
  764. package/daemon/specs/rigs/launch/kernel/agents/operator/agent/agent.yaml +2 -8
  765. package/daemon/specs/rigs/launch/kernel/agents/queue/worker/agent.yaml +2 -8
  766. package/daemon/specs/rigs/preview/product-team/topology/rig/ORCHESTRATION-CRAFT.md +1 -1
  767. package/dist/atomic-text-write.d.ts +3 -0
  768. package/dist/atomic-text-write.d.ts.map +1 -0
  769. package/dist/atomic-text-write.js +79 -0
  770. package/dist/atomic-text-write.js.map +1 -0
  771. package/dist/build-info.js +3 -3
  772. package/dist/cli-error.d.ts.map +1 -1
  773. package/dist/cli-error.js +15 -2
  774. package/dist/cli-error.js.map +1 -1
  775. package/dist/client.d.ts +14 -1
  776. package/dist/client.d.ts.map +1 -1
  777. package/dist/client.js +29 -4
  778. package/dist/client.js.map +1 -1
  779. package/dist/commands/agent-image.d.ts.map +1 -1
  780. package/dist/commands/agent-image.js +2 -0
  781. package/dist/commands/agent-image.js.map +1 -1
  782. package/dist/commands/ask.d.ts.map +1 -1
  783. package/dist/commands/ask.js +10 -1
  784. package/dist/commands/ask.js.map +1 -1
  785. package/dist/commands/bootstrap.d.ts.map +1 -1
  786. package/dist/commands/bootstrap.js +4 -6
  787. package/dist/commands/bootstrap.js.map +1 -1
  788. package/dist/commands/broadcast.js +1 -1
  789. package/dist/commands/broadcast.js.map +1 -1
  790. package/dist/commands/chatroom.d.ts.map +1 -1
  791. package/dist/commands/chatroom.js +22 -1
  792. package/dist/commands/chatroom.js.map +1 -1
  793. package/dist/commands/compact-plan.d.ts.map +1 -1
  794. package/dist/commands/compact-plan.js +34 -5
  795. package/dist/commands/compact-plan.js.map +1 -1
  796. package/dist/commands/compact.d.ts.map +1 -1
  797. package/dist/commands/compact.js +24 -4
  798. package/dist/commands/compact.js.map +1 -1
  799. package/dist/commands/config.d.ts.map +1 -1
  800. package/dist/commands/config.js +2 -4
  801. package/dist/commands/config.js.map +1 -1
  802. package/dist/commands/context.d.ts.map +1 -1
  803. package/dist/commands/context.js +19 -14
  804. package/dist/commands/context.js.map +1 -1
  805. package/dist/commands/crash-cart.d.ts.map +1 -1
  806. package/dist/commands/crash-cart.js +2 -1
  807. package/dist/commands/crash-cart.js.map +1 -1
  808. package/dist/commands/daemon.d.ts +13 -1
  809. package/dist/commands/daemon.d.ts.map +1 -1
  810. package/dist/commands/daemon.js +35 -17
  811. package/dist/commands/daemon.js.map +1 -1
  812. package/dist/commands/destroy.d.ts.map +1 -1
  813. package/dist/commands/destroy.js +3 -2
  814. package/dist/commands/destroy.js.map +1 -1
  815. package/dist/commands/discover.d.ts.map +1 -1
  816. package/dist/commands/discover.js +2 -4
  817. package/dist/commands/discover.js.map +1 -1
  818. package/dist/commands/doctor.d.ts.map +1 -1
  819. package/dist/commands/doctor.js +3 -2
  820. package/dist/commands/doctor.js.map +1 -1
  821. package/dist/commands/env.d.ts.map +1 -1
  822. package/dist/commands/env.js +8 -0
  823. package/dist/commands/env.js.map +1 -1
  824. package/dist/commands/export.js +2 -2
  825. package/dist/commands/export.js.map +1 -1
  826. package/dist/commands/gateway.d.ts.map +1 -1
  827. package/dist/commands/gateway.js +23 -3
  828. package/dist/commands/gateway.js.map +1 -1
  829. package/dist/commands/health.d.ts.map +1 -1
  830. package/dist/commands/health.js +9 -0
  831. package/dist/commands/health.js.map +1 -1
  832. package/dist/commands/host.d.ts.map +1 -1
  833. package/dist/commands/host.js +13 -3
  834. package/dist/commands/host.js.map +1 -1
  835. package/dist/commands/plugin.d.ts.map +1 -1
  836. package/dist/commands/plugin.js +12 -2
  837. package/dist/commands/plugin.js.map +1 -1
  838. package/dist/commands/ps.d.ts +1 -0
  839. package/dist/commands/ps.d.ts.map +1 -1
  840. package/dist/commands/ps.js +97 -35
  841. package/dist/commands/ps.js.map +1 -1
  842. package/dist/commands/queue.d.ts +2 -0
  843. package/dist/commands/queue.d.ts.map +1 -1
  844. package/dist/commands/queue.js +129 -17
  845. package/dist/commands/queue.js.map +1 -1
  846. package/dist/commands/requirements.d.ts.map +1 -1
  847. package/dist/commands/requirements.js +6 -3
  848. package/dist/commands/requirements.js.map +1 -1
  849. package/dist/commands/rig-mode.d.ts.map +1 -1
  850. package/dist/commands/rig-mode.js +6 -1
  851. package/dist/commands/rig-mode.js.map +1 -1
  852. package/dist/commands/rig.d.ts.map +1 -1
  853. package/dist/commands/rig.js +20 -20
  854. package/dist/commands/rig.js.map +1 -1
  855. package/dist/commands/scope.d.ts.map +1 -1
  856. package/dist/commands/scope.js +22 -0
  857. package/dist/commands/scope.js.map +1 -1
  858. package/dist/commands/seat.d.ts.map +1 -1
  859. package/dist/commands/seat.js +39 -9
  860. package/dist/commands/seat.js.map +1 -1
  861. package/dist/commands/setup.d.ts.map +1 -1
  862. package/dist/commands/setup.js +6 -5
  863. package/dist/commands/setup.js.map +1 -1
  864. package/dist/commands/slack.d.ts.map +1 -1
  865. package/dist/commands/slack.js +8 -1
  866. package/dist/commands/slack.js.map +1 -1
  867. package/dist/commands/specs.d.ts.map +1 -1
  868. package/dist/commands/specs.js +2 -0
  869. package/dist/commands/specs.js.map +1 -1
  870. package/dist/commands/start.js +6 -5
  871. package/dist/commands/start.js.map +1 -1
  872. package/dist/commands/startup-proof.d.ts.map +1 -1
  873. package/dist/commands/startup-proof.js +2 -1
  874. package/dist/commands/startup-proof.js.map +1 -1
  875. package/dist/commands/status.d.ts.map +1 -1
  876. package/dist/commands/status.js +7 -0
  877. package/dist/commands/status.js.map +1 -1
  878. package/dist/commands/terminal.d.ts.map +1 -1
  879. package/dist/commands/terminal.js +4 -0
  880. package/dist/commands/terminal.js.map +1 -1
  881. package/dist/commands/transcript.js +5 -3
  882. package/dist/commands/transcript.js.map +1 -1
  883. package/dist/commands/up.d.ts +8 -0
  884. package/dist/commands/up.d.ts.map +1 -1
  885. package/dist/commands/up.js +78 -4
  886. package/dist/commands/up.js.map +1 -1
  887. package/dist/commands/walk.d.ts.map +1 -1
  888. package/dist/commands/walk.js +3 -0
  889. package/dist/commands/walk.js.map +1 -1
  890. package/dist/commands/workflow-follow.d.ts +2 -0
  891. package/dist/commands/workflow-follow.d.ts.map +1 -1
  892. package/dist/commands/workflow-follow.js +6 -4
  893. package/dist/commands/workflow-follow.js.map +1 -1
  894. package/dist/commands/workflow.d.ts.map +1 -1
  895. package/dist/commands/workflow.js +2 -4
  896. package/dist/commands/workflow.js.map +1 -1
  897. package/dist/commands/workspace.d.ts.map +1 -1
  898. package/dist/commands/workspace.js +2 -4
  899. package/dist/commands/workspace.js.map +1 -1
  900. package/dist/config-store.d.ts +2 -0
  901. package/dist/config-store.d.ts.map +1 -1
  902. package/dist/config-store.js +24 -6
  903. package/dist/config-store.js.map +1 -1
  904. package/dist/daemon-lifecycle.d.ts +9 -0
  905. package/dist/daemon-lifecycle.d.ts.map +1 -1
  906. package/dist/daemon-lifecycle.js +61 -19
  907. package/dist/daemon-lifecycle.js.map +1 -1
  908. package/dist/daemon-reachability.d.ts +18 -0
  909. package/dist/daemon-reachability.d.ts.map +1 -0
  910. package/dist/daemon-reachability.js +48 -0
  911. package/dist/daemon-reachability.js.map +1 -0
  912. package/dist/lib/file-transfer.d.ts +1 -1
  913. package/dist/lib/file-transfer.d.ts.map +1 -1
  914. package/dist/lib/file-transfer.js +17 -5
  915. package/dist/lib/file-transfer.js.map +1 -1
  916. package/dist/lib/scope/mission-composition.d.ts.map +1 -1
  917. package/dist/lib/scope/mission-composition.js +11 -0
  918. package/dist/lib/scope/mission-composition.js.map +1 -1
  919. package/dist/lib/scope/scaffold-placeholder.d.ts +4 -4
  920. package/dist/lib/scope/scaffold-placeholder.d.ts.map +1 -1
  921. package/dist/lib/scope/scaffold-placeholder.js +4 -4
  922. package/dist/lib/scope/scaffold-placeholder.js.map +1 -1
  923. package/dist/lib/scope/scope-fs.d.ts.map +1 -1
  924. package/dist/lib/scope/scope-fs.js +10 -16
  925. package/dist/lib/scope/scope-fs.js.map +1 -1
  926. package/dist/lib/scope-templates/slice-progress.md +11 -7
  927. package/dist/restore-packet/claude-transcript-parser.d.ts.map +1 -1
  928. package/dist/restore-packet/claude-transcript-parser.js +2 -0
  929. package/dist/restore-packet/claude-transcript-parser.js.map +1 -1
  930. package/dist/restore-packet/codex-jsonl-parser.d.ts.map +1 -1
  931. package/dist/restore-packet/codex-jsonl-parser.js +2 -0
  932. package/dist/restore-packet/codex-jsonl-parser.js.map +1 -1
  933. package/dist/restore-packet/runtime-detect.d.ts.map +1 -1
  934. package/dist/restore-packet/runtime-detect.js +2 -0
  935. package/dist/restore-packet/runtime-detect.js.map +1 -1
  936. package/package.json +4 -3
  937. package/tui/dist/attention/source-continuity.d.ts.map +1 -1
  938. package/tui/dist/attention/source-continuity.js +5 -3
  939. package/tui/dist/attention/source-continuity.js.map +1 -1
  940. package/tui/dist/daemon-client.d.ts +2 -1
  941. package/tui/dist/daemon-client.d.ts.map +1 -1
  942. package/tui/dist/daemon-client.js +13 -4
  943. package/tui/dist/daemon-client.js.map +1 -1
  944. package/tui/dist/execution/execution-model.d.ts.map +1 -1
  945. package/tui/dist/execution/execution-model.js +19 -7
  946. package/tui/dist/execution/execution-model.js.map +1 -1
  947. package/tui/dist/grammar.d.ts.map +1 -1
  948. package/tui/dist/grammar.js +3 -2
  949. package/tui/dist/grammar.js.map +1 -1
  950. package/tui/dist/health/health-model.d.ts.map +1 -1
  951. package/tui/dist/health/health-model.js +17 -5
  952. package/tui/dist/health/health-model.js.map +1 -1
  953. package/tui/dist/hydrate.d.ts.map +1 -1
  954. package/tui/dist/hydrate.js +1 -0
  955. package/tui/dist/hydrate.js.map +1 -1
  956. package/tui/dist/input.d.ts.map +1 -1
  957. package/tui/dist/input.js +5 -0
  958. package/tui/dist/input.js.map +1 -1
  959. package/tui/dist/live-events.d.ts +2 -2
  960. package/tui/dist/live-events.d.ts.map +1 -1
  961. package/tui/dist/live-events.js +65 -27
  962. package/tui/dist/live-events.js.map +1 -1
  963. package/tui/dist/local-reading.d.ts.map +1 -1
  964. package/tui/dist/local-reading.js +2 -0
  965. package/tui/dist/local-reading.js.map +1 -1
  966. package/tui/dist/main.js +16 -3
  967. package/tui/dist/main.js.map +1 -1
  968. package/tui/dist/page-read.d.ts.map +1 -1
  969. package/tui/dist/page-read.js +4 -1
  970. package/tui/dist/page-read.js.map +1 -1
  971. package/tui/dist/render.d.ts +2 -0
  972. package/tui/dist/render.d.ts.map +1 -1
  973. package/tui/dist/render.js +15 -4
  974. package/tui/dist/render.js.map +1 -1
  975. package/tui/dist/scopes/scopes-model.d.ts.map +1 -1
  976. package/tui/dist/scopes/scopes-model.js +36 -31
  977. package/tui/dist/scopes/scopes-model.js.map +1 -1
  978. package/tui/dist/socket-server.d.ts +6 -2
  979. package/tui/dist/socket-server.d.ts.map +1 -1
  980. package/tui/dist/socket-server.js +159 -14
  981. package/tui/dist/socket-server.js.map +1 -1
  982. package/tui/dist/types.d.ts +18 -0
  983. package/tui/dist/types.d.ts.map +1 -1
  984. package/ui/dist/assets/{index-N-SdPj-I.css → index-DNU3XZr_.css} +1 -1
  985. package/ui/dist/assets/{index-BVW54ItO.js → index-HHSvwF97.js} +75 -75
  986. package/ui/dist/index.html +2 -2
@@ -104,11 +104,25 @@ function classifyWriteError(err) {
104
104
  }
105
105
  return { ok: false, code: "unknown", message: err.message };
106
106
  }
107
- /** Shell-quote a string using single quotes (POSIX-safe). */
107
+ /** The most sessions one batched capture chains (#308). Not a byte bound: a chunk whose output overflows exec's buffer
108
+ * fails and is split in half. */
109
+ const CAPTURE_BATCH = 24;
108
110
  function shellQuote(s) {
109
111
  // Replace each ' with '"'"' (end quote, double-quote the apostrophe, resume quote)
110
112
  return "'" + s.replace(/'/g, "'\"'\"'") + "'";
111
113
  }
114
+ /**
115
+ * An exact tmux target for a session name. tmux resolves a bare name by prefix when no session has that exact name,
116
+ * so a read or pipe for a session that just ended would act on another (`dev-impl@my-rig` on `dev-impl@my-rig2`).
117
+ * Pane, window and session ids (`%3`, `@1`, `$2`) and `session:window.pane` targets pass through unchanged (tmux
118
+ * turns `:` in a session name into `_`, so a `:` always means an explicit target). A pane or window command gets
119
+ * `=name:` (as the batched capture uses); a session command gets `=name`.
120
+ */
121
+ function exactTarget(target, kind) {
122
+ if (/^[%@$]\d+$/.test(target) || target.includes(":"))
123
+ return target;
124
+ return kind === "session" ? `=${target}` : `=${target}:`;
125
+ }
112
126
  /** Elements safe to leave bare in a POSIX shell word list. */
113
127
  const SHELL_SAFE = /^[A-Za-z0-9_@%+=:,./-]+$/;
114
128
  /** Join argv for a POSIX shell — the legacy string form. Only used when
@@ -168,17 +182,17 @@ function parsePaneLine(line) {
168
182
  if (parts.length < 6)
169
183
  return null;
170
184
  const index = parseInt(parts[1], 10);
171
- const width = parseInt(parts[3], 10);
172
- const height = parseInt(parts[4], 10);
185
+ const width = parseInt(parts.at(-3), 10);
186
+ const height = parseInt(parts.at(-2), 10);
173
187
  if (isNaN(index) || isNaN(width) || isNaN(height))
174
188
  return null;
175
189
  return {
176
190
  id: parts[0],
177
191
  index,
178
- cwd: parts[2],
192
+ cwd: parts.slice(2, -3).join(TMUX_FIELD_SEPARATOR),
179
193
  width,
180
194
  height,
181
- active: parts[5] === "1",
195
+ active: parts.at(-1) === "1",
182
196
  };
183
197
  }
184
198
  function parseLines(output, parser) {
@@ -280,9 +294,20 @@ export class TmuxAdapter {
280
294
  const result = classifyWriteError(error);
281
295
  // Only termination consumes positive absence. Unknown probe failures
282
296
  // still refuse, and guard-on never reaches this observation.
283
- if (allowAbsent && !result.ok && result.code === "session_not_found"
284
- && !/permission denied|operation not permitted|EACCES|EPERM/i.test(result.message))
285
- return result;
297
+ if (allowAbsent && !result.ok
298
+ && !/permission denied|operation not permitted|EACCES|EPERM/i.test(result.message)) {
299
+ if (result.code === "session_not_found")
300
+ return result;
301
+ // list-panes reports a missing session as "can't find window" on
302
+ // native tmux. Do not broaden write-error classification: only
303
+ // termination may confirm the bound session's positive absence.
304
+ if (/can't find window/i.test(result.message)) {
305
+ const probe = await this.probeSession(bound.session);
306
+ guard.checkInput(identity);
307
+ if (probe.state === "absent")
308
+ return { ok: false, code: "session_not_found", message: result.message };
309
+ }
310
+ }
286
311
  throw error;
287
312
  }
288
313
  const pane = fresh ? created.pane : bound.pane;
@@ -369,8 +394,15 @@ export class TmuxAdapter {
369
394
  }
370
395
  }
371
396
  async listPanes(target) {
397
+ // Callers name a session (optionally with a window), or an immutable tmux
398
+ // id. Exact session matching prevents observing a prefix neighbor's pane.
399
+ // A bare leading '=' belongs to the literal session name. Only qualified
400
+ // targets already carry tmux's encoded exact-match syntax.
401
+ const namedTarget = target.includes(":") && target.startsWith("=") ? target : `=${target}`;
402
+ const exactTarget = /^[%$@]\d+$/.test(target) ? target
403
+ : namedTarget.includes(":") ? namedTarget : `${namedTarget}:`;
372
404
  try {
373
- const output = await this.run(["tmux", "list-panes", "-t", target, "-F", PANE_FORMAT], `tmux list-panes -t ${shellQuote(target)} -F "${PANE_FORMAT}"`);
405
+ const output = await this.run(["tmux", "list-panes", "-t", exactTarget, "-F", PANE_FORMAT], `tmux list-panes -t ${shellQuote(exactTarget)} -F "${PANE_FORMAT}"`);
374
406
  return parseLines(output, parsePaneLine);
375
407
  }
376
408
  catch (err) {
@@ -394,7 +426,8 @@ export class TmuxAdapter {
394
426
  // Use `tmux has-session` directly for reliable existence check — avoids
395
427
  // parsing format-string output from `list-sessions` which can fail when
396
428
  // tab delimiters are malformed across tmux versions.
397
- await this.run(["tmux", "has-session", "-t", name], `tmux has-session -t ${shellQuote(name)}`);
429
+ const target = `=${name}`; // canonical session name, never a prefix lookup
430
+ await this.run(["tmux", "has-session", "-t", target], `tmux has-session -t ${shellQuote(target)}`);
398
431
  return { state: "present" }; // exit 0 = session exists
399
432
  }
400
433
  catch (err) {
@@ -435,18 +468,25 @@ export class TmuxAdapter {
435
468
  /** The committed binding now owns identity; this is not filesystem cleanup. */
436
469
  finishLaunchBinding(session) { this.freshManaged.delete(session); }
437
470
  async createSessionUnchecked(name, cwd, env) {
471
+ // These are the daemon's resolved capture settings, not seat overrides.
472
+ // An empty per-session value prevents the tmux server's inherited values
473
+ // from pinning an old policy over config.json inside a newly launched seat.
474
+ // Explicit seat settings remain authoritative.
475
+ const seatEnv = {
476
+ OPENRIG_TRANSCRIPTS_LINES: "",
477
+ OPENRIG_TRANSCRIPTS_POLL_INTERVAL_SECONDS: "",
478
+ ...env,
479
+ };
438
480
  const argv = ["tmux", "new-session", "-d", "-s", name];
439
481
  if (cwd != null)
440
482
  argv.push("-c", cwd);
441
- if (env)
442
- for (const [k, v] of Object.entries(env))
443
- argv.push("-e", `${k}=${v}`);
483
+ for (const [k, v] of Object.entries(seatEnv))
484
+ argv.push("-e", `${k}=${v}`);
444
485
  const legacyParts = ["tmux", "new-session", "-d", "-s", shellQuote(name)];
445
486
  if (cwd != null)
446
487
  legacyParts.push("-c", shellQuote(cwd));
447
- if (env)
448
- for (const [k, v] of Object.entries(env))
449
- legacyParts.push("-e", shellQuote(`${k}=${v}`));
488
+ for (const [k, v] of Object.entries(seatEnv))
489
+ legacyParts.push("-e", shellQuote(`${k}=${v}`));
450
490
  try {
451
491
  await this.run(argv, legacyParts.join(" "));
452
492
  return { ok: true };
@@ -461,24 +501,26 @@ export class TmuxAdapter {
461
501
  * A file keeps payload bytes out of shell/tmux argv and its size limits.
462
502
  * `-p` bracket the paste when the receiving application enables that mode.
463
503
  * `-r` preserve raw LF. tmux's default paste-buffer replaces every LF with
464
- * CR, and CR (= `C-m` = Enter) is SUBMIT in the Claude/Codex TUIs - a
504
+ * CR, and CR is SUBMIT in the Claude/Codex TUIs - a
465
505
  * default paste of a multi-line pack would submit on every newline.
466
506
  * `-d` drop the buffer after a successful paste.
467
- * The single trailing submit stays the caller's separate `sendKeys(["C-m"])`.
507
+ * The single trailing submit stays the caller's separate `sendKeys(["Enter"])`.
468
508
  * Cleanup unlinks the temp file in `finally`; if the buffer was loaded but the
469
509
  * paste failed (e.g. missing target), an explicit `delete-buffer` runs so no
470
510
  * buffer leaks. Unique temp + buffer names per call keep parallel `rig up`
471
511
  * seats from colliding.
472
512
  */
473
- async sendText(target, text) {
474
- return this.guardedInput(target, (pane, beforeWrite) => this.sendTextUnchecked(pane, text, beforeWrite));
513
+ async sendText(target, text, beforeInput) {
514
+ return this.guardedInput(target, (pane, beforeWrite) => this.sendTextUnchecked(pane, text, () => { beforeWrite(); beforeInput?.(); }));
475
515
  }
476
516
  async sendTextUnchecked(target, text, beforeWrite) {
477
517
  const path = this.fileOps.tmpName();
478
518
  const buffer = this.fileOps.bufferName();
479
519
  let bufferLoaded = false;
520
+ let created = false;
480
521
  try {
481
- await this.fileOps.writeFile(path, text);
522
+ await this.fileOps.writeFile(path, text, { mode: 0o600, flag: "wx" });
523
+ created = true;
482
524
  await this.run(["tmux", "load-buffer", "-b", buffer, path], `tmux load-buffer -b ${shellQuote(buffer)} ${shellQuote(path)}`);
483
525
  bufferLoaded = true;
484
526
  beforeWrite();
@@ -497,10 +539,12 @@ export class TmuxAdapter {
497
539
  return classifyWriteError(err);
498
540
  }
499
541
  finally {
500
- try {
501
- await this.fileOps.unlink(path);
542
+ if (created) {
543
+ try {
544
+ await this.fileOps.unlink(path);
545
+ }
546
+ catch { /* best-effort cleanup */ }
502
547
  }
503
- catch { /* best-effort cleanup */ }
504
548
  }
505
549
  }
506
550
  /**
@@ -511,23 +555,50 @@ export class TmuxAdapter {
511
555
  * The shell removes its private script when consumed (not when pasted).
512
556
  * A shell that never consumes the invocation leaves the file for diagnosis.
513
557
  */
514
- async sendShellCommand(target, command, beforeInput) {
558
+ async sendShellCommand(target, command, beforeInput, options = {}) {
515
559
  // Keep the managed selector for nested paste/Enter checks. A resolved pane
516
560
  // ID can also occur in detached bindings after a tmux restart; resolving it
517
561
  // again would lose the unambiguous session/node and its existing lease.
518
562
  // Each nested write still validates the lease and targets its observed pane.
519
- return this.guardedInput(target, () => this.sendShellCommandUnchecked(target, command, beforeInput));
563
+ return this.guardedInput(target, () => this.sendShellCommandUnchecked(target, command, beforeInput, options));
520
564
  }
521
- async sendShellCommandUnchecked(target, command, beforeInput) {
522
- const path = this.fileOps.tmpName();
523
- const invocation = `/bin/sh ${shellQuote(path)}`;
565
+ async sendShellCommandUnchecked(target, command, beforeInput, options) {
566
+ const commandBytes = Buffer.byteLength(command, "utf8");
567
+ // POSIX shells retain subshell isolation; unknown/unreadable panes use sh.
568
+ const paneShell = options.sourceInPane ? (await this.getPaneCommand(target) ?? "").replace(/^-/, "") : "";
569
+ const sourceInPane = ["bash", "zsh", "sh", "dash", "ksh"].includes(paneShell);
570
+ let path = options.stageIfLong && commandBytes <= 512 ? undefined : this.fileOps.tmpName();
571
+ let invocation = path ? sourceInPane ? `( . ${shellQuote(path)} )` : `/bin/sh ${shellQuote(path)}` : command;
572
+ if (path && paneShell === "fish") {
573
+ const quotedPath = shellQuote(path);
574
+ invocation = `/bin/sh ${quotedPath}`;
575
+ // Fish single quotes reinterpret POSIX backslashes. Keep those payloads
576
+ // (and paths) on sh, preserving existing executable launches byte-for-byte.
577
+ if (!command.includes("\\") && !path.includes("\\")) {
578
+ // Probe fixed syntax in the pane before sourcing, not the launch's exit
579
+ // status: even failed cleanup must not turn a later exit into a retry.
580
+ const sourced = `if eval 'OPENRIG_FISH_ASSIGNMENT_PROBE=1 /bin/sh -c :'; source ${quotedPath}; else; /bin/sh ${quotedPath}; end`;
581
+ // Repeating the path must not add a refusal for previously valid TMPDIRs.
582
+ if (Buffer.byteLength(sourced, "utf8") <= 512)
583
+ invocation = sourced;
584
+ }
585
+ }
524
586
  if (Buffer.byteLength(invocation, "utf8") > 512) {
525
- return { ok: false, code: "launch_path_too_long", message: "Temporary launch-script path exceeds the safe terminal input bound" };
587
+ // Pi commands below the canonical tty limit still fit when staging cannot.
588
+ if (options.stageIfLong && commandBytes < 1024) {
589
+ path = undefined;
590
+ invocation = command;
591
+ }
592
+ else {
593
+ return { ok: false, code: "launch_path_too_long", message: "Temporary launch-script path exceeds the safe terminal input bound" };
594
+ }
526
595
  }
527
596
  let created = false;
528
597
  try {
529
- await this.fileOps.writeFile(path, `/bin/rm -f -- ${shellQuote(path)}\n${command}\n`, { mode: 0o600, flag: "wx" });
530
- created = true;
598
+ if (path) {
599
+ await this.fileOps.writeFile(path, `/bin/rm -f -- ${shellQuote(path)}\n${options.execInScript ? "exec " : ""}${command}\n`, { mode: 0o600, flag: "wx" });
600
+ created = true;
601
+ }
531
602
  const text = beforeInput ? await this.guardedInput(target, (pane, check) => this.sendTextUnchecked(pane, invocation, () => { check(); beforeInput(); }))
532
603
  : await this.sendText(target, invocation);
533
604
  if (!text.ok)
@@ -546,7 +617,7 @@ export class TmuxAdapter {
546
617
  return classifyWriteError(err);
547
618
  }
548
619
  finally {
549
- if (created) {
620
+ if (created && path) {
550
621
  try {
551
622
  await this.fileOps.unlink(path);
552
623
  }
@@ -554,8 +625,8 @@ export class TmuxAdapter {
554
625
  }
555
626
  }
556
627
  }
557
- async sendKeys(target, keys) {
558
- return this.guardedInput(target, pane => this.sendKeysUnchecked(pane, keys));
628
+ async sendKeys(target, keys, beforeInput) {
629
+ return this.guardedInput(target, (pane, beforeWrite) => { beforeWrite(); beforeInput?.(); return this.sendKeysUnchecked(pane, keys); });
559
630
  }
560
631
  async sendKeysUnchecked(target, keys) {
561
632
  try {
@@ -567,8 +638,9 @@ export class TmuxAdapter {
567
638
  }
568
639
  }
569
640
  async setWindowOption(target, option, value) {
641
+ const window = exactTarget(target, "window");
570
642
  try {
571
- await this.run(["tmux", "set-option", "-w", "-t", target, option, value], `tmux set-option -w -t ${shellQuote(target)} ${shellQuote(option)} ${shellQuote(value)}`);
643
+ await this.run(["tmux", "set-option", "-w", "-t", window, option, value], `tmux set-option -w -t ${shellQuote(window)} ${shellQuote(option)} ${shellQuote(value)}`);
572
644
  return { ok: true };
573
645
  }
574
646
  catch (err) {
@@ -583,7 +655,7 @@ export class TmuxAdapter {
583
655
  return { ok: false, code: "validation_error", message: `resizeWindow: rows must be a positive integer, got ${rows}` };
584
656
  }
585
657
  try {
586
- await this.run(["tmux", "resize-window", "-t", target, "-x", String(cols), "-y", String(rows)]);
658
+ await this.run(["tmux", "resize-window", "-t", exactTarget(target, "window"), "-x", String(cols), "-y", String(rows)]);
587
659
  return { ok: true };
588
660
  }
589
661
  catch (err) {
@@ -614,8 +686,20 @@ export class TmuxAdapter {
614
686
  return this.killSessionUnchecked(name);
615
687
  }
616
688
  async killSessionUnchecked(name) {
689
+ // The guarded path passes the immutable `$N` id, which stays as it is; a bare name is made exact.
690
+ const session = exactTarget(name, "session");
691
+ // Detach first so `detach-on-destroy off` cannot switch views onto another session.
692
+ try {
693
+ await this.run(["tmux", "detach-client", "-s", session], `tmux detach-client -s ${shellQuote(session)}`);
694
+ }
695
+ catch (err) {
696
+ // tmux 3.7 says "no current client" when nothing is attached (and for a missing session, which the kill classifies).
697
+ const message = err instanceof Error ? err.message : String(err);
698
+ if (!message.toLowerCase().includes("no current client"))
699
+ return classifyWriteError(err);
700
+ }
617
701
  try {
618
- await this.run(["tmux", "kill-session", "-t", name], `tmux kill-session -t ${shellQuote(name)}`);
702
+ await this.run(["tmux", "kill-session", "-t", session], `tmux kill-session -t ${shellQuote(session)}`);
619
703
  const pane = this.freshProbes.get(name);
620
704
  this.freshProbes.delete(name);
621
705
  if (pane)
@@ -648,7 +732,8 @@ export class TmuxAdapter {
648
732
  return this.guardedInput(paneTarget, pane => this.respawnPaneUnchecked(pane, command, opts));
649
733
  }
650
734
  async respawnPaneUnchecked(paneTarget, command, opts) {
651
- const argv = ["tmux", "respawn-pane", "-t", paneTarget];
735
+ const exact = exactTarget(paneTarget, "pane");
736
+ const argv = ["tmux", "respawn-pane", "-t", exact];
652
737
  if (opts?.cwd != null)
653
738
  argv.push("-c", opts.cwd);
654
739
  if (opts?.env)
@@ -657,7 +742,7 @@ export class TmuxAdapter {
657
742
  // The respawn command is ONE argv unit: tmux runs it via the shell.
658
743
  if (command != null && command.length > 0)
659
744
  argv.push(command);
660
- const legacyRespawn = ["tmux", "respawn-pane", "-t", shellQuote(paneTarget)];
745
+ const legacyRespawn = ["tmux", "respawn-pane", "-t", shellQuote(exact)];
661
746
  if (opts?.cwd != null)
662
747
  legacyRespawn.push("-c", shellQuote(opts.cwd));
663
748
  if (opts?.env)
@@ -678,8 +763,9 @@ export class TmuxAdapter {
678
763
  * Set to `on` BEFORE the retiree is signalled to exit (else the pane is destroyed on exit and there
679
764
  * is nothing to respawn into). */
680
765
  async setRemainOnExit(paneTarget, on) {
766
+ const exact = exactTarget(paneTarget, "pane");
681
767
  try {
682
- await this.run(["tmux", "set-option", "-p", "-t", paneTarget, "remain-on-exit", on ? "on" : "off"], `tmux set-option -p -t ${shellQuote(paneTarget)} remain-on-exit ${on ? "on" : "off"}`);
768
+ await this.run(["tmux", "set-option", "-p", "-t", exact, "remain-on-exit", on ? "on" : "off"], `tmux set-option -p -t ${shellQuote(exact)} remain-on-exit ${on ? "on" : "off"}`);
683
769
  return { ok: true };
684
770
  }
685
771
  catch (err) {
@@ -689,8 +775,9 @@ export class TmuxAdapter {
689
775
  /** Seat-handover cutover: is the pane's process dead (the retiree exited; the pane held by
690
776
  * remain-on-exit)? A known-missing pane also proves physical cutover; unknown probe errors stay false. */
691
777
  async isPaneDead(paneId) {
778
+ const exact = exactTarget(paneId, "pane");
692
779
  try {
693
- const output = await this.run(["tmux", "display-message", "-p", "-t", paneId, "#{pane_dead}"], `tmux display-message -p -t ${shellQuote(paneId)} "#{pane_dead}"`);
780
+ const output = await this.run(["tmux", "display-message", "-p", "-t", exact, "#{pane_dead}"], `tmux display-message -p -t ${shellQuote(exact)} "#{pane_dead}"`);
694
781
  return output.trim() === "1";
695
782
  }
696
783
  catch (error) {
@@ -721,8 +808,9 @@ export class TmuxAdapter {
721
808
  }
722
809
  /** Get the PID of the foreground process in a pane. Returns null if unavailable. */
723
810
  async getPanePid(paneId) {
811
+ const target = exactTarget(paneId, "pane");
724
812
  try {
725
- const output = await this.run(["tmux", "display-message", "-p", "-t", paneId, "#{pane_pid}"], `tmux display-message -p -t ${shellQuote(paneId)} "#{pane_pid}"`);
813
+ const output = await this.run(["tmux", "display-message", "-p", "-t", target, "#{pane_pid}"], `tmux display-message -p -t ${shellQuote(target)} "#{pane_pid}"`);
726
814
  const trimmed = output.trim();
727
815
  const parsed = parseInt(trimmed, 10);
728
816
  return Number.isFinite(parsed) && parsed > 0 ? parsed : null;
@@ -746,8 +834,9 @@ export class TmuxAdapter {
746
834
  }
747
835
  /** Get the current foreground command in a pane. Returns null if unavailable. */
748
836
  async getPaneCommand(paneId) {
837
+ const target = exactTarget(paneId, "pane");
749
838
  try {
750
- const output = await this.run(["tmux", "display-message", "-p", "-t", paneId, "#{pane_current_command}"], `tmux display-message -p -t ${shellQuote(paneId)} "#{pane_current_command}"`);
839
+ const output = await this.run(["tmux", "display-message", "-p", "-t", target, "#{pane_current_command}"], `tmux display-message -p -t ${shellQuote(target)} "#{pane_current_command}"`);
751
840
  const trimmed = output.trim();
752
841
  return trimmed || null;
753
842
  }
@@ -755,14 +844,33 @@ export class TmuxAdapter {
755
844
  return null;
756
845
  }
757
846
  }
847
+ /** A launch metadata read. Callers must never put credential values in terminal input. */
848
+ async getSessionEnv(session, key) {
849
+ if (!/^[A-Z_][A-Z0-9_]*$/.test(key))
850
+ throw new Error("Invalid session environment key.");
851
+ try {
852
+ const output = await this.run(["tmux", "show-environment", "-t", session, key], `tmux show-environment -t ${shellQuote(session)} ${shellQuote(key)}`);
853
+ if (output.trim() === `-${key}`)
854
+ return undefined;
855
+ if (!output.startsWith(`${key}=`))
856
+ throw new Error("Unexpected session environment response.");
857
+ return output.slice(key.length + 1).replace(/\r?\n$/, "");
858
+ }
859
+ catch (error) {
860
+ if (error instanceof Error && error.message.includes(`unknown variable: ${key}`))
861
+ return undefined;
862
+ throw new Error("Cannot read the session's launch environment.");
863
+ }
864
+ }
758
865
  /** OPR.0.4.3.28 Part C — usable-presence check for a session-env variable.
759
866
  * Returns whether the var has a nonblank value, NEVER that value, and null
760
867
  * when the session environment cannot be inspected. Listing the environment
761
868
  * distinguishes a genuinely absent var from `tmux show-environment <var>`'s
762
869
  * nonzero lookup exit. */
763
870
  async hasSessionEnv(sessionName, varName) {
871
+ const target = exactTarget(sessionName, "session");
764
872
  try {
765
- const output = await this.run(["tmux", "show-environment", "-t", sessionName], `tmux show-environment -t ${shellQuote(sessionName)}`);
873
+ const output = await this.run(["tmux", "show-environment", "-t", target], `tmux show-environment -t ${shellQuote(target)}`);
766
874
  const prefix = `${varName}=`;
767
875
  return output.split(/\r?\n/).some((line) => line.startsWith(prefix) && line.slice(prefix.length).trim().length > 0);
768
876
  }
@@ -779,8 +887,9 @@ export class TmuxAdapter {
779
887
  // shell, so its inner quoting stays POSIX here (psmux documents the same
780
888
  // `cat >` server-side form for its own path).
781
889
  const sink = "cat >> " + shellQuote(outputPath);
890
+ const target = exactTarget(sessionName, "pane");
782
891
  try {
783
- await this.run(["tmux", "pipe-pane", "-t", sessionName, sink], `tmux pipe-pane -t ${shellQuote(sessionName)} ${shellQuote(sink)}`);
892
+ await this.run(["tmux", "pipe-pane", "-t", target, sink], `tmux pipe-pane -t ${shellQuote(target)} ${shellQuote(sink)}`);
784
893
  return { ok: true };
785
894
  }
786
895
  catch (err) {
@@ -789,8 +898,9 @@ export class TmuxAdapter {
789
898
  }
790
899
  /** Stop pipe-pane on a session. */
791
900
  async stopPipePane(sessionName) {
901
+ const target = exactTarget(sessionName, "pane");
792
902
  try {
793
- await this.run(["tmux", "pipe-pane", "-t", sessionName], `tmux pipe-pane -t ${shellQuote(sessionName)}`);
903
+ await this.run(["tmux", "pipe-pane", "-t", target], `tmux pipe-pane -t ${shellQuote(target)}`);
794
904
  return { ok: true };
795
905
  }
796
906
  catch (err) {
@@ -798,9 +908,93 @@ export class TmuxAdapter {
798
908
  }
799
909
  }
800
910
  /** Capture pane content (last N lines). Returns null if unavailable. */
911
+ /**
912
+ * Capture many sessions' panes with a few tmux calls instead of one per session (#308). One `list-sessions` says
913
+ * which targets exist: a missing one maps to null (as a failed per-target capture) without a fork. The live ones
914
+ * are captured in chunks of CAPTURE_BATCH chained commands (a `display-message` marker, then `capture-pane`), each
915
+ * pane's output delimited by a marker unique to the call, so the text equals what `capturePaneContent` returns.
916
+ * Targets are exact (`=<name>:`): no prefix match, and a name with a "." still resolves. tmux stops a chain at its
917
+ * first failing command, so a chunk that fails is split in half and retried (an oversized output, or a session gone
918
+ * since the listing); a single session that still fails is left OUT of the map, and the caller reads it per target.
919
+ * Null when tmux can't be listed at all. Each entry carries the time its own chunk was read (`capturedAt`), so a
920
+ * slow later chunk can't make an earlier capture look fresh.
921
+ */
922
+ async capturePanesContent(targets, lines = 20, now = () => new Date()) {
923
+ let live;
924
+ try {
925
+ const listing = await this.run(["tmux", "list-sessions", "-F", "#{session_name}"], "tmux list-sessions -F '#{session_name}'");
926
+ live = new Set(listing.split("\n").map((s) => s.trim()).filter(Boolean));
927
+ }
928
+ catch {
929
+ return null;
930
+ }
931
+ const out = new Map();
932
+ const listedAt = now();
933
+ const present = [];
934
+ for (const t of new Set(targets)) {
935
+ if (live.has(t))
936
+ present.push(t);
937
+ else
938
+ out.set(t, { text: null, capturedAt: listedAt });
939
+ }
940
+ // A chunk that fails is split in half and retried, down to one session: its output overflowed exec's buffer (wide,
941
+ // colour-dense panes: each capture is the visible pane plus the requested history) or a session vanished since
942
+ // the listing. A single session that still fails is left out: the caller reads it per target.
943
+ /** Capture one chunk with a single chained tmux call into `out`; on failure, split it in half and retry each half. */
944
+ const captureChunk = async (chunk) => {
945
+ const nonce = randomUUID().replace(/-/g, "");
946
+ const mark = (k) => `__openrig_capture_${nonce}_${k}__`;
947
+ const argv = ["tmux", ...chunk.flatMap((t, k) => [
948
+ ...(k > 0 ? [";"] : []),
949
+ "display-message", "-p", "-t", `=${t}:`, mark(k), ";", "capture-pane", "-p", "-t", `=${t}:`, "-S", `-${lines}`,
950
+ ])];
951
+ const legacy = "tmux " + chunk.map((t, k) => `display-message -p -t ${shellQuote(`=${t}:`)} ${shellQuote(mark(k))} \\; capture-pane -p -t ${shellQuote(`=${t}:`)} -S -${lines}`).join(" \\; ");
952
+ let output;
953
+ let capturedAt;
954
+ try {
955
+ output = await this.run(argv, legacy);
956
+ capturedAt = now(); // when THIS chunk's panes were read, not when the sweep ends
957
+ }
958
+ catch {
959
+ if (chunk.length > 1) {
960
+ const half = Math.ceil(chunk.length / 2);
961
+ await captureChunk(chunk.slice(0, half));
962
+ await captureChunk(chunk.slice(half));
963
+ }
964
+ return; // a single session that failed: read per target by the caller
965
+ }
966
+ const segments = chunk.map(() => null);
967
+ let cur = -1;
968
+ const outLines = output.split("\n");
969
+ if (outLines.length && outLines[outLines.length - 1] === "")
970
+ outLines.pop(); // the final newline, not a line
971
+ for (const line of outLines) {
972
+ const m = line.startsWith(`__openrig_capture_${nonce}_`) ? /_(\d+)__$/.exec(line) : null;
973
+ if (m && line === mark(Number(m[1]))) {
974
+ cur = Number(m[1]);
975
+ segments[cur] = [];
976
+ }
977
+ else if (cur >= 0) {
978
+ segments[cur].push(line);
979
+ }
980
+ }
981
+ chunk.forEach((t, k) => {
982
+ const seg = segments[k];
983
+ if (seg == null)
984
+ return; // its marker never printed: read per target
985
+ // capture-pane prints its lines newline-terminated, as the per-target read returns them
986
+ const text = seg.length ? seg.join("\n") + "\n" : "";
987
+ out.set(t, { text: text === "" ? null : text, capturedAt });
988
+ });
989
+ };
990
+ for (let i = 0; i < present.length; i += CAPTURE_BATCH)
991
+ await captureChunk(present.slice(i, i + CAPTURE_BATCH));
992
+ return out;
993
+ }
801
994
  async capturePaneContent(paneId, lines = 20) {
995
+ const target = exactTarget(paneId, "pane");
802
996
  try {
803
- const output = await this.run(["tmux", "capture-pane", "-p", "-t", paneId, "-S", `-${lines}`], `tmux capture-pane -p -t ${shellQuote(paneId)} -S -${lines}`);
997
+ const output = await this.run(["tmux", "capture-pane", "-p", "-t", target, "-S", `-${lines}`], `tmux capture-pane -p -t ${shellQuote(target)} -S -${lines}`);
804
998
  return output || null;
805
999
  }
806
1000
  catch {
@@ -814,8 +1008,9 @@ export class TmuxAdapter {
814
1008
  * the absolute-paint seed exists to eliminate.
815
1009
  */
816
1010
  async capturePaneScreen(paneId) {
1011
+ const target = exactTarget(paneId, "pane");
817
1012
  try {
818
- const output = await this.run(["tmux", "capture-pane", "-p", "-t", paneId], `tmux capture-pane -p -t ${shellQuote(paneId)}`);
1013
+ const output = await this.run(["tmux", "capture-pane", "-p", "-t", target], `tmux capture-pane -p -t ${shellQuote(target)}`);
819
1014
  return output || null;
820
1015
  }
821
1016
  catch {
@@ -829,8 +1024,9 @@ export class TmuxAdapter {
829
1024
  * produces a garbage seed.
830
1025
  */
831
1026
  async getPaneCursorPosition(paneId) {
1027
+ const exact = exactTarget(paneId, "pane");
832
1028
  try {
833
- const output = await this.run(["tmux", "display-message", "-p", "-t", paneId, CURSOR_FORMAT], `tmux display-message -p -t ${shellQuote(paneId)} "${CURSOR_FORMAT}"`);
1029
+ const output = await this.run(["tmux", "display-message", "-p", "-t", exact, CURSOR_FORMAT], `tmux display-message -p -t ${shellQuote(exact)} "${CURSOR_FORMAT}"`);
834
1030
  const [xRaw, yRaw, widthRaw, heightRaw] = output.trim().split(TMUX_FIELD_SEPARATOR);
835
1031
  const x = Number.parseInt(xRaw ?? "", 10);
836
1032
  const y = Number.parseInt(yRaw ?? "", 10);
@@ -855,8 +1051,10 @@ export class TmuxAdapter {
855
1051
  * scopes are never crossed (guard b2).
856
1052
  */
857
1053
  async setSessionOption(sessionName, key, value) {
1054
+ // set/show-option take a target-pane even when the option is session-scoped.
1055
+ const exact = exactTarget(sessionName, "pane");
858
1056
  try {
859
- await this.run(["tmux", "set-option", "-t", sessionName, key, value], `tmux set-option -t ${shellQuote(sessionName)} ${shellQuote(key)} ${shellQuote(value)}`);
1057
+ await this.run(["tmux", "set-option", "-t", exact, key, value], `tmux set-option -t ${shellQuote(exact)} ${shellQuote(key)} ${shellQuote(value)}`);
860
1058
  return { ok: true };
861
1059
  }
862
1060
  catch (err) {
@@ -896,8 +1094,10 @@ export class TmuxAdapter {
896
1094
  }
897
1095
  /** Get a session-scoped user option value. Returns null if not set or error. */
898
1096
  async getSessionOption(sessionName, key) {
1097
+ // set/show-option take a target-pane even when the option is session-scoped.
1098
+ const exact = exactTarget(sessionName, "pane");
899
1099
  try {
900
- const output = await this.run(["tmux", "show-option", "-v", "-t", sessionName, key], `tmux show-option -v -t ${shellQuote(sessionName)} ${shellQuote(key)}`);
1100
+ const output = await this.run(["tmux", "show-option", "-v", "-t", exact, key], `tmux show-option -v -t ${shellQuote(exact)} ${shellQuote(key)}`);
901
1101
  return output.trim() || null;
902
1102
  }
903
1103
  catch {
@@ -925,9 +1125,59 @@ export class TmuxAdapter {
925
1125
  * - `null` when the target is missing OR the value is unparseable
926
1126
  * (consumers treat null as "no signal", distinct from "idle").
927
1127
  */
1128
+ /** Every session's current-window `#{window_activity}` in ONE tmux call, keyed by session name: the same value
1129
+ * `readPaneLastActivity(<session name>)` reads (display-message -t <session> resolves to the session's current
1130
+ * window). Only well-formed timestamps are included, so a missing key means "read it the per-target way". Null when
1131
+ * tmux can't be read at all. The session name is the LAST field, so a separator inside it stays intact. */
1132
+ async readAllSessionWindowActivity() {
1133
+ try {
1134
+ const format = ["#{window_active}", "#{window_activity}", "#{session_name}"].join(TMUX_FIELD_SEPARATOR);
1135
+ const output = await this.run(["tmux", "list-windows", "-a", "-F", format], `tmux list-windows -a -F '${format}'`);
1136
+ const out = new Map();
1137
+ for (const line of output.split("\n")) {
1138
+ const first = line.indexOf(TMUX_FIELD_SEPARATOR), second = line.indexOf(TMUX_FIELD_SEPARATOR, first + 1);
1139
+ if (first < 0 || second < 0)
1140
+ continue;
1141
+ const active = line.slice(0, first), activity = line.slice(first + 1, second).trim(), session = line.slice(second + 1);
1142
+ if (!session || active !== "1" || !/^\d+$/.test(activity))
1143
+ continue;
1144
+ const n = Number(activity);
1145
+ if (Number.isFinite(n) && n > 0)
1146
+ out.set(session, n);
1147
+ }
1148
+ return out;
1149
+ }
1150
+ catch {
1151
+ return null;
1152
+ }
1153
+ }
1154
+ /** Every pane's pid and current command in ONE tmux call, keyed by pane id (%N): the values `getPanePid` /
1155
+ * `getPaneCommand` read per pane. Panes without a valid pid are left out (read those per pane). Null when tmux can't
1156
+ * be read at all. The command is the LAST field, so a separator inside it stays intact. */
1157
+ async readAllPaneProcesses() {
1158
+ try {
1159
+ const format = ["#{pane_id}", "#{pane_pid}", "#{pane_current_command}"].join(TMUX_FIELD_SEPARATOR);
1160
+ const output = await this.run(["tmux", "list-panes", "-a", "-F", format], `tmux list-panes -a -F '${format}'`);
1161
+ const out = new Map();
1162
+ for (const line of output.split("\n")) {
1163
+ const first = line.indexOf(TMUX_FIELD_SEPARATOR), second = line.indexOf(TMUX_FIELD_SEPARATOR, first + 1);
1164
+ if (first <= 0 || second < 0)
1165
+ continue;
1166
+ const id = line.slice(0, first), pid = parseInt(line.slice(first + 1, second).trim(), 10);
1167
+ if (!Number.isFinite(pid) || pid <= 0)
1168
+ continue;
1169
+ out.set(id, { pid, command: line.slice(second + 1).trim() || null });
1170
+ }
1171
+ return out;
1172
+ }
1173
+ catch {
1174
+ return null;
1175
+ }
1176
+ }
928
1177
  async readPaneLastActivity(paneId) {
1178
+ const exact = exactTarget(paneId, "pane");
929
1179
  try {
930
- const output = await this.run(["tmux", "display-message", "-p", "-t", paneId, "#{window_activity}"], `tmux display-message -p -t ${shellQuote(paneId)} '#{window_activity}'`);
1180
+ const output = await this.run(["tmux", "display-message", "-p", "-t", exact, "#{window_activity}"], `tmux display-message -p -t ${shellQuote(exact)} '#{window_activity}'`);
931
1181
  const trimmed = output.trim();
932
1182
  if (!/^\d+$/.test(trimmed))
933
1183
  return null;
@@ -966,8 +1216,9 @@ export class TmuxAdapter {
966
1216
  * kills, or rebinds a session and never touches OpenRig routing/identity.
967
1217
  */
968
1218
  async switchClient(client, target) {
1219
+ const exact = exactTarget(target, "session");
969
1220
  try {
970
- await this.run(["tmux", "switch-client", "-c", client, "-t", target], `tmux switch-client -c ${shellQuote(client)} -t ${shellQuote(target)}`);
1221
+ await this.run(["tmux", "switch-client", "-c", client, "-t", exact], `tmux switch-client -c ${shellQuote(client)} -t ${shellQuote(exact)}`);
971
1222
  return { ok: true };
972
1223
  }
973
1224
  catch (err) {