@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,504 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Terminal-safe diagnostic sink for the in-pi extension path (#1333).
|
|
3
|
-
*
|
|
4
|
-
* pi owns the terminal: it runs the TTY in raw mode and repaints with
|
|
5
|
-
* cursor-addressed diffs, so ANY byte an extension writes to stdout/stderr
|
|
6
|
-
* lands mid-frame and desyncs pi's model of the screen — the layout stays
|
|
7
|
-
* broken until a full repaint. `clients/`, `tools/`, `index.ts` and `i18n.ts`
|
|
8
|
-
* are all reachable from the extension entry, so none of them may call
|
|
9
|
-
* `console.*` or `process.std*.write`. (`mcp/`, `scripts/` and `bin/` DO own
|
|
10
|
-
* their stdout contract and keep their writes.)
|
|
11
|
-
*
|
|
12
|
-
* This module is the general-purpose replacement sink: one `createNdjsonLogger`
|
|
13
|
-
* instance over `<global pi-lens dir>/extension.log`, per the single-writer
|
|
14
|
-
* invariant in AGENTS.md. Subsystems that already own a log (tree-sitter,
|
|
15
|
-
* review-graph, cascade, latency, sessionstart) route to THAT log instead —
|
|
16
|
-
* this file is for the areas that had no sink at all.
|
|
17
|
-
*
|
|
18
|
-
* Three-channels rule (#482/#484/#485): everything written here is
|
|
19
|
-
* LOG-audience. A genuinely user-facing degradation must ALSO reach the human
|
|
20
|
-
* through the host's own render path (`ctx.ui.notify` / a display-only session
|
|
21
|
-
* entry) — never a raw write.
|
|
22
|
-
*/
|
|
23
|
-
import { AsyncLocalStorage } from "node:async_hooks";
|
|
24
|
-
import * as path from "node:path";
|
|
25
|
-
import { isTestMode } from "./env-utils.js";
|
|
26
|
-
import { getGlobalPiLensLogDir } from "./probe-home-state.js";
|
|
27
|
-
import { getMaxLogSizeMB } from "./log-cleanup.js";
|
|
28
|
-
import { createNdjsonLogger } from "./ndjson-logger.js";
|
|
29
|
-
import { getTurnId } from "./turn-context.js";
|
|
30
|
-
export const EXTENSION_LOG_FILE = path.join(getGlobalPiLensLogDir(), "extension.log");
|
|
31
|
-
const writer = createNdjsonLogger({
|
|
32
|
-
filePath: EXTENSION_LOG_FILE,
|
|
33
|
-
maxBytes: getMaxLogSizeMB() * 1024 * 1024,
|
|
34
|
-
});
|
|
35
|
-
export function logExtension(entry) {
|
|
36
|
-
if (isTestMode())
|
|
37
|
-
return;
|
|
38
|
-
writer.log({
|
|
39
|
-
ts: new Date().toISOString(),
|
|
40
|
-
pid: process.pid,
|
|
41
|
-
turnId: getTurnId(),
|
|
42
|
-
level: entry.level ?? "error",
|
|
43
|
-
subsystem: entry.subsystem,
|
|
44
|
-
message: entry.message,
|
|
45
|
-
...(entry.metadata ? { metadata: entry.metadata } : {}),
|
|
46
|
-
});
|
|
47
|
-
}
|
|
48
|
-
export function createSubsystemLogger(subsystem, defaultLevel = "debug") {
|
|
49
|
-
const at = (level) => (message, metadata) => {
|
|
50
|
-
logExtension({ subsystem, message, level, metadata });
|
|
51
|
-
};
|
|
52
|
-
const logger = at(defaultLevel);
|
|
53
|
-
logger.error = at("error");
|
|
54
|
-
logger.warn = at("warn");
|
|
55
|
-
logger.debug = at("debug");
|
|
56
|
-
return logger;
|
|
57
|
-
}
|
|
58
|
-
/** No-op with the `SubsystemLogger` shape, for the verbose-off branch. */
|
|
59
|
-
export function noopSubsystemLogger() {
|
|
60
|
-
// SAFETY: `SubsystemLogger` is a callable with `error`/`warn`/`debug`
|
|
61
|
-
// properties. TypeScript cannot type a function literal that gains its
|
|
62
|
-
// properties on the following lines, so the cast runs ahead of the three
|
|
63
|
-
// assignments that complete the shape. Every member of the interface is
|
|
64
|
-
// assigned before `noop` escapes this function.
|
|
65
|
-
const noop = (() => { });
|
|
66
|
-
noop.error = () => { };
|
|
67
|
-
noop.warn = () => { };
|
|
68
|
-
noop.debug = () => { };
|
|
69
|
-
return noop;
|
|
70
|
-
}
|
|
71
|
-
export function getExtensionLogPath() {
|
|
72
|
-
return EXTENSION_LOG_FILE;
|
|
73
|
-
}
|
|
74
|
-
/** Resolve once all enqueued extension-log writes are on disk (tests/shutdown). */
|
|
75
|
-
export function flushExtensionLog() {
|
|
76
|
-
return writer.flush();
|
|
77
|
-
}
|
|
78
|
-
/** Teardown-only: force queued entries to disk before the process exits. */
|
|
79
|
-
export function flushExtensionLogSync() {
|
|
80
|
-
writer.flushSync();
|
|
81
|
-
}
|
|
82
|
-
// --- Defense in depth: the console reroute -----------------------------------
|
|
83
|
-
const CONSOLE_METHODS = [
|
|
84
|
-
"log",
|
|
85
|
-
"info",
|
|
86
|
-
"warn",
|
|
87
|
-
"error",
|
|
88
|
-
"debug",
|
|
89
|
-
"trace",
|
|
90
|
-
"dir",
|
|
91
|
-
];
|
|
92
|
-
let consoleGuardInstalled = false;
|
|
93
|
-
/** The console methods captured before the patch, for an exact restore. */
|
|
94
|
-
const originalConsoleMethods = new Map();
|
|
95
|
-
/** The replacements this module installed, so uninstall never clobbers a later patch. */
|
|
96
|
-
const installedConsoleMethods = new Map();
|
|
97
|
-
/**
|
|
98
|
-
* The async capture window (#1434).
|
|
99
|
-
*
|
|
100
|
-
* The guard must catch pi-lens's own writes without swallowing the host's. pi's
|
|
101
|
-
* one-shot CLI commands print through `console.log`, so a permanent global
|
|
102
|
-
* reroute makes `pi list` print nothing in any project whose cwd loads the
|
|
103
|
-
* extension first. The store answers "is pi-lens executing right now?" and
|
|
104
|
-
* `AsyncLocalStorage` carries that answer into every promise, timer and
|
|
105
|
-
* callback created inside the window — so an async handler still captures after
|
|
106
|
-
* an `await`, while host code outside the window keeps its real sink.
|
|
107
|
-
*
|
|
108
|
-
* Built LAZILY (S1b, #1434 review): an active `AsyncLocalStorage` enables an
|
|
109
|
-
* async_hooks init hook for every promise in the process on Node 22 — the same
|
|
110
|
-
* hazard `tree-sitter-client.ts`'s `parseCacheMeasurement.disable()` comment
|
|
111
|
-
* documents — so constructing one at module scope taxes every `await` in the
|
|
112
|
-
* host even when the kill switch (`PI_LENS_CONSOLE_GUARD=0`) or test mode means
|
|
113
|
-
* the guard never installs and nothing ever reads the store. Construction is
|
|
114
|
-
* deferred to the first `runInConsoleCaptureWindow` call, and only happens once
|
|
115
|
-
* `installConsoleGuard()` has actually installed (never under the kill switch
|
|
116
|
-
* or test mode, since `consoleGuardInstalled` stays false in both).
|
|
117
|
-
*/
|
|
118
|
-
let consoleCaptureStorage;
|
|
119
|
-
function getConsoleCaptureStorage() {
|
|
120
|
-
if (!consoleGuardInstalled)
|
|
121
|
-
return undefined;
|
|
122
|
-
if (consoleCaptureStorage === undefined) {
|
|
123
|
-
consoleCaptureStorage = new AsyncLocalStorage();
|
|
124
|
-
}
|
|
125
|
-
return consoleCaptureStorage;
|
|
126
|
-
}
|
|
127
|
-
/**
|
|
128
|
-
* Module evaluation is the one window `AsyncLocalStorage` cannot wrap: the
|
|
129
|
-
* module graph is evaluated by the loader, not by a pi-lens call. It is
|
|
130
|
-
* synchronous, so a plain flag is enough (#1333's original concern — a
|
|
131
|
-
* transitively loaded dependency writing during its own init).
|
|
132
|
-
*/
|
|
133
|
-
let moduleLoadWindowOpen = false;
|
|
134
|
-
/**
|
|
135
|
-
* True while pi-lens owns execution, so console writes belong in the log.
|
|
136
|
-
*
|
|
137
|
-
* `consoleCaptureStorage` may not have been constructed yet (S1b) — that state
|
|
138
|
-
* means "no window was ever opened through `runInConsoleCaptureWindow`", i.e.
|
|
139
|
-
* the same as an empty store, so it reads as "no window" rather than throwing.
|
|
140
|
-
*/
|
|
141
|
-
export function isConsoleCaptureActive() {
|
|
142
|
-
return moduleLoadWindowOpen || consoleCaptureStorage?.getStore() === true;
|
|
143
|
-
}
|
|
144
|
-
/**
|
|
145
|
-
* Open the module-evaluation window. Called by `clients/console-guard-install.ts`
|
|
146
|
-
* before any other pi-lens module evaluates.
|
|
147
|
-
*
|
|
148
|
-
* The window closes explicitly at the end of `index.ts`. The backstop below
|
|
149
|
-
* closes it anyway if that never runs (an import throws, or the entry changes
|
|
150
|
-
* shape), because a leaked window would capture the host's output — the very
|
|
151
|
-
* bug this design fixes. Module evaluation is synchronous, so the end of the
|
|
152
|
-
* current macrotask is always past it. The timer is unref'd, so it can never
|
|
153
|
-
* hold a one-shot CLI process open (defect shape 4).
|
|
154
|
-
*/
|
|
155
|
-
export function openModuleLoadConsoleWindow() {
|
|
156
|
-
if (moduleLoadWindowOpen)
|
|
157
|
-
return;
|
|
158
|
-
moduleLoadWindowOpen = true;
|
|
159
|
-
const backstop = setImmediate(() => {
|
|
160
|
-
moduleLoadWindowOpen = false;
|
|
161
|
-
});
|
|
162
|
-
backstop.unref?.();
|
|
163
|
-
}
|
|
164
|
-
/** Close the module-evaluation window. Idempotent. */
|
|
165
|
-
export function closeModuleLoadConsoleWindow() {
|
|
166
|
-
moduleLoadWindowOpen = false;
|
|
167
|
-
}
|
|
168
|
-
/**
|
|
169
|
-
* Run `fn` inside a capture window. Console writes from `fn`, and from anything
|
|
170
|
-
* `fn` schedules, go to the extension log instead of the terminal.
|
|
171
|
-
*
|
|
172
|
-
* When the guard was never installed (kill switch or test mode), there is
|
|
173
|
-
* nothing for a window to gate — `installConsoleGuard`'s own dispatcher is the
|
|
174
|
-
* only reader of `isConsoleCaptureActive()`, and it short-circuits before that
|
|
175
|
-
* call in both cases. Skip constructing the `AsyncLocalStorage` (S1b) and run
|
|
176
|
-
* `fn` directly.
|
|
177
|
-
*/
|
|
178
|
-
export function runInConsoleCaptureWindow(fn) {
|
|
179
|
-
const storage = getConsoleCaptureStorage();
|
|
180
|
-
if (!storage)
|
|
181
|
-
return fn();
|
|
182
|
-
return storage.run(true, fn);
|
|
183
|
-
}
|
|
184
|
-
function inCaptureWindow(fn) {
|
|
185
|
-
// SAFETY: the wrapper forwards `this` and every argument to `fn` unchanged
|
|
186
|
-
// and returns its result unchanged, so it is call-compatible with `T` at
|
|
187
|
-
// runtime. TypeScript cannot prove that for a generic `T` it did not
|
|
188
|
-
// construct, because a variadic `(...args: unknown[]) => unknown` is not
|
|
189
|
-
// assignable to an arbitrary function type. The invariant is the
|
|
190
|
-
// pass-through itself: change the body to alter arguments or the return
|
|
191
|
-
// value and this cast stops being true.
|
|
192
|
-
return function (...args) {
|
|
193
|
-
return runInConsoleCaptureWindow(() => fn.apply(this, args));
|
|
194
|
-
};
|
|
195
|
-
}
|
|
196
|
-
/**
|
|
197
|
-
* True for every host API member that can hand pi-lens's own functions back to
|
|
198
|
-
* the host to be called later: `on(event, handler)` and any `register*`
|
|
199
|
-
* method (`registerTool`, `registerCommand`, `registerMessageRenderer`,
|
|
200
|
-
* `registerShortcut`, `registerFlag`, `registerMarkdownTransformer`,
|
|
201
|
-
* `registerEntryRenderer`, `registerProvider`, and any the host adds later).
|
|
202
|
-
*
|
|
203
|
-
* This is a DENY-LIST, not an allow-list (#1434 S1a review): every member
|
|
204
|
-
* matching this predicate gets its function arguments wrapped, with no
|
|
205
|
-
* per-method exemption. The earlier allow-list form (only `on` and
|
|
206
|
-
* `registerTool`) let the 9 `registerCommand` call sites and
|
|
207
|
-
* `registerMessageRenderer` bypass the window, regressing #1333 for those
|
|
208
|
-
* paths — a host callback fired for one of them would still write straight to
|
|
209
|
-
* the terminal.
|
|
210
|
-
*/
|
|
211
|
-
function isCaptureSeam(prop) {
|
|
212
|
-
return (prop === "on" || (typeof prop === "string" && prop.startsWith("register")));
|
|
213
|
-
}
|
|
214
|
-
/**
|
|
215
|
-
* True for a host SCHEMA value that happens to be callable.
|
|
216
|
-
*
|
|
217
|
-
* A tool definition's `parameters` is DATA the host reads, not a pi-lens
|
|
218
|
-
* callback — but the schema builder pi-lens imports is host-provided
|
|
219
|
-
* (`clients/deps/typebox.ts`: the host resolves the bare `typebox`
|
|
220
|
-
* specifier), and on a host whose builders are ArkType-style the schema is a
|
|
221
|
-
* FUNCTION. `@oh-my-pi/pi-coding-agent` rewrites an extension's `typebox`
|
|
222
|
-
* import to its own `src/extensibility/legacy-typebox.ts`, which re-exports
|
|
223
|
-
* `@oh-my-pi/omptype`'s builders; those return a callable whose prototype
|
|
224
|
-
* carries `toJsonSchema`/`assert`. `inCaptureWindow` returns a plain rest
|
|
225
|
-
* wrapper with neither, so the host falls off its ark branch, the wire schema
|
|
226
|
-
* degrades to `undefined`, and every xd:// device renders `type Args =
|
|
227
|
-
* unknown` and rejects every call with `root: schema must be an object or
|
|
228
|
-
* boolean` (#3195).
|
|
229
|
-
*
|
|
230
|
-
* The predicate IS the host's own, copied from `@oh-my-pi/pi-ai@18.2.4`
|
|
231
|
-
* `src/utils/schema/wire.ts:21-27` (`isArkSchema`) — the same test the host's
|
|
232
|
-
* `applyToolProxy` (`@oh-my-pi/pi-coding-agent@18.2.4`
|
|
233
|
-
* `src/extensibility/tool-proxy.ts:26`) uses to leave a callable schema
|
|
234
|
-
* unbound for exactly this hazard ("`bind()` … drops the schema surface …
|
|
235
|
-
* so a bound schema later stringifies to `undefined`"). Matching it means
|
|
236
|
-
* pi-lens declines to wrap precisely the values the host reads as schemas,
|
|
237
|
-
* and still wraps everything else.
|
|
238
|
-
* `tests/clients/pi-host-callable-schema-contract.test.ts` asserts against
|
|
239
|
-
* that upstream predicate (and against a fixture measured from a real
|
|
240
|
-
* `@oh-my-pi/omptype@18.2.4` schema), not against this copy of it.
|
|
241
|
-
*
|
|
242
|
-
* Deliberately NOT an allow-list of handler keys (`execute`, `renderResult`,
|
|
243
|
-
* `handler` — the measured set today): that is `isCaptureSeam`'s #1434 S1a
|
|
244
|
-
* mistake one level down (defect shape 34, spelling enumerator). The host's
|
|
245
|
-
* own `ToolDefinition` already declares `onSession`, `renderCall` and
|
|
246
|
-
* `shellEnv`, and `registerCommand` takes `getArgumentCompletions`; the day
|
|
247
|
-
* pi-lens adopts one of those, an allow-list drops its console capture
|
|
248
|
-
* SILENTLY — the #1333 regression this seam exists to prevent — while this
|
|
249
|
-
* predicate keeps wrapping it.
|
|
250
|
-
*/
|
|
251
|
-
function isCallableSchema(value) {
|
|
252
|
-
return (typeof value === "function" &&
|
|
253
|
-
typeof value.toJsonSchema === "function" &&
|
|
254
|
-
typeof value.assert === "function");
|
|
255
|
-
}
|
|
256
|
-
/**
|
|
257
|
-
* Wrap every function value found in `value`, in place. Handles the two
|
|
258
|
-
* shapes a `register*`/`on` call takes today: a function passed directly
|
|
259
|
-
* (`on(event, handler)`, `registerMessageRenderer(type, fn)`), and a
|
|
260
|
-
* function ONE level inside a plain options/definition object
|
|
261
|
-
* (`options.handler`, `tool.execute`).
|
|
262
|
-
*
|
|
263
|
-
* Only the property walk screens for a callable schema (#3195): every
|
|
264
|
-
* function pi-lens passes as a register argument DIRECTLY is a handler
|
|
265
|
-
* (`on`, `registerMessageRenderer`), measured across the whole activation,
|
|
266
|
-
* so a schema can only ever arrive as a property of a definition object.
|
|
267
|
-
*
|
|
268
|
-
* Deliberately NOT recursive past that one level (#1434 perf review): a tool
|
|
269
|
-
* definition's `parameters`/`schema` is a large, deeply nested TypeBox object
|
|
270
|
-
* that holds no functions, but walking its full tree on every `registerTool`
|
|
271
|
-
* call — across every tool, on every extension activation, across the many
|
|
272
|
-
* test files that re-activate the extension per case — measurably slowed
|
|
273
|
-
* activation (a wiring test tripped its 5s budget under transform load; see
|
|
274
|
-
* the commit body for the measured before/after). Checking only the
|
|
275
|
-
* argument's own top-level keys is O(keys), independent of how deep an
|
|
276
|
-
* unrelated nested value's own structure goes, and covers every shape
|
|
277
|
-
* PI-LENS actually registers (`options.handler`, `tool.execute` — never two
|
|
278
|
-
* levels deep). It does NOT cover every shape the host's `ExtensionAPI` type
|
|
279
|
-
* permits: `registerProvider`'s `config.oauth.*` callbacks sit two levels
|
|
280
|
-
* deep and `config.models[]` sits behind a skipped array. pi-lens never
|
|
281
|
-
* calls `registerProvider`; extend the descent if that changes (same known-
|
|
282
|
-
* gap convention as the `pi.events` note in AGENTS.md).
|
|
283
|
-
*
|
|
284
|
-
* Mutates the object in place rather than copying — a spread copy would drop
|
|
285
|
-
* non-enumerable or prototype-carried members of a definition object (defect
|
|
286
|
-
* shape 5), and these definitions are pi-lens's own, built just above the
|
|
287
|
-
* register call.
|
|
288
|
-
*/
|
|
289
|
-
function wrapFunctionsInPlace(value) {
|
|
290
|
-
if (typeof value === "function") {
|
|
291
|
-
return inCaptureWindow(value);
|
|
292
|
-
}
|
|
293
|
-
if (value === null || typeof value !== "object" || Array.isArray(value)) {
|
|
294
|
-
return value;
|
|
295
|
-
}
|
|
296
|
-
const obj = value;
|
|
297
|
-
for (const key of Object.keys(obj)) {
|
|
298
|
-
const propValue = obj[key];
|
|
299
|
-
if (typeof propValue === "function" && !isCallableSchema(propValue)) {
|
|
300
|
-
assignWrapped(obj, key, propValue);
|
|
301
|
-
}
|
|
302
|
-
}
|
|
303
|
-
return value;
|
|
304
|
-
}
|
|
305
|
-
/**
|
|
306
|
-
* Assign a wrapped function back onto `obj[key]`, degrading instead of
|
|
307
|
-
* throwing or dropping the registration when the property resists (S2b).
|
|
308
|
-
* ESM is always strict mode, so assigning into a non-writable data property
|
|
309
|
-
* throws a `TypeError`; `Object.defineProperty` is tried next (it can
|
|
310
|
-
* redefine a configurable-but-non-writable property); if both fail the
|
|
311
|
-
* property is frozen solid, so the ORIGINAL unwrapped function is left in
|
|
312
|
-
* place — the registration still succeeds, just without the console-capture
|
|
313
|
-
* net for that one callback, which is strictly better than the tool/command
|
|
314
|
-
* never registering at all.
|
|
315
|
-
*/
|
|
316
|
-
function assignWrapped(obj, key, fn) {
|
|
317
|
-
const wrapped = inCaptureWindow(fn);
|
|
318
|
-
try {
|
|
319
|
-
obj[key] = wrapped;
|
|
320
|
-
return;
|
|
321
|
-
}
|
|
322
|
-
catch {
|
|
323
|
-
// Non-writable data property — fall through to defineProperty.
|
|
324
|
-
}
|
|
325
|
-
try {
|
|
326
|
-
Object.defineProperty(obj, key, {
|
|
327
|
-
value: wrapped,
|
|
328
|
-
writable: true,
|
|
329
|
-
configurable: true,
|
|
330
|
-
enumerable: true,
|
|
331
|
-
});
|
|
332
|
-
}
|
|
333
|
-
catch {
|
|
334
|
-
// Frozen solid: leave the original unwrapped function in place rather
|
|
335
|
-
// than throwing (which would abort the whole register call) or silently
|
|
336
|
-
// dropping it.
|
|
337
|
-
}
|
|
338
|
-
}
|
|
339
|
-
/**
|
|
340
|
-
* Wrap the host extension API so every pi-lens entry point runs in a capture
|
|
341
|
-
* window.
|
|
342
|
-
*
|
|
343
|
-
* pi calls our event handlers and tool bodies from its own async context, so a
|
|
344
|
-
* window opened during registration does not reach them. Wrapping every
|
|
345
|
-
* `register*`/`on` seam (see `isCaptureSeam`) covers every current and future
|
|
346
|
-
* handler from one place, instead of a hand-maintained list of call sites.
|
|
347
|
-
* Everything else forwards untouched, except it is bound to `target` (S3a) so
|
|
348
|
-
* a destructured reference (`const { getFlag } = pi`) keeps working, and
|
|
349
|
-
* wrapper functions are memoized per-proxy in `wrapperCache` (S3b) so
|
|
350
|
-
* `proxy.on === proxy.on` — code that compares handler identity, or a test
|
|
351
|
-
* asserting a mock was called with a specific function reference across two
|
|
352
|
-
* reads of the same property, sees a stable value.
|
|
353
|
-
*/
|
|
354
|
-
export function withConsoleCaptureWindows(api) {
|
|
355
|
-
const wrapperCache = new Map();
|
|
356
|
-
const proxy = new Proxy(api, {
|
|
357
|
-
get(target, prop) {
|
|
358
|
-
// A non-configurable, non-writable OWN data property is a proxy
|
|
359
|
-
// invariant: the get trap MUST return the exact value the target
|
|
360
|
-
// holds, or the engine throws a TypeError on read. Degrade to the raw
|
|
361
|
-
// value instead of tripping that invariant (S2a) — a frozen host API
|
|
362
|
-
// loses the capture window for that member, but keeps working.
|
|
363
|
-
const descriptor = Reflect.getOwnPropertyDescriptor(target, prop);
|
|
364
|
-
if (descriptor &&
|
|
365
|
-
descriptor.writable === false &&
|
|
366
|
-
descriptor.configurable === false) {
|
|
367
|
-
return descriptor.value;
|
|
368
|
-
}
|
|
369
|
-
const cached = wrapperCache.get(prop);
|
|
370
|
-
if (cached !== undefined)
|
|
371
|
-
return cached;
|
|
372
|
-
const value = Reflect.get(target, prop, target);
|
|
373
|
-
if (typeof value !== "function")
|
|
374
|
-
return value;
|
|
375
|
-
const method = value;
|
|
376
|
-
// A host that returns `this` for chaining would hand back the raw API,
|
|
377
|
-
// so a chained `on(...).on(...)` would register an unwrapped handler.
|
|
378
|
-
// Keep the proxy on the chain.
|
|
379
|
-
const keepProxy = (result) => Object.is(result, target) ? proxy : result;
|
|
380
|
-
// Pass-through members are cached too (S3a/S3b: `proxy.getFlag ===
|
|
381
|
-
// proxy.getFlag`), but the cached wrapper re-reads `target[prop]` on
|
|
382
|
-
// EVERY call rather than closing over `method` -- a plain
|
|
383
|
-
// `method.bind(target)` pins the function reference captured at first
|
|
384
|
-
// access, so a host (or a test simulating one) that reassigns its own
|
|
385
|
-
// method after registration would silently keep calling the stale one.
|
|
386
|
-
// Re-reading keeps the cached wrapper's identity stable while staying
|
|
387
|
-
// live to whatever `target[prop]` currently is.
|
|
388
|
-
const wrapper = isCaptureSeam(prop)
|
|
389
|
-
? (...args) => {
|
|
390
|
-
const wrapped = args.map((arg) => wrapFunctionsInPlace(arg));
|
|
391
|
-
return keepProxy(method.apply(target, wrapped));
|
|
392
|
-
}
|
|
393
|
-
: (...args) => {
|
|
394
|
-
const current = Reflect.get(target, prop, target);
|
|
395
|
-
return current.apply(target, args);
|
|
396
|
-
};
|
|
397
|
-
wrapperCache.set(prop, wrapper);
|
|
398
|
-
return wrapper;
|
|
399
|
-
},
|
|
400
|
-
});
|
|
401
|
-
return proxy;
|
|
402
|
-
}
|
|
403
|
-
function formatConsoleArgs(args) {
|
|
404
|
-
return args
|
|
405
|
-
.map((arg) => {
|
|
406
|
-
if (typeof arg === "string")
|
|
407
|
-
return arg;
|
|
408
|
-
if (arg instanceof Error)
|
|
409
|
-
return arg.stack ?? arg.message;
|
|
410
|
-
try {
|
|
411
|
-
return JSON.stringify(arg) ?? String(arg);
|
|
412
|
-
}
|
|
413
|
-
catch {
|
|
414
|
-
return String(arg);
|
|
415
|
-
}
|
|
416
|
-
})
|
|
417
|
-
.join(" ");
|
|
418
|
-
}
|
|
419
|
-
/**
|
|
420
|
-
* Patch every console method on the extension entry path so a transitively
|
|
421
|
-
* loaded dependency cannot write raw bytes into pi's frame — the pi-side
|
|
422
|
-
* mirror of `mcp/server.ts`'s `console.log = console.error` guard, which
|
|
423
|
-
* protects the JSON-RPC stdout channel for the same structural reason.
|
|
424
|
-
*
|
|
425
|
-
* The patch is a DISPATCHER, not a permanent reroute (#1434). It sends a write
|
|
426
|
-
* to the extension log only while pi-lens owns execution; every other write
|
|
427
|
-
* goes to the original console method. pi's own one-shot CLI commands print
|
|
428
|
-
* through `console.log`, so an unconditional reroute silenced them: `pi list`
|
|
429
|
-
* exited 0 with no output in any project whose cwd loaded the extension first.
|
|
430
|
-
*
|
|
431
|
-
* This is a NET, not the fix: pi-lens's own sites are migrated to real sinks
|
|
432
|
-
* with real schemas. Idempotent, and inert under test mode (vitest owns the
|
|
433
|
-
* console) and under `PI_LENS_CONSOLE_GUARD=0`.
|
|
434
|
-
*
|
|
435
|
-
* Returns true when the patch was applied by this call.
|
|
436
|
-
*/
|
|
437
|
-
export function installConsoleGuard() {
|
|
438
|
-
if (consoleGuardInstalled)
|
|
439
|
-
return false;
|
|
440
|
-
if (isTestMode())
|
|
441
|
-
return false;
|
|
442
|
-
if (process.env.PI_LENS_CONSOLE_GUARD === "0")
|
|
443
|
-
return false;
|
|
444
|
-
consoleGuardInstalled = true;
|
|
445
|
-
// SAFETY: re-views `console` as a string-keyed record so the loop below can
|
|
446
|
-
// read and replace methods by name. `ConsoleMethod` is the union of keys
|
|
447
|
-
// that exist on `Console`, and each read is guarded by `typeof original ===
|
|
448
|
-
// "function"` before use, so a host whose console lacks a method is skipped
|
|
449
|
-
// rather than patched with undefined.
|
|
450
|
-
const target = console;
|
|
451
|
-
for (const method of CONSOLE_METHODS) {
|
|
452
|
-
const original = target[method];
|
|
453
|
-
if (typeof original !== "function")
|
|
454
|
-
continue;
|
|
455
|
-
const originalFn = original;
|
|
456
|
-
originalConsoleMethods.set(method, originalFn);
|
|
457
|
-
const replacement = (...args) => {
|
|
458
|
-
if (!isConsoleCaptureActive()) {
|
|
459
|
-
originalFn.apply(console, args);
|
|
460
|
-
return;
|
|
461
|
-
}
|
|
462
|
-
logExtension({
|
|
463
|
-
subsystem: "console",
|
|
464
|
-
level: method === "warn" ? "warn" : method === "error" ? "error" : "debug",
|
|
465
|
-
message: formatConsoleArgs(args),
|
|
466
|
-
metadata: { method },
|
|
467
|
-
});
|
|
468
|
-
};
|
|
469
|
-
installedConsoleMethods.set(method, replacement);
|
|
470
|
-
target[method] = replacement;
|
|
471
|
-
}
|
|
472
|
-
return true;
|
|
473
|
-
}
|
|
474
|
-
/**
|
|
475
|
-
* Restore the exact console methods captured at install time.
|
|
476
|
-
*
|
|
477
|
-
* A method someone else patched after us is left alone — restoring it would
|
|
478
|
-
* clobber their replacement. Returns true when this call uninstalled.
|
|
479
|
-
*/
|
|
480
|
-
export function uninstallConsoleGuard() {
|
|
481
|
-
if (!consoleGuardInstalled)
|
|
482
|
-
return false;
|
|
483
|
-
consoleGuardInstalled = false;
|
|
484
|
-
// SAFETY: same re-view as `installConsoleGuard`. Only keys this module
|
|
485
|
-
// recorded in `originalConsoleMethods` at install time are written back,
|
|
486
|
-
// and only when the current value is still the replacement this module
|
|
487
|
-
// installed, so a method someone else patched afterwards is left alone.
|
|
488
|
-
const target = console;
|
|
489
|
-
for (const [method, original] of originalConsoleMethods) {
|
|
490
|
-
if (target[method] === installedConsoleMethods.get(method)) {
|
|
491
|
-
target[method] = original;
|
|
492
|
-
}
|
|
493
|
-
}
|
|
494
|
-
originalConsoleMethods.clear();
|
|
495
|
-
installedConsoleMethods.clear();
|
|
496
|
-
return true;
|
|
497
|
-
}
|
|
498
|
-
/** Test-only: uninstall the guard and close every open capture window. */
|
|
499
|
-
export function _resetConsoleGuardForTests() {
|
|
500
|
-
uninstallConsoleGuard();
|
|
501
|
-
consoleGuardInstalled = false;
|
|
502
|
-
consoleCaptureStorage = undefined;
|
|
503
|
-
moduleLoadWindowOpen = false;
|
|
504
|
-
}
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Host run-mode awareness (#1334 S2).
|
|
3
|
-
*
|
|
4
|
-
* pi tells every extension which mode it is running in — verified against the
|
|
5
|
-
* pinned host types (`@earendil-works/pi-coding-agent/dist/core/extensions/
|
|
6
|
-
* types.d.ts`):
|
|
7
|
-
*
|
|
8
|
-
* export type ExtensionMode = "tui" | "rpc" | "json" | "print"; // line 208
|
|
9
|
-
* interface ExtensionContext { mode: ExtensionMode; hasUI: boolean; … }
|
|
10
|
-
* // lines 212-215
|
|
11
|
-
*
|
|
12
|
-
* The host's own comment on `mode` is the contract this module encodes:
|
|
13
|
-
* *"Use `"tui"` to guard terminal-only UI such as custom components."*
|
|
14
|
-
*
|
|
15
|
-
* pi-lens previously derived terminal ownership from nothing at all — it
|
|
16
|
-
* mounted its widget and chattered through `ui.notify` in every mode, including
|
|
17
|
-
* `print` and `json`, where the process is a one-shot producing machine- or
|
|
18
|
-
* pipe-consumed output and there is no live TUI to render into.
|
|
19
|
-
*
|
|
20
|
-
* Two independent questions, deliberately NOT the same predicate:
|
|
21
|
-
*
|
|
22
|
-
* - *Is there a TUI to mount a custom component into?* Only `"tui"`. `rpc`
|
|
23
|
-
* has `hasUI: true` (dialogs work over the protocol) but no terminal
|
|
24
|
-
* component surface, so the widget must not mount there either.
|
|
25
|
-
* - *Should proactive chatter reach the human?* No in `print` and `json` —
|
|
26
|
-
* one-shot/machine output. Yes in `tui` and `rpc`.
|
|
27
|
-
*
|
|
28
|
-
* This is complementary to, and independent of, the #1338/#1333 console guard:
|
|
29
|
-
* that establishes "never write raw to the terminal"; this decides whether the
|
|
30
|
-
* HOST's own render path should be used at all in a given mode.
|
|
31
|
-
*
|
|
32
|
-
* Stateless by design: `mode` lives on the ctx pi hands to every event and
|
|
33
|
-
* command handler, so each call site reads it from the ctx it already has —
|
|
34
|
-
* no latched global to go stale across a session replacement.
|
|
35
|
-
*/
|
|
36
|
-
const KNOWN_MODES = new Set(["tui", "rpc", "json", "print"]);
|
|
37
|
-
/**
|
|
38
|
-
* Feature-detected read of `ctx.mode`.
|
|
39
|
-
*
|
|
40
|
-
* Returns `"unknown"` for a host that predates the field, or for any value
|
|
41
|
-
* outside the four documented modes (a future pi may add one; treating an
|
|
42
|
-
* unrecognized mode as "unknown" keeps current behavior rather than guessing
|
|
43
|
-
* a suppression that could hide output).
|
|
44
|
-
*/
|
|
45
|
-
export function readExtensionMode(ctx) {
|
|
46
|
-
try {
|
|
47
|
-
const mode = ctx?.mode;
|
|
48
|
-
if (typeof mode !== "string" || !KNOWN_MODES.has(mode))
|
|
49
|
-
return "unknown";
|
|
50
|
-
return mode;
|
|
51
|
-
}
|
|
52
|
-
catch {
|
|
53
|
-
return "unknown";
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
/**
|
|
57
|
-
* Whether a terminal-only custom component (the pi-lens diagnostics widget) can
|
|
58
|
-
* be mounted. `"unknown"` mounts — older hosts must behave exactly as before.
|
|
59
|
-
*/
|
|
60
|
-
export function supportsTuiWidget(mode) {
|
|
61
|
-
return mode === "tui" || mode === "unknown";
|
|
62
|
-
}
|
|
63
|
-
/**
|
|
64
|
-
* Whether proactive `ui.notify` chatter should be suppressed (logged only).
|
|
65
|
-
* True only for the two non-interactive one-shot modes.
|
|
66
|
-
*/
|
|
67
|
-
export function suppressesUserNotify(mode) {
|
|
68
|
-
return mode === "print" || mode === "json";
|
|
69
|
-
}
|
|
70
|
-
/** Short human-readable reason for a suppression, for the ndjson/debug log. */
|
|
71
|
-
export function modeSuppressionNote(mode) {
|
|
72
|
-
return `suppressed in "${mode}" mode (no interactive TUI)`;
|
|
73
|
-
}
|
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
import { escapeRegExp } from "./string-utils.js";
|
|
2
|
-
function normalizeHintInput(value) {
|
|
3
|
-
return value.replace(/\\/g, "/");
|
|
4
|
-
}
|
|
5
|
-
function hasHintToken(value, tokens) {
|
|
6
|
-
const escaped = tokens.map((token) => escapeRegExp(token));
|
|
7
|
-
const alternatives = escaped.join("|");
|
|
8
|
-
// Path/word boundaries are deliberately explicit: a token must occupy a
|
|
9
|
-
// segment (or a dot/dash/underscore-separated word), never an arbitrary
|
|
10
|
-
// substring. The second expression preserves camelCase names such as
|
|
11
|
-
// authStore and DatabaseClient without making `adb` match `db`.
|
|
12
|
-
return (new RegExp(`(?:^|[/_.\\-\\s])(?:${alternatives})(?=[/_.\\-\\s]|$)`, "i").test(value) ||
|
|
13
|
-
new RegExp(`(?:^|(?<=[a-z0-9]))(?:${tokens
|
|
14
|
-
.flatMap((token) => [
|
|
15
|
-
token[0].toUpperCase() + token.slice(1),
|
|
16
|
-
...(token === "openai" ? ["OpenAI"] : []),
|
|
17
|
-
...(token === "github" ? ["GitHub"] : []),
|
|
18
|
-
...(token === "gitlab" ? ["GitLab"] : []),
|
|
19
|
-
])
|
|
20
|
-
.join("|")})(?=[A-Z]|[/_.\\-\\s]|$)`).test(value));
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* Deterministic feature-kind hint derived from package/entity/file names.
|
|
24
|
-
* Inspired by clawpatch's packageKind() heuristic.
|
|
25
|
-
*/
|
|
26
|
-
export function inferFeatureKind(nameOrPath) {
|
|
27
|
-
const normalized = normalizeHintInput(nameOrPath);
|
|
28
|
-
if (hasHintToken(normalized, [
|
|
29
|
-
"config",
|
|
30
|
-
"store",
|
|
31
|
-
"db",
|
|
32
|
-
"database",
|
|
33
|
-
"github",
|
|
34
|
-
"openai",
|
|
35
|
-
"sync",
|
|
36
|
-
"service",
|
|
37
|
-
])) {
|
|
38
|
-
return "service";
|
|
39
|
-
}
|
|
40
|
-
if (/(^|[/_.\-\s])(cli|command|bin)([/_.\-\s]|$)/i.test(normalized)) {
|
|
41
|
-
return "cli-command";
|
|
42
|
-
}
|
|
43
|
-
return "library";
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* Deterministic trust-boundary hints derived from package/entity/file names.
|
|
47
|
-
* These are advisory metadata for context injection, not security findings.
|
|
48
|
-
*/
|
|
49
|
-
export function inferTrustBoundaries(nameOrPath) {
|
|
50
|
-
const normalized = normalizeHintInput(nameOrPath);
|
|
51
|
-
const boundaries = new Set();
|
|
52
|
-
if (hasHintToken(normalized, [
|
|
53
|
-
"config",
|
|
54
|
-
"store",
|
|
55
|
-
"db",
|
|
56
|
-
"database",
|
|
57
|
-
"repo",
|
|
58
|
-
"repository",
|
|
59
|
-
"model",
|
|
60
|
-
"migration",
|
|
61
|
-
])) {
|
|
62
|
-
boundaries.add("filesystem");
|
|
63
|
-
boundaries.add("database");
|
|
64
|
-
}
|
|
65
|
-
if (hasHintToken(normalized, [
|
|
66
|
-
"github",
|
|
67
|
-
"gitlab",
|
|
68
|
-
"openai",
|
|
69
|
-
"anthropic",
|
|
70
|
-
"stripe",
|
|
71
|
-
"slack",
|
|
72
|
-
"sync",
|
|
73
|
-
"webhook",
|
|
74
|
-
"api",
|
|
75
|
-
"client",
|
|
76
|
-
])) {
|
|
77
|
-
boundaries.add("network");
|
|
78
|
-
boundaries.add("external-api");
|
|
79
|
-
boundaries.add("serialization");
|
|
80
|
-
}
|
|
81
|
-
if (/(^|[/_.\-\s])(cli|command|bin|exec|spawn|process|shell)([/_.\-\s]|$)/i.test(normalized)) {
|
|
82
|
-
boundaries.add("user-input");
|
|
83
|
-
boundaries.add("process-exec");
|
|
84
|
-
}
|
|
85
|
-
if (hasHintToken(normalized, [
|
|
86
|
-
"auth",
|
|
87
|
-
"login",
|
|
88
|
-
"token",
|
|
89
|
-
"session",
|
|
90
|
-
"oauth",
|
|
91
|
-
"jwt",
|
|
92
|
-
])) {
|
|
93
|
-
boundaries.add("auth");
|
|
94
|
-
boundaries.add("user-input");
|
|
95
|
-
}
|
|
96
|
-
return [...boundaries];
|
|
97
|
-
}
|
|
98
|
-
export function featureHintMetadata(nameOrPath) {
|
|
99
|
-
return {
|
|
100
|
-
featureKind: inferFeatureKind(nameOrPath),
|
|
101
|
-
trustBoundaries: inferTrustBoundaries(nameOrPath),
|
|
102
|
-
};
|
|
103
|
-
}
|