@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,292 @@
1
+ /**
2
+ * github.preflight action - validates environment before workflow execution.
3
+ * Parses issue URL, detects branch state, analyzes labels, and checks prerequisites.
4
+ */
5
+ import { BaseAction } from '../base-action.js';
6
+ import { isNamespacedAction } from '../../types/action.js';
7
+ import { createGitHubClient } from './client/index.js';
8
+ import { existsSync } from 'node:fs';
9
+ import { join } from 'node:path';
10
+ /**
11
+ * Parse a GitHub issue URL into owner, repo, and number
12
+ */
13
+ export function parseGitHubIssueUrl(url) {
14
+ const match = url.match(/https?:\/\/github\.com\/([^/]+)\/([^/]+)\/issues\/(\d+)/);
15
+ if (!match) {
16
+ throw new Error(`Invalid GitHub issue URL: ${url}`);
17
+ }
18
+ return {
19
+ owner: match[1],
20
+ repo: match[2],
21
+ number: parseInt(match[3], 10),
22
+ };
23
+ }
24
+ /**
25
+ * Analyze labels to determine workflow status
26
+ */
27
+ function analyzeLabelStatus(labels) {
28
+ const waitingFor = [];
29
+ const completed = [];
30
+ const configuredGates = [];
31
+ for (const label of labels) {
32
+ if (label.startsWith('waiting-for:')) {
33
+ waitingFor.push(label.replace('waiting-for:', ''));
34
+ }
35
+ else if (label.startsWith('completed:')) {
36
+ completed.push(label.replace('completed:', ''));
37
+ }
38
+ else if (label.startsWith('needs:')) {
39
+ const gate = label.replace('needs:', '');
40
+ if (!configuredGates.includes(gate)) {
41
+ configuredGates.push(gate);
42
+ }
43
+ }
44
+ }
45
+ // Check if blocked by any gate
46
+ let blockedByGate = false;
47
+ let blockingGate;
48
+ for (const gate of configuredGates) {
49
+ if (waitingFor.includes(gate) && !completed.includes(gate)) {
50
+ blockedByGate = true;
51
+ blockingGate = gate;
52
+ break;
53
+ }
54
+ }
55
+ return {
56
+ currentLabels: labels,
57
+ configuredGates,
58
+ waitingFor,
59
+ completed,
60
+ blockedByGate,
61
+ blockingGate,
62
+ };
63
+ }
64
+ /**
65
+ * Detect issue type from labels
66
+ */
67
+ function detectIssueType(labels) {
68
+ for (const label of labels) {
69
+ if (label === 'type:epic' || label === 'epic')
70
+ return 'epic';
71
+ if (label === 'type:bug' || label === 'bug')
72
+ return 'bug';
73
+ if (label === 'type:feature' || label === 'feature' || label === 'enhancement')
74
+ return 'feature';
75
+ }
76
+ return 'unknown';
77
+ }
78
+ /**
79
+ * Determine the current phase from labels
80
+ */
81
+ function getCurrentPhase(labels) {
82
+ for (const label of labels) {
83
+ if (label.startsWith('phase:')) {
84
+ return label.replace('phase:', '');
85
+ }
86
+ }
87
+ return undefined;
88
+ }
89
+ /**
90
+ * Determine the next command based on completed phases and artifacts
91
+ */
92
+ function determineNextCommand(labelStatus, speckitStatus, currentPhase) {
93
+ // Check if blocked by gate
94
+ if (labelStatus.blockedByGate) {
95
+ return undefined; // Blocked, no next command
96
+ }
97
+ // Determine based on what exists
98
+ if (!speckitStatus.spec_exists) {
99
+ return '/speckit:specify';
100
+ }
101
+ // Check if clarify is needed (based on labels)
102
+ if (!labelStatus.completed.includes('clarification') &&
103
+ !labelStatus.completed.includes('clarify')) {
104
+ // Check if clarifications exist
105
+ return '/speckit:clarify';
106
+ }
107
+ if (!speckitStatus.plan_exists) {
108
+ return '/speckit:plan';
109
+ }
110
+ if (!speckitStatus.tasks_exists) {
111
+ return '/speckit:tasks';
112
+ }
113
+ // If all artifacts exist, implement
114
+ if (currentPhase === 'implement' || currentPhase === 'tasks') {
115
+ return '/speckit:implement';
116
+ }
117
+ return undefined;
118
+ }
119
+ /**
120
+ * github.preflight action handler
121
+ */
122
+ export class PreflightAction extends BaseAction {
123
+ type = 'github.preflight';
124
+ client;
125
+ canHandle(step) {
126
+ const uses = step.uses ?? step.action;
127
+ if (!uses)
128
+ return false;
129
+ return uses === 'github.preflight' ||
130
+ (isNamespacedAction(uses) && uses === this.type);
131
+ }
132
+ async executeInternal(step, context) {
133
+ // Get input
134
+ const issueUrl = this.getRequiredInput(step, context, 'issue_url');
135
+ const expectedBranchOverride = this.getInput(step, context, 'expected_branch');
136
+ context.logger.info(`Preflight check for: ${issueUrl}`);
137
+ try {
138
+ // Parse issue URL
139
+ const { owner, repo, number } = parseGitHubIssueUrl(issueUrl);
140
+ // Get GitHub client
141
+ this.client = createGitHubClient(context.workdir);
142
+ // Fetch issue details
143
+ const issue = await this.client.getIssue(owner, repo, number);
144
+ const labelNames = issue.labels.map(l => l.name);
145
+ // Detect issue type
146
+ const issueType = detectIssueType(labelNames);
147
+ // Get current branch and expected branch
148
+ const currentBranch = await this.client.getCurrentBranch();
149
+ const expectedBranch = expectedBranchOverride ?? this.generateExpectedBranch(number, issue.title);
150
+ // Check if branch exists
151
+ const branchExists = await this.client.branchExists(expectedBranch) ||
152
+ await this.client.branchExists(expectedBranch, true);
153
+ // Check if on correct branch
154
+ const onCorrectBranch = currentBranch === expectedBranch ||
155
+ currentBranch.startsWith(`${number}-`);
156
+ // Check for existing PR
157
+ const existingPR = await this.client.findPRForBranch(owner, repo, currentBranch);
158
+ const prExists = existingPR !== null;
159
+ const prNumber = existingPR?.number;
160
+ // Get unresolved comments count
161
+ let unresolvedComments = 0;
162
+ if (prNumber) {
163
+ try {
164
+ const comments = await this.client.getPRComments(owner, repo, prNumber);
165
+ unresolvedComments = comments.filter(c => c.resolved === false).length;
166
+ }
167
+ catch {
168
+ // Ignore errors fetching comments
169
+ }
170
+ }
171
+ // Check for uncommitted changes
172
+ const status = await this.client.getStatus();
173
+ const uncommittedChanges = status.has_changes;
174
+ // Check speckit artifact status
175
+ const speckitStatus = await this.checkSpeckitStatus(number, context.workdir);
176
+ // Analyze labels
177
+ const labelStatus = analyzeLabelStatus(labelNames);
178
+ // Check epic context
179
+ const epicContext = this.detectEpicContext(issue.body, labelNames);
180
+ // Find existing branches for this issue
181
+ const existingBranches = await this.findExistingBranches(number);
182
+ // Get current phase
183
+ const currentPhase = getCurrentPhase(labelNames);
184
+ // Determine next command
185
+ const nextCommand = determineNextCommand(labelStatus, speckitStatus, currentPhase);
186
+ // Build output
187
+ const output = {
188
+ issue_number: number,
189
+ issue_title: issue.title,
190
+ issue_body: issue.body,
191
+ issue_type: issueType,
192
+ issue_labels: labelNames,
193
+ current_branch: currentBranch,
194
+ expected_branch: expectedBranch,
195
+ branch_exists: branchExists,
196
+ on_correct_branch: onCorrectBranch,
197
+ pr_exists: prExists,
198
+ pr_number: prNumber,
199
+ uncommitted_changes: uncommittedChanges,
200
+ unresolved_comments: unresolvedComments,
201
+ speckit_status: speckitStatus,
202
+ label_status: labelStatus,
203
+ existing_branches: existingBranches,
204
+ epic_context: epicContext,
205
+ next_command: nextCommand,
206
+ artifact_warnings: [],
207
+ };
208
+ return this.successResult(output);
209
+ }
210
+ catch (error) {
211
+ return this.failureResult(error instanceof Error ? error.message : String(error));
212
+ }
213
+ }
214
+ /**
215
+ * Generate expected branch name from issue number and title
216
+ */
217
+ generateExpectedBranch(number, title) {
218
+ // Slugify the title
219
+ const slug = title
220
+ .toLowerCase()
221
+ .replace(/[^a-z0-9]+/g, '-')
222
+ .replace(/^-|-$/g, '')
223
+ .substring(0, 40);
224
+ return `${number}-${slug}`;
225
+ }
226
+ /**
227
+ * Check speckit artifact status
228
+ */
229
+ async checkSpeckitStatus(issueNumber, workdir) {
230
+ // Look for specs directory
231
+ const specsDir = join(workdir, 'specs');
232
+ if (!existsSync(specsDir)) {
233
+ return { spec_exists: false, plan_exists: false, tasks_exists: false };
234
+ }
235
+ // Find the feature directory
236
+ const { readdirSync } = await import('node:fs');
237
+ const dirs = readdirSync(specsDir);
238
+ const featureDir = dirs.find(d => d.startsWith(`${issueNumber}-`));
239
+ if (!featureDir) {
240
+ return { spec_exists: false, plan_exists: false, tasks_exists: false };
241
+ }
242
+ const featurePath = join(specsDir, featureDir);
243
+ return {
244
+ spec_exists: existsSync(join(featurePath, 'spec.md')),
245
+ plan_exists: existsSync(join(featurePath, 'plan.md')),
246
+ tasks_exists: existsSync(join(featurePath, 'tasks.md')),
247
+ };
248
+ }
249
+ /**
250
+ * Detect epic context from issue body and labels
251
+ */
252
+ detectEpicContext(body, labels) {
253
+ const isEpic = labels.includes('type:epic') || labels.includes('epic');
254
+ // Check for epic parent marker
255
+ const parentMatch = body.match(/<!--\s*epic-parent:\s*(\d+)\s*-->/);
256
+ const isEpicChild = parentMatch !== null;
257
+ const parentEpicNumber = parentMatch ? parseInt(parentMatch[1], 10) : undefined;
258
+ // Extract parent epic branch if present
259
+ const branchMatch = body.match(/<!--\s*epic-branch:\s*([^\s]+)\s*-->/);
260
+ const parentEpicBranch = branchMatch ? branchMatch[1] : undefined;
261
+ return {
262
+ is_epic: isEpic,
263
+ is_epic_child: isEpicChild,
264
+ parent_epic_number: parentEpicNumber,
265
+ parent_epic_branch: parentEpicBranch,
266
+ };
267
+ }
268
+ /**
269
+ * Find existing branches for an issue number
270
+ */
271
+ async findExistingBranches(issueNumber) {
272
+ // This is a simplified implementation
273
+ // In practice, you'd use git branch -a and filter
274
+ const currentBranch = await this.client.getCurrentBranch();
275
+ const branches = [];
276
+ if (currentBranch.startsWith(`${issueNumber}-`)) {
277
+ branches.push({
278
+ name: currentBranch,
279
+ issueNumber: String(issueNumber),
280
+ shortName: currentBranch.replace(`${issueNumber}-`, ''),
281
+ isRemote: false,
282
+ });
283
+ }
284
+ return {
285
+ found: branches.length > 0,
286
+ branches,
287
+ recommended: branches[0],
288
+ has_multiple: branches.length > 1,
289
+ };
290
+ }
291
+ }
292
+ //# sourceMappingURL=preflight.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preflight.js","sourceRoot":"","sources":["../../../src/actions/github/preflight.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * github.read_pr_feedback action - gets unresolved PR comments.
3
+ */
4
+ import { BaseAction } from '../base-action.js';
5
+ import type { ActionContext, ActionResult, ActionIdentifier, StepDefinition } from '../../types/index.js';
6
+ /**
7
+ * github.read_pr_feedback action handler
8
+ */
9
+ export declare class ReadPRFeedbackAction 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=read-pr-feedback.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-pr-feedback.d.ts","sourceRoot":"","sources":["../../../src/actions/github/read-pr-feedback.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,oBAAqB,SAAQ,UAAU;IAClD,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;CA0C3C"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * github.read_pr_feedback action - gets unresolved PR comments.
3
+ */
4
+ import { BaseAction } from '../base-action.js';
5
+ import { isNamespacedAction } from '../../types/action.js';
6
+ import { createGitHubClient } from './client/index.js';
7
+ /**
8
+ * github.read_pr_feedback action handler
9
+ */
10
+ export class ReadPRFeedbackAction extends BaseAction {
11
+ type = 'github.read_pr_feedback';
12
+ canHandle(step) {
13
+ const uses = step.uses ?? step.action;
14
+ if (!uses)
15
+ return false;
16
+ return uses === 'github.read_pr_feedback' ||
17
+ (isNamespacedAction(uses) && uses === this.type);
18
+ }
19
+ async executeInternal(step, context) {
20
+ // Get inputs
21
+ const prNumber = this.getRequiredInput(step, context, 'pr_number');
22
+ const includeResolved = this.getInput(step, context, 'include_resolved', false);
23
+ context.logger.info(`Reading feedback for PR #${prNumber}`);
24
+ try {
25
+ // Get GitHub client
26
+ const client = createGitHubClient(context.workdir);
27
+ // Get repo info
28
+ const repoInfo = await client.getRepoInfo();
29
+ // Get PR comments
30
+ const allComments = await client.getPRComments(repoInfo.owner, repoInfo.repo, prNumber);
31
+ // Filter based on resolved status
32
+ let comments;
33
+ if (includeResolved) {
34
+ comments = allComments;
35
+ }
36
+ else {
37
+ comments = allComments.filter(c => c.resolved !== true);
38
+ }
39
+ const unresolvedCount = comments.filter(c => c.resolved === false).length;
40
+ const output = {
41
+ comments,
42
+ has_unresolved: unresolvedCount > 0,
43
+ unresolved_count: unresolvedCount,
44
+ };
45
+ context.logger.info(`Found ${comments.length} comments (${unresolvedCount} unresolved)`);
46
+ return this.successResult(output);
47
+ }
48
+ catch (error) {
49
+ return this.failureResult(error instanceof Error ? error.message : String(error));
50
+ }
51
+ }
52
+ }
53
+ //# sourceMappingURL=read-pr-feedback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-pr-feedback.js","sourceRoot":"","sources":["../../../src/actions/github/read-pr-feedback.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAU/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD;;GAEG;AACH,MAAM,OAAO,oBAAqB,SAAQ,UAAU;IACzC,IAAI,GAAqB,yBAAyB,CAAC;IAE5D,SAAS,CAAC,IAAoB;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC;QACtC,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QACxB,OAAO,IAAI,KAAK,yBAAyB;YAClC,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1D,CAAC;IAES,KAAK,CAAC,eAAe,CAC7B,IAAoB,EACpB,OAAsB;QAEtB,aAAa;QACb,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAS,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;QAC3E,MAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAU,IAAI,EAAE,OAAO,EAAE,kBAAkB,EAAE,KAAK,CAAC,CAAC;QAEzF,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,4BAA4B,QAAQ,EAAE,CAAC,CAAC;QAE5D,IAAI,CAAC;YACH,oBAAoB;YACpB,MAAM,MAAM,GAAiB,kBAAkB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAEjE,gBAAgB;YAChB,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,WAAW,EAAE,CAAC;YAE5C,kBAAkB;YAClB,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YAExF,kCAAkC;YAClC,IAAI,QAAmB,CAAC;YACxB,IAAI,eAAe,EAAE,CAAC;gBACpB,QAAQ,GAAG,WAAW,CAAC;YACzB,CAAC;iBAAM,CAAC;gBACN,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC;YAC1D,CAAC;YAED,MAAM,eAAe,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC,MAAM,CAAC;YAE1E,MAAM,MAAM,GAAyB;gBACnC,QAAQ;gBACR,cAAc,EAAE,eAAe,GAAG,CAAC;gBACnC,gBAAgB,EAAE,eAAe;aAClC,CAAC;YAEF,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,QAAQ,CAAC,MAAM,cAAc,eAAe,cAAc,CAAC,CAAC;YAEzF,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QACpC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,IAAI,CAAC,aAAa,CACvB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CACvD,CAAC;QACJ,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * github.respond_pr_feedback action - posts responses to PR comments.
3
+ */
4
+ import { BaseAction } from '../base-action.js';
5
+ import type { ActionContext, ActionResult, ActionIdentifier, StepDefinition } from '../../types/index.js';
6
+ /**
7
+ * github.respond_pr_feedback action handler
8
+ */
9
+ export declare class RespondPRFeedbackAction 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=respond-pr-feedback.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"respond-pr-feedback.d.ts","sourceRoot":"","sources":["../../../src/actions/github/respond-pr-feedback.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,EAKf,MAAM,sBAAsB,CAAC;AAK9B;;GAEG;AACH,qBAAa,uBAAwB,SAAQ,UAAU;IACrD,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAgC;IAE/D,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;CAuD3C"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * github.respond_pr_feedback action - posts responses to PR comments.
3
+ */
4
+ import { BaseAction } from '../base-action.js';
5
+ import { isNamespacedAction } from '../../types/action.js';
6
+ import { createGitHubClient } from './client/index.js';
7
+ /**
8
+ * github.respond_pr_feedback action handler
9
+ */
10
+ export class RespondPRFeedbackAction extends BaseAction {
11
+ type = 'github.respond_pr_feedback';
12
+ canHandle(step) {
13
+ const uses = step.uses ?? step.action;
14
+ if (!uses)
15
+ return false;
16
+ return uses === 'github.respond_pr_feedback' ||
17
+ (isNamespacedAction(uses) && uses === this.type);
18
+ }
19
+ async executeInternal(step, context) {
20
+ // Get inputs
21
+ const prNumber = this.getRequiredInput(step, context, 'pr_number');
22
+ const responses = this.getRequiredInput(step, context, 'responses');
23
+ context.logger.info(`Responding to ${responses.length} comments on PR #${prNumber}`);
24
+ try {
25
+ // Get GitHub client
26
+ const client = createGitHubClient(context.workdir);
27
+ // Get repo info
28
+ const repoInfo = await client.getRepoInfo();
29
+ const posted = [];
30
+ const failed = [];
31
+ // Post each response
32
+ for (const response of responses) {
33
+ try {
34
+ const reply = await client.replyToPRComment(repoInfo.owner, repoInfo.repo, prNumber, response.comment_id, response.body);
35
+ posted.push({
36
+ comment_id: response.comment_id,
37
+ reply_id: reply.id,
38
+ success: true,
39
+ });
40
+ context.logger.info(`Posted reply to comment ${response.comment_id}`);
41
+ }
42
+ catch (error) {
43
+ failed.push(response.comment_id);
44
+ context.logger.warn(`Failed to reply to comment ${response.comment_id}: ${error instanceof Error ? error.message : String(error)}`);
45
+ }
46
+ }
47
+ const output = {
48
+ posted,
49
+ failed,
50
+ };
51
+ return this.successResult(output);
52
+ }
53
+ catch (error) {
54
+ return this.failureResult(error instanceof Error ? error.message : String(error));
55
+ }
56
+ }
57
+ }
58
+ //# sourceMappingURL=respond-pr-feedback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"respond-pr-feedback.js","sourceRoot":"","sources":["../../../src/actions/github/respond-pr-feedback.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAW/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD;;GAEG;AACH,MAAM,OAAO,uBAAwB,SAAQ,UAAU;IAC5C,IAAI,GAAqB,4BAA4B,CAAC;IAE/D,SAAS,CAAC,IAAoB;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC;QACtC,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QACxB,OAAO,IAAI,KAAK,4BAA4B;YACrC,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1D,CAAC;IAES,KAAK,CAAC,eAAe,CAC7B,IAAoB,EACpB,OAAsB;QAEtB,aAAa;QACb,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAS,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;QAC3E,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAqB,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;QAExF,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,SAAS,CAAC,MAAM,oBAAoB,QAAQ,EAAE,CAAC,CAAC;QAErF,IAAI,CAAC;YACH,oBAAoB;YACpB,MAAM,MAAM,GAAiB,kBAAkB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAEjE,gBAAgB;YAChB,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,WAAW,EAAE,CAAC;YAE5C,MAAM,MAAM,GAAqB,EAAE,CAAC;YACpC,MAAM,MAAM,GAAa,EAAE,CAAC;YAE5B,qBAAqB;YACrB,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;gBACjC,IAAI,CAAC;oBACH,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,gBAAgB,CACzC,QAAQ,CAAC,KAAK,EACd,QAAQ,CAAC,IAAI,EACb,QAAQ,EACR,QAAQ,CAAC,UAAU,EACnB,QAAQ,CAAC,IAAI,CACd,CAAC;oBAEF,MAAM,CAAC,IAAI,CAAC;wBACV,UAAU,EAAE,QAAQ,CAAC,UAAU;wBAC/B,QAAQ,EAAE,KAAK,CAAC,EAAE;wBAClB,OAAO,EAAE,IAAI;qBACd,CAAC,CAAC;oBAEH,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,2BAA2B,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;gBACxE,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;oBACjC,OAAO,CAAC,MAAM,CAAC,IAAI,CACjB,8BAA8B,QAAQ,CAAC,UAAU,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAC/G,CAAC;gBACJ,CAAC;YACH,CAAC;YAED,MAAM,MAAM,GAA4B;gBACtC,MAAM;gBACN,MAAM;aACP,CAAC;YAEF,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QACpC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,IAAI,CAAC,aAAa,CACvB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CACvD,CAAC;QACJ,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * github.review_changes action - reviews uncommitted changes.
3
+ * Lists modified, added, deleted, and untracked files.
4
+ */
5
+ import { BaseAction } from '../base-action.js';
6
+ import type { ActionContext, ActionResult, ActionIdentifier, StepDefinition } from '../../types/index.js';
7
+ /**
8
+ * github.review_changes action handler
9
+ */
10
+ export declare class ReviewChangesAction extends BaseAction {
11
+ readonly type: ActionIdentifier;
12
+ canHandle(step: StepDefinition): boolean;
13
+ protected executeInternal(step: StepDefinition, context: ActionContext): Promise<Omit<ActionResult, 'duration'>>;
14
+ /**
15
+ * Build a human-readable summary of changes
16
+ */
17
+ private buildSummary;
18
+ }
19
+ //# sourceMappingURL=review-changes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-changes.d.ts","sourceRoot":"","sources":["../../../src/actions/github/review-changes.ts"],"names":[],"mappings":"AAAA;;;GAGG;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,mBAAoB,SAAQ,UAAU;IACjD,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;IAmE1C;;OAEG;IACH,OAAO,CAAC,YAAY;CAsBrB"}
@@ -0,0 +1,95 @@
1
+ /**
2
+ * github.review_changes action - reviews uncommitted changes.
3
+ * Lists modified, added, deleted, and untracked files.
4
+ */
5
+ import { BaseAction } from '../base-action.js';
6
+ import { isNamespacedAction } from '../../types/action.js';
7
+ import { createGitHubClient } from './client/index.js';
8
+ /**
9
+ * github.review_changes action handler
10
+ */
11
+ export class ReviewChangesAction extends BaseAction {
12
+ type = 'github.review_changes';
13
+ canHandle(step) {
14
+ const uses = step.uses ?? step.action;
15
+ if (!uses)
16
+ return false;
17
+ return uses === 'github.review_changes' ||
18
+ (isNamespacedAction(uses) && uses === this.type);
19
+ }
20
+ async executeInternal(step, context) {
21
+ // Get inputs
22
+ const includeUntracked = this.getInput(step, context, 'include_untracked', true);
23
+ context.logger.info('Reviewing pending changes');
24
+ try {
25
+ // Get GitHub client for git operations
26
+ const client = createGitHubClient(context.workdir);
27
+ // Get git status
28
+ const status = await client.getStatus();
29
+ const files = [];
30
+ // Add staged files
31
+ for (const file of status.staged) {
32
+ files.push({
33
+ path: file,
34
+ status: 'modified', // Simplified - could be added/modified/deleted
35
+ staged: true,
36
+ });
37
+ }
38
+ // Add unstaged files
39
+ for (const file of status.unstaged) {
40
+ // Check if already added as staged
41
+ const existing = files.find(f => f.path === file);
42
+ if (existing) {
43
+ // File has both staged and unstaged changes
44
+ continue;
45
+ }
46
+ files.push({
47
+ path: file,
48
+ status: 'modified',
49
+ staged: false,
50
+ });
51
+ }
52
+ // Add untracked files if requested
53
+ if (includeUntracked) {
54
+ for (const file of status.untracked) {
55
+ files.push({
56
+ path: file,
57
+ status: 'untracked',
58
+ staged: false,
59
+ });
60
+ }
61
+ }
62
+ // Build summary
63
+ const summary = this.buildSummary(status, includeUntracked ?? true);
64
+ const output = {
65
+ has_changes: status.has_changes,
66
+ files,
67
+ summary,
68
+ };
69
+ return this.successResult(output);
70
+ }
71
+ catch (error) {
72
+ return this.failureResult(error instanceof Error ? error.message : String(error));
73
+ }
74
+ }
75
+ /**
76
+ * Build a human-readable summary of changes
77
+ */
78
+ buildSummary(status, includeUntracked) {
79
+ if (!status.has_changes) {
80
+ return 'No uncommitted changes';
81
+ }
82
+ const parts = [];
83
+ if (status.staged.length > 0) {
84
+ parts.push(`${status.staged.length} staged`);
85
+ }
86
+ if (status.unstaged.length > 0) {
87
+ parts.push(`${status.unstaged.length} modified`);
88
+ }
89
+ if (includeUntracked && status.untracked.length > 0) {
90
+ parts.push(`${status.untracked.length} untracked`);
91
+ }
92
+ return `Changes: ${parts.join(', ')}`;
93
+ }
94
+ }
95
+ //# sourceMappingURL=review-changes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-changes.js","sourceRoot":"","sources":["../../../src/actions/github/review-changes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * github.sync_labels action - creates/updates GitHub labels from configuration.
3
+ */
4
+ import { BaseAction } from '../base-action.js';
5
+ import type { ActionContext, ActionResult, ActionIdentifier, StepDefinition } from '../../types/index.js';
6
+ /**
7
+ * github.sync_labels action handler
8
+ */
9
+ export declare class SyncLabelsAction 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=sync-labels.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-labels.d.ts","sourceRoot":"","sources":["../../../src/actions/github/sync-labels.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,gBAAiB,SAAQ,UAAU;IAC9C,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAwB;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;CAoF3C"}