@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,176 @@
1
+ /**
2
+ * Template copying library for speckit operations.
3
+ * Ported from speckit MCP server for direct library access.
4
+ */
5
+ import { join, dirname } from 'node:path';
6
+ import { exists, mkdir, copyFile, findRepoRoot, resolveTemplatesPath, } from './fs.js';
7
+ /**
8
+ * Template configuration mapping
9
+ */
10
+ const TEMPLATES = {
11
+ spec: {
12
+ name: 'spec',
13
+ sourceFilename: 'spec-template.md',
14
+ destFilename: 'spec.md',
15
+ },
16
+ plan: {
17
+ name: 'plan',
18
+ sourceFilename: 'plan-template.md',
19
+ destFilename: 'plan.md',
20
+ },
21
+ tasks: {
22
+ name: 'tasks',
23
+ sourceFilename: 'tasks-template.md',
24
+ destFilename: 'tasks.md',
25
+ },
26
+ checklist: {
27
+ name: 'checklist',
28
+ sourceFilename: 'checklist-template.md',
29
+ destFilename: 'checklist.md',
30
+ },
31
+ 'agent-file': {
32
+ name: 'agent-file',
33
+ sourceFilename: 'agent-file-template.md',
34
+ destFilename: 'CLAUDE.md',
35
+ },
36
+ };
37
+ /**
38
+ * Get all valid template names
39
+ */
40
+ export function getTemplateNames() {
41
+ return Object.keys(TEMPLATES);
42
+ }
43
+ /**
44
+ * Check if a string is a valid template name
45
+ */
46
+ export function isValidTemplateName(name) {
47
+ return name in TEMPLATES;
48
+ }
49
+ /**
50
+ * Copy one or more templates to the feature directory.
51
+ * Ported from speckit MCP copy_template tool.
52
+ */
53
+ export async function copyTemplates(input) {
54
+ const workDir = input.cwd || process.cwd();
55
+ // Validate custom filename only with single template
56
+ if (input.dest_filename && input.templates.length > 1) {
57
+ return {
58
+ success: false,
59
+ copied: [],
60
+ errors: [
61
+ {
62
+ template: 'all',
63
+ error: {
64
+ code: 'INVALID_INPUT',
65
+ message: 'dest_filename can only be used when copying a single template',
66
+ },
67
+ },
68
+ ],
69
+ };
70
+ }
71
+ // Find repo root
72
+ const repoRoot = await findRepoRoot(workDir);
73
+ if (!repoRoot) {
74
+ return {
75
+ success: false,
76
+ copied: [],
77
+ errors: [
78
+ {
79
+ template: 'all',
80
+ error: {
81
+ code: 'FEATURE_DIR_NOT_FOUND',
82
+ message: 'Could not find repository root',
83
+ },
84
+ },
85
+ ],
86
+ };
87
+ }
88
+ // Validate feature directory
89
+ if (!input.feature_dir) {
90
+ return {
91
+ success: false,
92
+ copied: [],
93
+ errors: [
94
+ {
95
+ template: 'all',
96
+ error: {
97
+ code: 'FEATURE_DIR_NOT_FOUND',
98
+ message: 'feature_dir is required',
99
+ },
100
+ },
101
+ ],
102
+ };
103
+ }
104
+ // Ensure feature directory exists
105
+ await mkdir(input.feature_dir);
106
+ // Get configured templates path
107
+ const templatesDir = await resolveTemplatesPath(workDir);
108
+ const copied = [];
109
+ const errors = [];
110
+ for (const templateName of input.templates) {
111
+ if (!isValidTemplateName(templateName)) {
112
+ errors.push({
113
+ template: templateName,
114
+ error: {
115
+ code: 'TEMPLATE_NOT_FOUND',
116
+ message: `Unknown template: ${templateName}. Valid templates: ${getTemplateNames().join(', ')}`,
117
+ },
118
+ });
119
+ continue;
120
+ }
121
+ const template = TEMPLATES[templateName];
122
+ // Use configured templates path if available
123
+ const sourcePath = templatesDir
124
+ ? join(templatesDir, template.sourceFilename)
125
+ : join(repoRoot, '.specify', 'templates', template.sourceFilename);
126
+ // Check if template exists
127
+ if (!(await exists(sourcePath))) {
128
+ errors.push({
129
+ template: templateName,
130
+ error: {
131
+ code: 'TEMPLATE_NOT_FOUND',
132
+ message: `Template file not found: ${sourcePath}`,
133
+ },
134
+ });
135
+ continue;
136
+ }
137
+ // Determine destination path
138
+ let destPath;
139
+ if (input.dest_filename && input.templates.length === 1) {
140
+ destPath = join(input.feature_dir, input.dest_filename);
141
+ }
142
+ else if (templateName === 'checklist') {
143
+ // Checklists go in checklists/ subdirectory
144
+ const checklistsDir = join(input.feature_dir, 'checklists');
145
+ await mkdir(checklistsDir);
146
+ destPath = join(checklistsDir, template.destFilename);
147
+ }
148
+ else {
149
+ destPath = join(input.feature_dir, template.destFilename);
150
+ }
151
+ try {
152
+ // Ensure parent directory exists
153
+ await mkdir(dirname(destPath));
154
+ await copyFile(sourcePath, destPath);
155
+ copied.push({ template: templateName, destPath });
156
+ }
157
+ catch (error) {
158
+ errors.push({
159
+ template: templateName,
160
+ error: {
161
+ code: 'FILE_WRITE_FAILED',
162
+ message: error instanceof Error ? error.message : String(error),
163
+ },
164
+ });
165
+ }
166
+ }
167
+ const result = {
168
+ success: errors.length === 0,
169
+ copied,
170
+ };
171
+ if (errors.length > 0) {
172
+ result.errors = errors;
173
+ }
174
+ return result;
175
+ }
176
+ //# sourceMappingURL=templates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates.js","sourceRoot":"","sources":["../../../../../src/actions/builtin/speckit/lib/templates.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Check prerequisites operation handler.
3
+ * Wraps the prereqs library for workflow execution.
4
+ */
5
+ import type { Logger } from '../../../../types/logger.js';
6
+ import type { CheckPrereqsInput, CheckPrereqsOutput } from '../types.js';
7
+ /**
8
+ * Execute the check_prereqs operation
9
+ */
10
+ export declare function executeCheckPrereqs(input: CheckPrereqsInput, logger: Logger): Promise<CheckPrereqsOutput>;
11
+ //# sourceMappingURL=check-prereqs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-prereqs.d.ts","sourceRoot":"","sources":["../../../../../src/actions/builtin/speckit/operations/check-prereqs.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAGzE;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,iBAAiB,EACxB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,kBAAkB,CAAC,CAkB7B"}
@@ -0,0 +1,22 @@
1
+ import { checkPrereqs } from '../lib/prereqs.js';
2
+ /**
3
+ * Execute the check_prereqs operation
4
+ */
5
+ export async function executeCheckPrereqs(input, logger) {
6
+ logger.info('Checking prerequisites...');
7
+ const result = await checkPrereqs(input);
8
+ if (result.valid) {
9
+ logger.info(`Prerequisites valid. Feature directory: ${result.featureDir}`);
10
+ if (result.availableDocs.length > 0) {
11
+ logger.info(`Available docs: ${result.availableDocs.join(', ')}`);
12
+ }
13
+ }
14
+ else {
15
+ logger.warn(`Prerequisites check failed: ${result.error}`);
16
+ if (result.missingRequired) {
17
+ logger.warn(`Missing required: ${result.missingRequired.join(', ')}`);
18
+ }
19
+ }
20
+ return result;
21
+ }
22
+ //# sourceMappingURL=check-prereqs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-prereqs.js","sourceRoot":"","sources":["../../../../../src/actions/builtin/speckit/operations/check-prereqs.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,KAAwB,EACxB,MAAc;IAEd,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;IAEzC,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC,CAAC;IAEzC,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,MAAM,CAAC,IAAI,CAAC,2CAA2C,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;QAC5E,IAAI,MAAM,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpC,MAAM,CAAC,IAAI,CAAC,mBAAmB,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,IAAI,CAAC,+BAA+B,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QAC3D,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;YAC3B,MAAM,CAAC,IAAI,CAAC,qBAAqB,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACxE,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { ActionContext } from '../../../../types/index.js';
2
+ import type { ClarifyInput, ClarifyOutput } from '../types.js';
3
+ /**
4
+ * Execute the clarify operation using agent.invoke delegation
5
+ */
6
+ export declare function executeClarify(input: ClarifyInput, context: ActionContext): Promise<ClarifyOutput>;
7
+ //# sourceMappingURL=clarify.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clarify.d.ts","sourceRoot":"","sources":["../../../../../src/actions/builtin/speckit/operations/clarify.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAyB,MAAM,aAAa,CAAC;AA8ItF;;GAEG;AACH,wBAAsB,cAAc,CAClC,KAAK,EAAE,YAAY,EACnB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,aAAa,CAAC,CAkLxB"}
@@ -0,0 +1,302 @@
1
+ /**
2
+ * Clarify operation handler.
3
+ * Uses agent.invoke to identify underspecified areas and generate clarification questions.
4
+ */
5
+ import { join } from 'node:path';
6
+ import { executeCommand } from '../../../cli-utils.js';
7
+ import { exists, readFile } from '../lib/fs.js';
8
+ import { StreamBatcher } from '../lib/stream-batcher.js';
9
+ /**
10
+ * Build the prompt for initial clarification question generation
11
+ */
12
+ function buildClarifyPrompt(featureDir, specContent) {
13
+ return `Analyze the feature specification and identify underspecified areas that need clarification.
14
+
15
+ Feature directory: ${featureDir}
16
+ Clarifications file: ${join(featureDir, 'clarifications.md')}
17
+
18
+ Current spec content:
19
+ ${specContent}
20
+
21
+ Instructions:
22
+ 1. Read and analyze the specification carefully
23
+ 2. Identify ambiguous or incomplete requirements
24
+ 3. Consider technical implementation decisions that need input
25
+ 4. Look for user experience decisions that need stakeholder input
26
+ 5. Check for missing edge cases or error handling requirements
27
+
28
+ For each area needing clarification, generate a question with:
29
+ - Topic: Short identifier (e.g., "Authentication Method", "Error Handling")
30
+ - Context: Why this question matters (1-2 sentences)
31
+ - Question: The specific question to ask
32
+ - Options (if applicable): 2-4 concrete choices with descriptions
33
+
34
+ Format the clarifications file as markdown with this structure:
35
+ # Clarification Questions
36
+
37
+ ## Status: Pending
38
+
39
+ ## Questions
40
+
41
+ ### Q1: [Topic]
42
+ **Context**: [Why this matters]
43
+ **Question**: [The specific question]
44
+ **Options**:
45
+ - A) [Option label]: [Description]
46
+ - B) [Option label]: [Description]
47
+ **Answer**: [Leave empty for now]
48
+
49
+ Write the clarifications to the file directly.
50
+ Return the count of questions generated.`;
51
+ }
52
+ /**
53
+ * Build the prompt for resuming after developer answers.
54
+ * Instructs the agent to fetch answers from the issue, consolidate,
55
+ * and determine if follow-up questions are needed.
56
+ */
57
+ function buildResumePrompt(featureDir, specContent, existingClarifications, issueNumber) {
58
+ return `You are resuming a clarification round for a feature specification.
59
+ Previously, clarification questions were posted to GitHub issue #${issueNumber}.
60
+ The developer has answered the questions and signaled that answers are ready.
61
+
62
+ Feature directory: ${featureDir}
63
+ Clarifications file: ${join(featureDir, 'clarifications.md')}
64
+
65
+ Current spec content:
66
+ ${specContent}
67
+
68
+ Previous clarification questions:
69
+ ${existingClarifications}
70
+
71
+ Instructions:
72
+ 1. Run \`gh issue view ${issueNumber} --comments\` to read the developer's answers from the issue comments
73
+ 2. Read the existing clarifications.md file
74
+ 3. For each question, find the developer's answer in the issue comments and fill in the **Answer** field
75
+ 4. Update the clarifications.md file with the consolidated answers
76
+ 5. Evaluate whether the answers are sufficient or if follow-up questions are needed
77
+ 6. If all questions are adequately answered:
78
+ - Update ## Status to "Resolved"
79
+ - Do NOT add any new questions
80
+ - Return 0 for the count of NEW questions
81
+ 7. If follow-up questions are needed (answers are ambiguous, incomplete, or raise new concerns):
82
+ - Keep the answered questions with their answers
83
+ - Add NEW follow-up questions at the end using the same format (### Q{N+1}: [Topic] etc.)
84
+ - Update ## Status to "Follow-up Required"
85
+ - Return ONLY the count of NEW follow-up questions (not the total)
86
+
87
+ IMPORTANT: Only generate follow-up questions if genuinely necessary. If the developer's answers
88
+ are clear and sufficient, resolve the clarifications and return 0 new questions so the workflow
89
+ can proceed.
90
+
91
+ Write updates to the clarifications file directly.
92
+ Return the count of NEW questions generated (0 if all resolved).`;
93
+ }
94
+ /**
95
+ * Parse questions from clarifications file content
96
+ */
97
+ function parseQuestions(content) {
98
+ const questions = [];
99
+ const questionBlocks = content.split(/###\s*Q\d+:/);
100
+ for (const block of questionBlocks.slice(1)) {
101
+ const topicMatch = block.match(/^\s*([^\n]+)/);
102
+ const contextMatch = block.match(/\*\*Context\*\*:\s*([^\n]+)/);
103
+ const questionMatch = block.match(/\*\*Question\*\*:\s*([^\n]+)/);
104
+ if (topicMatch?.[1] && questionMatch?.[1]) {
105
+ const question = {
106
+ topic: topicMatch[1].trim(),
107
+ context: contextMatch?.[1]?.trim() ?? '',
108
+ question: questionMatch[1].trim(),
109
+ };
110
+ // Parse options if present
111
+ const optionsMatch = block.match(/\*\*Options\*\*:\s*\n([\s\S]*?)(?=\*\*Answer|$)/);
112
+ if (optionsMatch?.[1]) {
113
+ const optionsText = optionsMatch[1];
114
+ const optionMatches = optionsText.matchAll(/-\s*([A-Z])\)\s*([^:]+):\s*([^\n]+)/g);
115
+ const options = [];
116
+ for (const match of optionMatches) {
117
+ if (match[1] && match[2] && match[3]) {
118
+ options.push({
119
+ label: match[1],
120
+ description: `${match[2].trim()}: ${match[3].trim()}`,
121
+ });
122
+ }
123
+ }
124
+ if (options.length > 0) {
125
+ question.options = options;
126
+ }
127
+ }
128
+ questions.push(question);
129
+ }
130
+ }
131
+ return questions;
132
+ }
133
+ /**
134
+ * Execute the clarify operation using agent.invoke delegation
135
+ */
136
+ export async function executeClarify(input, context) {
137
+ const specFile = join(input.feature_dir, 'spec.md');
138
+ const clarificationsFile = join(input.feature_dir, 'clarifications.md');
139
+ // Detect resume: if clarifications.md already exists, this is a follow-up round
140
+ const isResume = await exists(clarificationsFile);
141
+ context.logger.info(isResume
142
+ ? `Resuming clarification (answers received) for: ${input.feature_dir}`
143
+ : `Generating clarification questions for: ${input.feature_dir}`);
144
+ // Read the spec file
145
+ if (!(await exists(specFile))) {
146
+ return {
147
+ success: false,
148
+ questions_count: 0,
149
+ questions: [],
150
+ clarifications_file: clarificationsFile,
151
+ };
152
+ }
153
+ let specContent;
154
+ try {
155
+ specContent = await readFile(specFile);
156
+ }
157
+ catch (error) {
158
+ context.logger.error(`Failed to read spec file: ${error instanceof Error ? error.message : String(error)}`);
159
+ return {
160
+ success: false,
161
+ questions_count: 0,
162
+ questions: [],
163
+ clarifications_file: clarificationsFile,
164
+ };
165
+ }
166
+ // Build prompt — use resume prompt if clarifications already exist and we have an issue number
167
+ let prompt;
168
+ if (isResume && input.issue_number) {
169
+ let existingClarifications = '';
170
+ try {
171
+ existingClarifications = await readFile(clarificationsFile);
172
+ }
173
+ catch { /* will proceed with empty */ }
174
+ prompt = buildResumePrompt(input.feature_dir, specContent, existingClarifications, input.issue_number);
175
+ }
176
+ else {
177
+ prompt = buildClarifyPrompt(input.feature_dir, specContent);
178
+ }
179
+ // Track how many questions exist before the agent runs (for resume: detect new follow-ups)
180
+ let previousQuestionCount = 0;
181
+ if (isResume && (await exists(clarificationsFile))) {
182
+ try {
183
+ const existing = await readFile(clarificationsFile);
184
+ previousQuestionCount = parseQuestions(existing).length;
185
+ }
186
+ catch { /* use 0 */ }
187
+ }
188
+ try {
189
+ // Invoke Claude agent (--dangerously-skip-permissions for automated workflows)
190
+ const args = ['-p', prompt, '--output-format', 'json', '--dangerously-skip-permissions'];
191
+ const timeout = (input.timeout ?? 300) * 1000;
192
+ // Set up streaming batchers for real-time log output
193
+ const stdoutBatcher = new StreamBatcher((content) => {
194
+ context.emitEvent?.({
195
+ type: 'log:append',
196
+ data: { stream: 'stdout', stepName: 'clarify', content },
197
+ });
198
+ });
199
+ const stderrBatcher = new StreamBatcher((content) => {
200
+ context.emitEvent?.({
201
+ type: 'log:append',
202
+ data: { stream: 'stderr', stepName: 'clarify', content },
203
+ });
204
+ });
205
+ const result = await executeCommand('claude', args, {
206
+ cwd: input.feature_dir,
207
+ timeout,
208
+ signal: context.signal,
209
+ onStdout: (chunk) => stdoutBatcher.append(chunk),
210
+ onStderr: (chunk) => stderrBatcher.append(chunk),
211
+ });
212
+ // Flush remaining batched content
213
+ stdoutBatcher.flush();
214
+ stderrBatcher.flush();
215
+ if (result.exitCode !== 0) {
216
+ return {
217
+ success: false,
218
+ questions_count: 0,
219
+ questions: [],
220
+ clarifications_file: clarificationsFile,
221
+ };
222
+ }
223
+ // Parse the generated clarifications
224
+ let questions = [];
225
+ if (await exists(clarificationsFile)) {
226
+ try {
227
+ const clarificationsContent = await readFile(clarificationsFile);
228
+ questions = parseQuestions(clarificationsContent);
229
+ }
230
+ catch {
231
+ // Ignore read errors
232
+ }
233
+ }
234
+ // On resume: only count NEW questions (beyond what existed before the agent ran).
235
+ // On initial run: all questions are new.
236
+ const newQuestions = isResume
237
+ ? questions.slice(previousQuestionCount)
238
+ : questions;
239
+ // Post NEW questions to GitHub issue
240
+ let postedToIssue = false;
241
+ if (input.issue_number && newQuestions.length > 0) {
242
+ try {
243
+ const header = isResume
244
+ ? '## Follow-up Clarification Questions\n\nAfter reviewing your answers, the following additional questions need clarification:\n\n'
245
+ : '## Clarification Questions\n\nThe following areas need clarification before proceeding:\n\n';
246
+ let comment = header;
247
+ for (let i = 0; i < newQuestions.length; i++) {
248
+ const q = newQuestions[i];
249
+ if (q) {
250
+ comment += `### Q${i + 1}: ${q.topic}\n`;
251
+ comment += `**Context**: ${q.context}\n\n`;
252
+ comment += `**Question**: ${q.question}\n`;
253
+ if (q.options) {
254
+ comment += '\n**Options**:\n';
255
+ for (const opt of q.options) {
256
+ comment += `- ${opt.label}) ${opt.description}\n`;
257
+ }
258
+ }
259
+ comment += '\n---\n\n';
260
+ }
261
+ }
262
+ await executeCommand('gh', [
263
+ 'issue', 'comment', String(input.issue_number),
264
+ '--body', comment,
265
+ ], {
266
+ cwd: context.workdir,
267
+ timeout: 30000,
268
+ });
269
+ postedToIssue = true;
270
+ context.logger.info(`Posted ${newQuestions.length} ${isResume ? 'follow-up ' : ''}questions to issue #${input.issue_number}`);
271
+ }
272
+ catch (error) {
273
+ context.logger.warn(`Failed to post to issue: ${error instanceof Error ? error.message : String(error)}`);
274
+ }
275
+ }
276
+ if (isResume) {
277
+ context.logger.info(newQuestions.length > 0
278
+ ? `Generated ${newQuestions.length} follow-up questions`
279
+ : `All clarifications resolved, proceeding`);
280
+ }
281
+ else {
282
+ context.logger.info(`Generated ${questions.length} clarification questions`);
283
+ }
284
+ return {
285
+ success: true,
286
+ questions_count: newQuestions.length,
287
+ questions: newQuestions,
288
+ posted_to_issue: postedToIssue,
289
+ clarifications_file: clarificationsFile,
290
+ };
291
+ }
292
+ catch (error) {
293
+ context.logger.error(`Clarify operation failed: ${error instanceof Error ? error.message : String(error)}`);
294
+ return {
295
+ success: false,
296
+ questions_count: 0,
297
+ questions: [],
298
+ clarifications_file: clarificationsFile,
299
+ };
300
+ }
301
+ }
302
+ //# sourceMappingURL=clarify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clarify.js","sourceRoot":"","sources":["../../../../../src/actions/builtin/speckit/operations/clarify.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,OAAO,EAAE,cAAc,EAAe,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAa,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEzD;;GAEG;AACH,SAAS,kBAAkB,CAAC,UAAkB,EAAE,WAAmB;IACjE,OAAO;;qBAEY,UAAU;uBACR,IAAI,CAAC,UAAU,EAAE,mBAAmB,CAAC;;;EAG1D,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yCA+B4B,CAAC;AAC1C,CAAC;AAED;;;;GAIG;AACH,SAAS,iBAAiB,CACxB,UAAkB,EAClB,WAAmB,EACnB,sBAA8B,EAC9B,WAAmB;IAEnB,OAAO;mEAC0D,WAAW;;;qBAGzD,UAAU;uBACR,IAAI,CAAC,UAAU,EAAE,mBAAmB,CAAC;;;EAG1D,WAAW;;;EAGX,sBAAsB;;;yBAGC,WAAW;;;;;;;;;;;;;;;;;;;;iEAoB6B,CAAC;AAClE,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,OAAe;IACrC,MAAM,SAAS,GAA4B,EAAE,CAAC;IAC9C,MAAM,cAAc,GAAG,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IAEpD,KAAK,MAAM,KAAK,IAAI,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5C,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAC/C,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;QAChE,MAAM,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAElE,IAAI,UAAU,EAAE,CAAC,CAAC,CAAC,IAAI,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1C,MAAM,QAAQ,GAA0B;gBACtC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;gBAC3B,OAAO,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE;gBACxC,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;aAClC,CAAC;YAEF,2BAA2B;YAC3B,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;YACpF,IAAI,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtB,MAAM,WAAW,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;gBACpC,MAAM,aAAa,GAAG,WAAW,CAAC,QAAQ,CAAC,sCAAsC,CAAC,CAAC;gBACnF,MAAM,OAAO,GAAkD,EAAE,CAAC;gBAClE,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;oBAClC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;wBACrC,OAAO,CAAC,IAAI,CAAC;4BACX,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;4BACf,WAAW,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE;yBACtD,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;gBACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACvB,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAC;gBAC7B,CAAC;YACH,CAAC;YAED,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,KAAmB,EACnB,OAAsB;IAEtB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IACpD,MAAM,kBAAkB,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,mBAAmB,CAAC,CAAC;IAExE,gFAAgF;IAChF,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAClD,OAAO,CAAC,MAAM,CAAC,IAAI,CACjB,QAAQ;QACN,CAAC,CAAC,kDAAkD,KAAK,CAAC,WAAW,EAAE;QACvE,CAAC,CAAC,2CAA2C,KAAK,CAAC,WAAW,EAAE,CACnE,CAAC;IAEF,qBAAqB;IACrB,IAAI,CAAC,CAAC,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;QAC9B,OAAO;YACL,OAAO,EAAE,KAAK;YACd,eAAe,EAAE,CAAC;YAClB,SAAS,EAAE,EAAE;YACb,mBAAmB,EAAE,kBAAkB;SACxC,CAAC;IACJ,CAAC;IAED,IAAI,WAAmB,CAAC;IACxB,IAAI,CAAC;QACH,WAAW,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACzC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,6BAA6B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC5G,OAAO;YACL,OAAO,EAAE,KAAK;YACd,eAAe,EAAE,CAAC;YAClB,SAAS,EAAE,EAAE;YACb,mBAAmB,EAAE,kBAAkB;SACxC,CAAC;IACJ,CAAC;IAED,+FAA+F;IAC/F,IAAI,MAAc,CAAC;IACnB,IAAI,QAAQ,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;QACnC,IAAI,sBAAsB,GAAG,EAAE,CAAC;QAChC,IAAI,CAAC;YACH,sBAAsB,GAAG,MAAM,QAAQ,CAAC,kBAAkB,CAAC,CAAC;QAC9D,CAAC;QAAC,MAAM,CAAC,CAAC,6BAA6B,CAAC,CAAC;QACzC,MAAM,GAAG,iBAAiB,CAAC,KAAK,CAAC,WAAW,EAAE,WAAW,EAAE,sBAAsB,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;IACzG,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,kBAAkB,CAAC,KAAK,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IAC9D,CAAC;IAED,2FAA2F;IAC3F,IAAI,qBAAqB,GAAG,CAAC,CAAC;IAC9B,IAAI,QAAQ,IAAI,CAAC,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC,EAAE,CAAC;QACnD,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,kBAAkB,CAAC,CAAC;YACpD,qBAAqB,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC;QAC1D,CAAC;QAAC,MAAM,CAAC,CAAC,WAAW,CAAC,CAAC;IACzB,CAAC;IAED,IAAI,CAAC;QACH,+EAA+E;QAC/E,MAAM,IAAI,GAAa,CAAC,IAAI,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,gCAAgC,CAAC,CAAC;QACnG,MAAM,OAAO,GAAG,CAAC,KAAK,CAAC,OAAO,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC;QAE9C,qDAAqD;QACrD,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC,CAAC,OAAO,EAAE,EAAE;YAClD,OAAO,CAAC,SAAS,EAAE,CAAC;gBAClB,IAAI,EAAE,YAAY;gBAClB,IAAI,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE;aACzD,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC,CAAC,OAAO,EAAE,EAAE;YAClD,OAAO,CAAC,SAAS,EAAE,CAAC;gBAClB,IAAI,EAAE,YAAY;gBAClB,IAAI,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE;aACzD,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,QAAQ,EAAE,IAAI,EAAE;YAClD,GAAG,EAAE,KAAK,CAAC,WAAW;YACtB,OAAO;YACP,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC;YAChD,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC;SACjD,CAAC,CAAC;QAEH,kCAAkC;QAClC,aAAa,CAAC,KAAK,EAAE,CAAC;QACtB,aAAa,CAAC,KAAK,EAAE,CAAC;QAEtB,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,eAAe,EAAE,CAAC;gBAClB,SAAS,EAAE,EAAE;gBACb,mBAAmB,EAAE,kBAAkB;aACxC,CAAC;QACJ,CAAC;QAED,qCAAqC;QACrC,IAAI,SAAS,GAA4B,EAAE,CAAC;QAC5C,IAAI,MAAM,MAAM,CAAC,kBAAkB,CAAC,EAAE,CAAC;YACrC,IAAI,CAAC;gBACH,MAAM,qBAAqB,GAAG,MAAM,QAAQ,CAAC,kBAAkB,CAAC,CAAC;gBACjE,SAAS,GAAG,cAAc,CAAC,qBAAqB,CAAC,CAAC;YACpD,CAAC;YAAC,MAAM,CAAC;gBACP,qBAAqB;YACvB,CAAC;QACH,CAAC;QAED,kFAAkF;QAClF,yCAAyC;QACzC,MAAM,YAAY,GAAG,QAAQ;YAC3B,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,qBAAqB,CAAC;YACxC,CAAC,CAAC,SAAS,CAAC;QAEd,qCAAqC;QACrC,IAAI,aAAa,GAAG,KAAK,CAAC;QAC1B,IAAI,KAAK,CAAC,YAAY,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClD,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,QAAQ;oBACrB,CAAC,CAAC,kIAAkI;oBACpI,CAAC,CAAC,6FAA6F,CAAC;gBAElG,IAAI,OAAO,GAAG,MAAM,CAAC;gBACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC7C,MAAM,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;oBAC1B,IAAI,CAAC,EAAE,CAAC;wBACN,OAAO,IAAI,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC;wBACzC,OAAO,IAAI,gBAAgB,CAAC,CAAC,OAAO,MAAM,CAAC;wBAC3C,OAAO,IAAI,iBAAiB,CAAC,CAAC,QAAQ,IAAI,CAAC;wBAC3C,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;4BACd,OAAO,IAAI,kBAAkB,CAAC;4BAC9B,KAAK,MAAM,GAAG,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;gCAC5B,OAAO,IAAI,KAAK,GAAG,CAAC,KAAK,KAAK,GAAG,CAAC,WAAW,IAAI,CAAC;4BACpD,CAAC;wBACH,CAAC;wBACD,OAAO,IAAI,WAAW,CAAC;oBACzB,CAAC;gBACH,CAAC;gBAED,MAAM,cAAc,CAAC,IAAI,EAAE;oBACzB,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC;oBAC9C,QAAQ,EAAE,OAAO;iBAClB,EAAE;oBACD,GAAG,EAAE,OAAO,CAAC,OAAO;oBACpB,OAAO,EAAE,KAAK;iBACf,CAAC,CAAC;gBACH,aAAa,GAAG,IAAI,CAAC;gBACrB,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,YAAY,CAAC,MAAM,IAAI,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,uBAAuB,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC;YAChI,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,4BAA4B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC5G,CAAC;QACH,CAAC;QAED,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,CAAC,MAAM,CAAC,IAAI,CACjB,YAAY,CAAC,MAAM,GAAG,CAAC;gBACrB,CAAC,CAAC,aAAa,YAAY,CAAC,MAAM,sBAAsB;gBACxD,CAAC,CAAC,yCAAyC,CAC9C,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,SAAS,CAAC,MAAM,0BAA0B,CAAC,CAAC;QAC/E,CAAC;QAED,OAAO;YACL,OAAO,EAAE,IAAI;YACb,eAAe,EAAE,YAAY,CAAC,MAAM;YACpC,SAAS,EAAE,YAAY;YACvB,eAAe,EAAE,aAAa;YAC9B,mBAAmB,EAAE,kBAAkB;SACxC,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,6BAA6B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC5G,OAAO;YACL,OAAO,EAAE,KAAK;YACd,eAAe,EAAE,CAAC;YAClB,SAAS,EAAE,EAAE;YACb,mBAAmB,EAAE,kBAAkB;SACxC,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Copy template operation handler.
3
+ * Wraps the templates library for workflow execution.
4
+ */
5
+ import type { Logger } from '../../../../types/logger.js';
6
+ import type { CopyTemplateInput, CopyTemplateOutput } from '../types.js';
7
+ /**
8
+ * Execute the copy_template operation
9
+ */
10
+ export declare function executeCopyTemplate(input: CopyTemplateInput, logger: Logger): Promise<CopyTemplateOutput>;
11
+ //# sourceMappingURL=copy-template.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copy-template.d.ts","sourceRoot":"","sources":["../../../../../src/actions/builtin/speckit/operations/copy-template.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAGzE;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,iBAAiB,EACxB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,kBAAkB,CAAC,CAmB7B"}
@@ -0,0 +1,23 @@
1
+ import { copyTemplates } from '../lib/templates.js';
2
+ /**
3
+ * Execute the copy_template operation
4
+ */
5
+ export async function executeCopyTemplate(input, logger) {
6
+ logger.info(`Copying templates: ${input.templates.join(', ')}`);
7
+ const result = await copyTemplates(input);
8
+ if (result.success) {
9
+ for (const copied of result.copied) {
10
+ logger.info(`Copied ${copied.template} to ${copied.destPath}`);
11
+ }
12
+ }
13
+ else {
14
+ logger.error('Template copy failed');
15
+ if (result.errors) {
16
+ for (const error of result.errors) {
17
+ logger.error(`${error.template}: ${error.error.message}`);
18
+ }
19
+ }
20
+ }
21
+ return result;
22
+ }
23
+ //# sourceMappingURL=copy-template.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copy-template.js","sourceRoot":"","sources":["../../../../../src/actions/builtin/speckit/operations/copy-template.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,KAAwB,EACxB,MAAc;IAEd,MAAM,CAAC,IAAI,CAAC,sBAAsB,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEhE,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,KAAK,CAAC,CAAC;IAE1C,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YACnC,MAAM,CAAC,IAAI,CAAC,UAAU,MAAM,CAAC,QAAQ,OAAO,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;QACrC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClB,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;gBAClC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,QAAQ,KAAK,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Create feature operation handler.
3
+ * Wraps the feature library for workflow execution.
4
+ */
5
+ import type { Logger } from '../../../../types/logger.js';
6
+ import type { CreateFeatureInput, CreateFeatureOutput } from '../types.js';
7
+ /**
8
+ * Execute the create_feature operation
9
+ */
10
+ export declare function executeCreateFeature(input: CreateFeatureInput, logger: Logger): Promise<CreateFeatureOutput>;
11
+ //# sourceMappingURL=create-feature.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-feature.d.ts","sourceRoot":"","sources":["../../../../../src/actions/builtin/speckit/operations/create-feature.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAG3E;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,kBAAkB,EACzB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,mBAAmB,CAAC,CAqB9B"}
@@ -0,0 +1,25 @@
1
+ import { createFeature } from '../lib/feature.js';
2
+ /**
3
+ * Execute the create_feature operation
4
+ */
5
+ export async function executeCreateFeature(input, logger) {
6
+ logger.info(`Creating feature from description: ${input.description.substring(0, 50)}...`);
7
+ const result = await createFeature(input);
8
+ if (result.success) {
9
+ logger.info(`Feature created: ${result.branch_name}`);
10
+ logger.info(`Feature directory: ${result.feature_dir}`);
11
+ if (result.git_branch_created) {
12
+ logger.info(`Git branch created: ${result.branch_name}`);
13
+ }
14
+ if (result.branched_from_epic) {
15
+ logger.info(`Branched from epic: ${result.parent_epic_branch}`);
16
+ }
17
+ }
18
+ else {
19
+ logger.error(`Failed to create feature: branch=${result.branch_name || '(empty)'}, ` +
20
+ `featureDir=${result.feature_dir || '(empty)'}, num=${result.feature_num || '(empty)'}, ` +
21
+ `cwd=${input.cwd || '(default)'}`);
22
+ }
23
+ return result;
24
+ }
25
+ //# sourceMappingURL=create-feature.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-feature.js","sourceRoot":"","sources":["../../../../../src/actions/builtin/speckit/operations/create-feature.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,KAAyB,EACzB,MAAc;IAEd,MAAM,CAAC,IAAI,CAAC,sCAAsC,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;IAE3F,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,KAAK,CAAC,CAAC;IAE1C,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,MAAM,CAAC,IAAI,CAAC,oBAAoB,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;QACtD,MAAM,CAAC,IAAI,CAAC,sBAAsB,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;QACxD,IAAI,MAAM,CAAC,kBAAkB,EAAE,CAAC;YAC9B,MAAM,CAAC,IAAI,CAAC,uBAAuB,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;QAC3D,CAAC;QACD,IAAI,MAAM,CAAC,kBAAkB,EAAE,CAAC;YAC9B,MAAM,CAAC,IAAI,CAAC,uBAAuB,MAAM,CAAC,kBAAkB,EAAE,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,KAAK,CAAC,oCAAoC,MAAM,CAAC,WAAW,IAAI,SAAS,IAAI;YAClF,cAAc,MAAM,CAAC,WAAW,IAAI,SAAS,SAAS,MAAM,CAAC,WAAW,IAAI,SAAS,IAAI;YACzF,OAAO,KAAK,CAAC,GAAG,IAAI,WAAW,EAAE,CAAC,CAAC;IACvC,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}