peaks-loop 4.0.53 → 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 +85 -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 +175 -11
- 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 +81 -22
- 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 +69 -34
- 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 +21 -2
- 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.d.ts +23 -0
- package/dist/cli/commands/sub-agent-shared.js +40 -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 +44 -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/enforcer-liveness.js +1 -1
- 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.d.ts +44 -0
- package/dist/services/codegraph/codegraph-config-repair-writer.js +116 -14
- package/dist/services/codegraph/codegraph-exclude-integrity.js +4 -1
- package/dist/services/codegraph/codegraph-exclude-repair.d.ts +23 -1
- package/dist/services/codegraph/codegraph-exclude-repair.js +7 -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 +16 -189
- 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/index.d.ts +1 -1
- package/dist/services/memory/project-memory-service/index.js +1 -1
- 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.d.ts +59 -0
- package/dist/services/memory/project-memory-service/store/atomic-write.js +189 -17
- 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/gate-evidence-derivation.d.ts +160 -0
- package/dist/services/prd/gate-evidence-derivation.js +270 -0
- package/dist/services/prd/handoff-auto-regen.js +13 -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.d.ts +1 -1
- package/dist/services/prd/handoff-frontmatter.js +63 -1
- package/dist/services/prd/handoff-gate-evidence.d.ts +95 -1
- package/dist/services/prd/handoff-gate-evidence.js +125 -57
- 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 +22 -38
- package/dist/services/prd/handoff-service.js +38 -127
- package/dist/services/prd/handoff-types.d.ts +40 -0
- package/dist/services/prd/handoff-types.js +28 -1
- 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.d.ts +7 -0
- package/dist/services/prd/project-scan-reader.js +8 -5
- 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.d.ts +36 -8
- package/dist/services/rd/reviewer-dispatch-policy.js +40 -15
- 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 +32 -9
- 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/bee/peaks-rd/SKILL.md +1 -1
- package/skills/bee/peaks-rd/references/rd-fanout-contracts.md +26 -10
- package/skills/bee/peaks-rd/references/rd-sub-agent-dispatch.md +1 -1
- package/skills/bee/peaks-rd/references/writing-handoff-frontmatter.md +6 -1
- package/skills/peaks-code/SKILL.md +1 -1
- package/skills/peaks-code/references/periodic-checkpoint.md +7 -5
- package/skills/peaks-code/references/startup-sequence.md +1 -1
- package/skills/peaks-final-review/SKILL.md +1 -1
- /package/{docs → contracts}/test-style-contract.md +0 -0
|
@@ -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
|
+
}
|
|
@@ -1,27 +1,5 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
|
|
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;
|
|
1
|
+
import type { ProjectMemoryKind, StoredProjectMemory } from '../types.js';
|
|
2
|
+
export { parseBlock, parseBlockResult, renderMemoryFile, slugify, VALID_MEMORY_KINDS, VALID_PROJECT_MEMORY_KINDS } from './frontmatter-parse.js';
|
|
25
3
|
/**
|
|
26
4
|
* Where a stored memory file's `kind` came from. `'none'` means the file
|
|
27
5
|
* has no resolvable kind (no `metadata.type`, no `kind:`, no `type:`, or
|
|
@@ -20,82 +20,12 @@
|
|
|
20
20
|
// `slugify` helper used to derive filenames from titles.
|
|
21
21
|
// ---------------------------------------------------------------------------
|
|
22
22
|
import { basename } from 'node:path';
|
|
23
|
-
import {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
export const VALID_PROJECT_MEMORY_KINDS = PROJECT_MEMORY_KINDS;
|
|
30
|
-
export function slugify(title) {
|
|
31
|
-
const slug = title.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-+|-+$/g, '');
|
|
32
|
-
return slug.length > 0 ? slug : 'project-memory';
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Single implementation of the extract-path block parse. Returns a
|
|
36
|
-
* discriminated result so the caller can say WHY a found block was rejected.
|
|
37
|
-
*
|
|
38
|
-
* The precondition order mirrors the original combined `if` exactly
|
|
39
|
-
* (separator → title → kind present → kind valid → body non-empty), so the
|
|
40
|
-
* accepted set is bit-for-bit what it always was; only the explanation is new.
|
|
41
|
-
*/
|
|
42
|
-
export function parseBlockResult(block, sourceArtifact) {
|
|
43
|
-
const normalizedBlock = block.replace(/\r\n/g, '\n');
|
|
44
|
-
const separatorIndex = normalizedBlock.indexOf('\n---\n');
|
|
45
|
-
if (separatorIndex < 0) {
|
|
46
|
-
return { ok: false, reason: 'missing-separator', detail: "block header is not followed by a '---' separator line" };
|
|
47
|
-
}
|
|
48
|
-
const header = normalizedBlock.slice(0, separatorIndex).trim();
|
|
49
|
-
const body = normalizedBlock.slice(separatorIndex + '\n---\n'.length).trim();
|
|
50
|
-
const fields = new Map();
|
|
51
|
-
for (const line of header.split('\n')) {
|
|
52
|
-
const [key, ...valueParts] = line.split(':');
|
|
53
|
-
const normalizedKey = key?.trim();
|
|
54
|
-
const value = valueParts.join(':').trim();
|
|
55
|
-
if (normalizedKey && value) {
|
|
56
|
-
fields.set(normalizedKey, value);
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
const title = fields.get('title')?.trim();
|
|
60
|
-
const kind = fields.get('kind')?.trim();
|
|
61
|
-
if (!title) {
|
|
62
|
-
return { ok: false, reason: 'missing-title', detail: "block header has no non-empty 'title:' field" };
|
|
63
|
-
}
|
|
64
|
-
if (!kind) {
|
|
65
|
-
return { ok: false, reason: 'missing-kind', detail: "block header has no non-empty 'kind:' field" };
|
|
66
|
-
}
|
|
67
|
-
if (!VALID_MEMORY_KINDS.has(kind)) {
|
|
68
|
-
return { ok: false, reason: 'unknown-kind', detail: `block declares kind '${kind}', which is not an accepted memory kind` };
|
|
69
|
-
}
|
|
70
|
-
if (body.length === 0) {
|
|
71
|
-
return { ok: false, reason: 'empty-body', detail: 'block body is empty' };
|
|
72
|
-
}
|
|
73
|
-
return { ok: true, memory: { title, kind, body, sourceArtifact } };
|
|
74
|
-
}
|
|
75
|
-
/**
|
|
76
|
-
* `null`-on-failure projection of `parseBlockResult`. Kept because callers
|
|
77
|
-
* (and the parser's own contract) consume a plain nullable value; both views
|
|
78
|
-
* come from the one implementation above, so they cannot diverge.
|
|
79
|
-
*/
|
|
80
|
-
export function parseBlock(block, sourceArtifact) {
|
|
81
|
-
const parsed = parseBlockResult(block, sourceArtifact);
|
|
82
|
-
return parsed.ok ? parsed.memory : null;
|
|
83
|
-
}
|
|
84
|
-
export function renderMemoryFile(memory) {
|
|
85
|
-
const name = slugify(memory.title);
|
|
86
|
-
return [
|
|
87
|
-
'---',
|
|
88
|
-
`name: ${name}`,
|
|
89
|
-
`description: ${memory.title}`,
|
|
90
|
-
'metadata:',
|
|
91
|
-
` type: ${memory.kind}`,
|
|
92
|
-
` sourceArtifact: ${memory.sourceArtifact}`,
|
|
93
|
-
'---',
|
|
94
|
-
'',
|
|
95
|
-
memory.body,
|
|
96
|
-
''
|
|
97
|
-
].join('\n');
|
|
98
|
-
}
|
|
23
|
+
import { VALID_MEMORY_KINDS } from './frontmatter-parse.js';
|
|
24
|
+
// The kind allow-list, the `slugify` helper, and the extract-path block
|
|
25
|
+
// parser / renderer now live in `./frontmatter-parse.ts`. Re-exported here so
|
|
26
|
+
// the `index.ts` barrel and `markdown-pure.ts` keep resolving them from
|
|
27
|
+
// `./parsers/frontmatter.js` unchanged.
|
|
28
|
+
export { parseBlock, parseBlockResult, renderMemoryFile, slugify, VALID_MEMORY_KINDS, VALID_PROJECT_MEMORY_KINDS } from './frontmatter-parse.js';
|
|
99
29
|
/**
|
|
100
30
|
* Resolve the peaks memory kind from a stored memory file's frontmatter.
|
|
101
31
|
*
|
|
@@ -170,11 +100,21 @@ export function parseMemoryFrontmatter(content) {
|
|
|
170
100
|
const normalized = content.replace(/\r\n/g, '\n');
|
|
171
101
|
const head = normalized.slice(leadingCommentPrefixLength(normalized));
|
|
172
102
|
if (!head.startsWith('---\n')) {
|
|
173
|
-
return {
|
|
103
|
+
return {
|
|
104
|
+
hasFrontmatter: false,
|
|
105
|
+
kind: { kind: null, source: 'none', rawKind: null },
|
|
106
|
+
frontmatter: '',
|
|
107
|
+
body: normalized.trim()
|
|
108
|
+
};
|
|
174
109
|
}
|
|
175
110
|
const endIndex = head.indexOf('\n---\n', 4);
|
|
176
111
|
if (endIndex < 0) {
|
|
177
|
-
return {
|
|
112
|
+
return {
|
|
113
|
+
hasFrontmatter: false,
|
|
114
|
+
kind: { kind: null, source: 'none', rawKind: null },
|
|
115
|
+
frontmatter: '',
|
|
116
|
+
body: normalized.trim()
|
|
117
|
+
};
|
|
178
118
|
}
|
|
179
119
|
const frontmatter = head.slice(4, endIndex);
|
|
180
120
|
const body = head.slice(endIndex + '\n---\n'.length).trim();
|
|
@@ -228,7 +168,16 @@ export function parseMemoryFrontmatter(content) {
|
|
|
228
168
|
break;
|
|
229
169
|
}
|
|
230
170
|
}
|
|
231
|
-
return {
|
|
171
|
+
return {
|
|
172
|
+
hasFrontmatter: true,
|
|
173
|
+
frontmatter,
|
|
174
|
+
...(name !== undefined ? { name } : {}),
|
|
175
|
+
...(titleField !== undefined ? { title: titleField } : {}),
|
|
176
|
+
...(description !== undefined ? { description } : {}),
|
|
177
|
+
...(sourceArtifact !== undefined ? { sourceArtifact } : {}),
|
|
178
|
+
kind,
|
|
179
|
+
body
|
|
180
|
+
};
|
|
232
181
|
}
|
|
233
182
|
/**
|
|
234
183
|
* Deterministic name fallback chain for the read path:
|
|
@@ -60,7 +60,9 @@ export function summarizeMemoryBody(body) {
|
|
|
60
60
|
.replace(/^\s*[-*+]\s+/gm, '')
|
|
61
61
|
.replace(/\n+/g, ' ')
|
|
62
62
|
.trim();
|
|
63
|
-
const sentences = cleaned
|
|
63
|
+
const sentences = cleaned
|
|
64
|
+
.split(/(?<=[.!?])\s+/)
|
|
65
|
+
.filter((s) => s.length > MIN_BODY_SENTENCE_LENGTH && !/^\[.+\]$/.test(s));
|
|
64
66
|
if (sentences.length === 0) {
|
|
65
67
|
return cleaned.slice(0, MAX_DESCRIPTION_LENGTH) || 'Project memory';
|
|
66
68
|
}
|
|
@@ -101,7 +103,10 @@ export function extractStableProjectMemoriesWithDiagnostics(content, sourceArtif
|
|
|
101
103
|
memories.push(parsed.memory);
|
|
102
104
|
}
|
|
103
105
|
else {
|
|
104
|
-
drops.push({
|
|
106
|
+
drops.push({
|
|
107
|
+
index: start,
|
|
108
|
+
drop: { sourceArtifact, reason: parsed.reason, detail: parsed.detail }
|
|
109
|
+
});
|
|
105
110
|
}
|
|
106
111
|
searchStart = end + END_MARKER.length;
|
|
107
112
|
}
|
|
@@ -120,7 +125,14 @@ export function extractStableProjectMemoriesWithDiagnostics(content, sourceArtif
|
|
|
120
125
|
const index = match.index ?? 0;
|
|
121
126
|
if (locatedRanges.some(([from, to]) => index >= from && index < to))
|
|
122
127
|
continue;
|
|
123
|
-
drops.push({
|
|
128
|
+
drops.push({
|
|
129
|
+
index,
|
|
130
|
+
drop: {
|
|
131
|
+
sourceArtifact,
|
|
132
|
+
reason: 'unrecognized-marker',
|
|
133
|
+
detail: describeUnrecognizedMarker(found)
|
|
134
|
+
}
|
|
135
|
+
});
|
|
124
136
|
}
|
|
125
137
|
drops.sort((left, right) => left.index - right.index);
|
|
126
138
|
return {
|
|
@@ -1,5 +1,64 @@
|
|
|
1
1
|
import type { ExtractedProjectMemory } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* The names of the three checks `assertSafeMemory` can fail on, written once.
|
|
4
|
+
*
|
|
5
|
+
* The name of the check that fired rides the refusal message, so the reader is
|
|
6
|
+
* told WHICH rule stopped the write instead of only that something was
|
|
7
|
+
* refused. Callers route their remedy on these same constants (see
|
|
8
|
+
* `memoryExtractNextActions` in `src/cli/commands/core/memory-command.ts`) —
|
|
9
|
+
* two strings kept equal by hand is how a message and its advice drift apart.
|
|
10
|
+
*/
|
|
11
|
+
export declare const SENSITIVE_MEMORY_CHECKS: {
|
|
12
|
+
readonly metadataKey: "metadata key scan";
|
|
13
|
+
readonly content: "content scan";
|
|
14
|
+
readonly title: "title scan";
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* The credential term this title contains (as a run of words), or `null`.
|
|
18
|
+
*
|
|
19
|
+
* Returns the MATCHED TERM rather than a boolean because the refusal message
|
|
20
|
+
* names it: `title scan matched the credential term "apikey"` is actionable,
|
|
21
|
+
* while "Refusing to store sensitive memory content" is what sent slice C0's
|
|
22
|
+
* user looking for a secret that was not there. The returned string is a
|
|
23
|
+
* dictionary word from the list above — never the title's own text, and never
|
|
24
|
+
* a value — so echoing it into the error envelope cannot leak anything.
|
|
25
|
+
*/
|
|
26
|
+
export declare function findSensitiveMemoryTitleTerm(title: string): string | null;
|
|
2
27
|
export declare function hasSensitiveMemoryContent(content: string): boolean;
|
|
28
|
+
/**
|
|
29
|
+
* The refusal `assertSafeMemory` raises: the check that fired and the term it
|
|
30
|
+
* matched travel as DATA, not only as prose.
|
|
31
|
+
*
|
|
32
|
+
* WHY A TYPE RATHER THAN A MESSAGE. The envelope redactor behind every
|
|
33
|
+
* `fail()` (`packages/peaks-loop-shared/src/result.ts`) strips the words
|
|
34
|
+
* secret / token / password / api-key out of every failure MESSAGE — a blanket
|
|
35
|
+
* rule, applied to messages this module does not own. So a message that names
|
|
36
|
+
* the matched term reaches the CLI reading `… the credential term
|
|
37
|
+
* "[redacted]" …`: the term is named, and then removed, on the way out.
|
|
38
|
+
*
|
|
39
|
+
* The term is a word from `SENSITIVE_PROSE_TERMS` — a fixed vocabulary, never a
|
|
40
|
+
* value — so there is nothing about it to redact, and it rides a field
|
|
41
|
+
* instead: `fail()` redacts `message` only. The CLI routes its remedy on
|
|
42
|
+
* `check` for the same reason — a substring test against a message whose words
|
|
43
|
+
* can be rewritten is not a routing rule, it is a guess.
|
|
44
|
+
*
|
|
45
|
+
* NOTHING HERE WEAKENS THE REDACTOR. The content scan never puts its match in
|
|
46
|
+
* this object (see `matchedTerm` below), so no value can reach an envelope
|
|
47
|
+
* through it; the redactor's guarantee is intact and is pinned by the cases in
|
|
48
|
+
* `tests/unit/services/memory/memory-title-sensitive-scan.test.ts`.
|
|
49
|
+
*/
|
|
50
|
+
export declare class UnsafeMemoryError extends Error {
|
|
51
|
+
/** One of `SENSITIVE_MEMORY_CHECKS` — which rule refused the write. */
|
|
52
|
+
readonly check: string;
|
|
53
|
+
/**
|
|
54
|
+
* The credential term the TITLE scan matched, or `null` for the other two
|
|
55
|
+
* checks. `null` is not an omission: their match can BE the credential
|
|
56
|
+
* (`ghp_…`, the PEM header, the JWT), which is why their messages describe
|
|
57
|
+
* the pattern family and never echo the text.
|
|
58
|
+
*/
|
|
59
|
+
readonly matchedTerm: string | null;
|
|
60
|
+
constructor(check: string, detail: string, matchedTerm?: string | null);
|
|
61
|
+
}
|
|
3
62
|
export declare function assertSafeMemory(memory: ExtractedProjectMemory): void;
|
|
4
63
|
export declare function assertSafeMemoryFileContent(content: string): void;
|
|
5
64
|
export declare function writeNewFile(path: string, content: string): void;
|
|
@@ -5,9 +5,13 @@
|
|
|
5
5
|
// PEM private keys, JWTs, GitHub / GitLab tokens, AWS access keys. Used
|
|
6
6
|
// both by the extract path (`assertSafeMemory`) and the backup path
|
|
7
7
|
// (`assertSafeMemoryFileContent`).
|
|
8
|
+
// - `findSensitiveMemoryTitleTerm` — the PROSE predicate for
|
|
9
|
+
// `memory.title`. It is deliberately NOT the config-key predicate: see
|
|
10
|
+
// the block comment above it (slice C0).
|
|
8
11
|
// - `assertSafeMemory` — full safety gate applied during extraction.
|
|
9
|
-
// Combines
|
|
10
|
-
//
|
|
12
|
+
// Combines the metadata key scan + the content pattern scan + the title
|
|
13
|
+
// scan. Each failure names the check that fired, and the title one names
|
|
14
|
+
// the term it matched.
|
|
11
15
|
// - `assertSafeMemoryFileContent` — lighter version for backup: just
|
|
12
16
|
// the content pattern scan, since the file already lives in
|
|
13
17
|
// `.peaks/memory/` and was authored through the normal pipeline.
|
|
@@ -17,27 +21,195 @@
|
|
|
17
21
|
// for index.json regeneration.
|
|
18
22
|
// ---------------------------------------------------------------------------
|
|
19
23
|
import { closeSync, constants, openSync, writeFileSync } from 'node:fs';
|
|
20
|
-
import { containsSensitiveConfigValue
|
|
24
|
+
import { containsSensitiveConfigValue } from '../../../config/config-service.js';
|
|
25
|
+
/**
|
|
26
|
+
* The names of the three checks `assertSafeMemory` can fail on, written once.
|
|
27
|
+
*
|
|
28
|
+
* The name of the check that fired rides the refusal message, so the reader is
|
|
29
|
+
* told WHICH rule stopped the write instead of only that something was
|
|
30
|
+
* refused. Callers route their remedy on these same constants (see
|
|
31
|
+
* `memoryExtractNextActions` in `src/cli/commands/core/memory-command.ts`) —
|
|
32
|
+
* two strings kept equal by hand is how a message and its advice drift apart.
|
|
33
|
+
*/
|
|
34
|
+
export const SENSITIVE_MEMORY_CHECKS = {
|
|
35
|
+
metadataKey: 'metadata key scan',
|
|
36
|
+
content: 'content scan',
|
|
37
|
+
title: 'title scan'
|
|
38
|
+
};
|
|
39
|
+
/** The stable prefix of every refusal this module raises on the extract path. */
|
|
40
|
+
const SENSITIVE_MEMORY_REFUSAL = 'Refusing to store sensitive memory content';
|
|
41
|
+
/**
|
|
42
|
+
* Credential TERMS as they appear in prose — the word-level counterpart of the
|
|
43
|
+
* config-key predicate `config-service.isSensitiveConfigPath`.
|
|
44
|
+
*
|
|
45
|
+
* WHY THE TITLE CHECK EXISTS AT ALL (it is not redundant with the content
|
|
46
|
+
* scanner). `hasSensitiveMemoryContent` looks for a credential *value*: its
|
|
47
|
+
* first pattern needs a `:` or `=`, so a title that is nothing but `apiKey`
|
|
48
|
+
* carries no value and slips past it. The title scan is the only rule that can
|
|
49
|
+
* see "the title IS a credential name" — so this check was kept, and only its
|
|
50
|
+
* predicate was replaced.
|
|
51
|
+
*
|
|
52
|
+
* WHY IT DOES NOT REUSE `isSensitiveConfigPath`. That predicate answers "is
|
|
53
|
+
* this a CONFIG KEY", and it answers by SUBSTRING: `includes('auth')` is true
|
|
54
|
+
* for `authority`, `author`, `unauthorized`. On a config key that breadth is
|
|
55
|
+
* harmless — an auth-bearing key IS a credential key, and the config domain is
|
|
56
|
+
* untouched here. On a prose title it is a false refusal the author cannot see
|
|
57
|
+
* the cause of: slice C0, where `peaks memory extract` refused a memory titled
|
|
58
|
+
* "Derive from the authority, never re-declare it" and told the user to
|
|
59
|
+
* "remove secrets" from a memory that had none.
|
|
60
|
+
*
|
|
61
|
+
* HOW IT MATCHES. The title is cut into alphanumeric segments (camelCase
|
|
62
|
+
* boundaries included) and a match is a CONTIGUOUS RUN of segments whose
|
|
63
|
+
* concatenation is one of the terms below. Runs — not single words — are what
|
|
64
|
+
* keep the credential-name spellings a substring check caught and a naive
|
|
65
|
+
* word-per-word check would lose: `private_key`, `api key`, `myApiKey` and
|
|
66
|
+
* `access token` all still match, while `authority`, `author`, `tokenizer`,
|
|
67
|
+
* `secretary` and `credentialed` do not.
|
|
68
|
+
*
|
|
69
|
+
* The residual narrowing is named rather than hidden: an UNSEPARATED compound
|
|
70
|
+
* with a term buried mid-word (`mysecretstuff`) no longer matches. That is the
|
|
71
|
+
* same class as the false refusals above — a word containing `secret` is not a
|
|
72
|
+
* credential term — and the memory body is scanned for values either way.
|
|
73
|
+
*
|
|
74
|
+
* The plural forms are listed explicitly instead of deriving them by stripping
|
|
75
|
+
* a trailing `s` from each match: that rule would turn `secretaries` into
|
|
76
|
+
* `secretarie` → `secret`, which is precisely the substring confusion this
|
|
77
|
+
* predicate exists to end.
|
|
78
|
+
*/
|
|
79
|
+
const SENSITIVE_PROSE_TERMS = new Set([
|
|
80
|
+
'apikey',
|
|
81
|
+
'apikeys',
|
|
82
|
+
'accesskey',
|
|
83
|
+
'accesskeys',
|
|
84
|
+
'privatekey',
|
|
85
|
+
'privatekeys',
|
|
86
|
+
'secretkey',
|
|
87
|
+
'secretkeys',
|
|
88
|
+
'accesstoken',
|
|
89
|
+
'accesstokens',
|
|
90
|
+
'authtoken',
|
|
91
|
+
'authtokens',
|
|
92
|
+
'authkey',
|
|
93
|
+
'authkeys',
|
|
94
|
+
'refreshtoken',
|
|
95
|
+
'refreshtokens',
|
|
96
|
+
'token',
|
|
97
|
+
'tokens',
|
|
98
|
+
'secret',
|
|
99
|
+
'secrets',
|
|
100
|
+
'password',
|
|
101
|
+
'passwords',
|
|
102
|
+
'passwd',
|
|
103
|
+
'bearer',
|
|
104
|
+
'credential',
|
|
105
|
+
'credentials'
|
|
106
|
+
]);
|
|
107
|
+
/** A lower→upper transition: the boundary between the words of `apiKey`. */
|
|
108
|
+
const CAMEL_CASE_BOUNDARY = /([a-z0-9])([A-Z])/g;
|
|
109
|
+
/** `myApiKey` → `['my', 'api', 'key']`; `private_key` → `['private', 'key']`. */
|
|
110
|
+
function proseSegments(text) {
|
|
111
|
+
return text
|
|
112
|
+
.replace(CAMEL_CASE_BOUNDARY, '$1 $2')
|
|
113
|
+
.toLowerCase()
|
|
114
|
+
.split(/[^a-z0-9]+/)
|
|
115
|
+
.filter((segment) => segment.length > 0);
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* The credential term this title contains (as a run of words), or `null`.
|
|
119
|
+
*
|
|
120
|
+
* Returns the MATCHED TERM rather than a boolean because the refusal message
|
|
121
|
+
* names it: `title scan matched the credential term "apikey"` is actionable,
|
|
122
|
+
* while "Refusing to store sensitive memory content" is what sent slice C0's
|
|
123
|
+
* user looking for a secret that was not there. The returned string is a
|
|
124
|
+
* dictionary word from the list above — never the title's own text, and never
|
|
125
|
+
* a value — so echoing it into the error envelope cannot leak anything.
|
|
126
|
+
*/
|
|
127
|
+
export function findSensitiveMemoryTitleTerm(title) {
|
|
128
|
+
const segments = proseSegments(title);
|
|
129
|
+
for (let start = 0; start < segments.length; start += 1) {
|
|
130
|
+
let run = '';
|
|
131
|
+
for (let end = start; end < segments.length; end += 1) {
|
|
132
|
+
run += segments[end];
|
|
133
|
+
if (SENSITIVE_PROSE_TERMS.has(run))
|
|
134
|
+
return run;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
return null;
|
|
138
|
+
}
|
|
21
139
|
export function hasSensitiveMemoryContent(content) {
|
|
22
|
-
return /(?:api[_-]?key|token|secret|password|credential|bearer)\s*[:=]/i.test(content)
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
140
|
+
return (/(?:api[_-]?key|token|secret|password|credential|bearer)\s*[:=]/i.test(content) ||
|
|
141
|
+
/\bauthorization\s*:\s*bearer\s+\S+/i.test(content) ||
|
|
142
|
+
/\bbearer\s+[A-Za-z0-9._~+/=-]{12,}\b/i.test(content) ||
|
|
143
|
+
/\bsk-[A-Za-z0-9_-]{6,}\b/.test(content) ||
|
|
144
|
+
/\bgh[pousr]_[A-Za-z0-9_]{20,}\b/.test(content) ||
|
|
145
|
+
/\bgithub_pat_[A-Za-z0-9_]{20,}\b/.test(content) ||
|
|
146
|
+
/\bglpat-[A-Za-z0-9_-]{20,}\b/.test(content) ||
|
|
147
|
+
/\bAKIA[0-9A-Z]{16}\b/.test(content) ||
|
|
148
|
+
/-----BEGIN [A-Z ]*PRIVATE KEY-----/.test(content) ||
|
|
149
|
+
/\beyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\b/.test(content));
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* The refusal `assertSafeMemory` raises: the check that fired and the term it
|
|
153
|
+
* matched travel as DATA, not only as prose.
|
|
154
|
+
*
|
|
155
|
+
* WHY A TYPE RATHER THAN A MESSAGE. The envelope redactor behind every
|
|
156
|
+
* `fail()` (`packages/peaks-loop-shared/src/result.ts`) strips the words
|
|
157
|
+
* secret / token / password / api-key out of every failure MESSAGE — a blanket
|
|
158
|
+
* rule, applied to messages this module does not own. So a message that names
|
|
159
|
+
* the matched term reaches the CLI reading `… the credential term
|
|
160
|
+
* "[redacted]" …`: the term is named, and then removed, on the way out.
|
|
161
|
+
*
|
|
162
|
+
* The term is a word from `SENSITIVE_PROSE_TERMS` — a fixed vocabulary, never a
|
|
163
|
+
* value — so there is nothing about it to redact, and it rides a field
|
|
164
|
+
* instead: `fail()` redacts `message` only. The CLI routes its remedy on
|
|
165
|
+
* `check` for the same reason — a substring test against a message whose words
|
|
166
|
+
* can be rewritten is not a routing rule, it is a guess.
|
|
167
|
+
*
|
|
168
|
+
* NOTHING HERE WEAKENS THE REDACTOR. The content scan never puts its match in
|
|
169
|
+
* this object (see `matchedTerm` below), so no value can reach an envelope
|
|
170
|
+
* through it; the redactor's guarantee is intact and is pinned by the cases in
|
|
171
|
+
* `tests/unit/services/memory/memory-title-sensitive-scan.test.ts`.
|
|
172
|
+
*/
|
|
173
|
+
export class UnsafeMemoryError extends Error {
|
|
174
|
+
/** One of `SENSITIVE_MEMORY_CHECKS` — which rule refused the write. */
|
|
175
|
+
check;
|
|
176
|
+
/**
|
|
177
|
+
* The credential term the TITLE scan matched, or `null` for the other two
|
|
178
|
+
* checks. `null` is not an omission: their match can BE the credential
|
|
179
|
+
* (`ghp_…`, the PEM header, the JWT), which is why their messages describe
|
|
180
|
+
* the pattern family and never echo the text.
|
|
181
|
+
*/
|
|
182
|
+
matchedTerm;
|
|
183
|
+
constructor(check, detail, matchedTerm = null) {
|
|
184
|
+
super(`${SENSITIVE_MEMORY_REFUSAL}: ${check} ${detail}.`);
|
|
185
|
+
this.name = 'UnsafeMemoryError';
|
|
186
|
+
this.check = check;
|
|
187
|
+
this.matchedTerm = matchedTerm;
|
|
188
|
+
}
|
|
32
189
|
}
|
|
33
190
|
export function assertSafeMemory(memory) {
|
|
34
191
|
const content = `${memory.title}\n${memory.kind}\n${memory.body}`;
|
|
35
192
|
const metadata = { title: memory.title, kind: memory.kind, body: memory.body };
|
|
36
|
-
if (containsSensitiveConfigValue(metadata)
|
|
37
|
-
throw new
|
|
193
|
+
if (containsSensitiveConfigValue(metadata)) {
|
|
194
|
+
throw new UnsafeMemoryError(SENSITIVE_MEMORY_CHECKS.metadataKey, 'matched a credential key in the memory metadata');
|
|
195
|
+
}
|
|
196
|
+
if (hasSensitiveMemoryContent(content)) {
|
|
197
|
+
// The match is deliberately NOT echoed, in the message or in the error's
|
|
198
|
+
// fields: for most of these patterns the match IS the credential, so
|
|
199
|
+
// copying it would write the value this scan exists to keep out.
|
|
200
|
+
//
|
|
201
|
+
// The DETAIL is worded around the envelope redactor's vocabulary on
|
|
202
|
+
// purpose. Its catch-all (`/(secret|token|password|api[-_ ]?key)/gi`)
|
|
203
|
+
// rewrites those four words wherever they appear in a failure message, so
|
|
204
|
+
// naming the pattern families in their own words arrives on the CLI as
|
|
205
|
+
// "an [redacted] / [redacted] / [redacted] assignment" — a remedy sentence
|
|
206
|
+
// redacted into uselessness by the very policy it agrees with. Measured on
|
|
207
|
+
// the real CLI, both wordings; this one survives intact.
|
|
208
|
+
throw new UnsafeMemoryError(SENSITIVE_MEMORY_CHECKS.content, 'matched a credential value in the memory content (a `key=value` credential assignment, a Bearer header, a PEM private key, a JWT, or a provider credential)');
|
|
38
209
|
}
|
|
39
|
-
|
|
40
|
-
|
|
210
|
+
const titleTerm = findSensitiveMemoryTitleTerm(memory.title);
|
|
211
|
+
if (titleTerm !== null) {
|
|
212
|
+
throw new UnsafeMemoryError(SENSITIVE_MEMORY_CHECKS.title, `matched the credential term "${titleTerm}" in memory.title`, titleTerm);
|
|
41
213
|
}
|
|
42
214
|
}
|
|
43
215
|
export function assertSafeMemoryFileContent(content) {
|
|
@@ -93,7 +93,8 @@ export function safeRealpath(path) {
|
|
|
93
93
|
try {
|
|
94
94
|
return realpathSync(path);
|
|
95
95
|
}
|
|
96
|
-
catch {
|
|
96
|
+
catch {
|
|
97
|
+
// TODO(g2): legacy silent catch — grace: 1 minor release (v2.14.0)
|
|
97
98
|
return null;
|
|
98
99
|
}
|
|
99
100
|
}
|
|
@@ -1,34 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
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[];
|
|
1
|
+
import type { ProjectMemoryKind } from './memory-kinds.js';
|
|
2
|
+
export { HOT_MEMORY_KINDS, MEMORY_KIND_TIER, PROJECT_MEMORY_KINDS, WARM_MEMORY_KINDS } from './memory-kinds.js';
|
|
3
|
+
export type { MemoryKindTier, ProjectMemoryKind } from './memory-kinds.js';
|
|
32
4
|
export type ExtractedProjectMemory = {
|
|
33
5
|
title: string;
|
|
34
6
|
kind: ProjectMemoryKind;
|