@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,234 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tasks operation handler.
|
|
3
|
+
* Uses agent.invoke to generate task list from specification and plan.
|
|
4
|
+
*/
|
|
5
|
+
import { join } from 'node:path';
|
|
6
|
+
import { executeCommand } from '../../../cli-utils.js';
|
|
7
|
+
import { exists, readFile } from '../lib/fs.js';
|
|
8
|
+
import { StreamBatcher } from '../lib/stream-batcher.js';
|
|
9
|
+
/**
|
|
10
|
+
* Build the prompt for task list generation
|
|
11
|
+
*/
|
|
12
|
+
function buildTasksPrompt(featureDir, specContent, planContent) {
|
|
13
|
+
return `Generate a detailed task list for implementing this feature.
|
|
14
|
+
|
|
15
|
+
Feature directory: ${featureDir}
|
|
16
|
+
Tasks file: ${join(featureDir, 'tasks.md')}
|
|
17
|
+
|
|
18
|
+
Specification:
|
|
19
|
+
${specContent}
|
|
20
|
+
|
|
21
|
+
Implementation Plan:
|
|
22
|
+
${planContent}
|
|
23
|
+
|
|
24
|
+
Instructions:
|
|
25
|
+
1. Analyze the specification and plan
|
|
26
|
+
2. Break down the implementation into discrete tasks
|
|
27
|
+
3. Organize tasks by implementation phase
|
|
28
|
+
4. Mark parallel tasks that can be done concurrently
|
|
29
|
+
5. Include setup, testing, and documentation tasks
|
|
30
|
+
|
|
31
|
+
Generate a task list with this format:
|
|
32
|
+
# Tasks: [Feature Name]
|
|
33
|
+
|
|
34
|
+
**Input**: Design documents from feature directory
|
|
35
|
+
**Prerequisites**: plan.md (required), spec.md (required)
|
|
36
|
+
**Status**: Ready
|
|
37
|
+
|
|
38
|
+
## Format: \`[ID] [P?] [Story] Description\`
|
|
39
|
+
- **[P]**: Can run in parallel (different files, no dependencies)
|
|
40
|
+
- **[Story]**: Which user story this task belongs to
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## Phase 1: [Phase Name]
|
|
45
|
+
|
|
46
|
+
### T001 [Task description]
|
|
47
|
+
**File**: \`path/to/file.ts\`
|
|
48
|
+
- Sub-task 1
|
|
49
|
+
- Sub-task 2
|
|
50
|
+
|
|
51
|
+
### T002 [P] [Task description]
|
|
52
|
+
**Files**:
|
|
53
|
+
- \`path/to/file1.ts\`
|
|
54
|
+
- \`path/to/file2.ts\`
|
|
55
|
+
- Sub-task 1
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## Phase N: Testing
|
|
60
|
+
|
|
61
|
+
### TXXX Write unit tests
|
|
62
|
+
**Files**:
|
|
63
|
+
- \`tests/*.test.ts\`
|
|
64
|
+
- Test coverage requirements
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## Dependencies & Execution Order
|
|
69
|
+
|
|
70
|
+
**Phase dependencies (sequential)**:
|
|
71
|
+
- Phase 1 must complete before Phase 2
|
|
72
|
+
- Testing depends on implementation
|
|
73
|
+
|
|
74
|
+
**Parallel opportunities within phases**:
|
|
75
|
+
- Tasks marked [P] can run in parallel
|
|
76
|
+
|
|
77
|
+
**Critical path**:
|
|
78
|
+
T001 → T002 → ... → Final task
|
|
79
|
+
|
|
80
|
+
Write the task list directly to the tasks.md file.`;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Count tasks in tasks content
|
|
84
|
+
*/
|
|
85
|
+
function countTasks(content) {
|
|
86
|
+
const taskMatches = content.match(/###\s*T\d+/g);
|
|
87
|
+
return taskMatches ? taskMatches.length : 0;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Extract phase names from tasks content
|
|
91
|
+
*/
|
|
92
|
+
function extractPhases(content) {
|
|
93
|
+
const phases = [];
|
|
94
|
+
const phaseMatches = content.matchAll(/##\s*Phase\s*\d+:?\s*([^\n]+)/gi);
|
|
95
|
+
for (const match of phaseMatches) {
|
|
96
|
+
if (match[1]) {
|
|
97
|
+
phases.push(match[1].trim());
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
return phases;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Estimate complexity based on task count and phases
|
|
104
|
+
*/
|
|
105
|
+
function estimateComplexity(taskCount, phaseCount) {
|
|
106
|
+
if (taskCount <= 5 && phaseCount <= 2) {
|
|
107
|
+
return 'simple';
|
|
108
|
+
}
|
|
109
|
+
else if (taskCount <= 15 && phaseCount <= 4) {
|
|
110
|
+
return 'moderate';
|
|
111
|
+
}
|
|
112
|
+
return 'complex';
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Execute the tasks operation using agent.invoke delegation
|
|
116
|
+
*/
|
|
117
|
+
export async function executeTasks(input, context) {
|
|
118
|
+
const specFile = join(input.feature_dir, 'spec.md');
|
|
119
|
+
const planFile = join(input.feature_dir, 'plan.md');
|
|
120
|
+
const tasksFile = join(input.feature_dir, 'tasks.md');
|
|
121
|
+
context.logger.info(`Generating task list for: ${input.feature_dir}`);
|
|
122
|
+
// Read the spec file
|
|
123
|
+
if (!(await exists(specFile))) {
|
|
124
|
+
context.logger.error('Spec file not found');
|
|
125
|
+
return {
|
|
126
|
+
success: false,
|
|
127
|
+
tasks_file: tasksFile,
|
|
128
|
+
task_count: 0,
|
|
129
|
+
phases: [],
|
|
130
|
+
estimated_complexity: 'simple',
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
// Read the plan file
|
|
134
|
+
if (!(await exists(planFile))) {
|
|
135
|
+
context.logger.error('Plan file not found');
|
|
136
|
+
return {
|
|
137
|
+
success: false,
|
|
138
|
+
tasks_file: tasksFile,
|
|
139
|
+
task_count: 0,
|
|
140
|
+
phases: [],
|
|
141
|
+
estimated_complexity: 'simple',
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
let specContent;
|
|
145
|
+
let planContent;
|
|
146
|
+
try {
|
|
147
|
+
specContent = await readFile(specFile);
|
|
148
|
+
planContent = await readFile(planFile);
|
|
149
|
+
}
|
|
150
|
+
catch (error) {
|
|
151
|
+
context.logger.error(`Failed to read files: ${error instanceof Error ? error.message : String(error)}`);
|
|
152
|
+
return {
|
|
153
|
+
success: false,
|
|
154
|
+
tasks_file: tasksFile,
|
|
155
|
+
task_count: 0,
|
|
156
|
+
phases: [],
|
|
157
|
+
estimated_complexity: 'simple',
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
// Build prompt
|
|
161
|
+
const prompt = buildTasksPrompt(input.feature_dir, specContent, planContent);
|
|
162
|
+
try {
|
|
163
|
+
// Invoke Claude agent (--dangerously-skip-permissions for automated workflows)
|
|
164
|
+
const args = ['-p', prompt, '--output-format', 'json', '--dangerously-skip-permissions'];
|
|
165
|
+
const timeout = (input.timeout ?? 300) * 1000;
|
|
166
|
+
// Set up streaming batchers for real-time log output
|
|
167
|
+
const stdoutBatcher = new StreamBatcher((content) => {
|
|
168
|
+
context.emitEvent?.({
|
|
169
|
+
type: 'log:append',
|
|
170
|
+
data: { stream: 'stdout', stepName: 'tasks', content },
|
|
171
|
+
});
|
|
172
|
+
});
|
|
173
|
+
const stderrBatcher = new StreamBatcher((content) => {
|
|
174
|
+
context.emitEvent?.({
|
|
175
|
+
type: 'log:append',
|
|
176
|
+
data: { stream: 'stderr', stepName: 'tasks', content },
|
|
177
|
+
});
|
|
178
|
+
});
|
|
179
|
+
const result = await executeCommand('claude', args, {
|
|
180
|
+
cwd: input.feature_dir,
|
|
181
|
+
timeout,
|
|
182
|
+
signal: context.signal,
|
|
183
|
+
onStdout: (chunk) => stdoutBatcher.append(chunk),
|
|
184
|
+
onStderr: (chunk) => stderrBatcher.append(chunk),
|
|
185
|
+
});
|
|
186
|
+
// Flush remaining batched content
|
|
187
|
+
stdoutBatcher.flush();
|
|
188
|
+
stderrBatcher.flush();
|
|
189
|
+
if (result.exitCode !== 0) {
|
|
190
|
+
return {
|
|
191
|
+
success: false,
|
|
192
|
+
tasks_file: tasksFile,
|
|
193
|
+
task_count: 0,
|
|
194
|
+
phases: [],
|
|
195
|
+
estimated_complexity: 'simple',
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
// Read the generated tasks to extract metrics
|
|
199
|
+
let taskCount = 0;
|
|
200
|
+
let phases = [];
|
|
201
|
+
let complexity = 'simple';
|
|
202
|
+
if (await exists(tasksFile)) {
|
|
203
|
+
try {
|
|
204
|
+
const tasksContent = await readFile(tasksFile);
|
|
205
|
+
taskCount = countTasks(tasksContent);
|
|
206
|
+
phases = extractPhases(tasksContent);
|
|
207
|
+
complexity = estimateComplexity(taskCount, phases.length);
|
|
208
|
+
}
|
|
209
|
+
catch {
|
|
210
|
+
// Ignore read errors
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
context.logger.info(`Task list generated: ${taskCount} tasks in ${phases.length} phases`);
|
|
214
|
+
context.logger.info(`Estimated complexity: ${complexity}`);
|
|
215
|
+
return {
|
|
216
|
+
success: true,
|
|
217
|
+
tasks_file: tasksFile,
|
|
218
|
+
task_count: taskCount,
|
|
219
|
+
phases,
|
|
220
|
+
estimated_complexity: complexity,
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
catch (error) {
|
|
224
|
+
context.logger.error(`Tasks operation failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
225
|
+
return {
|
|
226
|
+
success: false,
|
|
227
|
+
tasks_file: tasksFile,
|
|
228
|
+
task_count: 0,
|
|
229
|
+
phases: [],
|
|
230
|
+
estimated_complexity: 'simple',
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
//# sourceMappingURL=tasks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../../../../src/actions/builtin/speckit/operations/tasks.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Types for speckit workflow actions.
|
|
3
|
+
* Defines input/output interfaces for all speckit operations.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Speckit operation identifiers.
|
|
7
|
+
* Extracted from step.uses or step.action string (e.g., 'speckit.create_feature' → 'create_feature')
|
|
8
|
+
*/
|
|
9
|
+
export type SpecKitOperation = 'create_feature' | 'get_paths' | 'check_prereqs' | 'copy_template' | 'specify' | 'clarify' | 'plan' | 'tasks' | 'implement' | 'tasks_to_issues';
|
|
10
|
+
/**
|
|
11
|
+
* Available template names for copy_template operation
|
|
12
|
+
*/
|
|
13
|
+
export type TemplateName = 'spec' | 'plan' | 'tasks' | 'checklist' | 'agent-file';
|
|
14
|
+
/**
|
|
15
|
+
* Input for speckit.create_feature operation
|
|
16
|
+
*/
|
|
17
|
+
export interface CreateFeatureInput {
|
|
18
|
+
/** Feature description used to generate spec content */
|
|
19
|
+
description: string;
|
|
20
|
+
/** Optional 2-4 word short name for the branch */
|
|
21
|
+
short_name?: string;
|
|
22
|
+
/** Optional explicit branch number (1-999) */
|
|
23
|
+
number?: number;
|
|
24
|
+
/** Parent epic branch to branch from (for epic children) */
|
|
25
|
+
parent_epic_branch?: string;
|
|
26
|
+
/** Working directory */
|
|
27
|
+
cwd?: string;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Input for speckit.get_paths operation
|
|
31
|
+
*/
|
|
32
|
+
export interface GetPathsInput {
|
|
33
|
+
/** Optional branch/feature name. Auto-detected if not provided. */
|
|
34
|
+
branch?: string;
|
|
35
|
+
/** Working directory */
|
|
36
|
+
cwd?: string;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Input for speckit.check_prereqs operation
|
|
40
|
+
*/
|
|
41
|
+
export interface CheckPrereqsInput {
|
|
42
|
+
/** Branch/feature name. Auto-detected if not provided. */
|
|
43
|
+
branch?: string;
|
|
44
|
+
/** Whether spec.md is required (default: true) */
|
|
45
|
+
require_spec?: boolean;
|
|
46
|
+
/** Whether plan.md is required (default: false) */
|
|
47
|
+
require_plan?: boolean;
|
|
48
|
+
/** Whether tasks.md is required (default: false) */
|
|
49
|
+
require_tasks?: boolean;
|
|
50
|
+
/** Include tasks.md in available_docs if it exists */
|
|
51
|
+
include_tasks?: boolean;
|
|
52
|
+
/** Working directory */
|
|
53
|
+
cwd?: string;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Input for speckit.copy_template operation
|
|
57
|
+
*/
|
|
58
|
+
export interface CopyTemplateInput {
|
|
59
|
+
/** List of template names to copy */
|
|
60
|
+
templates: TemplateName[];
|
|
61
|
+
/** Target feature directory. Auto-detected if not provided. */
|
|
62
|
+
feature_dir?: string;
|
|
63
|
+
/** Optional custom destination filename (single template only) */
|
|
64
|
+
dest_filename?: string;
|
|
65
|
+
/** Working directory */
|
|
66
|
+
cwd?: string;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Input for speckit.specify operation
|
|
70
|
+
*/
|
|
71
|
+
export interface SpecifyInput {
|
|
72
|
+
/** Path to feature directory */
|
|
73
|
+
feature_dir: string;
|
|
74
|
+
/** GitHub issue URL to extract context from */
|
|
75
|
+
issue_url?: string;
|
|
76
|
+
/** Agent timeout in seconds (default: 300) */
|
|
77
|
+
timeout?: number;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Input for speckit.clarify operation
|
|
81
|
+
*/
|
|
82
|
+
export interface ClarifyInput {
|
|
83
|
+
/** Path to feature directory */
|
|
84
|
+
feature_dir: string;
|
|
85
|
+
/** GitHub issue number to post questions to */
|
|
86
|
+
issue_number?: number;
|
|
87
|
+
/** Agent timeout in seconds (default: 300) */
|
|
88
|
+
timeout?: number;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Input for speckit.plan operation
|
|
92
|
+
*/
|
|
93
|
+
export interface PlanInput {
|
|
94
|
+
/** Path to feature directory */
|
|
95
|
+
feature_dir: string;
|
|
96
|
+
/** Agent timeout in seconds (default: 600) */
|
|
97
|
+
timeout?: number;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Input for speckit.tasks operation
|
|
101
|
+
*/
|
|
102
|
+
export interface TasksInput {
|
|
103
|
+
/** Path to feature directory */
|
|
104
|
+
feature_dir: string;
|
|
105
|
+
/** Agent timeout in seconds (default: 300) */
|
|
106
|
+
timeout?: number;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Input for speckit.implement operation
|
|
110
|
+
*/
|
|
111
|
+
export interface ImplementInput {
|
|
112
|
+
/** Path to feature directory */
|
|
113
|
+
feature_dir: string;
|
|
114
|
+
/** Pattern to filter specific tasks */
|
|
115
|
+
task_filter?: string;
|
|
116
|
+
/** Agent timeout in seconds per task (default: 600) */
|
|
117
|
+
timeout?: number;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Output from speckit.create_feature operation
|
|
121
|
+
*/
|
|
122
|
+
export interface CreateFeatureOutput {
|
|
123
|
+
success: boolean;
|
|
124
|
+
branch_name: string;
|
|
125
|
+
feature_num: string;
|
|
126
|
+
spec_file: string;
|
|
127
|
+
feature_dir: string;
|
|
128
|
+
git_branch_created: boolean;
|
|
129
|
+
branched_from_epic?: boolean;
|
|
130
|
+
parent_epic_branch?: string;
|
|
131
|
+
/** SHA of the commit the feature branch was based on */
|
|
132
|
+
base_commit?: string;
|
|
133
|
+
/** Descriptive error message when success is false */
|
|
134
|
+
error?: string;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Path configuration for a feature directory
|
|
138
|
+
*/
|
|
139
|
+
export interface FeaturePaths {
|
|
140
|
+
repoRoot: string;
|
|
141
|
+
branch: string;
|
|
142
|
+
hasGit: boolean;
|
|
143
|
+
featureDir: string;
|
|
144
|
+
specFile: string;
|
|
145
|
+
planFile: string;
|
|
146
|
+
tasksFile: string;
|
|
147
|
+
researchFile: string;
|
|
148
|
+
dataModelFile: string;
|
|
149
|
+
quickstartFile: string;
|
|
150
|
+
contractsDir: string;
|
|
151
|
+
checklistsDir: string;
|
|
152
|
+
clarificationsFile: string;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Output from speckit.get_paths operation
|
|
156
|
+
*/
|
|
157
|
+
export interface GetPathsOutput extends FeaturePaths {
|
|
158
|
+
success: boolean;
|
|
159
|
+
exists: boolean;
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Output from speckit.check_prereqs operation
|
|
163
|
+
*/
|
|
164
|
+
export interface CheckPrereqsOutput {
|
|
165
|
+
valid: boolean;
|
|
166
|
+
featureDir: string;
|
|
167
|
+
availableDocs: string[];
|
|
168
|
+
missingRequired?: string[];
|
|
169
|
+
error?: string;
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Output from speckit.copy_template operation
|
|
173
|
+
*/
|
|
174
|
+
export interface CopyTemplateOutput {
|
|
175
|
+
success: boolean;
|
|
176
|
+
copied: Array<{
|
|
177
|
+
template: string;
|
|
178
|
+
destPath: string;
|
|
179
|
+
}>;
|
|
180
|
+
errors?: Array<{
|
|
181
|
+
template: string;
|
|
182
|
+
error: {
|
|
183
|
+
code: string;
|
|
184
|
+
message: string;
|
|
185
|
+
};
|
|
186
|
+
}>;
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Output from speckit.specify operation
|
|
190
|
+
*/
|
|
191
|
+
export interface SpecifyOutput {
|
|
192
|
+
success: boolean;
|
|
193
|
+
spec_file: string;
|
|
194
|
+
summary: string;
|
|
195
|
+
user_stories_count: number;
|
|
196
|
+
functional_requirements_count: number;
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* A clarification question
|
|
200
|
+
*/
|
|
201
|
+
export interface ClarificationQuestion {
|
|
202
|
+
topic: string;
|
|
203
|
+
context: string;
|
|
204
|
+
question: string;
|
|
205
|
+
options?: Array<{
|
|
206
|
+
label: string;
|
|
207
|
+
description: string;
|
|
208
|
+
}>;
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Output from speckit.clarify operation
|
|
212
|
+
*/
|
|
213
|
+
export interface ClarifyOutput {
|
|
214
|
+
success: boolean;
|
|
215
|
+
questions_count: number;
|
|
216
|
+
questions: ClarificationQuestion[];
|
|
217
|
+
posted_to_issue?: boolean;
|
|
218
|
+
clarifications_file: string;
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Output from speckit.plan operation
|
|
222
|
+
*/
|
|
223
|
+
export interface PlanOutput {
|
|
224
|
+
success: boolean;
|
|
225
|
+
plan_file: string;
|
|
226
|
+
artifacts_created: string[];
|
|
227
|
+
technologies: string[];
|
|
228
|
+
phases_count: number;
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Output from speckit.tasks operation
|
|
232
|
+
*/
|
|
233
|
+
export interface TasksOutput {
|
|
234
|
+
success: boolean;
|
|
235
|
+
tasks_file: string;
|
|
236
|
+
task_count: number;
|
|
237
|
+
phases: string[];
|
|
238
|
+
estimated_complexity: 'simple' | 'moderate' | 'complex';
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Output from speckit.implement operation
|
|
242
|
+
*/
|
|
243
|
+
export interface ImplementOutput {
|
|
244
|
+
success: boolean;
|
|
245
|
+
tasks_completed: number;
|
|
246
|
+
tasks_total: number;
|
|
247
|
+
tasks_skipped: number;
|
|
248
|
+
files_modified: string[];
|
|
249
|
+
tests_passed?: boolean;
|
|
250
|
+
errors?: string[];
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Error codes for speckit operations
|
|
254
|
+
*/
|
|
255
|
+
export type SpecKitErrorCode = 'BRANCH_EXISTS' | 'BRANCH_EXISTS_FOR_ISSUE' | 'BRANCH_NOT_FOUND' | 'SPEC_NOT_FOUND' | 'PLAN_NOT_FOUND' | 'TASKS_NOT_FOUND' | 'FEATURE_DIR_NOT_FOUND' | 'TEMPLATE_NOT_FOUND' | 'GIT_NOT_INITIALIZED' | 'GIT_OPERATION_FAILED' | 'INVALID_BRANCH_NAME' | 'INVALID_FEATURE_NUMBER' | 'INVALID_OPERATION' | 'FILE_WRITE_FAILED' | 'FILE_READ_FAILED';
|
|
256
|
+
/**
|
|
257
|
+
* Structured error for speckit operations
|
|
258
|
+
*/
|
|
259
|
+
export interface SpecKitError {
|
|
260
|
+
code: SpecKitErrorCode;
|
|
261
|
+
message: string;
|
|
262
|
+
context?: Record<string, unknown>;
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Create a structured speckit error
|
|
266
|
+
*/
|
|
267
|
+
export declare function createSpecKitError(code: SpecKitErrorCode, message: string, context?: Record<string, unknown>): SpecKitError;
|
|
268
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/actions/builtin/speckit/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Types for speckit workflow actions.
|
|
3
|
+
* Defines input/output interfaces for all speckit operations.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Create a structured speckit error
|
|
7
|
+
*/
|
|
8
|
+
export function createSpecKitError(code, message, context) {
|
|
9
|
+
return { code, message, context };
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/actions/builtin/speckit/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAmTH;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAChC,IAAsB,EACtB,OAAe,EACf,OAAiC;IAEjC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AACpC,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Verification check action handler.
|
|
3
|
+
* Handles running tests and linting commands.
|
|
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 verification (test/lint) execution
|
|
9
|
+
*/
|
|
10
|
+
export declare class VerificationCheckAction 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=verification-check.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verification-check.d.ts","sourceRoot":"","sources":["../../../src/actions/builtin/verification-check.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,uBAAwB,SAAQ,UAAU;IACrD,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAwB;IAEjD,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;CA4E3C"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Verification check action handler.
|
|
3
|
+
* Handles running tests and linting commands.
|
|
4
|
+
*/
|
|
5
|
+
import { BaseAction } from '../base-action.js';
|
|
6
|
+
import { parseActionType } from '../../types/action.js';
|
|
7
|
+
import { executeShellCommand } from '../cli-utils.js';
|
|
8
|
+
/**
|
|
9
|
+
* Action handler for verification (test/lint) execution
|
|
10
|
+
*/
|
|
11
|
+
export class VerificationCheckAction extends BaseAction {
|
|
12
|
+
type = 'verification.check';
|
|
13
|
+
canHandle(step) {
|
|
14
|
+
return parseActionType(step) === 'verification.check';
|
|
15
|
+
}
|
|
16
|
+
validate(step) {
|
|
17
|
+
const errors = [];
|
|
18
|
+
const warnings = [];
|
|
19
|
+
const command = step.with?.['command'] ?? step.command;
|
|
20
|
+
if (!command) {
|
|
21
|
+
errors.push({
|
|
22
|
+
field: 'command',
|
|
23
|
+
message: 'Command is required for verification.check action',
|
|
24
|
+
code: 'MISSING_COMMAND',
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
return {
|
|
28
|
+
valid: errors.length === 0,
|
|
29
|
+
errors,
|
|
30
|
+
warnings,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
async executeInternal(step, context) {
|
|
34
|
+
const input = {
|
|
35
|
+
command: this.getInput(step, context, 'command') ?? step.command ?? '',
|
|
36
|
+
workdir: this.getInput(step, context, 'workdir', context.workdir),
|
|
37
|
+
env: this.getInput(step, context, 'env'),
|
|
38
|
+
expectedExitCode: this.getInput(step, context, 'expectedExitCode', 0),
|
|
39
|
+
};
|
|
40
|
+
if (!input.command) {
|
|
41
|
+
return this.failureResult('Command is required');
|
|
42
|
+
}
|
|
43
|
+
context.logger.info(`Running verification: ${input.command}`);
|
|
44
|
+
try {
|
|
45
|
+
// Execute the verification command
|
|
46
|
+
const result = await executeShellCommand(input.command, {
|
|
47
|
+
cwd: input.workdir ?? context.workdir,
|
|
48
|
+
env: this.mergeEnv(context, { ...step.env, ...input.env }),
|
|
49
|
+
timeout: step.timeout ?? 600000, // 10 minute default for tests
|
|
50
|
+
signal: context.signal,
|
|
51
|
+
});
|
|
52
|
+
// Parse test results if possible
|
|
53
|
+
const verificationOutput = {
|
|
54
|
+
passed: result.exitCode === (input.expectedExitCode ?? 0),
|
|
55
|
+
output: result.stdout + (result.stderr ? '\n' + result.stderr : ''),
|
|
56
|
+
};
|
|
57
|
+
// Try to extract test counts from common test runner output patterns
|
|
58
|
+
const passedMatch = result.stdout.match(/(\d+)\s+pass(?:ed|ing)?/i);
|
|
59
|
+
const failedMatch = result.stdout.match(/(\d+)\s+fail(?:ed|ing|ures?)?/i);
|
|
60
|
+
const lintErrorsMatch = result.stdout.match(/(\d+)\s+(?:error|problem)s?/i);
|
|
61
|
+
if (passedMatch) {
|
|
62
|
+
verificationOutput.testsPassed = parseInt(passedMatch[1], 10);
|
|
63
|
+
}
|
|
64
|
+
if (failedMatch) {
|
|
65
|
+
verificationOutput.testsFailed = parseInt(failedMatch[1], 10);
|
|
66
|
+
}
|
|
67
|
+
if (lintErrorsMatch) {
|
|
68
|
+
verificationOutput.lintErrors = parseInt(lintErrorsMatch[1], 10);
|
|
69
|
+
}
|
|
70
|
+
// Determine success
|
|
71
|
+
const success = verificationOutput.passed;
|
|
72
|
+
if (success) {
|
|
73
|
+
context.logger.info('Verification passed');
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
context.logger.warn(`Verification failed with exit code ${result.exitCode}`);
|
|
77
|
+
}
|
|
78
|
+
if (success) {
|
|
79
|
+
return this.successResult(verificationOutput, {
|
|
80
|
+
exitCode: result.exitCode,
|
|
81
|
+
stdout: result.stdout,
|
|
82
|
+
stderr: result.stderr,
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
return this.failureResult(`Verification failed with exit code ${result.exitCode}`, {
|
|
87
|
+
output: verificationOutput,
|
|
88
|
+
exitCode: result.exitCode,
|
|
89
|
+
stdout: result.stdout,
|
|
90
|
+
stderr: result.stderr,
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
return this.failureResult(error instanceof Error ? error.message : String(error));
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=verification-check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verification-check.js","sourceRoot":"","sources":["../../../src/actions/builtin/verification-check.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Workspace prepare action handler.
|
|
3
|
+
* Handles git checkout/branch operations.
|
|
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 workspace preparation (git operations)
|
|
9
|
+
*/
|
|
10
|
+
export declare class WorkspacePrepareAction 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=workspace-prepare.d.ts.map
|