@herbertgao/pi-extensions 2026.10.0 → 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 +16 -12
- package/THIRD_PARTY_NOTICES.md +3 -3
- 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/.opencode/plugins/index.js +4 -0
- package/node_modules/@dietrichgebert/ponytail/.opencode/plugins/ponytail-frontmatter.cjs +43 -3
- package/node_modules/@dietrichgebert/ponytail/.opencode/plugins/ponytail.mjs +142 -59
- 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 +52 -242
- package/node_modules/@dietrichgebert/ponytail/hooks/claude-codex-hooks.json +3 -3
- package/node_modules/@dietrichgebert/ponytail/hooks/copilot-hooks.json +4 -4
- package/node_modules/@dietrichgebert/ponytail/hooks/ponytail-activate.js +70 -16
- package/node_modules/@dietrichgebert/ponytail/hooks/ponytail-config.js +8 -7
- 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/hooks/ponytail-mode-tracker.js +46 -23
- package/node_modules/@dietrichgebert/ponytail/hooks/ponytail-runtime.js +39 -7
- package/node_modules/@dietrichgebert/ponytail/hooks/ponytail-subagent.js +20 -3
- package/node_modules/@dietrichgebert/ponytail/hooks/qoder-hooks.json +3 -3
- package/node_modules/@dietrichgebert/ponytail/package.json +3 -3
- package/node_modules/@dietrichgebert/ponytail/pi-extension/index.js +47 -17
- package/node_modules/@dietrichgebert/ponytail/scripts/uninstall.js +21 -7
- package/node_modules/@dietrichgebert/ponytail/skills/plugin.json +5 -0
- package/node_modules/@dietrichgebert/ponytail/skills/ponytail/SKILL.md +33 -101
- package/node_modules/@dietrichgebert/ponytail/skills/ponytail-audit/SKILL.md +89 -27
- package/node_modules/@dietrichgebert/ponytail/skills/ponytail-debt/SKILL.md +13 -12
- package/node_modules/@dietrichgebert/ponytail/skills/ponytail-gain/SKILL.md +21 -18
- package/node_modules/@dietrichgebert/ponytail/skills/ponytail-help/SKILL.md +12 -13
- package/node_modules/@dietrichgebert/ponytail/skills/ponytail-review/SKILL.md +96 -52
- 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 +4 -4
- 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/node_modules/pi-typesafe/README.md +1 -1
- package/node_modules/pi-typesafe/dist/backends.d.ts +15 -5
- package/node_modules/pi-typesafe/dist/backends.js +18 -0
- package/node_modules/pi-typesafe/dist/client.d.ts +4 -3
- package/node_modules/pi-typesafe/dist/client.js +22 -7
- package/node_modules/pi-typesafe/dist/index.d.ts +2 -2
- package/node_modules/pi-typesafe/dist/index.js +1 -1
- package/node_modules/pi-typesafe/dist/usage.d.ts +14 -4
- package/node_modules/pi-typesafe/dist/usage.js +147 -42
- package/node_modules/pi-typesafe/package.json +1 -1
- package/node_modules/pi-web-access/CHANGELOG.md +48 -0
- package/node_modules/pi-web-access/README.md +57 -11
- package/node_modules/pi-web-access/brave-rate-limit.ts +8 -2
- package/node_modules/pi-web-access/curator-page.ts +5 -1
- package/node_modules/pi-web-access/curator-server.ts +2 -0
- package/node_modules/pi-web-access/declared-web-links.ts +2 -2
- package/node_modules/pi-web-access/degoog.ts +323 -0
- package/node_modules/pi-web-access/dist/index.js +3483 -2745
- package/node_modules/pi-web-access/dist/mcp-cli.js +27443 -0
- package/node_modules/pi-web-access/exa.ts +5 -1
- package/node_modules/pi-web-access/extract.ts +41 -3
- package/node_modules/pi-web-access/firecrawl.ts +35 -4
- package/node_modules/pi-web-access/gemini-search.ts +34 -11
- package/node_modules/pi-web-access/gemini-web.ts +14 -9
- package/node_modules/pi-web-access/index.ts +153 -1202
- package/node_modules/pi-web-access/keenable.ts +221 -0
- package/node_modules/pi-web-access/mcp-cli.ts +40 -0
- package/node_modules/pi-web-access/mcp-server.ts +81 -0
- package/node_modules/pi-web-access/mcp-tool-definitions.ts +117 -0
- package/node_modules/pi-web-access/openai-search.ts +34 -1
- package/node_modules/pi-web-access/package.json +23 -5
- package/node_modules/pi-web-access/perplexity.ts +64 -56
- package/node_modules/pi-web-access/tool-arguments.ts +20 -0
- package/node_modules/pi-web-access/video-extract.ts +1 -1
- package/node_modules/pi-web-access/web-tool-contract.ts +86 -0
- package/node_modules/pi-web-access/web-tool-core.ts +1502 -0
- package/node_modules/pi-web-access/youtube-extract.ts +2 -5
- package/package.json +17 -12
- package/node_modules/@dietrichgebert/ponytail/README.es.md +0 -329
- package/node_modules/@dietrichgebert/ponytail/README.ko.md +0 -346
- package/node_modules/@dietrichgebert/ponytail/assets/benchmark-3model.svg +0 -21
- package/node_modules/@dietrichgebert/ponytail/assets/benchmark-agentic.svg +0 -62
- package/node_modules/@dietrichgebert/ponytail/assets/logo-dark.png +0 -0
- package/node_modules/@dietrichgebert/ponytail/assets/logo-dark.svg +0 -115
- package/node_modules/@dietrichgebert/ponytail/assets/logo-greenpt-dark.svg +0 -27
- package/node_modules/@dietrichgebert/ponytail/assets/logo-greenpt.svg +0 -27
- package/node_modules/@dietrichgebert/ponytail/assets/logo.png +0 -0
- package/node_modules/@dietrichgebert/ponytail/assets/retriever-icon.png +0 -0
- package/node_modules/@dietrichgebert/ponytail/assets/retriever-logo-dark.svg +0 -4
- package/node_modules/@dietrichgebert/ponytail/assets/retriever-logo-light.svg +0 -4
- package/node_modules/@dietrichgebert/ponytail/assets/social-preview.png +0 -0
- package/node_modules/@dietrichgebert/ponytail/assets/waitlist-banner-es.png +0 -0
- package/node_modules/@dietrichgebert/ponytail/assets/waitlist-banner-ko.png +0 -0
- package/node_modules/@dietrichgebert/ponytail/assets/waitlist-banner.png +0 -0
- 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,445 +0,0 @@
|
|
|
1
|
-
import * as fs from "node:fs/promises";
|
|
2
|
-
import * as os from "node:os";
|
|
3
|
-
import * as path from "node:path";
|
|
4
|
-
import { incrementDegradationCount } from "../../degradation-ledger.js";
|
|
5
|
-
import { safeSpawnAsync } from "../../safe-spawn.js";
|
|
6
|
-
import { probeToolAsync } from "../../tool-probe.js";
|
|
7
|
-
import { resolveRunnerCwd } from "../../tool-cwd.js";
|
|
8
|
-
import { PRIORITY } from "../priorities.js";
|
|
9
|
-
import { classifyProbeFailure, createAvailabilityLatch, isLatchingOutcome, logAvailabilityDecision, startHostStallSampler, } from "./utils/availability-policy.js";
|
|
10
|
-
// The PS script written to a temp file each run. `-File` with a temp script
|
|
11
|
-
// keeps the analysis argv free of embedded script text; safe-spawn itself never
|
|
12
|
-
// uses a shell (#817), so nothing here is quoting-sensitive.
|
|
13
|
-
const PS_SCRIPT = `
|
|
14
|
-
param([string]$FilePath)
|
|
15
|
-
Import-Module PSScriptAnalyzer -ErrorAction Stop
|
|
16
|
-
$results = @(Invoke-ScriptAnalyzer -Path $FilePath | Select-Object RuleName,@{N='Severity';E={$_.Severity.ToString()}},Line,Column,Message)
|
|
17
|
-
if ($results.Count -eq 0) { Write-Output '[]'; exit 0 }
|
|
18
|
-
$results | ConvertTo-Json -Depth 3 -Compress
|
|
19
|
-
`.trim();
|
|
20
|
-
const PS_TIMEOUT_MS = 30000;
|
|
21
|
-
/**
|
|
22
|
-
* PowerShell spawns go through `safeSpawnAsync` (#1490).
|
|
23
|
-
*
|
|
24
|
-
* The hand-rolled version returned `status: null` for a timeout, a synchronous
|
|
25
|
-
* `spawn UNKNOWN` and a missing binary alike, so the call site had nothing to
|
|
26
|
-
* classify and remembered every one of them as "PowerShell analysis is not
|
|
27
|
-
* available". `safeSpawnAsync` carries the standard taxonomy — `failure`,
|
|
28
|
-
* `spawnFailure.kind` and the errno on `error` — which is what lets the
|
|
29
|
-
* availability policy tell a stall from an absence.
|
|
30
|
-
*
|
|
31
|
-
* The two presence probes that used to share this wrapper now go through
|
|
32
|
-
* `probeToolAsync` (#2894), so the only spawn left here is the ANALYSIS pass
|
|
33
|
-
* — which always has a project to resolve `PSScriptAnalyzerSettings.psd1`
|
|
34
|
-
* against. `cwd` is required to keep it that way.
|
|
35
|
-
*/
|
|
36
|
-
function spawnPs(cmd, args, options) {
|
|
37
|
-
const { timeoutMs = PS_TIMEOUT_MS, cwd } = options;
|
|
38
|
-
return safeSpawnAsync(cmd, args, {
|
|
39
|
-
cwd,
|
|
40
|
-
timeout: timeoutMs,
|
|
41
|
-
resourceLabel: "psscriptanalyzer",
|
|
42
|
-
});
|
|
43
|
-
}
|
|
44
|
-
/**
|
|
45
|
-
* The two verdicts this runner memoizes, both owned by the shared policy.
|
|
46
|
-
*
|
|
47
|
-
* The availability-policy coverage gate never flagged either of them, and the
|
|
48
|
-
* reason is not a bug in the gate: it recognises a probe by a quoted VERSION
|
|
49
|
-
* FLAG, and neither probe below asks for a version. One runs `exit 0` to see if
|
|
50
|
-
* an interpreter answers; the other asks `Get-Module -ListAvailable`. A
|
|
51
|
-
* capability probe with no version flag is invisible to that pre-filter, so this
|
|
52
|
-
* file was skipped before any unit was analysed. The residual gate blindness is
|
|
53
|
-
* tracked with #1489's gate work; the migration here does not depend on it.
|
|
54
|
-
*/
|
|
55
|
-
const psCmdLatch = createAvailabilityLatch();
|
|
56
|
-
const psAnalyzerLatchByCmd = new Map();
|
|
57
|
-
/**
|
|
58
|
-
* Whether `-File` actually executes, keyed by interpreter (#1540).
|
|
59
|
-
*
|
|
60
|
-
* Neither probe above asks `-File` a question -- both use `-Command`, which
|
|
61
|
-
* PowerShell's execution policy does not gate. Under `Restricted`/`AllSigned`
|
|
62
|
-
* that lets both probes report "available" while the real analysis spawn
|
|
63
|
-
* (which DOES go through `-File`) gets a policy `SecurityError` on stderr and
|
|
64
|
-
* exits nonzero with empty stdout. This latch is deliberately populated by
|
|
65
|
-
* the real analysis run rather than a third `-Command`-shaped probe, so the
|
|
66
|
-
* verdict it records is direct evidence about `-File`, not an inference from
|
|
67
|
-
* a proxy that has already been shown to disagree with it.
|
|
68
|
-
*/
|
|
69
|
-
const psExecLatchByCmd = new Map();
|
|
70
|
-
let psCmd = null;
|
|
71
|
-
/** Record one decision, and report whether the caller may retry later. */
|
|
72
|
-
function notePsDecision(latch, tool, verdict) {
|
|
73
|
-
let retryAfterMs;
|
|
74
|
-
if (verdict.available) {
|
|
75
|
-
latch.noteAvailable();
|
|
76
|
-
}
|
|
77
|
-
else {
|
|
78
|
-
const delay = latch.noteUnavailable(verdict.outcome, verdict.cause);
|
|
79
|
-
if (delay > 0)
|
|
80
|
-
retryAfterMs = delay;
|
|
81
|
-
}
|
|
82
|
-
logAvailabilityDecision({
|
|
83
|
-
tool,
|
|
84
|
-
verdict: verdict.available ? "available" : "unavailable",
|
|
85
|
-
outcome: verdict.available ? "success" : verdict.outcome,
|
|
86
|
-
cause: verdict.available ? "ok" : verdict.cause,
|
|
87
|
-
elapsedMs: verdict.elapsedMs,
|
|
88
|
-
latched: verdict.available || isLatchingOutcome(verdict.outcome),
|
|
89
|
-
classifiedBy: "probe",
|
|
90
|
-
hostStallMs: verdict.hostStallMs,
|
|
91
|
-
...(retryAfterMs !== undefined && { retryAfterMs }),
|
|
92
|
-
budgetMs: PS_TIMEOUT_MS,
|
|
93
|
-
});
|
|
94
|
-
}
|
|
95
|
-
/**
|
|
96
|
-
* Drop both verdicts at the session boundary (#1490 review).
|
|
97
|
-
*
|
|
98
|
-
* Every other runner gets this for free through
|
|
99
|
-
* `resetDispatchAvailabilityState`'s generation counter; these latches are local
|
|
100
|
-
* to the module, so `session_start` clears them explicitly. Without it, a
|
|
101
|
-
* PowerShell or module install performed mid-process is invisible until the host
|
|
102
|
-
* restarts — the same "suppression outliving its session" defect #1222 fixed for
|
|
103
|
-
* install attempts.
|
|
104
|
-
*/
|
|
105
|
-
export function resetPsScriptAnalyzerAvailability() {
|
|
106
|
-
psCmdLatch.reset();
|
|
107
|
-
psAnalyzerLatchByCmd.clear();
|
|
108
|
-
psExecLatchByCmd.clear();
|
|
109
|
-
psCmd = null;
|
|
110
|
-
}
|
|
111
|
-
/**
|
|
112
|
-
* Resolve the PowerShell binary, once per session per verdict.
|
|
113
|
-
*
|
|
114
|
-
* A candidate that times out is NOT evidence that PowerShell is absent, so the
|
|
115
|
-
* loop only concludes "missing" when every candidate answered with a durable
|
|
116
|
-
* failure. One transient candidate makes the whole verdict transient, and the
|
|
117
|
-
* next turn after the cooldown probes again.
|
|
118
|
-
*/
|
|
119
|
-
async function resolvePowerShellCmd() {
|
|
120
|
-
const memo = psCmdLatch.read();
|
|
121
|
-
if (memo !== null)
|
|
122
|
-
return memo ? psCmd : null;
|
|
123
|
-
// Rank what the candidates said, rather than collapsing every failure to
|
|
124
|
-
// "not-found" (#1490 review). A stall outranks everything: it means we never
|
|
125
|
-
// got an answer. A present-but-rejecting interpreter (nonzero exit, EACCES)
|
|
126
|
-
// is durable but is NOT a missing install, and reporting it as one both sends
|
|
127
|
-
// the user to install PowerShell they already have and fabricates the cause in
|
|
128
|
-
// `availability_decision`. Only an all-candidates ENOENT sweep is `missing`.
|
|
129
|
-
let transient = null;
|
|
130
|
-
let rejected = null;
|
|
131
|
-
let elapsedTotalMs = 0;
|
|
132
|
-
let stallTotalMs = 0;
|
|
133
|
-
for (const candidate of ["pwsh", "powershell"]) {
|
|
134
|
-
const sampler = startHostStallSampler();
|
|
135
|
-
const startedAt = Date.now();
|
|
136
|
-
const result = await probeToolAsync(candidate, ["-NoProfile", "-NonInteractive", "-Command", "exit 0"], { timeout: PS_TIMEOUT_MS, resourceLabel: "psscriptanalyzer" });
|
|
137
|
-
const hostStallMs = sampler.stop();
|
|
138
|
-
const elapsedMs = Date.now() - startedAt;
|
|
139
|
-
elapsedTotalMs += elapsedMs;
|
|
140
|
-
stallTotalMs += hostStallMs;
|
|
141
|
-
if (!result.error && result.status === 0) {
|
|
142
|
-
psCmd = candidate;
|
|
143
|
-
notePsDecision(psCmdLatch, "powershell", {
|
|
144
|
-
available: true,
|
|
145
|
-
elapsedMs,
|
|
146
|
-
hostStallMs,
|
|
147
|
-
});
|
|
148
|
-
return candidate;
|
|
149
|
-
}
|
|
150
|
-
const classified = classifyProbeFailure(result, { hostStallMs });
|
|
151
|
-
if (classified.outcome === "transient")
|
|
152
|
-
transient ??= classified;
|
|
153
|
-
else if (classified.outcome !== "missing")
|
|
154
|
-
rejected ??= classified;
|
|
155
|
-
}
|
|
156
|
-
psCmd = null;
|
|
157
|
-
const verdict = transient ??
|
|
158
|
-
rejected ?? {
|
|
159
|
-
outcome: "missing",
|
|
160
|
-
cause: "not-found",
|
|
161
|
-
};
|
|
162
|
-
notePsDecision(psCmdLatch, "powershell", {
|
|
163
|
-
available: false,
|
|
164
|
-
outcome: verdict.outcome,
|
|
165
|
-
cause: verdict.cause,
|
|
166
|
-
elapsedMs: elapsedTotalMs,
|
|
167
|
-
hostStallMs: stallTotalMs,
|
|
168
|
-
});
|
|
169
|
-
return null;
|
|
170
|
-
}
|
|
171
|
-
async function checkModuleAvailable(cmd) {
|
|
172
|
-
let latch = psAnalyzerLatchByCmd.get(cmd);
|
|
173
|
-
if (!latch) {
|
|
174
|
-
latch = createAvailabilityLatch();
|
|
175
|
-
psAnalyzerLatchByCmd.set(cmd, latch);
|
|
176
|
-
}
|
|
177
|
-
const memo = latch.read();
|
|
178
|
-
if (memo !== null)
|
|
179
|
-
return memo;
|
|
180
|
-
const sampler = startHostStallSampler();
|
|
181
|
-
const startedAt = Date.now();
|
|
182
|
-
const result = await probeToolAsync(cmd, [
|
|
183
|
-
"-NoProfile",
|
|
184
|
-
"-NonInteractive",
|
|
185
|
-
"-Command",
|
|
186
|
-
"if (Get-Module -ListAvailable PSScriptAnalyzer) { exit 0 } else { exit 1 }",
|
|
187
|
-
], { timeout: PS_TIMEOUT_MS, resourceLabel: "psscriptanalyzer" });
|
|
188
|
-
const hostStallMs = sampler.stop();
|
|
189
|
-
const elapsedMs = Date.now() - startedAt;
|
|
190
|
-
if (!result.error && result.status === 0) {
|
|
191
|
-
notePsDecision(latch, "psscriptanalyzer", {
|
|
192
|
-
available: true,
|
|
193
|
-
elapsedMs,
|
|
194
|
-
hostStallMs,
|
|
195
|
-
});
|
|
196
|
-
return true;
|
|
197
|
-
}
|
|
198
|
-
// A CLEAN `exit 1` is the module genuinely not being installed — the one
|
|
199
|
-
// outcome an install fixes, so that alone earns the `missing` override.
|
|
200
|
-
//
|
|
201
|
-
// Everything else did not answer the question (#1490 review). A `spawn
|
|
202
|
-
// UNKNOWN`, an EMFILE, an EACCES, or a PowerShell that vanished between the
|
|
203
|
-
// two probes all arrive with an error and no status, and calling those
|
|
204
|
-
// "PSScriptAnalyzer is not installed" latched PowerShell analysis off for the
|
|
205
|
-
// session on hosts where the module was present the whole time.
|
|
206
|
-
const moduleAbsent = result.status === 1 && !result.failure && !result.error;
|
|
207
|
-
const classified = classifyProbeFailure(result, {
|
|
208
|
-
hostStallMs,
|
|
209
|
-
...(moduleAbsent && { unclassifiedFailureOutcome: "missing" }),
|
|
210
|
-
});
|
|
211
|
-
let { outcome, cause } = classified;
|
|
212
|
-
if (!moduleAbsent && outcome !== "transient") {
|
|
213
|
-
// Nothing here is evidence about the module, so the verdict must expire.
|
|
214
|
-
outcome = "transient";
|
|
215
|
-
cause = "probe-rejected";
|
|
216
|
-
}
|
|
217
|
-
notePsDecision(latch, "psscriptanalyzer", {
|
|
218
|
-
available: false,
|
|
219
|
-
outcome,
|
|
220
|
-
cause,
|
|
221
|
-
elapsedMs,
|
|
222
|
-
hostStallMs,
|
|
223
|
-
});
|
|
224
|
-
return false;
|
|
225
|
-
}
|
|
226
|
-
/**
|
|
227
|
-
* `null` means "unreadable" (#1598): empty stdout, or stdout that fails to
|
|
228
|
-
* parse as JSON. `PS_SCRIPT` always writes either the literal `[]` marker or
|
|
229
|
-
* a `ConvertTo-Json` array/object on a genuine run, so anything else on an
|
|
230
|
-
* exit-0 run is not a clean-file answer -- it is a lost or truncated write
|
|
231
|
-
* between the child and us. The caller must not read `null` the same way it
|
|
232
|
-
* reads a real `[]`.
|
|
233
|
-
*/
|
|
234
|
-
function parsePSAnalyzerOutput(raw, filePath) {
|
|
235
|
-
const trimmed = raw.trim();
|
|
236
|
-
if (!trimmed)
|
|
237
|
-
return null;
|
|
238
|
-
if (trimmed === "[]")
|
|
239
|
-
return [];
|
|
240
|
-
let parsed;
|
|
241
|
-
try {
|
|
242
|
-
parsed = JSON.parse(trimmed);
|
|
243
|
-
}
|
|
244
|
-
catch {
|
|
245
|
-
return null;
|
|
246
|
-
}
|
|
247
|
-
const items = Array.isArray(parsed) ? parsed : [parsed];
|
|
248
|
-
return items
|
|
249
|
-
.filter((item) => item.Message && item.Line)
|
|
250
|
-
.map((item) => {
|
|
251
|
-
const sev = (item.Severity ?? "Warning").toLowerCase();
|
|
252
|
-
const severity = sev === "error" || sev === "parseerror"
|
|
253
|
-
? "error"
|
|
254
|
-
: sev === "information"
|
|
255
|
-
? "info"
|
|
256
|
-
: "warning";
|
|
257
|
-
const rule = item.RuleName ?? "PSScriptAnalyzer";
|
|
258
|
-
return {
|
|
259
|
-
id: `psscriptanalyzer-${rule}-${item.Line}`,
|
|
260
|
-
message: `[${rule}] ${item.Message}`,
|
|
261
|
-
filePath,
|
|
262
|
-
line: item.Line,
|
|
263
|
-
column: item.Column ?? 1,
|
|
264
|
-
severity,
|
|
265
|
-
semantic: severity === "error" ? "blocking" : "warning",
|
|
266
|
-
tool: "psscriptanalyzer",
|
|
267
|
-
rule,
|
|
268
|
-
fixable: false,
|
|
269
|
-
};
|
|
270
|
-
});
|
|
271
|
-
}
|
|
272
|
-
const psScriptAnalyzerRunner = {
|
|
273
|
-
id: "psscriptanalyzer",
|
|
274
|
-
appliesTo: ["powershell"],
|
|
275
|
-
priority: PRIORITY.GENERAL_ANALYSIS,
|
|
276
|
-
skipTestFiles: false,
|
|
277
|
-
async run(ctx) {
|
|
278
|
-
const cmd = await resolvePowerShellCmd();
|
|
279
|
-
if (!cmd)
|
|
280
|
-
return { status: "skipped", diagnostics: [], semantic: "none" };
|
|
281
|
-
if (!(await checkModuleAvailable(cmd))) {
|
|
282
|
-
return { status: "skipped", diagnostics: [], semantic: "none" };
|
|
283
|
-
}
|
|
284
|
-
let execLatch = psExecLatchByCmd.get(cmd);
|
|
285
|
-
if (!execLatch) {
|
|
286
|
-
execLatch = createAvailabilityLatch();
|
|
287
|
-
psExecLatchByCmd.set(cmd, execLatch);
|
|
288
|
-
}
|
|
289
|
-
// A durably blocked `-File` execution (an execution policy, typically) is
|
|
290
|
-
// a fact about the interpreter, not about any one file -- re-spawning on
|
|
291
|
-
// every save would just re-confirm the same policy every time (#1540).
|
|
292
|
-
if (execLatch.read() === false) {
|
|
293
|
-
return { status: "skipped", diagnostics: [], semantic: "none" };
|
|
294
|
-
}
|
|
295
|
-
const cwd = resolveRunnerCwd(ctx, "psscriptanalyzer");
|
|
296
|
-
const absPath = path.resolve(cwd, ctx.filePath);
|
|
297
|
-
// Write script to temp file so we avoid cmd.exe quoting entirely
|
|
298
|
-
const tmpScript = path.join(os.tmpdir(), `pi-lens-psa-${process.pid}.ps1`);
|
|
299
|
-
await fs.writeFile(tmpScript, PS_SCRIPT, "utf-8");
|
|
300
|
-
try {
|
|
301
|
-
const sampler = startHostStallSampler();
|
|
302
|
-
const startedAt = Date.now();
|
|
303
|
-
const result = await spawnPs(cmd, [
|
|
304
|
-
"-NoProfile",
|
|
305
|
-
"-NonInteractive",
|
|
306
|
-
"-File",
|
|
307
|
-
tmpScript,
|
|
308
|
-
"-FilePath",
|
|
309
|
-
absPath,
|
|
310
|
-
], { timeoutMs: PS_TIMEOUT_MS, cwd });
|
|
311
|
-
const hostStallMs = sampler.stop();
|
|
312
|
-
const elapsedMs = Date.now() - startedAt;
|
|
313
|
-
// The two probes above use `-Command`, which PowerShell's execution
|
|
314
|
-
// policy does not gate; this run uses `-File`, which it does. A
|
|
315
|
-
// crashed/signal-killed process (#1540 second gap) or a blocked/
|
|
316
|
-
// erroring run (#1540 primary gap) must both produce a recorded,
|
|
317
|
-
// legible availability_decision -- never a silent "clean" read of
|
|
318
|
-
// empty stdout, and never a silent skip.
|
|
319
|
-
if (result.status === null) {
|
|
320
|
-
const classified = classifyProbeFailure(result, { hostStallMs });
|
|
321
|
-
let { outcome, cause } = classified;
|
|
322
|
-
// A `spawn UNKNOWN`/EMFILE/crash never ran the script, so it is not
|
|
323
|
-
// evidence that `-File` is broken (mirrors the nonzero-exit guard
|
|
324
|
-
// below, and checkModuleAvailable's own guard against over-latching
|
|
325
|
-
// an unclassified failure). Latching an unspawnable prober's
|
|
326
|
-
// verdict would durably disable analysis for the whole session on
|
|
327
|
-
// a host where `-File` works fine.
|
|
328
|
-
if (outcome !== "transient") {
|
|
329
|
-
outcome = "transient";
|
|
330
|
-
cause = "probe-rejected";
|
|
331
|
-
}
|
|
332
|
-
notePsDecision(execLatch, "psscriptanalyzer-exec", {
|
|
333
|
-
available: false,
|
|
334
|
-
outcome,
|
|
335
|
-
cause,
|
|
336
|
-
elapsedMs,
|
|
337
|
-
hostStallMs,
|
|
338
|
-
});
|
|
339
|
-
incrementDegradationCount({
|
|
340
|
-
kind: "grammar-blocked",
|
|
341
|
-
subject: "psscriptanalyzer",
|
|
342
|
-
reason: `PowerShell (${cmd}) -File analysis exited with no status -- crash or signal-killed process`,
|
|
343
|
-
});
|
|
344
|
-
return { status: "skipped", diagnostics: [], semantic: "none" };
|
|
345
|
-
}
|
|
346
|
-
if (result.status !== 0) {
|
|
347
|
-
const stderrText = result.stderr ?? "";
|
|
348
|
-
// Require the SecurityError/UnauthorizedAccess pairing that a real
|
|
349
|
-
// script-load block produces, not a bare "unauthorizedaccess"
|
|
350
|
-
// match (#1556 review F4) -- that word alone also appears in
|
|
351
|
-
// unrelated file-permission and access-denied stderr that has
|
|
352
|
-
// nothing to do with the execution policy, and misclassifying it
|
|
353
|
-
// as `policy-denied` would latch analysis off durably for a
|
|
354
|
-
// transient, per-file permission error.
|
|
355
|
-
const policyDenied = /securityerror/i.test(stderrText) &&
|
|
356
|
-
(/execution polic(y|ies)/i.test(stderrText) ||
|
|
357
|
-
/running scripts is disabled/i.test(stderrText) ||
|
|
358
|
-
/unauthorizedaccess/i.test(stderrText));
|
|
359
|
-
const classified = classifyProbeFailure(result, { hostStallMs });
|
|
360
|
-
let { outcome, cause } = classified;
|
|
361
|
-
if (policyDenied) {
|
|
362
|
-
// Direct, unambiguous evidence: PowerShell's own execution
|
|
363
|
-
// policy refused to load the script. Durable until the policy
|
|
364
|
-
// changes, so this is the one case allowed to latch.
|
|
365
|
-
outcome = "non-installable";
|
|
366
|
-
cause = "policy-denied";
|
|
367
|
-
}
|
|
368
|
-
else if (outcome !== "transient") {
|
|
369
|
-
// A single nonzero exit is not durable evidence that `-File`
|
|
370
|
-
// is broken for every file (mirrors checkModuleAvailable's own
|
|
371
|
-
// guard against over-latching an unclassified failure).
|
|
372
|
-
outcome = "transient";
|
|
373
|
-
cause = "probe-rejected";
|
|
374
|
-
}
|
|
375
|
-
notePsDecision(execLatch, "psscriptanalyzer-exec", {
|
|
376
|
-
available: false,
|
|
377
|
-
outcome,
|
|
378
|
-
cause,
|
|
379
|
-
elapsedMs,
|
|
380
|
-
hostStallMs,
|
|
381
|
-
});
|
|
382
|
-
incrementDegradationCount({
|
|
383
|
-
kind: "grammar-blocked",
|
|
384
|
-
subject: "psscriptanalyzer",
|
|
385
|
-
reason: policyDenied
|
|
386
|
-
? `PowerShell execution policy blocked -File analysis for ${cmd}: ${stderrText.trim().split("\n")[0] || "SecurityError"}`
|
|
387
|
-
: `PowerShell -File analysis for ${cmd} exited ${result.status}: ${stderrText.trim().slice(0, 200) || "no stderr"}`,
|
|
388
|
-
});
|
|
389
|
-
return { status: "skipped", diagnostics: [], semantic: "none" };
|
|
390
|
-
}
|
|
391
|
-
// `-File` ran and exited 0: direct proof it works. Log the decision
|
|
392
|
-
// once (memoized by the latch) rather than on every save.
|
|
393
|
-
if (execLatch.read() === null) {
|
|
394
|
-
notePsDecision(execLatch, "psscriptanalyzer-exec", {
|
|
395
|
-
available: true,
|
|
396
|
-
elapsedMs,
|
|
397
|
-
hostStallMs,
|
|
398
|
-
});
|
|
399
|
-
}
|
|
400
|
-
const diagnostics = parsePSAnalyzerOutput(result.stdout, ctx.filePath);
|
|
401
|
-
if (diagnostics === null) {
|
|
402
|
-
// Exit 0 proves `-File` itself ran, so this does NOT reuse the
|
|
403
|
-
// exec latch above -- one bad read says nothing durable about the
|
|
404
|
-
// interpreter (mirrors the nonzero-exit branch's own guard against
|
|
405
|
-
// over-latching an unclassified failure), and it is logged rather
|
|
406
|
-
// than latched. It must still never be read as a clean file
|
|
407
|
-
// (#1598): empty/malformed stdout on a successful exit is a lost
|
|
408
|
-
// or truncated write, not evidence of zero diagnostics.
|
|
409
|
-
const unreadableReason = result.stdout.trim() ? "unparseable" : "empty";
|
|
410
|
-
logAvailabilityDecision({
|
|
411
|
-
tool: "psscriptanalyzer-stdout",
|
|
412
|
-
verdict: "unavailable",
|
|
413
|
-
outcome: "transient",
|
|
414
|
-
cause: "empty-result",
|
|
415
|
-
elapsedMs,
|
|
416
|
-
latched: false,
|
|
417
|
-
hostStallMs,
|
|
418
|
-
budgetMs: PS_TIMEOUT_MS,
|
|
419
|
-
// A read of the process's own stdout, not classifyProbeFailure, is
|
|
420
|
-
// what decided this (#2209).
|
|
421
|
-
classifiedBy: "caller",
|
|
422
|
-
});
|
|
423
|
-
incrementDegradationCount({
|
|
424
|
-
kind: "grammar-blocked",
|
|
425
|
-
subject: "psscriptanalyzer",
|
|
426
|
-
reason: `PowerShell -File analysis for ${cmd} exited 0 but stdout was ${unreadableReason}`,
|
|
427
|
-
});
|
|
428
|
-
return { status: "skipped", diagnostics: [], semantic: "none" };
|
|
429
|
-
}
|
|
430
|
-
if (diagnostics.length === 0) {
|
|
431
|
-
return { status: "succeeded", diagnostics: [], semantic: "none" };
|
|
432
|
-
}
|
|
433
|
-
const hasErrors = diagnostics.some((d) => d.severity === "error");
|
|
434
|
-
return {
|
|
435
|
-
status: hasErrors ? "failed" : "succeeded",
|
|
436
|
-
diagnostics,
|
|
437
|
-
semantic: hasErrors ? "blocking" : "warning",
|
|
438
|
-
};
|
|
439
|
-
}
|
|
440
|
-
finally {
|
|
441
|
-
await fs.unlink(tmpScript).catch(() => { });
|
|
442
|
-
}
|
|
443
|
-
},
|
|
444
|
-
};
|
|
445
|
-
export default psScriptAnalyzerRunner;
|
|
@@ -1,169 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Pyright runner for dispatch system
|
|
3
|
-
*
|
|
4
|
-
* Provides real Python type-checking (not just linting).
|
|
5
|
-
* Catches type errors like: result: str = add(1, 2) # Type "int" not assignable to "str"
|
|
6
|
-
*
|
|
7
|
-
* Requires: pyright (pip install pyright or npm install -g pyright)
|
|
8
|
-
*/
|
|
9
|
-
import { logExtension } from "../../extension-log.js";
|
|
10
|
-
import { getLSPService } from "../../lsp/index.js";
|
|
11
|
-
import { augmentPythonEnvironment, detectPythonEnvironment, } from "../../python-environment.js";
|
|
12
|
-
import { safeSpawnAsync } from "../../safe-spawn.js";
|
|
13
|
-
import { resolveRunnerCwd } from "../../tool-cwd.js";
|
|
14
|
-
import { PRIORITY } from "../priorities.js";
|
|
15
|
-
import { createAvailabilityChecker, resolveAvailableOrInstall, } from "./utils/runner-helpers.js";
|
|
16
|
-
import { finishParsedRun } from "./utils/tool-failure.js";
|
|
17
|
-
const pyright = createAvailabilityChecker("pyright", ".exe");
|
|
18
|
-
const pyrightRunner = {
|
|
19
|
-
id: "pyright",
|
|
20
|
-
appliesTo: ["python"],
|
|
21
|
-
priority: PRIORITY.LSP_FALLBACK,
|
|
22
|
-
timeoutMs: 75_000,
|
|
23
|
-
async run(ctx) {
|
|
24
|
-
// Always allow pyright CLI fallback even when LSP is enabled.
|
|
25
|
-
// LSP can be present but still fail transiently for a file; in that case,
|
|
26
|
-
// pyright provides a resilient second signal path.
|
|
27
|
-
// When LSP is enabled (not disabled via --no-lsp), connect to the LSP service for this file
|
|
28
|
-
if (!ctx.pi.getFlag("no-lsp")) {
|
|
29
|
-
const lspService = getLSPService();
|
|
30
|
-
await lspService.getClientForFile(ctx.filePath);
|
|
31
|
-
}
|
|
32
|
-
const cwd = resolveRunnerCwd(ctx, "pyright");
|
|
33
|
-
// Get pyright command - try multiple strategies
|
|
34
|
-
let cmd = null;
|
|
35
|
-
// Strategy 1: Check cached availability (fast path)
|
|
36
|
-
if (await pyright.isAvailableAsync(cwd)) {
|
|
37
|
-
cmd = pyright.getCommand(cwd);
|
|
38
|
-
}
|
|
39
|
-
// Strategy 2: use the shared availability taxonomy and install suppression.
|
|
40
|
-
if (!cmd) {
|
|
41
|
-
const installedPath = await resolveAvailableOrInstall(pyright, "pyright", cwd);
|
|
42
|
-
if (installedPath)
|
|
43
|
-
cmd = installedPath;
|
|
44
|
-
}
|
|
45
|
-
// Strategy 3: Direct PATH check (handles module cache staleness)
|
|
46
|
-
if (!cmd) {
|
|
47
|
-
const { findCommandAsync } = await import("../../safe-spawn.js");
|
|
48
|
-
const foundCmd = await findCommandAsync("pyright");
|
|
49
|
-
if (foundCmd)
|
|
50
|
-
cmd = foundCmd;
|
|
51
|
-
}
|
|
52
|
-
// If still no pyright, skip this runner
|
|
53
|
-
if (!cmd) {
|
|
54
|
-
return { status: "skipped", diagnostics: [], semantic: "none" };
|
|
55
|
-
}
|
|
56
|
-
// Pyright's Node CLI falls back to `python` on PATH when the project has no
|
|
57
|
-
// explicit Pyright config. Apply the same environment the Python LSP uses so
|
|
58
|
-
// a conventional project .venv resolves without shell activation.
|
|
59
|
-
const pythonEnvironment = await detectPythonEnvironment(cwd);
|
|
60
|
-
const env = augmentPythonEnvironment(process.env, pythonEnvironment);
|
|
61
|
-
const result = await safeSpawnAsync(cmd, ["--outputjson", ctx.filePath], {
|
|
62
|
-
timeout: 60000,
|
|
63
|
-
cwd,
|
|
64
|
-
env,
|
|
65
|
-
});
|
|
66
|
-
// Pyright returns non-zero when errors found, that's OK
|
|
67
|
-
if (result.error) {
|
|
68
|
-
return { status: "skipped", diagnostics: [], semantic: "none" };
|
|
69
|
-
}
|
|
70
|
-
const output = (result.stdout || "").trim();
|
|
71
|
-
if (!output) {
|
|
72
|
-
// Empty stdout with a nonzero exit and stderr chatter is an unreadable
|
|
73
|
-
// report of problems, never clean (#1839). The helper turns that into
|
|
74
|
-
// failed + parse-error; exit 0 stays clean.
|
|
75
|
-
return finishParsedRun({
|
|
76
|
-
tool: "pyright",
|
|
77
|
-
ctx,
|
|
78
|
-
result,
|
|
79
|
-
diagnostics: [],
|
|
80
|
-
});
|
|
81
|
-
}
|
|
82
|
-
try {
|
|
83
|
-
const data = JSON.parse(output);
|
|
84
|
-
const diagnostics = parsePyrightOutput(data, ctx.filePath);
|
|
85
|
-
return finishParsedRun({
|
|
86
|
-
tool: "pyright",
|
|
87
|
-
ctx,
|
|
88
|
-
result,
|
|
89
|
-
diagnostics,
|
|
90
|
-
classify: (diagnostics) => {
|
|
91
|
-
const hasErrors = diagnostics.some((d) => d.severity === "error");
|
|
92
|
-
return {
|
|
93
|
-
status: hasErrors ? "failed" : "succeeded",
|
|
94
|
-
semantic: hasErrors ? "blocking" : "warning",
|
|
95
|
-
};
|
|
96
|
-
},
|
|
97
|
-
});
|
|
98
|
-
// pi-lens-ignore: missing-error-propagation
|
|
99
|
-
}
|
|
100
|
-
catch {
|
|
101
|
-
logExtension({
|
|
102
|
-
subsystem: "runner:pyright",
|
|
103
|
-
message: `JSON parse failed for ${ctx.filePath} — raw output: ${output.slice(0, 200)}`,
|
|
104
|
-
metadata: { filePath: ctx.filePath },
|
|
105
|
-
});
|
|
106
|
-
return {
|
|
107
|
-
status: "failed",
|
|
108
|
-
diagnostics: [],
|
|
109
|
-
semantic: "none",
|
|
110
|
-
rawOutput: output.slice(0, 500),
|
|
111
|
-
};
|
|
112
|
-
}
|
|
113
|
-
},
|
|
114
|
-
};
|
|
115
|
-
/**
|
|
116
|
-
* Map pyright's own severity vocabulary onto the four-tier `Diagnostic.severity`
|
|
117
|
-
* (clients/dispatch/types.ts), the same way `normalizeBiomeSeverity` does for
|
|
118
|
-
* biome-check (#1791) and `normalizeRuleSeverity` does for ast-grep-napi
|
|
119
|
-
* (#1787). Pyright names its info tier `"information"`; `"error"`/`"warning"`
|
|
120
|
-
* pass through as-is. An unrecognized value falls back to `"warning"` — the
|
|
121
|
-
* tier every pyright diagnostic reported at before this fix, so reviving the
|
|
122
|
-
* info tier never silently demotes an existing finding. Pyright has no
|
|
123
|
-
* `"hint"` tier in its own vocabulary, so that tier is unreachable here.
|
|
124
|
-
*/
|
|
125
|
-
export function normalizePyrightSeverity(raw) {
|
|
126
|
-
switch (raw) {
|
|
127
|
-
case "error":
|
|
128
|
-
return "error";
|
|
129
|
-
case "information":
|
|
130
|
-
return "info";
|
|
131
|
-
// "warning" and any unrecognized value fall back below — the tier
|
|
132
|
-
// every pyright diagnostic reported at before this fix, so reviving
|
|
133
|
-
// the info tier never silently demotes an existing finding. There is
|
|
134
|
-
// no separate `case "warning"` branch: it would be redundant with
|
|
135
|
-
// this default and unprovable as its own branch.
|
|
136
|
-
default:
|
|
137
|
-
return "warning";
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
export function parsePyrightOutput(data, _filePath) {
|
|
141
|
-
const diagnostics = [];
|
|
142
|
-
// Pyright JSON output has generalDiagnostics array
|
|
143
|
-
const generalDiags = data.generalDiagnostics || [];
|
|
144
|
-
for (const diag of generalDiags) {
|
|
145
|
-
// Skip if not for this file (pyright may output diagnostics for imports)
|
|
146
|
-
// For now, include all - caller will filter if needed
|
|
147
|
-
// pyright's `range.start.line`/`character` are zero-based (see the
|
|
148
|
-
// `PyrightDiagnostic` note above); `Diagnostic.line`/`column` are
|
|
149
|
-
// one-based, the same convention ast-grep-napi and taplo already
|
|
150
|
-
// convert to (`range.start.line + 1`). `range` itself is omitted when
|
|
151
|
-
// pyright has nothing to point at, so both fall back to line 1.
|
|
152
|
-
const start = diag.range?.start;
|
|
153
|
-
diagnostics.push({
|
|
154
|
-
id: `pyright-${diag.rule || start?.line || "unknown"}`,
|
|
155
|
-
message: diag.message || "Type error",
|
|
156
|
-
filePath: diag.file || _filePath,
|
|
157
|
-
line: (start?.line ?? 0) + 1,
|
|
158
|
-
column: (start?.character ?? 0) + 1,
|
|
159
|
-
severity: normalizePyrightSeverity(diag.severity),
|
|
160
|
-
// Blocking classification stays error-only — reviving the info tier
|
|
161
|
-
// must never widen what fails a turn.
|
|
162
|
-
semantic: diag.severity === "error" ? "blocking" : "warning",
|
|
163
|
-
tool: "pyright",
|
|
164
|
-
rule: diag.rule,
|
|
165
|
-
});
|
|
166
|
-
}
|
|
167
|
-
return diagnostics;
|
|
168
|
-
}
|
|
169
|
-
export default pyrightRunner;
|