@herbertgao/pi-extensions 2026.10.1 → 2026.10.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -9
- package/THIRD_PARTY_NOTICES.md +2 -2
- package/node_modules/@dietrichgebert/ponytail/.opencode/command/ponytail-audit.md +2 -2
- package/node_modules/@dietrichgebert/ponytail/.opencode/command/ponytail-debt.md +2 -2
- package/node_modules/@dietrichgebert/ponytail/.opencode/command/ponytail-gain.md +1 -1
- package/node_modules/@dietrichgebert/ponytail/.opencode/command/ponytail-help.md +1 -1
- package/node_modules/@dietrichgebert/ponytail/.opencode/command/ponytail-review.md +2 -2
- package/node_modules/@dietrichgebert/ponytail/.opencode/command/ponytail.md +1 -1
- package/node_modules/@dietrichgebert/ponytail/.qoder/rules/ponytail.md +21 -21
- package/node_modules/@dietrichgebert/ponytail/.qoder-plugin/plugin.json +1 -1
- package/node_modules/@dietrichgebert/ponytail/AGENTS.md +21 -21
- package/node_modules/@dietrichgebert/ponytail/README.md +68 -72
- package/node_modules/@dietrichgebert/ponytail/hooks/ponytail-activate.js +7 -0
- package/node_modules/@dietrichgebert/ponytail/hooks/ponytail-instructions.js +30 -30
- package/node_modules/@dietrichgebert/ponytail/hooks/ponytail-map.js +103 -0
- package/node_modules/@dietrichgebert/ponytail/package.json +2 -2
- package/node_modules/@dietrichgebert/ponytail/skills/ponytail/SKILL.md +33 -101
- package/node_modules/@dietrichgebert/ponytail/skills/ponytail-audit/SKILL.md +89 -32
- package/node_modules/@dietrichgebert/ponytail/skills/ponytail-debt/SKILL.md +13 -12
- package/node_modules/@dietrichgebert/ponytail/skills/ponytail-gain/SKILL.md +17 -16
- package/node_modules/@dietrichgebert/ponytail/skills/ponytail-help/SKILL.md +9 -10
- package/node_modules/@dietrichgebert/ponytail/skills/ponytail-review/SKILL.md +96 -57
- package/node_modules/@herbertgao/pi-agency/LICENSE +21 -0
- package/node_modules/@herbertgao/pi-agency/README.md +40 -0
- package/node_modules/@herbertgao/pi-agency/package.json +53 -0
- package/node_modules/@herbertgao/pi-agency/src/index.ts +441 -0
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/feature/compact-thinking.ts +12 -12
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/compact-mode.ts +30 -6
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/default-mode.ts +15 -9
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/mouse/interaction.ts +27 -9
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/codemode.ts +4 -1
- package/node_modules/@herbertgao/pi-cc-extensions/package.json +2 -2
- package/node_modules/@narumitw/pi-caffeinate/package.json +3 -3
- package/node_modules/@tifan/pi-mermaid-open/package.json +5 -1
- package/node_modules/@tifan/pi-mermaid-open/src/index.ts +26 -9
- package/node_modules/@tifan/pi-recap/package.json +1 -1
- package/node_modules/@tifan/pi-recap/src/index.ts +104 -20
- package/node_modules/@tifan/pi-recap/src/models.ts +46 -4
- package/node_modules/pi-antigravity/README.md +23 -2
- package/node_modules/pi-antigravity/package.json +5 -3
- package/node_modules/pi-antigravity/src/diagnostics/diagnostics.ts +3 -2
- package/node_modules/pi-antigravity/src/features/generate-image.ts +72 -0
- package/node_modules/pi-antigravity/src/features/google-search.ts +71 -0
- package/node_modules/pi-antigravity/src/image/image.ts +86 -47
- package/node_modules/pi-antigravity/src/image/native.ts +69 -0
- package/node_modules/pi-antigravity/src/index.ts +52 -137
- package/node_modules/pi-antigravity/src/search/search.ts +130 -31
- package/node_modules/pi-antigravity/src/stream/stream.ts +162 -113
- package/node_modules/pi-antigravity/src/types/enums.ts +1 -0
- package/node_modules/pi-antigravity/src/types/types.ts +1 -1
- package/node_modules/pi-antigravity/src/utils/security.ts +47 -1
- package/node_modules/pi-antigravity/src/utils/util.ts +38 -6
- package/node_modules/pi-lens/CHANGELOG.md +1064 -0
- package/node_modules/pi-lens/README.md +115 -25
- package/node_modules/pi-lens/config/dependency-cruiser-eager-allowlist.json +6 -2
- package/node_modules/pi-lens/dist/chunk-22AVIGXS.js +560 -0
- package/node_modules/pi-lens/dist/chunk-27BBHSZC.js +106 -0
- package/node_modules/pi-lens/dist/chunk-2BEMIWEW.js +51 -0
- package/node_modules/pi-lens/dist/chunk-2EECBNC5.js +89 -0
- package/node_modules/pi-lens/dist/chunk-34U7PLGE.js +23 -0
- package/node_modules/pi-lens/dist/chunk-3I5QFT3N.js +181 -0
- package/node_modules/pi-lens/dist/chunk-3MED75HT.js +37 -0
- package/node_modules/pi-lens/dist/chunk-47D2BO4S.js +87 -0
- package/node_modules/pi-lens/dist/chunk-4RERDEXR.js +348 -0
- package/node_modules/pi-lens/dist/chunk-4W2PLC4J.js +27 -0
- package/node_modules/pi-lens/dist/chunk-52H5B5TC.js +202 -0
- package/node_modules/pi-lens/dist/chunk-54B42YRX.js +27 -0
- package/node_modules/pi-lens/dist/chunk-5RXBNSW2.js +266 -0
- package/node_modules/pi-lens/dist/chunk-5THXD6X5.js +201 -0
- package/node_modules/pi-lens/dist/chunk-5W3R6LFT.js +24 -0
- package/node_modules/pi-lens/dist/chunk-5ZEJHV35.js +341 -0
- package/node_modules/pi-lens/dist/chunk-6P62QVEA.js +118 -0
- package/node_modules/pi-lens/dist/chunk-6QIUX4EP.js +459 -0
- package/node_modules/pi-lens/dist/chunk-6VCD4VKZ.js +78 -0
- package/node_modules/pi-lens/dist/chunk-7F72PXY2.js +326 -0
- package/node_modules/pi-lens/dist/chunk-7FBF7NPR.js +998 -0
- package/node_modules/pi-lens/dist/chunk-7U2IDNXN.js +37 -0
- package/node_modules/pi-lens/dist/chunk-ABBOA7UD.js +157 -0
- package/node_modules/pi-lens/dist/chunk-AHDW3GPE.js +50 -0
- package/node_modules/pi-lens/dist/chunk-AJ3QXTRQ.js +756 -0
- package/node_modules/pi-lens/dist/chunk-AJVLWNFN.js +1610 -0
- package/node_modules/pi-lens/dist/chunk-AJXODZY6.js +112 -0
- package/node_modules/pi-lens/dist/chunk-ARFCXG7S.js +84 -0
- package/node_modules/pi-lens/dist/chunk-AS44CFQ4.js +708 -0
- package/node_modules/pi-lens/dist/chunk-AWE5TMPO.js +38 -0
- package/node_modules/pi-lens/dist/chunk-B3I2UUT4.js +4692 -0
- package/node_modules/pi-lens/dist/chunk-BRJKOBZP.js +331 -0
- package/node_modules/pi-lens/dist/chunk-BW5KFIQC.js +59 -0
- package/node_modules/pi-lens/dist/chunk-C2AUYXQH.js +149 -0
- package/node_modules/pi-lens/dist/chunk-CGGAIP7J.js +29 -0
- package/node_modules/pi-lens/dist/chunk-D6QS3U6M.js +30 -0
- package/node_modules/pi-lens/dist/chunk-DFVMIKMQ.js +349 -0
- package/node_modules/pi-lens/dist/chunk-DIULIWKU.js +169 -0
- package/node_modules/pi-lens/dist/chunk-DQ2NZ7C4.js +2317 -0
- package/node_modules/pi-lens/dist/chunk-E2WFBRHM.js +213 -0
- package/node_modules/pi-lens/dist/chunk-E4MAEDPM.js +50 -0
- package/node_modules/pi-lens/dist/chunk-EOKRQ3SA.js +30 -0
- package/node_modules/pi-lens/dist/chunk-F3AU2TMM.js +2626 -0
- package/node_modules/pi-lens/dist/chunk-F3P7VQ7H.js +170 -0
- package/node_modules/pi-lens/dist/chunk-FC4RP4I2.js +12 -0
- package/node_modules/pi-lens/dist/chunk-FJNKANOS.js +32 -0
- package/node_modules/pi-lens/dist/chunk-GUOGVTCQ.js +146 -0
- package/node_modules/pi-lens/dist/chunk-GVXA6CCE.js +18 -0
- package/node_modules/pi-lens/dist/chunk-HHYAELLJ.js +2334 -0
- package/node_modules/pi-lens/dist/chunk-HMFXILPV.js +83 -0
- package/node_modules/pi-lens/dist/chunk-HVUZXSWK.js +421 -0
- package/node_modules/pi-lens/dist/chunk-HWBZIGMJ.js +62 -0
- package/node_modules/pi-lens/dist/chunk-I3R7GKDR.js +17 -0
- package/node_modules/pi-lens/dist/chunk-I7SPGOWI.js +55 -0
- package/node_modules/pi-lens/dist/chunk-IIXOAGHR.js +38 -0
- package/node_modules/pi-lens/dist/chunk-IVP5KAB7.js +2250 -0
- package/node_modules/pi-lens/dist/chunk-IXEBJSUE.js +22 -0
- package/node_modules/pi-lens/dist/chunk-JOLITGCC.js +27 -0
- package/node_modules/pi-lens/dist/chunk-K6VYLB2U.js +145 -0
- package/node_modules/pi-lens/dist/chunk-LJDODBBZ.js +78 -0
- package/node_modules/pi-lens/dist/chunk-LNAKEO63.js +78 -0
- package/node_modules/pi-lens/dist/chunk-LSMJ6KBE.js +4139 -0
- package/node_modules/pi-lens/dist/chunk-LW6XKDZQ.js +5565 -0
- package/node_modules/pi-lens/dist/chunk-N3YQJI6O.js +899 -0
- package/node_modules/pi-lens/dist/chunk-NABLC7W3.js +148 -0
- package/node_modules/pi-lens/dist/chunk-NKOUFPQF.js +659 -0
- package/node_modules/pi-lens/dist/chunk-NL5GLMFI.js +211 -0
- package/node_modules/pi-lens/dist/chunk-NMABWBZN.js +327 -0
- package/node_modules/pi-lens/dist/chunk-NTHH2J74.js +27 -0
- package/node_modules/pi-lens/dist/chunk-NTUJEGDZ.js +59 -0
- package/node_modules/pi-lens/dist/chunk-NXL4FFQQ.js +47 -0
- package/node_modules/pi-lens/dist/chunk-NXPS2L6U.js +466 -0
- package/node_modules/pi-lens/dist/chunk-O5WILGMI.js +42 -0
- package/node_modules/pi-lens/dist/chunk-O6TQT6RI.js +48 -0
- package/node_modules/pi-lens/dist/chunk-OAXNDZJ7.js +323 -0
- package/node_modules/pi-lens/dist/chunk-ODEEOXPH.js +44 -0
- package/node_modules/pi-lens/dist/chunk-OQGFCZJ4.js +4533 -0
- package/node_modules/pi-lens/dist/chunk-ORTMY4Q4.js +282 -0
- package/node_modules/pi-lens/dist/chunk-OS32RNR2.js +442 -0
- package/node_modules/pi-lens/dist/chunk-PAK6IDME.js +189 -0
- package/node_modules/pi-lens/dist/chunk-PWFHBTSF.js +406 -0
- package/node_modules/pi-lens/dist/chunk-Q5U6FMDI.js +2352 -0
- package/node_modules/pi-lens/dist/chunk-QOZXJ4NA.js +3364 -0
- package/node_modules/pi-lens/dist/chunk-QYF5S6P6.js +45 -0
- package/node_modules/pi-lens/dist/chunk-RIISMHKN.js +36 -0
- package/node_modules/pi-lens/dist/chunk-RPD4ZSB7.js +25 -0
- package/node_modules/pi-lens/dist/chunk-RPD5K5NC.js +79 -0
- package/node_modules/pi-lens/dist/chunk-RUOG5D2C.js +262 -0
- package/node_modules/pi-lens/dist/chunk-T4ERT73Y.js +599 -0
- package/node_modules/pi-lens/dist/chunk-T6D4Q4AQ.js +54 -0
- package/node_modules/pi-lens/dist/chunk-TGPXLY2J.js +391 -0
- package/node_modules/pi-lens/dist/chunk-TLGFBM3F.js +12116 -0
- package/node_modules/pi-lens/dist/chunk-TO6WL3GM.js +88 -0
- package/node_modules/pi-lens/dist/chunk-TT22N74J.js +517 -0
- package/node_modules/pi-lens/dist/chunk-TVN5N6GY.js +21216 -0
- package/node_modules/pi-lens/dist/chunk-U3VGR4VU.js +308 -0
- package/node_modules/pi-lens/dist/chunk-UK3CMEAL.js +1250 -0
- package/node_modules/pi-lens/dist/chunk-UOPVJQ4N.js +103 -0
- package/node_modules/pi-lens/dist/chunk-UXVNL3D7.js +23 -0
- package/node_modules/pi-lens/dist/chunk-UY752QSN.js +45 -0
- package/node_modules/pi-lens/dist/chunk-V5PXFSZK.js +188 -0
- package/node_modules/pi-lens/dist/chunk-V7R425XG.js +398 -0
- package/node_modules/pi-lens/dist/chunk-VCSRSYLF.js +81 -0
- package/node_modules/pi-lens/dist/chunk-VD4JQCQC.js +162 -0
- package/node_modules/pi-lens/dist/chunk-VDBPVIKD.js +62 -0
- package/node_modules/pi-lens/dist/chunk-VHQLPIRJ.js +114 -0
- package/node_modules/pi-lens/dist/chunk-VN2AXLEX.js +5414 -0
- package/node_modules/pi-lens/dist/chunk-VNMT7C64.js +478 -0
- package/node_modules/pi-lens/dist/chunk-WONERJTP.js +309 -0
- package/node_modules/pi-lens/dist/chunk-XECLWQZN.js +85 -0
- package/node_modules/pi-lens/dist/chunk-XIMYZ3JA.js +27 -0
- package/node_modules/pi-lens/dist/chunk-XK4CIILI.js +144 -0
- package/node_modules/pi-lens/dist/chunk-Y4T27COV.js +562 -0
- package/node_modules/pi-lens/dist/chunk-YGVYKNSN.js +1860 -0
- package/node_modules/pi-lens/dist/chunk-YLF3PPT5.js +308 -0
- package/node_modules/pi-lens/dist/chunk-YSNFMJKN.js +14 -0
- package/node_modules/pi-lens/dist/chunk-Z3CCVDUB.js +76 -0
- package/node_modules/pi-lens/dist/chunk-Z54ZSOBZ.js +61 -0
- package/node_modules/pi-lens/dist/chunk-ZAWW3AF6.js +97 -0
- package/node_modules/pi-lens/dist/chunk-ZMOL6RQC.js +167 -0
- package/node_modules/pi-lens/dist/index.js +16456 -8335
- package/node_modules/pi-lens/dist/mcp/analyze-cli.js +186 -232
- package/node_modules/pi-lens/dist/mcp/cli.js +137 -98
- package/node_modules/pi-lens/dist/mcp/server.js +22589 -1573
- package/node_modules/pi-lens/dist/mcp/worker.js +97 -38
- package/node_modules/pi-lens/dist/probes/installer.js +135 -0
- package/node_modules/pi-lens/dist/workers/project-snapshot-persist-worker.js +22 -0
- package/node_modules/pi-lens/dist/workers/review-graph-persist-worker.js +15 -0
- package/node_modules/pi-lens/docs/agent-guide.md +13 -4
- package/node_modules/pi-lens/docs/agent-tools.md +42 -0
- package/node_modules/pi-lens/docs/ast-grep_rules_catalog.md +3 -2
- package/node_modules/pi-lens/docs/configuration.md +20 -1
- package/node_modules/pi-lens/docs/environment-variables.md +52 -2
- package/node_modules/pi-lens/docs/features.md +8 -4
- package/node_modules/pi-lens/docs/globalconfig.md +1 -0
- package/node_modules/pi-lens/docs/io-bridge-v2-migration.md +94 -0
- package/node_modules/pi-lens/docs/lsp-capability-matrix.md +36 -4
- package/node_modules/pi-lens/docs/lsp-idle-eviction.md +124 -0
- package/node_modules/pi-lens/docs/mcp.md +21 -5
- package/node_modules/pi-lens/docs/merge-queue-rollout.md +77 -0
- package/node_modules/pi-lens/docs/pi-lens-fixer.md +156 -88
- package/node_modules/pi-lens/docs/pi-lens-investigator.md +74 -26
- package/node_modules/pi-lens/docs/pi-lens-merge-policy.md +694 -0
- package/node_modules/pi-lens/docs/pi-lens-monitor.md +73 -7
- package/node_modules/pi-lens/docs/pi-lens-retro.md +6 -4
- package/node_modules/pi-lens/docs/pi-lens-reviewer.md +188 -48
- package/node_modules/pi-lens/docs/pi-lens-subagent.md +246 -45
- package/node_modules/pi-lens/docs/pi-lens-warden.md +18 -7
- package/node_modules/pi-lens/docs/public-api-stability.md +55 -0
- package/node_modules/pi-lens/docs/release-qa-baseline.md +84 -17
- package/node_modules/pi-lens/docs/rfcs/3654-unified-io-bridge-v2.md +316 -0
- package/node_modules/pi-lens/docs/servercapabilities.md +53 -49
- package/node_modules/pi-lens/docs/settings.md +1 -0
- package/node_modules/pi-lens/docs/usage.md +5 -1
- package/node_modules/pi-lens/grammars/tree-sitter-bash.wasm +0 -0
- package/node_modules/pi-lens/grammars/tree-sitter-bash.wasm.json +3 -3
- package/node_modules/pi-lens/package.json +18 -6
- package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/advisory-registry-subset-test.yml +41 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/advisory-registry-subset.yml +50 -0
- package/node_modules/pi-lens/scripts/analyze-pi-lens-logs.mjs +1275 -62
- package/node_modules/pi-lens/scripts/download-grammars.js +5 -0
- package/node_modules/pi-lens/scripts/grammars.lock.json +6 -1
- package/node_modules/pi-lens/scripts/install-selftest.mjs +33 -34
- package/node_modules/pi-lens/scripts/lib/host-provided-deps.mjs +13 -4
- package/node_modules/pi-lens/scripts/lib/web-tree-sitter-dir.mjs +18 -0
- package/package.json +15 -10
- package/node_modules/@dietrichgebert/ponytail/README.es.md +0 -212
- package/node_modules/@dietrichgebert/ponytail/README.ja.md +0 -212
- package/node_modules/@dietrichgebert/ponytail/README.ko.md +0 -212
- package/node_modules/@dietrichgebert/ponytail/README.zh-CN.md +0 -212
- package/node_modules/pi-lens/dist/clients/actionable-warnings-logger.js +0 -35
- package/node_modules/pi-lens/dist/clients/actionable-warnings.js +0 -1610
- package/node_modules/pi-lens/dist/clients/advisory-provenance.js +0 -593
- package/node_modules/pi-lens/dist/clients/agent-behavior-client.js +0 -147
- package/node_modules/pi-lens/dist/clients/agent-nudge.js +0 -325
- package/node_modules/pi-lens/dist/clients/analysed-root.js +0 -1
- package/node_modules/pi-lens/dist/clients/ast-grep-client.js +0 -731
- package/node_modules/pi-lens/dist/clients/ast-grep-rule-manager.js +0 -146
- package/node_modules/pi-lens/dist/clients/ast-grep-tool-logger.js +0 -118
- package/node_modules/pi-lens/dist/clients/ast-grep-types.js +0 -10
- package/node_modules/pi-lens/dist/clients/ast-grep-yaml-synth.js +0 -154
- package/node_modules/pi-lens/dist/clients/atomic-write-staging.js +0 -75
- package/node_modules/pi-lens/dist/clients/atomic-write.js +0 -189
- package/node_modules/pi-lens/dist/clients/availability-probe-flight.js +0 -12
- package/node_modules/pi-lens/dist/clients/bash-file-access.js +0 -1056
- package/node_modules/pi-lens/dist/clients/biome-client.js +0 -357
- package/node_modules/pi-lens/dist/clients/blocker-freshness.js +0 -837
- package/node_modules/pi-lens/dist/clients/blocker-past-eof.js +0 -129
- package/node_modules/pi-lens/dist/clients/bootstrap.js +0 -569
- package/node_modules/pi-lens/dist/clients/bounded-cache.js +0 -190
- package/node_modules/pi-lens/dist/clients/bounded-pid-file-lock.js +0 -202
- package/node_modules/pi-lens/dist/clients/bounded-telemetry.js +0 -295
- package/node_modules/pi-lens/dist/clients/build-identity.js +0 -95
- package/node_modules/pi-lens/dist/clients/bundled-resource-health.js +0 -113
- package/node_modules/pi-lens/dist/clients/bus-events-logger.js +0 -105
- package/node_modules/pi-lens/dist/clients/bus-publish.js +0 -171
- package/node_modules/pi-lens/dist/clients/cache/rule-cache.js +0 -190
- package/node_modules/pi-lens/dist/clients/cache-manager.js +0 -524
- package/node_modules/pi-lens/dist/clients/cache-observability.js +0 -1313
- package/node_modules/pi-lens/dist/clients/call-graph.js +0 -852
- package/node_modules/pi-lens/dist/clients/cargo-manifest.js +0 -422
- package/node_modules/pi-lens/dist/clients/cascade-budget.js +0 -196
- package/node_modules/pi-lens/dist/clients/cascade-format.js +0 -315
- package/node_modules/pi-lens/dist/clients/cascade-logger.js +0 -31
- package/node_modules/pi-lens/dist/clients/cascade-types.js +0 -9
- package/node_modules/pi-lens/dist/clients/child-unref.js +0 -124
- package/node_modules/pi-lens/dist/clients/code-quality-warnings.js +0 -286
- package/node_modules/pi-lens/dist/clients/codebase-model.js +0 -173
- package/node_modules/pi-lens/dist/clients/collateral-test-role.js +0 -40
- package/node_modules/pi-lens/dist/clients/complexity-client.js +0 -462
- package/node_modules/pi-lens/dist/clients/config-core/deny.js +0 -221
- package/node_modules/pi-lens/dist/clients/config-core/index.js +0 -50
- package/node_modules/pi-lens/dist/clients/config-core/merge.js +0 -357
- package/node_modules/pi-lens/dist/clients/config-core/normalize.js +0 -340
- package/node_modules/pi-lens/dist/clients/config-core/process-spec.js +0 -248
- package/node_modules/pi-lens/dist/clients/config-core/provenance.js +0 -164
- package/node_modules/pi-lens/dist/clients/config-core/records.js +0 -218
- package/node_modules/pi-lens/dist/clients/config-core/resolve.js +0 -125
- package/node_modules/pi-lens/dist/clients/config-core/safe-object.js +0 -78
- package/node_modules/pi-lens/dist/clients/config-core/schema.js +0 -165
- package/node_modules/pi-lens/dist/clients/config-diagnostic-codes.js +0 -285
- package/node_modules/pi-lens/dist/clients/config-locations.js +0 -388
- package/node_modules/pi-lens/dist/clients/config-resolve.js +0 -798
- package/node_modules/pi-lens/dist/clients/config-schema.js +0 -251
- package/node_modules/pi-lens/dist/clients/config-warn.js +0 -407
- package/node_modules/pi-lens/dist/clients/console-guard-install.js +0 -26
- package/node_modules/pi-lens/dist/clients/cooperative-budget.js +0 -42
- package/node_modules/pi-lens/dist/clients/dead-code-client.js +0 -510
- package/node_modules/pi-lens/dist/clients/dead-code-logger.js +0 -30
- package/node_modules/pi-lens/dist/clients/deadline-utils.js +0 -280
- package/node_modules/pi-lens/dist/clients/debug-handles.js +0 -211
- package/node_modules/pi-lens/dist/clients/debug-heap.js +0 -174
- package/node_modules/pi-lens/dist/clients/deferred-lsp-work.js +0 -106
- package/node_modules/pi-lens/dist/clients/degradation-ledger.js +0 -426
- package/node_modules/pi-lens/dist/clients/demoted-finding-render.js +0 -169
- package/node_modules/pi-lens/dist/clients/dependency-checker.js +0 -885
- package/node_modules/pi-lens/dist/clients/deps/ast-grep-napi.js +0 -22
- package/node_modules/pi-lens/dist/clients/deps/js-yaml.js +0 -9
- package/node_modules/pi-lens/dist/clients/deps/minimatch.js +0 -4
- package/node_modules/pi-lens/dist/clients/deps/pi-tui.js +0 -14
- package/node_modules/pi-lens/dist/clients/deps/typebox.js +0 -14
- package/node_modules/pi-lens/dist/clients/deps/vscode-jsonrpc.js +0 -1
- package/node_modules/pi-lens/dist/clients/deps/web-tree-sitter.js +0 -24
- package/node_modules/pi-lens/dist/clients/diagnostic-dispositions.js +0 -630
- package/node_modules/pi-lens/dist/clients/diagnostic-line-freshness.js +0 -305
- package/node_modules/pi-lens/dist/clients/diagnostic-logger.js +0 -73
- package/node_modules/pi-lens/dist/clients/diagnostic-tracker.js +0 -105
- package/node_modules/pi-lens/dist/clients/diagnostics-publish.js +0 -230
- package/node_modules/pi-lens/dist/clients/dispatch/ast-grep-catalog.js +0 -65
- package/node_modules/pi-lens/dist/clients/dispatch/auxiliary-lsp.js +0 -343
- package/node_modules/pi-lens/dist/clients/dispatch/collect-later-tier.js +0 -35
- package/node_modules/pi-lens/dist/clients/dispatch/diagnostic-taxonomy.js +0 -66
- package/node_modules/pi-lens/dist/clients/dispatch/dispatcher.js +0 -1269
- package/node_modules/pi-lens/dist/clients/dispatch/fact-provider-types.js +0 -1
- package/node_modules/pi-lens/dist/clients/dispatch/fact-rule-runner.js +0 -17
- package/node_modules/pi-lens/dist/clients/dispatch/fact-runner.js +0 -30
- package/node_modules/pi-lens/dist/clients/dispatch/fact-scheduler.js +0 -68
- package/node_modules/pi-lens/dist/clients/dispatch/fact-store.js +0 -377
- package/node_modules/pi-lens/dist/clients/dispatch/facts/comment-facts.js +0 -22
- package/node_modules/pi-lens/dist/clients/dispatch/facts/file-content.js +0 -19
- package/node_modules/pi-lens/dist/clients/dispatch/facts/function-facts.js +0 -348
- package/node_modules/pi-lens/dist/clients/dispatch/facts/import-facts.js +0 -204
- package/node_modules/pi-lens/dist/clients/dispatch/facts/tree-sitter-facts.js +0 -34
- package/node_modules/pi-lens/dist/clients/dispatch/facts/try-catch-facts.js +0 -119
- package/node_modules/pi-lens/dist/clients/dispatch/finding-policy.js +0 -339
- package/node_modules/pi-lens/dist/clients/dispatch/indent-detect.js +0 -417
- package/node_modules/pi-lens/dist/clients/dispatch/inline-suppressions.js +0 -89
- package/node_modules/pi-lens/dist/clients/dispatch/integration.js +0 -2377
- package/node_modules/pi-lens/dist/clients/dispatch/lazy.js +0 -11
- package/node_modules/pi-lens/dist/clients/dispatch/pending-runner-findings.js +0 -87
- package/node_modules/pi-lens/dist/clients/dispatch/plan.js +0 -278
- package/node_modules/pi-lens/dist/clients/dispatch/priorities.js +0 -20
- package/node_modules/pi-lens/dist/clients/dispatch/rule-id-normalize.js +0 -50
- package/node_modules/pi-lens/dist/clients/dispatch/rule-ignores.js +0 -69
- package/node_modules/pi-lens/dist/clients/dispatch/rule-policy.js +0 -135
- package/node_modules/pi-lens/dist/clients/dispatch/rules/async-noise.js +0 -40
- package/node_modules/pi-lens/dist/clients/dispatch/rules/async-unnecessary-wrapper.js +0 -27
- package/node_modules/pi-lens/dist/clients/dispatch/rules/cors-wildcard.js +0 -54
- package/node_modules/pi-lens/dist/clients/dispatch/rules/error-obscuring.js +0 -32
- package/node_modules/pi-lens/dist/clients/dispatch/rules/error-swallowing.js +0 -31
- package/node_modules/pi-lens/dist/clients/dispatch/rules/framework-call-noise.js +0 -67
- package/node_modules/pi-lens/dist/clients/dispatch/rules/high-complexity.js +0 -72
- package/node_modules/pi-lens/dist/clients/dispatch/rules/high-fan-out.js +0 -74
- package/node_modules/pi-lens/dist/clients/dispatch/rules/high-import-coupling.js +0 -37
- package/node_modules/pi-lens/dist/clients/dispatch/rules/missing-error-propagation.js +0 -62
- package/node_modules/pi-lens/dist/clients/dispatch/rules/no-commented-credentials.js +0 -52
- package/node_modules/pi-lens/dist/clients/dispatch/rules/pass-through-wrappers.js +0 -42
- package/node_modules/pi-lens/dist/clients/dispatch/rules/placeholder-comments.js +0 -40
- package/node_modules/pi-lens/dist/clients/dispatch/rules/unsafe-boundary.js +0 -126
- package/node_modules/pi-lens/dist/clients/dispatch/runner-context.js +0 -52
- package/node_modules/pi-lens/dist/clients/dispatch/runners/actionlint.js +0 -111
- package/node_modules/pi-lens/dist/clients/dispatch/runners/ast-grep-napi.js +0 -1196
- package/node_modules/pi-lens/dist/clients/dispatch/runners/biome-check.js +0 -296
- package/node_modules/pi-lens/dist/clients/dispatch/runners/cpp-check.js +0 -219
- package/node_modules/pi-lens/dist/clients/dispatch/runners/credo.js +0 -82
- package/node_modules/pi-lens/dist/clients/dispatch/runners/cue-vet.js +0 -416
- package/node_modules/pi-lens/dist/clients/dispatch/runners/dart-analyze.js +0 -183
- package/node_modules/pi-lens/dist/clients/dispatch/runners/detekt.js +0 -176
- package/node_modules/pi-lens/dist/clients/dispatch/runners/dotnet-build.js +0 -164
- package/node_modules/pi-lens/dist/clients/dispatch/runners/elixir-check.js +0 -195
- package/node_modules/pi-lens/dist/clients/dispatch/runners/eslint.js +0 -137
- package/node_modules/pi-lens/dist/clients/dispatch/runners/fact-rules.js +0 -29
- package/node_modules/pi-lens/dist/clients/dispatch/runners/fish-indent.js +0 -69
- package/node_modules/pi-lens/dist/clients/dispatch/runners/gleam-check.js +0 -167
- package/node_modules/pi-lens/dist/clients/dispatch/runners/go-vet.js +0 -104
- package/node_modules/pi-lens/dist/clients/dispatch/runners/golangci-lint.js +0 -135
- package/node_modules/pi-lens/dist/clients/dispatch/runners/hadolint.js +0 -91
- package/node_modules/pi-lens/dist/clients/dispatch/runners/helm-lint.js +0 -171
- package/node_modules/pi-lens/dist/clients/dispatch/runners/helm-render.js +0 -940
- package/node_modules/pi-lens/dist/clients/dispatch/runners/htmlhint.js +0 -117
- package/node_modules/pi-lens/dist/clients/dispatch/runners/index.js +0 -108
- package/node_modules/pi-lens/dist/clients/dispatch/runners/javac.js +0 -99
- package/node_modules/pi-lens/dist/clients/dispatch/runners/ktlint.js +0 -110
- package/node_modules/pi-lens/dist/clients/dispatch/runners/lsp.js +0 -379
- package/node_modules/pi-lens/dist/clients/dispatch/runners/markdownlint.js +0 -167
- package/node_modules/pi-lens/dist/clients/dispatch/runners/mypy.js +0 -102
- package/node_modules/pi-lens/dist/clients/dispatch/runners/oxlint.js +0 -414
- package/node_modules/pi-lens/dist/clients/dispatch/runners/php-lint.js +0 -85
- package/node_modules/pi-lens/dist/clients/dispatch/runners/phpstan.js +0 -120
- package/node_modules/pi-lens/dist/clients/dispatch/runners/prisma-validate.js +0 -62
- package/node_modules/pi-lens/dist/clients/dispatch/runners/psscriptanalyzer.js +0 -445
- package/node_modules/pi-lens/dist/clients/dispatch/runners/pyright.js +0 -169
- package/node_modules/pi-lens/dist/clients/dispatch/runners/rubocop.js +0 -99
- package/node_modules/pi-lens/dist/clients/dispatch/runners/ruff.js +0 -88
- package/node_modules/pi-lens/dist/clients/dispatch/runners/rust-clippy.js +0 -256
- package/node_modules/pi-lens/dist/clients/dispatch/runners/shellcheck.js +0 -173
- package/node_modules/pi-lens/dist/clients/dispatch/runners/shfmt.js +0 -102
- package/node_modules/pi-lens/dist/clients/dispatch/runners/spellcheck.js +0 -128
- package/node_modules/pi-lens/dist/clients/dispatch/runners/spotbugs.js +0 -259
- package/node_modules/pi-lens/dist/clients/dispatch/runners/sqlfluff.js +0 -183
- package/node_modules/pi-lens/dist/clients/dispatch/runners/stylelint.js +0 -166
- package/node_modules/pi-lens/dist/clients/dispatch/runners/swiftlint.js +0 -163
- package/node_modules/pi-lens/dist/clients/dispatch/runners/taplo.js +0 -174
- package/node_modules/pi-lens/dist/clients/dispatch/runners/terragrunt.js +0 -168
- package/node_modules/pi-lens/dist/clients/dispatch/runners/tflint.js +0 -125
- package/node_modules/pi-lens/dist/clients/dispatch/runners/tree-sitter.js +0 -643
- package/node_modules/pi-lens/dist/clients/dispatch/runners/trivy-config.js +0 -253
- package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/availability-policy.js +0 -496
- package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/candidate-probe.js +0 -90
- package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/diagnostic-parsers.js +0 -95
- package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/lazy-installer.js +0 -274
- package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/runner-helpers.js +0 -1701
- package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/spawn-outcome.js +0 -101
- package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/tool-failure.js +0 -235
- package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/toolchain-availability.js +0 -169
- package/node_modules/pi-lens/dist/clients/dispatch/runners/utils.js +0 -15
- package/node_modules/pi-lens/dist/clients/dispatch/runners/vale.js +0 -128
- package/node_modules/pi-lens/dist/clients/dispatch/runners/yaml-rule-parser.js +0 -242
- package/node_modules/pi-lens/dist/clients/dispatch/runners/yamllint.js +0 -95
- package/node_modules/pi-lens/dist/clients/dispatch/runners/zig-check.js +0 -79
- package/node_modules/pi-lens/dist/clients/dispatch/suppress-writer.js +0 -79
- package/node_modules/pi-lens/dist/clients/dispatch/tool-profile.js +0 -30
- package/node_modules/pi-lens/dist/clients/dispatch/types.js +0 -21
- package/node_modules/pi-lens/dist/clients/dispatch/utils/format-utils.js +0 -45
- package/node_modules/pi-lens/dist/clients/dispatch/utils/lsp-diagnostics.js +0 -35
- package/node_modules/pi-lens/dist/clients/disposition-logger.js +0 -32
- package/node_modules/pi-lens/dist/clients/disposition-publish.js +0 -124
- package/node_modules/pi-lens/dist/clients/durable-store.js +0 -97
- package/node_modules/pi-lens/dist/clients/effective-config.js +0 -415
- package/node_modules/pi-lens/dist/clients/env-utils.js +0 -83
- package/node_modules/pi-lens/dist/clients/error-class.js +0 -23
- package/node_modules/pi-lens/dist/clients/eval-timestamp.js +0 -17
- package/node_modules/pi-lens/dist/clients/event-loop-hold.js +0 -274
- package/node_modules/pi-lens/dist/clients/event-loop-monitor.js +0 -250
- package/node_modules/pi-lens/dist/clients/extension-log.js +0 -504
- package/node_modules/pi-lens/dist/clients/extension-mode.js +0 -73
- package/node_modules/pi-lens/dist/clients/feature-hints.js +0 -103
- package/node_modules/pi-lens/dist/clients/file-kinds.js +0 -412
- package/node_modules/pi-lens/dist/clients/file-role.js +0 -134
- package/node_modules/pi-lens/dist/clients/file-time.js +0 -160
- package/node_modules/pi-lens/dist/clients/file-utils.js +0 -1032
- package/node_modules/pi-lens/dist/clients/finding-delivery-gate.js +0 -494
- package/node_modules/pi-lens/dist/clients/finding-identity.js +0 -88
- package/node_modules/pi-lens/dist/clients/fix-worklog.js +0 -103
- package/node_modules/pi-lens/dist/clients/format-events-publish.js +0 -343
- package/node_modules/pi-lens/dist/clients/format-service.js +0 -222
- package/node_modules/pi-lens/dist/clients/formatters-lazy.js +0 -9
- package/node_modules/pi-lens/dist/clients/formatters.js +0 -2032
- package/node_modules/pi-lens/dist/clients/freshness-cadence.js +0 -17
- package/node_modules/pi-lens/dist/clients/freshness.js +0 -38
- package/node_modules/pi-lens/dist/clients/generated-artifacts.js +0 -394
- package/node_modules/pi-lens/dist/clients/generation-guard.js +0 -215
- package/node_modules/pi-lens/dist/clients/git-guard.js +0 -1136
- package/node_modules/pi-lens/dist/clients/git-tracked-ignore.js +0 -243
- package/node_modules/pi-lens/dist/clients/gitleaks-client.js +0 -509
- package/node_modules/pi-lens/dist/clients/go-client.js +0 -104
- package/node_modules/pi-lens/dist/clients/govulncheck-client.js +0 -605
- package/node_modules/pi-lens/dist/clients/gradle-ktfmt-style.js +0 -348
- package/node_modules/pi-lens/dist/clients/grammar-source.js +0 -465
- package/node_modules/pi-lens/dist/clients/gzip-stage-write.js +0 -135
- package/node_modules/pi-lens/dist/clients/hashline-anchor.js +0 -424
- package/node_modules/pi-lens/dist/clients/hook-budgets.js +0 -76
- package/node_modules/pi-lens/dist/clients/host-edit-normalize.js +0 -140
- package/node_modules/pi-lens/dist/clients/host-ports.js +0 -39
- package/node_modules/pi-lens/dist/clients/indent-retarget.js +0 -154
- package/node_modules/pi-lens/dist/clients/inline-blocker-dispositions.js +0 -186
- package/node_modules/pi-lens/dist/clients/install-diagnostics.js +0 -156
- package/node_modules/pi-lens/dist/clients/installer/index.js +0 -5416
- package/node_modules/pi-lens/dist/clients/installer/managed-tool-refresh-session.js +0 -58
- package/node_modules/pi-lens/dist/clients/installer/managed-tool-refresh.js +0 -783
- package/node_modules/pi-lens/dist/clients/instance-reaper-state.js +0 -7
- package/node_modules/pi-lens/dist/clients/instance-reaper.js +0 -1137
- package/node_modules/pi-lens/dist/clients/instance-registry-lock.js +0 -145
- package/node_modules/pi-lens/dist/clients/instance-registry.js +0 -773
- package/node_modules/pi-lens/dist/clients/jscpd-client.js +0 -378
- package/node_modules/pi-lens/dist/clients/json-cache-read.js +0 -65
- package/node_modules/pi-lens/dist/clients/knip-client.js +0 -788
- package/node_modules/pi-lens/dist/clients/language-policy.js +0 -252
- package/node_modules/pi-lens/dist/clients/language-profile.js +0 -361
- package/node_modules/pi-lens/dist/clients/language-registry.js +0 -603
- package/node_modules/pi-lens/dist/clients/latency-logger.js +0 -727
- package/node_modules/pi-lens/dist/clients/lazy-import.js +0 -21
- package/node_modules/pi-lens/dist/clients/ledger-bounds.js +0 -54
- package/node_modules/pi-lens/dist/clients/lens-config.js +0 -404
- package/node_modules/pi-lens/dist/clients/lens-engine.js +0 -358
- package/node_modules/pi-lens/dist/clients/lens-events.js +0 -125
- package/node_modules/pi-lens/dist/clients/lens-flag-registry.js +0 -467
- package/node_modules/pi-lens/dist/clients/lens-map.js +0 -1156
- package/node_modules/pi-lens/dist/clients/live-bus-emitter.js +0 -74
- package/node_modules/pi-lens/dist/clients/log-cleanup.js +0 -222
- package/node_modules/pi-lens/dist/clients/lsp/aggregation.js +0 -178
- package/node_modules/pi-lens/dist/clients/lsp/cascade-tier.js +0 -421
- package/node_modules/pi-lens/dist/clients/lsp/client.js +0 -4593
- package/node_modules/pi-lens/dist/clients/lsp/config.js +0 -691
- package/node_modules/pi-lens/dist/clients/lsp/content-limits.js +0 -41
- package/node_modules/pi-lens/dist/clients/lsp/diagnostic-binding.js +0 -225
- package/node_modules/pi-lens/dist/clients/lsp/document-drift.js +0 -467
- package/node_modules/pi-lens/dist/clients/lsp/edits.js +0 -1219
- package/node_modules/pi-lens/dist/clients/lsp/index.js +0 -8305
- package/node_modules/pi-lens/dist/clients/lsp/inferred-project.js +0 -216
- package/node_modules/pi-lens/dist/clients/lsp/jvm-runtime.js +0 -298
- package/node_modules/pi-lens/dist/clients/lsp/language.js +0 -63
- package/node_modules/pi-lens/dist/clients/lsp/launch.js +0 -746
- package/node_modules/pi-lens/dist/clients/lsp/lombok.js +0 -158
- package/node_modules/pi-lens/dist/clients/lsp/path-utils.js +0 -5
- package/node_modules/pi-lens/dist/clients/lsp/pending-aux-coverage.js +0 -251
- package/node_modules/pi-lens/dist/clients/lsp/position-encoding.js +0 -61
- package/node_modules/pi-lens/dist/clients/lsp/ruby-drive-dirs.js +0 -83
- package/node_modules/pi-lens/dist/clients/lsp/server.js +0 -3290
- package/node_modules/pi-lens/dist/clients/lsp/session-roots.js +0 -192
- package/node_modules/pi-lens/dist/clients/lsp/spawn-history.js +0 -17
- package/node_modules/pi-lens/dist/clients/lsp/sync-kind.js +0 -56
- package/node_modules/pi-lens/dist/clients/lsp/tsserver-sync.js +0 -332
- package/node_modules/pi-lens/dist/clients/lsp/wait-policy/capability-snapshot.js +0 -1
- package/node_modules/pi-lens/dist/clients/lsp/wait-policy/classification.js +0 -85
- package/node_modules/pi-lens/dist/clients/lsp/wait-policy/index.js +0 -10
- package/node_modules/pi-lens/dist/clients/lsp/wait-policy/strategies.js +0 -392
- package/node_modules/pi-lens/dist/clients/lsp/watch-queue.js +0 -61
- package/node_modules/pi-lens/dist/clients/lsp/workspace-diagnostics-cache.js +0 -639
- package/node_modules/pi-lens/dist/clients/lsp/workspace-diagnostics-session.js +0 -30
- package/node_modules/pi-lens/dist/clients/lsp/workspace-sweep-hold.js +0 -184
- package/node_modules/pi-lens/dist/clients/lsp-budget.js +0 -186
- package/node_modules/pi-lens/dist/clients/lsp-document-symbols.js +0 -110
- package/node_modules/pi-lens/dist/clients/lsp-lazy.js +0 -9
- package/node_modules/pi-lens/dist/clients/lsp-mutation.js +0 -396
- package/node_modules/pi-lens/dist/clients/lsp-status.js +0 -59
- package/node_modules/pi-lens/dist/clients/map-with-concurrency.js +0 -40
- package/node_modules/pi-lens/dist/clients/mcp/analyze.js +0 -420
- package/node_modules/pi-lens/dist/clients/mcp/host-shim.js +0 -31
- package/node_modules/pi-lens/dist/clients/mcp/ipc.js +0 -523
- package/node_modules/pi-lens/dist/clients/mcp/review.js +0 -197
- package/node_modules/pi-lens/dist/clients/mcp/session.js +0 -412
- package/node_modules/pi-lens/dist/clients/memory-sampler.js +0 -208
- package/node_modules/pi-lens/dist/clients/message-end-attribution.js +0 -30
- package/node_modules/pi-lens/dist/clients/metrics-client.js +0 -107
- package/node_modules/pi-lens/dist/clients/metrics-history.js +0 -327
- package/node_modules/pi-lens/dist/clients/middle-man-analysis.js +0 -263
- package/node_modules/pi-lens/dist/clients/model-provider.js +0 -53
- package/node_modules/pi-lens/dist/clients/module-report-lsp.js +0 -189
- package/node_modules/pi-lens/dist/clients/module-report.js +0 -2150
- package/node_modules/pi-lens/dist/clients/mutating-tool.js +0 -651
- package/node_modules/pi-lens/dist/clients/mutation-attribution.js +0 -368
- package/node_modules/pi-lens/dist/clients/mutation-bridge.js +0 -240
- package/node_modules/pi-lens/dist/clients/ndjson-logger.js +0 -734
- package/node_modules/pi-lens/dist/clients/observed-mutation-sources.js +0 -101
- package/node_modules/pi-lens/dist/clients/observed-mutation.js +0 -1253
- package/node_modules/pi-lens/dist/clients/oldtext-autopatch.js +0 -128
- package/node_modules/pi-lens/dist/clients/opaque-mutation-scan.js +0 -496
- package/node_modules/pi-lens/dist/clients/opengrep-client.js +0 -333
- package/node_modules/pi-lens/dist/clients/opengrep-config.js +0 -76
- package/node_modules/pi-lens/dist/clients/package-manager.js +0 -607
- package/node_modules/pi-lens/dist/clients/package-root.js +0 -38
- package/node_modules/pi-lens/dist/clients/partial-edit-apply.js +0 -439
- package/node_modules/pi-lens/dist/clients/path-attribution-telemetry.js +0 -43
- package/node_modules/pi-lens/dist/clients/path-keyed-map.js +0 -108
- package/node_modules/pi-lens/dist/clients/path-utils.js +0 -1244
- package/node_modules/pi-lens/dist/clients/performance-report.js +0 -331
- package/node_modules/pi-lens/dist/clients/persist-debounce.js +0 -70
- package/node_modules/pi-lens/dist/clients/persistent-reverify.js +0 -271
- package/node_modules/pi-lens/dist/clients/php-cs-fixer-config.js +0 -119
- package/node_modules/pi-lens/dist/clients/pipeline.js +0 -1480
- package/node_modules/pi-lens/dist/clients/post-autofix-notice.js +0 -37
- package/node_modules/pi-lens/dist/clients/print-mode.js +0 -21
- package/node_modules/pi-lens/dist/clients/probe-home-state.js +0 -228
- package/node_modules/pi-lens/dist/clients/process-bridge.js +0 -66
- package/node_modules/pi-lens/dist/clients/process-singletons.js +0 -210
- package/node_modules/pi-lens/dist/clients/process-snapshot.js +0 -68
- package/node_modules/pi-lens/dist/clients/project-changes.js +0 -181
- package/node_modules/pi-lens/dist/clients/project-conventions.js +0 -171
- package/node_modules/pi-lens/dist/clients/project-diagnostics/cache.js +0 -137
- package/node_modules/pi-lens/dist/clients/project-diagnostics/extractors.js +0 -109
- package/node_modules/pi-lens/dist/clients/project-diagnostics/fresh-fetch.js +0 -668
- package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/call-graph-impact.js +0 -118
- package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/dead-code.js +0 -47
- package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/gitleaks.js +0 -40
- package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/govulncheck.js +0 -34
- package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/jscpd.js +0 -38
- package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/knip.js +0 -47
- package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/madge.js +0 -48
- package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/opengrep.js +0 -40
- package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/runner-findings.js +0 -127
- package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/trivy.js +0 -81
- package/node_modules/pi-lens/dist/clients/project-diagnostics/scanner.js +0 -520
- package/node_modules/pi-lens/dist/clients/project-diagnostics/types.js +0 -1
- package/node_modules/pi-lens/dist/clients/project-lens-config.js +0 -807
- package/node_modules/pi-lens/dist/clients/project-report.js +0 -701
- package/node_modules/pi-lens/dist/clients/project-scale.js +0 -237
- package/node_modules/pi-lens/dist/clients/project-scan-policy.js +0 -11
- package/node_modules/pi-lens/dist/clients/project-snapshot-fingerprint.js +0 -48
- package/node_modules/pi-lens/dist/clients/project-snapshot-persist-worker.js +0 -20
- package/node_modules/pi-lens/dist/clients/project-snapshot.js +0 -1653
- package/node_modules/pi-lens/dist/clients/project-trust.js +0 -181
- package/node_modules/pi-lens/dist/clients/python-environment.js +0 -217
- package/node_modules/pi-lens/dist/clients/python-provenance.js +0 -639
- package/node_modules/pi-lens/dist/clients/quiet-window-config.js +0 -47
- package/node_modules/pi-lens/dist/clients/quiet-window.js +0 -236
- package/node_modules/pi-lens/dist/clients/read-bridge.js +0 -139
- package/node_modules/pi-lens/dist/clients/read-expansion.js +0 -266
- package/node_modules/pi-lens/dist/clients/read-guard-logger.js +0 -251
- package/node_modules/pi-lens/dist/clients/read-guard-tool-lines.js +0 -1306
- package/node_modules/pi-lens/dist/clients/read-guard.js +0 -1561
- package/node_modules/pi-lens/dist/clients/recent-touches.js +0 -240
- package/node_modules/pi-lens/dist/clients/redact/secrets.js +0 -449
- package/node_modules/pi-lens/dist/clients/resource-sampler.js +0 -628
- package/node_modules/pi-lens/dist/clients/reverse-deps.js +0 -270
- package/node_modules/pi-lens/dist/clients/review-graph/builder.js +0 -5126
- package/node_modules/pi-lens/dist/clients/review-graph/format.js +0 -33
- package/node_modules/pi-lens/dist/clients/review-graph/git-identity.js +0 -163
- package/node_modules/pi-lens/dist/clients/review-graph/import-resolvers.js +0 -481
- package/node_modules/pi-lens/dist/clients/review-graph/persist-worker.js +0 -10
- package/node_modules/pi-lens/dist/clients/review-graph/query.js +0 -244
- package/node_modules/pi-lens/dist/clients/review-graph/revision-drift.js +0 -21
- package/node_modules/pi-lens/dist/clients/review-graph/service.js +0 -96
- package/node_modules/pi-lens/dist/clients/review-graph/shared-extraction-ir.js +0 -82
- package/node_modules/pi-lens/dist/clients/review-graph/symbol-id.js +0 -103
- package/node_modules/pi-lens/dist/clients/review-graph/tsconfig-paths.js +0 -299
- package/node_modules/pi-lens/dist/clients/review-graph/types.js +0 -1
- package/node_modules/pi-lens/dist/clients/review-graph/workspace-modules.js +0 -449
- package/node_modules/pi-lens/dist/clients/review-graph-logger.js +0 -81
- package/node_modules/pi-lens/dist/clients/ruff-client.js +0 -179
- package/node_modules/pi-lens/dist/clients/rules-scanner.js +0 -131
- package/node_modules/pi-lens/dist/clients/run-duration.js +0 -55
- package/node_modules/pi-lens/dist/clients/runtime-agent-end.js +0 -746
- package/node_modules/pi-lens/dist/clients/runtime-config.js +0 -77
- package/node_modules/pi-lens/dist/clients/runtime-context.js +0 -211
- package/node_modules/pi-lens/dist/clients/runtime-coordinator.js +0 -1324
- package/node_modules/pi-lens/dist/clients/runtime-session.js +0 -2485
- package/node_modules/pi-lens/dist/clients/runtime-tool-call.js +0 -1295
- package/node_modules/pi-lens/dist/clients/runtime-tool-result.js +0 -2049
- package/node_modules/pi-lens/dist/clients/runtime-turn.js +0 -3767
- package/node_modules/pi-lens/dist/clients/rust-client.js +0 -97
- package/node_modules/pi-lens/dist/clients/safe-spawn.js +0 -2357
- package/node_modules/pi-lens/dist/clients/sanitize.js +0 -286
- package/node_modules/pi-lens/dist/clients/scan-utils.js +0 -25
- package/node_modules/pi-lens/dist/clients/scratch-tree-policy.js +0 -165
- package/node_modules/pi-lens/dist/clients/search-read-registration.js +0 -94
- package/node_modules/pi-lens/dist/clients/secret-findings.js +0 -114
- package/node_modules/pi-lens/dist/clients/security-scan-client.js +0 -352
- package/node_modules/pi-lens/dist/clients/session-event-guard.js +0 -297
- package/node_modules/pi-lens/dist/clients/session-lifecycle.js +0 -484
- package/node_modules/pi-lens/dist/clients/session-start-observability.js +0 -94
- package/node_modules/pi-lens/dist/clients/session-state-store.js +0 -101
- package/node_modules/pi-lens/dist/clients/session-summary.js +0 -15
- package/node_modules/pi-lens/dist/clients/sessionstart-logger.js +0 -27
- package/node_modules/pi-lens/dist/clients/sg-runner.js +0 -876
- package/node_modules/pi-lens/dist/clients/sgconfig.js +0 -347
- package/node_modules/pi-lens/dist/clients/shared-checkout-guard.js +0 -338
- package/node_modules/pi-lens/dist/clients/single-flight.js +0 -158
- package/node_modules/pi-lens/dist/clients/situational-tool-telemetry.js +0 -108
- package/node_modules/pi-lens/dist/clients/skills-resolver.js +0 -141
- package/node_modules/pi-lens/dist/clients/slow-fs.js +0 -138
- package/node_modules/pi-lens/dist/clients/smells-rollup.js +0 -231
- package/node_modules/pi-lens/dist/clients/source-filter.js +0 -596
- package/node_modules/pi-lens/dist/clients/source-walker.js +0 -211
- package/node_modules/pi-lens/dist/clients/spawn-output-cap.js +0 -120
- package/node_modules/pi-lens/dist/clients/spawn-timeout-cooldown.js +0 -110
- package/node_modules/pi-lens/dist/clients/stale-marker.js +0 -17
- package/node_modules/pi-lens/dist/clients/startup-scan.js +0 -400
- package/node_modules/pi-lens/dist/clients/startup-timing.js +0 -130
- package/node_modules/pi-lens/dist/clients/string-utils.js +0 -33
- package/node_modules/pi-lens/dist/clients/subagent-mode.js +0 -111
- package/node_modules/pi-lens/dist/clients/symbol-containment.js +0 -24
- package/node_modules/pi-lens/dist/clients/symbol-types.js +0 -5
- package/node_modules/pi-lens/dist/clients/test-runner-client.js +0 -2507
- package/node_modules/pi-lens/dist/clients/test-runner-delivery.js +0 -287
- package/node_modules/pi-lens/dist/clients/todo-scanner.js +0 -229
- package/node_modules/pi-lens/dist/clients/tool-agreement.js +0 -423
- package/node_modules/pi-lens/dist/clients/tool-config.js +0 -249
- package/node_modules/pi-lens/dist/clients/tool-cwd.js +0 -270
- package/node_modules/pi-lens/dist/clients/tool-definition.js +0 -47
- package/node_modules/pi-lens/dist/clients/tool-event.js +0 -105
- package/node_modules/pi-lens/dist/clients/tool-policy.js +0 -2755
- package/node_modules/pi-lens/dist/clients/tool-probe.js +0 -53
- package/node_modules/pi-lens/dist/clients/tool-render.js +0 -156
- package/node_modules/pi-lens/dist/clients/tool-set-policy.js +0 -118
- package/node_modules/pi-lens/dist/clients/tree-sitter-cache.js +0 -364
- package/node_modules/pi-lens/dist/clients/tree-sitter-client.js +0 -4195
- package/node_modules/pi-lens/dist/clients/tree-sitter-logger.js +0 -100
- package/node_modules/pi-lens/dist/clients/tree-sitter-navigator.js +0 -269
- package/node_modules/pi-lens/dist/clients/tree-sitter-query-loader.js +0 -569
- package/node_modules/pi-lens/dist/clients/tree-sitter-shared.js +0 -158
- package/node_modules/pi-lens/dist/clients/tree-sitter-symbol-extractor.js +0 -1265
- package/node_modules/pi-lens/dist/clients/trivy-client.js +0 -467
- package/node_modules/pi-lens/dist/clients/tui-fit.js +0 -50
- package/node_modules/pi-lens/dist/clients/turn-context.js +0 -52
- package/node_modules/pi-lens/dist/clients/turn-end/lane.js +0 -51
- package/node_modules/pi-lens/dist/clients/turn-end/lanes/govulncheck.js +0 -112
- package/node_modules/pi-lens/dist/clients/turn-end/lanes/secrets.js +0 -204
- package/node_modules/pi-lens/dist/clients/turn-summary-render.js +0 -72
- package/node_modules/pi-lens/dist/clients/turn-summary.js +0 -132
- package/node_modules/pi-lens/dist/clients/typos-config.js +0 -29
- package/node_modules/pi-lens/dist/clients/user-notify.js +0 -51
- package/node_modules/pi-lens/dist/clients/vanished-instance-marker.js +0 -57
- package/node_modules/pi-lens/dist/clients/warm-attach.js +0 -305
- package/node_modules/pi-lens/dist/clients/widget-state.js +0 -1808
- package/node_modules/pi-lens/dist/clients/word-index-logger.js +0 -49
- package/node_modules/pi-lens/dist/clients/word-index-store.js +0 -459
- package/node_modules/pi-lens/dist/clients/word-index.js +0 -2080
- package/node_modules/pi-lens/dist/clients/workspace-topology.js +0 -443
- package/node_modules/pi-lens/dist/clients/write-ordering-guard.js +0 -65
- package/node_modules/pi-lens/dist/clients/zizmor-config.js +0 -340
- package/node_modules/pi-lens/dist/i18n.js +0 -69
- package/node_modules/pi-lens/dist/mcp/build-staleness.js +0 -124
- package/node_modules/pi-lens/dist/scripts/lib/process-scan.mjs +0 -583
- package/node_modules/pi-lens/dist/scripts/lib/skills-predicate.mjs +0 -129
- package/node_modules/pi-lens/dist/scripts/lib/web-tree-sitter-dir.mjs +0 -123
- package/node_modules/pi-lens/dist/tools/activate-tools.js +0 -87
- package/node_modules/pi-lens/dist/tools/ast-grep-outline.js +0 -137
- package/node_modules/pi-lens/dist/tools/ast-grep-replace.js +0 -244
- package/node_modules/pi-lens/dist/tools/ast-grep-search.js +0 -762
- package/node_modules/pi-lens/dist/tools/effective-config.js +0 -90
- package/node_modules/pi-lens/dist/tools/lens-diagnostic-mark.js +0 -375
- package/node_modules/pi-lens/dist/tools/lens-diagnostics.js +0 -2571
- package/node_modules/pi-lens/dist/tools/lsp-diagnostics.js +0 -1745
- package/node_modules/pi-lens/dist/tools/lsp-navigation.js +0 -1367
- package/node_modules/pi-lens/dist/tools/lsp-structured-output.js +0 -294
- package/node_modules/pi-lens/dist/tools/module-report.js +0 -382
- package/node_modules/pi-lens/dist/tools/project-report.js +0 -86
- package/node_modules/pi-lens/dist/tools/render-compact.js +0 -374
- package/node_modules/pi-lens/dist/tools/scan-progress.js +0 -53
- package/node_modules/pi-lens/dist/tools/shared.js +0 -29
- package/node_modules/pi-lens/dist/tools/symbol-search.js +0 -155
|
@@ -0,0 +1,756 @@
|
|
|
1
|
+
import { createRequire as __pilensCreateRequire } from "node:module"; const require = __pilensCreateRequire(import.meta.url);
|
|
2
|
+
import {
|
|
3
|
+
HardFailureStamps
|
|
4
|
+
} from "./chunk-7U2IDNXN.js";
|
|
5
|
+
import {
|
|
6
|
+
formatToolFailure
|
|
7
|
+
} from "./chunk-ZMOL6RQC.js";
|
|
8
|
+
import {
|
|
9
|
+
spawnFailedWithNoOutput
|
|
10
|
+
} from "./chunk-I7SPGOWI.js";
|
|
11
|
+
import {
|
|
12
|
+
createAvailabilityChecker,
|
|
13
|
+
findManagedNodeToolBinary,
|
|
14
|
+
getManagedToolEnvironment,
|
|
15
|
+
resolveAvailableOrInstall
|
|
16
|
+
} from "./chunk-7FBF7NPR.js";
|
|
17
|
+
import "./chunk-HHYAELLJ.js";
|
|
18
|
+
import {
|
|
19
|
+
canonicalDirectory,
|
|
20
|
+
listNestedLinkedWorktreeRoots
|
|
21
|
+
} from "./chunk-3I5QFT3N.js";
|
|
22
|
+
import "./chunk-B3I2UUT4.js";
|
|
23
|
+
import "./chunk-DIULIWKU.js";
|
|
24
|
+
import "./chunk-VDBPVIKD.js";
|
|
25
|
+
import "./chunk-TGPXLY2J.js";
|
|
26
|
+
import "./chunk-QOZXJ4NA.js";
|
|
27
|
+
import "./chunk-PAK6IDME.js";
|
|
28
|
+
import "./chunk-GUOGVTCQ.js";
|
|
29
|
+
import "./chunk-AJVLWNFN.js";
|
|
30
|
+
import "./chunk-YGVYKNSN.js";
|
|
31
|
+
import "./chunk-LNAKEO63.js";
|
|
32
|
+
import "./chunk-Z3CCVDUB.js";
|
|
33
|
+
import "./chunk-2BEMIWEW.js";
|
|
34
|
+
import {
|
|
35
|
+
logSessionStart
|
|
36
|
+
} from "./chunk-OQGFCZJ4.js";
|
|
37
|
+
import "./chunk-RUOG5D2C.js";
|
|
38
|
+
import {
|
|
39
|
+
findLocalBinUpwards
|
|
40
|
+
} from "./chunk-U3VGR4VU.js";
|
|
41
|
+
import "./chunk-NTUJEGDZ.js";
|
|
42
|
+
import "./chunk-EOKRQ3SA.js";
|
|
43
|
+
import {
|
|
44
|
+
createAvailabilityLatch,
|
|
45
|
+
describeUnavailability
|
|
46
|
+
} from "./chunk-WONERJTP.js";
|
|
47
|
+
import "./chunk-22AVIGXS.js";
|
|
48
|
+
import "./chunk-GVXA6CCE.js";
|
|
49
|
+
import "./chunk-6QIUX4EP.js";
|
|
50
|
+
import "./chunk-VHQLPIRJ.js";
|
|
51
|
+
import {
|
|
52
|
+
getProjectDataDir,
|
|
53
|
+
safeSpawnAsync
|
|
54
|
+
} from "./chunk-VN2AXLEX.js";
|
|
55
|
+
import "./chunk-BW5KFIQC.js";
|
|
56
|
+
import "./chunk-QYF5S6P6.js";
|
|
57
|
+
import "./chunk-5ZEJHV35.js";
|
|
58
|
+
import "./chunk-DQ2NZ7C4.js";
|
|
59
|
+
import "./chunk-VNMT7C64.js";
|
|
60
|
+
import "./chunk-2EECBNC5.js";
|
|
61
|
+
import {
|
|
62
|
+
incrementDegradationCount
|
|
63
|
+
} from "./chunk-N3YQJI6O.js";
|
|
64
|
+
import {
|
|
65
|
+
createSubsystemLogger
|
|
66
|
+
} from "./chunk-O6TQT6RI.js";
|
|
67
|
+
import "./chunk-5THXD6X5.js";
|
|
68
|
+
import "./chunk-UK3CMEAL.js";
|
|
69
|
+
import "./chunk-LJDODBBZ.js";
|
|
70
|
+
import "./chunk-ABBOA7UD.js";
|
|
71
|
+
import {
|
|
72
|
+
findNearestMarkerRoot,
|
|
73
|
+
normalizeEphemeralMapKey,
|
|
74
|
+
normalizeFilePath
|
|
75
|
+
} from "./chunk-Q5U6FMDI.js";
|
|
76
|
+
import "./chunk-NXL4FFQQ.js";
|
|
77
|
+
|
|
78
|
+
// dist/clients/knip-client.js
|
|
79
|
+
import * as fs from "node:fs";
|
|
80
|
+
import * as path from "node:path";
|
|
81
|
+
var EMPTY_RESULT = {
|
|
82
|
+
success: false,
|
|
83
|
+
issues: [],
|
|
84
|
+
unusedExports: [],
|
|
85
|
+
unusedFiles: [],
|
|
86
|
+
unusedDeps: [],
|
|
87
|
+
unlistedDeps: []
|
|
88
|
+
};
|
|
89
|
+
var ANALYSIS_TIMEOUT_MS = 3e4;
|
|
90
|
+
function readOverridePinnedPackageNames(targetDir) {
|
|
91
|
+
const names = /* @__PURE__ */ new Set();
|
|
92
|
+
let pkg;
|
|
93
|
+
try {
|
|
94
|
+
pkg = JSON.parse(fs.readFileSync(path.join(targetDir, "package.json"), "utf-8"));
|
|
95
|
+
} catch {
|
|
96
|
+
return names;
|
|
97
|
+
}
|
|
98
|
+
const collectKeys = (value) => {
|
|
99
|
+
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
100
|
+
return;
|
|
101
|
+
for (const [key, nested] of Object.entries(value)) {
|
|
102
|
+
names.add(key);
|
|
103
|
+
collectKeys(nested);
|
|
104
|
+
}
|
|
105
|
+
};
|
|
106
|
+
collectKeys(pkg.overrides);
|
|
107
|
+
collectKeys(pkg.resolutions);
|
|
108
|
+
collectKeys(pkg.pnpm?.overrides);
|
|
109
|
+
return names;
|
|
110
|
+
}
|
|
111
|
+
var KNIP_CONFIG_FILENAMES = [
|
|
112
|
+
"knip.json",
|
|
113
|
+
"knip.jsonc",
|
|
114
|
+
"knip.ts",
|
|
115
|
+
"knip.js",
|
|
116
|
+
"knip.config.ts",
|
|
117
|
+
"knip.config.js",
|
|
118
|
+
".knip.json",
|
|
119
|
+
".knip.jsonc",
|
|
120
|
+
".knip.ts",
|
|
121
|
+
".knip.js"
|
|
122
|
+
];
|
|
123
|
+
function resolveProjectKnipConfig(targetDir) {
|
|
124
|
+
for (const name of KNIP_CONFIG_FILENAMES) {
|
|
125
|
+
if (fs.existsSync(path.join(targetDir, name)))
|
|
126
|
+
return name;
|
|
127
|
+
}
|
|
128
|
+
try {
|
|
129
|
+
const pkg = JSON.parse(fs.readFileSync(path.join(targetDir, "package.json"), "utf-8"));
|
|
130
|
+
if (pkg && typeof pkg === "object" && pkg.knip !== void 0) {
|
|
131
|
+
return "package.json#knip";
|
|
132
|
+
}
|
|
133
|
+
} catch {
|
|
134
|
+
}
|
|
135
|
+
return null;
|
|
136
|
+
}
|
|
137
|
+
function resolveProjectKnipBinary(targetDir) {
|
|
138
|
+
return findLocalBinUpwards("knip", targetDir) ?? null;
|
|
139
|
+
}
|
|
140
|
+
function classifyKnipBinary(binary, targetDir) {
|
|
141
|
+
if (binary === null)
|
|
142
|
+
return "managed-or-path";
|
|
143
|
+
const relative2 = path.relative(path.resolve(targetDir), path.resolve(binary));
|
|
144
|
+
return relative2 === "" || relative2.startsWith("..") || path.isAbsolute(relative2) ? "global" : "project";
|
|
145
|
+
}
|
|
146
|
+
function readKnipShimVersion(binary) {
|
|
147
|
+
if (!path.isAbsolute(binary))
|
|
148
|
+
return null;
|
|
149
|
+
const binDir = path.dirname(binary);
|
|
150
|
+
if (path.basename(binDir) !== ".bin")
|
|
151
|
+
return null;
|
|
152
|
+
try {
|
|
153
|
+
const pkg = JSON.parse(fs.readFileSync(path.join(path.dirname(binDir), "knip", "package.json"), "utf-8"));
|
|
154
|
+
const version = pkg.version;
|
|
155
|
+
return typeof version === "string" ? version : null;
|
|
156
|
+
} catch {
|
|
157
|
+
return null;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
var NO_NESTED_WORKTREES = {
|
|
161
|
+
count: 0,
|
|
162
|
+
contains: () => false
|
|
163
|
+
};
|
|
164
|
+
function nestedWorktreeScope(targetDir) {
|
|
165
|
+
const prefixes = [];
|
|
166
|
+
for (const root of listNestedLinkedWorktreeRoots(targetDir)) {
|
|
167
|
+
prefixes.push(`${normalizeEphemeralMapKey(normalizeFilePath(root))}/`);
|
|
168
|
+
}
|
|
169
|
+
if (prefixes.length === 0)
|
|
170
|
+
return NO_NESTED_WORKTREES;
|
|
171
|
+
const base = normalizeFilePath(canonicalDirectory(targetDir));
|
|
172
|
+
return {
|
|
173
|
+
count: prefixes.length,
|
|
174
|
+
contains: (file) => {
|
|
175
|
+
if (!file)
|
|
176
|
+
return false;
|
|
177
|
+
const key = normalizeEphemeralMapKey(`${base}/${file}`);
|
|
178
|
+
return prefixes.some((prefix) => key.startsWith(prefix));
|
|
179
|
+
}
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
var MAX_RECORDED_TOOLCHAINS = 32;
|
|
183
|
+
var KnipClient = class {
|
|
184
|
+
knipAvailability = createAvailabilityChecker("knip", ".cmd", ["--version"], {
|
|
185
|
+
environment: (cwd) => getManagedToolEnvironment("knip", cwd),
|
|
186
|
+
unclassifiedFailureOutcome: "missing",
|
|
187
|
+
fastPath: () => findManagedNodeToolBinary("knip")
|
|
188
|
+
});
|
|
189
|
+
/**
|
|
190
|
+
* Client-side memo. Only a DURABLE verdict is latched — a transient probe
|
|
191
|
+
* failure expires, so an installed knip becomes available again without a
|
|
192
|
+
* host restart (#1467).
|
|
193
|
+
*/
|
|
194
|
+
availabilityLatch = createAvailabilityLatch();
|
|
195
|
+
knipCommand = "knip";
|
|
196
|
+
ensureInFlight = null;
|
|
197
|
+
log;
|
|
198
|
+
/**
|
|
199
|
+
* De-dupe concurrent `analyze()` calls against the same project root.
|
|
200
|
+
*
|
|
201
|
+
* Without this guard, two back-to-back turn_end events (or a turn_end
|
|
202
|
+
* firing while the session_start scan is still in flight) can each spawn
|
|
203
|
+
* a fresh `knip` process over the same tree. Two concurrent knip
|
|
204
|
+
* runs are CPU-bound and cause the exact pathology we're fixing: load
|
|
205
|
+
* averages >5, TUI freezes, and zombie processes reparented to init
|
|
206
|
+
* after pi exits mid-scan.
|
|
207
|
+
*
|
|
208
|
+
* Key: canonicalised project root (not the caller's cwd). Value is the
|
|
209
|
+
* in-flight promise; completing clears the slot.
|
|
210
|
+
*/
|
|
211
|
+
inFlight = /* @__PURE__ */ new Map();
|
|
212
|
+
/**
|
|
213
|
+
* Per project root, the last run that died to a timeout or kill (#3872).
|
|
214
|
+
* Set where the scan SETTLES, so a scan turn_end abandoned at its budget and
|
|
215
|
+
* that later timed out still leaves the failure the next turn must see:
|
|
216
|
+
* the turn's own cache row only exists for a scan that settled inside it.
|
|
217
|
+
*/
|
|
218
|
+
hardFailures = new HardFailureStamps();
|
|
219
|
+
/**
|
|
220
|
+
* Per project root, how long its last two successful scans took (#3872).
|
|
221
|
+
* turn_end reads the shorter of the two to stop awaiting a scan that cannot
|
|
222
|
+
* fit the hook budget: the scan still runs (it re-measures, and warms knip's
|
|
223
|
+
* own cache), the hook just no longer waits for it. Two samples, because a
|
|
224
|
+
* session's first scan of a root is cold and its second is not (3.3 s then
|
|
225
|
+
* 1.3 s on pi-lens itself): one cold sample must not cost the next turn its
|
|
226
|
+
* advisory. A scan that failed, was killed or never completed is no sample.
|
|
227
|
+
* Cleared with the other per-session state.
|
|
228
|
+
*/
|
|
229
|
+
scanDurations = /* @__PURE__ */ new Map();
|
|
230
|
+
/** Last successful result per project and runtime content generation. */
|
|
231
|
+
completedByProject = /* @__PURE__ */ new Map();
|
|
232
|
+
/**
|
|
233
|
+
* (project root, binary, config) triples already recorded, so the toolchain
|
|
234
|
+
* row is written once per distinct resolution instead of once per run.
|
|
235
|
+
*/
|
|
236
|
+
recordedToolchains = /* @__PURE__ */ new Set();
|
|
237
|
+
constructor(verbose = false) {
|
|
238
|
+
this.log = verbose ? createSubsystemLogger("knip") : () => {
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
/** Re-arm content-keyed reuse at the session boundary. */
|
|
242
|
+
resetSessionState() {
|
|
243
|
+
this.completedByProject.clear();
|
|
244
|
+
this.hardFailures.clear();
|
|
245
|
+
this.scanDurations.clear();
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Find the nearest directory with a project/knip config marker.
|
|
249
|
+
*
|
|
250
|
+
* Returns `null` when no marker is found up to the filesystem root.
|
|
251
|
+
* Callers MUST treat a null return as "no project here, skip knip" —
|
|
252
|
+
* previously this fell back to `startDir`, which on a bare cwd like
|
|
253
|
+
* `/home/v` caused knip to recurse through every project and balloon
|
|
254
|
+
* memory/CPU.
|
|
255
|
+
*
|
|
256
|
+
* Delegates to the shared path-utils helper (refs #625) — never treats a
|
|
257
|
+
* package/knip config at or above $HOME as the project (escapes the
|
|
258
|
+
* workspace, #296/#250), and never walks past a `.git`/`.hg`/`.svn`
|
|
259
|
+
* boundary to pick up an unrelated parent's package.json (Unity/non-JS
|
|
260
|
+
* repos often have no package.json at their own root).
|
|
261
|
+
*/
|
|
262
|
+
resolveProjectRoot(startDir, homeDirOverride) {
|
|
263
|
+
return findNearestMarkerRoot(startDir, [
|
|
264
|
+
"package.json",
|
|
265
|
+
"knip.json",
|
|
266
|
+
"knip.ts",
|
|
267
|
+
"knip.config.js",
|
|
268
|
+
"knip.config.ts"
|
|
269
|
+
], { boundaries: [".git", ".hg", ".svn"], homeDir: homeDirOverride });
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* Check if knip CLI is available, auto-install if not.
|
|
273
|
+
*
|
|
274
|
+
* The memo returns `null` when the last verdict was transient and its
|
|
275
|
+
* cooldown has expired, which re-enters the probe. That is the difference
|
|
276
|
+
* between "knip is missing" (a fact worth caching) and "the probe timed out"
|
|
277
|
+
* (a moment worth retrying).
|
|
278
|
+
*/
|
|
279
|
+
async ensureAvailable() {
|
|
280
|
+
const memo = this.availabilityLatch.read();
|
|
281
|
+
if (memo !== null)
|
|
282
|
+
return memo;
|
|
283
|
+
if (this.ensureInFlight)
|
|
284
|
+
return this.ensureInFlight;
|
|
285
|
+
this.ensureInFlight = this.doEnsureAvailable();
|
|
286
|
+
try {
|
|
287
|
+
return await this.ensureInFlight;
|
|
288
|
+
} finally {
|
|
289
|
+
this.ensureInFlight = null;
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
async doEnsureAvailable() {
|
|
293
|
+
const cwd = process.cwd();
|
|
294
|
+
const resolved = await resolveAvailableOrInstall(this.knipAvailability, "knip", cwd);
|
|
295
|
+
if (resolved !== null) {
|
|
296
|
+
this.knipCommand = resolved;
|
|
297
|
+
this.availabilityLatch.noteAvailable();
|
|
298
|
+
return true;
|
|
299
|
+
}
|
|
300
|
+
const verdict = this.knipAvailability.getVerdict(cwd);
|
|
301
|
+
this.availabilityLatch.noteUnavailable(verdict.outcome ?? "missing", verdict.cause ?? "not-found");
|
|
302
|
+
return false;
|
|
303
|
+
}
|
|
304
|
+
/**
|
|
305
|
+
* The single place a knip-unavailable result is worded. A transient probe
|
|
306
|
+
* failure must never be reported as "install knip" — knip is on disk.
|
|
307
|
+
*/
|
|
308
|
+
unavailableResult() {
|
|
309
|
+
const verdict = this.knipAvailability.getVerdict(process.cwd());
|
|
310
|
+
const transient = verdict.outcome === "transient";
|
|
311
|
+
const retryAfterMs = verdict.retryAtMs ? Math.max(0, verdict.retryAtMs - Date.now()) : void 0;
|
|
312
|
+
return {
|
|
313
|
+
...EMPTY_RESULT,
|
|
314
|
+
failureKind: transient ? "unavailable-transient" : "unavailable-missing",
|
|
315
|
+
summary: describeUnavailability({
|
|
316
|
+
tool: "Knip",
|
|
317
|
+
installHint: "npm install -D knip",
|
|
318
|
+
outcome: verdict.outcome,
|
|
319
|
+
cause: verdict.cause,
|
|
320
|
+
elapsedMs: verdict.elapsedMs,
|
|
321
|
+
retryAfterMs
|
|
322
|
+
})
|
|
323
|
+
};
|
|
324
|
+
}
|
|
325
|
+
/**
|
|
326
|
+
* The summary of this root's last timeout or kill, while it is recent
|
|
327
|
+
* enough (30 minutes) to keep turn_end from launching another heavyweight
|
|
328
|
+
* knip (#1467, #3872); `null` when there is none. The root is resolved the
|
|
329
|
+
* way `analyze` resolves it, so a subdirectory and its project root agree.
|
|
330
|
+
*/
|
|
331
|
+
recentHardFailure(cwd) {
|
|
332
|
+
const key = this.resolveProjectRoot(cwd);
|
|
333
|
+
if (!key)
|
|
334
|
+
return null;
|
|
335
|
+
return this.hardFailures.recent(key);
|
|
336
|
+
}
|
|
337
|
+
/**
|
|
338
|
+
* The shorter of this root's last two successful scans, or `undefined` while
|
|
339
|
+
* fewer than two settled this session (#3872). The root is resolved the way
|
|
340
|
+
* `analyze` resolves it.
|
|
341
|
+
*/
|
|
342
|
+
scanFloorMs(cwd) {
|
|
343
|
+
const samples = this.scanDurations.get(this.resolveProjectRoot(cwd) ?? cwd);
|
|
344
|
+
return samples?.length === 2 ? Math.min(...samples) : void 0;
|
|
345
|
+
}
|
|
346
|
+
/** Linked worktrees nested under this root, which knip walks as project files (#3872). */
|
|
347
|
+
nestedWorktrees(cwd) {
|
|
348
|
+
return nestedWorktreeScope(this.resolveProjectRoot(cwd) ?? cwd).count;
|
|
349
|
+
}
|
|
350
|
+
/**
|
|
351
|
+
* Run knip analysis on the project.
|
|
352
|
+
*
|
|
353
|
+
* Async (uses `safeSpawnAsync`) so it never blocks the event loop —
|
|
354
|
+
* knip scans on large monorepos can take tens of seconds, and the
|
|
355
|
+
* previous `spawnSync` implementation froze the TUI for the entire
|
|
356
|
+
* duration.
|
|
357
|
+
*
|
|
358
|
+
* Re-entrancy safe: concurrent calls resolving to the same project
|
|
359
|
+
* root share a single knip process via `inFlight`.
|
|
360
|
+
*
|
|
361
|
+
* Successful memo hits validate package.json and the resolved Knip config
|
|
362
|
+
* with bounded metadata checks. The two statSync calls replace a 10-23
|
|
363
|
+
* second project scan. Source-only external edits remain undetected until
|
|
364
|
+
* pi observes a write or the session resets.
|
|
365
|
+
*/
|
|
366
|
+
async analyze(cwd, _ignore, options = {}) {
|
|
367
|
+
const targetDir = this.resolveProjectRoot(cwd || process.cwd());
|
|
368
|
+
if (!targetDir) {
|
|
369
|
+
this.log(`No project root found from ${cwd || process.cwd()}; skipping knip`);
|
|
370
|
+
return {
|
|
371
|
+
...EMPTY_RESULT,
|
|
372
|
+
success: true,
|
|
373
|
+
summary: "No project root found; knip skipped"
|
|
374
|
+
};
|
|
375
|
+
}
|
|
376
|
+
const key = path.resolve(targetDir);
|
|
377
|
+
const completed = this.completedByProject.get(key);
|
|
378
|
+
if (options.projectSeq !== void 0 && completed?.projectSeq === options.projectSeq && this.matchesMemoSignal(targetDir, completed.signal)) {
|
|
379
|
+
this.log(`Analysis cache hit for ${key} at projectSeq ${options.projectSeq}`);
|
|
380
|
+
return { ...completed.result, execution: "cache", analyzed: false };
|
|
381
|
+
}
|
|
382
|
+
if (resolveProjectKnipBinary(targetDir) === null && !await this.ensureAvailable()) {
|
|
383
|
+
return this.unavailableResult();
|
|
384
|
+
}
|
|
385
|
+
const existing = this.inFlight.get(key);
|
|
386
|
+
if (existing) {
|
|
387
|
+
this.log(`Analysis already in flight for ${key}; sharing result`);
|
|
388
|
+
return existing;
|
|
389
|
+
}
|
|
390
|
+
const startedAt = Date.now();
|
|
391
|
+
const promise = this.runAnalyze(key).then((result) => {
|
|
392
|
+
this.hardFailures.settle(key, result);
|
|
393
|
+
if (result.success) {
|
|
394
|
+
this.scanDurations.set(key, [
|
|
395
|
+
...(this.scanDurations.get(key) ?? []).slice(-1),
|
|
396
|
+
Date.now() - startedAt
|
|
397
|
+
]);
|
|
398
|
+
}
|
|
399
|
+
const executed = { ...result, execution: "executed" };
|
|
400
|
+
if (result.success && options.projectSeq !== void 0) {
|
|
401
|
+
this.completedByProject.set(key, {
|
|
402
|
+
projectSeq: options.projectSeq,
|
|
403
|
+
result: executed,
|
|
404
|
+
signal: this.readMemoSignal(key)
|
|
405
|
+
});
|
|
406
|
+
}
|
|
407
|
+
return executed;
|
|
408
|
+
});
|
|
409
|
+
const wrapped = promise.finally(() => {
|
|
410
|
+
if (this.inFlight.get(key) === wrapped)
|
|
411
|
+
this.inFlight.delete(key);
|
|
412
|
+
});
|
|
413
|
+
this.inFlight.set(key, wrapped);
|
|
414
|
+
return wrapped;
|
|
415
|
+
}
|
|
416
|
+
readMemoFileSignal(filePath) {
|
|
417
|
+
try {
|
|
418
|
+
const stat = fs.statSync(filePath);
|
|
419
|
+
return { path: filePath, mtimeMs: stat.mtimeMs, size: stat.size };
|
|
420
|
+
} catch {
|
|
421
|
+
return null;
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
readMemoSignal(targetDir) {
|
|
425
|
+
const config = resolveProjectKnipConfig(targetDir);
|
|
426
|
+
return {
|
|
427
|
+
packageJson: this.readMemoFileSignal(path.join(targetDir, "package.json")),
|
|
428
|
+
config: config && config !== "package.json#knip" ? this.readMemoFileSignal(path.join(targetDir, config)) : null
|
|
429
|
+
};
|
|
430
|
+
}
|
|
431
|
+
matchesMemoSignal(targetDir, signal) {
|
|
432
|
+
const current = {
|
|
433
|
+
packageJson: this.readMemoFileSignal(path.join(targetDir, "package.json")),
|
|
434
|
+
config: signal.config ? this.readMemoFileSignal(signal.config.path) : null
|
|
435
|
+
};
|
|
436
|
+
return JSON.stringify(current.packageJson) === JSON.stringify(signal.packageJson) && JSON.stringify(current.config) === JSON.stringify(signal.config);
|
|
437
|
+
}
|
|
438
|
+
async runAnalyze(targetDir) {
|
|
439
|
+
const scannedAt = (/* @__PURE__ */ new Date()).toISOString();
|
|
440
|
+
const cacheLocation = path.join(getProjectDataDir(targetDir), "cache", "knip");
|
|
441
|
+
try {
|
|
442
|
+
fs.mkdirSync(cacheLocation, { recursive: true });
|
|
443
|
+
} catch (err) {
|
|
444
|
+
this.log(`Failed to pre-create knip cache dir ${cacheLocation}: ${err}`);
|
|
445
|
+
}
|
|
446
|
+
this.pruneStaleGlobCache(cacheLocation);
|
|
447
|
+
const args = [
|
|
448
|
+
"--reporter=json",
|
|
449
|
+
"--include",
|
|
450
|
+
// enumMembers surfaces unused enum members — finer-grained than
|
|
451
|
+
// file-level exports. (knip 6.x has NO `classMembers` issue type; passing
|
|
452
|
+
// it makes knip exit 2 with zero output, silently disabling the scan —
|
|
453
|
+
// verified against knip 6.20. Valid member-level type here is enumMembers.)
|
|
454
|
+
"files,exports,types,dependencies,unlisted,enumMembers",
|
|
455
|
+
"--cache",
|
|
456
|
+
"--cache-location",
|
|
457
|
+
cacheLocation
|
|
458
|
+
];
|
|
459
|
+
const projectBinary = resolveProjectKnipBinary(targetDir);
|
|
460
|
+
const command = projectBinary ?? this.knipCommand;
|
|
461
|
+
this.recordToolchain(targetDir, command, classifyKnipBinary(projectBinary, targetDir));
|
|
462
|
+
const result = await safeSpawnAsync(command, args, {
|
|
463
|
+
timeout: ANALYSIS_TIMEOUT_MS,
|
|
464
|
+
cwd: targetDir,
|
|
465
|
+
env: await getManagedToolEnvironment("knip", targetDir)
|
|
466
|
+
});
|
|
467
|
+
if (result.error) {
|
|
468
|
+
this.log(`Analysis error: ${result.error.message}`);
|
|
469
|
+
return {
|
|
470
|
+
...EMPTY_RESULT,
|
|
471
|
+
summary: `Error: ${result.error.message}`
|
|
472
|
+
};
|
|
473
|
+
}
|
|
474
|
+
const output = result.stdout || "";
|
|
475
|
+
this.log(`Knip output length: ${output.length}, exit status: ${result.status}`);
|
|
476
|
+
if (output.length < 500) {
|
|
477
|
+
this.log(`Knip output sample: ${output}`);
|
|
478
|
+
}
|
|
479
|
+
if (!output.trim()) {
|
|
480
|
+
if (spawnFailedWithNoOutput(result, output)) {
|
|
481
|
+
const reason = formatToolFailure({
|
|
482
|
+
tool: "knip",
|
|
483
|
+
status: result.status,
|
|
484
|
+
signal: result.signal,
|
|
485
|
+
stderr: result.stderr,
|
|
486
|
+
fields: {
|
|
487
|
+
command,
|
|
488
|
+
source: classifyKnipBinary(projectBinary, targetDir)
|
|
489
|
+
}
|
|
490
|
+
});
|
|
491
|
+
this.log(reason);
|
|
492
|
+
incrementDegradationCount({
|
|
493
|
+
kind: "runner-empty-result",
|
|
494
|
+
subject: "knip",
|
|
495
|
+
reason
|
|
496
|
+
});
|
|
497
|
+
return {
|
|
498
|
+
...EMPTY_RESULT,
|
|
499
|
+
summary: `Knip exited ${result.status} with no output; run skipped`
|
|
500
|
+
};
|
|
501
|
+
}
|
|
502
|
+
return {
|
|
503
|
+
...EMPTY_RESULT,
|
|
504
|
+
success: true,
|
|
505
|
+
summary: "No issues found"
|
|
506
|
+
};
|
|
507
|
+
}
|
|
508
|
+
return {
|
|
509
|
+
...this.dropOverridePinnedDeps(this.parseOutput(output, nestedWorktreeScope(targetDir)), targetDir),
|
|
510
|
+
scannedAt
|
|
511
|
+
};
|
|
512
|
+
}
|
|
513
|
+
/**
|
|
514
|
+
* Record WHICH knip a run used and WHICH config it ran under (#1721).
|
|
515
|
+
*
|
|
516
|
+
* The dogfood failure this fixes was invisible from the outside: the lens
|
|
517
|
+
* reported 62 unused type exports and the project's own `npx knip` reported
|
|
518
|
+
* none, with nothing in any log to say the two ran different binaries. This
|
|
519
|
+
* row is that missing evidence — it names the shim, its version, the config
|
|
520
|
+
* knip will discover, and whether the shim came from the project or from
|
|
521
|
+
* pi-lens.
|
|
522
|
+
*
|
|
523
|
+
* Bounded twice over: one row per distinct (project root, binary, config)
|
|
524
|
+
* triple, and at most `MAX_RECORDED_TOOLCHAINS` distinct triples per client.
|
|
525
|
+
* Steady-state cost is therefore one line per project per session, not one
|
|
526
|
+
* per turn_end.
|
|
527
|
+
*/
|
|
528
|
+
recordToolchain(targetDir, command, source) {
|
|
529
|
+
const config = resolveProjectKnipConfig(targetDir);
|
|
530
|
+
const key = `${targetDir} ${command} ${config ?? ""}`;
|
|
531
|
+
if (this.recordedToolchains.has(key))
|
|
532
|
+
return;
|
|
533
|
+
if (this.recordedToolchains.size >= MAX_RECORDED_TOOLCHAINS)
|
|
534
|
+
return;
|
|
535
|
+
this.recordedToolchains.add(key);
|
|
536
|
+
const version = readKnipShimVersion(command);
|
|
537
|
+
logSessionStart(`knip toolchain ${targetDir}: binary=${command}${version ? ` version=${version}` : ""} source=${source} config=${config ?? "none (knip defaults)"}`);
|
|
538
|
+
}
|
|
539
|
+
/**
|
|
540
|
+
* Delete knip's glob cache (`glob-<version>.cache`) before every run (#1630).
|
|
541
|
+
*
|
|
542
|
+
* knip revalidates a cached glob against the mtimes of the directories that
|
|
543
|
+
* contributed a matched path. Directories that matched nothing are never
|
|
544
|
+
* recorded, so files later added to them stay invisible and knip keeps
|
|
545
|
+
* reporting an export as unused after a new consumer imports it. Removing
|
|
546
|
+
* this one file forces a fresh file walk while the module and plugin caches —
|
|
547
|
+
* which carry nearly all of the cache's speed — survive.
|
|
548
|
+
*
|
|
549
|
+
* Failures are logged and ignored: a glob cache we could not delete degrades
|
|
550
|
+
* to the pre-#1630 behavior, which is stale but not fatal.
|
|
551
|
+
*/
|
|
552
|
+
pruneStaleGlobCache(cacheLocation) {
|
|
553
|
+
let entries;
|
|
554
|
+
try {
|
|
555
|
+
entries = fs.readdirSync(cacheLocation);
|
|
556
|
+
} catch (err) {
|
|
557
|
+
this.log(`Failed to read knip cache dir ${cacheLocation}: ${err}`);
|
|
558
|
+
return;
|
|
559
|
+
}
|
|
560
|
+
for (const entry of entries) {
|
|
561
|
+
if (!entry.startsWith("glob-") || !entry.endsWith(".cache"))
|
|
562
|
+
continue;
|
|
563
|
+
try {
|
|
564
|
+
fs.rmSync(path.join(cacheLocation, entry), { force: true });
|
|
565
|
+
this.log(`Pruned knip glob cache ${entry}`);
|
|
566
|
+
} catch (err) {
|
|
567
|
+
this.log(`Failed to prune knip glob cache ${entry}: ${err}`);
|
|
568
|
+
}
|
|
569
|
+
}
|
|
570
|
+
}
|
|
571
|
+
/**
|
|
572
|
+
* Drop `dependency`/`devDependency` issues for a package that's also
|
|
573
|
+
* referenced as an npm `overrides` (or Yarn `resolutions` / pnpm
|
|
574
|
+
* `pnpm.overrides`) key in this project's `package.json` (#968).
|
|
575
|
+
*
|
|
576
|
+
* A direct devDependency whose only job is pinning a vulnerable
|
|
577
|
+
* transitive/peer resolution has no source import — that's WORKING AS
|
|
578
|
+
* INTENDED, not dead code, and knip has no concept of "this dependency
|
|
579
|
+
* exists only to satisfy an overrides entry" (it only sees imports).
|
|
580
|
+
* `overrides`/`resolutions` are the project's own explicit, unambiguous
|
|
581
|
+
* signal that the package is deliberately present — the same class of
|
|
582
|
+
* signal `hardcoded-url`'s `SCREAMING_SNAKE_CASE` constant-name carve-out
|
|
583
|
+
* and `ts-ssrf`'s constant-identifier carve-out lean on elsewhere in this
|
|
584
|
+
* codebase — so this narrows the finding rather than suppressing
|
|
585
|
+
* `dependency`/`devDependency` issues wholesale: a devDependency that
|
|
586
|
+
* ISN'T also an overrides/resolutions key is still reported.
|
|
587
|
+
*/
|
|
588
|
+
dropOverridePinnedDeps(result, targetDir) {
|
|
589
|
+
if (result.unusedDeps.length === 0)
|
|
590
|
+
return result;
|
|
591
|
+
const pinned = readOverridePinnedPackageNames(targetDir);
|
|
592
|
+
if (pinned.size === 0)
|
|
593
|
+
return result;
|
|
594
|
+
const isPinnedDepIssue = (issue) => (issue.type === "dependency" || issue.type === "devDependency") && (pinned.has(issue.name) || !!issue.package && pinned.has(issue.package));
|
|
595
|
+
const issues = result.issues.filter((issue) => !isPinnedDepIssue(issue));
|
|
596
|
+
const unusedDeps = result.unusedDeps.filter((issue) => !isPinnedDepIssue(issue));
|
|
597
|
+
return unusedDeps.length === result.unusedDeps.length ? result : { ...result, issues, unusedDeps };
|
|
598
|
+
}
|
|
599
|
+
/**
|
|
600
|
+
* Find unused exports in a specific file
|
|
601
|
+
*/
|
|
602
|
+
async findUnusedExports(filePath) {
|
|
603
|
+
const result = await this.analyze(path.dirname(filePath));
|
|
604
|
+
const basename2 = path.basename(filePath);
|
|
605
|
+
return result.unusedExports.filter((e) => e.file?.includes(basename2)).map((e) => e.name);
|
|
606
|
+
}
|
|
607
|
+
/**
|
|
608
|
+
* Format results for LLM consumption. Delegates to the pure
|
|
609
|
+
* `formatKnipResult` so callers (e.g. turn-end) can format without a live
|
|
610
|
+
* client instance.
|
|
611
|
+
*/
|
|
612
|
+
formatResult(result, maxItems = 20) {
|
|
613
|
+
return formatKnipResult(result, maxItems);
|
|
614
|
+
}
|
|
615
|
+
// --- Internal ---
|
|
616
|
+
parseOutput(output, nested = NO_NESTED_WORKTREES) {
|
|
617
|
+
try {
|
|
618
|
+
const data = JSON.parse(output);
|
|
619
|
+
const issues = [];
|
|
620
|
+
const unusedExports = [];
|
|
621
|
+
const unusedFiles = [];
|
|
622
|
+
const unusedDeps = [];
|
|
623
|
+
const unlistedDeps = [];
|
|
624
|
+
const droppedFiles = /* @__PURE__ */ new Set();
|
|
625
|
+
const addIssue = (issue) => {
|
|
626
|
+
if (nested.contains(issue.file)) {
|
|
627
|
+
droppedFiles.add(issue.file ?? "");
|
|
628
|
+
return;
|
|
629
|
+
}
|
|
630
|
+
issues.push(issue);
|
|
631
|
+
if (issue.type === "export" || issue.type === "enumMember") {
|
|
632
|
+
unusedExports.push(issue);
|
|
633
|
+
}
|
|
634
|
+
if (issue.type === "file")
|
|
635
|
+
unusedFiles.push(issue);
|
|
636
|
+
if (issue.type === "dependency" || issue.type === "devDependency") {
|
|
637
|
+
unusedDeps.push(issue);
|
|
638
|
+
}
|
|
639
|
+
if (issue.type === "unlisted" || issue.type === "bin") {
|
|
640
|
+
unlistedDeps.push(issue);
|
|
641
|
+
}
|
|
642
|
+
};
|
|
643
|
+
const fileEntries = Array.isArray(data?.issues) ? data.issues : [];
|
|
644
|
+
for (const entry of fileEntries) {
|
|
645
|
+
const file = entry.file ?? "";
|
|
646
|
+
const push = (arr, type, _target) => {
|
|
647
|
+
for (const item of arr) {
|
|
648
|
+
addIssue({
|
|
649
|
+
type,
|
|
650
|
+
name: item.name ?? item.symbol ?? String(item),
|
|
651
|
+
file,
|
|
652
|
+
line: item.line,
|
|
653
|
+
package: item.package
|
|
654
|
+
});
|
|
655
|
+
}
|
|
656
|
+
};
|
|
657
|
+
push(entry.exports ?? [], "export", unusedExports);
|
|
658
|
+
push(entry.types ?? [], "export", unusedExports);
|
|
659
|
+
push(entry.enumMembers ?? [], "enumMember", unusedExports);
|
|
660
|
+
push(entry.files ?? [], "file", unusedFiles);
|
|
661
|
+
push(entry.dependencies ?? [], "dependency", unusedDeps);
|
|
662
|
+
push(entry.devDependencies ?? [], "devDependency", unusedDeps);
|
|
663
|
+
push(entry.unlisted ?? [], "unlisted", unlistedDeps);
|
|
664
|
+
push(entry.binaries ?? [], "bin", unlistedDeps);
|
|
665
|
+
}
|
|
666
|
+
if (issues.length === 0 && Array.isArray(data)) {
|
|
667
|
+
for (const item of data) {
|
|
668
|
+
if (!item || typeof item !== "object")
|
|
669
|
+
continue;
|
|
670
|
+
const rawType = String(item.type ?? item.issueType ?? item.kind ?? "file").toLowerCase();
|
|
671
|
+
const type = rawType === "export" || rawType === "exports" ? "export" : rawType === "dependency" ? "dependency" : rawType === "devdependency" ? "devDependency" : rawType === "unlisted" ? "unlisted" : rawType === "bin" || rawType === "binaries" ? "bin" : "file";
|
|
672
|
+
addIssue({
|
|
673
|
+
type,
|
|
674
|
+
name: String(item.name ?? item.symbol ?? item.package ?? item.message ?? "unknown"),
|
|
675
|
+
file: item.file ?? item.path ?? item.location?.file,
|
|
676
|
+
line: item.line ?? item.location?.line,
|
|
677
|
+
package: item.package
|
|
678
|
+
});
|
|
679
|
+
}
|
|
680
|
+
}
|
|
681
|
+
return {
|
|
682
|
+
success: true,
|
|
683
|
+
// #2154: the one knip site that parsed a scan of this root.
|
|
684
|
+
analyzed: true,
|
|
685
|
+
issues,
|
|
686
|
+
unusedExports,
|
|
687
|
+
unusedFiles,
|
|
688
|
+
unusedDeps,
|
|
689
|
+
unlistedDeps,
|
|
690
|
+
summary: `Found ${issues.length} issues`,
|
|
691
|
+
...nested.count > 0 && {
|
|
692
|
+
nestedWorktrees: nested.count,
|
|
693
|
+
nestedFilesDropped: droppedFiles.size
|
|
694
|
+
}
|
|
695
|
+
};
|
|
696
|
+
} catch (err) {
|
|
697
|
+
void err;
|
|
698
|
+
this.log("Failed to parse knip JSON output");
|
|
699
|
+
return {
|
|
700
|
+
...EMPTY_RESULT,
|
|
701
|
+
summary: "Failed to parse output"
|
|
702
|
+
};
|
|
703
|
+
}
|
|
704
|
+
}
|
|
705
|
+
};
|
|
706
|
+
function formatKnipResult(result, maxItems = 20) {
|
|
707
|
+
if (!result.success)
|
|
708
|
+
return `[Knip] ${result.summary}`;
|
|
709
|
+
if (result.issues.length === 0)
|
|
710
|
+
return "";
|
|
711
|
+
let output = `[Knip] ${result.issues.length} issue(s)`;
|
|
712
|
+
if (result.unusedExports.length)
|
|
713
|
+
output += ` \u2014 ${result.unusedExports.length} unused export(s)`;
|
|
714
|
+
if (result.unusedFiles.length)
|
|
715
|
+
output += ` \u2014 ${result.unusedFiles.length} unused file(s)`;
|
|
716
|
+
if (result.unusedDeps.length)
|
|
717
|
+
output += ` \u2014 ${result.unusedDeps.length} unused dep(s)`;
|
|
718
|
+
if (result.unlistedDeps.length)
|
|
719
|
+
output += ` \u2014 ${result.unlistedDeps.length} unlisted dep(s)`;
|
|
720
|
+
output += ":\n";
|
|
721
|
+
if (result.unusedExports.length > 0) {
|
|
722
|
+
output += "\n Unused exports:\n";
|
|
723
|
+
for (const issue of result.unusedExports.slice(0, maxItems)) {
|
|
724
|
+
const loc = issue.file ? ` (${path.basename(issue.file)})` : "";
|
|
725
|
+
output += ` - ${issue.name}${loc}
|
|
726
|
+
`;
|
|
727
|
+
}
|
|
728
|
+
if (result.unusedExports.length > maxItems) {
|
|
729
|
+
output += ` ... and ${result.unusedExports.length - maxItems} more
|
|
730
|
+
`;
|
|
731
|
+
}
|
|
732
|
+
}
|
|
733
|
+
if (result.unusedFiles.length > 0) {
|
|
734
|
+
output += "\n Unused files:\n";
|
|
735
|
+
for (const issue of result.unusedFiles.slice(0, 10)) {
|
|
736
|
+
output += ` - ${issue.name}
|
|
737
|
+
`;
|
|
738
|
+
}
|
|
739
|
+
}
|
|
740
|
+
if (result.unusedDeps.length > 0) {
|
|
741
|
+
output += "\n Unused dependencies:\n";
|
|
742
|
+
for (const issue of result.unusedDeps) {
|
|
743
|
+
output += ` - ${issue.package || issue.name}
|
|
744
|
+
`;
|
|
745
|
+
}
|
|
746
|
+
}
|
|
747
|
+
return output;
|
|
748
|
+
}
|
|
749
|
+
export {
|
|
750
|
+
KnipClient,
|
|
751
|
+
classifyKnipBinary,
|
|
752
|
+
formatKnipResult,
|
|
753
|
+
readOverridePinnedPackageNames,
|
|
754
|
+
resolveProjectKnipBinary,
|
|
755
|
+
resolveProjectKnipConfig
|
|
756
|
+
};
|