@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,192 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The session-root registry: which project roots does this process serve?
|
|
3
|
-
*
|
|
4
|
-
* #2052. A file is IN-SESSION when it lies within any initialized session cwd.
|
|
5
|
-
* `initLSPConfig` (`clients/lsp/config.ts`) is the single writer, and every
|
|
6
|
-
* entry point funnels through it — `ensureLSPConfigInitialized` (`index.ts`),
|
|
7
|
-
* `ensureReady` (`mcp/server.ts`), `clients/runtime-session.ts`, and
|
|
8
|
-
* `clients/lens-engine.ts` — so registration needs no second call site.
|
|
9
|
-
*
|
|
10
|
-
* WHY THIS IS ITS OWN MODULE, not a helper inside `config.ts`: `clients/lsp/
|
|
11
|
-
* index.ts`'s import surface from `config.js` is mirrored by an explicit
|
|
12
|
-
* `vi.mock` factory in ~58 test files. Importing a new symbol from `config.js`
|
|
13
|
-
* breaks every one of them with "No export is defined on the mock", which is a
|
|
14
|
-
* standing tax on any future export.
|
|
15
|
-
*
|
|
16
|
-
* WHY THE CONFIG PAYLOAD LIVES HERE TOO (#2518). Until this fix the payload
|
|
17
|
-
* lived in `config.ts`'s own 32-entry `workspaceConfigs` LRU while this
|
|
18
|
-
* registry held 128, and the two answered halves of ONE question: the registry
|
|
19
|
-
* decides whether a root still needs initializing (`ensureReady`,
|
|
20
|
-
* `mcp/server.ts`), the payload decides whether the operator's
|
|
21
|
-
* `lsp.disabledServers` denial applies (`isServerDisabled`). Thirty-three
|
|
22
|
-
* `ensureReady` calls on other cwds therefore dropped a LIVE root's denial
|
|
23
|
-
* while the registry still reported the root ready, so nothing re-initialized
|
|
24
|
-
* it and a server the operator had turned off came back — #2415 AC 3's exact
|
|
25
|
-
* prohibition, silently.
|
|
26
|
-
*
|
|
27
|
-
* Tying the two CAPS would not have fixed it. `initLSPConfig` registers the
|
|
28
|
-
* root BEFORE its `await` and writes the payload AFTER, so two interleaved
|
|
29
|
-
* initializations enter the two containers in different orders; with separate
|
|
30
|
-
* containers the same cap still evicts different keys from each. One entry per
|
|
31
|
-
* root — the key IS the registration, the value IS the payload — makes a
|
|
32
|
-
* payload miss for a served root impossible by construction instead of by an
|
|
33
|
-
* ordering agreement between two modules.
|
|
34
|
-
*
|
|
35
|
-
* WHY IT IS NOT A LATCH. The first attempt at #2052 used a single
|
|
36
|
-
* last-writer-wins session cwd that fell back to `process.cwd()`. Two bugs
|
|
37
|
-
* followed directly from that shape, and this module's contract excludes both:
|
|
38
|
-
*
|
|
39
|
-
* - MULTI-ROOT. A process that initializes projA and then projB serves BOTH.
|
|
40
|
-
* A latch silently made projA's files foreign the moment projB registered.
|
|
41
|
-
* - FAIL-OPEN ON EMPTY. An empty registry declines NOTHING. Declining is a
|
|
42
|
-
* hard refusal to answer, so it must rest on positive evidence that a
|
|
43
|
-
* session exists AND that the file sits outside it — never on the absence
|
|
44
|
-
* of evidence. Callers that never declared a session (isolated tests, API
|
|
45
|
-
* consumers, a request racing initialization) therefore keep the pre-#2052
|
|
46
|
-
* clamp behavior instead of having `process.cwd()` gate a refusal.
|
|
47
|
-
*
|
|
48
|
-
* This is also the seam #2053 needs: an explicit `analysisRoot` registers here.
|
|
49
|
-
*/
|
|
50
|
-
import { BoundedFifoMap } from "../bounded-cache.js";
|
|
51
|
-
import { incrementDegradationCount } from "../degradation-ledger.js";
|
|
52
|
-
import { isSameOrWithin } from "./server.js";
|
|
53
|
-
import path from "node:path";
|
|
54
|
-
/**
|
|
55
|
-
* Insertion-ordered, so eviction drops the OLDEST root. `BoundedFifoMap`
|
|
56
|
-
* (#2442) owns the eviction; this module no longer hand-rolls it. FIFO and not
|
|
57
|
-
* LRU on purpose: eviction order is REGISTRATION order, so a config write for
|
|
58
|
-
* an already-registered root cannot reorder the registry underneath the
|
|
59
|
-
* `ensureReady` memo that reads it.
|
|
60
|
-
*
|
|
61
|
-
* The value is `undefined` between `registerSessionRoot` and the config write
|
|
62
|
-
* that follows the loader's `await` — the same window in which, before #2518,
|
|
63
|
-
* no payload existed for the root at all. {@link sessionRootConfigEntries}
|
|
64
|
-
* skips those entries, so an in-flight root resolves exactly as it did before:
|
|
65
|
-
* to a shorter ancestor root's config, or to none.
|
|
66
|
-
*/
|
|
67
|
-
const SESSION_ROOT_CAP = 128;
|
|
68
|
-
const sessionRoots = new BoundedFifoMap(SESSION_ROOT_CAP);
|
|
69
|
-
/**
|
|
70
|
-
* The cap dropped a root this process was serving. Its files fall back to
|
|
71
|
-
* pre-#2052 clamp behavior and its `lsp.disabledServers` denial stops applying
|
|
72
|
-
* until something initializes the root again — which `shouldInitializeSessionRoot`
|
|
73
|
-
* now guarantees the next SESSION START OR TOOL CALL naming that root does,
|
|
74
|
-
* because the registration went with the payload. Nothing else re-initializes:
|
|
75
|
-
* the readers of the denial (`isServerDisabled`, `getServersForFileWithConfig`,
|
|
76
|
-
* `getServerInitOverride`) ask the store, they never load it.
|
|
77
|
-
*
|
|
78
|
-
* A CONSTANT subject, counted rather than latched (#2518 review F3). The
|
|
79
|
-
* subject cannot be the evicted root: the ledger's `recordDegradationOnce` /
|
|
80
|
-
* `incrementDegradationCount` dedupe keys are unbounded, so a per-root subject
|
|
81
|
-
* would grow one key per root a long-lived process ever cycles through — a
|
|
82
|
-
* container bounded on one axis and unbounded on another, which is the shape
|
|
83
|
-
* this whole fix is about. That argument bounds the SUBJECT; it is not an
|
|
84
|
-
* argument for throwing the tally away, and the number of roots this process
|
|
85
|
-
* has had to drop is exactly what an operator tunes the cap against. The
|
|
86
|
-
* ledger keeps one entry per kind/subject and emits durable rows only on
|
|
87
|
-
* power-of-two counts, so counting is as bounded here as latching.
|
|
88
|
-
*
|
|
89
|
-
* Returns the evicted roots so the caller can drop the per-root session
|
|
90
|
-
* bookkeeping that described them — `initLSPConfig` releases each one's
|
|
91
|
-
* `config_resolved` claim (review F1).
|
|
92
|
-
*/
|
|
93
|
-
function noteEvictedRoots(evicted) {
|
|
94
|
-
const roots = evicted.map(([root]) => root);
|
|
95
|
-
if (roots.length > 0) {
|
|
96
|
-
incrementDegradationCount({
|
|
97
|
-
kind: "lsp-session-root-evicted",
|
|
98
|
-
subject: `cap=${SESSION_ROOT_CAP}`,
|
|
99
|
-
reason: `session root registry at capacity; dropped ${roots[0]} and will load it again on the next session start or tool call naming that root`,
|
|
100
|
-
});
|
|
101
|
-
}
|
|
102
|
-
return roots;
|
|
103
|
-
}
|
|
104
|
-
/**
|
|
105
|
-
* Record a session cwd as served. Idempotent; re-registering refreshes nothing.
|
|
106
|
-
* Returns the roots this insertion dropped at the cap, oldest first.
|
|
107
|
-
*/
|
|
108
|
-
export function registerSessionRoot(cwd) {
|
|
109
|
-
const root = path.resolve(cwd);
|
|
110
|
-
// Present already: leave the entry alone. Writing the `undefined`
|
|
111
|
-
// placeholder over a loaded config would blank a served root's denial for
|
|
112
|
-
// the length of the re-initializing load — the #2518 window in miniature.
|
|
113
|
-
if (sessionRoots.has(root))
|
|
114
|
-
return [];
|
|
115
|
-
return noteEvictedRoots(sessionRoots.set(root, undefined));
|
|
116
|
-
}
|
|
117
|
-
/**
|
|
118
|
-
* Store the config `initLSPConfig` just loaded for a root it registered.
|
|
119
|
-
*
|
|
120
|
-
* Re-inserts the root when the cap dropped it while the load was in flight:
|
|
121
|
-
* the caller is a live session declaring this root right now, so the pair
|
|
122
|
-
* belongs in the registry — and it is a PAIR, which is what keeps the payload
|
|
123
|
-
* from outliving the registration or the registration from outliving the
|
|
124
|
-
* payload.
|
|
125
|
-
*
|
|
126
|
-
* Returns the roots this write dropped at the cap, oldest first.
|
|
127
|
-
*/
|
|
128
|
-
export function setSessionRootConfig(cwd, config) {
|
|
129
|
-
return noteEvictedRoots(sessionRoots.set(path.resolve(cwd), config));
|
|
130
|
-
}
|
|
131
|
-
/**
|
|
132
|
-
* Every served root that has a loaded config, in registration order —
|
|
133
|
-
* `getConfigForFile`'s (`config.ts`) longest-prefix walk. Entries still
|
|
134
|
-
* awaiting their first load are skipped; see the store's doc comment.
|
|
135
|
-
*/
|
|
136
|
-
export function sessionRootConfigEntries() {
|
|
137
|
-
return sessionRoots;
|
|
138
|
-
}
|
|
139
|
-
/** Return whether this exact root is still served after cap eviction. */
|
|
140
|
-
export function isSessionRootRegistered(cwd) {
|
|
141
|
-
return sessionRoots.has(path.resolve(cwd));
|
|
142
|
-
}
|
|
143
|
-
/**
|
|
144
|
-
* True when a readiness memo must run initialization for this root.
|
|
145
|
-
*
|
|
146
|
-
* The memo alone is never enough (#2052 R1, #2518): a readiness set caps
|
|
147
|
-
* itself, and `initLSPConfig` has callers (`clients/runtime-session.ts`,
|
|
148
|
-
* `clients/lens-engine.ts`) that no memo sees, so a memo hit can outlive the
|
|
149
|
-
* registration — and with it the config that carries the operator's denial.
|
|
150
|
-
* Every readiness memo asks this function, never its own `has` alone.
|
|
151
|
-
*/
|
|
152
|
-
export function shouldInitializeSessionRoot(cwd, readyRoots) {
|
|
153
|
-
const normalized = path.resolve(cwd);
|
|
154
|
-
return !readyRoots.has(normalized) || !isSessionRootRegistered(normalized);
|
|
155
|
-
}
|
|
156
|
-
/**
|
|
157
|
-
* Is `filePath` outside EVERY registered session root?
|
|
158
|
-
*
|
|
159
|
-
* Returns false (serve it) when the registry is empty — see the fail-open rule
|
|
160
|
-
* in this module's header. Containment uses `isSameOrWithin`, the same
|
|
161
|
-
* comparator the LSP root ceiling uses, which selects `path.win32` by path
|
|
162
|
-
* SHAPE rather than by `process.platform` (shape 2 / #1150).
|
|
163
|
-
*/
|
|
164
|
-
export function isOutsideAllSessionRoots(filePath) {
|
|
165
|
-
if (sessionRoots.size === 0)
|
|
166
|
-
return false;
|
|
167
|
-
const resolved = path.resolve(filePath);
|
|
168
|
-
for (const root of sessionRoots.keys()) {
|
|
169
|
-
if (isSameOrWithin(root, resolved))
|
|
170
|
-
return false;
|
|
171
|
-
}
|
|
172
|
-
return true;
|
|
173
|
-
}
|
|
174
|
-
/**
|
|
175
|
-
* The registered roots, for the decline telemetry record. Sorted with a
|
|
176
|
-
* code-unit comparator so the emitted string is deterministic across locales
|
|
177
|
-
* (#1883), and capped because the record is BOUNDED — a process with many
|
|
178
|
-
* roots must not emit an unbounded path list.
|
|
179
|
-
*/
|
|
180
|
-
export function getSessionRootsForTelemetry(limit = 4) {
|
|
181
|
-
return [...sessionRoots.keys()]
|
|
182
|
-
.sort((a, b) => Number(a > b) - Number(a < b))
|
|
183
|
-
.slice(0, limit);
|
|
184
|
-
}
|
|
185
|
-
/**
|
|
186
|
-
* Clear the registry — the roots AND the configs they carry, which are one
|
|
187
|
-
* store since #2518, so a reset cannot leave the two disagreeing about which
|
|
188
|
-
* roots exist. Called by `resetLSPConfigStateForTests`.
|
|
189
|
-
*/
|
|
190
|
-
export function resetSessionRootsForTests() {
|
|
191
|
-
sessionRoots.clear();
|
|
192
|
-
}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
/** Process-lifetime history of successful LSP spawn plus initialize durations. */
|
|
2
|
-
import { BoundedFifoMap } from "../bounded-cache.js";
|
|
3
|
-
const MAX_SERVER_HISTORIES = 64;
|
|
4
|
-
const successfulSpawnDurationMs = new BoundedFifoMap(MAX_SERVER_HISTORIES);
|
|
5
|
-
export function recordSuccessfulLspSpawn(serverId, durationMs) {
|
|
6
|
-
if (!Number.isFinite(durationMs) || durationMs < 0)
|
|
7
|
-
return;
|
|
8
|
-
successfulSpawnDurationMs.delete(serverId);
|
|
9
|
-
successfulSpawnDurationMs.set(serverId, durationMs);
|
|
10
|
-
}
|
|
11
|
-
export function getSuccessfulLspSpawnDurationMs(serverId) {
|
|
12
|
-
return successfulSpawnDurationMs.get(serverId);
|
|
13
|
-
}
|
|
14
|
-
/** Test-only: isolate process-lifetime history between cases. */
|
|
15
|
-
export function _clearSuccessfulLspSpawnHistoryForTests() {
|
|
16
|
-
successfulSpawnDurationMs.clear();
|
|
17
|
-
}
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* LSP `textDocument/didChange` sync-kind negotiation (#1669).
|
|
3
|
-
*
|
|
4
|
-
* A server advertises how it wants document changes described via
|
|
5
|
-
* `ServerCapabilities.textDocumentSync`, either as a bare
|
|
6
|
-
* `TextDocumentSyncKind` number (the legacy pre-3.0 shape) or as a
|
|
7
|
-
* `TextDocumentSyncOptions` object whose `change` field carries the kind.
|
|
8
|
-
* pi-lens always sent a single whole-document `{ text }` change event — valid
|
|
9
|
-
* for `Full` (1) and harmless for `None` (0, since the server ignores content
|
|
10
|
-
* changes entirely), but out of spec for `Incremental` (2): an
|
|
11
|
-
* Incremental-only server expects every change event to carry a `range`.
|
|
12
|
-
*
|
|
13
|
-
* This module is the pure negotiation core, mirroring `position-encoding.ts`'s
|
|
14
|
-
* shape: read the kind from the server's `initialize` reply, defaulting to
|
|
15
|
-
* `Full` when the server doesn't advertise one — the same shape pi-lens has
|
|
16
|
-
* always sent, so an unrecognized/absent value never regresses `Full`/`None`
|
|
17
|
-
* behavior.
|
|
18
|
-
*/
|
|
19
|
-
export const TEXT_DOCUMENT_SYNC_KIND_FULL = 1;
|
|
20
|
-
export const TEXT_DOCUMENT_SYNC_KIND_INCREMENTAL = 2;
|
|
21
|
-
function isSyncKind(value) {
|
|
22
|
-
return value === 0 || value === 1 || value === 2;
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* The `change` sync kind the server negotiated, read from its `initialize`
|
|
26
|
-
* reply. Defaults to `Full` (pi-lens's historical always-whole-document
|
|
27
|
-
* behavior) when the server omits `textDocumentSync` entirely, or advertises
|
|
28
|
-
* a shape/value this function doesn't recognize.
|
|
29
|
-
*/
|
|
30
|
-
export function negotiateSyncKind(serverCapabilities) {
|
|
31
|
-
const sync = serverCapabilities?.textDocumentSync;
|
|
32
|
-
// Legacy shape: the whole field IS the kind.
|
|
33
|
-
if (isSyncKind(sync))
|
|
34
|
-
return sync;
|
|
35
|
-
// 3.0+ shape: `TextDocumentSyncOptions.change`.
|
|
36
|
-
if (sync && typeof sync === "object") {
|
|
37
|
-
const change = sync.change;
|
|
38
|
-
if (isSyncKind(change))
|
|
39
|
-
return change;
|
|
40
|
-
}
|
|
41
|
-
return TEXT_DOCUMENT_SYNC_KIND_FULL;
|
|
42
|
-
}
|
|
43
|
-
export function negotiateSaveOptions(serverCapabilities) {
|
|
44
|
-
const sync = serverCapabilities?.textDocumentSync;
|
|
45
|
-
if (!sync || typeof sync !== "object")
|
|
46
|
-
return undefined;
|
|
47
|
-
const save = sync.save;
|
|
48
|
-
if (save === true)
|
|
49
|
-
return { includeText: false };
|
|
50
|
-
if (save && typeof save === "object") {
|
|
51
|
-
return {
|
|
52
|
-
includeText: save.includeText === true,
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
|
-
return undefined;
|
|
56
|
-
}
|
|
@@ -1,332 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* #611/#707: classic typescript-language-server tsserver sync diagnostic
|
|
3
|
-
* commands — shared between the `lsp_diagnostics` tool (where the escape hatch
|
|
4
|
-
* was first introduced in #611) and the per-edit `touchFile` dispatch path
|
|
5
|
-
* (wired in #707 to avoid burning the full wait budget on clean TS files).
|
|
6
|
-
*
|
|
7
|
-
* These are a genuine synchronous request/response tsserver protocol extension
|
|
8
|
-
* exposed via `workspace/executeCommand` with command
|
|
9
|
-
* `typescript.tsserverRequest`. Unlike the push-only LSP surface, calling them
|
|
10
|
-
* gives a definitive answer: empty array = confirmed clean, non-empty = real
|
|
11
|
-
* diagnostics the server had computed but never published on the push surface.
|
|
12
|
-
*
|
|
13
|
-
* Empirically verified live (2026-07, typescript-language-server 5.9.3, this
|
|
14
|
-
* repo's own tsconfig.json as the fixture project):
|
|
15
|
-
*
|
|
16
|
-
* workspace/executeCommand {
|
|
17
|
-
* command: "typescript.tsserverRequest",
|
|
18
|
-
* arguments: [
|
|
19
|
-
* "semanticDiagnosticsSync" | "syntacticDiagnosticsSync",
|
|
20
|
-
* { file: "<absolute path>", includeLinePosition: true }
|
|
21
|
-
* ]
|
|
22
|
-
* }
|
|
23
|
-
*
|
|
24
|
-
* resolves { executed: true, result: { seq, type: "response", command,
|
|
25
|
-
* request_seq, success, body: [...] } }, where each body entry is tsserver's
|
|
26
|
-
* NATIVE protocol diagnostic shape — `message`, `category`
|
|
27
|
-
* ("error"|"warning"|"suggestion"), `code`, `startLocation`/`endLocation` as
|
|
28
|
-
* `{ line, offset }` — NOT the LSP `Diagnostic` shape, and both `line`/`offset`
|
|
29
|
-
* are 1-based (LSP is 0-based).
|
|
30
|
-
*
|
|
31
|
-
* All helpers here are pure-function and never throw (every error path returns
|
|
32
|
-
* `undefined`). The caller must handle `undefined` as "sync path unavailable,
|
|
33
|
-
* fall back to existing unconfirmed/timed-out behavior".
|
|
34
|
-
*/
|
|
35
|
-
import { logLatency } from "../latency-logger.js";
|
|
36
|
-
import { normalizeMapKey } from "../path-utils.js";
|
|
37
|
-
// ---------------------------------------------------------------------------
|
|
38
|
-
// Constants
|
|
39
|
-
// ---------------------------------------------------------------------------
|
|
40
|
-
const TSSERVER_REQUEST_COMMAND = "typescript.tsserverRequest";
|
|
41
|
-
/**
|
|
42
|
-
* tsserver's synthetic inferred-project name, as its own source builds it:
|
|
43
|
-
* `"/dev/null/inferredProject" + counter + "*"`. `/dev/null` is a deliberate
|
|
44
|
-
* sentinel prefix — no real config file can live there — and matching the WHOLE
|
|
45
|
-
* string against it is the only safe test.
|
|
46
|
-
*
|
|
47
|
-
* #1645 review F4: an earlier version also matched an UNANCHORED
|
|
48
|
-
* `/inferred[-_ ]?project/i` anywhere in the string. That inverted the verdict
|
|
49
|
-
* for a real project in a directory a human happened to name that way —
|
|
50
|
-
* `/repo/inferred-project/tsconfig.json` classified as INFERRED, which demoted
|
|
51
|
-
* its genuine blocking errors. A classifier that gates authority must never key
|
|
52
|
-
* off user-controlled directory names.
|
|
53
|
-
*
|
|
54
|
-
* The optional drive-letter/backslash arm covers a host that normalizes the
|
|
55
|
-
* sentinel through win32 path handling before it reaches us; the `/dev/null`
|
|
56
|
-
* prefix is still required.
|
|
57
|
-
*/
|
|
58
|
-
const INFERRED_PROJECT_SENTINEL = /^(?:[A-Za-z]:)?[/\\]dev[/\\]null[/\\]inferredProject\d*\*?$/i;
|
|
59
|
-
/**
|
|
60
|
-
* Classify one tsserver `projectInfo` response body.
|
|
61
|
-
*
|
|
62
|
-
* `configFileName` is tsserver's own answer to "which project owns this file".
|
|
63
|
-
* A real project answers with a `tsconfig.json`/`jsconfig.json` path; a file
|
|
64
|
-
* that matches no project's `include`/`files` lands in tsserver's synthetic
|
|
65
|
-
* inferred project, whose `configFileName` is a `/dev/null/inferredProject1*`
|
|
66
|
-
* placeholder. The two are the same field, so the placeholder shape is the only
|
|
67
|
-
* thing that separates "checked against the project's real compiler options"
|
|
68
|
-
* from "checked against defaults nobody configured" (#1640).
|
|
69
|
-
*
|
|
70
|
-
* Exported so the diagnostic-demotion seam (`inferred-project.ts`) and the
|
|
71
|
-
* #1412 telemetry probe share ONE classifier — a second hand-rolled
|
|
72
|
-
* configFileName test would be a parallel source of truth for the same verdict.
|
|
73
|
-
*/
|
|
74
|
-
export function classifyProjectInfo(body) {
|
|
75
|
-
if (!body || typeof body !== "object") {
|
|
76
|
-
return { projectKind: "unassociated", association: "unassociated" };
|
|
77
|
-
}
|
|
78
|
-
const info = body;
|
|
79
|
-
const configFile = typeof info.configFileName === "string" && info.configFileName.length > 0
|
|
80
|
-
? info.configFileName
|
|
81
|
-
: undefined;
|
|
82
|
-
const inferred = configFile
|
|
83
|
-
? INFERRED_PROJECT_SENTINEL.test(configFile)
|
|
84
|
-
: false;
|
|
85
|
-
const projectKind = configFile
|
|
86
|
-
? inferred
|
|
87
|
-
? "inferred"
|
|
88
|
-
: /(?:^|[/\\])(?:tsconfig|jsconfig)\.json$/i.test(configFile)
|
|
89
|
-
? "configured"
|
|
90
|
-
: "unassociated"
|
|
91
|
-
: "unassociated";
|
|
92
|
-
return {
|
|
93
|
-
projectKind,
|
|
94
|
-
...(configFile ? { configFile } : {}),
|
|
95
|
-
association: info.languageServiceDisabled === true
|
|
96
|
-
? "language-service-disabled"
|
|
97
|
-
: projectKind === "unassociated"
|
|
98
|
-
? "unassociated"
|
|
99
|
-
: "associated",
|
|
100
|
-
};
|
|
101
|
-
}
|
|
102
|
-
/**
|
|
103
|
-
* #1412: after classic TypeScript's first successful didOpen, sample the
|
|
104
|
-
* tsserver project association without delaying diagnostics. The supplied
|
|
105
|
-
* executeCommand channel owns the existing bounded anti-deadlock backstop.
|
|
106
|
-
*/
|
|
107
|
-
export async function probeTsserverProjectIdentity(options) {
|
|
108
|
-
const normalizedFile = options.normalizedFile ?? normalizeMapKey(options.file);
|
|
109
|
-
const startedAt = Date.now();
|
|
110
|
-
// Logging starts only once a probe is actually eligible and attempted:
|
|
111
|
-
// ineligible servers (wrong serverId/launchVariant, no command channel) and
|
|
112
|
-
// already-probed dedupe are both routine, high-volume, and per-server — a
|
|
113
|
-
// bare return keeps them out of the telemetry stream entirely instead of
|
|
114
|
-
// writing an `lsp_typescript_project_identity` row per didOpen on every
|
|
115
|
-
// server (python, go, opengrep, ...).
|
|
116
|
-
const logOutcome = (outcome, metadata = {}) => logLatency({
|
|
117
|
-
type: "phase",
|
|
118
|
-
phase: "lsp_typescript_project_identity",
|
|
119
|
-
filePath: normalizedFile,
|
|
120
|
-
durationMs: Date.now() - startedAt,
|
|
121
|
-
metadata: {
|
|
122
|
-
serverId: options.serverId,
|
|
123
|
-
launchVariant: options.launchVariant,
|
|
124
|
-
clientRoot: options.clientRoot,
|
|
125
|
-
outcome,
|
|
126
|
-
...metadata,
|
|
127
|
-
},
|
|
128
|
-
});
|
|
129
|
-
if (options.serverId !== "typescript" ||
|
|
130
|
-
options.launchVariant !== "classic" ||
|
|
131
|
-
typeof options.commandChannel.executeCommand !== "function") {
|
|
132
|
-
return;
|
|
133
|
-
}
|
|
134
|
-
if (options.probedFiles.has(normalizedFile))
|
|
135
|
-
return;
|
|
136
|
-
// Claim before yielding so concurrent opens cannot issue duplicate probes.
|
|
137
|
-
options.probedFiles.add(normalizedFile);
|
|
138
|
-
try {
|
|
139
|
-
const outcome = await options.commandChannel.executeCommand(TSSERVER_REQUEST_COMMAND, ["projectInfo", { file: options.file, needFileNameList: false }]);
|
|
140
|
-
if (!outcome.executed) {
|
|
141
|
-
logOutcome("not-executed");
|
|
142
|
-
return;
|
|
143
|
-
}
|
|
144
|
-
const response = outcome.result;
|
|
145
|
-
if (!response) {
|
|
146
|
-
logOutcome("no-response");
|
|
147
|
-
return;
|
|
148
|
-
}
|
|
149
|
-
if (response.success !== true) {
|
|
150
|
-
logOutcome("unsuccessful");
|
|
151
|
-
return;
|
|
152
|
-
}
|
|
153
|
-
const identity = classifyProjectInfo(response.body);
|
|
154
|
-
logLatency({
|
|
155
|
-
type: "phase",
|
|
156
|
-
phase: "lsp_typescript_project_identity",
|
|
157
|
-
filePath: normalizedFile,
|
|
158
|
-
durationMs: Date.now() - startedAt,
|
|
159
|
-
metadata: {
|
|
160
|
-
outcome: "ok",
|
|
161
|
-
serverId: options.serverId,
|
|
162
|
-
launchVariant: options.launchVariant,
|
|
163
|
-
clientRoot: options.clientRoot,
|
|
164
|
-
projectKind: identity.projectKind,
|
|
165
|
-
configFile: identity.configFile,
|
|
166
|
-
association: identity.association,
|
|
167
|
-
},
|
|
168
|
-
});
|
|
169
|
-
}
|
|
170
|
-
catch {
|
|
171
|
-
logOutcome("threw");
|
|
172
|
-
// Best-effort telemetry: command errors/timeouts never reach diagnostics.
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
/**
|
|
176
|
-
* #1640: ask tsserver which project owns `file`, on demand, through the same
|
|
177
|
-
* `typescript.tsserverRequest` escape hatch the sync-diagnostics helpers use.
|
|
178
|
-
*
|
|
179
|
-
* Unlike {@link probeTsserverProjectIdentity} — fire-and-forget telemetry
|
|
180
|
-
* sampled once per didOpen — this is a request/response call a caller awaits
|
|
181
|
-
* because it needs the answer to decide how to RENDER a diagnostic.
|
|
182
|
-
*
|
|
183
|
-
* Routed through `executeReadOnlyCommandOnLiveClient` ONLY, never
|
|
184
|
-
* `executeCommand` (#1645 review F1/F2). The mutation channel would open the
|
|
185
|
-
* `workspace/applyEdit` acceptance window, clobber a concurrent command's
|
|
186
|
-
* `activeMutationContext`, carry the 30s mutation backstop instead of the short
|
|
187
|
-
* probe one, and spawn a language-server fleet to answer. All four are wrong for
|
|
188
|
-
* a passive render-path question. A service without the read-only channel is
|
|
189
|
-
* UNKNOWN, not a reason to fall back.
|
|
190
|
-
*
|
|
191
|
-
* Returns `undefined` for every "we do not know" path: no read-only channel, no
|
|
192
|
-
* live server for the file, the command is not advertised (non-classic server,
|
|
193
|
-
* older typescript-language-server), the command was not executed, the response
|
|
194
|
-
* envelope is not `{success:true}`, or the call threw/timed out. `undefined`
|
|
195
|
-
* must never be treated as "inferred" — an unanswered probe is not a verdict
|
|
196
|
-
* (AGENTS.md shape 10: an empty result must distinguish clean from unavailable).
|
|
197
|
-
*/
|
|
198
|
-
export async function fetchTsserverProjectIdentity(svc, file) {
|
|
199
|
-
try {
|
|
200
|
-
if (typeof svc.executeReadOnlyCommandOnLiveClient !== "function") {
|
|
201
|
-
return undefined;
|
|
202
|
-
}
|
|
203
|
-
// No `getAdvertisedCommands` pre-flight: that helper routes through
|
|
204
|
-
// `getClientForFile`, which SPAWNS. The read-only channel already enforces
|
|
205
|
-
// allowlist-by-advertisement server-side and answers `executed:false` for
|
|
206
|
-
// a server that never advertised the command.
|
|
207
|
-
const outcome = await svc.executeReadOnlyCommandOnLiveClient(file, TSSERVER_REQUEST_COMMAND, ["projectInfo", { file, needFileNameList: false }]);
|
|
208
|
-
if (!outcome.executed)
|
|
209
|
-
return undefined;
|
|
210
|
-
const response = outcome.result;
|
|
211
|
-
if (!response || response.success !== true)
|
|
212
|
-
return undefined;
|
|
213
|
-
return classifyProjectInfo(response.body);
|
|
214
|
-
}
|
|
215
|
-
catch {
|
|
216
|
-
return undefined;
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
// ---------------------------------------------------------------------------
|
|
220
|
-
// Helpers
|
|
221
|
-
// ---------------------------------------------------------------------------
|
|
222
|
-
function isTsserverSyncRawDiagnostic(value) {
|
|
223
|
-
if (!value || typeof value !== "object")
|
|
224
|
-
return false;
|
|
225
|
-
const v = value;
|
|
226
|
-
return typeof v.message === "string" && typeof v.category === "string";
|
|
227
|
-
}
|
|
228
|
-
function tsserverSeverityFromCategory(category) {
|
|
229
|
-
switch (category) {
|
|
230
|
-
case "error":
|
|
231
|
-
return 1;
|
|
232
|
-
case "warning":
|
|
233
|
-
return 2;
|
|
234
|
-
case "suggestion":
|
|
235
|
-
return 4; // Hint
|
|
236
|
-
default:
|
|
237
|
-
return 3; // "message" or unrecognized -> Info
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
/**
|
|
241
|
-
* Convert a tsserver-protocol sync diagnostic into pi-lens's LSP-shaped
|
|
242
|
-
* `LSPDiagnostic`. Both `line`/`offset` are 1-based in tsserver's protocol
|
|
243
|
-
* and 0-based in LSP — this conversion handles that.
|
|
244
|
-
*/
|
|
245
|
-
function tsserverSyncDiagnosticToLsp(d) {
|
|
246
|
-
const startLine = Math.max(0, (d.startLocation?.line ?? 1) - 1);
|
|
247
|
-
const startChar = Math.max(0, (d.startLocation?.offset ?? 1) - 1);
|
|
248
|
-
const endLine = Math.max(0, (d.endLocation?.line ?? d.startLocation?.line ?? 1) - 1);
|
|
249
|
-
const endChar = Math.max(0, (d.endLocation?.offset ?? d.startLocation?.offset ?? 1) - 1);
|
|
250
|
-
return {
|
|
251
|
-
severity: tsserverSeverityFromCategory(d.category),
|
|
252
|
-
message: d.message,
|
|
253
|
-
range: {
|
|
254
|
-
start: { line: startLine, character: startChar },
|
|
255
|
-
end: { line: endLine, character: endChar },
|
|
256
|
-
},
|
|
257
|
-
code: d.code,
|
|
258
|
-
source: "typescript",
|
|
259
|
-
};
|
|
260
|
-
}
|
|
261
|
-
/**
|
|
262
|
-
* Run a single tsserver sync diagnostic command via the LSP service's
|
|
263
|
-
* `executeCommand`. Returns the raw diagnostic array from the response body,
|
|
264
|
-
* or `undefined` if: the service has no `executeCommand`, the command wasn't
|
|
265
|
-
* executed, the response envelope isn't `{success:true, body:[...]}`, or
|
|
266
|
-
* any error is thrown.
|
|
267
|
-
*/
|
|
268
|
-
async function runTsserverSyncCommand(svc, file, command) {
|
|
269
|
-
if (typeof svc.executeCommand !== "function")
|
|
270
|
-
return undefined;
|
|
271
|
-
const outcome = await svc.executeCommand(file, TSSERVER_REQUEST_COMMAND, [
|
|
272
|
-
command,
|
|
273
|
-
{ file, includeLinePosition: true },
|
|
274
|
-
]);
|
|
275
|
-
if (!outcome.executed)
|
|
276
|
-
return undefined;
|
|
277
|
-
const result = outcome.result;
|
|
278
|
-
if (!result || result.success !== true || !Array.isArray(result.body)) {
|
|
279
|
-
return undefined;
|
|
280
|
-
}
|
|
281
|
-
return result.body.filter(isTsserverSyncRawDiagnostic);
|
|
282
|
-
}
|
|
283
|
-
/**
|
|
284
|
-
* #611/#707: attempt classic typescript-language-server's
|
|
285
|
-
* `typescript.tsserverRequest` escape hatch — a genuine synchronous
|
|
286
|
-
* request/response tsserver command, not push/timing-dependent — to get a
|
|
287
|
-
* definitive answer for a Tier-3 silent server's empty push-based result.
|
|
288
|
-
* Runs BOTH `semanticDiagnosticsSync` and `syntacticDiagnosticsSync`
|
|
289
|
-
* (mirroring what the server itself publishes on a dirty file) so a
|
|
290
|
-
* syntax-only error isn't missed.
|
|
291
|
-
*
|
|
292
|
-
* Returns `undefined` (never throws, never hangs beyond the existing
|
|
293
|
-
* `executeCommand` anti-deadlock backstop) when: the command isn't advertised
|
|
294
|
-
* by this server (older/different server/config), `executeCommand` throws
|
|
295
|
-
* (live-verified case: tsserver rejects with a `ResponseError` — "No
|
|
296
|
-
* Project." — for a file outside any tsconfig project) or times out, or the
|
|
297
|
-
* response shape isn't the expected `{success:true, body:[...]}` envelope.
|
|
298
|
-
* Every one of these must fall through to the existing "unconfirmed" behavior
|
|
299
|
-
* in the caller.
|
|
300
|
-
*
|
|
301
|
-
* `confirmed: true` with an empty `diagnostics` array = genuinely confirmed
|
|
302
|
-
* clean. `confirmed: true` with a non-empty array = real diagnostics the
|
|
303
|
-
* server had computed but never published (silentOnClean) — these must be
|
|
304
|
-
* surfaced to the caller, not discarded. `confirmed: false` = sync path
|
|
305
|
-
* unavailable, fall through to existing behavior.
|
|
306
|
-
*
|
|
307
|
-
* #2598: `getAdvertisedCommands` is REQUIRED here rather than probed for. The
|
|
308
|
-
* real `LSPService` defines it unconditionally (clients/lsp/index.ts), and both
|
|
309
|
-
* production callers hand this function that service, so the former
|
|
310
|
-
* `typeof … !== "function"` bail was reachable only from a partial test double
|
|
311
|
-
* (AGENTS.md shape 7). It was also unobservable even there: an absent method
|
|
312
|
-
* throws a `TypeError` that this function's own catch turns into the same
|
|
313
|
-
* `undefined` the bail returned. `executeCommand` stays optional on
|
|
314
|
-
* {@link TsserverSyncCapableService} — see {@link runTsserverSyncCommand}.
|
|
315
|
-
*/
|
|
316
|
-
export async function attemptTsserverSyncDiagnostics(file, svc) {
|
|
317
|
-
try {
|
|
318
|
-
const advertised = await svc.getAdvertisedCommands(file);
|
|
319
|
-
if (!advertised.includes(TSSERVER_REQUEST_COMMAND))
|
|
320
|
-
return undefined;
|
|
321
|
-
const [semantic, syntactic] = await Promise.all([
|
|
322
|
-
runTsserverSyncCommand(svc, file, "semanticDiagnosticsSync"),
|
|
323
|
-
runTsserverSyncCommand(svc, file, "syntacticDiagnosticsSync"),
|
|
324
|
-
]);
|
|
325
|
-
if (semantic === undefined || syntactic === undefined)
|
|
326
|
-
return undefined;
|
|
327
|
-
return [...syntactic, ...semantic].map(tsserverSyncDiagnosticToLsp);
|
|
328
|
-
}
|
|
329
|
-
catch {
|
|
330
|
-
return undefined;
|
|
331
|
-
}
|
|
332
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|