@travisliu/open-dynamic-workflow 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (466) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/LICENSE +21 -0
  3. package/README.md +312 -0
  4. package/dist/agents/antigravity-cli.d.ts +19 -0
  5. package/dist/agents/antigravity-cli.js +177 -0
  6. package/dist/agents/antigravity-cli.js.map +1 -0
  7. package/dist/agents/codex-exec.d.ts +12 -0
  8. package/dist/agents/codex-exec.js +283 -0
  9. package/dist/agents/codex-exec.js.map +1 -0
  10. package/dist/agents/execute-agent.d.ts +21 -0
  11. package/dist/agents/execute-agent.js +593 -0
  12. package/dist/agents/execute-agent.js.map +1 -0
  13. package/dist/agents/execution-types.d.ts +20 -0
  14. package/dist/agents/execution-types.js +2 -0
  15. package/dist/agents/execution-types.js.map +1 -0
  16. package/dist/agents/gemini-cli.d.ts +14 -0
  17. package/dist/agents/gemini-cli.js +176 -0
  18. package/dist/agents/gemini-cli.js.map +1 -0
  19. package/dist/agents/github-copilot-cli.d.ts +16 -0
  20. package/dist/agents/github-copilot-cli.js +256 -0
  21. package/dist/agents/github-copilot-cli.js.map +1 -0
  22. package/dist/agents/mock-adapter.d.ts +12 -0
  23. package/dist/agents/mock-adapter.js +66 -0
  24. package/dist/agents/mock-adapter.js.map +1 -0
  25. package/dist/agents/model-args.d.ts +2 -0
  26. package/dist/agents/model-args.js +15 -0
  27. package/dist/agents/model-args.js.map +1 -0
  28. package/dist/agents/opencode-cli.d.ts +22 -0
  29. package/dist/agents/opencode-cli.js +245 -0
  30. package/dist/agents/opencode-cli.js.map +1 -0
  31. package/dist/agents/pi-coding-agent.d.ts +31 -0
  32. package/dist/agents/pi-coding-agent.js +317 -0
  33. package/dist/agents/pi-coding-agent.js.map +1 -0
  34. package/dist/agents/process-runner.d.ts +2 -0
  35. package/dist/agents/process-runner.js +130 -0
  36. package/dist/agents/process-runner.js.map +1 -0
  37. package/dist/agents/provider-health.d.ts +3 -0
  38. package/dist/agents/provider-health.js +30 -0
  39. package/dist/agents/provider-health.js.map +1 -0
  40. package/dist/agents/registry.d.ts +12 -0
  41. package/dist/agents/registry.js +45 -0
  42. package/dist/agents/registry.js.map +1 -0
  43. package/dist/agents/resolve-model.d.ts +11 -0
  44. package/dist/agents/resolve-model.js +30 -0
  45. package/dist/agents/resolve-model.js.map +1 -0
  46. package/dist/agents/types.d.ts +2 -0
  47. package/dist/agents/types.js +2 -0
  48. package/dist/agents/types.js.map +1 -0
  49. package/dist/artifacts/call-cache.d.ts +117 -0
  50. package/dist/artifacts/call-cache.js +449 -0
  51. package/dist/artifacts/call-cache.js.map +1 -0
  52. package/dist/artifacts/logs.d.ts +13 -0
  53. package/dist/artifacts/logs.js +24 -0
  54. package/dist/artifacts/logs.js.map +1 -0
  55. package/dist/artifacts/manifest.d.ts +18 -0
  56. package/dist/artifacts/manifest.js +29 -0
  57. package/dist/artifacts/manifest.js.map +1 -0
  58. package/dist/artifacts/run-store.d.ts +22 -0
  59. package/dist/artifacts/run-store.js +148 -0
  60. package/dist/artifacts/run-store.js.map +1 -0
  61. package/dist/bin/open-dynamic-workflow.d.ts +2 -0
  62. package/dist/bin/open-dynamic-workflow.js +45 -0
  63. package/dist/bin/open-dynamic-workflow.js.map +1 -0
  64. package/dist/cli/args.d.ts +36 -0
  65. package/dist/cli/args.js +68 -0
  66. package/dist/cli/args.js.map +1 -0
  67. package/dist/cli/commands/doctor.d.ts +9 -0
  68. package/dist/cli/commands/doctor.js +109 -0
  69. package/dist/cli/commands/doctor.js.map +1 -0
  70. package/dist/cli/commands/init.d.ts +23 -0
  71. package/dist/cli/commands/init.js +147 -0
  72. package/dist/cli/commands/init.js.map +1 -0
  73. package/dist/cli/commands/list.d.ts +12 -0
  74. package/dist/cli/commands/list.js +65 -0
  75. package/dist/cli/commands/list.js.map +1 -0
  76. package/dist/cli/commands/resume.d.ts +5 -0
  77. package/dist/cli/commands/resume.js +81 -0
  78. package/dist/cli/commands/resume.js.map +1 -0
  79. package/dist/cli/commands/run.d.ts +18 -0
  80. package/dist/cli/commands/run.js +318 -0
  81. package/dist/cli/commands/run.js.map +1 -0
  82. package/dist/cli/commands/validate.d.ts +14 -0
  83. package/dist/cli/commands/validate.js +66 -0
  84. package/dist/cli/commands/validate.js.map +1 -0
  85. package/dist/cli/index.d.ts +2 -0
  86. package/dist/cli/index.js +169 -0
  87. package/dist/cli/index.js.map +1 -0
  88. package/dist/cli/init/defaults.d.ts +12 -0
  89. package/dist/cli/init/defaults.js +54 -0
  90. package/dist/cli/init/defaults.js.map +1 -0
  91. package/dist/cli/init/planner.d.ts +10 -0
  92. package/dist/cli/init/planner.js +163 -0
  93. package/dist/cli/init/planner.js.map +1 -0
  94. package/dist/cli/init/prompts.d.ts +15 -0
  95. package/dist/cli/init/prompts.js +83 -0
  96. package/dist/cli/init/prompts.js.map +1 -0
  97. package/dist/cli/init/providers.d.ts +13 -0
  98. package/dist/cli/init/providers.js +100 -0
  99. package/dist/cli/init/providers.js.map +1 -0
  100. package/dist/cli/init/renderer.d.ts +8 -0
  101. package/dist/cli/init/renderer.js +84 -0
  102. package/dist/cli/init/renderer.js.map +1 -0
  103. package/dist/cli/init/smoke-test.d.ts +15 -0
  104. package/dist/cli/init/smoke-test.js +47 -0
  105. package/dist/cli/init/smoke-test.js.map +1 -0
  106. package/dist/cli/init/summary.d.ts +11 -0
  107. package/dist/cli/init/summary.js +65 -0
  108. package/dist/cli/init/summary.js.map +1 -0
  109. package/dist/cli/init/types.d.ts +81 -0
  110. package/dist/cli/init/types.js +2 -0
  111. package/dist/cli/init/types.js.map +1 -0
  112. package/dist/cli/init/writer.d.ts +3 -0
  113. package/dist/cli/init/writer.js +57 -0
  114. package/dist/cli/init/writer.js.map +1 -0
  115. package/dist/cli/package-info.d.ts +1 -0
  116. package/dist/cli/package-info.js +13 -0
  117. package/dist/cli/package-info.js.map +1 -0
  118. package/dist/cli/paths.d.ts +2 -0
  119. package/dist/cli/paths.js +8 -0
  120. package/dist/cli/paths.js.map +1 -0
  121. package/dist/cli/print.d.ts +22 -0
  122. package/dist/cli/print.js +48 -0
  123. package/dist/cli/print.js.map +1 -0
  124. package/dist/config/defaults.d.ts +3 -0
  125. package/dist/config/defaults.js +116 -0
  126. package/dist/config/defaults.js.map +1 -0
  127. package/dist/config/load.d.ts +10 -0
  128. package/dist/config/load.js +72 -0
  129. package/dist/config/load.js.map +1 -0
  130. package/dist/config/merge.d.ts +10 -0
  131. package/dist/config/merge.js +58 -0
  132. package/dist/config/merge.js.map +1 -0
  133. package/dist/config/schema.d.ts +2 -0
  134. package/dist/config/schema.js +236 -0
  135. package/dist/config/schema.js.map +1 -0
  136. package/dist/config/types.d.ts +93 -0
  137. package/dist/config/types.js +2 -0
  138. package/dist/config/types.js.map +1 -0
  139. package/dist/discovery/collect-files.d.ts +10 -0
  140. package/dist/discovery/collect-files.js +189 -0
  141. package/dist/discovery/collect-files.js.map +1 -0
  142. package/dist/discovery/definition-call.d.ts +10 -0
  143. package/dist/discovery/definition-call.js +37 -0
  144. package/dist/discovery/definition-call.js.map +1 -0
  145. package/dist/discovery/diagnostics.d.ts +17 -0
  146. package/dist/discovery/diagnostics.js +32 -0
  147. package/dist/discovery/diagnostics.js.map +1 -0
  148. package/dist/discovery/directories.d.ts +8 -0
  149. package/dist/discovery/directories.js +32 -0
  150. package/dist/discovery/directories.js.map +1 -0
  151. package/dist/discovery/duplicate-detector.d.ts +8 -0
  152. package/dist/discovery/duplicate-detector.js +40 -0
  153. package/dist/discovery/duplicate-detector.js.map +1 -0
  154. package/dist/discovery/extract-agent.d.ts +2 -0
  155. package/dist/discovery/extract-agent.js +166 -0
  156. package/dist/discovery/extract-agent.js.map +1 -0
  157. package/dist/discovery/extract-tool.d.ts +2 -0
  158. package/dist/discovery/extract-tool.js +188 -0
  159. package/dist/discovery/extract-tool.js.map +1 -0
  160. package/dist/discovery/extract-workflow.d.ts +2 -0
  161. package/dist/discovery/extract-workflow.js +180 -0
  162. package/dist/discovery/extract-workflow.js.map +1 -0
  163. package/dist/discovery/file-patterns.d.ts +3 -0
  164. package/dist/discovery/file-patterns.js +93 -0
  165. package/dist/discovery/file-patterns.js.map +1 -0
  166. package/dist/discovery/index.d.ts +7 -0
  167. package/dist/discovery/index.js +8 -0
  168. package/dist/discovery/index.js.map +1 -0
  169. package/dist/discovery/schema-summary.d.ts +13 -0
  170. package/dist/discovery/schema-summary.js +37 -0
  171. package/dist/discovery/schema-summary.js.map +1 -0
  172. package/dist/discovery/service.d.ts +4 -0
  173. package/dist/discovery/service.js +135 -0
  174. package/dist/discovery/service.js.map +1 -0
  175. package/dist/discovery/static-values.d.ts +13 -0
  176. package/dist/discovery/static-values.js +68 -0
  177. package/dist/discovery/static-values.js.map +1 -0
  178. package/dist/discovery/types.d.ts +95 -0
  179. package/dist/discovery/types.js +2 -0
  180. package/dist/discovery/types.js.map +1 -0
  181. package/dist/doctors/public.d.ts +15 -0
  182. package/dist/doctors/public.js +2 -0
  183. package/dist/doctors/public.js.map +1 -0
  184. package/dist/errors/codes.d.ts +53 -0
  185. package/dist/errors/codes.js +53 -0
  186. package/dist/errors/codes.js.map +1 -0
  187. package/dist/errors/exit-codes.d.ts +13 -0
  188. package/dist/errors/exit-codes.js +72 -0
  189. package/dist/errors/exit-codes.js.map +1 -0
  190. package/dist/errors/list-errors.d.ts +4 -0
  191. package/dist/errors/list-errors.js +11 -0
  192. package/dist/errors/list-errors.js.map +1 -0
  193. package/dist/errors/serialize.d.ts +2 -0
  194. package/dist/errors/serialize.js +38 -0
  195. package/dist/errors/serialize.js.map +1 -0
  196. package/dist/errors/types.d.ts +15 -0
  197. package/dist/errors/types.js +13 -0
  198. package/dist/errors/types.js.map +1 -0
  199. package/dist/index.d.ts +3 -0
  200. package/dist/index.js +3 -0
  201. package/dist/index.js.map +1 -0
  202. package/dist/orchestration/cancellation.d.ts +13 -0
  203. package/dist/orchestration/cancellation.js +41 -0
  204. package/dist/orchestration/cancellation.js.map +1 -0
  205. package/dist/orchestration/event-bus.d.ts +24 -0
  206. package/dist/orchestration/event-bus.js +50 -0
  207. package/dist/orchestration/event-bus.js.map +1 -0
  208. package/dist/orchestration/fail-fast.d.ts +8 -0
  209. package/dist/orchestration/fail-fast.js +21 -0
  210. package/dist/orchestration/fail-fast.js.map +1 -0
  211. package/dist/orchestration/scheduler.d.ts +37 -0
  212. package/dist/orchestration/scheduler.js +330 -0
  213. package/dist/orchestration/scheduler.js.map +1 -0
  214. package/dist/orchestration/tool-limiter.d.ts +10 -0
  215. package/dist/orchestration/tool-limiter.js +62 -0
  216. package/dist/orchestration/tool-limiter.js.map +1 -0
  217. package/dist/output/events.d.ts +290 -0
  218. package/dist/output/events.js +10 -0
  219. package/dist/output/events.js.map +1 -0
  220. package/dist/output/failed-artifacts.d.ts +5 -0
  221. package/dist/output/failed-artifacts.js +62 -0
  222. package/dist/output/failed-artifacts.js.map +1 -0
  223. package/dist/output/json-reporter.d.ts +13 -0
  224. package/dist/output/json-reporter.js +31 -0
  225. package/dist/output/json-reporter.js.map +1 -0
  226. package/dist/output/jsonl-reporter.d.ts +12 -0
  227. package/dist/output/jsonl-reporter.js +29 -0
  228. package/dist/output/jsonl-reporter.js.map +1 -0
  229. package/dist/output/list-json-reporter.d.ts +9 -0
  230. package/dist/output/list-json-reporter.js +22 -0
  231. package/dist/output/list-json-reporter.js.map +1 -0
  232. package/dist/output/list-jsonl-reporter.d.ts +9 -0
  233. package/dist/output/list-jsonl-reporter.js +43 -0
  234. package/dist/output/list-jsonl-reporter.js.map +1 -0
  235. package/dist/output/list-pretty-reporter.d.ts +13 -0
  236. package/dist/output/list-pretty-reporter.js +120 -0
  237. package/dist/output/list-pretty-reporter.js.map +1 -0
  238. package/dist/output/list-reporter.d.ts +14 -0
  239. package/dist/output/list-reporter.js +20 -0
  240. package/dist/output/list-reporter.js.map +1 -0
  241. package/dist/output/pretty-format.d.ts +19 -0
  242. package/dist/output/pretty-format.js +75 -0
  243. package/dist/output/pretty-format.js.map +1 -0
  244. package/dist/output/pretty-renderer.d.ts +2 -0
  245. package/dist/output/pretty-renderer.js +97 -0
  246. package/dist/output/pretty-renderer.js.map +1 -0
  247. package/dist/output/pretty-reporter.d.ts +14 -0
  248. package/dist/output/pretty-reporter.js +155 -0
  249. package/dist/output/pretty-reporter.js.map +1 -0
  250. package/dist/output/pretty-view-builder.d.ts +26 -0
  251. package/dist/output/pretty-view-builder.js +374 -0
  252. package/dist/output/pretty-view-builder.js.map +1 -0
  253. package/dist/output/pretty-view.d.ts +85 -0
  254. package/dist/output/pretty-view.js +6 -0
  255. package/dist/output/pretty-view.js.map +1 -0
  256. package/dist/output/reporter.d.ts +34 -0
  257. package/dist/output/reporter.js +24 -0
  258. package/dist/output/reporter.js.map +1 -0
  259. package/dist/output/verbose-formatter.d.ts +6 -0
  260. package/dist/output/verbose-formatter.js +137 -0
  261. package/dist/output/verbose-formatter.js.map +1 -0
  262. package/dist/pipeline/artifacts.d.ts +6 -0
  263. package/dist/pipeline/artifacts.js +44 -0
  264. package/dist/pipeline/artifacts.js.map +1 -0
  265. package/dist/pipeline/concurrency.d.ts +11 -0
  266. package/dist/pipeline/concurrency.js +60 -0
  267. package/dist/pipeline/concurrency.js.map +1 -0
  268. package/dist/pipeline/context.d.ts +15 -0
  269. package/dist/pipeline/context.js +17 -0
  270. package/dist/pipeline/context.js.map +1 -0
  271. package/dist/pipeline/events.d.ts +10 -0
  272. package/dist/pipeline/events.js +83 -0
  273. package/dist/pipeline/events.js.map +1 -0
  274. package/dist/pipeline/id.d.ts +10 -0
  275. package/dist/pipeline/id.js +61 -0
  276. package/dist/pipeline/id.js.map +1 -0
  277. package/dist/pipeline/item-streaming.d.ts +3 -0
  278. package/dist/pipeline/item-streaming.js +122 -0
  279. package/dist/pipeline/item-streaming.js.map +1 -0
  280. package/dist/pipeline/results.d.ts +10 -0
  281. package/dist/pipeline/results.js +88 -0
  282. package/dist/pipeline/results.js.map +1 -0
  283. package/dist/pipeline/run.d.ts +10 -0
  284. package/dist/pipeline/run.js +93 -0
  285. package/dist/pipeline/run.js.map +1 -0
  286. package/dist/pipeline/stage-barrier.d.ts +3 -0
  287. package/dist/pipeline/stage-barrier.js +135 -0
  288. package/dist/pipeline/stage-barrier.js.map +1 -0
  289. package/dist/pipeline/stage-runner.d.ts +13 -0
  290. package/dist/pipeline/stage-runner.js +185 -0
  291. package/dist/pipeline/stage-runner.js.map +1 -0
  292. package/dist/pipeline/summary.d.ts +12 -0
  293. package/dist/pipeline/summary.js +24 -0
  294. package/dist/pipeline/summary.js.map +1 -0
  295. package/dist/pipeline/types.d.ts +92 -0
  296. package/dist/pipeline/types.js +2 -0
  297. package/dist/pipeline/types.js.map +1 -0
  298. package/dist/pipeline/validate.d.ts +11 -0
  299. package/dist/pipeline/validate.js +139 -0
  300. package/dist/pipeline/validate.js.map +1 -0
  301. package/dist/runtime/public.d.ts +3 -0
  302. package/dist/runtime/public.js +4 -0
  303. package/dist/runtime/public.js.map +1 -0
  304. package/dist/security/env.d.ts +38 -0
  305. package/dist/security/env.js +186 -0
  306. package/dist/security/env.js.map +1 -0
  307. package/dist/security/metadata.d.ts +6 -0
  308. package/dist/security/metadata.js +41 -0
  309. package/dist/security/metadata.js.map +1 -0
  310. package/dist/shared-agents/context.d.ts +2 -0
  311. package/dist/shared-agents/context.js +5 -0
  312. package/dist/shared-agents/context.js.map +1 -0
  313. package/dist/shared-agents/define-agent.d.ts +3 -0
  314. package/dist/shared-agents/define-agent.js +15 -0
  315. package/dist/shared-agents/define-agent.js.map +1 -0
  316. package/dist/shared-agents/execute.d.ts +24 -0
  317. package/dist/shared-agents/execute.js +63 -0
  318. package/dist/shared-agents/execute.js.map +1 -0
  319. package/dist/shared-agents/index.d.ts +5 -0
  320. package/dist/shared-agents/index.js +6 -0
  321. package/dist/shared-agents/index.js.map +1 -0
  322. package/dist/shared-agents/load.d.ts +8 -0
  323. package/dist/shared-agents/load.js +141 -0
  324. package/dist/shared-agents/load.js.map +1 -0
  325. package/dist/shared-agents/registry.d.ts +8 -0
  326. package/dist/shared-agents/registry.js +25 -0
  327. package/dist/shared-agents/registry.js.map +1 -0
  328. package/dist/shared-agents/render.d.ts +11 -0
  329. package/dist/shared-agents/render.js +31 -0
  330. package/dist/shared-agents/render.js.map +1 -0
  331. package/dist/shared-agents/resolver.d.ts +7 -0
  332. package/dist/shared-agents/resolver.js +22 -0
  333. package/dist/shared-agents/resolver.js.map +1 -0
  334. package/dist/shared-agents/types.d.ts +33 -0
  335. package/dist/shared-agents/types.js +2 -0
  336. package/dist/shared-agents/types.js.map +1 -0
  337. package/dist/shared-agents/validate.d.ts +7 -0
  338. package/dist/shared-agents/validate.js +223 -0
  339. package/dist/shared-agents/validate.js.map +1 -0
  340. package/dist/structured/extract-json.d.ts +11 -0
  341. package/dist/structured/extract-json.js +79 -0
  342. package/dist/structured/extract-json.js.map +1 -0
  343. package/dist/structured/normalize-agent-output.d.ts +18 -0
  344. package/dist/structured/normalize-agent-output.js +89 -0
  345. package/dist/structured/normalize-agent-output.js.map +1 -0
  346. package/dist/structured/structured-output.d.ts +14 -0
  347. package/dist/structured/structured-output.js +51 -0
  348. package/dist/structured/structured-output.js.map +1 -0
  349. package/dist/structured/validate-json.d.ts +13 -0
  350. package/dist/structured/validate-json.js +32 -0
  351. package/dist/structured/validate-json.js.map +1 -0
  352. package/dist/tools/artifacts.d.ts +8 -0
  353. package/dist/tools/artifacts.js +31 -0
  354. package/dist/tools/artifacts.js.map +1 -0
  355. package/dist/tools/define-tool.d.ts +10 -0
  356. package/dist/tools/define-tool.js +24 -0
  357. package/dist/tools/define-tool.js.map +1 -0
  358. package/dist/tools/executor-types.d.ts +40 -0
  359. package/dist/tools/executor-types.js +2 -0
  360. package/dist/tools/executor-types.js.map +1 -0
  361. package/dist/tools/executor.d.ts +23 -0
  362. package/dist/tools/executor.js +455 -0
  363. package/dist/tools/executor.js.map +1 -0
  364. package/dist/tools/index.d.ts +6 -0
  365. package/dist/tools/index.js +5 -0
  366. package/dist/tools/index.js.map +1 -0
  367. package/dist/tools/load.d.ts +7 -0
  368. package/dist/tools/load.js +133 -0
  369. package/dist/tools/load.js.map +1 -0
  370. package/dist/tools/registry.d.ts +9 -0
  371. package/dist/tools/registry.js +97 -0
  372. package/dist/tools/registry.js.map +1 -0
  373. package/dist/tools/serialization.d.ts +11 -0
  374. package/dist/tools/serialization.js +68 -0
  375. package/dist/tools/serialization.js.map +1 -0
  376. package/dist/tools/validate.d.ts +18 -0
  377. package/dist/tools/validate.js +55 -0
  378. package/dist/tools/validate.js.map +1 -0
  379. package/dist/types/agent.d.ts +136 -0
  380. package/dist/types/agent.js +2 -0
  381. package/dist/types/agent.js.map +1 -0
  382. package/dist/types/artifacts.d.ts +88 -0
  383. package/dist/types/artifacts.js +2 -0
  384. package/dist/types/artifacts.js.map +1 -0
  385. package/dist/types/common.d.ts +15 -0
  386. package/dist/types/common.js +2 -0
  387. package/dist/types/common.js.map +1 -0
  388. package/dist/types/config.d.ts +119 -0
  389. package/dist/types/config.js +2 -0
  390. package/dist/types/config.js.map +1 -0
  391. package/dist/types/errors.d.ts +21 -0
  392. package/dist/types/errors.js +50 -0
  393. package/dist/types/errors.js.map +1 -0
  394. package/dist/types/events.d.ts +4 -0
  395. package/dist/types/events.js +2 -0
  396. package/dist/types/events.js.map +1 -0
  397. package/dist/types/index.d.ts +11 -0
  398. package/dist/types/index.js +12 -0
  399. package/dist/types/index.js.map +1 -0
  400. package/dist/types/process.d.ts +20 -0
  401. package/dist/types/process.js +2 -0
  402. package/dist/types/process.js.map +1 -0
  403. package/dist/types/reporter.d.ts +1 -0
  404. package/dist/types/reporter.js +2 -0
  405. package/dist/types/reporter.js.map +1 -0
  406. package/dist/types/scheduler.d.ts +30 -0
  407. package/dist/types/scheduler.js +2 -0
  408. package/dist/types/scheduler.js.map +1 -0
  409. package/dist/types/tool.d.ts +129 -0
  410. package/dist/types/tool.js +2 -0
  411. package/dist/types/tool.js.map +1 -0
  412. package/dist/types/workflow.d.ts +127 -0
  413. package/dist/types/workflow.js +2 -0
  414. package/dist/types/workflow.js.map +1 -0
  415. package/dist/workflow/discovery.d.ts +15 -0
  416. package/dist/workflow/discovery.js +134 -0
  417. package/dist/workflow/discovery.js.map +1 -0
  418. package/dist/workflow/dsl.d.ts +13 -0
  419. package/dist/workflow/dsl.js +683 -0
  420. package/dist/workflow/dsl.js.map +1 -0
  421. package/dist/workflow/errors.d.ts +18 -0
  422. package/dist/workflow/errors.js +33 -0
  423. package/dist/workflow/errors.js.map +1 -0
  424. package/dist/workflow/invocation-artifacts.d.ts +42 -0
  425. package/dist/workflow/invocation-artifacts.js +114 -0
  426. package/dist/workflow/invocation-artifacts.js.map +1 -0
  427. package/dist/workflow/invocation-manager.d.ts +31 -0
  428. package/dist/workflow/invocation-manager.js +516 -0
  429. package/dist/workflow/invocation-manager.js.map +1 -0
  430. package/dist/workflow/invocation-types.d.ts +63 -0
  431. package/dist/workflow/invocation-types.js +15 -0
  432. package/dist/workflow/invocation-types.js.map +1 -0
  433. package/dist/workflow/json.d.ts +10 -0
  434. package/dist/workflow/json.js +117 -0
  435. package/dist/workflow/json.js.map +1 -0
  436. package/dist/workflow/load.d.ts +2 -0
  437. package/dist/workflow/load.js +18 -0
  438. package/dist/workflow/load.js.map +1 -0
  439. package/dist/workflow/parse.d.ts +2 -0
  440. package/dist/workflow/parse.js +135 -0
  441. package/dist/workflow/parse.js.map +1 -0
  442. package/dist/workflow/registry.d.ts +18 -0
  443. package/dist/workflow/registry.js +55 -0
  444. package/dist/workflow/registry.js.map +1 -0
  445. package/dist/workflow/resolve-target.d.ts +45 -0
  446. package/dist/workflow/resolve-target.js +162 -0
  447. package/dist/workflow/resolve-target.js.map +1 -0
  448. package/dist/workflow/runtime.d.ts +46 -0
  449. package/dist/workflow/runtime.js +398 -0
  450. package/dist/workflow/runtime.js.map +1 -0
  451. package/dist/workflow/sandbox.d.ts +14 -0
  452. package/dist/workflow/sandbox.js +79 -0
  453. package/dist/workflow/sandbox.js.map +1 -0
  454. package/dist/workflow/scope.d.ts +18 -0
  455. package/dist/workflow/scope.js +108 -0
  456. package/dist/workflow/scope.js.map +1 -0
  457. package/dist/workflow/types.d.ts +65 -0
  458. package/dist/workflow/types.js +2 -0
  459. package/dist/workflow/types.js.map +1 -0
  460. package/dist/workflow/validate.d.ts +28 -0
  461. package/dist/workflow/validate.js +1059 -0
  462. package/dist/workflow/validate.js.map +1 -0
  463. package/dist/workflow/workflow-call.d.ts +12 -0
  464. package/dist/workflow/workflow-call.js +61 -0
  465. package/dist/workflow/workflow-call.js.map +1 -0
  466. package/package.json +67 -0
@@ -0,0 +1,169 @@
1
+ #!/usr/bin/env node
2
+ import path from "node:path";
3
+ import { Command } from "commander";
4
+ import { initCommand } from "./commands/init.js";
5
+ import { runCommand } from "./commands/run.js";
6
+ import { resumeCommand } from "./commands/resume.js";
7
+ import { validateCommand } from "./commands/validate.js";
8
+ import { doctorCommand } from "./commands/doctor.js";
9
+ import { listCommand } from "./commands/list.js";
10
+ import { OpenDynamicWorkflowError } from "../errors/types.js";
11
+ import { ErrorCode } from "../errors/codes.js";
12
+ import { getPackageVersion } from "./package-info.js";
13
+ function collectArgs(value, previous) {
14
+ return previous.concat([value]);
15
+ }
16
+ export async function main(argv) {
17
+ const program = new Command();
18
+ const version = await getPackageVersion();
19
+ // Detect if invoked via odw or the full name
20
+ const binName = argv[1] ? path.basename(argv[1]) : "odw";
21
+ const displayName = binName.startsWith("odw") ? "odw" : "open-dynamic-workflow";
22
+ program
23
+ .name(displayName)
24
+ .description("Orchestrate coding-agent CLI workflows (alias: odw)")
25
+ .version(version)
26
+ .exitOverride((err) => {
27
+ if (err.code === "commander.helpDisplayed" || err.code === "commander.help" || err.code === "commander.version") {
28
+ throw err;
29
+ }
30
+ // Throw CLI usage error on command parsing errors
31
+ throw new OpenDynamicWorkflowError(ErrorCode.CLI_USAGE_ERROR, err.message, { cause: err });
32
+ });
33
+ program
34
+ .command("init")
35
+ .description("Initialize a project for Open Dynamic Workflow")
36
+ .option("--yes", "Run non-interactively with defaults")
37
+ .option("--provider <name>", "Default provider for generated config")
38
+ .option("--force", "Overwrite generated files if they already exist")
39
+ .option("--strict", "Fail before writing if any target path already exists")
40
+ .option("--run-smoke-test", "Validate and run the generated example workflow with mock")
41
+ .option("-r, --report <mode>", "Smoke-test report mode (pretty, json)")
42
+ .option("--cwd <path>", "Project working directory")
43
+ .option("--workflows-dir <path>", "Generated workflows directory")
44
+ .option("--agents-dir <path>", "Shared agents directory")
45
+ .option("--tools-dir <path>", "Tools directory")
46
+ .addHelpText("after", `
47
+ Examples:
48
+ ${displayName} init
49
+ ${displayName} init --yes
50
+ ${displayName} init --yes --run-smoke-test
51
+ ${displayName} init --strict
52
+ ${displayName} init --force --provider codex
53
+ `)
54
+ .action(async (options) => {
55
+ await initCommand({ rawOptions: options });
56
+ });
57
+ program
58
+ .command("list [resourceType]")
59
+ .description("List discoverable workflows, shared agents, and tools")
60
+ .option("--dir <path>", "Directory to scan for targeted list commands")
61
+ .option("--workflows-dir <path>", "Directory to scan for workflows")
62
+ .option("--agents-dir <path>", "Directory to scan for shared agents")
63
+ .option("--tools-dir <path>", "Directory to scan for tools")
64
+ .option("-r, --report <mode>", "Output format (pretty, json, jsonl)")
65
+ .option("-v, --verbose", "Show extended metadata")
66
+ .option("--strict", "Fail if any discovered file is invalid")
67
+ .option("-c, --config <path>", "Path to config file")
68
+ .option("--cwd <path>", "Project working directory")
69
+ .addHelpText("after", `
70
+ Examples:
71
+ ${displayName} list
72
+ ${displayName} list workflows
73
+ ${displayName} list agents --verbose
74
+ ${displayName} list tools --report json
75
+ ${displayName} list --strict
76
+ ${displayName} list workflows --dir examples/workflows
77
+ `)
78
+ .action(async (resourceType, options) => {
79
+ await listCommand({ resourceType, rawOptions: options });
80
+ });
81
+ program
82
+ .command("run")
83
+ .argument("<workflow-name-or-file>", "Workflow name or workflow file path")
84
+ .option("-p, --provider <name>", "Default agent provider name")
85
+ .option("-m, --model <model>", "Default model for agent calls")
86
+ .option("-a, --arg <key=value>", "Workflow input argument (can be repeated)", collectArgs, [])
87
+ .option("-c, --config <path>", "Path to config file")
88
+ .option("--cwd <path>", "Custom working directory")
89
+ .option("-o, --out <path>", "Runs artifact directory")
90
+ .option("-r, --report <mode>", "Reporter mode (pretty, json, jsonl)")
91
+ .option("--concurrency <number>", "Maximum parallel concurrency")
92
+ .option("--timeout-ms <ms>", "Workflow run timeout in ms")
93
+ .option("--resume <run-id-or-path>", "Resume from a previous run cache")
94
+ .option("--no-cache", "Disable resume/cache lookup and cache index updates")
95
+ .option("--dry-run", "Validate and print summary without invoking providers")
96
+ .option("--fail-fast", "Stop immediately on first agent step failure")
97
+ .option("-v, --verbose", "Enable verbose logging")
98
+ .addHelpText("after", `
99
+ Examples:
100
+ ${displayName} run my-workflow
101
+ ${displayName} run my-workflow --provider gemini
102
+ ${displayName} run my-workflow --arg key1=val1 --arg key2=val2
103
+ ${displayName} run my-workflow --report json
104
+ ${displayName} run my-workflow --dry-run
105
+ `)
106
+ .action(async (workflowFile, options) => {
107
+ await runCommand({ workflowFile, rawOptions: options });
108
+ });
109
+ program
110
+ .command("resume")
111
+ .argument("<run-id-or-path>", "Previous run id or run directory path")
112
+ .option("--cwd <path>", "Custom working directory")
113
+ .option("-o, --out <path>", "Runs artifact directory")
114
+ .option("-r, --report <mode>", "Reporter mode (pretty, json, jsonl)")
115
+ .option("--no-cache", "Disable resume/cache lookup and cache index updates")
116
+ .addHelpText("after", `
117
+ Examples:
118
+ ${displayName} resume last-run
119
+ ${displayName} resume .open-dynamic-workflow/runs/2025-01-01T00-00-00Z
120
+ ${displayName} resume last-run --report pretty
121
+ `)
122
+ .action(async (runIdOrPath, options) => {
123
+ await resumeCommand({ runIdOrPath, rawOptions: options });
124
+ });
125
+ program
126
+ .command("validate")
127
+ .argument("<workflow-name-or-file>", "Workflow name or workflow file path")
128
+ .option("-c, --config <path>", "Path to config file")
129
+ .option("--cwd <path>", "Custom working directory")
130
+ .option("-v, --verbose", "Enable verbose logging")
131
+ .addHelpText("after", `
132
+ Examples:
133
+ ${displayName} validate my-workflow
134
+ ${displayName} validate workflows/my-workflow.ts
135
+ ${displayName} validate my-workflow --verbose
136
+ `)
137
+ .action(async (target, options) => {
138
+ if (!target) {
139
+ throw new OpenDynamicWorkflowError(ErrorCode.CLI_USAGE_ERROR, "Missing <workflow-name-or-file>");
140
+ }
141
+ await validateCommand({ workflowFile: target, rawOptions: options });
142
+ });
143
+ program
144
+ .command("doctor")
145
+ .option("-c, --config <path>", "Path to config file")
146
+ .option("--cwd <path>", "Custom working directory")
147
+ .option("-v, --verbose", "Enable verbose logging")
148
+ .addHelpText("after", `
149
+ Examples:
150
+ ${displayName} doctor
151
+ ${displayName} doctor --verbose
152
+ `)
153
+ .action(async (options) => {
154
+ await doctorCommand({ rawOptions: options });
155
+ });
156
+ let parseOptions = undefined;
157
+ if (argv.length >= 2 &&
158
+ (argv[0] === "node" ||
159
+ argv[0]?.endsWith("node") ||
160
+ argv[0]?.endsWith("npm") ||
161
+ argv[0]?.includes("/bin/"))) {
162
+ parseOptions = { from: "node" };
163
+ }
164
+ else {
165
+ parseOptions = { from: "user" };
166
+ }
167
+ await program.parseAsync(argv, parseOptions);
168
+ }
169
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { SupportedInitProvider, ProviderCandidate } from "./types.js";
2
+ export declare const SUPPORTED_INIT_PROVIDERS: SupportedInitProvider[];
3
+ export declare const RECOMMENDATION_ORDER: SupportedInitProvider[];
4
+ export declare const PROVIDER_CANDIDATES: Omit<ProviderCandidate, "detected">[];
5
+ export declare const DEFAULT_INIT_WORKFLOWS_DIR = "workflows";
6
+ export declare const DEFAULT_INIT_AGENTS_DIR = ".open-dynamic-workflow/agents";
7
+ export declare const DEFAULT_INIT_TOOLS_DIR = ".open-dynamic-workflow/tools";
8
+ export declare const DEFAULT_INIT_CONFIG_PATH = ".open-dynamic-workflow/config.yaml";
9
+ export declare const DEFAULT_INIT_EXAMPLE_FILE = "example.ts";
10
+ export declare function toDisplayPath(cwd: string, absolutePath: string): string;
11
+ export declare function resolveProjectPath(cwd: string, value: string, optionName: string): string;
12
+ export declare function workflowIncludePattern(workflowsDirDisplay: string): string;
@@ -0,0 +1,54 @@
1
+ import { join, isAbsolute, relative, normalize } from "node:path";
2
+ import { ErrorCode } from "../../errors/codes.js";
3
+ import { OpenDynamicWorkflowError } from "../../errors/types.js";
4
+ export const SUPPORTED_INIT_PROVIDERS = [
5
+ "mock",
6
+ "codex",
7
+ "gemini",
8
+ "copilot",
9
+ "opencode",
10
+ "antigravity",
11
+ "pi"
12
+ ];
13
+ export const RECOMMENDATION_ORDER = [
14
+ "codex",
15
+ "gemini",
16
+ "copilot",
17
+ "opencode",
18
+ "antigravity",
19
+ "pi",
20
+ "mock"
21
+ ];
22
+ export const PROVIDER_CANDIDATES = [
23
+ { name: "mock", command: null, builtIn: true, recommendedRank: 6 },
24
+ { name: "codex", command: "codex", builtIn: false, recommendedRank: 0 },
25
+ { name: "gemini", command: "gemini", builtIn: false, recommendedRank: 1 },
26
+ { name: "copilot", command: "copilot", builtIn: false, recommendedRank: 2 },
27
+ { name: "opencode", command: "opencode", builtIn: false, recommendedRank: 3 },
28
+ { name: "antigravity", command: "agy", builtIn: false, recommendedRank: 4 },
29
+ { name: "pi", command: "pi", builtIn: false, recommendedRank: 5 }
30
+ ];
31
+ export const DEFAULT_INIT_WORKFLOWS_DIR = "workflows";
32
+ export const DEFAULT_INIT_AGENTS_DIR = ".open-dynamic-workflow/agents";
33
+ export const DEFAULT_INIT_TOOLS_DIR = ".open-dynamic-workflow/tools";
34
+ export const DEFAULT_INIT_CONFIG_PATH = ".open-dynamic-workflow/config.yaml";
35
+ export const DEFAULT_INIT_EXAMPLE_FILE = "example.ts";
36
+ export function toDisplayPath(cwd, absolutePath) {
37
+ const rel = relative(cwd, absolutePath);
38
+ return rel.split(/[\\/]/).join("/") || ".";
39
+ }
40
+ export function resolveProjectPath(cwd, value, optionName) {
41
+ if (!value) {
42
+ throw new OpenDynamicWorkflowError(ErrorCode.CLI_USAGE_ERROR, `Option "${optionName}" cannot be empty.`);
43
+ }
44
+ const absolute = isAbsolute(value) ? normalize(value) : join(cwd, value);
45
+ const rel = relative(cwd, absolute);
46
+ if (rel.startsWith("..") || isAbsolute(rel)) {
47
+ throw new OpenDynamicWorkflowError(ErrorCode.CLI_USAGE_ERROR, `Path "${value}" for "${optionName}" must be inside the project directory "${cwd}".`);
48
+ }
49
+ return absolute;
50
+ }
51
+ export function workflowIncludePattern(workflowsDirDisplay) {
52
+ return `${workflowsDirDisplay}/**/*.ts`;
53
+ }
54
+ //# sourceMappingURL=defaults.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../../src/cli/init/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAGjE,MAAM,CAAC,MAAM,wBAAwB,GAA4B;IAC/D,MAAM;IACN,OAAO;IACP,QAAQ;IACR,SAAS;IACT,UAAU;IACV,aAAa;IACb,IAAI;CACL,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAA4B;IAC3D,OAAO;IACP,QAAQ;IACR,SAAS;IACT,UAAU;IACV,aAAa;IACb,IAAI;IACJ,MAAM;CACP,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAA0C;IACxE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,EAAE;IAClE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,EAAE;IACvE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,EAAE;IACzE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,EAAE;IAC3E,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,EAAE;IAC7E,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,EAAE;IAC3E,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,EAAE;CAClE,CAAC;AAEF,MAAM,CAAC,MAAM,0BAA0B,GAAG,WAAW,CAAC;AACtD,MAAM,CAAC,MAAM,uBAAuB,GAAG,+BAA+B,CAAC;AACvE,MAAM,CAAC,MAAM,sBAAsB,GAAG,8BAA8B,CAAC;AACrE,MAAM,CAAC,MAAM,wBAAwB,GAAG,oCAAoC,CAAC;AAC7E,MAAM,CAAC,MAAM,yBAAyB,GAAG,YAAY,CAAC;AAEtD,MAAM,UAAU,aAAa,CAAC,GAAW,EAAE,YAAoB;IAC7D,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IACxC,OAAO,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,GAAW,EAAE,KAAa,EAAE,UAAkB;IAC/E,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,wBAAwB,CAChC,SAAS,CAAC,eAAe,EACzB,WAAW,UAAU,oBAAoB,CAC1C,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACzE,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAEpC,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5C,MAAM,IAAI,wBAAwB,CAChC,SAAS,CAAC,eAAe,EACzB,SAAS,KAAK,UAAU,UAAU,2CAA2C,GAAG,IAAI,CACrF,CAAC;IACJ,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,mBAA2B;IAChE,OAAO,GAAG,mBAAmB,UAAU,CAAC;AAC1C,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { ResolvedInitOptions, ProviderSelection, InitPlan, InitTarget, InitWriteAction } from "./types.js";
2
+ export declare function buildInitPlan(input: {
3
+ options: ResolvedInitOptions;
4
+ providerSelection: ProviderSelection;
5
+ }): Promise<InitPlan>;
6
+ export declare function resolveAction(target: InitTarget, exists: boolean, options: ResolvedInitOptions): InitWriteAction;
7
+ export declare function buildNextSteps(input: {
8
+ options: ResolvedInitOptions;
9
+ providerSelection: ProviderSelection;
10
+ }): string[];
@@ -0,0 +1,163 @@
1
+ import { join, dirname, relative, sep } from "node:path";
2
+ import { stat } from "node:fs/promises";
3
+ import { toDisplayPath, DEFAULT_INIT_CONFIG_PATH, DEFAULT_INIT_EXAMPLE_FILE } from "./defaults.js";
4
+ import { buildGeneratedConfig, renderGeneratedConfigYaml, renderExampleWorkflow } from "./renderer.js";
5
+ export async function buildInitPlan(input) {
6
+ const { options, providerSelection } = input;
7
+ const { cwd } = options;
8
+ const config = buildGeneratedConfig({
9
+ options,
10
+ selectedProvider: providerSelection.defaultProvider
11
+ });
12
+ const configYaml = renderGeneratedConfigYaml(config);
13
+ const workflowContent = renderExampleWorkflow();
14
+ const targets = [
15
+ {
16
+ kind: "file",
17
+ path: join(cwd, DEFAULT_INIT_CONFIG_PATH),
18
+ displayPath: DEFAULT_INIT_CONFIG_PATH,
19
+ content: configYaml,
20
+ overwrite: options.force,
21
+ requiredForStrict: true
22
+ },
23
+ {
24
+ kind: "directory",
25
+ path: options.agentsDir,
26
+ displayPath: toDisplayPath(cwd, options.agentsDir),
27
+ overwrite: false,
28
+ requiredForStrict: true
29
+ },
30
+ {
31
+ kind: "directory",
32
+ path: options.toolsDir,
33
+ displayPath: toDisplayPath(cwd, options.toolsDir),
34
+ overwrite: false,
35
+ requiredForStrict: true
36
+ },
37
+ {
38
+ kind: "directory",
39
+ path: options.workflowsDir,
40
+ displayPath: toDisplayPath(cwd, options.workflowsDir),
41
+ overwrite: false,
42
+ requiredForStrict: true
43
+ },
44
+ {
45
+ kind: "file",
46
+ path: join(options.workflowsDir, DEFAULT_INIT_EXAMPLE_FILE),
47
+ displayPath: join(toDisplayPath(cwd, options.workflowsDir), DEFAULT_INIT_EXAMPLE_FILE).split(/[\\/]/).join("/"),
48
+ content: workflowContent,
49
+ overwrite: options.force,
50
+ requiredForStrict: true
51
+ }
52
+ ];
53
+ const plannedTargets = await Promise.all(targets.map(async (target) => {
54
+ let exists = false;
55
+ let existingKind;
56
+ try {
57
+ const stats = await stat(target.path);
58
+ exists = true;
59
+ if (stats.isDirectory()) {
60
+ existingKind = "directory";
61
+ }
62
+ else if (stats.isFile()) {
63
+ existingKind = "file";
64
+ }
65
+ else {
66
+ existingKind = "other";
67
+ }
68
+ }
69
+ catch {
70
+ // Does not exist
71
+ }
72
+ const action = resolveAction(target, exists, options);
73
+ let conflictReason;
74
+ if (target.kind === "directory" && exists && existingKind !== "directory") {
75
+ conflictReason = `Cannot reuse "${target.displayPath}" as a directory because it is a ${existingKind}.`;
76
+ }
77
+ return {
78
+ ...target,
79
+ exists,
80
+ existingKind,
81
+ action,
82
+ conflictReason
83
+ };
84
+ }));
85
+ // Secondary pass for all parent-path conflicts (including unplanned parents)
86
+ for (const target of plannedTargets) {
87
+ if (target.conflictReason)
88
+ continue;
89
+ const ancestors = getAncestors(cwd, target.path);
90
+ for (const ancestorPath of ancestors) {
91
+ try {
92
+ const stats = await stat(ancestorPath);
93
+ if (!stats.isDirectory()) {
94
+ const kind = stats.isFile() ? "file" : "other";
95
+ const ancestorDisplay = toDisplayPath(cwd, ancestorPath);
96
+ target.conflictReason = `Cannot create "${target.displayPath}" because parent path "${ancestorDisplay}" is a ${kind}, not a directory.`;
97
+ break;
98
+ }
99
+ }
100
+ catch {
101
+ // Parent does not exist, which is fine (it will be created)
102
+ }
103
+ }
104
+ }
105
+ const strictConflicts = options.strict
106
+ ? plannedTargets.filter((t) => t.requiredForStrict && t.exists)
107
+ : [];
108
+ const pathConflicts = plannedTargets.filter((t) => !!t.conflictReason);
109
+ const nextSteps = buildNextSteps({
110
+ options,
111
+ providerSelection
112
+ });
113
+ return {
114
+ cwd,
115
+ providerSelection,
116
+ targets: plannedTargets,
117
+ strictConflicts,
118
+ pathConflicts,
119
+ nextSteps
120
+ };
121
+ }
122
+ function getAncestors(cwd, targetPath) {
123
+ const ancestors = [];
124
+ let current = dirname(targetPath);
125
+ while (current !== cwd && current.length < targetPath.length) {
126
+ const rel = relative(cwd, current);
127
+ if (rel === ".." || rel.startsWith(".." + sep)) {
128
+ break;
129
+ }
130
+ ancestors.push(current);
131
+ const parent = dirname(current);
132
+ if (parent === current)
133
+ break;
134
+ current = parent;
135
+ }
136
+ return ancestors.reverse(); // Top-down
137
+ }
138
+ export function resolveAction(target, exists, options) {
139
+ if (target.kind === "directory") {
140
+ if (!exists)
141
+ return "create";
142
+ return "reuse-directory";
143
+ }
144
+ if (!exists)
145
+ return "create";
146
+ if (options.force)
147
+ return "overwrite";
148
+ return "skip";
149
+ }
150
+ export function buildNextSteps(input) {
151
+ const { options, providerSelection } = input;
152
+ const workflowPath = toDisplayPath(options.cwd, join(options.workflowsDir, DEFAULT_INIT_EXAMPLE_FILE));
153
+ const steps = [
154
+ "odw doctor",
155
+ `odw validate ${workflowPath}`,
156
+ `odw run ${workflowPath} --provider mock`
157
+ ];
158
+ if (providerSelection.defaultProvider !== "mock") {
159
+ steps.push(`odw run ${workflowPath} --provider ${providerSelection.defaultProvider}`);
160
+ }
161
+ return steps;
162
+ }
163
+ //# sourceMappingURL=planner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"planner.js","sourceRoot":"","sources":["../../../src/cli/init/planner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { ProviderCandidate, ProviderSelection, InitPlan } from "./types.js";
2
+ export interface PromptInput {
3
+ stdin: NodeJS.ReadStream;
4
+ stdout: NodeJS.WritableStream;
5
+ }
6
+ export declare function promptProviderSelection({ stdin, stdout, candidates }: PromptInput & {
7
+ candidates: ProviderCandidate[];
8
+ }): Promise<ProviderSelection | "cancel">;
9
+ export declare function promptUnavailableRequestedProvider({ stdin, stdout, requested, candidates }: PromptInput & {
10
+ requested: string;
11
+ candidates: ProviderCandidate[];
12
+ }): Promise<ProviderSelection | "cancel">;
13
+ export declare function confirmInitPlan({ stdin, stdout, plan }: PromptInput & {
14
+ plan: InitPlan;
15
+ }): Promise<boolean>;
@@ -0,0 +1,83 @@
1
+ import * as readline from "node:readline/promises";
2
+ export async function promptProviderSelection({ stdin, stdout, candidates }) {
3
+ const rl = readline.createInterface({ input: stdin, output: stdout });
4
+ stdout.write("Detected provider CLIs:\n");
5
+ candidates.forEach(c => {
6
+ const status = c.detected ? "✓" : "✕";
7
+ stdout.write(` ${status} ${c.name.padEnd(12)} ${c.command || ""}\n`);
8
+ });
9
+ stdout.write("\n");
10
+ const recommendation = candidates.find(c => c.detected && !c.builtIn)?.name || "mock";
11
+ stdout.write(`Recommended default provider: ${recommendation}\n`);
12
+ const options = candidates.map(c => c.name);
13
+ const prompt = `Choose a default provider (${options.join("/")}) [${recommendation}] or 'c' to cancel: `;
14
+ try {
15
+ const answer = (await rl.question(prompt)).trim().toLowerCase();
16
+ rl.close();
17
+ if (answer === "c" || answer === "cancel")
18
+ return "cancel";
19
+ if (answer === "")
20
+ return { defaultProvider: recommendation, selectedReason: "interactive-choice" };
21
+ const selected = candidates.find(c => c.name === answer);
22
+ if (selected) {
23
+ return {
24
+ defaultProvider: selected.name,
25
+ selectedReason: "interactive-choice"
26
+ };
27
+ }
28
+ stdout.write(`Invalid selection: ${answer}. Falling back to recommendation.\n`);
29
+ return { defaultProvider: recommendation, selectedReason: "interactive-choice" };
30
+ }
31
+ catch (err) {
32
+ rl.close();
33
+ return "cancel";
34
+ }
35
+ }
36
+ export async function promptUnavailableRequestedProvider({ stdin, stdout, requested, candidates }) {
37
+ const rl = readline.createInterface({ input: stdin, output: stdout });
38
+ stdout.write(`Warning: requested provider "${requested}" was not found in PATH.\n`);
39
+ const prompt = `Options: (1) Continue with ${requested} anyway, (2) Switch to mock, (c) Cancel: `;
40
+ try {
41
+ const answer = (await rl.question(prompt)).trim().toLowerCase();
42
+ rl.close();
43
+ if (answer === "1")
44
+ return {
45
+ defaultProvider: requested,
46
+ requestedProvider: requested,
47
+ selectedReason: "explicit-undetected-interactive-continue"
48
+ };
49
+ if (answer === "2")
50
+ return {
51
+ defaultProvider: "mock",
52
+ requestedProvider: requested,
53
+ selectedReason: "interactive-choice"
54
+ };
55
+ return "cancel";
56
+ }
57
+ catch (err) {
58
+ rl.close();
59
+ return "cancel";
60
+ }
61
+ }
62
+ export async function confirmInitPlan({ stdin, stdout, plan }) {
63
+ const rl = readline.createInterface({ input: stdin, output: stdout });
64
+ stdout.write("\nOpenDynamicWorkflow will create:\n");
65
+ plan.targets.forEach(t => {
66
+ if (t.action === "create" || t.action === "overwrite") {
67
+ stdout.write(` ${t.displayPath}\n`);
68
+ }
69
+ });
70
+ stdout.write(`\nDefault provider: ${plan.providerSelection.defaultProvider}\n`);
71
+ stdout.write("Existing files will be skipped.\n");
72
+ stdout.write("Package scripts will not be modified.\n");
73
+ try {
74
+ const answer = (await rl.question("\nContinue? (y/n) [y]: ")).trim().toLowerCase();
75
+ rl.close();
76
+ return answer === "" || answer === "y" || answer === "yes";
77
+ }
78
+ catch (err) {
79
+ rl.close();
80
+ return false;
81
+ }
82
+ }
83
+ //# sourceMappingURL=prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../../src/cli/init/prompts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { SupportedInitProvider, ProviderCandidate, ProviderSelection } from "./types.js";
2
+ export declare function isSupportedInitProvider(value: string): value is SupportedInitProvider;
3
+ export declare function isExecutableOnPath(command: string, envPath?: string, platform?: NodeJS.Platform): Promise<boolean>;
4
+ export declare function detectProviders(input?: {
5
+ envPath?: string;
6
+ platform?: NodeJS.Platform;
7
+ }): Promise<ProviderCandidate[]>;
8
+ export declare function recommendProvider(candidates: ProviderCandidate[]): SupportedInitProvider;
9
+ export declare function selectProviderNonInteractive(input: {
10
+ requestedProvider?: SupportedInitProvider;
11
+ candidates: ProviderCandidate[];
12
+ }): ProviderSelection;
13
+ export declare function findProviderCandidate(candidates: ProviderCandidate[], provider: SupportedInitProvider): ProviderCandidate | undefined;