pi-lens 4.3.0 → 4.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1064 -0
- package/README.md +115 -25
- package/config/dependency-cruiser-eager-allowlist.json +6 -2
- package/dist/chunk-22AVIGXS.js +560 -0
- package/dist/chunk-27BBHSZC.js +106 -0
- package/dist/chunk-2BEMIWEW.js +51 -0
- package/dist/chunk-2EECBNC5.js +89 -0
- package/dist/chunk-34U7PLGE.js +23 -0
- package/dist/chunk-3I5QFT3N.js +181 -0
- package/dist/chunk-3MED75HT.js +37 -0
- package/dist/chunk-47D2BO4S.js +87 -0
- package/dist/chunk-4RERDEXR.js +348 -0
- package/dist/chunk-4W2PLC4J.js +27 -0
- package/dist/chunk-52H5B5TC.js +202 -0
- package/dist/chunk-54B42YRX.js +27 -0
- package/dist/chunk-5RXBNSW2.js +266 -0
- package/dist/chunk-5THXD6X5.js +201 -0
- package/dist/chunk-5W3R6LFT.js +24 -0
- package/dist/chunk-5ZEJHV35.js +341 -0
- package/dist/chunk-6P62QVEA.js +118 -0
- package/dist/chunk-6QIUX4EP.js +459 -0
- package/dist/chunk-6VCD4VKZ.js +78 -0
- package/dist/chunk-7F72PXY2.js +326 -0
- package/dist/chunk-7FBF7NPR.js +998 -0
- package/dist/chunk-7U2IDNXN.js +37 -0
- package/dist/chunk-ABBOA7UD.js +157 -0
- package/dist/chunk-AHDW3GPE.js +50 -0
- package/dist/chunk-AJ3QXTRQ.js +756 -0
- package/dist/chunk-AJVLWNFN.js +1610 -0
- package/dist/chunk-AJXODZY6.js +112 -0
- package/dist/chunk-ARFCXG7S.js +84 -0
- package/dist/chunk-AS44CFQ4.js +708 -0
- package/dist/chunk-AWE5TMPO.js +38 -0
- package/dist/chunk-B3I2UUT4.js +4692 -0
- package/dist/chunk-BRJKOBZP.js +331 -0
- package/dist/chunk-BW5KFIQC.js +59 -0
- package/dist/chunk-C2AUYXQH.js +149 -0
- package/dist/chunk-CGGAIP7J.js +29 -0
- package/dist/chunk-D6QS3U6M.js +30 -0
- package/dist/chunk-DFVMIKMQ.js +349 -0
- package/dist/chunk-DIULIWKU.js +169 -0
- package/dist/chunk-DQ2NZ7C4.js +2317 -0
- package/dist/chunk-E2WFBRHM.js +213 -0
- package/dist/chunk-E4MAEDPM.js +50 -0
- package/dist/chunk-EOKRQ3SA.js +30 -0
- package/dist/chunk-F3AU2TMM.js +2626 -0
- package/dist/chunk-F3P7VQ7H.js +170 -0
- package/dist/chunk-FC4RP4I2.js +12 -0
- package/dist/chunk-FJNKANOS.js +32 -0
- package/dist/chunk-GUOGVTCQ.js +146 -0
- package/dist/chunk-GVXA6CCE.js +18 -0
- package/dist/chunk-HHYAELLJ.js +2334 -0
- package/dist/chunk-HMFXILPV.js +83 -0
- package/dist/chunk-HVUZXSWK.js +421 -0
- package/dist/chunk-HWBZIGMJ.js +62 -0
- package/dist/chunk-I3R7GKDR.js +17 -0
- package/dist/chunk-I7SPGOWI.js +55 -0
- package/dist/chunk-IIXOAGHR.js +38 -0
- package/dist/chunk-IVP5KAB7.js +2250 -0
- package/dist/chunk-IXEBJSUE.js +22 -0
- package/dist/chunk-JOLITGCC.js +27 -0
- package/dist/chunk-K6VYLB2U.js +145 -0
- package/dist/chunk-LJDODBBZ.js +78 -0
- package/dist/chunk-LNAKEO63.js +78 -0
- package/dist/chunk-LSMJ6KBE.js +4139 -0
- package/dist/chunk-LW6XKDZQ.js +5565 -0
- package/dist/chunk-N3YQJI6O.js +899 -0
- package/dist/chunk-NABLC7W3.js +148 -0
- package/dist/chunk-NKOUFPQF.js +659 -0
- package/dist/chunk-NL5GLMFI.js +211 -0
- package/dist/chunk-NMABWBZN.js +327 -0
- package/dist/chunk-NTHH2J74.js +27 -0
- package/dist/chunk-NTUJEGDZ.js +59 -0
- package/dist/chunk-NXL4FFQQ.js +47 -0
- package/dist/chunk-NXPS2L6U.js +466 -0
- package/dist/chunk-O5WILGMI.js +42 -0
- package/dist/chunk-O6TQT6RI.js +48 -0
- package/dist/chunk-OAXNDZJ7.js +323 -0
- package/dist/chunk-ODEEOXPH.js +44 -0
- package/dist/chunk-OQGFCZJ4.js +4533 -0
- package/dist/chunk-ORTMY4Q4.js +282 -0
- package/dist/chunk-OS32RNR2.js +442 -0
- package/dist/chunk-PAK6IDME.js +189 -0
- package/dist/chunk-PWFHBTSF.js +406 -0
- package/dist/chunk-Q5U6FMDI.js +2352 -0
- package/dist/chunk-QOZXJ4NA.js +3364 -0
- package/dist/chunk-QYF5S6P6.js +45 -0
- package/dist/chunk-RIISMHKN.js +36 -0
- package/dist/chunk-RPD4ZSB7.js +25 -0
- package/dist/chunk-RPD5K5NC.js +79 -0
- package/dist/chunk-RUOG5D2C.js +262 -0
- package/dist/chunk-T4ERT73Y.js +599 -0
- package/dist/chunk-T6D4Q4AQ.js +54 -0
- package/dist/chunk-TGPXLY2J.js +391 -0
- package/dist/chunk-TLGFBM3F.js +12116 -0
- package/dist/chunk-TO6WL3GM.js +88 -0
- package/dist/chunk-TT22N74J.js +517 -0
- package/dist/chunk-TVN5N6GY.js +21216 -0
- package/dist/chunk-U3VGR4VU.js +308 -0
- package/dist/chunk-UK3CMEAL.js +1250 -0
- package/dist/chunk-UOPVJQ4N.js +103 -0
- package/dist/chunk-UXVNL3D7.js +23 -0
- package/dist/chunk-UY752QSN.js +45 -0
- package/dist/chunk-V5PXFSZK.js +188 -0
- package/dist/chunk-V7R425XG.js +398 -0
- package/dist/chunk-VCSRSYLF.js +81 -0
- package/dist/chunk-VD4JQCQC.js +162 -0
- package/dist/chunk-VDBPVIKD.js +62 -0
- package/dist/chunk-VHQLPIRJ.js +114 -0
- package/dist/chunk-VN2AXLEX.js +5414 -0
- package/dist/chunk-VNMT7C64.js +478 -0
- package/dist/chunk-WONERJTP.js +309 -0
- package/dist/chunk-XECLWQZN.js +85 -0
- package/dist/chunk-XIMYZ3JA.js +27 -0
- package/dist/chunk-XK4CIILI.js +144 -0
- package/dist/chunk-Y4T27COV.js +562 -0
- package/dist/chunk-YGVYKNSN.js +1860 -0
- package/dist/chunk-YLF3PPT5.js +308 -0
- package/dist/chunk-YSNFMJKN.js +14 -0
- package/dist/chunk-Z3CCVDUB.js +76 -0
- package/dist/chunk-Z54ZSOBZ.js +61 -0
- package/dist/chunk-ZAWW3AF6.js +97 -0
- package/dist/chunk-ZMOL6RQC.js +167 -0
- package/dist/index.js +16456 -8335
- package/dist/mcp/analyze-cli.js +186 -232
- package/dist/mcp/cli.js +137 -98
- package/dist/mcp/server.js +22589 -1573
- package/dist/mcp/worker.js +97 -38
- package/dist/probes/installer.js +135 -0
- package/dist/workers/project-snapshot-persist-worker.js +22 -0
- package/dist/workers/review-graph-persist-worker.js +15 -0
- package/docs/agent-guide.md +13 -4
- package/docs/agent-tools.md +42 -0
- package/docs/ast-grep_rules_catalog.md +3 -2
- package/docs/configuration.md +20 -1
- package/docs/environment-variables.md +52 -2
- package/docs/features.md +8 -4
- package/docs/globalconfig.md +1 -0
- package/docs/io-bridge-v2-migration.md +94 -0
- package/docs/lsp-capability-matrix.md +36 -4
- package/docs/lsp-idle-eviction.md +124 -0
- package/docs/mcp.md +21 -5
- package/docs/merge-queue-rollout.md +77 -0
- package/docs/pi-lens-fixer.md +156 -88
- package/docs/pi-lens-investigator.md +74 -26
- package/docs/pi-lens-merge-policy.md +694 -0
- package/docs/pi-lens-monitor.md +73 -7
- package/docs/pi-lens-retro.md +6 -4
- package/docs/pi-lens-reviewer.md +188 -48
- package/docs/pi-lens-subagent.md +246 -45
- package/docs/pi-lens-warden.md +18 -7
- package/docs/public-api-stability.md +55 -0
- package/docs/release-qa-baseline.md +84 -17
- package/docs/rfcs/3654-unified-io-bridge-v2.md +316 -0
- package/docs/servercapabilities.md +53 -49
- package/docs/settings.md +1 -0
- package/docs/usage.md +5 -1
- package/grammars/tree-sitter-bash.wasm +0 -0
- package/grammars/tree-sitter-bash.wasm.json +3 -3
- package/package.json +19 -7
- package/rules/ast-grep-rules/rule-tests/advisory-registry-subset-test.yml +41 -0
- package/rules/ast-grep-rules/rules/advisory-registry-subset.yml +50 -0
- package/scripts/analyze-pi-lens-logs.mjs +1275 -62
- package/scripts/download-grammars.js +5 -0
- package/scripts/grammars.lock.json +6 -1
- package/scripts/install-selftest.mjs +33 -34
- package/scripts/lib/host-provided-deps.mjs +13 -4
- package/scripts/lib/web-tree-sitter-dir.mjs +18 -0
- package/dist/clients/actionable-warnings-logger.js +0 -35
- package/dist/clients/actionable-warnings.js +0 -1610
- package/dist/clients/advisory-provenance.js +0 -593
- package/dist/clients/agent-behavior-client.js +0 -147
- package/dist/clients/agent-nudge.js +0 -325
- package/dist/clients/analysed-root.js +0 -1
- package/dist/clients/ast-grep-client.js +0 -731
- package/dist/clients/ast-grep-rule-manager.js +0 -146
- package/dist/clients/ast-grep-tool-logger.js +0 -118
- package/dist/clients/ast-grep-types.js +0 -10
- package/dist/clients/ast-grep-yaml-synth.js +0 -154
- package/dist/clients/atomic-write-staging.js +0 -75
- package/dist/clients/atomic-write.js +0 -189
- package/dist/clients/availability-probe-flight.js +0 -12
- package/dist/clients/bash-file-access.js +0 -1056
- package/dist/clients/biome-client.js +0 -357
- package/dist/clients/blocker-freshness.js +0 -837
- package/dist/clients/blocker-past-eof.js +0 -129
- package/dist/clients/bootstrap.js +0 -569
- package/dist/clients/bounded-cache.js +0 -190
- package/dist/clients/bounded-pid-file-lock.js +0 -202
- package/dist/clients/bounded-telemetry.js +0 -295
- package/dist/clients/build-identity.js +0 -95
- package/dist/clients/bundled-resource-health.js +0 -113
- package/dist/clients/bus-events-logger.js +0 -105
- package/dist/clients/bus-publish.js +0 -171
- package/dist/clients/cache/rule-cache.js +0 -190
- package/dist/clients/cache-manager.js +0 -524
- package/dist/clients/cache-observability.js +0 -1313
- package/dist/clients/call-graph.js +0 -852
- package/dist/clients/cargo-manifest.js +0 -422
- package/dist/clients/cascade-budget.js +0 -196
- package/dist/clients/cascade-format.js +0 -315
- package/dist/clients/cascade-logger.js +0 -31
- package/dist/clients/cascade-types.js +0 -9
- package/dist/clients/child-unref.js +0 -124
- package/dist/clients/code-quality-warnings.js +0 -286
- package/dist/clients/codebase-model.js +0 -173
- package/dist/clients/collateral-test-role.js +0 -40
- package/dist/clients/complexity-client.js +0 -462
- package/dist/clients/config-core/deny.js +0 -221
- package/dist/clients/config-core/index.js +0 -50
- package/dist/clients/config-core/merge.js +0 -357
- package/dist/clients/config-core/normalize.js +0 -340
- package/dist/clients/config-core/process-spec.js +0 -248
- package/dist/clients/config-core/provenance.js +0 -164
- package/dist/clients/config-core/records.js +0 -218
- package/dist/clients/config-core/resolve.js +0 -125
- package/dist/clients/config-core/safe-object.js +0 -78
- package/dist/clients/config-core/schema.js +0 -165
- package/dist/clients/config-diagnostic-codes.js +0 -285
- package/dist/clients/config-locations.js +0 -388
- package/dist/clients/config-resolve.js +0 -798
- package/dist/clients/config-schema.js +0 -251
- package/dist/clients/config-warn.js +0 -407
- package/dist/clients/console-guard-install.js +0 -26
- package/dist/clients/cooperative-budget.js +0 -42
- package/dist/clients/dead-code-client.js +0 -510
- package/dist/clients/dead-code-logger.js +0 -30
- package/dist/clients/deadline-utils.js +0 -280
- package/dist/clients/debug-handles.js +0 -211
- package/dist/clients/debug-heap.js +0 -174
- package/dist/clients/deferred-lsp-work.js +0 -106
- package/dist/clients/degradation-ledger.js +0 -426
- package/dist/clients/demoted-finding-render.js +0 -169
- package/dist/clients/dependency-checker.js +0 -885
- package/dist/clients/deps/ast-grep-napi.js +0 -22
- package/dist/clients/deps/js-yaml.js +0 -9
- package/dist/clients/deps/minimatch.js +0 -4
- package/dist/clients/deps/pi-tui.js +0 -14
- package/dist/clients/deps/typebox.js +0 -14
- package/dist/clients/deps/vscode-jsonrpc.js +0 -1
- package/dist/clients/deps/web-tree-sitter.js +0 -24
- package/dist/clients/diagnostic-dispositions.js +0 -630
- package/dist/clients/diagnostic-line-freshness.js +0 -305
- package/dist/clients/diagnostic-logger.js +0 -73
- package/dist/clients/diagnostic-tracker.js +0 -105
- package/dist/clients/diagnostics-publish.js +0 -230
- package/dist/clients/dispatch/ast-grep-catalog.js +0 -65
- package/dist/clients/dispatch/auxiliary-lsp.js +0 -343
- package/dist/clients/dispatch/collect-later-tier.js +0 -35
- package/dist/clients/dispatch/diagnostic-taxonomy.js +0 -66
- package/dist/clients/dispatch/dispatcher.js +0 -1269
- package/dist/clients/dispatch/fact-provider-types.js +0 -1
- package/dist/clients/dispatch/fact-rule-runner.js +0 -17
- package/dist/clients/dispatch/fact-runner.js +0 -30
- package/dist/clients/dispatch/fact-scheduler.js +0 -68
- package/dist/clients/dispatch/fact-store.js +0 -377
- package/dist/clients/dispatch/facts/comment-facts.js +0 -22
- package/dist/clients/dispatch/facts/file-content.js +0 -19
- package/dist/clients/dispatch/facts/function-facts.js +0 -348
- package/dist/clients/dispatch/facts/import-facts.js +0 -204
- package/dist/clients/dispatch/facts/tree-sitter-facts.js +0 -34
- package/dist/clients/dispatch/facts/try-catch-facts.js +0 -119
- package/dist/clients/dispatch/finding-policy.js +0 -339
- package/dist/clients/dispatch/indent-detect.js +0 -417
- package/dist/clients/dispatch/inline-suppressions.js +0 -89
- package/dist/clients/dispatch/integration.js +0 -2377
- package/dist/clients/dispatch/lazy.js +0 -11
- package/dist/clients/dispatch/pending-runner-findings.js +0 -87
- package/dist/clients/dispatch/plan.js +0 -278
- package/dist/clients/dispatch/priorities.js +0 -20
- package/dist/clients/dispatch/rule-id-normalize.js +0 -50
- package/dist/clients/dispatch/rule-ignores.js +0 -69
- package/dist/clients/dispatch/rule-policy.js +0 -135
- package/dist/clients/dispatch/rules/async-noise.js +0 -40
- package/dist/clients/dispatch/rules/async-unnecessary-wrapper.js +0 -27
- package/dist/clients/dispatch/rules/cors-wildcard.js +0 -54
- package/dist/clients/dispatch/rules/error-obscuring.js +0 -32
- package/dist/clients/dispatch/rules/error-swallowing.js +0 -31
- package/dist/clients/dispatch/rules/framework-call-noise.js +0 -67
- package/dist/clients/dispatch/rules/high-complexity.js +0 -72
- package/dist/clients/dispatch/rules/high-fan-out.js +0 -74
- package/dist/clients/dispatch/rules/high-import-coupling.js +0 -37
- package/dist/clients/dispatch/rules/missing-error-propagation.js +0 -62
- package/dist/clients/dispatch/rules/no-commented-credentials.js +0 -52
- package/dist/clients/dispatch/rules/pass-through-wrappers.js +0 -42
- package/dist/clients/dispatch/rules/placeholder-comments.js +0 -40
- package/dist/clients/dispatch/rules/unsafe-boundary.js +0 -126
- package/dist/clients/dispatch/runner-context.js +0 -52
- package/dist/clients/dispatch/runners/actionlint.js +0 -111
- package/dist/clients/dispatch/runners/ast-grep-napi.js +0 -1196
- package/dist/clients/dispatch/runners/biome-check.js +0 -296
- package/dist/clients/dispatch/runners/cpp-check.js +0 -219
- package/dist/clients/dispatch/runners/credo.js +0 -82
- package/dist/clients/dispatch/runners/cue-vet.js +0 -416
- package/dist/clients/dispatch/runners/dart-analyze.js +0 -183
- package/dist/clients/dispatch/runners/detekt.js +0 -176
- package/dist/clients/dispatch/runners/dotnet-build.js +0 -164
- package/dist/clients/dispatch/runners/elixir-check.js +0 -195
- package/dist/clients/dispatch/runners/eslint.js +0 -137
- package/dist/clients/dispatch/runners/fact-rules.js +0 -29
- package/dist/clients/dispatch/runners/fish-indent.js +0 -69
- package/dist/clients/dispatch/runners/gleam-check.js +0 -167
- package/dist/clients/dispatch/runners/go-vet.js +0 -104
- package/dist/clients/dispatch/runners/golangci-lint.js +0 -135
- package/dist/clients/dispatch/runners/hadolint.js +0 -91
- package/dist/clients/dispatch/runners/helm-lint.js +0 -171
- package/dist/clients/dispatch/runners/helm-render.js +0 -940
- package/dist/clients/dispatch/runners/htmlhint.js +0 -117
- package/dist/clients/dispatch/runners/index.js +0 -108
- package/dist/clients/dispatch/runners/javac.js +0 -99
- package/dist/clients/dispatch/runners/ktlint.js +0 -110
- package/dist/clients/dispatch/runners/lsp.js +0 -379
- package/dist/clients/dispatch/runners/markdownlint.js +0 -167
- package/dist/clients/dispatch/runners/mypy.js +0 -102
- package/dist/clients/dispatch/runners/oxlint.js +0 -414
- package/dist/clients/dispatch/runners/php-lint.js +0 -85
- package/dist/clients/dispatch/runners/phpstan.js +0 -120
- package/dist/clients/dispatch/runners/prisma-validate.js +0 -62
- package/dist/clients/dispatch/runners/psscriptanalyzer.js +0 -445
- package/dist/clients/dispatch/runners/pyright.js +0 -169
- package/dist/clients/dispatch/runners/rubocop.js +0 -99
- package/dist/clients/dispatch/runners/ruff.js +0 -88
- package/dist/clients/dispatch/runners/rust-clippy.js +0 -256
- package/dist/clients/dispatch/runners/shellcheck.js +0 -173
- package/dist/clients/dispatch/runners/shfmt.js +0 -102
- package/dist/clients/dispatch/runners/spellcheck.js +0 -128
- package/dist/clients/dispatch/runners/spotbugs.js +0 -259
- package/dist/clients/dispatch/runners/sqlfluff.js +0 -183
- package/dist/clients/dispatch/runners/stylelint.js +0 -166
- package/dist/clients/dispatch/runners/swiftlint.js +0 -163
- package/dist/clients/dispatch/runners/taplo.js +0 -174
- package/dist/clients/dispatch/runners/terragrunt.js +0 -168
- package/dist/clients/dispatch/runners/tflint.js +0 -125
- package/dist/clients/dispatch/runners/tree-sitter.js +0 -643
- package/dist/clients/dispatch/runners/trivy-config.js +0 -253
- package/dist/clients/dispatch/runners/utils/availability-policy.js +0 -496
- package/dist/clients/dispatch/runners/utils/candidate-probe.js +0 -90
- package/dist/clients/dispatch/runners/utils/diagnostic-parsers.js +0 -95
- package/dist/clients/dispatch/runners/utils/lazy-installer.js +0 -274
- package/dist/clients/dispatch/runners/utils/runner-helpers.js +0 -1701
- package/dist/clients/dispatch/runners/utils/spawn-outcome.js +0 -101
- package/dist/clients/dispatch/runners/utils/tool-failure.js +0 -235
- package/dist/clients/dispatch/runners/utils/toolchain-availability.js +0 -169
- package/dist/clients/dispatch/runners/utils.js +0 -15
- package/dist/clients/dispatch/runners/vale.js +0 -128
- package/dist/clients/dispatch/runners/yaml-rule-parser.js +0 -242
- package/dist/clients/dispatch/runners/yamllint.js +0 -95
- package/dist/clients/dispatch/runners/zig-check.js +0 -79
- package/dist/clients/dispatch/suppress-writer.js +0 -79
- package/dist/clients/dispatch/tool-profile.js +0 -30
- package/dist/clients/dispatch/types.js +0 -21
- package/dist/clients/dispatch/utils/format-utils.js +0 -45
- package/dist/clients/dispatch/utils/lsp-diagnostics.js +0 -35
- package/dist/clients/disposition-logger.js +0 -32
- package/dist/clients/disposition-publish.js +0 -124
- package/dist/clients/durable-store.js +0 -97
- package/dist/clients/effective-config.js +0 -415
- package/dist/clients/env-utils.js +0 -83
- package/dist/clients/error-class.js +0 -23
- package/dist/clients/eval-timestamp.js +0 -17
- package/dist/clients/event-loop-hold.js +0 -274
- package/dist/clients/event-loop-monitor.js +0 -250
- package/dist/clients/extension-log.js +0 -504
- package/dist/clients/extension-mode.js +0 -73
- package/dist/clients/feature-hints.js +0 -103
- package/dist/clients/file-kinds.js +0 -412
- package/dist/clients/file-role.js +0 -134
- package/dist/clients/file-time.js +0 -160
- package/dist/clients/file-utils.js +0 -1032
- package/dist/clients/finding-delivery-gate.js +0 -494
- package/dist/clients/finding-identity.js +0 -88
- package/dist/clients/fix-worklog.js +0 -103
- package/dist/clients/format-events-publish.js +0 -343
- package/dist/clients/format-service.js +0 -222
- package/dist/clients/formatters-lazy.js +0 -9
- package/dist/clients/formatters.js +0 -2032
- package/dist/clients/freshness-cadence.js +0 -17
- package/dist/clients/freshness.js +0 -38
- package/dist/clients/generated-artifacts.js +0 -394
- package/dist/clients/generation-guard.js +0 -215
- package/dist/clients/git-guard.js +0 -1136
- package/dist/clients/git-tracked-ignore.js +0 -243
- package/dist/clients/gitleaks-client.js +0 -509
- package/dist/clients/go-client.js +0 -104
- package/dist/clients/govulncheck-client.js +0 -605
- package/dist/clients/gradle-ktfmt-style.js +0 -348
- package/dist/clients/grammar-source.js +0 -465
- package/dist/clients/gzip-stage-write.js +0 -135
- package/dist/clients/hashline-anchor.js +0 -424
- package/dist/clients/hook-budgets.js +0 -76
- package/dist/clients/host-edit-normalize.js +0 -140
- package/dist/clients/host-ports.js +0 -39
- package/dist/clients/indent-retarget.js +0 -154
- package/dist/clients/inline-blocker-dispositions.js +0 -186
- package/dist/clients/install-diagnostics.js +0 -156
- package/dist/clients/installer/index.js +0 -5416
- package/dist/clients/installer/managed-tool-refresh-session.js +0 -58
- package/dist/clients/installer/managed-tool-refresh.js +0 -783
- package/dist/clients/instance-reaper-state.js +0 -7
- package/dist/clients/instance-reaper.js +0 -1137
- package/dist/clients/instance-registry-lock.js +0 -145
- package/dist/clients/instance-registry.js +0 -773
- package/dist/clients/jscpd-client.js +0 -378
- package/dist/clients/json-cache-read.js +0 -65
- package/dist/clients/knip-client.js +0 -788
- package/dist/clients/language-policy.js +0 -252
- package/dist/clients/language-profile.js +0 -361
- package/dist/clients/language-registry.js +0 -603
- package/dist/clients/latency-logger.js +0 -727
- package/dist/clients/lazy-import.js +0 -21
- package/dist/clients/ledger-bounds.js +0 -54
- package/dist/clients/lens-config.js +0 -404
- package/dist/clients/lens-engine.js +0 -358
- package/dist/clients/lens-events.js +0 -125
- package/dist/clients/lens-flag-registry.js +0 -467
- package/dist/clients/lens-map.js +0 -1156
- package/dist/clients/live-bus-emitter.js +0 -74
- package/dist/clients/log-cleanup.js +0 -222
- package/dist/clients/lsp/aggregation.js +0 -178
- package/dist/clients/lsp/cascade-tier.js +0 -421
- package/dist/clients/lsp/client.js +0 -4593
- package/dist/clients/lsp/config.js +0 -691
- package/dist/clients/lsp/content-limits.js +0 -41
- package/dist/clients/lsp/diagnostic-binding.js +0 -225
- package/dist/clients/lsp/document-drift.js +0 -467
- package/dist/clients/lsp/edits.js +0 -1219
- package/dist/clients/lsp/index.js +0 -8305
- package/dist/clients/lsp/inferred-project.js +0 -216
- package/dist/clients/lsp/jvm-runtime.js +0 -298
- package/dist/clients/lsp/language.js +0 -63
- package/dist/clients/lsp/launch.js +0 -746
- package/dist/clients/lsp/lombok.js +0 -158
- package/dist/clients/lsp/path-utils.js +0 -5
- package/dist/clients/lsp/pending-aux-coverage.js +0 -251
- package/dist/clients/lsp/position-encoding.js +0 -61
- package/dist/clients/lsp/ruby-drive-dirs.js +0 -83
- package/dist/clients/lsp/server.js +0 -3290
- package/dist/clients/lsp/session-roots.js +0 -192
- package/dist/clients/lsp/spawn-history.js +0 -17
- package/dist/clients/lsp/sync-kind.js +0 -56
- package/dist/clients/lsp/tsserver-sync.js +0 -332
- package/dist/clients/lsp/wait-policy/capability-snapshot.js +0 -1
- package/dist/clients/lsp/wait-policy/classification.js +0 -85
- package/dist/clients/lsp/wait-policy/index.js +0 -10
- package/dist/clients/lsp/wait-policy/strategies.js +0 -392
- package/dist/clients/lsp/watch-queue.js +0 -61
- package/dist/clients/lsp/workspace-diagnostics-cache.js +0 -639
- package/dist/clients/lsp/workspace-diagnostics-session.js +0 -30
- package/dist/clients/lsp/workspace-sweep-hold.js +0 -184
- package/dist/clients/lsp-budget.js +0 -186
- package/dist/clients/lsp-document-symbols.js +0 -110
- package/dist/clients/lsp-lazy.js +0 -9
- package/dist/clients/lsp-mutation.js +0 -396
- package/dist/clients/lsp-status.js +0 -59
- package/dist/clients/map-with-concurrency.js +0 -40
- package/dist/clients/mcp/analyze.js +0 -420
- package/dist/clients/mcp/host-shim.js +0 -31
- package/dist/clients/mcp/ipc.js +0 -523
- package/dist/clients/mcp/review.js +0 -197
- package/dist/clients/mcp/session.js +0 -412
- package/dist/clients/memory-sampler.js +0 -208
- package/dist/clients/message-end-attribution.js +0 -30
- package/dist/clients/metrics-client.js +0 -107
- package/dist/clients/metrics-history.js +0 -327
- package/dist/clients/middle-man-analysis.js +0 -263
- package/dist/clients/model-provider.js +0 -53
- package/dist/clients/module-report-lsp.js +0 -189
- package/dist/clients/module-report.js +0 -2150
- package/dist/clients/mutating-tool.js +0 -651
- package/dist/clients/mutation-attribution.js +0 -368
- package/dist/clients/mutation-bridge.js +0 -240
- package/dist/clients/ndjson-logger.js +0 -734
- package/dist/clients/observed-mutation-sources.js +0 -101
- package/dist/clients/observed-mutation.js +0 -1253
- package/dist/clients/oldtext-autopatch.js +0 -128
- package/dist/clients/opaque-mutation-scan.js +0 -496
- package/dist/clients/opengrep-client.js +0 -333
- package/dist/clients/opengrep-config.js +0 -76
- package/dist/clients/package-manager.js +0 -607
- package/dist/clients/package-root.js +0 -38
- package/dist/clients/partial-edit-apply.js +0 -439
- package/dist/clients/path-attribution-telemetry.js +0 -43
- package/dist/clients/path-keyed-map.js +0 -108
- package/dist/clients/path-utils.js +0 -1244
- package/dist/clients/performance-report.js +0 -331
- package/dist/clients/persist-debounce.js +0 -70
- package/dist/clients/persistent-reverify.js +0 -271
- package/dist/clients/php-cs-fixer-config.js +0 -119
- package/dist/clients/pipeline.js +0 -1480
- package/dist/clients/post-autofix-notice.js +0 -37
- package/dist/clients/print-mode.js +0 -21
- package/dist/clients/probe-home-state.js +0 -228
- package/dist/clients/process-bridge.js +0 -66
- package/dist/clients/process-singletons.js +0 -210
- package/dist/clients/process-snapshot.js +0 -68
- package/dist/clients/project-changes.js +0 -181
- package/dist/clients/project-conventions.js +0 -171
- package/dist/clients/project-diagnostics/cache.js +0 -137
- package/dist/clients/project-diagnostics/extractors.js +0 -109
- package/dist/clients/project-diagnostics/fresh-fetch.js +0 -668
- package/dist/clients/project-diagnostics/runner-adapters/call-graph-impact.js +0 -118
- package/dist/clients/project-diagnostics/runner-adapters/dead-code.js +0 -47
- package/dist/clients/project-diagnostics/runner-adapters/gitleaks.js +0 -40
- package/dist/clients/project-diagnostics/runner-adapters/govulncheck.js +0 -34
- package/dist/clients/project-diagnostics/runner-adapters/jscpd.js +0 -38
- package/dist/clients/project-diagnostics/runner-adapters/knip.js +0 -47
- package/dist/clients/project-diagnostics/runner-adapters/madge.js +0 -48
- package/dist/clients/project-diagnostics/runner-adapters/opengrep.js +0 -40
- package/dist/clients/project-diagnostics/runner-adapters/runner-findings.js +0 -127
- package/dist/clients/project-diagnostics/runner-adapters/trivy.js +0 -81
- package/dist/clients/project-diagnostics/scanner.js +0 -520
- package/dist/clients/project-diagnostics/types.js +0 -1
- package/dist/clients/project-lens-config.js +0 -807
- package/dist/clients/project-report.js +0 -701
- package/dist/clients/project-scale.js +0 -237
- package/dist/clients/project-scan-policy.js +0 -11
- package/dist/clients/project-snapshot-fingerprint.js +0 -48
- package/dist/clients/project-snapshot-persist-worker.js +0 -20
- package/dist/clients/project-snapshot.js +0 -1653
- package/dist/clients/project-trust.js +0 -181
- package/dist/clients/python-environment.js +0 -217
- package/dist/clients/python-provenance.js +0 -639
- package/dist/clients/quiet-window-config.js +0 -47
- package/dist/clients/quiet-window.js +0 -236
- package/dist/clients/read-bridge.js +0 -139
- package/dist/clients/read-expansion.js +0 -266
- package/dist/clients/read-guard-logger.js +0 -251
- package/dist/clients/read-guard-tool-lines.js +0 -1306
- package/dist/clients/read-guard.js +0 -1561
- package/dist/clients/recent-touches.js +0 -240
- package/dist/clients/redact/secrets.js +0 -449
- package/dist/clients/resource-sampler.js +0 -628
- package/dist/clients/reverse-deps.js +0 -270
- package/dist/clients/review-graph/builder.js +0 -5126
- package/dist/clients/review-graph/format.js +0 -33
- package/dist/clients/review-graph/git-identity.js +0 -163
- package/dist/clients/review-graph/import-resolvers.js +0 -481
- package/dist/clients/review-graph/persist-worker.js +0 -10
- package/dist/clients/review-graph/query.js +0 -244
- package/dist/clients/review-graph/revision-drift.js +0 -21
- package/dist/clients/review-graph/service.js +0 -96
- package/dist/clients/review-graph/shared-extraction-ir.js +0 -82
- package/dist/clients/review-graph/symbol-id.js +0 -103
- package/dist/clients/review-graph/tsconfig-paths.js +0 -299
- package/dist/clients/review-graph/types.js +0 -1
- package/dist/clients/review-graph/workspace-modules.js +0 -449
- package/dist/clients/review-graph-logger.js +0 -81
- package/dist/clients/ruff-client.js +0 -179
- package/dist/clients/rules-scanner.js +0 -131
- package/dist/clients/run-duration.js +0 -55
- package/dist/clients/runtime-agent-end.js +0 -746
- package/dist/clients/runtime-config.js +0 -77
- package/dist/clients/runtime-context.js +0 -211
- package/dist/clients/runtime-coordinator.js +0 -1324
- package/dist/clients/runtime-session.js +0 -2485
- package/dist/clients/runtime-tool-call.js +0 -1295
- package/dist/clients/runtime-tool-result.js +0 -2049
- package/dist/clients/runtime-turn.js +0 -3767
- package/dist/clients/rust-client.js +0 -97
- package/dist/clients/safe-spawn.js +0 -2357
- package/dist/clients/sanitize.js +0 -286
- package/dist/clients/scan-utils.js +0 -25
- package/dist/clients/scratch-tree-policy.js +0 -165
- package/dist/clients/search-read-registration.js +0 -94
- package/dist/clients/secret-findings.js +0 -114
- package/dist/clients/security-scan-client.js +0 -352
- package/dist/clients/session-event-guard.js +0 -297
- package/dist/clients/session-lifecycle.js +0 -484
- package/dist/clients/session-start-observability.js +0 -94
- package/dist/clients/session-state-store.js +0 -101
- package/dist/clients/session-summary.js +0 -15
- package/dist/clients/sessionstart-logger.js +0 -27
- package/dist/clients/sg-runner.js +0 -876
- package/dist/clients/sgconfig.js +0 -347
- package/dist/clients/shared-checkout-guard.js +0 -338
- package/dist/clients/single-flight.js +0 -158
- package/dist/clients/situational-tool-telemetry.js +0 -108
- package/dist/clients/skills-resolver.js +0 -141
- package/dist/clients/slow-fs.js +0 -138
- package/dist/clients/smells-rollup.js +0 -231
- package/dist/clients/source-filter.js +0 -596
- package/dist/clients/source-walker.js +0 -211
- package/dist/clients/spawn-output-cap.js +0 -120
- package/dist/clients/spawn-timeout-cooldown.js +0 -110
- package/dist/clients/stale-marker.js +0 -17
- package/dist/clients/startup-scan.js +0 -400
- package/dist/clients/startup-timing.js +0 -130
- package/dist/clients/string-utils.js +0 -33
- package/dist/clients/subagent-mode.js +0 -111
- package/dist/clients/symbol-containment.js +0 -24
- package/dist/clients/symbol-types.js +0 -5
- package/dist/clients/test-runner-client.js +0 -2507
- package/dist/clients/test-runner-delivery.js +0 -287
- package/dist/clients/todo-scanner.js +0 -229
- package/dist/clients/tool-agreement.js +0 -423
- package/dist/clients/tool-config.js +0 -249
- package/dist/clients/tool-cwd.js +0 -270
- package/dist/clients/tool-definition.js +0 -47
- package/dist/clients/tool-event.js +0 -105
- package/dist/clients/tool-policy.js +0 -2755
- package/dist/clients/tool-probe.js +0 -53
- package/dist/clients/tool-render.js +0 -156
- package/dist/clients/tool-set-policy.js +0 -118
- package/dist/clients/tree-sitter-cache.js +0 -364
- package/dist/clients/tree-sitter-client.js +0 -4195
- package/dist/clients/tree-sitter-logger.js +0 -100
- package/dist/clients/tree-sitter-navigator.js +0 -269
- package/dist/clients/tree-sitter-query-loader.js +0 -569
- package/dist/clients/tree-sitter-shared.js +0 -158
- package/dist/clients/tree-sitter-symbol-extractor.js +0 -1265
- package/dist/clients/trivy-client.js +0 -467
- package/dist/clients/tui-fit.js +0 -50
- package/dist/clients/turn-context.js +0 -52
- package/dist/clients/turn-end/lane.js +0 -51
- package/dist/clients/turn-end/lanes/govulncheck.js +0 -112
- package/dist/clients/turn-end/lanes/secrets.js +0 -204
- package/dist/clients/turn-summary-render.js +0 -72
- package/dist/clients/turn-summary.js +0 -132
- package/dist/clients/typos-config.js +0 -29
- package/dist/clients/user-notify.js +0 -51
- package/dist/clients/vanished-instance-marker.js +0 -57
- package/dist/clients/warm-attach.js +0 -305
- package/dist/clients/widget-state.js +0 -1808
- package/dist/clients/word-index-logger.js +0 -49
- package/dist/clients/word-index-store.js +0 -459
- package/dist/clients/word-index.js +0 -2080
- package/dist/clients/workspace-topology.js +0 -443
- package/dist/clients/write-ordering-guard.js +0 -65
- package/dist/clients/zizmor-config.js +0 -340
- package/dist/i18n.js +0 -69
- package/dist/mcp/build-staleness.js +0 -124
- package/dist/scripts/lib/process-scan.mjs +0 -583
- package/dist/scripts/lib/skills-predicate.mjs +0 -129
- package/dist/scripts/lib/web-tree-sitter-dir.mjs +0 -123
- package/dist/tools/activate-tools.js +0 -87
- package/dist/tools/ast-grep-outline.js +0 -137
- package/dist/tools/ast-grep-replace.js +0 -244
- package/dist/tools/ast-grep-search.js +0 -762
- package/dist/tools/effective-config.js +0 -90
- package/dist/tools/lens-diagnostic-mark.js +0 -375
- package/dist/tools/lens-diagnostics.js +0 -2571
- package/dist/tools/lsp-diagnostics.js +0 -1745
- package/dist/tools/lsp-navigation.js +0 -1367
- package/dist/tools/lsp-structured-output.js +0 -294
- package/dist/tools/module-report.js +0 -382
- package/dist/tools/project-report.js +0 -86
- package/dist/tools/render-compact.js +0 -374
- package/dist/tools/scan-progress.js +0 -53
- package/dist/tools/shared.js +0 -29
- package/dist/tools/symbol-search.js +0 -155
|
@@ -1,357 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Biome Client for pi-lens
|
|
3
|
-
*
|
|
4
|
-
* All-in-one: formatting + linting for JS/TS/JSX/TSX/CSS/JSON
|
|
5
|
-
* Replaces Prettier with 15-50x faster Rust-based tool.
|
|
6
|
-
*
|
|
7
|
-
* Requires: npm install @biomejs/biome (or npx @biomejs/biome)
|
|
8
|
-
* Docs: https://biomejs.dev/
|
|
9
|
-
*/
|
|
10
|
-
import { createSubsystemLogger } from "./extension-log.js";
|
|
11
|
-
import * as fs from "node:fs";
|
|
12
|
-
import * as path from "node:path";
|
|
13
|
-
import { isFileKind } from "./file-kinds.js";
|
|
14
|
-
import { getGlobalPiLensDir } from "./file-utils.js";
|
|
15
|
-
import { findGlobalBinary } from "./package-manager.js";
|
|
16
|
-
import { safeSpawnAsync } from "./safe-spawn.js";
|
|
17
|
-
import { probeToolAsync } from "./tool-probe.js";
|
|
18
|
-
import { createSingleFlight } from "./single-flight.js";
|
|
19
|
-
import { biomeConfigArgs } from "./tool-policy.js";
|
|
20
|
-
import { resolveToolCwd } from "./tool-cwd.js";
|
|
21
|
-
import { resolveManagedToolClient, } from "./dispatch/runners/utils/runner-helpers.js";
|
|
22
|
-
import { classifyProbeFailure, describeInstallAttempt, createAvailabilityLatch, logAvailabilityDecision, startHostStallSampler, } from "./dispatch/runners/utils/availability-policy.js";
|
|
23
|
-
// --- Client ---
|
|
24
|
-
const PROBE_TIMEOUT_MS = 10_000;
|
|
25
|
-
export class BiomeClient {
|
|
26
|
-
/**
|
|
27
|
-
* Availability memo, backed by the shared transient-aware latch (#1476).
|
|
28
|
-
*
|
|
29
|
-
* Biome is the hot-path formatter: before this, ANY probe failure — a
|
|
30
|
-
* timeout included — collapsed to `{ outcome: "missing" }`, which both
|
|
31
|
-
* triggered an install and latched `false` for the life of the process. One
|
|
32
|
-
* slow first format then disabled formatting until restart.
|
|
33
|
-
*/
|
|
34
|
-
availabilityLatch = createAvailabilityLatch();
|
|
35
|
-
/** Cause of the last probe, read when the resolution comes back. */
|
|
36
|
-
lastProbeCause = null;
|
|
37
|
-
/**
|
|
38
|
-
* Measurements of the last failed probe, held until the latch decides how
|
|
39
|
-
* long the verdict lasts. The decision record is emitted after that, so it
|
|
40
|
-
* can carry `retryAfterMs` — a latch you can see is worth little if the
|
|
41
|
-
* retry schedule is not greppable beside it (#1474).
|
|
42
|
-
*/
|
|
43
|
-
lastProbeElapsedMs = 0;
|
|
44
|
-
lastProbeHostStallMs = 0;
|
|
45
|
-
/** Raw facts from the last probe, carried into the decision record (#1500). */
|
|
46
|
-
lastProbeEvidence;
|
|
47
|
-
// Per-cwd cache of the resolved biome binary. Keying by cwd matters in
|
|
48
|
-
// monorepos where different sub-packages each ship their own biome
|
|
49
|
-
// installation; sharing one slot across the whole client would cause
|
|
50
|
-
// the first resolution to win and stale across other packages.
|
|
51
|
-
localBinaryByCwd = new Map();
|
|
52
|
-
// The binary path written by `ensureTool("biome")` — genuinely global
|
|
53
|
-
// (lives under ~/.pi-lens/tools), so it's stored separately from the
|
|
54
|
-
// per-cwd cache and used as a final fallback before npx.
|
|
55
|
-
autoInstalledBinaryPath = null;
|
|
56
|
-
/**
|
|
57
|
-
* At-most-one probe/auto-install in flight, via the shared primitive
|
|
58
|
-
* (#1753). One instance owns one question, so the key is a constant.
|
|
59
|
-
*/
|
|
60
|
-
ensureFlight = createSingleFlight();
|
|
61
|
-
log;
|
|
62
|
-
constructor(verbose = false) {
|
|
63
|
-
this.log = verbose ? createSubsystemLogger("biome") : () => { };
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* Resolve the fastest available biome binary for `cwd`.
|
|
67
|
-
* Prefers local node_modules/.bin/biome (skip npx overhead ~1s).
|
|
68
|
-
* Falls back to ~/.pi-lens/tools, then npx.
|
|
69
|
-
*
|
|
70
|
-
* In monorepos, callers should pass the project / sub-package root for the
|
|
71
|
-
* edited file (typically `path.dirname(absolutePath)`). Omitting `cwd`
|
|
72
|
-
* falls back to `process.cwd()`, which is wrong when pi is invoked from
|
|
73
|
-
* a different directory than the file being edited.
|
|
74
|
-
*/
|
|
75
|
-
async getBiomeBinary(cwd) {
|
|
76
|
-
const resolveCwd = cwd ?? process.cwd();
|
|
77
|
-
const cached = this.localBinaryByCwd.get(resolveCwd);
|
|
78
|
-
if (cached)
|
|
79
|
-
return { cmd: cached, args: [] };
|
|
80
|
-
// Check `<cwd>/node_modules/.bin/biome` BEFORE trusting
|
|
81
|
-
// `autoInstalledBinaryPath` (#1731). NOT a walk, despite what this
|
|
82
|
-
// comment claimed until #2544 review F1 — the candidates below are
|
|
83
|
-
// joined onto `resolveCwd` and nothing climbs. Callers pass the edited
|
|
84
|
-
// file's own project/sub-package root (see above), which is where an
|
|
85
|
-
// npm-workspace install puts the shim; converting this to the shared
|
|
86
|
-
// ancestor walk is a behaviour change with no reported defect behind
|
|
87
|
-
// it, so it is deliberately NOT part of #2514's ceiling fold. That
|
|
88
|
-
// field is set once, the first
|
|
89
|
-
// time `ensureAvailable()` auto-installs for ANY cwd this session, and
|
|
90
|
-
// every later call for every OTHER cwd short-circuited on it — so a
|
|
91
|
-
// project that ships its own biome never won once the session's first
|
|
92
|
-
// managed install had already happened. Project-local-first (discipline
|
|
93
|
-
// B, #1721) means the project's pinned version and config resolution
|
|
94
|
-
// always outrank a managed copy, autoinstalled or not.
|
|
95
|
-
// On Windows prefer .cmd (native batch) over the sh wrapper — 2x faster.
|
|
96
|
-
const isWin = process.platform === "win32";
|
|
97
|
-
const piLensBin = path.join(getGlobalPiLensDir(), "tools", "node_modules", ".bin");
|
|
98
|
-
const candidates = isWin
|
|
99
|
-
? [
|
|
100
|
-
path.join(resolveCwd, "node_modules", ".bin", "biome.cmd"),
|
|
101
|
-
path.join(resolveCwd, "node_modules", ".bin", "biome"),
|
|
102
|
-
]
|
|
103
|
-
: [path.join(resolveCwd, "node_modules", ".bin", "biome")];
|
|
104
|
-
for (const p of candidates) {
|
|
105
|
-
if (fs.existsSync(p)) {
|
|
106
|
-
this.localBinaryByCwd.set(resolveCwd, p);
|
|
107
|
-
return { cmd: p, args: [] };
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
if (this.autoInstalledBinaryPath) {
|
|
111
|
-
return { cmd: this.autoInstalledBinaryPath, args: [] };
|
|
112
|
-
}
|
|
113
|
-
// Also check ~/.pi-lens/tools (where ensureTool("biome") auto-installs),
|
|
114
|
-
// so we avoid the ~1.5s `npx @biomejs/biome --version` fallback when the
|
|
115
|
-
// tool is already installed but not in the project's node_modules.
|
|
116
|
-
const managedCandidates = isWin
|
|
117
|
-
? [path.join(piLensBin, "biome.cmd"), path.join(piLensBin, "biome")]
|
|
118
|
-
: [path.join(piLensBin, "biome")];
|
|
119
|
-
for (const p of managedCandidates) {
|
|
120
|
-
if (fs.existsSync(p)) {
|
|
121
|
-
this.localBinaryByCwd.set(resolveCwd, p);
|
|
122
|
-
return { cmd: p, args: [] };
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
// Any package manager's global bin dir (npm/pnpm/yarn/bun) before npx —
|
|
126
|
-
// catches `pnpm add -g @biomejs/biome` installs that PATH misses (#375).
|
|
127
|
-
const global = await findGlobalBinary("biome");
|
|
128
|
-
if (global) {
|
|
129
|
-
this.localBinaryByCwd.set(resolveCwd, global);
|
|
130
|
-
return { cmd: global, args: [] };
|
|
131
|
-
}
|
|
132
|
-
// Fallback: npx (slower but works anywhere)
|
|
133
|
-
return { cmd: "npx", args: ["@biomejs/biome"] };
|
|
134
|
-
}
|
|
135
|
-
async spawnBiomeAsync(args, timeout = 15000, cwd) {
|
|
136
|
-
const { cmd, args: prefix } = await this.getBiomeBinary(cwd);
|
|
137
|
-
return safeSpawnAsync(cmd, [...prefix, ...args], { timeout, cwd });
|
|
138
|
-
}
|
|
139
|
-
/**
|
|
140
|
-
* Ensure Biome is available, auto-installing if necessary.
|
|
141
|
-
* Prefer this over isAvailable() for auto-install behavior.
|
|
142
|
-
*
|
|
143
|
-
* Re-entrancy safe: concurrent first-time callers share one flight, so
|
|
144
|
-
* probing/auto-install isn't duplicated. The share and the clear-in-finally
|
|
145
|
-
* belong to `singleFlight` (#1753); this method owns only the latch
|
|
146
|
-
* short-circuit above it. #1690 exists because the hand-rolled clear here
|
|
147
|
-
* was never exercised by a test.
|
|
148
|
-
*
|
|
149
|
-
* The memo returns `null` when the last verdict was transient and its
|
|
150
|
-
* cooldown expired, which re-enters the probe: "biome is not installed" is a
|
|
151
|
-
* fact worth caching, "the probe timed out" is a moment worth retrying.
|
|
152
|
-
*/
|
|
153
|
-
async ensureAvailable() {
|
|
154
|
-
const memo = this.availabilityLatch.read();
|
|
155
|
-
if (memo !== null)
|
|
156
|
-
return memo;
|
|
157
|
-
return this.ensureFlight.run("biome", () => this.doEnsureAvailable());
|
|
158
|
-
}
|
|
159
|
-
/**
|
|
160
|
-
* Probe `biome --version` and classify the failure through the shared
|
|
161
|
-
* policy. Only a durable verdict (`missing` / `non-installable`) may reach
|
|
162
|
-
* the install branch of `resolveManagedToolClient`; a transient one returns
|
|
163
|
-
* as `transient`, which that seam passes straight back without installing.
|
|
164
|
-
*/
|
|
165
|
-
async probeBiome() {
|
|
166
|
-
// The probe budget is enforced by a HOST-side timer, so a stalled event
|
|
167
|
-
// loop expires it while the child is still healthy. Measure the stall
|
|
168
|
-
// that overlapped the window and let the classifier see it (#1467).
|
|
169
|
-
const sampler = startHostStallSampler();
|
|
170
|
-
const startedAt = Date.now();
|
|
171
|
-
let result;
|
|
172
|
-
let hostStallMs;
|
|
173
|
-
try {
|
|
174
|
-
// The presence probe asks whether biome answers at all, so it goes
|
|
175
|
-
// through the probe seam (no cwd) rather than through
|
|
176
|
-
// `spawnBiomeAsync`, whose optional `cwd` exists for the analysis
|
|
177
|
-
// spawns that DO resolve a project config (#2894).
|
|
178
|
-
const { cmd, args: prefix } = await this.getBiomeBinary();
|
|
179
|
-
result = await probeToolAsync(cmd, [...prefix, "--version"], {
|
|
180
|
-
timeout: PROBE_TIMEOUT_MS,
|
|
181
|
-
});
|
|
182
|
-
}
|
|
183
|
-
finally {
|
|
184
|
-
hostStallMs = sampler.stop();
|
|
185
|
-
}
|
|
186
|
-
const elapsedMs = Date.now() - startedAt;
|
|
187
|
-
if (!result.error && result.status === 0) {
|
|
188
|
-
this.lastProbeCause = "ok";
|
|
189
|
-
logAvailabilityDecision({
|
|
190
|
-
tool: "biome",
|
|
191
|
-
verdict: "available",
|
|
192
|
-
outcome: "success",
|
|
193
|
-
cause: "ok",
|
|
194
|
-
elapsedMs,
|
|
195
|
-
latched: true,
|
|
196
|
-
hostStallMs,
|
|
197
|
-
budgetMs: PROBE_TIMEOUT_MS,
|
|
198
|
-
classifiedBy: "probe",
|
|
199
|
-
});
|
|
200
|
-
return { outcome: "success", value: true };
|
|
201
|
-
}
|
|
202
|
-
// `unclassifiedFailureOutcome: "missing"` preserves the pre-#1476
|
|
203
|
-
// meaning of a plain non-zero exit (npx reporting no biome package):
|
|
204
|
-
// still "missing", still installable. Only the timeout/abort arm changes.
|
|
205
|
-
const { outcome, cause, evidence } = classifyProbeFailure(result, {
|
|
206
|
-
hostStallMs,
|
|
207
|
-
unclassifiedFailureOutcome: "missing",
|
|
208
|
-
});
|
|
209
|
-
// `classifyProbeFailure` is typed over the full outcome union but never
|
|
210
|
-
// returns "success" for a failed probe; narrow it for the seam's type.
|
|
211
|
-
const failureOutcome = outcome === "success" ? "non-installable" : outcome;
|
|
212
|
-
this.lastProbeCause = cause;
|
|
213
|
-
this.lastProbeElapsedMs = elapsedMs;
|
|
214
|
-
this.lastProbeHostStallMs = hostStallMs;
|
|
215
|
-
this.lastProbeEvidence = evidence;
|
|
216
|
-
// The record is emitted by `doEnsureAvailable`, once the latch has said how
|
|
217
|
-
// long this verdict holds.
|
|
218
|
-
return { outcome: failureOutcome };
|
|
219
|
-
}
|
|
220
|
-
async doEnsureAvailable() {
|
|
221
|
-
const resolved = await resolveManagedToolClient({
|
|
222
|
-
toolId: "biome",
|
|
223
|
-
cwd: process.cwd(),
|
|
224
|
-
probe: () => this.probeBiome(),
|
|
225
|
-
acceptInstalled: (installedPath) => {
|
|
226
|
-
this.autoInstalledBinaryPath = installedPath;
|
|
227
|
-
return true;
|
|
228
|
-
},
|
|
229
|
-
});
|
|
230
|
-
if (resolved.outcome === "success") {
|
|
231
|
-
this.availabilityLatch.noteAvailable();
|
|
232
|
-
// The probe itself logs a clean hit. This arm is the other way to
|
|
233
|
-
// succeed — the install repaired a durable miss — and it needs its own
|
|
234
|
-
// record, or "biome went missing and came back" reads as silence.
|
|
235
|
-
if (this.lastProbeCause !== null && this.lastProbeCause !== "ok") {
|
|
236
|
-
logAvailabilityDecision({
|
|
237
|
-
tool: "biome",
|
|
238
|
-
verdict: "available",
|
|
239
|
-
outcome: "success",
|
|
240
|
-
cause: "ok",
|
|
241
|
-
elapsedMs: this.lastProbeElapsedMs,
|
|
242
|
-
latched: true,
|
|
243
|
-
hostStallMs: this.lastProbeHostStallMs,
|
|
244
|
-
budgetMs: PROBE_TIMEOUT_MS,
|
|
245
|
-
classifiedBy: "caller",
|
|
246
|
-
evidence: {
|
|
247
|
-
install: "succeeded",
|
|
248
|
-
binary: "biome",
|
|
249
|
-
source: "managed-dir",
|
|
250
|
-
},
|
|
251
|
-
});
|
|
252
|
-
}
|
|
253
|
-
return true;
|
|
254
|
-
}
|
|
255
|
-
// A transient probe expires; a durable verdict is remembered for the
|
|
256
|
-
// session exactly as before.
|
|
257
|
-
const cause = this.lastProbeCause ?? "not-found";
|
|
258
|
-
const retryAfterMs = this.availabilityLatch.noteUnavailable(resolved.outcome, cause);
|
|
259
|
-
// `missing` IS the install-failure arm (#1500 review). `resolveManagedToolClient`
|
|
260
|
-
// only reaches the installer when the probe said `missing`, so every `missing`
|
|
261
|
-
// verdict here has already been through it — declined, suppressed, or tried
|
|
262
|
-
// and failed, which is what `describeInstallAttempt` separates. The earlier
|
|
263
|
-
// marker sat on the `non-installable` arm instead, and that arm cannot happen
|
|
264
|
-
// for biome at all: its `acceptInstalled` always accepts. So the one row that
|
|
265
|
-
// needed the fact was the one shipping without it.
|
|
266
|
-
let installEvidence;
|
|
267
|
-
if (resolved.outcome === "missing") {
|
|
268
|
-
const { getInstallAttempt } = await import("./installer/index.js");
|
|
269
|
-
installEvidence = describeInstallAttempt(getInstallAttempt("biome"));
|
|
270
|
-
}
|
|
271
|
-
const evidence = { ...this.lastProbeEvidence, ...installEvidence };
|
|
272
|
-
logAvailabilityDecision({
|
|
273
|
-
tool: "biome",
|
|
274
|
-
verdict: "unavailable",
|
|
275
|
-
outcome: resolved.outcome,
|
|
276
|
-
cause,
|
|
277
|
-
elapsedMs: this.lastProbeElapsedMs,
|
|
278
|
-
latched: resolved.outcome !== "transient",
|
|
279
|
-
hostStallMs: this.lastProbeHostStallMs,
|
|
280
|
-
...(retryAfterMs > 0 && { retryAfterMs }),
|
|
281
|
-
budgetMs: PROBE_TIMEOUT_MS,
|
|
282
|
-
// Per arm: a probe-derived verdict says `probe`, while a verdict asserted
|
|
283
|
-
// by the install seam — or a cause that fell back because no probe ran —
|
|
284
|
-
// says `caller`.
|
|
285
|
-
classifiedBy: this.lastProbeCause === null || resolved.outcome === "non-installable"
|
|
286
|
-
? "caller"
|
|
287
|
-
: "probe",
|
|
288
|
-
...(Object.keys(evidence).length > 0 && { evidence }),
|
|
289
|
-
});
|
|
290
|
-
if (resolved.outcome === "transient") {
|
|
291
|
-
this.log("biome availability probe timed out; will retry (not installing)");
|
|
292
|
-
}
|
|
293
|
-
return false;
|
|
294
|
-
}
|
|
295
|
-
/**
|
|
296
|
-
* Check if a file is supported by Biome
|
|
297
|
-
*/
|
|
298
|
-
isSupportedFile(filePath) {
|
|
299
|
-
return isFileKind(filePath, ["jsts", "json", "css"]);
|
|
300
|
-
}
|
|
301
|
-
/**
|
|
302
|
-
* Async auto-fix variant for pipeline use (non-blocking spawn).
|
|
303
|
-
* `cwd` is the dispatch language root (used for config discovery); when
|
|
304
|
-
* omitted it defaults to the file's directory.
|
|
305
|
-
*/
|
|
306
|
-
async fixFileAsync(filePath, cwd) {
|
|
307
|
-
if (!(await this.ensureAvailable())) {
|
|
308
|
-
return {
|
|
309
|
-
success: false,
|
|
310
|
-
changed: false,
|
|
311
|
-
fixed: 0,
|
|
312
|
-
error: "Biome not available",
|
|
313
|
-
};
|
|
314
|
-
}
|
|
315
|
-
const absolutePath = path.resolve(filePath);
|
|
316
|
-
if (!fs.existsSync(absolutePath)) {
|
|
317
|
-
return {
|
|
318
|
-
success: false,
|
|
319
|
-
changed: false,
|
|
320
|
-
fixed: 0,
|
|
321
|
-
error: "File not found",
|
|
322
|
-
};
|
|
323
|
-
}
|
|
324
|
-
try {
|
|
325
|
-
const before = await fs.promises.readFile(absolutePath, "utf-8");
|
|
326
|
-
const configCwd = resolveToolCwd("runner", "biome", absolutePath, {
|
|
327
|
-
...(cwd !== undefined && { cwd }),
|
|
328
|
-
}).cwd;
|
|
329
|
-
// Shared config-args seam (#1247): the lint runner consumes the same
|
|
330
|
-
// builder, so `lint --write` can never drift to biome's default
|
|
331
|
-
// config when a user config or the package fallback exists.
|
|
332
|
-
const result = await this.spawnBiomeAsync(["lint", "--write", ...biomeConfigArgs(configCwd), absolutePath], 15000, configCwd);
|
|
333
|
-
if (result.error) {
|
|
334
|
-
return {
|
|
335
|
-
success: false,
|
|
336
|
-
changed: false,
|
|
337
|
-
fixed: 0,
|
|
338
|
-
error: result.error.message,
|
|
339
|
-
};
|
|
340
|
-
}
|
|
341
|
-
const after = await fs.promises.readFile(absolutePath, "utf-8");
|
|
342
|
-
const changed = before !== after;
|
|
343
|
-
if (changed) {
|
|
344
|
-
this.log(`Fixed issue(s) in ${path.basename(filePath)}`);
|
|
345
|
-
}
|
|
346
|
-
return { success: true, changed, fixed: changed ? 1 : 0 };
|
|
347
|
-
}
|
|
348
|
-
catch (err) {
|
|
349
|
-
return {
|
|
350
|
-
success: false,
|
|
351
|
-
changed: false,
|
|
352
|
-
fixed: 0,
|
|
353
|
-
error: err instanceof Error ? err.message : String(err),
|
|
354
|
-
};
|
|
355
|
-
}
|
|
356
|
-
}
|
|
357
|
-
}
|