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,271 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* peaks skill sync — fan-out the peaks-* skill family to all 8
|
|
3
|
+
* supported LLM-CLI platforms. Per spec §9 line 1105 (Slice #12
|
|
4
|
+
* final piece): "peaks skills sync 8 平台分发".
|
|
5
|
+
*
|
|
6
|
+
* The 8 target platforms are enumerated by the `IdeId` union
|
|
7
|
+
* (src/services/ide/ide-types.ts:16-24). The per-IDE install
|
|
8
|
+
* profile is `IdeSkillInstall`; the actual symlink installer
|
|
9
|
+
* is `scripts/install-skills.mjs::installBundledSkills` (dynamically
|
|
10
|
+
* imported so this module does not require a build step).
|
|
11
|
+
*
|
|
12
|
+
* Slice 2.0.1-bug2-skill-sync-fallback: when peaks-cli is
|
|
13
|
+
* installed from npm into a consumer project, that consumer's
|
|
14
|
+
* CWD does not contain `scripts/install-skills.mjs`. The previous
|
|
15
|
+
* hard-coded `join(process.cwd(), 'scripts', 'install-skills.mjs')`
|
|
16
|
+
* therefore threw `ERR_MODULE_NOT_FOUND` in every consumer run.
|
|
17
|
+
* The fix is a three-tier probe:
|
|
18
|
+
* 1. peaks-cli's own install path (resolved from
|
|
19
|
+
* `import.meta.url` walking up to the package root, or
|
|
20
|
+
* from `process.argv[1]` for CJS-equivalent entrypoints),
|
|
21
|
+
* 2. the consumer CWD (`<cwd>/scripts/install-skills.mjs`),
|
|
22
|
+
* 3. graceful skip — warn once per process, return a no-op
|
|
23
|
+
* installer so the per-platform result is `ok: true` with
|
|
24
|
+
* `installed: []` and a `skipped` rationale.
|
|
25
|
+
*/
|
|
26
|
+
import { existsSync } from 'node:fs';
|
|
27
|
+
import { dirname, join, resolve as resolvePath } from 'node:path';
|
|
28
|
+
import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
29
|
+
/**
|
|
30
|
+
* The 8 platforms per Slice #12 final piece. Slice #0.7 + Slice
|
|
31
|
+
* #0.5.2 registered these in the IdeId union; this list is the
|
|
32
|
+
* single source of truth for the sync fan-out.
|
|
33
|
+
*/
|
|
34
|
+
export const SYNC_PLATFORMS = [
|
|
35
|
+
'claude-code',
|
|
36
|
+
'trae',
|
|
37
|
+
'codex',
|
|
38
|
+
'cursor',
|
|
39
|
+
'qoder',
|
|
40
|
+
'tongyi-lingma',
|
|
41
|
+
'hermes',
|
|
42
|
+
'openclaw',
|
|
43
|
+
];
|
|
44
|
+
/**
|
|
45
|
+
* Sentinel: the resolver ran, found no installer, and warned.
|
|
46
|
+
* Memoized so subsequent `loadInstaller()` calls short-circuit
|
|
47
|
+
* without re-walking the filesystem on every platform iteration.
|
|
48
|
+
*/
|
|
49
|
+
const NO_INSTALLER_SENTINEL = Symbol('sync-service.no-installer');
|
|
50
|
+
/**
|
|
51
|
+
* Cache state: either an installer function, the "not found"
|
|
52
|
+
* sentinel, or `null` (cache cold, first probe still pending).
|
|
53
|
+
*/
|
|
54
|
+
let cachedInstaller = null;
|
|
55
|
+
/**
|
|
56
|
+
* No-op installer used when neither candidate path resolves to
|
|
57
|
+
* an importable `install-skills.mjs`. Reports zero installs and
|
|
58
|
+
* a single skip reason so the per-platform result is `ok: true`
|
|
59
|
+
* with an explainable `skipped` line.
|
|
60
|
+
*/
|
|
61
|
+
function noopInstaller(_opts) {
|
|
62
|
+
return {
|
|
63
|
+
installed: [],
|
|
64
|
+
skipped: [
|
|
65
|
+
'install-skills.mjs not found in project; skill sync skipped — bundled skills are installed via peaks-cli postinstall',
|
|
66
|
+
],
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Internal indirection table for the test seam. The production
|
|
71
|
+
* `loadInstaller` reads `services.resolvePeaksCliInstallerPath()`
|
|
72
|
+
* and `services.loadInstallerForTest()` at call time, so a
|
|
73
|
+
* `vi.spyOn(services, 'resolvePeaksCliInstallerPath')` in tests
|
|
74
|
+
* takes effect (ES module top-level `const` captures the original
|
|
75
|
+
* reference and would bypass the spy).
|
|
76
|
+
*/
|
|
77
|
+
const services = {
|
|
78
|
+
resolvePeaksCliInstallerPath,
|
|
79
|
+
loadInstallerForTest,
|
|
80
|
+
};
|
|
81
|
+
/**
|
|
82
|
+
* Resolve the path of `install-skills.mjs` inside the peaks-cli
|
|
83
|
+
* install root, walking up from `import.meta.url` until a
|
|
84
|
+
* `package.json` with `"name": "peaks-cli"` is found. Returns
|
|
85
|
+
* `null` when peaks-cli is not on the import path or the script
|
|
86
|
+
* is absent (e.g. a partial install).
|
|
87
|
+
*/
|
|
88
|
+
export function resolvePeaksCliInstallerPath() {
|
|
89
|
+
const candidates = [];
|
|
90
|
+
// Tier 1a: walk up from this module's URL.
|
|
91
|
+
try {
|
|
92
|
+
const here = dirname(fileURLToPath(import.meta.url));
|
|
93
|
+
let cursor = here;
|
|
94
|
+
for (let depth = 0; depth < 8; depth += 1) {
|
|
95
|
+
const pkgJson = join(cursor, 'package.json');
|
|
96
|
+
if (existsSync(pkgJson)) {
|
|
97
|
+
candidates.push(join(cursor, 'scripts', 'install-skills.mjs'));
|
|
98
|
+
break;
|
|
99
|
+
}
|
|
100
|
+
const parent = dirname(cursor);
|
|
101
|
+
if (parent === cursor)
|
|
102
|
+
break;
|
|
103
|
+
cursor = parent;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
catch { // TODO(g2): legacy silent catch — grace: 1 minor release (v2.14.0)
|
|
107
|
+
// import.meta.url may be unavailable in some bundlers; fall through.
|
|
108
|
+
}
|
|
109
|
+
// Tier 1b: process.argv[1] (the entrypoint). Useful when this
|
|
110
|
+
// module is bundled or shimmed.
|
|
111
|
+
try {
|
|
112
|
+
const argvEntry = process.argv[1];
|
|
113
|
+
if (typeof argvEntry === 'string' && argvEntry.length > 0) {
|
|
114
|
+
let cursor = resolvePath(dirname(argvEntry));
|
|
115
|
+
for (let depth = 0; depth < 8; depth += 1) {
|
|
116
|
+
const pkgJson = join(cursor, 'package.json');
|
|
117
|
+
if (existsSync(pkgJson)) {
|
|
118
|
+
candidates.push(join(cursor, 'scripts', 'install-skills.mjs'));
|
|
119
|
+
break;
|
|
120
|
+
}
|
|
121
|
+
const parent = dirname(cursor);
|
|
122
|
+
if (parent === cursor)
|
|
123
|
+
break;
|
|
124
|
+
cursor = parent;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
catch { // TODO(g2): legacy silent catch — grace: 1 minor release (v2.14.0)
|
|
129
|
+
// process.argv may be unavailable in some runtimes; fall through.
|
|
130
|
+
}
|
|
131
|
+
for (const candidate of candidates) {
|
|
132
|
+
if (existsSync(candidate)) {
|
|
133
|
+
return candidate;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
return null;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Test seam: attempt to import the installer at `scriptPath`.
|
|
140
|
+
* Returns the `installBundledSkills` function on success, or
|
|
141
|
+
* `null` when the file is missing / not importable. The
|
|
142
|
+
* production code calls this through `loadInstaller`; tests
|
|
143
|
+
* `vi.spyOn` it to drive the three-tier probe without touching
|
|
144
|
+
* the real filesystem.
|
|
145
|
+
*/
|
|
146
|
+
export async function loadInstallerForTest(scriptPath) {
|
|
147
|
+
try {
|
|
148
|
+
const mod = (await import(pathToFileURL(scriptPath).href));
|
|
149
|
+
return mod.installBundledSkills;
|
|
150
|
+
}
|
|
151
|
+
catch { // TODO(g2): legacy silent catch — grace: 1 minor release (v2.14.0)
|
|
152
|
+
return null;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Resolve and load the installer, memoizing the outcome.
|
|
157
|
+
* Three-tier probe (peaks-cli install path → CWD → no-op),
|
|
158
|
+
* with the "not found" outcome memoized as a sentinel so the
|
|
159
|
+
* warning is logged at most once per process.
|
|
160
|
+
*
|
|
161
|
+
* The probe delegates to the `services` indirection table so
|
|
162
|
+
* tests can `vi.spyOn(services, 'resolvePeaksCliInstallerPath')`
|
|
163
|
+
* and have the spied value take effect at runtime (direct
|
|
164
|
+
* module-level calls would bind the original function at load
|
|
165
|
+
* time and bypass the spy).
|
|
166
|
+
*/
|
|
167
|
+
async function loadInstaller() {
|
|
168
|
+
if (cachedInstaller === NO_INSTALLER_SENTINEL) {
|
|
169
|
+
return noopInstaller;
|
|
170
|
+
}
|
|
171
|
+
if (cachedInstaller !== null) {
|
|
172
|
+
return cachedInstaller;
|
|
173
|
+
}
|
|
174
|
+
// Tier 1: peaks-cli install path.
|
|
175
|
+
const peaksCliScript = services.resolvePeaksCliInstallerPath();
|
|
176
|
+
if (peaksCliScript !== null) {
|
|
177
|
+
const installer = await services.loadInstallerForTest(peaksCliScript);
|
|
178
|
+
if (installer !== null) {
|
|
179
|
+
cachedInstaller = installer;
|
|
180
|
+
return installer;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
// Tier 2: consumer CWD.
|
|
184
|
+
const cwdScript = join(process.cwd(), 'scripts', 'install-skills.mjs');
|
|
185
|
+
const cwdInstaller = await services.loadInstallerForTest(cwdScript);
|
|
186
|
+
if (cwdInstaller !== null) {
|
|
187
|
+
cachedInstaller = cwdInstaller;
|
|
188
|
+
return cwdInstaller;
|
|
189
|
+
}
|
|
190
|
+
// Tier 3: graceful skip. Warn once per process.
|
|
191
|
+
cachedInstaller = NO_INSTALLER_SENTINEL;
|
|
192
|
+
// eslint-disable-next-line no-console -- intentional user-visible signal
|
|
193
|
+
console.warn('peaks skill sync: install-skills.mjs not found in project; ' +
|
|
194
|
+
'skipping (bundled skills come from peaks-cli postinstall).');
|
|
195
|
+
return noopInstaller;
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Validate a single platform id against the SYNC_PLATFORMS
|
|
199
|
+
* allowlist. Throws on a bogus value.
|
|
200
|
+
*/
|
|
201
|
+
export function assertValidPlatform(platform) {
|
|
202
|
+
if (!SYNC_PLATFORMS.includes(platform)) {
|
|
203
|
+
throw new Error(`peaks skill sync: unknown platform "${platform}". ` +
|
|
204
|
+
`Valid platforms: ${SYNC_PLATFORMS.join(', ')}`);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
export async function runSkillSync(input) {
|
|
208
|
+
const platforms = input.platforms ?? SYNC_PLATFORMS;
|
|
209
|
+
for (const p of platforms) {
|
|
210
|
+
assertValidPlatform(p);
|
|
211
|
+
}
|
|
212
|
+
const dryRun = input.dryRun === true;
|
|
213
|
+
const installer = await loadInstaller();
|
|
214
|
+
const perPlatform = [];
|
|
215
|
+
let syncedCount = 0;
|
|
216
|
+
let failedCount = 0;
|
|
217
|
+
let totalInstalled = 0;
|
|
218
|
+
for (const platform of platforms) {
|
|
219
|
+
const start = Date.now();
|
|
220
|
+
try {
|
|
221
|
+
const result = installer({
|
|
222
|
+
ideId: platform,
|
|
223
|
+
projectRoot: input.projectRoot,
|
|
224
|
+
...(dryRun ? { dryRun: true } : {}),
|
|
225
|
+
});
|
|
226
|
+
perPlatform.push({
|
|
227
|
+
platform,
|
|
228
|
+
ok: true,
|
|
229
|
+
installed: result.installed,
|
|
230
|
+
skipped: result.skipped,
|
|
231
|
+
durationMs: Date.now() - start,
|
|
232
|
+
});
|
|
233
|
+
syncedCount += 1;
|
|
234
|
+
totalInstalled += result.installed.length;
|
|
235
|
+
}
|
|
236
|
+
catch (err) {
|
|
237
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
238
|
+
perPlatform.push({
|
|
239
|
+
platform,
|
|
240
|
+
ok: false,
|
|
241
|
+
installed: [],
|
|
242
|
+
skipped: [],
|
|
243
|
+
error: message,
|
|
244
|
+
durationMs: Date.now() - start,
|
|
245
|
+
});
|
|
246
|
+
failedCount += 1;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
return {
|
|
250
|
+
applied: !dryRun,
|
|
251
|
+
dryRun,
|
|
252
|
+
projectRoot: input.projectRoot,
|
|
253
|
+
perPlatform,
|
|
254
|
+
syncedCount,
|
|
255
|
+
failedCount,
|
|
256
|
+
totalInstalled,
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Test-only export surface. Not part of the public API; subject
|
|
261
|
+
* to breaking changes without a major version bump.
|
|
262
|
+
*
|
|
263
|
+
* The seam exposes the `services` indirection table (so tests
|
|
264
|
+
* can `vi.spyOn` the resolver and loader) and a cache reset.
|
|
265
|
+
*/
|
|
266
|
+
export const __testing = {
|
|
267
|
+
services,
|
|
268
|
+
resetInstallerCache() {
|
|
269
|
+
cachedInstaller = null;
|
|
270
|
+
},
|
|
271
|
+
};
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Calibration store for slice work-estimation.
|
|
3
|
+
*
|
|
4
|
+
* v1 (current): pure heuristic based on LoC + test count + complexity.
|
|
5
|
+
* confidence: 'low' until >= 5 historical slice records exist.
|
|
6
|
+
* formula: minutesP50 = 0.25 * locSum + 0.5 * testCount + 0.1 * complexitySum
|
|
7
|
+
* minutesP90 = minutesP50 * 1.6
|
|
8
|
+
*
|
|
9
|
+
* v1.1 (next): read `.peaks/_runtime/<sessionId>/qa/cycle-time.json` history; if
|
|
10
|
+
* sample size >= 5 for a complexity bucket, switch to percentile-based
|
|
11
|
+
* estimate with confidence 'high'.
|
|
12
|
+
*
|
|
13
|
+
* v1 rationale: peaks-cli itself has fewer than 5 completed refactor slices
|
|
14
|
+
* (per the design doc R3), so v1 cannot be calibrated yet. v1 ships the
|
|
15
|
+
* heuristic AND records every estimate to `.peaks/_runtime/<sid>/sc/
|
|
16
|
+
* slice-calibration/<rid>.json` so the next slice can use the prior data.
|
|
17
|
+
*
|
|
18
|
+
* LoC is intentionally kept as a primary input (not replaced). The user
|
|
19
|
+
* feedback that motivated the algorithm explicitly cited LoC as a useful
|
|
20
|
+
* signal -- the issue was the absence of a DAG on top, not the absence
|
|
21
|
+
* of LoC. The "complexity" field in nodes is unused for v1 because
|
|
22
|
+
* codegraph v0.7.10 does not emit it; v2 can re-enable once
|
|
23
|
+
* `.codegraph/codegraph.db` is read directly.
|
|
24
|
+
*/
|
|
25
|
+
import type { WorkEstimate } from './slice-decompose-types.js';
|
|
26
|
+
/**
|
|
27
|
+
* Compute a work-estimate envelope.
|
|
28
|
+
*
|
|
29
|
+
* @param complexitySum Sum of `complexity` of touched graph nodes. Pass 0
|
|
30
|
+
* when codegraph v0.7.10 (the field is not emitted).
|
|
31
|
+
* @param testCount Number of test files this slice adds/modifies.
|
|
32
|
+
* @param locSum Sum of LoC across the slice's primary files.
|
|
33
|
+
* @param sampleSize Number of historical slice records the calibrator
|
|
34
|
+
* could draw from. Drives confidence:
|
|
35
|
+
* >= 5 -> 'high' (percentile lookup would be used in v1.1)
|
|
36
|
+
* >= 1 -> 'medium' (some signal)
|
|
37
|
+
* == 0 -> 'low' (heuristic only)
|
|
38
|
+
*/
|
|
39
|
+
export declare function calibrate(complexitySum: number, testCount: number, locSum: number, sampleSize: number): WorkEstimate;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Calibration store for slice work-estimation.
|
|
3
|
+
*
|
|
4
|
+
* v1 (current): pure heuristic based on LoC + test count + complexity.
|
|
5
|
+
* confidence: 'low' until >= 5 historical slice records exist.
|
|
6
|
+
* formula: minutesP50 = 0.25 * locSum + 0.5 * testCount + 0.1 * complexitySum
|
|
7
|
+
* minutesP90 = minutesP50 * 1.6
|
|
8
|
+
*
|
|
9
|
+
* v1.1 (next): read `.peaks/_runtime/<sessionId>/qa/cycle-time.json` history; if
|
|
10
|
+
* sample size >= 5 for a complexity bucket, switch to percentile-based
|
|
11
|
+
* estimate with confidence 'high'.
|
|
12
|
+
*
|
|
13
|
+
* v1 rationale: peaks-cli itself has fewer than 5 completed refactor slices
|
|
14
|
+
* (per the design doc R3), so v1 cannot be calibrated yet. v1 ships the
|
|
15
|
+
* heuristic AND records every estimate to `.peaks/_runtime/<sid>/sc/
|
|
16
|
+
* slice-calibration/<rid>.json` so the next slice can use the prior data.
|
|
17
|
+
*
|
|
18
|
+
* LoC is intentionally kept as a primary input (not replaced). The user
|
|
19
|
+
* feedback that motivated the algorithm explicitly cited LoC as a useful
|
|
20
|
+
* signal -- the issue was the absence of a DAG on top, not the absence
|
|
21
|
+
* of LoC. The "complexity" field in nodes is unused for v1 because
|
|
22
|
+
* codegraph v0.7.10 does not emit it; v2 can re-enable once
|
|
23
|
+
* `.codegraph/codegraph.db` is read directly.
|
|
24
|
+
*/
|
|
25
|
+
/**
|
|
26
|
+
* Compute a work-estimate envelope.
|
|
27
|
+
*
|
|
28
|
+
* @param complexitySum Sum of `complexity` of touched graph nodes. Pass 0
|
|
29
|
+
* when codegraph v0.7.10 (the field is not emitted).
|
|
30
|
+
* @param testCount Number of test files this slice adds/modifies.
|
|
31
|
+
* @param locSum Sum of LoC across the slice's primary files.
|
|
32
|
+
* @param sampleSize Number of historical slice records the calibrator
|
|
33
|
+
* could draw from. Drives confidence:
|
|
34
|
+
* >= 5 -> 'high' (percentile lookup would be used in v1.1)
|
|
35
|
+
* >= 1 -> 'medium' (some signal)
|
|
36
|
+
* == 0 -> 'low' (heuristic only)
|
|
37
|
+
*/
|
|
38
|
+
export function calibrate(complexitySum, testCount, locSum, sampleSize) {
|
|
39
|
+
if (!Number.isFinite(complexitySum) || complexitySum < 0) {
|
|
40
|
+
throw new RangeError(`calibrate: complexitySum must be a non-negative finite number, got ${complexitySum}`);
|
|
41
|
+
}
|
|
42
|
+
if (!Number.isInteger(testCount) || testCount < 0) {
|
|
43
|
+
throw new RangeError(`calibrate: testCount must be a non-negative integer, got ${testCount}`);
|
|
44
|
+
}
|
|
45
|
+
if (!Number.isFinite(locSum) || locSum < 0) {
|
|
46
|
+
throw new RangeError(`calibrate: locSum must be a non-negative finite number, got ${locSum}`);
|
|
47
|
+
}
|
|
48
|
+
if (!Number.isInteger(sampleSize) || sampleSize < 0) {
|
|
49
|
+
throw new RangeError(`calibrate: sampleSize must be a non-negative integer, got ${sampleSize}`);
|
|
50
|
+
}
|
|
51
|
+
const minutesP50 = 0.25 * locSum + 0.5 * testCount + 0.1 * complexitySum;
|
|
52
|
+
const minutesP90 = minutesP50 * 1.6;
|
|
53
|
+
const confidence = sampleSize >= 5 ? 'high' : sampleSize >= 1 ? 'medium' : 'low';
|
|
54
|
+
const rationale = sampleSize === 0
|
|
55
|
+
? 'v1 heuristic: 0.25 min/LoC + 0.5 min/test + 0.1 min/complexity; confidence low because no historical sample'
|
|
56
|
+
: sampleSize < 5
|
|
57
|
+
? `v1 heuristic: ${sampleSize} historical sample(s) available; will switch to percentile lookup at sampleSize >= 5`
|
|
58
|
+
: `v1 heuristic with sampleSize ${sampleSize}; v1.1 will switch to percentile lookup`;
|
|
59
|
+
return {
|
|
60
|
+
complexitySum,
|
|
61
|
+
testCount,
|
|
62
|
+
locSum,
|
|
63
|
+
minutesP50: Math.round(minutesP50 * 10) / 10,
|
|
64
|
+
minutesP90: Math.round(minutesP90 * 10) / 10,
|
|
65
|
+
confidence,
|
|
66
|
+
rationale
|
|
67
|
+
};
|
|
68
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CrossPassEdgeMerger — Phase 2 of slice-topology-multipass (W2 T7).
|
|
3
|
+
*
|
|
4
|
+
* Produces `CrossPassEdge`s that span two adjacent decomposition passes by
|
|
5
|
+
* combining fast structural detectors with the `LLMArbitrator` fallback.
|
|
6
|
+
*
|
|
7
|
+
* Pipeline (per adjacent pass pair `(upper, lower)`):
|
|
8
|
+
* 1. Build a `path → upperSliceId` index of every file owned by `upper`.
|
|
9
|
+
* 2. For each lower slice, for each file in that slice:
|
|
10
|
+
* a. type-shares — `import type { ... } from '...'` resolves to an upper file.
|
|
11
|
+
* b. import-re-export — `export ... from '...'` resolves to an upper file.
|
|
12
|
+
* c. fixture-shares — file is a test file AND `from '...'` resolves to an upper file.
|
|
13
|
+
* Each match emits one `CrossPassEdge` with `confidence: 'structural'` and
|
|
14
|
+
* `arbitratedBy: null`.
|
|
15
|
+
* 3. If a lower slice emitted NO static edges AND `opts.llmRunner` is provided AND
|
|
16
|
+
* `llmCalls.length < opts.maxLlmCalls`, invoke `arbitrate(...)` once. On a
|
|
17
|
+
* successful `{"depends": true}` response, emit one edge with
|
|
18
|
+
* `kind: 'llm-arbitrated'`, `confidence: 'llm'`, and `arbitratedBy: <callId>`.
|
|
19
|
+
* 4. The budget is `opts.maxLlmCalls ?? 2`; once exhausted the merger returns
|
|
20
|
+
* what it has accumulated and never crashes.
|
|
21
|
+
*
|
|
22
|
+
* Pass 3 is reserved for future use; the type allows `passNumber: 3` but v1 input
|
|
23
|
+
* never contains it. Pairs are processed left-to-right so edges are deterministic.
|
|
24
|
+
*/
|
|
25
|
+
import type { CrossPassEdge, LlmConfidence, PassResult } from './slice-topology-types.js';
|
|
26
|
+
import type { LlmRunner } from '../audit/audit-goal-service.js';
|
|
27
|
+
export interface MergeResult {
|
|
28
|
+
readonly edges: readonly CrossPassEdge[];
|
|
29
|
+
readonly llmCalls: readonly LlmCallTrace[];
|
|
30
|
+
}
|
|
31
|
+
export interface MergeOptions {
|
|
32
|
+
readonly projectRoot: string;
|
|
33
|
+
readonly llmRunner?: LlmRunner;
|
|
34
|
+
readonly cacheDir?: string;
|
|
35
|
+
readonly maxLlmCalls?: number;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Full LLM-call trace captured by `runLlmFallback` for every arbitrator call.
|
|
39
|
+
* Mirrors v2 `LlmArbitration` minus the non-null `tokens` contract; the
|
|
40
|
+
* orchestrator coalesces a possible `null` `tokens` to a zeroed pair.
|
|
41
|
+
*/
|
|
42
|
+
export interface LlmCallTrace {
|
|
43
|
+
readonly callId: string;
|
|
44
|
+
readonly promptHash: string;
|
|
45
|
+
readonly input: string;
|
|
46
|
+
readonly output: string;
|
|
47
|
+
readonly confidence: LlmConfidence;
|
|
48
|
+
readonly tokens: {
|
|
49
|
+
readonly input: number;
|
|
50
|
+
readonly output: number;
|
|
51
|
+
} | null;
|
|
52
|
+
}
|
|
53
|
+
export declare function merge(passes: readonly PassResult[], opts: MergeOptions): Promise<MergeResult>;
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CrossPassEdgeMerger — Phase 2 of slice-topology-multipass (W2 T7).
|
|
3
|
+
*
|
|
4
|
+
* Produces `CrossPassEdge`s that span two adjacent decomposition passes by
|
|
5
|
+
* combining fast structural detectors with the `LLMArbitrator` fallback.
|
|
6
|
+
*
|
|
7
|
+
* Pipeline (per adjacent pass pair `(upper, lower)`):
|
|
8
|
+
* 1. Build a `path → upperSliceId` index of every file owned by `upper`.
|
|
9
|
+
* 2. For each lower slice, for each file in that slice:
|
|
10
|
+
* a. type-shares — `import type { ... } from '...'` resolves to an upper file.
|
|
11
|
+
* b. import-re-export — `export ... from '...'` resolves to an upper file.
|
|
12
|
+
* c. fixture-shares — file is a test file AND `from '...'` resolves to an upper file.
|
|
13
|
+
* Each match emits one `CrossPassEdge` with `confidence: 'structural'` and
|
|
14
|
+
* `arbitratedBy: null`.
|
|
15
|
+
* 3. If a lower slice emitted NO static edges AND `opts.llmRunner` is provided AND
|
|
16
|
+
* `llmCalls.length < opts.maxLlmCalls`, invoke `arbitrate(...)` once. On a
|
|
17
|
+
* successful `{"depends": true}` response, emit one edge with
|
|
18
|
+
* `kind: 'llm-arbitrated'`, `confidence: 'llm'`, and `arbitratedBy: <callId>`.
|
|
19
|
+
* 4. The budget is `opts.maxLlmCalls ?? 2`; once exhausted the merger returns
|
|
20
|
+
* what it has accumulated and never crashes.
|
|
21
|
+
*
|
|
22
|
+
* Pass 3 is reserved for future use; the type allows `passNumber: 3` but v1 input
|
|
23
|
+
* never contains it. Pairs are processed left-to-right so edges are deterministic.
|
|
24
|
+
*/
|
|
25
|
+
import { existsSync, mkdirSync, readFileSync } from 'node:fs';
|
|
26
|
+
import { createHash } from 'node:crypto';
|
|
27
|
+
import { dirname, isAbsolute, join, resolve } from 'node:path';
|
|
28
|
+
import { arbitrate } from './llm-arbitrator.js';
|
|
29
|
+
// ---------------------------------------------------------------------------
|
|
30
|
+
// Static-detection regexes
|
|
31
|
+
// ---------------------------------------------------------------------------
|
|
32
|
+
/** `import type { Foo } from '../upper/...'` and `import type * as Foo from '...'` */
|
|
33
|
+
const TYPE_IMPORT_RE = /import\s+type\s+(?:\{[^}]*\}|\*\s+as\s+\w+|\w+)\s+from\s+['"]([^'"]+)['"]/g;
|
|
34
|
+
/** `export { Bar } from '...'` / `export * from '...'` / `export type { Bar } from '...'`. */
|
|
35
|
+
const RE_EXPORT_RE = /\bexport\s+(?:type\s+)?(?:\*|\{[^}]*\})\s+from\s+['"]([^'"]+)['"]/g;
|
|
36
|
+
/** Any `from '...'` — used only for the fixture-shares rule (test files). */
|
|
37
|
+
const ANY_FROM_RE = /\bfrom\s+['"]([^'"]+)['"]/g;
|
|
38
|
+
const RESOLVE_EXTENSIONS = [
|
|
39
|
+
'',
|
|
40
|
+
'.ts',
|
|
41
|
+
'.tsx',
|
|
42
|
+
'.js',
|
|
43
|
+
'/index.ts',
|
|
44
|
+
'/index.tsx',
|
|
45
|
+
'/index.js'
|
|
46
|
+
];
|
|
47
|
+
// ---------------------------------------------------------------------------
|
|
48
|
+
// Entry point
|
|
49
|
+
// ---------------------------------------------------------------------------
|
|
50
|
+
export async function merge(passes, opts) {
|
|
51
|
+
const edges = [];
|
|
52
|
+
const llmCalls = [];
|
|
53
|
+
const maxLlm = opts.maxLlmCalls ?? 2;
|
|
54
|
+
const cacheDir = opts.cacheDir ?? join(opts.projectRoot, '.peaks/cache/arbitrator');
|
|
55
|
+
mkdirSync(cacheDir, { recursive: true });
|
|
56
|
+
for (let i = 0; i < passes.length - 1; i++) {
|
|
57
|
+
const upper = passes[i];
|
|
58
|
+
const lower = passes[i + 1];
|
|
59
|
+
// Index every upper file → the slice that owns it.
|
|
60
|
+
const upperFileToSlice = new Map();
|
|
61
|
+
for (const slice of upper.slices) {
|
|
62
|
+
for (const file of slice.files) {
|
|
63
|
+
upperFileToSlice.set(file, slice.id);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
for (const slice of lower.slices) {
|
|
67
|
+
const emittedBefore = edges.length;
|
|
68
|
+
for (const file of slice.files) {
|
|
69
|
+
detectStaticEdges(file, slice.id, upper.passNumber, lower.passNumber, upperFileToSlice, edges);
|
|
70
|
+
}
|
|
71
|
+
const hadStaticEdge = edges.length > emittedBefore;
|
|
72
|
+
// LLM fallback — only when this slice emitted nothing AND we still have budget.
|
|
73
|
+
if (!hadStaticEdge && opts.llmRunner && llmCalls.length < maxLlm) {
|
|
74
|
+
await runLlmFallback(upper, slice, upper.passNumber, lower.passNumber, cacheDir, maxLlm, opts.llmRunner, edges, llmCalls);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return { edges, llmCalls };
|
|
79
|
+
}
|
|
80
|
+
// ---------------------------------------------------------------------------
|
|
81
|
+
// Static detectors — append matched edges to `edges` in-place.
|
|
82
|
+
// ---------------------------------------------------------------------------
|
|
83
|
+
function detectStaticEdges(file, lowerSliceId, fromPass, toPass, upperFileToSlice, edges) {
|
|
84
|
+
if (!existsSync(file)) {
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
const content = readFileSync(file, 'utf8');
|
|
88
|
+
// 1. type-shares — `import type ... from '...'`
|
|
89
|
+
forEachMatch(TYPE_IMPORT_RE, content, (spec, evidence) => {
|
|
90
|
+
const resolved = resolveImport(file, spec);
|
|
91
|
+
const upperSliceId = upperFileToSlice.get(resolved);
|
|
92
|
+
if (upperSliceId !== undefined) {
|
|
93
|
+
edges.push(buildEdge({
|
|
94
|
+
fromPass,
|
|
95
|
+
toPass,
|
|
96
|
+
fromSliceId: upperSliceId,
|
|
97
|
+
toSliceId: lowerSliceId,
|
|
98
|
+
kind: 'type-shares',
|
|
99
|
+
confidence: 'structural',
|
|
100
|
+
evidence,
|
|
101
|
+
arbitratedBy: null,
|
|
102
|
+
}));
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
// 2. import-re-export — `export ... from '...'`
|
|
106
|
+
forEachMatch(RE_EXPORT_RE, content, (spec, evidence) => {
|
|
107
|
+
const resolved = resolveImport(file, spec);
|
|
108
|
+
const upperSliceId = upperFileToSlice.get(resolved);
|
|
109
|
+
if (upperSliceId !== undefined) {
|
|
110
|
+
edges.push(buildEdge({
|
|
111
|
+
fromPass,
|
|
112
|
+
toPass,
|
|
113
|
+
fromSliceId: upperSliceId,
|
|
114
|
+
toSliceId: lowerSliceId,
|
|
115
|
+
kind: 'import-re-export',
|
|
116
|
+
confidence: 'structural',
|
|
117
|
+
evidence,
|
|
118
|
+
arbitratedBy: null,
|
|
119
|
+
}));
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
// 3. fixture-shares — test file imports an upper module.
|
|
123
|
+
if (isTestFile(file)) {
|
|
124
|
+
forEachMatch(ANY_FROM_RE, content, (spec, evidence) => {
|
|
125
|
+
const resolved = resolveImport(file, spec);
|
|
126
|
+
const upperSliceId = upperFileToSlice.get(resolved);
|
|
127
|
+
if (upperSliceId !== undefined) {
|
|
128
|
+
edges.push(buildEdge({
|
|
129
|
+
fromPass,
|
|
130
|
+
toPass,
|
|
131
|
+
fromSliceId: upperSliceId,
|
|
132
|
+
toSliceId: lowerSliceId,
|
|
133
|
+
kind: 'fixture-shares',
|
|
134
|
+
confidence: 'structural',
|
|
135
|
+
evidence,
|
|
136
|
+
arbitratedBy: null,
|
|
137
|
+
}));
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
// ---------------------------------------------------------------------------
|
|
143
|
+
// LLM fallback
|
|
144
|
+
// ---------------------------------------------------------------------------
|
|
145
|
+
async function runLlmFallback(upper, lowerSlice, fromPass, toPass, cacheDir, maxCallsPerInvocation, llmRunner, edges, llmCalls) {
|
|
146
|
+
const upperSliceId = upper.slices[0]?.id ?? '<unknown-upper>';
|
|
147
|
+
const prompt = `Does upper slice "${upperSliceId}" depend on lower slice "${lowerSlice.id}"? ` +
|
|
148
|
+
`Reply with JSON of the shape {"depends": boolean, "reason": string}.`;
|
|
149
|
+
const promptHash = createHash('sha256').update(prompt).digest('hex');
|
|
150
|
+
const result = await arbitrate(prompt, {
|
|
151
|
+
cacheDir,
|
|
152
|
+
maxCallsPerInvocation,
|
|
153
|
+
perCallTimeoutMs: 5000,
|
|
154
|
+
llmRunner,
|
|
155
|
+
});
|
|
156
|
+
const isFailurePath = result.callId === 'budget-exhausted' ||
|
|
157
|
+
result.callId === 'timeout' ||
|
|
158
|
+
result.callId === 'error';
|
|
159
|
+
const confidence = isFailurePath ? 'low' : 'medium';
|
|
160
|
+
llmCalls.push({
|
|
161
|
+
callId: result.callId,
|
|
162
|
+
promptHash,
|
|
163
|
+
input: prompt,
|
|
164
|
+
output: result.output ?? '',
|
|
165
|
+
confidence,
|
|
166
|
+
tokens: result.tokens
|
|
167
|
+
});
|
|
168
|
+
if (result.output === null) {
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
const parsed = parseDependsReply(result.output);
|
|
172
|
+
if (parsed?.depends === true) {
|
|
173
|
+
edges.push(buildEdge({
|
|
174
|
+
fromPass,
|
|
175
|
+
toPass,
|
|
176
|
+
fromSliceId: upperSliceId,
|
|
177
|
+
toSliceId: lowerSlice.id,
|
|
178
|
+
kind: 'llm-arbitrated',
|
|
179
|
+
confidence: 'llm',
|
|
180
|
+
evidence: `llm:${result.callId}: ${parsed.reason}`,
|
|
181
|
+
arbitratedBy: result.callId,
|
|
182
|
+
}));
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
function buildEdge(fields) {
|
|
186
|
+
return {
|
|
187
|
+
fromPass: fields.fromPass,
|
|
188
|
+
toPass: fields.toPass,
|
|
189
|
+
fromSliceId: fields.fromSliceId,
|
|
190
|
+
toSliceId: fields.toSliceId,
|
|
191
|
+
kind: fields.kind,
|
|
192
|
+
confidence: fields.confidence,
|
|
193
|
+
evidence: fields.evidence,
|
|
194
|
+
arbitratedBy: fields.arbitratedBy,
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
function forEachMatch(re, content, cb) {
|
|
198
|
+
re.lastIndex = 0;
|
|
199
|
+
let match;
|
|
200
|
+
while ((match = re.exec(content)) !== null) {
|
|
201
|
+
const spec = match[1];
|
|
202
|
+
cb(spec, match[0]);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Resolve an import specifier relative to the importing file. Tries common
|
|
207
|
+
* TypeScript extensions and returns the first candidate that exists on disk;
|
|
208
|
+
* if none exist (e.g. the file is virtual / generated), falls back to the
|
|
209
|
+
* `.ts` form so the caller can still match against its own index.
|
|
210
|
+
*/
|
|
211
|
+
function resolveImport(fromFile, spec) {
|
|
212
|
+
const base = isAbsolute(spec)
|
|
213
|
+
? spec
|
|
214
|
+
: resolve(dirname(fromFile), spec);
|
|
215
|
+
for (const ext of RESOLVE_EXTENSIONS) {
|
|
216
|
+
const candidate = base + ext;
|
|
217
|
+
if (existsSync(candidate)) {
|
|
218
|
+
return candidate;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
return base + '.ts';
|
|
222
|
+
}
|
|
223
|
+
function isTestFile(filePath) {
|
|
224
|
+
return (filePath.endsWith('.test.ts') ||
|
|
225
|
+
filePath.endsWith('.test.tsx') ||
|
|
226
|
+
filePath.endsWith('.test.js') ||
|
|
227
|
+
/(^|[\\/])__tests__[\\/]/.test(filePath) ||
|
|
228
|
+
/(^|[\\/])tests[\\/]/.test(filePath));
|
|
229
|
+
}
|
|
230
|
+
function parseDependsReply(raw) {
|
|
231
|
+
// Accept either a pure JSON object or a fenced ```json { ... } ``` block.
|
|
232
|
+
const fence = raw.match(/```(?:json)?\s*([\s\S]*?)```/);
|
|
233
|
+
const candidate = fence ? fence[1] : raw;
|
|
234
|
+
try {
|
|
235
|
+
const obj = JSON.parse(candidate);
|
|
236
|
+
if (typeof obj.depends !== 'boolean')
|
|
237
|
+
return null;
|
|
238
|
+
return {
|
|
239
|
+
depends: obj.depends,
|
|
240
|
+
reason: typeof obj.reason === 'string' ? obj.reason : '',
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
catch { // TODO(g2): legacy silent catch — grace: 1 minor release (v2.14.0)
|
|
244
|
+
return null;
|
|
245
|
+
}
|
|
246
|
+
}
|