@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,216 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* #1640: honest rendering for TypeScript diagnostics on files that belong to no
|
|
3
|
-
* tsconfig project.
|
|
4
|
-
*
|
|
5
|
-
* When a file matches no project's `include`/`files`, tsserver still checks it —
|
|
6
|
-
* in a synthetic INFERRED project with default compiler options, no `types`
|
|
7
|
-
* from the project's `tsconfig`, and different module resolution. The project's
|
|
8
|
-
* own `tsc --noEmit` never looks at those files, so the two answers legitimately
|
|
9
|
-
* disagree. Presenting the inferred answer at full blocking authority tells the
|
|
10
|
-
* agent that a gate failed when no gate ever ran.
|
|
11
|
-
*
|
|
12
|
-
* The fix is DEMOTE-WITH-LABEL, never suppress. The live #1640 triage found the
|
|
13
|
-
* inferred-project batch was a MIX: some diagnostics were provably phantom
|
|
14
|
-
* (missing test-runner globals, module resolution), and others were genuine type
|
|
15
|
-
* errors the project's `tsc` gate cannot see precisely BECAUSE the files sit
|
|
16
|
-
* outside every project. Suppression would hide the real ones. Blocking would
|
|
17
|
-
* overstate confidence in the phantom ones. Demoting to warning and naming the
|
|
18
|
-
* config gap preserves the signal and hands the verification burden to the
|
|
19
|
-
* person who can close it.
|
|
20
|
-
*
|
|
21
|
-
* Every "we do not know" path leaves the diagnostics untouched. An unanswered
|
|
22
|
-
* `projectInfo` probe is not a verdict (AGENTS.md shape 10).
|
|
23
|
-
*/
|
|
24
|
-
import * as path from "node:path";
|
|
25
|
-
import { fetchTsserverProjectIdentity, } from "./tsserver-sync.js";
|
|
26
|
-
import { toProjectRelativePath } from "../path-utils.js";
|
|
27
|
-
import { logLatency } from "../latency-logger.js";
|
|
28
|
-
/**
|
|
29
|
-
* The stable, greppable half of the label. Tests and renderers match on this;
|
|
30
|
-
* the actionable `add <glob>` half varies per file.
|
|
31
|
-
*
|
|
32
|
-
* Sibling of `STALE_LINE_MARKER` (`clients/runtime-turn.ts`) — same idea: a
|
|
33
|
-
* finding that survives at reduced authority says so in its own text, so no
|
|
34
|
-
* downstream renderer has to be taught about the demotion separately.
|
|
35
|
-
*/
|
|
36
|
-
export const INFERRED_PROJECT_MARKER = "not in any tsconfig project — checked with inferred settings";
|
|
37
|
-
/** Extensions tsserver owns. A file outside this set never reaches the probe. */
|
|
38
|
-
const TS_PROJECT_EXTENSIONS = new Set([
|
|
39
|
-
".ts",
|
|
40
|
-
".tsx",
|
|
41
|
-
".mts",
|
|
42
|
-
".cts",
|
|
43
|
-
".js",
|
|
44
|
-
".jsx",
|
|
45
|
-
".mjs",
|
|
46
|
-
".cjs",
|
|
47
|
-
]);
|
|
48
|
-
/**
|
|
49
|
-
* `source` values the classic typescript-language-server stamps on its own
|
|
50
|
-
* diagnostics. Auxiliary servers sharing the same result (opengrep, typos,
|
|
51
|
-
* zizmor, ast-grep) carry their own source and are NOT affected by a tsconfig
|
|
52
|
-
* gap, so they keep their severity.
|
|
53
|
-
*/
|
|
54
|
-
const TYPESCRIPT_DIAGNOSTIC_SOURCES = new Set(["typescript", "ts", "tsserver"]);
|
|
55
|
-
export function isTsProjectFile(filePath) {
|
|
56
|
-
return TS_PROJECT_EXTENSIONS.has(path.extname(filePath).toLowerCase());
|
|
57
|
-
}
|
|
58
|
-
function isTypeScriptSourcedDiagnostic(d) {
|
|
59
|
-
return TYPESCRIPT_DIAGNOSTIC_SOURCES.has((d.source ?? "").toLowerCase());
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* The glob the user should add to a tsconfig `include`. A file at
|
|
63
|
-
* `tests/unit/a.test.ts` yields `tests/**` — the top-level directory is what a
|
|
64
|
-
* person actually adds, and it is what the #1640 report itself asked for. A
|
|
65
|
-
* file sitting directly in the project root yields its own relative path, since
|
|
66
|
-
* there is no containing directory to name.
|
|
67
|
-
*/
|
|
68
|
-
export function suggestTsconfigInclude(filePath, cwd) {
|
|
69
|
-
const relative = toProjectRelativePath(filePath, cwd);
|
|
70
|
-
if (path.posix.isAbsolute(relative) || /^[A-Za-z]:/.test(relative)) {
|
|
71
|
-
// Outside the project root: name the file's own directory instead of
|
|
72
|
-
// inventing a root-relative glob that would not match anything.
|
|
73
|
-
const dir = relative.slice(0, relative.lastIndexOf("/"));
|
|
74
|
-
return dir ? `${dir}/**` : relative;
|
|
75
|
-
}
|
|
76
|
-
const segments = relative.split("/").filter(Boolean);
|
|
77
|
-
return segments.length > 1 ? `${segments[0]}/**` : relative;
|
|
78
|
-
}
|
|
79
|
-
/** The full label appended to a demoted diagnostic's message. */
|
|
80
|
-
export function inferredProjectNotice(filePath, cwd) {
|
|
81
|
-
return `[${INFERRED_PROJECT_MARKER}; add ${suggestTsconfigInclude(filePath, cwd)} to a tsconfig for authoritative checking]`;
|
|
82
|
-
}
|
|
83
|
-
/**
|
|
84
|
-
* Pure transform: demote every TypeScript-sourced ERROR to a warning and append
|
|
85
|
-
* the label. Warnings, hints, and auxiliary-sourced findings are returned
|
|
86
|
-
* untouched — they were never blockers, so relabelling them would be noise.
|
|
87
|
-
*
|
|
88
|
-
* Returns the SAME array reference when nothing changed, so callers can cheaply
|
|
89
|
-
* skip rebuilding their result objects.
|
|
90
|
-
*/
|
|
91
|
-
export function applyInferredProjectDemotion(diagnostics, filePath, cwd) {
|
|
92
|
-
if (!diagnostics.some(isDemotableDiagnostic))
|
|
93
|
-
return diagnostics;
|
|
94
|
-
const notice = inferredProjectNotice(filePath, cwd);
|
|
95
|
-
return diagnostics.map((d) => isDemotableDiagnostic(d)
|
|
96
|
-
? { ...d, severity: 2, message: `${d.message} ${notice}` }
|
|
97
|
-
: d);
|
|
98
|
-
}
|
|
99
|
-
function isDemotableDiagnostic(d) {
|
|
100
|
-
return d.severity === 1 && isTypeScriptSourcedDiagnostic(d);
|
|
101
|
-
}
|
|
102
|
-
/**
|
|
103
|
-
* Probe project membership for `filePath` and demote its diagnostics when
|
|
104
|
-
* tsserver answers "inferred project".
|
|
105
|
-
*
|
|
106
|
-
* Short-circuits BEFORE any probe when there is nothing a demotion could change:
|
|
107
|
-
* a non-TypeScript file, or a diagnostic list with no TypeScript-sourced error
|
|
108
|
-
* in it. So a clean sweep pays nothing, and a sweep over 500 clean files issues
|
|
109
|
-
* zero extra requests.
|
|
110
|
-
*/
|
|
111
|
-
export async function demoteInferredProjectDiagnostics(diagnostics, options) {
|
|
112
|
-
const { filePath, cwd, service } = options;
|
|
113
|
-
if (!isTsProjectFile(filePath))
|
|
114
|
-
return diagnostics;
|
|
115
|
-
if (!diagnostics.some(isDemotableDiagnostic))
|
|
116
|
-
return diagnostics;
|
|
117
|
-
if (options.signal?.aborted)
|
|
118
|
-
return diagnostics;
|
|
119
|
-
const fetchIdentity = options.fetchIdentity ?? fetchTsserverProjectIdentity;
|
|
120
|
-
const cache = options.identityCache;
|
|
121
|
-
let identity;
|
|
122
|
-
if (cache?.has(filePath)) {
|
|
123
|
-
identity = cache.get(filePath);
|
|
124
|
-
}
|
|
125
|
-
else {
|
|
126
|
-
identity = await fetchIdentity(service, filePath);
|
|
127
|
-
cache?.set(filePath, identity);
|
|
128
|
-
}
|
|
129
|
-
// `undefined` (probe unavailable/failed) and "unassociated" (tsserver named
|
|
130
|
-
// no project at all) are both UNKNOWN, not "inferred". Demoting on either
|
|
131
|
-
// would downgrade real blockers on any server that does not speak the
|
|
132
|
-
// tsserverRequest escape hatch.
|
|
133
|
-
if (identity?.projectKind !== "inferred")
|
|
134
|
-
return diagnostics;
|
|
135
|
-
return applyInferredProjectDemotion(diagnostics, filePath, cwd);
|
|
136
|
-
}
|
|
137
|
-
/**
|
|
138
|
-
* Cap on how many `projectInfo` probes one sweep may issue. Only files that
|
|
139
|
-
* actually carry a TypeScript error probe at all, so on a healthy project this
|
|
140
|
-
* is never approached. Past the cap, membership stays UNKNOWN and nothing is
|
|
141
|
-
* demoted — the fail-safe direction is the pre-#1640 behavior, not a silent
|
|
142
|
-
* mass demotion.
|
|
143
|
-
*/
|
|
144
|
-
export const INFERRED_PROJECT_PROBE_BUDGET = 300;
|
|
145
|
-
/**
|
|
146
|
-
* Sweep-wide entry point: demote every result whose file tsserver owns only
|
|
147
|
-
* through an inferred project. Sequential on purpose — the probes run against a
|
|
148
|
-
* single-threaded tsserver, so fanning out would only queue behind itself.
|
|
149
|
-
*
|
|
150
|
-
* The identity memo is local to this call. A module-level cache would pin the
|
|
151
|
-
* first sweep's verdict for the life of the process, and editing a tsconfig is
|
|
152
|
-
* precisely what changes the answer.
|
|
153
|
-
*
|
|
154
|
-
* The loop honors the caller's abort signal between files. The sweep that
|
|
155
|
-
* produced these results is itself signal-bounded, so continuing to probe after
|
|
156
|
-
* an abort would spend budget on an answer nobody will read (#1645 review F1).
|
|
157
|
-
*/
|
|
158
|
-
export async function demoteInferredProjectSweepResults(results, cwd, service, signal) {
|
|
159
|
-
if (typeof service?.executeReadOnlyCommandOnLiveClient !== "function") {
|
|
160
|
-
return results;
|
|
161
|
-
}
|
|
162
|
-
const startedAt = Date.now();
|
|
163
|
-
const identityCache = new Map();
|
|
164
|
-
const out = [];
|
|
165
|
-
let demotedFiles = 0;
|
|
166
|
-
let demotedDiagnostics = 0;
|
|
167
|
-
let budgetExhausted = false;
|
|
168
|
-
let aborted = false;
|
|
169
|
-
for (const result of results) {
|
|
170
|
-
const diagnostics = result.diagnostics ?? [];
|
|
171
|
-
if (signal?.aborted) {
|
|
172
|
-
// Carry the remaining results through UNCHANGED rather than dropping
|
|
173
|
-
// them — an abort must cost the demotion, never a finding.
|
|
174
|
-
aborted = true;
|
|
175
|
-
out.push(result);
|
|
176
|
-
continue;
|
|
177
|
-
}
|
|
178
|
-
if (identityCache.size >= INFERRED_PROJECT_PROBE_BUDGET &&
|
|
179
|
-
!identityCache.has(result.filePath)) {
|
|
180
|
-
budgetExhausted = true;
|
|
181
|
-
out.push(result);
|
|
182
|
-
continue;
|
|
183
|
-
}
|
|
184
|
-
const demoted = await demoteInferredProjectDiagnostics(diagnostics, {
|
|
185
|
-
filePath: result.filePath,
|
|
186
|
-
cwd,
|
|
187
|
-
service,
|
|
188
|
-
identityCache,
|
|
189
|
-
signal,
|
|
190
|
-
});
|
|
191
|
-
if (demoted === diagnostics) {
|
|
192
|
-
out.push(result);
|
|
193
|
-
continue;
|
|
194
|
-
}
|
|
195
|
-
demotedFiles += 1;
|
|
196
|
-
demotedDiagnostics += demoted.filter((d, i) => d !== diagnostics[i]).length;
|
|
197
|
-
out.push({ ...result, diagnostics: demoted });
|
|
198
|
-
}
|
|
199
|
-
if (demotedFiles > 0 || budgetExhausted || aborted) {
|
|
200
|
-
logLatency({
|
|
201
|
-
type: "phase",
|
|
202
|
-
phase: "lsp_inferred_project_demote",
|
|
203
|
-
filePath: cwd,
|
|
204
|
-
durationMs: Date.now() - startedAt,
|
|
205
|
-
metadata: {
|
|
206
|
-
filesConsidered: results.length,
|
|
207
|
-
filesProbed: identityCache.size,
|
|
208
|
-
demotedFiles,
|
|
209
|
-
demotedDiagnostics,
|
|
210
|
-
budgetExhausted,
|
|
211
|
-
aborted,
|
|
212
|
-
},
|
|
213
|
-
});
|
|
214
|
-
}
|
|
215
|
-
return out;
|
|
216
|
-
}
|
|
@@ -1,298 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* JVM runtime discovery for language-runtime LSP servers (jdtls #241).
|
|
3
|
-
*
|
|
4
|
-
* jdtls is itself a Java application — its launcher invokes `java`. When `java`
|
|
5
|
-
* is not on PATH (common on Windows, where the Adoptium/Microsoft installers do
|
|
6
|
-
* NOT add themselves to PATH and leave JAVA_HOME unset), the server silently
|
|
7
|
-
* fails to spawn (`no_clients`). Rather than make the user hand-edit PATH, this
|
|
8
|
-
* discovers an already-installed JDK in the canonical per-platform locations and
|
|
9
|
-
* returns a spawn-env overlay (`JAVA_HOME` + `<jdk>/bin` prepended to PATH) that
|
|
10
|
-
* `launchLSP` merges in — so jdtls (and its child `java`) resolve the JDK.
|
|
11
|
-
*
|
|
12
|
-
* This is the discovery half of #241 (runtimeInstall + canonical bin discovery);
|
|
13
|
-
* the download half (fetch a Temurin JDK when none is found) is deferred.
|
|
14
|
-
*/
|
|
15
|
-
import { existsSync, readdirSync } from "node:fs";
|
|
16
|
-
import os from "node:os";
|
|
17
|
-
import path from "node:path";
|
|
18
|
-
import { classifyProbeFailure, createAvailabilityLatch, logAvailabilityDecision, startHostStallSampler, } from "../dispatch/runners/utils/availability-policy.js";
|
|
19
|
-
import { getGlobalPiLensDir } from "../file-utils.js";
|
|
20
|
-
import { safeSpawnAsync } from "../safe-spawn.js";
|
|
21
|
-
const JAVA_EXE = process.platform === "win32" ? "java.exe" : "java";
|
|
22
|
-
const JAVA_PROBE_TIMEOUT_MS = 5_000;
|
|
23
|
-
/** jdtls requires a JDK ≥ 17 to run; recent builds prefer 21. */
|
|
24
|
-
const MIN_JAVA_MAJOR = 17;
|
|
25
|
-
/**
|
|
26
|
-
* Resolve a directory to a valid JDK home. Accepts either a JDK home directly
|
|
27
|
-
* (`<dir>/bin/java`) or a macOS bundle (`<dir>/Contents/Home/bin/java`).
|
|
28
|
-
*/
|
|
29
|
-
function jdkHomeFrom(dir) {
|
|
30
|
-
if (existsSync(path.join(dir, "bin", JAVA_EXE)))
|
|
31
|
-
return dir;
|
|
32
|
-
const macHome = path.join(dir, "Contents", "Home");
|
|
33
|
-
if (existsSync(path.join(macHome, "bin", JAVA_EXE)))
|
|
34
|
-
return macHome;
|
|
35
|
-
return undefined;
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* Best-effort major-version parse from a JDK directory name, e.g.
|
|
39
|
-
* `jdk-21.0.11.10-hotspot` → 21, `zulu-17` → 17, `jdk1.8.0_402` → 8. Returns 0
|
|
40
|
-
* when unparseable (still a usable candidate, just lowest priority).
|
|
41
|
-
*/
|
|
42
|
-
function parseMajorVersion(name) {
|
|
43
|
-
// Legacy "1.8.0" scheme (Java 8 and earlier): a "1." NOT preceded by another
|
|
44
|
-
// digit (so it never false-matches inside "21.0.11" or "jdk-11").
|
|
45
|
-
const legacy = name.match(/(?<!\d)1\.(\d+)/);
|
|
46
|
-
if (legacy)
|
|
47
|
-
return Number.parseInt(legacy[1], 10);
|
|
48
|
-
// Modern scheme: the first 1–2 digit run at a non-digit boundary (jdk-21 → 21).
|
|
49
|
-
const modern = name.match(/(?<!\d)(\d{1,2})/);
|
|
50
|
-
return modern ? Number.parseInt(modern[1], 10) : 0;
|
|
51
|
-
}
|
|
52
|
-
/** Immediate child directories of `base`, or [] if `base` is absent/unreadable. */
|
|
53
|
-
function childDirs(base) {
|
|
54
|
-
try {
|
|
55
|
-
return readdirSync(base, { withFileTypes: true })
|
|
56
|
-
.filter((e) => e.isDirectory() || e.isSymbolicLink())
|
|
57
|
-
.map((e) => path.join(base, e.name));
|
|
58
|
-
}
|
|
59
|
-
catch {
|
|
60
|
-
return [];
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
/** Per-platform roots whose immediate children are individual JDK installs. */
|
|
64
|
-
function candidateRoots() {
|
|
65
|
-
const home = os.homedir();
|
|
66
|
-
const roots = [];
|
|
67
|
-
// JetBrains and pi-lens managed (Tier 2 download target) — all platforms.
|
|
68
|
-
roots.push(path.join(home, ".jdks"));
|
|
69
|
-
roots.push(path.join(getGlobalPiLensDir(), "tools"));
|
|
70
|
-
if (process.platform === "win32") {
|
|
71
|
-
const progFiles = [
|
|
72
|
-
process.env.ProgramFiles,
|
|
73
|
-
process.env["ProgramFiles(x86)"],
|
|
74
|
-
process.env.ProgramW6432,
|
|
75
|
-
path.join(process.env.LOCALAPPDATA ?? path.join(home, "AppData", "Local"), "Programs"),
|
|
76
|
-
].filter((p) => Boolean(p));
|
|
77
|
-
for (const base of progFiles) {
|
|
78
|
-
roots.push(path.join(base, "Eclipse Adoptium"));
|
|
79
|
-
roots.push(path.join(base, "Java"));
|
|
80
|
-
roots.push(path.join(base, "Microsoft"));
|
|
81
|
-
roots.push(path.join(base, "Zulu"));
|
|
82
|
-
roots.push(path.join(base, "Amazon Corretto"));
|
|
83
|
-
roots.push(path.join(base, "BellSoft"));
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
else if (process.platform === "darwin") {
|
|
87
|
-
roots.push("/Library/Java/JavaVirtualMachines");
|
|
88
|
-
roots.push(path.join(home, "Library", "Java", "JavaVirtualMachines"));
|
|
89
|
-
roots.push("/opt/homebrew/opt");
|
|
90
|
-
roots.push("/usr/local/opt");
|
|
91
|
-
}
|
|
92
|
-
else {
|
|
93
|
-
roots.push("/usr/lib/jvm");
|
|
94
|
-
roots.push("/usr/java");
|
|
95
|
-
roots.push("/opt/java");
|
|
96
|
-
}
|
|
97
|
-
return roots;
|
|
98
|
-
}
|
|
99
|
-
/**
|
|
100
|
-
* Scan canonical locations (plus `JAVA_HOME`) for an installed JDK ≥ 17. Returns
|
|
101
|
-
* the highest-version match, or undefined when none is found. Pure filesystem
|
|
102
|
-
* stat/readdir — no spawning, no network.
|
|
103
|
-
*/
|
|
104
|
-
export function discoverJdkHome(roots = candidateRoots(), javaHome = process.env.JAVA_HOME) {
|
|
105
|
-
const found = [];
|
|
106
|
-
if (javaHome) {
|
|
107
|
-
const resolved = jdkHomeFrom(javaHome);
|
|
108
|
-
// Trust an explicit JAVA_HOME regardless of how its name parses.
|
|
109
|
-
if (resolved)
|
|
110
|
-
found.push({ home: resolved, major: Number.MAX_SAFE_INTEGER });
|
|
111
|
-
}
|
|
112
|
-
for (const root of roots) {
|
|
113
|
-
for (const dir of childDirs(root)) {
|
|
114
|
-
const resolved = jdkHomeFrom(dir);
|
|
115
|
-
if (!resolved)
|
|
116
|
-
continue;
|
|
117
|
-
found.push({
|
|
118
|
-
home: resolved,
|
|
119
|
-
major: parseMajorVersion(path.basename(dir)),
|
|
120
|
-
});
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
// Require a parseable major ≥ 17 (jdtls's floor). An explicit JAVA_HOME is
|
|
124
|
-
// stamped MAX above, so it always passes regardless of how its name parses.
|
|
125
|
-
const usable = found.filter((c) => c.major >= MIN_JAVA_MAJOR);
|
|
126
|
-
if (usable.length === 0)
|
|
127
|
-
return undefined;
|
|
128
|
-
usable.sort((a, b) => b.major - a.major);
|
|
129
|
-
return usable[0].home;
|
|
130
|
-
}
|
|
131
|
-
let _cachedEnv;
|
|
132
|
-
/**
|
|
133
|
-
* Availability latch for the `java` PATH probe (#1538, the #1467 latch family's
|
|
134
|
-
* benign-direction sibling). A stalled probe is not evidence the tool is
|
|
135
|
-
* missing — only a genuine "not found" (or a genuinely resolvable `java`) is a
|
|
136
|
-
* durable fact worth caching for the session. A transient verdict (timeout,
|
|
137
|
-
* abort, host stall) expires on the shared cooldown and is re-probed on the
|
|
138
|
-
* next demand instead of pinning whatever `JAVA_HOME` happened to be ambient.
|
|
139
|
-
*/
|
|
140
|
-
const javaAvailabilityLatch = createAvailabilityLatch();
|
|
141
|
-
/**
|
|
142
|
-
* Shared spawn while a probe is in flight (#1538 follow-up). Without this, two
|
|
143
|
-
* concurrent `resolveJavaRuntimeEnv` calls — e.g. a multi-root Java project
|
|
144
|
-
* spawning jdtls per root — each fire their own 5 s `where`/`which java`, and
|
|
145
|
-
* every expired cooldown reopens that window for the process's whole
|
|
146
|
-
* lifetime, not just at startup.
|
|
147
|
-
*/
|
|
148
|
-
let inFlightJavaProbe = null;
|
|
149
|
-
export function _resetJvmRuntimeCacheForTests() {
|
|
150
|
-
_cachedEnv = undefined;
|
|
151
|
-
javaAvailabilityLatch.reset();
|
|
152
|
-
inFlightJavaProbe = null;
|
|
153
|
-
}
|
|
154
|
-
/**
|
|
155
|
-
* Probe `java` on PATH, distinguishing a durable verdict (found, or genuinely
|
|
156
|
-
* absent) from a transient probe failure. Returns `true`/`false` for a durable
|
|
157
|
-
* verdict; `undefined` when the probe was transient — including a memo served
|
|
158
|
-
* from mid-cooldown — so the caller must not treat this call as proof `java`
|
|
159
|
-
* is absent.
|
|
160
|
-
*
|
|
161
|
-
* `AvailabilityLatch.read()` returns `false` (not `null`) for BOTH a durable
|
|
162
|
-
* "not found" AND a transient verdict whose cooldown hasn't expired yet — the
|
|
163
|
-
* latch's own contract is "cache a safe fallback answer for this call", not
|
|
164
|
-
* "this is durable". Blindly forwarding that `false` as durable is exactly
|
|
165
|
-
* the #1538 bug moved one call deeper: jdtls's failed-spawn retry
|
|
166
|
-
* (`BROKEN_BASE_COOLDOWN_MS`, `clients/lsp/index.ts`) re-enters
|
|
167
|
-
* `resolveJavaRuntimeEnv` ~15-20 s later — inside this probe's 30 s transient
|
|
168
|
-
* cooldown — so the very first retry after a stall would otherwise still
|
|
169
|
-
* launder into the permanent `_cachedEnv`. Only `javaAvailabilityLatch`'s own
|
|
170
|
-
* `outcome` distinguishes the two; a durable verdict is never `"transient"`.
|
|
171
|
-
*/
|
|
172
|
-
function probeJavaOnPath() {
|
|
173
|
-
const memo = javaAvailabilityLatch.read();
|
|
174
|
-
if (memo !== null) {
|
|
175
|
-
if (javaAvailabilityLatch.getOutcome() === "transient") {
|
|
176
|
-
// Served from the memo, but the cooldown from the earlier stall
|
|
177
|
-
// hasn't expired — this is NOT a durable verdict. Log it (otherwise
|
|
178
|
-
// this state leaves zero record in latency.log) and surface
|
|
179
|
-
// `undefined` so the caller never writes the session cache.
|
|
180
|
-
logAvailabilityDecision({
|
|
181
|
-
tool: "java",
|
|
182
|
-
verdict: "unavailable",
|
|
183
|
-
outcome: "transient",
|
|
184
|
-
cause: javaAvailabilityLatch.getCause() ?? "probe-timeout",
|
|
185
|
-
elapsedMs: 0,
|
|
186
|
-
latched: false,
|
|
187
|
-
retryAfterMs: Math.max(0, javaAvailabilityLatch.getRetryAtMs() - Date.now()),
|
|
188
|
-
budgetMs: JAVA_PROBE_TIMEOUT_MS,
|
|
189
|
-
// No probe ran here: the latch's own remembered cause is replayed
|
|
190
|
-
// as-is, so the call site is the one asserting it (#2209).
|
|
191
|
-
classifiedBy: "caller",
|
|
192
|
-
});
|
|
193
|
-
return Promise.resolve(undefined);
|
|
194
|
-
}
|
|
195
|
-
return Promise.resolve(memo);
|
|
196
|
-
}
|
|
197
|
-
if (inFlightJavaProbe)
|
|
198
|
-
return inFlightJavaProbe;
|
|
199
|
-
inFlightJavaProbe = runJavaProbe().finally(() => {
|
|
200
|
-
inFlightJavaProbe = null;
|
|
201
|
-
});
|
|
202
|
-
return inFlightJavaProbe;
|
|
203
|
-
}
|
|
204
|
-
/** The actual `where`/`which java` spawn + classification. Never call this
|
|
205
|
-
* directly — go through `probeJavaOnPath()`, which memoizes and dedupes it. */
|
|
206
|
-
async function runJavaProbe() {
|
|
207
|
-
const finder = process.platform === "win32" ? "where" : "which";
|
|
208
|
-
const startedAt = Date.now();
|
|
209
|
-
const sampler = startHostStallSampler();
|
|
210
|
-
let result;
|
|
211
|
-
let hostStallMs;
|
|
212
|
-
try {
|
|
213
|
-
result = await safeSpawnAsync(finder, ["java"], {
|
|
214
|
-
timeout: JAVA_PROBE_TIMEOUT_MS,
|
|
215
|
-
});
|
|
216
|
-
}
|
|
217
|
-
finally {
|
|
218
|
-
hostStallMs = sampler.stop();
|
|
219
|
-
}
|
|
220
|
-
const elapsedMs = Date.now() - startedAt;
|
|
221
|
-
if (result.status === 0 && !result.error) {
|
|
222
|
-
javaAvailabilityLatch.noteAvailable();
|
|
223
|
-
logAvailabilityDecision({
|
|
224
|
-
tool: "java",
|
|
225
|
-
verdict: "available",
|
|
226
|
-
outcome: "success",
|
|
227
|
-
cause: "ok",
|
|
228
|
-
elapsedMs,
|
|
229
|
-
latched: true,
|
|
230
|
-
hostStallMs,
|
|
231
|
-
budgetMs: JAVA_PROBE_TIMEOUT_MS,
|
|
232
|
-
classifiedBy: "probe",
|
|
233
|
-
});
|
|
234
|
-
return true;
|
|
235
|
-
}
|
|
236
|
-
// A `where`/`which` that ran fine and found nothing is a genuine absence,
|
|
237
|
-
// same as a pre-existing #1496/#1467 sibling; anything else (timeout,
|
|
238
|
-
// abort, host stall) is transient and must not latch.
|
|
239
|
-
const { outcome, cause } = classifyProbeFailure(result, {
|
|
240
|
-
hostStallMs,
|
|
241
|
-
unclassifiedFailureOutcome: "missing",
|
|
242
|
-
});
|
|
243
|
-
const retryAfterMs = javaAvailabilityLatch.noteUnavailable(outcome, cause);
|
|
244
|
-
logAvailabilityDecision({
|
|
245
|
-
tool: "java",
|
|
246
|
-
verdict: "unavailable",
|
|
247
|
-
outcome,
|
|
248
|
-
cause,
|
|
249
|
-
elapsedMs,
|
|
250
|
-
latched: outcome !== "transient",
|
|
251
|
-
hostStallMs,
|
|
252
|
-
...(retryAfterMs > 0 && { retryAfterMs }),
|
|
253
|
-
budgetMs: JAVA_PROBE_TIMEOUT_MS,
|
|
254
|
-
classifiedBy: "probe",
|
|
255
|
-
});
|
|
256
|
-
return outcome === "transient" ? undefined : false;
|
|
257
|
-
}
|
|
258
|
-
/**
|
|
259
|
-
* Spawn-env overlay that makes a JVM-gated server (jdtls) launch when `java`
|
|
260
|
-
* isn't on PATH. Returns undefined when `java` is already resolvable (respect
|
|
261
|
-
* the user's PATH java) or when no JDK can be discovered (fail as before).
|
|
262
|
-
*
|
|
263
|
-
* Memoized per process — but only once the verdict is durable. A JDK found by
|
|
264
|
-
* filesystem discovery is always safe to cache immediately: `discoverJdkHome`
|
|
265
|
-
* is pure stat/readdir, unaffected by the PATH probe's timing. When no JDK is
|
|
266
|
-
* discovered AND the PATH probe was transient, nothing is cached — the next
|
|
267
|
-
* call re-probes (respecting the latch's own cooldown) instead of pinning a
|
|
268
|
-
* "no override" verdict that a stalled probe never earned (#1538).
|
|
269
|
-
*/
|
|
270
|
-
export async function resolveJavaRuntimeEnv() {
|
|
271
|
-
if (_cachedEnv)
|
|
272
|
-
return _cachedEnv.value;
|
|
273
|
-
// `java` already on PATH — nothing to inject; defer to the user's runtime.
|
|
274
|
-
const javaOnPath = await probeJavaOnPath();
|
|
275
|
-
if (javaOnPath === true) {
|
|
276
|
-
_cachedEnv = { value: undefined };
|
|
277
|
-
return undefined;
|
|
278
|
-
}
|
|
279
|
-
const home = discoverJdkHome();
|
|
280
|
-
if (home) {
|
|
281
|
-
const binDir = path.join(home, "bin");
|
|
282
|
-
const currentPath = process.env.PATH ?? process.env.Path ?? "";
|
|
283
|
-
_cachedEnv = {
|
|
284
|
-
value: {
|
|
285
|
-
JAVA_HOME: home,
|
|
286
|
-
PATH: binDir + path.delimiter + currentPath,
|
|
287
|
-
},
|
|
288
|
-
};
|
|
289
|
-
return _cachedEnv.value;
|
|
290
|
-
}
|
|
291
|
-
// No JDK discovered. Cache "no override" only when the PATH probe gave a
|
|
292
|
-
// durable "not found" — a transient probe (timeout/host-stall) must not
|
|
293
|
-
// pin this session to `undefined` forever.
|
|
294
|
-
if (javaOnPath === false) {
|
|
295
|
-
_cachedEnv = { value: undefined };
|
|
296
|
-
}
|
|
297
|
-
return undefined;
|
|
298
|
-
}
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
import path from "node:path";
|
|
2
|
-
import { getLanguageId as getKindLanguageId, SPECIAL_FILENAMES, } from "../file-kinds.js";
|
|
3
|
-
import { getLspCapableKinds } from "../language-policy.js";
|
|
4
|
-
import { EXTENSION_TO_LSP_ID } from "../language-registry.js";
|
|
5
|
-
/**
|
|
6
|
-
* Language ID Mappings for LSP
|
|
7
|
-
*
|
|
8
|
-
* Maps file extensions to LSP language identifiers.
|
|
9
|
-
*/
|
|
10
|
-
/**
|
|
11
|
-
* Extension -> LSP `languageId`, projected from the canonical language registry
|
|
12
|
-
* (clients/language-registry.ts, #2424). One FileKind can span several LSP ids
|
|
13
|
-
* (jsts covers typescript/typescriptreact/vue, cxx covers c and cpp) and the
|
|
14
|
-
* protocol spells some of them differently from the canonical id
|
|
15
|
-
* ("shellscript", not "shell"), so the registry carries an `lspId` column and
|
|
16
|
-
* this map is a pure projection of it — `Readonly` because the projection is
|
|
17
|
-
* `Object.freeze`d at the source (#2424 review, S4).
|
|
18
|
-
*
|
|
19
|
-
* #1545 added a derived per-kind fill-in on top of the then-hand-curated table:
|
|
20
|
-
* powershell had no entry at all and cxx covered a third of its extensions, so
|
|
21
|
-
* `didOpen` announced those files as "plaintext". Tolerance for that varies by
|
|
22
|
-
* server — json/yaml/clangd answer the same either way, a DocumentSelector
|
|
23
|
-
* server may not handle the document at all — so the id is sent correctly
|
|
24
|
-
* rather than relied on being ignored. The registry now owns every extension of
|
|
25
|
-
* every lspCapable kind, so that fill-in contributed ZERO entries and is gone
|
|
26
|
-
* (#2424 review, named output a). The net it provided is now a test, not a
|
|
27
|
-
* runtime `??=`: lsp-capable-seam-coverage's "maps every lspCapable kind's
|
|
28
|
-
* extensions to an LSP language id" fails the moment the registry misses one,
|
|
29
|
-
* which is the fix a silent per-kind fallback would have hidden.
|
|
30
|
-
*/
|
|
31
|
-
export const LANGUAGE_EXTENSIONS = EXTENSION_TO_LSP_ID;
|
|
32
|
-
/**
|
|
33
|
-
* file-kinds.ts's basename classifier (Makefile, Dockerfile.<suffix>,
|
|
34
|
-
* CMakeLists.txt, …) matches by regex, not literal filename, so it can't be
|
|
35
|
-
* flattened into LANGUAGE_EXTENSIONS' literal-key map. Derived from
|
|
36
|
-
* SPECIAL_FILENAMES — the same single source of truth detectFileKind() uses —
|
|
37
|
-
* filtered to lspCapable kinds so a basename pattern that classifies into an
|
|
38
|
-
* lspCapable kind always resolves a language id here too (#1594).
|
|
39
|
-
*/
|
|
40
|
-
const BASENAME_LANGUAGE_PATTERNS = (() => {
|
|
41
|
-
const lspCapableKinds = new Set(getLspCapableKinds());
|
|
42
|
-
return SPECIAL_FILENAMES.filter(({ kind }) => lspCapableKinds.has(kind)).map(({ pattern, kind }) => ({
|
|
43
|
-
pattern,
|
|
44
|
-
languageId: getKindLanguageId(kind),
|
|
45
|
-
}));
|
|
46
|
-
})();
|
|
47
|
-
function getBasenameLanguageId(base) {
|
|
48
|
-
return BASENAME_LANGUAGE_PATTERNS.find(({ pattern }) => pattern.test(base))
|
|
49
|
-
?.languageId;
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Get language ID for a file path
|
|
53
|
-
*/
|
|
54
|
-
export function getLanguageId(filePath) {
|
|
55
|
-
const ext = path.extname(filePath).toLowerCase();
|
|
56
|
-
if (ext && LANGUAGE_EXTENSIONS[ext]) {
|
|
57
|
-
return LANGUAGE_EXTENSIONS[ext];
|
|
58
|
-
}
|
|
59
|
-
const base = path.basename(filePath);
|
|
60
|
-
return (LANGUAGE_EXTENSIONS[base] ??
|
|
61
|
-
LANGUAGE_EXTENSIONS[base.toLowerCase()] ??
|
|
62
|
-
getBasenameLanguageId(base));
|
|
63
|
-
}
|