@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,524 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* CacheManager for pi-lens.
|
|
3
|
-
*
|
|
4
|
-
* Manages persistent cache for scanner results and turn state.
|
|
5
|
-
* Provides read/write/freshness checks for:
|
|
6
|
-
* - Scanner cache: <project-data-dir>/cache/{scanner}.json
|
|
7
|
-
* - Turn state: <project-data-dir>/turn-state.json
|
|
8
|
-
*
|
|
9
|
-
* `<project-data-dir>` is `getProjectDataDir(cwd)` (clients/file-utils.ts) --
|
|
10
|
-
* `<cwd>/.pi-lens` only when that legacy directory already exists, otherwise
|
|
11
|
-
* `~/.pi-lens/projects/<slug>` or a `PILENS_DATA_DIR` location. Never assume
|
|
12
|
-
* the legacy spelling, and never show it to an agent: build a displayed path
|
|
13
|
-
* with `displayProjectDataPath` (#2521).
|
|
14
|
-
*/
|
|
15
|
-
import { createSubsystemLogger } from "./extension-log.js";
|
|
16
|
-
import * as fs from "node:fs";
|
|
17
|
-
import * as path from "node:path";
|
|
18
|
-
import { getProjectDataDir } from "./file-utils.js";
|
|
19
|
-
import { writeFileAtomic } from "./atomic-write.js";
|
|
20
|
-
import { readJsonCache, readJsonCacheAsync } from "./json-cache-read.js";
|
|
21
|
-
import { isUnderDir, normalizeMapKey } from "./path-utils.js";
|
|
22
|
-
// --- Defaults ---
|
|
23
|
-
const DEFAULT_MAX_AGE_MS = 30 * 60 * 1000; // 30 minutes
|
|
24
|
-
const DEFAULT_TURN_STATE = {
|
|
25
|
-
files: {},
|
|
26
|
-
turnCycles: 0,
|
|
27
|
-
maxCycles: 3,
|
|
28
|
-
lastUpdated: "",
|
|
29
|
-
};
|
|
30
|
-
export const MCP_TURN_STATE_OWNER_ID = `mcp-${process.pid}`;
|
|
31
|
-
const TURN_OWNER_STALE_MS = 30 * 60 * 1000;
|
|
32
|
-
// --- Helpers ---
|
|
33
|
-
function getLensDir(cwd) {
|
|
34
|
-
return getProjectDataDir(cwd);
|
|
35
|
-
}
|
|
36
|
-
function getCacheDir(cwd) {
|
|
37
|
-
return path.join(getLensDir(cwd), "cache");
|
|
38
|
-
}
|
|
39
|
-
function getTurnStatePath(cwd) {
|
|
40
|
-
return path.join(getLensDir(cwd), "turn-state.json");
|
|
41
|
-
}
|
|
42
|
-
// --- Cache Manager ---
|
|
43
|
-
export class CacheManager {
|
|
44
|
-
log;
|
|
45
|
-
constructor(verbose = false) {
|
|
46
|
-
this.log = verbose ? createSubsystemLogger("cache") : () => { };
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* Convert a file path to a stable turn-state key.
|
|
50
|
-
* Uses normalized absolute paths first, then stores cwd-relative keys when possible.
|
|
51
|
-
*/
|
|
52
|
-
toTurnStateKey(filePath, cwd) {
|
|
53
|
-
const cwdNorm = normalizeMapKey(path.resolve(cwd));
|
|
54
|
-
const fileNorm = normalizeMapKey(path.resolve(cwd, filePath));
|
|
55
|
-
const rel = path.relative(cwdNorm, fileNorm).replace(/\\/g, "/");
|
|
56
|
-
if (!rel || rel === ".")
|
|
57
|
-
return fileNorm;
|
|
58
|
-
if (rel === ".." || rel.startsWith("../"))
|
|
59
|
-
return fileNorm;
|
|
60
|
-
return rel;
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* Get turn-state entry for a file path using normalized lookup.
|
|
64
|
-
*/
|
|
65
|
-
/**
|
|
66
|
-
* #2504: is this path inside the PROJECT the worklist belongs to?
|
|
67
|
-
*
|
|
68
|
-
* Routed through `isUnderDir` (which normalises via `normalizeFilePath`) so
|
|
69
|
-
* the answer is separator- and case-form independent, the same key rule
|
|
70
|
-
* every other turn-state map obeys.
|
|
71
|
-
*
|
|
72
|
-
* The root is the PROJECT root, not the caller's `cwd` (#2504 review round
|
|
73
|
-
* 2, F1). The two coincide for every producer whose `cwd` IS the session
|
|
74
|
-
* root, but not for `clients/lsp-mutation.ts`: `tools/lsp-navigation.ts`
|
|
75
|
-
* threads a `cwd`-scoped context for a call issued from a sub-package
|
|
76
|
-
* directory, so a monorepo-wide server's edit on a SIBLING package is
|
|
77
|
-
* inside the project and outside that `cwd`. Judging it against `cwd`
|
|
78
|
-
* dropped exactly the server-initiated edits #2450/#2479 exist to record.
|
|
79
|
-
* This is the same root `isRecordableProjectPath` (clients/file-utils.ts)
|
|
80
|
-
* is given at that call site — one predicate root, taken from
|
|
81
|
-
* `runtime.projectRoot`, not two that can disagree.
|
|
82
|
-
*/
|
|
83
|
-
isTurnStatePathWithinRoot(filePath, projectRoot) {
|
|
84
|
-
const root = path.resolve(projectRoot);
|
|
85
|
-
const abs = path.resolve(root, filePath);
|
|
86
|
-
if (normalizeMapKey(abs) === normalizeMapKey(root))
|
|
87
|
-
return false;
|
|
88
|
-
return isUnderDir(abs, root);
|
|
89
|
-
}
|
|
90
|
-
getTurnFileState(filePath, cwd) {
|
|
91
|
-
const state = this.readTurnState(cwd);
|
|
92
|
-
const key = this.toTurnStateKey(filePath, cwd);
|
|
93
|
-
return state.files[key];
|
|
94
|
-
}
|
|
95
|
-
// ---- Scanner Cache ----
|
|
96
|
-
/**
|
|
97
|
-
* The ONE staleness rule both scanner reads apply (#3274): the envelope's
|
|
98
|
-
* age in ms when it is inside `maxAgeMs`, or `null` — having logged the
|
|
99
|
-
* stale verdict — when it is not.
|
|
100
|
-
*
|
|
101
|
-
* Extracted rather than copied into {@link readCacheAsync} because the TTL
|
|
102
|
-
* boundary is exactly what the two seams must not disagree about while
|
|
103
|
-
* #3300 migrates callers across: a delivery that read one store through
|
|
104
|
-
* each method would otherwise be able to see it fresh and stale at once.
|
|
105
|
-
*/
|
|
106
|
-
freshAgeMs(scanner, meta, maxAgeMs) {
|
|
107
|
-
const age = Date.now() - new Date(meta.timestamp).getTime();
|
|
108
|
-
if (age > maxAgeMs) {
|
|
109
|
-
this.log(`Cache stale: ${scanner} (age: ${Math.round(age / 1000)}s, max: ${maxAgeMs / 1000}s)`);
|
|
110
|
-
return null;
|
|
111
|
-
}
|
|
112
|
-
return age;
|
|
113
|
-
}
|
|
114
|
-
/**
|
|
115
|
-
* Read a scanner cache entry WITHOUT blocking the event loop (#3274).
|
|
116
|
-
*
|
|
117
|
-
* `readCache` below is synchronous: two `existsSync` plus two
|
|
118
|
-
* `readFileSync`+`JSON.parse`, all of which complete during ARGUMENT
|
|
119
|
-
* EVALUATION. `bounded()` (`clients/deadline-utils.ts`) takes a promise, so
|
|
120
|
-
* a hook that wrapped the sync read registered a budget that could never be
|
|
121
|
-
* spent — probed on #3274 with an already-aborted signal and `ms: 0`:
|
|
122
|
-
* `bounded()` returned `undefined` and the read had already parsed its JSON.
|
|
123
|
-
* This sibling suspends on `fs.promises`, so the turn_end budget and the
|
|
124
|
-
* hook's `ctx.signal` can actually abandon it.
|
|
125
|
-
*
|
|
126
|
-
* Same outcomes as the sync seam — an envelope, or `null` for missing,
|
|
127
|
-
* stale, corrupt or unreadable — and the same parser
|
|
128
|
-
* (`readJsonCacheAsync`, the async sibling in `clients/json-cache-read.ts`;
|
|
129
|
-
* there is no second parser). ONE deliberate difference, in the verbose log
|
|
130
|
-
* only: a missing store is reported as `Cache miss: <scanner> — <err>` from
|
|
131
|
-
* the read's own ENOENT instead of a preceding `existsSync` pair, because
|
|
132
|
-
* the pair is half the blocking cost this method exists to remove.
|
|
133
|
-
*/
|
|
134
|
-
async readCacheAsync(scanner, cwd, maxAgeMs = DEFAULT_MAX_AGE_MS) {
|
|
135
|
-
const cachePath = path.join(getCacheDir(cwd), `${scanner}.json`);
|
|
136
|
-
const metaPath = path.join(getCacheDir(cwd), `${scanner}.meta.json`);
|
|
137
|
-
const onReadError = (err) => {
|
|
138
|
-
this.log(`Cache miss: ${scanner} — ${err}`);
|
|
139
|
-
};
|
|
140
|
-
const meta = await readJsonCacheAsync(metaPath, (parsed) => parsed, onReadError);
|
|
141
|
-
if (meta === undefined)
|
|
142
|
-
return null;
|
|
143
|
-
const age = this.freshAgeMs(scanner, meta, maxAgeMs);
|
|
144
|
-
if (age === null)
|
|
145
|
-
return null;
|
|
146
|
-
const data = await readJsonCacheAsync(cachePath, (parsed) => parsed, onReadError);
|
|
147
|
-
if (data === undefined)
|
|
148
|
-
return null;
|
|
149
|
-
this.log(`Cache hit: ${scanner} (age: ${Math.round(age / 1000)}s)`);
|
|
150
|
-
return { data, meta };
|
|
151
|
-
}
|
|
152
|
-
/**
|
|
153
|
-
* Read a scanner cache entry. Returns null if not found or stale.
|
|
154
|
-
*
|
|
155
|
-
* Synchronous, and therefore unboundable on a hook path — see
|
|
156
|
-
* {@link readCacheAsync}, and the `sync-hook-read` population in
|
|
157
|
-
* `tests/config/hook-await-bounds.test.ts` that counts the callers still
|
|
158
|
-
* on it. #3300 migrates them and deletes this method in its last slice.
|
|
159
|
-
*/
|
|
160
|
-
readCache(scanner, cwd, maxAgeMs = DEFAULT_MAX_AGE_MS) {
|
|
161
|
-
const cachePath = path.join(getCacheDir(cwd), `${scanner}.json`);
|
|
162
|
-
const metaPath = path.join(getCacheDir(cwd), `${scanner}.meta.json`);
|
|
163
|
-
if (!fs.existsSync(cachePath) || !fs.existsSync(metaPath)) {
|
|
164
|
-
this.log(`Cache miss: ${scanner} (files don't exist)`);
|
|
165
|
-
return null;
|
|
166
|
-
}
|
|
167
|
-
try {
|
|
168
|
-
const onReadError = (err) => {
|
|
169
|
-
this.log(`Cache read error: ${scanner} — ${err}`);
|
|
170
|
-
};
|
|
171
|
-
const meta = readJsonCache(metaPath, (parsed) => parsed, onReadError);
|
|
172
|
-
if (meta === undefined)
|
|
173
|
-
return null;
|
|
174
|
-
const age = this.freshAgeMs(scanner, meta, maxAgeMs);
|
|
175
|
-
if (age === null)
|
|
176
|
-
return null;
|
|
177
|
-
const data = readJsonCache(cachePath, (parsed) => parsed, onReadError);
|
|
178
|
-
if (data === undefined)
|
|
179
|
-
return null;
|
|
180
|
-
this.log(`Cache hit: ${scanner} (age: ${Math.round(age / 1000)}s)`);
|
|
181
|
-
return { data, meta };
|
|
182
|
-
}
|
|
183
|
-
catch (err) {
|
|
184
|
-
this.log(`Cache read error: ${scanner} — ${err}`);
|
|
185
|
-
return null;
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
/**
|
|
189
|
-
* Write a scanner cache entry.
|
|
190
|
-
*/
|
|
191
|
-
writeCache(scanner, data, cwd, extraMeta) {
|
|
192
|
-
const cacheDir = getCacheDir(cwd);
|
|
193
|
-
fs.mkdirSync(cacheDir, { recursive: true });
|
|
194
|
-
const cachePath = path.join(cacheDir, `${scanner}.json`);
|
|
195
|
-
const metaPath = path.join(cacheDir, `${scanner}.meta.json`);
|
|
196
|
-
const meta = {
|
|
197
|
-
timestamp: new Date().toISOString(),
|
|
198
|
-
...extraMeta,
|
|
199
|
-
};
|
|
200
|
-
writeFileAtomic(cachePath, JSON.stringify(data, null, 2), {
|
|
201
|
-
bestEffort: false,
|
|
202
|
-
});
|
|
203
|
-
writeFileAtomic(metaPath, JSON.stringify(meta, null, 2), {
|
|
204
|
-
bestEffort: false,
|
|
205
|
-
});
|
|
206
|
-
this.log(`Cache written: ${scanner}`);
|
|
207
|
-
}
|
|
208
|
-
/** Inspect a cache without changing the behavior of readCache consumers. */
|
|
209
|
-
inspectCache(scanner, cwd, maxAgeMs = DEFAULT_MAX_AGE_MS) {
|
|
210
|
-
const cachePath = path.join(getCacheDir(cwd), `${scanner}.json`);
|
|
211
|
-
const metaPath = path.join(getCacheDir(cwd), `${scanner}.meta.json`);
|
|
212
|
-
for (const cachePathname of [cachePath, metaPath]) {
|
|
213
|
-
try {
|
|
214
|
-
fs.statSync(cachePathname);
|
|
215
|
-
}
|
|
216
|
-
catch (err) {
|
|
217
|
-
if (err.code === "ENOENT")
|
|
218
|
-
return "missing";
|
|
219
|
-
return "unreadable";
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
try {
|
|
223
|
-
const meta = readJsonCache(metaPath, (parsed) => parsed);
|
|
224
|
-
if (!meta || typeof meta.timestamp !== "string")
|
|
225
|
-
return "malformed";
|
|
226
|
-
const timestamp = new Date(meta.timestamp).getTime();
|
|
227
|
-
if (!Number.isFinite(timestamp))
|
|
228
|
-
return "malformed";
|
|
229
|
-
const age = Date.now() - timestamp;
|
|
230
|
-
if (age < 0 || age > maxAgeMs)
|
|
231
|
-
return age < 0 ? "malformed" : "stale";
|
|
232
|
-
const data = readJsonCache(cachePath, (parsed) => parsed);
|
|
233
|
-
return data === undefined ? "malformed" : "fresh";
|
|
234
|
-
}
|
|
235
|
-
catch {
|
|
236
|
-
return "unreadable";
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
/**
|
|
240
|
-
* Check if a cache entry is fresh (exists and not expired).
|
|
241
|
-
*/
|
|
242
|
-
isCacheFresh(scanner, cwd, maxAgeMs = DEFAULT_MAX_AGE_MS) {
|
|
243
|
-
const metaPath = path.join(getCacheDir(cwd), `${scanner}.meta.json`);
|
|
244
|
-
if (!fs.existsSync(metaPath))
|
|
245
|
-
return false;
|
|
246
|
-
try {
|
|
247
|
-
const meta = readJsonCache(metaPath, (parsed) => parsed);
|
|
248
|
-
if (meta === undefined)
|
|
249
|
-
return false;
|
|
250
|
-
const age = Date.now() - new Date(meta.timestamp).getTime();
|
|
251
|
-
return age <= maxAgeMs;
|
|
252
|
-
}
|
|
253
|
-
catch {
|
|
254
|
-
return false;
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
/**
|
|
258
|
-
* Clear a specific cache entry.
|
|
259
|
-
*/
|
|
260
|
-
clearCache(scanner, cwd) {
|
|
261
|
-
const cachePath = path.join(getCacheDir(cwd), `${scanner}.json`);
|
|
262
|
-
const metaPath = path.join(getCacheDir(cwd), `${scanner}.meta.json`);
|
|
263
|
-
for (const p of [cachePath, metaPath]) {
|
|
264
|
-
try {
|
|
265
|
-
fs.unlinkSync(p);
|
|
266
|
-
}
|
|
267
|
-
catch (err) {
|
|
268
|
-
// ENOENT: file doesn't exist, other errors logged
|
|
269
|
-
if (err.code !== "ENOENT") {
|
|
270
|
-
this.log(`Failed to delete ${p}: ${err}`);
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
}
|
|
275
|
-
// ---- Turn State ----
|
|
276
|
-
/**
|
|
277
|
-
* Read turn state. Returns default if not found.
|
|
278
|
-
*/
|
|
279
|
-
readTurnState(cwd) {
|
|
280
|
-
const statePath = getTurnStatePath(cwd);
|
|
281
|
-
if (!fs.existsSync(statePath)) {
|
|
282
|
-
return {
|
|
283
|
-
...DEFAULT_TURN_STATE,
|
|
284
|
-
files: {},
|
|
285
|
-
lastUpdated: new Date().toISOString(),
|
|
286
|
-
};
|
|
287
|
-
}
|
|
288
|
-
const state = readJsonCache(statePath, (parsed) => parsed);
|
|
289
|
-
return (state ?? {
|
|
290
|
-
...DEFAULT_TURN_STATE,
|
|
291
|
-
files: {},
|
|
292
|
-
lastUpdated: new Date().toISOString(),
|
|
293
|
-
});
|
|
294
|
-
}
|
|
295
|
-
/**
|
|
296
|
-
* Write turn state.
|
|
297
|
-
*/
|
|
298
|
-
writeTurnState(state, cwd) {
|
|
299
|
-
const lensDir = getLensDir(cwd);
|
|
300
|
-
fs.mkdirSync(lensDir, { recursive: true });
|
|
301
|
-
const statePath = getTurnStatePath(cwd);
|
|
302
|
-
state.lastUpdated = new Date().toISOString();
|
|
303
|
-
writeFileAtomic(statePath, JSON.stringify(state, null, 2));
|
|
304
|
-
}
|
|
305
|
-
/** Return whether a writer may read/write this workspace worklist. */
|
|
306
|
-
getTurnStateAccess(cwd, owner) {
|
|
307
|
-
const state = this.readTurnState(cwd);
|
|
308
|
-
const hasFiles = Object.keys(state.files ?? {}).length > 0;
|
|
309
|
-
if (!state.owner) {
|
|
310
|
-
if (!state.sessionId || state.sessionId === owner.id) {
|
|
311
|
-
// #2504: an OWNERLESS state was unconditionally "owned" here, and
|
|
312
|
-
// ownerless was the resting shape (pre-#2504 `clearTurnState`
|
|
313
|
-
// dropped the owner and `addModifiedRange` only stamps one when a
|
|
314
|
-
// sessionId is supplied). A worklist persisted by a session that
|
|
315
|
-
// has since exited was therefore adopted wholesale by the next
|
|
316
|
-
// session — 154 historical paths reported as "modified this turn"
|
|
317
|
-
// on a turn that made no tool calls at all. A worklist whose last
|
|
318
|
-
// write predates this session's start is not this session's work.
|
|
319
|
-
if (hasFiles && this.turnStatePredatesSession(state, owner)) {
|
|
320
|
-
return "available";
|
|
321
|
-
}
|
|
322
|
-
return "owned";
|
|
323
|
-
}
|
|
324
|
-
// Pre-owner files have no liveness information. Preserve the existing
|
|
325
|
-
// stale-session eviction behavior for this legacy shape.
|
|
326
|
-
return "available";
|
|
327
|
-
}
|
|
328
|
-
if (state.owner.kind === owner.kind && state.owner.id === owner.id) {
|
|
329
|
-
return "owned";
|
|
330
|
-
}
|
|
331
|
-
// #2504: an EMPTY worklist carries nothing to protect, so it never
|
|
332
|
-
// latches a foreign writer out. This keeps the new `clearTurnState`
|
|
333
|
-
// owner stamp from turning a cleared worklist into a cross-process lock:
|
|
334
|
-
// an MCP writer in another process must still be able to register work
|
|
335
|
-
// against a worklist a pi session just cleared, exactly as it could when
|
|
336
|
-
// clearing left the state ownerless.
|
|
337
|
-
if (!hasFiles)
|
|
338
|
-
return "owned";
|
|
339
|
-
return this.isTurnStateOwnerStale(state.owner)
|
|
340
|
-
? "available"
|
|
341
|
-
: "foreign-live";
|
|
342
|
-
}
|
|
343
|
-
/**
|
|
344
|
-
* #2504: true when this worklist was last written before the asking
|
|
345
|
-
* session began. `lastUpdated` is restamped by `writeTurnState` on EVERY
|
|
346
|
-
* write (add/clear/cycle), so a live session's own worklist is always
|
|
347
|
-
* newer than its start; only a carried-over file can be older. An
|
|
348
|
-
* unparseable stamp is treated as stale — a worklist we cannot date is
|
|
349
|
-
* exactly the legacy shape this gate exists to evict.
|
|
350
|
-
*/
|
|
351
|
-
turnStatePredatesSession(state, owner) {
|
|
352
|
-
const startedAt = owner.sessionStartedAt;
|
|
353
|
-
if (startedAt === undefined || !Number.isFinite(startedAt))
|
|
354
|
-
return false;
|
|
355
|
-
const lastUpdated = Date.parse(state.lastUpdated ?? "");
|
|
356
|
-
if (!Number.isFinite(lastUpdated))
|
|
357
|
-
return true;
|
|
358
|
-
return lastUpdated < startedAt;
|
|
359
|
-
}
|
|
360
|
-
isTurnStateOwnerStale(owner) {
|
|
361
|
-
if (owner.pid > 0 && owner.pid !== process.pid) {
|
|
362
|
-
try {
|
|
363
|
-
process.kill(owner.pid, 0);
|
|
364
|
-
return false;
|
|
365
|
-
}
|
|
366
|
-
catch {
|
|
367
|
-
return true;
|
|
368
|
-
}
|
|
369
|
-
}
|
|
370
|
-
const lastSeen = Date.parse(owner.lastSeen);
|
|
371
|
-
return (!Number.isFinite(lastSeen) || Date.now() - lastSeen > TURN_OWNER_STALE_MS);
|
|
372
|
-
}
|
|
373
|
-
/**
|
|
374
|
-
* Add or update a file's modified ranges in turn state.
|
|
375
|
-
* Merges overlapping ranges. `sessionId:null` deliberately preserves the
|
|
376
|
-
* current owner; callers must provide an explicit owner id to claim a stale
|
|
377
|
-
* worklist.
|
|
378
|
-
*/
|
|
379
|
-
addModifiedRange(filePath, range, importsChanged, cwd, sessionId, ownerKind = "pi", projectRoot) {
|
|
380
|
-
// #2504: the worklist is a PROJECT worklist. A path outside the project
|
|
381
|
-
// was accepted and keyed by its absolute path, so a prior session's
|
|
382
|
-
// scratchpad, `~/.claude/plans/*.md` and `~/.plegma/work/.../TASK.md`
|
|
383
|
-
// all became "modified files" that turn_end then fed to the test runner
|
|
384
|
-
// and opened in an LSP client. Reject before the owner stamp below, so
|
|
385
|
-
// an out-of-project write cannot claim the worklist either.
|
|
386
|
-
//
|
|
387
|
-
// `projectRoot` defaults to `cwd` — true for every producer whose cwd
|
|
388
|
-
// IS the session root. A caller whose `cwd` is NARROWER than the
|
|
389
|
-
// project (an LSP call issued from a sub-package directory) passes the
|
|
390
|
-
// real root explicitly; `cwd` still selects which `turn-state.json`
|
|
391
|
-
// the entry lands in, exactly as before (#2504 review round 2, F1).
|
|
392
|
-
const containmentRoot = projectRoot ?? cwd;
|
|
393
|
-
if (!this.isTurnStatePathWithinRoot(filePath, containmentRoot)) {
|
|
394
|
-
this.log(`turn-state: rejected out-of-project path ${filePath} (project root ${containmentRoot})`);
|
|
395
|
-
return this.readTurnState(cwd);
|
|
396
|
-
}
|
|
397
|
-
const state = this.readTurnState(cwd);
|
|
398
|
-
if (sessionId) {
|
|
399
|
-
const owner = {
|
|
400
|
-
kind: ownerKind,
|
|
401
|
-
id: sessionId,
|
|
402
|
-
pid: process.pid,
|
|
403
|
-
lastSeen: new Date().toISOString(),
|
|
404
|
-
};
|
|
405
|
-
if (this.getTurnStateAccess(cwd, owner) === "foreign-live")
|
|
406
|
-
return state;
|
|
407
|
-
state.sessionId = sessionId;
|
|
408
|
-
state.owner = owner;
|
|
409
|
-
}
|
|
410
|
-
const normalizedPath = this.toTurnStateKey(filePath, cwd);
|
|
411
|
-
const existing = state.files[normalizedPath];
|
|
412
|
-
if (existing) {
|
|
413
|
-
// Merge ranges
|
|
414
|
-
existing.modifiedRanges = this.mergeRanges([
|
|
415
|
-
...existing.modifiedRanges,
|
|
416
|
-
range,
|
|
417
|
-
]);
|
|
418
|
-
existing.importsChanged = existing.importsChanged || importsChanged;
|
|
419
|
-
existing.lastEdit = new Date().toISOString();
|
|
420
|
-
}
|
|
421
|
-
else {
|
|
422
|
-
state.files[normalizedPath] = {
|
|
423
|
-
modifiedRanges: [range],
|
|
424
|
-
importsChanged,
|
|
425
|
-
lastEdit: new Date().toISOString(),
|
|
426
|
-
};
|
|
427
|
-
}
|
|
428
|
-
this.writeTurnState(state, cwd);
|
|
429
|
-
return state;
|
|
430
|
-
}
|
|
431
|
-
/**
|
|
432
|
-
* Clear turn state (after turn_end processes it).
|
|
433
|
-
*/
|
|
434
|
-
clearTurnState(cwd, owner) {
|
|
435
|
-
const currentState = this.readTurnState(cwd);
|
|
436
|
-
const isCurrentOwner = this.getTurnStateAccess(cwd, owner) !== "foreign-live";
|
|
437
|
-
if (!isCurrentOwner && process.pid !== currentState.owner?.pid)
|
|
438
|
-
return false;
|
|
439
|
-
// #2504: stamp the CLEARING owner. Dropping `owner`/`sessionId` here made
|
|
440
|
-
// ownerless the resting shape of turn-state.json, which is what let the
|
|
441
|
-
// next session read a carried-over worklist as its own. A cleared state
|
|
442
|
-
// now says who cleared it and when, so `getTurnStateAccess` can judge it
|
|
443
|
-
// by liveness like any other owned state — and, since the worklist is
|
|
444
|
-
// empty, the stamp never latches another writer out (see the
|
|
445
|
-
// empty-worklist branch there).
|
|
446
|
-
const state = {
|
|
447
|
-
...DEFAULT_TURN_STATE,
|
|
448
|
-
files: {}, // fresh object — DEFAULT_TURN_STATE.files can be polluted by addModifiedRange
|
|
449
|
-
lastUpdated: new Date().toISOString(),
|
|
450
|
-
sessionId: owner.id,
|
|
451
|
-
owner: {
|
|
452
|
-
kind: owner.kind,
|
|
453
|
-
id: owner.id,
|
|
454
|
-
pid: process.pid,
|
|
455
|
-
lastSeen: new Date().toISOString(),
|
|
456
|
-
sessionStartedAt: owner.sessionStartedAt,
|
|
457
|
-
},
|
|
458
|
-
};
|
|
459
|
-
this.writeTurnState(state, cwd);
|
|
460
|
-
return true;
|
|
461
|
-
}
|
|
462
|
-
/**
|
|
463
|
-
* Increment turn cycle counter.
|
|
464
|
-
*/
|
|
465
|
-
incrementTurnCycle(cwd, owner) {
|
|
466
|
-
const state = this.readTurnState(cwd);
|
|
467
|
-
const isCurrentOwner = this.getTurnStateAccess(cwd, owner) !== "foreign-live";
|
|
468
|
-
if (!isCurrentOwner && process.pid !== state.owner?.pid)
|
|
469
|
-
return state;
|
|
470
|
-
state.turnCycles++;
|
|
471
|
-
this.writeTurnState(state, cwd);
|
|
472
|
-
return state;
|
|
473
|
-
}
|
|
474
|
-
/**
|
|
475
|
-
* Check if max cycles exceeded.
|
|
476
|
-
*/
|
|
477
|
-
isMaxCyclesExceeded(cwd) {
|
|
478
|
-
const state = this.readTurnState(cwd);
|
|
479
|
-
return state.turnCycles >= state.maxCycles;
|
|
480
|
-
}
|
|
481
|
-
/**
|
|
482
|
-
* Get files that need jscpd re-scan (any edit).
|
|
483
|
-
* Only returns source code files jscpd can meaningfully analyse.
|
|
484
|
-
*/
|
|
485
|
-
getFilesForJscpd(cwd) {
|
|
486
|
-
const state = this.readTurnState(cwd);
|
|
487
|
-
return Object.keys(state.files).filter((f) => /\.(ts|tsx|js|jsx|mjs|cjs|py|go|rs|rb|java|cs|php|cpp|c|h|hpp|swift|kt)$/.test(f));
|
|
488
|
-
}
|
|
489
|
-
/**
|
|
490
|
-
* Get files that need madge re-scan (imports changed).
|
|
491
|
-
*/
|
|
492
|
-
getFilesForMadge(cwd) {
|
|
493
|
-
const state = this.readTurnState(cwd);
|
|
494
|
-
return Object.entries(state.files)
|
|
495
|
-
.filter(([, f]) => f.importsChanged)
|
|
496
|
-
.map(([p]) => p);
|
|
497
|
-
}
|
|
498
|
-
// ---- Utilities ----
|
|
499
|
-
/**
|
|
500
|
-
* Merge overlapping or adjacent ranges.
|
|
501
|
-
*/
|
|
502
|
-
mergeRanges(ranges) {
|
|
503
|
-
if (ranges.length === 0)
|
|
504
|
-
return [];
|
|
505
|
-
const sorted = [...ranges].sort((a, b) => a.start - b.start);
|
|
506
|
-
const merged = [sorted[0]];
|
|
507
|
-
for (const current of sorted.slice(1)) {
|
|
508
|
-
const last = merged[merged.length - 1];
|
|
509
|
-
if (current.start <= last.end + 1) {
|
|
510
|
-
last.end = Math.max(last.end, current.end);
|
|
511
|
-
}
|
|
512
|
-
else {
|
|
513
|
-
merged.push({ ...current });
|
|
514
|
-
}
|
|
515
|
-
}
|
|
516
|
-
return merged;
|
|
517
|
-
}
|
|
518
|
-
/**
|
|
519
|
-
* Check if a line falls within any modified range.
|
|
520
|
-
*/
|
|
521
|
-
isLineInModifiedRange(line, ranges) {
|
|
522
|
-
return ranges.some((r) => r.start <= line && line <= r.end);
|
|
523
|
-
}
|
|
524
|
-
}
|