peaks-loop 4.0.0-beta.8 → 4.0.0-beta.9
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/CHANGELOG.md +45 -0
- package/bin/peaks.js +1 -1
- package/dist/cli/cli-helpers.d.ts +43 -0
- package/dist/cli/cli-helpers.js +86 -0
- package/dist/cli/commands/_cli-error-envelope.d.ts +19 -0
- package/dist/cli/commands/_cli-error-envelope.js +50 -0
- package/dist/cli/commands/adapter-commands-s2a.d.ts +34 -0
- package/dist/cli/commands/adapter-commands-s2a.js +92 -0
- package/dist/cli/commands/adapter-commands.d.ts +30 -0
- package/dist/cli/commands/adapter-commands.js +35 -0
- package/dist/cli/commands/agent-commands.d.ts +20 -0
- package/dist/cli/commands/agent-commands.js +48 -0
- package/dist/cli/commands/asset-commands.d.ts +45 -0
- package/dist/cli/commands/asset-commands.js +404 -0
- package/dist/cli/commands/audit-commands.d.ts +28 -0
- package/dist/cli/commands/audit-commands.js +437 -0
- package/dist/cli/commands/bee-commands.d.ts +26 -0
- package/dist/cli/commands/bee-commands.js +169 -0
- package/dist/cli/commands/capability-commands.d.ts +16 -0
- package/dist/cli/commands/capability-commands.js +45 -0
- package/dist/cli/commands/capability-worker-config-sc-commands.d.ts +3 -0
- package/dist/cli/commands/capability-worker-config-sc-commands.js +10 -0
- package/dist/cli/commands/classify-classify-commands.d.ts +19 -0
- package/dist/cli/commands/classify-classify-commands.js +151 -0
- package/dist/cli/commands/code-commands.d.ts +80 -0
- package/dist/cli/commands/code-commands.js +798 -0
- package/dist/cli/commands/code-review-commands.d.ts +34 -0
- package/dist/cli/commands/code-review-commands.js +83 -0
- package/dist/cli/commands/codegraph-commands.d.ts +3 -0
- package/dist/cli/commands/codegraph-commands.js +99 -0
- package/dist/cli/commands/compact-command.d.ts +21 -0
- package/dist/cli/commands/compact-command.js +252 -0
- package/dist/cli/commands/complexity-commands.d.ts +9 -0
- package/dist/cli/commands/complexity-commands.js +34 -0
- package/dist/cli/commands/config-commands.d.ts +3 -0
- package/dist/cli/commands/config-commands.js +220 -0
- package/dist/cli/commands/context-builder-commands.d.ts +11 -0
- package/dist/cli/commands/context-builder-commands.js +85 -0
- package/dist/cli/commands/context-commands.d.ts +21 -0
- package/dist/cli/commands/context-commands.js +254 -0
- package/dist/cli/commands/contract-commands.d.ts +26 -0
- package/dist/cli/commands/contract-commands.js +114 -0
- package/dist/cli/commands/core/artifacts-command.d.ts +3 -0
- package/dist/cli/commands/core/artifacts-command.js +62 -0
- package/dist/cli/commands/core/binding-commands.d.ts +3 -0
- package/dist/cli/commands/core/binding-commands.js +58 -0
- package/dist/cli/commands/core/doctor-command.d.ts +11 -0
- package/dist/cli/commands/core/doctor-command.js +204 -0
- package/dist/cli/commands/core/memory-command.d.ts +3 -0
- package/dist/cli/commands/core/memory-command.js +98 -0
- package/dist/cli/commands/core/profile-command.d.ts +3 -0
- package/dist/cli/commands/core/profile-command.js +9 -0
- package/dist/cli/commands/core/proxy-command.d.ts +3 -0
- package/dist/cli/commands/core/proxy-command.js +26 -0
- package/dist/cli/commands/core/session-command.d.ts +3 -0
- package/dist/cli/commands/core/session-command.js +241 -0
- package/dist/cli/commands/core/skill-command.d.ts +3 -0
- package/dist/cli/commands/core/skill-command.js +300 -0
- package/dist/cli/commands/core/standards-command.d.ts +3 -0
- package/dist/cli/commands/core/standards-command.js +95 -0
- package/dist/cli/commands/core-artifact-commands.d.ts +15 -0
- package/dist/cli/commands/core-artifact-commands.js +31 -0
- package/dist/cli/commands/dispatch-commands.d.ts +10 -0
- package/dist/cli/commands/dispatch-commands.js +351 -0
- package/dist/cli/commands/dispatch-from-dag.d.ts +3 -0
- package/dist/cli/commands/dispatch-from-dag.js +251 -0
- package/dist/cli/commands/doc-commands.d.ts +11 -0
- package/dist/cli/commands/doc-commands.js +65 -0
- package/dist/cli/commands/evolution-commands.d.ts +27 -0
- package/dist/cli/commands/evolution-commands.js +393 -0
- package/dist/cli/commands/feedback-commands.d.ts +18 -0
- package/dist/cli/commands/feedback-commands.js +145 -0
- package/dist/cli/commands/final-review-commands.d.ts +31 -0
- package/dist/cli/commands/final-review-commands.js +161 -0
- package/dist/cli/commands/fixture-commands.d.ts +32 -0
- package/dist/cli/commands/fixture-commands.js +91 -0
- package/dist/cli/commands/fork-commands.d.ts +16 -0
- package/dist/cli/commands/fork-commands.js +163 -0
- package/dist/cli/commands/gate-commands.d.ts +3 -0
- package/dist/cli/commands/gate-commands.js +117 -0
- package/dist/cli/commands/heartbeat-commands.d.ts +3 -0
- package/dist/cli/commands/heartbeat-commands.js +135 -0
- package/dist/cli/commands/hook-handle.d.ts +17 -0
- package/dist/cli/commands/hook-handle.js +157 -0
- package/dist/cli/commands/hooks-commands.d.ts +3 -0
- package/dist/cli/commands/hooks-commands.js +156 -0
- package/dist/cli/commands/ide-commands.d.ts +25 -0
- package/dist/cli/commands/ide-commands.js +42 -0
- package/dist/cli/commands/impact-commands.d.ts +15 -0
- package/dist/cli/commands/impact-commands.js +62 -0
- package/dist/cli/commands/job-commands.d.ts +3 -0
- package/dist/cli/commands/job-commands.js +289 -0
- package/dist/cli/commands/legacy-commands.d.ts +11 -0
- package/dist/cli/commands/legacy-commands.js +32 -0
- package/dist/cli/commands/log-commands.d.ts +17 -0
- package/dist/cli/commands/log-commands.js +64 -0
- package/dist/cli/commands/loop-commands.d.ts +27 -0
- package/dist/cli/commands/loop-commands.js +262 -0
- package/dist/cli/commands/loop-eval-commands.d.ts +20 -0
- package/dist/cli/commands/loop-eval-commands.js +526 -0
- package/dist/cli/commands/memory-commands.d.ts +23 -0
- package/dist/cli/commands/memory-commands.js +129 -0
- package/dist/cli/commands/migrate-1-4-1-command.d.ts +11 -0
- package/dist/cli/commands/migrate-1-4-1-command.js +34 -0
- package/dist/cli/commands/migrate-v2-10-to-v2-11-command.d.ts +20 -0
- package/dist/cli/commands/migrate-v2-10-to-v2-11-command.js +52 -0
- package/dist/cli/commands/mut-commands.d.ts +20 -0
- package/dist/cli/commands/mut-commands.js +239 -0
- package/dist/cli/commands/observability-commands.d.ts +22 -0
- package/dist/cli/commands/observability-commands.js +201 -0
- package/dist/cli/commands/openspec-commands.d.ts +3 -0
- package/dist/cli/commands/openspec-commands.js +237 -0
- package/dist/cli/commands/perf-audit-commands.d.ts +22 -0
- package/dist/cli/commands/perf-audit-commands.js +132 -0
- package/dist/cli/commands/perf-commands.d.ts +3 -0
- package/dist/cli/commands/perf-commands.js +41 -0
- package/dist/cli/commands/playwright-commands.d.ts +95 -0
- package/dist/cli/commands/playwright-commands.js +432 -0
- package/dist/cli/commands/polyrepo-commands.d.ts +37 -0
- package/dist/cli/commands/polyrepo-commands.js +155 -0
- package/dist/cli/commands/prd-blocks-commands.d.ts +18 -0
- package/dist/cli/commands/prd-blocks-commands.js +50 -0
- package/dist/cli/commands/prd-commands.d.ts +18 -0
- package/dist/cli/commands/prd-commands.js +141 -0
- package/dist/cli/commands/preferences-commands.d.ts +2 -0
- package/dist/cli/commands/preferences-commands.js +197 -0
- package/dist/cli/commands/project-commands.d.ts +3 -0
- package/dist/cli/commands/project-commands.js +253 -0
- package/dist/cli/commands/qa-business-review-commands.d.ts +17 -0
- package/dist/cli/commands/qa-business-review-commands.js +148 -0
- package/dist/cli/commands/qa-commands.d.ts +94 -0
- package/dist/cli/commands/qa-commands.js +271 -0
- package/dist/cli/commands/release-commands.d.ts +24 -0
- package/dist/cli/commands/release-commands.js +231 -0
- package/dist/cli/commands/request-commands.d.ts +3 -0
- package/dist/cli/commands/request-commands.js +548 -0
- package/dist/cli/commands/retrospective-commands.d.ts +12 -0
- package/dist/cli/commands/retrospective-commands.js +175 -0
- package/dist/cli/commands/reviewer-commands.d.ts +14 -0
- package/dist/cli/commands/reviewer-commands.js +64 -0
- package/dist/cli/commands/role-commands.d.ts +13 -0
- package/dist/cli/commands/role-commands.js +85 -0
- package/dist/cli/commands/runtime-commands.d.ts +52 -0
- package/dist/cli/commands/runtime-commands.js +150 -0
- package/dist/cli/commands/sc-commands.d.ts +3 -0
- package/dist/cli/commands/sc-commands.js +45 -0
- package/dist/cli/commands/scan-commands.d.ts +3 -0
- package/dist/cli/commands/scan-commands.js +445 -0
- package/dist/cli/commands/security-audit-commands.d.ts +23 -0
- package/dist/cli/commands/security-audit-commands.js +132 -0
- package/dist/cli/commands/sediment-commands.d.ts +80 -0
- package/dist/cli/commands/sediment-commands.js +649 -0
- package/dist/cli/commands/session-auto-compact-hook-command.d.ts +37 -0
- package/dist/cli/commands/session-auto-compact-hook-command.js +127 -0
- package/dist/cli/commands/session-checkpoint-command.d.ts +10 -0
- package/dist/cli/commands/session-checkpoint-command.js +100 -0
- package/dist/cli/commands/session-migrate-skill-name.d.ts +17 -0
- package/dist/cli/commands/session-migrate-skill-name.js +41 -0
- package/dist/cli/commands/session-resume-command.d.ts +11 -0
- package/dist/cli/commands/session-resume-command.js +83 -0
- package/dist/cli/commands/share-commands.d.ts +17 -0
- package/dist/cli/commands/share-commands.js +296 -0
- package/dist/cli/commands/skill-conformance-commands.d.ts +9 -0
- package/dist/cli/commands/skill-conformance-commands.js +39 -0
- package/dist/cli/commands/skill-loop-engineering-readiness-commands.d.ts +67 -0
- package/dist/cli/commands/skill-loop-engineering-readiness-commands.js +173 -0
- package/dist/cli/commands/skill-search-commands.d.ts +25 -0
- package/dist/cli/commands/skill-search-commands.js +68 -0
- package/dist/cli/commands/skill-visibility.d.ts +8 -0
- package/dist/cli/commands/skill-visibility.js +63 -0
- package/dist/cli/commands/slice-commands.d.ts +24 -0
- package/dist/cli/commands/slice-commands.js +492 -0
- package/dist/cli/commands/slice-integrate-commands.d.ts +11 -0
- package/dist/cli/commands/slice-integrate-commands.js +74 -0
- package/dist/cli/commands/slice-review-commands.d.ts +23 -0
- package/dist/cli/commands/slice-review-commands.js +162 -0
- package/dist/cli/commands/smoke-commands.d.ts +21 -0
- package/dist/cli/commands/smoke-commands.js +203 -0
- package/dist/cli/commands/sop-commands.d.ts +3 -0
- package/dist/cli/commands/sop-commands.js +215 -0
- package/dist/cli/commands/statusline-commands.d.ts +3 -0
- package/dist/cli/commands/statusline-commands.js +169 -0
- package/dist/cli/commands/sub-agent-commands.d.ts +22 -0
- package/dist/cli/commands/sub-agent-commands.js +19 -0
- package/dist/cli/commands/sub-agent-dispatch-guard.d.ts +55 -0
- package/dist/cli/commands/sub-agent-dispatch-guard.js +57 -0
- package/dist/cli/commands/sub-agent-shared.d.ts +99 -0
- package/dist/cli/commands/sub-agent-shared.js +67 -0
- package/dist/cli/commands/test-commands.d.ts +47 -0
- package/dist/cli/commands/test-commands.js +204 -0
- package/dist/cli/commands/understand-commands.d.ts +3 -0
- package/dist/cli/commands/understand-commands.js +148 -0
- package/dist/cli/commands/upgrade-commands.d.ts +23 -0
- package/dist/cli/commands/upgrade-commands.js +119 -0
- package/dist/cli/commands/user-touchpoint-commands.d.ts +18 -0
- package/dist/cli/commands/user-touchpoint-commands.js +78 -0
- package/dist/cli/commands/verdict-aggregate-command.d.ts +14 -0
- package/dist/cli/commands/verdict-aggregate-command.js +106 -0
- package/dist/cli/commands/worker-commands.d.ts +3 -0
- package/dist/cli/commands/worker-commands.js +52 -0
- package/dist/cli/commands/workflow-commands.d.ts +3 -0
- package/dist/cli/commands/workflow-commands.js +544 -0
- package/dist/cli/commands/workflow-plan-commands.d.ts +39 -0
- package/dist/cli/commands/workflow-plan-commands.js +163 -0
- package/dist/cli/commands/workspace/clean-command.d.ts +14 -0
- package/dist/cli/commands/workspace/clean-command.js +49 -0
- package/dist/cli/commands/workspace/helpers.d.ts +28 -0
- package/dist/cli/commands/workspace/helpers.js +87 -0
- package/dist/cli/commands/workspace/init-command.d.ts +139 -0
- package/dist/cli/commands/workspace/init-command.js +505 -0
- package/dist/cli/commands/workspace/migrate-command.d.ts +11 -0
- package/dist/cli/commands/workspace/migrate-command.js +91 -0
- package/dist/cli/commands/workspace/reconcile-command.d.ts +14 -0
- package/dist/cli/commands/workspace/reconcile-command.js +103 -0
- package/dist/cli/commands/workspace-commands.d.ts +18 -0
- package/dist/cli/commands/workspace-commands.js +50 -0
- package/dist/cli/index.d.ts +1 -0
- package/dist/cli/index.js +30 -0
- package/dist/cli/program.d.ts +5 -0
- package/dist/cli/program.js +408 -0
- package/dist/hooks/pre-tool-use-sub-agent.d.ts +28 -0
- package/dist/hooks/pre-tool-use-sub-agent.js +105 -0
- package/dist/lib/render/message-renderer.d.ts +20 -0
- package/dist/lib/render/message-renderer.js +80 -0
- package/dist/services/adapter/adapter-registry.d.ts +48 -0
- package/dist/services/adapter/adapter-registry.js +186 -0
- package/dist/services/adapter/adapter.d.ts +27 -0
- package/dist/services/adapter/adapter.js +5 -0
- package/dist/services/adapter/auto-adapter.d.ts +11 -0
- package/dist/services/adapter/auto-adapter.js +15 -0
- package/dist/services/adapter/claude-adapter.d.ts +14 -0
- package/dist/services/adapter/claude-adapter.js +40 -0
- package/dist/services/adapter/codex-adapter.d.ts +14 -0
- package/dist/services/adapter/codex-adapter.js +14 -0
- package/dist/services/adapter/copilot-adapter.d.ts +14 -0
- package/dist/services/adapter/copilot-adapter.js +14 -0
- package/dist/services/agent/ecc-agent-service.d.ts +47 -0
- package/dist/services/agent/ecc-agent-service.js +143 -0
- package/dist/services/artifacts/artifact-lint-service.d.ts +23 -0
- package/dist/services/artifacts/artifact-lint-service.js +99 -0
- package/dist/services/artifacts/artifact-prerequisites.d.ts +78 -0
- package/dist/services/artifacts/artifact-prerequisites.js +491 -0
- package/dist/services/artifacts/artifact-service.d.ts +43 -0
- package/dist/services/artifacts/artifact-service.js +98 -0
- package/dist/services/artifacts/artifact-templates.d.ts +30 -0
- package/dist/services/artifacts/artifact-templates.js +302 -0
- package/dist/services/artifacts/repair-cycle-service.d.ts +23 -0
- package/dist/services/artifacts/repair-cycle-service.js +52 -0
- package/dist/services/artifacts/request-artifact-service.d.ts +116 -0
- package/dist/services/artifacts/request-artifact-service.js +451 -0
- package/dist/services/artifacts/request-artifact-state-helpers.d.ts +51 -0
- package/dist/services/artifacts/request-artifact-state-helpers.js +114 -0
- package/dist/services/artifacts/workspace-service.d.ts +34 -0
- package/dist/services/artifacts/workspace-service.js +272 -0
- package/dist/services/audit/artifact-writer.d.ts +93 -0
- package/dist/services/audit/artifact-writer.js +303 -0
- package/dist/services/audit/audit-goal-service.d.ts +35 -0
- package/dist/services/audit/audit-goal-service.js +75 -0
- package/dist/services/audit/audit-goal-types.d.ts +40 -0
- package/dist/services/audit/audit-goal-types.js +15 -0
- package/dist/services/audit/backing-detector.d.ts +24 -0
- package/dist/services/audit/backing-detector.js +59 -0
- package/dist/services/audit/classifier.d.ts +38 -0
- package/dist/services/audit/classifier.js +134 -0
- package/dist/services/audit/decision-writer.d.ts +76 -0
- package/dist/services/audit/decision-writer.js +217 -0
- package/dist/services/audit/enforcers/active-skill-resolver.d.ts +29 -0
- package/dist/services/audit/enforcers/active-skill-resolver.js +71 -0
- package/dist/services/audit/enforcers/code-ban.d.ts +23 -0
- package/dist/services/audit/enforcers/code-ban.js +27 -0
- package/dist/services/audit/enforcers/design-draft-confirm.d.ts +24 -0
- package/dist/services/audit/enforcers/design-draft-confirm.js +58 -0
- package/dist/services/audit/enforcers/lint-audit-regression.d.ts +21 -0
- package/dist/services/audit/enforcers/lint-audit-regression.js +86 -0
- package/dist/services/audit/enforcers/lint-catalog-governance.d.ts +32 -0
- package/dist/services/audit/enforcers/lint-catalog-governance.js +48 -0
- package/dist/services/audit/enforcers/lint-cli-back.d.ts +16 -0
- package/dist/services/audit/enforcers/lint-cli-back.js +35 -0
- package/dist/services/audit/enforcers/lint-output-style.d.ts +11 -0
- package/dist/services/audit/enforcers/lint-output-style.js +94 -0
- package/dist/services/audit/enforcers/lint-reference-integrity.d.ts +6 -0
- package/dist/services/audit/enforcers/lint-reference-integrity.js +83 -0
- package/dist/services/audit/enforcers/lint-reference-shape.d.ts +30 -0
- package/dist/services/audit/enforcers/lint-reference-shape.js +272 -0
- package/dist/services/audit/enforcers/lint-style.d.ts +49 -0
- package/dist/services/audit/enforcers/lint-style.js +173 -0
- package/dist/services/audit/enforcers/lint-workflow-shape.d.ts +4 -0
- package/dist/services/audit/enforcers/lint-workflow-shape.js +100 -0
- package/dist/services/audit/enforcers/login-gate.d.ts +23 -0
- package/dist/services/audit/enforcers/login-gate.js +40 -0
- package/dist/services/audit/enforcers/mock-placement.d.ts +25 -0
- package/dist/services/audit/enforcers/mock-placement.js +48 -0
- package/dist/services/audit/enforcers/no-root-pollution.d.ts +21 -0
- package/dist/services/audit/enforcers/no-root-pollution.js +56 -0
- package/dist/services/audit/enforcers/pre-rd-scan.d.ts +22 -0
- package/dist/services/audit/enforcers/pre-rd-scan.js +23 -0
- package/dist/services/audit/enforcers/prototype-fidelity.d.ts +25 -0
- package/dist/services/audit/enforcers/prototype-fidelity.js +75 -0
- package/dist/services/audit/enforcers/resume-detection.d.ts +21 -0
- package/dist/services/audit/enforcers/resume-detection.js +52 -0
- package/dist/services/audit/enforcers/sub-agent-sid.d.ts +25 -0
- package/dist/services/audit/enforcers/sub-agent-sid.js +63 -0
- package/dist/services/audit/prose-ratio-calculator.d.ts +45 -0
- package/dist/services/audit/prose-ratio-calculator.js +52 -0
- package/dist/services/audit/red-line-catalog-p2-a.d.ts +21 -0
- package/dist/services/audit/red-line-catalog-p2-a.js +229 -0
- package/dist/services/audit/red-line-catalog-p2-b.d.ts +19 -0
- package/dist/services/audit/red-line-catalog-p2-b.js +225 -0
- package/dist/services/audit/red-line-catalog.d.ts +51 -0
- package/dist/services/audit/red-line-catalog.js +195 -0
- package/dist/services/audit/red-lines-service.d.ts +23 -0
- package/dist/services/audit/red-lines-service.js +464 -0
- package/dist/services/audit/scanners/openspec-scanner.d.ts +15 -0
- package/dist/services/audit/scanners/openspec-scanner.js +55 -0
- package/dist/services/audit/scanners/rules-tree-scanner.d.ts +16 -0
- package/dist/services/audit/scanners/rules-tree-scanner.js +56 -0
- package/dist/services/audit/scanners/skills-tree-scanner.d.ts +17 -0
- package/dist/services/audit/scanners/skills-tree-scanner.js +68 -0
- package/dist/services/audit/static-service.d.ts +60 -0
- package/dist/services/audit/static-service.js +130 -0
- package/dist/services/audit/types.d.ts +86 -0
- package/dist/services/audit/types.js +13 -0
- package/dist/services/audit-independent/perf-audit-service.d.ts +151 -0
- package/dist/services/audit-independent/perf-audit-service.js +316 -0
- package/dist/services/audit-independent/security-audit-service.d.ts +155 -0
- package/dist/services/audit-independent/security-audit-service.js +316 -0
- package/dist/services/classify/classify-service.d.ts +42 -0
- package/dist/services/classify/classify-service.js +122 -0
- package/dist/services/classify/classify-types.d.ts +79 -0
- package/dist/services/classify/classify-types.js +90 -0
- package/dist/services/code/auto-compact-orchestrator.d.ts +98 -0
- package/dist/services/code/auto-compact-orchestrator.js +343 -0
- package/dist/services/code/batch-heartbeat-poller.d.ts +51 -0
- package/dist/services/code/batch-heartbeat-poller.js +88 -0
- package/dist/services/code/dag-orchestrator.d.ts +128 -0
- package/dist/services/code/dag-orchestrator.js +304 -0
- package/dist/services/code/emit-handoff.d.ts +49 -0
- package/dist/services/code/emit-handoff.js +79 -0
- package/dist/services/code/job-shape-decision.d.ts +71 -0
- package/dist/services/code/job-shape-decision.js +151 -0
- package/dist/services/code/mode-gate.d.ts +163 -0
- package/dist/services/code/mode-gate.js +212 -0
- package/dist/services/code/post-compact-detector.d.ts +61 -0
- package/dist/services/code/post-compact-detector.js +240 -0
- package/dist/services/code/status-line-renderer.d.ts +34 -0
- package/dist/services/code/status-line-renderer.js +55 -0
- package/dist/services/code/step-08-gate.d.ts +90 -0
- package/dist/services/code/step-08-gate.js +136 -0
- package/dist/services/code/user-touchpoint-classifier.d.ts +44 -0
- package/dist/services/code/user-touchpoint-classifier.js +145 -0
- package/dist/services/code-review/ecc-bridge.d.ts +148 -0
- package/dist/services/code-review/ecc-bridge.js +242 -0
- package/dist/services/code-review/ocr-service.d.ts +129 -0
- package/dist/services/code-review/ocr-service.js +369 -0
- package/dist/services/codegraph/codegraph-process-runner.d.ts +2 -0
- package/dist/services/codegraph/codegraph-process-runner.js +93 -0
- package/dist/services/codegraph/codegraph-service.d.ts +43 -0
- package/dist/services/codegraph/codegraph-service.js +160 -0
- package/dist/services/compact/decision-tables.d.ts +66 -0
- package/dist/services/compact/decision-tables.js +127 -0
- package/dist/services/compact/request-transition-hook.d.ts +20 -0
- package/dist/services/compact/request-transition-hook.js +110 -0
- package/dist/services/compact/suggest-service.d.ts +74 -0
- package/dist/services/compact/suggest-service.js +203 -0
- package/dist/services/complexity/complexity-estimator.d.ts +34 -0
- package/dist/services/complexity/complexity-estimator.js +64 -0
- package/dist/services/config/config-migration.d.ts +45 -0
- package/dist/services/config/config-migration.js +154 -0
- package/dist/services/config/config-restore.d.ts +10 -0
- package/dist/services/config/config-restore.js +47 -0
- package/dist/services/config/config-rollback.d.ts +13 -0
- package/dist/services/config/config-rollback.js +26 -0
- package/dist/services/config/config-safety.d.ts +40 -0
- package/dist/services/config/config-safety.js +359 -0
- package/dist/services/config/config-service.d.ts +69 -0
- package/dist/services/config/config-service.js +814 -0
- package/dist/services/config/config-types.d.ts +119 -0
- package/dist/services/config/config-types.js +18 -0
- package/dist/services/config/model-routing.d.ts +66 -0
- package/dist/services/config/model-routing.js +105 -0
- package/dist/services/config/provider-service.d.ts +48 -0
- package/dist/services/config/provider-service.js +143 -0
- package/dist/services/config/proxy-service.d.ts +21 -0
- package/dist/services/config/proxy-service.js +44 -0
- package/dist/services/config/sidecar-store.d.ts +25 -0
- package/dist/services/config/sidecar-store.js +61 -0
- package/dist/services/config/workspace-state-service.d.ts +30 -0
- package/dist/services/config/workspace-state-service.js +142 -0
- package/dist/services/context/artifact-meta.d.ts +72 -0
- package/dist/services/context/artifact-meta.js +105 -0
- package/dist/services/context/auto-compact-dispatcher.d.ts +37 -0
- package/dist/services/context/auto-compact-dispatcher.js +240 -0
- package/dist/services/context/auto-compact-reader.d.ts +51 -0
- package/dist/services/context/auto-compact-reader.js +164 -0
- package/dist/services/context/auto-compact-types.d.ts +143 -0
- package/dist/services/context/auto-compact-types.js +36 -0
- package/dist/services/context/collector.d.ts +24 -0
- package/dist/services/context/collector.js +133 -0
- package/dist/services/context/context-builder.d.ts +30 -0
- package/dist/services/context/context-builder.js +78 -0
- package/dist/services/context/context-guard.d.ts +49 -0
- package/dist/services/context/context-guard.js +91 -0
- package/dist/services/context/context-schema.d.ts +415 -0
- package/dist/services/context/context-schema.js +73 -0
- package/dist/services/context/dispatch-context-guard.d.ts +27 -0
- package/dist/services/context/dispatch-context-guard.js +192 -0
- package/dist/services/context/doc-retriever.d.ts +26 -0
- package/dist/services/context/doc-retriever.js +51 -0
- package/dist/services/context/headroom-client.d.ts +34 -0
- package/dist/services/context/headroom-client.js +117 -0
- package/dist/services/context/headroom-fetcher.d.ts +6 -0
- package/dist/services/context/headroom-fetcher.js +28 -0
- package/dist/services/context/headroom-prefs.d.ts +46 -0
- package/dist/services/context/headroom-prefs.js +34 -0
- package/dist/services/context/index.d.ts +7 -0
- package/dist/services/context/index.js +6 -0
- package/dist/services/context/main-session-monitor.d.ts +89 -0
- package/dist/services/context/main-session-monitor.js +142 -0
- package/dist/services/context/renderer.d.ts +20 -0
- package/dist/services/context/renderer.js +30 -0
- package/dist/services/context/shared-channel.d.ts +93 -0
- package/dist/services/context/shared-channel.js +308 -0
- package/dist/services/context/threshold.d.ts +35 -0
- package/dist/services/context/threshold.js +76 -0
- package/dist/services/context/tokenizer.d.ts +12 -0
- package/dist/services/context/tokenizer.js +43 -0
- package/dist/services/context/types.d.ts +93 -0
- package/dist/services/context/types.js +9 -0
- package/dist/services/crystallization/crystallization-service.d.ts +239 -0
- package/dist/services/crystallization/crystallization-service.js +397 -0
- package/dist/services/crystallization/crystallization-store.d.ts +75 -0
- package/dist/services/crystallization/crystallization-store.js +193 -0
- package/dist/services/crystallization/crystallization-types.d.ts +313 -0
- package/dist/services/crystallization/crystallization-types.js +299 -0
- package/dist/services/crystallization/evidence-brief-builder.d.ts +237 -0
- package/dist/services/crystallization/evidence-brief-builder.js +240 -0
- package/dist/services/dashboard/project-dashboard-service.d.ts +91 -0
- package/dist/services/dashboard/project-dashboard-service.js +147 -0
- package/dist/services/dispatch/batch-counter.d.ts +27 -0
- package/dist/services/dispatch/batch-counter.js +102 -0
- package/dist/services/dispatch/contract-store.d.ts +63 -0
- package/dist/services/dispatch/contract-store.js +157 -0
- package/dist/services/dispatch/dispatch-record-writer.d.ts +138 -0
- package/dist/services/dispatch/dispatch-record-writer.js +460 -0
- package/dist/services/dispatch/heartbeat-truncator.d.ts +26 -0
- package/dist/services/dispatch/heartbeat-truncator.js +13 -0
- package/dist/services/dispatch/leak-detector.d.ts +11 -0
- package/dist/services/dispatch/leak-detector.js +72 -0
- package/dist/services/dispatch/slice-dag.d.ts +81 -0
- package/dist/services/dispatch/slice-dag.js +238 -0
- package/dist/services/dispatch/sub-agent-dispatcher.d.ts +239 -0
- package/dist/services/dispatch/sub-agent-dispatcher.js +382 -0
- package/dist/services/dispatch/test-tool-detection.d.ts +36 -0
- package/dist/services/dispatch/test-tool-detection.js +46 -0
- package/dist/services/doc/doc-generator.d.ts +38 -0
- package/dist/services/doc/doc-generator.js +122 -0
- package/dist/services/doctor/doctor-service.d.ts +149 -0
- package/dist/services/doctor/doctor-service.js +929 -0
- package/dist/services/evolution/evolution-service.d.ts +137 -0
- package/dist/services/evolution/evolution-service.js +281 -0
- package/dist/services/evolution/evolution-store.d.ts +57 -0
- package/dist/services/evolution/evolution-store.js +232 -0
- package/dist/services/evolution/evolution-types.d.ts +706 -0
- package/dist/services/evolution/evolution-types.js +286 -0
- package/dist/services/evolution/independent-evaluator-runner.d.ts +90 -0
- package/dist/services/evolution/independent-evaluator-runner.js +106 -0
- package/dist/services/evolution/regression-skeptic-runner.d.ts +64 -0
- package/dist/services/evolution/regression-skeptic-runner.js +113 -0
- package/dist/services/feedback/feedback-promotion-service.d.ts +123 -0
- package/dist/services/feedback/feedback-promotion-service.js +300 -0
- package/dist/services/filesystem/file-lock.d.ts +11 -0
- package/dist/services/filesystem/file-lock.js +152 -0
- package/dist/services/final-review/final-review-service.d.ts +12 -0
- package/dist/services/final-review/final-review-service.js +52 -0
- package/dist/services/final-review/final-review-types.d.ts +42 -0
- package/dist/services/final-review/final-review-types.js +18 -0
- package/dist/services/fixture/fixture-capture-service.d.ts +87 -0
- package/dist/services/fixture/fixture-capture-service.js +317 -0
- package/dist/services/fixture/fixture-sanitize-service.d.ts +117 -0
- package/dist/services/fixture/fixture-sanitize-service.js +161 -0
- package/dist/services/fixture/index.d.ts +8 -0
- package/dist/services/fixture/index.js +8 -0
- package/dist/services/fork/fork-sync-state.d.ts +85 -0
- package/dist/services/fork/fork-sync-state.js +130 -0
- package/dist/services/fuzzy-matching/fuzzy-match-service.d.ts +15 -0
- package/dist/services/fuzzy-matching/fuzzy-match-service.js +56 -0
- package/dist/services/fuzzy-matching/fzf-pick-service.d.ts +68 -0
- package/dist/services/fuzzy-matching/fzf-pick-service.js +158 -0
- package/dist/services/fuzzy-matching/types.d.ts +20 -0
- package/dist/services/fuzzy-matching/types.js +1 -0
- package/dist/services/handoff/handoff-parser.d.ts +28 -0
- package/dist/services/handoff/handoff-parser.js +69 -0
- package/dist/services/handoff/handoff-types.d.ts +39 -0
- package/dist/services/handoff/handoff-types.js +19 -0
- package/dist/services/handoff/handoff-writer.d.ts +23 -0
- package/dist/services/handoff/handoff-writer.js +30 -0
- package/dist/services/hooks/auto-compact-hook-install.d.ts +104 -0
- package/dist/services/hooks/auto-compact-hook-install.js +157 -0
- package/dist/services/hooks/output.d.ts +92 -0
- package/dist/services/hooks/output.js +111 -0
- package/dist/services/hooks/presence-marker-detector.d.ts +16 -0
- package/dist/services/hooks/presence-marker-detector.js +105 -0
- package/dist/services/ide/adapters/claude-code-adapter.d.ts +18 -0
- package/dist/services/ide/adapters/claude-code-adapter.js +103 -0
- package/dist/services/ide/adapters/codex-adapter.d.ts +46 -0
- package/dist/services/ide/adapters/codex-adapter.js +97 -0
- package/dist/services/ide/adapters/cursor-adapter.d.ts +36 -0
- package/dist/services/ide/adapters/cursor-adapter.js +84 -0
- package/dist/services/ide/adapters/hermes-adapter.d.ts +21 -0
- package/dist/services/ide/adapters/hermes-adapter.js +51 -0
- package/dist/services/ide/adapters/openclaw-adapter.d.ts +14 -0
- package/dist/services/ide/adapters/openclaw-adapter.js +42 -0
- package/dist/services/ide/adapters/trae-adapter.d.ts +42 -0
- package/dist/services/ide/adapters/trae-adapter.js +83 -0
- package/dist/services/ide/adapters/zcode-adapter.d.ts +40 -0
- package/dist/services/ide/adapters/zcode-adapter.js +220 -0
- package/dist/services/ide/current-model-detector.d.ts +14 -0
- package/dist/services/ide/current-model-detector.js +60 -0
- package/dist/services/ide/hook-protocol.d.ts +47 -0
- package/dist/services/ide/hook-protocol.js +74 -0
- package/dist/services/ide/hook-translator.d.ts +72 -0
- package/dist/services/ide/hook-translator.js +128 -0
- package/dist/services/ide/ide-detector.d.ts +10 -0
- package/dist/services/ide/ide-detector.js +19 -0
- package/dist/services/ide/ide-registry.d.ts +14 -0
- package/dist/services/ide/ide-registry.js +63 -0
- package/dist/services/ide/ide-types.d.ts +253 -0
- package/dist/services/ide/ide-types.js +2 -0
- package/dist/services/ide/resource-profile.d.ts +52 -0
- package/dist/services/ide/resource-profile.js +33 -0
- package/dist/services/ide/shared/atomic-json.d.ts +15 -0
- package/dist/services/ide/shared/atomic-json.js +58 -0
- package/dist/services/ide/shared/safe-path.d.ts +11 -0
- package/dist/services/ide/shared/safe-path.js +29 -0
- package/dist/services/impact/impact-scan-service.d.ts +66 -0
- package/dist/services/impact/impact-scan-service.js +197 -0
- package/dist/services/job/job-event-emitter.d.ts +30 -0
- package/dist/services/job/job-event-emitter.js +5 -0
- package/dist/services/job/job-orchestrator.d.ts +50 -0
- package/dist/services/job/job-orchestrator.js +104 -0
- package/dist/services/job/job-progress-store.d.ts +60 -0
- package/dist/services/job/job-progress-store.js +70 -0
- package/dist/services/job/job-resource-snapshot.d.ts +7 -0
- package/dist/services/job/job-resource-snapshot.js +75 -0
- package/dist/services/job/job-rotation.d.ts +17 -0
- package/dist/services/job/job-rotation.js +30 -0
- package/dist/services/job/job-state-store.d.ts +24 -0
- package/dist/services/job/job-state-store.js +60 -0
- package/dist/services/job/job-types.d.ts +444 -0
- package/dist/services/job/job-types.js +87 -0
- package/dist/services/job/subagent-job-wrapper.d.ts +35 -0
- package/dist/services/job/subagent-job-wrapper.js +30 -0
- package/dist/services/legacy/legacy-detector.d.ts +34 -0
- package/dist/services/legacy/legacy-detector.js +111 -0
- package/dist/services/log/log-commands-service.d.ts +54 -0
- package/dist/services/log/log-commands-service.js +83 -0
- package/dist/services/log/logger.d.ts +103 -0
- package/dist/services/log/logger.js +224 -0
- package/dist/services/log/redact.d.ts +32 -0
- package/dist/services/log/redact.js +89 -0
- package/dist/services/log/retention.d.ts +34 -0
- package/dist/services/log/retention.js +78 -0
- package/dist/services/loop/evaluator-dispatcher.d.ts +50 -0
- package/dist/services/loop/evaluator-dispatcher.js +552 -0
- package/dist/services/loop/loop-bee-relation-service.d.ts +107 -0
- package/dist/services/loop/loop-bee-relation-service.js +211 -0
- package/dist/services/loop/loop-bee-relation-store.d.ts +53 -0
- package/dist/services/loop/loop-bee-relation-store.js +130 -0
- package/dist/services/loop/loop-bee-relation-types.d.ts +118 -0
- package/dist/services/loop/loop-bee-relation-types.js +114 -0
- package/dist/services/loop/loop-release-service.d.ts +46 -0
- package/dist/services/loop/loop-release-service.js +66 -0
- package/dist/services/loop/loop-release-store.d.ts +55 -0
- package/dist/services/loop/loop-release-store.js +134 -0
- package/dist/services/loop/loop-release-types.d.ts +250 -0
- package/dist/services/loop/loop-release-types.js +162 -0
- package/dist/services/loop/monotonic-guard.d.ts +80 -0
- package/dist/services/loop/monotonic-guard.js +232 -0
- package/dist/services/loop/monotonic-runner.d.ts +58 -0
- package/dist/services/loop/monotonic-runner.js +231 -0
- package/dist/services/loop/run-driver.d.ts +70 -0
- package/dist/services/loop/run-driver.js +400 -0
- package/dist/services/loop/spec-service.d.ts +90 -0
- package/dist/services/loop/spec-service.js +497 -0
- package/dist/services/memory/llm-reranker.d.ts +174 -0
- package/dist/services/memory/llm-reranker.js +284 -0
- package/dist/services/memory/memory-search-service.d.ts +93 -0
- package/dist/services/memory/memory-search-service.js +117 -0
- package/dist/services/memory/project-context-service.d.ts +21 -0
- package/dist/services/memory/project-context-service.js +161 -0
- package/dist/services/memory/project-memory-service.d.ts +167 -0
- package/dist/services/memory/project-memory-service.js +817 -0
- package/dist/services/migrate-skill-name/migrate.d.ts +17 -0
- package/dist/services/migrate-skill-name/migrate.js +152 -0
- package/dist/services/migrate-skill-name/schema.d.ts +42 -0
- package/dist/services/migrate-skill-name/schema.js +25 -0
- package/dist/services/migration/v2-10-to-v2-11-service.d.ts +44 -0
- package/dist/services/migration/v2-10-to-v2-11-service.js +190 -0
- package/dist/services/migration/v2-10-to-v2-11-types.d.ts +41 -0
- package/dist/services/migration/v2-10-to-v2-11-types.js +23 -0
- package/dist/services/mode/bypass-tracker.d.ts +4 -0
- package/dist/services/mode/bypass-tracker.js +31 -0
- package/dist/services/mode/mode-enforcement.d.ts +14 -0
- package/dist/services/mode/mode-enforcement.js +84 -0
- package/dist/services/mut/assert-scanner.d.ts +6 -0
- package/dist/services/mut/assert-scanner.js +116 -0
- package/dist/services/mut/index.d.ts +8 -0
- package/dist/services/mut/index.js +7 -0
- package/dist/services/mut/mut-runner.d.ts +39 -0
- package/dist/services/mut/mut-runner.js +29 -0
- package/dist/services/mut/production-stryker.d.ts +2 -0
- package/dist/services/mut/production-stryker.js +75 -0
- package/dist/services/mut/report-builder.d.ts +11 -0
- package/dist/services/mut/report-builder.js +110 -0
- package/dist/services/mut/report-loader.d.ts +31 -0
- package/dist/services/mut/report-loader.js +78 -0
- package/dist/services/mut/thresholds.d.ts +21 -0
- package/dist/services/mut/thresholds.js +22 -0
- package/dist/services/mut/types.d.ts +336 -0
- package/dist/services/mut/types.js +59 -0
- package/dist/services/observability/aggregation.d.ts +64 -0
- package/dist/services/observability/aggregation.js +217 -0
- package/dist/services/observability/jsonl-store.d.ts +59 -0
- package/dist/services/observability/jsonl-store.js +120 -0
- package/dist/services/observability/observability-service.d.ts +95 -0
- package/dist/services/observability/observability-service.js +119 -0
- package/dist/services/observability/report-formatter.d.ts +42 -0
- package/dist/services/observability/report-formatter.js +156 -0
- package/dist/services/openspec/openspec-archive-service.d.ts +12 -0
- package/dist/services/openspec/openspec-archive-service.js +28 -0
- package/dist/services/openspec/openspec-bridge-service.d.ts +16 -0
- package/dist/services/openspec/openspec-bridge-service.js +76 -0
- package/dist/services/openspec/openspec-init-service.d.ts +23 -0
- package/dist/services/openspec/openspec-init-service.js +122 -0
- package/dist/services/openspec/openspec-propose-from-doctor-service.d.ts +31 -0
- package/dist/services/openspec/openspec-propose-from-doctor-service.js +95 -0
- package/dist/services/openspec/openspec-render-service.d.ts +38 -0
- package/dist/services/openspec/openspec-render-service.js +130 -0
- package/dist/services/openspec/openspec-scan-service.d.ts +6 -0
- package/dist/services/openspec/openspec-scan-service.js +123 -0
- package/dist/services/openspec/openspec-types.d.ts +39 -0
- package/dist/services/openspec/openspec-types.js +1 -0
- package/dist/services/openspec/openspec-validate-service.d.ts +27 -0
- package/dist/services/openspec/openspec-validate-service.js +77 -0
- package/dist/services/perf/perf-baseline-service.d.ts +70 -0
- package/dist/services/perf/perf-baseline-service.js +214 -0
- package/dist/services/polyrepo/polyrepo-dispatcher.d.ts +34 -0
- package/dist/services/polyrepo/polyrepo-dispatcher.js +119 -0
- package/dist/services/polyrepo/polyrepo-scanner.d.ts +9 -0
- package/dist/services/polyrepo/polyrepo-scanner.js +94 -0
- package/dist/services/polyrepo/polyrepo-service.d.ts +34 -0
- package/dist/services/polyrepo/polyrepo-service.js +49 -0
- package/dist/services/polyrepo/polyrepo-types.d.ts +55 -0
- package/dist/services/polyrepo/polyrepo-types.js +1 -0
- package/dist/services/prd/handoff-auto-regen.d.ts +22 -0
- package/dist/services/prd/handoff-auto-regen.js +73 -0
- package/dist/services/prd/handoff-service.d.ts +54 -0
- package/dist/services/prd/handoff-service.js +142 -0
- package/dist/services/prd/handoff-types.d.ts +64 -0
- package/dist/services/prd/handoff-types.js +22 -0
- package/dist/services/prd/prd-blocks-checker.d.ts +51 -0
- package/dist/services/prd/prd-blocks-checker.js +130 -0
- package/dist/services/prd/project-scan-bootstrap-service.d.ts +52 -0
- package/dist/services/prd/project-scan-bootstrap-service.js +445 -0
- package/dist/services/prd/project-scan-reader.d.ts +24 -0
- package/dist/services/prd/project-scan-reader.js +150 -0
- package/dist/services/prd/project-scan-sediment.d.ts +97 -0
- package/dist/services/prd/project-scan-sediment.js +445 -0
- package/dist/services/prd/project-scan-types.d.ts +66 -0
- package/dist/services/prd/project-scan-types.js +20 -0
- package/dist/services/preferences/preferences-service.d.ts +38 -0
- package/dist/services/preferences/preferences-service.js +198 -0
- package/dist/services/preferences/preferences-types.d.ts +148 -0
- package/dist/services/preferences/preferences-types.js +53 -0
- package/dist/services/profiles/profile-service.d.ts +6 -0
- package/dist/services/profiles/profile-service.js +19 -0
- package/dist/services/progress/progress-service.d.ts +125 -0
- package/dist/services/progress/progress-service.js +192 -0
- package/dist/services/providers/minimax-provider-service.d.ts +24 -0
- package/dist/services/providers/minimax-provider-service.js +143 -0
- package/dist/services/providers/minimax-worker-service.d.ts +21 -0
- package/dist/services/providers/minimax-worker-service.js +83 -0
- package/dist/services/proxy/proxy-service.d.ts +7 -0
- package/dist/services/proxy/proxy-service.js +31 -0
- package/dist/services/qa/browser-event-logger.d.ts +40 -0
- package/dist/services/qa/browser-event-logger.js +54 -0
- package/dist/services/qa/browser-restart-detector.d.ts +74 -0
- package/dist/services/qa/browser-restart-detector.js +138 -0
- package/dist/services/qa/browser-reuse-hint.d.ts +18 -0
- package/dist/services/qa/browser-reuse-hint.js +18 -0
- package/dist/services/qa/browser-wrapper-service.d.ts +37 -0
- package/dist/services/qa/browser-wrapper-service.js +88 -0
- package/dist/services/qa/qa-business-review-state.d.ts +47 -0
- package/dist/services/qa/qa-business-review-state.js +96 -0
- package/dist/services/rd/ast-gate.d.ts +19 -0
- package/dist/services/rd/ast-gate.js +71 -0
- package/dist/services/rd/impl.d.ts +9 -0
- package/dist/services/rd/impl.js +57 -0
- package/dist/services/rd/rd-service.d.ts +129 -0
- package/dist/services/rd/rd-service.js +441 -0
- package/dist/services/rd/reviewer-dispatch-policy.d.ts +122 -0
- package/dist/services/rd/reviewer-dispatch-policy.js +148 -0
- package/dist/services/rd/standards-diagnostic.d.ts +76 -0
- package/dist/services/rd/standards-diagnostic.js +166 -0
- package/dist/services/rd/strategic-stage.d.ts +4 -0
- package/dist/services/rd/strategic-stage.js +15 -0
- package/dist/services/rd/strategy.d.ts +13 -0
- package/dist/services/rd/strategy.js +60 -0
- package/dist/services/rd/tactical-stage.d.ts +33 -0
- package/dist/services/rd/tactical-stage.js +62 -0
- package/dist/services/rd/types.d.ts +252 -0
- package/dist/services/rd/types.js +47 -0
- package/dist/services/recommendations/capability-availability.d.ts +5 -0
- package/dist/services/recommendations/capability-availability.js +40 -0
- package/dist/services/recommendations/capability-map-service.d.ts +7 -0
- package/dist/services/recommendations/capability-map-service.js +131 -0
- package/dist/services/recommendations/capability-seed-items.d.ts +2 -0
- package/dist/services/recommendations/capability-seed-items.js +140 -0
- package/dist/services/recommendations/capability-seed-mappings.d.ts +2 -0
- package/dist/services/recommendations/capability-seed-mappings.js +54 -0
- package/dist/services/recommendations/capability-seed-sources.d.ts +2 -0
- package/dist/services/recommendations/capability-seed-sources.js +35 -0
- package/dist/services/recommendations/recommendation-service.d.ts +8 -0
- package/dist/services/recommendations/recommendation-service.js +106 -0
- package/dist/services/recommendations/recommendation-types.d.ts +129 -0
- package/dist/services/recommendations/recommendation-types.js +1 -0
- package/dist/services/recommendations/seed-capability-catalog.d.ts +3 -0
- package/dist/services/recommendations/seed-capability-catalog.js +3 -0
- package/dist/services/refactor/refactor-service.d.ts +9 -0
- package/dist/services/refactor/refactor-service.js +36 -0
- package/dist/services/release/release-state.d.ts +70 -0
- package/dist/services/release/release-state.js +140 -0
- package/dist/services/retrospective/retrospective-index.d.ts +37 -0
- package/dist/services/retrospective/retrospective-index.js +110 -0
- package/dist/services/retrospective/retrospective-search-service.d.ts +55 -0
- package/dist/services/retrospective/retrospective-search-service.js +107 -0
- package/dist/services/retrospective/retrospective-show.d.ts +40 -0
- package/dist/services/retrospective/retrospective-show.js +109 -0
- package/dist/services/reviewer/model-family.d.ts +18 -0
- package/dist/services/reviewer/model-family.js +70 -0
- package/dist/services/reviewer/providers/anthropic.d.ts +2 -0
- package/dist/services/reviewer/providers/anthropic.js +61 -0
- package/dist/services/reviewer/providers/ollama.d.ts +26 -0
- package/dist/services/reviewer/providers/ollama.js +38 -0
- package/dist/services/reviewer/providers/openai.d.ts +2 -0
- package/dist/services/reviewer/providers/openai.js +63 -0
- package/dist/services/reviewer/reviewer-config.d.ts +34 -0
- package/dist/services/reviewer/reviewer-config.js +100 -0
- package/dist/services/reviewer/reviewer-service.d.ts +56 -0
- package/dist/services/reviewer/reviewer-service.js +263 -0
- package/dist/services/reviewer/selection-strategies.d.ts +27 -0
- package/dist/services/reviewer/selection-strategies.js +53 -0
- package/dist/services/role/role-registry.d.ts +38 -0
- package/dist/services/role/role-registry.js +83 -0
- package/dist/services/runtime/runtime-detector.d.ts +15 -0
- package/dist/services/runtime/runtime-detector.js +62 -0
- package/dist/services/runtime/runtime-service.d.ts +59 -0
- package/dist/services/runtime/runtime-service.js +51 -0
- package/dist/services/runtime/vendor-adapter.d.ts +59 -0
- package/dist/services/runtime/vendor-adapter.js +1 -0
- package/dist/services/runtime/vendors/claude-code.d.ts +7 -0
- package/dist/services/runtime/vendors/claude-code.js +39 -0
- package/dist/services/runtime/vendors/codex.d.ts +7 -0
- package/dist/services/runtime/vendors/codex.js +43 -0
- package/dist/services/runtime/vendors/copilot.d.ts +7 -0
- package/dist/services/runtime/vendors/copilot.js +40 -0
- package/dist/services/sc/index.d.ts +1 -0
- package/dist/services/sc/index.js +1 -0
- package/dist/services/sc/sc-service.d.ts +131 -0
- package/dist/services/sc/sc-service.js +552 -0
- package/dist/services/scan/acceptance-coverage-service.d.ts +42 -0
- package/dist/services/scan/acceptance-coverage-service.js +140 -0
- package/dist/services/scan/api-surface-service.d.ts +69 -0
- package/dist/services/scan/api-surface-service.js +239 -0
- package/dist/services/scan/archetype-service.d.ts +5 -0
- package/dist/services/scan/archetype-service.js +254 -0
- package/dist/services/scan/diff-scope-service.d.ts +40 -0
- package/dist/services/scan/diff-scope-service.js +198 -0
- package/dist/services/scan/existing-system-service.d.ts +7 -0
- package/dist/services/scan/existing-system-service.js +300 -0
- package/dist/services/scan/file-size-scan.d.ts +23 -0
- package/dist/services/scan/file-size-scan.js +68 -0
- package/dist/services/scan/karpathy-service.d.ts +60 -0
- package/dist/services/scan/karpathy-service.js +228 -0
- package/dist/services/scan/libraries-service.d.ts +24 -0
- package/dist/services/scan/libraries-service.js +419 -0
- package/dist/services/scan/libraries-types.d.ts +59 -0
- package/dist/services/scan/libraries-types.js +9 -0
- package/dist/services/scan/orphan-service.d.ts +76 -0
- package/dist/services/scan/orphan-service.js +538 -0
- package/dist/services/scan/scan-types.d.ts +59 -0
- package/dist/services/scan/scan-types.js +1 -0
- package/dist/services/scan/type-sanity-service.d.ts +23 -0
- package/dist/services/scan/type-sanity-service.js +116 -0
- package/dist/services/security/safe-settings-path.d.ts +12 -0
- package/dist/services/security/safe-settings-path.js +104 -0
- package/dist/services/sediment/dispose-confirm.d.ts +9 -0
- package/dist/services/sediment/dispose-confirm.js +5 -0
- package/dist/services/sediment/json-schema.d.ts +247 -0
- package/dist/services/sediment/json-schema.js +26 -0
- package/dist/services/sediment/manifest-lint.d.ts +13 -0
- package/dist/services/sediment/manifest-lint.js +11 -0
- package/dist/services/sediment/pool-paths.d.ts +22 -0
- package/dist/services/sediment/pool-paths.js +25 -0
- package/dist/services/sediment/pool-read.d.ts +20 -0
- package/dist/services/sediment/pool-read.js +73 -0
- package/dist/services/sediment/pool-rebuild-index.d.ts +15 -0
- package/dist/services/sediment/pool-rebuild-index.js +28 -0
- package/dist/services/sediment/pool-write.d.ts +14 -0
- package/dist/services/sediment/pool-write.js +25 -0
- package/dist/services/sediment/promotion-gate.d.ts +12 -0
- package/dist/services/sediment/promotion-gate.js +20 -0
- package/dist/services/sediment/types.d.ts +52 -0
- package/dist/services/sediment/types.js +1 -0
- package/dist/services/session/binding-status-service.d.ts +56 -0
- package/dist/services/session/binding-status-service.js +106 -0
- package/dist/services/session/binding-store.d.ts +161 -0
- package/dist/services/session/binding-store.js +509 -0
- package/dist/services/session/caller-binding-service.d.ts +70 -0
- package/dist/services/session/caller-binding-service.js +148 -0
- package/dist/services/session/caller-id-types.d.ts +77 -0
- package/dist/services/session/caller-id-types.js +46 -0
- package/dist/services/session/getSessionDir.d.ts +1 -0
- package/dist/services/session/getSessionDir.js +27 -0
- package/dist/services/session/index.d.ts +6 -0
- package/dist/services/session/index.js +7 -0
- package/dist/services/session/platform-fallbacks.d.ts +31 -0
- package/dist/services/session/platform-fallbacks.js +35 -0
- package/dist/services/session/resolve-caller-id.d.ts +57 -0
- package/dist/services/session/resolve-caller-id.js +88 -0
- package/dist/services/session/session-binding-bridge.d.ts +76 -0
- package/dist/services/session/session-binding-bridge.js +247 -0
- package/dist/services/session/session-checkpoint-service.d.ts +57 -0
- package/dist/services/session/session-checkpoint-service.js +143 -0
- package/dist/services/session/session-manager.d.ts +168 -0
- package/dist/services/session/session-manager.js +502 -0
- package/dist/services/session/session-resume-service.d.ts +25 -0
- package/dist/services/session/session-resume-service.js +101 -0
- package/dist/services/share/bundle-reader.d.ts +100 -0
- package/dist/services/share/bundle-reader.js +434 -0
- package/dist/services/share/bundle-types.d.ts +392 -0
- package/dist/services/share/bundle-types.js +318 -0
- package/dist/services/share/bundle-writer.d.ts +97 -0
- package/dist/services/share/bundle-writer.js +429 -0
- package/dist/services/share/run-state-contract.d.ts +133 -0
- package/dist/services/share/run-state-contract.js +138 -0
- package/dist/services/signal/cancel-handler.d.ts +14 -0
- package/dist/services/signal/cancel-handler.js +76 -0
- package/dist/services/skill/resume-detector.d.ts +54 -0
- package/dist/services/skill/resume-detector.js +334 -0
- package/dist/services/skill/skill-scheduler.d.ts +40 -0
- package/dist/services/skill/skill-scheduler.js +53 -0
- package/dist/services/skill/skill-search-service.d.ts +88 -0
- package/dist/services/skill/skill-search-service.js +228 -0
- package/dist/services/skillhub/release-diff.d.ts +18 -0
- package/dist/services/skillhub/release-diff.js +38 -0
- package/dist/services/skillhub/release-export.d.ts +8 -0
- package/dist/services/skillhub/release-export.js +31 -0
- package/dist/services/skillhub/release-gc-blobs.d.ts +13 -0
- package/dist/services/skillhub/release-gc-blobs.js +32 -0
- package/dist/services/skillhub/release-import.d.ts +7 -0
- package/dist/services/skillhub/release-import.js +64 -0
- package/dist/services/skillhub/release-retain.d.ts +23 -0
- package/dist/services/skillhub/release-retain.js +94 -0
- package/dist/services/skillhub/sqlite-store.d.ts +22 -0
- package/dist/services/skillhub/sqlite-store.js +63 -0
- package/dist/services/skillhub/tar-runtime.d.ts +21 -0
- package/dist/services/skillhub/tar-runtime.js +91 -0
- package/dist/services/skillhub/types.d.ts +115 -0
- package/dist/services/skillhub/types.js +1 -0
- package/dist/services/skills/hooks-settings-service.d.ts +137 -0
- package/dist/services/skills/hooks-settings-service.js +396 -0
- package/dist/services/skills/skill-conformance-service.d.ts +40 -0
- package/dist/services/skills/skill-conformance-service.js +139 -0
- package/dist/services/skills/skill-presence-service.d.ts +158 -0
- package/dist/services/skills/skill-presence-service.js +474 -0
- package/dist/services/skills/skill-registry.d.ts +17 -0
- package/dist/services/skills/skill-registry.js +67 -0
- package/dist/services/skills/skill-runbook-service.d.ts +11 -0
- package/dist/services/skills/skill-runbook-service.js +128 -0
- package/dist/services/skills/skill-statusline-renderer.d.ts +6 -0
- package/dist/services/skills/skill-statusline-renderer.js +55 -0
- package/dist/services/skills/skill-statusline-service.d.ts +24 -0
- package/dist/services/skills/skill-statusline-service.js +110 -0
- package/dist/services/skills/statusline-settings-service.d.ts +59 -0
- package/dist/services/skills/statusline-settings-service.js +141 -0
- package/dist/services/skills/sync-service.d.ts +86 -0
- package/dist/services/skills/sync-service.js +271 -0
- package/dist/services/slice/calibration-store.d.ts +39 -0
- package/dist/services/slice/calibration-store.js +68 -0
- package/dist/services/slice/cross-pass-edge-merger.d.ts +53 -0
- package/dist/services/slice/cross-pass-edge-merger.js +246 -0
- package/dist/services/slice/granularity-decider.d.ts +37 -0
- package/dist/services/slice/granularity-decider.js +40 -0
- package/dist/services/slice/llm-arbitrator.d.ts +35 -0
- package/dist/services/slice/llm-arbitrator.js +63 -0
- package/dist/services/slice/multi-pass-orchestrator.d.ts +67 -0
- package/dist/services/slice/multi-pass-orchestrator.js +225 -0
- package/dist/services/slice/schema-router.d.ts +44 -0
- package/dist/services/slice/schema-router.js +61 -0
- package/dist/services/slice/slice-archive-service.d.ts +20 -0
- package/dist/services/slice/slice-archive-service.js +111 -0
- package/dist/services/slice/slice-benchmark-service.d.ts +19 -0
- package/dist/services/slice/slice-benchmark-service.js +60 -0
- package/dist/services/slice/slice-check-service.d.ts +2 -0
- package/dist/services/slice/slice-check-service.js +459 -0
- package/dist/services/slice/slice-check-types.d.ts +104 -0
- package/dist/services/slice/slice-check-types.js +28 -0
- package/dist/services/slice/slice-decompose-runners.d.ts +23 -0
- package/dist/services/slice/slice-decompose-runners.js +174 -0
- package/dist/services/slice/slice-decompose-service.d.ts +24 -0
- package/dist/services/slice/slice-decompose-service.js +532 -0
- package/dist/services/slice/slice-decompose-types.d.ts +263 -0
- package/dist/services/slice/slice-decompose-types.js +30 -0
- package/dist/services/slice/slice-integration.d.ts +43 -0
- package/dist/services/slice/slice-integration.js +106 -0
- package/dist/services/slice/slice-pick-service.d.ts +32 -0
- package/dist/services/slice/slice-pick-service.js +75 -0
- package/dist/services/slice/slice-review-state.d.ts +70 -0
- package/dist/services/slice/slice-review-state.js +109 -0
- package/dist/services/slice/slice-topology-types.d.ts +115 -0
- package/dist/services/slice/slice-topology-types.js +20 -0
- package/dist/services/smoke/smoke-paths-state.d.ts +73 -0
- package/dist/services/smoke/smoke-paths-state.js +117 -0
- package/dist/services/sop/gate-enforce-service.d.ts +33 -0
- package/dist/services/sop/gate-enforce-service.js +168 -0
- package/dist/services/sop/sop-advance-service.d.ts +74 -0
- package/dist/services/sop/sop-advance-service.js +115 -0
- package/dist/services/sop/sop-check-service.d.ts +45 -0
- package/dist/services/sop/sop-check-service.js +181 -0
- package/dist/services/sop/sop-paths.d.ts +62 -0
- package/dist/services/sop/sop-paths.js +92 -0
- package/dist/services/sop/sop-registry-service.d.ts +46 -0
- package/dist/services/sop/sop-registry-service.js +89 -0
- package/dist/services/sop/sop-service.d.ts +55 -0
- package/dist/services/sop/sop-service.js +222 -0
- package/dist/services/sop/sop-types.d.ts +95 -0
- package/dist/services/sop/sop-types.js +11 -0
- package/dist/services/standards/ide-aware-standards-service.d.ts +94 -0
- package/dist/services/standards/ide-aware-standards-service.js +91 -0
- package/dist/services/standards/loop-engineering-lint.d.ts +38 -0
- package/dist/services/standards/loop-engineering-lint.js +101 -0
- package/dist/services/standards/loop-engineering-readiness-lint.d.ts +111 -0
- package/dist/services/standards/loop-engineering-readiness-lint.js +248 -0
- package/dist/services/standards/migrate-claude-rules-service.d.ts +19 -0
- package/dist/services/standards/migrate-claude-rules-service.js +214 -0
- package/dist/services/standards/migrate-service.d.ts +63 -0
- package/dist/services/standards/migrate-service.js +193 -0
- package/dist/services/standards/missing-standards-detector.d.ts +81 -0
- package/dist/services/standards/missing-standards-detector.js +139 -0
- package/dist/services/standards/project-context.d.ts +24 -0
- package/dist/services/standards/project-context.js +314 -0
- package/dist/services/standards/project-standards-service.d.ts +114 -0
- package/dist/services/standards/project-standards-service.js +693 -0
- package/dist/services/tech/tech-service.d.ts +69 -0
- package/dist/services/tech/tech-service.js +299 -0
- package/dist/services/test-cache/test-cache-service.d.ts +70 -0
- package/dist/services/test-cache/test-cache-service.js +175 -0
- package/dist/services/understand/hybrid-types.d.ts +32 -0
- package/dist/services/understand/hybrid-types.js +1 -0
- package/dist/services/understand/understand-hybrid-service.d.ts +10 -0
- package/dist/services/understand/understand-hybrid-service.js +100 -0
- package/dist/services/understand/understand-scan-service.d.ts +28 -0
- package/dist/services/understand/understand-scan-service.js +170 -0
- package/dist/services/understand/understand-types.d.ts +50 -0
- package/dist/services/understand/understand-types.js +1 -0
- package/dist/services/upgrade/1x-detector-service.d.ts +7 -0
- package/dist/services/upgrade/1x-detector-service.js +94 -0
- package/dist/services/upgrade/gitignore-migrate-service.d.ts +56 -0
- package/dist/services/upgrade/gitignore-migrate-service.js +170 -0
- package/dist/services/upgrade/upgrade-service.d.ts +81 -0
- package/dist/services/upgrade/upgrade-service.js +403 -0
- package/dist/services/verdict/envelopes.d.ts +93 -0
- package/dist/services/verdict/envelopes.js +349 -0
- package/dist/services/verdict/verdict-aggregator.d.ts +94 -0
- package/dist/services/verdict/verdict-aggregator.js +112 -0
- package/dist/services/workflow/artifact-paths.d.ts +59 -0
- package/dist/services/workflow/artifact-paths.js +166 -0
- package/dist/services/workflow/autonomous-resume-writer.d.ts +16 -0
- package/dist/services/workflow/autonomous-resume-writer.js +170 -0
- package/dist/services/workflow/pipeline-verify-service.d.ts +90 -0
- package/dist/services/workflow/pipeline-verify-service.js +449 -0
- package/dist/services/workflow/plan-reader.d.ts +29 -0
- package/dist/services/workflow/plan-reader.js +174 -0
- package/dist/services/workflow/plan-refresher.d.ts +32 -0
- package/dist/services/workflow/plan-refresher.js +353 -0
- package/dist/services/workflow/plan-trigger-detector.d.ts +55 -0
- package/dist/services/workflow/plan-trigger-detector.js +142 -0
- package/dist/services/workflow/workflow-autonomous-resume-helpers.d.ts +19 -0
- package/dist/services/workflow/workflow-autonomous-resume-helpers.js +300 -0
- package/dist/services/workflow/workflow-autonomous-service.d.ts +100 -0
- package/dist/services/workflow/workflow-autonomous-service.js +306 -0
- package/dist/services/workflow/workflow-loader.d.ts +63 -0
- package/dist/services/workflow/workflow-loader.js +168 -0
- package/dist/services/workflow/workflow-router-service.d.ts +85 -0
- package/dist/services/workflow/workflow-router-service.js +233 -0
- package/dist/services/workflow/workflow-skip-service.d.ts +106 -0
- package/dist/services/workflow/workflow-skip-service.js +209 -0
- package/dist/services/workflow/workflow-spec.d.ts +116 -0
- package/dist/services/workflow/workflow-spec.js +431 -0
- package/dist/services/workflow/workflow-state-store.d.ts +27 -0
- package/dist/services/workflow/workflow-state-store.js +95 -0
- package/dist/services/workspace/claude-settings-template.d.ts +101 -0
- package/dist/services/workspace/claude-settings-template.js +254 -0
- package/dist/services/workspace/migrate-1-4-1-service.d.ts +44 -0
- package/dist/services/workspace/migrate-1-4-1-service.js +195 -0
- package/dist/services/workspace/migrate-service.d.ts +2 -0
- package/dist/services/workspace/migrate-service.js +613 -0
- package/dist/services/workspace/migrate-types.d.ts +127 -0
- package/dist/services/workspace/migrate-types.js +21 -0
- package/dist/services/workspace/reconcile-service.d.ts +188 -0
- package/dist/services/workspace/reconcile-service.js +683 -0
- package/dist/services/workspace/reconcile-types.d.ts +130 -0
- package/dist/services/workspace/reconcile-types.js +13 -0
- package/dist/services/workspace/sid-naming-guard.d.ts +17 -0
- package/dist/services/workspace/sid-naming-guard.js +34 -0
- package/dist/services/workspace/templates/project-scan/audit-output-schema.md +100 -0
- package/dist/services/workspace/templates/project-scan/business-knowledge.md +44 -0
- package/dist/services/workspace/templates/project-scan/index.d.ts +34 -0
- package/dist/services/workspace/templates/project-scan/index.js +60 -0
- package/dist/services/workspace/templates/project-scan/perf-template.md +109 -0
- package/dist/services/workspace/templates/project-scan/security-template.md +99 -0
- package/dist/services/workspace/workspace-claude-settings-materializer.d.ts +45 -0
- package/dist/services/workspace/workspace-claude-settings-materializer.js +194 -0
- package/dist/services/workspace/workspace-clean-service.d.ts +28 -0
- package/dist/services/workspace/workspace-clean-service.js +46 -0
- package/dist/services/workspace/workspace-service.d.ts +177 -0
- package/dist/services/workspace/workspace-service.js +432 -0
- package/dist/services/workspace/workspace-state-service.d.ts +7 -0
- package/dist/services/workspace/workspace-state-service.js +43 -0
- package/dist/shared/format-md-compact.d.ts +32 -0
- package/dist/shared/format-md-compact.js +297 -0
- package/dist/shared/frontmatter.d.ts +6 -0
- package/dist/shared/frontmatter.js +165 -0
- package/dist/shared/fs-utils.d.ts +4 -0
- package/dist/shared/fs-utils.js +16 -0
- package/dist/shared/fs.d.ts +4 -0
- package/dist/shared/fs.js +26 -0
- package/dist/shared/incrementing-number.d.ts +23 -0
- package/dist/shared/incrementing-number.js +68 -0
- package/dist/shared/json-schema-mini.d.ts +10 -0
- package/dist/shared/json-schema-mini.js +113 -0
- package/dist/shared/path-safety.d.ts +21 -0
- package/dist/shared/path-safety.js +54 -0
- package/dist/shared/path-utils.d.ts +13 -0
- package/dist/shared/path-utils.js +56 -0
- package/dist/shared/paths.d.ts +6 -0
- package/dist/shared/paths.js +50 -0
- package/dist/shared/planner-response.d.ts +21 -0
- package/dist/shared/planner-response.js +26 -0
- package/dist/shared/platform.d.ts +6 -0
- package/dist/shared/platform.js +11 -0
- package/dist/shared/process.d.ts +5 -0
- package/dist/shared/process.js +12 -0
- package/dist/shared/result.d.ts +22 -0
- package/dist/shared/result.js +46 -0
- package/dist/shared/stale-policy.d.ts +67 -0
- package/dist/shared/stale-policy.js +85 -0
- package/dist/shared/version.d.ts +1 -0
- package/dist/shared/version.js +1 -0
- package/dist/skills/peaks-maker/index.d.ts +5 -0
- package/dist/skills/peaks-maker/index.js +32 -0
- package/package.json +5 -4
- package/scripts/copy-templates.mjs +1 -1
|
@@ -0,0 +1,693 @@
|
|
|
1
|
+
import { closeSync, constants, existsSync, lstatSync, mkdirSync, openSync, readdirSync, realpathSync, readFileSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { homedir as osHomedir } from 'node:os';
|
|
3
|
+
import { dirname, isAbsolute, join, relative, resolve } from 'node:path';
|
|
4
|
+
import { buildToolLabel, componentLibraryLabel, cssFrameworkLabel, detectProjectContext } from './project-context.js';
|
|
5
|
+
export class ProjectStandardsWriteTargetError extends Error {
|
|
6
|
+
code = 'PROJECT_STANDARDS_WRITE_TARGET_OUTSIDE_ROOT';
|
|
7
|
+
filePath;
|
|
8
|
+
projectRoot;
|
|
9
|
+
reason;
|
|
10
|
+
constructor(input) {
|
|
11
|
+
super(`Project standards write target '${input.filePath}' is rejected (reason: ${input.reason}); ` +
|
|
12
|
+
`writes must stay inside project root '${input.projectRoot}'. ` +
|
|
13
|
+
`Refusing to pollute the user-level ~/.claude/ baseline.`);
|
|
14
|
+
this.name = 'ProjectStandardsWriteTargetError';
|
|
15
|
+
this.filePath = input.filePath;
|
|
16
|
+
this.projectRoot = input.projectRoot;
|
|
17
|
+
this.reason = input.reason;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
const SOURCE = {
|
|
21
|
+
sourceId: 'everything-claude-code',
|
|
22
|
+
url: 'https://github.com/affaan-m/everything-claude-code',
|
|
23
|
+
usage: 'curated-baseline-reference'
|
|
24
|
+
};
|
|
25
|
+
const SKILL_PREFLIGHT = {
|
|
26
|
+
appliesTo: ['peaks-rd', 'peaks-qa', 'peaks-code'],
|
|
27
|
+
summary: 'peaks-rd、peaks-qa、peaks-code 进入代码仓工作流时自动 preflight 项目规范。'
|
|
28
|
+
};
|
|
29
|
+
const SUPPORTED_LANGUAGES = new Set(['generic', 'typescript', 'javascript', 'python', 'go', 'rust']);
|
|
30
|
+
function normalizeRoot(path) {
|
|
31
|
+
return realpathSync(resolve(path));
|
|
32
|
+
}
|
|
33
|
+
function isInsidePath(childPath, parentPath) {
|
|
34
|
+
const rel = relative(parentPath, childPath);
|
|
35
|
+
return rel === '' || (!rel.startsWith('..') && !isAbsolute(rel));
|
|
36
|
+
}
|
|
37
|
+
function assertDirectoryNotSymlink(path) {
|
|
38
|
+
if (existsSync(path) && lstatSync(path).isSymbolicLink()) {
|
|
39
|
+
throw new Error('Project standards directory must stay inside the project root');
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
function assertRealPathInsideProject(path, projectRoot) {
|
|
43
|
+
if (!isInsidePath(realpathSync(path), projectRoot)) {
|
|
44
|
+
throw new Error('Project standards write target must stay inside the project root');
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
function assertWritablePathInsideProject(path, projectRoot) {
|
|
48
|
+
let currentPath = path;
|
|
49
|
+
while (!existsSync(currentPath)) {
|
|
50
|
+
currentPath = dirname(currentPath);
|
|
51
|
+
}
|
|
52
|
+
assertRealPathInsideProject(currentPath, projectRoot);
|
|
53
|
+
}
|
|
54
|
+
function assertSafeClaudeMdPath(filePath, projectRoot) {
|
|
55
|
+
if (!existsSync(filePath))
|
|
56
|
+
return;
|
|
57
|
+
if (lstatSync(filePath).isSymbolicLink() || !isInsidePath(realpathSync(filePath), projectRoot)) {
|
|
58
|
+
throw new Error('Project standards CLAUDE.md must stay inside the project root');
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
function assertSafeStandardsRoot(projectRoot) {
|
|
62
|
+
const resolvedRoot = normalizeRoot(projectRoot);
|
|
63
|
+
const claudeDir = join(resolvedRoot, '.claude');
|
|
64
|
+
const rulesDir = join(claudeDir, 'rules');
|
|
65
|
+
const peaksDir = join(resolvedRoot, '.peaks');
|
|
66
|
+
const peaksStandardsDir = join(peaksDir, 'standards');
|
|
67
|
+
assertDirectoryNotSymlink(claudeDir);
|
|
68
|
+
assertDirectoryNotSymlink(rulesDir);
|
|
69
|
+
// 2.0 canonical layout — same symlink/junction protection as
|
|
70
|
+
// the legacy `.claude/rules/` tree. A symlinked `.peaks/standards/`
|
|
71
|
+
// is a write-target escape attempt and must be rejected.
|
|
72
|
+
assertDirectoryNotSymlink(peaksDir);
|
|
73
|
+
assertDirectoryNotSymlink(peaksStandardsDir);
|
|
74
|
+
if (existsSync(rulesDir)) {
|
|
75
|
+
assertRealPathInsideProject(rulesDir, resolvedRoot);
|
|
76
|
+
return realpathSync(rulesDir);
|
|
77
|
+
}
|
|
78
|
+
return rulesDir;
|
|
79
|
+
}
|
|
80
|
+
function parseLanguage(value) {
|
|
81
|
+
const normalized = value.trim().toLowerCase();
|
|
82
|
+
if (SUPPORTED_LANGUAGES.has(normalized)) {
|
|
83
|
+
return normalized;
|
|
84
|
+
}
|
|
85
|
+
throw new Error('Unsupported standards language');
|
|
86
|
+
}
|
|
87
|
+
function detectLanguageInternal(projectRoot) {
|
|
88
|
+
if (existsSync(join(projectRoot, 'tsconfig.json')))
|
|
89
|
+
return 'typescript';
|
|
90
|
+
if (existsSync(join(projectRoot, 'package.json')))
|
|
91
|
+
return 'javascript';
|
|
92
|
+
if (existsSync(join(projectRoot, 'pyproject.toml')) || existsSync(join(projectRoot, 'requirements.txt')))
|
|
93
|
+
return 'python';
|
|
94
|
+
if (existsSync(join(projectRoot, 'go.mod')))
|
|
95
|
+
return 'go';
|
|
96
|
+
if (existsSync(join(projectRoot, 'Cargo.toml')))
|
|
97
|
+
return 'rust';
|
|
98
|
+
return 'generic';
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Public alias for `detectLanguageInternal` so callers outside this
|
|
102
|
+
* module (e.g. `workspace-service.ts` for the slice 2026-06-16 RD#7
|
|
103
|
+
* auto-detect path) can ask the same heuristic without re-implementing
|
|
104
|
+
* the file-probe logic.
|
|
105
|
+
*/
|
|
106
|
+
export function detectLanguage(projectRoot) {
|
|
107
|
+
return detectLanguageInternal(projectRoot);
|
|
108
|
+
}
|
|
109
|
+
function renderHeader(title) {
|
|
110
|
+
return [
|
|
111
|
+
`# ${title}`,
|
|
112
|
+
'',
|
|
113
|
+
'Source: Peaks curated baseline; everything-claude-code reference: https://github.com/affaan-m/everything-claude-code',
|
|
114
|
+
'Scope: project-local standards for peaks-rd, peaks-qa, and peaks-code workflow preflight.',
|
|
115
|
+
''
|
|
116
|
+
].join('\n');
|
|
117
|
+
}
|
|
118
|
+
function renderProjectStackSection(ctx) {
|
|
119
|
+
if (!ctx.hasPackageJson)
|
|
120
|
+
return '';
|
|
121
|
+
const lines = ['## Detected project stack', ''];
|
|
122
|
+
lines.push(`- Build tool: ${buildToolLabel(ctx.buildTool)}${ctx.buildConfigPath !== undefined ? ` (\`${ctx.buildConfigPath}\`)` : ''}`);
|
|
123
|
+
lines.push(`- Component library: ${componentLibraryLabel(ctx.componentLibrary)}`);
|
|
124
|
+
if (ctx.cssFrameworks.length > 0) {
|
|
125
|
+
lines.push(`- CSS: ${ctx.cssFrameworks.map(cssFrameworkLabel).join(', ')}`);
|
|
126
|
+
}
|
|
127
|
+
if (ctx.stateManagement.length > 0)
|
|
128
|
+
lines.push(`- State management: ${ctx.stateManagement.join(', ')}`);
|
|
129
|
+
if (ctx.routing.length > 0)
|
|
130
|
+
lines.push(`- Routing: ${ctx.routing.join(', ')}`);
|
|
131
|
+
if (ctx.dataFetching.length > 0)
|
|
132
|
+
lines.push(`- Data fetching: ${ctx.dataFetching.join(', ')}`);
|
|
133
|
+
if (ctx.notableDeps.length > 0)
|
|
134
|
+
lines.push(`- Notable deps: ${ctx.notableDeps.join(', ')}`);
|
|
135
|
+
lines.push('');
|
|
136
|
+
if (ctx.cssConflicts.length > 0) {
|
|
137
|
+
lines.push('## CSS framework conflicts', '');
|
|
138
|
+
for (const conflict of ctx.cssConflicts)
|
|
139
|
+
lines.push(`- ${conflict}`);
|
|
140
|
+
lines.push('');
|
|
141
|
+
}
|
|
142
|
+
if (ctx.legacySignals.length > 0) {
|
|
143
|
+
lines.push('## Legacy constraints (preserve for new code in the same modules)', '');
|
|
144
|
+
for (const signal of ctx.legacySignals)
|
|
145
|
+
lines.push(`- ${signal}`);
|
|
146
|
+
lines.push('');
|
|
147
|
+
}
|
|
148
|
+
return lines.join('\n');
|
|
149
|
+
}
|
|
150
|
+
function renderClaudeMd(language, ctx) {
|
|
151
|
+
const head = [
|
|
152
|
+
'# Project Instructions',
|
|
153
|
+
'',
|
|
154
|
+
'> 🤖 AI 生成,请审阅',
|
|
155
|
+
'',
|
|
156
|
+
'This repository uses project-local Peaks standards. Existing repository conventions override generic generated guidance.',
|
|
157
|
+
'',
|
|
158
|
+
'Peaks workflow automation:',
|
|
159
|
+
'- peaks-rd checks these standards before RD planning or implementation work.',
|
|
160
|
+
'- peaks-qa checks code review and security guidance before verification work.',
|
|
161
|
+
'- peaks-code summarizes RD and QA standards preflight before end-to-end code workflows.',
|
|
162
|
+
'',
|
|
163
|
+
'Rules:',
|
|
164
|
+
'- Read `.peaks/standards/common/coding-style.md` before editing code.',
|
|
165
|
+
'- Read `.peaks/standards/common/code-review.md` before reviewing changes.',
|
|
166
|
+
'- Read `.peaks/standards/common/security.md` before touching filesystem, user input, external calls, auth, or secrets.',
|
|
167
|
+
`- Read .peaks/standards/${language}/coding-style.md for language-specific standards when applicable.`,
|
|
168
|
+
'',
|
|
169
|
+
'Active Peaks-Loop skill presence: at the start of every response, run `peaks skill presence --json` to read the active skill marker. The CLI handles canonical-path resolution (`.peaks/_runtime/active-skill.json` with back-compat fallback to `.peaks/.active-skill.json`); do not read those files directly. When the response includes a valid skill name, display the compact status header: `Peaks-Loop Skill: <skill> | Peaks-Loop Gate: <gate> | Next: <one short action>`. Display the header on every turn while the CLI returns an active skill; omit when the CLI returns no active skill.'
|
|
170
|
+
].join('\n');
|
|
171
|
+
const stack = renderProjectStackSection(ctx);
|
|
172
|
+
return stack === '' ? head : `${head}\n${stack}`;
|
|
173
|
+
}
|
|
174
|
+
function renderCommonCodingStyle(ctx) {
|
|
175
|
+
const baseRules = [
|
|
176
|
+
'- Prefer simple, readable code over clever abstractions.',
|
|
177
|
+
'- Keep functions focused and files cohesive.',
|
|
178
|
+
'- Use immutable updates unless a language-specific convention explicitly favors mutation.',
|
|
179
|
+
'- Validate user input, external data, file paths, and configuration at system boundaries.',
|
|
180
|
+
'- Preserve existing project conventions when they are stricter than this baseline.'
|
|
181
|
+
];
|
|
182
|
+
const stackRules = [];
|
|
183
|
+
const lib = ctx.componentLibrary.name;
|
|
184
|
+
if (lib === 'antd' || lib === 'antd-pro') {
|
|
185
|
+
const major = ctx.componentLibrary.majorVersion ?? '5';
|
|
186
|
+
stackRules.push(`- Use existing antd v${major} components (\`Button\`, \`Form\`, \`Table\`, \`Modal\`, \`Select\`). Never mix antd v3/v4/v5 APIs.`);
|
|
187
|
+
stackRules.push(`- Customize antd via \`theme.token\` / \`ConfigProvider\` / \`className\` / \`styles\`. Do NOT apply TailwindCSS utility classes directly to antd components.`);
|
|
188
|
+
if (ctx.componentLibrary.hasProSuite === true) {
|
|
189
|
+
stackRules.push('- Use `@ant-design/pro-components` (`ProTable`, `ProForm`, `ProLayout`) where the page is already pro-based — do not introduce a parallel non-pro table/form.');
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
if (lib === 'mui')
|
|
193
|
+
stackRules.push('- Style MUI via `sx`, `styled()`, and `theme`. Do NOT apply TailwindCSS utility classes directly to MUI components.');
|
|
194
|
+
if (ctx.cssFrameworks.includes('tailwind') && (lib === 'antd' || lib === 'antd-pro' || lib === 'mui')) {
|
|
195
|
+
stackRules.push('- TailwindCSS is for layout/utility only; component-library tokens own component styling.');
|
|
196
|
+
}
|
|
197
|
+
if (ctx.cssFrameworks.includes('less'))
|
|
198
|
+
stackRules.push('- Less variables in `src/theme/*.less` (or equivalent) are the canonical design tokens — extend them, do not hardcode colors/spacing.');
|
|
199
|
+
if (ctx.stateManagement.length > 0)
|
|
200
|
+
stackRules.push(`- Follow the existing state library (${ctx.stateManagement.join(', ')}); do not introduce a competing state library.`);
|
|
201
|
+
if (ctx.dataFetching.length > 0)
|
|
202
|
+
stackRules.push(`- Reuse the existing data-fetching pattern (${ctx.dataFetching.join(', ')}) for new API calls.`);
|
|
203
|
+
for (const signal of ctx.legacySignals)
|
|
204
|
+
stackRules.push(`- ${signal}`);
|
|
205
|
+
const rules = stackRules.length > 0 ? [...baseRules, '', '## Project-specific rules', ...stackRules] : baseRules;
|
|
206
|
+
return `${renderHeader('Common Coding Standards')}${rules.join('\n')}\n`;
|
|
207
|
+
}
|
|
208
|
+
function renderCodeReview(ctx) {
|
|
209
|
+
const baseRules = [
|
|
210
|
+
'- Review diffs for correctness, maintainability, test coverage, and regression risk.',
|
|
211
|
+
'- Treat missing tests for changed behavior as a blocker unless the change is documentation-only.',
|
|
212
|
+
'- Verify code paths that handle filesystem, external APIs, credentials, user input, or generated artifacts.',
|
|
213
|
+
'- peaks-qa must use this guidance as part of code workflow preflight and final verification.'
|
|
214
|
+
];
|
|
215
|
+
const extra = [];
|
|
216
|
+
const lib = ctx.componentLibrary.name;
|
|
217
|
+
if (lib === 'antd' || lib === 'antd-pro') {
|
|
218
|
+
extra.push('- Block PRs that introduce a second component library (MUI/Chakra) alongside antd.');
|
|
219
|
+
extra.push('- Block PRs that import antd v3/v4 APIs in this v5 project, or vice versa.');
|
|
220
|
+
}
|
|
221
|
+
if (ctx.cssFrameworks.includes('tailwind') && (lib === 'antd' || lib === 'antd-pro' || lib === 'mui')) {
|
|
222
|
+
extra.push('- Flag Tailwind utility classes applied directly to component-library primitives; require component-library APIs instead.');
|
|
223
|
+
}
|
|
224
|
+
if (ctx.legacySignals.length > 0) {
|
|
225
|
+
extra.push('- Verify new code in legacy modules preserves the existing patterns (see `.claude/rules/common/coding-style.md` "Project-specific rules").');
|
|
226
|
+
}
|
|
227
|
+
const rules = extra.length > 0 ? [...baseRules, '', '## Project-specific review focus', ...extra] : baseRules;
|
|
228
|
+
return `${renderHeader('Code Review Standards')}${rules.join('\n')}\n`;
|
|
229
|
+
}
|
|
230
|
+
function renderSecurity(ctx) {
|
|
231
|
+
const baseRules = [
|
|
232
|
+
'- Never hardcode secrets, API keys, passwords, tokens, or credentials.',
|
|
233
|
+
'- Do not send private code or secrets to external services without explicit user authorization.',
|
|
234
|
+
'- Guard filesystem writes against path traversal, symlink, and junction escapes.',
|
|
235
|
+
'- Require explicit confirmation for destructive actions, external state changes, and credential use.'
|
|
236
|
+
];
|
|
237
|
+
const extra = [];
|
|
238
|
+
if (ctx.buildTool === 'next')
|
|
239
|
+
extra.push('- Validate request body / query / params at every API route boundary (`pages/api/**` or `app/api/**`).');
|
|
240
|
+
if (ctx.dataFetching.length > 0)
|
|
241
|
+
extra.push(`- Sanitize and validate API responses before rendering or persisting (current fetchers: ${ctx.dataFetching.join(', ')}).`);
|
|
242
|
+
if (ctx.notableDeps.includes('monaco-editor') || ctx.notableDeps.includes('@monaco-editor/react')) {
|
|
243
|
+
extra.push('- Monaco editor content is untrusted; never `eval` or `Function`-construct user-authored code without an explicit, reviewed sandbox.');
|
|
244
|
+
}
|
|
245
|
+
const rules = extra.length > 0 ? [...baseRules, '', '## Project-specific security focus', ...extra] : baseRules;
|
|
246
|
+
return `${renderHeader('Security Review Standards')}${rules.join('\n')}\n`;
|
|
247
|
+
}
|
|
248
|
+
function renderLanguageCodingStyle(language, ctx) {
|
|
249
|
+
const languageName = language === 'generic' ? 'Generic' : language[0].toUpperCase() + language.slice(1);
|
|
250
|
+
const typeSafetyRule = language === 'typescript' || language === 'javascript'
|
|
251
|
+
? '- Do not add new `any` types; use explicit domain types, generics, or `unknown` with narrowing.\n'
|
|
252
|
+
: '';
|
|
253
|
+
const baseRules = [
|
|
254
|
+
`- Apply project-local conventions before generic ${language} guidance.`,
|
|
255
|
+
`- Keep public APIs typed or documented according to ${language} ecosystem norms.`,
|
|
256
|
+
typeSafetyRule.trim() !== '' ? typeSafetyRule.trim() : null,
|
|
257
|
+
'- Prefer standard tooling and existing project scripts for formatting, linting, tests, and coverage.',
|
|
258
|
+
`- peaks-rd must check this file before planning code changes in ${language} projects.`
|
|
259
|
+
].filter((line) => line !== null);
|
|
260
|
+
const extra = [];
|
|
261
|
+
if ((language === 'typescript' || language === 'javascript') && (ctx.componentLibrary.name === 'antd' || ctx.componentLibrary.name === 'antd-pro')) {
|
|
262
|
+
extra.push('- Type form values, table records, and API responses with named interfaces; do not rely on `Form.useForm()` inference for shared shapes.');
|
|
263
|
+
}
|
|
264
|
+
if ((language === 'typescript' || language === 'javascript') && ctx.dataFetching.includes('@tanstack/react-query')) {
|
|
265
|
+
extra.push('- Declare query/mutation generics (`useQuery<TData, TError>`) so consumers get typed data.');
|
|
266
|
+
}
|
|
267
|
+
if ((language === 'typescript' || language === 'javascript') && ctx.buildTool === 'umi') {
|
|
268
|
+
extra.push('- Use the project\'s existing service-layer pattern (`src/services/**`) for API calls; do not hand-roll `fetch` in components.');
|
|
269
|
+
}
|
|
270
|
+
const rules = extra.length > 0 ? [...baseRules, '', '## Project-specific rules', ...extra] : baseRules;
|
|
271
|
+
return `${renderHeader(`${languageName} Coding Standards`)}${rules.join('\n')}\n`;
|
|
272
|
+
}
|
|
273
|
+
function renderManagedClaudeMdIndex(language) {
|
|
274
|
+
return [
|
|
275
|
+
'<!-- peaks-standards:index:start -->',
|
|
276
|
+
'## Peaks Standards Index',
|
|
277
|
+
'- Constitution: `CLAUDE.md` is the repository-wide constitution.',
|
|
278
|
+
'- Local laws: `.peaks/standards/**` are project-local laws and are created only when missing.',
|
|
279
|
+
'- Managed by: `peaks standards update`.',
|
|
280
|
+
'- Managed files:',
|
|
281
|
+
' - `.peaks/standards/common/code-review.md`',
|
|
282
|
+
' - `.peaks/standards/common/coding-style.md`',
|
|
283
|
+
' - `.peaks/standards/common/security.md`',
|
|
284
|
+
` - .peaks/standards/${language}/coding-style.md`,
|
|
285
|
+
'- Conflict note: keep the existing body unchanged and resolve any disagreement manually before the next standards update.',
|
|
286
|
+
'<!-- peaks-standards:index:end -->',
|
|
287
|
+
''
|
|
288
|
+
].join('\n');
|
|
289
|
+
}
|
|
290
|
+
function readFileIfExists(path) {
|
|
291
|
+
if (!existsSync(path))
|
|
292
|
+
return null;
|
|
293
|
+
const fd = openSync(path, constants.O_RDONLY | constants.O_NOFOLLOW);
|
|
294
|
+
try {
|
|
295
|
+
return readFileSync(fd, 'utf8');
|
|
296
|
+
}
|
|
297
|
+
finally {
|
|
298
|
+
closeSync(fd);
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
function getPendingStandardsRuleWrites(plan) {
|
|
302
|
+
return plan.plannedWrites.filter((write) => write.relativePath !== 'CLAUDE.md' && write.status !== 'existing');
|
|
303
|
+
}
|
|
304
|
+
function prevalidateWrites(projectRoot, writes, resolveHomedir = osHomedir) {
|
|
305
|
+
const homeRoot = resolveHomedir();
|
|
306
|
+
for (const write of writes) {
|
|
307
|
+
const targetPath = resolve(write.filePath);
|
|
308
|
+
const targetDir = dirname(targetPath);
|
|
309
|
+
assertWritablePathInsideProject(targetDir, projectRoot);
|
|
310
|
+
if (write.relativePath === 'CLAUDE.md') {
|
|
311
|
+
assertSafeClaudeMdPath(targetPath, projectRoot);
|
|
312
|
+
}
|
|
313
|
+
assertNotHomedirBaseline(targetPath, projectRoot, homeRoot);
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
function assertNotHomedirBaseline(targetPath, projectRoot, homeRoot) {
|
|
317
|
+
if (homeRoot === '' || projectRoot === '')
|
|
318
|
+
return;
|
|
319
|
+
const realProjectRoot = normalizeRoot(projectRoot);
|
|
320
|
+
const realHomeRoot = normalizeRoot(homeRoot);
|
|
321
|
+
// Canonical "rules wrote to global instead of project" bug: when the
|
|
322
|
+
// resolved projectRoot IS the user-level homedir, the planned write
|
|
323
|
+
// would land at `~/.claude/**`, polluting the baseline installed by
|
|
324
|
+
// `scripts/install-skills.mjs`. Defense in depth: never silently
|
|
325
|
+
// write to the user-level baseline.
|
|
326
|
+
//
|
|
327
|
+
// Note: we deliberately do NOT reject projects that are merely
|
|
328
|
+
// subdirectories of homedir (e.g. `~/Desktop/test/platform-rag-web`).
|
|
329
|
+
// Those are normal consumer projects; the writes go to
|
|
330
|
+
// `<projectRoot>/.claude/**`, NOT to `<homedir>/.claude/**`. The
|
|
331
|
+
// second check below is the real protection: it inspects whether the
|
|
332
|
+
// resolved write target itself lands inside `<homedir>/.claude/`,
|
|
333
|
+
// which only fires for the canonical bug case (or any accidental
|
|
334
|
+
// `~/` reference in the call chain that lands in `.claude/`).
|
|
335
|
+
if (realProjectRoot === realHomeRoot) {
|
|
336
|
+
throw new ProjectStandardsWriteTargetError({
|
|
337
|
+
filePath: targetPath,
|
|
338
|
+
projectRoot: realProjectRoot,
|
|
339
|
+
reason: 'resolves-to-homedir-claude'
|
|
340
|
+
});
|
|
341
|
+
}
|
|
342
|
+
// Reject if the resolved write target itself lands inside the
|
|
343
|
+
// homedir's `.claude/` tree. This catches accidental `~/` usage anywhere
|
|
344
|
+
// in the call chain even when projectRoot is sane. Walk up to the first
|
|
345
|
+
// existing ancestor so realpathSync does not ENOENT on a planned file.
|
|
346
|
+
const homeClaudeDir = join(realHomeRoot, '.claude');
|
|
347
|
+
const realHomeClaudeDir = existsSync(homeClaudeDir) ? realpathSync(homeClaudeDir) : homeClaudeDir;
|
|
348
|
+
let cursor = targetPath;
|
|
349
|
+
while (!existsSync(cursor)) {
|
|
350
|
+
const parent = dirname(cursor);
|
|
351
|
+
if (parent === cursor)
|
|
352
|
+
break;
|
|
353
|
+
cursor = parent;
|
|
354
|
+
}
|
|
355
|
+
if (!existsSync(cursor))
|
|
356
|
+
return; // Nothing on disk to inspect; the project-root check above already covered the case.
|
|
357
|
+
const realTargetAncestor = realpathSync(cursor);
|
|
358
|
+
if (isInsidePath(realTargetAncestor, realHomeClaudeDir)) {
|
|
359
|
+
throw new ProjectStandardsWriteTargetError({
|
|
360
|
+
filePath: realTargetAncestor,
|
|
361
|
+
projectRoot: realProjectRoot,
|
|
362
|
+
reason: 'resolves-to-homedir-claude'
|
|
363
|
+
});
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
function writeMissingStandardsRules(plan, writes = getPendingStandardsRuleWrites(plan)) {
|
|
367
|
+
const writtenFiles = [];
|
|
368
|
+
for (const write of writes) {
|
|
369
|
+
const targetPath = resolve(write.filePath);
|
|
370
|
+
mkdirSync(dirname(targetPath), { recursive: true });
|
|
371
|
+
writeNewFile(targetPath, write.content);
|
|
372
|
+
writtenFiles.push(write.relativePath);
|
|
373
|
+
}
|
|
374
|
+
return writtenFiles;
|
|
375
|
+
}
|
|
376
|
+
function createTemplates(language, ctx) {
|
|
377
|
+
return [
|
|
378
|
+
{ relativePath: 'CLAUDE.md', content: renderClaudeMd(language, ctx) },
|
|
379
|
+
{ relativePath: '.peaks/standards/common/code-review.md', content: renderCodeReview(ctx) },
|
|
380
|
+
{ relativePath: '.peaks/standards/common/coding-style.md', content: renderCommonCodingStyle(ctx) },
|
|
381
|
+
{ relativePath: '.peaks/standards/common/security.md', content: renderSecurity(ctx) },
|
|
382
|
+
{ relativePath: `.peaks/standards/${language}/coding-style.md`, content: renderLanguageCodingStyle(language, ctx) }
|
|
383
|
+
];
|
|
384
|
+
}
|
|
385
|
+
/**
|
|
386
|
+
* Legacy 1.x templates — used only when the consumer project
|
|
387
|
+
* still carries a thick `.claude/rules/` tree. These mirror the
|
|
388
|
+
* historical 1.x install layout so the existing files are not
|
|
389
|
+
* silently overwritten; the caller should follow up with
|
|
390
|
+
* `peaks standards migrate --from-claude-rules` to converge to
|
|
391
|
+
* the 2.0 canonical layout.
|
|
392
|
+
*/
|
|
393
|
+
function createLegacyOneXTemplates(language, ctx) {
|
|
394
|
+
return [
|
|
395
|
+
{ relativePath: 'CLAUDE.md', content: renderClaudeMdOneX(language, ctx) },
|
|
396
|
+
{ relativePath: '.claude/rules/common/code-review.md', content: renderCodeReview(ctx) },
|
|
397
|
+
{ relativePath: '.claude/rules/common/coding-style.md', content: renderCommonCodingStyle(ctx) },
|
|
398
|
+
{ relativePath: '.claude/rules/common/security.md', content: renderSecurity(ctx) },
|
|
399
|
+
{ relativePath: `.claude/rules/${language}/coding-style.md`, content: renderLanguageCodingStyle(language, ctx) }
|
|
400
|
+
];
|
|
401
|
+
}
|
|
402
|
+
function renderClaudeMdOneX(language, ctx) {
|
|
403
|
+
const head = [
|
|
404
|
+
'# Project Instructions',
|
|
405
|
+
'',
|
|
406
|
+
'> 🤖 AI 生成,请审阅',
|
|
407
|
+
'',
|
|
408
|
+
'This repository uses project-local Peaks standards. Existing repository conventions override generic generated guidance.',
|
|
409
|
+
'',
|
|
410
|
+
'Peaks workflow automation:',
|
|
411
|
+
'- peaks-rd checks these standards before RD planning or implementation work.',
|
|
412
|
+
'- peaks-qa checks code review and security guidance before verification work.',
|
|
413
|
+
'- peaks-code summarizes RD and QA standards preflight before end-to-end code workflows.',
|
|
414
|
+
'',
|
|
415
|
+
'Rules:',
|
|
416
|
+
'- Read `.claude/rules/common/coding-style.md` before editing code.',
|
|
417
|
+
'- Read `.claude/rules/common/code-review.md` before reviewing changes.',
|
|
418
|
+
'- Read `.claude/rules/common/security.md` before touching filesystem, user input, external calls, auth, or secrets.',
|
|
419
|
+
`- Read .claude/rules/${language}/coding-style.md for language-specific standards when applicable.`,
|
|
420
|
+
'',
|
|
421
|
+
'Active Peaks-Loop skill presence: at the start of every response, run `peaks skill presence --json` to read the active skill marker. The CLI handles canonical-path resolution (`.peaks/_runtime/active-skill.json` with back-compat fallback to `.peaks/.active-skill.json`); do not read those files directly. When the response includes a valid skill name, display the compact status header: `Peaks-Loop Skill: <skill> | Peaks-Loop Gate: <gate> | Next: <one short action>`. Display the header on every turn while the CLI returns an active skill; omit when the CLI returns no active skill.'
|
|
422
|
+
].join('\n');
|
|
423
|
+
const stack = renderProjectStackSection(ctx);
|
|
424
|
+
return stack === '' ? head : `${head}\n${stack}`;
|
|
425
|
+
}
|
|
426
|
+
/**
|
|
427
|
+
* Detect whether the consumer project still carries a 1.x "thick"
|
|
428
|
+
* `.claude/rules/` tree (the legacy layout that 2.0 migrates away
|
|
429
|
+
* from). A project with thick 1.x rules should NOT be silently
|
|
430
|
+
* re-initialised into the 2.0 `.peaks/standards/` layout; the
|
|
431
|
+
* caller should explicitly run `peaks standards migrate --from-claude-rules`
|
|
432
|
+
* instead. A new project (no `.claude/rules/` tree, or only a
|
|
433
|
+
* previously-thinned 2-line-pointer tree) is safe to bootstrap
|
|
434
|
+
* directly into the 2.0 canonical layout.
|
|
435
|
+
*/
|
|
436
|
+
function hasThickOneXClaudeRules(projectRoot) {
|
|
437
|
+
const claudeRulesDir = join(projectRoot, '.claude', 'rules');
|
|
438
|
+
if (!existsSync(claudeRulesDir))
|
|
439
|
+
return false;
|
|
440
|
+
const stat = lstatSync(claudeRulesDir);
|
|
441
|
+
if (!stat.isDirectory())
|
|
442
|
+
return false;
|
|
443
|
+
// Walk one level deep; if any .md file under common/ or
|
|
444
|
+
// typescript/ (or the language pack) exists and is NOT a
|
|
445
|
+
// 2-line pointer, treat the tree as thick 1.x.
|
|
446
|
+
const POINTER_MARKER = 'Canonical peaks-loop 2.0 rules live at:';
|
|
447
|
+
const stack = [claudeRulesDir];
|
|
448
|
+
while (stack.length > 0) {
|
|
449
|
+
const dir = stack.pop();
|
|
450
|
+
if (dir === undefined)
|
|
451
|
+
break;
|
|
452
|
+
let entries;
|
|
453
|
+
try {
|
|
454
|
+
entries = readdirSync(dir);
|
|
455
|
+
}
|
|
456
|
+
catch {
|
|
457
|
+
return false;
|
|
458
|
+
}
|
|
459
|
+
for (const entry of entries) {
|
|
460
|
+
if (entry.startsWith('.'))
|
|
461
|
+
continue;
|
|
462
|
+
const entryPath = join(dir, entry);
|
|
463
|
+
let entryStat;
|
|
464
|
+
try {
|
|
465
|
+
entryStat = lstatSync(entryPath);
|
|
466
|
+
}
|
|
467
|
+
catch {
|
|
468
|
+
continue;
|
|
469
|
+
}
|
|
470
|
+
if (entryStat.isDirectory()) {
|
|
471
|
+
stack.push(entryPath);
|
|
472
|
+
}
|
|
473
|
+
else if (entryStat.isFile() && entry.endsWith('.md')) {
|
|
474
|
+
let body = '';
|
|
475
|
+
try {
|
|
476
|
+
body = readFileSync(entryPath, 'utf8');
|
|
477
|
+
}
|
|
478
|
+
catch {
|
|
479
|
+
continue;
|
|
480
|
+
}
|
|
481
|
+
if (!body.includes(POINTER_MARKER))
|
|
482
|
+
return true;
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
return false;
|
|
487
|
+
}
|
|
488
|
+
function createManagedClaudeBlock(language) {
|
|
489
|
+
return renderManagedClaudeMdIndex(language);
|
|
490
|
+
}
|
|
491
|
+
function buildClaudeUpdate(projectRoot, language, ctx) {
|
|
492
|
+
const filePath = resolve(projectRoot, 'CLAUDE.md');
|
|
493
|
+
assertSafeClaudeMdPath(filePath, projectRoot);
|
|
494
|
+
const existingContent = readFileIfExists(filePath);
|
|
495
|
+
const managedBlock = createManagedClaudeBlock(language);
|
|
496
|
+
if (existingContent === null) {
|
|
497
|
+
return {
|
|
498
|
+
relativePath: 'CLAUDE.md',
|
|
499
|
+
filePath,
|
|
500
|
+
status: 'planned',
|
|
501
|
+
content: `${renderClaudeMd(language, ctx).trimEnd()}\n\n${managedBlock}`,
|
|
502
|
+
appendBlock: '',
|
|
503
|
+
reviewSuggestions: []
|
|
504
|
+
};
|
|
505
|
+
}
|
|
506
|
+
const existingBlockStart = existingContent.indexOf('<!-- peaks-standards:index:start -->');
|
|
507
|
+
if (existingBlockStart < 0) {
|
|
508
|
+
return {
|
|
509
|
+
relativePath: 'CLAUDE.md',
|
|
510
|
+
filePath,
|
|
511
|
+
status: 'appended',
|
|
512
|
+
content: `${existingContent.trimEnd()}
|
|
513
|
+
|
|
514
|
+
${managedBlock}`,
|
|
515
|
+
appendBlock: `
|
|
516
|
+
|
|
517
|
+
${managedBlock}`,
|
|
518
|
+
reviewSuggestions: []
|
|
519
|
+
};
|
|
520
|
+
}
|
|
521
|
+
const existingManagedBlock = existingContent.slice(existingBlockStart).trimEnd();
|
|
522
|
+
if (existingManagedBlock === managedBlock.trimEnd()) {
|
|
523
|
+
return {
|
|
524
|
+
relativePath: 'CLAUDE.md',
|
|
525
|
+
filePath,
|
|
526
|
+
status: 'existing',
|
|
527
|
+
content: existingContent,
|
|
528
|
+
appendBlock: '',
|
|
529
|
+
reviewSuggestions: []
|
|
530
|
+
};
|
|
531
|
+
}
|
|
532
|
+
return {
|
|
533
|
+
relativePath: 'CLAUDE.md',
|
|
534
|
+
filePath,
|
|
535
|
+
status: 'review',
|
|
536
|
+
content: existingContent,
|
|
537
|
+
appendBlock: '',
|
|
538
|
+
reviewSuggestions: ['Existing CLAUDE.md already has a managed standards block. Review the managed block manually before changing it.']
|
|
539
|
+
};
|
|
540
|
+
}
|
|
541
|
+
function buildWrite(projectRoot, template) {
|
|
542
|
+
const filePath = resolve(projectRoot, template.relativePath);
|
|
543
|
+
return {
|
|
544
|
+
...template,
|
|
545
|
+
filePath,
|
|
546
|
+
status: existsSync(filePath) ? 'existing' : 'planned'
|
|
547
|
+
};
|
|
548
|
+
}
|
|
549
|
+
function writeNewFile(path, content) {
|
|
550
|
+
const fd = openSync(path, constants.O_WRONLY | constants.O_CREAT | constants.O_EXCL | constants.O_NOFOLLOW, 0o600);
|
|
551
|
+
try {
|
|
552
|
+
writeFileSync(fd, content, 'utf8');
|
|
553
|
+
}
|
|
554
|
+
finally {
|
|
555
|
+
closeSync(fd);
|
|
556
|
+
}
|
|
557
|
+
}
|
|
558
|
+
function appendExistingFile(path, content) {
|
|
559
|
+
const fd = openSync(path, constants.O_WRONLY | constants.O_APPEND | constants.O_NOFOLLOW);
|
|
560
|
+
try {
|
|
561
|
+
writeFileSync(fd, content, 'utf8');
|
|
562
|
+
}
|
|
563
|
+
finally {
|
|
564
|
+
closeSync(fd);
|
|
565
|
+
}
|
|
566
|
+
}
|
|
567
|
+
export function createProjectStandardsInitPlan(options) {
|
|
568
|
+
const projectRoot = normalizeRoot(options.projectRoot);
|
|
569
|
+
assertSafeStandardsRoot(projectRoot);
|
|
570
|
+
const language = options.language === undefined ? detectLanguageInternal(projectRoot) : parseLanguage(options.language);
|
|
571
|
+
const ctx = detectProjectContext(projectRoot);
|
|
572
|
+
// Default to the 2.0 canonical layout (`.peaks/standards/`).
|
|
573
|
+
// If the consumer project still carries a 1.x "thick" `.claude/rules/`
|
|
574
|
+
// tree, fall back to the legacy 1.x path so the operator's existing
|
|
575
|
+
// rules are never silently overwritten — the caller should follow up
|
|
576
|
+
// with `peaks standards migrate --from-claude-rules` to migrate them
|
|
577
|
+
// to 2.0.
|
|
578
|
+
const useLegacyOneXLayout = hasThickOneXClaudeRules(projectRoot);
|
|
579
|
+
const plannedWrites = useLegacyOneXLayout
|
|
580
|
+
? createLegacyOneXTemplates(language, ctx).map((template) => buildWrite(projectRoot, template))
|
|
581
|
+
: createTemplates(language, ctx).map((template) => buildWrite(projectRoot, template));
|
|
582
|
+
return {
|
|
583
|
+
apply: options.apply ?? false,
|
|
584
|
+
projectRoot,
|
|
585
|
+
language,
|
|
586
|
+
source: SOURCE,
|
|
587
|
+
skillPreflight: SKILL_PREFLIGHT,
|
|
588
|
+
plannedWrites
|
|
589
|
+
};
|
|
590
|
+
}
|
|
591
|
+
export function createProjectStandardsUpdatePlan(options) {
|
|
592
|
+
const basePlan = createProjectStandardsInitPlan(options);
|
|
593
|
+
const ctx = detectProjectContext(basePlan.projectRoot);
|
|
594
|
+
const claudeMd = buildClaudeUpdate(basePlan.projectRoot, basePlan.language, ctx);
|
|
595
|
+
return {
|
|
596
|
+
...basePlan,
|
|
597
|
+
claudeMd
|
|
598
|
+
};
|
|
599
|
+
}
|
|
600
|
+
export function executeProjectStandardsInit(options) {
|
|
601
|
+
const plan = createProjectStandardsInitPlan(options);
|
|
602
|
+
const writtenFiles = [];
|
|
603
|
+
const resolveHomedir = options.resolveHomedir ?? osHomedir;
|
|
604
|
+
if (plan.apply) {
|
|
605
|
+
assertSafeStandardsRoot(plan.projectRoot);
|
|
606
|
+
const pendingWrites = plan.plannedWrites.filter((write) => write.status !== 'existing');
|
|
607
|
+
prevalidateWrites(plan.projectRoot, pendingWrites, resolveHomedir);
|
|
608
|
+
for (const write of pendingWrites) {
|
|
609
|
+
const targetPath = resolve(write.filePath);
|
|
610
|
+
mkdirSync(dirname(targetPath), { recursive: true });
|
|
611
|
+
writeNewFile(targetPath, write.content);
|
|
612
|
+
writtenFiles.push(write.relativePath);
|
|
613
|
+
}
|
|
614
|
+
}
|
|
615
|
+
return {
|
|
616
|
+
...plan,
|
|
617
|
+
plannedWrites: plan.plannedWrites.map((write) => writtenFiles.includes(write.relativePath) ? { ...write, status: 'written' } : write),
|
|
618
|
+
writtenFiles
|
|
619
|
+
};
|
|
620
|
+
}
|
|
621
|
+
export function executeProjectStandardsUpdate(options) {
|
|
622
|
+
const plan = createProjectStandardsUpdatePlan(options);
|
|
623
|
+
const writtenFiles = [];
|
|
624
|
+
const appendedFiles = [];
|
|
625
|
+
const reviewSuggestions = [...plan.claudeMd.reviewSuggestions];
|
|
626
|
+
let claudeMd = { ...plan.claudeMd };
|
|
627
|
+
const resolveHomedir = options.resolveHomedir ?? osHomedir;
|
|
628
|
+
if (plan.apply) {
|
|
629
|
+
assertSafeStandardsRoot(plan.projectRoot);
|
|
630
|
+
const pendingRuleWrites = getPendingStandardsRuleWrites(plan);
|
|
631
|
+
prevalidateWrites(plan.projectRoot, pendingRuleWrites, resolveHomedir);
|
|
632
|
+
const targetPath = resolve(claudeMd.filePath);
|
|
633
|
+
prevalidateWrites(plan.projectRoot, [claudeMd], resolveHomedir);
|
|
634
|
+
writtenFiles.push(...writeMissingStandardsRules(plan, pendingRuleWrites));
|
|
635
|
+
if (claudeMd.status === 'planned') {
|
|
636
|
+
writeNewFile(targetPath, claudeMd.content);
|
|
637
|
+
writtenFiles.push(claudeMd.relativePath);
|
|
638
|
+
claudeMd = { ...claudeMd, status: 'written' };
|
|
639
|
+
}
|
|
640
|
+
else if (claudeMd.status === 'appended') {
|
|
641
|
+
appendExistingFile(targetPath, claudeMd.appendBlock);
|
|
642
|
+
appendedFiles.push(claudeMd.relativePath);
|
|
643
|
+
}
|
|
644
|
+
}
|
|
645
|
+
const plannedWrites = plan.plannedWrites.map((write) => {
|
|
646
|
+
if (write.relativePath === 'CLAUDE.md') {
|
|
647
|
+
return { ...write, status: claudeMd.status };
|
|
648
|
+
}
|
|
649
|
+
if (writtenFiles.includes(write.relativePath)) {
|
|
650
|
+
return { ...write, status: 'written' };
|
|
651
|
+
}
|
|
652
|
+
return write;
|
|
653
|
+
});
|
|
654
|
+
return {
|
|
655
|
+
...plan,
|
|
656
|
+
claudeMd,
|
|
657
|
+
plannedWrites,
|
|
658
|
+
writtenFiles,
|
|
659
|
+
appendedFiles,
|
|
660
|
+
reviewSuggestions
|
|
661
|
+
};
|
|
662
|
+
}
|
|
663
|
+
export function summarizeProjectStandardsInitResult(result) {
|
|
664
|
+
return {
|
|
665
|
+
apply: result.apply,
|
|
666
|
+
projectRoot: result.projectRoot,
|
|
667
|
+
language: result.language,
|
|
668
|
+
source: result.source,
|
|
669
|
+
skillPreflight: result.skillPreflight,
|
|
670
|
+
plannedWrites: result.plannedWrites.map((write) => ({ relativePath: write.relativePath, status: write.status })),
|
|
671
|
+
writtenFiles: result.writtenFiles,
|
|
672
|
+
skippedFiles: result.plannedWrites.filter((write) => write.status === 'existing').map((write) => write.relativePath)
|
|
673
|
+
};
|
|
674
|
+
}
|
|
675
|
+
export function summarizeProjectStandardsUpdateResult(result) {
|
|
676
|
+
return {
|
|
677
|
+
apply: result.apply,
|
|
678
|
+
projectRoot: result.projectRoot,
|
|
679
|
+
language: result.language,
|
|
680
|
+
source: result.source,
|
|
681
|
+
skillPreflight: result.skillPreflight,
|
|
682
|
+
plannedWrites: result.plannedWrites.map((write) => ({ relativePath: write.relativePath, status: write.status })),
|
|
683
|
+
writtenFiles: result.writtenFiles,
|
|
684
|
+
appendedFiles: result.appendedFiles,
|
|
685
|
+
skippedFiles: result.plannedWrites.filter((write) => write.status === 'existing').map((write) => write.relativePath),
|
|
686
|
+
reviewSuggestions: result.reviewSuggestions,
|
|
687
|
+
claudeMd: {
|
|
688
|
+
relativePath: result.claudeMd.relativePath,
|
|
689
|
+
status: result.claudeMd.status,
|
|
690
|
+
reviewSuggestions: result.claudeMd.reviewSuggestions
|
|
691
|
+
}
|
|
692
|
+
};
|
|
693
|
+
}
|