@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,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Get paths operation handler.
|
|
3
|
+
* Wraps the paths library for workflow execution.
|
|
4
|
+
*/
|
|
5
|
+
import type { Logger } from '../../../../types/logger.js';
|
|
6
|
+
import type { GetPathsInput, GetPathsOutput } from '../types.js';
|
|
7
|
+
/**
|
|
8
|
+
* Execute the get_paths operation
|
|
9
|
+
*/
|
|
10
|
+
export declare function executeGetPaths(input: GetPathsInput, logger: Logger): Promise<GetPathsOutput>;
|
|
11
|
+
//# sourceMappingURL=get-paths.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-paths.d.ts","sourceRoot":"","sources":["../../../../../src/actions/builtin/speckit/operations/get-paths.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAGjE;;GAEG;AACH,wBAAsB,eAAe,CACnC,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,cAAc,CAAC,CAazB"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { getPaths } from '../lib/paths.js';
|
|
2
|
+
/**
|
|
3
|
+
* Execute the get_paths operation
|
|
4
|
+
*/
|
|
5
|
+
export async function executeGetPaths(input, logger) {
|
|
6
|
+
logger.info(`Getting paths for branch: ${input.branch || '(auto-detect)'}`);
|
|
7
|
+
const result = await getPaths(input);
|
|
8
|
+
if (result.success) {
|
|
9
|
+
logger.info(`Feature directory: ${result.featureDir}`);
|
|
10
|
+
logger.info(`Feature exists: ${result.exists}`);
|
|
11
|
+
}
|
|
12
|
+
else {
|
|
13
|
+
logger.error('Failed to get paths');
|
|
14
|
+
}
|
|
15
|
+
return result;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=get-paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-paths.js","sourceRoot":"","sources":["../../../../../src/actions/builtin/speckit/operations/get-paths.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,KAAoB,EACpB,MAAc;IAEd,MAAM,CAAC,IAAI,CAAC,6BAA6B,KAAK,CAAC,MAAM,IAAI,eAAe,EAAE,CAAC,CAAC;IAE5E,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,CAAC;IAErC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,MAAM,CAAC,IAAI,CAAC,sBAAsB,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;QACvD,MAAM,CAAC,IAAI,CAAC,mBAAmB,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAClD,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACtC,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ActionContext } from '../../../../types/index.js';
|
|
2
|
+
import type { ImplementInput, ImplementOutput } from '../types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Execute the implement operation using agent.invoke delegation
|
|
5
|
+
*/
|
|
6
|
+
export declare function executeImplement(input: ImplementInput, context: ActionContext): Promise<ImplementOutput>;
|
|
7
|
+
//# sourceMappingURL=implement.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"implement.d.ts","sourceRoot":"","sources":["../../../../../src/actions/builtin/speckit/operations/implement.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAgJnE;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,cAAc,EACrB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,eAAe,CAAC,CAkJ1B"}
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Implement operation handler.
|
|
3
|
+
* Uses agent.invoke to execute tasks from the task list.
|
|
4
|
+
*/
|
|
5
|
+
import { join } from 'node:path';
|
|
6
|
+
import { executeCommand } from '../../../cli-utils.js';
|
|
7
|
+
import { exists, readFile, writeFile } from '../lib/fs.js';
|
|
8
|
+
import { StreamBatcher } from '../lib/stream-batcher.js';
|
|
9
|
+
/**
|
|
10
|
+
* Parse tasks from tasks.md content
|
|
11
|
+
*/
|
|
12
|
+
function parseTasks(content) {
|
|
13
|
+
const tasks = [];
|
|
14
|
+
const lines = content.split('\n');
|
|
15
|
+
let currentTask = null;
|
|
16
|
+
let inFiles = false;
|
|
17
|
+
for (const line of lines) {
|
|
18
|
+
// Match task header: ### T001 [P] Description or - [ ] T001 Description
|
|
19
|
+
// Also detects [DONE] marker for heading-format completion tracking
|
|
20
|
+
const taskMatch = line.match(/(?:###\s*|[-*]\s*\[([ xX])\]\s*)(T\d+)\s*(\[DONE\]\s*)?(\[P\])?\s*(.*)/);
|
|
21
|
+
if (taskMatch && taskMatch[2]) {
|
|
22
|
+
if (currentTask) {
|
|
23
|
+
tasks.push(currentTask);
|
|
24
|
+
}
|
|
25
|
+
currentTask = {
|
|
26
|
+
id: taskMatch[2],
|
|
27
|
+
description: (taskMatch[5] ?? '').trim(),
|
|
28
|
+
files: [],
|
|
29
|
+
subtasks: [],
|
|
30
|
+
isParallel: !!taskMatch[4],
|
|
31
|
+
isComplete: taskMatch[1] ? taskMatch[1].toLowerCase() === 'x' : !!taskMatch[3],
|
|
32
|
+
};
|
|
33
|
+
inFiles = false;
|
|
34
|
+
continue;
|
|
35
|
+
}
|
|
36
|
+
if (currentTask) {
|
|
37
|
+
// Match file paths
|
|
38
|
+
const fileMatch = line.match(/\*\*Files?\*\*:\s*`([^`]+)`/);
|
|
39
|
+
if (fileMatch?.[1]) {
|
|
40
|
+
currentTask.files.push(fileMatch[1]);
|
|
41
|
+
inFiles = true;
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
// Match file list items
|
|
45
|
+
if (inFiles && line.match(/^[-*]\s*`([^`]+)`/)) {
|
|
46
|
+
const pathMatch = line.match(/`([^`]+)`/);
|
|
47
|
+
if (pathMatch?.[1]) {
|
|
48
|
+
currentTask.files.push(pathMatch[1]);
|
|
49
|
+
}
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
// Match subtasks (lines starting with - or * that aren't files)
|
|
53
|
+
const subtaskMatch = line.match(/^[-*]\s+(?![`[])(.+)/);
|
|
54
|
+
if (subtaskMatch?.[1] && !inFiles) {
|
|
55
|
+
currentTask.subtasks.push(subtaskMatch[1].trim());
|
|
56
|
+
}
|
|
57
|
+
// Reset inFiles if we hit a blank line or another section
|
|
58
|
+
if (line.trim() === '' || line.startsWith('##')) {
|
|
59
|
+
inFiles = false;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
if (currentTask) {
|
|
64
|
+
tasks.push(currentTask);
|
|
65
|
+
}
|
|
66
|
+
return tasks;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Mark a task as complete in tasks.md content
|
|
70
|
+
*/
|
|
71
|
+
function markTaskComplete(content, taskId) {
|
|
72
|
+
// Replace checkbox format: - [ ] Txxx -> - [X] Txxx
|
|
73
|
+
content = content.replace(new RegExp(`([-*]\\s*)\\[\\s*\\](\\s*${taskId})`, 'g'), '$1[X]$2');
|
|
74
|
+
// Replace heading format: ### Txxx -> ### Txxx [DONE] (only if not already marked)
|
|
75
|
+
content = content.replace(new RegExp(`(###\\s*${taskId})(?!\\s*\\[DONE\\])`, 'g'), '$1 [DONE]');
|
|
76
|
+
return content;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Build the prompt for implementing a single task
|
|
80
|
+
*/
|
|
81
|
+
function buildTaskPrompt(task, featureDir, specContent, planContent) {
|
|
82
|
+
let prompt = `Implement task ${task.id}: ${task.description}
|
|
83
|
+
|
|
84
|
+
Feature directory: ${featureDir}
|
|
85
|
+
|
|
86
|
+
`;
|
|
87
|
+
if (task.files.length > 0) {
|
|
88
|
+
prompt += `Files to modify/create:
|
|
89
|
+
${task.files.map(f => `- ${f}`).join('\n')}
|
|
90
|
+
|
|
91
|
+
`;
|
|
92
|
+
}
|
|
93
|
+
if (task.subtasks.length > 0) {
|
|
94
|
+
prompt += `Subtasks:
|
|
95
|
+
${task.subtasks.map(s => `- ${s}`).join('\n')}
|
|
96
|
+
|
|
97
|
+
`;
|
|
98
|
+
}
|
|
99
|
+
prompt += `Context from spec.md (summary):
|
|
100
|
+
${specContent.substring(0, 2000)}
|
|
101
|
+
|
|
102
|
+
Context from plan.md (summary):
|
|
103
|
+
${planContent.substring(0, 2000)}
|
|
104
|
+
|
|
105
|
+
Instructions:
|
|
106
|
+
1. Implement the task according to the specification
|
|
107
|
+
2. Follow the architectural patterns from the plan
|
|
108
|
+
3. Write clean, well-documented code
|
|
109
|
+
4. Include appropriate error handling
|
|
110
|
+
5. Ensure type safety (for TypeScript)
|
|
111
|
+
|
|
112
|
+
Complete this task by writing the necessary code.`;
|
|
113
|
+
return prompt;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Execute the implement operation using agent.invoke delegation
|
|
117
|
+
*/
|
|
118
|
+
export async function executeImplement(input, context) {
|
|
119
|
+
const specFile = join(input.feature_dir, 'spec.md');
|
|
120
|
+
const planFile = join(input.feature_dir, 'plan.md');
|
|
121
|
+
const tasksFile = join(input.feature_dir, 'tasks.md');
|
|
122
|
+
context.logger.info(`Implementing tasks for: ${input.feature_dir}`);
|
|
123
|
+
// Read required files
|
|
124
|
+
if (!(await exists(tasksFile))) {
|
|
125
|
+
context.logger.error('Tasks file not found');
|
|
126
|
+
return {
|
|
127
|
+
success: false,
|
|
128
|
+
tasks_completed: 0,
|
|
129
|
+
tasks_total: 0,
|
|
130
|
+
tasks_skipped: 0,
|
|
131
|
+
files_modified: [],
|
|
132
|
+
errors: ['Tasks file not found'],
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
let tasksContent;
|
|
136
|
+
let specContent;
|
|
137
|
+
let planContent;
|
|
138
|
+
try {
|
|
139
|
+
tasksContent = await readFile(tasksFile);
|
|
140
|
+
specContent = await exists(specFile) ? await readFile(specFile) : '';
|
|
141
|
+
planContent = await exists(planFile) ? await readFile(planFile) : '';
|
|
142
|
+
}
|
|
143
|
+
catch (error) {
|
|
144
|
+
context.logger.error(`Failed to read files: ${error instanceof Error ? error.message : String(error)}`);
|
|
145
|
+
return {
|
|
146
|
+
success: false,
|
|
147
|
+
tasks_completed: 0,
|
|
148
|
+
tasks_total: 0,
|
|
149
|
+
tasks_skipped: 0,
|
|
150
|
+
files_modified: [],
|
|
151
|
+
errors: [error instanceof Error ? error.message : String(error)],
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
// Parse tasks
|
|
155
|
+
let tasks = parseTasks(tasksContent);
|
|
156
|
+
// Apply filter if specified
|
|
157
|
+
if (input.task_filter) {
|
|
158
|
+
const filterPattern = new RegExp(input.task_filter, 'i');
|
|
159
|
+
tasks = tasks.filter(t => filterPattern.test(t.id) || filterPattern.test(t.description));
|
|
160
|
+
context.logger.info(`Filtered to ${tasks.length} tasks matching: ${input.task_filter}`);
|
|
161
|
+
}
|
|
162
|
+
// Filter out completed tasks
|
|
163
|
+
const pendingTasks = tasks.filter(t => !t.isComplete);
|
|
164
|
+
const skippedTasks = tasks.filter(t => t.isComplete);
|
|
165
|
+
context.logger.info(`Tasks: ${pendingTasks.length} pending, ${skippedTasks.length} already complete`);
|
|
166
|
+
if (pendingTasks.length === 0) {
|
|
167
|
+
context.logger.info('All tasks already complete');
|
|
168
|
+
return {
|
|
169
|
+
success: true,
|
|
170
|
+
tasks_completed: 0,
|
|
171
|
+
tasks_total: tasks.length,
|
|
172
|
+
tasks_skipped: skippedTasks.length,
|
|
173
|
+
files_modified: [],
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
const completedTasks = [];
|
|
177
|
+
const filesModified = new Set();
|
|
178
|
+
const errors = [];
|
|
179
|
+
const timeout = (input.timeout ?? 600) * 1000;
|
|
180
|
+
// Execute tasks
|
|
181
|
+
for (const task of pendingTasks) {
|
|
182
|
+
context.logger.info(`Executing task ${task.id}: ${task.description.substring(0, 50)}...`);
|
|
183
|
+
// Check for cancellation
|
|
184
|
+
if (context.signal.aborted) {
|
|
185
|
+
context.logger.warn('Implementation cancelled');
|
|
186
|
+
break;
|
|
187
|
+
}
|
|
188
|
+
const prompt = buildTaskPrompt(task, input.feature_dir, specContent, planContent);
|
|
189
|
+
try {
|
|
190
|
+
// Set up streaming batchers for real-time log output (per-task)
|
|
191
|
+
const stdoutBatcher = new StreamBatcher((content) => {
|
|
192
|
+
context.emitEvent?.({
|
|
193
|
+
type: 'log:append',
|
|
194
|
+
data: { stream: 'stdout', stepName: `implement:${task.id}`, content },
|
|
195
|
+
});
|
|
196
|
+
});
|
|
197
|
+
const stderrBatcher = new StreamBatcher((content) => {
|
|
198
|
+
context.emitEvent?.({
|
|
199
|
+
type: 'log:append',
|
|
200
|
+
data: { stream: 'stderr', stepName: `implement:${task.id}`, content },
|
|
201
|
+
});
|
|
202
|
+
});
|
|
203
|
+
const result = await executeCommand('claude', ['-p', prompt, '--output-format', 'json', '--dangerously-skip-permissions'], {
|
|
204
|
+
cwd: input.feature_dir,
|
|
205
|
+
timeout,
|
|
206
|
+
signal: context.signal,
|
|
207
|
+
onStdout: (chunk) => stdoutBatcher.append(chunk),
|
|
208
|
+
onStderr: (chunk) => stderrBatcher.append(chunk),
|
|
209
|
+
});
|
|
210
|
+
// Flush remaining batched content
|
|
211
|
+
stdoutBatcher.flush();
|
|
212
|
+
stderrBatcher.flush();
|
|
213
|
+
if (result.exitCode === 0) {
|
|
214
|
+
completedTasks.push(task.id);
|
|
215
|
+
// Track files that were supposed to be modified
|
|
216
|
+
for (const file of task.files) {
|
|
217
|
+
filesModified.add(file);
|
|
218
|
+
}
|
|
219
|
+
context.logger.info(`Task ${task.id} completed`);
|
|
220
|
+
// Update tasks.md to mark task complete
|
|
221
|
+
tasksContent = markTaskComplete(tasksContent, task.id);
|
|
222
|
+
await writeFile(tasksFile, tasksContent);
|
|
223
|
+
}
|
|
224
|
+
else {
|
|
225
|
+
errors.push(`Task ${task.id} failed: Agent returned non-zero exit code`);
|
|
226
|
+
context.logger.error(`Task ${task.id} failed`);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
catch (error) {
|
|
230
|
+
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
231
|
+
errors.push(`Task ${task.id} failed: ${errorMsg}`);
|
|
232
|
+
context.logger.error(`Task ${task.id} failed: ${errorMsg}`);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
const success = errors.length === 0;
|
|
236
|
+
context.logger.info(`Implementation complete: ${completedTasks.length}/${pendingTasks.length} tasks completed`);
|
|
237
|
+
return {
|
|
238
|
+
success,
|
|
239
|
+
tasks_completed: completedTasks.length,
|
|
240
|
+
tasks_total: tasks.length,
|
|
241
|
+
tasks_skipped: skippedTasks.length,
|
|
242
|
+
files_modified: [...filesModified],
|
|
243
|
+
errors: errors.length > 0 ? errors : undefined,
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
//# sourceMappingURL=implement.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"implement.js","sourceRoot":"","sources":["../../../../../src/actions/builtin/speckit/operations/implement.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ActionContext } from '../../../../types/index.js';
|
|
2
|
+
import type { PlanInput, PlanOutput } from '../types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Execute the plan operation using agent.invoke delegation
|
|
5
|
+
*/
|
|
6
|
+
export declare function executePlan(input: PlanInput, context: ActionContext): Promise<PlanOutput>;
|
|
7
|
+
//# sourceMappingURL=plan.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../../../../src/actions/builtin/speckit/operations/plan.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AA8IzD;;GAEG;AACH,wBAAsB,WAAW,CAC/B,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,UAAU,CAAC,CAgIrB"}
|
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plan operation handler.
|
|
3
|
+
* Uses agent.invoke to generate implementation plan from specification.
|
|
4
|
+
*/
|
|
5
|
+
import { join } from 'node:path';
|
|
6
|
+
import { executeCommand } from '../../../cli-utils.js';
|
|
7
|
+
import { exists, readFile, readDir } from '../lib/fs.js';
|
|
8
|
+
import { StreamBatcher } from '../lib/stream-batcher.js';
|
|
9
|
+
/**
|
|
10
|
+
* Build the prompt for plan generation
|
|
11
|
+
*/
|
|
12
|
+
function buildPlanPrompt(featureDir, specContent, clarificationsContent) {
|
|
13
|
+
let prompt = `Generate an implementation plan for this feature specification.
|
|
14
|
+
|
|
15
|
+
Feature directory: ${featureDir}
|
|
16
|
+
Plan file: ${join(featureDir, 'plan.md')}
|
|
17
|
+
|
|
18
|
+
Specification:
|
|
19
|
+
${specContent}
|
|
20
|
+
|
|
21
|
+
`;
|
|
22
|
+
if (clarificationsContent) {
|
|
23
|
+
prompt += `Clarifications and answers:
|
|
24
|
+
${clarificationsContent}
|
|
25
|
+
|
|
26
|
+
`;
|
|
27
|
+
}
|
|
28
|
+
prompt += `Instructions:
|
|
29
|
+
1. Analyze the specification and clarifications
|
|
30
|
+
2. Determine the technical approach and architecture
|
|
31
|
+
3. Identify required technologies and dependencies
|
|
32
|
+
4. Break down the implementation into phases
|
|
33
|
+
5. Create supporting artifacts as needed
|
|
34
|
+
|
|
35
|
+
Generate a comprehensive implementation plan with:
|
|
36
|
+
- Summary of the approach
|
|
37
|
+
- Technical context (language, framework, dependencies)
|
|
38
|
+
- Architecture overview
|
|
39
|
+
- Implementation phases
|
|
40
|
+
- API contracts (if applicable)
|
|
41
|
+
- Data models (if applicable)
|
|
42
|
+
- Key technical decisions with rationale
|
|
43
|
+
- Risk mitigation strategies
|
|
44
|
+
|
|
45
|
+
Also create supporting artifacts if needed:
|
|
46
|
+
- data-model.md: If there are new entities or schemas
|
|
47
|
+
- research.md: If technical decisions need documentation
|
|
48
|
+
- contracts/*.yaml: If there are new API endpoints
|
|
49
|
+
|
|
50
|
+
Write all artifacts directly to the feature directory.`;
|
|
51
|
+
return prompt;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Extract technologies from plan content
|
|
55
|
+
*/
|
|
56
|
+
function extractTechnologies(content) {
|
|
57
|
+
const technologies = [];
|
|
58
|
+
// Look for common technology mentions
|
|
59
|
+
const techPatterns = [
|
|
60
|
+
/typescript/gi,
|
|
61
|
+
/javascript/gi,
|
|
62
|
+
/react/gi,
|
|
63
|
+
/node\.?js/gi,
|
|
64
|
+
/postgresql/gi,
|
|
65
|
+
/mongodb/gi,
|
|
66
|
+
/redis/gi,
|
|
67
|
+
/docker/gi,
|
|
68
|
+
/kubernetes/gi,
|
|
69
|
+
/graphql/gi,
|
|
70
|
+
/rest\s*api/gi,
|
|
71
|
+
/vitest/gi,
|
|
72
|
+
/jest/gi,
|
|
73
|
+
];
|
|
74
|
+
for (const pattern of techPatterns) {
|
|
75
|
+
if (pattern.test(content)) {
|
|
76
|
+
const match = content.match(pattern);
|
|
77
|
+
if (match) {
|
|
78
|
+
const tech = match[0].toLowerCase().replace(/\s+/g, '');
|
|
79
|
+
if (!technologies.includes(tech)) {
|
|
80
|
+
technologies.push(tech);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
// Also look for explicit "Technologies:" section
|
|
86
|
+
const techSection = content.match(/##\s*(?:Technologies?|Tech\s*Stack|Dependencies)\s*\n([\s\S]*?)(?=##|$)/i);
|
|
87
|
+
if (techSection?.[1]) {
|
|
88
|
+
const lines = techSection[1].split('\n');
|
|
89
|
+
for (const line of lines) {
|
|
90
|
+
const itemMatch = line.match(/[-*]\s*(?:\*\*)?([^*:\n]+)/);
|
|
91
|
+
if (itemMatch?.[1]) {
|
|
92
|
+
const tech = itemMatch[1].trim().toLowerCase();
|
|
93
|
+
if (tech.length > 1 && !technologies.includes(tech)) {
|
|
94
|
+
technologies.push(tech);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return technologies;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Count phases in plan content
|
|
103
|
+
*/
|
|
104
|
+
function countPhases(content) {
|
|
105
|
+
const phaseMatches = content.match(/##\s*Phase\s*\d+/gi);
|
|
106
|
+
return phaseMatches ? phaseMatches.length : 0;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Find artifacts created in feature directory
|
|
110
|
+
*/
|
|
111
|
+
async function findCreatedArtifacts(featureDir) {
|
|
112
|
+
const artifacts = [];
|
|
113
|
+
const expectedFiles = ['data-model.md', 'research.md', 'quickstart.md'];
|
|
114
|
+
for (const file of expectedFiles) {
|
|
115
|
+
const filePath = join(featureDir, file);
|
|
116
|
+
if (await exists(filePath)) {
|
|
117
|
+
artifacts.push(filePath);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
// Check contracts directory
|
|
121
|
+
const contractsDir = join(featureDir, 'contracts');
|
|
122
|
+
if (await exists(contractsDir)) {
|
|
123
|
+
const contracts = await readDir(contractsDir);
|
|
124
|
+
for (const contract of contracts) {
|
|
125
|
+
if (contract.endsWith('.yaml') || contract.endsWith('.yml')) {
|
|
126
|
+
artifacts.push(join(contractsDir, contract));
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
return artifacts;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Execute the plan operation using agent.invoke delegation
|
|
134
|
+
*/
|
|
135
|
+
export async function executePlan(input, context) {
|
|
136
|
+
const specFile = join(input.feature_dir, 'spec.md');
|
|
137
|
+
const planFile = join(input.feature_dir, 'plan.md');
|
|
138
|
+
const clarificationsFile = join(input.feature_dir, 'clarifications.md');
|
|
139
|
+
context.logger.info(`Generating implementation plan for: ${input.feature_dir}`);
|
|
140
|
+
// Read the spec file
|
|
141
|
+
if (!(await exists(specFile))) {
|
|
142
|
+
return {
|
|
143
|
+
success: false,
|
|
144
|
+
plan_file: planFile,
|
|
145
|
+
artifacts_created: [],
|
|
146
|
+
technologies: [],
|
|
147
|
+
phases_count: 0,
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
let specContent;
|
|
151
|
+
try {
|
|
152
|
+
specContent = await readFile(specFile);
|
|
153
|
+
}
|
|
154
|
+
catch (error) {
|
|
155
|
+
context.logger.error(`Failed to read spec file: ${error instanceof Error ? error.message : String(error)}`);
|
|
156
|
+
return {
|
|
157
|
+
success: false,
|
|
158
|
+
plan_file: planFile,
|
|
159
|
+
artifacts_created: [],
|
|
160
|
+
technologies: [],
|
|
161
|
+
phases_count: 0,
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
// Read clarifications if available
|
|
165
|
+
let clarificationsContent;
|
|
166
|
+
if (await exists(clarificationsFile)) {
|
|
167
|
+
try {
|
|
168
|
+
clarificationsContent = await readFile(clarificationsFile);
|
|
169
|
+
}
|
|
170
|
+
catch {
|
|
171
|
+
// Ignore read errors
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
// Build prompt
|
|
175
|
+
const prompt = buildPlanPrompt(input.feature_dir, specContent, clarificationsContent);
|
|
176
|
+
try {
|
|
177
|
+
// Invoke Claude agent (--dangerously-skip-permissions for automated workflows)
|
|
178
|
+
const args = ['-p', prompt, '--output-format', 'json', '--dangerously-skip-permissions'];
|
|
179
|
+
const timeout = (input.timeout ?? 600) * 1000;
|
|
180
|
+
// Set up streaming batchers for real-time log output
|
|
181
|
+
const stdoutBatcher = new StreamBatcher((content) => {
|
|
182
|
+
context.emitEvent?.({
|
|
183
|
+
type: 'log:append',
|
|
184
|
+
data: { stream: 'stdout', stepName: 'plan', content },
|
|
185
|
+
});
|
|
186
|
+
});
|
|
187
|
+
const stderrBatcher = new StreamBatcher((content) => {
|
|
188
|
+
context.emitEvent?.({
|
|
189
|
+
type: 'log:append',
|
|
190
|
+
data: { stream: 'stderr', stepName: 'plan', content },
|
|
191
|
+
});
|
|
192
|
+
});
|
|
193
|
+
const result = await executeCommand('claude', args, {
|
|
194
|
+
cwd: input.feature_dir,
|
|
195
|
+
timeout,
|
|
196
|
+
signal: context.signal,
|
|
197
|
+
onStdout: (chunk) => stdoutBatcher.append(chunk),
|
|
198
|
+
onStderr: (chunk) => stderrBatcher.append(chunk),
|
|
199
|
+
});
|
|
200
|
+
// Flush remaining batched content
|
|
201
|
+
stdoutBatcher.flush();
|
|
202
|
+
stderrBatcher.flush();
|
|
203
|
+
if (result.exitCode !== 0) {
|
|
204
|
+
return {
|
|
205
|
+
success: false,
|
|
206
|
+
plan_file: planFile,
|
|
207
|
+
artifacts_created: [],
|
|
208
|
+
technologies: [],
|
|
209
|
+
phases_count: 0,
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
// Read the generated plan to extract metrics
|
|
213
|
+
let technologies = [];
|
|
214
|
+
let phasesCount = 0;
|
|
215
|
+
if (await exists(planFile)) {
|
|
216
|
+
try {
|
|
217
|
+
const planContent = await readFile(planFile);
|
|
218
|
+
technologies = extractTechnologies(planContent);
|
|
219
|
+
phasesCount = countPhases(planContent);
|
|
220
|
+
}
|
|
221
|
+
catch {
|
|
222
|
+
// Ignore read errors
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
// Find any additional artifacts created
|
|
226
|
+
const artifactsCreated = await findCreatedArtifacts(input.feature_dir);
|
|
227
|
+
// Filter out the plan file itself
|
|
228
|
+
const additionalArtifacts = artifactsCreated.filter(a => a !== planFile);
|
|
229
|
+
context.logger.info(`Plan generated with ${phasesCount} phases`);
|
|
230
|
+
context.logger.info(`Technologies identified: ${technologies.join(', ') || 'none'}`);
|
|
231
|
+
if (additionalArtifacts.length > 0) {
|
|
232
|
+
context.logger.info(`Additional artifacts created: ${additionalArtifacts.length}`);
|
|
233
|
+
}
|
|
234
|
+
return {
|
|
235
|
+
success: true,
|
|
236
|
+
plan_file: planFile,
|
|
237
|
+
artifacts_created: additionalArtifacts,
|
|
238
|
+
technologies,
|
|
239
|
+
phases_count: phasesCount,
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
catch (error) {
|
|
243
|
+
context.logger.error(`Plan operation failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
244
|
+
return {
|
|
245
|
+
success: false,
|
|
246
|
+
plan_file: planFile,
|
|
247
|
+
artifacts_created: [],
|
|
248
|
+
technologies: [],
|
|
249
|
+
phases_count: 0,
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
//# sourceMappingURL=plan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../../../../../src/actions/builtin/speckit/operations/plan.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ActionContext } from '../../../../types/index.js';
|
|
2
|
+
import type { SpecifyInput, SpecifyOutput } from '../types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Execute the specify operation using agent.invoke delegation
|
|
5
|
+
*/
|
|
6
|
+
export declare function executeSpecify(input: SpecifyInput, context: ActionContext): Promise<SpecifyOutput>;
|
|
7
|
+
//# sourceMappingURL=specify.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"specify.d.ts","sourceRoot":"","sources":["../../../../../src/actions/builtin/speckit/operations/specify.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAmE/D;;GAEG;AACH,wBAAsB,cAAc,CAClC,KAAK,EAAE,YAAY,EACnB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,aAAa,CAAC,CAwHxB"}
|