@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,342 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
/**
|
|
6
|
+
* Runtime artifact layout module — resolves the artifact directory shapes
|
|
7
|
+
* (commands, agents, skills) for each supported runtime.
|
|
8
|
+
*
|
|
9
|
+
* grok is intentionally absent: it is in runtime-homes.cjs but has no runtime
|
|
10
|
+
* capability descriptor. The TypeError on unknown runtime is the loud-fail
|
|
11
|
+
* signal that a runtime was added without an artifact layout descriptor.
|
|
12
|
+
*
|
|
13
|
+
* ADR-457 build-at-publish: the hand-written bin/lib/runtime-artifact-layout.cjs
|
|
14
|
+
* collapsed to a TypeScript source of truth. Behaviour is preserved byte-for-behaviour
|
|
15
|
+
* from the prior hand-written .cjs; only types are added.
|
|
16
|
+
*/
|
|
17
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
18
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
19
|
+
const node_os_1 = __importDefault(require("node:os"));
|
|
20
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
21
|
+
const installProfiles = require("./install-profiles.cjs");
|
|
22
|
+
const { stageSkillsForProfile, stageAgentsForProfile, stageAgentsForRuntimeWithConverter, stageSkillsForRuntimeAsSkills, stageCommandsForRuntimeFlat, } = installProfiles;
|
|
23
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
24
|
+
const runtimeArtifactConversion = require("./runtime-artifact-conversion.cjs");
|
|
25
|
+
const conversionExports = runtimeArtifactConversion;
|
|
26
|
+
// In .cts (CommonJS output) files, `require` is available as a global.
|
|
27
|
+
const _require = require;
|
|
28
|
+
/**
|
|
29
|
+
* Load bin/install.js exports in a test-safe way.
|
|
30
|
+
* Sets GSD_TEST_MODE only for the duration of the require() call and only if
|
|
31
|
+
* it was not already set, restoring the original value in a finally block so
|
|
32
|
+
* the module-level environment is never permanently mutated.
|
|
33
|
+
*/
|
|
34
|
+
function loadInstallExports() {
|
|
35
|
+
const savedTestMode = process.env['GSD_TEST_MODE'];
|
|
36
|
+
if (savedTestMode === undefined)
|
|
37
|
+
process.env['GSD_TEST_MODE'] = '1';
|
|
38
|
+
try {
|
|
39
|
+
return _require('../../../bin/install.js');
|
|
40
|
+
}
|
|
41
|
+
finally {
|
|
42
|
+
if (savedTestMode === undefined)
|
|
43
|
+
delete process.env['GSD_TEST_MODE'];
|
|
44
|
+
else
|
|
45
|
+
process.env['GSD_TEST_MODE'] = savedTestMode;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/** Cache after first successful load. */
|
|
49
|
+
let _installExports = null;
|
|
50
|
+
function getInstallExports() {
|
|
51
|
+
if (!_installExports)
|
|
52
|
+
_installExports = loadInstallExports();
|
|
53
|
+
return _installExports;
|
|
54
|
+
}
|
|
55
|
+
// ---------------------------------------------------------------------------
|
|
56
|
+
// Source root finders
|
|
57
|
+
// ---------------------------------------------------------------------------
|
|
58
|
+
/**
|
|
59
|
+
* Locate the pp-core commands source directory (commands/pp-*.md flat layout).
|
|
60
|
+
*
|
|
61
|
+
* Resolution order:
|
|
62
|
+
* 1. If runtimeConfigDir provided, check <runtimeConfigDir>/.gsd-source marker.
|
|
63
|
+
* 2. Walk up from __dirname using path.dirname (no literal .. segments).
|
|
64
|
+
* 3. Throw a descriptive error if neither succeeds.
|
|
65
|
+
*
|
|
66
|
+
* After the flat-hyphen rename (D-12), commands live as commands/pp-*.md at
|
|
67
|
+
* the commands/ level (not inside commands/gsd/). The marker pp-help.md is
|
|
68
|
+
* used as a directory sentinel to avoid false-positives on bare commands/ dirs.
|
|
69
|
+
*/
|
|
70
|
+
function findInstallSourceRoot(runtimeConfigDir) {
|
|
71
|
+
// Step 1: marker check (.gsd-source file contains the commands source path)
|
|
72
|
+
if (runtimeConfigDir) {
|
|
73
|
+
const markerPath = node_path_1.default.join(runtimeConfigDir, '.gsd-source');
|
|
74
|
+
if (node_fs_1.default.existsSync(markerPath)) {
|
|
75
|
+
try {
|
|
76
|
+
const src = node_fs_1.default.readFileSync(markerPath, 'utf8').trim();
|
|
77
|
+
if (src && node_fs_1.default.existsSync(src))
|
|
78
|
+
return src;
|
|
79
|
+
}
|
|
80
|
+
catch { /* fall through */ }
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
// Step 2: walk up from __dirname looking for commands/pp-help.md sentinel.
|
|
84
|
+
let dir = __dirname;
|
|
85
|
+
for (let i = 0; i < 6; i++) {
|
|
86
|
+
const candidate = node_path_1.default.join(dir, 'commands');
|
|
87
|
+
if (node_fs_1.default.existsSync(node_path_1.default.join(candidate, 'pp-help.md')))
|
|
88
|
+
return candidate;
|
|
89
|
+
const parent = node_path_1.default.dirname(dir);
|
|
90
|
+
if (parent === dir)
|
|
91
|
+
break;
|
|
92
|
+
dir = parent;
|
|
93
|
+
}
|
|
94
|
+
throw new Error(`findInstallSourceRoot: could not locate commands/pp-* from ${__dirname}`);
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Locate the GSD agents source directory.
|
|
98
|
+
*
|
|
99
|
+
* Resolution order:
|
|
100
|
+
* 1. If runtimeConfigDir provided, check <runtimeConfigDir>/.gsd-source marker.
|
|
101
|
+
* 2. Walk up from __dirname using path.dirname (no literal .. segments).
|
|
102
|
+
* 3. Throw a descriptive error if neither succeeds.
|
|
103
|
+
*/
|
|
104
|
+
function findAgentsSourceRoot(runtimeConfigDir) {
|
|
105
|
+
// Step 1: marker check
|
|
106
|
+
if (runtimeConfigDir) {
|
|
107
|
+
const markerPath = node_path_1.default.join(runtimeConfigDir, '.gsd-source');
|
|
108
|
+
if (node_fs_1.default.existsSync(markerPath)) {
|
|
109
|
+
try {
|
|
110
|
+
const src = node_fs_1.default.readFileSync(markerPath, 'utf8').trim();
|
|
111
|
+
if (src && node_fs_1.default.existsSync(src)) {
|
|
112
|
+
// Marker points to commands/ (flat-hyphen layout) or commands/gsd/ (legacy).
|
|
113
|
+
// agents/ is always a sibling of commands/ at the project root, so we
|
|
114
|
+
// check one level up from src, then one additional level as fallback.
|
|
115
|
+
const candidate1 = node_path_1.default.resolve(node_path_1.default.dirname(src), 'agents');
|
|
116
|
+
if (node_fs_1.default.existsSync(candidate1))
|
|
117
|
+
return candidate1;
|
|
118
|
+
const candidate2 = node_path_1.default.resolve(node_path_1.default.dirname(src), '..', 'agents');
|
|
119
|
+
if (node_fs_1.default.existsSync(candidate2))
|
|
120
|
+
return candidate2;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
catch { /* fall through */ }
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
// Step 2: walk up from __dirname
|
|
127
|
+
let dir = __dirname;
|
|
128
|
+
for (let i = 0; i < 6; i++) {
|
|
129
|
+
const candidate = node_path_1.default.join(dir, 'agents');
|
|
130
|
+
if (node_fs_1.default.existsSync(candidate))
|
|
131
|
+
return candidate;
|
|
132
|
+
const parent = node_path_1.default.dirname(dir);
|
|
133
|
+
if (parent === dir)
|
|
134
|
+
break;
|
|
135
|
+
dir = parent;
|
|
136
|
+
}
|
|
137
|
+
throw new Error(`findAgentsSourceRoot: could not locate agents/ from ${__dirname}`);
|
|
138
|
+
}
|
|
139
|
+
// ---------------------------------------------------------------------------
|
|
140
|
+
// Layout table builders
|
|
141
|
+
// ---------------------------------------------------------------------------
|
|
142
|
+
function commandsKind(destSubpath, prefix, configDir) {
|
|
143
|
+
return {
|
|
144
|
+
kind: 'commands',
|
|
145
|
+
destSubpath,
|
|
146
|
+
prefix,
|
|
147
|
+
stage: (resolved) => stageSkillsForProfile(findInstallSourceRoot(configDir), resolved),
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
function agentsKind(destSubpath, prefix, configDir) {
|
|
151
|
+
return {
|
|
152
|
+
kind: 'agents',
|
|
153
|
+
destSubpath,
|
|
154
|
+
prefix,
|
|
155
|
+
stage: (resolved) => stageAgentsForProfile(findAgentsSourceRoot(configDir), resolved),
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Build a converted-agents kind descriptor for runtimes whose agent `.md` files
|
|
160
|
+
* need runtime-specific frontmatter/body conversion (e.g. Copilot, Cursor, Codex).
|
|
161
|
+
*
|
|
162
|
+
* Unlike `agentsKind` (which raw-copies source files), this kind applies
|
|
163
|
+
* `converterName` from Runtime Artifact Conversion exports to each agent file
|
|
164
|
+
* during staging, writing flat `${name}.md` files to the staged directory.
|
|
165
|
+
*
|
|
166
|
+
* Agent filenames are preserved verbatim (the prefix is already embedded in the
|
|
167
|
+
* agent stem — e.g. `gsd-planner.md`).
|
|
168
|
+
*
|
|
169
|
+
* Mirrors the `convertedCommandsKind` pattern (#785).
|
|
170
|
+
*
|
|
171
|
+
* @param destSubpath destination subpath within configDir (e.g. 'agents')
|
|
172
|
+
* @param prefix filename prefix (informational; not applied here)
|
|
173
|
+
* @param converterName name of converter function in Runtime Artifact Conversion exports
|
|
174
|
+
* @param configDir runtime config dir (for .gsd-source marker resolution)
|
|
175
|
+
*/
|
|
176
|
+
function convertedAgentsKind(destSubpath, prefix, converterName, configDir) {
|
|
177
|
+
return {
|
|
178
|
+
kind: 'agents',
|
|
179
|
+
destSubpath,
|
|
180
|
+
prefix,
|
|
181
|
+
stage: (resolved) => {
|
|
182
|
+
const converter = conversionExports[converterName];
|
|
183
|
+
return stageAgentsForRuntimeWithConverter(findAgentsSourceRoot(configDir), resolved, converter);
|
|
184
|
+
},
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
function kimiAgentsKind(destSubpath, prefix, configDir) {
|
|
188
|
+
return {
|
|
189
|
+
kind: 'kimi-agents',
|
|
190
|
+
destSubpath,
|
|
191
|
+
prefix,
|
|
192
|
+
stage: (resolved) => {
|
|
193
|
+
const buildKimiAgentArtifacts = conversionExports['buildKimiAgentArtifacts'];
|
|
194
|
+
const stagedAgents = stageAgentsForProfile(findAgentsSourceRoot(configDir), resolved);
|
|
195
|
+
const subagents = [];
|
|
196
|
+
if (node_fs_1.default.existsSync(stagedAgents)) {
|
|
197
|
+
for (const entry of node_fs_1.default.readdirSync(stagedAgents, { withFileTypes: true })) {
|
|
198
|
+
if (!entry.isFile() || !entry.name.endsWith('.md'))
|
|
199
|
+
continue;
|
|
200
|
+
const agentPath = node_path_1.default.join(stagedAgents, entry.name);
|
|
201
|
+
subagents.push({
|
|
202
|
+
path: node_path_1.default.join('agents', entry.name).replace(/\\/g, '/'),
|
|
203
|
+
content: node_fs_1.default.readFileSync(agentPath, 'utf8'),
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
const rootAgent = `---\nname: pp\ndescription: Run GSD workflows in Kimi CLI.\ntools: Agent\n---\n\n# GSD for Kimi CLI\n\nCoordinate installed /skill:gsd-* workflows and route work to generated GSD subagents when a workflow requires an agent handoff.\n`;
|
|
208
|
+
const artifacts = buildKimiAgentArtifacts({ rootAgent, subagents });
|
|
209
|
+
const stageDir = node_fs_1.default.mkdtempSync(node_path_1.default.join(node_os_1.default.tmpdir(), 'gsd-kimi-agents-'));
|
|
210
|
+
installProfiles.STAGED_DIRS.add(stageDir);
|
|
211
|
+
node_fs_1.default.writeFileSync(node_path_1.default.join(stageDir, 'gsd.yaml'), artifacts.root.yaml);
|
|
212
|
+
node_fs_1.default.writeFileSync(node_path_1.default.join(stageDir, 'gsd.md'), artifacts.root.prompt);
|
|
213
|
+
const subagentsDir = node_path_1.default.join(stageDir, 'subagents');
|
|
214
|
+
node_fs_1.default.mkdirSync(subagentsDir, { recursive: true });
|
|
215
|
+
for (const artifact of artifacts.subagents) {
|
|
216
|
+
node_fs_1.default.writeFileSync(node_path_1.default.join(subagentsDir, `${artifact.name}.yaml`), artifact.yaml);
|
|
217
|
+
node_fs_1.default.writeFileSync(node_path_1.default.join(subagentsDir, `${artifact.name}.md`), artifact.prompt);
|
|
218
|
+
}
|
|
219
|
+
return stageDir;
|
|
220
|
+
},
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Build a skills kind descriptor.
|
|
225
|
+
*
|
|
226
|
+
* @param destSubpath
|
|
227
|
+
* @param prefix
|
|
228
|
+
* @param converterName name of converter function in Runtime Artifact Conversion exports
|
|
229
|
+
* @param runtime canonical runtime ID (gates Hermes/Qwen branding in converter)
|
|
230
|
+
* @param configDir runtime config dir (for .gsd-source marker resolution)
|
|
231
|
+
* @param nested if true, nest concrete skills under their ns-* routers (#69)
|
|
232
|
+
* @param scope install scope; converted to isGlobal and passed as 5th positional
|
|
233
|
+
* arg so scope-aware converters (antigravity, copilot) can choose
|
|
234
|
+
* between global home paths and workspace-relative paths without
|
|
235
|
+
* colliding with the `runtime` string at position 3.
|
|
236
|
+
*/
|
|
237
|
+
function skillsKind(destSubpath, prefix, converterName, runtime, configDir, nested = false, scope = 'global') {
|
|
238
|
+
return {
|
|
239
|
+
kind: 'skills',
|
|
240
|
+
destSubpath,
|
|
241
|
+
prefix,
|
|
242
|
+
stage: (resolved) => {
|
|
243
|
+
const realConverter = conversionExports[converterName];
|
|
244
|
+
// Compute cmdNames once per stage call for performance (#3583).
|
|
245
|
+
// Extra trailing args are ignored by converters that don't need them. The
|
|
246
|
+
// isGlobal flag is the 5th positional (NOT the 3rd): the 3rd positional is
|
|
247
|
+
// `runtime` for the claude/kimi/cline converters, so the scope-aware
|
|
248
|
+
// converters (antigravity, copilot) read isGlobal from position 5 to avoid
|
|
249
|
+
// colliding with `runtime` and always taking the global branch.
|
|
250
|
+
const cmdNames = conversionExports.readGsdCommandNames
|
|
251
|
+
? conversionExports.readGsdCommandNames()
|
|
252
|
+
: [];
|
|
253
|
+
const isGlobal = scope === 'global';
|
|
254
|
+
const wrappedConverter = (content, skillName) => realConverter(content, skillName, runtime, cmdNames, isGlobal);
|
|
255
|
+
return stageSkillsForRuntimeAsSkills(findInstallSourceRoot(configDir), resolved, wrappedConverter, prefix, nested);
|
|
256
|
+
},
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Build a converted-commands kind descriptor for runtimes that use a flat
|
|
261
|
+
* commands directory with per-file conversion (e.g. Cursor 1.6 slash commands).
|
|
262
|
+
*
|
|
263
|
+
* Unlike `commandsKind` (which passes raw source files through), this kind
|
|
264
|
+
* applies `converterName` from Runtime Artifact Conversion exports to each file during
|
|
265
|
+
* staging, writing flat `${prefix}${stem}.md` files to the staged directory.
|
|
266
|
+
*
|
|
267
|
+
* The staged files are then written by `_copyStaged` (commands branch) which
|
|
268
|
+
* handles prefix logic via the existing layout machinery.
|
|
269
|
+
*
|
|
270
|
+
* @param destSubpath destination subpath within configDir (e.g. 'commands')
|
|
271
|
+
* @param prefix filename prefix, e.g. 'gsd-'
|
|
272
|
+
* @param converterName name of converter function in Runtime Artifact Conversion exports
|
|
273
|
+
* @param configDir runtime config dir (for .gsd-source marker resolution)
|
|
274
|
+
*/
|
|
275
|
+
function convertedCommandsKind(destSubpath, prefix, converterName, configDir) {
|
|
276
|
+
return {
|
|
277
|
+
kind: 'commands',
|
|
278
|
+
destSubpath,
|
|
279
|
+
prefix,
|
|
280
|
+
stage: (resolved) => {
|
|
281
|
+
const converter = conversionExports[converterName];
|
|
282
|
+
return stageCommandsForRuntimeFlat(findInstallSourceRoot(configDir), resolved, converter, prefix);
|
|
283
|
+
},
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
function getRegistry() {
|
|
287
|
+
return _require('./capability-registry.cjs');
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Map a single ArtifactKindDescriptor entry to an ArtifactKind using the
|
|
291
|
+
* matching builder function. Mirrors the hand-built calls in the old switch.
|
|
292
|
+
*/
|
|
293
|
+
function dispatchKindEntry(entry, runtime, configDir, scope) {
|
|
294
|
+
const { kind, destSubpath, prefix, nesting, converter } = entry;
|
|
295
|
+
const nested = nesting === 'nested';
|
|
296
|
+
switch (kind) {
|
|
297
|
+
case 'commands':
|
|
298
|
+
if (converter == null) {
|
|
299
|
+
return commandsKind(destSubpath, prefix, configDir);
|
|
300
|
+
}
|
|
301
|
+
return convertedCommandsKind(destSubpath, prefix, converter, configDir);
|
|
302
|
+
case 'agents':
|
|
303
|
+
if (converter == null) {
|
|
304
|
+
return agentsKind(destSubpath, prefix, configDir);
|
|
305
|
+
}
|
|
306
|
+
return convertedAgentsKind(destSubpath, prefix, converter, configDir);
|
|
307
|
+
case 'skills':
|
|
308
|
+
if (converter == null) {
|
|
309
|
+
throw new TypeError(`resolveRuntimeArtifactLayout: skills entry for '${runtime}' has converter=null (converter is required for skills)`);
|
|
310
|
+
}
|
|
311
|
+
return skillsKind(destSubpath, prefix, converter, runtime, configDir, nested, scope);
|
|
312
|
+
case 'kimi-agents':
|
|
313
|
+
return kimiAgentsKind(destSubpath, prefix, configDir);
|
|
314
|
+
default:
|
|
315
|
+
throw new TypeError(`resolveRuntimeArtifactLayout: unknown kind '${kind}' in descriptor for runtime '${runtime}'`);
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
* Resolve the artifact layout for a given runtime and config directory.
|
|
320
|
+
*
|
|
321
|
+
* ADR-857 phase 5d: driven by the capability-registry artifactLayout descriptor
|
|
322
|
+
* instead of a hardcoded switch statement.
|
|
323
|
+
*/
|
|
324
|
+
function resolveRuntimeArtifactLayout(runtime, configDir, scope = 'global') {
|
|
325
|
+
return resolveRuntimeArtifactLayoutFromRegistry(getRegistry(), runtime, configDir, scope);
|
|
326
|
+
}
|
|
327
|
+
function resolveRuntimeArtifactLayoutFromRegistry(registry, runtime, configDir, scope = 'global') {
|
|
328
|
+
if (typeof configDir !== 'string' || configDir === '') {
|
|
329
|
+
throw new TypeError('configDir must be a non-empty string');
|
|
330
|
+
}
|
|
331
|
+
if (scope !== 'local' && scope !== 'global') {
|
|
332
|
+
throw new TypeError('scope must be "local" or "global"');
|
|
333
|
+
}
|
|
334
|
+
const desc = registry.runtimes[runtime]?.runtime?.artifactLayout;
|
|
335
|
+
if (!desc) {
|
|
336
|
+
throw new TypeError(`Unknown runtime: '${runtime}' — add to runtime-artifact-layout.cjs table`);
|
|
337
|
+
}
|
|
338
|
+
const entries = desc[scope] ?? [];
|
|
339
|
+
const kinds = entries.map((entry) => dispatchKindEntry(entry, runtime, configDir, scope));
|
|
340
|
+
return { runtime, configDir, scope, kinds };
|
|
341
|
+
}
|
|
342
|
+
module.exports = { resolveRuntimeArtifactLayout, resolveRuntimeArtifactLayoutFromRegistry, findInstallSourceRoot, getInstallExports };
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
/**
|
|
3
|
+
* Runtime config adapter registry — dispatch table for install-phase config
|
|
4
|
+
* mutations (issue #60), replacing inline `runtime === '...'` branching in
|
|
5
|
+
* bin/install.js.
|
|
6
|
+
*
|
|
7
|
+
* ADR-857 phase 5g drive 2: The hand-kept REGISTRY const has been retired.
|
|
8
|
+
* Values are now read directly from the capability-registry.cjs descriptor
|
|
9
|
+
* (capabilities/<id>/capability.json runtime block) so a single source of
|
|
10
|
+
* truth drives all surfaces.
|
|
11
|
+
*
|
|
12
|
+
* Design notes:
|
|
13
|
+
* - `installSurface` selects which config handler install() runs:
|
|
14
|
+
* 'settings-json' → fall through to the shared settings.json accumulation.
|
|
15
|
+
* 'codex-toml' → early-return after writing codex.toml.
|
|
16
|
+
* 'copilot-instructions' → early-return after writing .github/copilot-instructions.md.
|
|
17
|
+
* 'cline-rules' → early-return after writing .clinerules.
|
|
18
|
+
* 'cursor-hooks-json' → early-return after writing .cursor/hooks.json (issue #777).
|
|
19
|
+
* 'profile-marker-only' → early-return after writing only the profile marker.
|
|
20
|
+
* - `writesSharedSettings` is the finishInstall writeSettings gate:
|
|
21
|
+
* false for codex / copilot / kilo / cursor / windsurf / trae / cline / kimi (legacy exclusion list).
|
|
22
|
+
* true for all other runtimes.
|
|
23
|
+
* - `finishPermissionWriter` names the finishInstall-phase dedicated config writer:
|
|
24
|
+
* 'opencode' → writes BOTH shared settings AND its own permissions file.
|
|
25
|
+
* 'kilo' → writes only its own permissions file.
|
|
26
|
+
* null → no dedicated permission writer.
|
|
27
|
+
*/
|
|
28
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
29
|
+
const { runtimes } = require('./capability-registry.cjs');
|
|
30
|
+
/** Valid sandboxTier enum values — mirrors the gen-capability-registry validator vocabulary. */
|
|
31
|
+
const VALID_SANDBOX_TIERS = new Set(['none', 'codex-agent-sandbox']);
|
|
32
|
+
/** The complete set of 16 supported runtimes for config-adapter dispatch. */
|
|
33
|
+
const ALLOWED_CONFIG_RUNTIMES = new Set(Object.entries(runtimes)
|
|
34
|
+
.filter(([, cap]) => cap && cap.runtime && typeof cap.runtime['installSurface'] === 'string')
|
|
35
|
+
.map(([id]) => id));
|
|
36
|
+
/** All valid installSurface values. */
|
|
37
|
+
const INSTALL_SURFACES = Object.freeze([
|
|
38
|
+
'settings-json',
|
|
39
|
+
'codex-toml',
|
|
40
|
+
'copilot-instructions',
|
|
41
|
+
'cline-rules',
|
|
42
|
+
'cursor-hooks-json',
|
|
43
|
+
'profile-marker-only',
|
|
44
|
+
]);
|
|
45
|
+
/**
|
|
46
|
+
* Resolve the config adapter intent for a given runtime.
|
|
47
|
+
*
|
|
48
|
+
* Returns a fresh object each call so callers cannot poison the registry by
|
|
49
|
+
* mutating the returned value.
|
|
50
|
+
*
|
|
51
|
+
* @throws {TypeError} if runtime is not a known supported runtime.
|
|
52
|
+
*/
|
|
53
|
+
function resolveRuntimeConfigIntent(runtime) {
|
|
54
|
+
const entry = runtimes[runtime]?.runtime;
|
|
55
|
+
if (!entry)
|
|
56
|
+
throw new TypeError(`Unknown runtime for config adapter: ${runtime}`);
|
|
57
|
+
const permissionWriter = entry['permissionWriter'];
|
|
58
|
+
return {
|
|
59
|
+
runtime,
|
|
60
|
+
installSurface: entry['installSurface'],
|
|
61
|
+
writesSharedSettings: entry['writesSharedSettings'],
|
|
62
|
+
finishPermissionWriter: permissionWriter == null ? null : permissionWriter,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
function resolveInstallPlanFromRuntimes(runtimeDescriptors, runtime) {
|
|
66
|
+
const desc = runtimeDescriptors[runtime]?.runtime;
|
|
67
|
+
if (!desc)
|
|
68
|
+
throw new TypeError(`Unknown runtime for install plan: ${runtime}`);
|
|
69
|
+
if (desc['hooksSurface'] == null) {
|
|
70
|
+
throw new TypeError(`runtime.hooksSurface is required for install plan: ${runtime}`);
|
|
71
|
+
}
|
|
72
|
+
const sandboxTier = desc['sandboxTier'];
|
|
73
|
+
if (typeof sandboxTier !== 'string' || !VALID_SANDBOX_TIERS.has(sandboxTier)) {
|
|
74
|
+
throw new TypeError(`Runtime '${runtime}' has a missing or invalid sandboxTier descriptor axis: ${JSON.stringify(sandboxTier)}`);
|
|
75
|
+
}
|
|
76
|
+
const permissionWriter = desc['permissionWriter'];
|
|
77
|
+
return {
|
|
78
|
+
runtime,
|
|
79
|
+
installSurface: desc['installSurface'],
|
|
80
|
+
writesSharedSettings: desc['writesSharedSettings'],
|
|
81
|
+
finishPermissionWriter: permissionWriter == null ? null : permissionWriter,
|
|
82
|
+
hookEvents: desc['hookEvents'],
|
|
83
|
+
extendedHookEvents: Array.isArray(desc['extendedHookEvents']) ? [...desc['extendedHookEvents']] : [],
|
|
84
|
+
hooksSurface: desc['hooksSurface'],
|
|
85
|
+
sandboxTier,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Resolve the complete install plan for a given runtime.
|
|
90
|
+
*
|
|
91
|
+
* Composes the config-intent axes from resolveRuntimeConfigIntent PLUS the
|
|
92
|
+
* three hook axes (hookEvents / extendedHookEvents / hooksSurface) that
|
|
93
|
+
* install() previously read scattered from the capability registry.
|
|
94
|
+
*
|
|
95
|
+
* ADR-857 phase 5g capstone — single typed seam for all install-level
|
|
96
|
+
* descriptor reads. Returns a fresh object each call.
|
|
97
|
+
*
|
|
98
|
+
* @throws {TypeError} if runtime is not a known supported runtime.
|
|
99
|
+
*/
|
|
100
|
+
function resolveInstallPlan(runtime) {
|
|
101
|
+
return resolveInstallPlanFromRuntimes(runtimes, runtime);
|
|
102
|
+
}
|
|
103
|
+
module.exports = { resolveRuntimeConfigIntent, resolveInstallPlan, resolveInstallPlanFromRuntimes, ALLOWED_CONFIG_RUNTIMES, INSTALL_SURFACES };
|