@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,331 +0,0 @@
|
|
|
1
|
-
import * as fs from "node:fs";
|
|
2
|
-
import * as readline from "node:readline";
|
|
3
|
-
import { flushLatencyLog, getLatencyLogPath, } from "./latency-logger.js";
|
|
4
|
-
import { getMaxLogSizeMB } from "./log-cleanup.js";
|
|
5
|
-
const DEFAULT_PERF_TOP_N = 5;
|
|
6
|
-
const MAX_PERF_TOP_N = 50;
|
|
7
|
-
export const MAX_PERF_PHASE_SAMPLES = 20_000;
|
|
8
|
-
// Yield cadence for the full-window parse below. Exported so the occupancy
|
|
9
|
-
// guard can count yields against the lines fed instead of measuring a
|
|
10
|
-
// wall-clock block the scheduler can inflate (#2886): the count is a
|
|
11
|
-
// deterministic function of the input, not of worker contention.
|
|
12
|
-
export const PARSE_YIELD_EVERY = 500;
|
|
13
|
-
// The window follows the same threshold that rotates the log out from under it.
|
|
14
|
-
// Exported so a test can size a fixture to the window it means to saturate
|
|
15
|
-
// rather than to a second copy of the default that can drift out of agreement.
|
|
16
|
-
export function resolveLogByteBudget() {
|
|
17
|
-
return getMaxLogSizeMB() * 1024 * 1024;
|
|
18
|
-
}
|
|
19
|
-
function boundedPositiveInteger(value, maximum, fallback = maximum) {
|
|
20
|
-
return Number.isFinite(value) && value > 0
|
|
21
|
-
? Math.min(maximum, Math.max(1, Math.floor(value)))
|
|
22
|
-
: fallback;
|
|
23
|
-
}
|
|
24
|
-
function percentile(sorted, quantile) {
|
|
25
|
-
const position = (sorted.length - 1) * quantile;
|
|
26
|
-
const lower = Math.floor(position);
|
|
27
|
-
const upper = Math.ceil(position);
|
|
28
|
-
return lower === upper
|
|
29
|
-
? sorted[lower]
|
|
30
|
-
: sorted[lower] + (sorted[upper] - sorted[lower]) * (position - lower);
|
|
31
|
-
}
|
|
32
|
-
function roundedMs(value) {
|
|
33
|
-
return Math.round(value * 10) / 10;
|
|
34
|
-
}
|
|
35
|
-
function isEntryObject(value) {
|
|
36
|
-
return !!value && typeof value === "object" && !Array.isArray(value);
|
|
37
|
-
}
|
|
38
|
-
function isPhaseRecord(value) {
|
|
39
|
-
if (!isEntryObject(value))
|
|
40
|
-
return false;
|
|
41
|
-
return (value.type === "phase" &&
|
|
42
|
-
typeof value.phase === "string" &&
|
|
43
|
-
value.phase.trim().length > 0 &&
|
|
44
|
-
typeof value.durationMs === "number" &&
|
|
45
|
-
Number.isFinite(value.durationMs) &&
|
|
46
|
-
value.durationMs >= 0 &&
|
|
47
|
-
(value.toolName === undefined || typeof value.toolName === "string") &&
|
|
48
|
-
(value.ts === undefined || typeof value.ts === "string") &&
|
|
49
|
-
(value.startedAt === undefined || typeof value.startedAt === "string") &&
|
|
50
|
-
(value.pid === undefined ||
|
|
51
|
-
(typeof value.pid === "number" && Number.isFinite(value.pid))));
|
|
52
|
-
}
|
|
53
|
-
function isPhaseSample(value) {
|
|
54
|
-
return isPhaseRecord(value) && value.durationMs > 0;
|
|
55
|
-
}
|
|
56
|
-
function phaseKey(entry) {
|
|
57
|
-
const phase = entry.phase?.trim() ?? "";
|
|
58
|
-
const toolName = entry.toolName?.trim();
|
|
59
|
-
return toolName ? `${toolName}/${phase}` : phase;
|
|
60
|
-
}
|
|
61
|
-
function isCurrentSessionSample(entry, processId, sessionStartedAt) {
|
|
62
|
-
if (entry.pid !== processId || typeof entry.ts !== "string")
|
|
63
|
-
return false;
|
|
64
|
-
const finishedAt = Date.parse(entry.ts);
|
|
65
|
-
if (!Number.isFinite(finishedAt) || finishedAt < sessionStartedAt)
|
|
66
|
-
return false;
|
|
67
|
-
if (entry.startedAt === undefined)
|
|
68
|
-
return true;
|
|
69
|
-
const startedAt = Date.parse(entry.startedAt);
|
|
70
|
-
return Number.isFinite(startedAt) && startedAt >= sessionStartedAt;
|
|
71
|
-
}
|
|
72
|
-
function createPhaseBuffer(limit) {
|
|
73
|
-
return { values: [], nextIndex: 0, total: 0, limit };
|
|
74
|
-
}
|
|
75
|
-
function retainEntry(buffer, entry) {
|
|
76
|
-
buffer.total += 1;
|
|
77
|
-
if (buffer.values.length < buffer.limit) {
|
|
78
|
-
buffer.values.push(entry);
|
|
79
|
-
return;
|
|
80
|
-
}
|
|
81
|
-
buffer.values[buffer.nextIndex] = entry;
|
|
82
|
-
buffer.nextIndex = (buffer.nextIndex + 1) % buffer.limit;
|
|
83
|
-
}
|
|
84
|
-
function orderedEntries(buffer) {
|
|
85
|
-
return buffer.total > buffer.values.length
|
|
86
|
-
? [
|
|
87
|
-
...buffer.values.slice(buffer.nextIndex),
|
|
88
|
-
...buffer.values.slice(0, buffer.nextIndex),
|
|
89
|
-
]
|
|
90
|
-
: buffer.values;
|
|
91
|
-
}
|
|
92
|
-
export function summarizePhaseLatency(entries, topN = DEFAULT_PERF_TOP_N) {
|
|
93
|
-
const durationsByPhase = new Map();
|
|
94
|
-
let oldestTimestamp;
|
|
95
|
-
let newestTimestamp;
|
|
96
|
-
let sampleCount = 0;
|
|
97
|
-
for (const entry of entries) {
|
|
98
|
-
if (!isPhaseSample(entry))
|
|
99
|
-
continue;
|
|
100
|
-
const phase = phaseKey(entry);
|
|
101
|
-
const durations = durationsByPhase.get(phase) ?? [];
|
|
102
|
-
durations.push(entry.durationMs);
|
|
103
|
-
durationsByPhase.set(phase, durations);
|
|
104
|
-
sampleCount += 1;
|
|
105
|
-
if (typeof entry.ts === "string") {
|
|
106
|
-
const ms = Date.parse(entry.ts);
|
|
107
|
-
if (Number.isFinite(ms)) {
|
|
108
|
-
if (!oldestTimestamp || ms < oldestTimestamp.ms) {
|
|
109
|
-
oldestTimestamp = { ms, iso: entry.ts };
|
|
110
|
-
}
|
|
111
|
-
if (!newestTimestamp || ms > newestTimestamp.ms) {
|
|
112
|
-
newestTimestamp = { ms, iso: entry.ts };
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
const summaries = Array.from(durationsByPhase, ([phase, durations]) => {
|
|
118
|
-
const sorted = [...durations].sort((a, b) => a - b);
|
|
119
|
-
const p50RawMs = percentile(sorted, 0.5);
|
|
120
|
-
const p99RawMs = percentile(sorted, 0.99);
|
|
121
|
-
return {
|
|
122
|
-
phase,
|
|
123
|
-
samples: sorted.length,
|
|
124
|
-
p50Ms: roundedMs(p50RawMs),
|
|
125
|
-
p99Ms: roundedMs(p99RawMs),
|
|
126
|
-
p50RawMs,
|
|
127
|
-
p99RawMs,
|
|
128
|
-
};
|
|
129
|
-
});
|
|
130
|
-
const limit = boundedPositiveInteger(topN, MAX_PERF_TOP_N, DEFAULT_PERF_TOP_N);
|
|
131
|
-
const tieBreak = (a, b) => b.samples - a.samples || a.phase.localeCompare(b.phase);
|
|
132
|
-
const toPublic = ({ phase, samples, p50Ms, p99Ms, }) => ({
|
|
133
|
-
phase,
|
|
134
|
-
samples,
|
|
135
|
-
p50Ms,
|
|
136
|
-
p99Ms,
|
|
137
|
-
});
|
|
138
|
-
const rankBy = (primary, secondary) => [...summaries]
|
|
139
|
-
.sort((a, b) => b[primary] - a[primary] ||
|
|
140
|
-
b[secondary] - a[secondary] ||
|
|
141
|
-
tieBreak(a, b))
|
|
142
|
-
.slice(0, limit)
|
|
143
|
-
.map(toPublic);
|
|
144
|
-
return {
|
|
145
|
-
sampleCount,
|
|
146
|
-
phaseCount: durationsByPhase.size,
|
|
147
|
-
oldestTs: oldestTimestamp?.iso,
|
|
148
|
-
newestTs: newestTimestamp?.iso,
|
|
149
|
-
slowestByP50: rankBy("p50RawMs", "p99RawMs"),
|
|
150
|
-
slowestByP99: rankBy("p99RawMs", "p50RawMs"),
|
|
151
|
-
};
|
|
152
|
-
}
|
|
153
|
-
async function readPhaseLogTail(filePath, windowBytes, maxSamples, processId, sessionStartedAt) {
|
|
154
|
-
const empty = () => ({
|
|
155
|
-
logEntries: [],
|
|
156
|
-
sessionEntries: [],
|
|
157
|
-
windowTruncated: false,
|
|
158
|
-
logSamplesTruncated: false,
|
|
159
|
-
sessionSamplesTruncated: false,
|
|
160
|
-
totalPhaseSamples: 0,
|
|
161
|
-
totalSessionPhaseSamples: 0,
|
|
162
|
-
malformedLines: 0,
|
|
163
|
-
invalidRecords: 0,
|
|
164
|
-
});
|
|
165
|
-
let handle;
|
|
166
|
-
try {
|
|
167
|
-
handle = await fs.promises.open(filePath, "r");
|
|
168
|
-
const stat = await handle.stat();
|
|
169
|
-
if (!stat.isFile()) {
|
|
170
|
-
// POSIX rejects opening a directory with EISDIR, but Windows opens it
|
|
171
|
-
// successfully with size 0 — which would fall into the empty() branch
|
|
172
|
-
// and conflate "unreadable path" with "no data yet". Throw the same
|
|
173
|
-
// error POSIX would so both platforms surface the bad path.
|
|
174
|
-
const notAFile = new Error(`EISDIR: illegal operation on a directory, read '${filePath}'`);
|
|
175
|
-
notAFile.code = "EISDIR";
|
|
176
|
-
throw notAFile;
|
|
177
|
-
}
|
|
178
|
-
if (stat.size === 0)
|
|
179
|
-
return empty();
|
|
180
|
-
const sampleLimit = boundedPositiveInteger(maxSamples, MAX_PERF_PHASE_SAMPLES);
|
|
181
|
-
const start = Math.max(0, stat.size - windowBytes);
|
|
182
|
-
let discardPartialFirstLine = false;
|
|
183
|
-
if (start > 0) {
|
|
184
|
-
const previousByte = Buffer.alloc(1);
|
|
185
|
-
const { bytesRead } = await handle.read(previousByte, 0, 1, start - 1);
|
|
186
|
-
discardPartialFirstLine = bytesRead === 1 && previousByte[0] !== 0x0a;
|
|
187
|
-
}
|
|
188
|
-
const stream = handle.createReadStream({
|
|
189
|
-
start,
|
|
190
|
-
end: stat.size - 1,
|
|
191
|
-
autoClose: false,
|
|
192
|
-
encoding: "utf8",
|
|
193
|
-
});
|
|
194
|
-
const lines = readline.createInterface({
|
|
195
|
-
input: stream,
|
|
196
|
-
crlfDelay: Infinity,
|
|
197
|
-
});
|
|
198
|
-
const logBuffer = createPhaseBuffer(sampleLimit);
|
|
199
|
-
const sessionBuffer = createPhaseBuffer(sampleLimit);
|
|
200
|
-
let malformedLines = 0;
|
|
201
|
-
let invalidRecords = 0;
|
|
202
|
-
let lineCount = 0;
|
|
203
|
-
for await (const line of lines) {
|
|
204
|
-
lineCount += 1;
|
|
205
|
-
if (lineCount % PARSE_YIELD_EVERY === 0) {
|
|
206
|
-
await new Promise((resolve) => setImmediate(resolve));
|
|
207
|
-
}
|
|
208
|
-
if (discardPartialFirstLine) {
|
|
209
|
-
discardPartialFirstLine = false;
|
|
210
|
-
continue;
|
|
211
|
-
}
|
|
212
|
-
const trimmed = line.trim();
|
|
213
|
-
if (!trimmed)
|
|
214
|
-
continue;
|
|
215
|
-
try {
|
|
216
|
-
const value = JSON.parse(trimmed);
|
|
217
|
-
if (isPhaseSample(value)) {
|
|
218
|
-
retainEntry(logBuffer, value);
|
|
219
|
-
if (isCurrentSessionSample(value, processId, sessionStartedAt)) {
|
|
220
|
-
retainEntry(sessionBuffer, value);
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
else if (!isPhaseRecord(value) &&
|
|
224
|
-
(!isEntryObject(value) || value.type === "phase")) {
|
|
225
|
-
invalidRecords += 1;
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
catch {
|
|
229
|
-
malformedLines += 1;
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
return {
|
|
233
|
-
logEntries: orderedEntries(logBuffer),
|
|
234
|
-
sessionEntries: orderedEntries(sessionBuffer),
|
|
235
|
-
windowTruncated: start > 0,
|
|
236
|
-
logSamplesTruncated: logBuffer.total > sampleLimit,
|
|
237
|
-
sessionSamplesTruncated: sessionBuffer.total > sampleLimit,
|
|
238
|
-
totalPhaseSamples: logBuffer.total,
|
|
239
|
-
totalSessionPhaseSamples: sessionBuffer.total,
|
|
240
|
-
malformedLines,
|
|
241
|
-
invalidRecords,
|
|
242
|
-
};
|
|
243
|
-
}
|
|
244
|
-
catch (error) {
|
|
245
|
-
if (error.code === "ENOENT")
|
|
246
|
-
return empty();
|
|
247
|
-
throw error;
|
|
248
|
-
}
|
|
249
|
-
finally {
|
|
250
|
-
await handle?.close().catch(() => { });
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
export async function collectLatencyPerformance(options) {
|
|
254
|
-
await flushLatencyLog();
|
|
255
|
-
const logPath = options.logPath ?? getLatencyLogPath();
|
|
256
|
-
const processId = options.processId ?? process.pid;
|
|
257
|
-
const topN = boundedPositiveInteger(options.topN ?? DEFAULT_PERF_TOP_N, MAX_PERF_TOP_N, DEFAULT_PERF_TOP_N);
|
|
258
|
-
const byteBudget = resolveLogByteBudget();
|
|
259
|
-
const windowBytes = boundedPositiveInteger(options.maxBytes ?? byteBudget, byteBudget);
|
|
260
|
-
const tail = await readPhaseLogTail(logPath, windowBytes, options.maxSamples ?? MAX_PERF_PHASE_SAMPLES, processId, options.sessionStartedAt);
|
|
261
|
-
const { logEntries, sessionEntries, ...counters } = tail;
|
|
262
|
-
return {
|
|
263
|
-
logPath,
|
|
264
|
-
topN,
|
|
265
|
-
windowBytes,
|
|
266
|
-
...counters,
|
|
267
|
-
session: summarizePhaseLatency(sessionEntries, topN),
|
|
268
|
-
logWindow: summarizePhaseLatency(logEntries, topN),
|
|
269
|
-
};
|
|
270
|
-
}
|
|
271
|
-
function formatDuration(ms) {
|
|
272
|
-
if (ms >= 1000)
|
|
273
|
-
return `${(ms / 1000).toFixed(2)}s`;
|
|
274
|
-
if (ms > 0 && ms < 1)
|
|
275
|
-
return `${ms.toFixed(2)}ms`;
|
|
276
|
-
return `${Number.isInteger(ms) ? ms : ms.toFixed(1)}ms`;
|
|
277
|
-
}
|
|
278
|
-
function formatByteBudget(bytes) {
|
|
279
|
-
if (bytes >= 1024 * 1024) {
|
|
280
|
-
return `${Number((bytes / (1024 * 1024)).toFixed(1))}MB`;
|
|
281
|
-
}
|
|
282
|
-
if (bytes >= 1024)
|
|
283
|
-
return `${Number((bytes / 1024).toFixed(1))}KB`;
|
|
284
|
-
return `${bytes}B`;
|
|
285
|
-
}
|
|
286
|
-
function formatTimestamp(ts) {
|
|
287
|
-
const parsed = new Date(ts);
|
|
288
|
-
return Number.isFinite(parsed.getTime())
|
|
289
|
-
? `${parsed.toISOString().slice(0, 19).replace("T", " ")}Z`
|
|
290
|
-
: ts;
|
|
291
|
-
}
|
|
292
|
-
function renderRanking(lines, label, phases) {
|
|
293
|
-
lines.push(` ${label}:`);
|
|
294
|
-
for (const phase of phases) {
|
|
295
|
-
lines.push(` ${phase.phase}: p50 ${formatDuration(phase.p50Ms)}, p99 ${formatDuration(phase.p99Ms)}, n=${phase.samples}`);
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
function renderScope(lines, label, scope) {
|
|
299
|
-
const range = scope.oldestTs && scope.newestTs
|
|
300
|
-
? `, ${formatTimestamp(scope.oldestTs)} to ${formatTimestamp(scope.newestTs)}`
|
|
301
|
-
: "";
|
|
302
|
-
lines.push("", `${label} (${scope.sampleCount} samples across ${scope.phaseCount} phases${range})`);
|
|
303
|
-
if (scope.slowestByP99.length === 0) {
|
|
304
|
-
lines.push(" No phase timings yet.");
|
|
305
|
-
return;
|
|
306
|
-
}
|
|
307
|
-
renderRanking(lines, "Highest p50", scope.slowestByP50);
|
|
308
|
-
renderRanking(lines, "Highest p99", scope.slowestByP99);
|
|
309
|
-
}
|
|
310
|
-
export function renderLatencyPerformanceReport(report) {
|
|
311
|
-
const lines = [
|
|
312
|
-
"⏱️ PI-LENS PERFORMANCE",
|
|
313
|
-
`Top ${report.topN} sustained and tail latency phases.`,
|
|
314
|
-
];
|
|
315
|
-
renderScope(lines, "Current process session", report.session);
|
|
316
|
-
renderScope(lines, "Machine-wide active log window", report.logWindow);
|
|
317
|
-
lines.push("", `Source: ${report.logPath}`);
|
|
318
|
-
if (report.windowTruncated) {
|
|
319
|
-
lines.push(`Both scopes use only the newest ${formatByteBudget(report.windowBytes)} of the active log.`);
|
|
320
|
-
}
|
|
321
|
-
if (report.sessionSamplesTruncated) {
|
|
322
|
-
lines.push(`Session percentiles use the newest ${report.session.sampleCount.toLocaleString("en-US")} of ${report.totalSessionPhaseSamples.toLocaleString("en-US")} phase samples.`);
|
|
323
|
-
}
|
|
324
|
-
if (report.logSamplesTruncated) {
|
|
325
|
-
lines.push(`Machine-wide percentiles use the newest ${report.logWindow.sampleCount.toLocaleString("en-US")} of ${report.totalPhaseSamples.toLocaleString("en-US")} phase samples.`);
|
|
326
|
-
}
|
|
327
|
-
if (report.malformedLines > 0 || report.invalidRecords > 0) {
|
|
328
|
-
lines.push(`Skipped ${report.malformedLines} malformed line(s) and ${report.invalidRecords} invalid record(s).`);
|
|
329
|
-
}
|
|
330
|
-
return lines.join("\n");
|
|
331
|
-
}
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Generalized debounced-persist coalescing scheduler (#348 phase 2), factored
|
|
3
|
-
* out of the review graph's #260 circuit-breaker so a second warm cache
|
|
4
|
-
* (the word index) doesn't grow a parallel copy of the same discipline:
|
|
5
|
-
* 1. Coalesce: a burst of edits schedules ONE write after a quiet window,
|
|
6
|
-
* instead of one write per edit.
|
|
7
|
-
* 2. Best-effort teardown flush: a process-exit hook flushes any pending
|
|
8
|
-
* writes synchronously so a debounced payload is never silently lost.
|
|
9
|
-
*
|
|
10
|
-
* What stayed OUT of this module (left to each caller, deliberately not
|
|
11
|
-
* generalized): the actual serialize+write. The review graph writes its own
|
|
12
|
-
* cache file (tmp+rename, size-cap check, git-stamp) while the word index
|
|
13
|
-
* merges into the shared project-snapshot file via `saveProjectSnapshot`
|
|
14
|
-
* (preserving unrelated fields, honoring the seq-laundering guard). Those
|
|
15
|
-
* writers are different enough (different files, different merge semantics)
|
|
16
|
-
* that forcing them through one write function would either leak
|
|
17
|
-
* graph-specific concerns into the snapshot path or vice versa. The
|
|
18
|
-
* scheduler only owns "when", never "how".
|
|
19
|
-
*/
|
|
20
|
-
/**
|
|
21
|
-
* Build a debounce scheduler over `write(key, payload)`. `debounceMs()` is
|
|
22
|
-
* read fresh on every schedule call (not captured once) so a test that
|
|
23
|
-
* flips its env override mid-run takes effect immediately, same as the
|
|
24
|
-
* graph's `graphPersistDebounceMs()`.
|
|
25
|
-
*/
|
|
26
|
-
export function createDebounceScheduler(args) {
|
|
27
|
-
const { write, debounceMs } = args;
|
|
28
|
-
const pending = new Map();
|
|
29
|
-
const timers = new Map();
|
|
30
|
-
function flush(key) {
|
|
31
|
-
const payload = pending.get(key);
|
|
32
|
-
if (payload === undefined)
|
|
33
|
-
return;
|
|
34
|
-
pending.delete(key);
|
|
35
|
-
const timer = timers.get(key);
|
|
36
|
-
if (timer) {
|
|
37
|
-
clearTimeout(timer);
|
|
38
|
-
timers.delete(key);
|
|
39
|
-
}
|
|
40
|
-
write(key, payload);
|
|
41
|
-
}
|
|
42
|
-
function flushAll() {
|
|
43
|
-
// Iterates `pending.keys()` live (a `Map` iterator reflects mutation
|
|
44
|
-
// during iteration): `flush` deletes the current key before calling
|
|
45
|
-
// `write`, which is safe, but the injected `write` callback must NOT
|
|
46
|
-
// synchronously call `schedule` again for a key not yet visited — that
|
|
47
|
-
// would insert into `pending` mid-iteration and the live iterator would
|
|
48
|
-
// pick it up, flushing a payload the caller expected to survive as
|
|
49
|
-
// "still pending" after this call returns.
|
|
50
|
-
for (const key of pending.keys())
|
|
51
|
-
flush(key);
|
|
52
|
-
}
|
|
53
|
-
function schedule(key, payload) {
|
|
54
|
-
pending.set(key, payload);
|
|
55
|
-
const debounce = debounceMs();
|
|
56
|
-
const existing = timers.get(key);
|
|
57
|
-
if (existing)
|
|
58
|
-
clearTimeout(existing);
|
|
59
|
-
if (debounce === 0) {
|
|
60
|
-
flush(key);
|
|
61
|
-
return;
|
|
62
|
-
}
|
|
63
|
-
const timer = setTimeout(() => flush(key), debounce);
|
|
64
|
-
// Don't keep the event loop alive solely for a debounced write.
|
|
65
|
-
if (typeof timer.unref === "function")
|
|
66
|
-
timer.unref();
|
|
67
|
-
timers.set(key, timer);
|
|
68
|
-
}
|
|
69
|
-
return { schedule, flush, flushAll };
|
|
70
|
-
}
|
|
@@ -1,271 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* #3170 — the bounded persistent-reverify pass.
|
|
3
|
-
*
|
|
4
|
-
* A finding whose own file is unchanged is re-delivered turn after turn from
|
|
5
|
-
* the persisted actionable-warnings report without ever being re-observed
|
|
6
|
-
* against the live server: the in-band publish carries forward DEFERRED-origin
|
|
7
|
-
* file entries while their file has not moved
|
|
8
|
-
* (`mergeActionableWarningsReports`'s scope guard), and the delta freshness
|
|
9
|
-
* gate passes them because the file's mtime has not moved either. When the
|
|
10
|
-
* root cause was fixed in a DIFFERENT file, the carried finding is stale in
|
|
11
|
-
* fact but fresh by every on-disk axis.
|
|
12
|
-
*
|
|
13
|
-
* This module re-observes those files at turn_end, BEFORE the advisory
|
|
14
|
-
* assembles, and the replacement entries fold into the turn's SINGLE in-band
|
|
15
|
-
* publish (#3176 F1: a separate replacement publish spends the carry marker
|
|
16
|
-
* and the main publish then drops the entries at the scope guard — the
|
|
17
|
-
* blocker the review caught).
|
|
18
|
-
*
|
|
19
|
-
* Review-round contracts (#3176):
|
|
20
|
-
* - **F2**: the fresh observation converts through the PRODUCER's own
|
|
21
|
-
* pipeline (`enrichFileFromLsp` — severity-2, code-action enrichment,
|
|
22
|
-
* fixable-only, the per-file caps), fed the touch's collected diagnostics
|
|
23
|
-
* as the cached arm so no second pull happens. No re-implementation.
|
|
24
|
-
* - **F3**: an empty result is clean ONLY when the touch itself answers
|
|
25
|
-
* `confirmation: "confirmed"` — the silent-on-clean rule (#240/#533/#1253).
|
|
26
|
-
* A bare `{diags: []}` (the house double's silent empty, a tier-3 server
|
|
27
|
-
* still analyzing, a `skipReason`) is UNCONFIRMED: the carried warnings are
|
|
28
|
-
* kept verbatim and the render labels the gap. `touched.inconclusive` is
|
|
29
|
-
* `resolveTouchVerdict`'s output computed service-side and is honored
|
|
30
|
-
* directly.
|
|
31
|
-
* - **F4**: every await is bound-wrapped (`bounded()`); `maxClientWaitMs` is
|
|
32
|
-
* only the spawn/ready budget, not a request ceiling.
|
|
33
|
-
* - **F6**: no skip guard — every deferred-origin entry re-verifies each
|
|
34
|
-
* turn (re-arm), per the issue's failure table.
|
|
35
|
-
*
|
|
36
|
-
* Bounds: at most {@link MAX_REVERIFY_FILES} files per turn_end, a wall
|
|
37
|
-
* budget of {@link REVERIFY_BUDGET_MS}, the turn-end abort signal, and no
|
|
38
|
-
* new durable state — candidates come from the persisted report itself,
|
|
39
|
-
* which is what was delivered last turn.
|
|
40
|
-
*/
|
|
41
|
-
import * as fs from "node:fs";
|
|
42
|
-
import { enrichFileFromLsp } from "./actionable-warnings.js";
|
|
43
|
-
import { bounded } from "./deadline-utils.js";
|
|
44
|
-
import { logLatency } from "./latency-logger.js";
|
|
45
|
-
import { touchCompletedConfirmationPolicy, } from "./lsp/diagnostic-binding.js";
|
|
46
|
-
import { findAuxiliaryProfileForSource } from "./dispatch/auxiliary-lsp.js";
|
|
47
|
-
/** At most this many files are re-observed per turn_end (the drift backstop's
|
|
48
|
-
* own 4-resyncs-per-pass precedent). */
|
|
49
|
-
export const MAX_REVERIFY_FILES = 4;
|
|
50
|
-
/** Wall-clock budget for the whole pass; a touch that cannot answer inside
|
|
51
|
-
* its remaining slice is recorded unconfirmed, never waited out. */
|
|
52
|
-
export const REVERIFY_BUDGET_MS = 3000;
|
|
53
|
-
/** The touch options the `source=lsp` probe uses, with this pass's source. */
|
|
54
|
-
const TOUCH_SOURCE = "persistent_reverify";
|
|
55
|
-
/**
|
|
56
|
-
* Select the report's re-verify candidates: DEFERRED-origin file entries (the
|
|
57
|
-
* only population the in-band publish carries forward, so the only population
|
|
58
|
-
* that re-serves across turns — F6: with no skip guard, so every carried
|
|
59
|
-
* entry re-verifies each turn) whose file stat is UNCHANGED since the entry's
|
|
60
|
-
* own observation stamp. A file that changed is skipped and counted — the
|
|
61
|
-
* edit path already re-observed it. Missing files are skipped too: the delta
|
|
62
|
-
* freshness gate drops them outright.
|
|
63
|
-
*/
|
|
64
|
-
export function selectPersistentReverifyFiles(report, nowMs = Date.now()) {
|
|
65
|
-
const candidates = [];
|
|
66
|
-
let skippedChanged = 0;
|
|
67
|
-
for (const entry of report.files) {
|
|
68
|
-
if (entry.origin !== "deferred")
|
|
69
|
-
continue;
|
|
70
|
-
// F3 (population half): the pass re-observes through a PRIMARY-scope
|
|
71
|
-
// touch, so an auxiliary-lane finding can never be re-confirmed — an
|
|
72
|
-
// entry carrying aux-sourced warnings is skipped (kept verbatim),
|
|
73
|
-
// never scored dropped. The aux lookup is the one shared seam.
|
|
74
|
-
if (entry.warnings.some((w) => findAuxiliaryProfileForSource(w.source ?? "") !== undefined)) {
|
|
75
|
-
continue;
|
|
76
|
-
}
|
|
77
|
-
const stamp = entry.generatedAt ? Date.parse(entry.generatedAt) : NaN;
|
|
78
|
-
if (!Number.isFinite(stamp) || stamp > nowMs)
|
|
79
|
-
continue;
|
|
80
|
-
let mtimeMs;
|
|
81
|
-
try {
|
|
82
|
-
mtimeMs = fs.statSync(entry.filePath).mtimeMs;
|
|
83
|
-
}
|
|
84
|
-
catch {
|
|
85
|
-
continue;
|
|
86
|
-
}
|
|
87
|
-
if (mtimeMs > stamp) {
|
|
88
|
-
skippedChanged += 1;
|
|
89
|
-
continue;
|
|
90
|
-
}
|
|
91
|
-
if (candidates.length < MAX_REVERIFY_FILES)
|
|
92
|
-
candidates.push(entry);
|
|
93
|
-
}
|
|
94
|
-
return { candidates, skippedChanged };
|
|
95
|
-
}
|
|
96
|
-
/**
|
|
97
|
-
* Run the bounded re-verify pass over the report's candidates and build the
|
|
98
|
-
* replacement entries for the caller's single in-band publish. Never throws:
|
|
99
|
-
* an unexpected per-file failure degrades that file to `unconfirmed` (kept
|
|
100
|
-
* verbatim, labeled), which is the shape-48 direction — the harm reaching the
|
|
101
|
-
* user is a hidden real finding, worse than re-delivering a stale one.
|
|
102
|
-
*/
|
|
103
|
-
export async function runPersistentReverify(args) {
|
|
104
|
-
const started = Date.now();
|
|
105
|
-
const deadlineAt = started + (args.budgetMs ?? REVERIFY_BUDGET_MS);
|
|
106
|
-
const nowMs = args.nowMs ?? started;
|
|
107
|
-
const { candidates, skippedChanged } = selectPersistentReverifyFiles(args.report, nowMs);
|
|
108
|
-
const outcomes = [];
|
|
109
|
-
const replacementFiles = [];
|
|
110
|
-
let touched = 0;
|
|
111
|
-
// F2: the producer's own pipeline (enrichFileFromLsp) — constructed once,
|
|
112
|
-
// reused per candidate. deltaOnly: false (a re-observation is not gated on
|
|
113
|
-
// this turn's modified ranges — the file was not edited).
|
|
114
|
-
const buildArgs = {
|
|
115
|
-
cwd: args.cwd,
|
|
116
|
-
sessionId: args.report.sessionId,
|
|
117
|
-
turnIndex: 0,
|
|
118
|
-
files: [],
|
|
119
|
-
modifiedRangesByFile: new Map(),
|
|
120
|
-
dispatchWarnings: [],
|
|
121
|
-
includeLspCodeActions: true,
|
|
122
|
-
deltaOnly: false,
|
|
123
|
-
...(args.signal !== undefined ? { signal: args.signal } : {}),
|
|
124
|
-
lspBudgetMs: REVERIFY_BUDGET_MS,
|
|
125
|
-
dbg: () => { },
|
|
126
|
-
};
|
|
127
|
-
// R3-4: every candidate the budget or the abort cut, so the phase row
|
|
128
|
-
// distinguishes "the pass ran out of time" from "the server answered
|
|
129
|
-
// nothing". Counted from what the loop actually reached, never predicted.
|
|
130
|
-
let processed = 0;
|
|
131
|
-
for (const entry of candidates) {
|
|
132
|
-
if (args.signal?.aborted || Date.now() >= deadlineAt)
|
|
133
|
-
break;
|
|
134
|
-
processed += 1;
|
|
135
|
-
let content;
|
|
136
|
-
try {
|
|
137
|
-
content = fs.readFileSync(entry.filePath, "utf-8");
|
|
138
|
-
}
|
|
139
|
-
catch {
|
|
140
|
-
outcomes.push({
|
|
141
|
-
filePath: entry.filePath,
|
|
142
|
-
displayPath: entry.displayPath,
|
|
143
|
-
outcome: "unconfirmed",
|
|
144
|
-
dropped: 0,
|
|
145
|
-
kept: entry.warnings.length,
|
|
146
|
-
});
|
|
147
|
-
replacementFiles.push({ ...entry, reVerifyIncomplete: true });
|
|
148
|
-
continue;
|
|
149
|
-
}
|
|
150
|
-
// F4: the touch is bound-wrapped — `maxClientWaitMs` bounds the
|
|
151
|
-
// spawn/ready window, `bounded()` is the request ceiling.
|
|
152
|
-
let touchedResult;
|
|
153
|
-
try {
|
|
154
|
-
touchedResult = await bounded(args.lspService.touchFile(entry.filePath, content, {
|
|
155
|
-
diagnostics: "document",
|
|
156
|
-
collectDiagnostics: true,
|
|
157
|
-
source: TOUCH_SOURCE,
|
|
158
|
-
clientScope: "primary",
|
|
159
|
-
}), {
|
|
160
|
-
ms: Math.max(250, deadlineAt - Date.now()),
|
|
161
|
-
signal: args.signal,
|
|
162
|
-
hook: "turn_end",
|
|
163
|
-
label: "persistent_reverify_touch",
|
|
164
|
-
});
|
|
165
|
-
}
|
|
166
|
-
catch {
|
|
167
|
-
// The never-throws contract: a wedged touch degrades to unconfirmed
|
|
168
|
-
// (kept verbatim, labeled), never an escaped error.
|
|
169
|
-
touchedResult = undefined;
|
|
170
|
-
}
|
|
171
|
-
// F3 (#3176): an empty result is clean ONLY when the touch COMPLETED
|
|
172
|
-
// its confirmation policy — the silent-on-clean rule (#240/#533/#1253).
|
|
173
|
-
// A bare `{diags: []}` (the house double's silent empty, a tier-3
|
|
174
|
-
// server still analyzing) or a `skipReason` is UNCONFIRMED: the carried
|
|
175
|
-
// warnings are kept verbatim and the render labels the gap.
|
|
176
|
-
// `touched.inconclusive` is resolveTouchVerdict's output, computed
|
|
177
|
-
// service-side, and is honored directly.
|
|
178
|
-
// R3-3: read the policy through `touchCompletedConfirmationPolicy`, the
|
|
179
|
-
// #1470 seam, NOT the literal `confirmation !== "confirmed"` that
|
|
180
|
-
// `diagnostic-binding.ts:274-288` exists to forbid: `partial` means
|
|
181
|
-
// every server except the named cut-off auxiliaries answered, so the
|
|
182
|
-
// primary's silent-clean gates ran to completion and its observation is
|
|
183
|
-
// as trustworthy as a full confirmation. The literal labels a file the
|
|
184
|
-
// primary fully answered and keeps a finding the touch just re-derived.
|
|
185
|
-
if (touchedResult === undefined ||
|
|
186
|
-
touchedResult.inconclusive === true ||
|
|
187
|
-
touchedResult.skipReason !== undefined ||
|
|
188
|
-
(touchedResult.diagnosticsUnsupportedServerIds ?? []).length > 0 ||
|
|
189
|
-
!touchCompletedConfirmationPolicy(touchedResult)) {
|
|
190
|
-
outcomes.push({
|
|
191
|
-
filePath: entry.filePath,
|
|
192
|
-
displayPath: entry.displayPath,
|
|
193
|
-
outcome: "unconfirmed",
|
|
194
|
-
dropped: 0,
|
|
195
|
-
kept: entry.warnings.length,
|
|
196
|
-
});
|
|
197
|
-
replacementFiles.push({ ...entry, reVerifyIncomplete: true });
|
|
198
|
-
continue;
|
|
199
|
-
}
|
|
200
|
-
touched += 1;
|
|
201
|
-
// F2: the touch's collected diagnostics feed the producer's pipeline
|
|
202
|
-
// as the cached arm — no second pull, the producer's filters and
|
|
203
|
-
// caps are reused verbatim.
|
|
204
|
-
// F4: the outer await is bound-wrapped too — the module carries ZERO
|
|
205
|
-
// syntactic unbounded awaits (#2523 slice-3 worklist), and the hard
|
|
206
|
-
// ceiling composes with enrichFileFromLsp's own internal deadline.
|
|
207
|
-
const freshRecords = (await bounded(enrichFileFromLsp(args.cwd, buildArgs, { filePath: entry.filePath, cached: touchedResult.diags }, {
|
|
208
|
-
lspService: args.lspService,
|
|
209
|
-
pullTimeoutMs: 2000,
|
|
210
|
-
deadlineAt,
|
|
211
|
-
...(args.signal !== undefined ? { signal: args.signal } : {}),
|
|
212
|
-
site: { hook: "turn_end", label: "persistent_reverify" },
|
|
213
|
-
}), {
|
|
214
|
-
ms: Math.max(250, deadlineAt - Date.now()),
|
|
215
|
-
signal: args.signal,
|
|
216
|
-
hook: "turn_end",
|
|
217
|
-
label: "persistent_reverify_enrich",
|
|
218
|
-
})) ?? [];
|
|
219
|
-
let dropped = 0;
|
|
220
|
-
let kept = 0;
|
|
221
|
-
for (const warning of entry.warnings) {
|
|
222
|
-
const stillThere = freshRecords.some((record) => record.rule === warning.rule && record.message === warning.message);
|
|
223
|
-
if (stillThere)
|
|
224
|
-
kept += 1;
|
|
225
|
-
else
|
|
226
|
-
dropped += 1;
|
|
227
|
-
}
|
|
228
|
-
const outcome = freshRecords.length === 0
|
|
229
|
-
? "clean"
|
|
230
|
-
: dropped === 0
|
|
231
|
-
? "reconfirmed"
|
|
232
|
-
: "mixed";
|
|
233
|
-
outcomes.push({
|
|
234
|
-
filePath: entry.filePath,
|
|
235
|
-
displayPath: entry.displayPath,
|
|
236
|
-
outcome,
|
|
237
|
-
dropped,
|
|
238
|
-
kept,
|
|
239
|
-
});
|
|
240
|
-
replacementFiles.push({
|
|
241
|
-
...entry,
|
|
242
|
-
warnings: freshRecords,
|
|
243
|
-
reVerified: true,
|
|
244
|
-
generatedAt: new Date(nowMs).toISOString(),
|
|
245
|
-
});
|
|
246
|
-
}
|
|
247
|
-
logLatency({
|
|
248
|
-
type: "phase",
|
|
249
|
-
toolName: "turn_end",
|
|
250
|
-
filePath: args.cwd,
|
|
251
|
-
phase: "persistent_reverify",
|
|
252
|
-
durationMs: Date.now() - started,
|
|
253
|
-
metadata: {
|
|
254
|
-
candidates: candidates.length,
|
|
255
|
-
touched,
|
|
256
|
-
clean: outcomes.filter((o) => o.outcome === "clean").length,
|
|
257
|
-
reconfirmed: outcomes.filter((o) => o.outcome === "reconfirmed").length,
|
|
258
|
-
mixed: outcomes.filter((o) => o.outcome === "mixed").length,
|
|
259
|
-
unconfirmed: outcomes.filter((o) => o.outcome === "unconfirmed").length,
|
|
260
|
-
skippedChanged,
|
|
261
|
-
skippedBudget: candidates.length - processed,
|
|
262
|
-
},
|
|
263
|
-
});
|
|
264
|
-
return {
|
|
265
|
-
outcomes,
|
|
266
|
-
replacementFiles,
|
|
267
|
-
candidates: candidates.length,
|
|
268
|
-
touched,
|
|
269
|
-
skippedChanged,
|
|
270
|
-
};
|
|
271
|
-
}
|