@herbertgao/pi-extensions 2026.10.1 → 2026.10.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -9
- package/THIRD_PARTY_NOTICES.md +2 -2
- package/node_modules/@dietrichgebert/ponytail/.opencode/command/ponytail-audit.md +2 -2
- package/node_modules/@dietrichgebert/ponytail/.opencode/command/ponytail-debt.md +2 -2
- package/node_modules/@dietrichgebert/ponytail/.opencode/command/ponytail-gain.md +1 -1
- package/node_modules/@dietrichgebert/ponytail/.opencode/command/ponytail-help.md +1 -1
- package/node_modules/@dietrichgebert/ponytail/.opencode/command/ponytail-review.md +2 -2
- package/node_modules/@dietrichgebert/ponytail/.opencode/command/ponytail.md +1 -1
- package/node_modules/@dietrichgebert/ponytail/.qoder/rules/ponytail.md +21 -21
- package/node_modules/@dietrichgebert/ponytail/.qoder-plugin/plugin.json +1 -1
- package/node_modules/@dietrichgebert/ponytail/AGENTS.md +21 -21
- package/node_modules/@dietrichgebert/ponytail/README.md +68 -72
- package/node_modules/@dietrichgebert/ponytail/hooks/ponytail-activate.js +7 -0
- package/node_modules/@dietrichgebert/ponytail/hooks/ponytail-instructions.js +30 -30
- package/node_modules/@dietrichgebert/ponytail/hooks/ponytail-map.js +103 -0
- package/node_modules/@dietrichgebert/ponytail/package.json +2 -2
- package/node_modules/@dietrichgebert/ponytail/skills/ponytail/SKILL.md +33 -101
- package/node_modules/@dietrichgebert/ponytail/skills/ponytail-audit/SKILL.md +89 -32
- package/node_modules/@dietrichgebert/ponytail/skills/ponytail-debt/SKILL.md +13 -12
- package/node_modules/@dietrichgebert/ponytail/skills/ponytail-gain/SKILL.md +17 -16
- package/node_modules/@dietrichgebert/ponytail/skills/ponytail-help/SKILL.md +9 -10
- package/node_modules/@dietrichgebert/ponytail/skills/ponytail-review/SKILL.md +96 -57
- package/node_modules/@herbertgao/pi-agency/LICENSE +21 -0
- package/node_modules/@herbertgao/pi-agency/README.md +40 -0
- package/node_modules/@herbertgao/pi-agency/package.json +53 -0
- package/node_modules/@herbertgao/pi-agency/src/index.ts +441 -0
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/feature/compact-thinking.ts +12 -12
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/compact-mode.ts +30 -6
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/default-mode.ts +15 -9
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/mouse/interaction.ts +27 -9
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/codemode.ts +4 -1
- package/node_modules/@herbertgao/pi-cc-extensions/package.json +2 -2
- package/node_modules/@narumitw/pi-caffeinate/package.json +3 -3
- package/node_modules/@tifan/pi-mermaid-open/package.json +5 -1
- package/node_modules/@tifan/pi-mermaid-open/src/index.ts +26 -9
- package/node_modules/@tifan/pi-recap/package.json +1 -1
- package/node_modules/@tifan/pi-recap/src/index.ts +104 -20
- package/node_modules/@tifan/pi-recap/src/models.ts +46 -4
- package/node_modules/pi-antigravity/README.md +23 -2
- package/node_modules/pi-antigravity/package.json +5 -3
- package/node_modules/pi-antigravity/src/diagnostics/diagnostics.ts +3 -2
- package/node_modules/pi-antigravity/src/features/generate-image.ts +72 -0
- package/node_modules/pi-antigravity/src/features/google-search.ts +71 -0
- package/node_modules/pi-antigravity/src/image/image.ts +86 -47
- package/node_modules/pi-antigravity/src/image/native.ts +69 -0
- package/node_modules/pi-antigravity/src/index.ts +52 -137
- package/node_modules/pi-antigravity/src/search/search.ts +130 -31
- package/node_modules/pi-antigravity/src/stream/stream.ts +162 -113
- package/node_modules/pi-antigravity/src/types/enums.ts +1 -0
- package/node_modules/pi-antigravity/src/types/types.ts +1 -1
- package/node_modules/pi-antigravity/src/utils/security.ts +47 -1
- package/node_modules/pi-antigravity/src/utils/util.ts +38 -6
- package/node_modules/pi-lens/CHANGELOG.md +1064 -0
- package/node_modules/pi-lens/README.md +115 -25
- package/node_modules/pi-lens/config/dependency-cruiser-eager-allowlist.json +6 -2
- package/node_modules/pi-lens/dist/chunk-22AVIGXS.js +560 -0
- package/node_modules/pi-lens/dist/chunk-27BBHSZC.js +106 -0
- package/node_modules/pi-lens/dist/chunk-2BEMIWEW.js +51 -0
- package/node_modules/pi-lens/dist/chunk-2EECBNC5.js +89 -0
- package/node_modules/pi-lens/dist/chunk-34U7PLGE.js +23 -0
- package/node_modules/pi-lens/dist/chunk-3I5QFT3N.js +181 -0
- package/node_modules/pi-lens/dist/chunk-3MED75HT.js +37 -0
- package/node_modules/pi-lens/dist/chunk-47D2BO4S.js +87 -0
- package/node_modules/pi-lens/dist/chunk-4RERDEXR.js +348 -0
- package/node_modules/pi-lens/dist/chunk-4W2PLC4J.js +27 -0
- package/node_modules/pi-lens/dist/chunk-52H5B5TC.js +202 -0
- package/node_modules/pi-lens/dist/chunk-54B42YRX.js +27 -0
- package/node_modules/pi-lens/dist/chunk-5RXBNSW2.js +266 -0
- package/node_modules/pi-lens/dist/chunk-5THXD6X5.js +201 -0
- package/node_modules/pi-lens/dist/chunk-5W3R6LFT.js +24 -0
- package/node_modules/pi-lens/dist/chunk-5ZEJHV35.js +341 -0
- package/node_modules/pi-lens/dist/chunk-6P62QVEA.js +118 -0
- package/node_modules/pi-lens/dist/chunk-6QIUX4EP.js +459 -0
- package/node_modules/pi-lens/dist/chunk-6VCD4VKZ.js +78 -0
- package/node_modules/pi-lens/dist/chunk-7F72PXY2.js +326 -0
- package/node_modules/pi-lens/dist/chunk-7FBF7NPR.js +998 -0
- package/node_modules/pi-lens/dist/chunk-7U2IDNXN.js +37 -0
- package/node_modules/pi-lens/dist/chunk-ABBOA7UD.js +157 -0
- package/node_modules/pi-lens/dist/chunk-AHDW3GPE.js +50 -0
- package/node_modules/pi-lens/dist/chunk-AJ3QXTRQ.js +756 -0
- package/node_modules/pi-lens/dist/chunk-AJVLWNFN.js +1610 -0
- package/node_modules/pi-lens/dist/chunk-AJXODZY6.js +112 -0
- package/node_modules/pi-lens/dist/chunk-ARFCXG7S.js +84 -0
- package/node_modules/pi-lens/dist/chunk-AS44CFQ4.js +708 -0
- package/node_modules/pi-lens/dist/chunk-AWE5TMPO.js +38 -0
- package/node_modules/pi-lens/dist/chunk-B3I2UUT4.js +4692 -0
- package/node_modules/pi-lens/dist/chunk-BRJKOBZP.js +331 -0
- package/node_modules/pi-lens/dist/chunk-BW5KFIQC.js +59 -0
- package/node_modules/pi-lens/dist/chunk-C2AUYXQH.js +149 -0
- package/node_modules/pi-lens/dist/chunk-CGGAIP7J.js +29 -0
- package/node_modules/pi-lens/dist/chunk-D6QS3U6M.js +30 -0
- package/node_modules/pi-lens/dist/chunk-DFVMIKMQ.js +349 -0
- package/node_modules/pi-lens/dist/chunk-DIULIWKU.js +169 -0
- package/node_modules/pi-lens/dist/chunk-DQ2NZ7C4.js +2317 -0
- package/node_modules/pi-lens/dist/chunk-E2WFBRHM.js +213 -0
- package/node_modules/pi-lens/dist/chunk-E4MAEDPM.js +50 -0
- package/node_modules/pi-lens/dist/chunk-EOKRQ3SA.js +30 -0
- package/node_modules/pi-lens/dist/chunk-F3AU2TMM.js +2626 -0
- package/node_modules/pi-lens/dist/chunk-F3P7VQ7H.js +170 -0
- package/node_modules/pi-lens/dist/chunk-FC4RP4I2.js +12 -0
- package/node_modules/pi-lens/dist/chunk-FJNKANOS.js +32 -0
- package/node_modules/pi-lens/dist/chunk-GUOGVTCQ.js +146 -0
- package/node_modules/pi-lens/dist/chunk-GVXA6CCE.js +18 -0
- package/node_modules/pi-lens/dist/chunk-HHYAELLJ.js +2334 -0
- package/node_modules/pi-lens/dist/chunk-HMFXILPV.js +83 -0
- package/node_modules/pi-lens/dist/chunk-HVUZXSWK.js +421 -0
- package/node_modules/pi-lens/dist/chunk-HWBZIGMJ.js +62 -0
- package/node_modules/pi-lens/dist/chunk-I3R7GKDR.js +17 -0
- package/node_modules/pi-lens/dist/chunk-I7SPGOWI.js +55 -0
- package/node_modules/pi-lens/dist/chunk-IIXOAGHR.js +38 -0
- package/node_modules/pi-lens/dist/chunk-IVP5KAB7.js +2250 -0
- package/node_modules/pi-lens/dist/chunk-IXEBJSUE.js +22 -0
- package/node_modules/pi-lens/dist/chunk-JOLITGCC.js +27 -0
- package/node_modules/pi-lens/dist/chunk-K6VYLB2U.js +145 -0
- package/node_modules/pi-lens/dist/chunk-LJDODBBZ.js +78 -0
- package/node_modules/pi-lens/dist/chunk-LNAKEO63.js +78 -0
- package/node_modules/pi-lens/dist/chunk-LSMJ6KBE.js +4139 -0
- package/node_modules/pi-lens/dist/chunk-LW6XKDZQ.js +5565 -0
- package/node_modules/pi-lens/dist/chunk-N3YQJI6O.js +899 -0
- package/node_modules/pi-lens/dist/chunk-NABLC7W3.js +148 -0
- package/node_modules/pi-lens/dist/chunk-NKOUFPQF.js +659 -0
- package/node_modules/pi-lens/dist/chunk-NL5GLMFI.js +211 -0
- package/node_modules/pi-lens/dist/chunk-NMABWBZN.js +327 -0
- package/node_modules/pi-lens/dist/chunk-NTHH2J74.js +27 -0
- package/node_modules/pi-lens/dist/chunk-NTUJEGDZ.js +59 -0
- package/node_modules/pi-lens/dist/chunk-NXL4FFQQ.js +47 -0
- package/node_modules/pi-lens/dist/chunk-NXPS2L6U.js +466 -0
- package/node_modules/pi-lens/dist/chunk-O5WILGMI.js +42 -0
- package/node_modules/pi-lens/dist/chunk-O6TQT6RI.js +48 -0
- package/node_modules/pi-lens/dist/chunk-OAXNDZJ7.js +323 -0
- package/node_modules/pi-lens/dist/chunk-ODEEOXPH.js +44 -0
- package/node_modules/pi-lens/dist/chunk-OQGFCZJ4.js +4533 -0
- package/node_modules/pi-lens/dist/chunk-ORTMY4Q4.js +282 -0
- package/node_modules/pi-lens/dist/chunk-OS32RNR2.js +442 -0
- package/node_modules/pi-lens/dist/chunk-PAK6IDME.js +189 -0
- package/node_modules/pi-lens/dist/chunk-PWFHBTSF.js +406 -0
- package/node_modules/pi-lens/dist/chunk-Q5U6FMDI.js +2352 -0
- package/node_modules/pi-lens/dist/chunk-QOZXJ4NA.js +3364 -0
- package/node_modules/pi-lens/dist/chunk-QYF5S6P6.js +45 -0
- package/node_modules/pi-lens/dist/chunk-RIISMHKN.js +36 -0
- package/node_modules/pi-lens/dist/chunk-RPD4ZSB7.js +25 -0
- package/node_modules/pi-lens/dist/chunk-RPD5K5NC.js +79 -0
- package/node_modules/pi-lens/dist/chunk-RUOG5D2C.js +262 -0
- package/node_modules/pi-lens/dist/chunk-T4ERT73Y.js +599 -0
- package/node_modules/pi-lens/dist/chunk-T6D4Q4AQ.js +54 -0
- package/node_modules/pi-lens/dist/chunk-TGPXLY2J.js +391 -0
- package/node_modules/pi-lens/dist/chunk-TLGFBM3F.js +12116 -0
- package/node_modules/pi-lens/dist/chunk-TO6WL3GM.js +88 -0
- package/node_modules/pi-lens/dist/chunk-TT22N74J.js +517 -0
- package/node_modules/pi-lens/dist/chunk-TVN5N6GY.js +21216 -0
- package/node_modules/pi-lens/dist/chunk-U3VGR4VU.js +308 -0
- package/node_modules/pi-lens/dist/chunk-UK3CMEAL.js +1250 -0
- package/node_modules/pi-lens/dist/chunk-UOPVJQ4N.js +103 -0
- package/node_modules/pi-lens/dist/chunk-UXVNL3D7.js +23 -0
- package/node_modules/pi-lens/dist/chunk-UY752QSN.js +45 -0
- package/node_modules/pi-lens/dist/chunk-V5PXFSZK.js +188 -0
- package/node_modules/pi-lens/dist/chunk-V7R425XG.js +398 -0
- package/node_modules/pi-lens/dist/chunk-VCSRSYLF.js +81 -0
- package/node_modules/pi-lens/dist/chunk-VD4JQCQC.js +162 -0
- package/node_modules/pi-lens/dist/chunk-VDBPVIKD.js +62 -0
- package/node_modules/pi-lens/dist/chunk-VHQLPIRJ.js +114 -0
- package/node_modules/pi-lens/dist/chunk-VN2AXLEX.js +5414 -0
- package/node_modules/pi-lens/dist/chunk-VNMT7C64.js +478 -0
- package/node_modules/pi-lens/dist/chunk-WONERJTP.js +309 -0
- package/node_modules/pi-lens/dist/chunk-XECLWQZN.js +85 -0
- package/node_modules/pi-lens/dist/chunk-XIMYZ3JA.js +27 -0
- package/node_modules/pi-lens/dist/chunk-XK4CIILI.js +144 -0
- package/node_modules/pi-lens/dist/chunk-Y4T27COV.js +562 -0
- package/node_modules/pi-lens/dist/chunk-YGVYKNSN.js +1860 -0
- package/node_modules/pi-lens/dist/chunk-YLF3PPT5.js +308 -0
- package/node_modules/pi-lens/dist/chunk-YSNFMJKN.js +14 -0
- package/node_modules/pi-lens/dist/chunk-Z3CCVDUB.js +76 -0
- package/node_modules/pi-lens/dist/chunk-Z54ZSOBZ.js +61 -0
- package/node_modules/pi-lens/dist/chunk-ZAWW3AF6.js +97 -0
- package/node_modules/pi-lens/dist/chunk-ZMOL6RQC.js +167 -0
- package/node_modules/pi-lens/dist/index.js +16456 -8335
- package/node_modules/pi-lens/dist/mcp/analyze-cli.js +186 -232
- package/node_modules/pi-lens/dist/mcp/cli.js +137 -98
- package/node_modules/pi-lens/dist/mcp/server.js +22589 -1573
- package/node_modules/pi-lens/dist/mcp/worker.js +97 -38
- package/node_modules/pi-lens/dist/probes/installer.js +135 -0
- package/node_modules/pi-lens/dist/workers/project-snapshot-persist-worker.js +22 -0
- package/node_modules/pi-lens/dist/workers/review-graph-persist-worker.js +15 -0
- package/node_modules/pi-lens/docs/agent-guide.md +13 -4
- package/node_modules/pi-lens/docs/agent-tools.md +42 -0
- package/node_modules/pi-lens/docs/ast-grep_rules_catalog.md +3 -2
- package/node_modules/pi-lens/docs/configuration.md +20 -1
- package/node_modules/pi-lens/docs/environment-variables.md +52 -2
- package/node_modules/pi-lens/docs/features.md +8 -4
- package/node_modules/pi-lens/docs/globalconfig.md +1 -0
- package/node_modules/pi-lens/docs/io-bridge-v2-migration.md +94 -0
- package/node_modules/pi-lens/docs/lsp-capability-matrix.md +36 -4
- package/node_modules/pi-lens/docs/lsp-idle-eviction.md +124 -0
- package/node_modules/pi-lens/docs/mcp.md +21 -5
- package/node_modules/pi-lens/docs/merge-queue-rollout.md +77 -0
- package/node_modules/pi-lens/docs/pi-lens-fixer.md +156 -88
- package/node_modules/pi-lens/docs/pi-lens-investigator.md +74 -26
- package/node_modules/pi-lens/docs/pi-lens-merge-policy.md +694 -0
- package/node_modules/pi-lens/docs/pi-lens-monitor.md +73 -7
- package/node_modules/pi-lens/docs/pi-lens-retro.md +6 -4
- package/node_modules/pi-lens/docs/pi-lens-reviewer.md +188 -48
- package/node_modules/pi-lens/docs/pi-lens-subagent.md +246 -45
- package/node_modules/pi-lens/docs/pi-lens-warden.md +18 -7
- package/node_modules/pi-lens/docs/public-api-stability.md +55 -0
- package/node_modules/pi-lens/docs/release-qa-baseline.md +84 -17
- package/node_modules/pi-lens/docs/rfcs/3654-unified-io-bridge-v2.md +316 -0
- package/node_modules/pi-lens/docs/servercapabilities.md +53 -49
- package/node_modules/pi-lens/docs/settings.md +1 -0
- package/node_modules/pi-lens/docs/usage.md +5 -1
- package/node_modules/pi-lens/grammars/tree-sitter-bash.wasm +0 -0
- package/node_modules/pi-lens/grammars/tree-sitter-bash.wasm.json +3 -3
- package/node_modules/pi-lens/package.json +18 -6
- package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/advisory-registry-subset-test.yml +41 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/advisory-registry-subset.yml +50 -0
- package/node_modules/pi-lens/scripts/analyze-pi-lens-logs.mjs +1275 -62
- package/node_modules/pi-lens/scripts/download-grammars.js +5 -0
- package/node_modules/pi-lens/scripts/grammars.lock.json +6 -1
- package/node_modules/pi-lens/scripts/install-selftest.mjs +33 -34
- package/node_modules/pi-lens/scripts/lib/host-provided-deps.mjs +13 -4
- package/node_modules/pi-lens/scripts/lib/web-tree-sitter-dir.mjs +18 -0
- package/package.json +15 -10
- package/node_modules/@dietrichgebert/ponytail/README.es.md +0 -212
- package/node_modules/@dietrichgebert/ponytail/README.ja.md +0 -212
- package/node_modules/@dietrichgebert/ponytail/README.ko.md +0 -212
- package/node_modules/@dietrichgebert/ponytail/README.zh-CN.md +0 -212
- package/node_modules/pi-lens/dist/clients/actionable-warnings-logger.js +0 -35
- package/node_modules/pi-lens/dist/clients/actionable-warnings.js +0 -1610
- package/node_modules/pi-lens/dist/clients/advisory-provenance.js +0 -593
- package/node_modules/pi-lens/dist/clients/agent-behavior-client.js +0 -147
- package/node_modules/pi-lens/dist/clients/agent-nudge.js +0 -325
- package/node_modules/pi-lens/dist/clients/analysed-root.js +0 -1
- package/node_modules/pi-lens/dist/clients/ast-grep-client.js +0 -731
- package/node_modules/pi-lens/dist/clients/ast-grep-rule-manager.js +0 -146
- package/node_modules/pi-lens/dist/clients/ast-grep-tool-logger.js +0 -118
- package/node_modules/pi-lens/dist/clients/ast-grep-types.js +0 -10
- package/node_modules/pi-lens/dist/clients/ast-grep-yaml-synth.js +0 -154
- package/node_modules/pi-lens/dist/clients/atomic-write-staging.js +0 -75
- package/node_modules/pi-lens/dist/clients/atomic-write.js +0 -189
- package/node_modules/pi-lens/dist/clients/availability-probe-flight.js +0 -12
- package/node_modules/pi-lens/dist/clients/bash-file-access.js +0 -1056
- package/node_modules/pi-lens/dist/clients/biome-client.js +0 -357
- package/node_modules/pi-lens/dist/clients/blocker-freshness.js +0 -837
- package/node_modules/pi-lens/dist/clients/blocker-past-eof.js +0 -129
- package/node_modules/pi-lens/dist/clients/bootstrap.js +0 -569
- package/node_modules/pi-lens/dist/clients/bounded-cache.js +0 -190
- package/node_modules/pi-lens/dist/clients/bounded-pid-file-lock.js +0 -202
- package/node_modules/pi-lens/dist/clients/bounded-telemetry.js +0 -295
- package/node_modules/pi-lens/dist/clients/build-identity.js +0 -95
- package/node_modules/pi-lens/dist/clients/bundled-resource-health.js +0 -113
- package/node_modules/pi-lens/dist/clients/bus-events-logger.js +0 -105
- package/node_modules/pi-lens/dist/clients/bus-publish.js +0 -171
- package/node_modules/pi-lens/dist/clients/cache/rule-cache.js +0 -190
- package/node_modules/pi-lens/dist/clients/cache-manager.js +0 -524
- package/node_modules/pi-lens/dist/clients/cache-observability.js +0 -1313
- package/node_modules/pi-lens/dist/clients/call-graph.js +0 -852
- package/node_modules/pi-lens/dist/clients/cargo-manifest.js +0 -422
- package/node_modules/pi-lens/dist/clients/cascade-budget.js +0 -196
- package/node_modules/pi-lens/dist/clients/cascade-format.js +0 -315
- package/node_modules/pi-lens/dist/clients/cascade-logger.js +0 -31
- package/node_modules/pi-lens/dist/clients/cascade-types.js +0 -9
- package/node_modules/pi-lens/dist/clients/child-unref.js +0 -124
- package/node_modules/pi-lens/dist/clients/code-quality-warnings.js +0 -286
- package/node_modules/pi-lens/dist/clients/codebase-model.js +0 -173
- package/node_modules/pi-lens/dist/clients/collateral-test-role.js +0 -40
- package/node_modules/pi-lens/dist/clients/complexity-client.js +0 -462
- package/node_modules/pi-lens/dist/clients/config-core/deny.js +0 -221
- package/node_modules/pi-lens/dist/clients/config-core/index.js +0 -50
- package/node_modules/pi-lens/dist/clients/config-core/merge.js +0 -357
- package/node_modules/pi-lens/dist/clients/config-core/normalize.js +0 -340
- package/node_modules/pi-lens/dist/clients/config-core/process-spec.js +0 -248
- package/node_modules/pi-lens/dist/clients/config-core/provenance.js +0 -164
- package/node_modules/pi-lens/dist/clients/config-core/records.js +0 -218
- package/node_modules/pi-lens/dist/clients/config-core/resolve.js +0 -125
- package/node_modules/pi-lens/dist/clients/config-core/safe-object.js +0 -78
- package/node_modules/pi-lens/dist/clients/config-core/schema.js +0 -165
- package/node_modules/pi-lens/dist/clients/config-diagnostic-codes.js +0 -285
- package/node_modules/pi-lens/dist/clients/config-locations.js +0 -388
- package/node_modules/pi-lens/dist/clients/config-resolve.js +0 -798
- package/node_modules/pi-lens/dist/clients/config-schema.js +0 -251
- package/node_modules/pi-lens/dist/clients/config-warn.js +0 -407
- package/node_modules/pi-lens/dist/clients/console-guard-install.js +0 -26
- package/node_modules/pi-lens/dist/clients/cooperative-budget.js +0 -42
- package/node_modules/pi-lens/dist/clients/dead-code-client.js +0 -510
- package/node_modules/pi-lens/dist/clients/dead-code-logger.js +0 -30
- package/node_modules/pi-lens/dist/clients/deadline-utils.js +0 -280
- package/node_modules/pi-lens/dist/clients/debug-handles.js +0 -211
- package/node_modules/pi-lens/dist/clients/debug-heap.js +0 -174
- package/node_modules/pi-lens/dist/clients/deferred-lsp-work.js +0 -106
- package/node_modules/pi-lens/dist/clients/degradation-ledger.js +0 -426
- package/node_modules/pi-lens/dist/clients/demoted-finding-render.js +0 -169
- package/node_modules/pi-lens/dist/clients/dependency-checker.js +0 -885
- package/node_modules/pi-lens/dist/clients/deps/ast-grep-napi.js +0 -22
- package/node_modules/pi-lens/dist/clients/deps/js-yaml.js +0 -9
- package/node_modules/pi-lens/dist/clients/deps/minimatch.js +0 -4
- package/node_modules/pi-lens/dist/clients/deps/pi-tui.js +0 -14
- package/node_modules/pi-lens/dist/clients/deps/typebox.js +0 -14
- package/node_modules/pi-lens/dist/clients/deps/vscode-jsonrpc.js +0 -1
- package/node_modules/pi-lens/dist/clients/deps/web-tree-sitter.js +0 -24
- package/node_modules/pi-lens/dist/clients/diagnostic-dispositions.js +0 -630
- package/node_modules/pi-lens/dist/clients/diagnostic-line-freshness.js +0 -305
- package/node_modules/pi-lens/dist/clients/diagnostic-logger.js +0 -73
- package/node_modules/pi-lens/dist/clients/diagnostic-tracker.js +0 -105
- package/node_modules/pi-lens/dist/clients/diagnostics-publish.js +0 -230
- package/node_modules/pi-lens/dist/clients/dispatch/ast-grep-catalog.js +0 -65
- package/node_modules/pi-lens/dist/clients/dispatch/auxiliary-lsp.js +0 -343
- package/node_modules/pi-lens/dist/clients/dispatch/collect-later-tier.js +0 -35
- package/node_modules/pi-lens/dist/clients/dispatch/diagnostic-taxonomy.js +0 -66
- package/node_modules/pi-lens/dist/clients/dispatch/dispatcher.js +0 -1269
- package/node_modules/pi-lens/dist/clients/dispatch/fact-provider-types.js +0 -1
- package/node_modules/pi-lens/dist/clients/dispatch/fact-rule-runner.js +0 -17
- package/node_modules/pi-lens/dist/clients/dispatch/fact-runner.js +0 -30
- package/node_modules/pi-lens/dist/clients/dispatch/fact-scheduler.js +0 -68
- package/node_modules/pi-lens/dist/clients/dispatch/fact-store.js +0 -377
- package/node_modules/pi-lens/dist/clients/dispatch/facts/comment-facts.js +0 -22
- package/node_modules/pi-lens/dist/clients/dispatch/facts/file-content.js +0 -19
- package/node_modules/pi-lens/dist/clients/dispatch/facts/function-facts.js +0 -348
- package/node_modules/pi-lens/dist/clients/dispatch/facts/import-facts.js +0 -204
- package/node_modules/pi-lens/dist/clients/dispatch/facts/tree-sitter-facts.js +0 -34
- package/node_modules/pi-lens/dist/clients/dispatch/facts/try-catch-facts.js +0 -119
- package/node_modules/pi-lens/dist/clients/dispatch/finding-policy.js +0 -339
- package/node_modules/pi-lens/dist/clients/dispatch/indent-detect.js +0 -417
- package/node_modules/pi-lens/dist/clients/dispatch/inline-suppressions.js +0 -89
- package/node_modules/pi-lens/dist/clients/dispatch/integration.js +0 -2377
- package/node_modules/pi-lens/dist/clients/dispatch/lazy.js +0 -11
- package/node_modules/pi-lens/dist/clients/dispatch/pending-runner-findings.js +0 -87
- package/node_modules/pi-lens/dist/clients/dispatch/plan.js +0 -278
- package/node_modules/pi-lens/dist/clients/dispatch/priorities.js +0 -20
- package/node_modules/pi-lens/dist/clients/dispatch/rule-id-normalize.js +0 -50
- package/node_modules/pi-lens/dist/clients/dispatch/rule-ignores.js +0 -69
- package/node_modules/pi-lens/dist/clients/dispatch/rule-policy.js +0 -135
- package/node_modules/pi-lens/dist/clients/dispatch/rules/async-noise.js +0 -40
- package/node_modules/pi-lens/dist/clients/dispatch/rules/async-unnecessary-wrapper.js +0 -27
- package/node_modules/pi-lens/dist/clients/dispatch/rules/cors-wildcard.js +0 -54
- package/node_modules/pi-lens/dist/clients/dispatch/rules/error-obscuring.js +0 -32
- package/node_modules/pi-lens/dist/clients/dispatch/rules/error-swallowing.js +0 -31
- package/node_modules/pi-lens/dist/clients/dispatch/rules/framework-call-noise.js +0 -67
- package/node_modules/pi-lens/dist/clients/dispatch/rules/high-complexity.js +0 -72
- package/node_modules/pi-lens/dist/clients/dispatch/rules/high-fan-out.js +0 -74
- package/node_modules/pi-lens/dist/clients/dispatch/rules/high-import-coupling.js +0 -37
- package/node_modules/pi-lens/dist/clients/dispatch/rules/missing-error-propagation.js +0 -62
- package/node_modules/pi-lens/dist/clients/dispatch/rules/no-commented-credentials.js +0 -52
- package/node_modules/pi-lens/dist/clients/dispatch/rules/pass-through-wrappers.js +0 -42
- package/node_modules/pi-lens/dist/clients/dispatch/rules/placeholder-comments.js +0 -40
- package/node_modules/pi-lens/dist/clients/dispatch/rules/unsafe-boundary.js +0 -126
- package/node_modules/pi-lens/dist/clients/dispatch/runner-context.js +0 -52
- package/node_modules/pi-lens/dist/clients/dispatch/runners/actionlint.js +0 -111
- package/node_modules/pi-lens/dist/clients/dispatch/runners/ast-grep-napi.js +0 -1196
- package/node_modules/pi-lens/dist/clients/dispatch/runners/biome-check.js +0 -296
- package/node_modules/pi-lens/dist/clients/dispatch/runners/cpp-check.js +0 -219
- package/node_modules/pi-lens/dist/clients/dispatch/runners/credo.js +0 -82
- package/node_modules/pi-lens/dist/clients/dispatch/runners/cue-vet.js +0 -416
- package/node_modules/pi-lens/dist/clients/dispatch/runners/dart-analyze.js +0 -183
- package/node_modules/pi-lens/dist/clients/dispatch/runners/detekt.js +0 -176
- package/node_modules/pi-lens/dist/clients/dispatch/runners/dotnet-build.js +0 -164
- package/node_modules/pi-lens/dist/clients/dispatch/runners/elixir-check.js +0 -195
- package/node_modules/pi-lens/dist/clients/dispatch/runners/eslint.js +0 -137
- package/node_modules/pi-lens/dist/clients/dispatch/runners/fact-rules.js +0 -29
- package/node_modules/pi-lens/dist/clients/dispatch/runners/fish-indent.js +0 -69
- package/node_modules/pi-lens/dist/clients/dispatch/runners/gleam-check.js +0 -167
- package/node_modules/pi-lens/dist/clients/dispatch/runners/go-vet.js +0 -104
- package/node_modules/pi-lens/dist/clients/dispatch/runners/golangci-lint.js +0 -135
- package/node_modules/pi-lens/dist/clients/dispatch/runners/hadolint.js +0 -91
- package/node_modules/pi-lens/dist/clients/dispatch/runners/helm-lint.js +0 -171
- package/node_modules/pi-lens/dist/clients/dispatch/runners/helm-render.js +0 -940
- package/node_modules/pi-lens/dist/clients/dispatch/runners/htmlhint.js +0 -117
- package/node_modules/pi-lens/dist/clients/dispatch/runners/index.js +0 -108
- package/node_modules/pi-lens/dist/clients/dispatch/runners/javac.js +0 -99
- package/node_modules/pi-lens/dist/clients/dispatch/runners/ktlint.js +0 -110
- package/node_modules/pi-lens/dist/clients/dispatch/runners/lsp.js +0 -379
- package/node_modules/pi-lens/dist/clients/dispatch/runners/markdownlint.js +0 -167
- package/node_modules/pi-lens/dist/clients/dispatch/runners/mypy.js +0 -102
- package/node_modules/pi-lens/dist/clients/dispatch/runners/oxlint.js +0 -414
- package/node_modules/pi-lens/dist/clients/dispatch/runners/php-lint.js +0 -85
- package/node_modules/pi-lens/dist/clients/dispatch/runners/phpstan.js +0 -120
- package/node_modules/pi-lens/dist/clients/dispatch/runners/prisma-validate.js +0 -62
- package/node_modules/pi-lens/dist/clients/dispatch/runners/psscriptanalyzer.js +0 -445
- package/node_modules/pi-lens/dist/clients/dispatch/runners/pyright.js +0 -169
- package/node_modules/pi-lens/dist/clients/dispatch/runners/rubocop.js +0 -99
- package/node_modules/pi-lens/dist/clients/dispatch/runners/ruff.js +0 -88
- package/node_modules/pi-lens/dist/clients/dispatch/runners/rust-clippy.js +0 -256
- package/node_modules/pi-lens/dist/clients/dispatch/runners/shellcheck.js +0 -173
- package/node_modules/pi-lens/dist/clients/dispatch/runners/shfmt.js +0 -102
- package/node_modules/pi-lens/dist/clients/dispatch/runners/spellcheck.js +0 -128
- package/node_modules/pi-lens/dist/clients/dispatch/runners/spotbugs.js +0 -259
- package/node_modules/pi-lens/dist/clients/dispatch/runners/sqlfluff.js +0 -183
- package/node_modules/pi-lens/dist/clients/dispatch/runners/stylelint.js +0 -166
- package/node_modules/pi-lens/dist/clients/dispatch/runners/swiftlint.js +0 -163
- package/node_modules/pi-lens/dist/clients/dispatch/runners/taplo.js +0 -174
- package/node_modules/pi-lens/dist/clients/dispatch/runners/terragrunt.js +0 -168
- package/node_modules/pi-lens/dist/clients/dispatch/runners/tflint.js +0 -125
- package/node_modules/pi-lens/dist/clients/dispatch/runners/tree-sitter.js +0 -643
- package/node_modules/pi-lens/dist/clients/dispatch/runners/trivy-config.js +0 -253
- package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/availability-policy.js +0 -496
- package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/candidate-probe.js +0 -90
- package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/diagnostic-parsers.js +0 -95
- package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/lazy-installer.js +0 -274
- package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/runner-helpers.js +0 -1701
- package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/spawn-outcome.js +0 -101
- package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/tool-failure.js +0 -235
- package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/toolchain-availability.js +0 -169
- package/node_modules/pi-lens/dist/clients/dispatch/runners/utils.js +0 -15
- package/node_modules/pi-lens/dist/clients/dispatch/runners/vale.js +0 -128
- package/node_modules/pi-lens/dist/clients/dispatch/runners/yaml-rule-parser.js +0 -242
- package/node_modules/pi-lens/dist/clients/dispatch/runners/yamllint.js +0 -95
- package/node_modules/pi-lens/dist/clients/dispatch/runners/zig-check.js +0 -79
- package/node_modules/pi-lens/dist/clients/dispatch/suppress-writer.js +0 -79
- package/node_modules/pi-lens/dist/clients/dispatch/tool-profile.js +0 -30
- package/node_modules/pi-lens/dist/clients/dispatch/types.js +0 -21
- package/node_modules/pi-lens/dist/clients/dispatch/utils/format-utils.js +0 -45
- package/node_modules/pi-lens/dist/clients/dispatch/utils/lsp-diagnostics.js +0 -35
- package/node_modules/pi-lens/dist/clients/disposition-logger.js +0 -32
- package/node_modules/pi-lens/dist/clients/disposition-publish.js +0 -124
- package/node_modules/pi-lens/dist/clients/durable-store.js +0 -97
- package/node_modules/pi-lens/dist/clients/effective-config.js +0 -415
- package/node_modules/pi-lens/dist/clients/env-utils.js +0 -83
- package/node_modules/pi-lens/dist/clients/error-class.js +0 -23
- package/node_modules/pi-lens/dist/clients/eval-timestamp.js +0 -17
- package/node_modules/pi-lens/dist/clients/event-loop-hold.js +0 -274
- package/node_modules/pi-lens/dist/clients/event-loop-monitor.js +0 -250
- package/node_modules/pi-lens/dist/clients/extension-log.js +0 -504
- package/node_modules/pi-lens/dist/clients/extension-mode.js +0 -73
- package/node_modules/pi-lens/dist/clients/feature-hints.js +0 -103
- package/node_modules/pi-lens/dist/clients/file-kinds.js +0 -412
- package/node_modules/pi-lens/dist/clients/file-role.js +0 -134
- package/node_modules/pi-lens/dist/clients/file-time.js +0 -160
- package/node_modules/pi-lens/dist/clients/file-utils.js +0 -1032
- package/node_modules/pi-lens/dist/clients/finding-delivery-gate.js +0 -494
- package/node_modules/pi-lens/dist/clients/finding-identity.js +0 -88
- package/node_modules/pi-lens/dist/clients/fix-worklog.js +0 -103
- package/node_modules/pi-lens/dist/clients/format-events-publish.js +0 -343
- package/node_modules/pi-lens/dist/clients/format-service.js +0 -222
- package/node_modules/pi-lens/dist/clients/formatters-lazy.js +0 -9
- package/node_modules/pi-lens/dist/clients/formatters.js +0 -2032
- package/node_modules/pi-lens/dist/clients/freshness-cadence.js +0 -17
- package/node_modules/pi-lens/dist/clients/freshness.js +0 -38
- package/node_modules/pi-lens/dist/clients/generated-artifacts.js +0 -394
- package/node_modules/pi-lens/dist/clients/generation-guard.js +0 -215
- package/node_modules/pi-lens/dist/clients/git-guard.js +0 -1136
- package/node_modules/pi-lens/dist/clients/git-tracked-ignore.js +0 -243
- package/node_modules/pi-lens/dist/clients/gitleaks-client.js +0 -509
- package/node_modules/pi-lens/dist/clients/go-client.js +0 -104
- package/node_modules/pi-lens/dist/clients/govulncheck-client.js +0 -605
- package/node_modules/pi-lens/dist/clients/gradle-ktfmt-style.js +0 -348
- package/node_modules/pi-lens/dist/clients/grammar-source.js +0 -465
- package/node_modules/pi-lens/dist/clients/gzip-stage-write.js +0 -135
- package/node_modules/pi-lens/dist/clients/hashline-anchor.js +0 -424
- package/node_modules/pi-lens/dist/clients/hook-budgets.js +0 -76
- package/node_modules/pi-lens/dist/clients/host-edit-normalize.js +0 -140
- package/node_modules/pi-lens/dist/clients/host-ports.js +0 -39
- package/node_modules/pi-lens/dist/clients/indent-retarget.js +0 -154
- package/node_modules/pi-lens/dist/clients/inline-blocker-dispositions.js +0 -186
- package/node_modules/pi-lens/dist/clients/install-diagnostics.js +0 -156
- package/node_modules/pi-lens/dist/clients/installer/index.js +0 -5416
- package/node_modules/pi-lens/dist/clients/installer/managed-tool-refresh-session.js +0 -58
- package/node_modules/pi-lens/dist/clients/installer/managed-tool-refresh.js +0 -783
- package/node_modules/pi-lens/dist/clients/instance-reaper-state.js +0 -7
- package/node_modules/pi-lens/dist/clients/instance-reaper.js +0 -1137
- package/node_modules/pi-lens/dist/clients/instance-registry-lock.js +0 -145
- package/node_modules/pi-lens/dist/clients/instance-registry.js +0 -773
- package/node_modules/pi-lens/dist/clients/jscpd-client.js +0 -378
- package/node_modules/pi-lens/dist/clients/json-cache-read.js +0 -65
- package/node_modules/pi-lens/dist/clients/knip-client.js +0 -788
- package/node_modules/pi-lens/dist/clients/language-policy.js +0 -252
- package/node_modules/pi-lens/dist/clients/language-profile.js +0 -361
- package/node_modules/pi-lens/dist/clients/language-registry.js +0 -603
- package/node_modules/pi-lens/dist/clients/latency-logger.js +0 -727
- package/node_modules/pi-lens/dist/clients/lazy-import.js +0 -21
- package/node_modules/pi-lens/dist/clients/ledger-bounds.js +0 -54
- package/node_modules/pi-lens/dist/clients/lens-config.js +0 -404
- package/node_modules/pi-lens/dist/clients/lens-engine.js +0 -358
- package/node_modules/pi-lens/dist/clients/lens-events.js +0 -125
- package/node_modules/pi-lens/dist/clients/lens-flag-registry.js +0 -467
- package/node_modules/pi-lens/dist/clients/lens-map.js +0 -1156
- package/node_modules/pi-lens/dist/clients/live-bus-emitter.js +0 -74
- package/node_modules/pi-lens/dist/clients/log-cleanup.js +0 -222
- package/node_modules/pi-lens/dist/clients/lsp/aggregation.js +0 -178
- package/node_modules/pi-lens/dist/clients/lsp/cascade-tier.js +0 -421
- package/node_modules/pi-lens/dist/clients/lsp/client.js +0 -4593
- package/node_modules/pi-lens/dist/clients/lsp/config.js +0 -691
- package/node_modules/pi-lens/dist/clients/lsp/content-limits.js +0 -41
- package/node_modules/pi-lens/dist/clients/lsp/diagnostic-binding.js +0 -225
- package/node_modules/pi-lens/dist/clients/lsp/document-drift.js +0 -467
- package/node_modules/pi-lens/dist/clients/lsp/edits.js +0 -1219
- package/node_modules/pi-lens/dist/clients/lsp/index.js +0 -8305
- package/node_modules/pi-lens/dist/clients/lsp/inferred-project.js +0 -216
- package/node_modules/pi-lens/dist/clients/lsp/jvm-runtime.js +0 -298
- package/node_modules/pi-lens/dist/clients/lsp/language.js +0 -63
- package/node_modules/pi-lens/dist/clients/lsp/launch.js +0 -746
- package/node_modules/pi-lens/dist/clients/lsp/lombok.js +0 -158
- package/node_modules/pi-lens/dist/clients/lsp/path-utils.js +0 -5
- package/node_modules/pi-lens/dist/clients/lsp/pending-aux-coverage.js +0 -251
- package/node_modules/pi-lens/dist/clients/lsp/position-encoding.js +0 -61
- package/node_modules/pi-lens/dist/clients/lsp/ruby-drive-dirs.js +0 -83
- package/node_modules/pi-lens/dist/clients/lsp/server.js +0 -3290
- package/node_modules/pi-lens/dist/clients/lsp/session-roots.js +0 -192
- package/node_modules/pi-lens/dist/clients/lsp/spawn-history.js +0 -17
- package/node_modules/pi-lens/dist/clients/lsp/sync-kind.js +0 -56
- package/node_modules/pi-lens/dist/clients/lsp/tsserver-sync.js +0 -332
- package/node_modules/pi-lens/dist/clients/lsp/wait-policy/capability-snapshot.js +0 -1
- package/node_modules/pi-lens/dist/clients/lsp/wait-policy/classification.js +0 -85
- package/node_modules/pi-lens/dist/clients/lsp/wait-policy/index.js +0 -10
- package/node_modules/pi-lens/dist/clients/lsp/wait-policy/strategies.js +0 -392
- package/node_modules/pi-lens/dist/clients/lsp/watch-queue.js +0 -61
- package/node_modules/pi-lens/dist/clients/lsp/workspace-diagnostics-cache.js +0 -639
- package/node_modules/pi-lens/dist/clients/lsp/workspace-diagnostics-session.js +0 -30
- package/node_modules/pi-lens/dist/clients/lsp/workspace-sweep-hold.js +0 -184
- package/node_modules/pi-lens/dist/clients/lsp-budget.js +0 -186
- package/node_modules/pi-lens/dist/clients/lsp-document-symbols.js +0 -110
- package/node_modules/pi-lens/dist/clients/lsp-lazy.js +0 -9
- package/node_modules/pi-lens/dist/clients/lsp-mutation.js +0 -396
- package/node_modules/pi-lens/dist/clients/lsp-status.js +0 -59
- package/node_modules/pi-lens/dist/clients/map-with-concurrency.js +0 -40
- package/node_modules/pi-lens/dist/clients/mcp/analyze.js +0 -420
- package/node_modules/pi-lens/dist/clients/mcp/host-shim.js +0 -31
- package/node_modules/pi-lens/dist/clients/mcp/ipc.js +0 -523
- package/node_modules/pi-lens/dist/clients/mcp/review.js +0 -197
- package/node_modules/pi-lens/dist/clients/mcp/session.js +0 -412
- package/node_modules/pi-lens/dist/clients/memory-sampler.js +0 -208
- package/node_modules/pi-lens/dist/clients/message-end-attribution.js +0 -30
- package/node_modules/pi-lens/dist/clients/metrics-client.js +0 -107
- package/node_modules/pi-lens/dist/clients/metrics-history.js +0 -327
- package/node_modules/pi-lens/dist/clients/middle-man-analysis.js +0 -263
- package/node_modules/pi-lens/dist/clients/model-provider.js +0 -53
- package/node_modules/pi-lens/dist/clients/module-report-lsp.js +0 -189
- package/node_modules/pi-lens/dist/clients/module-report.js +0 -2150
- package/node_modules/pi-lens/dist/clients/mutating-tool.js +0 -651
- package/node_modules/pi-lens/dist/clients/mutation-attribution.js +0 -368
- package/node_modules/pi-lens/dist/clients/mutation-bridge.js +0 -240
- package/node_modules/pi-lens/dist/clients/ndjson-logger.js +0 -734
- package/node_modules/pi-lens/dist/clients/observed-mutation-sources.js +0 -101
- package/node_modules/pi-lens/dist/clients/observed-mutation.js +0 -1253
- package/node_modules/pi-lens/dist/clients/oldtext-autopatch.js +0 -128
- package/node_modules/pi-lens/dist/clients/opaque-mutation-scan.js +0 -496
- package/node_modules/pi-lens/dist/clients/opengrep-client.js +0 -333
- package/node_modules/pi-lens/dist/clients/opengrep-config.js +0 -76
- package/node_modules/pi-lens/dist/clients/package-manager.js +0 -607
- package/node_modules/pi-lens/dist/clients/package-root.js +0 -38
- package/node_modules/pi-lens/dist/clients/partial-edit-apply.js +0 -439
- package/node_modules/pi-lens/dist/clients/path-attribution-telemetry.js +0 -43
- package/node_modules/pi-lens/dist/clients/path-keyed-map.js +0 -108
- package/node_modules/pi-lens/dist/clients/path-utils.js +0 -1244
- package/node_modules/pi-lens/dist/clients/performance-report.js +0 -331
- package/node_modules/pi-lens/dist/clients/persist-debounce.js +0 -70
- package/node_modules/pi-lens/dist/clients/persistent-reverify.js +0 -271
- package/node_modules/pi-lens/dist/clients/php-cs-fixer-config.js +0 -119
- package/node_modules/pi-lens/dist/clients/pipeline.js +0 -1480
- package/node_modules/pi-lens/dist/clients/post-autofix-notice.js +0 -37
- package/node_modules/pi-lens/dist/clients/print-mode.js +0 -21
- package/node_modules/pi-lens/dist/clients/probe-home-state.js +0 -228
- package/node_modules/pi-lens/dist/clients/process-bridge.js +0 -66
- package/node_modules/pi-lens/dist/clients/process-singletons.js +0 -210
- package/node_modules/pi-lens/dist/clients/process-snapshot.js +0 -68
- package/node_modules/pi-lens/dist/clients/project-changes.js +0 -181
- package/node_modules/pi-lens/dist/clients/project-conventions.js +0 -171
- package/node_modules/pi-lens/dist/clients/project-diagnostics/cache.js +0 -137
- package/node_modules/pi-lens/dist/clients/project-diagnostics/extractors.js +0 -109
- package/node_modules/pi-lens/dist/clients/project-diagnostics/fresh-fetch.js +0 -668
- package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/call-graph-impact.js +0 -118
- package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/dead-code.js +0 -47
- package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/gitleaks.js +0 -40
- package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/govulncheck.js +0 -34
- package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/jscpd.js +0 -38
- package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/knip.js +0 -47
- package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/madge.js +0 -48
- package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/opengrep.js +0 -40
- package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/runner-findings.js +0 -127
- package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/trivy.js +0 -81
- package/node_modules/pi-lens/dist/clients/project-diagnostics/scanner.js +0 -520
- package/node_modules/pi-lens/dist/clients/project-diagnostics/types.js +0 -1
- package/node_modules/pi-lens/dist/clients/project-lens-config.js +0 -807
- package/node_modules/pi-lens/dist/clients/project-report.js +0 -701
- package/node_modules/pi-lens/dist/clients/project-scale.js +0 -237
- package/node_modules/pi-lens/dist/clients/project-scan-policy.js +0 -11
- package/node_modules/pi-lens/dist/clients/project-snapshot-fingerprint.js +0 -48
- package/node_modules/pi-lens/dist/clients/project-snapshot-persist-worker.js +0 -20
- package/node_modules/pi-lens/dist/clients/project-snapshot.js +0 -1653
- package/node_modules/pi-lens/dist/clients/project-trust.js +0 -181
- package/node_modules/pi-lens/dist/clients/python-environment.js +0 -217
- package/node_modules/pi-lens/dist/clients/python-provenance.js +0 -639
- package/node_modules/pi-lens/dist/clients/quiet-window-config.js +0 -47
- package/node_modules/pi-lens/dist/clients/quiet-window.js +0 -236
- package/node_modules/pi-lens/dist/clients/read-bridge.js +0 -139
- package/node_modules/pi-lens/dist/clients/read-expansion.js +0 -266
- package/node_modules/pi-lens/dist/clients/read-guard-logger.js +0 -251
- package/node_modules/pi-lens/dist/clients/read-guard-tool-lines.js +0 -1306
- package/node_modules/pi-lens/dist/clients/read-guard.js +0 -1561
- package/node_modules/pi-lens/dist/clients/recent-touches.js +0 -240
- package/node_modules/pi-lens/dist/clients/redact/secrets.js +0 -449
- package/node_modules/pi-lens/dist/clients/resource-sampler.js +0 -628
- package/node_modules/pi-lens/dist/clients/reverse-deps.js +0 -270
- package/node_modules/pi-lens/dist/clients/review-graph/builder.js +0 -5126
- package/node_modules/pi-lens/dist/clients/review-graph/format.js +0 -33
- package/node_modules/pi-lens/dist/clients/review-graph/git-identity.js +0 -163
- package/node_modules/pi-lens/dist/clients/review-graph/import-resolvers.js +0 -481
- package/node_modules/pi-lens/dist/clients/review-graph/persist-worker.js +0 -10
- package/node_modules/pi-lens/dist/clients/review-graph/query.js +0 -244
- package/node_modules/pi-lens/dist/clients/review-graph/revision-drift.js +0 -21
- package/node_modules/pi-lens/dist/clients/review-graph/service.js +0 -96
- package/node_modules/pi-lens/dist/clients/review-graph/shared-extraction-ir.js +0 -82
- package/node_modules/pi-lens/dist/clients/review-graph/symbol-id.js +0 -103
- package/node_modules/pi-lens/dist/clients/review-graph/tsconfig-paths.js +0 -299
- package/node_modules/pi-lens/dist/clients/review-graph/types.js +0 -1
- package/node_modules/pi-lens/dist/clients/review-graph/workspace-modules.js +0 -449
- package/node_modules/pi-lens/dist/clients/review-graph-logger.js +0 -81
- package/node_modules/pi-lens/dist/clients/ruff-client.js +0 -179
- package/node_modules/pi-lens/dist/clients/rules-scanner.js +0 -131
- package/node_modules/pi-lens/dist/clients/run-duration.js +0 -55
- package/node_modules/pi-lens/dist/clients/runtime-agent-end.js +0 -746
- package/node_modules/pi-lens/dist/clients/runtime-config.js +0 -77
- package/node_modules/pi-lens/dist/clients/runtime-context.js +0 -211
- package/node_modules/pi-lens/dist/clients/runtime-coordinator.js +0 -1324
- package/node_modules/pi-lens/dist/clients/runtime-session.js +0 -2485
- package/node_modules/pi-lens/dist/clients/runtime-tool-call.js +0 -1295
- package/node_modules/pi-lens/dist/clients/runtime-tool-result.js +0 -2049
- package/node_modules/pi-lens/dist/clients/runtime-turn.js +0 -3767
- package/node_modules/pi-lens/dist/clients/rust-client.js +0 -97
- package/node_modules/pi-lens/dist/clients/safe-spawn.js +0 -2357
- package/node_modules/pi-lens/dist/clients/sanitize.js +0 -286
- package/node_modules/pi-lens/dist/clients/scan-utils.js +0 -25
- package/node_modules/pi-lens/dist/clients/scratch-tree-policy.js +0 -165
- package/node_modules/pi-lens/dist/clients/search-read-registration.js +0 -94
- package/node_modules/pi-lens/dist/clients/secret-findings.js +0 -114
- package/node_modules/pi-lens/dist/clients/security-scan-client.js +0 -352
- package/node_modules/pi-lens/dist/clients/session-event-guard.js +0 -297
- package/node_modules/pi-lens/dist/clients/session-lifecycle.js +0 -484
- package/node_modules/pi-lens/dist/clients/session-start-observability.js +0 -94
- package/node_modules/pi-lens/dist/clients/session-state-store.js +0 -101
- package/node_modules/pi-lens/dist/clients/session-summary.js +0 -15
- package/node_modules/pi-lens/dist/clients/sessionstart-logger.js +0 -27
- package/node_modules/pi-lens/dist/clients/sg-runner.js +0 -876
- package/node_modules/pi-lens/dist/clients/sgconfig.js +0 -347
- package/node_modules/pi-lens/dist/clients/shared-checkout-guard.js +0 -338
- package/node_modules/pi-lens/dist/clients/single-flight.js +0 -158
- package/node_modules/pi-lens/dist/clients/situational-tool-telemetry.js +0 -108
- package/node_modules/pi-lens/dist/clients/skills-resolver.js +0 -141
- package/node_modules/pi-lens/dist/clients/slow-fs.js +0 -138
- package/node_modules/pi-lens/dist/clients/smells-rollup.js +0 -231
- package/node_modules/pi-lens/dist/clients/source-filter.js +0 -596
- package/node_modules/pi-lens/dist/clients/source-walker.js +0 -211
- package/node_modules/pi-lens/dist/clients/spawn-output-cap.js +0 -120
- package/node_modules/pi-lens/dist/clients/spawn-timeout-cooldown.js +0 -110
- package/node_modules/pi-lens/dist/clients/stale-marker.js +0 -17
- package/node_modules/pi-lens/dist/clients/startup-scan.js +0 -400
- package/node_modules/pi-lens/dist/clients/startup-timing.js +0 -130
- package/node_modules/pi-lens/dist/clients/string-utils.js +0 -33
- package/node_modules/pi-lens/dist/clients/subagent-mode.js +0 -111
- package/node_modules/pi-lens/dist/clients/symbol-containment.js +0 -24
- package/node_modules/pi-lens/dist/clients/symbol-types.js +0 -5
- package/node_modules/pi-lens/dist/clients/test-runner-client.js +0 -2507
- package/node_modules/pi-lens/dist/clients/test-runner-delivery.js +0 -287
- package/node_modules/pi-lens/dist/clients/todo-scanner.js +0 -229
- package/node_modules/pi-lens/dist/clients/tool-agreement.js +0 -423
- package/node_modules/pi-lens/dist/clients/tool-config.js +0 -249
- package/node_modules/pi-lens/dist/clients/tool-cwd.js +0 -270
- package/node_modules/pi-lens/dist/clients/tool-definition.js +0 -47
- package/node_modules/pi-lens/dist/clients/tool-event.js +0 -105
- package/node_modules/pi-lens/dist/clients/tool-policy.js +0 -2755
- package/node_modules/pi-lens/dist/clients/tool-probe.js +0 -53
- package/node_modules/pi-lens/dist/clients/tool-render.js +0 -156
- package/node_modules/pi-lens/dist/clients/tool-set-policy.js +0 -118
- package/node_modules/pi-lens/dist/clients/tree-sitter-cache.js +0 -364
- package/node_modules/pi-lens/dist/clients/tree-sitter-client.js +0 -4195
- package/node_modules/pi-lens/dist/clients/tree-sitter-logger.js +0 -100
- package/node_modules/pi-lens/dist/clients/tree-sitter-navigator.js +0 -269
- package/node_modules/pi-lens/dist/clients/tree-sitter-query-loader.js +0 -569
- package/node_modules/pi-lens/dist/clients/tree-sitter-shared.js +0 -158
- package/node_modules/pi-lens/dist/clients/tree-sitter-symbol-extractor.js +0 -1265
- package/node_modules/pi-lens/dist/clients/trivy-client.js +0 -467
- package/node_modules/pi-lens/dist/clients/tui-fit.js +0 -50
- package/node_modules/pi-lens/dist/clients/turn-context.js +0 -52
- package/node_modules/pi-lens/dist/clients/turn-end/lane.js +0 -51
- package/node_modules/pi-lens/dist/clients/turn-end/lanes/govulncheck.js +0 -112
- package/node_modules/pi-lens/dist/clients/turn-end/lanes/secrets.js +0 -204
- package/node_modules/pi-lens/dist/clients/turn-summary-render.js +0 -72
- package/node_modules/pi-lens/dist/clients/turn-summary.js +0 -132
- package/node_modules/pi-lens/dist/clients/typos-config.js +0 -29
- package/node_modules/pi-lens/dist/clients/user-notify.js +0 -51
- package/node_modules/pi-lens/dist/clients/vanished-instance-marker.js +0 -57
- package/node_modules/pi-lens/dist/clients/warm-attach.js +0 -305
- package/node_modules/pi-lens/dist/clients/widget-state.js +0 -1808
- package/node_modules/pi-lens/dist/clients/word-index-logger.js +0 -49
- package/node_modules/pi-lens/dist/clients/word-index-store.js +0 -459
- package/node_modules/pi-lens/dist/clients/word-index.js +0 -2080
- package/node_modules/pi-lens/dist/clients/workspace-topology.js +0 -443
- package/node_modules/pi-lens/dist/clients/write-ordering-guard.js +0 -65
- package/node_modules/pi-lens/dist/clients/zizmor-config.js +0 -340
- package/node_modules/pi-lens/dist/i18n.js +0 -69
- package/node_modules/pi-lens/dist/mcp/build-staleness.js +0 -124
- package/node_modules/pi-lens/dist/scripts/lib/process-scan.mjs +0 -583
- package/node_modules/pi-lens/dist/scripts/lib/skills-predicate.mjs +0 -129
- package/node_modules/pi-lens/dist/scripts/lib/web-tree-sitter-dir.mjs +0 -123
- package/node_modules/pi-lens/dist/tools/activate-tools.js +0 -87
- package/node_modules/pi-lens/dist/tools/ast-grep-outline.js +0 -137
- package/node_modules/pi-lens/dist/tools/ast-grep-replace.js +0 -244
- package/node_modules/pi-lens/dist/tools/ast-grep-search.js +0 -762
- package/node_modules/pi-lens/dist/tools/effective-config.js +0 -90
- package/node_modules/pi-lens/dist/tools/lens-diagnostic-mark.js +0 -375
- package/node_modules/pi-lens/dist/tools/lens-diagnostics.js +0 -2571
- package/node_modules/pi-lens/dist/tools/lsp-diagnostics.js +0 -1745
- package/node_modules/pi-lens/dist/tools/lsp-navigation.js +0 -1367
- package/node_modules/pi-lens/dist/tools/lsp-structured-output.js +0 -294
- package/node_modules/pi-lens/dist/tools/module-report.js +0 -382
- package/node_modules/pi-lens/dist/tools/project-report.js +0 -86
- package/node_modules/pi-lens/dist/tools/render-compact.js +0 -374
- package/node_modules/pi-lens/dist/tools/scan-progress.js +0 -53
- package/node_modules/pi-lens/dist/tools/shared.js +0 -29
- package/node_modules/pi-lens/dist/tools/symbol-search.js +0 -155
|
@@ -1,523 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Warm side-channel for the push path. The MCP server is a long-lived process
|
|
3
|
-
* with a warm LSP, but its stdio is owned by the MCP client — so the
|
|
4
|
-
* PostToolUse-hook bin can't reach it that way. Instead the server listens on a
|
|
5
|
-
* local IPC endpoint (Unix domain socket / Windows named pipe), and the hook
|
|
6
|
-
* connects to it to get LSP-complete diagnostics from the warm process instead
|
|
7
|
-
* of running its own cold analysis.
|
|
8
|
-
*
|
|
9
|
-
* This module is the CLIENT + the shared path derivation + the one-shot line
|
|
10
|
-
* reader the server wires into its socket (deliberately light: node:net +
|
|
11
|
-
* type-only result, so the bin can try the warm path WITHOUT loading the
|
|
12
|
-
* dispatch graph). The analysis engine lives in mcp/server.ts. If the warm
|
|
13
|
-
* path is unavailable, the client resolves `undefined` and the caller falls
|
|
14
|
-
* back to cold local analysis.
|
|
15
|
-
*/
|
|
16
|
-
import * as crypto from "node:crypto";
|
|
17
|
-
import * as fs from "node:fs";
|
|
18
|
-
import * as net from "node:net";
|
|
19
|
-
import * as os from "node:os";
|
|
20
|
-
import * as path from "node:path";
|
|
21
|
-
import { writeFileAtomic } from "../atomic-write.js";
|
|
22
|
-
import { incrementDegradationCount } from "../degradation-ledger.js";
|
|
23
|
-
import { DEFAULT_MAX_OUTPUT_BYTES } from "../spawn-output-cap.js";
|
|
24
|
-
export const WARM_DIAGNOSTICS_SCHEMA_VERSION = 1;
|
|
25
|
-
export const WARM_CODE_ACTION_LOOKUP_LIMIT = 6;
|
|
26
|
-
/**
|
|
27
|
-
* Stable per-workspace endpoint path. The server (from its launch cwd) and the
|
|
28
|
-
* hook (from the PostToolUse cwd) must resolve the same path — both hash the
|
|
29
|
-
* resolved root (lowercased for case-insensitive filesystems), so when they're
|
|
30
|
-
* the same project they meet. Mismatch → the client just falls back to cold.
|
|
31
|
-
*/
|
|
32
|
-
export function ipcPathForCwd(cwd, platform = process.platform) {
|
|
33
|
-
const hash = workspaceHash(cwd, platform);
|
|
34
|
-
if (platform === "win32") {
|
|
35
|
-
return `\\\\.\\pipe\\pi-lens-mcp-${hash}`;
|
|
36
|
-
}
|
|
37
|
-
return path.join(os.tmpdir(), `pi-lens-mcp-${hash}.sock`);
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* The single stable per-workspace id both endpoint derivations key on. Every
|
|
41
|
-
* per-workspace side-channel name (socket/pipe, turn-end status file) must come
|
|
42
|
-
* from HERE, so the hook process and the server process cannot drift apart.
|
|
43
|
-
*
|
|
44
|
-
* #1193 P3 decision: this input is NOT a map key and neither path-utils seam
|
|
45
|
-
* belongs here. Writers and readers of this id, and what each one holds:
|
|
46
|
-
*
|
|
47
|
-
* | process | site | input |
|
|
48
|
-
* |--------------------|-----------------------------------------------|-------|
|
|
49
|
-
* | MCP server (warm) | `mcp/server.ts` `IPC_PATH` — listen | its launch cwd |
|
|
50
|
-
* | pi session (warm) | `clients/warm-attach.ts` — listen (pid-scoped) | runtime cwd |
|
|
51
|
-
* | PostToolUse hook | `requestWarmAnalyze` — connect | hook cwd |
|
|
52
|
-
* | Stop hook | `requestWarmTurnEnd` — connect | hook cwd |
|
|
53
|
-
* | Stop hook / health | `turnEndStatusPathForCwd` — write + read a file in tmpdir | cwd |
|
|
54
|
-
*
|
|
55
|
-
* Every row is a SEPARATE process that must reproduce the same 16 hex
|
|
56
|
-
* characters with no shared state, and the rows do not run at the same time —
|
|
57
|
-
* the server derives its id at launch, a hook derives its own minutes or hours
|
|
58
|
-
* later. `normalizeMapKey`/`normalizeFilePath` would make the id depend on
|
|
59
|
-
* filesystem state (`realpathSync.native`, on-disk casing) read at two
|
|
60
|
-
* different moments: a case-only rename, a remounted symlink, or a hook running
|
|
61
|
-
* in a different mount namespace than the server would silently stop the two
|
|
62
|
-
* from meeting. That is the exact staleness PR #2193 was rejected for on the
|
|
63
|
-
* LSP seam. `normalizeEphemeralMapKey` is excluded by its own contract — it is
|
|
64
|
-
* scoped to process-local, same-run keys and says so.
|
|
65
|
-
*
|
|
66
|
-
* So the derivation stays pure string math — and #3255 narrowed its case fold
|
|
67
|
-
* to the platforms whose FILESYSTEM folds case, because "pure" and
|
|
68
|
-
* "unconditional" are not the same thing:
|
|
69
|
-
*
|
|
70
|
-
* - case-INSENSITIVE default (`win32`, `darwin` APFS/HFS+): `Alpha` and `alpha`
|
|
71
|
-
* are ONE directory, so the only failure mode is a MISS. The server row and
|
|
72
|
-
* the hook rows can hold different spellings of it — the server's cwd can be
|
|
73
|
-
* a hand-written `--cwd=` / `PI_LENS_MCP_CWD` while the hook's comes from the
|
|
74
|
-
* payload (see `tests/mcp/turn-end-route.smoke.test.ts`'s win32 case) — so the
|
|
75
|
-
* fold is what makes them meet, and it stays. `darwin` belongs here for a
|
|
76
|
-
* reason in this tree, not by analogy: the incumbent selection that decides
|
|
77
|
-
* two sessions share a root already compares through `normalizeFilePath`
|
|
78
|
-
* (`clients/instance-registry.ts:837`), whose `realpathSync.native` returns
|
|
79
|
-
* on-disk casing on Darwin. A pair that SELECTS each other case-insensitively
|
|
80
|
-
* must be able to MEET.
|
|
81
|
-
* - case-SENSITIVE (Linux, *BSD): `Alpha` and `alpha` are TWO directories, and
|
|
82
|
-
* two spellings of one workspace cannot occur (a mis-cased `--cwd=` names a
|
|
83
|
-
* directory that does not exist). Folding there bought nothing and collided
|
|
84
|
-
* two workspaces onto one socket and one status file — #3255.
|
|
85
|
-
*
|
|
86
|
-
* Known residuals, both fail-safe and both un-closable without a filesystem
|
|
87
|
-
* read this derivation is forbidden to do: a case-insensitive MOUNT on a
|
|
88
|
-
* case-sensitive platform (`nocase` vfat/ntfs3/cifs, ext4 `chattr +F`) now
|
|
89
|
-
* misses instead of meeting — the same blind spot `normalizeFilePath` has
|
|
90
|
-
* there, measured and filed as #3154 — and a case-SENSITIVE APFS volume keeps
|
|
91
|
-
* today's collision.
|
|
92
|
-
*
|
|
93
|
-
* `platform` is an argument, not a `process.platform` read, so every arm is
|
|
94
|
-
* testable from one lane (the seam `normalizePathEntry` uses in
|
|
95
|
-
* `clients/lsp/launch.ts`).
|
|
96
|
-
*/
|
|
97
|
-
function workspaceHash(cwd, platform = process.platform) {
|
|
98
|
-
const resolved = path.resolve(cwd);
|
|
99
|
-
const root = platform === "win32" || platform === "darwin"
|
|
100
|
-
? resolved.toLowerCase()
|
|
101
|
-
: resolved;
|
|
102
|
-
// sha256 (not for security — just a stable short id for the IPC socket/pipe
|
|
103
|
-
// name keyed by cwd; sha256 over sha1 keeps SonarCloud's weak-hash check quiet)
|
|
104
|
-
return crypto.createHash("sha256").update(root).digest("hex").slice(0, 16);
|
|
105
|
-
}
|
|
106
|
-
/** PID-scoped endpoint used by pi sessions. The legacy MCP analyze endpoint
|
|
107
|
-
* remains workspace-scoped for compatibility with the PostToolUse hook. */
|
|
108
|
-
export function diagnosticsIpcPathForCwd(cwd, pid, platform = process.platform) {
|
|
109
|
-
const base = ipcPathForCwd(cwd, platform);
|
|
110
|
-
if (platform === "win32")
|
|
111
|
-
return `${base}-diagnostics-${pid}`;
|
|
112
|
-
return base.replace(/\.sock$/, `-diagnostics-${pid}.sock`);
|
|
113
|
-
}
|
|
114
|
-
/**
|
|
115
|
-
* A connect that never landed, as opposed to a socket that opened and then
|
|
116
|
-
* failed. `ENOENT` is the POSIX "no socket file there"; `ECONNREFUSED` is a
|
|
117
|
-
* socket file (or named pipe) with no live listener behind it.
|
|
118
|
-
*/
|
|
119
|
-
function isNoListenerError(error) {
|
|
120
|
-
const code = error?.code;
|
|
121
|
-
return code === "ENOENT" || code === "ECONNREFUSED";
|
|
122
|
-
}
|
|
123
|
-
export function contentHash(content) {
|
|
124
|
-
return crypto.createHash("sha256").update(content).digest("hex");
|
|
125
|
-
}
|
|
126
|
-
/**
|
|
127
|
-
* Shared one-shot request/response transport for the tagged IPC routes (#822):
|
|
128
|
-
* connect to `endpoint`, write one JSON line, read one JSON line back,
|
|
129
|
-
* classify. The endpoint is PID-scoped for the warm-attach routes and
|
|
130
|
-
* workspace-scoped for the hook bin's turn-end route. The per-route `validate`
|
|
131
|
-
* callback returns a failure reason for an on-time but unusable reply (schema
|
|
132
|
-
* skew, staleness) or `undefined` to accept it; transport failures map
|
|
133
|
-
* uniformly to timeout/ipc-error. One transport, N routes — the clients cannot
|
|
134
|
-
* drift apart.
|
|
135
|
-
*/
|
|
136
|
-
function requestOverWarmIpc(endpoint, timeoutMs, buildRequest, validate) {
|
|
137
|
-
return new Promise((resolve) => {
|
|
138
|
-
let settled = false;
|
|
139
|
-
const finish = (value) => {
|
|
140
|
-
if (settled)
|
|
141
|
-
return;
|
|
142
|
-
settled = true;
|
|
143
|
-
clearTimeout(timer);
|
|
144
|
-
socket.destroy();
|
|
145
|
-
resolve(value);
|
|
146
|
-
};
|
|
147
|
-
const deadlineAt = Date.now() + timeoutMs;
|
|
148
|
-
const socket = net.createConnection(endpoint);
|
|
149
|
-
socket.setEncoding("utf8");
|
|
150
|
-
const timer = setTimeout(() => finish({ available: false, reason: "timeout" }), timeoutMs);
|
|
151
|
-
timer.unref();
|
|
152
|
-
socket.on("connect", () => {
|
|
153
|
-
socket.write(`${JSON.stringify(buildRequest(deadlineAt))}\n`);
|
|
154
|
-
});
|
|
155
|
-
socket.on("data", createWarmIpcLineReader((line) => {
|
|
156
|
-
try {
|
|
157
|
-
const message = JSON.parse(line);
|
|
158
|
-
const result = message.result;
|
|
159
|
-
if (message.error || !result) {
|
|
160
|
-
finish({ available: false, reason: "ipc-error" });
|
|
161
|
-
return;
|
|
162
|
-
}
|
|
163
|
-
const reason = validate(result, deadlineAt);
|
|
164
|
-
if (reason === undefined) {
|
|
165
|
-
finish({ available: true, response: result });
|
|
166
|
-
}
|
|
167
|
-
else {
|
|
168
|
-
finish({ available: false, reason });
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
catch {
|
|
172
|
-
finish({ available: false, reason: "schema-mismatch" });
|
|
173
|
-
}
|
|
174
|
-
}, {
|
|
175
|
-
label: "warm-diagnostics-reply",
|
|
176
|
-
onOverflow: () => finish({ available: false, reason: "ipc-error" }),
|
|
177
|
-
}));
|
|
178
|
-
socket.on("error", (error) => finish({
|
|
179
|
-
available: false,
|
|
180
|
-
reason: isNoListenerError(error) ? "no-listener" : "ipc-error",
|
|
181
|
-
}));
|
|
182
|
-
socket.on("close", () => finish({ available: false, reason: "ipc-error" }));
|
|
183
|
-
});
|
|
184
|
-
}
|
|
185
|
-
export function requestWarmDiagnostics(cwd, incumbentPid, file, content, timeoutMs) {
|
|
186
|
-
const expectedHash = contentHash(content);
|
|
187
|
-
return requestOverWarmIpc(diagnosticsIpcPathForCwd(cwd, incumbentPid), timeoutMs, (deadlineAt) => ({
|
|
188
|
-
route: "diagnostics",
|
|
189
|
-
version: WARM_DIAGNOSTICS_SCHEMA_VERSION,
|
|
190
|
-
file,
|
|
191
|
-
cwd,
|
|
192
|
-
content,
|
|
193
|
-
contentHash: expectedHash,
|
|
194
|
-
deadlineAt,
|
|
195
|
-
}), (result, deadlineAt) => {
|
|
196
|
-
if (result.route !== "diagnostics" ||
|
|
197
|
-
result.version !== WARM_DIAGNOSTICS_SCHEMA_VERSION) {
|
|
198
|
-
return "schema-mismatch";
|
|
199
|
-
}
|
|
200
|
-
if (!result.fresh ||
|
|
201
|
-
result.inconclusive ||
|
|
202
|
-
result.contentHash !== expectedHash ||
|
|
203
|
-
result.servedAt > deadlineAt) {
|
|
204
|
-
return "stale-answer";
|
|
205
|
-
}
|
|
206
|
-
return undefined;
|
|
207
|
-
});
|
|
208
|
-
}
|
|
209
|
-
export function requestWarmCodeActions(cwd, incumbentPid, file, expectedContentHash, ranges, timeoutMs) {
|
|
210
|
-
return requestOverWarmIpc(diagnosticsIpcPathForCwd(cwd, incumbentPid), timeoutMs, (deadlineAt) => ({
|
|
211
|
-
route: "code-actions",
|
|
212
|
-
version: WARM_DIAGNOSTICS_SCHEMA_VERSION,
|
|
213
|
-
file,
|
|
214
|
-
cwd,
|
|
215
|
-
contentHash: expectedContentHash,
|
|
216
|
-
ranges,
|
|
217
|
-
deadlineAt,
|
|
218
|
-
}), (result, deadlineAt) => {
|
|
219
|
-
if (result.route !== "code-actions" ||
|
|
220
|
-
result.version !== WARM_DIAGNOSTICS_SCHEMA_VERSION ||
|
|
221
|
-
!Array.isArray(result.actions) ||
|
|
222
|
-
result.actions.length !== ranges.length ||
|
|
223
|
-
result.actions.some((actions) => !Array.isArray(actions))) {
|
|
224
|
-
return "schema-mismatch";
|
|
225
|
-
}
|
|
226
|
-
if (result.contentHash !== expectedContentHash ||
|
|
227
|
-
result.servedAt > deadlineAt) {
|
|
228
|
-
return "stale-answer";
|
|
229
|
-
}
|
|
230
|
-
return undefined;
|
|
231
|
-
});
|
|
232
|
-
}
|
|
233
|
-
// v2 adds an explicit receipt acknowledgement. A v1 server must reject rather
|
|
234
|
-
// than consume a pass without the new delivery contract.
|
|
235
|
-
export const WARM_TURN_END_SCHEMA_VERSION = 2;
|
|
236
|
-
/**
|
|
237
|
-
* Ask the warm server to run pi-lens's real turn-end pass. Execution and
|
|
238
|
-
* delivery are separate: the first one-shot connection returns a capability,
|
|
239
|
-
* then a second one-shot connection acknowledges receipt. If the client
|
|
240
|
-
* deadline or either connection loses, the server leaves the durable finding
|
|
241
|
-
* cache untouched for a later Stop. 55 s expires inside Claude Code's 60 s hook
|
|
242
|
-
* timeout.
|
|
243
|
-
*/
|
|
244
|
-
export async function requestWarmTurnEnd(cwd, timeoutMs = 55_000) {
|
|
245
|
-
const startedAt = Date.now();
|
|
246
|
-
const first = await requestOverWarmIpc(ipcPathForCwd(cwd), timeoutMs, () => ({
|
|
247
|
-
route: "turn-end",
|
|
248
|
-
version: WARM_TURN_END_SCHEMA_VERSION,
|
|
249
|
-
cwd,
|
|
250
|
-
}), (result) => result.route === "turn-end" &&
|
|
251
|
-
result.version === WARM_TURN_END_SCHEMA_VERSION
|
|
252
|
-
? undefined
|
|
253
|
-
: "schema-mismatch");
|
|
254
|
-
if (!first.available || !first.response.deliveryId)
|
|
255
|
-
return first;
|
|
256
|
-
const remainingMs = timeoutMs - (Date.now() - startedAt);
|
|
257
|
-
if (remainingMs <= 0)
|
|
258
|
-
return { available: false, reason: "timeout" };
|
|
259
|
-
const ack = await requestOverWarmIpc(ipcPathForCwd(cwd), remainingMs, () => ({
|
|
260
|
-
route: "turn-end-ack",
|
|
261
|
-
version: WARM_TURN_END_SCHEMA_VERSION,
|
|
262
|
-
cwd,
|
|
263
|
-
deliveryId: first.response.deliveryId,
|
|
264
|
-
}), (result) => result.route === "turn-end-ack" && result.acknowledged === true
|
|
265
|
-
? undefined
|
|
266
|
-
: "ipc-error");
|
|
267
|
-
return ack.available
|
|
268
|
-
? { available: true, response: first.response }
|
|
269
|
-
: { available: false, reason: ack.reason };
|
|
270
|
-
}
|
|
271
|
-
/** Per-workspace status file, keyed by the same hash as the IPC endpoint. */
|
|
272
|
-
export function turnEndStatusPathForCwd(cwd, platform = process.platform) {
|
|
273
|
-
return path.join(os.tmpdir(), `pi-lens-turn-end-${workspaceHash(cwd, platform)}.json`);
|
|
274
|
-
}
|
|
275
|
-
export function readTurnEndStatus(cwd, platform = process.platform) {
|
|
276
|
-
try {
|
|
277
|
-
const raw = fs.readFileSync(turnEndStatusPathForCwd(cwd, platform), "utf8");
|
|
278
|
-
const parsed = JSON.parse(raw);
|
|
279
|
-
if (!parsed || typeof parsed !== "object")
|
|
280
|
-
return undefined;
|
|
281
|
-
return {
|
|
282
|
-
ran: typeof parsed.ran === "number" ? parsed.ran : 0,
|
|
283
|
-
skipped: typeof parsed.skipped === "number" ? parsed.skipped : 0,
|
|
284
|
-
lastSkipReason: parsed.lastSkipReason,
|
|
285
|
-
lastRunAt: parsed.lastRunAt,
|
|
286
|
-
lastSkipAt: parsed.lastSkipAt,
|
|
287
|
-
};
|
|
288
|
-
}
|
|
289
|
-
catch {
|
|
290
|
-
// never written, unreadable, or corrupt — "no turn-end activity recorded"
|
|
291
|
-
return undefined;
|
|
292
|
-
}
|
|
293
|
-
}
|
|
294
|
-
/**
|
|
295
|
-
* Append one turn-end outcome from the hook process. Never throws.
|
|
296
|
-
*
|
|
297
|
-
* Read-modify-write against a shared per-workspace tmpdir file: two Stop
|
|
298
|
-
* hooks for the same workspace can race this concurrently (separate
|
|
299
|
-
* processes, no lock). `writeFileAtomic` only closes the *publication* half
|
|
300
|
-
* of that — it guarantees this write's own staging+rename can't torn-read
|
|
301
|
-
* (parse-fail and reset counters) or hit a Windows sharing violation against
|
|
302
|
-
* a concurrent writer's rename. It does NOT fix the read-modify-write race
|
|
303
|
-
* itself: two overlapping calls can still both read the same `previous` and
|
|
304
|
-
* publish from it, silently dropping one increment. That's accepted here —
|
|
305
|
-
* this is bounded best-effort telemetry (self-heals, errors already
|
|
306
|
-
* swallowed below), and a lock on this path isn't worth it.
|
|
307
|
-
*/
|
|
308
|
-
export function recordTurnEndOutcome(cwd, outcome, platform = process.platform) {
|
|
309
|
-
try {
|
|
310
|
-
const now = new Date().toISOString();
|
|
311
|
-
const previous = readTurnEndStatus(cwd, platform) ?? { ran: 0, skipped: 0 };
|
|
312
|
-
const next = outcome.ran
|
|
313
|
-
? { ...previous, ran: previous.ran + 1, lastRunAt: now }
|
|
314
|
-
: {
|
|
315
|
-
...previous,
|
|
316
|
-
skipped: previous.skipped + 1,
|
|
317
|
-
lastSkipReason: outcome.reason,
|
|
318
|
-
lastSkipAt: now,
|
|
319
|
-
};
|
|
320
|
-
// Writes THIS workspace's file and nothing else. #3255 round 2 also deleted
|
|
321
|
-
// the file at the retired always-fold name; round 3 removed that, because
|
|
322
|
-
// on a case-sensitive host that name is not an orphan — it is the live
|
|
323
|
-
// current file of the case-variant sibling workspace, and the record
|
|
324
|
-
// carries no ownership field that could tell the two apart. The
|
|
325
|
-
// pre-upgrade file is left to the same existence gate every other stale
|
|
326
|
-
// tmp artifact has: nothing derives that name any more, so nothing reads
|
|
327
|
-
// it except a still-running pre-upgrade server, for which it is correct.
|
|
328
|
-
writeFileAtomic(turnEndStatusPathForCwd(cwd, platform), `${JSON.stringify(next)}\n`);
|
|
329
|
-
}
|
|
330
|
-
catch {
|
|
331
|
-
// telemetry only — a read-only tmpdir must not break the Stop hook
|
|
332
|
-
}
|
|
333
|
-
}
|
|
334
|
-
/**
|
|
335
|
-
* Ask the warm server to analyze a file. Resolves the server's result, or
|
|
336
|
-
* `undefined` on ANY failure (no server, refused, stale socket, timeout, bad
|
|
337
|
-
* response) so the caller transparently falls back to cold local analysis.
|
|
338
|
-
*/
|
|
339
|
-
export function requestWarmAnalyze(cwd, file, timeoutMs = 30_000) {
|
|
340
|
-
return new Promise((resolve) => {
|
|
341
|
-
let settled = false;
|
|
342
|
-
const finish = (value) => {
|
|
343
|
-
if (settled)
|
|
344
|
-
return;
|
|
345
|
-
settled = true;
|
|
346
|
-
clearTimeout(timer);
|
|
347
|
-
resolve(value);
|
|
348
|
-
};
|
|
349
|
-
const socket = net.createConnection(ipcPathForCwd(cwd));
|
|
350
|
-
socket.setEncoding("utf8");
|
|
351
|
-
const timer = setTimeout(() => {
|
|
352
|
-
socket.destroy();
|
|
353
|
-
finish(undefined);
|
|
354
|
-
}, timeoutMs);
|
|
355
|
-
timer.unref();
|
|
356
|
-
socket.on("connect", () => {
|
|
357
|
-
const request = { file, cwd };
|
|
358
|
-
socket.write(`${JSON.stringify(request)}\n`);
|
|
359
|
-
});
|
|
360
|
-
socket.on("data", createWarmIpcLineReader((line) => {
|
|
361
|
-
try {
|
|
362
|
-
const message = JSON.parse(line);
|
|
363
|
-
finish(message.error ? undefined : message.result);
|
|
364
|
-
}
|
|
365
|
-
catch {
|
|
366
|
-
finish(undefined);
|
|
367
|
-
}
|
|
368
|
-
socket.end();
|
|
369
|
-
}, {
|
|
370
|
-
label: "warm-analyze-reply",
|
|
371
|
-
// `finish` here only clears the timer and resolves — unlike
|
|
372
|
-
// `requestOverWarmIpc`'s, which destroys the socket itself — so the
|
|
373
|
-
// peer that misframed would otherwise keep an open connection and
|
|
374
|
-
// keep writing into a reader that ignores it.
|
|
375
|
-
onOverflow: () => {
|
|
376
|
-
socket.destroy();
|
|
377
|
-
finish(undefined);
|
|
378
|
-
},
|
|
379
|
-
}));
|
|
380
|
-
// No server / connection refused / reset → cold fallback.
|
|
381
|
-
socket.on("error", () => finish(undefined));
|
|
382
|
-
socket.on("close", () => finish(undefined));
|
|
383
|
-
});
|
|
384
|
-
}
|
|
385
|
-
/**
|
|
386
|
-
* The ceiling on ONE newline-framed line, for every reader below (#3383).
|
|
387
|
-
*
|
|
388
|
-
* Deliberately the same number as the spawn output cap rather than a second one
|
|
389
|
-
* to argue about: the largest legitimate line in this protocol is a
|
|
390
|
-
* `requestWarmDiagnostics` request carrying a file's whole content, or the
|
|
391
|
-
* diagnostics reply to it, and 32 MiB is far above anything the read guard lets
|
|
392
|
-
* through while staying 16x below V8's max string length — so the
|
|
393
|
-
* concatenation that crashed the host in #3375 is unreachable here rather than
|
|
394
|
-
* merely unlikely.
|
|
395
|
-
*/
|
|
396
|
-
export const MAX_FRAMED_LINE_BYTES = DEFAULT_MAX_OUTPUT_BYTES;
|
|
397
|
-
/**
|
|
398
|
-
* Newline-framed line reader for the warm IPC sockets and the MCP host's stdin.
|
|
399
|
-
*
|
|
400
|
-
* One-shot by default (#1219): the clients write exactly one newline-terminated
|
|
401
|
-
* request per connection and read one reply, so the server must dispatch at
|
|
402
|
-
* most one line and ignore anything after it — a `data` handler that keeps
|
|
403
|
-
* re-reading the same buffered line re-dispatches the request on stray bytes.
|
|
404
|
-
*
|
|
405
|
-
* BOUNDED since #3383. Every reader used to be `buffer += chunk` with no
|
|
406
|
-
* ceiling, so a peer that never sent a newline grew one JS string until the
|
|
407
|
-
* request's own timeout fired — measured through `requestWarmAnalyze` against a
|
|
408
|
-
* real socket: 64 MiB of newline-free reply, +929 MiB of heap, 20 s of it. Past
|
|
409
|
-
* {@link MAX_FRAMED_LINE_BYTES} the line is DISCARDED, the overflow is recorded
|
|
410
|
-
* once, and the caller's `onOverflow` decides the ending.
|
|
411
|
-
*
|
|
412
|
-
* The bound is on the FRAME, never on what is left over after a chunk's last
|
|
413
|
-
* newline (#3388 review H3388-1). The first version checked only the
|
|
414
|
-
* newline-free remainder, so a peer whose over-limit frame arrived with its
|
|
415
|
-
* newline in the SAME `data` chunk — which is what a single TCP segment or one
|
|
416
|
-
* `socket.write` produces — had its whole line dispatched, bound bypassed:
|
|
417
|
-
* measured at 33,554,433 bytes delivered, 0 overflow callbacks, 0 records. So
|
|
418
|
-
* each complete line is accounted for BEFORE it is dispatched, retained prefix
|
|
419
|
-
* included, and the remainder check below is now only the unterminated case.
|
|
420
|
-
*
|
|
421
|
-
* RESYNC applies to the unterminated case alone. A discarded UNTERMINATED line
|
|
422
|
-
* has a newline still to come, so framing skips to it and the next well-formed
|
|
423
|
-
* line is read normally rather than parsed as the dropped line's tail. A
|
|
424
|
-
* discarded COMPLETE line is already past its own newline, so framing continues
|
|
425
|
-
* from there — resyncing would eat the next line instead.
|
|
426
|
-
*
|
|
427
|
-
* Returns the handler to attach to the stream's `data` event.
|
|
428
|
-
*/
|
|
429
|
-
export function createWarmIpcLineReader(onLine, options) {
|
|
430
|
-
/** The unterminated head of a line, and its size. */
|
|
431
|
-
let buffer = "";
|
|
432
|
-
let bufferedBytes = 0;
|
|
433
|
-
let dispatched = false;
|
|
434
|
-
let resyncing = false;
|
|
435
|
-
/**
|
|
436
|
-
* Drop the frame, record it once, and let the caller end the exchange.
|
|
437
|
-
* `awaitingNewline` is the difference between the two overflow shapes: an
|
|
438
|
-
* unterminated line must be skipped up to the newline that has not arrived
|
|
439
|
-
* yet, a complete one must not, because framing is already past its newline.
|
|
440
|
-
*/
|
|
441
|
-
const overflow = (frameBytes, awaitingNewline) => {
|
|
442
|
-
buffer = "";
|
|
443
|
-
bufferedBytes = 0;
|
|
444
|
-
resyncing = awaitingNewline;
|
|
445
|
-
if (options.continuous !== true)
|
|
446
|
-
dispatched = true;
|
|
447
|
-
incrementDegradationCount({
|
|
448
|
-
kind: "ipc-frame-overflow",
|
|
449
|
-
subject: options.label,
|
|
450
|
-
reason: `discarded ${awaitingNewline ? "an unterminated" : "a complete"} line at ${frameBytes} bytes (limit ${MAX_FRAMED_LINE_BYTES})`,
|
|
451
|
-
metadata: {
|
|
452
|
-
limitBytes: MAX_FRAMED_LINE_BYTES,
|
|
453
|
-
overflowBytes: frameBytes,
|
|
454
|
-
terminated: !awaitingNewline,
|
|
455
|
-
},
|
|
456
|
-
});
|
|
457
|
-
options.onOverflow?.();
|
|
458
|
-
};
|
|
459
|
-
return (chunk) => {
|
|
460
|
-
if (dispatched)
|
|
461
|
-
return;
|
|
462
|
-
// Every scan below runs over the NEW chunk at an offset, never over the
|
|
463
|
-
// retained buffer, and the retained bytes are carried rather than
|
|
464
|
-
// re-measured. Both matter once the buffer is allowed to reach the bound:
|
|
465
|
-
// `retained.indexOf()` flattens the accumulated rope on every socket read,
|
|
466
|
-
// and one 36 MiB unframed reply arrives as ~550 reads, so the bound alone
|
|
467
|
-
// would trade an unbounded string for seconds of CPU. Measured on
|
|
468
|
-
// `tests/clients/mcp/ipc-frame-bounds.test.ts`, whose real-socket case
|
|
469
|
-
// sends exactly that: 16.2 s with a rescan per read, 1.2 s with this.
|
|
470
|
-
let from = 0;
|
|
471
|
-
if (resyncing) {
|
|
472
|
-
// Still inside the over-long line: retain nothing until its newline.
|
|
473
|
-
const end = chunk.indexOf("\n");
|
|
474
|
-
if (end === -1)
|
|
475
|
-
return;
|
|
476
|
-
resyncing = false;
|
|
477
|
-
from = end + 1;
|
|
478
|
-
}
|
|
479
|
-
let newline = chunk.indexOf("\n", from);
|
|
480
|
-
while (newline !== -1) {
|
|
481
|
-
const segment = chunk.slice(from, newline);
|
|
482
|
-
from = newline + 1;
|
|
483
|
-
// H3388-1: the FRAME's length — this chunk's segment plus whatever was
|
|
484
|
-
// retained for it — decided before the line exists as a string.
|
|
485
|
-
const frameBytes = bufferedBytes + Buffer.byteLength(segment);
|
|
486
|
-
if (frameBytes > MAX_FRAMED_LINE_BYTES) {
|
|
487
|
-
overflow(frameBytes, false);
|
|
488
|
-
if (dispatched)
|
|
489
|
-
return;
|
|
490
|
-
newline = chunk.indexOf("\n", from);
|
|
491
|
-
continue;
|
|
492
|
-
}
|
|
493
|
-
const line = buffer + segment;
|
|
494
|
-
buffer = "";
|
|
495
|
-
bufferedBytes = 0;
|
|
496
|
-
if (options.continuous !== true) {
|
|
497
|
-
dispatched = true;
|
|
498
|
-
onLine(line);
|
|
499
|
-
return;
|
|
500
|
-
}
|
|
501
|
-
onLine(line);
|
|
502
|
-
newline = chunk.indexOf("\n", from);
|
|
503
|
-
}
|
|
504
|
-
if (from < chunk.length) {
|
|
505
|
-
const rest = chunk.slice(from);
|
|
506
|
-
buffer += rest;
|
|
507
|
-
bufferedBytes += Buffer.byteLength(rest);
|
|
508
|
-
}
|
|
509
|
-
if (bufferedBytes <= MAX_FRAMED_LINE_BYTES)
|
|
510
|
-
return;
|
|
511
|
-
overflow(bufferedBytes, true);
|
|
512
|
-
};
|
|
513
|
-
}
|
|
514
|
-
export function createWarmIpcRequestQueue() {
|
|
515
|
-
let chain = Promise.resolve();
|
|
516
|
-
return {
|
|
517
|
-
enqueue(work) {
|
|
518
|
-
const next = chain.then(work);
|
|
519
|
-
chain = next.catch(() => undefined);
|
|
520
|
-
return next;
|
|
521
|
-
},
|
|
522
|
-
};
|
|
523
|
-
}
|