@bhargavvc/sdd-cc 1.35.0 → 1.42.3
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/README.ja-JP.md +54 -52
- package/README.ko-KR.md +47 -45
- package/README.md +86 -733
- package/README.pt-BR.md +14 -12
- package/README.zh-CN.md +31 -29
- package/agents/sdd-ai-researcher.md +2 -2
- package/agents/sdd-code-fixer.md +169 -17
- package/agents/sdd-code-reviewer.md +40 -8
- package/agents/sdd-codebase-mapper.md +89 -6
- package/agents/sdd-debug-session-manager.md +314 -0
- package/agents/sdd-debugger.md +147 -80
- package/agents/sdd-doc-classifier.md +168 -0
- package/agents/sdd-doc-synthesizer.md +204 -0
- package/agents/sdd-doc-verifier.md +20 -4
- package/agents/sdd-doc-writer.md +22 -9
- package/agents/sdd-domain-researcher.md +2 -2
- package/agents/sdd-eval-auditor.md +30 -3
- package/agents/sdd-eval-planner.md +2 -2
- package/agents/sdd-executor.md +203 -43
- package/agents/sdd-framework-selector.md +1 -1
- package/agents/sdd-integration-checker.md +30 -3
- package/agents/sdd-intel-updater.md +51 -23
- package/agents/sdd-nyquist-auditor.md +31 -4
- package/agents/sdd-pattern-mapper.md +335 -0
- package/agents/sdd-phase-researcher.md +195 -32
- package/agents/sdd-plan-checker.md +135 -24
- package/agents/sdd-planner.md +190 -205
- package/agents/sdd-project-researcher.md +7 -7
- package/agents/sdd-research-synthesizer.md +6 -6
- package/agents/sdd-roadmapper.md +19 -10
- package/agents/sdd-security-auditor.md +33 -6
- package/agents/sdd-ui-auditor.md +23 -7
- package/agents/sdd-ui-checker.md +16 -7
- package/agents/sdd-ui-researcher.md +8 -8
- package/agents/sdd-verifier.md +124 -27
- package/bin/install.js +5016 -372
- package/bin/sdd-sdk.js +37 -0
- package/commands/sdd/add-tests.md +5 -4
- package/commands/sdd/ai-integration-phase.md +4 -3
- package/commands/sdd/audit-fix.md +2 -1
- package/commands/sdd/audit-milestone.md +3 -2
- package/commands/sdd/autonomous.md +3 -3
- package/commands/sdd/capture.md +62 -0
- package/commands/sdd/cleanup.md +2 -1
- package/commands/sdd/code-review.md +8 -4
- package/commands/sdd/complete-milestone.md +15 -8
- package/commands/sdd/config.md +58 -0
- package/commands/sdd/debug.md +21 -155
- package/commands/sdd/discuss-phase.md +18 -11
- package/commands/sdd/docs-update.md +3 -2
- package/commands/sdd/eval-review.md +4 -3
- package/commands/sdd/execute-phase.md +5 -4
- package/commands/sdd/explore.md +3 -3
- package/commands/sdd/extract-learnings.md +23 -0
- package/commands/sdd/fast.md +4 -3
- package/commands/sdd/forensics.md +3 -2
- package/commands/sdd/graphify.md +199 -0
- package/commands/sdd/health.md +12 -3
- package/commands/sdd/help.md +1 -1
- package/commands/sdd/import.md +10 -5
- package/commands/sdd/inbox.md +39 -0
- package/commands/sdd/ingest-docs.md +42 -0
- package/commands/sdd/manager.md +8 -3
- package/commands/sdd/map-codebase.md +18 -6
- package/commands/sdd/milestone-summary.md +1 -1
- package/commands/sdd/mvp-phase.md +45 -0
- package/commands/sdd/new-milestone.md +4 -3
- package/commands/sdd/new-project.md +4 -3
- package/commands/sdd/ns-context.md +23 -0
- package/commands/sdd/ns-ideate.md +24 -0
- package/commands/sdd/ns-manage.md +29 -0
- package/commands/sdd/ns-project.md +22 -0
- package/commands/sdd/ns-review.md +26 -0
- package/commands/sdd/ns-workflow.md +28 -0
- package/commands/sdd/pause-work.md +6 -1
- package/commands/sdd/phase.md +56 -0
- package/commands/sdd/plan-phase.md +15 -5
- package/commands/sdd/plan-review-convergence.md +59 -0
- package/commands/sdd/pr-branch.md +2 -1
- package/commands/sdd/profile-user.md +1 -1
- package/commands/sdd/progress.md +27 -5
- package/commands/sdd/quick.md +128 -3
- package/commands/sdd/resume-work.md +2 -12
- package/commands/sdd/review-backlog.md +3 -2
- package/commands/sdd/review.md +3 -2
- package/commands/sdd/secure-phase.md +3 -2
- package/commands/sdd/settings.md +2 -9
- package/commands/sdd/ship.md +2 -1
- package/commands/sdd/sketch.md +60 -0
- package/commands/sdd/spec-phase.md +63 -0
- package/commands/sdd/spike.md +57 -0
- package/commands/sdd/stats.md +2 -1
- package/commands/sdd/surface.md +129 -0
- package/commands/sdd/thread.md +8 -111
- package/commands/sdd/ui-phase.md +3 -2
- package/commands/sdd/ui-review.md +3 -2
- package/commands/sdd/ultraplan-phase.md +34 -0
- package/commands/sdd/undo.md +2 -1
- package/commands/sdd/update.md +21 -10
- package/commands/sdd/validate-phase.md +3 -2
- package/commands/sdd/verify-work.md +5 -4
- package/commands/sdd/workspace.md +52 -0
- package/commands/sdd/workstreams.md +12 -11
- package/hooks/dist/sdd-check-update-worker.js +116 -0
- package/hooks/dist/sdd-check-update.js +13 -88
- package/hooks/dist/sdd-context-monitor.js +28 -1
- package/hooks/dist/sdd-phase-boundary.sh +23 -3
- package/hooks/dist/sdd-read-guard.js +21 -2
- package/hooks/dist/sdd-read-injection-scanner.js +152 -0
- package/hooks/dist/sdd-session-state.sh +38 -12
- package/hooks/dist/sdd-statusline.js +324 -28
- package/hooks/dist/sdd-update-banner.js +134 -0
- package/hooks/dist/sdd-validate-commit.sh +15 -5
- package/hooks/dist/sdd-workflow-guard.js +2 -2
- package/hooks/lib/git-cmd.js +150 -0
- package/hooks/sdd-check-update-worker.js +116 -0
- package/hooks/sdd-check-update.js +13 -88
- package/hooks/sdd-context-monitor.js +28 -1
- package/hooks/sdd-phase-boundary.sh +23 -3
- package/hooks/sdd-read-guard.js +21 -2
- package/hooks/sdd-read-injection-scanner.js +152 -0
- package/hooks/sdd-session-state.sh +38 -12
- package/hooks/sdd-statusline.js +324 -28
- package/hooks/sdd-update-banner.js +134 -0
- package/hooks/sdd-validate-commit.sh +15 -5
- package/hooks/sdd-workflow-guard.js +2 -2
- package/package.json +32 -7
- package/scripts/audit-workflow-script-paths.cjs +73 -0
- package/scripts/build-hooks.js +98 -4
- package/scripts/changeset/cli.cjs +269 -0
- package/scripts/changeset/github-release-notes.cjs +198 -0
- package/scripts/changeset/lint.cjs +110 -0
- package/scripts/changeset/new.cjs +137 -0
- package/scripts/changeset/parse.cjs +60 -0
- package/scripts/changeset/render.cjs +34 -0
- package/scripts/changeset/serialize.cjs +74 -0
- package/scripts/command-contract-helpers.cjs +61 -0
- package/scripts/diff-touches-shipped-paths.cjs +147 -0
- package/scripts/fix-slash-commands.cjs +106 -0
- package/scripts/gen-inventory-manifest.cjs +109 -0
- package/scripts/lint-command-contract.cjs +108 -0
- package/scripts/lint-descriptions.cjs +83 -0
- package/scripts/lint-no-source-grep-extras.cjs +81 -0
- package/scripts/lint-no-source-grep.cjs +174 -0
- package/scripts/lint-shell-command-projection-drift.cjs +57 -0
- package/scripts/lint-skill-deps.cjs +180 -0
- package/scripts/pr-template-policy.cjs +169 -0
- package/scripts/prompt-injection-scan.sh +2 -0
- package/scripts/rebrand-gsd-to-sdd.sh +4 -3
- package/scripts/strip-prose-atrefs.cjs +106 -0
- package/scripts/verify-tarball-sdk-dist.sh +69 -0
- package/sdd/bin/check-latest-version.cjs +104 -0
- package/sdd/bin/lib/active-workstream-store.cjs +85 -0
- package/sdd/bin/lib/adr-parser.cjs +394 -0
- package/sdd/bin/lib/artifacts.cjs +53 -0
- package/sdd/bin/lib/audit.cjs +755 -0
- package/sdd/bin/lib/cjs-command-router-adapter.cjs +39 -0
- package/sdd/bin/lib/clusters.cjs +135 -0
- package/sdd/bin/lib/command-aliases.generated.cjs +838 -0
- package/sdd/bin/lib/commands.cjs +108 -98
- package/sdd/bin/lib/config-schema.cjs +135 -0
- package/sdd/bin/lib/config.cjs +253 -68
- package/sdd/bin/lib/context-utilization.cjs +47 -0
- package/sdd/bin/lib/core.cjs +997 -607
- package/sdd/bin/lib/decisions.cjs +48 -0
- package/sdd/bin/lib/docs.cjs +36 -33
- package/sdd/bin/lib/drift.cjs +379 -0
- package/sdd/bin/lib/fallow-runner.cjs +109 -0
- package/sdd/bin/lib/frontmatter.cjs +19 -11
- package/sdd/bin/lib/gap-checker.cjs +197 -0
- package/sdd/bin/lib/graphify.cjs +577 -0
- package/sdd/bin/lib/init-command-router.cjs +70 -0
- package/sdd/bin/lib/init.cjs +603 -102
- package/sdd/bin/lib/install-profiles.cjs +572 -0
- package/sdd/bin/lib/installer-migration-authoring.cjs +117 -0
- package/sdd/bin/lib/installer-migration-report.cjs +328 -0
- package/sdd/bin/lib/installer-migrations/000-first-time-baseline.cjs +220 -0
- package/sdd/bin/lib/installer-migrations/001-legacy-orphan-files.cjs +41 -0
- package/sdd/bin/lib/installer-migrations/002-codex-legacy-hooks-json.cjs +80 -0
- package/sdd/bin/lib/installer-migrations.cjs +703 -0
- package/sdd/bin/lib/intel.cjs +35 -52
- package/sdd/bin/lib/learnings.cjs +2 -1
- package/sdd/bin/lib/milestone.cjs +313 -283
- package/sdd/bin/lib/model-catalog.cjs +136 -0
- package/sdd/bin/lib/model-profiles.cjs +25 -70
- package/sdd/bin/lib/phase-command-router.cjs +96 -0
- package/sdd/bin/lib/phase.cjs +556 -102
- package/sdd/bin/lib/phases-command-router.cjs +39 -0
- package/sdd/bin/lib/plan-scan.cjs +138 -0
- package/sdd/bin/lib/planning-workspace.cjs +361 -0
- package/sdd/bin/lib/profile-output.cjs +109 -43
- package/sdd/bin/lib/profile-pipeline.cjs +1 -1
- package/sdd/bin/lib/review-reviewer-selection.cjs +125 -0
- package/sdd/bin/lib/roadmap-command-router.cjs +23 -0
- package/sdd/bin/lib/roadmap.cjs +278 -17
- package/sdd/bin/lib/runtime-homes.cjs +178 -0
- package/sdd/bin/lib/sdd2-import.cjs +3 -3
- package/sdd/bin/lib/secrets.cjs +33 -0
- package/sdd/bin/lib/security.cjs +8 -7
- package/sdd/bin/lib/shell-command-projection.cjs +548 -0
- package/sdd/bin/lib/state-command-router.cjs +100 -0
- package/sdd/bin/lib/state-document.cjs +12 -0
- package/sdd/bin/lib/state-document.generated.cjs +127 -0
- package/sdd/bin/lib/state.cjs +720 -218
- package/sdd/bin/lib/surface.cjs +398 -0
- package/sdd/bin/lib/template.cjs +4 -2
- package/sdd/bin/lib/uat.cjs +9 -2
- package/sdd/bin/lib/validate-command-router.cjs +55 -0
- package/sdd/bin/lib/verify-command-router.cjs +34 -0
- package/sdd/bin/lib/verify.cjs +464 -137
- package/sdd/bin/lib/workstream-inventory.cjs +159 -0
- package/sdd/bin/lib/workstream-name-policy.cjs +33 -0
- package/sdd/bin/lib/workstream.cjs +73 -195
- package/sdd/bin/lib/worktree-safety.cjs +563 -0
- package/sdd/bin/sdd-tools.cjs +386 -252
- package/sdd/bin/verify-reapply-patches.cjs +247 -0
- package/sdd/contexts/review.md +1 -0
- package/sdd/references/artifact-types.md +18 -0
- package/sdd/references/autonomous-smart-discuss.md +277 -0
- package/sdd/references/checkpoints.md +36 -0
- package/sdd/references/context-budget.md +85 -49
- package/sdd/references/continuation-format.md +26 -22
- package/sdd/references/debugger-philosophy.md +76 -0
- package/sdd/references/decimal-phase-calculation.md +5 -5
- package/sdd/references/doc-conflict-engine.md +91 -0
- package/sdd/references/domain-probes.md +1 -1
- package/sdd/references/execute-mvp-tdd.md +81 -0
- package/sdd/references/executor-examples.md +110 -0
- package/sdd/references/gate-prompts.md +2 -2
- package/sdd/references/git-integration.md +10 -7
- package/sdd/references/git-planning-commit.md +6 -4
- package/sdd/references/mandatory-initial-read.md +2 -0
- package/sdd/references/model-profiles.md +106 -6
- package/sdd/references/mvp-concepts.md +49 -0
- package/sdd/references/phase-argument-parsing.md +3 -3
- package/sdd/references/planner-antipatterns.md +89 -0
- package/sdd/references/planner-chunked.md +49 -0
- package/sdd/references/planner-human-verify-mode.md +57 -0
- package/sdd/references/planner-mvp-mode.md +53 -0
- package/sdd/references/planner-revision.md +1 -1
- package/sdd/references/planner-source-audit.md +73 -0
- package/sdd/references/planning-config.md +30 -13
- package/sdd/references/project-skills-discovery.md +19 -0
- package/sdd/references/scout-codebase.md +51 -0
- package/sdd/references/skeleton-template.md +48 -0
- package/sdd/references/sketch-interactivity.md +41 -0
- package/sdd/references/sketch-theme-system.md +94 -0
- package/sdd/references/sketch-tooling.md +45 -0
- package/sdd/references/sketch-variant-patterns.md +81 -0
- package/sdd/references/spidr-splitting.md +69 -0
- package/sdd/references/tdd.md +67 -0
- package/sdd/references/thinking-partner.md +1 -1
- package/sdd/references/universal-anti-patterns.md +4 -4
- package/sdd/references/user-story-template.md +58 -0
- package/sdd/references/verification-overrides.md +3 -3
- package/sdd/references/verify-mvp-mode.md +85 -0
- package/sdd/references/workstream-flag.md +11 -11
- package/sdd/references/worktree-path-safety.md +89 -0
- package/sdd/templates/AI-SPEC.md +1 -1
- package/sdd/templates/DEBUG.md +8 -3
- package/sdd/templates/README.md +77 -0
- package/sdd/templates/UAT.md +4 -4
- package/sdd/templates/VALIDATION.md +1 -1
- package/sdd/templates/claude-md.md +5 -5
- package/sdd/templates/config.json +16 -2
- package/sdd/templates/debug-subagent-prompt.md +1 -1
- package/sdd/templates/dev-preferences.md +1 -1
- package/sdd/templates/discovery.md +2 -2
- package/sdd/templates/phase-prompt.md +1 -1
- package/sdd/templates/planner-subagent-prompt.md +3 -3
- package/sdd/templates/project.md +1 -1
- package/sdd/templates/research.md +41 -1
- package/sdd/templates/spec.md +307 -0
- package/sdd/templates/state.md +9 -1
- package/sdd/workflows/add-backlog.md +90 -0
- package/sdd/workflows/add-phase.md +7 -7
- package/sdd/workflows/add-tests.md +12 -12
- package/sdd/workflows/add-todo.md +4 -4
- package/sdd/workflows/ai-integration-phase.md +26 -16
- package/sdd/workflows/analyze-dependencies.md +3 -3
- package/sdd/workflows/audit-fix.md +23 -3
- package/sdd/workflows/audit-milestone.md +37 -20
- package/sdd/workflows/audit-uat.md +3 -3
- package/sdd/workflows/autonomous.md +31 -301
- package/sdd/workflows/check-todos.md +6 -6
- package/sdd/workflows/cleanup.md +1 -1
- package/sdd/workflows/code-review-fix.md +20 -16
- package/sdd/workflows/code-review.md +114 -16
- package/sdd/workflows/complete-milestone.md +68 -15
- package/sdd/workflows/debug.md +231 -0
- package/sdd/workflows/diagnose-issues.md +8 -6
- package/sdd/workflows/discovery-phase.md +3 -3
- package/sdd/workflows/discuss-phase/modes/advisor.md +175 -0
- package/sdd/workflows/discuss-phase/modes/all.md +28 -0
- package/sdd/workflows/discuss-phase/modes/analyze.md +44 -0
- package/sdd/workflows/discuss-phase/modes/auto.md +56 -0
- package/sdd/workflows/discuss-phase/modes/batch.md +52 -0
- package/sdd/workflows/discuss-phase/modes/chain.md +97 -0
- package/sdd/workflows/discuss-phase/modes/default.md +141 -0
- package/sdd/workflows/discuss-phase/modes/power.md +44 -0
- package/sdd/workflows/discuss-phase/modes/text.md +55 -0
- package/sdd/workflows/discuss-phase/templates/checkpoint.json +18 -0
- package/sdd/workflows/discuss-phase/templates/context.md +136 -0
- package/sdd/workflows/discuss-phase/templates/discussion-log.md +50 -0
- package/sdd/workflows/discuss-phase-assumptions.md +24 -21
- package/sdd/workflows/discuss-phase-power.md +3 -3
- package/sdd/workflows/discuss-phase.md +203 -905
- package/sdd/workflows/do.md +25 -21
- package/sdd/workflows/docs-update.md +23 -17
- package/sdd/workflows/edit-phase.md +294 -0
- package/sdd/workflows/eval-review.md +7 -7
- package/sdd/workflows/execute-phase/steps/codebase-drift-gate.md +81 -0
- package/sdd/workflows/execute-phase/steps/per-plan-worktree-gate.md +94 -0
- package/sdd/workflows/execute-phase/steps/post-merge-gate.md +116 -0
- package/sdd/workflows/execute-phase.md +650 -252
- package/sdd/workflows/execute-plan.md +75 -35
- package/sdd/workflows/explore.md +7 -3
- package/sdd/workflows/extract-learnings.md +242 -0
- package/sdd/workflows/fast.md +5 -5
- package/sdd/workflows/forensics.md +19 -6
- package/sdd/workflows/graduation.md +195 -0
- package/sdd/workflows/health.md +49 -7
- package/sdd/workflows/help.md +323 -149
- package/sdd/workflows/import.md +20 -43
- package/sdd/workflows/inbox.md +5 -5
- package/sdd/workflows/ingest-docs.md +339 -0
- package/sdd/workflows/insert-phase.md +33 -12
- package/sdd/workflows/list-phase-assumptions.md +2 -2
- package/sdd/workflows/list-workspaces.md +2 -2
- package/sdd/workflows/manager.md +38 -11
- package/sdd/workflows/map-codebase.md +87 -23
- package/sdd/workflows/milestone-summary.md +8 -8
- package/sdd/workflows/mvp-phase.md +221 -0
- package/sdd/workflows/new-milestone.md +163 -23
- package/sdd/workflows/new-project.md +254 -53
- package/sdd/workflows/new-workspace.md +8 -8
- package/sdd/workflows/next.md +85 -18
- package/sdd/workflows/note.md +2 -2
- package/sdd/workflows/pause-work.md +13 -9
- package/sdd/workflows/plan-milestone-gaps.md +18 -11
- package/sdd/workflows/plan-phase.md +767 -94
- package/sdd/workflows/plan-review-convergence.md +329 -0
- package/sdd/workflows/plant-seed.md +146 -89
- package/sdd/workflows/pr-branch.md +1 -1
- package/sdd/workflows/profile-user.md +15 -15
- package/sdd/workflows/progress.md +198 -56
- package/sdd/workflows/quick.md +318 -54
- package/{commands/sdd → sdd/workflows}/reapply-patches.md +102 -23
- package/sdd/workflows/remove-phase.md +10 -10
- package/sdd/workflows/remove-workspace.md +21 -6
- package/sdd/workflows/resume-project.md +26 -23
- package/sdd/workflows/review.md +151 -20
- package/sdd/workflows/scan.md +5 -3
- package/sdd/workflows/secure-phase.md +26 -13
- package/sdd/workflows/settings-advanced.md +579 -0
- package/sdd/workflows/settings-integrations.md +281 -0
- package/sdd/workflows/settings.md +202 -23
- package/sdd/workflows/ship.md +131 -16
- package/sdd/workflows/sketch-wrap-up.md +285 -0
- package/sdd/workflows/sketch.md +360 -0
- package/sdd/workflows/spec-phase.md +262 -0
- package/sdd/workflows/spike-wrap-up.md +306 -0
- package/sdd/workflows/spike.md +452 -0
- package/sdd/workflows/stats.md +21 -2
- package/sdd/workflows/sync-skills.md +182 -0
- package/sdd/workflows/thread.md +221 -0
- package/sdd/workflows/transition.md +52 -30
- package/sdd/workflows/ui-phase.md +37 -20
- package/sdd/workflows/ui-review.md +12 -10
- package/sdd/workflows/ultraplan-phase.md +198 -0
- package/sdd/workflows/undo.md +9 -9
- package/sdd/workflows/update.md +187 -17
- package/sdd/workflows/validate-phase.md +12 -10
- package/sdd/workflows/verify-phase.md +112 -27
- package/sdd/workflows/verify-work.md +97 -28
- package/sdk/dist/cli-transport.d.ts +19 -0
- package/sdk/dist/cli-transport.d.ts.map +1 -0
- package/sdk/dist/cli-transport.js +104 -0
- package/sdk/dist/cli-transport.js.map +1 -0
- package/sdk/dist/cli.d.ts +46 -0
- package/sdk/dist/cli.d.ts.map +1 -0
- package/sdk/dist/cli.js +511 -0
- package/sdk/dist/cli.js.map +1 -0
- package/sdk/dist/config.d.ts +84 -0
- package/sdk/dist/config.d.ts.map +1 -0
- package/sdk/dist/config.js +135 -0
- package/sdk/dist/config.js.map +1 -0
- package/sdk/dist/context-engine.d.ts +49 -0
- package/sdk/dist/context-engine.d.ts.map +1 -0
- package/sdk/dist/context-engine.js +142 -0
- package/sdk/dist/context-engine.js.map +1 -0
- package/sdk/dist/context-truncation.d.ts +33 -0
- package/sdk/dist/context-truncation.d.ts.map +1 -0
- package/sdk/dist/context-truncation.js +197 -0
- package/sdk/dist/context-truncation.js.map +1 -0
- package/sdk/dist/errors.d.ts +46 -0
- package/sdk/dist/errors.d.ts.map +1 -0
- package/sdk/dist/errors.js +64 -0
- package/sdk/dist/errors.js.map +1 -0
- package/sdk/dist/event-stream.d.ts +53 -0
- package/sdk/dist/event-stream.d.ts.map +1 -0
- package/sdk/dist/event-stream.js +321 -0
- package/sdk/dist/event-stream.js.map +1 -0
- package/sdk/dist/golden/capture.d.ts +15 -0
- package/sdk/dist/golden/capture.d.ts.map +1 -0
- package/sdk/dist/golden/capture.js +67 -0
- package/sdk/dist/golden/capture.js.map +1 -0
- package/sdk/dist/golden/golden-integration-covered.d.ts +6 -0
- package/sdk/dist/golden/golden-integration-covered.d.ts.map +1 -0
- package/sdk/dist/golden/golden-integration-covered.js +30 -0
- package/sdk/dist/golden/golden-integration-covered.js.map +1 -0
- package/sdk/dist/golden/golden-mutation-covered.d.ts +7 -0
- package/sdk/dist/golden/golden-mutation-covered.d.ts.map +1 -0
- package/sdk/dist/golden/golden-mutation-covered.js +17 -0
- package/sdk/dist/golden/golden-mutation-covered.js.map +1 -0
- package/sdk/dist/golden/golden-policy.d.ts +10 -0
- package/sdk/dist/golden/golden-policy.d.ts.map +1 -0
- package/sdk/dist/golden/golden-policy.js +98 -0
- package/sdk/dist/golden/golden-policy.js.map +1 -0
- package/sdk/dist/golden/init-golden-normalize.d.ts +8 -0
- package/sdk/dist/golden/init-golden-normalize.d.ts.map +1 -0
- package/sdk/dist/golden/init-golden-normalize.js +14 -0
- package/sdk/dist/golden/init-golden-normalize.js.map +1 -0
- package/sdk/dist/golden/read-only-golden-rows.d.ts +20 -0
- package/sdk/dist/golden/read-only-golden-rows.d.ts.map +1 -0
- package/sdk/dist/golden/read-only-golden-rows.js +67 -0
- package/sdk/dist/golden/read-only-golden-rows.js.map +1 -0
- package/sdk/dist/golden/registry-canonical-commands.d.ts +6 -0
- package/sdk/dist/golden/registry-canonical-commands.d.ts.map +1 -0
- package/sdk/dist/golden/registry-canonical-commands.js +30 -0
- package/sdk/dist/golden/registry-canonical-commands.js.map +1 -0
- package/sdk/dist/index.d.ts +125 -0
- package/sdk/dist/index.d.ts.map +1 -0
- package/sdk/dist/index.js +298 -0
- package/sdk/dist/index.js.map +1 -0
- package/sdk/dist/init-runner.d.ts +90 -0
- package/sdk/dist/init-runner.d.ts.map +1 -0
- package/sdk/dist/init-runner.js +613 -0
- package/sdk/dist/init-runner.js.map +1 -0
- package/sdk/dist/logger.d.ts +50 -0
- package/sdk/dist/logger.d.ts.map +1 -0
- package/sdk/dist/logger.js +70 -0
- package/sdk/dist/logger.js.map +1 -0
- package/sdk/dist/model-catalog.d.ts +31 -0
- package/sdk/dist/model-catalog.d.ts.map +1 -0
- package/sdk/dist/model-catalog.js +31 -0
- package/sdk/dist/model-catalog.js.map +1 -0
- package/sdk/dist/phase-prompt.d.ts +72 -0
- package/sdk/dist/phase-prompt.d.ts.map +1 -0
- package/sdk/dist/phase-prompt.js +213 -0
- package/sdk/dist/phase-prompt.js.map +1 -0
- package/sdk/dist/phase-runner.d.ts +145 -0
- package/sdk/dist/phase-runner.d.ts.map +1 -0
- package/sdk/dist/phase-runner.js +1206 -0
- package/sdk/dist/phase-runner.js.map +1 -0
- package/sdk/dist/plan-parser.d.ts +55 -0
- package/sdk/dist/plan-parser.d.ts.map +1 -0
- package/sdk/dist/plan-parser.js +389 -0
- package/sdk/dist/plan-parser.js.map +1 -0
- package/sdk/dist/planning-journal.d.ts +64 -0
- package/sdk/dist/planning-journal.d.ts.map +1 -0
- package/sdk/dist/planning-journal.js +88 -0
- package/sdk/dist/planning-journal.js.map +1 -0
- package/sdk/dist/planning-runtime.d.ts +67 -0
- package/sdk/dist/planning-runtime.d.ts.map +1 -0
- package/sdk/dist/planning-runtime.js +58 -0
- package/sdk/dist/planning-runtime.js.map +1 -0
- package/sdk/dist/prompt-builder.d.ts +44 -0
- package/sdk/dist/prompt-builder.d.ts.map +1 -0
- package/sdk/dist/prompt-builder.js +180 -0
- package/sdk/dist/prompt-builder.js.map +1 -0
- package/sdk/dist/prompt-sanitizer.d.ts +35 -0
- package/sdk/dist/prompt-sanitizer.d.ts.map +1 -0
- package/sdk/dist/prompt-sanitizer.js +101 -0
- package/sdk/dist/prompt-sanitizer.js.map +1 -0
- package/sdk/dist/query/active-workstream-store.d.ts +7 -0
- package/sdk/dist/query/active-workstream-store.d.ts.map +1 -0
- package/sdk/dist/query/active-workstream-store.js +56 -0
- package/sdk/dist/query/active-workstream-store.js.map +1 -0
- package/sdk/dist/query/agent-failure-classifier.d.ts +38 -0
- package/sdk/dist/query/agent-failure-classifier.d.ts.map +1 -0
- package/sdk/dist/query/agent-failure-classifier.js +83 -0
- package/sdk/dist/query/agent-failure-classifier.js.map +1 -0
- package/sdk/dist/query/audit-open.d.ts +46 -0
- package/sdk/dist/query/audit-open.d.ts.map +1 -0
- package/sdk/dist/query/audit-open.js +662 -0
- package/sdk/dist/query/audit-open.js.map +1 -0
- package/sdk/dist/query/check-auto-mode.d.ts +13 -0
- package/sdk/dist/query/check-auto-mode.d.ts.map +1 -0
- package/sdk/dist/query/check-auto-mode.js +40 -0
- package/sdk/dist/query/check-auto-mode.js.map +1 -0
- package/sdk/dist/query/check-completion.d.ts +10 -0
- package/sdk/dist/query/check-completion.d.ts.map +1 -0
- package/sdk/dist/query/check-completion.js +157 -0
- package/sdk/dist/query/check-completion.js.map +1 -0
- package/sdk/dist/query/check-decision-coverage.d.ts +33 -0
- package/sdk/dist/query/check-decision-coverage.d.ts.map +1 -0
- package/sdk/dist/query/check-decision-coverage.js +472 -0
- package/sdk/dist/query/check-decision-coverage.js.map +1 -0
- package/sdk/dist/query/check-gates.d.ts +10 -0
- package/sdk/dist/query/check-gates.d.ts.map +1 -0
- package/sdk/dist/query/check-gates.js +89 -0
- package/sdk/dist/query/check-gates.js.map +1 -0
- package/sdk/dist/query/check-ship-ready.d.ts +10 -0
- package/sdk/dist/query/check-ship-ready.d.ts.map +1 -0
- package/sdk/dist/query/check-ship-ready.js +93 -0
- package/sdk/dist/query/check-ship-ready.js.map +1 -0
- package/sdk/dist/query/check-verification-status.d.ts +10 -0
- package/sdk/dist/query/check-verification-status.d.ts.map +1 -0
- package/sdk/dist/query/check-verification-status.js +142 -0
- package/sdk/dist/query/check-verification-status.js.map +1 -0
- package/sdk/dist/query/command-aliases.generated.d.ts +31 -0
- package/sdk/dist/query/command-aliases.generated.d.ts.map +1 -0
- package/sdk/dist/query/command-aliases.generated.js +135 -0
- package/sdk/dist/query/command-aliases.generated.js.map +1 -0
- package/sdk/dist/query/command-catalog.d.ts +9 -0
- package/sdk/dist/query/command-catalog.d.ts.map +1 -0
- package/sdk/dist/query/command-catalog.js +17 -0
- package/sdk/dist/query/command-catalog.js.map +1 -0
- package/sdk/dist/query/command-definition.d.ts +19 -0
- package/sdk/dist/query/command-definition.d.ts.map +1 -0
- package/sdk/dist/query/command-definition.js +44 -0
- package/sdk/dist/query/command-definition.js.map +1 -0
- package/sdk/dist/query/command-family-handlers.d.ts +3 -0
- package/sdk/dist/query/command-family-handlers.d.ts.map +1 -0
- package/sdk/dist/query/command-family-handlers.js +94 -0
- package/sdk/dist/query/command-family-handlers.js.map +1 -0
- package/sdk/dist/query/command-manifest.d.ts +2 -0
- package/sdk/dist/query/command-manifest.d.ts.map +1 -0
- package/sdk/dist/query/command-manifest.init.d.ts +6 -0
- package/sdk/dist/query/command-manifest.init.d.ts.map +1 -0
- package/sdk/dist/query/command-manifest.init.js +23 -0
- package/sdk/dist/query/command-manifest.init.js.map +1 -0
- package/sdk/dist/query/command-manifest.js +17 -0
- package/sdk/dist/query/command-manifest.js.map +1 -0
- package/sdk/dist/query/command-manifest.non-family.d.ts +9 -0
- package/sdk/dist/query/command-manifest.non-family.d.ts.map +1 -0
- package/sdk/dist/query/command-manifest.non-family.js +59 -0
- package/sdk/dist/query/command-manifest.non-family.js.map +1 -0
- package/sdk/dist/query/command-manifest.phase.d.ts +6 -0
- package/sdk/dist/query/command-manifest.phase.d.ts.map +1 -0
- package/sdk/dist/query/command-manifest.phase.js +15 -0
- package/sdk/dist/query/command-manifest.phase.js.map +1 -0
- package/sdk/dist/query/command-manifest.phases.d.ts +7 -0
- package/sdk/dist/query/command-manifest.phases.d.ts.map +1 -0
- package/sdk/dist/query/command-manifest.phases.js +10 -0
- package/sdk/dist/query/command-manifest.phases.js.map +1 -0
- package/sdk/dist/query/command-manifest.roadmap.d.ts +6 -0
- package/sdk/dist/query/command-manifest.roadmap.d.ts.map +1 -0
- package/sdk/dist/query/command-manifest.roadmap.js +10 -0
- package/sdk/dist/query/command-manifest.roadmap.js.map +1 -0
- package/sdk/dist/query/command-manifest.state.d.ts +9 -0
- package/sdk/dist/query/command-manifest.state.d.ts.map +1 -0
- package/sdk/dist/query/command-manifest.state.js +30 -0
- package/sdk/dist/query/command-manifest.state.js.map +1 -0
- package/sdk/dist/query/command-manifest.types.d.ts +12 -0
- package/sdk/dist/query/command-manifest.types.d.ts.map +1 -0
- package/sdk/dist/query/command-manifest.types.js +2 -0
- package/sdk/dist/query/command-manifest.types.js.map +1 -0
- package/sdk/dist/query/command-manifest.validate.d.ts +6 -0
- package/sdk/dist/query/command-manifest.validate.d.ts.map +1 -0
- package/sdk/dist/query/command-manifest.validate.js +10 -0
- package/sdk/dist/query/command-manifest.validate.js.map +1 -0
- package/sdk/dist/query/command-manifest.verify.d.ts +6 -0
- package/sdk/dist/query/command-manifest.verify.d.ts.map +1 -0
- package/sdk/dist/query/command-manifest.verify.js +14 -0
- package/sdk/dist/query/command-manifest.verify.js.map +1 -0
- package/sdk/dist/query/command-static-catalog-domain.d.ts +3 -0
- package/sdk/dist/query/command-static-catalog-domain.d.ts.map +1 -0
- package/sdk/dist/query/command-static-catalog-domain.js +116 -0
- package/sdk/dist/query/command-static-catalog-domain.js.map +1 -0
- package/sdk/dist/query/command-static-catalog-foundation.d.ts +7 -0
- package/sdk/dist/query/command-static-catalog-foundation.d.ts.map +1 -0
- package/sdk/dist/query/command-static-catalog-foundation.js +98 -0
- package/sdk/dist/query/command-static-catalog-foundation.js.map +1 -0
- package/sdk/dist/query/command-topology.d.ts +32 -0
- package/sdk/dist/query/command-topology.d.ts.map +1 -0
- package/sdk/dist/query/command-topology.js +66 -0
- package/sdk/dist/query/command-topology.js.map +1 -0
- package/sdk/dist/query/commands-list.d.ts +14 -0
- package/sdk/dist/query/commands-list.d.ts.map +1 -0
- package/sdk/dist/query/commands-list.js +18 -0
- package/sdk/dist/query/commands-list.js.map +1 -0
- package/sdk/dist/query/commit.d.ts +79 -0
- package/sdk/dist/query/commit.d.ts.map +1 -0
- package/sdk/dist/query/commit.js +340 -0
- package/sdk/dist/query/commit.js.map +1 -0
- package/sdk/dist/query/config-gates.d.ts +12 -0
- package/sdk/dist/query/config-gates.d.ts.map +1 -0
- package/sdk/dist/query/config-gates.js +66 -0
- package/sdk/dist/query/config-gates.js.map +1 -0
- package/sdk/dist/query/config-mutation.d.ts +86 -0
- package/sdk/dist/query/config-mutation.d.ts.map +1 -0
- package/sdk/dist/query/config-mutation.js +518 -0
- package/sdk/dist/query/config-mutation.js.map +1 -0
- package/sdk/dist/query/config-query.d.ts +57 -0
- package/sdk/dist/query/config-query.d.ts.map +1 -0
- package/sdk/dist/query/config-query.js +208 -0
- package/sdk/dist/query/config-query.js.map +1 -0
- package/sdk/dist/query/config-schema.d.ts +36 -0
- package/sdk/dist/query/config-schema.d.ts.map +1 -0
- package/sdk/dist/query/config-schema.js +147 -0
- package/sdk/dist/query/config-schema.js.map +1 -0
- package/sdk/dist/query/decisions.d.ts +58 -0
- package/sdk/dist/query/decisions.d.ts.map +1 -0
- package/sdk/dist/query/decisions.js +161 -0
- package/sdk/dist/query/decisions.js.map +1 -0
- package/sdk/dist/query/detect-custom-files.d.ts +11 -0
- package/sdk/dist/query/detect-custom-files.d.ts.map +1 -0
- package/sdk/dist/query/detect-custom-files.js +89 -0
- package/sdk/dist/query/detect-custom-files.js.map +1 -0
- package/sdk/dist/query/detect-phase-type.d.ts +9 -0
- package/sdk/dist/query/detect-phase-type.d.ts.map +1 -0
- package/sdk/dist/query/detect-phase-type.js +124 -0
- package/sdk/dist/query/detect-phase-type.js.map +1 -0
- package/sdk/dist/query/docs-init.d.ts +26 -0
- package/sdk/dist/query/docs-init.d.ts.map +1 -0
- package/sdk/dist/query/docs-init.js +231 -0
- package/sdk/dist/query/docs-init.js.map +1 -0
- package/sdk/dist/query/fallow-audit.d.ts +44 -0
- package/sdk/dist/query/fallow-audit.d.ts.map +1 -0
- package/sdk/dist/query/fallow-audit.js +44 -0
- package/sdk/dist/query/fallow-audit.js.map +1 -0
- package/sdk/dist/query/frontmatter-mutation.d.ts +77 -0
- package/sdk/dist/query/frontmatter-mutation.d.ts.map +1 -0
- package/sdk/dist/query/frontmatter-mutation.js +317 -0
- package/sdk/dist/query/frontmatter-mutation.js.map +1 -0
- package/sdk/dist/query/frontmatter.d.ts +93 -0
- package/sdk/dist/query/frontmatter.d.ts.map +1 -0
- package/sdk/dist/query/frontmatter.js +365 -0
- package/sdk/dist/query/frontmatter.js.map +1 -0
- package/sdk/dist/query/helpers.d.ts +191 -0
- package/sdk/dist/query/helpers.d.ts.map +1 -0
- package/sdk/dist/query/helpers.js +613 -0
- package/sdk/dist/query/helpers.js.map +1 -0
- package/sdk/dist/query/index.d.ts +8 -0
- package/sdk/dist/query/index.d.ts.map +1 -0
- package/sdk/dist/query/index.js +6 -0
- package/sdk/dist/query/index.js.map +1 -0
- package/sdk/dist/query/init-complex.d.ts +47 -0
- package/sdk/dist/query/init-complex.d.ts.map +1 -0
- package/sdk/dist/query/init-complex.js +718 -0
- package/sdk/dist/query/init-complex.js.map +1 -0
- package/sdk/dist/query/init.d.ts +106 -0
- package/sdk/dist/query/init.d.ts.map +1 -0
- package/sdk/dist/query/init.js +1159 -0
- package/sdk/dist/query/init.js.map +1 -0
- package/sdk/dist/query/intel.d.ts +43 -0
- package/sdk/dist/query/intel.d.ts.map +1 -0
- package/sdk/dist/query/intel.js +416 -0
- package/sdk/dist/query/intel.js.map +1 -0
- package/sdk/dist/query/mutation-event-decorator.d.ts +5 -0
- package/sdk/dist/query/mutation-event-decorator.d.ts.map +1 -0
- package/sdk/dist/query/mutation-event-decorator.js +28 -0
- package/sdk/dist/query/mutation-event-decorator.js.map +1 -0
- package/sdk/dist/query/mutation-event-mapper.d.ts +4 -0
- package/sdk/dist/query/mutation-event-mapper.d.ts.map +1 -0
- package/sdk/dist/query/mutation-event-mapper.js +70 -0
- package/sdk/dist/query/mutation-event-mapper.js.map +1 -0
- package/sdk/dist/query/mvp.d.ts +113 -0
- package/sdk/dist/query/mvp.d.ts.map +1 -0
- package/sdk/dist/query/mvp.js +225 -0
- package/sdk/dist/query/mvp.js.map +1 -0
- package/sdk/dist/query/phase-filesystem-adapter.d.ts +4 -0
- package/sdk/dist/query/phase-filesystem-adapter.d.ts.map +1 -0
- package/sdk/dist/query/phase-filesystem-adapter.js +33 -0
- package/sdk/dist/query/phase-filesystem-adapter.js.map +1 -0
- package/sdk/dist/query/phase-lifecycle-policy.d.ts +34 -0
- package/sdk/dist/query/phase-lifecycle-policy.d.ts.map +1 -0
- package/sdk/dist/query/phase-lifecycle-policy.js +138 -0
- package/sdk/dist/query/phase-lifecycle-policy.js.map +1 -0
- package/sdk/dist/query/phase-lifecycle.d.ts +116 -0
- package/sdk/dist/query/phase-lifecycle.d.ts.map +1 -0
- package/sdk/dist/query/phase-lifecycle.js +1486 -0
- package/sdk/dist/query/phase-lifecycle.js.map +1 -0
- package/sdk/dist/query/phase-list-queries.d.ts +18 -0
- package/sdk/dist/query/phase-list-queries.d.ts.map +1 -0
- package/sdk/dist/query/phase-list-queries.js +129 -0
- package/sdk/dist/query/phase-list-queries.js.map +1 -0
- package/sdk/dist/query/phase-ready.d.ts +9 -0
- package/sdk/dist/query/phase-ready.d.ts.map +1 -0
- package/sdk/dist/query/phase-ready.js +132 -0
- package/sdk/dist/query/phase-ready.js.map +1 -0
- package/sdk/dist/query/phase-roadmap-mutation.d.ts +13 -0
- package/sdk/dist/query/phase-roadmap-mutation.d.ts.map +1 -0
- package/sdk/dist/query/phase-roadmap-mutation.js +65 -0
- package/sdk/dist/query/phase-roadmap-mutation.js.map +1 -0
- package/sdk/dist/query/phase.d.ts +48 -0
- package/sdk/dist/query/phase.d.ts.map +1 -0
- package/sdk/dist/query/phase.js +451 -0
- package/sdk/dist/query/phase.js.map +1 -0
- package/sdk/dist/query/pipeline.d.ts +53 -0
- package/sdk/dist/query/pipeline.d.ts.map +1 -0
- package/sdk/dist/query/pipeline.js +198 -0
- package/sdk/dist/query/pipeline.js.map +1 -0
- package/sdk/dist/query/plan-scan.d.ts +14 -0
- package/sdk/dist/query/plan-scan.d.ts.map +1 -0
- package/sdk/dist/query/plan-scan.js +70 -0
- package/sdk/dist/query/plan-scan.js.map +1 -0
- package/sdk/dist/query/plan-task-structure.d.ts +9 -0
- package/sdk/dist/query/plan-task-structure.d.ts.map +1 -0
- package/sdk/dist/query/plan-task-structure.js +59 -0
- package/sdk/dist/query/plan-task-structure.js.map +1 -0
- package/sdk/dist/query/profile-extract-messages.d.ts +40 -0
- package/sdk/dist/query/profile-extract-messages.d.ts.map +1 -0
- package/sdk/dist/query/profile-extract-messages.js +195 -0
- package/sdk/dist/query/profile-extract-messages.js.map +1 -0
- package/sdk/dist/query/profile-output.d.ts +11 -0
- package/sdk/dist/query/profile-output.d.ts.map +1 -0
- package/sdk/dist/query/profile-output.js +873 -0
- package/sdk/dist/query/profile-output.js.map +1 -0
- package/sdk/dist/query/profile-questionnaire-data.d.ts +21 -0
- package/sdk/dist/query/profile-questionnaire-data.d.ts.map +1 -0
- package/sdk/dist/query/profile-questionnaire-data.js +171 -0
- package/sdk/dist/query/profile-questionnaire-data.js.map +1 -0
- package/sdk/dist/query/profile-sample.d.ts +22 -0
- package/sdk/dist/query/profile-sample.d.ts.map +1 -0
- package/sdk/dist/query/profile-sample.js +136 -0
- package/sdk/dist/query/profile-sample.js.map +1 -0
- package/sdk/dist/query/profile-scan-sessions.d.ts +49 -0
- package/sdk/dist/query/profile-scan-sessions.d.ts.map +1 -0
- package/sdk/dist/query/profile-scan-sessions.js +137 -0
- package/sdk/dist/query/profile-scan-sessions.js.map +1 -0
- package/sdk/dist/query/profile.d.ts +61 -0
- package/sdk/dist/query/profile.d.ts.map +1 -0
- package/sdk/dist/query/profile.js +307 -0
- package/sdk/dist/query/profile.js.map +1 -0
- package/sdk/dist/query/progress.d.ts +77 -0
- package/sdk/dist/query/progress.d.ts.map +1 -0
- package/sdk/dist/query/progress.js +481 -0
- package/sdk/dist/query/progress.js.map +1 -0
- package/sdk/dist/query/query-cli-adapter.d.ts +8 -0
- package/sdk/dist/query/query-cli-adapter.d.ts.map +1 -0
- package/sdk/dist/query/query-cli-adapter.js +32 -0
- package/sdk/dist/query/query-cli-adapter.js.map +1 -0
- package/sdk/dist/query/query-cli-output.d.ts +9 -0
- package/sdk/dist/query/query-cli-output.d.ts.map +1 -0
- package/sdk/dist/query/query-cli-output.js +28 -0
- package/sdk/dist/query/query-cli-output.js.map +1 -0
- package/sdk/dist/query/query-command-diagnosis.d.ts +6 -0
- package/sdk/dist/query/query-command-diagnosis.d.ts.map +1 -0
- package/sdk/dist/query/query-command-diagnosis.js +6 -0
- package/sdk/dist/query/query-command-diagnosis.js.map +1 -0
- package/sdk/dist/query/query-command-resolution-strategy.d.ts +29 -0
- package/sdk/dist/query/query-command-resolution-strategy.d.ts.map +1 -0
- package/sdk/dist/query/query-command-resolution-strategy.js +103 -0
- package/sdk/dist/query/query-command-resolution-strategy.js.map +1 -0
- package/sdk/dist/query/query-command-semantics.d.ts +7 -0
- package/sdk/dist/query/query-command-semantics.d.ts.map +1 -0
- package/sdk/dist/query/query-command-semantics.js +7 -0
- package/sdk/dist/query/query-command-semantics.js.map +1 -0
- package/sdk/dist/query/query-dispatch-contract.d.ts +21 -0
- package/sdk/dist/query/query-dispatch-contract.d.ts.map +1 -0
- package/sdk/dist/query/query-dispatch-contract.js +2 -0
- package/sdk/dist/query/query-dispatch-contract.js.map +1 -0
- package/sdk/dist/query/query-dispatch-error-mapper.d.ts +6 -0
- package/sdk/dist/query/query-dispatch-error-mapper.d.ts.map +1 -0
- package/sdk/dist/query/query-dispatch-error-mapper.js +6 -0
- package/sdk/dist/query/query-dispatch-error-mapper.js.map +1 -0
- package/sdk/dist/query/query-dispatch-formatting.d.ts +6 -0
- package/sdk/dist/query/query-dispatch-formatting.d.ts.map +1 -0
- package/sdk/dist/query/query-dispatch-formatting.js +6 -0
- package/sdk/dist/query/query-dispatch-formatting.js.map +1 -0
- package/sdk/dist/query/query-dispatch-input-validation.d.ts +6 -0
- package/sdk/dist/query/query-dispatch-input-validation.d.ts.map +1 -0
- package/sdk/dist/query/query-dispatch-input-validation.js +6 -0
- package/sdk/dist/query/query-dispatch-input-validation.js.map +1 -0
- package/sdk/dist/query/query-dispatch-observability.d.ts +2 -0
- package/sdk/dist/query/query-dispatch-observability.d.ts.map +1 -0
- package/sdk/dist/query/query-dispatch-observability.js +7 -0
- package/sdk/dist/query/query-dispatch-observability.js.map +1 -0
- package/sdk/dist/query/query-dispatch-plan.d.ts +6 -0
- package/sdk/dist/query/query-dispatch-plan.d.ts.map +1 -0
- package/sdk/dist/query/query-dispatch-plan.js +6 -0
- package/sdk/dist/query/query-dispatch-plan.js.map +1 -0
- package/sdk/dist/query/query-dispatch-result-builder.d.ts +6 -0
- package/sdk/dist/query/query-dispatch-result-builder.d.ts.map +1 -0
- package/sdk/dist/query/query-dispatch-result-builder.js +6 -0
- package/sdk/dist/query/query-dispatch-result-builder.js.map +1 -0
- package/sdk/dist/query/query-dispatch.d.ts +48 -0
- package/sdk/dist/query/query-dispatch.d.ts.map +1 -0
- package/sdk/dist/query/query-dispatch.js +175 -0
- package/sdk/dist/query/query-dispatch.js.map +1 -0
- package/sdk/dist/query/query-error-details-schema.d.ts +19 -0
- package/sdk/dist/query/query-error-details-schema.d.ts.map +1 -0
- package/sdk/dist/query/query-error-details-schema.js +10 -0
- package/sdk/dist/query/query-error-details-schema.js.map +1 -0
- package/sdk/dist/query/query-error-taxonomy.d.ts +38 -0
- package/sdk/dist/query/query-error-taxonomy.d.ts.map +1 -0
- package/sdk/dist/query/query-error-taxonomy.js +74 -0
- package/sdk/dist/query/query-error-taxonomy.js.map +1 -0
- package/sdk/dist/query/query-fallback-bridge-adapter.d.ts +14 -0
- package/sdk/dist/query/query-fallback-bridge-adapter.d.ts.map +1 -0
- package/sdk/dist/query/query-fallback-bridge-adapter.js +33 -0
- package/sdk/dist/query/query-fallback-bridge-adapter.js.map +1 -0
- package/sdk/dist/query/query-fallback-executor.d.ts +11 -0
- package/sdk/dist/query/query-fallback-executor.d.ts.map +1 -0
- package/sdk/dist/query/query-fallback-executor.js +31 -0
- package/sdk/dist/query/query-fallback-executor.js.map +1 -0
- package/sdk/dist/query/query-fallback-output-classifier.d.ts +6 -0
- package/sdk/dist/query/query-fallback-output-classifier.d.ts.map +1 -0
- package/sdk/dist/query/query-fallback-output-classifier.js +27 -0
- package/sdk/dist/query/query-fallback-output-classifier.js.map +1 -0
- package/sdk/dist/query/query-fallback-policy.d.ts +6 -0
- package/sdk/dist/query/query-fallback-policy.d.ts.map +1 -0
- package/sdk/dist/query/query-fallback-policy.js +7 -0
- package/sdk/dist/query/query-fallback-policy.js.map +1 -0
- package/sdk/dist/query/query-native-dispatch-adapter.d.ts +7 -0
- package/sdk/dist/query/query-native-dispatch-adapter.d.ts.map +1 -0
- package/sdk/dist/query/query-native-dispatch-adapter.js +6 -0
- package/sdk/dist/query/query-native-dispatch-adapter.js.map +1 -0
- package/sdk/dist/query/query-policy-capability.d.ts +10 -0
- package/sdk/dist/query/query-policy-capability.d.ts.map +1 -0
- package/sdk/dist/query/query-policy-capability.js +17 -0
- package/sdk/dist/query/query-policy-capability.js.map +1 -0
- package/sdk/dist/query/query-runtime-context.d.ts +19 -0
- package/sdk/dist/query/query-runtime-context.d.ts.map +1 -0
- package/sdk/dist/query/query-runtime-context.js +31 -0
- package/sdk/dist/query/query-runtime-context.js.map +1 -0
- package/sdk/dist/query/query-unknown-command-hints.d.ts +2 -0
- package/sdk/dist/query/query-unknown-command-hints.d.ts.map +1 -0
- package/sdk/dist/query/query-unknown-command-hints.js +6 -0
- package/sdk/dist/query/query-unknown-command-hints.js.map +1 -0
- package/sdk/dist/query/registry-assembly-descriptor.d.ts +12 -0
- package/sdk/dist/query/registry-assembly-descriptor.d.ts.map +1 -0
- package/sdk/dist/query/registry-assembly-descriptor.js +61 -0
- package/sdk/dist/query/registry-assembly-descriptor.js.map +1 -0
- package/sdk/dist/query/registry-assembly-invariants.d.ts +30 -0
- package/sdk/dist/query/registry-assembly-invariants.d.ts.map +1 -0
- package/sdk/dist/query/registry-assembly-invariants.js +77 -0
- package/sdk/dist/query/registry-assembly-invariants.js.map +1 -0
- package/sdk/dist/query/registry-assembly.d.ts +10 -0
- package/sdk/dist/query/registry-assembly.d.ts.map +1 -0
- package/sdk/dist/query/registry-assembly.js +53 -0
- package/sdk/dist/query/registry-assembly.js.map +1 -0
- package/sdk/dist/query/registry.d.ts +90 -0
- package/sdk/dist/query/registry.d.ts.map +1 -0
- package/sdk/dist/query/registry.js +129 -0
- package/sdk/dist/query/registry.js.map +1 -0
- package/sdk/dist/query/requirements-extract-from-plans.d.ts +9 -0
- package/sdk/dist/query/requirements-extract-from-plans.d.ts.map +1 -0
- package/sdk/dist/query/requirements-extract-from-plans.js +76 -0
- package/sdk/dist/query/requirements-extract-from-plans.js.map +1 -0
- package/sdk/dist/query/roadmap-update-plan-progress.d.ts +11 -0
- package/sdk/dist/query/roadmap-update-plan-progress.d.ts.map +1 -0
- package/sdk/dist/query/roadmap-update-plan-progress.js +124 -0
- package/sdk/dist/query/roadmap-update-plan-progress.js.map +1 -0
- package/sdk/dist/query/roadmap.d.ts +137 -0
- package/sdk/dist/query/roadmap.d.ts.map +1 -0
- package/sdk/dist/query/roadmap.js +753 -0
- package/sdk/dist/query/roadmap.js.map +1 -0
- package/sdk/dist/query/route-next-action.d.ts +9 -0
- package/sdk/dist/query/route-next-action.d.ts.map +1 -0
- package/sdk/dist/query/route-next-action.js +318 -0
- package/sdk/dist/query/route-next-action.js.map +1 -0
- package/sdk/dist/query/schema-detect.d.ts +21 -0
- package/sdk/dist/query/schema-detect.d.ts.map +1 -0
- package/sdk/dist/query/schema-detect.js +146 -0
- package/sdk/dist/query/schema-detect.js.map +1 -0
- package/sdk/dist/query/secrets.d.ts +27 -0
- package/sdk/dist/query/secrets.d.ts.map +1 -0
- package/sdk/dist/query/secrets.js +42 -0
- package/sdk/dist/query/secrets.js.map +1 -0
- package/sdk/dist/query/skill-manifest.d.ts +50 -0
- package/sdk/dist/query/skill-manifest.d.ts.map +1 -0
- package/sdk/dist/query/skill-manifest.js +171 -0
- package/sdk/dist/query/skill-manifest.js.map +1 -0
- package/sdk/dist/query/skills.d.ts +27 -0
- package/sdk/dist/query/skills.d.ts.map +1 -0
- package/sdk/dist/query/skills.js +137 -0
- package/sdk/dist/query/skills.js.map +1 -0
- package/sdk/dist/query/state-document.d.ts +14 -0
- package/sdk/dist/query/state-document.d.ts.map +1 -0
- package/sdk/dist/query/state-document.js +110 -0
- package/sdk/dist/query/state-document.js.map +1 -0
- package/sdk/dist/query/state-mutation.d.ts +224 -0
- package/sdk/dist/query/state-mutation.d.ts.map +1 -0
- package/sdk/dist/query/state-mutation.js +1539 -0
- package/sdk/dist/query/state-mutation.js.map +1 -0
- package/sdk/dist/query/state-project-load.d.ts +23 -0
- package/sdk/dist/query/state-project-load.d.ts.map +1 -0
- package/sdk/dist/query/state-project-load.js +75 -0
- package/sdk/dist/query/state-project-load.js.map +1 -0
- package/sdk/dist/query/state.d.ts +78 -0
- package/sdk/dist/query/state.d.ts.map +1 -0
- package/sdk/dist/query/state.js +430 -0
- package/sdk/dist/query/state.js.map +1 -0
- package/sdk/dist/query/summary.d.ts +18 -0
- package/sdk/dist/query/summary.d.ts.map +1 -0
- package/sdk/dist/query/summary.js +249 -0
- package/sdk/dist/query/summary.js.map +1 -0
- package/sdk/dist/query/template.d.ts +46 -0
- package/sdk/dist/query/template.d.ts.map +1 -0
- package/sdk/dist/query/template.js +210 -0
- package/sdk/dist/query/template.js.map +1 -0
- package/sdk/dist/query/uat.d.ts +34 -0
- package/sdk/dist/query/uat.d.ts.map +1 -0
- package/sdk/dist/query/uat.js +339 -0
- package/sdk/dist/query/uat.js.map +1 -0
- package/sdk/dist/query/utils.d.ts +59 -0
- package/sdk/dist/query/utils.d.ts.map +1 -0
- package/sdk/dist/query/utils.js +74 -0
- package/sdk/dist/query/utils.js.map +1 -0
- package/sdk/dist/query/validate.d.ts +67 -0
- package/sdk/dist/query/validate.d.ts.map +1 -0
- package/sdk/dist/query/validate.js +908 -0
- package/sdk/dist/query/validate.js.map +1 -0
- package/sdk/dist/query/verify.d.ts +110 -0
- package/sdk/dist/query/verify.d.ts.map +1 -0
- package/sdk/dist/query/verify.js +631 -0
- package/sdk/dist/query/verify.js.map +1 -0
- package/sdk/dist/query/websearch.d.ts +24 -0
- package/sdk/dist/query/websearch.d.ts.map +1 -0
- package/sdk/dist/query/websearch.js +68 -0
- package/sdk/dist/query/websearch.js.map +1 -0
- package/sdk/dist/query/workspace.d.ts +62 -0
- package/sdk/dist/query/workspace.d.ts.map +1 -0
- package/sdk/dist/query/workspace.js +104 -0
- package/sdk/dist/query/workspace.js.map +1 -0
- package/sdk/dist/query/workstream-inventory.d.ts +52 -0
- package/sdk/dist/query/workstream-inventory.d.ts.map +1 -0
- package/sdk/dist/query/workstream-inventory.js +141 -0
- package/sdk/dist/query/workstream-inventory.js.map +1 -0
- package/sdk/dist/query/workstream.d.ts +35 -0
- package/sdk/dist/query/workstream.d.ts.map +1 -0
- package/sdk/dist/query/workstream.js +298 -0
- package/sdk/dist/query/workstream.js.map +1 -0
- package/sdk/dist/query/worktree.d.ts +3 -0
- package/sdk/dist/query/worktree.d.ts.map +1 -0
- package/sdk/dist/query/worktree.js +36 -0
- package/sdk/dist/query/worktree.js.map +1 -0
- package/sdk/dist/query-command-executor.d.ts +22 -0
- package/sdk/dist/query-command-executor.d.ts.map +1 -0
- package/sdk/dist/query-command-executor.js +22 -0
- package/sdk/dist/query-command-executor.js.map +1 -0
- package/sdk/dist/query-execution-policy.d.ts +24 -0
- package/sdk/dist/query-execution-policy.d.ts.map +1 -0
- package/sdk/dist/query-execution-policy.js +27 -0
- package/sdk/dist/query-execution-policy.js.map +1 -0
- package/sdk/dist/query-failure-classification.d.ts +9 -0
- package/sdk/dist/query-failure-classification.d.ts.map +1 -0
- package/sdk/dist/query-failure-classification.js +32 -0
- package/sdk/dist/query-failure-classification.js.map +1 -0
- package/sdk/dist/query-hotpath-methods.d.ts +19 -0
- package/sdk/dist/query-hotpath-methods.d.ts.map +1 -0
- package/sdk/dist/query-hotpath-methods.js +34 -0
- package/sdk/dist/query-hotpath-methods.js.map +1 -0
- package/sdk/dist/query-native-direct-adapter.d.ts +20 -0
- package/sdk/dist/query-native-direct-adapter.d.ts.map +1 -0
- package/sdk/dist/query-native-direct-adapter.js +52 -0
- package/sdk/dist/query-native-direct-adapter.js.map +1 -0
- package/sdk/dist/query-native-hotpath-adapter.d.ts +15 -0
- package/sdk/dist/query-native-hotpath-adapter.d.ts.map +1 -0
- package/sdk/dist/query-native-hotpath-adapter.js +32 -0
- package/sdk/dist/query-native-hotpath-adapter.js.map +1 -0
- package/sdk/dist/query-raw-output-projection.d.ts +6 -0
- package/sdk/dist/query-raw-output-projection.d.ts.map +1 -0
- package/sdk/dist/query-raw-output-projection.js +67 -0
- package/sdk/dist/query-raw-output-projection.js.map +1 -0
- package/sdk/dist/query-runtime-bridge.d.ts +61 -0
- package/sdk/dist/query-runtime-bridge.d.ts.map +1 -0
- package/sdk/dist/query-runtime-bridge.js +144 -0
- package/sdk/dist/query-runtime-bridge.js.map +1 -0
- package/sdk/dist/query-sdd-tools-path.d.ts +2 -0
- package/sdk/dist/query-sdd-tools-path.d.ts.map +1 -0
- package/sdk/dist/query-sdd-tools-path.js +2 -0
- package/sdk/dist/query-sdd-tools-path.js.map +1 -0
- package/sdk/dist/query-sdd-tools-runtime.d.ts +20 -0
- package/sdk/dist/query-sdd-tools-runtime.d.ts.map +1 -0
- package/sdk/dist/query-sdd-tools-runtime.js +47 -0
- package/sdk/dist/query-sdd-tools-runtime.js.map +1 -0
- package/sdk/dist/query-subprocess-adapter.d.ts +18 -0
- package/sdk/dist/query-subprocess-adapter.d.ts.map +1 -0
- package/sdk/dist/query-subprocess-adapter.js +92 -0
- package/sdk/dist/query-subprocess-adapter.js.map +1 -0
- package/sdk/dist/query-tools-error-factory.d.ts +16 -0
- package/sdk/dist/query-tools-error-factory.d.ts.map +1 -0
- package/sdk/dist/query-tools-error-factory.js +33 -0
- package/sdk/dist/query-tools-error-factory.js.map +1 -0
- package/sdk/dist/research-gate.d.ts +24 -0
- package/sdk/dist/research-gate.d.ts.map +1 -0
- package/sdk/dist/research-gate.js +70 -0
- package/sdk/dist/research-gate.js.map +1 -0
- package/sdk/dist/runtime-gate.d.ts +14 -0
- package/sdk/dist/runtime-gate.d.ts.map +1 -0
- package/sdk/dist/runtime-gate.js +48 -0
- package/sdk/dist/runtime-gate.js.map +1 -0
- package/sdk/dist/sdd-tools-error.d.ts +23 -0
- package/sdk/dist/sdd-tools-error.d.ts.map +1 -0
- package/sdk/dist/sdd-tools-error.js +29 -0
- package/sdk/dist/sdd-tools-error.js.map +1 -0
- package/sdk/dist/sdd-tools.d.ts +97 -0
- package/sdk/dist/sdd-tools.d.ts.map +1 -0
- package/sdk/dist/sdd-tools.js +168 -0
- package/sdk/dist/sdd-tools.js.map +1 -0
- package/sdk/dist/sdd-transport-policy.d.ts +10 -0
- package/sdk/dist/sdd-transport-policy.d.ts.map +1 -0
- package/sdk/dist/sdd-transport-policy.js +32 -0
- package/sdk/dist/sdd-transport-policy.js.map +1 -0
- package/sdk/dist/sdd-transport.d.ts +39 -0
- package/sdk/dist/sdd-transport.d.ts.map +1 -0
- package/sdk/dist/sdd-transport.js +78 -0
- package/sdk/dist/sdd-transport.js.map +1 -0
- package/sdk/dist/sdk-package-compatibility.d.ts +38 -0
- package/sdk/dist/sdk-package-compatibility.d.ts.map +1 -0
- package/sdk/dist/sdk-package-compatibility.js +90 -0
- package/sdk/dist/sdk-package-compatibility.js.map +1 -0
- package/sdk/dist/session-runner.d.ts +40 -0
- package/sdk/dist/session-runner.d.ts.map +1 -0
- package/sdk/dist/session-runner.js +274 -0
- package/sdk/dist/session-runner.js.map +1 -0
- package/sdk/dist/tool-scoping.d.ts +31 -0
- package/sdk/dist/tool-scoping.d.ts.map +1 -0
- package/sdk/dist/tool-scoping.js +54 -0
- package/sdk/dist/tool-scoping.js.map +1 -0
- package/sdk/dist/types.d.ts +794 -0
- package/sdk/dist/types.d.ts.map +1 -0
- package/sdk/dist/types.js +77 -0
- package/sdk/dist/types.js.map +1 -0
- package/sdk/dist/workstream-name-policy.d.ts +13 -0
- package/sdk/dist/workstream-name-policy.d.ts.map +1 -0
- package/sdk/dist/workstream-name-policy.js +24 -0
- package/sdk/dist/workstream-name-policy.js.map +1 -0
- package/sdk/dist/workstream-utils.d.ts +15 -0
- package/sdk/dist/workstream-utils.d.ts.map +1 -0
- package/sdk/dist/workstream-utils.js +21 -0
- package/sdk/dist/workstream-utils.js.map +1 -0
- package/sdk/dist/ws-transport.d.ts +32 -0
- package/sdk/dist/ws-transport.d.ts.map +1 -0
- package/sdk/dist/ws-transport.js +84 -0
- package/sdk/dist/ws-transport.js.map +1 -0
- package/sdk/package-lock.json +2502 -0
- package/sdk/package.json +57 -0
- package/sdk/prompts/templates/project.md +186 -0
- package/sdk/prompts/templates/requirements.md +231 -0
- package/sdk/prompts/templates/research-project/ARCHITECTURE.md +204 -0
- package/sdk/prompts/templates/research-project/FEATURES.md +147 -0
- package/sdk/prompts/templates/research-project/PITFALLS.md +200 -0
- package/sdk/prompts/templates/research-project/STACK.md +120 -0
- package/sdk/prompts/templates/research-project/SUMMARY.md +170 -0
- package/sdk/prompts/templates/roadmap.md +202 -0
- package/sdk/prompts/templates/state.md +175 -0
- package/sdk/shared/model-catalog.json +122 -0
- package/sdk/src/assembled-prompts.test.ts +349 -0
- package/sdk/src/bug-3591-sddtools-runtime-workstream.test.ts +179 -0
- package/sdk/src/cli-transport.test.ts +388 -0
- package/sdk/src/cli-transport.ts +130 -0
- package/sdk/src/cli.test.ts +426 -0
- package/sdk/src/cli.ts +589 -0
- package/sdk/src/config.test.ts +271 -0
- package/sdk/src/config.ts +218 -0
- package/sdk/src/context-engine.test.ts +295 -0
- package/sdk/src/context-engine.ts +170 -0
- package/sdk/src/context-truncation.test.ts +163 -0
- package/sdk/src/context-truncation.ts +233 -0
- package/sdk/src/e2e.integration.test.ts +181 -0
- package/sdk/src/errors.ts +72 -0
- package/sdk/src/event-stream.test.ts +661 -0
- package/sdk/src/event-stream.ts +441 -0
- package/sdk/src/golden/capture.ts +95 -0
- package/sdk/src/golden/fixtures/generate-slug.golden.json +1 -0
- package/sdk/src/golden/fixtures/profile-sample-sessions/demo-project/sample.jsonl +3 -0
- package/sdk/src/golden/fixtures/summary-extract-sample.md +26 -0
- package/sdk/src/golden/fixtures/uat-render-checkpoint-sample.md +15 -0
- package/sdk/src/golden/golden-integration-covered.ts +30 -0
- package/sdk/src/golden/golden-mutation-covered.ts +17 -0
- package/sdk/src/golden/golden-policy.test.ts +8 -0
- package/sdk/src/golden/golden-policy.ts +120 -0
- package/sdk/src/golden/golden.integration.test.ts +677 -0
- package/sdk/src/golden/init-golden-normalize.ts +15 -0
- package/sdk/src/golden/read-only-golden-rows.ts +77 -0
- package/sdk/src/golden/read-only-parity.integration.test.ts +133 -0
- package/sdk/src/golden/registry-canonical-commands.ts +31 -0
- package/sdk/src/index.ts +352 -0
- package/sdk/src/init-e2e.integration.test.ts +138 -0
- package/sdk/src/init-runner.test.ts +740 -0
- package/sdk/src/init-runner.ts +734 -0
- package/sdk/src/lifecycle-e2e.integration.test.ts +258 -0
- package/sdk/src/logger.test.ts +149 -0
- package/sdk/src/logger.ts +113 -0
- package/sdk/src/milestone-runner.test.ts +421 -0
- package/sdk/src/model-catalog.ts +70 -0
- package/sdk/src/phase-prompt.test.ts +535 -0
- package/sdk/src/phase-prompt.ts +259 -0
- package/sdk/src/phase-runner-types.test.ts +421 -0
- package/sdk/src/phase-runner.integration.test.ts +377 -0
- package/sdk/src/phase-runner.test.ts +2720 -0
- package/sdk/src/phase-runner.ts +1442 -0
- package/sdk/src/plan-parser.test.ts +579 -0
- package/sdk/src/plan-parser.ts +431 -0
- package/sdk/src/planning-journal.test.ts +70 -0
- package/sdk/src/planning-journal.ts +153 -0
- package/sdk/src/planning-runtime.test.ts +29 -0
- package/sdk/src/planning-runtime.ts +100 -0
- package/sdk/src/prompt-builder.test.ts +318 -0
- package/sdk/src/prompt-builder.ts +218 -0
- package/sdk/src/prompt-sanitizer.test.ts +260 -0
- package/sdk/src/prompt-sanitizer.ts +116 -0
- package/sdk/src/query/QUERY-HANDLERS.md +349 -0
- package/sdk/src/query/active-workstream-store.ts +50 -0
- package/sdk/src/query/agent-failure-classifier.test.ts +157 -0
- package/sdk/src/query/agent-failure-classifier.ts +105 -0
- package/sdk/src/query/audit-open.ts +722 -0
- package/sdk/src/query/check-auto-mode.test.ts +77 -0
- package/sdk/src/query/check-auto-mode.ts +49 -0
- package/sdk/src/query/check-completion.test.ts +113 -0
- package/sdk/src/query/check-completion.ts +182 -0
- package/sdk/src/query/check-decision-coverage.test.ts +519 -0
- package/sdk/src/query/check-decision-coverage.ts +554 -0
- package/sdk/src/query/check-gates.test.ts +103 -0
- package/sdk/src/query/check-gates.ts +112 -0
- package/sdk/src/query/check-ship-ready.test.ts +111 -0
- package/sdk/src/query/check-ship-ready.ts +104 -0
- package/sdk/src/query/check-verification-status.test.ts +143 -0
- package/sdk/src/query/check-verification-status.ts +160 -0
- package/sdk/src/query/command-aliases.generated.ts +156 -0
- package/sdk/src/query/command-catalog.ts +31 -0
- package/sdk/src/query/command-definition.test.ts +47 -0
- package/sdk/src/query/command-definition.ts +70 -0
- package/sdk/src/query/command-family-handlers.ts +117 -0
- package/sdk/src/query/command-manifest.init.ts +24 -0
- package/sdk/src/query/command-manifest.non-family.ts +85 -0
- package/sdk/src/query/command-manifest.phase.ts +16 -0
- package/sdk/src/query/command-manifest.phases.ts +11 -0
- package/sdk/src/query/command-manifest.roadmap.ts +11 -0
- package/sdk/src/query/command-manifest.state.ts +31 -0
- package/sdk/src/query/command-manifest.ts +17 -0
- package/sdk/src/query/command-manifest.types.ts +13 -0
- package/sdk/src/query/command-manifest.validate.ts +11 -0
- package/sdk/src/query/command-manifest.verify.ts +15 -0
- package/sdk/src/query/command-resolution.test.ts +70 -0
- package/sdk/src/query/command-seam-coverage.test.ts +118 -0
- package/sdk/src/query/command-static-catalog-domain.ts +117 -0
- package/sdk/src/query/command-static-catalog-foundation.ts +103 -0
- package/sdk/src/query/command-topology.test.ts +28 -0
- package/sdk/src/query/command-topology.ts +114 -0
- package/sdk/src/query/commands-list.test.ts +36 -0
- package/sdk/src/query/commands-list.ts +19 -0
- package/sdk/src/query/commit.test.ts +485 -0
- package/sdk/src/query/commit.ts +383 -0
- package/sdk/src/query/config-gates.test.ts +89 -0
- package/sdk/src/query/config-gates.ts +69 -0
- package/sdk/src/query/config-mutation.test.ts +598 -0
- package/sdk/src/query/config-mutation.ts +575 -0
- package/sdk/src/query/config-query.test.ts +367 -0
- package/sdk/src/query/config-query.ts +244 -0
- package/sdk/src/query/config-schema.ts +159 -0
- package/sdk/src/query/decisions.test.ts +215 -0
- package/sdk/src/query/decisions.ts +192 -0
- package/sdk/src/query/decomposed-handlers.test.ts +431 -0
- package/sdk/src/query/detect-custom-files.test.ts +115 -0
- package/sdk/src/query/detect-custom-files.ts +96 -0
- package/sdk/src/query/detect-phase-type.test.ts +105 -0
- package/sdk/src/query/detect-phase-type.ts +141 -0
- package/sdk/src/query/docs-init.ts +258 -0
- package/sdk/src/query/fallow-audit.ts +88 -0
- package/sdk/src/query/frontmatter-array.test.ts +14 -0
- package/sdk/src/query/frontmatter-mutation.test.ts +259 -0
- package/sdk/src/query/frontmatter-mutation.ts +343 -0
- package/sdk/src/query/frontmatter.test.ts +326 -0
- package/sdk/src/query/frontmatter.ts +395 -0
- package/sdk/src/query/helpers.test.ts +615 -0
- package/sdk/src/query/helpers.ts +646 -0
- package/sdk/src/query/index-thin-seam.test.ts +16 -0
- package/sdk/src/query/index.ts +9 -0
- package/sdk/src/query/init-complex.test.ts +616 -0
- package/sdk/src/query/init-complex.ts +799 -0
- package/sdk/src/query/init-progress-precedence.test.ts +177 -0
- package/sdk/src/query/init-workstream-milestone-op.test.ts +321 -0
- package/sdk/src/query/init.test.ts +792 -0
- package/sdk/src/query/init.ts +1262 -0
- package/sdk/src/query/intel.test.ts +90 -0
- package/sdk/src/query/intel.ts +404 -0
- package/sdk/src/query/mutation-event-decorator.test.ts +45 -0
- package/sdk/src/query/mutation-event-decorator.ts +37 -0
- package/sdk/src/query/mutation-event-mapper.test.ts +33 -0
- package/sdk/src/query/mutation-event-mapper.ts +102 -0
- package/sdk/src/query/mvp.test.ts +335 -0
- package/sdk/src/query/mvp.ts +292 -0
- package/sdk/src/query/normalize-query-command.test.ts +102 -0
- package/sdk/src/query/phase-filesystem-adapter.ts +35 -0
- package/sdk/src/query/phase-lifecycle-policy.ts +171 -0
- package/sdk/src/query/phase-lifecycle.test.ts +1750 -0
- package/sdk/src/query/phase-lifecycle.ts +1833 -0
- package/sdk/src/query/phase-list-queries.test.ts +88 -0
- package/sdk/src/query/phase-list-queries.ts +152 -0
- package/sdk/src/query/phase-ready.test.ts +65 -0
- package/sdk/src/query/phase-ready.ts +159 -0
- package/sdk/src/query/phase-roadmap-mutation.ts +77 -0
- package/sdk/src/query/phase.test.ts +651 -0
- package/sdk/src/query/phase.ts +550 -0
- package/sdk/src/query/pipeline.test.ts +169 -0
- package/sdk/src/query/pipeline.ts +243 -0
- package/sdk/src/query/plan-scan.test.ts +35 -0
- package/sdk/src/query/plan-scan.ts +82 -0
- package/sdk/src/query/plan-task-structure.test.ts +65 -0
- package/sdk/src/query/plan-task-structure.ts +63 -0
- package/sdk/src/query/policy-convergence.test.ts +28 -0
- package/sdk/src/query/profile-extract-messages.ts +247 -0
- package/sdk/src/query/profile-output.ts +929 -0
- package/sdk/src/query/profile-questionnaire-data.ts +181 -0
- package/sdk/src/query/profile-sample.ts +184 -0
- package/sdk/src/query/profile-scan-sessions.ts +174 -0
- package/sdk/src/query/profile.test.ts +136 -0
- package/sdk/src/query/profile.ts +337 -0
- package/sdk/src/query/progress.test.ts +156 -0
- package/sdk/src/query/progress.ts +566 -0
- package/sdk/src/query/query-cli-adapter.test.ts +79 -0
- package/sdk/src/query/query-cli-adapter.ts +39 -0
- package/sdk/src/query/query-cli-output.test.ts +33 -0
- package/sdk/src/query/query-cli-output.ts +35 -0
- package/sdk/src/query/query-command-diagnosis.test.ts +22 -0
- package/sdk/src/query/query-command-diagnosis.ts +5 -0
- package/sdk/src/query/query-command-resolution-strategy.test.ts +34 -0
- package/sdk/src/query/query-command-resolution-strategy.ts +121 -0
- package/sdk/src/query/query-command-semantics.test.ts +22 -0
- package/sdk/src/query/query-command-semantics.ts +22 -0
- package/sdk/src/query/query-dispatch-contract.ts +30 -0
- package/sdk/src/query/query-dispatch-error-mapper.test.ts +62 -0
- package/sdk/src/query/query-dispatch-error-mapper.ts +5 -0
- package/sdk/src/query/query-dispatch-formatting.test.ts +28 -0
- package/sdk/src/query/query-dispatch-formatting.ts +5 -0
- package/sdk/src/query/query-dispatch-input-validation.test.ts +23 -0
- package/sdk/src/query/query-dispatch-input-validation.ts +5 -0
- package/sdk/src/query/query-dispatch-observability.test.ts +10 -0
- package/sdk/src/query/query-dispatch-observability.ts +6 -0
- package/sdk/src/query/query-dispatch-plan.test.ts +25 -0
- package/sdk/src/query/query-dispatch-plan.ts +5 -0
- package/sdk/src/query/query-dispatch-result-builder.test.ts +16 -0
- package/sdk/src/query/query-dispatch-result-builder.ts +5 -0
- package/sdk/src/query/query-dispatch.test.ts +399 -0
- package/sdk/src/query/query-dispatch.ts +243 -0
- package/sdk/src/query/query-error-details-schema.ts +29 -0
- package/sdk/src/query/query-error-taxonomy.test.ts +39 -0
- package/sdk/src/query/query-error-taxonomy.ts +117 -0
- package/sdk/src/query/query-fallback-bridge-adapter.test.ts +32 -0
- package/sdk/src/query/query-fallback-bridge-adapter.ts +54 -0
- package/sdk/src/query/query-fallback-executor.test.ts +82 -0
- package/sdk/src/query/query-fallback-executor.ts +44 -0
- package/sdk/src/query/query-fallback-output-classifier.test.ts +36 -0
- package/sdk/src/query/query-fallback-output-classifier.ts +31 -0
- package/sdk/src/query/query-fallback-policy.test.ts +13 -0
- package/sdk/src/query/query-fallback-policy.ts +11 -0
- package/sdk/src/query/query-native-dispatch-adapter.ts +16 -0
- package/sdk/src/query/query-policy-capability.test.ts +10 -0
- package/sdk/src/query/query-policy-capability.ts +26 -0
- package/sdk/src/query/query-policy-snapshot.test.ts +9 -0
- package/sdk/src/query/query-registry-capability.test.ts +14 -0
- package/sdk/src/query/query-runtime-context.ts +44 -0
- package/sdk/src/query/query-unknown-command-hints.test.ts +9 -0
- package/sdk/src/query/query-unknown-command-hints.ts +5 -0
- package/sdk/src/query/registry-assembly-descriptor.ts +87 -0
- package/sdk/src/query/registry-assembly-invariants.ts +127 -0
- package/sdk/src/query/registry-assembly.test.ts +138 -0
- package/sdk/src/query/registry-assembly.ts +78 -0
- package/sdk/src/query/registry.test.ts +208 -0
- package/sdk/src/query/registry.ts +142 -0
- package/sdk/src/query/requirements-extract-from-plans.test.ts +58 -0
- package/sdk/src/query/requirements-extract-from-plans.ts +86 -0
- package/sdk/src/query/roadmap-update-plan-progress.test.ts +233 -0
- package/sdk/src/query/roadmap-update-plan-progress.ts +159 -0
- package/sdk/src/query/roadmap.test.ts +1181 -0
- package/sdk/src/query/roadmap.ts +894 -0
- package/sdk/src/query/route-next-action.test.ts +61 -0
- package/sdk/src/query/route-next-action.ts +345 -0
- package/sdk/src/query/schema-detect.ts +189 -0
- package/sdk/src/query/secrets.test.ts +66 -0
- package/sdk/src/query/secrets.ts +43 -0
- package/sdk/src/query/skill-manifest.test.ts +62 -0
- package/sdk/src/query/skill-manifest.ts +216 -0
- package/sdk/src/query/skills.test.ts +234 -0
- package/sdk/src/query/skills.ts +143 -0
- package/sdk/src/query/state-document.test.ts +197 -0
- package/sdk/src/query/state-document.ts +129 -0
- package/sdk/src/query/state-mutation.test.ts +1198 -0
- package/sdk/src/query/state-mutation.ts +1718 -0
- package/sdk/src/query/state-project-load.ts +80 -0
- package/sdk/src/query/state.test.ts +616 -0
- package/sdk/src/query/state.ts +463 -0
- package/sdk/src/query/sub-repos-root.integration.test.ts +79 -0
- package/sdk/src/query/summary.test.ts +95 -0
- package/sdk/src/query/summary.ts +296 -0
- package/sdk/src/query/template.test.ts +180 -0
- package/sdk/src/query/template.ts +242 -0
- package/sdk/src/query/uat.test.ts +77 -0
- package/sdk/src/query/uat.ts +365 -0
- package/sdk/src/query/utils.test.ts +82 -0
- package/sdk/src/query/utils.ts +106 -0
- package/sdk/src/query/validate.test.ts +831 -0
- package/sdk/src/query/validate.ts +952 -0
- package/sdk/src/query/verify.test.ts +414 -0
- package/sdk/src/query/verify.ts +692 -0
- package/sdk/src/query/websearch.test.ts +31 -0
- package/sdk/src/query/websearch.ts +82 -0
- package/sdk/src/query/workspace.test.ts +120 -0
- package/sdk/src/query/workspace.ts +145 -0
- package/sdk/src/query/workstream-inventory.ts +195 -0
- package/sdk/src/query/workstream.test.ts +153 -0
- package/sdk/src/query/workstream.ts +324 -0
- package/sdk/src/query/worktree.ts +39 -0
- package/sdk/src/query-command-executor.ts +31 -0
- package/sdk/src/query-execution-policy.test.ts +52 -0
- package/sdk/src/query-execution-policy.ts +46 -0
- package/sdk/src/query-failure-classification.test.ts +23 -0
- package/sdk/src/query-failure-classification.ts +42 -0
- package/sdk/src/query-hotpath-methods.ts +48 -0
- package/sdk/src/query-native-direct-adapter.test.ts +35 -0
- package/sdk/src/query-native-direct-adapter.ts +70 -0
- package/sdk/src/query-native-hotpath-adapter.test.ts +43 -0
- package/sdk/src/query-native-hotpath-adapter.ts +45 -0
- package/sdk/src/query-raw-output-projection.test.ts +39 -0
- package/sdk/src/query-raw-output-projection.ts +74 -0
- package/sdk/src/query-runtime-bridge.test.ts +150 -0
- package/sdk/src/query-runtime-bridge.ts +215 -0
- package/sdk/src/query-runtime-seam-coverage.test.ts +20 -0
- package/sdk/src/query-sdd-tools-path.ts +1 -0
- package/sdk/src/query-sdd-tools-runtime.ts +89 -0
- package/sdk/src/query-subprocess-adapter.test.ts +84 -0
- package/sdk/src/query-subprocess-adapter.ts +146 -0
- package/sdk/src/query-tools-error-factory.test.ts +35 -0
- package/sdk/src/query-tools-error-factory.ts +76 -0
- package/sdk/src/research-gate.test.ts +190 -0
- package/sdk/src/research-gate.ts +94 -0
- package/sdk/src/runtime-bridge-options.test.ts +33 -0
- package/sdk/src/runtime-gate.test.ts +84 -0
- package/sdk/src/runtime-gate.ts +52 -0
- package/sdk/src/sdd-tools-error.test.ts +21 -0
- package/sdk/src/sdd-tools-error.ts +65 -0
- package/sdk/src/sdd-tools.test.ts +472 -0
- package/sdk/src/sdd-tools.ts +237 -0
- package/sdk/src/sdd-transport-policy.test.ts +34 -0
- package/sdk/src/sdd-transport-policy.ts +48 -0
- package/sdk/src/sdd-transport.test.ts +292 -0
- package/sdk/src/sdd-transport.ts +117 -0
- package/sdk/src/sdk-package-compatibility.test.ts +97 -0
- package/sdk/src/sdk-package-compatibility.ts +141 -0
- package/sdk/src/session-runner.test.ts +164 -0
- package/sdk/src/session-runner.ts +327 -0
- package/sdk/src/tool-scoping.test.ts +160 -0
- package/sdk/src/tool-scoping.ts +61 -0
- package/sdk/src/types.ts +927 -0
- package/sdk/src/workflow-agent-skills-consistency.test.ts +98 -0
- package/sdk/src/workstream-name-policy.ts +24 -0
- package/sdk/src/workstream-utils.ts +21 -0
- package/sdk/src/ws-flag.test.ts +285 -0
- package/sdk/src/ws-transport.test.ts +161 -0
- package/sdk/src/ws-transport.ts +93 -0
- package/sdk/tsconfig.json +20 -0
- package/commands/sdd/add-backlog.md +0 -76
- package/commands/sdd/add-phase.md +0 -43
- package/commands/sdd/add-todo.md +0 -47
- package/commands/sdd/analyze-dependencies.md +0 -34
- package/commands/sdd/check-todos.md +0 -45
- package/commands/sdd/code-review-fix.md +0 -52
- package/commands/sdd/do.md +0 -30
- package/commands/sdd/from-sdd2.md +0 -45
- package/commands/sdd/insert-phase.md +0 -32
- package/commands/sdd/intel.md +0 -179
- package/commands/sdd/join-discord.md +0 -19
- package/commands/sdd/list-phase-assumptions.md +0 -46
- package/commands/sdd/list-workspaces.md +0 -19
- package/commands/sdd/new-workspace.md +0 -44
- package/commands/sdd/next.md +0 -26
- package/commands/sdd/note.md +0 -34
- package/commands/sdd/plan-milestone-gaps.md +0 -34
- package/commands/sdd/plant-seed.md +0 -28
- package/commands/sdd/remove-phase.md +0 -31
- package/commands/sdd/remove-workspace.md +0 -26
- package/commands/sdd/research-phase.md +0 -195
- package/commands/sdd/scan.md +0 -26
- package/commands/sdd/session-report.md +0 -19
- package/commands/sdd/set-profile.md +0 -12
- package/scripts/sync-upstream.sh +0 -56
- package/sdd/workflows/research-phase.md +0 -82
package/sdd/bin/lib/init.cjs
CHANGED
|
@@ -4,24 +4,38 @@
|
|
|
4
4
|
|
|
5
5
|
const fs = require('fs');
|
|
6
6
|
const path = require('path');
|
|
7
|
-
const {
|
|
8
|
-
const { loadConfig, resolveModelInternal, findPhaseInternal, getRoadmapPhaseInternal, pathExistsInternal, generateSlugInternal, getMilestoneInfo, getMilestonePhaseFilter, stripShippedMilestones, extractCurrentMilestone, normalizePhaseName,
|
|
7
|
+
const { execGit, platformWriteSync, platformReadSync } = require('./shell-command-projection.cjs');
|
|
8
|
+
const { loadConfig, resolveModelInternal, findPhaseInternal, getRoadmapPhaseInternal, pathExistsInternal, gitWorktreeInfoInternal, generateSlugInternal, getMilestoneInfo, getMilestonePhaseFilter, stripShippedMilestones, extractCurrentMilestone, normalizePhaseName, toPosixPath, output, error, checkAgentsInstalled, phaseTokenMatches } = require('./core.cjs');
|
|
9
|
+
const { planningPaths, planningDir, planningRoot } = require('./planning-workspace.cjs');
|
|
10
|
+
const { maskIfSecret } = require('./secrets.cjs');
|
|
11
|
+
const scanPhasePlans = require('./plan-scan.cjs');
|
|
12
|
+
const { stateExtractField } = require('./state-document.cjs');
|
|
13
|
+
const { determinePhaseStatus } = require('./commands.cjs');
|
|
14
|
+
|
|
15
|
+
// Accept all bold/colon variants of the Requirements header (#2769):
|
|
16
|
+
// **Requirements:** / **Requirements**: / **Requirements** : render the
|
|
17
|
+
// same in markdown but differ textually.
|
|
18
|
+
const REQUIREMENTS_HEADER_RE = /^\*\*Requirements:?\*\*[^\S\n]*:?[^\S\n]*([^\n]*)$/m;
|
|
19
|
+
|
|
20
|
+
function listPhaseSummaryFiles(phaseDir) {
|
|
21
|
+
return scanPhasePlans(phaseDir).summaryFiles;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
function listPhasePlanFiles(phaseDir) {
|
|
25
|
+
return scanPhasePlans(phaseDir).planFiles;
|
|
26
|
+
}
|
|
9
27
|
|
|
10
28
|
function getLatestCompletedMilestone(cwd) {
|
|
11
29
|
const milestonesPath = path.join(planningRoot(cwd), 'MILESTONES.md');
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
};
|
|
22
|
-
} catch {
|
|
23
|
-
return null;
|
|
24
|
-
}
|
|
30
|
+
const content = platformReadSync(milestonesPath);
|
|
31
|
+
if (content === null) return null;
|
|
32
|
+
|
|
33
|
+
const match = content.match(/^##\s+(v[\d.]+)\s+(.+?)\s+\(Shipped:/m);
|
|
34
|
+
if (!match) return null;
|
|
35
|
+
return {
|
|
36
|
+
version: match[1],
|
|
37
|
+
name: match[2].trim(),
|
|
38
|
+
};
|
|
25
39
|
}
|
|
26
40
|
|
|
27
41
|
/**
|
|
@@ -44,6 +58,20 @@ function withProjectRoot(cwd, result) {
|
|
|
44
58
|
if (config.response_language) {
|
|
45
59
|
result.response_language = config.response_language;
|
|
46
60
|
}
|
|
61
|
+
// Inject project identity into all init outputs so handoff blocks
|
|
62
|
+
// can include project context for cross-session continuity.
|
|
63
|
+
if (config.project_code) {
|
|
64
|
+
result.project_code = config.project_code;
|
|
65
|
+
}
|
|
66
|
+
// Extract project title from PROJECT.md first H1 heading.
|
|
67
|
+
const projectMdPath = path.join(planningDir(cwd), 'PROJECT.md');
|
|
68
|
+
const content = platformReadSync(projectMdPath);
|
|
69
|
+
if (content) {
|
|
70
|
+
const h1Match = content.match(/^#\s+(.+)$/m);
|
|
71
|
+
if (h1Match) {
|
|
72
|
+
result.project_title = h1Match[1].trim();
|
|
73
|
+
}
|
|
74
|
+
}
|
|
47
75
|
return result;
|
|
48
76
|
}
|
|
49
77
|
|
|
@@ -58,6 +86,16 @@ function cmdInitExecutePhase(cwd, phase, raw, options = {}) {
|
|
|
58
86
|
|
|
59
87
|
const roadmapPhase = getRoadmapPhaseInternal(cwd, phase);
|
|
60
88
|
|
|
89
|
+
// If findPhaseInternal matched an archived phase from a prior milestone, but
|
|
90
|
+
// the phase exists in the current milestone's ROADMAP.md, ignore the archive
|
|
91
|
+
// match — we are initializing a new phase in the current milestone that
|
|
92
|
+
// happens to share a number with an archived one. Without this, phase_dir,
|
|
93
|
+
// phase_slug and related fields would point at artifacts from a previous
|
|
94
|
+
// milestone.
|
|
95
|
+
if (phaseInfo?.archived && roadmapPhase?.found) {
|
|
96
|
+
phaseInfo = null;
|
|
97
|
+
}
|
|
98
|
+
|
|
61
99
|
// Fallback to ROADMAP.md if no phase directory exists yet
|
|
62
100
|
if (!phaseInfo && roadmapPhase?.found) {
|
|
63
101
|
const phaseName = roadmapPhase.phase_name;
|
|
@@ -76,7 +114,7 @@ function cmdInitExecutePhase(cwd, phase, raw, options = {}) {
|
|
|
76
114
|
has_reviews: false,
|
|
77
115
|
};
|
|
78
116
|
}
|
|
79
|
-
const reqMatch = roadmapPhase?.section?.match(
|
|
117
|
+
const reqMatch = roadmapPhase?.section?.match(REQUIREMENTS_HEADER_RE);
|
|
80
118
|
const reqExtracted = reqMatch
|
|
81
119
|
? reqMatch[1].replace(/[\[\]]/g, '').split(',').map(s => s.trim()).filter(Boolean).join(', ')
|
|
82
120
|
: null;
|
|
@@ -88,6 +126,7 @@ function cmdInitExecutePhase(cwd, phase, raw, options = {}) {
|
|
|
88
126
|
verifier_model: resolveModelInternal(cwd, 'sdd-verifier'),
|
|
89
127
|
|
|
90
128
|
// Config flags
|
|
129
|
+
tdd_mode: options.tdd || config.tdd_mode || false,
|
|
91
130
|
commit_docs: config.commit_docs,
|
|
92
131
|
sub_repos: config.sub_repos,
|
|
93
132
|
parallelization: config.parallelization,
|
|
@@ -142,20 +181,16 @@ function cmdInitExecutePhase(cwd, phase, raw, options = {}) {
|
|
|
142
181
|
// Optional --validate: run state validation and include warnings (#1627)
|
|
143
182
|
if (options.validate) {
|
|
144
183
|
try {
|
|
145
|
-
const { cmdStateValidate } = require('./state.cjs');
|
|
146
|
-
// Capture validate output by temporarily redirecting
|
|
147
184
|
const statePath = path.join(planningDir(cwd), 'STATE.md');
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
const { stateExtractField } = require('./state.cjs');
|
|
185
|
+
const stateContent = platformReadSync(statePath);
|
|
186
|
+
if (stateContent !== null) {
|
|
151
187
|
const status = stateExtractField(stateContent, 'Status') || '';
|
|
152
188
|
result.state_validation_ran = true;
|
|
153
189
|
// Simple inline validation — check for obvious drift
|
|
154
190
|
const warnings = [];
|
|
155
191
|
const phasesPath = planningPaths(cwd).phases;
|
|
156
192
|
if (phaseInfo && phaseInfo.directory && fs.existsSync(path.join(cwd, phaseInfo.directory))) {
|
|
157
|
-
const
|
|
158
|
-
const diskPlans = files.filter(f => f.match(/-PLAN\.md$/i)).length;
|
|
193
|
+
const diskPlans = listPhasePlanFiles(path.join(cwd, phaseInfo.directory)).length;
|
|
159
194
|
const totalPlansRaw = stateExtractField(stateContent, 'Total Plans in Phase');
|
|
160
195
|
const totalPlansInPhase = totalPlansRaw ? parseInt(totalPlansRaw, 10) : null;
|
|
161
196
|
if (totalPlansInPhase !== null && diskPlans !== totalPlansInPhase) {
|
|
@@ -180,6 +215,16 @@ function cmdInitPlanPhase(cwd, phase, raw, options = {}) {
|
|
|
180
215
|
|
|
181
216
|
const roadmapPhase = getRoadmapPhaseInternal(cwd, phase);
|
|
182
217
|
|
|
218
|
+
// If findPhaseInternal matched an archived phase from a prior milestone, but
|
|
219
|
+
// the phase exists in the current milestone's ROADMAP.md, ignore the archive
|
|
220
|
+
// match — we are planning a new phase in the current milestone that happens
|
|
221
|
+
// to share a number with an archived one. Without this, phase_dir,
|
|
222
|
+
// phase_slug, has_context and has_research would point at artifacts from a
|
|
223
|
+
// previous milestone.
|
|
224
|
+
if (phaseInfo?.archived && roadmapPhase?.found) {
|
|
225
|
+
phaseInfo = null;
|
|
226
|
+
}
|
|
227
|
+
|
|
183
228
|
// Fallback to ROADMAP.md if no phase directory exists yet
|
|
184
229
|
if (!phaseInfo && roadmapPhase?.found) {
|
|
185
230
|
const phaseName = roadmapPhase.phase_name;
|
|
@@ -198,12 +243,29 @@ function cmdInitPlanPhase(cwd, phase, raw, options = {}) {
|
|
|
198
243
|
has_reviews: false,
|
|
199
244
|
};
|
|
200
245
|
}
|
|
201
|
-
const reqMatch = roadmapPhase?.section?.match(
|
|
246
|
+
const reqMatch = roadmapPhase?.section?.match(REQUIREMENTS_HEADER_RE);
|
|
202
247
|
const reqExtracted = reqMatch
|
|
203
248
|
? reqMatch[1].replace(/[\[\]]/g, '').split(',').map(s => s.trim()).filter(Boolean).join(', ')
|
|
204
249
|
: null;
|
|
205
250
|
const phase_req_ids = (reqExtracted && reqExtracted !== 'TBD') ? reqExtracted : null;
|
|
206
251
|
|
|
252
|
+
// #3287: compute the canonical directory name with project_code prefix so
|
|
253
|
+
// the first-touch mkdir in /sdd:plan-phase stays consistent with phase.add.
|
|
254
|
+
const phaseDirPlan = phaseInfo?.directory || null;
|
|
255
|
+
const phaseNumberPlan = phaseInfo?.phase_number || null;
|
|
256
|
+
const phaseNamePlan = phaseInfo?.phase_name || null;
|
|
257
|
+
const rawProjectCodePlan = config.project_code || '';
|
|
258
|
+
let expectedPhaseDirPlan = null;
|
|
259
|
+
if (!phaseDirPlan && phaseNumberPlan && phaseNamePlan) {
|
|
260
|
+
const paddedNum = normalizePhaseName(phaseNumberPlan);
|
|
261
|
+
const slug = generateSlugInternal(phaseNamePlan).substring(0, 60);
|
|
262
|
+
if (slug) {
|
|
263
|
+
const prefix = rawProjectCodePlan ? `${rawProjectCodePlan}-` : '';
|
|
264
|
+
const dirName = `${prefix}${paddedNum}-${slug}`;
|
|
265
|
+
expectedPhaseDirPlan = toPosixPath(path.relative(cwd, path.join(planningPaths(cwd).phases, dirName)));
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
|
|
207
269
|
const result = {
|
|
208
270
|
// Models
|
|
209
271
|
researcher_model: resolveModelInternal(cwd, 'sdd-phase-researcher'),
|
|
@@ -211,21 +273,43 @@ function cmdInitPlanPhase(cwd, phase, raw, options = {}) {
|
|
|
211
273
|
checker_model: resolveModelInternal(cwd, 'sdd-plan-checker'),
|
|
212
274
|
|
|
213
275
|
// Workflow flags
|
|
276
|
+
tdd_mode: options.tdd || config.tdd_mode || false,
|
|
214
277
|
research_enabled: config.research,
|
|
215
278
|
plan_checker_enabled: config.plan_checker,
|
|
216
279
|
nyquist_validation_enabled: config.nyquist_validation,
|
|
217
280
|
commit_docs: config.commit_docs,
|
|
218
281
|
text_mode: config.text_mode,
|
|
282
|
+
// Auto-advance config — included so workflows don't need separate config-get
|
|
283
|
+
// calls for these values, which causes infinite config-read loops on some models
|
|
284
|
+
// (e.g. Kimi K2.5). See #2192.
|
|
285
|
+
auto_advance: !!(config.auto_advance),
|
|
286
|
+
auto_chain_active: !!(config._auto_chain_active),
|
|
287
|
+
mode: config.mode || 'interactive',
|
|
219
288
|
|
|
220
289
|
// Phase info
|
|
221
290
|
phase_found: !!phaseInfo,
|
|
222
|
-
phase_dir:
|
|
223
|
-
|
|
224
|
-
|
|
291
|
+
phase_dir: phaseDirPlan,
|
|
292
|
+
expected_phase_dir: expectedPhaseDirPlan,
|
|
293
|
+
phase_number: phaseNumberPlan,
|
|
294
|
+
phase_name: phaseNamePlan,
|
|
225
295
|
phase_slug: phaseInfo?.phase_slug || null,
|
|
226
|
-
padded_phase:
|
|
296
|
+
padded_phase: phaseNumberPlan ? normalizePhaseName(phaseNumberPlan) : null,
|
|
227
297
|
phase_req_ids,
|
|
228
298
|
|
|
299
|
+
// #3569: surface phase lifecycle status so /sdd:plan-phase can short-circuit
|
|
300
|
+
// on closed (Complete) phases instead of silently replanning over shipped
|
|
301
|
+
// code. Reuses determinePhaseStatus — the project-wide vocabulary
|
|
302
|
+
// (Pending | Planned | In Progress | Executed | Complete | Needs Review).
|
|
303
|
+
// No directory yet → Pending (phase has not been started).
|
|
304
|
+
phase_status: phaseDirPlan
|
|
305
|
+
? determinePhaseStatus(
|
|
306
|
+
phaseInfo?.plans?.length || 0,
|
|
307
|
+
phaseInfo?.summaries?.length || 0,
|
|
308
|
+
path.join(cwd, phaseDirPlan),
|
|
309
|
+
'Pending',
|
|
310
|
+
)
|
|
311
|
+
: 'Pending',
|
|
312
|
+
|
|
229
313
|
// Existing artifacts
|
|
230
314
|
has_research: phaseInfo?.has_research || false,
|
|
231
315
|
has_context: phaseInfo?.has_context || false,
|
|
@@ -241,6 +325,9 @@ function cmdInitPlanPhase(cwd, phase, raw, options = {}) {
|
|
|
241
325
|
state_path: toPosixPath(path.relative(cwd, path.join(planningDir(cwd), 'STATE.md'))),
|
|
242
326
|
roadmap_path: toPosixPath(path.relative(cwd, path.join(planningDir(cwd), 'ROADMAP.md'))),
|
|
243
327
|
requirements_path: toPosixPath(path.relative(cwd, path.join(planningDir(cwd), 'REQUIREMENTS.md'))),
|
|
328
|
+
|
|
329
|
+
// Pattern mapper output (null until PATTERNS.md exists in phase dir)
|
|
330
|
+
patterns_path: null,
|
|
244
331
|
};
|
|
245
332
|
|
|
246
333
|
if (phaseInfo?.directory) {
|
|
@@ -268,6 +355,10 @@ function cmdInitPlanPhase(cwd, phase, raw, options = {}) {
|
|
|
268
355
|
if (reviewsFile) {
|
|
269
356
|
result.reviews_path = toPosixPath(path.join(phaseInfo.directory, reviewsFile));
|
|
270
357
|
}
|
|
358
|
+
const patternsFile = files.find(f => f.endsWith('-PATTERNS.md') || f === 'PATTERNS.md');
|
|
359
|
+
if (patternsFile) {
|
|
360
|
+
result.patterns_path = toPosixPath(path.join(phaseInfo.directory, patternsFile));
|
|
361
|
+
}
|
|
271
362
|
} catch { /* intentionally empty */ }
|
|
272
363
|
}
|
|
273
364
|
|
|
@@ -275,9 +366,8 @@ function cmdInitPlanPhase(cwd, phase, raw, options = {}) {
|
|
|
275
366
|
if (options.validate) {
|
|
276
367
|
try {
|
|
277
368
|
const statePath = path.join(planningDir(cwd), 'STATE.md');
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
const stateContent = fs.readFileSync(statePath, 'utf-8');
|
|
369
|
+
const stateContent = platformReadSync(statePath);
|
|
370
|
+
if (stateContent !== null) {
|
|
281
371
|
const warnings = [];
|
|
282
372
|
result.state_validation_ran = true;
|
|
283
373
|
const totalPlansRaw = stateExtractField(stateContent, 'Total Plans in Phase');
|
|
@@ -383,8 +473,17 @@ function cmdInitNewProject(cwd, raw) {
|
|
|
383
473
|
is_brownfield: hasCode || hasPackageFile,
|
|
384
474
|
needs_codebase_map: (hasCode || hasPackageFile) && !pathExistsInternal(cwd, '.planning/codebase'),
|
|
385
475
|
|
|
386
|
-
// Git state
|
|
387
|
-
|
|
476
|
+
// Git state (Bug #3491: detect parent worktree to avoid nested .git init)
|
|
477
|
+
...(() => {
|
|
478
|
+
const info = gitWorktreeInfoInternal(cwd);
|
|
479
|
+
const worktreeRoot = info.worktreeRoot;
|
|
480
|
+
const inNestedSubdir = info.inside && worktreeRoot !== null && worktreeRoot !== cwd;
|
|
481
|
+
return {
|
|
482
|
+
has_git: info.inside,
|
|
483
|
+
git_worktree_root: worktreeRoot,
|
|
484
|
+
in_nested_subdir: inNestedSubdir,
|
|
485
|
+
};
|
|
486
|
+
})(),
|
|
388
487
|
|
|
389
488
|
// Enhanced search
|
|
390
489
|
brave_search_available: hasBraveSearch,
|
|
@@ -407,8 +506,11 @@ function cmdInitNewMilestone(cwd, raw) {
|
|
|
407
506
|
|
|
408
507
|
try {
|
|
409
508
|
if (fs.existsSync(phasesDir)) {
|
|
509
|
+
// Bug #2445: filter phase dirs to current milestone only so stale dirs
|
|
510
|
+
// from a prior milestone that were not archived don't inflate the count.
|
|
511
|
+
const isDirInMilestone = getMilestonePhaseFilter(cwd);
|
|
410
512
|
phaseDirCount = fs.readdirSync(phasesDir, { withFileTypes: true })
|
|
411
|
-
.filter(entry => entry.isDirectory())
|
|
513
|
+
.filter(entry => entry.isDirectory() && isDirInMilestone(entry.name))
|
|
412
514
|
.length;
|
|
413
515
|
}
|
|
414
516
|
} catch {}
|
|
@@ -503,14 +605,42 @@ function cmdInitQuick(cwd, description, raw) {
|
|
|
503
605
|
output(withProjectRoot(cwd, result), raw);
|
|
504
606
|
}
|
|
505
607
|
|
|
608
|
+
/**
|
|
609
|
+
* Init handler for ingest-docs workflow (#2801).
|
|
610
|
+
*
|
|
611
|
+
* Returns the minimal set of fields that ingest-docs.md needs to detect
|
|
612
|
+
* whether a project/planning dir exists and choose new vs merge mode.
|
|
613
|
+
* Mirrors the initIngestDocs SDK handler in sdk/src/query/init.ts.
|
|
614
|
+
*/
|
|
615
|
+
function cmdInitIngestDocs(cwd, raw) {
|
|
616
|
+
const config = loadConfig(cwd);
|
|
617
|
+
const result = {
|
|
618
|
+
project_exists: pathExistsInternal(cwd, '.planning/PROJECT.md'),
|
|
619
|
+
planning_exists: fs.existsSync(planningRoot(cwd)),
|
|
620
|
+
...(() => {
|
|
621
|
+
// Bug #3491 — see cmdInitNewProject above. Same shallow-check bug.
|
|
622
|
+
const info = gitWorktreeInfoInternal(cwd);
|
|
623
|
+
const worktreeRoot = info.worktreeRoot;
|
|
624
|
+
const inNestedSubdir = info.inside && worktreeRoot !== null && worktreeRoot !== cwd;
|
|
625
|
+
return {
|
|
626
|
+
has_git: info.inside,
|
|
627
|
+
git_worktree_root: worktreeRoot,
|
|
628
|
+
in_nested_subdir: inNestedSubdir,
|
|
629
|
+
};
|
|
630
|
+
})(),
|
|
631
|
+
project_path: '.planning/PROJECT.md',
|
|
632
|
+
commit_docs: config.commit_docs,
|
|
633
|
+
};
|
|
634
|
+
output(withProjectRoot(cwd, result), raw);
|
|
635
|
+
}
|
|
636
|
+
|
|
506
637
|
function cmdInitResume(cwd, raw) {
|
|
507
638
|
const config = loadConfig(cwd);
|
|
508
639
|
|
|
509
640
|
// Check for interrupted agent
|
|
510
641
|
let interruptedAgentId = null;
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
} catch { /* intentionally empty */ }
|
|
642
|
+
const agentIdRaw = platformReadSync(path.join(planningRoot(cwd), 'current-agent-id.txt'));
|
|
643
|
+
if (agentIdRaw !== null) interruptedAgentId = agentIdRaw.trim();
|
|
514
644
|
|
|
515
645
|
const result = {
|
|
516
646
|
// File existence
|
|
@@ -543,6 +673,16 @@ function cmdInitVerifyWork(cwd, phase, raw) {
|
|
|
543
673
|
const config = loadConfig(cwd);
|
|
544
674
|
let phaseInfo = findPhaseInternal(cwd, phase);
|
|
545
675
|
|
|
676
|
+
// If findPhaseInternal matched an archived phase from a prior milestone, but
|
|
677
|
+
// the phase exists in the current milestone's ROADMAP.md, ignore the archive
|
|
678
|
+
// match — same pattern as cmdInitPhaseOp.
|
|
679
|
+
if (phaseInfo?.archived) {
|
|
680
|
+
const roadmapPhase = getRoadmapPhaseInternal(cwd, phase);
|
|
681
|
+
if (roadmapPhase?.found) {
|
|
682
|
+
phaseInfo = null;
|
|
683
|
+
}
|
|
684
|
+
}
|
|
685
|
+
|
|
546
686
|
// Fallback to ROADMAP.md if no phase directory exists yet
|
|
547
687
|
if (!phaseInfo) {
|
|
548
688
|
const roadmapPhase = getRoadmapPhaseInternal(cwd, phase);
|
|
@@ -633,20 +773,42 @@ function cmdInitPhaseOp(cwd, phase, raw) {
|
|
|
633
773
|
}
|
|
634
774
|
}
|
|
635
775
|
|
|
776
|
+
// #3287: compute the canonical directory name with project_code prefix so
|
|
777
|
+
// the first-touch mkdir in /sdd:discuss-phase stays consistent with phase.add.
|
|
778
|
+
const phaseDir = phaseInfo?.directory || null;
|
|
779
|
+
const phaseNumber = phaseInfo?.phase_number || null;
|
|
780
|
+
const phaseName = phaseInfo?.phase_name || null;
|
|
781
|
+
const rawProjectCode = config.project_code || '';
|
|
782
|
+
let expectedPhaseDir = null;
|
|
783
|
+
if (!phaseDir && phaseNumber && phaseName) {
|
|
784
|
+
const paddedNum = normalizePhaseName(phaseNumber);
|
|
785
|
+
const slug = generateSlugInternal(phaseName).substring(0, 60);
|
|
786
|
+
if (slug) {
|
|
787
|
+
const prefix = rawProjectCode ? `${rawProjectCode}-` : '';
|
|
788
|
+
const dirName = `${prefix}${paddedNum}-${slug}`;
|
|
789
|
+
expectedPhaseDir = toPosixPath(path.relative(cwd, path.join(planningPaths(cwd).phases, dirName)));
|
|
790
|
+
}
|
|
791
|
+
}
|
|
792
|
+
|
|
636
793
|
const result = {
|
|
637
794
|
// Config
|
|
638
795
|
commit_docs: config.commit_docs,
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
796
|
+
// #2997: secret config keys may be either booleans (availability flags) or
|
|
797
|
+
// string API keys (when user did `sdd-tools config-set brave_search XXX`).
|
|
798
|
+
// Pass booleans through; mask string values so the init bundle never echoes
|
|
799
|
+
// plaintext credentials. SDK init.ts mirrors this masking.
|
|
800
|
+
brave_search: typeof config.brave_search === 'string' ? maskIfSecret('brave_search', config.brave_search) : config.brave_search,
|
|
801
|
+
firecrawl: typeof config.firecrawl === 'string' ? maskIfSecret('firecrawl', config.firecrawl) : config.firecrawl,
|
|
802
|
+
exa_search: typeof config.exa_search === 'string' ? maskIfSecret('exa_search', config.exa_search) : config.exa_search,
|
|
642
803
|
|
|
643
804
|
// Phase info
|
|
644
805
|
phase_found: !!phaseInfo,
|
|
645
|
-
phase_dir:
|
|
646
|
-
|
|
647
|
-
|
|
806
|
+
phase_dir: phaseDir,
|
|
807
|
+
expected_phase_dir: expectedPhaseDir,
|
|
808
|
+
phase_number: phaseNumber,
|
|
809
|
+
phase_name: phaseName,
|
|
648
810
|
phase_slug: phaseInfo?.phase_slug || null,
|
|
649
|
-
padded_phase:
|
|
811
|
+
padded_phase: phaseNumber ? normalizePhaseName(phaseNumber) : null,
|
|
650
812
|
|
|
651
813
|
// Existing artifacts
|
|
652
814
|
has_research: phaseInfo?.has_research || false,
|
|
@@ -708,8 +870,9 @@ function cmdInitTodos(cwd, area, raw) {
|
|
|
708
870
|
try {
|
|
709
871
|
const files = fs.readdirSync(pendingDir).filter(f => f.endsWith('.md'));
|
|
710
872
|
for (const file of files) {
|
|
873
|
+
const content = platformReadSync(path.join(pendingDir, file));
|
|
874
|
+
if (content === null) continue;
|
|
711
875
|
try {
|
|
712
|
-
const content = fs.readFileSync(path.join(pendingDir, file), 'utf-8');
|
|
713
876
|
const createdMatch = content.match(/^created:\s*(.+)$/m);
|
|
714
877
|
const titleMatch = content.match(/^title:\s*(.+)$/m);
|
|
715
878
|
const areaMatch = content.match(/^area:\s*(.+)$/m);
|
|
@@ -763,20 +926,68 @@ function cmdInitMilestoneOp(cwd, raw) {
|
|
|
763
926
|
let phaseCount = 0;
|
|
764
927
|
let completedPhases = 0;
|
|
765
928
|
const phasesDir = path.join(planningDir(cwd), 'phases');
|
|
929
|
+
|
|
930
|
+
// Bug #2633 — ROADMAP.md (current milestone section) is the authority for
|
|
931
|
+
// phase counts, NOT the on-disk `.planning/phases/` directory. After
|
|
932
|
+
// `phases clear` between milestones, on-disk dirs will be a subset of the
|
|
933
|
+
// roadmap until each phase is materialized; reading from disk causes
|
|
934
|
+
// `all_phases_complete: true` to fire prematurely.
|
|
935
|
+
let roadmapPhaseNumbers = [];
|
|
936
|
+
try {
|
|
937
|
+
const roadmapPath = path.join(planningDir(cwd), 'ROADMAP.md');
|
|
938
|
+
const roadmapRaw = fs.readFileSync(roadmapPath, 'utf-8');
|
|
939
|
+
const currentSection = extractCurrentMilestone(roadmapRaw, cwd);
|
|
940
|
+
const phasePattern = /#{2,4}\s*Phase\s+(\d+[A-Z]?(?:\.\d+)*)\s*:/gi;
|
|
941
|
+
let m;
|
|
942
|
+
while ((m = phasePattern.exec(currentSection)) !== null) {
|
|
943
|
+
roadmapPhaseNumbers.push(m[1]);
|
|
944
|
+
}
|
|
945
|
+
} catch { /* intentionally empty */ }
|
|
946
|
+
|
|
947
|
+
// Canonicalize a phase token by stripping leading zeros from the integer
|
|
948
|
+
// head while preserving any [A-Z]? suffix and dotted segments. So "03" →
|
|
949
|
+
// "3", "03A" → "3A", "03.1" → "3.1", "3A" → "3A". Disk dirs that pad
|
|
950
|
+
// ("03-alpha") then match roadmap tokens ("Phase 3") without ever
|
|
951
|
+
// collapsing distinct tokens like "3" / "3A" / "3.1" into the same bucket.
|
|
952
|
+
const canonicalizePhase = (tok) => {
|
|
953
|
+
const m = tok.match(/^(\d+)([A-Z]?(?:\.\d+)*)$/);
|
|
954
|
+
return m ? String(parseInt(m[1], 10)) + m[2] : tok;
|
|
955
|
+
};
|
|
956
|
+
const diskPhaseDirs = new Map();
|
|
766
957
|
try {
|
|
767
958
|
const entries = fs.readdirSync(phasesDir, { withFileTypes: true });
|
|
768
|
-
const
|
|
769
|
-
|
|
959
|
+
for (const e of entries) {
|
|
960
|
+
if (!e.isDirectory()) continue;
|
|
961
|
+
const m = e.name.match(/^(\d+[A-Z]?(?:\.\d+)*)/);
|
|
962
|
+
if (!m) continue;
|
|
963
|
+
diskPhaseDirs.set(canonicalizePhase(m[1]), e.name);
|
|
964
|
+
}
|
|
965
|
+
} catch { /* intentionally empty */ }
|
|
770
966
|
|
|
771
|
-
|
|
772
|
-
|
|
967
|
+
if (roadmapPhaseNumbers.length > 0) {
|
|
968
|
+
phaseCount = roadmapPhaseNumbers.length;
|
|
969
|
+
for (const num of roadmapPhaseNumbers) {
|
|
970
|
+
const dirName = diskPhaseDirs.get(canonicalizePhase(num));
|
|
971
|
+
if (!dirName) continue;
|
|
773
972
|
try {
|
|
774
|
-
const
|
|
775
|
-
const hasSummary = phaseFiles.some(f => f.endsWith('-SUMMARY.md') || f === 'SUMMARY.md');
|
|
973
|
+
const hasSummary = listPhaseSummaryFiles(path.join(phasesDir, dirName)).length > 0;
|
|
776
974
|
if (hasSummary) completedPhases++;
|
|
777
975
|
} catch { /* intentionally empty */ }
|
|
778
976
|
}
|
|
779
|
-
}
|
|
977
|
+
} else {
|
|
978
|
+
// Fallback: no parseable ROADMAP — preserve legacy on-disk behavior.
|
|
979
|
+
try {
|
|
980
|
+
const entries = fs.readdirSync(phasesDir, { withFileTypes: true });
|
|
981
|
+
const dirs = entries.filter(e => e.isDirectory()).map(e => e.name);
|
|
982
|
+
phaseCount = dirs.length;
|
|
983
|
+
for (const dir of dirs) {
|
|
984
|
+
try {
|
|
985
|
+
const hasSummary = listPhaseSummaryFiles(path.join(phasesDir, dir)).length > 0;
|
|
986
|
+
if (hasSummary) completedPhases++;
|
|
987
|
+
} catch { /* intentionally empty */ }
|
|
988
|
+
}
|
|
989
|
+
} catch { /* intentionally empty */ }
|
|
990
|
+
}
|
|
780
991
|
|
|
781
992
|
// Check archive
|
|
782
993
|
const archiveDir = path.join(planningRoot(cwd), 'archive');
|
|
@@ -818,6 +1029,7 @@ function cmdInitMilestoneOp(cwd, raw) {
|
|
|
818
1029
|
|
|
819
1030
|
function cmdInitMapCodebase(cwd, raw) {
|
|
820
1031
|
const config = loadConfig(cwd);
|
|
1032
|
+
const now = new Date();
|
|
821
1033
|
|
|
822
1034
|
// Check for existing codebase maps
|
|
823
1035
|
const codebaseDir = path.join(planningRoot(cwd), 'codebase');
|
|
@@ -836,6 +1048,10 @@ function cmdInitMapCodebase(cwd, raw) {
|
|
|
836
1048
|
parallelization: config.parallelization,
|
|
837
1049
|
subagent_timeout: config.subagent_timeout,
|
|
838
1050
|
|
|
1051
|
+
// Timestamps
|
|
1052
|
+
date: now.toISOString().split('T')[0],
|
|
1053
|
+
timestamp: now.toISOString(),
|
|
1054
|
+
|
|
839
1055
|
// Paths
|
|
840
1056
|
codebase_dir: '.planning/codebase',
|
|
841
1057
|
|
|
@@ -860,10 +1076,10 @@ function cmdInitManager(cwd, raw) {
|
|
|
860
1076
|
|
|
861
1077
|
// Validate prerequisites
|
|
862
1078
|
if (!fs.existsSync(paths.roadmap)) {
|
|
863
|
-
error('No ROADMAP.md found. Run /sdd
|
|
1079
|
+
error('No ROADMAP.md found. Run /sdd:new-milestone first.');
|
|
864
1080
|
}
|
|
865
1081
|
if (!fs.existsSync(paths.state)) {
|
|
866
|
-
error('No STATE.md found. Run /sdd
|
|
1082
|
+
error('No STATE.md found. Run /sdd:new-milestone first.');
|
|
867
1083
|
}
|
|
868
1084
|
const rawContent = fs.readFileSync(paths.roadmap, 'utf-8');
|
|
869
1085
|
const content = extractCurrentMilestone(rawContent, cwd);
|
|
@@ -923,8 +1139,8 @@ function cmdInitManager(cwd, raw) {
|
|
|
923
1139
|
if (dirMatch) {
|
|
924
1140
|
const fullDir = path.join(phasesDir, dirMatch);
|
|
925
1141
|
const phaseFiles = fs.readdirSync(fullDir);
|
|
926
|
-
planCount =
|
|
927
|
-
summaryCount =
|
|
1142
|
+
planCount = listPhasePlanFiles(fullDir).length;
|
|
1143
|
+
summaryCount = listPhaseSummaryFiles(fullDir).length;
|
|
928
1144
|
hasContext = phaseFiles.some(f => f.endsWith('-CONTEXT.md') || f === 'CONTEXT.md');
|
|
929
1145
|
hasResearch = phaseFiles.some(f => f.endsWith('-RESEARCH.md') || f === 'RESEARCH.md');
|
|
930
1146
|
|
|
@@ -985,6 +1201,17 @@ function cmdInitManager(cwd, raw) {
|
|
|
985
1201
|
|
|
986
1202
|
// Dependency satisfaction: check if all depends_on phases are complete
|
|
987
1203
|
const completedNums = new Set(phases.filter(p => p.disk_status === 'complete').map(p => p.number));
|
|
1204
|
+
|
|
1205
|
+
// Also include phases from previously shipped milestones — they are all
|
|
1206
|
+
// complete by definition (a milestone only ships when all phases are done).
|
|
1207
|
+
// rawContent is the full ROADMAP.md (including <details>-wrapped shipped
|
|
1208
|
+
// milestone sections that extractCurrentMilestone strips out).
|
|
1209
|
+
const _allCompletedPattern = /-\s*\[x\]\s*.*Phase\s+(\d+[A-Z]?(?:\.\d+)*)[:\s]/gi;
|
|
1210
|
+
let _allMatch;
|
|
1211
|
+
while ((_allMatch = _allCompletedPattern.exec(rawContent)) !== null) {
|
|
1212
|
+
completedNums.add(_allMatch[1]);
|
|
1213
|
+
}
|
|
1214
|
+
|
|
988
1215
|
for (const phase of phases) {
|
|
989
1216
|
if (!phase.depends_on || /^none$/i.test(phase.depends_on.trim())) {
|
|
990
1217
|
phase.deps_satisfied = true;
|
|
@@ -1003,23 +1230,19 @@ function cmdInitManager(cwd, raw) {
|
|
|
1003
1230
|
: '—';
|
|
1004
1231
|
}
|
|
1005
1232
|
|
|
1006
|
-
// Sliding window: discuss is sequential — only the first undiscussed phase is available
|
|
1007
|
-
let foundNextToDiscuss = false;
|
|
1008
1233
|
for (const phase of phases) {
|
|
1009
|
-
|
|
1010
|
-
phase.
|
|
1011
|
-
|
|
1012
|
-
} else {
|
|
1013
|
-
phase.is_next_to_discuss = false;
|
|
1014
|
-
}
|
|
1234
|
+
phase.is_next_to_discuss =
|
|
1235
|
+
(phase.disk_status === 'empty' || phase.disk_status === 'no_directory') &&
|
|
1236
|
+
phase.deps_satisfied;
|
|
1015
1237
|
}
|
|
1016
1238
|
|
|
1017
1239
|
// Check for WAITING.json signal
|
|
1018
1240
|
let waitingSignal = null;
|
|
1019
1241
|
try {
|
|
1020
1242
|
const waitingPath = path.join(cwd, '.planning', 'WAITING.json');
|
|
1021
|
-
|
|
1022
|
-
|
|
1243
|
+
const waitingRaw = platformReadSync(waitingPath);
|
|
1244
|
+
if (waitingRaw !== null) {
|
|
1245
|
+
waitingSignal = JSON.parse(waitingRaw);
|
|
1023
1246
|
}
|
|
1024
1247
|
} catch { /* intentionally empty */ }
|
|
1025
1248
|
|
|
@@ -1036,7 +1259,7 @@ function cmdInitManager(cwd, raw) {
|
|
|
1036
1259
|
phase_name: phase.name,
|
|
1037
1260
|
action: 'execute',
|
|
1038
1261
|
reason: `${phase.plan_count} plans ready, dependencies met`,
|
|
1039
|
-
command: `/sdd
|
|
1262
|
+
command: `/sdd:execute-phase ${phase.number}`,
|
|
1040
1263
|
});
|
|
1041
1264
|
} else if (phase.disk_status === 'discussed' || phase.disk_status === 'researched') {
|
|
1042
1265
|
recommendedActions.push({
|
|
@@ -1044,7 +1267,7 @@ function cmdInitManager(cwd, raw) {
|
|
|
1044
1267
|
phase_name: phase.name,
|
|
1045
1268
|
action: 'plan',
|
|
1046
1269
|
reason: 'Context gathered, ready for planning',
|
|
1047
|
-
command: `/sdd
|
|
1270
|
+
command: `/sdd:plan-phase ${phase.number}`,
|
|
1048
1271
|
});
|
|
1049
1272
|
} else if ((phase.disk_status === 'empty' || phase.disk_status === 'no_directory') && phase.is_next_to_discuss) {
|
|
1050
1273
|
recommendedActions.push({
|
|
@@ -1052,7 +1275,7 @@ function cmdInitManager(cwd, raw) {
|
|
|
1052
1275
|
phase_name: phase.name,
|
|
1053
1276
|
action: 'discuss',
|
|
1054
1277
|
reason: 'Unblocked, ready to gather context',
|
|
1055
|
-
command: `/sdd
|
|
1278
|
+
command: `/sdd:discuss-phase ${phase.number}`,
|
|
1056
1279
|
});
|
|
1057
1280
|
}
|
|
1058
1281
|
}
|
|
@@ -1095,7 +1318,9 @@ function cmdInitManager(cwd, raw) {
|
|
|
1095
1318
|
return true;
|
|
1096
1319
|
});
|
|
1097
1320
|
|
|
1098
|
-
|
|
1321
|
+
// Exclude backlog phases (999.x) from completion accounting (#2129)
|
|
1322
|
+
const nonBacklogPhases = phases.filter(p => !/^999(?:\.|$)/.test(p.number));
|
|
1323
|
+
const completedCount = nonBacklogPhases.filter(p => p.disk_status === 'complete').length;
|
|
1099
1324
|
|
|
1100
1325
|
// Read manager flags from config (passthrough flags for each step)
|
|
1101
1326
|
// Validate: flags must be CLI-safe (only --flags, alphanumeric, hyphens, spaces)
|
|
@@ -1126,7 +1351,7 @@ function cmdInitManager(cwd, raw) {
|
|
|
1126
1351
|
in_progress_count: phases.filter(p => ['partial', 'planned', 'discussed', 'researched'].includes(p.disk_status)).length,
|
|
1127
1352
|
recommended_actions: filteredActions,
|
|
1128
1353
|
waiting_signal: waitingSignal,
|
|
1129
|
-
all_complete: completedCount ===
|
|
1354
|
+
all_complete: completedCount === nonBacklogPhases.length && nonBacklogPhases.length > 0,
|
|
1130
1355
|
project_exists: pathExistsInternal(cwd, '.planning/PROJECT.md'),
|
|
1131
1356
|
roadmap_exists: true,
|
|
1132
1357
|
state_exists: true,
|
|
@@ -1137,6 +1362,10 @@ function cmdInitManager(cwd, raw) {
|
|
|
1137
1362
|
}
|
|
1138
1363
|
|
|
1139
1364
|
function cmdInitProgress(cwd, raw) {
|
|
1365
|
+
try {
|
|
1366
|
+
const { pruneOrphanedWorktrees } = require('./core.cjs');
|
|
1367
|
+
pruneOrphanedWorktrees(cwd);
|
|
1368
|
+
} catch (_) {}
|
|
1140
1369
|
const config = loadConfig(cwd);
|
|
1141
1370
|
const milestone = getMilestoneInfo(cwd);
|
|
1142
1371
|
|
|
@@ -1149,6 +1378,7 @@ function cmdInitProgress(cwd, raw) {
|
|
|
1149
1378
|
// Build set of phases defined in ROADMAP for the current milestone
|
|
1150
1379
|
const roadmapPhaseNums = new Set();
|
|
1151
1380
|
const roadmapPhaseNames = new Map();
|
|
1381
|
+
const roadmapCheckboxStates = new Map();
|
|
1152
1382
|
try {
|
|
1153
1383
|
const roadmapContent = extractCurrentMilestone(
|
|
1154
1384
|
fs.readFileSync(path.join(planningDir(cwd), 'ROADMAP.md'), 'utf-8'), cwd
|
|
@@ -1159,6 +1389,13 @@ function cmdInitProgress(cwd, raw) {
|
|
|
1159
1389
|
roadmapPhaseNums.add(hm[1]);
|
|
1160
1390
|
roadmapPhaseNames.set(hm[1], hm[2].replace(/\(INSERTED\)/i, '').trim());
|
|
1161
1391
|
}
|
|
1392
|
+
// #2646: parse `- [x] Phase N` checkbox states so ROADMAP-only phases
|
|
1393
|
+
// inherit completion from the ROADMAP when no phase directory exists.
|
|
1394
|
+
const cbPattern = /-\s*\[(x| )\]\s*.*Phase\s+(\d+[A-Z]?(?:\.\d+)*)[:\s]/gi;
|
|
1395
|
+
let cbm;
|
|
1396
|
+
while ((cbm = cbPattern.exec(roadmapContent)) !== null) {
|
|
1397
|
+
roadmapCheckboxStates.set(cbm[2], cbm[1].toLowerCase() === 'x');
|
|
1398
|
+
}
|
|
1162
1399
|
} catch { /* intentionally empty */ }
|
|
1163
1400
|
|
|
1164
1401
|
const isDirInMilestone = getMilestonePhaseFilter(cwd);
|
|
@@ -1184,8 +1421,8 @@ function cmdInitProgress(cwd, raw) {
|
|
|
1184
1421
|
const phasePath = path.join(phasesDir, dir);
|
|
1185
1422
|
const phaseFiles = fs.readdirSync(phasePath);
|
|
1186
1423
|
|
|
1187
|
-
const plans =
|
|
1188
|
-
const summaries =
|
|
1424
|
+
const plans = listPhasePlanFiles(phasePath);
|
|
1425
|
+
const summaries = listPhaseSummaryFiles(phasePath);
|
|
1189
1426
|
const hasResearch = phaseFiles.some(f => f.endsWith('-RESEARCH.md') || f === 'RESEARCH.md');
|
|
1190
1427
|
|
|
1191
1428
|
const status = summaries.length >= plans.length && plans.length > 0 ? 'complete' :
|
|
@@ -1214,21 +1451,27 @@ function cmdInitProgress(cwd, raw) {
|
|
|
1214
1451
|
}
|
|
1215
1452
|
} catch { /* intentionally empty */ }
|
|
1216
1453
|
|
|
1217
|
-
// Add phases defined in ROADMAP but not yet scaffolded to disk
|
|
1454
|
+
// Add phases defined in ROADMAP but not yet scaffolded to disk. When the
|
|
1455
|
+
// ROADMAP has a `- [x] Phase N` checkbox, honor it as 'complete' so
|
|
1456
|
+
// completed_count and status reflect the ROADMAP source of truth (#2646).
|
|
1218
1457
|
for (const [num, name] of roadmapPhaseNames) {
|
|
1219
1458
|
const stripped = num.replace(/^0+/, '') || '0';
|
|
1220
1459
|
if (!seenPhaseNums.has(stripped)) {
|
|
1460
|
+
const checkboxComplete =
|
|
1461
|
+
roadmapCheckboxStates.get(num) === true ||
|
|
1462
|
+
roadmapCheckboxStates.get(stripped) === true;
|
|
1463
|
+
const status = checkboxComplete ? 'complete' : 'not_started';
|
|
1221
1464
|
const phaseInfo = {
|
|
1222
1465
|
number: num,
|
|
1223
1466
|
name: name.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-+|-+$/g, ''),
|
|
1224
1467
|
directory: null,
|
|
1225
|
-
status
|
|
1468
|
+
status,
|
|
1226
1469
|
plan_count: 0,
|
|
1227
1470
|
summary_count: 0,
|
|
1228
1471
|
has_research: false,
|
|
1229
1472
|
};
|
|
1230
1473
|
phases.push(phaseInfo);
|
|
1231
|
-
if (!nextPhase && !currentPhase) {
|
|
1474
|
+
if (!nextPhase && !currentPhase && status !== 'complete') {
|
|
1232
1475
|
nextPhase = phaseInfo;
|
|
1233
1476
|
}
|
|
1234
1477
|
}
|
|
@@ -1239,11 +1482,11 @@ function cmdInitProgress(cwd, raw) {
|
|
|
1239
1482
|
|
|
1240
1483
|
// Check for paused work
|
|
1241
1484
|
let pausedAt = null;
|
|
1242
|
-
|
|
1243
|
-
|
|
1485
|
+
const state = platformReadSync(path.join(planningDir(cwd), 'STATE.md'));
|
|
1486
|
+
if (state !== null) {
|
|
1244
1487
|
const pauseMatch = state.match(/\*\*Paused At:\*\*\s*(.+)/);
|
|
1245
1488
|
if (pauseMatch) pausedAt = pauseMatch[1].trim();
|
|
1246
|
-
}
|
|
1489
|
+
}
|
|
1247
1490
|
|
|
1248
1491
|
const result = {
|
|
1249
1492
|
// Models
|
|
@@ -1297,11 +1540,8 @@ function detectChildRepos(dir) {
|
|
|
1297
1540
|
const fullPath = path.join(dir, entry.name);
|
|
1298
1541
|
const gitDir = path.join(fullPath, '.git');
|
|
1299
1542
|
if (fs.existsSync(gitDir)) {
|
|
1300
|
-
|
|
1301
|
-
|
|
1302
|
-
const status = execSync('git status --porcelain', { cwd: fullPath, encoding: 'utf8', timeout: 5000 });
|
|
1303
|
-
hasUncommitted = status.trim().length > 0;
|
|
1304
|
-
} catch { /* best-effort */ }
|
|
1543
|
+
const statusResult = execGit(['status', '--porcelain'], { cwd: fullPath, timeout: 5000 });
|
|
1544
|
+
const hasUncommitted = statusResult.exitCode === 0 && statusResult.stdout.length > 0;
|
|
1305
1545
|
repos.push({ name: entry.name, path: fullPath, has_uncommitted: hasUncommitted });
|
|
1306
1546
|
}
|
|
1307
1547
|
}
|
|
@@ -1316,11 +1556,8 @@ function cmdInitNewWorkspace(cwd, raw) {
|
|
|
1316
1556
|
const childRepos = detectChildRepos(cwd);
|
|
1317
1557
|
|
|
1318
1558
|
// Check if git worktree is available
|
|
1319
|
-
|
|
1320
|
-
|
|
1321
|
-
execSync('git --version', { encoding: 'utf8', timeout: 5000, stdio: 'pipe' });
|
|
1322
|
-
worktreeAvailable = true;
|
|
1323
|
-
} catch { /* no git at all */ }
|
|
1559
|
+
const gitVersion = execGit(['--version'], { timeout: 5000 });
|
|
1560
|
+
const worktreeAvailable = gitVersion.exitCode === 0;
|
|
1324
1561
|
|
|
1325
1562
|
const result = {
|
|
1326
1563
|
default_workspace_base: defaultBase,
|
|
@@ -1351,14 +1588,14 @@ function cmdInitListWorkspaces(cwd, raw) {
|
|
|
1351
1588
|
let repoCount = 0;
|
|
1352
1589
|
let hasProject = false;
|
|
1353
1590
|
let strategy = 'unknown';
|
|
1354
|
-
|
|
1355
|
-
|
|
1591
|
+
const manifest = platformReadSync(manifestPath);
|
|
1592
|
+
if (manifest !== null) {
|
|
1356
1593
|
const strategyMatch = manifest.match(/^Strategy:\s*(.+)$/m);
|
|
1357
1594
|
if (strategyMatch) strategy = strategyMatch[1].trim();
|
|
1358
1595
|
// Count table rows (lines starting with |, excluding header and separator)
|
|
1359
1596
|
const tableRows = manifest.split('\n').filter(l => l.match(/^\|\s*\w/) && !l.includes('Repo') && !l.includes('---'));
|
|
1360
1597
|
repoCount = tableRows.length;
|
|
1361
|
-
}
|
|
1598
|
+
}
|
|
1362
1599
|
hasProject = fs.existsSync(path.join(wsPath, '.planning', 'PROJECT.md'));
|
|
1363
1600
|
|
|
1364
1601
|
workspaces.push({
|
|
@@ -1398,9 +1635,10 @@ function cmdInitRemoveWorkspace(cwd, name, raw) {
|
|
|
1398
1635
|
// Parse manifest for repo info
|
|
1399
1636
|
const repos = [];
|
|
1400
1637
|
let strategy = 'unknown';
|
|
1401
|
-
|
|
1638
|
+
const manifestContent = platformReadSync(manifestPath);
|
|
1639
|
+
if (manifestContent !== null) {
|
|
1402
1640
|
try {
|
|
1403
|
-
const manifest =
|
|
1641
|
+
const manifest = manifestContent;
|
|
1404
1642
|
const strategyMatch = manifest.match(/^Strategy:\s*(.+)$/m);
|
|
1405
1643
|
if (strategyMatch) strategy = strategyMatch[1].trim();
|
|
1406
1644
|
|
|
@@ -1420,12 +1658,10 @@ function cmdInitRemoveWorkspace(cwd, name, raw) {
|
|
|
1420
1658
|
for (const repo of repos) {
|
|
1421
1659
|
const repoPath = path.join(wsPath, repo.name);
|
|
1422
1660
|
if (!fs.existsSync(repoPath)) continue;
|
|
1423
|
-
|
|
1424
|
-
|
|
1425
|
-
|
|
1426
|
-
|
|
1427
|
-
}
|
|
1428
|
-
} catch { /* best-effort */ }
|
|
1661
|
+
const statusResult = execGit(['status', '--porcelain'], { cwd: repoPath, timeout: 5000 });
|
|
1662
|
+
if (statusResult.exitCode === 0 && statusResult.stdout.length > 0) {
|
|
1663
|
+
dirtyRepos.push(repo.name);
|
|
1664
|
+
}
|
|
1429
1665
|
}
|
|
1430
1666
|
|
|
1431
1667
|
const result = {
|
|
@@ -1456,6 +1692,10 @@ function cmdInitRemoveWorkspace(cwd, name, raw) {
|
|
|
1456
1692
|
*/
|
|
1457
1693
|
function buildAgentSkillsBlock(config, agentType, projectRoot) {
|
|
1458
1694
|
const { validatePath } = require('./security.cjs');
|
|
1695
|
+
const os = require('os');
|
|
1696
|
+
const { getGlobalSkillDir, getGlobalSkillDisplayPath } = require('./runtime-homes.cjs');
|
|
1697
|
+
const runtime = (config && config.runtime) || 'claude';
|
|
1698
|
+
const globalSkillsBase = require('./runtime-homes.cjs').getGlobalSkillsBase(runtime);
|
|
1459
1699
|
|
|
1460
1700
|
if (!config || !config.agent_skills || !agentType) return '';
|
|
1461
1701
|
|
|
@@ -1470,6 +1710,43 @@ function buildAgentSkillsBlock(config, agentType, projectRoot) {
|
|
|
1470
1710
|
for (const skillPath of skillPaths) {
|
|
1471
1711
|
if (typeof skillPath !== 'string') continue;
|
|
1472
1712
|
|
|
1713
|
+
// Support global: prefix for skills installed at the runtime's global skills directory (#1992, #3126)
|
|
1714
|
+
if (skillPath.startsWith('global:')) {
|
|
1715
|
+
const skillName = skillPath.slice(7);
|
|
1716
|
+
// Explicit empty-name guard before regex for clearer error message
|
|
1717
|
+
if (!skillName) {
|
|
1718
|
+
process.stderr.write(`[agent-skills] WARNING: "global:" prefix with empty skill name — skipping\n`);
|
|
1719
|
+
continue;
|
|
1720
|
+
}
|
|
1721
|
+
// Sanitize: skill name must be alphanumeric, hyphens, or underscores only
|
|
1722
|
+
if (!/^[a-zA-Z0-9_-]+$/.test(skillName)) {
|
|
1723
|
+
process.stderr.write(`[agent-skills] WARNING: Invalid global skill name "${skillName}" — skipping\n`);
|
|
1724
|
+
continue;
|
|
1725
|
+
}
|
|
1726
|
+
// Cline is rules-based and has no global skills directory
|
|
1727
|
+
if (globalSkillsBase === null) {
|
|
1728
|
+
process.stderr.write(`[agent-skills] WARNING: Runtime "${runtime}" does not use a skills directory — "global:${skillName}" is not supported on this runtime\n`);
|
|
1729
|
+
continue;
|
|
1730
|
+
}
|
|
1731
|
+
const globalSkillDir = getGlobalSkillDir(runtime, skillName);
|
|
1732
|
+
const globalSkillMd = path.join(globalSkillDir, 'SKILL.md');
|
|
1733
|
+
const displayPath = getGlobalSkillDisplayPath(runtime, skillName);
|
|
1734
|
+
if (!fs.existsSync(globalSkillMd)) {
|
|
1735
|
+
process.stderr.write(`[agent-skills] WARNING: Global skill not found at "${displayPath}/SKILL.md" — skipping\n`);
|
|
1736
|
+
continue;
|
|
1737
|
+
}
|
|
1738
|
+
// Symlink escape guard: validatePath resolves symlinks and enforces
|
|
1739
|
+
// containment within globalSkillsBase. Prevents a skill directory
|
|
1740
|
+
// symlinked to an arbitrary location from being injected (#1992).
|
|
1741
|
+
const pathCheck = validatePath(globalSkillMd, globalSkillsBase, { allowAbsolute: true });
|
|
1742
|
+
if (!pathCheck.safe) {
|
|
1743
|
+
process.stderr.write(`[agent-skills] WARNING: Global skill "${skillName}" failed path check (symlink escape?) — skipping\n`);
|
|
1744
|
+
continue;
|
|
1745
|
+
}
|
|
1746
|
+
validPaths.push({ ref: `${globalSkillDir}/SKILL.md`, display: displayPath });
|
|
1747
|
+
continue;
|
|
1748
|
+
}
|
|
1749
|
+
|
|
1473
1750
|
// Validate path safety — must resolve within project root
|
|
1474
1751
|
const pathCheck = validatePath(skillPath, projectRoot);
|
|
1475
1752
|
if (!pathCheck.safe) {
|
|
@@ -1484,12 +1761,12 @@ function buildAgentSkillsBlock(config, agentType, projectRoot) {
|
|
|
1484
1761
|
continue;
|
|
1485
1762
|
}
|
|
1486
1763
|
|
|
1487
|
-
validPaths.push(skillPath);
|
|
1764
|
+
validPaths.push({ ref: `${skillPath}/SKILL.md`, display: skillPath });
|
|
1488
1765
|
}
|
|
1489
1766
|
|
|
1490
1767
|
if (validPaths.length === 0) return '';
|
|
1491
1768
|
|
|
1492
|
-
const lines = validPaths.map(p => `- @${p}
|
|
1769
|
+
const lines = validPaths.map(p => `- @${p.ref}`).join('\n');
|
|
1493
1770
|
return `<agent_skills>\nRead these user-configured skills:\n${lines}\n</agent_skills>`;
|
|
1494
1771
|
}
|
|
1495
1772
|
|
|
@@ -1513,12 +1790,234 @@ function cmdAgentSkills(cwd, agentType, raw) {
|
|
|
1513
1790
|
process.exit(0);
|
|
1514
1791
|
}
|
|
1515
1792
|
|
|
1793
|
+
/**
|
|
1794
|
+
* Generate a skill manifest from a skills directory.
|
|
1795
|
+
*
|
|
1796
|
+
* Scans the canonical skill discovery roots and returns a normalized
|
|
1797
|
+
* inventory object with discovered skills, root metadata, and installation
|
|
1798
|
+
* summary flags. A legacy `skillsDir` override is still accepted for focused
|
|
1799
|
+
* scans, but the default mode is multi-root discovery.
|
|
1800
|
+
*
|
|
1801
|
+
* @param {string} cwd - Project root directory
|
|
1802
|
+
* @param {string|null} [skillsDir] - Optional absolute path to a specific skills directory
|
|
1803
|
+
* @returns {{
|
|
1804
|
+
* skills: Array<{name: string, description: string, triggers: string[], path: string, file_path: string, root: string, scope: string, installed: boolean, deprecated: boolean}>,
|
|
1805
|
+
* roots: Array<{root: string, path: string, scope: string, present: boolean, skill_count?: number, command_count?: number, deprecated?: boolean}>,
|
|
1806
|
+
* installation: { sdd_skills_installed: boolean, legacy_claude_commands_installed: boolean },
|
|
1807
|
+
* counts: { skills: number, roots: number }
|
|
1808
|
+
* }}
|
|
1809
|
+
*/
|
|
1810
|
+
function buildSkillManifest(cwd, skillsDir = null) {
|
|
1811
|
+
const { extractFrontmatter } = require('./frontmatter.cjs');
|
|
1812
|
+
const { getGlobalSkillsBase } = require('./runtime-homes.cjs');
|
|
1813
|
+
const os = require('os');
|
|
1814
|
+
|
|
1815
|
+
const canonicalRoots = skillsDir ? [{
|
|
1816
|
+
root: path.resolve(skillsDir),
|
|
1817
|
+
path: path.resolve(skillsDir),
|
|
1818
|
+
scope: 'custom',
|
|
1819
|
+
present: fs.existsSync(skillsDir),
|
|
1820
|
+
kind: 'skills',
|
|
1821
|
+
}] : [
|
|
1822
|
+
{
|
|
1823
|
+
root: '.claude/skills',
|
|
1824
|
+
path: path.join(cwd, '.claude', 'skills'),
|
|
1825
|
+
scope: 'project',
|
|
1826
|
+
kind: 'skills',
|
|
1827
|
+
},
|
|
1828
|
+
{
|
|
1829
|
+
root: '.agents/skills',
|
|
1830
|
+
path: path.join(cwd, '.agents', 'skills'),
|
|
1831
|
+
scope: 'project',
|
|
1832
|
+
kind: 'skills',
|
|
1833
|
+
},
|
|
1834
|
+
{
|
|
1835
|
+
root: '.cursor/skills',
|
|
1836
|
+
path: path.join(cwd, '.cursor', 'skills'),
|
|
1837
|
+
scope: 'project',
|
|
1838
|
+
kind: 'skills',
|
|
1839
|
+
},
|
|
1840
|
+
{
|
|
1841
|
+
root: '.github/skills',
|
|
1842
|
+
path: path.join(cwd, '.github', 'skills'),
|
|
1843
|
+
scope: 'project',
|
|
1844
|
+
kind: 'skills',
|
|
1845
|
+
},
|
|
1846
|
+
{
|
|
1847
|
+
root: '.codex/skills',
|
|
1848
|
+
path: path.join(cwd, '.codex', 'skills'),
|
|
1849
|
+
scope: 'project',
|
|
1850
|
+
kind: 'skills',
|
|
1851
|
+
},
|
|
1852
|
+
{
|
|
1853
|
+
root: '~/.claude/skills',
|
|
1854
|
+
path: getGlobalSkillsBase('claude'),
|
|
1855
|
+
scope: 'global',
|
|
1856
|
+
kind: 'skills',
|
|
1857
|
+
},
|
|
1858
|
+
{
|
|
1859
|
+
root: '~/.codex/skills',
|
|
1860
|
+
path: getGlobalSkillsBase('codex'),
|
|
1861
|
+
scope: 'global',
|
|
1862
|
+
kind: 'skills',
|
|
1863
|
+
},
|
|
1864
|
+
{
|
|
1865
|
+
root: '.claude/sdd/skills',
|
|
1866
|
+
path: path.join(os.homedir(), '.claude', 'sdd', 'skills'),
|
|
1867
|
+
scope: 'import-only',
|
|
1868
|
+
kind: 'skills',
|
|
1869
|
+
deprecated: true,
|
|
1870
|
+
},
|
|
1871
|
+
{
|
|
1872
|
+
root: '.claude/commands/sdd',
|
|
1873
|
+
path: path.join(os.homedir(), '.claude', 'commands', 'sdd'),
|
|
1874
|
+
scope: 'legacy-commands',
|
|
1875
|
+
kind: 'commands',
|
|
1876
|
+
deprecated: true,
|
|
1877
|
+
},
|
|
1878
|
+
];
|
|
1879
|
+
|
|
1880
|
+
const skills = [];
|
|
1881
|
+
const roots = [];
|
|
1882
|
+
let legacyClaudeCommandsInstalled = false;
|
|
1883
|
+
for (const rootInfo of canonicalRoots) {
|
|
1884
|
+
const rootPath = rootInfo.path;
|
|
1885
|
+
const rootSummary = {
|
|
1886
|
+
root: rootInfo.root,
|
|
1887
|
+
path: rootPath,
|
|
1888
|
+
scope: rootInfo.scope,
|
|
1889
|
+
present: fs.existsSync(rootPath),
|
|
1890
|
+
deprecated: !!rootInfo.deprecated,
|
|
1891
|
+
};
|
|
1892
|
+
|
|
1893
|
+
if (!rootSummary.present) {
|
|
1894
|
+
roots.push(rootSummary);
|
|
1895
|
+
continue;
|
|
1896
|
+
}
|
|
1897
|
+
|
|
1898
|
+
if (rootInfo.kind === 'commands') {
|
|
1899
|
+
let entries = [];
|
|
1900
|
+
try {
|
|
1901
|
+
entries = fs.readdirSync(rootPath, { withFileTypes: true });
|
|
1902
|
+
} catch {
|
|
1903
|
+
roots.push(rootSummary);
|
|
1904
|
+
continue;
|
|
1905
|
+
}
|
|
1906
|
+
|
|
1907
|
+
const commandFiles = entries.filter(entry => entry.isFile() && entry.name.endsWith('.md'));
|
|
1908
|
+
rootSummary.command_count = commandFiles.length;
|
|
1909
|
+
if (rootSummary.command_count > 0) legacyClaudeCommandsInstalled = true;
|
|
1910
|
+
roots.push(rootSummary);
|
|
1911
|
+
continue;
|
|
1912
|
+
}
|
|
1913
|
+
|
|
1914
|
+
let entries;
|
|
1915
|
+
try {
|
|
1916
|
+
entries = fs.readdirSync(rootPath, { withFileTypes: true });
|
|
1917
|
+
} catch {
|
|
1918
|
+
roots.push(rootSummary);
|
|
1919
|
+
continue;
|
|
1920
|
+
}
|
|
1921
|
+
|
|
1922
|
+
let skillCount = 0;
|
|
1923
|
+
for (const entry of entries) {
|
|
1924
|
+
if (!entry.isDirectory()) continue;
|
|
1925
|
+
|
|
1926
|
+
const skillMdPath = path.join(rootPath, entry.name, 'SKILL.md');
|
|
1927
|
+
const content = platformReadSync(skillMdPath);
|
|
1928
|
+
if (content === null) continue;
|
|
1929
|
+
|
|
1930
|
+
const frontmatter = extractFrontmatter(content);
|
|
1931
|
+
const name = frontmatter.name || entry.name;
|
|
1932
|
+
const description = frontmatter.description || '';
|
|
1933
|
+
|
|
1934
|
+
// Extract trigger lines from body text (after frontmatter)
|
|
1935
|
+
const triggers = [];
|
|
1936
|
+
const bodyMatch = content.match(/^---[\s\S]*?---\s*\n([\s\S]*)$/);
|
|
1937
|
+
if (bodyMatch) {
|
|
1938
|
+
const body = bodyMatch[1];
|
|
1939
|
+
const triggerLines = body.match(/^TRIGGER\s+when:\s*(.+)$/gmi);
|
|
1940
|
+
if (triggerLines) {
|
|
1941
|
+
for (const line of triggerLines) {
|
|
1942
|
+
const m = line.match(/^TRIGGER\s+when:\s*(.+)$/i);
|
|
1943
|
+
if (m) triggers.push(m[1].trim());
|
|
1944
|
+
}
|
|
1945
|
+
}
|
|
1946
|
+
}
|
|
1947
|
+
|
|
1948
|
+
skills.push({
|
|
1949
|
+
name,
|
|
1950
|
+
description,
|
|
1951
|
+
triggers,
|
|
1952
|
+
path: entry.name,
|
|
1953
|
+
file_path: `${entry.name}/SKILL.md`,
|
|
1954
|
+
root: rootInfo.root,
|
|
1955
|
+
scope: rootInfo.scope,
|
|
1956
|
+
installed: rootInfo.scope !== 'import-only',
|
|
1957
|
+
deprecated: !!rootInfo.deprecated,
|
|
1958
|
+
});
|
|
1959
|
+
skillCount++;
|
|
1960
|
+
}
|
|
1961
|
+
|
|
1962
|
+
rootSummary.skill_count = skillCount;
|
|
1963
|
+
roots.push(rootSummary);
|
|
1964
|
+
}
|
|
1965
|
+
|
|
1966
|
+
skills.sort((a, b) => {
|
|
1967
|
+
const rootCmp = a.root.localeCompare(b.root);
|
|
1968
|
+
return rootCmp !== 0 ? rootCmp : a.name.localeCompare(b.name);
|
|
1969
|
+
});
|
|
1970
|
+
|
|
1971
|
+
const sddSkillsInstalled = skills.some(skill => skill.name.startsWith('sdd-'));
|
|
1972
|
+
|
|
1973
|
+
return {
|
|
1974
|
+
skills,
|
|
1975
|
+
roots,
|
|
1976
|
+
installation: {
|
|
1977
|
+
sdd_skills_installed: sddSkillsInstalled,
|
|
1978
|
+
legacy_claude_commands_installed: legacyClaudeCommandsInstalled,
|
|
1979
|
+
},
|
|
1980
|
+
counts: {
|
|
1981
|
+
skills: skills.length,
|
|
1982
|
+
roots: roots.length,
|
|
1983
|
+
},
|
|
1984
|
+
};
|
|
1985
|
+
}
|
|
1986
|
+
|
|
1987
|
+
/**
|
|
1988
|
+
* Command: generate skill manifest JSON.
|
|
1989
|
+
*
|
|
1990
|
+
* Options:
|
|
1991
|
+
* --skills-dir <path> Optional absolute path to a single skills directory
|
|
1992
|
+
* --write Also write to .planning/skill-manifest.json
|
|
1993
|
+
*/
|
|
1994
|
+
function cmdSkillManifest(cwd, args, raw) {
|
|
1995
|
+
const skillsDirIdx = args.indexOf('--skills-dir');
|
|
1996
|
+
const skillsDir = skillsDirIdx >= 0 && args[skillsDirIdx + 1]
|
|
1997
|
+
? args[skillsDirIdx + 1]
|
|
1998
|
+
: null;
|
|
1999
|
+
|
|
2000
|
+
const manifest = buildSkillManifest(cwd, skillsDir);
|
|
2001
|
+
|
|
2002
|
+
// Optionally write to .planning/skill-manifest.json
|
|
2003
|
+
if (args.includes('--write')) {
|
|
2004
|
+
const planningDir = path.join(cwd, '.planning');
|
|
2005
|
+
if (fs.existsSync(planningDir)) {
|
|
2006
|
+
const manifestPath = path.join(planningDir, 'skill-manifest.json');
|
|
2007
|
+
platformWriteSync(manifestPath, JSON.stringify(manifest, null, 2));
|
|
2008
|
+
}
|
|
2009
|
+
}
|
|
2010
|
+
|
|
2011
|
+
output(manifest, raw);
|
|
2012
|
+
}
|
|
2013
|
+
|
|
1516
2014
|
module.exports = {
|
|
1517
2015
|
cmdInitExecutePhase,
|
|
1518
2016
|
cmdInitPlanPhase,
|
|
1519
2017
|
cmdInitNewProject,
|
|
1520
2018
|
cmdInitNewMilestone,
|
|
1521
2019
|
cmdInitQuick,
|
|
2020
|
+
cmdInitIngestDocs,
|
|
1522
2021
|
cmdInitResume,
|
|
1523
2022
|
cmdInitVerifyWork,
|
|
1524
2023
|
cmdInitPhaseOp,
|
|
@@ -1533,4 +2032,6 @@ module.exports = {
|
|
|
1533
2032
|
detectChildRepos,
|
|
1534
2033
|
buildAgentSkillsBlock,
|
|
1535
2034
|
cmdAgentSkills,
|
|
2035
|
+
buildSkillManifest,
|
|
2036
|
+
cmdSkillManifest,
|
|
1536
2037
|
};
|