@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,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":"AAAA;;;GAGG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAU/C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnE;;GAEG;AACH,MAAM,OAAO,WAAY,SAAQ,UAAU;IAChC,IAAI,GAAe,OAAO,CAAC;IAEpC,SAAS,CAAC,IAAoB;QAC5B,OAAO,eAAe,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC;IAC3C,CAAC;IAED,QAAQ,CAAC,IAAoB;QAC3B,MAAM,MAAM,GAAsB,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAwB,EAAE,CAAC;QAEzC,wBAAwB;QACxB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC;QAE5C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,CAAC;gBACV,KAAK,EAAE,SAAS;gBAChB,OAAO,EAAE,gDAAgD;gBACzD,IAAI,EAAE,iBAAiB;aACxB,CAAC,CAAC;QACL,CAAC;QAED,OAAO;YACL,KAAK,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;YAC1B,MAAM;YACN,QAAQ;SACT,CAAC;IACJ,CAAC;IAES,KAAK,CAAC,eAAe,CAC7B,IAAoB,EACpB,OAAsB;QAEtB,wBAAwB;QACxB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC;QAE5C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,IAAI,CAAC,aAAa,CAAC,+BAA+B,CAAC,CAAC;QAC7D,CAAC;QAED,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,4BAA4B,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;QAE/E,IAAI,CAAC;YACH,4BAA4B;YAC5B,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,OAAO,EAAE;gBAChD,GAAG,EAAE,OAAO,CAAC,OAAO;gBACpB,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC;gBACrC,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,MAAM,EAAE,mBAAmB;gBACpD,MAAM,EAAE,OAAO,CAAC,MAAM;aACvB,CAAC,CAAC;YAEH,gCAAgC;YAChC,MAAM,YAAY,GAAG,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAEhD,kBAAkB;YAClB,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;gBAC1B,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;oBAC1B,OAAO,IAAI,CAAC,aAAa,CACvB,iCAAiC,MAAM,CAAC,QAAQ,EAAE,EAClD;wBACE,MAAM,EAAE,YAAY,IAAI,MAAM,CAAC,MAAM;wBACrC,QAAQ,EAAE,MAAM,CAAC,QAAQ;wBACzB,MAAM,EAAE,MAAM,CAAC,MAAM;wBACrB,MAAM,EAAE,MAAM,CAAC,MAAM;qBACtB,CACF,CAAC;gBACJ,CAAC;gBACD,0DAA0D;gBAC1D,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC7E,OAAO,CAAC,MAAM,CAAC,IAAI,CACjB,uCAAuC,MAAM,CAAC,QAAQ,yBAAyB;oBAC/E,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAC5C,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;YACjD,CAAC;YAED,OAAO,IAAI,CAAC,aAAa,CAAC,YAAY,IAAI,MAAM,CAAC,MAAM,EAAE;gBACvD,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,MAAM,EAAE,MAAM,CAAC,MAAM;aACtB,CAAC,CAAC;QACL,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,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"}
|