@opengsd/gsd-core 1.11.0 → 1.12.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-code-fixer.md +1 -1
- package/agents/gsd-debug-session-manager.md +1 -1
- package/agents/gsd-debugger.md +1 -1
- package/agents/gsd-dom-verifier.md +169 -0
- package/agents/gsd-eval-auditor.md +1 -1
- package/agents/gsd-executor.md +17 -9
- package/agents/gsd-framework-selector.md +1 -3
- package/agents/gsd-intel-updater.md +1 -1
- package/agents/gsd-mempalace-curator.md +0 -1
- package/agents/gsd-pattern-mapper.md +11 -0
- package/agents/gsd-phase-researcher.md +3 -1
- package/agents/gsd-plan-checker.md +15 -55
- package/agents/gsd-planner.md +6 -4
- package/agents/gsd-project-researcher.md +1 -1
- package/agents/gsd-research-synthesizer.md +2 -2
- package/agents/gsd-roadmapper.md +15 -11
- package/agents/gsd-ui-checker.md +63 -4
- package/agents/gsd-ui-researcher.md +41 -3
- package/agents/gsd-verifier.md +1 -1
- package/bin/install.js +609 -134
- package/commands/gsd/discuss-phase.md +1 -1
- package/commands/gsd/import.md +1 -1
- package/commands/gsd/quick.md +8 -4
- package/gsd-core/bin/gsd-tools.cjs +567 -51
- package/gsd-core/bin/lib/active-workstream-store.cjs +8 -0
- package/gsd-core/bin/lib/adr-parser.cjs +13 -7
- package/gsd-core/bin/lib/agent-install-check.cjs +162 -0
- package/gsd-core/bin/lib/api-coverage.cjs +30 -9
- package/gsd-core/bin/lib/artifacts.cjs +2 -0
- package/gsd-core/bin/lib/assumption-delta.cjs +30 -11
- package/gsd-core/bin/lib/audit.cjs +163 -41
- package/gsd-core/bin/lib/broken-windows.cjs +306 -28
- package/gsd-core/bin/lib/capability-lock.cjs +10 -4
- package/gsd-core/bin/lib/capability-registry.cjs +336 -95
- package/gsd-core/bin/lib/capability-state.cjs +18 -3
- package/gsd-core/bin/lib/capability-validator.cjs +205 -18
- package/gsd-core/bin/lib/check-command-router.cjs +145 -5
- package/gsd-core/bin/lib/cli-exit.cjs +496 -10
- package/gsd-core/bin/lib/code-review-depth.cjs +288 -0
- package/gsd-core/bin/lib/codex-agent-toml.cjs +410 -4
- package/gsd-core/bin/lib/command-arg-projection.cjs +144 -14
- package/gsd-core/bin/lib/command-routing-hub.cjs +31 -2
- package/gsd-core/bin/lib/commands.cjs +543 -44
- package/gsd-core/bin/lib/complexity-trigger.cjs +26 -6
- package/gsd-core/bin/lib/config-loader.cjs +118 -29
- package/gsd-core/bin/lib/config.cjs +92 -2
- package/gsd-core/bin/lib/configuration.cjs +129 -37
- package/gsd-core/bin/lib/core-utils.cjs +84 -7
- package/gsd-core/bin/lib/edge-probe.cjs +9 -1
- package/gsd-core/bin/lib/estimate-cli.cjs +55 -11
- package/gsd-core/bin/lib/exit-code-registry.cjs +98 -0
- package/gsd-core/bin/lib/frontmatter.cjs +840 -305
- package/gsd-core/bin/lib/gap-checker.cjs +27 -3
- package/gsd-core/bin/lib/git-base-branch.cjs +174 -39
- package/gsd-core/bin/lib/health-diagnostic-rules/consistency.cjs +7 -3
- package/gsd-core/bin/lib/health-diagnostic-rules/roadmap-disk-consistency.cjs +6 -3
- package/gsd-core/bin/lib/health-diagnostic-rules/worktree-health.cjs +22 -8
- package/gsd-core/bin/lib/health-diagnostic.cjs +23 -3
- package/gsd-core/bin/lib/host-integration.cjs +39 -6
- package/gsd-core/bin/lib/init-command-router.cjs +118 -21
- package/gsd-core/bin/lib/init.cjs +120 -41
- package/gsd-core/bin/lib/install-engine.cjs +68 -3
- package/gsd-core/bin/lib/install-model-override-resolver.cjs +33 -1
- package/gsd-core/bin/lib/install-profiles.cjs +78 -4
- package/gsd-core/bin/lib/installer-migration-report.cjs +3 -0
- package/gsd-core/bin/lib/installer-migrations/010-antigravity-retire-confighome-artifacts.cjs +169 -0
- package/gsd-core/bin/lib/installer-migrations.cjs +10 -7
- package/gsd-core/bin/lib/intel.cjs +101 -26
- package/gsd-core/bin/lib/io.cjs +160 -15
- package/gsd-core/bin/lib/learnings.cjs +85 -14
- package/gsd-core/bin/lib/legacy-cleanup.cjs +8 -2
- package/gsd-core/bin/lib/markdown-table.cjs +52 -4
- package/gsd-core/bin/lib/milestone.cjs +90 -5
- package/gsd-core/bin/lib/model-catalog.cjs +177 -19
- package/gsd-core/bin/lib/model-resolver.cjs +10 -28
- package/gsd-core/bin/lib/onboard-projection.cjs +5 -1
- package/gsd-core/bin/lib/phase-estimation.cjs +17 -8
- package/gsd-core/bin/lib/phase-id.cjs +70 -4
- package/gsd-core/bin/lib/phase-lifecycle.cjs +24 -16
- package/gsd-core/bin/lib/phase-locator.cjs +138 -17
- package/gsd-core/bin/lib/phase.cjs +405 -84
- package/gsd-core/bin/lib/plan-document.cjs +263 -0
- package/gsd-core/bin/lib/plan-scan.cjs +13 -2
- package/gsd-core/bin/lib/planning-command-router.cjs +61 -0
- package/gsd-core/bin/lib/planning-inspect.cjs +1168 -0
- package/gsd-core/bin/lib/planning-snapshot.cjs +18 -14
- package/gsd-core/bin/lib/planning-workspace.cjs +56 -0
- package/gsd-core/bin/lib/probe-core.cjs +4 -1
- package/gsd-core/bin/lib/profile-pipeline-command-router.cjs +50 -7
- package/gsd-core/bin/lib/profile-pipeline.cjs +6 -3
- package/gsd-core/bin/lib/real-home-guard.cjs +419 -0
- package/gsd-core/bin/lib/refactor-trigger-command-router.cjs +71 -45
- package/gsd-core/bin/lib/review-lane-descriptor.cjs +9 -9
- package/gsd-core/bin/lib/roadmap-command-router.cjs +45 -31
- package/gsd-core/bin/lib/roadmap-parser.cjs +79 -16
- package/gsd-core/bin/lib/roadmap.cjs +74 -19
- package/gsd-core/bin/lib/runtime-artifact-conversion.cjs +96 -8
- package/gsd-core/bin/lib/runtime-artifact-layout.cjs +34 -1
- package/gsd-core/bin/lib/runtime-hooks-surface.cjs +287 -55
- package/gsd-core/bin/lib/runtime-identity.cjs +234 -0
- package/gsd-core/bin/lib/runtime-slash.cjs +72 -2
- package/gsd-core/bin/lib/shell-command-projection.cjs +71 -8
- package/gsd-core/bin/lib/smart-entry.cjs +12 -22
- package/gsd-core/bin/lib/spec-section.cjs +12 -7
- package/gsd-core/bin/lib/state-command-router.cjs +47 -18
- package/gsd-core/bin/lib/state-contract.cjs +359 -0
- package/gsd-core/bin/lib/state-document.cjs +186 -0
- package/gsd-core/bin/lib/state-md-schema.cjs +221 -0
- package/gsd-core/bin/lib/state-transition.cjs +517 -101
- package/gsd-core/bin/lib/state.cjs +946 -163
- package/gsd-core/bin/lib/surface.cjs +10 -2
- package/gsd-core/bin/lib/task-command-router.cjs +111 -1
- package/gsd-core/bin/lib/task-content-resolution.cjs +368 -0
- package/gsd-core/bin/lib/teams-status.cjs +4 -1
- package/gsd-core/bin/lib/uat-predicate.cjs +58 -20
- package/gsd-core/bin/lib/uat.cjs +1376 -125
- package/gsd-core/bin/lib/ui-consideration-probe.cjs +9 -1
- package/gsd-core/bin/lib/ui-safety-gate.cjs +37 -7
- package/gsd-core/bin/lib/unusable-input.cjs +13 -0
- package/gsd-core/bin/lib/validate-command-router.cjs +2 -2
- package/gsd-core/bin/lib/vendor/README.md +43 -5
- package/gsd-core/bin/lib/vendor/js-yaml.cjs +3014 -0
- package/gsd-core/bin/lib/verification.cjs +14 -1
- package/gsd-core/bin/lib/verify-command-grounding.cjs +846 -0
- package/gsd-core/bin/lib/verify.cjs +95 -40
- package/gsd-core/bin/lib/workstream-name-policy.cjs +25 -4
- package/gsd-core/bin/lib/worktree-base-ref.cjs +66 -12
- package/gsd-core/bin/lib/worktree-safety.cjs +177 -21
- package/gsd-core/bin/shared/config-defaults.manifest.json +7 -1
- package/gsd-core/bin/shared/config-schema.manifest.json +5 -0
- package/gsd-core/bin/shared/exit-codes.json +8 -0
- package/gsd-core/bin/shared/exit-codes.sh +20 -0
- package/gsd-core/bin/shared/model-catalog.json +8 -1
- package/gsd-core/references/agent-contracts.md +3 -2
- package/gsd-core/references/api-coverage.md +24 -2
- package/gsd-core/references/autonomous-smart-discuss.md +3 -3
- package/gsd-core/references/checkpoints.md +37 -19
- package/gsd-core/references/decimal-phase-calculation.md +5 -5
- package/gsd-core/references/edge-probe.md +8 -0
- package/gsd-core/references/execute-mvp-tdd.md +1 -3
- package/gsd-core/references/execute-phase-between-wave-reset.md +9 -12
- package/gsd-core/references/execute-phase-wave-guard.md +11 -9
- package/gsd-core/references/failing-direction.md +78 -0
- package/gsd-core/references/gate-prompts.md +1 -1
- package/gsd-core/references/git-integration.md +5 -5
- package/gsd-core/references/git-planning-commit.md +3 -3
- package/gsd-core/references/gsd-run-resolver.md +1 -1
- package/gsd-core/references/loop-hook-dispatch.md +22 -0
- package/gsd-core/references/model-profiles.md +1 -1
- package/gsd-core/references/nyquist-compliance.md +74 -0
- package/gsd-core/references/offer-next.md +3 -5
- package/gsd-core/references/phase-argument-parsing.md +3 -3
- package/gsd-core/references/planner-failing-direction.md +53 -0
- package/gsd-core/references/planner-human-verify-mode.md +15 -1
- package/gsd-core/references/planner-revision.md +1 -1
- package/gsd-core/references/planner-verify-command-grounding.md +17 -0
- package/gsd-core/references/planning-config.md +37 -8
- package/gsd-core/references/reviewer-instances.md +31 -0
- package/gsd-core/references/runtime-aware-dispatch.md +1 -1
- package/gsd-core/references/tdd.md +1 -3
- package/gsd-core/references/ui-brand.md +65 -21
- package/gsd-core/references/ui-consideration-probe.md +1 -1
- package/gsd-core/references/universal-anti-patterns.md +2 -2
- package/gsd-core/references/verify-command-path-resolvability.md +42 -0
- package/gsd-core/references/verify-mvp-mode.md +1 -1
- package/gsd-core/references/workstream-flag.md +11 -11
- package/gsd-core/templates/README.md +1 -1
- package/gsd-core/templates/SECURITY.md +3 -3
- package/gsd-core/templates/UI-SPEC.md +25 -3
- package/gsd-core/templates/VALIDATION.md +3 -3
- package/gsd-core/templates/phase-prompt.md +3 -0
- package/gsd-core/templates/state.md +7 -0
- 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 +3 -3
- package/gsd-core/workflows/add-tests.md +3 -8
- package/gsd-core/workflows/add-todo.md +1 -1
- package/gsd-core/workflows/ai-integration-phase.md +4 -9
- package/gsd-core/workflows/audit-fix.md +12 -3
- package/gsd-core/workflows/audit-milestone.md +9 -9
- package/gsd-core/workflows/audit-uat.md +17 -2
- package/gsd-core/workflows/autonomous/steps/converge-fail-fast.md +2 -2
- package/gsd-core/workflows/autonomous.md +10 -26
- package/gsd-core/workflows/check-todos.md +1 -1
- package/gsd-core/workflows/cleanup.md +2 -2
- package/gsd-core/workflows/code-review/steps/structural-pre-pass.md +1 -1
- package/gsd-core/workflows/code-review-fix.md +1 -1
- package/gsd-core/workflows/code-review.md +121 -40
- package/gsd-core/workflows/complete-milestone.md +15 -10
- package/gsd-core/workflows/debug.md +5 -3
- package/gsd-core/workflows/diagnose-issues.md +12 -6
- package/gsd-core/workflows/discuss-phase/modes/advisor.md +1 -1
- package/gsd-core/workflows/discuss-phase/modes/chain.md +3 -7
- package/gsd-core/workflows/discuss-phase/modes/text.md +1 -1
- package/gsd-core/workflows/discuss-phase-assumptions/steps/auto-advance-dispatch.md +1 -3
- package/gsd-core/workflows/discuss-phase-assumptions.md +2 -2
- package/gsd-core/workflows/discuss-phase.md +1 -1
- package/gsd-core/workflows/do.md +3 -6
- package/gsd-core/workflows/docs-update.md +5 -4
- package/gsd-core/workflows/edit-phase.md +1 -1
- package/gsd-core/workflows/eval-review.md +4 -9
- package/gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md +1 -1
- package/gsd-core/workflows/execute-phase/steps/executor-isolation-dispatch.md +113 -11
- package/gsd-core/workflows/execute-phase/steps/gap-closure-artifacts.md +1 -1
- package/gsd-core/workflows/execute-phase/steps/partial-wave.md +1 -1
- 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 +22 -4
- package/gsd-core/workflows/execute-phase/steps/post-merge-gate.md +2 -2
- package/gsd-core/workflows/execute-phase/steps/protected-branch.md +21 -0
- package/gsd-core/workflows/execute-phase/steps/regression-gate-run.md +2 -2
- package/gsd-core/workflows/execute-phase/steps/wave-post-gate-hooks.md +39 -0
- package/gsd-core/workflows/execute-phase.md +38 -54
- package/gsd-core/workflows/execute-plan.md +17 -12
- package/gsd-core/workflows/explore.md +1 -1
- package/gsd-core/workflows/extract-learnings.md +1 -1
- package/gsd-core/workflows/fast.md +2 -2
- package/gsd-core/workflows/forensics.md +1 -1
- package/gsd-core/workflows/graduation.md +5 -5
- package/gsd-core/workflows/health.md +3 -6
- package/gsd-core/workflows/import.md +14 -11
- package/gsd-core/workflows/inbox.md +4 -5
- package/gsd-core/workflows/ingest-docs.md +44 -11
- package/gsd-core/workflows/insert-phase.md +5 -5
- package/gsd-core/workflows/list-seeds.md +5 -3
- package/gsd-core/workflows/list-workspaces.md +1 -1
- package/gsd-core/workflows/manager.md +12 -23
- package/gsd-core/workflows/map-codebase.md +1 -1
- package/gsd-core/workflows/milestone-summary.md +1 -1
- package/gsd-core/workflows/mvp-phase.md +2 -2
- package/gsd-core/workflows/new-milestone.md +9 -21
- package/gsd-core/workflows/new-project/steps/auto-mode-config.md +1 -1
- package/gsd-core/workflows/new-project.md +12 -26
- package/gsd-core/workflows/new-workspace.md +1 -1
- package/gsd-core/workflows/next.md +2 -2
- package/gsd-core/workflows/pause-work.md +1 -1
- package/gsd-core/workflows/plan-phase/steps/adr-ingest-express-path.md +1 -1
- package/gsd-core/workflows/plan-phase/steps/chunked-planning-mode.md +1 -1
- package/gsd-core/workflows/plan-phase/steps/prd-express-path.md +2 -4
- package/gsd-core/workflows/plan-phase/steps/stall-detection-helpers.md +3 -3
- package/gsd-core/workflows/plan-phase.md +121 -42
- package/gsd-core/workflows/plan-review-convergence.md +46 -9
- package/gsd-core/workflows/plant-seed.md +2 -2
- package/gsd-core/workflows/pr-branch.md +187 -51
- package/gsd-core/workflows/profile-user.md +16 -14
- package/gsd-core/workflows/progress.md +27 -12
- package/gsd-core/workflows/quick/steps/discussion-phase.md +1 -3
- package/gsd-core/workflows/quick/steps/plan-checker-loop.md +1 -3
- package/gsd-core/workflows/quick/steps/quick-verification.md +2 -4
- package/gsd-core/workflows/quick/steps/research-phase.md +2 -4
- package/gsd-core/workflows/quick/steps/worktree-pre-dispatch-commit.md +3 -3
- package/gsd-core/workflows/quick.md +20 -29
- package/gsd-core/workflows/remove-phase.md +4 -4
- package/gsd-core/workflows/remove-workspace.md +2 -2
- package/gsd-core/workflows/resume-project.md +8 -12
- package/gsd-core/workflows/review.md +193 -15
- package/gsd-core/workflows/scan.md +1 -1
- package/gsd-core/workflows/secure-phase.md +2 -2
- package/gsd-core/workflows/settings-advanced.md +7 -9
- package/gsd-core/workflows/settings-integrations.md +64 -31
- package/gsd-core/workflows/settings.md +3 -5
- package/gsd-core/workflows/ship.md +12 -6
- package/gsd-core/workflows/sketch-wrap-up.md +11 -17
- package/gsd-core/workflows/sketch.md +12 -18
- package/gsd-core/workflows/smart-entry.md +3 -5
- package/gsd-core/workflows/spec-phase.md +23 -1
- package/gsd-core/workflows/spike-wrap-up.md +7 -11
- package/gsd-core/workflows/spike.md +20 -31
- package/gsd-core/workflows/stats.md +2 -2
- package/gsd-core/workflows/sync-skills.md +1 -1
- package/gsd-core/workflows/thread.md +11 -7
- package/gsd-core/workflows/transition.md +5 -5
- package/gsd-core/workflows/ui-phase.md +10 -16
- package/gsd-core/workflows/ui-review.md +6 -10
- package/gsd-core/workflows/ultraplan-phase.md +5 -13
- package/gsd-core/workflows/undo.md +8 -16
- package/gsd-core/workflows/update.md +6 -10
- package/gsd-core/workflows/validate-phase.md +2 -2
- package/gsd-core/workflows/verify-work/steps/automated-ui-verification.md +25 -1
- package/gsd-core/workflows/verify-work/steps/mvp-uat-framing.md +1 -1
- package/gsd-core/workflows/verify-work.md +57 -18
- package/hooks/dist/gsd-agent-isolation-guard.js +77 -38
- package/hooks/dist/gsd-config-reload.js +18 -12
- package/hooks/dist/gsd-context-monitor.js +19 -10
- package/hooks/dist/gsd-cursor-post-tool.js +3 -1
- package/hooks/dist/gsd-cursor-pre-tool.js +3 -1
- package/hooks/dist/gsd-cursor-session-start.js +2 -1
- package/hooks/dist/gsd-cursor-stop.js +2 -1
- package/hooks/dist/gsd-cursor-subagent-start.js +28 -23
- package/hooks/dist/gsd-cursor-subagent-stop.js +3 -1
- package/hooks/dist/gsd-ensure-canonical-path.js +2 -1
- package/hooks/dist/gsd-graphify-update.sh +22 -18
- package/hooks/dist/gsd-node-runner.sh +76 -0
- package/hooks/dist/gsd-phase-boundary.sh +1 -0
- package/hooks/dist/gsd-prompt-guard.js +16 -7
- package/hooks/dist/gsd-read-guard.js +16 -7
- package/hooks/dist/gsd-read-injection-scanner.js +17 -8
- package/hooks/dist/gsd-session-state.sh +1 -0
- package/hooks/dist/gsd-statusline.js +215 -26
- package/hooks/dist/gsd-validate-commit.sh +80 -6
- package/hooks/dist/gsd-windsurf-pre-command.js +16 -11
- package/hooks/dist/gsd-windsurf-pre-write.js +22 -13
- package/hooks/dist/gsd-workflow-guard.js +34 -16
- package/hooks/dist/gsd-worktree-path-guard.js +36 -21
- package/hooks/dist/gsd-write-guard.js +35 -25
- package/hooks/dist/lib/cli-exit.js +560 -0
- package/hooks/dist/lib/exit-code-registry.js +98 -0
- package/hooks/dist/lib/git-probe.js +84 -0
- package/hooks/dist/lib/hook-exit.js +81 -0
- package/hooks/dist/managed-hooks-registry.cjs +3 -0
- package/hooks/gsd-agent-isolation-guard.js +77 -38
- package/hooks/gsd-config-reload.js +18 -12
- package/hooks/gsd-context-monitor.js +19 -10
- package/hooks/gsd-cursor-post-tool.js +3 -1
- package/hooks/gsd-cursor-pre-tool.js +3 -1
- package/hooks/gsd-cursor-session-start.js +2 -1
- package/hooks/gsd-cursor-stop.js +2 -1
- package/hooks/gsd-cursor-subagent-start.js +28 -23
- package/hooks/gsd-cursor-subagent-stop.js +3 -1
- package/hooks/gsd-ensure-canonical-path.js +2 -1
- package/hooks/gsd-graphify-update.sh +22 -18
- package/hooks/gsd-node-runner.sh +76 -0
- package/hooks/gsd-phase-boundary.sh +1 -0
- package/hooks/gsd-prompt-guard.js +16 -7
- package/hooks/gsd-read-guard.js +16 -7
- package/hooks/gsd-read-injection-scanner.js +17 -8
- package/hooks/gsd-session-state.sh +1 -0
- package/hooks/gsd-statusline.js +215 -26
- package/hooks/gsd-validate-commit.sh +80 -6
- package/hooks/gsd-windsurf-pre-command.js +16 -11
- package/hooks/gsd-windsurf-pre-write.js +22 -13
- package/hooks/gsd-workflow-guard.js +34 -16
- package/hooks/gsd-worktree-path-guard.js +36 -21
- package/hooks/gsd-write-guard.js +35 -25
- package/hooks/lib/cli-exit.js +560 -0
- package/hooks/lib/exit-code-registry.js +98 -0
- package/hooks/lib/git-probe.js +84 -0
- package/hooks/lib/hook-exit.js +81 -0
- package/hooks/managed-hooks-registry.cjs +3 -0
- package/package.json +12 -7
- package/scripts/base64-scan.sh +74 -12
- package/scripts/build-hooks.js +5 -0
- package/scripts/check-glossary-refs.cjs +77 -15
- package/scripts/check-mutation-score-ratchet.cjs +156 -0
- package/scripts/ci-check-job-near-cap.cjs +49 -0
- package/scripts/ci-pr-mergeability.cjs +262 -0
- package/scripts/ci-test-scope.cjs +45 -12
- package/scripts/ci-timeout-report.cjs +230 -0
- package/scripts/docs-guard-registry.cjs +396 -0
- package/scripts/gen-capability-registry.cjs +8 -6
- package/scripts/gen-exit-code-docs.cjs +318 -0
- package/scripts/gen-exit-code-registry.cjs +891 -0
- package/scripts/gen-features.cjs +836 -0
- package/scripts/gen-hooks-cli-exit.cjs +239 -0
- package/scripts/gen-install-tree-fixtures.cjs +2 -2
- package/scripts/gen-loop-host-contract.cjs +134 -1
- package/scripts/gen-scripts-cli-exit.cjs +185 -0
- package/scripts/gen-state-md-docs.cjs +727 -0
- package/scripts/{test-failure-reasons.cjs → gsd-test-gate-reasons.cjs} +6 -0
- package/scripts/lib/ci-job-timing.cjs +72 -0
- package/scripts/lib/cli-exit.cjs +546 -44
- package/scripts/lib/drift-scan.cjs +32 -2
- package/scripts/lib/exit-code-registry.cjs +98 -0
- package/scripts/lib/ndjson-reporter.cjs +119 -0
- package/scripts/lint-allow-test-rule-refs.unverified-ceiling.json +1 -1
- package/scripts/lint-docs-guard-registration.cjs +495 -0
- package/scripts/lint-docs-guard-registration.exempt-baseline.cjs +193 -0
- package/scripts/lint-eslint-glob-coverage.allowlist.json +4 -0
- package/scripts/{lint-fix-has-regression-test.cjs → lint-fix-has-regression-tests.cjs} +12 -6
- package/scripts/lint-health-diagnostic-rule-table.cjs +65 -8
- package/scripts/lint-mutation-test-derivation-drift.cjs +86 -0
- package/scripts/lint-phase-enumeration-drift.cjs +21 -8
- package/scripts/lint-planning-prompt-drift.cjs +38 -1
- package/scripts/lint-removed-but-needed.cjs +184 -16
- package/scripts/lint-seam-enforcement.cjs +182 -0
- package/scripts/lint-slug-derivation-drift.cjs +921 -0
- package/scripts/lint-source-test-name-collision.cjs +241 -0
- package/scripts/lint-state-write-path-drift.cjs +337 -432
- package/scripts/lint-test-file-count.allowlist.json +122 -4
- package/scripts/lint-test-file-count.cjs +25 -3
- package/scripts/lint-unreachable-guard-drift.cjs +51 -64
- package/scripts/lint-vendored-deps.cjs +208 -35
- package/scripts/mutation-matrix.cjs +599 -50
- package/scripts/prompt-injection-scan.sh +75 -14
- package/scripts/secret-scan.sh +75 -13
- package/scripts/select-docs-guards.cjs +56 -0
- package/scripts/sync-runtime-launcher.cjs +22 -3
- package/skills/gsd-discuss-phase/SKILL.md +1 -1
- package/skills/gsd-import/SKILL.md +1 -1
- package/skills/gsd-quick/SKILL.md +8 -4
- package/vscode/package.json +1 -1
- package/bin/lib/ui-safety-gate.cjs +0 -109
- package/scripts/lint-emitted-drift-ack.cjs +0 -344
- package/scripts/state-write-path-drift-baseline.json +0 -19
|
@@ -37,6 +37,7 @@ const { getDirName } = runtimeNamePolicy;
|
|
|
37
37
|
const capabilityRegistry = require("./capability-registry.cjs");
|
|
38
38
|
const hostIntegration = require("./host-integration.cjs");
|
|
39
39
|
const shell_command_projection_cjs_1 = require("./shell-command-projection.cjs");
|
|
40
|
+
const frontmatterModule = require("./frontmatter.cjs");
|
|
40
41
|
const pattern_cjs_1 = require("./pattern.cjs");
|
|
41
42
|
const markdown_sectionizer_cjs_1 = require("./markdown-sectionizer.cjs");
|
|
42
43
|
// #2870: install-scope.cts is a leaf-tier sibling (imports only
|
|
@@ -847,7 +848,8 @@ function buildKimiAgentArtifacts({ rootAgent = '', subagents = [], requestedSuba
|
|
|
847
848
|
/**
|
|
848
849
|
* Apply Antigravity-specific content conversion — path replacement + command name conversion.
|
|
849
850
|
* Path mappings depend on install mode:
|
|
850
|
-
* Global: ~/.claude/ → ~/.gemini/
|
|
851
|
+
* Global: ~/.claude/skills/ → ~/.gemini/config/skills/ (#3738),
|
|
852
|
+
* ~/.claude/ → ~/.gemini/antigravity/, ./.claude/ → ./.agents/
|
|
851
853
|
* Local: ~/.claude/ → .agents/, ./.claude/ → ./.agents/
|
|
852
854
|
* Applied to ALL Antigravity content (skills, agents, engine files).
|
|
853
855
|
* @param {string} content - Source content to convert
|
|
@@ -856,6 +858,18 @@ function buildKimiAgentArtifacts({ rootAgent = '', subagents = [], requestedSuba
|
|
|
856
858
|
function convertClaudeToAntigravityContent(content, isGlobal = false) {
|
|
857
859
|
let c = content;
|
|
858
860
|
if (isGlobal) {
|
|
861
|
+
// #3738: global skills install under ~/.gemini/config/skills (the dir AGY
|
|
862
|
+
// scans for global discovery), so skills-path references must divert there
|
|
863
|
+
// — BEFORE the configHome rewrite below, which is correct for gsd-core
|
|
864
|
+
// runtime-file references (settings, workflows, VERSION) but wrong for the
|
|
865
|
+
// skills dir itself.
|
|
866
|
+
c = c.replace(/\$HOME\/\.claude\/skills\//g, '$HOME/.gemini/config/skills/');
|
|
867
|
+
c = c.replace(/~\/\.claude\/skills\//g, '~/.gemini/config/skills/');
|
|
868
|
+
// Bare skills form (no trailing slash) — must also precede the generic
|
|
869
|
+
// slash rule, which would otherwise divert it to the retired configHome
|
|
870
|
+
// path ($HOME/.gemini/antigravity/skills).
|
|
871
|
+
c = c.replace(/\$HOME\/\.claude\/skills\b/g, '$HOME/.gemini/config/skills');
|
|
872
|
+
c = c.replace(/~\/\.claude\/skills\b/g, '~/.gemini/config/skills');
|
|
859
873
|
c = c.replace(/\$HOME\/\.claude\//g, '$HOME/.gemini/antigravity/');
|
|
860
874
|
c = c.replace(/~\/\.claude\//g, '~/.gemini/antigravity/');
|
|
861
875
|
// Bare form (no trailing slash) — must come after slash form to avoid double-replace
|
|
@@ -1702,7 +1716,26 @@ function neutralizeAgentReferences(content, instructionFile) {
|
|
|
1702
1716
|
c = c.replace(/Do NOT load full `AGENTS\.md` files[^\n]*/g, '');
|
|
1703
1717
|
return c;
|
|
1704
1718
|
}
|
|
1705
|
-
|
|
1719
|
+
/**
|
|
1720
|
+
* Render one frontmatter `key: value` line whose value came from user config.
|
|
1721
|
+
*
|
|
1722
|
+
* #3706: both `model:` and `variant:` interpolate a value read from
|
|
1723
|
+
* `.planning/config.json` / `~/.gsd/defaults.json`. Raw interpolation lets a value
|
|
1724
|
+
* containing a newline inject additional TOP-LEVEL frontmatter keys into the
|
|
1725
|
+
* generated agent file — proven by execution during the #3705 security review
|
|
1726
|
+
* (`"sonnet\ntools: [\"*\"]\npermission: bypass"` produced two extra keys).
|
|
1727
|
+
*
|
|
1728
|
+
* That sink predates #3706, but this change adds a SECOND write to it, so it is
|
|
1729
|
+
* closed here rather than doubled. Both the decision and the escaping live in
|
|
1730
|
+
* frontmatter.cts so there is exactly one set of YAML scalar rules; a value that
|
|
1731
|
+
* round-trips bare is still emitted bare, so generated files do not churn.
|
|
1732
|
+
*/
|
|
1733
|
+
function frontmatterScalar(key, value) {
|
|
1734
|
+
return frontmatterModule.agentScalarNeedsDoubleQuoting(value)
|
|
1735
|
+
? `${key} "${frontmatterModule.escapeDoubleQuotedScalar(value)}"`
|
|
1736
|
+
: `${key} ${value}`;
|
|
1737
|
+
}
|
|
1738
|
+
function convertClaudeToOpencodeFrontmatter(content, { isAgent = false, modelOverride = null, variant = null } = {}) {
|
|
1706
1739
|
// Replace tool name references in content (applies to all files)
|
|
1707
1740
|
let convertedContent = content;
|
|
1708
1741
|
convertedContent = convertedContent.replace(/\bAskUserQuestion\b/g, 'question');
|
|
@@ -1827,7 +1860,23 @@ function convertClaudeToOpencodeFrontmatter(content, { isAgent = false, modelOve
|
|
|
1827
1860
|
// respected on OpenCode (which uses static agent frontmatter, not inline
|
|
1828
1861
|
// Task() model parameters). See #2256.
|
|
1829
1862
|
if (modelOverride) {
|
|
1830
|
-
newLines.push(
|
|
1863
|
+
newLines.push(frontmatterScalar('model:', modelOverride));
|
|
1864
|
+
}
|
|
1865
|
+
// #3706: deliver the RESOLVED reasoning effort to the spawned subagent.
|
|
1866
|
+
// `query resolve-model` reported an effort that never reached OpenCode, so
|
|
1867
|
+
// every subagent ran at whatever opencode.jsonc defaults the model to — for
|
|
1868
|
+
// a custom provider commonly the most expensive setting.
|
|
1869
|
+
//
|
|
1870
|
+
// OpenCode ONLY: `EFFORT_ARGV` declares surfaces for claude/opencode/codex
|
|
1871
|
+
// and NO kilo entry, so the Kilo converter below deliberately does not emit
|
|
1872
|
+
// this. Unlike the model side — where #2794 J8 requires kilo and opencode to
|
|
1873
|
+
// resolve identically — there is no kilo effort surface to render into, and
|
|
1874
|
+
// inventing one would emit a key that runtime never documented.
|
|
1875
|
+
//
|
|
1876
|
+
// Omitted entirely when absent, per #1156's rule for `model: inherit`:
|
|
1877
|
+
// never an empty or sentinel value, let the runtime use its own default.
|
|
1878
|
+
if (variant) {
|
|
1879
|
+
newLines.push(frontmatterScalar('variant:', variant));
|
|
1831
1880
|
}
|
|
1832
1881
|
}
|
|
1833
1882
|
// For commands: add tools object if we had allowed-tools or tools
|
|
@@ -1999,7 +2048,7 @@ function convertClaudeToKiloFrontmatter(content, { isAgent = false, modelOverrid
|
|
|
1999
2048
|
// model emission exactly (#2093 UPGRADE 2 / ADR-1239; Kilo is an OpenCode
|
|
2000
2049
|
// fork with the same static-frontmatter model constraint). See #2256.
|
|
2001
2050
|
if (modelOverride) {
|
|
2002
|
-
newLines.push(
|
|
2051
|
+
newLines.push(frontmatterScalar('model:', modelOverride));
|
|
2003
2052
|
}
|
|
2004
2053
|
newLines.push(...buildKiloAgentPermissionBlock(agentTools));
|
|
2005
2054
|
}
|
|
@@ -2692,7 +2741,13 @@ function restoreClaudeGlobalAtRefTilde(content, pathPrefix) {
|
|
|
2692
2741
|
return content;
|
|
2693
2742
|
const tildeEquivalent = '~' + pathPrefix.slice('$HOME'.length);
|
|
2694
2743
|
const atRefRe = new RegExp(`(?<!["'])@${(0, pattern_cjs_1.escapeRegex)(pathPrefix)}`, 'g');
|
|
2695
|
-
|
|
2744
|
+
// Function replacement, not a string. A string replacement treats `$&` and the
|
|
2745
|
+
// backtick-dollar form in the SUBSTITUTION as special patterns, so a --config-dir
|
|
2746
|
+
// containing either corrupts output: `$HOME/.cl$&ude/` yielded
|
|
2747
|
+
// `@~/.cl@$HOME/.cl$&ude/ude/x`, and the backtick form silently DROPPED text.
|
|
2748
|
+
// Pre-existing, and #3719 adds a THIRD call site to this sink — which is how the
|
|
2749
|
+
// previous two came to share the defect in the first place.
|
|
2750
|
+
return content.replace(atRefRe, () => `@${tildeEquivalent}`);
|
|
2696
2751
|
}
|
|
2697
2752
|
/**
|
|
2698
2753
|
* Apply the per-runtime rewrite table to a single content string.
|
|
@@ -3124,8 +3179,34 @@ function applyAgentPathRewrites(content, runtime, pathPrefix) {
|
|
|
3124
3179
|
const normalizedPathPrefix = pathPrefix.replace(/\/$/, '');
|
|
3125
3180
|
content = content.replace(/~\/\.claude\//g, pathPrefix);
|
|
3126
3181
|
content = content.replace(/\$HOME\/\.claude\//g, pathPrefix);
|
|
3127
|
-
|
|
3128
|
-
|
|
3182
|
+
// #3719 review (MAJOR): a bare `\b` is satisfied by ANY non-word character,
|
|
3183
|
+
// including '-' — for a --config-dir whose name EXTENDS '.claude' (e.g.
|
|
3184
|
+
// '.claude-work'), this re-matched the '.claude' PREFIX of the emitted
|
|
3185
|
+
// '.claude-work' path and corrupted it to '.claude-work-work'. Guard with
|
|
3186
|
+
// the SAME negative-lookahead convention already used at
|
|
3187
|
+
// copyWithPathReplacement's call site (bin/install.js:7729-7730).
|
|
3188
|
+
content = content.replace(/~\/\.claude(?![\w-])/g, normalizedPathPrefix);
|
|
3189
|
+
content = content.replace(/\$HOME\/\.claude(?![\w-])/g, normalizedPathPrefix);
|
|
3190
|
+
// #3719: the THIRD emit path that needed this restore. #3133 added it to the
|
|
3191
|
+
// skill/command pipeline (`_applyRuntimeRewrites` case 'claude') and #3544 to
|
|
3192
|
+
// bin/install.js's spec-tree copy; the agents pipeline never got it, so every
|
|
3193
|
+
// `@~/.claude/...` include in a global Claude install shipped as `@$HOME/...`
|
|
3194
|
+
// and resolved to NOTHING (27 of 34 emitted agents, 103 lines).
|
|
3195
|
+
//
|
|
3196
|
+
// Guarded on `claude` for the same reason the sibling call site lives inside
|
|
3197
|
+
// `case 'claude'`: the helper self-guards only on the `$HOME` PREFIX, and every
|
|
3198
|
+
// runtime's global prefix is a `$HOME` form (`$HOME/.cursor/`, ...), so an
|
|
3199
|
+
// unguarded call would rewrite `@`-refs for runtimes whose resolver has no
|
|
3200
|
+
// documented `~` expansion at all.
|
|
3201
|
+
//
|
|
3202
|
+
// Passed the NORMALIZED prefix, not `pathPrefix`. The two word-boundary
|
|
3203
|
+
// replaces above emit the trailing-slash-free form, and the helper's regex is
|
|
3204
|
+
// anchored to the exact prefix string it is handed — so `restore(pathPrefix)`
|
|
3205
|
+
// fixes `@$HOME/.claude/x` and leaves a bare `@$HOME/.claude` broken. The
|
|
3206
|
+
// normalized form is a PREFIX of both, so one call covers both.
|
|
3207
|
+
if (runtime === 'claude') {
|
|
3208
|
+
content = restoreClaudeGlobalAtRefTilde(content, normalizedPathPrefix);
|
|
3209
|
+
}
|
|
3129
3210
|
return content;
|
|
3130
3211
|
}
|
|
3131
3212
|
// ── End rewrite engine ────────────────────────────────────────────────────────
|
|
@@ -3243,7 +3324,14 @@ function applyAgentFrontmatterExtensions(content, { runtime, agentName, targetDi
|
|
|
3243
3324
|
// effort key, so skipping injection is the whole job.
|
|
3244
3325
|
if (universalEffort !== 'inherit') {
|
|
3245
3326
|
const renderedEffort = _getGsdEffortCatalog().renderEffortForRuntime(runtime, universalEffort).value;
|
|
3246
|
-
|
|
3327
|
+
// #3007: `value` is `string | null` — a rejected/unrenderable level (e.g.
|
|
3328
|
+
// 'ultra', or a catalog with no advertised level at or above the request)
|
|
3329
|
+
// renders null. Same posture as the 'inherit' case above: omit the key
|
|
3330
|
+
// entirely rather than writing a literal `effort: null`, so the host
|
|
3331
|
+
// falls back to its own default instead of failing to parse.
|
|
3332
|
+
if (renderedEffort !== null) {
|
|
3333
|
+
result = injectEffortFrontmatter(result, renderedEffort);
|
|
3334
|
+
}
|
|
3247
3335
|
}
|
|
3248
3336
|
const disallowedTools = READONLY_AGENT_DISALLOWED_TOOLS[agentName];
|
|
3249
3337
|
if (disallowedTools)
|
|
@@ -36,6 +36,10 @@ const conversionExports = runtimeArtifactConversion;
|
|
|
36
36
|
// rather than re-deriving the chain per runtime.
|
|
37
37
|
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
38
38
|
const installModelOverrideResolver = require("./install-model-override-resolver.cjs");
|
|
39
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports -- export= CommonJS module, same as the sibling resolver import above
|
|
40
|
+
const installEffortResolver = require("./install-effort-resolver.cjs");
|
|
41
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports -- export= CommonJS module, same as the sibling resolver import above
|
|
42
|
+
const modelCatalog = require("./model-catalog.cjs");
|
|
39
43
|
const shell_command_projection_cjs_1 = require("./shell-command-projection.cjs");
|
|
40
44
|
// #2870: `isGlobalScope` centralizes the `scope === 'global'` boolean
|
|
41
45
|
// projection both kind-builder closures below need at the converters'
|
|
@@ -346,11 +350,40 @@ function convertedAgentsKind(destSubpath, prefix, converterName, configDir, scop
|
|
|
346
350
|
const overrideTargetDir = agentCtx?.targetDir ?? configDir;
|
|
347
351
|
const modelOverrides = installModelOverrideResolver.readGsdEffectiveModelOverrides(overrideTargetDir);
|
|
348
352
|
const runtimeResolver = installModelOverrideResolver.readGsdRuntimeProfileResolver(overrideTargetDir);
|
|
353
|
+
// #3706: the resolved reasoning effort, threaded exactly as the model is —
|
|
354
|
+
// config read ONCE per stage(), per-agent value resolved per file.
|
|
355
|
+
//
|
|
356
|
+
// Gated on the effort config being PRESENT, not on a value coming back.
|
|
357
|
+
// `resolveInstallTimeEffort` always returns something (measured: 'high'
|
|
358
|
+
// even with no project config and no effort block), so "skip when
|
|
359
|
+
// resolution yields no value" has no trigger and would stamp `variant:`
|
|
360
|
+
// into every generated agent file for every existing install. OpenCode's
|
|
361
|
+
// built-in variant sets are provider-specific upstream (Anthropic ships
|
|
362
|
+
// only `high`/`max`), so a level GSD resolved is not guaranteed to name a
|
|
363
|
+
// variant the user's provider actually has — emitting one unasked-for is
|
|
364
|
+
// the risk this gate avoids. #1156's rule for `model: inherit` is the
|
|
365
|
+
// precedent: do not emit a key the runtime may not understand.
|
|
366
|
+
//
|
|
367
|
+
// OpenCode only; the kilo converter ignores the field (no EFFORT_ARGV.kilo).
|
|
368
|
+
const effortConfig = converterName === 'convertClaudeToOpencodeFrontmatter'
|
|
369
|
+
? installEffortResolver.readGsdEffectiveEffortConfig(overrideTargetDir)
|
|
370
|
+
: null;
|
|
349
371
|
converter = (content, _isGlobal, meta) => {
|
|
350
372
|
const modelOverride = meta
|
|
351
373
|
? installModelOverrideResolver.resolveAgentModelOverride(meta.agentName, modelOverrides, runtimeResolver)
|
|
352
374
|
: null;
|
|
353
|
-
|
|
375
|
+
// The universal level is NOT emitted raw. `clampEffortForHost` is the
|
|
376
|
+
// declared OpenCode effort capability (EFFORT_ARGV.opencode: its own
|
|
377
|
+
// `supported` set + `clamp`), and it is what rejects a level that is
|
|
378
|
+
// not a wire value — most importantly `inherit`, which per #3533 (10d)
|
|
379
|
+
// means "omit the key and follow the host default" and must never be
|
|
380
|
+
// written literally. Anything unsupported clamps to null, which omits
|
|
381
|
+
// the key rather than inventing one.
|
|
382
|
+
const universal = effortConfig && meta
|
|
383
|
+
? installEffortResolver.resolveInstallTimeEffort(effortConfig, meta.agentName)
|
|
384
|
+
: null;
|
|
385
|
+
const variant = universal ? modelCatalog.clampEffortForHost('opencode', universal) : null;
|
|
386
|
+
return rawConverter(content, { isAgent: true, modelOverride, variant });
|
|
354
387
|
};
|
|
355
388
|
}
|
|
356
389
|
else {
|