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,150 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* peaks-prd project-scan reader — v2.11.0 (D3 in
|
|
3
|
+
* `v2-11-rm-rd-techdoc-immutable-handoff`).
|
|
4
|
+
*
|
|
5
|
+
* Reads the git-tracked project-level artifacts at
|
|
6
|
+
* `.peaks/project-scan/{project-scan.md, business-knowledge.md}`.
|
|
7
|
+
*
|
|
8
|
+
* Both readers swallow `ENOENT` (return `null`) — peaks-prd's gate
|
|
9
|
+
* uses the `null` return to decide whether to bootstrap. Other IO
|
|
10
|
+
* errors propagate (no silent failures).
|
|
11
|
+
*/
|
|
12
|
+
import { readFile } from 'node:fs/promises';
|
|
13
|
+
import { join } from 'node:path';
|
|
14
|
+
import { parse as parseYaml } from 'yaml';
|
|
15
|
+
const PROJECT_SCAN_RELATIVE = join('.peaks', 'project-scan', 'project-scan.md');
|
|
16
|
+
const BUSINESS_KNOWLEDGE_RELATIVE = join('.peaks', 'project-scan', 'business-knowledge.md');
|
|
17
|
+
/** Read `.peaks/project-scan/project-scan.md`. Returns `null` when the
|
|
18
|
+
* file or its parent dir is absent (fresh project). Throws on other
|
|
19
|
+
* IO failures or malformed YAML. */
|
|
20
|
+
export async function readProjectScan(projectRoot) {
|
|
21
|
+
const content = await readOptionalFile(projectRoot, PROJECT_SCAN_RELATIVE);
|
|
22
|
+
if (content === null)
|
|
23
|
+
return null;
|
|
24
|
+
return parseProjectScanContent(content);
|
|
25
|
+
}
|
|
26
|
+
/** Read `.peaks/project-scan/business-knowledge.md`. Returns `null`
|
|
27
|
+
* when absent. Throws on other IO failures or malformed YAML. */
|
|
28
|
+
export async function readBusinessKnowledge(projectRoot) {
|
|
29
|
+
const content = await readOptionalFile(projectRoot, BUSINESS_KNOWLEDGE_RELATIVE);
|
|
30
|
+
if (content === null)
|
|
31
|
+
return null;
|
|
32
|
+
return parseBusinessKnowledgeContent(content);
|
|
33
|
+
}
|
|
34
|
+
/** Read the raw markdown content of a project-scan file. Returns
|
|
35
|
+
* `null` when absent. Used by bootstrap flows (peaks-prd Step 0.8
|
|
36
|
+
* first-run templates). */
|
|
37
|
+
export async function readProjectScanRaw(projectRoot) {
|
|
38
|
+
return readOptionalFile(projectRoot, PROJECT_SCAN_RELATIVE);
|
|
39
|
+
}
|
|
40
|
+
export async function readBusinessKnowledgeRaw(projectRoot) {
|
|
41
|
+
return readOptionalFile(projectRoot, BUSINESS_KNOWLEDGE_RELATIVE);
|
|
42
|
+
}
|
|
43
|
+
// ── internal helpers ─────────────────────────────────────────────────
|
|
44
|
+
async function readOptionalFile(projectRoot, relativePath) {
|
|
45
|
+
const absolutePath = join(projectRoot, relativePath);
|
|
46
|
+
try {
|
|
47
|
+
return await readFile(absolutePath, 'utf8');
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
if (isEnoent(error))
|
|
51
|
+
return null;
|
|
52
|
+
throw error;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
function isEnoent(error) {
|
|
56
|
+
return (typeof error === 'object' &&
|
|
57
|
+
error !== null &&
|
|
58
|
+
'code' in error &&
|
|
59
|
+
error.code === 'ENOENT');
|
|
60
|
+
}
|
|
61
|
+
function parseProjectScanContent(content) {
|
|
62
|
+
const { frontmatter } = splitFrontmatter(content);
|
|
63
|
+
let parsed;
|
|
64
|
+
try {
|
|
65
|
+
parsed = parseYaml(frontmatter);
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
69
|
+
throw new Error(`project-scan: frontmatter YAML parse failed: ${message}`);
|
|
70
|
+
}
|
|
71
|
+
if (!isProjectScan(parsed)) {
|
|
72
|
+
throw new Error('project-scan: frontmatter shape validation failed');
|
|
73
|
+
}
|
|
74
|
+
return parsed;
|
|
75
|
+
}
|
|
76
|
+
function parseBusinessKnowledgeContent(content) {
|
|
77
|
+
const { frontmatter, body } = splitFrontmatter(content);
|
|
78
|
+
let parsed;
|
|
79
|
+
try {
|
|
80
|
+
parsed = parseYaml(frontmatter);
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
84
|
+
throw new Error(`business-knowledge: frontmatter YAML parse failed: ${message}`);
|
|
85
|
+
}
|
|
86
|
+
if (!isBusinessKnowledgeFrontmatter(parsed)) {
|
|
87
|
+
throw new Error('business-knowledge: frontmatter shape validation failed');
|
|
88
|
+
}
|
|
89
|
+
// Concepts live in the markdown TABLE in the body (not in the frontmatter
|
|
90
|
+
// YAML). The bootstrap template writes the table for human readability; the
|
|
91
|
+
// sediment step (Group C, Tier 5) appends new rows to the same table.
|
|
92
|
+
const concepts = parseConceptsFromMarkdownTable(body);
|
|
93
|
+
return { schemaVersion: 1, concepts };
|
|
94
|
+
}
|
|
95
|
+
/** Parse the markdown table rows under `# Business Knowledge` (or any H1).
|
|
96
|
+
* Each row MUST have 5 cells: Concept | Definition | Source | Decided | Evidence.
|
|
97
|
+
* Throws on rows that don't match the shape (we never silently drop a row). */
|
|
98
|
+
function parseConceptsFromMarkdownTable(body) {
|
|
99
|
+
const lines = body.split(/\r?\n/);
|
|
100
|
+
const tableLines = lines.filter((line) => /^\s*\|/.test(line));
|
|
101
|
+
if (tableLines.length < 2) {
|
|
102
|
+
// No table at all (fresh file). Return empty; sediment writer will append.
|
|
103
|
+
return [];
|
|
104
|
+
}
|
|
105
|
+
// First row = header, second row = separator (---|---|---). Skip both.
|
|
106
|
+
const dataRows = tableLines.slice(2);
|
|
107
|
+
const concepts = [];
|
|
108
|
+
for (const row of dataRows) {
|
|
109
|
+
const cells = row
|
|
110
|
+
.split('|')
|
|
111
|
+
.map((cell) => cell.trim())
|
|
112
|
+
.filter((cell, idx, arr) => !(idx === 0 && cell === '') && !(idx === arr.length - 1 && cell === ''));
|
|
113
|
+
if (cells.length < 5)
|
|
114
|
+
continue;
|
|
115
|
+
const [concept, definition, sourceRid, decidedAt, evidence] = cells;
|
|
116
|
+
if (!concept || !definition || !sourceRid || !decidedAt || !evidence)
|
|
117
|
+
continue;
|
|
118
|
+
concepts.push({ concept, definition, sourceRid, decidedAt, evidence });
|
|
119
|
+
}
|
|
120
|
+
return concepts;
|
|
121
|
+
}
|
|
122
|
+
function splitFrontmatter(content) {
|
|
123
|
+
const match = /^---\n([\s\S]*?)\n---(?:\n([\s\S]*))?$/.exec(content);
|
|
124
|
+
if (!match) {
|
|
125
|
+
throw new Error('frontmatter block missing or malformed');
|
|
126
|
+
}
|
|
127
|
+
return { frontmatter: match[1] ?? '', body: match[2] ?? '' };
|
|
128
|
+
}
|
|
129
|
+
function isProjectScan(value) {
|
|
130
|
+
if (!value || typeof value !== 'object')
|
|
131
|
+
return false;
|
|
132
|
+
const v = value;
|
|
133
|
+
return (v.schemaVersion === 1 &&
|
|
134
|
+
typeof v.capturedAt === 'string' &&
|
|
135
|
+
!!v.techStack &&
|
|
136
|
+
typeof v.techStack === 'object' &&
|
|
137
|
+
!!v.libraryVersions &&
|
|
138
|
+
typeof v.libraryVersions === 'object' &&
|
|
139
|
+
typeof v.architecture === 'string' &&
|
|
140
|
+
!!v.karpathySelfCheck &&
|
|
141
|
+
typeof v.karpathySelfCheck === 'object');
|
|
142
|
+
}
|
|
143
|
+
function isBusinessKnowledgeFrontmatter(value) {
|
|
144
|
+
if (!value || typeof value !== 'object')
|
|
145
|
+
return false;
|
|
146
|
+
const v = value;
|
|
147
|
+
// Frontmatter only carries `schemaVersion: 1`; concepts live in the
|
|
148
|
+
// markdown table in the body (see parseConceptsFromMarkdownTable).
|
|
149
|
+
return v.schemaVersion === 1;
|
|
150
|
+
}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import type { BusinessConcept } from './project-scan-types.js';
|
|
2
|
+
export interface SedimentAppendOptions {
|
|
3
|
+
readonly projectRoot: string;
|
|
4
|
+
readonly concept: BusinessConcept;
|
|
5
|
+
}
|
|
6
|
+
export interface SedimentAppendResult {
|
|
7
|
+
/** `true` when the file was rewritten; `false` when the (concept, sourceRid) tuple was already present. */
|
|
8
|
+
readonly written: boolean;
|
|
9
|
+
/** `true` when a new file was created (vs. appended to an existing file). */
|
|
10
|
+
readonly created: boolean;
|
|
11
|
+
/** Total concept rows after the operation. */
|
|
12
|
+
readonly totalConcepts: number;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Single row of the audit-template inventory tables. The 4-tuple shape
|
|
16
|
+
* mirrors the table layout in `.peaks/project-scan/{security-template,
|
|
17
|
+
* perf-template, audit-output-schema}.md`:
|
|
18
|
+
*
|
|
19
|
+
* security-template.md Known risks inventory Risk pattern
|
|
20
|
+
* perf-template.md Known baselines inventory Baseline description
|
|
21
|
+
* audit-output-schema.md Known schema variants Variant description
|
|
22
|
+
*
|
|
23
|
+
* The `status` enum follows each template's own status vocabulary:
|
|
24
|
+
* - security: active | mitigated | accepted | deprecated
|
|
25
|
+
* - perf: active | superseded | deprecated
|
|
26
|
+
* - audit-schema: active | superseded | deprecated
|
|
27
|
+
*
|
|
28
|
+
* Callers pass the field set appropriate for the table they're
|
|
29
|
+
* appending to; the writer does not enforce which `status` values are
|
|
30
|
+
* legal (the audit skill that wrote the row is authoritative).
|
|
31
|
+
*/
|
|
32
|
+
export interface AuditPatternRow {
|
|
33
|
+
/** Natural-language description of the pattern (the second column). */
|
|
34
|
+
readonly value: string;
|
|
35
|
+
/** Request-id that first surfaced / established the pattern. */
|
|
36
|
+
readonly sourceRid: string;
|
|
37
|
+
/** Human-readable source pointer (e.g. memory file path). */
|
|
38
|
+
readonly source: string;
|
|
39
|
+
/** Status enum value (template-specific — see docstring above). */
|
|
40
|
+
readonly status: string;
|
|
41
|
+
}
|
|
42
|
+
export interface AuditPatternAppendOptions {
|
|
43
|
+
readonly projectRoot: string;
|
|
44
|
+
readonly row: AuditPatternRow;
|
|
45
|
+
}
|
|
46
|
+
export interface AuditPatternAppendResult {
|
|
47
|
+
/** `true` when the file was rewritten; `false` when the (value, sourceRid) tuple was already present. */
|
|
48
|
+
readonly written: boolean;
|
|
49
|
+
/** `true` when a new file was created (vs. appended to an existing file). */
|
|
50
|
+
readonly created: boolean;
|
|
51
|
+
/** Auto-incremented row number assigned to the new row. */
|
|
52
|
+
readonly assignedIndex: number;
|
|
53
|
+
/** Total inventory rows after the operation (excludes the placeholder `| (empty) |` row). */
|
|
54
|
+
readonly totalRows: number;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Append (or create) a business concept row in
|
|
58
|
+
* `.peaks/project-scan/business-knowledge.md`.
|
|
59
|
+
*
|
|
60
|
+
* Idempotency contract (matches the bootstrap file's design intent):
|
|
61
|
+
* - same `(concept, sourceRid)` tuple → skip (return `written: false`)
|
|
62
|
+
* - same `concept`, DIFFERENT `sourceRid` → append (re-definition from a new source)
|
|
63
|
+
* - new concept → append
|
|
64
|
+
*
|
|
65
|
+
* Throws when the existing file has malformed frontmatter or markdown
|
|
66
|
+
* table (no silent corruption). Caller should fix the file before retrying.
|
|
67
|
+
*/
|
|
68
|
+
export declare function appendBusinessConcept(opts: SedimentAppendOptions): Promise<SedimentAppendResult>;
|
|
69
|
+
/**
|
|
70
|
+
* Append (or create) a security-audit risk-pattern row in
|
|
71
|
+
* `.peaks/project-scan/security-template.md` "Known risks inventory".
|
|
72
|
+
*
|
|
73
|
+
* The on-disk format is a 5-column markdown table (auto-incremented `#`
|
|
74
|
+
* + 4 string fields). Idempotency: same `(value, sourceRid)` tuple is a
|
|
75
|
+
* no-op; the frontmatter is preserved verbatim. The first append replaces
|
|
76
|
+
* the `| (empty) |` placeholder row; subsequent appends go after the
|
|
77
|
+
* table footer.
|
|
78
|
+
*/
|
|
79
|
+
export declare function appendSecurityPattern(opts: AuditPatternAppendOptions): Promise<AuditPatternAppendResult>;
|
|
80
|
+
/**
|
|
81
|
+
* Append (or create) a perf-audit baseline row in
|
|
82
|
+
* `.peaks/project-scan/perf-template.md` "Known baselines inventory".
|
|
83
|
+
*
|
|
84
|
+
* Same contract as `appendSecurityPattern` (5-column markdown table,
|
|
85
|
+
* auto-incremented `#`, idempotent on `(value, sourceRid)`,
|
|
86
|
+
* frontmatter preserved verbatim).
|
|
87
|
+
*/
|
|
88
|
+
export declare function appendPerfPattern(opts: AuditPatternAppendOptions): Promise<AuditPatternAppendResult>;
|
|
89
|
+
/**
|
|
90
|
+
* Append (or create) an audit-output-schema variant row in
|
|
91
|
+
* `.peaks/project-scan/audit-output-schema.md` "Known schema variants".
|
|
92
|
+
*
|
|
93
|
+
* Same contract as `appendSecurityPattern` (5-column markdown table,
|
|
94
|
+
* auto-incremented `#`, idempotent on `(value, sourceRid)`,
|
|
95
|
+
* frontmatter preserved verbatim).
|
|
96
|
+
*/
|
|
97
|
+
export declare function appendAuditSchemaVariant(opts: AuditPatternAppendOptions): Promise<AuditPatternAppendResult>;
|
|
@@ -0,0 +1,445 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* peaks-prd project-scan sediment writer — v2.11.0 D3 (Group C, Tier 5) +
|
|
3
|
+
* v2.12.0 Group C Tier 6 (audit inventory sediment).
|
|
4
|
+
*
|
|
5
|
+
* Appends new business concepts to
|
|
6
|
+
* `.peaks/project-scan/business-knowledge.md` AND new audit-inventory
|
|
7
|
+
* rows to the three v2.12.0 audit templates (security-template.md /
|
|
8
|
+
* perf-template.md / audit-output-schema.md). Idempotent on the
|
|
9
|
+
* `(concept, sourceRid)` tuple for `appendBusinessConcept` and on the
|
|
10
|
+
* `(value, sourceRid)` tuple for the three audit-inventory appenders —
|
|
11
|
+
* re-running with the same input does not duplicate.
|
|
12
|
+
*
|
|
13
|
+
* The on-disk format mirrors the bootstrap templates: a YAML
|
|
14
|
+
* frontmatter carrying `schemaVersion: 1` (with `templateKind` for the
|
|
15
|
+
* audit templates) plus a markdown table in the body whose rows are the
|
|
16
|
+
* sediment tuples. The table format is human-readable (grep-friendly).
|
|
17
|
+
*
|
|
18
|
+
* The audit-template tables are **append-only inventories** (slice
|
|
19
|
+
* v2.12.0 audit-template design): the `#` column is auto-incremented,
|
|
20
|
+
* the body of the file is not re-rendered wholesale — the writer
|
|
21
|
+
* locates the placeholder row `| (empty) |` and replaces it with the
|
|
22
|
+
* first real row, then appends subsequent rows after the table.
|
|
23
|
+
*
|
|
24
|
+
* Companion to `project-scan-reader.ts`. The reader and the writer
|
|
25
|
+
* agree on the same on-disk format for `business-knowledge.md`. The
|
|
26
|
+
* three audit-inventory writers preserve the frontmatter verbatim and
|
|
27
|
+
* use a generic internal row parser (not a typed reader) — those
|
|
28
|
+
* tables are write-mostly and not consumed by `readBusinessKnowledge`.
|
|
29
|
+
*/
|
|
30
|
+
import { mkdir, readFile, writeFile } from 'node:fs/promises';
|
|
31
|
+
import { dirname, join } from 'node:path';
|
|
32
|
+
import { readBusinessKnowledge } from './project-scan-reader.js';
|
|
33
|
+
const BUSINESS_KNOWLEDGE_RELATIVE = join('.peaks', 'project-scan', 'business-knowledge.md');
|
|
34
|
+
const SECURITY_TEMPLATE_RELATIVE = join('.peaks', 'project-scan', 'security-template.md');
|
|
35
|
+
const PERF_TEMPLATE_RELATIVE = join('.peaks', 'project-scan', 'perf-template.md');
|
|
36
|
+
const AUDIT_OUTPUT_SCHEMA_RELATIVE = join('.peaks', 'project-scan', 'audit-output-schema.md');
|
|
37
|
+
/**
|
|
38
|
+
* Append (or create) a business concept row in
|
|
39
|
+
* `.peaks/project-scan/business-knowledge.md`.
|
|
40
|
+
*
|
|
41
|
+
* Idempotency contract (matches the bootstrap file's design intent):
|
|
42
|
+
* - same `(concept, sourceRid)` tuple → skip (return `written: false`)
|
|
43
|
+
* - same `concept`, DIFFERENT `sourceRid` → append (re-definition from a new source)
|
|
44
|
+
* - new concept → append
|
|
45
|
+
*
|
|
46
|
+
* Throws when the existing file has malformed frontmatter or markdown
|
|
47
|
+
* table (no silent corruption). Caller should fix the file before retrying.
|
|
48
|
+
*/
|
|
49
|
+
export async function appendBusinessConcept(opts) {
|
|
50
|
+
const existing = await readBusinessKnowledge(opts.projectRoot);
|
|
51
|
+
const absolutePath = join(opts.projectRoot, BUSINESS_KNOWLEDGE_RELATIVE);
|
|
52
|
+
if (existing === null) {
|
|
53
|
+
const fresh = {
|
|
54
|
+
schemaVersion: 1,
|
|
55
|
+
concepts: [opts.concept]
|
|
56
|
+
};
|
|
57
|
+
await writeBusinessKnowledgeFile(absolutePath, fresh);
|
|
58
|
+
return { written: true, created: true, totalConcepts: 1 };
|
|
59
|
+
}
|
|
60
|
+
const duplicateIndex = existing.concepts.findIndex((c) => c.concept === opts.concept.concept && c.sourceRid === opts.concept.sourceRid);
|
|
61
|
+
if (duplicateIndex >= 0) {
|
|
62
|
+
return {
|
|
63
|
+
written: false,
|
|
64
|
+
created: false,
|
|
65
|
+
totalConcepts: existing.concepts.length
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
const updated = {
|
|
69
|
+
schemaVersion: 1,
|
|
70
|
+
concepts: [...existing.concepts, opts.concept]
|
|
71
|
+
};
|
|
72
|
+
await writeBusinessKnowledgeFile(absolutePath, updated);
|
|
73
|
+
return {
|
|
74
|
+
written: true,
|
|
75
|
+
created: false,
|
|
76
|
+
totalConcepts: updated.concepts.length
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
// ── internal helpers ─────────────────────────────────────────────────
|
|
80
|
+
async function writeBusinessKnowledgeFile(absolutePath, knowledge) {
|
|
81
|
+
await mkdir(dirname(absolutePath), { recursive: true });
|
|
82
|
+
const body = renderBusinessKnowledgeBody(knowledge);
|
|
83
|
+
await writeFile(absolutePath, body, 'utf8');
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Append (or create) a security-audit risk-pattern row in
|
|
87
|
+
* `.peaks/project-scan/security-template.md` "Known risks inventory".
|
|
88
|
+
*
|
|
89
|
+
* The on-disk format is a 5-column markdown table (auto-incremented `#`
|
|
90
|
+
* + 4 string fields). Idempotency: same `(value, sourceRid)` tuple is a
|
|
91
|
+
* no-op; the frontmatter is preserved verbatim. The first append replaces
|
|
92
|
+
* the `| (empty) |` placeholder row; subsequent appends go after the
|
|
93
|
+
* table footer.
|
|
94
|
+
*/
|
|
95
|
+
export async function appendSecurityPattern(opts) {
|
|
96
|
+
return appendAuditPatternInventory({
|
|
97
|
+
projectRoot: opts.projectRoot,
|
|
98
|
+
relativePath: SECURITY_TEMPLATE_RELATIVE,
|
|
99
|
+
templateKind: 'security-audit',
|
|
100
|
+
tableHeading: 'Known risks inventory',
|
|
101
|
+
columnHeader: 'Risk pattern',
|
|
102
|
+
row: opts.row
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Append (or create) a perf-audit baseline row in
|
|
107
|
+
* `.peaks/project-scan/perf-template.md` "Known baselines inventory".
|
|
108
|
+
*
|
|
109
|
+
* Same contract as `appendSecurityPattern` (5-column markdown table,
|
|
110
|
+
* auto-incremented `#`, idempotent on `(value, sourceRid)`,
|
|
111
|
+
* frontmatter preserved verbatim).
|
|
112
|
+
*/
|
|
113
|
+
export async function appendPerfPattern(opts) {
|
|
114
|
+
return appendAuditPatternInventory({
|
|
115
|
+
projectRoot: opts.projectRoot,
|
|
116
|
+
relativePath: PERF_TEMPLATE_RELATIVE,
|
|
117
|
+
templateKind: 'perf-audit',
|
|
118
|
+
tableHeading: 'Known baselines inventory',
|
|
119
|
+
columnHeader: 'Baseline',
|
|
120
|
+
row: opts.row
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Append (or create) an audit-output-schema variant row in
|
|
125
|
+
* `.peaks/project-scan/audit-output-schema.md` "Known schema variants".
|
|
126
|
+
*
|
|
127
|
+
* Same contract as `appendSecurityPattern` (5-column markdown table,
|
|
128
|
+
* auto-incremented `#`, idempotent on `(value, sourceRid)`,
|
|
129
|
+
* frontmatter preserved verbatim).
|
|
130
|
+
*/
|
|
131
|
+
export async function appendAuditSchemaVariant(opts) {
|
|
132
|
+
return appendAuditPatternInventory({
|
|
133
|
+
projectRoot: opts.projectRoot,
|
|
134
|
+
relativePath: AUDIT_OUTPUT_SCHEMA_RELATIVE,
|
|
135
|
+
templateKind: 'audit-output-schema',
|
|
136
|
+
tableHeading: 'Known schema variants',
|
|
137
|
+
columnHeader: 'Variant',
|
|
138
|
+
row: opts.row
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Generic 5-column inventory-table appender shared by the 3 audit
|
|
143
|
+
* sediment operations. The on-disk shape is:
|
|
144
|
+
*
|
|
145
|
+
* ---
|
|
146
|
+
* schemaVersion: 1
|
|
147
|
+
* templateKind: <templateKind>
|
|
148
|
+
* capturedAt: <ISO 8601>
|
|
149
|
+
* appliesTo: <skill id list>
|
|
150
|
+
* ---
|
|
151
|
+
*
|
|
152
|
+
* # <title>
|
|
153
|
+
*
|
|
154
|
+
* ... preamble ...
|
|
155
|
+
*
|
|
156
|
+
* ## <tableHeading>
|
|
157
|
+
*
|
|
158
|
+
* | # | <columnHeader> | First introduced (rid) | Source | Status |
|
|
159
|
+
* |---|---|---|---|---|
|
|
160
|
+
* | (empty) | — | — | — | — | ← bootstrap placeholder
|
|
161
|
+
*
|
|
162
|
+
* ... post-table prose ...
|
|
163
|
+
*
|
|
164
|
+
* On append:
|
|
165
|
+
* 1. If the file is absent, write a fresh bootstrap with a single
|
|
166
|
+
* `| 1 | <row> | ... |` row (replacing the placeholder).
|
|
167
|
+
* 2. If a row with the same `(value, sourceRid)` tuple already exists,
|
|
168
|
+
* return `written: false` (idempotent no-op).
|
|
169
|
+
* 3. Otherwise:
|
|
170
|
+
* - if the placeholder `| (empty) |` row is present, replace it
|
|
171
|
+
* with the new row using the next auto-incremented index
|
|
172
|
+
* (1, unless other rows already exist);
|
|
173
|
+
* - if the placeholder is absent (i.e. the table has prior rows),
|
|
174
|
+
* append the new row after the last table line.
|
|
175
|
+
*
|
|
176
|
+
* The frontmatter and the surrounding prose are preserved verbatim.
|
|
177
|
+
* Cell escaping mirrors the existing `appendBusinessConcept` policy
|
|
178
|
+
* (pipe → `\|`, newline → space).
|
|
179
|
+
*/
|
|
180
|
+
async function appendAuditPatternInventory(args) {
|
|
181
|
+
const absolutePath = join(args.projectRoot, args.relativePath);
|
|
182
|
+
const existing = await readOptionalFile(absolutePath);
|
|
183
|
+
if (existing === null) {
|
|
184
|
+
const freshBody = renderFreshAuditPatternBody(args);
|
|
185
|
+
await mkdir(dirname(absolutePath), { recursive: true });
|
|
186
|
+
await writeFile(absolutePath, freshBody, 'utf8');
|
|
187
|
+
return { written: true, created: true, assignedIndex: 1, totalRows: 1 };
|
|
188
|
+
}
|
|
189
|
+
const { openMarker, yaml, closeMarker, body } = splitFrontmatterBlock(existing);
|
|
190
|
+
const parsed = parseAuditInventoryTable(body, args.tableHeading);
|
|
191
|
+
if (parsed === null) {
|
|
192
|
+
// Bootstrap table shape not found — the file was hand-edited or is
|
|
193
|
+
// from a pre-2.12.0 source. We do NOT silently corrupt; the caller
|
|
194
|
+
// (peaks-txt sediment step) is expected to surface this.
|
|
195
|
+
throw new Error(`project-scan sediment: ${args.relativePath} is missing the "${args.tableHeading}" table; cannot append`);
|
|
196
|
+
}
|
|
197
|
+
// Idempotency check: same (value, sourceRid) tuple already present.
|
|
198
|
+
const duplicateIndex = parsed.rows.findIndex((r) => r.value === args.row.value && r.sourceRid === args.row.sourceRid);
|
|
199
|
+
if (duplicateIndex >= 0) {
|
|
200
|
+
return {
|
|
201
|
+
written: false,
|
|
202
|
+
created: false,
|
|
203
|
+
assignedIndex: duplicateIndex + 1,
|
|
204
|
+
totalRows: parsed.rows.length
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
const newIndex = parsed.rows.length + 1;
|
|
208
|
+
const newRow = args.row;
|
|
209
|
+
const updatedBody = parsed.hasPlaceholder
|
|
210
|
+
? replacePlaceholderRow(body, args.tableHeading, {
|
|
211
|
+
index: newIndex,
|
|
212
|
+
row: newRow
|
|
213
|
+
})
|
|
214
|
+
: appendRowAfterTable(body, {
|
|
215
|
+
index: newIndex,
|
|
216
|
+
row: newRow
|
|
217
|
+
});
|
|
218
|
+
const next = `${openMarker}\n${yaml}\n${closeMarker}\n${updatedBody}`;
|
|
219
|
+
await writeFile(absolutePath, next, 'utf8');
|
|
220
|
+
return {
|
|
221
|
+
written: true,
|
|
222
|
+
created: false,
|
|
223
|
+
assignedIndex: newIndex,
|
|
224
|
+
totalRows: parsed.rows.length + 1
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
function splitFrontmatterBlock(content) {
|
|
228
|
+
// The audit templates all start with `---\n...\n---\n` followed by
|
|
229
|
+
// body. We re-emit the frontmatter verbatim (no YAML reparse) so we
|
|
230
|
+
// never lose comments or formatting.
|
|
231
|
+
const match = /^---\n([\s\S]*?)\n---\n?([\s\S]*)$/.exec(content);
|
|
232
|
+
if (!match) {
|
|
233
|
+
throw new Error('project-scan sediment: frontmatter block missing or malformed');
|
|
234
|
+
}
|
|
235
|
+
return {
|
|
236
|
+
openMarker: '---',
|
|
237
|
+
yaml: match[1] ?? '',
|
|
238
|
+
closeMarker: '---',
|
|
239
|
+
body: match[2] ?? ''
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Locate the inventory table under the given heading and return its
|
|
244
|
+
* data rows. Returns `null` when the heading is missing (caller should
|
|
245
|
+
* throw). Recognises the bootstrap `| (empty) |` placeholder row but
|
|
246
|
+
* does NOT include it in the returned `rows` array.
|
|
247
|
+
*/
|
|
248
|
+
function parseAuditInventoryTable(body, tableHeading) {
|
|
249
|
+
// Find the H2 heading, then walk forward scanning for the table
|
|
250
|
+
// block. The on-disk format includes a `>` blockquote between the
|
|
251
|
+
// heading and the table (e.g. `> This section is **append-only**...`),
|
|
252
|
+
// so the parser must skip non-`|` lines until the first `|` line,
|
|
253
|
+
// then collect until the next non-`|` line.
|
|
254
|
+
const lines = body.split(/\r?\n/);
|
|
255
|
+
let headingLineIdx = -1;
|
|
256
|
+
for (let i = 0; i < lines.length; i++) {
|
|
257
|
+
if (lines[i]?.trim() === `## ${tableHeading}`) {
|
|
258
|
+
headingLineIdx = i;
|
|
259
|
+
break;
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
if (headingLineIdx === -1) {
|
|
263
|
+
return null;
|
|
264
|
+
}
|
|
265
|
+
const tableLines = [];
|
|
266
|
+
let inTable = false;
|
|
267
|
+
for (let i = headingLineIdx + 1; i < lines.length; i++) {
|
|
268
|
+
const line = lines[i] ?? '';
|
|
269
|
+
if (/^\s*\|/.test(line)) {
|
|
270
|
+
tableLines.push(line);
|
|
271
|
+
inTable = true;
|
|
272
|
+
continue;
|
|
273
|
+
}
|
|
274
|
+
if (inTable) {
|
|
275
|
+
// First non-`|` line after the table starts → table is done.
|
|
276
|
+
break;
|
|
277
|
+
}
|
|
278
|
+
// Otherwise keep scanning past blockquote / blank lines.
|
|
279
|
+
}
|
|
280
|
+
if (tableLines.length < 3) {
|
|
281
|
+
return null;
|
|
282
|
+
}
|
|
283
|
+
// First row = header, second row = separator (---|---|---). Skip both.
|
|
284
|
+
const dataRows = tableLines.slice(2);
|
|
285
|
+
const rows = [];
|
|
286
|
+
let hasPlaceholder = false;
|
|
287
|
+
for (const row of dataRows) {
|
|
288
|
+
const cells = splitTableRow(row);
|
|
289
|
+
if (cells.length < 5)
|
|
290
|
+
continue;
|
|
291
|
+
const [indexCell, value, sourceRid, source, status] = cells;
|
|
292
|
+
if (!indexCell || !value || !sourceRid || !source || !status)
|
|
293
|
+
continue;
|
|
294
|
+
if (value === '(empty)' || value === '—') {
|
|
295
|
+
hasPlaceholder = true;
|
|
296
|
+
continue;
|
|
297
|
+
}
|
|
298
|
+
rows.push({ value, sourceRid, source, status });
|
|
299
|
+
}
|
|
300
|
+
return { rows, hasPlaceholder };
|
|
301
|
+
}
|
|
302
|
+
function splitTableRow(row) {
|
|
303
|
+
return row
|
|
304
|
+
.split('|')
|
|
305
|
+
.map((cell) => cell.trim())
|
|
306
|
+
.filter((cell, idx, arr) => !(idx === 0 && cell === '') && !(idx === arr.length - 1 && cell === ''));
|
|
307
|
+
}
|
|
308
|
+
function renderFreshAuditPatternBody(args) {
|
|
309
|
+
const titleByKind = {
|
|
310
|
+
'security-audit': 'Security Audit Template (peaks-loop v2.12.0)',
|
|
311
|
+
'perf-audit': 'Performance Audit Template (peaks-loop v2.12.0)',
|
|
312
|
+
'audit-output-schema': 'Audit Output Schema (peaks-loop v2.12.0)'
|
|
313
|
+
};
|
|
314
|
+
const appliesToByKind = {
|
|
315
|
+
'security-audit': 'peaks-security-audit skill',
|
|
316
|
+
'perf-audit': 'peaks-perf-audit skill',
|
|
317
|
+
'audit-output-schema': 'peaks-security-audit + peaks-perf-audit'
|
|
318
|
+
};
|
|
319
|
+
return [
|
|
320
|
+
'---',
|
|
321
|
+
'schemaVersion: 1',
|
|
322
|
+
`templateKind: ${args.templateKind}`,
|
|
323
|
+
`capturedAt: 2026-06-27T00:00:00.000Z`,
|
|
324
|
+
`appliesTo: ${appliesToByKind[args.templateKind]}`,
|
|
325
|
+
'---',
|
|
326
|
+
'',
|
|
327
|
+
`# ${titleByKind[args.templateKind]}`,
|
|
328
|
+
'',
|
|
329
|
+
`> **Bootstrap template** for the ${args.tableHeading} table. Appended by \`peaks-txt\` sediment step (v2.12.0 Group C Tier 6).`,
|
|
330
|
+
'',
|
|
331
|
+
`## ${args.tableHeading}`,
|
|
332
|
+
'',
|
|
333
|
+
'> This section is **append-only**. Re-running with the same `(value, sourceRid)` tuple does not duplicate.',
|
|
334
|
+
'',
|
|
335
|
+
`| # | ${args.columnHeader} | First introduced (rid) | Source | Status |`,
|
|
336
|
+
'|---|---|---|---|---|',
|
|
337
|
+
`| 1 | ${escapeCell(args.row.value)} | ${escapeCell(args.row.sourceRid)} | ${escapeCell(args.row.source)} | ${escapeCell(args.row.status)} |`,
|
|
338
|
+
''
|
|
339
|
+
].join('\n');
|
|
340
|
+
}
|
|
341
|
+
function replacePlaceholderRow(body, tableHeading, args) {
|
|
342
|
+
const lines = body.split(/\r?\n/);
|
|
343
|
+
const out = [];
|
|
344
|
+
let headingSeen = false;
|
|
345
|
+
let inTable = false;
|
|
346
|
+
for (const line of lines) {
|
|
347
|
+
if (!headingSeen && line.trim() === `## ${tableHeading}`) {
|
|
348
|
+
headingSeen = true;
|
|
349
|
+
out.push(line);
|
|
350
|
+
continue;
|
|
351
|
+
}
|
|
352
|
+
if (headingSeen && /^\s*\|/.test(line)) {
|
|
353
|
+
// Skip the placeholder row (first data row we see after the
|
|
354
|
+
// separator); emit the new row instead.
|
|
355
|
+
inTable = true;
|
|
356
|
+
out.push(`| ${args.index} | ${escapeCell(args.row.value)} | ${escapeCell(args.row.sourceRid)} | ${escapeCell(args.row.source)} | ${escapeCell(args.row.status)} |`);
|
|
357
|
+
// Then skip the original placeholder by NOT pushing the current line.
|
|
358
|
+
continue;
|
|
359
|
+
}
|
|
360
|
+
if (inTable) {
|
|
361
|
+
// Past the table — push lines verbatim.
|
|
362
|
+
out.push(line);
|
|
363
|
+
}
|
|
364
|
+
else {
|
|
365
|
+
out.push(line);
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
return out.join('\n');
|
|
369
|
+
}
|
|
370
|
+
function appendRowAfterTable(body, args) {
|
|
371
|
+
// Find the last `|`-prefixed line and insert the new row right after it.
|
|
372
|
+
const lines = body.split(/\r?\n/);
|
|
373
|
+
let lastTableLine = -1;
|
|
374
|
+
for (let i = 0; i < lines.length; i++) {
|
|
375
|
+
if (/^\s*\|/.test(lines[i] ?? ''))
|
|
376
|
+
lastTableLine = i;
|
|
377
|
+
}
|
|
378
|
+
if (lastTableLine === -1) {
|
|
379
|
+
// No table found in body — append the row at the end as a new table
|
|
380
|
+
// tail. (Defensive: parseAuditInventoryTable already guarded this.)
|
|
381
|
+
return (body.replace(/\n*$/, '\n') +
|
|
382
|
+
`| ${args.index} | ${escapeCell(args.row.value)} | ${escapeCell(args.row.sourceRid)} | ${escapeCell(args.row.source)} | ${escapeCell(args.row.status)} |\n`);
|
|
383
|
+
}
|
|
384
|
+
const newRow = `| ${args.index} | ${escapeCell(args.row.value)} | ${escapeCell(args.row.sourceRid)} | ${escapeCell(args.row.source)} | ${escapeCell(args.row.status)} |`;
|
|
385
|
+
const before = lines.slice(0, lastTableLine + 1);
|
|
386
|
+
const after = lines.slice(lastTableLine + 1);
|
|
387
|
+
return [...before, newRow, ...after].join('\n');
|
|
388
|
+
}
|
|
389
|
+
async function readOptionalFile(absolutePath) {
|
|
390
|
+
try {
|
|
391
|
+
return await readFile(absolutePath, 'utf8');
|
|
392
|
+
}
|
|
393
|
+
catch (error) {
|
|
394
|
+
if (isEnoent(error))
|
|
395
|
+
return null;
|
|
396
|
+
throw error;
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
function isEnoent(error) {
|
|
400
|
+
return (typeof error === 'object' &&
|
|
401
|
+
error !== null &&
|
|
402
|
+
'code' in error &&
|
|
403
|
+
error.code === 'ENOENT');
|
|
404
|
+
}
|
|
405
|
+
/** Serialize a `BusinessKnowledge` to the markdown-table body format.
|
|
406
|
+
* Matches the bootstrap template at `.peaks/project-scan/business-knowledge.md`. */
|
|
407
|
+
function renderBusinessKnowledgeBody(knowledge) {
|
|
408
|
+
const header = [
|
|
409
|
+
'# Business Knowledge',
|
|
410
|
+
'',
|
|
411
|
+
'> Auto-managed by `peaks-prd` sediment step (v2.11.0 D3 / Group C Tier 5).',
|
|
412
|
+
'> Schema: `BusinessKnowledge { schemaVersion: 1; concepts: BusinessConcept[] }`.',
|
|
413
|
+
'> Idempotency key: `(concept, sourceRid)` — re-running with the same tuple does not duplicate.',
|
|
414
|
+
'',
|
|
415
|
+
'| Concept | Definition | Source | Decided | Evidence |',
|
|
416
|
+
'|---|---|---|---|---|'
|
|
417
|
+
];
|
|
418
|
+
const rows = knowledge.concepts.map(formatRow);
|
|
419
|
+
const footer = [
|
|
420
|
+
'',
|
|
421
|
+
'## How to append',
|
|
422
|
+
'',
|
|
423
|
+
'```bash',
|
|
424
|
+
'# programmatic (peaks-txt sediment step):',
|
|
425
|
+
'# appendBusinessConcept({ projectRoot, concept })',
|
|
426
|
+
'# see src/services/prd/project-scan-sediment.ts',
|
|
427
|
+
'```',
|
|
428
|
+
'',
|
|
429
|
+
'## How to consume',
|
|
430
|
+
'',
|
|
431
|
+
'```bash',
|
|
432
|
+
'peaks project knowledge --project <repo> --json',
|
|
433
|
+
'peaks project knowledge --project <repo> --filter <concept-substr> --json',
|
|
434
|
+
'```',
|
|
435
|
+
''
|
|
436
|
+
];
|
|
437
|
+
return ['---\nschemaVersion: 1\n---\n', ...header, ...rows, ...footer].join('\n');
|
|
438
|
+
}
|
|
439
|
+
function formatRow(c) {
|
|
440
|
+
return `| ${escapeCell(c.concept)} | ${escapeCell(c.definition)} | ${escapeCell(c.sourceRid)} | ${escapeCell(c.decidedAt)} | ${escapeCell(c.evidence)} |`;
|
|
441
|
+
}
|
|
442
|
+
/** Escape pipe characters + newlines for safe markdown-table cells. */
|
|
443
|
+
function escapeCell(value) {
|
|
444
|
+
return value.replace(/\|/g, '\\|').replace(/\r?\n/g, ' ');
|
|
445
|
+
}
|