@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,208 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Periodic memory-attribution sample (#1123 item 2, expanded on top of item 1's
|
|
3
|
-
* loop_block windowing — the #1126 sizing study's "instrumentation the next
|
|
4
|
-
* report should add" list is this module's requirements).
|
|
5
|
-
*
|
|
6
|
-
* The #1126 sizing study diagnosed a 1.37 GB instance from code + serialized
|
|
7
|
-
* artifacts alone, because nothing recorded a per-subsystem trajectory over
|
|
8
|
-
* time — the same detection-without-attribution gap loop_block had before
|
|
9
|
-
* #1122/#1125. This module answers "what is resident right now, broken down
|
|
10
|
-
* by subsystem" as a single ndjson `memory_sample` `latency.log` line, emitted
|
|
11
|
-
* every `MEMORY_SAMPLE_TURN_INTERVAL` turns (cheap enough not to need finer
|
|
12
|
-
* throttling).
|
|
13
|
-
*
|
|
14
|
-
* HARD CONSTRAINT: every field here is an O(1) `Map`/array `.size`/`.length`
|
|
15
|
-
* read, or a `process.memoryUsage()` call — nothing here iterates a large
|
|
16
|
-
* structure's contents, and nothing takes a heap snapshot. `PI_LENS_DEBUG_HEAP`
|
|
17
|
-
* (item 4's memory sibling) is a SEPARATE, explicitly opt-in mechanism, out of
|
|
18
|
-
* scope here.
|
|
19
|
-
*
|
|
20
|
-
* WASM linear-memory byte length gap (documented, not silently dropped): the
|
|
21
|
-
* #1126 spec asked for `Module.wasmMemory.buffer.byteLength` off the
|
|
22
|
-
* web-tree-sitter parser runtime. Inspecting the installed web-tree-sitter
|
|
23
|
-
* 0.25.10 package (see `clients/tree-sitter-client.ts#getRuntimeStats`'s
|
|
24
|
-
* docstring) confirmed that value is not reachable through any public export
|
|
25
|
-
* — only through package-internal reflection or by overriding Emscripten's
|
|
26
|
-
* `wasmMemory` module option with a hand-built `WebAssembly.Memory` (a
|
|
27
|
-
* stability risk for an observability-only feature, given a memory-import
|
|
28
|
-
* mismatch would break structural analysis entirely). `process.memoryUsage()`
|
|
29
|
-
* `arrayBuffers` is used as the process-wide proxy instead — WASM linear
|
|
30
|
-
* memory backs an ArrayBuffer, so it is already included there.
|
|
31
|
-
*/
|
|
32
|
-
import { countPostingEntries, estimateWordIndexStoreBytes, } from "./word-index-store.js";
|
|
33
|
-
import { getSharedTreeSitterClient } from "./tree-sitter-shared.js";
|
|
34
|
-
import { getReviewGraphWorkspaceCacheSnapshot } from "./review-graph/builder.js";
|
|
35
|
-
import { getDispatchCascadeCacheStats } from "./dispatch/integration.js";
|
|
36
|
-
import { getLspDocumentTextRetentionSnapshot } from "./lsp/client.js";
|
|
37
|
-
/** Every N turns, emit one `memory_sample` latency.log line (#1123 item 2). */
|
|
38
|
-
export const MEMORY_SAMPLE_TURN_INTERVAL = 10;
|
|
39
|
-
/** True on turn 10, 20, 30, ... — never on turn 0 (nothing meaningful is
|
|
40
|
-
* resident yet at session start). Pure so the cadence is unit-testable
|
|
41
|
-
* without driving a real turn loop. */
|
|
42
|
-
export function shouldEmitMemorySample(turnIndex) {
|
|
43
|
-
return turnIndex > 0 && turnIndex % MEMORY_SAMPLE_TURN_INTERVAL === 0;
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* Rising-edge cadence (#1999): when heapUsed grows more than
|
|
47
|
-
* {@link HEAP_GROWTH_TIGHTEN_RATIO} between two sampled turns, sampling
|
|
48
|
-
* tightens from every {@link MEMORY_SAMPLE_TURN_INTERVAL} turns to every turn
|
|
49
|
-
* until growth stabilizes. The state below is module-scoped SESSION state —
|
|
50
|
-
* reset it at every primary `session_start` via
|
|
51
|
-
* {@link resetMemorySamplerCadence} (defect shape 17: a process-lifetime latch
|
|
52
|
-
* holding a session-scoped signal).
|
|
53
|
-
*/
|
|
54
|
-
export const HEAP_GROWTH_TIGHTEN_RATIO = 1.2;
|
|
55
|
-
let _lastSampledHeapUsedBytes = 0;
|
|
56
|
-
let _tightenThroughTurn = 0;
|
|
57
|
-
/** Clear the rising-edge cadence state. Called on primary session_start. */
|
|
58
|
-
export function resetMemorySamplerCadence() {
|
|
59
|
-
_lastSampledHeapUsedBytes = 0;
|
|
60
|
-
_tightenThroughTurn = 0;
|
|
61
|
-
}
|
|
62
|
-
/** PURE: >20% heap growth between two sampled readings warrants tightening. */
|
|
63
|
-
export function isRapidHeapGrowth(previousHeapUsedBytes, currentHeapUsedBytes) {
|
|
64
|
-
return (previousHeapUsedBytes > 0 &&
|
|
65
|
-
currentHeapUsedBytes > previousHeapUsedBytes * HEAP_GROWTH_TIGHTEN_RATIO);
|
|
66
|
-
}
|
|
67
|
-
/** Record the heap reading of a sample just emitted at `turnIndex`. A rapid
|
|
68
|
-
* growth edge extends the tightened window through the NEXT turn; each
|
|
69
|
-
* subsequent still-growing sample (including one taken inside an already
|
|
70
|
-
* tightened window) extends it again, so the window naturally expires once
|
|
71
|
-
* growth stabilizes. Monotonic max so an out-of-order turn can never shrink
|
|
72
|
-
* the window. O(1). */
|
|
73
|
-
export function recordMemorySampleOutcome(heapUsedBytes, turnIndex) {
|
|
74
|
-
if (isRapidHeapGrowth(_lastSampledHeapUsedBytes, heapUsedBytes)) {
|
|
75
|
-
_tightenThroughTurn = Math.max(_tightenThroughTurn, turnIndex + 1);
|
|
76
|
-
}
|
|
77
|
-
_lastSampledHeapUsedBytes = heapUsedBytes;
|
|
78
|
-
}
|
|
79
|
-
/** Adaptive gate used by turn_end: base every-10 cadence OR an open tightened
|
|
80
|
-
* window. Pure w.r.t. its argument; the window itself is session state owned
|
|
81
|
-
* by {@link recordMemorySampleOutcome}. */
|
|
82
|
-
export function shouldEmitMemorySampleAdaptive(turnIndex) {
|
|
83
|
-
if (turnIndex <= 0)
|
|
84
|
-
return false;
|
|
85
|
-
return (turnIndex % MEMORY_SAMPLE_TURN_INTERVAL === 0 ||
|
|
86
|
-
turnIndex <= _tightenThroughTurn);
|
|
87
|
-
}
|
|
88
|
-
/** PURE: reshape Node's `process.memoryUsage()` (+ optional
|
|
89
|
-
* `process.resourceUsage()`) into this module's field names — testable
|
|
90
|
-
* without touching the real process. */
|
|
91
|
-
export function toMemoryProcessUsage(mem, resourceUsage) {
|
|
92
|
-
const maxKb = resourceUsage?.maxRSS;
|
|
93
|
-
return {
|
|
94
|
-
rssBytes: mem.rss,
|
|
95
|
-
heapUsedBytes: mem.heapUsed,
|
|
96
|
-
heapTotalBytes: mem.heapTotal,
|
|
97
|
-
externalBytes: mem.external,
|
|
98
|
-
arrayBuffersBytes: mem.arrayBuffers,
|
|
99
|
-
peakWorkingSetBytes: typeof maxKb === "number" && Number.isFinite(maxKb) && maxKb > 0
|
|
100
|
-
? maxKb * 1024
|
|
101
|
-
: null,
|
|
102
|
-
};
|
|
103
|
-
}
|
|
104
|
-
/**
|
|
105
|
-
* Live O(1)/O(bounded-cache-size) subsystem counters. Impure (reads
|
|
106
|
-
* process-global singletons) but every individual read is a `.size`/`.length`
|
|
107
|
-
* access — see the module docstring's hard constraint.
|
|
108
|
-
*/
|
|
109
|
-
/** Byte attribution for `dispatchCaches`, from measured per-entry costs: three
|
|
110
|
-
* isolated-store runs put a recently-clean neighbor entry at 320 bytes, and
|
|
111
|
-
* #2282 measured a 500-file batch's 1,000 session-fact entries at 439,560
|
|
112
|
-
* bytes (~440 each). O(1) — the cache key and Map bookkeeping are included. */
|
|
113
|
-
export function estimateDispatchCacheBytes(stats) {
|
|
114
|
-
return (stats.recentlyCleanNeighborCacheSize * 320 + stats.sessionFactEntries * 440);
|
|
115
|
-
}
|
|
116
|
-
export function collectMemorySampleSubsystems(wordIndex) {
|
|
117
|
-
const reviewGraph = getReviewGraphWorkspaceCacheSnapshot();
|
|
118
|
-
const treeSitterClient = getSharedTreeSitterClient();
|
|
119
|
-
const treeSitter = treeSitterClient
|
|
120
|
-
? (() => {
|
|
121
|
-
const runtimeStats = treeSitterClient.getRuntimeStats();
|
|
122
|
-
const cacheStats = treeSitterClient.getParseCacheStats();
|
|
123
|
-
return {
|
|
124
|
-
...runtimeStats,
|
|
125
|
-
treeCacheSize: cacheStats.size,
|
|
126
|
-
treeCacheMaxSize: cacheStats.maxSize,
|
|
127
|
-
treeCacheTotalBytes: cacheStats.totalBytes,
|
|
128
|
-
};
|
|
129
|
-
})()
|
|
130
|
-
: null;
|
|
131
|
-
const dispatchCaches = getDispatchCascadeCacheStats();
|
|
132
|
-
return {
|
|
133
|
-
lsp: (() => {
|
|
134
|
-
const retention = getLspDocumentTextRetentionSnapshot();
|
|
135
|
-
return {
|
|
136
|
-
clients: retention.clients,
|
|
137
|
-
clientRoots: retention.roots,
|
|
138
|
-
incrementalTextEntries: retention.entries,
|
|
139
|
-
incrementalTextBytes: retention.bytes,
|
|
140
|
-
};
|
|
141
|
-
})(),
|
|
142
|
-
reviewGraph,
|
|
143
|
-
wordIndex: wordIndex
|
|
144
|
-
? {
|
|
145
|
-
docs: wordIndex.docLengths.size,
|
|
146
|
-
fileTable: wordIndex.fileTable.size,
|
|
147
|
-
postings: wordIndex.postings.size,
|
|
148
|
-
// O(distinct tokens), reading only `.length`/`.byteLength` per
|
|
149
|
-
// list — no posting ELEMENT is touched, so this stays inside the
|
|
150
|
-
// module docstring’s bounded-read constraint.
|
|
151
|
-
postingEntries: countPostingEntries(wordIndex),
|
|
152
|
-
residentBytes: estimateWordIndexStoreBytes(wordIndex),
|
|
153
|
-
forwardEntries: wordIndex.forward?.size ?? 0,
|
|
154
|
-
}
|
|
155
|
-
: null,
|
|
156
|
-
treeSitter,
|
|
157
|
-
dispatchCaches: {
|
|
158
|
-
...dispatchCaches,
|
|
159
|
-
estimatedBytes: estimateDispatchCacheBytes(dispatchCaches),
|
|
160
|
-
},
|
|
161
|
-
};
|
|
162
|
-
}
|
|
163
|
-
/** Assemble one full sample. `mem` is injectable for tests; defaults to a
|
|
164
|
-
* live `process.memoryUsage()` read. `resourceUsage` (peak working set) and
|
|
165
|
-
* `session` are optional ridealongs (#1999); when `resourceUsage` is omitted
|
|
166
|
-
* a live `process.resourceUsage()` read supplies the peak. */
|
|
167
|
-
export function buildMemorySample(wordIndex, mem = process.memoryUsage(), resourceUsage, session) {
|
|
168
|
-
let resolvedResourceUsage = resourceUsage;
|
|
169
|
-
if (!resolvedResourceUsage) {
|
|
170
|
-
try {
|
|
171
|
-
resolvedResourceUsage = process.resourceUsage();
|
|
172
|
-
}
|
|
173
|
-
catch {
|
|
174
|
-
resolvedResourceUsage = undefined;
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
return {
|
|
178
|
-
process: toMemoryProcessUsage(mem, resolvedResourceUsage),
|
|
179
|
-
subsystems: collectMemorySampleSubsystems(wordIndex),
|
|
180
|
-
session,
|
|
181
|
-
};
|
|
182
|
-
}
|
|
183
|
-
const toMb = (bytes) => Math.round(bytes / (1024 * 1024));
|
|
184
|
-
/**
|
|
185
|
-
* PURE: one compact `/lens-health` line reusing the same sample the periodic
|
|
186
|
-
* latency.log emitter builds — RSS + heap/external, plus the two subsystem
|
|
187
|
-
* numbers most useful for spotting an attribution outlier at a glance: the
|
|
188
|
-
* tree-sitter tree-cache byte total (the only subsystem counter here that is
|
|
189
|
-
* ALREADY in bytes, so it's directly comparable to RSS) and the review-graph
|
|
190
|
-
* node/edge counts (the multiple-graph-copies question #1126 called out).
|
|
191
|
-
* Follows #1125's health-line style (a single summary line, no per-subsystem
|
|
192
|
-
* breakdown table — that's what latency.log's `memory_sample` is for).
|
|
193
|
-
*/
|
|
194
|
-
export function formatMemoryHealthLine(sample) {
|
|
195
|
-
const { process: proc, subsystems } = sample;
|
|
196
|
-
const treeCache = subsystems.treeSitter
|
|
197
|
-
? `${toMb(subsystems.treeSitter.treeCacheTotalBytes)}MB (${subsystems.treeSitter.treeCacheSize} trees)`
|
|
198
|
-
: "n/a";
|
|
199
|
-
const graph = `${subsystems.reviewGraph.totalNodes}n/${subsystems.reviewGraph.totalEdges}e (${subsystems.reviewGraph.cacheEntries} cwd)`;
|
|
200
|
-
// #1999: peak WS rides along when known — rss far below peak means the
|
|
201
|
-
// periodic samples are catching idle valleys, not the true high-water mark.
|
|
202
|
-
const peak = proc.peakWorkingSetBytes !== null
|
|
203
|
-
? ` · peak WS ${toMb(proc.peakWorkingSetBytes)}MB`
|
|
204
|
-
: "";
|
|
205
|
-
return (`Memory: RSS ${toMb(proc.rssBytes)}MB · heap ${toMb(proc.heapUsedBytes)}/${toMb(proc.heapTotalBytes)}MB` +
|
|
206
|
-
` · external ${toMb(proc.externalBytes)}MB${peak}` +
|
|
207
|
-
` · tree-sitter cache ${treeCache} · review-graph ${graph}`);
|
|
208
|
-
}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
/** Session-local attribution captured before a stale message_end can drain. */
|
|
2
|
-
let lastStableSessionId;
|
|
3
|
-
let previousSessionId;
|
|
4
|
-
/** Remember the stable id used by a live message_end's own cache row. */
|
|
5
|
-
export function noteLiveMessageEndSessionId(sessionId) {
|
|
6
|
-
lastStableSessionId = sessionId;
|
|
7
|
-
}
|
|
8
|
-
/** Return the newest usable id for a stale message_end attribution. */
|
|
9
|
-
export function getLastLiveMessageEndSessionId() {
|
|
10
|
-
return lastStableSessionId ?? previousSessionId;
|
|
11
|
-
}
|
|
12
|
-
/**
|
|
13
|
-
* Rotate the attribution anchor at the real session boundary. A queued stale
|
|
14
|
-
* message_end from the session being replaced may drain after this boundary,
|
|
15
|
-
* so retain exactly one prior anchor while making room for the replacement.
|
|
16
|
-
*/
|
|
17
|
-
export function rotateMessageEndAttribution() {
|
|
18
|
-
// Keep the prior anchor when no live message_end arrived this session:
|
|
19
|
-
// two back-to-back boundaries (reload/resume re-announcing) must not
|
|
20
|
-
// erase the only id a still-queued stale drain can use (#1956 R10).
|
|
21
|
-
if (lastStableSessionId !== undefined) {
|
|
22
|
-
previousSessionId = lastStableSessionId;
|
|
23
|
-
}
|
|
24
|
-
lastStableSessionId = undefined;
|
|
25
|
-
}
|
|
26
|
-
/** Full reset seam used by the session-state registry and test isolation. */
|
|
27
|
-
export function resetMessageEndAttribution() {
|
|
28
|
-
lastStableSessionId = undefined;
|
|
29
|
-
previousSessionId = undefined;
|
|
30
|
-
}
|
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Silent Metrics Client for pi-lens
|
|
3
|
-
*
|
|
4
|
-
* Tracks code quality metrics silently during the session.
|
|
5
|
-
* Metrics are aggregated and shown in session summary only.
|
|
6
|
-
*
|
|
7
|
-
* Tracks:
|
|
8
|
-
* - Code Entropy: Shannon entropy delta per file
|
|
9
|
-
*
|
|
10
|
-
* These are observational metrics — they inform the human in session summary,
|
|
11
|
-
* they don't gate or interrupt the agent mid-task.
|
|
12
|
-
*/
|
|
13
|
-
import { createSubsystemLogger } from "./extension-log.js";
|
|
14
|
-
import * as fs from "node:fs";
|
|
15
|
-
import * as path from "node:path";
|
|
16
|
-
// --- Client ---
|
|
17
|
-
export class MetricsClient {
|
|
18
|
-
log;
|
|
19
|
-
fileBaselines = new Map();
|
|
20
|
-
constructor(verbose = false) {
|
|
21
|
-
this.log = verbose ? createSubsystemLogger("metrics") : () => { };
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Record initial state of a file when first touched this session
|
|
25
|
-
*/
|
|
26
|
-
recordBaseline(filePath) {
|
|
27
|
-
const absolutePath = path.resolve(filePath);
|
|
28
|
-
if (!fs.existsSync(absolutePath))
|
|
29
|
-
return;
|
|
30
|
-
if (this.fileBaselines.has(absolutePath))
|
|
31
|
-
return; // Already recorded
|
|
32
|
-
const content = fs.readFileSync(absolutePath, "utf-8");
|
|
33
|
-
const entropy = this.calculateEntropy(content);
|
|
34
|
-
this.fileBaselines.set(absolutePath, { content, entropy });
|
|
35
|
-
this.log(`Baseline recorded: ${path.basename(filePath)} (entropy: ${entropy.toFixed(2)})`);
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* Get metrics for a specific file
|
|
39
|
-
*/
|
|
40
|
-
getFileMetrics(filePath) {
|
|
41
|
-
const absolutePath = path.resolve(filePath);
|
|
42
|
-
const baseline = this.fileBaselines.get(absolutePath);
|
|
43
|
-
if (!baseline)
|
|
44
|
-
return null;
|
|
45
|
-
if (!fs.existsSync(absolutePath))
|
|
46
|
-
return null;
|
|
47
|
-
const currentContent = fs.readFileSync(absolutePath, "utf-8");
|
|
48
|
-
const totalLines = currentContent.split("\n").length;
|
|
49
|
-
const entropyCurrent = this.calculateEntropy(currentContent);
|
|
50
|
-
const entropyDelta = entropyCurrent - baseline.entropy;
|
|
51
|
-
return {
|
|
52
|
-
filePath: path.relative(process.cwd(), absolutePath),
|
|
53
|
-
totalLines,
|
|
54
|
-
entropyStart: baseline.entropy,
|
|
55
|
-
entropyCurrent,
|
|
56
|
-
entropyDelta,
|
|
57
|
-
};
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* Get entropy delta for all touched files
|
|
61
|
-
*/
|
|
62
|
-
getEntropyDeltas() {
|
|
63
|
-
const results = [];
|
|
64
|
-
for (const [filePath, baseline] of this.fileBaselines) {
|
|
65
|
-
if (!fs.existsSync(filePath))
|
|
66
|
-
continue;
|
|
67
|
-
const content = fs.readFileSync(filePath, "utf-8");
|
|
68
|
-
const current = this.calculateEntropy(content);
|
|
69
|
-
const delta = current - baseline.entropy;
|
|
70
|
-
results.push({
|
|
71
|
-
file: path.relative(process.cwd(), filePath),
|
|
72
|
-
start: baseline.entropy,
|
|
73
|
-
current,
|
|
74
|
-
delta,
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
|
-
return results.sort((a, b) => Math.abs(b.delta) - Math.abs(a.delta));
|
|
78
|
-
}
|
|
79
|
-
/**
|
|
80
|
-
* Calculate Shannon entropy of a string
|
|
81
|
-
* Returns bits per character
|
|
82
|
-
*/
|
|
83
|
-
calculateEntropy(text) {
|
|
84
|
-
if (text.length === 0)
|
|
85
|
-
return 0;
|
|
86
|
-
const freq = new Map();
|
|
87
|
-
for (const char of text) {
|
|
88
|
-
freq.set(char, (freq.get(char) || 0) + 1);
|
|
89
|
-
}
|
|
90
|
-
let entropy = 0;
|
|
91
|
-
const len = text.length;
|
|
92
|
-
for (const count of freq.values()) {
|
|
93
|
-
const p = count / len;
|
|
94
|
-
if (p > 0) {
|
|
95
|
-
entropy -= p * Math.log2(p);
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
return entropy;
|
|
99
|
-
}
|
|
100
|
-
/**
|
|
101
|
-
* Reset session state (for new session)
|
|
102
|
-
*/
|
|
103
|
-
reset() {
|
|
104
|
-
this.fileBaselines.clear();
|
|
105
|
-
this.log("Session metrics reset");
|
|
106
|
-
}
|
|
107
|
-
}
|
|
@@ -1,327 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Metrics History Tracker for pi-lens
|
|
3
|
-
*
|
|
4
|
-
* Persists complexity metrics per commit to track trends over time.
|
|
5
|
-
* Captures snapshots passively (session start) and explicitly (/lens-metrics).
|
|
6
|
-
*
|
|
7
|
-
* Storage: <project-data>/metrics-history.json
|
|
8
|
-
*/
|
|
9
|
-
import { execSync } from "node:child_process";
|
|
10
|
-
import * as fs from "node:fs";
|
|
11
|
-
import * as path from "node:path";
|
|
12
|
-
import { getProjectDataDir } from "./file-utils.js";
|
|
13
|
-
import { writeFileAtomic } from "./atomic-write.js";
|
|
14
|
-
// --- Constants ---
|
|
15
|
-
const HISTORY_FILE = "metrics-history.json";
|
|
16
|
-
const MAX_HISTORY_PER_FILE = 20;
|
|
17
|
-
// --- Git Helpers ---
|
|
18
|
-
/**
|
|
19
|
-
* Check whether cwd is inside a Git worktree.
|
|
20
|
-
*/
|
|
21
|
-
function isInsideGitRepo(startDir) {
|
|
22
|
-
let dir = path.resolve(startDir);
|
|
23
|
-
while (true) {
|
|
24
|
-
if (fs.existsSync(path.join(dir, ".git"))) {
|
|
25
|
-
return true;
|
|
26
|
-
}
|
|
27
|
-
const parent = path.dirname(dir);
|
|
28
|
-
if (parent === dir)
|
|
29
|
-
break;
|
|
30
|
-
dir = parent;
|
|
31
|
-
}
|
|
32
|
-
return false;
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Get current git commit hash (short)
|
|
36
|
-
*/
|
|
37
|
-
function getCurrentCommit(startDir) {
|
|
38
|
-
const repoStartDir = path.resolve(startDir);
|
|
39
|
-
if (!isInsideGitRepo(repoStartDir)) {
|
|
40
|
-
return "unknown";
|
|
41
|
-
}
|
|
42
|
-
let spawnDir = repoStartDir;
|
|
43
|
-
while (!fs.existsSync(spawnDir)) {
|
|
44
|
-
const parent = path.dirname(spawnDir);
|
|
45
|
-
if (parent === spawnDir)
|
|
46
|
-
return "unknown";
|
|
47
|
-
spawnDir = parent;
|
|
48
|
-
}
|
|
49
|
-
try {
|
|
50
|
-
// #2095: execSync inherits the child's stderr to THIS process by
|
|
51
|
-
// default (only stdout is captured for the return value), so a
|
|
52
|
-
// failing `git rev-parse` prints its raw "fatal: ..." line straight
|
|
53
|
-
// into the pi TUI — the catch below only ever sees the thrown
|
|
54
|
-
// non-zero-exit error, never the already-inherited stream. The
|
|
55
|
-
// explicit stdio array pipes stderr instead, so a failure is fully
|
|
56
|
-
// contained: silent here, same as the "unknown" fallback it feeds.
|
|
57
|
-
return execSync("git rev-parse --short HEAD", {
|
|
58
|
-
encoding: "utf-8",
|
|
59
|
-
timeout: 5000,
|
|
60
|
-
stdio: ["ignore", "pipe", "ignore"],
|
|
61
|
-
cwd: spawnDir,
|
|
62
|
-
}).trim();
|
|
63
|
-
}
|
|
64
|
-
catch {
|
|
65
|
-
return "unknown";
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
// --- History Management ---
|
|
69
|
-
/**
|
|
70
|
-
* Load history from disk (or return empty)
|
|
71
|
-
*/
|
|
72
|
-
export function loadHistory() {
|
|
73
|
-
const historyPath = path.join(getProjectDataDir(process.cwd()), HISTORY_FILE);
|
|
74
|
-
if (!fs.existsSync(historyPath)) {
|
|
75
|
-
return {
|
|
76
|
-
version: 1,
|
|
77
|
-
files: {},
|
|
78
|
-
capturedAt: new Date().toISOString(),
|
|
79
|
-
};
|
|
80
|
-
}
|
|
81
|
-
try {
|
|
82
|
-
const content = fs.readFileSync(historyPath, "utf-8");
|
|
83
|
-
return JSON.parse(content);
|
|
84
|
-
}
|
|
85
|
-
catch {
|
|
86
|
-
return {
|
|
87
|
-
version: 1,
|
|
88
|
-
files: {},
|
|
89
|
-
capturedAt: new Date().toISOString(),
|
|
90
|
-
};
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
/**
|
|
94
|
-
* Save history to disk
|
|
95
|
-
*/
|
|
96
|
-
function saveHistory(history) {
|
|
97
|
-
const historyDir = getProjectDataDir(process.cwd());
|
|
98
|
-
if (!fs.existsSync(historyDir)) {
|
|
99
|
-
fs.mkdirSync(historyDir, { recursive: true });
|
|
100
|
-
}
|
|
101
|
-
history.capturedAt = new Date().toISOString();
|
|
102
|
-
const historyPath = path.join(historyDir, "metrics-history.json");
|
|
103
|
-
writeFileAtomic(historyPath, JSON.stringify(history, null, 2));
|
|
104
|
-
}
|
|
105
|
-
// In-memory cache to avoid loading/saving on every capture
|
|
106
|
-
let pendingHistory = null;
|
|
107
|
-
let saveTimer = null;
|
|
108
|
-
const SAVE_DEBOUNCE_MS = 5000; // Save at most every 5 seconds
|
|
109
|
-
/**
|
|
110
|
-
* Capture a snapshot for a file's current metrics
|
|
111
|
-
* Auto-saves to disk (debounced) for passive tracking
|
|
112
|
-
*/
|
|
113
|
-
export function captureSnapshot(filePath, metrics) {
|
|
114
|
-
// Use in-memory cache if available, otherwise load from disk
|
|
115
|
-
if (!pendingHistory) {
|
|
116
|
-
pendingHistory = loadHistory();
|
|
117
|
-
}
|
|
118
|
-
const relativePath = path.relative(process.cwd(), filePath);
|
|
119
|
-
const commit = getCurrentCommit(path.dirname(filePath));
|
|
120
|
-
const snapshot = {
|
|
121
|
-
commit,
|
|
122
|
-
timestamp: new Date().toISOString(),
|
|
123
|
-
mi: Math.round(metrics.maintainabilityIndex * 10) / 10,
|
|
124
|
-
cognitive: metrics.cognitiveComplexity,
|
|
125
|
-
nesting: metrics.maxNestingDepth,
|
|
126
|
-
lines: metrics.linesOfCode,
|
|
127
|
-
maxCyclomatic: metrics.maxCyclomatic,
|
|
128
|
-
entropy: Math.round(metrics.entropy * 100) / 100,
|
|
129
|
-
};
|
|
130
|
-
const existing = pendingHistory.files[relativePath];
|
|
131
|
-
if (existing) {
|
|
132
|
-
// Skip if same commit + same MI (no change worth recording)
|
|
133
|
-
const latest = existing.latest;
|
|
134
|
-
if (latest.commit === commit && latest.mi === snapshot.mi) {
|
|
135
|
-
return;
|
|
136
|
-
}
|
|
137
|
-
// Append to history (cap at MAX_HISTORY_PER_FILE)
|
|
138
|
-
existing.history.push(snapshot);
|
|
139
|
-
if (existing.history.length > MAX_HISTORY_PER_FILE) {
|
|
140
|
-
existing.history = existing.history.slice(-MAX_HISTORY_PER_FILE);
|
|
141
|
-
}
|
|
142
|
-
existing.latest = snapshot;
|
|
143
|
-
existing.trend = computeTrend(existing.history);
|
|
144
|
-
}
|
|
145
|
-
else {
|
|
146
|
-
// New file
|
|
147
|
-
pendingHistory.files[relativePath] = {
|
|
148
|
-
latest: snapshot,
|
|
149
|
-
history: [snapshot],
|
|
150
|
-
trend: "stable",
|
|
151
|
-
};
|
|
152
|
-
}
|
|
153
|
-
// Debounced save to disk
|
|
154
|
-
if (saveTimer)
|
|
155
|
-
clearTimeout(saveTimer);
|
|
156
|
-
saveTimer = setTimeout(() => {
|
|
157
|
-
if (pendingHistory) {
|
|
158
|
-
saveHistory(pendingHistory);
|
|
159
|
-
pendingHistory = null;
|
|
160
|
-
}
|
|
161
|
-
}, SAVE_DEBOUNCE_MS);
|
|
162
|
-
saveTimer.unref?.();
|
|
163
|
-
}
|
|
164
|
-
// --- Trend Analysis ---
|
|
165
|
-
/**
|
|
166
|
-
* Compute trend direction from history snapshots
|
|
167
|
-
* Uses last 3 snapshots for stability (or 2 if only 2 available)
|
|
168
|
-
*/
|
|
169
|
-
function computeTrend(history) {
|
|
170
|
-
if (history.length < 2)
|
|
171
|
-
return "stable";
|
|
172
|
-
const recent = history.slice(-3);
|
|
173
|
-
const first = recent[0];
|
|
174
|
-
const last = recent[recent.length - 1];
|
|
175
|
-
// Use MI as primary indicator, cognitive as secondary
|
|
176
|
-
const miDelta = last.mi - first.mi;
|
|
177
|
-
const cogDelta = last.cognitive - first.cognitive;
|
|
178
|
-
// Thresholds (MI changes < 2 are noise)
|
|
179
|
-
if (miDelta > 2)
|
|
180
|
-
return "improving";
|
|
181
|
-
if (miDelta < -2)
|
|
182
|
-
return "regressing";
|
|
183
|
-
// If MI is stable, check cognitive
|
|
184
|
-
if (cogDelta < -10)
|
|
185
|
-
return "improving";
|
|
186
|
-
if (cogDelta > 10)
|
|
187
|
-
return "regressing";
|
|
188
|
-
return "stable";
|
|
189
|
-
}
|
|
190
|
-
// --- Technical Debt Index (TDI) ---
|
|
191
|
-
// Test-reached through a child-process `require` string
|
|
192
|
-
/** @public — reached through a child-process `require` string in tests/clients/metrics-history-stderr.test.ts; knip cannot see it. */
|
|
193
|
-
export function captureSnapshots(files) {
|
|
194
|
-
const history = loadHistory();
|
|
195
|
-
for (const file of files) {
|
|
196
|
-
const relativePath = path.relative(process.cwd(), file.filePath);
|
|
197
|
-
const commit = getCurrentCommit(path.dirname(file.filePath));
|
|
198
|
-
const snapshot = {
|
|
199
|
-
commit,
|
|
200
|
-
timestamp: new Date().toISOString(),
|
|
201
|
-
mi: Math.round(file.metrics.maintainabilityIndex * 10) / 10,
|
|
202
|
-
cognitive: file.metrics.cognitiveComplexity,
|
|
203
|
-
nesting: file.metrics.maxNestingDepth,
|
|
204
|
-
lines: file.metrics.linesOfCode,
|
|
205
|
-
maxCyclomatic: file.metrics.maxCyclomatic,
|
|
206
|
-
entropy: Math.round(file.metrics.entropy * 100) / 100,
|
|
207
|
-
};
|
|
208
|
-
const existing = history.files[relativePath];
|
|
209
|
-
if (existing) {
|
|
210
|
-
existing.history.push(snapshot);
|
|
211
|
-
if (existing.history.length > MAX_HISTORY_PER_FILE) {
|
|
212
|
-
existing.history = existing.history.slice(-MAX_HISTORY_PER_FILE);
|
|
213
|
-
}
|
|
214
|
-
existing.latest = snapshot;
|
|
215
|
-
existing.trend = computeTrend(existing.history);
|
|
216
|
-
}
|
|
217
|
-
else {
|
|
218
|
-
history.files[relativePath] = {
|
|
219
|
-
latest: snapshot,
|
|
220
|
-
history: [snapshot],
|
|
221
|
-
trend: "stable",
|
|
222
|
-
};
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
saveHistory(history);
|
|
226
|
-
return history;
|
|
227
|
-
}
|
|
228
|
-
/**
|
|
229
|
-
* Calculate Technical Debt Index for the project.
|
|
230
|
-
* Score: 0 = perfect, 100 = maximum debt.
|
|
231
|
-
*/
|
|
232
|
-
export function computeTDI(history) {
|
|
233
|
-
const files = Object.values(history.files);
|
|
234
|
-
if (files.length === 0) {
|
|
235
|
-
return {
|
|
236
|
-
score: 0,
|
|
237
|
-
grade: "N/A",
|
|
238
|
-
avgMI: 100,
|
|
239
|
-
totalCognitive: 0,
|
|
240
|
-
filesAnalyzed: 0,
|
|
241
|
-
filesWithDebt: 0,
|
|
242
|
-
byCategory: {
|
|
243
|
-
maintainability: 0,
|
|
244
|
-
cognitive: 0,
|
|
245
|
-
nesting: 0,
|
|
246
|
-
maxCyclomatic: 0,
|
|
247
|
-
entropy: 0,
|
|
248
|
-
},
|
|
249
|
-
};
|
|
250
|
-
}
|
|
251
|
-
let totalMI = 0;
|
|
252
|
-
let totalCognitive = 0;
|
|
253
|
-
let _totalNesting = 0;
|
|
254
|
-
let filesWithDebt = 0;
|
|
255
|
-
let debtFromMI = 0;
|
|
256
|
-
let debtFromCognitive = 0;
|
|
257
|
-
let debtFromNesting = 0;
|
|
258
|
-
let debtFromMaxCyclomatic = 0; // NEW
|
|
259
|
-
let debtFromEntropy = 0; // NEW
|
|
260
|
-
for (const file of files) {
|
|
261
|
-
const snap = file.latest;
|
|
262
|
-
totalMI += snap.mi;
|
|
263
|
-
totalCognitive += snap.cognitive;
|
|
264
|
-
_totalNesting += snap.nesting;
|
|
265
|
-
// Accumulate debt points
|
|
266
|
-
let fileDebt = 0;
|
|
267
|
-
// MI debt: 0 at MI=100, max at MI=0
|
|
268
|
-
const miDebt = Math.max(0, (100 - snap.mi) / 100);
|
|
269
|
-
debtFromMI += miDebt;
|
|
270
|
-
// Cognitive debt: 0 at 0, max at 500+
|
|
271
|
-
const cogDebt = Math.min(1, snap.cognitive / 200);
|
|
272
|
-
debtFromCognitive += cogDebt;
|
|
273
|
-
// Nesting debt: 0 at 1-3, max at 10+
|
|
274
|
-
const nestDebt = Math.min(1, Math.max(0, snap.nesting - 3) / 7);
|
|
275
|
-
debtFromNesting += nestDebt;
|
|
276
|
-
// Max Cyclomatic debt: 0 at max<=10, 1 at max>=30
|
|
277
|
-
const maxCycDebt = Math.min(1, Math.max(0, snap.maxCyclomatic - 10) / 20);
|
|
278
|
-
debtFromMaxCyclomatic += maxCycDebt;
|
|
279
|
-
// Entropy debt: 0 at entropy<=4.0, 1 at entropy>=7.0
|
|
280
|
-
const entropyDebt = Math.min(1, Math.max(0, snap.entropy - 4.0) / 3.0);
|
|
281
|
-
debtFromEntropy += entropyDebt;
|
|
282
|
-
fileDebt = miDebt + cogDebt + nestDebt + maxCycDebt + entropyDebt;
|
|
283
|
-
if (fileDebt > 0.5)
|
|
284
|
-
filesWithDebt++; // Lowered threshold since we have more factors
|
|
285
|
-
}
|
|
286
|
-
const avgMI = totalMI / files.length;
|
|
287
|
-
// Normalize to 0-100 scale
|
|
288
|
-
const avgMIDebt = debtFromMI / files.length; // 0-1
|
|
289
|
-
const avgCogDebt = debtFromCognitive / files.length; // 0-1
|
|
290
|
-
const avgNestDebt = debtFromNesting / files.length; // 0-1
|
|
291
|
-
const avgMaxCycDebt = debtFromMaxCyclomatic / files.length; // NEW
|
|
292
|
-
const avgEntropyDebt = debtFromEntropy / files.length; // NEW
|
|
293
|
-
// Weighted: MI (45%), cognitive (30%), nesting (10%), maxCyc (10%), entropy (5%)
|
|
294
|
-
const rawScore = avgMIDebt * 45 +
|
|
295
|
-
avgCogDebt * 30 +
|
|
296
|
-
avgNestDebt * 10 +
|
|
297
|
-
avgMaxCycDebt * 10 +
|
|
298
|
-
avgEntropyDebt * 5;
|
|
299
|
-
const score = Math.round(rawScore * 100) / 100;
|
|
300
|
-
// Grade
|
|
301
|
-
let grade;
|
|
302
|
-
if (score <= 15)
|
|
303
|
-
grade = "A";
|
|
304
|
-
else if (score <= 30)
|
|
305
|
-
grade = "B";
|
|
306
|
-
else if (score <= 50)
|
|
307
|
-
grade = "C";
|
|
308
|
-
else if (score <= 70)
|
|
309
|
-
grade = "D";
|
|
310
|
-
else
|
|
311
|
-
grade = "F";
|
|
312
|
-
return {
|
|
313
|
-
score,
|
|
314
|
-
grade,
|
|
315
|
-
avgMI: Math.round(avgMI * 10) / 10,
|
|
316
|
-
totalCognitive,
|
|
317
|
-
filesAnalyzed: files.length,
|
|
318
|
-
filesWithDebt,
|
|
319
|
-
byCategory: {
|
|
320
|
-
maintainability: Math.round(avgMIDebt * 100),
|
|
321
|
-
cognitive: Math.round(avgCogDebt * 100),
|
|
322
|
-
nesting: Math.round(avgNestDebt * 100),
|
|
323
|
-
maxCyclomatic: Math.round(avgMaxCycDebt * 100),
|
|
324
|
-
entropy: Math.round(avgEntropyDebt * 100),
|
|
325
|
-
},
|
|
326
|
-
};
|
|
327
|
-
}
|