@openrig/cli 0.4.8 → 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 (344) 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/mission-slice-sop/SKILL.md +7 -4
  4. package/daemon/assets/plugins/openrig-core/skills/openrig-user/SKILL.md +68 -17
  5. package/daemon/assets/plugins/openrig-core/skills/queue-handoff/SKILL.md +2 -0
  6. package/daemon/assets/plugins/openrig-core/skills/seat-continuity-and-handover/SKILL.md +2 -1
  7. package/daemon/assets/plugins/openrig-core/skills/session-compaction-and-restore/SKILL.md +1 -0
  8. package/daemon/dist/adapters/claude-code-adapter.d.ts +36 -0
  9. package/daemon/dist/adapters/claude-code-adapter.d.ts.map +1 -1
  10. package/daemon/dist/adapters/claude-code-adapter.js +203 -3
  11. package/daemon/dist/adapters/claude-code-adapter.js.map +1 -1
  12. package/daemon/dist/adapters/codex-runtime-adapter.d.ts +12 -0
  13. package/daemon/dist/adapters/codex-runtime-adapter.d.ts.map +1 -1
  14. package/daemon/dist/adapters/codex-runtime-adapter.js +24 -2
  15. package/daemon/dist/adapters/codex-runtime-adapter.js.map +1 -1
  16. package/daemon/dist/build-info.js +3 -3
  17. package/daemon/dist/domain/agent-activity-store.d.ts +1 -0
  18. package/daemon/dist/domain/agent-activity-store.d.ts.map +1 -1
  19. package/daemon/dist/domain/agent-activity-store.js +2 -2
  20. package/daemon/dist/domain/agent-activity-store.js.map +1 -1
  21. package/daemon/dist/domain/claude-activity-hooks.d.ts +33 -0
  22. package/daemon/dist/domain/claude-activity-hooks.d.ts.map +1 -0
  23. package/daemon/dist/domain/claude-activity-hooks.js +60 -0
  24. package/daemon/dist/domain/claude-activity-hooks.js.map +1 -0
  25. package/daemon/dist/domain/context-packs/bundle-assembler.d.ts +30 -0
  26. package/daemon/dist/domain/context-packs/bundle-assembler.d.ts.map +1 -1
  27. package/daemon/dist/domain/context-packs/bundle-assembler.js +31 -1
  28. package/daemon/dist/domain/context-packs/bundle-assembler.js.map +1 -1
  29. package/daemon/dist/domain/context-packs/context-pack-library-service.d.ts +69 -14
  30. package/daemon/dist/domain/context-packs/context-pack-library-service.d.ts.map +1 -1
  31. package/daemon/dist/domain/context-packs/context-pack-library-service.js +263 -48
  32. package/daemon/dist/domain/context-packs/context-pack-library-service.js.map +1 -1
  33. package/daemon/dist/domain/context-packs/context-pack-types.d.ts +2 -2
  34. package/daemon/dist/domain/context-packs/context-pack-types.d.ts.map +1 -1
  35. package/daemon/dist/domain/context-packs/context-pack-types.js.map +1 -1
  36. package/daemon/dist/domain/context-packs/manifest-parser.d.ts.map +1 -1
  37. package/daemon/dist/domain/context-packs/manifest-parser.js +11 -0
  38. package/daemon/dist/domain/context-packs/manifest-parser.js.map +1 -1
  39. package/daemon/dist/domain/context-packs/ref-safety.d.ts +11 -0
  40. package/daemon/dist/domain/context-packs/ref-safety.d.ts.map +1 -0
  41. package/daemon/dist/domain/context-packs/ref-safety.js +46 -0
  42. package/daemon/dist/domain/context-packs/ref-safety.js.map +1 -0
  43. package/daemon/dist/domain/context-packs/token-estimate.d.ts +3 -0
  44. package/daemon/dist/domain/context-packs/token-estimate.d.ts.map +1 -0
  45. package/daemon/dist/domain/context-packs/token-estimate.js +5 -0
  46. package/daemon/dist/domain/context-packs/token-estimate.js.map +1 -0
  47. package/daemon/dist/domain/plugin-vendor-service.d.ts +14 -0
  48. package/daemon/dist/domain/plugin-vendor-service.d.ts.map +1 -1
  49. package/daemon/dist/domain/plugin-vendor-service.js +26 -2
  50. package/daemon/dist/domain/plugin-vendor-service.js.map +1 -1
  51. package/daemon/dist/domain/provider/claude-usage-reader.d.ts +44 -0
  52. package/daemon/dist/domain/provider/claude-usage-reader.d.ts.map +1 -0
  53. package/daemon/dist/domain/provider/claude-usage-reader.js +112 -0
  54. package/daemon/dist/domain/provider/claude-usage-reader.js.map +1 -0
  55. package/daemon/dist/domain/provider/codex-auth-reader.d.ts +18 -0
  56. package/daemon/dist/domain/provider/codex-auth-reader.d.ts.map +1 -0
  57. package/daemon/dist/domain/provider/codex-auth-reader.js +64 -0
  58. package/daemon/dist/domain/provider/codex-auth-reader.js.map +1 -0
  59. package/daemon/dist/domain/provider/host-usage-rollup.d.ts +51 -0
  60. package/daemon/dist/domain/provider/host-usage-rollup.d.ts.map +1 -0
  61. package/daemon/dist/domain/provider/host-usage-rollup.js +162 -0
  62. package/daemon/dist/domain/provider/host-usage-rollup.js.map +1 -0
  63. package/daemon/dist/domain/provider/provider-collect.d.ts +22 -0
  64. package/daemon/dist/domain/provider/provider-collect.d.ts.map +1 -0
  65. package/daemon/dist/domain/provider/provider-collect.js +74 -0
  66. package/daemon/dist/domain/provider/provider-collect.js.map +1 -0
  67. package/daemon/dist/domain/provider/provider-policy.d.ts +38 -0
  68. package/daemon/dist/domain/provider/provider-policy.d.ts.map +1 -0
  69. package/daemon/dist/domain/provider/provider-policy.js +76 -0
  70. package/daemon/dist/domain/provider/provider-policy.js.map +1 -0
  71. package/daemon/dist/domain/provider/provider-read-model.d.ts +28 -0
  72. package/daemon/dist/domain/provider/provider-read-model.d.ts.map +1 -0
  73. package/daemon/dist/domain/provider/provider-read-model.js +68 -0
  74. package/daemon/dist/domain/provider/provider-read-model.js.map +1 -0
  75. package/daemon/dist/domain/provider/provider-service-impl.d.ts +26 -0
  76. package/daemon/dist/domain/provider/provider-service-impl.d.ts.map +1 -0
  77. package/daemon/dist/domain/provider/provider-service-impl.js +83 -0
  78. package/daemon/dist/domain/provider/provider-service-impl.js.map +1 -0
  79. package/daemon/dist/domain/provider/provider-service.d.ts +33 -0
  80. package/daemon/dist/domain/provider/provider-service.d.ts.map +1 -0
  81. package/daemon/dist/domain/provider/provider-service.js +6 -0
  82. package/daemon/dist/domain/provider/provider-service.js.map +1 -0
  83. package/daemon/dist/domain/provider/provider-signals.d.ts +76 -0
  84. package/daemon/dist/domain/provider/provider-signals.d.ts.map +1 -0
  85. package/daemon/dist/domain/provider/provider-signals.js +144 -0
  86. package/daemon/dist/domain/provider/provider-signals.js.map +1 -0
  87. package/daemon/dist/domain/provider/provider-types.d.ts +101 -0
  88. package/daemon/dist/domain/provider/provider-types.d.ts.map +1 -0
  89. package/daemon/dist/domain/provider/provider-types.js +7 -0
  90. package/daemon/dist/domain/provider/provider-types.js.map +1 -0
  91. package/daemon/dist/domain/provider/reactive-tap.d.ts +29 -0
  92. package/daemon/dist/domain/provider/reactive-tap.d.ts.map +1 -0
  93. package/daemon/dist/domain/provider/reactive-tap.js +80 -0
  94. package/daemon/dist/domain/provider/reactive-tap.js.map +1 -0
  95. package/daemon/dist/domain/rigspec-instantiator.d.ts +7 -23
  96. package/daemon/dist/domain/rigspec-instantiator.d.ts.map +1 -1
  97. package/daemon/dist/domain/rigspec-instantiator.js +3 -61
  98. package/daemon/dist/domain/rigspec-instantiator.js.map +1 -1
  99. package/daemon/dist/domain/rigspec-preflight.d.ts +11 -0
  100. package/daemon/dist/domain/rigspec-preflight.d.ts.map +1 -1
  101. package/daemon/dist/domain/rigspec-preflight.js +43 -1
  102. package/daemon/dist/domain/rigspec-preflight.js.map +1 -1
  103. package/daemon/dist/domain/runtime-adapter.d.ts +2 -11
  104. package/daemon/dist/domain/runtime-adapter.d.ts.map +1 -1
  105. package/daemon/dist/domain/runtime-adapter.js.map +1 -1
  106. package/daemon/dist/domain/scope/attestation-lineage.generated.d.ts +14 -0
  107. package/daemon/dist/domain/scope/attestation-lineage.generated.d.ts.map +1 -0
  108. package/daemon/dist/domain/scope/attestation-lineage.generated.js +26 -0
  109. package/daemon/dist/domain/scope/attestation-lineage.generated.js.map +1 -0
  110. package/daemon/dist/domain/scope/scope-approve.d.ts +13 -0
  111. package/daemon/dist/domain/scope/scope-approve.d.ts.map +1 -1
  112. package/daemon/dist/domain/scope/scope-approve.js +50 -10
  113. package/daemon/dist/domain/scope/scope-approve.js.map +1 -1
  114. package/daemon/dist/domain/startup-validation.d.ts.map +1 -1
  115. package/daemon/dist/domain/startup-validation.js +18 -54
  116. package/daemon/dist/domain/startup-validation.js.map +1 -1
  117. package/daemon/dist/domain/stream-store.d.ts +4 -0
  118. package/daemon/dist/domain/stream-store.d.ts.map +1 -1
  119. package/daemon/dist/domain/stream-store.js +15 -2
  120. package/daemon/dist/domain/stream-store.js.map +1 -1
  121. package/daemon/dist/domain/types.d.ts +2 -9
  122. package/daemon/dist/domain/types.d.ts.map +1 -1
  123. package/daemon/dist/domain/types.js.map +1 -1
  124. package/daemon/dist/domain/workspace/default-workspace-scaffold.js +1 -1
  125. package/daemon/dist/routes/context-packs.d.ts.map +1 -1
  126. package/daemon/dist/routes/context-packs.js +157 -75
  127. package/daemon/dist/routes/context-packs.js.map +1 -1
  128. package/daemon/dist/routes/provider.d.ts +3 -0
  129. package/daemon/dist/routes/provider.d.ts.map +1 -0
  130. package/daemon/dist/routes/provider.js +124 -0
  131. package/daemon/dist/routes/provider.js.map +1 -0
  132. package/daemon/dist/routes/scope-approve.d.ts.map +1 -1
  133. package/daemon/dist/routes/scope-approve.js +6 -3
  134. package/daemon/dist/routes/scope-approve.js.map +1 -1
  135. package/daemon/dist/routes/scope-audit.d.ts.map +1 -1
  136. package/daemon/dist/routes/scope-audit.js +4 -1
  137. package/daemon/dist/routes/scope-audit.js.map +1 -1
  138. package/daemon/dist/routes/stream.d.ts.map +1 -1
  139. package/daemon/dist/routes/stream.js +71 -1
  140. package/daemon/dist/routes/stream.js.map +1 -1
  141. package/daemon/dist/server.d.ts +3 -0
  142. package/daemon/dist/server.d.ts.map +1 -1
  143. package/daemon/dist/server.js +5 -0
  144. package/daemon/dist/server.js.map +1 -1
  145. package/daemon/dist/startup.d.ts.map +1 -1
  146. package/daemon/dist/startup.js +21 -11
  147. package/daemon/dist/startup.js.map +1 -1
  148. package/daemon/docs/reference/developing.md +39 -0
  149. package/daemon/specs/agents/apps/vault-specialist/agent.yaml +1 -1
  150. package/daemon/specs/agents/conveyor/builder/agent.yaml +1 -1
  151. package/daemon/specs/agents/conveyor/lead/agent.yaml +1 -1
  152. package/daemon/specs/agents/conveyor/planner/agent.yaml +1 -1
  153. package/daemon/specs/agents/conveyor/reviewer/agent.yaml +1 -1
  154. package/daemon/specs/agents/design/product-designer/agent.yaml +1 -1
  155. package/daemon/specs/agents/development/implementer/agent.yaml +1 -1
  156. package/daemon/specs/agents/development/qa/agent.yaml +1 -1
  157. package/daemon/specs/agents/factory-rsi/dogfood/agent.yaml +1 -1
  158. package/daemon/specs/agents/factory-rsi/release-manager/agent.yaml +1 -1
  159. package/daemon/specs/agents/orchestration/orchestrator/agent.yaml +1 -1
  160. package/daemon/specs/agents/product-management/pm/agent.yaml +1 -0
  161. package/daemon/specs/agents/research/analyst/agent.yaml +1 -1
  162. package/daemon/specs/agents/research/synthesizer/agent.yaml +1 -1
  163. package/daemon/specs/agents/review/independent-reviewer/agent.yaml +1 -1
  164. package/daemon/specs/agents/shared/agent.yaml +6 -0
  165. package/daemon/specs/agents/shared/runtime/claude-activity-hooks.json +4 -0
  166. package/daemon/specs/agents/shared/skills/core/watchdog/SKILL.md +1 -0
  167. package/dist/bin-wrapper.d.ts.map +1 -1
  168. package/dist/bin-wrapper.js +7 -0
  169. package/dist/bin-wrapper.js.map +1 -1
  170. package/dist/build-info.js +3 -3
  171. package/dist/commands/agent-image.d.ts.map +1 -1
  172. package/dist/commands/agent-image.js +2 -1
  173. package/dist/commands/agent-image.js.map +1 -1
  174. package/dist/commands/broadcast.d.ts.map +1 -1
  175. package/dist/commands/broadcast.js +37 -2
  176. package/dist/commands/broadcast.js.map +1 -1
  177. package/dist/commands/context.d.ts +2 -7
  178. package/dist/commands/context.d.ts.map +1 -1
  179. package/dist/commands/context.js +391 -213
  180. package/dist/commands/context.js.map +1 -1
  181. package/dist/commands/provider.d.ts +4 -0
  182. package/dist/commands/provider.d.ts.map +1 -0
  183. package/dist/commands/provider.js +218 -0
  184. package/dist/commands/provider.js.map +1 -0
  185. package/dist/commands/ps.d.ts +7 -0
  186. package/dist/commands/ps.d.ts.map +1 -1
  187. package/dist/commands/ps.js +34 -4
  188. package/dist/commands/ps.js.map +1 -1
  189. package/dist/commands/queue.d.ts.map +1 -1
  190. package/dist/commands/queue.js +38 -8
  191. package/dist/commands/queue.js.map +1 -1
  192. package/dist/commands/scope.d.ts.map +1 -1
  193. package/dist/commands/scope.js +48 -4
  194. package/dist/commands/scope.js.map +1 -1
  195. package/dist/commands/send.d.ts.map +1 -1
  196. package/dist/commands/send.js +70 -11
  197. package/dist/commands/send.js.map +1 -1
  198. package/dist/commands/stream.d.ts +1 -0
  199. package/dist/commands/stream.d.ts.map +1 -1
  200. package/dist/commands/stream.js +93 -0
  201. package/dist/commands/stream.js.map +1 -1
  202. package/dist/commands/tui.d.ts +4 -0
  203. package/dist/commands/tui.d.ts.map +1 -0
  204. package/dist/commands/tui.js +29 -0
  205. package/dist/commands/tui.js.map +1 -0
  206. package/dist/commands/walk.d.ts +19 -0
  207. package/dist/commands/walk.d.ts.map +1 -0
  208. package/dist/commands/walk.js +139 -0
  209. package/dist/commands/walk.js.map +1 -0
  210. package/dist/context-resolve.d.ts +14 -0
  211. package/dist/context-resolve.d.ts.map +1 -0
  212. package/dist/context-resolve.js +40 -0
  213. package/dist/context-resolve.js.map +1 -0
  214. package/dist/front-door.d.ts +31 -0
  215. package/dist/front-door.d.ts.map +1 -0
  216. package/dist/front-door.js +114 -0
  217. package/dist/front-door.js.map +1 -0
  218. package/dist/index.d.ts +3 -1
  219. package/dist/index.d.ts.map +1 -1
  220. package/dist/index.js +19 -6
  221. package/dist/index.js.map +1 -1
  222. package/dist/lib/scope/attestation-lineage.d.ts +14 -0
  223. package/dist/lib/scope/attestation-lineage.d.ts.map +1 -0
  224. package/dist/lib/scope/attestation-lineage.js +34 -0
  225. package/dist/lib/scope/attestation-lineage.js.map +1 -0
  226. package/package.json +4 -2
  227. package/tui/dist/daemon-client.d.ts +56 -0
  228. package/tui/dist/daemon-client.d.ts.map +1 -0
  229. package/tui/dist/daemon-client.js +99 -0
  230. package/tui/dist/daemon-client.js.map +1 -0
  231. package/tui/dist/demo-data.d.ts +3 -0
  232. package/tui/dist/demo-data.d.ts.map +1 -0
  233. package/tui/dist/demo-data.js +52 -0
  234. package/tui/dist/demo-data.js.map +1 -0
  235. package/tui/dist/detail.d.ts +34 -0
  236. package/tui/dist/detail.d.ts.map +1 -0
  237. package/tui/dist/detail.js +47 -0
  238. package/tui/dist/detail.js.map +1 -0
  239. package/tui/dist/grammar.d.ts +3 -0
  240. package/tui/dist/grammar.d.ts.map +1 -0
  241. package/tui/dist/grammar.js +66 -0
  242. package/tui/dist/grammar.js.map +1 -0
  243. package/tui/dist/hydrate.d.ts +78 -0
  244. package/tui/dist/hydrate.d.ts.map +1 -0
  245. package/tui/dist/hydrate.js +294 -0
  246. package/tui/dist/hydrate.js.map +1 -0
  247. package/tui/dist/index.d.ts +12 -0
  248. package/tui/dist/index.d.ts.map +1 -0
  249. package/tui/dist/index.js +12 -0
  250. package/tui/dist/index.js.map +1 -0
  251. package/tui/dist/input.d.ts +21 -0
  252. package/tui/dist/input.d.ts.map +1 -0
  253. package/tui/dist/input.js +128 -0
  254. package/tui/dist/input.js.map +1 -0
  255. package/tui/dist/live.d.ts +20 -0
  256. package/tui/dist/live.d.ts.map +1 -0
  257. package/tui/dist/live.js +67 -0
  258. package/tui/dist/live.js.map +1 -0
  259. package/tui/dist/main.d.ts +3 -0
  260. package/tui/dist/main.d.ts.map +1 -0
  261. package/tui/dist/main.js +184 -0
  262. package/tui/dist/main.js.map +1 -0
  263. package/tui/dist/motion.d.ts +13 -0
  264. package/tui/dist/motion.d.ts.map +1 -0
  265. package/tui/dist/motion.js +31 -0
  266. package/tui/dist/motion.js.map +1 -0
  267. package/tui/dist/navigator.d.ts +21 -0
  268. package/tui/dist/navigator.d.ts.map +1 -0
  269. package/tui/dist/navigator.js +168 -0
  270. package/tui/dist/navigator.js.map +1 -0
  271. package/tui/dist/refresh.d.ts +3 -0
  272. package/tui/dist/refresh.d.ts.map +1 -0
  273. package/tui/dist/refresh.js +9 -0
  274. package/tui/dist/refresh.js.map +1 -0
  275. package/tui/dist/render.d.ts +21 -0
  276. package/tui/dist/render.d.ts.map +1 -0
  277. package/tui/dist/render.js +807 -0
  278. package/tui/dist/render.js.map +1 -0
  279. package/tui/dist/sections.d.ts +4 -0
  280. package/tui/dist/sections.d.ts.map +1 -0
  281. package/tui/dist/sections.js +19 -0
  282. package/tui/dist/sections.js.map +1 -0
  283. package/tui/dist/socket-server.d.ts +24 -0
  284. package/tui/dist/socket-server.d.ts.map +1 -0
  285. package/tui/dist/socket-server.js +85 -0
  286. package/tui/dist/socket-server.js.map +1 -0
  287. package/tui/dist/state.d.ts +51 -0
  288. package/tui/dist/state.d.ts.map +1 -0
  289. package/tui/dist/state.js +480 -0
  290. package/tui/dist/state.js.map +1 -0
  291. package/tui/dist/stylize.d.ts +4 -0
  292. package/tui/dist/stylize.d.ts.map +1 -0
  293. package/tui/dist/stylize.js +248 -0
  294. package/tui/dist/stylize.js.map +1 -0
  295. package/tui/dist/theme.d.ts +19 -0
  296. package/tui/dist/theme.d.ts.map +1 -0
  297. package/tui/dist/theme.js +86 -0
  298. package/tui/dist/theme.js.map +1 -0
  299. package/tui/dist/topology/canvas.d.ts +43 -0
  300. package/tui/dist/topology/canvas.d.ts.map +1 -0
  301. package/tui/dist/topology/canvas.js +131 -0
  302. package/tui/dist/topology/canvas.js.map +1 -0
  303. package/tui/dist/topology/fixture.d.ts +4 -0
  304. package/tui/dist/topology/fixture.d.ts.map +1 -0
  305. package/tui/dist/topology/fixture.js +71 -0
  306. package/tui/dist/topology/fixture.js.map +1 -0
  307. package/tui/dist/topology/glyphs.d.ts +21 -0
  308. package/tui/dist/topology/glyphs.d.ts.map +1 -0
  309. package/tui/dist/topology/glyphs.js +49 -0
  310. package/tui/dist/topology/glyphs.js.map +1 -0
  311. package/tui/dist/topology/graph-types.d.ts +39 -0
  312. package/tui/dist/topology/graph-types.d.ts.map +1 -0
  313. package/tui/dist/topology/graph-types.js +2 -0
  314. package/tui/dist/topology/graph-types.js.map +1 -0
  315. package/tui/dist/topology/layout.d.ts +52 -0
  316. package/tui/dist/topology/layout.d.ts.map +1 -0
  317. package/tui/dist/topology/layout.js +118 -0
  318. package/tui/dist/topology/layout.js.map +1 -0
  319. package/tui/dist/topology/render-graph.d.ts +8 -0
  320. package/tui/dist/topology/render-graph.d.ts.map +1 -0
  321. package/tui/dist/topology/render-graph.js +20 -0
  322. package/tui/dist/topology/render-graph.js.map +1 -0
  323. package/tui/dist/topology/runtime-marks.d.ts +53 -0
  324. package/tui/dist/topology/runtime-marks.d.ts.map +1 -0
  325. package/tui/dist/topology/runtime-marks.js +185 -0
  326. package/tui/dist/topology/runtime-marks.js.map +1 -0
  327. package/tui/dist/topology/styles/braille.d.ts +5 -0
  328. package/tui/dist/topology/styles/braille.d.ts.map +1 -0
  329. package/tui/dist/topology/styles/braille.js +84 -0
  330. package/tui/dist/topology/styles/braille.js.map +1 -0
  331. package/tui/dist/topology/styles/hatchet.d.ts +41 -0
  332. package/tui/dist/topology/styles/hatchet.d.ts.map +1 -0
  333. package/tui/dist/topology/styles/hatchet.js +146 -0
  334. package/tui/dist/topology/styles/hatchet.js.map +1 -0
  335. package/tui/dist/types.d.ts +362 -0
  336. package/tui/dist/types.d.ts.map +1 -0
  337. package/tui/dist/types.js +6 -0
  338. package/tui/dist/types.js.map +1 -0
  339. package/ui/dist/assets/{index-DkNi0RT8.js → index-Dv5VaLCN.js} +135 -135
  340. package/ui/dist/index.html +1 -1
  341. package/dist/commands/context-pack.d.ts +0 -4
  342. package/dist/commands/context-pack.d.ts.map +0 -1
  343. package/dist/commands/context-pack.js +0 -357
  344. package/dist/commands/context-pack.js.map +0 -1
@@ -0,0 +1,71 @@
1
+ export const FIXTURE_RIG_NAME = "openrig-build";
2
+ export function spikeFixtureGraph() {
3
+ return {
4
+ nodes: [
5
+ { id: "pod-01SPIKEORCH000000000000000", type: "podGroup", data: { logicalId: "orch", podNamespace: "orch", podLabel: "orch", runtime: null, model: null, status: null, nodeKind: "agent", startupStatus: null, contextUsedPercentage: null } },
6
+ { id: "pod-01SPIKEDEV0000000000000000", type: "podGroup", data: { logicalId: "dev", podNamespace: "dev", podLabel: "dev", runtime: null, model: null, status: null, nodeKind: "agent", startupStatus: null, contextUsedPercentage: null } },
7
+ { id: "pod-01SPIKEREVIEW00000000000000", type: "podGroup", data: { logicalId: "review", podNamespace: "review", podLabel: "review", runtime: null, model: null, status: null, nodeKind: "agent", startupStatus: null, contextUsedPercentage: null } },
8
+ {
9
+ id: "01SPIKENODELEAD00000000000",
10
+ type: "rigNode",
11
+ parentId: "pod-01SPIKEORCH000000000000000",
12
+ data: {
13
+ logicalId: "orch.lead", podNamespace: "orch", runtime: "claude-code", model: "claude",
14
+ status: "running", nodeKind: "agent", startupStatus: "ready", contextUsedPercentage: 18,
15
+ agentActivity: { state: "running" }, terminalActive: true, canonicalSessionName: "orch-lead@openrig-build",
16
+ },
17
+ },
18
+ {
19
+ id: "01SPIKENODEDRIVER000000000",
20
+ type: "rigNode",
21
+ parentId: "pod-01SPIKEDEV0000000000000000",
22
+ data: {
23
+ logicalId: "dev.driver", podNamespace: "dev", runtime: "claude-code", model: "claude",
24
+ status: "running", nodeKind: "agent", startupStatus: "ready", contextUsedPercentage: 24,
25
+ agentActivity: { state: "running" }, terminalActive: true, canonicalSessionName: "dev-driver@openrig-build",
26
+ },
27
+ },
28
+ {
29
+ id: "01SPIKENODEQA0000000000000",
30
+ type: "rigNode",
31
+ parentId: "pod-01SPIKEDEV0000000000000000",
32
+ data: {
33
+ // ◐ partial/% — the EXISTING amber-attention state with a served ctx%
34
+ logicalId: "dev.qa", podNamespace: "dev", runtime: "codex", model: "gpt",
35
+ status: "running", nodeKind: "agent", startupStatus: "attention_required", contextUsedPercentage: 63,
36
+ agentActivity: { state: "needs_input" }, terminalActive: false, canonicalSessionName: "dev-qa@openrig-build",
37
+ },
38
+ },
39
+ {
40
+ id: "01SPIKENODER1000000000000Z",
41
+ type: "rigNode",
42
+ parentId: "pod-01SPIKEREVIEW00000000000000",
43
+ data: {
44
+ // ○ honest-unknown — NO session, NO activity, NO ctx: the projection
45
+ // has no value, so the render must say so (never fabricate ●)
46
+ logicalId: "review.r1", podNamespace: "review", runtime: "codex", model: null,
47
+ status: null, nodeKind: "agent", startupStatus: null, contextUsedPercentage: null,
48
+ agentActivity: null, terminalActive: null, canonicalSessionName: null,
49
+ },
50
+ },
51
+ {
52
+ id: "01SPIKENODEVALID0000000000",
53
+ type: "rigNode",
54
+ parentId: "pod-01SPIKEREVIEW00000000000000",
55
+ data: {
56
+ // ✕ failed
57
+ logicalId: "review.validator", podNamespace: "review", runtime: "codex", model: "gpt",
58
+ status: "running", nodeKind: "agent", startupStatus: "failed", contextUsedPercentage: null,
59
+ agentActivity: null, terminalActive: false, canonicalSessionName: "review-validator@openrig-build",
60
+ },
61
+ },
62
+ ],
63
+ edges: [
64
+ { id: "01SPIKEEDGE1", source: "01SPIKENODELEAD00000000000", target: "01SPIKENODEDRIVER000000000", label: "delegates_to" },
65
+ { id: "01SPIKEEDGE2", source: "01SPIKENODELEAD00000000000", target: "01SPIKENODER1000000000000Z", label: "delegates_to" },
66
+ { id: "01SPIKEEDGE3", source: "01SPIKENODEDRIVER000000000", target: "01SPIKENODEQA0000000000000", label: "collaborates_with" },
67
+ { id: "01SPIKEEDGE4", source: "01SPIKENODER1000000000000Z", target: "01SPIKENODELEAD00000000000", label: "escalates_to" },
68
+ ],
69
+ };
70
+ }
71
+ //# sourceMappingURL=fixture.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fixture.js","sourceRoot":"","sources":["../../src/topology/fixture.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { Token } from "../theme.js";
2
+ import type { GraphNodeData } from "./graph-types.js";
3
+ export interface StatusGlyph {
4
+ glyph: "●" | "◐" | "○" | "✕";
5
+ token: Token;
6
+ /** ctx% overlay text ("63%") when the ◐ bucket has a served percentage */
7
+ overlay: string | null;
8
+ }
9
+ export declare function statusGlyph(data: GraphNodeData): StatusGlyph;
10
+ /** S19 round-4 (guard finding 4): the EXPLORER row's status glyph+role,
11
+ * folded from the SERVED AgentRow status vocabulary (hydrate.toAgentRow
12
+ * derives it verbatim from the projection: failed / attention_required /
13
+ * needs_input / active / idle / sessionStatus-or-"unknown"; the demo fixture
14
+ * additionally uses the legacy "needs-attention" spelling). Same honest
15
+ * 4-glyph vocabulary + activity roles as the topology statusGlyph — anything
16
+ * not positively known renders ○, never a fabricated ●. */
17
+ export declare function rowStatusGlyph(agent: {
18
+ status: string;
19
+ }): Pick<StatusGlyph, "glyph" | "token">;
20
+ export declare function edgeToken(kind: string): Token;
21
+ //# sourceMappingURL=glyphs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glyphs.d.ts","sourceRoot":"","sources":["../../src/topology/glyphs.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IAC7B,KAAK,EAAE,KAAK,CAAC;IACb,0EAA0E;IAC1E,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,aAAa,GAAG,WAAW,CAmB5D;AAED;;;;;;2DAM2D;AAC3D,wBAAgB,cAAc,CAAC,KAAK,EAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,WAAW,EAAE,OAAO,GAAG,OAAO,CAAC,CAQ9F;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAK7C"}
@@ -0,0 +1,49 @@
1
+ export function statusGlyph(data) {
2
+ const activity = data.agentActivity?.state;
3
+ if (data.startupStatus === "failed" || data.status === "failed" || data.status === "stopped")
4
+ return { glyph: "✕", token: "error", overlay: null };
5
+ if (data.startupStatus === "attention_required" || data.heldReason != null || activity === "needs_input")
6
+ return {
7
+ glyph: "◐",
8
+ token: "actAttention",
9
+ overlay: data.contextUsedPercentage != null ? `${Math.round(data.contextUsedPercentage)}%` : null,
10
+ };
11
+ if (data.startupStatus === "ready" && data.status === "running") {
12
+ // S19 MR3: ACTIVITY splits the ● bucket by color ROLE (glyph honesty
13
+ // unchanged) — actively-working vs idle are visibly distinct
14
+ const working = activity === "running" || data.terminalActive === true;
15
+ return { glyph: "●", token: working ? "actActive" : "actIdle", overlay: null };
16
+ }
17
+ // everything else — pending, queued, detached, no session — is the honest
18
+ // ○ bucket, rendered wherever the projection has no value (role: detached)
19
+ return { glyph: "○", token: "actDetached", overlay: null };
20
+ }
21
+ /** S19 round-4 (guard finding 4): the EXPLORER row's status glyph+role,
22
+ * folded from the SERVED AgentRow status vocabulary (hydrate.toAgentRow
23
+ * derives it verbatim from the projection: failed / attention_required /
24
+ * needs_input / active / idle / sessionStatus-or-"unknown"; the demo fixture
25
+ * additionally uses the legacy "needs-attention" spelling). Same honest
26
+ * 4-glyph vocabulary + activity roles as the topology statusGlyph — anything
27
+ * not positively known renders ○, never a fabricated ●. */
28
+ export function rowStatusGlyph(agent) {
29
+ const s = agent.status;
30
+ if (s === "failed")
31
+ return { glyph: "✕", token: "error" };
32
+ if (s === "attention_required" || s === "needs_input" || s === "needs-attention")
33
+ return { glyph: "◐", token: "actAttention" };
34
+ if (s === "active")
35
+ return { glyph: "●", token: "actActive" };
36
+ if (s === "idle")
37
+ return { glyph: "●", token: "actIdle" };
38
+ return { glyph: "○", token: "actDetached" };
39
+ }
40
+ export function edgeToken(kind) {
41
+ if (kind === "delegates_to")
42
+ return "accent";
43
+ if (kind === "collaborates_with")
44
+ return "ok";
45
+ if (kind === "escalates_to")
46
+ return "warn";
47
+ return "dim";
48
+ }
49
+ //# sourceMappingURL=glyphs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glyphs.js","sourceRoot":"","sources":["../../src/topology/glyphs.ts"],"names":[],"mappings":"AA+BA,MAAM,UAAU,WAAW,CAAC,IAAmB;IAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC;IAC3C,IAAI,IAAI,CAAC,aAAa,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;QAC1F,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IACvD,IAAI,IAAI,CAAC,aAAa,KAAK,oBAAoB,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,IAAI,QAAQ,KAAK,aAAa;QACtG,OAAO;YACL,KAAK,EAAE,GAAG;YACV,KAAK,EAAE,cAAc;YACrB,OAAO,EAAE,IAAI,CAAC,qBAAqB,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI;SAClG,CAAC;IACJ,IAAI,IAAI,CAAC,aAAa,KAAK,OAAO,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAChE,qEAAqE;QACrE,6DAA6D;QAC7D,MAAM,OAAO,GAAG,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC,cAAc,KAAK,IAAI,CAAC;QACvE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IACjF,CAAC;IACD,0EAA0E;IAC1E,2EAA2E;IAC3E,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC7D,CAAC;AAED;;;;;;2DAM2D;AAC3D,MAAM,UAAU,cAAc,CAAC,KAAyB;IACtD,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;IACvB,IAAI,CAAC,KAAK,QAAQ;QAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IAC1D,IAAI,CAAC,KAAK,oBAAoB,IAAI,CAAC,KAAK,aAAa,IAAI,CAAC,KAAK,iBAAiB;QAC9E,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;IAC/C,IAAI,CAAC,KAAK,QAAQ;QAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;IAC9D,IAAI,CAAC,KAAK,MAAM;QAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;IAC1D,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,IAAI,IAAI,KAAK,cAAc;QAAE,OAAO,QAAQ,CAAC;IAC7C,IAAI,IAAI,KAAK,mBAAmB;QAAE,OAAO,IAAI,CAAC;IAC9C,IAAI,IAAI,KAAK,cAAc;QAAE,OAAO,MAAM,CAAC;IAC3C,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,39 @@
1
+ export interface GraphNodeData {
2
+ logicalId: string;
3
+ podNamespace?: string | null;
4
+ podLabel?: string | null;
5
+ runtime: string | null;
6
+ model: string | null;
7
+ /** latest session status verbatim (null = no session) */
8
+ status: string | null;
9
+ nodeKind: "agent" | "infrastructure";
10
+ startupStatus: "pending" | "ready" | "attention_required" | "failed" | null;
11
+ contextUsedPercentage: number | null;
12
+ agentActivity?: {
13
+ state?: string;
14
+ } | null;
15
+ terminalActive?: boolean | null;
16
+ heldReason?: string | null;
17
+ canonicalSessionName?: string | null;
18
+ }
19
+ export interface GraphNode {
20
+ id: string;
21
+ /** "podGroup" (pod container) or "rigNode" (agent/infrastructure seat) */
22
+ type: string;
23
+ parentId?: string;
24
+ data: GraphNodeData;
25
+ }
26
+ export interface GraphEdge {
27
+ id: string;
28
+ /** node ids (NOT logicalIds) — join through GraphNode.id */
29
+ source: string;
30
+ target: string;
31
+ /** the served edge KIND string (e.g. delegates_to) — the daemon serializes
32
+ * it under `label`; the spike renders it as line COLOR, never as text */
33
+ label: string;
34
+ }
35
+ export interface RigGraph {
36
+ nodes: GraphNode[];
37
+ edges: GraphEdge[];
38
+ }
39
+ //# sourceMappingURL=graph-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph-types.d.ts","sourceRoot":"","sources":["../../src/topology/graph-types.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,yDAAyD;IACzD,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,OAAO,GAAG,gBAAgB,CAAC;IACrC,aAAa,EAAE,SAAS,GAAG,OAAO,GAAG,oBAAoB,GAAG,QAAQ,GAAG,IAAI,CAAC;IAC5E,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,aAAa,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC1C,cAAc,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAChC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,oBAAoB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACtC;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,0EAA0E;IAC1E,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,aAAa,CAAC;CACrB;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,4DAA4D;IAC5D,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf;6EACyE;IACzE,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,KAAK,EAAE,SAAS,EAAE,CAAC;CACpB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=graph-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph-types.js","sourceRoot":"","sources":["../../src/topology/graph-types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,52 @@
1
+ import type { GraphEdge, GraphNode, RigGraph } from "./graph-types.js";
2
+ import { type StatusGlyph } from "./glyphs.js";
3
+ export interface PlacedNode {
4
+ node: GraphNode;
5
+ glyph: StatusGlyph;
6
+ /** MEMBER-only display title (S19 MR1 — identity stays logicalId in every
7
+ * zone/action; this is display only) */
8
+ title: string;
9
+ /** `● member 63%` and `runtime · ctx%` — the info INSIDE the node */
10
+ nameLine: string;
11
+ metaLine: string;
12
+ x: number;
13
+ y: number;
14
+ w: number;
15
+ h: number;
16
+ }
17
+ export interface GraphContainer {
18
+ kind: "rig" | "pod";
19
+ name: string;
20
+ x: number;
21
+ y: number;
22
+ w: number;
23
+ h: number;
24
+ }
25
+ export interface GraphLayout {
26
+ placed: PlacedNode[];
27
+ byId: Map<string, PlacedNode>;
28
+ edges: GraphEdge[];
29
+ /** R2 HIGH-1: the LOCKED containment hierarchy — the rig container wraps
30
+ * pod containers, pod containers wrap their member agent boxes; renderers
31
+ * MUST draw them (agent-in-pod-in-rig is a visible contract, not metadata) */
32
+ containers: GraphContainer[];
33
+ width: number;
34
+ height: number;
35
+ /** MR8: true when the laid-out extent exceeds the viewport width — the
36
+ * renderer MUST show the honest clipped-content indicator */
37
+ clipped: boolean;
38
+ }
39
+ export declare function agentNodes(graph: RigGraph): GraphNode[];
40
+ export declare function nodeLines(node: GraphNode): {
41
+ glyph: StatusGlyph;
42
+ title: string;
43
+ nameLine: string;
44
+ metaLine: string;
45
+ };
46
+ /** R2 HIGH-1 layout: pods are the clustering unit — each pod is a container
47
+ * column holding its member agent boxes stacked vertically; pods order by the
48
+ * min delegation rank of their members (delegation still reads left→right);
49
+ * the rig container wraps everything. Ungrouped agents get a "(no pod)"
50
+ * cluster so nothing served is ever dropped. */
51
+ export declare function layoutGraph(graph: RigGraph, maxWidth: number, rigName?: string): GraphLayout;
52
+ //# sourceMappingURL=layout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../src/topology/layout.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAe,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAG5D,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,WAAW,CAAC;IACnB;4CACwC;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,sEAAsE;IACtE,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,KAAK,GAAG,KAAK,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAC9B,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB;;kFAE8E;IAC9E,UAAU,EAAE,cAAc,EAAE,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf;iEAC6D;IAC7D,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,QAAQ,GAAG,SAAS,EAAE,CAEvD;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,SAAS,GAAG;IAAE,KAAK,EAAE,WAAW,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAepH;AAsCD;;;;gDAIgD;AAChD,wBAAgB,WAAW,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,SAAK,GAAG,WAAW,CAwDxF"}
@@ -0,0 +1,118 @@
1
+ import { statusGlyph } from "./glyphs.js";
2
+ import { markText, runtimeMarkSegs } from "./runtime-marks.js";
3
+ export function agentNodes(graph) {
4
+ return graph.nodes.filter((n) => n.type === "rigNode" && n.data.nodeKind === "agent");
5
+ }
6
+ export function nodeLines(node) {
7
+ const glyph = statusGlyph(node.data);
8
+ const ctx = node.data.contextUsedPercentage;
9
+ // S19 MR1 (§A1): the pod is named ONCE — by its container tab. The card
10
+ // title is the MEMBER-only segment (a confirmed `${pod}.` prefix strips,
11
+ // the navigator's rule; non-prefixed names display unchanged) and the meta
12
+ // drops the pod suffix.
13
+ const pod = node.data.podNamespace;
14
+ const member = pod && node.data.logicalId.startsWith(`${pod}.`)
15
+ ? node.data.logicalId.slice(pod.length + 1)
16
+ : node.data.logicalId;
17
+ const nameLine = `${glyph.glyph} ${member}${glyph.overlay ? ` ${glyph.overlay}` : ""}`;
18
+ // S19 MR2: meta = web-family runtime MARK + adjacent ctx% (honest-unknown —)
19
+ const metaLine = `${markText(runtimeMarkSegs(node.data.runtime))} ${ctx == null ? "—" : `${Math.round(ctx)}%`}`;
20
+ return { glyph, title: member, nameLine, metaLine };
21
+ }
22
+ function rankNodes(agents, edges) {
23
+ const rank = new Map();
24
+ const delegates = edges.filter((e) => e.label === "delegates_to");
25
+ const hasIncoming = new Set(delegates.map((e) => e.target));
26
+ const roots = agents.filter((n) => !hasIncoming.has(n.id));
27
+ for (const root of roots)
28
+ rank.set(root.id, 0);
29
+ // relax delegation depth (fixture-scale graphs; bounded passes)
30
+ for (let pass = 0; pass < agents.length; pass++) {
31
+ let changed = false;
32
+ for (const e of delegates) {
33
+ const from = rank.get(e.source);
34
+ if (from == null)
35
+ continue;
36
+ const proposed = from + 1;
37
+ if ((rank.get(e.target) ?? -1) < proposed) {
38
+ rank.set(e.target, proposed);
39
+ changed = true;
40
+ }
41
+ }
42
+ if (!changed)
43
+ break;
44
+ }
45
+ // collaborators sit one column RIGHT of their partner (the mockup reading:
46
+ // lead → driver ═ qa) — applies to nodes that are not delegation targets
47
+ // themselves, even if the root-default provisionally ranked them 0
48
+ for (const e of edges.filter((x) => x.label === "collaborates_with")) {
49
+ const from = rank.get(e.source);
50
+ const targetIsDelegate = delegates.some((d) => d.target === e.target);
51
+ const targetDelegates = delegates.some((d) => d.source === e.target);
52
+ if (from != null && !targetIsDelegate && !targetDelegates)
53
+ rank.set(e.target, from + 1);
54
+ }
55
+ for (const n of agents)
56
+ if (!rank.has(n.id))
57
+ rank.set(n.id, 0);
58
+ return rank;
59
+ }
60
+ const POD_GAP = 4;
61
+ const MARGIN_X = 1;
62
+ /** R2 HIGH-1 layout: pods are the clustering unit — each pod is a container
63
+ * column holding its member agent boxes stacked vertically; pods order by the
64
+ * min delegation rank of their members (delegation still reads left→right);
65
+ * the rig container wraps everything. Ungrouped agents get a "(no pod)"
66
+ * cluster so nothing served is ever dropped. */
67
+ export function layoutGraph(graph, maxWidth, rigName = "") {
68
+ const agents = agentNodes(graph);
69
+ const rank = rankNodes(agents, graph.edges);
70
+ const podLabel = new Map(graph.nodes.filter((n) => n.type === "podGroup").map((n) => [n.id, n.data.podNamespace ?? n.data.logicalId]));
71
+ const pods = new Map();
72
+ for (const n of agents) {
73
+ const key = (n.parentId && podLabel.get(n.parentId)) ?? n.data.podNamespace ?? "(no pod)";
74
+ pods.set(key, [...(pods.get(key) ?? []), n]);
75
+ }
76
+ const podOrder = [...pods.entries()].sort(([an, a], [bn, b]) => {
77
+ const ar = Math.min(...a.map((n) => rank.get(n.id) ?? 0));
78
+ const br = Math.min(...b.map((n) => rank.get(n.id) ?? 0));
79
+ return ar - br || an.localeCompare(bn);
80
+ });
81
+ const placed = [];
82
+ const byId = new Map();
83
+ const containers = [];
84
+ const rigX = MARGIN_X;
85
+ const rigY = 1;
86
+ let podX = rigX + 2;
87
+ let maxPodBottom = 0;
88
+ for (const [podName, members] of podOrder) {
89
+ const sorted = [...members].sort((a, b) => (rank.get(a.id) ?? 0) - (rank.get(b.id) ?? 0) || a.data.logicalId.localeCompare(b.data.logicalId));
90
+ const podTop = rigY + 1;
91
+ let y = podTop + 1;
92
+ let podInnerW = Math.max(`▾ ${podName}`.length + 2, 8);
93
+ for (const node of sorted) {
94
+ const { glyph, title, nameLine, metaLine } = nodeLines(node);
95
+ const w = Math.max(nameLine.length, metaLine.length) + 4;
96
+ const p = { node, glyph, title, nameLine, metaLine, x: podX + 2, y, w, h: 4 };
97
+ placed.push(p);
98
+ byId.set(node.id, p);
99
+ y += p.h + 1;
100
+ podInnerW = Math.max(podInnerW, w);
101
+ }
102
+ const podW = podInnerW + 4;
103
+ const podH = y - podTop + 1;
104
+ containers.push({ kind: "pod", name: podName, x: podX, y: podTop, w: podW, h: podH });
105
+ maxPodBottom = Math.max(maxPodBottom, podTop + podH);
106
+ podX += podW + POD_GAP;
107
+ }
108
+ const rigW = podX - POD_GAP + 2 - rigX;
109
+ // two spare interior rows: the escalation under-route corridor (lanes 0-1)
110
+ // must never land on the rig's own bottom border
111
+ const rigH = maxPodBottom - rigY + 4;
112
+ containers.unshift({ kind: "rig", name: rigName, x: rigX, y: rigY, w: rigW, h: rigH });
113
+ const trueWidth = rigX + rigW + MARGIN_X;
114
+ const width = Math.min(trueWidth, maxWidth);
115
+ const height = rigY + rigH + 1;
116
+ return { placed, byId, edges: graph.edges, containers, width, height, clipped: trueWidth > maxWidth };
117
+ }
118
+ //# sourceMappingURL=layout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout.js","sourceRoot":"","sources":["../../src/topology/layout.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { GraphCanvas } from "./canvas.js";
2
+ import { type StyleContext } from "./styles/hatchet.js";
3
+ import type { RigGraph } from "./graph-types.js";
4
+ export declare const GRAPH_STYLE_NAMES: readonly ["hatchet", "braille", "braille-fallback"];
5
+ export type GraphStyle = (typeof GRAPH_STYLE_NAMES)[number];
6
+ export declare function isGraphStyle(value: string): value is GraphStyle;
7
+ export declare function renderGraphStyle(style: string, graph: RigGraph, ctx: StyleContext, width: number): GraphCanvas;
8
+ //# sourceMappingURL=render-graph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-graph.d.ts","sourceRoot":"","sources":["../../src/topology/render-graph.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,EAAiB,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEvE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEjD,eAAO,MAAM,iBAAiB,qDAAsD,CAAC;AACrF,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE5D,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,UAAU,CAE/D;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,GAAG,WAAW,CAW9G"}
@@ -0,0 +1,20 @@
1
+ import { layoutGraph } from "./layout.js";
2
+ import { renderHatchet } from "./styles/hatchet.js";
3
+ import { renderBraille } from "./styles/braille.js";
4
+ export const GRAPH_STYLE_NAMES = ["hatchet", "braille", "braille-fallback"];
5
+ export function isGraphStyle(value) {
6
+ return GRAPH_STYLE_NAMES.includes(value);
7
+ }
8
+ export function renderGraphStyle(style, graph, ctx, width) {
9
+ switch (style) {
10
+ case "braille":
11
+ return renderBraille(layoutGraph(graph, width, ctx.rig), ctx, width, false);
12
+ case "braille-fallback":
13
+ return renderBraille(layoutGraph(graph, width, ctx.rig), ctx, width, true);
14
+ default:
15
+ // hatchet is the mainline AND the unknown-style safety floor — the
16
+ // reducer already rejects unknown names before render (one surface)
17
+ return renderHatchet(layoutGraph(graph, width, ctx.rig), ctx, width);
18
+ }
19
+ }
20
+ //# sourceMappingURL=render-graph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-graph.js","sourceRoot":"","sources":["../../src/topology/render-graph.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAqB,MAAM,qBAAqB,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGpD,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,kBAAkB,CAAU,CAAC;AAGrF,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,OAAQ,iBAAuC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAa,EAAE,KAAe,EAAE,GAAiB,EAAE,KAAa;IAC/F,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,SAAS;YACZ,OAAO,aAAa,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QAC9E,KAAK,kBAAkB;YACrB,OAAO,aAAa,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QAC7E;YACE,mEAAmE;YACnE,oEAAoE;YACpE,OAAO,aAAa,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;IACzE,CAAC;AACH,CAAC"}
@@ -0,0 +1,53 @@
1
+ import type { Token } from "../theme.js";
2
+ export type ClawdPixel = 0 | 1 | 2;
3
+ /** the 16x16 pixel matrix, derived from the rect list (row-major) */
4
+ export declare function clawdGrid(): ClawdPixel[][];
5
+ export interface MarkSeg {
6
+ text: string;
7
+ token?: Token;
8
+ bold?: boolean;
9
+ /** background token for half/quadrant cells whose lower/other half differs */
10
+ bg?: Token;
11
+ }
12
+ /** FAITHFUL form — 16 cells x 8 rows of half-blocks (▀ paints the top pixel
13
+ * with fg and the bottom with bg): the detail-pane / prototype scale. */
14
+ export declare function clawdFaithfulRows(): MarkSeg[][];
15
+ export declare function clawdDownsample(cols: number, rows: number): MarkSeg[][];
16
+ /** FOUNDER ROUND-2 DESIGN (2026-08-04 via pm-lead): the row mark is a flat
17
+ * claude-terracotta BLOCK with two short dark vertical eye bars centered —
18
+ * no limbs/legs; color + face ARE the mark at 2-cell size. Exact source
19
+ * values: body #ad6755, eyes #181818 (RuntimeMark.tsx). */
20
+ export declare function clawdFounderMark(): MarkSeg[];
21
+ /** PICKS-V4 clawd row mark (founder amendment, PICKS-OF-RECORD sha256-16
22
+ * 14afeb74, 2026-08-04 — a bounded refinement INSIDE the locked square-with-
23
+ * eyes direction): the eyes are literally the characters `><` — left eye `>`,
24
+ * right eye `<`, pointing INWARD, squinty (reference image-cache 102).
25
+ * Founder rationale verbatim: eyes at the far edges do not read as eyes;
26
+ * inward angle brackets make it read as a FACE. Dark #181818 eyes ON the
27
+ * #ad6755 terracotta field, unchanged. (Lineage: round-4 shipped the ▘▝
28
+ * outer-quadrant pair; superseded by this amendment.) */
29
+ export declare function clawdSquareMark(): MarkSeg[];
30
+ /** ROUND-3 codex blue-hint CANDIDATES — PICKED at picks v4 (14afeb74):
31
+ * CHEVRON-ONLY, on detail/topology surfaces only (founder delegated; pm-lead
32
+ * ruled the most restrained option). codexMark() below now ships the chevron
33
+ * form; this record keeps the presented variants for decision lineage. Each
34
+ * variant uses the OFFICIAL sampled #6867aa (token codexBlue), never a
35
+ * remembered value. */
36
+ export declare function codexHintVariants(): Record<"chevron" | "outline" | "none", MarkSeg[]>;
37
+ /** row-mark CANDIDATES for the mr7 pick — both are downsample outputs */
38
+ export declare function clawdMiniA(): MarkSeg[];
39
+ export declare function clawdMiniB(): MarkSeg[];
40
+ /** Codex: the `>_` prompt mark with the PICKS-V4 CHEVRON-ONLY blue hint
41
+ * (item a, 14afeb74): the `>` carries the OFFICIAL sampled #6867aa; the `_`
42
+ * stays light ink. Text stays exactly ASCII `>_` (web-identity: the SAME
43
+ * mark, not a cousin; ❯ remains vetoed). This mark renders on detail +
44
+ * topology surfaces only — the explorer carries no marks (locked). */
45
+ export declare function codexMark(): MarkSeg[];
46
+ /** terminal/tty runtime: dark cell + white `>_` — same family, inverted. */
47
+ export declare function terminalMark(): MarkSeg[];
48
+ /** the row-scale mark for a served runtime string (placeholder-safe default:
49
+ * miniA for claude until the founder pick lands — swap point, one site) */
50
+ export declare function runtimeMarkSegs(runtime: string | null | undefined): MarkSeg[];
51
+ /** plain-text width of a mark (all marks are single-cell glyphs) */
52
+ export declare function markText(segs: MarkSeg[]): string;
53
+ //# sourceMappingURL=runtime-marks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-marks.d.ts","sourceRoot":"","sources":["../../src/topology/runtime-marks.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAgBzC,MAAM,MAAM,UAAU,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAEnC,qEAAqE;AACrE,wBAAgB,SAAS,IAAI,UAAU,EAAE,EAAE,CAO1C;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,8EAA8E;IAC9E,EAAE,CAAC,EAAE,KAAK,CAAC;CACZ;AAED;yEACyE;AACzE,wBAAgB,iBAAiB,IAAI,OAAO,EAAE,EAAE,CAkB/C;AAcD,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,EAAE,EAAE,CA+BvE;AAED;;;2DAG2D;AAC3D,wBAAgB,gBAAgB,IAAI,OAAO,EAAE,CAO5C;AAED;;;;;;;yDAOyD;AACzD,wBAAgB,eAAe,IAAI,OAAO,EAAE,CAK3C;AAED;;;;;uBAKuB;AACvB,wBAAgB,iBAAiB,IAAI,MAAM,CAAC,SAAS,GAAG,SAAS,GAAG,MAAM,EAAE,OAAO,EAAE,CAAC,CAcrF;AAED,yEAAyE;AACzE,wBAAgB,UAAU,IAAI,OAAO,EAAE,CAEtC;AAED,wBAAgB,UAAU,IAAI,OAAO,EAAE,CAEtC;AAED;;;;sEAIsE;AACtE,wBAAgB,SAAS,IAAI,OAAO,EAAE,CAKrC;AAED,4EAA4E;AAC5E,wBAAgB,YAAY,IAAI,OAAO,EAAE,CAKxC;AAED;2EAC2E;AAC3E,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,EAAE,CAO7E;AAED,oEAAoE;AACpE,wBAAgB,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,CAEhD"}