@openrig/cli 0.4.4 → 0.4.7

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 (678) hide show
  1. package/daemon/assets/guidance/CULTURE-default.md +19 -0
  2. package/daemon/assets/guidance/openrig-start.md +20 -5
  3. package/daemon/assets/plugins/openrig-core/README.md +1 -1
  4. package/daemon/assets/plugins/openrig-core/skills/claude-compaction-restore/SKILL.md +9 -6
  5. package/daemon/assets/plugins/openrig-core/skills/claude-compaction-restore/scripts/precompact-hook.mjs +11 -72
  6. package/daemon/assets/plugins/openrig-core/skills/forming-an-openrig-mental-model/SKILL.md +34 -22
  7. package/daemon/assets/plugins/openrig-core/skills/messaging-the-human/SKILL.md +108 -0
  8. package/daemon/assets/plugins/openrig-core/skills/mission-slice-sop/SKILL.md +11 -16
  9. package/daemon/assets/plugins/openrig-core/skills/openrig-skills/SKILL.md +95 -0
  10. package/daemon/assets/plugins/openrig-core/skills/openrig-user/SKILL.md +819 -101
  11. package/daemon/assets/plugins/openrig-core/skills/queue-handoff/SKILL.md +26 -9
  12. package/daemon/assets/plugins/openrig-core/skills/seat-continuity-and-handover/SKILL.md +11 -9
  13. package/daemon/assets/plugins/openrig-core/skills/session-compaction-and-restore/SKILL.md +162 -0
  14. package/daemon/assets/plugins/openrig-core/skills/software-for-agents/SKILL.md +165 -0
  15. package/daemon/dist/adapters/cmux-transport.d.ts.map +1 -1
  16. package/daemon/dist/adapters/cmux-transport.js +8 -1
  17. package/daemon/dist/adapters/cmux-transport.js.map +1 -1
  18. package/daemon/dist/adapters/cmux.d.ts +9 -0
  19. package/daemon/dist/adapters/cmux.d.ts.map +1 -1
  20. package/daemon/dist/adapters/cmux.js +21 -0
  21. package/daemon/dist/adapters/cmux.js.map +1 -1
  22. package/daemon/dist/adapters/codex-runtime-adapter.d.ts +3 -0
  23. package/daemon/dist/adapters/codex-runtime-adapter.d.ts.map +1 -1
  24. package/daemon/dist/adapters/codex-runtime-adapter.js +32 -12
  25. package/daemon/dist/adapters/codex-runtime-adapter.js.map +1 -1
  26. package/daemon/dist/adapters/pi-resume.d.ts +32 -0
  27. package/daemon/dist/adapters/pi-resume.d.ts.map +1 -0
  28. package/daemon/dist/adapters/pi-resume.js +125 -0
  29. package/daemon/dist/adapters/pi-resume.js.map +1 -0
  30. package/daemon/dist/adapters/pi-runner-protocol.d.ts +88 -0
  31. package/daemon/dist/adapters/pi-runner-protocol.d.ts.map +1 -0
  32. package/daemon/dist/adapters/pi-runner-protocol.js +153 -0
  33. package/daemon/dist/adapters/pi-runner-protocol.js.map +1 -0
  34. package/daemon/dist/adapters/pi-runner.d.ts +99 -0
  35. package/daemon/dist/adapters/pi-runner.d.ts.map +1 -0
  36. package/daemon/dist/adapters/pi-runner.js +519 -0
  37. package/daemon/dist/adapters/pi-runner.js.map +1 -0
  38. package/daemon/dist/adapters/pi-runtime-adapter.d.ts +61 -0
  39. package/daemon/dist/adapters/pi-runtime-adapter.d.ts.map +1 -0
  40. package/daemon/dist/adapters/pi-runtime-adapter.js +356 -0
  41. package/daemon/dist/adapters/pi-runtime-adapter.js.map +1 -0
  42. package/daemon/dist/adapters/tmux.d.ts +22 -1
  43. package/daemon/dist/adapters/tmux.d.ts.map +1 -1
  44. package/daemon/dist/adapters/tmux.js +40 -1
  45. package/daemon/dist/adapters/tmux.js.map +1 -1
  46. package/daemon/dist/build-info.js +3 -3
  47. package/daemon/dist/builtins/workflow-specs/branched-remediation.yaml +31 -0
  48. package/daemon/dist/builtins/workflow-specs/factory-rsi.yaml +152 -0
  49. package/daemon/dist/builtins/workflow-specs/gated-release.yaml +26 -0
  50. package/daemon/dist/builtins/workflow-specs/linear-build.yaml +21 -0
  51. package/daemon/dist/db/migrations/049_workflow_instance_version.d.ts +20 -0
  52. package/daemon/dist/db/migrations/049_workflow_instance_version.d.ts.map +1 -0
  53. package/daemon/dist/db/migrations/049_workflow_instance_version.js +24 -0
  54. package/daemon/dist/db/migrations/049_workflow_instance_version.js.map +1 -0
  55. package/daemon/dist/db/migrations/050_workflow_spec_json.d.ts +22 -0
  56. package/daemon/dist/db/migrations/050_workflow_spec_json.d.ts.map +1 -0
  57. package/daemon/dist/db/migrations/050_workflow_spec_json.js +26 -0
  58. package/daemon/dist/db/migrations/050_workflow_spec_json.js.map +1 -0
  59. package/daemon/dist/db/migrations/051_workflow_resume.d.ts +22 -0
  60. package/daemon/dist/db/migrations/051_workflow_resume.d.ts.map +1 -0
  61. package/daemon/dist/db/migrations/051_workflow_resume.js +27 -0
  62. package/daemon/dist/db/migrations/051_workflow_resume.js.map +1 -0
  63. package/daemon/dist/db/migrations/052_workflow_instance_bound_rig.d.ts +26 -0
  64. package/daemon/dist/db/migrations/052_workflow_instance_bound_rig.d.ts.map +1 -0
  65. package/daemon/dist/db/migrations/052_workflow_instance_bound_rig.js +30 -0
  66. package/daemon/dist/db/migrations/052_workflow_instance_bound_rig.js.map +1 -0
  67. package/daemon/dist/db/migrations/053_sessions_node_id_index.d.ts +48 -0
  68. package/daemon/dist/db/migrations/053_sessions_node_id_index.d.ts.map +1 -0
  69. package/daemon/dist/db/migrations/053_sessions_node_id_index.js +53 -0
  70. package/daemon/dist/db/migrations/053_sessions_node_id_index.js.map +1 -0
  71. package/daemon/dist/db/migrations/054_queue_transitions_archive.d.ts +34 -0
  72. package/daemon/dist/db/migrations/054_queue_transitions_archive.d.ts.map +1 -0
  73. package/daemon/dist/db/migrations/054_queue_transitions_archive.js +49 -0
  74. package/daemon/dist/db/migrations/054_queue_transitions_archive.js.map +1 -0
  75. package/daemon/dist/domain/claim-service.d.ts +11 -0
  76. package/daemon/dist/domain/claim-service.d.ts.map +1 -1
  77. package/daemon/dist/domain/claim-service.js +3 -1
  78. package/daemon/dist/domain/claim-service.js.map +1 -1
  79. package/daemon/dist/domain/claude-compaction-enforcer.d.ts +3 -0
  80. package/daemon/dist/domain/claude-compaction-enforcer.d.ts.map +1 -1
  81. package/daemon/dist/domain/claude-compaction-enforcer.js +19 -3
  82. package/daemon/dist/domain/claude-compaction-enforcer.js.map +1 -1
  83. package/daemon/dist/domain/cmux-layout-service.d.ts +36 -0
  84. package/daemon/dist/domain/cmux-layout-service.d.ts.map +1 -1
  85. package/daemon/dist/domain/cmux-layout-service.js +100 -28
  86. package/daemon/dist/domain/cmux-layout-service.js.map +1 -1
  87. package/daemon/dist/domain/context-monitor.d.ts +2 -0
  88. package/daemon/dist/domain/context-monitor.d.ts.map +1 -1
  89. package/daemon/dist/domain/context-monitor.js +14 -0
  90. package/daemon/dist/domain/context-monitor.js.map +1 -1
  91. package/daemon/dist/domain/discovery-types.d.ts +1 -1
  92. package/daemon/dist/domain/discovery-types.d.ts.map +1 -1
  93. package/daemon/dist/domain/feed/attention-aggregator.js +1 -1
  94. package/daemon/dist/domain/feed/attention-aggregator.js.map +1 -1
  95. package/daemon/dist/domain/hosts/hosts-registry-reader.d.ts +1 -0
  96. package/daemon/dist/domain/hosts/hosts-registry-reader.d.ts.map +1 -1
  97. package/daemon/dist/domain/hosts/hosts-registry-reader.js +31 -10
  98. package/daemon/dist/domain/hosts/hosts-registry-reader.js.map +1 -1
  99. package/daemon/dist/domain/hosts/hosts-registry-writer.d.ts +11 -0
  100. package/daemon/dist/domain/hosts/hosts-registry-writer.d.ts.map +1 -0
  101. package/daemon/dist/domain/hosts/hosts-registry-writer.js +55 -0
  102. package/daemon/dist/domain/hosts/hosts-registry-writer.js.map +1 -0
  103. package/daemon/dist/domain/hosts/read-through.d.ts +28 -0
  104. package/daemon/dist/domain/hosts/read-through.d.ts.map +1 -0
  105. package/daemon/dist/domain/hosts/read-through.js +139 -0
  106. package/daemon/dist/domain/hosts/read-through.js.map +1 -0
  107. package/daemon/dist/domain/hosts/remote-daemon-http.d.ts +21 -0
  108. package/daemon/dist/domain/hosts/remote-daemon-http.d.ts.map +1 -1
  109. package/daemon/dist/domain/hosts/remote-daemon-http.js +56 -4
  110. package/daemon/dist/domain/hosts/remote-daemon-http.js.map +1 -1
  111. package/daemon/dist/domain/node-inventory.d.ts +10 -1
  112. package/daemon/dist/domain/node-inventory.d.ts.map +1 -1
  113. package/daemon/dist/domain/node-inventory.js +250 -97
  114. package/daemon/dist/domain/node-inventory.js.map +1 -1
  115. package/daemon/dist/domain/node-launcher.d.ts +11 -0
  116. package/daemon/dist/domain/node-launcher.d.ts.map +1 -1
  117. package/daemon/dist/domain/node-launcher.js +10 -0
  118. package/daemon/dist/domain/node-launcher.js.map +1 -1
  119. package/daemon/dist/domain/plugin-vendor-service.d.ts +2 -0
  120. package/daemon/dist/domain/plugin-vendor-service.d.ts.map +1 -1
  121. package/daemon/dist/domain/plugin-vendor-service.js +23 -0
  122. package/daemon/dist/domain/plugin-vendor-service.js.map +1 -1
  123. package/daemon/dist/domain/policies/workflow-keepalive.d.ts +7 -0
  124. package/daemon/dist/domain/policies/workflow-keepalive.d.ts.map +1 -1
  125. package/daemon/dist/domain/policies/workflow-keepalive.js +93 -13
  126. package/daemon/dist/domain/policies/workflow-keepalive.js.map +1 -1
  127. package/daemon/dist/domain/projection-lane.d.ts +7 -0
  128. package/daemon/dist/domain/projection-lane.d.ts.map +1 -0
  129. package/daemon/dist/domain/projection-lane.js +28 -0
  130. package/daemon/dist/domain/projection-lane.js.map +1 -0
  131. package/daemon/dist/domain/ps-projection.d.ts +19 -0
  132. package/daemon/dist/domain/ps-projection.d.ts.map +1 -1
  133. package/daemon/dist/domain/ps-projection.js +81 -30
  134. package/daemon/dist/domain/ps-projection.js.map +1 -1
  135. package/daemon/dist/domain/queue-repository.d.ts +116 -7
  136. package/daemon/dist/domain/queue-repository.d.ts.map +1 -1
  137. package/daemon/dist/domain/queue-repository.js +226 -16
  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/compose.d.ts +127 -5
  156. package/daemon/dist/domain/review/compose.d.ts.map +1 -1
  157. package/daemon/dist/domain/review/compose.js +244 -19
  158. package/daemon/dist/domain/review/compose.js.map +1 -1
  159. package/daemon/dist/domain/review/fleet-compose.d.ts +52 -0
  160. package/daemon/dist/domain/review/fleet-compose.d.ts.map +1 -0
  161. package/daemon/dist/domain/review/fleet-compose.js +294 -0
  162. package/daemon/dist/domain/review/fleet-compose.js.map +1 -0
  163. package/daemon/dist/domain/review/gather.d.ts +17 -2
  164. package/daemon/dist/domain/review/gather.d.ts.map +1 -1
  165. package/daemon/dist/domain/review/gather.js +269 -108
  166. package/daemon/dist/domain/review/gather.js.map +1 -1
  167. package/daemon/dist/domain/review/proof-io.d.ts +2 -0
  168. package/daemon/dist/domain/review/proof-io.d.ts.map +1 -0
  169. package/daemon/dist/domain/review/proof-io.js +38 -0
  170. package/daemon/dist/domain/review/proof-io.js.map +1 -0
  171. package/daemon/dist/domain/review/types.d.ts +104 -1
  172. package/daemon/dist/domain/review/types.d.ts.map +1 -1
  173. package/daemon/dist/domain/rig-expansion-service.d.ts.map +1 -1
  174. package/daemon/dist/domain/rig-expansion-service.js +3 -0
  175. package/daemon/dist/domain/rig-expansion-service.js.map +1 -1
  176. package/daemon/dist/domain/rig-repository.d.ts +7 -6
  177. package/daemon/dist/domain/rig-repository.d.ts.map +1 -1
  178. package/daemon/dist/domain/rig-repository.js +33 -11
  179. package/daemon/dist/domain/rig-repository.js.map +1 -1
  180. package/daemon/dist/domain/rigspec-codec.d.ts.map +1 -1
  181. package/daemon/dist/domain/rigspec-codec.js +3 -0
  182. package/daemon/dist/domain/rigspec-codec.js.map +1 -1
  183. package/daemon/dist/domain/rigspec-exporter.d.ts.map +1 -1
  184. package/daemon/dist/domain/rigspec-exporter.js +4 -0
  185. package/daemon/dist/domain/rigspec-exporter.js.map +1 -1
  186. package/daemon/dist/domain/rigspec-instantiator.d.ts.map +1 -1
  187. package/daemon/dist/domain/rigspec-instantiator.js +26 -2
  188. package/daemon/dist/domain/rigspec-instantiator.js.map +1 -1
  189. package/daemon/dist/domain/rigspec-preflight.d.ts +6 -0
  190. package/daemon/dist/domain/rigspec-preflight.d.ts.map +1 -1
  191. package/daemon/dist/domain/rigspec-preflight.js +26 -1
  192. package/daemon/dist/domain/rigspec-preflight.js.map +1 -1
  193. package/daemon/dist/domain/rigspec-schema.d.ts.map +1 -1
  194. package/daemon/dist/domain/rigspec-schema.js +20 -1
  195. package/daemon/dist/domain/rigspec-schema.js.map +1 -1
  196. package/daemon/dist/domain/runtime-verifier.d.ts +7 -1
  197. package/daemon/dist/domain/runtime-verifier.d.ts.map +1 -1
  198. package/daemon/dist/domain/runtime-verifier.js +39 -1
  199. package/daemon/dist/domain/runtime-verifier.js.map +1 -1
  200. package/daemon/dist/domain/scope/plan-lock-artifacts.d.ts +8 -0
  201. package/daemon/dist/domain/scope/plan-lock-artifacts.d.ts.map +1 -0
  202. package/daemon/dist/domain/scope/plan-lock-artifacts.js +57 -0
  203. package/daemon/dist/domain/scope/plan-lock-artifacts.js.map +1 -0
  204. package/daemon/dist/domain/scope/scaffold-placeholder.d.ts +38 -0
  205. package/daemon/dist/domain/scope/scaffold-placeholder.d.ts.map +1 -0
  206. package/daemon/dist/domain/scope/scaffold-placeholder.js +98 -0
  207. package/daemon/dist/domain/scope/scaffold-placeholder.js.map +1 -0
  208. package/daemon/dist/domain/scope/scope-approve.d.ts.map +1 -1
  209. package/daemon/dist/domain/scope/scope-approve.js +22 -1
  210. package/daemon/dist/domain/scope/scope-approve.js.map +1 -1
  211. package/daemon/dist/domain/scope/scope-audit.d.ts.map +1 -1
  212. package/daemon/dist/domain/scope/scope-audit.js +57 -20
  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/session-transport.d.ts +17 -0
  230. package/daemon/dist/domain/session-transport.d.ts.map +1 -1
  231. package/daemon/dist/domain/session-transport.js +44 -0
  232. package/daemon/dist/domain/session-transport.js.map +1 -1
  233. package/daemon/dist/domain/slices/qitem-membership.d.ts +17 -0
  234. package/daemon/dist/domain/slices/qitem-membership.d.ts.map +1 -0
  235. package/daemon/dist/domain/slices/qitem-membership.js +60 -0
  236. package/daemon/dist/domain/slices/qitem-membership.js.map +1 -0
  237. package/daemon/dist/domain/slices/slice-detail-projector.d.ts +5 -0
  238. package/daemon/dist/domain/slices/slice-detail-projector.d.ts.map +1 -1
  239. package/daemon/dist/domain/slices/slice-detail-projector.js +161 -16
  240. package/daemon/dist/domain/slices/slice-detail-projector.js.map +1 -1
  241. package/daemon/dist/domain/slices/slice-indexer.d.ts +86 -0
  242. package/daemon/dist/domain/slices/slice-indexer.d.ts.map +1 -1
  243. package/daemon/dist/domain/slices/slice-indexer.js +422 -45
  244. package/daemon/dist/domain/slices/slice-indexer.js.map +1 -1
  245. package/daemon/dist/domain/spec-library-workflow-scanner.d.ts +18 -2
  246. package/daemon/dist/domain/spec-library-workflow-scanner.d.ts.map +1 -1
  247. package/daemon/dist/domain/spec-library-workflow-scanner.js +23 -1
  248. package/daemon/dist/domain/spec-library-workflow-scanner.js.map +1 -1
  249. package/daemon/dist/domain/startup-orchestrator.d.ts +9 -0
  250. package/daemon/dist/domain/startup-orchestrator.d.ts.map +1 -1
  251. package/daemon/dist/domain/startup-orchestrator.js +71 -3
  252. package/daemon/dist/domain/startup-orchestrator.js.map +1 -1
  253. package/daemon/dist/domain/startup-proof.d.ts +10 -6
  254. package/daemon/dist/domain/startup-proof.d.ts.map +1 -1
  255. package/daemon/dist/domain/startup-proof.js +35 -7
  256. package/daemon/dist/domain/startup-proof.js.map +1 -1
  257. package/daemon/dist/domain/successor-session-launcher.d.ts +16 -0
  258. package/daemon/dist/domain/successor-session-launcher.d.ts.map +1 -1
  259. package/daemon/dist/domain/successor-session-launcher.js +13 -0
  260. package/daemon/dist/domain/successor-session-launcher.js.map +1 -1
  261. package/daemon/dist/domain/terminal/cmux-provider-adapter.d.ts +28 -0
  262. package/daemon/dist/domain/terminal/cmux-provider-adapter.d.ts.map +1 -0
  263. package/daemon/dist/domain/terminal/cmux-provider-adapter.js +100 -0
  264. package/daemon/dist/domain/terminal/cmux-provider-adapter.js.map +1 -0
  265. package/daemon/dist/domain/terminal/herdr-adapter.d.ts +94 -0
  266. package/daemon/dist/domain/terminal/herdr-adapter.d.ts.map +1 -0
  267. package/daemon/dist/domain/terminal/herdr-adapter.js +307 -0
  268. package/daemon/dist/domain/terminal/herdr-adapter.js.map +1 -0
  269. package/daemon/dist/domain/terminal/herdr-transport.d.ts +50 -0
  270. package/daemon/dist/domain/terminal/herdr-transport.d.ts.map +1 -0
  271. package/daemon/dist/domain/terminal/herdr-transport.js +145 -0
  272. package/daemon/dist/domain/terminal/herdr-transport.js.map +1 -0
  273. package/daemon/dist/domain/terminal/terminal-provider.d.ts +88 -0
  274. package/daemon/dist/domain/terminal/terminal-provider.d.ts.map +1 -0
  275. package/daemon/dist/domain/terminal/terminal-provider.js +17 -0
  276. package/daemon/dist/domain/terminal/terminal-provider.js.map +1 -0
  277. package/daemon/dist/domain/terminal/terminal-service.d.ts +60 -0
  278. package/daemon/dist/domain/terminal/terminal-service.d.ts.map +1 -0
  279. package/daemon/dist/domain/terminal/terminal-service.js +174 -0
  280. package/daemon/dist/domain/terminal/terminal-service.js.map +1 -0
  281. package/daemon/dist/domain/terminal/terminal-views-store.d.ts +77 -0
  282. package/daemon/dist/domain/terminal/terminal-views-store.d.ts.map +1 -0
  283. package/daemon/dist/domain/terminal/terminal-views-store.js +146 -0
  284. package/daemon/dist/domain/terminal/terminal-views-store.js.map +1 -0
  285. package/daemon/dist/domain/terminal/view-composer.d.ts +42 -0
  286. package/daemon/dist/domain/terminal/view-composer.d.ts.map +1 -0
  287. package/daemon/dist/domain/terminal/view-composer.js +137 -0
  288. package/daemon/dist/domain/terminal/view-composer.js.map +1 -0
  289. package/daemon/dist/domain/tmux-option-defaults.d.ts +89 -0
  290. package/daemon/dist/domain/tmux-option-defaults.d.ts.map +1 -0
  291. package/daemon/dist/domain/tmux-option-defaults.js +132 -0
  292. package/daemon/dist/domain/tmux-option-defaults.js.map +1 -0
  293. package/daemon/dist/domain/transcript-capture.d.ts +3 -0
  294. package/daemon/dist/domain/transcript-capture.d.ts.map +1 -1
  295. package/daemon/dist/domain/transcript-capture.js +28 -0
  296. package/daemon/dist/domain/transcript-capture.js.map +1 -1
  297. package/daemon/dist/domain/transcript-store.d.ts +10 -0
  298. package/daemon/dist/domain/transcript-store.d.ts.map +1 -1
  299. package/daemon/dist/domain/transcript-store.js +26 -0
  300. package/daemon/dist/domain/transcript-store.js.map +1 -1
  301. package/daemon/dist/domain/types.d.ts +38 -1
  302. package/daemon/dist/domain/types.d.ts.map +1 -1
  303. package/daemon/dist/domain/types.js.map +1 -1
  304. package/daemon/dist/domain/user-settings/settings-store.d.ts +1 -1
  305. package/daemon/dist/domain/user-settings/settings-store.d.ts.map +1 -1
  306. package/daemon/dist/domain/user-settings/settings-store.js +92 -0
  307. package/daemon/dist/domain/user-settings/settings-store.js.map +1 -1
  308. package/daemon/dist/domain/workflow/slice-workflow-projection.d.ts.map +1 -1
  309. package/daemon/dist/domain/workflow/slice-workflow-projection.js +6 -2
  310. package/daemon/dist/domain/workflow/slice-workflow-projection.js.map +1 -1
  311. package/daemon/dist/domain/workflow-boot-sweep.d.ts +28 -0
  312. package/daemon/dist/domain/workflow-boot-sweep.d.ts.map +1 -0
  313. package/daemon/dist/domain/workflow-boot-sweep.js +102 -0
  314. package/daemon/dist/domain/workflow-boot-sweep.js.map +1 -0
  315. package/daemon/dist/domain/workflow-deadline.d.ts +74 -0
  316. package/daemon/dist/domain/workflow-deadline.d.ts.map +1 -0
  317. package/daemon/dist/domain/workflow-deadline.js +165 -0
  318. package/daemon/dist/domain/workflow-deadline.js.map +1 -0
  319. package/daemon/dist/domain/workflow-exception-escalation.d.ts +33 -0
  320. package/daemon/dist/domain/workflow-exception-escalation.d.ts.map +1 -0
  321. package/daemon/dist/domain/workflow-exception-escalation.js +104 -0
  322. package/daemon/dist/domain/workflow-exception-escalation.js.map +1 -0
  323. package/daemon/dist/domain/workflow-exception-router.d.ts +33 -0
  324. package/daemon/dist/domain/workflow-exception-router.d.ts.map +1 -0
  325. package/daemon/dist/domain/workflow-exception-router.js +96 -0
  326. package/daemon/dist/domain/workflow-exception-router.js.map +1 -0
  327. package/daemon/dist/domain/workflow-exception.d.ts +90 -0
  328. package/daemon/dist/domain/workflow-exception.d.ts.map +1 -0
  329. package/daemon/dist/domain/workflow-exception.js +122 -0
  330. package/daemon/dist/domain/workflow-exception.js.map +1 -0
  331. package/daemon/dist/domain/workflow-frontier-guard.d.ts +24 -0
  332. package/daemon/dist/domain/workflow-frontier-guard.d.ts.map +1 -0
  333. package/daemon/dist/domain/workflow-frontier-guard.js +30 -0
  334. package/daemon/dist/domain/workflow-frontier-guard.js.map +1 -0
  335. package/daemon/dist/domain/workflow-instance-store.d.ts +28 -0
  336. package/daemon/dist/domain/workflow-instance-store.d.ts.map +1 -1
  337. package/daemon/dist/domain/workflow-instance-store.js +66 -10
  338. package/daemon/dist/domain/workflow-instance-store.js.map +1 -1
  339. package/daemon/dist/domain/workflow-keepalive-arming.d.ts +35 -0
  340. package/daemon/dist/domain/workflow-keepalive-arming.d.ts.map +1 -0
  341. package/daemon/dist/domain/workflow-keepalive-arming.js +87 -0
  342. package/daemon/dist/domain/workflow-keepalive-arming.js.map +1 -0
  343. package/daemon/dist/domain/workflow-projector.d.ts +117 -2
  344. package/daemon/dist/domain/workflow-projector.d.ts.map +1 -1
  345. package/daemon/dist/domain/workflow-projector.js +672 -41
  346. package/daemon/dist/domain/workflow-projector.js.map +1 -1
  347. package/daemon/dist/domain/workflow-role-context.d.ts +57 -0
  348. package/daemon/dist/domain/workflow-role-context.d.ts.map +1 -0
  349. package/daemon/dist/domain/workflow-role-context.js +120 -0
  350. package/daemon/dist/domain/workflow-role-context.js.map +1 -0
  351. package/daemon/dist/domain/workflow-role-resolver.d.ts +65 -0
  352. package/daemon/dist/domain/workflow-role-resolver.d.ts.map +1 -0
  353. package/daemon/dist/domain/workflow-role-resolver.js +108 -0
  354. package/daemon/dist/domain/workflow-role-resolver.js.map +1 -0
  355. package/daemon/dist/domain/workflow-runtime.d.ts +157 -1
  356. package/daemon/dist/domain/workflow-runtime.d.ts.map +1 -1
  357. package/daemon/dist/domain/workflow-runtime.js +718 -11
  358. package/daemon/dist/domain/workflow-runtime.js.map +1 -1
  359. package/daemon/dist/domain/workflow-spec-cache.d.ts +26 -1
  360. package/daemon/dist/domain/workflow-spec-cache.d.ts.map +1 -1
  361. package/daemon/dist/domain/workflow-spec-cache.js +327 -13
  362. package/daemon/dist/domain/workflow-spec-cache.js.map +1 -1
  363. package/daemon/dist/domain/workflow-types.d.ts +143 -8
  364. package/daemon/dist/domain/workflow-types.d.ts.map +1 -1
  365. package/daemon/dist/domain/workflow-types.js +14 -1
  366. package/daemon/dist/domain/workflow-types.js.map +1 -1
  367. package/daemon/dist/domain/workflow-validator.d.ts +11 -1
  368. package/daemon/dist/domain/workflow-validator.d.ts.map +1 -1
  369. package/daemon/dist/domain/workflow-validator.js +246 -1
  370. package/daemon/dist/domain/workflow-validator.js.map +1 -1
  371. package/daemon/dist/domain/workspace/default-workspace-scaffold.d.ts.map +1 -1
  372. package/daemon/dist/domain/workspace/default-workspace-scaffold.js +9 -4
  373. package/daemon/dist/domain/workspace/default-workspace-scaffold.js.map +1 -1
  374. package/daemon/dist/domain/workspace/workspace-doctor.js +1 -1
  375. package/daemon/dist/domain/workspace/workspace-doctor.js.map +1 -1
  376. package/daemon/dist/index.d.ts +17 -0
  377. package/daemon/dist/index.d.ts.map +1 -1
  378. package/daemon/dist/index.js +44 -0
  379. package/daemon/dist/index.js.map +1 -1
  380. package/daemon/dist/routes/activity.js +22 -0
  381. package/daemon/dist/routes/activity.js.map +1 -1
  382. package/daemon/dist/routes/hosts.d.ts +5 -0
  383. package/daemon/dist/routes/hosts.d.ts.map +1 -0
  384. package/daemon/dist/routes/hosts.js +346 -0
  385. package/daemon/dist/routes/hosts.js.map +1 -0
  386. package/daemon/dist/routes/mission-control.js +1 -1
  387. package/daemon/dist/routes/mission-control.js.map +1 -1
  388. package/daemon/dist/routes/missions.d.ts +7 -0
  389. package/daemon/dist/routes/missions.d.ts.map +1 -1
  390. package/daemon/dist/routes/missions.js +6 -1
  391. package/daemon/dist/routes/missions.js.map +1 -1
  392. package/daemon/dist/routes/ps.d.ts.map +1 -1
  393. package/daemon/dist/routes/ps.js +5 -1
  394. package/daemon/dist/routes/ps.js.map +1 -1
  395. package/daemon/dist/routes/queue.d.ts +2 -7
  396. package/daemon/dist/routes/queue.d.ts.map +1 -1
  397. package/daemon/dist/routes/queue.js +272 -10
  398. package/daemon/dist/routes/queue.js.map +1 -1
  399. package/daemon/dist/routes/review.d.ts.map +1 -1
  400. package/daemon/dist/routes/review.js +26 -0
  401. package/daemon/dist/routes/review.js.map +1 -1
  402. package/daemon/dist/routes/rigs.d.ts.map +1 -1
  403. package/daemon/dist/routes/rigs.js +21 -10
  404. package/daemon/dist/routes/rigs.js.map +1 -1
  405. package/daemon/dist/routes/scope-audit.d.ts.map +1 -1
  406. package/daemon/dist/routes/scope-audit.js +141 -135
  407. package/daemon/dist/routes/scope-audit.js.map +1 -1
  408. package/daemon/dist/routes/seat.js +13 -0
  409. package/daemon/dist/routes/seat.js.map +1 -1
  410. package/daemon/dist/routes/sessions.js +2 -1
  411. package/daemon/dist/routes/sessions.js.map +1 -1
  412. package/daemon/dist/routes/slices.d.ts.map +1 -1
  413. package/daemon/dist/routes/slices.js +48 -38
  414. package/daemon/dist/routes/slices.js.map +1 -1
  415. package/daemon/dist/routes/terminal.d.ts +11 -0
  416. package/daemon/dist/routes/terminal.d.ts.map +1 -0
  417. package/daemon/dist/routes/terminal.js +104 -0
  418. package/daemon/dist/routes/terminal.js.map +1 -0
  419. package/daemon/dist/routes/transcripts.d.ts.map +1 -1
  420. package/daemon/dist/routes/transcripts.js +62 -33
  421. package/daemon/dist/routes/transcripts.js.map +1 -1
  422. package/daemon/dist/routes/workflow.d.ts.map +1 -1
  423. package/daemon/dist/routes/workflow.js +102 -10
  424. package/daemon/dist/routes/workflow.js.map +1 -1
  425. package/daemon/dist/server.d.ts +5 -0
  426. package/daemon/dist/server.d.ts.map +1 -1
  427. package/daemon/dist/server.js +22 -0
  428. package/daemon/dist/server.js.map +1 -1
  429. package/daemon/dist/startup.d.ts.map +1 -1
  430. package/daemon/dist/startup.js +235 -12
  431. package/daemon/dist/startup.js.map +1 -1
  432. package/daemon/docs/reference/agent-startup-guide.md +1 -0
  433. package/daemon/specs/agents/apps/vault-specialist/agent.yaml +2 -1
  434. package/daemon/specs/agents/conveyor/builder/agent.yaml +2 -1
  435. package/daemon/specs/agents/conveyor/lead/agent.yaml +2 -1
  436. package/daemon/specs/agents/conveyor/planner/agent.yaml +2 -1
  437. package/daemon/specs/agents/conveyor/reviewer/agent.yaml +2 -1
  438. package/daemon/specs/agents/design/product-designer/agent.yaml +12 -2
  439. package/daemon/specs/agents/development/implementer/agent.yaml +12 -2
  440. package/daemon/specs/agents/development/qa/agent.yaml +12 -2
  441. package/daemon/specs/agents/development/qa/guidance/role.md +1 -0
  442. package/daemon/specs/agents/factory-rsi/dogfood/agent.yaml +30 -0
  443. package/daemon/specs/agents/factory-rsi/dogfood/guidance/role.md +37 -0
  444. package/daemon/specs/agents/factory-rsi/release-manager/agent.yaml +30 -0
  445. package/daemon/specs/agents/factory-rsi/release-manager/guidance/role.md +40 -0
  446. package/daemon/specs/agents/orchestration/orchestrator/agent.yaml +12 -2
  447. package/daemon/specs/agents/product-management/pm/agent.yaml +1 -2
  448. package/daemon/specs/agents/research/analyst/agent.yaml +2 -1
  449. package/daemon/specs/agents/research/synthesizer/agent.yaml +2 -1
  450. package/daemon/specs/agents/review/independent-reviewer/agent.yaml +12 -2
  451. package/daemon/specs/agents/shared/agent.yaml +5 -8
  452. package/daemon/specs/agents/shared/runtime/claude-settings.fragment.json +13 -1
  453. package/daemon/specs/agents/shared/skills/core/agent-starters/SKILL.md +132 -0
  454. package/daemon/{assets/plugins/openrig-core/skills → specs/agents/shared/skills/core}/agent-startup-and-context-ingestion/SKILL.md +27 -19
  455. package/daemon/specs/agents/shared/skills/core/attention-queue/SKILL.md +264 -0
  456. package/daemon/specs/agents/shared/skills/core/cross-host-rig-commands/SKILL.md +190 -0
  457. package/daemon/specs/agents/shared/skills/core/human-in-the-loop/SKILL.md +104 -0
  458. package/daemon/specs/agents/shared/skills/core/openrig-architect/SKILL.md +25 -8
  459. package/daemon/specs/agents/shared/skills/core/openrig-cmux/SKILL.md +81 -0
  460. package/daemon/specs/agents/shared/skills/core/openrig-herdr/SKILL.md +153 -0
  461. package/daemon/specs/agents/shared/skills/core/openrig-upgrade/SKILL.md +460 -0
  462. package/daemon/specs/agents/shared/skills/core/rig-bundles-and-shareable-artifacts/SKILL.md +101 -0
  463. package/daemon/specs/agents/shared/skills/core/rig-lifecycle/SKILL.md +22 -11
  464. package/daemon/specs/agents/shared/skills/core/session-source-fork/SKILL.md +160 -0
  465. package/daemon/specs/agents/shared/skills/core/specification-system/SKILL.md +103 -0
  466. package/daemon/specs/agents/shared/skills/core/topology-mutation-and-seat-management/SKILL.md +118 -0
  467. package/daemon/specs/agents/shared/skills/core/watchdog/SKILL.md +125 -0
  468. package/daemon/specs/agents/shared/skills/pods/orchestration-team/SKILL.md +4 -4
  469. package/daemon/specs/agents/shared/skills/pods/review-team/SKILL.md +3 -0
  470. package/daemon/specs/agents/shared/skills/process/brainstorming/OPENRIG.md +3 -3
  471. package/daemon/specs/agents/shared/skills/process/executing-plans/OPENRIG.md +1 -1
  472. package/daemon/specs/agents/shared/skills/process/frontend-design/SKILL.md +6 -3
  473. package/daemon/specs/agents/shared/skills/process/test-driven-development/SKILL.md +1 -1
  474. package/daemon/specs/agents/shared/skills/process/using-superpowers/OPENRIG.md +1 -1
  475. package/daemon/specs/agents/shared/skills/process/verification-before-completion/SKILL.md +12 -2
  476. package/daemon/specs/agents/shared/skills/process/writing-plans/OPENRIG.md +1 -1
  477. package/daemon/specs/rigs/focused/pm-team/CULTURE.md +1 -1
  478. package/daemon/specs/rigs/launch/factory-rsi/CULTURE.md +47 -0
  479. package/daemon/specs/rigs/launch/factory-rsi/rig.yaml +115 -0
  480. package/daemon/specs/rigs/launch/kernel/agents/advisor/lead/agent.yaml +2 -2
  481. package/daemon/specs/rigs/launch/kernel/agents/advisor/lead/guidance/role.md +5 -4
  482. package/daemon/specs/rigs/launch/kernel/agents/operator/agent/agent.yaml +2 -2
  483. package/daemon/specs/rigs/launch/kernel/agents/operator/agent/guidance/role.md +3 -5
  484. package/daemon/specs/rigs/launch/kernel/agents/queue/worker/agent.yaml +2 -2
  485. package/daemon/specs/rigs/launch/kernel/culture/CULTURE.md +3 -4
  486. package/daemon/specs/rigs/preview/product-team/CULTURE.md +1 -1
  487. package/dist/bin-wrapper.d.ts.map +1 -1
  488. package/dist/bin-wrapper.js +3 -1
  489. package/dist/bin-wrapper.js.map +1 -1
  490. package/dist/build-info.js +3 -3
  491. package/dist/cli-error.d.ts +33 -0
  492. package/dist/cli-error.d.ts.map +1 -0
  493. package/dist/cli-error.js +94 -0
  494. package/dist/cli-error.js.map +1 -0
  495. package/dist/commands/broadcast.d.ts +6 -1
  496. package/dist/commands/broadcast.d.ts.map +1 -1
  497. package/dist/commands/broadcast.js +101 -15
  498. package/dist/commands/broadcast.js.map +1 -1
  499. package/dist/commands/capture.d.ts.map +1 -1
  500. package/dist/commands/capture.js +99 -8
  501. package/dist/commands/capture.js.map +1 -1
  502. package/dist/commands/config-init-workspace.js +1 -1
  503. package/dist/commands/config.d.ts.map +1 -1
  504. package/dist/commands/config.js +4 -0
  505. package/dist/commands/config.js.map +1 -1
  506. package/dist/commands/doctor.d.ts +1 -1
  507. package/dist/commands/doctor.d.ts.map +1 -1
  508. package/dist/commands/doctor.js +17 -11
  509. package/dist/commands/doctor.js.map +1 -1
  510. package/dist/commands/down.d.ts.map +1 -1
  511. package/dist/commands/down.js +5 -0
  512. package/dist/commands/down.js.map +1 -1
  513. package/dist/commands/host.d.ts +14 -0
  514. package/dist/commands/host.d.ts.map +1 -1
  515. package/dist/commands/host.js +361 -23
  516. package/dist/commands/host.js.map +1 -1
  517. package/dist/commands/launch.d.ts.map +1 -1
  518. package/dist/commands/launch.js +5 -0
  519. package/dist/commands/launch.js.map +1 -1
  520. package/dist/commands/proof.js +1 -1
  521. package/dist/commands/proof.js.map +1 -1
  522. package/dist/commands/ps.d.ts.map +1 -1
  523. package/dist/commands/ps.js +26 -6
  524. package/dist/commands/ps.js.map +1 -1
  525. package/dist/commands/queue.d.ts +36 -0
  526. package/dist/commands/queue.d.ts.map +1 -1
  527. package/dist/commands/queue.js +176 -31
  528. package/dist/commands/queue.js.map +1 -1
  529. package/dist/commands/restore-packet.d.ts.map +1 -1
  530. package/dist/commands/restore-packet.js +13 -2
  531. package/dist/commands/restore-packet.js.map +1 -1
  532. package/dist/commands/rig.d.ts.map +1 -1
  533. package/dist/commands/rig.js +122 -0
  534. package/dist/commands/rig.js.map +1 -1
  535. package/dist/commands/scope.js +2 -2
  536. package/dist/commands/scope.js.map +1 -1
  537. package/dist/commands/send.d.ts.map +1 -1
  538. package/dist/commands/send.js +229 -30
  539. package/dist/commands/send.js.map +1 -1
  540. package/dist/commands/slack.d.ts +37 -0
  541. package/dist/commands/slack.d.ts.map +1 -0
  542. package/dist/commands/slack.js +274 -0
  543. package/dist/commands/slack.js.map +1 -0
  544. package/dist/commands/terminal.d.ts +6 -0
  545. package/dist/commands/terminal.d.ts.map +1 -0
  546. package/dist/commands/terminal.js +116 -0
  547. package/dist/commands/terminal.js.map +1 -0
  548. package/dist/commands/transcript.d.ts +6 -1
  549. package/dist/commands/transcript.d.ts.map +1 -1
  550. package/dist/commands/transcript.js +113 -30
  551. package/dist/commands/transcript.js.map +1 -1
  552. package/dist/commands/ui.d.ts +1 -0
  553. package/dist/commands/ui.d.ts.map +1 -1
  554. package/dist/commands/ui.js +2 -0
  555. package/dist/commands/ui.js.map +1 -1
  556. package/dist/commands/up.d.ts.map +1 -1
  557. package/dist/commands/up.js +10 -1
  558. package/dist/commands/up.js.map +1 -1
  559. package/dist/commands/whoami.d.ts.map +1 -1
  560. package/dist/commands/whoami.js +14 -3
  561. package/dist/commands/whoami.js.map +1 -1
  562. package/dist/commands/workflow-errors.d.ts +23 -0
  563. package/dist/commands/workflow-errors.d.ts.map +1 -0
  564. package/dist/commands/workflow-errors.js +100 -0
  565. package/dist/commands/workflow-errors.js.map +1 -0
  566. package/dist/commands/workflow-follow.d.ts +71 -0
  567. package/dist/commands/workflow-follow.d.ts.map +1 -0
  568. package/dist/commands/workflow-follow.js +259 -0
  569. package/dist/commands/workflow-follow.js.map +1 -0
  570. package/dist/commands/workflow-render.d.ts +114 -0
  571. package/dist/commands/workflow-render.d.ts.map +1 -0
  572. package/dist/commands/workflow-render.js +223 -0
  573. package/dist/commands/workflow-render.js.map +1 -0
  574. package/dist/commands/workflow.d.ts +1 -0
  575. package/dist/commands/workflow.d.ts.map +1 -1
  576. package/dist/commands/workflow.js +278 -14
  577. package/dist/commands/workflow.js.map +1 -1
  578. package/dist/config-store.d.ts +15 -1
  579. package/dist/config-store.d.ts.map +1 -1
  580. package/dist/config-store.js +103 -0
  581. package/dist/config-store.js.map +1 -1
  582. package/dist/cross-host-cli-helpers.d.ts +13 -0
  583. package/dist/cross-host-cli-helpers.d.ts.map +1 -1
  584. package/dist/cross-host-cli-helpers.js +27 -0
  585. package/dist/cross-host-cli-helpers.js.map +1 -1
  586. package/dist/cross-host-target.d.ts +49 -0
  587. package/dist/cross-host-target.d.ts.map +1 -0
  588. package/dist/cross-host-target.js +35 -0
  589. package/dist/cross-host-target.js.map +1 -0
  590. package/dist/daemon-lifecycle.d.ts.map +1 -1
  591. package/dist/daemon-lifecycle.js +45 -14
  592. package/dist/daemon-lifecycle.js.map +1 -1
  593. package/dist/host-registry.d.ts +14 -1
  594. package/dist/host-registry.d.ts.map +1 -1
  595. package/dist/host-registry.js +47 -6
  596. package/dist/host-registry.js.map +1 -1
  597. package/dist/host-selection.d.ts +13 -0
  598. package/dist/host-selection.d.ts.map +1 -0
  599. package/dist/host-selection.js +54 -0
  600. package/dist/host-selection.js.map +1 -0
  601. package/dist/index.d.ts +5 -0
  602. package/dist/index.d.ts.map +1 -1
  603. package/dist/index.js +8 -1
  604. package/dist/index.js.map +1 -1
  605. package/dist/lib/scope/scaffold-placeholder.d.ts +38 -0
  606. package/dist/lib/scope/scaffold-placeholder.d.ts.map +1 -0
  607. package/dist/lib/scope/scaffold-placeholder.js +98 -0
  608. package/dist/lib/scope/scaffold-placeholder.js.map +1 -0
  609. package/dist/lib/scope/scope-audit.d.ts.map +1 -1
  610. package/dist/lib/scope/scope-audit.js +57 -20
  611. package/dist/lib/scope/scope-audit.js.map +1 -1
  612. package/dist/lib/scope-templates/backlog-deprecation.md +1 -1
  613. package/dist/lib/scope-templates/backlog-tech-debt.md +1 -1
  614. package/dist/lib/scope-templates/bug-fix.md +1 -1
  615. package/dist/lib/scope-templates/implementation-prd.md +1 -1
  616. package/dist/lib/scope-templates/mission-notes.md +7 -2
  617. package/dist/lib/scope-templates/mission-placeholder.md +1 -1
  618. package/dist/lib/scope-templates/mission-progress.md +1 -1
  619. package/dist/lib/scope-templates/mission-release.md +1 -1
  620. package/dist/lib/scope-templates/placeholder.md +1 -1
  621. package/dist/lib/scope-templates/proof.md +1 -1
  622. package/dist/lib/scope-templates/release-feature.md +1 -1
  623. package/dist/lib/scope-templates/research.md +1 -1
  624. package/dist/lib/scope-templates/slice-progress.md +1 -1
  625. package/dist/remote-host-ops.d.ts +1 -0
  626. package/dist/remote-host-ops.d.ts.map +1 -1
  627. package/dist/remote-host-ops.js +13 -6
  628. package/dist/remote-host-ops.js.map +1 -1
  629. package/dist/session-name.d.ts +23 -0
  630. package/dist/session-name.d.ts.map +1 -0
  631. package/dist/session-name.js +61 -0
  632. package/dist/session-name.js.map +1 -0
  633. package/dist/slack/config.d.ts +41 -0
  634. package/dist/slack/config.d.ts.map +1 -0
  635. package/dist/slack/config.js +60 -0
  636. package/dist/slack/config.js.map +1 -0
  637. package/dist/slack/inbound.d.ts +75 -0
  638. package/dist/slack/inbound.d.ts.map +1 -0
  639. package/dist/slack/inbound.js +133 -0
  640. package/dist/slack/inbound.js.map +1 -0
  641. package/dist/slack/message.d.ts +26 -0
  642. package/dist/slack/message.d.ts.map +1 -0
  643. package/dist/slack/message.js +60 -0
  644. package/dist/slack/message.js.map +1 -0
  645. package/dist/slack/outbound.d.ts +39 -0
  646. package/dist/slack/outbound.d.ts.map +1 -0
  647. package/dist/slack/outbound.js +52 -0
  648. package/dist/slack/outbound.js.map +1 -0
  649. package/dist/slack/queue-bridge.d.ts +56 -0
  650. package/dist/slack/queue-bridge.d.ts.map +1 -0
  651. package/dist/slack/queue-bridge.js +114 -0
  652. package/dist/slack/queue-bridge.js.map +1 -0
  653. package/dist/slack/secrets.d.ts +21 -0
  654. package/dist/slack/secrets.d.ts.map +1 -0
  655. package/dist/slack/secrets.js +73 -0
  656. package/dist/slack/secrets.js.map +1 -0
  657. package/dist/slack/slack-api.d.ts +49 -0
  658. package/dist/slack/slack-api.d.ts.map +1 -0
  659. package/dist/slack/slack-api.js +110 -0
  660. package/dist/slack/slack-api.js.map +1 -0
  661. package/dist/slack/state-store.d.ts +62 -0
  662. package/dist/slack/state-store.d.ts.map +1 -0
  663. package/dist/slack/state-store.js +132 -0
  664. package/dist/slack/state-store.js.map +1 -0
  665. package/package.json +1 -1
  666. package/ui/dist/assets/index-DkNi0RT8.js +623 -0
  667. package/ui/dist/assets/index-N-SdPj-I.css +32 -0
  668. package/ui/dist/index.html +2 -2
  669. package/daemon/assets/plugins/openrig-core/skills/openrig-architect/SKILL.md +0 -361
  670. package/daemon/assets/plugins/openrig-core/skills/openrig-operator/SKILL.md +0 -222
  671. package/daemon/docs/reference/product-factory-vps-runbook.md +0 -132
  672. package/daemon/specs/agents/shared/skills/core/mission-slice-sop/SKILL.md +0 -115
  673. package/daemon/specs/agents/shared/skills/core/openrig-installer/SKILL.md +0 -142
  674. package/daemon/specs/agents/shared/skills/core/openrig-operator/SKILL.md +0 -110
  675. package/daemon/specs/agents/shared/skills/core/openrig-user/SKILL.md +0 -1245
  676. package/daemon/specs/agents/shared/skills/core/openrig-user-settings/SKILL.md +0 -153
  677. package/ui/dist/assets/index-D69ZhNIr.js +0 -598
  678. package/ui/dist/assets/index-DJYun-8d.css +0 -32
@@ -0,0 +1,274 @@
1
+ // `rig slack` — Slice-11 slack-connector-human-queue (OPR.0.4.7.11).
2
+ //
3
+ // Agent-assisted setup/config + the two trusted-host connector runners. The
4
+ // connector accesses the fleet ONLY through `rig queue` (transport-agnostic;
5
+ // connector-host may differ from the queue/alert host — item 10). Secrets load
6
+ // from a 0600 env file / OPENRIG_SLACK_* env at call time, never from config,
7
+ // never from the repo. WebUI setup is OUT of v1.
8
+ import { Command } from "commander";
9
+ import path from "node:path";
10
+ import { getOpenRigHome } from "../openrig-compat.js";
11
+ import { loadConfig, saveConfig, staticReadiness, } from "../slack/config.js";
12
+ import { resolveSecret, checkEnvFilePermissions } from "../slack/secrets.js";
13
+ import { SeenStore, DeadLetterStore } from "../slack/state-store.js";
14
+ import { makeExecRunner } from "../slack/queue-bridge.js";
15
+ import { runOutboundOnce, seedBacklogOnEnable } from "../slack/outbound.js";
16
+ import { InboundRouter, handleEnvelope } from "../slack/inbound.js";
17
+ import { verifyScopes, verifyChannelMembership, openSocketConnection } from "../slack/slack-api.js";
18
+ const SECRET_WEBHOOK = "SLACK_WEBHOOK_URL";
19
+ const SECRET_BOT = "SLACK_BOT_TOKEN";
20
+ const SECRET_APP = "SLACK_APP_TOKEN";
21
+ function stateDir(home) {
22
+ return path.join(home, "state");
23
+ }
24
+ function defaultRunner(cfg) {
25
+ // Remote queue targeting (item 10, connector-host != queue-host) via OPENRIG_URL
26
+ // — supported by ALL queue verbs, unlike `--host` which `queue list`/`show`
27
+ // reject. queueUrl (when set) overrides the ambient OPENRIG_URL for rig calls.
28
+ const env = cfg.queueUrl ? { ...process.env, OPENRIG_URL: cfg.queueUrl } : process.env;
29
+ return makeExecRunner({ rigBin: process.env.OPENRIG_RIG_BIN || "rig", baseArgs: [], env });
30
+ }
31
+ function resolveSecrets(cfg) {
32
+ const envFile = cfg.secretsEnvFile ?? undefined;
33
+ return {
34
+ webhook: resolveSecret(SECRET_WEBHOOK, { envFile }),
35
+ bot: resolveSecret(SECRET_BOT, { envFile }),
36
+ app: resolveSecret(SECRET_APP, { envFile }),
37
+ };
38
+ }
39
+ export function slackCommand(deps = {}) {
40
+ const home = deps.home ?? getOpenRigHome();
41
+ const log = deps.log ?? ((m) => console.log(m));
42
+ const makeRunner = deps.makeRunner ?? defaultRunner;
43
+ const now = deps.now ?? (() => new Date());
44
+ const cmd = new Command("slack").description("Slice-11 — Slack human-queue connector (outbound alerts + inbound messages)");
45
+ // ---- setup ----
46
+ cmd
47
+ .command("setup")
48
+ .description("Configure the connector (first-class config; secrets stay in the env file, never here)")
49
+ .option("--channel <id>", "Slack channel id the connector app must be a member of")
50
+ .option("--inbound-destination <session>", "where inbound human messages land (default operator-agent@kernel)")
51
+ .option("--alert-tag <tag>", "outbound: qitem tag that alerts a human (default founder-alert)")
52
+ .option("--source-label <label>", "label shown in the posted message footer (where the queue lives)")
53
+ .option("--secrets-env-file <path>", "path to the 0600 env file with SLACK_WEBHOOK_URL / SLACK_BOT_TOKEN / SLACK_APP_TOKEN")
54
+ .option("--queue-url <url>", "OPENRIG_URL of a REMOTE queue daemon (connector-host != queue-host); targets all queue verbs")
55
+ .option("--required-scopes <csv>", "comma-separated bot scopes to require at verify time")
56
+ .action((opts) => {
57
+ const cur = loadConfig(home);
58
+ const next = {
59
+ ...cur,
60
+ channel: opts.channel ?? cur.channel,
61
+ inboundDestination: opts.inboundDestination ?? cur.inboundDestination,
62
+ alertTag: opts.alertTag ?? cur.alertTag,
63
+ sourceLabel: opts.sourceLabel ?? cur.sourceLabel,
64
+ secretsEnvFile: opts.secretsEnvFile ?? cur.secretsEnvFile,
65
+ queueUrl: opts.queueUrl ?? cur.queueUrl,
66
+ requiredScopes: opts.requiredScopes ? String(opts.requiredScopes).split(",").map((s) => s.trim()).filter(Boolean) : cur.requiredScopes,
67
+ };
68
+ const p = saveConfig(next, home);
69
+ log(`wrote ${p}`);
70
+ log(`Next: put SLACK_WEBHOOK_URL / SLACK_BOT_TOKEN / SLACK_APP_TOKEN in ${next.secretsEnvFile ?? "<--secrets-env-file> (0600)"}, then \`rig slack verify\`, then \`rig slack enable\`.`);
71
+ });
72
+ // ---- status (honest unconfigured, no network) ----
73
+ cmd
74
+ .command("status")
75
+ .description("Show the connector's configured + resolvable state (honest; no network)")
76
+ .option("--json", "JSON output")
77
+ .action((opts) => {
78
+ const cfg = loadConfig(home);
79
+ const s = resolveSecrets(cfg);
80
+ const readiness = staticReadiness(cfg, s.webhook !== null, s.bot !== null, s.app !== null);
81
+ const permWarn = cfg.secretsEnvFile ? checkEnvFilePermissions(cfg.secretsEnvFile) : null;
82
+ if (opts.json) {
83
+ log(JSON.stringify({ config: { ...cfg }, readiness, permWarning: permWarn }));
84
+ }
85
+ else {
86
+ log(`slack-connector (config: ${cfg.enabled ? "enabled" : "disabled"})`);
87
+ for (const r of readiness)
88
+ log(` ${r.ok ? "✓" : "✗"} ${r.label}: ${r.detail}`);
89
+ if (permWarn)
90
+ log(` ⚠ ${permWarn}`);
91
+ }
92
+ });
93
+ // ---- verify (live: GRANTED scopes from headers + channel membership) ----
94
+ cmd
95
+ .command("verify")
96
+ .description("Live-verify GRANTED Slack scopes (from response headers) + channel membership (item 5)")
97
+ .option("--json", "JSON output")
98
+ .action(async (opts) => {
99
+ const cfg = loadConfig(home);
100
+ const s = resolveSecrets(cfg);
101
+ if (!s.bot) {
102
+ log("✗ bot token unresolved — set SLACK_BOT_TOKEN (env or secrets env file). Cannot verify.");
103
+ process.exitCode = 1;
104
+ return;
105
+ }
106
+ const scope = await verifyScopes(s.bot, cfg.requiredScopes, deps.fetchImpl);
107
+ let member = null;
108
+ if (cfg.channel)
109
+ member = await verifyChannelMembership(s.bot, cfg.channel, deps.fetchImpl);
110
+ const ready = scope.ok && (member ? member.isMember : false);
111
+ if (opts.json) {
112
+ log(JSON.stringify({ scope, member, ready }));
113
+ }
114
+ else {
115
+ log(`granted scopes: ${scope.granted.join(", ") || "(none)"}`);
116
+ if (!scope.ok)
117
+ log(`✗ MISSING scopes (configured != granted — reinstall the app): ${scope.missing.join(", ")}${scope.error ? ` [${scope.error}]` : ""}`);
118
+ else
119
+ log("✓ all required scopes granted");
120
+ if (member)
121
+ log(member.isMember ? `✓ channel member (${member.name ?? cfg.channel})` : `✗ NOT a member of channel ${cfg.channel} — invite the app`);
122
+ else
123
+ log("… channel not configured — set --channel to verify membership");
124
+ log(ready ? "READY for inbound" : "NOT ready");
125
+ }
126
+ if (!ready)
127
+ process.exitCode = 1;
128
+ });
129
+ // ---- enable (seeds backlog as history, item 9) ----
130
+ cmd
131
+ .command("enable")
132
+ .description("Enable the connector; seeds the current alert backlog as history (no replay storm)")
133
+ .action(async () => {
134
+ const cfg = loadConfig(home);
135
+ const s = resolveSecrets(cfg);
136
+ if (!s.webhook) {
137
+ log("✗ refusing to enable: SLACK_WEBHOOK_URL unresolved (outbound could not post). Configure secrets first.");
138
+ process.exitCode = 1;
139
+ return;
140
+ }
141
+ const runner = makeRunner(cfg);
142
+ const seen = new SeenStore(path.join(stateDir(home), "slack-outbound-seen.jsonl"), undefined, now);
143
+ const res = await seedBacklogOnEnable({ runner, seen, filter: { alertTag: cfg.alertTag, destinations: cfg.outboundDestinations }, log });
144
+ saveConfig({ ...cfg, enabled: true }, home);
145
+ log(res.onlineStatus);
146
+ });
147
+ cmd
148
+ .command("disable")
149
+ .description("Disable the connector")
150
+ .action(() => {
151
+ saveConfig({ ...loadConfig(home), enabled: false }, home);
152
+ log("slack connector disabled");
153
+ });
154
+ // ---- outbound (one-shot sweep; for cron/launchd) ----
155
+ cmd
156
+ .command("outbound")
157
+ .description("One outbound sweep: post fresh human alerts to Slack (fail-visible)")
158
+ .option("--json", "JSON output")
159
+ .action(async (opts) => {
160
+ const cfg = loadConfig(home);
161
+ if (!cfg.enabled) {
162
+ log("slack connector disabled — `rig slack enable` first");
163
+ process.exitCode = 1;
164
+ return;
165
+ }
166
+ const s = resolveSecrets(cfg);
167
+ if (!s.webhook) {
168
+ log("✗ SLACK_WEBHOOK_URL unresolved — cannot post");
169
+ process.exitCode = 1;
170
+ return;
171
+ }
172
+ const runner = makeRunner(cfg);
173
+ const seen = new SeenStore(path.join(stateDir(home), "slack-outbound-seen.jsonl"), undefined, now);
174
+ const res = await runOutboundOnce({
175
+ runner,
176
+ seen,
177
+ webhookUrl: s.webhook,
178
+ fetchImpl: deps.fetchImpl,
179
+ sourceLabel: cfg.sourceLabel,
180
+ filter: { alertTag: cfg.alertTag, destinations: cfg.outboundDestinations },
181
+ log,
182
+ });
183
+ if (opts.json)
184
+ log(JSON.stringify(res));
185
+ if (res.failed.length > 0)
186
+ process.exitCode = 1; // fail-visible
187
+ });
188
+ // ---- inbound (persistent Socket Mode) ----
189
+ cmd
190
+ .command("inbound")
191
+ .description("Run the inbound Socket Mode consumer (persistent; human messages → queue)")
192
+ .action(async () => {
193
+ const cfg = loadConfig(home);
194
+ const s = resolveSecrets(cfg);
195
+ if (!s.app) {
196
+ log("✗ SLACK_APP_TOKEN unresolved — inbound cannot connect");
197
+ process.exitCode = 1;
198
+ return;
199
+ }
200
+ const runner = makeRunner(cfg);
201
+ const seen = new SeenStore(path.join(stateDir(home), "slack-inbound-seen.jsonl"), undefined, now);
202
+ const dead = new DeadLetterStore(path.join(stateDir(home), "slack-inbound-deadletter.jsonl"), undefined, now);
203
+ const router = new InboundRouter({ runner, seen, deadLetter: dead, destination: cfg.inboundDestination, log });
204
+ await runInboundLoop(s.app, router, deps, log);
205
+ });
206
+ return cmd;
207
+ }
208
+ /**
209
+ * Socket Mode loop: open the ws, FAST-ACK every envelope, route human messages,
210
+ * drain the dead-letter on connect + periodically, reconnect with backoff.
211
+ * `deps.inboundMaxConnects` bounds it for tests; unset = forever.
212
+ */
213
+ export async function runInboundLoop(appToken, router, deps, log) {
214
+ const wsFactory = deps.wsFactory ?? ((url) => new globalThis.WebSocket(url));
215
+ const retryIntervalMs = deps.retryIntervalMs ?? 5 * 60 * 1000;
216
+ let connects = 0;
217
+ let backoff = 1000;
218
+ await new Promise((resolve) => {
219
+ const connect = async () => {
220
+ connects++;
221
+ const open = await openSocketConnection(appToken, deps.fetchImpl);
222
+ if (!open.ok || !open.url) {
223
+ log(`connect failed: ${open.error}`);
224
+ if (deps.inboundMaxConnects && connects >= deps.inboundMaxConnects)
225
+ return resolve();
226
+ setTimeout(connect, backoff);
227
+ backoff = Math.min(backoff * 2, 60000);
228
+ return;
229
+ }
230
+ const ws = wsFactory(open.url);
231
+ let retryTimer;
232
+ ws.onopen = () => {
233
+ backoff = 1000;
234
+ log("socket connected");
235
+ void router.retryDeadLetters(); // drain on connect…
236
+ // …AND periodically WHILE connected (B1: recovery after a queue outage
237
+ // must not wait for the next Slack reconnect). Cleared on close.
238
+ retryTimer = setInterval(() => void router.retryDeadLetters(), retryIntervalMs);
239
+ if (typeof retryTimer.unref === "function") {
240
+ retryTimer.unref();
241
+ }
242
+ };
243
+ ws.onmessage = (m) => {
244
+ let env;
245
+ try {
246
+ env = JSON.parse(String(m.data));
247
+ }
248
+ catch {
249
+ return;
250
+ }
251
+ void handleEnvelope(env, () => env.envelope_id && ws.send(JSON.stringify({ envelope_id: env.envelope_id })), router, log);
252
+ };
253
+ ws.onclose = () => {
254
+ if (retryTimer)
255
+ clearInterval(retryTimer);
256
+ log(`socket closed; reconnect in ${backoff}ms`);
257
+ if (deps.inboundMaxConnects && connects >= deps.inboundMaxConnects)
258
+ return resolve();
259
+ setTimeout(connect, backoff);
260
+ backoff = Math.min(backoff * 2, 60000);
261
+ };
262
+ ws.onerror = () => {
263
+ try {
264
+ ws.close();
265
+ }
266
+ catch {
267
+ /* ignore */
268
+ }
269
+ };
270
+ };
271
+ void connect();
272
+ });
273
+ }
274
+ //# sourceMappingURL=slack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slack.js","sourceRoot":"","sources":["../../src/commands/slack.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { Command } from "commander";
2
+ import type { StatusDeps } from "./status.js";
3
+ export interface TerminalDeps extends StatusDeps {
4
+ }
5
+ export declare function terminalCommand(depsOverride?: TerminalDeps): Command;
6
+ //# sourceMappingURL=terminal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal.d.ts","sourceRoot":"","sources":["../../src/commands/terminal.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAG9C,MAAM,WAAW,YAAa,SAAQ,UAAU;CAAG;AA+DnD,wBAAgB,eAAe,CAAC,YAAY,CAAC,EAAE,YAAY,GAAG,OAAO,CAuDpE"}
@@ -0,0 +1,116 @@
1
+ // OPR.0.4.6.02 C3 — the `rig terminal` command family (the TUI-1 opaque verb +
2
+ // the operator's terminal-provider-ride entry). Three subcommands, all hitting
3
+ // the ONE canonical daemon composer (`/api/terminal/...`):
4
+ //
5
+ // rig terminal open <view> [--provider herdr|cmux] [--json]
6
+ // rig terminal views [--json]
7
+ // rig terminal status [--provider herdr|cmux] [--json]
8
+ //
9
+ // `<view>` resolves daemon-side: a rig name (per-rig derived) | `mission:<id>` |
10
+ // `slice:<id>` (derived) | a saved-view id. The result is the ONE shared
11
+ // `{ opened, absent, degraded }` partition, carried byte-identically here and
12
+ // in the route JSON (arch Q3).
13
+ //
14
+ // Exit semantics (PRD / arch Q3): a partial open WITH NAMES is a SUCCESS with
15
+ // disclosure → exit 0; a ZERO-pane open (nothing tiled: unknown view, provider
16
+ // down, every seat absent/degraded) → non-zero. `views`/`status` are always
17
+ // exit 0 unless the daemon is unreachable.
18
+ import { Command } from "commander";
19
+ import { DaemonClient } from "../client.js";
20
+ import { getDaemonStatus, getDaemonUrl } from "../daemon-lifecycle.js";
21
+ import { realDeps } from "./daemon.js";
22
+ async function withClient(deps, fn) {
23
+ const status = await getDaemonStatus(deps.lifecycleDeps);
24
+ if (status.state !== "running" || status.healthy === false) {
25
+ console.error("Daemon not running. Start it with: rig daemon start");
26
+ process.exitCode = 1;
27
+ return undefined;
28
+ }
29
+ const client = deps.clientFactory(getDaemonUrl(status));
30
+ return fn(client);
31
+ }
32
+ /** Print a plain daemon response (views/status). JSON = compact; human = pretty. */
33
+ function printResult(json, body, status) {
34
+ console.log(json ? JSON.stringify(body) : JSON.stringify(body, null, 2));
35
+ if (status >= 400)
36
+ process.exitCode = status >= 500 ? 2 : 1;
37
+ }
38
+ /** Human-format the honest-partial open result (opened/absent/degraded, each named). */
39
+ function humanOpen(r) {
40
+ const lines = [];
41
+ const tiled = r.opened.length;
42
+ lines.push(tiled > 0
43
+ ? `Opened ${tiled} tile(s) in ${r.provider}${r.pages > 1 ? ` across ${r.pages} page(s)` : ""}.`
44
+ : `No tiles opened in ${r.provider}.`);
45
+ if (r.error)
46
+ lines.push(` provider: ${r.error}${r.code ? ` (${r.code})` : ""}`);
47
+ for (const seat of r.opened)
48
+ lines.push(` ● ${seat}`);
49
+ for (const a of r.absent)
50
+ lines.push(` ○ ${a.seat} — absent: ${a.reason}`);
51
+ for (const d of r.degraded)
52
+ lines.push(` ▲ ${d.seat} — skipped (${d.host}): ${d.reason}`);
53
+ return lines.join("\n");
54
+ }
55
+ /** Open exit rule: exit 0 iff at least one pane was tiled (partial-with-names is success). */
56
+ function printOpen(json, r, status) {
57
+ if (json) {
58
+ console.log(JSON.stringify(r));
59
+ }
60
+ else {
61
+ console.log(humanOpen(r));
62
+ }
63
+ // A 4xx/5xx (bad input / unknown view / service down) OR a zero-pane open is a failure.
64
+ if (status >= 400 || r.opened.length === 0) {
65
+ process.exitCode = status >= 500 ? 2 : 1;
66
+ }
67
+ }
68
+ export function terminalCommand(depsOverride) {
69
+ const cmd = new Command("terminal").description("Open OpenRig views (agent terminals) as tiles in a terminal provider (herdr / cmux)");
70
+ const getDeps = () => depsOverride ?? {
71
+ lifecycleDeps: realDeps(),
72
+ clientFactory: (url) => new DaemonClient(url),
73
+ };
74
+ cmd
75
+ .command("open")
76
+ .argument("<view>", "a rig name, mission:<id>, slice:<id>, or a saved-view id")
77
+ .description("Open every live agent in the view as an interactive terminal tile")
78
+ .option("--provider <name>", "terminal provider: herdr (default) or cmux (best-effort)")
79
+ .option("--json", "JSON output for agents")
80
+ .action(async (view, opts) => {
81
+ const deps = getDeps();
82
+ await withClient(deps, async (client) => {
83
+ const body = { view, ...(opts.provider ? { provider: opts.provider } : {}) };
84
+ const res = await client.post("/api/terminal/open", body);
85
+ printOpen(opts.json ?? false, res.data, res.status);
86
+ });
87
+ });
88
+ cmd
89
+ .command("views")
90
+ .description("List saved views + the rigs openable as derived views")
91
+ .option("--json", "JSON output for agents")
92
+ .action(async (opts) => {
93
+ const deps = getDeps();
94
+ await withClient(deps, async (client) => {
95
+ const res = await client.get("/api/terminal/views");
96
+ printResult(opts.json ?? false, res.data, res.status);
97
+ });
98
+ });
99
+ cmd
100
+ .command("status")
101
+ .description("Show terminal provider availability + liveness (doctor)")
102
+ .option("--provider <name>", "restrict to one provider (herdr / cmux)")
103
+ .option("--json", "JSON output for agents")
104
+ .action(async (opts) => {
105
+ const deps = getDeps();
106
+ await withClient(deps, async (client) => {
107
+ const path = opts.provider
108
+ ? `/api/terminal/status?provider=${encodeURIComponent(opts.provider)}`
109
+ : "/api/terminal/status";
110
+ const res = await client.get(path);
111
+ printResult(opts.json ?? false, res.data, res.status);
112
+ });
113
+ });
114
+ return cmd;
115
+ }
116
+ //# sourceMappingURL=terminal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal.js","sourceRoot":"","sources":["../../src/commands/terminal.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,+EAA+E;AAC/E,2DAA2D;AAC3D,EAAE;AACF,8DAA8D;AAC9D,gCAAgC;AAChC,yDAAyD;AACzD,EAAE;AACF,iFAAiF;AACjF,yEAAyE;AACzE,8EAA8E;AAC9E,+BAA+B;AAC/B,EAAE;AACF,8EAA8E;AAC9E,+EAA+E;AAC/E,4EAA4E;AAC5E,2CAA2C;AAE3C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACvE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAkBvC,KAAK,UAAU,UAAU,CACvB,IAAkB,EAClB,EAAwC;IAExC,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACzD,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;QAC3D,OAAO,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;QACrE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;IACxD,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC;AACpB,CAAC;AAED,oFAAoF;AACpF,SAAS,WAAW,CAAC,IAAa,EAAE,IAAa,EAAE,MAAc;IAC/D,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACzE,IAAI,MAAM,IAAI,GAAG;QAAE,OAAO,CAAC,QAAQ,GAAG,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9D,CAAC;AAED,wFAAwF;AACxF,SAAS,SAAS,CAAC,CAAiB;IAClC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;IAC9B,KAAK,CAAC,IAAI,CACR,KAAK,GAAG,CAAC;QACP,CAAC,CAAC,UAAU,KAAK,eAAe,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG;QAC/F,CAAC,CAAC,sBAAsB,CAAC,CAAC,QAAQ,GAAG,CACxC,CAAC;IACF,IAAI,CAAC,CAAC,KAAK;QAAE,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACjF,KAAK,MAAM,IAAI,IAAI,CAAC,CAAC,MAAM;QAAE,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;IACvD,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM;QAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,cAAc,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5E,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ;QAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,eAAe,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3F,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,8FAA8F;AAC9F,SAAS,SAAS,CAAC,IAAa,EAAE,CAAiB,EAAE,MAAc;IACjE,IAAI,IAAI,EAAE,CAAC;QACT,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IACjC,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IACD,wFAAwF;IACxF,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3C,OAAO,CAAC,QAAQ,GAAG,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3C,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,YAA2B;IACzD,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC,WAAW,CAC7C,qFAAqF,CACtF,CAAC;IAEF,MAAM,OAAO,GAAG,GAAiB,EAAE,CACjC,YAAY,IAAI;QACd,aAAa,EAAE,QAAQ,EAAE;QACzB,aAAa,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,IAAI,YAAY,CAAC,GAAG,CAAC;KACtD,CAAC;IAEJ,GAAG;SACA,OAAO,CAAC,MAAM,CAAC;SACf,QAAQ,CAAC,QAAQ,EAAE,0DAA0D,CAAC;SAC9E,WAAW,CAAC,mEAAmE,CAAC;SAChF,MAAM,CAAC,mBAAmB,EAAE,0DAA0D,CAAC;SACvF,MAAM,CAAC,QAAQ,EAAE,wBAAwB,CAAC;SAC1C,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,IAA2C,EAAE,EAAE;QAC1E,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;QACvB,MAAM,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;YACtC,MAAM,IAAI,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;YAC7E,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,IAAI,CAAiB,oBAAoB,EAAE,IAAI,CAAC,CAAC;YAC1E,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEL,GAAG;SACA,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,uDAAuD,CAAC;SACpE,MAAM,CAAC,QAAQ,EAAE,wBAAwB,CAAC;SAC1C,MAAM,CAAC,KAAK,EAAE,IAAwB,EAAE,EAAE;QACzC,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;QACvB,MAAM,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;YACtC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,GAAG,CAAU,qBAAqB,CAAC,CAAC;YAC7D,WAAW,CAAC,IAAI,CAAC,IAAI,IAAI,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEL,GAAG;SACA,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,yDAAyD,CAAC;SACtE,MAAM,CAAC,mBAAmB,EAAE,yCAAyC,CAAC;SACtE,MAAM,CAAC,QAAQ,EAAE,wBAAwB,CAAC;SAC1C,MAAM,CAAC,KAAK,EAAE,IAA2C,EAAE,EAAE;QAC5D,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;QACvB,MAAM,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;YACtC,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ;gBACxB,CAAC,CAAC,iCAAiC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;gBACtE,CAAC,CAAC,sBAAsB,CAAC;YAC3B,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,GAAG,CAAU,IAAI,CAAC,CAAC;YAC5C,WAAW,CAAC,IAAI,CAAC,IAAI,IAAI,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEL,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -1,4 +1,9 @@
1
1
  import { Command } from "commander";
2
2
  import type { StatusDeps } from "./status.js";
3
- export declare function transcriptCommand(depsOverride?: StatusDeps): Command;
3
+ import { loadHostRegistry } from "../host-registry.js";
4
+ export interface TranscriptDeps extends StatusDeps {
5
+ /** Test seam: inject a registry loader so no real ~/.openrig is touched. */
6
+ hostRegistryLoader?: () => ReturnType<typeof loadHostRegistry>;
7
+ }
8
+ export declare function transcriptCommand(depsOverride?: TranscriptDeps): Command;
4
9
  //# sourceMappingURL=transcript.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"transcript.d.ts","sourceRoot":"","sources":["../../src/commands/transcript.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,wBAAgB,iBAAiB,CAAC,YAAY,CAAC,EAAE,UAAU,GAAG,OAAO,CA+EpE"}
1
+ {"version":3,"file":"transcript.d.ts","sourceRoot":"","sources":["../../src/commands/transcript.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAkC,MAAM,qBAAqB,CAAC;AAKvF,MAAM,WAAW,cAAe,SAAQ,UAAU;IAChD,4EAA4E;IAC5E,kBAAkB,CAAC,EAAE,MAAM,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC;CAChE;AAED,wBAAgB,iBAAiB,CAAC,YAAY,CAAC,EAAE,cAAc,GAAG,OAAO,CA4FxE"}
@@ -1,7 +1,12 @@
1
1
  import { Command } from "commander";
2
+ import { resolveEffectiveHost } from "../host-selection.js";
2
3
  import { DaemonClient } from "../client.js";
3
4
  import { getDaemonStatus, getDaemonUrl } from "../daemon-lifecycle.js";
4
5
  import { realDeps } from "./daemon.js";
6
+ import { loadHostRegistry, resolveHost, hostDisplayTarget } from "../host-registry.js";
7
+ import { emitCrossHostError, emitRemoteHttpFailure } from "../cross-host-cli-helpers.js";
8
+ import { resolveCrossHostTarget } from "../cross-host-target.js";
9
+ import { runRemoteHttpOp } from "../remote-host-ops.js";
5
10
  export function transcriptCommand(depsOverride) {
6
11
  const cmd = new Command("transcript").description("Read agent transcript output");
7
12
  const getDeps = () => depsOverride ?? {
@@ -12,31 +17,60 @@ export function transcriptCommand(depsOverride) {
12
17
  .argument("<session>", "Session name (e.g. dev-impl@my-rig)")
13
18
  .option("--tail <lines>", "Show last N lines (default: 50)", "50")
14
19
  .option("--grep <pattern>", "Search for lines matching pattern (regex)")
20
+ .option("--host <id>", "Read from a remote host declared in ~/.openrig/hosts.yaml (http hosts only — CLI-direct to the remote daemon's transcript routes)")
15
21
  .option("--json", "JSON output for agents")
16
22
  .addHelpText("after", `
17
23
  Examples:
18
24
  rig transcript dev-impl@my-rig --tail 100
19
25
  rig transcript dev-impl@my-rig --grep "decision|architecture"
20
- rig transcript dev-impl@my-rig --json`)
26
+ rig transcript dev-impl@my-rig --json
27
+ rig transcript --host vps-b dev-impl@my-rig --tail 100
28
+ rig transcript dev-impl@my-rig@vps-b --grep "handoff"
29
+
30
+ --host reads the transcript from a remote host declared in
31
+ ~/.openrig/hosts.yaml, CLI-direct against that daemon's shipped transcript
32
+ routes (http-registered hosts, e.g. pair-registered; an ssh-registered host
33
+ fails with the structured transport-requirement error). Output shape is the
34
+ origin's, verbatim. A session of the form agent@rig@host is sugar for --host
35
+ when the suffix is a REGISTERED host id (explicit --host > sugar > persisted
36
+ selection).`)
21
37
  .action(async (session, opts) => {
38
+ // OPR.0.4.6.MH4 C2 — cross-host observe: explicit --host > the
39
+ // `agent@rig@host` target sugar > the persisted host selection
40
+ // (resolveEffectiveHost). The local path below is byte-untouched.
41
+ const explicitHost = opts.host;
42
+ opts.host = resolveEffectiveHost(opts.host);
22
43
  const deps = getDeps();
23
- const status = await getDaemonStatus(deps.lifecycleDeps);
24
- if (status.state !== "running" || status.healthy === false) {
25
- console.error("Daemon not running. Start it with: rig daemon start");
44
+ const targetResolution = resolveCrossHostTarget(session, explicitHost, deps.hostRegistryLoader);
45
+ if (!targetResolution.ok) {
46
+ console.error(targetResolution.error);
26
47
  process.exitCode = 1;
27
48
  return;
28
49
  }
29
- const client = deps.clientFactory(getDaemonUrl(status));
50
+ session = targetResolution.target;
51
+ const crossHostHint = targetResolution.hint;
52
+ opts.host = explicitHost ?? targetResolution.sugarHost ?? opts.host;
30
53
  // --grep takes precedence over --tail when both given
31
54
  const useGrep = !!opts.grep;
32
- let res;
33
- if (useGrep) {
34
- res = await client.get(`/api/transcripts/${encodeURIComponent(session)}/grep?pattern=${encodeURIComponent(opts.grep)}`);
55
+ const tailLines = parseInt(opts.tail ?? "50", 10);
56
+ const apiPath = useGrep
57
+ ? `/api/transcripts/${encodeURIComponent(session)}/grep?pattern=${encodeURIComponent(opts.grep)}`
58
+ : `/api/transcripts/${encodeURIComponent(session)}/tail?lines=${isNaN(tailLines) ? 50 : tailLines}`;
59
+ // --- Cross-host path (CLI-direct GET to the remote daemon's shipped
60
+ // transcript routes — the SAME paths the local path builds, origin
61
+ // shape verbatim; read-class deadline; daemon untouched). ---
62
+ if (opts.host) {
63
+ await runCrossHostTranscript(opts.host, apiPath, useGrep, opts, deps, crossHostHint);
64
+ return;
35
65
  }
36
- else {
37
- const lines = parseInt(opts.tail ?? "50", 10);
38
- res = await client.get(`/api/transcripts/${encodeURIComponent(session)}/tail?lines=${isNaN(lines) ? 50 : lines}`);
66
+ const status = await getDaemonStatus(deps.lifecycleDeps);
67
+ if (status.state !== "running" || status.healthy === false) {
68
+ console.error("Daemon not running. Start it with: rig daemon start");
69
+ process.exitCode = 1;
70
+ return;
39
71
  }
72
+ const client = deps.clientFactory(getDaemonUrl(status));
73
+ const res = await client.get(apiPath);
40
74
  if (opts.json) {
41
75
  console.log(JSON.stringify(res.data));
42
76
  if (res.status >= 400)
@@ -46,32 +80,81 @@ Examples:
46
80
  if (res.status >= 400) {
47
81
  const error = res.data["error"];
48
82
  console.error(error ?? `Transcript request failed (HTTP ${res.status})`);
83
+ // MH-4 §4 loud-failure hint: 3-part-shaped target, unregistered suffix.
84
+ if (crossHostHint)
85
+ console.error(`hint: ${crossHostHint}`);
49
86
  process.exitCode = 1;
50
87
  return;
51
88
  }
52
- if (useGrep) {
53
- const matches = res.data["matches"];
54
- if (matches && matches.length > 0) {
55
- for (const line of matches) {
56
- console.log(line);
57
- }
58
- }
59
- else {
60
- console.log("No matches found.");
89
+ renderTranscript(res.data, useGrep);
90
+ });
91
+ return cmd;
92
+ }
93
+ /**
94
+ * OPR.0.4.6.MH4 C2 — cross-host transcript over http, CLI-DIRECT to the
95
+ * remote daemon's shipped GET /api/transcripts/:session/tail | /grep
96
+ * (zero daemon-side changes; the MH-2 read-through PATTERN, one hop from
97
+ * the bearer-capable CLI). An ssh-registered host surfaces runRemoteHttpOp's
98
+ * structured transport error — never a silent wrong-transport attempt.
99
+ */
100
+ async function runCrossHostTranscript(hostId, apiPath, useGrep, opts, deps, hint) {
101
+ // Resolve the host in the caller (the send/capture pattern) so an unknown
102
+ // host surfaces as the SAME `unknown-host` step class across all four
103
+ // verbs, and the banner carries the display target uniformly.
104
+ const loader = deps.hostRegistryLoader ?? loadHostRegistry;
105
+ const registry = loader();
106
+ if (!registry.ok) {
107
+ emitCrossHostError(hostId, "registry-load-failed", registry.error, opts.json);
108
+ return;
109
+ }
110
+ const resolved = resolveHost(registry.registry, hostId);
111
+ if (!resolved.ok) {
112
+ emitCrossHostError(hostId, "unknown-host", hint ? `${resolved.error} (${hint})` : resolved.error, opts.json);
113
+ return;
114
+ }
115
+ const host = resolved.host;
116
+ const result = await runRemoteHttpOp(hostId, "GET", apiPath, undefined, deps, {});
117
+ if (opts.json) {
118
+ console.log(JSON.stringify({
119
+ cross_host: { host: host.id, target: hostDisplayTarget(host), transport: "http" },
120
+ result,
121
+ ...(!result.ok && hint ? { hint } : {}),
122
+ }));
123
+ if (!result.ok)
124
+ process.exitCode = 1;
125
+ return;
126
+ }
127
+ if (!result.ok) {
128
+ emitRemoteHttpFailure(host.id, hostDisplayTarget(host), result, false, hint);
129
+ return;
130
+ }
131
+ console.log(`[via host=${host.id} (${hostDisplayTarget(host)})]`);
132
+ renderTranscript((result.data ?? {}), useGrep);
133
+ }
134
+ /** One renderer, two callers — the remote output shape is the origin's,
135
+ * so local and cross-host reads render identically. */
136
+ function renderTranscript(data, useGrep) {
137
+ if (useGrep) {
138
+ const matches = data["matches"];
139
+ if (matches && matches.length > 0) {
140
+ for (const line of matches) {
141
+ console.log(line);
61
142
  }
62
143
  }
63
144
  else {
64
- const content = res.data["content"];
65
- if (content) {
66
- // Print each line via console.log for consistent capture in tests and terminal
67
- const lines = content.split("\n");
68
- for (const line of lines) {
69
- if (line)
70
- console.log(line);
71
- }
145
+ console.log("No matches found.");
146
+ }
147
+ }
148
+ else {
149
+ const content = data["content"];
150
+ if (content) {
151
+ // Print each line via console.log for consistent capture in tests and terminal
152
+ const lines = content.split("\n");
153
+ for (const line of lines) {
154
+ if (line)
155
+ console.log(line);
72
156
  }
73
157
  }
74
- });
75
- return cmd;
158
+ }
76
159
  }
77
160
  //# sourceMappingURL=transcript.js.map