@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,379 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Unified LSP Runner for pi-lens
|
|
3
|
-
*
|
|
4
|
-
* Handles type checking for ALL LSP-supported languages:
|
|
5
|
-
* - TypeScript/JavaScript (typescript-language-server)
|
|
6
|
-
* - Python (pyright/pylsp)
|
|
7
|
-
* - Go (gopls)
|
|
8
|
-
* - Rust (rust-analyzer)
|
|
9
|
-
* - Ruby, PHP, C#, Java, Kotlin, Swift, Dart, etc.
|
|
10
|
-
*
|
|
11
|
-
* Replaces language-specific runners (pyright, etc.) with a single
|
|
12
|
-
* unified runner that delegates to the LSP service.
|
|
13
|
-
*/
|
|
14
|
-
import { logExtension } from "../../extension-log.js";
|
|
15
|
-
import { getLspCapableKinds } from "../../language-policy.js";
|
|
16
|
-
import { exceedsLspSyncLimits } from "../../lsp/content-limits.js";
|
|
17
|
-
import { touchCoverageGap } from "../../lsp/diagnostic-binding.js";
|
|
18
|
-
import { getLSPService } from "../../lsp/index.js";
|
|
19
|
-
import { LSP_SERVERS } from "../../lsp/server.js";
|
|
20
|
-
import { RUNTIME_CONFIG } from "../../runtime-config.js";
|
|
21
|
-
import { PRIORITY } from "../priorities.js";
|
|
22
|
-
import { resolveRunnerPath } from "../runner-context.js";
|
|
23
|
-
import { convertLspDiagnostics } from "../utils/lsp-diagnostics.js";
|
|
24
|
-
import { demoteInferredProjectDiagnostics } from "../../lsp/inferred-project.js";
|
|
25
|
-
import { enabledAuxiliaryLspServerIds, retagAuxiliaryDiagnostics, } from "../auxiliary-lsp.js";
|
|
26
|
-
import { readFileContent } from "./utils.js";
|
|
27
|
-
import { tryWarmAttachedCodeActions, tryWarmAttachedDiagnostics, } from "../../warm-attach.js";
|
|
28
|
-
import { contentHash, WARM_CODE_ACTION_LOOKUP_LIMIT } from "../../mcp/ipc.js";
|
|
29
|
-
const LSP_SPAWN_BUDGET_MS = RUNTIME_CONFIG.pipeline.lspSpawnBudgetMs;
|
|
30
|
-
// Diagnostics-wait cap for the dispatch lsp-runner. Bounded so a slow LSP
|
|
31
|
-
// (typescript-language-server on large monorepos has been observed >7 s)
|
|
32
|
-
// can't dominate the per-edit pipeline budget. Diagnostics that arrive
|
|
33
|
-
// after the cap still land in the client's cache and surface on the
|
|
34
|
-
// next edit. Overridable via PI_LENS_LSP_DIAGNOSTICS_MAX_WAIT_MS.
|
|
35
|
-
export const LSP_DIAGNOSTICS_WAIT_MS = 2500;
|
|
36
|
-
const MAX_CODE_ACTION_TITLES = 3;
|
|
37
|
-
/**
|
|
38
|
-
* Fixed margin above the worst-case cold-spawn-plus-diagnostics wait, so
|
|
39
|
-
* scheduling jitter alone can't reopen the F2 race below.
|
|
40
|
-
*/
|
|
41
|
-
const LSP_COLD_SPAWN_MARGIN_MS = 5_000;
|
|
42
|
-
/**
|
|
43
|
-
* This runner's own dispatch wall-clock budget. `runRunner` in
|
|
44
|
-
* `dispatcher.ts` races `runner.timeoutMs ?? RUNNER_TIMEOUT_MS` (30s)
|
|
45
|
-
* against `runner.run()` for the WHOLE call — reading the file, waiting for
|
|
46
|
-
* a client (bounded by `LSP_SPAWN_BUDGET_MS`, raised per-server via
|
|
47
|
-
* `LSPServerInfo.clientWaitTimeoutMs`), then waiting for diagnostics
|
|
48
|
-
* (`LSP_DIAGNOSTICS_WAIT_MS`).
|
|
49
|
-
*
|
|
50
|
-
* Left undeclared, this runner inherited the shared 30s default. A server
|
|
51
|
-
* whose `clientWaitTimeoutMs` exceeds that — Prisma's 40s, Vue's 30s
|
|
52
|
-
* (#2169, #2176) — could never actually use its own raised wait: the outer
|
|
53
|
-
* race always fired first, at 30s, so raising a server's floor without also
|
|
54
|
-
* raising this ceiling was a no-op on the real dispatch path (fix-round F2,
|
|
55
|
-
* #2233). Derive the ceiling from the registry instead of a second
|
|
56
|
-
* hand-picked literal, so the next slow server's `clientWaitTimeoutMs` keeps
|
|
57
|
-
* this budget correct automatically: the highest declared
|
|
58
|
-
* `clientWaitTimeoutMs` (or the shared 5s default, whichever is larger),
|
|
59
|
-
* plus the diagnostics wait that still runs after a cold spawn succeeds,
|
|
60
|
-
* plus a fixed margin.
|
|
61
|
-
*
|
|
62
|
-
* This raises the failure-detection latency for every OTHER language's
|
|
63
|
-
* hung-server case too (30s -> the value below), not just the five servers
|
|
64
|
-
* that need the headroom — the tradeoff is stated in PR #2233's body. It
|
|
65
|
-
* remains well inside the spread other dispatch runners already use
|
|
66
|
-
* (pyright 75s, golangci-lint/dotnet-build/rust-clippy 90s).
|
|
67
|
-
*/
|
|
68
|
-
export const LSP_RUNNER_TIMEOUT_MS = Math.max(LSP_SPAWN_BUDGET_MS, ...LSP_SERVERS.map((server) => server.clientWaitTimeoutMs ?? 0)) +
|
|
69
|
-
LSP_DIAGNOSTICS_WAIT_MS +
|
|
70
|
-
LSP_COLD_SPAWN_MARGIN_MS;
|
|
71
|
-
function normalizeActionTitle(title) {
|
|
72
|
-
return title.replace(/\s+/g, " ").trim();
|
|
73
|
-
}
|
|
74
|
-
function buildCodeActionSuggestion(actions) {
|
|
75
|
-
if (!actions.length)
|
|
76
|
-
return undefined;
|
|
77
|
-
const quickFixes = actions.filter((action) => action.kind?.startsWith("quickfix"));
|
|
78
|
-
if (!quickFixes.length)
|
|
79
|
-
return undefined;
|
|
80
|
-
const titles = Array.from(new Set(quickFixes
|
|
81
|
-
.map((action) => normalizeActionTitle(action.title))
|
|
82
|
-
.filter((title) => title.length > 0))).slice(0, MAX_CODE_ACTION_TITLES);
|
|
83
|
-
if (!titles.length)
|
|
84
|
-
return undefined;
|
|
85
|
-
return `LSP quick fixes: ${titles.join("; ")}`;
|
|
86
|
-
}
|
|
87
|
-
const lspRunner = {
|
|
88
|
-
id: "lsp",
|
|
89
|
-
// Derived from LANGUAGE_POLICY, never hand-maintained: the copy this
|
|
90
|
-
// replaced had drifted (fish was lspCapable but absent, so getForKind
|
|
91
|
-
// answered that no LSP runs on fish). Registering a language as lspCapable
|
|
92
|
-
// is now the only step this seam needs (#1545).
|
|
93
|
-
appliesTo: getLspCapableKinds(),
|
|
94
|
-
priority: PRIORITY.LSP_PRIMARY,
|
|
95
|
-
timeoutMs: LSP_RUNNER_TIMEOUT_MS,
|
|
96
|
-
async run(ctx) {
|
|
97
|
-
const diagnosticPath = resolveRunnerPath(ctx.cwd, ctx.filePath);
|
|
98
|
-
// Only run if LSP is not disabled via --no-lsp
|
|
99
|
-
if (ctx.pi.getFlag("no-lsp")) {
|
|
100
|
-
return { status: "skipped", diagnostics: [], semantic: "none" };
|
|
101
|
-
}
|
|
102
|
-
const lspService = getLSPService();
|
|
103
|
-
// Fast capability check only — actual client creation happens when we
|
|
104
|
-
// open the file below.
|
|
105
|
-
if (!lspService.supportsLSP(ctx.filePath)) {
|
|
106
|
-
return { status: "skipped", diagnostics: [], semantic: "none" };
|
|
107
|
-
}
|
|
108
|
-
// Always sync current file content before reading diagnostics so dispatch
|
|
109
|
-
// does not operate on stale LSP snapshots.
|
|
110
|
-
let lspDiags = [];
|
|
111
|
-
let serverFailed = false;
|
|
112
|
-
// touchFile resolves to `undefined` when no LSP client was ready (a cold
|
|
113
|
-
// spawn that didn't complete in the budget, or LSP unavailable for this
|
|
114
|
-
// file) — distinct from `[]`, which means the server replied with zero.
|
|
115
|
-
let lspClientReady = true;
|
|
116
|
-
// True when touchFile ran but couldn't confirm its result within
|
|
117
|
-
// budget (notify write and/or diagnostics wait timed out on at least
|
|
118
|
-
// one spawned server) — an empty `lspDiags` in that case is NOT a
|
|
119
|
-
// confirmed clean result and must not be reported as one (#570).
|
|
120
|
-
let diagnosticsInconclusive = false;
|
|
121
|
-
// #1470/#1493: server ids the touch carries no evidence for — an auxiliary
|
|
122
|
-
// whose push wait our aux grace timer cut off (#1470), or one that stayed
|
|
123
|
-
// silent with no stored publication for this content (#1493). The touch is
|
|
124
|
-
// NOT inconclusive (the primary answered, and its findings below are real),
|
|
125
|
-
// so this is tracked separately: the only claim it invalidates is "0
|
|
126
|
-
// diagnostics means clean".
|
|
127
|
-
let unconfirmedServerIds = [];
|
|
128
|
-
let deferredServerIds = [];
|
|
129
|
-
let usedWarmAttach = false;
|
|
130
|
-
let failureReason = "";
|
|
131
|
-
const content = readFileContent(ctx.filePath);
|
|
132
|
-
if (!content) {
|
|
133
|
-
return { status: "skipped", diagnostics: [], semantic: "none" };
|
|
134
|
-
}
|
|
135
|
-
// #3405 r2: was an inline second copy of the pipeline's byte/line
|
|
136
|
-
// predicate. One module owns the bound now (M3406-1's root cause was that
|
|
137
|
-
// a third writer could be added with neither copy); the SKIP is still this
|
|
138
|
-
// runner's own policy.
|
|
139
|
-
if (exceedsLspSyncLimits(content).tooLarge) {
|
|
140
|
-
return { status: "skipped", diagnostics: [], semantic: "none" };
|
|
141
|
-
}
|
|
142
|
-
// Cross-cutting auxiliary scanners (opengrep, …) attach alongside the
|
|
143
|
-
// primary language server when enabled — collected on the with-auxiliary
|
|
144
|
-
// path so their warm diagnostics merge into this same result.
|
|
145
|
-
const auxiliaryServerIds = enabledAuxiliaryLspServerIds((f) => ctx.pi.getFlag(f));
|
|
146
|
-
try {
|
|
147
|
-
const attached = await tryWarmAttachedDiagnostics(ctx.filePath, content, Math.max(LSP_SPAWN_BUDGET_MS, LSP_DIAGNOSTICS_WAIT_MS));
|
|
148
|
-
usedWarmAttach = attached?.available === true;
|
|
149
|
-
// #1179 (shape-5 structural fix): both branches normalize to the
|
|
150
|
-
// `touchFile` wrapper shape. The warm-attach IPC branch resolves a plain
|
|
151
|
-
// diagnostics array — `available` no longer implies a fully confirmed
|
|
152
|
-
// answer: a `partial` confirmation (an auxiliary that never
|
|
153
|
-
// reported — cut off by the grace timer, or silent) is served as
|
|
154
|
-
// `available: true` too (the IPC gate at
|
|
155
|
-
// `clients/mcp/ipc.ts:248` rejects only `inconclusive`). Carry the
|
|
156
|
-
// incumbent's `unconfirmedServerIds` onto the wrapper so
|
|
157
|
-
// `touchCoverageGap` below sees it — dropping it here is the same
|
|
158
|
-
// false-clean defect already fixed at `clients/lsp/index.ts` (the
|
|
159
|
-
// workspace sweep wrapper) and `tools/lsp-diagnostics.ts` (the tool
|
|
160
|
-
// consumer); wrap it as `{ diags }`; the incumbent branch already
|
|
161
|
-
// returns the wrapper.
|
|
162
|
-
const touched = attached?.available
|
|
163
|
-
? {
|
|
164
|
-
diags: attached.response.diagnostics,
|
|
165
|
-
...(attached.response.unconfirmedServerIds !== undefined && {
|
|
166
|
-
unconfirmedServerIds: attached.response.unconfirmedServerIds,
|
|
167
|
-
}),
|
|
168
|
-
}
|
|
169
|
-
: await lspService.touchFile(ctx.filePath, content, {
|
|
170
|
-
diagnostics: "document",
|
|
171
|
-
collectDiagnostics: true,
|
|
172
|
-
clientScope: auxiliaryServerIds.length > 0 ? "with-auxiliary" : "primary",
|
|
173
|
-
auxiliaryServerIds,
|
|
174
|
-
maxClientWaitMs: LSP_SPAWN_BUDGET_MS,
|
|
175
|
-
maxDiagnosticsWaitMs: LSP_DIAGNOSTICS_WAIT_MS,
|
|
176
|
-
source: "dispatch-lsp-runner",
|
|
177
|
-
});
|
|
178
|
-
if (touched === undefined) {
|
|
179
|
-
lspClientReady = false;
|
|
180
|
-
}
|
|
181
|
-
else {
|
|
182
|
-
lspDiags = touched.diags;
|
|
183
|
-
diagnosticsInconclusive = touched.inconclusive === true;
|
|
184
|
-
unconfirmedServerIds = touchCoverageGap(touched);
|
|
185
|
-
deferredServerIds = touched.deferredServerIds ?? [];
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
catch (err) {
|
|
189
|
-
serverFailed = true;
|
|
190
|
-
failureReason = err instanceof Error ? err.message : String(err);
|
|
191
|
-
if (failureReason.includes("spawn") ||
|
|
192
|
-
failureReason.includes("exited") ||
|
|
193
|
-
failureReason.includes("connection") ||
|
|
194
|
-
failureReason.includes("JSON RPC")) {
|
|
195
|
-
logExtension({
|
|
196
|
-
subsystem: "lsp-runner",
|
|
197
|
-
message: `LSP server failed for ${diagnosticPath}: ${failureReason}`,
|
|
198
|
-
metadata: { filePath: diagnosticPath },
|
|
199
|
-
});
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
if (serverFailed) {
|
|
203
|
-
return {
|
|
204
|
-
status: "failed",
|
|
205
|
-
failureKind: "server_error",
|
|
206
|
-
failureMessage: failureReason.slice(0, 200),
|
|
207
|
-
diagnostics: [
|
|
208
|
-
{
|
|
209
|
-
id: `lsp:server-error:0`,
|
|
210
|
-
message: `LSP server failed: ${failureReason}`,
|
|
211
|
-
filePath: diagnosticPath,
|
|
212
|
-
line: 1,
|
|
213
|
-
column: 1,
|
|
214
|
-
severity: "error",
|
|
215
|
-
semantic: "warning", // Don't block - fallback to other runners
|
|
216
|
-
tool: "lsp",
|
|
217
|
-
},
|
|
218
|
-
],
|
|
219
|
-
semantic: "warning",
|
|
220
|
-
};
|
|
221
|
-
}
|
|
222
|
-
if (!lspClientReady) {
|
|
223
|
-
// No answer from the LSP — reporting "succeeded with 0 diagnostics"
|
|
224
|
-
// would read as a clean bill of health when we simply didn't get a
|
|
225
|
-
// reply. Report "skipped" so the coverage notice can flag the gap and
|
|
226
|
-
// the next edit re-checks once the server has warmed; any diagnostics
|
|
227
|
-
// published late still land in the client cache and surface then.
|
|
228
|
-
return { status: "skipped", diagnostics: [], semantic: "none" };
|
|
229
|
-
}
|
|
230
|
-
if (diagnosticsInconclusive) {
|
|
231
|
-
// The touch ran and a client was ready, but the notify write and/or
|
|
232
|
-
// diagnostics wait hit their deadline before the server confirmed
|
|
233
|
-
// completion — `lspDiags` (even if non-empty) is not a trustworthy
|
|
234
|
-
// merged result. Same treatment as `!lspClientReady`: report
|
|
235
|
-
// "skipped" rather than "succeeded" with a possibly-incomplete
|
|
236
|
-
// diagnostics list, so the coverage notice flags the gap instead of
|
|
237
|
-
// the footer reading this as a confirmed clean/partial result (#570).
|
|
238
|
-
// Diagnostics that do arrive late still land in the client cache and
|
|
239
|
-
// surface on the next edit.
|
|
240
|
-
return { status: "skipped", diagnostics: [], semantic: "none" };
|
|
241
|
-
}
|
|
242
|
-
if (lspDiags.length === 0) {
|
|
243
|
-
if (deferredServerIds.length > 0) {
|
|
244
|
-
return {
|
|
245
|
-
status: "deferred",
|
|
246
|
-
diagnostics: [],
|
|
247
|
-
semantic: "none",
|
|
248
|
-
unconfirmedServerIds: [...unconfirmedServerIds],
|
|
249
|
-
deferredServerIds: [...deferredServerIds],
|
|
250
|
-
};
|
|
251
|
-
}
|
|
252
|
-
if (unconfirmedServerIds.length > 0) {
|
|
253
|
-
// #1470/#1493: an auxiliary never reported — cut off by the aux grace
|
|
254
|
-
// timer, or silent with nothing published for this content — so this
|
|
255
|
-
// empty merged result is missing whatever that scanner would have said.
|
|
256
|
-
// A hung OR silent opengrep must not read as a clean bill of health on
|
|
257
|
-
// the security lane. The empty result remains skipped, while the correlated
|
|
258
|
-
// server ids let the coverage notice name the missing scanners once. Nothing
|
|
259
|
-
// is thrown away: the primary answered with zero findings, so there is nothing to
|
|
260
|
-
// report; when it DOES have findings the branches below still report
|
|
261
|
-
// them (see the non-empty path), which is how a trustworthy primary
|
|
262
|
-
// stays trustworthy under an auxiliary that never reported.
|
|
263
|
-
return {
|
|
264
|
-
status: "skipped",
|
|
265
|
-
diagnostics: [],
|
|
266
|
-
semantic: "none",
|
|
267
|
-
unconfirmedServerIds: [...unconfirmedServerIds],
|
|
268
|
-
};
|
|
269
|
-
}
|
|
270
|
-
return {
|
|
271
|
-
status: "succeeded",
|
|
272
|
-
diagnostics: [],
|
|
273
|
-
semantic: "none",
|
|
274
|
-
rawOutput: "no-diagnostics",
|
|
275
|
-
};
|
|
276
|
-
}
|
|
277
|
-
// Convert LSP diagnostics to our format
|
|
278
|
-
// Defensive: filter out malformed diagnostics that may lack range
|
|
279
|
-
const rawValidLspDiags = lspDiags.filter((d) => d.range?.start?.line !== undefined);
|
|
280
|
-
// #1640: the per-edit path renders the same authority as the mode=full
|
|
281
|
-
// sweep, so it applies the same demotion. Costs one bounded `projectInfo`
|
|
282
|
-
// request, and only when the file already has a TypeScript ERROR — an edit
|
|
283
|
-
// that type-checks clean pays nothing.
|
|
284
|
-
//
|
|
285
|
-
// #1645 review F2: NOT under warm attach. There, diagnostics came from an
|
|
286
|
-
// already-running remote session over IPC and no local client exists — so
|
|
287
|
-
// the probe would have to spawn a whole tsserver fleet to answer, breaking
|
|
288
|
-
// this branch's spawn-free contract (see the comment below), and the
|
|
289
|
-
// answer it spawned for would be the NEW server's project resolution, not
|
|
290
|
-
// the warm session's. A meaningless answer bought with a process is worse
|
|
291
|
-
// than no answer, so the warm-attach path keeps pre-#1640 rendering. This
|
|
292
|
-
// is a known gap, recorded on the issue rather than papered over with an
|
|
293
|
-
// "unverified" label that would fire on every warm-attach file including
|
|
294
|
-
// the properly configured majority.
|
|
295
|
-
const validLspDiags = usedWarmAttach
|
|
296
|
-
? rawValidLspDiags
|
|
297
|
-
: await demoteInferredProjectDiagnostics(rawValidLspDiags, {
|
|
298
|
-
filePath: diagnosticPath,
|
|
299
|
-
cwd: ctx.cwd,
|
|
300
|
-
service: lspService,
|
|
301
|
-
});
|
|
302
|
-
const fixSuggestionByIndex = new Map();
|
|
303
|
-
// #1640: read severity off the RAW list. A demoted diagnostic is still
|
|
304
|
-
// worth a quick-fix suggestion — the demotion changes its authority, not
|
|
305
|
-
// whether tsserver can offer a fix. Indexes align 1:1 with `validLspDiags`.
|
|
306
|
-
const blockingDiagIndexes = rawValidLspDiags
|
|
307
|
-
.map((d, idx) => ({ d, idx }))
|
|
308
|
-
.filter(({ d }) => d.severity === 1)
|
|
309
|
-
.slice(0, WARM_CODE_ACTION_LOOKUP_LIMIT);
|
|
310
|
-
if (usedWarmAttach) {
|
|
311
|
-
// Diagnostics have already succeeded. Code actions are optional
|
|
312
|
-
// enrichment, so ANY IPC failure degrades to today's skip without
|
|
313
|
-
// promoting the attached session to a local LSP fleet.
|
|
314
|
-
const ranges = blockingDiagIndexes.map(({ d }) => ({
|
|
315
|
-
start: d.range.start,
|
|
316
|
-
end: d.range.end ?? d.range.start,
|
|
317
|
-
}));
|
|
318
|
-
const result = await tryWarmAttachedCodeActions(ctx.filePath, contentHash(content), ranges, LSP_DIAGNOSTICS_WAIT_MS);
|
|
319
|
-
if (result?.available) {
|
|
320
|
-
result.response.actions.forEach((actions, responseIndex) => {
|
|
321
|
-
const diagnosticIndex = blockingDiagIndexes[responseIndex]?.idx;
|
|
322
|
-
const suggestion = buildCodeActionSuggestion(actions);
|
|
323
|
-
if (diagnosticIndex !== undefined && suggestion) {
|
|
324
|
-
fixSuggestionByIndex.set(diagnosticIndex, suggestion);
|
|
325
|
-
}
|
|
326
|
-
});
|
|
327
|
-
}
|
|
328
|
-
}
|
|
329
|
-
else {
|
|
330
|
-
await Promise.all(blockingDiagIndexes.map(async ({ d, idx }) => {
|
|
331
|
-
try {
|
|
332
|
-
const start = d.range.start;
|
|
333
|
-
const end = d.range.end ?? d.range.start;
|
|
334
|
-
const actions = await lspService.codeAction(ctx.filePath, start.line, start.character, end.line, end.character);
|
|
335
|
-
const suggestion = buildCodeActionSuggestion(actions);
|
|
336
|
-
if (suggestion) {
|
|
337
|
-
fixSuggestionByIndex.set(idx, suggestion);
|
|
338
|
-
}
|
|
339
|
-
}
|
|
340
|
-
catch {
|
|
341
|
-
// Best-effort enrichment only; base diagnostics remain authoritative.
|
|
342
|
-
}
|
|
343
|
-
}));
|
|
344
|
-
}
|
|
345
|
-
const diagnostics = convertLspDiagnostics(validLspDiags, diagnosticPath, { fixSuggestionByIndex });
|
|
346
|
-
// convertLspDiagnostics maps validLspDiags 1:1, so re-tag any
|
|
347
|
-
// auxiliary-sourced diagnostics (opengrep emits source "Semgrep", …) with
|
|
348
|
-
// their tool id + semantic policy — language-server diagnostics keep "lsp".
|
|
349
|
-
// #692: shared with the scan/sweep reconcile paths (`retagAuxiliaryDiagnostics`
|
|
350
|
-
// in `../auxiliary-lsp.js`) so a scan-reconciled aux finding gets identical
|
|
351
|
-
// tool/semantic/defectClass tagging instead of keeping tool "lsp".
|
|
352
|
-
const keptDiagnostics = retagAuxiliaryDiagnostics(diagnostics, validLspDiags, content, { cwd: ctx.cwd, fileRole: ctx.fileRole });
|
|
353
|
-
const hasErrors = keptDiagnostics.some((d) => d.semantic === "blocking");
|
|
354
|
-
const resultSemantic = hasErrors
|
|
355
|
-
? "blocking"
|
|
356
|
-
: keptDiagnostics.length > 0
|
|
357
|
-
? "warning"
|
|
358
|
-
: "none";
|
|
359
|
-
return {
|
|
360
|
-
status: hasErrors
|
|
361
|
-
? "failed"
|
|
362
|
-
: deferredServerIds.length > 0
|
|
363
|
-
? "deferred"
|
|
364
|
-
: "succeeded",
|
|
365
|
-
// "failed" here means the file has blocking type errors — the check ran
|
|
366
|
-
// fine. Tag it so the smell analyzer doesn't read it as a runner crash.
|
|
367
|
-
failureKind: hasErrors ? "blocking_diagnostics" : undefined,
|
|
368
|
-
diagnostics: keptDiagnostics,
|
|
369
|
-
semantic: resultSemantic,
|
|
370
|
-
...(unconfirmedServerIds.length > 0 && {
|
|
371
|
-
unconfirmedServerIds: [...unconfirmedServerIds],
|
|
372
|
-
}),
|
|
373
|
-
...(deferredServerIds.length > 0 && {
|
|
374
|
-
deferredServerIds: [...deferredServerIds],
|
|
375
|
-
}),
|
|
376
|
-
};
|
|
377
|
-
},
|
|
378
|
-
};
|
|
379
|
-
export default lspRunner;
|
|
@@ -1,167 +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 { logRunnerAdvisoryOnce, resolveRunnerCwd } from "../../tool-cwd.js";
|
|
5
|
-
import { getLinterPolicyForCwd, markdownlintConfigArgs, } from "../../tool-policy.js";
|
|
6
|
-
import { PRIORITY } from "../priorities.js";
|
|
7
|
-
import { createAvailabilityChecker, resolveToolCommandWithInstallFallback, } from "./utils/runner-helpers.js";
|
|
8
|
-
import { parseToolRun } from "./utils/tool-failure.js";
|
|
9
|
-
import { isInSpawnTimeoutCooldown, noteSpawnTimeout, } from "../../spawn-timeout-cooldown.js";
|
|
10
|
-
import { finishParsedRun } from "./utils/tool-failure.js";
|
|
11
|
-
const markdownlint = createAvailabilityChecker("markdownlint-cli2", ".cmd", [
|
|
12
|
-
"--no-globs",
|
|
13
|
-
"-",
|
|
14
|
-
]);
|
|
15
|
-
// EXIT TABLE (markdownlint-cli2 0.17 README https://github.com/DavidAnson/markdownlint-cli2#exit-codes): 0 = no
|
|
16
|
-
// findings, 1 = lint findings, 2 = unexpected error (unreadable config, bad
|
|
17
|
-
// glob, crash). Only 2 is a rejected invocation.
|
|
18
|
-
const MARKDOWNLINT_EXIT_CODES = { ran: [1] };
|
|
19
|
-
// markdownlint-cli2 text output does not include per-violation fixability,
|
|
20
|
-
// so we keep a static allowlist of MD### rules whose --fix is deterministic.
|
|
21
|
-
// Sourced from the rule pages in
|
|
22
|
-
// https://github.com/DavidAnson/markdownlint/blob/main/doc/Rules.md — every
|
|
23
|
-
// entry below is documented as "Fixable: yes" (or equivalent). Update when
|
|
24
|
-
// markdownlint adds or changes auto-fix support.
|
|
25
|
-
const MARKDOWNLINT_FIXABLE_RULES = new Set([
|
|
26
|
-
"MD001",
|
|
27
|
-
"MD004",
|
|
28
|
-
"MD005",
|
|
29
|
-
"MD007",
|
|
30
|
-
"MD009",
|
|
31
|
-
"MD010",
|
|
32
|
-
"MD011",
|
|
33
|
-
"MD012",
|
|
34
|
-
"MD014",
|
|
35
|
-
"MD018",
|
|
36
|
-
"MD019",
|
|
37
|
-
"MD020",
|
|
38
|
-
"MD021",
|
|
39
|
-
"MD022",
|
|
40
|
-
"MD023",
|
|
41
|
-
"MD026",
|
|
42
|
-
"MD027",
|
|
43
|
-
"MD030",
|
|
44
|
-
"MD031",
|
|
45
|
-
"MD032",
|
|
46
|
-
"MD034",
|
|
47
|
-
"MD037",
|
|
48
|
-
"MD038",
|
|
49
|
-
"MD039",
|
|
50
|
-
"MD044",
|
|
51
|
-
"MD047",
|
|
52
|
-
"MD049",
|
|
53
|
-
"MD050",
|
|
54
|
-
"MD053",
|
|
55
|
-
"MD058",
|
|
56
|
-
]);
|
|
57
|
-
// markdownlint-cli2 output: `path:line[:col] [error|warning] MD###/name[/name…] message`
|
|
58
|
-
// Two things the original parser missed (→ silent 0 diagnostics, #212):
|
|
59
|
-
// 1. cli2 emits a severity token (`error`/`warning`) between the col and the
|
|
60
|
-
// rule code — older markdownlint-cli did not.
|
|
61
|
-
// 2. some rules carry MULTIPLE slash-separated names (e.g.
|
|
62
|
-
// `MD041/first-line-heading/first-line-h1`).
|
|
63
|
-
// The severity token is optional so older/relative-path output still parses.
|
|
64
|
-
function parseMarkdownlintOutput(raw, filePath, cwd) {
|
|
65
|
-
const diagnostics = [];
|
|
66
|
-
const absTarget = path.resolve(cwd, filePath);
|
|
67
|
-
for (const line of raw.split(/\r?\n/)) {
|
|
68
|
-
if (!line.trim())
|
|
69
|
-
continue;
|
|
70
|
-
// Rule code is MD### followed by one or more slash-joined names. Use a
|
|
71
|
-
// single char class (`[\w/-]+`) rather than a nested quantifier
|
|
72
|
-
// (`(?:/[\w-]+)+`) so there's no super-linear backtracking (S5852).
|
|
73
|
-
const match = line.match(/^(.*?):(\d+)(?::(\d+))?\s+(?:error|warning)?\s*(MD\d+\/[\w/-]+)\s+(.+)$/);
|
|
74
|
-
if (!match)
|
|
75
|
-
continue;
|
|
76
|
-
const [, reported, lineNum, col, ruleCode, message] = match;
|
|
77
|
-
// #3295: the leading `.*?` this parser discarded IS markdownlint-cli2's
|
|
78
|
-
// reported path, and its config globs can widen the run past the argv.
|
|
79
|
-
if (reported && !pathsEqual(path.resolve(cwd, reported), absTarget))
|
|
80
|
-
continue;
|
|
81
|
-
const ruleName = ruleCode.split("/")[0];
|
|
82
|
-
const fixable = MARKDOWNLINT_FIXABLE_RULES.has(ruleName);
|
|
83
|
-
diagnostics.push({
|
|
84
|
-
id: `markdownlint-${lineNum}-${ruleName}`,
|
|
85
|
-
message: `[${ruleCode}] ${message}`,
|
|
86
|
-
filePath,
|
|
87
|
-
line: Number(lineNum),
|
|
88
|
-
column: col ? Number(col) : 1,
|
|
89
|
-
severity: "warning",
|
|
90
|
-
semantic: "warning",
|
|
91
|
-
tool: "markdownlint",
|
|
92
|
-
rule: ruleName,
|
|
93
|
-
fixable,
|
|
94
|
-
fixSuggestion: fixable
|
|
95
|
-
? "Run `markdownlint-cli2 --fix` to apply the deterministic auto-correction for this rule."
|
|
96
|
-
: undefined,
|
|
97
|
-
});
|
|
98
|
-
}
|
|
99
|
-
return diagnostics;
|
|
100
|
-
}
|
|
101
|
-
const markdownlintRunner = {
|
|
102
|
-
id: "markdownlint",
|
|
103
|
-
appliesTo: ["markdown"],
|
|
104
|
-
priority: PRIORITY.DOC_QUALITY,
|
|
105
|
-
skipTestFiles: false,
|
|
106
|
-
async run(ctx) {
|
|
107
|
-
const cwd = resolveRunnerCwd(ctx, "markdownlint");
|
|
108
|
-
const policy = getLinterPolicyForCwd(ctx.filePath, cwd);
|
|
109
|
-
if (policy && !policy.preferredRunners.includes("markdownlint")) {
|
|
110
|
-
return { status: "skipped", diagnostics: [], semantic: "none" };
|
|
111
|
-
}
|
|
112
|
-
let cmd = null;
|
|
113
|
-
if (await markdownlint.isAvailableAsync(cwd)) {
|
|
114
|
-
cmd = markdownlint.getCommand(cwd);
|
|
115
|
-
}
|
|
116
|
-
else {
|
|
117
|
-
cmd = await resolveToolCommandWithInstallFallback(cwd, "markdownlint");
|
|
118
|
-
}
|
|
119
|
-
if (!cmd)
|
|
120
|
-
return { status: "skipped", diagnostics: [], semantic: "none" };
|
|
121
|
-
// #1995: a command cooling down after a spawn timeout already consumed
|
|
122
|
-
// its budget in another lane (availability verify, autofix --fix). Skip
|
|
123
|
-
// without spawning — "not checked", never re-reported as clean.
|
|
124
|
-
if (isInSpawnTimeoutCooldown(cmd)) {
|
|
125
|
-
logRunnerAdvisoryOnce(ctx, "markdownlint", cwd, `markdownlint: ${cmd} is cooling down after a spawn timeout — skipping (one bounded failure budget per edit)`);
|
|
126
|
-
return { status: "skipped", diagnostics: [], semantic: "none" };
|
|
127
|
-
}
|
|
128
|
-
// Shared config-args seam (#1247): the autofix path consumes the same
|
|
129
|
-
// builder, so the package-owned fallback config can never drift.
|
|
130
|
-
const configArgs = markdownlintConfigArgs(cwd);
|
|
131
|
-
const result = await safeSpawnAsync(cmd, [...configArgs, ctx.filePath], {
|
|
132
|
-
timeout: 15000,
|
|
133
|
-
cwd,
|
|
134
|
-
});
|
|
135
|
-
// #1995: a timeout is negative runtime evidence. Arm the cooldown so
|
|
136
|
-
// the autofix and availability lanes cannot hand this command a second
|
|
137
|
-
// budget within the same session.
|
|
138
|
-
if (result.failure === "timeout") {
|
|
139
|
-
noteSpawnTimeout({
|
|
140
|
-
tool: "markdownlint",
|
|
141
|
-
command: cmd,
|
|
142
|
-
phase: "lint",
|
|
143
|
-
durationMs: 15000,
|
|
144
|
-
teardown: result.timeoutTeardown,
|
|
145
|
-
});
|
|
146
|
-
}
|
|
147
|
-
// #1816: this runner read `result.status` zero times, so an exit-2
|
|
148
|
-
// config error with an empty stdout parsed to zero diagnostics and was
|
|
149
|
-
// reported as a clean Markdown file. An empty result must distinguish
|
|
150
|
-
// clean from errored.
|
|
151
|
-
const raw = `${result.stdout ?? ""}${result.stderr ?? ""}`;
|
|
152
|
-
// #1948: one seam for both gates — the tool produced nothing, and the
|
|
153
|
-
// tool produced something the parser could not read.
|
|
154
|
-
const run = parseToolRun("markdownlint", { result, output: raw, exitCodes: MARKDOWNLINT_EXIT_CODES }, (out) => parseMarkdownlintOutput(out, ctx.filePath, cwd));
|
|
155
|
-
if (run.skipped)
|
|
156
|
-
return run.skipped;
|
|
157
|
-
const diagnostics = run.diagnostics;
|
|
158
|
-
return finishParsedRun({
|
|
159
|
-
tool: "markdownlint",
|
|
160
|
-
ctx,
|
|
161
|
-
result,
|
|
162
|
-
diagnostics,
|
|
163
|
-
classify: () => ({ status: "succeeded", semantic: "warning" }),
|
|
164
|
-
});
|
|
165
|
-
},
|
|
166
|
-
};
|
|
167
|
-
export default markdownlintRunner;
|
|
@@ -1,102 +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 { hasMypyConfig } from "../../tool-policy.js";
|
|
5
|
-
import { PRIORITY } from "../priorities.js";
|
|
6
|
-
import { createAvailabilityChecker, resolveToolCommandWithInstallFallback, } from "./utils/runner-helpers.js";
|
|
7
|
-
import { parseToolRun } from "./utils/tool-failure.js";
|
|
8
|
-
import { finishParsedRun } from "./utils/tool-failure.js";
|
|
9
|
-
const mypy = createAvailabilityChecker("mypy", "");
|
|
10
|
-
// mypy exit codes: 0 = no type errors, 1 = type errors found, 2 = a blocking
|
|
11
|
-
// error. 2 is NOT a rejected invocation on its own — mypy reports a source
|
|
12
|
-
// SYNTAX error under 2 and still writes a normal parsable diagnostic to stdout
|
|
13
|
-
// (verified live against mypy 2.3.1: `syn.py:1: error: Invalid syntax
|
|
14
|
-
// [syntax]`). A bad flag or unreadable config also exits 2, but writes its
|
|
15
|
-
// message to STDERR and leaves stdout empty.
|
|
16
|
-
//
|
|
17
|
-
// EXIT TABLE (mypy 1.11 docs https://mypy.readthedocs.io/en/stable/command_line.html): 0 clean; 1 findings; 2 findings/error; other
|
|
18
|
-
// nonzero rejected. The exit code cannot separate the two, and the STREAM does:
|
|
19
|
-
// judges "nothing to parse" on stdout alone, while the parser still reads both.
|
|
20
|
-
// The table's remaining job is to reject any OTHER nonzero status.
|
|
21
|
-
const MYPY_EXIT_CODES = { ran: [1, 2] };
|
|
22
|
-
// mypy output: file.py:10: error: Incompatible types [assignment]
|
|
23
|
-
//
|
|
24
|
-
// mypy follows imports and reports errors in OTHER modules, not just the file
|
|
25
|
-
// it was invoked on. Attribute each diagnostic to the file mypy names (group 1,
|
|
26
|
-
// resolved against cwd) rather than blanket-stamping ctx.filePath — otherwise a
|
|
27
|
-
// cross-file regression is mis-located onto the edited file (#265 A2). We do NOT
|
|
28
|
-
// filter to the edited file: surfacing the cross-file impact is the point.
|
|
29
|
-
export function parseMypyOutput(raw, fallbackPath, cwd) {
|
|
30
|
-
const diagnostics = [];
|
|
31
|
-
const linePattern = /^(.+?):(\d+)(?::(\d+))?:\s*(error|warning|note):\s*(.+?)(?:\s+\[([^\]]+)\])?$/gm;
|
|
32
|
-
for (const match of raw.matchAll(linePattern)) {
|
|
33
|
-
const [, file, lineNum, col, level, message, errorCode] = match;
|
|
34
|
-
if (!lineNum || !level || !message)
|
|
35
|
-
continue;
|
|
36
|
-
if (level === "note")
|
|
37
|
-
continue; // skip contextual notes
|
|
38
|
-
const severity = level === "error" ? "error" : "warning";
|
|
39
|
-
const rule = errorCode ?? "mypy";
|
|
40
|
-
const filePath = file && file.trim()
|
|
41
|
-
? path.isAbsolute(file)
|
|
42
|
-
? file
|
|
43
|
-
: path.resolve(cwd, file)
|
|
44
|
-
: fallbackPath;
|
|
45
|
-
diagnostics.push({
|
|
46
|
-
id: `mypy-${lineNum}-${rule}`,
|
|
47
|
-
message: errorCode ? `[${errorCode}] ${message}` : message,
|
|
48
|
-
filePath,
|
|
49
|
-
line: Number(lineNum),
|
|
50
|
-
column: col ? Number(col) : 1,
|
|
51
|
-
severity,
|
|
52
|
-
semantic: severity === "error" ? "blocking" : "warning",
|
|
53
|
-
tool: "mypy",
|
|
54
|
-
rule,
|
|
55
|
-
defectClass: "correctness",
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
|
-
return diagnostics;
|
|
59
|
-
}
|
|
60
|
-
const mypyRunner = {
|
|
61
|
-
id: "mypy",
|
|
62
|
-
appliesTo: ["python"],
|
|
63
|
-
priority: PRIORITY.GENERAL_ANALYSIS,
|
|
64
|
-
skipTestFiles: false,
|
|
65
|
-
async run(ctx) {
|
|
66
|
-
const cwd = resolveRunnerCwd(ctx, "mypy");
|
|
67
|
-
// Only run if mypy config exists — avoids false positives in untyped projects
|
|
68
|
-
if (!hasMypyConfig(cwd)) {
|
|
69
|
-
return { status: "skipped", diagnostics: [], semantic: "none" };
|
|
70
|
-
}
|
|
71
|
-
let cmd = null;
|
|
72
|
-
if (await mypy.isAvailableAsync(cwd)) {
|
|
73
|
-
cmd = mypy.getCommand(cwd);
|
|
74
|
-
}
|
|
75
|
-
else {
|
|
76
|
-
cmd = await resolveToolCommandWithInstallFallback(cwd, "mypy");
|
|
77
|
-
}
|
|
78
|
-
if (!cmd)
|
|
79
|
-
return { status: "skipped", diagnostics: [], semantic: "none" };
|
|
80
|
-
const result = await safeSpawnAsync(cmd, ["--no-error-summary", "--show-column-numbers", ctx.filePath], { timeout: 30000, cwd });
|
|
81
|
-
// #1816: this runner read `result.status` zero times, so an exit-2
|
|
82
|
-
// config error reported the file as cleanly type-checked. The gate reads
|
|
83
|
-
// stdout only (see MYPY_EXIT_CODES) so an exit-2 SYNTAX error, which
|
|
84
|
-
// does write a diagnostic there, still reaches the parser.
|
|
85
|
-
const raw = `${result.stdout ?? ""}${result.stderr ?? ""}`;
|
|
86
|
-
// #1948: `parseOutput` keeps the split this runner already had — the gate
|
|
87
|
-
// judges "did it run" on stdout alone, the parser still reads both
|
|
88
|
-
// streams — so adding the parsed-nothing record does not widen the
|
|
89
|
-
// did-it-run verdict.
|
|
90
|
-
const run = parseToolRun("mypy", { result, output: result.stdout, exitCodes: MYPY_EXIT_CODES }, (out) => parseMypyOutput(out, ctx.filePath, cwd), { parseOutput: raw });
|
|
91
|
-
if (run.skipped)
|
|
92
|
-
return run.skipped;
|
|
93
|
-
const diagnostics = run.diagnostics;
|
|
94
|
-
return finishParsedRun({
|
|
95
|
-
tool: "mypy",
|
|
96
|
-
ctx,
|
|
97
|
-
result,
|
|
98
|
-
diagnostics,
|
|
99
|
-
});
|
|
100
|
-
},
|
|
101
|
-
};
|
|
102
|
-
export default mypyRunner;
|