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,505 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `peaks workspace init` — slice 006 + 007 + 014 + 018 + 2026-06-16-peaks-code-auto-scaffold.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from `src/cli/commands/workspace-commands.ts` (slice
|
|
5
|
+
* 2026-06-16-workspace-commands-split) to keep that entry file under the
|
|
6
|
+
* 800-line Karpathy cap. Owns:
|
|
7
|
+
* - commander option wiring (`--project`, `--session-id`, `--change-id`, etc.)
|
|
8
|
+
* - canonical project-root resolution
|
|
9
|
+
* - session id resolution (with slice-018 rotation)
|
|
10
|
+
* - first-time hooks install prompt + sticky marker
|
|
11
|
+
* - missing-standards diagnostic surface (AC1-AC7) and `--init-standards` apply
|
|
12
|
+
*
|
|
13
|
+
* Imports the shared hooks-decision marker helpers from `./helpers.ts`.
|
|
14
|
+
*/
|
|
15
|
+
import { initWorkspace, InvalidSessionIdError, ConflictingSessionError, LegacyChangeIdSiblingError } from '../../../services/workspace/workspace-service.js';
|
|
16
|
+
// Slice 2026-06-29-change-id-root-removal: `LegacyChangeIdBindingError`
|
|
17
|
+
// was removed with the change-id axis. The legacy symlink-detection
|
|
18
|
+
// branch below no longer fires — the binding file at
|
|
19
|
+
// `.peaks/_runtime/current-change` is no longer written by init
|
|
20
|
+
// either. The sibling-dir guard (`LegacyChangeIdSiblingError`) is
|
|
21
|
+
// preserved because the 2.8.3 hard-ban still applies to date-stamped
|
|
22
|
+
// session-id-shaped directories at the `.peaks/_runtime/` sibling
|
|
23
|
+
// level.
|
|
24
|
+
import { ensureSessionWithRotation } from '../../../services/session/session-manager.js';
|
|
25
|
+
import { resolveCanonicalProjectRoot } from '../../../services/config/config-service.js';
|
|
26
|
+
import { applyHookInstall, readHookStatus } from '../../../services/skills/hooks-settings-service.js';
|
|
27
|
+
import { clearStalePresenceOnRotation } from '../../../services/skills/skill-presence-service.js';
|
|
28
|
+
import { fail, ok } from '../../../shared/result.js';
|
|
29
|
+
import { addJsonOption, getErrorMessage, printResult } from '../../cli-helpers.js';
|
|
30
|
+
import { hasStandardsCheckedMarker, markStandardsChecked } from '../../../services/standards/missing-standards-detector.js';
|
|
31
|
+
import { bootstrapProjectScan } from '../../../services/prd/project-scan-bootstrap-service.js';
|
|
32
|
+
import { readDecisionMarker, writeDecisionMarker, promptYesNo } from './helpers.js';
|
|
33
|
+
export function registerWorkspaceInitCommand(workspace, io) {
|
|
34
|
+
addJsonOption(workspace
|
|
35
|
+
.command('init')
|
|
36
|
+
.description('Create the .peaks/_runtime/<session-id>/ directory with ONLY the session.json metadata file (slice 006: role subdirs prd/ui/rd/qa/sc/txt and the system/ subdir are created lazily by writers, not pre-created at init). Pass --session-id to use a specific id, or omit it to auto-generate one (and adopt an existing binding if present). On the first call for a project, also handles the one-time "install peaks hooks" decision (sticky-marker stored in .peaks/.peaks-init-hooks-decision.json).')
|
|
37
|
+
.requiredOption('--project <path>', 'target project root')
|
|
38
|
+
.option('--session-id <id>', 'optional session id in YYYY-MM-DD-<kebab-slug> format. When omitted, the CLI is the single source of truth: an existing binding is reused, otherwise a fresh id is auto-generated.')
|
|
39
|
+
.option('--allow-session-rebind', 'overwrite an existing session binding when the requested session id differs from the project current one', false)
|
|
40
|
+
.option('--no-rotate-on-outer-mismatch', 'suppress the auto-rotation of the project session binding when the outer (Claude / harness) session id has changed. Default rotates on mismatch.')
|
|
41
|
+
.option('--install-hooks <mode>', 'first-time hooks install behaviour: ask (default in TTY, prompt once + sticky-marker), auto (default in --json / non-TTY, install silently + sticky-marker), skip (sticky-marker skipped, do not install)', (value) => {
|
|
42
|
+
if (value !== 'ask' && value !== 'auto' && value !== 'skip') {
|
|
43
|
+
throw new Error(`--install-hooks must be one of: ask, auto, skip (got "${value}")`);
|
|
44
|
+
}
|
|
45
|
+
return value;
|
|
46
|
+
})
|
|
47
|
+
.option('--no-claude-hooks', 'do NOT materialize .claude/settings.local.json (slice 2.0.1-bug3 fact-forcing bypass). Default: hooks installed so tool calls inside .peaks/** are not blocked by the [Fact-Forcing Gate].')
|
|
48
|
+
.option('--init-standards', 'slice 2026-06-16-peaks-code-auto-scaffold: when the consumer project\'s .claude/rules/ is missing or empty, auto-apply `peaks standards init --project <path> --apply` after emitting the diagnostic. Default: diagnostic only (no write).')
|
|
49
|
+
.option('--no-project-scan-bootstrap', 'slice 2026-07-15-project-scan-bootstrap: skip the bootstrap of .peaks/project-scan/{project-scan.md + 4 audit/business templates} that runs after init succeeds. Default: bootstrap runs (idempotent: existing files are kept unless --force-project-scan-templates is also passed).')
|
|
50
|
+
.option('--force-project-scan-templates', 'slice 2026-07-15-project-scan-bootstrap (AC10): overwrite the 4 audit/business templates under .peaks/project-scan/ (business-knowledge.md, security-template.md, perf-template.md, audit-output-schema.md) even when they already exist. Default: skip existing files (sediment-preserved).', false)).action(async (options) => {
|
|
51
|
+
try {
|
|
52
|
+
// Resolve the session id. Two paths:
|
|
53
|
+
// - explicit --session-id: use it as the requested binding target
|
|
54
|
+
// (ConflictingSessionError fires if it conflicts with an in-flight
|
|
55
|
+
// session, unless --allow-session-rebind is set)
|
|
56
|
+
// - omitted: defer to ensureSession(), which reuses an existing
|
|
57
|
+
// binding or auto-generates a fresh one. The init then writes
|
|
58
|
+
// .peaks/_runtime/session.json so the binding sticks.
|
|
59
|
+
//
|
|
60
|
+
// Before that: canonicalise the project root. If the user (or the
|
|
61
|
+
// LLM via "$(pwd)") passed a sub-directory of a real git repo
|
|
62
|
+
// (e.g. prompt-project/prompt-project/ inside the outer
|
|
63
|
+
// prompt-project/.git), promote the path to the git root. Without
|
|
64
|
+
// this, peaks would build a parallel .peaks/ tree under the
|
|
65
|
+
// nested sub-folder and silently break the project-binding model
|
|
66
|
+
// (the same regression that produced prompt-project/.peaks/ in
|
|
67
|
+
// the 5/27-5/29 sessions). When startPath is not inside any
|
|
68
|
+
// git repo, the helper falls through to the cwd verbatim.
|
|
69
|
+
const projectRoot = resolveCanonicalProjectRoot(options.project);
|
|
70
|
+
// Slice 018: outer-session-mismatch auto-rotation. When the
|
|
71
|
+
// user did NOT pass --session-id explicitly, run
|
|
72
|
+
// `ensureSessionWithRotation` so the binding is rotated on
|
|
73
|
+
// outer-mismatch before `initWorkspace` is called. The
|
|
74
|
+
// rotation result is surfaced in the JSON envelope via
|
|
75
|
+
// `data.rotation`. When --session-id IS passed, the user has
|
|
76
|
+
// explicitly told us which session to bind — we honor that
|
|
77
|
+
// verbatim and do NOT rotate (rotation only fires for the
|
|
78
|
+
// auto-detect path).
|
|
79
|
+
let sessionId;
|
|
80
|
+
let rotation = {
|
|
81
|
+
previousSessionId: null,
|
|
82
|
+
reason: null
|
|
83
|
+
};
|
|
84
|
+
if (options.sessionId !== undefined && options.sessionId.length > 0) {
|
|
85
|
+
sessionId = options.sessionId;
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
const result = await ensureSessionWithRotation(projectRoot, {
|
|
89
|
+
// Commander translates `--no-rotate-on-outer-mismatch` into
|
|
90
|
+
// `options.rotateOnOuterMismatch = false` (the `--no-` prefix
|
|
91
|
+
// is consumed and the remainder becomes the JS property name,
|
|
92
|
+
// with the boolean value flipped). The pre-slice-014 anti-
|
|
93
|
+
// pattern (reading `options.<flag-with-no-prefix> === true`)
|
|
94
|
+
// is NOT used here. The default (no flag) leaves
|
|
95
|
+
// `options.rotateOnOuterMismatch` undefined, which is not
|
|
96
|
+
// equal to `false`, so the default is "rotate on mismatch"
|
|
97
|
+
// (the new auto-roll).
|
|
98
|
+
skipRotateOnOuterMismatch: options.rotateOnOuterMismatch === false
|
|
99
|
+
});
|
|
100
|
+
sessionId = result.sessionId;
|
|
101
|
+
rotation = {
|
|
102
|
+
previousSessionId: result.previousSessionId,
|
|
103
|
+
reason: result.rotationReason
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
const report = await initWorkspace({
|
|
107
|
+
projectRoot,
|
|
108
|
+
sessionId,
|
|
109
|
+
allowSessionRebind: options.allowSessionRebind === true,
|
|
110
|
+
// Commander translates `--no-claude-hooks` into
|
|
111
|
+
// `options.claudeHooks = false`. The default (no flag) leaves
|
|
112
|
+
// `options.claudeHooks` undefined, which is not equal to
|
|
113
|
+
// `false`, so the default is "install hooks" (the bypass is
|
|
114
|
+
// on). Pass `--no-claude-hooks` to opt out.
|
|
115
|
+
noClaudeHooks: options.claudeHooks === false,
|
|
116
|
+
// Slice 2026-06-16-peaks-code-auto-scaffold (RD#7): opt-in
|
|
117
|
+
// auto-apply for the missing-standards scaffold. Default false
|
|
118
|
+
// — only the diagnostic is emitted. Pass --init-standards to
|
|
119
|
+
// also run `executeProjectStandardsInit({ apply: true })`.
|
|
120
|
+
initStandards: options.initStandards === true
|
|
121
|
+
});
|
|
122
|
+
// Slice 2026-07-15-project-scan-bootstrap (G2 / G4b / AC9):
|
|
123
|
+
// After the workspace dir is initialized, also bootstrap the
|
|
124
|
+
// `.peaks/project-scan/` artifact tree (project-scan.md + 4
|
|
125
|
+
// bundled audit/business templates). Idempotent — when the user
|
|
126
|
+
// re-runs `workspace init`, the existing files are kept (their
|
|
127
|
+
// sediment is user-authored). Pass `--no-project-scan-bootstrap`
|
|
128
|
+
// to skip, or `--force-project-scan-templates` to overwrite the
|
|
129
|
+
// 4 bundled templates anyway.
|
|
130
|
+
let projectScanEnvelope = null;
|
|
131
|
+
let projectScanError = null;
|
|
132
|
+
if (options.projectScanBootstrap === false) {
|
|
133
|
+
// Explicit opt-out. The envelope stays null; the JSON
|
|
134
|
+
// response carries `projectScan: { skipped: true, ... }` so
|
|
135
|
+
// callers can distinguish "skipped by flag" from "skipped by
|
|
136
|
+
// idempotency".
|
|
137
|
+
projectScanEnvelope = {
|
|
138
|
+
created: false,
|
|
139
|
+
skipped: true,
|
|
140
|
+
templatesBooted: 0,
|
|
141
|
+
templatesSkipped: 0,
|
|
142
|
+
projectScanPath: `${projectRoot}/.peaks/project-scan/project-scan.md`,
|
|
143
|
+
durationMs: 0
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
try {
|
|
148
|
+
projectScanEnvelope = await bootstrapProjectScan({
|
|
149
|
+
projectRoot,
|
|
150
|
+
...(options.forceProjectScanTemplates === true ? { forceTemplates: true } : {})
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
catch (error) {
|
|
154
|
+
// Don't fail init over a project-scan issue — the workspace
|
|
155
|
+
// is already initialized and the user has the JSON envelope.
|
|
156
|
+
// Surface the failure as a warning so the LLM can decide.
|
|
157
|
+
projectScanError = getErrorMessage(error);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
const nextActions = [];
|
|
161
|
+
if (report.previousSessionId !== null && report.bound) {
|
|
162
|
+
nextActions.push(`Replaced prior session binding "${report.previousSessionId}" with "${report.sessionId}".`);
|
|
163
|
+
}
|
|
164
|
+
if (rotation.previousSessionId !== null && rotation.reason === 'outer-session-mismatch') {
|
|
165
|
+
// Outer-session-mismatch rotation: the previous Claude / harness
|
|
166
|
+
// session is no longer the LLM driver. The new binding is fresh,
|
|
167
|
+
// the old session dir is preserved on disk.
|
|
168
|
+
nextActions.push(`Auto-rotated session binding: outer session id changed (was "${rotation.previousSessionId}"). ` +
|
|
169
|
+
`New binding is "${sessionId}". The previous session dir is preserved at .peaks/_runtime/${rotation.previousSessionId}/. ` +
|
|
170
|
+
`Re-run with --no-rotate-on-outer-mismatch to suppress this rotation.`);
|
|
171
|
+
// Slice 002 (v2.15.0) AC-1: a presence marker stamped by the
|
|
172
|
+
// OLD outer session is now stale (defect A from the PRD).
|
|
173
|
+
// peaks-code Step 1 would otherwise pick up the old `mode`
|
|
174
|
+
// field and silently lock the new session into a mode the
|
|
175
|
+
// user never explicitly chose. Clear it here so Step 1's
|
|
176
|
+
// presence:check-stale reports `reason: 'no-presence'` and
|
|
177
|
+
// the re-ask fires.
|
|
178
|
+
const presenceClearOutcome = clearStalePresenceOnRotation({
|
|
179
|
+
projectRootOverride: projectRoot,
|
|
180
|
+
currentOuterSessionId: process.env.PEAKS_OUTER_SESSION_ID
|
|
181
|
+
?? process.env.CLAUDE_CODE_SESSION_ID,
|
|
182
|
+
rotatedOutSessionId: rotation.previousSessionId
|
|
183
|
+
});
|
|
184
|
+
if (presenceClearOutcome.cleared) {
|
|
185
|
+
nextActions.push(`Auto-cleared stale skill presence (recorded outer id "${presenceClearOutcome.recordedOuter ?? '?'}" did not match the new outer session). ` +
|
|
186
|
+
'peaks-code Step 1 will now AskUserQuestion to confirm the mode.');
|
|
187
|
+
}
|
|
188
|
+
else if (presenceClearOutcome.reason === 'recorded-by-different-outer') {
|
|
189
|
+
nextActions.push(`Kept skill presence: it was recorded by a different live outer session (id "${presenceClearOutcome.recordedOuter ?? '?'}"). ` +
|
|
190
|
+
'The new outer session will not auto-clear it.');
|
|
191
|
+
}
|
|
192
|
+
else if (presenceClearOutcome.reason === 'not-stale') {
|
|
193
|
+
nextActions.push('Kept skill presence: it was re-stamped by the new outer session during the rotation window (not stale).');
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
if (report.created.length === 0) {
|
|
197
|
+
nextActions.push('Workspace already initialized — proceed to project scan.');
|
|
198
|
+
}
|
|
199
|
+
else {
|
|
200
|
+
nextActions.push('Run `peaks scan archetype --project <path> --json` next to populate rd/project-scan.md.');
|
|
201
|
+
}
|
|
202
|
+
// Slice 2.0.1-bug3-fact-forcing-bypass: surface the consumer-
|
|
203
|
+
// project .claude/settings.local.json materialization outcome.
|
|
204
|
+
// When the bypass is in effect, the LLM knows subsequent Writes
|
|
205
|
+
// and Bash calls targeting .peaks/** will not be blocked by the
|
|
206
|
+
// [Fact-Forcing Gate]. When the user opted out, we surface a
|
|
207
|
+
// nextAction so the manual recovery is documented.
|
|
208
|
+
if (report.claudeSettings.action === 'written' || report.claudeSettings.action === 'refreshed') {
|
|
209
|
+
nextActions.push(`Materialized .claude/settings.local.json (action: ${report.claudeSettings.action}) — ` +
|
|
210
|
+
`the [Fact-Forcing Gate] is bypassed for tool calls inside .peaks/**. ` +
|
|
211
|
+
'Restart Claude Code so the hooks take effect.');
|
|
212
|
+
}
|
|
213
|
+
else if (report.claudeSettings.action === 'already-current') {
|
|
214
|
+
// No-op: the bypass is already in effect and matches the
|
|
215
|
+
// current release. Do not spam the nextAction list on every
|
|
216
|
+
// init.
|
|
217
|
+
}
|
|
218
|
+
else if (report.claudeSettings.action === 'skipped') {
|
|
219
|
+
nextActions.push('Skipped .claude/settings.local.json materialization (--no-claude-hooks). ' +
|
|
220
|
+
'If the [Fact-Forcing Gate] blocks subsequent Writes, run `peaks workspace init` ' +
|
|
221
|
+
'again without --no-claude-hooks, or drop the contents of ' +
|
|
222
|
+
'`.peaks/.claude-settings-template.json` into `.claude/settings.local.json` manually.');
|
|
223
|
+
}
|
|
224
|
+
// Slice 2026-06-13-selfheal-claude-settings-template: surface
|
|
225
|
+
// the self-heal outcome for the offline
|
|
226
|
+
// `.peaks/.claude-settings-template.json` copy. When the offline
|
|
227
|
+
// file was refreshed (i.e. the previous peaks-loop release left
|
|
228
|
+
// a stale version without the `node -e "..."` wrapper), the user
|
|
229
|
+
// benefits from seeing that the manual-recovery anchor now
|
|
230
|
+
// points at the corrected template. We surface `written` and
|
|
231
|
+
// `refreshed` as the actionable events; `already-current` is
|
|
232
|
+
// silent (same rationale as the consumer-project no-op above).
|
|
233
|
+
//
|
|
234
|
+
// The `refreshed` nextAction also carries a loud warning that any
|
|
235
|
+
// MANUAL EDITS the user made to the offline template have been
|
|
236
|
+
// overwritten — drift detection cannot tell stale-from-prior-release
|
|
237
|
+
// apart from user-customised, so we surface the warning unconditionally
|
|
238
|
+
// to make sure anyone who customised sees the prompt.
|
|
239
|
+
if (report.claudeSettings.offlineTemplate.action === 'refreshed') {
|
|
240
|
+
nextActions.push(`Self-healed .peaks/.claude-settings-template.json (action: refreshed) — ` +
|
|
241
|
+
'the offline recovery anchor now matches the current peaks-loop template. ' +
|
|
242
|
+
'No action required; future manual recoveries will copy the corrected wrapper.');
|
|
243
|
+
nextActions.push('⚠️ If you had manually edited .peaks/.claude-settings-template.json, ' +
|
|
244
|
+
'those edits have been overwritten by the self-heal. ' +
|
|
245
|
+
'Re-apply your custom matchers / commands on top of the freshly-written template, ' +
|
|
246
|
+
'or open an issue if your customisation is a recurring need (the team may promote it to the canonical template).');
|
|
247
|
+
}
|
|
248
|
+
else if (report.claudeSettings.offlineTemplate.action === 'written') {
|
|
249
|
+
nextActions.push(`Wrote .peaks/.claude-settings-template.json (action: written) — ` +
|
|
250
|
+
'the offline recovery anchor is now in place for future manual recoveries.');
|
|
251
|
+
}
|
|
252
|
+
// Slice 2026-07-15-project-scan-bootstrap (G2): surface the
|
|
253
|
+
// bootstrap outcome. The envelope carries the write counts and
|
|
254
|
+
// duration so the LLM (and the human) see what landed. The
|
|
255
|
+
// nextAction only fires when the project-scan tree is fresh —
|
|
256
|
+
// idempotent re-runs are silent to keep the nextAction list
|
|
257
|
+
// scannable.
|
|
258
|
+
// (deferred until after warningsForEnvelope is declared below)
|
|
259
|
+
// First-time hooks install decision. Sticky-marker at
|
|
260
|
+
// .peaks/.peaks-init-hooks-decision.json records the user's answer
|
|
261
|
+
// (or the auto-decision) so subsequent inits for new sessions in the
|
|
262
|
+
// same project do not re-prompt. The marker is the only state that
|
|
263
|
+
// survives across sessions — without it, every new session would
|
|
264
|
+
// re-trigger the question.
|
|
265
|
+
const hooksOutcome = await resolveFirstTimeHooksInstall({
|
|
266
|
+
projectRoot,
|
|
267
|
+
...(options.installHooks !== undefined ? { explicitMode: options.installHooks } : {}),
|
|
268
|
+
jsonMode: options.json === true
|
|
269
|
+
});
|
|
270
|
+
if (hooksOutcome.decision === 'installed') {
|
|
271
|
+
nextActions.push(hooksOutcome.action === 'reinstalled'
|
|
272
|
+
? 'Re-installed the peaks-managed PreToolUse hooks (Bash→gate enforce, Task→progress start) — the marker said installed but the hooks were missing.'
|
|
273
|
+
: 'Installed the peaks-managed PreToolUse hooks (Bash→gate enforce, Task→progress start). Restart Claude Code so the hooks take effect.');
|
|
274
|
+
}
|
|
275
|
+
else if (hooksOutcome.action === 'first-decision' && hooksOutcome.decision === 'skipped') {
|
|
276
|
+
nextActions.push('Skipped peaks-managed hook install for this project. Re-run with --install-hooks=auto (or peaks hooks install) to install later.');
|
|
277
|
+
}
|
|
278
|
+
// Slice 2026-06-16-peaks-code-auto-scaffold (RD#7):
|
|
279
|
+
// - When the consumer project's `.claude/rules/` is missing or
|
|
280
|
+
// empty, emit the copy-pasteable diagnostic to stderr (via
|
|
281
|
+
// the JSON envelope `warnings` array) AND surface the
|
|
282
|
+
// structured descriptor in `data.standardsMissing`.
|
|
283
|
+
// - AC7: skip the diagnostic banner on subsequent invocations
|
|
284
|
+
// within the same session — the once-per-session marker
|
|
285
|
+
// `.peaks/_runtime/<sid>/.standards-checked` is written after
|
|
286
|
+
// the FIRST diagnostic emit.
|
|
287
|
+
// - AC3: when --init-standards was passed and the detector
|
|
288
|
+
// reported missing, `report.standardsApplied` already lists the
|
|
289
|
+
// freshly-written files. Surface that as a nextAction so the
|
|
290
|
+
// human sees what was written.
|
|
291
|
+
const warningsForEnvelope = [];
|
|
292
|
+
if (report.standardsMissing.missing && !hasStandardsCheckedMarker(projectRoot, sessionId)) {
|
|
293
|
+
warningsForEnvelope.push(report.standardsMissing.remediation);
|
|
294
|
+
nextActions.push(`Run \`peaks workspace init --init-standards --project ${projectRoot}\` to auto-apply the scaffold, or \`peaks standards init --project ${projectRoot} --apply\` manually.`);
|
|
295
|
+
}
|
|
296
|
+
if (report.standardsApplied !== undefined) {
|
|
297
|
+
nextActions.push(`Auto-applied .claude/rules/${report.standardsApplied.language}/ scaffold (slice 2026-06-16-peaks-code-auto-scaffold): ` +
|
|
298
|
+
`wrote ${report.standardsApplied.writtenFiles.length} file(s), ` +
|
|
299
|
+
`kept ${report.standardsApplied.skippedFiles.length} existing file(s).`);
|
|
300
|
+
}
|
|
301
|
+
// Slice 2026-07-15-project-scan-bootstrap (G2): surface the
|
|
302
|
+
// bootstrap outcome. The envelope carries the write counts and
|
|
303
|
+
// duration so the LLM (and the human) see what landed. The
|
|
304
|
+
// nextAction only fires when the project-scan tree is fresh —
|
|
305
|
+
// idempotent re-runs are silent to keep the nextAction list
|
|
306
|
+
// scannable.
|
|
307
|
+
if (projectScanError !== null) {
|
|
308
|
+
warningsForEnvelope.push(`project-scan bootstrap failed: ${projectScanError}`);
|
|
309
|
+
}
|
|
310
|
+
else if (projectScanEnvelope !== null && projectScanEnvelope.created) {
|
|
311
|
+
nextActions.push(`Bootstrapped .peaks/project-scan/ (project-scan.md + 4 audit/business templates) — ` +
|
|
312
|
+
`${projectScanEnvelope.templatesBooted} file(s) written, ${projectScanEnvelope.templatesSkipped} preserved. ` +
|
|
313
|
+
`Run \`peaks scan archetype --project ${projectRoot}\` and \`peaks scan libraries --project ${projectRoot}\` next to refresh the scan.`);
|
|
314
|
+
}
|
|
315
|
+
// Write the once-per-session marker AFTER the envelope is built
|
|
316
|
+
// (so subsequent inits skip the warning even on rapid back-to-back
|
|
317
|
+
// calls).
|
|
318
|
+
if (report.standardsMissing.missing) {
|
|
319
|
+
markStandardsChecked(projectRoot, sessionId);
|
|
320
|
+
}
|
|
321
|
+
printResult(io, ok('workspace.init', {
|
|
322
|
+
...report,
|
|
323
|
+
// Slice 018: surface outer-session-mismatch rotation in the
|
|
324
|
+
// JSON envelope so the LLM and the human both see the swap.
|
|
325
|
+
// Field is omitted (not null) when no rotation fired.
|
|
326
|
+
...(rotation.previousSessionId !== null && rotation.reason !== null
|
|
327
|
+
? { rotation: { previousSessionId: rotation.previousSessionId, reason: rotation.reason } }
|
|
328
|
+
: {}),
|
|
329
|
+
hooksInstall: {
|
|
330
|
+
decision: hooksOutcome.decision,
|
|
331
|
+
action: hooksOutcome.action,
|
|
332
|
+
scope: hooksOutcome.scope,
|
|
333
|
+
...(hooksOutcome.reason !== undefined ? { reason: hooksOutcome.reason } : {})
|
|
334
|
+
},
|
|
335
|
+
// Slice 2026-07-15-project-scan-bootstrap (G2): envelope
|
|
336
|
+
// for the .peaks/project-scan/ bootstrap. Always present
|
|
337
|
+
// (even when skipped / errored) so downstream readers can
|
|
338
|
+
// rely on the shape.
|
|
339
|
+
...(projectScanEnvelope !== null
|
|
340
|
+
? { projectScan: { ...projectScanEnvelope, ...(projectScanError !== null ? { error: projectScanError } : {}) } }
|
|
341
|
+
: {})
|
|
342
|
+
}, warningsForEnvelope, nextActions), options.json);
|
|
343
|
+
}
|
|
344
|
+
catch (error) {
|
|
345
|
+
if (error instanceof InvalidSessionIdError) {
|
|
346
|
+
printResult(io, fail('workspace.init', error.code, error.message, { sessionId: options.sessionId }, ['Use a date-prefixed kebab slug like 2026-05-25-add-user-auth']), options.json);
|
|
347
|
+
process.exitCode = 1;
|
|
348
|
+
return;
|
|
349
|
+
}
|
|
350
|
+
if (error instanceof ConflictingSessionError) {
|
|
351
|
+
printResult(io, fail('workspace.init', error.code, error.message, {
|
|
352
|
+
existingSessionId: error.existingSessionId,
|
|
353
|
+
requestedSessionId: error.requestedSessionId
|
|
354
|
+
}, [
|
|
355
|
+
`Finish or abandon session "${error.existingSessionId}" first, then re-run workspace init.`,
|
|
356
|
+
'Or pass --allow-session-rebind to override the binding (overwrites the prior binding).'
|
|
357
|
+
]), options.json);
|
|
358
|
+
process.exitCode = 1;
|
|
359
|
+
return;
|
|
360
|
+
}
|
|
361
|
+
if (error instanceof LegacyChangeIdSiblingError) {
|
|
362
|
+
// Slice 2.8.3: a 2.8.0-era orphan `.peaks/_runtime/<change-id>/` was
|
|
363
|
+
// found at top level. The CLI surfaces the migration steps
|
|
364
|
+
// verbatim from the error message plus three concrete
|
|
365
|
+
// nextActions so the user (or LLM driver) has an unambiguous
|
|
366
|
+
// recovery path. We do NOT auto-migrate because the legacy
|
|
367
|
+
// sibling dir may contain user-authored content.
|
|
368
|
+
printResult(io, fail('workspace.init', error.code, error.message, {
|
|
369
|
+
sessionId: error.sessionId,
|
|
370
|
+
legacyPath: error.legacyPath
|
|
371
|
+
}, [
|
|
372
|
+
`Inspect ${error.legacyPath} for any user-authored content you want to keep.`,
|
|
373
|
+
`Move any desired files into .peaks/_runtime/<sessionId>/<role>/ (gitignored), then delete ${error.legacyPath}.`,
|
|
374
|
+
`Re-run \`peaks workspace init --project <path>\` to bind a fresh session.`
|
|
375
|
+
]), options.json);
|
|
376
|
+
process.exitCode = 1;
|
|
377
|
+
return;
|
|
378
|
+
}
|
|
379
|
+
// Slice 2026-06-29-change-id-root-removal: the
|
|
380
|
+
// `LegacyChangeIdBindingError` catch branch is gone — the change-id
|
|
381
|
+
// binding file at `.peaks/_runtime/current-change` is no longer
|
|
382
|
+
// written by init, so there is no legacy binding to detect.
|
|
383
|
+
printResult(io, fail('workspace.init', 'WORKSPACE_INIT_FAILED', getErrorMessage(error), { projectRoot: options.project, sessionId: options.sessionId }, ['Verify the project path exists and is writable']), options.json);
|
|
384
|
+
process.exitCode = 1;
|
|
385
|
+
}
|
|
386
|
+
});
|
|
387
|
+
}
|
|
388
|
+
/**
|
|
389
|
+
* Resolve the first-time "install peaks hooks" decision for this project.
|
|
390
|
+
* Decision tree:
|
|
391
|
+
*
|
|
392
|
+
* 1. Read the sticky marker.
|
|
393
|
+
* - Marker present:
|
|
394
|
+
* - marker.decision === 'installed' AND hooks are present → action: marker-honored, no side effects
|
|
395
|
+
* - marker.decision === 'installed' AND hooks are MISSING → re-install, action: reinstalled
|
|
396
|
+
* - marker.decision === 'skipped' → action: marker-honored, no install
|
|
397
|
+
* - Marker absent:
|
|
398
|
+
* - hooks already present → write a fresh 'installed' marker, action: already-installed
|
|
399
|
+
* - otherwise:
|
|
400
|
+
* - explicit --install-hooks=auto → install + marker, action: first-decision
|
|
401
|
+
* - explicit --install-hooks=skip → marker only, action: first-decision
|
|
402
|
+
* - explicit --install-hooks=ask OR default in TTY:
|
|
403
|
+
* - jsonMode → silently auto-install (LLM cannot answer), action: first-decision
|
|
404
|
+
* - TTY → prompt; on yes install + marker, on no marker-only
|
|
405
|
+
* - default in non-TTY → auto-install, action: first-decision
|
|
406
|
+
*
|
|
407
|
+
* Project scope is the only supported scope here; global scope is reserved
|
|
408
|
+
* for explicit `peaks hooks install --global` invocations.
|
|
409
|
+
*/
|
|
410
|
+
export async function resolveFirstTimeHooksInstall(options) {
|
|
411
|
+
const { projectRoot, jsonMode } = options;
|
|
412
|
+
const existingMarker = readDecisionMarker(projectRoot);
|
|
413
|
+
// readHookStatus can throw (e.g. .claude is a symlink → safety check rejects).
|
|
414
|
+
// Treat any throw as "hooks status unknown → treat as not-installed" so the
|
|
415
|
+
// function still reaches the install path; the install will surface the same
|
|
416
|
+
// error in a more specific reason field.
|
|
417
|
+
let hookStatus;
|
|
418
|
+
try {
|
|
419
|
+
hookStatus = readHookStatus('project', projectRoot);
|
|
420
|
+
}
|
|
421
|
+
catch (error) {
|
|
422
|
+
hookStatus = { installed: false };
|
|
423
|
+
// Fall through to the install path; the failure will be captured below.
|
|
424
|
+
void error;
|
|
425
|
+
}
|
|
426
|
+
if (existingMarker !== null) {
|
|
427
|
+
if (existingMarker.decision === 'installed' && !hookStatus.installed) {
|
|
428
|
+
try {
|
|
429
|
+
applyHookInstall('project', projectRoot);
|
|
430
|
+
return { decision: 'installed', action: 'reinstalled', scope: 'project', reason: 'marker-said-installed-hooks-missing' };
|
|
431
|
+
}
|
|
432
|
+
catch (error) {
|
|
433
|
+
return { decision: existingMarker.decision, action: 'marker-honored', scope: 'project', reason: `reinstall-failed: ${getErrorMessage(error)}` };
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
return { decision: existingMarker.decision, action: 'marker-honored', scope: existingMarker.scope };
|
|
437
|
+
}
|
|
438
|
+
// No marker yet — first decision.
|
|
439
|
+
if (hookStatus.installed) {
|
|
440
|
+
writeDecisionMarker(projectRoot, 'installed');
|
|
441
|
+
return { decision: 'installed', action: 'already-installed', scope: 'project' };
|
|
442
|
+
}
|
|
443
|
+
// Determine effective mode (explicit flag wins; default depends on TTY + jsonMode).
|
|
444
|
+
const explicitMode = options.explicitMode;
|
|
445
|
+
const effectiveMode = explicitMode ??
|
|
446
|
+
(jsonMode ? 'auto' : (process.stdin.isTTY === true ? 'ask' : 'auto'));
|
|
447
|
+
if (effectiveMode === 'skip') {
|
|
448
|
+
writeDecisionMarker(projectRoot, 'skipped');
|
|
449
|
+
return { decision: 'skipped', action: 'first-decision', scope: 'project', reason: 'explicit-skip' };
|
|
450
|
+
}
|
|
451
|
+
if (effectiveMode === 'auto' || jsonMode) {
|
|
452
|
+
// The reason code distinguishes the path the user took to reach auto-install:
|
|
453
|
+
// - explicit-auto: user passed --install-hooks=auto
|
|
454
|
+
// - json-mode: no --install-hooks flag, but --json was set
|
|
455
|
+
// - non-tty-default: no flag, no --json, stdin is not a TTY
|
|
456
|
+
let autoReason;
|
|
457
|
+
if (explicitMode === 'auto') {
|
|
458
|
+
autoReason = 'explicit-auto';
|
|
459
|
+
}
|
|
460
|
+
else if (jsonMode) {
|
|
461
|
+
autoReason = 'json-mode';
|
|
462
|
+
}
|
|
463
|
+
else {
|
|
464
|
+
autoReason = 'non-tty-default';
|
|
465
|
+
}
|
|
466
|
+
try {
|
|
467
|
+
applyHookInstall('project', projectRoot);
|
|
468
|
+
writeDecisionMarker(projectRoot, 'installed');
|
|
469
|
+
return { decision: 'installed', action: 'first-decision', scope: 'project', reason: autoReason };
|
|
470
|
+
}
|
|
471
|
+
catch (error) {
|
|
472
|
+
// Auto-install failed: still record the decision so we do not keep retrying
|
|
473
|
+
// every workspace init. The user can fix the underlying problem and run
|
|
474
|
+
// `peaks hooks install` manually.
|
|
475
|
+
writeDecisionMarker(projectRoot, 'installed');
|
|
476
|
+
return { decision: 'installed', action: 'first-decision', scope: 'project', reason: `install-failed: ${getErrorMessage(error)}` };
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
// effectiveMode === 'ask' AND TTY: prompt once.
|
|
480
|
+
process.stderr.write('\nPeaks-Cli: install the PreToolUse hooks for this project now?\n' +
|
|
481
|
+
' → Bash matcher: `peaks gate enforce` (SOP gate enforcement)\n' +
|
|
482
|
+
'The gate-enforce hook runs on every Claude Code tool call without further prompting. The decision is sticky\n' +
|
|
483
|
+
'(recorded in .peaks/.peaks-init-hooks-decision.json) and re-runs of `workspace init` will\n' +
|
|
484
|
+
'honour it. Re-run with --install-hooks=skip or --install-hooks=auto to override.\n\n' +
|
|
485
|
+
'Install now? [Y/n]: ');
|
|
486
|
+
const answer = await promptYesNo('');
|
|
487
|
+
if (answer === null) {
|
|
488
|
+
// TTY disappeared mid-prompt (rare): treat as skip + write marker.
|
|
489
|
+
writeDecisionMarker(projectRoot, 'skipped');
|
|
490
|
+
return { decision: 'skipped', action: 'first-decision', scope: 'project', reason: 'tty-prompt-aborted' };
|
|
491
|
+
}
|
|
492
|
+
if (!answer) {
|
|
493
|
+
writeDecisionMarker(projectRoot, 'skipped');
|
|
494
|
+
return { decision: 'skipped', action: 'first-decision', scope: 'project', reason: 'user-answered-no' };
|
|
495
|
+
}
|
|
496
|
+
try {
|
|
497
|
+
applyHookInstall('project', projectRoot);
|
|
498
|
+
writeDecisionMarker(projectRoot, 'installed');
|
|
499
|
+
return { decision: 'installed', action: 'first-decision', scope: 'project', reason: 'user-answered-yes' };
|
|
500
|
+
}
|
|
501
|
+
catch (error) {
|
|
502
|
+
writeDecisionMarker(projectRoot, 'installed');
|
|
503
|
+
return { decision: 'installed', action: 'first-decision', scope: 'project', reason: `install-failed: ${getErrorMessage(error)}` };
|
|
504
|
+
}
|
|
505
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `peaks workspace migrate` — slice 003 (--to-runtime).
|
|
3
|
+
*
|
|
4
|
+
* Extracted from `src/cli/commands/workspace-commands.ts` (slice
|
|
5
|
+
* 2026-06-16-workspace-commands-split) to keep that entry file under the
|
|
6
|
+
* 800-line Karpathy cap. Migrates legacy `.peaks/_runtime/<sid>/<role>/<file>`
|
|
7
|
+
* into the new `.peaks/retrospective/<change-id>/<role>/<file>` layout.
|
|
8
|
+
*/
|
|
9
|
+
import type { Command } from 'commander';
|
|
10
|
+
import { type ProgramIO } from '../../cli-helpers.js';
|
|
11
|
+
export declare function registerWorkspaceMigrateCommand(workspace: Command, io: ProgramIO): void;
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `peaks workspace migrate` — slice 003 (--to-runtime).
|
|
3
|
+
*
|
|
4
|
+
* Extracted from `src/cli/commands/workspace-commands.ts` (slice
|
|
5
|
+
* 2026-06-16-workspace-commands-split) to keep that entry file under the
|
|
6
|
+
* 800-line Karpathy cap. Migrates legacy `.peaks/_runtime/<sid>/<role>/<file>`
|
|
7
|
+
* into the new `.peaks/retrospective/<change-id>/<role>/<file>` layout.
|
|
8
|
+
*/
|
|
9
|
+
import { migrateWorkspace } from '../../../services/workspace/migrate-service.js';
|
|
10
|
+
import { resolveCanonicalProjectRoot } from '../../../services/config/config-service.js';
|
|
11
|
+
import { fail, ok } from '../../../shared/result.js';
|
|
12
|
+
import { addJsonOption, getErrorMessage, printResult } from '../../cli-helpers.js';
|
|
13
|
+
export function registerWorkspaceMigrateCommand(workspace, io) {
|
|
14
|
+
addJsonOption(workspace
|
|
15
|
+
.command('migrate')
|
|
16
|
+
.description('Migrate legacy `.peaks/_runtime/<session-id>/<role>/<file>` content into the new layout: ' +
|
|
17
|
+
'`.peaks/retrospective/<change-id>/<role>/<file>`. Each file is routed by a 4-tier ' +
|
|
18
|
+
'change-id resolver (filename regex → content H1 → body frontmatter → per-session fallback ' +
|
|
19
|
+
'to the most recent rd/requests entry). Cross-cutting files (project-scan, perf-baseline) ' +
|
|
20
|
+
'and transient runtime files (session.json, system/) are skipped with reasons in the ' +
|
|
21
|
+
'response. By default the command is a dry-run: it reports the planned moves + conflicts ' +
|
|
22
|
+
'and the session dirs that WOULD be deleted. Pass --apply to actually `git mv` the files ' +
|
|
23
|
+
'and `rm -rf` the emptied session dirs. Idempotent: re-running on an already-migrated tree ' +
|
|
24
|
+
'is a no-op (all files report conflicts with identical content).' +
|
|
25
|
+
'\n\nSlice 003 (--to-runtime): moves every top-level `.peaks/_runtime/<sid>/` to `.peaks/_runtime/<sid>/` ' +
|
|
26
|
+
'for projects still on the pre-runtime-layer layout. Idempotent: re-running on a tree ' +
|
|
27
|
+
'that is already canonical is a no-op. F15 carve-out: top-level `rd/project-scan.md` is ' +
|
|
28
|
+
'never overwritten when the runtime copy already exists with different content.')
|
|
29
|
+
.requiredOption('--project <path>', 'target project root')
|
|
30
|
+
.option('--apply', 'actually `git mv` the files and delete the emptied session dirs (destructive); without it, dry-run only', false)
|
|
31
|
+
.option('--to-runtime', 'slice 003: also consolidate every top-level .peaks/_runtime/<sid>/ dir into .peaks/_runtime/<sid>/. Idempotent; conflicts are logged but never overwrite.', false)).action(async (options) => {
|
|
32
|
+
try {
|
|
33
|
+
const projectRoot = resolveCanonicalProjectRoot(options.project);
|
|
34
|
+
const apply = options.apply === true;
|
|
35
|
+
const toRuntime = options.toRuntime === true;
|
|
36
|
+
const result = await migrateWorkspace({ projectRoot, apply, toRuntime });
|
|
37
|
+
const warnings = [];
|
|
38
|
+
if (result.sessions.length === 0 && (result.toRuntimePlans?.length ?? 0) === 0) {
|
|
39
|
+
warnings.push('No legacy session directories found under .peaks/. Nothing to migrate.');
|
|
40
|
+
}
|
|
41
|
+
else if (result.wouldMove.length === 0 && (result.toRuntimePlans?.length ?? 0) === 0) {
|
|
42
|
+
warnings.push('Legacy session dirs found but no reviewable content to migrate (all files were cross-cutting or transient).');
|
|
43
|
+
}
|
|
44
|
+
const nextActions = [];
|
|
45
|
+
if (!apply && result.wouldMove.length > 0) {
|
|
46
|
+
nextActions.push(`Re-run with --apply to perform ${result.wouldMove.length} move(s) and delete ${result.wouldDeleteSessions.length} session dir(s).`);
|
|
47
|
+
}
|
|
48
|
+
if (result.conflicts.length > 0) {
|
|
49
|
+
nextActions.push(`${result.conflicts.length} file(s) already exist at the target path; review before --apply (or re-run after a partial migrate).`);
|
|
50
|
+
}
|
|
51
|
+
if (toRuntime) {
|
|
52
|
+
const plans = result.toRuntimePlans ?? [];
|
|
53
|
+
if (apply) {
|
|
54
|
+
if ((result.toRuntimeMoved?.length ?? 0) > 0) {
|
|
55
|
+
nextActions.push(`Moved ${result.toRuntimeMoved?.length} top-level session dir(s) to .peaks/_runtime/ (slice 003 --to-runtime).`);
|
|
56
|
+
}
|
|
57
|
+
if ((result.toRuntimeConflicts?.length ?? 0) > 0) {
|
|
58
|
+
nextActions.push(`${result.toRuntimeConflicts?.length} --to-runtime conflict(s) — see response. ${plans.filter((p) => p.action === 'f15-conflict-project-scan').length} are F15 carve-outs (deferred to a separate slice).`);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
const wouldMoveCount = plans.filter((p) => p.action === 'moved').length;
|
|
63
|
+
const wouldSkipCount = plans.filter((p) => p.action === 'skipped-already-canonical').length;
|
|
64
|
+
if (wouldMoveCount > 0) {
|
|
65
|
+
nextActions.push(`Re-run with --apply to move ${wouldMoveCount} top-level session dir(s) to .peaks/_runtime/; ${wouldSkipCount} already canonical.`);
|
|
66
|
+
}
|
|
67
|
+
else if (wouldSkipCount > 0) {
|
|
68
|
+
nextActions.push(`All ${wouldSkipCount} top-level session dir(s) are already canonical — no moves needed.`);
|
|
69
|
+
}
|
|
70
|
+
const f15Count = plans.filter((p) => p.action === 'f15-conflict-project-scan').length;
|
|
71
|
+
if (f15Count > 0) {
|
|
72
|
+
nextActions.push(`${f15Count} F15 carve-out conflict(s) (rd/project-scan.md differs from runtime copy) — see response.`);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
if (apply) {
|
|
77
|
+
if (result.moved.length > 0) {
|
|
78
|
+
nextActions.push(`Migrated ${result.moved.length} file(s) into .peaks/retrospective/.`);
|
|
79
|
+
}
|
|
80
|
+
if (result.deletedSessions.length > 0) {
|
|
81
|
+
nextActions.push(`Deleted ${result.deletedSessions.length} emptied session dir(s).`);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
printResult(io, ok('workspace.migrate', result, warnings, nextActions), options.json ?? false);
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
printResult(io, fail('workspace.migrate', 'WORKSPACE_MIGRATE_FAILED', getErrorMessage(error), { projectRoot: options.project }, ['Verify the project path exists and is writable']), options.json ?? false);
|
|
88
|
+
process.exitCode = 1;
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `peaks workspace reconcile` — slice 006 + slice 0.5.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from `src/cli/commands/workspace-commands.ts` (slice
|
|
5
|
+
* 2026-06-16-workspace-commands-split) to keep that entry file under the
|
|
6
|
+
* 800-line Karpathy cap. Scans the legacy 2026-MM-DD-session dirs and
|
|
7
|
+
* consolidates the runtime state.
|
|
8
|
+
*
|
|
9
|
+
* Migration (1), repoint (2), and marker sync (3) always run regardless
|
|
10
|
+
* of `--apply`. Deletion of old session dirs is dry-run by default.
|
|
11
|
+
*/
|
|
12
|
+
import type { Command } from 'commander';
|
|
13
|
+
import { type ProgramIO } from '../../cli-helpers.js';
|
|
14
|
+
export declare function registerWorkspaceReconcileCommand(workspace: Command, io: ProgramIO): void;
|