@openrig/cli 0.4.4 → 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 (431) hide show
  1. package/daemon/assets/plugins/openrig-core/skills/mission-slice-sop/SKILL.md +6 -8
  2. package/daemon/assets/plugins/openrig-core/skills/openrig-cmux/SKILL.md +86 -0
  3. package/daemon/assets/plugins/openrig-core/skills/openrig-herdr/SKILL.md +158 -0
  4. package/daemon/assets/plugins/openrig-core/skills/openrig-user/SKILL.md +744 -96
  5. package/daemon/dist/adapters/codex-runtime-adapter.d.ts.map +1 -1
  6. package/daemon/dist/adapters/codex-runtime-adapter.js +12 -8
  7. package/daemon/dist/adapters/codex-runtime-adapter.js.map +1 -1
  8. package/daemon/dist/adapters/pi-resume.d.ts +32 -0
  9. package/daemon/dist/adapters/pi-resume.d.ts.map +1 -0
  10. package/daemon/dist/adapters/pi-resume.js +125 -0
  11. package/daemon/dist/adapters/pi-resume.js.map +1 -0
  12. package/daemon/dist/adapters/pi-runner-protocol.d.ts +88 -0
  13. package/daemon/dist/adapters/pi-runner-protocol.d.ts.map +1 -0
  14. package/daemon/dist/adapters/pi-runner-protocol.js +153 -0
  15. package/daemon/dist/adapters/pi-runner-protocol.js.map +1 -0
  16. package/daemon/dist/adapters/pi-runner.d.ts +99 -0
  17. package/daemon/dist/adapters/pi-runner.d.ts.map +1 -0
  18. package/daemon/dist/adapters/pi-runner.js +519 -0
  19. package/daemon/dist/adapters/pi-runner.js.map +1 -0
  20. package/daemon/dist/adapters/pi-runtime-adapter.d.ts +61 -0
  21. package/daemon/dist/adapters/pi-runtime-adapter.d.ts.map +1 -0
  22. package/daemon/dist/adapters/pi-runtime-adapter.js +356 -0
  23. package/daemon/dist/adapters/pi-runtime-adapter.js.map +1 -0
  24. package/daemon/dist/adapters/tmux.d.ts +22 -1
  25. package/daemon/dist/adapters/tmux.d.ts.map +1 -1
  26. package/daemon/dist/adapters/tmux.js +40 -1
  27. package/daemon/dist/adapters/tmux.js.map +1 -1
  28. package/daemon/dist/build-info.js +3 -3
  29. package/daemon/dist/builtins/workflow-specs/branched-remediation.yaml +31 -0
  30. package/daemon/dist/builtins/workflow-specs/factory-rsi.yaml +152 -0
  31. package/daemon/dist/builtins/workflow-specs/gated-release.yaml +26 -0
  32. package/daemon/dist/builtins/workflow-specs/linear-build.yaml +21 -0
  33. package/daemon/dist/db/migrations/049_workflow_instance_version.d.ts +20 -0
  34. package/daemon/dist/db/migrations/049_workflow_instance_version.d.ts.map +1 -0
  35. package/daemon/dist/db/migrations/049_workflow_instance_version.js +24 -0
  36. package/daemon/dist/db/migrations/049_workflow_instance_version.js.map +1 -0
  37. package/daemon/dist/db/migrations/050_workflow_spec_json.d.ts +22 -0
  38. package/daemon/dist/db/migrations/050_workflow_spec_json.d.ts.map +1 -0
  39. package/daemon/dist/db/migrations/050_workflow_spec_json.js +26 -0
  40. package/daemon/dist/db/migrations/050_workflow_spec_json.js.map +1 -0
  41. package/daemon/dist/db/migrations/051_workflow_resume.d.ts +22 -0
  42. package/daemon/dist/db/migrations/051_workflow_resume.d.ts.map +1 -0
  43. package/daemon/dist/db/migrations/051_workflow_resume.js +27 -0
  44. package/daemon/dist/db/migrations/051_workflow_resume.js.map +1 -0
  45. package/daemon/dist/db/migrations/052_workflow_instance_bound_rig.d.ts +26 -0
  46. package/daemon/dist/db/migrations/052_workflow_instance_bound_rig.d.ts.map +1 -0
  47. package/daemon/dist/db/migrations/052_workflow_instance_bound_rig.js +30 -0
  48. package/daemon/dist/db/migrations/052_workflow_instance_bound_rig.js.map +1 -0
  49. package/daemon/dist/db/migrations/053_sessions_node_id_index.d.ts +48 -0
  50. package/daemon/dist/db/migrations/053_sessions_node_id_index.d.ts.map +1 -0
  51. package/daemon/dist/db/migrations/053_sessions_node_id_index.js +53 -0
  52. package/daemon/dist/db/migrations/053_sessions_node_id_index.js.map +1 -0
  53. package/daemon/dist/db/migrations/054_queue_transitions_archive.d.ts +34 -0
  54. package/daemon/dist/db/migrations/054_queue_transitions_archive.d.ts.map +1 -0
  55. package/daemon/dist/db/migrations/054_queue_transitions_archive.js +49 -0
  56. package/daemon/dist/db/migrations/054_queue_transitions_archive.js.map +1 -0
  57. package/daemon/dist/domain/claim-service.d.ts +11 -0
  58. package/daemon/dist/domain/claim-service.d.ts.map +1 -1
  59. package/daemon/dist/domain/claim-service.js +3 -1
  60. package/daemon/dist/domain/claim-service.js.map +1 -1
  61. package/daemon/dist/domain/discovery-types.d.ts +1 -1
  62. package/daemon/dist/domain/discovery-types.d.ts.map +1 -1
  63. package/daemon/dist/domain/hosts/hosts-registry-reader.d.ts +1 -0
  64. package/daemon/dist/domain/hosts/hosts-registry-reader.d.ts.map +1 -1
  65. package/daemon/dist/domain/hosts/hosts-registry-reader.js +19 -0
  66. package/daemon/dist/domain/hosts/hosts-registry-reader.js.map +1 -1
  67. package/daemon/dist/domain/hosts/hosts-registry-writer.d.ts +11 -0
  68. package/daemon/dist/domain/hosts/hosts-registry-writer.d.ts.map +1 -0
  69. package/daemon/dist/domain/hosts/hosts-registry-writer.js +54 -0
  70. package/daemon/dist/domain/hosts/hosts-registry-writer.js.map +1 -0
  71. package/daemon/dist/domain/hosts/read-through.d.ts +28 -0
  72. package/daemon/dist/domain/hosts/read-through.d.ts.map +1 -0
  73. package/daemon/dist/domain/hosts/read-through.js +139 -0
  74. package/daemon/dist/domain/hosts/read-through.js.map +1 -0
  75. package/daemon/dist/domain/hosts/remote-daemon-http.d.ts +21 -0
  76. package/daemon/dist/domain/hosts/remote-daemon-http.d.ts.map +1 -1
  77. package/daemon/dist/domain/hosts/remote-daemon-http.js +49 -0
  78. package/daemon/dist/domain/hosts/remote-daemon-http.js.map +1 -1
  79. package/daemon/dist/domain/node-inventory.d.ts +18 -0
  80. package/daemon/dist/domain/node-inventory.d.ts.map +1 -1
  81. package/daemon/dist/domain/node-inventory.js +206 -95
  82. package/daemon/dist/domain/node-inventory.js.map +1 -1
  83. package/daemon/dist/domain/node-launcher.d.ts +11 -0
  84. package/daemon/dist/domain/node-launcher.d.ts.map +1 -1
  85. package/daemon/dist/domain/node-launcher.js +10 -0
  86. package/daemon/dist/domain/node-launcher.js.map +1 -1
  87. package/daemon/dist/domain/policies/workflow-keepalive.d.ts +7 -0
  88. package/daemon/dist/domain/policies/workflow-keepalive.d.ts.map +1 -1
  89. package/daemon/dist/domain/policies/workflow-keepalive.js +93 -13
  90. package/daemon/dist/domain/policies/workflow-keepalive.js.map +1 -1
  91. package/daemon/dist/domain/ps-projection.d.ts.map +1 -1
  92. package/daemon/dist/domain/ps-projection.js +37 -26
  93. package/daemon/dist/domain/ps-projection.js.map +1 -1
  94. package/daemon/dist/domain/queue-repository.d.ts +105 -0
  95. package/daemon/dist/domain/queue-repository.d.ts.map +1 -1
  96. package/daemon/dist/domain/queue-repository.js +193 -4
  97. package/daemon/dist/domain/queue-repository.js.map +1 -1
  98. package/daemon/dist/domain/queue-retention.d.ts +130 -0
  99. package/daemon/dist/domain/queue-retention.d.ts.map +1 -0
  100. package/daemon/dist/domain/queue-retention.js +224 -0
  101. package/daemon/dist/domain/queue-retention.js.map +1 -0
  102. package/daemon/dist/domain/restore-orchestrator.d.ts +5 -0
  103. package/daemon/dist/domain/restore-orchestrator.d.ts.map +1 -1
  104. package/daemon/dist/domain/restore-orchestrator.js +29 -2
  105. package/daemon/dist/domain/restore-orchestrator.js.map +1 -1
  106. package/daemon/dist/domain/resume-token-capture.d.ts +13 -0
  107. package/daemon/dist/domain/resume-token-capture.d.ts.map +1 -1
  108. package/daemon/dist/domain/resume-token-capture.js +14 -1
  109. package/daemon/dist/domain/resume-token-capture.js.map +1 -1
  110. package/daemon/dist/domain/resume-token-validation.d.ts +1 -1
  111. package/daemon/dist/domain/resume-token-validation.d.ts.map +1 -1
  112. package/daemon/dist/domain/resume-token-validation.js +58 -10
  113. package/daemon/dist/domain/resume-token-validation.js.map +1 -1
  114. package/daemon/dist/domain/review/compose.d.ts +50 -1
  115. package/daemon/dist/domain/review/compose.d.ts.map +1 -1
  116. package/daemon/dist/domain/review/compose.js +92 -3
  117. package/daemon/dist/domain/review/compose.js.map +1 -1
  118. package/daemon/dist/domain/review/fleet-compose.d.ts +52 -0
  119. package/daemon/dist/domain/review/fleet-compose.d.ts.map +1 -0
  120. package/daemon/dist/domain/review/fleet-compose.js +294 -0
  121. package/daemon/dist/domain/review/fleet-compose.js.map +1 -0
  122. package/daemon/dist/domain/review/gather.d.ts +16 -1
  123. package/daemon/dist/domain/review/gather.d.ts.map +1 -1
  124. package/daemon/dist/domain/review/gather.js +177 -41
  125. package/daemon/dist/domain/review/gather.js.map +1 -1
  126. package/daemon/dist/domain/review/types.d.ts +104 -1
  127. package/daemon/dist/domain/review/types.d.ts.map +1 -1
  128. package/daemon/dist/domain/rig-expansion-service.d.ts.map +1 -1
  129. package/daemon/dist/domain/rig-expansion-service.js +3 -0
  130. package/daemon/dist/domain/rig-expansion-service.js.map +1 -1
  131. package/daemon/dist/domain/rig-repository.d.ts +7 -6
  132. package/daemon/dist/domain/rig-repository.d.ts.map +1 -1
  133. package/daemon/dist/domain/rig-repository.js +33 -11
  134. package/daemon/dist/domain/rig-repository.js.map +1 -1
  135. package/daemon/dist/domain/rigspec-codec.d.ts.map +1 -1
  136. package/daemon/dist/domain/rigspec-codec.js +3 -0
  137. package/daemon/dist/domain/rigspec-codec.js.map +1 -1
  138. package/daemon/dist/domain/rigspec-exporter.d.ts.map +1 -1
  139. package/daemon/dist/domain/rigspec-exporter.js +4 -0
  140. package/daemon/dist/domain/rigspec-exporter.js.map +1 -1
  141. package/daemon/dist/domain/rigspec-instantiator.d.ts.map +1 -1
  142. package/daemon/dist/domain/rigspec-instantiator.js +11 -0
  143. package/daemon/dist/domain/rigspec-instantiator.js.map +1 -1
  144. package/daemon/dist/domain/rigspec-preflight.d.ts +6 -0
  145. package/daemon/dist/domain/rigspec-preflight.d.ts.map +1 -1
  146. package/daemon/dist/domain/rigspec-preflight.js +26 -1
  147. package/daemon/dist/domain/rigspec-preflight.js.map +1 -1
  148. package/daemon/dist/domain/rigspec-schema.d.ts.map +1 -1
  149. package/daemon/dist/domain/rigspec-schema.js +20 -1
  150. package/daemon/dist/domain/rigspec-schema.js.map +1 -1
  151. package/daemon/dist/domain/runtime-verifier.d.ts +7 -1
  152. package/daemon/dist/domain/runtime-verifier.d.ts.map +1 -1
  153. package/daemon/dist/domain/runtime-verifier.js +39 -1
  154. package/daemon/dist/domain/runtime-verifier.js.map +1 -1
  155. package/daemon/dist/domain/seat-handover-service.d.ts +9 -0
  156. package/daemon/dist/domain/seat-handover-service.d.ts.map +1 -1
  157. package/daemon/dist/domain/seat-handover-service.js +2 -0
  158. package/daemon/dist/domain/seat-handover-service.js.map +1 -1
  159. package/daemon/dist/domain/seat-identity-store.d.ts +7 -0
  160. package/daemon/dist/domain/seat-identity-store.d.ts.map +1 -1
  161. package/daemon/dist/domain/seat-identity-store.js +27 -0
  162. package/daemon/dist/domain/seat-identity-store.js.map +1 -1
  163. package/daemon/dist/domain/seat-status-service.d.ts.map +1 -1
  164. package/daemon/dist/domain/seat-status-service.js +6 -4
  165. package/daemon/dist/domain/seat-status-service.js.map +1 -1
  166. package/daemon/dist/domain/session-name.d.ts +22 -0
  167. package/daemon/dist/domain/session-name.d.ts.map +1 -1
  168. package/daemon/dist/domain/session-name.js +29 -0
  169. package/daemon/dist/domain/session-name.js.map +1 -1
  170. package/daemon/dist/domain/slices/slice-detail-projector.d.ts.map +1 -1
  171. package/daemon/dist/domain/slices/slice-detail-projector.js +4 -5
  172. package/daemon/dist/domain/slices/slice-detail-projector.js.map +1 -1
  173. package/daemon/dist/domain/spec-library-workflow-scanner.d.ts +18 -2
  174. package/daemon/dist/domain/spec-library-workflow-scanner.d.ts.map +1 -1
  175. package/daemon/dist/domain/spec-library-workflow-scanner.js +23 -1
  176. package/daemon/dist/domain/spec-library-workflow-scanner.js.map +1 -1
  177. package/daemon/dist/domain/startup-proof.d.ts +10 -6
  178. package/daemon/dist/domain/startup-proof.d.ts.map +1 -1
  179. package/daemon/dist/domain/startup-proof.js +35 -7
  180. package/daemon/dist/domain/startup-proof.js.map +1 -1
  181. package/daemon/dist/domain/successor-session-launcher.d.ts +16 -0
  182. package/daemon/dist/domain/successor-session-launcher.d.ts.map +1 -1
  183. package/daemon/dist/domain/successor-session-launcher.js +13 -0
  184. package/daemon/dist/domain/successor-session-launcher.js.map +1 -1
  185. package/daemon/dist/domain/terminal/cmux-provider-adapter.d.ts +27 -0
  186. package/daemon/dist/domain/terminal/cmux-provider-adapter.d.ts.map +1 -0
  187. package/daemon/dist/domain/terminal/cmux-provider-adapter.js +67 -0
  188. package/daemon/dist/domain/terminal/cmux-provider-adapter.js.map +1 -0
  189. package/daemon/dist/domain/terminal/herdr-adapter.d.ts +77 -0
  190. package/daemon/dist/domain/terminal/herdr-adapter.d.ts.map +1 -0
  191. package/daemon/dist/domain/terminal/herdr-adapter.js +266 -0
  192. package/daemon/dist/domain/terminal/herdr-adapter.js.map +1 -0
  193. package/daemon/dist/domain/terminal/herdr-transport.d.ts +50 -0
  194. package/daemon/dist/domain/terminal/herdr-transport.d.ts.map +1 -0
  195. package/daemon/dist/domain/terminal/herdr-transport.js +145 -0
  196. package/daemon/dist/domain/terminal/herdr-transport.js.map +1 -0
  197. package/daemon/dist/domain/terminal/terminal-provider.d.ts +88 -0
  198. package/daemon/dist/domain/terminal/terminal-provider.d.ts.map +1 -0
  199. package/daemon/dist/domain/terminal/terminal-provider.js +17 -0
  200. package/daemon/dist/domain/terminal/terminal-provider.js.map +1 -0
  201. package/daemon/dist/domain/terminal/terminal-service.d.ts +60 -0
  202. package/daemon/dist/domain/terminal/terminal-service.d.ts.map +1 -0
  203. package/daemon/dist/domain/terminal/terminal-service.js +174 -0
  204. package/daemon/dist/domain/terminal/terminal-service.js.map +1 -0
  205. package/daemon/dist/domain/terminal/terminal-views-store.d.ts +77 -0
  206. package/daemon/dist/domain/terminal/terminal-views-store.d.ts.map +1 -0
  207. package/daemon/dist/domain/terminal/terminal-views-store.js +146 -0
  208. package/daemon/dist/domain/terminal/terminal-views-store.js.map +1 -0
  209. package/daemon/dist/domain/terminal/view-composer.d.ts +42 -0
  210. package/daemon/dist/domain/terminal/view-composer.d.ts.map +1 -0
  211. package/daemon/dist/domain/terminal/view-composer.js +137 -0
  212. package/daemon/dist/domain/terminal/view-composer.js.map +1 -0
  213. package/daemon/dist/domain/tmux-option-defaults.d.ts +89 -0
  214. package/daemon/dist/domain/tmux-option-defaults.d.ts.map +1 -0
  215. package/daemon/dist/domain/tmux-option-defaults.js +132 -0
  216. package/daemon/dist/domain/tmux-option-defaults.js.map +1 -0
  217. package/daemon/dist/domain/types.d.ts +34 -1
  218. package/daemon/dist/domain/types.d.ts.map +1 -1
  219. package/daemon/dist/domain/types.js.map +1 -1
  220. package/daemon/dist/domain/user-settings/settings-store.d.ts +1 -1
  221. package/daemon/dist/domain/user-settings/settings-store.d.ts.map +1 -1
  222. package/daemon/dist/domain/user-settings/settings-store.js +92 -0
  223. package/daemon/dist/domain/user-settings/settings-store.js.map +1 -1
  224. package/daemon/dist/domain/workflow/slice-workflow-projection.d.ts.map +1 -1
  225. package/daemon/dist/domain/workflow/slice-workflow-projection.js +6 -2
  226. package/daemon/dist/domain/workflow/slice-workflow-projection.js.map +1 -1
  227. package/daemon/dist/domain/workflow-boot-sweep.d.ts +28 -0
  228. package/daemon/dist/domain/workflow-boot-sweep.d.ts.map +1 -0
  229. package/daemon/dist/domain/workflow-boot-sweep.js +102 -0
  230. package/daemon/dist/domain/workflow-boot-sweep.js.map +1 -0
  231. package/daemon/dist/domain/workflow-deadline.d.ts +74 -0
  232. package/daemon/dist/domain/workflow-deadline.d.ts.map +1 -0
  233. package/daemon/dist/domain/workflow-deadline.js +165 -0
  234. package/daemon/dist/domain/workflow-deadline.js.map +1 -0
  235. package/daemon/dist/domain/workflow-exception-escalation.d.ts +33 -0
  236. package/daemon/dist/domain/workflow-exception-escalation.d.ts.map +1 -0
  237. package/daemon/dist/domain/workflow-exception-escalation.js +104 -0
  238. package/daemon/dist/domain/workflow-exception-escalation.js.map +1 -0
  239. package/daemon/dist/domain/workflow-exception-router.d.ts +33 -0
  240. package/daemon/dist/domain/workflow-exception-router.d.ts.map +1 -0
  241. package/daemon/dist/domain/workflow-exception-router.js +96 -0
  242. package/daemon/dist/domain/workflow-exception-router.js.map +1 -0
  243. package/daemon/dist/domain/workflow-exception.d.ts +90 -0
  244. package/daemon/dist/domain/workflow-exception.d.ts.map +1 -0
  245. package/daemon/dist/domain/workflow-exception.js +122 -0
  246. package/daemon/dist/domain/workflow-exception.js.map +1 -0
  247. package/daemon/dist/domain/workflow-frontier-guard.d.ts +24 -0
  248. package/daemon/dist/domain/workflow-frontier-guard.d.ts.map +1 -0
  249. package/daemon/dist/domain/workflow-frontier-guard.js +30 -0
  250. package/daemon/dist/domain/workflow-frontier-guard.js.map +1 -0
  251. package/daemon/dist/domain/workflow-instance-store.d.ts +28 -0
  252. package/daemon/dist/domain/workflow-instance-store.d.ts.map +1 -1
  253. package/daemon/dist/domain/workflow-instance-store.js +66 -10
  254. package/daemon/dist/domain/workflow-instance-store.js.map +1 -1
  255. package/daemon/dist/domain/workflow-keepalive-arming.d.ts +35 -0
  256. package/daemon/dist/domain/workflow-keepalive-arming.d.ts.map +1 -0
  257. package/daemon/dist/domain/workflow-keepalive-arming.js +87 -0
  258. package/daemon/dist/domain/workflow-keepalive-arming.js.map +1 -0
  259. package/daemon/dist/domain/workflow-projector.d.ts +117 -2
  260. package/daemon/dist/domain/workflow-projector.d.ts.map +1 -1
  261. package/daemon/dist/domain/workflow-projector.js +672 -41
  262. package/daemon/dist/domain/workflow-projector.js.map +1 -1
  263. package/daemon/dist/domain/workflow-role-context.d.ts +57 -0
  264. package/daemon/dist/domain/workflow-role-context.d.ts.map +1 -0
  265. package/daemon/dist/domain/workflow-role-context.js +120 -0
  266. package/daemon/dist/domain/workflow-role-context.js.map +1 -0
  267. package/daemon/dist/domain/workflow-role-resolver.d.ts +65 -0
  268. package/daemon/dist/domain/workflow-role-resolver.d.ts.map +1 -0
  269. package/daemon/dist/domain/workflow-role-resolver.js +108 -0
  270. package/daemon/dist/domain/workflow-role-resolver.js.map +1 -0
  271. package/daemon/dist/domain/workflow-runtime.d.ts +157 -1
  272. package/daemon/dist/domain/workflow-runtime.d.ts.map +1 -1
  273. package/daemon/dist/domain/workflow-runtime.js +718 -11
  274. package/daemon/dist/domain/workflow-runtime.js.map +1 -1
  275. package/daemon/dist/domain/workflow-spec-cache.d.ts +26 -1
  276. package/daemon/dist/domain/workflow-spec-cache.d.ts.map +1 -1
  277. package/daemon/dist/domain/workflow-spec-cache.js +327 -13
  278. package/daemon/dist/domain/workflow-spec-cache.js.map +1 -1
  279. package/daemon/dist/domain/workflow-types.d.ts +143 -8
  280. package/daemon/dist/domain/workflow-types.d.ts.map +1 -1
  281. package/daemon/dist/domain/workflow-types.js +14 -1
  282. package/daemon/dist/domain/workflow-types.js.map +1 -1
  283. package/daemon/dist/domain/workflow-validator.d.ts +11 -1
  284. package/daemon/dist/domain/workflow-validator.d.ts.map +1 -1
  285. package/daemon/dist/domain/workflow-validator.js +246 -1
  286. package/daemon/dist/domain/workflow-validator.js.map +1 -1
  287. package/daemon/dist/index.d.ts +17 -0
  288. package/daemon/dist/index.d.ts.map +1 -1
  289. package/daemon/dist/index.js +44 -0
  290. package/daemon/dist/index.js.map +1 -1
  291. package/daemon/dist/routes/activity.js +22 -0
  292. package/daemon/dist/routes/activity.js.map +1 -1
  293. package/daemon/dist/routes/hosts.d.ts +5 -0
  294. package/daemon/dist/routes/hosts.d.ts.map +1 -0
  295. package/daemon/dist/routes/hosts.js +346 -0
  296. package/daemon/dist/routes/hosts.js.map +1 -0
  297. package/daemon/dist/routes/queue.d.ts +2 -7
  298. package/daemon/dist/routes/queue.d.ts.map +1 -1
  299. package/daemon/dist/routes/queue.js +264 -9
  300. package/daemon/dist/routes/queue.js.map +1 -1
  301. package/daemon/dist/routes/review.d.ts.map +1 -1
  302. package/daemon/dist/routes/review.js +26 -0
  303. package/daemon/dist/routes/review.js.map +1 -1
  304. package/daemon/dist/routes/seat.js +13 -0
  305. package/daemon/dist/routes/seat.js.map +1 -1
  306. package/daemon/dist/routes/terminal.d.ts +11 -0
  307. package/daemon/dist/routes/terminal.d.ts.map +1 -0
  308. package/daemon/dist/routes/terminal.js +104 -0
  309. package/daemon/dist/routes/terminal.js.map +1 -0
  310. package/daemon/dist/routes/workflow.d.ts.map +1 -1
  311. package/daemon/dist/routes/workflow.js +102 -10
  312. package/daemon/dist/routes/workflow.js.map +1 -1
  313. package/daemon/dist/server.d.ts +5 -0
  314. package/daemon/dist/server.d.ts.map +1 -1
  315. package/daemon/dist/server.js +22 -0
  316. package/daemon/dist/server.js.map +1 -1
  317. package/daemon/dist/startup.d.ts.map +1 -1
  318. package/daemon/dist/startup.js +221 -12
  319. package/daemon/dist/startup.js.map +1 -1
  320. package/daemon/specs/agents/factory-rsi/dogfood/agent.yaml +29 -0
  321. package/daemon/specs/agents/factory-rsi/dogfood/guidance/role.md +37 -0
  322. package/daemon/specs/agents/factory-rsi/release-manager/agent.yaml +29 -0
  323. package/daemon/specs/agents/factory-rsi/release-manager/guidance/role.md +40 -0
  324. package/daemon/specs/agents/shared/skills/core/mission-slice-sop/SKILL.md +6 -8
  325. package/daemon/specs/agents/shared/skills/core/openrig-cmux/SKILL.md +86 -0
  326. package/daemon/specs/agents/shared/skills/core/openrig-herdr/SKILL.md +158 -0
  327. package/daemon/specs/agents/shared/skills/core/openrig-user/SKILL.md +6 -6
  328. package/daemon/specs/rigs/launch/factory-rsi/CULTURE.md +47 -0
  329. package/daemon/specs/rigs/launch/factory-rsi/rig.yaml +115 -0
  330. package/dist/build-info.js +3 -3
  331. package/dist/commands/broadcast.d.ts +6 -1
  332. package/dist/commands/broadcast.d.ts.map +1 -1
  333. package/dist/commands/broadcast.js +101 -15
  334. package/dist/commands/broadcast.js.map +1 -1
  335. package/dist/commands/capture.d.ts.map +1 -1
  336. package/dist/commands/capture.js +99 -8
  337. package/dist/commands/capture.js.map +1 -1
  338. package/dist/commands/config.d.ts.map +1 -1
  339. package/dist/commands/config.js +4 -0
  340. package/dist/commands/config.js.map +1 -1
  341. package/dist/commands/down.d.ts.map +1 -1
  342. package/dist/commands/down.js +5 -0
  343. package/dist/commands/down.js.map +1 -1
  344. package/dist/commands/host.d.ts +14 -0
  345. package/dist/commands/host.d.ts.map +1 -1
  346. package/dist/commands/host.js +338 -14
  347. package/dist/commands/host.js.map +1 -1
  348. package/dist/commands/launch.d.ts.map +1 -1
  349. package/dist/commands/launch.js +5 -0
  350. package/dist/commands/launch.js.map +1 -1
  351. package/dist/commands/ps.d.ts.map +1 -1
  352. package/dist/commands/ps.js +10 -4
  353. package/dist/commands/ps.js.map +1 -1
  354. package/dist/commands/queue.d.ts +36 -0
  355. package/dist/commands/queue.d.ts.map +1 -1
  356. package/dist/commands/queue.js +73 -7
  357. package/dist/commands/queue.js.map +1 -1
  358. package/dist/commands/restore-packet.d.ts.map +1 -1
  359. package/dist/commands/restore-packet.js +13 -2
  360. package/dist/commands/restore-packet.js.map +1 -1
  361. package/dist/commands/send.d.ts.map +1 -1
  362. package/dist/commands/send.js +114 -9
  363. package/dist/commands/send.js.map +1 -1
  364. package/dist/commands/terminal.d.ts +6 -0
  365. package/dist/commands/terminal.d.ts.map +1 -0
  366. package/dist/commands/terminal.js +116 -0
  367. package/dist/commands/terminal.js.map +1 -0
  368. package/dist/commands/transcript.d.ts +6 -1
  369. package/dist/commands/transcript.d.ts.map +1 -1
  370. package/dist/commands/transcript.js +113 -30
  371. package/dist/commands/transcript.js.map +1 -1
  372. package/dist/commands/up.d.ts.map +1 -1
  373. package/dist/commands/up.js +9 -0
  374. package/dist/commands/up.js.map +1 -1
  375. package/dist/commands/whoami.d.ts.map +1 -1
  376. package/dist/commands/whoami.js +11 -0
  377. package/dist/commands/whoami.js.map +1 -1
  378. package/dist/commands/workflow-errors.d.ts +23 -0
  379. package/dist/commands/workflow-errors.d.ts.map +1 -0
  380. package/dist/commands/workflow-errors.js +100 -0
  381. package/dist/commands/workflow-errors.js.map +1 -0
  382. package/dist/commands/workflow-follow.d.ts +71 -0
  383. package/dist/commands/workflow-follow.d.ts.map +1 -0
  384. package/dist/commands/workflow-follow.js +259 -0
  385. package/dist/commands/workflow-follow.js.map +1 -0
  386. package/dist/commands/workflow-render.d.ts +114 -0
  387. package/dist/commands/workflow-render.d.ts.map +1 -0
  388. package/dist/commands/workflow-render.js +223 -0
  389. package/dist/commands/workflow-render.js.map +1 -0
  390. package/dist/commands/workflow.d.ts +1 -0
  391. package/dist/commands/workflow.d.ts.map +1 -1
  392. package/dist/commands/workflow.js +278 -14
  393. package/dist/commands/workflow.js.map +1 -1
  394. package/dist/config-store.d.ts +15 -1
  395. package/dist/config-store.d.ts.map +1 -1
  396. package/dist/config-store.js +103 -0
  397. package/dist/config-store.js.map +1 -1
  398. package/dist/cross-host-cli-helpers.d.ts +13 -0
  399. package/dist/cross-host-cli-helpers.d.ts.map +1 -1
  400. package/dist/cross-host-cli-helpers.js +27 -0
  401. package/dist/cross-host-cli-helpers.js.map +1 -1
  402. package/dist/cross-host-target.d.ts +49 -0
  403. package/dist/cross-host-target.d.ts.map +1 -0
  404. package/dist/cross-host-target.js +35 -0
  405. package/dist/cross-host-target.js.map +1 -0
  406. package/dist/host-registry.d.ts +8 -0
  407. package/dist/host-registry.d.ts.map +1 -1
  408. package/dist/host-registry.js +32 -0
  409. package/dist/host-registry.js.map +1 -1
  410. package/dist/host-selection.d.ts +13 -0
  411. package/dist/host-selection.d.ts.map +1 -0
  412. package/dist/host-selection.js +54 -0
  413. package/dist/host-selection.js.map +1 -0
  414. package/dist/index.d.ts +2 -0
  415. package/dist/index.d.ts.map +1 -1
  416. package/dist/index.js +2 -0
  417. package/dist/index.js.map +1 -1
  418. package/dist/remote-host-ops.d.ts +1 -0
  419. package/dist/remote-host-ops.d.ts.map +1 -1
  420. package/dist/remote-host-ops.js +11 -4
  421. package/dist/remote-host-ops.js.map +1 -1
  422. package/dist/session-name.d.ts +23 -0
  423. package/dist/session-name.d.ts.map +1 -0
  424. package/dist/session-name.js +61 -0
  425. package/dist/session-name.js.map +1 -0
  426. package/package.json +1 -1
  427. package/ui/dist/assets/index-CFqxa0zW.css +32 -0
  428. package/ui/dist/assets/index-zrFqS7gL.js +623 -0
  429. package/ui/dist/index.html +2 -2
  430. package/ui/dist/assets/index-D69ZhNIr.js +0 -598
  431. package/ui/dist/assets/index-DJYun-8d.css +0 -32
@@ -0,0 +1,71 @@
1
+ import type { DaemonClient } from "../client.js";
2
+ /**
3
+ * OPR.0.4.6.WF3 FR-1 — the shared follow engine behind `rig workflow
4
+ * run` and `rig workflow watch`: two verbs, ONE renderer (the argo
5
+ * shape: same render at attach and live).
6
+ *
7
+ * Transport: the SHIPPED workflow SSE endpoint (`GET
8
+ * /api/workflow/sse`) consumed with the in-repo chatroom reader
9
+ * pattern (fetch + event-stream line decode). Zero daemon changes
10
+ * (BR-2) — this file only reads.
11
+ *
12
+ * Attach race (arch R2, snapshot-first-then-stream): the stream is
13
+ * OPENED first, then a state snapshot (`/trace`) is rendered, then
14
+ * live events flow. Events that duplicate a trail row already in the
15
+ * snapshot are deduped by priorQitemId, so fast early steps that
16
+ * close before attach are still shown exactly once.
17
+ *
18
+ * Exit codes (arch n1 — outcome codes DISTINCT from error codes):
19
+ * 0 = workflow completed
20
+ * 3 = workflow FAILED (the outcome-as-exit-code kubectl default —
21
+ * a workflow that fails is a command that fails; never collides
22
+ * with the shipped 1=4xx / 2=5xx transport codes)
23
+ */
24
+ export declare const EXIT_WORKFLOW_FAILED = 3;
25
+ export interface FollowInstanceView {
26
+ instanceId: string;
27
+ workflowName?: string;
28
+ status: string;
29
+ currentStepId?: string | null;
30
+ currentFrontier?: string[];
31
+ }
32
+ export interface FollowTrailRow {
33
+ stepId: string;
34
+ stepRole?: string;
35
+ closedAt?: string;
36
+ closureReason: string;
37
+ actorSession: string;
38
+ nextQitemId?: string | null;
39
+ priorQitemId: string;
40
+ }
41
+ export interface FollowIo {
42
+ /** stdout line sink (tests inject; default console.log). */
43
+ out: (line: string) => void;
44
+ /** stderr line sink for honest transport-state notices. */
45
+ err: (line: string) => void;
46
+ /** sleep injection so tests never wait wall-clock. */
47
+ sleep: (ms: number) => Promise<void>;
48
+ /** fetch injection for the SSE leg (tests stub the stream). */
49
+ fetchImpl: typeof fetch;
50
+ }
51
+ export declare function realFollowIo(): FollowIo;
52
+ export interface FollowOptions {
53
+ json: boolean;
54
+ io?: FollowIo;
55
+ /** SSE reconnect attempts before degrading to the poll fallback. */
56
+ maxReconnects?: number;
57
+ /** Poll fallback interval (ms). */
58
+ pollIntervalMs?: number;
59
+ }
60
+ /** Outcome → process exit code, per the FR-1 contract. */
61
+ export declare function outcomeExitCode(status: string): number;
62
+ /**
63
+ * Follow one instance to a terminal state. Returns the exit code the
64
+ * caller should set (0 completed / 3 failed / 1 transport-4xx / 2
65
+ * transport-5xx). Never throws for stream drops — those degrade
66
+ * honestly (reconnect notice → poll-fallback notice), per the
67
+ * chatroom precedent: the render may fall back, it never freezes
68
+ * silently.
69
+ */
70
+ export declare function followInstance(client: DaemonClient, instanceId: string, opts: FollowOptions): Promise<number>;
71
+ //# sourceMappingURL=workflow-follow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-follow.d.ts","sourceRoot":"","sources":["../../src/commands/workflow-follow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,oBAAoB,IAAI,CAAC;AAKtC,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,EAAE,MAAM,CAAC;CACtB;AAiBD,MAAM,WAAW,QAAQ;IACvB,4DAA4D;IAC5D,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5B,2DAA2D;IAC3D,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5B,sDAAsD;IACtD,KAAK,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,+DAA+D;IAC/D,SAAS,EAAE,OAAO,KAAK,CAAC;CACzB;AAED,wBAAgB,YAAY,IAAI,QAAQ,CAOvC;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,OAAO,CAAC;IACd,EAAE,CAAC,EAAE,QAAQ,CAAC;IACd,oEAAoE;IACpE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mCAAmC;IACnC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAsCD,0DAA0D;AAC1D,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAGtD;AAiCD;;;;;;;GAOG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,YAAY,EACpB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,aAAa,GAClB,OAAO,CAAC,MAAM,CAAC,CAiGjB"}
@@ -0,0 +1,259 @@
1
+ /**
2
+ * OPR.0.4.6.WF3 FR-1 — the shared follow engine behind `rig workflow
3
+ * run` and `rig workflow watch`: two verbs, ONE renderer (the argo
4
+ * shape: same render at attach and live).
5
+ *
6
+ * Transport: the SHIPPED workflow SSE endpoint (`GET
7
+ * /api/workflow/sse`) consumed with the in-repo chatroom reader
8
+ * pattern (fetch + event-stream line decode). Zero daemon changes
9
+ * (BR-2) — this file only reads.
10
+ *
11
+ * Attach race (arch R2, snapshot-first-then-stream): the stream is
12
+ * OPENED first, then a state snapshot (`/trace`) is rendered, then
13
+ * live events flow. Events that duplicate a trail row already in the
14
+ * snapshot are deduped by priorQitemId, so fast early steps that
15
+ * close before attach are still shown exactly once.
16
+ *
17
+ * Exit codes (arch n1 — outcome codes DISTINCT from error codes):
18
+ * 0 = workflow completed
19
+ * 3 = workflow FAILED (the outcome-as-exit-code kubectl default —
20
+ * a workflow that fails is a command that fails; never collides
21
+ * with the shipped 1=4xx / 2=5xx transport codes)
22
+ */
23
+ export const EXIT_WORKFLOW_FAILED = 3;
24
+ /** Terminal statuses a follow run resolves on. */
25
+ const TERMINAL_STATUSES = new Set(["completed", "failed"]);
26
+ export function realFollowIo() {
27
+ return {
28
+ out: (line) => console.log(line),
29
+ err: (line) => process.stderr.write(`${line}\n`),
30
+ sleep: (ms) => new Promise((resolve) => setTimeout(resolve, ms)),
31
+ fetchImpl: fetch,
32
+ };
33
+ }
34
+ const STATUS_GLYPH = {
35
+ completed: "✔",
36
+ failed: "✖",
37
+ active: "●",
38
+ waiting: "◐",
39
+ };
40
+ function glyphFor(status) {
41
+ return STATUS_GLYPH[status] ?? "●";
42
+ }
43
+ function renderTrailRow(row) {
44
+ const exitGlyph = row.closureReason === "failed" ? "✖" : "✔";
45
+ const next = row.nextQitemId ? ` → ${row.nextQitemId}` : "";
46
+ return ` ${exitGlyph} ${row.stepId} ${row.closureReason} by ${row.actorSession}${next}`;
47
+ }
48
+ function renderEvent(event) {
49
+ switch (event.type) {
50
+ case "workflow.instantiated":
51
+ return ` ● instance ${event.instanceId ?? ""} created${event.workflowName ? ` (${event.workflowName})` : ""}`;
52
+ case "workflow.step_closed":
53
+ return ` ${event.closureReason === "failed" ? "✖" : "✔"} ${event.stepId ?? "(step)"} ${event.closureReason ?? ""} by ${event.actorSession ?? "(unknown)"}`;
54
+ case "workflow.next_qitem_projected":
55
+ return ` → ${event.nextStepId ?? "(next)"} owner ${event.nextOwner ?? "(unresolved)"} packet ${event.nextQitemId ?? ""}`;
56
+ case "workflow.completed":
57
+ return ` ✔ workflow completed`;
58
+ case "workflow.failed":
59
+ return ` ✖ workflow FAILED: ${event.reason ?? "(no reason recorded)"}`;
60
+ default:
61
+ // routing_table_changed and future additive types render as a
62
+ // neutral one-liner rather than being silently dropped.
63
+ return ` · ${event.type}`;
64
+ }
65
+ }
66
+ /** Outcome → process exit code, per the FR-1 contract. */
67
+ export function outcomeExitCode(status) {
68
+ if (status === "failed")
69
+ return EXIT_WORKFLOW_FAILED;
70
+ return 0;
71
+ }
72
+ async function fetchSnapshot(client, instanceId) {
73
+ const res = await client.get(`/api/workflow/${encodeURIComponent(instanceId)}/trace`);
74
+ if (res.status >= 400 || !res.data?.instance) {
75
+ return { ok: false, status: res.status, body: res.data };
76
+ }
77
+ return { ok: true, snapshot: { instance: res.data.instance, trail: res.data.trail ?? [] } };
78
+ }
79
+ function renderSnapshot(snapshot, io, json) {
80
+ if (json) {
81
+ io.out(JSON.stringify({ type: "snapshot", instance: snapshot.instance, trail: snapshot.trail }));
82
+ return;
83
+ }
84
+ const inst = snapshot.instance;
85
+ io.out(`${glyphFor(inst.status)} ${inst.instanceId}${inst.workflowName ? ` ${inst.workflowName}` : ""} status=${inst.status}`);
86
+ for (const row of snapshot.trail)
87
+ io.out(renderTrailRow(row));
88
+ if (inst.currentStepId) {
89
+ io.out(` ▸ at step ${inst.currentStepId} frontier=[${(inst.currentFrontier ?? []).join(", ")}]`);
90
+ }
91
+ }
92
+ /**
93
+ * Follow one instance to a terminal state. Returns the exit code the
94
+ * caller should set (0 completed / 3 failed / 1 transport-4xx / 2
95
+ * transport-5xx). Never throws for stream drops — those degrade
96
+ * honestly (reconnect notice → poll-fallback notice), per the
97
+ * chatroom precedent: the render may fall back, it never freezes
98
+ * silently.
99
+ */
100
+ export async function followInstance(client, instanceId, opts) {
101
+ const io = opts.io ?? realFollowIo();
102
+ const maxReconnects = opts.maxReconnects ?? 3;
103
+ const pollIntervalMs = opts.pollIntervalMs ?? 3000;
104
+ // Walk-caught (VM iteration 2): without aborting the SSE connection
105
+ // on return, the open socket keeps the node event loop alive and the
106
+ // process hangs ~minutes after the terminal event before exiting —
107
+ // a kubectl-style verb must exit PROMPTLY on outcome. Every return
108
+ // path aborts via the finally below.
109
+ const aborter = new AbortController();
110
+ try {
111
+ // 1. Open the stream FIRST (arch R2) so no event can fall between
112
+ // snapshot and attach. Events are buffered by the reader until
113
+ // the snapshot has rendered.
114
+ const sseUrl = `${client.baseUrl}/api/workflow/sse`;
115
+ let streamRes = null;
116
+ try {
117
+ streamRes = await io.fetchImpl(sseUrl, {
118
+ headers: { Accept: "text/event-stream" },
119
+ signal: aborter.signal,
120
+ });
121
+ if (!streamRes.ok || !streamRes.body)
122
+ streamRes = null;
123
+ }
124
+ catch {
125
+ streamRes = null;
126
+ }
127
+ // 2. Snapshot + render.
128
+ const snap = await fetchSnapshot(client, instanceId);
129
+ if (!snap.ok) {
130
+ io.out(JSON.stringify(snap.body ?? { error: "trace_failed" }, null, opts.json ? 0 : 2));
131
+ return snap.status >= 500 ? 2 : 1;
132
+ }
133
+ renderSnapshot(snap.snapshot, io, opts.json);
134
+ if (TERMINAL_STATUSES.has(snap.snapshot.instance.status)) {
135
+ return outcomeExitCode(snap.snapshot.instance.status);
136
+ }
137
+ // Dedup guard: trail rows already rendered by the snapshot must not
138
+ // re-render when the (already-open) stream replays their events.
139
+ const seenClosures = new Set(snap.snapshot.trail.map((row) => row.priorQitemId));
140
+ let reconnectsLeft = maxReconnects;
141
+ // 3. Stream loop with honest degradation.
142
+ while (true) {
143
+ if (streamRes?.body) {
144
+ const outcome = await consumeStream(streamRes.body, instanceId, seenClosures, io, opts.json);
145
+ if (outcome !== null)
146
+ return outcome;
147
+ // Stream ended without a terminal event — the drop path.
148
+ streamRes = null;
149
+ }
150
+ if (reconnectsLeft > 0) {
151
+ reconnectsLeft -= 1;
152
+ io.err(`stream dropped — reconnecting (${maxReconnects - reconnectsLeft}/${maxReconnects})`);
153
+ try {
154
+ const retry = await io.fetchImpl(sseUrl, {
155
+ headers: { Accept: "text/event-stream" },
156
+ signal: aborter.signal,
157
+ });
158
+ if (retry.ok && retry.body) {
159
+ streamRes = retry;
160
+ continue;
161
+ }
162
+ }
163
+ catch {
164
+ // fall through to next reconnect / poll fallback
165
+ }
166
+ continue;
167
+ }
168
+ // 4. Poll fallback — announced, never silent (the chatroom rule).
169
+ io.err(`stream unavailable — degrading to poll fallback every ${Math.round(pollIntervalMs / 1000)}s`);
170
+ while (true) {
171
+ await io.sleep(pollIntervalMs);
172
+ const poll = await fetchSnapshot(client, instanceId);
173
+ if (!poll.ok) {
174
+ io.out(JSON.stringify(poll.body ?? { error: "poll_failed" }, null, opts.json ? 0 : 2));
175
+ return poll.status >= 500 ? 2 : 1;
176
+ }
177
+ // Render only trail rows not yet seen, preserving exactly-once.
178
+ for (const row of poll.snapshot.trail) {
179
+ if (seenClosures.has(row.priorQitemId))
180
+ continue;
181
+ seenClosures.add(row.priorQitemId);
182
+ if (opts.json)
183
+ io.out(JSON.stringify({ type: "trail", row }));
184
+ else
185
+ io.out(renderTrailRow(row));
186
+ }
187
+ if (TERMINAL_STATUSES.has(poll.snapshot.instance.status)) {
188
+ if (opts.json)
189
+ io.out(JSON.stringify({ type: "terminal", status: poll.snapshot.instance.status }));
190
+ else
191
+ io.out(` ${glyphFor(poll.snapshot.instance.status)} workflow ${poll.snapshot.instance.status}`);
192
+ return outcomeExitCode(poll.snapshot.instance.status);
193
+ }
194
+ }
195
+ }
196
+ }
197
+ finally {
198
+ // Kill the SSE socket so the process exits promptly on outcome
199
+ // (the walk-caught hang: an un-aborted keep-alive held the event
200
+ // loop open for minutes after workflow.completed).
201
+ aborter.abort();
202
+ }
203
+ }
204
+ /**
205
+ * Consume one SSE body until a terminal event for the instance (→
206
+ * exit code) or stream end (→ null: caller reconnects/degrades).
207
+ */
208
+ async function consumeStream(body, instanceId, seenClosures, io, json) {
209
+ const reader = body.getReader();
210
+ const decoder = new TextDecoder();
211
+ let buffer = "";
212
+ try {
213
+ while (true) {
214
+ const { done, value } = await reader.read();
215
+ if (done)
216
+ return null;
217
+ buffer += decoder.decode(value, { stream: true });
218
+ const lines = buffer.split("\n");
219
+ buffer = lines.pop() ?? "";
220
+ for (const line of lines) {
221
+ if (!line.startsWith("data:"))
222
+ continue;
223
+ let event;
224
+ try {
225
+ event = JSON.parse(line.slice(5).trim());
226
+ }
227
+ catch {
228
+ continue; // malformed data line — skip (chatroom precedent)
229
+ }
230
+ if (event.instanceId !== instanceId)
231
+ continue;
232
+ if (event.type === "workflow.step_closed" && typeof event.priorQitemId === "string") {
233
+ if (seenClosures.has(event.priorQitemId))
234
+ continue; // snapshot already showed it
235
+ seenClosures.add(event.priorQitemId);
236
+ }
237
+ if (json) {
238
+ io.out(JSON.stringify(event));
239
+ }
240
+ else {
241
+ const rendered = renderEvent(event);
242
+ if (rendered !== null)
243
+ io.out(rendered);
244
+ }
245
+ if (event.type === "workflow.completed")
246
+ return 0;
247
+ if (event.type === "workflow.failed")
248
+ return EXIT_WORKFLOW_FAILED;
249
+ }
250
+ }
251
+ }
252
+ catch {
253
+ return null; // read error = drop; caller handles honestly
254
+ }
255
+ finally {
256
+ reader.releaseLock();
257
+ }
258
+ }
259
+ //# sourceMappingURL=workflow-follow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-follow.js","sourceRoot":"","sources":["../../src/commands/workflow-follow.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,114 @@
1
+ /**
2
+ * OPR.0.4.6.WF3 FR-2 — the glanceable human renderers for
3
+ * trace/list/show. RENDER-SIDE ONLY (BR-2): these functions format
4
+ * daemon payloads the CLI already receives; `--json` paths never come
5
+ * through here and stay byte-identical to the shipped output.
6
+ *
7
+ * Shapes ported from in-repo precedent: the `rig ps` table mechanics
8
+ * (fitCell/truncate) and the argo-get per-step tree bar (STEP / ACTOR
9
+ * / EXIT / DURATION columns with status glyphs).
10
+ *
11
+ * Present-tolerant fields: WF-2's branch/gate additions
12
+ * (closureEvidence.branch_taken etc.) render when the payload carries
13
+ * them and leave no residue when absent — this module never requires
14
+ * them (WF-3 builds against the pre-WF-2 tip; the fields land with
15
+ * WF-2).
16
+ */
17
+ export interface RenderInstance {
18
+ instanceId: string;
19
+ workflowName?: string;
20
+ workflowVersion?: string;
21
+ status: string;
22
+ createdBySession?: string;
23
+ createdAt?: string;
24
+ currentStepId?: string | null;
25
+ currentFrontier?: string[];
26
+ hopCount?: number;
27
+ /** OPR.0.4.6.FAC1: the instance's bound rig (API-carried; null/absent = unbound, renders nothing). */
28
+ boundRig?: string | null;
29
+ /**
30
+ * WF-1 FR-2's API-carried classification (present since the
31
+ * completion fixback at 384e60f1). RAIL 1 (arch ruling): the CLI
32
+ * CONSUMES this verbatim and never recomputes a threshold or class.
33
+ */
34
+ deadline?: {
35
+ state: string;
36
+ evidence?: {
37
+ stepId?: string | null;
38
+ ownerSession?: string;
39
+ overdueBySeconds?: number;
40
+ ageSeconds?: number;
41
+ } | null;
42
+ };
43
+ /** Present on waiting instances that recorded their park decision. */
44
+ lastContinuationDecision?: {
45
+ blockedOn?: string | null;
46
+ } | null;
47
+ }
48
+ export interface RenderTrailRow {
49
+ stepId: string;
50
+ stepRole?: string;
51
+ closedAt?: string;
52
+ closureReason: string;
53
+ closureEvidence?: Record<string, unknown> | null;
54
+ actorSession: string;
55
+ nextQitemId?: string | null;
56
+ priorQitemId?: string;
57
+ }
58
+ export declare function statusGlyph(status: string): string;
59
+ /** Compact human duration between two ISO timestamps ("3s", "4m", "2h", "5d"). */
60
+ export declare function humanDuration(fromIso: string | undefined, toIso: string | undefined): string;
61
+ /** Instance age relative to a supplied "now" (injectable for tests). */
62
+ export declare function humanAge(createdAt: string | undefined, nowIso: string): string;
63
+ /** Compact render of a plain seconds quantity (same scale rules). */
64
+ export declare function humanSeconds(seconds: number): string;
65
+ /**
66
+ * The trace tree (mini-req 2's bar: where it is + how it got there,
67
+ * one screen, no JSON literacy required).
68
+ */
69
+ export declare function renderTraceTree(instance: RenderInstance, trail: RenderTrailRow[], nowIso?: string): string[];
70
+ /**
71
+ * OPR.0.4.6.WF3 FR-3 — the attention marker for a list row (the
72
+ * single marker home). Classes: failed · stuck (consumed VERBATIM
73
+ * from the API-carried deadline classification — rail 1: the CLI
74
+ * never recomputes a threshold or class) · waiting. A row shows its
75
+ * highest-priority class; the `status` verb shows ALL classes per
76
+ * instance (exactly-once, combined reasons).
77
+ */
78
+ export declare function attentionMarker(instance: RenderInstance): string;
79
+ export interface AttentionRow {
80
+ instanceId: string;
81
+ workflowName: string;
82
+ /** All classes for this instance — exactly-once row, combined. */
83
+ classes: string[];
84
+ reasons: string[];
85
+ /** The actionable affordance (what-to-do-next), per class priority. */
86
+ affordance: string;
87
+ }
88
+ export interface AttentionRollup {
89
+ counts: {
90
+ total: number;
91
+ active: number;
92
+ waiting: number;
93
+ completed: number;
94
+ failed: number;
95
+ };
96
+ attention: AttentionRow[];
97
+ }
98
+ /**
99
+ * Compose the rollup from list rows. Pure arithmetic over
100
+ * pre-classified rows (the arch ruling's boundary: counting +
101
+ * grouping + rendering is render-side; the ONE correctness-rule
102
+ * composition — the threshold classification — arrives ALREADY DONE
103
+ * in instance.deadline). Per-instance dedup by instanceId (rail 2):
104
+ * an instance with multiple attention reasons renders ONCE with all
105
+ * of them.
106
+ */
107
+ export declare function composeAttentionRollup(instances: RenderInstance[]): AttentionRollup;
108
+ /** Human render of the rollup — proven-empty, never blank. */
109
+ export declare function renderStatus(rollup: AttentionRollup): string[];
110
+ /** The list table: INSTANCE · WORKFLOW · STATUS · STEP · AGE · ATTN. */
111
+ export declare function renderInstanceList(instances: RenderInstance[], nowIso?: string): string[];
112
+ /** The show summary, headed by the status line. */
113
+ export declare function renderInstanceShow(instance: RenderInstance, nowIso?: string): string[];
114
+ //# sourceMappingURL=workflow-render.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-render.d.ts","sourceRoot":"","sources":["../../src/commands/workflow-render.ts"],"names":[],"mappings":"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"}