peaks-loop 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +51 -0
- package/CHANGELOG.md +3136 -0
- package/LICENSE +21 -0
- package/README-en.md +281 -0
- package/README.md +365 -0
- package/agents/karpathy-reviewer.md +229 -0
- package/bin/peaks.js +2 -0
- package/dist/src/cli/cli-helpers.d.ts +25 -0
- package/dist/src/cli/cli-helpers.js +78 -0
- package/dist/src/cli/commands/agent-commands.d.ts +20 -0
- package/dist/src/cli/commands/agent-commands.js +48 -0
- package/dist/src/cli/commands/audit-commands.d.ts +28 -0
- package/dist/src/cli/commands/audit-commands.js +437 -0
- package/dist/src/cli/commands/capability-commands.d.ts +16 -0
- package/dist/src/cli/commands/capability-commands.js +45 -0
- package/dist/src/cli/commands/capability-worker-config-sc-commands.d.ts +3 -0
- package/dist/src/cli/commands/capability-worker-config-sc-commands.js +10 -0
- package/dist/src/cli/commands/classify-classify-commands.d.ts +19 -0
- package/dist/src/cli/commands/classify-classify-commands.js +151 -0
- package/dist/src/cli/commands/code-review-commands.d.ts +34 -0
- package/dist/src/cli/commands/code-review-commands.js +83 -0
- package/dist/src/cli/commands/codegraph-commands.d.ts +3 -0
- package/dist/src/cli/commands/codegraph-commands.js +99 -0
- package/dist/src/cli/commands/complexity-commands.d.ts +9 -0
- package/dist/src/cli/commands/complexity-commands.js +34 -0
- package/dist/src/cli/commands/config-commands.d.ts +3 -0
- package/dist/src/cli/commands/config-commands.js +220 -0
- package/dist/src/cli/commands/context-builder-commands.d.ts +11 -0
- package/dist/src/cli/commands/context-builder-commands.js +85 -0
- package/dist/src/cli/commands/context-commands.d.ts +21 -0
- package/dist/src/cli/commands/context-commands.js +254 -0
- package/dist/src/cli/commands/contract-commands.d.ts +26 -0
- package/dist/src/cli/commands/contract-commands.js +114 -0
- package/dist/src/cli/commands/core/artifacts-command.d.ts +3 -0
- package/dist/src/cli/commands/core/artifacts-command.js +62 -0
- package/dist/src/cli/commands/core/binding-commands.d.ts +3 -0
- package/dist/src/cli/commands/core/binding-commands.js +58 -0
- package/dist/src/cli/commands/core/doctor-command.d.ts +11 -0
- package/dist/src/cli/commands/core/doctor-command.js +204 -0
- package/dist/src/cli/commands/core/memory-command.d.ts +3 -0
- package/dist/src/cli/commands/core/memory-command.js +98 -0
- package/dist/src/cli/commands/core/profile-command.d.ts +3 -0
- package/dist/src/cli/commands/core/profile-command.js +9 -0
- package/dist/src/cli/commands/core/proxy-command.d.ts +3 -0
- package/dist/src/cli/commands/core/proxy-command.js +26 -0
- package/dist/src/cli/commands/core/session-command.d.ts +3 -0
- package/dist/src/cli/commands/core/session-command.js +213 -0
- package/dist/src/cli/commands/core/skill-command.d.ts +3 -0
- package/dist/src/cli/commands/core/skill-command.js +275 -0
- package/dist/src/cli/commands/core/standards-command.d.ts +3 -0
- package/dist/src/cli/commands/core/standards-command.js +95 -0
- package/dist/src/cli/commands/core-artifact-commands.d.ts +15 -0
- package/dist/src/cli/commands/core-artifact-commands.js +31 -0
- package/dist/src/cli/commands/dispatch-commands.d.ts +10 -0
- package/dist/src/cli/commands/dispatch-commands.js +351 -0
- package/dist/src/cli/commands/dispatch-from-dag.d.ts +3 -0
- package/dist/src/cli/commands/dispatch-from-dag.js +251 -0
- package/dist/src/cli/commands/doc-commands.d.ts +11 -0
- package/dist/src/cli/commands/doc-commands.js +65 -0
- package/dist/src/cli/commands/feedback-commands.d.ts +18 -0
- package/dist/src/cli/commands/feedback-commands.js +145 -0
- package/dist/src/cli/commands/final-review-commands.d.ts +31 -0
- package/dist/src/cli/commands/final-review-commands.js +161 -0
- package/dist/src/cli/commands/fixture-commands.d.ts +32 -0
- package/dist/src/cli/commands/fixture-commands.js +91 -0
- package/dist/src/cli/commands/fork-commands.d.ts +16 -0
- package/dist/src/cli/commands/fork-commands.js +163 -0
- package/dist/src/cli/commands/gate-commands.d.ts +3 -0
- package/dist/src/cli/commands/gate-commands.js +117 -0
- package/dist/src/cli/commands/heartbeat-commands.d.ts +3 -0
- package/dist/src/cli/commands/heartbeat-commands.js +135 -0
- package/dist/src/cli/commands/hook-handle.d.ts +17 -0
- package/dist/src/cli/commands/hook-handle.js +157 -0
- package/dist/src/cli/commands/hooks-commands.d.ts +3 -0
- package/dist/src/cli/commands/hooks-commands.js +156 -0
- package/dist/src/cli/commands/impact-commands.d.ts +15 -0
- package/dist/src/cli/commands/impact-commands.js +62 -0
- package/dist/src/cli/commands/legacy-commands.d.ts +11 -0
- package/dist/src/cli/commands/legacy-commands.js +32 -0
- package/dist/src/cli/commands/log-commands.d.ts +17 -0
- package/dist/src/cli/commands/log-commands.js +64 -0
- package/dist/src/cli/commands/loop-commands.d.ts +21 -0
- package/dist/src/cli/commands/loop-commands.js +128 -0
- package/dist/src/cli/commands/loop-eval-commands.d.ts +20 -0
- package/dist/src/cli/commands/loop-eval-commands.js +526 -0
- package/dist/src/cli/commands/memory-commands.d.ts +23 -0
- package/dist/src/cli/commands/memory-commands.js +129 -0
- package/dist/src/cli/commands/migrate-1-4-1-command.d.ts +11 -0
- package/dist/src/cli/commands/migrate-1-4-1-command.js +34 -0
- package/dist/src/cli/commands/migrate-v2-10-to-v2-11-command.d.ts +20 -0
- package/dist/src/cli/commands/migrate-v2-10-to-v2-11-command.js +52 -0
- package/dist/src/cli/commands/mut-commands.d.ts +20 -0
- package/dist/src/cli/commands/mut-commands.js +239 -0
- package/dist/src/cli/commands/observability-commands.d.ts +22 -0
- package/dist/src/cli/commands/observability-commands.js +201 -0
- package/dist/src/cli/commands/openspec-commands.d.ts +3 -0
- package/dist/src/cli/commands/openspec-commands.js +237 -0
- package/dist/src/cli/commands/perf-audit-commands.d.ts +22 -0
- package/dist/src/cli/commands/perf-audit-commands.js +132 -0
- package/dist/src/cli/commands/perf-commands.d.ts +3 -0
- package/dist/src/cli/commands/perf-commands.js +41 -0
- package/dist/src/cli/commands/playwright-commands.d.ts +95 -0
- package/dist/src/cli/commands/playwright-commands.js +432 -0
- package/dist/src/cli/commands/prd-blocks-commands.d.ts +18 -0
- package/dist/src/cli/commands/prd-blocks-commands.js +50 -0
- package/dist/src/cli/commands/prd-commands.d.ts +18 -0
- package/dist/src/cli/commands/prd-commands.js +141 -0
- package/dist/src/cli/commands/preferences-commands.d.ts +2 -0
- package/dist/src/cli/commands/preferences-commands.js +197 -0
- package/dist/src/cli/commands/project-commands.d.ts +3 -0
- package/dist/src/cli/commands/project-commands.js +248 -0
- package/dist/src/cli/commands/qa-business-review-commands.d.ts +17 -0
- package/dist/src/cli/commands/qa-business-review-commands.js +148 -0
- package/dist/src/cli/commands/qa-commands.d.ts +94 -0
- package/dist/src/cli/commands/qa-commands.js +271 -0
- package/dist/src/cli/commands/release-commands.d.ts +24 -0
- package/dist/src/cli/commands/release-commands.js +231 -0
- package/dist/src/cli/commands/request-commands.d.ts +3 -0
- package/dist/src/cli/commands/request-commands.js +509 -0
- package/dist/src/cli/commands/retrospective-commands.d.ts +12 -0
- package/dist/src/cli/commands/retrospective-commands.js +175 -0
- package/dist/src/cli/commands/reviewer-commands.d.ts +14 -0
- package/dist/src/cli/commands/reviewer-commands.js +64 -0
- package/dist/src/cli/commands/role-commands.d.ts +13 -0
- package/dist/src/cli/commands/role-commands.js +85 -0
- package/dist/src/cli/commands/sc-commands.d.ts +3 -0
- package/dist/src/cli/commands/sc-commands.js +45 -0
- package/dist/src/cli/commands/scan-commands.d.ts +3 -0
- package/dist/src/cli/commands/scan-commands.js +445 -0
- package/dist/src/cli/commands/security-audit-commands.d.ts +23 -0
- package/dist/src/cli/commands/security-audit-commands.js +132 -0
- package/dist/src/cli/commands/session-checkpoint-command.d.ts +10 -0
- package/dist/src/cli/commands/session-checkpoint-command.js +100 -0
- package/dist/src/cli/commands/session-resume-command.d.ts +11 -0
- package/dist/src/cli/commands/session-resume-command.js +83 -0
- package/dist/src/cli/commands/share-commands.d.ts +17 -0
- package/dist/src/cli/commands/share-commands.js +296 -0
- package/dist/src/cli/commands/skill-conformance-commands.d.ts +9 -0
- package/dist/src/cli/commands/skill-conformance-commands.js +39 -0
- package/dist/src/cli/commands/slice-commands.d.ts +24 -0
- package/dist/src/cli/commands/slice-commands.js +492 -0
- package/dist/src/cli/commands/slice-integrate-commands.d.ts +11 -0
- package/dist/src/cli/commands/slice-integrate-commands.js +74 -0
- package/dist/src/cli/commands/slice-review-commands.d.ts +23 -0
- package/dist/src/cli/commands/slice-review-commands.js +162 -0
- package/dist/src/cli/commands/smoke-commands.d.ts +21 -0
- package/dist/src/cli/commands/smoke-commands.js +203 -0
- package/dist/src/cli/commands/solo-commands.d.ts +80 -0
- package/dist/src/cli/commands/solo-commands.js +435 -0
- package/dist/src/cli/commands/sop-commands.d.ts +3 -0
- package/dist/src/cli/commands/sop-commands.js +215 -0
- package/dist/src/cli/commands/statusline-commands.d.ts +3 -0
- package/dist/src/cli/commands/statusline-commands.js +169 -0
- package/dist/src/cli/commands/sub-agent-commands.d.ts +22 -0
- package/dist/src/cli/commands/sub-agent-commands.js +19 -0
- package/dist/src/cli/commands/sub-agent-dispatch-guard.d.ts +55 -0
- package/dist/src/cli/commands/sub-agent-dispatch-guard.js +57 -0
- package/dist/src/cli/commands/sub-agent-shared.d.ts +99 -0
- package/dist/src/cli/commands/sub-agent-shared.js +67 -0
- package/dist/src/cli/commands/test-commands.d.ts +47 -0
- package/dist/src/cli/commands/test-commands.js +204 -0
- package/dist/src/cli/commands/understand-commands.d.ts +3 -0
- package/dist/src/cli/commands/understand-commands.js +112 -0
- package/dist/src/cli/commands/upgrade-commands.d.ts +23 -0
- package/dist/src/cli/commands/upgrade-commands.js +119 -0
- package/dist/src/cli/commands/user-touchpoint-commands.d.ts +18 -0
- package/dist/src/cli/commands/user-touchpoint-commands.js +78 -0
- package/dist/src/cli/commands/verdict-aggregate-command.d.ts +14 -0
- package/dist/src/cli/commands/verdict-aggregate-command.js +106 -0
- package/dist/src/cli/commands/worker-commands.d.ts +3 -0
- package/dist/src/cli/commands/worker-commands.js +52 -0
- package/dist/src/cli/commands/workflow-commands.d.ts +3 -0
- package/dist/src/cli/commands/workflow-commands.js +535 -0
- package/dist/src/cli/commands/workflow-plan-commands.d.ts +39 -0
- package/dist/src/cli/commands/workflow-plan-commands.js +163 -0
- package/dist/src/cli/commands/workspace/clean-command.d.ts +14 -0
- package/dist/src/cli/commands/workspace/clean-command.js +49 -0
- package/dist/src/cli/commands/workspace/helpers.d.ts +28 -0
- package/dist/src/cli/commands/workspace/helpers.js +87 -0
- package/dist/src/cli/commands/workspace/init-command.d.ts +121 -0
- package/dist/src/cli/commands/workspace/init-command.js +436 -0
- package/dist/src/cli/commands/workspace/migrate-command.d.ts +11 -0
- package/dist/src/cli/commands/workspace/migrate-command.js +91 -0
- package/dist/src/cli/commands/workspace/reconcile-command.d.ts +14 -0
- package/dist/src/cli/commands/workspace/reconcile-command.js +103 -0
- package/dist/src/cli/commands/workspace-commands.d.ts +18 -0
- package/dist/src/cli/commands/workspace-commands.js +50 -0
- package/dist/src/cli/index.d.ts +1 -0
- package/dist/src/cli/index.js +30 -0
- package/dist/src/cli/program.d.ts +5 -0
- package/dist/src/cli/program.js +336 -0
- package/dist/src/hooks/pre-tool-use-sub-agent.d.ts +28 -0
- package/dist/src/hooks/pre-tool-use-sub-agent.js +105 -0
- package/dist/src/lib/render/message-renderer.d.ts +20 -0
- package/dist/src/lib/render/message-renderer.js +80 -0
- package/dist/src/services/agent/ecc-agent-service.d.ts +47 -0
- package/dist/src/services/agent/ecc-agent-service.js +143 -0
- package/dist/src/services/artifacts/artifact-lint-service.d.ts +23 -0
- package/dist/src/services/artifacts/artifact-lint-service.js +99 -0
- package/dist/src/services/artifacts/artifact-prerequisites.d.ts +78 -0
- package/dist/src/services/artifacts/artifact-prerequisites.js +491 -0
- package/dist/src/services/artifacts/artifact-service.d.ts +43 -0
- package/dist/src/services/artifacts/artifact-service.js +98 -0
- package/dist/src/services/artifacts/artifact-templates.d.ts +30 -0
- package/dist/src/services/artifacts/artifact-templates.js +302 -0
- package/dist/src/services/artifacts/repair-cycle-service.d.ts +23 -0
- package/dist/src/services/artifacts/repair-cycle-service.js +52 -0
- package/dist/src/services/artifacts/request-artifact-service.d.ts +116 -0
- package/dist/src/services/artifacts/request-artifact-service.js +451 -0
- package/dist/src/services/artifacts/request-artifact-state-helpers.d.ts +51 -0
- package/dist/src/services/artifacts/request-artifact-state-helpers.js +114 -0
- package/dist/src/services/artifacts/workspace-service.d.ts +34 -0
- package/dist/src/services/artifacts/workspace-service.js +272 -0
- package/dist/src/services/audit/artifact-writer.d.ts +93 -0
- package/dist/src/services/audit/artifact-writer.js +303 -0
- package/dist/src/services/audit/audit-goal-service.d.ts +35 -0
- package/dist/src/services/audit/audit-goal-service.js +75 -0
- package/dist/src/services/audit/audit-goal-types.d.ts +40 -0
- package/dist/src/services/audit/audit-goal-types.js +15 -0
- package/dist/src/services/audit/backing-detector.d.ts +24 -0
- package/dist/src/services/audit/backing-detector.js +59 -0
- package/dist/src/services/audit/classifier.d.ts +38 -0
- package/dist/src/services/audit/classifier.js +134 -0
- package/dist/src/services/audit/decision-writer.d.ts +76 -0
- package/dist/src/services/audit/decision-writer.js +217 -0
- package/dist/src/services/audit/enforcers/active-skill-resolver.d.ts +29 -0
- package/dist/src/services/audit/enforcers/active-skill-resolver.js +71 -0
- package/dist/src/services/audit/enforcers/design-draft-confirm.d.ts +24 -0
- package/dist/src/services/audit/enforcers/design-draft-confirm.js +58 -0
- package/dist/src/services/audit/enforcers/lint-audit-regression.d.ts +21 -0
- package/dist/src/services/audit/enforcers/lint-audit-regression.js +86 -0
- package/dist/src/services/audit/enforcers/lint-catalog-governance.d.ts +32 -0
- package/dist/src/services/audit/enforcers/lint-catalog-governance.js +48 -0
- package/dist/src/services/audit/enforcers/lint-cli-back.d.ts +16 -0
- package/dist/src/services/audit/enforcers/lint-cli-back.js +35 -0
- package/dist/src/services/audit/enforcers/lint-output-style.d.ts +11 -0
- package/dist/src/services/audit/enforcers/lint-output-style.js +94 -0
- package/dist/src/services/audit/enforcers/lint-reference-integrity.d.ts +6 -0
- package/dist/src/services/audit/enforcers/lint-reference-integrity.js +83 -0
- package/dist/src/services/audit/enforcers/lint-reference-shape.d.ts +30 -0
- package/dist/src/services/audit/enforcers/lint-reference-shape.js +272 -0
- package/dist/src/services/audit/enforcers/lint-style.d.ts +49 -0
- package/dist/src/services/audit/enforcers/lint-style.js +173 -0
- package/dist/src/services/audit/enforcers/lint-workflow-shape.d.ts +4 -0
- package/dist/src/services/audit/enforcers/lint-workflow-shape.js +100 -0
- package/dist/src/services/audit/enforcers/login-gate.d.ts +23 -0
- package/dist/src/services/audit/enforcers/login-gate.js +40 -0
- package/dist/src/services/audit/enforcers/mock-placement.d.ts +25 -0
- package/dist/src/services/audit/enforcers/mock-placement.js +48 -0
- package/dist/src/services/audit/enforcers/no-root-pollution.d.ts +21 -0
- package/dist/src/services/audit/enforcers/no-root-pollution.js +56 -0
- package/dist/src/services/audit/enforcers/pre-rd-scan.d.ts +22 -0
- package/dist/src/services/audit/enforcers/pre-rd-scan.js +23 -0
- package/dist/src/services/audit/enforcers/prototype-fidelity.d.ts +25 -0
- package/dist/src/services/audit/enforcers/prototype-fidelity.js +75 -0
- package/dist/src/services/audit/enforcers/resume-detection.d.ts +21 -0
- package/dist/src/services/audit/enforcers/resume-detection.js +52 -0
- package/dist/src/services/audit/enforcers/solo-code-ban.d.ts +23 -0
- package/dist/src/services/audit/enforcers/solo-code-ban.js +27 -0
- package/dist/src/services/audit/enforcers/sub-agent-sid.d.ts +25 -0
- package/dist/src/services/audit/enforcers/sub-agent-sid.js +63 -0
- package/dist/src/services/audit/prose-ratio-calculator.d.ts +45 -0
- package/dist/src/services/audit/prose-ratio-calculator.js +52 -0
- package/dist/src/services/audit/red-line-catalog-p2-a.d.ts +21 -0
- package/dist/src/services/audit/red-line-catalog-p2-a.js +229 -0
- package/dist/src/services/audit/red-line-catalog-p2-b.d.ts +19 -0
- package/dist/src/services/audit/red-line-catalog-p2-b.js +225 -0
- package/dist/src/services/audit/red-line-catalog.d.ts +51 -0
- package/dist/src/services/audit/red-line-catalog.js +195 -0
- package/dist/src/services/audit/red-lines-service.d.ts +23 -0
- package/dist/src/services/audit/red-lines-service.js +464 -0
- package/dist/src/services/audit/scanners/openspec-scanner.d.ts +15 -0
- package/dist/src/services/audit/scanners/openspec-scanner.js +55 -0
- package/dist/src/services/audit/scanners/rules-tree-scanner.d.ts +16 -0
- package/dist/src/services/audit/scanners/rules-tree-scanner.js +56 -0
- package/dist/src/services/audit/scanners/skills-tree-scanner.d.ts +17 -0
- package/dist/src/services/audit/scanners/skills-tree-scanner.js +46 -0
- package/dist/src/services/audit/static-service.d.ts +60 -0
- package/dist/src/services/audit/static-service.js +130 -0
- package/dist/src/services/audit/types.d.ts +86 -0
- package/dist/src/services/audit/types.js +13 -0
- package/dist/src/services/audit-independent/perf-audit-service.d.ts +151 -0
- package/dist/src/services/audit-independent/perf-audit-service.js +316 -0
- package/dist/src/services/audit-independent/security-audit-service.d.ts +155 -0
- package/dist/src/services/audit-independent/security-audit-service.js +316 -0
- package/dist/src/services/classify/classify-service.d.ts +42 -0
- package/dist/src/services/classify/classify-service.js +122 -0
- package/dist/src/services/classify/classify-types.d.ts +79 -0
- package/dist/src/services/classify/classify-types.js +90 -0
- package/dist/src/services/code-review/ecc-bridge.d.ts +148 -0
- package/dist/src/services/code-review/ecc-bridge.js +242 -0
- package/dist/src/services/code-review/ocr-service.d.ts +129 -0
- package/dist/src/services/code-review/ocr-service.js +369 -0
- package/dist/src/services/codegraph/codegraph-process-runner.d.ts +2 -0
- package/dist/src/services/codegraph/codegraph-process-runner.js +93 -0
- package/dist/src/services/codegraph/codegraph-service.d.ts +43 -0
- package/dist/src/services/codegraph/codegraph-service.js +160 -0
- package/dist/src/services/complexity/complexity-estimator.d.ts +34 -0
- package/dist/src/services/complexity/complexity-estimator.js +64 -0
- package/dist/src/services/config/config-migration.d.ts +45 -0
- package/dist/src/services/config/config-migration.js +154 -0
- package/dist/src/services/config/config-restore.d.ts +10 -0
- package/dist/src/services/config/config-restore.js +47 -0
- package/dist/src/services/config/config-rollback.d.ts +13 -0
- package/dist/src/services/config/config-rollback.js +26 -0
- package/dist/src/services/config/config-safety.d.ts +40 -0
- package/dist/src/services/config/config-safety.js +359 -0
- package/dist/src/services/config/config-service.d.ts +69 -0
- package/dist/src/services/config/config-service.js +814 -0
- package/dist/src/services/config/config-types.d.ts +119 -0
- package/dist/src/services/config/config-types.js +18 -0
- package/dist/src/services/config/model-routing.d.ts +4 -0
- package/dist/src/services/config/model-routing.js +17 -0
- package/dist/src/services/config/provider-service.d.ts +48 -0
- package/dist/src/services/config/provider-service.js +143 -0
- package/dist/src/services/config/proxy-service.d.ts +21 -0
- package/dist/src/services/config/proxy-service.js +44 -0
- package/dist/src/services/config/sidecar-store.d.ts +25 -0
- package/dist/src/services/config/sidecar-store.js +61 -0
- package/dist/src/services/config/workspace-state-service.d.ts +30 -0
- package/dist/src/services/config/workspace-state-service.js +142 -0
- package/dist/src/services/context/artifact-meta.d.ts +72 -0
- package/dist/src/services/context/artifact-meta.js +105 -0
- package/dist/src/services/context/auto-compact-dispatcher.d.ts +37 -0
- package/dist/src/services/context/auto-compact-dispatcher.js +190 -0
- package/dist/src/services/context/auto-compact-reader.d.ts +51 -0
- package/dist/src/services/context/auto-compact-reader.js +164 -0
- package/dist/src/services/context/auto-compact-types.d.ts +143 -0
- package/dist/src/services/context/auto-compact-types.js +36 -0
- package/dist/src/services/context/collector.d.ts +24 -0
- package/dist/src/services/context/collector.js +133 -0
- package/dist/src/services/context/context-builder.d.ts +30 -0
- package/dist/src/services/context/context-builder.js +78 -0
- package/dist/src/services/context/context-guard.d.ts +49 -0
- package/dist/src/services/context/context-guard.js +91 -0
- package/dist/src/services/context/context-schema.d.ts +415 -0
- package/dist/src/services/context/context-schema.js +73 -0
- package/dist/src/services/context/dispatch-context-guard.d.ts +27 -0
- package/dist/src/services/context/dispatch-context-guard.js +192 -0
- package/dist/src/services/context/doc-retriever.d.ts +26 -0
- package/dist/src/services/context/doc-retriever.js +51 -0
- package/dist/src/services/context/headroom-client.d.ts +34 -0
- package/dist/src/services/context/headroom-client.js +117 -0
- package/dist/src/services/context/headroom-fetcher.d.ts +6 -0
- package/dist/src/services/context/headroom-fetcher.js +28 -0
- package/dist/src/services/context/headroom-prefs.d.ts +46 -0
- package/dist/src/services/context/headroom-prefs.js +34 -0
- package/dist/src/services/context/index.d.ts +7 -0
- package/dist/src/services/context/index.js +6 -0
- package/dist/src/services/context/main-session-monitor.d.ts +77 -0
- package/dist/src/services/context/main-session-monitor.js +130 -0
- package/dist/src/services/context/renderer.d.ts +20 -0
- package/dist/src/services/context/renderer.js +30 -0
- package/dist/src/services/context/shared-channel.d.ts +93 -0
- package/dist/src/services/context/shared-channel.js +308 -0
- package/dist/src/services/context/threshold.d.ts +35 -0
- package/dist/src/services/context/threshold.js +76 -0
- package/dist/src/services/context/tokenizer.d.ts +12 -0
- package/dist/src/services/context/tokenizer.js +43 -0
- package/dist/src/services/context/types.d.ts +93 -0
- package/dist/src/services/context/types.js +9 -0
- package/dist/src/services/dashboard/project-dashboard-service.d.ts +91 -0
- package/dist/src/services/dashboard/project-dashboard-service.js +147 -0
- package/dist/src/services/dispatch/batch-counter.d.ts +27 -0
- package/dist/src/services/dispatch/batch-counter.js +102 -0
- package/dist/src/services/dispatch/contract-store.d.ts +63 -0
- package/dist/src/services/dispatch/contract-store.js +157 -0
- package/dist/src/services/dispatch/dispatch-record-writer.d.ts +138 -0
- package/dist/src/services/dispatch/dispatch-record-writer.js +460 -0
- package/dist/src/services/dispatch/heartbeat-truncator.d.ts +26 -0
- package/dist/src/services/dispatch/heartbeat-truncator.js +13 -0
- package/dist/src/services/dispatch/leak-detector.d.ts +11 -0
- package/dist/src/services/dispatch/leak-detector.js +72 -0
- package/dist/src/services/dispatch/slice-dag.d.ts +81 -0
- package/dist/src/services/dispatch/slice-dag.js +238 -0
- package/dist/src/services/dispatch/sub-agent-dispatcher.d.ts +239 -0
- package/dist/src/services/dispatch/sub-agent-dispatcher.js +382 -0
- package/dist/src/services/dispatch/test-tool-detection.d.ts +36 -0
- package/dist/src/services/dispatch/test-tool-detection.js +46 -0
- package/dist/src/services/doc/doc-generator.d.ts +38 -0
- package/dist/src/services/doc/doc-generator.js +122 -0
- package/dist/src/services/doctor/doctor-service.d.ts +149 -0
- package/dist/src/services/doctor/doctor-service.js +929 -0
- package/dist/src/services/feedback/feedback-promotion-service.d.ts +123 -0
- package/dist/src/services/feedback/feedback-promotion-service.js +300 -0
- package/dist/src/services/filesystem/file-lock.d.ts +11 -0
- package/dist/src/services/filesystem/file-lock.js +129 -0
- package/dist/src/services/final-review/final-review-service.d.ts +12 -0
- package/dist/src/services/final-review/final-review-service.js +52 -0
- package/dist/src/services/final-review/final-review-types.d.ts +42 -0
- package/dist/src/services/final-review/final-review-types.js +18 -0
- package/dist/src/services/fixture/fixture-capture-service.d.ts +87 -0
- package/dist/src/services/fixture/fixture-capture-service.js +317 -0
- package/dist/src/services/fixture/fixture-sanitize-service.d.ts +117 -0
- package/dist/src/services/fixture/fixture-sanitize-service.js +161 -0
- package/dist/src/services/fixture/index.d.ts +8 -0
- package/dist/src/services/fixture/index.js +8 -0
- package/dist/src/services/fork/fork-sync-state.d.ts +85 -0
- package/dist/src/services/fork/fork-sync-state.js +130 -0
- package/dist/src/services/fuzzy-matching/fuzzy-match-service.d.ts +15 -0
- package/dist/src/services/fuzzy-matching/fuzzy-match-service.js +56 -0
- package/dist/src/services/fuzzy-matching/fzf-pick-service.d.ts +68 -0
- package/dist/src/services/fuzzy-matching/fzf-pick-service.js +158 -0
- package/dist/src/services/fuzzy-matching/types.d.ts +20 -0
- package/dist/src/services/fuzzy-matching/types.js +1 -0
- package/dist/src/services/handoff/handoff-parser.d.ts +28 -0
- package/dist/src/services/handoff/handoff-parser.js +69 -0
- package/dist/src/services/handoff/handoff-types.d.ts +39 -0
- package/dist/src/services/handoff/handoff-types.js +19 -0
- package/dist/src/services/handoff/handoff-writer.d.ts +23 -0
- package/dist/src/services/handoff/handoff-writer.js +30 -0
- package/dist/src/services/hooks/output.d.ts +92 -0
- package/dist/src/services/hooks/output.js +111 -0
- package/dist/src/services/hooks/presence-marker-detector.d.ts +16 -0
- package/dist/src/services/hooks/presence-marker-detector.js +105 -0
- package/dist/src/services/ide/adapters/claude-code-adapter.d.ts +18 -0
- package/dist/src/services/ide/adapters/claude-code-adapter.js +91 -0
- package/dist/src/services/ide/adapters/codex-adapter.d.ts +46 -0
- package/dist/src/services/ide/adapters/codex-adapter.js +97 -0
- package/dist/src/services/ide/adapters/cursor-adapter.d.ts +36 -0
- package/dist/src/services/ide/adapters/cursor-adapter.js +84 -0
- package/dist/src/services/ide/adapters/hermes-adapter.d.ts +21 -0
- package/dist/src/services/ide/adapters/hermes-adapter.js +51 -0
- package/dist/src/services/ide/adapters/openclaw-adapter.d.ts +14 -0
- package/dist/src/services/ide/adapters/openclaw-adapter.js +42 -0
- package/dist/src/services/ide/adapters/trae-adapter.d.ts +42 -0
- package/dist/src/services/ide/adapters/trae-adapter.js +83 -0
- package/dist/src/services/ide/hook-protocol.d.ts +47 -0
- package/dist/src/services/ide/hook-protocol.js +74 -0
- package/dist/src/services/ide/hook-translator.d.ts +72 -0
- package/dist/src/services/ide/hook-translator.js +128 -0
- package/dist/src/services/ide/ide-detector.d.ts +10 -0
- package/dist/src/services/ide/ide-detector.js +19 -0
- package/dist/src/services/ide/ide-registry.d.ts +14 -0
- package/dist/src/services/ide/ide-registry.js +60 -0
- package/dist/src/services/ide/ide-types.d.ts +230 -0
- package/dist/src/services/ide/ide-types.js +2 -0
- package/dist/src/services/ide/resource-profile.d.ts +52 -0
- package/dist/src/services/ide/resource-profile.js +33 -0
- package/dist/src/services/ide/shared/atomic-json.d.ts +15 -0
- package/dist/src/services/ide/shared/atomic-json.js +58 -0
- package/dist/src/services/ide/shared/safe-path.d.ts +11 -0
- package/dist/src/services/ide/shared/safe-path.js +29 -0
- package/dist/src/services/impact/impact-scan-service.d.ts +66 -0
- package/dist/src/services/impact/impact-scan-service.js +197 -0
- package/dist/src/services/legacy/legacy-detector.d.ts +34 -0
- package/dist/src/services/legacy/legacy-detector.js +111 -0
- package/dist/src/services/log/log-commands-service.d.ts +54 -0
- package/dist/src/services/log/log-commands-service.js +83 -0
- package/dist/src/services/log/logger.d.ts +103 -0
- package/dist/src/services/log/logger.js +224 -0
- package/dist/src/services/log/redact.d.ts +32 -0
- package/dist/src/services/log/redact.js +89 -0
- package/dist/src/services/log/retention.d.ts +34 -0
- package/dist/src/services/log/retention.js +78 -0
- package/dist/src/services/loop/evaluator-dispatcher.d.ts +50 -0
- package/dist/src/services/loop/evaluator-dispatcher.js +551 -0
- package/dist/src/services/loop/monotonic-guard.d.ts +80 -0
- package/dist/src/services/loop/monotonic-guard.js +215 -0
- package/dist/src/services/loop/monotonic-runner.d.ts +55 -0
- package/dist/src/services/loop/monotonic-runner.js +197 -0
- package/dist/src/services/loop/run-driver.d.ts +70 -0
- package/dist/src/services/loop/run-driver.js +379 -0
- package/dist/src/services/loop/spec-service.d.ts +90 -0
- package/dist/src/services/loop/spec-service.js +497 -0
- package/dist/src/services/memory/llm-reranker.d.ts +174 -0
- package/dist/src/services/memory/llm-reranker.js +284 -0
- package/dist/src/services/memory/memory-search-service.d.ts +93 -0
- package/dist/src/services/memory/memory-search-service.js +117 -0
- package/dist/src/services/memory/project-context-service.d.ts +11 -0
- package/dist/src/services/memory/project-context-service.js +148 -0
- package/dist/src/services/memory/project-memory-service.d.ts +167 -0
- package/dist/src/services/memory/project-memory-service.js +817 -0
- package/dist/src/services/migration/v2-10-to-v2-11-service.d.ts +44 -0
- package/dist/src/services/migration/v2-10-to-v2-11-service.js +190 -0
- package/dist/src/services/migration/v2-10-to-v2-11-types.d.ts +41 -0
- package/dist/src/services/migration/v2-10-to-v2-11-types.js +23 -0
- package/dist/src/services/mode/bypass-tracker.d.ts +4 -0
- package/dist/src/services/mode/bypass-tracker.js +31 -0
- package/dist/src/services/mode/mode-enforcement.d.ts +14 -0
- package/dist/src/services/mode/mode-enforcement.js +84 -0
- package/dist/src/services/mut/assert-scanner.d.ts +6 -0
- package/dist/src/services/mut/assert-scanner.js +116 -0
- package/dist/src/services/mut/index.d.ts +8 -0
- package/dist/src/services/mut/index.js +7 -0
- package/dist/src/services/mut/mut-runner.d.ts +39 -0
- package/dist/src/services/mut/mut-runner.js +29 -0
- package/dist/src/services/mut/production-stryker.d.ts +7 -0
- package/dist/src/services/mut/production-stryker.js +66 -0
- package/dist/src/services/mut/report-builder.d.ts +11 -0
- package/dist/src/services/mut/report-builder.js +110 -0
- package/dist/src/services/mut/report-loader.d.ts +31 -0
- package/dist/src/services/mut/report-loader.js +78 -0
- package/dist/src/services/mut/thresholds.d.ts +21 -0
- package/dist/src/services/mut/thresholds.js +22 -0
- package/dist/src/services/mut/types.d.ts +336 -0
- package/dist/src/services/mut/types.js +59 -0
- package/dist/src/services/observability/aggregation.d.ts +64 -0
- package/dist/src/services/observability/aggregation.js +217 -0
- package/dist/src/services/observability/jsonl-store.d.ts +59 -0
- package/dist/src/services/observability/jsonl-store.js +120 -0
- package/dist/src/services/observability/observability-service.d.ts +95 -0
- package/dist/src/services/observability/observability-service.js +119 -0
- package/dist/src/services/observability/report-formatter.d.ts +42 -0
- package/dist/src/services/observability/report-formatter.js +156 -0
- package/dist/src/services/openspec/openspec-archive-service.d.ts +12 -0
- package/dist/src/services/openspec/openspec-archive-service.js +28 -0
- package/dist/src/services/openspec/openspec-bridge-service.d.ts +16 -0
- package/dist/src/services/openspec/openspec-bridge-service.js +76 -0
- package/dist/src/services/openspec/openspec-init-service.d.ts +23 -0
- package/dist/src/services/openspec/openspec-init-service.js +122 -0
- package/dist/src/services/openspec/openspec-propose-from-doctor-service.d.ts +31 -0
- package/dist/src/services/openspec/openspec-propose-from-doctor-service.js +95 -0
- package/dist/src/services/openspec/openspec-render-service.d.ts +38 -0
- package/dist/src/services/openspec/openspec-render-service.js +130 -0
- package/dist/src/services/openspec/openspec-scan-service.d.ts +6 -0
- package/dist/src/services/openspec/openspec-scan-service.js +123 -0
- package/dist/src/services/openspec/openspec-types.d.ts +39 -0
- package/dist/src/services/openspec/openspec-types.js +1 -0
- package/dist/src/services/openspec/openspec-validate-service.d.ts +27 -0
- package/dist/src/services/openspec/openspec-validate-service.js +77 -0
- package/dist/src/services/perf/perf-baseline-service.d.ts +70 -0
- package/dist/src/services/perf/perf-baseline-service.js +214 -0
- package/dist/src/services/prd/handoff-auto-regen.d.ts +22 -0
- package/dist/src/services/prd/handoff-auto-regen.js +73 -0
- package/dist/src/services/prd/handoff-service.d.ts +54 -0
- package/dist/src/services/prd/handoff-service.js +142 -0
- package/dist/src/services/prd/handoff-types.d.ts +64 -0
- package/dist/src/services/prd/handoff-types.js +22 -0
- package/dist/src/services/prd/prd-blocks-checker.d.ts +51 -0
- package/dist/src/services/prd/prd-blocks-checker.js +130 -0
- package/dist/src/services/prd/project-scan-reader.d.ts +24 -0
- package/dist/src/services/prd/project-scan-reader.js +150 -0
- package/dist/src/services/prd/project-scan-sediment.d.ts +97 -0
- package/dist/src/services/prd/project-scan-sediment.js +445 -0
- package/dist/src/services/prd/project-scan-types.d.ts +66 -0
- package/dist/src/services/prd/project-scan-types.js +20 -0
- package/dist/src/services/preferences/preferences-service.d.ts +38 -0
- package/dist/src/services/preferences/preferences-service.js +198 -0
- package/dist/src/services/preferences/preferences-types.d.ts +148 -0
- package/dist/src/services/preferences/preferences-types.js +53 -0
- package/dist/src/services/profiles/profile-service.d.ts +6 -0
- package/dist/src/services/profiles/profile-service.js +19 -0
- package/dist/src/services/progress/progress-service.d.ts +125 -0
- package/dist/src/services/progress/progress-service.js +192 -0
- package/dist/src/services/providers/minimax-provider-service.d.ts +24 -0
- package/dist/src/services/providers/minimax-provider-service.js +143 -0
- package/dist/src/services/providers/minimax-worker-service.d.ts +21 -0
- package/dist/src/services/providers/minimax-worker-service.js +83 -0
- package/dist/src/services/proxy/proxy-service.d.ts +7 -0
- package/dist/src/services/proxy/proxy-service.js +31 -0
- package/dist/src/services/qa/browser-event-logger.d.ts +40 -0
- package/dist/src/services/qa/browser-event-logger.js +54 -0
- package/dist/src/services/qa/browser-restart-detector.d.ts +74 -0
- package/dist/src/services/qa/browser-restart-detector.js +138 -0
- package/dist/src/services/qa/browser-reuse-hint.d.ts +18 -0
- package/dist/src/services/qa/browser-reuse-hint.js +18 -0
- package/dist/src/services/qa/browser-wrapper-service.d.ts +37 -0
- package/dist/src/services/qa/browser-wrapper-service.js +88 -0
- package/dist/src/services/qa/qa-business-review-state.d.ts +47 -0
- package/dist/src/services/qa/qa-business-review-state.js +96 -0
- package/dist/src/services/rd/ast-gate.d.ts +19 -0
- package/dist/src/services/rd/ast-gate.js +71 -0
- package/dist/src/services/rd/impl.d.ts +9 -0
- package/dist/src/services/rd/impl.js +57 -0
- package/dist/src/services/rd/rd-service.d.ts +129 -0
- package/dist/src/services/rd/rd-service.js +438 -0
- package/dist/src/services/rd/reviewer-dispatch-policy.d.ts +122 -0
- package/dist/src/services/rd/reviewer-dispatch-policy.js +148 -0
- package/dist/src/services/rd/standards-diagnostic.d.ts +76 -0
- package/dist/src/services/rd/standards-diagnostic.js +166 -0
- package/dist/src/services/rd/strategic-stage.d.ts +4 -0
- package/dist/src/services/rd/strategic-stage.js +15 -0
- package/dist/src/services/rd/strategy.d.ts +13 -0
- package/dist/src/services/rd/strategy.js +60 -0
- package/dist/src/services/rd/tactical-stage.d.ts +33 -0
- package/dist/src/services/rd/tactical-stage.js +62 -0
- package/dist/src/services/rd/types.d.ts +252 -0
- package/dist/src/services/rd/types.js +47 -0
- package/dist/src/services/recommendations/capability-availability.d.ts +5 -0
- package/dist/src/services/recommendations/capability-availability.js +40 -0
- package/dist/src/services/recommendations/capability-map-service.d.ts +7 -0
- package/dist/src/services/recommendations/capability-map-service.js +131 -0
- package/dist/src/services/recommendations/capability-seed-items.d.ts +2 -0
- package/dist/src/services/recommendations/capability-seed-items.js +140 -0
- package/dist/src/services/recommendations/capability-seed-mappings.d.ts +2 -0
- package/dist/src/services/recommendations/capability-seed-mappings.js +54 -0
- package/dist/src/services/recommendations/capability-seed-sources.d.ts +2 -0
- package/dist/src/services/recommendations/capability-seed-sources.js +35 -0
- package/dist/src/services/recommendations/recommendation-service.d.ts +8 -0
- package/dist/src/services/recommendations/recommendation-service.js +106 -0
- package/dist/src/services/recommendations/recommendation-types.d.ts +129 -0
- package/dist/src/services/recommendations/recommendation-types.js +1 -0
- package/dist/src/services/recommendations/seed-capability-catalog.d.ts +3 -0
- package/dist/src/services/recommendations/seed-capability-catalog.js +3 -0
- package/dist/src/services/refactor/refactor-service.d.ts +9 -0
- package/dist/src/services/refactor/refactor-service.js +36 -0
- package/dist/src/services/release/release-state.d.ts +70 -0
- package/dist/src/services/release/release-state.js +140 -0
- package/dist/src/services/retrospective/retrospective-index.d.ts +37 -0
- package/dist/src/services/retrospective/retrospective-index.js +110 -0
- package/dist/src/services/retrospective/retrospective-search-service.d.ts +55 -0
- package/dist/src/services/retrospective/retrospective-search-service.js +107 -0
- package/dist/src/services/retrospective/retrospective-show.d.ts +40 -0
- package/dist/src/services/retrospective/retrospective-show.js +109 -0
- package/dist/src/services/reviewer/model-family.d.ts +18 -0
- package/dist/src/services/reviewer/model-family.js +70 -0
- package/dist/src/services/reviewer/providers/anthropic.d.ts +2 -0
- package/dist/src/services/reviewer/providers/anthropic.js +61 -0
- package/dist/src/services/reviewer/providers/ollama.d.ts +26 -0
- package/dist/src/services/reviewer/providers/ollama.js +38 -0
- package/dist/src/services/reviewer/providers/openai.d.ts +2 -0
- package/dist/src/services/reviewer/providers/openai.js +63 -0
- package/dist/src/services/reviewer/reviewer-config.d.ts +34 -0
- package/dist/src/services/reviewer/reviewer-config.js +100 -0
- package/dist/src/services/reviewer/reviewer-service.d.ts +56 -0
- package/dist/src/services/reviewer/reviewer-service.js +263 -0
- package/dist/src/services/reviewer/selection-strategies.d.ts +27 -0
- package/dist/src/services/reviewer/selection-strategies.js +53 -0
- package/dist/src/services/role/role-registry.d.ts +38 -0
- package/dist/src/services/role/role-registry.js +83 -0
- package/dist/src/services/sc/index.d.ts +1 -0
- package/dist/src/services/sc/index.js +1 -0
- package/dist/src/services/sc/sc-service.d.ts +131 -0
- package/dist/src/services/sc/sc-service.js +552 -0
- package/dist/src/services/scan/acceptance-coverage-service.d.ts +42 -0
- package/dist/src/services/scan/acceptance-coverage-service.js +140 -0
- package/dist/src/services/scan/api-surface-service.d.ts +69 -0
- package/dist/src/services/scan/api-surface-service.js +239 -0
- package/dist/src/services/scan/archetype-service.d.ts +5 -0
- package/dist/src/services/scan/archetype-service.js +242 -0
- package/dist/src/services/scan/diff-scope-service.d.ts +40 -0
- package/dist/src/services/scan/diff-scope-service.js +198 -0
- package/dist/src/services/scan/existing-system-service.d.ts +7 -0
- package/dist/src/services/scan/existing-system-service.js +300 -0
- package/dist/src/services/scan/file-size-scan.d.ts +23 -0
- package/dist/src/services/scan/file-size-scan.js +68 -0
- package/dist/src/services/scan/karpathy-service.d.ts +60 -0
- package/dist/src/services/scan/karpathy-service.js +228 -0
- package/dist/src/services/scan/libraries-service.d.ts +24 -0
- package/dist/src/services/scan/libraries-service.js +419 -0
- package/dist/src/services/scan/libraries-types.d.ts +59 -0
- package/dist/src/services/scan/libraries-types.js +9 -0
- package/dist/src/services/scan/orphan-service.d.ts +76 -0
- package/dist/src/services/scan/orphan-service.js +538 -0
- package/dist/src/services/scan/scan-types.d.ts +59 -0
- package/dist/src/services/scan/scan-types.js +1 -0
- package/dist/src/services/scan/type-sanity-service.d.ts +23 -0
- package/dist/src/services/scan/type-sanity-service.js +116 -0
- package/dist/src/services/security/safe-settings-path.d.ts +12 -0
- package/dist/src/services/security/safe-settings-path.js +104 -0
- package/dist/src/services/session/binding-status-service.d.ts +56 -0
- package/dist/src/services/session/binding-status-service.js +106 -0
- package/dist/src/services/session/binding-store.d.ts +161 -0
- package/dist/src/services/session/binding-store.js +509 -0
- package/dist/src/services/session/caller-binding-service.d.ts +70 -0
- package/dist/src/services/session/caller-binding-service.js +148 -0
- package/dist/src/services/session/caller-id-types.d.ts +77 -0
- package/dist/src/services/session/caller-id-types.js +46 -0
- package/dist/src/services/session/getSessionDir.d.ts +1 -0
- package/dist/src/services/session/getSessionDir.js +27 -0
- package/dist/src/services/session/index.d.ts +6 -0
- package/dist/src/services/session/index.js +7 -0
- package/dist/src/services/session/platform-fallbacks.d.ts +31 -0
- package/dist/src/services/session/platform-fallbacks.js +35 -0
- package/dist/src/services/session/resolve-caller-id.d.ts +57 -0
- package/dist/src/services/session/resolve-caller-id.js +88 -0
- package/dist/src/services/session/session-binding-bridge.d.ts +76 -0
- package/dist/src/services/session/session-binding-bridge.js +247 -0
- package/dist/src/services/session/session-checkpoint-service.d.ts +57 -0
- package/dist/src/services/session/session-checkpoint-service.js +143 -0
- package/dist/src/services/session/session-manager.d.ts +168 -0
- package/dist/src/services/session/session-manager.js +502 -0
- package/dist/src/services/session/session-resume-service.d.ts +25 -0
- package/dist/src/services/session/session-resume-service.js +101 -0
- package/dist/src/services/signal/cancel-handler.d.ts +14 -0
- package/dist/src/services/signal/cancel-handler.js +76 -0
- package/dist/src/services/skill/resume-detector.d.ts +54 -0
- package/dist/src/services/skill/resume-detector.js +334 -0
- package/dist/src/services/skill/skill-scheduler.d.ts +40 -0
- package/dist/src/services/skill/skill-scheduler.js +53 -0
- package/dist/src/services/skills/hooks-settings-service.d.ts +137 -0
- package/dist/src/services/skills/hooks-settings-service.js +396 -0
- package/dist/src/services/skills/skill-conformance-service.d.ts +40 -0
- package/dist/src/services/skills/skill-conformance-service.js +136 -0
- package/dist/src/services/skills/skill-presence-service.d.ts +158 -0
- package/dist/src/services/skills/skill-presence-service.js +474 -0
- package/dist/src/services/skills/skill-registry.d.ts +17 -0
- package/dist/src/services/skills/skill-registry.js +40 -0
- package/dist/src/services/skills/skill-runbook-service.d.ts +11 -0
- package/dist/src/services/skills/skill-runbook-service.js +128 -0
- package/dist/src/services/skills/skill-statusline-renderer.d.ts +6 -0
- package/dist/src/services/skills/skill-statusline-renderer.js +55 -0
- package/dist/src/services/skills/skill-statusline-service.d.ts +24 -0
- package/dist/src/services/skills/skill-statusline-service.js +110 -0
- package/dist/src/services/skills/statusline-settings-service.d.ts +59 -0
- package/dist/src/services/skills/statusline-settings-service.js +141 -0
- package/dist/src/services/skills/sync-service.d.ts +86 -0
- package/dist/src/services/skills/sync-service.js +271 -0
- package/dist/src/services/slice/calibration-store.d.ts +39 -0
- package/dist/src/services/slice/calibration-store.js +68 -0
- package/dist/src/services/slice/cross-pass-edge-merger.d.ts +53 -0
- package/dist/src/services/slice/cross-pass-edge-merger.js +246 -0
- package/dist/src/services/slice/granularity-decider.d.ts +37 -0
- package/dist/src/services/slice/granularity-decider.js +40 -0
- package/dist/src/services/slice/llm-arbitrator.d.ts +35 -0
- package/dist/src/services/slice/llm-arbitrator.js +63 -0
- package/dist/src/services/slice/multi-pass-orchestrator.d.ts +67 -0
- package/dist/src/services/slice/multi-pass-orchestrator.js +225 -0
- package/dist/src/services/slice/schema-router.d.ts +44 -0
- package/dist/src/services/slice/schema-router.js +61 -0
- package/dist/src/services/slice/slice-archive-service.d.ts +20 -0
- package/dist/src/services/slice/slice-archive-service.js +111 -0
- package/dist/src/services/slice/slice-benchmark-service.d.ts +19 -0
- package/dist/src/services/slice/slice-benchmark-service.js +60 -0
- package/dist/src/services/slice/slice-check-service.d.ts +2 -0
- package/dist/src/services/slice/slice-check-service.js +459 -0
- package/dist/src/services/slice/slice-check-types.d.ts +104 -0
- package/dist/src/services/slice/slice-check-types.js +28 -0
- package/dist/src/services/slice/slice-decompose-runners.d.ts +23 -0
- package/dist/src/services/slice/slice-decompose-runners.js +174 -0
- package/dist/src/services/slice/slice-decompose-service.d.ts +24 -0
- package/dist/src/services/slice/slice-decompose-service.js +532 -0
- package/dist/src/services/slice/slice-decompose-types.d.ts +263 -0
- package/dist/src/services/slice/slice-decompose-types.js +30 -0
- package/dist/src/services/slice/slice-integration.d.ts +43 -0
- package/dist/src/services/slice/slice-integration.js +106 -0
- package/dist/src/services/slice/slice-pick-service.d.ts +32 -0
- package/dist/src/services/slice/slice-pick-service.js +75 -0
- package/dist/src/services/slice/slice-review-state.d.ts +70 -0
- package/dist/src/services/slice/slice-review-state.js +109 -0
- package/dist/src/services/slice/slice-topology-types.d.ts +115 -0
- package/dist/src/services/slice/slice-topology-types.js +20 -0
- package/dist/src/services/smoke/smoke-paths-state.d.ts +73 -0
- package/dist/src/services/smoke/smoke-paths-state.js +117 -0
- package/dist/src/services/solo/auto-compact-orchestrator.d.ts +98 -0
- package/dist/src/services/solo/auto-compact-orchestrator.js +343 -0
- package/dist/src/services/solo/batch-heartbeat-poller.d.ts +51 -0
- package/dist/src/services/solo/batch-heartbeat-poller.js +88 -0
- package/dist/src/services/solo/dag-orchestrator.d.ts +128 -0
- package/dist/src/services/solo/dag-orchestrator.js +304 -0
- package/dist/src/services/solo/mode-gate.d.ts +163 -0
- package/dist/src/services/solo/mode-gate.js +212 -0
- package/dist/src/services/solo/post-compact-detector.d.ts +61 -0
- package/dist/src/services/solo/post-compact-detector.js +240 -0
- package/dist/src/services/solo/status-line-renderer.d.ts +34 -0
- package/dist/src/services/solo/status-line-renderer.js +55 -0
- package/dist/src/services/solo/user-touchpoint-classifier.d.ts +44 -0
- package/dist/src/services/solo/user-touchpoint-classifier.js +145 -0
- package/dist/src/services/sop/gate-enforce-service.d.ts +33 -0
- package/dist/src/services/sop/gate-enforce-service.js +168 -0
- package/dist/src/services/sop/sop-advance-service.d.ts +74 -0
- package/dist/src/services/sop/sop-advance-service.js +115 -0
- package/dist/src/services/sop/sop-check-service.d.ts +45 -0
- package/dist/src/services/sop/sop-check-service.js +181 -0
- package/dist/src/services/sop/sop-paths.d.ts +62 -0
- package/dist/src/services/sop/sop-paths.js +92 -0
- package/dist/src/services/sop/sop-registry-service.d.ts +46 -0
- package/dist/src/services/sop/sop-registry-service.js +89 -0
- package/dist/src/services/sop/sop-service.d.ts +55 -0
- package/dist/src/services/sop/sop-service.js +222 -0
- package/dist/src/services/sop/sop-types.d.ts +95 -0
- package/dist/src/services/sop/sop-types.js +11 -0
- package/dist/src/services/standards/ide-aware-standards-service.d.ts +94 -0
- package/dist/src/services/standards/ide-aware-standards-service.js +89 -0
- package/dist/src/services/standards/migrate-claude-rules-service.d.ts +19 -0
- package/dist/src/services/standards/migrate-claude-rules-service.js +193 -0
- package/dist/src/services/standards/migrate-service.d.ts +63 -0
- package/dist/src/services/standards/migrate-service.js +193 -0
- package/dist/src/services/standards/missing-standards-detector.d.ts +79 -0
- package/dist/src/services/standards/missing-standards-detector.js +132 -0
- package/dist/src/services/standards/project-context.d.ts +24 -0
- package/dist/src/services/standards/project-context.js +314 -0
- package/dist/src/services/standards/project-standards-service.d.ts +114 -0
- package/dist/src/services/standards/project-standards-service.js +574 -0
- package/dist/src/services/tech/tech-service.d.ts +69 -0
- package/dist/src/services/tech/tech-service.js +299 -0
- package/dist/src/services/test-cache/test-cache-service.d.ts +70 -0
- package/dist/src/services/test-cache/test-cache-service.js +175 -0
- package/dist/src/services/understand/understand-scan-service.d.ts +28 -0
- package/dist/src/services/understand/understand-scan-service.js +170 -0
- package/dist/src/services/understand/understand-types.d.ts +50 -0
- package/dist/src/services/understand/understand-types.js +1 -0
- package/dist/src/services/upgrade/1x-detector-service.d.ts +7 -0
- package/dist/src/services/upgrade/1x-detector-service.js +94 -0
- package/dist/src/services/upgrade/gitignore-migrate-service.d.ts +56 -0
- package/dist/src/services/upgrade/gitignore-migrate-service.js +170 -0
- package/dist/src/services/upgrade/upgrade-service.d.ts +47 -0
- package/dist/src/services/upgrade/upgrade-service.js +381 -0
- package/dist/src/services/verdict/envelopes.d.ts +93 -0
- package/dist/src/services/verdict/envelopes.js +349 -0
- package/dist/src/services/verdict/verdict-aggregator.d.ts +94 -0
- package/dist/src/services/verdict/verdict-aggregator.js +112 -0
- package/dist/src/services/workflow/artifact-paths.d.ts +59 -0
- package/dist/src/services/workflow/artifact-paths.js +166 -0
- package/dist/src/services/workflow/autonomous-resume-writer.d.ts +16 -0
- package/dist/src/services/workflow/autonomous-resume-writer.js +170 -0
- package/dist/src/services/workflow/pipeline-verify-service.d.ts +90 -0
- package/dist/src/services/workflow/pipeline-verify-service.js +449 -0
- package/dist/src/services/workflow/plan-reader.d.ts +29 -0
- package/dist/src/services/workflow/plan-reader.js +174 -0
- package/dist/src/services/workflow/plan-refresher.d.ts +32 -0
- package/dist/src/services/workflow/plan-refresher.js +353 -0
- package/dist/src/services/workflow/plan-trigger-detector.d.ts +55 -0
- package/dist/src/services/workflow/plan-trigger-detector.js +142 -0
- package/dist/src/services/workflow/workflow-autonomous-resume-helpers.d.ts +19 -0
- package/dist/src/services/workflow/workflow-autonomous-resume-helpers.js +300 -0
- package/dist/src/services/workflow/workflow-autonomous-service.d.ts +100 -0
- package/dist/src/services/workflow/workflow-autonomous-service.js +306 -0
- package/dist/src/services/workflow/workflow-loader.d.ts +63 -0
- package/dist/src/services/workflow/workflow-loader.js +168 -0
- package/dist/src/services/workflow/workflow-router-service.d.ts +85 -0
- package/dist/src/services/workflow/workflow-router-service.js +227 -0
- package/dist/src/services/workflow/workflow-skip-service.d.ts +106 -0
- package/dist/src/services/workflow/workflow-skip-service.js +209 -0
- package/dist/src/services/workflow/workflow-spec.d.ts +116 -0
- package/dist/src/services/workflow/workflow-spec.js +431 -0
- package/dist/src/services/workflow/workflow-state-store.d.ts +27 -0
- package/dist/src/services/workflow/workflow-state-store.js +95 -0
- package/dist/src/services/workspace/claude-settings-template.d.ts +96 -0
- package/dist/src/services/workspace/claude-settings-template.js +215 -0
- package/dist/src/services/workspace/migrate-1-4-1-service.d.ts +44 -0
- package/dist/src/services/workspace/migrate-1-4-1-service.js +195 -0
- package/dist/src/services/workspace/migrate-service.d.ts +2 -0
- package/dist/src/services/workspace/migrate-service.js +613 -0
- package/dist/src/services/workspace/migrate-types.d.ts +127 -0
- package/dist/src/services/workspace/migrate-types.js +21 -0
- package/dist/src/services/workspace/reconcile-service.d.ts +188 -0
- package/dist/src/services/workspace/reconcile-service.js +683 -0
- package/dist/src/services/workspace/reconcile-types.d.ts +130 -0
- package/dist/src/services/workspace/reconcile-types.js +13 -0
- package/dist/src/services/workspace/sid-naming-guard.d.ts +17 -0
- package/dist/src/services/workspace/sid-naming-guard.js +34 -0
- package/dist/src/services/workspace/workspace-claude-settings-materializer.d.ts +45 -0
- package/dist/src/services/workspace/workspace-claude-settings-materializer.js +194 -0
- package/dist/src/services/workspace/workspace-clean-service.d.ts +28 -0
- package/dist/src/services/workspace/workspace-clean-service.js +46 -0
- package/dist/src/services/workspace/workspace-service.d.ts +177 -0
- package/dist/src/services/workspace/workspace-service.js +432 -0
- package/dist/src/services/workspace/workspace-state-service.d.ts +7 -0
- package/dist/src/services/workspace/workspace-state-service.js +43 -0
- package/dist/src/shared/format-md-compact.d.ts +32 -0
- package/dist/src/shared/format-md-compact.js +297 -0
- package/dist/src/shared/frontmatter.d.ts +6 -0
- package/dist/src/shared/frontmatter.js +165 -0
- package/dist/src/shared/fs-utils.d.ts +4 -0
- package/dist/src/shared/fs-utils.js +16 -0
- package/dist/src/shared/fs.d.ts +4 -0
- package/dist/src/shared/fs.js +26 -0
- package/dist/src/shared/incrementing-number.d.ts +23 -0
- package/dist/src/shared/incrementing-number.js +68 -0
- package/dist/src/shared/json-schema-mini.d.ts +10 -0
- package/dist/src/shared/json-schema-mini.js +113 -0
- package/dist/src/shared/path-safety.d.ts +21 -0
- package/dist/src/shared/path-safety.js +54 -0
- package/dist/src/shared/path-utils.d.ts +13 -0
- package/dist/src/shared/path-utils.js +56 -0
- package/dist/src/shared/paths.d.ts +6 -0
- package/dist/src/shared/paths.js +50 -0
- package/dist/src/shared/planner-response.d.ts +21 -0
- package/dist/src/shared/planner-response.js +26 -0
- package/dist/src/shared/platform.d.ts +6 -0
- package/dist/src/shared/platform.js +11 -0
- package/dist/src/shared/process.d.ts +5 -0
- package/dist/src/shared/process.js +12 -0
- package/dist/src/shared/result.d.ts +22 -0
- package/dist/src/shared/result.js +46 -0
- package/dist/src/shared/stale-policy.d.ts +67 -0
- package/dist/src/shared/stale-policy.js +85 -0
- package/dist/src/shared/version.d.ts +1 -0
- package/dist/src/shared/version.js +1 -0
- package/output-styles/peaks-skill-swarm.md +132 -0
- package/package.json +101 -0
- package/schemas/approval-record.schema.json +14 -0
- package/schemas/artifact-manifest.schema.json +16 -0
- package/schemas/artifact-retention-report.schema.json +38 -0
- package/schemas/artifact-workspace.schema.json +22 -0
- package/schemas/capability-availability.schema.json +36 -0
- package/schemas/capability-item.schema.json +37 -0
- package/schemas/capability-source.schema.json +30 -0
- package/schemas/change-impact.schema.json +15 -0
- package/schemas/context-capsule.schema.json +16 -0
- package/schemas/context.schema.json +360 -0
- package/schemas/decomposition-v1.json +194 -0
- package/schemas/decomposition-v2.json +193 -0
- package/schemas/doctor-report.schema.json +34 -0
- package/schemas/library-breaking-changes.data.json +141 -0
- package/schemas/library-breaking-changes.meta.json +6 -0
- package/schemas/library-breaking-changes.schema.json +50 -0
- package/schemas/mcp-apply-result.schema.json +46 -0
- package/schemas/mcp-install-plan.schema.json +71 -0
- package/schemas/mcp-install-spec.schema.json +29 -0
- package/schemas/mcp-server.schema.json +29 -0
- package/schemas/openspec-change-summary.schema.json +68 -0
- package/schemas/openspec-render-request.schema.json +61 -0
- package/schemas/openspec-validation-result.schema.json +36 -0
- package/schemas/recommendation-plan.schema.json +37 -0
- package/schemas/refactor-slice-spec.schema.json +19 -0
- package/schemas/replay-fixture.schema.json +158 -0
- package/schemas/reviewer-envelope.schema.json +79 -0
- package/schemas/sop-manifest.schema.json +52 -0
- package/scripts/clean-dist.mjs +8 -0
- package/scripts/install-skills.mjs +1202 -0
- package/scripts/sync-version.mjs +12 -0
- package/scripts/watch.mjs +389 -0
- package/skills/peaks-audit/SKILL.md +151 -0
- package/skills/peaks-audit/references/6-dimensions.md +141 -0
- package/skills/peaks-doctor/SKILL.md +59 -0
- package/skills/peaks-doctor/references/doctor-check-catalog.md +31 -0
- package/skills/peaks-doctor/references/from-doctor-flow.md +64 -0
- package/skills/peaks-doctor/test_prompts.json +17 -0
- package/skills/peaks-final-review/SKILL.md +157 -0
- package/skills/peaks-final-review/references/4-dimensions.md +117 -0
- package/skills/peaks-ide/SKILL.md +161 -0
- package/skills/peaks-ide/references/audit-log-helper.md +52 -0
- package/skills/peaks-perf-audit/SKILL.md +166 -0
- package/skills/peaks-perf-audit/references/audit-protocol.md +173 -0
- package/skills/peaks-prd/SKILL.md +319 -0
- package/skills/peaks-prd/references/artifact-contracts.md +7 -0
- package/skills/peaks-prd/references/artifact-per-request.md +78 -0
- package/skills/peaks-prd/references/command-migration.md +3 -0
- package/skills/peaks-prd/references/prd-for-multi-pass.md +49 -0
- package/skills/peaks-prd/references/workflow.md +43 -0
- package/skills/peaks-qa/SKILL.md +240 -0
- package/skills/peaks-qa/references/artifact-contracts.md +7 -0
- package/skills/peaks-qa/references/artifact-per-request.md +25 -0
- package/skills/peaks-qa/references/browser-validation-contracts.md +51 -0
- package/skills/peaks-qa/references/codegraph-regression-focus.md +5 -0
- package/skills/peaks-qa/references/command-migration.md +3 -0
- package/skills/peaks-qa/references/external-capability-guidance.md +9 -0
- package/skills/peaks-qa/references/openspec-validation-gate.md +55 -0
- package/skills/peaks-qa/references/qa-compact-handoff.md +3 -0
- package/skills/peaks-qa/references/qa-context-governance.md +24 -0
- package/skills/peaks-qa/references/qa-fanout-contract.md +158 -0
- package/skills/peaks-qa/references/qa-gstack-integration.md +7 -0
- package/skills/peaks-qa/references/qa-local-artifacts.md +3 -0
- package/skills/peaks-qa/references/qa-matt-pocock-integration.md +9 -0
- package/skills/peaks-qa/references/qa-perf-test-plan.md +67 -0
- package/skills/peaks-qa/references/qa-refactor-role.md +3 -0
- package/skills/peaks-qa/references/qa-runbook.md +72 -0
- package/skills/peaks-qa/references/qa-security-test-plan.md +73 -0
- package/skills/peaks-qa/references/qa-skill-presence.md +22 -0
- package/skills/peaks-qa/references/qa-standards-preflight.md +8 -0
- package/skills/peaks-qa/references/qa-sub-agent-dispatch.md +46 -0
- package/skills/peaks-qa/references/qa-transition-gates.md +86 -0
- package/skills/peaks-qa/references/reading-handoff-frontmatter.md +30 -0
- package/skills/peaks-qa/references/regression-gates.md +24 -0
- package/skills/peaks-qa/references/requirement-boundary-recheck.md +9 -0
- package/skills/peaks-qa/references/test-case-generation.md +27 -0
- package/skills/peaks-qa/references/test-report-output.md +14 -0
- package/skills/peaks-rd/SKILL.md +279 -0
- package/skills/peaks-rd/references/artifact-and-standards-output.md +9 -0
- package/skills/peaks-rd/references/artifact-contracts.md +7 -0
- package/skills/peaks-rd/references/artifact-per-request.md +112 -0
- package/skills/peaks-rd/references/browser-action-wrapper.md +39 -0
- package/skills/peaks-rd/references/browser-self-test-contracts.md +29 -0
- package/skills/peaks-rd/references/code-reviewer-4dim-hint.md +72 -0
- package/skills/peaks-rd/references/codegraph-project-analysis.md +5 -0
- package/skills/peaks-rd/references/command-migration.md +3 -0
- package/skills/peaks-rd/references/compact-handoff.md +3 -0
- package/skills/peaks-rd/references/external-references.md +11 -0
- package/skills/peaks-rd/references/frontend-project-generation.md +11 -0
- package/skills/peaks-rd/references/karpathy-reviewer-prompt.md +2 -0
- package/skills/peaks-rd/references/library-version-awareness.md +30 -0
- package/skills/peaks-rd/references/mandatory-perf-baseline.md +42 -0
- package/skills/peaks-rd/references/matt-pocock-integration.md +11 -0
- package/skills/peaks-rd/references/mock-data-placement.md +40 -0
- package/skills/peaks-rd/references/ocr-integration.md +229 -0
- package/skills/peaks-rd/references/openspec-cli.md +62 -0
- package/skills/peaks-rd/references/parallel-review-fanout.md +90 -0
- package/skills/peaks-rd/references/rd-context-governance.md +36 -0
- package/skills/peaks-rd/references/rd-fanout-contracts.md +216 -0
- package/skills/peaks-rd/references/rd-gstack-integration.md +16 -0
- package/skills/peaks-rd/references/rd-runbook.md +190 -0
- package/skills/peaks-rd/references/rd-standards-preflight.md +8 -0
- package/skills/peaks-rd/references/rd-sub-agent-dispatch.md +111 -0
- package/skills/peaks-rd/references/rd-transition-gates.md +148 -0
- package/skills/peaks-rd/references/reading-v2-slice-results.md +54 -0
- package/skills/peaks-rd/references/refactor-workflow.md +39 -0
- package/skills/peaks-rd/references/skill-presence-and-title.md +22 -0
- package/skills/peaks-rd/references/v2-12-fanout-collapse.md +64 -0
- package/skills/peaks-rd/references/writing-handoff-frontmatter.md +68 -0
- package/skills/peaks-reviewer/SKILL.md +76 -0
- package/skills/peaks-reviewer/references/reviewer-prompt.md +50 -0
- package/skills/peaks-reviewer/references/reviewer-schema.md +49 -0
- package/skills/peaks-sc/SKILL.md +166 -0
- package/skills/peaks-sc/references/artifact-contracts.md +3 -0
- package/skills/peaks-sc/references/artifact-retention.md +14 -0
- package/skills/peaks-sc/references/command-migration.md +3 -0
- package/skills/peaks-sc/references/openspec-commit-boundaries.md +33 -0
- package/skills/peaks-security-audit/SKILL.md +167 -0
- package/skills/peaks-security-audit/references/audit-protocol.md +175 -0
- package/skills/peaks-slice-decompose/SKILL.md +111 -0
- package/skills/peaks-slice-decompose/references/cross-pass-edge-interpretation.md +158 -0
- package/skills/peaks-slice-decompose/references/granularity-decision.md +129 -0
- package/skills/peaks-slice-decompose/references/v2-schema.md +156 -0
- package/skills/peaks-solo/SKILL.md +316 -0
- package/skills/peaks-solo/references/a2a-artifact-mapping.md +115 -0
- package/skills/peaks-solo/references/anchoring-and-session-info.md +34 -0
- package/skills/peaks-solo/references/artifact-contracts.md +65 -0
- package/skills/peaks-solo/references/boundaries.md +21 -0
- package/skills/peaks-solo/references/browser-workflow.md +127 -0
- package/skills/peaks-solo/references/checkpoint-resume.md +70 -0
- package/skills/peaks-solo/references/codegraph-orchestration.md +5 -0
- package/skills/peaks-solo/references/command-migration.md +3 -0
- package/skills/peaks-solo/references/completion-handoff.md +18 -0
- package/skills/peaks-solo/references/context-governance.md +204 -0
- package/skills/peaks-solo/references/cross-date-session-check.md +67 -0
- package/skills/peaks-solo/references/dag-orchestrator.md +56 -0
- package/skills/peaks-solo/references/envelope-contract.md +130 -0
- package/skills/peaks-solo/references/existing-system-extraction.md +78 -0
- package/skills/peaks-solo/references/external-references.md +17 -0
- package/skills/peaks-solo/references/external-skill-invocation.md +72 -0
- package/skills/peaks-solo/references/fanout-mandatory.md +109 -0
- package/skills/peaks-solo/references/fast-mode.md +23 -0
- package/skills/peaks-solo/references/frontend-only-mode.md +87 -0
- package/skills/peaks-solo/references/gstack-integration.md +7 -0
- package/skills/peaks-solo/references/headroom-integration.md +107 -0
- package/skills/peaks-solo/references/local-artifact-workspace.md +79 -0
- package/skills/peaks-solo/references/micro-cycle.md +316 -0
- package/skills/peaks-solo/references/mode-selection-with-stale-presence.md +124 -0
- package/skills/peaks-solo/references/mode-selection.md +21 -0
- package/skills/peaks-solo/references/openspec-workflow.md +81 -0
- package/skills/peaks-solo/references/periodic-checkpoint.md +71 -0
- package/skills/peaks-solo/references/playwright-mcp-multi-terminal.md +114 -0
- package/skills/peaks-solo/references/project-memory-loading.md +17 -0
- package/skills/peaks-solo/references/project-scan-checklist.md +136 -0
- package/skills/peaks-solo/references/quality-gate-cheatsheet.md +13 -0
- package/skills/peaks-solo/references/refactor-mode.md +24 -0
- package/skills/peaks-solo/references/resume-detection.md +63 -0
- package/skills/peaks-solo/references/runbook.md +188 -0
- package/skills/peaks-solo/references/skill-presence-and-title.md +31 -0
- package/skills/peaks-solo/references/standards-preflight.md +23 -0
- package/skills/peaks-solo/references/step-0-55-1x-detection.md +82 -0
- package/skills/peaks-solo/references/sub-agent-dispatch.md +334 -0
- package/skills/peaks-solo/references/swarm-dispatch-contract.md +230 -0
- package/skills/peaks-solo/references/workflow-gates-and-types.md +186 -0
- package/skills/peaks-solo/references/workflow.md +38 -0
- package/skills/peaks-solo-resume/SKILL.md +81 -0
- package/skills/peaks-solo-status/SKILL.md +120 -0
- package/skills/peaks-solo-test/SKILL.md +84 -0
- package/skills/peaks-sop/SKILL.md +209 -0
- package/skills/peaks-sop/references/sop-authoring.md +161 -0
- package/skills/peaks-txt/SKILL.md +303 -0
- package/skills/peaks-txt/references/artifact-contracts.md +7 -0
- package/skills/peaks-txt/references/command-migration.md +3 -0
- package/skills/peaks-txt/references/context-capsule.md +21 -0
- package/skills/peaks-ui/SKILL.md +369 -0
- package/skills/peaks-ui/references/artifact-contracts.md +3 -0
- package/skills/peaks-ui/references/artifact-per-request.md +71 -0
- package/skills/peaks-ui/references/command-migration.md +3 -0
- package/skills/peaks-ui/references/workflow.md +27 -0
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Performance baseline scaffolding for the RD stage.
|
|
3
|
+
*
|
|
4
|
+
* peaks-solo's RD stage runs before the QA stage. The user-facing pain is
|
|
5
|
+
* that performance tests (lighthouse / k6 / project-local benches / etc.)
|
|
6
|
+
* have historically only been run at QA Gate A4 — too late in the loop,
|
|
7
|
+
* because a slow regression discovered at QA triggers a return-to-rd
|
|
8
|
+
* cycle, the RD ships another "fix", QA re-runs, and the same cycle
|
|
9
|
+
* repeats up to 3 times before the slice ships.
|
|
10
|
+
*
|
|
11
|
+
* `peaks perf baseline` is the user-visible artifact of a deliberate
|
|
12
|
+
* compromise: keep the heavy performance measurement as something the
|
|
13
|
+
* RD runs themselves (lighthouse is project-shape dependent and we
|
|
14
|
+
* don't want to bake a lighthouse dependency into the CLI), but capture
|
|
15
|
+
* the result in a stable, scaffolded file under
|
|
16
|
+
* `.peaks/_runtime/<sid>/rd/perf-baseline.md` so QA Gate A4 has a known-good
|
|
17
|
+
* reference to diff against. The CLI itself only writes the scaffold
|
|
18
|
+
* and records the path; the actual measurement is a project-local
|
|
19
|
+
* concern that lives in the README, not in peaks-cli.
|
|
20
|
+
*
|
|
21
|
+
* The four-grounds check (per the skill-primary-CLI-auxiliary dev
|
|
22
|
+
* preference):
|
|
23
|
+
* 1. hook/script/CI invokability — yes, a hook can call this CLI
|
|
24
|
+
* to scaffold the file on session
|
|
25
|
+
* init, similar to session bootstrap.
|
|
26
|
+
* 2. JSON envelope that gates a downstream decision — yes,
|
|
27
|
+
* peaks-rd reads the result and
|
|
28
|
+
* attaches it to the handoff.
|
|
29
|
+
* 3. Destructive --apply side effect — yes, default dry-run.
|
|
30
|
+
* 4. Machine-enforced gate that prose cannot enforce — no, the
|
|
31
|
+
* measurement still lives in
|
|
32
|
+
* the LLM / project tools. We do
|
|
33
|
+
* NOT add a lint gate here.
|
|
34
|
+
*
|
|
35
|
+
* Net: CLI is justified. The destructive --apply default is dry-run,
|
|
36
|
+
* matching the rest of peaks-cli's scaffolding pattern.
|
|
37
|
+
*/
|
|
38
|
+
import { mkdir, writeFile } from 'node:fs/promises';
|
|
39
|
+
import { existsSync } from 'node:fs';
|
|
40
|
+
import { join } from 'node:path';
|
|
41
|
+
import { getSessionId } from '../session/session-manager.js';
|
|
42
|
+
import { getSessionDir } from '../session/getSessionDir.js';
|
|
43
|
+
import { findProjectRoot } from '../config/config-safety.js';
|
|
44
|
+
const README_BODY = `# Performance baseline
|
|
45
|
+
|
|
46
|
+
> Scaffolding for the RD-side performance baseline. Created by
|
|
47
|
+
> \`peaks perf baseline\`. The actual measurement is the RD's
|
|
48
|
+
> responsibility — see the "How to fill this in" section below.
|
|
49
|
+
|
|
50
|
+
## Why this exists
|
|
51
|
+
|
|
52
|
+
The QA stage's Gate A4 (performance check) compares the slice's
|
|
53
|
+
performance against the most recent baseline. Without an RD-side
|
|
54
|
+
baseline, the first time Gate A4 runs it has nothing to compare
|
|
55
|
+
against and any regression it finds is a blind-side surprise.
|
|
56
|
+
Capturing the baseline at the RD stage — right after the
|
|
57
|
+
implementation lands and before QA picks it up — closes that
|
|
58
|
+
gap and prevents the "QA returns 3 times for the same perf
|
|
59
|
+
regression" loop.
|
|
60
|
+
|
|
61
|
+
## What to capture
|
|
62
|
+
|
|
63
|
+
For each performance-sensitive code path in the slice, record:
|
|
64
|
+
|
|
65
|
+
- **Path / route** — which entry point (page, hook, API) the
|
|
66
|
+
measurement targets.
|
|
67
|
+
- **Workload** — what you did with it (cold load, hot loop, the
|
|
68
|
+
exact N of records the slice introduces).
|
|
69
|
+
- **Tool** — lighthouse / k6 / autocannon / project-local bench
|
|
70
|
+
script. Match the tool to the workload; do not introduce a new
|
|
71
|
+
one if the project already has a benchmark script.
|
|
72
|
+
- **Metrics** — at minimum LCP / FCP / TBT / CLS for frontend,
|
|
73
|
+
p50/p95/p99 latency + rps for backend, rss / heap growth
|
|
74
|
+
for long-running services.
|
|
75
|
+
- **Baseline value** — the number you measured, with units.
|
|
76
|
+
- **Threshold** — what the slice's PRD / acceptance criteria
|
|
77
|
+
consider acceptable. If the PRD does not specify, leave this
|
|
78
|
+
field as \`TBD (ask PM)\` and surface it in the RD handoff.
|
|
79
|
+
|
|
80
|
+
## How to fill this in
|
|
81
|
+
|
|
82
|
+
1. Run the project's chosen performance tool against the
|
|
83
|
+
implementation you just landed. If the project does not have
|
|
84
|
+
a tool yet, the lightest first step is the chrome devtools
|
|
85
|
+
performance tab on the touched route.
|
|
86
|
+
2. For each metric, copy the row from "What to capture" into
|
|
87
|
+
the "Results" table below and fill in the number.
|
|
88
|
+
3. The threshold is the bar QA Gate A4 will compare against.
|
|
89
|
+
Be conservative — if the threshold is tighter than what the
|
|
90
|
+
tool reports, Gate A4 will fail.
|
|
91
|
+
|
|
92
|
+
## Results
|
|
93
|
+
|
|
94
|
+
| Path / route | Workload | Tool | Metric | Baseline | Threshold |
|
|
95
|
+
|---|---|---|---|---|---|
|
|
96
|
+
| | | | | | |
|
|
97
|
+
|
|
98
|
+
## Notes
|
|
99
|
+
|
|
100
|
+
- If the slice is documentation-only or has no user-visible
|
|
101
|
+
performance surface, write \`N/A — no perf surface\` here and
|
|
102
|
+
surface that fact in the RD handoff.
|
|
103
|
+
- If the measurement exceeded the threshold on the first run,
|
|
104
|
+
do NOT loosen the threshold to make it pass. The right move
|
|
105
|
+
is to optimise the implementation and re-measure, or to
|
|
106
|
+
surface the trade-off to the PRD owner for a threshold bump.
|
|
107
|
+
|
|
108
|
+
## Handoff
|
|
109
|
+
|
|
110
|
+
- to peaks-qa: the \`Results\` table is the input to Gate A4.
|
|
111
|
+
Without it QA cannot establish a comparison baseline.
|
|
112
|
+
- to peaks-sc: any threshold bumps captured here belong in the
|
|
113
|
+
release notes if the threshold moved.
|
|
114
|
+
`;
|
|
115
|
+
function renderBaselineTemplate() {
|
|
116
|
+
return README_BODY;
|
|
117
|
+
}
|
|
118
|
+
function buildPlan(projectRoot, apply) {
|
|
119
|
+
const sessionId = getSessionId(projectRoot);
|
|
120
|
+
const sessionRoot = sessionId !== null
|
|
121
|
+
? getSessionDir(projectRoot, sessionId)
|
|
122
|
+
: null;
|
|
123
|
+
const perfBaselinePath = sessionRoot !== null
|
|
124
|
+
? join(sessionRoot, 'rd', 'perf-baseline.md')
|
|
125
|
+
: null;
|
|
126
|
+
const plannedWrites = [];
|
|
127
|
+
if (sessionRoot !== null && perfBaselinePath !== null) {
|
|
128
|
+
plannedWrites.push({
|
|
129
|
+
path: join(sessionRoot, 'rd'),
|
|
130
|
+
kind: 'directory',
|
|
131
|
+
bytes: 0,
|
|
132
|
+
content: ''
|
|
133
|
+
});
|
|
134
|
+
plannedWrites.push({
|
|
135
|
+
path: perfBaselinePath,
|
|
136
|
+
kind: 'file',
|
|
137
|
+
bytes: 0,
|
|
138
|
+
content: renderBaselineTemplate()
|
|
139
|
+
});
|
|
140
|
+
for (const write of plannedWrites) {
|
|
141
|
+
if (write.kind === 'file') {
|
|
142
|
+
write.bytes = Buffer.byteLength(write.content, 'utf8');
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
return {
|
|
147
|
+
apply,
|
|
148
|
+
projectRoot,
|
|
149
|
+
sessionId,
|
|
150
|
+
perfBaselinePath,
|
|
151
|
+
plannedWrites,
|
|
152
|
+
alreadyInitialized: false,
|
|
153
|
+
existingFiles: []
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Idempotency: skip writes for the perf-baseline file when it
|
|
158
|
+
* already exists. Re-running `peaks perf baseline` on the same
|
|
159
|
+
* session is a normal RD retry pattern (re-measurement, threshold
|
|
160
|
+
* adjustment, etc.); we must not blow away hand-edited content.
|
|
161
|
+
*/
|
|
162
|
+
async function planPerfBaselineInit(options) {
|
|
163
|
+
const plan = buildPlan(options.projectRoot, options.apply ?? false);
|
|
164
|
+
if (plan.perfBaselinePath !== null && existsSync(plan.perfBaselinePath)) {
|
|
165
|
+
plan.alreadyInitialized = true;
|
|
166
|
+
plan.existingFiles = [plan.perfBaselinePath];
|
|
167
|
+
plan.plannedWrites = [];
|
|
168
|
+
}
|
|
169
|
+
return plan;
|
|
170
|
+
}
|
|
171
|
+
export async function executePerfBaselineInit(options) {
|
|
172
|
+
const plan = await planPerfBaselineInit(options);
|
|
173
|
+
const writtenFiles = [];
|
|
174
|
+
const createdDirectories = [];
|
|
175
|
+
if (plan.sessionId === null) {
|
|
176
|
+
return {
|
|
177
|
+
...plan,
|
|
178
|
+
...(options.reason !== undefined ? { reason: options.reason } : {}),
|
|
179
|
+
writtenFiles,
|
|
180
|
+
createdDirectories
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
if (plan.apply && !plan.alreadyInitialized) {
|
|
184
|
+
for (const write of plan.plannedWrites) {
|
|
185
|
+
if (write.kind === 'directory') {
|
|
186
|
+
if (!existsSync(write.path)) {
|
|
187
|
+
await mkdir(write.path, { recursive: true });
|
|
188
|
+
createdDirectories.push(write.path);
|
|
189
|
+
}
|
|
190
|
+
continue;
|
|
191
|
+
}
|
|
192
|
+
if (write.content.length === 0)
|
|
193
|
+
continue;
|
|
194
|
+
await writeFile(write.path, write.content, 'utf8');
|
|
195
|
+
writtenFiles.push(write.path);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
return {
|
|
199
|
+
...plan,
|
|
200
|
+
...(options.reason !== undefined ? { reason: options.reason } : {}),
|
|
201
|
+
writtenFiles,
|
|
202
|
+
createdDirectories
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Re-exported so the CLI command can fall back to a project-root
|
|
207
|
+
* resolution when the caller did not pass --project. The CLI does
|
|
208
|
+
* the same findProjectRoot walk that `workspace init` does; this
|
|
209
|
+
* helper exists for the command layer to import without reaching
|
|
210
|
+
* into config-safety directly.
|
|
211
|
+
*/
|
|
212
|
+
export function resolveProjectRootFromCwd(cwd) {
|
|
213
|
+
return findProjectRoot(cwd) ?? cwd;
|
|
214
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type RequestArtifactRole } from '../artifacts/request-artifact-service.js';
|
|
2
|
+
export type HandoffAutoRegenResult = {
|
|
3
|
+
status: 'created';
|
|
4
|
+
path: string;
|
|
5
|
+
sha256: string;
|
|
6
|
+
} | {
|
|
7
|
+
status: 'skipped-exists';
|
|
8
|
+
path: string;
|
|
9
|
+
} | {
|
|
10
|
+
status: 'failed';
|
|
11
|
+
reason: string;
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Auto-regen the prd/handoff.md under `.peaks/_runtime/<sid>/prd/`.
|
|
15
|
+
* Returns the outcome; never throws.
|
|
16
|
+
*/
|
|
17
|
+
export declare function autoRegenPrdHandoff(opts: {
|
|
18
|
+
readonly projectRoot: string;
|
|
19
|
+
readonly sessionId: string;
|
|
20
|
+
readonly requestId: string;
|
|
21
|
+
readonly role: RequestArtifactRole;
|
|
22
|
+
}): Promise<HandoffAutoRegenResult>;
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2.13.2 AC-4 — prd/handoff.md auto-regen on prd:handed-off.
|
|
3
|
+
*
|
|
4
|
+
* When `peaks request transition --role prd --state handed-off` succeeds
|
|
5
|
+
* and `prd/handoff.md` is missing, this helper writes a sha256-locked
|
|
6
|
+
* handoff (schemaVersion: 2) using the request artifact body as the
|
|
7
|
+
* handoff body. If the handoff already exists, it's NOT overwritten —
|
|
8
|
+
* the existing handoff is canonical (it may carry a richer body that
|
|
9
|
+
* peaks-prd produced in an earlier session).
|
|
10
|
+
*
|
|
11
|
+
* Karpathy §3 (Surgical Changes): this file only owns the auto-regen
|
|
12
|
+
* path. The other 11 transitions are untouched.
|
|
13
|
+
*/
|
|
14
|
+
import { existsSync, mkdirSync, writeFileSync } from 'node:fs';
|
|
15
|
+
import { dirname, join } from 'node:path';
|
|
16
|
+
import { createHash } from 'node:crypto';
|
|
17
|
+
import { showRequestArtifact } from '../artifacts/request-artifact-service.js';
|
|
18
|
+
import { sha256OfBody } from './handoff-service.js';
|
|
19
|
+
/**
|
|
20
|
+
* Auto-regen the prd/handoff.md under `.peaks/_runtime/<sid>/prd/`.
|
|
21
|
+
* Returns the outcome; never throws.
|
|
22
|
+
*/
|
|
23
|
+
export async function autoRegenPrdHandoff(opts) {
|
|
24
|
+
if (opts.role !== 'prd') {
|
|
25
|
+
return { status: 'failed', reason: 'role must be prd' };
|
|
26
|
+
}
|
|
27
|
+
const handoffPath = join(opts.projectRoot, '.peaks', '_runtime', opts.sessionId, 'prd', 'handoff.md');
|
|
28
|
+
if (existsSync(handoffPath)) {
|
|
29
|
+
return { status: 'skipped-exists', path: handoffPath };
|
|
30
|
+
}
|
|
31
|
+
const artifact = await showRequestArtifact({
|
|
32
|
+
projectRoot: opts.projectRoot,
|
|
33
|
+
role: 'prd',
|
|
34
|
+
requestId: opts.requestId,
|
|
35
|
+
sessionId: opts.sessionId
|
|
36
|
+
});
|
|
37
|
+
if (artifact === null || typeof artifact.content !== 'string') {
|
|
38
|
+
return { status: 'failed', reason: 'request artifact body not found' };
|
|
39
|
+
}
|
|
40
|
+
const body = artifact.content;
|
|
41
|
+
const sha256 = sha256OfBody(body);
|
|
42
|
+
// v2.13.3 AC-4 — align with `AUDIT_REQUIRES_HANDOFF` prereq which
|
|
43
|
+
// pins `mustContain: ['schemaVersion: 2', 'sha256:']`. The previous
|
|
44
|
+
// field name `handoffHash` made peaks-cli write a handoff that the
|
|
45
|
+
// own prereq resolver would reject with "missing section(s): sha256:".
|
|
46
|
+
// Primary field is now `sha256`; `handoffHash` is kept as a literal
|
|
47
|
+
// alias for back-compat with any consumer (UI / external scripts)
|
|
48
|
+
// that still reads the old key.
|
|
49
|
+
const frontmatter = [
|
|
50
|
+
'---',
|
|
51
|
+
`requestId: ${opts.requestId}`,
|
|
52
|
+
`sessionId: ${opts.sessionId}`,
|
|
53
|
+
`sessionId: ${opts.sessionId}`,
|
|
54
|
+
'schemaVersion: 2',
|
|
55
|
+
`sha256: ${sha256}`,
|
|
56
|
+
`handoffHash: ${sha256}`,
|
|
57
|
+
`writtenAt: ${new Date().toISOString()}`,
|
|
58
|
+
'goals: []',
|
|
59
|
+
'acceptanceCriteria: []',
|
|
60
|
+
'preservedBehavior: []',
|
|
61
|
+
`handoffPath: ${handoffPath.replace(opts.projectRoot, '').replace(/\\/g, '/').replace(/^\//, '')}`,
|
|
62
|
+
'---',
|
|
63
|
+
''
|
|
64
|
+
].join('\n');
|
|
65
|
+
const content = `${frontmatter}${body}`;
|
|
66
|
+
mkdirSync(dirname(handoffPath), { recursive: true });
|
|
67
|
+
writeFileSync(handoffPath, content, 'utf8');
|
|
68
|
+
const recomputed = createHash('sha256').update(body, 'utf8').digest('hex');
|
|
69
|
+
if (recomputed !== sha256) {
|
|
70
|
+
return { status: 'failed', reason: 'sha256 mismatch after write' };
|
|
71
|
+
}
|
|
72
|
+
return { status: 'created', path: handoffPath, sha256 };
|
|
73
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* peaks-prd handoff service — v2.11.0 (D1 in
|
|
3
|
+
* `v2-11-rm-rd-techdoc-immutable-handoff`).
|
|
4
|
+
*
|
|
5
|
+
* Owns the immutable handoff at
|
|
6
|
+
* `.peaks/_runtime/<sessionId>/prd/handoff.md`:
|
|
7
|
+
*
|
|
8
|
+
* - `initHandoff` — pure; computes sha256 of the body and returns
|
|
9
|
+
* a Handoff whose frontmatter `handoffHash` matches.
|
|
10
|
+
* - `writeHandoff` — writes the file under `.peaks/_runtime/<sid>/prd/`,
|
|
11
|
+
* creating the dir if missing.
|
|
12
|
+
* - `readHandoff` — reads + parses; throws on malformed input.
|
|
13
|
+
* - `verifyHandoff` — re-reads + recomputes hash; returns a
|
|
14
|
+
* `HandoffProbe` (never throws on hash mismatch — that's a
|
|
15
|
+
* verification outcome, not a fatal error).
|
|
16
|
+
* - `showHandoff` — returns the raw markdown content (frontmatter
|
|
17
|
+
* + body verbatim) for human display via `peaks prd handoff show`.
|
|
18
|
+
*
|
|
19
|
+
* Hash contract (D1): `handoffHash` is the lowercase hex sha256 of
|
|
20
|
+
* the body content as UTF-8 bytes. The body MUST be the literal
|
|
21
|
+
* markdown source — no normalization, no trailing-newline padding.
|
|
22
|
+
*/
|
|
23
|
+
import type { Handoff, HandoffProbe } from './handoff-types.js';
|
|
24
|
+
/** Compute the lowercase hex sha256 of a UTF-8 string. */
|
|
25
|
+
export declare function sha256OfBody(body: string): string;
|
|
26
|
+
/** Pure: produce a Handoff with the frontmatter populated. Hash is
|
|
27
|
+
* computed here; callers MUST NOT pre-populate `handoffHash`. */
|
|
28
|
+
export declare function initHandoff(opts: {
|
|
29
|
+
requestId: string;
|
|
30
|
+
sessionId: string;
|
|
31
|
+
body: string;
|
|
32
|
+
writtenAt: string;
|
|
33
|
+
goals: readonly string[];
|
|
34
|
+
acceptanceCriteria: readonly string[];
|
|
35
|
+
preservedBehavior: readonly string[];
|
|
36
|
+
/** Override path; defaults to `.peaks/_runtime/<sid>/prd/handoff.md`. */
|
|
37
|
+
handoffPath?: string;
|
|
38
|
+
}): Handoff;
|
|
39
|
+
/** Write a Handoff to disk. `projectRoot` is the absolute project
|
|
40
|
+
* root (so the `.peaks/_runtime/...` path is resolved absolutely).
|
|
41
|
+
* Creates intermediate dirs. */
|
|
42
|
+
export declare function writeHandoff(handoff: Handoff, projectRoot: string): Promise<{
|
|
43
|
+
path: string;
|
|
44
|
+
hash: string;
|
|
45
|
+
}>;
|
|
46
|
+
/** Read + parse a handoff from disk. Throws on missing file or
|
|
47
|
+
* malformed frontmatter. */
|
|
48
|
+
export declare function readHandoff(filePath: string): Promise<Handoff>;
|
|
49
|
+
/** Verify a handoff by re-reading and re-hashing. Returns a probe
|
|
50
|
+
* (never throws on hash mismatch — that's the outcome). */
|
|
51
|
+
export declare function verifyHandoff(filePath: string): Promise<HandoffProbe>;
|
|
52
|
+
/** Return the raw markdown content of a handoff file (frontmatter +
|
|
53
|
+
* body verbatim). For human display. */
|
|
54
|
+
export declare function showHandoff(filePath: string): Promise<string>;
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* peaks-prd handoff service — v2.11.0 (D1 in
|
|
3
|
+
* `v2-11-rm-rd-techdoc-immutable-handoff`).
|
|
4
|
+
*
|
|
5
|
+
* Owns the immutable handoff at
|
|
6
|
+
* `.peaks/_runtime/<sessionId>/prd/handoff.md`:
|
|
7
|
+
*
|
|
8
|
+
* - `initHandoff` — pure; computes sha256 of the body and returns
|
|
9
|
+
* a Handoff whose frontmatter `handoffHash` matches.
|
|
10
|
+
* - `writeHandoff` — writes the file under `.peaks/_runtime/<sid>/prd/`,
|
|
11
|
+
* creating the dir if missing.
|
|
12
|
+
* - `readHandoff` — reads + parses; throws on malformed input.
|
|
13
|
+
* - `verifyHandoff` — re-reads + recomputes hash; returns a
|
|
14
|
+
* `HandoffProbe` (never throws on hash mismatch — that's a
|
|
15
|
+
* verification outcome, not a fatal error).
|
|
16
|
+
* - `showHandoff` — returns the raw markdown content (frontmatter
|
|
17
|
+
* + body verbatim) for human display via `peaks prd handoff show`.
|
|
18
|
+
*
|
|
19
|
+
* Hash contract (D1): `handoffHash` is the lowercase hex sha256 of
|
|
20
|
+
* the body content as UTF-8 bytes. The body MUST be the literal
|
|
21
|
+
* markdown source — no normalization, no trailing-newline padding.
|
|
22
|
+
*/
|
|
23
|
+
import { createHash } from 'node:crypto';
|
|
24
|
+
import { mkdir, readFile, writeFile } from 'node:fs/promises';
|
|
25
|
+
import { dirname, join } from 'node:path';
|
|
26
|
+
import { parse as parseYaml, stringify as stringifyYaml } from 'yaml';
|
|
27
|
+
/** Required schema version for new handoffs. */
|
|
28
|
+
const HANDOFF_SCHEMA_VERSION = '2';
|
|
29
|
+
/** Compute the lowercase hex sha256 of a UTF-8 string. */
|
|
30
|
+
export function sha256OfBody(body) {
|
|
31
|
+
return createHash('sha256').update(body, 'utf8').digest('hex');
|
|
32
|
+
}
|
|
33
|
+
/** Pure: produce a Handoff with the frontmatter populated. Hash is
|
|
34
|
+
* computed here; callers MUST NOT pre-populate `handoffHash`. */
|
|
35
|
+
export function initHandoff(opts) {
|
|
36
|
+
const handoffPath = opts.handoffPath ??
|
|
37
|
+
join('.peaks', '_runtime', opts.sessionId, 'prd', 'handoff.md');
|
|
38
|
+
const handoffHash = sha256OfBody(opts.body);
|
|
39
|
+
const frontmatter = {
|
|
40
|
+
requestId: opts.requestId,
|
|
41
|
+
sessionId: opts.sessionId,
|
|
42
|
+
schemaVersion: HANDOFF_SCHEMA_VERSION,
|
|
43
|
+
handoffHash,
|
|
44
|
+
writtenAt: opts.writtenAt,
|
|
45
|
+
goals: [...opts.goals],
|
|
46
|
+
acceptanceCriteria: [...opts.acceptanceCriteria],
|
|
47
|
+
preservedBehavior: [...opts.preservedBehavior],
|
|
48
|
+
handoffPath,
|
|
49
|
+
};
|
|
50
|
+
return { frontmatter, body: opts.body };
|
|
51
|
+
}
|
|
52
|
+
/** Write a Handoff to disk. `projectRoot` is the absolute project
|
|
53
|
+
* root (so the `.peaks/_runtime/...` path is resolved absolutely).
|
|
54
|
+
* Creates intermediate dirs. */
|
|
55
|
+
export async function writeHandoff(handoff, projectRoot) {
|
|
56
|
+
const absolutePath = join(projectRoot, handoff.frontmatter.handoffPath);
|
|
57
|
+
await mkdir(dirname(absolutePath), { recursive: true });
|
|
58
|
+
const content = serializeHandoff(handoff);
|
|
59
|
+
await writeFile(absolutePath, content, 'utf8');
|
|
60
|
+
return { path: absolutePath, hash: handoff.frontmatter.handoffHash };
|
|
61
|
+
}
|
|
62
|
+
/** Read + parse a handoff from disk. Throws on missing file or
|
|
63
|
+
* malformed frontmatter. */
|
|
64
|
+
export async function readHandoff(filePath) {
|
|
65
|
+
const content = await readFile(filePath, 'utf8');
|
|
66
|
+
return parseHandoffContent(content);
|
|
67
|
+
}
|
|
68
|
+
/** Verify a handoff by re-reading and re-hashing. Returns a probe
|
|
69
|
+
* (never throws on hash mismatch — that's the outcome). */
|
|
70
|
+
export async function verifyHandoff(filePath) {
|
|
71
|
+
let handoff;
|
|
72
|
+
try {
|
|
73
|
+
handoff = await readHandoff(filePath);
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
return { ok: false, reason: 'file-missing' };
|
|
77
|
+
}
|
|
78
|
+
if (handoff.frontmatter.schemaVersion !== HANDOFF_SCHEMA_VERSION) {
|
|
79
|
+
return {
|
|
80
|
+
ok: false,
|
|
81
|
+
reason: 'schema-version-mismatch',
|
|
82
|
+
actualHash: handoff.frontmatter.handoffHash,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
const actualHash = sha256OfBody(handoff.body);
|
|
86
|
+
if (actualHash !== handoff.frontmatter.handoffHash) {
|
|
87
|
+
return {
|
|
88
|
+
ok: false,
|
|
89
|
+
reason: 'hash-mismatch',
|
|
90
|
+
actualHash,
|
|
91
|
+
expectedHash: handoff.frontmatter.handoffHash,
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
return { ok: true, actualHash, expectedHash: actualHash };
|
|
95
|
+
}
|
|
96
|
+
/** Return the raw markdown content of a handoff file (frontmatter +
|
|
97
|
+
* body verbatim). For human display. */
|
|
98
|
+
export async function showHandoff(filePath) {
|
|
99
|
+
return readFile(filePath, 'utf8');
|
|
100
|
+
}
|
|
101
|
+
// ── internal helpers ─────────────────────────────────────────────────
|
|
102
|
+
/** Split raw content into `{ frontmatter, body }`. Throws if the
|
|
103
|
+
* frontmatter block is missing or malformed. */
|
|
104
|
+
function parseHandoffContent(content) {
|
|
105
|
+
const match = /^---\n([\s\S]*?)\n---\n?([\s\S]*)$/.exec(content);
|
|
106
|
+
if (!match) {
|
|
107
|
+
throw new Error('handoff: frontmatter block missing or malformed');
|
|
108
|
+
}
|
|
109
|
+
const yamlBlock = match[1];
|
|
110
|
+
const body = match[2] ?? '';
|
|
111
|
+
let parsed;
|
|
112
|
+
try {
|
|
113
|
+
parsed = parseYaml(yamlBlock);
|
|
114
|
+
}
|
|
115
|
+
catch (error) {
|
|
116
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
117
|
+
throw new Error(`handoff: frontmatter YAML parse failed: ${message}`);
|
|
118
|
+
}
|
|
119
|
+
if (!isHandoffFrontmatter(parsed)) {
|
|
120
|
+
throw new Error('handoff: frontmatter shape validation failed');
|
|
121
|
+
}
|
|
122
|
+
return { frontmatter: parsed, body };
|
|
123
|
+
}
|
|
124
|
+
function serializeHandoff(handoff) {
|
|
125
|
+
const yamlStr = stringifyYaml(handoff.frontmatter).trimEnd();
|
|
126
|
+
return `---\n${yamlStr}\n---\n${handoff.body}`;
|
|
127
|
+
}
|
|
128
|
+
function isHandoffFrontmatter(value) {
|
|
129
|
+
if (!value || typeof value !== 'object')
|
|
130
|
+
return false;
|
|
131
|
+
const v = value;
|
|
132
|
+
return (typeof v.requestId === 'string' &&
|
|
133
|
+
typeof v.sessionId === 'string' &&
|
|
134
|
+
typeof v.sessionId === 'string' &&
|
|
135
|
+
typeof v.schemaVersion === 'string' &&
|
|
136
|
+
typeof v.handoffHash === 'string' &&
|
|
137
|
+
typeof v.writtenAt === 'string' &&
|
|
138
|
+
Array.isArray(v.goals) &&
|
|
139
|
+
Array.isArray(v.acceptanceCriteria) &&
|
|
140
|
+
Array.isArray(v.preservedBehavior) &&
|
|
141
|
+
typeof v.handoffPath === 'string');
|
|
142
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* peaks-prd handoff — frontmatter schema (v2.11.0, schemaVersion: 2).
|
|
3
|
+
*
|
|
4
|
+
* The handoff is the **immutable** single source of truth that all
|
|
5
|
+
* downstream consumers (peaks-rd main loop + 4 audit sub-agents +
|
|
6
|
+
* peaks-qa) read. It is written by peaks-prd AFTER user confirmation
|
|
7
|
+
* (per `skills/peaks-prd/SKILL.md` Step 5.5) and replaces the legacy
|
|
8
|
+
* peaks-rd tech-doc handoff (v2.10.0 and earlier).
|
|
9
|
+
*
|
|
10
|
+
* Frontmatter invariant: `handoffHash` MUST equal the lowercase hex
|
|
11
|
+
* sha256 of the body content (UTF-8, no BOM, no frontmatter prefix).
|
|
12
|
+
* The hash is computed by `services/prd/handoff-service.ts` at write
|
|
13
|
+
* time and re-verified by every consumer before reading the body
|
|
14
|
+
* (D1 in `v2-11-rm-rd-techdoc-immutable-handoff`).
|
|
15
|
+
*
|
|
16
|
+
* Path convention: the file lands at
|
|
17
|
+
* `.peaks/_runtime/<sessionId>/prd/handoff.md` (gitignored session
|
|
18
|
+
* artifact; the binding to `<sessionId>` lives in
|
|
19
|
+
* `.peaks/_runtime/current-change`). NEVER write under
|
|
20
|
+
* `.peaks/_runtime/<change-id>/...` directly (slice 2.8.3 hard ban).
|
|
21
|
+
*/
|
|
22
|
+
/** Schema version 2 — bumped from v1 (which had no sha256 + no AC/goal
|
|
23
|
+
* IDs in frontmatter). Every consumer MUST refuse a handoff whose
|
|
24
|
+
* frontmatter is missing or carries `schemaVersion !== '2'`. */
|
|
25
|
+
export type HandoffSchemaVersion = '2';
|
|
26
|
+
/**
|
|
27
|
+
* Handoff frontmatter — the structured header block between the
|
|
28
|
+
* leading and trailing `---` fences. `readonly` enforces D1's
|
|
29
|
+
* immutability: once written, peaks-rd / peaks-qa / sub-agents MUST
|
|
30
|
+
* NOT mutate the on-disk copy.
|
|
31
|
+
*/
|
|
32
|
+
export interface HandoffFrontmatter {
|
|
33
|
+
readonly requestId: string;
|
|
34
|
+
readonly sessionId: string;
|
|
35
|
+
readonly schemaVersion: HandoffSchemaVersion;
|
|
36
|
+
/** Lowercase hex sha256 of the body content. Recomputed by
|
|
37
|
+
* `verifyHandoff`; mismatch means tampering → refuse to read. */
|
|
38
|
+
readonly handoffHash: string;
|
|
39
|
+
/** ISO 8601 timestamp at write time. */
|
|
40
|
+
readonly writtenAt: string;
|
|
41
|
+
/** PRD goal IDs the handoff binds to (e.g. `['G1', 'G2']`). */
|
|
42
|
+
readonly goals: readonly string[];
|
|
43
|
+
/** PRD acceptance-criteria IDs (e.g. `['AC-1', 'AC-2']`). */
|
|
44
|
+
readonly acceptanceCriteria: readonly string[];
|
|
45
|
+
/** PRD preserved-behavior IDs (e.g. `['P1', 'P12']`). */
|
|
46
|
+
readonly preservedBehavior: readonly string[];
|
|
47
|
+
/** Absolute path to the handoff file on disk (for re-verify). */
|
|
48
|
+
readonly handoffPath: string;
|
|
49
|
+
}
|
|
50
|
+
/** Handoff — frontmatter + body. The body is the markdown source of
|
|
51
|
+
* truth that sub-agents and downstream consumers parse. */
|
|
52
|
+
export interface Handoff {
|
|
53
|
+
readonly frontmatter: HandoffFrontmatter;
|
|
54
|
+
readonly body: string;
|
|
55
|
+
}
|
|
56
|
+
/** Result of `verifyHandoff`. `ok: true` means the frontmatter's
|
|
57
|
+
* `handoffHash` matches the recomputed sha256 of the body. */
|
|
58
|
+
export interface HandoffProbe {
|
|
59
|
+
readonly ok: boolean;
|
|
60
|
+
readonly reason?: HandoffProbeReason;
|
|
61
|
+
readonly actualHash?: string;
|
|
62
|
+
readonly expectedHash?: string;
|
|
63
|
+
}
|
|
64
|
+
export type HandoffProbeReason = 'file-missing' | 'frontmatter-malformed' | 'hash-mismatch' | 'schema-version-mismatch';
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* peaks-prd handoff — frontmatter schema (v2.11.0, schemaVersion: 2).
|
|
3
|
+
*
|
|
4
|
+
* The handoff is the **immutable** single source of truth that all
|
|
5
|
+
* downstream consumers (peaks-rd main loop + 4 audit sub-agents +
|
|
6
|
+
* peaks-qa) read. It is written by peaks-prd AFTER user confirmation
|
|
7
|
+
* (per `skills/peaks-prd/SKILL.md` Step 5.5) and replaces the legacy
|
|
8
|
+
* peaks-rd tech-doc handoff (v2.10.0 and earlier).
|
|
9
|
+
*
|
|
10
|
+
* Frontmatter invariant: `handoffHash` MUST equal the lowercase hex
|
|
11
|
+
* sha256 of the body content (UTF-8, no BOM, no frontmatter prefix).
|
|
12
|
+
* The hash is computed by `services/prd/handoff-service.ts` at write
|
|
13
|
+
* time and re-verified by every consumer before reading the body
|
|
14
|
+
* (D1 in `v2-11-rm-rd-techdoc-immutable-handoff`).
|
|
15
|
+
*
|
|
16
|
+
* Path convention: the file lands at
|
|
17
|
+
* `.peaks/_runtime/<sessionId>/prd/handoff.md` (gitignored session
|
|
18
|
+
* artifact; the binding to `<sessionId>` lives in
|
|
19
|
+
* `.peaks/_runtime/current-change`). NEVER write under
|
|
20
|
+
* `.peaks/_runtime/<change-id>/...` directly (slice 2.8.3 hard ban).
|
|
21
|
+
*/
|
|
22
|
+
export {};
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2.15.0 follow-up — G3: prd 4 必填块 checker.
|
|
3
|
+
*
|
|
4
|
+
* Validates that a PRD artifact body contains the 4 mandatory sections
|
|
5
|
+
* required by the 12 Gaps positioning memory:
|
|
6
|
+
*
|
|
7
|
+
* 1. 业务场景(目标用户 / 业务流程 / 性能 / 现有系统 / 业务禁区)
|
|
8
|
+
* 2. 边界 case 清单
|
|
9
|
+
* 3. UI 装配意图(页面模式 / 关键交互 / 信息密度)
|
|
10
|
+
* 4. 上游基线(仅 fork 场景必填)
|
|
11
|
+
*
|
|
12
|
+
* Returns a structured report; the CLI surfaces it as a lint
|
|
13
|
+
* complement to `peaks request lint` (which checks placeholders).
|
|
14
|
+
* `peaks prd check-blocks` ensures the design quality is locked at
|
|
15
|
+
* the prd stage (the principle: 质量杠杆前置到 prd).
|
|
16
|
+
*/
|
|
17
|
+
export interface PrdBlockFinding {
|
|
18
|
+
/** Block identifier (1-4). */
|
|
19
|
+
readonly block: 1 | 2 | 3 | 4;
|
|
20
|
+
/** Block name (Chinese). */
|
|
21
|
+
readonly name: string;
|
|
22
|
+
/** Whether the block is required (block 4 only required for fork projects). */
|
|
23
|
+
readonly required: boolean;
|
|
24
|
+
/** Whether the block was found in the document. */
|
|
25
|
+
readonly present: boolean;
|
|
26
|
+
/** The content under the heading, or null when not found. */
|
|
27
|
+
readonly content: string | null;
|
|
28
|
+
/** Issues detected (empty array when the block is OK). */
|
|
29
|
+
readonly issues: readonly string[];
|
|
30
|
+
}
|
|
31
|
+
export interface PrdBlocksReport {
|
|
32
|
+
/** Project root. */
|
|
33
|
+
readonly projectRoot: string;
|
|
34
|
+
/** Path to the artifact. */
|
|
35
|
+
readonly artifactPath: string;
|
|
36
|
+
/** Whether this is a fork project (controls block 4 required flag). */
|
|
37
|
+
readonly isFork: boolean;
|
|
38
|
+
/** Findings for each of the 4 blocks. */
|
|
39
|
+
readonly findings: readonly PrdBlockFinding[];
|
|
40
|
+
/** Overall pass/fail: all required blocks present + no issues. */
|
|
41
|
+
readonly ok: boolean;
|
|
42
|
+
}
|
|
43
|
+
export declare function findPrdArtifact(projectRoot: string, requestId: string): string | null;
|
|
44
|
+
export declare function readPrdArtifact(artifactPath: string): string;
|
|
45
|
+
/**
|
|
46
|
+
* Detect whether the project is a fork by looking for `.peaks/fork-state.json`
|
|
47
|
+
* (the G11 CLI's state file) or `.peaks/release-state.json` history entries
|
|
48
|
+
* that reference an upstream. Lightweight heuristic.
|
|
49
|
+
*/
|
|
50
|
+
export declare function detectForkProject(projectRoot: string): boolean;
|
|
51
|
+
export declare function checkPrdBlocks(projectRoot: string, requestId: string): PrdBlocksReport;
|