@opengsd/gsd-core 1.2.0-rc.1
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 +301 -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 +772 -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 +1218 -0
- package/agents/gsd-project-researcher.md +677 -0
- package/agents/gsd-research-synthesizer.md +255 -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/install.js +10936 -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 +56 -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 +47 -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 +106 -0
- package/get-shit-done/bin/gsd-tools.cjs +1676 -0
- package/get-shit-done/bin/lib/active-workstream-store.cjs +302 -0
- package/get-shit-done/bin/lib/adr-parser.cjs +394 -0
- package/get-shit-done/bin/lib/agent-command-router.cjs +65 -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/check-command-router.cjs +333 -0
- package/get-shit-done/bin/lib/cjs-command-router-adapter.cjs +118 -0
- package/get-shit-done/bin/lib/clock.cjs +96 -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.cjs +815 -0
- package/get-shit-done/bin/lib/command-arg-projection.cjs +62 -0
- package/get-shit-done/bin/lib/command-routing-hub.cjs +388 -0
- package/get-shit-done/bin/lib/commands.cjs +1188 -0
- package/get-shit-done/bin/lib/config-schema.cjs +31 -0
- package/get-shit-done/bin/lib/config.cjs +728 -0
- package/get-shit-done/bin/lib/configuration.cjs +248 -0
- package/get-shit-done/bin/lib/context-utilization.cjs +47 -0
- package/get-shit-done/bin/lib/core.cjs +2121 -0
- package/get-shit-done/bin/lib/decisions.cjs +116 -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 +58 -0
- package/get-shit-done/bin/lib/init.cjs +2112 -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 +778 -0
- package/get-shit-done/bin/lib/intel.cjs +708 -0
- package/get-shit-done/bin/lib/learnings.cjs +421 -0
- package/get-shit-done/bin/lib/milestone.cjs +314 -0
- package/get-shit-done/bin/lib/model-catalog.cjs +212 -0
- package/get-shit-done/bin/lib/model-profiles.cjs +31 -0
- package/get-shit-done/bin/lib/observability/event.cjs +82 -0
- package/get-shit-done/bin/lib/observability/logger.cjs +174 -0
- package/get-shit-done/bin/lib/observability/redaction.cjs +50 -0
- package/get-shit-done/bin/lib/package-identity.cjs +31 -0
- package/get-shit-done/bin/lib/phase-command-router.cjs +191 -0
- package/get-shit-done/bin/lib/phase-lifecycle.cjs +80 -0
- package/get-shit-done/bin/lib/phase.cjs +1607 -0
- package/get-shit-done/bin/lib/phases-command-router.cjs +39 -0
- package/get-shit-done/bin/lib/plan-scan.cjs +97 -0
- package/get-shit-done/bin/lib/planning-workspace.cjs +238 -0
- package/get-shit-done/bin/lib/profile-output.cjs +1141 -0
- package/get-shit-done/bin/lib/profile-pipeline.cjs +539 -0
- package/get-shit-done/bin/lib/project-root.cjs +112 -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 +28 -0
- package/get-shit-done/bin/lib/roadmap.cjs +650 -0
- package/get-shit-done/bin/lib/runtime-artifact-layout.cjs +301 -0
- package/get-shit-done/bin/lib/runtime-homes.cjs +222 -0
- package/get-shit-done/bin/lib/runtime-name-policy.cjs +83 -0
- package/get-shit-done/bin/lib/runtime-slash.cjs +112 -0
- package/get-shit-done/bin/lib/schema-detect.cjs +165 -0
- package/get-shit-done/bin/lib/secrets.cjs +32 -0
- package/get-shit-done/bin/lib/security.cjs +600 -0
- package/get-shit-done/bin/lib/semver-compare.cjs +35 -0
- package/get-shit-done/bin/lib/shell-command-projection.cjs +500 -0
- package/get-shit-done/bin/lib/state-command-router.cjs +252 -0
- package/get-shit-done/bin/lib/state-document.cjs +263 -0
- package/get-shit-done/bin/lib/state.cjs +2038 -0
- package/get-shit-done/bin/lib/surface.cjs +470 -0
- package/get-shit-done/bin/lib/task-command-router.cjs +81 -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/update-context.cjs +209 -0
- package/get-shit-done/bin/lib/validate-command-router.cjs +83 -0
- package/get-shit-done/bin/lib/validate.cjs +92 -0
- package/get-shit-done/bin/lib/verify-command-router.cjs +40 -0
- package/get-shit-done/bin/lib/verify.cjs +1511 -0
- package/get-shit-done/bin/lib/workstream-inventory-builder.cjs +74 -0
- package/get-shit-done/bin/lib/workstream-inventory.cjs +146 -0
- package/get-shit-done/bin/lib/workstream-name-policy.cjs +94 -0
- package/get-shit-done/bin/lib/workstream.cjs +389 -0
- package/get-shit-done/bin/lib/worktree-safety.cjs +985 -0
- package/get-shit-done/bin/shared/config-defaults.manifest.json +97 -0
- package/get-shit-done/bin/shared/config-schema.manifest.json +175 -0
- package/get-shit-done/bin/shared/model-catalog.json +122 -0
- package/get-shit-done/bin/shared/runtime-aliases.manifest.json +75 -0
- package/get-shit-done/bin/verify-reapply-patches.cjs +352 -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-interface-context.md +62 -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 +195 -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/_runtime-launcher.snippet.sh +1 -0
- package/get-shit-done/workflows/add-backlog.md +91 -0
- package/get-shit-done/workflows/add-phase.md +113 -0
- package/get-shit-done/workflows/add-tests.md +355 -0
- package/get-shit-done/workflows/add-todo.md +161 -0
- package/get-shit-done/workflows/ai-integration-phase.md +295 -0
- package/get-shit-done/workflows/analyze-dependencies.md +96 -0
- package/get-shit-done/workflows/audit-fix.md +178 -0
- package/get-shit-done/workflows/audit-milestone.md +358 -0
- package/get-shit-done/workflows/audit-uat.md +110 -0
- package/get-shit-done/workflows/autonomous.md +795 -0
- package/get-shit-done/workflows/check-todos.md +180 -0
- package/get-shit-done/workflows/cleanup.md +155 -0
- package/get-shit-done/workflows/code-review-fix.md +502 -0
- package/get-shit-done/workflows/code-review.md +656 -0
- package/get-shit-done/workflows/complete-milestone.md +855 -0
- package/get-shit-done/workflows/debug.md +232 -0
- package/get-shit-done/workflows/diagnose-issues.md +241 -0
- package/get-shit-done/workflows/discovery-phase.md +291 -0
- package/get-shit-done/workflows/discuss-phase/modes/advisor.md +176 -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 +57 -0
- package/get-shit-done/workflows/discuss-phase/modes/batch.md +52 -0
- package/get-shit-done/workflows/discuss-phase/modes/chain.md +98 -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 +675 -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 +111 -0
- package/get-shit-done/workflows/docs-update.md +1162 -0
- package/get-shit-done/workflows/edit-phase.md +295 -0
- package/get-shit-done/workflows/eval-review.md +156 -0
- package/get-shit-done/workflows/execute-phase/steps/codebase-drift-gate.md +82 -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 +117 -0
- package/get-shit-done/workflows/execute-phase.md +1709 -0
- package/get-shit-done/workflows/execute-plan.md +526 -0
- package/get-shit-done/workflows/explore.md +144 -0
- package/get-shit-done/workflows/extract-learnings.md +243 -0
- package/get-shit-done/workflows/fast.md +124 -0
- package/get-shit-done/workflows/forensics.md +279 -0
- package/get-shit-done/workflows/graduation.md +196 -0
- package/get-shit-done/workflows/health.md +224 -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 +254 -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 +152 -0
- package/get-shit-done/workflows/list-phase-assumptions.md +178 -0
- package/get-shit-done/workflows/list-workspaces.md +57 -0
- package/get-shit-done/workflows/manager.md +393 -0
- package/get-shit-done/workflows/map-codebase.md +444 -0
- package/get-shit-done/workflows/milestone-summary.md +224 -0
- package/get-shit-done/workflows/mvp-phase.md +222 -0
- package/get-shit-done/workflows/new-milestone.md +635 -0
- package/get-shit-done/workflows/new-project.md +1555 -0
- package/get-shit-done/workflows/new-workspace.md +240 -0
- package/get-shit-done/workflows/next.md +299 -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 +244 -0
- package/get-shit-done/workflows/plan-milestone-gaps.md +281 -0
- package/get-shit-done/workflows/plan-phase.md +1809 -0
- package/get-shit-done/workflows/plan-review-convergence.md +346 -0
- package/get-shit-done/workflows/plant-seed.md +230 -0
- package/get-shit-done/workflows/pr-branch.md +157 -0
- package/get-shit-done/workflows/profile-user.md +453 -0
- package/get-shit-done/workflows/progress.md +699 -0
- package/get-shit-done/workflows/quick.md +1039 -0
- package/get-shit-done/workflows/reapply-patches.md +426 -0
- package/get-shit-done/workflows/remove-phase.md +156 -0
- package/get-shit-done/workflows/remove-workspace.md +108 -0
- package/get-shit-done/workflows/resume-project.md +332 -0
- package/get-shit-done/workflows/review.md +623 -0
- package/get-shit-done/workflows/scan.md +105 -0
- package/get-shit-done/workflows/secure-phase.md +180 -0
- package/get-shit-done/workflows/session-report.md +146 -0
- package/get-shit-done/workflows/settings-advanced.md +620 -0
- package/get-shit-done/workflows/settings-integrations.md +312 -0
- package/get-shit-done/workflows/settings.md +552 -0
- package/get-shit-done/workflows/ship.md +356 -0
- package/get-shit-done/workflows/sketch-wrap-up.md +286 -0
- package/get-shit-done/workflows/sketch.md +361 -0
- package/get-shit-done/workflows/spec-phase.md +262 -0
- package/get-shit-done/workflows/spike-wrap-up.md +307 -0
- package/get-shit-done/workflows/spike.md +453 -0
- package/get-shit-done/workflows/stats.md +80 -0
- package/get-shit-done/workflows/sync-skills.md +182 -0
- package/get-shit-done/workflows/thread.md +222 -0
- package/get-shit-done/workflows/transition.md +694 -0
- package/get-shit-done/workflows/ui-phase.md +328 -0
- package/get-shit-done/workflows/ui-review.md +193 -0
- package/get-shit-done/workflows/ultraplan-phase.md +199 -0
- package/get-shit-done/workflows/undo.md +314 -0
- package/get-shit-done/workflows/update.md +443 -0
- package/get-shit-done/workflows/validate-phase.md +179 -0
- package/get-shit-done/workflows/verify-phase.md +544 -0
- package/get-shit-done/workflows/verify-work.md +781 -0
- package/hooks/dist/gsd-check-update-worker.js +95 -0
- package/hooks/dist/gsd-check-update.js +64 -0
- package/hooks/dist/gsd-context-monitor.js +195 -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 +203 -0
- package/hooks/dist/gsd-session-state.sh +59 -0
- package/hooks/dist/gsd-statusline.js +548 -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 +166 -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 +95 -0
- package/hooks/gsd-check-update.js +64 -0
- package/hooks/gsd-context-monitor.js +195 -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 +203 -0
- package/hooks/gsd-session-state.sh +59 -0
- package/hooks/gsd-statusline.js +548 -0
- package/hooks/gsd-update-banner.js +134 -0
- package/hooks/gsd-validate-commit.sh +57 -0
- package/hooks/gsd-workflow-guard.js +166 -0
- package/hooks/lib/git-cmd.js +150 -0
- package/hooks/lib/gsd-graphify-rebuild.sh +65 -0
- package/hooks/managed-hooks-registry.cjs +34 -0
- package/package.json +102 -0
- package/scripts/affected-tests-lib.cjs +541 -0
- package/scripts/audit-workflow-script-paths.cjs +73 -0
- package/scripts/base64-scan.sh +339 -0
- package/scripts/build-hooks.js +236 -0
- package/scripts/changeset/README.md +129 -0
- package/scripts/changeset/cli.cjs +392 -0
- package/scripts/changeset/github-release-notes.cjs +199 -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/check-alias-drift.cjs +108 -0
- package/scripts/check-env.cjs +302 -0
- package/scripts/check-npm-integrity.cjs +209 -0
- package/scripts/ci-guard-runner.cjs +16 -0
- package/scripts/ci-prepare-test-scope.cjs +46 -0
- package/scripts/ci-rebase-check.cjs +85 -0
- package/scripts/ci-test-scope.cjs +302 -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/generate-package-identity.cjs +104 -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-package-identity-drift.cjs +141 -0
- package/scripts/lint-pr-check-project-dir.cjs +98 -0
- package/scripts/lint-shared-module-handsync.cjs +388 -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 +36 -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 +627 -0
- package/scripts/run-affected-tests.cjs +6 -0
- package/scripts/run-cross-platform-tests.cjs +63 -0
- package/scripts/run-tests.cjs +282 -0
- package/scripts/secret-scan-lint.sh +231 -0
- package/scripts/secret-scan.sh +358 -0
- package/scripts/setup-branch-protection.sh +236 -0
- package/scripts/shared-module-handsync-allowlist.json +183 -0
- package/scripts/strip-prose-atrefs.cjs +106 -0
- package/scripts/sync-rulesets.sh +34 -0
- package/scripts/sync-runtime-launcher.cjs +402 -0
- package/scripts/test-failure-reasons.cjs +34 -0
- package/scripts/workflow-policy.cjs +450 -0
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Shared parser for CONTEXT.md <decisions> blocks.
|
|
5
|
+
* Accepts both numeric (D-42) and alphanumeric (D-INFRA-01) IDs.
|
|
6
|
+
* Returns {id, text, category, tags, trackable} per decision.
|
|
7
|
+
* CJS callers that only use {id, text} safely ignore the extra fields.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
const DISCRETION_HEADINGS = new Set([
|
|
11
|
+
"claude's discretion",
|
|
12
|
+
'claudes discretion',
|
|
13
|
+
'claude discretion',
|
|
14
|
+
]);
|
|
15
|
+
const NON_TRACKABLE_TAGS = new Set(['informational', 'folded', 'deferred']);
|
|
16
|
+
/**
|
|
17
|
+
* Strip fenced code blocks from `content` so example `<decisions>` snippets
|
|
18
|
+
* inside ```` ``` ```` do not pollute the parser (review F11).
|
|
19
|
+
*/
|
|
20
|
+
function stripFencedCode(content) {
|
|
21
|
+
return content.replace(/```[\s\S]*?```/g, ' ').replace(/~~~[\s\S]*?~~~/g, ' ');
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Extract the inner text of EVERY `<decisions>...</decisions>` block in
|
|
25
|
+
* order, concatenated by `\n\n`. Returns null when no block is present.
|
|
26
|
+
*
|
|
27
|
+
* CONTEXT.md may legitimately contain more than one block (for example, a
|
|
28
|
+
* "current decisions" block plus a "carry-over from prior phase" block);
|
|
29
|
+
* dropping all-but-the-first silently lost the second batch (review F13).
|
|
30
|
+
*/
|
|
31
|
+
function extractDecisionsBlock(content) {
|
|
32
|
+
const cleaned = stripFencedCode(content);
|
|
33
|
+
const matches = [...cleaned.matchAll(/<decisions>([\s\S]*?)<\/decisions>/g)];
|
|
34
|
+
if (matches.length === 0)
|
|
35
|
+
return null;
|
|
36
|
+
return matches.map((m) => m[1]).join('\n\n');
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Parse trackable decisions from CONTEXT.md content.
|
|
40
|
+
*
|
|
41
|
+
* Returns ALL D-NN decisions found inside `<decisions>` (including
|
|
42
|
+
* non-trackable ones, with `trackable: false`). Callers that only want the
|
|
43
|
+
* gate-enforced decisions should filter `.filter(d => d.trackable)`.
|
|
44
|
+
*/
|
|
45
|
+
function parseDecisions(content) {
|
|
46
|
+
if (!content || typeof content !== 'string')
|
|
47
|
+
return [];
|
|
48
|
+
const block = extractDecisionsBlock(content);
|
|
49
|
+
if (block === null)
|
|
50
|
+
return [];
|
|
51
|
+
const lines = block.split(/\r?\n/);
|
|
52
|
+
const out = [];
|
|
53
|
+
let category = '';
|
|
54
|
+
let inDiscretion = false;
|
|
55
|
+
// Bullet line: `- **D-NN[ [tags]]:** text`
|
|
56
|
+
// Phase 6 (#3575): aligned to CJS regex — accepts alphanumeric IDs (D-01, D-INFRA-01, D-FOO_BAR)
|
|
57
|
+
// in addition to numeric-only IDs (D-42). The first character after `D-` must
|
|
58
|
+
// be alphanumeric, so malformed shapes like `D--foo` or `D-_bar` are rejected.
|
|
59
|
+
// CJS callers consume {id, text} and ignore the optional extras.
|
|
60
|
+
const bulletRe = /^\s*-\s+\*\*D-([A-Za-z0-9][A-Za-z0-9_-]*)(?:\s*\[([^\]]+)\])?\s*:\*\*\s*(.*)$/;
|
|
61
|
+
let current = null;
|
|
62
|
+
const flush = () => {
|
|
63
|
+
if (current) {
|
|
64
|
+
current.text = current.text.trim();
|
|
65
|
+
out.push(current);
|
|
66
|
+
current = null;
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
for (const line of lines) {
|
|
70
|
+
const trimmed = line.trim();
|
|
71
|
+
// Track category headings (`### Heading`)
|
|
72
|
+
const headingMatch = trimmed.match(/^###\s+(.+?)\s*$/);
|
|
73
|
+
if (headingMatch) {
|
|
74
|
+
flush();
|
|
75
|
+
category = headingMatch[1];
|
|
76
|
+
// Strip the full unicode-quote family so any rendering of "Claude's
|
|
77
|
+
// Discretion" (ASCII apostrophe, curly U+2019, U+2018, U+201A, U+201B,
|
|
78
|
+
// double-quote variants U+201C/D/E/F, etc.) collapses to the same key
|
|
79
|
+
// (review F20).
|
|
80
|
+
const normalized = category
|
|
81
|
+
.toLowerCase()
|
|
82
|
+
.replace(/[\u2018\u2019\u201A\u201B\u201C\u201D\u201E\u201F'"`]/g, '')
|
|
83
|
+
.trim();
|
|
84
|
+
inDiscretion = DISCRETION_HEADINGS.has(normalized);
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
const bulletMatch = line.match(bulletRe);
|
|
88
|
+
if (bulletMatch) {
|
|
89
|
+
flush();
|
|
90
|
+
const id = `D-${bulletMatch[1]}`;
|
|
91
|
+
const tags = bulletMatch[2]
|
|
92
|
+
? bulletMatch[2]
|
|
93
|
+
.split(',')
|
|
94
|
+
.map((t) => t.trim().toLowerCase())
|
|
95
|
+
.filter(Boolean)
|
|
96
|
+
: [];
|
|
97
|
+
const trackable = !inDiscretion && !tags.some((t) => NON_TRACKABLE_TAGS.has(t));
|
|
98
|
+
current = { id, text: bulletMatch[3], category, tags, trackable };
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
// Continuation line for current decision (indented with space OR tab,
|
|
102
|
+
// non-bullet, non-empty) — tab indentation must work too (review F12).
|
|
103
|
+
if (current && trimmed !== '' && !trimmed.startsWith('-') && /^[ \t]/.test(line)) {
|
|
104
|
+
current.text += ' ' + trimmed;
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
// Blank line or unrelated content terminates the current decision
|
|
108
|
+
if (trimmed === '') {
|
|
109
|
+
flush();
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
flush();
|
|
113
|
+
return out;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
module.exports = { parseDecisions };
|
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Docs — Commands for the docs-update workflow
|
|
3
|
+
*
|
|
4
|
+
* Provides `cmdDocsInit` which returns project signals, existing doc inventory
|
|
5
|
+
* with GSD marker detection, doc tooling detection, monorepo awareness, and
|
|
6
|
+
* model resolution. Used by Phase 2 to route doc generation appropriately.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
const fs = require('fs');
|
|
10
|
+
const path = require('path');
|
|
11
|
+
const { output, loadConfig, resolveModelInternal, pathExistsInternal, toPosixPath, checkAgentsInstalled } = require('./core.cjs');
|
|
12
|
+
const { platformReadSync } = require('./shell-command-projection.cjs');
|
|
13
|
+
|
|
14
|
+
// ─── Constants ────────────────────────────────────────────────────────────────
|
|
15
|
+
|
|
16
|
+
const GSD_MARKER = '<!-- generated-by: gsd-doc-writer -->';
|
|
17
|
+
|
|
18
|
+
const SKIP_DIRS = new Set([
|
|
19
|
+
'node_modules', '.git', '.planning', '.claude', '__pycache__',
|
|
20
|
+
'target', 'dist', 'build', '.next', '.nuxt', 'coverage',
|
|
21
|
+
'.vscode', '.idea',
|
|
22
|
+
]);
|
|
23
|
+
|
|
24
|
+
// ─── Private helpers ──────────────────────────────────────────────────────────
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Check whether a file begins with the GSD doc writer marker.
|
|
28
|
+
* Reads the first 500 bytes only — avoids loading large files.
|
|
29
|
+
*
|
|
30
|
+
* @param {string} filePath - Absolute path to the file
|
|
31
|
+
* @returns {boolean}
|
|
32
|
+
*/
|
|
33
|
+
function hasGsdMarker(filePath) {
|
|
34
|
+
try {
|
|
35
|
+
const buf = Buffer.alloc(500);
|
|
36
|
+
const fd = fs.openSync(filePath, 'r');
|
|
37
|
+
const bytesRead = fs.readSync(fd, buf, 0, 500, 0);
|
|
38
|
+
fs.closeSync(fd);
|
|
39
|
+
return buf.slice(0, bytesRead).toString('utf-8').includes(GSD_MARKER);
|
|
40
|
+
} catch {
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Recursively scan the project root (immediate .md files) and docs/ directory
|
|
47
|
+
* (up to 4 levels deep) for Markdown files, excluding dirs in SKIP_DIRS.
|
|
48
|
+
*
|
|
49
|
+
* @param {string} cwd - Project root
|
|
50
|
+
* @returns {Array<{path: string, has_gsd_marker: boolean}>}
|
|
51
|
+
*/
|
|
52
|
+
function scanExistingDocs(cwd) {
|
|
53
|
+
const MAX_DEPTH = 4;
|
|
54
|
+
const results = [];
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Recursively walk a directory for .md files up to MAX_DEPTH levels.
|
|
58
|
+
* @param {string} dir - Directory to scan
|
|
59
|
+
* @param {number} depth - Current depth (1-based)
|
|
60
|
+
*/
|
|
61
|
+
function walkDir(dir, depth) {
|
|
62
|
+
if (depth > MAX_DEPTH) return;
|
|
63
|
+
try {
|
|
64
|
+
const entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
65
|
+
for (const entry of entries) {
|
|
66
|
+
if (SKIP_DIRS.has(entry.name)) continue;
|
|
67
|
+
const abs = path.join(dir, entry.name);
|
|
68
|
+
if (entry.isDirectory()) {
|
|
69
|
+
walkDir(abs, depth + 1);
|
|
70
|
+
} else if (entry.isFile() && entry.name.toLowerCase().endsWith('.md')) {
|
|
71
|
+
const rel = toPosixPath(path.relative(cwd, abs));
|
|
72
|
+
results.push({ path: rel, has_gsd_marker: hasGsdMarker(abs) });
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
} catch { /* directory may not exist — best-effort */ }
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// Scan root-level .md files (non-recursive)
|
|
79
|
+
try {
|
|
80
|
+
const entries = fs.readdirSync(cwd, { withFileTypes: true });
|
|
81
|
+
for (const entry of entries) {
|
|
82
|
+
if (entry.isFile() && entry.name.toLowerCase().endsWith('.md')) {
|
|
83
|
+
const abs = path.join(cwd, entry.name);
|
|
84
|
+
const rel = toPosixPath(path.relative(cwd, abs));
|
|
85
|
+
results.push({ path: rel, has_gsd_marker: hasGsdMarker(abs) });
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
} catch { /* best-effort */ }
|
|
89
|
+
|
|
90
|
+
// Recursively scan docs/ directory
|
|
91
|
+
const docsDir = path.join(cwd, 'docs');
|
|
92
|
+
walkDir(docsDir, 1);
|
|
93
|
+
|
|
94
|
+
// Fallback: if docs/ does not exist, try documentation/ or doc/
|
|
95
|
+
try {
|
|
96
|
+
fs.statSync(docsDir);
|
|
97
|
+
} catch {
|
|
98
|
+
const alternatives = ['documentation', 'doc'];
|
|
99
|
+
for (const alt of alternatives) {
|
|
100
|
+
const altDir = path.join(cwd, alt);
|
|
101
|
+
try {
|
|
102
|
+
const stat = fs.statSync(altDir);
|
|
103
|
+
if (stat.isDirectory()) {
|
|
104
|
+
walkDir(altDir, 1);
|
|
105
|
+
break;
|
|
106
|
+
}
|
|
107
|
+
} catch { /* not present */ }
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
return results.sort((a, b) => a.path.localeCompare(b.path));
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Detect project type signals from the filesystem and package.json.
|
|
116
|
+
* All checks are best-effort and never throw.
|
|
117
|
+
*
|
|
118
|
+
* @param {string} cwd - Project root
|
|
119
|
+
* @returns {Object} Boolean signal fields
|
|
120
|
+
*/
|
|
121
|
+
function detectProjectType(cwd) {
|
|
122
|
+
const exists = (rel) => {
|
|
123
|
+
try { return pathExistsInternal(cwd, rel); } catch { return false; }
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
// Read package.json once — used by has_cli_bin, is_monorepo, has_tests checks.
|
|
127
|
+
const pkgRaw = platformReadSync(path.join(cwd, 'package.json'));
|
|
128
|
+
let pkg = null;
|
|
129
|
+
if (pkgRaw) {
|
|
130
|
+
try { pkg = JSON.parse(pkgRaw); } catch { /* invalid JSON */ }
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
// has_cli_bin: package.json has a `bin` field
|
|
134
|
+
const has_cli_bin = !!(pkg && pkg.bin && (typeof pkg.bin === 'string' || Object.keys(pkg.bin).length > 0));
|
|
135
|
+
|
|
136
|
+
// is_monorepo: pnpm-workspace.yaml, lerna.json, or package.json workspaces
|
|
137
|
+
let is_monorepo = exists('pnpm-workspace.yaml') || exists('lerna.json');
|
|
138
|
+
if (!is_monorepo && pkg) {
|
|
139
|
+
is_monorepo = Array.isArray(pkg.workspaces) && pkg.workspaces.length > 0;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
// has_tests: common test directories or test frameworks in devDependencies
|
|
143
|
+
let has_tests = exists('test') || exists('tests') || exists('__tests__') || exists('spec');
|
|
144
|
+
if (!has_tests && pkg) {
|
|
145
|
+
const devDeps = Object.keys(pkg.devDependencies || {});
|
|
146
|
+
has_tests = devDeps.some(d => ['vitest', 'jest', 'mocha', 'jasmine', 'ava'].includes(d));
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
// has_deploy_config: various deployment config files
|
|
150
|
+
const deployFiles = [
|
|
151
|
+
'Dockerfile', 'docker-compose.yml', 'docker-compose.yaml',
|
|
152
|
+
'fly.toml', 'render.yaml', 'vercel.json', 'netlify.toml', 'railway.json',
|
|
153
|
+
'.github/workflows/deploy.yml', '.github/workflows/deploy.yaml',
|
|
154
|
+
];
|
|
155
|
+
const has_deploy_config = deployFiles.some(f => exists(f));
|
|
156
|
+
|
|
157
|
+
return {
|
|
158
|
+
has_package_json: exists('package.json'),
|
|
159
|
+
has_api_routes: (
|
|
160
|
+
exists('src/app/api') || exists('routes') || exists('src/routes') ||
|
|
161
|
+
exists('api') || exists('server')
|
|
162
|
+
),
|
|
163
|
+
has_cli_bin,
|
|
164
|
+
is_open_source: exists('LICENSE') || exists('LICENSE.md'),
|
|
165
|
+
has_deploy_config,
|
|
166
|
+
is_monorepo,
|
|
167
|
+
has_tests,
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* Detect known documentation tooling in the project.
|
|
173
|
+
*
|
|
174
|
+
* @param {string} cwd - Project root
|
|
175
|
+
* @returns {Object} Boolean detection fields
|
|
176
|
+
*/
|
|
177
|
+
function detectDocTooling(cwd) {
|
|
178
|
+
const exists = (rel) => {
|
|
179
|
+
try { return pathExistsInternal(cwd, rel); } catch { return false; }
|
|
180
|
+
};
|
|
181
|
+
|
|
182
|
+
return {
|
|
183
|
+
docusaurus: exists('docusaurus.config.js') || exists('docusaurus.config.ts'),
|
|
184
|
+
vitepress: (
|
|
185
|
+
exists('.vitepress/config.js') ||
|
|
186
|
+
exists('.vitepress/config.ts') ||
|
|
187
|
+
exists('.vitepress/config.mts')
|
|
188
|
+
),
|
|
189
|
+
mkdocs: exists('mkdocs.yml'),
|
|
190
|
+
storybook: exists('.storybook'),
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
/**
|
|
195
|
+
* Extract monorepo workspace globs from pnpm-workspace.yaml, package.json
|
|
196
|
+
* workspaces, or lerna.json.
|
|
197
|
+
*
|
|
198
|
+
* @param {string} cwd - Project root
|
|
199
|
+
* @returns {string[]} Array of workspace glob patterns, or [] if not a monorepo
|
|
200
|
+
*/
|
|
201
|
+
function detectMonorepoWorkspaces(cwd) {
|
|
202
|
+
// pnpm-workspace.yaml
|
|
203
|
+
const pnpmRaw = platformReadSync(path.join(cwd, 'pnpm-workspace.yaml'));
|
|
204
|
+
if (pnpmRaw) {
|
|
205
|
+
const workspaces = [];
|
|
206
|
+
for (const line of pnpmRaw.split('\n')) {
|
|
207
|
+
const m = line.match(/^\s*-\s+['"]?(.+?)['"]?\s*$/);
|
|
208
|
+
if (m) workspaces.push(m[1].trim());
|
|
209
|
+
}
|
|
210
|
+
if (workspaces.length > 0) return workspaces;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
// package.json workspaces
|
|
214
|
+
const pkgRaw = platformReadSync(path.join(cwd, 'package.json'));
|
|
215
|
+
if (pkgRaw) {
|
|
216
|
+
try {
|
|
217
|
+
const pkg = JSON.parse(pkgRaw);
|
|
218
|
+
if (Array.isArray(pkg.workspaces) && pkg.workspaces.length > 0) {
|
|
219
|
+
return pkg.workspaces;
|
|
220
|
+
}
|
|
221
|
+
} catch { /* invalid JSON */ }
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
// lerna.json
|
|
225
|
+
const lernaRaw = platformReadSync(path.join(cwd, 'lerna.json'));
|
|
226
|
+
if (lernaRaw) {
|
|
227
|
+
try {
|
|
228
|
+
const lerna = JSON.parse(lernaRaw);
|
|
229
|
+
if (Array.isArray(lerna.packages) && lerna.packages.length > 0) {
|
|
230
|
+
return lerna.packages;
|
|
231
|
+
}
|
|
232
|
+
} catch { /* invalid JSON */ }
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
return [];
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
// ─── Public commands ──────────────────────────────────────────────────────────
|
|
239
|
+
|
|
240
|
+
/**
|
|
241
|
+
* Return JSON context for the docs-update workflow: project signals, existing
|
|
242
|
+
* doc inventory, doc tooling detection, monorepo workspaces, and model
|
|
243
|
+
* resolution. Follows the cmdInitMapCodebase pattern.
|
|
244
|
+
*
|
|
245
|
+
* @example
|
|
246
|
+
* node gsd-tools.cjs docs-init --raw
|
|
247
|
+
*
|
|
248
|
+
* @param {string} cwd - Project root directory
|
|
249
|
+
* @param {boolean} raw - Pass raw JSON flag through to output()
|
|
250
|
+
*/
|
|
251
|
+
function cmdDocsInit(cwd, raw) {
|
|
252
|
+
const config = loadConfig(cwd);
|
|
253
|
+
const result = {
|
|
254
|
+
doc_writer_model: resolveModelInternal(cwd, 'gsd-doc-writer'),
|
|
255
|
+
commit_docs: config.commit_docs,
|
|
256
|
+
existing_docs: scanExistingDocs(cwd),
|
|
257
|
+
project_type: detectProjectType(cwd),
|
|
258
|
+
doc_tooling: detectDocTooling(cwd),
|
|
259
|
+
monorepo_workspaces: detectMonorepoWorkspaces(cwd),
|
|
260
|
+
planning_exists: pathExistsInternal(cwd, '.planning'),
|
|
261
|
+
};
|
|
262
|
+
// Inject project_root and agent installation status (mirrors withProjectRoot in init.cjs)
|
|
263
|
+
result.project_root = cwd;
|
|
264
|
+
const agentStatus = checkAgentsInstalled();
|
|
265
|
+
result.agents_installed = agentStatus.agents_installed;
|
|
266
|
+
result.missing_agents = agentStatus.missing_agents;
|
|
267
|
+
output(result, raw);
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
module.exports = { cmdDocsInit };
|