@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 @@
1
+ {"version":3,"file":"workspace-prepare.d.ts","sourceRoot":"","sources":["../../../src/actions/builtin/workspace-prepare.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EACZ,UAAU,EACV,gBAAgB,EAGhB,cAAc,EAGf,MAAM,sBAAsB,CAAC;AAI9B;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,UAAU;IACpD,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAuB;IAEhD,SAAS,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO;IAIxC,QAAQ,CAAC,IAAI,EAAE,cAAc,GAAG,gBAAgB;cAqBhC,eAAe,CAC7B,IAAI,EAAE,cAAc,EACpB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;CAyF3C"}
@@ -0,0 +1,108 @@
1
+ /**
2
+ * Workspace prepare action handler.
3
+ * Handles git checkout/branch operations.
4
+ */
5
+ import { BaseAction } from '../base-action.js';
6
+ import { parseActionType } from '../../types/action.js';
7
+ import { executeCommand } from '../cli-utils.js';
8
+ /**
9
+ * Action handler for workspace preparation (git operations)
10
+ */
11
+ export class WorkspacePrepareAction extends BaseAction {
12
+ type = 'workspace.prepare';
13
+ canHandle(step) {
14
+ return parseActionType(step) === 'workspace.prepare';
15
+ }
16
+ validate(step) {
17
+ const errors = [];
18
+ const warnings = [];
19
+ const branch = this.getInput(step, { inputs: {}, stepOutputs: new Map(), env: {}, workdir: '', signal: new AbortController().signal, logger: { info: () => { }, warn: () => { }, error: () => { }, debug: () => { } }, workflow: { name: '', phases: [] }, phase: { name: '', steps: [] }, step }, 'branch');
20
+ if (!branch) {
21
+ errors.push({
22
+ field: 'branch',
23
+ message: 'Branch name is required for workspace.prepare action',
24
+ code: 'MISSING_BRANCH',
25
+ });
26
+ }
27
+ return {
28
+ valid: errors.length === 0,
29
+ errors,
30
+ warnings,
31
+ };
32
+ }
33
+ async executeInternal(step, context) {
34
+ const input = {
35
+ branch: this.getRequiredInput(step, context, 'branch'),
36
+ baseBranch: this.getInput(step, context, 'baseBranch'),
37
+ force: this.getInput(step, context, 'force', false),
38
+ };
39
+ context.logger.info(`Preparing workspace on branch: ${input.branch}`);
40
+ try {
41
+ // Get current branch
42
+ const currentBranchResult = await executeCommand('git', ['rev-parse', '--abbrev-ref', 'HEAD'], {
43
+ cwd: context.workdir,
44
+ signal: context.signal,
45
+ });
46
+ if (currentBranchResult.exitCode !== 0) {
47
+ return this.failureResult('Failed to get current branch', {
48
+ stderr: currentBranchResult.stderr,
49
+ });
50
+ }
51
+ const previousBranch = currentBranchResult.stdout.trim();
52
+ // Check if branch exists
53
+ const branchExistsResult = await executeCommand('git', ['show-ref', '--verify', '--quiet', `refs/heads/${input.branch}`], {
54
+ cwd: context.workdir,
55
+ signal: context.signal,
56
+ });
57
+ const branchExists = branchExistsResult.exitCode === 0;
58
+ let created = false;
59
+ if (branchExists) {
60
+ // Checkout existing branch
61
+ const checkoutArgs = ['checkout', input.branch];
62
+ if (input.force) {
63
+ checkoutArgs.push('--force');
64
+ }
65
+ const checkoutResult = await executeCommand('git', checkoutArgs, {
66
+ cwd: context.workdir,
67
+ signal: context.signal,
68
+ });
69
+ if (checkoutResult.exitCode !== 0) {
70
+ return this.failureResult(`Failed to checkout branch ${input.branch}`, {
71
+ stderr: checkoutResult.stderr,
72
+ });
73
+ }
74
+ context.logger.info(`Checked out existing branch: ${input.branch}`);
75
+ }
76
+ else {
77
+ // Create new branch
78
+ const createArgs = ['checkout', '-b', input.branch];
79
+ if (input.baseBranch) {
80
+ createArgs.push(input.baseBranch);
81
+ }
82
+ const createResult = await executeCommand('git', createArgs, {
83
+ cwd: context.workdir,
84
+ signal: context.signal,
85
+ });
86
+ if (createResult.exitCode !== 0) {
87
+ return this.failureResult(`Failed to create branch ${input.branch}`, {
88
+ stderr: createResult.stderr,
89
+ });
90
+ }
91
+ created = true;
92
+ context.logger.info(`Created new branch: ${input.branch}`);
93
+ }
94
+ const output = {
95
+ branch: input.branch,
96
+ previousBranch,
97
+ created,
98
+ };
99
+ return this.successResult(output, {
100
+ stdout: `Branch ${input.branch} ${created ? 'created' : 'checked out'}`,
101
+ });
102
+ }
103
+ catch (error) {
104
+ return this.failureResult(error instanceof Error ? error.message : String(error));
105
+ }
106
+ }
107
+ }
108
+ //# sourceMappingURL=workspace-prepare.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-prepare.js","sourceRoot":"","sources":["../../../src/actions/builtin/workspace-prepare.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Command execution options
3
+ */
4
+ export interface CommandOptions {
5
+ /** Working directory */
6
+ cwd?: string;
7
+ /** Environment variables */
8
+ env?: Record<string, string>;
9
+ /** Timeout in milliseconds */
10
+ timeout?: number;
11
+ /** Abort signal for cancellation */
12
+ signal?: AbortSignal;
13
+ /** Callback for stdout chunks (for real-time streaming) */
14
+ onStdout?: (chunk: string) => void;
15
+ /** Callback for stderr chunks */
16
+ onStderr?: (chunk: string) => void;
17
+ }
18
+ /**
19
+ * Command execution result
20
+ */
21
+ export interface CommandResult {
22
+ /** Exit code (0 = success) */
23
+ exitCode: number;
24
+ /** Standard output */
25
+ stdout: string;
26
+ /** Standard error */
27
+ stderr: string;
28
+ }
29
+ /**
30
+ * CLI availability status
31
+ */
32
+ export interface CLIStatus {
33
+ /** Whether the CLI is available */
34
+ available: boolean;
35
+ /** Version if available */
36
+ version?: string;
37
+ /** Error message if not available */
38
+ error?: string;
39
+ }
40
+ /**
41
+ * Check if a CLI tool is available
42
+ * @param command The CLI command to check (e.g., 'git', 'gh', 'claude')
43
+ * @param versionFlag The flag to get version (default: '--version')
44
+ * @returns CLI status
45
+ */
46
+ export declare function checkCLI(command: string, versionFlag?: string): Promise<CLIStatus>;
47
+ /**
48
+ * Check all required CLIs for workflow execution
49
+ * @returns Object with status for each CLI
50
+ */
51
+ export declare function checkAllCLIs(): Promise<Record<string, CLIStatus>>;
52
+ /**
53
+ * Execute a command and return the result
54
+ * @param command The command to execute
55
+ * @param args Command arguments
56
+ * @param options Execution options
57
+ * @returns Command result
58
+ */
59
+ export declare function executeCommand(command: string, args: string[], options?: CommandOptions): Promise<CommandResult>;
60
+ /**
61
+ * Execute a command using shell (for complex commands with pipes, etc.)
62
+ * @param command The shell command to execute
63
+ * @param options Execution options
64
+ * @returns Command result
65
+ */
66
+ export declare function executeShellCommand(command: string, options?: CommandOptions): Promise<CommandResult>;
67
+ /**
68
+ * Parse JSON output safely, returning null if parsing fails
69
+ */
70
+ export declare function parseJSONSafe(output: string): unknown | null;
71
+ /**
72
+ * Extract JSON from output that may contain non-JSON content
73
+ * Looks for first { or [ and tries to parse from there
74
+ */
75
+ export declare function extractJSON(output: string): unknown | null;
76
+ //# sourceMappingURL=cli-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-utils.d.ts","sourceRoot":"","sources":["../../src/actions/cli-utils.ts"],"names":[],"mappings":"AAUA;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,wBAAwB;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,4BAA4B;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,8BAA8B;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oCAAoC;IACpC,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,iCAAiC;IACjC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,8BAA8B;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,sBAAsB;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,qBAAqB;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,mCAAmC;IACnC,SAAS,EAAE,OAAO,CAAC;IACnB,2BAA2B;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qCAAqC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;GAKG;AACH,wBAAsB,QAAQ,CAC5B,OAAO,EAAE,MAAM,EACf,WAAW,SAAc,GACxB,OAAO,CAAC,SAAS,CAAC,CAwBpB;AAED;;;GAGG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAQvE;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,aAAa,CAAC,CAuGxB;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,aAAa,CAAC,CAmFxB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAM5D;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAyB1D"}
@@ -0,0 +1,278 @@
1
+ /**
2
+ * CLI utility functions for action handlers.
3
+ * Provides command execution and CLI availability checks.
4
+ */
5
+ import { execFile, spawn } from 'node:child_process';
6
+ import { StringDecoder } from 'node:string_decoder';
7
+ import { promisify } from 'node:util';
8
+ const execFileAsync = promisify(execFile);
9
+ /**
10
+ * Check if a CLI tool is available
11
+ * @param command The CLI command to check (e.g., 'git', 'gh', 'claude')
12
+ * @param versionFlag The flag to get version (default: '--version')
13
+ * @returns CLI status
14
+ */
15
+ export async function checkCLI(command, versionFlag = '--version') {
16
+ try {
17
+ const { stdout } = await execFileAsync(command, [versionFlag], {
18
+ timeout: 5000,
19
+ });
20
+ // Extract version from output (usually first line, or number pattern)
21
+ const versionMatch = stdout.match(/\d+\.\d+(\.\d+)?/);
22
+ return {
23
+ available: true,
24
+ version: versionMatch ? versionMatch[0] : stdout.trim().split('\n')[0],
25
+ };
26
+ }
27
+ catch (error) {
28
+ const message = error instanceof Error ? error.message : String(error);
29
+ if (message.includes('ENOENT') || message.includes('not found')) {
30
+ return {
31
+ available: false,
32
+ error: `${command} is not installed. Please install it and try again.`,
33
+ };
34
+ }
35
+ return {
36
+ available: false,
37
+ error: `Failed to check ${command}: ${message}`,
38
+ };
39
+ }
40
+ }
41
+ /**
42
+ * Check all required CLIs for workflow execution
43
+ * @returns Object with status for each CLI
44
+ */
45
+ export async function checkAllCLIs() {
46
+ const [git, gh, claude] = await Promise.all([
47
+ checkCLI('git'),
48
+ checkCLI('gh'),
49
+ checkCLI('claude'),
50
+ ]);
51
+ return { git, gh, claude };
52
+ }
53
+ /**
54
+ * Execute a command and return the result
55
+ * @param command The command to execute
56
+ * @param args Command arguments
57
+ * @param options Execution options
58
+ * @returns Command result
59
+ */
60
+ export async function executeCommand(command, args, options = {}) {
61
+ const { cwd, env, timeout, signal, onStdout, onStderr } = options;
62
+ // If already aborted before we start, resolve immediately
63
+ if (signal?.aborted) {
64
+ return { exitCode: 130, stdout: '', stderr: 'Aborted before start' };
65
+ }
66
+ return new Promise((resolve, reject) => {
67
+ const proc = spawn(command, args, {
68
+ cwd,
69
+ env: { ...process.env, ...env },
70
+ stdio: ['ignore', 'pipe', 'pipe'],
71
+ detached: true, // create process group so we can kill the entire tree
72
+ });
73
+ let stdout = '';
74
+ let stderr = '';
75
+ let killed = false;
76
+ // Use StringDecoder to handle multi-byte UTF-8 characters across chunk boundaries
77
+ const stdoutDecoder = new StringDecoder('utf8');
78
+ const stderrDecoder = new StringDecoder('utf8');
79
+ /** Kill the entire process group (negative PID) */
80
+ const killProcessGroup = () => {
81
+ if (killed)
82
+ return;
83
+ killed = true;
84
+ if (proc.pid) {
85
+ try {
86
+ process.kill(-proc.pid, 'SIGTERM');
87
+ }
88
+ catch {
89
+ // Process may already be dead
90
+ proc.kill('SIGTERM');
91
+ }
92
+ }
93
+ else {
94
+ proc.kill('SIGTERM');
95
+ }
96
+ };
97
+ // Handle timeout
98
+ let timeoutId;
99
+ if (timeout && timeout > 0) {
100
+ timeoutId = setTimeout(() => {
101
+ killProcessGroup();
102
+ }, timeout);
103
+ }
104
+ proc.stdout.on('data', (data) => {
105
+ const decoded = stdoutDecoder.write(data);
106
+ stdout += decoded;
107
+ onStdout?.(decoded);
108
+ });
109
+ proc.stderr.on('data', (data) => {
110
+ const decoded = stderrDecoder.write(data);
111
+ stderr += decoded;
112
+ onStderr?.(decoded);
113
+ });
114
+ proc.on('error', (error) => {
115
+ if (timeoutId)
116
+ clearTimeout(timeoutId);
117
+ reject(error);
118
+ });
119
+ proc.on('close', (code) => {
120
+ if (timeoutId)
121
+ clearTimeout(timeoutId);
122
+ // Flush remaining bytes from decoders
123
+ const stdoutRemaining = stdoutDecoder.end();
124
+ const stderrRemaining = stderrDecoder.end();
125
+ if (stdoutRemaining) {
126
+ stdout += stdoutRemaining;
127
+ onStdout?.(stdoutRemaining);
128
+ }
129
+ if (stderrRemaining) {
130
+ stderr += stderrRemaining;
131
+ onStderr?.(stderrRemaining);
132
+ }
133
+ if (killed) {
134
+ resolve({
135
+ exitCode: 124, // Standard timeout exit code
136
+ stdout,
137
+ stderr: stderr + '\nProcess killed due to timeout',
138
+ });
139
+ return;
140
+ }
141
+ resolve({
142
+ exitCode: code ?? 0,
143
+ stdout,
144
+ stderr,
145
+ });
146
+ });
147
+ // Handle abort signal — kills the entire process group
148
+ if (signal) {
149
+ signal.addEventListener('abort', () => {
150
+ killProcessGroup();
151
+ }, { once: true });
152
+ }
153
+ });
154
+ }
155
+ /**
156
+ * Execute a command using shell (for complex commands with pipes, etc.)
157
+ * @param command The shell command to execute
158
+ * @param options Execution options
159
+ * @returns Command result
160
+ */
161
+ export async function executeShellCommand(command, options = {}) {
162
+ const { cwd, env, timeout, signal } = options;
163
+ // If already aborted before we start, resolve immediately
164
+ if (signal?.aborted) {
165
+ return { exitCode: 130, stdout: '', stderr: 'Aborted before start' };
166
+ }
167
+ return new Promise((resolve, reject) => {
168
+ const proc = spawn(command, [], {
169
+ cwd,
170
+ env: { ...process.env, ...env },
171
+ stdio: ['ignore', 'pipe', 'pipe'],
172
+ shell: true,
173
+ detached: true, // create process group so we can kill the entire tree
174
+ });
175
+ let stdout = '';
176
+ let stderr = '';
177
+ let killed = false;
178
+ /** Kill the entire process group (negative PID) */
179
+ const killProcessGroup = () => {
180
+ if (killed)
181
+ return;
182
+ killed = true;
183
+ if (proc.pid) {
184
+ try {
185
+ process.kill(-proc.pid, 'SIGTERM');
186
+ }
187
+ catch {
188
+ proc.kill('SIGTERM');
189
+ }
190
+ }
191
+ else {
192
+ proc.kill('SIGTERM');
193
+ }
194
+ };
195
+ // Handle timeout
196
+ let timeoutId;
197
+ if (timeout && timeout > 0) {
198
+ timeoutId = setTimeout(() => {
199
+ killProcessGroup();
200
+ }, timeout);
201
+ }
202
+ proc.stdout.on('data', (data) => {
203
+ stdout += data.toString();
204
+ });
205
+ proc.stderr.on('data', (data) => {
206
+ stderr += data.toString();
207
+ });
208
+ proc.on('error', (error) => {
209
+ if (timeoutId)
210
+ clearTimeout(timeoutId);
211
+ reject(error);
212
+ });
213
+ proc.on('close', (code) => {
214
+ if (timeoutId)
215
+ clearTimeout(timeoutId);
216
+ if (killed) {
217
+ resolve({
218
+ exitCode: 124,
219
+ stdout,
220
+ stderr: stderr + '\nProcess killed due to timeout',
221
+ });
222
+ return;
223
+ }
224
+ resolve({
225
+ exitCode: code ?? 0,
226
+ stdout,
227
+ stderr,
228
+ });
229
+ });
230
+ // Handle abort signal — kills the entire process group
231
+ if (signal) {
232
+ signal.addEventListener('abort', () => {
233
+ killProcessGroup();
234
+ }, { once: true });
235
+ }
236
+ });
237
+ }
238
+ /**
239
+ * Parse JSON output safely, returning null if parsing fails
240
+ */
241
+ export function parseJSONSafe(output) {
242
+ try {
243
+ return JSON.parse(output);
244
+ }
245
+ catch {
246
+ return null;
247
+ }
248
+ }
249
+ /**
250
+ * Extract JSON from output that may contain non-JSON content
251
+ * Looks for first { or [ and tries to parse from there
252
+ */
253
+ export function extractJSON(output) {
254
+ // Try parsing the entire output first
255
+ const direct = parseJSONSafe(output);
256
+ if (direct !== null)
257
+ return direct;
258
+ // Look for JSON object or array start
259
+ const objectStart = output.indexOf('{');
260
+ const arrayStart = output.indexOf('[');
261
+ let start = -1;
262
+ if (objectStart >= 0 && arrayStart >= 0) {
263
+ start = Math.min(objectStart, arrayStart);
264
+ }
265
+ else if (objectStart >= 0) {
266
+ start = objectStart;
267
+ }
268
+ else if (arrayStart >= 0) {
269
+ start = arrayStart;
270
+ }
271
+ if (start >= 0) {
272
+ // Try to find matching end brace/bracket
273
+ const substr = output.substring(start);
274
+ return parseJSONSafe(substr);
275
+ }
276
+ return null;
277
+ }
278
+ //# sourceMappingURL=cli-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-utils.js","sourceRoot":"","sources":["../../src/actions/cli-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * epic.check_completion action - checks child issue completion status.
3
+ */
4
+ import { BaseAction } from '../base-action.js';
5
+ import type { ActionContext, ActionResult, ActionIdentifier, StepDefinition } from '../../types/index.js';
6
+ /**
7
+ * epic.check_completion action handler
8
+ */
9
+ export declare class CheckCompletionAction extends BaseAction {
10
+ readonly type: ActionIdentifier;
11
+ canHandle(step: StepDefinition): boolean;
12
+ protected executeInternal(step: StepDefinition, context: ActionContext): Promise<Omit<ActionResult, 'duration'>>;
13
+ }
14
+ //# sourceMappingURL=check-completion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-completion.d.ts","sourceRoot":"","sources":["../../../src/actions/epic/check-completion.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EACZ,gBAAgB,EAChB,cAAc,EAIf,MAAM,sBAAsB,CAAC;AAM9B;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,UAAU;IACnD,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAA2B;IAE1D,SAAS,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO;cAOxB,eAAe,CAC7B,IAAI,EAAE,cAAc,EACpB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;CAgD3C"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * epic.check_completion action - checks child issue completion status.
3
+ */
4
+ import { BaseAction } from '../base-action.js';
5
+ import { isNamespacedAction } from '../../types/action.js';
6
+ import { createGitHubClient } from '../github/client/index.js';
7
+ import { findChildIssues } from './find-children.js';
8
+ /**
9
+ * epic.check_completion action handler
10
+ */
11
+ export class CheckCompletionAction extends BaseAction {
12
+ type = 'epic.check_completion';
13
+ canHandle(step) {
14
+ const uses = step.uses ?? step.action;
15
+ if (!uses)
16
+ return false;
17
+ return uses === 'epic.check_completion' ||
18
+ (isNamespacedAction(uses) && uses === this.type);
19
+ }
20
+ async executeInternal(step, context) {
21
+ // Get inputs
22
+ const epicIssueNumber = this.getRequiredInput(step, context, 'epic_issue_number');
23
+ context.logger.info(`Checking completion status for epic #${epicIssueNumber}`);
24
+ try {
25
+ // Get GitHub client
26
+ const client = createGitHubClient(context.workdir);
27
+ // Get repo info
28
+ const repoInfo = await client.getRepoInfo();
29
+ // Search for child issues that reference this epic
30
+ const children = await findChildIssues(repoInfo.owner, repoInfo.repo, epicIssueNumber);
31
+ // Calculate completion stats
32
+ const totalChildren = children.length;
33
+ const completedChildren = children.filter(c => c.state === 'closed' && c.pr_merged).length;
34
+ const inProgressChildren = children.filter(c => c.state === 'open' && c.labels.includes('agent:in-progress')).length;
35
+ const blockedChildren = children.filter(c => c.labels.some(l => l.startsWith('waiting-for:'))).length;
36
+ const percentage = totalChildren > 0
37
+ ? Math.round((completedChildren / totalChildren) * 100)
38
+ : 0;
39
+ const readyForPr = totalChildren > 0 && completedChildren === totalChildren;
40
+ const output = {
41
+ percentage,
42
+ ready_for_pr: readyForPr,
43
+ total_children: totalChildren,
44
+ completed_children: completedChildren,
45
+ in_progress_children: inProgressChildren,
46
+ blocked_children: blockedChildren,
47
+ children,
48
+ };
49
+ context.logger.info(`Epic ${percentage}% complete (${completedChildren}/${totalChildren})`);
50
+ return this.successResult(output);
51
+ }
52
+ catch (error) {
53
+ return this.failureResult(error instanceof Error ? error.message : String(error));
54
+ }
55
+ }
56
+ }
57
+ //# sourceMappingURL=check-completion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-completion.js","sourceRoot":"","sources":["../../../src/actions/epic/check-completion.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * epic.close action - closes epic issue after PR merge.
3
+ */
4
+ import { BaseAction } from '../base-action.js';
5
+ import type { ActionContext, ActionResult, ActionIdentifier, StepDefinition } from '../../types/index.js';
6
+ /**
7
+ * epic.close action handler
8
+ */
9
+ export declare class CloseEpicAction extends BaseAction {
10
+ readonly type: ActionIdentifier;
11
+ canHandle(step: StepDefinition): boolean;
12
+ protected executeInternal(step: StepDefinition, context: ActionContext): Promise<Omit<ActionResult, 'duration'>>;
13
+ /**
14
+ * Generate completion comment for epic
15
+ */
16
+ private generateCompletionComment;
17
+ }
18
+ //# sourceMappingURL=close.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"close.d.ts","sourceRoot":"","sources":["../../../src/actions/epic/close.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EACZ,gBAAgB,EAChB,cAAc,EAGf,MAAM,sBAAsB,CAAC;AAK9B;;GAEG;AACH,qBAAa,eAAgB,SAAQ,UAAU;IAC7C,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAgB;IAE/C,SAAS,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO;cAOxB,eAAe,CAC7B,IAAI,EAAE,cAAc,EACpB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;IAiE1C;;OAEG;IACH,OAAO,CAAC,yBAAyB;CAalC"}