@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,414 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Oxlint runner for dispatch system
|
|
3
|
-
*
|
|
4
|
-
* Fast JavaScript/TypeScript linter written in Rust.
|
|
5
|
-
* Drop-in replacement for ESLint with better performance.
|
|
6
|
-
*
|
|
7
|
-
* Requires: oxlint (npm install -g oxlint)
|
|
8
|
-
*/
|
|
9
|
-
import * as path from "node:path";
|
|
10
|
-
import { findLocalBinUpwards } from "../../package-manager.js";
|
|
11
|
-
import { pathsEqual } from "../../path-utils.js";
|
|
12
|
-
import { safeSpawnAsync } from "../../safe-spawn.js";
|
|
13
|
-
import { resolveRunnerCwd } from "../../tool-cwd.js";
|
|
14
|
-
import { truncatedByOutputCap } from "../../spawn-output-cap.js";
|
|
15
|
-
import { getJstsLintPolicyForCwd, hasVitePlusConfig, } from "../../tool-policy.js";
|
|
16
|
-
import { PRIORITY } from "../priorities.js";
|
|
17
|
-
import { resolveToolCommand, resolveToolCommandWithInstallFallback, } from "./utils/runner-helpers.js";
|
|
18
|
-
import { finishParsedRun, parseToolRun } from "./utils/tool-failure.js";
|
|
19
|
-
// One file's JSON report. Nothing legitimate approaches 8 MiB here, so this is
|
|
20
|
-
// a blast-radius bound on a runaway or wedged oxlint rather than a working
|
|
21
|
-
// limit — the same value MAX_SG_OUTPUT_BYTES and MAX_REPORT_BYTES use, and what
|
|
22
|
-
// makes `outputTruncated` reachable for this runner at all (#2100).
|
|
23
|
-
const MAX_OXLINT_OUTPUT_BYTES = 8 * 1024 * 1024;
|
|
24
|
-
const OXLINT_NO_FILES = Symbol("oxlint-no-files");
|
|
25
|
-
const OXLINT_NO_FILES_UNCONFIRMED = Symbol("oxlint-no-files-unconfirmed");
|
|
26
|
-
const OXLINT_NO_FILES_BANNER = "No files found to lint. Please check your paths and ignore patterns.";
|
|
27
|
-
const OXLINT_NO_FILES_REPORT_KEYS = new Set([
|
|
28
|
-
"diagnostics",
|
|
29
|
-
"number_of_files",
|
|
30
|
-
"number_of_rules",
|
|
31
|
-
"threads_count",
|
|
32
|
-
"start_time",
|
|
33
|
-
]);
|
|
34
|
-
/**
|
|
35
|
-
* Vite+'s `vp` from the project's own `node_modules/.bin`.
|
|
36
|
-
*
|
|
37
|
-
* Delegates to THE shared bin walker (#2544 review F1). This was a private,
|
|
38
|
-
* UNCEILINGED copy of that walk, while `formatters.ts`'s `oxfmtFormatter`
|
|
39
|
-
* resolved the SAME binary — `vp` — through the ceilinged `findInNodeModules`:
|
|
40
|
-
* one `vp` resolver stopped at `$HOME` and the other climbed past it to the
|
|
41
|
-
* filesystem root, so which policy applied depended on whether the format path
|
|
42
|
-
* or the lint path asked. A `node_modules/.bin/vp` at or above `$HOME` can
|
|
43
|
-
* never be this project's own Vite+ install (#2514).
|
|
44
|
-
*/
|
|
45
|
-
function resolveLocalVp(cwd) {
|
|
46
|
-
return findLocalBinUpwards("vp", cwd) ?? null;
|
|
47
|
-
}
|
|
48
|
-
async function resolveVitePlusCommand(cwd) {
|
|
49
|
-
const local = resolveLocalVp(cwd);
|
|
50
|
-
if (local)
|
|
51
|
-
return local;
|
|
52
|
-
const version = await safeSpawnAsync("vp", ["--version"], {
|
|
53
|
-
timeout: 5000,
|
|
54
|
-
cwd,
|
|
55
|
-
});
|
|
56
|
-
return !version.error && version.status === 0 ? "vp" : null;
|
|
57
|
-
}
|
|
58
|
-
const oxlintRunner = {
|
|
59
|
-
id: "oxlint",
|
|
60
|
-
appliesTo: ["jsts"],
|
|
61
|
-
priority: PRIORITY.LINT_SECONDARY,
|
|
62
|
-
skipTestFiles: false,
|
|
63
|
-
async run(ctx) {
|
|
64
|
-
const cwd = resolveRunnerCwd(ctx, "oxlint");
|
|
65
|
-
const policy = getJstsLintPolicyForCwd(cwd);
|
|
66
|
-
if (!policy.preferredRunners.includes("oxlint")) {
|
|
67
|
-
return { status: "skipped", diagnostics: [], semantic: "none" };
|
|
68
|
-
}
|
|
69
|
-
let cmd = null;
|
|
70
|
-
let args;
|
|
71
|
-
if (hasVitePlusConfig(cwd)) {
|
|
72
|
-
cmd = await resolveVitePlusCommand(cwd);
|
|
73
|
-
}
|
|
74
|
-
if (cmd) {
|
|
75
|
-
args = ["lint", "--format", "json", ctx.filePath];
|
|
76
|
-
}
|
|
77
|
-
else {
|
|
78
|
-
// Use ctx.hasTool for async availability check — avoids the synchronous
|
|
79
|
-
// spawnSync probe that blocks the event loop on first call per cwd.
|
|
80
|
-
// FactStore caches the result for the session so subsequent writes are free.
|
|
81
|
-
const oxlintCmd = resolveToolCommand(cwd, "oxlint") ?? "oxlint";
|
|
82
|
-
cmd = (await ctx.hasTool(oxlintCmd))
|
|
83
|
-
? oxlintCmd
|
|
84
|
-
: await resolveToolCommandWithInstallFallback(cwd, "oxlint");
|
|
85
|
-
args = ["--format", "json", ctx.filePath];
|
|
86
|
-
}
|
|
87
|
-
if (!cmd) {
|
|
88
|
-
return { status: "skipped", diagnostics: [], semantic: "none" };
|
|
89
|
-
}
|
|
90
|
-
// Run oxlint (or Vite+'s vp lint wrapper) on the file.
|
|
91
|
-
const result = await safeSpawnAsync(cmd, args, {
|
|
92
|
-
cwd,
|
|
93
|
-
timeout: 30000,
|
|
94
|
-
maxOutputBytes: MAX_OXLINT_OUTPUT_BYTES,
|
|
95
|
-
});
|
|
96
|
-
// Oxlint exits 0 whenever nothing at ERROR severity was found — that
|
|
97
|
-
// includes a run that found only warnings, its own default severity
|
|
98
|
-
// (#1947). A run that found nothing at all also exits 0, but still
|
|
99
|
-
// prints a report with an empty `diagnostics` array, so parsing
|
|
100
|
-
// unconditionally and branching on the parsed count (below) tells the
|
|
101
|
-
// two apart instead of the exit code discarding the warning case.
|
|
102
|
-
//
|
|
103
|
-
// Parse JSON output. Fall back to the unix-format parser if JSON parsing
|
|
104
|
-
// fails (older oxlint versions, malformed stderr noise, etc.) — keeps the
|
|
105
|
-
// runner producing diagnostics even when the structured-fix metadata is
|
|
106
|
-
// unavailable.
|
|
107
|
-
const stdout = result.stdout ?? "";
|
|
108
|
-
const stderr = result.stderr ?? "";
|
|
109
|
-
const parsedOutput = stdout + stderr;
|
|
110
|
-
const noFilesDecision = decideOxlintNoFiles(result, stdout, stderr);
|
|
111
|
-
// #1994's shared gate classifies invocation and parsed-output failures.
|
|
112
|
-
// The private markers preserve one legitimate nonzero/empty shape and
|
|
113
|
-
// force a status-0 lookalike away from clean. Neither escapes this runner.
|
|
114
|
-
// parseToolRun checks process failures before invoking this parser, so
|
|
115
|
-
// spawn/timeout/killed/signal precedence remains owned by #1994.
|
|
116
|
-
const parsedRun = parseToolRun("oxlint", {
|
|
117
|
-
result,
|
|
118
|
-
output: parsedOutput,
|
|
119
|
-
// EXIT TABLE (oxlint 0.8 measured fixture): 0 clean; 1 findings; 2 error; other nonzero rejected.
|
|
120
|
-
exitCodes: { ran: [1, 2] },
|
|
121
|
-
}, () => {
|
|
122
|
-
if (noFilesDecision.kind === "expected-no-files") {
|
|
123
|
-
return [OXLINT_NO_FILES];
|
|
124
|
-
}
|
|
125
|
-
if (noFilesDecision.kind === "unconfirmed-no-files" &&
|
|
126
|
-
result.status === 0) {
|
|
127
|
-
return [OXLINT_NO_FILES_UNCONFIRMED];
|
|
128
|
-
}
|
|
129
|
-
let parsed = parseOxlintJson(stdout, ctx.filePath, cwd);
|
|
130
|
-
if (parsed.length === 0 && stdout.length > 0) {
|
|
131
|
-
parsed = parseOxlintUnix(parsedOutput, ctx.filePath, cwd);
|
|
132
|
-
}
|
|
133
|
-
return parsed;
|
|
134
|
-
}, { parseOutput: parsedOutput });
|
|
135
|
-
if (parsedRun.skipped)
|
|
136
|
-
return parsedRun.skipped;
|
|
137
|
-
if (parsedRun.diagnostics.includes(OXLINT_NO_FILES)) {
|
|
138
|
-
// Real captured bytes show oxlint exits
|
|
139
|
-
// 1 with "No files found" + number_of_files: 0 when a config excludes
|
|
140
|
-
// the target, so "nonzero exit" alone cannot mean "unreadable report
|
|
141
|
-
// of problems" until the no-files shape is ruled out.
|
|
142
|
-
// Read BEFORE reporting "succeeded" — a config (root's or a nested
|
|
143
|
-
// one nearer the file, per oxlint's own discovery) that ignores this
|
|
144
|
-
// file reports the same empty diagnostics array a clean file does.
|
|
145
|
-
// "succeeded"/"none" would say "we checked, it's clean"; this file
|
|
146
|
-
// was never checked at all.
|
|
147
|
-
return {
|
|
148
|
-
status: "skipped",
|
|
149
|
-
diagnostics: [],
|
|
150
|
-
semantic: "none",
|
|
151
|
-
skipReason: "no-files-matched",
|
|
152
|
-
};
|
|
153
|
-
}
|
|
154
|
-
if (parsedRun.diagnostics.includes(OXLINT_NO_FILES_UNCONFIRMED)) {
|
|
155
|
-
const reason = noFilesDecision.kind === "unconfirmed-no-files"
|
|
156
|
-
? noFilesDecision.reason
|
|
157
|
-
: "status-zero";
|
|
158
|
-
return {
|
|
159
|
-
status: "failed",
|
|
160
|
-
diagnostics: [
|
|
161
|
-
{
|
|
162
|
-
id: `oxlint:no-files-unconfirmed:${reason}`,
|
|
163
|
-
message: `oxlint no-files report was not canonical (${reason})`,
|
|
164
|
-
filePath: ctx.filePath,
|
|
165
|
-
line: 1,
|
|
166
|
-
column: 1,
|
|
167
|
-
severity: "warning",
|
|
168
|
-
semantic: "warning",
|
|
169
|
-
tool: "oxlint",
|
|
170
|
-
},
|
|
171
|
-
],
|
|
172
|
-
semantic: "warning",
|
|
173
|
-
failureKind: "unconfirmed_output",
|
|
174
|
-
failureMessage: `no-files-${reason}`,
|
|
175
|
-
};
|
|
176
|
-
}
|
|
177
|
-
const diagnostics = parsedRun.diagnostics.filter((diagnostic) => diagnostic !== OXLINT_NO_FILES &&
|
|
178
|
-
diagnostic !== OXLINT_NO_FILES_UNCONFIRMED);
|
|
179
|
-
// A warning-only result on exit 0 is oxlint's normal outcome, not a
|
|
180
|
-
// failure: exit 0 means nothing hit ERROR severity. `status: "failed"`
|
|
181
|
-
// here would stop this arm from reporting "succeeded", which breaks two
|
|
182
|
-
// things downstream — plan.ts's ["eslint", "oxlint", "biome-check-json"]
|
|
183
|
-
// fallback group only stops at the first `status: "succeeded"` runner
|
|
184
|
-
// (dispatcher.ts's `runGroup`), so biome-check-json would run again on
|
|
185
|
-
// every warning-only save (extra spawns, a possible install, duplicate
|
|
186
|
-
// findings); and it would mismatch the sibling convention (biome-check,
|
|
187
|
-
// golangci-lint, rubocop) of keying `status` off blocking severity, not
|
|
188
|
-
// off the tool's raw exit code. The findings themselves still reach the
|
|
189
|
-
// delivery pipeline regardless of `status` — dispatcher.ts buckets by
|
|
190
|
-
// each diagnostic's own `semantic`, so a warning stays a warning.
|
|
191
|
-
return finishParsedRun({
|
|
192
|
-
tool: "oxlint",
|
|
193
|
-
ctx,
|
|
194
|
-
result,
|
|
195
|
-
diagnostics,
|
|
196
|
-
classify: (diagnostics) => {
|
|
197
|
-
const hasBlocking = diagnostics.some((d) => d.semantic === "blocking");
|
|
198
|
-
return {
|
|
199
|
-
status: !hasBlocking && result.status === 0 ? "succeeded" : "failed",
|
|
200
|
-
semantic: hasBlocking ? "blocking" : "warning",
|
|
201
|
-
};
|
|
202
|
-
},
|
|
203
|
-
});
|
|
204
|
-
},
|
|
205
|
-
};
|
|
206
|
-
function oxlintProcessState(result) {
|
|
207
|
-
const failureKind = result.spawnFailure?.kind;
|
|
208
|
-
if (truncatedByOutputCap(result))
|
|
209
|
-
return "truncated";
|
|
210
|
-
if (result.failure === "timeout" || failureKind === "timeout")
|
|
211
|
-
return "timeout";
|
|
212
|
-
if (result.failure === "aborted" || failureKind === "killed")
|
|
213
|
-
return "killed";
|
|
214
|
-
if (result.signal || result.failure === "signal")
|
|
215
|
-
return "signal";
|
|
216
|
-
if (result.failure === "spawn" || result.error)
|
|
217
|
-
return "spawn";
|
|
218
|
-
return "normal";
|
|
219
|
-
}
|
|
220
|
-
function isNonnegativeInteger(value) {
|
|
221
|
-
return Number.isInteger(value) && value >= 0;
|
|
222
|
-
}
|
|
223
|
-
function isPositiveInteger(value) {
|
|
224
|
-
return Number.isInteger(value) && value >= 1;
|
|
225
|
-
}
|
|
226
|
-
function isNonnegativeFinite(value) {
|
|
227
|
-
return typeof value === "number" && Number.isFinite(value) && value >= 0;
|
|
228
|
-
}
|
|
229
|
-
/**
|
|
230
|
-
* One decision seam for every oxlint no-files axis (#1998).
|
|
231
|
-
*
|
|
232
|
-
* Real oxlint 1.79.0 establishes the only expected shape: a normal completed
|
|
233
|
-
* process, exit 1, empty stderr, the exact no-files banner, and a JSON object
|
|
234
|
-
* containing exactly the five captured summary fields with canonical types
|
|
235
|
-
* and ranges. Diagnostics must be empty and `number_of_files` must be zero.
|
|
236
|
-
*
|
|
237
|
-
* Any process-control evidence wins before report bytes. Any no-files
|
|
238
|
-
* lookalike that differs on status, stderr, banner, JSON syntax/schema,
|
|
239
|
-
* diagnostics, or file count is unconfirmed rather than clean. A report with
|
|
240
|
-
* no no-files evidence remains an ordinary oxlint report for the normal parser.
|
|
241
|
-
*/
|
|
242
|
-
export function decideOxlintNoFiles(result, stdout, stderr) {
|
|
243
|
-
const processState = oxlintProcessState(result);
|
|
244
|
-
if (processState !== "normal") {
|
|
245
|
-
return {
|
|
246
|
-
kind: "unconfirmed-no-files",
|
|
247
|
-
reason: `process-${processState}`,
|
|
248
|
-
};
|
|
249
|
-
}
|
|
250
|
-
const jsonStart = stdout.indexOf("{");
|
|
251
|
-
const bannerText = (jsonStart === -1 ? stdout : stdout.slice(0, jsonStart)).trim();
|
|
252
|
-
const banner = bannerText === OXLINT_NO_FILES_BANNER
|
|
253
|
-
? "exact"
|
|
254
|
-
: /no files found.+lint/i.test(bannerText)
|
|
255
|
-
? "near"
|
|
256
|
-
: "missing";
|
|
257
|
-
let report;
|
|
258
|
-
let jsonMalformed = jsonStart === -1;
|
|
259
|
-
if (jsonStart !== -1) {
|
|
260
|
-
try {
|
|
261
|
-
const parsed = JSON.parse(stdout.slice(jsonStart));
|
|
262
|
-
if (typeof parsed === "object" &&
|
|
263
|
-
parsed !== null &&
|
|
264
|
-
!Array.isArray(parsed)) {
|
|
265
|
-
report = parsed;
|
|
266
|
-
}
|
|
267
|
-
else {
|
|
268
|
-
jsonMalformed = true;
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
catch {
|
|
272
|
-
jsonMalformed = true;
|
|
273
|
-
}
|
|
274
|
-
}
|
|
275
|
-
const hasFileCount = report !== undefined &&
|
|
276
|
-
Object.prototype.hasOwnProperty.call(report, "number_of_files");
|
|
277
|
-
const fileCount = report?.number_of_files;
|
|
278
|
-
const hasNoFilesEvidence = banner !== "missing" ||
|
|
279
|
-
(hasFileCount && (fileCount === 0 || !isNonnegativeInteger(fileCount)));
|
|
280
|
-
if (!hasNoFilesEvidence)
|
|
281
|
-
return { kind: "ordinary-report" };
|
|
282
|
-
if (result.status == null) {
|
|
283
|
-
return { kind: "unconfirmed-no-files", reason: "status-null" };
|
|
284
|
-
}
|
|
285
|
-
if (result.status === 0) {
|
|
286
|
-
return { kind: "unconfirmed-no-files", reason: "status-zero" };
|
|
287
|
-
}
|
|
288
|
-
if (result.status !== 1) {
|
|
289
|
-
return { kind: "unconfirmed-no-files", reason: "status-other" };
|
|
290
|
-
}
|
|
291
|
-
if (stderr.trim().length > 0) {
|
|
292
|
-
return { kind: "unconfirmed-no-files", reason: "stderr-nonempty" };
|
|
293
|
-
}
|
|
294
|
-
if (banner === "near") {
|
|
295
|
-
return { kind: "unconfirmed-no-files", reason: "banner-near" };
|
|
296
|
-
}
|
|
297
|
-
if (banner === "missing") {
|
|
298
|
-
return { kind: "unconfirmed-no-files", reason: "banner-missing" };
|
|
299
|
-
}
|
|
300
|
-
if (jsonMalformed || !report) {
|
|
301
|
-
return { kind: "unconfirmed-no-files", reason: "json-malformed" };
|
|
302
|
-
}
|
|
303
|
-
const keys = Object.keys(report);
|
|
304
|
-
if (keys.some((key) => !OXLINT_NO_FILES_REPORT_KEYS.has(key))) {
|
|
305
|
-
return { kind: "unconfirmed-no-files", reason: "json-unknown-key" };
|
|
306
|
-
}
|
|
307
|
-
if (OXLINT_NO_FILES_REPORT_KEYS.size !== keys.length ||
|
|
308
|
-
[...OXLINT_NO_FILES_REPORT_KEYS].some((key) => !Object.prototype.hasOwnProperty.call(report, key))) {
|
|
309
|
-
return { kind: "unconfirmed-no-files", reason: "json-missing-key" };
|
|
310
|
-
}
|
|
311
|
-
if (!Array.isArray(report.diagnostics) ||
|
|
312
|
-
!isNonnegativeInteger(report.number_of_files) ||
|
|
313
|
-
!isNonnegativeInteger(report.number_of_rules) ||
|
|
314
|
-
!isPositiveInteger(report.threads_count) ||
|
|
315
|
-
!isNonnegativeFinite(report.start_time)) {
|
|
316
|
-
return {
|
|
317
|
-
kind: "unconfirmed-no-files",
|
|
318
|
-
reason: "json-known-field-invalid",
|
|
319
|
-
};
|
|
320
|
-
}
|
|
321
|
-
if (report.diagnostics.length > 0) {
|
|
322
|
-
return { kind: "unconfirmed-no-files", reason: "diagnostics-nonempty" };
|
|
323
|
-
}
|
|
324
|
-
if (report.number_of_files !== 0) {
|
|
325
|
-
return { kind: "unconfirmed-no-files", reason: "files-nonzero" };
|
|
326
|
-
}
|
|
327
|
-
return { kind: "expected-no-files" };
|
|
328
|
-
}
|
|
329
|
-
// Oxlint codes look like "eslint(no-debugger)" or "oxc(approx-constant)".
|
|
330
|
-
// Strip the plugin prefix so the rule lines up with what users expect.
|
|
331
|
-
// indexOf-based extraction avoids a regex hot-spot Sonar flagged for
|
|
332
|
-
// potential super-linear backtracking on adversarial inputs.
|
|
333
|
-
function extractOxlintRule(code) {
|
|
334
|
-
if (!code)
|
|
335
|
-
return "unknown";
|
|
336
|
-
const open = code.indexOf("(");
|
|
337
|
-
if (open === -1)
|
|
338
|
-
return code;
|
|
339
|
-
const close = code.indexOf(")", open + 1);
|
|
340
|
-
if (close === -1 || close === open + 1)
|
|
341
|
-
return code;
|
|
342
|
-
return code.slice(open + 1, close);
|
|
343
|
-
}
|
|
344
|
-
function parseOxlintJson(raw, filePath, cwd) {
|
|
345
|
-
const trimmed = raw.trim();
|
|
346
|
-
if (!trimmed.startsWith("{"))
|
|
347
|
-
return [];
|
|
348
|
-
let parsed;
|
|
349
|
-
try {
|
|
350
|
-
parsed = JSON.parse(trimmed);
|
|
351
|
-
}
|
|
352
|
-
catch {
|
|
353
|
-
return [];
|
|
354
|
-
}
|
|
355
|
-
if (!Array.isArray(parsed.diagnostics))
|
|
356
|
-
return [];
|
|
357
|
-
const diagnostics = [];
|
|
358
|
-
const absTarget = path.resolve(cwd, filePath);
|
|
359
|
-
for (const d of parsed.diagnostics) {
|
|
360
|
-
if (!d.filename || !pathsEqual(path.resolve(cwd, d.filename), absTarget)) {
|
|
361
|
-
continue;
|
|
362
|
-
}
|
|
363
|
-
const rule = extractOxlintRule(d.code);
|
|
364
|
-
const label = d.labels?.[0]?.span;
|
|
365
|
-
const lineNum = label?.line ?? 1;
|
|
366
|
-
const colNum = label?.column ?? 1;
|
|
367
|
-
const severity = d.severity === "error" ? "error" : "warning";
|
|
368
|
-
const help = d.help?.trim();
|
|
369
|
-
diagnostics.push({
|
|
370
|
-
id: `oxlint-${rule}-${lineNum}`,
|
|
371
|
-
message: `${d.message ?? "oxlint issue"} (${rule})`,
|
|
372
|
-
filePath,
|
|
373
|
-
line: lineNum,
|
|
374
|
-
column: colNum,
|
|
375
|
-
severity,
|
|
376
|
-
semantic: severity === "error" ? "blocking" : "warning",
|
|
377
|
-
tool: "oxlint",
|
|
378
|
-
rule,
|
|
379
|
-
// Oxlint's help text is rule-specific guidance ("Remove the debugger
|
|
380
|
-
// statement", "Consider removing this declaration"). Surface it as a
|
|
381
|
-
// fix suggestion so the warning becomes actionable instead of falling
|
|
382
|
-
// silently into code-quality.
|
|
383
|
-
fixSuggestion: help && help.length > 0 ? help : undefined,
|
|
384
|
-
});
|
|
385
|
-
}
|
|
386
|
-
return diagnostics;
|
|
387
|
-
}
|
|
388
|
-
function parseOxlintUnix(raw, filePath, cwd) {
|
|
389
|
-
const diagnostics = [];
|
|
390
|
-
const absTarget = path.resolve(cwd, filePath);
|
|
391
|
-
for (const line of raw.split("\n")) {
|
|
392
|
-
// Parse: file:line:column: message (rule)
|
|
393
|
-
const match = line.match(/^(.+):(\d+):(\d+):\s*(.+?)\s*\(([^)]+)\)$/);
|
|
394
|
-
if (match) {
|
|
395
|
-
const [, reportedPath, lineStr, _col, message, rule] = match;
|
|
396
|
-
if (!reportedPath || !lineStr || !message || !rule)
|
|
397
|
-
continue;
|
|
398
|
-
if (!pathsEqual(path.resolve(cwd, reportedPath), absTarget))
|
|
399
|
-
continue;
|
|
400
|
-
diagnostics.push({
|
|
401
|
-
id: `oxlint-${rule}-${lineStr}`,
|
|
402
|
-
message: `${message} (${rule})`,
|
|
403
|
-
filePath,
|
|
404
|
-
line: parseInt(lineStr, 10),
|
|
405
|
-
severity: "warning",
|
|
406
|
-
semantic: "warning",
|
|
407
|
-
tool: "oxlint",
|
|
408
|
-
rule,
|
|
409
|
-
});
|
|
410
|
-
}
|
|
411
|
-
}
|
|
412
|
-
return diagnostics;
|
|
413
|
-
}
|
|
414
|
-
export default oxlintRunner;
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
import * as path from "node:path";
|
|
2
|
-
import { pathsEqual } from "../../path-utils.js";
|
|
3
|
-
import { safeSpawnAsync } from "../../safe-spawn.js";
|
|
4
|
-
import { resolveRunnerCwd } from "../../tool-cwd.js";
|
|
5
|
-
import { PRIORITY } from "../priorities.js";
|
|
6
|
-
import { createAvailabilityChecker } from "./utils/runner-helpers.js";
|
|
7
|
-
import { finishParsedRun, parseToolRun } from "./utils/tool-failure.js";
|
|
8
|
-
// PHP's `-l` exit contract, declared HERE rather than in the shared classifier
|
|
9
|
-
// (#3291 r3): an admission is a property of this tool. The manual documents
|
|
10
|
-
// `-l` as syntax-check-only with a nonzero return on failure; the captured
|
|
11
|
-
// PHP 8.3.32 wire exits 1 in the usual CLI path and 255 (the shell reading of
|
|
12
|
-
// PHP's documented -1) for the parse-error wire. Both are completed analyses
|
|
13
|
-
// whose output must reach the parser; any other nonzero status stays a
|
|
14
|
-
// rejected invocation.
|
|
15
|
-
const PHP_LINT_EXIT_CODES = { ran: [1, 255] };
|
|
16
|
-
const php = createAvailabilityChecker("php", ".exe");
|
|
17
|
-
function parsePhpLintOutput(raw, filePath, cwd) {
|
|
18
|
-
const output = raw.trim();
|
|
19
|
-
if (!output || !/(?:PHP )?Parse error:/i.test(output))
|
|
20
|
-
return [];
|
|
21
|
-
const lineMatch = output.match(/on line (\d+)/i);
|
|
22
|
-
const messageMatch = output.match(/PHP Parse error:\s*(.+?)(?:\s+in\s+(.+?)\s+on line \d+)?$/im) ??
|
|
23
|
-
output.match(/Parse error:\s*(.+?)(?:\s+in\s+(.+?)\s+on line \d+)?$/im);
|
|
24
|
-
// #3295: PHP names the file it could not parse in the same sentence. `php -l`
|
|
25
|
-
// follows no includes today, so this drops nothing under our argv — it pins
|
|
26
|
-
// the attribution the parser was asserting without asking.
|
|
27
|
-
const reported = messageMatch?.[2]?.trim();
|
|
28
|
-
if (reported &&
|
|
29
|
-
!pathsEqual(path.resolve(cwd, reported), path.resolve(cwd, filePath)))
|
|
30
|
-
return [];
|
|
31
|
-
return [
|
|
32
|
-
{
|
|
33
|
-
id: `php-lint:${lineMatch?.[1] ?? "1"}`,
|
|
34
|
-
message: messageMatch?.[1]?.trim() ?? output,
|
|
35
|
-
filePath,
|
|
36
|
-
line: lineMatch ? Number.parseInt(lineMatch[1], 10) : 1,
|
|
37
|
-
column: 1,
|
|
38
|
-
severity: "error",
|
|
39
|
-
semantic: "blocking",
|
|
40
|
-
tool: "php-lint",
|
|
41
|
-
rule: "syntax",
|
|
42
|
-
fixable: false,
|
|
43
|
-
},
|
|
44
|
-
];
|
|
45
|
-
}
|
|
46
|
-
const phpLintRunner = {
|
|
47
|
-
id: "php-lint",
|
|
48
|
-
appliesTo: ["php"],
|
|
49
|
-
priority: PRIORITY.GENERAL_ANALYSIS,
|
|
50
|
-
skipTestFiles: false,
|
|
51
|
-
async run(ctx) {
|
|
52
|
-
const cwd = resolveRunnerCwd(ctx, "php-lint");
|
|
53
|
-
if (!(await php.isAvailableAsync(cwd))) {
|
|
54
|
-
return { status: "skipped", diagnostics: [], semantic: "none" };
|
|
55
|
-
}
|
|
56
|
-
const cmd = php.getCommand(cwd);
|
|
57
|
-
if (!cmd) {
|
|
58
|
-
return { status: "skipped", diagnostics: [], semantic: "none" };
|
|
59
|
-
}
|
|
60
|
-
const absPath = path.resolve(cwd, ctx.filePath);
|
|
61
|
-
const result = await safeSpawnAsync(cmd, ["-l", absPath], {
|
|
62
|
-
timeout: 15000,
|
|
63
|
-
cwd,
|
|
64
|
-
});
|
|
65
|
-
// `output` is what the classifier judges AND what the parser reads: the
|
|
66
|
-
// parse error arrives on stderr, so both streams are one wire here. The
|
|
67
|
-
// exit table rides in this same per-runner input, never in a shared
|
|
68
|
-
// option (#3291 r3).
|
|
69
|
-
const run = parseToolRun("php-lint", {
|
|
70
|
-
result,
|
|
71
|
-
output: `${result.stdout ?? ""}\n${result.stderr ?? ""}`,
|
|
72
|
-
exitCodes: PHP_LINT_EXIT_CODES,
|
|
73
|
-
}, (output) => parsePhpLintOutput(output, ctx.filePath, cwd));
|
|
74
|
-
if (run.skipped)
|
|
75
|
-
return run.skipped;
|
|
76
|
-
return finishParsedRun({
|
|
77
|
-
tool: "php-lint",
|
|
78
|
-
ctx,
|
|
79
|
-
result,
|
|
80
|
-
diagnostics: run.diagnostics,
|
|
81
|
-
classify: () => ({ status: "failed", semantic: "blocking" }),
|
|
82
|
-
});
|
|
83
|
-
},
|
|
84
|
-
};
|
|
85
|
-
export default phpLintRunner;
|
|
@@ -1,120 +0,0 @@
|
|
|
1
|
-
import * as path from "node:path";
|
|
2
|
-
import { safeSpawnAsync } from "../../safe-spawn.js";
|
|
3
|
-
import { resolveRunnerCwd } from "../../tool-cwd.js";
|
|
4
|
-
import { getLinterPolicyForCwd, hasPhpstanConfig } from "../../tool-policy.js";
|
|
5
|
-
import { PRIORITY } from "../priorities.js";
|
|
6
|
-
import { createAvailabilityChecker, resolveVendorToolCommand, } from "./utils/runner-helpers.js";
|
|
7
|
-
import { parseToolRun } from "./utils/tool-failure.js";
|
|
8
|
-
import { finishParsedRun } from "./utils/tool-failure.js";
|
|
9
|
-
// EXIT TABLE (PHPStan 1.12 docs https://phpstan.org/user-guide/command-line-usage): 0 = no errors, 1 = errors found, 2 = a
|
|
10
|
-
// fatal/internal error that stopped the analysis. Only 1 is a run that carries
|
|
11
|
-
// findings.
|
|
12
|
-
const PHPSTAN_EXIT_CODES = { ran: [1] };
|
|
13
|
-
const phpstan = createAvailabilityChecker("phpstan", ".phar");
|
|
14
|
-
// phpstan analyses the target file PLUS its dependency closure and keys errors
|
|
15
|
-
// by the real file in `output.files`. Attribute each diagnostic to that key
|
|
16
|
-
// (resolved against cwd) rather than blanket-stamping ctx.filePath — otherwise a
|
|
17
|
-
// cross-file regression is mis-located onto the edited file (#265 A3). We do NOT
|
|
18
|
-
// filter to the edited file: surfacing the cross-file impact is the point.
|
|
19
|
-
export function parsePhpstanJson(raw, fallbackPath, cwd) {
|
|
20
|
-
try {
|
|
21
|
-
const output = JSON.parse(raw);
|
|
22
|
-
const diagnostics = [];
|
|
23
|
-
for (const [file, fileErrors] of Object.entries(output.files ?? {})) {
|
|
24
|
-
const filePath = file && file.trim()
|
|
25
|
-
? path.isAbsolute(file)
|
|
26
|
-
? file
|
|
27
|
-
: path.resolve(cwd, file)
|
|
28
|
-
: fallbackPath;
|
|
29
|
-
for (const err of fileErrors?.messages ?? []) {
|
|
30
|
-
diagnostics.push({
|
|
31
|
-
id: `phpstan:${err.line ?? 1}:${err.message.slice(0, 40)}`,
|
|
32
|
-
message: err.message,
|
|
33
|
-
filePath,
|
|
34
|
-
line: err.line ?? 1,
|
|
35
|
-
column: 1,
|
|
36
|
-
severity: "error",
|
|
37
|
-
semantic: "blocking",
|
|
38
|
-
tool: "phpstan",
|
|
39
|
-
rule: err.identifier || "phpstan",
|
|
40
|
-
fixable: false,
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
// #1937 round 2: the top-level `errors[]` array carries phpstan's
|
|
45
|
-
// FILE-INDEPENDENT findings — internal errors, and ignore patterns that
|
|
46
|
-
// matched nothing. A run can report `totals.errors: 1` with `files: {}`
|
|
47
|
-
// and exit 1, and reading only `files` turned that into zero
|
|
48
|
-
// diagnostics: the same defect class as the `errors`-vs-`messages` bug
|
|
49
|
-
// above, one level up. Pinned by
|
|
50
|
-
// tests/fixtures/runner-output/phpstan/top-level-errors.captured.json.
|
|
51
|
-
//
|
|
52
|
-
// These have no file or line, so they attach to the edited file at line
|
|
53
|
-
// 1. That is the honest placement: the reader needs to see them, and
|
|
54
|
-
// there is nowhere truer to put them.
|
|
55
|
-
for (const message of output.errors ?? []) {
|
|
56
|
-
if (typeof message !== "string" || !message.trim())
|
|
57
|
-
continue;
|
|
58
|
-
diagnostics.push({
|
|
59
|
-
id: `phpstan:global:${message.slice(0, 40)}`,
|
|
60
|
-
message,
|
|
61
|
-
filePath: fallbackPath,
|
|
62
|
-
line: 1,
|
|
63
|
-
column: 1,
|
|
64
|
-
severity: "error",
|
|
65
|
-
semantic: "blocking",
|
|
66
|
-
tool: "phpstan",
|
|
67
|
-
rule: "phpstan/analysis",
|
|
68
|
-
fixable: false,
|
|
69
|
-
});
|
|
70
|
-
}
|
|
71
|
-
return diagnostics;
|
|
72
|
-
}
|
|
73
|
-
catch {
|
|
74
|
-
return [];
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
async function resolvePhpstan(cwd) {
|
|
78
|
-
if (await phpstan.isAvailableAsync(cwd))
|
|
79
|
-
return phpstan.getCommand(cwd);
|
|
80
|
-
return resolveVendorToolCommand(cwd, "phpstan", ".bat");
|
|
81
|
-
}
|
|
82
|
-
const phpstanRunner = {
|
|
83
|
-
id: "phpstan",
|
|
84
|
-
appliesTo: ["php"],
|
|
85
|
-
priority: PRIORITY.GENERAL_ANALYSIS,
|
|
86
|
-
skipTestFiles: false,
|
|
87
|
-
async run(ctx) {
|
|
88
|
-
const cwd = resolveRunnerCwd(ctx, "phpstan");
|
|
89
|
-
const policy = getLinterPolicyForCwd(ctx.filePath, cwd);
|
|
90
|
-
if (policy && !policy.preferredRunners.includes("phpstan")) {
|
|
91
|
-
return { status: "skipped", diagnostics: [], semantic: "none" };
|
|
92
|
-
}
|
|
93
|
-
// Only run if phpstan config present — avoids noisy defaults on unconfigured projects
|
|
94
|
-
if (!hasPhpstanConfig(cwd)) {
|
|
95
|
-
return { status: "skipped", diagnostics: [], semantic: "none" };
|
|
96
|
-
}
|
|
97
|
-
const cmd = await resolvePhpstan(cwd);
|
|
98
|
-
if (!cmd)
|
|
99
|
-
return { status: "skipped", diagnostics: [], semantic: "none" };
|
|
100
|
-
const absPath = path.resolve(cwd, ctx.filePath);
|
|
101
|
-
const result = await safeSpawnAsync(cmd, ["analyse", "--error-format=json", "--no-progress", absPath], { timeout: 30000, cwd });
|
|
102
|
-
// phpstan exits 0 = no errors, 1 = errors found, 2 = fatal. The fatal
|
|
103
|
-
// case used to return `skipped` silently; routing it through the shared
|
|
104
|
-
// seam keeps that verdict and adds the bounded `runner-empty-result` row
|
|
105
|
-
// (#1816), and the exit-1 case now also records when the JSON report
|
|
106
|
-
// parses to nothing (#1948) — the shape the error-count-as-array bug had.
|
|
107
|
-
const run = parseToolRun("phpstan", { result, exitCodes: PHPSTAN_EXIT_CODES }, (out) => parsePhpstanJson(out, ctx.filePath, cwd), { parseOutput: result.stdout ?? "" });
|
|
108
|
-
if (run.skipped)
|
|
109
|
-
return run.skipped;
|
|
110
|
-
const diagnostics = run.diagnostics;
|
|
111
|
-
return finishParsedRun({
|
|
112
|
-
tool: "phpstan",
|
|
113
|
-
ctx,
|
|
114
|
-
result,
|
|
115
|
-
diagnostics,
|
|
116
|
-
classify: () => ({ status: "failed", semantic: "blocking" }),
|
|
117
|
-
});
|
|
118
|
-
},
|
|
119
|
-
};
|
|
120
|
-
export default phpstanRunner;
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import * as path from "node:path";
|
|
2
|
-
import { safeSpawnAsync } from "../../safe-spawn.js";
|
|
3
|
-
import { resolveRunnerCwd } from "../../tool-cwd.js";
|
|
4
|
-
import { PRIORITY } from "../priorities.js";
|
|
5
|
-
import { resolveLocalFirstAsync } from "./utils/runner-helpers.js";
|
|
6
|
-
function parsePrismaValidateOutput(raw, filePath) {
|
|
7
|
-
const output = raw
|
|
8
|
-
.split("\n")
|
|
9
|
-
.map((line) => line.trim())
|
|
10
|
-
.filter(Boolean)
|
|
11
|
-
.filter((line) => !line.startsWith("Environment variables loaded"))
|
|
12
|
-
.filter((line) => !line.startsWith("Prisma schema loaded"))
|
|
13
|
-
.join(" ");
|
|
14
|
-
if (!output)
|
|
15
|
-
return [];
|
|
16
|
-
const message = output.match(/Error:\s*(.+)$/i)?.[1]?.trim() ??
|
|
17
|
-
output.match(/Validation Error Count:\s*\d+\s*(.+)$/i)?.[1]?.trim() ??
|
|
18
|
-
output;
|
|
19
|
-
const lineMatch = output.match(/:(\d+)(?::\d+)?\b/);
|
|
20
|
-
return [
|
|
21
|
-
{
|
|
22
|
-
id: `prisma-validate:${lineMatch?.[1] ?? "1"}`,
|
|
23
|
-
message,
|
|
24
|
-
filePath,
|
|
25
|
-
line: lineMatch ? Number.parseInt(lineMatch[1], 10) : 1,
|
|
26
|
-
column: 1,
|
|
27
|
-
severity: "error",
|
|
28
|
-
semantic: "blocking",
|
|
29
|
-
tool: "prisma-validate",
|
|
30
|
-
rule: "schema",
|
|
31
|
-
fixable: false,
|
|
32
|
-
},
|
|
33
|
-
];
|
|
34
|
-
}
|
|
35
|
-
const prismaValidateRunner = {
|
|
36
|
-
id: "prisma-validate",
|
|
37
|
-
appliesTo: ["prisma"],
|
|
38
|
-
priority: PRIORITY.GENERAL_ANALYSIS,
|
|
39
|
-
skipTestFiles: false,
|
|
40
|
-
async run(ctx) {
|
|
41
|
-
const cwd = resolveRunnerCwd(ctx, "prisma-validate");
|
|
42
|
-
const resolved = await resolveLocalFirstAsync("prisma", cwd);
|
|
43
|
-
const absPath = path.resolve(cwd, ctx.filePath);
|
|
44
|
-
const result = await safeSpawnAsync(resolved.cmd, [...resolved.args, "validate", "--schema", absPath], { timeout: 20000, cwd });
|
|
45
|
-
if (result.error && !result.stdout && !result.stderr) {
|
|
46
|
-
return { status: "skipped", diagnostics: [], semantic: "none" };
|
|
47
|
-
}
|
|
48
|
-
if (result.status === 0) {
|
|
49
|
-
return { status: "succeeded", diagnostics: [], semantic: "none" };
|
|
50
|
-
}
|
|
51
|
-
const diagnostics = parsePrismaValidateOutput(`${result.stdout ?? ""}\n${result.stderr ?? ""}`, ctx.filePath);
|
|
52
|
-
if (diagnostics.length === 0) {
|
|
53
|
-
return { status: "skipped", diagnostics: [], semantic: "none" };
|
|
54
|
-
}
|
|
55
|
-
return {
|
|
56
|
-
status: "failed",
|
|
57
|
-
diagnostics,
|
|
58
|
-
semantic: "blocking",
|
|
59
|
-
};
|
|
60
|
-
},
|
|
61
|
-
};
|
|
62
|
-
export default prismaValidateRunner;
|