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,196 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Remove the comments the scan says are debt — and prove nothing else moved.
|
|
3
|
+
*
|
|
4
|
+
* The actuator is the dangerous half of this feature: a classifier that is 86%
|
|
5
|
+
* precise only misinforms, but a pruner that is 86% precise deletes. So the
|
|
6
|
+
* deliverable here is not the deletion, it is the PROOF, and the proof is a
|
|
7
|
+
* structural check run on every file before it is written:
|
|
8
|
+
*
|
|
9
|
+
* - the diff is computed line-by-line against the plan, so a changed line that
|
|
10
|
+
* the scan never named is a violation, not a surprise;
|
|
11
|
+
* - every removed line must be a comment line, and a stripped trailing comment
|
|
12
|
+
* must leave its code byte-identical;
|
|
13
|
+
* - a line that carries a block-comment delimiter opening or closing ELSEWHERE
|
|
14
|
+
* is never removed, because deleting it would turn the rest of the comment into
|
|
15
|
+
* code — the one failure mode that makes this a compile error rather than a
|
|
16
|
+
* lost sentence;
|
|
17
|
+
* - a file whose line endings are mixed is left alone, since re-joining it would
|
|
18
|
+
* rewrite every line and the proof would stop meaning anything.
|
|
19
|
+
*
|
|
20
|
+
* Anything that fails the check is reported and NOT written. The ledger records
|
|
21
|
+
* every line removed, with the rule that fired, so a prune is reviewable after the
|
|
22
|
+
* fact instead of only before it.
|
|
23
|
+
*/
|
|
24
|
+
import { mkdirSync, writeFileSync } from 'node:fs';
|
|
25
|
+
import { join } from 'node:path';
|
|
26
|
+
import { getSessionDir } from '../session/getSessionDir.js';
|
|
27
|
+
import { getSessionId } from '../session/session-manager.js';
|
|
28
|
+
import { auditComments } from './comment-audit.js';
|
|
29
|
+
import { commentLines } from './comment-citations.js';
|
|
30
|
+
import { actionsByFile, executePlan, readFileSafe, splitLines } from './prune-apply.js';
|
|
31
|
+
const FULL_LINE_PREFIXES = ['//', '/*', '/**', '*'];
|
|
32
|
+
function isFullLineComment(text) {
|
|
33
|
+
const trimmed = text.trim();
|
|
34
|
+
return FULL_LINE_PREFIXES.some((prefix) => trimmed.startsWith(prefix));
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Can this line be deleted without breaking the syntax around it?
|
|
38
|
+
*
|
|
39
|
+
* A line that OPENS a block (`/* …` with no close on the same line) or CLOSES one
|
|
40
|
+
* (a bare `* /`) is load-bearing for the comment's extent, not for its prose.
|
|
41
|
+
* Removing it leaves the remainder of the block as code — a compile error is the
|
|
42
|
+
* mildest thing that follows. Checked for both modes, because the strip below also
|
|
43
|
+
* cuts text out of a line: a code line carrying an unterminated `/*` would have its
|
|
44
|
+
* "trailing comment" extracted from inside the block, and cutting there is a syntax
|
|
45
|
+
* edit, not a comment edit.
|
|
46
|
+
*/
|
|
47
|
+
function removalWouldBreakTheComment(text) {
|
|
48
|
+
const opens = text.includes('/*');
|
|
49
|
+
const closes = text.includes('*/');
|
|
50
|
+
return opens !== closes;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Does this line end BEFORE its text does?
|
|
54
|
+
*
|
|
55
|
+
* Two structural signals: an ODD number of backticks (the inline-code span this line opens
|
|
56
|
+
* is closed on a line BELOW) and a trailing `-` that is not `--` (a token the line width
|
|
57
|
+
* wrapped in half). They mean the same thing — the construct this line belongs to continues
|
|
58
|
+
* under it — and a line-at-a-time prune cuts that construct in half.
|
|
59
|
+
*
|
|
60
|
+
* Two applies of this pruner did exactly that to the same kind of text: a
|
|
61
|
+
* `.peaks/memory` citation written across two comment lines, where the FIRST line was debt
|
|
62
|
+
* and the second was not. Each left the survivor reading like
|
|
63
|
+
* ` * visibility-issue.md; well below the stale threshold.` — a sentence with its front cut
|
|
64
|
+
* off, which is worse than the debt that was removed. And the citation is destroyed either
|
|
65
|
+
* way: `citedMemories` in `../feedback/promotion-source-comments.ts` matches a path in ONE
|
|
66
|
+
* run of `[A-Za-z0-9._-]`, so a path that needs two lines is invisible to it before the cut
|
|
67
|
+
* and gone after it. Refused rather than guessed, the way the block delimiter is: the
|
|
68
|
+
* worklist still shows the row, and a human decides where the line break goes.
|
|
69
|
+
*/
|
|
70
|
+
function continuesIntoTheNextLine(comment) {
|
|
71
|
+
const trimmed = comment.trimEnd();
|
|
72
|
+
if ((trimmed.match(/`/g) ?? []).length % 2 === 1)
|
|
73
|
+
return true;
|
|
74
|
+
return trimmed.endsWith('-') && !trimmed.endsWith('--');
|
|
75
|
+
}
|
|
76
|
+
function actionFor(finding, text, comment) {
|
|
77
|
+
return {
|
|
78
|
+
file: finding.file,
|
|
79
|
+
line: finding.line,
|
|
80
|
+
kind: finding.kind,
|
|
81
|
+
matched: finding.matched,
|
|
82
|
+
mode: isFullLineComment(text) ? 'drop-line' : 'strip-trailing',
|
|
83
|
+
lineText: text,
|
|
84
|
+
comment
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
function skipFor(finding, reason) {
|
|
88
|
+
return { file: finding.file, line: finding.line, reason, text: finding.text };
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Decide the fate of every finding.
|
|
92
|
+
*
|
|
93
|
+
* The line is re-read here and passed back through `commentLines`, the scan's own
|
|
94
|
+
* extractor, rather than compared against the whole line: a trailing comment's
|
|
95
|
+
* recorded text is the comment, not the code before it, and an equality test on the
|
|
96
|
+
* raw line would reject every one of them. Re-using the extractor is what makes the
|
|
97
|
+
* plan and the scan agree BY CONSTRUCTION instead of by two copies of a rule — the
|
|
98
|
+
* defect class this whole feature is a reply to.
|
|
99
|
+
*/
|
|
100
|
+
export function planPrune(options, findings) {
|
|
101
|
+
const actions = [];
|
|
102
|
+
const skips = [];
|
|
103
|
+
// One extractor run per FILE, keyed by path. `commentLines` is contextual now — it has
|
|
104
|
+
// not a comment at all — so asking it about a single line would skip every one of those
|
|
105
|
+
// findings. The old code could get away with it because the line-local heuristic agreed
|
|
106
|
+
// with itself by construction, which is not the same as being right.
|
|
107
|
+
const byFile = new Map();
|
|
108
|
+
const viewFor = (file) => {
|
|
109
|
+
const known = byFile.get(file);
|
|
110
|
+
if (known !== undefined)
|
|
111
|
+
return known;
|
|
112
|
+
const source = readFileSafe(options.projectRoot, file);
|
|
113
|
+
if (source === null)
|
|
114
|
+
return null;
|
|
115
|
+
const split = splitLines(source);
|
|
116
|
+
const comments = new Map();
|
|
117
|
+
for (const entry of commentLines(source))
|
|
118
|
+
comments.set(entry.line, entry.text);
|
|
119
|
+
const view = { lines: split.lines, comments };
|
|
120
|
+
byFile.set(file, view);
|
|
121
|
+
return view;
|
|
122
|
+
};
|
|
123
|
+
for (const finding of findings) {
|
|
124
|
+
const view = viewFor(finding.file);
|
|
125
|
+
if (view === null) {
|
|
126
|
+
skips.push(skipFor(finding, 'file-not-readable'));
|
|
127
|
+
continue;
|
|
128
|
+
}
|
|
129
|
+
const text = view.lines[finding.line - 1] ?? '';
|
|
130
|
+
const comment = view.comments.get(finding.line) ?? '';
|
|
131
|
+
if (comment.trim() !== finding.text) {
|
|
132
|
+
skips.push(skipFor(finding, 'line-moved-since-scan'));
|
|
133
|
+
continue;
|
|
134
|
+
}
|
|
135
|
+
if (removalWouldBreakTheComment(text)) {
|
|
136
|
+
skips.push(skipFor(finding, 'carries-a-block-delimiter'));
|
|
137
|
+
continue;
|
|
138
|
+
}
|
|
139
|
+
if (continuesIntoTheNextLine(comment)) {
|
|
140
|
+
skips.push(skipFor(finding, 'continues-into-the-next-line'));
|
|
141
|
+
continue;
|
|
142
|
+
}
|
|
143
|
+
actions.push(actionFor(finding, text, comment));
|
|
144
|
+
}
|
|
145
|
+
return { actions, skips };
|
|
146
|
+
}
|
|
147
|
+
function ledgerPathFor(projectRoot, stamp) {
|
|
148
|
+
const sessionId = getSessionId(projectRoot) ?? '_nonsession';
|
|
149
|
+
const dir = join(getSessionDir(projectRoot, sessionId), 'comments');
|
|
150
|
+
mkdirSync(dir, { recursive: true });
|
|
151
|
+
return join(dir, `prune-${stamp}.json`);
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Plan, prove, and (on `apply`) write.
|
|
155
|
+
*
|
|
156
|
+
* The scan runs through `auditComments`, so a pruned line is one the worklist
|
|
157
|
+
* already showed a human; the pruner adds no rule of its own about what counts as
|
|
158
|
+
* debt.
|
|
159
|
+
*/
|
|
160
|
+
export function pruneComments(options) {
|
|
161
|
+
const kinds = options.kinds ?? ['dead-reference', 'narrative'];
|
|
162
|
+
const audit = auditComments({ projectRoot: options.projectRoot });
|
|
163
|
+
const inScope = audit.findings.filter((finding) => kinds.includes(finding.kind) &&
|
|
164
|
+
(options.onlyFile === undefined || finding.file === options.onlyFile));
|
|
165
|
+
const { actions, skips } = planPrune(options, inScope);
|
|
166
|
+
const stamp = new Date().toISOString().replace(/[:.]/g, '-');
|
|
167
|
+
const ledgerPath = ledgerPathFor(options.projectRoot, stamp);
|
|
168
|
+
const outcome = executePlan(options.projectRoot, actionsByFile(actions), options.apply === true);
|
|
169
|
+
const skipsAll = [...skips, ...outcome.fileSkips];
|
|
170
|
+
// Written on a dry run too: the plan IS the reviewable artifact, and a reviewer
|
|
171
|
+
// who only sees stdout has nothing to diff a later apply against.
|
|
172
|
+
writeFileSync(ledgerPath, `${JSON.stringify({
|
|
173
|
+
projectRoot: options.projectRoot,
|
|
174
|
+
at: new Date().toISOString(),
|
|
175
|
+
applied: options.apply === true,
|
|
176
|
+
kinds,
|
|
177
|
+
onlyFile: options.onlyFile ?? null,
|
|
178
|
+
removed: actions,
|
|
179
|
+
skipped: skipsAll,
|
|
180
|
+
touchedFiles: outcome.touched,
|
|
181
|
+
notWritten: outcome.notWritten
|
|
182
|
+
}, null, 2)}\n`);
|
|
183
|
+
return {
|
|
184
|
+
scannedFiles: audit.scannedFiles,
|
|
185
|
+
planned: actions.length,
|
|
186
|
+
dropped: actions.filter((action) => action.mode === 'drop-line').length,
|
|
187
|
+
stripped: actions.filter((action) => action.mode === 'strip-trailing').length,
|
|
188
|
+
skipped: skipsAll.length,
|
|
189
|
+
touchedFiles: outcome.touched,
|
|
190
|
+
notWritten: outcome.notWritten,
|
|
191
|
+
ledgerPath,
|
|
192
|
+
actions,
|
|
193
|
+
skips: skipsAll,
|
|
194
|
+
applied: options.apply === true
|
|
195
|
+
};
|
|
196
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/** One comment in the file, in character offsets and in the lines it covers. */
|
|
2
|
+
export type CommentSpan = {
|
|
3
|
+
/** Index of the slash that opens it. */
|
|
4
|
+
start: number;
|
|
5
|
+
/** One past the comment's last character, its closing delimiter included. */
|
|
6
|
+
end: number;
|
|
7
|
+
/** 1-based line the comment opens on. */
|
|
8
|
+
line: number;
|
|
9
|
+
/** 1-based line the comment ends on — equal to `line` unless it is a block comment. */
|
|
10
|
+
endLine: number;
|
|
11
|
+
/** The comment's own text, opening marker included. */
|
|
12
|
+
text: string;
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Every comment in `source`, in order.
|
|
16
|
+
*
|
|
17
|
+
* `text` is sliced from the original so a caller can cut at `start` and keep the code
|
|
18
|
+
* that was already there — which is the operation the pruner must get exactly right.
|
|
19
|
+
*/
|
|
20
|
+
export declare function commentSpans(source: string): CommentSpan[];
|
|
21
|
+
/**
|
|
22
|
+
* Does this code stop INSIDE something open?
|
|
23
|
+
*
|
|
24
|
+
* The question the comment-only proof had to learn to ask. `original.startsWith(kept)` is
|
|
25
|
+
* true of EVERY truncation, so it cannot tell a revealed comment from a string cut in
|
|
26
|
+
* half; a prefix that ends inside a quote, a template or a regex is a different program,
|
|
27
|
+
* whatever it starts with. This is what would have refused the write that left
|
|
28
|
+
* `snippet: \`` in `src/`.
|
|
29
|
+
*/
|
|
30
|
+
export declare function endsInsideLiteral(code: string): boolean;
|
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
// src/services/comments/comment-spans.ts
|
|
2
|
+
//
|
|
3
|
+
// WHERE THE COMMENTS ACTUALLY ARE, read from the text the way a lexer reads it.
|
|
4
|
+
//
|
|
5
|
+
// version of this reader was line-local: a line was a comment if it began with `//`, a
|
|
6
|
+
// block opener, or `*`, and a code line's trailing comment was `raw.indexOf('//')`
|
|
7
|
+
// guarded by a quote-count parity check. Applying the pruner to the real tree then wrote
|
|
8
|
+
// a corrupted file. `feedback-promotion-service.ts` holds a one-line template literal
|
|
9
|
+
// whose CONTENT starts with a double slash — it is a snippet the CLI prints for users:
|
|
10
|
+
//
|
|
11
|
+
// snippet: `// src/services/code/mode-gate.ts\n// 1. Add to HardFloorCategory union…`,
|
|
12
|
+
//
|
|
13
|
+
// The reader saw code + trailing comment, the pruner cut at the first double slash, and
|
|
14
|
+
// the result was an unterminated template literal committed into `src/`. The quote parity
|
|
15
|
+
// guard could not have caught it: the text before the cut contains NO quotes at all, so
|
|
16
|
+
// its count is even, and "even" looked safe. Parity of a count is not the same as knowing
|
|
17
|
+
// what character you are inside of.
|
|
18
|
+
//
|
|
19
|
+
// So this walks the file as ONE stream with an explicit notion of where it is: code, a
|
|
20
|
+
// single- or double-quoted string, a template literal (whose `${ … }` re-enters code, so
|
|
21
|
+
// a nested template, or a real comment, inside an interpolation follows the same rules),
|
|
22
|
+
// a regex literal, a line comment, or a block comment.
|
|
23
|
+
//
|
|
24
|
+
// REGEX IS NOT OPTIONAL DETAIL, and finding that out is why this file is bigger than the
|
|
25
|
+
// bug it fixes. `/https?:\/\//g` — a shape this repository has a hundred files of —
|
|
26
|
+
// carries a real adjacent pair of slashes, made of an escaped one next to the closing
|
|
27
|
+
// delimiter. A stream that does not know it is inside a regex reads that pair as a
|
|
28
|
+
// comment and would cut code through it: the same accident as the template literal above,
|
|
29
|
+
// reached from a different direction. Whether a `/` opens a regex or divides is decided by
|
|
30
|
+
// what could end a value before it, which is the standard test; a word is only a value if
|
|
31
|
+
// it is not `return`/`typeof`/`case`/…, because `return /x/` is the one place the naive
|
|
32
|
+
// version of that test is wrong.
|
|
33
|
+
//
|
|
34
|
+
// ONE MACHINE, TWO QUESTIONS. `commentSpans` asks "where are the comments";
|
|
35
|
+
// `endsInsideLiteral` asks "does this text stop inside something open". Both run the same
|
|
36
|
+
// walk below, because two copies of a state machine is the defect class this repository
|
|
37
|
+
// files most often — and the second question is the one the prune proof had to learn to
|
|
38
|
+
// ask: `startsWith` is true of every truncation, so it cannot tell a revealed comment
|
|
39
|
+
// from a string cut in half.
|
|
40
|
+
//
|
|
41
|
+
// A HANDLER PER REGION, not one function of nested ifs: the first working version was a
|
|
42
|
+
// 126-line loop that both `max-lines-per-function` and `complexity` refused, and they were
|
|
43
|
+
// right — `HANDLERS` below is the state diagram, where a single else-chain was not.
|
|
44
|
+
//
|
|
45
|
+
// NOT A PARSER, AND DELIBERATELY SO: `typescript` is a devDependency, so product code
|
|
46
|
+
// cannot import it without handing the shipped CLI a runtime dependency. The parity
|
|
47
|
+
// between this walk and the real TypeScript lexer is asserted in
|
|
48
|
+
// `tests/unit/comments/comment-scan-parity.test.ts`, which MAY use `ts` — the check lives
|
|
49
|
+
// where the dependency already is, instead of the dependency following the check into
|
|
50
|
+
// every user's `node_modules`.
|
|
51
|
+
/**
|
|
52
|
+
* Words after which a `/` is a regex, not division. `return /x/` is the case that makes
|
|
53
|
+
* "an identifier ends a value" wrong often enough to matter.
|
|
54
|
+
*/
|
|
55
|
+
const VALUE_ENDING_BEFORE_REGEX = /^(?:return|typeof|instanceof|in|of|new|delete|void|throw|case|do|else|yield|await)$/;
|
|
56
|
+
const char = (w, offset = 0) => w.source.charAt(w.at + offset);
|
|
57
|
+
/** Report the comment that opened at `spanStart`. */
|
|
58
|
+
function emitSpan(w, end, endLine) {
|
|
59
|
+
w.emit({
|
|
60
|
+
start: w.spanStart,
|
|
61
|
+
end,
|
|
62
|
+
line: w.spanLine,
|
|
63
|
+
endLine,
|
|
64
|
+
text: w.source.slice(w.spanStart, end)
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
/** A finished word: only a non-keyword one can end a value. */
|
|
68
|
+
function endWord(w) {
|
|
69
|
+
if (w.word === '')
|
|
70
|
+
return;
|
|
71
|
+
w.afterValue = !VALUE_ENDING_BEFORE_REGEX.test(w.word);
|
|
72
|
+
w.word = '';
|
|
73
|
+
}
|
|
74
|
+
function inLineComment(w) {
|
|
75
|
+
if (char(w) !== '\n')
|
|
76
|
+
return;
|
|
77
|
+
emitSpan(w, w.at, w.line - 1);
|
|
78
|
+
w.region = 'code';
|
|
79
|
+
w.afterValue = false;
|
|
80
|
+
}
|
|
81
|
+
function inBlockComment(w) {
|
|
82
|
+
if (char(w) !== '*' || char(w, 1) !== '/')
|
|
83
|
+
return;
|
|
84
|
+
emitSpan(w, w.at + 2, w.line);
|
|
85
|
+
w.at += 1;
|
|
86
|
+
w.region = 'code';
|
|
87
|
+
w.afterValue = false;
|
|
88
|
+
}
|
|
89
|
+
function inString(w) {
|
|
90
|
+
const c = char(w);
|
|
91
|
+
if (c === '\\')
|
|
92
|
+
w.at += 1;
|
|
93
|
+
else if (c === (w.region === 'single' ? "'" : '"')) {
|
|
94
|
+
w.region = 'code';
|
|
95
|
+
w.afterValue = true;
|
|
96
|
+
}
|
|
97
|
+
else if (c === '\n') {
|
|
98
|
+
// An unterminated string cannot survive to a newline in valid source. Resuming as
|
|
99
|
+
// code keeps one stray quote from deciding that the rest of the FILE is a string,
|
|
100
|
+
// which is the failure mode that turns every later comment invisible.
|
|
101
|
+
w.region = 'code';
|
|
102
|
+
w.afterValue = false;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
function inTemplate(w) {
|
|
106
|
+
const c = char(w);
|
|
107
|
+
if (c === '\\')
|
|
108
|
+
w.at += 1;
|
|
109
|
+
else if (c === '`') {
|
|
110
|
+
w.region = 'code';
|
|
111
|
+
w.afterValue = true;
|
|
112
|
+
}
|
|
113
|
+
else if (c === '$' && char(w, 1) === '{') {
|
|
114
|
+
w.interpolations.push(w.at);
|
|
115
|
+
w.at += 1;
|
|
116
|
+
w.region = 'code';
|
|
117
|
+
w.afterValue = false;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
/** A regex, or the inside of its `[…]` class where `/` is an ordinary character. */
|
|
121
|
+
function inRegex(w) {
|
|
122
|
+
const c = char(w);
|
|
123
|
+
if (c === '\\')
|
|
124
|
+
w.at += 1;
|
|
125
|
+
else if (c === '[')
|
|
126
|
+
w.region = 'class';
|
|
127
|
+
else if (c === ']' && w.region === 'class')
|
|
128
|
+
w.region = 'regex';
|
|
129
|
+
else if (c === '/' && w.region === 'regex') {
|
|
130
|
+
w.region = 'code';
|
|
131
|
+
w.afterValue = true;
|
|
132
|
+
}
|
|
133
|
+
else if (c === '\n') {
|
|
134
|
+
// No regex crosses a line, so a newline means the `/` was division after all.
|
|
135
|
+
w.region = 'code';
|
|
136
|
+
w.afterValue = false;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
/** A `}` in code: it closes the innermost open `${`, and only that one. */
|
|
140
|
+
function closeInterpolation(w) {
|
|
141
|
+
w.afterValue = true;
|
|
142
|
+
if (w.interpolations.length === 0)
|
|
143
|
+
return;
|
|
144
|
+
w.interpolations.pop();
|
|
145
|
+
w.region = 'template';
|
|
146
|
+
}
|
|
147
|
+
/** Enter a string or template region, or report that this character starts none. */
|
|
148
|
+
function enterLiteral(w, c) {
|
|
149
|
+
if (c !== "'" && c !== '"' && c !== '`')
|
|
150
|
+
return false;
|
|
151
|
+
w.region = c === "'" ? 'single' : c === '"' ? 'double' : 'template';
|
|
152
|
+
w.afterValue = false;
|
|
153
|
+
return true;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* A slash in code. A comment opens on `//` or a block opener; a lone slash is a regex
|
|
157
|
+
* exactly where a value cannot have just ended, and division everywhere else.
|
|
158
|
+
*/
|
|
159
|
+
function readSlash(w, next) {
|
|
160
|
+
if (next === '/' || next === '*') {
|
|
161
|
+
w.region = next === '/' ? 'line' : 'block';
|
|
162
|
+
w.spanStart = w.at;
|
|
163
|
+
w.spanLine = w.line;
|
|
164
|
+
w.afterValue = false;
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
w.region = w.afterValue ? 'code' : 'regex';
|
|
168
|
+
w.afterValue = false;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* What each bracket says about "has a value just ended": an opener means the next slash
|
|
172
|
+
* cannot be division, a closer means it can. A table so `inCode` stays a reader's size.
|
|
173
|
+
*/
|
|
174
|
+
const BRACKET_ENDS_VALUE = {
|
|
175
|
+
'(': false,
|
|
176
|
+
'[': false,
|
|
177
|
+
')': true,
|
|
178
|
+
']': true
|
|
179
|
+
};
|
|
180
|
+
function inCode(w) {
|
|
181
|
+
const c = char(w);
|
|
182
|
+
if (/[A-Za-z0-9_$]/.test(c)) {
|
|
183
|
+
w.word += c;
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
endWord(w);
|
|
187
|
+
if (enterLiteral(w, c))
|
|
188
|
+
return;
|
|
189
|
+
if (c === '{')
|
|
190
|
+
w.afterValue = false;
|
|
191
|
+
else if (c === '}')
|
|
192
|
+
closeInterpolation(w);
|
|
193
|
+
else if (c in BRACKET_ENDS_VALUE)
|
|
194
|
+
w.afterValue = BRACKET_ENDS_VALUE[c] ?? false;
|
|
195
|
+
else if (c === '/')
|
|
196
|
+
readSlash(w, char(w, 1));
|
|
197
|
+
else if (!/\s/.test(c))
|
|
198
|
+
w.afterValue = false;
|
|
199
|
+
}
|
|
200
|
+
/** One handler per state. THIS TABLE IS THE STATE DIAGRAM — read the regions off it. */
|
|
201
|
+
const HANDLERS = {
|
|
202
|
+
code: inCode,
|
|
203
|
+
single: inString,
|
|
204
|
+
double: inString,
|
|
205
|
+
template: inTemplate,
|
|
206
|
+
regex: inRegex,
|
|
207
|
+
class: inRegex,
|
|
208
|
+
line: inLineComment,
|
|
209
|
+
block: inBlockComment
|
|
210
|
+
};
|
|
211
|
+
/**
|
|
212
|
+
* Walk `source`, report every comment, and return the region the text ENDED in.
|
|
213
|
+
*
|
|
214
|
+
* The return value is what makes `endsInsideLiteral` possible without a second machine: a
|
|
215
|
+
* caller that truncated some text wants to know whether the survivor is complete.
|
|
216
|
+
*/
|
|
217
|
+
function walkCode(source, onComment) {
|
|
218
|
+
const w = {
|
|
219
|
+
source,
|
|
220
|
+
at: 0,
|
|
221
|
+
line: 1,
|
|
222
|
+
region: 'code',
|
|
223
|
+
afterValue: false,
|
|
224
|
+
word: '',
|
|
225
|
+
interpolations: [],
|
|
226
|
+
spanStart: 0,
|
|
227
|
+
spanLine: 1,
|
|
228
|
+
emit: onComment
|
|
229
|
+
};
|
|
230
|
+
while (w.at < source.length) {
|
|
231
|
+
// Counted BEFORE dispatch, so a line comment closing on a newline reports the line
|
|
232
|
+
// it was written on, not the one after it. A handler that consumes a second character
|
|
233
|
+
// (an escape, a `*/`) advances `at` itself and the driver's step lands past it.
|
|
234
|
+
if (source.charAt(w.at) === '\n')
|
|
235
|
+
w.line += 1;
|
|
236
|
+
HANDLERS[w.region](w);
|
|
237
|
+
w.at += 1;
|
|
238
|
+
}
|
|
239
|
+
endWord(w);
|
|
240
|
+
if (w.region === 'block' || w.region === 'line')
|
|
241
|
+
emitSpan(w, source.length, w.line);
|
|
242
|
+
return w.region;
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Every comment in `source`, in order.
|
|
246
|
+
*
|
|
247
|
+
* `text` is sliced from the original so a caller can cut at `start` and keep the code
|
|
248
|
+
* that was already there — which is the operation the pruner must get exactly right.
|
|
249
|
+
*/
|
|
250
|
+
export function commentSpans(source) {
|
|
251
|
+
const spans = [];
|
|
252
|
+
walkCode(source, (span) => spans.push(span));
|
|
253
|
+
return spans;
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Does this code stop INSIDE something open?
|
|
257
|
+
*
|
|
258
|
+
* The question the comment-only proof had to learn to ask. `original.startsWith(kept)` is
|
|
259
|
+
* true of EVERY truncation, so it cannot tell a revealed comment from a string cut in
|
|
260
|
+
* half; a prefix that ends inside a quote, a template or a regex is a different program,
|
|
261
|
+
* whatever it starts with. This is what would have refused the write that left
|
|
262
|
+
* `snippet: \`` in `src/`.
|
|
263
|
+
*/
|
|
264
|
+
export function endsInsideLiteral(code) {
|
|
265
|
+
return walkCode(code, () => { }) !== 'code';
|
|
266
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The line mechanics of a comment prune, and the proof that gates every write.
|
|
3
|
+
*
|
|
4
|
+
* Split from `comment-prune.ts` because the two change for different reasons: that
|
|
5
|
+
* module decides WHAT is debt (and follows the classifier), this one decides how a
|
|
6
|
+
* line is removed from a file without damaging the file (and follows the language).
|
|
7
|
+
* Keeping them apart is also what lets the proof be tested on a text array, with no
|
|
8
|
+
* filesystem and no scan in the room.
|
|
9
|
+
*/
|
|
10
|
+
import type { PruneAction, PruneSkip } from './comment-prune.js';
|
|
11
|
+
/** What the write phase decided, per file. */
|
|
12
|
+
export type WriteOutcome = {
|
|
13
|
+
touched: string[];
|
|
14
|
+
notWritten: string[];
|
|
15
|
+
fileSkips: PruneSkip[];
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Read a file, or report that it is not there — a prune never creates one.
|
|
19
|
+
*
|
|
20
|
+
* `existsSync` first, and NO catch: a `catch { return null }` answers "present but
|
|
21
|
+
* unreadable" (permissions, a locked handle, a directory named as a file) with the same
|
|
22
|
+
* `null` as "absent", and that conflation is the defect this repository already
|
|
23
|
+
* ratchets under `silentWarningCatchReturnNull` — this very helper was counted by it.
|
|
24
|
+
* An absent path is a state the caller handles; an unreadable one should be a crash an
|
|
25
|
+
* operator sees.
|
|
26
|
+
*/
|
|
27
|
+
export declare function readFileSafe(root: string, rel: string): string | null;
|
|
28
|
+
/**
|
|
29
|
+
* Split a source into lines, remembering what separated them.
|
|
30
|
+
*
|
|
31
|
+
* `mixed` is the signal to leave a file alone rather than a detail to paper over: a
|
|
32
|
+
* file with both CRLF and LF endings cannot be re-joined from one delimiter without
|
|
33
|
+
* rewriting every line, and a rewrite of every line is not a comment edit — it would
|
|
34
|
+
* also make the proof below vacuous, because all the lines would differ.
|
|
35
|
+
*/
|
|
36
|
+
export declare function splitLines(source: string): {
|
|
37
|
+
lines: string[];
|
|
38
|
+
eol: string;
|
|
39
|
+
mixed: boolean;
|
|
40
|
+
};
|
|
41
|
+
/** Group a plan by file, in first-seen order. */
|
|
42
|
+
export declare function actionsByFile(actions: readonly PruneAction[]): Map<string, PruneAction[]>;
|
|
43
|
+
/**
|
|
44
|
+
* The proof, as data: compare kept lines against the original.
|
|
45
|
+
*
|
|
46
|
+
* One string per violation; empty means every difference between the two texts is a
|
|
47
|
+
* line this plan named, and every line it named that was kept is byte-identical to
|
|
48
|
+
* what was there before. This is computed whether or not the caller intends to write,
|
|
49
|
+
* so a dry run reports the refusals a real run would hit.
|
|
50
|
+
*/
|
|
51
|
+
export declare function proofViolations(before: readonly string[], after: readonly string[], actions: readonly PruneAction[]): string[];
|
|
52
|
+
/**
|
|
53
|
+
* The blank lines a set of drops ORPHANS.
|
|
54
|
+
*
|
|
55
|
+
* A comment standing alone between two blanks is the only thing separating two blocks:
|
|
56
|
+
*
|
|
57
|
+
* }
|
|
58
|
+
* ← blank
|
|
59
|
+
* ← blank
|
|
60
|
+
* type AuditEnvelopeGuard<T> = …
|
|
61
|
+
*
|
|
62
|
+
* Deleting the comment joins the two blanks into a double blank, which is not what the
|
|
63
|
+
* file said before and not what any formatter will keep. So the drop owns that blank line
|
|
64
|
+
* — it is the residue of a comment removal, not an edit of someone's whitespace. Only a
|
|
65
|
+
* blank that becomes adjacent to another blank THROUGH a drop is claimed here: a double
|
|
66
|
+
* blank the repository already carries is left exactly where it is, because the pruner did
|
|
67
|
+
* not make it and has no business "fixing" it.
|
|
68
|
+
*
|
|
69
|
+
* ONE HELPER, BOTH CALLERS: `pruneFileLines` removes these and `proofViolations` allows
|
|
70
|
+
* them. A second copy of this rule is the defect class this whole feature answers, so the
|
|
71
|
+
* writer and the checker ask the same function the same question.
|
|
72
|
+
*/
|
|
73
|
+
export declare function orphanedBlanks(before: readonly string[], dropped: ReadonlySet<number>): Set<number>;
|
|
74
|
+
/** Apply one file's actions to its lines, in the plan's own terms. */
|
|
75
|
+
export declare function pruneFileLines(lines: readonly string[], actions: readonly PruneAction[]): string[];
|
|
76
|
+
/**
|
|
77
|
+
* Run the proof on every planned file, and write only the files that passed it.
|
|
78
|
+
*
|
|
79
|
+
* A file that fails is reported and left alone — never written "mostly", because a
|
|
80
|
+
* partially-pruned file is exactly the state the proof exists to make unreachable.
|
|
81
|
+
*/
|
|
82
|
+
export declare function executePlan(projectRoot: string, byFile: Map<string, PruneAction[]>, apply: boolean): WriteOutcome;
|