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,628 @@
1
+ import { loadBuiltinFlows } from "../flow/custom/index.js";
2
+ import { TuiInputParser } from "../startup-tui.js";
3
+ import { buildFieldsForTemplate, configRowCount, handleFieldEvent, renderConfigFields, renderFlowSection, renderEditorLines, handleTextEditorEvent, LABEL_WIDTH, } from "../preview-panel.js";
4
+ import { padToWidth, bold, dim, reset, cyan, red, yellow, invert, HIDE_CURSOR, ALT_SCREEN_ON, ALT_SCREEN_OFF, CSI, } from "../ansi.js";
5
+ import { randomFlowName } from "./names.js";
6
+ import { readDefaultFlowSource, buildCreatePrompt, buildRevisePrompt, buildModifyPrompt, buildRetryPrompt, generateFlowCode, } from "./llm.js";
7
+ import { validateFlowCode, patchFlowName } from "./validate.js";
8
+ import { loadEditableCustomFlows, checkBuiltinCollision, checkFileCollision, saveFlow, } from "./save.js";
9
+ export class NoCustomFlowsError extends Error {
10
+ constructor() {
11
+ super("No custom flows found. Use 'create-flow' to create one first.");
12
+ this.name = "NoCustomFlowsError";
13
+ }
14
+ }
15
+ // ─── Constants ───────────────────────────────────────────────────────────
16
+ const HEADER_ROWS = 2;
17
+ const SEPARATOR_ROWS = 1;
18
+ const NAME_ROW = 1;
19
+ const DESCRIPTION_SPACER_ROW = 1;
20
+ const EDITOR_LABEL_ROW = 1;
21
+ const FOOTER_ROWS = 1;
22
+ const SPINNER_CHARS = ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"];
23
+ const PROVIDER_OPTIONS = ["claude", "codex", "copilot"];
24
+ // ─── State Builders ──────────────────────────────────────────────────────
25
+ export async function buildCreateState(rows, cols) {
26
+ const builtinTemplates = await loadBuiltinFlows();
27
+ const builtinNames = builtinTemplates.map((t) => t.name);
28
+ const defaultTemplate = builtinTemplates.find((t) => t.name === "default");
29
+ const defaultValues = Object.fromEntries(defaultTemplate.params.map((p) => [p.key, p.default]));
30
+ return {
31
+ mode: "create",
32
+ phase: "describe",
33
+ termRows: rows,
34
+ termCols: cols,
35
+ focus: "editor",
36
+ paramIndex: 0,
37
+ flowName: randomFlowName(),
38
+ nameCursor: 0,
39
+ nameReplacePending: true,
40
+ providerField: {
41
+ kind: "select",
42
+ key: "provider",
43
+ label: "Provider",
44
+ options: PROVIDER_OPTIONS,
45
+ value: PROVIDER_OPTIONS[0],
46
+ expanded: false,
47
+ expandedIndex: 0,
48
+ },
49
+ editor: { lines: [""], cursorRow: 0, cursorCol: 0, scrollOffset: 0 },
50
+ previewTemplate: defaultTemplate,
51
+ previewFields: buildFieldsForTemplate(defaultTemplate, defaultValues),
52
+ flowSectionHeight: 0,
53
+ generating: false,
54
+ generatedCode: null,
55
+ currentSourceCode: readDefaultFlowSource(),
56
+ spinnerFrame: 0,
57
+ error: null,
58
+ statusMessage: null,
59
+ lastFailedCode: null,
60
+ lastValidationError: null,
61
+ overwriteTarget: null,
62
+ customFlows: [],
63
+ selectedFlowIndex: 0,
64
+ builtinNames,
65
+ loaderErrors: [],
66
+ };
67
+ }
68
+ export async function buildModifyState(rows, cols) {
69
+ const builtinTemplates = await loadBuiltinFlows();
70
+ const builtinNames = builtinTemplates.map((t) => t.name);
71
+ const { flows: customFlows, errors } = await loadEditableCustomFlows(builtinNames);
72
+ if (customFlows.length === 0) {
73
+ throw new NoCustomFlowsError();
74
+ }
75
+ const selected = customFlows[0];
76
+ const defaultValues = Object.fromEntries(selected.template.params.map((p) => [p.key, p.default]));
77
+ return {
78
+ mode: "modify",
79
+ phase: "describe",
80
+ termRows: rows,
81
+ termCols: cols,
82
+ focus: "editor",
83
+ paramIndex: 0,
84
+ flowName: selected.template.name,
85
+ nameCursor: 0,
86
+ nameReplacePending: true,
87
+ providerField: {
88
+ kind: "select",
89
+ key: "provider",
90
+ label: "Provider",
91
+ options: PROVIDER_OPTIONS,
92
+ value: PROVIDER_OPTIONS[0],
93
+ expanded: false,
94
+ expandedIndex: 0,
95
+ },
96
+ editor: { lines: [""], cursorRow: 0, cursorCol: 0, scrollOffset: 0 },
97
+ previewTemplate: selected.template,
98
+ previewFields: buildFieldsForTemplate(selected.template, defaultValues),
99
+ flowSectionHeight: 0,
100
+ generating: false,
101
+ generatedCode: null,
102
+ currentSourceCode: selected.sourceCode,
103
+ spinnerFrame: 0,
104
+ error: null,
105
+ statusMessage: errors.length > 0
106
+ ? `⚠ ${errors.length} flow(s) failed to load`
107
+ : null,
108
+ lastFailedCode: null,
109
+ lastValidationError: null,
110
+ overwriteTarget: null,
111
+ customFlows,
112
+ selectedFlowIndex: 0,
113
+ builtinNames,
114
+ loaderErrors: errors,
115
+ };
116
+ }
117
+ // ─── Editor Height ───────────────────────────────────────────────────────
118
+ function editorHeight(state) {
119
+ const previewRows = configRowCount(state.previewFields);
120
+ const providerRows = configRowCount([state.providerField]);
121
+ const statusRow = state.statusMessage ? 1 : 0;
122
+ const used = HEADER_ROWS +
123
+ statusRow +
124
+ previewRows +
125
+ state.flowSectionHeight +
126
+ SEPARATOR_ROWS +
127
+ NAME_ROW +
128
+ providerRows +
129
+ DESCRIPTION_SPACER_ROW +
130
+ EDITOR_LABEL_ROW +
131
+ FOOTER_ROWS;
132
+ return Math.max(3, state.termRows - used);
133
+ }
134
+ // ─── Rendering ───────────────────────────────────────────────────────────
135
+ let lastDrawnOutput;
136
+ export function render(state, out) {
137
+ const cols = state.termCols;
138
+ const lines = [];
139
+ const pad = (s) => padToWidth(s, cols);
140
+ // Header
141
+ const modeLabel = state.mode === "create" ? "Create Flow" : "Modify Flow";
142
+ lines.push(pad(` ${bold}${cyan}poly-weaver Flow Editor${reset} ${dim}— ${modeLabel}${reset}`));
143
+ lines.push(pad(` ${"━".repeat(Math.max(0, cols - 4))}`));
144
+ // Status message (if any)
145
+ if (state.statusMessage) {
146
+ lines.push(pad(` ${dim}${state.statusMessage}${reset}`));
147
+ }
148
+ // Preview zone — config fields
149
+ lines.push(...renderConfigFields(state.previewFields, state.paramIndex, state.focus === "params", cols));
150
+ // Preview zone — flow diagram
151
+ const flowSection = renderFlowSection(state.previewTemplate, state.previewFields, cols, {
152
+ templateName: state.flowName,
153
+ templateCount: state.mode === "modify" ? state.customFlows.length : undefined,
154
+ templateIndex: state.mode === "modify" ? state.selectedFlowIndex : undefined,
155
+ detailed: true,
156
+ });
157
+ lines.push(...flowSection.lines);
158
+ state.flowSectionHeight = flowSection.flowSectionHeight;
159
+ // Separator
160
+ lines.push(pad(` ${"━".repeat(Math.max(0, cols - 4))}`));
161
+ // Name field (always visible below separator)
162
+ const nameFocused = state.focus === "name";
163
+ const nameIndicator = nameFocused ? `${bold}▸${reset}` : `${dim}·${reset}`;
164
+ const nameLabel = "Name".padEnd(LABEL_WIDTH);
165
+ const nameLabelPrefix = nameFocused ? "" : dim;
166
+ const nameLabelSuffix = nameFocused ? "" : reset;
167
+ const nameValue = state.flowName;
168
+ if (nameFocused) {
169
+ const before = nameValue.slice(0, state.nameCursor);
170
+ const cursorChar = nameValue[state.nameCursor] ?? " ";
171
+ const after = nameValue.slice(state.nameCursor + 1);
172
+ lines.push(pad(` ${nameIndicator} ${nameLabelPrefix}${nameLabel}${nameLabelSuffix}${before}${invert}${cursorChar}${reset}${after}`));
173
+ }
174
+ else {
175
+ lines.push(pad(` ${nameIndicator} ${nameLabelPrefix}${nameLabel}${nameLabelSuffix}${nameValue}`));
176
+ }
177
+ // Provider field (always visible below name)
178
+ lines.push(...renderConfigFields([state.providerField], 0, state.focus === "provider", cols));
179
+ if (state.phase === "confirm-overwrite") {
180
+ // Confirm-overwrite replaces editor area only
181
+ lines.push(pad(""));
182
+ lines.push(pad(` ${yellow}⚠${reset} A file named "${state.flowName}.mjs" already exists.`));
183
+ lines.push(pad(` Overwrite? A backup (.bak) will be created.`));
184
+ lines.push(pad(""));
185
+ lines.push(pad(` ${dim}Enter${reset} overwrite ${dim}Escape${reset} go back and rename ${dim}Ctrl+C${reset} abort`));
186
+ }
187
+ else {
188
+ lines.push(pad(""));
189
+ // Editor label
190
+ if (state.generating) {
191
+ const spinner = SPINNER_CHARS[state.spinnerFrame % SPINNER_CHARS.length];
192
+ lines.push(pad(` ${cyan}${spinner}${reset} Generating...`));
193
+ }
194
+ else if (state.error) {
195
+ lines.push(pad(` ${red}✗ ${state.error}${reset}`));
196
+ }
197
+ else {
198
+ const editorLabel = state.phase === "describe"
199
+ ? "Describe your flow:"
200
+ : "Describe revision:";
201
+ lines.push(pad(` ${editorLabel}`));
202
+ }
203
+ // Task editor
204
+ const edH = editorHeight(state);
205
+ lines.push(...renderEditorLines(state.editor, edH, state.focus === "editor", cols));
206
+ // Footer
207
+ let footer;
208
+ if (state.focus === "editor") {
209
+ const saveHint = state.generatedCode ? ` ${dim}Ctrl+S${reset} Save` : "";
210
+ const shiftTabHint = state.mode === "modify" && state.customFlows.length > 1
211
+ ? ` ${dim}Shift+Tab${reset} Switch`
212
+ : "";
213
+ footer = ` ${dim}Tab${reset} Fields ${dim}Enter${reset} Newline ${dim}Ctrl+D${reset} Generate${saveHint}${shiftTabHint} ${dim}Ctrl+C${reset} Abort`;
214
+ }
215
+ else {
216
+ const saveHint = state.generatedCode ? ` ${dim}Ctrl+S${reset} Save` : "";
217
+ const shiftTabHint = state.mode === "modify" && state.customFlows.length > 1
218
+ ? ` ${dim}Shift+Tab${reset} Switch`
219
+ : "";
220
+ footer = ` ${dim}Tab${reset} Next ${dim}Esc${reset} Editor${saveHint}${shiftTabHint} ${dim}Ctrl+C${reset} Abort`;
221
+ }
222
+ lines.push(pad(footer));
223
+ }
224
+ // Build output
225
+ const output = HIDE_CURSOR + `${CSI}H` + lines.join("\n") + `${CSI}J`;
226
+ if (output !== lastDrawnOutput) {
227
+ lastDrawnOutput = output;
228
+ out.write(output);
229
+ }
230
+ }
231
+ export function handleEvent(state, event) {
232
+ // Ctrl+C always exits
233
+ if (event.type === "ctrl+c")
234
+ return "cancel";
235
+ // During generation, suppress all except Ctrl+C
236
+ if (state.generating)
237
+ return "handled";
238
+ // Phase-specific handling
239
+ if (state.phase === "confirm-overwrite") {
240
+ return handleConfirmOverwrite(state, event);
241
+ }
242
+ // Ctrl+S — save (only in revise phase with generated code)
243
+ if (event.type === "ctrl+s" && state.generatedCode) {
244
+ return handleSave(state);
245
+ }
246
+ // Shift+Tab — switch flow in modify mode
247
+ if (event.type === "shift-tab" && state.mode === "modify" && state.customFlows.length > 1) {
248
+ state.selectedFlowIndex =
249
+ (state.selectedFlowIndex + 1) % state.customFlows.length;
250
+ const entry = state.customFlows[state.selectedFlowIndex];
251
+ state.flowName = entry.template.name;
252
+ state.nameCursor = 0;
253
+ state.nameReplacePending = true;
254
+ state.currentSourceCode = entry.sourceCode;
255
+ state.generatedCode = null;
256
+ state.phase = "describe";
257
+ state.error = null;
258
+ state.lastFailedCode = null;
259
+ state.lastValidationError = null;
260
+ const defaultValues = Object.fromEntries(entry.template.params.map((p) => [p.key, p.default]));
261
+ state.previewTemplate = entry.template;
262
+ state.previewFields = buildFieldsForTemplate(entry.template, defaultValues);
263
+ return "handled";
264
+ }
265
+ // Focus-specific handling
266
+ switch (state.focus) {
267
+ case "params":
268
+ return handleParamsEvent(state, event);
269
+ case "name":
270
+ return handleNameEvent(state, event);
271
+ case "provider":
272
+ return handleProviderEvent(state, event);
273
+ case "editor":
274
+ return handleEditorEvent(state, event);
275
+ }
276
+ }
277
+ function handleConfirmOverwrite(state, event) {
278
+ switch (event.type) {
279
+ case "submit":
280
+ return doSave(state, true);
281
+ case "escape":
282
+ state.phase = "revise";
283
+ state.overwriteTarget = null;
284
+ state.focus = "name";
285
+ return "handled";
286
+ default:
287
+ return "handled";
288
+ }
289
+ }
290
+ function handleParamsEvent(state, event) {
291
+ if (handleFieldEvent(state.previewFields, state.paramIndex, event)) {
292
+ return "handled";
293
+ }
294
+ switch (event.type) {
295
+ case "up":
296
+ if (state.paramIndex > 0)
297
+ state.paramIndex--;
298
+ break;
299
+ case "down":
300
+ if (state.paramIndex < state.previewFields.length - 1)
301
+ state.paramIndex++;
302
+ else
303
+ state.focus = "name";
304
+ break;
305
+ case "tab":
306
+ state.focus = "name";
307
+ break;
308
+ case "escape":
309
+ state.focus = "editor";
310
+ break;
311
+ }
312
+ return "handled";
313
+ }
314
+ function handleNameEvent(state, event) {
315
+ switch (event.type) {
316
+ case "insert": {
317
+ // Only allow valid flow name characters
318
+ if (/^[a-zA-Z0-9_-]$/.test(event.text)) {
319
+ if (state.nameReplacePending) {
320
+ state.flowName = event.text;
321
+ state.nameCursor = event.text.length;
322
+ state.nameReplacePending = false;
323
+ }
324
+ else {
325
+ state.flowName =
326
+ state.flowName.slice(0, state.nameCursor) +
327
+ event.text +
328
+ state.flowName.slice(state.nameCursor);
329
+ state.nameCursor++;
330
+ }
331
+ state.error = null;
332
+ }
333
+ break;
334
+ }
335
+ case "backspace":
336
+ if (state.nameCursor > 0) {
337
+ state.flowName =
338
+ state.flowName.slice(0, state.nameCursor - 1) +
339
+ state.flowName.slice(state.nameCursor);
340
+ state.nameCursor--;
341
+ state.nameReplacePending = false;
342
+ state.error = null;
343
+ }
344
+ break;
345
+ case "left":
346
+ if (state.nameCursor > 0)
347
+ state.nameCursor--;
348
+ break;
349
+ case "right":
350
+ if (state.nameCursor < state.flowName.length)
351
+ state.nameCursor++;
352
+ break;
353
+ case "tab":
354
+ state.focus = "provider";
355
+ break;
356
+ case "escape":
357
+ state.focus = "editor";
358
+ break;
359
+ case "up":
360
+ state.focus = "params";
361
+ state.paramIndex = state.previewFields.length - 1;
362
+ break;
363
+ case "down":
364
+ state.focus = "provider";
365
+ break;
366
+ }
367
+ return "handled";
368
+ }
369
+ function handleProviderEvent(state, event) {
370
+ if (handleFieldEvent([state.providerField], 0, event)) {
371
+ return "handled";
372
+ }
373
+ switch (event.type) {
374
+ case "tab":
375
+ case "escape":
376
+ case "down":
377
+ state.focus = "editor";
378
+ break;
379
+ case "up":
380
+ state.focus = "name";
381
+ break;
382
+ }
383
+ return "handled";
384
+ }
385
+ function handleEditorEvent(state, event) {
386
+ if (!handleTextEditorEvent(state.editor, event)) {
387
+ // Events not consumed by the shared handler
388
+ switch (event.type) {
389
+ case "submit": {
390
+ const ed = state.editor;
391
+ const line = ed.lines[ed.cursorRow];
392
+ const before = line.slice(0, ed.cursorCol);
393
+ const after = line.slice(ed.cursorCol);
394
+ ed.lines[ed.cursorRow] = before;
395
+ ed.lines.splice(ed.cursorRow + 1, 0, after);
396
+ ed.cursorRow++;
397
+ ed.cursorCol = 0;
398
+ break;
399
+ }
400
+ case "ctrl+d": {
401
+ const text = state.editor.lines.join("\n").trim();
402
+ if (text) {
403
+ return triggerGeneration(state, text);
404
+ }
405
+ break;
406
+ }
407
+ case "up":
408
+ // up-from-top: navigate to provider
409
+ state.focus = "provider";
410
+ break;
411
+ case "tab":
412
+ state.focus = "params";
413
+ state.paramIndex = 0;
414
+ break;
415
+ case "escape":
416
+ break;
417
+ }
418
+ }
419
+ return "handled";
420
+ }
421
+ // ─── Generation ──────────────────────────────────────────────────────────
422
+ async function triggerGeneration(state, editorText) {
423
+ state.generating = true;
424
+ state.error = null;
425
+ const provider = state.providerField.value;
426
+ const workdir = process.cwd();
427
+ const dw = Math.max(40, state.termCols - 8);
428
+ try {
429
+ // Build prompt based on mode/phase — retry with error context if last attempt failed validation
430
+ let prompt;
431
+ if (state.lastFailedCode && state.lastValidationError) {
432
+ prompt = buildRetryPrompt(state.lastFailedCode, editorText, state.lastValidationError, state.flowName);
433
+ }
434
+ else if (state.mode === "create" && state.phase === "describe") {
435
+ prompt = buildCreatePrompt(state.currentSourceCode, editorText, state.flowName);
436
+ }
437
+ else if (state.mode === "modify" && state.phase === "describe") {
438
+ prompt = buildModifyPrompt(state.currentSourceCode, editorText, state.flowName);
439
+ }
440
+ else {
441
+ // revise phase (both modes)
442
+ prompt = buildRevisePrompt(state.generatedCode, editorText, state.flowName);
443
+ }
444
+ const code = await generateFlowCode(provider, prompt, workdir);
445
+ const result = await validateFlowCode(code, state.flowName, dw);
446
+ if (result.ok) {
447
+ state.previewTemplate = result.template;
448
+ state.previewFields = buildFieldsForTemplate(result.template, Object.fromEntries(result.template.params.map((p) => [p.key, p.default])));
449
+ state.generatedCode = result.code;
450
+ state.phase = "revise";
451
+ state.editor = { lines: [""], cursorRow: 0, cursorCol: 0, scrollOffset: 0 };
452
+ state.lastFailedCode = null;
453
+ state.lastValidationError = null;
454
+ }
455
+ else {
456
+ state.error = result.error;
457
+ state.lastFailedCode = code;
458
+ state.lastValidationError = result.error;
459
+ // Pre-fill editor with error context so the user can see what went wrong
460
+ // and refine their request for the retry.
461
+ // Split editorText back into individual lines to preserve the editor's
462
+ // line-array model (editorText was built via lines.join("\n")).
463
+ const userLines = editorText.split("\n");
464
+ const retryLines = [
465
+ `[Validation error: ${result.error}]`,
466
+ "",
467
+ ...userLines,
468
+ ];
469
+ const lastUserLine = userLines[userLines.length - 1];
470
+ state.editor = {
471
+ lines: retryLines,
472
+ cursorRow: retryLines.length - 1,
473
+ cursorCol: lastUserLine.length,
474
+ scrollOffset: 0,
475
+ };
476
+ }
477
+ }
478
+ catch (err) {
479
+ state.error = err instanceof Error ? err.message : String(err);
480
+ }
481
+ finally {
482
+ state.generating = false;
483
+ }
484
+ return "handled";
485
+ }
486
+ // ─── Save ────────────────────────────────────────────────────────────────
487
+ async function handleSave(state) {
488
+ // 1. Check built-in collision
489
+ const collision = checkBuiltinCollision(state.flowName, state.builtinNames);
490
+ if (collision) {
491
+ state.error = collision;
492
+ state.focus = "name";
493
+ return "handled";
494
+ }
495
+ // 2. Check file collision
496
+ const existingPath = await checkFileCollision(state.flowName);
497
+ if (existingPath) {
498
+ // In modify mode, overwriting the file we started from is not a collision
499
+ const startedFrom = state.mode === "modify"
500
+ ? state.customFlows[state.selectedFlowIndex].filePath
501
+ : null;
502
+ if (existingPath !== startedFrom) {
503
+ state.phase = "confirm-overwrite";
504
+ state.overwriteTarget = existingPath;
505
+ return "handled";
506
+ }
507
+ }
508
+ return doSave(state, !!existingPath);
509
+ }
510
+ async function doSave(state, overwrite) {
511
+ let code = state.generatedCode;
512
+ // 3. Apply final name patch if needed
513
+ try {
514
+ // Check if the code's template name differs from state.flowName
515
+ // (can happen if user renamed after generation)
516
+ const nameMatch = code.match(/name\s*:\s*['"]([^'"]+)['"]/);
517
+ if (nameMatch && nameMatch[1] !== state.flowName) {
518
+ code = patchFlowName(code, nameMatch[1], state.flowName);
519
+ }
520
+ }
521
+ catch (err) {
522
+ state.error = `Name patch failed: ${err instanceof Error ? err.message : String(err)}`;
523
+ return "handled";
524
+ }
525
+ // 4. Save
526
+ const result = await saveFlow({
527
+ name: state.flowName,
528
+ code,
529
+ overwrite,
530
+ });
531
+ if ("error" in result) {
532
+ state.error = result.error;
533
+ return "handled";
534
+ }
535
+ return {
536
+ type: "save",
537
+ result: {
538
+ saved: true,
539
+ filePath: result.filePath,
540
+ backedUp: result.backedUp,
541
+ },
542
+ };
543
+ }
544
+ export async function showCreateFlowTui() {
545
+ const rows = process.stdout.rows ?? 24;
546
+ const cols = process.stdout.columns ?? 80;
547
+ const state = await buildCreateState(rows, cols);
548
+ return runFlowEditor(state);
549
+ }
550
+ export async function showModifyFlowTui() {
551
+ const rows = process.stdout.rows ?? 24;
552
+ const cols = process.stdout.columns ?? 80;
553
+ const state = await buildModifyState(rows, cols);
554
+ return runFlowEditor(state);
555
+ }
556
+ async function runFlowEditor(state) {
557
+ process.stdout.write(ALT_SCREEN_ON);
558
+ try {
559
+ lastDrawnOutput = undefined;
560
+ render(state, process.stdout);
561
+ return await inputLoop(state);
562
+ }
563
+ finally {
564
+ process.stdout.write(ALT_SCREEN_OFF);
565
+ }
566
+ }
567
+ async function inputLoop(state) {
568
+ const parser = new TuiInputParser();
569
+ process.stdin.setRawMode(true);
570
+ process.stdin.resume();
571
+ let spinnerInterval = null;
572
+ return new Promise((resolve) => {
573
+ async function processEvent(event) {
574
+ const result = await handleEvent(state, event);
575
+ if (result === "cancel") {
576
+ cleanup();
577
+ resolve(null);
578
+ return true;
579
+ }
580
+ if (typeof result === "object" && result.type === "save") {
581
+ cleanup();
582
+ resolve(result.result);
583
+ return true;
584
+ }
585
+ return false;
586
+ }
587
+ parser.onDeferredEvents(async (events) => {
588
+ for (const event of events) {
589
+ if (await processEvent(event))
590
+ return;
591
+ }
592
+ render(state, process.stdout);
593
+ });
594
+ const onData = async (chunk) => {
595
+ for (const event of parser.parseChunk(chunk)) {
596
+ if (await processEvent(event))
597
+ return;
598
+ }
599
+ render(state, process.stdout);
600
+ };
601
+ process.stdin.on("data", onData);
602
+ const onResize = () => {
603
+ state.termRows = process.stdout.rows ?? 24;
604
+ state.termCols = process.stdout.columns ?? 80;
605
+ lastDrawnOutput = undefined;
606
+ render(state, process.stdout);
607
+ };
608
+ process.stdout.on("resize", onResize);
609
+ // Spinner animation
610
+ spinnerInterval = setInterval(() => {
611
+ if (state.generating) {
612
+ state.spinnerFrame++;
613
+ lastDrawnOutput = undefined;
614
+ render(state, process.stdout);
615
+ }
616
+ }, 100);
617
+ function cleanup() {
618
+ if (spinnerInterval)
619
+ clearInterval(spinnerInterval);
620
+ parser.cancelPendingEscape();
621
+ process.stdin.removeListener("data", onData);
622
+ process.stdout.removeListener("resize", onResize);
623
+ process.stdin.setRawMode(false);
624
+ process.stdin.resume();
625
+ }
626
+ });
627
+ }
628
+ //# sourceMappingURL=tui.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tui.js","sourceRoot":"","sources":["../../src/flow-editor/tui.ts"],"names":[],"mappings":"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"}