peaks-loop 4.0.54 → 4.1.1
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 +61 -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 +86 -39
- package/dist/cli/commands/_super.js +40 -7
- package/dist/cli/commands/adapter-commands-s2a.js +8 -7
- package/dist/cli/commands/adapter-commands.d.ts +2 -2
- package/dist/cli/commands/adapter-commands.js +7 -8
- package/dist/cli/commands/api-diff-commands.js +5 -4
- package/dist/cli/commands/asset-commands.d.ts +2 -2
- package/dist/cli/commands/asset-commands.js +135 -132
- package/dist/cli/commands/audit-commands.d.ts +1 -1
- package/dist/cli/commands/audit-commands.js +75 -32
- package/dist/cli/commands/autonomous-swarm-commands.d.ts +1 -1
- package/dist/cli/commands/autonomous-swarm-commands.js +14 -8
- package/dist/cli/commands/baseline-commands.js +34 -9
- package/dist/cli/commands/bee-commands.d.ts +1 -1
- package/dist/cli/commands/bee-commands.js +18 -21
- package/dist/cli/commands/best-practice-scan-command.js +6 -34
- package/dist/cli/commands/best-practice-scan-helpers.d.ts +12 -0
- package/dist/cli/commands/best-practice-scan-helpers.js +37 -0
- package/dist/cli/commands/capability-commands.d.ts +1 -1
- package/dist/cli/commands/capability-commands.js +14 -4
- package/dist/cli/commands/capability-worker-config-sc-commands.d.ts +1 -1
- package/dist/cli/commands/changeset-commands.js +21 -18
- package/dist/cli/commands/code-gate-command.js +9 -2
- package/dist/cli/commands/code-job-shape-commands-read-job-shape.d.ts +15 -0
- package/dist/cli/commands/code-job-shape-commands-read-job-shape.js +70 -0
- package/dist/cli/commands/code-job-shape-commands.js +21 -45
- package/dist/cli/commands/code-mode-gate-commands.d.ts +15 -1
- package/dist/cli/commands/code-mode-gate-commands.js +19 -199
- package/dist/cli/commands/code-mode-gate-plan-command.d.ts +14 -0
- package/dist/cli/commands/code-mode-gate-plan-command.js +23 -0
- package/dist/cli/commands/code-mode-gate-should-pause-command.d.ts +24 -0
- package/dist/cli/commands/code-mode-gate-should-pause-command.js +137 -0
- package/dist/cli/commands/code-mode-gate-should-pause-envelope.d.ts +59 -0
- package/dist/cli/commands/code-mode-gate-should-pause-envelope.js +144 -0
- package/dist/cli/commands/code-orchestrator-can-do.js +4 -4
- package/dist/cli/commands/code-review-commands.js +18 -3
- package/dist/cli/commands/code-run-command.js +44 -7
- package/dist/cli/commands/code-runtime-commands.d.ts +17 -0
- package/dist/cli/commands/code-runtime-commands.js +105 -73
- package/dist/cli/commands/codegraph-commands.js +11 -6
- package/dist/cli/commands/codegraph-status-command.js +6 -2
- package/dist/cli/commands/comments-commands.d.ts +14 -0
- package/dist/cli/commands/comments-commands.js +96 -0
- 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 +57 -21
- package/dist/cli/commands/core/proxy-command.js +3 -1
- package/dist/cli/commands/core/session-command.js +16 -8
- package/dist/cli/commands/core/skill-command.js +32 -17
- package/dist/cli/commands/core/standards-command.js +56 -14
- package/dist/cli/commands/cron-commands-actions.d.ts +43 -0
- package/dist/cli/commands/cron-commands-actions.js +128 -0
- package/dist/cli/commands/cron-commands-schedule.d.ts +86 -0
- package/dist/cli/commands/cron-commands-schedule.js +151 -0
- package/dist/cli/commands/cron-commands.d.ts +35 -32
- package/dist/cli/commands/cron-commands.js +167 -211
- package/dist/cli/commands/cron-scheduler-commands.js +40 -20
- package/dist/cli/commands/cron-scheduler-persist.d.ts +110 -0
- package/dist/cli/commands/cron-scheduler-persist.js +171 -0
- package/dist/cli/commands/dashboard-long-run.js +45 -14
- package/dist/cli/commands/dashboard-summary.js +15 -5
- package/dist/cli/commands/dispatch-commands.js +65 -32
- package/dist/cli/commands/dispatch-from-dag.js +9 -10
- package/dist/cli/commands/doc-commands.js +8 -9
- package/dist/cli/commands/doctor/invoke-from-code.js +1 -1
- package/dist/cli/commands/e2e-verify-env.d.ts +19 -0
- package/dist/cli/commands/e2e-verify-env.js +19 -0
- package/dist/cli/commands/e2e-verify.d.ts +3 -14
- package/dist/cli/commands/e2e-verify.js +49 -29
- package/dist/cli/commands/ecc-commands.d.ts +18 -23
- package/dist/cli/commands/ecc-commands.js +39 -36
- 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 +16 -6
- package/dist/cli/commands/preferences-commands.js +13 -12
- package/dist/cli/commands/primer-command.js +5 -5
- package/dist/cli/commands/project-commands.d.ts +1 -1
- package/dist/cli/commands/project-commands.js +33 -9
- package/dist/cli/commands/qa-business-review-commands.js +16 -12
- package/dist/cli/commands/qa-commands.d.ts +1 -1
- package/dist/cli/commands/qa-commands.js +3 -5
- package/dist/cli/commands/release-commands.d.ts +3 -1
- package/dist/cli/commands/release-commands.js +33 -22
- package/dist/cli/commands/request-commands.js +47 -30
- package/dist/cli/commands/request-format-helpers.js +1 -1
- package/dist/cli/commands/retrospective-commands.d.ts +18 -11
- package/dist/cli/commands/retrospective-commands.js +24 -173
- package/dist/cli/commands/retrospective-index-command.d.ts +26 -0
- package/dist/cli/commands/retrospective-index-command.js +99 -0
- package/dist/cli/commands/retrospective-project-root.d.ts +9 -0
- package/dist/cli/commands/retrospective-project-root.js +15 -0
- package/dist/cli/commands/retrospective-search-command.d.ts +27 -0
- package/dist/cli/commands/retrospective-search-command.js +97 -0
- package/dist/cli/commands/retrospective-show-command.d.ts +23 -0
- package/dist/cli/commands/retrospective-show-command.js +80 -0
- package/dist/cli/commands/reviewer-commands.d.ts +1 -1
- package/dist/cli/commands/role-commands.js +14 -9
- package/dist/cli/commands/runtime-commands.js +14 -7
- package/dist/cli/commands/sc-commands.d.ts +1 -1
- package/dist/cli/commands/sc-commands.js +39 -6
- package/dist/cli/commands/scan-commands.js +36 -13
- package/dist/cli/commands/security-audit-commands.d.ts +1 -1
- package/dist/cli/commands/security-audit-commands.js +12 -7
- package/dist/cli/commands/sediment-commands.d.ts +2 -2
- package/dist/cli/commands/sediment-commands.js +146 -139
- package/dist/cli/commands/session-24h-mode.js +15 -2
- package/dist/cli/commands/session-checkpoint-command.js +1 -1
- package/dist/cli/commands/session-migrate-skill-name.js +1 -1
- package/dist/cli/commands/shadcn-commands.d.ts +1 -1
- package/dist/cli/commands/shadcn-commands.js +3 -1
- package/dist/cli/commands/share-commands.js +38 -39
- package/dist/cli/commands/skill-conformance-commands.d.ts +1 -1
- package/dist/cli/commands/skill-conformance-commands.js +1 -1
- package/dist/cli/commands/skill-loop-engineering-readiness-commands.js +16 -17
- package/dist/cli/commands/skill-visibility.js +2 -2
- package/dist/cli/commands/slice-commands.d.ts +1 -1
- package/dist/cli/commands/slice-commands.js +36 -12
- package/dist/cli/commands/slice-integrate-commands.js +6 -7
- package/dist/cli/commands/slice-review-commands-helpers.d.ts +26 -0
- package/dist/cli/commands/slice-review-commands-helpers.js +26 -0
- package/dist/cli/commands/slice-review-commands.js +16 -24
- package/dist/cli/commands/smoke-commands-add-path.d.ts +14 -0
- package/dist/cli/commands/smoke-commands-add-path.js +39 -0
- package/dist/cli/commands/smoke-commands-define.d.ts +18 -0
- package/dist/cli/commands/smoke-commands-define.js +97 -0
- package/dist/cli/commands/smoke-commands-run.d.ts +18 -0
- package/dist/cli/commands/smoke-commands-run.js +119 -0
- package/dist/cli/commands/smoke-commands.d.ts +10 -1
- package/dist/cli/commands/smoke-commands.js +17 -179
- package/dist/cli/commands/sop-commands.d.ts +1 -1
- package/dist/cli/commands/sop-commands.js +38 -10
- package/dist/cli/commands/statusline-commands.d.ts +1 -1
- package/dist/cli/commands/statusline-commands.js +21 -10
- package/dist/cli/commands/sub-agent/detached.js +3 -3
- package/dist/cli/commands/sub-agent-dispatch-guard.d.ts +1 -1
- package/dist/cli/commands/sub-agent-shared.js +1 -1
- package/dist/cli/commands/sub-agent-shutdown-commands.js +17 -9
- package/dist/cli/commands/swarm-commands.d.ts +1 -1
- package/dist/cli/commands/swarm-commands.js +13 -6
- package/dist/cli/commands/tech-commands-helpers.d.ts +37 -0
- package/dist/cli/commands/tech-commands-helpers.js +24 -0
- package/dist/cli/commands/tech-commands.d.ts +2 -29
- package/dist/cli/commands/tech-commands.js +15 -28
- package/dist/cli/commands/test-commands.js +27 -7
- package/dist/cli/commands/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 +8 -10
- package/dist/hooks/pre-tool-use-sub-agent.js +1 -6
- package/dist/reporters/bdd-reporter.js +9 -3
- package/dist/services/24h-mode/auto-engage.d.ts +19 -0
- package/dist/services/24h-mode/auto-engage.js +35 -0
- package/dist/services/24h-mode/decider.js +5 -1
- package/dist/services/24h-mode/store.js +4 -2
- package/dist/services/adapter/adapter-registry.js +20 -8
- package/dist/services/adapter/adapter.d.ts +2 -2
- package/dist/services/adapter/auto-adapter.d.ts +2 -2
- package/dist/services/adapter/auto-adapter.js +1 -1
- package/dist/services/adapter/claude-adapter.d.ts +1 -1
- package/dist/services/adapter/claude-adapter.js +8 -8
- package/dist/services/adapter/codex-adapter.d.ts +2 -2
- package/dist/services/adapter/codex-adapter.js +20 -8
- package/dist/services/adapter/copilot-adapter.d.ts +2 -2
- package/dist/services/adapter/copilot-adapter.js +20 -8
- package/dist/services/artifacts/artifact-prerequisites.js +10 -8
- package/dist/services/artifacts/artifact-service.js +3 -1
- package/dist/services/artifacts/artifact-template-bodies.d.ts +12 -0
- package/dist/services/artifacts/artifact-template-bodies.js +165 -0
- package/dist/services/artifacts/artifact-templates.js +26 -168
- package/dist/services/artifacts/request-artifact-service.js +14 -7
- package/dist/services/artifacts/request-artifact-state-helpers.d.ts +3 -2
- package/dist/services/artifacts/request-artifact-state-helpers.js +3 -5
- package/dist/services/artifacts/workspace-artifact-helpers.d.ts +28 -0
- package/dist/services/artifacts/workspace-artifact-helpers.js +54 -0
- package/dist/services/artifacts/workspace-service.d.ts +3 -22
- package/dist/services/artifacts/workspace-service.js +10 -60
- package/dist/services/audit/artifact-writer.js +21 -21
- package/dist/services/audit/audit-goal-service.js +2 -2
- package/dist/services/audit/backing-detector.js +7 -4
- package/dist/services/audit/classifier.js +3 -3
- package/dist/services/audit/decision-writer.js +13 -9
- package/dist/services/audit/enforcers/active-skill-resolver.js +15 -7
- package/dist/services/audit/enforcers/design-draft-confirm.js +4 -4
- package/dist/services/audit/enforcers/lint-audit-regression.js +10 -5
- package/dist/services/audit/enforcers/lint-bee-runtime-contract.js +16 -8
- package/dist/services/audit/enforcers/lint-catalog-governance.js +8 -4
- package/dist/services/audit/enforcers/lint-output-style.js +4 -2
- package/dist/services/audit/enforcers/lint-peaks-code-runtime.js +8 -3
- package/dist/services/audit/enforcers/lint-peaks-skill-runtime.js +8 -3
- package/dist/services/audit/enforcers/lint-peaks-ui-sc-txt-runtime.js +20 -20
- package/dist/services/audit/enforcers/lint-prd-artifact-handoff.js +5 -5
- package/dist/services/audit/enforcers/lint-prd-source-snapshot.d.ts +1 -1
- package/dist/services/audit/enforcers/lint-prd-source-snapshot.js +5 -5
- package/dist/services/audit/enforcers/lint-qa-gateguard-and-runtime.js +10 -10
- package/dist/services/audit/enforcers/lint-rd-handoff-coverage.js +10 -8
- package/dist/services/audit/enforcers/lint-reference-shape.js +50 -18
- package/dist/services/audit/enforcers/lint-skill-presence-mandatory.js +5 -5
- package/dist/services/audit/enforcers/lint-style.js +44 -11
- package/dist/services/audit/enforcers/lint-workflow-shape.js +4 -2
- package/dist/services/audit/enforcers/login-gate.js +2 -6
- package/dist/services/audit/enforcers/mock-placement.js +2 -2
- package/dist/services/audit/enforcers/no-root-pollution.js +38 -9
- package/dist/services/audit/enforcers/pre-rd-scan.js +1 -1
- package/dist/services/audit/enforcers/prototype-fidelity.js +1 -1
- package/dist/services/audit/enforcers/resume-detection.js +5 -4
- package/dist/services/audit/prose-ratio-calculator.js +1 -1
- package/dist/services/audit/red-line-catalog-p2-a-bee-runtime.d.ts +39 -0
- package/dist/services/audit/red-line-catalog-p2-a-bee-runtime.js +205 -0
- package/dist/services/audit/red-line-catalog-p2-a-lint-style.d.ts +52 -0
- package/dist/services/audit/red-line-catalog-p2-a-lint-style.js +205 -0
- package/dist/services/audit/red-line-catalog-p2-a.js +3 -374
- package/dist/services/audit/red-line-catalog-p2-b.js +26 -26
- package/dist/services/audit/red-line-catalog.js +26 -38
- package/dist/services/audit/red-lines-service.js +64 -49
- package/dist/services/audit/scanners/openspec-scanner.js +2 -2
- package/dist/services/audit/scanners/rules-tree-scanner.js +2 -2
- package/dist/services/audit/scanners/skills-tree-scanner.js +2 -2
- package/dist/services/audit/static-service.js +3 -3
- package/dist/services/audit-independent/index.d.ts +2 -2
- package/dist/services/audit-independent/index.js +2 -2
- package/dist/services/audit-independent/perf-audit-service.js +19 -8
- package/dist/services/audit-independent/security-audit-service.js +31 -16
- package/dist/services/autonomous-swarm/autonomous-swarm-service.js +75 -46
- package/dist/services/best-practice/output-formatter.js +7 -1
- package/dist/services/capability-audit-service/cross-check.js +11 -5
- package/dist/services/capability-audit-service/runner.js +15 -7
- package/dist/services/capability-baseline/store.js +16 -4
- package/dist/services/capability-baseline/types.js +15 -3
- package/dist/services/capability-baseline/validator.js +43 -7
- package/dist/services/capability-guard-runner/contracts/J02.js +36 -6
- package/dist/services/capability-guard-runner/contracts/J03.js +20 -11
- package/dist/services/capability-guard-runner/contracts/J04.js +24 -15
- package/dist/services/capability-guard-runner/contracts/J05.js +26 -10
- package/dist/services/capability-guard-runner/contracts/J07.js +8 -2
- package/dist/services/capability-guard-runner/contracts/J08.js +22 -5
- package/dist/services/capability-guard-runner/contracts/J10.js +6 -2
- package/dist/services/capability-guard-runner/contracts/J11.d.ts +5 -0
- package/dist/services/capability-guard-runner/contracts/J11.js +14 -2
- package/dist/services/capability-guard-runner/contracts/J12.js +12 -3
- package/dist/services/capability-guard-runner/diff.js +1 -5
- package/dist/services/changeset/changeset-check-service.js +1 -3
- package/dist/services/classify/classify-service.js +20 -8
- package/dist/services/classify/classify-types.js +22 -9
- package/dist/services/code/auto-compact-lifecycle.js +62 -39
- package/dist/services/code/auto-compact-modes.js +2 -2
- package/dist/services/code/auto-compact-orchestrator.js +14 -9
- package/dist/services/code/batch-heartbeat-poller.d.ts +10 -0
- package/dist/services/code/batch-heartbeat-poller.js +17 -1
- package/dist/services/code/compact-event-settle-types.d.ts +80 -0
- package/dist/services/code/compact-event-settle-types.js +20 -0
- package/dist/services/code/compact-event-settle.d.ts +3 -68
- package/dist/services/code/compact-event-settle.js +14 -10
- package/dist/services/code/dag-orchestrator.js +32 -26
- package/dist/services/code/job-shape-decision.js +3 -1
- package/dist/services/code/mode-gate-types.d.ts +57 -0
- package/dist/services/code/mode-gate-types.js +66 -0
- package/dist/services/code/mode-gate.d.ts +4 -58
- package/dist/services/code/mode-gate.js +25 -69
- 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/user-touchpoint-classifier.js +0 -7
- package/dist/services/code-review/ecc-bridge.d.ts +6 -6
- package/dist/services/code-review/ecc-bridge.js +23 -23
- package/dist/services/codegraph/codegraph-autorefresh.js +56 -39
- package/dist/services/codegraph/codegraph-config-repair-writer.js +4 -1
- package/dist/services/codegraph/codegraph-exclude-integrity.js +4 -1
- package/dist/services/codegraph/codegraph-exclude-repair.js +1 -2
- package/dist/services/codegraph/codegraph-index-integrity.js +1 -1
- package/dist/services/codegraph/codegraph-preflight-service.d.ts +3 -26
- package/dist/services/codegraph/codegraph-preflight-service.js +16 -37
- package/dist/services/codegraph/codegraph-preflight-structure.d.ts +32 -0
- package/dist/services/codegraph/codegraph-preflight-structure.js +33 -0
- package/dist/services/codegraph/codegraph-process-runner.js +12 -1
- package/dist/services/codegraph/codegraph-service.js +9 -1
- package/dist/services/comments/citation-rules.d.ts +154 -0
- package/dist/services/comments/citation-rules.js +241 -0
- package/dist/services/comments/comment-audit.d.ts +57 -0
- package/dist/services/comments/comment-audit.js +100 -0
- package/dist/services/comments/comment-citations.d.ts +60 -0
- package/dist/services/comments/comment-citations.js +186 -0
- package/dist/services/comments/comment-hygiene.d.ts +79 -0
- package/dist/services/comments/comment-hygiene.js +133 -0
- package/dist/services/comments/comment-prune.d.ts +88 -0
- package/dist/services/comments/comment-prune.js +148 -0
- package/dist/services/comments/prune-apply.d.ts +60 -0
- package/dist/services/comments/prune-apply.js +150 -0
- package/dist/services/comments/repo-path-probe.d.ts +43 -0
- package/dist/services/comments/repo-path-probe.js +78 -0
- package/dist/services/compact/request-transition-hook.js +2 -1
- package/dist/services/compact/suggest-service.d.ts +3 -61
- package/dist/services/compact/suggest-service.js +9 -12
- package/dist/services/compact/suggest-types.d.ts +76 -0
- package/dist/services/compact/suggest-types.js +10 -0
- package/dist/services/compact-history/compact-history-service.js +2 -2
- package/dist/services/compact-statusline/compact-lifecycle-store.d.ts +2 -32
- package/dist/services/compact-statusline/compact-lifecycle-store.js +7 -12
- package/dist/services/compact-statusline/compact-lifecycle-types.d.ts +32 -0
- package/dist/services/compact-statusline/compact-lifecycle-types.js +8 -0
- package/dist/services/compact-statusline/compact-statusline-cell-table.d.ts +42 -0
- package/dist/services/compact-statusline/compact-statusline-cell-table.js +63 -0
- package/dist/services/compact-statusline/compact-statusline-service.d.ts +4 -21
- package/dist/services/compact-statusline/compact-statusline-service.js +9 -101
- package/dist/services/compact-statusline/compact-statusline-state.d.ts +4 -0
- package/dist/services/compact-statusline/compact-statusline-state.js +50 -0
- package/dist/services/config/config-migration.js +2 -2
- package/dist/services/config/config-restore.js +1 -1
- package/dist/services/config/config-rollback.js +1 -1
- package/dist/services/config/config-safety.js +28 -10
- package/dist/services/config/config-service.js +114 -31
- package/dist/services/config/model-routing.js +5 -2
- package/dist/services/config/proxy-service.js +6 -1
- package/dist/services/config/workspace-state-service.js +17 -5
- package/dist/services/context/auto-compact-dispatcher-input.d.ts +38 -0
- package/dist/services/context/auto-compact-dispatcher-input.js +9 -0
- package/dist/services/context/auto-compact-dispatcher.d.ts +2 -30
- package/dist/services/context/auto-compact-reader-input.d.ts +30 -0
- package/dist/services/context/auto-compact-reader-input.js +8 -0
- package/dist/services/context/auto-compact-reader.d.ts +2 -24
- package/dist/services/context/auto-compact-reader.js +4 -1
- package/dist/services/context/auto-compact-thresholds.d.ts +54 -0
- package/dist/services/context/auto-compact-thresholds.js +19 -0
- package/dist/services/context/auto-compact-types.d.ts +2 -46
- package/dist/services/context/auto-compact-types.js +1 -11
- package/dist/services/context/build-dispatch-system-prompt.js +2 -2
- package/dist/services/context/collector.js +8 -10
- package/dist/services/context/context-audit-hint.js +7 -5
- package/dist/services/context/context-audit-keys.d.ts +15 -0
- package/dist/services/context/context-audit-keys.js +77 -0
- package/dist/services/context/context-audit-limits.d.ts +20 -0
- package/dist/services/context/context-audit-limits.js +31 -0
- package/dist/services/context/context-audit-scan.d.ts +19 -0
- package/dist/services/context/context-audit-scan.js +246 -0
- package/dist/services/context/context-audit-types.d.ts +65 -0
- package/dist/services/context/context-audit-types.js +10 -0
- package/dist/services/context/context-audit.d.ts +13 -59
- package/dist/services/context/context-audit.js +38 -254
- package/dist/services/context/context-builder.js +4 -4
- package/dist/services/context/context-schema.d.ts +1 -1
- package/dist/services/context/context-schema.js +13 -13
- package/dist/services/context/doc-retriever.js +2 -2
- package/dist/services/context/harness-context-witness.js +43 -24
- package/dist/services/context/harness-window-config.js +27 -7
- package/dist/services/context/ide-detect.js +2 -1
- package/dist/services/context/index.d.ts +1 -1
- package/dist/services/context/memory-index-reader.js +3 -9
- package/dist/services/context/memory-preflight-config.js +3 -5
- package/dist/services/context/memory-preflight-service.d.ts +2 -20
- package/dist/services/context/memory-preflight-service.js +37 -68
- package/dist/services/context/memory-preflight-support.d.ts +48 -0
- package/dist/services/context/memory-preflight-support.js +56 -0
- package/dist/services/context/post-compact-reinjection.js +3 -3
- package/dist/services/context/renderer.js +7 -3
- package/dist/services/context/spillover-store.js +3 -1
- package/dist/services/context/summary-view.js +1 -1
- package/dist/services/context/threshold.js +2 -2
- package/dist/services/context/tokenizer.js +3 -3
- package/dist/services/crystallization/crystallization-brief-schema.d.ts +80 -0
- package/dist/services/crystallization/crystallization-brief-schema.js +159 -0
- package/dist/services/crystallization/crystallization-service.d.ts +7 -7
- package/dist/services/crystallization/crystallization-service.js +56 -55
- package/dist/services/crystallization/crystallization-store.d.ts +2 -2
- package/dist/services/crystallization/crystallization-store.js +37 -20
- package/dist/services/crystallization/crystallization-types.d.ts +4 -56
- package/dist/services/crystallization/crystallization-types.js +31 -184
- package/dist/services/crystallization/evidence-brief-builder.d.ts +3 -3
- package/dist/services/crystallization/evidence-brief-builder.js +32 -38
- package/dist/services/crystallization/index.d.ts +4 -4
- package/dist/services/crystallization/index.js +4 -4
- package/dist/services/dashboard/project-dashboard-service.js +7 -1
- package/dist/services/dispatch/await-batch-helpers.d.ts +55 -0
- package/dist/services/dispatch/await-batch-helpers.js +206 -0
- package/dist/services/dispatch/await-batch.d.ts +50 -7
- package/dist/services/dispatch/await-batch.js +97 -194
- package/dist/services/dispatch/batch-counter.js +2 -1
- package/dist/services/dispatch/conflict-replay.js +2 -2
- package/dist/services/dispatch/contract-store.js +5 -2
- package/dist/services/dispatch/dispatch-record-input-types.d.ts +81 -0
- package/dist/services/dispatch/dispatch-record-input-types.js +1 -0
- package/dist/services/dispatch/dispatch-record-types.d.ts +6 -73
- package/dist/services/dispatch/dispatch-record-upgrade-fields.d.ts +72 -0
- package/dist/services/dispatch/dispatch-record-upgrade-fields.js +242 -0
- package/dist/services/dispatch/dispatch-record-upgrade-guards.d.ts +15 -0
- package/dist/services/dispatch/dispatch-record-upgrade-guards.js +55 -0
- package/dist/services/dispatch/dispatch-record-upgrade.d.ts +2 -4
- package/dist/services/dispatch/dispatch-record-upgrade.js +21 -213
- package/dist/services/dispatch/dispatch-record-writer.js +54 -26
- package/dist/services/dispatch/dispatch-sub-agent.js +7 -2
- package/dist/services/dispatch/e2e-fixtures.js +1 -1
- package/dist/services/dispatch/isolation-lease.js +39 -17
- package/dist/services/dispatch/merge-back-runner.js +51 -11
- package/dist/services/dispatch/service-shutdown.js +4 -1
- package/dist/services/dispatch/slice-dag-types.d.ts +116 -0
- package/dist/services/dispatch/slice-dag-types.js +41 -0
- package/dist/services/dispatch/slice-dag.d.ts +3 -109
- package/dist/services/dispatch/slice-dag.js +13 -36
- package/dist/services/dispatch/sub-agent-batch-await.d.ts +47 -0
- package/dist/services/dispatch/sub-agent-batch-await.js +73 -0
- package/dist/services/dispatch/sub-agent-dispatcher-types.d.ts +122 -0
- package/dist/services/dispatch/sub-agent-dispatcher-types.js +12 -0
- package/dist/services/dispatch/sub-agent-dispatcher.d.ts +3 -145
- package/dist/services/dispatch/sub-agent-dispatcher.js +14 -70
- package/dist/services/dispatch/test-tool-detection.js +12 -1
- package/dist/services/doc/doc-generator.js +19 -4
- package/dist/services/doctor/doctor-service/checks/check-id-schema.js +16 -8
- package/dist/services/doctor/doctor-service/checks/codegraph-capability.d.ts +7 -2
- package/dist/services/doctor/doctor-service/checks/codegraph-capability.js +26 -8
- package/dist/services/doctor/doctor-service/checks/codegraph-exclude-integrity.js +16 -8
- package/dist/services/doctor/doctor-service/checks/codegraph-index-integrity.js +16 -8
- package/dist/services/doctor/doctor-service/checks/dist-source-version.js +18 -9
- package/dist/services/doctor/doctor-service/checks/ecc-hooks-schema-drift.js +20 -10
- package/dist/services/doctor/doctor-service/checks/gateguard-conflict.js +18 -9
- package/dist/services/doctor/doctor-service/checks/l3-memory-health.js +25 -11
- package/dist/services/doctor/doctor-service/checks/l3-orphan-sessions.js +12 -6
- package/dist/services/doctor/doctor-service/checks/multi-binary-drift.d.ts +7 -16
- package/dist/services/doctor/doctor-service/checks/multi-binary-drift.js +50 -70
- package/dist/services/doctor/doctor-service/checks/schema-validity.js +5 -1
- package/dist/services/doctor/doctor-service/checks/skill-presence.js +4 -2
- package/dist/services/doctor/doctor-service/checks/statusline-install.js +8 -4
- package/dist/services/doctor/doctor-service/checks/statusline-runtime.js +8 -4
- package/dist/services/doctor/doctor-service/checks/user-config.js +4 -2
- package/dist/services/doctor/doctor-service/checks/workspace-init.js +8 -4
- package/dist/services/doctor/doctor-service/checks/workspace-layout.js +19 -11
- package/dist/services/doctor/doctor-service/index.js +4 -2
- package/dist/services/doctor/doctor-service/multi-binary-drift-helpers.d.ts +40 -0
- package/dist/services/doctor/doctor-service/multi-binary-drift-helpers.js +49 -0
- package/dist/services/doctor/doctor-service/plugin-registry.js +1 -1
- package/dist/services/doctor/doctor-service/probe-types.d.ts +210 -0
- package/dist/services/doctor/doctor-service/probe-types.js +14 -0
- package/dist/services/doctor/doctor-service/types.d.ts +7 -197
- package/dist/services/doctor/index.d.ts +1 -1
- package/dist/services/doctor/index.js +1 -1
- package/dist/services/env/shell-probe.js +8 -2
- package/dist/services/evidence/evidence-body-builders.d.ts +23 -0
- package/dist/services/evidence/evidence-body-builders.js +197 -0
- package/dist/services/evidence/evidence-generator.js +6 -187
- package/dist/services/evolution/evolution-constraints.d.ts +43 -0
- package/dist/services/evolution/evolution-constraints.js +54 -0
- package/dist/services/evolution/evolution-evaluation-schema.d.ts +43 -0
- package/dist/services/evolution/evolution-evaluation-schema.js +43 -0
- package/dist/services/evolution/evolution-service.d.ts +6 -6
- package/dist/services/evolution/evolution-service.js +58 -58
- package/dist/services/evolution/evolution-store.d.ts +2 -2
- package/dist/services/evolution/evolution-store.js +37 -51
- package/dist/services/evolution/evolution-types.d.ts +2 -22
- package/dist/services/evolution/evolution-types.js +41 -101
- package/dist/services/evolution/independent-evaluator-runner.d.ts +3 -3
- package/dist/services/evolution/independent-evaluator-runner.js +20 -22
- package/dist/services/evolution/regression-skeptic-runner.d.ts +2 -2
- package/dist/services/evolution/regression-skeptic-runner.js +18 -18
- package/dist/services/feedback/feedback-promotion-service.js +48 -12
- package/dist/services/feedback/promotion-artifact-evidence.d.ts +2 -16
- package/dist/services/feedback/promotion-artifact-evidence.js +6 -83
- package/dist/services/feedback/promotion-artifact-json-evidence.d.ts +29 -0
- package/dist/services/feedback/promotion-artifact-json-evidence.js +39 -0
- package/dist/services/feedback/promotion-source-comments.d.ts +47 -0
- package/dist/services/feedback/promotion-source-comments.js +61 -0
- package/dist/services/final-review/final-review-contract.d.ts +26 -0
- package/dist/services/final-review/final-review-contract.js +14 -0
- package/dist/services/final-review/final-review-delivery.d.ts +63 -0
- package/dist/services/final-review/final-review-delivery.js +124 -0
- package/dist/services/final-review/final-review-evidence-budget.d.ts +125 -0
- package/dist/services/final-review/final-review-evidence-budget.js +218 -0
- package/dist/services/final-review/final-review-evidence-collect.d.ts +4 -0
- package/dist/services/final-review/final-review-evidence-collect.js +230 -0
- package/dist/services/final-review/final-review-evidence-sources.d.ts +138 -0
- package/dist/services/final-review/final-review-evidence-sources.js +139 -0
- package/dist/services/final-review/final-review-fifth-dim.d.ts +8 -0
- package/dist/services/final-review/final-review-fifth-dim.js +20 -0
- package/dist/services/final-review/final-review-gates.d.ts +119 -0
- package/dist/services/final-review/final-review-gates.js +214 -0
- package/dist/services/final-review/final-review-output-budget.d.ts +88 -0
- package/dist/services/final-review/final-review-output-budget.js +161 -0
- package/dist/services/final-review/final-review-prompt.d.ts +35 -0
- package/dist/services/final-review/final-review-prompt.js +112 -0
- package/dist/services/final-review/final-review-reviewer.d.ts +57 -0
- package/dist/services/final-review/final-review-reviewer.js +95 -0
- package/dist/services/final-review/final-review-runner.d.ts +3 -0
- package/dist/services/final-review/final-review-runner.js +158 -0
- package/dist/services/final-review/final-review-service.d.ts +119 -373
- package/dist/services/final-review/final-review-service.js +48 -1380
- package/dist/services/final-review/final-review-verdicts.d.ts +60 -0
- package/dist/services/final-review/final-review-verdicts.js +91 -0
- package/dist/services/final-review/index.d.ts +3 -3
- package/dist/services/final-review/index.js +2 -2
- package/dist/services/final-review/pre-post-diff.js +32 -29
- package/dist/services/fixture/fixture-capture-service.js +14 -6
- package/dist/services/fresh-context/trigger-scan.js +13 -2
- package/dist/services/fuzzy-matching/fuzzy-match-service.js +1 -1
- package/dist/services/fuzzy-matching/fzf-pick-service.js +6 -1
- package/dist/services/hooks/pre-tool-code-gate.js +2 -2
- package/dist/services/hooks/presence-marker-detector.js +12 -2
- package/dist/services/hooks/worktree-authorization-gate.js +21 -7
- package/dist/services/ide/adapters/claude-code-adapter.js +30 -17
- package/dist/services/ide/adapters/codex-adapter.js +3 -5
- package/dist/services/ide/adapters/cursor-adapter.js +3 -5
- package/dist/services/ide/adapters/hermes-adapter.js +2 -4
- package/dist/services/ide/adapters/openclaw-adapter.js +2 -4
- package/dist/services/ide/adapters/qoder-adapter.js +2 -4
- package/dist/services/ide/adapters/tongyi-lingma-adapter.js +1 -1
- package/dist/services/ide/adapters/trae-adapter.js +3 -5
- package/dist/services/ide/adapters/zcode-adapter.js +8 -7
- package/dist/services/ide/current-model-detector.js +2 -1
- package/dist/services/ide/ide-compact-types.d.ts +153 -0
- package/dist/services/ide/ide-compact-types.js +1 -0
- package/dist/services/ide/ide-registry.js +1 -1
- package/dist/services/ide/ide-types.d.ts +7 -145
- package/dist/services/ide/resource-profile.js +1 -1
- package/dist/services/ide/shared/atomic-json.js +2 -1
- package/dist/services/impact/impact-scan-service.js +12 -5
- package/dist/services/job/job-commit-verification.d.ts +73 -0
- package/dist/services/job/job-commit-verification.js +72 -0
- package/dist/services/job/job-orchestrator.d.ts +42 -0
- package/dist/services/job/job-orchestrator.js +110 -10
- package/dist/services/job/job-progress-store.d.ts +75 -5
- package/dist/services/job/job-progress-store.js +83 -6
- package/dist/services/job/job-rotation.d.ts +1 -1
- package/dist/services/job/job-rotation.js +5 -1
- package/dist/services/job/job-state-store.js +2 -2
- package/dist/services/job/job-types.js +49 -20
- package/dist/services/job/subagent-job-wrapper.d.ts +1 -1
- package/dist/services/job/subagent-job-wrapper.js +5 -1
- package/dist/services/job-snapshot/snapshot.js +2 -2
- package/dist/services/karpathy-cost/karpathy-cost-check-service.js +23 -13
- package/dist/services/legacy/legacy-detector.js +51 -5
- package/dist/services/lint/detect-eslint.js +10 -4
- package/dist/services/lint/detect-ocr-18.js +11 -3
- package/dist/services/lint/eslint-runner-support.d.ts +22 -0
- package/dist/services/lint/eslint-runner-support.js +185 -0
- package/dist/services/lint/eslint-runner-types.d.ts +69 -0
- package/dist/services/lint/eslint-runner-types.js +11 -0
- package/dist/services/lint/eslint-runner.d.ts +4 -56
- package/dist/services/lint/eslint-runner.js +24 -178
- package/dist/services/lint/npx-resolver.js +1 -3
- package/dist/services/lint/ocr-18-acquire.js +15 -4
- package/dist/services/lint/ocr-multilang-adapter.js +4 -5
- package/dist/services/llm/anthropic-runner.js +4 -1
- package/dist/services/log/log-commands-service.js +2 -6
- package/dist/services/log/logger.js +15 -12
- package/dist/services/log/retention.d.ts +0 -16
- package/dist/services/log/retention.js +2 -18
- 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 +19 -7
- package/dist/services/memory/project-memory-service/store/atomic-write.js +144 -38
- package/dist/services/memory/project-memory-service/store/paths.js +2 -1
- package/dist/services/memory/project-memory-service/types.d.ts +3 -31
- package/dist/services/memory/project-memory-service/types.js +1 -76
- package/dist/services/migrate-skill-name/migrate.js +1 -1
- package/dist/services/migrate-skill-name/schema.js +1 -1
- package/dist/services/mode/mode-enforcement.js +4 -2
- package/dist/services/mode/mode-status-service.d.ts +27 -9
- package/dist/services/mode/mode-status-service.js +64 -12
- package/dist/services/observability/aggregation-helpers.d.ts +22 -0
- package/dist/services/observability/aggregation-helpers.js +65 -0
- package/dist/services/observability/aggregation-types.d.ts +66 -0
- package/dist/services/observability/aggregation-types.js +34 -0
- package/dist/services/observability/aggregation.d.ts +5 -53
- package/dist/services/observability/aggregation.js +17 -80
- package/dist/services/observability/jsonl-store.js +2 -1
- package/dist/services/observability/observability-schema.d.ts +71 -0
- package/dist/services/observability/observability-schema.js +64 -0
- package/dist/services/observability/observability-service.d.ts +3 -56
- package/dist/services/observability/observability-service.js +9 -49
- package/dist/services/openspec/coverage-evidence-reader.js +18 -11
- package/dist/services/openspec/openspec-archive-service.js +31 -24
- package/dist/services/openspec/openspec-init-service.js +8 -2
- package/dist/services/openspec/openspec-propose-from-doctor-service.js +1 -1
- package/dist/services/openspec/openspec-scan-service.js +4 -1
- package/dist/services/openspec/openspec-validate-service.js +26 -5
- package/dist/services/perf/perf-baseline-service.js +2 -6
- package/dist/services/polyrepo/polyrepo-dispatcher.js +2 -1
- package/dist/services/polyrepo/polyrepo-scanner.js +4 -1
- package/dist/services/prd/handoff-frontmatter-shape.d.ts +42 -0
- package/dist/services/prd/handoff-frontmatter-shape.js +67 -0
- package/dist/services/prd/handoff-frontmatter.js +62 -1
- package/dist/services/prd/handoff-gate-evidence.js +14 -10
- 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 +12 -38
- package/dist/services/prd/handoff-service.js +25 -147
- package/dist/services/prd/handoff-types.d.ts +33 -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.js +1 -4
- package/dist/services/prd/project-scan-sediment.js +1 -4
- package/dist/services/preferences/preferences-service.js +6 -8
- package/dist/services/preferences/preferences-types.js +4 -4
- package/dist/services/qa/bdd-test-style-contract.d.ts +41 -0
- package/dist/services/qa/bdd-test-style-contract.js +37 -0
- package/dist/services/qa/bdd-test-style-verifier.d.ts +2 -24
- package/dist/services/qa/bdd-test-style-verifier.js +5 -31
- package/dist/services/qa/browser-event-logger.js +2 -1
- package/dist/services/qa/qa-business-review-state.js +20 -5
- package/dist/services/qa/screenshot-archive-service.js +1 -3
- package/dist/services/rd/ast-gate.js +2 -2
- package/dist/services/rd/impl.js +1 -1
- package/dist/services/rd/rd-service.js +117 -43
- package/dist/services/rd/reviewer-dispatch-policy.js +4 -7
- package/dist/services/rd/standards-diagnostic.js +4 -1
- package/dist/services/rd/strategy.js +10 -3
- package/dist/services/rd/tactical-stage.js +2 -2
- package/dist/services/rd/types.js +9 -7
- package/dist/services/rd-swarm/rd-swarm-service.d.ts +2 -45
- package/dist/services/rd-swarm/rd-swarm-service.js +140 -21
- package/dist/services/rd-swarm/rd-swarm-types.d.ts +54 -0
- package/dist/services/rd-swarm/rd-swarm-types.js +10 -0
- package/dist/services/recommendations/capability-map-service.js +10 -2
- package/dist/services/recommendations/capability-seed-items.js +81 -14
- package/dist/services/recommendations/capability-seed-mappings.js +420 -48
- package/dist/services/recommendations/capability-seed-sources-mcp-server.d.ts +9 -0
- package/dist/services/recommendations/capability-seed-sources-mcp-server.js +233 -0
- package/dist/services/recommendations/capability-seed-sources.js +127 -32
- package/dist/services/recommendations/installed-capability-detector.d.ts +5 -5
- package/dist/services/recommendations/installed-capability-detector.js +11 -10
- 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 +74 -0
- package/dist/services/scan/archetype-detection.js +315 -0
- package/dist/services/scan/archetype-service.js +58 -133
- 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/scan-types.d.ts +9 -0
- 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/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/generated-artifacts-stamp.d.ts +2 -2
- package/dist/services/workspace/generated-artifacts-stamp.js +2 -2
- 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 +12 -4
- package/dist/services/workspace/workspace-state-service.js +1 -1
- package/dist/services/worktree/git-worktree-parser.js +13 -3
- package/dist/services/worktree/host-worktree-reconciler.js +8 -4
- package/dist/services/worktree/long-path-cleanup.js +23 -6
- package/dist/services/worktree/worktree-gc-guard.js +3 -1
- package/dist/services/worktree/worktree-lease-types.d.ts +53 -0
- package/dist/services/worktree/worktree-lease-types.js +10 -0
- package/dist/services/worktree/worktree-lease.d.ts +2 -44
- package/dist/shared/array-guards.d.ts +30 -0
- package/dist/shared/array-guards.js +32 -0
- package/dist/shared/format-md-compact-internals.d.ts +26 -0
- package/dist/shared/format-md-compact-internals.js +125 -0
- package/dist/shared/format-md-compact.js +1 -117
- package/dist/shared/fs-utils.js +2 -1
- package/dist/shared/incrementing-number.js +3 -3
- package/dist/shared/json-parse.d.ts +71 -0
- package/dist/shared/json-parse.js +32 -0
- package/dist/shared/json-schema-mini.js +3 -1
- package/dist/shared/path-safety.js +3 -1
- package/dist/shared/path-utils.d.ts +20 -0
- package/dist/shared/path-utils.js +26 -0
- package/dist/shared/planner-response.js +3 -3
- package/dist/shared/stale-policy.js +1 -3
- package/dist/skills/peaks-maker/index.js +11 -11
- package/package.json +31 -8
- package/scripts/clean-dist.mjs +1 -2
- package/scripts/copy-templates.mjs +2 -4
- package/scripts/install-skills.mjs +286 -283
- package/scripts/sync-version.mjs +25 -8
- package/scripts/watch.mjs +8 -2
- package/skills/bee/peaks-qa/references/reading-handoff-frontmatter.md +3 -1
- package/skills/bee/peaks-rd/references/parallel-review-fanout.md +1 -1
- package/skills/bee/peaks-rd/references/rd-fanout-contracts.md +3 -2
- package/skills/bee/peaks-rd/references/writing-handoff-frontmatter.md +29 -7
- package/skills/peaks-code/SKILL.md +1 -1
- package/skills/peaks-code/references/frontend-only-mode.md +2 -2
- package/skills/peaks-code/references/startup-sequence.md +0 -4
- package/dist/cli/commands/upgrade-commands.d.ts +0 -25
- package/dist/cli/commands/upgrade-commands.js +0 -154
- package/dist/services/upgrade/1x-detector-service.d.ts +0 -7
- package/dist/services/upgrade/1x-detector-service.js +0 -94
- package/dist/services/upgrade/gitignore-migrate-service.d.ts +0 -56
- package/dist/services/upgrade/gitignore-migrate-service.js +0 -170
- package/dist/services/upgrade/upgrade-service.d.ts +0 -81
- package/dist/services/upgrade/upgrade-service.js +0 -405
- package/skills/peaks-code/references/step-0-55-1x-detection.md +0 -83
|
@@ -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 {
|
|
@@ -24,6 +24,12 @@ export declare const SENSITIVE_MEMORY_CHECKS: {
|
|
|
24
24
|
* a value — so echoing it into the error envelope cannot leak anything.
|
|
25
25
|
*/
|
|
26
26
|
export declare function findSensitiveMemoryTitleTerm(title: string): string | null;
|
|
27
|
+
/**
|
|
28
|
+
* Which content rule refused this text — the id, never the match. A rule whose
|
|
29
|
+
* candidate fails `shaped` does not stop the scan: a later rule may still fire,
|
|
30
|
+
* exactly as a later alternative in the old `||` chain would have.
|
|
31
|
+
*/
|
|
32
|
+
export declare function findSensitiveMemoryContentRule(content: string): string | null;
|
|
27
33
|
export declare function hasSensitiveMemoryContent(content: string): boolean;
|
|
28
34
|
/**
|
|
29
35
|
* The refusal `assertSafeMemory` raises: the check that fired and the term it
|
|
@@ -42,19 +48,25 @@ export declare function hasSensitiveMemoryContent(content: string): boolean;
|
|
|
42
48
|
* `check` for the same reason — a substring test against a message whose words
|
|
43
49
|
* can be rewritten is not a routing rule, it is a guess.
|
|
44
50
|
*
|
|
45
|
-
* NOTHING HERE WEAKENS THE REDACTOR.
|
|
46
|
-
*
|
|
47
|
-
*
|
|
51
|
+
* NOTHING HERE WEAKENS THE REDACTOR. Both scans put a NAME in this field, never
|
|
52
|
+
* a match: the title term comes from `SENSITIVE_PROSE_TERMS` and the content
|
|
53
|
+
* value from the closed id list in `SENSITIVE_CONTENT_RULES`, so no credential
|
|
54
|
+
* can reach an envelope through it. The redactor's guarantee over `message` is
|
|
55
|
+
* intact and is pinned by the cases in
|
|
48
56
|
* `tests/unit/services/memory/memory-title-sensitive-scan.test.ts`.
|
|
49
57
|
*/
|
|
50
58
|
export declare class UnsafeMemoryError extends Error {
|
|
51
59
|
/** One of `SENSITIVE_MEMORY_CHECKS` — which rule refused the write. */
|
|
52
60
|
readonly check: string;
|
|
53
61
|
/**
|
|
54
|
-
*
|
|
55
|
-
*
|
|
56
|
-
*
|
|
57
|
-
*
|
|
62
|
+
* WHAT matched, as a name rather than a value: the credential term for the
|
|
63
|
+
* title scan, the rule id for the content scan, `null` only for the metadata
|
|
64
|
+
* key scan (whose predicate answers by a config-key vocabulary the memory
|
|
65
|
+
* metadata never contains — see the note on `assertSafeMemory`).
|
|
66
|
+
*
|
|
67
|
+
* It is never the match itself: for most content patterns the match IS the
|
|
68
|
+
* credential (`ghp_…`, the PEM header, the JWT), which is why their messages
|
|
69
|
+
* describe the pattern family and never echo the text.
|
|
58
70
|
*/
|
|
59
71
|
readonly matchedTerm: string | null;
|
|
60
72
|
constructor(check: string, detail: string, matchedTerm?: string | null);
|
|
@@ -4,7 +4,9 @@
|
|
|
4
4
|
// - `hasSensitiveMemoryContent` — pattern check for api keys, tokens,
|
|
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
|
-
// (`assertSafeMemoryFileContent`).
|
|
7
|
+
// (`assertSafeMemoryFileContent`). It is a wrapper over
|
|
8
|
+
// `findSensitiveMemoryContentRule`, which answers the same question and
|
|
9
|
+
// names the rule that answered it.
|
|
8
10
|
// - `findSensitiveMemoryTitleTerm` — the PROSE predicate for
|
|
9
11
|
// `memory.title`. It is deliberately NOT the config-key predicate: see
|
|
10
12
|
// the block comment above it (slice C0).
|
|
@@ -77,20 +79,32 @@ const SENSITIVE_MEMORY_REFUSAL = 'Refusing to store sensitive memory content';
|
|
|
77
79
|
* predicate exists to end.
|
|
78
80
|
*/
|
|
79
81
|
const SENSITIVE_PROSE_TERMS = new Set([
|
|
80
|
-
'apikey',
|
|
81
|
-
'
|
|
82
|
-
'
|
|
83
|
-
'
|
|
84
|
-
'
|
|
85
|
-
'
|
|
86
|
-
'
|
|
87
|
-
'
|
|
88
|
-
'
|
|
89
|
-
'
|
|
90
|
-
'
|
|
82
|
+
'apikey',
|
|
83
|
+
'apikeys',
|
|
84
|
+
'accesskey',
|
|
85
|
+
'accesskeys',
|
|
86
|
+
'privatekey',
|
|
87
|
+
'privatekeys',
|
|
88
|
+
'secretkey',
|
|
89
|
+
'secretkeys',
|
|
90
|
+
'accesstoken',
|
|
91
|
+
'accesstokens',
|
|
92
|
+
'authtoken',
|
|
93
|
+
'authtokens',
|
|
94
|
+
'authkey',
|
|
95
|
+
'authkeys',
|
|
96
|
+
'refreshtoken',
|
|
97
|
+
'refreshtokens',
|
|
98
|
+
'token',
|
|
99
|
+
'tokens',
|
|
100
|
+
'secret',
|
|
101
|
+
'secrets',
|
|
102
|
+
'password',
|
|
103
|
+
'passwords',
|
|
91
104
|
'passwd',
|
|
92
105
|
'bearer',
|
|
93
|
-
'credential',
|
|
106
|
+
'credential',
|
|
107
|
+
'credentials'
|
|
94
108
|
]);
|
|
95
109
|
/** A lower→upper transition: the boundary between the words of `apiKey`. */
|
|
96
110
|
const CAMEL_CASE_BOUNDARY = /([a-z0-9])([A-Z])/g;
|
|
@@ -124,17 +138,89 @@ export function findSensitiveMemoryTitleTerm(title) {
|
|
|
124
138
|
}
|
|
125
139
|
return null;
|
|
126
140
|
}
|
|
141
|
+
/**
|
|
142
|
+
* Is this string shaped like a credential VALUE rather than like prose?
|
|
143
|
+
*
|
|
144
|
+
* WHY THIS EXISTS. The value-carrying patterns used to fire on the SEPARATOR
|
|
145
|
+
* alone: `password:` was a match whether or not anything followed it, so a
|
|
146
|
+
* memory writing `password: the field label in the form` or `myApiKey: from
|
|
147
|
+
* env` was refused for describing an interface. Two documents were killed that
|
|
148
|
+
* way before anyone could say which of ten rules had fired — and the rules
|
|
149
|
+
* could not be tightened, because nothing in them described the VALUE.
|
|
150
|
+
*
|
|
151
|
+
* THE TEST, AND WHAT IT COSTS. A value is credential-shaped when it is at least
|
|
152
|
+
* 5 characters AND carries a digit or one of `_ + / =`. `hunter2`,
|
|
153
|
+
* `abcdef123456`, `supp3rSecret` and every base64-ish token pass;
|
|
154
|
+
* `Authorization`, `the`, `from`, `abc`, `well-designed` fail. Given up
|
|
155
|
+
* deliberately: an all-letter opaque run (`bearer abcdefghijklmnopq`) is no
|
|
156
|
+
* longer caught, and neither is a 4-character real password. The alternative was
|
|
157
|
+
* a rule that cannot tell an English word from a random string, and the
|
|
158
|
+
* complaint on record is about English words. Digits are the discriminator
|
|
159
|
+
* rather than `-` and `.` because hyphens and full stops belong to ordinary
|
|
160
|
+
* prose; provider tokens in the wild carry digits, and the prefix-shaped
|
|
161
|
+
* patterns (`ghp_`, `AKIA`, the PEM header, the JWT) keep their own length floors
|
|
162
|
+
* and are untouched by this predicate.
|
|
163
|
+
*/
|
|
164
|
+
const MIN_VALUE_CHARS = 5;
|
|
165
|
+
function isCredentialShapedValue(value) {
|
|
166
|
+
return value.length >= MIN_VALUE_CHARS && /[0-9_+/=]/.test(value);
|
|
167
|
+
}
|
|
168
|
+
/** A placeholder names where a value will go; it is not itself a secret. */
|
|
169
|
+
const PLACEHOLDER_VALUE = /^[<[{(]|^(?:your|the|an|some|my|example|placeholder|todo|fake)/i;
|
|
170
|
+
function isPlaceholderValue(value) {
|
|
171
|
+
return (PLACEHOLDER_VALUE.test(value) ||
|
|
172
|
+
/(?:replace|insert|provide|redact|<[a-z_]+>)/i.test(value) ||
|
|
173
|
+
/^[A-Za-z]+(?:_[A-Z*]+)+$/.test(value) // API_KEY_HERE-style constant
|
|
174
|
+
);
|
|
175
|
+
}
|
|
176
|
+
const SENSITIVE_CONTENT_RULES = [
|
|
177
|
+
{
|
|
178
|
+
id: 'credential-assignment',
|
|
179
|
+
pattern: /\b(?:api[_-]?key|access[_-]?token|auth[_-]?token|refresh[_-]?token|secret|password|passwd|credential|token|bearer)\s*[:=]\s*([^\s,;"'`]+)/gi,
|
|
180
|
+
shaped: (value) => isCredentialShapedValue(value) && !isPlaceholderValue(value)
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
id: 'authorization-bearer-header',
|
|
184
|
+
pattern: /\bauthorization\s*:\s*bearer\s+([^\s,;"'`]+)/gi,
|
|
185
|
+
shaped: (value) => isCredentialShapedValue(value) && !isPlaceholderValue(value)
|
|
186
|
+
},
|
|
187
|
+
{
|
|
188
|
+
id: 'bearer-value',
|
|
189
|
+
pattern: /\bbearer\s+([A-Za-z0-9._~+/=-]{8,})/gi,
|
|
190
|
+
shaped: (value) => isCredentialShapedValue(value) && !isPlaceholderValue(value)
|
|
191
|
+
},
|
|
192
|
+
{
|
|
193
|
+
id: 'sk-prefixed-key',
|
|
194
|
+
// The SUFFIX is captured, not the whole `sk-…`: `sk-abcdef is the prefix`
|
|
195
|
+
// is a sentence about the scheme, and the shape test on the suffix is what
|
|
196
|
+
// tells it from `sk-abcdef1234567890`.
|
|
197
|
+
pattern: /\bsk-([A-Za-z0-9_-]{6,})\b/g,
|
|
198
|
+
shaped: (value) => isCredentialShapedValue(value) && !isPlaceholderValue(value)
|
|
199
|
+
},
|
|
200
|
+
{ id: 'gh-prefixed-key', pattern: /\bgh[pousr]_[A-Za-z0-9_]{20,}\b/g },
|
|
201
|
+
{ id: 'github-pat', pattern: /\bgithub_pat_[A-Za-z0-9_]{20,}\b/g },
|
|
202
|
+
{ id: 'glpat-prefixed-key', pattern: /\bglpat-[A-Za-z0-9_-]{20,}\b/g },
|
|
203
|
+
{ id: 'akia-prefixed-key', pattern: /\bAKIA[0-9A-Z]{16}\b/g },
|
|
204
|
+
{ id: 'pem-private-key', pattern: /-----BEGIN [A-Z ]*PRIVATE KEY-----/g },
|
|
205
|
+
{ id: 'jwt-shaped-value', pattern: /\beyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\b/g }
|
|
206
|
+
];
|
|
207
|
+
/**
|
|
208
|
+
* Which content rule refused this text — the id, never the match. A rule whose
|
|
209
|
+
* candidate fails `shaped` does not stop the scan: a later rule may still fire,
|
|
210
|
+
* exactly as a later alternative in the old `||` chain would have.
|
|
211
|
+
*/
|
|
212
|
+
export function findSensitiveMemoryContentRule(content) {
|
|
213
|
+
for (const rule of SENSITIVE_CONTENT_RULES) {
|
|
214
|
+
for (const match of content.matchAll(rule.pattern)) {
|
|
215
|
+
const candidate = match[1] ?? match[0];
|
|
216
|
+
if (rule.shaped === undefined || rule.shaped(candidate))
|
|
217
|
+
return rule.id;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
return null;
|
|
221
|
+
}
|
|
127
222
|
export function hasSensitiveMemoryContent(content) {
|
|
128
|
-
return
|
|
129
|
-
|| /\bauthorization\s*:\s*bearer\s+\S+/i.test(content)
|
|
130
|
-
|| /\bbearer\s+[A-Za-z0-9._~+/=-]{12,}\b/i.test(content)
|
|
131
|
-
|| /\bsk-[A-Za-z0-9_-]{6,}\b/.test(content)
|
|
132
|
-
|| /\bgh[pousr]_[A-Za-z0-9_]{20,}\b/.test(content)
|
|
133
|
-
|| /\bgithub_pat_[A-Za-z0-9_]{20,}\b/.test(content)
|
|
134
|
-
|| /\bglpat-[A-Za-z0-9_-]{20,}\b/.test(content)
|
|
135
|
-
|| /\bAKIA[0-9A-Z]{16}\b/.test(content)
|
|
136
|
-
|| /-----BEGIN [A-Z ]*PRIVATE KEY-----/.test(content)
|
|
137
|
-
|| /\beyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\b/.test(content);
|
|
223
|
+
return findSensitiveMemoryContentRule(content) !== null;
|
|
138
224
|
}
|
|
139
225
|
/**
|
|
140
226
|
* The refusal `assertSafeMemory` raises: the check that fired and the term it
|
|
@@ -153,19 +239,25 @@ export function hasSensitiveMemoryContent(content) {
|
|
|
153
239
|
* `check` for the same reason — a substring test against a message whose words
|
|
154
240
|
* can be rewritten is not a routing rule, it is a guess.
|
|
155
241
|
*
|
|
156
|
-
* NOTHING HERE WEAKENS THE REDACTOR.
|
|
157
|
-
*
|
|
158
|
-
*
|
|
242
|
+
* NOTHING HERE WEAKENS THE REDACTOR. Both scans put a NAME in this field, never
|
|
243
|
+
* a match: the title term comes from `SENSITIVE_PROSE_TERMS` and the content
|
|
244
|
+
* value from the closed id list in `SENSITIVE_CONTENT_RULES`, so no credential
|
|
245
|
+
* can reach an envelope through it. The redactor's guarantee over `message` is
|
|
246
|
+
* intact and is pinned by the cases in
|
|
159
247
|
* `tests/unit/services/memory/memory-title-sensitive-scan.test.ts`.
|
|
160
248
|
*/
|
|
161
249
|
export class UnsafeMemoryError extends Error {
|
|
162
250
|
/** One of `SENSITIVE_MEMORY_CHECKS` — which rule refused the write. */
|
|
163
251
|
check;
|
|
164
252
|
/**
|
|
165
|
-
*
|
|
166
|
-
*
|
|
167
|
-
*
|
|
168
|
-
*
|
|
253
|
+
* WHAT matched, as a name rather than a value: the credential term for the
|
|
254
|
+
* title scan, the rule id for the content scan, `null` only for the metadata
|
|
255
|
+
* key scan (whose predicate answers by a config-key vocabulary the memory
|
|
256
|
+
* metadata never contains — see the note on `assertSafeMemory`).
|
|
257
|
+
*
|
|
258
|
+
* It is never the match itself: for most content patterns the match IS the
|
|
259
|
+
* credential (`ghp_…`, the PEM header, the JWT), which is why their messages
|
|
260
|
+
* describe the pattern family and never echo the text.
|
|
169
261
|
*/
|
|
170
262
|
matchedTerm;
|
|
171
263
|
constructor(check, detail, matchedTerm = null) {
|
|
@@ -181,19 +273,28 @@ export function assertSafeMemory(memory) {
|
|
|
181
273
|
if (containsSensitiveConfigValue(metadata)) {
|
|
182
274
|
throw new UnsafeMemoryError(SENSITIVE_MEMORY_CHECKS.metadataKey, 'matched a credential key in the memory metadata');
|
|
183
275
|
}
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
//
|
|
276
|
+
const contentRule = findSensitiveMemoryContentRule(content);
|
|
277
|
+
if (contentRule !== null) {
|
|
278
|
+
// The matched TEXT is deliberately NOT echoed, in the message or in the
|
|
279
|
+
// error's fields: for most of these patterns the match IS the credential, so
|
|
187
280
|
// copying it would write the value this scan exists to keep out.
|
|
188
281
|
//
|
|
282
|
+
// The RULE ID is echoed, and it is echoed in `matchedTerm` rather than only
|
|
283
|
+
// in prose. This used to be the one refusal that could not say what fired:
|
|
284
|
+
// the predicate returned a boolean, so the caller had no match to report and
|
|
285
|
+
// `matchedTerm` was `null` by construction while the title scan named its
|
|
286
|
+
// term. A reader then had to guess across documents which of ten shapes had
|
|
287
|
+
// refused them. An id from a closed vocabulary leaks nothing and answers the
|
|
288
|
+
// question, so the two paths are diagnosable the same way.
|
|
289
|
+
//
|
|
189
290
|
// The DETAIL is worded around the envelope redactor's vocabulary on
|
|
190
291
|
// purpose. Its catch-all (`/(secret|token|password|api[-_ ]?key)/gi`)
|
|
191
292
|
// rewrites those four words wherever they appear in a failure message, so
|
|
192
293
|
// naming the pattern families in their own words arrives on the CLI as
|
|
193
294
|
// "an [redacted] / [redacted] / [redacted] assignment" — a remedy sentence
|
|
194
|
-
// redacted into uselessness by the very policy it agrees with.
|
|
195
|
-
//
|
|
196
|
-
throw new UnsafeMemoryError(SENSITIVE_MEMORY_CHECKS.content,
|
|
295
|
+
// redacted into uselessness by the very policy it agrees with. The rule ids
|
|
296
|
+
// above are spelled to survive that pass.
|
|
297
|
+
throw new UnsafeMemoryError(SENSITIVE_MEMORY_CHECKS.content, `matched the credential pattern "${contentRule}" in the memory content`, contentRule);
|
|
197
298
|
}
|
|
198
299
|
const titleTerm = findSensitiveMemoryTitleTerm(memory.title);
|
|
199
300
|
if (titleTerm !== null) {
|
|
@@ -201,8 +302,13 @@ export function assertSafeMemory(memory) {
|
|
|
201
302
|
}
|
|
202
303
|
}
|
|
203
304
|
export function assertSafeMemoryFileContent(content) {
|
|
204
|
-
|
|
205
|
-
|
|
305
|
+
const rule = findSensitiveMemoryContentRule(content);
|
|
306
|
+
if (rule !== null) {
|
|
307
|
+
// The id travels here too. This path has no `UnsafeMemoryError` (it is not
|
|
308
|
+
// the extract gate, and its callers do not route on `check`), but a backup
|
|
309
|
+
// refusal that cannot say which shape fired is the same dead end as the one
|
|
310
|
+
// the extract path used to be.
|
|
311
|
+
throw new Error(`Refusing to back up sensitive memory content (rule: ${rule})`);
|
|
206
312
|
}
|
|
207
313
|
}
|
|
208
314
|
export function writeNewFile(path, 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;
|