@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,250 @@
1
+ /**
2
+ * HumancyReviewAction - Human-in-the-loop review checkpoint action.
3
+ * Pauses workflow execution to request human review and waits for response.
4
+ */
5
+ import { v4 as uuid } from 'uuid';
6
+ import { BaseAction } from '../base-action.js';
7
+ import { parseActionType } from '../../types/action.js';
8
+ import { FilesystemWorkflowStore } from '../../store/filesystem-store.js';
9
+ /** Default timeout for human review: 24 hours */
10
+ const DEFAULT_REVIEW_TIMEOUT = 24 * 60 * 60 * 1000;
11
+ /** Default urgency level */
12
+ const DEFAULT_URGENCY = 'normal';
13
+ /**
14
+ * HumancyReviewAction implementation.
15
+ * Handles humancy.request_review workflow steps.
16
+ */
17
+ export class HumancyReviewAction extends BaseAction {
18
+ type = 'humancy.request_review';
19
+ store;
20
+ humanHandler;
21
+ /**
22
+ * Create a new HumancyReviewAction
23
+ * @param humanHandler Optional human handler for decision routing
24
+ * @param store Optional workflow store for state persistence
25
+ */
26
+ constructor(humanHandler, store) {
27
+ super();
28
+ this.humanHandler = humanHandler ?? null;
29
+ this.store = store ?? new FilesystemWorkflowStore();
30
+ }
31
+ /**
32
+ * Set the human handler for decision routing.
33
+ * This allows late binding when the handler is created after the action.
34
+ */
35
+ setHumanHandler(handler) {
36
+ this.humanHandler = handler;
37
+ }
38
+ /**
39
+ * Set the workflow store for state persistence.
40
+ */
41
+ setStore(store) {
42
+ this.store = store;
43
+ }
44
+ /**
45
+ * Check if this handler can process the given step
46
+ */
47
+ canHandle(step) {
48
+ return parseActionType(step) === 'humancy.request_review';
49
+ }
50
+ /**
51
+ * Validate step configuration
52
+ */
53
+ validate(step) {
54
+ const errors = [];
55
+ const warnings = [];
56
+ const inputs = step.with;
57
+ // At least artifact or context must be provided
58
+ if (!inputs?.artifact && !inputs?.context) {
59
+ errors.push({
60
+ field: 'with',
61
+ message: 'Either artifact or context must be provided',
62
+ code: 'MISSING_REQUIRED_INPUT',
63
+ });
64
+ }
65
+ // Validate urgency if provided
66
+ if (inputs?.urgency) {
67
+ const validUrgencies = ['low', 'normal', 'blocking_soon', 'blocking_now'];
68
+ if (!validUrgencies.includes(inputs.urgency)) {
69
+ errors.push({
70
+ field: 'with.urgency',
71
+ message: `Invalid urgency value. Must be one of: ${validUrgencies.join(', ')}`,
72
+ code: 'INVALID_URGENCY',
73
+ });
74
+ }
75
+ }
76
+ // Validate timeout if provided
77
+ if (inputs?.timeout !== undefined) {
78
+ if (typeof inputs.timeout !== 'number' || inputs.timeout <= 0) {
79
+ errors.push({
80
+ field: 'with.timeout',
81
+ message: 'Timeout must be a positive number',
82
+ code: 'INVALID_TIMEOUT',
83
+ });
84
+ }
85
+ }
86
+ // Warn if no human handler is configured
87
+ if (!this.humanHandler) {
88
+ warnings.push({
89
+ field: 'handler',
90
+ message: 'No human handler configured - review will simulate approval',
91
+ suggestion: 'Configure HumanHandler for real human review integration',
92
+ });
93
+ }
94
+ return {
95
+ valid: errors.length === 0,
96
+ errors,
97
+ warnings,
98
+ };
99
+ }
100
+ /**
101
+ * Execute the humancy review action
102
+ */
103
+ async executeInternal(step, context) {
104
+ // Get input configuration
105
+ const artifact = this.getInput(step, context, 'artifact') ?? '';
106
+ const reviewContext = this.getInput(step, context, 'context') ?? '';
107
+ const urgency = this.getInput(step, context, 'urgency') ?? DEFAULT_URGENCY;
108
+ const timeout = this.getInput(step, context, 'timeout') ?? DEFAULT_REVIEW_TIMEOUT;
109
+ // Generate review ID
110
+ const reviewId = `rev_${uuid()}`;
111
+ // Get workflow ID from context (use name as ID since ExecutableWorkflow doesn't have id)
112
+ const workflowId = `wf_${context.workflow.name.replace(/[^a-zA-Z0-9]/g, '_')}_${uuid().slice(0, 8)}`;
113
+ const stepId = step.name;
114
+ context.logger.info(`Requesting human review [${reviewId}] for step: ${step.name}`);
115
+ context.logger.debug(`Artifact: ${artifact.substring(0, 100)}...`);
116
+ context.logger.debug(`Context: ${reviewContext.substring(0, 100)}...`);
117
+ context.logger.debug(`Urgency: ${urgency}, Timeout: ${timeout}ms`);
118
+ try {
119
+ // Save workflow state for potential resume
120
+ await this.saveCheckpoint(workflowId, context, step, reviewId, artifact);
121
+ let response;
122
+ if (this.humanHandler) {
123
+ // Real human handler integration
124
+ const request = {
125
+ type: 'review',
126
+ title: `Review: ${step.name}`,
127
+ description: reviewContext || `Please review the following artifact:\n\n${artifact}`,
128
+ options: [
129
+ { id: 'approve', label: 'Approve' },
130
+ { id: 'reject', label: 'Reject', requiresComment: true },
131
+ ],
132
+ workflowId,
133
+ stepId,
134
+ urgency,
135
+ artifact,
136
+ };
137
+ response = await this.humanHandler.requestDecision(request, timeout);
138
+ }
139
+ else {
140
+ // Simulation mode - auto-approve after a brief delay
141
+ context.logger.warn('No human handler configured - simulating approval');
142
+ await new Promise((resolve) => setTimeout(resolve, 100));
143
+ response = {
144
+ approved: true,
145
+ respondedBy: 'simulated',
146
+ respondedAt: new Date().toISOString(),
147
+ };
148
+ }
149
+ // Check for cancellation
150
+ this.checkCancellation(context);
151
+ // Build output
152
+ const output = {
153
+ approved: response.approved ?? (response.decision === 'approve'),
154
+ comments: response.input,
155
+ respondedBy: response.respondedBy,
156
+ respondedAt: response.respondedAt,
157
+ reviewId,
158
+ };
159
+ context.logger.info(`Human review [${reviewId}] completed: ${output.approved ? 'APPROVED' : 'REJECTED'}`);
160
+ // Clear checkpoint on success
161
+ await this.clearCheckpoint(workflowId);
162
+ return this.successResult(output, {
163
+ stdout: JSON.stringify(output, null, 2),
164
+ });
165
+ }
166
+ catch (error) {
167
+ // Handle timeout error
168
+ if (error instanceof Error && error.name === 'CorrelationTimeoutError') {
169
+ context.logger.error(`Human review [${reviewId}] timed out after ${timeout}ms`);
170
+ return this.failureResult('Human review timed out', {
171
+ output: {
172
+ reviewId,
173
+ error: 'timeout',
174
+ timeoutMs: timeout,
175
+ },
176
+ });
177
+ }
178
+ // Handle cancellation
179
+ if (error instanceof Error && error.message === 'Action cancelled') {
180
+ context.logger.warn(`Human review [${reviewId}] was cancelled`);
181
+ return this.failureResult('Human review cancelled', {
182
+ output: {
183
+ reviewId,
184
+ error: 'cancelled',
185
+ },
186
+ });
187
+ }
188
+ // Handle other errors
189
+ const errorMessage = error instanceof Error ? error.message : String(error);
190
+ context.logger.error(`Human review [${reviewId}] failed: ${errorMessage}`);
191
+ return this.failureResult(`Human review failed: ${errorMessage}`, {
192
+ output: {
193
+ reviewId,
194
+ error: errorMessage,
195
+ },
196
+ });
197
+ }
198
+ }
199
+ /**
200
+ * Save workflow checkpoint before waiting for human response
201
+ */
202
+ async saveCheckpoint(workflowId, context, step, reviewId, artifact) {
203
+ // Convert step outputs map to record
204
+ const stepOutputs = {};
205
+ for (const [id, output] of context.stepOutputs) {
206
+ stepOutputs[id] = {
207
+ raw: output.raw,
208
+ parsed: output.parsed,
209
+ exitCode: output.exitCode,
210
+ completedAt: output.completedAt.toISOString(),
211
+ };
212
+ }
213
+ const state = {
214
+ version: '1.0',
215
+ workflowId,
216
+ workflowFile: 'unknown', // ExecutableWorkflow doesn't track source file
217
+ currentPhase: context.phase.name,
218
+ currentStep: step.name,
219
+ inputs: { ...context.inputs },
220
+ stepOutputs,
221
+ pendingReview: {
222
+ reviewId,
223
+ artifact,
224
+ requestedAt: new Date().toISOString(),
225
+ },
226
+ startedAt: new Date().toISOString(),
227
+ updatedAt: new Date().toISOString(),
228
+ };
229
+ try {
230
+ await this.store.save(state);
231
+ context.logger.debug(`Saved workflow checkpoint for review [${reviewId}]`);
232
+ }
233
+ catch (error) {
234
+ context.logger.warn(`Failed to save workflow checkpoint: ${error instanceof Error ? error.message : String(error)}`);
235
+ // Non-fatal - continue without checkpoint
236
+ }
237
+ }
238
+ /**
239
+ * Clear workflow checkpoint after successful completion
240
+ */
241
+ async clearCheckpoint(workflowId) {
242
+ try {
243
+ await this.store.delete(workflowId);
244
+ }
245
+ catch {
246
+ // Ignore errors when clearing checkpoint
247
+ }
248
+ }
249
+ }
250
+ //# sourceMappingURL=humancy-review.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"humancy-review.js","sourceRoot":"","sources":["../../../src/actions/builtin/humancy-review.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * PR create action handler.
3
+ * Handles GitHub pull request creation.
4
+ */
5
+ import { BaseAction } from '../base-action.js';
6
+ import type { ActionContext, ActionResult, ActionType, ValidationResult, StepDefinition } from '../../types/index.js';
7
+ /**
8
+ * Action handler for GitHub PR creation
9
+ */
10
+ export declare class PrCreateAction extends BaseAction {
11
+ readonly type: ActionType;
12
+ canHandle(step: StepDefinition): boolean;
13
+ validate(step: StepDefinition): ValidationResult;
14
+ protected executeInternal(step: StepDefinition, context: ActionContext): Promise<Omit<ActionResult, 'duration'>>;
15
+ }
16
+ //# sourceMappingURL=pr-create.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pr-create.d.ts","sourceRoot":"","sources":["../../../src/actions/builtin/pr-create.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EACZ,UAAU,EACV,gBAAgB,EAGhB,cAAc,EAGf,MAAM,sBAAsB,CAAC;AAI9B;;GAEG;AACH,qBAAa,cAAe,SAAQ,UAAU;IAC5C,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAe;IAExC,SAAS,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO;IAIxC,QAAQ,CAAC,IAAI,EAAE,cAAc,GAAG,gBAAgB;cAqBhC,eAAe,CAC7B,IAAI,EAAE,cAAc,EACpB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;CA4F3C"}
@@ -0,0 +1,110 @@
1
+ /**
2
+ * PR create action handler.
3
+ * Handles GitHub pull request creation.
4
+ */
5
+ import { BaseAction } from '../base-action.js';
6
+ import { parseActionType } from '../../types/action.js';
7
+ import { executeCommand } from '../cli-utils.js';
8
+ /**
9
+ * Action handler for GitHub PR creation
10
+ */
11
+ export class PrCreateAction extends BaseAction {
12
+ type = 'pr.create';
13
+ canHandle(step) {
14
+ return parseActionType(step) === 'pr.create';
15
+ }
16
+ validate(step) {
17
+ const errors = [];
18
+ const warnings = [];
19
+ const title = step.with?.['title'];
20
+ if (!title) {
21
+ errors.push({
22
+ field: 'title',
23
+ message: 'Title is required for pr.create action',
24
+ code: 'MISSING_TITLE',
25
+ });
26
+ }
27
+ return {
28
+ valid: errors.length === 0,
29
+ errors,
30
+ warnings,
31
+ };
32
+ }
33
+ async executeInternal(step, context) {
34
+ const input = {
35
+ title: this.getRequiredInput(step, context, 'title'),
36
+ body: this.getInput(step, context, 'body'),
37
+ base: this.getInput(step, context, 'base'),
38
+ draft: this.getInput(step, context, 'draft', false),
39
+ labels: this.getInput(step, context, 'labels'),
40
+ reviewers: this.getInput(step, context, 'reviewers'),
41
+ };
42
+ context.logger.info(`Creating PR: ${input.title}`);
43
+ try {
44
+ // Build gh pr create command arguments
45
+ const args = ['pr', 'create', '--title', input.title];
46
+ if (input.body) {
47
+ args.push('--body', input.body);
48
+ }
49
+ else {
50
+ args.push('--body', '');
51
+ }
52
+ if (input.base) {
53
+ args.push('--base', input.base);
54
+ }
55
+ if (input.draft) {
56
+ args.push('--draft');
57
+ }
58
+ if (input.labels && input.labels.length > 0) {
59
+ for (const label of input.labels) {
60
+ args.push('--label', label);
61
+ }
62
+ }
63
+ if (input.reviewers && input.reviewers.length > 0) {
64
+ for (const reviewer of input.reviewers) {
65
+ args.push('--reviewer', reviewer);
66
+ }
67
+ }
68
+ // Execute gh pr create
69
+ const result = await executeCommand('gh', args, {
70
+ cwd: context.workdir,
71
+ env: this.mergeEnv(context, step.env),
72
+ timeout: step.timeout ?? 60000, // 1 minute default
73
+ signal: context.signal,
74
+ });
75
+ // Check exit code
76
+ if (result.exitCode !== 0) {
77
+ return this.failureResult(`Failed to create PR: ${result.stderr || result.stdout}`, {
78
+ exitCode: result.exitCode,
79
+ stdout: result.stdout,
80
+ stderr: result.stderr,
81
+ });
82
+ }
83
+ // Parse PR URL from output (gh pr create outputs the URL to stdout)
84
+ const urlMatch = result.stdout.match(/https:\/\/github\.com\/[^\s]+\/pull\/(\d+)/);
85
+ if (!urlMatch) {
86
+ return this.failureResult('Failed to parse PR creation output', {
87
+ stdout: result.stdout,
88
+ stderr: result.stderr,
89
+ });
90
+ }
91
+ const prOutput = {
92
+ number: parseInt(urlMatch[1], 10),
93
+ url: urlMatch[0],
94
+ state: input.draft ? 'draft' : 'open',
95
+ headBranch: '',
96
+ baseBranch: input.base ?? 'main',
97
+ };
98
+ context.logger.info(`PR created: ${prOutput.url}`);
99
+ return this.successResult(prOutput, {
100
+ exitCode: result.exitCode,
101
+ stdout: result.stdout,
102
+ stderr: result.stderr,
103
+ });
104
+ }
105
+ catch (error) {
106
+ return this.failureResult(error instanceof Error ? error.message : String(error));
107
+ }
108
+ }
109
+ }
110
+ //# sourceMappingURL=pr-create.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pr-create.js","sourceRoot":"","sources":["../../../src/actions/builtin/pr-create.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Shell action handler.
3
+ * Handles generic shell command execution as a fallback.
4
+ */
5
+ import { BaseAction } from '../base-action.js';
6
+ import type { ActionContext, ActionResult, ActionType, ValidationResult, StepDefinition } from '../../types/index.js';
7
+ /**
8
+ * Action handler for shell commands (fallback handler)
9
+ */
10
+ export declare class ShellAction extends BaseAction {
11
+ readonly type: ActionType;
12
+ canHandle(step: StepDefinition): boolean;
13
+ validate(step: StepDefinition): ValidationResult;
14
+ protected executeInternal(step: StepDefinition, context: ActionContext): Promise<Omit<ActionResult, 'duration'>>;
15
+ }
16
+ //# sourceMappingURL=shell.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell.d.ts","sourceRoot":"","sources":["../../../src/actions/builtin/shell.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EACZ,UAAU,EACV,gBAAgB,EAGhB,cAAc,EACf,MAAM,sBAAsB,CAAC;AAI9B;;GAEG;AACH,qBAAa,WAAY,SAAQ,UAAU;IACzC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAW;IAEpC,SAAS,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO;IAIxC,QAAQ,CAAC,IAAI,EAAE,cAAc,GAAG,gBAAgB;cAsBhC,eAAe,CAC7B,IAAI,EAAE,cAAc,EACpB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;CAwD3C"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Shell action handler.
3
+ * Handles generic shell command execution as a fallback.
4
+ */
5
+ import { BaseAction } from '../base-action.js';
6
+ import { parseActionType } from '../../types/action.js';
7
+ import { executeShellCommand, extractJSON } from '../cli-utils.js';
8
+ /**
9
+ * Action handler for shell commands (fallback handler)
10
+ */
11
+ export class ShellAction extends BaseAction {
12
+ type = 'shell';
13
+ canHandle(step) {
14
+ return parseActionType(step) === 'shell';
15
+ }
16
+ validate(step) {
17
+ const errors = [];
18
+ const warnings = [];
19
+ // Get command from step
20
+ const command = step.command ?? step.script;
21
+ if (!command) {
22
+ errors.push({
23
+ field: 'command',
24
+ message: 'Command or script is required for shell action',
25
+ code: 'MISSING_COMMAND',
26
+ });
27
+ }
28
+ return {
29
+ valid: errors.length === 0,
30
+ errors,
31
+ warnings,
32
+ };
33
+ }
34
+ async executeInternal(step, context) {
35
+ // Get command from step
36
+ const command = step.command ?? step.script;
37
+ if (!command) {
38
+ return this.failureResult('Command or script is required');
39
+ }
40
+ context.logger.info(`Executing shell command: ${command.substring(0, 50)}...`);
41
+ try {
42
+ // Execute the shell command
43
+ const result = await executeShellCommand(command, {
44
+ cwd: context.workdir,
45
+ env: this.mergeEnv(context, step.env),
46
+ timeout: step.timeout ?? 300000, // 5 minute default
47
+ signal: context.signal,
48
+ });
49
+ // Try to parse JSON from output
50
+ const parsedOutput = extractJSON(result.stdout);
51
+ // Check exit code
52
+ if (result.exitCode !== 0) {
53
+ if (!step.continueOnError) {
54
+ return this.failureResult(`Command failed with exit code ${result.exitCode}`, {
55
+ output: parsedOutput ?? result.stdout,
56
+ exitCode: result.exitCode,
57
+ stdout: result.stdout,
58
+ stderr: result.stderr,
59
+ });
60
+ }
61
+ // Log the failure even when continueOnError suppresses it
62
+ const stderrSnippet = result.stderr?.trim().split('\n').slice(-3).join('\n');
63
+ context.logger.warn(`Shell command failed with exit code ${result.exitCode} (continueOnError=true)` +
64
+ (stderrSnippet ? `\n${stderrSnippet}` : ''));
65
+ }
66
+ else {
67
+ context.logger.info('Shell command completed');
68
+ }
69
+ return this.successResult(parsedOutput ?? result.stdout, {
70
+ exitCode: result.exitCode,
71
+ stdout: result.stdout,
72
+ stderr: result.stderr,
73
+ });
74
+ }
75
+ catch (error) {
76
+ return this.failureResult(error instanceof Error ? error.message : String(error));
77
+ }
78
+ }
79
+ }
80
+ //# sourceMappingURL=shell.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell.js","sourceRoot":"","sources":["../../../src/actions/builtin/shell.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * SpecKit action handler.
3
+ * Implements speckit workflow operations for spec-driven development methodology.
4
+ *
5
+ * Operations are divided into two categories:
6
+ * - Deterministic: Direct library calls (create_feature, get_paths, check_prereqs, copy_template)
7
+ * - AI-dependent: Agent delegation (specify, clarify, plan, tasks, implement)
8
+ */
9
+ import { BaseAction } from '../../base-action.js';
10
+ import type { ActionContext, ActionResult, ActionType, ValidationResult, StepDefinition } from '../../../types/index.js';
11
+ /**
12
+ * Action handler for speckit workflow operations.
13
+ * Dispatches to specific operation handlers based on the operation extracted from step.uses/step.action.
14
+ */
15
+ export declare class SpecKitAction extends BaseAction {
16
+ readonly type: ActionType;
17
+ /**
18
+ * Check if this handler can process the given step
19
+ */
20
+ canHandle(step: StepDefinition): boolean;
21
+ /**
22
+ * Extract operation name from step definition
23
+ * @param step Workflow step definition
24
+ * @returns Operation name (e.g., 'create_feature', 'specify')
25
+ */
26
+ protected extractOperation(step: StepDefinition): string;
27
+ /**
28
+ * Validate step configuration before execution
29
+ */
30
+ validate(step: StepDefinition): ValidationResult;
31
+ /**
32
+ * Execute the speckit operation
33
+ */
34
+ protected executeInternal(step: StepDefinition, context: ActionContext): Promise<Omit<ActionResult, 'duration'>>;
35
+ private handleCreateFeature;
36
+ private handleGetPaths;
37
+ private handleCheckPrereqs;
38
+ private handleCopyTemplate;
39
+ private handleSpecify;
40
+ private handleClarify;
41
+ private handlePlan;
42
+ private handleTasks;
43
+ private handleImplement;
44
+ private handleTasksToIssues;
45
+ }
46
+ export * from './types.js';
47
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/actions/builtin/speckit/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EACZ,UAAU,EACV,gBAAgB,EAEhB,cAAc,EACf,MAAM,yBAAyB,CAAC;AAmDjC;;;GAGG;AACH,qBAAa,aAAc,SAAQ,UAAU;IAC3C,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAa;IAEtC;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO;IAKxC;;;;OAIG;IACH,SAAS,CAAC,gBAAgB,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM;IAOxD;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,cAAc,GAAG,gBAAgB;IA6GhD;;OAEG;cACa,eAAe,CAC7B,IAAI,EAAE,cAAc,EACpB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;YA2C5B,mBAAmB;YAsBnB,cAAc;YAiBd,kBAAkB;YAqBlB,kBAAkB;YAuBlB,aAAa;YAoBb,aAAa;YAoBb,UAAU;YAmBV,WAAW;YAmBX,eAAe;YAsBf,mBAAmB;CAsBlC;AAGD,cAAc,YAAY,CAAC"}