@openrig/cli 0.4.3 → 0.4.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (634) hide show
  1. package/daemon/assets/guidance/openrig-start.md +6 -0
  2. package/daemon/assets/plugins/openrig-core/skills/mission-slice-sop/SKILL.md +47 -21
  3. package/daemon/assets/plugins/openrig-core/skills/openrig-cmux/SKILL.md +86 -0
  4. package/daemon/assets/plugins/openrig-core/skills/openrig-herdr/SKILL.md +158 -0
  5. package/daemon/assets/plugins/openrig-core/skills/openrig-user/SKILL.md +742 -94
  6. package/daemon/dist/adapters/codex-runtime-adapter.d.ts.map +1 -1
  7. package/daemon/dist/adapters/codex-runtime-adapter.js +12 -8
  8. package/daemon/dist/adapters/codex-runtime-adapter.js.map +1 -1
  9. package/daemon/dist/adapters/pi-resume.d.ts +32 -0
  10. package/daemon/dist/adapters/pi-resume.d.ts.map +1 -0
  11. package/daemon/dist/adapters/pi-resume.js +125 -0
  12. package/daemon/dist/adapters/pi-resume.js.map +1 -0
  13. package/daemon/dist/adapters/pi-runner-protocol.d.ts +88 -0
  14. package/daemon/dist/adapters/pi-runner-protocol.d.ts.map +1 -0
  15. package/daemon/dist/adapters/pi-runner-protocol.js +153 -0
  16. package/daemon/dist/adapters/pi-runner-protocol.js.map +1 -0
  17. package/daemon/dist/adapters/pi-runner.d.ts +99 -0
  18. package/daemon/dist/adapters/pi-runner.d.ts.map +1 -0
  19. package/daemon/dist/adapters/pi-runner.js +519 -0
  20. package/daemon/dist/adapters/pi-runner.js.map +1 -0
  21. package/daemon/dist/adapters/pi-runtime-adapter.d.ts +61 -0
  22. package/daemon/dist/adapters/pi-runtime-adapter.d.ts.map +1 -0
  23. package/daemon/dist/adapters/pi-runtime-adapter.js +356 -0
  24. package/daemon/dist/adapters/pi-runtime-adapter.js.map +1 -0
  25. package/daemon/dist/adapters/tmux.d.ts +22 -1
  26. package/daemon/dist/adapters/tmux.d.ts.map +1 -1
  27. package/daemon/dist/adapters/tmux.js +40 -1
  28. package/daemon/dist/adapters/tmux.js.map +1 -1
  29. package/daemon/dist/build-info.d.ts +12 -0
  30. package/daemon/dist/build-info.d.ts.map +1 -0
  31. package/daemon/dist/build-info.js +11 -0
  32. package/daemon/dist/build-info.js.map +1 -0
  33. package/daemon/dist/builtins/workflow-specs/branched-remediation.yaml +31 -0
  34. package/daemon/dist/builtins/workflow-specs/factory-rsi.yaml +152 -0
  35. package/daemon/dist/builtins/workflow-specs/gated-release.yaml +26 -0
  36. package/daemon/dist/builtins/workflow-specs/linear-build.yaml +21 -0
  37. package/daemon/dist/db/migrations/048_queue_item_evidence_ref.d.ts +18 -0
  38. package/daemon/dist/db/migrations/048_queue_item_evidence_ref.d.ts.map +1 -0
  39. package/daemon/dist/db/migrations/048_queue_item_evidence_ref.js +22 -0
  40. package/daemon/dist/db/migrations/048_queue_item_evidence_ref.js.map +1 -0
  41. package/daemon/dist/db/migrations/049_workflow_instance_version.d.ts +20 -0
  42. package/daemon/dist/db/migrations/049_workflow_instance_version.d.ts.map +1 -0
  43. package/daemon/dist/db/migrations/049_workflow_instance_version.js +24 -0
  44. package/daemon/dist/db/migrations/049_workflow_instance_version.js.map +1 -0
  45. package/daemon/dist/db/migrations/050_workflow_spec_json.d.ts +22 -0
  46. package/daemon/dist/db/migrations/050_workflow_spec_json.d.ts.map +1 -0
  47. package/daemon/dist/db/migrations/050_workflow_spec_json.js +26 -0
  48. package/daemon/dist/db/migrations/050_workflow_spec_json.js.map +1 -0
  49. package/daemon/dist/db/migrations/051_workflow_resume.d.ts +22 -0
  50. package/daemon/dist/db/migrations/051_workflow_resume.d.ts.map +1 -0
  51. package/daemon/dist/db/migrations/051_workflow_resume.js +27 -0
  52. package/daemon/dist/db/migrations/051_workflow_resume.js.map +1 -0
  53. package/daemon/dist/db/migrations/052_workflow_instance_bound_rig.d.ts +26 -0
  54. package/daemon/dist/db/migrations/052_workflow_instance_bound_rig.d.ts.map +1 -0
  55. package/daemon/dist/db/migrations/052_workflow_instance_bound_rig.js +30 -0
  56. package/daemon/dist/db/migrations/052_workflow_instance_bound_rig.js.map +1 -0
  57. package/daemon/dist/db/migrations/053_sessions_node_id_index.d.ts +48 -0
  58. package/daemon/dist/db/migrations/053_sessions_node_id_index.d.ts.map +1 -0
  59. package/daemon/dist/db/migrations/053_sessions_node_id_index.js +53 -0
  60. package/daemon/dist/db/migrations/053_sessions_node_id_index.js.map +1 -0
  61. package/daemon/dist/db/migrations/054_queue_transitions_archive.d.ts +34 -0
  62. package/daemon/dist/db/migrations/054_queue_transitions_archive.d.ts.map +1 -0
  63. package/daemon/dist/db/migrations/054_queue_transitions_archive.js +49 -0
  64. package/daemon/dist/db/migrations/054_queue_transitions_archive.js.map +1 -0
  65. package/daemon/dist/domain/claim-service.d.ts +11 -0
  66. package/daemon/dist/domain/claim-service.d.ts.map +1 -1
  67. package/daemon/dist/domain/claim-service.js +3 -1
  68. package/daemon/dist/domain/claim-service.js.map +1 -1
  69. package/daemon/dist/domain/discovery-types.d.ts +1 -1
  70. package/daemon/dist/domain/discovery-types.d.ts.map +1 -1
  71. package/daemon/dist/domain/feed/attention-aggregator.d.ts +31 -0
  72. package/daemon/dist/domain/feed/attention-aggregator.d.ts.map +1 -0
  73. package/daemon/dist/domain/feed/attention-aggregator.js +119 -0
  74. package/daemon/dist/domain/feed/attention-aggregator.js.map +1 -0
  75. package/daemon/dist/domain/files/file-write-service.d.ts +11 -2
  76. package/daemon/dist/domain/files/file-write-service.d.ts.map +1 -1
  77. package/daemon/dist/domain/files/file-write-service.js +77 -0
  78. package/daemon/dist/domain/files/file-write-service.js.map +1 -1
  79. package/daemon/dist/domain/hosts/fanout-contract.d.ts +33 -0
  80. package/daemon/dist/domain/hosts/fanout-contract.d.ts.map +1 -0
  81. package/daemon/dist/domain/hosts/fanout-contract.js +23 -0
  82. package/daemon/dist/domain/hosts/fanout-contract.js.map +1 -0
  83. package/daemon/dist/domain/hosts/hosts-registry-reader.d.ts +50 -0
  84. package/daemon/dist/domain/hosts/hosts-registry-reader.d.ts.map +1 -0
  85. package/daemon/dist/domain/hosts/hosts-registry-reader.js +184 -0
  86. package/daemon/dist/domain/hosts/hosts-registry-reader.js.map +1 -0
  87. package/daemon/dist/domain/hosts/hosts-registry-writer.d.ts +11 -0
  88. package/daemon/dist/domain/hosts/hosts-registry-writer.d.ts.map +1 -0
  89. package/daemon/dist/domain/hosts/hosts-registry-writer.js +54 -0
  90. package/daemon/dist/domain/hosts/hosts-registry-writer.js.map +1 -0
  91. package/daemon/dist/domain/hosts/read-through.d.ts +28 -0
  92. package/daemon/dist/domain/hosts/read-through.d.ts.map +1 -0
  93. package/daemon/dist/domain/hosts/read-through.js +139 -0
  94. package/daemon/dist/domain/hosts/read-through.js.map +1 -0
  95. package/daemon/dist/domain/hosts/remote-daemon-http.d.ts +56 -0
  96. package/daemon/dist/domain/hosts/remote-daemon-http.d.ts.map +1 -0
  97. package/daemon/dist/domain/hosts/remote-daemon-http.js +154 -0
  98. package/daemon/dist/domain/hosts/remote-daemon-http.js.map +1 -0
  99. package/daemon/dist/domain/human-route-enforcer.d.ts +71 -0
  100. package/daemon/dist/domain/human-route-enforcer.d.ts.map +1 -0
  101. package/daemon/dist/domain/human-route-enforcer.js +80 -0
  102. package/daemon/dist/domain/human-route-enforcer.js.map +1 -0
  103. package/daemon/dist/domain/mission-control/audit-browse.d.ts +8 -0
  104. package/daemon/dist/domain/mission-control/audit-browse.d.ts.map +1 -1
  105. package/daemon/dist/domain/mission-control/audit-browse.js +19 -0
  106. package/daemon/dist/domain/mission-control/audit-browse.js.map +1 -1
  107. package/daemon/dist/domain/mission-control/mission-control-action-log.d.ts +1 -1
  108. package/daemon/dist/domain/mission-control/mission-control-action-log.d.ts.map +1 -1
  109. package/daemon/dist/domain/mission-control/mission-control-action-log.js +4 -0
  110. package/daemon/dist/domain/mission-control/mission-control-action-log.js.map +1 -1
  111. package/daemon/dist/domain/mission-control/mission-control-fleet-cli-capability.js +1 -1
  112. package/daemon/dist/domain/mission-control/mission-control-fleet-cli-capability.js.map +1 -1
  113. package/daemon/dist/domain/mission-control/mission-control-read-layer.js +1 -1
  114. package/daemon/dist/domain/mission-control/mission-control-read-layer.js.map +1 -1
  115. package/daemon/dist/domain/mission-control/mission-control-write-contract.d.ts +28 -0
  116. package/daemon/dist/domain/mission-control/mission-control-write-contract.d.ts.map +1 -1
  117. package/daemon/dist/domain/mission-control/mission-control-write-contract.js +125 -0
  118. package/daemon/dist/domain/mission-control/mission-control-write-contract.js.map +1 -1
  119. package/daemon/dist/domain/node-inventory.d.ts +18 -0
  120. package/daemon/dist/domain/node-inventory.d.ts.map +1 -1
  121. package/daemon/dist/domain/node-inventory.js +206 -95
  122. package/daemon/dist/domain/node-inventory.js.map +1 -1
  123. package/daemon/dist/domain/node-launcher.d.ts +11 -0
  124. package/daemon/dist/domain/node-launcher.d.ts.map +1 -1
  125. package/daemon/dist/domain/node-launcher.js +10 -0
  126. package/daemon/dist/domain/node-launcher.js.map +1 -1
  127. package/daemon/dist/domain/policies/workflow-keepalive.d.ts +7 -0
  128. package/daemon/dist/domain/policies/workflow-keepalive.d.ts.map +1 -1
  129. package/daemon/dist/domain/policies/workflow-keepalive.js +93 -13
  130. package/daemon/dist/domain/policies/workflow-keepalive.js.map +1 -1
  131. package/daemon/dist/domain/ps-projection.d.ts +28 -1
  132. package/daemon/dist/domain/ps-projection.d.ts.map +1 -1
  133. package/daemon/dist/domain/ps-projection.js +76 -26
  134. package/daemon/dist/domain/ps-projection.js.map +1 -1
  135. package/daemon/dist/domain/queue-repository.d.ts +130 -1
  136. package/daemon/dist/domain/queue-repository.d.ts.map +1 -1
  137. package/daemon/dist/domain/queue-repository.js +304 -11
  138. package/daemon/dist/domain/queue-repository.js.map +1 -1
  139. package/daemon/dist/domain/queue-retention.d.ts +130 -0
  140. package/daemon/dist/domain/queue-retention.d.ts.map +1 -0
  141. package/daemon/dist/domain/queue-retention.js +224 -0
  142. package/daemon/dist/domain/queue-retention.js.map +1 -0
  143. package/daemon/dist/domain/restore-orchestrator.d.ts +5 -0
  144. package/daemon/dist/domain/restore-orchestrator.d.ts.map +1 -1
  145. package/daemon/dist/domain/restore-orchestrator.js +29 -2
  146. package/daemon/dist/domain/restore-orchestrator.js.map +1 -1
  147. package/daemon/dist/domain/resume-token-capture.d.ts +13 -0
  148. package/daemon/dist/domain/resume-token-capture.d.ts.map +1 -1
  149. package/daemon/dist/domain/resume-token-capture.js +14 -1
  150. package/daemon/dist/domain/resume-token-capture.js.map +1 -1
  151. package/daemon/dist/domain/resume-token-validation.d.ts +1 -1
  152. package/daemon/dist/domain/resume-token-validation.d.ts.map +1 -1
  153. package/daemon/dist/domain/resume-token-validation.js +58 -10
  154. package/daemon/dist/domain/resume-token-validation.js.map +1 -1
  155. package/daemon/dist/domain/review/brief-spine.d.ts +19 -0
  156. package/daemon/dist/domain/review/brief-spine.d.ts.map +1 -0
  157. package/daemon/dist/domain/review/brief-spine.js +86 -0
  158. package/daemon/dist/domain/review/brief-spine.js.map +1 -0
  159. package/daemon/dist/domain/review/compose.d.ts +277 -0
  160. package/daemon/dist/domain/review/compose.d.ts.map +1 -0
  161. package/daemon/dist/domain/review/compose.js +862 -0
  162. package/daemon/dist/domain/review/compose.js.map +1 -0
  163. package/daemon/dist/domain/review/fleet-compose.d.ts +52 -0
  164. package/daemon/dist/domain/review/fleet-compose.d.ts.map +1 -0
  165. package/daemon/dist/domain/review/fleet-compose.js +294 -0
  166. package/daemon/dist/domain/review/fleet-compose.js.map +1 -0
  167. package/daemon/dist/domain/review/freeze.d.ts +31 -0
  168. package/daemon/dist/domain/review/freeze.d.ts.map +1 -0
  169. package/daemon/dist/domain/review/freeze.js +257 -0
  170. package/daemon/dist/domain/review/freeze.js.map +1 -0
  171. package/daemon/dist/domain/review/gather.d.ts +115 -0
  172. package/daemon/dist/domain/review/gather.d.ts.map +1 -0
  173. package/daemon/dist/domain/review/gather.js +812 -0
  174. package/daemon/dist/domain/review/gather.js.map +1 -0
  175. package/daemon/dist/domain/review/types.d.ts +361 -0
  176. package/daemon/dist/domain/review/types.d.ts.map +1 -0
  177. package/daemon/dist/domain/review/types.js +35 -0
  178. package/daemon/dist/domain/review/types.js.map +1 -0
  179. package/daemon/dist/domain/rig-expansion-service.d.ts.map +1 -1
  180. package/daemon/dist/domain/rig-expansion-service.js +3 -0
  181. package/daemon/dist/domain/rig-expansion-service.js.map +1 -1
  182. package/daemon/dist/domain/rig-repository.d.ts +7 -6
  183. package/daemon/dist/domain/rig-repository.d.ts.map +1 -1
  184. package/daemon/dist/domain/rig-repository.js +33 -11
  185. package/daemon/dist/domain/rig-repository.js.map +1 -1
  186. package/daemon/dist/domain/rigspec-codec.d.ts.map +1 -1
  187. package/daemon/dist/domain/rigspec-codec.js +3 -0
  188. package/daemon/dist/domain/rigspec-codec.js.map +1 -1
  189. package/daemon/dist/domain/rigspec-exporter.d.ts.map +1 -1
  190. package/daemon/dist/domain/rigspec-exporter.js +4 -0
  191. package/daemon/dist/domain/rigspec-exporter.js.map +1 -1
  192. package/daemon/dist/domain/rigspec-instantiator.d.ts.map +1 -1
  193. package/daemon/dist/domain/rigspec-instantiator.js +11 -0
  194. package/daemon/dist/domain/rigspec-instantiator.js.map +1 -1
  195. package/daemon/dist/domain/rigspec-preflight.d.ts +6 -0
  196. package/daemon/dist/domain/rigspec-preflight.d.ts.map +1 -1
  197. package/daemon/dist/domain/rigspec-preflight.js +26 -1
  198. package/daemon/dist/domain/rigspec-preflight.js.map +1 -1
  199. package/daemon/dist/domain/rigspec-schema.d.ts.map +1 -1
  200. package/daemon/dist/domain/rigspec-schema.js +20 -1
  201. package/daemon/dist/domain/rigspec-schema.js.map +1 -1
  202. package/daemon/dist/domain/runtime-verifier.d.ts +7 -1
  203. package/daemon/dist/domain/runtime-verifier.d.ts.map +1 -1
  204. package/daemon/dist/domain/runtime-verifier.js +39 -1
  205. package/daemon/dist/domain/runtime-verifier.js.map +1 -1
  206. package/daemon/dist/domain/scope/scope-approve.d.ts +64 -0
  207. package/daemon/dist/domain/scope/scope-approve.d.ts.map +1 -0
  208. package/daemon/dist/domain/scope/scope-approve.js +153 -0
  209. package/daemon/dist/domain/scope/scope-approve.js.map +1 -0
  210. package/daemon/dist/domain/scope/scope-audit.d.ts +9 -1
  211. package/daemon/dist/domain/scope/scope-audit.d.ts.map +1 -1
  212. package/daemon/dist/domain/scope/scope-audit.js +173 -1
  213. package/daemon/dist/domain/scope/scope-audit.js.map +1 -1
  214. package/daemon/dist/domain/seat-handover-service.d.ts +9 -0
  215. package/daemon/dist/domain/seat-handover-service.d.ts.map +1 -1
  216. package/daemon/dist/domain/seat-handover-service.js +2 -0
  217. package/daemon/dist/domain/seat-handover-service.js.map +1 -1
  218. package/daemon/dist/domain/seat-identity-store.d.ts +7 -0
  219. package/daemon/dist/domain/seat-identity-store.d.ts.map +1 -1
  220. package/daemon/dist/domain/seat-identity-store.js +27 -0
  221. package/daemon/dist/domain/seat-identity-store.js.map +1 -1
  222. package/daemon/dist/domain/seat-status-service.d.ts.map +1 -1
  223. package/daemon/dist/domain/seat-status-service.js +6 -4
  224. package/daemon/dist/domain/seat-status-service.js.map +1 -1
  225. package/daemon/dist/domain/session-name.d.ts +22 -0
  226. package/daemon/dist/domain/session-name.d.ts.map +1 -1
  227. package/daemon/dist/domain/session-name.js +29 -0
  228. package/daemon/dist/domain/session-name.js.map +1 -1
  229. package/daemon/dist/domain/slices/slice-detail-projector.d.ts.map +1 -1
  230. package/daemon/dist/domain/slices/slice-detail-projector.js +4 -5
  231. package/daemon/dist/domain/slices/slice-detail-projector.js.map +1 -1
  232. package/daemon/dist/domain/spec-library-workflow-scanner.d.ts +18 -2
  233. package/daemon/dist/domain/spec-library-workflow-scanner.d.ts.map +1 -1
  234. package/daemon/dist/domain/spec-library-workflow-scanner.js +23 -1
  235. package/daemon/dist/domain/spec-library-workflow-scanner.js.map +1 -1
  236. package/daemon/dist/domain/startup-proof.d.ts +10 -6
  237. package/daemon/dist/domain/startup-proof.d.ts.map +1 -1
  238. package/daemon/dist/domain/startup-proof.js +35 -7
  239. package/daemon/dist/domain/startup-proof.js.map +1 -1
  240. package/daemon/dist/domain/successor-session-launcher.d.ts +16 -0
  241. package/daemon/dist/domain/successor-session-launcher.d.ts.map +1 -1
  242. package/daemon/dist/domain/successor-session-launcher.js +13 -0
  243. package/daemon/dist/domain/successor-session-launcher.js.map +1 -1
  244. package/daemon/dist/domain/terminal/cmux-provider-adapter.d.ts +27 -0
  245. package/daemon/dist/domain/terminal/cmux-provider-adapter.d.ts.map +1 -0
  246. package/daemon/dist/domain/terminal/cmux-provider-adapter.js +67 -0
  247. package/daemon/dist/domain/terminal/cmux-provider-adapter.js.map +1 -0
  248. package/daemon/dist/domain/terminal/herdr-adapter.d.ts +77 -0
  249. package/daemon/dist/domain/terminal/herdr-adapter.d.ts.map +1 -0
  250. package/daemon/dist/domain/terminal/herdr-adapter.js +266 -0
  251. package/daemon/dist/domain/terminal/herdr-adapter.js.map +1 -0
  252. package/daemon/dist/domain/terminal/herdr-transport.d.ts +50 -0
  253. package/daemon/dist/domain/terminal/herdr-transport.d.ts.map +1 -0
  254. package/daemon/dist/domain/terminal/herdr-transport.js +145 -0
  255. package/daemon/dist/domain/terminal/herdr-transport.js.map +1 -0
  256. package/daemon/dist/domain/terminal/terminal-provider.d.ts +88 -0
  257. package/daemon/dist/domain/terminal/terminal-provider.d.ts.map +1 -0
  258. package/daemon/dist/domain/terminal/terminal-provider.js +17 -0
  259. package/daemon/dist/domain/terminal/terminal-provider.js.map +1 -0
  260. package/daemon/dist/domain/terminal/terminal-service.d.ts +60 -0
  261. package/daemon/dist/domain/terminal/terminal-service.d.ts.map +1 -0
  262. package/daemon/dist/domain/terminal/terminal-service.js +174 -0
  263. package/daemon/dist/domain/terminal/terminal-service.js.map +1 -0
  264. package/daemon/dist/domain/terminal/terminal-views-store.d.ts +77 -0
  265. package/daemon/dist/domain/terminal/terminal-views-store.d.ts.map +1 -0
  266. package/daemon/dist/domain/terminal/terminal-views-store.js +146 -0
  267. package/daemon/dist/domain/terminal/terminal-views-store.js.map +1 -0
  268. package/daemon/dist/domain/terminal/view-composer.d.ts +42 -0
  269. package/daemon/dist/domain/terminal/view-composer.d.ts.map +1 -0
  270. package/daemon/dist/domain/terminal/view-composer.js +137 -0
  271. package/daemon/dist/domain/terminal/view-composer.js.map +1 -0
  272. package/daemon/dist/domain/tmux-option-defaults.d.ts +89 -0
  273. package/daemon/dist/domain/tmux-option-defaults.d.ts.map +1 -0
  274. package/daemon/dist/domain/tmux-option-defaults.js +132 -0
  275. package/daemon/dist/domain/tmux-option-defaults.js.map +1 -0
  276. package/daemon/dist/domain/topology/multi-rig-launcher.d.ts +49 -0
  277. package/daemon/dist/domain/topology/multi-rig-launcher.d.ts.map +1 -0
  278. package/daemon/dist/domain/topology/multi-rig-launcher.js +132 -0
  279. package/daemon/dist/domain/topology/multi-rig-launcher.js.map +1 -0
  280. package/daemon/dist/domain/topology/remote-up-leaf.d.ts +29 -0
  281. package/daemon/dist/domain/topology/remote-up-leaf.d.ts.map +1 -0
  282. package/daemon/dist/domain/topology/remote-up-leaf.js +60 -0
  283. package/daemon/dist/domain/topology/remote-up-leaf.js.map +1 -0
  284. package/daemon/dist/domain/topology/topology-manifest.d.ts +34 -0
  285. package/daemon/dist/domain/topology/topology-manifest.d.ts.map +1 -0
  286. package/daemon/dist/domain/topology/topology-manifest.js +195 -0
  287. package/daemon/dist/domain/topology/topology-manifest.js.map +1 -0
  288. package/daemon/dist/domain/types.d.ts +39 -1
  289. package/daemon/dist/domain/types.d.ts.map +1 -1
  290. package/daemon/dist/domain/types.js.map +1 -1
  291. package/daemon/dist/domain/up-command-router.d.ts +1 -1
  292. package/daemon/dist/domain/up-command-router.d.ts.map +1 -1
  293. package/daemon/dist/domain/up-command-router.js +34 -2
  294. package/daemon/dist/domain/up-command-router.js.map +1 -1
  295. package/daemon/dist/domain/user-settings/settings-store.d.ts +18 -1
  296. package/daemon/dist/domain/user-settings/settings-store.d.ts.map +1 -1
  297. package/daemon/dist/domain/user-settings/settings-store.js +201 -0
  298. package/daemon/dist/domain/user-settings/settings-store.js.map +1 -1
  299. package/daemon/dist/domain/workflow/slice-workflow-projection.d.ts.map +1 -1
  300. package/daemon/dist/domain/workflow/slice-workflow-projection.js +6 -2
  301. package/daemon/dist/domain/workflow/slice-workflow-projection.js.map +1 -1
  302. package/daemon/dist/domain/workflow-boot-sweep.d.ts +28 -0
  303. package/daemon/dist/domain/workflow-boot-sweep.d.ts.map +1 -0
  304. package/daemon/dist/domain/workflow-boot-sweep.js +102 -0
  305. package/daemon/dist/domain/workflow-boot-sweep.js.map +1 -0
  306. package/daemon/dist/domain/workflow-deadline.d.ts +74 -0
  307. package/daemon/dist/domain/workflow-deadline.d.ts.map +1 -0
  308. package/daemon/dist/domain/workflow-deadline.js +165 -0
  309. package/daemon/dist/domain/workflow-deadline.js.map +1 -0
  310. package/daemon/dist/domain/workflow-exception-escalation.d.ts +33 -0
  311. package/daemon/dist/domain/workflow-exception-escalation.d.ts.map +1 -0
  312. package/daemon/dist/domain/workflow-exception-escalation.js +104 -0
  313. package/daemon/dist/domain/workflow-exception-escalation.js.map +1 -0
  314. package/daemon/dist/domain/workflow-exception-router.d.ts +33 -0
  315. package/daemon/dist/domain/workflow-exception-router.d.ts.map +1 -0
  316. package/daemon/dist/domain/workflow-exception-router.js +96 -0
  317. package/daemon/dist/domain/workflow-exception-router.js.map +1 -0
  318. package/daemon/dist/domain/workflow-exception.d.ts +90 -0
  319. package/daemon/dist/domain/workflow-exception.d.ts.map +1 -0
  320. package/daemon/dist/domain/workflow-exception.js +122 -0
  321. package/daemon/dist/domain/workflow-exception.js.map +1 -0
  322. package/daemon/dist/domain/workflow-frontier-guard.d.ts +24 -0
  323. package/daemon/dist/domain/workflow-frontier-guard.d.ts.map +1 -0
  324. package/daemon/dist/domain/workflow-frontier-guard.js +30 -0
  325. package/daemon/dist/domain/workflow-frontier-guard.js.map +1 -0
  326. package/daemon/dist/domain/workflow-instance-store.d.ts +28 -0
  327. package/daemon/dist/domain/workflow-instance-store.d.ts.map +1 -1
  328. package/daemon/dist/domain/workflow-instance-store.js +66 -10
  329. package/daemon/dist/domain/workflow-instance-store.js.map +1 -1
  330. package/daemon/dist/domain/workflow-keepalive-arming.d.ts +35 -0
  331. package/daemon/dist/domain/workflow-keepalive-arming.d.ts.map +1 -0
  332. package/daemon/dist/domain/workflow-keepalive-arming.js +87 -0
  333. package/daemon/dist/domain/workflow-keepalive-arming.js.map +1 -0
  334. package/daemon/dist/domain/workflow-projector.d.ts +117 -2
  335. package/daemon/dist/domain/workflow-projector.d.ts.map +1 -1
  336. package/daemon/dist/domain/workflow-projector.js +672 -41
  337. package/daemon/dist/domain/workflow-projector.js.map +1 -1
  338. package/daemon/dist/domain/workflow-role-context.d.ts +57 -0
  339. package/daemon/dist/domain/workflow-role-context.d.ts.map +1 -0
  340. package/daemon/dist/domain/workflow-role-context.js +120 -0
  341. package/daemon/dist/domain/workflow-role-context.js.map +1 -0
  342. package/daemon/dist/domain/workflow-role-resolver.d.ts +65 -0
  343. package/daemon/dist/domain/workflow-role-resolver.d.ts.map +1 -0
  344. package/daemon/dist/domain/workflow-role-resolver.js +108 -0
  345. package/daemon/dist/domain/workflow-role-resolver.js.map +1 -0
  346. package/daemon/dist/domain/workflow-runtime.d.ts +157 -1
  347. package/daemon/dist/domain/workflow-runtime.d.ts.map +1 -1
  348. package/daemon/dist/domain/workflow-runtime.js +718 -11
  349. package/daemon/dist/domain/workflow-runtime.js.map +1 -1
  350. package/daemon/dist/domain/workflow-spec-cache.d.ts +26 -1
  351. package/daemon/dist/domain/workflow-spec-cache.d.ts.map +1 -1
  352. package/daemon/dist/domain/workflow-spec-cache.js +327 -13
  353. package/daemon/dist/domain/workflow-spec-cache.js.map +1 -1
  354. package/daemon/dist/domain/workflow-types.d.ts +143 -8
  355. package/daemon/dist/domain/workflow-types.d.ts.map +1 -1
  356. package/daemon/dist/domain/workflow-types.js +14 -1
  357. package/daemon/dist/domain/workflow-types.js.map +1 -1
  358. package/daemon/dist/domain/workflow-validator.d.ts +11 -1
  359. package/daemon/dist/domain/workflow-validator.d.ts.map +1 -1
  360. package/daemon/dist/domain/workflow-validator.js +246 -1
  361. package/daemon/dist/domain/workflow-validator.js.map +1 -1
  362. package/daemon/dist/domain/workspace/default-workspace-scaffold.d.ts.map +1 -1
  363. package/daemon/dist/domain/workspace/default-workspace-scaffold.js +51 -6
  364. package/daemon/dist/domain/workspace/default-workspace-scaffold.js.map +1 -1
  365. package/daemon/dist/domain/workspace/workspace-doctor.d.ts +11 -0
  366. package/daemon/dist/domain/workspace/workspace-doctor.d.ts.map +1 -1
  367. package/daemon/dist/domain/workspace/workspace-doctor.js +82 -0
  368. package/daemon/dist/domain/workspace/workspace-doctor.js.map +1 -1
  369. package/daemon/dist/index.d.ts +17 -0
  370. package/daemon/dist/index.d.ts.map +1 -1
  371. package/daemon/dist/index.js +44 -0
  372. package/daemon/dist/index.js.map +1 -1
  373. package/daemon/dist/routes/activity.js +22 -0
  374. package/daemon/dist/routes/activity.js.map +1 -1
  375. package/daemon/dist/routes/config.d.ts.map +1 -1
  376. package/daemon/dist/routes/config.js +15 -6
  377. package/daemon/dist/routes/config.js.map +1 -1
  378. package/daemon/dist/routes/files.d.ts.map +1 -1
  379. package/daemon/dist/routes/files.js +45 -1
  380. package/daemon/dist/routes/files.js.map +1 -1
  381. package/daemon/dist/routes/hosts.d.ts +5 -0
  382. package/daemon/dist/routes/hosts.d.ts.map +1 -0
  383. package/daemon/dist/routes/hosts.js +346 -0
  384. package/daemon/dist/routes/hosts.js.map +1 -0
  385. package/daemon/dist/routes/mission-control.d.ts.map +1 -1
  386. package/daemon/dist/routes/mission-control.js +67 -2
  387. package/daemon/dist/routes/mission-control.js.map +1 -1
  388. package/daemon/dist/routes/queue.d.ts +10 -9
  389. package/daemon/dist/routes/queue.d.ts.map +1 -1
  390. package/daemon/dist/routes/queue.js +305 -10
  391. package/daemon/dist/routes/queue.js.map +1 -1
  392. package/daemon/dist/routes/review.d.ts +3 -0
  393. package/daemon/dist/routes/review.d.ts.map +1 -0
  394. package/daemon/dist/routes/review.js +195 -0
  395. package/daemon/dist/routes/review.js.map +1 -0
  396. package/daemon/dist/routes/scope-approve.d.ts +3 -0
  397. package/daemon/dist/routes/scope-approve.d.ts.map +1 -0
  398. package/daemon/dist/routes/scope-approve.js +55 -0
  399. package/daemon/dist/routes/scope-approve.js.map +1 -0
  400. package/daemon/dist/routes/scope-audit.d.ts.map +1 -1
  401. package/daemon/dist/routes/scope-audit.js +28 -1
  402. package/daemon/dist/routes/scope-audit.js.map +1 -1
  403. package/daemon/dist/routes/seat.js +13 -0
  404. package/daemon/dist/routes/seat.js.map +1 -1
  405. package/daemon/dist/routes/slices.d.ts.map +1 -1
  406. package/daemon/dist/routes/slices.js +49 -9
  407. package/daemon/dist/routes/slices.js.map +1 -1
  408. package/daemon/dist/routes/terminal-ws.d.ts.map +1 -1
  409. package/daemon/dist/routes/terminal-ws.js +58 -21
  410. package/daemon/dist/routes/terminal-ws.js.map +1 -1
  411. package/daemon/dist/routes/terminal.d.ts +11 -0
  412. package/daemon/dist/routes/terminal.d.ts.map +1 -0
  413. package/daemon/dist/routes/terminal.js +104 -0
  414. package/daemon/dist/routes/terminal.js.map +1 -0
  415. package/daemon/dist/routes/up.d.ts.map +1 -1
  416. package/daemon/dist/routes/up.js +84 -0
  417. package/daemon/dist/routes/up.js.map +1 -1
  418. package/daemon/dist/routes/workflow.d.ts.map +1 -1
  419. package/daemon/dist/routes/workflow.js +102 -10
  420. package/daemon/dist/routes/workflow.js.map +1 -1
  421. package/daemon/dist/routes/workspace.js +2 -2
  422. package/daemon/dist/server.d.ts +6 -0
  423. package/daemon/dist/server.d.ts.map +1 -1
  424. package/daemon/dist/server.js +36 -1
  425. package/daemon/dist/server.js.map +1 -1
  426. package/daemon/dist/startup.d.ts.map +1 -1
  427. package/daemon/dist/startup.js +238 -14
  428. package/daemon/dist/startup.js.map +1 -1
  429. package/daemon/docs/reference/agent-startup-guide.md +1 -1
  430. package/daemon/docs/reference/product-factory-vps-runbook.md +132 -0
  431. package/daemon/docs/reference/sdlc-conventions.md +187 -0
  432. package/daemon/specs/agents/conveyor/builder/agent.yaml +1 -1
  433. package/daemon/specs/agents/conveyor/builder/guidance/role.md +1 -0
  434. package/daemon/specs/agents/conveyor/lead/agent.yaml +1 -1
  435. package/daemon/specs/agents/conveyor/lead/guidance/role.md +1 -0
  436. package/daemon/specs/agents/conveyor/planner/agent.yaml +1 -1
  437. package/daemon/specs/agents/conveyor/planner/guidance/role.md +1 -0
  438. package/daemon/specs/agents/conveyor/reviewer/agent.yaml +1 -1
  439. package/daemon/specs/agents/conveyor/reviewer/guidance/role.md +1 -0
  440. package/daemon/specs/agents/design/product-designer/agent.yaml +1 -1
  441. package/daemon/specs/agents/design/product-designer/guidance/role.md +1 -0
  442. package/daemon/specs/agents/development/implementer/agent.yaml +1 -1
  443. package/daemon/specs/agents/development/implementer/guidance/role.md +1 -0
  444. package/daemon/specs/agents/development/qa/agent.yaml +1 -1
  445. package/daemon/specs/agents/development/qa/guidance/role.md +1 -0
  446. package/daemon/specs/agents/factory-rsi/dogfood/agent.yaml +29 -0
  447. package/daemon/specs/agents/factory-rsi/dogfood/guidance/role.md +37 -0
  448. package/daemon/specs/agents/factory-rsi/release-manager/agent.yaml +29 -0
  449. package/daemon/specs/agents/factory-rsi/release-manager/guidance/role.md +40 -0
  450. package/daemon/specs/agents/orchestration/orchestrator/agent.yaml +1 -1
  451. package/daemon/specs/agents/orchestration/orchestrator/guidance/role.md +1 -0
  452. package/daemon/specs/agents/product-management/pm/agent.yaml +1 -0
  453. package/daemon/specs/agents/product-management/pm/guidance/role.md +13 -0
  454. package/daemon/specs/agents/review/independent-reviewer/agent.yaml +1 -1
  455. package/daemon/specs/agents/review/independent-reviewer/guidance/role.md +1 -0
  456. package/daemon/specs/agents/shared/agent.yaml +2 -0
  457. package/daemon/specs/agents/shared/skills/core/mission-slice-sop/SKILL.md +113 -0
  458. package/daemon/specs/agents/shared/skills/core/openrig-cmux/SKILL.md +86 -0
  459. package/daemon/specs/agents/shared/skills/core/openrig-herdr/SKILL.md +158 -0
  460. package/daemon/specs/agents/shared/skills/core/openrig-operator/SKILL.md +4 -4
  461. package/daemon/specs/agents/shared/skills/core/openrig-user/SKILL.md +75 -29
  462. package/daemon/specs/agents/shared/skills/pods/orchestration-team/SKILL.md +2 -2
  463. package/daemon/specs/rigs/focused/pm-team/CULTURE.md +4 -0
  464. package/daemon/specs/rigs/launch/factory-rsi/CULTURE.md +47 -0
  465. package/daemon/specs/rigs/launch/factory-rsi/rig.yaml +115 -0
  466. package/daemon/specs/rigs/launch/kernel/agents/operator/agent/guidance/role.md +1 -1
  467. package/daemon/specs/rigs/launch/kernel/agents/operator/agent/startup/context.md +1 -1
  468. package/daemon/specs/rigs/preview/product-team/CULTURE.md +4 -0
  469. package/dist/build-info.d.ts +8 -0
  470. package/dist/build-info.d.ts.map +1 -0
  471. package/dist/build-info.js +11 -0
  472. package/dist/build-info.js.map +1 -0
  473. package/dist/commands/broadcast.d.ts +6 -1
  474. package/dist/commands/broadcast.d.ts.map +1 -1
  475. package/dist/commands/broadcast.js +101 -15
  476. package/dist/commands/broadcast.js.map +1 -1
  477. package/dist/commands/capture.d.ts.map +1 -1
  478. package/dist/commands/capture.js +99 -8
  479. package/dist/commands/capture.js.map +1 -1
  480. package/dist/commands/config-init-workspace.d.ts.map +1 -1
  481. package/dist/commands/config-init-workspace.js +20 -4
  482. package/dist/commands/config-init-workspace.js.map +1 -1
  483. package/dist/commands/config.d.ts.map +1 -1
  484. package/dist/commands/config.js +4 -0
  485. package/dist/commands/config.js.map +1 -1
  486. package/dist/commands/doctor.js +2 -2
  487. package/dist/commands/doctor.js.map +1 -1
  488. package/dist/commands/down.d.ts.map +1 -1
  489. package/dist/commands/down.js +5 -0
  490. package/dist/commands/down.js.map +1 -1
  491. package/dist/commands/expand.js +1 -1
  492. package/dist/commands/expand.js.map +1 -1
  493. package/dist/commands/file.d.ts +7 -0
  494. package/dist/commands/file.d.ts.map +1 -0
  495. package/dist/commands/file.js +77 -0
  496. package/dist/commands/file.js.map +1 -0
  497. package/dist/commands/host.d.ts +48 -0
  498. package/dist/commands/host.d.ts.map +1 -0
  499. package/dist/commands/host.js +772 -0
  500. package/dist/commands/host.js.map +1 -0
  501. package/dist/commands/launch.d.ts.map +1 -1
  502. package/dist/commands/launch.js +5 -0
  503. package/dist/commands/launch.js.map +1 -1
  504. package/dist/commands/proof.d.ts +54 -0
  505. package/dist/commands/proof.d.ts.map +1 -0
  506. package/dist/commands/proof.js +311 -0
  507. package/dist/commands/proof.js.map +1 -0
  508. package/dist/commands/ps.d.ts +41 -7
  509. package/dist/commands/ps.d.ts.map +1 -1
  510. package/dist/commands/ps.js +353 -135
  511. package/dist/commands/ps.js.map +1 -1
  512. package/dist/commands/queue.d.ts +36 -0
  513. package/dist/commands/queue.d.ts.map +1 -1
  514. package/dist/commands/queue.js +149 -7
  515. package/dist/commands/queue.js.map +1 -1
  516. package/dist/commands/restore-packet.d.ts.map +1 -1
  517. package/dist/commands/restore-packet.js +13 -2
  518. package/dist/commands/restore-packet.js.map +1 -1
  519. package/dist/commands/scope.d.ts.map +1 -1
  520. package/dist/commands/scope.js +140 -3
  521. package/dist/commands/scope.js.map +1 -1
  522. package/dist/commands/send.d.ts.map +1 -1
  523. package/dist/commands/send.js +127 -13
  524. package/dist/commands/send.js.map +1 -1
  525. package/dist/commands/terminal.d.ts +6 -0
  526. package/dist/commands/terminal.d.ts.map +1 -0
  527. package/dist/commands/terminal.js +116 -0
  528. package/dist/commands/terminal.js.map +1 -0
  529. package/dist/commands/transcript.d.ts +6 -1
  530. package/dist/commands/transcript.d.ts.map +1 -1
  531. package/dist/commands/transcript.js +113 -30
  532. package/dist/commands/transcript.js.map +1 -1
  533. package/dist/commands/up.d.ts +2 -0
  534. package/dist/commands/up.d.ts.map +1 -1
  535. package/dist/commands/up.js +78 -2
  536. package/dist/commands/up.js.map +1 -1
  537. package/dist/commands/whoami.d.ts.map +1 -1
  538. package/dist/commands/whoami.js +11 -0
  539. package/dist/commands/whoami.js.map +1 -1
  540. package/dist/commands/workflow-errors.d.ts +23 -0
  541. package/dist/commands/workflow-errors.d.ts.map +1 -0
  542. package/dist/commands/workflow-errors.js +100 -0
  543. package/dist/commands/workflow-errors.js.map +1 -0
  544. package/dist/commands/workflow-follow.d.ts +71 -0
  545. package/dist/commands/workflow-follow.d.ts.map +1 -0
  546. package/dist/commands/workflow-follow.js +259 -0
  547. package/dist/commands/workflow-follow.js.map +1 -0
  548. package/dist/commands/workflow-render.d.ts +114 -0
  549. package/dist/commands/workflow-render.d.ts.map +1 -0
  550. package/dist/commands/workflow-render.js +223 -0
  551. package/dist/commands/workflow-render.js.map +1 -0
  552. package/dist/commands/workflow.d.ts +1 -0
  553. package/dist/commands/workflow.d.ts.map +1 -1
  554. package/dist/commands/workflow.js +278 -14
  555. package/dist/commands/workflow.js.map +1 -1
  556. package/dist/commands/workspace.js +6 -6
  557. package/dist/commands/workspace.js.map +1 -1
  558. package/dist/config-store.d.ts +19 -1
  559. package/dist/config-store.d.ts.map +1 -1
  560. package/dist/config-store.js +171 -0
  561. package/dist/config-store.js.map +1 -1
  562. package/dist/cross-host-cli-helpers.d.ts +13 -0
  563. package/dist/cross-host-cli-helpers.d.ts.map +1 -1
  564. package/dist/cross-host-cli-helpers.js +27 -0
  565. package/dist/cross-host-cli-helpers.js.map +1 -1
  566. package/dist/cross-host-executor.d.ts +1 -0
  567. package/dist/cross-host-executor.d.ts.map +1 -1
  568. package/dist/cross-host-executor.js +4 -1
  569. package/dist/cross-host-executor.js.map +1 -1
  570. package/dist/cross-host-target.d.ts +49 -0
  571. package/dist/cross-host-target.d.ts.map +1 -0
  572. package/dist/cross-host-target.js +35 -0
  573. package/dist/cross-host-target.js.map +1 -0
  574. package/dist/daemon-lifecycle.d.ts.map +1 -1
  575. package/dist/daemon-lifecycle.js +4 -1
  576. package/dist/daemon-lifecycle.js.map +1 -1
  577. package/dist/host-registry.d.ts +17 -0
  578. package/dist/host-registry.d.ts.map +1 -1
  579. package/dist/host-registry.js +64 -2
  580. package/dist/host-registry.js.map +1 -1
  581. package/dist/host-selection.d.ts +13 -0
  582. package/dist/host-selection.d.ts.map +1 -0
  583. package/dist/host-selection.js +54 -0
  584. package/dist/host-selection.js.map +1 -0
  585. package/dist/index.d.ts +2 -0
  586. package/dist/index.d.ts.map +1 -1
  587. package/dist/index.js +9 -0
  588. package/dist/index.js.map +1 -1
  589. package/dist/lib/file-transfer.d.ts +89 -0
  590. package/dist/lib/file-transfer.d.ts.map +1 -0
  591. package/dist/lib/file-transfer.js +300 -0
  592. package/dist/lib/file-transfer.js.map +1 -0
  593. package/dist/lib/hosts/fanout-contract.d.ts +33 -0
  594. package/dist/lib/hosts/fanout-contract.d.ts.map +1 -0
  595. package/dist/lib/hosts/fanout-contract.js +23 -0
  596. package/dist/lib/hosts/fanout-contract.js.map +1 -0
  597. package/dist/lib/scope/scope-audit.d.ts +9 -1
  598. package/dist/lib/scope/scope-audit.d.ts.map +1 -1
  599. package/dist/lib/scope/scope-audit.js +173 -1
  600. package/dist/lib/scope/scope-audit.js.map +1 -1
  601. package/dist/lib/scope/templates.d.ts +1 -0
  602. package/dist/lib/scope/templates.d.ts.map +1 -1
  603. package/dist/lib/scope/templates.js +9 -0
  604. package/dist/lib/scope/templates.js.map +1 -1
  605. package/dist/lib/scope-templates/backlog-deprecation.md +16 -0
  606. package/dist/lib/scope-templates/backlog-tech-debt.md +16 -0
  607. package/dist/lib/scope-templates/bug-fix.md +16 -0
  608. package/dist/lib/scope-templates/implementation-prd.md +33 -0
  609. package/dist/lib/scope-templates/mission-placeholder.md +1 -1
  610. package/dist/lib/scope-templates/mission-progress.md +1 -1
  611. package/dist/lib/scope-templates/mission-release.md +1 -1
  612. package/dist/lib/scope-templates/placeholder.md +11 -7
  613. package/dist/lib/scope-templates/proof.md +5 -1
  614. package/dist/lib/scope-templates/release-feature.md +14 -6
  615. package/dist/lib/scope-templates/research.md +16 -0
  616. package/dist/lib/scope-templates/slice-progress.md +1 -1
  617. package/dist/remote-host-ops.d.ts +1 -0
  618. package/dist/remote-host-ops.d.ts.map +1 -1
  619. package/dist/remote-host-ops.js +11 -4
  620. package/dist/remote-host-ops.js.map +1 -1
  621. package/dist/session-name.d.ts +23 -0
  622. package/dist/session-name.d.ts.map +1 -0
  623. package/dist/session-name.js +61 -0
  624. package/dist/session-name.js.map +1 -0
  625. package/dist/version.d.ts +5 -0
  626. package/dist/version.d.ts.map +1 -1
  627. package/dist/version.js +11 -1
  628. package/dist/version.js.map +1 -1
  629. package/package.json +1 -1
  630. package/ui/dist/assets/index-CFqxa0zW.css +32 -0
  631. package/ui/dist/assets/index-zrFqS7gL.js +623 -0
  632. package/ui/dist/index.html +2 -2
  633. package/ui/dist/assets/index-DYZniQcc.js +0 -597
  634. package/ui/dist/assets/index-trcb4Yf_.css +0 -32
@@ -5,8 +5,10 @@ import { bindingsSessionsSchema } from "./db/migrations/002_bindings_sessions.js
5
5
  import { eventsSchema } from "./db/migrations/003_events.js";
6
6
  import { RigRepository } from "./domain/rig-repository.js";
7
7
  import { SessionRegistry } from "./domain/session-registry.js";
8
+ import { isHumanSeatSessionRef, parseSessionName } from "./domain/session-name.js";
8
9
  import { EventBus } from "./domain/event-bus.js";
9
10
  import { NodeLauncher } from "./domain/node-launcher.js";
11
+ import { TmuxOptionDefaultsApplier } from "./domain/tmux-option-defaults.js";
10
12
  import { TmuxAdapter } from "./adapters/tmux.js";
11
13
  import { CmuxAdapter } from "./adapters/cmux.js";
12
14
  import { execCommand } from "./adapters/tmux-exec.js";
@@ -17,6 +19,7 @@ import { SnapshotCapture } from "./domain/snapshot-capture.js";
17
19
  import { RestoreOrchestrator } from "./domain/restore-orchestrator.js";
18
20
  import { ClaudeResumeAdapter } from "./adapters/claude-resume.js";
19
21
  import { CodexResumeAdapter } from "./adapters/codex-resume.js";
22
+ import { PiResumeAdapter } from "./adapters/pi-resume.js";
20
23
  import { RigSpecExporter } from "./domain/rigspec-exporter.js";
21
24
  import { PodRepository } from "./domain/pod-repository.js";
22
25
  import { RigSpecPreflight } from "./domain/rigspec-preflight.js";
@@ -59,6 +62,7 @@ import { AskService } from "./domain/ask-service.js";
59
62
  import { ChatRepository } from "./domain/chat-repository.js";
60
63
  import { StreamStore } from "./domain/stream-store.js";
61
64
  import { QueueRepository } from "./domain/queue-repository.js";
65
+ import { createWorkflowFrontierPredicate } from "./domain/workflow-frontier-guard.js";
62
66
  import { InboxHandler } from "./domain/inbox-handler.js";
63
67
  import { OutboxHandler } from "./domain/outbox-handler.js";
64
68
  import { ProjectClassifier } from "./domain/project-classifier.js";
@@ -136,6 +140,13 @@ import { queueItemSummarySchema } from "./db/migrations/044_queue_item_summary.j
136
140
  import { resumeVerificationSchema } from "./db/migrations/045_resume_verification.js";
137
141
  import { seatIdentityVerdictsSchema } from "./db/migrations/046_seat_identity_verdicts.js";
138
142
  import { eventsNodeTypeIndexSchema } from "./db/migrations/047_events_node_type_index.js";
143
+ import { queueItemEvidenceRefSchema } from "./db/migrations/048_queue_item_evidence_ref.js";
144
+ import { workflowInstanceVersionSchema } from "./db/migrations/049_workflow_instance_version.js";
145
+ import { workflowSpecJsonSchema } from "./db/migrations/050_workflow_spec_json.js";
146
+ import { workflowResumeSchema } from "./db/migrations/051_workflow_resume.js";
147
+ import { workflowInstanceBoundRigSchema } from "./db/migrations/052_workflow_instance_bound_rig.js";
148
+ import { sessionsNodeIdIndexSchema } from "./db/migrations/053_sessions_node_id_index.js";
149
+ import { queueTransitionsArchiveSchema } from "./db/migrations/054_queue_transitions_archive.js";
139
150
  import { RigPolicyStore } from "./domain/rig-policy/rig-policy-store.js";
140
151
  import { MissionControlActionLog } from "./domain/mission-control/mission-control-action-log.js";
141
152
  import { MissionControlWriteContract } from "./domain/mission-control/mission-control-write-contract.js";
@@ -156,6 +167,15 @@ const KNOWN_PROVIDER_AUTH_ENV = new Set([
156
167
  "OPENAI_BASE_URL",
157
168
  "OPENAI_ORG_ID",
158
169
  "OPENAI_PROJECT_ID",
170
+ // OPR.0.4.6.PI1 FR-7 — Pi seat providers. Without these in the KNOWN set,
171
+ // a daemon-launched Pi seat can never receive its provider key (the
172
+ // pi-runner's own deny-by-default allowlist then has nothing to pass
173
+ // through). Double opt-in preserved: the operator must still name each var
174
+ // in recovery.provider_auth_env_allowlist. OpenRouter is the founder-ruled
175
+ // preferred path (2026-07-06); zai/kimi-coding are the secondary natives.
176
+ "OPENROUTER_API_KEY",
177
+ "ZAI_API_KEY",
178
+ "KIMI_API_KEY",
159
179
  ]);
160
180
  export function collectAllowlistedProviderAuthEnv(raw, env) {
161
181
  const out = {};
@@ -177,7 +197,7 @@ export function collectAllowlistedProviderAuthEnv(raw, env) {
177
197
  export async function createDaemon(opts) {
178
198
  const dbPath = opts?.dbPath ?? ":memory:";
179
199
  const db = createDb(dbPath);
180
- migrate(db, [coreSchema, bindingsSessionsSchema, eventsSchema, snapshotsSchema, checkpointsSchema, resumeMetadataSchema, nodeSpecFieldsSchema, packagesSchema, installJournalSchema, journalSeqSchema, bootstrapSchema, discoverySchema, discoveryFkFix, agentspecRebootSchema, startupContextSchema, chatMessagesSchema, podNamespaceSchema, contextUsageSchema, externalCliAttachmentSchema, rigServicesSchema, seatHandoverObservabilitySchema, nodeCodexConfigProfileSchema, streamItemsSchema, queueItemsSchema, queueTransitionsSchema, inboxEntriesSchema, outboxEntriesSchema, projectClassificationsSchema, classifierLeasesSchema, viewsCustomSchema, watchdogJobsSchema, watchdogHistorySchema, workflowSpecsSchema, workflowInstancesSchema, workflowStepTrailsSchema, watchdogPolicyEnumExtensionSchema, missionControlActionsSchema, workspacePrimitiveSchema, queueTargetRepoSchema, workflowSpecsDiagnosticSchema, rigPolicySchema, rigArchiveSchema, resumeProvenanceSchema, queueItemSummarySchema, resumeVerificationSchema, seatIdentityVerdictsSchema, eventsNodeTypeIndexSchema]);
200
+ migrate(db, [coreSchema, bindingsSessionsSchema, eventsSchema, snapshotsSchema, checkpointsSchema, resumeMetadataSchema, nodeSpecFieldsSchema, packagesSchema, installJournalSchema, journalSeqSchema, bootstrapSchema, discoverySchema, discoveryFkFix, agentspecRebootSchema, startupContextSchema, chatMessagesSchema, podNamespaceSchema, contextUsageSchema, externalCliAttachmentSchema, rigServicesSchema, seatHandoverObservabilitySchema, nodeCodexConfigProfileSchema, streamItemsSchema, queueItemsSchema, queueTransitionsSchema, inboxEntriesSchema, outboxEntriesSchema, projectClassificationsSchema, classifierLeasesSchema, viewsCustomSchema, watchdogJobsSchema, watchdogHistorySchema, workflowSpecsSchema, workflowInstancesSchema, workflowStepTrailsSchema, watchdogPolicyEnumExtensionSchema, missionControlActionsSchema, workspacePrimitiveSchema, queueTargetRepoSchema, workflowSpecsDiagnosticSchema, rigPolicySchema, rigArchiveSchema, resumeProvenanceSchema, queueItemSummarySchema, resumeVerificationSchema, seatIdentityVerdictsSchema, eventsNodeTypeIndexSchema, queueItemEvidenceRefSchema, workflowInstanceVersionSchema, workflowSpecJsonSchema, workflowResumeSchema, workflowInstanceBoundRigSchema, sessionsNodeIdIndexSchema, queueTransitionsArchiveSchema]);
181
201
  const rigRepo = new RigRepository(db);
182
202
  const sessionRegistry = new SessionRegistry(db);
183
203
  const eventBus = new EventBus(db);
@@ -185,17 +205,17 @@ export async function createDaemon(opts) {
185
205
  // Reject `<member>@<unknown-rig>` shapes by checking the rig portion
186
206
  // against the rig registry. Bare ids without `@` are also rejected
187
207
  // (no canonical rig binding).
188
- const isHumanSeatSessionRef = (sessionRef) => {
189
- return /^human(?:-[A-Za-z0-9._-]+)?@(kernel|host)$/.test(sessionRef);
190
- };
208
+ // OPR.0.4.6.MH1 FR-8: this gate is the ARCHETYPE consumer of the shared
209
+ // parse contract — human-seat classification BEFORE parse, then the
210
+ // greedy first-@ rig (so "member@rig@x" looks up rig "rig@x", misses,
211
+ // and rejects with the same unknown_destination_rig as ever — BR-1).
191
212
  const topologyValidateRig = (sessionRef) => {
192
213
  if (isHumanSeatSessionRef(sessionRef))
193
214
  return true;
194
- const m = /^[^@]+@(.+)$/.exec(sessionRef);
195
- if (!m)
215
+ const parsed = parseSessionName(sessionRef);
216
+ if (parsed.kind !== "canonical")
196
217
  return false;
197
- const rigName = m[1];
198
- return rigRepo.findRigsByName(rigName).length > 0;
218
+ return rigRepo.findRigsByName(parsed.rig).length > 0;
199
219
  };
200
220
  // PL-004 Phase A — shared coordination services. Constructed early so
201
221
  // both the queueRepo dep slot and inboxHandler can share one instance.
@@ -203,6 +223,10 @@ export async function createDaemon(opts) {
203
223
  // attachTransport().
204
224
  const queueRepoInstance = new QueueRepository(db, eventBus, {
205
225
  validateRig: topologyValidateRig,
226
+ // OPR.0.4.6.WF3 FR-6 — the frontier close-path guard's predicate,
227
+ // INJECTED here (arch layering pin: the queue never imports the
228
+ // workflow domain; startup wires them — the validateRig precedent).
229
+ workflowFrontierPredicate: createWorkflowFrontierPredicate(db),
206
230
  });
207
231
  // PL-004 Phase B — classifier lease manager. Constructed early so both
208
232
  // the leaseManager dep slot and project-classifier can share one instance.
@@ -285,6 +309,26 @@ export async function createDaemon(opts) {
285
309
  OPENRIG_ACTIVITY_HOOK_TOKEN: resolvedActivityHookToken,
286
310
  ...providerAuthEnv,
287
311
  };
312
+ // OPR.0.4.6.02 S1 — ONE shared tmux option-defaults applier, injected into
313
+ // BOTH NodeLauncher and (via AppDeps → the seat-handover route) the fresh
314
+ // successor launcher, so every fresh seat gets the same mouse/status/
315
+ // clipboard defaults and the server-scope defaults assert once per daemon
316
+ // lifetime (shared memo). The status-bar read resolves `terminal.status_bar`
317
+ // FRESH per launch (resolveOne re-reads the config file) so an operator flip
318
+ // applies to the NEXT launch without a daemon restart; a resolution failure
319
+ // falls back to off (bar hidden).
320
+ const tmuxOptionSettings = new ContextPackSettingsStore();
321
+ const tmuxOptionDefaults = new TmuxOptionDefaultsApplier({
322
+ tmuxAdapter,
323
+ readTmuxOptionDefaults: () => {
324
+ try {
325
+ return { statusBar: tmuxOptionSettings.resolveOne("terminal.status_bar").value === true };
326
+ }
327
+ catch {
328
+ return { statusBar: false };
329
+ }
330
+ },
331
+ });
288
332
  const nodeLauncher = new NodeLauncher({
289
333
  db,
290
334
  rigRepo,
@@ -293,12 +337,19 @@ export async function createDaemon(opts) {
293
337
  tmuxAdapter,
294
338
  transcriptStore,
295
339
  sessionEnv: launchSessionEnv,
340
+ tmuxOptionDefaults,
296
341
  });
297
342
  const snapshotRepo = new SnapshotRepository(db);
298
343
  const checkpointStore = new CheckpointStore(db);
299
344
  const snapshotCapture = new SnapshotCapture({ db, rigRepo, sessionRegistry, eventBus, snapshotRepo, checkpointStore });
300
345
  const claudeResume = new ClaudeResumeAdapter(tmuxAdapter);
301
346
  const codexResume = new CodexResumeAdapter(tmuxAdapter);
347
+ // OPR.0.4.6.PI1 — the Pi seat-state root + the compiled runner entry (daemon
348
+ // dist). Shared by the Pi runtime adapter, the resume adapter, and the
349
+ // resume-token capture sidecar reader.
350
+ const piStateRoot = nodePath.join(OPENRIG_HOME, "state", "pi");
351
+ const piRunnerEntryPath = nodePath.resolve(import.meta.dirname, "./adapters/pi-runner.js");
352
+ const piResume = new PiResumeAdapter(tmuxAdapter, { readFile: (p) => fs.readFileSync(p, "utf-8"), writeFile: (p, c) => fs.writeFileSync(p, c, "utf-8"), exists: (p) => fs.existsSync(p), mkdirp: (p) => fs.mkdirSync(p, { recursive: true }) }, { stateRoot: piStateRoot, runnerEntryPath: piRunnerEntryPath });
302
353
  // Services infrastructure (RigEnv) — created early so restore/bootstrap can use it
303
354
  const { ComposeServicesAdapter } = await import("./adapters/compose-services-adapter.js");
304
355
  const { ServiceOrchestrator } = await import("./domain/service-orchestrator.js");
@@ -306,7 +357,7 @@ export async function createDaemon(opts) {
306
357
  const serviceOrchestrator = new ServiceOrchestrator({ rigRepo, composeAdapter });
307
358
  const restoreOrchestrator = new RestoreOrchestrator({
308
359
  db, rigRepo, sessionRegistry, eventBus, snapshotRepo, snapshotCapture,
309
- checkpointStore, nodeLauncher, tmuxAdapter, claudeResume, codexResume,
360
+ checkpointStore, nodeLauncher, tmuxAdapter, claudeResume, codexResume, piResume,
310
361
  transcriptStore, serviceOrchestrator,
311
362
  });
312
363
  // Connect to cmux at startup — degrades gracefully if absent
@@ -403,6 +454,7 @@ export async function createDaemon(opts) {
403
454
  const { StartupOrchestrator } = await import("./domain/startup-orchestrator.js");
404
455
  const { ClaudeCodeAdapter } = await import("./adapters/claude-code-adapter.js");
405
456
  const { CodexRuntimeAdapter } = await import("./adapters/codex-runtime-adapter.js");
457
+ const { PiRuntimeAdapter } = await import("./adapters/pi-runtime-adapter.js");
406
458
  const startupOrchestrator = new StartupOrchestrator({ db, sessionRegistry, eventBus, tmuxAdapter, readFile: (p) => fs.readFileSync(p, "utf-8") });
407
459
  const runtimeSettings = new ContextPackSettingsStore().resolveConfig();
408
460
  const claudeAdapter = new ClaudeCodeAdapter({ tmux: tmuxAdapter, fsOps: { readFile: (p) => fs.readFileSync(p, "utf-8"), writeFile: (p, c) => fs.writeFileSync(p, c, "utf-8"), exists: (p) => fs.existsSync(p), mkdirp: (p) => fs.mkdirSync(p, { recursive: true }), copyFile: (src, dest) => fs.copyFileSync(src, dest), listFiles: (dir) => { const r = []; function w(d, pre) { for (const e of fs.readdirSync(d, { withFileTypes: true })) {
@@ -417,6 +469,14 @@ export async function createDaemon(opts) {
417
469
  else
418
470
  r.push(pre ? nodePath.join(pre, e.name) : e.name);
419
471
  } } w(dir, ""); return r; }, homedir: os.homedir() }, activityRelayPath: nodePath.resolve(import.meta.dirname, "../assets/plugins/openrig-core/hooks/scripts/activity-relay.cjs") });
472
+ // OPR.0.4.6.PI1 — the RPC-first Pi adapter (runner-in-a-pane). Same fsOps
473
+ // shape as the Codex adapter; seat isolation roots under piStateRoot.
474
+ const piAdapter = new PiRuntimeAdapter({ tmux: tmuxAdapter, fsOps: { readFile: (p) => fs.readFileSync(p, "utf-8"), writeFile: (p, c) => fs.writeFileSync(p, c, "utf-8"), exists: (p) => fs.existsSync(p), mkdirp: (p) => fs.mkdirSync(p, { recursive: true }), listFiles: (dir) => { const r = []; function w(d, pre) { for (const e of fs.readdirSync(d, { withFileTypes: true })) {
475
+ if (e.isDirectory())
476
+ w(nodePath.join(d, e.name), nodePath.join(pre, e.name));
477
+ else
478
+ r.push(pre ? nodePath.join(pre, e.name) : e.name);
479
+ } } w(dir, ""); return r; } }, stateRoot: piStateRoot, runnerEntryPath: piRunnerEntryPath });
420
480
  // plugin-primitive Phase 3a slice 3.5 — ensure Codex feature flag
421
481
  // codex_hooks = true is set in ~/.codex/config.toml so plugin-shipped
422
482
  // hooks fire on Codex runtime. Slice 27 also creates the default
@@ -578,7 +638,7 @@ export async function createDaemon(opts) {
578
638
  db, rigRepo, podRepo,
579
639
  sessionRegistry, eventBus, nodeLauncher, startupOrchestrator,
580
640
  fsOps: { readFile: (p) => fs.readFileSync(p, "utf-8"), exists: (p) => fs.existsSync(p) },
581
- adapters: { "claude-code": claudeAdapter, "codex": codexAdapter, "terminal": new (await import("./adapters/terminal-adapter.js")).TerminalAdapter() },
641
+ adapters: { "claude-code": claudeAdapter, "codex": codexAdapter, "pi": piAdapter, "terminal": new (await import("./adapters/terminal-adapter.js")).TerminalAdapter() },
582
642
  tmuxAdapter,
583
643
  contextPackLibrary,
584
644
  agentImageLibrary,
@@ -671,6 +731,8 @@ export async function createDaemon(opts) {
671
731
  // (Claude sidecar reader + Codex thread-id capturer, both reuse).
672
732
  contextUsageStore,
673
733
  resumeTokenCapturer: resumeMetadataRefresher,
734
+ // OPR.0.4.6.PI1 FR-6 — pi-runner sidecar reader (the adapter exposes it).
735
+ piRunnerStateStore: piAdapter,
674
736
  });
675
737
  const selfAttachService = new SelfAttachService({
676
738
  db, rigRepo, podRepo, sessionRegistry, eventBus, tmuxAdapter, transcriptStore,
@@ -708,6 +770,7 @@ export async function createDaemon(opts) {
708
770
  eventBus,
709
771
  nodeLauncher,
710
772
  tmuxAdapter,
773
+ tmuxOptionDefaults,
711
774
  sessionEnv: launchSessionEnv,
712
775
  cmuxAdapter,
713
776
  snapshotCapture,
@@ -735,7 +798,9 @@ export async function createDaemon(opts) {
735
798
  // queue/assignment state (non-inference contract; see slice 15 IMPL-PRD §2.3).
736
799
  seatActivityService,
737
800
  seatIdentityReconciler,
738
- psProjectionService: new PsProjectionService({ db, seatActivity: seatActivityService }),
801
+ // OPR.0.4.4.21 agentActivity feeds the rig-rollup attention
802
+ // predicate's needs_input signal (synchronous events lookup only).
803
+ psProjectionService: new PsProjectionService({ db, seatActivity: seatActivityService, agentActivity: agentActivityStore }),
739
804
  upRouter: new UpCommandRouter({
740
805
  fsOps: {
741
806
  exists: (p) => fs.existsSync(p),
@@ -748,7 +813,7 @@ export async function createDaemon(opts) {
748
813
  }),
749
814
  podInstantiator,
750
815
  podBundleSourceResolver,
751
- runtimeAdapters: { "claude-code": claudeAdapter, "codex": codexAdapter, "terminal": new (await import("./adapters/terminal-adapter.js")).TerminalAdapter() },
816
+ runtimeAdapters: { "claude-code": claudeAdapter, "codex": codexAdapter, "pi": piAdapter, "terminal": new (await import("./adapters/terminal-adapter.js")).TerminalAdapter() },
752
817
  transcriptStore,
753
818
  sessionTransport: (() => {
754
819
  const t = new SessionTransport({ db, rigRepo, sessionRegistry, tmuxAdapter, agentActivityStore, eventBus });
@@ -785,7 +850,7 @@ export async function createDaemon(opts) {
785
850
  watchdogJobsRepo: watchdogJobsRepoInstance,
786
851
  watchdogHistoryLog: watchdogHistoryLogInstance,
787
852
  askService: (() => {
788
- const psProjectionService = new PsProjectionService({ db });
853
+ const psProjectionService = new PsProjectionService({ db, agentActivity: agentActivityStore });
789
854
  const execDep = (cmd, args) => new Promise((resolve) => {
790
855
  execFile(cmd, args, { maxBuffer: 10 * 1024 * 1024 }, (err, stdout) => {
791
856
  if (err && typeof err.code === "string" && err.code === "ENOENT") {
@@ -929,13 +994,40 @@ export async function createDaemon(opts) {
929
994
  // slice IMPL § Write Set / § Driver Handoff Contract).
930
995
  const queueRepoForWorkflow = deps.queueRepo;
931
996
  let workflowRuntime;
997
+ let workflowExceptionEnsurer;
932
998
  if (queueRepoForWorkflow) {
933
999
  workflowRuntime = new WorkflowRuntime({
934
1000
  db,
935
1001
  eventBus,
936
1002
  queueRepo: queueRepoForWorkflow,
1003
+ // OPR.0.4.6.WF1 FR-3: instantiate/handoff auto-arm the
1004
+ // per-instance workflow-keepalive job in-txn; terminal disarms.
1005
+ watchdogJobsRepo: watchdogJobsRepoInstance,
1006
+ // OPR.0.4.6.WF5 FR-2: the maturity dial — host default read LIVE
1007
+ // per exception from the settings twin (dial flips affect future
1008
+ // items only, never retroactive re-routing).
1009
+ exceptionDial: {
1010
+ hostDefault: () => {
1011
+ const v = new ContextPackSettingsStore().resolveOne("workflow.exception_routing")
1012
+ .value;
1013
+ return v === "orchestrator" || v === "human_only" ? v : null;
1014
+ },
1015
+ humanFallbackSeat: "human@host",
1016
+ },
937
1017
  });
938
1018
  deps.workflowRuntime = workflowRuntime;
1019
+ // OPR.0.4.6.WF5 FR-2 class (b): the shared detection-time exception
1020
+ // ensurer — sweep + keepalive both call it; dedup by occurrence tags.
1021
+ {
1022
+ const { makeEnsureStuckExceptionItem } = await import("./domain/workflow-exception-escalation.js");
1023
+ workflowExceptionEnsurer = makeEnsureStuckExceptionItem({
1024
+ db,
1025
+ queueRepo: queueRepoForWorkflow,
1026
+ resolveRoute: (name, version, cls, boundRig) => workflowRuntime.resolveExceptionRouteFor(name, version, cls, boundRig),
1027
+ humanFallbackSeat: "human@host",
1028
+ log: (line) => console.log(line),
1029
+ });
1030
+ }
939
1031
  // Seed built-in starter workflow_specs into the cache. Idempotent
940
1032
  // + workspace-surface-respecting — operator
941
1033
  // overrides at workspace paths are preserved (skip-if-cached).
@@ -1164,6 +1256,109 @@ export async function createDaemon(opts) {
1164
1256
  });
1165
1257
  deps.sliceIndexer = sliceIndexer;
1166
1258
  deps.sliceDetailProjector = sliceDetailProjector;
1259
+ // Living Notes Packet 2 (OPR.0.4.4.20): the composed-review gatherer.
1260
+ // Git lineage facts come from OPENRIG_REVIEW_GIT_REPO when set; else
1261
+ // lineage degrades honestly to unknown.
1262
+ const { ReviewGatherer } = await import("./domain/review/gather.js");
1263
+ deps.reviewGatherer = new ReviewGatherer({
1264
+ db,
1265
+ indexer: sliceIndexer,
1266
+ gitRepoPath: process.env["OPENRIG_REVIEW_GIT_REPO"] ?? null,
1267
+ // OPR.0.4.4.22 FR-2: the agent state glyph reads recorded hook
1268
+ // activity (honest-unknown when absent) - synchronous, never polls.
1269
+ activityStore: agentActivityStore,
1270
+ });
1271
+ }
1272
+ // OPR.0.4.6.02 C3 — the terminal-provider-ride service (ONE composer for
1273
+ // every view kind). Built here (post-hoc) so it can read the lazily-built
1274
+ // reviewGatherer for derived mission/slice views; if the gatherer never
1275
+ // built, those scopes honestly return not-found rather than throwing.
1276
+ {
1277
+ const { TerminalService } = await import("./domain/terminal/terminal-service.js");
1278
+ const { HerdrAdapter } = await import("./domain/terminal/herdr-adapter.js");
1279
+ const { createHerdrSocketRpc, createHerdrSocketTransport } = await import("./domain/terminal/herdr-transport.js");
1280
+ const { CmuxProviderAdapter } = await import("./domain/terminal/cmux-provider-adapter.js");
1281
+ const { TerminalViewsStore } = await import("./domain/terminal/terminal-views-store.js");
1282
+ const { getNodeInventory } = await import("./domain/node-inventory.js");
1283
+ const { loadHostRegistry, resolveHost: resolveHostInRegistry } = await import("./domain/hosts/hosts-registry-reader.js");
1284
+ // NodeInventoryEntry → the composer's minimal LiveSeatRow (single-host
1285
+ // inventory: the canonical session name IS the tmux session; no host field).
1286
+ const toLiveSeatRow = (e) => ({
1287
+ canonicalSessionName: e.canonicalSessionName,
1288
+ attachmentType: e.attachmentType ?? null,
1289
+ tmuxSession: e.canonicalSessionName,
1290
+ rigName: e.rigName,
1291
+ logicalId: e.logicalId,
1292
+ });
1293
+ // Resolve a seat (canonical session name) → its rig + node, for the cmux facade.
1294
+ const resolveSeatNode = (seat) => {
1295
+ for (const rig of rigRepo.listRigs()) {
1296
+ for (const e of getNodeInventory(db, rig.id)) {
1297
+ if (e.canonicalSessionName === seat)
1298
+ return { rigId: rig.id, logicalId: e.logicalId };
1299
+ }
1300
+ }
1301
+ return null;
1302
+ };
1303
+ const herdrProvider = new HerdrAdapter({
1304
+ // FB4: herdr speaks its unix control socket (there is no `layout` CLI).
1305
+ transportFactory: createHerdrSocketTransport(createHerdrSocketRpc()),
1306
+ });
1307
+ const cmuxProvider = new CmuxProviderAdapter({ cmuxAdapter, nodeCmuxService, resolveSeatNode });
1308
+ const providerMap = {
1309
+ herdr: herdrProvider,
1310
+ cmux: cmuxProvider,
1311
+ };
1312
+ deps.terminalService = new TerminalService({
1313
+ resolveProvider: (name) => providerMap[name] ?? null,
1314
+ viewsStore: new TerminalViewsStore(),
1315
+ listRigSeats: (rigArg) => {
1316
+ const rigs = rigRepo.listRigs();
1317
+ const rig = rigs.find((r) => r.name === rigArg) ?? rigs.find((r) => r.id === rigArg);
1318
+ if (!rig)
1319
+ return null;
1320
+ return getNodeInventory(db, rig.id).map(toLiveSeatRow);
1321
+ },
1322
+ listPodSeats: (rigArg, pod) => {
1323
+ const rigs = rigRepo.listRigs();
1324
+ const rig = rigs.find((r) => r.name === rigArg) ?? rigs.find((r) => r.id === rigArg);
1325
+ if (!rig)
1326
+ return null;
1327
+ const rows = getNodeInventory(db, rig.id)
1328
+ .filter((e) => e.podNamespace === pod)
1329
+ .map(toLiveSeatRow);
1330
+ // No node carries that pod namespace → an unknown pod (not an empty view).
1331
+ return rows.length > 0 ? rows : null;
1332
+ },
1333
+ listScopeSeats: (scope) => {
1334
+ const gatherer = deps.reviewGatherer;
1335
+ if (!gatherer)
1336
+ return null;
1337
+ // N1 (dev44-driver2 pre-guard): cast to the real AgentsScope union (not
1338
+ // `never`) so the compile guard on the scope grammar is restored.
1339
+ const band = gatherer.composeAgents(scope);
1340
+ if (!band)
1341
+ return null;
1342
+ const wanted = new Set(band.rows.map((r) => r.sessionName));
1343
+ const rows = [];
1344
+ for (const rig of rigRepo.listRigs()) {
1345
+ for (const e of getNodeInventory(db, rig.id)) {
1346
+ if (e.canonicalSessionName && wanted.has(e.canonicalSessionName))
1347
+ rows.push(toLiveSeatRow(e));
1348
+ }
1349
+ }
1350
+ return rows;
1351
+ },
1352
+ listRigNames: () => rigRepo.listRigs().map((r) => r.name),
1353
+ resolveHost: (id) => {
1354
+ const res = loadHostRegistry();
1355
+ if (!res.ok)
1356
+ return null;
1357
+ const r = resolveHostInRegistry(res.registry, id);
1358
+ return r.ok ? r.host : null;
1359
+ },
1360
+ hasSession: (session) => tmuxAdapter.hasSession(session),
1361
+ });
1167
1362
  }
1168
1363
  // UI Enhancement Pack v0:
1169
1364
  // - file allowlist (item 3) from OPENRIG_FILES_ALLOWLIST
@@ -1255,7 +1450,13 @@ export async function createDaemon(opts) {
1255
1450
  // shared AgentActivityStore (constructed above, before the engine)
1256
1451
  // into one bounded wake. Wakes/flags only; cooldown via engine throttle.
1257
1452
  additionalPolicies: [
1258
- makeWorkflowKeepalivePolicy({ db }),
1453
+ makeWorkflowKeepalivePolicy({
1454
+ db,
1455
+ // OPR.0.4.6.WF5 FR-2 class (b): detection-time exception items,
1456
+ // dedup by occurrence; dial resolved via the runtime's cached
1457
+ // spec (never-lost fallback inside the helper).
1458
+ ensureStuckExceptionItem: workflowExceptionEnsurer,
1459
+ }),
1259
1460
  makeIdleGateQitemPolicy({ db, agentActivityStore }),
1260
1461
  ],
1261
1462
  });
@@ -1265,6 +1466,28 @@ export async function createDaemon(opts) {
1265
1466
  });
1266
1467
  deps.watchdogPolicyEngine = watchdogPolicyEngine;
1267
1468
  deps.watchdogScheduler = watchdogScheduler;
1469
+ // OPR.0.4.6.WF1 FR-4: the workflow startup resume sweep — re-arm
1470
+ // keepalives, reissue lost post-commit nudges (pending frontier
1471
+ // packets never nudged), surface stuck instances. Runs after the
1472
+ // watchdog + transport are wired so re-nudges actually deliver.
1473
+ // Failures are logged, never fatal: a sweep problem must not
1474
+ // bring the daemon down.
1475
+ if (workflowRuntime && queueRepoForWorkflow) {
1476
+ try {
1477
+ const { runWorkflowBootSweep } = await import("./domain/workflow-boot-sweep.js");
1478
+ await runWorkflowBootSweep({
1479
+ instanceStore: workflowRuntime.instanceStore,
1480
+ queueRepo: queueRepoForWorkflow,
1481
+ watchdogJobsRepo: watchdogJobsRepoInstance,
1482
+ log: (line) => console.log(line),
1483
+ // OPR.0.4.6.WF5 FR-2 class (b): the sweep leg of detection.
1484
+ ensureStuckExceptionItem: workflowExceptionEnsurer,
1485
+ });
1486
+ }
1487
+ catch (err) {
1488
+ console.warn(`workflow boot sweep: failed (non-fatal): ${err instanceof Error ? err.message : String(err)}`);
1489
+ }
1490
+ }
1268
1491
  }
1269
1492
  // Context monitor — constructed before createApp so routes can access pollOnce for refresh.
1270
1493
  // Caller (index.ts) starts polling after listen.
@@ -1279,6 +1502,7 @@ export async function createDaemon(opts) {
1279
1502
  const contextMonitor = new ContextMonitor(db, contextUsageStore, claudeAdapter, compactionEnforcer, {
1280
1503
  "claude-code": claudeAdapter,
1281
1504
  codex: codexAdapter,
1505
+ pi: piAdapter,
1282
1506
  });
1283
1507
  deps.contextMonitor = contextMonitor;
1284
1508
  // OPR.0.4.3.14 — expose the SAME enforcer instance to routes for the manual