@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,112 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The turn-end GOVULNCHECK lane (#1892): the session_start-cached Go CVE
|
|
3
|
-
* store, rendered as ONE advisory tier.
|
|
4
|
-
*
|
|
5
|
-
* One lane, one store, one tier — the straight second extraction against the
|
|
6
|
-
* `TurnEndLane` interface, and the first lane that renders an ADVISORY
|
|
7
|
-
* section (see `TurnEndLaneParts.advisoryParts` and ADR 0008's amendment for
|
|
8
|
-
* why that field arrives with this lane rather than with the interface).
|
|
9
|
-
*
|
|
10
|
-
* Registered surface (`clients/finding-delivery-gate.ts`):
|
|
11
|
-
* `runtime-turn:govulncheck-advisory` — mode `gated`, evidence
|
|
12
|
-
* `scannerGates.govulncheck` (the composer's own binding of the shared pass's
|
|
13
|
-
* result, unchanged by this extraction).
|
|
14
|
-
*
|
|
15
|
-
* History this file must not lose (each line below is a shipped defect or a
|
|
16
|
-
* review finding):
|
|
17
|
-
*
|
|
18
|
-
* - #1622 sibling sweep: govulncheck renders a call site as `file:line` off a
|
|
19
|
-
* session_start snapshot — the same stale-line shape as gitleaks, one tier
|
|
20
|
-
* lower. A file edited after the scan keeps its CVE and loses its line,
|
|
21
|
-
* plus the `STALE_LINE_MARKER`.
|
|
22
|
-
* - #1622 review H1: a CVE is pinned by `go.mod`, NOT by the call site, so a
|
|
23
|
-
* DELETED traced file may not drop it — `onMissing: "demote"` routes a
|
|
24
|
-
* vanished path into the same arm as an edited one. The first cut dropped
|
|
25
|
-
* it, and `citedPath` reads only the FIRST filename frame, so one deleted
|
|
26
|
-
* file in a long trace silently killed a CVE go.mod still pins.
|
|
27
|
-
* - #1694 F1: these findings pass through `filterFindingsByDisposition` with
|
|
28
|
-
* the SAME `ProjectDiagnostic` identity `lens_diagnostics mode=full`
|
|
29
|
-
* surfaces, over BOTH freshness arms — a mark made against what the agent
|
|
30
|
-
* was SHOWN is honoured here too.
|
|
31
|
-
* - #1627 + #1625 review: the post-gate row guard and the post-disposition
|
|
32
|
-
* row guard are the SAME guard — `render` tests the list it is about to
|
|
33
|
-
* print, never the raw cache length, or the header prints with zero rows
|
|
34
|
-
* beneath it whenever either filter empties the list.
|
|
35
|
-
*/
|
|
36
|
-
import { filterFindingsByDisposition } from "../../dispatch/finding-policy.js";
|
|
37
|
-
import { toRunnerDisplayPath } from "../../dispatch/runner-context.js";
|
|
38
|
-
import { govulncheckFindingToProjectDiagnostic } from "../../project-diagnostics/runner-adapters/govulncheck.js";
|
|
39
|
-
import { STALE_LINE_MARKER } from "../../stale-marker.js";
|
|
40
|
-
/**
|
|
41
|
-
* #1622 H1: `onMissing: "demote"`, not the default `"drop"`. A Go CVE is
|
|
42
|
-
* pinned by `go.mod`; the traced call site is only where it is reachable
|
|
43
|
-
* FROM, so a deleted trace file means "the line is unusable", never "the
|
|
44
|
-
* vulnerability is gone". `citedPath` reads the first filename frame, which
|
|
45
|
-
* is also the frame `render` prints — the path the verdict is about is the
|
|
46
|
-
* path the agent is shown.
|
|
47
|
-
*/
|
|
48
|
-
async function collect(ctx) {
|
|
49
|
-
const data = (await ctx.readScannerCache("govulncheck"))
|
|
50
|
-
?.data;
|
|
51
|
-
return {
|
|
52
|
-
govulncheck: {
|
|
53
|
-
findings: data?.findings ?? [],
|
|
54
|
-
scannedAt: data?.scannedAt,
|
|
55
|
-
citedPath: (finding) => finding.trace.find((frame) => frame.filename)?.filename,
|
|
56
|
-
onMissing: "demote",
|
|
57
|
-
},
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* #1694 F1/#1625 review round: the freshness gate runs FIRST, so the
|
|
62
|
-
* disposition anchor is derived from each finding's post-demotion identity —
|
|
63
|
-
* this list is already the gate's live+stale partition, never the raw
|
|
64
|
-
* pre-gate cache.
|
|
65
|
-
*/
|
|
66
|
-
function gate(gates, ctx) {
|
|
67
|
-
const stale = new Set(gates.govulncheck.stale);
|
|
68
|
-
const filtered = filterFindingsByDisposition([...gates.govulncheck.live, ...gates.govulncheck.stale], ctx.cwd, (f) => govulncheckFindingToProjectDiagnostic(ctx.cwd, f));
|
|
69
|
-
return {
|
|
70
|
-
findings: filtered.kept,
|
|
71
|
-
stale,
|
|
72
|
-
suppressed: filtered.suppressed,
|
|
73
|
-
};
|
|
74
|
-
}
|
|
75
|
-
function render(kept, ctx) {
|
|
76
|
-
// Lane-local accumulator, deliberately NOT named after the turn's tier:
|
|
77
|
-
// `advisoryParts` is the composer's array, and a lane that pushed into one
|
|
78
|
-
// would be a render seam the `@delivery-surface:` tag scan cannot see
|
|
79
|
-
// (`tests/config/turn-end-lane-boundaries.test.ts`).
|
|
80
|
-
const advisorySections = [];
|
|
81
|
-
// #1627/#1625: guard the list that is about to be printed, never the raw
|
|
82
|
-
// cache length — the header must not print with zero rows beneath it.
|
|
83
|
-
if (kept.findings.length) {
|
|
84
|
-
const findings = kept.findings.slice(0, 5);
|
|
85
|
-
let report = "🛡️ Go CVEs reachable from this code (govulncheck) — upgrade where possible:\n";
|
|
86
|
-
for (const f of findings) {
|
|
87
|
-
const callSite = f.trace.find((t) => t.filename);
|
|
88
|
-
const stale = kept.stale.has(f);
|
|
89
|
-
const where = callSite?.filename
|
|
90
|
-
? `${toRunnerDisplayPath(ctx.cwd, callSite.filename)}${!stale && callSite.line ? `:${callSite.line}` : ""}${stale ? ` ${STALE_LINE_MARKER}` : ""}`
|
|
91
|
-
: (f.module ?? f.packageName ?? "(module)");
|
|
92
|
-
const fix = f.fixedVersion
|
|
93
|
-
? ` — upgrade to ${f.fixedVersion} or later`
|
|
94
|
-
: " — no fix yet, track upstream";
|
|
95
|
-
report += ` ${f.osv} (${where})${fix}\n`;
|
|
96
|
-
}
|
|
97
|
-
if (kept.findings.length > findings.length) {
|
|
98
|
-
report += ` … and ${kept.findings.length - findings.length} more\n`;
|
|
99
|
-
}
|
|
100
|
-
advisorySections.push(report);
|
|
101
|
-
}
|
|
102
|
-
return {
|
|
103
|
-
advisoryParts: advisorySections,
|
|
104
|
-
dispositionSuppressed: { govulncheck: kept.suppressed },
|
|
105
|
-
};
|
|
106
|
-
}
|
|
107
|
-
/** The lane. Stateless — one object, no per-turn state to reset. */
|
|
108
|
-
export const govulncheckLane = {
|
|
109
|
-
collect,
|
|
110
|
-
gate,
|
|
111
|
-
render,
|
|
112
|
-
};
|
|
@@ -1,204 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The turn-end SECRETS lane (#1892): the gitleaks and trivy-secrets stores,
|
|
3
|
-
* their live 🔴 blocker tier and their demoted 🔑 tier.
|
|
4
|
-
*
|
|
5
|
-
* One lane, two stores, on purpose. The two secret scanners do not have a
|
|
6
|
-
* section each: #131 Mode 3 collapses them (and ast-grep's hardcoded-secret
|
|
7
|
-
* rules) BY LOCATION into one report with combined provenance, because a
|
|
8
|
-
* credential flagged by two tools needs rotating once, not twice — and the
|
|
9
|
-
* demoted tier merges the same two stores for the same reason. So "gitleaks"
|
|
10
|
-
* is not a separable delivery lane: splitting it out would leave every
|
|
11
|
-
* rendering rule (the dedupe, the ast-grep enrichment, the cap, both
|
|
12
|
-
* preambles) in the composer, which is the opposite of the extraction. The
|
|
13
|
-
* lane is the delivery contract; the stores are its sources.
|
|
14
|
-
*
|
|
15
|
-
* Registered surfaces (`clients/finding-delivery-gate.ts`):
|
|
16
|
-
* `runtime-turn:secrets-gitleaks`, `runtime-turn:secrets-trivy`,
|
|
17
|
-
* `runtime-turn:stale-secrets-tier`.
|
|
18
|
-
*
|
|
19
|
-
* History this file must not lose (each line below is a shipped defect):
|
|
20
|
-
*
|
|
21
|
-
* - #1617: these findings never passed through `applyDispositions`, so an
|
|
22
|
-
* agent-marked false-positive re-reported as a 🔴 STOP blocker every turn.
|
|
23
|
-
* - #1625 review: the disposition filter runs AFTER the freshness gate, over
|
|
24
|
-
* BOTH arms — an fp-marked finding that later goes stale must not reappear
|
|
25
|
-
* in the demoted tier.
|
|
26
|
-
* - #1622 review M1: a demoted secret keeps its rule id and source; only the
|
|
27
|
-
* line is withheld. An agent triages `aws-access-token` differently from a
|
|
28
|
-
* low-confidence `generic-api-key`, and cannot do that from a bare path.
|
|
29
|
-
* - #1622 review M2: the demoted tier is its OWN tier, never `advisoryParts`
|
|
30
|
-
* ("no action required this turn" directly above copy telling the agent to
|
|
31
|
-
* re-scan).
|
|
32
|
-
*/
|
|
33
|
-
import { recordDegradationOnce } from "../../degradation-ledger.js";
|
|
34
|
-
import { bounded } from "../../deadline-utils.js";
|
|
35
|
-
import { filterFindingsByDisposition } from "../../dispatch/finding-policy.js";
|
|
36
|
-
import { toRunnerDisplayPath } from "../../dispatch/runner-context.js";
|
|
37
|
-
import { classifyAndFilterFindings, } from "../../gitleaks-client.js";
|
|
38
|
-
import { HOOK_WALL_BUDGET_MS } from "../../hook-budgets.js";
|
|
39
|
-
import { gitleaksFindingToProjectDiagnostic } from "../../project-diagnostics/runner-adapters/gitleaks.js";
|
|
40
|
-
import { trivySecretFindingToProjectDiagnostic } from "../../project-diagnostics/runner-adapters/trivy.js";
|
|
41
|
-
import { dedupeSecretFindings, fromAstGrepWarnings, fromGitleaks, fromTrivySecrets, isSecretWarning, secretLocationKey, } from "../../secret-findings.js";
|
|
42
|
-
import { STALE_LINE_MARKER } from "../../stale-marker.js";
|
|
43
|
-
/**
|
|
44
|
-
* Gitleaks deliberately scans gitignored local files and nested repositories
|
|
45
|
-
* so an explicit security audit can still inspect them. The adapter is the
|
|
46
|
-
* source of truth for whether a finding belongs in a blocking delivery lane;
|
|
47
|
-
* filter here before freshness handling so demoted findings cannot leak into
|
|
48
|
-
* either the blocker or the stale-secret turn context.
|
|
49
|
-
*/
|
|
50
|
-
async function blockingGitleaksFindings(data, ctx) {
|
|
51
|
-
const classification = await bounded(classifyAndFilterFindings(data?.findings ?? [], ctx.cwd), {
|
|
52
|
-
ms: HOOK_WALL_BUDGET_MS.turn_end,
|
|
53
|
-
signal: ctx.signal,
|
|
54
|
-
hook: "turn_end",
|
|
55
|
-
label: "classifyAndFilterFindings",
|
|
56
|
-
});
|
|
57
|
-
if (classification === undefined) {
|
|
58
|
-
recordDegradationOnce({
|
|
59
|
-
kind: "gitleaks_classification_timeout",
|
|
60
|
-
subject: ctx.cwd,
|
|
61
|
-
reason: "gitleaks classification exceeded the turn_end budget; retained raw findings to fail open",
|
|
62
|
-
});
|
|
63
|
-
}
|
|
64
|
-
return (classification ?? data?.findings ?? []).filter((finding) => gitleaksFindingToProjectDiagnostic(ctx.cwd, finding).semantic ===
|
|
65
|
-
"blocking");
|
|
66
|
-
}
|
|
67
|
-
/**
|
|
68
|
-
* #1460/#1622: the gitleaks cache is TTL-only, so a finding for a file deleted
|
|
69
|
-
* after the scan was served as a 🔴 blocker for the rest of the 30-minute
|
|
70
|
-
* window — 119 of 126 findings in pi-lens's own cache. This lane is the single
|
|
71
|
-
* agent-facing consumer of that store (session_start's read only decides
|
|
72
|
-
* whether to re-scan; the project-diagnostics path re-scans fresh and
|
|
73
|
-
* reconciles at load), so the drop belongs here, before the findings enter the
|
|
74
|
-
* shared secret pipeline. A cited file EDITED after the scan keeps its finding
|
|
75
|
-
* but loses its line number: the credential may still be there, just not where
|
|
76
|
-
* the snapshot says. Dropping instead would let any edit — malicious or
|
|
77
|
-
* accidental — mute a real secret. Both stores take the default
|
|
78
|
-
* `onMissing: "drop"`: the finding IS the deleted file's content.
|
|
79
|
-
*/
|
|
80
|
-
async function collect(ctx) {
|
|
81
|
-
// One await for both stores: the two reads are independent, and the memo
|
|
82
|
-
// hands each of them the same promise the composer's own trivy read shares.
|
|
83
|
-
const [gitleaksEntry, trivyEntry] = await Promise.all([
|
|
84
|
-
ctx.readScannerCache("gitleaks"),
|
|
85
|
-
ctx.readScannerCache("trivy"),
|
|
86
|
-
]);
|
|
87
|
-
const gitleaksData = gitleaksEntry?.data;
|
|
88
|
-
const trivyData = trivyEntry?.data;
|
|
89
|
-
return {
|
|
90
|
-
gitleaks: {
|
|
91
|
-
findings: await blockingGitleaksFindings(gitleaksData, ctx),
|
|
92
|
-
citedPath: (finding) => finding.file,
|
|
93
|
-
scannedAt: gitleaksData?.scannedAt,
|
|
94
|
-
},
|
|
95
|
-
"trivy-secrets": {
|
|
96
|
-
findings: trivyData?.secrets ?? [],
|
|
97
|
-
citedPath: (finding) => finding.file,
|
|
98
|
-
scannedAt: trivyData?.scannedAt,
|
|
99
|
-
},
|
|
100
|
-
};
|
|
101
|
-
}
|
|
102
|
-
/**
|
|
103
|
-
* #1617/#1625/#1628: filter through the SAME `ProjectDiagnostic` identity
|
|
104
|
-
* `lens_diagnostics mode=full` surfaces (tool="gitleaks",
|
|
105
|
-
* rule="gitleaks:<ruleId>" / tool="trivy", rule="trivy-secret:<ruleId>"), so a
|
|
106
|
-
* mark made against what the agent was SHOWN is honored here too — and over
|
|
107
|
-
* both arms, never live-only.
|
|
108
|
-
*
|
|
109
|
-
* ast-grep secret findings need no filtering here: they already went through
|
|
110
|
-
* dispatch's `applyDispositions` before reaching `peekActionableWarnings()`.
|
|
111
|
-
*/
|
|
112
|
-
function gate(gates, ctx) {
|
|
113
|
-
const gitleaksLive = filterFindingsByDisposition(gates.gitleaks.live, ctx.cwd, (f) => gitleaksFindingToProjectDiagnostic(ctx.cwd, f));
|
|
114
|
-
const gitleaksStale = filterFindingsByDisposition(gates.gitleaks.stale, ctx.cwd, (f) => gitleaksFindingToProjectDiagnostic(ctx.cwd, f));
|
|
115
|
-
const trivyLive = filterFindingsByDisposition(gates["trivy-secrets"].live, ctx.cwd, (f) => trivySecretFindingToProjectDiagnostic(ctx.cwd, f));
|
|
116
|
-
const trivyStale = filterFindingsByDisposition(gates["trivy-secrets"].stale, ctx.cwd, (f) => trivySecretFindingToProjectDiagnostic(ctx.cwd, f));
|
|
117
|
-
return {
|
|
118
|
-
gitleaksLive: gitleaksLive.kept,
|
|
119
|
-
gitleaksStale: gitleaksStale.kept,
|
|
120
|
-
trivyLive: trivyLive.kept,
|
|
121
|
-
trivyStale: trivyStale.kept,
|
|
122
|
-
suppressed: {
|
|
123
|
-
gitleaks: gitleaksLive.suppressed + gitleaksStale.suppressed,
|
|
124
|
-
"trivy-secrets": trivyLive.suppressed + trivyStale.suppressed,
|
|
125
|
-
},
|
|
126
|
-
};
|
|
127
|
-
}
|
|
128
|
-
function render(kept, ctx) {
|
|
129
|
-
const sessionSecrets = dedupeSecretFindings([
|
|
130
|
-
...fromGitleaks(kept.gitleaksLive),
|
|
131
|
-
...fromTrivySecrets(kept.trivyLive),
|
|
132
|
-
]);
|
|
133
|
-
// Locations already surfaced as session-scan secret blockers — used to
|
|
134
|
-
// enrich provenance where ast-grep agrees, and handed back so the
|
|
135
|
-
// actionable-warnings advisory can suppress its duplicate ast-grep copy.
|
|
136
|
-
const deliveredLocationKeys = new Set(sessionSecrets.map((f) => secretLocationKey(f.file, f.line)));
|
|
137
|
-
// Lane-local accumulators, deliberately NOT named after the turn's tiers:
|
|
138
|
-
// `blockerParts`/`staleSecretParts` are the composer's arrays, and a lane
|
|
139
|
-
// that pushed into one would be a render seam the `@delivery-surface:` tag
|
|
140
|
-
// scan cannot see (`tests/config/turn-end-lane-boundaries.test.ts`).
|
|
141
|
-
const blockerSections = [];
|
|
142
|
-
if (sessionSecrets.length) {
|
|
143
|
-
// Fold in ast-grep provenance ONLY where it coincides with a session
|
|
144
|
-
// secret — don't promote ast-grep-only findings out of their advisory
|
|
145
|
-
// tier.
|
|
146
|
-
const enriched = dedupeSecretFindings([
|
|
147
|
-
...sessionSecrets,
|
|
148
|
-
...fromAstGrepWarnings(ctx.peekActionableWarnings().filter(isSecretWarning)).filter((a) => deliveredLocationKeys.has(secretLocationKey(a.file, a.line))),
|
|
149
|
-
]);
|
|
150
|
-
const shown = enriched.slice(0, 5);
|
|
151
|
-
let report = "🔴 STOP — hardcoded secrets detected. Rotate the credentials and remove them from source:\n";
|
|
152
|
-
for (const f of shown) {
|
|
153
|
-
const where = `${toRunnerDisplayPath(ctx.cwd, f.file)}:${f.line}`;
|
|
154
|
-
report += ` ${where} — ${f.rule} [${f.sources.join(" + ")}]${f.description ? `: ${f.description}` : ""}\n`;
|
|
155
|
-
}
|
|
156
|
-
if (enriched.length > shown.length) {
|
|
157
|
-
report += ` … and ${enriched.length - shown.length} more\n`;
|
|
158
|
-
}
|
|
159
|
-
blockerSections.push(report);
|
|
160
|
-
}
|
|
161
|
-
// Demoted secrets are addressed by FILE, never by line — the line is the one
|
|
162
|
-
// field the edit invalidated. Deduped on file+rule+source so a file with
|
|
163
|
-
// twenty stale hits of one rule is named once.
|
|
164
|
-
const staleSecretEntries = [
|
|
165
|
-
...kept.gitleaksStale.map((f) => ({
|
|
166
|
-
file: toRunnerDisplayPath(ctx.cwd, f.file),
|
|
167
|
-
rule: f.ruleId,
|
|
168
|
-
source: "gitleaks",
|
|
169
|
-
})),
|
|
170
|
-
...kept.trivyStale.map((f) => ({
|
|
171
|
-
file: toRunnerDisplayPath(ctx.cwd, f.file),
|
|
172
|
-
rule: f.ruleId,
|
|
173
|
-
source: "trivy",
|
|
174
|
-
})),
|
|
175
|
-
];
|
|
176
|
-
const staleSecrets = [
|
|
177
|
-
...new Map(staleSecretEntries.map((e) => [`${e.file}|${e.rule}|${e.source}`, e])).values(),
|
|
178
|
-
];
|
|
179
|
-
const staleSections = [];
|
|
180
|
-
if (staleSecrets.length) {
|
|
181
|
-
const shown = staleSecrets.slice(0, 5);
|
|
182
|
-
let report = `🔑 ACTION NEEDED — secrets were flagged in files that changed after the scan. ${STALE_LINE_MARKER}\n` +
|
|
183
|
-
"The cached line numbers are no longer trustworthy, so they are withheld. Re-run a secrets scan to confirm or clear these:\n";
|
|
184
|
-
for (const entry of shown) {
|
|
185
|
-
report += ` ${entry.file} — ${entry.rule} [${entry.source}]\n`;
|
|
186
|
-
}
|
|
187
|
-
if (staleSecrets.length > shown.length) {
|
|
188
|
-
report += ` … and ${staleSecrets.length - shown.length} more\n`;
|
|
189
|
-
}
|
|
190
|
-
staleSections.push(report);
|
|
191
|
-
}
|
|
192
|
-
return {
|
|
193
|
-
blockerParts: blockerSections,
|
|
194
|
-
staleSecretParts: staleSections,
|
|
195
|
-
dispositionSuppressed: kept.suppressed,
|
|
196
|
-
deliveredLocationKeys,
|
|
197
|
-
};
|
|
198
|
-
}
|
|
199
|
-
/** The lane. Stateless — one object, no per-turn state to reset. */
|
|
200
|
-
export const secretsLane = {
|
|
201
|
-
collect,
|
|
202
|
-
gate,
|
|
203
|
-
render,
|
|
204
|
-
};
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Renderer for the #484 turn-summary custom message
|
|
3
|
-
* (`pilens:turn-summary`). Collapsed = one tool-grouped line (pi-lens brand
|
|
4
|
-
* accent). Expanded = file-major: each touched file lists its
|
|
5
|
-
* formats/autofixes/diagnostics with tool + rule id + line.
|
|
6
|
-
*
|
|
7
|
-
* `Component` construction is verified practical from an extension: it is
|
|
8
|
-
* just `@earendil-works/pi-tui`'s `Component` interface —
|
|
9
|
-
* `{ render(width: number): string[] }` — no framework object graph needed.
|
|
10
|
-
* `pi-tui` is already a devDependency (package.json `@earendil-works/pi-tui`).
|
|
11
|
-
*/
|
|
12
|
-
import { fitLines } from "./tui-fit.js";
|
|
13
|
-
import { formatTurnSummaryLine, } from "./turn-summary.js";
|
|
14
|
-
function severityColor(theme, severity) {
|
|
15
|
-
if (severity === "error")
|
|
16
|
-
return (s) => theme.fg("error", s);
|
|
17
|
-
if (severity === "warning")
|
|
18
|
-
return (s) => theme.fg("warning", s);
|
|
19
|
-
return (s) => theme.fg("dim", s);
|
|
20
|
-
}
|
|
21
|
-
function eventLine(theme, event) {
|
|
22
|
-
const loc = event.line !== undefined ? `:${event.line}` : "";
|
|
23
|
-
if (event.kind === "diagnostic") {
|
|
24
|
-
const color = severityColor(theme, event.severity);
|
|
25
|
-
const rule = event.ruleId ? ` ${event.ruleId}` : "";
|
|
26
|
-
const desc = event.description ? ` — ${event.description}` : "";
|
|
27
|
-
return ` ${color(`[${event.tool}${rule}]`)}${loc}${desc}`;
|
|
28
|
-
}
|
|
29
|
-
if (event.kind === "autofix") {
|
|
30
|
-
const desc = event.description ? ` — ${event.description}` : "";
|
|
31
|
-
return ` ${theme.fg("success", `[autofix:${event.tool}]`)}${loc}${desc}`;
|
|
32
|
-
}
|
|
33
|
-
return ` ${theme.fg("accent", `[format:${event.tool}]`)}`;
|
|
34
|
-
}
|
|
35
|
-
function buildExpandedLines(details, theme) {
|
|
36
|
-
const lines = [];
|
|
37
|
-
lines.push(theme.fg("accent", theme.bold("pi-lens turn summary")));
|
|
38
|
-
const sortedFiles = [...details.files].sort((a, b) => a.displayPath.localeCompare(b.displayPath));
|
|
39
|
-
for (const file of sortedFiles) {
|
|
40
|
-
lines.push(` ${theme.bold(file.displayPath)}`);
|
|
41
|
-
// File-major: formats, then autofixes, then diagnostics — matches the
|
|
42
|
-
// order things happen in the write pipeline (format → autofix → lint).
|
|
43
|
-
const formats = file.events.filter((e) => e.kind === "format");
|
|
44
|
-
const autofixes = file.events.filter((e) => e.kind === "autofix");
|
|
45
|
-
const diagnostics = file.events.filter((e) => e.kind === "diagnostic");
|
|
46
|
-
for (const event of [...formats, ...autofixes, ...diagnostics]) {
|
|
47
|
-
lines.push(eventLine(theme, event));
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
return lines;
|
|
51
|
-
}
|
|
52
|
-
export function renderTurnSummaryMessage(message, options, theme) {
|
|
53
|
-
const details = message.details;
|
|
54
|
-
if (!details)
|
|
55
|
-
return undefined;
|
|
56
|
-
// pi-tui HARD-CRASHES the host on any rendered line wider than the
|
|
57
|
-
// terminal, so every line must be fitted to the width the TUI hands us
|
|
58
|
-
// (#513 — an untruncated collapsed one-liner took down a live session).
|
|
59
|
-
if (!options.expanded) {
|
|
60
|
-
const line = formatTurnSummaryLine(details);
|
|
61
|
-
const text = theme.fg("accent", line);
|
|
62
|
-
return {
|
|
63
|
-
render: (width) => fitLines([text], width),
|
|
64
|
-
invalidate: () => { },
|
|
65
|
-
};
|
|
66
|
-
}
|
|
67
|
-
const lines = buildExpandedLines(details, theme);
|
|
68
|
-
return {
|
|
69
|
-
render: (width) => fitLines(lines, width),
|
|
70
|
-
invalidate: () => { },
|
|
71
|
-
};
|
|
72
|
-
}
|
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Turn-summary collector (#484).
|
|
3
|
-
*
|
|
4
|
-
* Opt-in, transcript-persistent record of what pi-lens did: diagnostics
|
|
5
|
-
* found, autofixes applied, autoformats applied. Accumulated per-file across
|
|
6
|
-
* the RUN's write/edit pipeline runs + the agent_end deferred-format pass,
|
|
7
|
-
* then emitted as ONE `pi.sendMessage` custom entry at the `agent_settled`
|
|
8
|
-
* quiet window (never per-file, and per-RUN not per-turn — see the #484
|
|
9
|
-
* discussion + PR #500 review). The quiet-window emit point is load-bearing,
|
|
10
|
-
* not cosmetic (verified in the installed pi 0.80.6 SDK):
|
|
11
|
-
*
|
|
12
|
-
* 1. `sendCustomMessage` STEERS the live model conversation when the
|
|
13
|
-
* session `isStreaming` (dist/core/agent-session.js), and turn_end can
|
|
14
|
-
* fire mid-stream — a passive summary must never steer a working agent.
|
|
15
|
-
* At settle the session is idle, so sendMessage takes the safe append
|
|
16
|
-
* branch (persisted + rendered immediately, no steer).
|
|
17
|
-
* 2. A CustomMessageEntry DOES participate in LLM context: `display` only
|
|
18
|
-
* controls TUI rendering, and `buildSessionContext` converts every such
|
|
19
|
-
* entry into a `role: "user"` message on later context builds
|
|
20
|
-
* (dist/core/session-manager.js). Only `content` reaches the model —
|
|
21
|
-
* `details` never does — so the entry `content` must stay ONE short
|
|
22
|
-
* line; the model's exposure is that ~80-char collapsed line, an
|
|
23
|
-
* accepted residue (largely redundant with the #493 agent nudge).
|
|
24
|
-
*
|
|
25
|
-
* Collapsed rendering is tool-grouped; expanded rendering (from `details`,
|
|
26
|
-
* human-only) is file-major.
|
|
27
|
-
*
|
|
28
|
-
* All map keys go through `normalizeMapKey` — never a hand-rolled path
|
|
29
|
-
* comparison (see the two red CI rounds on PR #491 the raw-key trap cost).
|
|
30
|
-
*/
|
|
31
|
-
import { normalizeMapKey } from "./path-utils.js";
|
|
32
|
-
/**
|
|
33
|
-
* Per-RUN accumulator. One instance lives on the runtime coordinator; it
|
|
34
|
-
* survives turn boundaries (NOT cleared in beginTurn) and is cleared only by
|
|
35
|
-
* `consume()` at the quiet-window emit and by `resetForSession()`.
|
|
36
|
-
*/
|
|
37
|
-
export class TurnSummaryCollector {
|
|
38
|
-
filesByKey = new Map();
|
|
39
|
-
getOrCreate(filePath) {
|
|
40
|
-
const key = normalizeMapKey(filePath);
|
|
41
|
-
let entry = this.filesByKey.get(key);
|
|
42
|
-
if (!entry) {
|
|
43
|
-
// displayPath is resolved at consume() time (cwd known there); the
|
|
44
|
-
// accumulation phase only has the absolute path.
|
|
45
|
-
entry = { filePath, displayPath: filePath, events: [] };
|
|
46
|
-
this.filesByKey.set(key, entry);
|
|
47
|
-
}
|
|
48
|
-
return entry;
|
|
49
|
-
}
|
|
50
|
-
record(filePath, event) {
|
|
51
|
-
this.getOrCreate(filePath).events.push(event);
|
|
52
|
-
}
|
|
53
|
-
recordDiagnostic(filePath, args) {
|
|
54
|
-
this.record(filePath, { kind: "diagnostic", ...args });
|
|
55
|
-
}
|
|
56
|
-
recordAutofix(filePath, args) {
|
|
57
|
-
this.record(filePath, { kind: "autofix", ...args });
|
|
58
|
-
}
|
|
59
|
-
recordFormat(filePath, args) {
|
|
60
|
-
this.record(filePath, { kind: "format", ...args });
|
|
61
|
-
}
|
|
62
|
-
isEmpty() {
|
|
63
|
-
return this.filesByKey.size === 0;
|
|
64
|
-
}
|
|
65
|
-
/** Snapshot without clearing — used for tests/observability. */
|
|
66
|
-
peek() {
|
|
67
|
-
return [...this.filesByKey.values()];
|
|
68
|
-
}
|
|
69
|
-
clear() {
|
|
70
|
-
this.filesByKey.clear();
|
|
71
|
-
}
|
|
72
|
-
/** Consume (snapshot + clear) the run's collection, building the details payload. */
|
|
73
|
-
consume(turnIndex, toDisplayPath) {
|
|
74
|
-
const files = [...this.filesByKey.values()].map((entry) => ({
|
|
75
|
-
...entry,
|
|
76
|
-
displayPath: toDisplayPath
|
|
77
|
-
? toDisplayPath(entry.filePath)
|
|
78
|
-
: entry.filePath,
|
|
79
|
-
}));
|
|
80
|
-
this.filesByKey.clear();
|
|
81
|
-
const counts = {
|
|
82
|
-
diagnostics: 0,
|
|
83
|
-
autofixes: 0,
|
|
84
|
-
formats: 0,
|
|
85
|
-
byTool: { diagnostic: {}, autofix: {}, format: {} },
|
|
86
|
-
};
|
|
87
|
-
for (const file of files) {
|
|
88
|
-
for (const event of file.events) {
|
|
89
|
-
if (event.kind === "diagnostic")
|
|
90
|
-
counts.diagnostics++;
|
|
91
|
-
else if (event.kind === "autofix")
|
|
92
|
-
counts.autofixes++;
|
|
93
|
-
else
|
|
94
|
-
counts.formats++;
|
|
95
|
-
const bucket = counts.byTool[event.kind];
|
|
96
|
-
bucket[event.tool] = (bucket[event.tool] ?? 0) + 1;
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
return { version: 1, turnIndex, files, counts };
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
function formatToolCounts(byTool) {
|
|
103
|
-
return Object.entries(byTool)
|
|
104
|
-
.sort((a, b) => b[1] - a[1] || a[0].localeCompare(b[0]))
|
|
105
|
-
.map(([tool, count]) => `${tool} ${count}`)
|
|
106
|
-
.join(", ");
|
|
107
|
-
}
|
|
108
|
-
/**
|
|
109
|
-
* Build the collapsed, tool-grouped one-line fallback text (also used as the
|
|
110
|
-
* plain-text `content` for hosts without the custom renderer).
|
|
111
|
-
* Example: "pi-lens: 3 diagnostics (eslint 2, tsserver 1) · 2 autofixed (ruff) · 1 reformatted (prettier)"
|
|
112
|
-
*/
|
|
113
|
-
export function formatTurnSummaryLine(details) {
|
|
114
|
-
const parts = [];
|
|
115
|
-
const { counts } = details;
|
|
116
|
-
if (counts.diagnostics > 0) {
|
|
117
|
-
const byTool = formatToolCounts(counts.byTool.diagnostic);
|
|
118
|
-
parts.push(`${counts.diagnostics} diagnostic${counts.diagnostics === 1 ? "" : "s"}${byTool ? ` (${byTool})` : ""}`);
|
|
119
|
-
}
|
|
120
|
-
if (counts.autofixes > 0) {
|
|
121
|
-
const byTool = formatToolCounts(counts.byTool.autofix);
|
|
122
|
-
parts.push(`${counts.autofixes} autofixed${byTool ? ` (${byTool})` : ""}`);
|
|
123
|
-
}
|
|
124
|
-
if (counts.formats > 0) {
|
|
125
|
-
const byTool = formatToolCounts(counts.byTool.format);
|
|
126
|
-
parts.push(`${counts.formats} reformatted${byTool ? ` (${byTool})` : ""}`);
|
|
127
|
-
}
|
|
128
|
-
if (parts.length === 0)
|
|
129
|
-
return "pi-lens: turn summary (empty)";
|
|
130
|
-
return `pi-lens: ${parts.join(" · ")}`;
|
|
131
|
-
}
|
|
132
|
-
export const TURN_SUMMARY_CUSTOM_TYPE = "pilens:turn-summary";
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { findLocalToolConfig } from "./path-utils.js";
|
|
2
|
-
/**
|
|
3
|
-
* typos (source-code spell checker) configuration discovery. typos runs as a
|
|
4
|
-
* cross-cutting auxiliary LSP (#283); like Opengrep's local-rules gate and
|
|
5
|
-
* zizmor's `zizmor.yml` gate, the PRESENCE of a repo-local typos config is the
|
|
6
|
-
* project's deliberate opt-in to let spelling findings BLOCK (it carries the
|
|
7
|
-
* team's curated allow-list / `extend-words` / severity). Advisory otherwise.
|
|
8
|
-
*
|
|
9
|
-
* typos discovers its config as `typos.toml`, `_typos.toml`, or `.typos.toml`
|
|
10
|
-
* at the project root (see typos' configuration docs). We only need to know if
|
|
11
|
-
* one EXISTS for the blocking gate — the `typos-lsp` server reads it itself.
|
|
12
|
-
*
|
|
13
|
-
* Note: `files.*` ignore globs in the config have NO effect under the LSP
|
|
14
|
-
* (CLI-only), so a `.typos.toml` does not exclude paths from the LSP scan — it
|
|
15
|
-
* only tunes the dictionary/severity. The blocking gate keys purely on presence.
|
|
16
|
-
*/
|
|
17
|
-
export const LOCAL_TYPOS_CONFIG_NAMES = [
|
|
18
|
-
"typos.toml",
|
|
19
|
-
"_typos.toml",
|
|
20
|
-
".typos.toml",
|
|
21
|
-
];
|
|
22
|
-
// Deliberately UNCEILINGED at $HOME (refs #2472 review round 3, F1): typos
|
|
23
|
-
// discovers `~/typos.toml` as the user's legitimate global config, and
|
|
24
|
-
// `typos-lsp` merges an injected config with its own discovery (injected
|
|
25
|
-
// wins) — a ceilinged search here silently hid the user's config from that
|
|
26
|
-
// merge and let pi-lens's own shipped `_typos.toml` clobber it instead.
|
|
27
|
-
export function findLocalTyposConfig(startDir) {
|
|
28
|
-
return findLocalToolConfig(startDir, LOCAL_TYPOS_CONFIG_NAMES);
|
|
29
|
-
}
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The HUMAN channel for degradations discovered deep in `clients/` (#1333).
|
|
3
|
-
*
|
|
4
|
-
* Most of what the migrated `console.*` sites emitted is LOG-audience and
|
|
5
|
-
* belongs in an ndjson sink (`clients/extension-log.ts`). A small set is
|
|
6
|
-
* genuinely user-facing — "the config file you wrote is being ignored", "this
|
|
7
|
-
* language's grammar could not be fetched, so its structural features are
|
|
8
|
-
* degraded", "the WASM runtime aborted; restart to recover". Those must reach
|
|
9
|
-
* the human through the HOST's own render path, never a raw terminal write
|
|
10
|
-
* (pi owns the terminal — see the module doc in `extension-log.ts`).
|
|
11
|
-
*
|
|
12
|
-
* `index.ts` wires a getter at extension init; modules deep in the tree call
|
|
13
|
-
* `notifyUserDegradation` without knowing anything about `ctx`. Per the
|
|
14
|
-
* #338/#798 detached-callback rule the notifier is resolved through a GETTER
|
|
15
|
-
* at delivery time — never captured once, because a session replacement
|
|
16
|
-
* invalidates the previously captured `ctx.ui`.
|
|
17
|
-
*
|
|
18
|
-
* Fail-soft by construction: with no host wired (MCP server, CLI, tests) this
|
|
19
|
-
* is a no-op and the ndjson sink remains the sole destination — the message is
|
|
20
|
-
* never lost, only un-rendered.
|
|
21
|
-
*/
|
|
22
|
-
import { withConfigDiagnosticCode, } from "./config-diagnostic-codes.js";
|
|
23
|
-
let notifierGetter;
|
|
24
|
-
/** Called once from the extension entry with a getter over the live `ctx.ui.notify`. */
|
|
25
|
-
export function wireUserNotifier(portsOrGetter) {
|
|
26
|
-
notifierGetter =
|
|
27
|
-
typeof portsOrGetter === "function"
|
|
28
|
-
? portsOrGetter
|
|
29
|
-
: () => portsOrGetter.notify.user;
|
|
30
|
-
}
|
|
31
|
-
/** Test/teardown-only: drop the wired host. */
|
|
32
|
-
export function resetUserNotifier() {
|
|
33
|
-
notifierGetter = undefined;
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* Best-effort delivery of a user-facing degradation. Never throws — a stale
|
|
37
|
-
* `ctx` after a session replacement must degrade to a no-op, not break the
|
|
38
|
-
* diagnostic path that called it.
|
|
39
|
-
*/
|
|
40
|
-
export function notifyUserDegradation(message, level = "warning", options) {
|
|
41
|
-
try {
|
|
42
|
-
const notify = notifierGetter?.();
|
|
43
|
-
const coded = options?.code
|
|
44
|
-
? withConfigDiagnosticCode(message, options.code)
|
|
45
|
-
: message;
|
|
46
|
-
notify?.(coded, level);
|
|
47
|
-
}
|
|
48
|
-
catch {
|
|
49
|
-
// The ndjson sink already holds this message; a dead host is not an error.
|
|
50
|
-
}
|
|
51
|
-
}
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Vanished-instance markers (#1123 item 2, first slice — instance health).
|
|
3
|
-
*
|
|
4
|
-
* `deregisterInstance()` (clients/instance-registry.ts) SYNCHRONOUSLY removes
|
|
5
|
-
* a process's own entry from `instances.json` on a clean `session_shutdown`.
|
|
6
|
-
* That means the entry's mere PRESENCE in the registry, combined with a
|
|
7
|
-
* pid-confirmed-dead owner, is already proof the process never reached that
|
|
8
|
-
* shutdown path — no separate "clean shutdown" flag is needed on
|
|
9
|
-
* `InstanceEntry` (the registry already carries `heartbeatAt`/`rssBytes`,
|
|
10
|
-
* which is exactly the "lastSeen"/"rss" pair this marker needs; both are
|
|
11
|
-
* used AS-IS, per the instruction to add fields only if missing).
|
|
12
|
-
*
|
|
13
|
-
* `sweepOrphans()` (clients/instance-reaper.ts) already prunes these exact
|
|
14
|
-
* dead-pid entries out of the registry as part of #472's orphan-LSP reap —
|
|
15
|
-
* so this marker's read MUST happen against a snapshot taken before (or
|
|
16
|
-
* independently of) that prune, or the vanished set will already be empty by
|
|
17
|
-
* the time this runs. `logVanishedInstances` therefore takes the registry
|
|
18
|
-
* snapshot as an argument rather than reading it itself, so the caller
|
|
19
|
-
* controls ordering (see index.ts's session_start wiring, which reads once
|
|
20
|
-
* and passes the same snapshot to both this marker and `sweepOrphans`).
|
|
21
|
-
*/
|
|
22
|
-
import { logSessionStart } from "./sessionstart-logger.js";
|
|
23
|
-
import { realIsPidAlive } from "./instance-reaper.js";
|
|
24
|
-
/**
|
|
25
|
-
* PURE: registry entries whose owning pid is confirmed dead. Every such entry
|
|
26
|
-
* is, by construction (see module docstring), one that exited without
|
|
27
|
-
* reaching `deregisterInstance()`. Uses the SAME conservative liveness
|
|
28
|
-
* contract as the reaper (`isPidAlive`, defaulting to `realIsPidAlive`):
|
|
29
|
-
* ESRCH-only-means-dead, any ambiguous signal (EPERM, unknown) stays "alive"
|
|
30
|
-
* — never flag a live-but-unverifiable instance as vanished.
|
|
31
|
-
*/
|
|
32
|
-
export function detectVanishedInstances(registry, isPidAlive) {
|
|
33
|
-
return registry
|
|
34
|
-
.filter((entry) => !isPidAlive(entry.pid))
|
|
35
|
-
.map((entry) => ({
|
|
36
|
-
pid: entry.pid,
|
|
37
|
-
lastSeenAt: entry.heartbeatAt,
|
|
38
|
-
rssBytes: entry.rssBytes ?? 0,
|
|
39
|
-
}));
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* Log one `sessionstart.log` line per vanished instance found in `registry`.
|
|
43
|
-
* Best-effort (never throws into `session_start`) and read-only — this
|
|
44
|
-
* function never mutates or prunes the registry; that stays the reaper's job.
|
|
45
|
-
*/
|
|
46
|
-
export function logVanishedInstances(registry, isPidAlive = realIsPidAlive) {
|
|
47
|
-
try {
|
|
48
|
-
const vanished = detectVanishedInstances(registry, isPidAlive);
|
|
49
|
-
for (const instance of vanished) {
|
|
50
|
-
const rssMb = Math.round(instance.rssBytes / (1024 * 1024));
|
|
51
|
-
logSessionStart(`previous instance pid ${instance.pid} last seen ${instance.lastSeenAt} (RSS ${rssMb}MB) exited without shutdown`);
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
catch {
|
|
55
|
-
// best-effort observability — never fail session_start over this
|
|
56
|
-
}
|
|
57
|
-
}
|