@herbertgao/pi-extensions 2026.10.0 → 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 +16 -12
- package/THIRD_PARTY_NOTICES.md +3 -3
- 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/.opencode/plugins/index.js +4 -0
- package/node_modules/@dietrichgebert/ponytail/.opencode/plugins/ponytail-frontmatter.cjs +43 -3
- package/node_modules/@dietrichgebert/ponytail/.opencode/plugins/ponytail.mjs +142 -59
- 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 +52 -242
- package/node_modules/@dietrichgebert/ponytail/hooks/claude-codex-hooks.json +3 -3
- package/node_modules/@dietrichgebert/ponytail/hooks/copilot-hooks.json +4 -4
- package/node_modules/@dietrichgebert/ponytail/hooks/ponytail-activate.js +70 -16
- package/node_modules/@dietrichgebert/ponytail/hooks/ponytail-config.js +8 -7
- 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/hooks/ponytail-mode-tracker.js +46 -23
- package/node_modules/@dietrichgebert/ponytail/hooks/ponytail-runtime.js +39 -7
- package/node_modules/@dietrichgebert/ponytail/hooks/ponytail-subagent.js +20 -3
- package/node_modules/@dietrichgebert/ponytail/hooks/qoder-hooks.json +3 -3
- package/node_modules/@dietrichgebert/ponytail/package.json +3 -3
- package/node_modules/@dietrichgebert/ponytail/pi-extension/index.js +47 -17
- package/node_modules/@dietrichgebert/ponytail/scripts/uninstall.js +21 -7
- package/node_modules/@dietrichgebert/ponytail/skills/plugin.json +5 -0
- package/node_modules/@dietrichgebert/ponytail/skills/ponytail/SKILL.md +33 -101
- package/node_modules/@dietrichgebert/ponytail/skills/ponytail-audit/SKILL.md +89 -27
- package/node_modules/@dietrichgebert/ponytail/skills/ponytail-debt/SKILL.md +13 -12
- package/node_modules/@dietrichgebert/ponytail/skills/ponytail-gain/SKILL.md +21 -18
- package/node_modules/@dietrichgebert/ponytail/skills/ponytail-help/SKILL.md +12 -13
- package/node_modules/@dietrichgebert/ponytail/skills/ponytail-review/SKILL.md +96 -52
- 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 +4 -4
- 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/node_modules/pi-typesafe/README.md +1 -1
- package/node_modules/pi-typesafe/dist/backends.d.ts +15 -5
- package/node_modules/pi-typesafe/dist/backends.js +18 -0
- package/node_modules/pi-typesafe/dist/client.d.ts +4 -3
- package/node_modules/pi-typesafe/dist/client.js +22 -7
- package/node_modules/pi-typesafe/dist/index.d.ts +2 -2
- package/node_modules/pi-typesafe/dist/index.js +1 -1
- package/node_modules/pi-typesafe/dist/usage.d.ts +14 -4
- package/node_modules/pi-typesafe/dist/usage.js +147 -42
- package/node_modules/pi-typesafe/package.json +1 -1
- package/node_modules/pi-web-access/CHANGELOG.md +48 -0
- package/node_modules/pi-web-access/README.md +57 -11
- package/node_modules/pi-web-access/brave-rate-limit.ts +8 -2
- package/node_modules/pi-web-access/curator-page.ts +5 -1
- package/node_modules/pi-web-access/curator-server.ts +2 -0
- package/node_modules/pi-web-access/declared-web-links.ts +2 -2
- package/node_modules/pi-web-access/degoog.ts +323 -0
- package/node_modules/pi-web-access/dist/index.js +3483 -2745
- package/node_modules/pi-web-access/dist/mcp-cli.js +27443 -0
- package/node_modules/pi-web-access/exa.ts +5 -1
- package/node_modules/pi-web-access/extract.ts +41 -3
- package/node_modules/pi-web-access/firecrawl.ts +35 -4
- package/node_modules/pi-web-access/gemini-search.ts +34 -11
- package/node_modules/pi-web-access/gemini-web.ts +14 -9
- package/node_modules/pi-web-access/index.ts +153 -1202
- package/node_modules/pi-web-access/keenable.ts +221 -0
- package/node_modules/pi-web-access/mcp-cli.ts +40 -0
- package/node_modules/pi-web-access/mcp-server.ts +81 -0
- package/node_modules/pi-web-access/mcp-tool-definitions.ts +117 -0
- package/node_modules/pi-web-access/openai-search.ts +34 -1
- package/node_modules/pi-web-access/package.json +23 -5
- package/node_modules/pi-web-access/perplexity.ts +64 -56
- package/node_modules/pi-web-access/tool-arguments.ts +20 -0
- package/node_modules/pi-web-access/video-extract.ts +1 -1
- package/node_modules/pi-web-access/web-tool-contract.ts +86 -0
- package/node_modules/pi-web-access/web-tool-core.ts +1502 -0
- package/node_modules/pi-web-access/youtube-extract.ts +2 -5
- package/package.json +17 -12
- package/node_modules/@dietrichgebert/ponytail/README.es.md +0 -329
- package/node_modules/@dietrichgebert/ponytail/README.ko.md +0 -346
- package/node_modules/@dietrichgebert/ponytail/assets/benchmark-3model.svg +0 -21
- package/node_modules/@dietrichgebert/ponytail/assets/benchmark-agentic.svg +0 -62
- package/node_modules/@dietrichgebert/ponytail/assets/logo-dark.png +0 -0
- package/node_modules/@dietrichgebert/ponytail/assets/logo-dark.svg +0 -115
- package/node_modules/@dietrichgebert/ponytail/assets/logo-greenpt-dark.svg +0 -27
- package/node_modules/@dietrichgebert/ponytail/assets/logo-greenpt.svg +0 -27
- package/node_modules/@dietrichgebert/ponytail/assets/logo.png +0 -0
- package/node_modules/@dietrichgebert/ponytail/assets/retriever-icon.png +0 -0
- package/node_modules/@dietrichgebert/ponytail/assets/retriever-logo-dark.svg +0 -4
- package/node_modules/@dietrichgebert/ponytail/assets/retriever-logo-light.svg +0 -4
- package/node_modules/@dietrichgebert/ponytail/assets/social-preview.png +0 -0
- package/node_modules/@dietrichgebert/ponytail/assets/waitlist-banner-es.png +0 -0
- package/node_modules/@dietrichgebert/ponytail/assets/waitlist-banner-ko.png +0 -0
- package/node_modules/@dietrichgebert/ponytail/assets/waitlist-banner.png +0 -0
- 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,596 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Source File Filter — Deduplicates source files by detecting build artifacts.
|
|
3
|
-
*
|
|
4
|
-
* Problem: When scanning a codebase, we encounter both source files and their
|
|
5
|
-
* compiled/transpiled outputs (TypeScript → JavaScript, Vue → JavaScript, etc.).
|
|
6
|
-
* Scanning both wastes time and produces duplicate findings.
|
|
7
|
-
*
|
|
8
|
-
* Solution: For each file, check if a "higher precedence" source sibling exists.
|
|
9
|
-
* If yes, skip the file as a build artifact. If no, keep it as hand-written source.
|
|
10
|
-
*
|
|
11
|
-
* Supported ecosystems:
|
|
12
|
-
* - TypeScript: .ts shadows .js, .tsx shadows .jsx
|
|
13
|
-
* - Vue/Svelte: .vue/.svelte shadows .js
|
|
14
|
-
* - CoffeeScript: .coffee shadows .js
|
|
15
|
-
*
|
|
16
|
-
* Files without higher-precedence siblings are kept only when they do not look
|
|
17
|
-
* generated/codegen-produced (hand-written JS, Python, Go, Rust, etc.).
|
|
18
|
-
*/
|
|
19
|
-
import * as fs from "node:fs";
|
|
20
|
-
import * as path from "node:path";
|
|
21
|
-
import { getProjectIgnoreMatcher } from "./file-utils.js";
|
|
22
|
-
import { classifyGeneratedOrArtifactDetailed, isDeclarationFile, } from "./generated-artifacts.js";
|
|
23
|
-
import { isCodeKindFile, KIND_EXTENSIONS } from "./file-kinds.js";
|
|
24
|
-
import { logLatency } from "./latency-logger.js";
|
|
25
|
-
import { normalizeEphemeralMapKey } from "./path-utils.js";
|
|
26
|
-
import { isSlowFs, SLOW_FS_REDUCED_MAX_FILES } from "./slow-fs.js";
|
|
27
|
-
import { shouldRecurseIntoDir, walkTreeRecursiveSync, walkTreeStackAsync, } from "./source-walker.js";
|
|
28
|
-
/**
|
|
29
|
-
* Create a fresh, empty per-walk probe cache. Callers that enumerate many
|
|
30
|
-
* files (a single `collectSourceFiles`/`collectSourceFilesAsync` invocation)
|
|
31
|
-
* should create one of these at the start of the walk and pass it through;
|
|
32
|
-
* it must not be reused across separate walks.
|
|
33
|
-
*/
|
|
34
|
-
export function createArtifactProbeCache() {
|
|
35
|
-
return new Map();
|
|
36
|
-
}
|
|
37
|
-
function probeExists(filePath, cache) {
|
|
38
|
-
if (!cache)
|
|
39
|
-
return fs.existsSync(filePath);
|
|
40
|
-
const key = normalizeEphemeralMapKey(filePath);
|
|
41
|
-
const cached = cache.get(key);
|
|
42
|
-
if (cached !== undefined)
|
|
43
|
-
return cached;
|
|
44
|
-
const result = fs.existsSync(filePath);
|
|
45
|
-
cache.set(key, result);
|
|
46
|
-
return result;
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* Mapping of file extension to the extensions it shadows (build artifacts).
|
|
50
|
-
* Order matters: first entry has highest precedence.
|
|
51
|
-
*/
|
|
52
|
-
export const SOURCE_PRECEDENCE = {
|
|
53
|
-
".ts": [".js", ".jsx", ".mjs", ".cjs"],
|
|
54
|
-
".tsx": [".jsx", ".js", ".mjs", ".cjs"],
|
|
55
|
-
".mts": [".mjs", ".js", ".jsx", ".cjs"],
|
|
56
|
-
".cts": [".cjs", ".js", ".jsx", ".mjs"],
|
|
57
|
-
".vue": [".js", ".mjs"],
|
|
58
|
-
".svelte": [".js", ".mjs"],
|
|
59
|
-
".coffee": [".js"],
|
|
60
|
-
};
|
|
61
|
-
/**
|
|
62
|
-
* Return source-twin candidates in the policy order for a compiled path.
|
|
63
|
-
* This is the pure counterpart to {@link findSourceSibling}: callers that
|
|
64
|
-
* already have a complete file identity set (the review graph and lens map)
|
|
65
|
-
* must not probe the filesystem or reimplement the extension matrix.
|
|
66
|
-
*/
|
|
67
|
-
export function sourceTwinCandidates(filePath) {
|
|
68
|
-
const ext = path.extname(filePath).toLowerCase();
|
|
69
|
-
const stem = filePath.slice(0, filePath.length - ext.length);
|
|
70
|
-
const sourceExts = ext === ".mjs"
|
|
71
|
-
? [".mts", ".ts", ".tsx", ".cts"]
|
|
72
|
-
: ext === ".cjs"
|
|
73
|
-
? [".cts", ".ts", ".tsx", ".mts"]
|
|
74
|
-
: ext === ".jsx"
|
|
75
|
-
? // Deliberately retain the broad fallback: a .jsx next to a .ts
|
|
76
|
-
// is treated as a build artifact even without a .tsx sibling.
|
|
77
|
-
[".tsx", ".ts", ".mts", ".cts"]
|
|
78
|
-
: ext === ".js"
|
|
79
|
-
? [".ts", ".tsx", ".mts", ".cts"]
|
|
80
|
-
: [];
|
|
81
|
-
return sourceExts.map((sourceExt) => `${stem}${sourceExt}`);
|
|
82
|
-
}
|
|
83
|
-
/**
|
|
84
|
-
* Resolve a compiled file to its canonical source identity within a known
|
|
85
|
-
* file set. The caller supplies normalized identities; this helper deliberately
|
|
86
|
-
* does not touch the filesystem, so complete source-set walks remain bounded
|
|
87
|
-
* and point-in-time consistent.
|
|
88
|
-
*/
|
|
89
|
-
export function canonicalSourceTwin(filePath, availableFiles, excludedFiles) {
|
|
90
|
-
for (const candidate of sourceTwinCandidates(filePath)) {
|
|
91
|
-
if (availableFiles.has(candidate) && !excludedFiles?.has(candidate)) {
|
|
92
|
-
return candidate;
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
return filePath;
|
|
96
|
-
}
|
|
97
|
-
/**
|
|
98
|
-
* Every extension belonging to a supported file kind. KIND_EXTENSIONS is the
|
|
99
|
-
* single language-extension authority; deriving here makes a newly registered
|
|
100
|
-
* kind project-scannable without a second hand-maintained list (#894).
|
|
101
|
-
*
|
|
102
|
-
* SOURCE_PRECEDENCE contributes `.coffee`, the one legacy shadowing source that
|
|
103
|
-
* is intentionally not a supported FileKind. Generated files and declarations
|
|
104
|
-
* are narrowed by generated-artifacts.ts after this extension gate.
|
|
105
|
-
*/
|
|
106
|
-
export const ALL_SCANNABLE_EXTENSIONS = [
|
|
107
|
-
...new Set([
|
|
108
|
-
...Object.values(KIND_EXTENSIONS).flat(),
|
|
109
|
-
...Object.keys(SOURCE_PRECEDENCE),
|
|
110
|
-
]),
|
|
111
|
-
];
|
|
112
|
-
/**
|
|
113
|
-
* Structural safety net for the source-file walk (#250/#747 escape class).
|
|
114
|
-
*
|
|
115
|
-
* `maxFiles` is optional, and historically an omitted cap meant an UNBOUNDED
|
|
116
|
-
* traversal — so any caller that forgot to pass one could, from a misrooted cwd
|
|
117
|
-
* (e.g. one that climbed to $HOME), enumerate the entire home tree before it
|
|
118
|
-
* ever decided to bail. This finite default caps that walk regardless of what
|
|
119
|
-
* the caller asked for: no caller can trigger an unbounded collection just by
|
|
120
|
-
* omitting `maxFiles`. Deliberately generous — real projects are far under it,
|
|
121
|
-
* so it never trims a legitimate scan; it only exists to bound the pathological
|
|
122
|
-
* misrooted case. A caller that genuinely needs more must pass an explicit
|
|
123
|
-
* larger `maxFiles`.
|
|
124
|
-
*/
|
|
125
|
-
export const DEFAULT_MAX_SOURCE_FILES = 20000;
|
|
126
|
-
/**
|
|
127
|
-
* Entry-visit budget for the collect walks (#760, the #758 escape class).
|
|
128
|
-
*
|
|
129
|
-
* `maxFiles` caps results FOUND, not entries VISITED — so a mixed tree with
|
|
130
|
-
* few source files but a huge pile of non-source files (reporter's case: ~300
|
|
131
|
-
* scripts among ~84k game-mod data files) never trips it and still gets a
|
|
132
|
-
* full-tree walk, dominated by one `ignoreMatcher.isIgnored()` call per entry.
|
|
133
|
-
* This budget counts every directory entry the walk touches — including
|
|
134
|
-
* ignored/skipped ones, because the per-entry ignore probe IS the dominant
|
|
135
|
-
* cost — and stops the walk when exhausted, returning the best-effort list
|
|
136
|
-
* collected so far.
|
|
137
|
-
*
|
|
138
|
-
* 200k is deliberately generous: at the ~25µs/entry ignore-probe cost that
|
|
139
|
-
* motivated #758 it bounds the worst case to a few seconds instead of an
|
|
140
|
-
* unbounded multi-minute walk over a misrooted ($HOME-scale) or
|
|
141
|
-
* data-dominated tree, while staying an order of magnitude above any healthy
|
|
142
|
-
* project's entry count — so real repos never see a truncated list. Callers
|
|
143
|
-
* that need a tighter bound pass `maxScanEntries` explicitly.
|
|
144
|
-
*
|
|
145
|
-
* #776 note: deliberately NOT derived from `project-scale.ts`'s
|
|
146
|
-
* `maxProjectFiles` knob, unlike the five file-count budgets it unifies. This
|
|
147
|
-
* is a directory-ENTRIES-visited safety valve, not a source-files-kept
|
|
148
|
-
* budget — the two units don't scale together (a repo with a huge
|
|
149
|
-
* non-source data/asset tree needs a much larger entries budget than its
|
|
150
|
-
* file count would suggest), so coupling them risks changing behavior on
|
|
151
|
-
* exactly the pathological-tree shapes this ceiling protects. See
|
|
152
|
-
* `project-scale.ts`'s file header for the full rationale.
|
|
153
|
-
*/
|
|
154
|
-
export const DEFAULT_MAX_SCAN_ENTRIES = 200_000;
|
|
155
|
-
/**
|
|
156
|
-
* Kept-files accumulator shared by the sync/async collectors, so the
|
|
157
|
-
* `prioritizeCodeKinds` policy (#894 review) lives in one place. In the
|
|
158
|
-
* default mode it is a plain array with the pre-existing `maxFiles` stop
|
|
159
|
-
* check; in prioritized mode code-kind files alone satisfy the cap and
|
|
160
|
-
* non-code files only fill whatever budget the code files leave unused.
|
|
161
|
-
*/
|
|
162
|
-
function createKeptFilesAccumulator(maxFiles, prioritizeCodeKinds) {
|
|
163
|
-
if (!prioritizeCodeKinds) {
|
|
164
|
-
const files = [];
|
|
165
|
-
return {
|
|
166
|
-
push: (file) => void files.push(file),
|
|
167
|
-
isFull: () => files.length >= maxFiles,
|
|
168
|
-
list: () => files,
|
|
169
|
-
};
|
|
170
|
-
}
|
|
171
|
-
const codeFiles = [];
|
|
172
|
-
const otherFiles = [];
|
|
173
|
-
return {
|
|
174
|
-
push(file) {
|
|
175
|
-
if (isCodeKindFile(file))
|
|
176
|
-
codeFiles.push(file);
|
|
177
|
-
else if (otherFiles.length < maxFiles)
|
|
178
|
-
otherFiles.push(file);
|
|
179
|
-
},
|
|
180
|
-
isFull: () => codeFiles.length >= maxFiles,
|
|
181
|
-
list: () => [...codeFiles, ...otherFiles].slice(0, maxFiles),
|
|
182
|
-
};
|
|
183
|
-
}
|
|
184
|
-
function createSourceWalkSkipCounters() {
|
|
185
|
-
return {
|
|
186
|
-
generatedOrArtifactSkips: 0,
|
|
187
|
-
buildArtifactSkips: 0,
|
|
188
|
-
generatedDirSkips: 0,
|
|
189
|
-
generatedNameOverrides: 0,
|
|
190
|
-
generatedNameOnlySkips: 0,
|
|
191
|
-
};
|
|
192
|
-
}
|
|
193
|
-
/**
|
|
194
|
-
* Log a one-line rollup for a walk's skip counters through the existing
|
|
195
|
-
* latency/scan logging channel (`logLatency`, ndjson `latency.log`) — mirrors
|
|
196
|
-
* how `getGraphSourceFiles` logs `review_graph_source_walk_entry_budget`.
|
|
197
|
-
* Silent (no log line) when both counters are zero, so a healthy walk with no
|
|
198
|
-
* name/artifact-probe skips produces no new log noise.
|
|
199
|
-
*
|
|
200
|
-
* Logged once per walk call, at the walk layer itself
|
|
201
|
-
* (`collectSourceFilesWithBudget`/`collectSourceFilesWithBudgetAsync`) rather
|
|
202
|
-
* than at each of its several consumers (review-graph builder, project-
|
|
203
|
-
* diagnostics scanner, word-index, …): every one of those consumers funnels
|
|
204
|
-
* through these two functions (directly or via the plain `collectSourceFiles`/
|
|
205
|
-
* `collectSourceFilesAsync` wrappers), so logging here is a single choke point
|
|
206
|
-
* that covers all of them — the smaller diff versus exporting the counters and
|
|
207
|
-
* wiring a log call into each consumer separately.
|
|
208
|
-
*/
|
|
209
|
-
function logSourceWalkSkipsIfAny(rootDir, counters) {
|
|
210
|
-
if (counters.generatedOrArtifactSkips === 0 &&
|
|
211
|
-
counters.buildArtifactSkips === 0 &&
|
|
212
|
-
counters.generatedDirSkips === 0 &&
|
|
213
|
-
counters.generatedNameOverrides === 0) {
|
|
214
|
-
return;
|
|
215
|
-
}
|
|
216
|
-
logLatency({
|
|
217
|
-
type: "phase",
|
|
218
|
-
phase: "source_walk_skip_summary",
|
|
219
|
-
filePath: rootDir,
|
|
220
|
-
durationMs: 0,
|
|
221
|
-
metadata: {
|
|
222
|
-
generatedOrArtifactSkips: counters.generatedOrArtifactSkips,
|
|
223
|
-
buildArtifactSkips: counters.buildArtifactSkips,
|
|
224
|
-
generatedDirSkips: counters.generatedDirSkips,
|
|
225
|
-
generatedNameOverrides: counters.generatedNameOverrides,
|
|
226
|
-
generatedNameOnlySkips: counters.generatedNameOnlySkips,
|
|
227
|
-
},
|
|
228
|
-
});
|
|
229
|
-
}
|
|
230
|
-
/**
|
|
231
|
-
* Full verdict+evidence form of {@link shouldSkipGeneratedOrArtifact} (#1107
|
|
232
|
-
* phase 2) — exposes `classifyGeneratedOrArtifactDetailed`'s `"override"`
|
|
233
|
-
* outcome (a WEAK name-only match the content-probe escape hatch rescued)
|
|
234
|
-
* AND, for a `"generated"` verdict, WHICH evidence tier decided it, so
|
|
235
|
-
* `classifyEntry` can count a genuine skip, a rescue, and the residual
|
|
236
|
-
* "unconfirmed name-only skip" bucket all distinctly. See
|
|
237
|
-
* `GeneratedArtifactEvidence`'s doc for why the tier split matters: a
|
|
238
|
-
* tool-facing notice keyed on the RAW skip count fires permanently on any
|
|
239
|
-
* repo with a lockfile, drowning the signal it exists to surface.
|
|
240
|
-
*/
|
|
241
|
-
function classifySkipGeneratedOrArtifact(filePath, options) {
|
|
242
|
-
const includeDeclarations = options?.includeDeclarationFiles === true;
|
|
243
|
-
if (options?.includeGenerated === true) {
|
|
244
|
-
return !includeDeclarations && isDeclarationFile(filePath)
|
|
245
|
-
? { verdict: "generated", evidence: "strong" }
|
|
246
|
-
: { verdict: "clean" };
|
|
247
|
-
}
|
|
248
|
-
return classifyGeneratedOrArtifactDetailed(filePath, {
|
|
249
|
-
readContentHeader: options?.inspectGeneratedHeaders !== false,
|
|
250
|
-
includeDeclarations: !includeDeclarations,
|
|
251
|
-
});
|
|
252
|
-
}
|
|
253
|
-
function shouldSkipGeneratedOrArtifact(filePath, options) {
|
|
254
|
-
return (classifySkipGeneratedOrArtifact(filePath, options).verdict === "generated");
|
|
255
|
-
}
|
|
256
|
-
/**
|
|
257
|
-
* Extract the basename (filename without extension) from a path.
|
|
258
|
-
*/
|
|
259
|
-
function getBasename(filePath) {
|
|
260
|
-
const ext = path.extname(filePath);
|
|
261
|
-
return path.basename(filePath, ext);
|
|
262
|
-
}
|
|
263
|
-
/**
|
|
264
|
-
* Get the directory of a file path.
|
|
265
|
-
*/
|
|
266
|
-
function getDir(filePath) {
|
|
267
|
-
return path.dirname(filePath);
|
|
268
|
-
}
|
|
269
|
-
/**
|
|
270
|
-
* Check if a file has a higher-precedence source sibling.
|
|
271
|
-
* Returns the shadowing source file path if found, null otherwise.
|
|
272
|
-
*/
|
|
273
|
-
export function findSourceSibling(filePath, probeCache) {
|
|
274
|
-
for (const candidate of sourceTwinCandidates(filePath)) {
|
|
275
|
-
if (probeExists(candidate, probeCache))
|
|
276
|
-
return candidate;
|
|
277
|
-
}
|
|
278
|
-
// Keep the legacy non-JS source policies (Vue/Svelte/CoffeeScript) on the
|
|
279
|
-
// same seam without making them part of the JS/TS twin matrix above.
|
|
280
|
-
const ext = path.extname(filePath).toLowerCase();
|
|
281
|
-
const dir = getDir(filePath);
|
|
282
|
-
const base = getBasename(filePath);
|
|
283
|
-
for (const [sourceExt, shadowedExts] of Object.entries(SOURCE_PRECEDENCE)) {
|
|
284
|
-
if (!sourceExtsForCompiledExt(sourceExt).length &&
|
|
285
|
-
shadowedExts.includes(ext)) {
|
|
286
|
-
const siblingPath = path.join(dir, base + sourceExt);
|
|
287
|
-
if (probeExists(siblingPath, probeCache))
|
|
288
|
-
return siblingPath;
|
|
289
|
-
}
|
|
290
|
-
}
|
|
291
|
-
return null;
|
|
292
|
-
}
|
|
293
|
-
/**
|
|
294
|
-
* Check if a file is a build artifact (has a source sibling).
|
|
295
|
-
*
|
|
296
|
-
* @param probeCache - Optional per-walk memo (see {@link ArtifactProbeCache}).
|
|
297
|
-
* Omit for the original, uncached behavior.
|
|
298
|
-
*/
|
|
299
|
-
function sourceExtsForCompiledExt(sourceExt) {
|
|
300
|
-
return sourceExt === ".ts" ||
|
|
301
|
-
sourceExt === ".tsx" ||
|
|
302
|
-
sourceExt === ".mts" ||
|
|
303
|
-
sourceExt === ".cts"
|
|
304
|
-
? [sourceExt]
|
|
305
|
-
: [];
|
|
306
|
-
}
|
|
307
|
-
export function isBuildArtifact(filePath, probeCache) {
|
|
308
|
-
return findSourceSibling(filePath, probeCache) !== null;
|
|
309
|
-
}
|
|
310
|
-
/**
|
|
311
|
-
* Filter a list of files, removing build artifacts that have source siblings
|
|
312
|
-
* plus likely generated/codegen artifacts.
|
|
313
|
-
* Returns de-duplicated list keeping only highest-precedence source files.
|
|
314
|
-
*/
|
|
315
|
-
export function filterSourceFiles(filePaths, options) {
|
|
316
|
-
// Track which files we're keeping and why we're skipping others
|
|
317
|
-
const keep = [];
|
|
318
|
-
const skipReasons = new Map(); // skipped file -> kept source
|
|
319
|
-
// This is itself one enumeration over `filePaths`, so a per-call memo is
|
|
320
|
-
// safe by the same point-in-time-snapshot reasoning as the directory
|
|
321
|
-
// walkers below (refs #191).
|
|
322
|
-
const probeCache = createArtifactProbeCache();
|
|
323
|
-
for (const filePath of filePaths) {
|
|
324
|
-
const sourceSibling = findSourceSibling(filePath, probeCache);
|
|
325
|
-
if (sourceSibling) {
|
|
326
|
-
// This is a build artifact, skip it
|
|
327
|
-
skipReasons.set(filePath, sourceSibling);
|
|
328
|
-
}
|
|
329
|
-
else if (shouldSkipGeneratedOrArtifact(filePath, options)) {
|
|
330
|
-
// Generated/codegen outputs are not hand-written source.
|
|
331
|
-
skipReasons.set(filePath, "generated-or-artifact");
|
|
332
|
-
}
|
|
333
|
-
else {
|
|
334
|
-
// No higher-precedence source, keep it
|
|
335
|
-
keep.push(filePath);
|
|
336
|
-
}
|
|
337
|
-
}
|
|
338
|
-
return keep;
|
|
339
|
-
}
|
|
340
|
-
/**
|
|
341
|
-
* Coerce a caller-supplied cap to a finite positive integer, falling back to
|
|
342
|
-
* the module default — omitted / non-finite / non-positive means the FINITE
|
|
343
|
-
* default, never `Infinity` (#250/#747/#760: an unbounded walk was the bug).
|
|
344
|
-
*/
|
|
345
|
-
function resolveFiniteCap(raw, fallback) {
|
|
346
|
-
return typeof raw === "number" && Number.isFinite(raw) && raw > 0
|
|
347
|
-
? Math.floor(raw)
|
|
348
|
-
: fallback;
|
|
349
|
-
}
|
|
350
|
-
function resolveCollectionConfig(rootDir, options, config) {
|
|
351
|
-
const requestedMax = resolveFiniteCap(options?.maxFiles, DEFAULT_MAX_SOURCE_FILES);
|
|
352
|
-
// Slow-FS mode (#462): the sync collector can't yield to the event loop, so
|
|
353
|
-
// on a measured-slow filesystem (9p/drvfs/NFS) clamp its walk to a much
|
|
354
|
-
// smaller cap regardless of what the caller asked for. The async twin
|
|
355
|
-
// (`collectSourceFilesAsync`) yields every N entries and keeps its normal
|
|
356
|
-
// cap — callers that can go async should prefer it instead of relying on
|
|
357
|
-
// this clamp.
|
|
358
|
-
const maxFiles = config?.clampForSlowFsSyncWalk === true && isSlowFs(rootDir)
|
|
359
|
-
? Math.min(requestedMax, SLOW_FS_REDUCED_MAX_FILES)
|
|
360
|
-
: requestedMax;
|
|
361
|
-
return {
|
|
362
|
-
ignoreMatcher: getProjectIgnoreMatcher(rootDir),
|
|
363
|
-
extraExcludePatterns: options?.excludeDirs ?? [],
|
|
364
|
-
extensions: new Set(options?.extensions || ALL_SCANNABLE_EXTENSIONS),
|
|
365
|
-
maxFiles,
|
|
366
|
-
maxScanEntries: resolveFiniteCap(options?.maxScanEntries, DEFAULT_MAX_SCAN_ENTRIES),
|
|
367
|
-
options,
|
|
368
|
-
};
|
|
369
|
-
}
|
|
370
|
-
/**
|
|
371
|
-
* Decide how to handle a single directory entry. Returns the subdirectory to
|
|
372
|
-
* recurse into (`recurseInto`), the source file to keep (`keepFile`), or
|
|
373
|
-
* neither (skip). Shared verbatim by the sync and async collectors so they
|
|
374
|
-
* produce identical results — the only difference between the two is that the
|
|
375
|
-
* async variant yields to the event loop every N entries.
|
|
376
|
-
*/
|
|
377
|
-
function classifyEntry(entry, fullPath, cfg, probeCache, skipCounters) {
|
|
378
|
-
const { ignoreMatcher, extraExcludePatterns, extensions, options } = cfg;
|
|
379
|
-
if (entry.isDirectory()) {
|
|
380
|
-
const canRecurse = shouldRecurseIntoDir(entry, fullPath, {
|
|
381
|
-
ignoreMatcher,
|
|
382
|
-
extraExcludeDirs: extraExcludePatterns,
|
|
383
|
-
skipGeneratedArtifactDirs: options?.includeGenerated !== true,
|
|
384
|
-
followSymlinks: options?.followSymlinks === true,
|
|
385
|
-
},
|
|
386
|
-
// #1107 phase 2: counts one event per PRUNED DIRECTORY, not per file
|
|
387
|
-
// inside it — see `generatedDirSkips`'s doc on `SourceCollectionResult`.
|
|
388
|
-
skipCounters
|
|
389
|
-
? () => {
|
|
390
|
-
skipCounters.generatedDirSkips += 1;
|
|
391
|
-
}
|
|
392
|
-
: undefined);
|
|
393
|
-
if (!canRecurse)
|
|
394
|
-
return {};
|
|
395
|
-
return { recurseInto: fullPath };
|
|
396
|
-
}
|
|
397
|
-
if (entry.isFile()) {
|
|
398
|
-
// #1974: extension gate before isIgnored — isIgnored recompiles minimatch
|
|
399
|
-
// patterns per ancestor dir per call, so a large ignored-but-not-dir-
|
|
400
|
-
// prunable pile (e.g. wal/*.log) should never pay that cost for files
|
|
401
|
-
// the extension gate would have dropped anyway.
|
|
402
|
-
const ext = path.extname(entry.name).toLowerCase();
|
|
403
|
-
if (!extensions.has(ext))
|
|
404
|
-
return {};
|
|
405
|
-
if (ignoreMatcher.isIgnored(fullPath, false))
|
|
406
|
-
return {};
|
|
407
|
-
// Skip if this is a build artifact or generated/codegen output.
|
|
408
|
-
// #1107: counted separately (both are observability-only — neither
|
|
409
|
-
// changes what gets skipped) so an invisible coverage hole (a real
|
|
410
|
-
// `src/gen.ts` silently dropped by the name heuristic) is at least
|
|
411
|
-
// visible via `SourceCollectionResult` and the walk's rollup log line.
|
|
412
|
-
if (isBuildArtifact(fullPath, probeCache)) {
|
|
413
|
-
if (skipCounters)
|
|
414
|
-
skipCounters.buildArtifactSkips += 1;
|
|
415
|
-
return {};
|
|
416
|
-
}
|
|
417
|
-
// #1107 phase 2: the content-probe escape hatch can rescue a WEAK
|
|
418
|
-
// name-only match ("override") instead of skipping it — see
|
|
419
|
-
// `classifyGeneratedOrArtifactDetailed`'s doc for the evidence
|
|
420
|
-
// order/tradeoff. `evidence` additionally distinguishes a STRONG/
|
|
421
|
-
// content-CONFIRMED skip (expected, not a coverage-hole signal) from
|
|
422
|
-
// the residual "name-only" skip (unconfirmed — the one bucket a
|
|
423
|
-
// tool-facing notice should actually key off).
|
|
424
|
-
const classification = classifySkipGeneratedOrArtifact(fullPath, options);
|
|
425
|
-
if (classification.verdict === "generated") {
|
|
426
|
-
if (skipCounters) {
|
|
427
|
-
skipCounters.generatedOrArtifactSkips += 1;
|
|
428
|
-
if (classification.evidence === "name-only") {
|
|
429
|
-
skipCounters.generatedNameOnlySkips += 1;
|
|
430
|
-
}
|
|
431
|
-
}
|
|
432
|
-
return {};
|
|
433
|
-
}
|
|
434
|
-
if (classification.verdict === "override" && skipCounters) {
|
|
435
|
-
skipCounters.generatedNameOverrides += 1;
|
|
436
|
-
}
|
|
437
|
-
return { keepFile: fullPath };
|
|
438
|
-
}
|
|
439
|
-
return {};
|
|
440
|
-
}
|
|
441
|
-
function createEntryBudget(limit) {
|
|
442
|
-
return { visited: 0, limit, exceeded: false };
|
|
443
|
-
}
|
|
444
|
-
/**
|
|
445
|
-
* Charge one visited entry against the budget. Returns false — permanently,
|
|
446
|
-
* once tripped — when the walk must stop.
|
|
447
|
-
*/
|
|
448
|
-
function chargeEntryBudget(budget) {
|
|
449
|
-
if (budget.exceeded)
|
|
450
|
-
return false;
|
|
451
|
-
budget.visited += 1;
|
|
452
|
-
if (budget.visited > budget.limit)
|
|
453
|
-
budget.exceeded = true;
|
|
454
|
-
return !budget.exceeded;
|
|
455
|
-
}
|
|
456
|
-
/**
|
|
457
|
-
* Budget-aware core of {@link collectSourceFiles} (#760). Same walk, same
|
|
458
|
-
* list — plus `entryBudgetExceeded` so callers can tell a complete
|
|
459
|
-
* enumeration from a truncated best-effort one. The plain collector wraps
|
|
460
|
-
* this, keeping the existing `string[]` return contract intact.
|
|
461
|
-
*/
|
|
462
|
-
export function collectSourceFilesWithBudget(dir, options) {
|
|
463
|
-
const rootDir = path.resolve(dir);
|
|
464
|
-
const cfg = resolveCollectionConfig(rootDir, options, {
|
|
465
|
-
clampForSlowFsSyncWalk: true,
|
|
466
|
-
});
|
|
467
|
-
const kept = createKeptFilesAccumulator(cfg.maxFiles, options?.prioritizeCodeKinds === true);
|
|
468
|
-
// Per-walk sibling-probe memo (refs #191, item 1). Created here, discarded
|
|
469
|
-
// on return — never persisted across calls.
|
|
470
|
-
const probeCache = createArtifactProbeCache();
|
|
471
|
-
const budget = createEntryBudget(cfg.maxScanEntries);
|
|
472
|
-
// #1107: per-walk skip counters, discarded on return like the probe cache.
|
|
473
|
-
const skipCounters = createSourceWalkSkipCounters();
|
|
474
|
-
// #761: immediate-descent recursion driver (result-array order preserved),
|
|
475
|
-
// with both caps kept as this walker's own per-entry policy: the hard
|
|
476
|
-
// `maxFiles` results cap (#250) is checked BEFORE charging the entry budget
|
|
477
|
-
// (#760), and a file that reaches `maxFiles` is the last one kept — the cap
|
|
478
|
-
// then trips on the following entry, matching the pre-#761 loop exactly.
|
|
479
|
-
walkTreeRecursiveSync(rootDir, (entry, fullPath) => {
|
|
480
|
-
if (kept.isFull())
|
|
481
|
-
return "stop"; // hard cap (#250)
|
|
482
|
-
if (!chargeEntryBudget(budget))
|
|
483
|
-
return "stop"; // entry budget (#760)
|
|
484
|
-
const { recurseInto, keepFile } = classifyEntry(entry, fullPath, cfg, probeCache, skipCounters);
|
|
485
|
-
if (recurseInto)
|
|
486
|
-
return "recurse";
|
|
487
|
-
if (keepFile)
|
|
488
|
-
kept.push(keepFile);
|
|
489
|
-
return "skip";
|
|
490
|
-
});
|
|
491
|
-
logSourceWalkSkipsIfAny(rootDir, skipCounters);
|
|
492
|
-
return {
|
|
493
|
-
files: kept.list(),
|
|
494
|
-
entryBudgetExceeded: budget.exceeded,
|
|
495
|
-
generatedOrArtifactSkips: skipCounters.generatedOrArtifactSkips,
|
|
496
|
-
buildArtifactSkips: skipCounters.buildArtifactSkips,
|
|
497
|
-
generatedDirSkips: skipCounters.generatedDirSkips,
|
|
498
|
-
generatedNameOverrides: skipCounters.generatedNameOverrides,
|
|
499
|
-
generatedNameOnlySkips: skipCounters.generatedNameOnlySkips,
|
|
500
|
-
};
|
|
501
|
-
}
|
|
502
|
-
export function collectSourceFiles(dir, options) {
|
|
503
|
-
return collectSourceFilesWithBudget(dir, options).files;
|
|
504
|
-
}
|
|
505
|
-
/**
|
|
506
|
-
* Async, chunked-yield twin of {@link collectSourceFiles}. Returns the exact
|
|
507
|
-
* same file list (it shares `classifyEntry`), but yields to the event loop
|
|
508
|
-
* on a monotonic time budget so a large tree never holds the loop in
|
|
509
|
-
* one synchronous burst.
|
|
510
|
-
*
|
|
511
|
-
* Why this exists: on a ~2k-file project the synchronous `collectSourceFiles`
|
|
512
|
-
* blocks the loop for ~1.5s on a cold scan (≈70% of that is the per-file
|
|
513
|
-
* generated-header read inside `shouldSkipGeneratedOrArtifact`). When that runs
|
|
514
|
-
* on a hook tick — even a deferred background one — pi's TUI input stalls for
|
|
515
|
-
* the whole burst. Background / deferred callers should prefer this variant;
|
|
516
|
-
* the sync version is kept for synchronous call sites and tests.
|
|
517
|
-
*/
|
|
518
|
-
export async function collectSourceFilesAsync(dir, options) {
|
|
519
|
-
return (await collectSourceFilesWithBudgetAsync(dir, options)).files;
|
|
520
|
-
}
|
|
521
|
-
/**
|
|
522
|
-
* Budget-aware core of {@link collectSourceFilesAsync} (#760) — the async twin
|
|
523
|
-
* of {@link collectSourceFilesWithBudget}, with the same
|
|
524
|
-
* `entryBudgetExceeded` contract.
|
|
525
|
-
*/
|
|
526
|
-
export async function collectSourceFilesWithBudgetAsync(dir, options) {
|
|
527
|
-
const rootDir = path.resolve(dir);
|
|
528
|
-
const cfg = resolveCollectionConfig(rootDir, options);
|
|
529
|
-
const kept = createKeptFilesAccumulator(cfg.maxFiles, options?.prioritizeCodeKinds === true);
|
|
530
|
-
// Per-walk sibling-probe memo (refs #191, item 1). A single async walk is
|
|
531
|
-
// still one point-in-time snapshot despite yielding between chunks, so
|
|
532
|
-
// caching across the whole call remains invalidation-free.
|
|
533
|
-
const probeCache = createArtifactProbeCache();
|
|
534
|
-
const budget = createEntryBudget(cfg.maxScanEntries);
|
|
535
|
-
// #1107: per-walk skip counters, discarded on return like the probe cache.
|
|
536
|
-
const skipCounters = createSourceWalkSkipCounters();
|
|
537
|
-
// #761: shared depth-first stack driver (its reverse-push mirrors the sync
|
|
538
|
-
// collector's left-to-right recursion). The async collector charges the
|
|
539
|
-
// entry budget (#760) FIRST, then checks the `maxFiles` cap immediately
|
|
540
|
-
// after keeping a file — subtly different from the sync collector's ordering
|
|
541
|
-
// but preserved verbatim, so both stay byte-identical to their pre-#761 form.
|
|
542
|
-
await walkTreeStackAsync(rootDir, (entry, fullPath) => {
|
|
543
|
-
options?.onEntryVisited?.();
|
|
544
|
-
if (!chargeEntryBudget(budget))
|
|
545
|
-
return "stop"; // entry budget (#760)
|
|
546
|
-
const { recurseInto, keepFile } = classifyEntry(entry, fullPath, cfg, probeCache, skipCounters);
|
|
547
|
-
if (recurseInto)
|
|
548
|
-
return "recurse";
|
|
549
|
-
if (keepFile) {
|
|
550
|
-
kept.push(keepFile);
|
|
551
|
-
if (kept.isFull())
|
|
552
|
-
return "stop"; // hard cap (#250)
|
|
553
|
-
}
|
|
554
|
-
return "skip";
|
|
555
|
-
}, {
|
|
556
|
-
// 50 entries/chunk keeps the worst-case synchronous burst under ~40ms
|
|
557
|
-
// even on a cold scan where every kept file pays the 4 KB generated-
|
|
558
|
-
// header read (measured on a 2k-file fixture). Larger values regress
|
|
559
|
-
// past the ~50ms event-loop budget; see PERF-AUDIT.md.
|
|
560
|
-
budgetMs: Math.max(1, options?.budgetMs ?? 8),
|
|
561
|
-
// #703: prime the tracked-files set once before the walk so a tracked
|
|
562
|
-
// file matching a `.gitignore`/global pattern still surfaces. Fail-open
|
|
563
|
-
// on no-git/spawn failure.
|
|
564
|
-
beforeWalk: () => cfg.ignoreMatcher.ensureTrackedIndex(),
|
|
565
|
-
});
|
|
566
|
-
logSourceWalkSkipsIfAny(rootDir, skipCounters);
|
|
567
|
-
return {
|
|
568
|
-
files: kept.list(),
|
|
569
|
-
entryBudgetExceeded: budget.exceeded,
|
|
570
|
-
generatedOrArtifactSkips: skipCounters.generatedOrArtifactSkips,
|
|
571
|
-
buildArtifactSkips: skipCounters.buildArtifactSkips,
|
|
572
|
-
generatedDirSkips: skipCounters.generatedDirSkips,
|
|
573
|
-
generatedNameOverrides: skipCounters.generatedNameOverrides,
|
|
574
|
-
generatedNameOnlySkips: skipCounters.generatedNameOnlySkips,
|
|
575
|
-
};
|
|
576
|
-
}
|
|
577
|
-
/**
|
|
578
|
-
* Get statistics about source file filtering for debugging/monitoring.
|
|
579
|
-
*/
|
|
580
|
-
export function getFilterStats(allFiles, filteredFiles) {
|
|
581
|
-
const skipped = allFiles.length - filteredFiles.length;
|
|
582
|
-
const byType = {};
|
|
583
|
-
// Count what we skipped
|
|
584
|
-
for (const file of allFiles) {
|
|
585
|
-
if (!filteredFiles.includes(file)) {
|
|
586
|
-
const ext = path.extname(file).toLowerCase();
|
|
587
|
-
byType[ext] = (byType[ext] || 0) + 1;
|
|
588
|
-
}
|
|
589
|
-
}
|
|
590
|
-
return {
|
|
591
|
-
total: allFiles.length,
|
|
592
|
-
kept: filteredFiles.length,
|
|
593
|
-
skipped,
|
|
594
|
-
byType,
|
|
595
|
-
};
|
|
596
|
-
}
|