@openrig/cli 0.4.7 → 0.5.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 (463) hide show
  1. package/daemon/assets/claude-statusline-context.cjs +40 -8
  2. package/daemon/assets/plugins/openrig-core/hooks/scripts/activity-relay.cjs +0 -0
  3. package/daemon/assets/plugins/openrig-core/skills/applying-a-permission-policy/SKILL.md +120 -0
  4. package/daemon/assets/plugins/openrig-core/skills/claude-compaction-restore/scripts/precompact-hook.mjs +0 -0
  5. package/daemon/assets/plugins/openrig-core/skills/claude-compaction-restore/scripts/restore-from-jsonl.mjs +0 -0
  6. package/daemon/assets/plugins/openrig-core/skills/delegating-work/SKILL.md +43 -0
  7. package/daemon/assets/plugins/openrig-core/skills/forming-an-openrig-mental-model/SKILL.md +2 -0
  8. package/daemon/assets/plugins/openrig-core/skills/openrig-skills/SKILL.md +50 -57
  9. package/daemon/assets/plugins/openrig-core/skills/openrig-user/SKILL.md +84 -19
  10. package/daemon/assets/plugins/openrig-core/skills/queue-handoff/SKILL.md +2 -0
  11. package/daemon/assets/plugins/openrig-core/skills/seat-continuity-and-handover/SKILL.md +2 -1
  12. package/daemon/assets/plugins/openrig-core/skills/session-compaction-and-restore/SKILL.md +1 -0
  13. package/daemon/dist/adapters/claude-code-adapter.d.ts +36 -9
  14. package/daemon/dist/adapters/claude-code-adapter.d.ts.map +1 -1
  15. package/daemon/dist/adapters/claude-code-adapter.js +216 -49
  16. package/daemon/dist/adapters/claude-code-adapter.js.map +1 -1
  17. package/daemon/dist/adapters/claude-resume.d.ts +1 -1
  18. package/daemon/dist/adapters/claude-resume.d.ts.map +1 -1
  19. package/daemon/dist/adapters/claude-resume.js +8 -2
  20. package/daemon/dist/adapters/claude-resume.js.map +1 -1
  21. package/daemon/dist/adapters/codex-resume.d.ts +1 -1
  22. package/daemon/dist/adapters/codex-resume.d.ts.map +1 -1
  23. package/daemon/dist/adapters/codex-resume.js +4 -2
  24. package/daemon/dist/adapters/codex-resume.js.map +1 -1
  25. package/daemon/dist/adapters/codex-runtime-adapter.d.ts +12 -0
  26. package/daemon/dist/adapters/codex-runtime-adapter.d.ts.map +1 -1
  27. package/daemon/dist/adapters/codex-runtime-adapter.js +34 -7
  28. package/daemon/dist/adapters/codex-runtime-adapter.js.map +1 -1
  29. package/daemon/dist/adapters/pi-resume.d.ts +1 -1
  30. package/daemon/dist/adapters/pi-resume.d.ts.map +1 -1
  31. package/daemon/dist/adapters/pi-resume.js +7 -2
  32. package/daemon/dist/adapters/pi-resume.js.map +1 -1
  33. package/daemon/dist/adapters/pi-runtime-adapter.d.ts.map +1 -1
  34. package/daemon/dist/adapters/pi-runtime-adapter.js +4 -1
  35. package/daemon/dist/adapters/pi-runtime-adapter.js.map +1 -1
  36. package/daemon/dist/adapters/yolo-mode.d.ts +23 -0
  37. package/daemon/dist/adapters/yolo-mode.d.ts.map +1 -0
  38. package/daemon/dist/adapters/yolo-mode.js +49 -0
  39. package/daemon/dist/adapters/yolo-mode.js.map +1 -0
  40. package/daemon/dist/build-info.js +3 -3
  41. package/daemon/dist/db/migrations/055_node_permission_policy.d.ts +13 -0
  42. package/daemon/dist/db/migrations/055_node_permission_policy.d.ts.map +1 -0
  43. package/daemon/dist/db/migrations/055_node_permission_policy.js +17 -0
  44. package/daemon/dist/db/migrations/055_node_permission_policy.js.map +1 -0
  45. package/daemon/dist/db/migrations/056_rig_permission_policy.d.ts +13 -0
  46. package/daemon/dist/db/migrations/056_rig_permission_policy.d.ts.map +1 -0
  47. package/daemon/dist/db/migrations/056_rig_permission_policy.js +17 -0
  48. package/daemon/dist/db/migrations/056_rig_permission_policy.js.map +1 -0
  49. package/daemon/dist/db/migrations/057_node_policy_provenance.d.ts +19 -0
  50. package/daemon/dist/db/migrations/057_node_policy_provenance.d.ts.map +1 -0
  51. package/daemon/dist/db/migrations/057_node_policy_provenance.js +26 -0
  52. package/daemon/dist/db/migrations/057_node_policy_provenance.js.map +1 -0
  53. package/daemon/dist/db/migrations/058_rig_policy_provenance.d.ts +15 -0
  54. package/daemon/dist/db/migrations/058_rig_policy_provenance.d.ts.map +1 -0
  55. package/daemon/dist/db/migrations/058_rig_policy_provenance.js +22 -0
  56. package/daemon/dist/db/migrations/058_rig_policy_provenance.js.map +1 -0
  57. package/daemon/dist/domain/agent-activity-store.d.ts +1 -0
  58. package/daemon/dist/domain/agent-activity-store.d.ts.map +1 -1
  59. package/daemon/dist/domain/agent-activity-store.js +2 -2
  60. package/daemon/dist/domain/agent-activity-store.js.map +1 -1
  61. package/daemon/dist/domain/builtin-policy-reference.d.ts +13 -0
  62. package/daemon/dist/domain/builtin-policy-reference.d.ts.map +1 -0
  63. package/daemon/dist/domain/builtin-policy-reference.js +58 -0
  64. package/daemon/dist/domain/builtin-policy-reference.js.map +1 -0
  65. package/daemon/dist/domain/claude-activity-hooks.d.ts +33 -0
  66. package/daemon/dist/domain/claude-activity-hooks.d.ts.map +1 -0
  67. package/daemon/dist/domain/claude-activity-hooks.js +60 -0
  68. package/daemon/dist/domain/claude-activity-hooks.js.map +1 -0
  69. package/daemon/dist/domain/context-packs/bundle-assembler.d.ts +30 -0
  70. package/daemon/dist/domain/context-packs/bundle-assembler.d.ts.map +1 -1
  71. package/daemon/dist/domain/context-packs/bundle-assembler.js +31 -1
  72. package/daemon/dist/domain/context-packs/bundle-assembler.js.map +1 -1
  73. package/daemon/dist/domain/context-packs/context-pack-library-service.d.ts +69 -14
  74. package/daemon/dist/domain/context-packs/context-pack-library-service.d.ts.map +1 -1
  75. package/daemon/dist/domain/context-packs/context-pack-library-service.js +263 -48
  76. package/daemon/dist/domain/context-packs/context-pack-library-service.js.map +1 -1
  77. package/daemon/dist/domain/context-packs/context-pack-types.d.ts +2 -2
  78. package/daemon/dist/domain/context-packs/context-pack-types.d.ts.map +1 -1
  79. package/daemon/dist/domain/context-packs/context-pack-types.js.map +1 -1
  80. package/daemon/dist/domain/context-packs/manifest-parser.d.ts.map +1 -1
  81. package/daemon/dist/domain/context-packs/manifest-parser.js +11 -0
  82. package/daemon/dist/domain/context-packs/manifest-parser.js.map +1 -1
  83. package/daemon/dist/domain/context-packs/ref-safety.d.ts +11 -0
  84. package/daemon/dist/domain/context-packs/ref-safety.d.ts.map +1 -0
  85. package/daemon/dist/domain/context-packs/ref-safety.js +46 -0
  86. package/daemon/dist/domain/context-packs/ref-safety.js.map +1 -0
  87. package/daemon/dist/domain/context-packs/token-estimate.d.ts +3 -0
  88. package/daemon/dist/domain/context-packs/token-estimate.d.ts.map +1 -0
  89. package/daemon/dist/domain/context-packs/token-estimate.js +5 -0
  90. package/daemon/dist/domain/context-packs/token-estimate.js.map +1 -0
  91. package/daemon/dist/domain/native-resume-probe.d.ts +1 -1
  92. package/daemon/dist/domain/native-resume-probe.d.ts.map +1 -1
  93. package/daemon/dist/domain/native-resume-probe.js +11 -4
  94. package/daemon/dist/domain/native-resume-probe.js.map +1 -1
  95. package/daemon/dist/domain/node-inventory.js +2 -2
  96. package/daemon/dist/domain/node-inventory.js.map +1 -1
  97. package/daemon/dist/domain/permission-policy/policy-ref.d.ts +89 -0
  98. package/daemon/dist/domain/permission-policy/policy-ref.d.ts.map +1 -0
  99. package/daemon/dist/domain/permission-policy/policy-ref.js +171 -0
  100. package/daemon/dist/domain/permission-policy/policy-ref.js.map +1 -0
  101. package/daemon/dist/domain/permission-policy/policy-spec.d.ts +34 -0
  102. package/daemon/dist/domain/permission-policy/policy-spec.d.ts.map +1 -0
  103. package/daemon/dist/domain/permission-policy/policy-spec.js +106 -0
  104. package/daemon/dist/domain/permission-policy/policy-spec.js.map +1 -0
  105. package/daemon/dist/domain/plugin-vendor-service.d.ts +14 -0
  106. package/daemon/dist/domain/plugin-vendor-service.d.ts.map +1 -1
  107. package/daemon/dist/domain/plugin-vendor-service.js +26 -2
  108. package/daemon/dist/domain/plugin-vendor-service.js.map +1 -1
  109. package/daemon/dist/domain/provider/claude-usage-reader.d.ts +44 -0
  110. package/daemon/dist/domain/provider/claude-usage-reader.d.ts.map +1 -0
  111. package/daemon/dist/domain/provider/claude-usage-reader.js +112 -0
  112. package/daemon/dist/domain/provider/claude-usage-reader.js.map +1 -0
  113. package/daemon/dist/domain/provider/codex-auth-reader.d.ts +18 -0
  114. package/daemon/dist/domain/provider/codex-auth-reader.d.ts.map +1 -0
  115. package/daemon/dist/domain/provider/codex-auth-reader.js +64 -0
  116. package/daemon/dist/domain/provider/codex-auth-reader.js.map +1 -0
  117. package/daemon/dist/domain/provider/host-usage-rollup.d.ts +51 -0
  118. package/daemon/dist/domain/provider/host-usage-rollup.d.ts.map +1 -0
  119. package/daemon/dist/domain/provider/host-usage-rollup.js +162 -0
  120. package/daemon/dist/domain/provider/host-usage-rollup.js.map +1 -0
  121. package/daemon/dist/domain/provider/provider-collect.d.ts +22 -0
  122. package/daemon/dist/domain/provider/provider-collect.d.ts.map +1 -0
  123. package/daemon/dist/domain/provider/provider-collect.js +74 -0
  124. package/daemon/dist/domain/provider/provider-collect.js.map +1 -0
  125. package/daemon/dist/domain/provider/provider-policy.d.ts +38 -0
  126. package/daemon/dist/domain/provider/provider-policy.d.ts.map +1 -0
  127. package/daemon/dist/domain/provider/provider-policy.js +76 -0
  128. package/daemon/dist/domain/provider/provider-policy.js.map +1 -0
  129. package/daemon/dist/domain/provider/provider-read-model.d.ts +28 -0
  130. package/daemon/dist/domain/provider/provider-read-model.d.ts.map +1 -0
  131. package/daemon/dist/domain/provider/provider-read-model.js +68 -0
  132. package/daemon/dist/domain/provider/provider-read-model.js.map +1 -0
  133. package/daemon/dist/domain/provider/provider-service-impl.d.ts +26 -0
  134. package/daemon/dist/domain/provider/provider-service-impl.d.ts.map +1 -0
  135. package/daemon/dist/domain/provider/provider-service-impl.js +83 -0
  136. package/daemon/dist/domain/provider/provider-service-impl.js.map +1 -0
  137. package/daemon/dist/domain/provider/provider-service.d.ts +33 -0
  138. package/daemon/dist/domain/provider/provider-service.d.ts.map +1 -0
  139. package/daemon/dist/domain/provider/provider-service.js +6 -0
  140. package/daemon/dist/domain/provider/provider-service.js.map +1 -0
  141. package/daemon/dist/domain/provider/provider-signals.d.ts +76 -0
  142. package/daemon/dist/domain/provider/provider-signals.d.ts.map +1 -0
  143. package/daemon/dist/domain/provider/provider-signals.js +144 -0
  144. package/daemon/dist/domain/provider/provider-signals.js.map +1 -0
  145. package/daemon/dist/domain/provider/provider-types.d.ts +101 -0
  146. package/daemon/dist/domain/provider/provider-types.d.ts.map +1 -0
  147. package/daemon/dist/domain/provider/provider-types.js +7 -0
  148. package/daemon/dist/domain/provider/provider-types.js.map +1 -0
  149. package/daemon/dist/domain/provider/reactive-tap.d.ts +29 -0
  150. package/daemon/dist/domain/provider/reactive-tap.d.ts.map +1 -0
  151. package/daemon/dist/domain/provider/reactive-tap.js +80 -0
  152. package/daemon/dist/domain/provider/reactive-tap.js.map +1 -0
  153. package/daemon/dist/domain/restore-orchestrator.d.ts +14 -0
  154. package/daemon/dist/domain/restore-orchestrator.d.ts.map +1 -1
  155. package/daemon/dist/domain/restore-orchestrator.js +90 -6
  156. package/daemon/dist/domain/restore-orchestrator.js.map +1 -1
  157. package/daemon/dist/domain/rig-expansion-service.d.ts.map +1 -1
  158. package/daemon/dist/domain/rig-expansion-service.js +10 -1
  159. package/daemon/dist/domain/rig-expansion-service.js.map +1 -1
  160. package/daemon/dist/domain/rig-repository.d.ts +45 -0
  161. package/daemon/dist/domain/rig-repository.d.ts.map +1 -1
  162. package/daemon/dist/domain/rig-repository.js +75 -1
  163. package/daemon/dist/domain/rig-repository.js.map +1 -1
  164. package/daemon/dist/domain/rigspec-codec.d.ts.map +1 -1
  165. package/daemon/dist/domain/rigspec-codec.js +6 -0
  166. package/daemon/dist/domain/rigspec-codec.js.map +1 -1
  167. package/daemon/dist/domain/rigspec-exporter.d.ts.map +1 -1
  168. package/daemon/dist/domain/rigspec-exporter.js +8 -0
  169. package/daemon/dist/domain/rigspec-exporter.js.map +1 -1
  170. package/daemon/dist/domain/rigspec-instantiator.d.ts +25 -24
  171. package/daemon/dist/domain/rigspec-instantiator.d.ts.map +1 -1
  172. package/daemon/dist/domain/rigspec-instantiator.js +190 -69
  173. package/daemon/dist/domain/rigspec-instantiator.js.map +1 -1
  174. package/daemon/dist/domain/rigspec-preflight.d.ts +22 -0
  175. package/daemon/dist/domain/rigspec-preflight.d.ts.map +1 -1
  176. package/daemon/dist/domain/rigspec-preflight.js +76 -0
  177. package/daemon/dist/domain/rigspec-preflight.js.map +1 -1
  178. package/daemon/dist/domain/rigspec-schema.d.ts.map +1 -1
  179. package/daemon/dist/domain/rigspec-schema.js +25 -0
  180. package/daemon/dist/domain/rigspec-schema.js.map +1 -1
  181. package/daemon/dist/domain/runtime-adapter.d.ts +7 -11
  182. package/daemon/dist/domain/runtime-adapter.d.ts.map +1 -1
  183. package/daemon/dist/domain/runtime-adapter.js.map +1 -1
  184. package/daemon/dist/domain/scope/attestation-lineage.generated.d.ts +14 -0
  185. package/daemon/dist/domain/scope/attestation-lineage.generated.d.ts.map +1 -0
  186. package/daemon/dist/domain/scope/attestation-lineage.generated.js +26 -0
  187. package/daemon/dist/domain/scope/attestation-lineage.generated.js.map +1 -0
  188. package/daemon/dist/domain/scope/scope-approve.d.ts +13 -0
  189. package/daemon/dist/domain/scope/scope-approve.d.ts.map +1 -1
  190. package/daemon/dist/domain/scope/scope-approve.js +50 -10
  191. package/daemon/dist/domain/scope/scope-approve.js.map +1 -1
  192. package/daemon/dist/domain/seat-handover-service.d.ts.map +1 -1
  193. package/daemon/dist/domain/seat-handover-service.js +7 -1
  194. package/daemon/dist/domain/seat-handover-service.js.map +1 -1
  195. package/daemon/dist/domain/startup-validation.d.ts.map +1 -1
  196. package/daemon/dist/domain/startup-validation.js +18 -54
  197. package/daemon/dist/domain/startup-validation.js.map +1 -1
  198. package/daemon/dist/domain/stream-store.d.ts +4 -0
  199. package/daemon/dist/domain/stream-store.d.ts.map +1 -1
  200. package/daemon/dist/domain/stream-store.js +15 -2
  201. package/daemon/dist/domain/stream-store.js.map +1 -1
  202. package/daemon/dist/domain/successor-session-launcher.d.ts +4 -0
  203. package/daemon/dist/domain/successor-session-launcher.d.ts.map +1 -1
  204. package/daemon/dist/domain/successor-session-launcher.js +2 -0
  205. package/daemon/dist/domain/successor-session-launcher.js.map +1 -1
  206. package/daemon/dist/domain/types.d.ts +19 -9
  207. package/daemon/dist/domain/types.d.ts.map +1 -1
  208. package/daemon/dist/domain/types.js.map +1 -1
  209. package/daemon/dist/domain/workspace/default-workspace-scaffold.js +1 -1
  210. package/daemon/dist/routes/agent-images.d.ts.map +1 -1
  211. package/daemon/dist/routes/agent-images.js +2 -0
  212. package/daemon/dist/routes/agent-images.js.map +1 -1
  213. package/daemon/dist/routes/context-packs.d.ts.map +1 -1
  214. package/daemon/dist/routes/context-packs.js +157 -75
  215. package/daemon/dist/routes/context-packs.js.map +1 -1
  216. package/daemon/dist/routes/provider.d.ts +3 -0
  217. package/daemon/dist/routes/provider.d.ts.map +1 -0
  218. package/daemon/dist/routes/provider.js +124 -0
  219. package/daemon/dist/routes/provider.js.map +1 -0
  220. package/daemon/dist/routes/rigs.js +8 -0
  221. package/daemon/dist/routes/rigs.js.map +1 -1
  222. package/daemon/dist/routes/scope-approve.d.ts.map +1 -1
  223. package/daemon/dist/routes/scope-approve.js +6 -3
  224. package/daemon/dist/routes/scope-approve.js.map +1 -1
  225. package/daemon/dist/routes/scope-audit.d.ts.map +1 -1
  226. package/daemon/dist/routes/scope-audit.js +4 -1
  227. package/daemon/dist/routes/scope-audit.js.map +1 -1
  228. package/daemon/dist/routes/stream.d.ts.map +1 -1
  229. package/daemon/dist/routes/stream.js +71 -1
  230. package/daemon/dist/routes/stream.js.map +1 -1
  231. package/daemon/dist/server.d.ts +3 -0
  232. package/daemon/dist/server.d.ts.map +1 -1
  233. package/daemon/dist/server.js +5 -0
  234. package/daemon/dist/server.js.map +1 -1
  235. package/daemon/dist/startup.d.ts.map +1 -1
  236. package/daemon/dist/startup.js +38 -12
  237. package/daemon/dist/startup.js.map +1 -1
  238. package/daemon/docs/reference/developing.md +39 -0
  239. package/daemon/docs/reference/rig-spec.md +19 -0
  240. package/daemon/policies/builtin/locked.policy.md +24 -0
  241. package/daemon/policies/builtin/open.policy.md +24 -0
  242. package/daemon/policies/builtin/standard.policy.md +25 -0
  243. package/daemon/policies/builtin/yolo.policy.md +20 -0
  244. package/daemon/policies/examples/my-cautious-dev.policy.md +40 -0
  245. package/daemon/specs/agents/apps/vault-specialist/agent.yaml +1 -1
  246. package/daemon/specs/agents/conveyor/builder/agent.yaml +1 -1
  247. package/daemon/specs/agents/conveyor/lead/agent.yaml +1 -1
  248. package/daemon/specs/agents/conveyor/planner/agent.yaml +1 -1
  249. package/daemon/specs/agents/conveyor/reviewer/agent.yaml +1 -1
  250. package/daemon/specs/agents/design/product-designer/agent.yaml +1 -1
  251. package/daemon/specs/agents/development/implementer/agent.yaml +1 -1
  252. package/daemon/specs/agents/development/qa/agent.yaml +1 -1
  253. package/daemon/specs/agents/factory-rsi/dogfood/agent.yaml +1 -1
  254. package/daemon/specs/agents/factory-rsi/release-manager/agent.yaml +1 -1
  255. package/daemon/specs/agents/orchestration/orchestrator/agent.yaml +1 -1
  256. package/daemon/specs/agents/product-management/pm/agent.yaml +1 -0
  257. package/daemon/specs/agents/research/analyst/agent.yaml +1 -1
  258. package/daemon/specs/agents/research/synthesizer/agent.yaml +1 -1
  259. package/daemon/specs/agents/review/independent-reviewer/agent.yaml +1 -1
  260. package/daemon/specs/agents/shared/agent.yaml +6 -0
  261. package/daemon/specs/agents/shared/runtime/claude-activity-hooks.json +4 -0
  262. package/daemon/specs/agents/shared/runtime/claude-settings.fragment.json +1 -20
  263. package/daemon/specs/agents/shared/skills/core/openrig-architect/SKILL.md +0 -2
  264. package/daemon/specs/agents/shared/skills/core/watchdog/SKILL.md +1 -0
  265. package/daemon/specs/agents/shared/skills/process/systematic-debugging/find-polluter.sh +0 -0
  266. package/daemon/specs/agents/shared/skills/process/verification-before-completion/SKILL.md +1 -0
  267. package/dist/bin-wrapper.d.ts.map +1 -1
  268. package/dist/bin-wrapper.js +7 -0
  269. package/dist/bin-wrapper.js.map +1 -1
  270. package/dist/build-info.js +3 -3
  271. package/dist/commands/agent-image.d.ts.map +1 -1
  272. package/dist/commands/agent-image.js +2 -1
  273. package/dist/commands/agent-image.js.map +1 -1
  274. package/dist/commands/broadcast.d.ts.map +1 -1
  275. package/dist/commands/broadcast.js +37 -2
  276. package/dist/commands/broadcast.js.map +1 -1
  277. package/dist/commands/context.d.ts +2 -7
  278. package/dist/commands/context.d.ts.map +1 -1
  279. package/dist/commands/context.js +391 -213
  280. package/dist/commands/context.js.map +1 -1
  281. package/dist/commands/provider.d.ts +4 -0
  282. package/dist/commands/provider.d.ts.map +1 -0
  283. package/dist/commands/provider.js +218 -0
  284. package/dist/commands/provider.js.map +1 -0
  285. package/dist/commands/ps.d.ts +7 -0
  286. package/dist/commands/ps.d.ts.map +1 -1
  287. package/dist/commands/ps.js +34 -4
  288. package/dist/commands/ps.js.map +1 -1
  289. package/dist/commands/queue.d.ts.map +1 -1
  290. package/dist/commands/queue.js +38 -8
  291. package/dist/commands/queue.js.map +1 -1
  292. package/dist/commands/scope.d.ts.map +1 -1
  293. package/dist/commands/scope.js +48 -4
  294. package/dist/commands/scope.js.map +1 -1
  295. package/dist/commands/send.d.ts.map +1 -1
  296. package/dist/commands/send.js +70 -11
  297. package/dist/commands/send.js.map +1 -1
  298. package/dist/commands/setup.d.ts +14 -0
  299. package/dist/commands/setup.d.ts.map +1 -1
  300. package/dist/commands/setup.js +131 -8
  301. package/dist/commands/setup.js.map +1 -1
  302. package/dist/commands/stream.d.ts +1 -0
  303. package/dist/commands/stream.d.ts.map +1 -1
  304. package/dist/commands/stream.js +93 -0
  305. package/dist/commands/stream.js.map +1 -1
  306. package/dist/commands/tui.d.ts +4 -0
  307. package/dist/commands/tui.d.ts.map +1 -0
  308. package/dist/commands/tui.js +29 -0
  309. package/dist/commands/tui.js.map +1 -0
  310. package/dist/commands/walk.d.ts +19 -0
  311. package/dist/commands/walk.d.ts.map +1 -0
  312. package/dist/commands/walk.js +139 -0
  313. package/dist/commands/walk.js.map +1 -0
  314. package/dist/context-resolve.d.ts +14 -0
  315. package/dist/context-resolve.d.ts.map +1 -0
  316. package/dist/context-resolve.js +40 -0
  317. package/dist/context-resolve.js.map +1 -0
  318. package/dist/front-door.d.ts +31 -0
  319. package/dist/front-door.d.ts.map +1 -0
  320. package/dist/front-door.js +114 -0
  321. package/dist/front-door.js.map +1 -0
  322. package/dist/index.d.ts +3 -1
  323. package/dist/index.d.ts.map +1 -1
  324. package/dist/index.js +19 -6
  325. package/dist/index.js.map +1 -1
  326. package/dist/lib/scope/attestation-lineage.d.ts +14 -0
  327. package/dist/lib/scope/attestation-lineage.d.ts.map +1 -0
  328. package/dist/lib/scope/attestation-lineage.js +34 -0
  329. package/dist/lib/scope/attestation-lineage.js.map +1 -0
  330. package/package.json +4 -2
  331. package/tui/dist/daemon-client.d.ts +56 -0
  332. package/tui/dist/daemon-client.d.ts.map +1 -0
  333. package/tui/dist/daemon-client.js +99 -0
  334. package/tui/dist/daemon-client.js.map +1 -0
  335. package/tui/dist/demo-data.d.ts +3 -0
  336. package/tui/dist/demo-data.d.ts.map +1 -0
  337. package/tui/dist/demo-data.js +52 -0
  338. package/tui/dist/demo-data.js.map +1 -0
  339. package/tui/dist/detail.d.ts +34 -0
  340. package/tui/dist/detail.d.ts.map +1 -0
  341. package/tui/dist/detail.js +47 -0
  342. package/tui/dist/detail.js.map +1 -0
  343. package/tui/dist/grammar.d.ts +3 -0
  344. package/tui/dist/grammar.d.ts.map +1 -0
  345. package/tui/dist/grammar.js +66 -0
  346. package/tui/dist/grammar.js.map +1 -0
  347. package/tui/dist/hydrate.d.ts +78 -0
  348. package/tui/dist/hydrate.d.ts.map +1 -0
  349. package/tui/dist/hydrate.js +294 -0
  350. package/tui/dist/hydrate.js.map +1 -0
  351. package/tui/dist/index.d.ts +12 -0
  352. package/tui/dist/index.d.ts.map +1 -0
  353. package/tui/dist/index.js +12 -0
  354. package/tui/dist/index.js.map +1 -0
  355. package/tui/dist/input.d.ts +21 -0
  356. package/tui/dist/input.d.ts.map +1 -0
  357. package/tui/dist/input.js +128 -0
  358. package/tui/dist/input.js.map +1 -0
  359. package/tui/dist/live.d.ts +20 -0
  360. package/tui/dist/live.d.ts.map +1 -0
  361. package/tui/dist/live.js +67 -0
  362. package/tui/dist/live.js.map +1 -0
  363. package/tui/dist/main.d.ts +3 -0
  364. package/tui/dist/main.d.ts.map +1 -0
  365. package/tui/dist/main.js +184 -0
  366. package/tui/dist/main.js.map +1 -0
  367. package/tui/dist/motion.d.ts +13 -0
  368. package/tui/dist/motion.d.ts.map +1 -0
  369. package/tui/dist/motion.js +31 -0
  370. package/tui/dist/motion.js.map +1 -0
  371. package/tui/dist/navigator.d.ts +21 -0
  372. package/tui/dist/navigator.d.ts.map +1 -0
  373. package/tui/dist/navigator.js +168 -0
  374. package/tui/dist/navigator.js.map +1 -0
  375. package/tui/dist/refresh.d.ts +3 -0
  376. package/tui/dist/refresh.d.ts.map +1 -0
  377. package/tui/dist/refresh.js +9 -0
  378. package/tui/dist/refresh.js.map +1 -0
  379. package/tui/dist/render.d.ts +21 -0
  380. package/tui/dist/render.d.ts.map +1 -0
  381. package/tui/dist/render.js +807 -0
  382. package/tui/dist/render.js.map +1 -0
  383. package/tui/dist/sections.d.ts +4 -0
  384. package/tui/dist/sections.d.ts.map +1 -0
  385. package/tui/dist/sections.js +19 -0
  386. package/tui/dist/sections.js.map +1 -0
  387. package/tui/dist/socket-server.d.ts +24 -0
  388. package/tui/dist/socket-server.d.ts.map +1 -0
  389. package/tui/dist/socket-server.js +85 -0
  390. package/tui/dist/socket-server.js.map +1 -0
  391. package/tui/dist/state.d.ts +51 -0
  392. package/tui/dist/state.d.ts.map +1 -0
  393. package/tui/dist/state.js +480 -0
  394. package/tui/dist/state.js.map +1 -0
  395. package/tui/dist/stylize.d.ts +4 -0
  396. package/tui/dist/stylize.d.ts.map +1 -0
  397. package/tui/dist/stylize.js +248 -0
  398. package/tui/dist/stylize.js.map +1 -0
  399. package/tui/dist/theme.d.ts +19 -0
  400. package/tui/dist/theme.d.ts.map +1 -0
  401. package/tui/dist/theme.js +86 -0
  402. package/tui/dist/theme.js.map +1 -0
  403. package/tui/dist/topology/canvas.d.ts +43 -0
  404. package/tui/dist/topology/canvas.d.ts.map +1 -0
  405. package/tui/dist/topology/canvas.js +131 -0
  406. package/tui/dist/topology/canvas.js.map +1 -0
  407. package/tui/dist/topology/fixture.d.ts +4 -0
  408. package/tui/dist/topology/fixture.d.ts.map +1 -0
  409. package/tui/dist/topology/fixture.js +71 -0
  410. package/tui/dist/topology/fixture.js.map +1 -0
  411. package/tui/dist/topology/glyphs.d.ts +21 -0
  412. package/tui/dist/topology/glyphs.d.ts.map +1 -0
  413. package/tui/dist/topology/glyphs.js +49 -0
  414. package/tui/dist/topology/glyphs.js.map +1 -0
  415. package/tui/dist/topology/graph-types.d.ts +39 -0
  416. package/tui/dist/topology/graph-types.d.ts.map +1 -0
  417. package/tui/dist/topology/graph-types.js +2 -0
  418. package/tui/dist/topology/graph-types.js.map +1 -0
  419. package/tui/dist/topology/layout.d.ts +52 -0
  420. package/tui/dist/topology/layout.d.ts.map +1 -0
  421. package/tui/dist/topology/layout.js +118 -0
  422. package/tui/dist/topology/layout.js.map +1 -0
  423. package/tui/dist/topology/render-graph.d.ts +8 -0
  424. package/tui/dist/topology/render-graph.d.ts.map +1 -0
  425. package/tui/dist/topology/render-graph.js +20 -0
  426. package/tui/dist/topology/render-graph.js.map +1 -0
  427. package/tui/dist/topology/runtime-marks.d.ts +53 -0
  428. package/tui/dist/topology/runtime-marks.d.ts.map +1 -0
  429. package/tui/dist/topology/runtime-marks.js +185 -0
  430. package/tui/dist/topology/runtime-marks.js.map +1 -0
  431. package/tui/dist/topology/styles/braille.d.ts +5 -0
  432. package/tui/dist/topology/styles/braille.d.ts.map +1 -0
  433. package/tui/dist/topology/styles/braille.js +84 -0
  434. package/tui/dist/topology/styles/braille.js.map +1 -0
  435. package/tui/dist/topology/styles/hatchet.d.ts +41 -0
  436. package/tui/dist/topology/styles/hatchet.d.ts.map +1 -0
  437. package/tui/dist/topology/styles/hatchet.js +146 -0
  438. package/tui/dist/topology/styles/hatchet.js.map +1 -0
  439. package/tui/dist/types.d.ts +362 -0
  440. package/tui/dist/types.d.ts.map +1 -0
  441. package/tui/dist/types.js +6 -0
  442. package/tui/dist/types.js.map +1 -0
  443. package/ui/dist/assets/{index-DkNi0RT8.js → index-Dv5VaLCN.js} +135 -135
  444. package/ui/dist/index.html +1 -1
  445. package/daemon/specs/agents/shared/skills/pm/backlog-capture/SKILL.md +0 -43
  446. package/daemon/specs/agents/shared/skills/pm/context-builder/SKILL.md +0 -87
  447. package/daemon/specs/agents/shared/skills/pm/exec-summary/SKILL.md +0 -84
  448. package/daemon/specs/agents/shared/skills/pm/office-hours/SKILL.md +0 -129
  449. package/daemon/specs/agents/shared/skills/pm/plan-review/SKILL.md +0 -98
  450. package/daemon/specs/agents/shared/skills/pm/requirements-writer/SKILL.md +0 -113
  451. package/daemon/specs/agents/shared/skills/pm/ui-mockup/SKILL.md +0 -76
  452. package/daemon/specs/agents/shared/skills/pods/development-team/SKILL.md +0 -148
  453. package/daemon/specs/agents/shared/skills/pods/orchestration-team/SKILL.md +0 -266
  454. package/daemon/specs/agents/shared/skills/pods/review-team/SKILL.md +0 -213
  455. package/daemon/specs/agents/shared/skills/process/systematic-debugging/CREATION-LOG.md +0 -119
  456. package/daemon/specs/agents/shared/skills/process/systematic-debugging/test-academic.md +0 -14
  457. package/daemon/specs/agents/shared/skills/process/systematic-debugging/test-pressure-1.md +0 -58
  458. package/daemon/specs/agents/shared/skills/process/systematic-debugging/test-pressure-2.md +0 -68
  459. package/daemon/specs/agents/shared/skills/process/systematic-debugging/test-pressure-3.md +0 -69
  460. package/dist/commands/context-pack.d.ts +0 -4
  461. package/dist/commands/context-pack.d.ts.map +0 -1
  462. package/dist/commands/context-pack.js +0 -357
  463. package/dist/commands/context-pack.js.map +0 -1
@@ -0,0 +1,184 @@
1
+ #!/usr/bin/env node
2
+ // Entry: wires the four input adapters (command bar / keyboard / mouse /
3
+ // control socket) onto ONE instance-scoped view-state (PIN 1). tmux send-keys
4
+ // against this process is the drivability floor and needs no adapter at all —
5
+ // keystrokes ARE the keyboard adapter.
6
+ //
7
+ // openrig-tui [--instance <id>] [--socket <path>] [--url <daemon>] [--demo]
8
+ import { createViewState, computeExplorerRows, emptySnapshot } from "./state.js";
9
+ import { parseCommand } from "./grammar.js";
10
+ import { createInputDecoder, resolveKeyAction, MOUSE_ENABLE, MOUSE_DISABLE, ALT_SCREEN_ON, ALT_SCREEN_OFF } from "./input.js";
11
+ import { renderScreen } from "./render.js";
12
+ import { createStyle, detectColorMode } from "./theme.js";
13
+ import { stylizeLines } from "./stylize.js";
14
+ import { createControlSocket, defaultSocketPath } from "./socket-server.js";
15
+ import { demoSnapshot } from "./demo-data.js";
16
+ import { DaemonClient, launchNodeNotice } from "./daemon-client.js";
17
+ import { hydrateSnapshot } from "./hydrate.js";
18
+ import { createLiveRefresh } from "./live.js";
19
+ const REFRESH_MS = 5000;
20
+ function argOf(args, flag) {
21
+ const i = args.indexOf(flag);
22
+ return i >= 0 ? args[i + 1] : undefined;
23
+ }
24
+ async function run() {
25
+ const args = process.argv.slice(2);
26
+ const instanceId = argOf(args, "--instance") ?? "tui-1";
27
+ const demo = args.includes("--demo");
28
+ // --demo renders the labeled fixture; otherwise the §4.A reads hydrate the
29
+ // snapshot (honest-empty until the first read answers; failed reads surface
30
+ // as named readErrors in the status line, never fabricated content).
31
+ let snapshot = demo ? demoSnapshot() : emptySnapshot();
32
+ const view = createViewState({ instanceId, getSnapshot: () => snapshot });
33
+ const client = demo ? null : new DaemonClient({ baseUrl: argOf(args, "--url") });
34
+ let inputLine = "";
35
+ let lastScreen = null;
36
+ const inputDecoder = createInputDecoder();
37
+ const style = createStyle(args.includes("--no-color") ? "none" : detectColorMode());
38
+ // S19 round-5 (guard): the refresh OWNER (live.ts) carries the honest load
39
+ // lifecycle and the per-seat fresh-pane-output events; renderScreen stays
40
+ // pure and takes the clock + owner state as inputs. motionTimer keeps
41
+ // redrawing ONLY while the frame reports live motion (spinner or flash).
42
+ const reviewCache = new Map();
43
+ const live = client
44
+ ? createLiveRefresh({ hydrate: () => hydrateSnapshot(client, reviewCache), onFrame: () => draw(), now: () => Date.now() })
45
+ : null;
46
+ let motionTimer = null;
47
+ function draw() {
48
+ const cols = process.stdout.columns ?? 120;
49
+ const rows = process.stdout.rows ?? 32;
50
+ const nowMs = Date.now();
51
+ if (live)
52
+ snapshot = live.snapshot();
53
+ const opts = { cols, rows, nowMs, colorMode: style.mode, ...(live ? { load: live.load(), rowFlashes: live.flashes() } : {}) };
54
+ lastScreen = renderScreen(view.get(), snapshot, opts, inputLine);
55
+ if (view.get().contentMaxOffset !== lastScreen.contentMaxOffset || view.get().contentTargetCount !== lastScreen.contentTargets.length) {
56
+ view.dispatch({ type: "layout", contentMaxOffset: lastScreen.contentMaxOffset, contentTargetCount: lastScreen.contentTargets.length });
57
+ lastScreen = renderScreen(view.get(), snapshot, opts, inputLine);
58
+ }
59
+ // styling is a zero-width post-pass over the tested plain layer — the
60
+ // hitMap coordinates always match what is on screen
61
+ process.stdout.write("\x1b[H" + stylizeLines(lastScreen, style).map((l) => "\x1b[2K" + l).join("\r\n"));
62
+ if (motionTimer)
63
+ clearTimeout(motionTimer);
64
+ motionTimer = lastScreen.motionActive ? setTimeout(draw, 120) : null;
65
+ }
66
+ const socketPath = argOf(args, "--socket") ?? defaultSocketPath(instanceId);
67
+ const socket = await createControlSocket({ socketPath, view, onMutation: draw });
68
+ let refreshTimer = null;
69
+ // Acts are drive-structure daemon WRITES (BR-8/BR-9) — executed here against
70
+ // the two existing contracts; the view-state is only told the outcome.
71
+ async function executeAct(action) {
72
+ if (!client) {
73
+ view.dispatch({ type: "notice", message: "demo mode: actions disabled" });
74
+ draw();
75
+ return;
76
+ }
77
+ try {
78
+ if (action.act === "open-terminal") {
79
+ const result = await client.openTerminal(action.view);
80
+ view.dispatch({
81
+ type: "notice",
82
+ message: `terminal opened: ${action.view} (${result.opened.length} opened, ${result.absent.length} absent, ${result.degraded.length} degraded)`,
83
+ });
84
+ }
85
+ else {
86
+ const result = await client.launchNode(action.rigId, action.agent);
87
+ view.dispatch({ type: "notice", message: launchNodeNotice(action.agent, result) });
88
+ }
89
+ }
90
+ catch (err) {
91
+ view.dispatch({ type: "notice", message: err instanceof Error ? err.message : String(err) });
92
+ }
93
+ draw();
94
+ }
95
+ function perform(action) {
96
+ if (action.type === "act") {
97
+ view.dispatch({ type: "notice", message: `${action.act}…` });
98
+ void executeAct(action);
99
+ return;
100
+ }
101
+ view.dispatch(action);
102
+ }
103
+ async function shutdown() {
104
+ if (refreshTimer)
105
+ clearInterval(refreshTimer);
106
+ if (motionTimer)
107
+ clearTimeout(motionTimer);
108
+ process.stdout.write(MOUSE_DISABLE + ALT_SCREEN_OFF);
109
+ await socket.close();
110
+ process.exit(0);
111
+ }
112
+ process.on("SIGINT", () => void shutdown());
113
+ process.on("SIGTERM", () => void shutdown());
114
+ if (process.stdin.isTTY)
115
+ process.stdin.setRawMode(true);
116
+ function handleInput(events) {
117
+ for (const ev of events) {
118
+ if (ev.type === "char") {
119
+ if (ev.ch === "q" && inputLine === "") {
120
+ void shutdown();
121
+ return;
122
+ }
123
+ if (ev.ch === "f" && inputLine === "") {
124
+ view.dispatch({ type: "footer" });
125
+ continue;
126
+ }
127
+ inputLine += ev.ch;
128
+ }
129
+ else if (ev.type === "key" && ev.key === "backspace") {
130
+ inputLine = inputLine.slice(0, -1);
131
+ }
132
+ else if (ev.type === "key" && ev.key === "escape") {
133
+ inputLine = "";
134
+ }
135
+ else if (ev.type === "key" && ev.key === "enter") {
136
+ if (inputLine !== "") {
137
+ perform(parseCommand(inputLine, view.get().sections));
138
+ inputLine = "";
139
+ }
140
+ else {
141
+ if (lastScreen) {
142
+ const action = resolveKeyAction(ev, view.get(), lastScreen, computeExplorerRows(view.get(), snapshot).length);
143
+ if (action)
144
+ perform(action);
145
+ }
146
+ }
147
+ }
148
+ else if (ev.type === "key" && "action" in ev) {
149
+ if (lastScreen) {
150
+ const action = resolveKeyAction(ev, view.get(), lastScreen, computeExplorerRows(view.get(), snapshot).length);
151
+ if (action)
152
+ perform(action);
153
+ }
154
+ }
155
+ else if (ev.type === "mouse" && lastScreen) {
156
+ const hit = lastScreen.hitMap.find((h) => h.y === ev.y && ev.x >= h.x1 && ev.x <= h.x2);
157
+ if (hit)
158
+ perform(hit.action);
159
+ }
160
+ }
161
+ draw();
162
+ }
163
+ process.stdin.on("data", (bytes) => {
164
+ handleInput(inputDecoder.write(bytes));
165
+ });
166
+ process.stdin.on("end", () => {
167
+ handleInput(inputDecoder.flush());
168
+ });
169
+ process.stdout.write(ALT_SCREEN_ON + MOUSE_ENABLE);
170
+ // round-5 (guard): the FIRST terminal frame draws the honest in-flight
171
+ // state — the refresh starts after entering the alt screen, never before,
172
+ // so loading is VISIBLE instead of awaited behind a blank terminal
173
+ draw();
174
+ if (live) {
175
+ void live.refresh();
176
+ refreshTimer = setInterval(() => void live.refresh(), REFRESH_MS);
177
+ }
178
+ }
179
+ run().catch((err) => {
180
+ process.stdout.write(MOUSE_DISABLE + ALT_SCREEN_OFF);
181
+ console.error(err instanceof Error ? err.message : err);
182
+ process.exit(1);
183
+ });
184
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { ColorMode } from "./theme.js";
2
+ /** the env kill-switch — any of the accepted flags disables ALL motion */
3
+ export declare function reducedMotion(env?: NodeJS.ProcessEnv): boolean;
4
+ /** loading spinner: braille frames (truecolor/256), line frames at 16-color,
5
+ * a STATIC dot under reduced motion — the state is still shown, honestly */
6
+ export declare function spinnerFrame(tick: number, mode: ColorMode, reduced: boolean): string;
7
+ /** tmux-style ONE-SHOT row flash: active only within the window; never under
8
+ * reduced motion */
9
+ export declare function flashActive(sinceMs: number, nowMs: number, durationMs?: number, reduced?: boolean): boolean;
10
+ /** quiet DETERMINATE block-bar — REAL fractions only; null/NaN renders
11
+ * nothing (a bar is a claim of measured progress, never fabricated) */
12
+ export declare function barCells(fraction: number | null, width: number): string;
13
+ //# sourceMappingURL=motion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"motion.d.ts","sourceRoot":"","sources":["../src/motion.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,0EAA0E;AAC1E,wBAAgB,aAAa,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAE3E;AAKD;4EAC4E;AAC5E,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,CAIpF;AAED;oBACoB;AACpB,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,SAAM,EAAE,OAAO,UAAQ,GAAG,OAAO,CAGtG;AAED;uEACuE;AACvE,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAKvE"}
@@ -0,0 +1,31 @@
1
+ /** the env kill-switch — any of the accepted flags disables ALL motion */
2
+ export function reducedMotion(env = process.env) {
3
+ return env["OPENRIG_REDUCED_MOTION"] === "1" || env["REDUCED_MOTION"] === "1" || env["NO_MOTION"] === "1";
4
+ }
5
+ const BRAILLE_FRAMES = ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"];
6
+ const LINE_FRAMES = ["|", "/", "-", "\\"];
7
+ /** loading spinner: braille frames (truecolor/256), line frames at 16-color,
8
+ * a STATIC dot under reduced motion — the state is still shown, honestly */
9
+ export function spinnerFrame(tick, mode, reduced) {
10
+ if (reduced)
11
+ return "·";
12
+ const frames = mode === "16" || mode === "none" ? LINE_FRAMES : BRAILLE_FRAMES;
13
+ return frames[((tick % frames.length) + frames.length) % frames.length];
14
+ }
15
+ /** tmux-style ONE-SHOT row flash: active only within the window; never under
16
+ * reduced motion */
17
+ export function flashActive(sinceMs, nowMs, durationMs = 600, reduced = false) {
18
+ if (reduced)
19
+ return false;
20
+ return nowMs >= sinceMs && nowMs - sinceMs < durationMs;
21
+ }
22
+ /** quiet DETERMINATE block-bar — REAL fractions only; null/NaN renders
23
+ * nothing (a bar is a claim of measured progress, never fabricated) */
24
+ export function barCells(fraction, width) {
25
+ if (fraction == null || Number.isNaN(fraction))
26
+ return "";
27
+ const clamped = Math.min(Math.max(fraction, 0), 1);
28
+ const filled = Math.round(clamped * width);
29
+ return "█".repeat(filled) + "░".repeat(width - filled);
30
+ }
31
+ //# sourceMappingURL=motion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"motion.js","sourceRoot":"","sources":["../src/motion.ts"],"names":[],"mappings":"AAOA,0EAA0E;AAC1E,MAAM,UAAU,aAAa,CAAC,MAAyB,OAAO,CAAC,GAAG;IAChE,OAAO,GAAG,CAAC,wBAAwB,CAAC,KAAK,GAAG,IAAI,GAAG,CAAC,gBAAgB,CAAC,KAAK,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,KAAK,GAAG,CAAC;AAC5G,CAAC;AAED,MAAM,cAAc,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAC1E,MAAM,WAAW,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;AAE1C;4EAC4E;AAC5E,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,IAAe,EAAE,OAAgB;IAC1E,IAAI,OAAO;QAAE,OAAO,GAAG,CAAC;IACxB,MAAM,MAAM,GAAG,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC;IAC/E,OAAO,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAE,CAAC;AAC3E,CAAC;AAED;oBACoB;AACpB,MAAM,UAAU,WAAW,CAAC,OAAe,EAAE,KAAa,EAAE,UAAU,GAAG,GAAG,EAAE,OAAO,GAAG,KAAK;IAC3F,IAAI,OAAO;QAAE,OAAO,KAAK,CAAC;IAC1B,OAAO,KAAK,IAAI,OAAO,IAAI,KAAK,GAAG,OAAO,GAAG,UAAU,CAAC;AAC1D,CAAC;AAED;uEACuE;AACvE,MAAM,UAAU,QAAQ,CAAC,QAAuB,EAAE,KAAa;IAC7D,IAAI,QAAQ,IAAI,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC;QAAE,OAAO,EAAE,CAAC;IAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACnD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC;IAC3C,OAAO,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC;AACzD,CAAC"}
@@ -0,0 +1,21 @@
1
+ import type { ExplorerRow, FleetSnapshot } from "./types.js";
2
+ import type { MarkSeg } from "./topology/runtime-marks.js";
3
+ export interface NavigatorMeta {
4
+ /** column (within the DISPLAY label) where this run begins */
5
+ start: number;
6
+ /** token segments — a run's own colors (status role; formerly the mark's
7
+ * bg channel) survive the paint layer through this channel (guard finding 2;
8
+ * round-4: rows may carry SEVERAL runs — status badge + right meta) */
9
+ segs: MarkSeg[];
10
+ }
11
+ /**
12
+ * Display rows for the explorer pane — labels plus the seg-run channel
13
+ * (same order/length as `rows`; each row carries 0..n paint runs).
14
+ */
15
+ export declare function navigatorDisplay(rows: ExplorerRow[], snap: FleetSnapshot, width: number): {
16
+ labels: string[];
17
+ metas: Array<NavigatorMeta[] | null>;
18
+ };
19
+ /** compat view (tests/callers that only need labels) */
20
+ export declare function navigatorLabels(rows: ExplorerRow[], snap: FleetSnapshot, width: number): string[];
21
+ //# sourceMappingURL=navigator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"navigator.d.ts","sourceRoot":"","sources":["../src/navigator.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAY,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AACvE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AA+D3D,MAAM,WAAW,aAAa;IAC5B,8DAA8D;IAC9D,KAAK,EAAE,MAAM,CAAC;IACd;;2EAEuE;IACvE,IAAI,EAAE,OAAO,EAAE,CAAC;CACjB;AA6BD;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,WAAW,EAAE,EACnB,IAAI,EAAE,aAAa,EACnB,KAAK,EAAE,MAAM,GACZ;IAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,KAAK,CAAC,aAAa,EAAE,GAAG,IAAI,CAAC,CAAA;CAAE,CAI5D;AAED,wDAAwD;AACxD,wBAAgB,eAAe,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAEjG"}
@@ -0,0 +1,168 @@
1
+ import { rowStatusGlyph } from "./topology/glyphs.js";
2
+ function parseKey(key) {
3
+ if (!key)
4
+ return null;
5
+ const at = key.indexOf(":");
6
+ if (at < 0)
7
+ return null;
8
+ return { kind: key.slice(0, at), parts: key.slice(at + 1).split("/") };
9
+ }
10
+ function keyDepth(row) {
11
+ const parsed = parseKey(row.key);
12
+ if (!parsed)
13
+ return -1; // keyless rows (filter, needs items) keep their label
14
+ switch (parsed.kind) {
15
+ case "section":
16
+ return 0;
17
+ case "host":
18
+ case "specs-kind":
19
+ return 1;
20
+ case "rig":
21
+ case "folder":
22
+ return 2;
23
+ case "pod":
24
+ return 3;
25
+ case "spec":
26
+ // The row model's spec keys carry no parent relation (guard finding 2);
27
+ // the folder membership IS encoded in the shipped label indent — a
28
+ // foldered spec indents 6 spaces, a root spec 4 (state.ts) — so the
29
+ // child renders one level BELOW its folder, never as a sibling.
30
+ return /^ {6}/.test(row.label) ? 3 : 2;
31
+ case "agent":
32
+ return 4;
33
+ default:
34
+ return -1;
35
+ }
36
+ }
37
+ /** the label with its legacy indent + list glyph stripped; pod/folder rows
38
+ * keep their GENUINE ▾/▸ (they really collapse), hosts/rigs lose theirs */
39
+ function contentOf(row, parsed) {
40
+ const stripped = row.label.replace(/^\s+/, "");
41
+ if (parsed.kind === "host")
42
+ return `⊕ ${stripped.replace(/^▾ /, "")}`;
43
+ if (parsed.kind === "rig")
44
+ return `▦ ${stripped.replace(/^▾ /, "")}`; // round-3 rig glyph
45
+ if (parsed.kind === "pod")
46
+ return stripped.replace(/ \(\d+\)$/, ""); // count moves to meta
47
+ if (parsed.kind === "agent") {
48
+ // POD-RELATIVE display (guard-ruled; the nav-flow mockup's convention —
49
+ // "driver" under pod dev50): strip ONLY a confirmed `${pod}.` prefix so
50
+ // same-pod siblings stay visibly distinct at the fixed pane width; any
51
+ // non-prefixed served name displays unchanged (honest fallback). The FULL
52
+ // served identity always lives in the row key/action/selection/detail.
53
+ const pod = parsed.parts[2];
54
+ const name = parsed.parts.slice(3).join("/");
55
+ const display = pod && name.startsWith(`${pod}.`) ? name.slice(pod.length + 1) : name;
56
+ return stripped.replace(name, display);
57
+ }
58
+ return stripped;
59
+ }
60
+ function agentOf(parsed, snap) {
61
+ const [host, rig, pod, ...name] = parsed.parts;
62
+ return snap.hosts
63
+ .find((h) => h.name === host)?.rigs.find((r) => r.name === rig)
64
+ ?.pods.find((p) => p.name === pod)?.agents.find((a) => a.name === name.join("/")) ?? null;
65
+ }
66
+ function metaOf(row, snap) {
67
+ const parsed = parseKey(row.key);
68
+ if (!parsed)
69
+ return null;
70
+ if (parsed.kind === "agent") {
71
+ const agent = agentOf(parsed, snap);
72
+ if (!agent)
73
+ return null;
74
+ // ROUND-3 LOCKED: runtime marks are OFF explorer rows (detail + topology
75
+ // only; stacked rows too busy) — the meta is bare ctx%, honest — when
76
+ // unknown; spelled runtime stays dead; name-first-untruncated holds.
77
+ const value = agent.context == null ? "—" : `${agent.context}%`;
78
+ return { text: value, segs: [{ text: value, token: "dim" }] };
79
+ }
80
+ if (parsed.kind === "pod") {
81
+ const [host, rig, pod] = parsed.parts;
82
+ const found = snap.hosts.find((h) => h.name === host)?.rigs.find((r) => r.name === rig)?.pods.find((p) => p.name === pod);
83
+ return found ? { text: String(found.agents.length), segs: [{ text: String(found.agents.length), token: "dim" }] } : null;
84
+ }
85
+ return null;
86
+ }
87
+ /**
88
+ * Display rows for the explorer pane — labels plus the seg-run channel
89
+ * (same order/length as `rows`; each row carries 0..n paint runs).
90
+ */
91
+ export function navigatorDisplay(rows, snap, width) {
92
+ const metas = [];
93
+ const labels = navigatorLabelsInner(rows, snap, width, metas);
94
+ return { labels, metas };
95
+ }
96
+ /** compat view (tests/callers that only need labels) */
97
+ export function navigatorLabels(rows, snap, width) {
98
+ return navigatorDisplay(rows, snap, width).labels;
99
+ }
100
+ function navigatorLabelsInner(rows, snap, width, metasOut) {
101
+ const depths = rows.map((row) => keyDepth(row));
102
+ const isLast = rows.map((_, i) => {
103
+ const depth = depths[i];
104
+ if (depth <= 0)
105
+ return true;
106
+ for (let j = i + 1; j < rows.length; j++) {
107
+ const other = depths[j];
108
+ if (other < 0)
109
+ continue;
110
+ if (other < depth)
111
+ return true;
112
+ if (other === depth)
113
+ return false;
114
+ }
115
+ return true;
116
+ });
117
+ // The continuation rail is the mockup's literal │ (guard finding 4, locked
118
+ // glyph). The pane border is ALSO │ but lives at a FIXED column (EXPL_W) —
119
+ // the paint layer and floors locate it by that boundary, never by scanning
120
+ // for the first │ (which a rail would shadow).
121
+ const railOpen = []; // per depth level: does a later sibling exist?
122
+ return rows.map((row, i) => {
123
+ const depth = depths[i];
124
+ if (depth < 0) {
125
+ metasOut.push(null);
126
+ return row.label;
127
+ } // keyless rows untouched
128
+ if (depth === 0) {
129
+ metasOut.push(null);
130
+ return row.label;
131
+ } // section headers keep their ▾/▸ identity
132
+ railOpen[depth] = !isLast[i];
133
+ const guides = Array.from({ length: depth - 1 }, (_, level) => (railOpen[level + 1] ? "│ " : " ")).join("");
134
+ const branch = isLast[i] ? "└─ " : "├─ ";
135
+ const parsed = parseKey(row.key);
136
+ const content = contentOf(row, parsed);
137
+ const meta = metaOf(row, snap);
138
+ const prefix = ` ${guides}${branch}`;
139
+ // S19 round-4 (guard finding 4): agent rows carry a STATUS BADGE run so
140
+ // the served-truth glyph paints its activity ROLE (color is for status —
141
+ // the one colored thing on the row; non-status icons stay monochrome)
142
+ const runs = [];
143
+ if (parsed.kind === "agent") {
144
+ const agent = agentOf(parsed, snap);
145
+ if (agent) {
146
+ const st = rowStatusGlyph(agent);
147
+ runs.push({ start: prefix.length, segs: [{ text: st.glyph, token: st.token }] });
148
+ }
149
+ }
150
+ if (!meta) {
151
+ metasOut.push(runs.length ? runs : null);
152
+ return `${prefix}${content}`;
153
+ }
154
+ // S19 re-sealed width policy (guard NOT-CLEAR finding 1): the NAME renders
155
+ // FIRST and UNTRUNCATED — when the full name leaves no room, the META
156
+ // yields entirely (never an ellipsised identity).
157
+ const room = width - prefix.length - content.length - 1;
158
+ if (room < meta.text.length) {
159
+ metasOut.push(runs.length ? runs : null);
160
+ return `${prefix}${content}`;
161
+ }
162
+ const gap = Math.max(width - prefix.length - content.length - meta.text.length, 1);
163
+ runs.push({ start: prefix.length + content.length + gap, segs: meta.segs });
164
+ metasOut.push(runs);
165
+ return `${prefix}${content}${" ".repeat(gap)}${meta.text}`;
166
+ });
167
+ }
168
+ //# sourceMappingURL=navigator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"navigator.js","sourceRoot":"","sources":["../src/navigator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ /** Coalesce overlapping timer ticks onto the active refresh. */
2
+ export declare function singleFlight(task: () => Promise<void>): () => Promise<void>;
3
+ //# sourceMappingURL=refresh.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refresh.d.ts","sourceRoot":"","sources":["../src/refresh.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAM3E"}
@@ -0,0 +1,9 @@
1
+ /** Coalesce overlapping timer ticks onto the active refresh. */
2
+ export function singleFlight(task) {
3
+ let active = null;
4
+ return () => {
5
+ active ??= task().finally(() => { active = null; });
6
+ return active;
7
+ };
8
+ }
9
+ //# sourceMappingURL=refresh.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refresh.js","sourceRoot":"","sources":["../src/refresh.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,MAAM,UAAU,YAAY,CAAC,IAAyB;IACpD,IAAI,MAAM,GAAyB,IAAI,CAAC;IACxC,OAAO,GAAG,EAAE;QACV,MAAM,KAAK,IAAI,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACpD,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,21 @@
1
+ import type { ColorMode } from "./theme.js";
2
+ import type { FleetSnapshot, LoadState, RowFlash, Screen, ViewState } from "./types.js";
3
+ export interface RenderOptions {
4
+ cols?: number;
5
+ rows?: number;
6
+ /** wall-clock ms for time-driven motion (spinner frames, flash windows);
7
+ * renderScreen stays pure — the caller supplies time (round-4 wiring) */
8
+ nowMs?: number;
9
+ /** the active Style's color mode — picks braille vs line spinner frames */
10
+ colorMode?: ColorMode;
11
+ /** S19 round-5 (guard): the refresh owner's honest load lifecycle — the
12
+ * spinner renders ONLY while un-settled/in-flight; omitted = settled
13
+ * (demo/fixtures: the data given IS the answer, nothing is loading) */
14
+ load?: LoadState;
15
+ /** S19 round-5 (guard): per-seat fresh pane-output events from the refresh
16
+ * owner — renderScreen targets each agent's explorer row while its one-shot
17
+ * window is open; omitted = no flashes */
18
+ rowFlashes?: RowFlash[];
19
+ }
20
+ export declare function renderScreen(state: ViewState, snap: FleetSnapshot, options?: RenderOptions, inputLine?: string): Screen;
21
+ //# sourceMappingURL=render.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,OAAO,KAAK,EAAU,aAAa,EAAE,SAAS,EAAa,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AA+nB3G,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;6EACyE;IACzE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2EAA2E;IAC3E,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB;;2EAEuE;IACvE,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB;;8CAE0C;IAC1C,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC;CACzB;AA8CD,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,GAAE,aAAkB,EAAE,SAAS,SAAK,GAAG,MAAM,CAqJvH"}