@opengsd/get-shit-done-redux 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.ja-JP.md +870 -0
- package/README.ko-KR.md +861 -0
- package/README.md +300 -0
- package/README.pt-BR.md +492 -0
- package/README.zh-CN.md +842 -0
- package/agents/gsd-advisor-researcher.md +127 -0
- package/agents/gsd-ai-researcher.md +133 -0
- package/agents/gsd-assumptions-analyzer.md +105 -0
- package/agents/gsd-code-fixer.md +668 -0
- package/agents/gsd-code-reviewer.md +387 -0
- package/agents/gsd-codebase-mapper.md +853 -0
- package/agents/gsd-debug-session-manager.md +314 -0
- package/agents/gsd-debugger.md +1452 -0
- package/agents/gsd-doc-classifier.md +168 -0
- package/agents/gsd-doc-synthesizer.md +204 -0
- package/agents/gsd-doc-verifier.md +217 -0
- package/agents/gsd-doc-writer.md +615 -0
- package/agents/gsd-domain-researcher.md +153 -0
- package/agents/gsd-eval-auditor.md +191 -0
- package/agents/gsd-eval-planner.md +154 -0
- package/agents/gsd-executor.md +774 -0
- package/agents/gsd-framework-selector.md +160 -0
- package/agents/gsd-integration-checker.md +470 -0
- package/agents/gsd-intel-updater.md +342 -0
- package/agents/gsd-nyquist-auditor.md +203 -0
- package/agents/gsd-pattern-mapper.md +335 -0
- package/agents/gsd-phase-researcher.md +928 -0
- package/agents/gsd-plan-checker.md +978 -0
- package/agents/gsd-planner.md +1278 -0
- package/agents/gsd-project-researcher.md +677 -0
- package/agents/gsd-research-synthesizer.md +247 -0
- package/agents/gsd-roadmapper.md +688 -0
- package/agents/gsd-security-auditor.md +155 -0
- package/agents/gsd-ui-auditor.md +495 -0
- package/agents/gsd-ui-checker.md +309 -0
- package/agents/gsd-ui-researcher.md +380 -0
- package/agents/gsd-user-profiler.md +171 -0
- package/agents/gsd-verifier.md +917 -0
- package/bin/gsd-sdk.js +37 -0
- package/bin/install.js +11468 -0
- package/bin/lib/ui-safety-gate.cjs +107 -0
- package/commands/gsd/add-tests.md +42 -0
- package/commands/gsd/ai-integration-phase.md +37 -0
- package/commands/gsd/audit-fix.md +34 -0
- package/commands/gsd/audit-milestone.md +37 -0
- package/commands/gsd/audit-uat.md +24 -0
- package/commands/gsd/autonomous.md +46 -0
- package/commands/gsd/capture.md +62 -0
- package/commands/gsd/cleanup.md +24 -0
- package/commands/gsd/code-review.md +59 -0
- package/commands/gsd/complete-milestone.md +143 -0
- package/commands/gsd/config.md +58 -0
- package/commands/gsd/debug.md +52 -0
- package/commands/gsd/discuss-phase.md +76 -0
- package/commands/gsd/docs-update.md +49 -0
- package/commands/gsd/eval-review.md +33 -0
- package/commands/gsd/execute-phase.md +64 -0
- package/commands/gsd/explore.md +27 -0
- package/commands/gsd/extract-learnings.md +23 -0
- package/commands/gsd/fast.md +31 -0
- package/commands/gsd/forensics.md +57 -0
- package/commands/gsd/graphify.md +199 -0
- package/commands/gsd/health.md +31 -0
- package/commands/gsd/help.md +28 -0
- package/commands/gsd/import.md +41 -0
- package/commands/gsd/inbox.md +39 -0
- package/commands/gsd/ingest-docs.md +42 -0
- package/commands/gsd/manager.md +45 -0
- package/commands/gsd/map-codebase.md +83 -0
- package/commands/gsd/milestone-summary.md +51 -0
- package/commands/gsd/mvp-phase.md +45 -0
- package/commands/gsd/new-milestone.md +45 -0
- package/commands/gsd/new-project.md +47 -0
- package/commands/gsd/ns-context.md +23 -0
- package/commands/gsd/ns-ideate.md +24 -0
- package/commands/gsd/ns-manage.md +29 -0
- package/commands/gsd/ns-project.md +22 -0
- package/commands/gsd/ns-review.md +26 -0
- package/commands/gsd/ns-workflow.md +28 -0
- package/commands/gsd/pause-work.md +43 -0
- package/commands/gsd/phase.md +56 -0
- package/commands/gsd/plan-phase.md +62 -0
- package/commands/gsd/plan-review-convergence.md +59 -0
- package/commands/gsd/pr-branch.md +26 -0
- package/commands/gsd/profile-user.md +46 -0
- package/commands/gsd/progress.md +46 -0
- package/commands/gsd/quick.md +174 -0
- package/commands/gsd/resume-work.md +30 -0
- package/commands/gsd/review-backlog.md +63 -0
- package/commands/gsd/review.md +41 -0
- package/commands/gsd/secure-phase.md +36 -0
- package/commands/gsd/settings.md +29 -0
- package/commands/gsd/ship.md +24 -0
- package/commands/gsd/sketch.md +60 -0
- package/commands/gsd/spec-phase.md +63 -0
- package/commands/gsd/spike.md +57 -0
- package/commands/gsd/stats.md +19 -0
- package/commands/gsd/surface.md +155 -0
- package/commands/gsd/thread.md +24 -0
- package/commands/gsd/ui-phase.md +35 -0
- package/commands/gsd/ui-review.md +33 -0
- package/commands/gsd/ultraplan-phase.md +34 -0
- package/commands/gsd/undo.md +35 -0
- package/commands/gsd/update.md +48 -0
- package/commands/gsd/validate-phase.md +36 -0
- package/commands/gsd/verify-work.md +39 -0
- package/commands/gsd/workspace.md +52 -0
- package/commands/gsd/workstreams.md +70 -0
- package/get-shit-done/bin/check-latest-version.cjs +104 -0
- package/get-shit-done/bin/gsd-tools.cjs +1630 -0
- package/get-shit-done/bin/lib/active-workstream-store.cjs +85 -0
- package/get-shit-done/bin/lib/adr-parser.cjs +394 -0
- package/get-shit-done/bin/lib/artifacts.cjs +53 -0
- package/get-shit-done/bin/lib/audit.cjs +755 -0
- package/get-shit-done/bin/lib/cjs-command-router-adapter.cjs +39 -0
- package/get-shit-done/bin/lib/cjs-sdk-bridge.cjs +136 -0
- package/get-shit-done/bin/lib/clusters.cjs +135 -0
- package/get-shit-done/bin/lib/code-review-flags.cjs +74 -0
- package/get-shit-done/bin/lib/command-aliases.generated.cjs +824 -0
- package/get-shit-done/bin/lib/command-routing-hub.cjs +239 -0
- package/get-shit-done/bin/lib/commands.cjs +1035 -0
- package/get-shit-done/bin/lib/config-schema.cjs +31 -0
- package/get-shit-done/bin/lib/config.cjs +704 -0
- package/get-shit-done/bin/lib/configuration.generated.cjs +253 -0
- package/get-shit-done/bin/lib/context-utilization.cjs +47 -0
- package/get-shit-done/bin/lib/core.cjs +1922 -0
- package/get-shit-done/bin/lib/decisions.cjs +19 -0
- package/get-shit-done/bin/lib/decisions.generated.cjs +121 -0
- package/get-shit-done/bin/lib/docs.cjs +270 -0
- package/get-shit-done/bin/lib/drift.cjs +388 -0
- package/get-shit-done/bin/lib/fallow-runner.cjs +109 -0
- package/get-shit-done/bin/lib/frontmatter.cjs +389 -0
- package/get-shit-done/bin/lib/gap-checker.cjs +205 -0
- package/get-shit-done/bin/lib/graphify.cjs +592 -0
- package/get-shit-done/bin/lib/gsd2-import.cjs +514 -0
- package/get-shit-done/bin/lib/init-command-router.cjs +174 -0
- package/get-shit-done/bin/lib/init.cjs +2096 -0
- package/get-shit-done/bin/lib/install-profiles.cjs +603 -0
- package/get-shit-done/bin/lib/installer-migration-authoring.cjs +117 -0
- package/get-shit-done/bin/lib/installer-migration-report.cjs +354 -0
- package/get-shit-done/bin/lib/installer-migrations/000-first-time-baseline.cjs +220 -0
- package/get-shit-done/bin/lib/installer-migrations/001-legacy-orphan-files.cjs +41 -0
- package/get-shit-done/bin/lib/installer-migrations/002-codex-legacy-hooks-json.cjs +80 -0
- package/get-shit-done/bin/lib/installer-migrations.cjs +776 -0
- package/get-shit-done/bin/lib/intel.cjs +643 -0
- package/get-shit-done/bin/lib/learnings.cjs +379 -0
- package/get-shit-done/bin/lib/milestone.cjs +314 -0
- package/get-shit-done/bin/lib/model-catalog.cjs +136 -0
- package/get-shit-done/bin/lib/model-profiles.cjs +25 -0
- package/get-shit-done/bin/lib/phase-command-router.cjs +226 -0
- package/get-shit-done/bin/lib/phase.cjs +1490 -0
- package/get-shit-done/bin/lib/phases-command-router.cjs +97 -0
- package/get-shit-done/bin/lib/plan-scan.cjs +26 -0
- package/get-shit-done/bin/lib/plan-scan.generated.cjs +97 -0
- package/get-shit-done/bin/lib/planning-workspace.cjs +415 -0
- package/get-shit-done/bin/lib/profile-output.cjs +1130 -0
- package/get-shit-done/bin/lib/profile-pipeline.cjs +539 -0
- package/get-shit-done/bin/lib/project-root.generated.cjs +117 -0
- package/get-shit-done/bin/lib/prompt-budget.cjs +399 -0
- package/get-shit-done/bin/lib/review-reviewer-selection.cjs +125 -0
- package/get-shit-done/bin/lib/roadmap-command-router.cjs +99 -0
- package/get-shit-done/bin/lib/roadmap.cjs +642 -0
- package/get-shit-done/bin/lib/runtime-artifact-layout.cjs +301 -0
- package/get-shit-done/bin/lib/runtime-homes.cjs +185 -0
- package/get-shit-done/bin/lib/runtime-slash.cjs +109 -0
- package/get-shit-done/bin/lib/schema-detect.cjs +21 -0
- package/get-shit-done/bin/lib/schema-detect.generated.cjs +170 -0
- package/get-shit-done/bin/lib/secrets.cjs +20 -0
- package/get-shit-done/bin/lib/secrets.generated.cjs +37 -0
- package/get-shit-done/bin/lib/security.cjs +504 -0
- package/get-shit-done/bin/lib/shell-command-projection.cjs +552 -0
- package/get-shit-done/bin/lib/state-command-router.cjs +346 -0
- package/get-shit-done/bin/lib/state-document.cjs +12 -0
- package/get-shit-done/bin/lib/state-document.generated.cjs +127 -0
- package/get-shit-done/bin/lib/state.cjs +1940 -0
- package/get-shit-done/bin/lib/surface.cjs +430 -0
- package/get-shit-done/bin/lib/template.cjs +228 -0
- package/get-shit-done/bin/lib/uat.cjs +289 -0
- package/get-shit-done/bin/lib/validate-command-router.cjs +129 -0
- package/get-shit-done/bin/lib/verify-command-router.cjs +122 -0
- package/get-shit-done/bin/lib/verify.cjs +1458 -0
- package/get-shit-done/bin/lib/workstream-inventory-builder.generated.cjs +79 -0
- package/get-shit-done/bin/lib/workstream-inventory.cjs +132 -0
- package/get-shit-done/bin/lib/workstream-name-policy.cjs +19 -0
- package/get-shit-done/bin/lib/workstream-name-policy.generated.cjs +61 -0
- package/get-shit-done/bin/lib/workstream.cjs +374 -0
- package/get-shit-done/bin/lib/worktree-safety.cjs +985 -0
- package/get-shit-done/bin/verify-reapply-patches.cjs +336 -0
- package/get-shit-done/contexts/dev.md +21 -0
- package/get-shit-done/contexts/research.md +22 -0
- package/get-shit-done/contexts/review.md +23 -0
- package/get-shit-done/references/agent-contracts.md +79 -0
- package/get-shit-done/references/ai-evals.md +156 -0
- package/get-shit-done/references/ai-frameworks.md +186 -0
- package/get-shit-done/references/artifact-types.md +131 -0
- package/get-shit-done/references/autonomous-smart-discuss.md +277 -0
- package/get-shit-done/references/checkpoints.md +814 -0
- package/get-shit-done/references/common-bug-patterns.md +114 -0
- package/get-shit-done/references/context-budget.md +85 -0
- package/get-shit-done/references/continuation-format.md +253 -0
- package/get-shit-done/references/debugger-philosophy.md +76 -0
- package/get-shit-done/references/decimal-phase-calculation.md +64 -0
- package/get-shit-done/references/doc-conflict-engine.md +91 -0
- package/get-shit-done/references/domain-probes.md +125 -0
- package/get-shit-done/references/execute-mvp-tdd.md +81 -0
- package/get-shit-done/references/executor-examples.md +110 -0
- package/get-shit-done/references/few-shot-examples/plan-checker.md +73 -0
- package/get-shit-done/references/few-shot-examples/verifier.md +109 -0
- package/get-shit-done/references/gate-prompts.md +100 -0
- package/get-shit-done/references/gates.md +70 -0
- package/get-shit-done/references/git-integration.md +298 -0
- package/get-shit-done/references/git-planning-commit.md +40 -0
- package/get-shit-done/references/ios-scaffold.md +123 -0
- package/get-shit-done/references/mandatory-initial-read.md +2 -0
- package/get-shit-done/references/model-profile-resolution.md +38 -0
- package/get-shit-done/references/model-profiles.md +245 -0
- package/get-shit-done/references/mvp-concepts.md +49 -0
- package/get-shit-done/references/phase-argument-parsing.md +61 -0
- package/get-shit-done/references/planner-antipatterns.md +89 -0
- package/get-shit-done/references/planner-chunked.md +49 -0
- package/get-shit-done/references/planner-gap-closure.md +62 -0
- package/get-shit-done/references/planner-graphify-auto-update.md +67 -0
- package/get-shit-done/references/planner-human-verify-mode.md +57 -0
- package/get-shit-done/references/planner-mvp-mode.md +53 -0
- package/get-shit-done/references/planner-reviews.md +39 -0
- package/get-shit-done/references/planner-revision.md +87 -0
- package/get-shit-done/references/planner-source-audit.md +73 -0
- package/get-shit-done/references/planning-config.md +471 -0
- package/get-shit-done/references/project-skills-discovery.md +19 -0
- package/get-shit-done/references/questioning.md +162 -0
- package/get-shit-done/references/revision-loop.md +97 -0
- package/get-shit-done/references/scout-codebase.md +51 -0
- package/get-shit-done/references/skeleton-template.md +48 -0
- package/get-shit-done/references/sketch-interactivity.md +41 -0
- package/get-shit-done/references/sketch-theme-system.md +94 -0
- package/get-shit-done/references/sketch-tooling.md +45 -0
- package/get-shit-done/references/sketch-variant-patterns.md +81 -0
- package/get-shit-done/references/spidr-splitting.md +69 -0
- package/get-shit-done/references/tdd.md +330 -0
- package/get-shit-done/references/thinking-models-debug.md +44 -0
- package/get-shit-done/references/thinking-models-execution.md +50 -0
- package/get-shit-done/references/thinking-models-planning.md +62 -0
- package/get-shit-done/references/thinking-models-research.md +50 -0
- package/get-shit-done/references/thinking-models-verification.md +55 -0
- package/get-shit-done/references/thinking-partner.md +96 -0
- package/get-shit-done/references/ui-brand.md +160 -0
- package/get-shit-done/references/universal-anti-patterns.md +63 -0
- package/get-shit-done/references/user-profiling.md +681 -0
- package/get-shit-done/references/user-story-template.md +58 -0
- package/get-shit-done/references/verification-overrides.md +227 -0
- package/get-shit-done/references/verification-patterns.md +612 -0
- package/get-shit-done/references/verify-mvp-mode.md +85 -0
- package/get-shit-done/references/workstream-flag.md +111 -0
- package/get-shit-done/references/worktree-path-safety.md +89 -0
- package/get-shit-done/templates/AI-SPEC.md +246 -0
- package/get-shit-done/templates/DEBUG.md +169 -0
- package/get-shit-done/templates/README.md +77 -0
- package/get-shit-done/templates/SECURITY.md +61 -0
- package/get-shit-done/templates/UAT.md +265 -0
- package/get-shit-done/templates/UI-SPEC.md +100 -0
- package/get-shit-done/templates/VALIDATION.md +76 -0
- package/get-shit-done/templates/claude-md.md +145 -0
- package/get-shit-done/templates/codebase/architecture.md +255 -0
- package/get-shit-done/templates/codebase/concerns.md +310 -0
- package/get-shit-done/templates/codebase/conventions.md +307 -0
- package/get-shit-done/templates/codebase/integrations.md +280 -0
- package/get-shit-done/templates/codebase/stack.md +186 -0
- package/get-shit-done/templates/codebase/structure.md +285 -0
- package/get-shit-done/templates/codebase/testing.md +480 -0
- package/get-shit-done/templates/config.json +62 -0
- package/get-shit-done/templates/context.md +352 -0
- package/get-shit-done/templates/continue-here.md +78 -0
- package/get-shit-done/templates/copilot-instructions.md +7 -0
- package/get-shit-done/templates/debug-subagent-prompt.md +91 -0
- package/get-shit-done/templates/dev-preferences.md +21 -0
- package/get-shit-done/templates/discovery.md +146 -0
- package/get-shit-done/templates/discussion-log.md +63 -0
- package/get-shit-done/templates/milestone-archive.md +123 -0
- package/get-shit-done/templates/milestone.md +115 -0
- package/get-shit-done/templates/phase-prompt.md +610 -0
- package/get-shit-done/templates/planner-subagent-prompt.md +117 -0
- package/get-shit-done/templates/project.md +186 -0
- package/get-shit-done/templates/requirements.md +231 -0
- package/get-shit-done/templates/research-project/ARCHITECTURE.md +204 -0
- package/get-shit-done/templates/research-project/FEATURES.md +147 -0
- package/get-shit-done/templates/research-project/PITFALLS.md +200 -0
- package/get-shit-done/templates/research-project/STACK.md +120 -0
- package/get-shit-done/templates/research-project/SUMMARY.md +170 -0
- package/get-shit-done/templates/research.md +592 -0
- package/get-shit-done/templates/retrospective.md +54 -0
- package/get-shit-done/templates/roadmap.md +202 -0
- package/get-shit-done/templates/spec.md +307 -0
- package/get-shit-done/templates/state.md +184 -0
- package/get-shit-done/templates/summary-complex.md +59 -0
- package/get-shit-done/templates/summary-minimal.md +41 -0
- package/get-shit-done/templates/summary-standard.md +48 -0
- package/get-shit-done/templates/summary.md +248 -0
- package/get-shit-done/templates/user-profile.md +146 -0
- package/get-shit-done/templates/user-setup.md +311 -0
- package/get-shit-done/templates/verification-report.md +322 -0
- package/get-shit-done/workflows/add-backlog.md +101 -0
- package/get-shit-done/workflows/add-phase.md +123 -0
- package/get-shit-done/workflows/add-tests.md +365 -0
- package/get-shit-done/workflows/add-todo.md +171 -0
- package/get-shit-done/workflows/ai-integration-phase.md +305 -0
- package/get-shit-done/workflows/analyze-dependencies.md +96 -0
- package/get-shit-done/workflows/audit-fix.md +188 -0
- package/get-shit-done/workflows/audit-milestone.md +368 -0
- package/get-shit-done/workflows/audit-uat.md +120 -0
- package/get-shit-done/workflows/autonomous.md +805 -0
- package/get-shit-done/workflows/check-todos.md +190 -0
- package/get-shit-done/workflows/cleanup.md +165 -0
- package/get-shit-done/workflows/code-review-fix.md +512 -0
- package/get-shit-done/workflows/code-review.md +666 -0
- package/get-shit-done/workflows/complete-milestone.md +865 -0
- package/get-shit-done/workflows/debug.md +242 -0
- package/get-shit-done/workflows/diagnose-issues.md +251 -0
- package/get-shit-done/workflows/discovery-phase.md +291 -0
- package/get-shit-done/workflows/discuss-phase/modes/advisor.md +175 -0
- package/get-shit-done/workflows/discuss-phase/modes/all.md +28 -0
- package/get-shit-done/workflows/discuss-phase/modes/analyze.md +44 -0
- package/get-shit-done/workflows/discuss-phase/modes/auto.md +56 -0
- package/get-shit-done/workflows/discuss-phase/modes/batch.md +52 -0
- package/get-shit-done/workflows/discuss-phase/modes/chain.md +97 -0
- package/get-shit-done/workflows/discuss-phase/modes/default.md +141 -0
- package/get-shit-done/workflows/discuss-phase/modes/power.md +44 -0
- package/get-shit-done/workflows/discuss-phase/modes/text.md +55 -0
- package/get-shit-done/workflows/discuss-phase/templates/checkpoint.json +18 -0
- package/get-shit-done/workflows/discuss-phase/templates/context.md +136 -0
- package/get-shit-done/workflows/discuss-phase/templates/discussion-log.md +50 -0
- package/get-shit-done/workflows/discuss-phase-assumptions.md +685 -0
- package/get-shit-done/workflows/discuss-phase-power.md +291 -0
- package/get-shit-done/workflows/discuss-phase.md +499 -0
- package/get-shit-done/workflows/do.md +122 -0
- package/get-shit-done/workflows/docs-update.md +1172 -0
- package/get-shit-done/workflows/edit-phase.md +305 -0
- package/get-shit-done/workflows/eval-review.md +166 -0
- package/get-shit-done/workflows/execute-phase/steps/codebase-drift-gate.md +81 -0
- package/get-shit-done/workflows/execute-phase/steps/per-plan-worktree-gate.md +94 -0
- package/get-shit-done/workflows/execute-phase/steps/post-merge-gate.md +116 -0
- package/get-shit-done/workflows/execute-phase.md +1717 -0
- package/get-shit-done/workflows/execute-plan.md +536 -0
- package/get-shit-done/workflows/explore.md +154 -0
- package/get-shit-done/workflows/extract-learnings.md +253 -0
- package/get-shit-done/workflows/fast.md +124 -0
- package/get-shit-done/workflows/forensics.md +289 -0
- package/get-shit-done/workflows/graduation.md +206 -0
- package/get-shit-done/workflows/health.md +234 -0
- package/get-shit-done/workflows/help/modes/brief.md +22 -0
- package/get-shit-done/workflows/help/modes/default.md +50 -0
- package/get-shit-done/workflows/help/modes/full.md +784 -0
- package/get-shit-done/workflows/help/modes/topic.md +74 -0
- package/get-shit-done/workflows/help.md +24 -0
- package/get-shit-done/workflows/import.md +264 -0
- package/get-shit-done/workflows/inbox.md +387 -0
- package/get-shit-done/workflows/ingest-docs.md +339 -0
- package/get-shit-done/workflows/insert-phase.md +162 -0
- package/get-shit-done/workflows/list-phase-assumptions.md +178 -0
- package/get-shit-done/workflows/list-workspaces.md +67 -0
- package/get-shit-done/workflows/manager.md +403 -0
- package/get-shit-done/workflows/map-codebase.md +454 -0
- package/get-shit-done/workflows/milestone-summary.md +234 -0
- package/get-shit-done/workflows/mvp-phase.md +232 -0
- package/get-shit-done/workflows/new-milestone.md +645 -0
- package/get-shit-done/workflows/new-project.md +1487 -0
- package/get-shit-done/workflows/new-workspace.md +250 -0
- package/get-shit-done/workflows/next.md +231 -0
- package/get-shit-done/workflows/node-repair.md +92 -0
- package/get-shit-done/workflows/note.md +158 -0
- package/get-shit-done/workflows/pause-work.md +254 -0
- package/get-shit-done/workflows/plan-milestone-gaps.md +291 -0
- package/get-shit-done/workflows/plan-phase.md +1800 -0
- package/get-shit-done/workflows/plan-review-convergence.md +340 -0
- package/get-shit-done/workflows/plant-seed.md +240 -0
- package/get-shit-done/workflows/pr-branch.md +157 -0
- package/get-shit-done/workflows/profile-user.md +463 -0
- package/get-shit-done/workflows/progress.md +660 -0
- package/get-shit-done/workflows/quick.md +1049 -0
- package/get-shit-done/workflows/reapply-patches.md +426 -0
- package/get-shit-done/workflows/remove-phase.md +166 -0
- package/get-shit-done/workflows/remove-workspace.md +118 -0
- package/get-shit-done/workflows/resume-project.md +342 -0
- package/get-shit-done/workflows/review.md +633 -0
- package/get-shit-done/workflows/scan.md +115 -0
- package/get-shit-done/workflows/secure-phase.md +190 -0
- package/get-shit-done/workflows/session-report.md +146 -0
- package/get-shit-done/workflows/settings-advanced.md +590 -0
- package/get-shit-done/workflows/settings-integrations.md +292 -0
- package/get-shit-done/workflows/settings.md +545 -0
- package/get-shit-done/workflows/ship.md +366 -0
- package/get-shit-done/workflows/sketch-wrap-up.md +296 -0
- package/get-shit-done/workflows/sketch.md +371 -0
- package/get-shit-done/workflows/spec-phase.md +262 -0
- package/get-shit-done/workflows/spike-wrap-up.md +317 -0
- package/get-shit-done/workflows/spike.md +463 -0
- package/get-shit-done/workflows/stats.md +90 -0
- package/get-shit-done/workflows/sync-skills.md +182 -0
- package/get-shit-done/workflows/thread.md +232 -0
- package/get-shit-done/workflows/transition.md +704 -0
- package/get-shit-done/workflows/ui-phase.md +338 -0
- package/get-shit-done/workflows/ui-review.md +203 -0
- package/get-shit-done/workflows/ultraplan-phase.md +209 -0
- package/get-shit-done/workflows/undo.md +314 -0
- package/get-shit-done/workflows/update.md +664 -0
- package/get-shit-done/workflows/validate-phase.md +189 -0
- package/get-shit-done/workflows/verify-phase.md +554 -0
- package/get-shit-done/workflows/verify-work.md +791 -0
- package/hooks/dist/gsd-check-update-worker.js +117 -0
- package/hooks/dist/gsd-check-update.js +64 -0
- package/hooks/dist/gsd-context-monitor.js +192 -0
- package/hooks/dist/gsd-graphify-update.sh +158 -0
- package/hooks/dist/gsd-phase-boundary.sh +47 -0
- package/hooks/dist/gsd-prompt-guard.js +97 -0
- package/hooks/dist/gsd-read-guard.js +101 -0
- package/hooks/dist/gsd-read-injection-scanner.js +152 -0
- package/hooks/dist/gsd-session-state.sh +59 -0
- package/hooks/dist/gsd-statusline.js +537 -0
- package/hooks/dist/gsd-update-banner.js +134 -0
- package/hooks/dist/gsd-validate-commit.sh +57 -0
- package/hooks/dist/gsd-workflow-guard.js +94 -0
- package/hooks/dist/lib/git-cmd.js +150 -0
- package/hooks/dist/lib/gsd-graphify-rebuild.sh +65 -0
- package/hooks/gsd-check-update-worker.js +117 -0
- package/hooks/gsd-check-update.js +64 -0
- package/hooks/gsd-context-monitor.js +192 -0
- package/hooks/gsd-graphify-update.sh +158 -0
- package/hooks/gsd-phase-boundary.sh +47 -0
- package/hooks/gsd-prompt-guard.js +97 -0
- package/hooks/gsd-read-guard.js +101 -0
- package/hooks/gsd-read-injection-scanner.js +152 -0
- package/hooks/gsd-session-state.sh +59 -0
- package/hooks/gsd-statusline.js +537 -0
- package/hooks/gsd-update-banner.js +134 -0
- package/hooks/gsd-validate-commit.sh +57 -0
- package/hooks/gsd-workflow-guard.js +94 -0
- package/hooks/lib/git-cmd.js +150 -0
- package/hooks/lib/gsd-graphify-rebuild.sh +65 -0
- package/package.json +98 -0
- package/scripts/audit-workflow-script-paths.cjs +73 -0
- package/scripts/base64-scan.sh +262 -0
- package/scripts/build-hooks.js +227 -0
- package/scripts/changeset/cli.cjs +408 -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 +114 -0
- package/scripts/changeset/render.cjs +34 -0
- package/scripts/changeset/serialize.cjs +130 -0
- package/scripts/command-contract-helpers.cjs +64 -0
- package/scripts/diff-touches-shipped-paths.cjs +147 -0
- package/scripts/fix-slash-commands.cjs +147 -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-docs-required.cjs +222 -0
- package/scripts/lint-no-source-grep-extras.cjs +81 -0
- package/scripts/lint-no-source-grep.cjs +174 -0
- package/scripts/lint-pr-check-project-dir.cjs +98 -0
- package/scripts/lint-shared-module-handsync.cjs +331 -0
- package/scripts/lint-shell-command-projection-drift.cjs +57 -0
- package/scripts/lint-skill-deps.cjs +180 -0
- package/scripts/lint-test-file-count.allowlist.json +35 -0
- package/scripts/lint-test-file-count.cjs +190 -0
- package/scripts/pr-template-policy.cjs +268 -0
- package/scripts/prompt-injection-scan.sh +203 -0
- package/scripts/release-tarball-smoke.cjs +677 -0
- package/scripts/run-tests.cjs +178 -0
- package/scripts/secret-scan.sh +229 -0
- package/scripts/shared-module-handsync-allowlist.json +145 -0
- package/scripts/strip-prose-atrefs.cjs +106 -0
- package/scripts/sync-rulesets.sh +34 -0
- package/scripts/verify-tarball-sdk-dist.sh +69 -0
- 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 +108 -0
- package/sdk/dist/config.d.ts.map +1 -0
- package/sdk/dist/config.js +116 -0
- package/sdk/dist/config.js.map +1 -0
- package/sdk/dist/configuration/index.d.ts +85 -0
- package/sdk/dist/configuration/index.d.ts.map +1 -0
- package/sdk/dist/configuration/index.js +257 -0
- package/sdk/dist/configuration/index.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/gsd-tools-error.d.ts +23 -0
- package/sdk/dist/gsd-tools-error.d.ts.map +1 -0
- package/sdk/dist/gsd-tools-error.js +29 -0
- package/sdk/dist/gsd-tools-error.js.map +1 -0
- package/sdk/dist/gsd-tools.d.ts +97 -0
- package/sdk/dist/gsd-tools.d.ts.map +1 -0
- package/sdk/dist/gsd-tools.js +168 -0
- package/sdk/dist/gsd-tools.js.map +1 -0
- package/sdk/dist/gsd-transport-policy.d.ts +10 -0
- package/sdk/dist/gsd-transport-policy.d.ts.map +1 -0
- package/sdk/dist/gsd-transport-policy.js +32 -0
- package/sdk/dist/gsd-transport-policy.js.map +1 -0
- package/sdk/dist/gsd-transport.d.ts +39 -0
- package/sdk/dist/gsd-transport.d.ts.map +1 -0
- package/sdk/dist/gsd-transport.js +78 -0
- package/sdk/dist/gsd-transport.js.map +1 -0
- package/sdk/dist/index.d.ts +127 -0
- package/sdk/dist/index.d.ts.map +1 -0
- package/sdk/dist/index.js +300 -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/project-root/index.d.ts +46 -0
- package/sdk/dist/project-root/index.d.ts.map +1 -0
- package/sdk/dist/project-root/index.js +138 -0
- package/sdk/dist/project-root/index.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 +17 -0
- package/sdk/dist/query/check-ship-ready.d.ts.map +1 -0
- package/sdk/dist/query/check-ship-ready.js +121 -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 +133 -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 +101 -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 +60 -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 +16 -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 +16 -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 +110 -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 +106 -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 +179 -0
- package/sdk/dist/query/commit.d.ts.map +1 -0
- package/sdk/dist/query/commit.js +632 -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 +602 -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 +277 -0
- package/sdk/dist/query/config-query.js.map +1 -0
- package/sdk/dist/query/config-schema.d.ts +19 -0
- package/sdk/dist/query/config-schema.d.ts.map +1 -0
- package/sdk/dist/query/config-schema.js +26 -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 +165 -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 +299 -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 +364 -0
- package/sdk/dist/query/frontmatter.js.map +1 -0
- package/sdk/dist/query/helpers.d.ts +194 -0
- package/sdk/dist/query/helpers.d.ts.map +1 -0
- package/sdk/dist/query/helpers.js +540 -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 +735 -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 +1228 -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 +1823 -0
- package/sdk/dist/query/phase-lifecycle.js.map +1 -0
- package/sdk/dist/query/phase-list-queries.d.ts +20 -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 +25 -0
- package/sdk/dist/query/phase-roadmap-mutation.d.ts.map +1 -0
- package/sdk/dist/query/phase-roadmap-mutation.js +76 -0
- package/sdk/dist/query/phase-roadmap-mutation.js.map +1 -0
- package/sdk/dist/query/phase-uat-passed.d.ts +46 -0
- package/sdk/dist/query/phase-uat-passed.d.ts.map +1 -0
- package/sdk/dist/query/phase-uat-passed.js +238 -0
- package/sdk/dist/query/phase-uat-passed.js.map +1 -0
- package/sdk/dist/query/phase.d.ts +104 -0
- package/sdk/dist/query/phase.d.ts.map +1 -0
- package/sdk/dist/query/phase.js +617 -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/prompt-budget.d.ts +14 -0
- package/sdk/dist/query/prompt-budget.d.ts.map +1 -0
- package/sdk/dist/query/prompt-budget.js +417 -0
- package/sdk/dist/query/prompt-budget.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-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.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 +160 -0
- package/sdk/dist/query/roadmap.d.ts.map +1 -0
- package/sdk/dist/query/roadmap.js +982 -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 +1635 -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 +443 -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 +42 -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 +1001 -0
- package/sdk/dist/query/validate.js.map +1 -0
- package/sdk/dist/query/verify.d.ts +98 -0
- package/sdk/dist/query/verify.d.ts.map +1 -0
- package/sdk/dist/query/verify.js +593 -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 +24 -0
- package/sdk/dist/query/workstream-inventory.d.ts.map +1 -0
- package/sdk/dist/query/workstream-inventory.js +120 -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 +9 -0
- package/sdk/dist/query/worktree.d.ts.map +1 -0
- package/sdk/dist/query/worktree.js +79 -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-gsd-tools-path.d.ts +2 -0
- package/sdk/dist/query-gsd-tools-path.d.ts.map +1 -0
- package/sdk/dist/query-gsd-tools-path.js +2 -0
- package/sdk/dist/query-gsd-tools-path.js.map +1 -0
- package/sdk/dist/query-gsd-tools-runtime.d.ts +20 -0
- package/sdk/dist/query-gsd-tools-runtime.d.ts.map +1 -0
- package/sdk/dist/query-gsd-tools-runtime.js +47 -0
- package/sdk/dist/query-gsd-tools-runtime.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 +86 -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-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-bridge-sync/index.d.ts +96 -0
- package/sdk/dist/runtime-bridge-sync/index.d.ts.map +1 -0
- package/sdk/dist/runtime-bridge-sync/index.js +109 -0
- package/sdk/dist/runtime-bridge-sync/index.js.map +1 -0
- package/sdk/dist/runtime-bridge-sync/worker.d.ts +2 -0
- package/sdk/dist/runtime-bridge-sync/worker.d.ts.map +1 -0
- package/sdk/dist/runtime-bridge-sync/worker.js +180 -0
- package/sdk/dist/runtime-bridge-sync/worker.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/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-inventory/builder.d.ts +88 -0
- package/sdk/dist/workstream-inventory/builder.d.ts.map +1 -0
- package/sdk/dist/workstream-inventory/builder.js +84 -0
- package/sdk/dist/workstream-inventory/builder.js.map +1 -0
- package/sdk/dist/workstream-name-policy.d.ts +37 -0
- package/sdk/dist/workstream-name-policy.d.ts.map +1 -0
- package/sdk/dist/workstream-name-policy.js +53 -0
- package/sdk/dist/workstream-name-policy.js.map +1 -0
- package/sdk/dist/workstream-utils.d.ts +23 -0
- package/sdk/dist/workstream-utils.d.ts.map +1 -0
- package/sdk/dist/workstream-utils.js +34 -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 +2530 -0
- package/sdk/package.json +77 -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/config-defaults.manifest.json +75 -0
- package/sdk/shared/config-schema.manifest.json +151 -0
- package/sdk/shared/model-catalog.json +122 -0
- package/sdk/src/assembled-prompts.test.ts +349 -0
- package/sdk/src/bug-3589-planning-paths-validation.test.ts +89 -0
- package/sdk/src/bug-3591-gsdtools-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 +277 -0
- package/sdk/src/config.ts +202 -0
- package/sdk/src/configuration/index.test.ts +318 -0
- package/sdk/src/configuration/index.ts +325 -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 +1031 -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/gsd-tools-error.test.ts +21 -0
- package/sdk/src/gsd-tools-error.ts +65 -0
- package/sdk/src/gsd-tools.test.ts +472 -0
- package/sdk/src/gsd-tools.ts +237 -0
- package/sdk/src/gsd-transport-policy.test.ts +34 -0
- package/sdk/src/gsd-transport-policy.ts +48 -0
- package/sdk/src/gsd-transport.test.ts +299 -0
- package/sdk/src/gsd-transport.ts +118 -0
- package/sdk/src/index.ts +366 -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.ts +259 -0
- package/sdk/src/phase-runner.integration.test.ts +377 -0
- package/sdk/src/phase-runner.test.ts +3660 -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/project-root/index.test.ts +186 -0
- package/sdk/src/project-root/index.ts +144 -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 +303 -0
- package/sdk/src/query/check-ship-ready.ts +136 -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 +154 -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 +123 -0
- package/sdk/src/query/command-manifest.init.ts +24 -0
- package/sdk/src/query/command-manifest.non-family.ts +86 -0
- package/sdk/src/query/command-manifest.phase.ts +17 -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 +17 -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 +111 -0
- package/sdk/src/query/command-static-catalog-foundation.ts +111 -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 +717 -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 +705 -0
- package/sdk/src/query/config-query.test.ts +472 -0
- package/sdk/src/query/config-query.ts +314 -0
- package/sdk/src/query/config-schema.ts +35 -0
- package/sdk/src/query/decisions.test.ts +221 -0
- package/sdk/src/query/decisions.ts +196 -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 +328 -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 +566 -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 +788 -0
- package/sdk/src/query/init-complex.ts +815 -0
- package/sdk/src/query/init-workstream-milestone-op.test.ts +321 -0
- package/sdk/src/query/init.test.ts +791 -0
- package/sdk/src/query/init.ts +1335 -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 +1971 -0
- package/sdk/src/query/phase-lifecycle.ts +2210 -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 +82 -0
- package/sdk/src/query/phase-uat-passed.test.ts +593 -0
- package/sdk/src/query/phase-uat-passed.ts +297 -0
- package/sdk/src/query/phase.test.ts +693 -0
- package/sdk/src/query/phase.ts +741 -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/prompt-budget.ts +556 -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.ts +5 -0
- package/sdk/src/query/query-dispatch-formatting.ts +5 -0
- package/sdk/src/query/query-dispatch-observability.ts +6 -0
- package/sdk/src/query/query-dispatch.test.ts +699 -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 +1250 -0
- package/sdk/src/query/roadmap.ts +1131 -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 +1210 -0
- package/sdk/src/query/state-mutation.ts +1814 -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 +476 -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 +924 -0
- package/sdk/src/query/validate.ts +1054 -0
- package/sdk/src/query/verify.test.ts +414 -0
- package/sdk/src/query/verify.ts +656 -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 +143 -0
- package/sdk/src/query/workstream.test.ts +153 -0
- package/sdk/src/query/workstream.ts +324 -0
- package/sdk/src/query/worktree.ts +84 -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-gsd-tools-path.ts +1 -0
- package/sdk/src/query-gsd-tools-runtime.ts +89 -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 +93 -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-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-bridge-sync/index.test.ts +164 -0
- package/sdk/src/runtime-bridge-sync/index.ts +154 -0
- package/sdk/src/runtime-bridge-sync/projectdir-regression.test.ts +150 -0
- package/sdk/src/runtime-bridge-sync/worker.ts +224 -0
- package/sdk/src/runtime-gate.test.ts +84 -0
- package/sdk/src/runtime-gate.ts +52 -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-inventory/builder.test.ts +241 -0
- package/sdk/src/workstream-inventory/builder.ts +170 -0
- package/sdk/src/workstream-name-policy.ts +57 -0
- package/sdk/src/workstream-utils.ts +36 -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
|
@@ -0,0 +1,1630 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @deprecated The supported programmatic surface is `gsd-sdk query` (SDK query registry)
|
|
5
|
+
* and the `@opengsd/gsd-sdk` package. This Node CLI remains the compatibility implementation
|
|
6
|
+
* for shell scripts and older workflows; prefer calling the SDK from agents and automation.
|
|
7
|
+
*
|
|
8
|
+
* GSD Tools — CLI utility for GSD workflow operations
|
|
9
|
+
*
|
|
10
|
+
* Replaces repetitive inline bash patterns across ~50 GSD command/workflow/agent files.
|
|
11
|
+
* Centralizes: config parsing, model resolution, phase lookup, git commits, summary verification.
|
|
12
|
+
*
|
|
13
|
+
* Usage: node gsd-tools.cjs <command> [args] [--raw] [--pick <field>]
|
|
14
|
+
*
|
|
15
|
+
* Atomic Commands:
|
|
16
|
+
* state load Load project config + state
|
|
17
|
+
* state json Output STATE.md frontmatter as JSON
|
|
18
|
+
* state update <field> <value> Update a STATE.md field
|
|
19
|
+
* state get [section] Get STATE.md content or section
|
|
20
|
+
* state patch --field val ... Batch update STATE.md fields
|
|
21
|
+
* state begin-phase --phase N --name S --plans C Update STATE.md for new phase start
|
|
22
|
+
* state signal-waiting --type T --question Q --options "A|B" --phase P Write WAITING.json signal
|
|
23
|
+
* state signal-resume Remove WAITING.json signal
|
|
24
|
+
* resolve-model <agent-type> Get model for agent based on profile
|
|
25
|
+
* find-phase <phase> Find phase directory by number
|
|
26
|
+
* commit <message> [--files f1 f2] [--no-verify] Commit planning docs
|
|
27
|
+
* commit-to-subrepo <msg> --files f1 f2 Route commits to sub-repos
|
|
28
|
+
* verify-summary <path> Verify a SUMMARY.md file
|
|
29
|
+
* generate-slug <text> Convert text to URL-safe slug
|
|
30
|
+
* current-timestamp [format] Get timestamp (full|date|filename)
|
|
31
|
+
* list-todos [area] Count and enumerate pending todos
|
|
32
|
+
* verify-path-exists <path> Check file/directory existence
|
|
33
|
+
* config-ensure-section Initialize .planning/config.json
|
|
34
|
+
* history-digest Aggregate all SUMMARY.md data
|
|
35
|
+
* summary-extract <path> [--fields] Extract structured data from SUMMARY.md
|
|
36
|
+
* state-snapshot Structured parse of STATE.md
|
|
37
|
+
* phase-plan-index <phase> Index plans with waves and status
|
|
38
|
+
* websearch <query> Search web via Brave API (if configured)
|
|
39
|
+
* [--limit N] [--freshness day|week|month]
|
|
40
|
+
*
|
|
41
|
+
* Phase Operations:
|
|
42
|
+
* phase next-decimal <phase> Calculate next decimal phase number
|
|
43
|
+
* phase add <description> [--id ID] Append new phase to roadmap + create dir
|
|
44
|
+
* phase insert <after> <description> Insert decimal phase after existing
|
|
45
|
+
* phase remove <phase> [--force] Remove phase, renumber all subsequent
|
|
46
|
+
* phase complete <phase> Mark phase done, update state + roadmap
|
|
47
|
+
*
|
|
48
|
+
* Roadmap Operations:
|
|
49
|
+
* roadmap get-phase <phase> Extract phase section from ROADMAP.md
|
|
50
|
+
* roadmap analyze Full roadmap parse with disk status
|
|
51
|
+
* roadmap update-plan-progress <N> Update progress table row from disk (PLAN vs SUMMARY counts)
|
|
52
|
+
* roadmap annotate-dependencies <N> Add wave dependency notes + cross-cutting constraints to ROADMAP.md
|
|
53
|
+
*
|
|
54
|
+
* Requirements Operations:
|
|
55
|
+
* requirements mark-complete <ids> Mark requirement IDs as complete in REQUIREMENTS.md
|
|
56
|
+
* Accepts: REQ-01,REQ-02 or REQ-01 REQ-02 or [REQ-01, REQ-02]
|
|
57
|
+
*
|
|
58
|
+
* Milestone Operations:
|
|
59
|
+
* milestone complete <version> Archive milestone, create MILESTONES.md
|
|
60
|
+
* [--name <name>]
|
|
61
|
+
* [--archive-phases] Move phase dirs to milestones/vX.Y-phases/
|
|
62
|
+
*
|
|
63
|
+
* Validation:
|
|
64
|
+
* validate consistency Check phase numbering, disk/roadmap sync
|
|
65
|
+
* validate health [--repair] Check .planning/ integrity, optionally repair
|
|
66
|
+
* validate agents Check GSD agent installation status
|
|
67
|
+
*
|
|
68
|
+
* Progress:
|
|
69
|
+
* progress [json|table|bar] Render progress in various formats
|
|
70
|
+
*
|
|
71
|
+
* Todos:
|
|
72
|
+
* todo complete <filename> Move todo from pending to completed
|
|
73
|
+
*
|
|
74
|
+
* UAT Audit:
|
|
75
|
+
* audit-uat Scan all phases for unresolved UAT/verification items
|
|
76
|
+
* uat render-checkpoint --file <path> Render the current UAT checkpoint block
|
|
77
|
+
*
|
|
78
|
+
* Open Artifact Audit:
|
|
79
|
+
* audit-open [--json] Scan all .planning/ artifact types for unresolved items
|
|
80
|
+
*
|
|
81
|
+
* Intel:
|
|
82
|
+
* intel query <term> Query intel files for a term
|
|
83
|
+
* intel status Show intel file freshness
|
|
84
|
+
* intel update Trigger intel refresh (returns agent spawn hint)
|
|
85
|
+
* intel diff Show changed intel entries since last snapshot
|
|
86
|
+
* intel snapshot Save current intel state as diff baseline
|
|
87
|
+
* intel patch-meta <file> Update _meta.updated_at in an intel file
|
|
88
|
+
* intel validate Validate intel file structure
|
|
89
|
+
* intel extract-exports <file> Extract exported symbols from a source file
|
|
90
|
+
*
|
|
91
|
+
* Scaffolding:
|
|
92
|
+
* scaffold context --phase <N> Create CONTEXT.md template
|
|
93
|
+
* scaffold uat --phase <N> Create UAT.md template
|
|
94
|
+
* scaffold verification --phase <N> Create VERIFICATION.md template
|
|
95
|
+
* scaffold phase-dir --phase <N> Create phase directory
|
|
96
|
+
* --name <name>
|
|
97
|
+
*
|
|
98
|
+
* Frontmatter CRUD:
|
|
99
|
+
* frontmatter get <file> [--field k] Extract frontmatter as JSON
|
|
100
|
+
* frontmatter set <file> --field k Update single frontmatter field
|
|
101
|
+
* --value jsonVal
|
|
102
|
+
* frontmatter merge <file> Merge JSON into frontmatter
|
|
103
|
+
* --data '{json}'
|
|
104
|
+
* frontmatter validate <file> Validate required fields
|
|
105
|
+
* --schema plan|summary|verification
|
|
106
|
+
*
|
|
107
|
+
* Verification Suite:
|
|
108
|
+
* verify plan-structure <file> Check PLAN.md structure + tasks
|
|
109
|
+
* verify phase-completeness <phase> Check all plans have summaries
|
|
110
|
+
* verify references <file> Check @-refs + paths resolve
|
|
111
|
+
* verify commits <h1> [h2] ... Batch verify commit hashes
|
|
112
|
+
* verify artifacts <plan-file> Check must_haves.artifacts
|
|
113
|
+
* verify key-links <plan-file> Check must_haves.key_links
|
|
114
|
+
* verify schema-drift <phase> [--skip] Detect schema file changes without push
|
|
115
|
+
* verify codebase-drift Detect structural drift since last codebase map (#2003)
|
|
116
|
+
*
|
|
117
|
+
* Template Fill:
|
|
118
|
+
* template fill summary --phase N Create pre-filled SUMMARY.md
|
|
119
|
+
* [--plan M] [--name "..."]
|
|
120
|
+
* [--fields '{json}']
|
|
121
|
+
* template fill plan --phase N Create pre-filled PLAN.md
|
|
122
|
+
* [--plan M] [--type execute|tdd]
|
|
123
|
+
* [--wave N] [--fields '{json}']
|
|
124
|
+
* template fill verification Create pre-filled VERIFICATION.md
|
|
125
|
+
* --phase N [--fields '{json}']
|
|
126
|
+
*
|
|
127
|
+
* State Progression:
|
|
128
|
+
* state advance-plan Increment plan counter
|
|
129
|
+
* state record-metric --phase N Record execution metrics
|
|
130
|
+
* --plan M --duration Xmin
|
|
131
|
+
* [--tasks N] [--files N]
|
|
132
|
+
* state update-progress Recalculate progress bar
|
|
133
|
+
* state add-decision --summary "..." Add decision to STATE.md
|
|
134
|
+
* [--phase N] [--rationale "..."]
|
|
135
|
+
* [--summary-file path] [--rationale-file path]
|
|
136
|
+
* state add-blocker --text "..." Add blocker
|
|
137
|
+
* [--text-file path]
|
|
138
|
+
* state resolve-blocker --text "..." Remove blocker
|
|
139
|
+
* state record-session Update session continuity
|
|
140
|
+
* --stopped-at "..."
|
|
141
|
+
* [--resume-file path]
|
|
142
|
+
*
|
|
143
|
+
* Compound Commands (workflow-specific initialization):
|
|
144
|
+
* init execute-phase <phase> All context for execute-phase workflow
|
|
145
|
+
* init plan-phase <phase> All context for plan-phase workflow
|
|
146
|
+
* init new-project All context for new-project workflow
|
|
147
|
+
* init new-milestone All context for new-milestone workflow
|
|
148
|
+
* init quick <description> All context for quick workflow
|
|
149
|
+
* init resume All context for resume-project workflow
|
|
150
|
+
* init verify-work <phase> All context for verify-work workflow
|
|
151
|
+
* init phase-op <phase> Generic phase operation context
|
|
152
|
+
* init todos [area] All context for todo workflows
|
|
153
|
+
* init milestone-op All context for milestone operations
|
|
154
|
+
* init map-codebase All context for map-codebase workflow
|
|
155
|
+
* init progress All context for progress workflow
|
|
156
|
+
*
|
|
157
|
+
* Documentation:
|
|
158
|
+
* docs-init Project context for docs-update workflow
|
|
159
|
+
*
|
|
160
|
+
* Learnings:
|
|
161
|
+
* learnings list List all global learnings (JSON)
|
|
162
|
+
* learnings query --tag <tag> Query learnings by tag
|
|
163
|
+
* learnings copy Copy from current project's LEARNINGS.md
|
|
164
|
+
* learnings prune --older-than <dur> Remove entries older than duration (e.g. 90d)
|
|
165
|
+
* learnings delete <id> Delete a learning by ID
|
|
166
|
+
*
|
|
167
|
+
* GSD-2 Migration:
|
|
168
|
+
* from-gsd2 [--path <dir>] [--force] [--dry-run]
|
|
169
|
+
* Import a GSD-2 (.gsd/) project back to GSD v1 (.planning/) format
|
|
170
|
+
*/
|
|
171
|
+
|
|
172
|
+
const fs = require('fs');
|
|
173
|
+
const path = require('path');
|
|
174
|
+
const core = require('./lib/core.cjs');
|
|
175
|
+
const { error, findProjectRoot, ERROR_REASON } = core;
|
|
176
|
+
const { getActiveWorkstream } = require('./lib/planning-workspace.cjs');
|
|
177
|
+
const { resolveActiveWorkstream, applyResolvedWorkstreamEnv } = require('./lib/active-workstream-store.cjs');
|
|
178
|
+
const state = require('./lib/state.cjs');
|
|
179
|
+
const phase = require('./lib/phase.cjs');
|
|
180
|
+
const roadmap = require('./lib/roadmap.cjs');
|
|
181
|
+
const verify = require('./lib/verify.cjs');
|
|
182
|
+
const config = require('./lib/config.cjs');
|
|
183
|
+
const template = require('./lib/template.cjs');
|
|
184
|
+
const milestone = require('./lib/milestone.cjs');
|
|
185
|
+
const commands = require('./lib/commands.cjs');
|
|
186
|
+
const init = require('./lib/init.cjs');
|
|
187
|
+
const frontmatter = require('./lib/frontmatter.cjs');
|
|
188
|
+
const profilePipeline = require('./lib/profile-pipeline.cjs');
|
|
189
|
+
const profileOutput = require('./lib/profile-output.cjs');
|
|
190
|
+
const workstream = require('./lib/workstream.cjs');
|
|
191
|
+
const docs = require('./lib/docs.cjs');
|
|
192
|
+
const learnings = require('./lib/learnings.cjs');
|
|
193
|
+
const gapChecker = require('./lib/gap-checker.cjs');
|
|
194
|
+
const { routeStateCommand } = require('./lib/state-command-router.cjs');
|
|
195
|
+
const { routeVerifyCommand } = require('./lib/verify-command-router.cjs');
|
|
196
|
+
const { routeInitCommand } = require('./lib/init-command-router.cjs');
|
|
197
|
+
const { routePhaseCommand } = require('./lib/phase-command-router.cjs');
|
|
198
|
+
const { routePhasesCommand } = require('./lib/phases-command-router.cjs');
|
|
199
|
+
const { routeValidateCommand } = require('./lib/validate-command-router.cjs');
|
|
200
|
+
const { routeRoadmapCommand } = require('./lib/roadmap-command-router.cjs');
|
|
201
|
+
|
|
202
|
+
// ─── SDK bridge (Phase 6 inline family / non-family delegation) ───────────────
|
|
203
|
+
// For inline case blocks that have SDK counterparts (frontmatter, config, and
|
|
204
|
+
// non-family commands), we attempt to dispatch via executeForCjs (the sync
|
|
205
|
+
// bridge). CJS handlers are retained as fallback when SDK is unavailable.
|
|
206
|
+
//
|
|
207
|
+
// NOTE: migrate-config, detect-custom-files, config-path, and find-phase
|
|
208
|
+
// are CJS-native special cases; see comments inline.
|
|
209
|
+
|
|
210
|
+
// Shared loader for the synchronous SDK runtime bridge; see
|
|
211
|
+
// `bin/lib/cjs-sdk-bridge.cjs`. All canonical-command CJS dispatchers (the
|
|
212
|
+
// per-family routers and the non-family helper below) consume the same loader
|
|
213
|
+
// so a change to the SDK-load contract lands in one place.
|
|
214
|
+
const { tryLoadSdk: _tryLoadSdkBridge, getExecuteForCjs } = require('./lib/cjs-sdk-bridge.cjs');
|
|
215
|
+
|
|
216
|
+
/**
|
|
217
|
+
* Attempt SDK dispatch for a non-family command.
|
|
218
|
+
*
|
|
219
|
+
* Returns true when the SDK was available and handled the command (success or
|
|
220
|
+
* typed error). Returns false when the SDK is unavailable, signalling the
|
|
221
|
+
* caller to fall through to the CJS handler.
|
|
222
|
+
*
|
|
223
|
+
* @param {object} opts
|
|
224
|
+
* @param {string} opts.registryCommand - canonical command name in the SDK registry
|
|
225
|
+
* @param {string[]} opts.registryArgs - args to pass to the SDK handler
|
|
226
|
+
* @param {string} opts.legacyCommand - original gsd-tools command name (for error messages)
|
|
227
|
+
* @param {string[]} opts.legacyArgs - original args (for error messages)
|
|
228
|
+
* @param {string} opts.cwd - project dir
|
|
229
|
+
* @param {boolean} opts.raw - raw output mode
|
|
230
|
+
* @param {Function} opts.error - error reporter
|
|
231
|
+
* @param {Function} opts.output - output emitter (core.output)
|
|
232
|
+
*/
|
|
233
|
+
function _dispatchNonFamily({ registryCommand, registryArgs, legacyCommand, legacyArgs, cwd, raw, error, output }) {
|
|
234
|
+
if (!_tryLoadSdkBridge()) return false;
|
|
235
|
+
const result = getExecuteForCjs()({
|
|
236
|
+
registryCommand,
|
|
237
|
+
registryArgs,
|
|
238
|
+
legacyCommand,
|
|
239
|
+
legacyArgs,
|
|
240
|
+
// Always request typed JSON from the bridge; CJS `output(data, raw)` handles
|
|
241
|
+
// user-facing rendering. Passing `mode: 'raw'` would make the bridge
|
|
242
|
+
// pre-render result.data to a JSON string that the CJS output path then
|
|
243
|
+
// double-stringifies (returning a JSON string of a JSON string).
|
|
244
|
+
mode: 'json',
|
|
245
|
+
projectDir: cwd,
|
|
246
|
+
workstream: process.env.GSD_WORKSTREAM || undefined,
|
|
247
|
+
});
|
|
248
|
+
if (!result.ok) {
|
|
249
|
+
const message = (result.errorDetails && result.errorDetails.message)
|
|
250
|
+
|| `${legacyCommand} (${registryCommand}) failed (${result.errorKind})`;
|
|
251
|
+
// Propagate the structured reason code through to CJS `error()` so the
|
|
252
|
+
// `--json-errors` JSON-shaped stderr carries the typed reason (e.g.
|
|
253
|
+
// 'config_key_not_found') instead of the generic 'unknown'. Handlers
|
|
254
|
+
// tag the GSDError with `.reason` and the worker forwards it via
|
|
255
|
+
// errorDetails.reason. (Bugs #2943, #3086.)
|
|
256
|
+
const reason = result.errorDetails && result.errorDetails.reason;
|
|
257
|
+
if (reason) {
|
|
258
|
+
error(message, reason);
|
|
259
|
+
} else {
|
|
260
|
+
error(message);
|
|
261
|
+
}
|
|
262
|
+
return true; // handled (error reported)
|
|
263
|
+
}
|
|
264
|
+
// CJS parity for --raw output (config.cjs:525 `output(value, raw, String(value))`):
|
|
265
|
+
// when the caller asked for --raw and the SDK returned a scalar, pass that
|
|
266
|
+
// scalar through as `rawValue` so core.output() emits the bare string
|
|
267
|
+
// representation instead of JSON-stringifying it. Non-scalar shapes fall
|
|
268
|
+
// through to the structured JSON path, matching `output(obj, raw)`.
|
|
269
|
+
const data = result.data;
|
|
270
|
+
if (raw && (typeof data === 'string' || typeof data === 'number' || typeof data === 'boolean')) {
|
|
271
|
+
output(data, raw, String(data));
|
|
272
|
+
} else {
|
|
273
|
+
output(data, raw);
|
|
274
|
+
}
|
|
275
|
+
return true;
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
// ─── Arg parsing helpers ──────────────────────────────────────────────────────
|
|
279
|
+
|
|
280
|
+
/**
|
|
281
|
+
* Extract named --flag <value> pairs from an args array.
|
|
282
|
+
* Returns an object mapping flag names to their values (null if absent).
|
|
283
|
+
* Flags listed in `booleanFlags` are treated as boolean (no value consumed).
|
|
284
|
+
*
|
|
285
|
+
* parseNamedArgs(args, 'phase', 'plan') → { phase: '3', plan: '1' }
|
|
286
|
+
* parseNamedArgs(args, [], ['amend', 'force']) → { amend: true, force: false }
|
|
287
|
+
*/
|
|
288
|
+
function parseNamedArgs(args, valueFlags = [], booleanFlags = []) {
|
|
289
|
+
const result = {};
|
|
290
|
+
for (const flag of valueFlags) {
|
|
291
|
+
const idx = args.indexOf(`--${flag}`);
|
|
292
|
+
result[flag] = idx !== -1 && args[idx + 1] !== undefined && !args[idx + 1].startsWith('--')
|
|
293
|
+
? args[idx + 1]
|
|
294
|
+
: null;
|
|
295
|
+
}
|
|
296
|
+
for (const flag of booleanFlags) {
|
|
297
|
+
result[flag] = args.includes(`--${flag}`);
|
|
298
|
+
}
|
|
299
|
+
return result;
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
/**
|
|
303
|
+
* Collect all tokens after --flag until the next --flag or end of args.
|
|
304
|
+
* Handles multi-word values like --name Foo Bar Version 1.
|
|
305
|
+
* Returns null if the flag is absent.
|
|
306
|
+
*/
|
|
307
|
+
function parseMultiwordArg(args, flag) {
|
|
308
|
+
const idx = args.indexOf(`--${flag}`);
|
|
309
|
+
if (idx === -1) return null;
|
|
310
|
+
const tokens = [];
|
|
311
|
+
for (let i = idx + 1; i < args.length; i++) {
|
|
312
|
+
if (args[i].startsWith('--')) break;
|
|
313
|
+
tokens.push(args[i]);
|
|
314
|
+
}
|
|
315
|
+
return tokens.length > 0 ? tokens.join(' ') : null;
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
// ─── CLI Router ───────────────────────────────────────────────────────────────
|
|
319
|
+
|
|
320
|
+
async function main() {
|
|
321
|
+
let args = process.argv.slice(2);
|
|
322
|
+
|
|
323
|
+
// --json-errors / GSD_JSON_ERRORS=1: when active, error() emits structured
|
|
324
|
+
// JSON ({ ok: false, reason: <ERROR_REASON code>, message }) to stderr
|
|
325
|
+
// instead of "Error: <text>". Lets test suites assert on typed reason codes
|
|
326
|
+
// per CONTRIBUTING.md "Prohibited: Raw Text Matching" (#2974).
|
|
327
|
+
//
|
|
328
|
+
// Detect early — before any flag parsing that can fire error() — so even
|
|
329
|
+
// --cwd and workstream-resolution failures emit structured stderr (#3310).
|
|
330
|
+
// The argv splice must happen here too, otherwise the dispatcher below sees
|
|
331
|
+
// "--json-errors" as an unknown command. Default off — human operators keep
|
|
332
|
+
// their plain-text diagnostic.
|
|
333
|
+
const jsonErrorsIdx = args.indexOf('--json-errors');
|
|
334
|
+
if (jsonErrorsIdx !== -1) {
|
|
335
|
+
core.setJsonErrorMode(true);
|
|
336
|
+
args.splice(jsonErrorsIdx, 1);
|
|
337
|
+
} else if (process.env.GSD_JSON_ERRORS === '1') {
|
|
338
|
+
core.setJsonErrorMode(true);
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
// Optional cwd override for sandboxed subagents running outside project root.
|
|
342
|
+
let cwd = process.cwd();
|
|
343
|
+
const cwdEqArg = args.find(arg => arg.startsWith('--cwd='));
|
|
344
|
+
const cwdIdx = args.indexOf('--cwd');
|
|
345
|
+
if (cwdEqArg) {
|
|
346
|
+
const value = cwdEqArg.slice('--cwd='.length).trim();
|
|
347
|
+
if (!value) error('Missing value for --cwd', ERROR_REASON.USAGE);
|
|
348
|
+
args.splice(args.indexOf(cwdEqArg), 1);
|
|
349
|
+
cwd = path.resolve(value);
|
|
350
|
+
} else if (cwdIdx !== -1) {
|
|
351
|
+
const value = args[cwdIdx + 1];
|
|
352
|
+
if (!value || value.startsWith('--')) error('Missing value for --cwd', ERROR_REASON.USAGE);
|
|
353
|
+
args.splice(cwdIdx, 2);
|
|
354
|
+
cwd = path.resolve(value);
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
if (!fs.existsSync(cwd) || !fs.statSync(cwd).isDirectory()) {
|
|
358
|
+
error(`Invalid --cwd: ${cwd}`, ERROR_REASON.USAGE);
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
// Resolve worktree root: in a linked worktree, .planning/ lives in the main worktree.
|
|
362
|
+
// However, in monorepo worktrees where the subdirectory itself owns .planning/,
|
|
363
|
+
// skip worktree resolution — the CWD is already the correct project root.
|
|
364
|
+
const { resolveWorktreeRoot } = require('./lib/core.cjs');
|
|
365
|
+
if (!fs.existsSync(path.join(cwd, '.planning'))) {
|
|
366
|
+
const worktreeRoot = resolveWorktreeRoot(cwd);
|
|
367
|
+
if (worktreeRoot !== cwd) {
|
|
368
|
+
cwd = worktreeRoot;
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
// Optional workstream override for parallel milestone work.
|
|
373
|
+
// Priority: --ws flag > GSD_WORKSTREAM env var > session/shared pointer > null.
|
|
374
|
+
let ws = null;
|
|
375
|
+
try {
|
|
376
|
+
const wsResolution = resolveActiveWorkstream(cwd, args, process.env, {
|
|
377
|
+
getStored: getActiveWorkstream,
|
|
378
|
+
});
|
|
379
|
+
ws = wsResolution.ws;
|
|
380
|
+
args = wsResolution.args;
|
|
381
|
+
// Set env var so all modules (planningDir, planningPaths) auto-resolve workstream paths.
|
|
382
|
+
applyResolvedWorkstreamEnv(wsResolution, process.env);
|
|
383
|
+
} catch (err) {
|
|
384
|
+
error(err.message || String(err));
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
const rawIndex = args.indexOf('--raw');
|
|
388
|
+
const raw = rawIndex !== -1;
|
|
389
|
+
if (rawIndex !== -1) args.splice(rawIndex, 1);
|
|
390
|
+
|
|
391
|
+
// --pick <name>: extract a single field from JSON output (replaces jq dependency).
|
|
392
|
+
// Supports dot-notation (e.g., --pick workflow.research) and bracket notation
|
|
393
|
+
// for arrays (e.g., --pick directories[-1]).
|
|
394
|
+
const pickIdx = args.indexOf('--pick');
|
|
395
|
+
let pickField = null;
|
|
396
|
+
if (pickIdx !== -1) {
|
|
397
|
+
pickField = args[pickIdx + 1];
|
|
398
|
+
if (!pickField || pickField.startsWith('--')) error('Missing value for --pick', ERROR_REASON.USAGE);
|
|
399
|
+
args.splice(pickIdx, 2);
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
// --default <value>: for config-get, return this value instead of erroring
|
|
403
|
+
// when the key is absent. Allows workflows to express optional config reads
|
|
404
|
+
// without defensive `2>/dev/null || true` boilerplate (#1893).
|
|
405
|
+
const defaultIdx = args.indexOf('--default');
|
|
406
|
+
let defaultValue = undefined;
|
|
407
|
+
if (defaultIdx !== -1) {
|
|
408
|
+
defaultValue = args[defaultIdx + 1];
|
|
409
|
+
if (defaultValue === undefined) defaultValue = '';
|
|
410
|
+
args.splice(defaultIdx, 2);
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
let command = args[0];
|
|
414
|
+
|
|
415
|
+
// #3243: accept dotted canonical form (e.g. `state.update`) as well as the
|
|
416
|
+
// spaced form (`state update`). Workflow files and stale SDK binaries pass
|
|
417
|
+
// the dotted canonical form directly; any caller that bypasses the SDK
|
|
418
|
+
// client-side split hit "Unknown command" before this shim.
|
|
419
|
+
//
|
|
420
|
+
// Split on the FIRST dot only — `check.decision-coverage-plan` becomes
|
|
421
|
+
// command='check', args=['check','decision-coverage-plan',...rest].
|
|
422
|
+
// Parallel to dottedCommandToCjsArgv in sdk/src/query/query-fallback-bridge-adapter.ts;
|
|
423
|
+
// kept separate here to avoid SDK coupling (see TODO: extract to shared helper).
|
|
424
|
+
//
|
|
425
|
+
// Guard: head and rest must both be non-empty (rejects leading-dot args like
|
|
426
|
+
// ".hidden" and bare-dot ".").
|
|
427
|
+
const originalCommand = command; // preserved for "Unknown command" suggestion
|
|
428
|
+
if (typeof command === 'string' && command.includes('.')) {
|
|
429
|
+
const dotIdx = command.indexOf('.');
|
|
430
|
+
const head = command.slice(0, dotIdx);
|
|
431
|
+
const rest = command.slice(dotIdx + 1);
|
|
432
|
+
if (head && rest) {
|
|
433
|
+
command = head;
|
|
434
|
+
args = [head, rest, ...args.slice(1)];
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
// Top-level usage string — emitted by `gsd-tools` (no args) and by
|
|
439
|
+
// `gsd-tools --help` / any `--help` request below.
|
|
440
|
+
// CR feedback: the command list must enumerate every top-level command
|
|
441
|
+
// supported by the dispatcher so `--help` is actually useful for
|
|
442
|
+
// discovery; previously it was a partial subset that didn't include
|
|
443
|
+
// phase / roadmap / milestone / progress / etc.
|
|
444
|
+
const TOP_LEVEL_USAGE = 'Usage: gsd-tools <command> [args] [--raw] [--pick <field>] [--cwd <path>] [--ws <name>] [--json-errors]\n' +
|
|
445
|
+
'Commands: agent-skills, audit-open, audit-uat, check-commit, commit, commit-to-subrepo, ' +
|
|
446
|
+
'config-ensure-section, config-get, config-new-project, config-path, config-set, migrate-config, ' +
|
|
447
|
+
'current-timestamp, detect-custom-files, docs-init, extract-messages, find-phase, ' +
|
|
448
|
+
'from-gsd2, frontmatter, gap-analysis, generate-claude-md, generate-claude-profile, ' +
|
|
449
|
+
'generate-dev-preferences, generate-slug, graphify, history-digest, init, intel, ' +
|
|
450
|
+
'learnings, list-todos, milestone, phase, phase-plan-index, phases, profile-questionnaire, ' +
|
|
451
|
+
'profile-sample, progress, prompt-budget, requirements, resolve-model, roadmap, scaffold, state, ' +
|
|
452
|
+
'template, validate, verify, verify-path-exists, verify-summary, workstream, worktree\n\n' +
|
|
453
|
+
'Global flags:\n' +
|
|
454
|
+
' --raw Emit raw output without post-processing\n' +
|
|
455
|
+
' --pick <field> Extract a single field from JSON output (dot/bracket notation)\n' +
|
|
456
|
+
' --cwd <path> Override working directory for project-root resolution\n' +
|
|
457
|
+
' --ws <name> Override active workstream (or set GSD_WORKSTREAM)\n' +
|
|
458
|
+
' --json-errors Emit structured JSON error objects on stderr (or set GSD_JSON_ERRORS=1)\n\n' +
|
|
459
|
+
'For command-specific argument requirements, invoke the command without args ' +
|
|
460
|
+
'(e.g. `gsd-tools phase add`) — the resulting error lists what is required.';
|
|
461
|
+
|
|
462
|
+
if (!command) {
|
|
463
|
+
error(TOP_LEVEL_USAGE);
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
// #3019: a `--help` / `-h` flag in argv must render the top-level usage
|
|
467
|
+
// and exit 0 — not error out with "Unknown flag". The previous shape
|
|
468
|
+
// erred on agent-hallucinated flags, but it also blocked humans from
|
|
469
|
+
// discovering the command surface via subcommand help requests routed
|
|
470
|
+
// here from the SDK CLI's query dispatcher (after the cli.ts fix that
|
|
471
|
+
// stops harvesting --help as a global flag). Rendering top-level usage
|
|
472
|
+
// on --help is strictly better UX than the old short-circuit, which
|
|
473
|
+
// printed the SDK-level usage that doesn't mention any of these
|
|
474
|
+
// subcommands.
|
|
475
|
+
const HELP_FLAGS = new Set(['-h', '--help', '-?', '--h', '--usage']);
|
|
476
|
+
if (args.some((a) => HELP_FLAGS.has(a))) {
|
|
477
|
+
process.stdout.write(TOP_LEVEL_USAGE + '\n');
|
|
478
|
+
return;
|
|
479
|
+
}
|
|
480
|
+
|
|
481
|
+
// Reject version flags. AI agents sometimes hallucinate --version on tool
|
|
482
|
+
// invocations; silently ignoring it can cause destructive operations to
|
|
483
|
+
// proceed unchecked. (Help flags are handled above.)
|
|
484
|
+
const NEVER_VALID_FLAGS = new Set(['--version', '-v']);
|
|
485
|
+
for (const arg of args) {
|
|
486
|
+
if (NEVER_VALID_FLAGS.has(arg)) {
|
|
487
|
+
error(`Unknown flag: ${arg}\ngsd-tools does not accept version flags. Run "gsd-tools" with no arguments for usage.`, ERROR_REASON.USAGE);
|
|
488
|
+
}
|
|
489
|
+
}
|
|
490
|
+
|
|
491
|
+
// Multi-repo guard: resolve project root for commands that read/write .planning/.
|
|
492
|
+
// Skip for pure-utility commands that don't touch .planning/ to avoid unnecessary
|
|
493
|
+
// filesystem traversal on every invocation.
|
|
494
|
+
const SKIP_ROOT_RESOLUTION = new Set([
|
|
495
|
+
'generate-slug', 'current-timestamp', 'verify-path-exists',
|
|
496
|
+
'verify-summary', 'template', 'frontmatter', 'detect-custom-files',
|
|
497
|
+
'worktree', 'prompt-budget',
|
|
498
|
+
]);
|
|
499
|
+
if (!SKIP_ROOT_RESOLUTION.has(command)) {
|
|
500
|
+
cwd = findProjectRoot(cwd);
|
|
501
|
+
}
|
|
502
|
+
|
|
503
|
+
// When --pick is active, intercept stdout to extract the requested field.
|
|
504
|
+
if (pickField) {
|
|
505
|
+
const origWriteSync = fs.writeSync;
|
|
506
|
+
let captured = '';
|
|
507
|
+
fs.writeSync = function (fd, data, ...rest) {
|
|
508
|
+
if (fd === 1) {
|
|
509
|
+
captured += String(data);
|
|
510
|
+
return;
|
|
511
|
+
}
|
|
512
|
+
return origWriteSync.call(fs, fd, data, ...rest);
|
|
513
|
+
};
|
|
514
|
+
const cleanup = () => {
|
|
515
|
+
fs.writeSync = origWriteSync;
|
|
516
|
+
let jsonStr = captured;
|
|
517
|
+
if (jsonStr.startsWith('@file:')) {
|
|
518
|
+
jsonStr = fs.readFileSync(jsonStr.slice(6), 'utf-8');
|
|
519
|
+
}
|
|
520
|
+
try {
|
|
521
|
+
const obj = JSON.parse(jsonStr);
|
|
522
|
+
const value = extractField(obj, pickField);
|
|
523
|
+
const result = value === null || value === undefined ? '' : String(value);
|
|
524
|
+
origWriteSync.call(fs, 1, result);
|
|
525
|
+
} catch {
|
|
526
|
+
origWriteSync.call(fs, 1, captured);
|
|
527
|
+
}
|
|
528
|
+
};
|
|
529
|
+
try {
|
|
530
|
+
await runCommand(command, args, cwd, raw, defaultValue, originalCommand);
|
|
531
|
+
cleanup();
|
|
532
|
+
} catch (e) {
|
|
533
|
+
fs.writeSync = origWriteSync;
|
|
534
|
+
throw e;
|
|
535
|
+
}
|
|
536
|
+
return;
|
|
537
|
+
}
|
|
538
|
+
|
|
539
|
+
// Intercept stdout to transparently resolve @file: references (#1891).
|
|
540
|
+
// core.cjs output() writes @file:<path> when JSON > 50KB. The --pick path
|
|
541
|
+
// already resolves this, but the normal path wrote @file: to stdout, forcing
|
|
542
|
+
// every workflow to have a bash-specific `if [[ "$INIT" == @file:* ]]` check
|
|
543
|
+
// that breaks on PowerShell and other non-bash shells.
|
|
544
|
+
const origWriteSync2 = fs.writeSync;
|
|
545
|
+
let captured = '';
|
|
546
|
+
fs.writeSync = function (fd, data, ...rest) {
|
|
547
|
+
if (fd === 1) {
|
|
548
|
+
captured += String(data);
|
|
549
|
+
return;
|
|
550
|
+
}
|
|
551
|
+
return origWriteSync2.call(fs, fd, data, ...rest);
|
|
552
|
+
};
|
|
553
|
+
try {
|
|
554
|
+
await runCommand(command, args, cwd, raw, defaultValue, originalCommand);
|
|
555
|
+
} finally {
|
|
556
|
+
fs.writeSync = origWriteSync2;
|
|
557
|
+
}
|
|
558
|
+
if (captured.startsWith('@file:')) {
|
|
559
|
+
captured = fs.readFileSync(captured.slice(6), 'utf-8');
|
|
560
|
+
}
|
|
561
|
+
origWriteSync2.call(fs, 1, captured);
|
|
562
|
+
}
|
|
563
|
+
|
|
564
|
+
/**
|
|
565
|
+
* Extract a field from an object using dot-notation and bracket syntax.
|
|
566
|
+
* Supports: 'field', 'parent.child', 'arr[-1]', 'arr[0]'
|
|
567
|
+
*/
|
|
568
|
+
function extractField(obj, fieldPath) {
|
|
569
|
+
const parts = fieldPath.split('.');
|
|
570
|
+
let current = obj;
|
|
571
|
+
for (const part of parts) {
|
|
572
|
+
if (current === null || current === undefined) return undefined;
|
|
573
|
+
const bracketMatch = part.match(/^(.+?)\[(-?\d+)]$/);
|
|
574
|
+
if (bracketMatch) {
|
|
575
|
+
const key = bracketMatch[1];
|
|
576
|
+
const index = parseInt(bracketMatch[2], 10);
|
|
577
|
+
current = current[key];
|
|
578
|
+
if (!Array.isArray(current)) return undefined;
|
|
579
|
+
current = index < 0 ? current[current.length + index] : current[index];
|
|
580
|
+
} else {
|
|
581
|
+
current = current[part];
|
|
582
|
+
}
|
|
583
|
+
}
|
|
584
|
+
return current;
|
|
585
|
+
}
|
|
586
|
+
|
|
587
|
+
async function runCommand(command, args, cwd, raw, defaultValue, originalCommand) {
|
|
588
|
+
switch (command) {
|
|
589
|
+
case 'state': {
|
|
590
|
+
routeStateCommand({
|
|
591
|
+
state,
|
|
592
|
+
args,
|
|
593
|
+
cwd,
|
|
594
|
+
raw,
|
|
595
|
+
parseNamedArgs,
|
|
596
|
+
error,
|
|
597
|
+
});
|
|
598
|
+
break;
|
|
599
|
+
}
|
|
600
|
+
|
|
601
|
+
case 'resolve-model': {
|
|
602
|
+
commands.cmdResolveModel(cwd, args[1], raw);
|
|
603
|
+
break;
|
|
604
|
+
}
|
|
605
|
+
|
|
606
|
+
case 'find-phase': {
|
|
607
|
+
// Phase 6 (#3575): dispatch via SDK executeForCjs when available.
|
|
608
|
+
// SDK handler: findPhase in sdk/src/query/phase.ts.
|
|
609
|
+
const handled = _dispatchNonFamily({
|
|
610
|
+
registryCommand: 'find-phase',
|
|
611
|
+
registryArgs: args.slice(1),
|
|
612
|
+
legacyCommand: 'find-phase',
|
|
613
|
+
legacyArgs: args.slice(1),
|
|
614
|
+
cwd,
|
|
615
|
+
raw,
|
|
616
|
+
error,
|
|
617
|
+
output: core.output,
|
|
618
|
+
});
|
|
619
|
+
if (!handled) phase.cmdFindPhase(cwd, args[1], raw);
|
|
620
|
+
break;
|
|
621
|
+
}
|
|
622
|
+
|
|
623
|
+
case 'commit': {
|
|
624
|
+
const amend = args.includes('--amend');
|
|
625
|
+
const noVerify = args.includes('--no-verify');
|
|
626
|
+
const filesIndex = args.indexOf('--files');
|
|
627
|
+
// Collect all positional args between command name and first flag,
|
|
628
|
+
// then join them — handles both quoted ("multi word msg") and
|
|
629
|
+
// unquoted (multi word msg) invocations from different shells
|
|
630
|
+
const endIndex = filesIndex !== -1 ? filesIndex : args.length;
|
|
631
|
+
const messageArgs = args.slice(1, endIndex).filter(a => !a.startsWith('--'));
|
|
632
|
+
const message = messageArgs.join(' ') || undefined;
|
|
633
|
+
const files = filesIndex !== -1 ? args.slice(filesIndex + 1).filter(a => !a.startsWith('--')) : [];
|
|
634
|
+
commands.cmdCommit(cwd, message, files, raw, amend, noVerify);
|
|
635
|
+
break;
|
|
636
|
+
}
|
|
637
|
+
|
|
638
|
+
case 'check-commit': {
|
|
639
|
+
commands.cmdCheckCommit(cwd, raw);
|
|
640
|
+
break;
|
|
641
|
+
}
|
|
642
|
+
|
|
643
|
+
case 'commit-to-subrepo': {
|
|
644
|
+
const message = args[1];
|
|
645
|
+
const filesIndex = args.indexOf('--files');
|
|
646
|
+
const files = filesIndex !== -1 ? args.slice(filesIndex + 1).filter(a => !a.startsWith('--')) : [];
|
|
647
|
+
commands.cmdCommitToSubrepo(cwd, message, files, raw);
|
|
648
|
+
break;
|
|
649
|
+
}
|
|
650
|
+
|
|
651
|
+
case 'verify-summary': {
|
|
652
|
+
const summaryPath = args[1];
|
|
653
|
+
const countIndex = args.indexOf('--check-count');
|
|
654
|
+
const checkCount = countIndex !== -1 ? parseInt(args[countIndex + 1], 10) : 2;
|
|
655
|
+
verify.cmdVerifySummary(cwd, summaryPath, checkCount, raw);
|
|
656
|
+
break;
|
|
657
|
+
}
|
|
658
|
+
|
|
659
|
+
case 'template': {
|
|
660
|
+
const subcommand = args[1];
|
|
661
|
+
if (subcommand === 'select') {
|
|
662
|
+
template.cmdTemplateSelect(cwd, args[2], raw);
|
|
663
|
+
} else if (subcommand === 'fill') {
|
|
664
|
+
const templateType = args[2];
|
|
665
|
+
const { phase, plan, name, type, wave, fields: fieldsRaw } = parseNamedArgs(args, ['phase', 'plan', 'name', 'type', 'wave', 'fields']);
|
|
666
|
+
let fields = {};
|
|
667
|
+
if (fieldsRaw) {
|
|
668
|
+
const { safeJsonParse } = require('./lib/security.cjs');
|
|
669
|
+
const result = safeJsonParse(fieldsRaw, { label: '--fields' });
|
|
670
|
+
if (!result.ok) error(result.error);
|
|
671
|
+
fields = result.value;
|
|
672
|
+
}
|
|
673
|
+
template.cmdTemplateFill(cwd, templateType, {
|
|
674
|
+
phase, plan, name, fields,
|
|
675
|
+
type: type || 'execute',
|
|
676
|
+
wave: wave || '1',
|
|
677
|
+
}, raw);
|
|
678
|
+
} else {
|
|
679
|
+
error('Unknown template subcommand. Available: select, fill', ERROR_REASON.SDK_UNKNOWN_COMMAND);
|
|
680
|
+
}
|
|
681
|
+
break;
|
|
682
|
+
}
|
|
683
|
+
|
|
684
|
+
case 'frontmatter': {
|
|
685
|
+
// Phase 6 (#3575): dispatch via SDK executeForCjs when available.
|
|
686
|
+
// SDK handler: sdk/src/query/frontmatter.ts + frontmatter-mutation.ts.
|
|
687
|
+
// CJS fallback: frontmatter.cjs (cooperating sibling).
|
|
688
|
+
const subcommand = args[1];
|
|
689
|
+
const file = args[2];
|
|
690
|
+
const FRONTMATTER_SDK_MAP = {
|
|
691
|
+
get: 'frontmatter.get',
|
|
692
|
+
set: 'frontmatter.set',
|
|
693
|
+
merge: 'frontmatter.merge',
|
|
694
|
+
validate: 'frontmatter.validate',
|
|
695
|
+
};
|
|
696
|
+
if (subcommand in FRONTMATTER_SDK_MAP) {
|
|
697
|
+
const handled = _dispatchNonFamily({
|
|
698
|
+
registryCommand: FRONTMATTER_SDK_MAP[subcommand],
|
|
699
|
+
registryArgs: args.slice(2),
|
|
700
|
+
legacyCommand: 'frontmatter',
|
|
701
|
+
legacyArgs: args.slice(1),
|
|
702
|
+
cwd,
|
|
703
|
+
raw,
|
|
704
|
+
error,
|
|
705
|
+
output: core.output,
|
|
706
|
+
});
|
|
707
|
+
if (handled) break;
|
|
708
|
+
}
|
|
709
|
+
// CJS fallback (SDK unavailable or unknown subcommand)
|
|
710
|
+
if (subcommand === 'get') {
|
|
711
|
+
frontmatter.cmdFrontmatterGet(cwd, file, parseNamedArgs(args, ['field']).field, raw);
|
|
712
|
+
} else if (subcommand === 'set') {
|
|
713
|
+
const { field, value } = parseNamedArgs(args, ['field', 'value']);
|
|
714
|
+
frontmatter.cmdFrontmatterSet(cwd, file, field, value !== null ? value : undefined, raw);
|
|
715
|
+
} else if (subcommand === 'merge') {
|
|
716
|
+
frontmatter.cmdFrontmatterMerge(cwd, file, parseNamedArgs(args, ['data']).data, raw);
|
|
717
|
+
} else if (subcommand === 'validate') {
|
|
718
|
+
frontmatter.cmdFrontmatterValidate(cwd, file, parseNamedArgs(args, ['schema']).schema, raw);
|
|
719
|
+
} else {
|
|
720
|
+
error('Unknown frontmatter subcommand. Available: get, set, merge, validate', ERROR_REASON.SDK_UNKNOWN_COMMAND);
|
|
721
|
+
}
|
|
722
|
+
break;
|
|
723
|
+
}
|
|
724
|
+
|
|
725
|
+
case 'verify': {
|
|
726
|
+
routeVerifyCommand({
|
|
727
|
+
verify,
|
|
728
|
+
args,
|
|
729
|
+
cwd,
|
|
730
|
+
raw,
|
|
731
|
+
error,
|
|
732
|
+
});
|
|
733
|
+
break;
|
|
734
|
+
}
|
|
735
|
+
|
|
736
|
+
case 'generate-slug': {
|
|
737
|
+
// Phase 6 (#3575): dispatch via SDK executeForCjs when available.
|
|
738
|
+
// SDK handler: generateSlug in sdk/src/query/utils.ts.
|
|
739
|
+
const handled = _dispatchNonFamily({
|
|
740
|
+
registryCommand: 'generate-slug',
|
|
741
|
+
registryArgs: args.slice(1),
|
|
742
|
+
legacyCommand: 'generate-slug',
|
|
743
|
+
legacyArgs: args.slice(1),
|
|
744
|
+
cwd,
|
|
745
|
+
raw,
|
|
746
|
+
error,
|
|
747
|
+
output: core.output,
|
|
748
|
+
});
|
|
749
|
+
if (!handled) commands.cmdGenerateSlug(args[1], raw);
|
|
750
|
+
break;
|
|
751
|
+
}
|
|
752
|
+
|
|
753
|
+
case 'current-timestamp': {
|
|
754
|
+
// Phase 6 (#3575): dispatch via SDK executeForCjs when available.
|
|
755
|
+
// SDK handler: currentTimestamp in sdk/src/query/utils.ts.
|
|
756
|
+
const handled = _dispatchNonFamily({
|
|
757
|
+
registryCommand: 'current-timestamp',
|
|
758
|
+
registryArgs: args.slice(1),
|
|
759
|
+
legacyCommand: 'current-timestamp',
|
|
760
|
+
legacyArgs: args.slice(1),
|
|
761
|
+
cwd,
|
|
762
|
+
raw,
|
|
763
|
+
error,
|
|
764
|
+
output: core.output,
|
|
765
|
+
});
|
|
766
|
+
if (!handled) commands.cmdCurrentTimestamp(args[1] || 'full', raw);
|
|
767
|
+
break;
|
|
768
|
+
}
|
|
769
|
+
|
|
770
|
+
case 'list-todos': {
|
|
771
|
+
commands.cmdListTodos(cwd, args[1], raw);
|
|
772
|
+
break;
|
|
773
|
+
}
|
|
774
|
+
|
|
775
|
+
case 'verify-path-exists': {
|
|
776
|
+
commands.cmdVerifyPathExists(cwd, args[1], raw);
|
|
777
|
+
break;
|
|
778
|
+
}
|
|
779
|
+
|
|
780
|
+
case 'config-ensure-section': {
|
|
781
|
+
// Phase 6 (#3575): dispatch via SDK executeForCjs. The catalog rebinds
|
|
782
|
+
// 'config-ensure-section' to configNewProject in
|
|
783
|
+
// sdk/src/query/command-static-catalog-foundation.ts, restoring the
|
|
784
|
+
// legacy "no-arg full default init" contract on the SDK path
|
|
785
|
+
// (configEnsureSection itself stays available as an unbound single-
|
|
786
|
+
// section helper for future SDK callers).
|
|
787
|
+
const handled = _dispatchNonFamily({
|
|
788
|
+
registryCommand: 'config-ensure-section',
|
|
789
|
+
registryArgs: args.slice(1),
|
|
790
|
+
legacyCommand: 'config-ensure-section',
|
|
791
|
+
legacyArgs: args.slice(1),
|
|
792
|
+
cwd,
|
|
793
|
+
raw,
|
|
794
|
+
error,
|
|
795
|
+
output: core.output,
|
|
796
|
+
});
|
|
797
|
+
if (!handled) config.cmdConfigEnsureSection(cwd, raw);
|
|
798
|
+
break;
|
|
799
|
+
}
|
|
800
|
+
|
|
801
|
+
case 'config-set': {
|
|
802
|
+
// Phase 6 (#3575): dispatch via SDK executeForCjs when available.
|
|
803
|
+
const handled = _dispatchNonFamily({
|
|
804
|
+
registryCommand: 'config-set',
|
|
805
|
+
registryArgs: args.slice(1),
|
|
806
|
+
legacyCommand: 'config-set',
|
|
807
|
+
legacyArgs: args.slice(1),
|
|
808
|
+
cwd,
|
|
809
|
+
raw,
|
|
810
|
+
error,
|
|
811
|
+
output: core.output,
|
|
812
|
+
});
|
|
813
|
+
if (!handled) config.cmdConfigSet(cwd, args[1], args[2], raw);
|
|
814
|
+
break;
|
|
815
|
+
}
|
|
816
|
+
|
|
817
|
+
case "config-set-model-profile": {
|
|
818
|
+
// Phase 6 (#3575): dispatch via SDK executeForCjs when available.
|
|
819
|
+
const handled = _dispatchNonFamily({
|
|
820
|
+
registryCommand: 'config-set-model-profile',
|
|
821
|
+
registryArgs: args.slice(1),
|
|
822
|
+
legacyCommand: 'config-set-model-profile',
|
|
823
|
+
legacyArgs: args.slice(1),
|
|
824
|
+
cwd,
|
|
825
|
+
raw,
|
|
826
|
+
error,
|
|
827
|
+
output: core.output,
|
|
828
|
+
});
|
|
829
|
+
if (!handled) config.cmdConfigSetModelProfile(cwd, args[1], raw);
|
|
830
|
+
break;
|
|
831
|
+
}
|
|
832
|
+
|
|
833
|
+
case 'config-get': {
|
|
834
|
+
// Phase 6 (#3575): dispatch via SDK executeForCjs when available.
|
|
835
|
+
// The SDK handler supports --default via the registry args (args.slice(1)
|
|
836
|
+
// contains the key; defaultValue is handled by the SDK via the --default
|
|
837
|
+
// flag which was already stripped from args and held in defaultValue).
|
|
838
|
+
// Pass the full original args.slice(1) so the SDK sees the key; the
|
|
839
|
+
// defaultValue from the flag is in the global defaultValue variable above.
|
|
840
|
+
// Since the SDK handler reads --default from registryArgs, re-inject it.
|
|
841
|
+
const configGetSdkArgs = defaultValue !== undefined
|
|
842
|
+
? [args[1], '--default', defaultValue]
|
|
843
|
+
: args.slice(1);
|
|
844
|
+
const handled = _dispatchNonFamily({
|
|
845
|
+
registryCommand: 'config-get',
|
|
846
|
+
registryArgs: configGetSdkArgs,
|
|
847
|
+
legacyCommand: 'config-get',
|
|
848
|
+
legacyArgs: args.slice(1),
|
|
849
|
+
cwd,
|
|
850
|
+
raw,
|
|
851
|
+
error,
|
|
852
|
+
output: core.output,
|
|
853
|
+
});
|
|
854
|
+
if (!handled) config.cmdConfigGet(cwd, args[1], raw, defaultValue);
|
|
855
|
+
break;
|
|
856
|
+
}
|
|
857
|
+
|
|
858
|
+
case 'config-new-project': {
|
|
859
|
+
// Phase 6 (#3575): dispatch via SDK executeForCjs when available.
|
|
860
|
+
const handled = _dispatchNonFamily({
|
|
861
|
+
registryCommand: 'config-new-project',
|
|
862
|
+
registryArgs: args.slice(1),
|
|
863
|
+
legacyCommand: 'config-new-project',
|
|
864
|
+
legacyArgs: args.slice(1),
|
|
865
|
+
cwd,
|
|
866
|
+
raw,
|
|
867
|
+
error,
|
|
868
|
+
output: core.output,
|
|
869
|
+
});
|
|
870
|
+
if (!handled) config.cmdConfigNewProject(cwd, args[1], raw);
|
|
871
|
+
break;
|
|
872
|
+
}
|
|
873
|
+
|
|
874
|
+
case 'config-path': {
|
|
875
|
+
// CJS-native: config-path returns the filesystem path to config.json.
|
|
876
|
+
// The SDK handler (configPath) also exists but requires a projectDir that
|
|
877
|
+
// is already resolved. Both produce identical output; keeping CJS here is
|
|
878
|
+
// simpler and avoids sync-bridge overhead for a trivial path lookup.
|
|
879
|
+
config.cmdConfigPath(cwd, raw);
|
|
880
|
+
break;
|
|
881
|
+
}
|
|
882
|
+
|
|
883
|
+
case 'migrate-config': {
|
|
884
|
+
// CJS-native: migrate-config wraps the Configuration Module migrateOnDisk()
|
|
885
|
+
// which is async and mutates the filesystem. No SDK counterpart exists in
|
|
886
|
+
// the command registry (it's a one-shot migration utility). Must await.
|
|
887
|
+
await config.cmdMigrateConfig(cwd, raw);
|
|
888
|
+
break;
|
|
889
|
+
}
|
|
890
|
+
|
|
891
|
+
case 'agent-skills': {
|
|
892
|
+
init.cmdAgentSkills(cwd, args[1], raw);
|
|
893
|
+
break;
|
|
894
|
+
}
|
|
895
|
+
|
|
896
|
+
case 'skill-manifest': {
|
|
897
|
+
init.cmdSkillManifest(cwd, args, raw);
|
|
898
|
+
break;
|
|
899
|
+
}
|
|
900
|
+
|
|
901
|
+
case 'history-digest': {
|
|
902
|
+
commands.cmdHistoryDigest(cwd, raw);
|
|
903
|
+
break;
|
|
904
|
+
}
|
|
905
|
+
|
|
906
|
+
case 'phases': {
|
|
907
|
+
routePhasesCommand({
|
|
908
|
+
phase,
|
|
909
|
+
milestone,
|
|
910
|
+
args,
|
|
911
|
+
cwd,
|
|
912
|
+
raw,
|
|
913
|
+
error,
|
|
914
|
+
});
|
|
915
|
+
break;
|
|
916
|
+
}
|
|
917
|
+
|
|
918
|
+
case 'roadmap': {
|
|
919
|
+
routeRoadmapCommand({
|
|
920
|
+
roadmap,
|
|
921
|
+
args,
|
|
922
|
+
cwd,
|
|
923
|
+
raw,
|
|
924
|
+
error,
|
|
925
|
+
});
|
|
926
|
+
break;
|
|
927
|
+
}
|
|
928
|
+
|
|
929
|
+
case 'requirements': {
|
|
930
|
+
const subcommand = args[1];
|
|
931
|
+
if (subcommand === 'mark-complete') {
|
|
932
|
+
milestone.cmdRequirementsMarkComplete(cwd, args.slice(2), raw);
|
|
933
|
+
} else {
|
|
934
|
+
error('Unknown requirements subcommand. Available: mark-complete', ERROR_REASON.SDK_UNKNOWN_COMMAND);
|
|
935
|
+
}
|
|
936
|
+
break;
|
|
937
|
+
}
|
|
938
|
+
|
|
939
|
+
case 'gap-analysis': {
|
|
940
|
+
// Post-planning gap checker (#2493) — unified REQUIREMENTS.md +
|
|
941
|
+
// CONTEXT.md <decisions> coverage report against PLAN.md files.
|
|
942
|
+
gapChecker.cmdGapAnalysis(cwd, args.slice(1), raw);
|
|
943
|
+
break;
|
|
944
|
+
}
|
|
945
|
+
|
|
946
|
+
case 'phase': {
|
|
947
|
+
routePhaseCommand({
|
|
948
|
+
phase,
|
|
949
|
+
args,
|
|
950
|
+
cwd,
|
|
951
|
+
raw,
|
|
952
|
+
error,
|
|
953
|
+
});
|
|
954
|
+
break;
|
|
955
|
+
}
|
|
956
|
+
|
|
957
|
+
case 'milestone': {
|
|
958
|
+
const subcommand = args[1];
|
|
959
|
+
if (subcommand === 'complete') {
|
|
960
|
+
const milestoneName = parseMultiwordArg(args, 'name');
|
|
961
|
+
const archivePhases = args.includes('--archive-phases');
|
|
962
|
+
milestone.cmdMilestoneComplete(cwd, args[2], { name: milestoneName, archivePhases }, raw);
|
|
963
|
+
} else {
|
|
964
|
+
error('Unknown milestone subcommand. Available: complete', ERROR_REASON.SDK_UNKNOWN_COMMAND);
|
|
965
|
+
}
|
|
966
|
+
break;
|
|
967
|
+
}
|
|
968
|
+
|
|
969
|
+
case 'validate': {
|
|
970
|
+
routeValidateCommand({
|
|
971
|
+
verify,
|
|
972
|
+
args,
|
|
973
|
+
cwd,
|
|
974
|
+
raw,
|
|
975
|
+
parseNamedArgs,
|
|
976
|
+
output: core.output,
|
|
977
|
+
error,
|
|
978
|
+
});
|
|
979
|
+
break;
|
|
980
|
+
}
|
|
981
|
+
|
|
982
|
+
case 'progress': {
|
|
983
|
+
const subcommand = args[1] || 'json';
|
|
984
|
+
commands.cmdProgressRender(cwd, subcommand, raw);
|
|
985
|
+
break;
|
|
986
|
+
}
|
|
987
|
+
|
|
988
|
+
case 'audit-uat': {
|
|
989
|
+
const uat = require('./lib/uat.cjs');
|
|
990
|
+
uat.cmdAuditUat(cwd, raw);
|
|
991
|
+
break;
|
|
992
|
+
}
|
|
993
|
+
|
|
994
|
+
case 'audit-open': {
|
|
995
|
+
const { auditOpenArtifacts, formatAuditReport } = require('./lib/audit.cjs');
|
|
996
|
+
const wantJson = args.includes('--json');
|
|
997
|
+
const result = auditOpenArtifacts(cwd);
|
|
998
|
+
if (wantJson) {
|
|
999
|
+
// core.output JSON-stringifies its first arg; pass the object directly.
|
|
1000
|
+
core.output(result, raw);
|
|
1001
|
+
} else {
|
|
1002
|
+
// Human-readable report must bypass JSON encoding — use the rawValue
|
|
1003
|
+
// form (third arg) which core.output emits verbatim.
|
|
1004
|
+
core.output(null, true, formatAuditReport(result));
|
|
1005
|
+
}
|
|
1006
|
+
break;
|
|
1007
|
+
}
|
|
1008
|
+
|
|
1009
|
+
case 'uat': {
|
|
1010
|
+
const subcommand = args[1];
|
|
1011
|
+
const uat = require('./lib/uat.cjs');
|
|
1012
|
+
if (subcommand === 'render-checkpoint') {
|
|
1013
|
+
const options = parseNamedArgs(args, ['file']);
|
|
1014
|
+
uat.cmdRenderCheckpoint(cwd, options, raw);
|
|
1015
|
+
} else {
|
|
1016
|
+
error('Unknown uat subcommand. Available: render-checkpoint', ERROR_REASON.SDK_UNKNOWN_COMMAND);
|
|
1017
|
+
}
|
|
1018
|
+
break;
|
|
1019
|
+
}
|
|
1020
|
+
|
|
1021
|
+
case 'stats': {
|
|
1022
|
+
const subcommand = args[1] || 'json';
|
|
1023
|
+
commands.cmdStats(cwd, subcommand, raw);
|
|
1024
|
+
break;
|
|
1025
|
+
}
|
|
1026
|
+
|
|
1027
|
+
case 'todo': {
|
|
1028
|
+
const subcommand = args[1];
|
|
1029
|
+
if (subcommand === 'complete') {
|
|
1030
|
+
commands.cmdTodoComplete(cwd, args[2], raw);
|
|
1031
|
+
} else if (subcommand === 'match-phase') {
|
|
1032
|
+
commands.cmdTodoMatchPhase(cwd, args[2], raw);
|
|
1033
|
+
} else {
|
|
1034
|
+
error('Unknown todo subcommand. Available: complete, match-phase', ERROR_REASON.SDK_UNKNOWN_COMMAND);
|
|
1035
|
+
}
|
|
1036
|
+
break;
|
|
1037
|
+
}
|
|
1038
|
+
|
|
1039
|
+
case 'scaffold': {
|
|
1040
|
+
const scaffoldType = args[1];
|
|
1041
|
+
const scaffoldOptions = {
|
|
1042
|
+
phase: parseNamedArgs(args, ['phase']).phase,
|
|
1043
|
+
name: parseMultiwordArg(args, 'name'),
|
|
1044
|
+
};
|
|
1045
|
+
commands.cmdScaffold(cwd, scaffoldType, scaffoldOptions, raw);
|
|
1046
|
+
break;
|
|
1047
|
+
}
|
|
1048
|
+
|
|
1049
|
+
case 'init': {
|
|
1050
|
+
routeInitCommand({
|
|
1051
|
+
init,
|
|
1052
|
+
args,
|
|
1053
|
+
cwd,
|
|
1054
|
+
raw,
|
|
1055
|
+
parseNamedArgs,
|
|
1056
|
+
error,
|
|
1057
|
+
});
|
|
1058
|
+
break;
|
|
1059
|
+
}
|
|
1060
|
+
|
|
1061
|
+
case 'phase-plan-index': {
|
|
1062
|
+
phase.cmdPhasePlanIndex(cwd, args[1], raw);
|
|
1063
|
+
break;
|
|
1064
|
+
}
|
|
1065
|
+
|
|
1066
|
+
case 'state-snapshot': {
|
|
1067
|
+
state.cmdStateSnapshot(cwd, raw);
|
|
1068
|
+
break;
|
|
1069
|
+
}
|
|
1070
|
+
|
|
1071
|
+
case 'summary-extract': {
|
|
1072
|
+
const summaryPath = args[1];
|
|
1073
|
+
const fieldsIndex = args.indexOf('--fields');
|
|
1074
|
+
const fields = fieldsIndex !== -1 ? args[fieldsIndex + 1].split(',') : null;
|
|
1075
|
+
commands.cmdSummaryExtract(cwd, summaryPath, fields, raw);
|
|
1076
|
+
break;
|
|
1077
|
+
}
|
|
1078
|
+
|
|
1079
|
+
case 'websearch': {
|
|
1080
|
+
const query = args[1];
|
|
1081
|
+
const limitIdx = args.indexOf('--limit');
|
|
1082
|
+
const freshnessIdx = args.indexOf('--freshness');
|
|
1083
|
+
await commands.cmdWebsearch(query, {
|
|
1084
|
+
limit: limitIdx !== -1 ? parseInt(args[limitIdx + 1], 10) : 10,
|
|
1085
|
+
freshness: freshnessIdx !== -1 ? args[freshnessIdx + 1] : null,
|
|
1086
|
+
}, raw);
|
|
1087
|
+
break;
|
|
1088
|
+
}
|
|
1089
|
+
|
|
1090
|
+
// ─── Profiling Pipeline ────────────────────────────────────────────────
|
|
1091
|
+
|
|
1092
|
+
case 'scan-sessions': {
|
|
1093
|
+
const pathIdx = args.indexOf('--path');
|
|
1094
|
+
const sessionsPath = pathIdx !== -1 ? args[pathIdx + 1] : null;
|
|
1095
|
+
const verboseFlag = args.includes('--verbose');
|
|
1096
|
+
const jsonFlag = args.includes('--json');
|
|
1097
|
+
await profilePipeline.cmdScanSessions(sessionsPath, { verbose: verboseFlag, json: jsonFlag }, raw);
|
|
1098
|
+
break;
|
|
1099
|
+
}
|
|
1100
|
+
|
|
1101
|
+
case 'extract-messages': {
|
|
1102
|
+
const sessionIdx = args.indexOf('--session');
|
|
1103
|
+
const sessionId = sessionIdx !== -1 ? args[sessionIdx + 1] : null;
|
|
1104
|
+
const limitIdx = args.indexOf('--limit');
|
|
1105
|
+
const limit = limitIdx !== -1 ? parseInt(args[limitIdx + 1], 10) : null;
|
|
1106
|
+
const pathIdx = args.indexOf('--path');
|
|
1107
|
+
const sessionsPath = pathIdx !== -1 ? args[pathIdx + 1] : null;
|
|
1108
|
+
const projectArg = args[1];
|
|
1109
|
+
if (!projectArg || projectArg.startsWith('--')) {
|
|
1110
|
+
error('Usage: gsd-tools extract-messages <project> [--session <id>] [--limit N] [--path <dir>]\nRun scan-sessions first to see available projects.', ERROR_REASON.USAGE);
|
|
1111
|
+
}
|
|
1112
|
+
await profilePipeline.cmdExtractMessages(projectArg, { sessionId, limit }, raw, sessionsPath);
|
|
1113
|
+
break;
|
|
1114
|
+
}
|
|
1115
|
+
|
|
1116
|
+
case 'profile-sample': {
|
|
1117
|
+
const pathIdx = args.indexOf('--path');
|
|
1118
|
+
const sessionsPath = pathIdx !== -1 ? args[pathIdx + 1] : null;
|
|
1119
|
+
const limitIdx = args.indexOf('--limit');
|
|
1120
|
+
const limit = limitIdx !== -1 ? parseInt(args[limitIdx + 1], 10) : 150;
|
|
1121
|
+
const maxPerIdx = args.indexOf('--max-per-project');
|
|
1122
|
+
const maxPerProject = maxPerIdx !== -1 ? parseInt(args[maxPerIdx + 1], 10) : null;
|
|
1123
|
+
const maxCharsIdx = args.indexOf('--max-chars');
|
|
1124
|
+
const maxChars = maxCharsIdx !== -1 ? parseInt(args[maxCharsIdx + 1], 10) : 500;
|
|
1125
|
+
await profilePipeline.cmdProfileSample(sessionsPath, { limit, maxPerProject, maxChars }, raw);
|
|
1126
|
+
break;
|
|
1127
|
+
}
|
|
1128
|
+
|
|
1129
|
+
// ─── Profile Output ──────────────────────────────────────────────────
|
|
1130
|
+
|
|
1131
|
+
case 'write-profile': {
|
|
1132
|
+
const inputIdx = args.indexOf('--input');
|
|
1133
|
+
const inputPath = inputIdx !== -1 ? args[inputIdx + 1] : null;
|
|
1134
|
+
if (!inputPath) error('--input <analysis-json-path> is required', ERROR_REASON.USAGE);
|
|
1135
|
+
const outputIdx = args.indexOf('--output');
|
|
1136
|
+
const outputPath = outputIdx !== -1 ? args[outputIdx + 1] : null;
|
|
1137
|
+
profileOutput.cmdWriteProfile(cwd, { input: inputPath, output: outputPath }, raw);
|
|
1138
|
+
break;
|
|
1139
|
+
}
|
|
1140
|
+
|
|
1141
|
+
case 'profile-questionnaire': {
|
|
1142
|
+
const answersIdx = args.indexOf('--answers');
|
|
1143
|
+
const answers = answersIdx !== -1 ? args[answersIdx + 1] : null;
|
|
1144
|
+
profileOutput.cmdProfileQuestionnaire({ answers }, raw);
|
|
1145
|
+
break;
|
|
1146
|
+
}
|
|
1147
|
+
|
|
1148
|
+
case 'generate-dev-preferences': {
|
|
1149
|
+
const analysisIdx = args.indexOf('--analysis');
|
|
1150
|
+
const analysisPath = analysisIdx !== -1 ? args[analysisIdx + 1] : null;
|
|
1151
|
+
const outputIdx = args.indexOf('--output');
|
|
1152
|
+
const outputPath = outputIdx !== -1 ? args[outputIdx + 1] : null;
|
|
1153
|
+
const stackIdx = args.indexOf('--stack');
|
|
1154
|
+
const stack = stackIdx !== -1 ? args[stackIdx + 1] : null;
|
|
1155
|
+
profileOutput.cmdGenerateDevPreferences(cwd, { analysis: analysisPath, output: outputPath, stack }, raw);
|
|
1156
|
+
break;
|
|
1157
|
+
}
|
|
1158
|
+
|
|
1159
|
+
case 'generate-claude-profile': {
|
|
1160
|
+
const analysisIdx = args.indexOf('--analysis');
|
|
1161
|
+
const analysisPath = analysisIdx !== -1 ? args[analysisIdx + 1] : null;
|
|
1162
|
+
const outputIdx = args.indexOf('--output');
|
|
1163
|
+
const outputPath = outputIdx !== -1 ? args[outputIdx + 1] : null;
|
|
1164
|
+
const globalFlag = args.includes('--global');
|
|
1165
|
+
profileOutput.cmdGenerateClaudeProfile(cwd, { analysis: analysisPath, output: outputPath, global: globalFlag }, raw);
|
|
1166
|
+
break;
|
|
1167
|
+
}
|
|
1168
|
+
|
|
1169
|
+
case 'generate-claude-md': {
|
|
1170
|
+
const outputIdx = args.indexOf('--output');
|
|
1171
|
+
const outputPath = outputIdx !== -1 ? args[outputIdx + 1] : null;
|
|
1172
|
+
const autoFlag = args.includes('--auto');
|
|
1173
|
+
const forceFlag = args.includes('--force');
|
|
1174
|
+
profileOutput.cmdGenerateClaudeMd(cwd, { output: outputPath, auto: autoFlag, force: forceFlag }, raw);
|
|
1175
|
+
break;
|
|
1176
|
+
}
|
|
1177
|
+
|
|
1178
|
+
case 'workstream': {
|
|
1179
|
+
const subcommand = args[1];
|
|
1180
|
+
if (subcommand === 'create') {
|
|
1181
|
+
const migrateNameIdx = args.indexOf('--migrate-name');
|
|
1182
|
+
const noMigrate = args.includes('--no-migrate');
|
|
1183
|
+
workstream.cmdWorkstreamCreate(cwd, args[2], {
|
|
1184
|
+
migrate: !noMigrate,
|
|
1185
|
+
migrateName: migrateNameIdx !== -1 ? args[migrateNameIdx + 1] : null,
|
|
1186
|
+
}, raw);
|
|
1187
|
+
} else if (subcommand === 'list') {
|
|
1188
|
+
workstream.cmdWorkstreamList(cwd, raw);
|
|
1189
|
+
} else if (subcommand === 'status') {
|
|
1190
|
+
workstream.cmdWorkstreamStatus(cwd, args[2], raw);
|
|
1191
|
+
} else if (subcommand === 'complete') {
|
|
1192
|
+
workstream.cmdWorkstreamComplete(cwd, args[2], {}, raw);
|
|
1193
|
+
} else if (subcommand === 'set') {
|
|
1194
|
+
workstream.cmdWorkstreamSet(cwd, args[2], raw);
|
|
1195
|
+
} else if (subcommand === 'get') {
|
|
1196
|
+
workstream.cmdWorkstreamGet(cwd, raw);
|
|
1197
|
+
} else if (subcommand === 'progress') {
|
|
1198
|
+
workstream.cmdWorkstreamProgress(cwd, raw);
|
|
1199
|
+
} else {
|
|
1200
|
+
error('Unknown workstream subcommand. Available: create, list, status, complete, set, get, progress', ERROR_REASON.SDK_UNKNOWN_COMMAND);
|
|
1201
|
+
}
|
|
1202
|
+
break;
|
|
1203
|
+
}
|
|
1204
|
+
|
|
1205
|
+
case 'worktree': {
|
|
1206
|
+
const subcommand = args[1];
|
|
1207
|
+
const worktreeSafety = require('./lib/worktree-safety.cjs');
|
|
1208
|
+
if (subcommand === 'cleanup-wave') {
|
|
1209
|
+
worktreeSafety.cmdWorktreeCleanupWave(cwd, args.slice(2));
|
|
1210
|
+
} else if (subcommand === 'reap-orphans') {
|
|
1211
|
+
worktreeSafety.cmdWorktreeReapOrphans(cwd);
|
|
1212
|
+
} else {
|
|
1213
|
+
error('Unknown worktree subcommand. Available: cleanup-wave, reap-orphans', ERROR_REASON.SDK_UNKNOWN_COMMAND);
|
|
1214
|
+
}
|
|
1215
|
+
break;
|
|
1216
|
+
}
|
|
1217
|
+
|
|
1218
|
+
// ─── Intel ────────────────────────────────────────────────────────────
|
|
1219
|
+
|
|
1220
|
+
case 'intel': {
|
|
1221
|
+
const intel = require('./lib/intel.cjs');
|
|
1222
|
+
const subcommand = args[1];
|
|
1223
|
+
if (subcommand === 'query') {
|
|
1224
|
+
const term = args[2];
|
|
1225
|
+
if (!term) error('Usage: gsd-tools intel query <term>', ERROR_REASON.USAGE);
|
|
1226
|
+
const planningDir = path.join(cwd, '.planning');
|
|
1227
|
+
core.output(intel.intelQuery(term, planningDir), raw);
|
|
1228
|
+
} else if (subcommand === 'status') {
|
|
1229
|
+
const planningDir = path.join(cwd, '.planning');
|
|
1230
|
+
const status = intel.intelStatus(planningDir);
|
|
1231
|
+
if (!raw && status.files) {
|
|
1232
|
+
for (const file of Object.values(status.files)) {
|
|
1233
|
+
if (file.updated_at) {
|
|
1234
|
+
file.updated_at = core.timeAgo(new Date(file.updated_at));
|
|
1235
|
+
}
|
|
1236
|
+
}
|
|
1237
|
+
}
|
|
1238
|
+
core.output(status, raw);
|
|
1239
|
+
} else if (subcommand === 'diff') {
|
|
1240
|
+
const planningDir = path.join(cwd, '.planning');
|
|
1241
|
+
core.output(intel.intelDiff(planningDir), raw);
|
|
1242
|
+
} else if (subcommand === 'snapshot') {
|
|
1243
|
+
const planningDir = path.join(cwd, '.planning');
|
|
1244
|
+
core.output(intel.intelSnapshot(planningDir), raw);
|
|
1245
|
+
} else if (subcommand === 'patch-meta') {
|
|
1246
|
+
const filePath = args[2];
|
|
1247
|
+
if (!filePath) error('Usage: gsd-tools intel patch-meta <file-path>', ERROR_REASON.USAGE);
|
|
1248
|
+
core.output(intel.intelPatchMeta(path.resolve(cwd, filePath)), raw);
|
|
1249
|
+
} else if (subcommand === 'validate') {
|
|
1250
|
+
const planningDir = path.join(cwd, '.planning');
|
|
1251
|
+
core.output(intel.intelValidate(planningDir), raw);
|
|
1252
|
+
} else if (subcommand === 'extract-exports') {
|
|
1253
|
+
const filePath = args[2];
|
|
1254
|
+
if (!filePath) error('Usage: gsd-tools intel extract-exports <file-path>', ERROR_REASON.USAGE);
|
|
1255
|
+
core.output(intel.intelExtractExports(path.resolve(cwd, filePath)), raw);
|
|
1256
|
+
} else if (subcommand === 'update') {
|
|
1257
|
+
const planningDir = path.join(cwd, '.planning');
|
|
1258
|
+
core.output(intel.intelUpdate(planningDir), raw);
|
|
1259
|
+
} else {
|
|
1260
|
+
error('Unknown intel subcommand. Available: query, status, update, diff, snapshot, patch-meta, validate, extract-exports', ERROR_REASON.SDK_UNKNOWN_COMMAND);
|
|
1261
|
+
}
|
|
1262
|
+
break;
|
|
1263
|
+
}
|
|
1264
|
+
|
|
1265
|
+
// ─── Graphify ──────────────────────────────────────────────────────────
|
|
1266
|
+
|
|
1267
|
+
case 'graphify': {
|
|
1268
|
+
const graphify = require('./lib/graphify.cjs');
|
|
1269
|
+
const subcommand = args[1];
|
|
1270
|
+
if (subcommand === 'query') {
|
|
1271
|
+
const term = args[2];
|
|
1272
|
+
if (!term) error('Usage: gsd-tools graphify query <term>', ERROR_REASON.USAGE);
|
|
1273
|
+
const budgetIdx = args.indexOf('--budget');
|
|
1274
|
+
const budget = budgetIdx !== -1 ? parseInt(args[budgetIdx + 1], 10) : null;
|
|
1275
|
+
core.output(graphify.graphifyQuery(cwd, term, { budget }), raw);
|
|
1276
|
+
} else if (subcommand === 'status') {
|
|
1277
|
+
core.output(graphify.graphifyStatus(cwd), raw);
|
|
1278
|
+
} else if (subcommand === 'diff') {
|
|
1279
|
+
core.output(graphify.graphifyDiff(cwd), raw);
|
|
1280
|
+
} else if (subcommand === 'build') {
|
|
1281
|
+
if (args[2] === 'snapshot') {
|
|
1282
|
+
core.output(graphify.writeSnapshot(cwd), raw);
|
|
1283
|
+
} else {
|
|
1284
|
+
core.output(graphify.graphifyBuild(cwd), raw);
|
|
1285
|
+
}
|
|
1286
|
+
} else {
|
|
1287
|
+
error('Unknown graphify subcommand. Available: build, query, status, diff', ERROR_REASON.SDK_UNKNOWN_COMMAND);
|
|
1288
|
+
}
|
|
1289
|
+
break;
|
|
1290
|
+
}
|
|
1291
|
+
|
|
1292
|
+
// ─── Documentation ────────────────────────────────────────────────────
|
|
1293
|
+
|
|
1294
|
+
case 'docs-init': {
|
|
1295
|
+
// Phase 6 (#3575): dispatch via SDK executeForCjs when available.
|
|
1296
|
+
// SDK handler: docsInit in sdk/src/query/docs-init.ts.
|
|
1297
|
+
const handled = _dispatchNonFamily({
|
|
1298
|
+
registryCommand: 'docs-init',
|
|
1299
|
+
registryArgs: args.slice(1),
|
|
1300
|
+
legacyCommand: 'docs-init',
|
|
1301
|
+
legacyArgs: args.slice(1),
|
|
1302
|
+
cwd,
|
|
1303
|
+
raw,
|
|
1304
|
+
error,
|
|
1305
|
+
output: core.output,
|
|
1306
|
+
});
|
|
1307
|
+
if (!handled) docs.cmdDocsInit(cwd, raw);
|
|
1308
|
+
break;
|
|
1309
|
+
}
|
|
1310
|
+
|
|
1311
|
+
// ─── Learnings ─────────────────────────────────────────────────────────
|
|
1312
|
+
|
|
1313
|
+
case 'learnings': {
|
|
1314
|
+
const subcommand = args[1];
|
|
1315
|
+
if (subcommand === 'list') {
|
|
1316
|
+
learnings.cmdLearningsList(raw);
|
|
1317
|
+
} else if (subcommand === 'query') {
|
|
1318
|
+
const tagIdx = args.indexOf('--tag');
|
|
1319
|
+
const tag = tagIdx !== -1 ? args[tagIdx + 1] : null;
|
|
1320
|
+
if (!tag) error('Usage: gsd-tools learnings query --tag <tag>', ERROR_REASON.USAGE);
|
|
1321
|
+
learnings.cmdLearningsQuery(tag, raw);
|
|
1322
|
+
} else if (subcommand === 'copy') {
|
|
1323
|
+
learnings.cmdLearningsCopy(cwd, raw);
|
|
1324
|
+
} else if (subcommand === 'prune') {
|
|
1325
|
+
const olderIdx = args.indexOf('--older-than');
|
|
1326
|
+
const olderThan = olderIdx !== -1 ? args[olderIdx + 1] : null;
|
|
1327
|
+
if (!olderThan) error('Usage: gsd-tools learnings prune --older-than <duration>', ERROR_REASON.USAGE);
|
|
1328
|
+
learnings.cmdLearningsPrune(olderThan, raw);
|
|
1329
|
+
} else if (subcommand === 'delete') {
|
|
1330
|
+
const id = args[2];
|
|
1331
|
+
if (!id) error('Usage: gsd-tools learnings delete <id>', ERROR_REASON.USAGE);
|
|
1332
|
+
learnings.cmdLearningsDelete(id, raw);
|
|
1333
|
+
} else {
|
|
1334
|
+
error('Unknown learnings subcommand. Available: list, query, copy, prune, delete', ERROR_REASON.SDK_UNKNOWN_COMMAND);
|
|
1335
|
+
}
|
|
1336
|
+
break;
|
|
1337
|
+
}
|
|
1338
|
+
|
|
1339
|
+
// ─── detect-custom-files ───────────────────────────────────────────────
|
|
1340
|
+
// CJS-native: no SDK counterpart exists in the command registry.
|
|
1341
|
+
// detect-custom-files reads a gsd-file-manifest.json against the
|
|
1342
|
+
// live filesystem to identify user-added files. It is installer-specific
|
|
1343
|
+
// logic that has no async query equivalent in the SDK.
|
|
1344
|
+
//
|
|
1345
|
+
// Detect user-added files inside GSD-managed directories that are not
|
|
1346
|
+
// tracked in gsd-file-manifest.json. Used by the update workflow to back
|
|
1347
|
+
// up custom files before the installer wipes those directories.
|
|
1348
|
+
//
|
|
1349
|
+
// This replaces the fragile bash pattern:
|
|
1350
|
+
// MANIFEST_FILES=$(node -e "require('$RUNTIME_DIR/...')" 2>/dev/null)
|
|
1351
|
+
// ${filepath#$RUNTIME_DIR/} # unreliable path stripping
|
|
1352
|
+
// which silently returns CUSTOM_COUNT=0 when $RUNTIME_DIR is unset or
|
|
1353
|
+
// when the stripped path does not match the manifest key format (#1997).
|
|
1354
|
+
|
|
1355
|
+
case 'detect-custom-files': {
|
|
1356
|
+
const configDirIdx = args.indexOf('--config-dir');
|
|
1357
|
+
const configDir = configDirIdx !== -1 ? args[configDirIdx + 1] : null;
|
|
1358
|
+
if (!configDir) {
|
|
1359
|
+
error('Usage: gsd-tools detect-custom-files --config-dir <path>', ERROR_REASON.USAGE);
|
|
1360
|
+
}
|
|
1361
|
+
const resolvedConfigDir = path.resolve(configDir);
|
|
1362
|
+
if (!fs.existsSync(resolvedConfigDir)) {
|
|
1363
|
+
error(`Config directory not found: ${resolvedConfigDir}`, ERROR_REASON.USAGE);
|
|
1364
|
+
}
|
|
1365
|
+
|
|
1366
|
+
const manifestPath = path.join(resolvedConfigDir, 'gsd-file-manifest.json');
|
|
1367
|
+
if (!fs.existsSync(manifestPath)) {
|
|
1368
|
+
// No manifest — cannot determine what is custom. Return empty list
|
|
1369
|
+
// (same behaviour as saveLocalPatches in install.js when no manifest).
|
|
1370
|
+
const out = { custom_files: [], custom_count: 0, manifest_found: false };
|
|
1371
|
+
process.stdout.write(JSON.stringify(out, null, 2));
|
|
1372
|
+
break;
|
|
1373
|
+
}
|
|
1374
|
+
|
|
1375
|
+
let manifest;
|
|
1376
|
+
try {
|
|
1377
|
+
manifest = JSON.parse(await fs.promises.readFile(manifestPath, 'utf8'));
|
|
1378
|
+
} catch {
|
|
1379
|
+
const out = { custom_files: [], custom_count: 0, manifest_found: false, error: 'manifest parse error' };
|
|
1380
|
+
process.stdout.write(JSON.stringify(out, null, 2));
|
|
1381
|
+
break;
|
|
1382
|
+
}
|
|
1383
|
+
|
|
1384
|
+
const manifestKeys = new Set(Object.keys(manifest.files || {}));
|
|
1385
|
+
|
|
1386
|
+
// GSD-managed directories to scan for user-added files.
|
|
1387
|
+
// These are the directories the installer wipes on update.
|
|
1388
|
+
const GSD_MANAGED_DIRS = [
|
|
1389
|
+
'get-shit-done',
|
|
1390
|
+
'agents',
|
|
1391
|
+
path.join('commands', 'gsd'),
|
|
1392
|
+
'hooks',
|
|
1393
|
+
'skills',
|
|
1394
|
+
];
|
|
1395
|
+
|
|
1396
|
+
function collectCustomFiles(dir, baseDir, manifestKeys, out) {
|
|
1397
|
+
if (!fs.existsSync(dir)) return;
|
|
1398
|
+
for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
|
|
1399
|
+
const fullPath = path.join(dir, entry.name);
|
|
1400
|
+
if (entry.isDirectory()) {
|
|
1401
|
+
collectCustomFiles(fullPath, baseDir, manifestKeys, out);
|
|
1402
|
+
continue;
|
|
1403
|
+
}
|
|
1404
|
+
// Use forward slashes for cross-platform manifest key compatibility
|
|
1405
|
+
const relPath = path.relative(baseDir, fullPath).replace(/\\/g, '/');
|
|
1406
|
+
if (!manifestKeys.has(relPath)) {
|
|
1407
|
+
out.push(relPath);
|
|
1408
|
+
}
|
|
1409
|
+
}
|
|
1410
|
+
}
|
|
1411
|
+
|
|
1412
|
+
const customFiles = [];
|
|
1413
|
+
for (const managedDir of GSD_MANAGED_DIRS) {
|
|
1414
|
+
const absDir = path.join(resolvedConfigDir, managedDir);
|
|
1415
|
+
if (!fs.existsSync(absDir)) continue;
|
|
1416
|
+
collectCustomFiles(absDir, resolvedConfigDir, manifestKeys, customFiles);
|
|
1417
|
+
}
|
|
1418
|
+
|
|
1419
|
+
const out = {
|
|
1420
|
+
custom_files: customFiles,
|
|
1421
|
+
custom_count: customFiles.length,
|
|
1422
|
+
manifest_found: true,
|
|
1423
|
+
manifest_version: manifest.version || null,
|
|
1424
|
+
};
|
|
1425
|
+
process.stdout.write(JSON.stringify(out, null, 2));
|
|
1426
|
+
break;
|
|
1427
|
+
}
|
|
1428
|
+
|
|
1429
|
+
// ─── GSD-2 Reverse Migration ───────────────────────────────────────────
|
|
1430
|
+
|
|
1431
|
+
case 'from-gsd2': {
|
|
1432
|
+
const gsd2Import = require('./lib/gsd2-import.cjs');
|
|
1433
|
+
gsd2Import.cmdFromGsd2(args.slice(1), cwd, raw);
|
|
1434
|
+
break;
|
|
1435
|
+
}
|
|
1436
|
+
|
|
1437
|
+
// ─── Prompt Budget ────────────────────────────────────────────────────
|
|
1438
|
+
//
|
|
1439
|
+
// Assemble and deterministically trim review prompt sections to fit a
|
|
1440
|
+
// token budget. Used by the /gsd-review workflow before dispatching to
|
|
1441
|
+
// small-context local model servers (Ollama, llama.cpp, LM Studio).
|
|
1442
|
+
//
|
|
1443
|
+
// Required flags:
|
|
1444
|
+
// --budget <N> Token budget (integer > 0)
|
|
1445
|
+
// --instructions-file <path> Review instructions
|
|
1446
|
+
// --roadmap-file <path> Roadmap section
|
|
1447
|
+
// --plan-file <path> Plan file (may be repeated)
|
|
1448
|
+
// --output-prompt <path> Write trimmed prompt here
|
|
1449
|
+
// --output-metadata <path> Write metadata JSON here
|
|
1450
|
+
//
|
|
1451
|
+
// Optional flags:
|
|
1452
|
+
// --safety-margin-pct <N> Default 10
|
|
1453
|
+
// --project-md-head-lines <N> Default 40
|
|
1454
|
+
// --project-file <path>
|
|
1455
|
+
// --context-file <path>
|
|
1456
|
+
// --research-file <path>
|
|
1457
|
+
// --requirements-file <path>
|
|
1458
|
+
//
|
|
1459
|
+
// Exit codes:
|
|
1460
|
+
// 0 success (trim or no-trim)
|
|
1461
|
+
// 1 invocation error (missing required arg, missing file, invalid budget)
|
|
1462
|
+
// 2 hardFailed: prompt cannot fit effective budget after trim policy
|
|
1463
|
+
|
|
1464
|
+
case 'prompt-budget': {
|
|
1465
|
+
const promptBudget = require('./lib/prompt-budget.cjs');
|
|
1466
|
+
|
|
1467
|
+
// ── Collect multi-value --plan-file flags ──────────────────────────
|
|
1468
|
+
const planFiles = [];
|
|
1469
|
+
for (let i = 1; i < args.length; i++) {
|
|
1470
|
+
if (args[i] === '--plan-file' && args[i + 1] && !args[i + 1].startsWith('--')) {
|
|
1471
|
+
planFiles.push(args[i + 1]);
|
|
1472
|
+
i++;
|
|
1473
|
+
}
|
|
1474
|
+
}
|
|
1475
|
+
|
|
1476
|
+
// ── Parse single-value flags ───────────────────────────────────────
|
|
1477
|
+
const flagMap = new Map();
|
|
1478
|
+
for (let i = 1; i < args.length; i++) {
|
|
1479
|
+
const current = args[i];
|
|
1480
|
+
const next = args[i + 1];
|
|
1481
|
+
if (!current.startsWith('--')) continue;
|
|
1482
|
+
if (!next || next.startsWith('--')) {
|
|
1483
|
+
if (!flagMap.has(current)) flagMap.set(current, null);
|
|
1484
|
+
continue;
|
|
1485
|
+
}
|
|
1486
|
+
if (!flagMap.has(current)) flagMap.set(current, next);
|
|
1487
|
+
i++;
|
|
1488
|
+
}
|
|
1489
|
+
const getFlag = (flag) => flagMap.get(flag) ?? null;
|
|
1490
|
+
|
|
1491
|
+
const budgetStr = getFlag('--budget');
|
|
1492
|
+
const instructionsFile = getFlag('--instructions-file');
|
|
1493
|
+
const roadmapFile = getFlag('--roadmap-file');
|
|
1494
|
+
const outputPromptFile = getFlag('--output-prompt');
|
|
1495
|
+
const outputMetadataFile = getFlag('--output-metadata');
|
|
1496
|
+
const safetyMarginStr = getFlag('--safety-margin-pct');
|
|
1497
|
+
const projectMdHeadLinesStr = getFlag('--project-md-head-lines');
|
|
1498
|
+
const projectFile = getFlag('--project-file');
|
|
1499
|
+
const contextFile = getFlag('--context-file');
|
|
1500
|
+
const researchFile = getFlag('--research-file');
|
|
1501
|
+
const requirementsFile = getFlag('--requirements-file');
|
|
1502
|
+
|
|
1503
|
+
// ── Validate required args ─────────────────────────────────────────
|
|
1504
|
+
if (!budgetStr) {
|
|
1505
|
+
process.stderr.write('Error: --budget <N> is required\n');
|
|
1506
|
+
process.exit(1);
|
|
1507
|
+
}
|
|
1508
|
+
const budget = parseInt(budgetStr, 10);
|
|
1509
|
+
if (!Number.isFinite(budget) || budget <= 0) {
|
|
1510
|
+
process.stderr.write('Error: --budget must be a positive integer\n');
|
|
1511
|
+
process.exit(1);
|
|
1512
|
+
}
|
|
1513
|
+
if (!instructionsFile) {
|
|
1514
|
+
process.stderr.write('Error: --instructions-file <path> is required\n');
|
|
1515
|
+
process.exit(1);
|
|
1516
|
+
}
|
|
1517
|
+
if (!roadmapFile) {
|
|
1518
|
+
process.stderr.write('Error: --roadmap-file <path> is required\n');
|
|
1519
|
+
process.exit(1);
|
|
1520
|
+
}
|
|
1521
|
+
if (planFiles.length === 0) {
|
|
1522
|
+
process.stderr.write('Error: at least one --plan-file <path> is required\n');
|
|
1523
|
+
process.exit(1);
|
|
1524
|
+
}
|
|
1525
|
+
if (!outputPromptFile) {
|
|
1526
|
+
process.stderr.write('Error: --output-prompt <path> is required\n');
|
|
1527
|
+
process.exit(1);
|
|
1528
|
+
}
|
|
1529
|
+
if (!outputMetadataFile) {
|
|
1530
|
+
process.stderr.write('Error: --output-metadata <path> is required\n');
|
|
1531
|
+
process.exit(1);
|
|
1532
|
+
}
|
|
1533
|
+
|
|
1534
|
+
// ── Validate and read required files ──────────────────────────────
|
|
1535
|
+
async function readRequired(filePath, flagName) {
|
|
1536
|
+
const resolved = path.resolve(filePath);
|
|
1537
|
+
try {
|
|
1538
|
+
return await fs.promises.readFile(resolved, 'utf8');
|
|
1539
|
+
} catch (err) {
|
|
1540
|
+
if (err && err.code === 'ENOENT') {
|
|
1541
|
+
process.stderr.write(`Error: file not found for ${flagName}: ${resolved}\n`);
|
|
1542
|
+
process.exit(1);
|
|
1543
|
+
}
|
|
1544
|
+
process.stderr.write(`Error: cannot read file for ${flagName}: ${resolved}\n`);
|
|
1545
|
+
process.exit(1);
|
|
1546
|
+
}
|
|
1547
|
+
}
|
|
1548
|
+
|
|
1549
|
+
async function readOptional(filePath) {
|
|
1550
|
+
if (!filePath) return null;
|
|
1551
|
+
const resolved = path.resolve(filePath);
|
|
1552
|
+
try {
|
|
1553
|
+
return await fs.promises.readFile(resolved, 'utf8');
|
|
1554
|
+
} catch (err) {
|
|
1555
|
+
if (err && err.code === 'ENOENT') return null;
|
|
1556
|
+
process.stderr.write(`Error: cannot read optional file: ${resolved}\n`);
|
|
1557
|
+
process.exit(1);
|
|
1558
|
+
}
|
|
1559
|
+
}
|
|
1560
|
+
|
|
1561
|
+
const instructions = await readRequired(instructionsFile, '--instructions-file');
|
|
1562
|
+
const roadmap = await readRequired(roadmapFile, '--roadmap-file');
|
|
1563
|
+
const plans = await Promise.all(planFiles.map(async (p) => {
|
|
1564
|
+
const resolved = path.resolve(p);
|
|
1565
|
+
try {
|
|
1566
|
+
const content = await fs.promises.readFile(resolved, 'utf8');
|
|
1567
|
+
return { file: path.basename(p), content };
|
|
1568
|
+
} catch (err) {
|
|
1569
|
+
if (err && err.code === 'ENOENT') {
|
|
1570
|
+
process.stderr.write(`Error: plan file not found: ${resolved}\n`);
|
|
1571
|
+
process.exit(1);
|
|
1572
|
+
}
|
|
1573
|
+
process.stderr.write(`Error: cannot read plan file: ${resolved}\n`);
|
|
1574
|
+
process.exit(1);
|
|
1575
|
+
}
|
|
1576
|
+
}));
|
|
1577
|
+
|
|
1578
|
+
const projectMd = await readOptional(projectFile);
|
|
1579
|
+
const context = await readOptional(contextFile);
|
|
1580
|
+
const research = await readOptional(researchFile);
|
|
1581
|
+
const requirements = await readOptional(requirementsFile);
|
|
1582
|
+
|
|
1583
|
+
// ── Build options ─────────────────────────────────────────────────
|
|
1584
|
+
const options = {};
|
|
1585
|
+
if (safetyMarginStr !== null) {
|
|
1586
|
+
const pct = parseInt(safetyMarginStr, 10);
|
|
1587
|
+
if (Number.isFinite(pct)) options.safetyMarginPct = pct;
|
|
1588
|
+
}
|
|
1589
|
+
if (projectMdHeadLinesStr !== null) {
|
|
1590
|
+
const lines = parseInt(projectMdHeadLinesStr, 10);
|
|
1591
|
+
if (Number.isFinite(lines)) options.projectMdHeadLines = lines;
|
|
1592
|
+
}
|
|
1593
|
+
|
|
1594
|
+
// ── Call applyBudget ──────────────────────────────────────────────
|
|
1595
|
+
const sections = { instructions, roadmap, plans, projectMd, context, research, requirements };
|
|
1596
|
+
const { prompt, metadata } = promptBudget.applyBudget({ sections, budget, options });
|
|
1597
|
+
|
|
1598
|
+
// ── Write outputs ─────────────────────────────────────────────────
|
|
1599
|
+
await fs.promises.writeFile(path.resolve(outputMetadataFile), JSON.stringify(metadata, null, 2));
|
|
1600
|
+
await fs.promises.writeFile(path.resolve(outputPromptFile), prompt);
|
|
1601
|
+
|
|
1602
|
+
if (metadata.hardFailed) {
|
|
1603
|
+
process.exit(2);
|
|
1604
|
+
}
|
|
1605
|
+
break;
|
|
1606
|
+
}
|
|
1607
|
+
|
|
1608
|
+
default: {
|
|
1609
|
+
// #3243: if the caller passed a dotted form (e.g. "foo.bar"), the shim
|
|
1610
|
+
// above split it so `command` here is the head ("foo"). Use
|
|
1611
|
+
// originalCommand to reconstruct the original dotted form and suggest
|
|
1612
|
+
// the spaced equivalent — surfacing a useful diagnostic instead of just
|
|
1613
|
+
// "Unknown command: foo".
|
|
1614
|
+
const wasDotted =
|
|
1615
|
+
typeof originalCommand === 'string' &&
|
|
1616
|
+
originalCommand !== command &&
|
|
1617
|
+
originalCommand.includes('.');
|
|
1618
|
+
let suggestion = '';
|
|
1619
|
+
if (wasDotted) {
|
|
1620
|
+
const dotIdx = originalCommand.indexOf('.');
|
|
1621
|
+
const head = originalCommand.slice(0, dotIdx);
|
|
1622
|
+
const rest = originalCommand.slice(dotIdx + 1);
|
|
1623
|
+
suggestion = ` — did you mean: "${head} ${rest}"?`;
|
|
1624
|
+
}
|
|
1625
|
+
error(`Unknown command: ${command}${suggestion}`, ERROR_REASON.SDK_UNKNOWN_COMMAND);
|
|
1626
|
+
}
|
|
1627
|
+
}
|
|
1628
|
+
}
|
|
1629
|
+
|
|
1630
|
+
main();
|