@openrig/cli 0.3.4-rc.0 → 0.4.0

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 (250) hide show
  1. package/daemon/assets/plugins/openrig-core/hooks/scripts/activity-relay.cjs +34 -0
  2. package/daemon/dist/adapters/codex-resume.d.ts +2 -1
  3. package/daemon/dist/adapters/codex-resume.d.ts.map +1 -1
  4. package/daemon/dist/adapters/codex-resume.js +18 -6
  5. package/daemon/dist/adapters/codex-resume.js.map +1 -1
  6. package/daemon/dist/adapters/codex-runtime-adapter.d.ts +5 -1
  7. package/daemon/dist/adapters/codex-runtime-adapter.d.ts.map +1 -1
  8. package/daemon/dist/adapters/codex-runtime-adapter.js +58 -5
  9. package/daemon/dist/adapters/codex-runtime-adapter.js.map +1 -1
  10. package/daemon/dist/adapters/tmux.d.ts +28 -14
  11. package/daemon/dist/adapters/tmux.d.ts.map +1 -1
  12. package/daemon/dist/adapters/tmux.js +65 -30
  13. package/daemon/dist/adapters/tmux.js.map +1 -1
  14. package/daemon/dist/db/migrations/043_resume_provenance.d.ts +3 -0
  15. package/daemon/dist/db/migrations/043_resume_provenance.d.ts.map +1 -0
  16. package/daemon/dist/db/migrations/043_resume_provenance.js +5 -0
  17. package/daemon/dist/db/migrations/043_resume_provenance.js.map +1 -0
  18. package/daemon/dist/domain/agent-activity-store.d.ts +11 -1
  19. package/daemon/dist/domain/agent-activity-store.d.ts.map +1 -1
  20. package/daemon/dist/domain/agent-activity-store.js +11 -2
  21. package/daemon/dist/domain/agent-activity-store.js.map +1 -1
  22. package/daemon/dist/domain/native-resume-probe.d.ts +2 -1
  23. package/daemon/dist/domain/native-resume-probe.d.ts.map +1 -1
  24. package/daemon/dist/domain/native-resume-probe.js +21 -2
  25. package/daemon/dist/domain/native-resume-probe.js.map +1 -1
  26. package/daemon/dist/domain/node-inventory.d.ts.map +1 -1
  27. package/daemon/dist/domain/node-inventory.js +70 -46
  28. package/daemon/dist/domain/node-inventory.js.map +1 -1
  29. package/daemon/dist/domain/node-launcher.d.ts +7 -7
  30. package/daemon/dist/domain/node-launcher.d.ts.map +1 -1
  31. package/daemon/dist/domain/node-launcher.js +0 -22
  32. package/daemon/dist/domain/node-launcher.js.map +1 -1
  33. package/daemon/dist/domain/profile-resolver.d.ts +4 -5
  34. package/daemon/dist/domain/profile-resolver.d.ts.map +1 -1
  35. package/daemon/dist/domain/profile-resolver.js.map +1 -1
  36. package/daemon/dist/domain/queue-repository.d.ts +4 -0
  37. package/daemon/dist/domain/queue-repository.d.ts.map +1 -1
  38. package/daemon/dist/domain/queue-repository.js +21 -2
  39. package/daemon/dist/domain/queue-repository.js.map +1 -1
  40. package/daemon/dist/domain/restore-check-service.d.ts +14 -0
  41. package/daemon/dist/domain/restore-check-service.d.ts.map +1 -1
  42. package/daemon/dist/domain/restore-check-service.js +78 -8
  43. package/daemon/dist/domain/restore-check-service.js.map +1 -1
  44. package/daemon/dist/domain/restore-orchestrator.d.ts.map +1 -1
  45. package/daemon/dist/domain/restore-orchestrator.js +3 -3
  46. package/daemon/dist/domain/restore-orchestrator.js.map +1 -1
  47. package/daemon/dist/domain/resume-metadata-refresher.js +1 -1
  48. package/daemon/dist/domain/resume-metadata-refresher.js.map +1 -1
  49. package/daemon/dist/domain/resume-token-validation.d.ts +17 -0
  50. package/daemon/dist/domain/resume-token-validation.d.ts.map +1 -0
  51. package/daemon/dist/domain/resume-token-validation.js +46 -0
  52. package/daemon/dist/domain/resume-token-validation.js.map +1 -0
  53. package/daemon/dist/domain/rigspec-instantiator.d.ts.map +1 -1
  54. package/daemon/dist/domain/rigspec-instantiator.js +3 -6
  55. package/daemon/dist/domain/rigspec-instantiator.js.map +1 -1
  56. package/daemon/dist/domain/runtime-adapter.d.ts.map +1 -1
  57. package/daemon/dist/domain/runtime-adapter.js +1 -0
  58. package/daemon/dist/domain/runtime-adapter.js.map +1 -1
  59. package/daemon/dist/domain/scope/dot-id.d.ts +43 -0
  60. package/daemon/dist/domain/scope/dot-id.d.ts.map +1 -0
  61. package/daemon/dist/domain/scope/dot-id.js +165 -0
  62. package/daemon/dist/domain/scope/dot-id.js.map +1 -0
  63. package/daemon/dist/domain/scope/scope-audit.d.ts +26 -0
  64. package/daemon/dist/domain/scope/scope-audit.d.ts.map +1 -0
  65. package/daemon/dist/domain/scope/scope-audit.js +96 -0
  66. package/daemon/dist/domain/scope/scope-audit.js.map +1 -0
  67. package/daemon/dist/domain/scope/types.d.ts +61 -0
  68. package/daemon/dist/domain/scope/types.d.ts.map +1 -0
  69. package/daemon/dist/domain/scope/types.js +38 -0
  70. package/daemon/dist/domain/scope/types.js.map +1 -0
  71. package/daemon/dist/domain/seat-attention-reconciler.d.ts +12 -0
  72. package/daemon/dist/domain/seat-attention-reconciler.d.ts.map +1 -1
  73. package/daemon/dist/domain/seat-attention-reconciler.js +116 -88
  74. package/daemon/dist/domain/seat-attention-reconciler.js.map +1 -1
  75. package/daemon/dist/domain/session-registry.d.ts +15 -1
  76. package/daemon/dist/domain/session-registry.d.ts.map +1 -1
  77. package/daemon/dist/domain/session-registry.js +46 -4
  78. package/daemon/dist/domain/session-registry.js.map +1 -1
  79. package/daemon/dist/domain/skill-audit.d.ts +47 -0
  80. package/daemon/dist/domain/skill-audit.d.ts.map +1 -0
  81. package/daemon/dist/domain/skill-audit.js +218 -0
  82. package/daemon/dist/domain/skill-audit.js.map +1 -0
  83. package/daemon/dist/domain/skill-discovery.d.ts +15 -0
  84. package/daemon/dist/domain/skill-discovery.d.ts.map +1 -1
  85. package/daemon/dist/domain/skill-discovery.js +70 -0
  86. package/daemon/dist/domain/skill-discovery.js.map +1 -1
  87. package/daemon/dist/domain/skill-mirror-drift.d.ts +10 -0
  88. package/daemon/dist/domain/skill-mirror-drift.d.ts.map +1 -0
  89. package/daemon/dist/domain/skill-mirror-drift.js +24 -0
  90. package/daemon/dist/domain/skill-mirror-drift.js.map +1 -0
  91. package/daemon/dist/domain/startup-orchestrator.js +1 -1
  92. package/daemon/dist/domain/startup-orchestrator.js.map +1 -1
  93. package/daemon/dist/domain/types.d.ts +38 -14
  94. package/daemon/dist/domain/types.d.ts.map +1 -1
  95. package/daemon/dist/domain/types.js.map +1 -1
  96. package/daemon/dist/domain/user-settings/settings-store.d.ts +1 -1
  97. package/daemon/dist/domain/user-settings/settings-store.d.ts.map +1 -1
  98. package/daemon/dist/domain/user-settings/settings-store.js +4 -0
  99. package/daemon/dist/domain/user-settings/settings-store.js.map +1 -1
  100. package/daemon/dist/domain/whoami-service.d.ts +1 -0
  101. package/daemon/dist/domain/whoami-service.d.ts.map +1 -1
  102. package/daemon/dist/domain/whoami-service.js +8 -4
  103. package/daemon/dist/domain/whoami-service.js.map +1 -1
  104. package/daemon/dist/index.d.ts.map +1 -1
  105. package/daemon/dist/index.js +25 -3
  106. package/daemon/dist/index.js.map +1 -1
  107. package/daemon/dist/routes/activity.d.ts.map +1 -1
  108. package/daemon/dist/routes/activity.js +29 -0
  109. package/daemon/dist/routes/activity.js.map +1 -1
  110. package/daemon/dist/routes/queue.d.ts.map +1 -1
  111. package/daemon/dist/routes/queue.js +8 -0
  112. package/daemon/dist/routes/queue.js.map +1 -1
  113. package/daemon/dist/routes/restore-check.js +33 -2
  114. package/daemon/dist/routes/restore-check.js.map +1 -1
  115. package/daemon/dist/routes/scope-audit.d.ts +3 -0
  116. package/daemon/dist/routes/scope-audit.d.ts.map +1 -0
  117. package/daemon/dist/routes/scope-audit.js +148 -0
  118. package/daemon/dist/routes/scope-audit.js.map +1 -0
  119. package/daemon/dist/routes/sessions.d.ts.map +1 -1
  120. package/daemon/dist/routes/sessions.js +67 -3
  121. package/daemon/dist/routes/sessions.js.map +1 -1
  122. package/daemon/dist/routes/skills.d.ts.map +1 -1
  123. package/daemon/dist/routes/skills.js +43 -0
  124. package/daemon/dist/routes/skills.js.map +1 -1
  125. package/daemon/dist/routes/terminal-ws.d.ts +7 -0
  126. package/daemon/dist/routes/terminal-ws.d.ts.map +1 -0
  127. package/daemon/dist/routes/terminal-ws.js +132 -0
  128. package/daemon/dist/routes/terminal-ws.js.map +1 -0
  129. package/daemon/dist/routes/transport.d.ts +3 -1
  130. package/daemon/dist/routes/transport.d.ts.map +1 -1
  131. package/daemon/dist/routes/transport.js +4 -1
  132. package/daemon/dist/routes/transport.js.map +1 -1
  133. package/daemon/dist/routes/whoami.d.ts.map +1 -1
  134. package/daemon/dist/routes/whoami.js +5 -0
  135. package/daemon/dist/routes/whoami.js.map +1 -1
  136. package/daemon/dist/server.d.ts +6 -0
  137. package/daemon/dist/server.d.ts.map +1 -1
  138. package/daemon/dist/server.js +29 -2
  139. package/daemon/dist/server.js.map +1 -1
  140. package/daemon/dist/startup.d.ts +8 -0
  141. package/daemon/dist/startup.d.ts.map +1 -1
  142. package/daemon/dist/startup.js +27 -8
  143. package/daemon/dist/startup.js.map +1 -1
  144. package/daemon/dist/terminal/TerminalSessionBroker.d.ts +173 -0
  145. package/daemon/dist/terminal/TerminalSessionBroker.d.ts.map +1 -0
  146. package/daemon/dist/terminal/TerminalSessionBroker.js +570 -0
  147. package/daemon/dist/terminal/TerminalSessionBroker.js.map +1 -0
  148. package/daemon/specs/agents/shared/skills/core/openrig-user/SKILL.md +131 -2
  149. package/daemon/specs/agents/shared/skills/pods/orchestration-team/SKILL.md +29 -0
  150. package/dist/client.d.ts +1 -0
  151. package/dist/client.d.ts.map +1 -1
  152. package/dist/client.js +23 -0
  153. package/dist/client.js.map +1 -1
  154. package/dist/commands/capture.d.ts.map +1 -1
  155. package/dist/commands/capture.js +6 -6
  156. package/dist/commands/capture.js.map +1 -1
  157. package/dist/commands/context.d.ts.map +1 -1
  158. package/dist/commands/context.js +41 -5
  159. package/dist/commands/context.js.map +1 -1
  160. package/dist/commands/down.d.ts.map +1 -1
  161. package/dist/commands/down.js +27 -0
  162. package/dist/commands/down.js.map +1 -1
  163. package/dist/commands/launch.d.ts.map +1 -1
  164. package/dist/commands/launch.js +34 -0
  165. package/dist/commands/launch.js.map +1 -1
  166. package/dist/commands/ps.d.ts.map +1 -1
  167. package/dist/commands/ps.js +361 -53
  168. package/dist/commands/ps.js.map +1 -1
  169. package/dist/commands/queue.d.ts.map +1 -1
  170. package/dist/commands/queue.js +60 -3
  171. package/dist/commands/queue.js.map +1 -1
  172. package/dist/commands/restore-check.d.ts.map +1 -1
  173. package/dist/commands/restore-check.js +80 -2
  174. package/dist/commands/restore-check.js.map +1 -1
  175. package/dist/commands/scope.d.ts.map +1 -1
  176. package/dist/commands/scope.js +688 -4
  177. package/dist/commands/scope.js.map +1 -1
  178. package/dist/commands/seat.d.ts +3 -1
  179. package/dist/commands/seat.d.ts.map +1 -1
  180. package/dist/commands/seat.js +61 -1
  181. package/dist/commands/seat.js.map +1 -1
  182. package/dist/commands/send.d.ts.map +1 -1
  183. package/dist/commands/send.js +6 -6
  184. package/dist/commands/send.js.map +1 -1
  185. package/dist/commands/skill.d.ts +4 -0
  186. package/dist/commands/skill.d.ts.map +1 -0
  187. package/dist/commands/skill.js +77 -0
  188. package/dist/commands/skill.js.map +1 -0
  189. package/dist/commands/up.d.ts.map +1 -1
  190. package/dist/commands/up.js +27 -0
  191. package/dist/commands/up.js.map +1 -1
  192. package/dist/commands/whoami.d.ts.map +1 -1
  193. package/dist/commands/whoami.js +208 -20
  194. package/dist/commands/whoami.js.map +1 -1
  195. package/dist/cross-host-executor.d.ts +1 -1
  196. package/dist/cross-host-executor.d.ts.map +1 -1
  197. package/dist/cross-host-executor.js +3 -2
  198. package/dist/cross-host-executor.js.map +1 -1
  199. package/dist/cross-host-types.d.ts +2 -0
  200. package/dist/cross-host-types.d.ts.map +1 -0
  201. package/dist/cross-host-types.js +2 -0
  202. package/dist/cross-host-types.js.map +1 -0
  203. package/dist/host-registry.d.ts +27 -5
  204. package/dist/host-registry.d.ts.map +1 -1
  205. package/dist/host-registry.js +86 -19
  206. package/dist/host-registry.js.map +1 -1
  207. package/dist/index.d.ts +1 -0
  208. package/dist/index.d.ts.map +1 -1
  209. package/dist/index.js +2 -0
  210. package/dist/index.js.map +1 -1
  211. package/dist/lib/scope/progress-edit.d.ts +42 -0
  212. package/dist/lib/scope/progress-edit.d.ts.map +1 -0
  213. package/dist/lib/scope/progress-edit.js +171 -0
  214. package/dist/lib/scope/progress-edit.js.map +1 -0
  215. package/dist/lib/scope/scope-audit.d.ts +26 -0
  216. package/dist/lib/scope/scope-audit.d.ts.map +1 -0
  217. package/dist/lib/scope/scope-audit.js +96 -0
  218. package/dist/lib/scope/scope-audit.js.map +1 -0
  219. package/dist/lib/scope/templates.d.ts +2 -0
  220. package/dist/lib/scope/templates.d.ts.map +1 -1
  221. package/dist/lib/scope/templates.js +8 -0
  222. package/dist/lib/scope/templates.js.map +1 -1
  223. package/dist/lib/scope/trust.d.ts +30 -0
  224. package/dist/lib/scope/trust.d.ts.map +1 -0
  225. package/dist/lib/scope/trust.js +80 -0
  226. package/dist/lib/scope/trust.js.map +1 -0
  227. package/dist/lib/scope/types.d.ts +6 -0
  228. package/dist/lib/scope/types.d.ts.map +1 -1
  229. package/dist/lib/scope/types.js +8 -0
  230. package/dist/lib/scope/types.js.map +1 -1
  231. package/dist/lib/scope-templates/backlog-deprecation.md +1 -0
  232. package/dist/lib/scope-templates/backlog-tech-debt.md +1 -0
  233. package/dist/lib/scope-templates/bug-fix.md +1 -0
  234. package/dist/lib/scope-templates/mission-placeholder.md +1 -0
  235. package/dist/lib/scope-templates/mission-progress.md +12 -0
  236. package/dist/lib/scope-templates/mission-release.md +1 -0
  237. package/dist/lib/scope-templates/placeholder.md +1 -0
  238. package/dist/lib/scope-templates/release-feature.md +1 -0
  239. package/dist/lib/scope-templates/research.md +1 -0
  240. package/dist/lib/scope-templates/slice-progress.md +11 -0
  241. package/dist/remote-host-ops.d.ts +24 -0
  242. package/dist/remote-host-ops.d.ts.map +1 -0
  243. package/dist/remote-host-ops.js +53 -0
  244. package/dist/remote-host-ops.js.map +1 -0
  245. package/package.json +1 -1
  246. package/ui/dist/assets/index-DMI6jeAX.css +32 -0
  247. package/ui/dist/assets/index-FQgCB6mC.js +580 -0
  248. package/ui/dist/index.html +2 -2
  249. package/ui/dist/assets/index-C_Q5FczU.css +0 -1
  250. package/ui/dist/assets/index-De6vv0yO.js +0 -552
@@ -1 +1 @@
1
- {"version":3,"file":"launch.js","sourceRoot":"","sources":["../../src/commands/launch.ts"],"names":[],"mappings":"AAAA,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;AAiBvC,MAAM,UAAU,aAAa,CAAC,YAAyB;IACrD,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,4CAA4C,CAAC,CAAC;IAC5F,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,YAAY,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,EAAE,aAAa,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,IAAI,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;IAE3H,KAAK,UAAU,SAAS,CAAC,IAAgB;QACvC,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACzD,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;YAC3D,OAAO,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;YACrE,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;IAClD,CAAC;IAED,GAAG;SACA,QAAQ,CAAC,SAAS,EAAE,eAAe,CAAC;SACpC,QAAQ,CAAC,WAAW,EAAE,4CAA4C,CAAC;SACnE,MAAM,CAAC,eAAe,EAAE,+CAA+C,CAAC;SACxE,MAAM,CAAC,wBAAwB,EAAE,qCAAqC,CAAC;SACvE,MAAM,CAAC,QAAQ,EAAE,aAAa,CAAC;SAC/B,MAAM,CAAC,KAAK,EAAE,KAAa,EAAE,OAA2B,EAAE,IAA6D,EAAE,EAAE;QAC1H,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAE9F,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,GAA6C,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;YAC3E,IAAI,IAAI,CAAC,UAAU;gBAAE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;YACvD,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,IAAI,CAAiB,aAAa,kBAAkB,CAAC,KAAK,CAAC,sBAAsB,EAAE,IAAI,CAAC,CAAC;YAClH,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACd,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC/C,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG;oBAAE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;gBAC5C,OAAO;YACT,CAAC;YACD,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;gBACtC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,uBAAuB,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;gBACtE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;gBACrB,OAAO;YACT,CAAC;YACD,MAAM,WAAW,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjF,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC5F,IAAI,WAAW;gBAAE,OAAO,CAAC,GAAG,CAAC,aAAa,WAAW,EAAE,CAAC,CAAC;YACzD,IAAI,OAAO;gBAAE,OAAO,CAAC,GAAG,CAAC,SAAS,OAAO,EAAE,CAAC,CAAC;YAC7C,IAAI,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM;gBAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACnI,IAAI,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,EAAE,CAAC;gBACnC,OAAO,CAAC,KAAK,CAAC,8BAA8B,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACzG,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACvB,CAAC;YACD,IAAK,GAAG,CAAC,IAAgC,CAAC,YAAY,IAAM,GAAG,CAAC,IAAgC,CAAC,YAAyB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtI,OAAO,CAAC,KAAK,CAAC,gCAAkC,GAAG,CAAC,IAAgC,CAAC,YAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAC7H,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACvB,CAAC;YACD,OAAO;QACT,CAAC;QAED,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,kEAAkE,CAAC,CAAC;YAClF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;QAED,MAAM,IAAI,GAA2B,EAAE,CAAC;QACxC,IAAI,IAAI,CAAC,UAAU;YAAE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QAEvD,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,IAAI,CAAiB,aAAa,kBAAkB,CAAC,KAAK,CAAC,UAAU,kBAAkB,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAC1I,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC/C,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG;gBAAE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YAC5C,OAAO;QACT,CAAC;QAED,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACtC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,uBAAuB,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;YACtE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;QAED,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,CAAC,SAAS,IAAI,OAAO,CAAC;QAChD,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,iBAAiB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,IAAI,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;YAC3G,OAAO,CAAC,GAAG,CAAC,QAAQ,SAAS,8BAA8B,KAAK,mBAAmB,CAAC,CAAC;YACrF,OAAO;QACT,CAAC;QACD,MAAM,aAAa,GAAG,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/E,OAAO,CAAC,GAAG,CAAC,iBAAiB,SAAS,WAAW,KAAK,GAAG,aAAa,EAAE,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;IAEL,OAAO,GAAG,CAAC;AACb,CAAC"}
1
+ {"version":3,"file":"launch.js","sourceRoot":"","sources":["../../src/commands/launch.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ps.d.ts","sourceRoot":"","sources":["../../src/commands/ps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAe,MAAM,qBAAqB,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,KAAK,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAgL9F,MAAM,WAAW,MAAO,SAAQ,UAAU;IACxC;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,MAAM,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC;IAC/D,YAAY,CAAC,EAAE,CACb,IAAI,EAAE,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC,CAAC,CAAC,EAC/C,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,IAAI,CAAC,EAAE,uBAAuB,KAC3B,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC;CAC7C;AAgPD;;;;;;;;;GASG;AACH,wBAAgB,SAAS,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAmPxD"}
1
+ {"version":3,"file":"ps.d.ts","sourceRoot":"","sources":["../../src/commands/ps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAsH,MAAM,qBAAqB,CAAC;AAC3K,OAAO,EAAE,mBAAmB,EAAE,KAAK,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAqM9F,MAAM,WAAW,MAAO,SAAQ,UAAU;IACxC;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,MAAM,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC;IAC/D,YAAY,CAAC,EAAE,CACb,IAAI,EAAE,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC,CAAC,CAAC,EAC/C,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,IAAI,CAAC,EAAE,uBAAuB,KAC3B,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC;CAC7C;AAgSD;;;;;;;;;GASG;AACH,wBAAgB,SAAS,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CA4RxD"}
@@ -2,12 +2,19 @@ import { Command } from "commander";
2
2
  import { DaemonClient } from "../client.js";
3
3
  import { getDaemonStatus, getDaemonUrl } from "../daemon-lifecycle.js";
4
4
  import { realDeps } from "./daemon.js";
5
- import { loadHostRegistry, resolveHost } from "../host-registry.js";
5
+ import { loadHostRegistry, resolveHost, hostDisplayTarget, resolveRemoteBearer, classifyHttpFailedStep, classifyHttpError } from "../host-registry.js";
6
6
  import { runCrossHostCommand } from "../cross-host-executor.js";
7
7
  import { emitCrossHostError, emitCrossHostFailure } from "../cross-host-cli-helpers.js";
8
+ import { readOpenRigEnv } from "../openrig-compat.js";
8
9
  // L3-followup: human-output budgets bound default terminal output for hosts
9
10
  // with realistic agent counts. `--full` opts out. JSON output remains
10
11
  // unbounded by default for back-compat (Decision C hybrid).
12
+ function extractRigName(sessionName) {
13
+ const atIdx = sessionName.lastIndexOf("@");
14
+ if (atIdx < 0 || atIdx === sessionName.length - 1)
15
+ return undefined;
16
+ return sessionName.slice(atIdx + 1);
17
+ }
11
18
  const HUMAN_RIG_BUDGET = 50;
12
19
  const HUMAN_NODE_BUDGET = 100;
13
20
  // L3-followup: --filter accepts only this allow-list. Unknown keys produce a
@@ -261,6 +268,53 @@ function selectFields(entries, fields) {
261
268
  return out;
262
269
  });
263
270
  }
271
+ function needsAttention(node) {
272
+ return node.lifecycleState === "attention_required"
273
+ || node.startupStatus === "attention_required"
274
+ || node.startupStatus === "failed"
275
+ || node.agentActivity?.state === "needs_input";
276
+ }
277
+ // OPR.0.4.0.34 — the compact orch field set (PRD FR-4). Carries the
278
+ // source-available identity + state + resume-summary fields an orchestrator
279
+ // needs at a glance, WITHOUT leaking the resume token value or resumeCommand
280
+ // (security). recoveryGuidance/currentUsage stay on the node detail (slice 26).
281
+ function compactNodeProjection(nodes) {
282
+ return nodes.map((n) => {
283
+ const attention = needsAttention(n);
284
+ const compact = {
285
+ // identity (rigId/rigName + logicalId + session) — disambiguates under -A.
286
+ rigId: n.rigId,
287
+ rigName: n.rigName,
288
+ logicalId: n.logicalId,
289
+ canonicalSessionName: n.canonicalSessionName,
290
+ // lifecycle + session/startup state.
291
+ sessionStatus: n.sessionStatus,
292
+ startupStatus: n.startupStatus,
293
+ lifecycleState: n.lifecycleState,
294
+ // activity (state always; short reason only when attention — keep it lean).
295
+ agentActivity: attention
296
+ ? { state: n.agentActivity?.state ?? "unknown", reason: n.agentActivity?.reason }
297
+ : { state: n.agentActivity?.state ?? "unknown" },
298
+ // work counts.
299
+ hasAssignedWork: n.hasAssignedWork,
300
+ pendingWorkCount: n.pendingWorkCount,
301
+ // resume summary — type + PRESENT boolean only (never the token value).
302
+ resumeType: n.resumeType ?? null,
303
+ resumeTokenPresent: Boolean(n.resumeToken),
304
+ // updated/age proxy. The node-list emits no dedicated `updatedAt`; the
305
+ // freshest signal is agentActivity.sampledAt, then startupCompletedAt,
306
+ // else null (documented FR-4 fallback — not a fabricated timestamp).
307
+ lastActivity: n.agentActivity?.sampledAt ?? n.startupCompletedAt ?? null,
308
+ };
309
+ // held/attention reason (short) when present.
310
+ if (n.heldReason)
311
+ compact.heldReason = n.heldReason;
312
+ if (attention && n.latestError) {
313
+ compact.latestError = n.latestError;
314
+ }
315
+ return compact;
316
+ });
317
+ }
264
318
  function summarizeRigs(entries) {
265
319
  const byLifecycle = {};
266
320
  const byStatus = {};
@@ -329,32 +383,57 @@ export function psCommand(depsOverride) {
329
383
  const cmd = new Command("ps")
330
384
  .description("List rigs and their status")
331
385
  .addHelpText("after", `
386
+ Default: current-rig scope (derived from OPENRIG_SESSION_NAME's @<rig> suffix).
387
+ Shows ALL states (stopped, recoverable, attention, idle — non-running IS the
388
+ actionable signal for topology/readiness). Use -A/--all-rigs for fleet breadth.
389
+
390
+ Compact defaults: 'rig ps --nodes' shows a compact summary per node
391
+ (rig, session, lifecycle, activity state, reason when attention, queue counts,
392
+ resume type + present indicator). Resume token values and resumeCommand are
393
+ excluded from compact output (security); use --full to see them.
394
+
395
+ Use '--full' (or '--verbose') for the uncompacted per-node payload (contextUsage
396
+ scalars, resume commands/tokens, agent references). Note (OPR.0.4.0.26): the
397
+ node-list payload carries recoveryGuidance: null and contextUsage.currentUsage:
398
+ null even with --full; fetch the full recovery guidance + currentUsage from the
399
+ single-node detail (/api/rigs/:rigId/nodes/:logicalId) or 'rig whoami'.
400
+
332
401
  Examples:
333
- rig ps Show all rigs (human; truncated to ${HUMAN_RIG_BUDGET} with footer)
334
- rig ps --full Disable human truncation
335
- rig ps --json JSON output (bare array; back-compat)
402
+ rig ps Current rig summary (compact)
403
+ rig ps -A All rigs (fleet breadth)
404
+ rig ps --full Current rig, full detail
405
+ rig ps --json Current rig, compact JSON
406
+ rig ps -A --json All rigs, compact JSON
336
407
  rig ps --json --limit 20 Bounded JSON envelope
337
- rig ps --json --summary Aggregate-only JSON (no per-rig entries)
408
+ rig ps --json --summary Aggregate-only JSON
338
409
  rig ps --json --fields rigName,status,lifecycleState
339
410
  Project JSON to named fields
340
411
  rig ps --filter lifecycleState=attention_required
341
412
  Show only rigs needing attention
342
413
  rig ps --filter status=running Show only running rigs
343
414
  rig ps --filter name-prefix=demo Filter by rig-name prefix
344
- rig ps --nodes Per-node detail (human; truncated to ${HUMAN_NODE_BUDGET})
415
+ rig ps --nodes Current rig per-node compact summary
416
+ rig ps --nodes -A All rigs per-node compact summary
417
+ rig ps --nodes --json Current rig per-node compact JSON
418
+ rig ps --nodes --json --full Complete per-node LIST payload (guidance/currentUsage relocated to node detail)
419
+ rig ps --nodes --json --rig openrig-build Compact nodes for a specific rig
420
+ rig ps --nodes --json --session dev1-impl@myrig Filter to a single session (within current rig; use -A for cross-rig)
345
421
  rig ps --nodes --json --limit 50 Bounded per-node JSON envelope
346
- rig ps --include-archived Include archived rigs (marked with *); hidden by default
347
- rig ps --nodes --active Show only nodes whose agentActivity.state == running (PL-019)
422
+ rig ps --nodes --active Only nodes with agentActivity.state=running
423
+ rig ps --nodes --running Same as --active
348
424
  rig ps --nodes --filter agentActivity.state=running
349
425
  Same as --active (the explicit form)
350
- rig ps --host vm-claude-test --nodes --json Run on a remote host via single-hop ssh
426
+ rig ps --host vm-claude-test --nodes --json Remote host (no current-rig default)
427
+ rig ps --include-archived Include archived rigs (marked with *); hidden by default
428
+
429
+ --rig <name> overrides the current-rig default. -A/--all-rigs disables it.
430
+ --session <name> filters within the effective rig scope; use -A if the target
431
+ session is in a different rig.
351
432
 
352
- JSON output entries include both \`name\` and \`rigName\` (alias) for forward
353
- compatibility; agent code should prefer \`rigName\` (matches per-node JSON).
433
+ --active/--running narrow to agentActivity.state=running. Cannot combine with --filter.
354
434
 
355
- --filter accepts: status, lifecycleState, name-prefix, name, agentActivity.state.
356
- Other keys are rejected. agentActivity.state is node-level (use with --nodes);
357
- allowed values: running, needs_input, idle, unknown.
435
+ --filter accepts: status, lifecycleState, name-prefix, name, agentActivity.state,
436
+ contextUsage.percent, contextUsage.state. Other keys are rejected.
358
437
 
359
438
  --fields accepts (rig-level): rigId, name, rigName, nodeCount, runningCount,
360
439
  activeCount, hasWorkCount, status, lifecycleState, uptime, latestSnapshot.
@@ -362,17 +441,10 @@ activeCount, hasWorkCount, status, lifecycleState, uptime, latestSnapshot.
362
441
  podNamespace, canonicalSessionName, nodeKind, runtime, sessionStatus,
363
442
  startupStatus, restoreOutcome, lifecycleState, tmuxAttachCommand,
364
443
  resumeCommand, latestError, terminalActive, hasAssignedWork,
365
- pendingWorkCount, agentActivity. Other keys are rejected.
366
- \`name\` is rig-level only; for node entries use \`rigName\`. Nested-field
367
- projection (e.g. \`agentActivity.state\`) is not supported in this slice; pass
368
- \`agentActivity\` to project the whole object and read the nested value
369
- downstream.
444
+ pendingWorkCount, agentActivity, contextUsage, heldReason.
370
445
 
371
- --host runs the same command on a remote host declared in ~/.openrig/hosts.yaml
372
- via single-hop ssh (CLI-side shell-out; daemon untouched). The remote rig's
373
- output is what counts and is surfaced verbatim on success; failure is
374
- distinguished into ssh-unreachable / permission-gate / remote-daemon-unreachable
375
- / remote-command-failed.
446
+ --host runs on a remote host declared in ~/.openrig/hosts.yaml (no current-rig
447
+ default applied; the remote host's rigs are shown).
376
448
 
377
449
  Exit codes:
378
450
  0 Success
@@ -381,18 +453,39 @@ Exit codes:
381
453
  const getDepsF = () => depsOverride ?? { lifecycleDeps: realDeps(), clientFactory: (url) => new DaemonClient(url) };
382
454
  cmd
383
455
  .option("--json", "JSON output for agents")
384
- .option("--nodes", "Show per-node detail for all rigs")
385
- .option("--full", "Disable default human-output truncation")
456
+ .option("--nodes", "Show per-node detail (current rig; -A for all rigs)")
457
+ .option("--full", "Show all node-list fields per node (uncompacted rows; node-list recoveryGuidance/currentUsage live on the node detail, not the list)")
458
+ .option("--verbose", "Alias for --full")
386
459
  .option("--limit <n>", "Limit number of entries (rigs or nodes)")
387
460
  .option("--fields <list>", "Comma-separated field list to project (JSON only)")
388
461
  .option("--summary", "Emit aggregate-only output (counts by status/lifecycle)")
389
462
  .option("--filter <key=value>", "Filter entries; supported keys: status, lifecycleState, name-prefix, name, agentActivity.state")
390
463
  .option("--active", "Shortcut for --filter agentActivity.state=running (PL-019)")
464
+ .option("--running", "Alias for --active")
465
+ .option("-A, --all-rigs", "Show all rigs (default is current rig only)")
466
+ .option("--rig <name>", "Show only nodes belonging to the named rig")
467
+ .option("--session <name>", "Show only the node matching this canonical session name")
391
468
  .option("--include-archived", "Include archived rigs (default hides them); parity with 'rig stream list --include-archived'")
392
- .option("--host <id>", "Run on a remote host declared in ~/.openrig/hosts.yaml (CLI-side ssh shell-out)")
469
+ .option("--host <id>", "Run on a remote host declared in ~/.openrig/hosts.yaml")
470
+ .option("--all-hosts", "Fan out to all registered HTTP hosts (observation-only)")
471
+ .option("--hosts <ids>", "Fan out to specific hosts (comma-separated)")
393
472
  .action(async (opts) => {
473
+ if (opts.verbose)
474
+ opts.full = true;
475
+ if (opts.running)
476
+ opts.active = true;
477
+ const isRemote = !!(opts.host || opts.allHosts || opts.hosts);
478
+ if (!opts.allRigs && !opts.rig && !isRemote) {
479
+ const sessionName = readOpenRigEnv("OPENRIG_SESSION_NAME", "RIGGED_SESSION_NAME");
480
+ const callerRig = sessionName ? extractRigName(sessionName) : undefined;
481
+ if (callerRig)
482
+ opts.rig = callerRig;
483
+ }
394
484
  const deps = getDepsF();
395
- // --- Cross-host short-circuit (CLI-side ssh shell-out; daemon untouched) ---
485
+ if (opts.allHosts || opts.hosts) {
486
+ await runFanOutPs(opts, deps);
487
+ return;
488
+ }
396
489
  if (opts.host) {
397
490
  await runCrossHostPs(opts.host, opts, deps);
398
491
  return;
@@ -467,8 +560,11 @@ Exit codes:
467
560
  return;
468
561
  }
469
562
  const all = res.data;
563
+ const rigScoped = opts.rig
564
+ ? all.filter((e) => (e.rigName ?? e.name) === opts.rig)
565
+ : all;
470
566
  // Apply CLI-side filter (Amendment A: prefer CLI shaping).
471
- const filtered = parsedFilter ? applyRigFilter(all, parsedFilter) : all;
567
+ const filtered = parsedFilter ? applyRigFilter(rigScoped, parsedFilter) : rigScoped;
472
568
  // Summary mode short-circuits per-entry output.
473
569
  if (opts.summary) {
474
570
  const summary = summarizeRigs(filtered);
@@ -545,23 +641,31 @@ Exit codes:
545
641
  });
546
642
  return cmd;
547
643
  }
548
- async function handleNodes(client, opts, parsedFilter, limit, fields, useEnvelope) {
549
- const rigRes = await client.get(psApiPath(opts));
644
+ async function handleNodes(client, opts, parsedFilter, limit, fields, useEnvelope, requestHeaders) {
645
+ const rigRes = await client.get(psApiPath(opts), requestHeaders ? { headers: requestHeaders } : undefined);
550
646
  if (rigRes.status >= 400) {
551
647
  console.error(`Failed to fetch rig list from daemon (HTTP ${rigRes.status}). Check daemon status with: rig status`);
552
648
  process.exitCode = 2;
553
649
  return;
554
650
  }
651
+ const effectiveRigs = opts.rig
652
+ ? rigRes.data.filter((r) => (r.rigName ?? r.name) === opts.rig)
653
+ : rigRes.data;
555
654
  const allNodes = [];
556
- for (const rig of rigRes.data) {
557
- const nodesRes = await client.get(`/api/rigs/${encodeURIComponent(rig.rigId)}/nodes`);
655
+ for (const rig of effectiveRigs) {
656
+ const nodesRes = await client.get(`/api/rigs/${encodeURIComponent(rig.rigId)}/nodes`, requestHeaders ? { headers: requestHeaders } : undefined);
558
657
  if (nodesRes.status >= 400) {
559
658
  console.error(`Warning: failed to fetch nodes for rig "${rig.rigName ?? rig.name}" (HTTP ${nodesRes.status}). List rigs with: rig ps`);
560
659
  continue;
561
660
  }
562
661
  allNodes.push(...nodesRes.data);
563
662
  }
564
- const filtered = parsedFilter ? applyNodeFilter(allNodes, parsedFilter) : allNodes;
663
+ let narrowed = allNodes;
664
+ if (opts.rig)
665
+ narrowed = narrowed.filter((n) => n.rigName === opts.rig);
666
+ if (opts.session)
667
+ narrowed = narrowed.filter((n) => n.canonicalSessionName === opts.session);
668
+ const filtered = parsedFilter ? applyNodeFilter(narrowed, parsedFilter) : narrowed;
565
669
  if (opts.summary) {
566
670
  const summary = summarizeNodes(filtered);
567
671
  if (opts.json) {
@@ -576,7 +680,12 @@ async function handleNodes(client, opts, parsedFilter, limit, fields, useEnvelop
576
680
  }
577
681
  const limited = limit !== null ? filtered.slice(0, limit) : filtered;
578
682
  const limitTruncated = limit !== null && filtered.length > limit;
579
- const projected = fields ? selectFields(limited, fields) : limited;
683
+ const useCompact = !opts.full && !fields;
684
+ const projected = fields
685
+ ? selectFields(limited, fields)
686
+ : useCompact
687
+ ? compactNodeProjection(limited)
688
+ : limited;
580
689
  if (opts.json) {
581
690
  if (useEnvelope) {
582
691
  const envelope = {
@@ -604,17 +713,26 @@ async function handleNodes(client, opts, parsedFilter, limit, fields, useEnvelop
604
713
  }
605
714
  const humanList = (opts.full || limit !== null) ? limited : limited.slice(0, HUMAN_NODE_BUDGET);
606
715
  const humanTruncated = !opts.full && limit === null && filtered.length > HUMAN_NODE_BUDGET;
607
- const header = padNodeRow("RIG", "POD", "MEMBER", "SESSION", "RUNTIME", "STATUS", "STARTUP", "LIFECYCLE", "TERMINAL", "WORK", "ACTIVITY", "CTX", "RESTORE", "ERROR");
608
- console.log(header);
609
- for (const n of humanList) {
610
- const parts = n.logicalId.split(".");
611
- const pod = n.podNamespace ?? (parts.length > 1 ? parts[0] : "—");
612
- const member = parts.length > 1 ? parts.slice(1).join(".") : n.logicalId;
613
- const rig = `${n.rigName}#${n.rigId}`;
614
- console.log(padNodeRow(rig, pod, member, n.canonicalSessionName ?? "—", n.runtime ?? "—", n.sessionStatus ?? "—", n.startupStatus ?? "—", abbrevNodeLifecycle(n.lifecycleState),
615
- // Slice 15 — terminal-active + has-work as DISTINCT columns
616
- // (non-inference contract: never collapsed into one signal).
617
- formatTerminalActive(n.terminalActive), formatHasWork(n.hasAssignedWork, n.pendingWorkCount), formatActivity(n.agentActivity), formatContextUsage(n.contextUsage), n.restoreOutcome, n.latestError ? truncate(n.latestError, 30) : n.heldReason ? `held: ${truncate(n.heldReason, 25)}` : "—"));
716
+ if (useCompact) {
717
+ console.log(padCompactNodeRow("RIG", "SESSION", "LIFECYCLE", "ACTIVITY", "WORK", "REASON"));
718
+ for (const n of humanList) {
719
+ const attn = needsAttention(n);
720
+ const reason = attn
721
+ ? (n.latestError ? truncate(n.latestError, 40) : n.agentActivity?.reason ?? "—")
722
+ : "—";
723
+ console.log(padCompactNodeRow(n.rigName, n.canonicalSessionName ?? "—", abbrevNodeLifecycle(n.lifecycleState), formatActivity(n.agentActivity), formatHasWork(n.hasAssignedWork, n.pendingWorkCount), reason));
724
+ }
725
+ }
726
+ else {
727
+ const header = padNodeRow("RIG", "POD", "MEMBER", "SESSION", "RUNTIME", "STATUS", "STARTUP", "LIFECYCLE", "TERMINAL", "WORK", "ACTIVITY", "CTX", "RESTORE", "ERROR");
728
+ console.log(header);
729
+ for (const n of humanList) {
730
+ const parts = n.logicalId.split(".");
731
+ const pod = n.podNamespace ?? (parts.length > 1 ? parts[0] : "—");
732
+ const member = parts.length > 1 ? parts.slice(1).join(".") : n.logicalId;
733
+ const rig = `${n.rigName}#${n.rigId}`;
734
+ console.log(padNodeRow(rig, pod, member, n.canonicalSessionName ?? "—", n.runtime ?? "—", n.sessionStatus ?? "—", n.startupStatus ?? "—", abbrevNodeLifecycle(n.lifecycleState), formatTerminalActive(n.terminalActive), formatHasWork(n.hasAssignedWork, n.pendingWorkCount), formatActivity(n.agentActivity), formatContextUsage(n.contextUsage), n.restoreOutcome, n.latestError ? truncate(n.latestError, 30) : n.heldReason ? `held: ${truncate(n.heldReason, 25)}` : "—"));
735
+ }
618
736
  }
619
737
  if (humanTruncated) {
620
738
  const remaining = filtered.length - HUMAN_NODE_BUDGET;
@@ -679,6 +797,16 @@ function padNodeRow(rig, pod, member, session, runtime, status, startup, lifecyc
679
797
  error,
680
798
  ].join("");
681
799
  }
800
+ function padCompactNodeRow(rig, session, lifecycle, activity, work, reason) {
801
+ return [
802
+ fitCell(rig, 22),
803
+ fitCell(session, 38),
804
+ fitCell(lifecycle, 11),
805
+ fitCell(activity, 14),
806
+ fitCell(work, 6),
807
+ reason,
808
+ ].join("");
809
+ }
682
810
  // Slice 15 — render the terminal-active primitive honestly.
683
811
  // `null` (no signal) is rendered distinctly from `false` (silent past
684
812
  // threshold) so an operator can see whether the daemon hasn't observed
@@ -727,12 +855,21 @@ async function runCrossHostPs(hostId, opts, deps) {
727
855
  return;
728
856
  }
729
857
  const host = resolved.host;
730
- // Reconstruct argv. `rig ps` has no positional args; all flags propagate.
858
+ if (host.transport === "http") {
859
+ await runHttpPs(host, opts, deps);
860
+ return;
861
+ }
862
+ // SSH path — reconstruct argv
731
863
  const argv = ["rig", "ps"];
732
864
  if (opts.nodes)
733
865
  argv.push("--nodes");
734
866
  if (opts.full)
735
867
  argv.push("--full");
868
+ // OPR.0.4.0.34: forward the breadth flag so `--host h -A` keeps all-rigs
869
+ // breadth across the hop (the current-rig default is local-only and never
870
+ // applied to a remote call, but an explicit -A must still reach the remote).
871
+ if (opts.allRigs)
872
+ argv.push("--all-rigs");
736
873
  if (opts.limit !== undefined)
737
874
  argv.push("--limit", opts.limit);
738
875
  if (opts.fields !== undefined)
@@ -741,6 +878,14 @@ async function runCrossHostPs(hostId, opts, deps) {
741
878
  argv.push("--summary");
742
879
  if (opts.filter !== undefined)
743
880
  argv.push("--filter", opts.filter);
881
+ // OPR.0.4.0.34: opts.active is the normalized form (set by --active OR
882
+ // --running). Forward it so the state filter survives the hop.
883
+ if (opts.active)
884
+ argv.push("--active");
885
+ if (opts.rig !== undefined)
886
+ argv.push("--rig", opts.rig);
887
+ if (opts.session !== undefined)
888
+ argv.push("--session", opts.session);
744
889
  if (opts.includeArchived)
745
890
  argv.push("--include-archived");
746
891
  if (opts.json)
@@ -748,19 +893,16 @@ async function runCrossHostPs(hostId, opts, deps) {
748
893
  const result = await runner(host, argv);
749
894
  if (opts.json) {
750
895
  if (result.ok) {
751
- // Verbatim remote stdout passthrough — the remote `rig ps --json` already
752
- // produced the correct JSON shape (bare array OR envelope per its own
753
- // shaping flags); we do NOT double-wrap.
754
896
  if (result.stdout)
755
897
  process.stdout.write(result.stdout);
756
898
  if (result.stderr)
757
899
  process.stderr.write(result.stderr);
758
900
  return;
759
901
  }
760
- emitCrossHostFailure(host.id, host.target, result, true);
902
+ emitCrossHostFailure(host.id, hostDisplayTarget(host), result, true);
761
903
  return;
762
904
  }
763
- console.log(`[via host=${host.id} (${host.target})]`);
905
+ console.log(`[via host=${host.id} (${hostDisplayTarget(host)})]`);
764
906
  if (result.ok) {
765
907
  if (result.stdout)
766
908
  process.stdout.write(result.stdout);
@@ -768,6 +910,172 @@ async function runCrossHostPs(hostId, opts, deps) {
768
910
  process.stderr.write(result.stderr);
769
911
  return;
770
912
  }
771
- emitCrossHostFailure(host.id, host.target, result, false);
913
+ emitCrossHostFailure(host.id, hostDisplayTarget(host), result, false);
914
+ }
915
+ function buildRemoteHeaders(token) {
916
+ return { Authorization: `Bearer ${token}` };
917
+ }
918
+ async function runHttpPs(host, opts, deps) {
919
+ const bearerResult = resolveRemoteBearer(host);
920
+ if (!bearerResult.ok) {
921
+ emitCrossHostError(host.id, bearerResult.failedStep, bearerResult.error, opts.json);
922
+ process.exitCode = 1;
923
+ return;
924
+ }
925
+ let effectiveFilter = opts.filter;
926
+ if (opts.active) {
927
+ if (effectiveFilter) {
928
+ console.error("--active and --filter cannot be combined.");
929
+ process.exitCode = 1;
930
+ return;
931
+ }
932
+ effectiveFilter = "agentActivity.state=running";
933
+ }
934
+ let parsedFilter = null;
935
+ if (effectiveFilter) {
936
+ const result = parseFilter(effectiveFilter);
937
+ if ("error" in result) {
938
+ console.error(result.error);
939
+ process.exitCode = 1;
940
+ return;
941
+ }
942
+ parsedFilter = result;
943
+ }
944
+ const limit = opts.limit !== undefined ? Number(opts.limit) : null;
945
+ if (limit !== null && (!Number.isInteger(limit) || limit < 0)) {
946
+ console.error(`--limit must be a non-negative integer; got '${opts.limit}'`);
947
+ process.exitCode = 1;
948
+ return;
949
+ }
950
+ let fields = null;
951
+ if (opts.fields !== undefined) {
952
+ const fieldsLevel = opts.nodes ? "nodes" : "rig";
953
+ const fieldsAllowed = fieldsLevel === "nodes" ? ALLOWED_NODE_FIELDS : ALLOWED_RIG_FIELDS;
954
+ const fieldsResult = parseFields(opts.fields, fieldsAllowed, fieldsLevel);
955
+ if ("error" in fieldsResult) {
956
+ console.error(fieldsResult.error);
957
+ process.exitCode = 1;
958
+ return;
959
+ }
960
+ fields = fieldsResult;
961
+ }
962
+ const client = deps.clientFactory(host.url);
963
+ const headers = buildRemoteHeaders(bearerResult.token);
964
+ const useEnvelope = parsedFilter !== null || limit !== null || fields !== null || opts.summary === true;
965
+ try {
966
+ if (opts.nodes) {
967
+ await handleNodes(client, opts, parsedFilter, limit, fields, useEnvelope, headers);
968
+ return;
969
+ }
970
+ const res = await client.get(psApiPath(opts), { headers });
971
+ const failedStep = classifyHttpFailedStep(res.status);
972
+ if (failedStep !== "none") {
973
+ emitCrossHostError(host.id, failedStep, `HTTP ${res.status}`, opts.json);
974
+ process.exitCode = 1;
975
+ return;
976
+ }
977
+ const all = Array.isArray(res.data) ? res.data : [];
978
+ const filtered = parsedFilter ? applyRigFilter(all, parsedFilter) : all;
979
+ if (opts.summary) {
980
+ const summary = summarizeRigs(filtered);
981
+ if (opts.json) {
982
+ console.log(JSON.stringify(summary));
983
+ }
984
+ else {
985
+ console.log(`[via host=${host.id} (${host.url})]`);
986
+ console.log(JSON.stringify(summary, null, 2));
987
+ }
988
+ return;
989
+ }
990
+ const limited = limit !== null ? filtered.slice(0, limit) : filtered;
991
+ const truncated = limit !== null && filtered.length > limit;
992
+ const projected = fields ? selectFields(limited, fields) : limited;
993
+ if (opts.json) {
994
+ if (useEnvelope) {
995
+ const envelope = { entries: projected, totalRigs: filtered.length, truncated };
996
+ console.log(JSON.stringify(envelope));
997
+ }
998
+ else {
999
+ console.log(JSON.stringify(projected));
1000
+ }
1001
+ }
1002
+ else {
1003
+ console.log(`[via host=${host.id} (${host.url})]`);
1004
+ console.log(JSON.stringify(projected, null, 2));
1005
+ }
1006
+ }
1007
+ catch (err) {
1008
+ const failedStep = classifyHttpError(err);
1009
+ emitCrossHostError(host.id, failedStep, err.message, opts.json);
1010
+ process.exitCode = 1;
1011
+ }
1012
+ }
1013
+ async function runFanOutPs(opts, deps) {
1014
+ const loader = deps.hostRegistryLoader ?? loadHostRegistry;
1015
+ const registry = loader();
1016
+ if (!registry.ok) {
1017
+ console.error(`Error: ${registry.error}`);
1018
+ process.exitCode = 1;
1019
+ return;
1020
+ }
1021
+ const allHosts = registry.registry.hosts;
1022
+ let targetIds;
1023
+ if (opts.hosts) {
1024
+ targetIds = opts.hosts.split(",").map((s) => s.trim()).filter(Boolean);
1025
+ const unknown = targetIds.filter((id) => !allHosts.some((h) => h.id === id));
1026
+ if (unknown.length > 0) {
1027
+ console.error(`Error: unknown host ids: ${unknown.join(", ")}`);
1028
+ process.exitCode = 1;
1029
+ return;
1030
+ }
1031
+ }
1032
+ else {
1033
+ targetIds = allHosts.filter((h) => h.transport === "http").map((h) => h.id);
1034
+ }
1035
+ const results = await Promise.all(targetIds.map(async (id) => {
1036
+ const host = allHosts.find((h) => h.id === id);
1037
+ if (!host)
1038
+ return { host: id, ok: false, failedStep: "remote-daemon-unreachable", error: `unknown host ${id}` };
1039
+ if (host.transport !== "http") {
1040
+ return { host: id, ok: false, failedStep: "remote-command-failed", error: `host ${id} uses transport ${host.transport}; HTTP fan-out requires transport: http` };
1041
+ }
1042
+ const httpHost = host;
1043
+ const bearerResult = resolveRemoteBearer(httpHost);
1044
+ if (!bearerResult.ok) {
1045
+ return { host: id, ok: false, failedStep: bearerResult.failedStep, error: bearerResult.error };
1046
+ }
1047
+ const client = deps.clientFactory(httpHost.url);
1048
+ try {
1049
+ const psQuery = opts.includeArchived ? "?includeArchived=true" : "";
1050
+ const res = await client.get(`/api/ps${psQuery}`, {
1051
+ headers: buildRemoteHeaders(bearerResult.token),
1052
+ });
1053
+ const failedStep = classifyHttpFailedStep(res.status);
1054
+ if (failedStep !== "none") {
1055
+ return { host: id, ok: false, failedStep, error: `HTTP ${res.status}` };
1056
+ }
1057
+ return { host: id, ok: true, failedStep: "none", data: res.data };
1058
+ }
1059
+ catch (err) {
1060
+ return { host: id, ok: false, failedStep: classifyHttpError(err), error: err.message };
1061
+ }
1062
+ }));
1063
+ const hasFailure = results.some((r) => !r.ok);
1064
+ if (opts.json) {
1065
+ console.log(JSON.stringify({ hosts: results }));
1066
+ }
1067
+ else {
1068
+ for (const r of results) {
1069
+ if (r.ok) {
1070
+ console.log(`\n[host=${r.host}]`);
1071
+ console.log(JSON.stringify(r.data, null, 2));
1072
+ }
1073
+ else {
1074
+ console.log(`\n[host=${r.host}] FAILED (${r.failedStep}): ${r.error}`);
1075
+ }
1076
+ }
1077
+ }
1078
+ if (hasFailure)
1079
+ process.exitCode = 3;
772
1080
  }
773
1081
  //# sourceMappingURL=ps.js.map