@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,76 @@
1
+ /**
2
+ * epic.close action - closes epic issue after PR merge.
3
+ */
4
+ import { BaseAction } from '../base-action.js';
5
+ import { isNamespacedAction } from '../../types/action.js';
6
+ import { createGitHubClient } from '../github/client/index.js';
7
+ /**
8
+ * epic.close action handler
9
+ */
10
+ export class CloseEpicAction extends BaseAction {
11
+ type = 'epic.close';
12
+ canHandle(step) {
13
+ const uses = step.uses ?? step.action;
14
+ if (!uses)
15
+ return false;
16
+ return uses === 'epic.close' ||
17
+ (isNamespacedAction(uses) && uses === this.type);
18
+ }
19
+ async executeInternal(step, context) {
20
+ // Get inputs
21
+ const epicIssueNumber = this.getRequiredInput(step, context, 'epic_issue_number');
22
+ const prNumber = this.getInput(step, context, 'pr_number');
23
+ context.logger.info(`Closing 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
+ // If PR number not provided, try to find it
30
+ let mergedPR = prNumber;
31
+ if (!mergedPR) {
32
+ // Look for epic branch PR
33
+ const epicBranch = `${epicIssueNumber}-`;
34
+ const branches = await client.listBranches(repoInfo.owner, repoInfo.repo);
35
+ const matchingBranch = branches.find(b => b.startsWith(epicBranch));
36
+ if (matchingBranch) {
37
+ const pr = await client.getPRForBranch(repoInfo.owner, repoInfo.repo, matchingBranch);
38
+ if (pr && pr.state === 'merged') {
39
+ mergedPR = pr.number;
40
+ }
41
+ }
42
+ }
43
+ // Generate completion comment
44
+ const commentBody = this.generateCompletionComment(epicIssueNumber, mergedPR);
45
+ // Add completion comment
46
+ await client.addIssueComment(repoInfo.owner, repoInfo.repo, epicIssueNumber, commentBody);
47
+ // Close the issue
48
+ await client.updateIssue(repoInfo.owner, repoInfo.repo, epicIssueNumber, {
49
+ state: 'closed',
50
+ });
51
+ context.logger.info(`Closed epic #${epicIssueNumber}`);
52
+ const output = {
53
+ closed: true,
54
+ issue_url: `https://github.com/${repoInfo.owner}/${repoInfo.repo}/issues/${epicIssueNumber}`,
55
+ };
56
+ return this.successResult(output);
57
+ }
58
+ catch (error) {
59
+ return this.failureResult(error instanceof Error ? error.message : String(error));
60
+ }
61
+ }
62
+ /**
63
+ * Generate completion comment for epic
64
+ */
65
+ generateCompletionComment(epicNumber, prNumber) {
66
+ let body = `## ✅ Epic Completed\n\n`;
67
+ body += `This epic has been successfully completed and closed.\n\n`;
68
+ if (prNumber) {
69
+ body += `**Merged via:** #${prNumber}\n\n`;
70
+ }
71
+ body += `---\n`;
72
+ body += `*Closed by Generacy workflow engine at ${new Date().toISOString()}*\n`;
73
+ return body;
74
+ }
75
+ }
76
+ //# sourceMappingURL=close.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"close.js","sourceRoot":"","sources":["../../../src/actions/epic/close.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * epic.create_pr action - creates rollup PR from epic branch.
3
+ */
4
+ import { BaseAction } from '../base-action.js';
5
+ import type { ActionContext, ActionResult, ActionIdentifier, StepDefinition } from '../../types/index.js';
6
+ /**
7
+ * epic.create_pr action handler
8
+ */
9
+ export declare class CreateEpicPRAction extends BaseAction {
10
+ readonly type: ActionIdentifier;
11
+ canHandle(step: StepDefinition): boolean;
12
+ protected executeInternal(step: StepDefinition, context: ActionContext): Promise<Omit<ActionResult, 'duration'>>;
13
+ /**
14
+ * Count commits between branches
15
+ */
16
+ private countCommits;
17
+ /**
18
+ * Generate PR body for epic rollup
19
+ */
20
+ private generatePRBody;
21
+ }
22
+ //# sourceMappingURL=create-pr.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-pr.d.ts","sourceRoot":"","sources":["../../../src/actions/epic/create-pr.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;AAM9B;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,UAAU;IAChD,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAoB;IAEnD,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;IAwH1C;;OAEG;YACW,YAAY;IAkB1B;;OAEG;IACH,OAAO,CAAC,cAAc;CAgBvB"}
@@ -0,0 +1,140 @@
1
+ /**
2
+ * epic.create_pr action - creates rollup PR from epic branch.
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 { CheckCompletionAction } from './check-completion.js';
8
+ /**
9
+ * epic.create_pr action handler
10
+ */
11
+ export class CreateEpicPRAction extends BaseAction {
12
+ type = 'epic.create_pr';
13
+ canHandle(step) {
14
+ const uses = step.uses ?? step.action;
15
+ if (!uses)
16
+ return false;
17
+ return uses === 'epic.create_pr' ||
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
+ const customTitle = this.getInput(step, context, 'title');
24
+ const skipApprovalLabel = this.getInput(step, context, 'skip_approval_label', false);
25
+ context.logger.info(`Creating rollup PR for epic #${epicIssueNumber}`);
26
+ try {
27
+ // Get GitHub client
28
+ const client = createGitHubClient(context.workdir);
29
+ // Get repo info
30
+ const repoInfo = await client.getRepoInfo();
31
+ // Check completion status
32
+ const checkAction = new CheckCompletionAction();
33
+ const checkResult = await checkAction.execute({
34
+ ...step,
35
+ with: { epic_issue_number: epicIssueNumber },
36
+ }, context);
37
+ if (!checkResult.success) {
38
+ return this.failureResult(`Failed to check completion: ${checkResult.error}`);
39
+ }
40
+ const status = checkResult.output;
41
+ if (!status.ready_for_pr) {
42
+ return this.failureResult(`Epic is not ready for PR (${status.percentage}% complete). All children must be completed.`);
43
+ }
44
+ // Get epic issue for title
45
+ const epicIssue = await client.getIssue(repoInfo.owner, repoInfo.repo, epicIssueNumber);
46
+ const title = customTitle ?? `[Epic] ${epicIssue.title}`;
47
+ // Determine epic branch name
48
+ const epicBranch = `${epicIssueNumber}-`;
49
+ const branches = await client.listBranches(repoInfo.owner, repoInfo.repo);
50
+ const matchingBranch = branches.find(b => b.startsWith(epicBranch));
51
+ if (!matchingBranch) {
52
+ return this.failureResult(`Could not find epic branch starting with ${epicBranch}`);
53
+ }
54
+ // Determine base branch (develop if exists, otherwise main/master)
55
+ let baseBranch = repoInfo.default_branch;
56
+ if (branches.includes('develop')) {
57
+ baseBranch = 'develop';
58
+ }
59
+ // Count commits that will be included
60
+ const commitsIncluded = await this.countCommits(client, matchingBranch, baseBranch);
61
+ // Generate PR body
62
+ const body = this.generatePRBody(epicIssueNumber, status.completed_children);
63
+ // Check if PR already exists
64
+ const existingPR = await client.getPRForBranch(repoInfo.owner, repoInfo.repo, matchingBranch);
65
+ let prNumber;
66
+ let prUrl;
67
+ if (existingPR) {
68
+ // Update existing PR
69
+ await client.updatePR(repoInfo.owner, repoInfo.repo, existingPR.number, {
70
+ title,
71
+ body,
72
+ });
73
+ prNumber = existingPR.number;
74
+ prUrl = `https://github.com/${repoInfo.owner}/${repoInfo.repo}/pull/${prNumber}`;
75
+ context.logger.info(`Updated existing PR #${prNumber}`);
76
+ }
77
+ else {
78
+ // Create new PR
79
+ const pr = await client.createPR(repoInfo.owner, repoInfo.repo, {
80
+ title,
81
+ body,
82
+ head: matchingBranch,
83
+ base: baseBranch,
84
+ draft: false,
85
+ });
86
+ prNumber = pr.number;
87
+ prUrl = `https://github.com/${repoInfo.owner}/${repoInfo.repo}/pull/${prNumber}`;
88
+ context.logger.info(`Created PR #${prNumber}`);
89
+ }
90
+ // Add approval label if not skipped
91
+ if (!skipApprovalLabel) {
92
+ await client.addLabels(repoInfo.owner, repoInfo.repo, prNumber, ['needs:epic-approval']);
93
+ context.logger.info('Added needs:epic-approval label');
94
+ }
95
+ const output = {
96
+ pr_number: prNumber,
97
+ pr_url: prUrl,
98
+ commits_included: commitsIncluded,
99
+ children_merged: status.completed_children,
100
+ };
101
+ return this.successResult(output);
102
+ }
103
+ catch (error) {
104
+ return this.failureResult(error instanceof Error ? error.message : String(error));
105
+ }
106
+ }
107
+ /**
108
+ * Count commits between branches
109
+ */
110
+ async countCommits(client, headBranch, baseBranch) {
111
+ try {
112
+ // Use git rev-list to count commits
113
+ const { execSync } = await import('child_process');
114
+ const result = execSync(`git rev-list --count ${baseBranch}..${headBranch}`, { encoding: 'utf-8' }).trim();
115
+ return parseInt(result, 10) || 0;
116
+ }
117
+ catch {
118
+ return 0;
119
+ }
120
+ }
121
+ /**
122
+ * Generate PR body for epic rollup
123
+ */
124
+ generatePRBody(epicNumber, childrenMerged) {
125
+ let body = `## Epic Rollup PR\n\n`;
126
+ body += `Closes #${epicNumber}\n\n`;
127
+ body += `### Summary\n\n`;
128
+ body += `This PR merges all completed work from epic #${epicNumber}.\n\n`;
129
+ body += `**Children merged:** ${childrenMerged}\n\n`;
130
+ body += `### Checklist\n\n`;
131
+ body += `- [ ] All child issues are closed with merged PRs\n`;
132
+ body += `- [ ] Integration tests pass\n`;
133
+ body += `- [ ] Documentation is updated\n`;
134
+ body += `- [ ] Ready for final review\n\n`;
135
+ body += `---\n`;
136
+ body += `*Created by Generacy workflow engine*\n`;
137
+ return body;
138
+ }
139
+ }
140
+ //# sourceMappingURL=create-pr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-pr.js","sourceRoot":"","sources":["../../../src/actions/epic/create-pr.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * epic.dispatch_children action - sends child issues to orchestrator queue.
3
+ */
4
+ import { BaseAction } from '../base-action.js';
5
+ import type { ActionContext, ActionResult, ActionIdentifier, StepDefinition } from '../../types/index.js';
6
+ /**
7
+ * epic.dispatch_children action handler
8
+ */
9
+ export declare class DispatchChildrenAction extends BaseAction {
10
+ readonly type: ActionIdentifier;
11
+ private readonly AGENT_ACCOUNT;
12
+ private readonly DISPATCHED_LABEL;
13
+ canHandle(step: StepDefinition): boolean;
14
+ protected executeInternal(step: StepDefinition, context: ActionContext): Promise<Omit<ActionResult, 'duration'>>;
15
+ }
16
+ //# sourceMappingURL=dispatch-children.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dispatch-children.d.ts","sourceRoot":"","sources":["../../../src/actions/epic/dispatch-children.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;AAK9B;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,UAAU;IACpD,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAA4B;IAG3D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAkB;IAChD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAsB;IAEvD,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;CA6F3C"}
@@ -0,0 +1,95 @@
1
+ /**
2
+ * epic.dispatch_children action - sends child issues to orchestrator queue.
3
+ */
4
+ import { BaseAction } from '../base-action.js';
5
+ import { isNamespacedAction } from '../../types/action.js';
6
+ import { createGitHubClient } from '../github/client/index.js';
7
+ /**
8
+ * epic.dispatch_children action handler
9
+ */
10
+ export class DispatchChildrenAction extends BaseAction {
11
+ type = 'epic.dispatch_children';
12
+ // Default agent account to assign dispatched issues to
13
+ AGENT_ACCOUNT = 'generacy-bot';
14
+ DISPATCHED_LABEL = 'agent:dispatched';
15
+ canHandle(step) {
16
+ const uses = step.uses ?? step.action;
17
+ if (!uses)
18
+ return false;
19
+ return uses === 'epic.dispatch_children' ||
20
+ (isNamespacedAction(uses) && uses === this.type);
21
+ }
22
+ async executeInternal(step, context) {
23
+ // Get inputs
24
+ const epicIssueNumber = this.getRequiredInput(step, context, 'epic_issue_number');
25
+ const childIssues = this.getRequiredInput(step, context, 'child_issues');
26
+ if (!Array.isArray(childIssues) || childIssues.length === 0) {
27
+ return this.failureResult('child_issues must be a non-empty array of issue numbers');
28
+ }
29
+ context.logger.info(`Dispatching ${childIssues.length} children from epic #${epicIssueNumber}`);
30
+ try {
31
+ // Get GitHub client
32
+ const client = createGitHubClient(context.workdir);
33
+ // Get repo info
34
+ const repoInfo = await client.getRepoInfo();
35
+ // Get agent account from environment or use default
36
+ const agentAccount = process.env.GENERACY_AGENT_ACCOUNT ?? this.AGENT_ACCOUNT;
37
+ const dispatched = [];
38
+ const failed = [];
39
+ // Process each child issue
40
+ for (const issueNumber of childIssues) {
41
+ try {
42
+ // Verify the issue exists and is open
43
+ const issue = await client.getIssue(repoInfo.owner, repoInfo.repo, issueNumber);
44
+ if (issue.state !== 'open') {
45
+ failed.push({
46
+ issue_number: issueNumber,
47
+ reason: `Issue is ${issue.state}, not open`,
48
+ });
49
+ continue;
50
+ }
51
+ // Check if already dispatched
52
+ const labels = issue.labels.map(l => l.name);
53
+ if (labels.includes(this.DISPATCHED_LABEL)) {
54
+ failed.push({
55
+ issue_number: issueNumber,
56
+ reason: 'Already dispatched',
57
+ });
58
+ continue;
59
+ }
60
+ // Assign to agent account
61
+ await client.updateIssue(repoInfo.owner, repoInfo.repo, issueNumber, {
62
+ assignees: [agentAccount],
63
+ });
64
+ // Add dispatched label
65
+ await client.addLabels(repoInfo.owner, repoInfo.repo, issueNumber, [this.DISPATCHED_LABEL]);
66
+ dispatched.push(issueNumber);
67
+ context.logger.info(`Dispatched #${issueNumber}`);
68
+ }
69
+ catch (error) {
70
+ failed.push({
71
+ issue_number: issueNumber,
72
+ reason: error instanceof Error ? error.message : String(error),
73
+ });
74
+ }
75
+ }
76
+ const output = {
77
+ dispatched,
78
+ failed,
79
+ agent_account: agentAccount,
80
+ };
81
+ // Consider success if at least one was dispatched
82
+ if (dispatched.length > 0) {
83
+ return this.successResult(output);
84
+ }
85
+ else if (failed.length > 0) {
86
+ return this.failureResult(`Failed to dispatch any children: ${failed.map(f => `#${f.issue_number}: ${f.reason}`).join(', ')}`);
87
+ }
88
+ return this.successResult(output);
89
+ }
90
+ catch (error) {
91
+ return this.failureResult(error instanceof Error ? error.message : String(error));
92
+ }
93
+ }
94
+ }
95
+ //# sourceMappingURL=dispatch-children.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dispatch-children.js","sourceRoot":"","sources":["../../../src/actions/epic/dispatch-children.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { EpicChild } from '../../types/index.js';
2
+ export interface EpicChildWithPr extends EpicChild {
3
+ pr_number: number | null;
4
+ }
5
+ export interface FindChildIssuesOptions {
6
+ /** Issue state filter. Defaults to 'all'. */
7
+ state?: 'open' | 'closed' | 'all';
8
+ /** Whether to check merged-PR status for each child. Defaults to true. */
9
+ includePrStatus?: boolean;
10
+ }
11
+ /**
12
+ * Find child issues that reference the given epic via `epic-parent: #N` in
13
+ * their body. Uses the GitHub search API via `gh issue list --search`.
14
+ */
15
+ export declare function findChildIssues(owner: string, repo: string, epicNumber: number, options?: FindChildIssuesOptions): Promise<EpicChildWithPr[]>;
16
+ //# sourceMappingURL=find-children.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find-children.d.ts","sourceRoot":"","sources":["../../../src/actions/epic/find-children.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAMtD,MAAM,WAAW,eAAgB,SAAQ,SAAS;IAChD,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAMD,MAAM,WAAW,sBAAsB;IACrC,6CAA6C;IAC7C,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IAClC,0EAA0E;IAC1E,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAMD;;;GAGG;AACH,wBAAsB,eAAe,CACnC,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,eAAe,EAAE,CAAC,CA0D5B"}
@@ -0,0 +1,92 @@
1
+ /**
2
+ * Shared utility for finding child issues of an epic.
3
+ *
4
+ * Searches for issues whose body contains `epic-parent: #N` using `gh issue list --search`.
5
+ * Optionally checks whether each child has a merged PR.
6
+ *
7
+ * Used by:
8
+ * - `epic.check_completion` action (workflow-engine)
9
+ * - `EpicCompletionMonitorService` (orchestrator)
10
+ */
11
+ import { executeCommand } from '../cli-utils.js';
12
+ // ---------------------------------------------------------------------------
13
+ // Public API
14
+ // ---------------------------------------------------------------------------
15
+ /**
16
+ * Find child issues that reference the given epic via `epic-parent: #N` in
17
+ * their body. Uses the GitHub search API via `gh issue list --search`.
18
+ */
19
+ export async function findChildIssues(owner, repo, epicNumber, options = {}) {
20
+ const { state = 'all', includePrStatus = true } = options;
21
+ const args = [
22
+ 'issue', 'list',
23
+ '-R', `${owner}/${repo}`,
24
+ '--search', `"epic-parent: ${epicNumber}" in:body`,
25
+ '--json', 'number,title,state,labels',
26
+ '--limit', '100',
27
+ ];
28
+ if (state !== 'open') {
29
+ // gh defaults to open; add --state for 'all' or 'closed'
30
+ args.push('--state', state);
31
+ }
32
+ const result = await executeCommand('gh', args);
33
+ if (result.exitCode !== 0) {
34
+ return [];
35
+ }
36
+ let issues;
37
+ try {
38
+ issues = JSON.parse(result.stdout);
39
+ }
40
+ catch {
41
+ return [];
42
+ }
43
+ const children = [];
44
+ for (const issue of issues) {
45
+ let prMerged = false;
46
+ let prNumber = null;
47
+ if (includePrStatus) {
48
+ const prStatus = await checkPrMerged(owner, repo, issue.number);
49
+ prMerged = prStatus.merged;
50
+ prNumber = prStatus.prNumber;
51
+ }
52
+ children.push({
53
+ issue_number: issue.number,
54
+ title: issue.title,
55
+ state: issue.state.toLowerCase(),
56
+ pr_merged: prMerged,
57
+ pr_number: prNumber,
58
+ labels: issue.labels.map(l => l.name),
59
+ });
60
+ }
61
+ return children;
62
+ }
63
+ // ---------------------------------------------------------------------------
64
+ // Internal helpers
65
+ // ---------------------------------------------------------------------------
66
+ /**
67
+ * Check whether a merged PR exists that closes the given issue.
68
+ */
69
+ async function checkPrMerged(owner, repo, issueNumber) {
70
+ const result = await executeCommand('gh', [
71
+ 'pr', 'list',
72
+ '-R', `${owner}/${repo}`,
73
+ '--search', `closes:#${issueNumber}`,
74
+ '--state', 'merged',
75
+ '--json', 'number',
76
+ '--limit', '1',
77
+ ]);
78
+ if (result.exitCode !== 0 || result.stdout.trim() === '[]') {
79
+ return { merged: false, prNumber: null };
80
+ }
81
+ try {
82
+ const prs = JSON.parse(result.stdout);
83
+ if (prs.length > 0 && prs[0]) {
84
+ return { merged: true, prNumber: prs[0].number };
85
+ }
86
+ }
87
+ catch {
88
+ // Fall through
89
+ }
90
+ return { merged: false, prNumber: null };
91
+ }
92
+ //# sourceMappingURL=find-children.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find-children.js","sourceRoot":"","sources":["../../../src/actions/epic/find-children.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Epic namespace actions - manages epic workflows and child issues.
3
+ */
4
+ import type { ActionNamespace, ActionHandler } from '../../types/action.js';
5
+ /**
6
+ * All epic action handlers
7
+ */
8
+ export declare const epicActionHandlers: ActionHandler[];
9
+ /**
10
+ * Epic namespace definition
11
+ */
12
+ export declare const epicNamespace: ActionNamespace;
13
+ export { PostTasksSummaryAction } from './post-tasks-summary.js';
14
+ export { CheckCompletionAction } from './check-completion.js';
15
+ export { UpdateStatusAction } from './update-status.js';
16
+ export { CreateEpicPRAction } from './create-pr.js';
17
+ export { CloseEpicAction } from './close.js';
18
+ export { DispatchChildrenAction } from './dispatch-children.js';
19
+ export { findChildIssues, type EpicChildWithPr, type FindChildIssuesOptions } from './find-children.js';
20
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/actions/epic/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAQ5E;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,aAAa,EAO7C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,eAI3B,CAAC;AAGF,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAGhE,OAAO,EAAE,eAAe,EAAE,KAAK,eAAe,EAAE,KAAK,sBAAsB,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,35 @@
1
+ import { PostTasksSummaryAction } from './post-tasks-summary.js';
2
+ import { CheckCompletionAction } from './check-completion.js';
3
+ import { UpdateStatusAction } from './update-status.js';
4
+ import { CreateEpicPRAction } from './create-pr.js';
5
+ import { CloseEpicAction } from './close.js';
6
+ import { DispatchChildrenAction } from './dispatch-children.js';
7
+ /**
8
+ * All epic action handlers
9
+ */
10
+ export const epicActionHandlers = [
11
+ new PostTasksSummaryAction(),
12
+ new CheckCompletionAction(),
13
+ new UpdateStatusAction(),
14
+ new CreateEpicPRAction(),
15
+ new CloseEpicAction(),
16
+ new DispatchChildrenAction(),
17
+ ];
18
+ /**
19
+ * Epic namespace definition
20
+ */
21
+ export const epicNamespace = {
22
+ namespace: 'epic',
23
+ description: 'Epic management actions for parent/child issue workflows',
24
+ handlers: epicActionHandlers,
25
+ };
26
+ // Export individual actions for direct use
27
+ export { PostTasksSummaryAction } from './post-tasks-summary.js';
28
+ export { CheckCompletionAction } from './check-completion.js';
29
+ export { UpdateStatusAction } from './update-status.js';
30
+ export { CreateEpicPRAction } from './create-pr.js';
31
+ export { CloseEpicAction } from './close.js';
32
+ export { DispatchChildrenAction } from './dispatch-children.js';
33
+ // Shared utilities
34
+ export { findChildIssues } from './find-children.js';
35
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/actions/epic/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAEhE;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAoB;IACjD,IAAI,sBAAsB,EAAE;IAC5B,IAAI,qBAAqB,EAAE;IAC3B,IAAI,kBAAkB,EAAE;IACxB,IAAI,kBAAkB,EAAE;IACxB,IAAI,eAAe,EAAE;IACrB,IAAI,sBAAsB,EAAE;CAC7B,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAoB;IAC5C,SAAS,EAAE,MAAM;IACjB,WAAW,EAAE,0DAA0D;IACvE,QAAQ,EAAE,kBAAkB;CAC7B,CAAC;AAEF,2CAA2C;AAC3C,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAEhE,mBAAmB;AACnB,OAAO,EAAE,eAAe,EAAqD,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * epic.post_tasks_summary action - posts task summary for epic review.
3
+ */
4
+ import { BaseAction } from '../base-action.js';
5
+ import type { ActionContext, ActionResult, ActionIdentifier, StepDefinition } from '../../types/index.js';
6
+ /**
7
+ * epic.post_tasks_summary action handler
8
+ */
9
+ export declare class PostTasksSummaryAction 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 tasks summary based on grouping strategy
15
+ */
16
+ private generateTasksSummary;
17
+ }
18
+ //# sourceMappingURL=post-tasks-summary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"post-tasks-summary.d.ts","sourceRoot":"","sources":["../../../src/actions/epic/post-tasks-summary.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;AAO9B;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,UAAU;IACpD,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAA6B;IAE5D,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;IAoE1C;;OAEG;IACH,OAAO,CAAC,oBAAoB;CAyD7B"}