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
|
@@ -1,55 +1,15 @@
|
|
|
1
1
|
import { readdir, stat } from 'node:fs/promises';
|
|
2
2
|
import { basename, join, relative } from 'node:path';
|
|
3
|
-
import { isDirectory,
|
|
3
|
+
import { isDirectory, readText } from 'peaks-loop-shared/fs';
|
|
4
4
|
import { scanArchetype } from './archetype-service.js';
|
|
5
5
|
import { scanHookConvention } from './hook-convention-service.js';
|
|
6
|
+
import { classifyToken, dedupeTokens, extractTailwindTokens, findInconsistencies, parseCssVars, parseLessOrSassVars } from './existing-system-visual-tokens.js';
|
|
6
7
|
const DEFAULT_MAX_TOKENS = 40;
|
|
7
8
|
const DEFAULT_SAMPLES = 5;
|
|
8
|
-
const COLOR_KEYWORDS = ['color', 'primary', 'success', 'warning', 'error', 'danger', 'info', 'bg', 'background', 'border', 'text'];
|
|
9
|
-
const SPACING_KEYWORDS = ['spacing', 'gap', 'padding', 'margin', 'size'];
|
|
10
|
-
const TYPO_KEYWORDS = ['font', 'text-size', 'line-height', 'letter-spacing', 'heading'];
|
|
11
|
-
const RADIUS_KEYWORDS = ['radius', 'rounded'];
|
|
12
9
|
const STYLE_DIRS = ['src/styles', 'src/style', 'styles', 'src/assets/styles', 'src/theme', 'theme'];
|
|
13
10
|
const COMPONENT_DIRS = ['src/components', 'src/Components', 'components'];
|
|
14
11
|
const SERVICE_DIRS = ['src/services', 'src/service', 'src/api', 'src/apis'];
|
|
15
12
|
const HOOK_DIRS = ['src/hooks', 'src/hook', 'src/composables'];
|
|
16
|
-
function classifyToken(name) {
|
|
17
|
-
const lower = name.toLowerCase();
|
|
18
|
-
if (RADIUS_KEYWORDS.some((kw) => lower.includes(kw)))
|
|
19
|
-
return 'radius';
|
|
20
|
-
if (TYPO_KEYWORDS.some((kw) => lower.includes(kw)))
|
|
21
|
-
return 'typography';
|
|
22
|
-
if (SPACING_KEYWORDS.some((kw) => lower.includes(kw)))
|
|
23
|
-
return 'spacing';
|
|
24
|
-
if (COLOR_KEYWORDS.some((kw) => lower.includes(kw)))
|
|
25
|
-
return 'color';
|
|
26
|
-
return null;
|
|
27
|
-
}
|
|
28
|
-
function parseLessOrSassVars(content, sourceRel) {
|
|
29
|
-
const tokens = [];
|
|
30
|
-
// Match `@var: value;` (Less) or `$var: value;` (Sass)
|
|
31
|
-
const regex = /^\s*[@$]([a-zA-Z][\w-]*)\s*:\s*([^;]+);/gm;
|
|
32
|
-
let match;
|
|
33
|
-
while ((match = regex.exec(content)) !== null) {
|
|
34
|
-
const [, rawName, rawValue] = match;
|
|
35
|
-
if (rawName === undefined || rawValue === undefined)
|
|
36
|
-
continue;
|
|
37
|
-
tokens.push({ name: rawName, value: rawValue.trim(), source: sourceRel });
|
|
38
|
-
}
|
|
39
|
-
return tokens;
|
|
40
|
-
}
|
|
41
|
-
function parseCssVars(content, sourceRel) {
|
|
42
|
-
const tokens = [];
|
|
43
|
-
const regex = /--([a-zA-Z][\w-]*)\s*:\s*([^;]+);/g;
|
|
44
|
-
let match;
|
|
45
|
-
while ((match = regex.exec(content)) !== null) {
|
|
46
|
-
const [, rawName, rawValue] = match;
|
|
47
|
-
if (rawName === undefined || rawValue === undefined)
|
|
48
|
-
continue;
|
|
49
|
-
tokens.push({ name: `--${rawName}`, value: rawValue.trim(), source: sourceRel });
|
|
50
|
-
}
|
|
51
|
-
return tokens;
|
|
52
|
-
}
|
|
53
13
|
async function walkStyleFiles(projectRoot) {
|
|
54
14
|
const found = [];
|
|
55
15
|
for (const candidate of STYLE_DIRS) {
|
|
@@ -83,30 +43,6 @@ async function walkStyleFiles(projectRoot) {
|
|
|
83
43
|
}
|
|
84
44
|
return found;
|
|
85
45
|
}
|
|
86
|
-
async function extractTailwindTokens(projectRoot) {
|
|
87
|
-
const candidates = ['tailwind.config.js', 'tailwind.config.ts', 'tailwind.config.cjs', 'tailwind.config.mjs'];
|
|
88
|
-
for (const candidate of candidates) {
|
|
89
|
-
const full = join(projectRoot, candidate);
|
|
90
|
-
if (await pathExists(full)) {
|
|
91
|
-
const content = await readText(full);
|
|
92
|
-
const tokens = [];
|
|
93
|
-
// Heuristic: extract keys under theme.extend.* via simple regex.
|
|
94
|
-
const colorBlock = /colors\s*:\s*\{([\s\S]*?)\}/.exec(content);
|
|
95
|
-
if (colorBlock?.[1] !== undefined) {
|
|
96
|
-
const colorRegex = /([a-zA-Z_][\w-]*)\s*:\s*['"`]([^'"`]+)['"`]/g;
|
|
97
|
-
let match;
|
|
98
|
-
while ((match = colorRegex.exec(colorBlock[1])) !== null) {
|
|
99
|
-
const [, name, value] = match;
|
|
100
|
-
if (name !== undefined && value !== undefined) {
|
|
101
|
-
tokens.push({ name, value, source: candidate });
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
return { tokens, source: { path: candidate, kind: 'tailwind-config' } };
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
return { tokens: [], source: null };
|
|
109
|
-
}
|
|
110
46
|
async function listFilesByMtime(dir, exts, max) {
|
|
111
47
|
if (!(await isDirectory(dir)))
|
|
112
48
|
return [];
|
|
@@ -135,7 +71,8 @@ async function listFilesByMtime(dir, exts, max) {
|
|
|
135
71
|
const stats = await stat(full);
|
|
136
72
|
collected.push({ path: full, mtimeMs: stats.mtimeMs });
|
|
137
73
|
}
|
|
138
|
-
catch {
|
|
74
|
+
catch {
|
|
75
|
+
// TODO(g2): legacy silent catch — grace: 1 minor release (v2.14.0)
|
|
139
76
|
// skip unreadable
|
|
140
77
|
}
|
|
141
78
|
}
|
|
@@ -172,35 +109,6 @@ async function firstExistingDir(projectRoot, candidates) {
|
|
|
172
109
|
}
|
|
173
110
|
return null;
|
|
174
111
|
}
|
|
175
|
-
function dedupeTokens(tokens, max) {
|
|
176
|
-
const seen = new Set();
|
|
177
|
-
const out = [];
|
|
178
|
-
for (const token of tokens) {
|
|
179
|
-
const key = `${token.name}=${token.value}`;
|
|
180
|
-
if (seen.has(key))
|
|
181
|
-
continue;
|
|
182
|
-
seen.add(key);
|
|
183
|
-
out.push(token);
|
|
184
|
-
if (out.length >= max)
|
|
185
|
-
break;
|
|
186
|
-
}
|
|
187
|
-
return out;
|
|
188
|
-
}
|
|
189
|
-
function findInconsistencies(tokens) {
|
|
190
|
-
const issues = [];
|
|
191
|
-
const byName = new Map();
|
|
192
|
-
for (const token of tokens) {
|
|
193
|
-
const set = byName.get(token.name) ?? new Set();
|
|
194
|
-
set.add(token.value);
|
|
195
|
-
byName.set(token.name, set);
|
|
196
|
-
}
|
|
197
|
-
for (const [name, values] of byName.entries()) {
|
|
198
|
-
if (values.size > 1) {
|
|
199
|
-
issues.push(`token "${name}" has ${values.size} different values across sources: ${[...values].join(' | ')}`);
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
return issues;
|
|
203
|
-
}
|
|
204
112
|
export async function scanExistingSystem(options) {
|
|
205
113
|
const { projectRoot } = options;
|
|
206
114
|
const maxTokens = options.maxTokens ?? DEFAULT_MAX_TOKENS;
|
|
@@ -286,9 +194,18 @@ export async function scanExistingSystem(options) {
|
|
|
286
194
|
? await listFilesByMtime(join(projectRoot, hookDir), /\.(ts|js)$/i, maxSamples)
|
|
287
195
|
: [];
|
|
288
196
|
const samples = [
|
|
289
|
-
...componentSamples.map((sample) => ({
|
|
290
|
-
|
|
291
|
-
|
|
197
|
+
...componentSamples.map((sample) => ({
|
|
198
|
+
path: relative(projectRoot, sample.path).split(/[\\/]/).join('/'),
|
|
199
|
+
kind: 'component'
|
|
200
|
+
})),
|
|
201
|
+
...serviceSamples.map((sample) => ({
|
|
202
|
+
path: relative(projectRoot, sample.path).split(/[\\/]/).join('/'),
|
|
203
|
+
kind: 'service'
|
|
204
|
+
})),
|
|
205
|
+
...hookSamples.map((sample) => ({
|
|
206
|
+
path: relative(projectRoot, sample.path).split(/[\\/]/).join('/'),
|
|
207
|
+
kind: 'hook'
|
|
208
|
+
}))
|
|
292
209
|
];
|
|
293
210
|
return {
|
|
294
211
|
archetype: archetypeReport.archetype,
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Existing-system visual-token extraction (B wave-3 file-size split).
|
|
3
|
+
*
|
|
4
|
+
* Extracted verbatim from `existing-system-service.ts`: the visual
|
|
5
|
+
* token keyword lists, the Less/Sass/CSS/Tailwind parsers, the token
|
|
6
|
+
* classifier, the dedupe cap, and the cross-source inconsistency
|
|
7
|
+
* finder. Function bodies and literals are unchanged (verbatim move);
|
|
8
|
+
* the file walkers and the public `scanExistingSystem` entry stay in
|
|
9
|
+
* the sibling module.
|
|
10
|
+
*/
|
|
11
|
+
import type { VisualToken, VisualTokenSource } from './scan-types.js';
|
|
12
|
+
export declare function classifyToken(name: string): 'color' | 'spacing' | 'typography' | 'radius' | null;
|
|
13
|
+
export declare function parseLessOrSassVars(content: string, sourceRel: string): VisualToken[];
|
|
14
|
+
export declare function parseCssVars(content: string, sourceRel: string): VisualToken[];
|
|
15
|
+
export declare function extractTailwindTokens(projectRoot: string): Promise<{
|
|
16
|
+
tokens: VisualToken[];
|
|
17
|
+
source: VisualTokenSource | null;
|
|
18
|
+
}>;
|
|
19
|
+
export declare function dedupeTokens(tokens: VisualToken[], max: number): VisualToken[];
|
|
20
|
+
export declare function findInconsistencies(tokens: VisualToken[]): string[];
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Existing-system visual-token extraction (B wave-3 file-size split).
|
|
3
|
+
*
|
|
4
|
+
* Extracted verbatim from `existing-system-service.ts`: the visual
|
|
5
|
+
* token keyword lists, the Less/Sass/CSS/Tailwind parsers, the token
|
|
6
|
+
* classifier, the dedupe cap, and the cross-source inconsistency
|
|
7
|
+
* finder. Function bodies and literals are unchanged (verbatim move);
|
|
8
|
+
* the file walkers and the public `scanExistingSystem` entry stay in
|
|
9
|
+
* the sibling module.
|
|
10
|
+
*/
|
|
11
|
+
import { join } from 'node:path';
|
|
12
|
+
import { pathExists, readText } from 'peaks-loop-shared/fs';
|
|
13
|
+
const COLOR_KEYWORDS = [
|
|
14
|
+
'color',
|
|
15
|
+
'primary',
|
|
16
|
+
'success',
|
|
17
|
+
'warning',
|
|
18
|
+
'error',
|
|
19
|
+
'danger',
|
|
20
|
+
'info',
|
|
21
|
+
'bg',
|
|
22
|
+
'background',
|
|
23
|
+
'border',
|
|
24
|
+
'text'
|
|
25
|
+
];
|
|
26
|
+
const SPACING_KEYWORDS = ['spacing', 'gap', 'padding', 'margin', 'size'];
|
|
27
|
+
const TYPO_KEYWORDS = ['font', 'text-size', 'line-height', 'letter-spacing', 'heading'];
|
|
28
|
+
const RADIUS_KEYWORDS = ['radius', 'rounded'];
|
|
29
|
+
export function classifyToken(name) {
|
|
30
|
+
const lower = name.toLowerCase();
|
|
31
|
+
if (RADIUS_KEYWORDS.some((kw) => lower.includes(kw)))
|
|
32
|
+
return 'radius';
|
|
33
|
+
if (TYPO_KEYWORDS.some((kw) => lower.includes(kw)))
|
|
34
|
+
return 'typography';
|
|
35
|
+
if (SPACING_KEYWORDS.some((kw) => lower.includes(kw)))
|
|
36
|
+
return 'spacing';
|
|
37
|
+
if (COLOR_KEYWORDS.some((kw) => lower.includes(kw)))
|
|
38
|
+
return 'color';
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
export function parseLessOrSassVars(content, sourceRel) {
|
|
42
|
+
const tokens = [];
|
|
43
|
+
// Match `@var: value;` (Less) or `$var: value;` (Sass)
|
|
44
|
+
const regex = /^\s*[@$]([a-zA-Z][\w-]*)\s*:\s*([^;]+);/gm;
|
|
45
|
+
let match;
|
|
46
|
+
while ((match = regex.exec(content)) !== null) {
|
|
47
|
+
const [, rawName, rawValue] = match;
|
|
48
|
+
if (rawName === undefined || rawValue === undefined)
|
|
49
|
+
continue;
|
|
50
|
+
tokens.push({ name: rawName, value: rawValue.trim(), source: sourceRel });
|
|
51
|
+
}
|
|
52
|
+
return tokens;
|
|
53
|
+
}
|
|
54
|
+
export function parseCssVars(content, sourceRel) {
|
|
55
|
+
const tokens = [];
|
|
56
|
+
const regex = /--([a-zA-Z][\w-]*)\s*:\s*([^;]+);/g;
|
|
57
|
+
let match;
|
|
58
|
+
while ((match = regex.exec(content)) !== null) {
|
|
59
|
+
const [, rawName, rawValue] = match;
|
|
60
|
+
if (rawName === undefined || rawValue === undefined)
|
|
61
|
+
continue;
|
|
62
|
+
tokens.push({ name: `--${rawName}`, value: rawValue.trim(), source: sourceRel });
|
|
63
|
+
}
|
|
64
|
+
return tokens;
|
|
65
|
+
}
|
|
66
|
+
export async function extractTailwindTokens(projectRoot) {
|
|
67
|
+
const candidates = [
|
|
68
|
+
'tailwind.config.js',
|
|
69
|
+
'tailwind.config.ts',
|
|
70
|
+
'tailwind.config.cjs',
|
|
71
|
+
'tailwind.config.mjs'
|
|
72
|
+
];
|
|
73
|
+
for (const candidate of candidates) {
|
|
74
|
+
const full = join(projectRoot, candidate);
|
|
75
|
+
if (await pathExists(full)) {
|
|
76
|
+
const content = await readText(full);
|
|
77
|
+
const tokens = [];
|
|
78
|
+
// Heuristic: extract keys under theme.extend.* via simple regex.
|
|
79
|
+
const colorBlock = /colors\s*:\s*\{([\s\S]*?)\}/.exec(content);
|
|
80
|
+
if (colorBlock?.[1] !== undefined) {
|
|
81
|
+
const colorRegex = /([a-zA-Z_][\w-]*)\s*:\s*['"`]([^'"`]+)['"`]/g;
|
|
82
|
+
let match;
|
|
83
|
+
while ((match = colorRegex.exec(colorBlock[1])) !== null) {
|
|
84
|
+
const [, name, value] = match;
|
|
85
|
+
if (name !== undefined && value !== undefined) {
|
|
86
|
+
tokens.push({ name, value, source: candidate });
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return { tokens, source: { path: candidate, kind: 'tailwind-config' } };
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return { tokens: [], source: null };
|
|
94
|
+
}
|
|
95
|
+
export function dedupeTokens(tokens, max) {
|
|
96
|
+
const seen = new Set();
|
|
97
|
+
const out = [];
|
|
98
|
+
for (const token of tokens) {
|
|
99
|
+
const key = `${token.name}=${token.value}`;
|
|
100
|
+
if (seen.has(key))
|
|
101
|
+
continue;
|
|
102
|
+
seen.add(key);
|
|
103
|
+
out.push(token);
|
|
104
|
+
if (out.length >= max)
|
|
105
|
+
break;
|
|
106
|
+
}
|
|
107
|
+
return out;
|
|
108
|
+
}
|
|
109
|
+
export function findInconsistencies(tokens) {
|
|
110
|
+
const issues = [];
|
|
111
|
+
const byName = new Map();
|
|
112
|
+
for (const token of tokens) {
|
|
113
|
+
const set = byName.get(token.name) ?? new Set();
|
|
114
|
+
set.add(token.value);
|
|
115
|
+
byName.set(token.name, set);
|
|
116
|
+
}
|
|
117
|
+
for (const [name, values] of byName.entries()) {
|
|
118
|
+
if (values.size > 1) {
|
|
119
|
+
issues.push(`token "${name}" has ${values.size} different values across sources: ${[...values].join(' | ')}`);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
return issues;
|
|
123
|
+
}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/** Raw-line cap for `src/`, `scripts/` and `packages/` — including a `tests` directory inside a package. */
|
|
2
|
+
export declare const FILE_SIZE_CAP_DEFAULT = 300;
|
|
3
|
+
/** Raw-line cap for the root `tests/` tree. A `tests/` dir inside a package keeps the 300 cap. */
|
|
4
|
+
export declare const FILE_SIZE_CAP_TESTS = 500;
|
|
5
|
+
/** Directories the policy measures, relative to the project root. */
|
|
6
|
+
export declare const FILE_SIZE_SCOPE_DIRS: readonly ["src", "tests", "packages", "scripts"];
|
|
7
|
+
/** The extensions it measures. The same seven the lint scope admits. */
|
|
8
|
+
export declare const FILE_SIZE_SCOPE_EXTENSIONS: readonly ["ts", "tsx", "mts", "cts", "mjs", "cjs", "js"];
|
|
9
|
+
/** The unit, stated in the artifact that carries the number rather than in prose. */
|
|
10
|
+
export declare const FILE_SIZE_LINE_CONVENTION = "readFileSync(f,'utf8').split('\\n').length";
|
|
11
|
+
/** The two caps, as the census reports them. */
|
|
12
|
+
export type FileSizeCaps = {
|
|
13
|
+
readonly defaultCap: number;
|
|
14
|
+
readonly testsCap: number;
|
|
15
|
+
};
|
|
16
|
+
/** The caps this policy defines right now. */
|
|
17
|
+
export declare function fileSizeCaps(): FileSizeCaps;
|
|
18
|
+
/** Forward slashes, so a Windows-native path matches the same rule as a POSIX one. */
|
|
19
|
+
export declare function normalizePolicyPath(file: string): string;
|
|
20
|
+
/** True when `file` ends in an extension the policy measures. */
|
|
21
|
+
export declare function hasPolicyExtension(file: string): boolean;
|
|
22
|
+
/** True when `file` sits under one of the directories the policy measures. */
|
|
23
|
+
export declare function inFileSizeScope(file: string): boolean;
|
|
24
|
+
/**
|
|
25
|
+
* THE one definition of "a file the policy measures": under a scope directory AND
|
|
26
|
+
* of a scope extension. Both consumers read this instead of each carrying its own
|
|
27
|
+
* half of the rule.
|
|
28
|
+
*
|
|
29
|
+
* WHY IT MATTERS (F3 of the repair cycle, rid `2026-09-30-cap-unify-01`). The
|
|
30
|
+
* census enumerated its scope with `git ls-files <dirs>` plus the extension test,
|
|
31
|
+
* while the scan measured EVERY changed non-exempt file at `fileSizeCapFor`'s
|
|
32
|
+
* else-branch 300 — including paths in neither list. The two disagreed about the
|
|
33
|
+
* same policy, and the disagreement was not harmless: an out-of-scope file (e.g.
|
|
34
|
+
* under `.husky/`, or a `.json`) could redden a `request transition` at 300 lines
|
|
35
|
+
* while contributing nothing to `fileSizeOverCap`, so there was no ratchet row to
|
|
36
|
+
* descend and no split campaign that would ever clear it. Enforcement wider than
|
|
37
|
+
* the declared scope is enforcement nobody can satisfy.
|
|
38
|
+
*/
|
|
39
|
+
export declare function isPolicyMeasuredFile(file: string): boolean;
|
|
40
|
+
/**
|
|
41
|
+
* The cap a path is measured against: 500 for the root `tests/` tree, 300 for
|
|
42
|
+
* everything else in scope — including a `tests` directory inside a package,
|
|
43
|
+
* which keeps its parent scope's cap by the reading decided 2026-09-30.
|
|
44
|
+
*
|
|
45
|
+
* PRECONDITION: `isPolicyMeasuredFile(file)`. The else-branch is `src`,
|
|
46
|
+
* `packages` and `scripts` ONLY because that is what the policy decided; handed a
|
|
47
|
+
* path outside the scope it would invent a cap for a file the row cannot see, so
|
|
48
|
+
* callers must gate on the predicate above first (`file-size-scan.ts` does).
|
|
49
|
+
*/
|
|
50
|
+
export declare function fileSizeCapFor(file: string): number;
|
|
51
|
+
/**
|
|
52
|
+
* The policy's unit: raw lines counted by splitting on newlines. NOT `wc -l` —
|
|
53
|
+
* see the header. A file with no trailing newline still counts its last line;
|
|
54
|
+
* an empty file counts as one.
|
|
55
|
+
*/
|
|
56
|
+
export declare function countRawLines(content: string): number;
|
|
57
|
+
/** The top-level directory a scoped path belongs to, as the census buckets it. */
|
|
58
|
+
export declare function fileSizeScopeBucket(file: string): string;
|
|
59
|
+
/** The second scope's directories, relative to the project root. */
|
|
60
|
+
export declare const HOOKS_FILE_SIZE_SCOPE_DIRS: readonly [".husky"];
|
|
61
|
+
/**
|
|
62
|
+
* The cap the hooks scope is measured against. It ALIASES `FILE_SIZE_CAP_DEFAULT`
|
|
63
|
+
* rather than restating 300: the 300 is one decision ("may this file be committed
|
|
64
|
+
* at this size?"), and a second literal here would be the second copy
|
|
65
|
+
* `tests/unit/standards/file-size-cap.test.ts` exists to report. Aliasing does NOT
|
|
66
|
+
* mean the hooks ceiling is unbound — the artifact records `hooksCap` as its own
|
|
67
|
+
* input and `.husky/peaks-gate-file-size.mjs` re-derives it from a live census, so
|
|
68
|
+
* re-deciding the default cap trips the hooks row's binding too, as a refusal
|
|
69
|
+
* rather than as a silent re-baseline.
|
|
70
|
+
*/
|
|
71
|
+
export declare const FILE_SIZE_CAP_HOOKS = 300;
|
|
72
|
+
/** The hooks scope's cap, in the shape the census reports it. */
|
|
73
|
+
export type HooksFileSizeCaps = {
|
|
74
|
+
readonly hooksCap: number;
|
|
75
|
+
};
|
|
76
|
+
/** The cap the hooks scope is measured against right now. */
|
|
77
|
+
export declare function hooksFileSizeCaps(): HooksFileSizeCaps;
|
|
78
|
+
/** True when `file` sits under one of the hooks scope's directories. */
|
|
79
|
+
export declare function inHooksFileSizeScope(file: string): boolean;
|
|
80
|
+
/**
|
|
81
|
+
* A file the hooks rows measure: under a hooks directory AND of a scope extension.
|
|
82
|
+
* The extension universe is the SAME seven as the main scope — it is one decision
|
|
83
|
+
* about what counts as code, and the hooks binding reports it as its own field so a
|
|
84
|
+
* change to it is named against both scopes.
|
|
85
|
+
*/
|
|
86
|
+
export declare function isHooksMeasuredFile(file: string): boolean;
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
// src/services/scan/file-size-policy.ts
|
|
2
|
+
//
|
|
3
|
+
// THE ONE SOURCE OF TRUTH for the repo's file-size cap policy: the two caps,
|
|
4
|
+
// the directories they cover, the extensions in scope, and the unit a "line" is
|
|
5
|
+
// measured in. Everything that enforces the cap reads it from here —
|
|
6
|
+
// `src/services/scan/file-size-scan.ts` (the diff-scoped CLI scan) and
|
|
7
|
+
// `scripts/lint/file-size-census.ts` (the whole-tree count the husky gate
|
|
8
|
+
// ratchets). Neither may restate a number.
|
|
9
|
+
//
|
|
10
|
+
// WHY ONE MODULE (rid 2026-09-30-cap-unify-01). The policy was written twice,
|
|
11
|
+
// in two units: `max-lines: [error, {max: 400, skipBlankLines, skipComments}]`
|
|
12
|
+
// in `config/eslint/.peaks-rules.cjs` and a raw `DEFAULT_FILE_SIZE_THRESHOLD`
|
|
13
|
+
// of 800 here. Two spellings of one decision drift by construction, and the only
|
|
14
|
+
// number anyone ratcheted was the eslint finding count — which measures a
|
|
15
|
+
// DIFFERENT population (98 `max-lines` findings under 400-effective vs 174 files
|
|
16
|
+
// over the decided 300/500 raw cap). The eslint rule value is deliberately
|
|
17
|
+
// unchanged until the splits land; see `.peaks/docs/lint-gate.md` §4 slice 5.
|
|
18
|
+
//
|
|
19
|
+
// THE UNIT IS PART OF THE POLICY. A line is
|
|
20
|
+
// `readFileSync(f, 'utf8').split('\n').length` — a split-newline count, which is
|
|
21
|
+
// `wc -l` plus one per file. That is not a detail: on the same 174 files the
|
|
22
|
+
// campaign recorded 60,982 excess lines with this convention and 60,808 with
|
|
23
|
+
// `wc -l`, and a ratchet seeded from the other convention is off by exactly the
|
|
24
|
+
// file count. `countRawLines` below is the only implementation of the word
|
|
25
|
+
// "line" in this policy, and the census reports it in its envelope so a reader
|
|
26
|
+
// of the number can see which unit produced it.
|
|
27
|
+
//
|
|
28
|
+
// `scripts/` IS IN SCOPE. The decided cap text named only `src`, `packages` and
|
|
29
|
+
// `tests`, but the 174 the ceiling was seeded from counts 5 `scripts/` files.
|
|
30
|
+
// A row that silently excluded them would not equal its own measurement — the
|
|
31
|
+
// same class of hole as lint-gate §4b (a surface asserted but never counted).
|
|
32
|
+
//
|
|
33
|
+
// NUMBERS THIS MODULE DOES NOT OWN, DECIDED 2026-09-30 (F6 of the repair cycle).
|
|
34
|
+
// A line-count constant elsewhere in the repo is a second copy of THIS policy only
|
|
35
|
+
// if it decides the same question — "may this file be committed at this size?".
|
|
36
|
+
// Three that do not, recorded here so the next reader does not re-litigate them:
|
|
37
|
+
// - `config/eslint/.peaks-rules.cjs` `max-lines: 400` EFFECTIVE lines: the same
|
|
38
|
+
// question in a different unit, deliberately left at 400 until the splits land
|
|
39
|
+
// (lint-gate §4 slice 5; 98 findings ≠ 174 files).
|
|
40
|
+
// - `src/services/legacy/legacy-detector.ts` `LARGE_FILE_LINES = 500`: a smell
|
|
41
|
+
// DETECTOR's "is this file big enough to look legacy?" threshold. It reports a
|
|
42
|
+
// suspicion, blocks nothing, and descends no ceiling, so it is NOT a copy of
|
|
43
|
+
// this cap and is NOT folded into it — folding it in would silently change what
|
|
44
|
+
// the legacy report says. Its name does not match the census's `CAP_NAME`
|
|
45
|
+
// second-copy rule on purpose; see lint-gate §4b row 7.
|
|
46
|
+
// - `src/services/skills/lint-reference-shape.ts` 800: the shape of an
|
|
47
|
+
// example lint report, not a cap.
|
|
48
|
+
/** Raw-line cap for `src/`, `scripts/` and `packages/` — including a `tests` directory inside a package. */
|
|
49
|
+
export const FILE_SIZE_CAP_DEFAULT = 300;
|
|
50
|
+
/** Raw-line cap for the root `tests/` tree. A `tests/` dir inside a package keeps the 300 cap. */
|
|
51
|
+
export const FILE_SIZE_CAP_TESTS = 500;
|
|
52
|
+
/** Directories the policy measures, relative to the project root. */
|
|
53
|
+
export const FILE_SIZE_SCOPE_DIRS = ['src', 'tests', 'packages', 'scripts'];
|
|
54
|
+
/** The extensions it measures. The same seven the lint scope admits. */
|
|
55
|
+
export const FILE_SIZE_SCOPE_EXTENSIONS = ['ts', 'tsx', 'mts', 'cts', 'mjs', 'cjs', 'js'];
|
|
56
|
+
/** The unit, stated in the artifact that carries the number rather than in prose. */
|
|
57
|
+
export const FILE_SIZE_LINE_CONVENTION = "readFileSync(f,'utf8').split('\\n').length";
|
|
58
|
+
/** The caps this policy defines right now. */
|
|
59
|
+
export function fileSizeCaps() {
|
|
60
|
+
return {
|
|
61
|
+
defaultCap: FILE_SIZE_CAP_DEFAULT,
|
|
62
|
+
testsCap: FILE_SIZE_CAP_TESTS
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
/** Forward slashes, so a Windows-native path matches the same rule as a POSIX one. */
|
|
66
|
+
export function normalizePolicyPath(file) {
|
|
67
|
+
return file.split('\\').join('/');
|
|
68
|
+
}
|
|
69
|
+
/** True when `file` ends in an extension the policy measures. */
|
|
70
|
+
export function hasPolicyExtension(file) {
|
|
71
|
+
const path = normalizePolicyPath(file);
|
|
72
|
+
const dot = path.lastIndexOf('.');
|
|
73
|
+
if (dot < 0)
|
|
74
|
+
return false;
|
|
75
|
+
return FILE_SIZE_SCOPE_EXTENSIONS.includes(path.slice(dot + 1));
|
|
76
|
+
}
|
|
77
|
+
/** True when `file` sits under one of the directories the policy measures. */
|
|
78
|
+
export function inFileSizeScope(file) {
|
|
79
|
+
const path = normalizePolicyPath(file);
|
|
80
|
+
return FILE_SIZE_SCOPE_DIRS.some((dir) => path.startsWith(`${dir}/`));
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* THE one definition of "a file the policy measures": under a scope directory AND
|
|
84
|
+
* of a scope extension. Both consumers read this instead of each carrying its own
|
|
85
|
+
* half of the rule.
|
|
86
|
+
*
|
|
87
|
+
* WHY IT MATTERS (F3 of the repair cycle, rid `2026-09-30-cap-unify-01`). The
|
|
88
|
+
* census enumerated its scope with `git ls-files <dirs>` plus the extension test,
|
|
89
|
+
* while the scan measured EVERY changed non-exempt file at `fileSizeCapFor`'s
|
|
90
|
+
* else-branch 300 — including paths in neither list. The two disagreed about the
|
|
91
|
+
* same policy, and the disagreement was not harmless: an out-of-scope file (e.g.
|
|
92
|
+
* under `.husky/`, or a `.json`) could redden a `request transition` at 300 lines
|
|
93
|
+
* while contributing nothing to `fileSizeOverCap`, so there was no ratchet row to
|
|
94
|
+
* descend and no split campaign that would ever clear it. Enforcement wider than
|
|
95
|
+
* the declared scope is enforcement nobody can satisfy.
|
|
96
|
+
*/
|
|
97
|
+
export function isPolicyMeasuredFile(file) {
|
|
98
|
+
return inFileSizeScope(file) && hasPolicyExtension(file);
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* The cap a path is measured against: 500 for the root `tests/` tree, 300 for
|
|
102
|
+
* everything else in scope — including a `tests` directory inside a package,
|
|
103
|
+
* which keeps its parent scope's cap by the reading decided 2026-09-30.
|
|
104
|
+
*
|
|
105
|
+
* PRECONDITION: `isPolicyMeasuredFile(file)`. The else-branch is `src`,
|
|
106
|
+
* `packages` and `scripts` ONLY because that is what the policy decided; handed a
|
|
107
|
+
* path outside the scope it would invent a cap for a file the row cannot see, so
|
|
108
|
+
* callers must gate on the predicate above first (`file-size-scan.ts` does).
|
|
109
|
+
*/
|
|
110
|
+
export function fileSizeCapFor(file) {
|
|
111
|
+
return normalizePolicyPath(file).startsWith('tests/')
|
|
112
|
+
? FILE_SIZE_CAP_TESTS
|
|
113
|
+
: FILE_SIZE_CAP_DEFAULT;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* The policy's unit: raw lines counted by splitting on newlines. NOT `wc -l` —
|
|
117
|
+
* see the header. A file with no trailing newline still counts its last line;
|
|
118
|
+
* an empty file counts as one.
|
|
119
|
+
*/
|
|
120
|
+
export function countRawLines(content) {
|
|
121
|
+
return content.split('\n').length;
|
|
122
|
+
}
|
|
123
|
+
/** The top-level directory a scoped path belongs to, as the census buckets it. */
|
|
124
|
+
export function fileSizeScopeBucket(file) {
|
|
125
|
+
const path = normalizePolicyPath(file);
|
|
126
|
+
const slash = path.indexOf('/');
|
|
127
|
+
return slash < 0 ? path : path.slice(0, slash);
|
|
128
|
+
}
|
|
129
|
+
// ---------------------------------------------------------------------------
|
|
130
|
+
// THE SECOND SCOPE — `.husky/`, the directory the ratchet itself lives in
|
|
131
|
+
// (backlog §2.32, rid 2026-10-02-hooks-size-rows)
|
|
132
|
+
// ---------------------------------------------------------------------------
|
|
133
|
+
//
|
|
134
|
+
// WHAT WAS INVISIBLE. `FILE_SIZE_SCOPE_DIRS` names four directories, and `.husky`
|
|
135
|
+
// is not one of them, so the files that IMPLEMENT this policy were measured by
|
|
136
|
+
// nothing: `scanFileSize()` put them in `outOfScopeFiles`, the artifact's `files`
|
|
137
|
+
// table has no entry for them, and the prettier leg never receives them. The guard
|
|
138
|
+
// grew 456 → 750 and 265 → 662 raw lines in a single day with no ceiling watching
|
|
139
|
+
// it — the exact shape of the hole this repo keeps closing (a surface asserted but
|
|
140
|
+
// never counted).
|
|
141
|
+
//
|
|
142
|
+
// WHY A SECOND SCOPE AND NOT A FIFTH DIRECTORY IN THE FIRST ONE. Joining `.husky`
|
|
143
|
+
// to `FILE_SIZE_SCOPE_DIRS` at the decided cap of 300 raises `fileSizeOverCap`
|
|
144
|
+
// 162 → 165 and `fileSizeExcessLines` 54,318 → 55,834 (+1,516), and the monotonicity
|
|
145
|
+
// guard refuses a raised ceiling by design — correctly, because that is a policy
|
|
146
|
+
// re-decision wearing the clothes of a measurement. So the invisible set gets its
|
|
147
|
+
// OWN two rows (`fileSizeHooksOverCap`, `fileSizeHooksExcessLines`), seeded from its
|
|
148
|
+
// own measurement, ratcheted by the same leg off the same census run.
|
|
149
|
+
//
|
|
150
|
+
// DISJOINT BY CONSTRUCTION, and that is the property the disjointness arms test: no
|
|
151
|
+
// directory is in both lists, so `isPolicyMeasuredFile` and `isHooksMeasuredFile`
|
|
152
|
+
// cannot both answer true for one path, and growth under `.husky/` moves the hooks
|
|
153
|
+
// rows and leaves the two main rows at their own numbers.
|
|
154
|
+
/** The second scope's directories, relative to the project root. */
|
|
155
|
+
export const HOOKS_FILE_SIZE_SCOPE_DIRS = ['.husky'];
|
|
156
|
+
/**
|
|
157
|
+
* The cap the hooks scope is measured against. It ALIASES `FILE_SIZE_CAP_DEFAULT`
|
|
158
|
+
* rather than restating 300: the 300 is one decision ("may this file be committed
|
|
159
|
+
* at this size?"), and a second literal here would be the second copy
|
|
160
|
+
* `tests/unit/standards/file-size-cap.test.ts` exists to report. Aliasing does NOT
|
|
161
|
+
* mean the hooks ceiling is unbound — the artifact records `hooksCap` as its own
|
|
162
|
+
* input and `.husky/peaks-gate-file-size.mjs` re-derives it from a live census, so
|
|
163
|
+
* re-deciding the default cap trips the hooks row's binding too, as a refusal
|
|
164
|
+
* rather than as a silent re-baseline.
|
|
165
|
+
*/
|
|
166
|
+
export const FILE_SIZE_CAP_HOOKS = FILE_SIZE_CAP_DEFAULT;
|
|
167
|
+
/** The cap the hooks scope is measured against right now. */
|
|
168
|
+
export function hooksFileSizeCaps() {
|
|
169
|
+
return { hooksCap: FILE_SIZE_CAP_HOOKS };
|
|
170
|
+
}
|
|
171
|
+
/** True when `file` sits under one of the hooks scope's directories. */
|
|
172
|
+
export function inHooksFileSizeScope(file) {
|
|
173
|
+
const path = normalizePolicyPath(file);
|
|
174
|
+
return HOOKS_FILE_SIZE_SCOPE_DIRS.some((dir) => path.startsWith(`${dir}/`));
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* A file the hooks rows measure: under a hooks directory AND of a scope extension.
|
|
178
|
+
* The extension universe is the SAME seven as the main scope — it is one decision
|
|
179
|
+
* about what counts as code, and the hooks binding reports it as its own field so a
|
|
180
|
+
* change to it is named against both scopes.
|
|
181
|
+
*/
|
|
182
|
+
export function isHooksMeasuredFile(file) {
|
|
183
|
+
return inHooksFileSizeScope(file) && hasPolicyExtension(file);
|
|
184
|
+
}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
export declare const DEFAULT_FILE_SIZE_THRESHOLD = 800;
|
|
2
1
|
/**
|
|
3
2
|
* Paths exempt from the file-size cap. The cap is Karpathy's "Simplicity
|
|
4
3
|
* First": it exists to make a human *simplify* an over-long file. A path is
|
|
@@ -27,10 +26,16 @@ export declare function isSizeCapExempt(file: string): boolean;
|
|
|
27
26
|
export type FileSizeViolation = {
|
|
28
27
|
file: string;
|
|
29
28
|
lines: number;
|
|
29
|
+
/** The cap this file was measured against, resolved per path by the policy
|
|
30
|
+
* module (300 raw lines; 500 under root `tests/`), or the caller's override. */
|
|
31
|
+
cap: number;
|
|
30
32
|
};
|
|
31
33
|
export type FileSizeScanResult = {
|
|
32
34
|
ok: boolean;
|
|
33
|
-
threshold
|
|
35
|
+
/** The caller's `threshold` override, or `null` when every file was measured
|
|
36
|
+
* against its own policy cap. One number cannot describe a two-cap policy,
|
|
37
|
+
* so the number that decided a file travels on that file's violation. */
|
|
38
|
+
threshold: number | null;
|
|
34
39
|
checkedFiles: number;
|
|
35
40
|
/** Paths skipped by SIZE_CAP_EXEMPT_PATTERNS (tool output + append-only
|
|
36
41
|
* records). Reported so the exemption is auditable rather than a silent
|
|
@@ -40,13 +45,35 @@ export type FileSizeScanResult = {
|
|
|
40
45
|
* deleted in the working tree). Pre-#015 the scan crashed on these via
|
|
41
46
|
* ENOENT; now they are reported here as informational data. */
|
|
42
47
|
deletedFiles: string[];
|
|
48
|
+
/** Changed files the file-size policy does not measure at all: outside its
|
|
49
|
+
* four scope directories, or with an extension it does not count. Reported
|
|
50
|
+
* rather than silently skipped, for the same reason `exemptFiles` is.
|
|
51
|
+
*
|
|
52
|
+
* WHY THEY ARE NOT VIOLATIONS (F3, rid 2026-09-30-cap-unify-01). Every file
|
|
53
|
+
* the scan checked used to be measured against `fileSizeCapFor`, whose
|
|
54
|
+
* else-branch is 300 — a number that is only defined for `src`/`packages`/
|
|
55
|
+
* `scripts`. So an out-of-scope path (a `.md`, a file under `.husky/`) could
|
|
56
|
+
* redden `request transition` at 301 lines while contributing nothing to the
|
|
57
|
+
* `fileSizeOverCap` row that ratchets the policy: no ceiling to descend, no
|
|
58
|
+
* split campaign with a duty to clear it, and no verdict a contributor could
|
|
59
|
+
* act on. Enforcing the cap wider than the declared scope is not a stricter
|
|
60
|
+
* gate, it is an unauditable one.
|
|
61
|
+
*
|
|
62
|
+
* A caller that names `threshold` explicitly opts out of the scope rule —
|
|
63
|
+
* "apply this number to every changed file" is the documented meaning of the
|
|
64
|
+
* flag — and then nothing is out of scope. */
|
|
65
|
+
outOfScopeFiles: string[];
|
|
43
66
|
violations: FileSizeViolation[];
|
|
44
67
|
};
|
|
45
68
|
export type FileSizeScanOptions = {
|
|
46
69
|
projectRoot: string;
|
|
47
70
|
/** Compare working tree against this ref. Default 'HEAD'. */
|
|
48
71
|
baseRef?: string;
|
|
49
|
-
/**
|
|
72
|
+
/**
|
|
73
|
+
* Line count threshold applied to EVERY file. When omitted, each file is
|
|
74
|
+
* measured against the cap `file-size-policy.ts` defines for its directory —
|
|
75
|
+
* the policy is the default, this option only overrides it.
|
|
76
|
+
*/
|
|
50
77
|
threshold?: number;
|
|
51
78
|
};
|
|
52
79
|
export declare function scanFileSize(options: FileSizeScanOptions): FileSizeScanResult;
|