@generacy-ai/workflow-engine 0.0.0-preview-20260304013206

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 (347) hide show
  1. package/LICENSE +191 -0
  2. package/README.md +265 -0
  3. package/dist/actions/base-action.d.ts +63 -0
  4. package/dist/actions/base-action.d.ts.map +1 -0
  5. package/dist/actions/base-action.js +130 -0
  6. package/dist/actions/base-action.js.map +1 -0
  7. package/dist/actions/builtin/agent-invoke.d.ts +16 -0
  8. package/dist/actions/builtin/agent-invoke.d.ts.map +1 -0
  9. package/dist/actions/builtin/agent-invoke.js +108 -0
  10. package/dist/actions/builtin/agent-invoke.js.map +1 -0
  11. package/dist/actions/builtin/humancy-api-handler.d.ts +191 -0
  12. package/dist/actions/builtin/humancy-api-handler.d.ts.map +1 -0
  13. package/dist/actions/builtin/humancy-api-handler.js +521 -0
  14. package/dist/actions/builtin/humancy-api-handler.js.map +1 -0
  15. package/dist/actions/builtin/humancy-review.d.ts +83 -0
  16. package/dist/actions/builtin/humancy-review.d.ts.map +1 -0
  17. package/dist/actions/builtin/humancy-review.js +250 -0
  18. package/dist/actions/builtin/humancy-review.js.map +1 -0
  19. package/dist/actions/builtin/pr-create.d.ts +16 -0
  20. package/dist/actions/builtin/pr-create.d.ts.map +1 -0
  21. package/dist/actions/builtin/pr-create.js +110 -0
  22. package/dist/actions/builtin/pr-create.js.map +1 -0
  23. package/dist/actions/builtin/shell.d.ts +16 -0
  24. package/dist/actions/builtin/shell.d.ts.map +1 -0
  25. package/dist/actions/builtin/shell.js +80 -0
  26. package/dist/actions/builtin/shell.js.map +1 -0
  27. package/dist/actions/builtin/speckit/index.d.ts +47 -0
  28. package/dist/actions/builtin/speckit/index.d.ts.map +1 -0
  29. package/dist/actions/builtin/speckit/index.js +347 -0
  30. package/dist/actions/builtin/speckit/index.js.map +1 -0
  31. package/dist/actions/builtin/speckit/lib/feature.d.ts +17 -0
  32. package/dist/actions/builtin/speckit/lib/feature.d.ts.map +1 -0
  33. package/dist/actions/builtin/speckit/lib/feature.js +430 -0
  34. package/dist/actions/builtin/speckit/lib/feature.js.map +1 -0
  35. package/dist/actions/builtin/speckit/lib/fs.d.ts +62 -0
  36. package/dist/actions/builtin/speckit/lib/fs.d.ts.map +1 -0
  37. package/dist/actions/builtin/speckit/lib/fs.js +181 -0
  38. package/dist/actions/builtin/speckit/lib/fs.js.map +1 -0
  39. package/dist/actions/builtin/speckit/lib/paths.d.ts +7 -0
  40. package/dist/actions/builtin/speckit/lib/paths.d.ts.map +1 -0
  41. package/dist/actions/builtin/speckit/lib/paths.js +161 -0
  42. package/dist/actions/builtin/speckit/lib/paths.js.map +1 -0
  43. package/dist/actions/builtin/speckit/lib/prereqs.d.ts +8 -0
  44. package/dist/actions/builtin/speckit/lib/prereqs.d.ts.map +1 -0
  45. package/dist/actions/builtin/speckit/lib/prereqs.js +194 -0
  46. package/dist/actions/builtin/speckit/lib/prereqs.js.map +1 -0
  47. package/dist/actions/builtin/speckit/lib/stream-batcher.d.ts +14 -0
  48. package/dist/actions/builtin/speckit/lib/stream-batcher.d.ts.map +1 -0
  49. package/dist/actions/builtin/speckit/lib/stream-batcher.js +31 -0
  50. package/dist/actions/builtin/speckit/lib/stream-batcher.js.map +1 -0
  51. package/dist/actions/builtin/speckit/lib/templates.d.ts +15 -0
  52. package/dist/actions/builtin/speckit/lib/templates.d.ts.map +1 -0
  53. package/dist/actions/builtin/speckit/lib/templates.js +176 -0
  54. package/dist/actions/builtin/speckit/lib/templates.js.map +1 -0
  55. package/dist/actions/builtin/speckit/operations/check-prereqs.d.ts +11 -0
  56. package/dist/actions/builtin/speckit/operations/check-prereqs.d.ts.map +1 -0
  57. package/dist/actions/builtin/speckit/operations/check-prereqs.js +22 -0
  58. package/dist/actions/builtin/speckit/operations/check-prereqs.js.map +1 -0
  59. package/dist/actions/builtin/speckit/operations/clarify.d.ts +7 -0
  60. package/dist/actions/builtin/speckit/operations/clarify.d.ts.map +1 -0
  61. package/dist/actions/builtin/speckit/operations/clarify.js +302 -0
  62. package/dist/actions/builtin/speckit/operations/clarify.js.map +1 -0
  63. package/dist/actions/builtin/speckit/operations/copy-template.d.ts +11 -0
  64. package/dist/actions/builtin/speckit/operations/copy-template.d.ts.map +1 -0
  65. package/dist/actions/builtin/speckit/operations/copy-template.js +23 -0
  66. package/dist/actions/builtin/speckit/operations/copy-template.js.map +1 -0
  67. package/dist/actions/builtin/speckit/operations/create-feature.d.ts +11 -0
  68. package/dist/actions/builtin/speckit/operations/create-feature.d.ts.map +1 -0
  69. package/dist/actions/builtin/speckit/operations/create-feature.js +25 -0
  70. package/dist/actions/builtin/speckit/operations/create-feature.js.map +1 -0
  71. package/dist/actions/builtin/speckit/operations/get-paths.d.ts +11 -0
  72. package/dist/actions/builtin/speckit/operations/get-paths.d.ts.map +1 -0
  73. package/dist/actions/builtin/speckit/operations/get-paths.js +17 -0
  74. package/dist/actions/builtin/speckit/operations/get-paths.js.map +1 -0
  75. package/dist/actions/builtin/speckit/operations/implement.d.ts +7 -0
  76. package/dist/actions/builtin/speckit/operations/implement.d.ts.map +1 -0
  77. package/dist/actions/builtin/speckit/operations/implement.js +246 -0
  78. package/dist/actions/builtin/speckit/operations/implement.js.map +1 -0
  79. package/dist/actions/builtin/speckit/operations/plan.d.ts +7 -0
  80. package/dist/actions/builtin/speckit/operations/plan.d.ts.map +1 -0
  81. package/dist/actions/builtin/speckit/operations/plan.js +253 -0
  82. package/dist/actions/builtin/speckit/operations/plan.js.map +1 -0
  83. package/dist/actions/builtin/speckit/operations/specify.d.ts +7 -0
  84. package/dist/actions/builtin/speckit/operations/specify.d.ts.map +1 -0
  85. package/dist/actions/builtin/speckit/operations/specify.js +178 -0
  86. package/dist/actions/builtin/speckit/operations/specify.js.map +1 -0
  87. package/dist/actions/builtin/speckit/operations/tasks-to-issues.d.ts +42 -0
  88. package/dist/actions/builtin/speckit/operations/tasks-to-issues.d.ts.map +1 -0
  89. package/dist/actions/builtin/speckit/operations/tasks-to-issues.js +386 -0
  90. package/dist/actions/builtin/speckit/operations/tasks-to-issues.js.map +1 -0
  91. package/dist/actions/builtin/speckit/operations/tasks.d.ts +7 -0
  92. package/dist/actions/builtin/speckit/operations/tasks.d.ts.map +1 -0
  93. package/dist/actions/builtin/speckit/operations/tasks.js +234 -0
  94. package/dist/actions/builtin/speckit/operations/tasks.js.map +1 -0
  95. package/dist/actions/builtin/speckit/types.d.ts +268 -0
  96. package/dist/actions/builtin/speckit/types.d.ts.map +1 -0
  97. package/dist/actions/builtin/speckit/types.js +11 -0
  98. package/dist/actions/builtin/speckit/types.js.map +1 -0
  99. package/dist/actions/builtin/verification-check.d.ts +16 -0
  100. package/dist/actions/builtin/verification-check.d.ts.map +1 -0
  101. package/dist/actions/builtin/verification-check.js +99 -0
  102. package/dist/actions/builtin/verification-check.js.map +1 -0
  103. package/dist/actions/builtin/workspace-prepare.d.ts +16 -0
  104. package/dist/actions/builtin/workspace-prepare.d.ts.map +1 -0
  105. package/dist/actions/builtin/workspace-prepare.js +108 -0
  106. package/dist/actions/builtin/workspace-prepare.js.map +1 -0
  107. package/dist/actions/cli-utils.d.ts +76 -0
  108. package/dist/actions/cli-utils.d.ts.map +1 -0
  109. package/dist/actions/cli-utils.js +278 -0
  110. package/dist/actions/cli-utils.js.map +1 -0
  111. package/dist/actions/epic/check-completion.d.ts +14 -0
  112. package/dist/actions/epic/check-completion.d.ts.map +1 -0
  113. package/dist/actions/epic/check-completion.js +57 -0
  114. package/dist/actions/epic/check-completion.js.map +1 -0
  115. package/dist/actions/epic/close.d.ts +18 -0
  116. package/dist/actions/epic/close.d.ts.map +1 -0
  117. package/dist/actions/epic/close.js +76 -0
  118. package/dist/actions/epic/close.js.map +1 -0
  119. package/dist/actions/epic/create-pr.d.ts +22 -0
  120. package/dist/actions/epic/create-pr.d.ts.map +1 -0
  121. package/dist/actions/epic/create-pr.js +140 -0
  122. package/dist/actions/epic/create-pr.js.map +1 -0
  123. package/dist/actions/epic/dispatch-children.d.ts +16 -0
  124. package/dist/actions/epic/dispatch-children.d.ts.map +1 -0
  125. package/dist/actions/epic/dispatch-children.js +95 -0
  126. package/dist/actions/epic/dispatch-children.js.map +1 -0
  127. package/dist/actions/epic/find-children.d.ts +16 -0
  128. package/dist/actions/epic/find-children.d.ts.map +1 -0
  129. package/dist/actions/epic/find-children.js +92 -0
  130. package/dist/actions/epic/find-children.js.map +1 -0
  131. package/dist/actions/epic/index.d.ts +20 -0
  132. package/dist/actions/epic/index.d.ts.map +1 -0
  133. package/dist/actions/epic/index.js +35 -0
  134. package/dist/actions/epic/index.js.map +1 -0
  135. package/dist/actions/epic/post-tasks-summary.d.ts +18 -0
  136. package/dist/actions/epic/post-tasks-summary.d.ts.map +1 -0
  137. package/dist/actions/epic/post-tasks-summary.js +123 -0
  138. package/dist/actions/epic/post-tasks-summary.js.map +1 -0
  139. package/dist/actions/epic/update-status.d.ts +22 -0
  140. package/dist/actions/epic/update-status.d.ts.map +1 -0
  141. package/dist/actions/epic/update-status.js +105 -0
  142. package/dist/actions/epic/update-status.js.map +1 -0
  143. package/dist/actions/github/add-comment.d.ts +14 -0
  144. package/dist/actions/github/add-comment.d.ts.map +1 -0
  145. package/dist/actions/github/add-comment.js +44 -0
  146. package/dist/actions/github/add-comment.js.map +1 -0
  147. package/dist/actions/github/client/gh-cli.d.ts +68 -0
  148. package/dist/actions/github/client/gh-cli.d.ts.map +1 -0
  149. package/dist/actions/github/client/gh-cli.js +781 -0
  150. package/dist/actions/github/client/gh-cli.js.map +1 -0
  151. package/dist/actions/github/client/index.d.ts +12 -0
  152. package/dist/actions/github/client/index.d.ts.map +1 -0
  153. package/dist/actions/github/client/index.js +10 -0
  154. package/dist/actions/github/client/index.js.map +1 -0
  155. package/dist/actions/github/client/interface.d.ts +270 -0
  156. package/dist/actions/github/client/interface.d.ts.map +1 -0
  157. package/dist/actions/github/client/interface.js +2 -0
  158. package/dist/actions/github/client/interface.js.map +1 -0
  159. package/dist/actions/github/commit-and-push.d.ts +19 -0
  160. package/dist/actions/github/commit-and-push.d.ts.map +1 -0
  161. package/dist/actions/github/commit-and-push.js +86 -0
  162. package/dist/actions/github/commit-and-push.js.map +1 -0
  163. package/dist/actions/github/create-draft-pr.d.ts +18 -0
  164. package/dist/actions/github/create-draft-pr.d.ts.map +1 -0
  165. package/dist/actions/github/create-draft-pr.js +76 -0
  166. package/dist/actions/github/create-draft-pr.js.map +1 -0
  167. package/dist/actions/github/get-context.d.ts +23 -0
  168. package/dist/actions/github/get-context.d.ts.map +1 -0
  169. package/dist/actions/github/get-context.js +109 -0
  170. package/dist/actions/github/get-context.js.map +1 -0
  171. package/dist/actions/github/index.d.ts +32 -0
  172. package/dist/actions/github/index.d.ts.map +1 -0
  173. package/dist/actions/github/index.js +67 -0
  174. package/dist/actions/github/index.js.map +1 -0
  175. package/dist/actions/github/label-definitions.d.ts +19 -0
  176. package/dist/actions/github/label-definitions.d.ts.map +1 -0
  177. package/dist/actions/github/label-definitions.js +71 -0
  178. package/dist/actions/github/label-definitions.js.map +1 -0
  179. package/dist/actions/github/mark-pr-ready.d.ts +14 -0
  180. package/dist/actions/github/mark-pr-ready.d.ts.map +1 -0
  181. package/dist/actions/github/mark-pr-ready.js +43 -0
  182. package/dist/actions/github/mark-pr-ready.js.map +1 -0
  183. package/dist/actions/github/merge-from-base.d.ts +15 -0
  184. package/dist/actions/github/merge-from-base.d.ts.map +1 -0
  185. package/dist/actions/github/merge-from-base.js +120 -0
  186. package/dist/actions/github/merge-from-base.js.map +1 -0
  187. package/dist/actions/github/preflight.d.ts +36 -0
  188. package/dist/actions/github/preflight.d.ts.map +1 -0
  189. package/dist/actions/github/preflight.js +292 -0
  190. package/dist/actions/github/preflight.js.map +1 -0
  191. package/dist/actions/github/read-pr-feedback.d.ts +14 -0
  192. package/dist/actions/github/read-pr-feedback.d.ts.map +1 -0
  193. package/dist/actions/github/read-pr-feedback.js +53 -0
  194. package/dist/actions/github/read-pr-feedback.js.map +1 -0
  195. package/dist/actions/github/respond-pr-feedback.d.ts +14 -0
  196. package/dist/actions/github/respond-pr-feedback.d.ts.map +1 -0
  197. package/dist/actions/github/respond-pr-feedback.js +58 -0
  198. package/dist/actions/github/respond-pr-feedback.js.map +1 -0
  199. package/dist/actions/github/review-changes.d.ts +19 -0
  200. package/dist/actions/github/review-changes.d.ts.map +1 -0
  201. package/dist/actions/github/review-changes.js +95 -0
  202. package/dist/actions/github/review-changes.js.map +1 -0
  203. package/dist/actions/github/sync-labels.d.ts +14 -0
  204. package/dist/actions/github/sync-labels.d.ts.map +1 -0
  205. package/dist/actions/github/sync-labels.js +81 -0
  206. package/dist/actions/github/sync-labels.js.map +1 -0
  207. package/dist/actions/github/update-pr.d.ts +14 -0
  208. package/dist/actions/github/update-pr.d.ts.map +1 -0
  209. package/dist/actions/github/update-pr.js +63 -0
  210. package/dist/actions/github/update-pr.js.map +1 -0
  211. package/dist/actions/index.d.ts +109 -0
  212. package/dist/actions/index.d.ts.map +1 -0
  213. package/dist/actions/index.js +233 -0
  214. package/dist/actions/index.js.map +1 -0
  215. package/dist/actions/workflow/check-gate.d.ts +15 -0
  216. package/dist/actions/workflow/check-gate.d.ts.map +1 -0
  217. package/dist/actions/workflow/check-gate.js +75 -0
  218. package/dist/actions/workflow/check-gate.js.map +1 -0
  219. package/dist/actions/workflow/index.d.ts +21 -0
  220. package/dist/actions/workflow/index.d.ts.map +1 -0
  221. package/dist/actions/workflow/index.js +31 -0
  222. package/dist/actions/workflow/index.js.map +1 -0
  223. package/dist/actions/workflow/update-phase.d.ts +15 -0
  224. package/dist/actions/workflow/update-phase.d.ts.map +1 -0
  225. package/dist/actions/workflow/update-phase.js +143 -0
  226. package/dist/actions/workflow/update-phase.js.map +1 -0
  227. package/dist/actions/workflow/update-stage.d.ts +19 -0
  228. package/dist/actions/workflow/update-stage.d.ts.map +1 -0
  229. package/dist/actions/workflow/update-stage.js +137 -0
  230. package/dist/actions/workflow/update-stage.js.map +1 -0
  231. package/dist/errors/base-workflow-not-found.d.ts +10 -0
  232. package/dist/errors/base-workflow-not-found.d.ts.map +1 -0
  233. package/dist/errors/base-workflow-not-found.js +18 -0
  234. package/dist/errors/base-workflow-not-found.js.map +1 -0
  235. package/dist/errors/circular-extends.d.ts +9 -0
  236. package/dist/errors/circular-extends.d.ts.map +1 -0
  237. package/dist/errors/circular-extends.js +13 -0
  238. package/dist/errors/circular-extends.js.map +1 -0
  239. package/dist/errors/correlation-timeout.d.ts +9 -0
  240. package/dist/errors/correlation-timeout.d.ts.map +1 -0
  241. package/dist/errors/correlation-timeout.js +13 -0
  242. package/dist/errors/correlation-timeout.js.map +1 -0
  243. package/dist/errors/workflow-override.d.ts +9 -0
  244. package/dist/errors/workflow-override.d.ts.map +1 -0
  245. package/dist/errors/workflow-override.js +12 -0
  246. package/dist/errors/workflow-override.js.map +1 -0
  247. package/dist/executor/events.d.ts +55 -0
  248. package/dist/executor/events.d.ts.map +1 -0
  249. package/dist/executor/events.js +72 -0
  250. package/dist/executor/events.js.map +1 -0
  251. package/dist/executor/gate-handler.d.ts +55 -0
  252. package/dist/executor/gate-handler.d.ts.map +1 -0
  253. package/dist/executor/gate-handler.js +139 -0
  254. package/dist/executor/gate-handler.js.map +1 -0
  255. package/dist/executor/index.d.ts +140 -0
  256. package/dist/executor/index.d.ts.map +1 -0
  257. package/dist/executor/index.js +681 -0
  258. package/dist/executor/index.js.map +1 -0
  259. package/dist/index.d.ts +24 -0
  260. package/dist/index.d.ts.map +1 -0
  261. package/dist/index.js +34 -0
  262. package/dist/index.js.map +1 -0
  263. package/dist/interpolation/context.d.ts +117 -0
  264. package/dist/interpolation/context.d.ts.map +1 -0
  265. package/dist/interpolation/context.js +256 -0
  266. package/dist/interpolation/context.js.map +1 -0
  267. package/dist/interpolation/index.d.ts +76 -0
  268. package/dist/interpolation/index.d.ts.map +1 -0
  269. package/dist/interpolation/index.js +264 -0
  270. package/dist/interpolation/index.js.map +1 -0
  271. package/dist/loader/extends.d.ts +48 -0
  272. package/dist/loader/extends.d.ts.map +1 -0
  273. package/dist/loader/extends.js +140 -0
  274. package/dist/loader/extends.js.map +1 -0
  275. package/dist/loader/index.d.ts +50 -0
  276. package/dist/loader/index.d.ts.map +1 -0
  277. package/dist/loader/index.js +190 -0
  278. package/dist/loader/index.js.map +1 -0
  279. package/dist/loader/schema.d.ts +506 -0
  280. package/dist/loader/schema.d.ts.map +1 -0
  281. package/dist/loader/schema.js +63 -0
  282. package/dist/loader/schema.js.map +1 -0
  283. package/dist/loader/validator.d.ts +33 -0
  284. package/dist/loader/validator.d.ts.map +1 -0
  285. package/dist/loader/validator.js +135 -0
  286. package/dist/loader/validator.js.map +1 -0
  287. package/dist/registry/index.d.ts +42 -0
  288. package/dist/registry/index.d.ts.map +1 -0
  289. package/dist/registry/index.js +77 -0
  290. package/dist/registry/index.js.map +1 -0
  291. package/dist/retry/index.d.ts +37 -0
  292. package/dist/retry/index.d.ts.map +1 -0
  293. package/dist/retry/index.js +225 -0
  294. package/dist/retry/index.js.map +1 -0
  295. package/dist/retry/strategies.d.ts +74 -0
  296. package/dist/retry/strategies.d.ts.map +1 -0
  297. package/dist/retry/strategies.js +136 -0
  298. package/dist/retry/strategies.js.map +1 -0
  299. package/dist/store/filesystem-store.d.ts +52 -0
  300. package/dist/store/filesystem-store.d.ts.map +1 -0
  301. package/dist/store/filesystem-store.js +230 -0
  302. package/dist/store/filesystem-store.js.map +1 -0
  303. package/dist/store/index.d.ts +7 -0
  304. package/dist/store/index.d.ts.map +1 -0
  305. package/dist/store/index.js +6 -0
  306. package/dist/store/index.js.map +1 -0
  307. package/dist/types/action.d.ts +358 -0
  308. package/dist/types/action.d.ts.map +1 -0
  309. package/dist/types/action.js +96 -0
  310. package/dist/types/action.js.map +1 -0
  311. package/dist/types/events.d.ts +25 -0
  312. package/dist/types/events.d.ts.map +1 -0
  313. package/dist/types/events.js +6 -0
  314. package/dist/types/events.js.map +1 -0
  315. package/dist/types/execution.d.ts +145 -0
  316. package/dist/types/execution.d.ts.map +1 -0
  317. package/dist/types/execution.js +2 -0
  318. package/dist/types/execution.js.map +1 -0
  319. package/dist/types/gate.d.ts +98 -0
  320. package/dist/types/gate.d.ts.map +1 -0
  321. package/dist/types/gate.js +41 -0
  322. package/dist/types/gate.js.map +1 -0
  323. package/dist/types/github.d.ts +706 -0
  324. package/dist/types/github.d.ts.map +1 -0
  325. package/dist/types/github.js +6 -0
  326. package/dist/types/github.js.map +1 -0
  327. package/dist/types/index.d.ts +17 -0
  328. package/dist/types/index.d.ts.map +1 -0
  329. package/dist/types/index.js +8 -0
  330. package/dist/types/index.js.map +1 -0
  331. package/dist/types/logger.d.ts +60 -0
  332. package/dist/types/logger.d.ts.map +1 -0
  333. package/dist/types/logger.js +66 -0
  334. package/dist/types/logger.js.map +1 -0
  335. package/dist/types/retry.d.ts +36 -0
  336. package/dist/types/retry.d.ts.map +1 -0
  337. package/dist/types/retry.js +6 -0
  338. package/dist/types/retry.js.map +1 -0
  339. package/dist/types/store.d.ts +88 -0
  340. package/dist/types/store.d.ts.map +1 -0
  341. package/dist/types/store.js +6 -0
  342. package/dist/types/store.js.map +1 -0
  343. package/dist/types/workflow.d.ts +105 -0
  344. package/dist/types/workflow.d.ts.map +1 -0
  345. package/dist/types/workflow.js +6 -0
  346. package/dist/types/workflow.js.map +1 -0
  347. package/package.json +69 -0
@@ -0,0 +1,181 @@
1
+ /**
2
+ * Shared filesystem utilities for speckit operations.
3
+ * Ported from speckit MCP server for direct library access.
4
+ */
5
+ import { promises as fs } from 'node:fs';
6
+ import { dirname, join } from 'node:path';
7
+ /**
8
+ * Read file contents as string
9
+ */
10
+ export async function readFile(path) {
11
+ return fs.readFile(path, 'utf-8');
12
+ }
13
+ /**
14
+ * Write string content to file, creating parent directories if needed
15
+ */
16
+ export async function writeFile(path, content) {
17
+ await mkdir(dirname(path));
18
+ await fs.writeFile(path, content, 'utf-8');
19
+ }
20
+ /**
21
+ * Check if a file or directory exists
22
+ */
23
+ export async function exists(path) {
24
+ try {
25
+ await fs.access(path);
26
+ return true;
27
+ }
28
+ catch {
29
+ return false;
30
+ }
31
+ }
32
+ /**
33
+ * Check if path is a directory
34
+ */
35
+ export async function isDirectory(path) {
36
+ try {
37
+ const stats = await fs.stat(path);
38
+ return stats.isDirectory();
39
+ }
40
+ catch {
41
+ return false;
42
+ }
43
+ }
44
+ /**
45
+ * Check if path is a file
46
+ */
47
+ export async function isFile(path) {
48
+ try {
49
+ const stats = await fs.stat(path);
50
+ return stats.isFile();
51
+ }
52
+ catch {
53
+ return false;
54
+ }
55
+ }
56
+ /**
57
+ * Create directory and all parent directories if they don't exist
58
+ */
59
+ export async function mkdir(path) {
60
+ await fs.mkdir(path, { recursive: true });
61
+ }
62
+ /**
63
+ * Copy file from source to destination
64
+ */
65
+ export async function copyFile(src, dest) {
66
+ await mkdir(dirname(dest));
67
+ await fs.copyFile(src, dest);
68
+ }
69
+ /**
70
+ * List directory contents
71
+ */
72
+ export async function readDir(path) {
73
+ try {
74
+ return await fs.readdir(path);
75
+ }
76
+ catch {
77
+ return [];
78
+ }
79
+ }
80
+ /**
81
+ * Find the repository root by looking for .git directory or specs/ folder
82
+ */
83
+ export async function findRepoRoot(startPath) {
84
+ let current = startPath;
85
+ const root = dirname(current);
86
+ while (current !== root) {
87
+ // Check for .git directory
88
+ if (await exists(join(current, '.git'))) {
89
+ return current;
90
+ }
91
+ // Check for specs directory (fallback for non-git repos)
92
+ if (await exists(join(current, 'specs'))) {
93
+ return current;
94
+ }
95
+ current = dirname(current);
96
+ }
97
+ return null;
98
+ }
99
+ /**
100
+ * Resolve the specs directory path
101
+ * Checks for configured path in autodev.json, otherwise defaults to 'specs'
102
+ */
103
+ export async function resolveSpecsPath(workDir) {
104
+ const repoRoot = await findRepoRoot(workDir);
105
+ if (!repoRoot)
106
+ return null;
107
+ // Check for configured path in autodev.json
108
+ const configPath = join(repoRoot, '.claude', 'autodev.json');
109
+ if (await exists(configPath)) {
110
+ try {
111
+ const content = await readFile(configPath);
112
+ const config = JSON.parse(content);
113
+ if (config.paths?.specs) {
114
+ return join(repoRoot, config.paths.specs);
115
+ }
116
+ }
117
+ catch {
118
+ // Ignore parse errors, fall through to default
119
+ }
120
+ }
121
+ return join(repoRoot, 'specs');
122
+ }
123
+ /**
124
+ * Resolve the templates directory path
125
+ * Checks for configured path in autodev.json, otherwise defaults to '.specify/templates'
126
+ */
127
+ export async function resolveTemplatesPath(workDir) {
128
+ const repoRoot = await findRepoRoot(workDir);
129
+ if (!repoRoot)
130
+ return null;
131
+ // Check for configured path in autodev.json
132
+ const configPath = join(repoRoot, '.claude', 'autodev.json');
133
+ if (await exists(configPath)) {
134
+ try {
135
+ const content = await readFile(configPath);
136
+ const config = JSON.parse(content);
137
+ if (config.paths?.templates) {
138
+ return join(repoRoot, config.paths.templates);
139
+ }
140
+ }
141
+ catch {
142
+ // Ignore parse errors, fall through to default
143
+ }
144
+ }
145
+ return join(repoRoot, '.specify', 'templates');
146
+ }
147
+ /**
148
+ * Get files configuration from autodev.json or use defaults
149
+ */
150
+ export async function getFilesConfig(repoRoot) {
151
+ const defaults = {
152
+ spec: 'spec.md',
153
+ plan: 'plan.md',
154
+ tasks: 'tasks.md',
155
+ clarifications: 'clarifications.md',
156
+ research: 'research.md',
157
+ dataModel: 'data-model.md',
158
+ };
159
+ const configPath = join(repoRoot, '.claude', 'autodev.json');
160
+ if (await exists(configPath)) {
161
+ try {
162
+ const content = await readFile(configPath);
163
+ const config = JSON.parse(content);
164
+ if (config.files) {
165
+ return {
166
+ spec: config.files.spec || defaults.spec,
167
+ plan: config.files.plan || defaults.plan,
168
+ tasks: config.files.tasks || defaults.tasks,
169
+ clarifications: config.files.clarifications || defaults.clarifications,
170
+ research: config.files.research || defaults.research,
171
+ dataModel: config.files.dataModel || defaults.dataModel,
172
+ };
173
+ }
174
+ }
175
+ catch {
176
+ // Ignore parse errors, fall through to defaults
177
+ }
178
+ }
179
+ return defaults;
180
+ }
181
+ //# sourceMappingURL=fs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs.js","sourceRoot":"","sources":["../../../../../src/actions/builtin/speckit/lib/fs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { GetPathsInput, GetPathsOutput } from '../types.js';
2
+ /**
3
+ * Get all feature paths for the current or specified branch.
4
+ * Ported from speckit MCP get_paths tool.
5
+ */
6
+ export declare function getPaths(input: GetPathsInput): Promise<GetPathsOutput>;
7
+ //# sourceMappingURL=paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../../../../src/actions/builtin/speckit/lib/paths.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAgB,MAAM,aAAa,CAAC;AAsF/E;;;GAGG;AACH,wBAAsB,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC,CAkF5E"}
@@ -0,0 +1,161 @@
1
+ /**
2
+ * Path resolution library for speckit operations.
3
+ * Ported from speckit MCP server for direct library access.
4
+ */
5
+ import { join } from 'node:path';
6
+ import { simpleGit } from 'simple-git';
7
+ import { exists, readDir, findRepoRoot, resolveSpecsPath, getFilesConfig, } from './fs.js';
8
+ import { FEATURE_NAME_PATTERN } from './feature.js';
9
+ /**
10
+ * Check if git repository exists
11
+ */
12
+ async function isGitRepo(path) {
13
+ return exists(join(path, '.git'));
14
+ }
15
+ /**
16
+ * Get current git branch name
17
+ */
18
+ async function getCurrentBranch(repoRoot) {
19
+ try {
20
+ const git = simpleGit(repoRoot);
21
+ const status = await git.status();
22
+ return status.current;
23
+ }
24
+ catch {
25
+ return null;
26
+ }
27
+ }
28
+ /**
29
+ * Find feature name from current branch or environment
30
+ */
31
+ async function getFeatureName(repoRoot, workDir) {
32
+ // Check environment variable first
33
+ const envFeature = process.env.SPECIFY_FEATURE;
34
+ if (envFeature && FEATURE_NAME_PATTERN.test(envFeature)) {
35
+ return envFeature;
36
+ }
37
+ // Try to get from git branch
38
+ if (await isGitRepo(repoRoot)) {
39
+ const branch = await getCurrentBranch(repoRoot);
40
+ if (branch && FEATURE_NAME_PATTERN.test(branch)) {
41
+ return branch;
42
+ }
43
+ }
44
+ // Try to find the most recent feature directory
45
+ const specsDir = await resolveSpecsPath(workDir);
46
+ if (specsDir && (await exists(specsDir))) {
47
+ const entries = await readDir(specsDir);
48
+ const features = entries
49
+ .filter((e) => FEATURE_NAME_PATTERN.test(e))
50
+ .sort()
51
+ .reverse();
52
+ if (features.length > 0 && features[0]) {
53
+ return features[0];
54
+ }
55
+ }
56
+ return null;
57
+ }
58
+ /**
59
+ * Build FeaturePaths object from feature name
60
+ */
61
+ async function buildFeaturePaths(repoRoot, featureName, hasGit, filesConfig, workDir) {
62
+ const specsDir = await resolveSpecsPath(workDir) || join(repoRoot, 'specs');
63
+ const featureDir = join(specsDir, featureName);
64
+ return {
65
+ repoRoot,
66
+ branch: featureName,
67
+ hasGit,
68
+ featureDir,
69
+ specFile: join(featureDir, filesConfig.spec),
70
+ planFile: join(featureDir, filesConfig.plan),
71
+ tasksFile: join(featureDir, filesConfig.tasks),
72
+ researchFile: join(featureDir, filesConfig.research),
73
+ dataModelFile: join(featureDir, filesConfig.dataModel),
74
+ quickstartFile: join(featureDir, 'quickstart.md'),
75
+ contractsDir: join(featureDir, 'contracts'),
76
+ checklistsDir: join(featureDir, 'checklists'),
77
+ clarificationsFile: join(featureDir, filesConfig.clarifications),
78
+ };
79
+ }
80
+ /**
81
+ * Get all feature paths for the current or specified branch.
82
+ * Ported from speckit MCP get_paths tool.
83
+ */
84
+ export async function getPaths(input) {
85
+ const workDir = input.cwd || process.cwd();
86
+ // Find repo root
87
+ const repoRoot = await findRepoRoot(workDir);
88
+ if (!repoRoot) {
89
+ return {
90
+ success: false,
91
+ exists: false,
92
+ repoRoot: '',
93
+ branch: '',
94
+ hasGit: false,
95
+ featureDir: '',
96
+ specFile: '',
97
+ planFile: '',
98
+ tasksFile: '',
99
+ researchFile: '',
100
+ dataModelFile: '',
101
+ quickstartFile: '',
102
+ contractsDir: '',
103
+ checklistsDir: '',
104
+ clarificationsFile: '',
105
+ };
106
+ }
107
+ // Determine feature name
108
+ let featureName = input.branch;
109
+ if (!featureName) {
110
+ featureName = (await getFeatureName(repoRoot, workDir)) ?? undefined;
111
+ }
112
+ if (!featureName) {
113
+ return {
114
+ success: false,
115
+ exists: false,
116
+ repoRoot,
117
+ branch: '',
118
+ hasGit: await isGitRepo(repoRoot),
119
+ featureDir: '',
120
+ specFile: '',
121
+ planFile: '',
122
+ tasksFile: '',
123
+ researchFile: '',
124
+ dataModelFile: '',
125
+ quickstartFile: '',
126
+ contractsDir: '',
127
+ checklistsDir: '',
128
+ clarificationsFile: '',
129
+ };
130
+ }
131
+ // Validate feature name pattern
132
+ if (!FEATURE_NAME_PATTERN.test(featureName)) {
133
+ return {
134
+ success: false,
135
+ exists: false,
136
+ repoRoot,
137
+ branch: featureName,
138
+ hasGit: await isGitRepo(repoRoot),
139
+ featureDir: '',
140
+ specFile: '',
141
+ planFile: '',
142
+ tasksFile: '',
143
+ researchFile: '',
144
+ dataModelFile: '',
145
+ quickstartFile: '',
146
+ contractsDir: '',
147
+ checklistsDir: '',
148
+ clarificationsFile: '',
149
+ };
150
+ }
151
+ const hasGit = await isGitRepo(repoRoot);
152
+ const filesConfig = await getFilesConfig(repoRoot);
153
+ const paths = await buildFeaturePaths(repoRoot, featureName, hasGit, filesConfig, workDir);
154
+ const featureDirExists = await exists(paths.featureDir);
155
+ return {
156
+ success: true,
157
+ exists: featureDirExists,
158
+ ...paths,
159
+ };
160
+ }
161
+ //# sourceMappingURL=paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../../../../src/actions/builtin/speckit/lib/paths.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { CheckPrereqsInput, CheckPrereqsOutput } from '../types.js';
2
+ /**
3
+ * Check prerequisites for a command.
4
+ * Validates required files exist and returns list of available optional documents.
5
+ * Ported from speckit MCP check_prereqs tool.
6
+ */
7
+ export declare function checkPrereqs(input: CheckPrereqsInput): Promise<CheckPrereqsOutput>;
8
+ //# sourceMappingURL=prereqs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prereqs.d.ts","sourceRoot":"","sources":["../../../../../src/actions/builtin/speckit/lib/prereqs.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAoGzE;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA+GxF"}
@@ -0,0 +1,194 @@
1
+ /**
2
+ * Prerequisites checking library for speckit operations.
3
+ * Ported from speckit MCP server for direct library access.
4
+ */
5
+ import { join } from 'node:path';
6
+ import { simpleGit } from 'simple-git';
7
+ import { exists, isFile, isDirectory, readDir, findRepoRoot, resolveSpecsPath, getFilesConfig, } from './fs.js';
8
+ import { FEATURE_NAME_PATTERN } from './feature.js';
9
+ /**
10
+ * Check if git repository exists
11
+ */
12
+ async function isGitRepo(path) {
13
+ return exists(join(path, '.git'));
14
+ }
15
+ /**
16
+ * Get current git branch name
17
+ */
18
+ async function getCurrentBranch(repoRoot) {
19
+ try {
20
+ const git = simpleGit(repoRoot);
21
+ const status = await git.status();
22
+ return status.current;
23
+ }
24
+ catch {
25
+ return null;
26
+ }
27
+ }
28
+ /**
29
+ * Find feature name from current branch or environment
30
+ */
31
+ async function getFeatureName(repoRoot, workDir) {
32
+ // Check environment variable first
33
+ const envFeature = process.env.SPECIFY_FEATURE;
34
+ if (envFeature && FEATURE_NAME_PATTERN.test(envFeature)) {
35
+ return envFeature;
36
+ }
37
+ // Try to get from git branch
38
+ if (await isGitRepo(repoRoot)) {
39
+ const branch = await getCurrentBranch(repoRoot);
40
+ if (branch && FEATURE_NAME_PATTERN.test(branch)) {
41
+ return branch;
42
+ }
43
+ }
44
+ // Try to find the most recent feature directory
45
+ const specsDir = await resolveSpecsPath(workDir);
46
+ if (specsDir && (await exists(specsDir))) {
47
+ const entries = await readDir(specsDir);
48
+ const features = entries
49
+ .filter((e) => FEATURE_NAME_PATTERN.test(e))
50
+ .sort()
51
+ .reverse();
52
+ if (features.length > 0 && features[0]) {
53
+ return features[0];
54
+ }
55
+ }
56
+ return null;
57
+ }
58
+ /**
59
+ * Get list of available optional documents in feature directory
60
+ */
61
+ async function getAvailableDocs(featureDir, filesConfig) {
62
+ // Build optional docs list from config
63
+ const optionalDocs = [
64
+ filesConfig.research,
65
+ filesConfig.dataModel,
66
+ 'quickstart.md',
67
+ ];
68
+ const available = [];
69
+ // Check for optional markdown files
70
+ for (const doc of optionalDocs) {
71
+ if (await isFile(join(featureDir, doc))) {
72
+ available.push(doc);
73
+ }
74
+ }
75
+ // Check for contracts directory with content
76
+ const contractsDir = join(featureDir, 'contracts');
77
+ if (await isDirectory(contractsDir)) {
78
+ const contracts = await readDir(contractsDir);
79
+ if (contracts.length > 0) {
80
+ available.push('contracts/');
81
+ }
82
+ }
83
+ // Check for checklists directory with content
84
+ const checklistsDir = join(featureDir, 'checklists');
85
+ if (await isDirectory(checklistsDir)) {
86
+ const checklists = await readDir(checklistsDir);
87
+ if (checklists.length > 0) {
88
+ available.push('checklists/');
89
+ }
90
+ }
91
+ return available;
92
+ }
93
+ /**
94
+ * Check prerequisites for a command.
95
+ * Validates required files exist and returns list of available optional documents.
96
+ * Ported from speckit MCP check_prereqs tool.
97
+ */
98
+ export async function checkPrereqs(input) {
99
+ const workDir = input.cwd || process.cwd();
100
+ const requireSpec = input.require_spec ?? true;
101
+ const requirePlan = input.require_plan ?? false;
102
+ const requireTasks = input.require_tasks ?? false;
103
+ const includeTasks = input.include_tasks ?? false;
104
+ // Find repo root
105
+ const repoRoot = await findRepoRoot(workDir);
106
+ if (!repoRoot) {
107
+ return {
108
+ valid: false,
109
+ featureDir: '',
110
+ availableDocs: [],
111
+ error: 'Could not find repository root',
112
+ };
113
+ }
114
+ // Determine feature name
115
+ let featureName = input.branch;
116
+ if (!featureName) {
117
+ featureName = (await getFeatureName(repoRoot, workDir)) ?? undefined;
118
+ }
119
+ if (!featureName) {
120
+ return {
121
+ valid: false,
122
+ featureDir: '',
123
+ availableDocs: [],
124
+ error: 'Could not determine feature name. Use a feature branch (###-name) or set SPECIFY_FEATURE env var.',
125
+ };
126
+ }
127
+ // Validate feature name pattern
128
+ if (!FEATURE_NAME_PATTERN.test(featureName)) {
129
+ return {
130
+ valid: false,
131
+ featureDir: '',
132
+ availableDocs: [],
133
+ error: `Branch name '${featureName}' does not match required pattern ###-name`,
134
+ };
135
+ }
136
+ const specsDir = await resolveSpecsPath(workDir) || join(repoRoot, 'specs');
137
+ const featureDir = join(specsDir, featureName);
138
+ // Check if feature directory exists
139
+ if (!(await exists(featureDir))) {
140
+ return {
141
+ valid: false,
142
+ featureDir,
143
+ availableDocs: [],
144
+ missingRequired: ['feature directory'],
145
+ error: `Feature directory does not exist: ${featureDir}`,
146
+ };
147
+ }
148
+ // Load files configuration
149
+ const filesConfig = await getFilesConfig(repoRoot);
150
+ // Check required files
151
+ const missingRequired = [];
152
+ if (requireSpec) {
153
+ const specFile = join(featureDir, filesConfig.spec);
154
+ if (!(await isFile(specFile))) {
155
+ missingRequired.push(filesConfig.spec);
156
+ }
157
+ }
158
+ if (requirePlan) {
159
+ const planFile = join(featureDir, filesConfig.plan);
160
+ if (!(await isFile(planFile))) {
161
+ missingRequired.push(filesConfig.plan);
162
+ }
163
+ }
164
+ if (requireTasks) {
165
+ const tasksFile = join(featureDir, filesConfig.tasks);
166
+ if (!(await isFile(tasksFile))) {
167
+ missingRequired.push(filesConfig.tasks);
168
+ }
169
+ }
170
+ // Get available optional docs
171
+ const availableDocs = await getAvailableDocs(featureDir, filesConfig);
172
+ // Include tasks.md if requested and exists
173
+ if (includeTasks) {
174
+ const tasksFile = join(featureDir, filesConfig.tasks);
175
+ if (await isFile(tasksFile)) {
176
+ availableDocs.push(filesConfig.tasks);
177
+ }
178
+ }
179
+ if (missingRequired.length > 0) {
180
+ return {
181
+ valid: false,
182
+ featureDir,
183
+ availableDocs,
184
+ missingRequired,
185
+ error: `Missing required files: ${missingRequired.join(', ')}`,
186
+ };
187
+ }
188
+ return {
189
+ valid: true,
190
+ featureDir,
191
+ availableDocs,
192
+ };
193
+ }
194
+ //# sourceMappingURL=prereqs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prereqs.js","sourceRoot":"","sources":["../../../../../src/actions/builtin/speckit/lib/prereqs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Batches string chunks over a time window and calls a flush callback.
3
+ * Used to reduce event volume from high-frequency stdout data events.
4
+ */
5
+ export declare class StreamBatcher {
6
+ private readonly flushCallback;
7
+ private readonly intervalMs;
8
+ private buffer;
9
+ private timer;
10
+ constructor(flushCallback: (content: string) => void, intervalMs?: number);
11
+ append(chunk: string): void;
12
+ flush(): void;
13
+ }
14
+ //# sourceMappingURL=stream-batcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream-batcher.d.ts","sourceRoot":"","sources":["../../../../../src/actions/builtin/speckit/lib/stream-batcher.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,qBAAa,aAAa;IAKtB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAL7B,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,KAAK,CAA8C;gBAGxC,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,EACxC,UAAU,GAAE,MAAY;IAG3C,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAO3B,KAAK,IAAI,IAAI;CAUd"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Batches string chunks over a time window and calls a flush callback.
3
+ * Used to reduce event volume from high-frequency stdout data events.
4
+ */
5
+ export class StreamBatcher {
6
+ flushCallback;
7
+ intervalMs;
8
+ buffer = '';
9
+ timer = null;
10
+ constructor(flushCallback, intervalMs = 200) {
11
+ this.flushCallback = flushCallback;
12
+ this.intervalMs = intervalMs;
13
+ }
14
+ append(chunk) {
15
+ this.buffer += chunk;
16
+ if (!this.timer) {
17
+ this.timer = setTimeout(() => this.flush(), this.intervalMs);
18
+ }
19
+ }
20
+ flush() {
21
+ if (this.timer) {
22
+ clearTimeout(this.timer);
23
+ this.timer = null;
24
+ }
25
+ if (this.buffer.length > 0) {
26
+ this.flushCallback(this.buffer);
27
+ this.buffer = '';
28
+ }
29
+ }
30
+ }
31
+ //# sourceMappingURL=stream-batcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream-batcher.js","sourceRoot":"","sources":["../../../../../src/actions/builtin/speckit/lib/stream-batcher.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,OAAO,aAAa;IAKL;IACA;IALX,MAAM,GAAG,EAAE,CAAC;IACZ,KAAK,GAAyC,IAAI,CAAC;IAE3D,YACmB,aAAwC,EACxC,aAAqB,GAAG;QADxB,kBAAa,GAAb,aAAa,CAA2B;QACxC,eAAU,GAAV,UAAU,CAAc;IACxC,CAAC;IAEJ,MAAM,CAAC,KAAa;QAClB,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC;QACrB,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;IAED,KAAK;QACH,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QACpB,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAChC,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QACnB,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,15 @@
1
+ import type { CopyTemplateInput, CopyTemplateOutput, TemplateName } from '../types.js';
2
+ /**
3
+ * Get all valid template names
4
+ */
5
+ export declare function getTemplateNames(): TemplateName[];
6
+ /**
7
+ * Check if a string is a valid template name
8
+ */
9
+ export declare function isValidTemplateName(name: string): name is TemplateName;
10
+ /**
11
+ * Copy one or more templates to the feature directory.
12
+ * Ported from speckit MCP copy_template tool.
13
+ */
14
+ export declare function copyTemplates(input: CopyTemplateInput): Promise<CopyTemplateOutput>;
15
+ //# sourceMappingURL=templates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../../../../src/actions/builtin/speckit/lib/templates.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AA0CvF;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,YAAY,EAAE,CAEjD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,YAAY,CAEtE;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAqIzF"}