@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,197 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Review-loop helpers for the MCP path: forking a `fresh` worker (so an analysis
|
|
3
|
-
* reflects the latest build, not the long-lived server's stale image) and
|
|
4
|
-
* rebuilding the dist/in-place output so `fresh` picks the change up.
|
|
5
|
-
*
|
|
6
|
-
* Together these close the "stale-process trap": commit → `pilens_rebuild` →
|
|
7
|
-
* `pilens_analyze mode=fresh` measures the just-built code first-hand.
|
|
8
|
-
*/
|
|
9
|
-
import { spawn } from "node:child_process";
|
|
10
|
-
import { existsSync } from "node:fs";
|
|
11
|
-
import { join } from "node:path";
|
|
12
|
-
import { pmBinary, resolveNodePackageManager, runScriptArgs, } from "../package-manager.js";
|
|
13
|
-
import { incrementDegradationCount } from "../degradation-ledger.js";
|
|
14
|
-
import { safeSpawnAsync } from "../safe-spawn.js";
|
|
15
|
-
import { createBoundedOutputSink, DEFAULT_MAX_OUTPUT_BYTES, } from "../spawn-output-cap.js";
|
|
16
|
-
/**
|
|
17
|
-
* Which npm script rebuilds the layout the server is running from. A server at
|
|
18
|
-
* `…/dist/mcp/server.js` is the precompiled dist (`build:dist` recreates it); a
|
|
19
|
-
* server at `…/mcp/server.js` is the in-place dev build (`build` emits beside the
|
|
20
|
-
* sources). The forked worker is always resolved relative to the server, so it
|
|
21
|
-
* shares the server's layout — rebuilding that layout updates the worker.
|
|
22
|
-
*/
|
|
23
|
-
export function resolveRebuildScript(serverFilePath) {
|
|
24
|
-
return serverFilePath.replace(/\\/g, "/").includes("/dist/")
|
|
25
|
-
? "build:dist"
|
|
26
|
-
: "build";
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Fork `node <workerPath>` to analyze a file in a fresh process. We spawn node
|
|
30
|
-
* directly (no shell) so an interpreter path containing spaces is safe on
|
|
31
|
-
* Windows — `safeSpawnAsync`'s shell mode does not escape the command itself.
|
|
32
|
-
*
|
|
33
|
-
* #3383: both pipes accumulate through {@link createBoundedOutputSink} rather
|
|
34
|
-
* than `+=`. The worker writes one JSON document to stdout, so an unbounded
|
|
35
|
-
* accumulation here could reach the same ending #3375 fixed at the shared spawn
|
|
36
|
-
* seam — V8 refusing the next concatenation with `RangeError: Invalid string
|
|
37
|
-
* length` inside a `data` handler, uncatchable by this promise. The only thing
|
|
38
|
-
* bounding it before was the `timeoutMs` kill, and a worker can emit hundreds
|
|
39
|
-
* of MiB long before 120 s elapse.
|
|
40
|
-
*/
|
|
41
|
-
export function analyzeFileFresh(workerPath, file, cwd, options = {}, timeoutMs = 120_000) {
|
|
42
|
-
return new Promise((resolve) => {
|
|
43
|
-
const args = [workerPath, `--file=${file}`, `--cwd=${cwd}`];
|
|
44
|
-
if (options.flags)
|
|
45
|
-
args.push(`--flags=${JSON.stringify(options.flags)}`);
|
|
46
|
-
let child;
|
|
47
|
-
try {
|
|
48
|
-
child = spawn(process.execPath, args, {
|
|
49
|
-
stdio: ["ignore", "pipe", "pipe"],
|
|
50
|
-
});
|
|
51
|
-
}
|
|
52
|
-
catch (err) {
|
|
53
|
-
// SYNCHRONOUS spawn throw (Windows `spawn UNKNOWN`/EINVAL, the pidusage
|
|
54
|
-
// bug class, #533) — resolve the failure rather than reject/crash the
|
|
55
|
-
// host; every caller inspects the outcome's `error` field.
|
|
56
|
-
resolve({
|
|
57
|
-
error: `failed to fork worker: ${err instanceof Error ? err.message : String(err)}`,
|
|
58
|
-
});
|
|
59
|
-
return;
|
|
60
|
-
}
|
|
61
|
-
const stdout = createBoundedOutputSink();
|
|
62
|
-
const stderr = createBoundedOutputSink();
|
|
63
|
-
let settled = false;
|
|
64
|
-
const finish = (outcome) => {
|
|
65
|
-
if (settled)
|
|
66
|
-
return;
|
|
67
|
-
settled = true;
|
|
68
|
-
clearTimeout(timer);
|
|
69
|
-
resolve(outcome);
|
|
70
|
-
};
|
|
71
|
-
const timer = setTimeout(() => {
|
|
72
|
-
child.kill();
|
|
73
|
-
finish({ error: `fresh analyze timed out after ${timeoutMs}ms` });
|
|
74
|
-
}, timeoutMs);
|
|
75
|
-
child.stdout.setEncoding("utf8");
|
|
76
|
-
child.stdout.on("data", (chunk) => {
|
|
77
|
-
// Settled already means timed out or failed: keep accumulating and the
|
|
78
|
-
// retained output outlives the promise nobody is awaiting any more.
|
|
79
|
-
if (settled)
|
|
80
|
-
return;
|
|
81
|
-
stdout.append(chunk);
|
|
82
|
-
// Truncated stdout is never parseable JSON, so the run is over. Report
|
|
83
|
-
// the cap as the ending instead of letting `JSON.parse` blame the
|
|
84
|
-
// worker's output shape, and terminate the producer.
|
|
85
|
-
if (!stdout.truncated)
|
|
86
|
-
return;
|
|
87
|
-
incrementDegradationCount({
|
|
88
|
-
kind: "spawn-output-cap-truncated",
|
|
89
|
-
subject: "mcp-fresh-analyze",
|
|
90
|
-
reason: `worker stdout reached the ${DEFAULT_MAX_OUTPUT_BYTES}-byte default cap after ${stdout.observedBytes} bytes; worker terminated`,
|
|
91
|
-
metadata: {
|
|
92
|
-
capBytes: DEFAULT_MAX_OUTPUT_BYTES,
|
|
93
|
-
capSource: "default",
|
|
94
|
-
observedBytes: stdout.observedBytes,
|
|
95
|
-
killed: true,
|
|
96
|
-
},
|
|
97
|
-
});
|
|
98
|
-
try {
|
|
99
|
-
child.kill();
|
|
100
|
-
}
|
|
101
|
-
catch {
|
|
102
|
-
// Best-effort: the worker may already be gone, and this runs inside a
|
|
103
|
-
// `data` handler where a throw would be uncatchable.
|
|
104
|
-
}
|
|
105
|
-
finish({
|
|
106
|
-
error: `worker output exceeded ${DEFAULT_MAX_OUTPUT_BYTES} bytes`,
|
|
107
|
-
});
|
|
108
|
-
});
|
|
109
|
-
child.stderr.setEncoding("utf8");
|
|
110
|
-
child.stderr.on("data", (chunk) => {
|
|
111
|
-
if (settled)
|
|
112
|
-
return;
|
|
113
|
-
stderr.append(chunk);
|
|
114
|
-
});
|
|
115
|
-
child.on("error", (err) => finish({ error: `failed to fork worker: ${err.message}` }));
|
|
116
|
-
child.on("close", (code) => {
|
|
117
|
-
if (code !== 0) {
|
|
118
|
-
finish({
|
|
119
|
-
error: `worker exited ${code}: ${stderr.text.trim() || "(no stderr)"}`,
|
|
120
|
-
});
|
|
121
|
-
return;
|
|
122
|
-
}
|
|
123
|
-
try {
|
|
124
|
-
finish({ result: JSON.parse(stdout.text) });
|
|
125
|
-
}
|
|
126
|
-
catch {
|
|
127
|
-
finish({
|
|
128
|
-
error: `worker produced invalid JSON (${stderr.text.trim() || stdout.text.slice(0, 200)})`,
|
|
129
|
-
});
|
|
130
|
-
}
|
|
131
|
-
});
|
|
132
|
-
});
|
|
133
|
-
}
|
|
134
|
-
/**
|
|
135
|
-
* Rebuilds are safe only from a source checkout. Published packages contain
|
|
136
|
-
* `dist/` but not tsconfig.dist.json, and build:dist deletes dist before tsc.
|
|
137
|
-
* The node_modules check also refuses unusual installs that happen to carry a
|
|
138
|
-
* stray tsconfig.
|
|
139
|
-
*/
|
|
140
|
-
export function canRebuildPiLens(repoRoot) {
|
|
141
|
-
const inNodeModules = /(^|[\\/])node_modules([\\/]|$)/i.test(repoRoot);
|
|
142
|
-
return !inNodeModules && existsSync(join(repoRoot, "tsconfig.dist.json"));
|
|
143
|
-
}
|
|
144
|
-
export const REBUILD_UNAVAILABLE_MESSAGE = "pilens_rebuild is unavailable in an installed pi-lens package. Rebuilding is only safe from a source checkout containing tsconfig.dist.json; reinstall or update pi-lens through your package manager instead.";
|
|
145
|
-
/**
|
|
146
|
-
* Run `<pm> run <script>` in the pi-lens repo, where `<pm>` is resolved from the
|
|
147
|
-
* repo's lockfile / installed managers. Uses `safeSpawnAsync` (Windows
|
|
148
|
-
* `.cmd`/shell-aware). `ignoreAmbientSignal` — a rebuild must run to completion.
|
|
149
|
-
*/
|
|
150
|
-
export async function runRebuild(repoRoot, script, timeoutMs = 300_000) {
|
|
151
|
-
const start = Date.now();
|
|
152
|
-
if (!canRebuildPiLens(repoRoot)) {
|
|
153
|
-
return {
|
|
154
|
-
ok: false,
|
|
155
|
-
script,
|
|
156
|
-
durationMs: Date.now() - start,
|
|
157
|
-
output: REBUILD_UNAVAILABLE_MESSAGE,
|
|
158
|
-
};
|
|
159
|
-
}
|
|
160
|
-
const packageManager = await resolveNodePackageManager(repoRoot);
|
|
161
|
-
const res = await safeSpawnAsync(pmBinary(packageManager), runScriptArgs(script), {
|
|
162
|
-
cwd: repoRoot,
|
|
163
|
-
timeout: timeoutMs,
|
|
164
|
-
ignoreAmbientSignal: true,
|
|
165
|
-
});
|
|
166
|
-
const output = `${res.stdout}\n${res.stderr}`.trim();
|
|
167
|
-
return {
|
|
168
|
-
ok: !res.error && res.status === 0,
|
|
169
|
-
script,
|
|
170
|
-
packageManager,
|
|
171
|
-
durationMs: Date.now() - start,
|
|
172
|
-
output: output.slice(-2000),
|
|
173
|
-
};
|
|
174
|
-
}
|
|
175
|
-
/**
|
|
176
|
-
* Dedupe project-scan diagnostics (the cheap scanners can emit the same
|
|
177
|
-
* file:line:rule twice) and aggregate counts by rule and file — so the
|
|
178
|
-
* `pilens_project_scan` tool returns a compact, scannable summary instead of
|
|
179
|
-
* dumping ~100 raw objects into the agent's context.
|
|
180
|
-
*/
|
|
181
|
-
export function summarizeScan(diagnostics) {
|
|
182
|
-
const seen = new Set();
|
|
183
|
-
const deduped = [];
|
|
184
|
-
const byRule = {};
|
|
185
|
-
const byFile = {};
|
|
186
|
-
for (const diagnostic of diagnostics) {
|
|
187
|
-
const ruleId = diagnostic.rule ?? diagnostic.runner ?? diagnostic.tool ?? "unknown";
|
|
188
|
-
const key = `${diagnostic.filePath}|${diagnostic.line ?? "?"}|${diagnostic.column ?? "?"}|${ruleId}`;
|
|
189
|
-
if (seen.has(key))
|
|
190
|
-
continue;
|
|
191
|
-
seen.add(key);
|
|
192
|
-
deduped.push(diagnostic);
|
|
193
|
-
byRule[ruleId] = (byRule[ruleId] ?? 0) + 1;
|
|
194
|
-
byFile[diagnostic.filePath] = (byFile[diagnostic.filePath] ?? 0) + 1;
|
|
195
|
-
}
|
|
196
|
-
return { deduped, byRule, byFile };
|
|
197
|
-
}
|
|
@@ -1,412 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Tier 2 of the MCP path: drive pi-lens's *real* lifecycle handlers
|
|
3
|
-
* (`handleSessionStart`, `handleTurnEnd`) instead of re-implementing the runners
|
|
4
|
-
* they orchestrate. This is what exposes the layers the per-edit dispatch slice
|
|
5
|
-
* doesn't — session-start warms the dominant-language LSP (so warm `analyze` is
|
|
6
|
-
* LSP-complete), establishes the error-debt baseline + complexity baselines, and
|
|
7
|
-
* kicks off knip/jscpd/type-coverage/dep/secrets scans; turn-end runs
|
|
8
|
-
* knip incrementally, dep-circular, tests, cascade, and the
|
|
9
|
-
* actionable/code-quality aggregation.
|
|
10
|
-
*
|
|
11
|
-
* The handlers don't return findings — they emit them through the same
|
|
12
|
-
* cache/context bridge pi consumes (`consume*` from runtime-context). We drive
|
|
13
|
-
* the handler, then consume that bridge and hand the text back as the tool result.
|
|
14
|
-
*
|
|
15
|
-
* The host coupling stays thin: a `getFlag` shim, no-op notify/dbg/log, a
|
|
16
|
-
* persistent RuntimeCoordinator + CacheManager (so baselines/turn-state survive
|
|
17
|
-
* across calls, like a real session), and the bootstrap client bundle.
|
|
18
|
-
*/
|
|
19
|
-
import * as crypto from "node:crypto";
|
|
20
|
-
import * as fs from "node:fs";
|
|
21
|
-
import * as path from "node:path";
|
|
22
|
-
import { AstGrepClient } from "../ast-grep-client.js";
|
|
23
|
-
import { loadBootstrapClients, residentBootstrapAccess, } from "../bootstrap.js";
|
|
24
|
-
import { CacheManager, MCP_TURN_STATE_OWNER_ID, } from "../cache-manager.js";
|
|
25
|
-
import { resetDispatchBaselines } from "../dispatch/integration.js";
|
|
26
|
-
import { resetFormatService } from "../format-service.js";
|
|
27
|
-
import { getLSPService, resetLSPService } from "../lsp/index.js";
|
|
28
|
-
import { acknowledgeTestFindings, acknowledgeTurnEndFindings, consumeSessionStartGuidance, consumeTestFindings, consumeTurnEndFindings, peekTestFindings, peekTurnEndFindings, } from "../runtime-context.js";
|
|
29
|
-
import { RuntimeCoordinator } from "../runtime-coordinator.js";
|
|
30
|
-
import { handleSessionStart } from "../runtime-session.js";
|
|
31
|
-
import { handleTurnEnd } from "../runtime-turn.js";
|
|
32
|
-
import { createMcpHost } from "./host-shim.js";
|
|
33
|
-
import { startSituationalToolTelemetrySession } from "../situational-tool-telemetry.js";
|
|
34
|
-
import { bounded } from "../deadline-utils.js";
|
|
35
|
-
import { HOOK_WALL_BUDGET_MS } from "../hook-budgets.js";
|
|
36
|
-
let contextPromise;
|
|
37
|
-
let resolvedRuntime;
|
|
38
|
-
/**
|
|
39
|
-
* Lazily build (once) the persistent session context shared across MCP
|
|
40
|
-
* calls. A rejected build (e.g. `loadBootstrapClients` hitting a transient
|
|
41
|
-
* fs error) must not poison every later MCP call for the rest of the
|
|
42
|
-
* process — evict the memo on rejection so the next call retries (#1570).
|
|
43
|
-
*/
|
|
44
|
-
export function getMcpSessionContext() {
|
|
45
|
-
contextPromise ??= (async () => {
|
|
46
|
-
const context = {
|
|
47
|
-
runtime: new RuntimeCoordinator(),
|
|
48
|
-
cacheManager: new CacheManager(),
|
|
49
|
-
astGrepClient: new AstGrepClient(),
|
|
50
|
-
clients: await loadBootstrapClients(),
|
|
51
|
-
};
|
|
52
|
-
resolvedRuntime = context.runtime;
|
|
53
|
-
return context;
|
|
54
|
-
})().catch((err) => {
|
|
55
|
-
contextPromise = undefined;
|
|
56
|
-
throw err;
|
|
57
|
-
});
|
|
58
|
-
return contextPromise;
|
|
59
|
-
}
|
|
60
|
-
/** Synchronous peek at the session runtime, for construction sites that cannot
|
|
61
|
-
* await (e.g. the MCP server's tool wiring). Returns undefined until a session
|
|
62
|
-
* context has actually been built — advisory validation then honestly skips
|
|
63
|
-
* the session-identity check instead of comparing against a phantom session. */
|
|
64
|
-
export function peekMcpSessionRuntime() {
|
|
65
|
-
return resolvedRuntime;
|
|
66
|
-
}
|
|
67
|
-
/** Test hook — drop the cached context so a fresh one is built next call. */
|
|
68
|
-
export function _resetMcpSessionContext() {
|
|
69
|
-
contextPromise = undefined;
|
|
70
|
-
resolvedRuntime = undefined;
|
|
71
|
-
}
|
|
72
|
-
const noop = () => { };
|
|
73
|
-
function joinMessages(consumed) {
|
|
74
|
-
if (!consumed?.messages?.length)
|
|
75
|
-
return undefined;
|
|
76
|
-
return consumed.messages.map((message) => message.content).join("\n\n");
|
|
77
|
-
}
|
|
78
|
-
const degradedSessionStart = {
|
|
79
|
-
aliveLspClients: 0,
|
|
80
|
-
};
|
|
81
|
-
/**
|
|
82
|
-
* Run pi-lens's real session_start. Much of the work (scans, baseline, LSP warm)
|
|
83
|
-
* runs in the background, so the immediate return carries the synchronous
|
|
84
|
-
* guidance + whatever baseline/LSP state is ready; query `pilens_diagnostics` /
|
|
85
|
-
* `pilens_health` afterwards for the scan results as they land.
|
|
86
|
-
*/
|
|
87
|
-
async function runSessionStartImpl(cwd) {
|
|
88
|
-
startSituationalToolTelemetrySession("mcp");
|
|
89
|
-
const ctx = await getMcpSessionContext();
|
|
90
|
-
const host = createMcpHost(undefined, cwd);
|
|
91
|
-
await bounded(handleSessionStart({
|
|
92
|
-
ctxCwd: cwd,
|
|
93
|
-
// The MCP server has no TUI keystroke latency to protect, so the
|
|
94
|
-
// first-call-quick heuristic must not apply. Force "full" mode so
|
|
95
|
-
// the dominant-language LSP pre-warm, scans, and error-debt baseline
|
|
96
|
-
// all run on the first (and only) session_start of the process.
|
|
97
|
-
// An explicit PI_LENS_STARTUP_MODE env var still wins (handled in
|
|
98
|
-
// handleSessionStart — the override is only checked when the env var
|
|
99
|
-
// is unset).
|
|
100
|
-
startupModeOverride: "full",
|
|
101
|
-
getFlag: host.getFlag,
|
|
102
|
-
notify: noop,
|
|
103
|
-
dbg: noop,
|
|
104
|
-
log: noop,
|
|
105
|
-
runtime: ctx.runtime,
|
|
106
|
-
cacheManager: ctx.cacheManager,
|
|
107
|
-
astGrepClient: ctx.astGrepClient,
|
|
108
|
-
// The MCP server has already loaded the analyzer graph (an MCP call has
|
|
109
|
-
// nothing to defer to), so it hands the handler the same one-shape seam
|
|
110
|
-
// every other caller uses rather than a second, field-by-field shape.
|
|
111
|
-
bootstrap: residentBootstrapAccess(ctx.clients),
|
|
112
|
-
ensureTool: async (name) => (await import("../installer/index.js")).ensureTool(name),
|
|
113
|
-
cleanStaleTsBuildInfo: () => [],
|
|
114
|
-
resetDispatchBaselines: (cwdArg) => resetDispatchBaselines(cwdArg ?? cwd),
|
|
115
|
-
resetLSPService,
|
|
116
|
-
}), {
|
|
117
|
-
ms: HOOK_WALL_BUDGET_MS.session_start,
|
|
118
|
-
signal: undefined,
|
|
119
|
-
hook: "session_start",
|
|
120
|
-
label: "handleSessionStart",
|
|
121
|
-
});
|
|
122
|
-
const baseline = ctx.runtime.errorDebtBaseline;
|
|
123
|
-
return {
|
|
124
|
-
guidance: joinMessages(consumeSessionStartGuidance(ctx.cacheManager, cwd, "mcp")),
|
|
125
|
-
errorDebtBaseline: baseline
|
|
126
|
-
? { testsPassed: baseline.testsPassed, buildPassed: baseline.buildPassed }
|
|
127
|
-
: undefined,
|
|
128
|
-
aliveLspClients: getLSPService().getAliveClientCount(),
|
|
129
|
-
};
|
|
130
|
-
}
|
|
131
|
-
export function runSessionStart(cwd) {
|
|
132
|
-
return bounded(runSessionStartImpl(cwd), {
|
|
133
|
-
ms: HOOK_WALL_BUDGET_MS.session_start,
|
|
134
|
-
signal: undefined,
|
|
135
|
-
hook: "session_start",
|
|
136
|
-
label: "mcp-session-start",
|
|
137
|
-
}).then((outcome) => outcome ?? degradedSessionStart);
|
|
138
|
-
}
|
|
139
|
-
const degradedTurnEnd = {
|
|
140
|
-
outcome: { filesRegistered: 0 },
|
|
141
|
-
commit: () => { },
|
|
142
|
-
};
|
|
143
|
-
/**
|
|
144
|
-
* #1274: the delivery map used to be unbounded — every timed-out client and
|
|
145
|
-
* every distinct raw-cwd alias left an entry for the life of the process.
|
|
146
|
-
* Both bounds drop entries WITHOUT committing, which re-arms the findings in
|
|
147
|
-
* the cache: the safe direction, since an un-consumed finding is re-reported on
|
|
148
|
-
* a later Stop while a wrongly-consumed one is gone for good. The TTL is
|
|
149
|
-
* generous next to Claude Code's 60 s hook budget — it exists to bound the map,
|
|
150
|
-
* not to police clients.
|
|
151
|
-
*/
|
|
152
|
-
const TURN_END_DELIVERY_TTL_MS = 10 * 60_000;
|
|
153
|
-
const TURN_END_DELIVERY_MAX = 8;
|
|
154
|
-
const TURN_END_QUEUE_WAIT_MS = 5_000;
|
|
155
|
-
/**
|
|
156
|
-
* A bounded, cancellable serial queue. A turn_end mutates shared runtime and
|
|
157
|
-
* cache state, so concurrent passes are unsafe; a disconnected/hung pass must
|
|
158
|
-
* nevertheless not accumulate an unbounded tail of Stop requests.
|
|
159
|
-
*/
|
|
160
|
-
class TurnEndQueue {
|
|
161
|
-
running = false;
|
|
162
|
-
pending = [];
|
|
163
|
-
enqueue(work, waitMs = TURN_END_QUEUE_WAIT_MS) {
|
|
164
|
-
if (this.pending.length >= 1) {
|
|
165
|
-
return Promise.reject(new Error("turn_end queue is busy"));
|
|
166
|
-
}
|
|
167
|
-
return new Promise((resolve, reject) => {
|
|
168
|
-
const item = {
|
|
169
|
-
work,
|
|
170
|
-
resolve,
|
|
171
|
-
reject,
|
|
172
|
-
timer: setTimeout(() => {
|
|
173
|
-
const index = this.pending.indexOf(item);
|
|
174
|
-
if (index === -1)
|
|
175
|
-
return;
|
|
176
|
-
this.pending.splice(index, 1);
|
|
177
|
-
reject(new Error("turn_end queue wait timed out"));
|
|
178
|
-
}, waitMs),
|
|
179
|
-
};
|
|
180
|
-
item.timer.unref();
|
|
181
|
-
this.pending.push(item);
|
|
182
|
-
this.drain();
|
|
183
|
-
});
|
|
184
|
-
}
|
|
185
|
-
drain() {
|
|
186
|
-
if (this.running)
|
|
187
|
-
return;
|
|
188
|
-
const item = this.pending.shift();
|
|
189
|
-
if (!item)
|
|
190
|
-
return;
|
|
191
|
-
clearTimeout(item.timer);
|
|
192
|
-
this.running = true;
|
|
193
|
-
void item
|
|
194
|
-
.work()
|
|
195
|
-
.then(item.resolve, item.reject)
|
|
196
|
-
.finally(() => {
|
|
197
|
-
this.running = false;
|
|
198
|
-
this.drain();
|
|
199
|
-
});
|
|
200
|
-
}
|
|
201
|
-
reset() {
|
|
202
|
-
for (const item of this.pending.splice(0)) {
|
|
203
|
-
clearTimeout(item.timer);
|
|
204
|
-
item.reject(new Error("turn_end queue reset"));
|
|
205
|
-
}
|
|
206
|
-
this.running = false;
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
const turnEndQueue = new TurnEndQueue();
|
|
210
|
-
const pendingTurnEndDeliveries = new Map();
|
|
211
|
-
/** In-flight Stop-hook passes, keyed by cwd — see `runTurnEndForIpc` (#1274). */
|
|
212
|
-
const inFlightIpcTurnEnds = new Map();
|
|
213
|
-
/**
|
|
214
|
-
* Run pi-lens's real turn_end over the files edited this "turn". The handler
|
|
215
|
-
* reads edited files from turn-state, so we register the caller-supplied files
|
|
216
|
-
* first (a full-file range, importsChanged=true so dep/knip re-check broadly).
|
|
217
|
-
*/
|
|
218
|
-
async function runTurnEndNowImpl(cwd, files = [], deferredDelivery = false) {
|
|
219
|
-
const ctx = await getMcpSessionContext();
|
|
220
|
-
const host = createMcpHost(undefined, cwd);
|
|
221
|
-
let registered = 0;
|
|
222
|
-
for (const file of files) {
|
|
223
|
-
const abs = path.isAbsolute(file) ? file : path.resolve(cwd, file);
|
|
224
|
-
let lineCount = 1;
|
|
225
|
-
try {
|
|
226
|
-
lineCount = fs.readFileSync(abs, "utf8").split("\n").length;
|
|
227
|
-
}
|
|
228
|
-
catch {
|
|
229
|
-
continue; // unreadable / deleted — skip
|
|
230
|
-
}
|
|
231
|
-
ctx.cacheManager.addModifiedRange(abs, { start: 1, end: lineCount }, true, cwd, MCP_TURN_STATE_OWNER_ID, "mcp");
|
|
232
|
-
registered++;
|
|
233
|
-
}
|
|
234
|
-
const owner = {
|
|
235
|
-
kind: "mcp",
|
|
236
|
-
id: MCP_TURN_STATE_OWNER_ID,
|
|
237
|
-
pid: process.pid,
|
|
238
|
-
lastSeen: new Date().toISOString(),
|
|
239
|
-
};
|
|
240
|
-
await handleTurnEnd({
|
|
241
|
-
signal: undefined,
|
|
242
|
-
ctxCwd: cwd,
|
|
243
|
-
getFlag: host.getFlag,
|
|
244
|
-
dbg: noop,
|
|
245
|
-
runtime: ctx.runtime,
|
|
246
|
-
cacheManager: ctx.cacheManager,
|
|
247
|
-
knipClient: ctx.clients.knipClient,
|
|
248
|
-
deadCodeClients: ctx.clients.deadCodeClients,
|
|
249
|
-
depChecker: ctx.clients.depChecker,
|
|
250
|
-
testRunnerClient: ctx.clients.testRunnerClient,
|
|
251
|
-
host: "mcp",
|
|
252
|
-
owner,
|
|
253
|
-
resetLSPService,
|
|
254
|
-
resetFormatService,
|
|
255
|
-
});
|
|
256
|
-
const outcome = deferredDelivery
|
|
257
|
-
? {
|
|
258
|
-
turnEnd: joinMessages(peekTurnEndFindings(ctx.cacheManager, cwd, ctx.runtime, true)),
|
|
259
|
-
tests: joinMessages(peekTestFindings(ctx.cacheManager, cwd, ctx.runtime, true)),
|
|
260
|
-
filesRegistered: registered,
|
|
261
|
-
}
|
|
262
|
-
: {
|
|
263
|
-
turnEnd: joinMessages(consumeTurnEndFindings(ctx.cacheManager, cwd, ctx.runtime)),
|
|
264
|
-
tests: joinMessages(consumeTestFindings(ctx.cacheManager, cwd, ctx.runtime)),
|
|
265
|
-
filesRegistered: registered,
|
|
266
|
-
};
|
|
267
|
-
return {
|
|
268
|
-
outcome,
|
|
269
|
-
commit: () => {
|
|
270
|
-
if (!deferredDelivery)
|
|
271
|
-
return;
|
|
272
|
-
acknowledgeTurnEndFindings(ctx.cacheManager, cwd);
|
|
273
|
-
acknowledgeTestFindings(ctx.cacheManager, cwd);
|
|
274
|
-
},
|
|
275
|
-
};
|
|
276
|
-
}
|
|
277
|
-
function runTurnEndNow(cwd, files = [], deferredDelivery = false) {
|
|
278
|
-
return bounded(runTurnEndNowImpl(cwd, files, deferredDelivery), {
|
|
279
|
-
ms: HOOK_WALL_BUDGET_MS.turn_end,
|
|
280
|
-
signal: undefined,
|
|
281
|
-
hook: "turn_end",
|
|
282
|
-
label: "mcp-turn-end",
|
|
283
|
-
}).then((transaction) => transaction ?? degradedTurnEnd);
|
|
284
|
-
}
|
|
285
|
-
/**
|
|
286
|
-
* Run a normal MCP turn_end. Its caller owns the tool response, so the
|
|
287
|
-
* historical consume-on-return behavior remains unchanged.
|
|
288
|
-
*/
|
|
289
|
-
export function runTurnEnd(cwd, files = []) {
|
|
290
|
-
return turnEndQueue.enqueue(async () => (await runTurnEndNow(cwd, files)).outcome);
|
|
291
|
-
}
|
|
292
|
-
/** A result with no findings needs no durable delivery transaction. */
|
|
293
|
-
function hasTurnEndFindings(outcome) {
|
|
294
|
-
return Boolean(outcome.turnEnd || outcome.tests);
|
|
295
|
-
}
|
|
296
|
-
/** Drop expired deliveries, then the oldest ones over the cap. Never commits. */
|
|
297
|
-
function prunePendingTurnEndDeliveries(now = Date.now()) {
|
|
298
|
-
for (const [deliveryId, delivery] of pendingTurnEndDeliveries) {
|
|
299
|
-
if (now - delivery.createdAt >= TURN_END_DELIVERY_TTL_MS) {
|
|
300
|
-
pendingTurnEndDeliveries.delete(deliveryId);
|
|
301
|
-
}
|
|
302
|
-
}
|
|
303
|
-
// Map iteration is insertion-ordered, so the head is the oldest entry.
|
|
304
|
-
while (pendingTurnEndDeliveries.size > TURN_END_DELIVERY_MAX) {
|
|
305
|
-
const oldest = pendingTurnEndDeliveries.keys().next();
|
|
306
|
-
if (oldest.done)
|
|
307
|
-
break;
|
|
308
|
-
pendingTurnEndDeliveries.delete(oldest.value);
|
|
309
|
-
}
|
|
310
|
-
}
|
|
311
|
-
function pendingForCwd(cwd) {
|
|
312
|
-
for (const [deliveryId, delivery] of pendingTurnEndDeliveries) {
|
|
313
|
-
if (delivery.cwd === cwd)
|
|
314
|
-
return [deliveryId, delivery];
|
|
315
|
-
}
|
|
316
|
-
return undefined;
|
|
317
|
-
}
|
|
318
|
-
/**
|
|
319
|
-
* Run the Stop-hook pass as a durable delivery transaction. The result is
|
|
320
|
-
* acknowledged through a separate one-shot IPC request. Until that request
|
|
321
|
-
* arrives, the findings cache is deliberately left unconsumed; a client
|
|
322
|
-
* timeout, socket close, or server restart therefore leaves the result for a
|
|
323
|
-
* later Stop request instead of losing it between execution and reply.
|
|
324
|
-
*/
|
|
325
|
-
export function runTurnEndForIpc(cwd) {
|
|
326
|
-
// #1274: the Stop-hook request carries no files and no sessionId, so two
|
|
327
|
-
// overlapping ones are byte-identical and a second pass would be pure waste
|
|
328
|
-
// — worse, the queue only holds ONE waiter, so a third Stop is rejected
|
|
329
|
-
// outright. Identical in-flight requests share the one pass and one
|
|
330
|
-
// deliveryId; the ack is idempotent-by-capability, so the loser of the race
|
|
331
|
-
// simply finds the delivery already committed.
|
|
332
|
-
const inFlight = inFlightIpcTurnEnds.get(cwd);
|
|
333
|
-
if (inFlight)
|
|
334
|
-
return inFlight;
|
|
335
|
-
// Identity-guarded release (#1968's pattern): delete only if THIS run is
|
|
336
|
-
// still the registered one. A bare delete-by-key lets a late-settling run
|
|
337
|
-
// evict a live successor a second writer registered under the same cwd
|
|
338
|
-
// mid-flight, after which the next caller starts a duplicate Stop-hook pass.
|
|
339
|
-
const run = runTurnEndForIpcNow(cwd).finally(() => {
|
|
340
|
-
if (inFlightIpcTurnEnds.get(cwd) === run)
|
|
341
|
-
inFlightIpcTurnEnds.delete(cwd);
|
|
342
|
-
});
|
|
343
|
-
inFlightIpcTurnEnds.set(cwd, run);
|
|
344
|
-
return run;
|
|
345
|
-
}
|
|
346
|
-
function runTurnEndForIpcNow(cwd) {
|
|
347
|
-
return turnEndQueue.enqueue(async () => {
|
|
348
|
-
prunePendingTurnEndDeliveries();
|
|
349
|
-
const pending = pendingForCwd(cwd);
|
|
350
|
-
if (pending) {
|
|
351
|
-
return {
|
|
352
|
-
outcome: pending[1].transaction.outcome,
|
|
353
|
-
deliveryId: pending[0],
|
|
354
|
-
};
|
|
355
|
-
}
|
|
356
|
-
const ctx = await getMcpSessionContext();
|
|
357
|
-
const cachedOutcome = {
|
|
358
|
-
turnEnd: joinMessages(peekTurnEndFindings(ctx.cacheManager, cwd, ctx.runtime, true)),
|
|
359
|
-
tests: joinMessages(peekTestFindings(ctx.cacheManager, cwd, ctx.runtime, true)),
|
|
360
|
-
filesRegistered: 0,
|
|
361
|
-
};
|
|
362
|
-
const transaction = hasTurnEndFindings(cachedOutcome)
|
|
363
|
-
? {
|
|
364
|
-
outcome: cachedOutcome,
|
|
365
|
-
commit: () => {
|
|
366
|
-
acknowledgeTurnEndFindings(ctx.cacheManager, cwd);
|
|
367
|
-
acknowledgeTestFindings(ctx.cacheManager, cwd);
|
|
368
|
-
},
|
|
369
|
-
}
|
|
370
|
-
: await runTurnEndNow(cwd, [], true);
|
|
371
|
-
if (!hasTurnEndFindings(transaction.outcome)) {
|
|
372
|
-
return { outcome: transaction.outcome };
|
|
373
|
-
}
|
|
374
|
-
const deliveryId = crypto.randomUUID();
|
|
375
|
-
pendingTurnEndDeliveries.set(deliveryId, {
|
|
376
|
-
cwd,
|
|
377
|
-
transaction,
|
|
378
|
-
createdAt: Date.now(),
|
|
379
|
-
});
|
|
380
|
-
prunePendingTurnEndDeliveries();
|
|
381
|
-
return { outcome: transaction.outcome, deliveryId };
|
|
382
|
-
});
|
|
383
|
-
}
|
|
384
|
-
/** Commit exactly one admitted delivery capability. */
|
|
385
|
-
export function acknowledgeTurnEnd(cwd, deliveryId) {
|
|
386
|
-
prunePendingTurnEndDeliveries();
|
|
387
|
-
const delivery = pendingTurnEndDeliveries.get(deliveryId);
|
|
388
|
-
if (!delivery || delivery.cwd !== cwd)
|
|
389
|
-
return false;
|
|
390
|
-
// #1274: commit BEFORE dropping the capability. Deleting first meant a
|
|
391
|
-
// throwing consume destroyed the only handle to the findings — precisely the
|
|
392
|
-
// loss this two-phase protocol exists to prevent, reintroduced on the error
|
|
393
|
-
// path. Leaving the entry in place on a throw keeps the delivery re-fetchable
|
|
394
|
-
// by a later Stop.
|
|
395
|
-
delivery.transaction.commit();
|
|
396
|
-
pendingTurnEndDeliveries.delete(deliveryId);
|
|
397
|
-
return true;
|
|
398
|
-
}
|
|
399
|
-
/** Test hook — drop pending requests so one failed test cannot wedge the rest. */
|
|
400
|
-
export function _resetTurnEndChain() {
|
|
401
|
-
turnEndQueue.reset();
|
|
402
|
-
pendingTurnEndDeliveries.clear();
|
|
403
|
-
inFlightIpcTurnEnds.clear();
|
|
404
|
-
}
|
|
405
|
-
/**
|
|
406
|
-
* Test hook — read the `runTurnEndForIpc` in-flight map directly (#1968's
|
|
407
|
-
* ABA regression: a second writer replacing an entry mid-flight, then a
|
|
408
|
-
* late-settling first run evicting it with a bare delete-by-key).
|
|
409
|
-
*/
|
|
410
|
-
export function _peekInFlightIpcTurnEnds() {
|
|
411
|
-
return inFlightIpcTurnEnds;
|
|
412
|
-
}
|