peaks-loop 4.1.0 → 4.1.2
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 +75 -0
- package/README-en.md +4 -4
- package/README.md +25 -4
- package/bin/node-floor.mjs +59 -0
- package/bin/peaks.js +13 -0
- package/config/eslint/tsconfig.lint.json +2 -1
- package/dist/cli/cli-helpers.d.ts +0 -1
- package/dist/cli/cli-helpers.js +0 -1
- package/dist/cli/commands/_cli-error-envelope.js +0 -3
- package/dist/cli/commands/_register.js +2 -2
- package/dist/cli/commands/adapter-commands-s2a.d.ts +0 -1
- package/dist/cli/commands/adapter-commands.d.ts +0 -1
- package/dist/cli/commands/api-diff-commands.d.ts +0 -1
- package/dist/cli/commands/api-diff-commands.js +0 -1
- package/dist/cli/commands/audit-commands.js +21 -24
- package/dist/cli/commands/autonomous-swarm-commands.js +0 -1
- package/dist/cli/commands/bee-commands.d.ts +0 -2
- package/dist/cli/commands/bee-commands.js +0 -2
- package/dist/cli/commands/best-practice-scan-command.d.ts +0 -1
- package/dist/cli/commands/best-practice-scan-helpers.js +0 -1
- package/dist/cli/commands/changeset-commands.d.ts +0 -2
- package/dist/cli/commands/changeset-commands.js +0 -2
- package/dist/cli/commands/code-commands.d.ts +0 -3
- package/dist/cli/commands/code-commands.js +0 -3
- package/dist/cli/commands/code-gate-command.d.ts +0 -1
- package/dist/cli/commands/code-gate-command.js +0 -1
- package/dist/cli/commands/code-job-shape-commands-read-job-shape.d.ts +0 -1
- package/dist/cli/commands/code-job-shape-commands-read-job-shape.js +0 -1
- package/dist/cli/commands/code-job-shape-commands.d.ts +0 -2
- package/dist/cli/commands/code-job-shape-commands.js +0 -3
- package/dist/cli/commands/code-mode-gate-commands.d.ts +0 -2
- package/dist/cli/commands/code-mode-gate-commands.js +0 -3
- package/dist/cli/commands/code-mode-gate-should-pause-command.js +1 -5
- package/dist/cli/commands/code-mode-gate-should-pause-envelope.d.ts +0 -1
- package/dist/cli/commands/code-mode-gate-should-pause-envelope.js +0 -2
- package/dist/cli/commands/code-mode-status-command.d.ts +0 -1
- package/dist/cli/commands/code-mode-status-command.js +0 -1
- package/dist/cli/commands/code-orchestrator-can-do.d.ts +0 -1
- package/dist/cli/commands/code-orchestrator-can-do.js +0 -1
- package/dist/cli/commands/code-run-command.js +0 -1
- package/dist/cli/commands/code-runtime-commands.d.ts +0 -3
- package/dist/cli/commands/code-runtime-commands.js +0 -15
- package/dist/cli/commands/codegraph-command-runtime.d.ts +6 -0
- package/dist/cli/commands/codegraph-command-runtime.js +19 -7
- package/dist/cli/commands/codegraph-commands.js +20 -193
- package/dist/cli/commands/codegraph-init-command.d.ts +8 -0
- package/dist/cli/commands/codegraph-init-command.js +162 -0
- package/dist/cli/commands/codegraph-status-command.js +5 -6
- 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.d.ts +0 -1
- package/dist/cli/commands/compact-command.js +0 -4
- package/dist/cli/commands/container-commands.d.ts +0 -1
- package/dist/cli/commands/container-commands.js +0 -1
- package/dist/cli/commands/context-commands.d.ts +0 -1
- package/dist/cli/commands/context-commands.js +0 -1
- package/dist/cli/commands/core/doctor-command.d.ts +0 -1
- package/dist/cli/commands/core/doctor-command.js +0 -9
- package/dist/cli/commands/core/memory-command.js +10 -1
- package/dist/cli/commands/core/session-command.js +0 -14
- package/dist/cli/commands/core/skill-command.js +1 -10
- package/dist/cli/commands/core/standards-command.js +1 -1
- package/dist/cli/commands/core-artifact-commands.d.ts +0 -1
- package/dist/cli/commands/core-artifact-commands.js +0 -1
- package/dist/cli/commands/cron-commands-actions.d.ts +0 -1
- package/dist/cli/commands/cron-commands-actions.js +0 -2
- package/dist/cli/commands/cron-commands-schedule.d.ts +0 -3
- package/dist/cli/commands/cron-commands-schedule.js +0 -1
- package/dist/cli/commands/cron-commands.d.ts +0 -1
- package/dist/cli/commands/cron-commands.js +0 -2
- package/dist/cli/commands/cron-scheduler-commands.d.ts +0 -1
- package/dist/cli/commands/cron-scheduler-commands.js +0 -1
- package/dist/cli/commands/cron-scheduler-persist.d.ts +0 -5
- package/dist/cli/commands/cron-scheduler-persist.js +0 -5
- package/dist/cli/commands/dashboard-summary.d.ts +0 -1
- package/dist/cli/commands/dispatch-commands.d.ts +0 -1
- package/dist/cli/commands/dispatch-commands.js +10 -37
- package/dist/cli/commands/dispatch-from-dag.js +0 -4
- package/dist/cli/commands/doctor/invoke-from-code.js +0 -1
- package/dist/cli/commands/e2e-verify.d.ts +0 -1
- package/dist/cli/commands/ecc-commands.d.ts +16 -22
- package/dist/cli/commands/ecc-commands.js +38 -26
- package/dist/cli/commands/evolution-commands.d.ts +0 -1
- package/dist/cli/commands/evolution-commands.js +0 -1
- package/dist/cli/commands/feedback-commands.d.ts +0 -1
- package/dist/cli/commands/feedback-commands.js +0 -2
- package/dist/cli/commands/fixture-commands.d.ts +0 -2
- package/dist/cli/commands/fresh-context-commands.d.ts +0 -1
- package/dist/cli/commands/gate-commands-enforce.d.ts +0 -3
- package/dist/cli/commands/gate-commands-enforce.js +0 -4
- package/dist/cli/commands/gate-commands.js +0 -2
- package/dist/cli/commands/governance-classify-contract-commands.d.ts +0 -3
- package/dist/cli/commands/governance-classify-contract-commands.js +0 -4
- package/dist/cli/commands/heartbeat-commands-action.js +0 -6
- package/dist/cli/commands/heartbeat-commands-validation.d.ts +0 -2
- package/dist/cli/commands/heartbeat-commands-validation.js +0 -2
- package/dist/cli/commands/heartbeat-commands.d.ts +0 -1
- package/dist/cli/commands/heartbeat-commands.js +0 -1
- package/dist/cli/commands/hooks-commands.js +0 -11
- package/dist/cli/commands/ide-commands.d.ts +0 -1
- package/dist/cli/commands/job-add-slice-command.d.ts +0 -2
- package/dist/cli/commands/job-add-slice-command.js +0 -2
- package/dist/cli/commands/job-commands.js +0 -4
- package/dist/cli/commands/lease-metrics-commands.d.ts +0 -1
- package/dist/cli/commands/lease-metrics-commands.js +0 -1
- package/dist/cli/commands/lease-stats-commands.d.ts +0 -1
- package/dist/cli/commands/lease-stats-commands.js +0 -1
- package/dist/cli/commands/log-commands.d.ts +0 -2
- package/dist/cli/commands/log-commands.js +0 -3
- package/dist/cli/commands/loop-eval-commands.js +0 -3
- package/dist/cli/commands/memory-commands.d.ts +0 -1
- package/dist/cli/commands/memory-commands.js +0 -1
- package/dist/cli/commands/observability-commands.d.ts +0 -6
- package/dist/cli/commands/observability-commands.js +0 -6
- package/dist/cli/commands/outer-cache-commands.js +0 -2
- package/dist/cli/commands/playwright-commands.d.ts +0 -1
- package/dist/cli/commands/playwright-commands.js +0 -1
- package/dist/cli/commands/polyrepo-commands.d.ts +0 -1
- package/dist/cli/commands/prd-commands.d.ts +0 -1
- package/dist/cli/commands/prd-commands.js +8 -4
- package/dist/cli/commands/preferences-commands.js +0 -2
- package/dist/cli/commands/primer-command.d.ts +0 -1
- package/dist/cli/commands/primer-command.js +0 -1
- package/dist/cli/commands/project-commands.js +0 -1
- package/dist/cli/commands/qa-commands.d.ts +0 -1
- package/dist/cli/commands/qa-commands.js +0 -2
- package/dist/cli/commands/release-commands.js +0 -9
- package/dist/cli/commands/request-commands.d.ts +0 -1
- package/dist/cli/commands/request-commands.js +0 -10
- package/dist/cli/commands/request-format-helpers.d.ts +0 -1
- package/dist/cli/commands/request-format-helpers.js +0 -2
- package/dist/cli/commands/runtime-commands.d.ts +0 -1
- package/dist/cli/commands/sc-commands.js +0 -1
- package/dist/cli/commands/session-24h-mode.d.ts +0 -1
- package/dist/cli/commands/session-24h-mode.js +0 -2
- package/dist/cli/commands/session-checkpoint-command.d.ts +0 -1
- package/dist/cli/commands/session-checkpoint-command.js +0 -1
- package/dist/cli/commands/session-resume-command.d.ts +0 -1
- package/dist/cli/commands/session-resume-command.js +0 -1
- package/dist/cli/commands/shadcn-commands.js +0 -2
- package/dist/cli/commands/share-commands.d.ts +0 -3
- package/dist/cli/commands/share-commands.js +0 -13
- package/dist/cli/commands/skill-search-commands.d.ts +0 -2
- package/dist/cli/commands/slice-commands.js +0 -2
- package/dist/cli/commands/slice-integrate-commands.js +0 -1
- package/dist/cli/commands/spill-demo-command.d.ts +0 -1
- package/dist/cli/commands/statusline-commands.js +0 -4
- package/dist/cli/commands/sub-agent/detached.js +0 -2
- package/dist/cli/commands/sub-agent-commands.d.ts +0 -3
- package/dist/cli/commands/sub-agent-shared.d.ts +0 -8
- package/dist/cli/commands/sub-agent-shared.js +0 -5
- package/dist/cli/commands/sub-agent-shutdown-commands.d.ts +0 -1
- package/dist/cli/commands/tech-commands.d.ts +0 -4
- package/dist/cli/commands/tech-commands.js +0 -4
- package/dist/cli/commands/vendor-detect.d.ts +0 -3
- package/dist/cli/commands/vendor-detect.js +0 -2
- package/dist/cli/commands/verdict-aggregate-command.d.ts +0 -1
- package/dist/cli/commands/verdict-aggregate-command.js +0 -7
- package/dist/cli/commands/vm-commands.d.ts +0 -1
- package/dist/cli/commands/vm-commands.js +5 -29
- package/dist/cli/commands/vm-hypervisor-probe.d.ts +27 -0
- package/dist/cli/commands/vm-hypervisor-probe.js +78 -0
- package/dist/cli/commands/vm-status-command.d.ts +3 -0
- package/dist/cli/commands/vm-status-command.js +50 -0
- package/dist/cli/commands/wave-plan-commands.d.ts +0 -1
- package/dist/cli/commands/web-lifecycle-commands.d.ts +0 -1
- package/dist/cli/commands/workflow-commands.js +0 -14
- package/dist/cli/commands/workflow-plan-commands-actions.js +0 -2
- package/dist/cli/commands/workflow-plan-commands-session.js +0 -2
- package/dist/cli/commands/workflow-plan-commands.d.ts +0 -1
- package/dist/cli/commands/workspace/clean-command.d.ts +0 -1
- package/dist/cli/commands/workspace/clean-command.js +0 -1
- package/dist/cli/commands/workspace/helpers.d.ts +0 -1
- package/dist/cli/commands/workspace/helpers.js +0 -1
- package/dist/cli/commands/workspace/init-command.d.ts +0 -6
- package/dist/cli/commands/workspace/init-command.js +0 -17
- package/dist/cli/commands/workspace/migrate-command.d.ts +0 -2
- package/dist/cli/commands/workspace/migrate-command.js +0 -2
- package/dist/cli/commands/workspace/reconcile-command.d.ts +0 -2
- package/dist/cli/commands/workspace/reconcile-command.js +0 -3
- package/dist/cli/commands/workspace-commands.d.ts +0 -2
- package/dist/cli/commands/workspace-commands.js +0 -4
- package/dist/cli/commands/worktree-auth-commands.d.ts +0 -1
- package/dist/cli/commands/worktree-auth-commands.js +0 -1
- package/dist/cli/commands/worktree-auth-grant-command.d.ts +0 -1
- package/dist/cli/commands/worktree-auth-grant-command.js +0 -1
- package/dist/cli/commands/worktree-auth-manage-commands.d.ts +0 -1
- package/dist/cli/commands/worktree-auth-manage-commands.js +0 -1
- package/dist/cli/commands/worktree-lease-commands.js +0 -1
- package/dist/cli/program.js +4 -16
- package/dist/reporters/bdd-reporter.js +0 -1
- package/dist/services/24h-mode/auto-engage.d.ts +0 -1
- package/dist/services/24h-mode/auto-engage.js +0 -1
- package/dist/services/24h-mode/decider.d.ts +0 -3
- package/dist/services/24h-mode/decider.js +0 -3
- package/dist/services/24h-mode/index.d.ts +0 -2
- package/dist/services/24h-mode/index.js +0 -2
- package/dist/services/24h-mode/state.d.ts +0 -1
- package/dist/services/24h-mode/state.js +0 -1
- package/dist/services/24h-mode/store.d.ts +0 -1
- package/dist/services/24h-mode/store.js +0 -1
- package/dist/services/adapter/adapter-registry.js +0 -1
- package/dist/services/artifacts/artifact-prerequisites.d.ts +0 -5
- package/dist/services/artifacts/artifact-prerequisites.js +0 -19
- package/dist/services/artifacts/artifact-templates.d.ts +0 -1
- package/dist/services/artifacts/artifact-templates.js +0 -1
- package/dist/services/artifacts/request-artifact-service.d.ts +0 -5
- package/dist/services/artifacts/request-artifact-service.js +0 -12
- package/dist/services/artifacts/request-artifact-state-helpers.d.ts +0 -1
- package/dist/services/artifacts/request-artifact-state-helpers.js +0 -1
- package/dist/services/audit/artifact-writer.d.ts +0 -1
- package/dist/services/audit/artifact-writer.js +0 -1
- package/dist/services/audit/decision-writer.js +3 -1
- package/dist/services/audit/enforcer-liveness.js +0 -1
- package/dist/services/audit/enforcers/active-skill-resolver.d.ts +0 -2
- package/dist/services/audit/enforcers/active-skill-resolver.js +0 -2
- package/dist/services/audit/red-line-audit-input.d.ts +11 -0
- package/dist/services/audit/red-line-audit-input.js +103 -0
- package/dist/services/audit/red-line-catalog-p2-a-bee-runtime.d.ts +0 -1
- package/dist/services/audit/red-line-catalog-p2-a.js +0 -9
- package/dist/services/audit/types.d.ts +0 -2
- package/dist/services/audit/types.js +0 -2
- package/dist/services/audit-independent/perf-audit-service.d.ts +0 -2
- package/dist/services/audit-independent/security-audit-service.d.ts +0 -5
- package/dist/services/audit-independent/security-audit-service.js +0 -2
- package/dist/services/autonomous-swarm/autonomous-swarm-service.d.ts +0 -5
- package/dist/services/autonomous-swarm/autonomous-swarm-service.js +0 -5
- package/dist/services/best-practice/language-detector.js +0 -1
- package/dist/services/best-practice/output-formatter.d.ts +0 -1
- package/dist/services/best-practice/scan-orchestrator.d.ts +0 -1
- package/dist/services/capability-audit-service/types.d.ts +1 -3
- package/dist/services/capability-guard-runner/contracts/J08.js +2 -2
- package/dist/services/changeset/changeset-check-service.d.ts +0 -3
- package/dist/services/changeset/changeset-check-service.js +0 -3
- package/dist/services/classify/classify-service.d.ts +0 -1
- package/dist/services/classify/classify-service.js +0 -1
- package/dist/services/classify/classify-types.d.ts +0 -1
- package/dist/services/classify/classify-types.js +0 -1
- package/dist/services/code/auto-compact-lifecycle.d.ts +0 -11
- package/dist/services/code/auto-compact-lifecycle.js +0 -10
- package/dist/services/code/auto-compact-modes.d.ts +0 -3
- package/dist/services/code/auto-compact-modes.js +0 -3
- package/dist/services/code/auto-compact-orchestrator.d.ts +0 -9
- package/dist/services/code/auto-compact-orchestrator.js +0 -29
- package/dist/services/code/batch-heartbeat-poller.js +0 -1
- package/dist/services/code/compact-event-settle.js +0 -1
- package/dist/services/code/dag-orchestrator.d.ts +0 -1
- package/dist/services/code/dag-orchestrator.js +0 -1
- package/dist/services/code/mode-gate-types.d.ts +1 -3
- package/dist/services/code/mode-gate-types.js +0 -2
- package/dist/services/code/mode-gate.d.ts +0 -5
- package/dist/services/code/mode-gate.js +1 -14
- package/dist/services/code/orchestrator-can-do-advisories.d.ts +0 -2
- package/dist/services/code/orchestrator-can-do-advisories.js +0 -5
- package/dist/services/code/orchestrator-can-do.d.ts +0 -4
- package/dist/services/code/orchestrator-can-do.js +0 -3
- package/dist/services/code/status-line-renderer.js +0 -1
- package/dist/services/code/user-touchpoint-classifier.js +0 -7
- package/dist/services/code-review/ecc-bridge.d.ts +6 -7
- package/dist/services/codegraph/codegraph-autorefresh.js +6 -4
- package/dist/services/codegraph/codegraph-backend-advice.d.ts +26 -0
- package/dist/services/codegraph/codegraph-backend-advice.js +166 -0
- package/dist/services/codegraph/codegraph-config-repair-writer.d.ts +0 -24
- package/dist/services/codegraph/codegraph-config-repair-writer.js +32 -73
- package/dist/services/codegraph/codegraph-exclude-integrity.d.ts +14 -6
- package/dist/services/codegraph/codegraph-exclude-integrity.js +24 -14
- package/dist/services/codegraph/codegraph-exclude-reconciler.d.ts +9 -2
- package/dist/services/codegraph/codegraph-exclude-reconciler.js +87 -18
- package/dist/services/codegraph/codegraph-exclude-repair.d.ts +9 -61
- package/dist/services/codegraph/codegraph-exclude-repair.js +67 -139
- package/dist/services/codegraph/codegraph-foreign-removal.d.ts +21 -0
- package/dist/services/codegraph/codegraph-foreign-removal.js +77 -0
- package/dist/services/codegraph/codegraph-index-integrity.d.ts +12 -25
- package/dist/services/codegraph/codegraph-index-integrity.js +84 -23
- package/dist/services/codegraph/codegraph-preflight-service.js +15 -6
- package/dist/services/codegraph/codegraph-project-config.d.ts +35 -0
- package/dist/services/codegraph/codegraph-project-config.js +90 -0
- package/dist/services/codegraph/codegraph-service.d.ts +1 -2
- package/dist/services/codegraph/codegraph-service.js +11 -11
- package/dist/services/codegraph/codegraph-upstream-layout.d.ts +24 -0
- package/dist/services/codegraph/codegraph-upstream-layout.js +85 -0
- 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 +68 -0
- package/dist/services/comments/comment-audit.js +121 -0
- package/dist/services/comments/comment-citations.d.ts +66 -0
- package/dist/services/comments/comment-citations.js +184 -0
- package/dist/services/comments/comment-hygiene.d.ts +105 -0
- package/dist/services/comments/comment-hygiene.js +170 -0
- package/dist/services/comments/comment-prune.d.ts +88 -0
- package/dist/services/comments/comment-prune.js +196 -0
- package/dist/services/comments/comment-spans.d.ts +30 -0
- package/dist/services/comments/comment-spans.js +266 -0
- package/dist/services/comments/prune-apply.d.ts +82 -0
- package/dist/services/comments/prune-apply.js +217 -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/decision-tables.d.ts +0 -2
- package/dist/services/compact/decision-tables.js +0 -2
- package/dist/services/compact/request-transition-hook.js +0 -2
- package/dist/services/compact-history/compact-history-service.d.ts +0 -2
- package/dist/services/compact-history/compact-history-service.js +0 -1
- package/dist/services/compact-statusline/compact-lifecycle-store.js +0 -2
- package/dist/services/compact-statusline/compact-lifecycle-types.d.ts +0 -1
- package/dist/services/compact-statusline/compact-statusline-service.js +0 -4
- package/dist/services/config/config-rollback.js +0 -1
- package/dist/services/config/config-safety.d.ts +0 -1
- package/dist/services/config/config-safety.js +0 -1
- package/dist/services/config/config-service.d.ts +0 -1
- package/dist/services/config/config-service.js +0 -1
- package/dist/services/config/model-routing.d.ts +0 -3
- package/dist/services/config/model-routing.js +0 -5
- package/dist/services/container/container-lease.d.ts +0 -1
- package/dist/services/container/container-lease.js +0 -1
- package/dist/services/context/artifact-meta.js +0 -1
- package/dist/services/context/auto-compact-dispatcher-input.d.ts +0 -3
- package/dist/services/context/auto-compact-dispatcher.js +0 -14
- package/dist/services/context/auto-compact-reader-input.d.ts +0 -1
- package/dist/services/context/auto-compact-reader.d.ts +0 -2
- package/dist/services/context/auto-compact-reader.js +0 -7
- package/dist/services/context/auto-compact-types.d.ts +0 -11
- package/dist/services/context/auto-compact-types.js +0 -1
- package/dist/services/context/build-dispatch-system-prompt.d.ts +11 -29
- package/dist/services/context/build-dispatch-system-prompt.js +8 -27
- package/dist/services/context/codegraph-unavailable-block.d.ts +38 -0
- package/dist/services/context/codegraph-unavailable-block.js +77 -0
- package/dist/services/context/context-audit-hint.d.ts +0 -1
- package/dist/services/context/context-audit-hint.js +0 -1
- package/dist/services/context/context-audit.d.ts +0 -1
- package/dist/services/context/context-audit.js +0 -1
- package/dist/services/context/harness-window-config.d.ts +0 -4
- package/dist/services/context/harness-window-config.js +0 -4
- package/dist/services/context/main-session-monitor.d.ts +0 -2
- package/dist/services/context/main-session-monitor.js +0 -2
- package/dist/services/context/memory-index-reader.d.ts +0 -2
- package/dist/services/context/memory-index-reader.js +0 -1
- package/dist/services/context/memory-preflight-config.d.ts +0 -1
- package/dist/services/context/memory-preflight-service.d.ts +0 -1
- package/dist/services/context/memory-preflight-service.js +0 -3
- package/dist/services/context/memory-preflight-support.d.ts +0 -5
- package/dist/services/context/post-compact-reinjection.d.ts +0 -1
- package/dist/services/context/post-compact-reinjection.js +0 -1
- package/dist/services/context/summary-view.d.ts +0 -1
- package/dist/services/context/summary-view.js +0 -1
- package/dist/services/crystallization/crystallization-service.d.ts +5 -11
- package/dist/services/crystallization/crystallization-service.js +3 -11
- package/dist/services/crystallization/crystallization-store.d.ts +6 -6
- package/dist/services/dispatch/await-batch-helpers.js +0 -3
- package/dist/services/dispatch/await-batch.d.ts +0 -1
- package/dist/services/dispatch/await-batch.js +0 -4
- package/dist/services/dispatch/batch-counter.js +0 -1
- package/dist/services/dispatch/conflict-replay.d.ts +0 -1
- package/dist/services/dispatch/conflict-replay.js +0 -1
- package/dist/services/dispatch/contract-store.d.ts +0 -2
- package/dist/services/dispatch/contract-store.js +0 -2
- package/dist/services/dispatch/dispatch-record-input-types.d.ts +0 -2
- package/dist/services/dispatch/dispatch-record-types.d.ts +0 -10
- package/dist/services/dispatch/dispatch-record-upgrade-fields.js +0 -7
- package/dist/services/dispatch/dispatch-record-upgrade-guards.js +0 -2
- package/dist/services/dispatch/dispatch-record-writer.d.ts +0 -5
- package/dist/services/dispatch/dispatch-record-writer.js +0 -21
- package/dist/services/dispatch/dispatch-sub-agent.d.ts +0 -1
- package/dist/services/dispatch/dispatch-sub-agent.js +0 -1
- package/dist/services/dispatch/e2e-fixtures.js +0 -1
- package/dist/services/dispatch/file-overlap-wave-planner.d.ts +0 -1
- package/dist/services/dispatch/file-overlap-wave-planner.js +0 -1
- package/dist/services/dispatch/isolation-lease.d.ts +0 -2
- package/dist/services/dispatch/isolation-lease.js +0 -2
- package/dist/services/dispatch/service-shutdown.js +0 -1
- package/dist/services/dispatch/session-capsule.js +0 -1
- package/dist/services/dispatch/slice-dag-types.d.ts +0 -1
- package/dist/services/dispatch/slice-dag.js +0 -2
- package/dist/services/dispatch/stage-enum.d.ts +0 -1
- package/dist/services/dispatch/stage-enum.js +0 -1
- package/dist/services/dispatch/startup-timeout.d.ts +0 -1
- package/dist/services/dispatch/sub-agent-batch-await.js +0 -3
- package/dist/services/dispatch/sub-agent-dispatcher-types.d.ts +0 -1
- package/dist/services/dispatch/sub-agent-dispatcher.js +0 -2
- package/dist/services/dispatch/test-tool-detection.d.ts +0 -3
- package/dist/services/dispatch/test-tool-detection.js +0 -2
- package/dist/services/doctor/doctor-service/checks/codegraph-capability.js +19 -12
- package/dist/services/doctor/doctor-service/checks/codegraph-index-integrity.js +1 -2
- package/dist/services/doctor/doctor-service/checks/l3-memory-health.d.ts +0 -2
- package/dist/services/doctor/doctor-service/checks/l3-memory-health.js +0 -2
- package/dist/services/doctor/doctor-service/checks/l3-orphan-sessions.d.ts +0 -1
- package/dist/services/doctor/doctor-service/checks/l3-orphan-sessions.js +0 -1
- package/dist/services/doctor/doctor-service/checks/multi-binary-drift.d.ts +0 -1
- package/dist/services/doctor/doctor-service/checks/multi-binary-drift.js +0 -3
- package/dist/services/doctor/doctor-service/checks/workspace-layout.js +0 -2
- package/dist/services/doctor/doctor-service/index.d.ts +0 -1
- package/dist/services/doctor/doctor-service/index.js +0 -1
- package/dist/services/doctor/doctor-service/plugin-registry.d.ts +0 -2
- package/dist/services/doctor/doctor-service/plugin-registry.js +0 -2
- package/dist/services/doctor/doctor-service/probe-types.d.ts +0 -4
- package/dist/services/doctor/doctor-service/report/final-summary.d.ts +0 -1
- package/dist/services/doctor/doctor-service/report/final-summary.js +0 -1
- package/dist/services/doctor/doctor-service/types.d.ts +0 -5
- package/dist/services/doctor/doctor-service/types.js +0 -1
- package/dist/services/doctor/doctor-service.d.ts +0 -1
- package/dist/services/doctor/doctor-service.js +0 -2
- package/dist/services/env/shell-probe.js +0 -1
- package/dist/services/evidence/evidence-generator.js +0 -8
- package/dist/services/evolution/evolution-constraints.d.ts +0 -2
- package/dist/services/evolution/evolution-constraints.js +0 -2
- package/dist/services/evolution/evolution-service.d.ts +2 -12
- package/dist/services/evolution/evolution-service.js +0 -9
- package/dist/services/evolution/evolution-store.d.ts +6 -8
- package/dist/services/evolution/evolution-store.js +1 -3
- package/dist/services/evolution/evolution-types.d.ts +0 -2
- package/dist/services/evolution/evolution-types.js +0 -6
- package/dist/services/evolution/independent-evaluator-runner.d.ts +0 -3
- package/dist/services/evolution/independent-evaluator-runner.js +0 -1
- package/dist/services/evolution/regression-skeptic-runner.d.ts +0 -1
- package/dist/services/feedback/feedback-promotion-service.d.ts +0 -8
- package/dist/services/feedback/feedback-promotion-service.js +0 -10
- package/dist/services/feedback/promotion-artifact-evidence.d.ts +0 -1
- package/dist/services/feedback/promotion-artifact-evidence.js +0 -1
- package/dist/services/final-review/final-review-evidence-budget.d.ts +0 -3
- package/dist/services/final-review/final-review-evidence-budget.js +0 -5
- package/dist/services/final-review/final-review-evidence-sources.d.ts +0 -1
- package/dist/services/final-review/final-review-evidence-sources.js +0 -1
- package/dist/services/final-review/final-review-output-budget.d.ts +0 -1
- package/dist/services/final-review/final-review-output-budget.js +0 -3
- package/dist/services/final-review/final-review-service.d.ts +0 -1
- package/dist/services/final-review/final-review-service.js +0 -1
- package/dist/services/fixture/fixture-capture-service.js +0 -1
- package/dist/services/fixture/fixture-sanitize-service.d.ts +0 -3
- package/dist/services/fixture/fixture-sanitize-service.js +0 -3
- package/dist/services/fresh-context/config.js +0 -1
- package/dist/services/fresh-context/fresh-context-block.js +0 -1
- package/dist/services/fresh-context/trigger-scan.d.ts +0 -1
- package/dist/services/fresh-context/trigger-scan.js +0 -1
- package/dist/services/fuzzy-matching/fzf-pick-service.d.ts +0 -1
- package/dist/services/fuzzy-matching/fzf-pick-service.js +0 -1
- package/dist/services/handoff/handoff-parser.d.ts +0 -1
- package/dist/services/handoff/handoff-parser.js +0 -1
- package/dist/services/handoff/handoff-types.d.ts +0 -1
- package/dist/services/handoff/handoff-types.js +0 -1
- package/dist/services/handoff/handoff-writer.d.ts +0 -1
- package/dist/services/handoff/handoff-writer.js +0 -1
- package/dist/services/hooks/auto-compact-hook-install.d.ts +0 -1
- package/dist/services/hooks/auto-compact-hook-install.js +0 -1
- package/dist/services/hooks/output.d.ts +0 -1
- package/dist/services/hooks/output.js +0 -1
- package/dist/services/hooks/pre-tool-code-gate.d.ts +0 -1
- package/dist/services/hooks/pre-tool-code-gate.js +0 -1
- package/dist/services/hooks/presence-marker-detector.js +0 -1
- package/dist/services/hooks/worktree-authorization-gate.d.ts +0 -3
- package/dist/services/hooks/worktree-authorization-gate.js +0 -1
- package/dist/services/ide/adapters/claude-code-adapter.d.ts +0 -5
- package/dist/services/ide/adapters/claude-code-adapter.js +0 -11
- package/dist/services/ide/adapters/qoder-adapter.d.ts +0 -3
- package/dist/services/ide/adapters/qoder-adapter.js +0 -5
- package/dist/services/ide/adapters/tongyi-lingma-adapter.d.ts +0 -2
- package/dist/services/ide/adapters/tongyi-lingma-adapter.js +0 -2
- package/dist/services/ide/adapters/trae-adapter.d.ts +0 -3
- package/dist/services/ide/adapters/trae-adapter.js +3 -6
- package/dist/services/ide/adapters/zcode-adapter.js +0 -2
- package/dist/services/ide/current-model-detector.js +0 -1
- package/dist/services/ide/hook-protocol.d.ts +0 -2
- package/dist/services/ide/hook-protocol.js +0 -2
- package/dist/services/ide/ide-compact-types.d.ts +0 -7
- package/dist/services/ide/ide-types.d.ts +0 -12
- package/dist/services/ide/resource-profile.d.ts +0 -1
- package/dist/services/job/job-commit-verification.d.ts +0 -2
- package/dist/services/job/job-commit-verification.js +0 -2
- package/dist/services/job/job-orchestrator.d.ts +0 -1
- package/dist/services/job/job-orchestrator.js +0 -1
- package/dist/services/job/job-progress-store.d.ts +0 -2
- package/dist/services/job/job-progress-store.js +0 -3
- package/dist/services/job/job-types.js +0 -1
- package/dist/services/job-snapshot/snapshot.js +0 -1
- package/dist/services/karpathy-cost/karpathy-cost-check-service.js +0 -1
- package/dist/services/legacy/legacy-detector.js +0 -1
- package/dist/services/log/log-commands-service.d.ts +0 -2
- package/dist/services/log/log-commands-service.js +0 -2
- package/dist/services/log/logger.d.ts +0 -1
- package/dist/services/log/logger.js +0 -1
- package/dist/services/log/redact.d.ts +0 -1
- package/dist/services/log/redact.js +0 -1
- package/dist/services/log/retention.d.ts +0 -17
- package/dist/services/log/retention.js +0 -18
- package/dist/services/loop/loop-bee-relation-service.d.ts +3 -3
- package/dist/services/loop/loop-bee-relation-service.js +14 -13
- package/dist/services/loop/loop-bee-relation-store.d.ts +9 -10
- package/dist/services/loop/loop-bee-relation-store.js +1 -2
- package/dist/services/loop/loop-bee-relation-types.d.ts +1 -1
- package/dist/services/loop/loop-bee-relation-types.js +1 -1
- package/dist/services/loop/loop-release-service.d.ts +3 -3
- package/dist/services/loop/loop-release-service.js +1 -1
- package/dist/services/loop/loop-release-store.d.ts +6 -7
- package/dist/services/loop/loop-release-store.js +0 -1
- package/dist/services/loop/monotonic-guard.d.ts +0 -1
- package/dist/services/loop/monotonic-guard.js +0 -1
- package/dist/services/memory/memory-ingest-service.js +0 -1
- package/dist/services/memory/project-context-service.d.ts +0 -1
- package/dist/services/memory/project-context-service.js +0 -1
- package/dist/services/memory/project-memory-service/index/reindex.d.ts +0 -2
- package/dist/services/memory/project-memory-service/index/reindex.js +0 -1
- package/dist/services/memory/project-memory-service/index/search.d.ts +0 -1
- package/dist/services/memory/project-memory-service/index/search.js +0 -1
- 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 +0 -1
- package/dist/services/memory/project-memory-service/memory-kinds.js +0 -1
- package/dist/services/memory/project-memory-service/parsers/frontmatter.d.ts +0 -1
- package/dist/services/memory/project-memory-service/parsers/frontmatter.js +0 -1
- 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 +120 -26
- package/dist/services/memory/project-memory-service.js +0 -1
- package/dist/services/mode/mode-enforcement.js +0 -1
- package/dist/services/mode/mode-status-service.d.ts +0 -2
- package/dist/services/mode/mode-status-service.js +0 -2
- package/dist/services/observability/aggregation.d.ts +0 -4
- package/dist/services/observability/aggregation.js +0 -6
- package/dist/services/observability/observability-schema.js +0 -1
- package/dist/services/observability/observability-service.d.ts +0 -5
- package/dist/services/observability/observability-service.js +0 -4
- package/dist/services/observability/report-formatter.d.ts +0 -2
- package/dist/services/observability/report-formatter.js +0 -2
- package/dist/services/openspec/artifact-boundary.d.ts +0 -4
- package/dist/services/openspec/artifact-boundary.js +0 -4
- package/dist/services/openspec/coverage-evidence-reader.d.ts +0 -1
- package/dist/services/openspec/coverage-evidence-reader.js +0 -1
- package/dist/services/polyrepo/polyrepo-dispatcher.js +0 -1
- package/dist/services/polyrepo/polyrepo-scanner.js +0 -1
- package/dist/services/polyrepo/polyrepo-service.js +0 -1
- package/dist/services/polyrepo/polyrepo-types.d.ts +0 -1
- package/dist/services/prd/best-practice-auto-trigger.d.ts +0 -2
- package/dist/services/prd/best-practice-auto-trigger.js +0 -2
- package/dist/services/prd/gate-evidence-derivation.d.ts +0 -4
- package/dist/services/prd/gate-evidence-derivation.js +0 -5
- package/dist/services/prd/handoff-auto-regen.js +0 -5
- package/dist/services/prd/handoff-frontmatter-shape.d.ts +0 -2
- package/dist/services/prd/handoff-frontmatter-shape.js +0 -2
- package/dist/services/prd/handoff-frontmatter.d.ts +0 -1
- package/dist/services/prd/handoff-frontmatter.js +61 -2
- package/dist/services/prd/handoff-gate-evidence.d.ts +0 -1
- package/dist/services/prd/handoff-gate-evidence.js +12 -12
- package/dist/services/prd/handoff-path-resolution.d.ts +0 -7
- package/dist/services/prd/handoff-path-resolution.js +0 -10
- package/dist/services/prd/handoff-service.d.ts +11 -3
- package/dist/services/prd/handoff-service.js +11 -3
- package/dist/services/prd/handoff-types.d.ts +33 -3
- package/dist/services/prd/handoff-types.js +0 -1
- package/dist/services/prd/project-scan-bootstrap-service.d.ts +0 -1
- package/dist/services/prd/project-scan-bootstrap-service.js +0 -4
- package/dist/services/prd/project-scan-types.d.ts +0 -1
- package/dist/services/prd/project-scan-types.js +0 -1
- package/dist/services/preferences/preferences-service.d.ts +0 -1
- package/dist/services/preferences/preferences-service.js +0 -5
- package/dist/services/preferences/preferences-types.d.ts +0 -14
- package/dist/services/preferences/preferences-types.js +0 -4
- package/dist/services/progress/progress-service.js +0 -1
- package/dist/services/qa/bdd-test-style-verifier.d.ts +0 -1
- package/dist/services/qa/bdd-test-style-verifier.js +0 -1
- package/dist/services/qa/browser-event-logger.d.ts +0 -1
- package/dist/services/qa/browser-event-logger.js +0 -1
- package/dist/services/qa/browser-restart-detector.d.ts +0 -1
- package/dist/services/qa/browser-restart-detector.js +0 -1
- package/dist/services/qa/browser-reuse-hint.d.ts +0 -1
- package/dist/services/qa/browser-reuse-hint.js +0 -1
- package/dist/services/qa/qa-business-review-state.js +0 -2
- package/dist/services/qa/screenshot-archive-service.d.ts +0 -1
- package/dist/services/qa/screenshot-archive-service.js +0 -1
- package/dist/services/rd/impl.js +0 -1
- package/dist/services/rd/rd-service.d.ts +0 -5
- package/dist/services/rd/rd-service.js +0 -5
- package/dist/services/rd/reviewer-dispatch-policy.d.ts +0 -4
- package/dist/services/rd/reviewer-dispatch-policy.js +0 -4
- package/dist/services/rd/standards-diagnostic.js +0 -1
- package/dist/services/rd/tactical-stage.js +0 -1
- package/dist/services/rd-swarm/rd-swarm-types.d.ts +0 -1
- package/dist/services/rd-swarm/rd-swarm-types.js +0 -1
- package/dist/services/recommendations/installed-capability-detector.d.ts +5 -6
- package/dist/services/recommendations/installed-capability-detector.js +11 -11
- package/dist/services/release/version-precheck-service.d.ts +0 -2
- package/dist/services/release/version-precheck-service.js +0 -3
- package/dist/services/retrospective/retrospective-index.d.ts +0 -1
- package/dist/services/retrospective/retrospective-index.js +0 -1
- package/dist/services/retrospective/retrospective-show.d.ts +0 -1
- package/dist/services/retrospective/retrospective-show.js +0 -1
- package/dist/services/reviewer/model-family.js +0 -1
- package/dist/services/reviewer/reviewer-config.js +0 -1
- package/dist/services/reviewer/reviewer-service.d.ts +0 -1
- package/dist/services/reviewer/reviewer-service.js +0 -3
- package/dist/services/reviewer/selection-strategies.js +0 -1
- package/dist/services/runtime/runtime-detector.js +0 -1
- package/dist/services/runtime/runtime-service.d.ts +0 -2
- package/dist/services/runtime/vendor-adapter.d.ts +0 -7
- package/dist/services/runtime/vendors/claude-code.js +0 -1
- package/dist/services/runtime/vendors/codex.js +0 -1
- package/dist/services/runtime/vendors/copilot.js +0 -1
- package/dist/services/sc/sc-service.js +0 -6
- package/dist/services/scan/acceptance-coverage-service.js +0 -2
- package/dist/services/scan/api-diff-recorded.d.ts +0 -1
- package/dist/services/scan/api-diff-recorded.js +0 -1
- package/dist/services/scan/api-diff-service.d.ts +0 -1
- package/dist/services/scan/api-diff-service.js +0 -1
- package/dist/services/scan/api-diff-types.d.ts +0 -1
- package/dist/services/scan/api-diff-types.js +0 -1
- package/dist/services/scan/archetype-detection.d.ts +37 -0
- package/dist/services/scan/archetype-detection.js +175 -2
- package/dist/services/scan/archetype-service.js +36 -23
- package/dist/services/scan/file-size-policy.d.ts +0 -1
- package/dist/services/scan/file-size-policy.js +0 -5
- package/dist/services/scan/file-size-scan.d.ts +0 -1
- package/dist/services/scan/scan-types.d.ts +9 -0
- package/dist/services/security/safe-settings-path.js +0 -1
- package/dist/services/session/binding-store.d.ts +0 -4
- package/dist/services/session/binding-store.js +0 -7
- package/dist/services/session/caller-binding-service.d.ts +0 -6
- package/dist/services/session/caller-binding-service.js +0 -4
- package/dist/services/session/caller-id-types.d.ts +0 -3
- package/dist/services/session/caller-id-types.js +0 -2
- package/dist/services/session/getSessionDir.js +0 -1
- package/dist/services/session/index.js +0 -1
- package/dist/services/session/platform-fallbacks.d.ts +0 -3
- package/dist/services/session/platform-fallbacks.js +0 -3
- package/dist/services/session/resolve-caller-id.d.ts +0 -2
- package/dist/services/session/resolve-caller-id.js +0 -2
- package/dist/services/session/session-binding-bridge.d.ts +0 -2
- package/dist/services/session/session-binding-bridge.js +0 -15
- package/dist/services/session/session-checkpoint-service.d.ts +0 -1
- package/dist/services/session/session-checkpoint-service.js +0 -1
- package/dist/services/session/session-manager.d.ts +0 -8
- package/dist/services/session/session-manager.js +0 -19
- package/dist/services/session/session-resume-service.d.ts +0 -1
- package/dist/services/session/session-resume-service.js +0 -1
- package/dist/services/share/bundle-reader.d.ts +2 -5
- package/dist/services/share/bundle-reader.js +6 -8
- package/dist/services/share/bundle-writer.d.ts +2 -2
- package/dist/services/skill/resume-detector.js +0 -3
- package/dist/services/skill/skill-scheduler.d.ts +0 -1
- package/dist/services/skill/skill-scheduler.js +0 -1
- package/dist/services/skill/skill-search-service.d.ts +0 -2
- package/dist/services/skill/skill-search-service.js +0 -2
- package/dist/services/skillhub/release-diff.d.ts +2 -2
- package/dist/services/skillhub/release-export.d.ts +2 -2
- package/dist/services/skillhub/release-gc-blobs.d.ts +2 -2
- package/dist/services/skillhub/release-import.d.ts +2 -2
- package/dist/services/skillhub/release-import.js +2 -1
- package/dist/services/skillhub/release-retain.d.ts +2 -2
- package/dist/services/skillhub/release-retain.js +2 -1
- package/dist/services/skillhub/sqlite-store.d.ts +3 -3
- package/dist/services/skillhub/sqlite-store.js +4 -5
- package/dist/services/skills/hooks-codegate-superpowers.d.ts +0 -3
- package/dist/services/skills/hooks-codegate-superpowers.js +0 -14
- package/dist/services/skills/hooks-settings-service.d.ts +0 -2
- package/dist/services/skills/hooks-settings-service.js +0 -6
- package/dist/services/skills/presence-lease-service.d.ts +0 -1
- package/dist/services/skills/presence-lease-service.js +0 -1
- package/dist/services/skills/session-start-hook-constants.d.ts +0 -4
- package/dist/services/skills/session-start-hook-constants.js +0 -4
- package/dist/services/skills/skill-presence-service.d.ts +0 -8
- package/dist/services/skills/skill-presence-service.js +0 -13
- package/dist/services/skills/skill-statusline-model.d.ts +0 -6
- package/dist/services/skills/skill-statusline-model.js +1 -4
- package/dist/services/skills/skill-statusline-renderer.d.ts +0 -1
- package/dist/services/skills/skill-statusline-renderer.js +0 -12
- package/dist/services/skills/skill-statusline-service.js +0 -6
- package/dist/services/skills/skill-statusline-sid-suffix.d.ts +0 -2
- package/dist/services/skills/skill-statusline-sid-suffix.js +0 -2
- package/dist/services/skills/statusline-palette.d.ts +0 -2
- package/dist/services/skills/statusline-palette.js +0 -3
- package/dist/services/slice/slice-archive-service.js +0 -1
- package/dist/services/slice/slice-benchmark-service.d.ts +0 -1
- package/dist/services/slice/slice-benchmark-service.js +0 -1
- package/dist/services/slice/slice-check-service.js +0 -6
- package/dist/services/slice/slice-check-types.d.ts +0 -1
- package/dist/services/slice/slice-pick-service.d.ts +0 -1
- package/dist/services/slice/slice-pick-service.js +0 -1
- package/dist/services/slice/slice-review-state.js +0 -2
- package/dist/services/sqlite/sqlite-driver.d.ts +118 -0
- package/dist/services/sqlite/sqlite-driver.js +159 -0
- package/dist/services/standards/ide-aware-standards-service.d.ts +0 -2
- package/dist/services/standards/ide-aware-standards-service.js +0 -1
- package/dist/services/standards/loop-engineering-readiness-lint.d.ts +0 -1
- package/dist/services/standards/loop-engineering-readiness-lint.js +0 -1
- package/dist/services/standards/migrate-claude-rules-service.js +0 -3
- package/dist/services/standards/migrate-service.d.ts +0 -1
- package/dist/services/standards/migrate-service.js +0 -1
- package/dist/services/standards/missing-standards-detector.d.ts +0 -2
- package/dist/services/standards/missing-standards-detector.js +0 -3
- package/dist/services/standards/project-standards-service.d.ts +0 -1
- package/dist/services/standards/project-standards-service.js +0 -1
- package/dist/services/standards/standards-render.d.ts +0 -1
- package/dist/services/standards/standards-render.js +0 -1
- package/dist/services/standards/ui-library-dispatch-block.d.ts +0 -1
- package/dist/services/standards/ui-library-dispatch-block.js +0 -1
- package/dist/services/tech/tech-change-id-service.d.ts +0 -7
- package/dist/services/tech/tech-change-id-service.js +0 -7
- package/dist/services/tech/tech-service.js +0 -5
- package/dist/services/verdict/envelope-parsers.d.ts +0 -2
- package/dist/services/verdict/envelope-parsers.js +0 -2
- package/dist/services/verdict/envelopes.d.ts +0 -1
- package/dist/services/vm/vm-lease.js +0 -1
- package/dist/services/web/aria-node.d.ts +0 -1
- package/dist/services/web/bounded-output.d.ts +0 -1
- package/dist/services/web/bounded-output.js +0 -1
- package/dist/services/web/browser-acquire.js +0 -1
- package/dist/services/web/browser-cache-probe.js +0 -1
- package/dist/services/web/browser-session-manager.js +0 -1
- package/dist/services/web/daemon-entry.js +0 -1
- package/dist/services/web/daemon-registry.js +0 -1
- package/dist/services/web/daemon-supervisor.d.ts +4 -3
- package/dist/services/web/daemon-supervisor.js +4 -4
- package/dist/services/web/playwright-loader.js +0 -1
- package/dist/services/web/playwright-types.d.ts +0 -1
- package/dist/services/web/snapshot-pruner.js +0 -1
- package/dist/services/web/untrusted-envelope.d.ts +0 -1
- package/dist/services/web/web-artifact-paths.js +0 -1
- package/dist/services/web/web-client.d.ts +0 -1
- package/dist/services/web/web-daemon-service.js +0 -1
- package/dist/services/web/web-fallback.d.ts +0 -1
- package/dist/services/web/web-fallback.js +0 -1
- package/dist/services/web/web-install-service.js +0 -1
- package/dist/services/web/web-login-profile.js +0 -1
- package/dist/services/web/web-protocol.d.ts +0 -1
- package/dist/services/web/web-protocol.js +0 -1
- package/dist/services/web/web-status-report.js +0 -1
- package/dist/services/workflow/artifact-paths.js +0 -3
- package/dist/services/workflow/autonomous-resume-writer.js +0 -2
- package/dist/services/workflow/pipeline-verify-gate-support.d.ts +0 -5
- package/dist/services/workflow/pipeline-verify-gate-support.js +0 -11
- package/dist/services/workflow/pipeline-verify-service.d.ts +0 -2
- package/dist/services/workflow/pipeline-verify-service.js +0 -15
- package/dist/services/workflow/pipeline-verify-types.d.ts +0 -10
- package/dist/services/workflow/pipeline-verify-types.js +0 -2
- package/dist/services/workflow/plan-reader.d.ts +0 -1
- package/dist/services/workflow/plan-reader.js +0 -5
- package/dist/services/workflow/plan-refresher.js +0 -2
- package/dist/services/workflow/plan-trigger-detector.d.ts +0 -2
- package/dist/services/workflow/plan-trigger-detector.js +0 -3
- package/dist/services/workflow/workflow-autonomous-resume-helpers.js +0 -5
- package/dist/services/workflow/workflow-autonomous-service.js +0 -2
- package/dist/services/workflow/workflow-autonomous-types.d.ts +0 -2
- package/dist/services/workflow/workflow-autonomous-types.js +0 -2
- package/dist/services/workflow/workflow-graph-types.d.ts +0 -1
- package/dist/services/workflow/workflow-graph-types.js +0 -1
- package/dist/services/workflow/workflow-router-service.js +0 -4
- package/dist/services/workflow/workflow-skip-service.d.ts +0 -1
- package/dist/services/workflow/workflow-skip-service.js +0 -1
- package/dist/services/workflow/workflow-spec-lint.d.ts +0 -2
- package/dist/services/workflow/workflow-spec-lint.js +0 -2
- package/dist/services/workflow/workflow-spec-types.d.ts +0 -1
- package/dist/services/workflow/workflow-spec-types.js +0 -1
- package/dist/services/workflow/workflow-spec-yaml.d.ts +0 -2
- package/dist/services/workflow/workflow-spec-yaml.js +0 -2
- package/dist/services/workflow/workflow-spec.js +0 -1
- package/dist/services/workflow/workflow-state-store.js +0 -1
- package/dist/services/workspace/claude-settings-template.d.ts +0 -4
- package/dist/services/workspace/claude-settings-template.js +0 -4
- 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.d.ts +0 -1
- package/dist/services/workspace/migrate-1-4-1-service.js +0 -1
- package/dist/services/workspace/migrate-service.js +0 -8
- package/dist/services/workspace/migrate-types.d.ts +0 -4
- package/dist/services/workspace/migrate-types.js +0 -1
- package/dist/services/workspace/reconcile-migrate.d.ts +0 -3
- package/dist/services/workspace/reconcile-migrate.js +0 -5
- package/dist/services/workspace/reconcile-service.d.ts +0 -3
- package/dist/services/workspace/reconcile-service.js +0 -7
- package/dist/services/workspace/reconcile-types.d.ts +0 -5
- package/dist/services/workspace/sid-naming-guard.d.ts +0 -1
- package/dist/services/workspace/sid-naming-guard.js +0 -1
- package/dist/services/workspace/templates/project-scan/index.d.ts +0 -3
- package/dist/services/workspace/templates/project-scan/index.js +0 -3
- package/dist/services/workspace/workspace-claude-settings-materializer.d.ts +0 -1
- package/dist/services/workspace/workspace-claude-settings-materializer.js +0 -4
- package/dist/services/workspace/workspace-service.d.ts +0 -7
- package/dist/services/workspace/workspace-service.js +1 -17
- package/dist/services/worktree/playwright-profile.js +0 -1
- package/dist/services/worktree/worktree-lease-types.d.ts +0 -1
- package/dist/services/worktree/worktree-lease-types.js +0 -1
- package/dist/services/worktree/worktree-lease.d.ts +0 -2
- package/dist/services/worktree/worktree-lease.js +0 -2
- package/dist/shared/format-md-compact.d.ts +0 -2
- package/dist/shared/format-md-compact.js +0 -2
- package/dist/shared/incrementing-number.d.ts +0 -1
- package/dist/shared/incrementing-number.js +0 -1
- package/dist/shared/path-utils.d.ts +0 -1
- package/dist/shared/path-utils.js +0 -1
- package/dist/shared/runtime-root.d.ts +0 -1
- package/dist/shared/runtime-root.js +0 -1
- package/dist/shared/stale-policy.d.ts +0 -1
- package/dist/shared/stale-policy.js +0 -1
- package/package.json +12 -10
- package/scripts/canonical-store-link.mjs +296 -0
- package/scripts/canonical-store-prune.mjs +131 -0
- package/scripts/canonical-store.mjs +298 -0
- package/scripts/install-skills.mjs +175 -560
- 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-audit/SKILL.md +3 -3
- 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/codegraph/codegraph-include-reconciler.d.ts +0 -10
- package/dist/services/codegraph/codegraph-include-reconciler.js +0 -160
- package/dist/services/upgrade/1x-detector-service.d.ts +0 -7
- package/dist/services/upgrade/1x-detector-service.js +0 -96
- 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 -428
- package/skills/peaks-code/references/step-0-55-1x-detection.md +0 -83
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
// src/services/codegraph/codegraph-upstream-layout.ts
|
|
2
|
+
//
|
|
3
|
+
// ONE answer to "where did the installed `@colbymchenry/codegraph` put its
|
|
4
|
+
// files", for the four places peaks-loop reaches into the package.
|
|
5
|
+
//
|
|
6
|
+
// WHY THIS EXISTS (the 1.6.2 upgrade). Before it, one rule covered all four
|
|
7
|
+
// sites: join `dist/…` onto whatever directory upstream's `package.json`
|
|
8
|
+
// sits in. That rule is false from 1.6.x. The main package there is TYPE
|
|
9
|
+
// DEFINITIONS ONLY — `find dist -name '*.js' | wc -l` is 0 — and the runtime
|
|
10
|
+
// moved into a per-platform optionalDependency
|
|
11
|
+
// (`@colbymchenry/codegraph-<platform>-<arch>`), whose own `lib/dist/` holds
|
|
12
|
+
// the entry AND the modules. Every one of the four joins therefore resolved
|
|
13
|
+
// to a path that does not exist, so the binary could not be spawned and the
|
|
14
|
+
// two oracles could not be loaded.
|
|
15
|
+
//
|
|
16
|
+
// The fix is a PROBE, not a version check: the candidates are ordered
|
|
17
|
+
// newest-layout-first (per-platform bundle, then the main package's own
|
|
18
|
+
// `dist/`) and the first one whose `dist/bin/codegraph.js` actually exists
|
|
19
|
+
// wins. So a 0.7.x install still resolves, a future release that moves the
|
|
20
|
+
// files again is found without an edit here, and nothing is decided by a
|
|
21
|
+
// version string that can drift from the filesystem.
|
|
22
|
+
//
|
|
23
|
+
// This module is separate from `codegraph-service.ts` rather than a few more
|
|
24
|
+
// functions inside it, because that file sits under eslint's `max-lines` cap
|
|
25
|
+
// and the resolver does not fit. It has no dependency on the service, so the
|
|
26
|
+
// two oracles can import it without pulling in the service's session and
|
|
27
|
+
// process-runner imports.
|
|
28
|
+
import { existsSync } from 'node:fs';
|
|
29
|
+
import { createRequire } from 'node:module';
|
|
30
|
+
import { dirname, join } from 'node:path';
|
|
31
|
+
const CODEGRAPH_PACKAGE_NAME = '@colbymchenry/codegraph';
|
|
32
|
+
/** The directory a 1.6.x per-platform bundle keeps its `dist/` under. */
|
|
33
|
+
const CODEGRAPH_BUNDLE_LIB_DIR = 'lib';
|
|
34
|
+
/**
|
|
35
|
+
* Directories a `dist/` might hang off, newest layout first.
|
|
36
|
+
*
|
|
37
|
+
* The platform bundle is resolved through a require anchored AT the main
|
|
38
|
+
* package's own `package.json`, never at this module: the bundle is a
|
|
39
|
+
* dependency OF the main package, so under pnpm's isolated layout it is
|
|
40
|
+
* linked into the MAIN package's `node_modules/` and is invisible to a
|
|
41
|
+
* require anchored here. A missing bundle (0.7.x, or a registry mirror that
|
|
42
|
+
* skipped the optionalDependency) is not an error — the main package's own
|
|
43
|
+
* `dist/` is the next candidate.
|
|
44
|
+
*/
|
|
45
|
+
function upstreamDistRoots(packageJsonPath) {
|
|
46
|
+
const bundlePackageName = `${CODEGRAPH_PACKAGE_NAME}-${process.platform}-${process.arch}`;
|
|
47
|
+
let bundleDir = null;
|
|
48
|
+
try {
|
|
49
|
+
const require = createRequire(packageJsonPath);
|
|
50
|
+
const bundlePackageJson = require.resolve(`${bundlePackageName}/package.json`);
|
|
51
|
+
bundleDir = dirname(bundlePackageJson);
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
// A missing bundle is an EXPECTED state, not a swallow: 0.7.x has none,
|
|
55
|
+
// and a registry mirror that did not mirror the optionalDependency
|
|
56
|
+
// leaves the install without one. It is reported by the assignment —
|
|
57
|
+
// the caller below then has exactly one candidate root instead of two.
|
|
58
|
+
bundleDir = null;
|
|
59
|
+
}
|
|
60
|
+
const roots = bundleDir === null ? [] : [join(bundleDir, CODEGRAPH_BUNDLE_LIB_DIR)];
|
|
61
|
+
roots.push(dirname(packageJsonPath));
|
|
62
|
+
return roots;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Resolve upstream's layout for one `package.json` path.
|
|
66
|
+
*
|
|
67
|
+
* `packageJsonPath` is a parameter rather than a lookup because the doctor's
|
|
68
|
+
* yarn-pnp fallback reaches the same package by a filesystem walk and needs
|
|
69
|
+
* the layout for THAT path, not for whatever `createRequire` finds.
|
|
70
|
+
*/
|
|
71
|
+
export function codegraphUpstreamLayoutFor(packageJsonPath) {
|
|
72
|
+
const distDirs = upstreamDistRoots(packageJsonPath).map((root) => join(root, 'dist'));
|
|
73
|
+
const probed = distDirs.find((dir) => existsSync(join(dir, 'bin', 'codegraph.js')));
|
|
74
|
+
const moduleDir = probed ?? distDirs[0] ?? '';
|
|
75
|
+
return {
|
|
76
|
+
binaryPath: moduleDir === '' ? '' : join(moduleDir, 'bin', 'codegraph.js'),
|
|
77
|
+
moduleDir
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
/** `codegraphUpstreamLayoutFor` for whichever install this process runs against. */
|
|
81
|
+
export function resolveCodegraphUpstreamLayout() {
|
|
82
|
+
const require = createRequire(import.meta.url);
|
|
83
|
+
const packageJsonPath = require.resolve(`${CODEGRAPH_PACKAGE_NAME}/package.json`);
|
|
84
|
+
return codegraphUpstreamLayoutFor(packageJsonPath);
|
|
85
|
+
}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What makes a backtick span a claim about this repository's file tree.
|
|
3
|
+
*
|
|
4
|
+
* These are the candidate rules, shared by the two readers of the same judgement:
|
|
5
|
+
* the comment classifier (`comment-hygiene.ts`) and, by literal, the repository's
|
|
6
|
+
* citation guard (`tests/unit/standards/repo-citation-integrity.test.ts`).
|
|
7
|
+
* `tests/unit/comments/citation-parity.test.ts` pins that the two spellings agree —
|
|
8
|
+
* a shape rule restated in a second place and then drifting is the defect this
|
|
9
|
+
* repository keeps documenting for itself.
|
|
10
|
+
*
|
|
11
|
+
* The rules are exclusions, and every one of them exists because of a measured
|
|
12
|
+
* false positive rather than a taste for tidiness. See `isCitationCandidate`.
|
|
13
|
+
*/
|
|
14
|
+
/** Backtick span that has at least one `/` — a path citation, not a mention. */
|
|
15
|
+
export declare const PATH_SHAPED: RegExp;
|
|
16
|
+
/** First segments that make a span repo-relative rather than document-relative. */
|
|
17
|
+
export declare const REPO_ANCHORS: RegExp;
|
|
18
|
+
/** `path.ts:14-17` — strip before judging; the FILE must exist, the line may move. */
|
|
19
|
+
export declare const LINE_SUFFIX: RegExp;
|
|
20
|
+
/**
|
|
21
|
+
* Session-runtime dirs. A path starting with one of these is a runtime artifact
|
|
22
|
+
* written under `.peaks/_runtime/<sessionId>/` and abbreviated in prose; it is
|
|
23
|
+
* not a repo file, and reporting it as missing is how a guard starts being
|
|
24
|
+
* ignored. Same exemption list the citation guard carries.
|
|
25
|
+
*/
|
|
26
|
+
export declare const SESSION_WORKSPACE_DIRS: Set<string>;
|
|
27
|
+
/** `<placeholder>`, an ellipsis, a glob segment — illustrative, not asserted. */
|
|
28
|
+
export declare const SYNTHETIC_SEGMENT: RegExp;
|
|
29
|
+
/**
|
|
30
|
+
* A segment that is exactly an ASCII ellipsis names a path *family*
|
|
31
|
+
* (`src/...`, `openspec/changes/...`), not a file. `SYNTHETIC_SEGMENT` above
|
|
32
|
+
* catches the Unicode `…` and the glob `*`; this catches `...`, which its
|
|
33
|
+
* character class admits.
|
|
34
|
+
*/
|
|
35
|
+
export declare const ELLIPSIS_SEGMENT: RegExp;
|
|
36
|
+
export declare const BARE_TEST_FILENAME_SHAPE: RegExp;
|
|
37
|
+
/**
|
|
38
|
+
* Runtime state the CLI writes into a project. In a checkout of THIS repository
|
|
39
|
+
* these are absent by design — they are produced in the consuming project at run
|
|
40
|
+
* time — so a comment naming them makes no claim about this tree.
|
|
41
|
+
*/
|
|
42
|
+
export declare const RUNTIME_STATE_PREFIXES: readonly [".peaks/_runtime/", ".peaks/cron/", ".peaks/cache/", ".peaks/_dogfood/", ".peaks/_sub_agents/"];
|
|
43
|
+
/**
|
|
44
|
+
* A file sitting flat in a project's `.peaks/` root is state the CLI writes there
|
|
45
|
+
* at run time — `.peaks/fork-state.json`, `.peaks/polyrepo.json`,
|
|
46
|
+
* `.peaks/role-registry.json`, `.peaks/.gitignore`, `.peaks/smoke-paths.json`.
|
|
47
|
+
*
|
|
48
|
+
* What this repository's own `.peaks/` commits is directories (`standards/`,
|
|
49
|
+
* `docs/`, `lint/`, `memory/`) plus four flat files, every one of which is
|
|
50
|
+
* present, so a citation to a tracked flat file resolves and this rule never fires
|
|
51
|
+
* for it. The shape is trusted over an entry list because an entry list has to
|
|
52
|
+
* grow with every runtime file the CLI adds — and the cost is stated: a future flat
|
|
53
|
+
* `.peaks/<file>` that is committed and later deleted would be hidden here.
|
|
54
|
+
* Repository convention is that top-level `.peaks/` entries are session or decision
|
|
55
|
+
* state, and a citation of that shape describes the consuming project.
|
|
56
|
+
*/
|
|
57
|
+
export declare const RUNTIME_STATE_ROOT_FILE: RegExp;
|
|
58
|
+
/** Stems that name a shape rather than a file (`src/services/x/y.ts`, `foo.ts`). */
|
|
59
|
+
export declare const SYNTHETIC_STEMS: Set<string>;
|
|
60
|
+
/**
|
|
61
|
+
* Text that introduces a path as a shape to copy into the consumer's own
|
|
62
|
+
* repository, rather than a claim that this tree contains it.
|
|
63
|
+
*/
|
|
64
|
+
export declare const ILLUSTRATION_CUE: RegExp;
|
|
65
|
+
/**
|
|
66
|
+
* A sentence that reasons about what a path *would* do, rather than reporting
|
|
67
|
+
* that a file is there.
|
|
68
|
+
*
|
|
69
|
+
* Two measured shapes, both read from the whole line because the cue sits on
|
|
70
|
+
* either side of the span:
|
|
71
|
+
*
|
|
72
|
+
* - a matching rule illustrated with made-up operands —
|
|
73
|
+
* `E.g. \`src/services/login\` should match \`src/services/login/handler.ts\``.
|
|
74
|
+
* Neither path is in any repository; the line is about the glob semantics.
|
|
75
|
+
* The `ILLUSTRATION_CUE` above cannot reach the second operand, because the
|
|
76
|
+
* cue must sit immediately before the span to fire, and here it does not.
|
|
77
|
+
* - a deliberate counterexample — `Written into \`.peaks/.gitignore\` they
|
|
78
|
+
* resolved to \`…\` and \`…\` — matching nothing, in every project`. The comment
|
|
79
|
+
* names two paths precisely because they match nothing; reporting them as
|
|
80
|
+
* missing files asks the reader to fix a bug the text is describing.
|
|
81
|
+
*
|
|
82
|
+
* The list is modal phrases only, and the boundary is load-bearing: the real
|
|
83
|
+
* finding at `src/services/workspace/claude-settings-template.ts:90` asserts that a
|
|
84
|
+
* handler "invokes the shipped script" by path, uses no modal, and stays reported —
|
|
85
|
+
* the script is not in the tree. Bare `resolves to` was tried and dropped from the
|
|
86
|
+
* list for the opposite reason: it also appears in live assertions about files that
|
|
87
|
+
* DO exist, and a cue that clears those is a cue that hides debt.
|
|
88
|
+
*
|
|
89
|
+
* (This rule's own header was reported by the scan it documents — the sentence
|
|
90
|
+
* above quoted the missing script's path verbatim, and quoting a dead path in prose
|
|
91
|
+
* about a dead path is still a dead path. Cited by file and line now.)
|
|
92
|
+
*/
|
|
93
|
+
export declare const HYPOTHETICAL_CUE: RegExp;
|
|
94
|
+
/**
|
|
95
|
+
* Documented runtime paths that are legitimately absent from a checkout. Each
|
|
96
|
+
* entry needs a reason; an allowlist without one is how a guard dies.
|
|
97
|
+
*/
|
|
98
|
+
export declare const OPTIONAL_RUNTIME_PATHS: Set<string>;
|
|
99
|
+
/** One path-shaped backtick span, with the offsets that bound it in its line. */
|
|
100
|
+
export type Citation = {
|
|
101
|
+
readonly span: string;
|
|
102
|
+
/** Offset of the opening backtick. */
|
|
103
|
+
readonly from: number;
|
|
104
|
+
/** Offset just past the closing backtick. */
|
|
105
|
+
readonly to: number;
|
|
106
|
+
};
|
|
107
|
+
/** What the candidate rule needs beyond the span itself. */
|
|
108
|
+
export type CitationContext = {
|
|
109
|
+
/** Repo-relative path of the citing file or document. */
|
|
110
|
+
readonly file: string;
|
|
111
|
+
/** True when a repo-relative path is a directory in the working tree. */
|
|
112
|
+
readonly dirExists: (relDir: string) => boolean;
|
|
113
|
+
};
|
|
114
|
+
/**
|
|
115
|
+
* The second resolution origin, made explicit: an unanchored span is a SIBLING
|
|
116
|
+
* reference, so its parent directory must exist next to the citing file — and only
|
|
117
|
+
* there.
|
|
118
|
+
*
|
|
119
|
+
* The repo root is deliberately not an origin for an unanchored span: writing a
|
|
120
|
+
* repo-root path is exactly what the anchors are for. The walk is narrower than the
|
|
121
|
+
* citation guard's every-ancestor version, and the reason is measured: with every
|
|
122
|
+
* ancestor tried, `hooks/hooks.json` cited from
|
|
123
|
+
* `src/services/doctor/doctor-service/checks/` was adopted by `src/services/hooks/`
|
|
124
|
+
* four levels up, and `memory/index.json` by `src/services/memory/` — 16 findings
|
|
125
|
+
* of paths inside installed packages and under
|
|
126
|
+
* `.peaks/_runtime/<sessionId>/`, reported as missing repository files. A
|
|
127
|
+
* sibling-only reading loses nothing real: a deleted file cited by the directory it
|
|
128
|
+
* lived in still has that parent dir, and is still reported.
|
|
129
|
+
*/
|
|
130
|
+
export declare function isFileRelative(citation: string, ctx: CitationContext): boolean;
|
|
131
|
+
/**
|
|
132
|
+
* Is this span a claim about the working tree at all?
|
|
133
|
+
*
|
|
134
|
+
* These are the candidate exclusions the repository's citation guard applies to
|
|
135
|
+
* markdown and to `scripts/` comments, transplanted to source comments —
|
|
136
|
+
* deliberately the SAME rules, not a second definition of "citation". Porting them
|
|
137
|
+
* was the answer to a measurement: 188 findings for roughly 20 real dead
|
|
138
|
+
* references, because a comment that gives a shape as an example (`a/b`,
|
|
139
|
+
* `pages/api`), names a path inside an installed package (`hooks/hooks.json`), or
|
|
140
|
+
* documents runtime state the CLI writes in the user's project
|
|
141
|
+
* (`.peaks/cron/schedule.json`) all read as "missing file" to a probe that only
|
|
142
|
+
* knows `exists`.
|
|
143
|
+
*
|
|
144
|
+
* The direction to preserve is the guard's stated invariant: these must never hide
|
|
145
|
+
* an ANCHORED citation. A path beginning `src/`, `tests/`, `docs/`, `skills/`,
|
|
146
|
+
* `scripts/`, `packages/` or `.peaks/` claims a location in this repository, and
|
|
147
|
+
* nothing below lets it through unread.
|
|
148
|
+
*
|
|
149
|
+
* `namesNoDirectory` is set only by the bare-`*.test.ts`-filename reading, whose own
|
|
150
|
+
* pattern has already established the filename shape: a filename names no
|
|
151
|
+
* directory, so it cannot satisfy `PATH_SHAPED`, and it has no parent directory to
|
|
152
|
+
* read as a sibling.
|
|
153
|
+
*/
|
|
154
|
+
export declare function isCitationCandidate(citation: Citation, line: string, ctx: CitationContext, namesNoDirectory?: boolean): boolean;
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What makes a backtick span a claim about this repository's file tree.
|
|
3
|
+
*
|
|
4
|
+
* These are the candidate rules, shared by the two readers of the same judgement:
|
|
5
|
+
* the comment classifier (`comment-hygiene.ts`) and, by literal, the repository's
|
|
6
|
+
* citation guard (`tests/unit/standards/repo-citation-integrity.test.ts`).
|
|
7
|
+
* `tests/unit/comments/citation-parity.test.ts` pins that the two spellings agree —
|
|
8
|
+
* a shape rule restated in a second place and then drifting is the defect this
|
|
9
|
+
* repository keeps documenting for itself.
|
|
10
|
+
*
|
|
11
|
+
* The rules are exclusions, and every one of them exists because of a measured
|
|
12
|
+
* false positive rather than a taste for tidiness. See `isCitationCandidate`.
|
|
13
|
+
*/
|
|
14
|
+
/** Backtick span that has at least one `/` — a path citation, not a mention. */
|
|
15
|
+
export const PATH_SHAPED = /^[A-Za-z0-9_.@-]+(?:\/[A-Za-z0-9_.@-]+)+$/;
|
|
16
|
+
/** First segments that make a span repo-relative rather than document-relative. */
|
|
17
|
+
export const REPO_ANCHORS = /^(\.peaks|\.claude|\.github|src|tests|docs|scripts|skills|packages|bin|openspec|contracts)\//;
|
|
18
|
+
/** `path.ts:14-17` — strip before judging; the FILE must exist, the line may move. */
|
|
19
|
+
export const LINE_SUFFIX = /:\d+(?:-\d+)?$/;
|
|
20
|
+
/**
|
|
21
|
+
* Session-runtime dirs. A path starting with one of these is a runtime artifact
|
|
22
|
+
* written under `.peaks/_runtime/<sessionId>/` and abbreviated in prose; it is
|
|
23
|
+
* not a repo file, and reporting it as missing is how a guard starts being
|
|
24
|
+
* ignored. Same exemption list the citation guard carries.
|
|
25
|
+
*/
|
|
26
|
+
export const SESSION_WORKSPACE_DIRS = new Set([
|
|
27
|
+
'prd',
|
|
28
|
+
'rd',
|
|
29
|
+
'qa',
|
|
30
|
+
'sc',
|
|
31
|
+
'txt',
|
|
32
|
+
'audit',
|
|
33
|
+
'ui',
|
|
34
|
+
'session',
|
|
35
|
+
'system'
|
|
36
|
+
]);
|
|
37
|
+
/** `<placeholder>`, an ellipsis, a glob segment — illustrative, not asserted. */
|
|
38
|
+
export const SYNTHETIC_SEGMENT = /[<>*…]|etc\.$/;
|
|
39
|
+
/**
|
|
40
|
+
* A segment that is exactly an ASCII ellipsis names a path *family*
|
|
41
|
+
* (`src/...`, `openspec/changes/...`), not a file. `SYNTHETIC_SEGMENT` above
|
|
42
|
+
* catches the Unicode `…` and the glob `*`; this catches `...`, which its
|
|
43
|
+
* character class admits.
|
|
44
|
+
*/
|
|
45
|
+
export const ELLIPSIS_SEGMENT = /(?:^|\/)\.\.\.(?:$|\/)/;
|
|
46
|
+
/**
|
|
47
|
+
* The bare-`*.test.ts`-filename shape, written once. A filename carries no slash,
|
|
48
|
+
* so `PATH_SHAPED` cannot see it; this is the second shape a candidate claim can
|
|
49
|
+
* take, and the guard reads the same character classes.
|
|
50
|
+
*/
|
|
51
|
+
const BARE_FILENAME_NAME = String.raw `[A-Za-z0-9_][A-Za-z0-9_.-]*-[A-Za-z0-9_.-]*\.test\.ts`;
|
|
52
|
+
export const BARE_TEST_FILENAME_SHAPE = new RegExp(`^${BARE_FILENAME_NAME}$`);
|
|
53
|
+
/**
|
|
54
|
+
* Runtime state the CLI writes into a project. In a checkout of THIS repository
|
|
55
|
+
* these are absent by design — they are produced in the consuming project at run
|
|
56
|
+
* time — so a comment naming them makes no claim about this tree.
|
|
57
|
+
*/
|
|
58
|
+
export const RUNTIME_STATE_PREFIXES = [
|
|
59
|
+
'.peaks/_runtime/',
|
|
60
|
+
'.peaks/cron/',
|
|
61
|
+
'.peaks/cache/',
|
|
62
|
+
// Both are gitignored at the repository root and written per run: `_dogfood/` by
|
|
63
|
+
// the dogfood harness, `_sub_agents/` by `peaks sub-agent dispatch`.
|
|
64
|
+
'.peaks/_dogfood/',
|
|
65
|
+
'.peaks/_sub_agents/'
|
|
66
|
+
];
|
|
67
|
+
/**
|
|
68
|
+
* A file sitting flat in a project's `.peaks/` root is state the CLI writes there
|
|
69
|
+
* at run time — `.peaks/fork-state.json`, `.peaks/polyrepo.json`,
|
|
70
|
+
* `.peaks/role-registry.json`, `.peaks/.gitignore`, `.peaks/smoke-paths.json`.
|
|
71
|
+
*
|
|
72
|
+
* What this repository's own `.peaks/` commits is directories (`standards/`,
|
|
73
|
+
* `docs/`, `lint/`, `memory/`) plus four flat files, every one of which is
|
|
74
|
+
* present, so a citation to a tracked flat file resolves and this rule never fires
|
|
75
|
+
* for it. The shape is trusted over an entry list because an entry list has to
|
|
76
|
+
* grow with every runtime file the CLI adds — and the cost is stated: a future flat
|
|
77
|
+
* `.peaks/<file>` that is committed and later deleted would be hidden here.
|
|
78
|
+
* Repository convention is that top-level `.peaks/` entries are session or decision
|
|
79
|
+
* state, and a citation of that shape describes the consuming project.
|
|
80
|
+
*/
|
|
81
|
+
export const RUNTIME_STATE_ROOT_FILE = /^\.peaks\/[^/]+$/;
|
|
82
|
+
/** Stems that name a shape rather than a file (`src/services/x/y.ts`, `foo.ts`). */
|
|
83
|
+
export const SYNTHETIC_STEMS = new Set([
|
|
84
|
+
'x',
|
|
85
|
+
'y',
|
|
86
|
+
'z',
|
|
87
|
+
'foo',
|
|
88
|
+
'bar',
|
|
89
|
+
'baz',
|
|
90
|
+
'qux',
|
|
91
|
+
'example',
|
|
92
|
+
'sample',
|
|
93
|
+
'dummy',
|
|
94
|
+
'placeholder'
|
|
95
|
+
]);
|
|
96
|
+
/**
|
|
97
|
+
* Text that introduces a path as a shape to copy into the consumer's own
|
|
98
|
+
* repository, rather than a claim that this tree contains it.
|
|
99
|
+
*/
|
|
100
|
+
export const ILLUSTRATION_CUE = /(?:e\.g\.|i\.e\.|for example|such as|reference shape|Example:)\s*\(?\s*$/i;
|
|
101
|
+
/**
|
|
102
|
+
* A sentence that reasons about what a path *would* do, rather than reporting
|
|
103
|
+
* that a file is there.
|
|
104
|
+
*
|
|
105
|
+
* Two measured shapes, both read from the whole line because the cue sits on
|
|
106
|
+
* either side of the span:
|
|
107
|
+
*
|
|
108
|
+
* - a matching rule illustrated with made-up operands —
|
|
109
|
+
* `E.g. \`src/services/login\` should match \`src/services/login/handler.ts\``.
|
|
110
|
+
* Neither path is in any repository; the line is about the glob semantics.
|
|
111
|
+
* The `ILLUSTRATION_CUE` above cannot reach the second operand, because the
|
|
112
|
+
* cue must sit immediately before the span to fire, and here it does not.
|
|
113
|
+
* - a deliberate counterexample — `Written into \`.peaks/.gitignore\` they
|
|
114
|
+
* resolved to \`…\` and \`…\` — matching nothing, in every project`. The comment
|
|
115
|
+
* names two paths precisely because they match nothing; reporting them as
|
|
116
|
+
* missing files asks the reader to fix a bug the text is describing.
|
|
117
|
+
*
|
|
118
|
+
* The list is modal phrases only, and the boundary is load-bearing: the real
|
|
119
|
+
* finding at `src/services/workspace/claude-settings-template.ts:90` asserts that a
|
|
120
|
+
* handler "invokes the shipped script" by path, uses no modal, and stays reported —
|
|
121
|
+
* the script is not in the tree. Bare `resolves to` was tried and dropped from the
|
|
122
|
+
* list for the opposite reason: it also appears in live assertions about files that
|
|
123
|
+
* DO exist, and a cue that clears those is a cue that hides debt.
|
|
124
|
+
*
|
|
125
|
+
* (This rule's own header was reported by the scan it documents — the sentence
|
|
126
|
+
* above quoted the missing script's path verbatim, and quoting a dead path in prose
|
|
127
|
+
* about a dead path is still a dead path. Cited by file and line now.)
|
|
128
|
+
*/
|
|
129
|
+
export const HYPOTHETICAL_CUE = /\b(?:should match|would (?:match|resolve|be|land|fail)|matching nothing|matched nothing|resolved to|do(?:es)? not match|never matched|hypothetical|counterexample|in that case)\b/i;
|
|
130
|
+
/**
|
|
131
|
+
* Documented runtime paths that are legitimately absent from a checkout. Each
|
|
132
|
+
* entry needs a reason; an allowlist without one is how a guard dies.
|
|
133
|
+
*/
|
|
134
|
+
export const OPTIONAL_RUNTIME_PATHS = new Set([
|
|
135
|
+
// Legacy fallback location of the active-skill marker; the canonical path is
|
|
136
|
+
// `.peaks/_runtime/active-skill.json`, so this dotfile is absent by design.
|
|
137
|
+
'.peaks/.active-skill.json',
|
|
138
|
+
// Legacy back-compat location of the session binding file, read by
|
|
139
|
+
// `peaks session` when the canonical `.peaks/_runtime/session.json` is gone.
|
|
140
|
+
'.peaks/.session.json'
|
|
141
|
+
]);
|
|
142
|
+
/**
|
|
143
|
+
* The second resolution origin, made explicit: an unanchored span is a SIBLING
|
|
144
|
+
* reference, so its parent directory must exist next to the citing file — and only
|
|
145
|
+
* there.
|
|
146
|
+
*
|
|
147
|
+
* The repo root is deliberately not an origin for an unanchored span: writing a
|
|
148
|
+
* repo-root path is exactly what the anchors are for. The walk is narrower than the
|
|
149
|
+
* citation guard's every-ancestor version, and the reason is measured: with every
|
|
150
|
+
* ancestor tried, `hooks/hooks.json` cited from
|
|
151
|
+
* `src/services/doctor/doctor-service/checks/` was adopted by `src/services/hooks/`
|
|
152
|
+
* four levels up, and `memory/index.json` by `src/services/memory/` — 16 findings
|
|
153
|
+
* of paths inside installed packages and under
|
|
154
|
+
* `.peaks/_runtime/<sessionId>/`, reported as missing repository files. A
|
|
155
|
+
* sibling-only reading loses nothing real: a deleted file cited by the directory it
|
|
156
|
+
* lived in still has that parent dir, and is still reported.
|
|
157
|
+
*/
|
|
158
|
+
export function isFileRelative(citation, ctx) {
|
|
159
|
+
const parent = citation.slice(0, citation.lastIndexOf('/'));
|
|
160
|
+
const cut = ctx.file.lastIndexOf('/');
|
|
161
|
+
if (cut === -1)
|
|
162
|
+
return false;
|
|
163
|
+
return ctx.dirExists(`${ctx.file.slice(0, cut)}/${parent}`);
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Spans that name something outside this repository: a package, a GitHub Action,
|
|
167
|
+
* runtime state the CLI writes in the consuming project, a path *family*, or the
|
|
168
|
+
* `./` form a document uses for a project it is installed into.
|
|
169
|
+
*/
|
|
170
|
+
function namesSomethingElse(span) {
|
|
171
|
+
if (span.includes('@'))
|
|
172
|
+
return true; // npm package / GitHub-Action refs
|
|
173
|
+
if (RUNTIME_STATE_PREFIXES.some((prefix) => span.startsWith(prefix)))
|
|
174
|
+
return true;
|
|
175
|
+
if (RUNTIME_STATE_ROOT_FILE.test(span))
|
|
176
|
+
return true;
|
|
177
|
+
if (OPTIONAL_RUNTIME_PATHS.has(span))
|
|
178
|
+
return true;
|
|
179
|
+
if (ELLIPSIS_SEGMENT.test(span))
|
|
180
|
+
return true;
|
|
181
|
+
// A repo path in this tree is written from the repo root; `./x` is where the
|
|
182
|
+
// CONSUMING project must not put a file.
|
|
183
|
+
return span.startsWith('./');
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Spans that are template text or an illustration rather than an assertion: wrapped
|
|
187
|
+
* in a `<…>` fill-in, introduced by an example cue, or built from stems that exist
|
|
188
|
+
* only to show a shape.
|
|
189
|
+
*/
|
|
190
|
+
function illustratesRatherThanAsserts(citation, line, span) {
|
|
191
|
+
const before = line.slice(0, citation.from);
|
|
192
|
+
const after = line.slice(citation.to);
|
|
193
|
+
// Inside a `<…>` fill-in the span is template text meant to be replaced.
|
|
194
|
+
if (before.lastIndexOf('<') > before.lastIndexOf('>') && after.includes('>'))
|
|
195
|
+
return true;
|
|
196
|
+
if (ILLUSTRATION_CUE.test(before))
|
|
197
|
+
return true;
|
|
198
|
+
const basename = span.slice(span.lastIndexOf('/') + 1);
|
|
199
|
+
const dot = basename.indexOf('.');
|
|
200
|
+
return SYNTHETIC_STEMS.has(dot === -1 ? basename : basename.slice(0, dot));
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Is this span a claim about the working tree at all?
|
|
204
|
+
*
|
|
205
|
+
* These are the candidate exclusions the repository's citation guard applies to
|
|
206
|
+
* markdown and to `scripts/` comments, transplanted to source comments —
|
|
207
|
+
* deliberately the SAME rules, not a second definition of "citation". Porting them
|
|
208
|
+
* was the answer to a measurement: 188 findings for roughly 20 real dead
|
|
209
|
+
* references, because a comment that gives a shape as an example (`a/b`,
|
|
210
|
+
* `pages/api`), names a path inside an installed package (`hooks/hooks.json`), or
|
|
211
|
+
* documents runtime state the CLI writes in the user's project
|
|
212
|
+
* (`.peaks/cron/schedule.json`) all read as "missing file" to a probe that only
|
|
213
|
+
* knows `exists`.
|
|
214
|
+
*
|
|
215
|
+
* The direction to preserve is the guard's stated invariant: these must never hide
|
|
216
|
+
* an ANCHORED citation. A path beginning `src/`, `tests/`, `docs/`, `skills/`,
|
|
217
|
+
* `scripts/`, `packages/` or `.peaks/` claims a location in this repository, and
|
|
218
|
+
* nothing below lets it through unread.
|
|
219
|
+
*
|
|
220
|
+
* `namesNoDirectory` is set only by the bare-`*.test.ts`-filename reading, whose own
|
|
221
|
+
* pattern has already established the filename shape: a filename names no
|
|
222
|
+
* directory, so it cannot satisfy `PATH_SHAPED`, and it has no parent directory to
|
|
223
|
+
* read as a sibling.
|
|
224
|
+
*/
|
|
225
|
+
export function isCitationCandidate(citation, line, ctx, namesNoDirectory = false) {
|
|
226
|
+
const span = citation.span;
|
|
227
|
+
if (!(namesNoDirectory ? BARE_TEST_FILENAME_SHAPE.test(span) : PATH_SHAPED.test(span)))
|
|
228
|
+
return false;
|
|
229
|
+
if (namesSomethingElse(span))
|
|
230
|
+
return false;
|
|
231
|
+
if (illustratesRatherThanAsserts(citation, line, span))
|
|
232
|
+
return false;
|
|
233
|
+
// The line reasons about what a path would do; it does not claim one is there.
|
|
234
|
+
if (HYPOTHETICAL_CUE.test(line))
|
|
235
|
+
return false;
|
|
236
|
+
if (REPO_ANCHORS.test(span))
|
|
237
|
+
return true;
|
|
238
|
+
if (namesNoDirectory)
|
|
239
|
+
return true;
|
|
240
|
+
return isFileRelative(span, ctx);
|
|
241
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Project-wide comment scan: what the classifier finds across the enforced scope.
|
|
3
|
+
*
|
|
4
|
+
* Scope follows the repository's existing lint boundary — `src` plus each
|
|
5
|
+
* workspace package's `src`, as `.husky/lint-scope.mjs` defines it — rather than
|
|
6
|
+
* a second definition of "product code" written here. Two names for one rule is
|
|
7
|
+
* the failure the parity test in `tests/unit/comments/citation-parity.test.ts`
|
|
8
|
+
* exists to prevent, and the parity that second name actually caused is pinned by
|
|
9
|
+
* `tests/unit/comments/comment-audit.test.ts`, which requires this walk to read the
|
|
10
|
+
* same number of files the artifact records the ratchet measuring.
|
|
11
|
+
*
|
|
12
|
+
* This is the read side only. Nothing here writes a file: the counts it produces
|
|
13
|
+
* are the numbers a ratchet would start from, and a ratchet seeded from a scan
|
|
14
|
+
* nobody has spot-checked is a gate that will be trained away the first time it
|
|
15
|
+
* refuses a legitimate change.
|
|
16
|
+
*/
|
|
17
|
+
import { type CommentFileSummary, type CommentFinding, type CommentFindingKind } from './comment-hygiene.js';
|
|
18
|
+
/**
|
|
19
|
+
* Product-code directories, in report order: `src`, then every package under
|
|
20
|
+
* `packages/` that has a `src`.
|
|
21
|
+
*
|
|
22
|
+
* Derived from the rule rather than enumerated, because `.husky/lint-scope.mjs` says a
|
|
23
|
+
* new `packages/<anything>/src` joins the enforced scope BY EXISTING. The first version
|
|
24
|
+
* of this list spelled it `['src', 'packages/peaks-loop-mut/src']`, which was the second
|
|
25
|
+
* definition of "product code" this file's header claims not to be: the ratchet measures
|
|
26
|
+
* 953 files and the worklist read 926, so 14 gated narrative rows lived in three
|
|
27
|
+
* packages no `peaks comments audit` would show and no `prune` could clear.
|
|
28
|
+
*/
|
|
29
|
+
export declare function commentScanScope(projectRoot: string): string[];
|
|
30
|
+
/**
|
|
31
|
+
* Every source file under one scope dir, repo-relative, sorted.
|
|
32
|
+
*
|
|
33
|
+
* The relative form is not cosmetic: `citationResolves` tries a citation with no
|
|
34
|
+
* repo anchor against the citing file's own directory and its ancestors, so an
|
|
35
|
+
* absolute path here turns every sibling reference into a false "missing file".
|
|
36
|
+
* `relative()` + separator normalisation is what keeps that resolution honest on
|
|
37
|
+
* a Windows host.
|
|
38
|
+
*/
|
|
39
|
+
export declare function scopeFiles(projectRoot: string, scopeDir: string): string[];
|
|
40
|
+
export type CommentAuditResult = {
|
|
41
|
+
readonly scannedFiles: number;
|
|
42
|
+
/** Files the caller named. Equal to `scannedFiles` unless one was unreadable. */
|
|
43
|
+
readonly askedFiles: number;
|
|
44
|
+
readonly commentLines: number;
|
|
45
|
+
readonly deadReferences: number;
|
|
46
|
+
readonly narrative: number;
|
|
47
|
+
readonly files: readonly CommentFileSummary[];
|
|
48
|
+
readonly findings: readonly CommentFinding[];
|
|
49
|
+
};
|
|
50
|
+
export type CommentAuditOptions = {
|
|
51
|
+
readonly projectRoot: string;
|
|
52
|
+
/** Narrow to one category, the way the prune will be able to. */
|
|
53
|
+
readonly kind?: CommentFindingKind;
|
|
54
|
+
/** Cap the finding list; totals are never capped. */
|
|
55
|
+
readonly limit?: number;
|
|
56
|
+
/**
|
|
57
|
+
* Scan EXACTLY these repo-relative files instead of walking the scope dirs.
|
|
58
|
+
*
|
|
59
|
+
* A ratchet row must be measured over the population its callers agree to, and a
|
|
60
|
+
* walk is not a scope: the walk sees untracked files the index never heard of and
|
|
61
|
+
* misses tracked files the disk dropped, so a row measured over a walk can move
|
|
62
|
+
* while nobody edits source. `git ls-files` filtered by the published scope rule is
|
|
63
|
+
* that population — the same list the eslint, prettier and silent-warning legs
|
|
64
|
+
*/
|
|
65
|
+
readonly files?: readonly string[];
|
|
66
|
+
};
|
|
67
|
+
/** Scan the enforced scope. Synchronous by design: it is a CLI read path. */
|
|
68
|
+
export declare function auditComments(options: CommentAuditOptions): CommentAuditResult;
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Project-wide comment scan: what the classifier finds across the enforced scope.
|
|
3
|
+
*
|
|
4
|
+
* Scope follows the repository's existing lint boundary — `src` plus each
|
|
5
|
+
* workspace package's `src`, as `.husky/lint-scope.mjs` defines it — rather than
|
|
6
|
+
* a second definition of "product code" written here. Two names for one rule is
|
|
7
|
+
* the failure the parity test in `tests/unit/comments/citation-parity.test.ts`
|
|
8
|
+
* exists to prevent, and the parity that second name actually caused is pinned by
|
|
9
|
+
* `tests/unit/comments/comment-audit.test.ts`, which requires this walk to read the
|
|
10
|
+
* same number of files the artifact records the ratchet measuring.
|
|
11
|
+
*
|
|
12
|
+
* This is the read side only. Nothing here writes a file: the counts it produces
|
|
13
|
+
* are the numbers a ratchet would start from, and a ratchet seeded from a scan
|
|
14
|
+
* nobody has spot-checked is a gate that will be trained away the first time it
|
|
15
|
+
* refuses a legitimate change.
|
|
16
|
+
*/
|
|
17
|
+
import { existsSync, readFileSync, readdirSync } from 'node:fs';
|
|
18
|
+
import { join, relative, resolve } from 'node:path';
|
|
19
|
+
import { scanComments, summarize } from './comment-hygiene.js';
|
|
20
|
+
import { createFsProbe, createRepoProbe } from './repo-path-probe.js';
|
|
21
|
+
/**
|
|
22
|
+
* Product-code directories, in report order: `src`, then every package under
|
|
23
|
+
* `packages/` that has a `src`.
|
|
24
|
+
*
|
|
25
|
+
* Derived from the rule rather than enumerated, because `.husky/lint-scope.mjs` says a
|
|
26
|
+
* new `packages/<anything>/src` joins the enforced scope BY EXISTING. The first version
|
|
27
|
+
* of this list spelled it `['src', 'packages/peaks-loop-mut/src']`, which was the second
|
|
28
|
+
* definition of "product code" this file's header claims not to be: the ratchet measures
|
|
29
|
+
* 953 files and the worklist read 926, so 14 gated narrative rows lived in three
|
|
30
|
+
* packages no `peaks comments audit` would show and no `prune` could clear.
|
|
31
|
+
*/
|
|
32
|
+
export function commentScanScope(projectRoot) {
|
|
33
|
+
const packagesDir = join(projectRoot, 'packages');
|
|
34
|
+
if (!existsSync(packagesDir))
|
|
35
|
+
return ['src'];
|
|
36
|
+
const names = readdirSync(packagesDir, { withFileTypes: true })
|
|
37
|
+
.filter((entry) => entry.isDirectory() && existsSync(join(packagesDir, entry.name, 'src')))
|
|
38
|
+
.map((entry) => entry.name)
|
|
39
|
+
.sort();
|
|
40
|
+
return ['src', ...names.map((name) => join('packages', name, 'src'))];
|
|
41
|
+
}
|
|
42
|
+
const SOURCE_SUFFIXES = ['.ts', '.tsx', '.mts', '.cts'];
|
|
43
|
+
function isSourceFile(name) {
|
|
44
|
+
return SOURCE_SUFFIXES.some((suffix) => name.endsWith(suffix));
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Every source file under one scope dir, repo-relative, sorted.
|
|
48
|
+
*
|
|
49
|
+
* The relative form is not cosmetic: `citationResolves` tries a citation with no
|
|
50
|
+
* repo anchor against the citing file's own directory and its ancestors, so an
|
|
51
|
+
* absolute path here turns every sibling reference into a false "missing file".
|
|
52
|
+
* `relative()` + separator normalisation is what keeps that resolution honest on
|
|
53
|
+
* a Windows host.
|
|
54
|
+
*/
|
|
55
|
+
export function scopeFiles(projectRoot, scopeDir) {
|
|
56
|
+
const root = resolve(projectRoot, scopeDir);
|
|
57
|
+
const base = resolve(projectRoot);
|
|
58
|
+
if (!existsSync(root))
|
|
59
|
+
return [];
|
|
60
|
+
const out = [];
|
|
61
|
+
const walk = (absDir) => {
|
|
62
|
+
for (const entry of readdirSync(absDir, { withFileTypes: true })) {
|
|
63
|
+
const abs = join(absDir, entry.name);
|
|
64
|
+
if (entry.isDirectory()) {
|
|
65
|
+
walk(abs);
|
|
66
|
+
}
|
|
67
|
+
else if (isSourceFile(entry.name)) {
|
|
68
|
+
out.push(relative(base, abs).replace(/\\/g, '/'));
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
walk(root);
|
|
73
|
+
return out.sort();
|
|
74
|
+
}
|
|
75
|
+
function totalOf(files, key) {
|
|
76
|
+
return files.reduce((sum, file) => sum + file[key], 0);
|
|
77
|
+
}
|
|
78
|
+
/** Scan the enforced scope. Synchronous by design: it is a CLI read path. */
|
|
79
|
+
export function auditComments(options) {
|
|
80
|
+
const { projectRoot } = options;
|
|
81
|
+
const exists = createRepoProbe(projectRoot);
|
|
82
|
+
const installed = createFsProbe(projectRoot);
|
|
83
|
+
const kinds = options.kind === undefined ? undefined : [options.kind];
|
|
84
|
+
const population = options.files ?? scopePopulation(projectRoot);
|
|
85
|
+
const findings = [];
|
|
86
|
+
const summaries = [];
|
|
87
|
+
// Files actually READ, not files handed in. A tracked path the disk no longer
|
|
88
|
+
// carries has to show up as `scanned < asked`, which is how a leg refuses instead
|
|
89
|
+
// of printing a count measured over a population nobody agreed to.
|
|
90
|
+
let scanned = 0;
|
|
91
|
+
for (const file of population) {
|
|
92
|
+
if (!existsSync(resolve(projectRoot, file)))
|
|
93
|
+
continue;
|
|
94
|
+
scanned += 1;
|
|
95
|
+
const source = readFileSync(resolve(projectRoot, file), 'utf8');
|
|
96
|
+
const input = { file, source };
|
|
97
|
+
const found = scanComments(input, {
|
|
98
|
+
exists,
|
|
99
|
+
installed,
|
|
100
|
+
...(kinds === undefined ? {} : { kinds })
|
|
101
|
+
});
|
|
102
|
+
if (found.length === 0)
|
|
103
|
+
continue;
|
|
104
|
+
summaries.push(summarize(input, found));
|
|
105
|
+
findings.push(...found);
|
|
106
|
+
}
|
|
107
|
+
const capped = options.limit === undefined ? findings : findings.slice(0, options.limit);
|
|
108
|
+
return {
|
|
109
|
+
scannedFiles: scanned,
|
|
110
|
+
askedFiles: population.length,
|
|
111
|
+
commentLines: summaries.reduce((n, file) => n + file.commentLines, 0),
|
|
112
|
+
deadReferences: totalOf(summaries, 'deadReferences'),
|
|
113
|
+
narrative: totalOf(summaries, 'narrative'),
|
|
114
|
+
files: summaries.sort((a, b) => b.deadReferences + b.narrative - (a.deadReferences + a.narrative)),
|
|
115
|
+
findings: capped
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
/** The walked population, used only when a caller did not hand an explicit list. */
|
|
119
|
+
function scopePopulation(projectRoot) {
|
|
120
|
+
return commentScanScope(projectRoot).flatMap((scopeDir) => scopeFiles(projectRoot, scopeDir));
|
|
121
|
+
}
|