@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,509 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* gitleaks client for pi-lens
|
|
3
|
-
*
|
|
4
|
-
* Surfaces committed secrets (API keys, tokens, passwords, certificates)
|
|
5
|
-
* detected by Aaron Vargas's `gitleaks` scanner. Cross-language by design
|
|
6
|
-
* — gitleaks operates on bytes via regex + entropy, not AST.
|
|
7
|
-
*
|
|
8
|
-
* Lifecycle:
|
|
9
|
-
* - session_start scan (via the existing `runTask(setImmediate)` wrapper)
|
|
10
|
-
* - turn_end advisory reads the cached result and surfaces top N findings
|
|
11
|
-
* - per-edit scope: skipped — secrets either are or aren't in a file;
|
|
12
|
-
* re-scanning every keystroke is wasteful when the cache is hot
|
|
13
|
-
*
|
|
14
|
-
* Detection gate (config-first per #130 default):
|
|
15
|
-
* - `.gitleaks.toml` / `.gitleaks.yaml` / `.gitleaksignore` at the
|
|
16
|
-
* project root, OR
|
|
17
|
-
* - `gitleaks` reference in `package.json` deps, OR
|
|
18
|
-
* - a git pre-commit hook (.husky/, .git/hooks/) referencing gitleaks
|
|
19
|
-
*
|
|
20
|
-
* `lens_diagnostics mode=full`'s fresh-fetch path (`clients/project-diagnostics/
|
|
21
|
-
* fresh-fetch.ts`) uses a looser "smart-default" gate instead — any tracked
|
|
22
|
-
* git repo, via `hasGitRepo` — since that's an explicitly-requested
|
|
23
|
-
* comprehensive review where gitleaks's low cost and advisory-only findings
|
|
24
|
-
* make the stricter default needlessly conservative. session_start and
|
|
25
|
-
* per-edit dispatch keep the strict gate above unchanged.
|
|
26
|
-
*
|
|
27
|
-
* If the gate trips, the runner auto-installs gitleaks from GitHub releases
|
|
28
|
-
* (installer entry registered in clients/installer/index.ts) and runs
|
|
29
|
-
* `gitleaks detect --no-git --report-format json` against the analysis root.
|
|
30
|
-
*
|
|
31
|
-
* Scope policy (#1562): gitleaks is handed a `--config` generated per scan
|
|
32
|
-
* (`writeScopedGitleaksConfig`) that EXTENDS the project's own `.gitleaks.toml`
|
|
33
|
-
* (or gitleaks's built-in defaults, if none) with two additions — an
|
|
34
|
-
* `[allowlist] paths` entry per NARROW secrets-lane scratch tree
|
|
35
|
-
* (`scratch-tree-policy.ts`'s `SECRETS_LANE_SCRATCH_DIR_NAMES` — pi-ecosystem/
|
|
36
|
-
* agent data dirs, `node_modules`, `.git`, generic build caches; deliberately
|
|
37
|
-
* NOT the broader walker-parity `EXCLUDED_DIRS` list knip/jscpd use, which
|
|
38
|
-
* also drops real leak surfaces like `dist/`, `vendor/`, `.vscode/` — see that
|
|
39
|
-
* module's doc for the review-round probe that caught the too-broad first
|
|
40
|
-
* cut) and an `[allowlist] regexes` entry per known placeholder-secret shape
|
|
41
|
-
* (`YOUR_API_KEY`, `<your-key>`, `xxxxxxxx`, …). An allowlist entry is a
|
|
42
|
-
* POST-DETECTION filter, not a walk exclusion — gitleaks still visits every
|
|
43
|
-
* file; the allowlist only decides which raw hits get suppressed from the
|
|
44
|
-
* report. Deliberately NOT `.gitignore`-based — see `scratch-tree-policy.ts`'s
|
|
45
|
-
* module doc for why blanket gitignore-respect is wrong for a secrets scanner
|
|
46
|
-
* (an untracked `.env` with a real credential is exactly the case gitleaks
|
|
47
|
-
* exists to catch, and `.env` is commonly gitignored). `classifyAndFilterFindings`
|
|
48
|
-
* backstops the config with a TS-side re-classification. Findings under the
|
|
49
|
-
* secrets-lane scratch tier, in gitignored files, or inside nested repositories
|
|
50
|
-
* are DEMOTED (not deleted) to `severity: "info"` / `semantic: "none"` by the
|
|
51
|
-
* project-diagnostics adapter. They remain visible for an explicit audit but
|
|
52
|
-
* can never surface as blocking "leaked secret" alarms or automatic turn
|
|
53
|
-
* context. Tracked and ordinary untracked files remain blocking.
|
|
54
|
-
*
|
|
55
|
-
* Refs: #130, #1562
|
|
56
|
-
*/
|
|
57
|
-
import * as fs from "node:fs";
|
|
58
|
-
import * as os from "node:os";
|
|
59
|
-
import * as path from "node:path";
|
|
60
|
-
import { mkdtempSync } from "node:fs";
|
|
61
|
-
import { collectTrackedFiles, collectUntrackedIgnoredIds, } from "./git-tracked-ignore.js";
|
|
62
|
-
import { normalizeEphemeralMapKey, normalizeMapKey } from "./path-utils.js";
|
|
63
|
-
import { safeSpawnAsync } from "./safe-spawn.js";
|
|
64
|
-
import { SecurityScanClient } from "./security-scan-client.js";
|
|
65
|
-
import { getSecretsLaneAllowlistPaths, isUnderSecretsLaneScratchTree, } from "./scratch-tree-policy.js";
|
|
66
|
-
const EMPTY_RESULT = {
|
|
67
|
-
success: false,
|
|
68
|
-
findings: [],
|
|
69
|
-
};
|
|
70
|
-
const SCAN_TIMEOUT_MS = 120_000;
|
|
71
|
-
// gitleaks discovers its own config at `<source>/.gitleaks.toml` (or `.yaml`/
|
|
72
|
-
// `.yml`) when no `--config` is passed. Kept as a named constant so the
|
|
73
|
-
// generated scoped config (below) can EXTEND whichever of these the project
|
|
74
|
-
// already has, instead of silently replacing the project's own rules.
|
|
75
|
-
const LOCAL_GITLEAKS_CONFIG_NAMES = [
|
|
76
|
-
".gitleaks.toml",
|
|
77
|
-
".gitleaks.yaml",
|
|
78
|
-
".gitleaks.yml",
|
|
79
|
-
];
|
|
80
|
-
function findLocalGitleaksConfig(cwd) {
|
|
81
|
-
for (const name of LOCAL_GITLEAKS_CONFIG_NAMES) {
|
|
82
|
-
const candidate = path.join(cwd, name);
|
|
83
|
-
try {
|
|
84
|
-
if (fs.existsSync(candidate))
|
|
85
|
-
return candidate;
|
|
86
|
-
}
|
|
87
|
-
catch {
|
|
88
|
-
// non-fatal
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
return undefined;
|
|
92
|
-
}
|
|
93
|
-
// The #1562 incident: a curl doc example's `-H "Authorization: Bearer
|
|
94
|
-
// YOUR_API_KEY"` (cached under gitignored scratch, see the secrets-lane
|
|
95
|
-
// exclusion below) read as a leaked secret. These match gitleaks's own
|
|
96
|
-
// `Secret`/`Match` value case-insensitively, catching the canonical
|
|
97
|
-
// placeholder shapes: `YOUR_API_KEY`-style tokens, `<your-key>`-style angle
|
|
98
|
-
// brackets, run-of-`x` filler, and the common changeme/example/dummy family.
|
|
99
|
-
// Scoped to the whole matched value (`^...$`) so a REAL secret that merely
|
|
100
|
-
// contains the substring "key" is never caught by accident.
|
|
101
|
-
//
|
|
102
|
-
// #1562 review-round F3: regex 2's alternation required "key" to be prefixed
|
|
103
|
-
// (`api[-_ ]?key`) — the issue's own literal acceptance example, `<your-key>`
|
|
104
|
-
// (bare "key", no "api" prefix), didn't match. Added a bare `key` alternative;
|
|
105
|
-
// still safe because the match is scoped to the WHOLE bracketed value
|
|
106
|
-
// (`^<...>$`), so a real secret that happens to be wrapped in angle brackets
|
|
107
|
-
// AND merely contain the substring "key" still wouldn't collide with this —
|
|
108
|
-
// only a value that is ENTIRELY `<...key...>`-shaped does.
|
|
109
|
-
export const PLACEHOLDER_SECRET_REGEXES = [
|
|
110
|
-
String.raw `(?i)^(your|my|insert|replace|enter|add)[-_ ]?(the[-_ ]?)?(api[-_ ]?)?(key|token|secret|password|credential)s?$`,
|
|
111
|
-
String.raw `(?i)^<[^<>]*(api[-_ ]?key|token|secret|password|credential|key)[^<>]*>$`,
|
|
112
|
-
String.raw `(?i)^x{3,}$`,
|
|
113
|
-
String.raw `(?i)^(changeme|change[-_]me|example|placeholder|dummy|fake|redacted|xxxxxxxx)$`,
|
|
114
|
-
];
|
|
115
|
-
/**
|
|
116
|
-
* Build a temp gitleaks config that EXTENDS the project's own config (if any,
|
|
117
|
-
* else gitleaks's built-in defaults) with two additions:
|
|
118
|
-
* 1. `[allowlist] paths` — the NARROW secrets-lane scratch exclusion
|
|
119
|
-
* (`scratch-tree-policy.ts`'s `getSecretsLaneAllowlistPaths`, NOT the
|
|
120
|
-
* broader walker-parity `EXCLUDED_DIRS` list — #1562 review-round F1).
|
|
121
|
-
* 2. `[allowlist] regexes` — the placeholder-secret class above.
|
|
122
|
-
*
|
|
123
|
-
* An `[allowlist]` entry is a POST-DETECTION filter (#1562 review-round F4):
|
|
124
|
-
* gitleaks still visits every file under `--source`; the allowlist decides
|
|
125
|
-
* which of the raw hits it reports, it does not shrink the walk itself.
|
|
126
|
-
*
|
|
127
|
-
* gitleaks's `[extend]` allowlist merge is additive (append, not replace —
|
|
128
|
-
* see gitleaks/config/config.go), so a project's own curated allowlist keeps
|
|
129
|
-
* working unchanged; this only ever ADDS exclusions, never removes one the
|
|
130
|
-
* project opted into.
|
|
131
|
-
*
|
|
132
|
-
* Returns the generated file's path; caller owns cleanup (same temp dir as
|
|
133
|
-
* the report, removed together in `runScan`'s `finally`).
|
|
134
|
-
*/
|
|
135
|
-
export function writeScopedGitleaksConfig(outDir, cwd) {
|
|
136
|
-
const localConfig = findLocalGitleaksConfig(cwd);
|
|
137
|
-
const extendLine = localConfig
|
|
138
|
-
? `path = ${JSON.stringify(localConfig)}`
|
|
139
|
-
: "useDefault = true";
|
|
140
|
-
const pathPatterns = getSecretsLaneAllowlistPaths()
|
|
141
|
-
.map((p) => ` ${JSON.stringify(p)},`)
|
|
142
|
-
.join("\n");
|
|
143
|
-
const regexPatterns = PLACEHOLDER_SECRET_REGEXES.map((r) => ` ${JSON.stringify(r)},`).join("\n");
|
|
144
|
-
const toml = `[extend]
|
|
145
|
-
${extendLine}
|
|
146
|
-
|
|
147
|
-
[allowlist]
|
|
148
|
-
paths = [
|
|
149
|
-
${pathPatterns}
|
|
150
|
-
]
|
|
151
|
-
regexes = [
|
|
152
|
-
${regexPatterns}
|
|
153
|
-
]
|
|
154
|
-
`;
|
|
155
|
-
const configPath = path.join(outDir, "gitleaks-scoped-config.toml");
|
|
156
|
-
fs.writeFileSync(configPath, toml, "utf-8");
|
|
157
|
-
return configPath;
|
|
158
|
-
}
|
|
159
|
-
// --- Detection ---
|
|
160
|
-
/**
|
|
161
|
-
* Detect whether the project root has opted in to gitleaks via any of the
|
|
162
|
-
* standard signals. Config-first gating per the #130 default — gitleaks
|
|
163
|
-
* runs when the user has given us any indication they want it.
|
|
164
|
-
*
|
|
165
|
-
* Exported for tests and for callers that want the gate without instantiating
|
|
166
|
-
* the client.
|
|
167
|
-
*/
|
|
168
|
-
export function hasGitleaksSignal(cwd) {
|
|
169
|
-
const candidates = [...LOCAL_GITLEAKS_CONFIG_NAMES, ".gitleaksignore"];
|
|
170
|
-
for (const candidate of candidates) {
|
|
171
|
-
try {
|
|
172
|
-
if (fs.existsSync(path.join(cwd, candidate)))
|
|
173
|
-
return true;
|
|
174
|
-
}
|
|
175
|
-
catch {
|
|
176
|
-
// non-fatal
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
// Check package.json devDependencies / dependencies for any `gitleaks*`
|
|
180
|
-
// reference. Catches `gitleaks`, `lint-staged-gitleaks`, etc.
|
|
181
|
-
const pkgJsonPath = path.join(cwd, "package.json");
|
|
182
|
-
try {
|
|
183
|
-
if (fs.existsSync(pkgJsonPath)) {
|
|
184
|
-
const pkg = JSON.parse(fs.readFileSync(pkgJsonPath, "utf-8"));
|
|
185
|
-
const deps = { ...pkg.dependencies, ...pkg.devDependencies };
|
|
186
|
-
for (const name of Object.keys(deps)) {
|
|
187
|
-
if (name.toLowerCase().includes("gitleaks"))
|
|
188
|
-
return true;
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
catch {
|
|
193
|
-
// malformed package.json — don't treat as signal
|
|
194
|
-
}
|
|
195
|
-
// husky / git hooks referencing gitleaks
|
|
196
|
-
const hookCandidates = [
|
|
197
|
-
path.join(cwd, ".husky", "pre-commit"),
|
|
198
|
-
path.join(cwd, ".husky", "_", "pre-commit"),
|
|
199
|
-
path.join(cwd, ".git", "hooks", "pre-commit"),
|
|
200
|
-
];
|
|
201
|
-
for (const hook of hookCandidates) {
|
|
202
|
-
try {
|
|
203
|
-
if (!fs.existsSync(hook))
|
|
204
|
-
continue;
|
|
205
|
-
const content = fs.readFileSync(hook, "utf-8");
|
|
206
|
-
if (content.includes("gitleaks"))
|
|
207
|
-
return true;
|
|
208
|
-
}
|
|
209
|
-
catch {
|
|
210
|
-
// non-fatal
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
return false;
|
|
214
|
-
}
|
|
215
|
-
/**
|
|
216
|
-
* "Smart-default" tier from #130's own considered-but-unshipped options:
|
|
217
|
-
* fire whenever the project is a tracked git repo, not only when an explicit
|
|
218
|
-
* gitleaks signal is present. gitleaks's own scan target is "a git repo's
|
|
219
|
-
* history/tree" — nearly every project qualifies, so this is meaningfully
|
|
220
|
-
* looser than {@link hasGitleaksSignal}. Used ONLY by `mode=full`'s
|
|
221
|
-
* fresh-fetch path (an explicitly-requested comprehensive review, where
|
|
222
|
-
* gitleaks's low cost — ~10MB binary, no external DB pull — and advisory-only
|
|
223
|
-
* findings make the stricter opt-in gate needlessly conservative); session_start
|
|
224
|
-
* and per-edit dispatch keep the strict {@link hasGitleaksSignal} gate
|
|
225
|
-
* unchanged, so day-to-day noise/cost stays exactly as conservative as before.
|
|
226
|
-
*/
|
|
227
|
-
export function hasGitRepo(cwd) {
|
|
228
|
-
try {
|
|
229
|
-
return fs.existsSync(path.join(cwd, ".git"));
|
|
230
|
-
}
|
|
231
|
-
catch {
|
|
232
|
-
return false;
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
// --- Client ---
|
|
236
|
-
export class GitleaksClient extends SecurityScanClient {
|
|
237
|
-
constructor(verbose = false) {
|
|
238
|
-
super("gitleaks", verbose);
|
|
239
|
-
}
|
|
240
|
-
/**
|
|
241
|
-
* Static detection helper so callers can gate before constructing
|
|
242
|
-
* (matches `GovulncheckClient.hasGoModule` shape).
|
|
243
|
-
*/
|
|
244
|
-
static hasGitleaksSignal(cwd) {
|
|
245
|
-
return hasGitleaksSignal(cwd);
|
|
246
|
-
}
|
|
247
|
-
/** Smart-default tier (#130) — see {@link hasGitRepo}'s doc comment. */
|
|
248
|
-
static hasGitRepo(cwd) {
|
|
249
|
-
return hasGitRepo(cwd);
|
|
250
|
-
}
|
|
251
|
-
/**
|
|
252
|
-
* Auto-install via the GitHub-release path (registered in
|
|
253
|
-
* `clients/installer/index.ts`) when gitleaks isn't already on PATH.
|
|
254
|
-
* gitleaks uses `version` (no leading dashes) as its CLI verb.
|
|
255
|
-
*/
|
|
256
|
-
doEnsureAvailable() {
|
|
257
|
-
return this.ensureViaInstaller(["version"]);
|
|
258
|
-
}
|
|
259
|
-
/**
|
|
260
|
-
* Scan a directory tree for secrets.
|
|
261
|
-
*
|
|
262
|
-
* Skips early when the directory shows no gitleaks opt-in signal — unless
|
|
263
|
-
* `requireSignal: false` (the `mode=full` fresh-fetch path uses this to
|
|
264
|
-
* apply the looser #130 "smart-default" gate, {@link hasGitRepo}, instead;
|
|
265
|
-
* session_start and per-edit dispatch never pass this, so their behavior
|
|
266
|
-
* is unchanged). When gitleaks is unavailable, returns an empty result
|
|
267
|
-
* with an explanatory summary rather than failing the session_start task.
|
|
268
|
-
*
|
|
269
|
-
* Re-entrancy safe: concurrent calls against the same root share a
|
|
270
|
-
* single gitleaks process (mirrors `KnipClient` / `JscpdClient` /
|
|
271
|
-
* `GovulncheckClient`).
|
|
272
|
-
*/
|
|
273
|
-
async scan(cwd, options) {
|
|
274
|
-
const targetDir = path.resolve(cwd);
|
|
275
|
-
const scannedAt = new Date().toISOString();
|
|
276
|
-
const requireSignal = options?.requireSignal ?? true;
|
|
277
|
-
if (requireSignal && !GitleaksClient.hasGitleaksSignal(targetDir)) {
|
|
278
|
-
return {
|
|
279
|
-
...EMPTY_RESULT,
|
|
280
|
-
success: true,
|
|
281
|
-
scannedAt,
|
|
282
|
-
summary: "no gitleaks opt-in signal at project root",
|
|
283
|
-
};
|
|
284
|
-
}
|
|
285
|
-
if (!(await this.ensureAvailable())) {
|
|
286
|
-
return {
|
|
287
|
-
...EMPTY_RESULT,
|
|
288
|
-
scannedAt,
|
|
289
|
-
summary: "gitleaks not installed",
|
|
290
|
-
};
|
|
291
|
-
}
|
|
292
|
-
return this.dedupeScan(targetDir, () => this.runScan(targetDir));
|
|
293
|
-
}
|
|
294
|
-
async runScan(cwd) {
|
|
295
|
-
const scannedAt = new Date().toISOString();
|
|
296
|
-
const bin = this.binaryPath ?? "gitleaks";
|
|
297
|
-
const outDir = mkdtempSync(path.join(os.tmpdir(), "pi-lens-gitleaks-"));
|
|
298
|
-
const reportPath = path.join(outDir, "gitleaks-report.json");
|
|
299
|
-
try {
|
|
300
|
-
const configPath = writeScopedGitleaksConfig(outDir, cwd);
|
|
301
|
-
const result = await safeSpawnAsync(bin, [
|
|
302
|
-
"detect",
|
|
303
|
-
"--no-git",
|
|
304
|
-
"--source",
|
|
305
|
-
cwd,
|
|
306
|
-
"--config",
|
|
307
|
-
configPath,
|
|
308
|
-
"--report-format",
|
|
309
|
-
"json",
|
|
310
|
-
"--report-path",
|
|
311
|
-
reportPath,
|
|
312
|
-
"--exit-code",
|
|
313
|
-
"0",
|
|
314
|
-
"--no-banner",
|
|
315
|
-
], { cwd, timeout: SCAN_TIMEOUT_MS });
|
|
316
|
-
if (result.error) {
|
|
317
|
-
this.log(`Scan error: ${result.error.message}`);
|
|
318
|
-
return {
|
|
319
|
-
...EMPTY_RESULT,
|
|
320
|
-
scannedAt,
|
|
321
|
-
summary: result.error.message.slice(0, 200),
|
|
322
|
-
};
|
|
323
|
-
}
|
|
324
|
-
if (!fs.existsSync(reportPath)) {
|
|
325
|
-
// gitleaks writes the report file even when nothing is found.
|
|
326
|
-
// If the file is missing the scan likely errored before
|
|
327
|
-
// writing it — surface a summary line from stderr.
|
|
328
|
-
return {
|
|
329
|
-
...EMPTY_RESULT,
|
|
330
|
-
success: true,
|
|
331
|
-
scannedAt,
|
|
332
|
-
summary: (result.stderr ?? "").trim().split("\n")[0] || "no report produced",
|
|
333
|
-
};
|
|
334
|
-
}
|
|
335
|
-
const rawFindings = parseGitleaksReport(fs.readFileSync(reportPath, "utf-8"));
|
|
336
|
-
const findings = await classifyAndFilterFindings(rawFindings, cwd);
|
|
337
|
-
// #2154: the one gitleaks site that parsed a scan of this root.
|
|
338
|
-
return {
|
|
339
|
-
success: true,
|
|
340
|
-
analyzed: true,
|
|
341
|
-
findings,
|
|
342
|
-
scannedAt,
|
|
343
|
-
};
|
|
344
|
-
}
|
|
345
|
-
catch (err) {
|
|
346
|
-
return {
|
|
347
|
-
...EMPTY_RESULT,
|
|
348
|
-
scannedAt,
|
|
349
|
-
summary: err instanceof Error ? err.message.slice(0, 200) : String(err),
|
|
350
|
-
};
|
|
351
|
-
}
|
|
352
|
-
finally {
|
|
353
|
-
try {
|
|
354
|
-
fs.rmSync(outDir, { recursive: true, force: true });
|
|
355
|
-
}
|
|
356
|
-
catch {
|
|
357
|
-
// non-fatal
|
|
358
|
-
}
|
|
359
|
-
}
|
|
360
|
-
}
|
|
361
|
-
}
|
|
362
|
-
// --- Post-scan classification / filter ---
|
|
363
|
-
/**
|
|
364
|
-
* Backstop for the scoped-config secrets-lane exclusion above, plus the
|
|
365
|
-
* `pathStatus` observability field (#1562).
|
|
366
|
-
*
|
|
367
|
-
* Two things happen here, both defense-in-depth relative to the generated
|
|
368
|
-
* gitleaks config:
|
|
369
|
-
* 1. Any finding still under the NARROW secrets-lane scratch tier
|
|
370
|
-
* (`isUnderSecretsLaneScratchTree` — NOT the broader walker-parity
|
|
371
|
-
* `EXCLUDED_DIRS` list) is DEMOTED, never DROPPED (#1562 review-round
|
|
372
|
-
* F2: the observability criterion requires this value to actually be
|
|
373
|
-
* reachable, so a scratch finding survives with `pathStatus: "scratch"`
|
|
374
|
-
* and the adapter (`gitleaksFindingToProjectDiagnostic`) reports it as
|
|
375
|
-
* `severity: "info"`/`semantic: "none"` — visible for an audit read,
|
|
376
|
-
* but it can never surface as a blocking "leaked secret" alarm). We
|
|
377
|
-
* can't exercise gitleaks's own TOML-regex engine in unit tests, only
|
|
378
|
-
* assert the config we hand it, so this backstop guarantees the demotion
|
|
379
|
-
* even if the generated regex ever mismatches gitleaks's own path
|
|
380
|
-
* normalization.
|
|
381
|
-
* 2. A finding below a nested git boundary is labelled
|
|
382
|
-
* `nested-repository`. Parent scans must not claim ownership of a
|
|
383
|
-
* submodule's or nested repository's files.
|
|
384
|
-
* 3. Every OTHER finding gets `pathStatus` set from git's tracked/ignored
|
|
385
|
-
* view, so a future false-positive triage is a log read.
|
|
386
|
-
*
|
|
387
|
-
* `collectTrackedFiles`/`collectUntrackedIgnoredIds` degrade to `undefined`
|
|
388
|
-
* when git itself is unavailable (no repo, spawn failure) — findings just
|
|
389
|
-
* keep `pathStatus: undefined` rather than a guessed value (fail-open,
|
|
390
|
-
* matching `git-tracked-ignore.ts`'s own contract). Exported for unit tests.
|
|
391
|
-
*/
|
|
392
|
-
function isInsideNestedGitRepository(file, cwd) {
|
|
393
|
-
const root = path.resolve(cwd);
|
|
394
|
-
const absoluteFile = path.isAbsolute(file)
|
|
395
|
-
? path.resolve(file)
|
|
396
|
-
: path.resolve(root, file);
|
|
397
|
-
const relative = path.relative(root, absoluteFile);
|
|
398
|
-
if (relative === ".." ||
|
|
399
|
-
relative.startsWith(`..${path.sep}`) ||
|
|
400
|
-
path.isAbsolute(relative))
|
|
401
|
-
return false;
|
|
402
|
-
let directory = path.dirname(absoluteFile);
|
|
403
|
-
while (directory !== root) {
|
|
404
|
-
try {
|
|
405
|
-
if (fs.existsSync(path.join(directory, ".git")))
|
|
406
|
-
return true;
|
|
407
|
-
}
|
|
408
|
-
catch {
|
|
409
|
-
return false;
|
|
410
|
-
}
|
|
411
|
-
const parent = path.dirname(directory);
|
|
412
|
-
if (parent === directory)
|
|
413
|
-
return false;
|
|
414
|
-
directory = parent;
|
|
415
|
-
}
|
|
416
|
-
return false;
|
|
417
|
-
}
|
|
418
|
-
export async function classifyAndFilterFindings(findings, cwd) {
|
|
419
|
-
if (findings.length === 0)
|
|
420
|
-
return findings;
|
|
421
|
-
const [trackedIds, untrackedIgnoredIds] = await Promise.all([
|
|
422
|
-
collectTrackedFiles(cwd),
|
|
423
|
-
collectUntrackedIgnoredIds(cwd),
|
|
424
|
-
]);
|
|
425
|
-
const classified = [];
|
|
426
|
-
for (const finding of findings) {
|
|
427
|
-
if (isUnderSecretsLaneScratchTree(finding.file)) {
|
|
428
|
-
classified.push({ ...finding, pathStatus: "scratch" });
|
|
429
|
-
continue;
|
|
430
|
-
}
|
|
431
|
-
const absPath = path.isAbsolute(finding.file)
|
|
432
|
-
? finding.file
|
|
433
|
-
: path.resolve(cwd, finding.file);
|
|
434
|
-
if (isInsideNestedGitRepository(absPath, cwd)) {
|
|
435
|
-
classified.push({ ...finding, pathStatus: "nested-repository" });
|
|
436
|
-
continue;
|
|
437
|
-
}
|
|
438
|
-
let pathStatus;
|
|
439
|
-
if (trackedIds?.has(normalizeEphemeralMapKey(absPath))) {
|
|
440
|
-
pathStatus = "tracked";
|
|
441
|
-
}
|
|
442
|
-
else if (untrackedIgnoredIds?.has(normalizeMapKey(absPath))) {
|
|
443
|
-
pathStatus = "ignored";
|
|
444
|
-
}
|
|
445
|
-
else if (trackedIds !== undefined || untrackedIgnoredIds !== undefined) {
|
|
446
|
-
// At least one of the two git-backed sets resolved, so the absence
|
|
447
|
-
// from both is a real answer ("untracked, not gitignored") rather
|
|
448
|
-
// than an unresolved probe.
|
|
449
|
-
pathStatus = "untracked";
|
|
450
|
-
}
|
|
451
|
-
classified.push(pathStatus ? { ...finding, pathStatus } : finding);
|
|
452
|
-
}
|
|
453
|
-
return classified;
|
|
454
|
-
}
|
|
455
|
-
// --- Parser ---
|
|
456
|
-
/**
|
|
457
|
-
* Map gitleaks's JSON report (a flat array of finding objects) to our
|
|
458
|
-
* structured `GitleaksFinding[]` shape. Exported for unit tests.
|
|
459
|
-
*
|
|
460
|
-
* Gitleaks emits `null` (or `[]`) when no findings are present. Malformed
|
|
461
|
-
* input returns `[]` rather than throwing — gitleaks itself is occasionally
|
|
462
|
-
* truncated by upstream pipe failures.
|
|
463
|
-
*/
|
|
464
|
-
export function parseGitleaksReport(raw) {
|
|
465
|
-
if (!raw.trim())
|
|
466
|
-
return [];
|
|
467
|
-
let parsed;
|
|
468
|
-
try {
|
|
469
|
-
parsed = JSON.parse(raw);
|
|
470
|
-
}
|
|
471
|
-
catch {
|
|
472
|
-
return [];
|
|
473
|
-
}
|
|
474
|
-
if (!Array.isArray(parsed))
|
|
475
|
-
return [];
|
|
476
|
-
const findings = [];
|
|
477
|
-
for (const entry of parsed) {
|
|
478
|
-
if (!entry || typeof entry !== "object")
|
|
479
|
-
continue;
|
|
480
|
-
const e = entry;
|
|
481
|
-
const ruleId = typeof e.RuleID === "string" ? e.RuleID : undefined;
|
|
482
|
-
const file = typeof e.File === "string" ? e.File : undefined;
|
|
483
|
-
const startLine = typeof e.StartLine === "number"
|
|
484
|
-
? e.StartLine
|
|
485
|
-
: Number.parseInt(String(e.StartLine ?? ""), 10);
|
|
486
|
-
if (!ruleId || !file || !Number.isFinite(startLine))
|
|
487
|
-
continue;
|
|
488
|
-
findings.push({
|
|
489
|
-
ruleId,
|
|
490
|
-
description: typeof e.Description === "string" ? e.Description : undefined,
|
|
491
|
-
file,
|
|
492
|
-
startLine,
|
|
493
|
-
endLine: typeof e.EndLine === "number"
|
|
494
|
-
? e.EndLine
|
|
495
|
-
: Number.isFinite(Number(e.EndLine))
|
|
496
|
-
? Number(e.EndLine)
|
|
497
|
-
: undefined,
|
|
498
|
-
match: typeof e.Match === "string" ? e.Match : undefined,
|
|
499
|
-
secret: typeof e.Secret === "string" ? e.Secret : undefined,
|
|
500
|
-
tags: Array.isArray(e.Tags)
|
|
501
|
-
? e.Tags.filter((t) => typeof t === "string")
|
|
502
|
-
: undefined,
|
|
503
|
-
commit: typeof e.Commit === "string" ? e.Commit : undefined,
|
|
504
|
-
author: typeof e.Author === "string" ? e.Author : undefined,
|
|
505
|
-
date: typeof e.Date === "string" ? e.Date : undefined,
|
|
506
|
-
});
|
|
507
|
-
}
|
|
508
|
-
return findings;
|
|
509
|
-
}
|
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Go Client for pi-lens
|
|
3
|
-
*
|
|
4
|
-
* Provides Go type checking and linting via gopls and go vet.
|
|
5
|
-
*
|
|
6
|
-
* Requires: gopls (go install golang.org/x/tools/gopls@latest)
|
|
7
|
-
* Docs: https://pkg.go.dev/golang.org/x/tools/gopls
|
|
8
|
-
*/
|
|
9
|
-
import { createSubsystemLogger } from "./extension-log.js";
|
|
10
|
-
import * as path from "node:path";
|
|
11
|
-
import { createToolchainAvailability, } from "./dispatch/runners/utils/toolchain-availability.js";
|
|
12
|
-
// --- Common install paths ---
|
|
13
|
-
const GO_WINDOWS_PATHS = [
|
|
14
|
-
"C:\\Program Files\\Go\\bin\\go.exe",
|
|
15
|
-
"C:\\Go\\bin\\go.exe",
|
|
16
|
-
"go.exe", // PATH
|
|
17
|
-
];
|
|
18
|
-
/** Budget for the PATH candidate's `go version` probe, ms. */
|
|
19
|
-
const PROBE_TIMEOUT_MS = 3_000;
|
|
20
|
-
const GO_UNIX_PATHS = [
|
|
21
|
-
"/usr/local/go/bin/go",
|
|
22
|
-
"/usr/bin/go",
|
|
23
|
-
"go", // PATH
|
|
24
|
-
];
|
|
25
|
-
// --- Client ---
|
|
26
|
-
export class GoClient {
|
|
27
|
-
/**
|
|
28
|
-
* Availability lifecycle, behind the shared transient-aware latch (#1476).
|
|
29
|
-
* The PATH candidate is resolved by spawning `go version` with a 3 s budget,
|
|
30
|
-
* so a host stall could latch "no Go toolchain" for the whole session and
|
|
31
|
-
* silently disable every Go diagnostic until restart.
|
|
32
|
-
*/
|
|
33
|
-
availability;
|
|
34
|
-
log;
|
|
35
|
-
constructor(verbose = false) {
|
|
36
|
-
this.log = verbose ? createSubsystemLogger("go") : () => { };
|
|
37
|
-
this.availability = createToolchainAvailability({
|
|
38
|
-
tool: "go",
|
|
39
|
-
label: "Go",
|
|
40
|
-
windowsPaths: GO_WINDOWS_PATHS,
|
|
41
|
-
unixPaths: GO_UNIX_PATHS,
|
|
42
|
-
probeArgs: ["version"],
|
|
43
|
-
budgetMs: PROBE_TIMEOUT_MS,
|
|
44
|
-
log: (msg) => this.log(msg),
|
|
45
|
-
});
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* Find go executable path (async — probes PATH candidates off the event loop).
|
|
49
|
-
*/
|
|
50
|
-
async findGoPathAsync() {
|
|
51
|
-
return this.availability.findPath();
|
|
52
|
-
}
|
|
53
|
-
/**
|
|
54
|
-
* Check if Go is installed (cached)
|
|
55
|
-
*/
|
|
56
|
-
async isGoAvailableAsync() {
|
|
57
|
-
return this.availability.isAvailable();
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* Check if a file is a Go file
|
|
61
|
-
*/
|
|
62
|
-
isGoFile(filePath) {
|
|
63
|
-
return path.extname(filePath).toLowerCase() === ".go";
|
|
64
|
-
}
|
|
65
|
-
/** Forget the memoized go path and latched availability verdict — #2455. */
|
|
66
|
-
resetAvailability() {
|
|
67
|
-
this.availability.reset();
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
/**
|
|
71
|
-
* The one `GoClient` this process owns (#2455 fix round 4, F2).
|
|
72
|
-
*
|
|
73
|
-
* `GoClient` is not stateless: it wraps a `createToolchainAvailability` latch
|
|
74
|
-
* whose probe-class "missing" verdict never expires (`isLatchingOutcome`), and
|
|
75
|
-
* `resetGoAvailability` below re-arms exactly ONE such latch. Round 2 shipped
|
|
76
|
-
* with two instances — `dispatch/runners/go-vet.ts` built one for the runner
|
|
77
|
-
* and `bootstrap.ts` built another for `BootstrapClients.goClient`, which is
|
|
78
|
-
* the object `handleSessionStart` reads for its "Active tools" line. The
|
|
79
|
-
* session reset cleared the runner's copy and left the session-start copy
|
|
80
|
-
* latched, so a go toolchain installed between sessions stayed invisible on
|
|
81
|
-
* the surface a user actually sees. One instance, in the module that owns the
|
|
82
|
-
* class, is what makes the reset total; `tests/clients/toolchain-client-singleton.test.ts`
|
|
83
|
-
* holds the line.
|
|
84
|
-
*/
|
|
85
|
-
export const goClient = new GoClient();
|
|
86
|
-
/**
|
|
87
|
-
* Forget `goClient`'s memoized go path and latched availability verdict —
|
|
88
|
-
* #2455. Same #1496/#1535 shape as `resetZizmorTokenAvailability`; wired into
|
|
89
|
-
* `handleSessionStart` beside it (`clients/runtime-session.ts`) so a go
|
|
90
|
-
* toolchain installed mid-process is observed by the next session instead of
|
|
91
|
-
* staying "missing" for the rest of the process's life.
|
|
92
|
-
*
|
|
93
|
-
* This module — not `go-vet.ts` — because the reset must sit beside the single
|
|
94
|
-
* instance it clears (#2455 fix round 4, F2). It was invisible to the
|
|
95
|
-
* session-state sweep before round 2, but not for the reason an earlier draft
|
|
96
|
-
* of this comment gave (#2455 fix round 3, F4): the sweep skips any file
|
|
97
|
-
* exporting no reset at all, so widening the container predicate to "any class
|
|
98
|
-
* declared in `clients/`" could not have surfaced it. Adding this reset is
|
|
99
|
-
* what made the file visible — the fix preceded the detection, and the
|
|
100
|
-
* pair-with-reset blind spot (MISS 3 in `SWEEP_HEURISTIC_LIMITS`) is unchanged.
|
|
101
|
-
*/
|
|
102
|
-
export function resetGoAvailability() {
|
|
103
|
-
goClient.resetAvailability();
|
|
104
|
-
}
|