@opengsd/gsd-core 1.3.0-rc.1 → 1.3.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/README.ja-JP.md +44 -790
- package/README.ko-KR.md +41 -778
- package/README.md +39 -180
- package/README.pt-BR.md +45 -413
- package/README.zh-CN.md +43 -761
- package/agents/gsd-ai-researcher.md +1 -1
- package/agents/gsd-debugger.md +8 -8
- package/agents/gsd-domain-researcher.md +14 -1
- package/agents/gsd-eval-auditor.md +1 -1
- package/agents/gsd-eval-planner.md +1 -1
- package/agents/gsd-executor.md +21 -8
- package/agents/gsd-framework-selector.md +1 -1
- package/agents/gsd-intel-updater.md +4 -4
- package/agents/gsd-phase-researcher.md +18 -5
- package/agents/gsd-plan-checker.md +3 -3
- package/agents/gsd-planner.md +36 -23
- package/agents/gsd-project-researcher.md +13 -0
- package/agents/gsd-research-synthesizer.md +6 -2
- package/agents/gsd-roadmapper.md +6 -6
- package/agents/gsd-ui-researcher.md +15 -2
- package/agents/gsd-user-profiler.md +2 -2
- package/agents/gsd-verifier.md +7 -7
- package/bin/install.js +169 -59
- package/commands/gsd/add-tests.md +1 -1
- package/commands/gsd/ai-integration-phase.md +3 -3
- package/commands/gsd/audit-fix.md +1 -1
- package/commands/gsd/audit-milestone.md +1 -1
- package/commands/gsd/audit-uat.md +1 -1
- package/commands/gsd/autonomous.md +2 -2
- package/commands/gsd/capture.md +6 -6
- package/commands/gsd/cleanup.md +1 -1
- package/commands/gsd/code-review.md +1 -1
- package/commands/gsd/complete-milestone.md +2 -2
- package/commands/gsd/config.md +3 -3
- package/commands/gsd/debug.md +1 -1
- package/commands/gsd/discuss-phase.md +5 -4
- package/commands/gsd/docs-update.md +1 -1
- package/commands/gsd/eval-review.md +2 -2
- package/commands/gsd/execute-phase.md +2 -2
- package/commands/gsd/explore.md +1 -1
- package/commands/gsd/extract-learnings.md +2 -2
- package/commands/gsd/fast.md +1 -1
- package/commands/gsd/forensics.md +1 -1
- package/commands/gsd/graphify.md +9 -9
- package/commands/gsd/health.md +1 -1
- package/commands/gsd/help.md +2 -2
- package/commands/gsd/import.md +5 -5
- package/commands/gsd/inbox.md +1 -1
- package/commands/gsd/ingest-docs.md +4 -4
- package/commands/gsd/manager.md +3 -3
- package/commands/gsd/map-codebase.md +1 -1
- package/commands/gsd/milestone-summary.md +1 -1
- package/commands/gsd/mvp-phase.md +4 -4
- package/commands/gsd/new-milestone.md +5 -5
- package/commands/gsd/new-project.md +5 -5
- package/commands/gsd/pause-work.md +2 -2
- package/commands/gsd/phase.md +4 -4
- package/commands/gsd/plan-phase.md +2 -2
- package/commands/gsd/plan-review-convergence.md +4 -4
- package/commands/gsd/pr-branch.md +1 -1
- package/commands/gsd/profile-user.md +2 -2
- package/commands/gsd/progress.md +4 -4
- package/commands/gsd/quick.md +1 -1
- package/commands/gsd/resume-work.md +1 -1
- package/commands/gsd/review.md +1 -1
- package/commands/gsd/secure-phase.md +1 -1
- package/commands/gsd/settings.md +1 -1
- package/commands/gsd/ship.md +2 -2
- package/commands/gsd/sketch.md +7 -7
- package/commands/gsd/spec-phase.md +2 -2
- package/commands/gsd/spike.md +3 -3
- package/commands/gsd/stats.md +1 -1
- package/commands/gsd/surface.md +4 -4
- package/commands/gsd/thread.md +1 -1
- package/commands/gsd/ui-phase.md +2 -2
- package/commands/gsd/ui-review.md +2 -2
- package/commands/gsd/ultraplan-phase.md +2 -2
- package/commands/gsd/undo.md +3 -3
- package/commands/gsd/update.md +3 -3
- package/commands/gsd/validate-phase.md +1 -1
- package/commands/gsd/verify-work.md +2 -2
- package/commands/gsd/workspace.md +4 -4
- package/{get-shit-done → gsd-core}/bin/check-latest-version.cjs +1 -1
- package/{get-shit-done → gsd-core}/bin/gsd-tools.cjs +13 -3
- package/gsd-core/bin/lib/active-workstream-store.cjs +291 -0
- package/gsd-core/bin/lib/adr-parser.cjs +399 -0
- package/gsd-core/bin/lib/agent-command-router.cjs +68 -0
- package/gsd-core/bin/lib/artifacts.cjs +51 -0
- package/gsd-core/bin/lib/audit.cjs +743 -0
- package/gsd-core/bin/lib/check-command-router.cjs +342 -0
- package/gsd-core/bin/lib/cjs-command-router-adapter.cjs +81 -0
- package/gsd-core/bin/lib/clock.cjs +95 -0
- package/gsd-core/bin/lib/clusters.cjs +128 -0
- package/gsd-core/bin/lib/code-review-flags.cjs +59 -0
- package/gsd-core/bin/lib/command-aliases.cjs +809 -0
- package/gsd-core/bin/lib/command-arg-projection.cjs +55 -0
- package/gsd-core/bin/lib/command-routing-hub.cjs +300 -0
- package/gsd-core/bin/lib/commands.cjs +1202 -0
- package/gsd-core/bin/lib/config-schema.cjs +29 -0
- package/{get-shit-done → gsd-core}/bin/lib/config-types.cjs +1 -1
- package/gsd-core/bin/lib/config.cjs +714 -0
- package/{get-shit-done → gsd-core}/bin/lib/configuration.cjs +76 -85
- package/gsd-core/bin/lib/context-utilization.cjs +48 -0
- package/gsd-core/bin/lib/core.cjs +2007 -0
- package/{get-shit-done → gsd-core}/bin/lib/decisions.cjs +9 -7
- package/gsd-core/bin/lib/docs.cjs +252 -0
- package/gsd-core/bin/lib/drift.cjs +364 -0
- package/gsd-core/bin/lib/fallow-runner.cjs +115 -0
- package/gsd-core/bin/lib/frontmatter.cjs +442 -0
- package/gsd-core/bin/lib/gap-checker.cjs +257 -0
- package/gsd-core/bin/lib/graphify.cjs +496 -0
- package/gsd-core/bin/lib/gsd2-import.cjs +456 -0
- package/gsd-core/bin/lib/init-command-router.cjs +62 -0
- package/gsd-core/bin/lib/init.cjs +1799 -0
- package/gsd-core/bin/lib/install-profiles.cjs +526 -0
- package/gsd-core/bin/lib/installer-migration-authoring.cjs +122 -0
- package/gsd-core/bin/lib/installer-migration-report.cjs +347 -0
- package/gsd-core/bin/lib/installer-migrations/000-first-time-baseline.cjs +218 -0
- package/gsd-core/bin/lib/installer-migrations/001-legacy-orphan-files.cjs +48 -0
- package/gsd-core/bin/lib/installer-migrations/002-codex-legacy-hooks-json.cjs +94 -0
- package/gsd-core/bin/lib/installer-migrations/003-rename-get-shit-done-to-gsd-core.cjs +108 -0
- package/gsd-core/bin/lib/installer-migrations.cjs +823 -0
- package/gsd-core/bin/lib/intel.cjs +607 -0
- package/gsd-core/bin/lib/learnings.cjs +270 -0
- package/gsd-core/bin/lib/legacy-cleanup.cjs +253 -0
- package/gsd-core/bin/lib/milestone.cjs +373 -0
- package/gsd-core/bin/lib/model-catalog.cjs +154 -0
- package/gsd-core/bin/lib/model-profiles.cjs +24 -0
- package/gsd-core/bin/lib/observability/event.cjs +51 -0
- package/gsd-core/bin/lib/observability/logger.cjs +146 -0
- package/{get-shit-done → gsd-core}/bin/lib/observability/redaction.cjs +19 -21
- package/{get-shit-done → gsd-core}/bin/lib/package-identity.cjs +5 -1
- package/gsd-core/bin/lib/phase-command-router.cjs +189 -0
- package/gsd-core/bin/lib/phase-lifecycle.cjs +74 -0
- package/gsd-core/bin/lib/phase.cjs +1307 -0
- package/gsd-core/bin/lib/phases-command-router.cjs +43 -0
- package/{get-shit-done → gsd-core}/bin/lib/plan-scan.cjs +18 -24
- package/gsd-core/bin/lib/planning-workspace.cjs +245 -0
- package/gsd-core/bin/lib/profile-output.cjs +1120 -0
- package/gsd-core/bin/lib/profile-pipeline.cjs +517 -0
- package/gsd-core/bin/lib/project-root.cjs +119 -0
- package/gsd-core/bin/lib/prompt-budget.cjs +305 -0
- package/gsd-core/bin/lib/review-reviewer-selection.cjs +121 -0
- package/gsd-core/bin/lib/roadmap-command-router.cjs +166 -0
- package/gsd-core/bin/lib/roadmap-upgrade.cjs +491 -0
- package/gsd-core/bin/lib/roadmap.cjs +600 -0
- package/gsd-core/bin/lib/runtime-artifact-layout.cjs +254 -0
- package/gsd-core/bin/lib/runtime-homes.cjs +169 -0
- package/gsd-core/bin/lib/runtime-name-policy.cjs +96 -0
- package/gsd-core/bin/lib/runtime-slash.cjs +119 -0
- package/{get-shit-done → gsd-core}/bin/lib/schema-detect.cjs +20 -26
- package/gsd-core/bin/lib/secrets.cjs +34 -0
- package/gsd-core/bin/lib/security.cjs +407 -0
- package/{get-shit-done → gsd-core}/bin/lib/semver-compare.cjs +1 -1
- package/gsd-core/bin/lib/shell-command-projection.cjs +524 -0
- package/gsd-core/bin/lib/state-command-router.cjs +160 -0
- package/{get-shit-done → gsd-core}/bin/lib/state-document.cjs +78 -78
- package/gsd-core/bin/lib/state.cjs +2010 -0
- package/gsd-core/bin/lib/surface.cjs +406 -0
- package/gsd-core/bin/lib/task-command-router.cjs +85 -0
- package/gsd-core/bin/lib/template.cjs +237 -0
- package/gsd-core/bin/lib/uat.cjs +297 -0
- package/gsd-core/bin/lib/ui-safety-gate.cjs +98 -0
- package/gsd-core/bin/lib/update-context.cjs +218 -0
- package/gsd-core/bin/lib/validate-command-router.cjs +91 -0
- package/gsd-core/bin/lib/validate.cjs +112 -0
- package/gsd-core/bin/lib/verify-command-router.cjs +44 -0
- package/gsd-core/bin/lib/verify.cjs +1451 -0
- package/{get-shit-done → gsd-core}/bin/lib/workstream-inventory-builder.cjs +19 -12
- package/gsd-core/bin/lib/workstream-inventory.cjs +147 -0
- package/{get-shit-done → gsd-core}/bin/lib/workstream-name-policy.cjs +28 -31
- package/gsd-core/bin/lib/workstream.cjs +380 -0
- package/gsd-core/bin/lib/worktree-safety.cjs +912 -0
- package/{get-shit-done → gsd-core}/bin/shared/config-schema.manifest.json +5 -0
- package/{get-shit-done → gsd-core}/references/artifact-types.md +1 -1
- package/{get-shit-done → gsd-core}/references/few-shot-examples/plan-checker.md +2 -2
- package/{get-shit-done → gsd-core}/references/few-shot-examples/verifier.md +12 -12
- package/{get-shit-done → gsd-core}/references/model-profile-resolution.md +1 -1
- package/{get-shit-done → gsd-core}/references/mvp-concepts.md +1 -1
- package/{get-shit-done → gsd-core}/references/planner-graphify-auto-update.md +2 -2
- package/{get-shit-done → gsd-core}/references/planner-mvp-mode.md +1 -1
- package/{get-shit-done → gsd-core}/references/verification-patterns.md +1 -1
- package/gsd-core/references/worktree-branch-check.md +38 -0
- package/{get-shit-done → gsd-core}/references/worktree-path-safety.md +4 -26
- package/{get-shit-done → gsd-core}/templates/README.md +2 -2
- package/{get-shit-done → gsd-core}/templates/codebase/structure.md +10 -10
- package/{get-shit-done → gsd-core}/templates/copilot-instructions.md +1 -1
- package/{get-shit-done → gsd-core}/templates/phase-prompt.md +10 -10
- package/gsd-core/workflows/_runtime-launcher.snippet.sh +1 -0
- package/{get-shit-done → gsd-core}/workflows/add-backlog.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/add-phase.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/add-tests.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/add-todo.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/ai-integration-phase.md +4 -4
- package/{get-shit-done → gsd-core}/workflows/audit-fix.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/audit-milestone.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/audit-uat.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/autonomous.md +4 -4
- package/{get-shit-done → gsd-core}/workflows/check-todos.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/cleanup.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/code-review-fix.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/code-review.md +4 -4
- package/{get-shit-done → gsd-core}/workflows/complete-milestone.md +2 -2
- package/{get-shit-done → gsd-core}/workflows/debug.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/diagnose-issues.md +4 -2
- package/{get-shit-done → gsd-core}/workflows/discovery-phase.md +5 -5
- package/{get-shit-done → gsd-core}/workflows/discuss-phase/modes/advisor.md +4 -4
- package/{get-shit-done → gsd-core}/workflows/discuss-phase/modes/auto.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/discuss-phase/modes/chain.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/discuss-phase/modes/power.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/discuss-phase-assumptions.md +2 -2
- package/{get-shit-done → gsd-core}/workflows/discuss-phase.md +6 -6
- package/{get-shit-done → gsd-core}/workflows/do.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/docs-update.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/edit-phase.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/eval-review.md +2 -2
- package/{get-shit-done → gsd-core}/workflows/execute-phase/steps/codebase-drift-gate.md +15 -2
- package/{get-shit-done → gsd-core}/workflows/execute-phase/steps/post-merge-gate.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/execute-phase.md +68 -46
- package/{get-shit-done → gsd-core}/workflows/execute-plan.md +8 -8
- package/{get-shit-done → gsd-core}/workflows/explore.md +3 -3
- package/{get-shit-done → gsd-core}/workflows/extract-learnings.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/forensics.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/graduation.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/health.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/help/modes/full.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/import.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/ingest-docs.md +3 -3
- package/{get-shit-done → gsd-core}/workflows/insert-phase.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/list-workspaces.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/manager.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/map-codebase.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/milestone-summary.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/mvp-phase.md +7 -7
- package/{get-shit-done → gsd-core}/workflows/new-milestone.md +3 -3
- package/{get-shit-done → gsd-core}/workflows/new-project.md +6 -6
- package/{get-shit-done → gsd-core}/workflows/new-workspace.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/next.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/pause-work.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/plan-milestone-gaps.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/plan-phase.md +15 -15
- package/{get-shit-done → gsd-core}/workflows/plan-review-convergence.md +7 -7
- package/{get-shit-done → gsd-core}/workflows/plant-seed.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/profile-user.md +11 -11
- package/{get-shit-done → gsd-core}/workflows/progress.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/quick.md +2 -26
- package/{get-shit-done → gsd-core}/workflows/reapply-patches.md +2 -2
- package/{get-shit-done → gsd-core}/workflows/remove-phase.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/remove-workspace.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/resume-project.md +2 -2
- package/{get-shit-done → gsd-core}/workflows/review.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/scan.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/secure-phase.md +3 -3
- package/{get-shit-done → gsd-core}/workflows/settings-advanced.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/settings-integrations.md +2 -2
- package/{get-shit-done → gsd-core}/workflows/settings.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/ship.md +56 -4
- package/{get-shit-done → gsd-core}/workflows/sketch-wrap-up.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/sketch.md +5 -5
- package/{get-shit-done → gsd-core}/workflows/spec-phase.md +2 -2
- package/{get-shit-done → gsd-core}/workflows/spike-wrap-up.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/spike.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/stats.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/sync-skills.md +3 -3
- package/{get-shit-done → gsd-core}/workflows/thread.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/transition.md +2 -2
- package/{get-shit-done → gsd-core}/workflows/ui-phase.md +3 -3
- package/{get-shit-done → gsd-core}/workflows/ui-review.md +2 -2
- package/{get-shit-done → gsd-core}/workflows/ultraplan-phase.md +1 -1
- package/{get-shit-done → gsd-core}/workflows/undo.md +2 -2
- package/{get-shit-done → gsd-core}/workflows/update.md +41 -16
- package/{get-shit-done → gsd-core}/workflows/validate-phase.md +3 -3
- package/{get-shit-done → gsd-core}/workflows/verify-phase.md +4 -4
- package/{get-shit-done → gsd-core}/workflows/verify-work.md +5 -5
- package/hooks/dist/gsd-check-update-worker.js +16 -3
- package/hooks/dist/gsd-check-update.js +7 -5
- package/hooks/dist/gsd-context-monitor.js +2 -2
- package/hooks/dist/gsd-statusline.js +39 -21
- package/hooks/dist/gsd-update-banner.js +6 -2
- package/hooks/dist/managed-hooks-registry.cjs +35 -0
- package/hooks/gsd-check-update-worker.js +16 -3
- package/hooks/gsd-check-update.js +7 -5
- package/hooks/gsd-context-monitor.js +2 -2
- package/hooks/gsd-statusline.js +39 -21
- package/hooks/gsd-update-banner.js +6 -2
- package/package.json +9 -6
- package/scripts/affected-tests-lib.cjs +1 -1
- package/scripts/base64-scan.sh +12 -0
- package/scripts/build-hooks.js +4 -1
- package/scripts/changeset/cli.cjs +2 -2
- package/scripts/changeset/github-release-notes.cjs +1 -1
- package/scripts/changeset/lint.cjs +1 -1
- package/scripts/check-alias-drift.cjs +8 -8
- package/scripts/check-env.cjs +5 -1
- package/scripts/ci-test-scope.cjs +25 -10
- package/scripts/command-contract-helpers.cjs +1 -1
- package/scripts/fix-slash-commands.cjs +5 -5
- package/scripts/gen-inventory-manifest.cjs +3 -3
- package/scripts/generate-package-identity.cjs +28 -7
- package/scripts/lib/allowlist-ratchet.cjs +136 -0
- package/scripts/lint-command-contract.cjs +1 -1
- package/scripts/lint-legacy-dir-name.cjs +156 -0
- package/scripts/lint-package-identity-drift.cjs +8 -8
- package/scripts/lint-pr-check-project-dir.cjs +0 -1
- package/scripts/lint-shell-command-projection-drift.cjs +1 -1
- package/scripts/lint-skill-deps.cjs +1 -1
- package/scripts/lint-test-file-count.allowlist.json +129 -32
- package/scripts/lint-test-file-count.cjs +85 -30
- package/scripts/mutation-matrix.cjs +219 -0
- package/scripts/prompt-injection-scan.sh +5 -1
- package/scripts/release-notes/format-github-release-notes.cjs +256 -0
- package/scripts/release-tarball-smoke.cjs +9 -9
- package/scripts/run-tests.cjs +11 -3
- package/scripts/strip-prose-atrefs.cjs +2 -2
- package/scripts/sync-runtime-launcher.cjs +2 -2
- package/scripts/verify-npm-publish.cjs +252 -0
- package/get-shit-done/bin/lib/active-workstream-store.cjs +0 -302
- package/get-shit-done/bin/lib/adr-parser.cjs +0 -394
- package/get-shit-done/bin/lib/agent-command-router.cjs +0 -65
- package/get-shit-done/bin/lib/artifacts.cjs +0 -53
- package/get-shit-done/bin/lib/audit.cjs +0 -755
- package/get-shit-done/bin/lib/check-command-router.cjs +0 -333
- package/get-shit-done/bin/lib/cjs-command-router-adapter.cjs +0 -118
- package/get-shit-done/bin/lib/clock.cjs +0 -96
- package/get-shit-done/bin/lib/clusters.cjs +0 -135
- package/get-shit-done/bin/lib/code-review-flags.cjs +0 -74
- package/get-shit-done/bin/lib/command-aliases.cjs +0 -831
- package/get-shit-done/bin/lib/command-arg-projection.cjs +0 -62
- package/get-shit-done/bin/lib/command-routing-hub.cjs +0 -388
- package/get-shit-done/bin/lib/commands.cjs +0 -1292
- package/get-shit-done/bin/lib/config-schema.cjs +0 -31
- package/get-shit-done/bin/lib/config.cjs +0 -728
- package/get-shit-done/bin/lib/context-utilization.cjs +0 -47
- package/get-shit-done/bin/lib/core.cjs +0 -2513
- package/get-shit-done/bin/lib/docs.cjs +0 -270
- package/get-shit-done/bin/lib/drift.cjs +0 -388
- package/get-shit-done/bin/lib/fallow-runner.cjs +0 -109
- package/get-shit-done/bin/lib/frontmatter.cjs +0 -389
- package/get-shit-done/bin/lib/gap-checker.cjs +0 -254
- package/get-shit-done/bin/lib/graphify.cjs +0 -592
- package/get-shit-done/bin/lib/gsd2-import.cjs +0 -514
- package/get-shit-done/bin/lib/init-command-router.cjs +0 -58
- package/get-shit-done/bin/lib/init.cjs +0 -2112
- package/get-shit-done/bin/lib/install-profiles.cjs +0 -603
- package/get-shit-done/bin/lib/installer-migration-authoring.cjs +0 -117
- package/get-shit-done/bin/lib/installer-migration-report.cjs +0 -355
- package/get-shit-done/bin/lib/installer-migrations/000-first-time-baseline.cjs +0 -220
- package/get-shit-done/bin/lib/installer-migrations/001-legacy-orphan-files.cjs +0 -41
- package/get-shit-done/bin/lib/installer-migrations/002-codex-legacy-hooks-json.cjs +0 -80
- package/get-shit-done/bin/lib/installer-migrations.cjs +0 -778
- package/get-shit-done/bin/lib/intel.cjs +0 -708
- package/get-shit-done/bin/lib/learnings.cjs +0 -421
- package/get-shit-done/bin/lib/milestone.cjs +0 -372
- package/get-shit-done/bin/lib/model-catalog.cjs +0 -229
- package/get-shit-done/bin/lib/model-profiles.cjs +0 -31
- package/get-shit-done/bin/lib/observability/event.cjs +0 -82
- package/get-shit-done/bin/lib/observability/logger.cjs +0 -174
- package/get-shit-done/bin/lib/phase-command-router.cjs +0 -191
- package/get-shit-done/bin/lib/phase-lifecycle.cjs +0 -79
- package/get-shit-done/bin/lib/phase.cjs +0 -1607
- package/get-shit-done/bin/lib/phases-command-router.cjs +0 -39
- package/get-shit-done/bin/lib/planning-workspace.cjs +0 -238
- package/get-shit-done/bin/lib/profile-output.cjs +0 -1141
- package/get-shit-done/bin/lib/profile-pipeline.cjs +0 -539
- package/get-shit-done/bin/lib/project-root.cjs +0 -112
- package/get-shit-done/bin/lib/prompt-budget.cjs +0 -399
- package/get-shit-done/bin/lib/review-reviewer-selection.cjs +0 -126
- package/get-shit-done/bin/lib/roadmap-command-router.cjs +0 -162
- package/get-shit-done/bin/lib/roadmap-upgrade.cjs +0 -569
- package/get-shit-done/bin/lib/roadmap.cjs +0 -651
- package/get-shit-done/bin/lib/runtime-artifact-layout.cjs +0 -301
- package/get-shit-done/bin/lib/runtime-homes.cjs +0 -222
- package/get-shit-done/bin/lib/runtime-name-policy.cjs +0 -83
- package/get-shit-done/bin/lib/runtime-slash.cjs +0 -112
- package/get-shit-done/bin/lib/secrets.cjs +0 -32
- package/get-shit-done/bin/lib/security.cjs +0 -600
- package/get-shit-done/bin/lib/shell-command-projection.cjs +0 -535
- package/get-shit-done/bin/lib/state-command-router.cjs +0 -252
- package/get-shit-done/bin/lib/state.cjs +0 -2073
- package/get-shit-done/bin/lib/surface.cjs +0 -470
- package/get-shit-done/bin/lib/task-command-router.cjs +0 -81
- package/get-shit-done/bin/lib/template.cjs +0 -228
- package/get-shit-done/bin/lib/uat.cjs +0 -289
- package/get-shit-done/bin/lib/ui-safety-gate.cjs +0 -111
- package/get-shit-done/bin/lib/update-context.cjs +0 -209
- package/get-shit-done/bin/lib/validate-command-router.cjs +0 -83
- package/get-shit-done/bin/lib/validate.cjs +0 -118
- package/get-shit-done/bin/lib/verify-command-router.cjs +0 -40
- package/get-shit-done/bin/lib/verify.cjs +0 -1614
- package/get-shit-done/bin/lib/workstream-inventory.cjs +0 -146
- package/get-shit-done/bin/lib/workstream.cjs +0 -389
- package/get-shit-done/bin/lib/worktree-safety.cjs +0 -985
- package/get-shit-done/workflows/_runtime-launcher.snippet.sh +0 -1
- package/scripts/lint-no-source-grep-extras.cjs +0 -81
- package/scripts/lint-no-source-grep.cjs +0 -174
- /package/{get-shit-done → gsd-core}/bin/shared/config-defaults.manifest.json +0 -0
- /package/{get-shit-done → gsd-core}/bin/shared/model-catalog.json +0 -0
- /package/{get-shit-done → gsd-core}/bin/shared/runtime-aliases.manifest.json +0 -0
- /package/{get-shit-done → gsd-core}/bin/verify-reapply-patches.cjs +0 -0
- /package/{get-shit-done → gsd-core}/contexts/dev.md +0 -0
- /package/{get-shit-done → gsd-core}/contexts/research.md +0 -0
- /package/{get-shit-done → gsd-core}/contexts/review.md +0 -0
- /package/{get-shit-done → gsd-core}/references/agent-contracts.md +0 -0
- /package/{get-shit-done → gsd-core}/references/ai-evals.md +0 -0
- /package/{get-shit-done → gsd-core}/references/ai-frameworks.md +0 -0
- /package/{get-shit-done → gsd-core}/references/autonomous-smart-discuss.md +0 -0
- /package/{get-shit-done → gsd-core}/references/checkpoints.md +0 -0
- /package/{get-shit-done → gsd-core}/references/common-bug-patterns.md +0 -0
- /package/{get-shit-done → gsd-core}/references/context-budget.md +0 -0
- /package/{get-shit-done → gsd-core}/references/continuation-format.md +0 -0
- /package/{get-shit-done → gsd-core}/references/debugger-philosophy.md +0 -0
- /package/{get-shit-done → gsd-core}/references/decimal-phase-calculation.md +0 -0
- /package/{get-shit-done → gsd-core}/references/doc-conflict-engine.md +0 -0
- /package/{get-shit-done → gsd-core}/references/domain-probes.md +0 -0
- /package/{get-shit-done → gsd-core}/references/execute-mvp-tdd.md +0 -0
- /package/{get-shit-done → gsd-core}/references/executor-examples.md +0 -0
- /package/{get-shit-done → gsd-core}/references/gate-prompts.md +0 -0
- /package/{get-shit-done → gsd-core}/references/gates.md +0 -0
- /package/{get-shit-done → gsd-core}/references/git-integration.md +0 -0
- /package/{get-shit-done → gsd-core}/references/git-planning-commit.md +0 -0
- /package/{get-shit-done → gsd-core}/references/ios-scaffold.md +0 -0
- /package/{get-shit-done → gsd-core}/references/mandatory-initial-read.md +0 -0
- /package/{get-shit-done → gsd-core}/references/model-profiles.md +0 -0
- /package/{get-shit-done → gsd-core}/references/phase-argument-parsing.md +0 -0
- /package/{get-shit-done → gsd-core}/references/planner-antipatterns.md +0 -0
- /package/{get-shit-done → gsd-core}/references/planner-chunked.md +0 -0
- /package/{get-shit-done → gsd-core}/references/planner-gap-closure.md +0 -0
- /package/{get-shit-done → gsd-core}/references/planner-human-verify-mode.md +0 -0
- /package/{get-shit-done → gsd-core}/references/planner-interface-context.md +0 -0
- /package/{get-shit-done → gsd-core}/references/planner-reviews.md +0 -0
- /package/{get-shit-done → gsd-core}/references/planner-revision.md +0 -0
- /package/{get-shit-done → gsd-core}/references/planner-source-audit.md +0 -0
- /package/{get-shit-done → gsd-core}/references/planning-config.md +0 -0
- /package/{get-shit-done → gsd-core}/references/project-skills-discovery.md +0 -0
- /package/{get-shit-done → gsd-core}/references/questioning.md +0 -0
- /package/{get-shit-done → gsd-core}/references/revision-loop.md +0 -0
- /package/{get-shit-done → gsd-core}/references/scout-codebase.md +0 -0
- /package/{get-shit-done → gsd-core}/references/skeleton-template.md +0 -0
- /package/{get-shit-done → gsd-core}/references/sketch-interactivity.md +0 -0
- /package/{get-shit-done → gsd-core}/references/sketch-theme-system.md +0 -0
- /package/{get-shit-done → gsd-core}/references/sketch-tooling.md +0 -0
- /package/{get-shit-done → gsd-core}/references/sketch-variant-patterns.md +0 -0
- /package/{get-shit-done → gsd-core}/references/spidr-splitting.md +0 -0
- /package/{get-shit-done → gsd-core}/references/tdd.md +0 -0
- /package/{get-shit-done → gsd-core}/references/thinking-models-debug.md +0 -0
- /package/{get-shit-done → gsd-core}/references/thinking-models-execution.md +0 -0
- /package/{get-shit-done → gsd-core}/references/thinking-models-planning.md +0 -0
- /package/{get-shit-done → gsd-core}/references/thinking-models-research.md +0 -0
- /package/{get-shit-done → gsd-core}/references/thinking-models-verification.md +0 -0
- /package/{get-shit-done → gsd-core}/references/thinking-partner.md +0 -0
- /package/{get-shit-done → gsd-core}/references/ui-brand.md +0 -0
- /package/{get-shit-done → gsd-core}/references/universal-anti-patterns.md +0 -0
- /package/{get-shit-done → gsd-core}/references/user-profiling.md +0 -0
- /package/{get-shit-done → gsd-core}/references/user-story-template.md +0 -0
- /package/{get-shit-done → gsd-core}/references/verification-overrides.md +0 -0
- /package/{get-shit-done → gsd-core}/references/verify-mvp-mode.md +0 -0
- /package/{get-shit-done → gsd-core}/references/workstream-flag.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/AI-SPEC.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/DEBUG.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/SECURITY.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/UAT.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/UI-SPEC.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/VALIDATION.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/claude-md.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/codebase/architecture.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/codebase/concerns.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/codebase/conventions.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/codebase/integrations.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/codebase/stack.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/codebase/testing.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/config.json +0 -0
- /package/{get-shit-done → gsd-core}/templates/context.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/continue-here.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/debug-subagent-prompt.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/dev-preferences.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/discovery.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/discussion-log.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/milestone-archive.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/milestone.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/planner-subagent-prompt.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/project.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/requirements.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/research-project/ARCHITECTURE.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/research-project/FEATURES.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/research-project/PITFALLS.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/research-project/STACK.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/research-project/SUMMARY.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/research.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/retrospective.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/roadmap.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/spec.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/state.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/summary-complex.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/summary-minimal.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/summary-standard.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/summary.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/user-profile.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/user-setup.md +0 -0
- /package/{get-shit-done → gsd-core}/templates/verification-report.md +0 -0
- /package/{get-shit-done → gsd-core}/workflows/analyze-dependencies.md +0 -0
- /package/{get-shit-done → gsd-core}/workflows/discuss-phase/modes/all.md +0 -0
- /package/{get-shit-done → gsd-core}/workflows/discuss-phase/modes/analyze.md +0 -0
- /package/{get-shit-done → gsd-core}/workflows/discuss-phase/modes/batch.md +0 -0
- /package/{get-shit-done → gsd-core}/workflows/discuss-phase/modes/default.md +0 -0
- /package/{get-shit-done → gsd-core}/workflows/discuss-phase/modes/text.md +0 -0
- /package/{get-shit-done → gsd-core}/workflows/discuss-phase/templates/checkpoint.json +0 -0
- /package/{get-shit-done → gsd-core}/workflows/discuss-phase/templates/context.md +0 -0
- /package/{get-shit-done → gsd-core}/workflows/discuss-phase/templates/discussion-log.md +0 -0
- /package/{get-shit-done → gsd-core}/workflows/discuss-phase-power.md +0 -0
- /package/{get-shit-done → gsd-core}/workflows/execute-phase/steps/per-plan-worktree-gate.md +0 -0
- /package/{get-shit-done → gsd-core}/workflows/fast.md +0 -0
- /package/{get-shit-done → gsd-core}/workflows/help/modes/brief.md +0 -0
- /package/{get-shit-done → gsd-core}/workflows/help/modes/default.md +0 -0
- /package/{get-shit-done → gsd-core}/workflows/help/modes/topic.md +0 -0
- /package/{get-shit-done → gsd-core}/workflows/help.md +0 -0
- /package/{get-shit-done → gsd-core}/workflows/inbox.md +0 -0
- /package/{get-shit-done → gsd-core}/workflows/list-phase-assumptions.md +0 -0
- /package/{get-shit-done → gsd-core}/workflows/node-repair.md +0 -0
- /package/{get-shit-done → gsd-core}/workflows/note.md +0 -0
- /package/{get-shit-done → gsd-core}/workflows/pr-branch.md +0 -0
- /package/{get-shit-done → gsd-core}/workflows/session-report.md +0 -0
|
@@ -38,7 +38,7 @@ Key characteristics of the input:
|
|
|
38
38
|
</input>
|
|
39
39
|
|
|
40
40
|
<reference>
|
|
41
|
-
@~/.claude/
|
|
41
|
+
@~/.claude/gsd-core/references/user-profiling.md
|
|
42
42
|
|
|
43
43
|
This is the detection heuristics rubric. Read it in full before analyzing any messages. It defines:
|
|
44
44
|
- The 8 dimensions and their rating spectrums
|
|
@@ -52,7 +52,7 @@ This is the detection heuristics rubric. Read it in full before analyzing any me
|
|
|
52
52
|
<process>
|
|
53
53
|
|
|
54
54
|
<step name="load_rubric">
|
|
55
|
-
Read the user-profiling reference document at `~/.claude/
|
|
55
|
+
Read the user-profiling reference document at `~/.claude/gsd-core/references/user-profiling.md` to load:
|
|
56
56
|
- All 8 dimension definitions with rating spectrums
|
|
57
57
|
- Signal patterns and detection heuristics per dimension
|
|
58
58
|
- Confidence scoring thresholds (HIGH: 10+ signals across 2+ projects, MEDIUM: 5-9, LOW: <5, UNSCORED: 0)
|
package/agents/gsd-verifier.md
CHANGED
|
@@ -16,7 +16,7 @@ A completed phase has been submitted for goal-backward verification. Verify that
|
|
|
16
16
|
|
|
17
17
|
Goal-backward verification. Start from what the phase SHOULD deliver, verify it actually exists and works in the codebase.
|
|
18
18
|
|
|
19
|
-
@~/.claude/
|
|
19
|
+
@~/.claude/gsd-core/references/mandatory-initial-read.md
|
|
20
20
|
|
|
21
21
|
**Critical mindset:** Do NOT trust SUMMARY.md claims. SUMMARYs document what Claude SAID it did. You verify what ACTUALLY exists in the code. These often differ.
|
|
22
22
|
|
|
@@ -39,8 +39,8 @@ Every truth must resolve to VERIFIED, FAILED (BLOCKER), or UNCERTAIN (WARNING wi
|
|
|
39
39
|
</adversarial_stance>
|
|
40
40
|
|
|
41
41
|
<required_reading>
|
|
42
|
-
@~/.claude/
|
|
43
|
-
@~/.claude/
|
|
42
|
+
@~/.claude/gsd-core/references/verification-overrides.md
|
|
43
|
+
@~/.claude/gsd-core/references/gates.md
|
|
44
44
|
</required_reading>
|
|
45
45
|
|
|
46
46
|
This agent implements the **Escalation Gate** pattern (surfaces unresolvable gaps to the developer for decision).
|
|
@@ -49,7 +49,7 @@ Before verifying, discover project context:
|
|
|
49
49
|
|
|
50
50
|
**Project instructions:** Read `./CLAUDE.md` if it exists in the working directory. Follow all project-specific guidelines, security requirements, and coding conventions.
|
|
51
51
|
|
|
52
|
-
**Project skills:** @~/.claude/
|
|
52
|
+
**Project skills:** @~/.claude/gsd-core/references/project-skills-discovery.md
|
|
53
53
|
- Load `rules/*.md` as needed during **verification**.
|
|
54
54
|
- Apply skill rules when scanning for anti-patterns and verifying quality.
|
|
55
55
|
</project_context>
|
|
@@ -71,10 +71,10 @@ Then verify each level against the actual codebase.
|
|
|
71
71
|
<verification_process>
|
|
72
72
|
|
|
73
73
|
At verification decision points, apply structured reasoning:
|
|
74
|
-
@~/.claude/
|
|
74
|
+
@~/.claude/gsd-core/references/thinking-models-verification.md
|
|
75
75
|
|
|
76
76
|
At verification decision points, reference calibration examples:
|
|
77
|
-
@~/.claude/
|
|
77
|
+
@~/.claude/gsd-core/references/few-shot-examples/verifier.md
|
|
78
78
|
|
|
79
79
|
## Step 0: Check for Previous Verification
|
|
80
80
|
|
|
@@ -644,7 +644,7 @@ Deferred items are informational only — they do not require closure plans.
|
|
|
644
644
|
|
|
645
645
|
## MVP Mode Verification
|
|
646
646
|
|
|
647
|
-
**When the phase under verification has `mode: mvp` in ROADMAP.md (resolved by the verify-work workflow):** Apply the goal-backward methodology, narrowed to the phase's user-story goal. Required reading: `@~/.claude/
|
|
647
|
+
**When the phase under verification has `mode: mvp` in ROADMAP.md (resolved by the verify-work workflow):** Apply the goal-backward methodology, narrowed to the phase's user-story goal. Required reading: `@~/.claude/gsd-core/references/verify-mvp-mode.md`.
|
|
648
648
|
|
|
649
649
|
**Core narrowing rule:** Goal-backward verification normally checks that the phase goal is observably true in the codebase. Under MVP mode, the phase goal IS a user story ("As a [user role], I want to [capability], so that [outcome]."). Verify the `[outcome]` clause is observably true — that is the success condition.
|
|
650
650
|
|
package/bin/install.js
CHANGED
|
@@ -18,7 +18,7 @@ const {
|
|
|
18
18
|
projectCodexHookTomlCommand,
|
|
19
19
|
shellHookOmitsBashRunner,
|
|
20
20
|
buildLocalShellHookCommand,
|
|
21
|
-
} = require('../
|
|
21
|
+
} = require('../gsd-core/bin/lib/shell-command-projection.cjs');
|
|
22
22
|
|
|
23
23
|
// Bidirectional GSD slash-command namespace transformer (#3583).
|
|
24
24
|
// Required at module scope so the command list can be computed once per install
|
|
@@ -30,7 +30,7 @@ const {
|
|
|
30
30
|
} = require(path.join(__dirname, '..', 'scripts', 'fix-slash-commands.cjs'));
|
|
31
31
|
const {
|
|
32
32
|
resolveAntigravityGlobalDir,
|
|
33
|
-
} = require('../
|
|
33
|
+
} = require('../gsd-core/bin/lib/runtime-homes.cjs');
|
|
34
34
|
|
|
35
35
|
/**
|
|
36
36
|
* Runtimes that register hyphen-form `name:` per #2808 AND copy agent bodies
|
|
@@ -75,7 +75,7 @@ const dim = '\x1b[2m';
|
|
|
75
75
|
const reset = '\x1b[0m';
|
|
76
76
|
|
|
77
77
|
// Codex config.toml constants
|
|
78
|
-
const GSD_CODEX_MARKER = '# GSD Agent Configuration \u2014 managed by
|
|
78
|
+
const GSD_CODEX_MARKER = '# GSD Agent Configuration \u2014 managed by gsd-core installer';
|
|
79
79
|
const GSD_CODEX_HOOKS_OWNERSHIP_PREFIX = '# GSD codex_hooks ownership: ';
|
|
80
80
|
// Codex's hook-enabling feature flag (issue #3566). Codex itself marks
|
|
81
81
|
// `codex_hooks` as a `legacy_key` in codex-rs/features/src/legacy.rs; the
|
|
@@ -92,7 +92,7 @@ function isCodexHooksFeatureKey(key) {
|
|
|
92
92
|
}
|
|
93
93
|
|
|
94
94
|
// Copilot instructions marker constants
|
|
95
|
-
const GSD_COPILOT_INSTRUCTIONS_MARKER = '<!-- GSD Configuration \u2014 managed by
|
|
95
|
+
const GSD_COPILOT_INSTRUCTIONS_MARKER = '<!-- GSD Configuration \u2014 managed by gsd-core installer -->';
|
|
96
96
|
const GSD_COPILOT_INSTRUCTIONS_CLOSE_MARKER = '<!-- /GSD Configuration -->';
|
|
97
97
|
|
|
98
98
|
// GSD-managed files under hooks/lib/ (helpers required by gsd-*.sh hooks).
|
|
@@ -136,11 +136,11 @@ const pkg = require('../package.json');
|
|
|
136
136
|
// #2517 — runtime-aware tier resolution shared with core.cjs.
|
|
137
137
|
// Hoisted to top with absolute __dirname-based paths so `gsd install codex` works
|
|
138
138
|
// when invoked via npm global install (cwd is the user's project, not the gsd repo
|
|
139
|
-
// root). Inline `require('../
|
|
139
|
+
// root). Inline `require('../gsd-core/...')` from inside install functions
|
|
140
140
|
// works only because Node resolves it relative to the install.js file regardless
|
|
141
141
|
// of cwd, but keeping the require at the top makes the dependency explicit and
|
|
142
142
|
// surfaces resolution failures at process start instead of at first install call.
|
|
143
|
-
const _gsdLibDir = path.join(__dirname, '..', '
|
|
143
|
+
const _gsdLibDir = path.join(__dirname, '..', 'gsd-core', 'bin', 'lib');
|
|
144
144
|
const { MODEL_PROFILES: GSD_MODEL_PROFILES } = require(path.join(_gsdLibDir, 'model-profiles.cjs'));
|
|
145
145
|
const {
|
|
146
146
|
RUNTIME_PROFILE_MAP: GSD_RUNTIME_PROFILE_MAP,
|
|
@@ -163,7 +163,7 @@ function _getGsdEffortCatalog() {
|
|
|
163
163
|
const manifestPath = path.join(
|
|
164
164
|
__dirname,
|
|
165
165
|
'..',
|
|
166
|
-
'
|
|
166
|
+
'gsd-core',
|
|
167
167
|
'bin',
|
|
168
168
|
'shared',
|
|
169
169
|
'config-defaults.manifest.json'
|
|
@@ -227,6 +227,13 @@ const {
|
|
|
227
227
|
const {
|
|
228
228
|
resolveRuntimeArtifactLayout,
|
|
229
229
|
} = require(path.join(_gsdLibDir, 'runtime-artifact-layout.cjs'));
|
|
230
|
+
const {
|
|
231
|
+
planLegacyCleanup,
|
|
232
|
+
applyLegacyCleanup,
|
|
233
|
+
} = require(path.join(__dirname, '..', 'gsd-core', 'bin', 'lib', 'legacy-cleanup.cjs'));
|
|
234
|
+
const {
|
|
235
|
+
updateCacheFileName,
|
|
236
|
+
} = require(path.join(__dirname, '..', 'gsd-core', 'bin', 'lib', 'package-identity.cjs'));
|
|
230
237
|
|
|
231
238
|
// Parse args
|
|
232
239
|
const args = process.argv.slice(2);
|
|
@@ -253,6 +260,7 @@ const hasUninstall = args.includes('--uninstall') || args.includes('-u');
|
|
|
253
260
|
const hasSkillsRoot = args.includes('--skills-root');
|
|
254
261
|
const hasPortableHooks = args.includes('--portable-hooks') || process.env.GSD_PORTABLE_HOOKS === '1';
|
|
255
262
|
const hasMinimal = args.includes('--minimal') || args.includes('--core-only');
|
|
263
|
+
const hasDryRun = args.includes('--dry-run');
|
|
256
264
|
// --profile=<name> or --profile=<n1>,<n2> (composable); mutually exclusive with --minimal
|
|
257
265
|
const _profileArgRaw = (() => {
|
|
258
266
|
for (const arg of args) {
|
|
@@ -5226,14 +5234,14 @@ function installCodexConfig(targetDir, agentsSrc) {
|
|
|
5226
5234
|
const agents = [];
|
|
5227
5235
|
|
|
5228
5236
|
// Compute the Codex GSD install path (absolute, so subagents with empty $HOME work — #820)
|
|
5229
|
-
const codexGsdPath = `${path.resolve(targetDir, '
|
|
5237
|
+
const codexGsdPath = `${path.resolve(targetDir, 'gsd-core').replace(/\\/g, '/')}/`;
|
|
5230
5238
|
|
|
5231
5239
|
for (const file of agentEntries) {
|
|
5232
5240
|
let content = fs.readFileSync(path.join(agentsSrc, file), 'utf8');
|
|
5233
|
-
// Replace full .claude/
|
|
5241
|
+
// Replace full .claude/gsd-core prefix so path resolves to the Codex
|
|
5234
5242
|
// GSD install before generic .claude → .codex conversion rewrites it.
|
|
5235
|
-
content = content.replace(/~\/\.claude\/
|
|
5236
|
-
content = content.replace(/\$HOME\/\.claude\/
|
|
5243
|
+
content = content.replace(/~\/\.claude\/gsd-core\//g, codexGsdPath);
|
|
5244
|
+
content = content.replace(/\$HOME\/\.claude\/gsd-core\//g, codexGsdPath);
|
|
5237
5245
|
// Route TOML emit through the same full Claude→Codex conversion pipeline
|
|
5238
5246
|
// used on the `.md` emit path (#2639). Covers: slash-command rewrites,
|
|
5239
5247
|
// $ARGUMENTS → {{GSD_ARGS}}, /clear removal, anchored and bare .claude/
|
|
@@ -6032,7 +6040,7 @@ function writeHermesCategoryDescription(categoryDir) {
|
|
|
6032
6040
|
*/
|
|
6033
6041
|
|
|
6034
6042
|
/**
|
|
6035
|
-
* Single source of truth for user-owned artifacts inside
|
|
6043
|
+
* Single source of truth for user-owned artifacts inside gsd-core/.
|
|
6036
6044
|
*
|
|
6037
6045
|
* These files are created/refreshed by user-facing workflows (e.g.
|
|
6038
6046
|
* /gsd-profile-user) and must be preserved across reinstalls. Critically, they
|
|
@@ -6045,7 +6053,7 @@ function writeHermesCategoryDescription(categoryDir) {
|
|
|
6045
6053
|
* both. Both preserveUserArtifacts call sites and writeManifest must agree on
|
|
6046
6054
|
* this list, which is why it lives here as a single constant.
|
|
6047
6055
|
*
|
|
6048
|
-
* Paths are relative to the
|
|
6056
|
+
* Paths are relative to the gsd-core/ directory.
|
|
6049
6057
|
*/
|
|
6050
6058
|
const USER_OWNED_ARTIFACTS = ['USER-PROFILE.md'];
|
|
6051
6059
|
|
|
@@ -7178,8 +7186,8 @@ function uninstall(isGlobal, runtime = 'claude') {
|
|
|
7178
7186
|
}
|
|
7179
7187
|
}
|
|
7180
7188
|
|
|
7181
|
-
// 2. Remove
|
|
7182
|
-
const gsdDir = path.join(targetDir, '
|
|
7189
|
+
// 2. Remove gsd-core directory
|
|
7190
|
+
const gsdDir = path.join(targetDir, 'gsd-core');
|
|
7183
7191
|
if (fs.existsSync(gsdDir)) {
|
|
7184
7192
|
// Preserve user-generated files before wipe (#1423)
|
|
7185
7193
|
const userProfilePath = path.join(gsdDir, 'USER-PROFILE.md');
|
|
@@ -7187,14 +7195,14 @@ function uninstall(isGlobal, runtime = 'claude') {
|
|
|
7187
7195
|
|
|
7188
7196
|
fs.rmSync(gsdDir, { recursive: true });
|
|
7189
7197
|
removedCount++;
|
|
7190
|
-
console.log(` ${green}✓${reset} Removed
|
|
7198
|
+
console.log(` ${green}✓${reset} Removed gsd-core/`);
|
|
7191
7199
|
|
|
7192
7200
|
// Restore user-generated files
|
|
7193
7201
|
if (preservedProfile) {
|
|
7194
7202
|
try {
|
|
7195
7203
|
fs.mkdirSync(gsdDir, { recursive: true });
|
|
7196
7204
|
fs.writeFileSync(userProfilePath, preservedProfile);
|
|
7197
|
-
console.log(` ${green}✓${reset} Preserved
|
|
7205
|
+
console.log(` ${green}✓${reset} Preserved gsd-core/USER-PROFILE.md`);
|
|
7198
7206
|
} catch (err) {
|
|
7199
7207
|
console.error(` ${red}✗${reset} Failed to restore USER-PROFILE.md: ${err.message}`);
|
|
7200
7208
|
}
|
|
@@ -7351,7 +7359,7 @@ function uninstall(isGlobal, runtime = 'claude') {
|
|
|
7351
7359
|
if (config.permission[permType]) {
|
|
7352
7360
|
const keys = Object.keys(config.permission[permType]);
|
|
7353
7361
|
for (const key of keys) {
|
|
7354
|
-
if (key.includes('
|
|
7362
|
+
if (key.includes('gsd-core')) {
|
|
7355
7363
|
delete config.permission[permType][key];
|
|
7356
7364
|
modified = true;
|
|
7357
7365
|
}
|
|
@@ -7392,7 +7400,7 @@ function uninstall(isGlobal, runtime = 'claude') {
|
|
|
7392
7400
|
if (config.permission[permType]) {
|
|
7393
7401
|
const keys = Object.keys(config.permission[permType]);
|
|
7394
7402
|
for (const key of keys) {
|
|
7395
|
-
if (key.includes('
|
|
7403
|
+
if (key.includes('gsd-core')) {
|
|
7396
7404
|
delete config.permission[permType][key];
|
|
7397
7405
|
modified = true;
|
|
7398
7406
|
}
|
|
@@ -7501,7 +7509,7 @@ function parseJsonc(content) {
|
|
|
7501
7509
|
|
|
7502
7510
|
/**
|
|
7503
7511
|
* Configure OpenCode permissions to allow reading GSD reference docs
|
|
7504
|
-
* This prevents permission prompts when GSD accesses the
|
|
7512
|
+
* This prevents permission prompts when GSD accesses the gsd-core directory
|
|
7505
7513
|
* @param {boolean} isGlobal - Whether this is a global or local install
|
|
7506
7514
|
* @param {string|null} configDir - Resolved config directory when already known
|
|
7507
7515
|
*/
|
|
@@ -7547,8 +7555,8 @@ function configureOpencodePermissions(isGlobal = true, configDir = null) {
|
|
|
7547
7555
|
// Use ~ shorthand if it's in the default location, otherwise use full path
|
|
7548
7556
|
const defaultConfigDir = path.join(os.homedir(), '.config', 'opencode');
|
|
7549
7557
|
const gsdPath = opencodeConfigDir === defaultConfigDir
|
|
7550
|
-
? '~/.config/opencode/
|
|
7551
|
-
: `${opencodeConfigDir.replace(/\\/g, '/')}/
|
|
7558
|
+
? '~/.config/opencode/gsd-core/*'
|
|
7559
|
+
: `${opencodeConfigDir.replace(/\\/g, '/')}/gsd-core/*`;
|
|
7552
7560
|
|
|
7553
7561
|
let modified = false;
|
|
7554
7562
|
|
|
@@ -7581,7 +7589,7 @@ function configureOpencodePermissions(isGlobal = true, configDir = null) {
|
|
|
7581
7589
|
|
|
7582
7590
|
/**
|
|
7583
7591
|
* Configure Kilo permissions to allow reading GSD reference docs
|
|
7584
|
-
* This prevents permission prompts when GSD accesses the
|
|
7592
|
+
* This prevents permission prompts when GSD accesses the gsd-core directory
|
|
7585
7593
|
* @param {boolean} isGlobal - Whether this is a global or local install
|
|
7586
7594
|
* @param {string|null} configDir - Resolved config directory when already known
|
|
7587
7595
|
*/
|
|
@@ -7621,8 +7629,8 @@ function configureKiloPermissions(isGlobal = true, configDir = null) {
|
|
|
7621
7629
|
// Use ~ shorthand if it's in the default location, otherwise use full path
|
|
7622
7630
|
const defaultConfigDir = path.join(os.homedir(), '.config', 'kilo');
|
|
7623
7631
|
const gsdPath = kiloConfigDir === defaultConfigDir
|
|
7624
|
-
? '~/.config/kilo/
|
|
7625
|
-
: `${kiloConfigDir.replace(/\\/g, '/')}/
|
|
7632
|
+
? '~/.config/kilo/gsd-core/*'
|
|
7633
|
+
: `${kiloConfigDir.replace(/\\/g, '/')}/gsd-core/*`;
|
|
7626
7634
|
|
|
7627
7635
|
let modified = false;
|
|
7628
7636
|
|
|
@@ -7793,7 +7801,7 @@ function writeManifest(configDir, runtime = 'claude', options = {}) {
|
|
|
7793
7801
|
const isTrae = runtime === 'trae';
|
|
7794
7802
|
const isCline = runtime === 'cline';
|
|
7795
7803
|
const isHermes = runtime === 'hermes';
|
|
7796
|
-
const gsdDir = path.join(configDir, '
|
|
7804
|
+
const gsdDir = path.join(configDir, 'gsd-core');
|
|
7797
7805
|
const commandsDir = path.join(configDir, 'commands', 'gsd');
|
|
7798
7806
|
const opencodeCommandDir = path.join(configDir, 'command');
|
|
7799
7807
|
// Hermes nests GSD skills under skills/gsd/ as a single category (#2841).
|
|
@@ -7818,7 +7826,7 @@ function writeManifest(configDir, runtime = 'claude', options = {}) {
|
|
|
7818
7826
|
// as a "local patch" (bug #2771). Single source of truth:
|
|
7819
7827
|
// USER_OWNED_ARTIFACTS at top of file.
|
|
7820
7828
|
if (USER_OWNED_ARTIFACTS.includes(rel)) continue;
|
|
7821
|
-
manifest.files['
|
|
7829
|
+
manifest.files['gsd-core/' + rel] = hash;
|
|
7822
7830
|
}
|
|
7823
7831
|
// Record commands/gsd/ for any runtime that emits it (Gemini globally,
|
|
7824
7832
|
// Claude Code locally — see #2923). Manifest must reflect everything on
|
|
@@ -7923,7 +7931,7 @@ function writeManifest(configDir, runtime = 'claude', options = {}) {
|
|
|
7923
7931
|
function populatePristineDir({ packageSrc, pristineDir, modified, runtime, pathPrefix, isGlobal }) {
|
|
7924
7932
|
if (!modified || modified.length === 0) return 0;
|
|
7925
7933
|
// Modified paths come from manifest.files which can live under several
|
|
7926
|
-
// install roots:
|
|
7934
|
+
// install roots: gsd-core/, commands/gsd/, command/, skills/, agents/,
|
|
7927
7935
|
// hooks/, plus runtime-specific root files (#3004 CR). Stage every
|
|
7928
7936
|
// top-level dir that actually contains a modified path; root-level files
|
|
7929
7937
|
// are copied directly without the transform pipeline (they don't need
|
|
@@ -8005,7 +8013,7 @@ function saveLocalPatches(configDir, pristineCtx) {
|
|
|
8005
8013
|
// that were incorrectly recorded so refreshes don't surface false patches warnings.
|
|
8006
8014
|
if (manifest.files) {
|
|
8007
8015
|
for (const artifact of USER_OWNED_ARTIFACTS) {
|
|
8008
|
-
delete manifest.files[`
|
|
8016
|
+
delete manifest.files[`gsd-core/${artifact}`];
|
|
8009
8017
|
}
|
|
8010
8018
|
}
|
|
8011
8019
|
|
|
@@ -8279,7 +8287,7 @@ function install(isGlobal, runtime = 'claude', options = {}) {
|
|
|
8279
8287
|
: targetDir.replace(process.cwd(), '.');
|
|
8280
8288
|
|
|
8281
8289
|
// Path prefix for file references in markdown content (e.g. gsd-tools.cjs).
|
|
8282
|
-
// Replaces $HOME/.claude/ or ~/.claude/ so the result is <pathPrefix>
|
|
8290
|
+
// Replaces $HOME/.claude/ or ~/.claude/ so the result is <pathPrefix>gsd-core/bin/...
|
|
8283
8291
|
// For global installs: use $HOME/ so paths expand correctly inside double-quoted
|
|
8284
8292
|
// shell commands (~ does NOT expand inside double quotes, causing MODULE_NOT_FOUND).
|
|
8285
8293
|
// For local installs: use resolved absolute path (may be outside $HOME).
|
|
@@ -8406,7 +8414,7 @@ function install(isGlobal, runtime = 'claude', options = {}) {
|
|
|
8406
8414
|
// codexPreInstallAgentFiles — Set of gsd-*.{md,toml} filenames in agents/
|
|
8407
8415
|
// codexPreInstallAgentContents — Map<filename, Buffer> of pre-existing agent
|
|
8408
8416
|
// file bytes, enabling full content restore (not just deletion) on rollback.
|
|
8409
|
-
// codexPreInstallVersionBytes — Buffer (or null) of
|
|
8417
|
+
// codexPreInstallVersionBytes — Buffer (or null) of gsd-core/VERSION
|
|
8410
8418
|
//
|
|
8411
8419
|
// These are referenced by restoreCodexSnapshot(), defined below inside the
|
|
8412
8420
|
// config block. Defining the variables here (outer scope) makes them
|
|
@@ -8458,7 +8466,7 @@ function install(isGlobal, runtime = 'claude', options = {}) {
|
|
|
8458
8466
|
}
|
|
8459
8467
|
}
|
|
8460
8468
|
}
|
|
8461
|
-
const _preVersionPath = path.join(targetDir, '
|
|
8469
|
+
const _preVersionPath = path.join(targetDir, 'gsd-core', 'VERSION');
|
|
8462
8470
|
if (fs.existsSync(_preVersionPath)) {
|
|
8463
8471
|
try { codexPreInstallVersionBytes = fs.readFileSync(_preVersionPath); } catch (_) { /* best-effort */ }
|
|
8464
8472
|
}
|
|
@@ -8470,7 +8478,7 @@ function install(isGlobal, runtime = 'claude', options = {}) {
|
|
|
8470
8478
|
// must also trigger rollback so the caller is never left in a partially-installed state.
|
|
8471
8479
|
//
|
|
8472
8480
|
// _codexPreConfigRollback covers the four surfaces that can be mutated before
|
|
8473
|
-
// config.toml is touched: skills/, agents/,
|
|
8481
|
+
// config.toml is touched: skills/, agents/, gsd-core/VERSION, and orphaned
|
|
8474
8482
|
// atomic-write temp files. It is safe to call before any writes have happened.
|
|
8475
8483
|
// The full restoreCodexSnapshot() (defined inside the config block) additionally
|
|
8476
8484
|
// handles config.toml, which is not yet touched at this point in the pipeline.
|
|
@@ -8527,8 +8535,8 @@ function install(isGlobal, runtime = 'claude', options = {}) {
|
|
|
8527
8535
|
}
|
|
8528
8536
|
} catch (_) { /* best-effort */ }
|
|
8529
8537
|
}
|
|
8530
|
-
//
|
|
8531
|
-
const _earlyVersionPath = path.join(targetDir, '
|
|
8538
|
+
// gsd-core/VERSION
|
|
8539
|
+
const _earlyVersionPath = path.join(targetDir, 'gsd-core', 'VERSION');
|
|
8532
8540
|
if (codexPreInstallVersionBytes !== null) {
|
|
8533
8541
|
try { fs.writeFileSync(_earlyVersionPath, codexPreInstallVersionBytes); } catch (_) { /* best-effort */ }
|
|
8534
8542
|
} else if (fs.existsSync(_earlyVersionPath)) {
|
|
@@ -8783,24 +8791,24 @@ function install(isGlobal, runtime = 'claude', options = {}) {
|
|
|
8783
8791
|
}
|
|
8784
8792
|
}
|
|
8785
8793
|
|
|
8786
|
-
// Copy
|
|
8794
|
+
// Copy gsd-core skill with path replacement
|
|
8787
8795
|
// Preserve user-generated files before the wipe-and-copy so they survive re-install
|
|
8788
|
-
const skillSrc = path.join(src, '
|
|
8789
|
-
const skillDest = path.join(targetDir, '
|
|
8796
|
+
const skillSrc = path.join(src, 'gsd-core');
|
|
8797
|
+
const skillDest = path.join(targetDir, 'gsd-core');
|
|
8790
8798
|
const savedGsdArtifacts = preserveUserArtifacts(skillDest, USER_OWNED_ARTIFACTS);
|
|
8791
8799
|
copyWithPathReplacement(skillSrc, skillDest, pathPrefix, runtime, false, isGlobal);
|
|
8792
8800
|
restoreUserArtifacts(skillDest, savedGsdArtifacts);
|
|
8793
|
-
if (verifyInstalled(skillDest, '
|
|
8801
|
+
if (verifyInstalled(skillDest, 'gsd-core')) {
|
|
8794
8802
|
console.log(` ${green}✓${reset} Installed workflow assets`);
|
|
8795
8803
|
} else {
|
|
8796
|
-
failures.push('
|
|
8804
|
+
failures.push('gsd-core');
|
|
8797
8805
|
}
|
|
8798
8806
|
|
|
8799
|
-
// Copy shared manifests into the
|
|
8807
|
+
// Copy shared manifests into the gsd-core payload
|
|
8800
8808
|
// at the co-located path that CJS modules resolve first:
|
|
8801
|
-
//
|
|
8809
|
+
// gsd-core/bin/shared/*.json
|
|
8802
8810
|
//
|
|
8803
|
-
// This source now lives under
|
|
8811
|
+
// This source now lives under gsd-core/bin/shared in-repo.
|
|
8804
8812
|
const sharedPayloadFiles = [
|
|
8805
8813
|
'model-catalog.json',
|
|
8806
8814
|
'config-defaults.manifest.json',
|
|
@@ -8808,9 +8816,9 @@ function install(isGlobal, runtime = 'claude', options = {}) {
|
|
|
8808
8816
|
'runtime-aliases.manifest.json',
|
|
8809
8817
|
];
|
|
8810
8818
|
for (const fileName of sharedPayloadFiles) {
|
|
8811
|
-
const sharedSrc = path.join(src, '
|
|
8819
|
+
const sharedSrc = path.join(src, 'gsd-core', 'bin', 'shared', fileName);
|
|
8812
8820
|
const sharedDest = path.join(skillDest, 'bin', 'shared', fileName);
|
|
8813
|
-
const displayPath = `
|
|
8821
|
+
const displayPath = `gsd-core/bin/shared/${fileName}`;
|
|
8814
8822
|
if (fs.existsSync(sharedSrc)) {
|
|
8815
8823
|
fs.mkdirSync(path.dirname(sharedDest), { recursive: true });
|
|
8816
8824
|
fs.copyFileSync(sharedSrc, sharedDest);
|
|
@@ -8820,7 +8828,7 @@ function install(isGlobal, runtime = 'claude', options = {}) {
|
|
|
8820
8828
|
failures.push(displayPath);
|
|
8821
8829
|
}
|
|
8822
8830
|
} else {
|
|
8823
|
-
failures.push(`
|
|
8831
|
+
failures.push(`gsd-core/bin/shared/${fileName} (source missing)`);
|
|
8824
8832
|
}
|
|
8825
8833
|
}
|
|
8826
8834
|
|
|
@@ -8972,7 +8980,7 @@ function install(isGlobal, runtime = 'claude', options = {}) {
|
|
|
8972
8980
|
|
|
8973
8981
|
// Copy CHANGELOG.md
|
|
8974
8982
|
const changelogSrc = path.join(src, 'CHANGELOG.md');
|
|
8975
|
-
const changelogDest = path.join(targetDir, '
|
|
8983
|
+
const changelogDest = path.join(targetDir, 'gsd-core', 'CHANGELOG.md');
|
|
8976
8984
|
if (fs.existsSync(changelogSrc)) {
|
|
8977
8985
|
fs.copyFileSync(changelogSrc, changelogDest);
|
|
8978
8986
|
if (verifyFileInstalled(changelogDest, 'CHANGELOG.md')) {
|
|
@@ -8983,7 +8991,7 @@ function install(isGlobal, runtime = 'claude', options = {}) {
|
|
|
8983
8991
|
}
|
|
8984
8992
|
|
|
8985
8993
|
// Write VERSION file
|
|
8986
|
-
const versionDest = path.join(targetDir, '
|
|
8994
|
+
const versionDest = path.join(targetDir, 'gsd-core', 'VERSION');
|
|
8987
8995
|
fs.writeFileSync(versionDest, pkg.version);
|
|
8988
8996
|
if (verifyFileInstalled(versionDest, 'VERSION')) {
|
|
8989
8997
|
console.log(` ${green}✓${reset} Wrote VERSION (${pkg.version})`);
|
|
@@ -9092,10 +9100,17 @@ function install(isGlobal, runtime = 'claude', options = {}) {
|
|
|
9092
9100
|
console.log(` ${green}✓${reset} Installed hooks/lib/ helpers (git-cmd, graphify-rebuild, ...)`);
|
|
9093
9101
|
}
|
|
9094
9102
|
|
|
9095
|
-
//
|
|
9096
|
-
//
|
|
9097
|
-
|
|
9098
|
-
|
|
9103
|
+
// Remove legacy get-shit-done-cc artifacts and stale update caches (#607).
|
|
9104
|
+
// cleanupLegacyGsdCc handles both the legacy shared cache and the per-package
|
|
9105
|
+
// cache (formerly an inline unlinkSync here). A cleanup failure must never
|
|
9106
|
+
// abort a successful install — log a warning and continue.
|
|
9107
|
+
// install() is never reached in --dry-run mode (the early-exit at the CLI
|
|
9108
|
+
// dispatch handles preview), so cleanup here always applies for real.
|
|
9109
|
+
try {
|
|
9110
|
+
cleanupLegacyGsdCc({ dryRun: false });
|
|
9111
|
+
} catch (cleanupErr) {
|
|
9112
|
+
console.warn(` ${yellow}Warning: legacy cleanup failed: ${cleanupErr.message}${reset}`);
|
|
9113
|
+
}
|
|
9099
9114
|
|
|
9100
9115
|
if (failures.length > 0) {
|
|
9101
9116
|
console.error(`\n ${yellow}Installation incomplete!${reset} Failed: ${failures.join(', ')}`);
|
|
@@ -9210,7 +9225,7 @@ function install(isGlobal, runtime = 'claude', options = {}) {
|
|
|
9210
9225
|
// newly-created dirs (i.e. those not in the pre-install Set)
|
|
9211
9226
|
// agents/gsd-* — restore pre-existing files from content snapshot; remove
|
|
9212
9227
|
// newly-created files
|
|
9213
|
-
//
|
|
9228
|
+
// gsd-core/VERSION — restore or remove
|
|
9214
9229
|
// *.tmp-* — best-effort cleanup of installer-owned atomic-write temps
|
|
9215
9230
|
//
|
|
9216
9231
|
// Safe to call multiple times (idempotent): each remove/write is guarded by
|
|
@@ -9309,8 +9324,8 @@ function install(isGlobal, runtime = 'claude', options = {}) {
|
|
|
9309
9324
|
} catch (_) { /* best-effort */ }
|
|
9310
9325
|
}
|
|
9311
9326
|
|
|
9312
|
-
// 4.
|
|
9313
|
-
const _rollbackVersionPath = path.join(targetDir, '
|
|
9327
|
+
// 4. gsd-core/VERSION
|
|
9328
|
+
const _rollbackVersionPath = path.join(targetDir, 'gsd-core', 'VERSION');
|
|
9314
9329
|
if (codexPreInstallVersionBytes !== null) {
|
|
9315
9330
|
try { fs.writeFileSync(_rollbackVersionPath, codexPreInstallVersionBytes); }
|
|
9316
9331
|
catch (_) { /* best-effort */ }
|
|
@@ -9529,7 +9544,7 @@ function install(isGlobal, runtime = 'claude', options = {}) {
|
|
|
9529
9544
|
|
|
9530
9545
|
if (isCopilot) {
|
|
9531
9546
|
// Generate copilot-instructions.md
|
|
9532
|
-
const templatePath = path.join(targetDir, '
|
|
9547
|
+
const templatePath = path.join(targetDir, 'gsd-core', 'templates', 'copilot-instructions.md');
|
|
9533
9548
|
const instructionsPath = path.join(targetDir, 'copilot-instructions.md');
|
|
9534
9549
|
if (fs.existsSync(templatePath)) {
|
|
9535
9550
|
const template = fs.readFileSync(templatePath, 'utf8');
|
|
@@ -9565,10 +9580,10 @@ function install(isGlobal, runtime = 'claude', options = {}) {
|
|
|
9565
9580
|
const clinerules = [
|
|
9566
9581
|
'# GSD Core — Git. Ship. Done.',
|
|
9567
9582
|
'',
|
|
9568
|
-
'- GSD workflows live in `
|
|
9583
|
+
'- GSD workflows live in `gsd-core/workflows/`. Load the relevant workflow when',
|
|
9569
9584
|
' the user runs a `/gsd-*` command.',
|
|
9570
9585
|
'- GSD agents live in `agents/`. Use the matching agent when spawning subagents.',
|
|
9571
|
-
'- GSD tools are at `
|
|
9586
|
+
'- GSD tools are at `gsd-core/bin/gsd-tools.cjs`. Run with `node`.',
|
|
9572
9587
|
'- Planning artifacts live in `.planning/`. Never edit them outside a GSD workflow.',
|
|
9573
9588
|
'- Do not apply GSD workflows unless the user explicitly asks for them.',
|
|
9574
9589
|
'- When a GSD command triggers a deliverable (feature, fix, docs), offer the next',
|
|
@@ -10697,6 +10712,86 @@ function maybeSuggestPathExport(globalBin, homeDir) {
|
|
|
10697
10712
|
console.log('');
|
|
10698
10713
|
}
|
|
10699
10714
|
|
|
10715
|
+
// Runtime subdir names to scan for legacy get-shit-done-cc artifacts (#607).
|
|
10716
|
+
// Covers both local (project-relative) and common global forms.
|
|
10717
|
+
const _LEGACY_SCAN_SUBDIR_NAMES = [
|
|
10718
|
+
'.claude',
|
|
10719
|
+
'.gemini',
|
|
10720
|
+
'.opencode',
|
|
10721
|
+
'.config/opencode',
|
|
10722
|
+
'.kilo',
|
|
10723
|
+
'.config/kilo',
|
|
10724
|
+
'.codex',
|
|
10725
|
+
'.copilot',
|
|
10726
|
+
'.github', // copilot local form
|
|
10727
|
+
'.agent', // antigravity local form
|
|
10728
|
+
'.cursor',
|
|
10729
|
+
'.windsurf',
|
|
10730
|
+
'.codeium/windsurf',
|
|
10731
|
+
'.augment',
|
|
10732
|
+
'.trae',
|
|
10733
|
+
'.qwen',
|
|
10734
|
+
'.hermes',
|
|
10735
|
+
'.codebuddy',
|
|
10736
|
+
'.cline',
|
|
10737
|
+
];
|
|
10738
|
+
|
|
10739
|
+
/**
|
|
10740
|
+
* Detect and remove leftover get-shit-done-cc artifacts across ALL known
|
|
10741
|
+
* runtime config directories (issue #607).
|
|
10742
|
+
*
|
|
10743
|
+
* Exported so tests can call it directly without spawning a subprocess.
|
|
10744
|
+
*
|
|
10745
|
+
* Scans ONLY subdirs under homeDir — never cwd — to avoid touching the
|
|
10746
|
+
* user's active-project hooks when the installer is run from a project dir.
|
|
10747
|
+
*
|
|
10748
|
+
* @param {object} [opts]
|
|
10749
|
+
* @param {string} [opts.homeDir=os.homedir()] - home directory to scan
|
|
10750
|
+
* @param {boolean} [opts.dryRun=false] - preview only; no mutations
|
|
10751
|
+
* @param {object} [opts.logger=console] - injectable logger
|
|
10752
|
+
* @returns {{ plan: {path:string,reason:string}[], result: object }}
|
|
10753
|
+
*/
|
|
10754
|
+
function cleanupLegacyGsdCc({ homeDir = os.homedir(), dryRun = false, logger = console } = {}) {
|
|
10755
|
+
// Build de-duplicated list of candidate config dirs to scan.
|
|
10756
|
+
// Only scan under homeDir — never cwd — to prevent accidental deletion of
|
|
10757
|
+
// the user's active-project hooks when the installer is invoked from a
|
|
10758
|
+
// project directory that has .claude/hooks or similar subdirs.
|
|
10759
|
+
const seen = new Set();
|
|
10760
|
+
const configDirs = [];
|
|
10761
|
+
for (const name of _LEGACY_SCAN_SUBDIR_NAMES) {
|
|
10762
|
+
const candidate = path.join(homeDir, name);
|
|
10763
|
+
if (!seen.has(candidate) && fs.existsSync(candidate)) {
|
|
10764
|
+
seen.add(candidate);
|
|
10765
|
+
configDirs.push(candidate);
|
|
10766
|
+
}
|
|
10767
|
+
}
|
|
10768
|
+
|
|
10769
|
+
// planLegacyCleanup scans each configDir and already includes the legacy
|
|
10770
|
+
// shared cache (gsd-update-check.json) as a plan entry.
|
|
10771
|
+
const plan = planLegacyCleanup(configDirs, { homeDir });
|
|
10772
|
+
|
|
10773
|
+
// Apply the plan (dryRun honors the flag).
|
|
10774
|
+
const result = applyLegacyCleanup(plan, { dryRun, logger });
|
|
10775
|
+
|
|
10776
|
+
// Also clear / preview the per-package cache so next session re-evaluates
|
|
10777
|
+
// hook versions (replaces the former inline unlinkSync on line ~9104).
|
|
10778
|
+
const perPkgCacheFile = path.join(homeDir, '.cache', 'gsd', updateCacheFileName);
|
|
10779
|
+
if (dryRun) {
|
|
10780
|
+
logger.log('[dry-run] would remove: ' + perPkgCacheFile + ' (per-package-update-cache)');
|
|
10781
|
+
} else {
|
|
10782
|
+
try { fs.unlinkSync(perPkgCacheFile); } catch (_e) { /* cache may not exist yet */ }
|
|
10783
|
+
}
|
|
10784
|
+
|
|
10785
|
+
// Concise summary
|
|
10786
|
+
if (plan.length > 0 || !dryRun) {
|
|
10787
|
+
const verb = dryRun ? 'Would remove' : 'Removed';
|
|
10788
|
+
const count = dryRun ? plan.length : result.removed.length;
|
|
10789
|
+
logger.log(`[legacy-cleanup] ${verb} ${count} legacy artifact(s).`);
|
|
10790
|
+
}
|
|
10791
|
+
|
|
10792
|
+
return { plan, result };
|
|
10793
|
+
}
|
|
10794
|
+
|
|
10700
10795
|
/**
|
|
10701
10796
|
* Install GSD for all selected runtimes
|
|
10702
10797
|
*/
|
|
@@ -10920,11 +11015,26 @@ module.exports = {
|
|
|
10920
11015
|
installRuntimeArtifacts,
|
|
10921
11016
|
uninstallRuntimeArtifacts,
|
|
10922
11017
|
parseConfigDirFromArgs,
|
|
11018
|
+
cleanupLegacyGsdCc,
|
|
10923
11019
|
};
|
|
10924
11020
|
|
|
10925
11021
|
// Main logic — only run when not loaded as a module for testing
|
|
10926
11022
|
if (require.main === module && !process.env.GSD_TEST_MODE) {
|
|
10927
|
-
if (
|
|
11023
|
+
if (hasDryRun) {
|
|
11024
|
+
// --dry-run: preview legacy cleanup and exit without installing.
|
|
11025
|
+
if (hasUninstall) {
|
|
11026
|
+
console.log('Note: --dry-run previews legacy get-shit-done-cc cleanup only; it does not preview --uninstall.');
|
|
11027
|
+
}
|
|
11028
|
+
console.log('Dry run — no files will be modified.\n');
|
|
11029
|
+
// cleanupLegacyGsdCc with dryRun:true is the single source of truth for
|
|
11030
|
+
// both the legacy artifacts and the per-package cache path — no duplicate
|
|
11031
|
+
// printing here.
|
|
11032
|
+
const { plan } = cleanupLegacyGsdCc({ dryRun: true });
|
|
11033
|
+
if (plan.length === 0) {
|
|
11034
|
+
console.log(' (no legacy get-shit-done-cc artifacts found)');
|
|
11035
|
+
}
|
|
11036
|
+
process.exit(0);
|
|
11037
|
+
} else if (hasSkillsRoot) {
|
|
10928
11038
|
// Print the skills root directory for a given runtime (used by /gsd-sync-skills).
|
|
10929
11039
|
// Usage: node install.js --skills-root <runtime>
|
|
10930
11040
|
const runtimeArg = args[args.indexOf('--skills-root') + 1];
|
|
@@ -22,9 +22,9 @@ Flow: Select Framework → Research Docs → Research Domain → Design Eval Str
|
|
|
22
22
|
</objective>
|
|
23
23
|
|
|
24
24
|
<execution_context>
|
|
25
|
-
@~/.claude/
|
|
26
|
-
@~/.claude/
|
|
27
|
-
@~/.claude/
|
|
25
|
+
@~/.claude/gsd-core/workflows/ai-integration-phase.md
|
|
26
|
+
@~/.claude/gsd-core/references/ai-frameworks.md
|
|
27
|
+
@~/.claude/gsd-core/references/ai-evals.md
|
|
28
28
|
</execution_context>
|
|
29
29
|
|
|
30
30
|
<context>
|
|
@@ -18,7 +18,7 @@ Verify milestone achieved its definition of done. Check requirements coverage, c
|
|
|
18
18
|
</objective>
|
|
19
19
|
|
|
20
20
|
<execution_context>
|
|
21
|
-
@~/.claude/
|
|
21
|
+
@~/.claude/gsd-core/workflows/audit-milestone.md
|
|
22
22
|
</execution_context>
|
|
23
23
|
|
|
24
24
|
<context>
|