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,59 @@
1
+ import type { FlowTemplate } from "../flow/types.js";
2
+ import type { LoadError } from "../flow/custom/index.js";
3
+ /**
4
+ * A custom flow that was successfully loaded, paired with its file
5
+ * metadata. This is the single source of truth for modify-mode's
6
+ * selectable flows.
7
+ */
8
+ export interface CustomFlowEntry {
9
+ template: FlowTemplate;
10
+ filePath: string;
11
+ sourceCode: string;
12
+ }
13
+ export interface CustomFlowLoadResult {
14
+ flows: CustomFlowEntry[];
15
+ errors: LoadError[];
16
+ }
17
+ /**
18
+ * Load all custom flows from the flows directory, pairing each
19
+ * successfully loaded template with its file path and source code.
20
+ *
21
+ * Invariants enforced (matching loadAllFlows behavior):
22
+ * - Deduplication: if two files export the same template.name,
23
+ * the first one wins; the duplicate is added to `errors`.
24
+ * - Built-in shadow rejection: if template.name matches any name
25
+ * in builtinNames, the entry is excluded from `flows` and added
26
+ * to `errors` with a shadow-rejection message.
27
+ */
28
+ export declare function loadEditableCustomFlows(builtinNames: string[], dir?: string): Promise<CustomFlowLoadResult>;
29
+ /**
30
+ * Check if a name collides with a built-in flow.
31
+ * Returns error message string if collision, null otherwise.
32
+ */
33
+ export declare function checkBuiltinCollision(name: string, builtinNames: string[]): string | null;
34
+ /**
35
+ * Check if the target save file already exists on disk.
36
+ * Tests whether `<dir>/<name>.mjs` exists via fs.access().
37
+ * Returns the absolute file path if it exists, null otherwise.
38
+ */
39
+ export declare function checkFileCollision(name: string, dir?: string): Promise<string | null>;
40
+ export interface SaveResult {
41
+ filePath: string;
42
+ backedUp?: string;
43
+ }
44
+ export interface SaveError {
45
+ error: string;
46
+ }
47
+ /**
48
+ * Save flow code to ~/.poly-weaver/flows/<name>.mjs.
49
+ * - Creates directory if missing (mkdir -p)
50
+ * - If overwrite is true and file exists, creates .bak first
51
+ * - code should already be name-patched before calling this
52
+ */
53
+ export declare function saveFlow(opts: {
54
+ name: string;
55
+ code: string;
56
+ overwrite?: boolean;
57
+ dir?: string;
58
+ }): Promise<SaveResult | SaveError>;
59
+ //# sourceMappingURL=save.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"save.d.ts","sourceRoot":"","sources":["../../src/flow-editor/save.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAIzD;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,YAAY,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB,MAAM,EAAE,SAAS,EAAE,CAAC;CACrB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,uBAAuB,CAC3C,YAAY,EAAE,MAAM,EAAE,EACtB,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,oBAAoB,CAAC,CAiE/B;AAID;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,EAAE,GACrB,MAAM,GAAG,IAAI,CAKf;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,MAAM,EACZ,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CASxB;AAID,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;GAKG;AACH,wBAAsB,QAAQ,CAAC,IAAI,EAAE;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAmClC"}
@@ -0,0 +1,143 @@
1
+ import { readdir, readFile, writeFile, rename, mkdir, access } from "node:fs/promises";
2
+ import { join } from "node:path";
3
+ import { pathToFileURL } from "node:url";
4
+ import { validateTemplate } from "../flow/custom/index.js";
5
+ import { flowDSL } from "../dsl.js";
6
+ import { getFlowsDir } from "../config.js";
7
+ /**
8
+ * Load all custom flows from the flows directory, pairing each
9
+ * successfully loaded template with its file path and source code.
10
+ *
11
+ * Invariants enforced (matching loadAllFlows behavior):
12
+ * - Deduplication: if two files export the same template.name,
13
+ * the first one wins; the duplicate is added to `errors`.
14
+ * - Built-in shadow rejection: if template.name matches any name
15
+ * in builtinNames, the entry is excluded from `flows` and added
16
+ * to `errors` with a shadow-rejection message.
17
+ */
18
+ export async function loadEditableCustomFlows(builtinNames, dir) {
19
+ const flowsDir = dir ?? getFlowsDir();
20
+ const flows = [];
21
+ const errors = [];
22
+ const builtinSet = new Set(builtinNames);
23
+ let entries;
24
+ try {
25
+ entries = await readdir(flowsDir);
26
+ }
27
+ catch (err) {
28
+ if (err.code === "ENOENT") {
29
+ return { flows, errors };
30
+ }
31
+ errors.push({
32
+ file: flowsDir,
33
+ message: `Cannot read: ${err instanceof Error ? err.message : String(err)}`,
34
+ });
35
+ return { flows, errors };
36
+ }
37
+ const files = entries
38
+ .filter((f) => f.endsWith(".mjs") || f.endsWith(".js"))
39
+ .sort();
40
+ const seen = new Set();
41
+ for (const file of files) {
42
+ const fullPath = join(flowsDir, file);
43
+ try {
44
+ const sourceCode = await readFile(fullPath, "utf-8");
45
+ const url = pathToFileURL(fullPath).href + `?t=${Date.now()}`;
46
+ const mod = await import(url);
47
+ const factory = mod.default ?? mod.createTemplate;
48
+ if (typeof factory !== "function") {
49
+ throw new Error("No default export or createTemplate function");
50
+ }
51
+ const raw = factory(flowDSL);
52
+ const template = validateTemplate(raw, file);
53
+ // Reject built-in shadows
54
+ if (builtinSet.has(template.name)) {
55
+ errors.push({
56
+ file,
57
+ message: `Custom flow "${template.name}" shadows a built-in flow — skipped`,
58
+ });
59
+ continue;
60
+ }
61
+ // Dedup by template.name
62
+ if (seen.has(template.name)) {
63
+ errors.push({ file, message: `Duplicate name "${template.name}"` });
64
+ continue;
65
+ }
66
+ seen.add(template.name);
67
+ flows.push({ template, filePath: fullPath, sourceCode });
68
+ }
69
+ catch (err) {
70
+ errors.push({
71
+ file,
72
+ message: err instanceof Error ? err.message : String(err),
73
+ });
74
+ }
75
+ }
76
+ return { flows, errors };
77
+ }
78
+ // ─── Collision Detection ────────────────────────────────────────────────
79
+ /**
80
+ * Check if a name collides with a built-in flow.
81
+ * Returns error message string if collision, null otherwise.
82
+ */
83
+ export function checkBuiltinCollision(name, builtinNames) {
84
+ if (builtinNames.includes(name)) {
85
+ return `Name "${name}" is reserved (built-in flow)`;
86
+ }
87
+ return null;
88
+ }
89
+ /**
90
+ * Check if the target save file already exists on disk.
91
+ * Tests whether `<dir>/<name>.mjs` exists via fs.access().
92
+ * Returns the absolute file path if it exists, null otherwise.
93
+ */
94
+ export async function checkFileCollision(name, dir) {
95
+ const flowsDir = dir ?? getFlowsDir();
96
+ const targetPath = join(flowsDir, `${name}.mjs`);
97
+ try {
98
+ await access(targetPath);
99
+ return targetPath; // file exists → collision
100
+ }
101
+ catch {
102
+ return null; // file doesn't exist → no collision
103
+ }
104
+ }
105
+ /**
106
+ * Save flow code to ~/.poly-weaver/flows/<name>.mjs.
107
+ * - Creates directory if missing (mkdir -p)
108
+ * - If overwrite is true and file exists, creates .bak first
109
+ * - code should already be name-patched before calling this
110
+ */
111
+ export async function saveFlow(opts) {
112
+ const flowsDir = opts.dir ?? getFlowsDir();
113
+ const filePath = join(flowsDir, `${opts.name}.mjs`);
114
+ try {
115
+ await mkdir(flowsDir, { recursive: true });
116
+ // Check if file exists
117
+ let fileExists = false;
118
+ try {
119
+ await access(filePath);
120
+ fileExists = true;
121
+ }
122
+ catch {
123
+ // doesn't exist
124
+ }
125
+ if (fileExists && !opts.overwrite) {
126
+ return { error: `File "${opts.name}.mjs" already exists. Use overwrite option.` };
127
+ }
128
+ let backedUp;
129
+ if (fileExists && opts.overwrite) {
130
+ const bakPath = filePath + ".bak";
131
+ await rename(filePath, bakPath);
132
+ backedUp = bakPath;
133
+ }
134
+ await writeFile(filePath, opts.code, "utf-8");
135
+ return { filePath, backedUp };
136
+ }
137
+ catch (err) {
138
+ return {
139
+ error: `Save failed: ${err instanceof Error ? err.message : String(err)}`,
140
+ };
141
+ }
142
+ }
143
+ //# sourceMappingURL=save.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"save.js","sourceRoot":"","sources":["../../src/flow-editor/save.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ import type { FlowTemplate } from "../flow/types.js";
2
+ import { type TuiInputEvent } from "../startup-tui.js";
3
+ import type { TaskEditor } from "../startup-tui.js";
4
+ import { type ConfigField, type SelectField } from "../preview-panel.js";
5
+ import { type CustomFlowEntry } from "./save.js";
6
+ import type { LoadError } from "../flow/custom/index.js";
7
+ export type EditorPhase = "describe" | "revise" | "confirm-overwrite";
8
+ export type FocusTarget = "params" | "name" | "provider" | "editor";
9
+ export interface FlowEditorState {
10
+ mode: "create" | "modify";
11
+ phase: EditorPhase;
12
+ termRows: number;
13
+ termCols: number;
14
+ focus: FocusTarget;
15
+ paramIndex: number;
16
+ flowName: string;
17
+ nameCursor: number;
18
+ nameReplacePending: boolean;
19
+ providerField: SelectField;
20
+ editor: TaskEditor;
21
+ previewFields: ConfigField[];
22
+ previewTemplate: FlowTemplate;
23
+ flowSectionHeight: number;
24
+ generating: boolean;
25
+ generatedCode: string | null;
26
+ currentSourceCode: string;
27
+ spinnerFrame: number;
28
+ error: string | null;
29
+ statusMessage: string | null;
30
+ lastFailedCode: string | null;
31
+ lastValidationError: string | null;
32
+ overwriteTarget: string | null;
33
+ customFlows: CustomFlowEntry[];
34
+ selectedFlowIndex: number;
35
+ builtinNames: string[];
36
+ loaderErrors: LoadError[];
37
+ }
38
+ export declare class NoCustomFlowsError extends Error {
39
+ constructor();
40
+ }
41
+ export declare function buildCreateState(rows: number, cols: number): Promise<FlowEditorState>;
42
+ export declare function buildModifyState(rows: number, cols: number): Promise<FlowEditorState>;
43
+ export declare function render(state: FlowEditorState, out: NodeJS.WriteStream): void;
44
+ export type EditorResult = "handled" | "cancel" | {
45
+ type: "save";
46
+ result: unknown;
47
+ };
48
+ export declare function handleEvent(state: FlowEditorState, event: TuiInputEvent): EditorResult | Promise<EditorResult>;
49
+ export interface FlowEditorResult {
50
+ saved: boolean;
51
+ filePath?: string;
52
+ backedUp?: string;
53
+ }
54
+ export declare function showCreateFlowTui(): Promise<FlowEditorResult | null>;
55
+ export declare function showModifyFlowTui(): Promise<FlowEditorResult | null>;
56
+ //# sourceMappingURL=tui.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tui.d.ts","sourceRoot":"","sources":["../../src/flow-editor/tui.ts"],"names":[],"mappings":"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"}