@pareto4/pp-core 1.5.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/plugin.json +23 -0
- package/GEMINI.md +53 -0
- package/LICENSE +22 -0
- package/README.md +100 -0
- package/agents/pp-advisor-researcher.md +108 -0
- package/agents/pp-ai-researcher.md +114 -0
- package/agents/pp-assumptions-analyzer.md +105 -0
- package/agents/pp-code-fixer.md +669 -0
- package/agents/pp-code-reviewer.md +387 -0
- package/agents/pp-codebase-mapper.md +853 -0
- package/agents/pp-debug-session-manager.md +315 -0
- package/agents/pp-debugger.md +1453 -0
- package/agents/pp-doc-classifier.md +168 -0
- package/agents/pp-doc-synthesizer.md +204 -0
- package/agents/pp-doc-verifier.md +217 -0
- package/agents/pp-doc-writer.md +616 -0
- package/agents/pp-domain-researcher.md +147 -0
- package/agents/pp-eval-auditor.md +191 -0
- package/agents/pp-eval-planner.md +154 -0
- package/agents/pp-executor.md +808 -0
- package/agents/pp-framework-selector.md +160 -0
- package/agents/pp-integration-checker.md +470 -0
- package/agents/pp-intel-updater.md +339 -0
- package/agents/pp-mempalace-curator.md +47 -0
- package/agents/pp-nyquist-auditor.md +204 -0
- package/agents/pp-pattern-mapper.md +335 -0
- package/agents/pp-phase-researcher.md +867 -0
- package/agents/pp-plan-checker.md +988 -0
- package/agents/pp-planner.md +1052 -0
- package/agents/pp-project-researcher.md +612 -0
- package/agents/pp-research-synthesizer.md +260 -0
- package/agents/pp-roadmapper.md +741 -0
- package/agents/pp-security-auditor.md +156 -0
- package/agents/pp-ui-auditor.md +495 -0
- package/agents/pp-ui-checker.md +309 -0
- package/agents/pp-ui-researcher.md +375 -0
- package/agents/pp-user-profiler.md +171 -0
- package/agents/pp-verifier.md +967 -0
- package/assets/gsd-logo-2000-transparent.png +0 -0
- package/assets/gsd-logo-2000-transparent.svg +17 -0
- package/assets/gsd-logo-2000.png +0 -0
- package/assets/gsd-logo-2000.svg +21 -0
- package/assets/terminal.svg +68 -0
- package/bin/install.js +12370 -0
- package/bin/lib/ui-safety-gate.cjs +107 -0
- package/commands/pp-add-tests.md +42 -0
- package/commands/pp-ai-integration-phase.md +37 -0
- package/commands/pp-audit-fix.md +34 -0
- package/commands/pp-audit-milestone.md +37 -0
- package/commands/pp-audit-uat.md +24 -0
- package/commands/pp-autonomous.md +51 -0
- package/commands/pp-capture.md +62 -0
- package/commands/pp-cleanup.md +24 -0
- package/commands/pp-code-review.md +59 -0
- package/commands/pp-complete-milestone.md +143 -0
- package/commands/pp-config.md +56 -0
- package/commands/pp-debug.md +52 -0
- package/commands/pp-discovery.md +34 -0
- package/commands/pp-discuss-phase.md +77 -0
- package/commands/pp-docs-update.md +49 -0
- package/commands/pp-eval-review.md +33 -0
- package/commands/pp-execute-phase.md +65 -0
- package/commands/pp-explore.md +27 -0
- package/commands/pp-extract-learnings.md +23 -0
- package/commands/pp-fast.md +31 -0
- package/commands/pp-forensics.md +57 -0
- package/commands/pp-graphify.md +204 -0
- package/commands/pp-health.md +31 -0
- package/commands/pp-help.md +28 -0
- package/commands/pp-import.md +45 -0
- package/commands/pp-inbox.md +39 -0
- package/commands/pp-ingest-docs.md +42 -0
- package/commands/pp-manager.md +45 -0
- package/commands/pp-map-codebase.md +83 -0
- package/commands/pp-mempalace-capture.md +71 -0
- package/commands/pp-mempalace-recall.md +102 -0
- package/commands/pp-milestone-summary.md +51 -0
- package/commands/pp-mvp-phase.md +45 -0
- package/commands/pp-new-milestone.md +45 -0
- package/commands/pp-new-project.md +47 -0
- package/commands/pp-ns-context.md +25 -0
- package/commands/pp-ns-ideate.md +24 -0
- package/commands/pp-ns-manage.md +36 -0
- package/commands/pp-ns-project.md +27 -0
- package/commands/pp-ns-review.md +29 -0
- package/commands/pp-ns-workflow.md +35 -0
- package/commands/pp-pause-work.md +43 -0
- package/commands/pp-phase.md +56 -0
- package/commands/pp-plan-phase.md +63 -0
- package/commands/pp-plan-review-convergence.md +60 -0
- package/commands/pp-pr-branch.md +26 -0
- package/commands/pp-profile-user.md +46 -0
- package/commands/pp-progress.md +49 -0
- package/commands/pp-quick.md +174 -0
- package/commands/pp-resume-work.md +30 -0
- package/commands/pp-review-backlog.md +63 -0
- package/commands/pp-review.md +42 -0
- package/commands/pp-secure-phase.md +36 -0
- package/commands/pp-settings.md +29 -0
- package/commands/pp-ship.md +24 -0
- package/commands/pp-sketch.md +60 -0
- package/commands/pp-spec-phase.md +63 -0
- package/commands/pp-spike.md +57 -0
- package/commands/pp-stats.md +20 -0
- package/commands/pp-surface.md +162 -0
- package/commands/pp-thread.md +24 -0
- package/commands/pp-ui-phase.md +35 -0
- package/commands/pp-ui-review.md +33 -0
- package/commands/pp-ultraplan-phase.md +34 -0
- package/commands/pp-undo.md +35 -0
- package/commands/pp-update.md +49 -0
- package/commands/pp-validate-phase.md +36 -0
- package/commands/pp-verify-work.md +39 -0
- package/commands/pp-workspace.md +52 -0
- package/commands/pp-workstreams.md +70 -0
- package/gemini-extension.json +6 -0
- package/hooks/dist/lib/git-cmd.js +150 -0
- package/hooks/dist/lib/pp-graphify-rebuild.sh +65 -0
- package/hooks/dist/managed-hooks-registry.cjs +39 -0
- package/hooks/dist/pp-check-update-worker.js +108 -0
- package/hooks/dist/pp-check-update.js +66 -0
- package/hooks/dist/pp-config-reload.js +133 -0
- package/hooks/dist/pp-context-monitor.js +196 -0
- package/hooks/dist/pp-cursor-post-tool.js +75 -0
- package/hooks/dist/pp-cursor-session-start.js +52 -0
- package/hooks/dist/pp-ensure-canonical-path.js +305 -0
- package/hooks/dist/pp-graphify-update.sh +158 -0
- package/hooks/dist/pp-phase-boundary.sh +47 -0
- package/hooks/dist/pp-prompt-guard.js +97 -0
- package/hooks/dist/pp-read-guard.js +101 -0
- package/hooks/dist/pp-read-injection-scanner.js +203 -0
- package/hooks/dist/pp-session-state.sh +59 -0
- package/hooks/dist/pp-statusline.js +566 -0
- package/hooks/dist/pp-update-banner.js +138 -0
- package/hooks/dist/pp-validate-commit.sh +57 -0
- package/hooks/dist/pp-workflow-guard.js +167 -0
- package/hooks/dist/pp-worktree-path-guard.js +185 -0
- package/hooks/hooks.json +70 -0
- package/hooks/lib/git-cmd.js +150 -0
- package/hooks/lib/pp-graphify-rebuild.sh +65 -0
- package/hooks/managed-hooks-registry.cjs +39 -0
- package/hooks/pp-check-update-worker.js +108 -0
- package/hooks/pp-check-update.js +66 -0
- package/hooks/pp-config-reload.js +133 -0
- package/hooks/pp-context-monitor.js +196 -0
- package/hooks/pp-cursor-post-tool.js +75 -0
- package/hooks/pp-cursor-session-start.js +52 -0
- package/hooks/pp-ensure-canonical-path.js +305 -0
- package/hooks/pp-graphify-update.sh +158 -0
- package/hooks/pp-phase-boundary.sh +47 -0
- package/hooks/pp-prompt-guard.js +97 -0
- package/hooks/pp-read-guard.js +101 -0
- package/hooks/pp-read-injection-scanner.js +203 -0
- package/hooks/pp-session-state.sh +59 -0
- package/hooks/pp-statusline.js +566 -0
- package/hooks/pp-update-banner.js +138 -0
- package/hooks/pp-validate-commit.sh +57 -0
- package/hooks/pp-workflow-guard.js +167 -0
- package/hooks/pp-worktree-path-guard.js +185 -0
- package/package.json +125 -0
- package/pp-core/bin/check-latest-version.cjs +161 -0
- package/pp-core/bin/lib/active-workstream-store.cjs +297 -0
- package/pp-core/bin/lib/adr-parser.cjs +399 -0
- package/pp-core/bin/lib/agent-command-router.cjs +68 -0
- package/pp-core/bin/lib/agent-install-check.cjs +143 -0
- package/pp-core/bin/lib/artifacts.cjs +51 -0
- package/pp-core/bin/lib/audit-command-router.cjs +61 -0
- package/pp-core/bin/lib/audit.cjs +743 -0
- package/pp-core/bin/lib/capability-activation.cjs +113 -0
- package/pp-core/bin/lib/capability-registry.cjs +3727 -0
- package/pp-core/bin/lib/capability-state.cjs +497 -0
- package/pp-core/bin/lib/capability-writer.cjs +355 -0
- package/pp-core/bin/lib/check-command-router.cjs +800 -0
- package/pp-core/bin/lib/cjs-command-router-adapter.cjs +81 -0
- package/pp-core/bin/lib/cli-exit.cjs +61 -0
- package/pp-core/bin/lib/clock.cjs +95 -0
- package/pp-core/bin/lib/clusters.cjs +131 -0
- package/pp-core/bin/lib/code-review-flags.cjs +59 -0
- package/pp-core/bin/lib/command-aliases.cjs +809 -0
- package/pp-core/bin/lib/command-arg-projection.cjs +55 -0
- package/pp-core/bin/lib/command-roster.cjs +19 -0
- package/pp-core/bin/lib/command-routing-hub.cjs +300 -0
- package/pp-core/bin/lib/commands.cjs +1244 -0
- package/pp-core/bin/lib/config-loader.cjs +714 -0
- package/pp-core/bin/lib/config-schema.cjs +58 -0
- package/pp-core/bin/lib/config-types.cjs +20 -0
- package/pp-core/bin/lib/config.cjs +796 -0
- package/pp-core/bin/lib/configuration.cjs +209 -0
- package/pp-core/bin/lib/context-utilization.cjs +48 -0
- package/pp-core/bin/lib/core-utils.cjs +198 -0
- package/pp-core/bin/lib/decisions.cjs +136 -0
- package/pp-core/bin/lib/docs.cjs +264 -0
- package/pp-core/bin/lib/drift.cjs +364 -0
- package/pp-core/bin/lib/edge-probe.cjs +196 -0
- package/pp-core/bin/lib/fallow-runner.cjs +153 -0
- package/pp-core/bin/lib/federated-config.cjs +182 -0
- package/pp-core/bin/lib/frontmatter.cjs +494 -0
- package/pp-core/bin/lib/gap-checker.cjs +260 -0
- package/pp-core/bin/lib/git-base-branch.cjs +220 -0
- package/pp-core/bin/lib/graphify-command-router.cjs +72 -0
- package/pp-core/bin/lib/graphify.cjs +472 -0
- package/pp-core/bin/lib/gsd2-import.cjs +456 -0
- package/pp-core/bin/lib/init-command-router.cjs +62 -0
- package/pp-core/bin/lib/init.cjs +1912 -0
- package/pp-core/bin/lib/install-profiles.cjs +814 -0
- package/pp-core/bin/lib/installer-migration-authoring.cjs +122 -0
- package/pp-core/bin/lib/installer-migration-report.cjs +351 -0
- package/pp-core/bin/lib/installer-migrations/000-first-time-baseline.cjs +225 -0
- package/pp-core/bin/lib/installer-migrations/001-legacy-orphan-files.cjs +48 -0
- package/pp-core/bin/lib/installer-migrations/002-codex-legacy-hooks-json.cjs +94 -0
- package/pp-core/bin/lib/installer-migrations/003-rename-get-shit-done-to-gsd-core.cjs +108 -0
- package/pp-core/bin/lib/installer-migrations/004-prune-stale-pristine-snapshots.cjs +123 -0
- package/pp-core/bin/lib/installer-migrations/005-rename-gsd-core-to-pp-core.cjs +109 -0
- package/pp-core/bin/lib/installer-migrations/006-rename-gsd-command-namespace.cjs +135 -0
- package/pp-core/bin/lib/installer-migrations.cjs +823 -0
- package/pp-core/bin/lib/intel-command-router.cjs +119 -0
- package/pp-core/bin/lib/intel.cjs +584 -0
- package/pp-core/bin/lib/io.cjs +220 -0
- package/pp-core/bin/lib/learnings.cjs +270 -0
- package/pp-core/bin/lib/legacy-cleanup.cjs +253 -0
- package/pp-core/bin/lib/loop-host-contract.cjs +105 -0
- package/pp-core/bin/lib/loop-resolver.cjs +479 -0
- package/pp-core/bin/lib/milestone.cjs +381 -0
- package/pp-core/bin/lib/model-catalog.cjs +154 -0
- package/pp-core/bin/lib/model-profiles.cjs +24 -0
- package/pp-core/bin/lib/model-resolver.cjs +467 -0
- package/pp-core/bin/lib/observability/event.cjs +51 -0
- package/pp-core/bin/lib/observability/logger.cjs +146 -0
- package/pp-core/bin/lib/observability/redaction.cjs +48 -0
- package/pp-core/bin/lib/package-identity.cjs +35 -0
- package/pp-core/bin/lib/package-legitimacy.cjs +368 -0
- package/pp-core/bin/lib/phase-command-router.cjs +209 -0
- package/pp-core/bin/lib/phase-id.cjs +213 -0
- package/pp-core/bin/lib/phase-lifecycle.cjs +74 -0
- package/pp-core/bin/lib/phase-locator.cjs +145 -0
- package/pp-core/bin/lib/phase.cjs +1446 -0
- package/pp-core/bin/lib/phases-command-router.cjs +43 -0
- package/pp-core/bin/lib/plan-drift-guard.cjs +117 -0
- package/pp-core/bin/lib/plan-scan.cjs +91 -0
- package/pp-core/bin/lib/planning-workspace.cjs +245 -0
- package/pp-core/bin/lib/probe-core.cjs +402 -0
- package/pp-core/bin/lib/profile-output.cjs +1164 -0
- package/pp-core/bin/lib/profile-pipeline-command-router.cjs +138 -0
- package/pp-core/bin/lib/profile-pipeline.cjs +519 -0
- package/pp-core/bin/lib/prohibition-enforcement.cjs +660 -0
- package/pp-core/bin/lib/project-root.cjs +119 -0
- package/pp-core/bin/lib/prompt-budget.cjs +305 -0
- package/pp-core/bin/lib/research-provider.cjs +137 -0
- package/pp-core/bin/lib/research-store.cjs +167 -0
- package/pp-core/bin/lib/review-reviewer-selection.cjs +121 -0
- package/pp-core/bin/lib/roadmap-command-router.cjs +166 -0
- package/pp-core/bin/lib/roadmap-parser.cjs +456 -0
- package/pp-core/bin/lib/roadmap-upgrade.cjs +476 -0
- package/pp-core/bin/lib/roadmap.cjs +738 -0
- package/pp-core/bin/lib/runtime-artifact-conversion.cjs +1966 -0
- package/pp-core/bin/lib/runtime-artifact-layout.cjs +342 -0
- package/pp-core/bin/lib/runtime-config-adapter-registry.cjs +103 -0
- package/pp-core/bin/lib/runtime-homes.cjs +272 -0
- package/pp-core/bin/lib/runtime-hooks-surface.cjs +1460 -0
- package/pp-core/bin/lib/runtime-name-policy.cjs +97 -0
- package/pp-core/bin/lib/runtime-slash.cjs +137 -0
- package/pp-core/bin/lib/schema-detect.cjs +159 -0
- package/pp-core/bin/lib/secrets.cjs +34 -0
- package/pp-core/bin/lib/security.cjs +480 -0
- package/pp-core/bin/lib/semver-compare.cjs +42 -0
- package/pp-core/bin/lib/shell-command-projection.cjs +550 -0
- package/pp-core/bin/lib/state-command-router.cjs +172 -0
- package/pp-core/bin/lib/state-document.cjs +312 -0
- package/pp-core/bin/lib/state.cjs +2587 -0
- package/pp-core/bin/lib/surface.cjs +505 -0
- package/pp-core/bin/lib/task-command-router.cjs +85 -0
- package/pp-core/bin/lib/teams-status.cjs +74 -0
- package/pp-core/bin/lib/template.cjs +246 -0
- package/pp-core/bin/lib/uat-predicate.cjs +329 -0
- package/pp-core/bin/lib/uat.cjs +359 -0
- package/pp-core/bin/lib/ui-safety-gate.cjs +98 -0
- package/pp-core/bin/lib/update-context.cjs +221 -0
- package/pp-core/bin/lib/validate-command-router.cjs +91 -0
- package/pp-core/bin/lib/validate.cjs +122 -0
- package/pp-core/bin/lib/verification-command-router.cjs +31 -0
- package/pp-core/bin/lib/verification.cjs +196 -0
- package/pp-core/bin/lib/verify-command-router.cjs +44 -0
- package/pp-core/bin/lib/verify.cjs +1932 -0
- package/pp-core/bin/lib/workstream-inventory-builder.cjs +81 -0
- package/pp-core/bin/lib/workstream-inventory.cjs +147 -0
- package/pp-core/bin/lib/workstream-name-policy.cjs +91 -0
- package/pp-core/bin/lib/workstream.cjs +386 -0
- package/pp-core/bin/lib/worktree-base-ref.cjs +350 -0
- package/pp-core/bin/lib/worktree-safety.cjs +985 -0
- package/pp-core/bin/pp-tools.cjs +2239 -0
- package/pp-core/bin/pp_run +20 -0
- package/pp-core/bin/shared/config-defaults.manifest.json +97 -0
- package/pp-core/bin/shared/config-schema.manifest.json +176 -0
- package/pp-core/bin/shared/model-catalog.json +160 -0
- package/pp-core/bin/shared/runtime-aliases.manifest.json +79 -0
- package/pp-core/bin/verify-reapply-patches.cjs +400 -0
- package/pp-core/contexts/dev.md +21 -0
- package/pp-core/contexts/research.md +22 -0
- package/pp-core/contexts/review.md +23 -0
- package/pp-core/references/agent-contracts.md +79 -0
- package/pp-core/references/ai-evals.md +156 -0
- package/pp-core/references/ai-frameworks.md +186 -0
- package/pp-core/references/artifact-types.md +131 -0
- package/pp-core/references/autonomous-smart-discuss.md +277 -0
- package/pp-core/references/checkpoints.md +814 -0
- package/pp-core/references/common-bug-patterns.md +114 -0
- package/pp-core/references/context-budget.md +85 -0
- package/pp-core/references/continuation-format.md +253 -0
- package/pp-core/references/debugger-philosophy.md +76 -0
- package/pp-core/references/decimal-phase-calculation.md +64 -0
- package/pp-core/references/doc-conflict-engine.md +91 -0
- package/pp-core/references/domain-probes.md +125 -0
- package/pp-core/references/edge-probe-fixtures/01-round-half-even/expected-coverage.json +7 -0
- package/pp-core/references/edge-probe-fixtures/01-round-half-even/requirements.json +1 -0
- package/pp-core/references/edge-probe-fixtures/02-merge-intervals/expected-coverage.json +8 -0
- package/pp-core/references/edge-probe-fixtures/02-merge-intervals/requirements.json +1 -0
- package/pp-core/references/edge-probe-fixtures/03-truncate-graphemes/expected-coverage.json +7 -0
- package/pp-core/references/edge-probe-fixtures/03-truncate-graphemes/requirements.json +1 -0
- package/pp-core/references/edge-probe-fixtures/04-money-rounding/expected-coverage.json +7 -0
- package/pp-core/references/edge-probe-fixtures/04-money-rounding/requirements.json +1 -0
- package/pp-core/references/edge-probe-fixtures/05-list-dedupe/expected-coverage.json +8 -0
- package/pp-core/references/edge-probe-fixtures/05-list-dedupe/requirements.json +1 -0
- package/pp-core/references/edge-probe-fixtures/06-resolved-mixed/expected-coverage.json +8 -0
- package/pp-core/references/edge-probe-fixtures/06-resolved-mixed/requirements.json +1 -0
- package/pp-core/references/edge-probe-fixtures/06-resolved-mixed/resolutions.json +4 -0
- package/pp-core/references/edge-probe.md +272 -0
- package/pp-core/references/execute-mvp-tdd.md +81 -0
- package/pp-core/references/executor-examples.md +110 -0
- package/pp-core/references/few-shot-examples/plan-checker.md +73 -0
- package/pp-core/references/few-shot-examples/verifier.md +109 -0
- package/pp-core/references/gate-prompts.md +100 -0
- package/pp-core/references/gates.md +70 -0
- package/pp-core/references/git-integration.md +298 -0
- package/pp-core/references/git-planning-commit.md +40 -0
- package/pp-core/references/ios-scaffold.md +123 -0
- package/pp-core/references/loop-hook-dispatch.md +61 -0
- package/pp-core/references/mandatory-initial-read.md +2 -0
- package/pp-core/references/model-profile-resolution.md +38 -0
- package/pp-core/references/model-profiles.md +245 -0
- package/pp-core/references/mvp-concepts.md +49 -0
- package/pp-core/references/phase-argument-parsing.md +61 -0
- package/pp-core/references/planner-antipatterns.md +176 -0
- package/pp-core/references/planner-chunked.md +49 -0
- package/pp-core/references/planner-gap-closure.md +62 -0
- package/pp-core/references/planner-graphify-auto-update.md +67 -0
- package/pp-core/references/planner-guidance.md +186 -0
- package/pp-core/references/planner-human-verify-mode.md +57 -0
- package/pp-core/references/planner-interface-context.md +62 -0
- package/pp-core/references/planner-load-graph-context.md +36 -0
- package/pp-core/references/planner-mvp-mode.md +53 -0
- package/pp-core/references/planner-reviews.md +42 -0
- package/pp-core/references/planner-revision.md +87 -0
- package/pp-core/references/planner-source-audit.md +73 -0
- package/pp-core/references/planning-config.md +477 -0
- package/pp-core/references/prohibition-probe-fixtures/01-streak-reminder/expected.json +14 -0
- package/pp-core/references/prohibition-probe-fixtures/02-clean-utility/expected.json +4 -0
- package/pp-core/references/prohibition-probe-fixtures/03-multi-prohibition/expected.json +32 -0
- package/pp-core/references/prohibition-probe.md +326 -0
- package/pp-core/references/project-skills-discovery.md +19 -0
- package/pp-core/references/questioning.md +162 -0
- package/pp-core/references/research-documentation-lookup.md +29 -0
- package/pp-core/references/research-philosophy.md +29 -0
- package/pp-core/references/research-verification-protocol.md +27 -0
- package/pp-core/references/revision-loop.md +97 -0
- package/pp-core/references/scout-codebase.md +51 -0
- package/pp-core/references/skeleton-template.md +48 -0
- package/pp-core/references/sketch-interactivity.md +41 -0
- package/pp-core/references/sketch-theme-system.md +94 -0
- package/pp-core/references/sketch-tooling.md +45 -0
- package/pp-core/references/sketch-variant-patterns.md +81 -0
- package/pp-core/references/spidr-splitting.md +69 -0
- package/pp-core/references/tdd.md +330 -0
- package/pp-core/references/thinking-models-debug.md +44 -0
- package/pp-core/references/thinking-models-execution.md +50 -0
- package/pp-core/references/thinking-models-planning.md +62 -0
- package/pp-core/references/thinking-models-research.md +50 -0
- package/pp-core/references/thinking-models-verification.md +55 -0
- package/pp-core/references/thinking-partner.md +96 -0
- package/pp-core/references/ui-brand.md +162 -0
- package/pp-core/references/universal-anti-patterns.md +63 -0
- package/pp-core/references/user-profiling.md +681 -0
- package/pp-core/references/user-story-template.md +58 -0
- package/pp-core/references/verification-overrides.md +227 -0
- package/pp-core/references/verification-patterns.md +612 -0
- package/pp-core/references/verify-mvp-mode.md +85 -0
- package/pp-core/references/workstream-flag.md +111 -0
- package/pp-core/references/worktree-branch-check.md +44 -0
- package/pp-core/references/worktree-path-safety.md +67 -0
- package/pp-core/templates/AI-SPEC.md +246 -0
- package/pp-core/templates/DEBUG.md +169 -0
- package/pp-core/templates/README.md +77 -0
- package/pp-core/templates/SECURITY.md +61 -0
- package/pp-core/templates/UAT.md +265 -0
- package/pp-core/templates/UI-SPEC.md +100 -0
- package/pp-core/templates/VALIDATION.md +76 -0
- package/pp-core/templates/claude-md.md +145 -0
- package/pp-core/templates/codebase/architecture.md +255 -0
- package/pp-core/templates/codebase/concerns.md +310 -0
- package/pp-core/templates/codebase/conventions.md +307 -0
- package/pp-core/templates/codebase/integrations.md +280 -0
- package/pp-core/templates/codebase/stack.md +186 -0
- package/pp-core/templates/codebase/structure.md +285 -0
- package/pp-core/templates/codebase/testing.md +480 -0
- package/pp-core/templates/config.json +62 -0
- package/pp-core/templates/context.md +352 -0
- package/pp-core/templates/continue-here.md +78 -0
- package/pp-core/templates/copilot-instructions.md +7 -0
- package/pp-core/templates/debug-subagent-prompt.md +91 -0
- package/pp-core/templates/dev-preferences.md +21 -0
- package/pp-core/templates/discovery.md +146 -0
- package/pp-core/templates/discussion-log.md +63 -0
- package/pp-core/templates/milestone-archive.md +123 -0
- package/pp-core/templates/milestone.md +115 -0
- package/pp-core/templates/phase-prompt.md +610 -0
- package/pp-core/templates/planner-subagent-prompt.md +117 -0
- package/pp-core/templates/project.md +203 -0
- package/pp-core/templates/requirements.md +231 -0
- package/pp-core/templates/research-project/ARCHITECTURE.md +204 -0
- package/pp-core/templates/research-project/FEATURES.md +147 -0
- package/pp-core/templates/research-project/PITFALLS.md +200 -0
- package/pp-core/templates/research-project/STACK.md +120 -0
- package/pp-core/templates/research-project/SUMMARY.md +170 -0
- package/pp-core/templates/research.md +592 -0
- package/pp-core/templates/retrospective.md +54 -0
- package/pp-core/templates/roadmap.md +202 -0
- package/pp-core/templates/spec.md +333 -0
- package/pp-core/templates/state.md +195 -0
- package/pp-core/templates/summary-complex.md +60 -0
- package/pp-core/templates/summary-minimal.md +42 -0
- package/pp-core/templates/summary-standard.md +49 -0
- package/pp-core/templates/summary.md +249 -0
- package/pp-core/templates/user-profile.md +146 -0
- package/pp-core/templates/user-setup.md +311 -0
- package/pp-core/templates/verification-report.md +335 -0
- package/pp-core/workflows/_runtime-launcher.snippet.sh +1 -0
- package/pp-core/workflows/add-backlog.md +91 -0
- package/pp-core/workflows/add-phase.md +113 -0
- package/pp-core/workflows/add-tests.md +355 -0
- package/pp-core/workflows/add-todo.md +161 -0
- package/pp-core/workflows/ai-integration-phase.md +295 -0
- package/pp-core/workflows/analyze-dependencies.md +96 -0
- package/pp-core/workflows/audit-fix.md +178 -0
- package/pp-core/workflows/audit-milestone.md +362 -0
- package/pp-core/workflows/audit-uat.md +110 -0
- package/pp-core/workflows/autonomous.md +886 -0
- package/pp-core/workflows/check-todos.md +180 -0
- package/pp-core/workflows/cleanup.md +195 -0
- package/pp-core/workflows/code-review-fix.md +506 -0
- package/pp-core/workflows/code-review.md +696 -0
- package/pp-core/workflows/complete-milestone.md +857 -0
- package/pp-core/workflows/debug.md +237 -0
- package/pp-core/workflows/diagnose-issues.md +245 -0
- package/pp-core/workflows/discovery-phase.md +291 -0
- package/pp-core/workflows/discovery-sprint.md +1546 -0
- package/pp-core/workflows/discuss-phase/modes/advisor.md +176 -0
- package/pp-core/workflows/discuss-phase/modes/all.md +28 -0
- package/pp-core/workflows/discuss-phase/modes/analyze.md +44 -0
- package/pp-core/workflows/discuss-phase/modes/auto.md +57 -0
- package/pp-core/workflows/discuss-phase/modes/batch.md +52 -0
- package/pp-core/workflows/discuss-phase/modes/chain.md +98 -0
- package/pp-core/workflows/discuss-phase/modes/default.md +141 -0
- package/pp-core/workflows/discuss-phase/modes/power.md +44 -0
- package/pp-core/workflows/discuss-phase/modes/text.md +55 -0
- package/pp-core/workflows/discuss-phase/templates/checkpoint.json +18 -0
- package/pp-core/workflows/discuss-phase/templates/context.md +136 -0
- package/pp-core/workflows/discuss-phase/templates/discussion-log.md +50 -0
- package/pp-core/workflows/discuss-phase-assumptions.md +675 -0
- package/pp-core/workflows/discuss-phase-power.md +291 -0
- package/pp-core/workflows/discuss-phase.md +520 -0
- package/pp-core/workflows/do.md +111 -0
- package/pp-core/workflows/docs-update.md +1168 -0
- package/pp-core/workflows/edit-phase.md +295 -0
- package/pp-core/workflows/eval-review.md +159 -0
- package/pp-core/workflows/execute-phase/steps/codebase-drift-gate.md +95 -0
- package/pp-core/workflows/execute-phase/steps/per-plan-worktree-gate.md +94 -0
- package/pp-core/workflows/execute-phase/steps/post-merge-gate.md +117 -0
- package/pp-core/workflows/execute-phase/steps/worktree-recovery-policy.md +9 -0
- package/pp-core/workflows/execute-phase.md +1707 -0
- package/pp-core/workflows/execute-plan.md +541 -0
- package/pp-core/workflows/explore.md +146 -0
- package/pp-core/workflows/extract-learnings.md +243 -0
- package/pp-core/workflows/fast.md +124 -0
- package/pp-core/workflows/forensics.md +279 -0
- package/pp-core/workflows/graduation.md +196 -0
- package/pp-core/workflows/health.md +224 -0
- package/pp-core/workflows/help/modes/brief.md +22 -0
- package/pp-core/workflows/help/modes/default.md +50 -0
- package/pp-core/workflows/help/modes/full.md +791 -0
- package/pp-core/workflows/help/modes/topic.md +74 -0
- package/pp-core/workflows/help.md +24 -0
- package/pp-core/workflows/import.md +256 -0
- package/pp-core/workflows/inbox.md +387 -0
- package/pp-core/workflows/ingest-docs.md +340 -0
- package/pp-core/workflows/insert-phase.md +152 -0
- package/pp-core/workflows/list-phase-assumptions.md +178 -0
- package/pp-core/workflows/list-workspaces.md +57 -0
- package/pp-core/workflows/manager.md +435 -0
- package/pp-core/workflows/map-codebase.md +444 -0
- package/pp-core/workflows/milestone-summary.md +224 -0
- package/pp-core/workflows/mvp-phase.md +222 -0
- package/pp-core/workflows/new-milestone.md +643 -0
- package/pp-core/workflows/new-project.md +1563 -0
- package/pp-core/workflows/new-workspace.md +240 -0
- package/pp-core/workflows/next.md +347 -0
- package/pp-core/workflows/node-repair.md +92 -0
- package/pp-core/workflows/note.md +158 -0
- package/pp-core/workflows/pause-work.md +250 -0
- package/pp-core/workflows/plan-milestone-gaps.md +281 -0
- package/pp-core/workflows/plan-phase.md +1755 -0
- package/pp-core/workflows/plan-review-convergence.md +369 -0
- package/pp-core/workflows/plant-seed.md +230 -0
- package/pp-core/workflows/pr-branch.md +159 -0
- package/pp-core/workflows/profile-user.md +455 -0
- package/pp-core/workflows/progress.md +756 -0
- package/pp-core/workflows/quick.md +1045 -0
- package/pp-core/workflows/reapply-patches.md +443 -0
- package/pp-core/workflows/remove-phase.md +156 -0
- package/pp-core/workflows/remove-workspace.md +108 -0
- package/pp-core/workflows/resume-project.md +348 -0
- package/pp-core/workflows/review.md +765 -0
- package/pp-core/workflows/scan.md +107 -0
- package/pp-core/workflows/secure-phase.md +184 -0
- package/pp-core/workflows/session-report.md +146 -0
- package/pp-core/workflows/settings-advanced.md +816 -0
- package/pp-core/workflows/settings-integrations.md +312 -0
- package/pp-core/workflows/settings.md +592 -0
- package/pp-core/workflows/ship.md +465 -0
- package/pp-core/workflows/sketch-wrap-up.md +286 -0
- package/pp-core/workflows/sketch.md +361 -0
- package/pp-core/workflows/spec-phase.md +495 -0
- package/pp-core/workflows/spike-wrap-up.md +307 -0
- package/pp-core/workflows/spike.md +453 -0
- package/pp-core/workflows/stats.md +80 -0
- package/pp-core/workflows/sync-skills.md +182 -0
- package/pp-core/workflows/thread.md +222 -0
- package/pp-core/workflows/transition.md +694 -0
- package/pp-core/workflows/ui-phase.md +328 -0
- package/pp-core/workflows/ui-review.md +193 -0
- package/pp-core/workflows/ultraplan-phase.md +199 -0
- package/pp-core/workflows/undo.md +314 -0
- package/pp-core/workflows/update.md +501 -0
- package/pp-core/workflows/validate-phase.md +183 -0
- package/pp-core/workflows/verify-phase.md +569 -0
- package/pp-core/workflows/verify-work.md +804 -0
- package/scripts/affected-tests-lib.cjs +554 -0
- package/scripts/audit-workflow-script-paths.cjs +73 -0
- package/scripts/base64-scan.sh +351 -0
- package/scripts/build-hooks.js +254 -0
- package/scripts/changeset/README.md +129 -0
- package/scripts/changeset/cli.cjs +597 -0
- package/scripts/changeset/github-release-notes.cjs +199 -0
- package/scripts/changeset/lint.cjs +147 -0
- package/scripts/changeset/new.cjs +151 -0
- package/scripts/changeset/parse.cjs +114 -0
- package/scripts/changeset/render.cjs +34 -0
- package/scripts/changeset/serialize.cjs +130 -0
- package/scripts/check-alias-drift.cjs +114 -0
- package/scripts/check-env.cjs +312 -0
- package/scripts/check-npm-integrity.cjs +215 -0
- package/scripts/ci-guard-runner.cjs +22 -0
- package/scripts/ci-prepare-test-scope.cjs +93 -0
- package/scripts/ci-rebase-check.cjs +86 -0
- package/scripts/ci-test-scope.cjs +441 -0
- package/scripts/command-contract-helpers.cjs +64 -0
- package/scripts/diff-touches-shipped-paths.cjs +149 -0
- package/scripts/fix-slash-commands.cjs +161 -0
- package/scripts/gen-capability-registry.cjs +2646 -0
- package/scripts/gen-commands-reference.cjs +139 -0
- package/scripts/gen-inventory-manifest.cjs +114 -0
- package/scripts/gen-loop-host-contract.cjs +526 -0
- package/scripts/gen-research-agents.cjs +276 -0
- package/scripts/generate-package-identity.cjs +134 -0
- package/scripts/issue-dedupe.cjs +278 -0
- package/scripts/issue-version-gate.cjs +140 -0
- package/scripts/lib/allowlist-ratchet.cjs +236 -0
- package/scripts/lib/cli-exit.cjs +56 -0
- package/scripts/lint-allow-test-rule-refs.allowlist.json +328 -0
- package/scripts/lint-allow-test-rule-refs.cjs +162 -0
- package/scripts/lint-command-contract.cjs +118 -0
- package/scripts/lint-descriptions.cjs +87 -0
- package/scripts/lint-docs-required.cjs +222 -0
- package/scripts/lint-legacy-dir-name.cjs +166 -0
- package/scripts/lint-package-identity-drift.cjs +141 -0
- package/scripts/lint-pr-check-project-dir.cjs +99 -0
- package/scripts/lint-regression-test-names.allowlist.json +269 -0
- package/scripts/lint-regression-test-names.cjs +117 -0
- package/scripts/lint-shell-command-projection-drift.cjs +62 -0
- package/scripts/lint-skill-deps.cjs +185 -0
- package/scripts/lint-test-file-count.allowlist.json +181 -0
- package/scripts/lint-test-file-count.cjs +246 -0
- package/scripts/lint-windows-test-portability.cjs +178 -0
- package/scripts/mutation-matrix.cjs +323 -0
- package/scripts/pr-target-policy.cjs +63 -0
- package/scripts/pr-template-policy.cjs +268 -0
- package/scripts/prompt-injection-scan.sh +207 -0
- package/scripts/registry-smoke.cjs +337 -0
- package/scripts/release-notes/discord-release-summary.cjs +373 -0
- package/scripts/release-notes/format-github-release-notes.cjs +261 -0
- package/scripts/release-tarball-smoke.cjs +763 -0
- package/scripts/research-profiles.cjs +149 -0
- package/scripts/run-affected-tests.cjs +7 -0
- package/scripts/run-tests.cjs +589 -0
- package/scripts/secret-scan-lint.sh +231 -0
- package/scripts/secret-scan.sh +358 -0
- package/scripts/setup-branch-protection.sh +234 -0
- package/scripts/strip-prose-atrefs.cjs +106 -0
- package/scripts/sync-manifest-versions.cjs +119 -0
- package/scripts/sync-next-version.cjs +133 -0
- package/scripts/sync-rulesets.sh +34 -0
- package/scripts/sync-runtime-launcher.cjs +425 -0
- package/scripts/test-failure-reasons.cjs +34 -0
- package/scripts/update-size-baseline.cjs +68 -0
- package/scripts/verify-npm-publish.cjs +240 -0
- package/scripts/verify-opengsd-sweep.cjs +288 -0
- package/scripts/verify-phase-02-rename.sh +258 -0
- package/scripts/verify-phase-03-rename.sh +376 -0
- package/scripts/workflow-policy.cjs +483 -0
- package/scripts/workflow-size.cjs +90 -0
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Runtime name policy — alias resolution and canonicalization for GSD runtime
|
|
4
|
+
* identifiers (ADR-457 build-at-publish: the hand-written
|
|
5
|
+
* bin/lib/runtime-name-policy.cjs collapsed to a TypeScript source of truth).
|
|
6
|
+
* Behaviour is preserved byte-for-behaviour from the prior hand-written .cjs;
|
|
7
|
+
* only types are added.
|
|
8
|
+
*
|
|
9
|
+
* Group C cross-import candidate: no bin/lib sibling dependencies; only
|
|
10
|
+
* node:fs and node:path. Once this module is migrated, runtime-slash.cjs
|
|
11
|
+
* (which imports runtime-name-policy.cjs) becomes the first true cross-import
|
|
12
|
+
* proof candidate.
|
|
13
|
+
*/
|
|
14
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
15
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
16
|
+
};
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
exports.canonicalizeRuntimeName = canonicalizeRuntimeName;
|
|
19
|
+
exports.resolveRuntimeNameFromCandidates = resolveRuntimeNameFromCandidates;
|
|
20
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
21
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
22
|
+
const FALLBACK_ALIASES = {
|
|
23
|
+
claude: ['claude', 'claude-code', 'claude-cli'],
|
|
24
|
+
opencode: ['opencode', 'open-code', 'opencode-cli'],
|
|
25
|
+
kilo: ['kilo', 'kilo-cli'],
|
|
26
|
+
gemini: ['gemini', 'gemini-cli', 'gemini-code'],
|
|
27
|
+
codex: ['codex', 'codex-app', 'codex-cli', 'codex_desktop', 'codex-desktop'],
|
|
28
|
+
copilot: ['copilot', 'copilot-cli', 'github-copilot'],
|
|
29
|
+
antigravity: ['antigravity', 'antigravity-cli', 'antigravity-agent'],
|
|
30
|
+
cursor: ['cursor', 'cursor-cli', 'cursor-nightly'],
|
|
31
|
+
windsurf: ['windsurf', 'windsurf-cli', 'windsurf-next', 'devin-desktop'],
|
|
32
|
+
augment: ['augment', 'augment-code', 'augment-cli'],
|
|
33
|
+
trae: ['trae', 'trae-cli'],
|
|
34
|
+
qwen: ['qwen', 'qwen-code', 'qwen-cli'],
|
|
35
|
+
hermes: ['hermes', 'hermes-agent', 'hermes-cli'],
|
|
36
|
+
kimi: ['kimi'],
|
|
37
|
+
codebuddy: ['codebuddy', 'codebuddy-cli'],
|
|
38
|
+
cline: ['cline', 'cline-cli'],
|
|
39
|
+
};
|
|
40
|
+
function normalizeRuntimeToken(value) {
|
|
41
|
+
return String(value).trim().toLowerCase().replace(/[_\s]+/g, '-');
|
|
42
|
+
}
|
|
43
|
+
function loadAliasManifest() {
|
|
44
|
+
const manifestCandidates = [
|
|
45
|
+
node_path_1.default.resolve(__dirname, '..', 'shared', 'runtime-aliases.manifest.json'),
|
|
46
|
+
node_path_1.default.resolve(__dirname, '../../../sdk/shared/runtime-aliases.manifest.json'),
|
|
47
|
+
];
|
|
48
|
+
for (const manifestPath of manifestCandidates) {
|
|
49
|
+
try {
|
|
50
|
+
const parsed = JSON.parse(node_fs_1.default.readFileSync(manifestPath, 'utf8'));
|
|
51
|
+
if (parsed && typeof parsed === 'object')
|
|
52
|
+
return parsed;
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
// Try next candidate.
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return { ...FALLBACK_ALIASES };
|
|
59
|
+
}
|
|
60
|
+
const aliasManifest = loadAliasManifest();
|
|
61
|
+
const aliasToCanonical = new Map();
|
|
62
|
+
for (const [canonical, aliases] of Object.entries(aliasManifest)) {
|
|
63
|
+
if (typeof canonical !== 'string' || !Array.isArray(aliases))
|
|
64
|
+
continue;
|
|
65
|
+
aliasToCanonical.set(normalizeRuntimeToken(canonical), normalizeRuntimeToken(canonical));
|
|
66
|
+
for (const alias of aliases) {
|
|
67
|
+
if (typeof alias !== 'string')
|
|
68
|
+
continue;
|
|
69
|
+
aliasToCanonical.set(normalizeRuntimeToken(alias), normalizeRuntimeToken(canonical));
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
function canonicalizeRuntimeName(value) {
|
|
73
|
+
if (typeof value !== 'string')
|
|
74
|
+
return null;
|
|
75
|
+
return aliasToCanonical.get(normalizeRuntimeToken(value)) || null;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Resolve runtime from a precedence list of candidate values.
|
|
79
|
+
*
|
|
80
|
+
* - First non-empty string candidate wins.
|
|
81
|
+
* - Known aliases are canonicalized (codex-cli -> codex).
|
|
82
|
+
* - Unknown values are normalized and returned (future-runtime tolerance).
|
|
83
|
+
*
|
|
84
|
+
* @param candidates - string candidates in precedence order
|
|
85
|
+
* @returns the resolved runtime name, or null if no valid candidate
|
|
86
|
+
*/
|
|
87
|
+
function resolveRuntimeNameFromCandidates(...candidates) {
|
|
88
|
+
for (const candidate of candidates) {
|
|
89
|
+
if (typeof candidate !== 'string')
|
|
90
|
+
continue;
|
|
91
|
+
const normalized = normalizeRuntimeToken(candidate);
|
|
92
|
+
if (!normalized)
|
|
93
|
+
continue;
|
|
94
|
+
return canonicalizeRuntimeName(normalized) || normalized;
|
|
95
|
+
}
|
|
96
|
+
return null;
|
|
97
|
+
}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* runtime-slash.cts — single source of truth for emitting pp slash-command
|
|
4
|
+
* references in user-facing runtime output (recommended-actions JSON, persisted
|
|
5
|
+
* ROADMAP.md entries, verify/validate fix hints, error messages, etc.).
|
|
6
|
+
*
|
|
7
|
+
* ADR-457 build-at-publish: the hand-written bin/lib/runtime-slash.cjs collapsed
|
|
8
|
+
* to a TypeScript source of truth. Behaviour is preserved byte-for-behaviour from
|
|
9
|
+
* the prior hand-written .cjs; only types are added.
|
|
10
|
+
*
|
|
11
|
+
* Background: #2808 unified all pp-core skill installs to register under the hyphen
|
|
12
|
+
* form (`name: pp-<cmd>`). The legacy colon form `/pp:<cmd>` is no longer
|
|
13
|
+
* routable by Claude Code skill installs, but ~50 runtime emissions in
|
|
14
|
+
* bin/lib/*.cjs still hardcoded it (#3584). Codex installs need the shell-var
|
|
15
|
+
* `$pp-<cmd>` form. This module is the only place the runtime should decide
|
|
16
|
+
* which shape to emit.
|
|
17
|
+
*
|
|
18
|
+
* - codex: $pp-<cmd> (shell-var syntax)
|
|
19
|
+
* - claude, cursor, opencode, kilo, etc.: /pp-<cmd>
|
|
20
|
+
*
|
|
21
|
+
* The colon form is never emitted.
|
|
22
|
+
*
|
|
23
|
+
* SOURCE CONTRACT: source command frontmatter uses `name: pp:<cmd>` (colon) and
|
|
24
|
+
* source prose uses `/pp:<cmd>` (colon). This module converts that colon source
|
|
25
|
+
* form into the INSTALLED hyphen form `/pp-<cmd>` (and codex `$pp-<cmd>`).
|
|
26
|
+
* Legacy `/gsd:` / `/gsd-` / `$gsd-` input is tolerated for backward compatibility
|
|
27
|
+
* while EMITTING only the pp form — satisfying RENAME-05.
|
|
28
|
+
*
|
|
29
|
+
* Cross-import proof candidate (ADR-457): this is the first TS source that
|
|
30
|
+
* imports a sibling TS-migrated module. The import specifier uses the .cjs
|
|
31
|
+
* extension per nodenext convention; tsc resolves it to src/runtime-name-policy.cts.
|
|
32
|
+
*/
|
|
33
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
34
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
35
|
+
};
|
|
36
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37
|
+
exports.formatPpSlashFor = exports.formatPpSlash = void 0;
|
|
38
|
+
exports.formatGsdSlash = formatGsdSlash;
|
|
39
|
+
exports.resolveRuntime = resolveRuntime;
|
|
40
|
+
exports.formatGsdSlashFor = formatGsdSlashFor;
|
|
41
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
42
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
43
|
+
const runtime_name_policy_cjs_1 = require("./runtime-name-policy.cjs");
|
|
44
|
+
function formatGsdSlash(commandName, runtime) {
|
|
45
|
+
if (typeof commandName !== 'string')
|
|
46
|
+
return commandName;
|
|
47
|
+
if (commandName === '')
|
|
48
|
+
return commandName;
|
|
49
|
+
// Strip any existing leading prefix so the helper is idempotent and accepts
|
|
50
|
+
// both canonical pp forms (`/pp:<name>`, `/pp-<name>`, `$pp-<name>`) and
|
|
51
|
+
// legacy gsd forms (`/gsd:<name>`, `/gsd-<name>`, `$gsd-<name>`) for
|
|
52
|
+
// backward compatibility. The bare shorthand forms (e.g. `pp:<name>`,
|
|
53
|
+
// `gsd:<name>`) are also accepted without a leading slash.
|
|
54
|
+
const stripped = commandName.replace(/^[/$]?(?:pp|gsd)[-:]/i, '');
|
|
55
|
+
// If the regex matched nothing (no prefix), the input is already a bare name.
|
|
56
|
+
const bare = stripped === commandName ? commandName : stripped;
|
|
57
|
+
// Defensive: a degenerate input like `/pp:`, `pp-`, `/gsd:`, `gsd-`, or whitespace-only
|
|
58
|
+
// normalizes to empty. Returning the original colon-form would re-emit the
|
|
59
|
+
// deprecated shape that this module exists to suppress (#3584). Return an
|
|
60
|
+
// empty string so callers see "no command" rather than the broken input.
|
|
61
|
+
if (bare === '' || bare.trim() === '')
|
|
62
|
+
return '';
|
|
63
|
+
// Split on the first whitespace so only the command token is rewritten —
|
|
64
|
+
// anything after the first space is caller-supplied arguments (phase
|
|
65
|
+
// numbers, --flags, --paths C:\\Users\\Me, etc.) that must round-trip
|
|
66
|
+
// untouched. Codex lowercases only the command token; preserving the
|
|
67
|
+
// argument tail prevents path/flag corruption on case-sensitive systems.
|
|
68
|
+
const wsMatch = bare.match(/^(\S+)(\s[\s\S]*)?$/);
|
|
69
|
+
const token = wsMatch ? wsMatch[1] : bare;
|
|
70
|
+
const tail = wsMatch && wsMatch[2] ? wsMatch[2] : '';
|
|
71
|
+
const runtimeText = (typeof runtime === 'string' && runtime ? runtime : 'claude').toLowerCase();
|
|
72
|
+
const rt = (0, runtime_name_policy_cjs_1.canonicalizeRuntimeName)(runtimeText) || runtimeText;
|
|
73
|
+
// Descriptor-driven: look up commandStyle from the capability registry.
|
|
74
|
+
// Mirrors the lazy-require pattern from runtime-homes.cts §getGlobalConfigDir.
|
|
75
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
76
|
+
const { runtimes } = require('./capability-registry.cjs');
|
|
77
|
+
const style = runtimes[rt]?.runtime?.commandStyle;
|
|
78
|
+
if (style === 'shell-var') {
|
|
79
|
+
// shell-var runtimes (currently: codex) use $pp-<cmd> syntax. The command
|
|
80
|
+
// token is lowercased because shell-var identifiers are conventionally
|
|
81
|
+
// lowercase; matches the convertCodexSlash() projection in bin/install.js.
|
|
82
|
+
return `$pp-${token.toLowerCase()}${tail}`;
|
|
83
|
+
}
|
|
84
|
+
return `/pp-${token}${tail}`;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Resolve the effective runtime for a project directory.
|
|
88
|
+
*
|
|
89
|
+
* process.env.GSD_RUNTIME > config.runtime > 'claude'
|
|
90
|
+
*
|
|
91
|
+
* Mirrors the precedence already used by profile-output.cjs and the rest of
|
|
92
|
+
* the runtime resolution chain. Returns a lowercased string so downstream
|
|
93
|
+
* comparisons can be case-blind.
|
|
94
|
+
*
|
|
95
|
+
* @param projectDir - path to the project directory, or null/undefined
|
|
96
|
+
* @returns the resolved runtime name
|
|
97
|
+
*/
|
|
98
|
+
function resolveRuntime(projectDir) {
|
|
99
|
+
const envRuntime = (0, runtime_name_policy_cjs_1.resolveRuntimeNameFromCandidates)(process.env['GSD_RUNTIME']);
|
|
100
|
+
if (envRuntime)
|
|
101
|
+
return envRuntime;
|
|
102
|
+
if (projectDir) {
|
|
103
|
+
try {
|
|
104
|
+
// Read config.json directly (not via loadConfig). loadConfig has a side
|
|
105
|
+
// effect of normalizing and re-writing legacy keys back to disk, which
|
|
106
|
+
// would mutate the project file just to read the runtime name. We only
|
|
107
|
+
// need the literal `runtime:` value, so a plain JSON read is sufficient
|
|
108
|
+
// and side-effect-free.
|
|
109
|
+
const configPath = node_path_1.default.join(projectDir, '.planning', 'config.json');
|
|
110
|
+
if (node_fs_1.default.existsSync(configPath)) {
|
|
111
|
+
const raw = node_fs_1.default.readFileSync(configPath, 'utf-8');
|
|
112
|
+
const parsed = JSON.parse(raw);
|
|
113
|
+
if (parsed && typeof parsed === 'object' && 'runtime' in parsed) {
|
|
114
|
+
const configRuntime = (0, runtime_name_policy_cjs_1.resolveRuntimeNameFromCandidates)(parsed['runtime']);
|
|
115
|
+
if (configRuntime)
|
|
116
|
+
return configRuntime;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
catch {
|
|
121
|
+
// Fall through to default — a missing/broken config must not crash
|
|
122
|
+
// runtime output formatting.
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
return 'claude';
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Convenience: format using the runtime resolved from a project directory.
|
|
129
|
+
* Equivalent to `formatGsdSlash(name, resolveRuntime(projectDir))`.
|
|
130
|
+
*/
|
|
131
|
+
function formatGsdSlashFor(projectDir, commandName) {
|
|
132
|
+
return formatGsdSlash(commandName, resolveRuntime(projectDir));
|
|
133
|
+
}
|
|
134
|
+
// Back-compat alias — retained so existing consumers of `formatGsdSlash` continue to work.
|
|
135
|
+
// Forwards to formatGsdSlash which now emits pp- forms.
|
|
136
|
+
exports.formatPpSlash = formatGsdSlash;
|
|
137
|
+
exports.formatPpSlashFor = formatGsdSlashFor;
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Schema Drift Detection — detects schema-relevant file changes and verifies
|
|
4
|
+
* that the appropriate database push command was executed during a phase
|
|
5
|
+
* (ADR-457 build-at-publish: the hand-written bin/lib/schema-detect.cjs
|
|
6
|
+
* collapsed to a TypeScript source of truth). Behaviour is preserved
|
|
7
|
+
* byte-for-behaviour from the prior hand-written .cjs; only types are added.
|
|
8
|
+
*
|
|
9
|
+
* This module does not read the filesystem directly.
|
|
10
|
+
*/
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.ORM_INFO = exports.SCHEMA_PATTERNS = void 0;
|
|
13
|
+
exports.detectSchemaFiles = detectSchemaFiles;
|
|
14
|
+
exports.detectSchemaOrm = detectSchemaOrm;
|
|
15
|
+
exports.checkSchemaDrift = checkSchemaDrift;
|
|
16
|
+
exports.SCHEMA_PATTERNS = [
|
|
17
|
+
{ pattern: /^src\/collections\/.*\.ts$/, orm: 'payload' },
|
|
18
|
+
{ pattern: /^src\/globals\/.*\.ts$/, orm: 'payload' },
|
|
19
|
+
{ pattern: /^prisma\/schema\.prisma$/, orm: 'prisma' },
|
|
20
|
+
{ pattern: /^prisma\/schema\/.*\.prisma$/, orm: 'prisma' },
|
|
21
|
+
{ pattern: /^drizzle\/schema\.ts$/, orm: 'drizzle' },
|
|
22
|
+
{ pattern: /^src\/db\/schema\.ts$/, orm: 'drizzle' },
|
|
23
|
+
{ pattern: /^drizzle\/.*\.ts$/, orm: 'drizzle' },
|
|
24
|
+
{ pattern: /^supabase\/migrations\/.*\.sql$/, orm: 'supabase' },
|
|
25
|
+
{ pattern: /^src\/entities\/.*\.ts$/, orm: 'typeorm' },
|
|
26
|
+
{ pattern: /^src\/migrations\/.*\.ts$/, orm: 'typeorm' },
|
|
27
|
+
];
|
|
28
|
+
exports.ORM_INFO = {
|
|
29
|
+
payload: {
|
|
30
|
+
pushCommand: 'npx payload migrate',
|
|
31
|
+
envHint: 'CI=true PAYLOAD_MIGRATING=true npx payload migrate',
|
|
32
|
+
interactiveWarning: 'Payload migrate may require interactive prompts — use CI=true PAYLOAD_MIGRATING=true to suppress',
|
|
33
|
+
evidencePatterns: [/payload\s+migrate/i, /PAYLOAD_MIGRATING/],
|
|
34
|
+
},
|
|
35
|
+
prisma: {
|
|
36
|
+
pushCommand: 'npx prisma db push',
|
|
37
|
+
envHint: 'npx prisma db push --accept-data-loss (if destructive changes are intended)',
|
|
38
|
+
interactiveWarning: 'Prisma db push may prompt for confirmation on destructive changes — use --accept-data-loss to bypass',
|
|
39
|
+
evidencePatterns: [/prisma\s+db\s+push/i, /prisma\s+migrate\s+deploy/i, /prisma\s+migrate\s+dev/i],
|
|
40
|
+
},
|
|
41
|
+
drizzle: {
|
|
42
|
+
pushCommand: 'npx drizzle-kit push',
|
|
43
|
+
envHint: 'npx drizzle-kit push',
|
|
44
|
+
interactiveWarning: null,
|
|
45
|
+
evidencePatterns: [/drizzle-kit\s+push/i, /drizzle-kit\s+migrate/i],
|
|
46
|
+
},
|
|
47
|
+
supabase: {
|
|
48
|
+
pushCommand: 'supabase db push',
|
|
49
|
+
envHint: 'supabase db push',
|
|
50
|
+
interactiveWarning: 'Supabase db push may require authentication — ensure SUPABASE_ACCESS_TOKEN is set',
|
|
51
|
+
evidencePatterns: [/supabase\s+db\s+push/i, /supabase\s+migration\s+up/i],
|
|
52
|
+
},
|
|
53
|
+
typeorm: {
|
|
54
|
+
pushCommand: 'npx typeorm migration:run',
|
|
55
|
+
envHint: 'npx typeorm migration:run -d src/data-source.ts',
|
|
56
|
+
interactiveWarning: null,
|
|
57
|
+
evidencePatterns: [/typeorm\s+migration:run/i, /typeorm\s+schema:sync/i],
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
function detectSchemaFiles(files) {
|
|
61
|
+
const matches = [];
|
|
62
|
+
const orms = new Set();
|
|
63
|
+
for (const rawFile of files) {
|
|
64
|
+
const file = rawFile.replace(/\\/g, '/');
|
|
65
|
+
for (const { pattern, orm } of exports.SCHEMA_PATTERNS) {
|
|
66
|
+
if (pattern.test(file)) {
|
|
67
|
+
matches.push(rawFile);
|
|
68
|
+
orms.add(orm);
|
|
69
|
+
break;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return {
|
|
74
|
+
detected: matches.length > 0,
|
|
75
|
+
matches,
|
|
76
|
+
orms: [...orms],
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
function detectSchemaOrm(ormName) {
|
|
80
|
+
return exports.ORM_INFO[ormName] || null;
|
|
81
|
+
}
|
|
82
|
+
function checkSchemaDrift(changedFiles, executionLog, options = {}) {
|
|
83
|
+
const { skipCheck = false } = options;
|
|
84
|
+
const detection = detectSchemaFiles(changedFiles);
|
|
85
|
+
if (!detection.detected) {
|
|
86
|
+
return {
|
|
87
|
+
driftDetected: false,
|
|
88
|
+
blocking: false,
|
|
89
|
+
schemaFiles: [],
|
|
90
|
+
orms: [],
|
|
91
|
+
unpushedOrms: [],
|
|
92
|
+
message: '',
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
const pushedOrms = new Set();
|
|
96
|
+
const unpushedOrms = [];
|
|
97
|
+
for (const orm of detection.orms) {
|
|
98
|
+
const info = exports.ORM_INFO[orm];
|
|
99
|
+
if (!info)
|
|
100
|
+
continue;
|
|
101
|
+
const hasPushEvidence = info.evidencePatterns.some(p => p.test(executionLog));
|
|
102
|
+
if (hasPushEvidence) {
|
|
103
|
+
pushedOrms.add(orm);
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
unpushedOrms.push(orm);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
// Suppress unused variable warning — pushedOrms tracks for conceptual clarity
|
|
110
|
+
void pushedOrms;
|
|
111
|
+
const driftDetected = unpushedOrms.length > 0;
|
|
112
|
+
if (!driftDetected) {
|
|
113
|
+
return {
|
|
114
|
+
driftDetected: false,
|
|
115
|
+
blocking: false,
|
|
116
|
+
schemaFiles: detection.matches,
|
|
117
|
+
orms: detection.orms,
|
|
118
|
+
unpushedOrms: [],
|
|
119
|
+
message: '',
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
const pushCommands = unpushedOrms
|
|
123
|
+
.map(orm => {
|
|
124
|
+
const info = exports.ORM_INFO[orm];
|
|
125
|
+
return info ? ` ${orm}: ${info.envHint || info.pushCommand}` : null;
|
|
126
|
+
})
|
|
127
|
+
.filter((x) => x !== null)
|
|
128
|
+
.join('\n');
|
|
129
|
+
const message = [
|
|
130
|
+
'Schema drift detected: schema-relevant files changed but no database push was executed.',
|
|
131
|
+
'',
|
|
132
|
+
`Schema files changed: ${detection.matches.join(', ')}`,
|
|
133
|
+
`ORMs requiring push: ${unpushedOrms.join(', ')}`,
|
|
134
|
+
'',
|
|
135
|
+
'Required push commands:',
|
|
136
|
+
pushCommands,
|
|
137
|
+
'',
|
|
138
|
+
'Run the appropriate push command, or set GSD_SKIP_SCHEMA_CHECK=true to bypass this gate.',
|
|
139
|
+
].join('\n');
|
|
140
|
+
if (skipCheck) {
|
|
141
|
+
return {
|
|
142
|
+
driftDetected: true,
|
|
143
|
+
blocking: false,
|
|
144
|
+
skipped: true,
|
|
145
|
+
schemaFiles: detection.matches,
|
|
146
|
+
orms: detection.orms,
|
|
147
|
+
unpushedOrms,
|
|
148
|
+
message: 'Schema drift detected but check was skipped (GSD_SKIP_SCHEMA_CHECK=true).',
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
return {
|
|
152
|
+
driftDetected: true,
|
|
153
|
+
blocking: true,
|
|
154
|
+
schemaFiles: detection.matches,
|
|
155
|
+
orms: detection.orms,
|
|
156
|
+
unpushedOrms,
|
|
157
|
+
message,
|
|
158
|
+
};
|
|
159
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Secrets handling — masking convention for API keys and other
|
|
4
|
+
* credentials managed via /gsd-settings-integrations (ADR-457 build-at-publish:
|
|
5
|
+
* the hand-written bin/lib/secrets.cjs collapsed to a TypeScript source of
|
|
6
|
+
* truth). Behaviour is preserved byte-for-behaviour from the prior hand-written
|
|
7
|
+
* .cjs; only types are added.
|
|
8
|
+
*
|
|
9
|
+
* This module does not read the filesystem.
|
|
10
|
+
*/
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.SECRET_CONFIG_KEYS = void 0;
|
|
13
|
+
exports.isSecretKey = isSecretKey;
|
|
14
|
+
exports.maskSecret = maskSecret;
|
|
15
|
+
exports.maskIfSecret = maskIfSecret;
|
|
16
|
+
exports.SECRET_CONFIG_KEYS = new Set([
|
|
17
|
+
'brave_search',
|
|
18
|
+
'firecrawl',
|
|
19
|
+
'exa_search',
|
|
20
|
+
]);
|
|
21
|
+
function isSecretKey(keyPath) {
|
|
22
|
+
return exports.SECRET_CONFIG_KEYS.has(keyPath);
|
|
23
|
+
}
|
|
24
|
+
function maskSecret(value) {
|
|
25
|
+
if (value === null || value === undefined || value === '')
|
|
26
|
+
return '(unset)';
|
|
27
|
+
const s = String(value);
|
|
28
|
+
if (s.length < 8)
|
|
29
|
+
return '****';
|
|
30
|
+
return '****' + s.slice(-4);
|
|
31
|
+
}
|
|
32
|
+
function maskIfSecret(keyPath, value) {
|
|
33
|
+
return isSecretKey(keyPath) ? maskSecret(value) : value;
|
|
34
|
+
}
|