@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,430 @@
1
+ /**
2
+ * Feature creation library.
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, mkdir, writeFile, readFile, readDir, findRepoRoot, resolveSpecsPath, } from './fs.js';
8
+ /** Pattern for valid feature names: \d+-short-name (flexible number padding) */
9
+ export const FEATURE_NAME_PATTERN = /^\d+-[a-z0-9]+(?:-[a-z0-9]+)*$/;
10
+ /** Maximum branch name length (GitHub limit) */
11
+ export const MAX_BRANCH_LENGTH = 244;
12
+ /** Default branch configuration */
13
+ const DEFAULT_BRANCH_CONFIG = {
14
+ pattern: '{paddedNumber}-{slug}',
15
+ numberPadding: 3,
16
+ slugOptions: {
17
+ maxLength: 30,
18
+ separator: '-',
19
+ removeStopWords: true,
20
+ maxWords: 4,
21
+ },
22
+ };
23
+ /** Stop words to remove from slugs */
24
+ const STOP_WORDS = new Set([
25
+ 'a', 'an', 'the', 'to', 'for', 'of', 'in', 'on', 'at', 'by',
26
+ 'with', 'and', 'or', 'as', 'is', 'it', 'be', 'are', 'was',
27
+ 'were', 'been', 'being', 'have', 'has', 'had', 'do', 'does',
28
+ 'did', 'will', 'would', 'could', 'should', 'may', 'might',
29
+ 'can', 'this', 'that', 'these', 'those', 'i', 'we', 'you',
30
+ ]);
31
+ /**
32
+ * Load branch configuration from autodev.json
33
+ */
34
+ async function loadBranchConfig(repoRoot) {
35
+ const configPath = join(repoRoot, '.claude', 'autodev.json');
36
+ if (!(await exists(configPath))) {
37
+ return DEFAULT_BRANCH_CONFIG;
38
+ }
39
+ try {
40
+ const content = await readFile(configPath);
41
+ const config = JSON.parse(content);
42
+ if (!config.branches) {
43
+ return DEFAULT_BRANCH_CONFIG;
44
+ }
45
+ return {
46
+ pattern: config.branches.pattern ?? DEFAULT_BRANCH_CONFIG.pattern,
47
+ numberPadding: config.branches.numberPadding ?? DEFAULT_BRANCH_CONFIG.numberPadding,
48
+ slugOptions: {
49
+ ...DEFAULT_BRANCH_CONFIG.slugOptions,
50
+ ...config.branches.slugOptions,
51
+ },
52
+ };
53
+ }
54
+ catch {
55
+ return DEFAULT_BRANCH_CONFIG;
56
+ }
57
+ }
58
+ /**
59
+ * Generate a configurable slug from a description
60
+ */
61
+ function generateConfigurableSlug(description, options) {
62
+ // Normalize: lowercase and replace non-alphanumeric with spaces
63
+ const normalized = description
64
+ .toLowerCase()
65
+ .replace(/[^a-z0-9\s]/g, ' ')
66
+ .trim();
67
+ // Split into words
68
+ let words = normalized.split(/\s+/).filter((word) => word.length > 0);
69
+ // Remove stop words if configured
70
+ if (options.removeStopWords) {
71
+ words = words.filter((word) => !STOP_WORDS.has(word));
72
+ }
73
+ // Limit to maxWords
74
+ if (options.maxWords > 0 && words.length > options.maxWords) {
75
+ words = words.slice(0, options.maxWords);
76
+ }
77
+ // Join with separator
78
+ let slug = words.join(options.separator);
79
+ // Handle empty result
80
+ if (!slug || slug.length < 2) {
81
+ return 'feature';
82
+ }
83
+ // Truncate to maxLength
84
+ if (slug.length > options.maxLength) {
85
+ const truncated = slug.substring(0, options.maxLength);
86
+ const lastSeparatorIndex = truncated.lastIndexOf(options.separator);
87
+ if (lastSeparatorIndex > 0) {
88
+ slug = truncated.substring(0, lastSeparatorIndex);
89
+ }
90
+ else {
91
+ slug = truncated;
92
+ }
93
+ }
94
+ // Remove trailing separator
95
+ if (slug.endsWith(options.separator)) {
96
+ slug = slug.slice(0, -options.separator.length);
97
+ }
98
+ return slug;
99
+ }
100
+ /**
101
+ * Build branch name from pattern and context
102
+ */
103
+ function buildBranchNameFromPattern(config, issueNumber, description) {
104
+ const { pattern, numberPadding, slugOptions } = config;
105
+ const paddedNumber = numberPadding > 0
106
+ ? String(issueNumber).padStart(numberPadding, '0')
107
+ : String(issueNumber);
108
+ const slug = generateConfigurableSlug(description, slugOptions);
109
+ let branchName = pattern;
110
+ branchName = branchName.replace('{number}', String(issueNumber));
111
+ branchName = branchName.replace('{paddedNumber}', paddedNumber);
112
+ branchName = branchName.replace('{slug}', slug);
113
+ return branchName;
114
+ }
115
+ /**
116
+ * Find the next available feature number
117
+ */
118
+ async function getNextFeatureNumber(specsDir) {
119
+ if (!(await exists(specsDir))) {
120
+ return '001';
121
+ }
122
+ const entries = await readDir(specsDir);
123
+ let maxNumber = 0;
124
+ for (const entry of entries) {
125
+ const match = entry.match(/^(\d+)-/);
126
+ if (match && match[1]) {
127
+ const num = parseInt(match[1], 10);
128
+ if (num > maxNumber) {
129
+ maxNumber = num;
130
+ }
131
+ }
132
+ }
133
+ const nextNum = maxNumber + 1;
134
+ return nextNum.toString().padStart(3, '0');
135
+ }
136
+ /**
137
+ * Create initial spec content from description
138
+ */
139
+ function createInitialSpecContent(description, featureName) {
140
+ const titlePart = description.split(/[.!?]/)[0] || description;
141
+ const title = titlePart
142
+ .trim()
143
+ .replace(/^(add|create|implement|build)\s+/i, '')
144
+ .replace(/^\w/, (c) => c.toUpperCase());
145
+ return `# Feature Specification: ${title}
146
+
147
+ **Branch**: \`${featureName}\` | **Date**: ${new Date().toISOString().split('T')[0]} | **Status**: Draft
148
+
149
+ ## Summary
150
+
151
+ ${description}
152
+
153
+ ## User Stories
154
+
155
+ ### US1: [Primary User Story]
156
+
157
+ **As a** [user type],
158
+ **I want** [capability],
159
+ **So that** [benefit].
160
+
161
+ **Acceptance Criteria**:
162
+ - [ ] [Criterion 1]
163
+ - [ ] [Criterion 2]
164
+
165
+ ## Functional Requirements
166
+
167
+ | ID | Requirement | Priority | Notes |
168
+ |----|-------------|----------|-------|
169
+ | FR-001 | [Description] | P1 | |
170
+
171
+ ## Success Criteria
172
+
173
+ | ID | Metric | Target | Measurement |
174
+ |----|--------|--------|-------------|
175
+ | SC-001 | [Metric] | [Target] | [How to measure] |
176
+
177
+ ## Assumptions
178
+
179
+ - [Assumption 1]
180
+
181
+ ## Out of Scope
182
+
183
+ - [Exclusion 1]
184
+
185
+ ---
186
+
187
+ *Generated by speckit*
188
+ `;
189
+ }
190
+ /**
191
+ * Check if git repository exists
192
+ */
193
+ async function isGitRepo(path) {
194
+ return exists(join(path, '.git'));
195
+ }
196
+ /**
197
+ * Resolve the default branch name from the remote's HEAD reference.
198
+ * Falls back to 'develop' if the symbolic-ref cannot be read (e.g. shallow clone, detached HEAD).
199
+ */
200
+ export async function getDefaultBranch(git) {
201
+ try {
202
+ const result = await git.raw(['symbolic-ref', 'refs/remotes/origin/HEAD']);
203
+ const branch = result.trim().replace('refs/remotes/origin/', '');
204
+ if (branch)
205
+ return branch;
206
+ }
207
+ catch {
208
+ // Fallback — symbolic-ref not available
209
+ }
210
+ return 'develop';
211
+ }
212
+ /**
213
+ * Create a new feature branch and initialize the spec directory with template files.
214
+ * Ported from speckit MCP create_feature tool.
215
+ */
216
+ export async function createFeature(input) {
217
+ const workDir = input.cwd || process.cwd();
218
+ // Find repo root
219
+ const repoRoot = await findRepoRoot(workDir);
220
+ if (!repoRoot) {
221
+ return {
222
+ success: false,
223
+ branch_name: '',
224
+ feature_num: '',
225
+ spec_file: '',
226
+ feature_dir: '',
227
+ git_branch_created: false,
228
+ };
229
+ }
230
+ // Load branch configuration
231
+ const branchConfig = await loadBranchConfig(repoRoot);
232
+ const specsDir = await resolveSpecsPath(workDir) || join(repoRoot, 'specs');
233
+ // Determine feature number
234
+ const featureNumInt = input.number ?? parseInt(await getNextFeatureNumber(specsDir), 10);
235
+ const featureNum = branchConfig.numberPadding > 0
236
+ ? String(featureNumInt).padStart(branchConfig.numberPadding, '0')
237
+ : String(featureNumInt);
238
+ // Validate number range
239
+ if (featureNumInt > 999) {
240
+ return {
241
+ success: false,
242
+ branch_name: '',
243
+ feature_num: '',
244
+ spec_file: '',
245
+ feature_dir: '',
246
+ git_branch_created: false,
247
+ };
248
+ }
249
+ // Create branch name using configured pattern
250
+ const branchName = input.short_name
251
+ ? `${featureNum}-${input.short_name}`
252
+ : buildBranchNameFromPattern(branchConfig, featureNumInt, input.description);
253
+ // Validate branch name
254
+ if (!FEATURE_NAME_PATTERN.test(branchName)) {
255
+ return {
256
+ success: false,
257
+ branch_name: branchName,
258
+ feature_num: featureNum,
259
+ spec_file: '',
260
+ feature_dir: '',
261
+ git_branch_created: false,
262
+ };
263
+ }
264
+ // Create feature directory (idempotent — succeed if it already exists for resume)
265
+ const featureDir = join(specsDir, branchName);
266
+ if (await exists(featureDir)) {
267
+ // Feature dir already exists — this is a resume/requeue.
268
+ // Ensure we're on the right branch and pull latest from remote.
269
+ let gitBranchCreated = false;
270
+ if (await isGitRepo(repoRoot)) {
271
+ const git = simpleGit(repoRoot);
272
+ try {
273
+ await git.fetch(['--all', '--prune']);
274
+ }
275
+ catch (err) {
276
+ console.warn(`[createFeature] git fetch failed, continuing with possibly stale refs: ${err}`);
277
+ }
278
+ const branches = await git.branchLocal();
279
+ if (branches.all.includes(branchName)) {
280
+ await git.checkout(branchName);
281
+ try {
282
+ await git.pull('origin', branchName);
283
+ }
284
+ catch {
285
+ // Continue even if pull fails
286
+ }
287
+ }
288
+ else {
289
+ // Local branch missing but dir exists — check out from remote
290
+ const allBranches = await git.branch(['-a']);
291
+ const remoteBranchExists = allBranches.all.some((b) => b === `remotes/origin/${branchName}` ||
292
+ b === `origin/${branchName}`);
293
+ if (remoteBranchExists) {
294
+ await git.checkout(['-b', branchName, `origin/${branchName}`]);
295
+ }
296
+ else {
297
+ // Branch doesn't exist anywhere — create it from default branch HEAD
298
+ const defaultBranch = await getDefaultBranch(git);
299
+ await git.checkout(defaultBranch);
300
+ await git.reset(['--hard', `origin/${defaultBranch}`]);
301
+ await git.checkoutLocalBranch(branchName);
302
+ gitBranchCreated = true;
303
+ }
304
+ }
305
+ // Verify we're actually on the expected branch
306
+ const currentBranch = (await git.revparse(['--abbrev-ref', 'HEAD'])).trim();
307
+ if (currentBranch !== branchName) {
308
+ return {
309
+ success: false,
310
+ branch_name: branchName,
311
+ feature_num: featureNum,
312
+ spec_file: '',
313
+ feature_dir: featureDir,
314
+ git_branch_created: false,
315
+ error: `Branch checkout failed: expected "${branchName}" but on "${currentBranch}"`,
316
+ };
317
+ }
318
+ }
319
+ const specFile = join(featureDir, 'spec.md');
320
+ return {
321
+ success: true,
322
+ branch_name: branchName,
323
+ feature_num: featureNum,
324
+ spec_file: (await exists(specFile)) ? specFile : '',
325
+ feature_dir: featureDir,
326
+ git_branch_created: gitBranchCreated,
327
+ };
328
+ }
329
+ await mkdir(featureDir);
330
+ await mkdir(join(featureDir, 'checklists'));
331
+ await mkdir(join(featureDir, 'contracts'));
332
+ // Create git branch if in a git repo
333
+ let gitBranchCreated = false;
334
+ let branchedFromEpic = false;
335
+ let baseCommit;
336
+ if (await isGitRepo(repoRoot)) {
337
+ const git = simpleGit(repoRoot);
338
+ const branches = await git.branchLocal();
339
+ if (!branches.all.includes(branchName)) {
340
+ // Fetch remote refs so we can detect existing remote branches
341
+ try {
342
+ await git.fetch(['--all', '--prune']);
343
+ }
344
+ catch (err) {
345
+ console.warn(`[createFeature] git fetch failed, continuing with possibly stale refs: ${err}`);
346
+ }
347
+ // Check if the branch already exists on remote (resume in fresh workspace)
348
+ const allBranches = await git.branch(['-a']);
349
+ const remoteBranchExists = allBranches.all.some((b) => b === `remotes/origin/${branchName}` ||
350
+ b === `origin/${branchName}`);
351
+ if (remoteBranchExists) {
352
+ // Track the existing remote branch to pick up previous commits
353
+ await git.checkout(['-b', branchName, `origin/${branchName}`]);
354
+ }
355
+ else if (input.parent_epic_branch) {
356
+ // Check if the epic branch exists
357
+ const epicBranchExists = allBranches.all.some((b) => b === input.parent_epic_branch ||
358
+ b === `remotes/origin/${input.parent_epic_branch}` ||
359
+ b === `origin/${input.parent_epic_branch}`);
360
+ if (epicBranchExists) {
361
+ const localBranches = await git.branchLocal();
362
+ if (!localBranches.all.includes(input.parent_epic_branch)) {
363
+ await git.checkout(['-b', input.parent_epic_branch, `origin/${input.parent_epic_branch}`]);
364
+ }
365
+ else {
366
+ await git.checkout(input.parent_epic_branch);
367
+ }
368
+ await git.reset(['--hard', `origin/${input.parent_epic_branch}`]);
369
+ baseCommit = (await git.revparse(['HEAD'])).trim();
370
+ await git.checkoutLocalBranch(branchName);
371
+ branchedFromEpic = true;
372
+ }
373
+ else {
374
+ // Epic branch not found — create from current HEAD
375
+ baseCommit = (await git.revparse(['HEAD'])).trim();
376
+ await git.checkoutLocalBranch(branchName);
377
+ }
378
+ }
379
+ else {
380
+ // Sync to latest default branch before creating feature branch
381
+ // so the new branch forks from the tip of origin/<default>
382
+ const defaultBranch = await getDefaultBranch(git);
383
+ await git.checkout(defaultBranch);
384
+ await git.reset(['--hard', `origin/${defaultBranch}`]);
385
+ baseCommit = (await git.revparse(['HEAD'])).trim();
386
+ await git.checkoutLocalBranch(branchName);
387
+ }
388
+ gitBranchCreated = true;
389
+ }
390
+ else {
391
+ await git.checkout(branchName);
392
+ // Pull latest from remote in case local is behind (resume scenario)
393
+ try {
394
+ await git.pull('origin', branchName);
395
+ }
396
+ catch {
397
+ // Continue even if pull fails (e.g., no upstream set)
398
+ }
399
+ }
400
+ // Verify we're actually on the expected branch
401
+ const currentBranch = (await git.revparse(['--abbrev-ref', 'HEAD'])).trim();
402
+ if (currentBranch !== branchName) {
403
+ return {
404
+ success: false,
405
+ branch_name: branchName,
406
+ feature_num: featureNum,
407
+ spec_file: '',
408
+ feature_dir: featureDir,
409
+ git_branch_created: false,
410
+ error: `Branch checkout failed: expected "${branchName}" but on "${currentBranch}"`,
411
+ };
412
+ }
413
+ }
414
+ // Create initial spec.md
415
+ const specFile = join(featureDir, 'spec.md');
416
+ const specContent = createInitialSpecContent(input.description, branchName);
417
+ await writeFile(specFile, specContent);
418
+ return {
419
+ success: true,
420
+ branch_name: branchName,
421
+ feature_num: featureNum,
422
+ spec_file: specFile,
423
+ feature_dir: featureDir,
424
+ git_branch_created: gitBranchCreated,
425
+ branched_from_epic: branchedFromEpic,
426
+ ...(branchedFromEpic && { parent_epic_branch: input.parent_epic_branch }),
427
+ ...(baseCommit && { base_commit: baseCommit }),
428
+ };
429
+ }
430
+ //# sourceMappingURL=feature.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feature.js","sourceRoot":"","sources":["../../../../../src/actions/builtin/speckit/lib/feature.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Read file contents as string
3
+ */
4
+ export declare function readFile(path: string): Promise<string>;
5
+ /**
6
+ * Write string content to file, creating parent directories if needed
7
+ */
8
+ export declare function writeFile(path: string, content: string): Promise<void>;
9
+ /**
10
+ * Check if a file or directory exists
11
+ */
12
+ export declare function exists(path: string): Promise<boolean>;
13
+ /**
14
+ * Check if path is a directory
15
+ */
16
+ export declare function isDirectory(path: string): Promise<boolean>;
17
+ /**
18
+ * Check if path is a file
19
+ */
20
+ export declare function isFile(path: string): Promise<boolean>;
21
+ /**
22
+ * Create directory and all parent directories if they don't exist
23
+ */
24
+ export declare function mkdir(path: string): Promise<void>;
25
+ /**
26
+ * Copy file from source to destination
27
+ */
28
+ export declare function copyFile(src: string, dest: string): Promise<void>;
29
+ /**
30
+ * List directory contents
31
+ */
32
+ export declare function readDir(path: string): Promise<string[]>;
33
+ /**
34
+ * Find the repository root by looking for .git directory or specs/ folder
35
+ */
36
+ export declare function findRepoRoot(startPath: string): Promise<string | null>;
37
+ /**
38
+ * Resolve the specs directory path
39
+ * Checks for configured path in autodev.json, otherwise defaults to 'specs'
40
+ */
41
+ export declare function resolveSpecsPath(workDir: string): Promise<string | null>;
42
+ /**
43
+ * Resolve the templates directory path
44
+ * Checks for configured path in autodev.json, otherwise defaults to '.specify/templates'
45
+ */
46
+ export declare function resolveTemplatesPath(workDir: string): Promise<string | null>;
47
+ /**
48
+ * Default file names configuration
49
+ */
50
+ export interface FilesConfig {
51
+ spec: string;
52
+ plan: string;
53
+ tasks: string;
54
+ clarifications: string;
55
+ research: string;
56
+ dataModel: string;
57
+ }
58
+ /**
59
+ * Get files configuration from autodev.json or use defaults
60
+ */
61
+ export declare function getFilesConfig(repoRoot: string): Promise<FilesConfig>;
62
+ //# sourceMappingURL=fs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../../../../../src/actions/builtin/speckit/lib/fs.ts"],"names":[],"mappings":"AAOA;;GAEG;AACH,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAE5D;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAG5E;AAED;;GAEG;AACH,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAO3D;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOhE;AAED;;GAEG;AACH,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAO3D;AAED;;GAEG;AACH,wBAAsB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEvD;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGvE;AAED;;GAEG;AACH,wBAAsB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAM7D;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAiB5E;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAmB9E;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAmBlF;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CA+B3E"}