@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,181 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared filesystem utilities for speckit operations.
|
|
3
|
+
* Ported from speckit MCP server for direct library access.
|
|
4
|
+
*/
|
|
5
|
+
import { promises as fs } from 'node:fs';
|
|
6
|
+
import { dirname, join } from 'node:path';
|
|
7
|
+
/**
|
|
8
|
+
* Read file contents as string
|
|
9
|
+
*/
|
|
10
|
+
export async function readFile(path) {
|
|
11
|
+
return fs.readFile(path, 'utf-8');
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Write string content to file, creating parent directories if needed
|
|
15
|
+
*/
|
|
16
|
+
export async function writeFile(path, content) {
|
|
17
|
+
await mkdir(dirname(path));
|
|
18
|
+
await fs.writeFile(path, content, 'utf-8');
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Check if a file or directory exists
|
|
22
|
+
*/
|
|
23
|
+
export async function exists(path) {
|
|
24
|
+
try {
|
|
25
|
+
await fs.access(path);
|
|
26
|
+
return true;
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Check if path is a directory
|
|
34
|
+
*/
|
|
35
|
+
export async function isDirectory(path) {
|
|
36
|
+
try {
|
|
37
|
+
const stats = await fs.stat(path);
|
|
38
|
+
return stats.isDirectory();
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Check if path is a file
|
|
46
|
+
*/
|
|
47
|
+
export async function isFile(path) {
|
|
48
|
+
try {
|
|
49
|
+
const stats = await fs.stat(path);
|
|
50
|
+
return stats.isFile();
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Create directory and all parent directories if they don't exist
|
|
58
|
+
*/
|
|
59
|
+
export async function mkdir(path) {
|
|
60
|
+
await fs.mkdir(path, { recursive: true });
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Copy file from source to destination
|
|
64
|
+
*/
|
|
65
|
+
export async function copyFile(src, dest) {
|
|
66
|
+
await mkdir(dirname(dest));
|
|
67
|
+
await fs.copyFile(src, dest);
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* List directory contents
|
|
71
|
+
*/
|
|
72
|
+
export async function readDir(path) {
|
|
73
|
+
try {
|
|
74
|
+
return await fs.readdir(path);
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
return [];
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Find the repository root by looking for .git directory or specs/ folder
|
|
82
|
+
*/
|
|
83
|
+
export async function findRepoRoot(startPath) {
|
|
84
|
+
let current = startPath;
|
|
85
|
+
const root = dirname(current);
|
|
86
|
+
while (current !== root) {
|
|
87
|
+
// Check for .git directory
|
|
88
|
+
if (await exists(join(current, '.git'))) {
|
|
89
|
+
return current;
|
|
90
|
+
}
|
|
91
|
+
// Check for specs directory (fallback for non-git repos)
|
|
92
|
+
if (await exists(join(current, 'specs'))) {
|
|
93
|
+
return current;
|
|
94
|
+
}
|
|
95
|
+
current = dirname(current);
|
|
96
|
+
}
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Resolve the specs directory path
|
|
101
|
+
* Checks for configured path in autodev.json, otherwise defaults to 'specs'
|
|
102
|
+
*/
|
|
103
|
+
export async function resolveSpecsPath(workDir) {
|
|
104
|
+
const repoRoot = await findRepoRoot(workDir);
|
|
105
|
+
if (!repoRoot)
|
|
106
|
+
return null;
|
|
107
|
+
// Check for configured path in autodev.json
|
|
108
|
+
const configPath = join(repoRoot, '.claude', 'autodev.json');
|
|
109
|
+
if (await exists(configPath)) {
|
|
110
|
+
try {
|
|
111
|
+
const content = await readFile(configPath);
|
|
112
|
+
const config = JSON.parse(content);
|
|
113
|
+
if (config.paths?.specs) {
|
|
114
|
+
return join(repoRoot, config.paths.specs);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
catch {
|
|
118
|
+
// Ignore parse errors, fall through to default
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
return join(repoRoot, 'specs');
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Resolve the templates directory path
|
|
125
|
+
* Checks for configured path in autodev.json, otherwise defaults to '.specify/templates'
|
|
126
|
+
*/
|
|
127
|
+
export async function resolveTemplatesPath(workDir) {
|
|
128
|
+
const repoRoot = await findRepoRoot(workDir);
|
|
129
|
+
if (!repoRoot)
|
|
130
|
+
return null;
|
|
131
|
+
// Check for configured path in autodev.json
|
|
132
|
+
const configPath = join(repoRoot, '.claude', 'autodev.json');
|
|
133
|
+
if (await exists(configPath)) {
|
|
134
|
+
try {
|
|
135
|
+
const content = await readFile(configPath);
|
|
136
|
+
const config = JSON.parse(content);
|
|
137
|
+
if (config.paths?.templates) {
|
|
138
|
+
return join(repoRoot, config.paths.templates);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
catch {
|
|
142
|
+
// Ignore parse errors, fall through to default
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
return join(repoRoot, '.specify', 'templates');
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Get files configuration from autodev.json or use defaults
|
|
149
|
+
*/
|
|
150
|
+
export async function getFilesConfig(repoRoot) {
|
|
151
|
+
const defaults = {
|
|
152
|
+
spec: 'spec.md',
|
|
153
|
+
plan: 'plan.md',
|
|
154
|
+
tasks: 'tasks.md',
|
|
155
|
+
clarifications: 'clarifications.md',
|
|
156
|
+
research: 'research.md',
|
|
157
|
+
dataModel: 'data-model.md',
|
|
158
|
+
};
|
|
159
|
+
const configPath = join(repoRoot, '.claude', 'autodev.json');
|
|
160
|
+
if (await exists(configPath)) {
|
|
161
|
+
try {
|
|
162
|
+
const content = await readFile(configPath);
|
|
163
|
+
const config = JSON.parse(content);
|
|
164
|
+
if (config.files) {
|
|
165
|
+
return {
|
|
166
|
+
spec: config.files.spec || defaults.spec,
|
|
167
|
+
plan: config.files.plan || defaults.plan,
|
|
168
|
+
tasks: config.files.tasks || defaults.tasks,
|
|
169
|
+
clarifications: config.files.clarifications || defaults.clarifications,
|
|
170
|
+
research: config.files.research || defaults.research,
|
|
171
|
+
dataModel: config.files.dataModel || defaults.dataModel,
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
catch {
|
|
176
|
+
// Ignore parse errors, fall through to defaults
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
return defaults;
|
|
180
|
+
}
|
|
181
|
+
//# sourceMappingURL=fs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs.js","sourceRoot":"","sources":["../../../../../src/actions/builtin/speckit/lib/fs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { GetPathsInput, GetPathsOutput } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Get all feature paths for the current or specified branch.
|
|
4
|
+
* Ported from speckit MCP get_paths tool.
|
|
5
|
+
*/
|
|
6
|
+
export declare function getPaths(input: GetPathsInput): Promise<GetPathsOutput>;
|
|
7
|
+
//# sourceMappingURL=paths.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../../../../src/actions/builtin/speckit/lib/paths.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAgB,MAAM,aAAa,CAAC;AAsF/E;;;GAGG;AACH,wBAAsB,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC,CAkF5E"}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Path resolution library for speckit operations.
|
|
3
|
+
* Ported from speckit MCP server for direct library access.
|
|
4
|
+
*/
|
|
5
|
+
import { join } from 'node:path';
|
|
6
|
+
import { simpleGit } from 'simple-git';
|
|
7
|
+
import { exists, readDir, findRepoRoot, resolveSpecsPath, getFilesConfig, } from './fs.js';
|
|
8
|
+
import { FEATURE_NAME_PATTERN } from './feature.js';
|
|
9
|
+
/**
|
|
10
|
+
* Check if git repository exists
|
|
11
|
+
*/
|
|
12
|
+
async function isGitRepo(path) {
|
|
13
|
+
return exists(join(path, '.git'));
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Get current git branch name
|
|
17
|
+
*/
|
|
18
|
+
async function getCurrentBranch(repoRoot) {
|
|
19
|
+
try {
|
|
20
|
+
const git = simpleGit(repoRoot);
|
|
21
|
+
const status = await git.status();
|
|
22
|
+
return status.current;
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Find feature name from current branch or environment
|
|
30
|
+
*/
|
|
31
|
+
async function getFeatureName(repoRoot, workDir) {
|
|
32
|
+
// Check environment variable first
|
|
33
|
+
const envFeature = process.env.SPECIFY_FEATURE;
|
|
34
|
+
if (envFeature && FEATURE_NAME_PATTERN.test(envFeature)) {
|
|
35
|
+
return envFeature;
|
|
36
|
+
}
|
|
37
|
+
// Try to get from git branch
|
|
38
|
+
if (await isGitRepo(repoRoot)) {
|
|
39
|
+
const branch = await getCurrentBranch(repoRoot);
|
|
40
|
+
if (branch && FEATURE_NAME_PATTERN.test(branch)) {
|
|
41
|
+
return branch;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
// Try to find the most recent feature directory
|
|
45
|
+
const specsDir = await resolveSpecsPath(workDir);
|
|
46
|
+
if (specsDir && (await exists(specsDir))) {
|
|
47
|
+
const entries = await readDir(specsDir);
|
|
48
|
+
const features = entries
|
|
49
|
+
.filter((e) => FEATURE_NAME_PATTERN.test(e))
|
|
50
|
+
.sort()
|
|
51
|
+
.reverse();
|
|
52
|
+
if (features.length > 0 && features[0]) {
|
|
53
|
+
return features[0];
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Build FeaturePaths object from feature name
|
|
60
|
+
*/
|
|
61
|
+
async function buildFeaturePaths(repoRoot, featureName, hasGit, filesConfig, workDir) {
|
|
62
|
+
const specsDir = await resolveSpecsPath(workDir) || join(repoRoot, 'specs');
|
|
63
|
+
const featureDir = join(specsDir, featureName);
|
|
64
|
+
return {
|
|
65
|
+
repoRoot,
|
|
66
|
+
branch: featureName,
|
|
67
|
+
hasGit,
|
|
68
|
+
featureDir,
|
|
69
|
+
specFile: join(featureDir, filesConfig.spec),
|
|
70
|
+
planFile: join(featureDir, filesConfig.plan),
|
|
71
|
+
tasksFile: join(featureDir, filesConfig.tasks),
|
|
72
|
+
researchFile: join(featureDir, filesConfig.research),
|
|
73
|
+
dataModelFile: join(featureDir, filesConfig.dataModel),
|
|
74
|
+
quickstartFile: join(featureDir, 'quickstart.md'),
|
|
75
|
+
contractsDir: join(featureDir, 'contracts'),
|
|
76
|
+
checklistsDir: join(featureDir, 'checklists'),
|
|
77
|
+
clarificationsFile: join(featureDir, filesConfig.clarifications),
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Get all feature paths for the current or specified branch.
|
|
82
|
+
* Ported from speckit MCP get_paths tool.
|
|
83
|
+
*/
|
|
84
|
+
export async function getPaths(input) {
|
|
85
|
+
const workDir = input.cwd || process.cwd();
|
|
86
|
+
// Find repo root
|
|
87
|
+
const repoRoot = await findRepoRoot(workDir);
|
|
88
|
+
if (!repoRoot) {
|
|
89
|
+
return {
|
|
90
|
+
success: false,
|
|
91
|
+
exists: false,
|
|
92
|
+
repoRoot: '',
|
|
93
|
+
branch: '',
|
|
94
|
+
hasGit: false,
|
|
95
|
+
featureDir: '',
|
|
96
|
+
specFile: '',
|
|
97
|
+
planFile: '',
|
|
98
|
+
tasksFile: '',
|
|
99
|
+
researchFile: '',
|
|
100
|
+
dataModelFile: '',
|
|
101
|
+
quickstartFile: '',
|
|
102
|
+
contractsDir: '',
|
|
103
|
+
checklistsDir: '',
|
|
104
|
+
clarificationsFile: '',
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
// Determine feature name
|
|
108
|
+
let featureName = input.branch;
|
|
109
|
+
if (!featureName) {
|
|
110
|
+
featureName = (await getFeatureName(repoRoot, workDir)) ?? undefined;
|
|
111
|
+
}
|
|
112
|
+
if (!featureName) {
|
|
113
|
+
return {
|
|
114
|
+
success: false,
|
|
115
|
+
exists: false,
|
|
116
|
+
repoRoot,
|
|
117
|
+
branch: '',
|
|
118
|
+
hasGit: await isGitRepo(repoRoot),
|
|
119
|
+
featureDir: '',
|
|
120
|
+
specFile: '',
|
|
121
|
+
planFile: '',
|
|
122
|
+
tasksFile: '',
|
|
123
|
+
researchFile: '',
|
|
124
|
+
dataModelFile: '',
|
|
125
|
+
quickstartFile: '',
|
|
126
|
+
contractsDir: '',
|
|
127
|
+
checklistsDir: '',
|
|
128
|
+
clarificationsFile: '',
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
// Validate feature name pattern
|
|
132
|
+
if (!FEATURE_NAME_PATTERN.test(featureName)) {
|
|
133
|
+
return {
|
|
134
|
+
success: false,
|
|
135
|
+
exists: false,
|
|
136
|
+
repoRoot,
|
|
137
|
+
branch: featureName,
|
|
138
|
+
hasGit: await isGitRepo(repoRoot),
|
|
139
|
+
featureDir: '',
|
|
140
|
+
specFile: '',
|
|
141
|
+
planFile: '',
|
|
142
|
+
tasksFile: '',
|
|
143
|
+
researchFile: '',
|
|
144
|
+
dataModelFile: '',
|
|
145
|
+
quickstartFile: '',
|
|
146
|
+
contractsDir: '',
|
|
147
|
+
checklistsDir: '',
|
|
148
|
+
clarificationsFile: '',
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
const hasGit = await isGitRepo(repoRoot);
|
|
152
|
+
const filesConfig = await getFilesConfig(repoRoot);
|
|
153
|
+
const paths = await buildFeaturePaths(repoRoot, featureName, hasGit, filesConfig, workDir);
|
|
154
|
+
const featureDirExists = await exists(paths.featureDir);
|
|
155
|
+
return {
|
|
156
|
+
success: true,
|
|
157
|
+
exists: featureDirExists,
|
|
158
|
+
...paths,
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../../../../src/actions/builtin/speckit/lib/paths.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { CheckPrereqsInput, CheckPrereqsOutput } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Check prerequisites for a command.
|
|
4
|
+
* Validates required files exist and returns list of available optional documents.
|
|
5
|
+
* Ported from speckit MCP check_prereqs tool.
|
|
6
|
+
*/
|
|
7
|
+
export declare function checkPrereqs(input: CheckPrereqsInput): Promise<CheckPrereqsOutput>;
|
|
8
|
+
//# sourceMappingURL=prereqs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prereqs.d.ts","sourceRoot":"","sources":["../../../../../src/actions/builtin/speckit/lib/prereqs.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAoGzE;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA+GxF"}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Prerequisites checking library for speckit operations.
|
|
3
|
+
* Ported from speckit MCP server for direct library access.
|
|
4
|
+
*/
|
|
5
|
+
import { join } from 'node:path';
|
|
6
|
+
import { simpleGit } from 'simple-git';
|
|
7
|
+
import { exists, isFile, isDirectory, readDir, findRepoRoot, resolveSpecsPath, getFilesConfig, } from './fs.js';
|
|
8
|
+
import { FEATURE_NAME_PATTERN } from './feature.js';
|
|
9
|
+
/**
|
|
10
|
+
* Check if git repository exists
|
|
11
|
+
*/
|
|
12
|
+
async function isGitRepo(path) {
|
|
13
|
+
return exists(join(path, '.git'));
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Get current git branch name
|
|
17
|
+
*/
|
|
18
|
+
async function getCurrentBranch(repoRoot) {
|
|
19
|
+
try {
|
|
20
|
+
const git = simpleGit(repoRoot);
|
|
21
|
+
const status = await git.status();
|
|
22
|
+
return status.current;
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Find feature name from current branch or environment
|
|
30
|
+
*/
|
|
31
|
+
async function getFeatureName(repoRoot, workDir) {
|
|
32
|
+
// Check environment variable first
|
|
33
|
+
const envFeature = process.env.SPECIFY_FEATURE;
|
|
34
|
+
if (envFeature && FEATURE_NAME_PATTERN.test(envFeature)) {
|
|
35
|
+
return envFeature;
|
|
36
|
+
}
|
|
37
|
+
// Try to get from git branch
|
|
38
|
+
if (await isGitRepo(repoRoot)) {
|
|
39
|
+
const branch = await getCurrentBranch(repoRoot);
|
|
40
|
+
if (branch && FEATURE_NAME_PATTERN.test(branch)) {
|
|
41
|
+
return branch;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
// Try to find the most recent feature directory
|
|
45
|
+
const specsDir = await resolveSpecsPath(workDir);
|
|
46
|
+
if (specsDir && (await exists(specsDir))) {
|
|
47
|
+
const entries = await readDir(specsDir);
|
|
48
|
+
const features = entries
|
|
49
|
+
.filter((e) => FEATURE_NAME_PATTERN.test(e))
|
|
50
|
+
.sort()
|
|
51
|
+
.reverse();
|
|
52
|
+
if (features.length > 0 && features[0]) {
|
|
53
|
+
return features[0];
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Get list of available optional documents in feature directory
|
|
60
|
+
*/
|
|
61
|
+
async function getAvailableDocs(featureDir, filesConfig) {
|
|
62
|
+
// Build optional docs list from config
|
|
63
|
+
const optionalDocs = [
|
|
64
|
+
filesConfig.research,
|
|
65
|
+
filesConfig.dataModel,
|
|
66
|
+
'quickstart.md',
|
|
67
|
+
];
|
|
68
|
+
const available = [];
|
|
69
|
+
// Check for optional markdown files
|
|
70
|
+
for (const doc of optionalDocs) {
|
|
71
|
+
if (await isFile(join(featureDir, doc))) {
|
|
72
|
+
available.push(doc);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
// Check for contracts directory with content
|
|
76
|
+
const contractsDir = join(featureDir, 'contracts');
|
|
77
|
+
if (await isDirectory(contractsDir)) {
|
|
78
|
+
const contracts = await readDir(contractsDir);
|
|
79
|
+
if (contracts.length > 0) {
|
|
80
|
+
available.push('contracts/');
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
// Check for checklists directory with content
|
|
84
|
+
const checklistsDir = join(featureDir, 'checklists');
|
|
85
|
+
if (await isDirectory(checklistsDir)) {
|
|
86
|
+
const checklists = await readDir(checklistsDir);
|
|
87
|
+
if (checklists.length > 0) {
|
|
88
|
+
available.push('checklists/');
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return available;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Check prerequisites for a command.
|
|
95
|
+
* Validates required files exist and returns list of available optional documents.
|
|
96
|
+
* Ported from speckit MCP check_prereqs tool.
|
|
97
|
+
*/
|
|
98
|
+
export async function checkPrereqs(input) {
|
|
99
|
+
const workDir = input.cwd || process.cwd();
|
|
100
|
+
const requireSpec = input.require_spec ?? true;
|
|
101
|
+
const requirePlan = input.require_plan ?? false;
|
|
102
|
+
const requireTasks = input.require_tasks ?? false;
|
|
103
|
+
const includeTasks = input.include_tasks ?? false;
|
|
104
|
+
// Find repo root
|
|
105
|
+
const repoRoot = await findRepoRoot(workDir);
|
|
106
|
+
if (!repoRoot) {
|
|
107
|
+
return {
|
|
108
|
+
valid: false,
|
|
109
|
+
featureDir: '',
|
|
110
|
+
availableDocs: [],
|
|
111
|
+
error: 'Could not find repository root',
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
// Determine feature name
|
|
115
|
+
let featureName = input.branch;
|
|
116
|
+
if (!featureName) {
|
|
117
|
+
featureName = (await getFeatureName(repoRoot, workDir)) ?? undefined;
|
|
118
|
+
}
|
|
119
|
+
if (!featureName) {
|
|
120
|
+
return {
|
|
121
|
+
valid: false,
|
|
122
|
+
featureDir: '',
|
|
123
|
+
availableDocs: [],
|
|
124
|
+
error: 'Could not determine feature name. Use a feature branch (###-name) or set SPECIFY_FEATURE env var.',
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
// Validate feature name pattern
|
|
128
|
+
if (!FEATURE_NAME_PATTERN.test(featureName)) {
|
|
129
|
+
return {
|
|
130
|
+
valid: false,
|
|
131
|
+
featureDir: '',
|
|
132
|
+
availableDocs: [],
|
|
133
|
+
error: `Branch name '${featureName}' does not match required pattern ###-name`,
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
const specsDir = await resolveSpecsPath(workDir) || join(repoRoot, 'specs');
|
|
137
|
+
const featureDir = join(specsDir, featureName);
|
|
138
|
+
// Check if feature directory exists
|
|
139
|
+
if (!(await exists(featureDir))) {
|
|
140
|
+
return {
|
|
141
|
+
valid: false,
|
|
142
|
+
featureDir,
|
|
143
|
+
availableDocs: [],
|
|
144
|
+
missingRequired: ['feature directory'],
|
|
145
|
+
error: `Feature directory does not exist: ${featureDir}`,
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
// Load files configuration
|
|
149
|
+
const filesConfig = await getFilesConfig(repoRoot);
|
|
150
|
+
// Check required files
|
|
151
|
+
const missingRequired = [];
|
|
152
|
+
if (requireSpec) {
|
|
153
|
+
const specFile = join(featureDir, filesConfig.spec);
|
|
154
|
+
if (!(await isFile(specFile))) {
|
|
155
|
+
missingRequired.push(filesConfig.spec);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
if (requirePlan) {
|
|
159
|
+
const planFile = join(featureDir, filesConfig.plan);
|
|
160
|
+
if (!(await isFile(planFile))) {
|
|
161
|
+
missingRequired.push(filesConfig.plan);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
if (requireTasks) {
|
|
165
|
+
const tasksFile = join(featureDir, filesConfig.tasks);
|
|
166
|
+
if (!(await isFile(tasksFile))) {
|
|
167
|
+
missingRequired.push(filesConfig.tasks);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
// Get available optional docs
|
|
171
|
+
const availableDocs = await getAvailableDocs(featureDir, filesConfig);
|
|
172
|
+
// Include tasks.md if requested and exists
|
|
173
|
+
if (includeTasks) {
|
|
174
|
+
const tasksFile = join(featureDir, filesConfig.tasks);
|
|
175
|
+
if (await isFile(tasksFile)) {
|
|
176
|
+
availableDocs.push(filesConfig.tasks);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
if (missingRequired.length > 0) {
|
|
180
|
+
return {
|
|
181
|
+
valid: false,
|
|
182
|
+
featureDir,
|
|
183
|
+
availableDocs,
|
|
184
|
+
missingRequired,
|
|
185
|
+
error: `Missing required files: ${missingRequired.join(', ')}`,
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
return {
|
|
189
|
+
valid: true,
|
|
190
|
+
featureDir,
|
|
191
|
+
availableDocs,
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
//# sourceMappingURL=prereqs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prereqs.js","sourceRoot":"","sources":["../../../../../src/actions/builtin/speckit/lib/prereqs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Batches string chunks over a time window and calls a flush callback.
|
|
3
|
+
* Used to reduce event volume from high-frequency stdout data events.
|
|
4
|
+
*/
|
|
5
|
+
export declare class StreamBatcher {
|
|
6
|
+
private readonly flushCallback;
|
|
7
|
+
private readonly intervalMs;
|
|
8
|
+
private buffer;
|
|
9
|
+
private timer;
|
|
10
|
+
constructor(flushCallback: (content: string) => void, intervalMs?: number);
|
|
11
|
+
append(chunk: string): void;
|
|
12
|
+
flush(): void;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=stream-batcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream-batcher.d.ts","sourceRoot":"","sources":["../../../../../src/actions/builtin/speckit/lib/stream-batcher.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,qBAAa,aAAa;IAKtB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAL7B,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,KAAK,CAA8C;gBAGxC,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,EACxC,UAAU,GAAE,MAAY;IAG3C,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAO3B,KAAK,IAAI,IAAI;CAUd"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Batches string chunks over a time window and calls a flush callback.
|
|
3
|
+
* Used to reduce event volume from high-frequency stdout data events.
|
|
4
|
+
*/
|
|
5
|
+
export class StreamBatcher {
|
|
6
|
+
flushCallback;
|
|
7
|
+
intervalMs;
|
|
8
|
+
buffer = '';
|
|
9
|
+
timer = null;
|
|
10
|
+
constructor(flushCallback, intervalMs = 200) {
|
|
11
|
+
this.flushCallback = flushCallback;
|
|
12
|
+
this.intervalMs = intervalMs;
|
|
13
|
+
}
|
|
14
|
+
append(chunk) {
|
|
15
|
+
this.buffer += chunk;
|
|
16
|
+
if (!this.timer) {
|
|
17
|
+
this.timer = setTimeout(() => this.flush(), this.intervalMs);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
flush() {
|
|
21
|
+
if (this.timer) {
|
|
22
|
+
clearTimeout(this.timer);
|
|
23
|
+
this.timer = null;
|
|
24
|
+
}
|
|
25
|
+
if (this.buffer.length > 0) {
|
|
26
|
+
this.flushCallback(this.buffer);
|
|
27
|
+
this.buffer = '';
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=stream-batcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream-batcher.js","sourceRoot":"","sources":["../../../../../src/actions/builtin/speckit/lib/stream-batcher.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,OAAO,aAAa;IAKL;IACA;IALX,MAAM,GAAG,EAAE,CAAC;IACZ,KAAK,GAAyC,IAAI,CAAC;IAE3D,YACmB,aAAwC,EACxC,aAAqB,GAAG;QADxB,kBAAa,GAAb,aAAa,CAA2B;QACxC,eAAU,GAAV,UAAU,CAAc;IACxC,CAAC;IAEJ,MAAM,CAAC,KAAa;QAClB,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC;QACrB,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;IAED,KAAK;QACH,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QACpB,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAChC,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QACnB,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { CopyTemplateInput, CopyTemplateOutput, TemplateName } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Get all valid template names
|
|
4
|
+
*/
|
|
5
|
+
export declare function getTemplateNames(): TemplateName[];
|
|
6
|
+
/**
|
|
7
|
+
* Check if a string is a valid template name
|
|
8
|
+
*/
|
|
9
|
+
export declare function isValidTemplateName(name: string): name is TemplateName;
|
|
10
|
+
/**
|
|
11
|
+
* Copy one or more templates to the feature directory.
|
|
12
|
+
* Ported from speckit MCP copy_template tool.
|
|
13
|
+
*/
|
|
14
|
+
export declare function copyTemplates(input: CopyTemplateInput): Promise<CopyTemplateOutput>;
|
|
15
|
+
//# sourceMappingURL=templates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../../../../src/actions/builtin/speckit/lib/templates.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AA0CvF;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,YAAY,EAAE,CAEjD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,YAAY,CAEtE;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAqIzF"}
|