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,107 @@
1
+ import { exec, execFile } from "node:child_process";
2
+ import { promisify } from "node:util";
3
+ import { parseVersion } from "./providers/version.js";
4
+ const execAsync = promisify(exec);
5
+ const execFileAsync = promisify(execFile);
6
+ /**
7
+ * Compute which CLI tools are needed based on the driver configuration.
8
+ * Shared by cli.ts and sanity-check.ts to avoid duplicating the logic.
9
+ */
10
+ export function computePreflightNeeds(opts) {
11
+ return {
12
+ needClaude: opts.planner === "claude" ||
13
+ opts.reviewer === "claude" ||
14
+ (!opts.planOnly && opts.implementor === "claude") ||
15
+ (!opts.planOnly && opts.simplifier === "claude"),
16
+ needCodex: opts.planner === "codex" ||
17
+ opts.reviewer === "codex" ||
18
+ (!opts.planOnly && opts.implementor === "codex") ||
19
+ (!opts.planOnly && opts.simplifier === "codex"),
20
+ needCopilot: opts.planner === "copilot" ||
21
+ opts.reviewer === "copilot" ||
22
+ (!opts.planOnly && opts.implementor === "copilot") ||
23
+ (!opts.planOnly && opts.simplifier === "copilot"),
24
+ };
25
+ }
26
+ /**
27
+ * Run preflight checks to verify required CLIs and dependencies are available.
28
+ */
29
+ export async function runPreflight(opts) {
30
+ const errors = [];
31
+ const versions = new Map();
32
+ // Check node-pty is loadable
33
+ try {
34
+ await import("node-pty");
35
+ }
36
+ catch {
37
+ errors.push("node-pty is not loadable. Ensure native dependencies are built:\n" +
38
+ " npm rebuild node-pty");
39
+ }
40
+ const checks = [];
41
+ if (opts.needClaude) {
42
+ checks.push(detectCliVersion("claude", ["--version"]).then((version) => {
43
+ if (version === false) {
44
+ errors.push("Claude Code CLI not found. Install it:\n" +
45
+ " npm install -g @anthropic-ai/claude-code");
46
+ }
47
+ else if (version) {
48
+ versions.set("claude", version);
49
+ }
50
+ }));
51
+ }
52
+ if (opts.needCodex) {
53
+ checks.push(detectCliVersion("codex", ["--version"]).then((version) => {
54
+ if (version === false) {
55
+ errors.push("Codex CLI not found. Install it:\n" +
56
+ " npm install -g @openai/codex");
57
+ }
58
+ else if (version) {
59
+ versions.set("codex", version);
60
+ }
61
+ }));
62
+ }
63
+ if (opts.needCopilot) {
64
+ checks.push(detectCliVersion("copilot", ["--version"]).then((version) => {
65
+ if (version === false) {
66
+ errors.push("GitHub Copilot CLI not found. Install it:\n" +
67
+ " winget install GitHub.CopilotCLI");
68
+ }
69
+ else if (version) {
70
+ versions.set("copilot", version);
71
+ }
72
+ }));
73
+ }
74
+ await Promise.all(checks);
75
+ return {
76
+ ok: errors.length === 0,
77
+ errors,
78
+ versions,
79
+ };
80
+ }
81
+ /**
82
+ * Run `<command> --version`, capture stdout, and parse the version string.
83
+ * Returns the parsed version string, undefined if CLI ran but version couldn't
84
+ * be parsed, or false if the CLI is not available.
85
+ */
86
+ async function detectCliVersion(command, args) {
87
+ try {
88
+ let stdout;
89
+ if (process.platform === "win32") {
90
+ // On Windows, globally-installed npm packages are .cmd shims that
91
+ // execFile cannot resolve without a shell.
92
+ const result = await execAsync(`${command} ${args.join(" ")}`, {
93
+ timeout: 10_000,
94
+ });
95
+ stdout = result.stdout;
96
+ }
97
+ else {
98
+ const result = await execFileAsync(command, args, { timeout: 10_000 });
99
+ stdout = result.stdout;
100
+ }
101
+ return parseVersion(stdout) ?? undefined;
102
+ }
103
+ catch {
104
+ return false;
105
+ }
106
+ }
107
+ //# sourceMappingURL=preflight.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preflight.js","sourceRoot":"","sources":["../src/preflight.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,87 @@
1
+ import type { TuiInputEvent, TaskEditor } from "./startup-tui.js";
2
+ import type { FlowParamValues, FlowStep, FlowTemplate } from "./flow/types.js";
3
+ export type SelectField = {
4
+ kind: "select";
5
+ label: string;
6
+ key: string;
7
+ options: string[];
8
+ value: string;
9
+ expanded: boolean;
10
+ expandedIndex: number;
11
+ };
12
+ export type NumberField = {
13
+ kind: "number";
14
+ label: string;
15
+ key: string;
16
+ value: number;
17
+ min: number;
18
+ max: number;
19
+ editing: boolean;
20
+ editBuffer: string;
21
+ };
22
+ export type ToggleField = {
23
+ kind: "toggle";
24
+ label: string;
25
+ key: string;
26
+ value: boolean;
27
+ };
28
+ export type ConfigField = SelectField | NumberField | ToggleField;
29
+ export declare const LABEL_WIDTH = 28;
30
+ export declare const FLOW_LABEL_ROWS = 1;
31
+ export declare const DIAGRAM_PADDING = 4;
32
+ /**
33
+ * Build ConfigField[] from template params. Does NOT include
34
+ * orthogonal toggles (yolo, opinionless, verbose) — callers
35
+ * append those separately if needed.
36
+ */
37
+ export declare function buildFieldsForTemplate(template: FlowTemplate, defaults: Record<string, unknown>, existingFields?: ConfigField[]): ConfigField[];
38
+ export declare function configRowCount(fields: ConfigField[]): number;
39
+ export declare function extractFlowValues(fields: ConfigField[], template: FlowTemplate): FlowParamValues;
40
+ export declare function diagramWidth(flow: {
41
+ steps: FlowStep[];
42
+ }, termCols: number, detailed?: boolean): number;
43
+ export declare function cycleSelectValue(field: SelectField, dir: number): void;
44
+ export declare function commitNumberEdit(field: NumberField): void;
45
+ /**
46
+ * Handle a field-level event (value changes, expanded select,
47
+ * number editing). Returns true if the event was consumed.
48
+ * Navigation (up/down/tab/escape) is NOT handled here — left
49
+ * to the calling TUI.
50
+ */
51
+ export declare function handleFieldEvent(fields: ConfigField[], index: number, event: TuiInputEvent): boolean;
52
+ /**
53
+ * Handle a text-editor event (insert, backspace, cursor movement).
54
+ * Returns `true` if the event was consumed by the editor.
55
+ * Returns `false` for events the caller must handle: submit, tab,
56
+ * escape, up-from-top-row.
57
+ */
58
+ export declare function handleTextEditorEvent(editor: TaskEditor, event: TuiInputEvent): boolean;
59
+ /**
60
+ * Render config field rows (indicators, labels, values, dropdowns).
61
+ */
62
+ export declare function renderConfigFields(fields: ConfigField[], focusedIndex: number, isConfigFocused: boolean, cols: number): string[];
63
+ /**
64
+ * Render flow diagram section: margin + Flow label + diagram lines.
65
+ */
66
+ export interface FlowSectionOpts {
67
+ templateName: string;
68
+ templateCount?: number;
69
+ templateIndex?: number;
70
+ detailed?: boolean;
71
+ nameColor?: string;
72
+ originHint?: string;
73
+ maxFlowNameLen?: number;
74
+ }
75
+ export declare function renderFlowSection(template: FlowTemplate, fields: ConfigField[], cols: number, opts: FlowSectionOpts): {
76
+ lines: string[];
77
+ flowSectionHeight: number;
78
+ };
79
+ /**
80
+ * Render task-editor lines with cursor inversion when focused.
81
+ */
82
+ export declare function renderEditorLines(editor: TaskEditor, height: number, isFocused: boolean, cols: number): string[];
83
+ /**
84
+ * Compute flow section height without rendering.
85
+ */
86
+ export declare function computeFlowSectionHeight(template: FlowTemplate, fields: ConfigField[], cols: number, detailed?: boolean, flowLabelOpts?: FlowSectionOpts): number;
87
+ //# sourceMappingURL=preview-panel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preview-panel.d.ts","sourceRoot":"","sources":["../src/preview-panel.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,418 @@
1
+ import { availableDriversForRole } from "./agents/registry.js";
2
+ import { diagramHeight, renderFlowDiagram, computeMinWidth, detailedDiagramHeight, renderDetailedFlowDiagram, computeDetailedMinWidth } from "./flow/diagram.js";
3
+ import { visibleLength, padToWidth, dim, bold, reset, green, invert } from "./ansi.js";
4
+ // ─── Constants ───────────────────────────────────────────────────────────
5
+ export const LABEL_WIDTH = 28;
6
+ export const FLOW_LABEL_ROWS = 1;
7
+ export const DIAGRAM_PADDING = 4;
8
+ // ─── Field Building ──────────────────────────────────────────────────────
9
+ /**
10
+ * Build ConfigField[] from template params. Does NOT include
11
+ * orthogonal toggles (yolo, opinionless, verbose) — callers
12
+ * append those separately if needed.
13
+ */
14
+ export function buildFieldsForTemplate(template, defaults, existingFields) {
15
+ const fields = [];
16
+ for (const param of template.params) {
17
+ const existing = existingFields?.find((f) => f.key === param.key);
18
+ const defaultVal = existing ? existing.value : defaults[param.key];
19
+ switch (param.type) {
20
+ case "driver": {
21
+ const dp = param;
22
+ const options = availableDriversForRole(dp.role);
23
+ fields.push({
24
+ kind: "select",
25
+ label: dp.label,
26
+ key: dp.key,
27
+ options,
28
+ value: defaultVal ?? dp.default,
29
+ expanded: false,
30
+ expandedIndex: 0,
31
+ });
32
+ break;
33
+ }
34
+ case "number": {
35
+ const np = param;
36
+ fields.push({
37
+ kind: "number",
38
+ label: np.label,
39
+ key: np.key,
40
+ value: defaultVal ?? np.default,
41
+ min: np.min ?? 1,
42
+ max: np.max ?? 99,
43
+ editing: false,
44
+ editBuffer: "",
45
+ });
46
+ break;
47
+ }
48
+ case "boolean": {
49
+ const bp = param;
50
+ fields.push({
51
+ kind: "toggle",
52
+ label: bp.label,
53
+ key: bp.key,
54
+ value: defaultVal ?? bp.default,
55
+ });
56
+ break;
57
+ }
58
+ }
59
+ }
60
+ return fields;
61
+ }
62
+ // ─── Field Utilities ─────────────────────────────────────────────────────
63
+ export function configRowCount(fields) {
64
+ let rows = 0;
65
+ for (const f of fields) {
66
+ rows += 1;
67
+ if (f.kind === "select" && f.expanded) {
68
+ rows += f.options.length;
69
+ }
70
+ }
71
+ return rows;
72
+ }
73
+ export function extractFlowValues(fields, template) {
74
+ const values = {};
75
+ for (const param of template.params) {
76
+ const field = fields.find((f) => f.key === param.key);
77
+ values[param.key] = field?.value ?? param.default;
78
+ }
79
+ return values;
80
+ }
81
+ export function diagramWidth(flow, termCols, detailed) {
82
+ const minW = detailed ? computeDetailedMinWidth(flow.steps) : computeMinWidth(flow.steps);
83
+ return Math.min(minW + DIAGRAM_PADDING, termCols - 4);
84
+ }
85
+ export function cycleSelectValue(field, dir) {
86
+ const idx = field.options.indexOf(field.value);
87
+ const next = idx + dir;
88
+ if (next >= 0 && next < field.options.length) {
89
+ field.value = field.options[next];
90
+ }
91
+ }
92
+ export function commitNumberEdit(field) {
93
+ const parsed = parseInt(field.editBuffer, 10);
94
+ if (Number.isFinite(parsed)) {
95
+ field.value = Math.max(field.min, Math.min(field.max, parsed));
96
+ }
97
+ field.editing = false;
98
+ field.editBuffer = "";
99
+ }
100
+ // ─── Field Event Handling ────────────────────────────────────────────────
101
+ /**
102
+ * Handle a field-level event (value changes, expanded select,
103
+ * number editing). Returns true if the event was consumed.
104
+ * Navigation (up/down/tab/escape) is NOT handled here — left
105
+ * to the calling TUI.
106
+ */
107
+ export function handleFieldEvent(fields, index, event) {
108
+ const field = fields[index];
109
+ // 1. Expanded select takes precedence
110
+ if (field.kind === "select" && field.expanded) {
111
+ return handleExpandedSelectEvent(field, event);
112
+ }
113
+ // 2. Number editing takes precedence
114
+ if (field.kind === "number" && field.editing) {
115
+ return handleNumberEditingEvent(field, event);
116
+ }
117
+ // 3. Value changes
118
+ switch (event.type) {
119
+ case "submit":
120
+ if (field.kind === "select") {
121
+ field.expanded = true;
122
+ field.expandedIndex = field.options.indexOf(field.value);
123
+ if (field.expandedIndex < 0)
124
+ field.expandedIndex = 0;
125
+ return true;
126
+ }
127
+ if (field.kind === "toggle") {
128
+ field.value = !field.value;
129
+ return true;
130
+ }
131
+ if (field.kind === "number") {
132
+ field.editing = true;
133
+ field.editBuffer = String(field.value);
134
+ return true;
135
+ }
136
+ return false;
137
+ case "left":
138
+ case "right":
139
+ return handleFieldAdjust(field, event.type === "left" ? -1 : 1);
140
+ case "insert":
141
+ if (field.kind === "number" && /^[0-9]$/.test(event.text)) {
142
+ field.editing = true;
143
+ field.editBuffer = event.text;
144
+ return true;
145
+ }
146
+ return false;
147
+ default:
148
+ return false; // navigation events pass through
149
+ }
150
+ }
151
+ function handleExpandedSelectEvent(field, event) {
152
+ switch (event.type) {
153
+ case "up":
154
+ if (field.expandedIndex > 0)
155
+ field.expandedIndex--;
156
+ return true;
157
+ case "down":
158
+ if (field.expandedIndex < field.options.length - 1)
159
+ field.expandedIndex++;
160
+ return true;
161
+ case "submit":
162
+ field.value = field.options[field.expandedIndex];
163
+ field.expanded = false;
164
+ return true;
165
+ case "escape":
166
+ field.expanded = false;
167
+ return true;
168
+ default:
169
+ return true; // consume all events while expanded
170
+ }
171
+ }
172
+ function handleNumberEditingEvent(field, event) {
173
+ switch (event.type) {
174
+ case "insert":
175
+ if (/^[0-9]$/.test(event.text)) {
176
+ field.editBuffer += event.text;
177
+ }
178
+ return true;
179
+ case "backspace":
180
+ field.editBuffer = field.editBuffer.slice(0, -1);
181
+ if (field.editBuffer === "") {
182
+ field.editing = false;
183
+ }
184
+ return true;
185
+ case "submit":
186
+ commitNumberEdit(field);
187
+ return true;
188
+ default:
189
+ // Commit and let the event pass through for navigation
190
+ commitNumberEdit(field);
191
+ return false;
192
+ }
193
+ }
194
+ function handleFieldAdjust(field, dir) {
195
+ if (field.kind === "number") {
196
+ field.value = dir < 0
197
+ ? Math.max(field.min, field.value - 1)
198
+ : Math.min(field.max, field.value + 1);
199
+ return true;
200
+ }
201
+ if (field.kind === "select") {
202
+ cycleSelectValue(field, dir);
203
+ return true;
204
+ }
205
+ if (field.kind === "toggle") {
206
+ field.value = !field.value;
207
+ return true;
208
+ }
209
+ return false;
210
+ }
211
+ // ─── Text Editor Event Handling ──────────────────────────────────────────
212
+ /**
213
+ * Handle a text-editor event (insert, backspace, cursor movement).
214
+ * Returns `true` if the event was consumed by the editor.
215
+ * Returns `false` for events the caller must handle: submit, tab,
216
+ * escape, up-from-top-row.
217
+ */
218
+ export function handleTextEditorEvent(editor, event) {
219
+ switch (event.type) {
220
+ case "insert": {
221
+ const line = editor.lines[editor.cursorRow];
222
+ editor.lines[editor.cursorRow] =
223
+ line.slice(0, editor.cursorCol) + event.text + line.slice(editor.cursorCol);
224
+ editor.cursorCol += event.text.length;
225
+ return true;
226
+ }
227
+ case "backspace": {
228
+ if (editor.cursorCol > 0) {
229
+ const line = editor.lines[editor.cursorRow];
230
+ editor.lines[editor.cursorRow] =
231
+ line.slice(0, editor.cursorCol - 1) + line.slice(editor.cursorCol);
232
+ editor.cursorCol--;
233
+ }
234
+ else if (editor.cursorRow > 0) {
235
+ const prevLine = editor.lines[editor.cursorRow - 1];
236
+ const curLine = editor.lines[editor.cursorRow];
237
+ editor.cursorCol = prevLine.length;
238
+ editor.lines[editor.cursorRow - 1] = prevLine + curLine;
239
+ editor.lines.splice(editor.cursorRow, 1);
240
+ editor.cursorRow--;
241
+ }
242
+ return true;
243
+ }
244
+ case "up":
245
+ if (editor.cursorRow > 0) {
246
+ editor.cursorRow--;
247
+ editor.cursorCol = Math.min(editor.cursorCol, editor.lines[editor.cursorRow].length);
248
+ return true;
249
+ }
250
+ return false; // caller handles up-from-top
251
+ case "down":
252
+ if (editor.cursorRow < editor.lines.length - 1) {
253
+ editor.cursorRow++;
254
+ editor.cursorCol = Math.min(editor.cursorCol, editor.lines[editor.cursorRow].length);
255
+ }
256
+ return true;
257
+ case "left":
258
+ if (editor.cursorCol > 0) {
259
+ editor.cursorCol--;
260
+ }
261
+ else if (editor.cursorRow > 0) {
262
+ editor.cursorRow--;
263
+ editor.cursorCol = editor.lines[editor.cursorRow].length;
264
+ }
265
+ return true;
266
+ case "right": {
267
+ const lineLen = editor.lines[editor.cursorRow].length;
268
+ if (editor.cursorCol < lineLen) {
269
+ editor.cursorCol++;
270
+ }
271
+ else if (editor.cursorRow < editor.lines.length - 1) {
272
+ editor.cursorRow++;
273
+ editor.cursorCol = 0;
274
+ }
275
+ return true;
276
+ }
277
+ default:
278
+ return false; // submit, tab, escape, shift-tab, ctrl+s, ctrl+c
279
+ }
280
+ }
281
+ // ─── Rendering ───────────────────────────────────────────────────────────
282
+ /**
283
+ * Render config field rows (indicators, labels, values, dropdowns).
284
+ */
285
+ export function renderConfigFields(fields, focusedIndex, isConfigFocused, cols) {
286
+ const lines = [];
287
+ const configDim = !isConfigFocused;
288
+ for (let i = 0; i < fields.length; i++) {
289
+ const field = fields[i];
290
+ const focused = isConfigFocused && focusedIndex === i;
291
+ const indicator = focused ? `${bold}▸${reset}` : `${dim}·${reset}`;
292
+ const labelStr = field.label.padEnd(LABEL_WIDTH);
293
+ const dimWrap = configDim ? dim : "";
294
+ const dimEnd = configDim ? reset : "";
295
+ let valueStr;
296
+ if (field.kind === "select") {
297
+ if (field.expanded) {
298
+ valueStr = `${field.value} ${bold}▴${reset}`;
299
+ }
300
+ else {
301
+ valueStr = `${field.value} ${dim}▾${reset}`;
302
+ }
303
+ }
304
+ else if (field.kind === "number") {
305
+ if (field.editing) {
306
+ valueStr = `${field.editBuffer}${dim}▏${reset}`;
307
+ }
308
+ else {
309
+ valueStr = `${dim}◀${reset} ${field.value} ${dim}▶${reset}`;
310
+ }
311
+ }
312
+ else {
313
+ valueStr = field.value
314
+ ? `${green}on${reset}`
315
+ : `${dim}off${reset}`;
316
+ }
317
+ lines.push(padToWidth(` ${indicator} ${dimWrap}${labelStr}${dimEnd}${valueStr}`, cols));
318
+ // Expanded dropdown options
319
+ if (field.kind === "select" && field.expanded) {
320
+ for (let j = 0; j < field.options.length; j++) {
321
+ const opt = field.options[j];
322
+ const optIndicator = j === field.expandedIndex ? `${bold}▸${reset}` : " ";
323
+ const highlight = j === field.expandedIndex ? bold : dim;
324
+ lines.push(padToWidth(`${"".padEnd(LABEL_WIDTH + 6)}${optIndicator} ${highlight}${opt}${reset}`, cols));
325
+ }
326
+ }
327
+ }
328
+ return lines;
329
+ }
330
+ function buildFlowLabelPrefix(opts) {
331
+ if (opts.templateCount && opts.templateCount > 1 && opts.templateIndex !== undefined) {
332
+ const idx = opts.templateIndex + 1;
333
+ const total = opts.templateCount;
334
+ return ` ${dim}Flow ${idx}/${total} (Shift+Tab):${reset} `;
335
+ }
336
+ return ` ${dim}Flow:${reset} `;
337
+ }
338
+ function buildFlowLabelLines(cols, opts) {
339
+ const prefix = buildFlowLabelPrefix(opts);
340
+ const name = opts.nameColor
341
+ ? `${opts.nameColor}${opts.templateName}${reset}`
342
+ : opts.templateName;
343
+ if (!opts.originHint) {
344
+ return [`${prefix}${name}`];
345
+ }
346
+ const paddedName = padToWidth(name, opts.maxFlowNameLen ?? visibleLength(opts.templateName));
347
+ const hint = `${dim}${opts.originHint}${reset}`;
348
+ const fullLabel = `${prefix}${paddedName} ${hint}`;
349
+ if (visibleLength(fullLabel) <= cols) {
350
+ return [fullLabel];
351
+ }
352
+ return [
353
+ `${prefix}${name}`,
354
+ `${" ".repeat(visibleLength(prefix))}${hint}`,
355
+ ];
356
+ }
357
+ export function renderFlowSection(template, fields, cols, opts) {
358
+ const values = extractFlowValues(fields, template);
359
+ const flow = template.build(values);
360
+ const dw = diagramWidth(flow, cols, opts.detailed);
361
+ const diagramLines = opts.detailed
362
+ ? renderDetailedFlowDiagram(flow, dw)
363
+ : renderFlowDiagram(flow, dw);
364
+ const flowLabelLines = buildFlowLabelLines(cols, opts);
365
+ // +1 for the blank margin row pushed below
366
+ const flowSectionHeight = 1 + flowLabelLines.length + diagramLines.length;
367
+ const lines = [];
368
+ // Margin between config and flow
369
+ lines.push(padToWidth("", cols));
370
+ // Flow label
371
+ for (const flowLabel of flowLabelLines) {
372
+ lines.push(padToWidth(flowLabel, cols));
373
+ }
374
+ // Diagram lines
375
+ for (const dl of diagramLines) {
376
+ lines.push(padToWidth(` ${dl}`, cols));
377
+ }
378
+ return { lines, flowSectionHeight };
379
+ }
380
+ /**
381
+ * Render task-editor lines with cursor inversion when focused.
382
+ */
383
+ export function renderEditorLines(editor, height, isFocused, cols) {
384
+ const lines = [];
385
+ for (let i = 0; i < height; i++) {
386
+ const lineIdx = editor.scrollOffset + i;
387
+ if (lineIdx < editor.lines.length) {
388
+ const lineText = editor.lines[lineIdx];
389
+ if (isFocused && lineIdx === editor.cursorRow) {
390
+ const before = lineText.slice(0, editor.cursorCol);
391
+ const cursorChar = lineText[editor.cursorCol] ?? " ";
392
+ const after = lineText.slice(editor.cursorCol + 1);
393
+ lines.push(padToWidth(` ${before}${invert}${cursorChar}${reset}${after}`, cols));
394
+ }
395
+ else {
396
+ lines.push(padToWidth(` ${lineText}`, cols));
397
+ }
398
+ }
399
+ else {
400
+ lines.push(padToWidth("", cols));
401
+ }
402
+ }
403
+ return lines;
404
+ }
405
+ /**
406
+ * Compute flow section height without rendering.
407
+ */
408
+ export function computeFlowSectionHeight(template, fields, cols, detailed, flowLabelOpts) {
409
+ const values = extractFlowValues(fields, template);
410
+ const flow = template.build(values);
411
+ const dw = diagramWidth(flow, cols, detailed);
412
+ const height = detailed ? detailedDiagramHeight(flow, dw) : diagramHeight(flow, dw);
413
+ const flowLabelRows = flowLabelOpts
414
+ ? buildFlowLabelLines(cols, flowLabelOpts).length
415
+ : FLOW_LABEL_ROWS;
416
+ return 1 + flowLabelRows + height;
417
+ }
418
+ //# sourceMappingURL=preview-panel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preview-panel.js","sourceRoot":"","sources":["../src/preview-panel.ts"],"names":[],"mappings":"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"}