@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,430 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Feature creation library.
|
|
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, mkdir, writeFile, readFile, readDir, findRepoRoot, resolveSpecsPath, } from './fs.js';
|
|
8
|
+
/** Pattern for valid feature names: \d+-short-name (flexible number padding) */
|
|
9
|
+
export const FEATURE_NAME_PATTERN = /^\d+-[a-z0-9]+(?:-[a-z0-9]+)*$/;
|
|
10
|
+
/** Maximum branch name length (GitHub limit) */
|
|
11
|
+
export const MAX_BRANCH_LENGTH = 244;
|
|
12
|
+
/** Default branch configuration */
|
|
13
|
+
const DEFAULT_BRANCH_CONFIG = {
|
|
14
|
+
pattern: '{paddedNumber}-{slug}',
|
|
15
|
+
numberPadding: 3,
|
|
16
|
+
slugOptions: {
|
|
17
|
+
maxLength: 30,
|
|
18
|
+
separator: '-',
|
|
19
|
+
removeStopWords: true,
|
|
20
|
+
maxWords: 4,
|
|
21
|
+
},
|
|
22
|
+
};
|
|
23
|
+
/** Stop words to remove from slugs */
|
|
24
|
+
const STOP_WORDS = new Set([
|
|
25
|
+
'a', 'an', 'the', 'to', 'for', 'of', 'in', 'on', 'at', 'by',
|
|
26
|
+
'with', 'and', 'or', 'as', 'is', 'it', 'be', 'are', 'was',
|
|
27
|
+
'were', 'been', 'being', 'have', 'has', 'had', 'do', 'does',
|
|
28
|
+
'did', 'will', 'would', 'could', 'should', 'may', 'might',
|
|
29
|
+
'can', 'this', 'that', 'these', 'those', 'i', 'we', 'you',
|
|
30
|
+
]);
|
|
31
|
+
/**
|
|
32
|
+
* Load branch configuration from autodev.json
|
|
33
|
+
*/
|
|
34
|
+
async function loadBranchConfig(repoRoot) {
|
|
35
|
+
const configPath = join(repoRoot, '.claude', 'autodev.json');
|
|
36
|
+
if (!(await exists(configPath))) {
|
|
37
|
+
return DEFAULT_BRANCH_CONFIG;
|
|
38
|
+
}
|
|
39
|
+
try {
|
|
40
|
+
const content = await readFile(configPath);
|
|
41
|
+
const config = JSON.parse(content);
|
|
42
|
+
if (!config.branches) {
|
|
43
|
+
return DEFAULT_BRANCH_CONFIG;
|
|
44
|
+
}
|
|
45
|
+
return {
|
|
46
|
+
pattern: config.branches.pattern ?? DEFAULT_BRANCH_CONFIG.pattern,
|
|
47
|
+
numberPadding: config.branches.numberPadding ?? DEFAULT_BRANCH_CONFIG.numberPadding,
|
|
48
|
+
slugOptions: {
|
|
49
|
+
...DEFAULT_BRANCH_CONFIG.slugOptions,
|
|
50
|
+
...config.branches.slugOptions,
|
|
51
|
+
},
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
return DEFAULT_BRANCH_CONFIG;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Generate a configurable slug from a description
|
|
60
|
+
*/
|
|
61
|
+
function generateConfigurableSlug(description, options) {
|
|
62
|
+
// Normalize: lowercase and replace non-alphanumeric with spaces
|
|
63
|
+
const normalized = description
|
|
64
|
+
.toLowerCase()
|
|
65
|
+
.replace(/[^a-z0-9\s]/g, ' ')
|
|
66
|
+
.trim();
|
|
67
|
+
// Split into words
|
|
68
|
+
let words = normalized.split(/\s+/).filter((word) => word.length > 0);
|
|
69
|
+
// Remove stop words if configured
|
|
70
|
+
if (options.removeStopWords) {
|
|
71
|
+
words = words.filter((word) => !STOP_WORDS.has(word));
|
|
72
|
+
}
|
|
73
|
+
// Limit to maxWords
|
|
74
|
+
if (options.maxWords > 0 && words.length > options.maxWords) {
|
|
75
|
+
words = words.slice(0, options.maxWords);
|
|
76
|
+
}
|
|
77
|
+
// Join with separator
|
|
78
|
+
let slug = words.join(options.separator);
|
|
79
|
+
// Handle empty result
|
|
80
|
+
if (!slug || slug.length < 2) {
|
|
81
|
+
return 'feature';
|
|
82
|
+
}
|
|
83
|
+
// Truncate to maxLength
|
|
84
|
+
if (slug.length > options.maxLength) {
|
|
85
|
+
const truncated = slug.substring(0, options.maxLength);
|
|
86
|
+
const lastSeparatorIndex = truncated.lastIndexOf(options.separator);
|
|
87
|
+
if (lastSeparatorIndex > 0) {
|
|
88
|
+
slug = truncated.substring(0, lastSeparatorIndex);
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
slug = truncated;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
// Remove trailing separator
|
|
95
|
+
if (slug.endsWith(options.separator)) {
|
|
96
|
+
slug = slug.slice(0, -options.separator.length);
|
|
97
|
+
}
|
|
98
|
+
return slug;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Build branch name from pattern and context
|
|
102
|
+
*/
|
|
103
|
+
function buildBranchNameFromPattern(config, issueNumber, description) {
|
|
104
|
+
const { pattern, numberPadding, slugOptions } = config;
|
|
105
|
+
const paddedNumber = numberPadding > 0
|
|
106
|
+
? String(issueNumber).padStart(numberPadding, '0')
|
|
107
|
+
: String(issueNumber);
|
|
108
|
+
const slug = generateConfigurableSlug(description, slugOptions);
|
|
109
|
+
let branchName = pattern;
|
|
110
|
+
branchName = branchName.replace('{number}', String(issueNumber));
|
|
111
|
+
branchName = branchName.replace('{paddedNumber}', paddedNumber);
|
|
112
|
+
branchName = branchName.replace('{slug}', slug);
|
|
113
|
+
return branchName;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Find the next available feature number
|
|
117
|
+
*/
|
|
118
|
+
async function getNextFeatureNumber(specsDir) {
|
|
119
|
+
if (!(await exists(specsDir))) {
|
|
120
|
+
return '001';
|
|
121
|
+
}
|
|
122
|
+
const entries = await readDir(specsDir);
|
|
123
|
+
let maxNumber = 0;
|
|
124
|
+
for (const entry of entries) {
|
|
125
|
+
const match = entry.match(/^(\d+)-/);
|
|
126
|
+
if (match && match[1]) {
|
|
127
|
+
const num = parseInt(match[1], 10);
|
|
128
|
+
if (num > maxNumber) {
|
|
129
|
+
maxNumber = num;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
const nextNum = maxNumber + 1;
|
|
134
|
+
return nextNum.toString().padStart(3, '0');
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Create initial spec content from description
|
|
138
|
+
*/
|
|
139
|
+
function createInitialSpecContent(description, featureName) {
|
|
140
|
+
const titlePart = description.split(/[.!?]/)[0] || description;
|
|
141
|
+
const title = titlePart
|
|
142
|
+
.trim()
|
|
143
|
+
.replace(/^(add|create|implement|build)\s+/i, '')
|
|
144
|
+
.replace(/^\w/, (c) => c.toUpperCase());
|
|
145
|
+
return `# Feature Specification: ${title}
|
|
146
|
+
|
|
147
|
+
**Branch**: \`${featureName}\` | **Date**: ${new Date().toISOString().split('T')[0]} | **Status**: Draft
|
|
148
|
+
|
|
149
|
+
## Summary
|
|
150
|
+
|
|
151
|
+
${description}
|
|
152
|
+
|
|
153
|
+
## User Stories
|
|
154
|
+
|
|
155
|
+
### US1: [Primary User Story]
|
|
156
|
+
|
|
157
|
+
**As a** [user type],
|
|
158
|
+
**I want** [capability],
|
|
159
|
+
**So that** [benefit].
|
|
160
|
+
|
|
161
|
+
**Acceptance Criteria**:
|
|
162
|
+
- [ ] [Criterion 1]
|
|
163
|
+
- [ ] [Criterion 2]
|
|
164
|
+
|
|
165
|
+
## Functional Requirements
|
|
166
|
+
|
|
167
|
+
| ID | Requirement | Priority | Notes |
|
|
168
|
+
|----|-------------|----------|-------|
|
|
169
|
+
| FR-001 | [Description] | P1 | |
|
|
170
|
+
|
|
171
|
+
## Success Criteria
|
|
172
|
+
|
|
173
|
+
| ID | Metric | Target | Measurement |
|
|
174
|
+
|----|--------|--------|-------------|
|
|
175
|
+
| SC-001 | [Metric] | [Target] | [How to measure] |
|
|
176
|
+
|
|
177
|
+
## Assumptions
|
|
178
|
+
|
|
179
|
+
- [Assumption 1]
|
|
180
|
+
|
|
181
|
+
## Out of Scope
|
|
182
|
+
|
|
183
|
+
- [Exclusion 1]
|
|
184
|
+
|
|
185
|
+
---
|
|
186
|
+
|
|
187
|
+
*Generated by speckit*
|
|
188
|
+
`;
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Check if git repository exists
|
|
192
|
+
*/
|
|
193
|
+
async function isGitRepo(path) {
|
|
194
|
+
return exists(join(path, '.git'));
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Resolve the default branch name from the remote's HEAD reference.
|
|
198
|
+
* Falls back to 'develop' if the symbolic-ref cannot be read (e.g. shallow clone, detached HEAD).
|
|
199
|
+
*/
|
|
200
|
+
export async function getDefaultBranch(git) {
|
|
201
|
+
try {
|
|
202
|
+
const result = await git.raw(['symbolic-ref', 'refs/remotes/origin/HEAD']);
|
|
203
|
+
const branch = result.trim().replace('refs/remotes/origin/', '');
|
|
204
|
+
if (branch)
|
|
205
|
+
return branch;
|
|
206
|
+
}
|
|
207
|
+
catch {
|
|
208
|
+
// Fallback — symbolic-ref not available
|
|
209
|
+
}
|
|
210
|
+
return 'develop';
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Create a new feature branch and initialize the spec directory with template files.
|
|
214
|
+
* Ported from speckit MCP create_feature tool.
|
|
215
|
+
*/
|
|
216
|
+
export async function createFeature(input) {
|
|
217
|
+
const workDir = input.cwd || process.cwd();
|
|
218
|
+
// Find repo root
|
|
219
|
+
const repoRoot = await findRepoRoot(workDir);
|
|
220
|
+
if (!repoRoot) {
|
|
221
|
+
return {
|
|
222
|
+
success: false,
|
|
223
|
+
branch_name: '',
|
|
224
|
+
feature_num: '',
|
|
225
|
+
spec_file: '',
|
|
226
|
+
feature_dir: '',
|
|
227
|
+
git_branch_created: false,
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
// Load branch configuration
|
|
231
|
+
const branchConfig = await loadBranchConfig(repoRoot);
|
|
232
|
+
const specsDir = await resolveSpecsPath(workDir) || join(repoRoot, 'specs');
|
|
233
|
+
// Determine feature number
|
|
234
|
+
const featureNumInt = input.number ?? parseInt(await getNextFeatureNumber(specsDir), 10);
|
|
235
|
+
const featureNum = branchConfig.numberPadding > 0
|
|
236
|
+
? String(featureNumInt).padStart(branchConfig.numberPadding, '0')
|
|
237
|
+
: String(featureNumInt);
|
|
238
|
+
// Validate number range
|
|
239
|
+
if (featureNumInt > 999) {
|
|
240
|
+
return {
|
|
241
|
+
success: false,
|
|
242
|
+
branch_name: '',
|
|
243
|
+
feature_num: '',
|
|
244
|
+
spec_file: '',
|
|
245
|
+
feature_dir: '',
|
|
246
|
+
git_branch_created: false,
|
|
247
|
+
};
|
|
248
|
+
}
|
|
249
|
+
// Create branch name using configured pattern
|
|
250
|
+
const branchName = input.short_name
|
|
251
|
+
? `${featureNum}-${input.short_name}`
|
|
252
|
+
: buildBranchNameFromPattern(branchConfig, featureNumInt, input.description);
|
|
253
|
+
// Validate branch name
|
|
254
|
+
if (!FEATURE_NAME_PATTERN.test(branchName)) {
|
|
255
|
+
return {
|
|
256
|
+
success: false,
|
|
257
|
+
branch_name: branchName,
|
|
258
|
+
feature_num: featureNum,
|
|
259
|
+
spec_file: '',
|
|
260
|
+
feature_dir: '',
|
|
261
|
+
git_branch_created: false,
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
// Create feature directory (idempotent — succeed if it already exists for resume)
|
|
265
|
+
const featureDir = join(specsDir, branchName);
|
|
266
|
+
if (await exists(featureDir)) {
|
|
267
|
+
// Feature dir already exists — this is a resume/requeue.
|
|
268
|
+
// Ensure we're on the right branch and pull latest from remote.
|
|
269
|
+
let gitBranchCreated = false;
|
|
270
|
+
if (await isGitRepo(repoRoot)) {
|
|
271
|
+
const git = simpleGit(repoRoot);
|
|
272
|
+
try {
|
|
273
|
+
await git.fetch(['--all', '--prune']);
|
|
274
|
+
}
|
|
275
|
+
catch (err) {
|
|
276
|
+
console.warn(`[createFeature] git fetch failed, continuing with possibly stale refs: ${err}`);
|
|
277
|
+
}
|
|
278
|
+
const branches = await git.branchLocal();
|
|
279
|
+
if (branches.all.includes(branchName)) {
|
|
280
|
+
await git.checkout(branchName);
|
|
281
|
+
try {
|
|
282
|
+
await git.pull('origin', branchName);
|
|
283
|
+
}
|
|
284
|
+
catch {
|
|
285
|
+
// Continue even if pull fails
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
else {
|
|
289
|
+
// Local branch missing but dir exists — check out from remote
|
|
290
|
+
const allBranches = await git.branch(['-a']);
|
|
291
|
+
const remoteBranchExists = allBranches.all.some((b) => b === `remotes/origin/${branchName}` ||
|
|
292
|
+
b === `origin/${branchName}`);
|
|
293
|
+
if (remoteBranchExists) {
|
|
294
|
+
await git.checkout(['-b', branchName, `origin/${branchName}`]);
|
|
295
|
+
}
|
|
296
|
+
else {
|
|
297
|
+
// Branch doesn't exist anywhere — create it from default branch HEAD
|
|
298
|
+
const defaultBranch = await getDefaultBranch(git);
|
|
299
|
+
await git.checkout(defaultBranch);
|
|
300
|
+
await git.reset(['--hard', `origin/${defaultBranch}`]);
|
|
301
|
+
await git.checkoutLocalBranch(branchName);
|
|
302
|
+
gitBranchCreated = true;
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
// Verify we're actually on the expected branch
|
|
306
|
+
const currentBranch = (await git.revparse(['--abbrev-ref', 'HEAD'])).trim();
|
|
307
|
+
if (currentBranch !== branchName) {
|
|
308
|
+
return {
|
|
309
|
+
success: false,
|
|
310
|
+
branch_name: branchName,
|
|
311
|
+
feature_num: featureNum,
|
|
312
|
+
spec_file: '',
|
|
313
|
+
feature_dir: featureDir,
|
|
314
|
+
git_branch_created: false,
|
|
315
|
+
error: `Branch checkout failed: expected "${branchName}" but on "${currentBranch}"`,
|
|
316
|
+
};
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
const specFile = join(featureDir, 'spec.md');
|
|
320
|
+
return {
|
|
321
|
+
success: true,
|
|
322
|
+
branch_name: branchName,
|
|
323
|
+
feature_num: featureNum,
|
|
324
|
+
spec_file: (await exists(specFile)) ? specFile : '',
|
|
325
|
+
feature_dir: featureDir,
|
|
326
|
+
git_branch_created: gitBranchCreated,
|
|
327
|
+
};
|
|
328
|
+
}
|
|
329
|
+
await mkdir(featureDir);
|
|
330
|
+
await mkdir(join(featureDir, 'checklists'));
|
|
331
|
+
await mkdir(join(featureDir, 'contracts'));
|
|
332
|
+
// Create git branch if in a git repo
|
|
333
|
+
let gitBranchCreated = false;
|
|
334
|
+
let branchedFromEpic = false;
|
|
335
|
+
let baseCommit;
|
|
336
|
+
if (await isGitRepo(repoRoot)) {
|
|
337
|
+
const git = simpleGit(repoRoot);
|
|
338
|
+
const branches = await git.branchLocal();
|
|
339
|
+
if (!branches.all.includes(branchName)) {
|
|
340
|
+
// Fetch remote refs so we can detect existing remote branches
|
|
341
|
+
try {
|
|
342
|
+
await git.fetch(['--all', '--prune']);
|
|
343
|
+
}
|
|
344
|
+
catch (err) {
|
|
345
|
+
console.warn(`[createFeature] git fetch failed, continuing with possibly stale refs: ${err}`);
|
|
346
|
+
}
|
|
347
|
+
// Check if the branch already exists on remote (resume in fresh workspace)
|
|
348
|
+
const allBranches = await git.branch(['-a']);
|
|
349
|
+
const remoteBranchExists = allBranches.all.some((b) => b === `remotes/origin/${branchName}` ||
|
|
350
|
+
b === `origin/${branchName}`);
|
|
351
|
+
if (remoteBranchExists) {
|
|
352
|
+
// Track the existing remote branch to pick up previous commits
|
|
353
|
+
await git.checkout(['-b', branchName, `origin/${branchName}`]);
|
|
354
|
+
}
|
|
355
|
+
else if (input.parent_epic_branch) {
|
|
356
|
+
// Check if the epic branch exists
|
|
357
|
+
const epicBranchExists = allBranches.all.some((b) => b === input.parent_epic_branch ||
|
|
358
|
+
b === `remotes/origin/${input.parent_epic_branch}` ||
|
|
359
|
+
b === `origin/${input.parent_epic_branch}`);
|
|
360
|
+
if (epicBranchExists) {
|
|
361
|
+
const localBranches = await git.branchLocal();
|
|
362
|
+
if (!localBranches.all.includes(input.parent_epic_branch)) {
|
|
363
|
+
await git.checkout(['-b', input.parent_epic_branch, `origin/${input.parent_epic_branch}`]);
|
|
364
|
+
}
|
|
365
|
+
else {
|
|
366
|
+
await git.checkout(input.parent_epic_branch);
|
|
367
|
+
}
|
|
368
|
+
await git.reset(['--hard', `origin/${input.parent_epic_branch}`]);
|
|
369
|
+
baseCommit = (await git.revparse(['HEAD'])).trim();
|
|
370
|
+
await git.checkoutLocalBranch(branchName);
|
|
371
|
+
branchedFromEpic = true;
|
|
372
|
+
}
|
|
373
|
+
else {
|
|
374
|
+
// Epic branch not found — create from current HEAD
|
|
375
|
+
baseCommit = (await git.revparse(['HEAD'])).trim();
|
|
376
|
+
await git.checkoutLocalBranch(branchName);
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
else {
|
|
380
|
+
// Sync to latest default branch before creating feature branch
|
|
381
|
+
// so the new branch forks from the tip of origin/<default>
|
|
382
|
+
const defaultBranch = await getDefaultBranch(git);
|
|
383
|
+
await git.checkout(defaultBranch);
|
|
384
|
+
await git.reset(['--hard', `origin/${defaultBranch}`]);
|
|
385
|
+
baseCommit = (await git.revparse(['HEAD'])).trim();
|
|
386
|
+
await git.checkoutLocalBranch(branchName);
|
|
387
|
+
}
|
|
388
|
+
gitBranchCreated = true;
|
|
389
|
+
}
|
|
390
|
+
else {
|
|
391
|
+
await git.checkout(branchName);
|
|
392
|
+
// Pull latest from remote in case local is behind (resume scenario)
|
|
393
|
+
try {
|
|
394
|
+
await git.pull('origin', branchName);
|
|
395
|
+
}
|
|
396
|
+
catch {
|
|
397
|
+
// Continue even if pull fails (e.g., no upstream set)
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
// Verify we're actually on the expected branch
|
|
401
|
+
const currentBranch = (await git.revparse(['--abbrev-ref', 'HEAD'])).trim();
|
|
402
|
+
if (currentBranch !== branchName) {
|
|
403
|
+
return {
|
|
404
|
+
success: false,
|
|
405
|
+
branch_name: branchName,
|
|
406
|
+
feature_num: featureNum,
|
|
407
|
+
spec_file: '',
|
|
408
|
+
feature_dir: featureDir,
|
|
409
|
+
git_branch_created: false,
|
|
410
|
+
error: `Branch checkout failed: expected "${branchName}" but on "${currentBranch}"`,
|
|
411
|
+
};
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
// Create initial spec.md
|
|
415
|
+
const specFile = join(featureDir, 'spec.md');
|
|
416
|
+
const specContent = createInitialSpecContent(input.description, branchName);
|
|
417
|
+
await writeFile(specFile, specContent);
|
|
418
|
+
return {
|
|
419
|
+
success: true,
|
|
420
|
+
branch_name: branchName,
|
|
421
|
+
feature_num: featureNum,
|
|
422
|
+
spec_file: specFile,
|
|
423
|
+
feature_dir: featureDir,
|
|
424
|
+
git_branch_created: gitBranchCreated,
|
|
425
|
+
branched_from_epic: branchedFromEpic,
|
|
426
|
+
...(branchedFromEpic && { parent_epic_branch: input.parent_epic_branch }),
|
|
427
|
+
...(baseCommit && { base_commit: baseCommit }),
|
|
428
|
+
};
|
|
429
|
+
}
|
|
430
|
+
//# sourceMappingURL=feature.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feature.js","sourceRoot":"","sources":["../../../../../src/actions/builtin/speckit/lib/feature.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Read file contents as string
|
|
3
|
+
*/
|
|
4
|
+
export declare function readFile(path: string): Promise<string>;
|
|
5
|
+
/**
|
|
6
|
+
* Write string content to file, creating parent directories if needed
|
|
7
|
+
*/
|
|
8
|
+
export declare function writeFile(path: string, content: string): Promise<void>;
|
|
9
|
+
/**
|
|
10
|
+
* Check if a file or directory exists
|
|
11
|
+
*/
|
|
12
|
+
export declare function exists(path: string): Promise<boolean>;
|
|
13
|
+
/**
|
|
14
|
+
* Check if path is a directory
|
|
15
|
+
*/
|
|
16
|
+
export declare function isDirectory(path: string): Promise<boolean>;
|
|
17
|
+
/**
|
|
18
|
+
* Check if path is a file
|
|
19
|
+
*/
|
|
20
|
+
export declare function isFile(path: string): Promise<boolean>;
|
|
21
|
+
/**
|
|
22
|
+
* Create directory and all parent directories if they don't exist
|
|
23
|
+
*/
|
|
24
|
+
export declare function mkdir(path: string): Promise<void>;
|
|
25
|
+
/**
|
|
26
|
+
* Copy file from source to destination
|
|
27
|
+
*/
|
|
28
|
+
export declare function copyFile(src: string, dest: string): Promise<void>;
|
|
29
|
+
/**
|
|
30
|
+
* List directory contents
|
|
31
|
+
*/
|
|
32
|
+
export declare function readDir(path: string): Promise<string[]>;
|
|
33
|
+
/**
|
|
34
|
+
* Find the repository root by looking for .git directory or specs/ folder
|
|
35
|
+
*/
|
|
36
|
+
export declare function findRepoRoot(startPath: string): Promise<string | null>;
|
|
37
|
+
/**
|
|
38
|
+
* Resolve the specs directory path
|
|
39
|
+
* Checks for configured path in autodev.json, otherwise defaults to 'specs'
|
|
40
|
+
*/
|
|
41
|
+
export declare function resolveSpecsPath(workDir: string): Promise<string | null>;
|
|
42
|
+
/**
|
|
43
|
+
* Resolve the templates directory path
|
|
44
|
+
* Checks for configured path in autodev.json, otherwise defaults to '.specify/templates'
|
|
45
|
+
*/
|
|
46
|
+
export declare function resolveTemplatesPath(workDir: string): Promise<string | null>;
|
|
47
|
+
/**
|
|
48
|
+
* Default file names configuration
|
|
49
|
+
*/
|
|
50
|
+
export interface FilesConfig {
|
|
51
|
+
spec: string;
|
|
52
|
+
plan: string;
|
|
53
|
+
tasks: string;
|
|
54
|
+
clarifications: string;
|
|
55
|
+
research: string;
|
|
56
|
+
dataModel: string;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Get files configuration from autodev.json or use defaults
|
|
60
|
+
*/
|
|
61
|
+
export declare function getFilesConfig(repoRoot: string): Promise<FilesConfig>;
|
|
62
|
+
//# sourceMappingURL=fs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../../../../../src/actions/builtin/speckit/lib/fs.ts"],"names":[],"mappings":"AAOA;;GAEG;AACH,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAE5D;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAG5E;AAED;;GAEG;AACH,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAO3D;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOhE;AAED;;GAEG;AACH,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAO3D;AAED;;GAEG;AACH,wBAAsB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEvD;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGvE;AAED;;GAEG;AACH,wBAAsB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAM7D;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAiB5E;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAmB9E;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAmBlF;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CA+B3E"}
|