@herbertgao/pi-extensions 2026.10.1 → 2026.10.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/README.md +13 -9
- package/THIRD_PARTY_NOTICES.md +2 -2
- package/node_modules/@dietrichgebert/ponytail/.opencode/command/ponytail-audit.md +2 -2
- package/node_modules/@dietrichgebert/ponytail/.opencode/command/ponytail-debt.md +2 -2
- package/node_modules/@dietrichgebert/ponytail/.opencode/command/ponytail-gain.md +1 -1
- package/node_modules/@dietrichgebert/ponytail/.opencode/command/ponytail-help.md +1 -1
- package/node_modules/@dietrichgebert/ponytail/.opencode/command/ponytail-review.md +2 -2
- package/node_modules/@dietrichgebert/ponytail/.opencode/command/ponytail.md +1 -1
- package/node_modules/@dietrichgebert/ponytail/.qoder/rules/ponytail.md +21 -21
- package/node_modules/@dietrichgebert/ponytail/.qoder-plugin/plugin.json +1 -1
- package/node_modules/@dietrichgebert/ponytail/AGENTS.md +21 -21
- package/node_modules/@dietrichgebert/ponytail/README.md +68 -72
- package/node_modules/@dietrichgebert/ponytail/hooks/ponytail-activate.js +7 -0
- package/node_modules/@dietrichgebert/ponytail/hooks/ponytail-instructions.js +30 -30
- package/node_modules/@dietrichgebert/ponytail/hooks/ponytail-map.js +103 -0
- package/node_modules/@dietrichgebert/ponytail/package.json +2 -2
- package/node_modules/@dietrichgebert/ponytail/skills/ponytail/SKILL.md +33 -101
- package/node_modules/@dietrichgebert/ponytail/skills/ponytail-audit/SKILL.md +89 -32
- package/node_modules/@dietrichgebert/ponytail/skills/ponytail-debt/SKILL.md +13 -12
- package/node_modules/@dietrichgebert/ponytail/skills/ponytail-gain/SKILL.md +17 -16
- package/node_modules/@dietrichgebert/ponytail/skills/ponytail-help/SKILL.md +9 -10
- package/node_modules/@dietrichgebert/ponytail/skills/ponytail-review/SKILL.md +96 -57
- package/node_modules/@herbertgao/pi-agency/LICENSE +21 -0
- package/node_modules/@herbertgao/pi-agency/README.md +40 -0
- package/node_modules/@herbertgao/pi-agency/package.json +53 -0
- package/node_modules/@herbertgao/pi-agency/src/index.ts +441 -0
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/feature/compact-thinking.ts +12 -12
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/compact-mode.ts +30 -6
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/default-mode.ts +15 -9
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/mouse/interaction.ts +27 -9
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/codemode.ts +4 -1
- package/node_modules/@herbertgao/pi-cc-extensions/package.json +2 -2
- package/node_modules/@narumitw/pi-caffeinate/package.json +3 -3
- package/node_modules/@tifan/pi-mermaid-open/package.json +5 -1
- package/node_modules/@tifan/pi-mermaid-open/src/index.ts +26 -9
- package/node_modules/@tifan/pi-recap/package.json +1 -1
- package/node_modules/@tifan/pi-recap/src/index.ts +104 -20
- package/node_modules/@tifan/pi-recap/src/models.ts +46 -4
- package/node_modules/pi-antigravity/README.md +23 -2
- package/node_modules/pi-antigravity/package.json +5 -3
- package/node_modules/pi-antigravity/src/diagnostics/diagnostics.ts +3 -2
- package/node_modules/pi-antigravity/src/features/generate-image.ts +72 -0
- package/node_modules/pi-antigravity/src/features/google-search.ts +71 -0
- package/node_modules/pi-antigravity/src/image/image.ts +86 -47
- package/node_modules/pi-antigravity/src/image/native.ts +69 -0
- package/node_modules/pi-antigravity/src/index.ts +52 -137
- package/node_modules/pi-antigravity/src/search/search.ts +130 -31
- package/node_modules/pi-antigravity/src/stream/stream.ts +162 -113
- package/node_modules/pi-antigravity/src/types/enums.ts +1 -0
- package/node_modules/pi-antigravity/src/types/types.ts +1 -1
- package/node_modules/pi-antigravity/src/utils/security.ts +47 -1
- package/node_modules/pi-antigravity/src/utils/util.ts +38 -6
- package/node_modules/pi-lens/CHANGELOG.md +1064 -0
- package/node_modules/pi-lens/README.md +115 -25
- package/node_modules/pi-lens/config/dependency-cruiser-eager-allowlist.json +6 -2
- package/node_modules/pi-lens/dist/chunk-22AVIGXS.js +560 -0
- package/node_modules/pi-lens/dist/chunk-27BBHSZC.js +106 -0
- package/node_modules/pi-lens/dist/chunk-2BEMIWEW.js +51 -0
- package/node_modules/pi-lens/dist/chunk-2EECBNC5.js +89 -0
- package/node_modules/pi-lens/dist/chunk-34U7PLGE.js +23 -0
- package/node_modules/pi-lens/dist/chunk-3I5QFT3N.js +181 -0
- package/node_modules/pi-lens/dist/chunk-3MED75HT.js +37 -0
- package/node_modules/pi-lens/dist/chunk-47D2BO4S.js +87 -0
- package/node_modules/pi-lens/dist/chunk-4RERDEXR.js +348 -0
- package/node_modules/pi-lens/dist/chunk-4W2PLC4J.js +27 -0
- package/node_modules/pi-lens/dist/chunk-52H5B5TC.js +202 -0
- package/node_modules/pi-lens/dist/chunk-54B42YRX.js +27 -0
- package/node_modules/pi-lens/dist/chunk-5RXBNSW2.js +266 -0
- package/node_modules/pi-lens/dist/chunk-5THXD6X5.js +201 -0
- package/node_modules/pi-lens/dist/chunk-5W3R6LFT.js +24 -0
- package/node_modules/pi-lens/dist/chunk-5ZEJHV35.js +341 -0
- package/node_modules/pi-lens/dist/chunk-6P62QVEA.js +118 -0
- package/node_modules/pi-lens/dist/chunk-6QIUX4EP.js +459 -0
- package/node_modules/pi-lens/dist/chunk-6VCD4VKZ.js +78 -0
- package/node_modules/pi-lens/dist/chunk-7F72PXY2.js +326 -0
- package/node_modules/pi-lens/dist/chunk-7FBF7NPR.js +998 -0
- package/node_modules/pi-lens/dist/chunk-7U2IDNXN.js +37 -0
- package/node_modules/pi-lens/dist/chunk-ABBOA7UD.js +157 -0
- package/node_modules/pi-lens/dist/chunk-AHDW3GPE.js +50 -0
- package/node_modules/pi-lens/dist/chunk-AJ3QXTRQ.js +756 -0
- package/node_modules/pi-lens/dist/chunk-AJVLWNFN.js +1610 -0
- package/node_modules/pi-lens/dist/chunk-AJXODZY6.js +112 -0
- package/node_modules/pi-lens/dist/chunk-ARFCXG7S.js +84 -0
- package/node_modules/pi-lens/dist/chunk-AS44CFQ4.js +708 -0
- package/node_modules/pi-lens/dist/chunk-AWE5TMPO.js +38 -0
- package/node_modules/pi-lens/dist/chunk-B3I2UUT4.js +4692 -0
- package/node_modules/pi-lens/dist/chunk-BRJKOBZP.js +331 -0
- package/node_modules/pi-lens/dist/chunk-BW5KFIQC.js +59 -0
- package/node_modules/pi-lens/dist/chunk-C2AUYXQH.js +149 -0
- package/node_modules/pi-lens/dist/chunk-CGGAIP7J.js +29 -0
- package/node_modules/pi-lens/dist/chunk-D6QS3U6M.js +30 -0
- package/node_modules/pi-lens/dist/chunk-DFVMIKMQ.js +349 -0
- package/node_modules/pi-lens/dist/chunk-DIULIWKU.js +169 -0
- package/node_modules/pi-lens/dist/chunk-DQ2NZ7C4.js +2317 -0
- package/node_modules/pi-lens/dist/chunk-E2WFBRHM.js +213 -0
- package/node_modules/pi-lens/dist/chunk-E4MAEDPM.js +50 -0
- package/node_modules/pi-lens/dist/chunk-EOKRQ3SA.js +30 -0
- package/node_modules/pi-lens/dist/chunk-F3AU2TMM.js +2626 -0
- package/node_modules/pi-lens/dist/chunk-F3P7VQ7H.js +170 -0
- package/node_modules/pi-lens/dist/chunk-FC4RP4I2.js +12 -0
- package/node_modules/pi-lens/dist/chunk-FJNKANOS.js +32 -0
- package/node_modules/pi-lens/dist/chunk-GUOGVTCQ.js +146 -0
- package/node_modules/pi-lens/dist/chunk-GVXA6CCE.js +18 -0
- package/node_modules/pi-lens/dist/chunk-HHYAELLJ.js +2334 -0
- package/node_modules/pi-lens/dist/chunk-HMFXILPV.js +83 -0
- package/node_modules/pi-lens/dist/chunk-HVUZXSWK.js +421 -0
- package/node_modules/pi-lens/dist/chunk-HWBZIGMJ.js +62 -0
- package/node_modules/pi-lens/dist/chunk-I3R7GKDR.js +17 -0
- package/node_modules/pi-lens/dist/chunk-I7SPGOWI.js +55 -0
- package/node_modules/pi-lens/dist/chunk-IIXOAGHR.js +38 -0
- package/node_modules/pi-lens/dist/chunk-IVP5KAB7.js +2250 -0
- package/node_modules/pi-lens/dist/chunk-IXEBJSUE.js +22 -0
- package/node_modules/pi-lens/dist/chunk-JOLITGCC.js +27 -0
- package/node_modules/pi-lens/dist/chunk-K6VYLB2U.js +145 -0
- package/node_modules/pi-lens/dist/chunk-LJDODBBZ.js +78 -0
- package/node_modules/pi-lens/dist/chunk-LNAKEO63.js +78 -0
- package/node_modules/pi-lens/dist/chunk-LSMJ6KBE.js +4139 -0
- package/node_modules/pi-lens/dist/chunk-LW6XKDZQ.js +5565 -0
- package/node_modules/pi-lens/dist/chunk-N3YQJI6O.js +899 -0
- package/node_modules/pi-lens/dist/chunk-NABLC7W3.js +148 -0
- package/node_modules/pi-lens/dist/chunk-NKOUFPQF.js +659 -0
- package/node_modules/pi-lens/dist/chunk-NL5GLMFI.js +211 -0
- package/node_modules/pi-lens/dist/chunk-NMABWBZN.js +327 -0
- package/node_modules/pi-lens/dist/chunk-NTHH2J74.js +27 -0
- package/node_modules/pi-lens/dist/chunk-NTUJEGDZ.js +59 -0
- package/node_modules/pi-lens/dist/chunk-NXL4FFQQ.js +47 -0
- package/node_modules/pi-lens/dist/chunk-NXPS2L6U.js +466 -0
- package/node_modules/pi-lens/dist/chunk-O5WILGMI.js +42 -0
- package/node_modules/pi-lens/dist/chunk-O6TQT6RI.js +48 -0
- package/node_modules/pi-lens/dist/chunk-OAXNDZJ7.js +323 -0
- package/node_modules/pi-lens/dist/chunk-ODEEOXPH.js +44 -0
- package/node_modules/pi-lens/dist/chunk-OQGFCZJ4.js +4533 -0
- package/node_modules/pi-lens/dist/chunk-ORTMY4Q4.js +282 -0
- package/node_modules/pi-lens/dist/chunk-OS32RNR2.js +442 -0
- package/node_modules/pi-lens/dist/chunk-PAK6IDME.js +189 -0
- package/node_modules/pi-lens/dist/chunk-PWFHBTSF.js +406 -0
- package/node_modules/pi-lens/dist/chunk-Q5U6FMDI.js +2352 -0
- package/node_modules/pi-lens/dist/chunk-QOZXJ4NA.js +3364 -0
- package/node_modules/pi-lens/dist/chunk-QYF5S6P6.js +45 -0
- package/node_modules/pi-lens/dist/chunk-RIISMHKN.js +36 -0
- package/node_modules/pi-lens/dist/chunk-RPD4ZSB7.js +25 -0
- package/node_modules/pi-lens/dist/chunk-RPD5K5NC.js +79 -0
- package/node_modules/pi-lens/dist/chunk-RUOG5D2C.js +262 -0
- package/node_modules/pi-lens/dist/chunk-T4ERT73Y.js +599 -0
- package/node_modules/pi-lens/dist/chunk-T6D4Q4AQ.js +54 -0
- package/node_modules/pi-lens/dist/chunk-TGPXLY2J.js +391 -0
- package/node_modules/pi-lens/dist/chunk-TLGFBM3F.js +12116 -0
- package/node_modules/pi-lens/dist/chunk-TO6WL3GM.js +88 -0
- package/node_modules/pi-lens/dist/chunk-TT22N74J.js +517 -0
- package/node_modules/pi-lens/dist/chunk-TVN5N6GY.js +21216 -0
- package/node_modules/pi-lens/dist/chunk-U3VGR4VU.js +308 -0
- package/node_modules/pi-lens/dist/chunk-UK3CMEAL.js +1250 -0
- package/node_modules/pi-lens/dist/chunk-UOPVJQ4N.js +103 -0
- package/node_modules/pi-lens/dist/chunk-UXVNL3D7.js +23 -0
- package/node_modules/pi-lens/dist/chunk-UY752QSN.js +45 -0
- package/node_modules/pi-lens/dist/chunk-V5PXFSZK.js +188 -0
- package/node_modules/pi-lens/dist/chunk-V7R425XG.js +398 -0
- package/node_modules/pi-lens/dist/chunk-VCSRSYLF.js +81 -0
- package/node_modules/pi-lens/dist/chunk-VD4JQCQC.js +162 -0
- package/node_modules/pi-lens/dist/chunk-VDBPVIKD.js +62 -0
- package/node_modules/pi-lens/dist/chunk-VHQLPIRJ.js +114 -0
- package/node_modules/pi-lens/dist/chunk-VN2AXLEX.js +5414 -0
- package/node_modules/pi-lens/dist/chunk-VNMT7C64.js +478 -0
- package/node_modules/pi-lens/dist/chunk-WONERJTP.js +309 -0
- package/node_modules/pi-lens/dist/chunk-XECLWQZN.js +85 -0
- package/node_modules/pi-lens/dist/chunk-XIMYZ3JA.js +27 -0
- package/node_modules/pi-lens/dist/chunk-XK4CIILI.js +144 -0
- package/node_modules/pi-lens/dist/chunk-Y4T27COV.js +562 -0
- package/node_modules/pi-lens/dist/chunk-YGVYKNSN.js +1860 -0
- package/node_modules/pi-lens/dist/chunk-YLF3PPT5.js +308 -0
- package/node_modules/pi-lens/dist/chunk-YSNFMJKN.js +14 -0
- package/node_modules/pi-lens/dist/chunk-Z3CCVDUB.js +76 -0
- package/node_modules/pi-lens/dist/chunk-Z54ZSOBZ.js +61 -0
- package/node_modules/pi-lens/dist/chunk-ZAWW3AF6.js +97 -0
- package/node_modules/pi-lens/dist/chunk-ZMOL6RQC.js +167 -0
- package/node_modules/pi-lens/dist/index.js +16456 -8335
- package/node_modules/pi-lens/dist/mcp/analyze-cli.js +186 -232
- package/node_modules/pi-lens/dist/mcp/cli.js +137 -98
- package/node_modules/pi-lens/dist/mcp/server.js +22589 -1573
- package/node_modules/pi-lens/dist/mcp/worker.js +97 -38
- package/node_modules/pi-lens/dist/probes/installer.js +135 -0
- package/node_modules/pi-lens/dist/workers/project-snapshot-persist-worker.js +22 -0
- package/node_modules/pi-lens/dist/workers/review-graph-persist-worker.js +15 -0
- package/node_modules/pi-lens/docs/agent-guide.md +13 -4
- package/node_modules/pi-lens/docs/agent-tools.md +42 -0
- package/node_modules/pi-lens/docs/ast-grep_rules_catalog.md +3 -2
- package/node_modules/pi-lens/docs/configuration.md +20 -1
- package/node_modules/pi-lens/docs/environment-variables.md +52 -2
- package/node_modules/pi-lens/docs/features.md +8 -4
- package/node_modules/pi-lens/docs/globalconfig.md +1 -0
- package/node_modules/pi-lens/docs/io-bridge-v2-migration.md +94 -0
- package/node_modules/pi-lens/docs/lsp-capability-matrix.md +36 -4
- package/node_modules/pi-lens/docs/lsp-idle-eviction.md +124 -0
- package/node_modules/pi-lens/docs/mcp.md +21 -5
- package/node_modules/pi-lens/docs/merge-queue-rollout.md +77 -0
- package/node_modules/pi-lens/docs/pi-lens-fixer.md +156 -88
- package/node_modules/pi-lens/docs/pi-lens-investigator.md +74 -26
- package/node_modules/pi-lens/docs/pi-lens-merge-policy.md +694 -0
- package/node_modules/pi-lens/docs/pi-lens-monitor.md +73 -7
- package/node_modules/pi-lens/docs/pi-lens-retro.md +6 -4
- package/node_modules/pi-lens/docs/pi-lens-reviewer.md +188 -48
- package/node_modules/pi-lens/docs/pi-lens-subagent.md +246 -45
- package/node_modules/pi-lens/docs/pi-lens-warden.md +18 -7
- package/node_modules/pi-lens/docs/public-api-stability.md +55 -0
- package/node_modules/pi-lens/docs/release-qa-baseline.md +84 -17
- package/node_modules/pi-lens/docs/rfcs/3654-unified-io-bridge-v2.md +316 -0
- package/node_modules/pi-lens/docs/servercapabilities.md +53 -49
- package/node_modules/pi-lens/docs/settings.md +1 -0
- package/node_modules/pi-lens/docs/usage.md +5 -1
- package/node_modules/pi-lens/grammars/tree-sitter-bash.wasm +0 -0
- package/node_modules/pi-lens/grammars/tree-sitter-bash.wasm.json +3 -3
- package/node_modules/pi-lens/package.json +18 -6
- package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/advisory-registry-subset-test.yml +41 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/advisory-registry-subset.yml +50 -0
- package/node_modules/pi-lens/scripts/analyze-pi-lens-logs.mjs +1275 -62
- package/node_modules/pi-lens/scripts/download-grammars.js +5 -0
- package/node_modules/pi-lens/scripts/grammars.lock.json +6 -1
- package/node_modules/pi-lens/scripts/install-selftest.mjs +33 -34
- package/node_modules/pi-lens/scripts/lib/host-provided-deps.mjs +13 -4
- package/node_modules/pi-lens/scripts/lib/web-tree-sitter-dir.mjs +18 -0
- package/package.json +15 -10
- package/node_modules/@dietrichgebert/ponytail/README.es.md +0 -212
- package/node_modules/@dietrichgebert/ponytail/README.ja.md +0 -212
- package/node_modules/@dietrichgebert/ponytail/README.ko.md +0 -212
- package/node_modules/@dietrichgebert/ponytail/README.zh-CN.md +0 -212
- package/node_modules/pi-lens/dist/clients/actionable-warnings-logger.js +0 -35
- package/node_modules/pi-lens/dist/clients/actionable-warnings.js +0 -1610
- package/node_modules/pi-lens/dist/clients/advisory-provenance.js +0 -593
- package/node_modules/pi-lens/dist/clients/agent-behavior-client.js +0 -147
- package/node_modules/pi-lens/dist/clients/agent-nudge.js +0 -325
- package/node_modules/pi-lens/dist/clients/analysed-root.js +0 -1
- package/node_modules/pi-lens/dist/clients/ast-grep-client.js +0 -731
- package/node_modules/pi-lens/dist/clients/ast-grep-rule-manager.js +0 -146
- package/node_modules/pi-lens/dist/clients/ast-grep-tool-logger.js +0 -118
- package/node_modules/pi-lens/dist/clients/ast-grep-types.js +0 -10
- package/node_modules/pi-lens/dist/clients/ast-grep-yaml-synth.js +0 -154
- package/node_modules/pi-lens/dist/clients/atomic-write-staging.js +0 -75
- package/node_modules/pi-lens/dist/clients/atomic-write.js +0 -189
- package/node_modules/pi-lens/dist/clients/availability-probe-flight.js +0 -12
- package/node_modules/pi-lens/dist/clients/bash-file-access.js +0 -1056
- package/node_modules/pi-lens/dist/clients/biome-client.js +0 -357
- package/node_modules/pi-lens/dist/clients/blocker-freshness.js +0 -837
- package/node_modules/pi-lens/dist/clients/blocker-past-eof.js +0 -129
- package/node_modules/pi-lens/dist/clients/bootstrap.js +0 -569
- package/node_modules/pi-lens/dist/clients/bounded-cache.js +0 -190
- package/node_modules/pi-lens/dist/clients/bounded-pid-file-lock.js +0 -202
- package/node_modules/pi-lens/dist/clients/bounded-telemetry.js +0 -295
- package/node_modules/pi-lens/dist/clients/build-identity.js +0 -95
- package/node_modules/pi-lens/dist/clients/bundled-resource-health.js +0 -113
- package/node_modules/pi-lens/dist/clients/bus-events-logger.js +0 -105
- package/node_modules/pi-lens/dist/clients/bus-publish.js +0 -171
- package/node_modules/pi-lens/dist/clients/cache/rule-cache.js +0 -190
- package/node_modules/pi-lens/dist/clients/cache-manager.js +0 -524
- package/node_modules/pi-lens/dist/clients/cache-observability.js +0 -1313
- package/node_modules/pi-lens/dist/clients/call-graph.js +0 -852
- package/node_modules/pi-lens/dist/clients/cargo-manifest.js +0 -422
- package/node_modules/pi-lens/dist/clients/cascade-budget.js +0 -196
- package/node_modules/pi-lens/dist/clients/cascade-format.js +0 -315
- package/node_modules/pi-lens/dist/clients/cascade-logger.js +0 -31
- package/node_modules/pi-lens/dist/clients/cascade-types.js +0 -9
- package/node_modules/pi-lens/dist/clients/child-unref.js +0 -124
- package/node_modules/pi-lens/dist/clients/code-quality-warnings.js +0 -286
- package/node_modules/pi-lens/dist/clients/codebase-model.js +0 -173
- package/node_modules/pi-lens/dist/clients/collateral-test-role.js +0 -40
- package/node_modules/pi-lens/dist/clients/complexity-client.js +0 -462
- package/node_modules/pi-lens/dist/clients/config-core/deny.js +0 -221
- package/node_modules/pi-lens/dist/clients/config-core/index.js +0 -50
- package/node_modules/pi-lens/dist/clients/config-core/merge.js +0 -357
- package/node_modules/pi-lens/dist/clients/config-core/normalize.js +0 -340
- package/node_modules/pi-lens/dist/clients/config-core/process-spec.js +0 -248
- package/node_modules/pi-lens/dist/clients/config-core/provenance.js +0 -164
- package/node_modules/pi-lens/dist/clients/config-core/records.js +0 -218
- package/node_modules/pi-lens/dist/clients/config-core/resolve.js +0 -125
- package/node_modules/pi-lens/dist/clients/config-core/safe-object.js +0 -78
- package/node_modules/pi-lens/dist/clients/config-core/schema.js +0 -165
- package/node_modules/pi-lens/dist/clients/config-diagnostic-codes.js +0 -285
- package/node_modules/pi-lens/dist/clients/config-locations.js +0 -388
- package/node_modules/pi-lens/dist/clients/config-resolve.js +0 -798
- package/node_modules/pi-lens/dist/clients/config-schema.js +0 -251
- package/node_modules/pi-lens/dist/clients/config-warn.js +0 -407
- package/node_modules/pi-lens/dist/clients/console-guard-install.js +0 -26
- package/node_modules/pi-lens/dist/clients/cooperative-budget.js +0 -42
- package/node_modules/pi-lens/dist/clients/dead-code-client.js +0 -510
- package/node_modules/pi-lens/dist/clients/dead-code-logger.js +0 -30
- package/node_modules/pi-lens/dist/clients/deadline-utils.js +0 -280
- package/node_modules/pi-lens/dist/clients/debug-handles.js +0 -211
- package/node_modules/pi-lens/dist/clients/debug-heap.js +0 -174
- package/node_modules/pi-lens/dist/clients/deferred-lsp-work.js +0 -106
- package/node_modules/pi-lens/dist/clients/degradation-ledger.js +0 -426
- package/node_modules/pi-lens/dist/clients/demoted-finding-render.js +0 -169
- package/node_modules/pi-lens/dist/clients/dependency-checker.js +0 -885
- package/node_modules/pi-lens/dist/clients/deps/ast-grep-napi.js +0 -22
- package/node_modules/pi-lens/dist/clients/deps/js-yaml.js +0 -9
- package/node_modules/pi-lens/dist/clients/deps/minimatch.js +0 -4
- package/node_modules/pi-lens/dist/clients/deps/pi-tui.js +0 -14
- package/node_modules/pi-lens/dist/clients/deps/typebox.js +0 -14
- package/node_modules/pi-lens/dist/clients/deps/vscode-jsonrpc.js +0 -1
- package/node_modules/pi-lens/dist/clients/deps/web-tree-sitter.js +0 -24
- package/node_modules/pi-lens/dist/clients/diagnostic-dispositions.js +0 -630
- package/node_modules/pi-lens/dist/clients/diagnostic-line-freshness.js +0 -305
- package/node_modules/pi-lens/dist/clients/diagnostic-logger.js +0 -73
- package/node_modules/pi-lens/dist/clients/diagnostic-tracker.js +0 -105
- package/node_modules/pi-lens/dist/clients/diagnostics-publish.js +0 -230
- package/node_modules/pi-lens/dist/clients/dispatch/ast-grep-catalog.js +0 -65
- package/node_modules/pi-lens/dist/clients/dispatch/auxiliary-lsp.js +0 -343
- package/node_modules/pi-lens/dist/clients/dispatch/collect-later-tier.js +0 -35
- package/node_modules/pi-lens/dist/clients/dispatch/diagnostic-taxonomy.js +0 -66
- package/node_modules/pi-lens/dist/clients/dispatch/dispatcher.js +0 -1269
- package/node_modules/pi-lens/dist/clients/dispatch/fact-provider-types.js +0 -1
- package/node_modules/pi-lens/dist/clients/dispatch/fact-rule-runner.js +0 -17
- package/node_modules/pi-lens/dist/clients/dispatch/fact-runner.js +0 -30
- package/node_modules/pi-lens/dist/clients/dispatch/fact-scheduler.js +0 -68
- package/node_modules/pi-lens/dist/clients/dispatch/fact-store.js +0 -377
- package/node_modules/pi-lens/dist/clients/dispatch/facts/comment-facts.js +0 -22
- package/node_modules/pi-lens/dist/clients/dispatch/facts/file-content.js +0 -19
- package/node_modules/pi-lens/dist/clients/dispatch/facts/function-facts.js +0 -348
- package/node_modules/pi-lens/dist/clients/dispatch/facts/import-facts.js +0 -204
- package/node_modules/pi-lens/dist/clients/dispatch/facts/tree-sitter-facts.js +0 -34
- package/node_modules/pi-lens/dist/clients/dispatch/facts/try-catch-facts.js +0 -119
- package/node_modules/pi-lens/dist/clients/dispatch/finding-policy.js +0 -339
- package/node_modules/pi-lens/dist/clients/dispatch/indent-detect.js +0 -417
- package/node_modules/pi-lens/dist/clients/dispatch/inline-suppressions.js +0 -89
- package/node_modules/pi-lens/dist/clients/dispatch/integration.js +0 -2377
- package/node_modules/pi-lens/dist/clients/dispatch/lazy.js +0 -11
- package/node_modules/pi-lens/dist/clients/dispatch/pending-runner-findings.js +0 -87
- package/node_modules/pi-lens/dist/clients/dispatch/plan.js +0 -278
- package/node_modules/pi-lens/dist/clients/dispatch/priorities.js +0 -20
- package/node_modules/pi-lens/dist/clients/dispatch/rule-id-normalize.js +0 -50
- package/node_modules/pi-lens/dist/clients/dispatch/rule-ignores.js +0 -69
- package/node_modules/pi-lens/dist/clients/dispatch/rule-policy.js +0 -135
- package/node_modules/pi-lens/dist/clients/dispatch/rules/async-noise.js +0 -40
- package/node_modules/pi-lens/dist/clients/dispatch/rules/async-unnecessary-wrapper.js +0 -27
- package/node_modules/pi-lens/dist/clients/dispatch/rules/cors-wildcard.js +0 -54
- package/node_modules/pi-lens/dist/clients/dispatch/rules/error-obscuring.js +0 -32
- package/node_modules/pi-lens/dist/clients/dispatch/rules/error-swallowing.js +0 -31
- package/node_modules/pi-lens/dist/clients/dispatch/rules/framework-call-noise.js +0 -67
- package/node_modules/pi-lens/dist/clients/dispatch/rules/high-complexity.js +0 -72
- package/node_modules/pi-lens/dist/clients/dispatch/rules/high-fan-out.js +0 -74
- package/node_modules/pi-lens/dist/clients/dispatch/rules/high-import-coupling.js +0 -37
- package/node_modules/pi-lens/dist/clients/dispatch/rules/missing-error-propagation.js +0 -62
- package/node_modules/pi-lens/dist/clients/dispatch/rules/no-commented-credentials.js +0 -52
- package/node_modules/pi-lens/dist/clients/dispatch/rules/pass-through-wrappers.js +0 -42
- package/node_modules/pi-lens/dist/clients/dispatch/rules/placeholder-comments.js +0 -40
- package/node_modules/pi-lens/dist/clients/dispatch/rules/unsafe-boundary.js +0 -126
- package/node_modules/pi-lens/dist/clients/dispatch/runner-context.js +0 -52
- package/node_modules/pi-lens/dist/clients/dispatch/runners/actionlint.js +0 -111
- package/node_modules/pi-lens/dist/clients/dispatch/runners/ast-grep-napi.js +0 -1196
- package/node_modules/pi-lens/dist/clients/dispatch/runners/biome-check.js +0 -296
- package/node_modules/pi-lens/dist/clients/dispatch/runners/cpp-check.js +0 -219
- package/node_modules/pi-lens/dist/clients/dispatch/runners/credo.js +0 -82
- package/node_modules/pi-lens/dist/clients/dispatch/runners/cue-vet.js +0 -416
- package/node_modules/pi-lens/dist/clients/dispatch/runners/dart-analyze.js +0 -183
- package/node_modules/pi-lens/dist/clients/dispatch/runners/detekt.js +0 -176
- package/node_modules/pi-lens/dist/clients/dispatch/runners/dotnet-build.js +0 -164
- package/node_modules/pi-lens/dist/clients/dispatch/runners/elixir-check.js +0 -195
- package/node_modules/pi-lens/dist/clients/dispatch/runners/eslint.js +0 -137
- package/node_modules/pi-lens/dist/clients/dispatch/runners/fact-rules.js +0 -29
- package/node_modules/pi-lens/dist/clients/dispatch/runners/fish-indent.js +0 -69
- package/node_modules/pi-lens/dist/clients/dispatch/runners/gleam-check.js +0 -167
- package/node_modules/pi-lens/dist/clients/dispatch/runners/go-vet.js +0 -104
- package/node_modules/pi-lens/dist/clients/dispatch/runners/golangci-lint.js +0 -135
- package/node_modules/pi-lens/dist/clients/dispatch/runners/hadolint.js +0 -91
- package/node_modules/pi-lens/dist/clients/dispatch/runners/helm-lint.js +0 -171
- package/node_modules/pi-lens/dist/clients/dispatch/runners/helm-render.js +0 -940
- package/node_modules/pi-lens/dist/clients/dispatch/runners/htmlhint.js +0 -117
- package/node_modules/pi-lens/dist/clients/dispatch/runners/index.js +0 -108
- package/node_modules/pi-lens/dist/clients/dispatch/runners/javac.js +0 -99
- package/node_modules/pi-lens/dist/clients/dispatch/runners/ktlint.js +0 -110
- package/node_modules/pi-lens/dist/clients/dispatch/runners/lsp.js +0 -379
- package/node_modules/pi-lens/dist/clients/dispatch/runners/markdownlint.js +0 -167
- package/node_modules/pi-lens/dist/clients/dispatch/runners/mypy.js +0 -102
- package/node_modules/pi-lens/dist/clients/dispatch/runners/oxlint.js +0 -414
- package/node_modules/pi-lens/dist/clients/dispatch/runners/php-lint.js +0 -85
- package/node_modules/pi-lens/dist/clients/dispatch/runners/phpstan.js +0 -120
- package/node_modules/pi-lens/dist/clients/dispatch/runners/prisma-validate.js +0 -62
- package/node_modules/pi-lens/dist/clients/dispatch/runners/psscriptanalyzer.js +0 -445
- package/node_modules/pi-lens/dist/clients/dispatch/runners/pyright.js +0 -169
- package/node_modules/pi-lens/dist/clients/dispatch/runners/rubocop.js +0 -99
- package/node_modules/pi-lens/dist/clients/dispatch/runners/ruff.js +0 -88
- package/node_modules/pi-lens/dist/clients/dispatch/runners/rust-clippy.js +0 -256
- package/node_modules/pi-lens/dist/clients/dispatch/runners/shellcheck.js +0 -173
- package/node_modules/pi-lens/dist/clients/dispatch/runners/shfmt.js +0 -102
- package/node_modules/pi-lens/dist/clients/dispatch/runners/spellcheck.js +0 -128
- package/node_modules/pi-lens/dist/clients/dispatch/runners/spotbugs.js +0 -259
- package/node_modules/pi-lens/dist/clients/dispatch/runners/sqlfluff.js +0 -183
- package/node_modules/pi-lens/dist/clients/dispatch/runners/stylelint.js +0 -166
- package/node_modules/pi-lens/dist/clients/dispatch/runners/swiftlint.js +0 -163
- package/node_modules/pi-lens/dist/clients/dispatch/runners/taplo.js +0 -174
- package/node_modules/pi-lens/dist/clients/dispatch/runners/terragrunt.js +0 -168
- package/node_modules/pi-lens/dist/clients/dispatch/runners/tflint.js +0 -125
- package/node_modules/pi-lens/dist/clients/dispatch/runners/tree-sitter.js +0 -643
- package/node_modules/pi-lens/dist/clients/dispatch/runners/trivy-config.js +0 -253
- package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/availability-policy.js +0 -496
- package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/candidate-probe.js +0 -90
- package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/diagnostic-parsers.js +0 -95
- package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/lazy-installer.js +0 -274
- package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/runner-helpers.js +0 -1701
- package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/spawn-outcome.js +0 -101
- package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/tool-failure.js +0 -235
- package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/toolchain-availability.js +0 -169
- package/node_modules/pi-lens/dist/clients/dispatch/runners/utils.js +0 -15
- package/node_modules/pi-lens/dist/clients/dispatch/runners/vale.js +0 -128
- package/node_modules/pi-lens/dist/clients/dispatch/runners/yaml-rule-parser.js +0 -242
- package/node_modules/pi-lens/dist/clients/dispatch/runners/yamllint.js +0 -95
- package/node_modules/pi-lens/dist/clients/dispatch/runners/zig-check.js +0 -79
- package/node_modules/pi-lens/dist/clients/dispatch/suppress-writer.js +0 -79
- package/node_modules/pi-lens/dist/clients/dispatch/tool-profile.js +0 -30
- package/node_modules/pi-lens/dist/clients/dispatch/types.js +0 -21
- package/node_modules/pi-lens/dist/clients/dispatch/utils/format-utils.js +0 -45
- package/node_modules/pi-lens/dist/clients/dispatch/utils/lsp-diagnostics.js +0 -35
- package/node_modules/pi-lens/dist/clients/disposition-logger.js +0 -32
- package/node_modules/pi-lens/dist/clients/disposition-publish.js +0 -124
- package/node_modules/pi-lens/dist/clients/durable-store.js +0 -97
- package/node_modules/pi-lens/dist/clients/effective-config.js +0 -415
- package/node_modules/pi-lens/dist/clients/env-utils.js +0 -83
- package/node_modules/pi-lens/dist/clients/error-class.js +0 -23
- package/node_modules/pi-lens/dist/clients/eval-timestamp.js +0 -17
- package/node_modules/pi-lens/dist/clients/event-loop-hold.js +0 -274
- package/node_modules/pi-lens/dist/clients/event-loop-monitor.js +0 -250
- package/node_modules/pi-lens/dist/clients/extension-log.js +0 -504
- package/node_modules/pi-lens/dist/clients/extension-mode.js +0 -73
- package/node_modules/pi-lens/dist/clients/feature-hints.js +0 -103
- package/node_modules/pi-lens/dist/clients/file-kinds.js +0 -412
- package/node_modules/pi-lens/dist/clients/file-role.js +0 -134
- package/node_modules/pi-lens/dist/clients/file-time.js +0 -160
- package/node_modules/pi-lens/dist/clients/file-utils.js +0 -1032
- package/node_modules/pi-lens/dist/clients/finding-delivery-gate.js +0 -494
- package/node_modules/pi-lens/dist/clients/finding-identity.js +0 -88
- package/node_modules/pi-lens/dist/clients/fix-worklog.js +0 -103
- package/node_modules/pi-lens/dist/clients/format-events-publish.js +0 -343
- package/node_modules/pi-lens/dist/clients/format-service.js +0 -222
- package/node_modules/pi-lens/dist/clients/formatters-lazy.js +0 -9
- package/node_modules/pi-lens/dist/clients/formatters.js +0 -2032
- package/node_modules/pi-lens/dist/clients/freshness-cadence.js +0 -17
- package/node_modules/pi-lens/dist/clients/freshness.js +0 -38
- package/node_modules/pi-lens/dist/clients/generated-artifacts.js +0 -394
- package/node_modules/pi-lens/dist/clients/generation-guard.js +0 -215
- package/node_modules/pi-lens/dist/clients/git-guard.js +0 -1136
- package/node_modules/pi-lens/dist/clients/git-tracked-ignore.js +0 -243
- package/node_modules/pi-lens/dist/clients/gitleaks-client.js +0 -509
- package/node_modules/pi-lens/dist/clients/go-client.js +0 -104
- package/node_modules/pi-lens/dist/clients/govulncheck-client.js +0 -605
- package/node_modules/pi-lens/dist/clients/gradle-ktfmt-style.js +0 -348
- package/node_modules/pi-lens/dist/clients/grammar-source.js +0 -465
- package/node_modules/pi-lens/dist/clients/gzip-stage-write.js +0 -135
- package/node_modules/pi-lens/dist/clients/hashline-anchor.js +0 -424
- package/node_modules/pi-lens/dist/clients/hook-budgets.js +0 -76
- package/node_modules/pi-lens/dist/clients/host-edit-normalize.js +0 -140
- package/node_modules/pi-lens/dist/clients/host-ports.js +0 -39
- package/node_modules/pi-lens/dist/clients/indent-retarget.js +0 -154
- package/node_modules/pi-lens/dist/clients/inline-blocker-dispositions.js +0 -186
- package/node_modules/pi-lens/dist/clients/install-diagnostics.js +0 -156
- package/node_modules/pi-lens/dist/clients/installer/index.js +0 -5416
- package/node_modules/pi-lens/dist/clients/installer/managed-tool-refresh-session.js +0 -58
- package/node_modules/pi-lens/dist/clients/installer/managed-tool-refresh.js +0 -783
- package/node_modules/pi-lens/dist/clients/instance-reaper-state.js +0 -7
- package/node_modules/pi-lens/dist/clients/instance-reaper.js +0 -1137
- package/node_modules/pi-lens/dist/clients/instance-registry-lock.js +0 -145
- package/node_modules/pi-lens/dist/clients/instance-registry.js +0 -773
- package/node_modules/pi-lens/dist/clients/jscpd-client.js +0 -378
- package/node_modules/pi-lens/dist/clients/json-cache-read.js +0 -65
- package/node_modules/pi-lens/dist/clients/knip-client.js +0 -788
- package/node_modules/pi-lens/dist/clients/language-policy.js +0 -252
- package/node_modules/pi-lens/dist/clients/language-profile.js +0 -361
- package/node_modules/pi-lens/dist/clients/language-registry.js +0 -603
- package/node_modules/pi-lens/dist/clients/latency-logger.js +0 -727
- package/node_modules/pi-lens/dist/clients/lazy-import.js +0 -21
- package/node_modules/pi-lens/dist/clients/ledger-bounds.js +0 -54
- package/node_modules/pi-lens/dist/clients/lens-config.js +0 -404
- package/node_modules/pi-lens/dist/clients/lens-engine.js +0 -358
- package/node_modules/pi-lens/dist/clients/lens-events.js +0 -125
- package/node_modules/pi-lens/dist/clients/lens-flag-registry.js +0 -467
- package/node_modules/pi-lens/dist/clients/lens-map.js +0 -1156
- package/node_modules/pi-lens/dist/clients/live-bus-emitter.js +0 -74
- package/node_modules/pi-lens/dist/clients/log-cleanup.js +0 -222
- package/node_modules/pi-lens/dist/clients/lsp/aggregation.js +0 -178
- package/node_modules/pi-lens/dist/clients/lsp/cascade-tier.js +0 -421
- package/node_modules/pi-lens/dist/clients/lsp/client.js +0 -4593
- package/node_modules/pi-lens/dist/clients/lsp/config.js +0 -691
- package/node_modules/pi-lens/dist/clients/lsp/content-limits.js +0 -41
- package/node_modules/pi-lens/dist/clients/lsp/diagnostic-binding.js +0 -225
- package/node_modules/pi-lens/dist/clients/lsp/document-drift.js +0 -467
- package/node_modules/pi-lens/dist/clients/lsp/edits.js +0 -1219
- package/node_modules/pi-lens/dist/clients/lsp/index.js +0 -8305
- package/node_modules/pi-lens/dist/clients/lsp/inferred-project.js +0 -216
- package/node_modules/pi-lens/dist/clients/lsp/jvm-runtime.js +0 -298
- package/node_modules/pi-lens/dist/clients/lsp/language.js +0 -63
- package/node_modules/pi-lens/dist/clients/lsp/launch.js +0 -746
- package/node_modules/pi-lens/dist/clients/lsp/lombok.js +0 -158
- package/node_modules/pi-lens/dist/clients/lsp/path-utils.js +0 -5
- package/node_modules/pi-lens/dist/clients/lsp/pending-aux-coverage.js +0 -251
- package/node_modules/pi-lens/dist/clients/lsp/position-encoding.js +0 -61
- package/node_modules/pi-lens/dist/clients/lsp/ruby-drive-dirs.js +0 -83
- package/node_modules/pi-lens/dist/clients/lsp/server.js +0 -3290
- package/node_modules/pi-lens/dist/clients/lsp/session-roots.js +0 -192
- package/node_modules/pi-lens/dist/clients/lsp/spawn-history.js +0 -17
- package/node_modules/pi-lens/dist/clients/lsp/sync-kind.js +0 -56
- package/node_modules/pi-lens/dist/clients/lsp/tsserver-sync.js +0 -332
- package/node_modules/pi-lens/dist/clients/lsp/wait-policy/capability-snapshot.js +0 -1
- package/node_modules/pi-lens/dist/clients/lsp/wait-policy/classification.js +0 -85
- package/node_modules/pi-lens/dist/clients/lsp/wait-policy/index.js +0 -10
- package/node_modules/pi-lens/dist/clients/lsp/wait-policy/strategies.js +0 -392
- package/node_modules/pi-lens/dist/clients/lsp/watch-queue.js +0 -61
- package/node_modules/pi-lens/dist/clients/lsp/workspace-diagnostics-cache.js +0 -639
- package/node_modules/pi-lens/dist/clients/lsp/workspace-diagnostics-session.js +0 -30
- package/node_modules/pi-lens/dist/clients/lsp/workspace-sweep-hold.js +0 -184
- package/node_modules/pi-lens/dist/clients/lsp-budget.js +0 -186
- package/node_modules/pi-lens/dist/clients/lsp-document-symbols.js +0 -110
- package/node_modules/pi-lens/dist/clients/lsp-lazy.js +0 -9
- package/node_modules/pi-lens/dist/clients/lsp-mutation.js +0 -396
- package/node_modules/pi-lens/dist/clients/lsp-status.js +0 -59
- package/node_modules/pi-lens/dist/clients/map-with-concurrency.js +0 -40
- package/node_modules/pi-lens/dist/clients/mcp/analyze.js +0 -420
- package/node_modules/pi-lens/dist/clients/mcp/host-shim.js +0 -31
- package/node_modules/pi-lens/dist/clients/mcp/ipc.js +0 -523
- package/node_modules/pi-lens/dist/clients/mcp/review.js +0 -197
- package/node_modules/pi-lens/dist/clients/mcp/session.js +0 -412
- package/node_modules/pi-lens/dist/clients/memory-sampler.js +0 -208
- package/node_modules/pi-lens/dist/clients/message-end-attribution.js +0 -30
- package/node_modules/pi-lens/dist/clients/metrics-client.js +0 -107
- package/node_modules/pi-lens/dist/clients/metrics-history.js +0 -327
- package/node_modules/pi-lens/dist/clients/middle-man-analysis.js +0 -263
- package/node_modules/pi-lens/dist/clients/model-provider.js +0 -53
- package/node_modules/pi-lens/dist/clients/module-report-lsp.js +0 -189
- package/node_modules/pi-lens/dist/clients/module-report.js +0 -2150
- package/node_modules/pi-lens/dist/clients/mutating-tool.js +0 -651
- package/node_modules/pi-lens/dist/clients/mutation-attribution.js +0 -368
- package/node_modules/pi-lens/dist/clients/mutation-bridge.js +0 -240
- package/node_modules/pi-lens/dist/clients/ndjson-logger.js +0 -734
- package/node_modules/pi-lens/dist/clients/observed-mutation-sources.js +0 -101
- package/node_modules/pi-lens/dist/clients/observed-mutation.js +0 -1253
- package/node_modules/pi-lens/dist/clients/oldtext-autopatch.js +0 -128
- package/node_modules/pi-lens/dist/clients/opaque-mutation-scan.js +0 -496
- package/node_modules/pi-lens/dist/clients/opengrep-client.js +0 -333
- package/node_modules/pi-lens/dist/clients/opengrep-config.js +0 -76
- package/node_modules/pi-lens/dist/clients/package-manager.js +0 -607
- package/node_modules/pi-lens/dist/clients/package-root.js +0 -38
- package/node_modules/pi-lens/dist/clients/partial-edit-apply.js +0 -439
- package/node_modules/pi-lens/dist/clients/path-attribution-telemetry.js +0 -43
- package/node_modules/pi-lens/dist/clients/path-keyed-map.js +0 -108
- package/node_modules/pi-lens/dist/clients/path-utils.js +0 -1244
- package/node_modules/pi-lens/dist/clients/performance-report.js +0 -331
- package/node_modules/pi-lens/dist/clients/persist-debounce.js +0 -70
- package/node_modules/pi-lens/dist/clients/persistent-reverify.js +0 -271
- package/node_modules/pi-lens/dist/clients/php-cs-fixer-config.js +0 -119
- package/node_modules/pi-lens/dist/clients/pipeline.js +0 -1480
- package/node_modules/pi-lens/dist/clients/post-autofix-notice.js +0 -37
- package/node_modules/pi-lens/dist/clients/print-mode.js +0 -21
- package/node_modules/pi-lens/dist/clients/probe-home-state.js +0 -228
- package/node_modules/pi-lens/dist/clients/process-bridge.js +0 -66
- package/node_modules/pi-lens/dist/clients/process-singletons.js +0 -210
- package/node_modules/pi-lens/dist/clients/process-snapshot.js +0 -68
- package/node_modules/pi-lens/dist/clients/project-changes.js +0 -181
- package/node_modules/pi-lens/dist/clients/project-conventions.js +0 -171
- package/node_modules/pi-lens/dist/clients/project-diagnostics/cache.js +0 -137
- package/node_modules/pi-lens/dist/clients/project-diagnostics/extractors.js +0 -109
- package/node_modules/pi-lens/dist/clients/project-diagnostics/fresh-fetch.js +0 -668
- package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/call-graph-impact.js +0 -118
- package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/dead-code.js +0 -47
- package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/gitleaks.js +0 -40
- package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/govulncheck.js +0 -34
- package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/jscpd.js +0 -38
- package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/knip.js +0 -47
- package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/madge.js +0 -48
- package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/opengrep.js +0 -40
- package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/runner-findings.js +0 -127
- package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/trivy.js +0 -81
- package/node_modules/pi-lens/dist/clients/project-diagnostics/scanner.js +0 -520
- package/node_modules/pi-lens/dist/clients/project-diagnostics/types.js +0 -1
- package/node_modules/pi-lens/dist/clients/project-lens-config.js +0 -807
- package/node_modules/pi-lens/dist/clients/project-report.js +0 -701
- package/node_modules/pi-lens/dist/clients/project-scale.js +0 -237
- package/node_modules/pi-lens/dist/clients/project-scan-policy.js +0 -11
- package/node_modules/pi-lens/dist/clients/project-snapshot-fingerprint.js +0 -48
- package/node_modules/pi-lens/dist/clients/project-snapshot-persist-worker.js +0 -20
- package/node_modules/pi-lens/dist/clients/project-snapshot.js +0 -1653
- package/node_modules/pi-lens/dist/clients/project-trust.js +0 -181
- package/node_modules/pi-lens/dist/clients/python-environment.js +0 -217
- package/node_modules/pi-lens/dist/clients/python-provenance.js +0 -639
- package/node_modules/pi-lens/dist/clients/quiet-window-config.js +0 -47
- package/node_modules/pi-lens/dist/clients/quiet-window.js +0 -236
- package/node_modules/pi-lens/dist/clients/read-bridge.js +0 -139
- package/node_modules/pi-lens/dist/clients/read-expansion.js +0 -266
- package/node_modules/pi-lens/dist/clients/read-guard-logger.js +0 -251
- package/node_modules/pi-lens/dist/clients/read-guard-tool-lines.js +0 -1306
- package/node_modules/pi-lens/dist/clients/read-guard.js +0 -1561
- package/node_modules/pi-lens/dist/clients/recent-touches.js +0 -240
- package/node_modules/pi-lens/dist/clients/redact/secrets.js +0 -449
- package/node_modules/pi-lens/dist/clients/resource-sampler.js +0 -628
- package/node_modules/pi-lens/dist/clients/reverse-deps.js +0 -270
- package/node_modules/pi-lens/dist/clients/review-graph/builder.js +0 -5126
- package/node_modules/pi-lens/dist/clients/review-graph/format.js +0 -33
- package/node_modules/pi-lens/dist/clients/review-graph/git-identity.js +0 -163
- package/node_modules/pi-lens/dist/clients/review-graph/import-resolvers.js +0 -481
- package/node_modules/pi-lens/dist/clients/review-graph/persist-worker.js +0 -10
- package/node_modules/pi-lens/dist/clients/review-graph/query.js +0 -244
- package/node_modules/pi-lens/dist/clients/review-graph/revision-drift.js +0 -21
- package/node_modules/pi-lens/dist/clients/review-graph/service.js +0 -96
- package/node_modules/pi-lens/dist/clients/review-graph/shared-extraction-ir.js +0 -82
- package/node_modules/pi-lens/dist/clients/review-graph/symbol-id.js +0 -103
- package/node_modules/pi-lens/dist/clients/review-graph/tsconfig-paths.js +0 -299
- package/node_modules/pi-lens/dist/clients/review-graph/types.js +0 -1
- package/node_modules/pi-lens/dist/clients/review-graph/workspace-modules.js +0 -449
- package/node_modules/pi-lens/dist/clients/review-graph-logger.js +0 -81
- package/node_modules/pi-lens/dist/clients/ruff-client.js +0 -179
- package/node_modules/pi-lens/dist/clients/rules-scanner.js +0 -131
- package/node_modules/pi-lens/dist/clients/run-duration.js +0 -55
- package/node_modules/pi-lens/dist/clients/runtime-agent-end.js +0 -746
- package/node_modules/pi-lens/dist/clients/runtime-config.js +0 -77
- package/node_modules/pi-lens/dist/clients/runtime-context.js +0 -211
- package/node_modules/pi-lens/dist/clients/runtime-coordinator.js +0 -1324
- package/node_modules/pi-lens/dist/clients/runtime-session.js +0 -2485
- package/node_modules/pi-lens/dist/clients/runtime-tool-call.js +0 -1295
- package/node_modules/pi-lens/dist/clients/runtime-tool-result.js +0 -2049
- package/node_modules/pi-lens/dist/clients/runtime-turn.js +0 -3767
- package/node_modules/pi-lens/dist/clients/rust-client.js +0 -97
- package/node_modules/pi-lens/dist/clients/safe-spawn.js +0 -2357
- package/node_modules/pi-lens/dist/clients/sanitize.js +0 -286
- package/node_modules/pi-lens/dist/clients/scan-utils.js +0 -25
- package/node_modules/pi-lens/dist/clients/scratch-tree-policy.js +0 -165
- package/node_modules/pi-lens/dist/clients/search-read-registration.js +0 -94
- package/node_modules/pi-lens/dist/clients/secret-findings.js +0 -114
- package/node_modules/pi-lens/dist/clients/security-scan-client.js +0 -352
- package/node_modules/pi-lens/dist/clients/session-event-guard.js +0 -297
- package/node_modules/pi-lens/dist/clients/session-lifecycle.js +0 -484
- package/node_modules/pi-lens/dist/clients/session-start-observability.js +0 -94
- package/node_modules/pi-lens/dist/clients/session-state-store.js +0 -101
- package/node_modules/pi-lens/dist/clients/session-summary.js +0 -15
- package/node_modules/pi-lens/dist/clients/sessionstart-logger.js +0 -27
- package/node_modules/pi-lens/dist/clients/sg-runner.js +0 -876
- package/node_modules/pi-lens/dist/clients/sgconfig.js +0 -347
- package/node_modules/pi-lens/dist/clients/shared-checkout-guard.js +0 -338
- package/node_modules/pi-lens/dist/clients/single-flight.js +0 -158
- package/node_modules/pi-lens/dist/clients/situational-tool-telemetry.js +0 -108
- package/node_modules/pi-lens/dist/clients/skills-resolver.js +0 -141
- package/node_modules/pi-lens/dist/clients/slow-fs.js +0 -138
- package/node_modules/pi-lens/dist/clients/smells-rollup.js +0 -231
- package/node_modules/pi-lens/dist/clients/source-filter.js +0 -596
- package/node_modules/pi-lens/dist/clients/source-walker.js +0 -211
- package/node_modules/pi-lens/dist/clients/spawn-output-cap.js +0 -120
- package/node_modules/pi-lens/dist/clients/spawn-timeout-cooldown.js +0 -110
- package/node_modules/pi-lens/dist/clients/stale-marker.js +0 -17
- package/node_modules/pi-lens/dist/clients/startup-scan.js +0 -400
- package/node_modules/pi-lens/dist/clients/startup-timing.js +0 -130
- package/node_modules/pi-lens/dist/clients/string-utils.js +0 -33
- package/node_modules/pi-lens/dist/clients/subagent-mode.js +0 -111
- package/node_modules/pi-lens/dist/clients/symbol-containment.js +0 -24
- package/node_modules/pi-lens/dist/clients/symbol-types.js +0 -5
- package/node_modules/pi-lens/dist/clients/test-runner-client.js +0 -2507
- package/node_modules/pi-lens/dist/clients/test-runner-delivery.js +0 -287
- package/node_modules/pi-lens/dist/clients/todo-scanner.js +0 -229
- package/node_modules/pi-lens/dist/clients/tool-agreement.js +0 -423
- package/node_modules/pi-lens/dist/clients/tool-config.js +0 -249
- package/node_modules/pi-lens/dist/clients/tool-cwd.js +0 -270
- package/node_modules/pi-lens/dist/clients/tool-definition.js +0 -47
- package/node_modules/pi-lens/dist/clients/tool-event.js +0 -105
- package/node_modules/pi-lens/dist/clients/tool-policy.js +0 -2755
- package/node_modules/pi-lens/dist/clients/tool-probe.js +0 -53
- package/node_modules/pi-lens/dist/clients/tool-render.js +0 -156
- package/node_modules/pi-lens/dist/clients/tool-set-policy.js +0 -118
- package/node_modules/pi-lens/dist/clients/tree-sitter-cache.js +0 -364
- package/node_modules/pi-lens/dist/clients/tree-sitter-client.js +0 -4195
- package/node_modules/pi-lens/dist/clients/tree-sitter-logger.js +0 -100
- package/node_modules/pi-lens/dist/clients/tree-sitter-navigator.js +0 -269
- package/node_modules/pi-lens/dist/clients/tree-sitter-query-loader.js +0 -569
- package/node_modules/pi-lens/dist/clients/tree-sitter-shared.js +0 -158
- package/node_modules/pi-lens/dist/clients/tree-sitter-symbol-extractor.js +0 -1265
- package/node_modules/pi-lens/dist/clients/trivy-client.js +0 -467
- package/node_modules/pi-lens/dist/clients/tui-fit.js +0 -50
- package/node_modules/pi-lens/dist/clients/turn-context.js +0 -52
- package/node_modules/pi-lens/dist/clients/turn-end/lane.js +0 -51
- package/node_modules/pi-lens/dist/clients/turn-end/lanes/govulncheck.js +0 -112
- package/node_modules/pi-lens/dist/clients/turn-end/lanes/secrets.js +0 -204
- package/node_modules/pi-lens/dist/clients/turn-summary-render.js +0 -72
- package/node_modules/pi-lens/dist/clients/turn-summary.js +0 -132
- package/node_modules/pi-lens/dist/clients/typos-config.js +0 -29
- package/node_modules/pi-lens/dist/clients/user-notify.js +0 -51
- package/node_modules/pi-lens/dist/clients/vanished-instance-marker.js +0 -57
- package/node_modules/pi-lens/dist/clients/warm-attach.js +0 -305
- package/node_modules/pi-lens/dist/clients/widget-state.js +0 -1808
- package/node_modules/pi-lens/dist/clients/word-index-logger.js +0 -49
- package/node_modules/pi-lens/dist/clients/word-index-store.js +0 -459
- package/node_modules/pi-lens/dist/clients/word-index.js +0 -2080
- package/node_modules/pi-lens/dist/clients/workspace-topology.js +0 -443
- package/node_modules/pi-lens/dist/clients/write-ordering-guard.js +0 -65
- package/node_modules/pi-lens/dist/clients/zizmor-config.js +0 -340
- package/node_modules/pi-lens/dist/i18n.js +0 -69
- package/node_modules/pi-lens/dist/mcp/build-staleness.js +0 -124
- package/node_modules/pi-lens/dist/scripts/lib/process-scan.mjs +0 -583
- package/node_modules/pi-lens/dist/scripts/lib/skills-predicate.mjs +0 -129
- package/node_modules/pi-lens/dist/scripts/lib/web-tree-sitter-dir.mjs +0 -123
- package/node_modules/pi-lens/dist/tools/activate-tools.js +0 -87
- package/node_modules/pi-lens/dist/tools/ast-grep-outline.js +0 -137
- package/node_modules/pi-lens/dist/tools/ast-grep-replace.js +0 -244
- package/node_modules/pi-lens/dist/tools/ast-grep-search.js +0 -762
- package/node_modules/pi-lens/dist/tools/effective-config.js +0 -90
- package/node_modules/pi-lens/dist/tools/lens-diagnostic-mark.js +0 -375
- package/node_modules/pi-lens/dist/tools/lens-diagnostics.js +0 -2571
- package/node_modules/pi-lens/dist/tools/lsp-diagnostics.js +0 -1745
- package/node_modules/pi-lens/dist/tools/lsp-navigation.js +0 -1367
- package/node_modules/pi-lens/dist/tools/lsp-structured-output.js +0 -294
- package/node_modules/pi-lens/dist/tools/module-report.js +0 -382
- package/node_modules/pi-lens/dist/tools/project-report.js +0 -86
- package/node_modules/pi-lens/dist/tools/render-compact.js +0 -374
- package/node_modules/pi-lens/dist/tools/scan-progress.js +0 -53
- package/node_modules/pi-lens/dist/tools/shared.js +0 -29
- package/node_modules/pi-lens/dist/tools/symbol-search.js +0 -155
|
@@ -1,607 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Node.js package-manager resolution and command building.
|
|
3
|
-
*
|
|
4
|
-
* Single source of truth for "which package manager should we use here, and how
|
|
5
|
-
* do we spell each command (run script / install / exec / global bin) for it".
|
|
6
|
-
* Supports npm, pnpm, yarn and bun so pi-lens works on whatever manager the
|
|
7
|
-
* machine actually ships.
|
|
8
|
-
*
|
|
9
|
-
* Resolution order (see `resolveNodePackageManager`):
|
|
10
|
-
* 1. What the project declares — lockfile, then the corepack `packageManager`
|
|
11
|
-
* field — *if that manager is actually installed*.
|
|
12
|
-
* 2. Otherwise the first installed manager in `PREFERENCE` (npm first for
|
|
13
|
-
* maximum compatibility, bun last).
|
|
14
|
-
* 3. `npm` as a final fallback so callers always get a usable value.
|
|
15
|
-
*/
|
|
16
|
-
import * as fs from "node:fs";
|
|
17
|
-
import * as os from "node:os";
|
|
18
|
-
import * as path from "node:path";
|
|
19
|
-
import { classifyProbeFailure, createAvailabilityLatch, isTransientDecision, logAvailabilityDecision, startHostStallSampler, } from "./dispatch/runners/utils/availability-policy.js";
|
|
20
|
-
import { safeSpawnAsync } from "./safe-spawn.js";
|
|
21
|
-
import { probeToolAsync } from "./tool-probe.js";
|
|
22
|
-
import { createAvailabilityProbeFlight } from "./availability-probe-flight.js";
|
|
23
|
-
import { createGenerationSource, } from "./generation-guard.js";
|
|
24
|
-
import { isAtOrAboveHomeDir, walkUpDirs } from "./path-utils.js";
|
|
25
|
-
/**
|
|
26
|
-
* Fallback preference when nothing is declared (or the declared manager is
|
|
27
|
-
* missing). npm first for maximum compatibility; bun last. A project lockfile
|
|
28
|
-
* always overrides this order.
|
|
29
|
-
*/
|
|
30
|
-
const PREFERENCE = [
|
|
31
|
-
"npm",
|
|
32
|
-
"pnpm",
|
|
33
|
-
"yarn",
|
|
34
|
-
"bun",
|
|
35
|
-
];
|
|
36
|
-
const packageManagerProbeFlights = createAvailabilityProbeFlight();
|
|
37
|
-
function onWindows() {
|
|
38
|
-
return process.platform === "win32";
|
|
39
|
-
}
|
|
40
|
-
function isNodePackageManager(value) {
|
|
41
|
-
return (value === "npm" || value === "pnpm" || value === "yarn" || value === "bun");
|
|
42
|
-
}
|
|
43
|
-
// ============================================================================
|
|
44
|
-
// DETECTION
|
|
45
|
-
// ============================================================================
|
|
46
|
-
/**
|
|
47
|
-
* Detect the package manager a Node.js project declares, without checking
|
|
48
|
-
* whether it is installed. Lockfiles win over the corepack `packageManager`
|
|
49
|
-
* field. Returns `undefined` when the project makes no declaration.
|
|
50
|
-
*/
|
|
51
|
-
export function detectNodePackageManager(targetPath) {
|
|
52
|
-
if (fs.existsSync(path.join(targetPath, "bun.lockb")) ||
|
|
53
|
-
fs.existsSync(path.join(targetPath, "bun.lock"))) {
|
|
54
|
-
return "bun";
|
|
55
|
-
}
|
|
56
|
-
if (fs.existsSync(path.join(targetPath, "pnpm-lock.yaml"))) {
|
|
57
|
-
return "pnpm";
|
|
58
|
-
}
|
|
59
|
-
if (fs.existsSync(path.join(targetPath, "yarn.lock"))) {
|
|
60
|
-
return "yarn";
|
|
61
|
-
}
|
|
62
|
-
if (fs.existsSync(path.join(targetPath, "package-lock.json"))) {
|
|
63
|
-
return "npm";
|
|
64
|
-
}
|
|
65
|
-
return readPackageManagerField(targetPath);
|
|
66
|
-
}
|
|
67
|
-
/** Read the corepack `"packageManager": "pnpm@8.15.0"` field from package.json. */
|
|
68
|
-
function readPackageManagerField(targetPath) {
|
|
69
|
-
try {
|
|
70
|
-
const pkgPath = path.join(targetPath, "package.json");
|
|
71
|
-
if (!fs.existsSync(pkgPath))
|
|
72
|
-
return undefined;
|
|
73
|
-
const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf-8"));
|
|
74
|
-
if (typeof pkg.packageManager !== "string")
|
|
75
|
-
return undefined;
|
|
76
|
-
const name = pkg.packageManager.split("@")[0].trim().toLowerCase();
|
|
77
|
-
return isNodePackageManager(name) ? name : undefined;
|
|
78
|
-
}
|
|
79
|
-
catch {
|
|
80
|
-
return undefined;
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
// ============================================================================
|
|
84
|
-
// AVAILABILITY (cached per process; reset in tests)
|
|
85
|
-
// ============================================================================
|
|
86
|
-
/**
|
|
87
|
-
* Budget for the `where`/`which <pm>` probe. Matches the previous
|
|
88
|
-
* `isCommandAvailableAsync` default so the observable timing is unchanged.
|
|
89
|
-
*/
|
|
90
|
-
const PROBE_TIMEOUT_MS = 5_000;
|
|
91
|
-
/**
|
|
92
|
-
* A timed-out probe used to be memoized as a permanent `false` — the process
|
|
93
|
-
* would silently downgrade a declared pnpm/yarn manager to npm for its whole
|
|
94
|
-
* life. The blast radius was internal: this resolver only serves installs
|
|
95
|
-
* into pi-lens's own managed tools directory and `pilens_rebuild` on a
|
|
96
|
-
* pi-lens source checkout, never a user project's lockfile (#1496). Each
|
|
97
|
-
* manager now sits behind the shared transient-aware latch (#1467/#1476):
|
|
98
|
-
* only a genuine absence (`where`/`which` exits non-zero, or ENOENT) latches;
|
|
99
|
-
* a timeout, abort or host stall expires on a cooldown and is re-probed.
|
|
100
|
-
*/
|
|
101
|
-
const availabilityLatches = new Map();
|
|
102
|
-
function getLatch(pm) {
|
|
103
|
-
let latch = availabilityLatches.get(pm);
|
|
104
|
-
if (!latch) {
|
|
105
|
-
latch = createAvailabilityLatch();
|
|
106
|
-
availabilityLatches.set(pm, latch);
|
|
107
|
-
}
|
|
108
|
-
return latch;
|
|
109
|
-
}
|
|
110
|
-
async function probeAvailability(pm) {
|
|
111
|
-
const latch = getLatch(pm);
|
|
112
|
-
const startedAt = Date.now();
|
|
113
|
-
const finder = onWindows() ? "where" : "which";
|
|
114
|
-
const sampler = startHostStallSampler();
|
|
115
|
-
let result;
|
|
116
|
-
let hostStallMs;
|
|
117
|
-
try {
|
|
118
|
-
result = await probeToolAsync(finder, [pm], { timeout: PROBE_TIMEOUT_MS });
|
|
119
|
-
}
|
|
120
|
-
finally {
|
|
121
|
-
hostStallMs = sampler.stop();
|
|
122
|
-
}
|
|
123
|
-
const elapsedMs = Date.now() - startedAt;
|
|
124
|
-
if (result.status === 0 && !result.error) {
|
|
125
|
-
latch.noteAvailable();
|
|
126
|
-
logAvailabilityDecision({
|
|
127
|
-
tool: pm,
|
|
128
|
-
verdict: "available",
|
|
129
|
-
outcome: "success",
|
|
130
|
-
cause: "ok",
|
|
131
|
-
elapsedMs,
|
|
132
|
-
latched: true,
|
|
133
|
-
hostStallMs,
|
|
134
|
-
budgetMs: PROBE_TIMEOUT_MS,
|
|
135
|
-
classifiedBy: "probe",
|
|
136
|
-
});
|
|
137
|
-
return true;
|
|
138
|
-
}
|
|
139
|
-
const { outcome, cause, evidence } = classifyProbeFailure(result, {
|
|
140
|
-
hostStallMs,
|
|
141
|
-
// Preserve pre-#1496 meaning for anything the classifier can't place: a
|
|
142
|
-
// present manager that rejects its probe is durable, same as before.
|
|
143
|
-
unclassifiedFailureOutcome: "missing",
|
|
144
|
-
});
|
|
145
|
-
const retryAfterMs = latch.noteUnavailable(outcome, cause);
|
|
146
|
-
logAvailabilityDecision({
|
|
147
|
-
tool: pm,
|
|
148
|
-
verdict: "unavailable",
|
|
149
|
-
outcome,
|
|
150
|
-
cause,
|
|
151
|
-
elapsedMs,
|
|
152
|
-
latched: outcome !== "transient",
|
|
153
|
-
hostStallMs,
|
|
154
|
-
...(retryAfterMs > 0 && { retryAfterMs }),
|
|
155
|
-
budgetMs: PROBE_TIMEOUT_MS,
|
|
156
|
-
classifiedBy: "probe",
|
|
157
|
-
evidence,
|
|
158
|
-
});
|
|
159
|
-
return false;
|
|
160
|
-
}
|
|
161
|
-
/**
|
|
162
|
-
* Resolve whether `pm` is available. `onTransient`, when given, fires
|
|
163
|
-
* whenever the resolved `false` came from a probe that never got a fair
|
|
164
|
-
* hearing (a stall, an abort, a host-level failure classified `transient` by
|
|
165
|
-
* `classifyProbeFailure`) rather than a genuine absence — including when that
|
|
166
|
-
* verdict is served from the latch's own cooldown-bounded memo, not just on a
|
|
167
|
-
* fresh probe (#1585).
|
|
168
|
-
*
|
|
169
|
-
* Before this, the return type was a bare boolean: a caller like
|
|
170
|
-
* `allAvailableGlobalBinDirs` could not tell "pnpm isn't installed" from
|
|
171
|
-
* "the `where pnpm` probe stalled", so a transient miss silently dropped
|
|
172
|
-
* pnpm's global bin dir with no way to flag the result as provisional —
|
|
173
|
-
* exactly the boolean-collapse `getToolPath`'s `onTransient` plumbing (#1569)
|
|
174
|
-
* was built to avoid, one layer up.
|
|
175
|
-
*/
|
|
176
|
-
function isAvailable(pm, onTransient) {
|
|
177
|
-
const latch = getLatch(pm);
|
|
178
|
-
const reportIfTransient = (result) => {
|
|
179
|
-
if (!result && isTransientDecision({ outcome: latch.getOutcome() })) {
|
|
180
|
-
onTransient?.();
|
|
181
|
-
}
|
|
182
|
-
return result;
|
|
183
|
-
};
|
|
184
|
-
const memo = latch.read();
|
|
185
|
-
if (memo !== null)
|
|
186
|
-
return Promise.resolve(reportIfTransient(memo));
|
|
187
|
-
// A verdict can now expire, so concurrent callers arriving just after a
|
|
188
|
-
// cooldown must share ONE probe rather than each spawning their own.
|
|
189
|
-
const shared = packageManagerProbeFlights.run(`package-manager:${pm}`, () => probeAvailability(pm));
|
|
190
|
-
return shared.promise.then(reportIfTransient);
|
|
191
|
-
}
|
|
192
|
-
/**
|
|
193
|
-
* Clear the process-wide availability cache: pnpm/yarn/bun/npm each sit
|
|
194
|
-
* behind their own module-local `AvailabilityLatch` in `availabilityLatches`,
|
|
195
|
-
* so `resetDispatchAvailabilityState`'s generation counter (the mechanism
|
|
196
|
-
* most dispatch runners inherit) never reaches them — the same shape as
|
|
197
|
-
* psscriptanalyzer's (#1490) and zizmor's (#1535) module-local latches.
|
|
198
|
-
* Without this wired into `session_start`, a genuine "pnpm is missing"
|
|
199
|
-
* verdict from one session stayed latched into the next: install pnpm mid
|
|
200
|
-
* day, start a fresh session, pi-lens still reports it missing until a
|
|
201
|
-
* process restart (#1653). Called from `handleSessionStart`'s per-session
|
|
202
|
-
* reset block beside `resetZizmorTokenAvailability()` /
|
|
203
|
-
* `resetPsScriptAnalyzerAvailability()`; also used directly by tests. Also
|
|
204
|
-
* clears `globalBinDirCache`, whose memo lifetime rides the same reset — it
|
|
205
|
-
* must not outlive the availability verdicts it was derived from (#1602).
|
|
206
|
-
*/
|
|
207
|
-
export function _resetPackageManagerCache() {
|
|
208
|
-
packageManagerCacheGeneration.bump();
|
|
209
|
-
availabilityLatches.clear();
|
|
210
|
-
packageManagerProbeFlights.clear();
|
|
211
|
-
globalBinDirCache.clear();
|
|
212
|
-
globalBinDirProbeFlights.clear();
|
|
213
|
-
}
|
|
214
|
-
// ============================================================================
|
|
215
|
-
// RESOLUTION
|
|
216
|
-
// ============================================================================
|
|
217
|
-
/**
|
|
218
|
-
* Resolve which package manager to use for `cwd`: the project's declared manager
|
|
219
|
-
* if installed, otherwise the first installed manager in `PREFERENCE`, otherwise
|
|
220
|
-
* `npm`.
|
|
221
|
-
*/
|
|
222
|
-
export async function resolveNodePackageManager(cwd = process.cwd()) {
|
|
223
|
-
const declared = detectNodePackageManager(cwd);
|
|
224
|
-
if (declared && (await isAvailable(declared))) {
|
|
225
|
-
return declared;
|
|
226
|
-
}
|
|
227
|
-
for (const pm of PREFERENCE) {
|
|
228
|
-
if (await isAvailable(pm))
|
|
229
|
-
return pm;
|
|
230
|
-
}
|
|
231
|
-
return "npm";
|
|
232
|
-
}
|
|
233
|
-
// ============================================================================
|
|
234
|
-
// COMMAND BUILDERS
|
|
235
|
-
// ============================================================================
|
|
236
|
-
/** Platform-specific executable name (`.cmd`/`.exe` on Windows). */
|
|
237
|
-
export function pmBinary(pm) {
|
|
238
|
-
if (!onWindows())
|
|
239
|
-
return pm;
|
|
240
|
-
return pm === "bun" ? "bun.exe" : `${pm}.cmd`;
|
|
241
|
-
}
|
|
242
|
-
/** Args to run a package.json script — `run <script>` works for all managers. */
|
|
243
|
-
export function runScriptArgs(script) {
|
|
244
|
-
return ["run", script];
|
|
245
|
-
}
|
|
246
|
-
/** Human-readable "run script" command for display (bare manager name). */
|
|
247
|
-
export function formatRunScript(pm, script) {
|
|
248
|
-
return `${pm} run ${script}`;
|
|
249
|
-
}
|
|
250
|
-
/**
|
|
251
|
-
* Args to install a single package. npm uses `install`; pnpm/yarn/bun use `add`.
|
|
252
|
-
* `--legacy-peer-deps` is npm-only and silently dropped for other managers.
|
|
253
|
-
*/
|
|
254
|
-
export function installArgs(pm, pkg, options = {}) {
|
|
255
|
-
const args = [pm === "npm" ? "install" : "add"];
|
|
256
|
-
if (options.ignoreScripts)
|
|
257
|
-
args.push("--ignore-scripts");
|
|
258
|
-
if (options.legacyPeerDeps && pm === "npm")
|
|
259
|
-
args.push("--legacy-peer-deps");
|
|
260
|
-
args.push(pkg);
|
|
261
|
-
return args;
|
|
262
|
-
}
|
|
263
|
-
/**
|
|
264
|
-
* Args to re-resolve an already-declared dependency to the newest version its
|
|
265
|
-
* recorded range still permits. npm/pnpm/bun spell this `update`; yarn classic
|
|
266
|
-
* spells it `upgrade`.
|
|
267
|
-
*
|
|
268
|
-
* This is the command that repairs a dependency frozen by its own lockfile.
|
|
269
|
-
* `installArgs` re-runs the install, and a lockfile entry that already
|
|
270
|
-
* satisfies the range makes that a no-op: pi-lens's managed tools tree stayed
|
|
271
|
-
* on the version written at first install for the life of the machine even
|
|
272
|
-
* though the declared caret range permitted 28 newer minors (#1730).
|
|
273
|
-
*/
|
|
274
|
-
export function updateArgs(pm, pkg, options = {}) {
|
|
275
|
-
const args = [pm === "yarn" ? "upgrade" : "update"];
|
|
276
|
-
if (options.ignoreScripts)
|
|
277
|
-
args.push("--ignore-scripts");
|
|
278
|
-
args.push(pkg);
|
|
279
|
-
return args;
|
|
280
|
-
}
|
|
281
|
-
/**
|
|
282
|
-
* Args to install a single package **globally** (`-g`). npm/pnpm/bun spell this
|
|
283
|
-
* `install -g` / `add -g`; yarn uses `global add` (yarn classic — Berry removed
|
|
284
|
-
* global installs, but pi-lens's manager resolution prefers npm/pnpm first, so
|
|
285
|
-
* yarn is only chosen when it is the declared/only manager). The resulting
|
|
286
|
-
* binary is found again by `allAvailableGlobalBinDirs`, which covers every
|
|
287
|
-
* manager's global bin dir.
|
|
288
|
-
*/
|
|
289
|
-
export function globalInstallArgs(pm, pkg) {
|
|
290
|
-
switch (pm) {
|
|
291
|
-
case "yarn":
|
|
292
|
-
return ["global", "add", pkg];
|
|
293
|
-
case "npm":
|
|
294
|
-
return ["install", "-g", pkg];
|
|
295
|
-
default: // pnpm, bun
|
|
296
|
-
return ["add", "-g", pkg];
|
|
297
|
-
}
|
|
298
|
-
}
|
|
299
|
-
/**
|
|
300
|
-
* Command + args to run a package's binary without a global install — the
|
|
301
|
-
* `npx --no <pkg>` equivalent for each manager (`bun x`, `pnpm dlx`, `yarn dlx`).
|
|
302
|
-
*/
|
|
303
|
-
export function execArgs(pm, pkg, args = []) {
|
|
304
|
-
switch (pm) {
|
|
305
|
-
case "bun":
|
|
306
|
-
return { command: pmBinary("bun"), args: ["x", pkg, ...args] };
|
|
307
|
-
case "pnpm":
|
|
308
|
-
return { command: pmBinary("pnpm"), args: ["dlx", pkg, ...args] };
|
|
309
|
-
case "yarn":
|
|
310
|
-
return { command: pmBinary("yarn"), args: ["dlx", pkg, ...args] };
|
|
311
|
-
default:
|
|
312
|
-
// --no prevents silently downloading an uncached package.
|
|
313
|
-
return {
|
|
314
|
-
command: onWindows() ? "npx.cmd" : "npx",
|
|
315
|
-
args: ["--no", pkg, ...args],
|
|
316
|
-
};
|
|
317
|
-
}
|
|
318
|
-
}
|
|
319
|
-
// ============================================================================
|
|
320
|
-
// GLOBAL BIN DISCOVERY
|
|
321
|
-
// ============================================================================
|
|
322
|
-
/**
|
|
323
|
-
* Per-manager global bin dir, memoized for the process (cleared alongside
|
|
324
|
-
* `availabilityLatches` in `_resetPackageManagerCache`). Only a SUCCESSFUL
|
|
325
|
-
* lookup is cached: a spawn failure here is evidence about this call, not
|
|
326
|
-
* about the manager (the manager already passed `isAvailable`'s own probe),
|
|
327
|
-
* so it must not latch an empty result the way a genuine absence would. The
|
|
328
|
-
* generation guard owns post-await cache publication, so a probe crossing
|
|
329
|
-
* a session reset cannot repopulate the fresh memo. Reset clears the flight
|
|
330
|
-
* map separately, so later callers cannot share the pre-reset probe.
|
|
331
|
-
*/
|
|
332
|
-
const globalBinDirCache = new Map();
|
|
333
|
-
const packageManagerCacheGeneration = createGenerationSource("package-manager-global-bin");
|
|
334
|
-
const globalBinDirProbeFlights = createAvailabilityProbeFlight();
|
|
335
|
-
/** Directories where a given manager installs global binaries. */
|
|
336
|
-
async function globalBinDirsFor(pm) {
|
|
337
|
-
const cached = globalBinDirCache.get(pm);
|
|
338
|
-
if (cached)
|
|
339
|
-
return cached;
|
|
340
|
-
const generation = packageManagerCacheGeneration.capture();
|
|
341
|
-
// Concurrent callers (dispatch runs several tools per edit) must share ONE
|
|
342
|
-
// probe rather than each spawning their own `npm config get prefix` (#1602).
|
|
343
|
-
const shared = globalBinDirProbeFlights.run(pm, () => probeGlobalBinDirs(pm, generation));
|
|
344
|
-
return shared.promise;
|
|
345
|
-
}
|
|
346
|
-
async function probeGlobalBinDirs(pm, generation) {
|
|
347
|
-
if (pm === "bun") {
|
|
348
|
-
// bun has no per-call query cost — the global bin dir is deterministic.
|
|
349
|
-
const base = process.env.BUN_INSTALL || path.join(os.homedir(), ".bun");
|
|
350
|
-
const dirs = [path.join(base, "bin")];
|
|
351
|
-
generation.guardedWrite(pm, () => {
|
|
352
|
-
globalBinDirCache.set(pm, dirs);
|
|
353
|
-
});
|
|
354
|
-
return dirs;
|
|
355
|
-
}
|
|
356
|
-
const query = pm === "npm"
|
|
357
|
-
? ["config", "get", "prefix"]
|
|
358
|
-
: pm === "pnpm"
|
|
359
|
-
? ["bin", "-g"]
|
|
360
|
-
: ["global", "bin"]; // yarn
|
|
361
|
-
const res = await safeSpawnAsync(pmBinary(pm), query, { timeout: 5000 });
|
|
362
|
-
if (res.status !== 0 || res.error)
|
|
363
|
-
return [];
|
|
364
|
-
const out = res.stdout.trim();
|
|
365
|
-
if (!out)
|
|
366
|
-
return [];
|
|
367
|
-
// npm reports a prefix; binaries live in `<prefix>/bin` on Unix, `<prefix>`
|
|
368
|
-
// on Windows. pnpm/yarn already print the bin dir directly.
|
|
369
|
-
const dirs = pm === "npm" ? [onWindows() ? out : path.join(out, "bin")] : [out];
|
|
370
|
-
generation.guardedWrite(pm, () => {
|
|
371
|
-
globalBinDirCache.set(pm, dirs);
|
|
372
|
-
});
|
|
373
|
-
return dirs;
|
|
374
|
-
}
|
|
375
|
-
/**
|
|
376
|
-
* Global bin directories for every installed manager, deduped. Used to locate a
|
|
377
|
-
* globally-installed tool binary when PATH is stale (e.g. right after an
|
|
378
|
-
* `install -g`) or when the tool was installed via a non-npm manager.
|
|
379
|
-
*
|
|
380
|
-
* `onTransient`, when given, fires once per manager whose `isAvailable` probe
|
|
381
|
-
* was transient (stalled/unspawnable, not a genuine absence) — the boolean
|
|
382
|
-
* `allAvailableGlobalBinDirs` returns can't itself distinguish "not
|
|
383
|
-
* installed" from "couldn't tell", so a caller that persists this result
|
|
384
|
-
* needs the callback to know the answer may be incomplete (#1585).
|
|
385
|
-
*/
|
|
386
|
-
export async function allAvailableGlobalBinDirs(onTransient) {
|
|
387
|
-
const dirs = [];
|
|
388
|
-
const seen = new Set();
|
|
389
|
-
for (const pm of PREFERENCE) {
|
|
390
|
-
if (!(await isAvailable(pm, onTransient)))
|
|
391
|
-
continue;
|
|
392
|
-
for (const dir of await globalBinDirsFor(pm)) {
|
|
393
|
-
const normalized = path.resolve(dir);
|
|
394
|
-
if (seen.has(normalized))
|
|
395
|
-
continue;
|
|
396
|
-
seen.add(normalized);
|
|
397
|
-
dirs.push(normalized);
|
|
398
|
-
}
|
|
399
|
-
}
|
|
400
|
-
return dirs;
|
|
401
|
-
}
|
|
402
|
-
/**
|
|
403
|
-
* Locate a globally-installed tool binary across every installed manager's
|
|
404
|
-
* global bin dir (npm/pnpm/yarn/bun) by direct file lookup — no spawn, no PATH
|
|
405
|
-
* reliance. Returns the full path, or `undefined` if not found.
|
|
406
|
-
*
|
|
407
|
-
* This is the manager-agnostic replacement for a bare `<tool> --version` PATH
|
|
408
|
-
* probe: it finds tools installed via `pnpm add -g` / `bun add -g` (whose bin
|
|
409
|
-
* dirs are often not on PATH) and survives the PATH-cache staleness that follows
|
|
410
|
-
* an `install -g`. On Windows it checks the `.cmd` shim, then `.exe`, then the
|
|
411
|
-
* bare name; on Unix just the bare name.
|
|
412
|
-
*/
|
|
413
|
-
export async function findGlobalBinary(command, windowsExt = ".cmd") {
|
|
414
|
-
const candidates = onWindows()
|
|
415
|
-
? [`${command}${windowsExt}`, `${command}.exe`, command]
|
|
416
|
-
: [command];
|
|
417
|
-
try {
|
|
418
|
-
for (const binDir of await allAvailableGlobalBinDirs()) {
|
|
419
|
-
for (const name of candidates) {
|
|
420
|
-
const full = path.join(binDir, name);
|
|
421
|
-
if (fs.existsSync(full))
|
|
422
|
-
return full;
|
|
423
|
-
}
|
|
424
|
-
}
|
|
425
|
-
}
|
|
426
|
-
catch {
|
|
427
|
-
// Manager probes can fail (missing binary, spawn error) — treat as "not
|
|
428
|
-
// found" so callers fall through to their next resolution step.
|
|
429
|
-
}
|
|
430
|
-
return undefined;
|
|
431
|
-
}
|
|
432
|
-
/**
|
|
433
|
-
* The three project-local bin-directory shapes in this repo, most-preferred
|
|
434
|
-
* first. Exported so every caller passes the SAME constant instead of
|
|
435
|
-
* re-listing the directory names next to its own copy of the walk — the venv
|
|
436
|
-
* list alone had three independent spellings before #2544 review F1
|
|
437
|
-
* (`formatters.ts`, `runner-helpers.ts`'s `createVenvFinder`,
|
|
438
|
-
* `dead-code-client.ts`'s `venvCandidates`).
|
|
439
|
-
*
|
|
440
|
-
* `VENV_BIN_DIRS` lists BOTH the POSIX (`bin`) and Windows (`Scripts`) layouts
|
|
441
|
-
* unconditionally rather than branching on `process.platform` at module load:
|
|
442
|
-
* a module-load platform constant cannot be forced per test, so the other
|
|
443
|
-
* branch is never exercised on the ubuntu lane (defect shape 30). The extra
|
|
444
|
-
* two `existsSync` calls per directory are the price of a testable list, and
|
|
445
|
-
* a `.venv/Scripts` on Linux (or `.venv/bin` under msys) resolves correctly
|
|
446
|
-
* instead of being invisible.
|
|
447
|
-
*/
|
|
448
|
-
export const NODE_MODULES_BIN_DIRS = [
|
|
449
|
-
path.join("node_modules", ".bin"),
|
|
450
|
-
];
|
|
451
|
-
export const VENDOR_BIN_DIRS = [path.join("vendor", "bin")];
|
|
452
|
-
export const VENV_BIN_DIRS = [
|
|
453
|
-
path.join(".venv", "bin"),
|
|
454
|
-
path.join("venv", "bin"),
|
|
455
|
-
path.join(".venv", "Scripts"),
|
|
456
|
-
path.join("venv", "Scripts"),
|
|
457
|
-
];
|
|
458
|
-
/**
|
|
459
|
-
* THE project-local tool-bin walk: yields every `<binDir>/<tool>` that exists
|
|
460
|
-
* in `startDir` or one of its ancestors, nearest first, stopping at the HOME
|
|
461
|
-
* ceiling (never the fs root — see below).
|
|
462
|
-
*
|
|
463
|
-
* A generator on purpose. {@link findLocalBinUpwards} takes the first match and
|
|
464
|
-
* the walk suspends there — no ancestor above the hit is ever stat'd, which is
|
|
465
|
-
* what a per-edit resolver needs — while {@link findLocalBinsUpwards} drains it
|
|
466
|
-
* for the ast-grep probe sweep, the one caller that legitimately wants every
|
|
467
|
-
* candidate above `startDir`. One walk body, two arities, no "collect-all"
|
|
468
|
-
* flag whose disabled half nothing can observe.
|
|
469
|
-
* `ceiling: false` opts a walk out of the HOME stop entirely (own-install
|
|
470
|
-
* trees only, see {@link LocalBinWalkOptions.ceiling}); {@link findLocalBinsAt}
|
|
471
|
-
* / {@link findLocalBinAt} below are the non-walking sibling for callers that
|
|
472
|
-
* must check exactly one directory and never climb (`createVenvFinder`,
|
|
473
|
-
* vulture's `venvCandidates`).
|
|
474
|
-
*
|
|
475
|
-
* `tools` is a LIST because the sweep callers probe several spellings of the
|
|
476
|
-
* same tool and the preference order is per-directory: all of a directory's
|
|
477
|
-
* candidates, in `tools` order, before the parent directory is looked at.
|
|
478
|
-
*
|
|
479
|
-
* `binDirs` makes this the ONLY such walker in the repo. Before #2544 there
|
|
480
|
-
* were SIX copies of this loop — `formatters.ts`'s `findInNodeModules` /
|
|
481
|
-
* `findInVendorBin` / `findInVenv`, `oxlint.ts`'s `resolveLocalVp`,
|
|
482
|
-
* `runner-helpers.ts`'s `findNodeBinRoots` and `resolveVendorToolCommand` —
|
|
483
|
-
* and they had drifted apart: only this one resolved a relative `startDir`,
|
|
484
|
-
* only this one had the #2514 HOME ceiling, and `vp` was resolved with
|
|
485
|
-
* OPPOSITE ceiling policies depending on whether `formatters.ts` or `oxlint.ts`
|
|
486
|
-
* asked (#2544 review F1). They all delegate here now.
|
|
487
|
-
*
|
|
488
|
-
* Candidate order is EXT-OUTER, DIR-INNER: on Windows every `binDir` is tried
|
|
489
|
-
* with `windowsExt` before any is tried with the bare name, matching what the
|
|
490
|
-
* `.venv/Scripts` walker did before the fold.
|
|
491
|
-
*/
|
|
492
|
-
/**
|
|
493
|
-
* Expand `tools` into the actual candidate file names for one directory,
|
|
494
|
-
* EXT-OUTER: on Windows every tool's extended name is tried before any tool's
|
|
495
|
-
* bare name (`windowsExt === ""` means the caller already spelled every name
|
|
496
|
-
* it wants — the ast-grep sweep passes `ast-grep.cmd`/`ast-grep.exe`/`ast-grep`
|
|
497
|
-
* itself in a shell-dependent order this option cannot express).
|
|
498
|
-
*/
|
|
499
|
-
function expandCandidateNames(tools, windowsExt, isWindows) {
|
|
500
|
-
return isWindows && windowsExt !== ""
|
|
501
|
-
? tools.flatMap((tool) => [`${tool}${windowsExt}`, tool])
|
|
502
|
-
: [...tools];
|
|
503
|
-
}
|
|
504
|
-
/** Every `<dir>/<binDir>/<name>` that exists, for exactly `dir` — no walk. */
|
|
505
|
-
function* matchesInDir(dir, names, binDirs) {
|
|
506
|
-
for (const name of names) {
|
|
507
|
-
for (const binDir of binDirs) {
|
|
508
|
-
const full = path.join(dir, binDir, name);
|
|
509
|
-
if (fs.existsSync(full))
|
|
510
|
-
yield full;
|
|
511
|
-
}
|
|
512
|
-
}
|
|
513
|
-
}
|
|
514
|
-
function* localBinMatches(tools, startDir, options) {
|
|
515
|
-
const { windowsExt = ".cmd", homeDir = os.homedir(), binDirs = NODE_MODULES_BIN_DIRS, isWindows = onWindows(), ceiling = true, } = options;
|
|
516
|
-
const names = expandCandidateNames(tools, windowsExt, isWindows);
|
|
517
|
-
for (const dir of walkUpDirs(startDir)) {
|
|
518
|
-
// Tool-resolution walker, not a config lookup (#2514/#2517 policy):
|
|
519
|
-
// escaping the project upward past HOME means STOP, not keep reading. A
|
|
520
|
-
// config-file lookup (`findLocalToolConfig`) keeps climbing past HOME
|
|
521
|
-
// because the underlying tool would find a legitimate global config
|
|
522
|
-
// there too; a `node_modules/.bin` match found at or above HOME can
|
|
523
|
-
// never be THIS project's own installed dependency — it is some
|
|
524
|
-
// unrelated home-level manifest (the pi-extensions bin shim, #2514).
|
|
525
|
-
// Default-on (not opt-in like `findLocalToolConfig`'s `options.homeDir`)
|
|
526
|
-
// because there is no legitimate case for this resolver to hand back a
|
|
527
|
-
// bin from outside the project tree. `ceiling: false` (own-install
|
|
528
|
-
// walk only, #2544 round 4 F1) skips this check entirely.
|
|
529
|
-
if (ceiling && isAtOrAboveHomeDir(dir, homeDir))
|
|
530
|
-
return;
|
|
531
|
-
yield* matchesInDir(dir, names, binDirs);
|
|
532
|
-
}
|
|
533
|
-
}
|
|
534
|
-
/**
|
|
535
|
-
* The nearest project-local `<binDir>/<tool>` at or above `startDir`, or
|
|
536
|
-
* `undefined`. See {@link localBinMatches} for the walk itself.
|
|
537
|
-
*
|
|
538
|
-
* Exported so callers that must NOT pay for global-bin discovery can reuse this
|
|
539
|
-
* walk instead of copying it. `findNodeToolBinary` below adds `findGlobalBinary`,
|
|
540
|
-
* which spawns a probe per package manager; a caller resolving a command on
|
|
541
|
-
* every run (knip, #1721) needs the filesystem half only.
|
|
542
|
-
*/
|
|
543
|
-
export function findLocalBinUpwards(tool, startDir, options = {}) {
|
|
544
|
-
// `.next().value`, not a `for…of` that returns on its first iteration: the
|
|
545
|
-
// latter is a single-iteration loop (SonarCloud S1751, and it reads as one
|
|
546
|
-
// too). The generator is simply left suspended after the first match — it
|
|
547
|
-
// holds no resource that needs closing, which is exactly why the walk above
|
|
548
|
-
// never stats an ancestor beyond the hit.
|
|
549
|
-
return localBinMatches([tool], startDir, options).next().value;
|
|
550
|
-
}
|
|
551
|
-
/**
|
|
552
|
-
* EVERY project-local match for `tools` at or above `startDir`, nearest first.
|
|
553
|
-
*
|
|
554
|
-
* For the ast-grep availability sweep (`runner-helpers.ts`'s `buildSgLocalBins`,
|
|
555
|
-
* which spawns `--version` against each candidate until one answers, both for
|
|
556
|
-
* the project walk and — with `ceiling: false` — pi-lens's own install-tree
|
|
557
|
-
* walk), which previously hand-rolled its own unceilinged climb precisely
|
|
558
|
-
* because the singular `findLocalBinUpwards` could not express "all of them"
|
|
559
|
-
* (#2544 review F1).
|
|
560
|
-
*
|
|
561
|
-
* NOT for a "project's own venv/vendor-bin first" resolver: `createVenvFinder`
|
|
562
|
-
* and vulture's `venvCandidates` looked like this walk's other two callers in
|
|
563
|
-
* round 3, but that was an unrequested behaviour change (round 3 introduced
|
|
564
|
-
* ancestor climbing where a single cwd/root lookup existed before, with no
|
|
565
|
-
* #2514 defect behind it) — reverted in round 4 F2 to {@link findLocalBinsAt}.
|
|
566
|
-
*/
|
|
567
|
-
export function findLocalBinsUpwards(tools, startDir, options = {}) {
|
|
568
|
-
return [...localBinMatches(tools, startDir, options)];
|
|
569
|
-
}
|
|
570
|
-
/**
|
|
571
|
-
* EVERY `<dir>/<binDir>/<tool>` that exists for exactly `dir` — no ancestor
|
|
572
|
-
* walk, so the HOME ceiling is moot (a single directory can never climb past
|
|
573
|
-
* it).
|
|
574
|
-
*
|
|
575
|
-
* For the "project's own venv/vendor-bin first" resolvers that must NOT climb
|
|
576
|
-
* to a parent project (#2544 round 4 F2): `createVenvFinder` and vulture's
|
|
577
|
-
* `venvCandidates` were fixed `cwd`/`root` lookups before #2544 review round 3
|
|
578
|
-
* converted them into ancestor walks with no reported defect behind the
|
|
579
|
-
* conversion (an unrelated sibling project's interpreter at `~/code/.venv`
|
|
580
|
-
* could then outrank PATH for `~/code/app`, which has no venv of its own).
|
|
581
|
-
* Reverted here; `binDirs`/`windowsExt` stay shared with the walking helpers
|
|
582
|
-
* above so the three directory shapes have exactly one spelling.
|
|
583
|
-
*/
|
|
584
|
-
export function findLocalBinsAt(tools, dir, options = {}) {
|
|
585
|
-
const { windowsExt = ".cmd", binDirs = NODE_MODULES_BIN_DIRS, isWindows = onWindows(), } = options;
|
|
586
|
-
const names = expandCandidateNames(tools, windowsExt, isWindows);
|
|
587
|
-
return [...matchesInDir(path.resolve(dir), names, binDirs)];
|
|
588
|
-
}
|
|
589
|
-
/** The nearest — i.e. first-listed — `<dir>/<binDir>/<tool>` match, or `undefined`. */
|
|
590
|
-
export function findLocalBinAt(tool, dir, options = {}) {
|
|
591
|
-
return findLocalBinsAt([tool], dir, options)[0];
|
|
592
|
-
}
|
|
593
|
-
/**
|
|
594
|
-
* Locate a Node CLI tool's binary, preferring a local `node_modules/.bin`
|
|
595
|
-
* (walking up from `cwd`) then any installed package manager's global bin dir
|
|
596
|
-
* (npm/pnpm/yarn/bun). Returns the absolute path, or `undefined` so the caller
|
|
597
|
-
* can fall back to its own `npx` invocation.
|
|
598
|
-
*
|
|
599
|
-
* This is the shared "widen the global-bin lookup" step from #375: the client
|
|
600
|
-
* resolvers that previously jumped straight from a local check to `npx <tool>`
|
|
601
|
-
* now find tools installed via `pnpm add -g` / `bun add -g` (off PATH) too,
|
|
602
|
-
* without changing their npx fallback semantics.
|
|
603
|
-
*/
|
|
604
|
-
export async function findNodeToolBinary(tool, cwd, windowsExt = ".cmd") {
|
|
605
|
-
return (findLocalBinUpwards(tool, cwd, { windowsExt }) ??
|
|
606
|
-
(await findGlobalBinary(tool, windowsExt)));
|
|
607
|
-
}
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import * as fs from "node:fs";
|
|
2
|
-
import * as path from "node:path";
|
|
3
|
-
import { fileURLToPath } from "node:url";
|
|
4
|
-
const packageRootCache = new Map();
|
|
5
|
-
/**
|
|
6
|
-
* Resolve the installed package root for the current module.
|
|
7
|
-
* Walks upward from the caller until it finds the nearest package.json.
|
|
8
|
-
*
|
|
9
|
-
* This is the correct alternative to process.cwd() for resolving
|
|
10
|
-
* pi-lens's own assets (rules, grammars, configs) when installed
|
|
11
|
-
* globally — cwd is the user's project, not the extension root.
|
|
12
|
-
*
|
|
13
|
-
* Credit: alexx-ftw (PR #1)
|
|
14
|
-
*/
|
|
15
|
-
export function getPackageRoot(importMetaUrl) {
|
|
16
|
-
const cached = packageRootCache.get(importMetaUrl);
|
|
17
|
-
if (cached)
|
|
18
|
-
return cached;
|
|
19
|
-
let current = path.dirname(fileURLToPath(importMetaUrl));
|
|
20
|
-
while (true) {
|
|
21
|
-
if (fs.existsSync(path.join(current, "package.json"))) {
|
|
22
|
-
packageRootCache.set(importMetaUrl, current);
|
|
23
|
-
return current;
|
|
24
|
-
}
|
|
25
|
-
const parent = path.dirname(current);
|
|
26
|
-
if (parent === current) {
|
|
27
|
-
packageRootCache.set(importMetaUrl, current);
|
|
28
|
-
return current;
|
|
29
|
-
}
|
|
30
|
-
current = parent;
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* Resolve a path relative to the installed package root.
|
|
35
|
-
*/
|
|
36
|
-
export function resolvePackagePath(importMetaUrl, ...segments) {
|
|
37
|
-
return path.join(getPackageRoot(importMetaUrl), ...segments);
|
|
38
|
-
}
|