poly-weaver 0.2.5

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 (365) hide show
  1. package/README.md +388 -0
  2. package/dist/agents/implementors/adapter.d.ts +18 -0
  3. package/dist/agents/implementors/adapter.d.ts.map +1 -0
  4. package/dist/agents/implementors/adapter.js +36 -0
  5. package/dist/agents/implementors/adapter.js.map +1 -0
  6. package/dist/agents/implementors/dsl.d.ts +11 -0
  7. package/dist/agents/implementors/dsl.d.ts.map +1 -0
  8. package/dist/agents/implementors/dsl.js +9 -0
  9. package/dist/agents/implementors/dsl.js.map +1 -0
  10. package/dist/agents/implementors/handler.d.ts +10 -0
  11. package/dist/agents/implementors/handler.d.ts.map +1 -0
  12. package/dist/agents/implementors/handler.js +55 -0
  13. package/dist/agents/implementors/handler.js.map +1 -0
  14. package/dist/agents/implementors/index.d.ts +10 -0
  15. package/dist/agents/implementors/index.d.ts.map +1 -0
  16. package/dist/agents/implementors/index.js +21 -0
  17. package/dist/agents/implementors/index.js.map +1 -0
  18. package/dist/agents/implementors/prompts.d.ts +20 -0
  19. package/dist/agents/implementors/prompts.d.ts.map +1 -0
  20. package/dist/agents/implementors/prompts.js +72 -0
  21. package/dist/agents/implementors/prompts.js.map +1 -0
  22. package/dist/agents/implementors/types.d.ts +24 -0
  23. package/dist/agents/implementors/types.d.ts.map +1 -0
  24. package/dist/agents/implementors/types.js +2 -0
  25. package/dist/agents/implementors/types.js.map +1 -0
  26. package/dist/agents/index.d.ts +12 -0
  27. package/dist/agents/index.d.ts.map +1 -0
  28. package/dist/agents/index.js +25 -0
  29. package/dist/agents/index.js.map +1 -0
  30. package/dist/agents/planners/adapter.d.ts +22 -0
  31. package/dist/agents/planners/adapter.d.ts.map +1 -0
  32. package/dist/agents/planners/adapter.js +67 -0
  33. package/dist/agents/planners/adapter.js.map +1 -0
  34. package/dist/agents/planners/dsl.d.ts +13 -0
  35. package/dist/agents/planners/dsl.d.ts.map +1 -0
  36. package/dist/agents/planners/dsl.js +9 -0
  37. package/dist/agents/planners/dsl.js.map +1 -0
  38. package/dist/agents/planners/handler.d.ts +9 -0
  39. package/dist/agents/planners/handler.d.ts.map +1 -0
  40. package/dist/agents/planners/handler.js +86 -0
  41. package/dist/agents/planners/handler.js.map +1 -0
  42. package/dist/agents/planners/index.d.ts +10 -0
  43. package/dist/agents/planners/index.d.ts.map +1 -0
  44. package/dist/agents/planners/index.js +21 -0
  45. package/dist/agents/planners/index.js.map +1 -0
  46. package/dist/agents/planners/prompts.d.ts +30 -0
  47. package/dist/agents/planners/prompts.d.ts.map +1 -0
  48. package/dist/agents/planners/prompts.js +153 -0
  49. package/dist/agents/planners/prompts.js.map +1 -0
  50. package/dist/agents/planners/types.d.ts +37 -0
  51. package/dist/agents/planners/types.d.ts.map +1 -0
  52. package/dist/agents/planners/types.js +2 -0
  53. package/dist/agents/planners/types.js.map +1 -0
  54. package/dist/agents/registry.d.ts +29 -0
  55. package/dist/agents/registry.d.ts.map +1 -0
  56. package/dist/agents/registry.js +44 -0
  57. package/dist/agents/registry.js.map +1 -0
  58. package/dist/agents/reviewers/adapter.d.ts +10 -0
  59. package/dist/agents/reviewers/adapter.d.ts.map +1 -0
  60. package/dist/agents/reviewers/adapter.js +35 -0
  61. package/dist/agents/reviewers/adapter.js.map +1 -0
  62. package/dist/agents/reviewers/dsl.d.ts +12 -0
  63. package/dist/agents/reviewers/dsl.d.ts.map +1 -0
  64. package/dist/agents/reviewers/dsl.js +9 -0
  65. package/dist/agents/reviewers/dsl.js.map +1 -0
  66. package/dist/agents/reviewers/handler.d.ts +8 -0
  67. package/dist/agents/reviewers/handler.d.ts.map +1 -0
  68. package/dist/agents/reviewers/handler.js +48 -0
  69. package/dist/agents/reviewers/handler.js.map +1 -0
  70. package/dist/agents/reviewers/index.d.ts +10 -0
  71. package/dist/agents/reviewers/index.d.ts.map +1 -0
  72. package/dist/agents/reviewers/index.js +33 -0
  73. package/dist/agents/reviewers/index.js.map +1 -0
  74. package/dist/agents/reviewers/prompts.d.ts +25 -0
  75. package/dist/agents/reviewers/prompts.d.ts.map +1 -0
  76. package/dist/agents/reviewers/prompts.js +143 -0
  77. package/dist/agents/reviewers/prompts.js.map +1 -0
  78. package/dist/agents/reviewers/types.d.ts +35 -0
  79. package/dist/agents/reviewers/types.d.ts.map +1 -0
  80. package/dist/agents/reviewers/types.js +10 -0
  81. package/dist/agents/reviewers/types.js.map +1 -0
  82. package/dist/agents/runner.d.ts +62 -0
  83. package/dist/agents/runner.d.ts.map +1 -0
  84. package/dist/agents/runner.js +136 -0
  85. package/dist/agents/runner.js.map +1 -0
  86. package/dist/agents/simplifiers/adapter.d.ts +12 -0
  87. package/dist/agents/simplifiers/adapter.d.ts.map +1 -0
  88. package/dist/agents/simplifiers/adapter.js +27 -0
  89. package/dist/agents/simplifiers/adapter.js.map +1 -0
  90. package/dist/agents/simplifiers/dsl.d.ts +11 -0
  91. package/dist/agents/simplifiers/dsl.d.ts.map +1 -0
  92. package/dist/agents/simplifiers/dsl.js +9 -0
  93. package/dist/agents/simplifiers/dsl.js.map +1 -0
  94. package/dist/agents/simplifiers/handler.d.ts +9 -0
  95. package/dist/agents/simplifiers/handler.d.ts.map +1 -0
  96. package/dist/agents/simplifiers/handler.js +39 -0
  97. package/dist/agents/simplifiers/handler.js.map +1 -0
  98. package/dist/agents/simplifiers/index.d.ts +10 -0
  99. package/dist/agents/simplifiers/index.d.ts.map +1 -0
  100. package/dist/agents/simplifiers/index.js +20 -0
  101. package/dist/agents/simplifiers/index.js.map +1 -0
  102. package/dist/agents/simplifiers/prompts.d.ts +11 -0
  103. package/dist/agents/simplifiers/prompts.d.ts.map +1 -0
  104. package/dist/agents/simplifiers/prompts.js +24 -0
  105. package/dist/agents/simplifiers/prompts.js.map +1 -0
  106. package/dist/agents/simplifiers/types.d.ts +15 -0
  107. package/dist/agents/simplifiers/types.d.ts.map +1 -0
  108. package/dist/agents/simplifiers/types.js +2 -0
  109. package/dist/agents/simplifiers/types.js.map +1 -0
  110. package/dist/agents/whip-hint.d.ts +23 -0
  111. package/dist/agents/whip-hint.d.ts.map +1 -0
  112. package/dist/agents/whip-hint.js +41 -0
  113. package/dist/agents/whip-hint.js.map +1 -0
  114. package/dist/ansi.d.ts +39 -0
  115. package/dist/ansi.d.ts.map +1 -0
  116. package/dist/ansi.js +158 -0
  117. package/dist/ansi.js.map +1 -0
  118. package/dist/cli.d.ts +3 -0
  119. package/dist/cli.d.ts.map +1 -0
  120. package/dist/cli.js +309 -0
  121. package/dist/cli.js.map +1 -0
  122. package/dist/config.d.ts +41 -0
  123. package/dist/config.d.ts.map +1 -0
  124. package/dist/config.js +55 -0
  125. package/dist/config.js.map +1 -0
  126. package/dist/dsl.d.ts +25 -0
  127. package/dist/dsl.d.ts.map +1 -0
  128. package/dist/dsl.js +16 -0
  129. package/dist/dsl.js.map +1 -0
  130. package/dist/flow/artifacts.d.ts +13 -0
  131. package/dist/flow/artifacts.d.ts.map +1 -0
  132. package/dist/flow/artifacts.js +27 -0
  133. package/dist/flow/artifacts.js.map +1 -0
  134. package/dist/flow/built-in/default.d.ts +15 -0
  135. package/dist/flow/built-in/default.d.ts.map +1 -0
  136. package/dist/flow/built-in/default.js +123 -0
  137. package/dist/flow/built-in/default.js.map +1 -0
  138. package/dist/flow/built-in/default.ts +152 -0
  139. package/dist/flow/built-in/why-so-serious.d.ts +15 -0
  140. package/dist/flow/built-in/why-so-serious.d.ts.map +1 -0
  141. package/dist/flow/built-in/why-so-serious.js +147 -0
  142. package/dist/flow/built-in/why-so-serious.js.map +1 -0
  143. package/dist/flow/custom/AUTHORING.md +558 -0
  144. package/dist/flow/custom/index.d.ts +3 -0
  145. package/dist/flow/custom/index.d.ts.map +1 -0
  146. package/dist/flow/custom/index.js +2 -0
  147. package/dist/flow/custom/index.js.map +1 -0
  148. package/dist/flow/custom/load.d.ts +19 -0
  149. package/dist/flow/custom/load.d.ts.map +1 -0
  150. package/dist/flow/custom/load.js +117 -0
  151. package/dist/flow/custom/load.js.map +1 -0
  152. package/dist/flow/diagram.d.ts +37 -0
  153. package/dist/flow/diagram.d.ts.map +1 -0
  154. package/dist/flow/diagram.js +596 -0
  155. package/dist/flow/diagram.js.map +1 -0
  156. package/dist/flow/dsl.d.ts +65 -0
  157. package/dist/flow/dsl.d.ts.map +1 -0
  158. package/dist/flow/dsl.js +210 -0
  159. package/dist/flow/dsl.js.map +1 -0
  160. package/dist/flow/executor.d.ts +22 -0
  161. package/dist/flow/executor.d.ts.map +1 -0
  162. package/dist/flow/executor.js +185 -0
  163. package/dist/flow/executor.js.map +1 -0
  164. package/dist/flow/index.d.ts +16 -0
  165. package/dist/flow/index.d.ts.map +1 -0
  166. package/dist/flow/index.js +12 -0
  167. package/dist/flow/index.js.map +1 -0
  168. package/dist/flow/inspect.d.ts +21 -0
  169. package/dist/flow/inspect.d.ts.map +1 -0
  170. package/dist/flow/inspect.js +54 -0
  171. package/dist/flow/inspect.js.map +1 -0
  172. package/dist/flow/neighbors.d.ts +10 -0
  173. package/dist/flow/neighbors.d.ts.map +1 -0
  174. package/dist/flow/neighbors.js +48 -0
  175. package/dist/flow/neighbors.js.map +1 -0
  176. package/dist/flow/params.d.ts +21 -0
  177. package/dist/flow/params.d.ts.map +1 -0
  178. package/dist/flow/params.js +44 -0
  179. package/dist/flow/params.js.map +1 -0
  180. package/dist/flow/types.d.ts +159 -0
  181. package/dist/flow/types.d.ts.map +1 -0
  182. package/dist/flow/types.js +33 -0
  183. package/dist/flow/types.js.map +1 -0
  184. package/dist/flow-editor/index.d.ts +9 -0
  185. package/dist/flow-editor/index.d.ts.map +1 -0
  186. package/dist/flow-editor/index.js +6 -0
  187. package/dist/flow-editor/index.js.map +1 -0
  188. package/dist/flow-editor/llm.d.ts +33 -0
  189. package/dist/flow-editor/llm.d.ts.map +1 -0
  190. package/dist/flow-editor/llm.js +137 -0
  191. package/dist/flow-editor/llm.js.map +1 -0
  192. package/dist/flow-editor/names.d.ts +5 -0
  193. package/dist/flow-editor/names.d.ts.map +1 -0
  194. package/dist/flow-editor/names.js +21 -0
  195. package/dist/flow-editor/names.js.map +1 -0
  196. package/dist/flow-editor/save.d.ts +59 -0
  197. package/dist/flow-editor/save.d.ts.map +1 -0
  198. package/dist/flow-editor/save.js +143 -0
  199. package/dist/flow-editor/save.js.map +1 -0
  200. package/dist/flow-editor/tui.d.ts +56 -0
  201. package/dist/flow-editor/tui.d.ts.map +1 -0
  202. package/dist/flow-editor/tui.js +628 -0
  203. package/dist/flow-editor/tui.js.map +1 -0
  204. package/dist/flow-editor/validate.d.ts +39 -0
  205. package/dist/flow-editor/validate.d.ts.map +1 -0
  206. package/dist/flow-editor/validate.js +192 -0
  207. package/dist/flow-editor/validate.js.map +1 -0
  208. package/dist/git-info.d.ts +6 -0
  209. package/dist/git-info.d.ts.map +1 -0
  210. package/dist/git-info.js +26 -0
  211. package/dist/git-info.js.map +1 -0
  212. package/dist/orchestrator.d.ts +55 -0
  213. package/dist/orchestrator.d.ts.map +1 -0
  214. package/dist/orchestrator.js +240 -0
  215. package/dist/orchestrator.js.map +1 -0
  216. package/dist/preflight.d.ts +30 -0
  217. package/dist/preflight.d.ts.map +1 -0
  218. package/dist/preflight.js +107 -0
  219. package/dist/preflight.js.map +1 -0
  220. package/dist/preview-panel.d.ts +87 -0
  221. package/dist/preview-panel.d.ts.map +1 -0
  222. package/dist/preview-panel.js +418 -0
  223. package/dist/preview-panel.js.map +1 -0
  224. package/dist/prompts.d.ts +34 -0
  225. package/dist/prompts.d.ts.map +1 -0
  226. package/dist/prompts.js +67 -0
  227. package/dist/prompts.js.map +1 -0
  228. package/dist/providers/base-completion.d.ts +56 -0
  229. package/dist/providers/base-completion.d.ts.map +1 -0
  230. package/dist/providers/base-completion.js +111 -0
  231. package/dist/providers/base-completion.js.map +1 -0
  232. package/dist/providers/claude/completion.d.ts +28 -0
  233. package/dist/providers/claude/completion.d.ts.map +1 -0
  234. package/dist/providers/claude/completion.js +103 -0
  235. package/dist/providers/claude/completion.js.map +1 -0
  236. package/dist/providers/claude/index.d.ts +2 -0
  237. package/dist/providers/claude/index.d.ts.map +1 -0
  238. package/dist/providers/claude/index.js +2 -0
  239. package/dist/providers/claude/index.js.map +1 -0
  240. package/dist/providers/claude/session.d.ts +55 -0
  241. package/dist/providers/claude/session.d.ts.map +1 -0
  242. package/dist/providers/claude/session.js +172 -0
  243. package/dist/providers/claude/session.js.map +1 -0
  244. package/dist/providers/claude/strategy.d.ts +14 -0
  245. package/dist/providers/claude/strategy.d.ts.map +1 -0
  246. package/dist/providers/claude/strategy.js +38 -0
  247. package/dist/providers/claude/strategy.js.map +1 -0
  248. package/dist/providers/codex/completion.d.ts +21 -0
  249. package/dist/providers/codex/completion.d.ts.map +1 -0
  250. package/dist/providers/codex/completion.js +63 -0
  251. package/dist/providers/codex/completion.js.map +1 -0
  252. package/dist/providers/codex/index.d.ts +2 -0
  253. package/dist/providers/codex/index.d.ts.map +1 -0
  254. package/dist/providers/codex/index.js +2 -0
  255. package/dist/providers/codex/index.js.map +1 -0
  256. package/dist/providers/codex/session.d.ts +46 -0
  257. package/dist/providers/codex/session.d.ts.map +1 -0
  258. package/dist/providers/codex/session.js +151 -0
  259. package/dist/providers/codex/session.js.map +1 -0
  260. package/dist/providers/codex/strategy.d.ts +14 -0
  261. package/dist/providers/codex/strategy.d.ts.map +1 -0
  262. package/dist/providers/codex/strategy.js +41 -0
  263. package/dist/providers/codex/strategy.js.map +1 -0
  264. package/dist/providers/copilot/completion.d.ts +22 -0
  265. package/dist/providers/copilot/completion.d.ts.map +1 -0
  266. package/dist/providers/copilot/completion.js +65 -0
  267. package/dist/providers/copilot/completion.js.map +1 -0
  268. package/dist/providers/copilot/index.d.ts +2 -0
  269. package/dist/providers/copilot/index.d.ts.map +1 -0
  270. package/dist/providers/copilot/index.js +2 -0
  271. package/dist/providers/copilot/index.js.map +1 -0
  272. package/dist/providers/copilot/session.d.ts +39 -0
  273. package/dist/providers/copilot/session.d.ts.map +1 -0
  274. package/dist/providers/copilot/session.js +185 -0
  275. package/dist/providers/copilot/session.js.map +1 -0
  276. package/dist/providers/copilot/strategy.d.ts +14 -0
  277. package/dist/providers/copilot/strategy.d.ts.map +1 -0
  278. package/dist/providers/copilot/strategy.js +48 -0
  279. package/dist/providers/copilot/strategy.js.map +1 -0
  280. package/dist/providers/index.d.ts +8 -0
  281. package/dist/providers/index.d.ts.map +1 -0
  282. package/dist/providers/index.js +6 -0
  283. package/dist/providers/index.js.map +1 -0
  284. package/dist/providers/invoke.d.ts +14 -0
  285. package/dist/providers/invoke.d.ts.map +1 -0
  286. package/dist/providers/invoke.js +55 -0
  287. package/dist/providers/invoke.js.map +1 -0
  288. package/dist/providers/path-utils.d.ts +7 -0
  289. package/dist/providers/path-utils.d.ts.map +1 -0
  290. package/dist/providers/path-utils.js +9 -0
  291. package/dist/providers/path-utils.js.map +1 -0
  292. package/dist/providers/prompt-file.d.ts +8 -0
  293. package/dist/providers/prompt-file.d.ts.map +1 -0
  294. package/dist/providers/prompt-file.js +17 -0
  295. package/dist/providers/prompt-file.js.map +1 -0
  296. package/dist/providers/registry.d.ts +17 -0
  297. package/dist/providers/registry.d.ts.map +1 -0
  298. package/dist/providers/registry.js +49 -0
  299. package/dist/providers/registry.js.map +1 -0
  300. package/dist/providers/types.d.ts +145 -0
  301. package/dist/providers/types.d.ts.map +1 -0
  302. package/dist/providers/types.js +5 -0
  303. package/dist/providers/types.js.map +1 -0
  304. package/dist/providers/version.d.ts +11 -0
  305. package/dist/providers/version.d.ts.map +1 -0
  306. package/dist/providers/version.js +31 -0
  307. package/dist/providers/version.js.map +1 -0
  308. package/dist/pty/exit.d.ts +12 -0
  309. package/dist/pty/exit.d.ts.map +1 -0
  310. package/dist/pty/exit.js +43 -0
  311. package/dist/pty/exit.js.map +1 -0
  312. package/dist/pty/spawn.d.ts +20 -0
  313. package/dist/pty/spawn.d.ts.map +1 -0
  314. package/dist/pty/spawn.js +163 -0
  315. package/dist/pty/spawn.js.map +1 -0
  316. package/dist/pty/types.d.ts +44 -0
  317. package/dist/pty/types.d.ts.map +1 -0
  318. package/dist/pty/types.js +2 -0
  319. package/dist/pty/types.js.map +1 -0
  320. package/dist/session/dir.d.ts +19 -0
  321. package/dist/session/dir.d.ts.map +1 -0
  322. package/dist/session/dir.js +31 -0
  323. package/dist/session/dir.js.map +1 -0
  324. package/dist/session/locator.d.ts +28 -0
  325. package/dist/session/locator.d.ts.map +1 -0
  326. package/dist/session/locator.js +88 -0
  327. package/dist/session/locator.js.map +1 -0
  328. package/dist/session/reader.d.ts +12 -0
  329. package/dist/session/reader.d.ts.map +1 -0
  330. package/dist/session/reader.js +94 -0
  331. package/dist/session/reader.js.map +1 -0
  332. package/dist/startup-tui.d.ts +75 -0
  333. package/dist/startup-tui.d.ts.map +1 -0
  334. package/dist/startup-tui.js +504 -0
  335. package/dist/startup-tui.js.map +1 -0
  336. package/dist/status-bar.d.ts +29 -0
  337. package/dist/status-bar.d.ts.map +1 -0
  338. package/dist/status-bar.js +135 -0
  339. package/dist/status-bar.js.map +1 -0
  340. package/dist/terminal-input.d.ts +51 -0
  341. package/dist/terminal-input.d.ts.map +1 -0
  342. package/dist/terminal-input.js +212 -0
  343. package/dist/terminal-input.js.map +1 -0
  344. package/dist/user/dsl.d.ts +13 -0
  345. package/dist/user/dsl.d.ts.map +1 -0
  346. package/dist/user/dsl.js +19 -0
  347. package/dist/user/dsl.js.map +1 -0
  348. package/dist/user/handler.d.ts +16 -0
  349. package/dist/user/handler.d.ts.map +1 -0
  350. package/dist/user/handler.js +49 -0
  351. package/dist/user/handler.js.map +1 -0
  352. package/dist/user/index.d.ts +5 -0
  353. package/dist/user/index.d.ts.map +1 -0
  354. package/dist/user/index.js +4 -0
  355. package/dist/user/index.js.map +1 -0
  356. package/dist/user/prompt.d.ts +86 -0
  357. package/dist/user/prompt.d.ts.map +1 -0
  358. package/dist/user/prompt.js +320 -0
  359. package/dist/user/prompt.js.map +1 -0
  360. package/dist/version.d.ts +2 -0
  361. package/dist/version.d.ts.map +1 -0
  362. package/dist/version.js +4 -0
  363. package/dist/version.js.map +1 -0
  364. package/package.json +50 -0
  365. package/schemas/review-verdict.json +41 -0
@@ -0,0 +1,596 @@
1
+ import { handlerKey } from "./types.js";
2
+ import { dim, cyan, green, reset, padToWidth, visibleLength } from "../ansi.js";
3
+ // ─── Minimum width guard ────────────────────────────────────────────
4
+ const MIN_WIDTH = 12;
5
+ // ─── Public API ─────────────────────────────────────────────────────
6
+ /**
7
+ * Compute the minimum visible width needed to render a flow without truncation.
8
+ * Walks the flow tree recursively. Result is clamped to >= MIN_WIDTH.
9
+ */
10
+ export function computeMinWidth(steps) {
11
+ return Math.max(rawMinWidth(steps), MIN_WIDTH);
12
+ }
13
+ /**
14
+ * Compute diagram line count without full rendering.
15
+ * Width-aware: returns 0 when width < 12. Threads width through
16
+ * recursive loop nesting — loops whose width would be < 12 are omitted.
17
+ * Guaranteed: diagramHeight(flow, w) === renderFlowDiagram(flow, w).length
18
+ */
19
+ export function diagramHeight(flow, width) {
20
+ if (width < MIN_WIDTH)
21
+ return 0;
22
+ return countLines(flow.steps, width);
23
+ }
24
+ /**
25
+ * Render the flow as an ASCII box-drawing diagram.
26
+ * Returns ANSI-colored lines, each with exactly `width` visible characters.
27
+ * Returns empty array if width < 12 (graceful degradation).
28
+ * Loop blocks whose recursive width falls below 12 are omitted.
29
+ */
30
+ export function renderFlowDiagram(flow, width) {
31
+ if (width < MIN_WIDTH)
32
+ return [];
33
+ const lines = [];
34
+ for (const step of flow.steps) {
35
+ lines.push(...renderBlock(step, width));
36
+ }
37
+ return lines;
38
+ }
39
+ // ─── Line counting ──────────────────────────────────────────────────
40
+ function countLines(steps, width) {
41
+ let count = 0;
42
+ for (const step of steps) {
43
+ if (step.type === "loop") {
44
+ if (width < MIN_WIDTH)
45
+ continue;
46
+ count += 2; // top + bottom border
47
+ count += countLines(step.steps, width - 6);
48
+ if (step.onExhausted) {
49
+ count += 2; // divider + user step
50
+ }
51
+ }
52
+ else {
53
+ count += 1;
54
+ }
55
+ }
56
+ return count;
57
+ }
58
+ // ─── Block rendering ────────────────────────────────────────────────
59
+ function renderBlock(step, width) {
60
+ if (step.type === "loop") {
61
+ if (width < MIN_WIDTH)
62
+ return [];
63
+ return renderLoopBlock(step, width);
64
+ }
65
+ return [renderStepLine(step, width)];
66
+ }
67
+ function renderLoopBlock(loop, width) {
68
+ const iterLabel = loop.maxIterations === Infinity ? "∞" : `×${loop.maxIterations}`;
69
+ const lines = [];
70
+ lines.push(topBorder(iterLabel, width, loop.untilLabel));
71
+ const innerWidth = width - 6;
72
+ for (const child of loop.steps) {
73
+ for (const line of renderBlock(child, innerWidth)) {
74
+ lines.push(wrapLine(line));
75
+ }
76
+ }
77
+ if (loop.onExhausted) {
78
+ lines.push(wrapLine(exhaustDivider(innerWidth)));
79
+ lines.push(wrapLine(renderStepLine(loop.onExhausted, innerWidth)));
80
+ }
81
+ lines.push(bottomBorder(width));
82
+ return lines;
83
+ }
84
+ // ─── Utility ─────────────────────────────────────────────────────────
85
+ /** Deduplicated values from a record. */
86
+ function uniqueValues(record) {
87
+ return [...new Set(Object.values(record))];
88
+ }
89
+ // ─── Annotation helpers ─────────────────────────────────────────────
90
+ /**
91
+ * Build plain-text annotation string for a step.
92
+ * Parts: `? {whenLabel}`, `⏎` (user breakOnAccept), `→ {writes}`.
93
+ * Parts are separated by 2 spaces. Returns "" if no annotations.
94
+ */
95
+ function stepAnnotation(step) {
96
+ const parts = [];
97
+ if (step.whenLabel)
98
+ parts.push(`? ${step.whenLabel}`);
99
+ if (step.type === "user" && step.breakOnAccept)
100
+ parts.push("⏎");
101
+ const writeValues = uniqueValues(step.writes);
102
+ if (writeValues.length > 0) {
103
+ parts.push(`→ ${writeValues.join(", ")}`);
104
+ }
105
+ return parts.join(" ");
106
+ }
107
+ // ─── Annotation coloring ────────────────────────────────────────────
108
+ function colorAnnotation(text) {
109
+ if (!text)
110
+ return "";
111
+ if (text.startsWith("? ")) {
112
+ // Find double-space separator that ends the when-part
113
+ const sepIdx = text.indexOf(" ", 2);
114
+ if (sepIdx === -1) {
115
+ // Entire text is within the when-label (possibly truncated with …)
116
+ return `${green}${text}${reset}`;
117
+ }
118
+ // When-part green, rest (⏎, → writes) dim
119
+ const whenPart = text.slice(0, sepIdx);
120
+ const rest = text.slice(sepIdx);
121
+ return `${green}${whenPart}${reset}${dim}${rest}${reset}`;
122
+ }
123
+ // No when-part; everything is dim (⏎ or → writes)
124
+ return `${dim}${text}${reset}`;
125
+ }
126
+ // ─── Step line rendering ────────────────────────────────────────────
127
+ function renderStepLine(step, width) {
128
+ if (step.type === "agent") {
129
+ return renderAgentLine(step, width);
130
+ }
131
+ return renderUserLine(step, width);
132
+ }
133
+ function renderAgentLine(step, width) {
134
+ const label = handlerKey(step);
135
+ const driver = step.driver;
136
+ const anno = stepAnnotation(step);
137
+ const labelW = visibleLength(label);
138
+ const driverW = visibleLength(driver);
139
+ // annoLen includes the 2-space separator from label
140
+ const annoW = anno ? 2 + visibleLength(anno) : 0;
141
+ // 1. Everything fits: ● {label} {anno} ...gap... {driver}
142
+ const fullNeeded = 2 + labelW + annoW + 2 + driverW;
143
+ if (fullNeeded <= width) {
144
+ const gap = width - 2 - labelW - annoW - driverW;
145
+ const annoStr = anno ? ` ${colorAnnotation(anno)}` : "";
146
+ return padToWidth(`${cyan}●${reset} ${label}${annoStr}${" ".repeat(gap)}${dim}${driver}${reset}`, width);
147
+ }
148
+ // 2. Truncate/drop annotation, keep label + driver
149
+ const baseNeeded = 2 + labelW + 2 + driverW;
150
+ if (baseNeeded <= width) {
151
+ const avail = width - baseNeeded;
152
+ // Need room for " " prefix + at least 2 chars of annotation
153
+ if (avail >= 4 && anno) {
154
+ const tAnno = truncate(anno, avail - 2);
155
+ const gap = width - 2 - labelW - 2 - visibleLength(tAnno) - driverW;
156
+ return padToWidth(`${cyan}●${reset} ${label} ${colorAnnotation(tAnno)}${" ".repeat(gap)}${dim}${driver}${reset}`, width);
157
+ }
158
+ // Drop annotation entirely
159
+ const gap = width - 2 - labelW - driverW;
160
+ return padToWidth(`${cyan}●${reset} ${label}${" ".repeat(gap)}${dim}${driver}${reset}`, width);
161
+ }
162
+ // 3. Truncate label, drop annotation
163
+ const maxLabel = width - 4 - driverW;
164
+ if (maxLabel >= 2) {
165
+ const tLabel = truncate(label, maxLabel);
166
+ const gap = width - 2 - visibleLength(tLabel) - driverW;
167
+ return padToWidth(`${cyan}●${reset} ${tLabel}${" ".repeat(gap)}${dim}${driver}${reset}`, width);
168
+ }
169
+ // 4. Combined truncation
170
+ const combined = truncate(`${label} ${driver}`, width - 2);
171
+ return padToWidth(`${cyan}●${reset} ${combined}`, width);
172
+ }
173
+ function userLabel(step) {
174
+ return step.id.startsWith("user-") ? step.id.slice(5) : step.id;
175
+ }
176
+ function renderUserLine(step, width) {
177
+ const label = userLabel(step);
178
+ const anno = stepAnnotation(step);
179
+ const labelW = visibleLength(label);
180
+ const annoW = anno ? 2 + visibleLength(anno) : 0;
181
+ const fullNeeded = 2 + labelW + annoW;
182
+ // 1. Everything fits: ○ {label} {anno}
183
+ if (fullNeeded <= width) {
184
+ const annoStr = anno ? ` ${colorAnnotation(anno)}` : "";
185
+ return padToWidth(`${cyan}○${reset} ${label}${annoStr}`, width);
186
+ }
187
+ // 2. Truncate annotation
188
+ const baseNeeded = 2 + labelW;
189
+ if (baseNeeded <= width) {
190
+ const avail = width - baseNeeded;
191
+ if (avail >= 4 && anno) {
192
+ const tAnno = truncate(anno, avail - 2);
193
+ return padToWidth(`${cyan}○${reset} ${label} ${colorAnnotation(tAnno)}`, width);
194
+ }
195
+ return padToWidth(`${cyan}○${reset} ${label}`, width);
196
+ }
197
+ // 3. Truncate label
198
+ const tLabel = truncate(label, width - 2);
199
+ return padToWidth(`${cyan}○${reset} ${tLabel}`, width);
200
+ }
201
+ // ─── Box drawing helpers ────────────────────────────────────────────
202
+ function topBorder(iterLabel, width, untilLabel) {
203
+ if (untilLabel) {
204
+ // ╭─ {iterLabel} .. {untilLabel} ──...──╮
205
+ const contentLen = 3 + visibleLength(iterLabel) + 4 + visibleLength(untilLabel) + 1;
206
+ const fill = width - contentLen - 1;
207
+ if (fill >= 0) {
208
+ return `${dim}╭─ ${reset}${iterLabel} ${green}.. ${untilLabel}${reset}${dim} ${"─".repeat(fill)}╮${reset}`;
209
+ }
210
+ // Fall through to no-label version if too tight
211
+ }
212
+ // ╭─ {iterLabel} ──...──╮
213
+ const prefixLen = 4 + visibleLength(iterLabel);
214
+ const fill = width - prefixLen - 1;
215
+ return `${dim}╭─ ${reset}${iterLabel}${dim} ${"─".repeat(Math.max(0, fill))}╮${reset}`;
216
+ }
217
+ function bottomBorder(width) {
218
+ return `${dim}╰${"─".repeat(width - 2)}╯${reset}`;
219
+ }
220
+ function exhaustDivider(width) {
221
+ const prefix = "┄┄ exhaust ";
222
+ const fill = width - prefix.length;
223
+ return `${dim}${prefix}${"┄".repeat(Math.max(0, fill))}${reset}`;
224
+ }
225
+ function wrapLine(inner) {
226
+ return `${dim}│${reset} ${inner} ${dim}│${reset}`;
227
+ }
228
+ function truncate(s, maxWidth) {
229
+ if (visibleLength(s) <= maxWidth)
230
+ return s;
231
+ let w = 0;
232
+ let result = "";
233
+ for (const ch of s) {
234
+ const cw = visibleLength(ch);
235
+ if (w + cw > maxWidth - 1)
236
+ break;
237
+ w += cw;
238
+ result += ch;
239
+ }
240
+ return result + "…";
241
+ }
242
+ // ═══ Detailed Diagram ════════════════════════════════════════════════
243
+ const MIN_DETAILED_WIDTH = 20;
244
+ // ─── Public API (detailed) ──────────────────────────────────────────
245
+ /**
246
+ * Compute minimum visible width for the detailed diagram.
247
+ * Result is clamped to >= MIN_DETAILED_WIDTH.
248
+ */
249
+ export function computeDetailedMinWidth(steps) {
250
+ return Math.max(rawDetailedMinWidth(steps), MIN_DETAILED_WIDTH);
251
+ }
252
+ /**
253
+ * Compute detailed diagram line count without full rendering.
254
+ * Returns 0 when width < MIN_DETAILED_WIDTH.
255
+ */
256
+ export function detailedDiagramHeight(flow, width) {
257
+ if (width < MIN_DETAILED_WIDTH)
258
+ return 0;
259
+ return countDetailedLines(flow.steps, width);
260
+ }
261
+ /**
262
+ * Render the flow as a detailed ASCII box-drawing diagram.
263
+ * Each step is rendered as a bordered box with phase label and reads/writes.
264
+ * Returns ANSI-colored lines, each with exactly `width` visible characters.
265
+ */
266
+ export function renderDetailedFlowDiagram(flow, width) {
267
+ if (width < MIN_DETAILED_WIDTH)
268
+ return [];
269
+ const lines = [];
270
+ for (let i = 0; i < flow.steps.length; i++) {
271
+ lines.push(...renderDetailedBlock(flow.steps[i], width));
272
+ }
273
+ return lines;
274
+ }
275
+ // ─── Detailed: line counting ─────────────────────────────────────────
276
+ function detailedStepLineCount(_step) {
277
+ return 3; // top border + combined content line + bottom border
278
+ }
279
+ function countDetailedLines(steps, width) {
280
+ let count = 0;
281
+ for (const step of steps) {
282
+ count += countDetailedBlockLines(step, width);
283
+ }
284
+ return count;
285
+ }
286
+ function countDetailedBlockLines(step, width) {
287
+ if (step.type === "loop") {
288
+ if (width < MIN_DETAILED_WIDTH)
289
+ return 0;
290
+ let count = 2; // top + bottom border
291
+ count += 1; // blank before first step
292
+ for (let j = 0; j < step.steps.length; j++) {
293
+ count += countDetailedBlockLines(step.steps[j], width - 6);
294
+ }
295
+ if (step.onExhausted) {
296
+ count += 1 + detailedStepLineCount(step.onExhausted); // divider + step box
297
+ }
298
+ return count;
299
+ }
300
+ return detailedStepLineCount(step);
301
+ }
302
+ // ─── Detailed: block rendering ───────────────────────────────────────
303
+ function renderDetailedBlock(step, width) {
304
+ if (step.type === "loop") {
305
+ if (width < MIN_DETAILED_WIDTH)
306
+ return [];
307
+ return renderDetailedLoopBlock(step, width);
308
+ }
309
+ return renderDetailedStepBox(step, width);
310
+ }
311
+ function renderDetailedLoopBlock(loop, width) {
312
+ const iterLabel = loop.maxIterations === Infinity ? "∞" : `×${loop.maxIterations}`;
313
+ const lines = [];
314
+ lines.push(topBorder(iterLabel, width, loop.untilLabel));
315
+ const innerWidth = width - 6;
316
+ // Blank line before first step
317
+ lines.push(wrapLine(padToWidth("", innerWidth)));
318
+ for (let i = 0; i < loop.steps.length; i++) {
319
+ for (const line of renderDetailedBlock(loop.steps[i], innerWidth)) {
320
+ lines.push(wrapLine(line));
321
+ }
322
+ }
323
+ if (loop.onExhausted) {
324
+ lines.push(wrapLine(exhaustDivider(innerWidth)));
325
+ for (const line of renderDetailedStepBox(loop.onExhausted, innerWidth)) {
326
+ lines.push(wrapLine(line));
327
+ }
328
+ }
329
+ lines.push(bottomBorder(width));
330
+ return lines;
331
+ }
332
+ // ─── Detailed: step box rendering ────────────────────────────────────
333
+ function renderDetailedStepBox(step, width) {
334
+ const lines = [];
335
+ lines.push(detailedTopBorder(step, width));
336
+ const combined = formatCombinedContent(step, width - 6);
337
+ lines.push(detailedContentLine(combined.colored, combined.plain, width));
338
+ lines.push(detailedBottomBorder(width));
339
+ return lines;
340
+ }
341
+ function detailedTopBorder(step, width) {
342
+ const label = step.type === "user" ? userLabel(step) : handlerKey(step);
343
+ const whenBadge = step.whenLabel ? ` ${green}? ${step.whenLabel}${reset}` : "";
344
+ const labelW = visibleLength(label);
345
+ const whenPlainW = step.whenLabel ? 3 + visibleLength(step.whenLabel) : 0;
346
+ if (step.type === "agent") {
347
+ const driver = step.driver;
348
+ const driverW = visibleLength(driver);
349
+ // ┌─⎵label when⎵─[fill]─⎵driver⎵──┐
350
+ // fixed = 3 + label + when + 1 + 2 + driver + 4 = 10 + label + when + driver
351
+ const fixedLen = 10 + labelW + whenPlainW + driverW;
352
+ const fill = width - fixedLen;
353
+ if (fill >= 0) {
354
+ return padToWidth(`${dim}┌─${reset} ${label}${whenBadge} ${dim}${"─".repeat(fill)}─ ${reset}${driver}${dim} ──┐${reset}`, width);
355
+ }
356
+ // Tight: drop when, truncate label if needed
357
+ const minFixedLen = 10 + labelW + driverW;
358
+ const minFill = width - minFixedLen;
359
+ if (minFill >= 0) {
360
+ return padToWidth(`${dim}┌─${reset} ${label} ${dim}${"─".repeat(minFill)}─ ${reset}${driver}${dim} ──┐${reset}`, width);
361
+ }
362
+ // Very tight: truncate label
363
+ const maxLabel = width - 10 - driverW;
364
+ if (maxLabel >= 1) {
365
+ const tLabel = truncate(label, maxLabel);
366
+ const tFill = width - 10 - visibleLength(tLabel) - driverW;
367
+ return padToWidth(`${dim}┌─${reset} ${tLabel} ${dim}${"─".repeat(Math.max(0, tFill))}─ ${reset}${driver}${dim} ──┐${reset}`, width);
368
+ }
369
+ return padToWidth(`${dim}┌${"─".repeat(width - 2)}┐${reset}`, width);
370
+ }
371
+ // User step — no driver
372
+ // ┌─ {label}{when} ─{fill}─┐
373
+ const fixedLen = 3 + labelW + whenPlainW + 2;
374
+ const fill = width - fixedLen;
375
+ if (fill >= 0) {
376
+ return padToWidth(`${dim}┌─${reset} ${label}${whenBadge} ${dim}${"─".repeat(fill)}┐${reset}`, width);
377
+ }
378
+ const tLabel = truncate(label, Math.max(1, width - 5));
379
+ return padToWidth(`${dim}┌─${reset} ${tLabel} ${dim}┐${reset}`, width);
380
+ }
381
+ function detailedContentLine(colored, plain, width) {
382
+ // │ {content} │
383
+ const overhead = 6; // │ + 2 spaces + 2 spaces + │
384
+ const innerWidth = width - overhead;
385
+ const contentLen = visibleLength(plain);
386
+ if (contentLen <= innerWidth) {
387
+ const gap = innerWidth - contentLen;
388
+ return `${dim}│${reset} ${colored}${" ".repeat(gap)} ${dim}│${reset}`;
389
+ }
390
+ // Truncate — use plain text for truncated content (colors may be split)
391
+ const tPlain = truncate(plain, innerWidth);
392
+ const gap = innerWidth - visibleLength(tPlain);
393
+ return `${dim}│${reset} ${tPlain}${" ".repeat(gap)} ${dim}│${reset}`;
394
+ }
395
+ function detailedBottomBorder(width) {
396
+ return `${dim}└${"─".repeat(width - 2)}┘${reset}`;
397
+ }
398
+ // ─── Detailed: combined content formatting ───────────────────────────
399
+ /**
400
+ * Build a single combined content line: {phaseLabel} {↑ reads} ...gap... {↓ writes}
401
+ * Truncation priority: truncate reads → drop reads → truncate label → drop writes.
402
+ */
403
+ function formatCombinedContent(step, innerWidth) {
404
+ const label = getDisplayPhaseLabel(step);
405
+ const readValues = uniqueValues(step.reads);
406
+ const writeValues = uniqueValues(step.writes);
407
+ const rp = readValues.length > 0 ? `↑ ${readValues.join(", ")}` : "";
408
+ const wp = writeValues.length > 0 ? `↓ ${writeValues.join(", ")}` : "";
409
+ // Assemble plain + colored strings. Writes are right-aligned.
410
+ function assemble(l, r, w) {
411
+ const leftStr = l && r ? `${l} ${r}` : l || r;
412
+ if (w) {
413
+ const gap = Math.max(innerWidth - visibleLength(leftStr) - visibleLength(w), leftStr ? 2 : 0);
414
+ const plain = `${leftStr}${" ".repeat(gap)}${w}`;
415
+ let colored = "";
416
+ if (l && r)
417
+ colored = `${cyan}${l}${reset} ${dim}${r}${reset}`;
418
+ else if (l)
419
+ colored = `${cyan}${l}${reset}`;
420
+ else if (r)
421
+ colored = `${dim}${r}${reset}`;
422
+ colored += `${" ".repeat(gap)}${dim}${w}${reset}`;
423
+ return { colored, plain };
424
+ }
425
+ const plain = leftStr;
426
+ let colored = "";
427
+ if (l && r)
428
+ colored = `${cyan}${l}${reset} ${dim}${r}${reset}`;
429
+ else if (l)
430
+ colored = `${cyan}${l}${reset}`;
431
+ else if (r)
432
+ colored = `${dim}${r}${reset}`;
433
+ return { colored, plain };
434
+ }
435
+ // Measure left side: label + separator + reads
436
+ function leftW(l, r) {
437
+ if (l && r)
438
+ return visibleLength(l) + 2 + visibleLength(r);
439
+ return visibleLength(l) + visibleLength(r);
440
+ }
441
+ const labelW = visibleLength(label);
442
+ const rpW = visibleLength(rp);
443
+ const wpW = visibleLength(wp);
444
+ // 1. Full fit
445
+ const fullLeft = leftW(label, rp);
446
+ const minGap = (fullLeft > 0 && wp) ? 2 : 0;
447
+ if (fullLeft + minGap + wpW <= innerWidth) {
448
+ return assemble(label, rp, wp);
449
+ }
450
+ // 2. Truncate reads
451
+ if (rp) {
452
+ const fixedLeft = label ? labelW + 2 : 0;
453
+ const fixedRight = wp ? 2 + wpW : 0;
454
+ const availReads = innerWidth - fixedLeft - fixedRight;
455
+ if (availReads >= 4) {
456
+ return assemble(label, truncate(rp, availReads), wp);
457
+ }
458
+ }
459
+ // 3. Drop reads, keep label + writes
460
+ if (label && wp) {
461
+ if (labelW + 2 + wpW <= innerWidth) {
462
+ return assemble(label, "", wp);
463
+ }
464
+ }
465
+ // 4. Truncate label, keep writes
466
+ if (label && wp) {
467
+ const availLabel = innerWidth - 2 - wpW;
468
+ if (availLabel >= 2) {
469
+ return assemble(truncate(label, availLabel), "", wp);
470
+ }
471
+ }
472
+ // 5. Drop writes, keep label
473
+ if (label) {
474
+ if (labelW <= innerWidth) {
475
+ return assemble(label, "", "");
476
+ }
477
+ return assemble(truncate(label, innerWidth), "", "");
478
+ }
479
+ // 6. Only reads and/or writes (no label)
480
+ if (rp && wp) {
481
+ if (rpW + 2 + wpW <= innerWidth) {
482
+ return assemble("", rp, wp);
483
+ }
484
+ const availR = innerWidth - 2 - wpW;
485
+ if (availR >= 4) {
486
+ return assemble("", truncate(rp, availR), wp);
487
+ }
488
+ if (wpW <= innerWidth) {
489
+ return assemble("", "", wp);
490
+ }
491
+ return assemble("", "", truncate(wp, innerWidth));
492
+ }
493
+ if (rp) {
494
+ if (rpW <= innerWidth)
495
+ return assemble("", rp, "");
496
+ return assemble("", truncate(rp, innerWidth), "");
497
+ }
498
+ if (wp) {
499
+ if (wpW <= innerWidth)
500
+ return assemble("", "", wp);
501
+ return assemble("", "", truncate(wp, innerWidth));
502
+ }
503
+ return { colored: "", plain: "" };
504
+ }
505
+ // ─── Detailed: phase label extraction ────────────────────────────────
506
+ function getDisplayPhaseLabel(step) {
507
+ const label = step.phaseLabel;
508
+ if (typeof label === "string")
509
+ return label;
510
+ if (typeof label === "function") {
511
+ return label._displayHint ?? "(dynamic)";
512
+ }
513
+ return "";
514
+ }
515
+ // ─── Detailed: min-width computation ─────────────────────────────────
516
+ function rawDetailedMinWidth(steps) {
517
+ let maxW = 0;
518
+ for (const step of steps) {
519
+ if (step.type === "loop") {
520
+ const iterLabel = step.maxIterations === Infinity ? "∞" : `×${step.maxIterations}`;
521
+ const untilPart = step.untilLabel ? 4 + visibleLength(step.untilLabel) : 0;
522
+ let innerW = rawDetailedMinWidth(step.steps);
523
+ if (step.onExhausted) {
524
+ innerW = Math.max(innerW, detailedLeafWidth(step.onExhausted), 11);
525
+ }
526
+ maxW = Math.max(maxW, 6 + visibleLength(iterLabel) + untilPart, innerW + 6);
527
+ }
528
+ else {
529
+ maxW = Math.max(maxW, detailedLeafWidth(step));
530
+ }
531
+ }
532
+ return maxW;
533
+ }
534
+ function detailedLeafWidth(step) {
535
+ const label = step.type === "user" ? userLabel(step) : handlerKey(step);
536
+ const labelW = visibleLength(label);
537
+ const whenPartW = step.whenLabel ? 3 + visibleLength(step.whenLabel) : 0;
538
+ // Top border width
539
+ let topWidth;
540
+ if (step.type === "agent") {
541
+ // ┌─ {label} {when} ─ {driver} ──┐ (matches detailedTopBorder fixedLen)
542
+ topWidth = 10 + labelW + whenPartW + visibleLength(step.driver);
543
+ }
544
+ else {
545
+ // ┌─ {label} {when} ──┐
546
+ topWidth = 3 + labelW + whenPartW + 2;
547
+ }
548
+ // Combined content line width (6 = │ + 2sp + 2sp + │)
549
+ const phaseLabel = getDisplayPhaseLabel(step);
550
+ const readVals = uniqueValues(step.reads);
551
+ const writeVals = uniqueValues(step.writes);
552
+ const rp = readVals.length > 0 ? `↑ ${readVals.join(", ")}` : "";
553
+ const wp = writeVals.length > 0 ? `↓ ${writeVals.join(", ")}` : "";
554
+ const phaseLabelW = visibleLength(phaseLabel);
555
+ const rpW = visibleLength(rp);
556
+ const wpW = visibleLength(wp);
557
+ let leftW = phaseLabelW;
558
+ if (phaseLabel && rp)
559
+ leftW += 2 + rpW;
560
+ else
561
+ leftW += rpW;
562
+ const minGap = (leftW > 0 && wp) ? 2 : 0;
563
+ const combinedWidth = (leftW + wpW > 0)
564
+ ? leftW + minGap + wpW + 6
565
+ : 0;
566
+ return Math.max(topWidth, combinedWidth);
567
+ }
568
+ // ─── Min-width computation ───────────────────────────────────────────
569
+ function rawMinWidth(steps) {
570
+ let maxW = 0;
571
+ for (const step of steps) {
572
+ if (step.type === "loop") {
573
+ const iterLabel = step.maxIterations === Infinity ? "∞" : `×${step.maxIterations}`;
574
+ const untilPart = step.untilLabel ? 4 + visibleLength(step.untilLabel) : 0;
575
+ let innerW = rawMinWidth(step.steps);
576
+ if (step.onExhausted) {
577
+ innerW = Math.max(innerW, leafWidth(step.onExhausted), 11);
578
+ }
579
+ maxW = Math.max(maxW, 6 + visibleLength(iterLabel) + untilPart, innerW + 6);
580
+ }
581
+ else {
582
+ maxW = Math.max(maxW, leafWidth(step));
583
+ }
584
+ }
585
+ return maxW;
586
+ }
587
+ function leafWidth(step) {
588
+ const anno = stepAnnotation(step);
589
+ const annoW = anno ? 2 + visibleLength(anno) : 0;
590
+ if (step.type === "agent") {
591
+ const label = handlerKey(step);
592
+ return 2 + visibleLength(label) + annoW + 2 + visibleLength(step.driver);
593
+ }
594
+ return 2 + visibleLength(userLabel(step)) + annoW;
595
+ }
596
+ //# sourceMappingURL=diagram.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagram.js","sourceRoot":"","sources":["../../src/flow/diagram.ts"],"names":[],"mappings":"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"}