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