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,158 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generic fzf binary picker (slice 2026-06-14-fzf-headroom-rollout).
|
|
3
|
+
*
|
|
4
|
+
* Promoted from `src/services/slice/slice-pick-service.ts` (which is
|
|
5
|
+
* the only prior caller). Encapsulates the canonical fzf integration
|
|
6
|
+
* pattern: format items as one-line text, spawn `fzf --multi`, parse
|
|
7
|
+
* the multi-selection, write a `<list-id>-picked.json` artifact.
|
|
8
|
+
*
|
|
9
|
+
* Two distinct things live in `src/services/fuzzy-matching/`:
|
|
10
|
+
* - `fuzzy-match-service.ts` — in-process fzf *npm package* (the
|
|
11
|
+
* Fzf class). Used by `memory search` / `retrospective search`.
|
|
12
|
+
* - `fzf-pick-service.ts` — spawns the fzf *binary* for
|
|
13
|
+
* interactive TTY multi-select. Used by `peaks slice pick`,
|
|
14
|
+
* `peaks memory list --pick`, `peaks retrospective index --pick`.
|
|
15
|
+
*
|
|
16
|
+
* The two are independent (one is a library, the other spawns a CLI);
|
|
17
|
+
* do not merge them. fzf-for-js returns positions; the binary returns
|
|
18
|
+
* raw lines. Different output shapes → different consumers.
|
|
19
|
+
*
|
|
20
|
+
* Source-of-truth: the binary is the *consumer* of the formatter
|
|
21
|
+
* output, not an input. Each caller injects its own `formatLine` and
|
|
22
|
+
* `parseLine` so a future swap to skim/peco is a one-line change per
|
|
23
|
+
* caller, not a refactor of this service.
|
|
24
|
+
*/
|
|
25
|
+
import { execFileSync } from 'node:child_process';
|
|
26
|
+
import { existsSync, writeFileSync, mkdirSync } from 'node:fs';
|
|
27
|
+
import { dirname } from 'node:path';
|
|
28
|
+
export const MIN_FZF_VERSION = '0.38';
|
|
29
|
+
const SPAWN_TIMEOUT_MS = 60_000;
|
|
30
|
+
const MAX_BUFFER_BYTES = 32 * 1024 * 1024;
|
|
31
|
+
/**
|
|
32
|
+
* Pick a subset of `items` interactively via fzf. The full flow:
|
|
33
|
+
* 1. Check fzf presence + version.
|
|
34
|
+
* 2. Format items as one-line text (caller's formatLine).
|
|
35
|
+
* 3. Spawn `fzf --multi` (or test override).
|
|
36
|
+
* 4. Parse the multi-selection back into T[] (caller's parseLine).
|
|
37
|
+
* 5. Write `<outputPath>` with the picked + meta + fzfVersion.
|
|
38
|
+
*
|
|
39
|
+
* Failure modes:
|
|
40
|
+
* - fzf missing → throws with `brew install fzf | apt-get install fzf` hint.
|
|
41
|
+
* - fzf version too old → throws.
|
|
42
|
+
* - fzf exits 130 (Esc) → returns `{ picked: [], outputPath, fzfVersion }` (NOT thrown).
|
|
43
|
+
* - parseLine returns null for a line → silently dropped (line ignored).
|
|
44
|
+
*/
|
|
45
|
+
export async function pickFromList(options) {
|
|
46
|
+
const fzfBin = options.fzfBin ?? 'fzf';
|
|
47
|
+
const fzfVersion = checkFzfVersion(fzfBin);
|
|
48
|
+
if (options.items.length === 0) {
|
|
49
|
+
// Nothing to pick from. Still write an empty picked artifact so
|
|
50
|
+
// downstream commands have a stable file contract.
|
|
51
|
+
const emptyPayload = { ...options.meta, pickedAt: new Date().toISOString(), fzfVersion, picked: [] };
|
|
52
|
+
writeArtifact(options.outputPath, emptyPayload);
|
|
53
|
+
return { picked: [], outputPath: options.outputPath, fzfVersion };
|
|
54
|
+
}
|
|
55
|
+
const fzfInput = options.items.map(options.formatLine).join('\n');
|
|
56
|
+
const args = [];
|
|
57
|
+
args.push(options.multi === false ? '--no-multi' : '--multi');
|
|
58
|
+
args.push(`--prompt=${options.prompt ?? 'pick> '}`);
|
|
59
|
+
if (options.preview === true) {
|
|
60
|
+
args.push('--preview', 'cat');
|
|
61
|
+
}
|
|
62
|
+
let stdout;
|
|
63
|
+
if (options.overrideStdin !== undefined) {
|
|
64
|
+
stdout = options.overrideStdin;
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
try {
|
|
68
|
+
stdout = execFileSync(fzfBin, args, {
|
|
69
|
+
input: fzfInput,
|
|
70
|
+
cwd: options.projectRoot,
|
|
71
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
72
|
+
shell: false,
|
|
73
|
+
timeout: SPAWN_TIMEOUT_MS,
|
|
74
|
+
maxBuffer: MAX_BUFFER_BYTES
|
|
75
|
+
}).toString('utf8');
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
const err = error;
|
|
79
|
+
if (err.status === 130) {
|
|
80
|
+
stdout = ''; // user pressed Esc
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
throw error;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
const selectedLines = stdout.split('\n').filter((l) => l.trim().length > 0);
|
|
88
|
+
const seen = new Set();
|
|
89
|
+
const picked = [];
|
|
90
|
+
for (const line of selectedLines) {
|
|
91
|
+
const item = options.parseLine(line);
|
|
92
|
+
if (item === null)
|
|
93
|
+
continue;
|
|
94
|
+
// Dedup by JSON serialization (caller's T may not be hashable otherwise).
|
|
95
|
+
const key = JSON.stringify(item);
|
|
96
|
+
if (seen.has(key))
|
|
97
|
+
continue;
|
|
98
|
+
seen.add(key);
|
|
99
|
+
picked.push(item);
|
|
100
|
+
}
|
|
101
|
+
const payload = { ...options.meta, pickedAt: new Date().toISOString(), fzfVersion, picked };
|
|
102
|
+
writeArtifact(options.outputPath, payload);
|
|
103
|
+
return { picked, outputPath: options.outputPath, fzfVersion };
|
|
104
|
+
}
|
|
105
|
+
function checkFzfVersion(fzfBin) {
|
|
106
|
+
let stdout;
|
|
107
|
+
try {
|
|
108
|
+
stdout = execFileSync(fzfBin, ['--version'], {
|
|
109
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
110
|
+
shell: false,
|
|
111
|
+
timeout: 5_000
|
|
112
|
+
}).toString('utf8');
|
|
113
|
+
}
|
|
114
|
+
catch (error) {
|
|
115
|
+
if (isEnoent(error) || isCommandNotFound(error)) {
|
|
116
|
+
throw new Error(`fzf binary not found. Install with: brew install fzf (or apt: apt-get install fzf). ` +
|
|
117
|
+
`fzf >= ${MIN_FZF_VERSION} is required for interactive list picking.`);
|
|
118
|
+
}
|
|
119
|
+
throw error;
|
|
120
|
+
}
|
|
121
|
+
const version = stdout.trim().split('\n')[0] ?? '';
|
|
122
|
+
if (compareVersions(version, MIN_FZF_VERSION) < 0) {
|
|
123
|
+
throw new Error(`fzf version ${version} is older than required ${MIN_FZF_VERSION}`);
|
|
124
|
+
}
|
|
125
|
+
return version;
|
|
126
|
+
}
|
|
127
|
+
function compareVersions(a, b) {
|
|
128
|
+
const aParts = a.split('.').map((p) => parseInt(p, 10) || 0);
|
|
129
|
+
const bParts = b.split('.').map((p) => parseInt(p, 10) || 0);
|
|
130
|
+
const len = Math.max(aParts.length, bParts.length);
|
|
131
|
+
for (let i = 0; i < len; i += 1) {
|
|
132
|
+
const av = aParts[i] ?? 0;
|
|
133
|
+
const bv = bParts[i] ?? 0;
|
|
134
|
+
if (av < bv)
|
|
135
|
+
return -1;
|
|
136
|
+
if (av > bv)
|
|
137
|
+
return 1;
|
|
138
|
+
}
|
|
139
|
+
return 0;
|
|
140
|
+
}
|
|
141
|
+
function isEnoent(error) {
|
|
142
|
+
if (error === null || typeof error !== 'object')
|
|
143
|
+
return false;
|
|
144
|
+
return error.code === 'ENOENT';
|
|
145
|
+
}
|
|
146
|
+
function isCommandNotFound(error) {
|
|
147
|
+
if (error === null || typeof error !== 'object')
|
|
148
|
+
return false;
|
|
149
|
+
const msg = error.message ?? '';
|
|
150
|
+
return /command not found|not found/i.test(msg);
|
|
151
|
+
}
|
|
152
|
+
function writeArtifact(outputPath, payload) {
|
|
153
|
+
const dir = dirname(outputPath);
|
|
154
|
+
if (!existsSync(dir)) {
|
|
155
|
+
mkdirSync(dir, { recursive: true });
|
|
156
|
+
}
|
|
157
|
+
writeFileSync(outputPath, JSON.stringify(payload, null, 2), 'utf8');
|
|
158
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Options for the generic fuzzy-match kernel.
|
|
3
|
+
*/
|
|
4
|
+
export interface FuzzyMatchOptions {
|
|
5
|
+
/** Maximum number of matches to return. Default 6. */
|
|
6
|
+
limit?: number;
|
|
7
|
+
/** When true, matching is case-sensitive. Default false (smart-case). */
|
|
8
|
+
caseSensitive?: boolean;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* A single fuzzy-match hit. `item` is the original entry; `score` is
|
|
12
|
+
* normalized to [0, 1] with the top of the current batch at 1.0;
|
|
13
|
+
* `positions` is the set of char indices in the searchable text that
|
|
14
|
+
* contributed to the match.
|
|
15
|
+
*/
|
|
16
|
+
export interface FuzzyMatchResult<T> {
|
|
17
|
+
item: T;
|
|
18
|
+
score: number;
|
|
19
|
+
positions: number[];
|
|
20
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Handoff frontmatter — parser.
|
|
3
|
+
*
|
|
4
|
+
* Spec: docs/superpowers/plans/2026-06-25-slice-topology-multipass.md
|
|
5
|
+
* Phase 1, Task 4.
|
|
6
|
+
*
|
|
7
|
+
* Reads a markdown handoff file from disk and splits it into:
|
|
8
|
+
* - `frontmatter`: structured `HandoffFrontmatter` (parsed from YAML)
|
|
9
|
+
* - `body`: the trailing prose
|
|
10
|
+
*
|
|
11
|
+
* Backward compat: legacy handoffs without a `---` frontmatter block are
|
|
12
|
+
* returned with `schema_version: '0'` and `status: 'unknown'` so older
|
|
13
|
+
* artifacts remain readable without any migration step.
|
|
14
|
+
*
|
|
15
|
+
* Required-field enforcement: any `HandoffFrontmatter` with schema_version
|
|
16
|
+
* `'1'` MUST carry all six required fields. Missing fields raise
|
|
17
|
+
* `IncompleteHandoffError` rather than silently substituting defaults.
|
|
18
|
+
*/
|
|
19
|
+
import type { HandoffFrontmatter } from './handoff-types.js';
|
|
20
|
+
export declare class IncompleteHandoffError extends Error {
|
|
21
|
+
readonly code: "INCOMPLETE_HANDOFF";
|
|
22
|
+
constructor(message: string);
|
|
23
|
+
}
|
|
24
|
+
export interface ParsedHandoff {
|
|
25
|
+
readonly frontmatter: HandoffFrontmatter;
|
|
26
|
+
readonly body: string;
|
|
27
|
+
}
|
|
28
|
+
export declare function parseHandoff(filePath: string): ParsedHandoff;
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Handoff frontmatter — parser.
|
|
3
|
+
*
|
|
4
|
+
* Spec: docs/superpowers/plans/2026-06-25-slice-topology-multipass.md
|
|
5
|
+
* Phase 1, Task 4.
|
|
6
|
+
*
|
|
7
|
+
* Reads a markdown handoff file from disk and splits it into:
|
|
8
|
+
* - `frontmatter`: structured `HandoffFrontmatter` (parsed from YAML)
|
|
9
|
+
* - `body`: the trailing prose
|
|
10
|
+
*
|
|
11
|
+
* Backward compat: legacy handoffs without a `---` frontmatter block are
|
|
12
|
+
* returned with `schema_version: '0'` and `status: 'unknown'` so older
|
|
13
|
+
* artifacts remain readable without any migration step.
|
|
14
|
+
*
|
|
15
|
+
* Required-field enforcement: any `HandoffFrontmatter` with schema_version
|
|
16
|
+
* `'1'` MUST carry all six required fields. Missing fields raise
|
|
17
|
+
* `IncompleteHandoffError` rather than silently substituting defaults.
|
|
18
|
+
*/
|
|
19
|
+
import { readFileSync } from 'node:fs';
|
|
20
|
+
import { parse as parseYaml } from 'yaml';
|
|
21
|
+
export class IncompleteHandoffError extends Error {
|
|
22
|
+
code = 'INCOMPLETE_HANDOFF';
|
|
23
|
+
constructor(message) {
|
|
24
|
+
super(message);
|
|
25
|
+
this.name = 'IncompleteHandoffError';
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
const REQUIRED_FIELDS = [
|
|
29
|
+
'rid',
|
|
30
|
+
'slice_id',
|
|
31
|
+
'agent_id',
|
|
32
|
+
'schema_version',
|
|
33
|
+
'status',
|
|
34
|
+
'created_at'
|
|
35
|
+
];
|
|
36
|
+
const FRONTMATTER_RE = /^---\n([\s\S]*?)\n---\n?([\s\S]*)$/;
|
|
37
|
+
export function parseHandoff(filePath) {
|
|
38
|
+
const content = readFileSync(filePath, 'utf8');
|
|
39
|
+
const match = FRONTMATTER_RE.exec(content);
|
|
40
|
+
if (!match) {
|
|
41
|
+
return legacyDefaults(content);
|
|
42
|
+
}
|
|
43
|
+
const [, yamlContent, body] = match;
|
|
44
|
+
const parsed = parseYaml(yamlContent ?? '');
|
|
45
|
+
if (parsed === null || parsed === undefined) {
|
|
46
|
+
return legacyDefaults(content);
|
|
47
|
+
}
|
|
48
|
+
const missing = REQUIRED_FIELDS.filter((f) => parsed[f] === undefined);
|
|
49
|
+
if (missing.length > 0) {
|
|
50
|
+
throw new IncompleteHandoffError(`Missing required frontmatter fields: ${missing.join(', ')}`);
|
|
51
|
+
}
|
|
52
|
+
return {
|
|
53
|
+
frontmatter: parsed,
|
|
54
|
+
body: body ?? ''
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
function legacyDefaults(content) {
|
|
58
|
+
return {
|
|
59
|
+
frontmatter: {
|
|
60
|
+
rid: 'unknown',
|
|
61
|
+
slice_id: 'unknown',
|
|
62
|
+
agent_id: 'unknown',
|
|
63
|
+
schema_version: '0',
|
|
64
|
+
status: 'unknown',
|
|
65
|
+
created_at: new Date(0).toISOString()
|
|
66
|
+
},
|
|
67
|
+
body: content
|
|
68
|
+
};
|
|
69
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Handoff frontmatter schema — types.
|
|
3
|
+
*
|
|
4
|
+
* Spec: docs/superpowers/plans/2026-06-25-slice-topology-multipass.md
|
|
5
|
+
* Phase 1, Task 4 (Handoff frontmatter types + parser + writer).
|
|
6
|
+
*
|
|
7
|
+
* A handoff artifact is a markdown file with a YAML frontmatter block
|
|
8
|
+
* carrying structured fields (rid, slice_id, status, ...) followed by a
|
|
9
|
+
* prose body. The frontmatter is the source of truth for downstream
|
|
10
|
+
* automation (peaks-rd, peaks-qa); the body is human/agent prose.
|
|
11
|
+
*
|
|
12
|
+
* Two schema versions exist:
|
|
13
|
+
* - "0" — legacy handoff (no frontmatter block). Fields default to
|
|
14
|
+
* `rid='unknown'`, `slice_id='unknown'`, `agent_id='unknown'`,
|
|
15
|
+
* `status='unknown'`, `created_at=epoch`.
|
|
16
|
+
* - "1" — current schema. All required fields must be present; the
|
|
17
|
+
* parser throws `IncompleteHandoffError` if any are missing.
|
|
18
|
+
*/
|
|
19
|
+
export type HandoffStatus = 'done' | 'failed' | 'partial' | 'blocked' | 'unknown';
|
|
20
|
+
export type HandoffTestResult = 'pass' | 'fail' | 'inconclusive' | null;
|
|
21
|
+
export type HandoffSchemaVersion = '0' | '1';
|
|
22
|
+
export interface HandoffFrontmatter {
|
|
23
|
+
readonly rid: string;
|
|
24
|
+
readonly slice_id: string;
|
|
25
|
+
readonly agent_id: string;
|
|
26
|
+
readonly schema_version: HandoffSchemaVersion;
|
|
27
|
+
readonly status: HandoffStatus;
|
|
28
|
+
readonly created_at: string;
|
|
29
|
+
readonly duration_seconds?: number;
|
|
30
|
+
readonly files_changed?: readonly string[];
|
|
31
|
+
readonly lines_added?: number;
|
|
32
|
+
readonly lines_removed?: number;
|
|
33
|
+
readonly test_result?: HandoffTestResult;
|
|
34
|
+
readonly coverage?: number;
|
|
35
|
+
readonly errors?: readonly string[];
|
|
36
|
+
readonly warnings?: readonly string[];
|
|
37
|
+
readonly blockers?: readonly string[];
|
|
38
|
+
readonly upstream_dependencies?: readonly string[];
|
|
39
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Handoff frontmatter schema — types.
|
|
3
|
+
*
|
|
4
|
+
* Spec: docs/superpowers/plans/2026-06-25-slice-topology-multipass.md
|
|
5
|
+
* Phase 1, Task 4 (Handoff frontmatter types + parser + writer).
|
|
6
|
+
*
|
|
7
|
+
* A handoff artifact is a markdown file with a YAML frontmatter block
|
|
8
|
+
* carrying structured fields (rid, slice_id, status, ...) followed by a
|
|
9
|
+
* prose body. The frontmatter is the source of truth for downstream
|
|
10
|
+
* automation (peaks-rd, peaks-qa); the body is human/agent prose.
|
|
11
|
+
*
|
|
12
|
+
* Two schema versions exist:
|
|
13
|
+
* - "0" — legacy handoff (no frontmatter block). Fields default to
|
|
14
|
+
* `rid='unknown'`, `slice_id='unknown'`, `agent_id='unknown'`,
|
|
15
|
+
* `status='unknown'`, `created_at=epoch`.
|
|
16
|
+
* - "1" — current schema. All required fields must be present; the
|
|
17
|
+
* parser throws `IncompleteHandoffError` if any are missing.
|
|
18
|
+
*/
|
|
19
|
+
export {};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Handoff frontmatter — writer.
|
|
3
|
+
*
|
|
4
|
+
* Spec: docs/superpowers/plans/2026-06-25-slice-topology-multipass.md
|
|
5
|
+
* Phase 1, Task 4.
|
|
6
|
+
*
|
|
7
|
+
* Serializes a `HandoffFrontmatter` plus a body string into a single
|
|
8
|
+
* markdown file with the canonical layout:
|
|
9
|
+
*
|
|
10
|
+
* ---
|
|
11
|
+
* rid: "..."
|
|
12
|
+
* slice_id: "..."
|
|
13
|
+
* ...
|
|
14
|
+
* ---
|
|
15
|
+
*
|
|
16
|
+
* <body verbatim>
|
|
17
|
+
*
|
|
18
|
+
* The output of `writeHandoff` is round-trip compatible with
|
|
19
|
+
* `parseHandoff` — writing then parsing recovers the same frontmatter
|
|
20
|
+
* fields and body.
|
|
21
|
+
*/
|
|
22
|
+
import type { HandoffFrontmatter } from './handoff-types.js';
|
|
23
|
+
export declare function writeHandoff(filePath: string, frontmatter: HandoffFrontmatter, body: string): void;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Handoff frontmatter — writer.
|
|
3
|
+
*
|
|
4
|
+
* Spec: docs/superpowers/plans/2026-06-25-slice-topology-multipass.md
|
|
5
|
+
* Phase 1, Task 4.
|
|
6
|
+
*
|
|
7
|
+
* Serializes a `HandoffFrontmatter` plus a body string into a single
|
|
8
|
+
* markdown file with the canonical layout:
|
|
9
|
+
*
|
|
10
|
+
* ---
|
|
11
|
+
* rid: "..."
|
|
12
|
+
* slice_id: "..."
|
|
13
|
+
* ...
|
|
14
|
+
* ---
|
|
15
|
+
*
|
|
16
|
+
* <body verbatim>
|
|
17
|
+
*
|
|
18
|
+
* The output of `writeHandoff` is round-trip compatible with
|
|
19
|
+
* `parseHandoff` — writing then parsing recovers the same frontmatter
|
|
20
|
+
* fields and body.
|
|
21
|
+
*/
|
|
22
|
+
import { writeFileSync } from 'node:fs';
|
|
23
|
+
import { stringify as stringifyYaml } from 'yaml';
|
|
24
|
+
const FRONTMATTER_OPEN = '---\n';
|
|
25
|
+
const FRONTMATTER_CLOSE = '\n---\n\n';
|
|
26
|
+
export function writeHandoff(filePath, frontmatter, body) {
|
|
27
|
+
const yamlStr = stringifyYaml(frontmatter).trimEnd();
|
|
28
|
+
const content = `${FRONTMATTER_OPEN}${yamlStr}${FRONTMATTER_CLOSE}${body}`;
|
|
29
|
+
writeFileSync(filePath, content, 'utf8');
|
|
30
|
+
}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Slice 003-2026-06-16-hook-governance — single source of truth for the
|
|
3
|
+
* peaks hook output contract. See `.claude/HOOKS.md` for the canonical doc.
|
|
4
|
+
*
|
|
5
|
+
* Three helpers, one job: enforce the stdout/stderr/exit-code discipline
|
|
6
|
+
* that every peaks-managed hook command MUST follow. Centralising the
|
|
7
|
+
* contract here lets us:
|
|
8
|
+
* 1. Pin the contract in cross-platform tests (tests/unit/hooks/contract.test.ts).
|
|
9
|
+
* 2. Add a new helper (e.g. emitAsk) without changing every call site.
|
|
10
|
+
* 3. Stop hand-rolling the deny JSON in gate-commands.ts / hook-handle.ts,
|
|
11
|
+
* which historically drifted into "PreToolUse:Bash hook error" noise.
|
|
12
|
+
*
|
|
13
|
+
* The contract (intentionally redundant with the doc; the doc is for humans,
|
|
14
|
+
* this is for the type checker):
|
|
15
|
+
*
|
|
16
|
+
* emitHint(io, text)
|
|
17
|
+
* - Writes `text` to io.stderr with a trailing newline.
|
|
18
|
+
* - Does NOT write to io.stdout (the host reads stdout as the decision
|
|
19
|
+
* signal; a hint on stdout is interpreted as a malformed decision).
|
|
20
|
+
* - Does NOT set a non-zero process.exitCode. A hint is diagnostic only;
|
|
21
|
+
* it must not change the host's permission decision.
|
|
22
|
+
* - Empty `text` is a no-op (skips both the write and the trailing
|
|
23
|
+
* newline so we never pollute stderr with blank lines).
|
|
24
|
+
*
|
|
25
|
+
* emitBlock(io, reason)
|
|
26
|
+
* - Builds the Claude-Code-shaped deny JSON:
|
|
27
|
+
* { "hookSpecificOutput": { "hookEventName": "PreToolUse",
|
|
28
|
+
* "permissionDecision": "deny",
|
|
29
|
+
* "permissionDecisionReason": <reason> } }
|
|
30
|
+
* JSON.stringify is the canonical escape for the reason; quotes,
|
|
31
|
+
* backslashes, and newlines inside the reason are preserved.
|
|
32
|
+
* - Writes the serialized JSON to io.stdout with a trailing newline.
|
|
33
|
+
* - Sets process.exitCode = 2. Claude Code treats exit-2 as the
|
|
34
|
+
* "block" signal (see [Fact-Forcing Gate] note in .claude/HOOKS.md);
|
|
35
|
+
* the JSON on stdout is the human-readable reason for the LLM.
|
|
36
|
+
* - Surfaces the reason to io.stderr so an operator running the
|
|
37
|
+
* hook command directly (or the LLM inspecting logs) can see
|
|
38
|
+
* WHY the tool was blocked, not just THAT it was blocked.
|
|
39
|
+
*
|
|
40
|
+
* emitDecision(io, decision)
|
|
41
|
+
* - Writes the caller-provided decision JSON to io.stdout with a
|
|
42
|
+
* trailing newline and returns the serialized string. Used by
|
|
43
|
+
* IDE adapters that produce a different shape (e.g. Trae uses
|
|
44
|
+
* hookEventName='beforeToolCall' instead of 'PreToolUse'). The
|
|
45
|
+
* helper is intentionally shape-agnostic: the caller is the
|
|
46
|
+
* adapter's `formatDecisionResponse`, which already knows the
|
|
47
|
+
* IDE-specific shape.
|
|
48
|
+
* - Does NOT set a non-zero process.exitCode. The decision is
|
|
49
|
+
* communicated entirely via the stdout JSON; the host reads
|
|
50
|
+
* permissionDecision='deny' to block. Setting exit=2 on top
|
|
51
|
+
* of the JSON would be double-signaling.
|
|
52
|
+
*
|
|
53
|
+
* Platform notes:
|
|
54
|
+
* - The contract is platform-independent. The helpers write to ProgramIO
|
|
55
|
+
* (stdout / stderr) only; no path separators, no shell escaping, no
|
|
56
|
+
* line-ending variants. The cross-platform contract test pins this.
|
|
57
|
+
* - On win32, Node's process.stdout and process.stderr are binary-safe
|
|
58
|
+
* and UTF-8; do not introduce \r\n anywhere. The contract is LF.
|
|
59
|
+
*/
|
|
60
|
+
import type { ProgramIO } from '../../cli/cli-helpers.js';
|
|
61
|
+
/** Exit code the host treats as a hard block (Claude Code convention). */
|
|
62
|
+
export declare const HOOK_BLOCK_EXIT_CODE = 2;
|
|
63
|
+
/** Canonical Claude-Code hook event name. */
|
|
64
|
+
export declare const CLAUDE_CODE_HOOK_EVENT = "PreToolUse";
|
|
65
|
+
/** Permissive decision shape — anything JSON-serialisable. */
|
|
66
|
+
export type DecisionShape = Record<string, unknown>;
|
|
67
|
+
/**
|
|
68
|
+
* Hint — diagnostic, stderr-only, never affects the host decision.
|
|
69
|
+
* Returns the bytes written to stderr (or '' for an empty hint).
|
|
70
|
+
*/
|
|
71
|
+
export declare function emitHint(io: ProgramIO, text: string): string;
|
|
72
|
+
/** Result of a block emission — the bytes written to stdout and the original reason. */
|
|
73
|
+
export type EmitBlockResult = {
|
|
74
|
+
readonly stdout: string;
|
|
75
|
+
readonly reason: string;
|
|
76
|
+
};
|
|
77
|
+
/**
|
|
78
|
+
* Block — deny a tool call. Writes the Claude-Code-shaped deny JSON to
|
|
79
|
+
* stdout, sets process.exitCode = 2, and surfaces the reason to stderr.
|
|
80
|
+
*/
|
|
81
|
+
export declare function emitBlock(io: ProgramIO, reason: string): EmitBlockResult;
|
|
82
|
+
/**
|
|
83
|
+
* Decision — write a caller-built decision object to stdout. Returns the
|
|
84
|
+
* serialized bytes so callers can log / assert on the exact string.
|
|
85
|
+
*
|
|
86
|
+
* Accepts either a plain object (canonical path; the helper does the
|
|
87
|
+
* JSON.stringify) or a pre-serialized string (used by adapter dispatch
|
|
88
|
+
* where `formatDecisionResponse` already serialized the IDE-shaped
|
|
89
|
+
* envelope). The string form is the legacy escape hatch and should not
|
|
90
|
+
* be used for new code.
|
|
91
|
+
*/
|
|
92
|
+
export declare function emitDecision(io: ProgramIO, decision: DecisionShape | string): string;
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Slice 003-2026-06-16-hook-governance — single source of truth for the
|
|
3
|
+
* peaks hook output contract. See `.claude/HOOKS.md` for the canonical doc.
|
|
4
|
+
*
|
|
5
|
+
* Three helpers, one job: enforce the stdout/stderr/exit-code discipline
|
|
6
|
+
* that every peaks-managed hook command MUST follow. Centralising the
|
|
7
|
+
* contract here lets us:
|
|
8
|
+
* 1. Pin the contract in cross-platform tests (tests/unit/hooks/contract.test.ts).
|
|
9
|
+
* 2. Add a new helper (e.g. emitAsk) without changing every call site.
|
|
10
|
+
* 3. Stop hand-rolling the deny JSON in gate-commands.ts / hook-handle.ts,
|
|
11
|
+
* which historically drifted into "PreToolUse:Bash hook error" noise.
|
|
12
|
+
*
|
|
13
|
+
* The contract (intentionally redundant with the doc; the doc is for humans,
|
|
14
|
+
* this is for the type checker):
|
|
15
|
+
*
|
|
16
|
+
* emitHint(io, text)
|
|
17
|
+
* - Writes `text` to io.stderr with a trailing newline.
|
|
18
|
+
* - Does NOT write to io.stdout (the host reads stdout as the decision
|
|
19
|
+
* signal; a hint on stdout is interpreted as a malformed decision).
|
|
20
|
+
* - Does NOT set a non-zero process.exitCode. A hint is diagnostic only;
|
|
21
|
+
* it must not change the host's permission decision.
|
|
22
|
+
* - Empty `text` is a no-op (skips both the write and the trailing
|
|
23
|
+
* newline so we never pollute stderr with blank lines).
|
|
24
|
+
*
|
|
25
|
+
* emitBlock(io, reason)
|
|
26
|
+
* - Builds the Claude-Code-shaped deny JSON:
|
|
27
|
+
* { "hookSpecificOutput": { "hookEventName": "PreToolUse",
|
|
28
|
+
* "permissionDecision": "deny",
|
|
29
|
+
* "permissionDecisionReason": <reason> } }
|
|
30
|
+
* JSON.stringify is the canonical escape for the reason; quotes,
|
|
31
|
+
* backslashes, and newlines inside the reason are preserved.
|
|
32
|
+
* - Writes the serialized JSON to io.stdout with a trailing newline.
|
|
33
|
+
* - Sets process.exitCode = 2. Claude Code treats exit-2 as the
|
|
34
|
+
* "block" signal (see [Fact-Forcing Gate] note in .claude/HOOKS.md);
|
|
35
|
+
* the JSON on stdout is the human-readable reason for the LLM.
|
|
36
|
+
* - Surfaces the reason to io.stderr so an operator running the
|
|
37
|
+
* hook command directly (or the LLM inspecting logs) can see
|
|
38
|
+
* WHY the tool was blocked, not just THAT it was blocked.
|
|
39
|
+
*
|
|
40
|
+
* emitDecision(io, decision)
|
|
41
|
+
* - Writes the caller-provided decision JSON to io.stdout with a
|
|
42
|
+
* trailing newline and returns the serialized string. Used by
|
|
43
|
+
* IDE adapters that produce a different shape (e.g. Trae uses
|
|
44
|
+
* hookEventName='beforeToolCall' instead of 'PreToolUse'). The
|
|
45
|
+
* helper is intentionally shape-agnostic: the caller is the
|
|
46
|
+
* adapter's `formatDecisionResponse`, which already knows the
|
|
47
|
+
* IDE-specific shape.
|
|
48
|
+
* - Does NOT set a non-zero process.exitCode. The decision is
|
|
49
|
+
* communicated entirely via the stdout JSON; the host reads
|
|
50
|
+
* permissionDecision='deny' to block. Setting exit=2 on top
|
|
51
|
+
* of the JSON would be double-signaling.
|
|
52
|
+
*
|
|
53
|
+
* Platform notes:
|
|
54
|
+
* - The contract is platform-independent. The helpers write to ProgramIO
|
|
55
|
+
* (stdout / stderr) only; no path separators, no shell escaping, no
|
|
56
|
+
* line-ending variants. The cross-platform contract test pins this.
|
|
57
|
+
* - On win32, Node's process.stdout and process.stderr are binary-safe
|
|
58
|
+
* and UTF-8; do not introduce \r\n anywhere. The contract is LF.
|
|
59
|
+
*/
|
|
60
|
+
/** Exit code the host treats as a hard block (Claude Code convention). */
|
|
61
|
+
export const HOOK_BLOCK_EXIT_CODE = 2;
|
|
62
|
+
/** Canonical Claude-Code hook event name. */
|
|
63
|
+
export const CLAUDE_CODE_HOOK_EVENT = 'PreToolUse';
|
|
64
|
+
/**
|
|
65
|
+
* Hint — diagnostic, stderr-only, never affects the host decision.
|
|
66
|
+
* Returns the bytes written to stderr (or '' for an empty hint).
|
|
67
|
+
*/
|
|
68
|
+
export function emitHint(io, text) {
|
|
69
|
+
if (text.length === 0) {
|
|
70
|
+
return '';
|
|
71
|
+
}
|
|
72
|
+
const line = text.endsWith('\n') ? text : `${text}\n`;
|
|
73
|
+
io.stderr(line);
|
|
74
|
+
return line;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Block — deny a tool call. Writes the Claude-Code-shaped deny JSON to
|
|
78
|
+
* stdout, sets process.exitCode = 2, and surfaces the reason to stderr.
|
|
79
|
+
*/
|
|
80
|
+
export function emitBlock(io, reason) {
|
|
81
|
+
const safeReason = reason.length > 0 ? reason : 'denied by peaks';
|
|
82
|
+
const payload = {
|
|
83
|
+
hookSpecificOutput: {
|
|
84
|
+
hookEventName: CLAUDE_CODE_HOOK_EVENT,
|
|
85
|
+
permissionDecision: 'deny',
|
|
86
|
+
permissionDecisionReason: safeReason
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
const serialized = JSON.stringify(payload);
|
|
90
|
+
io.stdout(serialized);
|
|
91
|
+
io.stdout('\n');
|
|
92
|
+
io.stderr(`peaks: ${safeReason}\n`);
|
|
93
|
+
process.exitCode = HOOK_BLOCK_EXIT_CODE;
|
|
94
|
+
return { stdout: serialized, reason: safeReason };
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Decision — write a caller-built decision object to stdout. Returns the
|
|
98
|
+
* serialized bytes so callers can log / assert on the exact string.
|
|
99
|
+
*
|
|
100
|
+
* Accepts either a plain object (canonical path; the helper does the
|
|
101
|
+
* JSON.stringify) or a pre-serialized string (used by adapter dispatch
|
|
102
|
+
* where `formatDecisionResponse` already serialized the IDE-shaped
|
|
103
|
+
* envelope). The string form is the legacy escape hatch and should not
|
|
104
|
+
* be used for new code.
|
|
105
|
+
*/
|
|
106
|
+
export function emitDecision(io, decision) {
|
|
107
|
+
const serialized = typeof decision === 'string' ? decision : JSON.stringify(decision);
|
|
108
|
+
io.stdout(serialized);
|
|
109
|
+
io.stdout('\n');
|
|
110
|
+
return serialized;
|
|
111
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export type DetectPresenceMarkerInput = {
|
|
2
|
+
project: string;
|
|
3
|
+
latestAssistantMessage: string;
|
|
4
|
+
};
|
|
5
|
+
export type DetectPresenceMarkerResult = {
|
|
6
|
+
active: boolean;
|
|
7
|
+
skill?: string;
|
|
8
|
+
markerFound: boolean;
|
|
9
|
+
warning?: string;
|
|
10
|
+
};
|
|
11
|
+
export type PresenceMarkerWarning = (typeof PRESENCE_MARKER_WARNING)[number];
|
|
12
|
+
export declare const PRESENCE_MARKER_WARNING: readonly ["Peaks skill context may have been lost from this conversation; please re-invoke /peaks-<skill>."];
|
|
13
|
+
/**
|
|
14
|
+
* Pure read-only presence-marker detection. No I/O side effects.
|
|
15
|
+
*/
|
|
16
|
+
export declare function detectPresenceMarker(input: DetectPresenceMarkerInput): DetectPresenceMarkerResult;
|