@opengsd/gsd-core 1.10.0 → 1.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/agents/gsd-debug-session-manager.md +11 -0
- package/agents/gsd-doc-synthesizer.md +2 -4
- package/agents/gsd-executor.md +5 -5
- package/agents/gsd-mempalace-curator.md +5 -2
- package/agents/gsd-phase-researcher.md +20 -1
- package/agents/gsd-plan-checker.md +37 -0
- package/agents/gsd-planner.md +44 -46
- package/agents/gsd-user-profiler.md +3 -0
- package/agents/gsd-verifier.md +12 -3
- package/bin/install.js +841 -971
- package/bin/lib/ui-safety-gate.cjs +2 -0
- package/commands/gsd/code-review.md +1 -1
- package/commands/gsd/execute-phase.md +1 -1
- package/commands/gsd/map-codebase.md +1 -1
- package/commands/gsd/mempalace-capture.md +1 -1
- package/commands/gsd/mempalace-recall.md +1 -1
- package/commands/gsd/new-milestone.md +1 -1
- package/commands/gsd/quick.md +1 -1
- package/commands/gsd/review-backlog.md +2 -1
- package/commands/gsd/verify-work.md +1 -1
- package/gsd-core/bin/gsd-tools.cjs +469 -88
- package/gsd-core/bin/lib/active-workstream-store.cjs +138 -22
- package/gsd-core/bin/lib/agent-install-check.cjs +230 -32
- package/gsd-core/bin/lib/api-coverage.cjs +3 -5
- package/gsd-core/bin/lib/artifacts.cjs +3 -0
- package/gsd-core/bin/lib/assumption-delta.cjs +2 -4
- package/gsd-core/bin/lib/audit-command-router.cjs +9 -2
- package/gsd-core/bin/lib/audit.cjs +876 -240
- package/gsd-core/bin/lib/broken-windows.cjs +1 -1
- package/gsd-core/bin/lib/capability-consent.cjs +149 -15
- package/gsd-core/bin/lib/capability-lifecycle.cjs +45 -0
- package/gsd-core/bin/lib/capability-registry.cjs +575 -101
- package/gsd-core/bin/lib/capability-source.cjs +92 -0
- package/gsd-core/bin/lib/capability-trust.cjs +444 -25
- package/gsd-core/bin/lib/capability-validator.cjs +495 -22
- package/gsd-core/bin/lib/capability-writer.cjs +3 -2
- package/gsd-core/bin/lib/check-command-router.cjs +71 -37
- package/gsd-core/bin/lib/claude-orchestration.cjs +56 -3
- package/gsd-core/bin/lib/codex-agent-toml.cjs +329 -0
- package/gsd-core/bin/lib/command-aliases.cjs +22 -0
- package/gsd-core/bin/lib/command-roster.cjs +44 -1
- package/gsd-core/bin/lib/commands.cjs +651 -86
- package/gsd-core/bin/lib/commonjs-marker.cjs +12 -6
- package/gsd-core/bin/lib/complexity-trigger.cjs +1172 -0
- package/gsd-core/bin/lib/config-loader.cjs +75 -0
- package/gsd-core/bin/lib/config.cjs +10 -1
- package/gsd-core/bin/lib/core-utils.cjs +127 -29
- package/gsd-core/bin/lib/decisions.cjs +23 -0
- package/gsd-core/bin/lib/fallow-runner.cjs +20 -44
- package/gsd-core/bin/lib/frontmatter.cjs +155 -20
- package/gsd-core/bin/lib/gap-checker.cjs +68 -7
- package/gsd-core/bin/lib/git-base-branch.cjs +102 -0
- package/gsd-core/bin/lib/gsd2-import.cjs +10 -1
- package/gsd-core/bin/lib/health-diagnostic-rules/agent-install.cjs +101 -0
- package/gsd-core/bin/lib/health-diagnostic-rules/config-validation.cjs +348 -0
- package/gsd-core/bin/lib/health-diagnostic-rules/consistency.cjs +145 -0
- package/gsd-core/bin/lib/health-diagnostic-rules/install-surface-shadowing.cjs +98 -0
- package/gsd-core/bin/lib/health-diagnostic-rules/milestone-archive-hygiene.cjs +100 -0
- package/gsd-core/bin/lib/health-diagnostic-rules/phase-structure.cjs +222 -0
- package/gsd-core/bin/lib/health-diagnostic-rules/roadmap-disk-consistency.cjs +265 -0
- package/gsd-core/bin/lib/health-diagnostic-rules/root-existence.cjs +161 -0
- package/gsd-core/bin/lib/health-diagnostic-rules/state-consistency.cjs +303 -0
- package/gsd-core/bin/lib/health-diagnostic-rules/worktree-health.cjs +173 -0
- package/gsd-core/bin/lib/health-diagnostic-types.cjs +68 -0
- package/gsd-core/bin/lib/health-diagnostic.cjs +431 -0
- package/gsd-core/bin/lib/host-runtime-detection.cjs +134 -0
- package/gsd-core/bin/lib/init.cjs +321 -129
- package/gsd-core/bin/lib/install-effort-resolver.cjs +73 -30
- package/gsd-core/bin/lib/install-engine.cjs +745 -258
- package/gsd-core/bin/lib/install-fs-adapter.cjs +262 -0
- package/gsd-core/bin/lib/install-model-override-resolver.cjs +203 -0
- package/gsd-core/bin/lib/install-profiles.cjs +134 -57
- package/gsd-core/bin/lib/install-scope.cjs +270 -0
- package/gsd-core/bin/lib/install-shadow-report.cjs +385 -0
- package/gsd-core/bin/lib/installed-surface-resolver.cjs +381 -0
- package/gsd-core/bin/lib/installer-migrations.cjs +138 -31
- package/gsd-core/bin/lib/io.cjs +10 -0
- package/gsd-core/bin/lib/markdown-sectionizer.cjs +2 -1
- package/gsd-core/bin/lib/markdown-table.cjs +133 -20
- package/gsd-core/bin/lib/milestone-lock.cjs +248 -0
- package/gsd-core/bin/lib/milestone.cjs +754 -70
- package/gsd-core/bin/lib/model-catalog.cjs +59 -1
- package/gsd-core/bin/lib/model-resolver.cjs +183 -40
- package/gsd-core/bin/lib/normalize-test-command.cjs +1 -1
- package/gsd-core/bin/lib/pattern.cjs +122 -0
- package/gsd-core/bin/lib/phase-estimation.cjs +1 -1
- package/gsd-core/bin/lib/phase-id.cjs +444 -36
- package/gsd-core/bin/lib/phase-lifecycle.cjs +28 -3
- package/gsd-core/bin/lib/phase-locator.cjs +125 -18
- package/gsd-core/bin/lib/phase.cjs +646 -143
- package/gsd-core/bin/lib/plan-dependency-graph.cjs +72 -1
- package/gsd-core/bin/lib/plan-drift-guard.cjs +120 -0
- package/gsd-core/bin/lib/plan-scan.cjs +86 -2
- package/gsd-core/bin/lib/planning-scope.cjs +31 -0
- package/gsd-core/bin/lib/planning-snapshot.cjs +890 -0
- package/gsd-core/bin/lib/planning-workspace.cjs +56 -6
- package/gsd-core/bin/lib/probe-core.cjs +1 -1
- package/gsd-core/bin/lib/profile-output.cjs +1 -1
- package/gsd-core/bin/lib/refactor-trigger-command-router.cjs +740 -0
- package/gsd-core/bin/lib/retired-artifact-cleanup.cjs +11 -6
- package/gsd-core/bin/lib/review-lane-descriptor.cjs +13 -4
- package/gsd-core/bin/lib/review-lane-invocation.cjs +30 -0
- package/gsd-core/bin/lib/review-lane-runner.cjs +421 -66
- package/gsd-core/bin/lib/review-reviewer-selection.cjs +13 -18
- package/gsd-core/bin/lib/roadmap-command-router.cjs +34 -0
- package/gsd-core/bin/lib/roadmap-parser.cjs +943 -184
- package/gsd-core/bin/lib/roadmap-upgrade.cjs +37 -10
- package/gsd-core/bin/lib/roadmap.cjs +385 -94
- package/gsd-core/bin/lib/runtime-artifact-conversion.cjs +608 -46
- package/gsd-core/bin/lib/runtime-artifact-install-plan.cjs +14 -2
- package/gsd-core/bin/lib/runtime-artifact-layout.cjs +426 -55
- package/gsd-core/bin/lib/runtime-config-adapter-registry.cjs +3 -2
- package/gsd-core/bin/lib/runtime-homes.cjs +69 -3
- package/gsd-core/bin/lib/runtime-hooks-surface.cjs +115 -3
- package/gsd-core/bin/lib/runtime-name-policy.cjs +3 -1
- package/gsd-core/bin/lib/runtime-slash.cjs +27 -9
- package/gsd-core/bin/lib/security.cjs +104 -5
- package/gsd-core/bin/lib/shell-command-projection.cjs +275 -3
- package/gsd-core/bin/lib/smart-entry.cjs +142 -22
- package/gsd-core/bin/lib/state-command-router.cjs +5 -1
- package/gsd-core/bin/lib/state-document.cjs +152 -8
- package/gsd-core/bin/lib/state-transition.cjs +371 -117
- package/gsd-core/bin/lib/state.cjs +1794 -357
- package/gsd-core/bin/lib/surface.cjs +23 -9
- package/gsd-core/bin/lib/text-lines.cjs +80 -0
- package/gsd-core/bin/lib/token-scanner.cjs +76 -0
- package/gsd-core/bin/lib/uat-predicate.cjs +9 -3
- package/gsd-core/bin/lib/uat.cjs +399 -56
- package/gsd-core/bin/lib/ui-frontend-evidence.cjs +157 -0
- package/gsd-core/bin/lib/ui-safety-gate.cjs +14 -5
- package/gsd-core/bin/lib/unusable-input.cjs +24 -0
- package/gsd-core/bin/lib/update-context.cjs +8 -2
- package/gsd-core/bin/lib/user-artifact-staging.cjs +705 -0
- package/gsd-core/bin/lib/validate.cjs +20 -6
- package/gsd-core/bin/lib/vendor/README.md +37 -0
- package/gsd-core/bin/lib/vendor/re2js.cjs +6480 -0
- package/gsd-core/bin/lib/vendor/re2js.d.cts +938 -0
- package/gsd-core/bin/lib/verification-command-router.cjs +2 -1
- package/gsd-core/bin/lib/verification.cjs +258 -8
- package/gsd-core/bin/lib/verify.cjs +368 -888
- package/gsd-core/bin/lib/workstream-inventory-builder.cjs +53 -32
- package/gsd-core/bin/lib/workstream-inventory.cjs +63 -10
- package/gsd-core/bin/lib/workstream.cjs +2 -2
- package/gsd-core/bin/lib/worktree-safety.cjs +176 -9
- package/gsd-core/bin/shared/config-defaults.manifest.json +1 -0
- package/gsd-core/bin/shared/config-schema.manifest.json +7 -1
- package/gsd-core/references/agent-contracts.md +43 -26
- package/gsd-core/references/checkpoints.md +2 -2
- package/gsd-core/references/context-budget.md +1 -1
- package/gsd-core/references/dispatch-isolation-gate.md +138 -0
- package/gsd-core/references/doc-conflict-engine.md +1 -1
- package/gsd-core/references/execute-mvp-tdd.md +3 -3
- package/gsd-core/references/execute-phase-between-wave-reset.md +6 -2
- package/gsd-core/references/execute-phase-context-guard.md +1 -1
- package/gsd-core/references/execute-phase-response-language.md +1 -1
- package/gsd-core/references/execute-phase-wave-guard.md +6 -2
- package/gsd-core/references/gate-prompts.md +1 -1
- package/gsd-core/references/git-planning-commit.md +2 -1
- package/gsd-core/references/loop-hook-dispatch.md +39 -2
- package/gsd-core/references/model-profiles.md +12 -4
- package/gsd-core/references/mvp-concepts.md +9 -9
- package/gsd-core/references/planner-guidance.md +3 -9
- package/gsd-core/references/planner-preconditions.md +1 -1
- package/gsd-core/references/planner-reviews.md +1 -1
- package/gsd-core/references/planning-config.md +8 -6
- package/gsd-core/references/revision-loop.md +1 -1
- package/gsd-core/references/specless-probe-fallback.md +1 -1
- package/gsd-core/references/universal-anti-patterns.md +3 -3
- package/gsd-core/references/verifier-phase-gates.md +192 -0
- package/gsd-core/references/verify-mvp-mode.md +1 -1
- package/gsd-core/references/workstream-flag.md +22 -6
- package/gsd-core/templates/discussion-log.md +1 -1
- package/gsd-core/templates/phase-prompt.md +2 -4
- package/gsd-core/templates/state.md +4 -4
- package/gsd-core/templates/verification-report.md +9 -1
- package/gsd-core/workflows/ai-integration-phase.md +9 -11
- package/gsd-core/workflows/autonomous.md +1 -1
- package/gsd-core/workflows/cleanup.md +62 -3
- package/gsd-core/workflows/code-review/steps/structural-pre-pass.md +13 -3
- package/gsd-core/workflows/code-review-fix.md +37 -10
- package/gsd-core/workflows/code-review.md +38 -12
- package/gsd-core/workflows/complete-milestone.md +141 -18
- package/gsd-core/workflows/debug.md +7 -5
- package/gsd-core/workflows/diagnose-issues.md +35 -9
- package/gsd-core/workflows/discuss-phase/modes/chain.md +2 -1
- package/gsd-core/workflows/discuss-phase/modes/default.md +1 -1
- package/gsd-core/workflows/discuss-phase-assumptions.md +2 -1
- package/gsd-core/workflows/edit-phase.md +26 -1
- package/gsd-core/workflows/eval-review.md +3 -5
- package/gsd-core/workflows/execute-phase/steps/executor-isolation-dispatch.md +31 -6
- package/gsd-core/workflows/execute-phase/steps/per-plan-executor-routing.md +77 -0
- package/gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md +2 -0
- package/gsd-core/workflows/execute-phase.md +38 -50
- package/gsd-core/workflows/execute-plan.md +36 -4
- package/gsd-core/workflows/explore.md +131 -4
- package/gsd-core/workflows/fast.md +10 -2
- package/gsd-core/workflows/health.md +73 -4
- package/gsd-core/workflows/import.md +4 -4
- package/gsd-core/workflows/ingest-docs.md +5 -5
- package/gsd-core/workflows/mvp-phase.md +6 -3
- package/gsd-core/workflows/new-milestone.md +14 -9
- package/gsd-core/workflows/new-project.md +14 -14
- package/gsd-core/workflows/next.md +12 -0
- package/gsd-core/workflows/plan-phase.md +41 -17
- package/gsd-core/workflows/plan-review-convergence.md +50 -2
- package/gsd-core/workflows/progress.md +34 -6
- package/gsd-core/workflows/quick/steps/plan-checker-loop.md +4 -4
- package/gsd-core/workflows/quick/steps/quick-verification.md +27 -6
- package/gsd-core/workflows/quick/steps/research-phase.md +2 -2
- package/gsd-core/workflows/quick.md +35 -15
- package/gsd-core/workflows/review.md +26 -5
- package/gsd-core/workflows/secure-phase.md +1 -1
- package/gsd-core/workflows/session-report.md +2 -1
- package/gsd-core/workflows/settings.md +66 -2
- package/gsd-core/workflows/ship.md +104 -44
- package/gsd-core/workflows/spec-phase.md +30 -12
- package/gsd-core/workflows/sync-skills.md +63 -8
- package/gsd-core/workflows/transition.md +46 -11
- package/gsd-core/workflows/ui-phase.md +5 -5
- package/gsd-core/workflows/ui-review.md +2 -2
- package/gsd-core/workflows/update.md +1 -1
- package/gsd-core/workflows/validate-phase.md +1 -1
- package/gsd-core/workflows/verify-work.md +9 -7
- package/hooks/dist/gsd-agent-isolation-guard.js +103 -14
- package/hooks/dist/gsd-check-update-worker.js +56 -13
- package/hooks/dist/gsd-check-update.js +19 -1
- package/hooks/dist/gsd-cursor-pre-tool.js +0 -3
- package/hooks/dist/gsd-cursor-subagent-start.js +77 -2
- package/hooks/dist/gsd-cursor-subagent-stop.js +3 -2
- package/hooks/dist/gsd-prompt-guard.js +21 -20
- package/hooks/dist/gsd-read-injection-scanner.js +38 -24
- package/hooks/dist/gsd-statusline.js +18 -0
- package/hooks/dist/gsd-update-banner.js +22 -1
- package/hooks/dist/gsd-workflow-guard.js +134 -36
- package/hooks/dist/lib/git-cmd.js +92 -59
- package/hooks/dist/lib/injection-patterns.js +45 -0
- package/hooks/dist/lib/isolation-deny-reason.js +39 -0
- package/hooks/dist/lib/isolation-sentinel.js +9 -0
- package/hooks/gsd-agent-isolation-guard.js +103 -14
- package/hooks/gsd-check-update-worker.js +56 -13
- package/hooks/gsd-check-update.js +19 -1
- package/hooks/gsd-cursor-pre-tool.js +0 -3
- package/hooks/gsd-cursor-subagent-start.js +77 -2
- package/hooks/gsd-cursor-subagent-stop.js +3 -2
- package/hooks/gsd-prompt-guard.js +21 -20
- package/hooks/gsd-read-injection-scanner.js +38 -24
- package/hooks/gsd-statusline.js +18 -0
- package/hooks/gsd-update-banner.js +22 -1
- package/hooks/gsd-workflow-guard.js +134 -36
- package/hooks/lib/git-cmd.js +92 -59
- package/hooks/lib/injection-patterns.js +45 -0
- package/hooks/lib/isolation-deny-reason.js +39 -0
- package/hooks/lib/isolation-sentinel.js +9 -0
- package/package.json +21 -9
- package/pi/gsd.cjs +19 -5
- package/scripts/baselines/planning-prompt-drift-baseline.json +4 -0
- package/scripts/baselines/planning-snapshot-bypass-baseline.json +12 -0
- package/scripts/baselines/unreachable-guard-drift-baseline.json +4 -0
- package/scripts/changeset/lint.cjs +60 -5
- package/scripts/check-alias-drift.cjs +7 -43
- package/scripts/check-contract-drift.cjs +297 -0
- package/scripts/ci-test-scope.cjs +19 -2
- package/scripts/command-contract-helpers.cjs +903 -1
- package/scripts/gen-adr-index.cjs +728 -38
- package/scripts/gen-capability-registry.cjs +3 -15
- package/scripts/gen-context-index.cjs +2 -11
- package/scripts/gen-health-docs.cjs +390 -0
- package/scripts/gen-inventory-manifest.cjs +50 -4
- package/scripts/gen-loop-host-contract.cjs +4 -24
- package/scripts/gen-registry.cjs +3 -14
- package/scripts/lib/alias-drift-families.cjs +46 -0
- package/scripts/lib/drift-scan.cjs +278 -0
- package/scripts/lint-allow-test-rule-refs.allowlist.json +1 -26
- package/scripts/lint-allow-test-rule-refs.effective-ceiling.json +4 -0
- package/scripts/lint-allow-test-rule-refs.unverified-ceiling.json +3 -0
- package/scripts/lint-canary-version-leak.cjs +73 -0
- package/scripts/lint-command-contract.cjs +96 -13
- package/scripts/lint-completion-predicate-drift.cjs +933 -0
- package/scripts/lint-completion-ratio-drift.cjs +214 -0
- package/scripts/lint-default-flip-documentation.cjs +193 -0
- package/scripts/lint-eslint-glob-coverage.allowlist.json +34 -0
- package/scripts/lint-eslint-glob-coverage.cjs +340 -0
- package/scripts/lint-frontmatter-scalar-broad-grep.cjs +237 -0
- package/scripts/lint-health-diagnostic-rule-table.cjs +404 -0
- package/scripts/lint-hooks-runtime-build-seam.cjs +262 -0
- package/scripts/lint-milestone-window-drift.cjs +468 -0
- package/scripts/lint-phase-enumeration-drift.cjs +479 -0
- package/scripts/lint-plan-count-drift.cjs +318 -0
- package/scripts/lint-planning-artifact-writer-drift.cjs +398 -0
- package/scripts/lint-planning-prompt-drift.cjs +434 -0
- package/scripts/lint-planning-snapshot-bypass-drift.cjs +544 -0
- package/scripts/lint-regression-test-names.cjs +15 -13
- package/scripts/lint-removed-but-needed.cjs +320 -0
- package/scripts/lint-state-field-drift.cjs +805 -0
- package/scripts/lint-state-write-path-drift.cjs +1045 -0
- package/scripts/lint-test-file-count.allowlist.json +21 -10
- package/scripts/lint-unreachable-guard-drift.cjs +843 -0
- package/scripts/lint-vendored-deps.cjs +124 -0
- package/scripts/pr-changed-files.cjs +63 -0
- package/scripts/pr-template-policy.cjs +14 -4
- package/scripts/prompt-injection-scan.sh +25 -0
- package/scripts/require-issue-link-policy.cjs +192 -0
- package/scripts/state-write-path-drift-baseline.json +19 -0
- package/scripts/sync-runtime-launcher.cjs +2 -4
- package/skills/gsd-autonomous/SKILL.md +0 -1
- package/skills/gsd-code-review/SKILL.md +1 -1
- package/skills/gsd-execute-phase/SKILL.md +1 -2
- package/skills/gsd-map-codebase/SKILL.md +1 -1
- package/skills/gsd-mempalace-capture/SKILL.md +1 -1
- package/skills/gsd-mempalace-recall/SKILL.md +1 -1
- package/skills/gsd-new-milestone/SKILL.md +1 -1
- package/skills/gsd-next/SKILL.md +0 -1
- package/skills/gsd-plan-phase/SKILL.md +0 -1
- package/skills/gsd-progress/SKILL.md +0 -1
- package/skills/gsd-quick/SKILL.md +1 -1
- package/skills/gsd-review-backlog/SKILL.md +2 -1
- package/skills/gsd-stats/SKILL.md +0 -1
- package/skills/gsd-verify-work/SKILL.md +1 -1
- package/vscode/package.json +1 -1
- package/gsd-core/workflows/discovery-phase.md +0 -298
- package/gsd-core/workflows/plan-milestone-gaps.md +0 -281
- package/gsd-core/workflows/verify-phase.md +0 -574
- package/scripts/affected-tests-lib.cjs +0 -554
- package/scripts/lint-allow-test-rule-refs.cjs +0 -162
- package/scripts/run-affected-tests.cjs +0 -7
- package/scripts/run-tests.cjs +0 -1051
|
@@ -19,13 +19,32 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
19
19
|
*
|
|
20
20
|
* Pure with respect to config: `readGsdEffectiveEffortConfig` performs the config
|
|
21
21
|
* reads; `resolveInstallTimeEffort` is pure given a pre-merged effort object.
|
|
22
|
+
*
|
|
23
|
+
* #2875 defect fix: this module sits on the `installRuntimeArtifacts` call
|
|
24
|
+
* tree (reached both directly from `runtime-artifact-conversion.cts`'s
|
|
25
|
+
* effort-injection rewrite pass, and transitively via
|
|
26
|
+
* `install-model-override-resolver.cts`'s `_readGsdConfigFile` reuse) — every
|
|
27
|
+
* DESTINATION/config fs touch below routes through `installFs()`
|
|
28
|
+
* (install-fs-adapter.cts), matching `retired-artifact-cleanup.cts` /
|
|
29
|
+
* `user-artifact-staging.cts`'s existing precedent. `config-defaults.manifest.json`
|
|
30
|
+
* (`_getGsdEffortCatalog`) stays on raw `node:fs`, deliberately: it is
|
|
31
|
+
* PACKAGE-SOURCE (ships under `gsd-core/bin/shared/`, resolved from
|
|
32
|
+
* `__dirname`, never the install destination), the same class of read
|
|
33
|
+
* `install-fs-adapter.cts`'s module doc documents as "DELIBERATELY NOT
|
|
34
|
+
* ROUTED" for `findInstallSourceRoot`/`readGsdCommandNames`.
|
|
22
35
|
*/
|
|
23
36
|
const node_fs_1 = __importDefault(require("node:fs"));
|
|
24
37
|
const node_path_1 = __importDefault(require("node:path"));
|
|
25
38
|
const node_os_1 = __importDefault(require("node:os"));
|
|
39
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports -- install-fs-adapter.cjs is an export= CommonJS module
|
|
40
|
+
const installFsAdapter = require("./install-fs-adapter.cjs");
|
|
41
|
+
const { installFs } = installFsAdapter;
|
|
26
42
|
// eslint-disable-next-line @typescript-eslint/no-require-imports -- model-resolver.cjs is an export= CommonJS module
|
|
27
43
|
const modelResolver = require("./model-resolver.cjs");
|
|
28
44
|
const { EFFORT_SET: GSD_EFFORT_SET } = modelResolver;
|
|
45
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports -- model-catalog.cjs is an export= CommonJS module
|
|
46
|
+
const modelCatalog = require("./model-catalog.cjs");
|
|
47
|
+
const { mergeEffortTierDefaults } = modelCatalog;
|
|
29
48
|
/**
|
|
30
49
|
* #2517 — Read a single GSD config file (defaults.json or per-project
|
|
31
50
|
* config.json) into a plain object, returning null on missing/empty files
|
|
@@ -33,11 +52,11 @@ const { EFFORT_SET: GSD_EFFORT_SET } = modelResolver;
|
|
|
33
52
|
* mask broken configs (review finding #5).
|
|
34
53
|
*/
|
|
35
54
|
function _readGsdConfigFile(absPath, label) {
|
|
36
|
-
if (!
|
|
55
|
+
if (!installFs().existsSync(absPath))
|
|
37
56
|
return null;
|
|
38
57
|
let raw;
|
|
39
58
|
try {
|
|
40
|
-
raw =
|
|
59
|
+
raw = installFs().readFileSync(absPath, 'utf-8');
|
|
41
60
|
}
|
|
42
61
|
catch (err) {
|
|
43
62
|
process.stderr.write(`gsd: warning — could not read ${label} (${absPath}): ${err.message}\n`);
|
|
@@ -92,6 +111,35 @@ function _getGsdEffortCatalog() {
|
|
|
92
111
|
};
|
|
93
112
|
return _gsdEffortCatalogCache;
|
|
94
113
|
}
|
|
114
|
+
/**
|
|
115
|
+
* #2875 defect fix (Generative Fix Divergence — the exact class this module
|
|
116
|
+
* exists to remove): the upward walk from a runtime install root looking for
|
|
117
|
+
* `.planning/config.json`, capped at 8 ancestor levels, was duplicated
|
|
118
|
+
* verbatim three times — once here, and twice more in
|
|
119
|
+
* `install-model-override-resolver.cts` (`readGsdEffectiveModelOverrides`,
|
|
120
|
+
* `readGsdRuntimeProfileResolver`) after that module was extracted FROM this
|
|
121
|
+
* one specifically to stop duplicating shared install-time config logic.
|
|
122
|
+
* Single-sourced here so the cap and the walk semantics (depth 0 = targetDir
|
|
123
|
+
* itself, depth 7 = the last checked ancestor, 8 levels up is never reached)
|
|
124
|
+
* can only diverge if this function changes.
|
|
125
|
+
*
|
|
126
|
+
* @param targetDir Runtime install root to start the walk from.
|
|
127
|
+
* @returns the first `.planning/config.json` found walking upward from
|
|
128
|
+
* `targetDir` (inclusive) through up to 8 ancestor levels, or `null`.
|
|
129
|
+
*/
|
|
130
|
+
function _findAncestorGsdConfigPath(targetDir) {
|
|
131
|
+
let probeDir = node_path_1.default.resolve(targetDir);
|
|
132
|
+
for (let depth = 0; depth < 8; depth += 1) {
|
|
133
|
+
const candidate = node_path_1.default.join(probeDir, '.planning', 'config.json');
|
|
134
|
+
if (installFs().existsSync(candidate))
|
|
135
|
+
return candidate;
|
|
136
|
+
const parent = node_path_1.default.dirname(probeDir);
|
|
137
|
+
if (parent === probeDir)
|
|
138
|
+
break;
|
|
139
|
+
probeDir = parent;
|
|
140
|
+
}
|
|
141
|
+
return null;
|
|
142
|
+
}
|
|
95
143
|
/**
|
|
96
144
|
* #443 — Read the merged `effort` config block for install-time effort resolution.
|
|
97
145
|
*
|
|
@@ -109,18 +157,9 @@ function readGsdEffectiveEffortConfig(targetDir = null) {
|
|
|
109
157
|
const homeDefaults = _readGsdConfigFile(node_path_1.default.join(node_os_1.default.homedir(), '.gsd', 'defaults.json'), '~/.gsd/defaults.json');
|
|
110
158
|
let projectConfig = null;
|
|
111
159
|
if (targetDir) {
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
if (node_fs_1.default.existsSync(candidate)) {
|
|
116
|
-
projectConfig = _readGsdConfigFile(candidate, '.planning/config.json');
|
|
117
|
-
break;
|
|
118
|
-
}
|
|
119
|
-
const parent = node_path_1.default.dirname(probeDir);
|
|
120
|
-
if (parent === probeDir)
|
|
121
|
-
break;
|
|
122
|
-
probeDir = parent;
|
|
123
|
-
}
|
|
160
|
+
const candidate = _findAncestorGsdConfigPath(targetDir);
|
|
161
|
+
if (candidate)
|
|
162
|
+
projectConfig = _readGsdConfigFile(candidate, '.planning/config.json');
|
|
124
163
|
}
|
|
125
164
|
const homeEffort = (homeDefaults && homeDefaults.effort && typeof homeDefaults.effort === 'object' && !Array.isArray(homeDefaults.effort))
|
|
126
165
|
? homeDefaults.effort
|
|
@@ -133,6 +172,11 @@ function readGsdEffectiveEffortConfig(targetDir = null) {
|
|
|
133
172
|
// Per-project wins on conflict within each sub-field. Merge field-by-field so
|
|
134
173
|
// a project config that only sets agent_overrides still inherits global
|
|
135
174
|
// routing_tier_defaults and default.
|
|
175
|
+
// #3531 (10c): routing_tier_defaults is deep-merged per-tier like
|
|
176
|
+
// agent_overrides — a project block naming only `heavy` must not discard the
|
|
177
|
+
// home block's `light`/`standard` entries (the top-level spread would
|
|
178
|
+
// otherwise replace the whole block, the same defect class as the
|
|
179
|
+
// manifest-replacement this change fixes).
|
|
136
180
|
return {
|
|
137
181
|
...(homeEffort || {}),
|
|
138
182
|
...(projectEffort || {}),
|
|
@@ -141,6 +185,11 @@ function readGsdEffectiveEffortConfig(targetDir = null) {
|
|
|
141
185
|
...((homeEffort && homeEffort.agent_overrides) || {}),
|
|
142
186
|
...((projectEffort && projectEffort.agent_overrides) || {}),
|
|
143
187
|
},
|
|
188
|
+
// Deep-merge routing_tier_defaults (project wins per-tier)
|
|
189
|
+
routing_tier_defaults: {
|
|
190
|
+
...((homeEffort && homeEffort.routing_tier_defaults) || {}),
|
|
191
|
+
...((projectEffort && projectEffort.routing_tier_defaults) || {}),
|
|
192
|
+
},
|
|
144
193
|
};
|
|
145
194
|
}
|
|
146
195
|
/**
|
|
@@ -150,8 +199,10 @@ function readGsdEffectiveEffortConfig(targetDir = null) {
|
|
|
150
199
|
*
|
|
151
200
|
* Precedence (mirrors resolveEffortInternal):
|
|
152
201
|
* 1. effortCfg.agent_overrides[agentName]
|
|
153
|
-
* 2.
|
|
154
|
-
* —
|
|
202
|
+
* 2. routing_tier_defaults merged over the manifest tier defaults
|
|
203
|
+
* (#3531/10c: a config block — present or partial — no longer disables
|
|
204
|
+
* the built-in tier ladder; invalid config values are dropped by the
|
|
205
|
+
* merge so the manifest value for the tier surfaces)
|
|
155
206
|
* 3. effortCfg.default
|
|
156
207
|
* 4. 'high' (hardcoded fallback)
|
|
157
208
|
*
|
|
@@ -177,20 +228,11 @@ function resolveInstallTimeEffort(effortCfg, agentName) {
|
|
|
177
228
|
const { AGENT_DEFAULT_TIERS, EFFORT_MANIFEST_TIER_DEFAULTS, EFFORT_MANIFEST_DEFAULT } = _getGsdEffortCatalog();
|
|
178
229
|
const agentTier = AGENT_DEFAULT_TIERS[agentName];
|
|
179
230
|
if (agentTier) {
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
return v;
|
|
186
|
-
}
|
|
187
|
-
else if (!effortCfg) {
|
|
188
|
-
// No effort config — use manifest tier defaults
|
|
189
|
-
const v = EFFORT_MANIFEST_TIER_DEFAULTS[agentTier];
|
|
190
|
-
if (typeof v === 'string' && GSD_EFFORT_SET.has(v))
|
|
191
|
-
return v;
|
|
192
|
-
}
|
|
193
|
-
// effortCfg exists but has no routing_tier_defaults — fall through
|
|
231
|
+
const isValidEffort = (v) => typeof v === 'string' && GSD_EFFORT_SET.has(v);
|
|
232
|
+
const merged = mergeEffortTierDefaults(EFFORT_MANIFEST_TIER_DEFAULTS, effortCfg ? effortCfg.routing_tier_defaults : undefined, isValidEffort);
|
|
233
|
+
const v = merged[agentTier];
|
|
234
|
+
if (isValidEffort(v))
|
|
235
|
+
return v;
|
|
194
236
|
}
|
|
195
237
|
// Step 3: effort.default
|
|
196
238
|
if (effortCfg) {
|
|
@@ -210,4 +252,5 @@ module.exports = {
|
|
|
210
252
|
resolveInstallTimeEffort,
|
|
211
253
|
_getGsdEffortCatalog,
|
|
212
254
|
_readGsdConfigFile,
|
|
255
|
+
_findAncestorGsdConfigPath,
|
|
213
256
|
};
|