@opengsd/gsd-core 1.15.0 → 1.17.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 -2
- package/.opencode/plugins/gsd-core.js +336 -6
- package/.opencode/plugins/gsd-statusline/tui.tsx +55 -0
- package/GEMINI.md +1 -1
- package/agents/gsd-code-fixer.compact.md +1 -1
- package/agents/gsd-code-fixer.md +1 -1
- package/agents/gsd-code-reviewer.compact.md +5 -3
- package/agents/gsd-code-reviewer.md +8 -6
- package/agents/gsd-debug-session-manager.compact.md +7 -1
- package/agents/gsd-debug-session-manager.md +7 -1
- package/agents/gsd-debugger.md +2 -2
- package/agents/gsd-eval-auditor.compact.md +1 -1
- package/agents/gsd-eval-auditor.md +1 -1
- package/agents/gsd-executor.md +4 -4
- package/agents/gsd-intel-updater.compact.md +1 -1
- package/agents/gsd-intel-updater.md +1 -1
- package/agents/gsd-mempalace-curator.md +2 -2
- package/agents/gsd-phase-researcher.md +1 -1
- package/agents/gsd-plan-checker.md +7 -2
- package/agents/gsd-planner.md +3 -3
- package/agents/gsd-project-researcher.compact.md +1 -1
- package/agents/gsd-project-researcher.md +1 -1
- package/agents/gsd-research-synthesizer.compact.md +1 -1
- package/agents/gsd-research-synthesizer.md +1 -1
- package/agents/gsd-ui-auditor.compact.md +21 -30
- package/agents/gsd-ui-auditor.md +42 -51
- package/agents/gsd-ui-researcher.compact.md +1 -1
- package/agents/gsd-ui-researcher.md +1 -1
- package/agents/gsd-verifier.md +31 -9
- package/bin/gsd-mcp-server.js +3 -1
- package/bin/install.js +487 -290
- package/commands/gsd/add-tests.md +6 -1
- package/commands/gsd/ai-integration-phase.md +6 -1
- package/commands/gsd/audit-fix.md +5 -0
- package/commands/gsd/audit-milestone.md +6 -1
- package/commands/gsd/autonomous.md +5 -0
- package/commands/gsd/capture.md +8 -4
- package/commands/gsd/code-review.md +7 -2
- package/commands/gsd/complete-milestone.md +4 -0
- package/commands/gsd/config.md +7 -3
- package/commands/gsd/debug.md +11 -7
- package/commands/gsd/discuss-phase.md +7 -3
- package/commands/gsd/docs-update.md +12 -7
- package/commands/gsd/eval-review.md +6 -1
- package/commands/gsd/execute-phase.md +12 -7
- package/commands/gsd/extract-learnings.md +5 -0
- package/commands/gsd/fast.md +4 -0
- package/commands/gsd/forensics.md +5 -1
- package/commands/gsd/graphify.md +10 -6
- package/commands/gsd/health.md +5 -0
- package/commands/gsd/help.md +7 -2
- package/commands/gsd/import.md +7 -3
- package/commands/gsd/inbox.md +5 -0
- package/commands/gsd/ingest-docs.md +5 -1
- package/commands/gsd/manager.md +6 -1
- package/commands/gsd/map-codebase.md +7 -3
- package/commands/gsd/mempalace-capture.md +5 -1
- package/commands/gsd/mempalace-recall.md +5 -1
- package/commands/gsd/milestone-summary.md +5 -1
- package/commands/gsd/mvp-phase.md +8 -3
- package/commands/gsd/new-milestone.md +6 -1
- package/commands/gsd/new-project.md +5 -0
- package/commands/gsd/next.md +6 -1
- package/commands/gsd/ns-context.md +4 -0
- package/commands/gsd/ns-ideate.md +4 -0
- package/commands/gsd/ns-manage.md +4 -0
- package/commands/gsd/ns-project.md +4 -0
- package/commands/gsd/ns-review.md +4 -0
- package/commands/gsd/ns-workflow.md +4 -0
- package/commands/gsd/onboard.md +6 -1
- package/commands/gsd/pause-work.md +5 -1
- package/commands/gsd/phase.md +8 -4
- package/commands/gsd/plan-phase.md +6 -1
- package/commands/gsd/plan-review-convergence.md +5 -1
- package/commands/gsd/pr-branch.md +4 -0
- package/commands/gsd/profile-user.md +5 -1
- package/commands/gsd/progress.md +6 -1
- package/commands/gsd/quick-batch.md +20 -8
- package/commands/gsd/quick.md +12 -7
- package/commands/gsd/review.md +5 -1
- package/commands/gsd/secure-phase.md +6 -1
- package/commands/gsd/ship.md +5 -0
- package/commands/gsd/sketch.md +7 -2
- package/commands/gsd/spec-phase.md +5 -1
- package/commands/gsd/spike.md +8 -3
- package/commands/gsd/surface.md +5 -1
- package/commands/gsd/thread.md +4 -0
- package/commands/gsd/ui-phase.md +6 -1
- package/commands/gsd/ui-review.md +6 -1
- package/commands/gsd/ultraplan-phase.md +5 -1
- package/commands/gsd/undo.md +5 -1
- package/commands/gsd/update.md +6 -2
- package/commands/gsd/validate-phase.md +6 -1
- package/commands/gsd/verify-work.md +6 -1
- package/commands/gsd/workspace.md +7 -3
- package/gsd-core/bin/gsd-tools.cjs +159 -58
- package/gsd-core/bin/lib/active-workstream-store.cjs +15 -0
- package/gsd-core/bin/lib/adr-parser.cjs +37 -5
- package/gsd-core/bin/lib/agent-install-check.cjs +4 -1
- package/gsd-core/bin/lib/audit.cjs +78 -44
- package/gsd-core/bin/lib/broken-windows.cjs +13 -13
- package/gsd-core/bin/lib/capability-activation.cjs +9 -4
- package/gsd-core/bin/lib/capability-registry.cjs +249 -117
- package/gsd-core/bin/lib/capability-validator.cjs +18 -1
- package/gsd-core/bin/lib/capability-writer.cjs +2 -1
- package/gsd-core/bin/lib/check-auto-mode.cjs +35 -0
- package/gsd-core/bin/lib/check-command-router.cjs +164 -1712
- package/gsd-core/bin/lib/cjs-command-router-adapter.cjs +13 -2
- package/gsd-core/bin/lib/cli-exit.cjs +12 -0
- package/gsd-core/bin/lib/codex-agent-toml.cjs +11 -8
- package/gsd-core/bin/lib/command-aliases.cjs +7 -0
- package/gsd-core/bin/lib/command-routing-hub.cjs +48 -1
- package/gsd-core/bin/lib/commands.cjs +201 -178
- package/gsd-core/bin/lib/complexity-trigger.cjs +8 -7
- package/gsd-core/bin/lib/config.cjs +43 -12
- package/gsd-core/bin/lib/core-utils.cjs +6 -1
- package/gsd-core/bin/lib/coverage.cjs +4 -8
- package/gsd-core/bin/lib/decision-coverage-support.cjs +259 -0
- package/gsd-core/bin/lib/drift.cjs +177 -42
- package/gsd-core/bin/lib/frontmatter-fence.cjs +90 -0
- package/gsd-core/bin/lib/frontmatter-splice.cjs +494 -0
- package/gsd-core/bin/lib/frontmatter.cjs +413 -234
- package/gsd-core/bin/lib/gap-checker.cjs +72 -29
- package/gsd-core/bin/lib/gate-api-coverage-verify-pre.cjs +381 -0
- package/gsd-core/bin/lib/gate-args.cjs +53 -0
- package/gsd-core/bin/lib/gate-codebase-drift.cjs +285 -0
- package/gsd-core/bin/lib/gate-config.cjs +46 -0
- package/gsd-core/bin/lib/gate-context-drift.cjs +142 -0
- package/gsd-core/bin/lib/gate-decision-coverage-plan.cjs +169 -0
- package/gsd-core/bin/lib/gate-decision-coverage-verify.cjs +126 -0
- package/gsd-core/bin/lib/gate-evaluation-scope.cjs +555 -0
- package/gsd-core/bin/lib/gate-evidence.cjs +138 -0
- package/gsd-core/bin/lib/gate-exit.cjs +27 -0
- package/gsd-core/bin/lib/gate-gap-analysis-plan-post.cjs +61 -0
- package/gsd-core/bin/lib/gate-phase-context.cjs +170 -0
- package/gsd-core/bin/lib/gate-predicate-evaluator.cjs +1 -1
- package/gsd-core/bin/lib/gate-predicate.cjs +165 -0
- package/gsd-core/bin/lib/gate-prohibition-enforcement.cjs +94 -0
- package/gsd-core/bin/lib/gate-schema-drift.cjs +165 -0
- package/gsd-core/bin/lib/gate-tdd-red-evidence.cjs +100 -0
- package/gsd-core/bin/lib/gate-tdd-review-checkpoint.cjs +182 -0
- package/gsd-core/bin/lib/gate-ui-plan.cjs +86 -0
- package/gsd-core/bin/lib/gate-ui-safety.cjs +81 -0
- package/gsd-core/bin/lib/gate-verdict.cjs +64 -0
- package/gsd-core/bin/lib/gate-verify-command-paths.cjs +78 -0
- package/gsd-core/bin/lib/gate-verify-failure-directions.cjs +41 -0
- package/gsd-core/bin/lib/graphify.cjs +3 -2
- package/gsd-core/bin/lib/health-diagnostic-rules/phase-structure.cjs +43 -47
- package/gsd-core/bin/lib/health-diagnostic.cjs +45 -8
- package/gsd-core/bin/lib/init.cjs +194 -108
- package/gsd-core/bin/lib/install-engine.cjs +30 -35
- package/gsd-core/bin/lib/install-profiles.cjs +7 -4
- package/gsd-core/bin/lib/install-shadow-report.cjs +12 -0
- package/gsd-core/bin/lib/installer-migrations/011-opencode-mcp-no-prompts.cjs +99 -0
- package/gsd-core/bin/lib/installer-migrations.cjs +54 -1
- package/gsd-core/bin/lib/io.cjs +122 -3
- package/gsd-core/bin/lib/jsonc-edit.cjs +418 -0
- package/gsd-core/bin/lib/loop-host-contract.cjs +2 -1
- package/gsd-core/bin/lib/loop-resolver.cjs +95 -0
- package/gsd-core/bin/lib/markdown-sectionizer.cjs +75 -1
- package/gsd-core/bin/lib/mcp-server.cjs +5 -1
- package/gsd-core/bin/lib/milestone.cjs +19 -1
- package/gsd-core/bin/lib/model-resolver.cjs +18 -18
- package/gsd-core/bin/lib/observability/event.cjs +1 -1
- package/gsd-core/bin/lib/observability/logger.cjs +46 -1
- package/gsd-core/bin/lib/opencode-mcp-entry.cjs +39 -0
- package/gsd-core/bin/lib/opencode-version.cjs +486 -0
- package/gsd-core/bin/lib/pattern.cjs +10 -0
- package/gsd-core/bin/lib/phase-command-router.cjs +11 -4
- package/gsd-core/bin/lib/phase-estimation.cjs +5 -4
- package/gsd-core/bin/lib/phase-id.cjs +1 -1
- package/gsd-core/bin/lib/phase-lifecycle.cjs +9 -2
- package/gsd-core/bin/lib/phase-status.cjs +360 -0
- package/gsd-core/bin/lib/phase.cjs +301 -80
- package/gsd-core/bin/lib/plan-document.cjs +93 -19
- package/gsd-core/bin/lib/plan-drift-guard.cjs +5 -0
- package/gsd-core/bin/lib/planning-document.cjs +273 -40
- package/gsd-core/bin/lib/planning-inspect.cjs +42 -8
- package/gsd-core/bin/lib/planning-snapshot.cjs +18 -0
- package/gsd-core/bin/lib/planning-workspace.cjs +76 -53
- package/gsd-core/bin/lib/pristine-baseline.cjs +10 -0
- package/gsd-core/bin/lib/profile-output.cjs +6 -3
- package/gsd-core/bin/lib/prohibition-enforcement.cjs +0 -55
- package/gsd-core/bin/lib/quick-batch-command-router.cjs +35 -9
- package/gsd-core/bin/lib/quick-batch-dispatch.cjs +13 -9
- package/gsd-core/bin/lib/real-home-guard.cjs +9 -1
- package/gsd-core/bin/lib/report-parser.cjs +269 -0
- package/gsd-core/bin/lib/roadmap-command-router.cjs +13 -15
- package/gsd-core/bin/lib/roadmap-parser.cjs +82 -15
- package/gsd-core/bin/lib/roadmap-upgrade.cjs +127 -65
- package/gsd-core/bin/lib/roadmap.cjs +169 -72
- package/gsd-core/bin/lib/runtime-artifact-conversion.cjs +186 -161
- package/gsd-core/bin/lib/runtime-artifact-install-plan.cjs +2 -1
- package/gsd-core/bin/lib/runtime-artifact-layout.cjs +57 -1
- package/gsd-core/bin/lib/runtime-homes.cjs +13 -10
- package/gsd-core/bin/lib/runtime-hooks-surface.cjs +365 -594
- package/gsd-core/bin/lib/runtime-name-policy.cjs +142 -27
- package/gsd-core/bin/lib/runtime-slash.cjs +60 -30
- package/gsd-core/bin/lib/shell-command-projection.cjs +37 -2
- package/gsd-core/bin/lib/smart-entry.cjs +111 -56
- package/gsd-core/bin/lib/stale-bake-guard.cjs +32 -48
- package/gsd-core/bin/lib/state-contract.cjs +15 -18
- package/gsd-core/bin/lib/state-document.cjs +100 -22
- package/gsd-core/bin/lib/state-transition.cjs +67 -9
- package/gsd-core/bin/lib/state.cjs +668 -171
- package/gsd-core/bin/lib/surface.cjs +2 -1
- package/gsd-core/bin/lib/tdd-red-evidence.cjs +48 -152
- package/gsd-core/bin/lib/uat-predicate.cjs +313 -35
- package/gsd-core/bin/lib/uat.cjs +424 -7
- package/gsd-core/bin/lib/ui-frontend-evidence.cjs +94 -58
- package/gsd-core/bin/lib/update-context.cjs +18 -1
- package/gsd-core/bin/lib/vendor/README.md +31 -9
- package/gsd-core/bin/lib/vendor/saxes.cjs +1934 -0
- package/gsd-core/bin/lib/vendor/saxes.cjs.LICENSE.txt +92 -0
- package/gsd-core/bin/lib/vendor/tap-parser.cjs +8927 -0
- package/gsd-core/bin/lib/vendor/tap-parser.cjs.LICENSE.txt +152 -0
- package/gsd-core/bin/lib/verification-command-router.cjs +2 -1
- package/gsd-core/bin/lib/verification.cjs +1265 -324
- package/gsd-core/bin/lib/verify-command-router.cjs +18 -7
- package/gsd-core/bin/lib/verify.cjs +286 -567
- package/gsd-core/bin/lib/workstream-inventory-builder.cjs +14 -6
- package/gsd-core/bin/lib/workstream-inventory.cjs +31 -21
- package/gsd-core/bin/lib/workstream-name-policy.cjs +31 -1
- package/gsd-core/bin/lib/workstream.cjs +11 -2
- package/gsd-core/bin/shared/config-defaults.manifest.json +5 -0
- package/gsd-core/bin/shared/config-schema.manifest.json +4 -0
- package/gsd-core/references/autonomous-smart-discuss.md +2 -1
- package/gsd-core/references/autonomous-ui-design-contract.md +3 -3
- package/gsd-core/references/execute-mvp-tdd.md +5 -10
- package/gsd-core/references/execute-phase-between-wave-reset.md +3 -0
- package/gsd-core/references/execute-phase-response-language.md +1 -1
- package/gsd-core/references/gsd-run-resolver.md +1 -1
- package/gsd-core/references/loop-hook-dispatch.md +7 -1
- package/gsd-core/references/offer-next.md +1 -1
- package/gsd-core/references/planning-config.md +1 -1
- package/gsd-core/references/spidr-splitting.md +1 -1
- package/gsd-core/references/tdd.md +10 -4
- package/gsd-core/references/verifier-phase-gates.md +5 -2
- package/gsd-core/references/verify-mvp-mode.md +2 -2
- package/gsd-core/references/workstream-flag.md +33 -3
- package/gsd-core/templates/README.md +1 -1
- package/gsd-core/templates/UAT.md +17 -1
- package/gsd-core/templates/config.json +2 -11
- package/gsd-core/templates/verification-report.md +1 -1
- package/gsd-core/workflows/_runtime-launcher.snippet.sh +1 -1
- package/gsd-core/workflows/add-backlog.md +1 -1
- package/gsd-core/workflows/add-phase.md +8 -7
- package/gsd-core/workflows/add-tests.md +3 -2
- package/gsd-core/workflows/add-todo.md +4 -3
- package/gsd-core/workflows/ai-integration-phase.md +3 -2
- package/gsd-core/workflows/audit-fix.md +1 -1
- package/gsd-core/workflows/audit-milestone.md +4 -3
- package/gsd-core/workflows/audit-uat.md +1 -1
- package/gsd-core/workflows/autonomous.md +28 -18
- package/gsd-core/workflows/check-todos.md +6 -5
- package/gsd-core/workflows/cleanup.md +1 -1
- package/gsd-core/workflows/code-review/steps/structural-pre-pass.md +20 -13
- package/gsd-core/workflows/code-review-fix.md +5 -4
- package/gsd-core/workflows/code-review.md +100 -91
- package/gsd-core/workflows/complete-milestone/detail/elaboration.md +4 -3
- package/gsd-core/workflows/complete-milestone.md +12 -7
- package/gsd-core/workflows/debug.md +30 -5
- package/gsd-core/workflows/diagnose-issues.md +3 -2
- package/gsd-core/workflows/discuss-phase/modes/advisor.md +1 -1
- package/gsd-core/workflows/discuss-phase/modes/chain.md +1 -1
- package/gsd-core/workflows/discuss-phase-assumptions.md +4 -3
- package/gsd-core/workflows/discuss-phase.md +4 -3
- package/gsd-core/workflows/do.md +1 -1
- package/gsd-core/workflows/docs-update.md +4 -3
- package/gsd-core/workflows/edit-phase.md +4 -3
- package/gsd-core/workflows/eval-review.md +5 -3
- package/gsd-core/workflows/execute-phase/detail/elaboration.md +1 -1
- package/gsd-core/workflows/execute-phase/steps/code-review-disposition.md +4 -2
- package/gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md +15 -4
- package/gsd-core/workflows/execute-phase/steps/completion-reconciliation.md +10 -7
- package/gsd-core/workflows/execute-phase/steps/executor-isolation-dispatch.md +2 -2
- package/gsd-core/workflows/execute-phase/steps/gap-closure-artifacts.md +3 -1
- package/gsd-core/workflows/execute-phase/steps/partial-wave.md +2 -2
- package/gsd-core/workflows/execute-phase/steps/per-plan-executor-routing.md +1 -1
- package/gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md +1 -1
- package/gsd-core/workflows/execute-phase/steps/post-merge-gate.md +1 -1
- package/gsd-core/workflows/execute-phase/steps/protected-branch.md +1 -1
- package/gsd-core/workflows/execute-phase/steps/regression-gate-run.md +1 -1
- package/gsd-core/workflows/execute-phase/steps/regression-gate.md +2 -0
- package/gsd-core/workflows/execute-phase/steps/tdd-applicability-resolution.md +1 -1
- package/gsd-core/workflows/execute-phase/steps/verify-phase-goal.md +187 -0
- package/gsd-core/workflows/execute-phase/steps/wave-post-gate-hooks.md +2 -3
- package/gsd-core/workflows/execute-phase.md +81 -171
- package/gsd-core/workflows/execute-plan.md +13 -19
- package/gsd-core/workflows/explore.md +2 -2
- package/gsd-core/workflows/extract-learnings.md +3 -2
- package/gsd-core/workflows/fast.md +1 -1
- package/gsd-core/workflows/forensics.md +1 -1
- package/gsd-core/workflows/graduation.md +1 -1
- package/gsd-core/workflows/health.md +2 -1
- package/gsd-core/workflows/import.md +3 -2
- package/gsd-core/workflows/inbox.md +1 -1
- package/gsd-core/workflows/ingest-docs.md +1 -1
- package/gsd-core/workflows/insert-phase.md +4 -3
- package/gsd-core/workflows/list-seeds.md +1 -1
- package/gsd-core/workflows/list-workspaces.md +1 -1
- package/gsd-core/workflows/manager.md +5 -3
- package/gsd-core/workflows/map-codebase.md +4 -3
- package/gsd-core/workflows/milestone-summary.md +3 -2
- package/gsd-core/workflows/mvp-phase.md +14 -14
- package/gsd-core/workflows/new-milestone.md +10 -10
- package/gsd-core/workflows/new-project/steps/auto-mode-config.md +1 -1
- package/gsd-core/workflows/new-project.md +1 -1
- package/gsd-core/workflows/new-workspace.md +1 -1
- package/gsd-core/workflows/next.md +1 -1
- package/gsd-core/workflows/pause-work.md +2 -2
- package/gsd-core/workflows/plan-phase/detail/elaboration.md +1 -1
- package/gsd-core/workflows/plan-phase/steps/chunked-planning-mode.md +1 -1
- package/gsd-core/workflows/plan-phase/steps/closed-phase-gate.md +1 -1
- package/gsd-core/workflows/plan-phase/steps/prd-express-path.md +1 -1
- package/gsd-core/workflows/plan-phase/steps/stall-detection-helpers.md +1 -1
- package/gsd-core/workflows/plan-phase.md +27 -18
- package/gsd-core/workflows/plan-review-convergence.md +1 -1
- package/gsd-core/workflows/plant-seed.md +1 -1
- package/gsd-core/workflows/pr-branch.md +1 -1
- package/gsd-core/workflows/profile-user.md +1 -1
- package/gsd-core/workflows/progress.md +19 -49
- package/gsd-core/workflows/quick/steps/plan-checker-loop.md +4 -2
- package/gsd-core/workflows/quick/steps/quick-verification.md +4 -4
- package/gsd-core/workflows/quick/steps/worktree-pre-dispatch-commit.md +30 -11
- package/gsd-core/workflows/quick-batch/steps/batch-init.md +1 -1
- package/gsd-core/workflows/quick-batch/steps/completion.md +1 -1
- package/gsd-core/workflows/quick-batch/steps/merge-wave.md +1 -1
- package/gsd-core/workflows/quick-batch/steps/planner-wave.md +1 -1
- package/gsd-core/workflows/quick-batch/steps/research-phase.md +1 -1
- package/gsd-core/workflows/quick-batch/steps/resume-mode.md +1 -1
- package/gsd-core/workflows/quick-batch/steps/verification-wave.md +9 -3
- package/gsd-core/workflows/quick-batch/steps/worktree-dispatch.md +1 -1
- package/gsd-core/workflows/quick-batch.md +15 -10
- package/gsd-core/workflows/quick.md +42 -31
- package/gsd-core/workflows/remove-phase.md +3 -2
- package/gsd-core/workflows/remove-workspace.md +1 -1
- package/gsd-core/workflows/resume-project.md +17 -12
- package/gsd-core/workflows/review.md +3 -2
- package/gsd-core/workflows/scan.md +3 -2
- package/gsd-core/workflows/secure-phase.md +11 -12
- package/gsd-core/workflows/settings-advanced.md +1 -1
- package/gsd-core/workflows/settings-integrations.md +1 -1
- package/gsd-core/workflows/settings.md +1 -1
- package/gsd-core/workflows/ship.md +12 -12
- package/gsd-core/workflows/sketch-wrap-up.md +1 -1
- package/gsd-core/workflows/sketch.md +1 -1
- package/gsd-core/workflows/smart-entry.md +1 -1
- package/gsd-core/workflows/spec-phase.md +1 -1
- package/gsd-core/workflows/spike-wrap-up.md +1 -1
- package/gsd-core/workflows/spike.md +1 -1
- package/gsd-core/workflows/stats.md +1 -1
- package/gsd-core/workflows/sync-skills.md +1 -1
- package/gsd-core/workflows/thread.md +2 -2
- package/gsd-core/workflows/transition.md +13 -23
- package/gsd-core/workflows/ui-phase.md +5 -4
- package/gsd-core/workflows/ui-review.md +4 -3
- package/gsd-core/workflows/ultraplan-phase.md +3 -2
- package/gsd-core/workflows/undo.md +1 -1
- package/gsd-core/workflows/validate-phase.md +10 -12
- package/gsd-core/workflows/verify-work/detail/elaboration.md +43 -3
- package/gsd-core/workflows/verify-work/steps/automated-ui-verification.md +1 -1
- package/gsd-core/workflows/verify-work/steps/mvp-uat-framing.md +5 -3
- package/gsd-core/workflows/verify-work.md +68 -59
- package/hooks/dist/gsd-agent-isolation-guard.js +8 -0
- package/hooks/dist/gsd-check-update-worker.js +8 -0
- package/hooks/dist/gsd-check-update.js +34 -20
- package/hooks/dist/gsd-context-monitor.js +45 -13
- package/hooks/dist/gsd-cursor-subagent-start.js +8 -0
- package/hooks/dist/gsd-secret-read-guard.js +263 -16
- package/hooks/dist/gsd-statusline.js +336 -29
- package/hooks/dist/gsd-update-banner.js +8 -0
- package/hooks/dist/gsd-windsurf-pre-write.js +11 -2
- package/hooks/dist/gsd-workflow-guard.js +5 -4
- package/hooks/dist/gsd-worktree-path-guard.js +6 -2
- package/hooks/dist/lib/cli-exit.js +12 -0
- package/hooks/dist/lib/git-probe.js +17 -1
- package/hooks/dist/lib/isolation-sentinel.js +2 -2
- package/hooks/gsd-agent-isolation-guard.js +8 -0
- package/hooks/gsd-check-update-worker.js +8 -0
- package/hooks/gsd-check-update.js +34 -20
- package/hooks/gsd-context-monitor.js +45 -13
- package/hooks/gsd-cursor-subagent-start.js +8 -0
- package/hooks/gsd-secret-read-guard.js +263 -16
- package/hooks/gsd-statusline.js +336 -29
- package/hooks/gsd-update-banner.js +8 -0
- package/hooks/gsd-windsurf-pre-write.js +11 -2
- package/hooks/gsd-workflow-guard.js +5 -4
- package/hooks/gsd-worktree-path-guard.js +6 -2
- package/hooks/hooks.json +5 -5
- package/hooks/lib/cli-exit.js +12 -0
- package/hooks/lib/git-probe.js +17 -1
- package/hooks/lib/isolation-sentinel.js +2 -2
- package/package.json +21 -4
- package/scripts/changeset/parse.cjs +52 -4
- package/scripts/ci-timeout-report.cjs +770 -4
- package/scripts/command-contract-helpers.cjs +12 -8
- package/scripts/docs-guard-registry.cjs +6 -0
- package/scripts/gen-capability-registry.cjs +7 -1
- package/scripts/gen-features.cjs +13 -8
- package/scripts/gen-hooks-cli-exit.cjs +12 -28
- package/scripts/gen-loop-host-contract.cjs +14 -2
- package/scripts/gen-platform-conformance-tier.cjs +187 -1
- package/scripts/gen-plugin-skills.cjs +87 -1
- package/scripts/gen-research-agents.cjs +24 -31
- package/scripts/gen-scripts-cli-exit.cjs +30 -3
- package/scripts/gen-test-timings.cjs +32 -7
- package/scripts/lib/cli-exit.cjs +12 -0
- package/scripts/lib/macos-conformance-tier.generated.cjs +24 -2
- package/scripts/lib/ndjson-reporter.cjs +28 -3
- package/scripts/lib/platform-conformance-tier.generated.cjs +44 -5
- package/scripts/lib/registration-ledger-preload.cjs +155 -0
- package/scripts/lib/vendor-bundle.cjs +59 -0
- package/scripts/lib/vendor-licenses/saxes-6.0.0.txt +64 -0
- package/scripts/lint-allow-test-rule-refs.effective-ceiling.json +1 -1
- package/scripts/lint-allow-test-rule-refs.unverified-ceiling.json +1 -1
- package/scripts/lint-completion-predicate-drift.cjs +18 -19
- package/scripts/lint-descriptions.cjs +7 -3
- package/scripts/lint-docs-guard-registration.exempt-baseline.cjs +10 -0
- package/scripts/lint-eslint-glob-coverage.allowlist.json +20 -0
- package/scripts/lint-frontmatter-fence-drift.cjs +313 -0
- package/scripts/lint-frontmatter-scalar-broad-grep.cjs +122 -16
- package/scripts/lint-phase-enumeration-drift.cjs +12 -8
- package/scripts/lint-phase-id-drift.cjs +29 -0
- package/scripts/lint-planning-document-positive-control.cjs +329 -0
- package/scripts/lint-response-language-coverage.cjs +3 -0
- package/scripts/lint-skill-deps.cjs +7 -3
- package/scripts/lint-test-file-count.allowlist.json +11 -1
- package/scripts/lint-test-file-count.cjs +34 -1
- package/scripts/lint-vendored-deps.cjs +41 -5
- package/scripts/lint-workflow-shellcheck-baseline.json +10 -10
- package/scripts/mutation-matrix.cjs +53 -6
- package/scripts/release-tarball-smoke.cjs +14 -7
- package/scripts/require-issue-link-policy.cjs +6 -2
- package/scripts/sync-runtime-launcher.cjs +184 -2
- package/scripts/verify-npm-publish.cjs +76 -20
- package/skills/gsd-add-tests/SKILL.md +6 -1
- package/skills/gsd-ai-integration-phase/SKILL.md +6 -1
- package/skills/gsd-audit-fix/SKILL.md +5 -0
- package/skills/gsd-audit-milestone/SKILL.md +6 -1
- package/skills/gsd-autonomous/SKILL.md +5 -0
- package/skills/gsd-capture/SKILL.md +8 -4
- package/skills/gsd-code-review/SKILL.md +7 -2
- package/skills/gsd-complete-milestone/SKILL.md +4 -0
- package/skills/gsd-config/SKILL.md +8 -4
- package/skills/gsd-debug/SKILL.md +11 -7
- package/skills/gsd-discuss-phase/SKILL.md +7 -3
- package/skills/gsd-docs-update/SKILL.md +12 -7
- package/skills/gsd-eval-review/SKILL.md +6 -1
- package/skills/gsd-execute-phase/SKILL.md +12 -7
- package/skills/gsd-extract-learnings/SKILL.md +5 -0
- package/skills/gsd-fast/SKILL.md +4 -0
- package/skills/gsd-forensics/SKILL.md +5 -1
- package/skills/gsd-graphify/SKILL.md +10 -6
- package/skills/gsd-health/SKILL.md +5 -0
- package/skills/gsd-help/SKILL.md +7 -2
- package/skills/gsd-import/SKILL.md +7 -3
- package/skills/gsd-inbox/SKILL.md +5 -0
- package/skills/gsd-ingest-docs/SKILL.md +5 -1
- package/skills/gsd-manager/SKILL.md +6 -1
- package/skills/gsd-map-codebase/SKILL.md +7 -3
- package/skills/gsd-mempalace-capture/SKILL.md +5 -1
- package/skills/gsd-mempalace-recall/SKILL.md +5 -1
- package/skills/gsd-milestone-summary/SKILL.md +5 -1
- package/skills/gsd-mvp-phase/SKILL.md +8 -3
- package/skills/gsd-new-milestone/SKILL.md +6 -1
- package/skills/gsd-new-project/SKILL.md +5 -0
- package/skills/gsd-next/SKILL.md +6 -1
- package/skills/gsd-ns-context/SKILL.md +4 -0
- package/skills/gsd-ns-ideate/SKILL.md +4 -0
- package/skills/gsd-ns-manage/SKILL.md +4 -0
- package/skills/gsd-ns-project/SKILL.md +4 -0
- package/skills/gsd-ns-review/SKILL.md +4 -0
- package/skills/gsd-ns-workflow/SKILL.md +4 -0
- package/skills/gsd-onboard/SKILL.md +6 -1
- package/skills/gsd-pause-work/SKILL.md +5 -1
- package/skills/gsd-phase/SKILL.md +8 -4
- package/skills/gsd-plan-phase/SKILL.md +6 -1
- package/skills/gsd-plan-review-convergence/SKILL.md +5 -1
- package/skills/gsd-pr-branch/SKILL.md +4 -0
- package/skills/gsd-profile-user/SKILL.md +5 -1
- package/skills/gsd-progress/SKILL.md +6 -1
- package/skills/gsd-quick/SKILL.md +16 -10
- package/skills/gsd-quick-batch/SKILL.md +20 -8
- package/skills/gsd-review/SKILL.md +5 -1
- package/skills/gsd-review-backlog/SKILL.md +3 -2
- package/skills/gsd-secure-phase/SKILL.md +6 -1
- package/skills/gsd-ship/SKILL.md +5 -0
- package/skills/gsd-sketch/SKILL.md +7 -2
- package/skills/gsd-spec-phase/SKILL.md +5 -1
- package/skills/gsd-spike/SKILL.md +8 -3
- package/skills/gsd-surface/SKILL.md +5 -1
- package/skills/gsd-thread/SKILL.md +4 -0
- package/skills/gsd-ui-phase/SKILL.md +6 -1
- package/skills/gsd-ui-review/SKILL.md +6 -1
- package/skills/gsd-ultraplan-phase/SKILL.md +5 -1
- package/skills/gsd-undo/SKILL.md +5 -1
- package/skills/gsd-update/SKILL.md +6 -2
- package/skills/gsd-validate-phase/SKILL.md +6 -1
- package/skills/gsd-verify-work/SKILL.md +6 -1
- package/skills/gsd-workspace/SKILL.md +7 -3
- package/skills/gsd-workstreams/SKILL.md +6 -6
- package/vscode/package.json +1 -1
- package/gsd-core/workflows/execute-phase/steps/stale-reverification.md +0 -24
|
@@ -234,7 +234,7 @@ function handleMessage(request, ctx = {}) {
|
|
|
234
234
|
// subscribe/listChanged — nothing ever sends those notifications
|
|
235
235
|
// (design row 2 / Hyrum's Law: advertising an unimplemented
|
|
236
236
|
// notification is a lie a host would act on).
|
|
237
|
-
capabilities: { tools: {}, resources: {}, prompts: {} },
|
|
237
|
+
capabilities: ctx.prompts === false ? { tools: {}, resources: {} } : { tools: {}, resources: {}, prompts: {} },
|
|
238
238
|
serverInfo: { name: exports.SERVER_NAME, version: resolveServerVersion() },
|
|
239
239
|
};
|
|
240
240
|
break;
|
|
@@ -276,6 +276,8 @@ function handleMessage(request, ctx = {}) {
|
|
|
276
276
|
break;
|
|
277
277
|
}
|
|
278
278
|
case 'prompts/list':
|
|
279
|
+
if (ctx.prompts === false)
|
|
280
|
+
return isNotification ? null : errorResponse(id, METHOD_NOT_FOUND, 'Method not found: prompts/list.');
|
|
279
281
|
result = {
|
|
280
282
|
prompts: [...getCatalog().prompts.values()]
|
|
281
283
|
.map(wirePrompt)
|
|
@@ -283,6 +285,8 @@ function handleMessage(request, ctx = {}) {
|
|
|
283
285
|
};
|
|
284
286
|
break;
|
|
285
287
|
case 'prompts/get': {
|
|
288
|
+
if (ctx.prompts === false)
|
|
289
|
+
return isNotification ? null : errorResponse(id, METHOD_NOT_FOUND, 'Method not found: prompts/get.');
|
|
286
290
|
const params = (request.params && typeof request.params === 'object' ? request.params : {});
|
|
287
291
|
const name = asString(params.name);
|
|
288
292
|
if (!name)
|
|
@@ -63,7 +63,7 @@ const { extractFrontmatter } = frontmatterMod;
|
|
|
63
63
|
// divergence signal). Routed through the single write-seam composition
|
|
64
64
|
// (`syncAndPreserveStateMd`) instead, under `withStateLock` — see
|
|
65
65
|
// `cmdMilestoneComplete`'s own STATE.md-update block for the full rationale.
|
|
66
|
-
const { syncAndPreserveStateMd, withStateLock, readModifyWriteStateMd } = stateMod;
|
|
66
|
+
const { syncAndPreserveStateMd, withStateLock, readModifyWriteStateMd, assertVerificationReportsReadable } = stateMod;
|
|
67
67
|
// #2288 security: a milestone version label becomes a filesystem directory
|
|
68
68
|
// component (`milestones/<label>-phases/`) into which phase directories are
|
|
69
69
|
// MOVED. Any label used as a path segment must be a safe version token —
|
|
@@ -869,6 +869,15 @@ function cmdMilestoneComplete(cwd, version, options, raw) {
|
|
|
869
869
|
output(dryRunResult, raw);
|
|
870
870
|
return;
|
|
871
871
|
}
|
|
872
|
+
// #5118 (no write before the error): the STATE.md update further down
|
|
873
|
+
// rebuilds the frontmatter from every phase's report and throws on a
|
|
874
|
+
// `status` outside the closed set — AFTER the archive directory, the
|
|
875
|
+
// archived ROADMAP/REQUIREMENTS copies, MILESTONES.md and the moved audit
|
|
876
|
+
// and quick-task files. Validate first, so the refusal leaves the tree
|
|
877
|
+
// untouched.
|
|
878
|
+
if (node_fs_1.default.existsSync(statePath)) {
|
|
879
|
+
assertVerificationReportsReadable((0, shell_command_projection_cjs_1.platformReadSync)(statePath) || '', cwd);
|
|
880
|
+
}
|
|
872
881
|
// Ensure archive directory exists. Deliberately placed AFTER the dry-run
|
|
873
882
|
// early return and every refusal/guard above (missingExplicitVersion, the
|
|
874
883
|
// scope refusal, the unstarted-phase guard) — #3184 review finding: this
|
|
@@ -1702,6 +1711,15 @@ function cmdQuickArchive(cwd, version, options, raw) {
|
|
|
1702
1711
|
}, raw);
|
|
1703
1712
|
return;
|
|
1704
1713
|
}
|
|
1714
|
+
// #5118 (no write before the error): the STATE.md reset below goes through
|
|
1715
|
+
// `readModifyWriteStateMd`, whose frontmatter rebuild reads every phase's
|
|
1716
|
+
// report and throws on a `status` outside the closed set — AFTER the quick
|
|
1717
|
+
// task directories have been MOVED. Validate first, so the refusal leaves the
|
|
1718
|
+
// tree untouched. Gated on there being anything to archive: a run that would
|
|
1719
|
+
// move nothing never reaches that rebuild.
|
|
1720
|
+
if (node_fs_1.default.existsSync(statePath) && listQuickTaskDirsForArchive(cwd).length > 0) {
|
|
1721
|
+
assertVerificationReportsReadable(node_fs_1.default.readFileSync(statePath, 'utf-8'), cwd);
|
|
1722
|
+
}
|
|
1705
1723
|
const quickArchiveResult = archiveQuickTaskDirectories(cwd, version);
|
|
1706
1724
|
const warnings = [];
|
|
1707
1725
|
let stateUpdated = false;
|
|
@@ -55,24 +55,24 @@ const { planningDir } = planningWorkspaceMod;
|
|
|
55
55
|
// <install>/gsd-core/bin/lib). Precedence for the gate: project config.runtime →
|
|
56
56
|
// GSD_RUNTIME env (manual/CI override + test seam) → install marker → 'claude'.
|
|
57
57
|
//
|
|
58
|
-
//
|
|
59
|
-
//
|
|
60
|
-
//
|
|
61
|
-
|
|
58
|
+
// Whether a runtime resolves tier aliases natively is a runtime-descriptor fact
|
|
59
|
+
// (`hostBehaviors.nativeModelAliases`, #5169) — `claude` is currently the ONLY
|
|
60
|
+
// runtime that declares it — not a hand-kept set in this module. A label that is
|
|
61
|
+
// not a registered runtime (a future runtime named by env/config) has none.
|
|
62
|
+
function hasNativeModelAliases(runtime) {
|
|
63
|
+
return (0, runtime_name_policy_cjs_1.hostBehaviorsFor)(runtime).nativeModelAliases === true;
|
|
64
|
+
}
|
|
62
65
|
// #3897 rung 2: the marker reader + its cache and test seams were promoted to
|
|
63
66
|
// the canonical owner, `runtime-slash.cts` (imported above) — this module now
|
|
64
67
|
// consumes that single implementation instead of holding its own copy. N5:
|
|
65
68
|
// behaviour and the seam contract are unchanged by the move; the re-exports
|
|
66
69
|
// below (`export =` at the bottom of this file) preserve every existing
|
|
67
70
|
// caller's `require('./model-resolver.cjs')` surface byte-for-behaviour.
|
|
68
|
-
// The runtime whose install is actually resolving
|
|
69
|
-
//
|
|
70
|
-
//
|
|
71
|
-
//
|
|
72
|
-
//
|
|
73
|
-
function resolveActiveRuntime(config) {
|
|
74
|
-
return (0, runtime_name_policy_cjs_1.resolveRuntimeNameFromCandidates)(process.env['GSD_RUNTIME'], config['runtime'], (0, runtime_slash_cjs_1.readInstallRuntimeMarker)()) || 'claude';
|
|
75
|
-
}
|
|
71
|
+
// The runtime whose install is actually resolving — one chain, owned by
|
|
72
|
+
// runtime-slash.cts's `resolveActiveRuntime` (#5169): GSD_RUNTIME env → project
|
|
73
|
+
// config.runtime → per-install .gsd-runtime marker → 'claude', canonicalized so
|
|
74
|
+
// an alias or case variant (e.g. "claude-code"/"Claude") cannot defeat the
|
|
75
|
+
// native-alias check below (#2297 review).
|
|
76
76
|
// Did the PROJECT's own config (root `.planning/config.json` or the active
|
|
77
77
|
// workstream/project override) explicitly set resolve_model_ids to "omit"?
|
|
78
78
|
// Project config takes precedence over the shared ~/.gsd/defaults.json (#2297
|
|
@@ -129,7 +129,7 @@ function _resolveRuntimeTier(config, tier) {
|
|
|
129
129
|
// the per-install marker), and reading it raw made
|
|
130
130
|
// `model_profile_overrides.<runtime>.<tier>` silently inert for every
|
|
131
131
|
// install that did not also write the key by hand.
|
|
132
|
-
runtime: resolveActiveRuntime(config),
|
|
132
|
+
runtime: (0, runtime_slash_cjs_1.resolveActiveRuntime)(config),
|
|
133
133
|
tier,
|
|
134
134
|
overrides: config['model_profile_overrides'],
|
|
135
135
|
});
|
|
@@ -502,7 +502,7 @@ function resolveModelInternal(cwd, agentType) {
|
|
|
502
502
|
? modelOverrides[agentType]
|
|
503
503
|
: undefined;
|
|
504
504
|
if (override) {
|
|
505
|
-
const mapped = mapClaudeOverrideForRuntime(override, resolveActiveRuntime(config), agentType);
|
|
505
|
+
const mapped = mapClaudeOverrideForRuntime(override, (0, runtime_slash_cjs_1.resolveActiveRuntime)(config), agentType);
|
|
506
506
|
if (mapped !== null)
|
|
507
507
|
return mapped;
|
|
508
508
|
// Unmappable Claude ID — fall through to tier resolution (matches model_policy).
|
|
@@ -528,7 +528,7 @@ function resolveModelInternal(cwd, agentType) {
|
|
|
528
528
|
// Never undefined, so the "no runtime declared anywhere" case still resolves
|
|
529
529
|
// 'claude' and step 3's deliberate claude skip (#1156/#2297/#4192) is
|
|
530
530
|
// unchanged for every existing install.
|
|
531
|
-
const activeRuntime = resolveActiveRuntime(config);
|
|
531
|
+
const activeRuntime = (0, runtime_slash_cjs_1.resolveActiveRuntime)(config);
|
|
532
532
|
if (tier && tier !== 'inherit') {
|
|
533
533
|
const onClaude = activeRuntime === 'claude';
|
|
534
534
|
const effectiveRuntime = activeRuntime;
|
|
@@ -582,7 +582,7 @@ function resolveModelInternal(cwd, agentType) {
|
|
|
582
582
|
// map, but only outranks the omit gate when that key canonicalizes to a
|
|
583
583
|
// recognised non-Claude runtime.
|
|
584
584
|
const omitApplies = config['resolve_model_ids'] === 'omit'
|
|
585
|
-
&& (projectExplicitlySetsOmit(cwd) || !
|
|
585
|
+
&& (projectExplicitlySetsOmit(cwd) || !hasNativeModelAliases(activeRuntime));
|
|
586
586
|
// CANONICALIZED, not the raw field. Comparing the raw value against the literal
|
|
587
587
|
// 'claude' made every spelling that is not exactly that string count as a
|
|
588
588
|
// non-Claude opt-in and outrank the omit gate: `runtime:"Claude"`,
|
|
@@ -764,13 +764,13 @@ function resolveModelForTier(cwd, agentType, attempt) {
|
|
|
764
764
|
? modelOverrides[agentType]
|
|
765
765
|
: undefined;
|
|
766
766
|
if (override) {
|
|
767
|
-
const mapped = mapClaudeOverrideForRuntime(override, resolveActiveRuntime(config), agentType);
|
|
767
|
+
const mapped = mapClaudeOverrideForRuntime(override, (0, runtime_slash_cjs_1.resolveActiveRuntime)(config), agentType);
|
|
768
768
|
if (mapped !== null)
|
|
769
769
|
return mapped;
|
|
770
770
|
// Unmappable Claude ID — fall through to dynamic_routing / model_policy resolution.
|
|
771
771
|
}
|
|
772
772
|
// #4505: same active-runtime rule as resolveModelInternal step 3.
|
|
773
|
-
if (config['model_policy'] && resolveActiveRuntime(config) !== 'claude') {
|
|
773
|
+
if (config['model_policy'] && (0, runtime_slash_cjs_1.resolveActiveRuntime)(config) !== 'claude') {
|
|
774
774
|
return resolveModelInternal(cwd, agentType);
|
|
775
775
|
}
|
|
776
776
|
const alias = dynamicRoutingModel(config, agentType, attemptN);
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
* (RFC 4122); invalid values are silently coerced to undefined.
|
|
17
17
|
* command: string — the dispatched verb
|
|
18
18
|
* args?: unknown — only present when includeArgs === true
|
|
19
|
-
* result: { kind: 'ok' | 'UnknownCommand' | 'InvalidArgs' | 'HandlerRefusal' | 'HandlerFailure', ...payload }
|
|
19
|
+
* result: { kind: 'ok' | 'UnknownCommand' | 'InvalidArgs' | 'HandlerRefusal' | 'HandlerFailure' | 'VerificationStatusInvalid', ...payload }
|
|
20
20
|
* timestamp: string — ISO 8601
|
|
21
21
|
*/
|
|
22
22
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
@@ -16,6 +16,11 @@
|
|
|
16
16
|
* No-op logger (createNoOpLogger):
|
|
17
17
|
* Silent on all events. Used as the Hub default when no logger is injected.
|
|
18
18
|
*
|
|
19
|
+
* Live-seam gate (resolveDispatchLogger, #4975):
|
|
20
|
+
* The one opt-in decision both live createHub() seams share. Resolves
|
|
21
|
+
* `audit.enabled` for the seam's cwd and returns the default logger, or
|
|
22
|
+
* undefined (inject nothing) when observability is off.
|
|
23
|
+
*
|
|
19
24
|
* ADR-457 build-at-publish: the hand-written bin/lib/observability/logger.cjs
|
|
20
25
|
* collapsed to a TypeScript source of truth. Behaviour is preserved
|
|
21
26
|
* byte-for-behaviour from the prior hand-written .cjs; only types are added.
|
|
@@ -26,6 +31,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
26
31
|
const node_fs_1 = __importDefault(require("node:fs"));
|
|
27
32
|
const node_path_1 = __importDefault(require("node:path"));
|
|
28
33
|
const redaction_cjs_1 = require("./redaction.cjs");
|
|
34
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
35
|
+
const planningWorkspace = require("../planning-workspace.cjs");
|
|
36
|
+
const { readScopedConfigValue } = planningWorkspace;
|
|
29
37
|
const AUDIT_FILE_NAME = '.gsd-trace.jsonl';
|
|
30
38
|
const PLANNING_DIR = '.planning';
|
|
31
39
|
// ─── helpers ─────────────────────────────────────────────────────────────────
|
|
@@ -47,6 +55,8 @@ function _safeStringify(value) {
|
|
|
47
55
|
* inject nothing (the Hub stays byte-for-byte silent, preserving the default
|
|
48
56
|
* dispatch output contract, incl. --json-errors); when on, the caller injects
|
|
49
57
|
* createDefaultLogger and gets the stderr-on-error line + opt-in file audit.
|
|
58
|
+
* The live seams reach it through resolveDispatchLogger, which supplies the
|
|
59
|
+
* project config — called bare, only the env var is seen (#4975).
|
|
50
60
|
*/
|
|
51
61
|
function _isAuditEnabled(config) {
|
|
52
62
|
if (process.env['GSD_AUDIT'] === '1')
|
|
@@ -148,4 +158,39 @@ function createDefaultLogger({ cwd = process.cwd(), config } = {}) {
|
|
|
148
158
|
},
|
|
149
159
|
};
|
|
150
160
|
}
|
|
151
|
-
|
|
161
|
+
/**
|
|
162
|
+
* Resolve `audit.enabled` for `cwd` as the value `config-get audit.enabled`
|
|
163
|
+
* reports, through planning-workspace's readScopedConfigValue — the one
|
|
164
|
+
* scope-aware ladder worktreesOptedOut (#3972) reads too, so the two gates
|
|
165
|
+
* can never resolve the same config differently. Strict `=== true`, never
|
|
166
|
+
* coerced.
|
|
167
|
+
*
|
|
168
|
+
* Direct file reads, deliberately NOT loadConfig: this runs on every live
|
|
169
|
+
* dispatch, and loadConfig can rewrite config.json, spawn git, scan the
|
|
170
|
+
* capability registry, and print warnings — none of which a dispatch that
|
|
171
|
+
* never opted in may do (the default dispatch output is a stable contract,
|
|
172
|
+
* ADR-2619). Never throws. An unreadable or unparseable config file sets
|
|
173
|
+
* nothing, so the ladder moves on: under GSD_WORKSTREAM a broken workstream
|
|
174
|
+
* config inherits the root's `audit.enabled` (where config-get fails with
|
|
175
|
+
* CONFIG_PARSE_FAILED); otherwise the GSD_AUDIT env var alone decides.
|
|
176
|
+
*/
|
|
177
|
+
function _readAuditConfig(cwd) {
|
|
178
|
+
const { present, value } = readScopedConfigValue(cwd, ['audit', 'enabled']);
|
|
179
|
+
return { audit: { enabled: present && value === true } };
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* The DispatchLogger a live createHub() seam injects (#4975). Either
|
|
183
|
+
* GSD_AUDIT=1 or `audit.enabled: true` in the project config turns the opt-in
|
|
184
|
+
* audit trail (and the structured stderr line on error) on; neither turns the
|
|
185
|
+
* other off. When observability is off this returns undefined so the Hub keeps
|
|
186
|
+
* its no-op fallback and the default dispatch output — including the
|
|
187
|
+
* --json-errors envelope — stays byte-for-byte unchanged (#2620).
|
|
188
|
+
*
|
|
189
|
+
* `cwd` defaults exactly as createDefaultLogger's does, so the config that
|
|
190
|
+
* decides and the directory that receives the trail are always the same.
|
|
191
|
+
*/
|
|
192
|
+
function resolveDispatchLogger(cwd = process.cwd()) {
|
|
193
|
+
const config = _readAuditConfig(cwd);
|
|
194
|
+
return _isAuditEnabled(config) ? createDefaultLogger({ cwd, config }) : undefined;
|
|
195
|
+
}
|
|
196
|
+
module.exports = { createDefaultLogger, createNoOpLogger, isAuditEnabled: _isAuditEnabled, resolveDispatchLogger };
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* The OpenCode MCP entry GSD's installer writes (`mcp.gsd`, or the 2.x native `mcp.servers.gsd`).
|
|
4
|
+
* One owner for "is this entry ours" so install, uninstall and migration 011 cannot drift apart
|
|
5
|
+
* (#5333, #5338; epic #5331).
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.GSD_MCP_NO_PROMPTS_FLAG = void 0;
|
|
9
|
+
exports.isGsdMcpEntry = isGsdMcpEntry;
|
|
10
|
+
exports.hasNoPromptsFlag = hasNoPromptsFlag;
|
|
11
|
+
exports.withNoPromptsFlag = withNoPromptsFlag;
|
|
12
|
+
const package_identity_cjs_1 = require("./package-identity.cjs");
|
|
13
|
+
/** Withholds the MCP prompt catalog: OpenCode turns MCP prompts into `<server>:<prompt>` slash commands. */
|
|
14
|
+
exports.GSD_MCP_NO_PROMPTS_FLAG = '--no-prompts';
|
|
15
|
+
/**
|
|
16
|
+
* True when `entry` is the MCP server entry the installer writes: a local `npx … gsd-mcp-server`
|
|
17
|
+
* command for this package, pinned or not. A user-edited or user-defined `gsd` entry does not match.
|
|
18
|
+
* Recognizes both generations' shapes (`enabled` on 1.x, `disabled` on 2.x) because it keys only on
|
|
19
|
+
* `type` and `command`.
|
|
20
|
+
*/
|
|
21
|
+
function isGsdMcpEntry(entry) {
|
|
22
|
+
if (!entry || typeof entry !== 'object' || Array.isArray(entry))
|
|
23
|
+
return false;
|
|
24
|
+
const e = entry;
|
|
25
|
+
if (e.type !== 'local' || !Array.isArray(e.command))
|
|
26
|
+
return false;
|
|
27
|
+
const [bin, ...rest] = e.command;
|
|
28
|
+
if (bin !== 'npx' || !rest.includes('gsd-mcp-server'))
|
|
29
|
+
return false;
|
|
30
|
+
return rest.some((a) => typeof a === 'string' && (a === package_identity_cjs_1.PACKAGE_NAME || a.startsWith(`${package_identity_cjs_1.PACKAGE_NAME}@`)));
|
|
31
|
+
}
|
|
32
|
+
/** True when the entry already carries the no-prompts flag. */
|
|
33
|
+
function hasNoPromptsFlag(entry) {
|
|
34
|
+
return entry.command.includes(exports.GSD_MCP_NO_PROMPTS_FLAG);
|
|
35
|
+
}
|
|
36
|
+
/** The entry with `--no-prompts` appended to its command (other fields untouched). */
|
|
37
|
+
function withNoPromptsFlag(entry) {
|
|
38
|
+
return hasNoPromptsFlag(entry) ? entry : { ...entry, command: [...entry.command, exports.GSD_MCP_NO_PROMPTS_FLAG] };
|
|
39
|
+
}
|