peaks-loop 4.0.54 → 4.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +36 -0
- package/README-en.md +16 -1
- package/README.md +15 -1
- package/config/eslint/.peaks-rules.cjs +158 -13
- package/config/eslint/tsconfig.lint.json +47 -0
- package/dist/cli/cli-envelope.d.ts +114 -0
- package/dist/cli/cli-envelope.js +85 -0
- package/dist/cli/cli-helpers.d.ts +1 -1
- package/dist/cli/cli-helpers.js +8 -4
- package/dist/cli/commands/_cli-error-envelope.js +1 -1
- package/dist/cli/commands/_register.js +85 -38
- package/dist/cli/commands/_super.js +40 -7
- package/dist/cli/commands/adapter-commands-s2a.js +8 -7
- package/dist/cli/commands/adapter-commands.d.ts +2 -2
- package/dist/cli/commands/adapter-commands.js +7 -8
- package/dist/cli/commands/api-diff-commands.js +5 -4
- package/dist/cli/commands/asset-commands.d.ts +2 -2
- package/dist/cli/commands/asset-commands.js +135 -132
- package/dist/cli/commands/audit-commands.d.ts +1 -1
- package/dist/cli/commands/audit-commands.js +75 -32
- package/dist/cli/commands/autonomous-swarm-commands.d.ts +1 -1
- package/dist/cli/commands/autonomous-swarm-commands.js +14 -8
- package/dist/cli/commands/baseline-commands.js +34 -9
- package/dist/cli/commands/bee-commands.d.ts +1 -1
- package/dist/cli/commands/bee-commands.js +18 -21
- package/dist/cli/commands/best-practice-scan-command.js +6 -34
- package/dist/cli/commands/best-practice-scan-helpers.d.ts +12 -0
- package/dist/cli/commands/best-practice-scan-helpers.js +37 -0
- package/dist/cli/commands/capability-commands.d.ts +1 -1
- package/dist/cli/commands/capability-commands.js +14 -4
- package/dist/cli/commands/capability-worker-config-sc-commands.d.ts +1 -1
- package/dist/cli/commands/changeset-commands.js +21 -18
- package/dist/cli/commands/code-gate-command.js +9 -2
- package/dist/cli/commands/code-job-shape-commands-read-job-shape.d.ts +15 -0
- package/dist/cli/commands/code-job-shape-commands-read-job-shape.js +70 -0
- package/dist/cli/commands/code-job-shape-commands.js +21 -45
- package/dist/cli/commands/code-mode-gate-commands.d.ts +15 -1
- package/dist/cli/commands/code-mode-gate-commands.js +19 -199
- package/dist/cli/commands/code-mode-gate-plan-command.d.ts +14 -0
- package/dist/cli/commands/code-mode-gate-plan-command.js +23 -0
- package/dist/cli/commands/code-mode-gate-should-pause-command.d.ts +24 -0
- package/dist/cli/commands/code-mode-gate-should-pause-command.js +137 -0
- package/dist/cli/commands/code-mode-gate-should-pause-envelope.d.ts +59 -0
- package/dist/cli/commands/code-mode-gate-should-pause-envelope.js +144 -0
- package/dist/cli/commands/code-orchestrator-can-do.js +4 -4
- package/dist/cli/commands/code-review-commands.js +18 -3
- package/dist/cli/commands/code-run-command.js +44 -7
- package/dist/cli/commands/code-runtime-commands.d.ts +17 -0
- package/dist/cli/commands/code-runtime-commands.js +105 -73
- package/dist/cli/commands/codegraph-commands.js +11 -6
- package/dist/cli/commands/codegraph-status-command.js +6 -2
- package/dist/cli/commands/compact-command.js +52 -26
- package/dist/cli/commands/complexity-commands.js +6 -7
- package/dist/cli/commands/config-commands.d.ts +1 -1
- package/dist/cli/commands/config-commands.js +33 -9
- package/dist/cli/commands/container-commands.js +39 -15
- package/dist/cli/commands/context-commands.d.ts +1 -1
- package/dist/cli/commands/context-commands.js +40 -13
- package/dist/cli/commands/core/artifacts-command.js +11 -3
- package/dist/cli/commands/core/binding-commands.js +9 -6
- package/dist/cli/commands/core/doctor-command.js +7 -4
- package/dist/cli/commands/core/memory-command.js +47 -21
- package/dist/cli/commands/core/proxy-command.js +3 -1
- package/dist/cli/commands/core/session-command.js +16 -8
- package/dist/cli/commands/core/skill-command.js +31 -16
- package/dist/cli/commands/core/standards-command.js +55 -13
- package/dist/cli/commands/cron-commands-actions.d.ts +43 -0
- package/dist/cli/commands/cron-commands-actions.js +128 -0
- package/dist/cli/commands/cron-commands-schedule.d.ts +86 -0
- package/dist/cli/commands/cron-commands-schedule.js +151 -0
- package/dist/cli/commands/cron-commands.d.ts +35 -32
- package/dist/cli/commands/cron-commands.js +167 -211
- package/dist/cli/commands/cron-scheduler-commands.js +40 -20
- package/dist/cli/commands/cron-scheduler-persist.d.ts +110 -0
- package/dist/cli/commands/cron-scheduler-persist.js +171 -0
- package/dist/cli/commands/dashboard-long-run.js +45 -14
- package/dist/cli/commands/dashboard-summary.js +15 -5
- package/dist/cli/commands/dispatch-commands.js +65 -32
- package/dist/cli/commands/dispatch-from-dag.js +9 -10
- package/dist/cli/commands/doc-commands.js +8 -9
- package/dist/cli/commands/doctor/invoke-from-code.js +1 -1
- package/dist/cli/commands/e2e-verify-env.d.ts +19 -0
- package/dist/cli/commands/e2e-verify-env.js +19 -0
- package/dist/cli/commands/e2e-verify.d.ts +3 -14
- package/dist/cli/commands/e2e-verify.js +49 -29
- package/dist/cli/commands/ecc-commands.d.ts +1 -1
- package/dist/cli/commands/ecc-commands.js +8 -17
- package/dist/cli/commands/evidence-commands.js +10 -6
- package/dist/cli/commands/evolution-commands.d.ts +2 -2
- package/dist/cli/commands/evolution-commands.js +109 -115
- package/dist/cli/commands/feedback-commands-helpers.d.ts +22 -0
- package/dist/cli/commands/feedback-commands-helpers.js +33 -0
- package/dist/cli/commands/feedback-commands.js +15 -38
- package/dist/cli/commands/final-review-commands.d.ts +1 -1
- package/dist/cli/commands/final-review-commands.js +24 -22
- package/dist/cli/commands/fixture-commands.d.ts +1 -1
- package/dist/cli/commands/fixture-commands.js +17 -6
- package/dist/cli/commands/fork-commands-sync-verify.d.ts +12 -0
- package/dist/cli/commands/fork-commands-sync-verify.js +72 -0
- package/dist/cli/commands/fork-commands.js +19 -51
- package/dist/cli/commands/fresh-context-commands.js +3 -1
- package/dist/cli/commands/gate-commands-enforce.d.ts +82 -0
- package/dist/cli/commands/gate-commands-enforce.js +210 -0
- package/dist/cli/commands/gate-commands.d.ts +1 -1
- package/dist/cli/commands/gate-commands.js +85 -205
- package/dist/cli/commands/governance-classify-contract-commands.d.ts +1 -1
- package/dist/cli/commands/governance-classify-contract-commands.js +28 -17
- package/dist/cli/commands/heartbeat-commands-action.d.ts +7 -0
- package/dist/cli/commands/heartbeat-commands-action.js +192 -0
- package/dist/cli/commands/heartbeat-commands-validation.d.ts +57 -0
- package/dist/cli/commands/heartbeat-commands-validation.js +120 -0
- package/dist/cli/commands/heartbeat-commands.d.ts +27 -6
- package/dist/cli/commands/heartbeat-commands.js +19 -198
- package/dist/cli/commands/hook-handle.d.ts +1 -1
- package/dist/cli/commands/hook-handle.js +46 -13
- package/dist/cli/commands/hooks-commands.d.ts +1 -1
- package/dist/cli/commands/hooks-commands.js +18 -6
- package/dist/cli/commands/ide-commands.d.ts +1 -1
- package/dist/cli/commands/ide-commands.js +5 -3
- package/dist/cli/commands/impact-commands.js +8 -2
- package/dist/cli/commands/job-add-slice-command.d.ts +43 -0
- package/dist/cli/commands/job-add-slice-command.js +151 -0
- package/dist/cli/commands/job-commands.d.ts +64 -0
- package/dist/cli/commands/job-commands.js +134 -63
- package/dist/cli/commands/lease-metrics-commands-support.d.ts +73 -0
- package/dist/cli/commands/lease-metrics-commands-support.js +67 -0
- package/dist/cli/commands/lease-metrics-commands.d.ts +3 -44
- package/dist/cli/commands/lease-metrics-commands.js +21 -61
- package/dist/cli/commands/lease-stats-commands.d.ts +1 -1
- package/dist/cli/commands/lease-stats-commands.js +9 -6
- package/dist/cli/commands/lint-commands.d.ts +9 -3
- package/dist/cli/commands/lint-commands.js +15 -8
- package/dist/cli/commands/log-commands.d.ts +1 -1
- package/dist/cli/commands/log-commands.js +8 -6
- package/dist/cli/commands/loop-commands.d.ts +1 -1
- package/dist/cli/commands/loop-commands.js +50 -50
- package/dist/cli/commands/loop-eval-commands.d.ts +1 -1
- package/dist/cli/commands/loop-eval-commands.js +101 -30
- package/dist/cli/commands/memory-commands.js +21 -13
- package/dist/cli/commands/migrate-1-4-1-command.js +1 -1
- package/dist/cli/commands/migrate-v2-10-to-v2-11-command.js +2 -2
- package/dist/cli/commands/mut-commands-helpers.d.ts +30 -0
- package/dist/cli/commands/mut-commands-helpers.js +43 -0
- package/dist/cli/commands/mut-commands.js +16 -58
- package/dist/cli/commands/observability-commands-queries.d.ts +37 -0
- package/dist/cli/commands/observability-commands-queries.js +113 -0
- package/dist/cli/commands/observability-commands.d.ts +1 -1
- package/dist/cli/commands/observability-commands.js +7 -92
- package/dist/cli/commands/openspec-commands.d.ts +1 -1
- package/dist/cli/commands/openspec-commands.js +20 -8
- package/dist/cli/commands/outer-cache-commands.js +18 -7
- package/dist/cli/commands/perf-audit-commands.d.ts +1 -1
- package/dist/cli/commands/perf-audit-commands.js +12 -7
- package/dist/cli/commands/perf-commands.d.ts +1 -1
- package/dist/cli/commands/perf-commands.js +5 -5
- package/dist/cli/commands/playwright-commands.d.ts +1 -1
- package/dist/cli/commands/playwright-commands.js +20 -8
- package/dist/cli/commands/polyrepo-commands.js +21 -19
- package/dist/cli/commands/prd-blocks-commands.js +1 -3
- package/dist/cli/commands/prd-commands.d.ts +1 -1
- package/dist/cli/commands/prd-commands.js +8 -4
- package/dist/cli/commands/preferences-commands.js +13 -12
- package/dist/cli/commands/primer-command.js +5 -5
- package/dist/cli/commands/project-commands.d.ts +1 -1
- package/dist/cli/commands/project-commands.js +33 -9
- package/dist/cli/commands/qa-business-review-commands.js +16 -12
- package/dist/cli/commands/qa-commands.d.ts +1 -1
- package/dist/cli/commands/qa-commands.js +3 -5
- package/dist/cli/commands/release-commands.d.ts +3 -1
- package/dist/cli/commands/release-commands.js +33 -22
- package/dist/cli/commands/request-commands.js +47 -30
- package/dist/cli/commands/request-format-helpers.js +1 -1
- package/dist/cli/commands/retrospective-commands.d.ts +18 -11
- package/dist/cli/commands/retrospective-commands.js +24 -173
- package/dist/cli/commands/retrospective-index-command.d.ts +26 -0
- package/dist/cli/commands/retrospective-index-command.js +99 -0
- package/dist/cli/commands/retrospective-project-root.d.ts +9 -0
- package/dist/cli/commands/retrospective-project-root.js +15 -0
- package/dist/cli/commands/retrospective-search-command.d.ts +27 -0
- package/dist/cli/commands/retrospective-search-command.js +97 -0
- package/dist/cli/commands/retrospective-show-command.d.ts +23 -0
- package/dist/cli/commands/retrospective-show-command.js +80 -0
- package/dist/cli/commands/reviewer-commands.d.ts +1 -1
- package/dist/cli/commands/role-commands.js +14 -9
- package/dist/cli/commands/runtime-commands.js +14 -7
- package/dist/cli/commands/sc-commands.d.ts +1 -1
- package/dist/cli/commands/sc-commands.js +39 -6
- package/dist/cli/commands/scan-commands.js +36 -13
- package/dist/cli/commands/security-audit-commands.d.ts +1 -1
- package/dist/cli/commands/security-audit-commands.js +12 -7
- package/dist/cli/commands/sediment-commands.d.ts +2 -2
- package/dist/cli/commands/sediment-commands.js +146 -139
- package/dist/cli/commands/session-24h-mode.js +15 -2
- package/dist/cli/commands/session-checkpoint-command.js +1 -1
- package/dist/cli/commands/session-migrate-skill-name.js +1 -1
- package/dist/cli/commands/shadcn-commands.d.ts +1 -1
- package/dist/cli/commands/shadcn-commands.js +3 -1
- package/dist/cli/commands/share-commands.js +38 -39
- package/dist/cli/commands/skill-conformance-commands.d.ts +1 -1
- package/dist/cli/commands/skill-conformance-commands.js +1 -1
- package/dist/cli/commands/skill-loop-engineering-readiness-commands.js +16 -17
- package/dist/cli/commands/skill-visibility.js +2 -2
- package/dist/cli/commands/slice-commands.d.ts +1 -1
- package/dist/cli/commands/slice-commands.js +36 -12
- package/dist/cli/commands/slice-integrate-commands.js +6 -7
- package/dist/cli/commands/slice-review-commands-helpers.d.ts +26 -0
- package/dist/cli/commands/slice-review-commands-helpers.js +26 -0
- package/dist/cli/commands/slice-review-commands.js +16 -24
- package/dist/cli/commands/smoke-commands-add-path.d.ts +14 -0
- package/dist/cli/commands/smoke-commands-add-path.js +39 -0
- package/dist/cli/commands/smoke-commands-define.d.ts +18 -0
- package/dist/cli/commands/smoke-commands-define.js +97 -0
- package/dist/cli/commands/smoke-commands-run.d.ts +18 -0
- package/dist/cli/commands/smoke-commands-run.js +119 -0
- package/dist/cli/commands/smoke-commands.d.ts +10 -1
- package/dist/cli/commands/smoke-commands.js +17 -179
- package/dist/cli/commands/sop-commands.d.ts +1 -1
- package/dist/cli/commands/sop-commands.js +38 -10
- package/dist/cli/commands/statusline-commands.d.ts +1 -1
- package/dist/cli/commands/statusline-commands.js +21 -10
- package/dist/cli/commands/sub-agent/detached.js +3 -3
- package/dist/cli/commands/sub-agent-dispatch-guard.d.ts +1 -1
- package/dist/cli/commands/sub-agent-shared.js +1 -1
- package/dist/cli/commands/sub-agent-shutdown-commands.js +17 -9
- package/dist/cli/commands/swarm-commands.d.ts +1 -1
- package/dist/cli/commands/swarm-commands.js +13 -6
- package/dist/cli/commands/tech-commands-helpers.d.ts +37 -0
- package/dist/cli/commands/tech-commands-helpers.js +24 -0
- package/dist/cli/commands/tech-commands.d.ts +2 -29
- package/dist/cli/commands/tech-commands.js +15 -28
- package/dist/cli/commands/test-commands.js +27 -7
- package/dist/cli/commands/upgrade-commands.d.ts +1 -1
- package/dist/cli/commands/user-touchpoint-commands.js +1 -3
- package/dist/cli/commands/verdict-aggregate-command.d.ts +1 -1
- package/dist/cli/commands/verdict-aggregate-command.js +20 -7
- package/dist/cli/commands/vm-commands.js +48 -19
- package/dist/cli/commands/wave-plan-commands.js +5 -2
- package/dist/cli/commands/web-commands.js +14 -4
- package/dist/cli/commands/web-lifecycle-commands.js +5 -3
- package/dist/cli/commands/workflow-commands.d.ts +1 -1
- package/dist/cli/commands/workflow-commands.js +64 -29
- package/dist/cli/commands/workflow-lifecycle-commands.js +19 -17
- package/dist/cli/commands/workflow-plan-commands-actions.d.ts +20 -0
- package/dist/cli/commands/workflow-plan-commands-actions.js +115 -0
- package/dist/cli/commands/workflow-plan-commands-session.d.ts +17 -0
- package/dist/cli/commands/workflow-plan-commands-session.js +59 -0
- package/dist/cli/commands/workflow-plan-commands.d.ts +10 -21
- package/dist/cli/commands/workflow-plan-commands.js +15 -141
- package/dist/cli/commands/workspace/clean-command.js +4 -1
- package/dist/cli/commands/workspace/helpers.js +2 -1
- package/dist/cli/commands/workspace/init-command.js +80 -20
- package/dist/cli/commands/workspace/reconcile-command.js +3 -1
- package/dist/cli/commands/workspace-commands.d.ts +1 -1
- package/dist/cli/commands/workspace-commands.js +1 -1
- package/dist/cli/commands/worktree-auth-commands.d.ts +1 -1
- package/dist/cli/commands/worktree-auth-commands.js +16 -169
- package/dist/cli/commands/worktree-auth-grant-command.d.ts +14 -0
- package/dist/cli/commands/worktree-auth-grant-command.js +118 -0
- package/dist/cli/commands/worktree-auth-manage-commands.d.ts +17 -0
- package/dist/cli/commands/worktree-auth-manage-commands.js +128 -0
- package/dist/cli/commands/worktree-lease-commands.d.ts +1 -1
- package/dist/cli/commands/worktree-lease-commands.js +65 -37
- package/dist/cli/index.js +6 -2
- package/dist/cli/program.js +6 -3
- package/dist/hooks/pre-tool-use-sub-agent.js +1 -6
- package/dist/reporters/bdd-reporter.js +9 -3
- package/dist/services/24h-mode/auto-engage.d.ts +19 -0
- package/dist/services/24h-mode/auto-engage.js +35 -0
- package/dist/services/24h-mode/decider.js +5 -1
- package/dist/services/24h-mode/store.js +4 -2
- package/dist/services/adapter/adapter-registry.js +20 -8
- package/dist/services/adapter/adapter.d.ts +2 -2
- package/dist/services/adapter/auto-adapter.d.ts +2 -2
- package/dist/services/adapter/auto-adapter.js +1 -1
- package/dist/services/adapter/claude-adapter.d.ts +1 -1
- package/dist/services/adapter/claude-adapter.js +8 -8
- package/dist/services/adapter/codex-adapter.d.ts +2 -2
- package/dist/services/adapter/codex-adapter.js +20 -8
- package/dist/services/adapter/copilot-adapter.d.ts +2 -2
- package/dist/services/adapter/copilot-adapter.js +20 -8
- package/dist/services/artifacts/artifact-prerequisites.js +10 -8
- package/dist/services/artifacts/artifact-service.js +3 -1
- package/dist/services/artifacts/artifact-template-bodies.d.ts +12 -0
- package/dist/services/artifacts/artifact-template-bodies.js +165 -0
- package/dist/services/artifacts/artifact-templates.js +26 -168
- package/dist/services/artifacts/request-artifact-service.js +14 -7
- package/dist/services/artifacts/request-artifact-state-helpers.d.ts +3 -2
- package/dist/services/artifacts/request-artifact-state-helpers.js +3 -5
- package/dist/services/artifacts/workspace-artifact-helpers.d.ts +28 -0
- package/dist/services/artifacts/workspace-artifact-helpers.js +54 -0
- package/dist/services/artifacts/workspace-service.d.ts +3 -22
- package/dist/services/artifacts/workspace-service.js +10 -60
- package/dist/services/audit/artifact-writer.js +21 -21
- package/dist/services/audit/audit-goal-service.js +2 -2
- package/dist/services/audit/backing-detector.js +7 -4
- package/dist/services/audit/classifier.js +3 -3
- package/dist/services/audit/decision-writer.js +13 -9
- package/dist/services/audit/enforcers/active-skill-resolver.js +15 -7
- package/dist/services/audit/enforcers/design-draft-confirm.js +4 -4
- package/dist/services/audit/enforcers/lint-audit-regression.js +10 -5
- package/dist/services/audit/enforcers/lint-bee-runtime-contract.js +16 -8
- package/dist/services/audit/enforcers/lint-catalog-governance.js +8 -4
- package/dist/services/audit/enforcers/lint-output-style.js +4 -2
- package/dist/services/audit/enforcers/lint-peaks-code-runtime.js +8 -3
- package/dist/services/audit/enforcers/lint-peaks-skill-runtime.js +8 -3
- package/dist/services/audit/enforcers/lint-peaks-ui-sc-txt-runtime.js +20 -20
- package/dist/services/audit/enforcers/lint-prd-artifact-handoff.js +5 -5
- package/dist/services/audit/enforcers/lint-prd-source-snapshot.d.ts +1 -1
- package/dist/services/audit/enforcers/lint-prd-source-snapshot.js +5 -5
- package/dist/services/audit/enforcers/lint-qa-gateguard-and-runtime.js +10 -10
- package/dist/services/audit/enforcers/lint-rd-handoff-coverage.js +10 -8
- package/dist/services/audit/enforcers/lint-reference-shape.js +50 -18
- package/dist/services/audit/enforcers/lint-skill-presence-mandatory.js +5 -5
- package/dist/services/audit/enforcers/lint-style.js +44 -11
- package/dist/services/audit/enforcers/lint-workflow-shape.js +4 -2
- package/dist/services/audit/enforcers/login-gate.js +2 -6
- package/dist/services/audit/enforcers/mock-placement.js +2 -2
- package/dist/services/audit/enforcers/no-root-pollution.js +38 -9
- package/dist/services/audit/enforcers/pre-rd-scan.js +1 -1
- package/dist/services/audit/enforcers/prototype-fidelity.js +1 -1
- package/dist/services/audit/enforcers/resume-detection.js +5 -4
- package/dist/services/audit/prose-ratio-calculator.js +1 -1
- package/dist/services/audit/red-line-catalog-p2-a-bee-runtime.d.ts +39 -0
- package/dist/services/audit/red-line-catalog-p2-a-bee-runtime.js +205 -0
- package/dist/services/audit/red-line-catalog-p2-a-lint-style.d.ts +52 -0
- package/dist/services/audit/red-line-catalog-p2-a-lint-style.js +205 -0
- package/dist/services/audit/red-line-catalog-p2-a.js +3 -374
- package/dist/services/audit/red-line-catalog-p2-b.js +26 -26
- package/dist/services/audit/red-line-catalog.js +26 -38
- package/dist/services/audit/red-lines-service.js +64 -49
- package/dist/services/audit/scanners/openspec-scanner.js +2 -2
- package/dist/services/audit/scanners/rules-tree-scanner.js +2 -2
- package/dist/services/audit/scanners/skills-tree-scanner.js +2 -2
- package/dist/services/audit/static-service.js +3 -3
- package/dist/services/audit-independent/index.d.ts +2 -2
- package/dist/services/audit-independent/index.js +2 -2
- package/dist/services/audit-independent/perf-audit-service.js +19 -8
- package/dist/services/audit-independent/security-audit-service.js +31 -16
- package/dist/services/autonomous-swarm/autonomous-swarm-service.js +75 -46
- package/dist/services/best-practice/output-formatter.js +7 -1
- package/dist/services/capability-audit-service/cross-check.js +11 -5
- package/dist/services/capability-audit-service/runner.js +15 -7
- package/dist/services/capability-baseline/store.js +16 -4
- package/dist/services/capability-baseline/types.js +15 -3
- package/dist/services/capability-baseline/validator.js +43 -7
- package/dist/services/capability-guard-runner/contracts/J02.js +36 -6
- package/dist/services/capability-guard-runner/contracts/J03.js +20 -11
- package/dist/services/capability-guard-runner/contracts/J04.js +24 -15
- package/dist/services/capability-guard-runner/contracts/J05.js +26 -10
- package/dist/services/capability-guard-runner/contracts/J07.js +8 -2
- package/dist/services/capability-guard-runner/contracts/J08.js +22 -5
- package/dist/services/capability-guard-runner/contracts/J10.js +6 -2
- package/dist/services/capability-guard-runner/contracts/J11.d.ts +5 -0
- package/dist/services/capability-guard-runner/contracts/J11.js +14 -2
- package/dist/services/capability-guard-runner/contracts/J12.js +12 -3
- package/dist/services/capability-guard-runner/diff.js +1 -5
- package/dist/services/changeset/changeset-check-service.js +1 -3
- package/dist/services/classify/classify-service.js +20 -8
- package/dist/services/classify/classify-types.js +22 -9
- package/dist/services/code/auto-compact-lifecycle.js +62 -39
- package/dist/services/code/auto-compact-modes.js +2 -2
- package/dist/services/code/auto-compact-orchestrator.js +14 -9
- package/dist/services/code/batch-heartbeat-poller.d.ts +10 -0
- package/dist/services/code/batch-heartbeat-poller.js +17 -1
- package/dist/services/code/compact-event-settle-types.d.ts +80 -0
- package/dist/services/code/compact-event-settle-types.js +20 -0
- package/dist/services/code/compact-event-settle.d.ts +3 -68
- package/dist/services/code/compact-event-settle.js +14 -10
- package/dist/services/code/dag-orchestrator.js +32 -26
- package/dist/services/code/job-shape-decision.js +3 -1
- package/dist/services/code/mode-gate-types.d.ts +57 -0
- package/dist/services/code/mode-gate-types.js +67 -0
- package/dist/services/code/mode-gate.d.ts +4 -58
- package/dist/services/code/mode-gate.js +24 -60
- package/dist/services/code/orchestrator-can-do-advisories.d.ts +30 -0
- package/dist/services/code/orchestrator-can-do-advisories.js +81 -0
- package/dist/services/code/orchestrator-can-do-probes.d.ts +30 -0
- package/dist/services/code/orchestrator-can-do-probes.js +77 -0
- package/dist/services/code/orchestrator-can-do.d.ts +11 -22
- package/dist/services/code/orchestrator-can-do.js +37 -137
- package/dist/services/code/post-compact-checkpoint.d.ts +28 -0
- package/dist/services/code/post-compact-checkpoint.js +57 -0
- package/dist/services/code/post-compact-detector.js +16 -48
- package/dist/services/code/step-08-gate.d.ts +4 -3
- package/dist/services/code/step-08-gate.js +21 -9
- package/dist/services/code-review/ecc-bridge.js +23 -23
- package/dist/services/codegraph/codegraph-autorefresh.js +56 -39
- package/dist/services/codegraph/codegraph-config-repair-writer.js +4 -1
- package/dist/services/codegraph/codegraph-exclude-integrity.js +4 -1
- package/dist/services/codegraph/codegraph-exclude-repair.js +1 -2
- package/dist/services/codegraph/codegraph-index-integrity.js +1 -1
- package/dist/services/codegraph/codegraph-preflight-service.d.ts +3 -26
- package/dist/services/codegraph/codegraph-preflight-service.js +16 -37
- package/dist/services/codegraph/codegraph-preflight-structure.d.ts +32 -0
- package/dist/services/codegraph/codegraph-preflight-structure.js +33 -0
- package/dist/services/codegraph/codegraph-process-runner.js +12 -1
- package/dist/services/codegraph/codegraph-service.js +9 -1
- package/dist/services/compact/request-transition-hook.js +2 -1
- package/dist/services/compact/suggest-service.d.ts +3 -61
- package/dist/services/compact/suggest-service.js +9 -12
- package/dist/services/compact/suggest-types.d.ts +76 -0
- package/dist/services/compact/suggest-types.js +10 -0
- package/dist/services/compact-history/compact-history-service.js +2 -2
- package/dist/services/compact-statusline/compact-lifecycle-store.d.ts +2 -32
- package/dist/services/compact-statusline/compact-lifecycle-store.js +7 -12
- package/dist/services/compact-statusline/compact-lifecycle-types.d.ts +32 -0
- package/dist/services/compact-statusline/compact-lifecycle-types.js +8 -0
- package/dist/services/compact-statusline/compact-statusline-cell-table.d.ts +42 -0
- package/dist/services/compact-statusline/compact-statusline-cell-table.js +63 -0
- package/dist/services/compact-statusline/compact-statusline-service.d.ts +4 -21
- package/dist/services/compact-statusline/compact-statusline-service.js +9 -101
- package/dist/services/compact-statusline/compact-statusline-state.d.ts +4 -0
- package/dist/services/compact-statusline/compact-statusline-state.js +50 -0
- package/dist/services/config/config-migration.js +2 -2
- package/dist/services/config/config-restore.js +1 -1
- package/dist/services/config/config-rollback.js +1 -1
- package/dist/services/config/config-safety.js +28 -10
- package/dist/services/config/config-service.js +114 -31
- package/dist/services/config/model-routing.js +5 -2
- package/dist/services/config/proxy-service.js +6 -1
- package/dist/services/config/workspace-state-service.js +17 -5
- package/dist/services/context/auto-compact-dispatcher-input.d.ts +38 -0
- package/dist/services/context/auto-compact-dispatcher-input.js +9 -0
- package/dist/services/context/auto-compact-dispatcher.d.ts +2 -30
- package/dist/services/context/auto-compact-reader-input.d.ts +30 -0
- package/dist/services/context/auto-compact-reader-input.js +8 -0
- package/dist/services/context/auto-compact-reader.d.ts +2 -24
- package/dist/services/context/auto-compact-reader.js +4 -1
- package/dist/services/context/auto-compact-thresholds.d.ts +54 -0
- package/dist/services/context/auto-compact-thresholds.js +19 -0
- package/dist/services/context/auto-compact-types.d.ts +2 -46
- package/dist/services/context/auto-compact-types.js +1 -11
- package/dist/services/context/build-dispatch-system-prompt.js +2 -2
- package/dist/services/context/collector.js +8 -10
- package/dist/services/context/context-audit-hint.js +7 -5
- package/dist/services/context/context-audit-keys.d.ts +15 -0
- package/dist/services/context/context-audit-keys.js +77 -0
- package/dist/services/context/context-audit-limits.d.ts +20 -0
- package/dist/services/context/context-audit-limits.js +31 -0
- package/dist/services/context/context-audit-scan.d.ts +19 -0
- package/dist/services/context/context-audit-scan.js +246 -0
- package/dist/services/context/context-audit-types.d.ts +65 -0
- package/dist/services/context/context-audit-types.js +10 -0
- package/dist/services/context/context-audit.d.ts +13 -59
- package/dist/services/context/context-audit.js +38 -254
- package/dist/services/context/context-builder.js +4 -4
- package/dist/services/context/context-schema.d.ts +1 -1
- package/dist/services/context/context-schema.js +13 -13
- package/dist/services/context/doc-retriever.js +2 -2
- package/dist/services/context/harness-context-witness.js +43 -24
- package/dist/services/context/harness-window-config.js +27 -7
- package/dist/services/context/ide-detect.js +2 -1
- package/dist/services/context/index.d.ts +1 -1
- package/dist/services/context/memory-index-reader.js +3 -9
- package/dist/services/context/memory-preflight-config.js +3 -5
- package/dist/services/context/memory-preflight-service.d.ts +2 -20
- package/dist/services/context/memory-preflight-service.js +37 -68
- package/dist/services/context/memory-preflight-support.d.ts +48 -0
- package/dist/services/context/memory-preflight-support.js +56 -0
- package/dist/services/context/post-compact-reinjection.js +3 -3
- package/dist/services/context/renderer.js +7 -3
- package/dist/services/context/spillover-store.js +3 -1
- package/dist/services/context/summary-view.js +1 -1
- package/dist/services/context/threshold.js +2 -2
- package/dist/services/context/tokenizer.js +3 -3
- package/dist/services/crystallization/crystallization-brief-schema.d.ts +80 -0
- package/dist/services/crystallization/crystallization-brief-schema.js +159 -0
- package/dist/services/crystallization/crystallization-service.d.ts +7 -7
- package/dist/services/crystallization/crystallization-service.js +56 -55
- package/dist/services/crystallization/crystallization-store.d.ts +2 -2
- package/dist/services/crystallization/crystallization-store.js +37 -20
- package/dist/services/crystallization/crystallization-types.d.ts +4 -56
- package/dist/services/crystallization/crystallization-types.js +31 -184
- package/dist/services/crystallization/evidence-brief-builder.d.ts +3 -3
- package/dist/services/crystallization/evidence-brief-builder.js +32 -38
- package/dist/services/crystallization/index.d.ts +4 -4
- package/dist/services/crystallization/index.js +4 -4
- package/dist/services/dashboard/project-dashboard-service.js +7 -1
- package/dist/services/dispatch/await-batch-helpers.d.ts +55 -0
- package/dist/services/dispatch/await-batch-helpers.js +206 -0
- package/dist/services/dispatch/await-batch.d.ts +50 -7
- package/dist/services/dispatch/await-batch.js +97 -194
- package/dist/services/dispatch/batch-counter.js +2 -1
- package/dist/services/dispatch/conflict-replay.js +2 -2
- package/dist/services/dispatch/contract-store.js +5 -2
- package/dist/services/dispatch/dispatch-record-input-types.d.ts +81 -0
- package/dist/services/dispatch/dispatch-record-input-types.js +1 -0
- package/dist/services/dispatch/dispatch-record-types.d.ts +6 -73
- package/dist/services/dispatch/dispatch-record-upgrade-fields.d.ts +72 -0
- package/dist/services/dispatch/dispatch-record-upgrade-fields.js +242 -0
- package/dist/services/dispatch/dispatch-record-upgrade-guards.d.ts +15 -0
- package/dist/services/dispatch/dispatch-record-upgrade-guards.js +55 -0
- package/dist/services/dispatch/dispatch-record-upgrade.d.ts +2 -4
- package/dist/services/dispatch/dispatch-record-upgrade.js +21 -213
- package/dist/services/dispatch/dispatch-record-writer.js +54 -26
- package/dist/services/dispatch/dispatch-sub-agent.js +7 -2
- package/dist/services/dispatch/e2e-fixtures.js +1 -1
- package/dist/services/dispatch/isolation-lease.js +39 -17
- package/dist/services/dispatch/merge-back-runner.js +51 -11
- package/dist/services/dispatch/service-shutdown.js +4 -1
- package/dist/services/dispatch/slice-dag-types.d.ts +116 -0
- package/dist/services/dispatch/slice-dag-types.js +41 -0
- package/dist/services/dispatch/slice-dag.d.ts +3 -109
- package/dist/services/dispatch/slice-dag.js +13 -36
- package/dist/services/dispatch/sub-agent-batch-await.d.ts +47 -0
- package/dist/services/dispatch/sub-agent-batch-await.js +73 -0
- package/dist/services/dispatch/sub-agent-dispatcher-types.d.ts +122 -0
- package/dist/services/dispatch/sub-agent-dispatcher-types.js +12 -0
- package/dist/services/dispatch/sub-agent-dispatcher.d.ts +3 -145
- package/dist/services/dispatch/sub-agent-dispatcher.js +14 -70
- package/dist/services/dispatch/test-tool-detection.js +12 -1
- package/dist/services/doc/doc-generator.js +19 -4
- package/dist/services/doctor/doctor-service/checks/check-id-schema.js +16 -8
- package/dist/services/doctor/doctor-service/checks/codegraph-capability.d.ts +7 -2
- package/dist/services/doctor/doctor-service/checks/codegraph-capability.js +26 -8
- package/dist/services/doctor/doctor-service/checks/codegraph-exclude-integrity.js +16 -8
- package/dist/services/doctor/doctor-service/checks/codegraph-index-integrity.js +16 -8
- package/dist/services/doctor/doctor-service/checks/dist-source-version.js +18 -9
- package/dist/services/doctor/doctor-service/checks/ecc-hooks-schema-drift.js +20 -10
- package/dist/services/doctor/doctor-service/checks/gateguard-conflict.js +18 -9
- package/dist/services/doctor/doctor-service/checks/l3-memory-health.js +25 -11
- package/dist/services/doctor/doctor-service/checks/l3-orphan-sessions.js +12 -6
- package/dist/services/doctor/doctor-service/checks/multi-binary-drift.d.ts +7 -16
- package/dist/services/doctor/doctor-service/checks/multi-binary-drift.js +50 -70
- package/dist/services/doctor/doctor-service/checks/schema-validity.js +5 -1
- package/dist/services/doctor/doctor-service/checks/skill-presence.js +4 -2
- package/dist/services/doctor/doctor-service/checks/statusline-install.js +8 -4
- package/dist/services/doctor/doctor-service/checks/statusline-runtime.js +8 -4
- package/dist/services/doctor/doctor-service/checks/user-config.js +4 -2
- package/dist/services/doctor/doctor-service/checks/workspace-init.js +8 -4
- package/dist/services/doctor/doctor-service/checks/workspace-layout.js +19 -11
- package/dist/services/doctor/doctor-service/index.js +4 -2
- package/dist/services/doctor/doctor-service/multi-binary-drift-helpers.d.ts +40 -0
- package/dist/services/doctor/doctor-service/multi-binary-drift-helpers.js +49 -0
- package/dist/services/doctor/doctor-service/plugin-registry.js +1 -1
- package/dist/services/doctor/doctor-service/probe-types.d.ts +210 -0
- package/dist/services/doctor/doctor-service/probe-types.js +14 -0
- package/dist/services/doctor/doctor-service/types.d.ts +7 -197
- package/dist/services/doctor/index.d.ts +1 -1
- package/dist/services/doctor/index.js +1 -1
- package/dist/services/env/shell-probe.js +8 -2
- package/dist/services/evidence/evidence-body-builders.d.ts +23 -0
- package/dist/services/evidence/evidence-body-builders.js +197 -0
- package/dist/services/evidence/evidence-generator.js +6 -187
- package/dist/services/evolution/evolution-constraints.d.ts +43 -0
- package/dist/services/evolution/evolution-constraints.js +54 -0
- package/dist/services/evolution/evolution-evaluation-schema.d.ts +43 -0
- package/dist/services/evolution/evolution-evaluation-schema.js +43 -0
- package/dist/services/evolution/evolution-service.d.ts +6 -6
- package/dist/services/evolution/evolution-service.js +58 -58
- package/dist/services/evolution/evolution-store.d.ts +2 -2
- package/dist/services/evolution/evolution-store.js +37 -51
- package/dist/services/evolution/evolution-types.d.ts +2 -22
- package/dist/services/evolution/evolution-types.js +41 -101
- package/dist/services/evolution/independent-evaluator-runner.d.ts +3 -3
- package/dist/services/evolution/independent-evaluator-runner.js +20 -22
- package/dist/services/evolution/regression-skeptic-runner.d.ts +2 -2
- package/dist/services/evolution/regression-skeptic-runner.js +18 -18
- package/dist/services/feedback/feedback-promotion-service.js +48 -12
- package/dist/services/feedback/promotion-artifact-evidence.d.ts +2 -16
- package/dist/services/feedback/promotion-artifact-evidence.js +6 -83
- package/dist/services/feedback/promotion-artifact-json-evidence.d.ts +29 -0
- package/dist/services/feedback/promotion-artifact-json-evidence.js +39 -0
- package/dist/services/feedback/promotion-source-comments.d.ts +47 -0
- package/dist/services/feedback/promotion-source-comments.js +61 -0
- package/dist/services/final-review/final-review-contract.d.ts +26 -0
- package/dist/services/final-review/final-review-contract.js +14 -0
- package/dist/services/final-review/final-review-delivery.d.ts +63 -0
- package/dist/services/final-review/final-review-delivery.js +124 -0
- package/dist/services/final-review/final-review-evidence-budget.d.ts +125 -0
- package/dist/services/final-review/final-review-evidence-budget.js +218 -0
- package/dist/services/final-review/final-review-evidence-collect.d.ts +4 -0
- package/dist/services/final-review/final-review-evidence-collect.js +230 -0
- package/dist/services/final-review/final-review-evidence-sources.d.ts +138 -0
- package/dist/services/final-review/final-review-evidence-sources.js +139 -0
- package/dist/services/final-review/final-review-fifth-dim.d.ts +8 -0
- package/dist/services/final-review/final-review-fifth-dim.js +20 -0
- package/dist/services/final-review/final-review-gates.d.ts +119 -0
- package/dist/services/final-review/final-review-gates.js +214 -0
- package/dist/services/final-review/final-review-output-budget.d.ts +88 -0
- package/dist/services/final-review/final-review-output-budget.js +161 -0
- package/dist/services/final-review/final-review-prompt.d.ts +35 -0
- package/dist/services/final-review/final-review-prompt.js +112 -0
- package/dist/services/final-review/final-review-reviewer.d.ts +57 -0
- package/dist/services/final-review/final-review-reviewer.js +95 -0
- package/dist/services/final-review/final-review-runner.d.ts +3 -0
- package/dist/services/final-review/final-review-runner.js +158 -0
- package/dist/services/final-review/final-review-service.d.ts +119 -373
- package/dist/services/final-review/final-review-service.js +48 -1380
- package/dist/services/final-review/final-review-verdicts.d.ts +60 -0
- package/dist/services/final-review/final-review-verdicts.js +91 -0
- package/dist/services/final-review/index.d.ts +3 -3
- package/dist/services/final-review/index.js +2 -2
- package/dist/services/final-review/pre-post-diff.js +32 -29
- package/dist/services/fixture/fixture-capture-service.js +14 -6
- package/dist/services/fresh-context/trigger-scan.js +13 -2
- package/dist/services/fuzzy-matching/fuzzy-match-service.js +1 -1
- package/dist/services/fuzzy-matching/fzf-pick-service.js +6 -1
- package/dist/services/hooks/pre-tool-code-gate.js +2 -2
- package/dist/services/hooks/presence-marker-detector.js +12 -2
- package/dist/services/hooks/worktree-authorization-gate.js +21 -7
- package/dist/services/ide/adapters/claude-code-adapter.js +30 -17
- package/dist/services/ide/adapters/codex-adapter.js +3 -5
- package/dist/services/ide/adapters/cursor-adapter.js +3 -5
- package/dist/services/ide/adapters/hermes-adapter.js +2 -4
- package/dist/services/ide/adapters/openclaw-adapter.js +2 -4
- package/dist/services/ide/adapters/qoder-adapter.js +2 -4
- package/dist/services/ide/adapters/tongyi-lingma-adapter.js +1 -1
- package/dist/services/ide/adapters/trae-adapter.js +3 -5
- package/dist/services/ide/adapters/zcode-adapter.js +8 -7
- package/dist/services/ide/current-model-detector.js +2 -1
- package/dist/services/ide/ide-compact-types.d.ts +153 -0
- package/dist/services/ide/ide-compact-types.js +1 -0
- package/dist/services/ide/ide-registry.js +1 -1
- package/dist/services/ide/ide-types.d.ts +7 -145
- package/dist/services/ide/resource-profile.js +1 -1
- package/dist/services/ide/shared/atomic-json.js +2 -1
- package/dist/services/impact/impact-scan-service.js +12 -5
- package/dist/services/job/job-commit-verification.d.ts +73 -0
- package/dist/services/job/job-commit-verification.js +72 -0
- package/dist/services/job/job-orchestrator.d.ts +42 -0
- package/dist/services/job/job-orchestrator.js +110 -10
- package/dist/services/job/job-progress-store.d.ts +75 -5
- package/dist/services/job/job-progress-store.js +83 -6
- package/dist/services/job/job-rotation.d.ts +1 -1
- package/dist/services/job/job-rotation.js +5 -1
- package/dist/services/job/job-state-store.js +2 -2
- package/dist/services/job/job-types.js +49 -20
- package/dist/services/job/subagent-job-wrapper.d.ts +1 -1
- package/dist/services/job/subagent-job-wrapper.js +5 -1
- package/dist/services/job-snapshot/snapshot.js +2 -2
- package/dist/services/karpathy-cost/karpathy-cost-check-service.js +23 -13
- package/dist/services/legacy/legacy-detector.js +51 -5
- package/dist/services/lint/detect-eslint.js +10 -4
- package/dist/services/lint/detect-ocr-18.js +11 -3
- package/dist/services/lint/eslint-runner-support.d.ts +22 -0
- package/dist/services/lint/eslint-runner-support.js +185 -0
- package/dist/services/lint/eslint-runner-types.d.ts +69 -0
- package/dist/services/lint/eslint-runner-types.js +11 -0
- package/dist/services/lint/eslint-runner.d.ts +4 -56
- package/dist/services/lint/eslint-runner.js +24 -178
- package/dist/services/lint/npx-resolver.js +1 -3
- package/dist/services/lint/ocr-18-acquire.js +15 -4
- package/dist/services/lint/ocr-multilang-adapter.js +4 -5
- package/dist/services/llm/anthropic-runner.js +4 -1
- package/dist/services/log/log-commands-service.js +2 -6
- package/dist/services/log/logger.js +15 -12
- package/dist/services/log/retention.js +3 -2
- package/dist/services/loop/evaluator-dispatcher.js +78 -42
- package/dist/services/loop/loop-bee-relation-service.d.ts +4 -4
- package/dist/services/loop/loop-bee-relation-service.js +36 -40
- package/dist/services/loop/loop-bee-relation-store.d.ts +3 -3
- package/dist/services/loop/loop-bee-relation-store.js +9 -11
- package/dist/services/loop/loop-bee-relation-types.d.ts +1 -1
- package/dist/services/loop/loop-bee-relation-types.js +14 -25
- package/dist/services/loop/loop-release-service.d.ts +2 -2
- package/dist/services/loop/loop-release-service.js +3 -3
- package/dist/services/loop/loop-release-store.d.ts +2 -2
- package/dist/services/loop/loop-release-store.js +4 -6
- package/dist/services/loop/loop-release-types.d.ts +1 -1
- package/dist/services/loop/loop-release-types.js +21 -31
- package/dist/services/loop/monotonic-guard-types.d.ts +51 -0
- package/dist/services/loop/monotonic-guard-types.js +9 -0
- package/dist/services/loop/monotonic-guard.d.ts +2 -43
- package/dist/services/loop/monotonic-runner-types.d.ts +63 -0
- package/dist/services/loop/monotonic-runner-types.js +17 -0
- package/dist/services/loop/monotonic-runner.d.ts +3 -34
- package/dist/services/loop/monotonic-runner.js +10 -20
- package/dist/services/loop/run-driver.js +16 -8
- package/dist/services/loop/spec-service.d.ts +0 -5
- package/dist/services/loop/spec-service.js +49 -9
- package/dist/services/memory/llm-reranker-core.d.ts +108 -0
- package/dist/services/memory/llm-reranker-core.js +105 -0
- package/dist/services/memory/llm-reranker.d.ts +3 -94
- package/dist/services/memory/llm-reranker.js +13 -102
- package/dist/services/memory/memory-ingest-service.d.ts +1 -22
- package/dist/services/memory/memory-ingest-service.js +29 -76
- package/dist/services/memory/memory-ingest-support.d.ts +23 -0
- package/dist/services/memory/memory-ingest-support.js +81 -0
- package/dist/services/memory/memory-rotate-service.js +41 -8
- package/dist/services/memory/memory-search-service.js +8 -4
- package/dist/services/memory/project-context-service.js +26 -5
- package/dist/services/memory/project-memory-service/index/kind-dispatch.d.ts +2 -7
- package/dist/services/memory/project-memory-service/index/kind-dispatch.js +17 -136
- package/dist/services/memory/project-memory-service/index/project-memory-plan-exec.d.ts +7 -0
- package/dist/services/memory/project-memory-service/index/project-memory-plan-exec.js +150 -0
- package/dist/services/memory/project-memory-service/index/ranking.js +6 -3
- package/dist/services/memory/project-memory-service/index/reindex.js +14 -5
- package/dist/services/memory/project-memory-service/memory-kinds.d.ts +31 -0
- package/dist/services/memory/project-memory-service/memory-kinds.js +87 -0
- package/dist/services/memory/project-memory-service/parsers/frontmatter-parse.d.ts +24 -0
- package/dist/services/memory/project-memory-service/parsers/frontmatter-parse.js +104 -0
- package/dist/services/memory/project-memory-service/parsers/frontmatter.d.ts +2 -24
- package/dist/services/memory/project-memory-service/parsers/frontmatter.js +28 -79
- package/dist/services/memory/project-memory-service/parsers/markdown-pure.js +15 -3
- package/dist/services/memory/project-memory-service/store/atomic-write.js +34 -22
- package/dist/services/memory/project-memory-service/store/paths.js +2 -1
- package/dist/services/memory/project-memory-service/types.d.ts +3 -31
- package/dist/services/memory/project-memory-service/types.js +1 -76
- package/dist/services/migrate-skill-name/migrate.js +1 -1
- package/dist/services/migrate-skill-name/schema.js +1 -1
- package/dist/services/mode/mode-enforcement.js +4 -2
- package/dist/services/mode/mode-status-service.d.ts +27 -9
- package/dist/services/mode/mode-status-service.js +64 -12
- package/dist/services/observability/aggregation-helpers.d.ts +22 -0
- package/dist/services/observability/aggregation-helpers.js +65 -0
- package/dist/services/observability/aggregation-types.d.ts +66 -0
- package/dist/services/observability/aggregation-types.js +34 -0
- package/dist/services/observability/aggregation.d.ts +5 -53
- package/dist/services/observability/aggregation.js +17 -80
- package/dist/services/observability/jsonl-store.js +2 -1
- package/dist/services/observability/observability-schema.d.ts +71 -0
- package/dist/services/observability/observability-schema.js +64 -0
- package/dist/services/observability/observability-service.d.ts +3 -56
- package/dist/services/observability/observability-service.js +9 -49
- package/dist/services/openspec/coverage-evidence-reader.js +18 -11
- package/dist/services/openspec/openspec-archive-service.js +31 -24
- package/dist/services/openspec/openspec-init-service.js +8 -2
- package/dist/services/openspec/openspec-propose-from-doctor-service.js +1 -1
- package/dist/services/openspec/openspec-scan-service.js +4 -1
- package/dist/services/openspec/openspec-validate-service.js +26 -5
- package/dist/services/perf/perf-baseline-service.js +2 -6
- package/dist/services/polyrepo/polyrepo-dispatcher.js +2 -1
- package/dist/services/polyrepo/polyrepo-scanner.js +4 -1
- package/dist/services/prd/handoff-frontmatter-shape.d.ts +42 -0
- package/dist/services/prd/handoff-frontmatter-shape.js +67 -0
- package/dist/services/prd/handoff-frontmatter.js +1 -1
- package/dist/services/prd/handoff-path-resolution.d.ts +37 -0
- package/dist/services/prd/handoff-path-resolution.js +101 -0
- package/dist/services/prd/handoff-service.d.ts +1 -37
- package/dist/services/prd/handoff-service.js +16 -148
- package/dist/services/prd/prd-blocks-checker.js +28 -8
- package/dist/services/prd/project-scan-bootstrap-service.js +1 -5
- package/dist/services/prd/project-scan-reader.js +1 -4
- package/dist/services/prd/project-scan-sediment.js +1 -4
- package/dist/services/preferences/preferences-service.js +6 -8
- package/dist/services/preferences/preferences-types.js +4 -4
- package/dist/services/qa/bdd-test-style-contract.d.ts +41 -0
- package/dist/services/qa/bdd-test-style-contract.js +37 -0
- package/dist/services/qa/bdd-test-style-verifier.d.ts +2 -24
- package/dist/services/qa/bdd-test-style-verifier.js +5 -31
- package/dist/services/qa/browser-event-logger.js +2 -1
- package/dist/services/qa/qa-business-review-state.js +20 -5
- package/dist/services/qa/screenshot-archive-service.js +1 -3
- package/dist/services/rd/ast-gate.js +2 -2
- package/dist/services/rd/impl.js +1 -1
- package/dist/services/rd/rd-service.js +117 -43
- package/dist/services/rd/reviewer-dispatch-policy.js +4 -7
- package/dist/services/rd/standards-diagnostic.js +4 -1
- package/dist/services/rd/strategy.js +10 -3
- package/dist/services/rd/tactical-stage.js +2 -2
- package/dist/services/rd/types.js +9 -7
- package/dist/services/rd-swarm/rd-swarm-service.d.ts +2 -45
- package/dist/services/rd-swarm/rd-swarm-service.js +140 -21
- package/dist/services/rd-swarm/rd-swarm-types.d.ts +54 -0
- package/dist/services/rd-swarm/rd-swarm-types.js +10 -0
- package/dist/services/recommendations/capability-map-service.js +10 -2
- package/dist/services/recommendations/capability-seed-items.js +81 -14
- package/dist/services/recommendations/capability-seed-mappings.js +420 -48
- package/dist/services/recommendations/capability-seed-sources-mcp-server.d.ts +9 -0
- package/dist/services/recommendations/capability-seed-sources-mcp-server.js +233 -0
- package/dist/services/recommendations/capability-seed-sources.js +127 -32
- package/dist/services/release/release-state.d.ts +2 -2
- package/dist/services/release/release-state.js +44 -15
- package/dist/services/release/version-precheck-layer-changeset.d.ts +2 -0
- package/dist/services/release/version-precheck-layer-changeset.js +43 -0
- package/dist/services/release/version-precheck-service.d.ts +11 -36
- package/dist/services/release/version-precheck-service.js +20 -104
- package/dist/services/release/version-precheck-support.d.ts +53 -0
- package/dist/services/release/version-precheck-support.js +64 -0
- package/dist/services/retrospective/retrospective-index.js +17 -3
- package/dist/services/retrospective/retrospective-search-service.js +6 -2
- package/dist/services/retrospective/retrospective-show.js +4 -1
- package/dist/services/reviewer/model-family.js +7 -1
- package/dist/services/reviewer/providers/anthropic.d.ts +5 -0
- package/dist/services/reviewer/providers/anthropic.js +10 -1
- package/dist/services/reviewer/providers/openai.d.ts +5 -0
- package/dist/services/reviewer/providers/openai.js +10 -1
- package/dist/services/reviewer/reviewer-config.js +4 -2
- package/dist/services/reviewer/reviewer-service.d.ts +2 -36
- package/dist/services/reviewer/reviewer-service.js +2 -1
- package/dist/services/reviewer/reviewer-types.d.ts +43 -0
- package/dist/services/reviewer/reviewer-types.js +1 -0
- package/dist/services/role/role-registry.js +9 -1
- package/dist/services/runtime/runtime-detector.js +4 -1
- package/dist/services/runtime/vendors/claude-code.js +14 -6
- package/dist/services/runtime/vendors/codex.js +11 -3
- package/dist/services/runtime/vendors/copilot.js +11 -3
- package/dist/services/sc/sc-service.js +28 -15
- package/dist/services/scan/acceptance-coverage-service.js +4 -1
- package/dist/services/scan/api-diff-openapi-schema-read.d.ts +67 -0
- package/dist/services/scan/api-diff-openapi-schema-read.js +154 -0
- package/dist/services/scan/api-diff-openapi.d.ts +16 -2
- package/dist/services/scan/api-diff-openapi.js +19 -123
- package/dist/services/scan/api-diff-recorded.js +16 -3
- package/dist/services/scan/api-diff-service.js +49 -16
- package/dist/services/scan/api-diff-types.js +12 -3
- package/dist/services/scan/api-surface-helpers.d.ts +13 -0
- package/dist/services/scan/api-surface-helpers.js +31 -0
- package/dist/services/scan/api-surface-service.d.ts +2 -45
- package/dist/services/scan/api-surface-service.js +15 -26
- package/dist/services/scan/api-surface-types.d.ts +54 -0
- package/dist/services/scan/api-surface-types.js +10 -0
- package/dist/services/scan/archetype-detection.d.ts +37 -0
- package/dist/services/scan/archetype-detection.js +142 -0
- package/dist/services/scan/archetype-service.js +36 -125
- package/dist/services/scan/diff-scope-service.js +35 -15
- package/dist/services/scan/existing-system-service.js +16 -99
- package/dist/services/scan/existing-system-visual-tokens.d.ts +20 -0
- package/dist/services/scan/existing-system-visual-tokens.js +123 -0
- package/dist/services/scan/file-size-policy.d.ts +86 -0
- package/dist/services/scan/file-size-policy.js +184 -0
- package/dist/services/scan/file-size-scan.d.ts +30 -3
- package/dist/services/scan/file-size-scan.js +47 -9
- package/dist/services/scan/karpathy-service.js +6 -1
- package/dist/services/scan/orphan-service.js +86 -20
- package/dist/services/scan/type-sanity-service.js +104 -10
- package/dist/services/sediment/dispose-confirm.d.ts +2 -2
- package/dist/services/sediment/dispose-confirm.js +2 -2
- package/dist/services/sediment/json-schema.d.ts +1 -1
- package/dist/services/sediment/json-schema.js +25 -13
- package/dist/services/sediment/manifest-lint.d.ts +1 -12
- package/dist/services/sediment/manifest-lint.js +1 -7
- package/dist/services/sediment/pool-paths.js +13 -9
- package/dist/services/sediment/pool-read.d.ts +1 -1
- package/dist/services/sediment/pool-read.js +42 -18
- package/dist/services/sediment/pool-rebuild-index.d.ts +1 -1
- package/dist/services/sediment/pool-rebuild-index.js +5 -5
- package/dist/services/sediment/pool-write.d.ts +1 -1
- package/dist/services/sediment/pool-write.js +7 -7
- package/dist/services/sediment/promotion-gate.d.ts +1 -1
- package/dist/services/sediment/promotion-gate.js +9 -9
- package/dist/services/sediment/types.d.ts +8 -8
- package/dist/services/session/binding-status-service.js +14 -4
- package/dist/services/session/caller-binding-service.js +2 -1
- package/dist/services/session/getSessionDir.js +4 -1
- package/dist/services/session/index.d.ts +1 -1
- package/dist/services/session/index.js +1 -1
- package/dist/services/session/resolve-caller-id.js +7 -5
- package/dist/services/session/session-binding-bridge.js +26 -25
- package/dist/services/session/session-checkpoint-service.js +1 -1
- package/dist/services/session/session-file-schema.d.ts +70 -0
- package/dist/services/session/session-file-schema.js +68 -0
- package/dist/services/session/session-manager.d.ts +6 -6
- package/dist/services/session/session-manager.js +30 -29
- package/dist/services/session/session-resume-service.js +2 -1
- package/dist/services/share/bundle-format-constants.d.ts +85 -0
- package/dist/services/share/bundle-format-constants.js +100 -0
- package/dist/services/share/bundle-reader.d.ts +3 -3
- package/dist/services/share/bundle-reader.js +75 -68
- package/dist/services/share/bundle-types.d.ts +3 -70
- package/dist/services/share/bundle-types.js +38 -107
- package/dist/services/share/bundle-writer.d.ts +3 -3
- package/dist/services/share/bundle-writer.js +101 -91
- package/dist/services/share/run-state-contract.d.ts +1 -1
- package/dist/services/share/run-state-contract.js +7 -13
- package/dist/services/signal/cancel-handler.js +2 -1
- package/dist/services/skill/resume-detector.js +6 -4
- package/dist/services/skill/skill-scheduler.js +3 -1
- package/dist/services/skill/skill-search-service.js +4 -4
- package/dist/services/skillhub/release-diff.d.ts +2 -2
- package/dist/services/skillhub/release-diff.js +6 -10
- package/dist/services/skillhub/release-export.d.ts +2 -2
- package/dist/services/skillhub/release-export.js +15 -17
- package/dist/services/skillhub/release-gc-blobs.d.ts +2 -2
- package/dist/services/skillhub/release-gc-blobs.js +4 -4
- package/dist/services/skillhub/release-import.d.ts +2 -2
- package/dist/services/skillhub/release-import.js +13 -12
- package/dist/services/skillhub/release-retain.d.ts +3 -3
- package/dist/services/skillhub/release-retain.js +22 -22
- package/dist/services/skillhub/sqlite-store.d.ts +1 -1
- package/dist/services/skillhub/sqlite-store.js +12 -11
- package/dist/services/skillhub/tar-runtime.js +15 -15
- package/dist/services/skillhub/types.d.ts +4 -4
- package/dist/services/skills/hooks-codegate-superpowers.js +16 -7
- package/dist/services/skills/hooks-settings-service.js +61 -19
- package/dist/services/skills/presence-lease-service.js +26 -16
- package/dist/services/skills/presence-lease-types.d.ts +1 -1
- package/dist/services/skills/presence-lease-types.js +1 -1
- package/dist/services/skills/skill-conformance-service.js +40 -8
- package/dist/services/skills/skill-presence-service.js +16 -14
- package/dist/services/skills/skill-runbook-service.js +2 -1
- package/dist/services/skills/skill-statusline-model.d.ts +128 -0
- package/dist/services/skills/skill-statusline-model.js +163 -0
- package/dist/services/skills/skill-statusline-renderer.js +4 -3
- package/dist/services/skills/skill-statusline-service.d.ts +3 -100
- package/dist/services/skills/skill-statusline-service.js +56 -163
- package/dist/services/skills/statusline-palette.js +11 -6
- package/dist/services/skills/statusline-settings-service.js +2 -1
- package/dist/services/skills/sync-service-support.d.ts +65 -0
- package/dist/services/skills/sync-service-support.js +50 -0
- package/dist/services/skills/sync-service.d.ts +3 -66
- package/dist/services/skills/sync-service.js +15 -53
- package/dist/services/slice/calibration-store.js +8 -2
- package/dist/services/slice/cross-pass-edge-merger.d.ts +3 -28
- package/dist/services/slice/cross-pass-edge-merger.js +13 -63
- package/dist/services/slice/cross-pass-edge-static-scan-support.d.ts +69 -0
- package/dist/services/slice/cross-pass-edge-static-scan-support.js +74 -0
- package/dist/services/slice/granularity-decider.js +2 -2
- package/dist/services/slice/slice-archive-service.js +8 -3
- package/dist/services/slice/slice-check-service.js +19 -8
- package/dist/services/slice/slice-decompose-runners.js +61 -23
- package/dist/services/slice/slice-decompose-service.js +4 -4
- package/dist/services/slice/slice-review-state.js +8 -2
- package/dist/services/smoke/smoke-paths-state.js +9 -2
- package/dist/services/sop/gate-enforce-service.js +9 -2
- package/dist/services/sop/sop-advance-service.js +14 -2
- package/dist/services/sop/sop-check-service.js +16 -4
- package/dist/services/sop/sop-paths.js +3 -1
- package/dist/services/sop/sop-registry-service.js +5 -1
- package/dist/services/sop/sop-service.js +29 -7
- package/dist/services/sop/sop-types.js +5 -1
- package/dist/services/standards/ide-aware-standards-service.js +2 -2
- package/dist/services/standards/loop-engineering-lint.js +12 -5
- package/dist/services/standards/loop-engineering-readiness-lint.js +5 -5
- package/dist/services/standards/migrate-claude-rules-service.js +9 -7
- package/dist/services/standards/missing-standards-detector.js +1 -3
- package/dist/services/standards/project-context-support.d.ts +50 -0
- package/dist/services/standards/project-context-support.js +244 -0
- package/dist/services/standards/project-context-types.d.ts +30 -0
- package/dist/services/standards/project-context-types.js +11 -0
- package/dist/services/standards/project-context.d.ts +10 -22
- package/dist/services/standards/project-context.js +27 -214
- package/dist/services/standards/project-standards-service.js +43 -12
- package/dist/services/standards/standards-render-common.d.ts +15 -0
- package/dist/services/standards/standards-render-common.js +49 -0
- package/dist/services/standards/standards-render.d.ts +1 -2
- package/dist/services/standards/standards-render.js +31 -58
- package/dist/services/standards/ui-library-dispatch-block.js +1 -1
- package/dist/services/tech/tech-change-id-service.js +7 -7
- package/dist/services/tech/tech-service.js +73 -26
- package/dist/services/test-cache/test-cache-service.js +8 -3
- package/dist/services/upgrade/1x-detector-service.js +5 -3
- package/dist/services/upgrade/gitignore-migrate-service.js +5 -5
- package/dist/services/upgrade/upgrade-service.js +36 -13
- package/dist/services/verdict/envelope-parsers.d.ts +84 -0
- package/dist/services/verdict/envelope-parsers.js +146 -0
- package/dist/services/verdict/envelopes.d.ts +50 -60
- package/dist/services/verdict/envelopes.js +18 -156
- package/dist/services/verdict/verdict-aggregator.js +27 -3
- package/dist/services/vm/vm-lease.js +15 -3
- package/dist/services/web/aria-node.d.ts +27 -0
- package/dist/services/web/aria-node.js +1 -0
- package/dist/services/web/browser-acquire.js +3 -1
- package/dist/services/web/browser-cache-probe.d.ts +18 -0
- package/dist/services/web/browser-cache-probe.js +110 -0
- package/dist/services/web/browser-session-manager.js +6 -2
- package/dist/services/web/daemon-registry.js +4 -1
- package/dist/services/web/playwright-loader.d.ts +2 -70
- package/dist/services/web/playwright-types.d.ts +75 -0
- package/dist/services/web/playwright-types.js +1 -0
- package/dist/services/web/snapshot-pruner.d.ts +2 -23
- package/dist/services/web/snapshot-pruner.js +8 -3
- package/dist/services/web/web-daemon-service.js +1 -3
- package/dist/services/web/web-install-service.d.ts +3 -32
- package/dist/services/web/web-install-service.js +21 -100
- package/dist/services/web/web-install-types.d.ts +31 -0
- package/dist/services/web/web-install-types.js +13 -0
- package/dist/services/web/web-login-profile.js +7 -5
- package/dist/services/web/web-protocol.js +3 -1
- package/dist/services/workflow/pipeline-verify-gate-support.js +63 -17
- package/dist/services/workflow/pipeline-verify-service.js +17 -6
- package/dist/services/workflow/plan-reader.js +5 -1
- package/dist/services/workflow/plan-refresher.js +20 -6
- package/dist/services/workflow/plan-trigger-detector.js +31 -8
- package/dist/services/workflow/provision-dispatch-node.js +8 -3
- package/dist/services/workflow/workflow-autonomous-resume-helpers.d.ts +3 -1
- package/dist/services/workflow/workflow-autonomous-resume-helpers.js +35 -144
- package/dist/services/workflow/workflow-autonomous-resume-validation.d.ts +16 -0
- package/dist/services/workflow/workflow-autonomous-resume-validation.js +155 -0
- package/dist/services/workflow/workflow-autonomous-service.js +25 -13
- package/dist/services/workflow/workflow-graph-store-helpers.d.ts +51 -0
- package/dist/services/workflow/workflow-graph-store-helpers.js +111 -0
- package/dist/services/workflow/workflow-graph-store.d.ts +2 -35
- package/dist/services/workflow/workflow-graph-store.js +30 -107
- package/dist/services/workflow/workflow-graph-types.js +3 -3
- package/dist/services/workflow/workflow-inflight-probe.js +14 -7
- package/dist/services/workflow/workflow-loader.js +5 -1
- package/dist/services/workflow/workflow-node-lifecycle.js +22 -21
- package/dist/services/workflow/workflow-presence-lifecycle-types.d.ts +50 -0
- package/dist/services/workflow/workflow-presence-lifecycle-types.js +1 -0
- package/dist/services/workflow/workflow-presence-lifecycle.d.ts +2 -42
- package/dist/services/workflow/workflow-presence-lifecycle.js +19 -21
- package/dist/services/workflow/workflow-router-service.js +169 -27
- package/dist/services/workflow/workflow-skip-service.js +14 -4
- package/dist/services/workflow/workflow-spec-builders.d.ts +15 -0
- package/dist/services/workflow/workflow-spec-builders.js +121 -0
- package/dist/services/workflow/workflow-spec.d.ts +7 -6
- package/dist/services/workflow/workflow-spec.js +22 -116
- package/dist/services/workflow/workflow-state-store.js +2 -1
- package/dist/services/workspace/migrate-1-4-1-service.js +80 -14
- package/dist/services/workspace/migrate-service.js +66 -16
- package/dist/services/workspace/reconcile-migrate.js +6 -2
- package/dist/services/workspace/reconcile-service.js +37 -16
- package/dist/services/workspace/workspace-claude-settings-materializer.js +7 -5
- package/dist/services/workspace/workspace-clean-service.js +4 -1
- package/dist/services/workspace/workspace-service.js +11 -3
- package/dist/services/workspace/workspace-state-service.js +1 -1
- package/dist/services/worktree/git-worktree-parser.js +13 -3
- package/dist/services/worktree/host-worktree-reconciler.js +8 -4
- package/dist/services/worktree/long-path-cleanup.js +23 -6
- package/dist/services/worktree/worktree-gc-guard.js +3 -1
- package/dist/services/worktree/worktree-lease-types.d.ts +53 -0
- package/dist/services/worktree/worktree-lease-types.js +10 -0
- package/dist/services/worktree/worktree-lease.d.ts +2 -44
- package/dist/shared/array-guards.d.ts +30 -0
- package/dist/shared/array-guards.js +32 -0
- package/dist/shared/format-md-compact-internals.d.ts +26 -0
- package/dist/shared/format-md-compact-internals.js +125 -0
- package/dist/shared/format-md-compact.js +1 -117
- package/dist/shared/fs-utils.js +2 -1
- package/dist/shared/incrementing-number.js +3 -3
- package/dist/shared/json-parse.d.ts +71 -0
- package/dist/shared/json-parse.js +32 -0
- package/dist/shared/json-schema-mini.js +3 -1
- package/dist/shared/path-safety.js +3 -1
- package/dist/shared/path-utils.d.ts +20 -0
- package/dist/shared/path-utils.js +26 -0
- package/dist/shared/planner-response.js +3 -3
- package/dist/shared/stale-policy.js +1 -3
- package/dist/skills/peaks-maker/index.js +11 -11
- package/package.json +31 -8
- package/scripts/clean-dist.mjs +1 -2
- package/scripts/copy-templates.mjs +2 -4
- package/scripts/install-skills.mjs +305 -125
- package/scripts/sync-version.mjs +25 -8
- package/scripts/watch.mjs +8 -2
- package/skills/peaks-code/SKILL.md +1 -1
|
@@ -23,144 +23,20 @@
|
|
|
23
23
|
// runs (even if every write was skipped) so the index is always
|
|
24
24
|
// rebuilt against the current directory.
|
|
25
25
|
// ---------------------------------------------------------------------------
|
|
26
|
-
import {
|
|
27
|
-
import {
|
|
26
|
+
import { mkdirSync, readFileSync } from 'node:fs';
|
|
27
|
+
import { join, relative } from 'node:path';
|
|
28
28
|
import { isInsidePath, resolveInputPath, stablePath, stableRealPath } from '../../../../shared/path-utils.js';
|
|
29
29
|
import { renderMemoryFile, slugify } from '../parsers/frontmatter.js';
|
|
30
|
-
import { extractStableProjectMemoriesWithDiagnostics
|
|
31
|
-
import {
|
|
32
|
-
import {
|
|
30
|
+
import { extractStableProjectMemoriesWithDiagnostics } from '../parsers/markdown-pure.js';
|
|
31
|
+
import { assertSafeProjectMemoryDir, assertSafeSessionDir, normalizeRoot } from '../store/paths.js';
|
|
32
|
+
import { writeNewFile } from '../store/atomic-write.js';
|
|
33
33
|
import { generateMemoryIndexFile, readStoredMemoryNames } from './ranking.js';
|
|
34
34
|
import { listMarkdownFiles } from './search.js';
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
for (const artifactPath of options.artifactPaths) {
|
|
41
|
-
const safeArtifactPath = assertInsideProject(artifactPath, projectRoot);
|
|
42
|
-
const relativeArtifactPath = relative(projectRoot, safeArtifactPath).replaceAll('\\', '/');
|
|
43
|
-
const extracted = extractStableProjectMemoriesWithDiagnostics(readFileSync(safeArtifactPath, 'utf8'), relativeArtifactPath);
|
|
44
|
-
// Push order + the sort below are the pre-existing ordering contract:
|
|
45
|
-
// artifacts in argument order, memories sorted by slug.
|
|
46
|
-
extractedMemories.push(...extracted.memories);
|
|
47
|
-
droppedBlocks.push(...extracted.dropped);
|
|
48
|
-
}
|
|
49
|
-
extractedMemories.sort((left, right) => slugify(left.title).localeCompare(slugify(right.title)));
|
|
50
|
-
const slugCounts = new Map();
|
|
51
|
-
for (const memory of extractedMemories) {
|
|
52
|
-
const slug = slugify(memory.title);
|
|
53
|
-
slugCounts.set(slug, (slugCounts.get(slug) ?? 0) + 1);
|
|
54
|
-
}
|
|
55
|
-
const duplicateTitles = [...slugCounts.entries()].filter(([, count]) => count > 1).map(([slug]) => slug);
|
|
56
|
-
if (duplicateTitles.length > 0) {
|
|
57
|
-
throw new Error(`Duplicate memory titles are not allowed: ${duplicateTitles.join(', ')}`);
|
|
58
|
-
}
|
|
59
|
-
const plannedWrites = extractedMemories.map((memory) => ({
|
|
60
|
-
memory,
|
|
61
|
-
filePath: join(primaryMemoryDir, `${slugify(memory.title)}.md`),
|
|
62
|
-
content: renderMemoryFile(memory)
|
|
63
|
-
}));
|
|
64
|
-
return {
|
|
65
|
-
apply: options.apply ?? false,
|
|
66
|
-
projectRoot,
|
|
67
|
-
primaryMemoryDir,
|
|
68
|
-
backupPolicy: 'project-memory-primary-artifact-backup',
|
|
69
|
-
extractedMemories,
|
|
70
|
-
plannedWrites,
|
|
71
|
-
droppedBlocks
|
|
72
|
-
};
|
|
73
|
-
}
|
|
74
|
-
export function executeProjectMemoryExtract(options) {
|
|
75
|
-
const plan = createProjectMemoryExtractPlan(options);
|
|
76
|
-
const writtenFiles = [];
|
|
77
|
-
if (plan.apply) {
|
|
78
|
-
mkdirSync(plan.primaryMemoryDir, { recursive: true });
|
|
79
|
-
const safeMemoryDir = assertSafeProjectMemoryDir(plan.projectRoot);
|
|
80
|
-
// Idempotency: skip writes for memories whose slug already lives in
|
|
81
|
-
// .peaks/memory/. Re-running `peaks memory extract --apply` on the
|
|
82
|
-
// same handoff is a normal peaks-code / peaks-txt retry pattern (the
|
|
83
|
-
// skill prompt may invoke extract more than once when a handoff is
|
|
84
|
-
// edited and re-extracted). Without this, writeNewFile's O_EXCL
|
|
85
|
-
// throws EEXIST and aborts the whole batch. Symmetric with
|
|
86
|
-
// extractSessionMemories (line ~614) which does the same skip.
|
|
87
|
-
const existingNames = readStoredMemoryNames(plan.primaryMemoryDir);
|
|
88
|
-
for (const write of plan.plannedWrites) {
|
|
89
|
-
const slug = slugify(write.memory.title);
|
|
90
|
-
if (existingNames.has(slug))
|
|
91
|
-
continue;
|
|
92
|
-
const targetPath = resolveInputPath(write.filePath);
|
|
93
|
-
const stableTargetPath = stablePath(targetPath);
|
|
94
|
-
if (!isInsidePath(stableTargetPath, stableRealPath(safeMemoryDir))) {
|
|
95
|
-
throw new Error('Project memory write target must stay inside the project memory directory');
|
|
96
|
-
}
|
|
97
|
-
writeNewFile(targetPath, write.content);
|
|
98
|
-
writtenFiles.push(targetPath);
|
|
99
|
-
}
|
|
100
|
-
// After writing any markdown, regenerate the index so downstream
|
|
101
|
-
// readers (peaks project memory-index, peaks-txt re-runs, the next
|
|
102
|
-
// session's presence-set bootstrap) see the new memory. Without
|
|
103
|
-
// this, `peaks memory extract --apply` would leave the index stale
|
|
104
|
-
// and `readMemoryIndex` would either return the empty bootstrap or
|
|
105
|
-
// — pre-bootstrap-fix — return null. Symmetric with
|
|
106
|
-
// extractSessionMemories, which already regenerates the index on
|
|
107
|
-
// apply (see line ~626). We regen whenever --apply is set, even
|
|
108
|
-
// if every write was skipped by idempotency, so the index is
|
|
109
|
-
// always rebuilt against the current .peaks/memory/ directory.
|
|
110
|
-
const indexPath = join(plan.primaryMemoryDir, 'index.json');
|
|
111
|
-
generateMemoryIndexFile(plan.projectRoot, plan.primaryMemoryDir, indexPath);
|
|
112
|
-
}
|
|
113
|
-
return { ...plan, writtenFiles };
|
|
114
|
-
}
|
|
115
|
-
export function createProjectMemoryBackupPlan(options) {
|
|
116
|
-
const projectRoot = normalizeRoot(options.projectRoot);
|
|
117
|
-
const artifactWorkspacePath = normalizeRoot(options.artifactWorkspacePath);
|
|
118
|
-
if (isInsidePath(artifactWorkspacePath, projectRoot)) {
|
|
119
|
-
throw new Error('Artifact workspace must be outside the project root');
|
|
120
|
-
}
|
|
121
|
-
const primaryMemoryDir = assertSafeProjectMemoryDir(projectRoot);
|
|
122
|
-
const backupMemoryDir = join(artifactWorkspacePath, '.peaks', 'memory-backups', 'project-memory-primary');
|
|
123
|
-
const plannedCopies = listMarkdownFiles(primaryMemoryDir).map((sourcePath) => {
|
|
124
|
-
assertSafeMemoryFileContent(readFileSync(sourcePath, 'utf8'));
|
|
125
|
-
const relativeMemoryPath = relative(primaryMemoryDir, sourcePath);
|
|
126
|
-
return {
|
|
127
|
-
sourcePath,
|
|
128
|
-
targetPath: join(backupMemoryDir, relativeMemoryPath)
|
|
129
|
-
};
|
|
130
|
-
});
|
|
131
|
-
return {
|
|
132
|
-
apply: options.apply ?? false,
|
|
133
|
-
projectRoot,
|
|
134
|
-
artifactWorkspacePath,
|
|
135
|
-
primaryMemoryDir,
|
|
136
|
-
backupMemoryDir,
|
|
137
|
-
plannedCopies
|
|
138
|
-
};
|
|
139
|
-
}
|
|
140
|
-
export function executeProjectMemoryBackup(options) {
|
|
141
|
-
const plan = createProjectMemoryBackupPlan(options);
|
|
142
|
-
const copiedFiles = [];
|
|
143
|
-
if (plan.apply) {
|
|
144
|
-
const safeMemoryDir = assertSafeProjectMemoryDir(plan.projectRoot);
|
|
145
|
-
mkdirSync(plan.backupMemoryDir, { recursive: true });
|
|
146
|
-
for (const copy of plan.plannedCopies) {
|
|
147
|
-
const sourcePath = realPathOrThrow(copy.sourcePath, 'Project memory source must stay inside the project memory directory', 'Project memory source does not exist');
|
|
148
|
-
if (!isInsidePath(sourcePath, stableRealPath(safeMemoryDir))) {
|
|
149
|
-
throw new Error('Project memory source must stay inside the project memory directory');
|
|
150
|
-
}
|
|
151
|
-
mkdirSync(dirname(copy.targetPath), { recursive: true });
|
|
152
|
-
copyFileSync(sourcePath, copy.targetPath);
|
|
153
|
-
copiedFiles.push(copy.targetPath);
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
return { ...plan, copiedFiles };
|
|
157
|
-
}
|
|
158
|
-
export function summarizeProjectMemoryExtractResult(result) {
|
|
159
|
-
return summarizeExtractResult(result);
|
|
160
|
-
}
|
|
161
|
-
export function summarizeProjectMemoryBackupResult(result) {
|
|
162
|
-
return summarizeBackupResult(result);
|
|
163
|
-
}
|
|
35
|
+
// The `peaks memory extract` / `backup` plan-execute-summarize surface now
|
|
36
|
+
// lives in `./project-memory-plan-exec.ts`. Re-exported here so the `index.ts`
|
|
37
|
+
// barrel and `memory-path-missing-vs-escape.test.ts` keep resolving it from
|
|
38
|
+
// `./index/kind-dispatch.js` unchanged.
|
|
39
|
+
export { createProjectMemoryBackupPlan, createProjectMemoryExtractPlan, executeProjectMemoryBackup, executeProjectMemoryExtract, summarizeProjectMemoryBackupResult, summarizeProjectMemoryExtractResult } from './project-memory-plan-exec.js';
|
|
164
40
|
export function extractSessionMemories(options) {
|
|
165
41
|
const projectRoot = normalizeRoot(options.projectRoot);
|
|
166
42
|
const apply = options.apply ?? false;
|
|
@@ -223,7 +99,10 @@ export function extractSessionMemories(options) {
|
|
|
223
99
|
// string arithmetic on two already-validated absolute path strings and
|
|
224
100
|
// does not throw for them, so hoisting it cannot turn a path-join problem
|
|
225
101
|
// into a fatal error that the old swallow would have absorbed.
|
|
226
|
-
scanFailures.push({
|
|
102
|
+
scanFailures.push({
|
|
103
|
+
file: relativePath,
|
|
104
|
+
detail: error instanceof Error ? error.message : String(error)
|
|
105
|
+
});
|
|
227
106
|
}
|
|
228
107
|
}
|
|
229
108
|
if (allExtracted.length === 0) {
|
|
@@ -246,7 +125,9 @@ export function extractSessionMemories(options) {
|
|
|
246
125
|
const slug = slugify(memory.title);
|
|
247
126
|
slugCounts.set(slug, (slugCounts.get(slug) ?? 0) + 1);
|
|
248
127
|
}
|
|
249
|
-
const duplicateTitles = [...slugCounts.entries()]
|
|
128
|
+
const duplicateTitles = [...slugCounts.entries()]
|
|
129
|
+
.filter(([, count]) => count > 1)
|
|
130
|
+
.map(([slug]) => slug);
|
|
250
131
|
if (duplicateTitles.length > 0) {
|
|
251
132
|
throw new Error(`Duplicate memory titles are not allowed: ${duplicateTitles.join(', ')}`);
|
|
252
133
|
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { BackupPlanOptions, ExtractPlanOptions, ProjectMemoryBackupPlan, ProjectMemoryBackupResult, ProjectMemoryBackupSummary, ProjectMemoryExtractPlan, ProjectMemoryExtractResult, ProjectMemoryExtractSummary } from '../types.js';
|
|
2
|
+
export declare function createProjectMemoryExtractPlan(options: ExtractPlanOptions): ProjectMemoryExtractPlan;
|
|
3
|
+
export declare function executeProjectMemoryExtract(options: ExtractPlanOptions): ProjectMemoryExtractResult;
|
|
4
|
+
export declare function createProjectMemoryBackupPlan(options: BackupPlanOptions): ProjectMemoryBackupPlan;
|
|
5
|
+
export declare function executeProjectMemoryBackup(options: BackupPlanOptions): ProjectMemoryBackupResult;
|
|
6
|
+
export declare function summarizeProjectMemoryExtractResult(result: ProjectMemoryExtractResult): ProjectMemoryExtractSummary;
|
|
7
|
+
export declare function summarizeProjectMemoryBackupResult(result: ProjectMemoryBackupResult): ProjectMemoryBackupSummary;
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// Project-memory create-plan / execute / summarize orchestrators.
|
|
3
|
+
//
|
|
4
|
+
// Split out of `./kind-dispatch.ts` by the `b1-filesplit-campaign` (wave 3,
|
|
5
|
+
// leaf `b1w3-c-memory`): the four `peaks memory extract` / `backup` entry
|
|
6
|
+
// points and their two projectors. `./kind-dispatch.ts` re-exports them so
|
|
7
|
+
// the `index.ts` barrel and `memory-path-missing-vs-escape.test.ts` keep
|
|
8
|
+
// resolving them from `./index/kind-dispatch.js` unchanged. The session-dir
|
|
9
|
+
// extractor (`extractSessionMemories`) stays in `kind-dispatch.ts`.
|
|
10
|
+
// ---------------------------------------------------------------------------
|
|
11
|
+
import { copyFileSync, mkdirSync, readFileSync } from 'node:fs';
|
|
12
|
+
import { dirname, join, relative } from 'node:path';
|
|
13
|
+
import { isInsidePath, resolveInputPath, stablePath, stableRealPath } from '../../../../shared/path-utils.js';
|
|
14
|
+
import { renderMemoryFile, slugify } from '../parsers/frontmatter.js';
|
|
15
|
+
import { extractStableProjectMemoriesWithDiagnostics, summarizeBackupResult, summarizeExtractResult } from '../parsers/markdown-pure.js';
|
|
16
|
+
import { assertInsideProject, assertSafeProjectMemoryDir, normalizeRoot, realPathOrThrow } from '../store/paths.js';
|
|
17
|
+
import { assertSafeMemoryFileContent, writeNewFile } from '../store/atomic-write.js';
|
|
18
|
+
import { generateMemoryIndexFile, readStoredMemoryNames } from './ranking.js';
|
|
19
|
+
import { listMarkdownFiles } from './search.js';
|
|
20
|
+
export function createProjectMemoryExtractPlan(options) {
|
|
21
|
+
const projectRoot = normalizeRoot(options.projectRoot);
|
|
22
|
+
const primaryMemoryDir = assertSafeProjectMemoryDir(projectRoot);
|
|
23
|
+
const extractedMemories = [];
|
|
24
|
+
const droppedBlocks = [];
|
|
25
|
+
for (const artifactPath of options.artifactPaths) {
|
|
26
|
+
const safeArtifactPath = assertInsideProject(artifactPath, projectRoot);
|
|
27
|
+
const relativeArtifactPath = relative(projectRoot, safeArtifactPath).replaceAll('\\', '/');
|
|
28
|
+
const extracted = extractStableProjectMemoriesWithDiagnostics(readFileSync(safeArtifactPath, 'utf8'), relativeArtifactPath);
|
|
29
|
+
// Push order + the sort below are the pre-existing ordering contract:
|
|
30
|
+
// artifacts in argument order, memories sorted by slug.
|
|
31
|
+
extractedMemories.push(...extracted.memories);
|
|
32
|
+
droppedBlocks.push(...extracted.dropped);
|
|
33
|
+
}
|
|
34
|
+
extractedMemories.sort((left, right) => slugify(left.title).localeCompare(slugify(right.title)));
|
|
35
|
+
const slugCounts = new Map();
|
|
36
|
+
for (const memory of extractedMemories) {
|
|
37
|
+
const slug = slugify(memory.title);
|
|
38
|
+
slugCounts.set(slug, (slugCounts.get(slug) ?? 0) + 1);
|
|
39
|
+
}
|
|
40
|
+
const duplicateTitles = [...slugCounts.entries()]
|
|
41
|
+
.filter(([, count]) => count > 1)
|
|
42
|
+
.map(([slug]) => slug);
|
|
43
|
+
if (duplicateTitles.length > 0) {
|
|
44
|
+
throw new Error(`Duplicate memory titles are not allowed: ${duplicateTitles.join(', ')}`);
|
|
45
|
+
}
|
|
46
|
+
const plannedWrites = extractedMemories.map((memory) => ({
|
|
47
|
+
memory,
|
|
48
|
+
filePath: join(primaryMemoryDir, `${slugify(memory.title)}.md`),
|
|
49
|
+
content: renderMemoryFile(memory)
|
|
50
|
+
}));
|
|
51
|
+
return {
|
|
52
|
+
apply: options.apply ?? false,
|
|
53
|
+
projectRoot,
|
|
54
|
+
primaryMemoryDir,
|
|
55
|
+
backupPolicy: 'project-memory-primary-artifact-backup',
|
|
56
|
+
extractedMemories,
|
|
57
|
+
plannedWrites,
|
|
58
|
+
droppedBlocks
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
export function executeProjectMemoryExtract(options) {
|
|
62
|
+
const plan = createProjectMemoryExtractPlan(options);
|
|
63
|
+
const writtenFiles = [];
|
|
64
|
+
if (plan.apply) {
|
|
65
|
+
mkdirSync(plan.primaryMemoryDir, { recursive: true });
|
|
66
|
+
const safeMemoryDir = assertSafeProjectMemoryDir(plan.projectRoot);
|
|
67
|
+
// Idempotency: skip writes for memories whose slug already lives in
|
|
68
|
+
// .peaks/memory/. Re-running `peaks memory extract --apply` on the
|
|
69
|
+
// same handoff is a normal peaks-code / peaks-txt retry pattern (the
|
|
70
|
+
// skill prompt may invoke extract more than once when a handoff is
|
|
71
|
+
// edited and re-extracted). Without this, writeNewFile's O_EXCL
|
|
72
|
+
// throws EEXIST and aborts the whole batch. Symmetric with
|
|
73
|
+
// extractSessionMemories (line ~614) which does the same skip.
|
|
74
|
+
const existingNames = readStoredMemoryNames(plan.primaryMemoryDir);
|
|
75
|
+
for (const write of plan.plannedWrites) {
|
|
76
|
+
const slug = slugify(write.memory.title);
|
|
77
|
+
if (existingNames.has(slug))
|
|
78
|
+
continue;
|
|
79
|
+
const targetPath = resolveInputPath(write.filePath);
|
|
80
|
+
const stableTargetPath = stablePath(targetPath);
|
|
81
|
+
if (!isInsidePath(stableTargetPath, stableRealPath(safeMemoryDir))) {
|
|
82
|
+
throw new Error('Project memory write target must stay inside the project memory directory');
|
|
83
|
+
}
|
|
84
|
+
writeNewFile(targetPath, write.content);
|
|
85
|
+
writtenFiles.push(targetPath);
|
|
86
|
+
}
|
|
87
|
+
// After writing any markdown, regenerate the index so downstream
|
|
88
|
+
// readers (peaks project memory-index, peaks-txt re-runs, the next
|
|
89
|
+
// session's presence-set bootstrap) see the new memory. Without
|
|
90
|
+
// this, `peaks memory extract --apply` would leave the index stale
|
|
91
|
+
// and `readMemoryIndex` would either return the empty bootstrap or
|
|
92
|
+
// — pre-bootstrap-fix — return null. Symmetric with
|
|
93
|
+
// extractSessionMemories, which already regenerates the index on
|
|
94
|
+
// apply (see line ~626). We regen whenever --apply is set, even
|
|
95
|
+
// if every write was skipped by idempotency, so the index is
|
|
96
|
+
// always rebuilt against the current .peaks/memory/ directory.
|
|
97
|
+
const indexPath = join(plan.primaryMemoryDir, 'index.json');
|
|
98
|
+
generateMemoryIndexFile(plan.projectRoot, plan.primaryMemoryDir, indexPath);
|
|
99
|
+
}
|
|
100
|
+
return { ...plan, writtenFiles };
|
|
101
|
+
}
|
|
102
|
+
export function createProjectMemoryBackupPlan(options) {
|
|
103
|
+
const projectRoot = normalizeRoot(options.projectRoot);
|
|
104
|
+
const artifactWorkspacePath = normalizeRoot(options.artifactWorkspacePath);
|
|
105
|
+
if (isInsidePath(artifactWorkspacePath, projectRoot)) {
|
|
106
|
+
throw new Error('Artifact workspace must be outside the project root');
|
|
107
|
+
}
|
|
108
|
+
const primaryMemoryDir = assertSafeProjectMemoryDir(projectRoot);
|
|
109
|
+
const backupMemoryDir = join(artifactWorkspacePath, '.peaks', 'memory-backups', 'project-memory-primary');
|
|
110
|
+
const plannedCopies = listMarkdownFiles(primaryMemoryDir).map((sourcePath) => {
|
|
111
|
+
assertSafeMemoryFileContent(readFileSync(sourcePath, 'utf8'));
|
|
112
|
+
const relativeMemoryPath = relative(primaryMemoryDir, sourcePath);
|
|
113
|
+
return {
|
|
114
|
+
sourcePath,
|
|
115
|
+
targetPath: join(backupMemoryDir, relativeMemoryPath)
|
|
116
|
+
};
|
|
117
|
+
});
|
|
118
|
+
return {
|
|
119
|
+
apply: options.apply ?? false,
|
|
120
|
+
projectRoot,
|
|
121
|
+
artifactWorkspacePath,
|
|
122
|
+
primaryMemoryDir,
|
|
123
|
+
backupMemoryDir,
|
|
124
|
+
plannedCopies
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
export function executeProjectMemoryBackup(options) {
|
|
128
|
+
const plan = createProjectMemoryBackupPlan(options);
|
|
129
|
+
const copiedFiles = [];
|
|
130
|
+
if (plan.apply) {
|
|
131
|
+
const safeMemoryDir = assertSafeProjectMemoryDir(plan.projectRoot);
|
|
132
|
+
mkdirSync(plan.backupMemoryDir, { recursive: true });
|
|
133
|
+
for (const copy of plan.plannedCopies) {
|
|
134
|
+
const sourcePath = realPathOrThrow(copy.sourcePath, 'Project memory source must stay inside the project memory directory', 'Project memory source does not exist');
|
|
135
|
+
if (!isInsidePath(sourcePath, stableRealPath(safeMemoryDir))) {
|
|
136
|
+
throw new Error('Project memory source must stay inside the project memory directory');
|
|
137
|
+
}
|
|
138
|
+
mkdirSync(dirname(copy.targetPath), { recursive: true });
|
|
139
|
+
copyFileSync(sourcePath, copy.targetPath);
|
|
140
|
+
copiedFiles.push(copy.targetPath);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return { ...plan, copiedFiles };
|
|
144
|
+
}
|
|
145
|
+
export function summarizeProjectMemoryExtractResult(result) {
|
|
146
|
+
return summarizeExtractResult(result);
|
|
147
|
+
}
|
|
148
|
+
export function summarizeProjectMemoryBackupResult(result) {
|
|
149
|
+
return summarizeBackupResult(result);
|
|
150
|
+
}
|
|
@@ -55,7 +55,8 @@ export function readStoredMemoryNames(memoryDir) {
|
|
|
55
55
|
if (parsed)
|
|
56
56
|
names.add(parsed.name);
|
|
57
57
|
}
|
|
58
|
-
catch {
|
|
58
|
+
catch {
|
|
59
|
+
// TODO(g2): legacy silent catch — grace: 1 minor release (v2.14.0)
|
|
59
60
|
// ignore unreadable files
|
|
60
61
|
}
|
|
61
62
|
}
|
|
@@ -125,7 +126,8 @@ export function readExistingIndex(indexPath) {
|
|
|
125
126
|
return parsed;
|
|
126
127
|
return null;
|
|
127
128
|
}
|
|
128
|
-
catch {
|
|
129
|
+
catch {
|
|
130
|
+
// TODO(g2): legacy silent catch — grace: 1 minor release (v2.14.0)
|
|
129
131
|
return null;
|
|
130
132
|
}
|
|
131
133
|
}
|
|
@@ -175,7 +177,8 @@ export function readMemoryIndex(projectRoot) {
|
|
|
175
177
|
try {
|
|
176
178
|
generateMemoryIndexFile(normalizedRoot, memoryDir, indexPath);
|
|
177
179
|
}
|
|
178
|
-
catch {
|
|
180
|
+
catch {
|
|
181
|
+
// TODO(g2): legacy silent catch — grace: 1 minor release (v2.14.0)
|
|
179
182
|
// fall through to read existing
|
|
180
183
|
}
|
|
181
184
|
}
|
|
@@ -67,7 +67,12 @@ function collectUnclassified(diskFiles) {
|
|
|
67
67
|
}
|
|
68
68
|
catch {
|
|
69
69
|
// Unreadable file: still report it rather than dropping it silently.
|
|
70
|
-
unclassified.push({
|
|
70
|
+
unclassified.push({
|
|
71
|
+
name: basename(filePath, '.md'),
|
|
72
|
+
filePath,
|
|
73
|
+
rawKind: null,
|
|
74
|
+
reason: 'file could not be read'
|
|
75
|
+
});
|
|
71
76
|
continue;
|
|
72
77
|
}
|
|
73
78
|
if (parsed.kind.kind !== null)
|
|
@@ -112,7 +117,10 @@ function collectNameConflicts(diskFiles) {
|
|
|
112
117
|
}
|
|
113
118
|
return [...byName.entries()]
|
|
114
119
|
.filter(([, filePaths]) => filePaths.length > 1)
|
|
115
|
-
.map(([name, filePaths]) => ({
|
|
120
|
+
.map(([name, filePaths]) => ({
|
|
121
|
+
name,
|
|
122
|
+
filePaths: [...filePaths].sort((left, right) => left.localeCompare(right))
|
|
123
|
+
}))
|
|
116
124
|
.sort((left, right) => left.name.localeCompare(right.name));
|
|
117
125
|
}
|
|
118
126
|
/**
|
|
@@ -131,8 +139,7 @@ export function renderMemoryMarkdown(index, memoryDir) {
|
|
|
131
139
|
''
|
|
132
140
|
];
|
|
133
141
|
for (const kind of KIND_ORDER) {
|
|
134
|
-
const entries = [...(index.hot[kind] ?? []), ...(index.warm[kind] ?? [])]
|
|
135
|
-
.sort((left, right) => left.name.localeCompare(right.name));
|
|
142
|
+
const entries = [...(index.hot[kind] ?? []), ...(index.warm[kind] ?? [])].sort((left, right) => left.name.localeCompare(right.name));
|
|
136
143
|
if (entries.length === 0)
|
|
137
144
|
continue;
|
|
138
145
|
lines.push(`## ${kind} (${entries.length})`, '');
|
|
@@ -156,7 +163,9 @@ export function executeMemoryReindex(options) {
|
|
|
156
163
|
const memoryMdPath = join(memoryDir, MEMORY_MD_FILENAME);
|
|
157
164
|
const diskFiles = listMarkdownFiles(memoryDir).filter((filePath) => basename(filePath) !== MEMORY_MD_FILENAME);
|
|
158
165
|
const orphanIndex = readPreviousIndexEntries(indexPath)
|
|
159
|
-
.filter((entry) => typeof entry.sourcePath !== 'string' ||
|
|
166
|
+
.filter((entry) => typeof entry.sourcePath !== 'string' ||
|
|
167
|
+
entry.sourcePath.length === 0 ||
|
|
168
|
+
!existsSync(entry.sourcePath))
|
|
160
169
|
.map((entry) => ({ name: entry.name, kind: entry.kind, sourcePath: entry.sourcePath }))
|
|
161
170
|
.sort((left, right) => left.name.localeCompare(right.name));
|
|
162
171
|
const unclassified = collectUnclassified(diskFiles);
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canonical memory-kind vocabulary — the single source of truth.
|
|
3
|
+
*
|
|
4
|
+
* The union type, the accepted-kind set in the frontmatter parser, the
|
|
5
|
+
* hot/warm tier map below, `KIND_ORDER` in the reindex view, and the CLI
|
|
6
|
+
* `--kind` help text all derive from this tuple. Adding a kind here is the
|
|
7
|
+
* only edit required; TypeScript then forces `MEMORY_KIND_TIER` to cover it.
|
|
8
|
+
*
|
|
9
|
+
* Slice 2026-09-10-memory-vocab-and-rotate (E): the original 8 kinds are
|
|
10
|
+
* unchanged. The 13 appended kinds were observed on disk with real values
|
|
11
|
+
* that the index schema rejected (`peaks memory reindex` reported them as
|
|
12
|
+
* `unrecognized kind value`). Accepting them moves those files into the
|
|
13
|
+
* index; files with no kind field at all stay reported as unclassified.
|
|
14
|
+
*/
|
|
15
|
+
export declare const PROJECT_MEMORY_KINDS: readonly ["project", "rule", "decision", "reference", "feedback", "convention", "module", "lesson", "bug", "investigation", "technical-pattern", "project-rule", "design", "handoff", "session-handoff", "project-todo", "publish-closure", "project-closure", "slice-closure", "slice-pilot-findings", "sediment"];
|
|
16
|
+
export type ProjectMemoryKind = (typeof PROJECT_MEMORY_KINDS)[number];
|
|
17
|
+
/** Hot kinds keep their body in the always-available index; warm kinds are
|
|
18
|
+
* indexed with the same entry shape but read on demand. */
|
|
19
|
+
export type MemoryKindTier = 'hot' | 'warm';
|
|
20
|
+
/**
|
|
21
|
+
* Hot/warm tier per kind. Insertion order IS the deterministic section order
|
|
22
|
+
* used by the generated `MEMORY.md` (`KIND_ORDER` in `index/reindex.ts`),
|
|
23
|
+
* so this object's key order is load-bearing — append new kinds at the end
|
|
24
|
+
* of their tier block rather than reshuffling existing entries.
|
|
25
|
+
*
|
|
26
|
+
* The `Record<ProjectMemoryKind, MemoryKindTier>` annotation makes a missing
|
|
27
|
+
* tier a compile error whenever `PROJECT_MEMORY_KINDS` grows.
|
|
28
|
+
*/
|
|
29
|
+
export declare const MEMORY_KIND_TIER: Record<ProjectMemoryKind, MemoryKindTier>;
|
|
30
|
+
export declare const HOT_MEMORY_KINDS: readonly ProjectMemoryKind[];
|
|
31
|
+
export declare const WARM_MEMORY_KINDS: readonly ProjectMemoryKind[];
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// Canonical memory-kind vocabulary + hot/warm tier map.
|
|
3
|
+
//
|
|
4
|
+
// Extracted from `types.ts` by the `b1-filesplit-campaign` (wave 3, leaf
|
|
5
|
+
// `b1w3-c-memory`). This module has no imports — the tuple, the derived
|
|
6
|
+
// union type, the tier map and the two tier-filtered arrays reference only
|
|
7
|
+
// each other — so it is the leaf of the dependency graph. `types.ts`
|
|
8
|
+
// re-exports every name below so downstream callers (the `index.ts` barrel,
|
|
9
|
+
// the frontmatter parser, memory-rotate / memory-ingest) keep importing
|
|
10
|
+
// them from `./types.js` unchanged.
|
|
11
|
+
// ---------------------------------------------------------------------------
|
|
12
|
+
/**
|
|
13
|
+
* Canonical memory-kind vocabulary — the single source of truth.
|
|
14
|
+
*
|
|
15
|
+
* The union type, the accepted-kind set in the frontmatter parser, the
|
|
16
|
+
* hot/warm tier map below, `KIND_ORDER` in the reindex view, and the CLI
|
|
17
|
+
* `--kind` help text all derive from this tuple. Adding a kind here is the
|
|
18
|
+
* only edit required; TypeScript then forces `MEMORY_KIND_TIER` to cover it.
|
|
19
|
+
*
|
|
20
|
+
* Slice 2026-09-10-memory-vocab-and-rotate (E): the original 8 kinds are
|
|
21
|
+
* unchanged. The 13 appended kinds were observed on disk with real values
|
|
22
|
+
* that the index schema rejected (`peaks memory reindex` reported them as
|
|
23
|
+
* `unrecognized kind value`). Accepting them moves those files into the
|
|
24
|
+
* index; files with no kind field at all stay reported as unclassified.
|
|
25
|
+
*/
|
|
26
|
+
export const PROJECT_MEMORY_KINDS = [
|
|
27
|
+
// Original 8 (pre-2026-09-10).
|
|
28
|
+
'project',
|
|
29
|
+
'rule',
|
|
30
|
+
'decision',
|
|
31
|
+
'reference',
|
|
32
|
+
'feedback',
|
|
33
|
+
'convention',
|
|
34
|
+
'module',
|
|
35
|
+
'lesson',
|
|
36
|
+
// Slice E expansion — observed on-disk values, hot tier.
|
|
37
|
+
'bug',
|
|
38
|
+
'investigation',
|
|
39
|
+
'technical-pattern',
|
|
40
|
+
'project-rule',
|
|
41
|
+
// Slice E expansion — observed on-disk values, warm tier.
|
|
42
|
+
'design',
|
|
43
|
+
'handoff',
|
|
44
|
+
'session-handoff',
|
|
45
|
+
'project-todo',
|
|
46
|
+
'publish-closure',
|
|
47
|
+
'project-closure',
|
|
48
|
+
'slice-closure',
|
|
49
|
+
'slice-pilot-findings',
|
|
50
|
+
'sediment'
|
|
51
|
+
];
|
|
52
|
+
/**
|
|
53
|
+
* Hot/warm tier per kind. Insertion order IS the deterministic section order
|
|
54
|
+
* used by the generated `MEMORY.md` (`KIND_ORDER` in `index/reindex.ts`),
|
|
55
|
+
* so this object's key order is load-bearing — append new kinds at the end
|
|
56
|
+
* of their tier block rather than reshuffling existing entries.
|
|
57
|
+
*
|
|
58
|
+
* The `Record<ProjectMemoryKind, MemoryKindTier>` annotation makes a missing
|
|
59
|
+
* tier a compile error whenever `PROJECT_MEMORY_KINDS` grows.
|
|
60
|
+
*/
|
|
61
|
+
export const MEMORY_KIND_TIER = {
|
|
62
|
+
// hot — full body kept in the index
|
|
63
|
+
feedback: 'hot',
|
|
64
|
+
decision: 'hot',
|
|
65
|
+
rule: 'hot',
|
|
66
|
+
convention: 'hot',
|
|
67
|
+
module: 'hot',
|
|
68
|
+
lesson: 'hot',
|
|
69
|
+
bug: 'hot',
|
|
70
|
+
investigation: 'hot',
|
|
71
|
+
'technical-pattern': 'hot',
|
|
72
|
+
'project-rule': 'hot',
|
|
73
|
+
// warm — same entry shape, read on demand
|
|
74
|
+
project: 'warm',
|
|
75
|
+
reference: 'warm',
|
|
76
|
+
design: 'warm',
|
|
77
|
+
handoff: 'warm',
|
|
78
|
+
'session-handoff': 'warm',
|
|
79
|
+
'project-todo': 'warm',
|
|
80
|
+
'publish-closure': 'warm',
|
|
81
|
+
'project-closure': 'warm',
|
|
82
|
+
'slice-closure': 'warm',
|
|
83
|
+
'slice-pilot-findings': 'warm',
|
|
84
|
+
sediment: 'warm'
|
|
85
|
+
};
|
|
86
|
+
export const HOT_MEMORY_KINDS = PROJECT_MEMORY_KINDS.filter((kind) => MEMORY_KIND_TIER[kind] === 'hot');
|
|
87
|
+
export const WARM_MEMORY_KINDS = PROJECT_MEMORY_KINDS.filter((kind) => MEMORY_KIND_TIER[kind] === 'warm');
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { type ExtractedProjectMemory, type MemoryBlockParse, type ProjectMemoryKind } from '../types.js';
|
|
2
|
+
/** Accepted-kind set, derived from the canonical `PROJECT_MEMORY_KINDS`
|
|
3
|
+
* tuple so the parser cannot drift from the union type / tier map. */
|
|
4
|
+
export declare const VALID_MEMORY_KINDS: ReadonlySet<ProjectMemoryKind>;
|
|
5
|
+
/** Exported for guard tests + tooling that needs to enumerate the accepted
|
|
6
|
+
* set (CLI help text, `--kind` validation) without duplicating the literal. */
|
|
7
|
+
export declare const VALID_PROJECT_MEMORY_KINDS: readonly ProjectMemoryKind[];
|
|
8
|
+
export declare function slugify(title: string): string;
|
|
9
|
+
/**
|
|
10
|
+
* Single implementation of the extract-path block parse. Returns a
|
|
11
|
+
* discriminated result so the caller can say WHY a found block was rejected.
|
|
12
|
+
*
|
|
13
|
+
* The precondition order mirrors the original combined `if` exactly
|
|
14
|
+
* (separator → title → kind present → kind valid → body non-empty), so the
|
|
15
|
+
* accepted set is bit-for-bit what it always was; only the explanation is new.
|
|
16
|
+
*/
|
|
17
|
+
export declare function parseBlockResult(block: string, sourceArtifact: string): MemoryBlockParse;
|
|
18
|
+
/**
|
|
19
|
+
* `null`-on-failure projection of `parseBlockResult`. Kept because callers
|
|
20
|
+
* (and the parser's own contract) consume a plain nullable value; both views
|
|
21
|
+
* come from the one implementation above, so they cannot diverge.
|
|
22
|
+
*/
|
|
23
|
+
export declare function parseBlock(block: string, sourceArtifact: string): ExtractedProjectMemory | null;
|
|
24
|
+
export declare function renderMemoryFile(memory: ExtractedProjectMemory): string;
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// Frontmatter extract-path surface for project memory files.
|
|
3
|
+
//
|
|
4
|
+
// Split out of `./frontmatter.ts` by the `b1-filesplit-campaign` (wave 3,
|
|
5
|
+
// leaf `b1w3-c-memory`): the accepted-kind allow-list, the `slugify` helper,
|
|
6
|
+
// and the extract-path block parser / renderer. `./frontmatter.ts` re-exports
|
|
7
|
+
// every name here so the `index.ts` barrel, `markdown-pure.ts` and the CLI
|
|
8
|
+
// keep importing them from `./parsers/frontmatter.js` unchanged.
|
|
9
|
+
// ---------------------------------------------------------------------------
|
|
10
|
+
import { PROJECT_MEMORY_KINDS } from '../types.js';
|
|
11
|
+
/** Accepted-kind set, derived from the canonical `PROJECT_MEMORY_KINDS`
|
|
12
|
+
* tuple so the parser cannot drift from the union type / tier map. */
|
|
13
|
+
export const VALID_MEMORY_KINDS = new Set(PROJECT_MEMORY_KINDS);
|
|
14
|
+
/** Exported for guard tests + tooling that needs to enumerate the accepted
|
|
15
|
+
* set (CLI help text, `--kind` validation) without duplicating the literal. */
|
|
16
|
+
export const VALID_PROJECT_MEMORY_KINDS = PROJECT_MEMORY_KINDS;
|
|
17
|
+
export function slugify(title) {
|
|
18
|
+
const slug = title
|
|
19
|
+
.toLowerCase()
|
|
20
|
+
.replace(/[^a-z0-9]+/g, '-')
|
|
21
|
+
.replace(/^-+|-+$/g, '');
|
|
22
|
+
return slug.length > 0 ? slug : 'project-memory';
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Single implementation of the extract-path block parse. Returns a
|
|
26
|
+
* discriminated result so the caller can say WHY a found block was rejected.
|
|
27
|
+
*
|
|
28
|
+
* The precondition order mirrors the original combined `if` exactly
|
|
29
|
+
* (separator → title → kind present → kind valid → body non-empty), so the
|
|
30
|
+
* accepted set is bit-for-bit what it always was; only the explanation is new.
|
|
31
|
+
*/
|
|
32
|
+
export function parseBlockResult(block, sourceArtifact) {
|
|
33
|
+
const normalizedBlock = block.replace(/\r\n/g, '\n');
|
|
34
|
+
const separatorIndex = normalizedBlock.indexOf('\n---\n');
|
|
35
|
+
if (separatorIndex < 0) {
|
|
36
|
+
return {
|
|
37
|
+
ok: false,
|
|
38
|
+
reason: 'missing-separator',
|
|
39
|
+
detail: "block header is not followed by a '---' separator line"
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
const header = normalizedBlock.slice(0, separatorIndex).trim();
|
|
43
|
+
const body = normalizedBlock.slice(separatorIndex + '\n---\n'.length).trim();
|
|
44
|
+
const fields = new Map();
|
|
45
|
+
for (const line of header.split('\n')) {
|
|
46
|
+
const [key, ...valueParts] = line.split(':');
|
|
47
|
+
const normalizedKey = key?.trim();
|
|
48
|
+
const value = valueParts.join(':').trim();
|
|
49
|
+
if (normalizedKey && value) {
|
|
50
|
+
fields.set(normalizedKey, value);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
const title = fields.get('title')?.trim();
|
|
54
|
+
const kind = fields.get('kind')?.trim();
|
|
55
|
+
if (!title) {
|
|
56
|
+
return {
|
|
57
|
+
ok: false,
|
|
58
|
+
reason: 'missing-title',
|
|
59
|
+
detail: "block header has no non-empty 'title:' field"
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
if (!kind) {
|
|
63
|
+
return {
|
|
64
|
+
ok: false,
|
|
65
|
+
reason: 'missing-kind',
|
|
66
|
+
detail: "block header has no non-empty 'kind:' field"
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
if (!VALID_MEMORY_KINDS.has(kind)) {
|
|
70
|
+
return {
|
|
71
|
+
ok: false,
|
|
72
|
+
reason: 'unknown-kind',
|
|
73
|
+
detail: `block declares kind '${kind}', which is not an accepted memory kind`
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
if (body.length === 0) {
|
|
77
|
+
return { ok: false, reason: 'empty-body', detail: 'block body is empty' };
|
|
78
|
+
}
|
|
79
|
+
return { ok: true, memory: { title, kind, body, sourceArtifact } };
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* `null`-on-failure projection of `parseBlockResult`. Kept because callers
|
|
83
|
+
* (and the parser's own contract) consume a plain nullable value; both views
|
|
84
|
+
* come from the one implementation above, so they cannot diverge.
|
|
85
|
+
*/
|
|
86
|
+
export function parseBlock(block, sourceArtifact) {
|
|
87
|
+
const parsed = parseBlockResult(block, sourceArtifact);
|
|
88
|
+
return parsed.ok ? parsed.memory : null;
|
|
89
|
+
}
|
|
90
|
+
export function renderMemoryFile(memory) {
|
|
91
|
+
const name = slugify(memory.title);
|
|
92
|
+
return [
|
|
93
|
+
'---',
|
|
94
|
+
`name: ${name}`,
|
|
95
|
+
`description: ${memory.title}`,
|
|
96
|
+
'metadata:',
|
|
97
|
+
` type: ${memory.kind}`,
|
|
98
|
+
` sourceArtifact: ${memory.sourceArtifact}`,
|
|
99
|
+
'---',
|
|
100
|
+
'',
|
|
101
|
+
memory.body,
|
|
102
|
+
''
|
|
103
|
+
].join('\n');
|
|
104
|
+
}
|