@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,37 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The single post-autofix instruction about a written file (#1590).
|
|
3
|
-
*
|
|
4
|
-
* Two layers used to phrase this. `clients/pipeline.ts` claimed "the attached
|
|
5
|
-
* full content is authoritative" from changed-file membership alone, and
|
|
6
|
-
* `clients/runtime-tool-result.ts` — the only layer that sees the per-file
|
|
7
|
-
* attachment cap and the per-command aggregate budget — appended "too large to
|
|
8
|
-
* attach" for the same file. On a size-capped write the agent got both.
|
|
9
|
-
*
|
|
10
|
-
* The wording now lives here, and `handleToolResult` is the only caller: the
|
|
11
|
-
* pipeline supplies the data (display paths it already resolved) and the layer
|
|
12
|
-
* that made the attachment decision picks the sentence. Keeping the renderer
|
|
13
|
-
* out of `pipeline.ts` also keeps it real in tests that mock the pipeline away.
|
|
14
|
-
*/
|
|
15
|
-
/** Render the ONE post-autofix instruction for `decision`. */
|
|
16
|
-
export function renderPostAutofixNotice(notice, decision) {
|
|
17
|
-
const topFiles = notice.changedFiles
|
|
18
|
-
.slice(0, 8)
|
|
19
|
-
.map((f) => " - " + f)
|
|
20
|
-
.join("\n");
|
|
21
|
-
const overflow = notice.changedFiles.length > 8
|
|
22
|
-
? "\n - ... and " + (notice.changedFiles.length - 8) + " more"
|
|
23
|
-
: "";
|
|
24
|
-
const fileList = notice.changedFiles.length
|
|
25
|
-
? "\nModified files:\n" + topFiles + overflow
|
|
26
|
-
: "";
|
|
27
|
-
switch (decision) {
|
|
28
|
-
case "attached":
|
|
29
|
-
return `⚠️ **The attached full content for ${notice.targetPath} is authoritative after autofix. You MUST re-read any other modified side-effect files before editing them.**${fileList}`;
|
|
30
|
-
case "size-capped":
|
|
31
|
-
return `⚠️ **File was modified by auto-format/fix. You MUST re-read ${notice.targetPath} before making any further edits — the authoritative content is too large to attach.**${fileList}`;
|
|
32
|
-
case "aggregate-budget-degraded":
|
|
33
|
-
return `⚠️ **File was modified by auto-format/fix. You MUST re-read ${notice.targetPath} before making any further edits — the aggregate authoritative content for this command is too large to attach.**${fileList}`;
|
|
34
|
-
default:
|
|
35
|
-
return `⚠️ **File was modified by auto-format/fix. You MUST re-read modified file(s) before making any further edits — the content on disk has changed (whitespace, indentation, quotes, or code). Editing from memory will produce mismatches.**${fileList}`;
|
|
36
|
-
}
|
|
37
|
-
}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* One-shot invocation detection, shared across the session_start-scheduled
|
|
3
|
-
* background work that must NOT run — or retain the process — in print mode
|
|
4
|
-
* (#1154 quick-mode warmup, #1153 orphan-reaper).
|
|
5
|
-
*
|
|
6
|
-
* `pi -p` / `pi --print` is a one-shot: the host computes a single turn and
|
|
7
|
-
* exits. Work scheduled to warm caches / clean up state for a *future* session
|
|
8
|
-
* in the same process is pure waste in this mode AND — when it arms a
|
|
9
|
-
* referenced libuv handle (a non-`unref`'d timer, an LSP child, an fs walk)
|
|
10
|
-
* with no session_shutdown teardown — keeps the already-settled one-shot
|
|
11
|
-
* process alive. That is the referenced-handle retention class of
|
|
12
|
-
* #1097/#1110/#1148/#1149 and the located #1122 hypothesis-A concern.
|
|
13
|
-
*
|
|
14
|
-
* argv is read live (not captured at module load) so tests can drive it; the
|
|
15
|
-
* flag never changes within a real process, and there is no hot-path caller,
|
|
16
|
-
* so recomputing is free. This mirrors the print detection in
|
|
17
|
-
* `runtime-session.ts`'s `resolveStartupMode` — keep them a single source.
|
|
18
|
-
*/
|
|
19
|
-
export function isPrintMode(argv = process.argv) {
|
|
20
|
-
return argv.includes("--print") || argv.includes("-p");
|
|
21
|
-
}
|
|
@@ -1,228 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The #2506 probe-home redirect, whole: the decision, the per-process memo it
|
|
3
|
-
* is cached in, and the degradation event that decision produced.
|
|
4
|
-
*
|
|
5
|
-
* WHAT IT DECIDES. An ad-hoc probe against the BUILT `clients/*.js` — a bare
|
|
6
|
-
* `node -e`, a throwaway `.mjs`, a harness script — has no `PI_LENS_HOME` pin,
|
|
7
|
-
* so every logger and ledger it touches used to write into the maintainer's
|
|
8
|
-
* REAL `~/.pi-lens`. Confirmed live on 2026-09-02: two review probes left 42
|
|
9
|
-
* rows of `/p/.pi-lens.json` fixture garbage in real telemetry. When
|
|
10
|
-
* `PI_LENS_HOME` is unset and the process looks like a probe — `PILENS_PROBE=1`,
|
|
11
|
-
* a `cwd` inside a specific agent worktree, or a `cwd` under `os.tmpdir()` —
|
|
12
|
-
* `resolveProbeHomeDir()` answers with a per-probe directory instead.
|
|
13
|
-
*
|
|
14
|
-
* WHY IT ALL LIVES HERE and not beside its `getGlobalPiLensDir()` sibling in
|
|
15
|
-
* `file-utils.ts`, where round 2 of #2516 left it. `file-utils.ts` sits on an
|
|
16
|
-
* import cycle (it still does, via `safe-spawn.js` -> `resource-sampler.js` ->
|
|
17
|
-
* `instance-reaper.js` -> `file-utils.js`; the shorter route through
|
|
18
|
-
* `degradation-ledger.js` -> `extension-log.js` was this move's doing —
|
|
19
|
-
* `extension-log.ts` imported `file-utils.ts` for THIS function and nothing
|
|
20
|
-
* else, so the edge went with it, and the known-violations baseline dropped
|
|
21
|
-
* from 33 pinned cycles to 12 with none added). Fifteen log-family modules
|
|
22
|
-
* call `getGlobalPiLensLogDir()` at their OWN module
|
|
23
|
-
* top level. Under vitest's vite-SSR transform each import becomes a
|
|
24
|
-
* `__vite_ssr_import_N__` variable assigned in source order, so one of those
|
|
25
|
-
* top-level calls re-enters `file-utils.ts` while its body is only PARTWAY
|
|
26
|
-
* through those assignments — and a resolver sitting there then dereferences a
|
|
27
|
-
* binding that has not been assigned yet, throwing `ReferenceError: Cannot
|
|
28
|
-
* access '__vite_ssr_import_N__' before initialization`. Measured live: the
|
|
29
|
-
* re-entry arrives through `file-utils.ts`'s FIFTH import,
|
|
30
|
-
* `spawn-timeout-cooldown.js`, so every binding declared from the sixth import
|
|
31
|
-
* onward is unsafe on that path — which is most of the file.
|
|
32
|
-
*
|
|
33
|
-
* Round 2 of #2516 papered over that with an `isTestMode()` early return placed
|
|
34
|
-
* ahead of the first unsafe dereference. That was load-order luck, not a
|
|
35
|
-
* design: moving `file-utils.ts`'s own `isTestMode` import from fifth to last
|
|
36
|
-
* makes the GUARD LINE ITSELF throw the same error. It also DEFEATED the
|
|
37
|
-
* redirect for every process that has `VITEST` set but no `PI_LENS_HOME` pin —
|
|
38
|
-
* vitest's own globalSetup/child processes — sending their logs to the real
|
|
39
|
-
* home: the exact hermeticity hole the redirect exists to close.
|
|
40
|
-
*
|
|
41
|
-
* THIS module is off that cycle. It imports only node builtins and
|
|
42
|
-
* `path-utils.js`, itself a leaf (node builtins plus the vendored, zero-import
|
|
43
|
-
* `deps/minimatch.js`). A module off every cycle is fully evaluated before any
|
|
44
|
-
* importer's body runs — in plain ESM and under the vite-SSR transform alike —
|
|
45
|
-
* so none of its own bindings can ever be observed uninitialized, wherever an
|
|
46
|
-
* importer chooses to place the import. That is what makes the guard
|
|
47
|
-
* unnecessary rather than merely well-placed, and it is why module-scope
|
|
48
|
-
* `const`s (including the `Symbol.for` below) are ordinary here where they were
|
|
49
|
-
* a hazard in `file-utils.ts`.
|
|
50
|
-
*
|
|
51
|
-
* `tests/config/global-dir-probe-redirect.test.ts` pins the behaviour through
|
|
52
|
-
* real spawned `node` children, including the VITEST-set-but-unpinned case.
|
|
53
|
-
*/
|
|
54
|
-
import * as fs from "node:fs";
|
|
55
|
-
import * as os from "node:os";
|
|
56
|
-
import * as path from "node:path";
|
|
57
|
-
import { isUnderDir, normalizeFilePath } from "./path-utils.js";
|
|
58
|
-
/**
|
|
59
|
-
* The memo lives in a process-wide `globalThis` slot rather than a plain
|
|
60
|
-
* module-scope `let` so that a bundled `dist/index.js` and the loose
|
|
61
|
-
* `clients/*.js` loaded into the same process — the shape #335 ships — share
|
|
62
|
-
* ONE decision instead of memoizing two. A `Symbol.for` key is interned by
|
|
63
|
-
* string, so both copies of this module resolve to the same slot.
|
|
64
|
-
*/
|
|
65
|
-
const RESOLUTION_SLOT = Symbol.for("pi-lens.probe-home-state.resolution");
|
|
66
|
-
/** The memoized resolution for this process, or `undefined` before first use. */
|
|
67
|
-
export function getProbeHomeResolution() {
|
|
68
|
-
return globalThis[RESOLUTION_SLOT];
|
|
69
|
-
}
|
|
70
|
-
/**
|
|
71
|
-
* The degradation row for a redirect that actually happened, or `undefined`
|
|
72
|
-
* when this process was not redirected (or has not resolved yet).
|
|
73
|
-
* `degradation-ledger.ts`'s `getDegradationSummary()` is the only caller — it
|
|
74
|
-
* folds this at READ time rather than having the resolver push a row, because a
|
|
75
|
-
* direct import between `file-utils.ts` and `degradation-ledger.ts` in EITHER
|
|
76
|
-
* direction (a dynamic `import()` included) adds unpinned `no-client-cycles`
|
|
77
|
-
* violations to the cycle named in this module's doc comment.
|
|
78
|
-
*/
|
|
79
|
-
export function getProbeHomeRedirectEvent() {
|
|
80
|
-
return getProbeHomeResolution()?.event;
|
|
81
|
-
}
|
|
82
|
-
/**
|
|
83
|
-
* Where pi-lens writes its LOGS, ledger rows and debug dumps: `~/.pi-lens/` by
|
|
84
|
-
* default, exactly like `getGlobalPiLensDir()` in `file-utils.ts` — but
|
|
85
|
-
* redirected to a per-probe directory when this process looks like an ad-hoc
|
|
86
|
-
* probe rather than a real pi session (#2506).
|
|
87
|
-
*
|
|
88
|
-
* Every log-family writer routes here: `latency.log`, `extension.log`,
|
|
89
|
-
* `sessionstart.log`, `cascade.log`, `read-guard.log`, `tree-sitter.log`,
|
|
90
|
-
* `word-index.log`, `bus-events.log`, `dispositions.log`, `dead-code.log`,
|
|
91
|
-
* `ast-grep-tools.log`, `actionable-warnings.log`, `review-graph.log`, the
|
|
92
|
-
* `logs/*.jsonl` diagnostic dir, the debug handle/heap dumps,
|
|
93
|
-
* `log-cleanup.ts`'s sweep over all of the above, and `smells-rollup.ts`'s
|
|
94
|
-
* read-side tail of `latency.log`/`bus-events.log` (a reader, but it must
|
|
95
|
-
* follow the same root or it tails a file nobody is writing).
|
|
96
|
-
*
|
|
97
|
-
* WHY IT LIVES IN THIS MODULE and not next to its `getGlobalPiLensDir()`
|
|
98
|
-
* sibling in `file-utils.ts` — see this file's header. Fifteen of the writers
|
|
99
|
-
* listed above call this function at their OWN module top level, and
|
|
100
|
-
* `file-utils.ts` is on an import cycle, so resolving from there could observe
|
|
101
|
-
* `file-utils.ts` mid-initialization. Resolving from a module off every cycle
|
|
102
|
-
* cannot.
|
|
103
|
-
*
|
|
104
|
-
* `PI_LENS_HOME` wins over any redirect, which is how
|
|
105
|
-
* `tests/support/vitest-setup.ts` keeps test workers hermetic. Note the
|
|
106
|
-
* redirect still applies under vitest for processes that setup does not cover
|
|
107
|
-
* (globalSetup, and children spawned without the pin): #2516 round 2's
|
|
108
|
-
* `isTestMode()` guard sent exactly those to the developer's real home.
|
|
109
|
-
*
|
|
110
|
-
* Deliberately does NOT write a line to the terminal when it fires. #1333 gives
|
|
111
|
-
* pi sole ownership of the TTY, and
|
|
112
|
-
* `tests/clients/extension-terminal-silence.test.ts` enforces that nothing
|
|
113
|
-
* under `clients/` calls `process.std*.write` or `console.*` (round 2 of
|
|
114
|
-
* #2506 shipped a `process.stderr.write` here and was red in CI for exactly
|
|
115
|
-
* that). Nor can it log through `extension-log.ts`'s
|
|
116
|
-
* `createSubsystemLogger`: that module imports THIS one, so an import back
|
|
117
|
-
* the other way would close a new, unpinned `no-client-cycles` cycle — and
|
|
118
|
-
* `extension.log` is itself redirected by this very function, so the line
|
|
119
|
-
* would land in the probe home nobody reads. The durable signal is the
|
|
120
|
-
* `global-dir-probe-redirect` degradation row instead, folded into
|
|
121
|
-
* `getDegradationSummary()` at read time via
|
|
122
|
-
* `getProbeHomeRedirectEvent()` above.
|
|
123
|
-
*/
|
|
124
|
-
export function getGlobalPiLensLogDir() {
|
|
125
|
-
const override = process.env.PI_LENS_HOME?.trim();
|
|
126
|
-
if (override)
|
|
127
|
-
return path.resolve(override);
|
|
128
|
-
return resolveProbeHomeDir() ?? path.join(os.homedir(), ".pi-lens");
|
|
129
|
-
}
|
|
130
|
-
/**
|
|
131
|
-
* Resolve the probe-home redirect at most ONCE per process, caching both the
|
|
132
|
-
* "yes, here" and the "no redirect" answers (#2506 round 3, F5). Round 2 read
|
|
133
|
-
* `process.cwd()` live on every call, which gave a single process up to three
|
|
134
|
-
* different global dirs as it chdir'd, and re-ran the whole decision on the hot
|
|
135
|
-
* logging path.
|
|
136
|
-
*
|
|
137
|
-
* `undefined` means "no redirect applies"; `getGlobalPiLensLogDir()` above
|
|
138
|
-
* falls back to the real home. This function never consults `PI_LENS_HOME` —
|
|
139
|
-
* that pin is handled by its caller, ahead of this decision, so a pinned
|
|
140
|
-
* process never memoizes a probe answer it would then keep after the pin
|
|
141
|
-
* changed.
|
|
142
|
-
*/
|
|
143
|
-
function resolveProbeHomeDir() {
|
|
144
|
-
const slot = globalThis;
|
|
145
|
-
const cached = slot[RESOLUTION_SLOT];
|
|
146
|
-
if (cached)
|
|
147
|
-
return cached.probeHome;
|
|
148
|
-
const cwd = process.cwd();
|
|
149
|
-
const probeHome = computeProbeHomeDir(cwd);
|
|
150
|
-
slot[RESOLUTION_SLOT] = {
|
|
151
|
-
probeHome,
|
|
152
|
-
event: probeHome ? { probeHome, cwd } : undefined,
|
|
153
|
-
};
|
|
154
|
-
return probeHome;
|
|
155
|
-
}
|
|
156
|
-
/**
|
|
157
|
-
* Clears the memoized decision AND the event it produced, so the next
|
|
158
|
-
* `getGlobalPiLensLogDir()` call re-resolves from scratch. Exercised by
|
|
159
|
-
* `tests/config/global-dir-probe-redirect.test.ts`, which drives the resolver
|
|
160
|
-
* repeatedly under different in-process conditions; without it the first call
|
|
161
|
-
* in a worker would pin the answer for every later case in the same file.
|
|
162
|
-
*/
|
|
163
|
-
export function _resetProbeHomeRedirectStateForTests() {
|
|
164
|
-
globalThis[RESOLUTION_SLOT] = undefined;
|
|
165
|
-
}
|
|
166
|
-
/** The redirect decision itself. */
|
|
167
|
-
function computeProbeHomeDir(cwd) {
|
|
168
|
-
// The explicit force wins first: it is how a probe run from an ordinary
|
|
169
|
-
// project checkout opts in, and it must work even under a harness that has
|
|
170
|
-
// set a test-mode marker but no PI_LENS_HOME.
|
|
171
|
-
if (process.env.PILENS_PROBE === "1") {
|
|
172
|
-
return path.join(cwd, ".pi-lens-probe-home");
|
|
173
|
-
}
|
|
174
|
-
const worktreeRoot = findAgentWorktreeRoot(cwd);
|
|
175
|
-
if (worktreeRoot)
|
|
176
|
-
return path.join(worktreeRoot, ".pi-lens-probe-home");
|
|
177
|
-
if (isUnderRealDir(cwd, os.tmpdir())) {
|
|
178
|
-
return path.join(cwd, ".pi-lens-probe-home");
|
|
179
|
-
}
|
|
180
|
-
return undefined;
|
|
181
|
-
}
|
|
182
|
-
/**
|
|
183
|
-
* The directory of the SPECIFIC agent worktree containing `cwd`, or
|
|
184
|
-
* `undefined` when `cwd` is not inside one.
|
|
185
|
-
*
|
|
186
|
-
* Requires at least one path segment AFTER `worktrees/`, and anchors the
|
|
187
|
-
* probe home at that segment rather than at the live `cwd` (#2506 round 3,
|
|
188
|
-
* F5). Round 2's trailing `(\/|$)` alternative also matched a `cwd` of
|
|
189
|
-
* `.claude/worktrees` ITSELF, which would have put the probe home in the
|
|
190
|
-
* SHARED worktrees parent — every concurrent agent on the box writing into
|
|
191
|
-
* one directory, the cross-agent collision this redirect is supposed to
|
|
192
|
-
* prevent. Anchoring at the worktree also means a probe run from a
|
|
193
|
-
* subdirectory (`<worktree>/clients`) and one run from the worktree root
|
|
194
|
-
* agree on a single probe home instead of scattering one per cwd.
|
|
195
|
-
*/
|
|
196
|
-
function findAgentWorktreeRoot(cwd) {
|
|
197
|
-
const normalized = normalizeFilePath(path.resolve(cwd));
|
|
198
|
-
const match = /(?:^|\/)\.claude\/worktrees\/[^/]+(?:\/|$)/.exec(normalized);
|
|
199
|
-
if (!match)
|
|
200
|
-
return undefined;
|
|
201
|
-
return normalized.slice(0, match.index + match[0].length).replace(/\/$/, "");
|
|
202
|
-
}
|
|
203
|
-
/**
|
|
204
|
-
* `isUnderDir`, but with both sides resolved through `realpath` first
|
|
205
|
-
* (#2506 round 3, F7).
|
|
206
|
-
*
|
|
207
|
-
* On macOS `os.tmpdir()` reports `/var/folders/...` while a `cwd` created
|
|
208
|
-
* under it resolves to `/private/var/folders/...` (`/var` is a symlink to
|
|
209
|
-
* `/private/var`), so the two NEVER prefix-match unresolved and the tmpdir
|
|
210
|
-
* branch would be dead on every Mac. Windows has the same shape with 8.3
|
|
211
|
-
* short names and substituted drives. Both sides go through the same
|
|
212
|
-
* function, so `realpathSync.native`'s canonical Windows casing applies
|
|
213
|
-
* consistently; the result is used only for this containment test, never to
|
|
214
|
-
* build the returned path, so no casing change can leak into a log path.
|
|
215
|
-
* Best-effort by design: a path that does not exist yet (or an EPERM) falls
|
|
216
|
-
* back to its literal form rather than throwing on the logging hot path.
|
|
217
|
-
*/
|
|
218
|
-
function isUnderRealDir(child, parent) {
|
|
219
|
-
return isUnderDir(toRealPath(child), toRealPath(parent));
|
|
220
|
-
}
|
|
221
|
-
function toRealPath(target) {
|
|
222
|
-
try {
|
|
223
|
-
return fs.realpathSync.native(target);
|
|
224
|
-
}
|
|
225
|
-
catch {
|
|
226
|
-
return target;
|
|
227
|
-
}
|
|
228
|
-
}
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Shared process-bridge registration helper (#2437).
|
|
3
|
-
*
|
|
4
|
-
* `clients/read-bridge.ts` (#1265) and `clients/mutation-bridge.ts` (#2423)
|
|
5
|
-
* each mount a versioned, frozen method-table object at a well-known
|
|
6
|
-
* `globalThis[Symbol.for("pi-lens:...")]` key so a same-process producer can
|
|
7
|
-
* reach pi-lens's bookkeeping without importing its internals. Both bridges
|
|
8
|
-
* carried an identical mount body — a first-wins existence check,
|
|
9
|
-
* `Object.freeze`, and a non-writable/non-configurable `Object.defineProperty`
|
|
10
|
-
* — differing only in their key and method table (named by the #2432 review,
|
|
11
|
-
* refs #2423). This module owns that body once.
|
|
12
|
-
*
|
|
13
|
-
* NOT `clients/process-singletons.ts` (#2146): that module keeps a single
|
|
14
|
-
* MUTABLE, adopt-if-version-compatible value per "family" inside ONE shared
|
|
15
|
-
* container (a different, single key mounts the container itself, and a
|
|
16
|
-
* version mismatch there means "discard and rebuild"). A bridge's contract is
|
|
17
|
-
* the opposite: the documented producer protocol reads
|
|
18
|
-
* `globalThis[Symbol.for("pi-lens:mutation-bridge")]` directly as a frozen,
|
|
19
|
-
* first-wins, unreplaceable property, and a version mismatch is the
|
|
20
|
-
* PRODUCER's problem — an unsupported bridge it should not call — never a
|
|
21
|
-
* signal for pi-lens to silently reset its own mount. Reusing the singleton
|
|
22
|
-
* container would change that documented external contract, so this stays a
|
|
23
|
-
* separate, deliberately smaller leaf built for the bridge shape only.
|
|
24
|
-
*
|
|
25
|
-
* STATIC IMPORTS: none, deliberately. Both `read-bridge.ts` and
|
|
26
|
-
* `mutation-bridge.ts` import this module; it must stay a dependency leaf so
|
|
27
|
-
* neither gains an edge onto anything else in `clients/` (`no-client-cycles`).
|
|
28
|
-
*/
|
|
29
|
-
/**
|
|
30
|
-
* Mount `build()`'s result at `globalThis[key]`, once per process.
|
|
31
|
-
*
|
|
32
|
-
* First-wins: if `key` already exists on `globalThis` — from an earlier call
|
|
33
|
-
* in this process, whether this bridge's own prior registration or a
|
|
34
|
-
* redundant re-activation — `build()` is never invoked and the existing
|
|
35
|
-
* mount is left untouched. The mounted value is frozen and installed
|
|
36
|
-
* non-writable/non-configurable so no later code can silently replace or
|
|
37
|
-
* extend it; the `in` check above is what keeps a redundant call from
|
|
38
|
-
* throwing on that now-frozen property.
|
|
39
|
-
*/
|
|
40
|
-
export function registerProcessBridge(key, build) {
|
|
41
|
-
if (key in globalThis)
|
|
42
|
-
return;
|
|
43
|
-
const bridge = Object.freeze(build());
|
|
44
|
-
Object.defineProperty(globalThis, key, {
|
|
45
|
-
value: bridge,
|
|
46
|
-
writable: false,
|
|
47
|
-
configurable: false,
|
|
48
|
-
enumerable: false,
|
|
49
|
-
});
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* The bridge mounted at `key`, or `undefined` when nothing is mounted, the
|
|
53
|
-
* mounted value is not an object, or its `version` does not equal `version`.
|
|
54
|
-
* A version mismatch means "not a bridge this caller recognizes" — never
|
|
55
|
-
* adopted and never reset; the reset-on-mismatch behavior belongs to
|
|
56
|
-
* `process-singletons.ts`'s different contract, not this one.
|
|
57
|
-
*/
|
|
58
|
-
export function getProcessBridge(key, version) {
|
|
59
|
-
const bridge = globalThis[key];
|
|
60
|
-
if (!bridge || typeof bridge !== "object")
|
|
61
|
-
return undefined;
|
|
62
|
-
const candidate = bridge;
|
|
63
|
-
if (candidate.version !== version)
|
|
64
|
-
return undefined;
|
|
65
|
-
return candidate;
|
|
66
|
-
}
|
|
@@ -1,210 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Process singletons — state that must exist ONCE PER PROCESS, not once per
|
|
3
|
-
* module evaluation (#2146).
|
|
4
|
-
*
|
|
5
|
-
* WHY THIS MODULE EXISTS. pi evaluates the pi-lens module graph more than once
|
|
6
|
-
* in a single process: dogfood pass 3 measured one pid emitting `host_boot`
|
|
7
|
-
* nine times, another four times. Source and compiled entries load through
|
|
8
|
-
* separate module graphs, in-process subagent sessions re-enter the extension
|
|
9
|
-
* loader, and vitest re-evaluates modules on `vi.resetModules()`. Every
|
|
10
|
-
* module-scope `let` therefore exists N times, and any state whose CORRECTNESS
|
|
11
|
-
* depends on being the process's only copy silently breaks:
|
|
12
|
-
*
|
|
13
|
-
* - `session-lifecycle.ts`'s registered primary: evaluation 2 starts with an
|
|
14
|
-
* empty registration, classifies a subagent temp root as `primary`, and runs
|
|
15
|
-
* the full session_start battery the #473/#2129/#2133 guard exists to
|
|
16
|
-
* decline. Measured cost: three identical word-index full rebuilds in one
|
|
17
|
-
* 90s burst, 240.8s of CPU for one index.
|
|
18
|
-
* - `instance-registry.ts`'s mutation tail: N tails are N concurrent
|
|
19
|
-
* read-modify-write cycles over one `instances.json`. Measured: three
|
|
20
|
-
* `instance-registry-corrupt` records in a 9s window, with two project roots
|
|
21
|
-
* and one live instance lost from the file.
|
|
22
|
-
*
|
|
23
|
-
* PRECEDENT, both in-repo and both cited rather than invented:
|
|
24
|
-
* - `clients/runtime-session.ts:1826` hangs `__piLensFirstSessionDone` /
|
|
25
|
-
* `__piLensWarmupScheduled` on `globalThis` for exactly this reason.
|
|
26
|
-
* - `clients/ndjson-logger.ts:125` does the versioned form: a
|
|
27
|
-
* `Symbol.for()` key, a schema string, a version number, and an explicit
|
|
28
|
-
* adopt-or-decline decision for a state written by a different build.
|
|
29
|
-
*
|
|
30
|
-
* This module generalizes the second one so each state family gets the same
|
|
31
|
-
* treatment without re-deriving the protocol per site.
|
|
32
|
-
*
|
|
33
|
-
* WHAT BELONGS HERE. Only state that is WRONG when duplicated: process-wide
|
|
34
|
-
* registrations, serialization points, and once-per-process latches. A memo or
|
|
35
|
-
* cache that re-derives the same answer from a stable source (an env read, a
|
|
36
|
-
* host probe) is merely wasteful when duplicated, not wrong, and stays at
|
|
37
|
-
* module scope — see the class-sweep table in the #2146 PR body for the
|
|
38
|
-
* per-family verdicts.
|
|
39
|
-
*
|
|
40
|
-
* VERSIONING AND THE OLDER-SHAPE FALLBACK. Two builds can meet in one process:
|
|
41
|
-
* a stale `dist/` graph and a fresh source graph, or an extension reload after
|
|
42
|
-
* an upgrade. Each family carries its own `version`. The rule is
|
|
43
|
-
* adopt-if-compatible, reset otherwise:
|
|
44
|
-
*
|
|
45
|
-
* - Same schema and same version -> ADOPT the existing value. This is the
|
|
46
|
-
* common case and the whole point of the module.
|
|
47
|
-
* - Anything else (missing schema, different schema, older version, NEWER
|
|
48
|
-
* version) -> do NOT adopt. A shape this build cannot read is not safely
|
|
49
|
-
* readable in either direction, so guessing is worse than starting clean.
|
|
50
|
-
* The cell is replaced with a fresh value from `create()` and ONE bounded
|
|
51
|
-
* `process-singleton-reset` entry is logged per family, so a nine-evaluation
|
|
52
|
-
* process still reports at most one row per family. Behavior after a reset is
|
|
53
|
-
* exactly today's module-scope behavior for that family, which is the
|
|
54
|
-
* fail-safe direction.
|
|
55
|
-
*
|
|
56
|
-
* The container key itself is versioned (`SINGLETON_HOST_KEY`). A future change
|
|
57
|
-
* to the CONTAINER shape bumps the key, so an old container is simply not
|
|
58
|
-
* found rather than mis-read.
|
|
59
|
-
*/
|
|
60
|
-
/**
|
|
61
|
-
* STATIC IMPORTS: none, deliberately. This module is a dependency leaf.
|
|
62
|
-
*
|
|
63
|
-
* It cannot import the degradation ledger. `instance-registry.ts` imports this
|
|
64
|
-
* module, and the ledger reaches `instance-reaper.ts` (through `extension-log`
|
|
65
|
-
* -> `file-utils` -> `git-tracked-ignore` -> `safe-spawn` -> `resource-sampler`),
|
|
66
|
-
* and `instance-reaper` imports the registry back. Any edge from here to the
|
|
67
|
-
* ledger closes a `no-client-cycles` cycle, which CI's dependency-boundaries
|
|
68
|
-
* lane rejects. A dynamic import does not help: the rule excludes
|
|
69
|
-
* `dynamic-import` only on the edge it evaluates, not on the intermediate edges
|
|
70
|
-
* of the cycle it walks.
|
|
71
|
-
*
|
|
72
|
-
* So the direction is inverted, exactly as `ndjson-logger.ts` already does for
|
|
73
|
-
* its own sink-write failures: this module keeps a bounded reset log, and
|
|
74
|
-
* `degradation-ledger.ts` PULLS it at read time through
|
|
75
|
-
* {@link getProcessSingletonResets} and folds it into `getDegradationSummary()`.
|
|
76
|
-
* The record still reaches `pilens_health`, with no import from here.
|
|
77
|
-
*/
|
|
78
|
-
/** Bump only when the CONTAINER shape changes, never for a family's shape. */
|
|
79
|
-
const SINGLETON_HOST_KEY = Symbol.for("pi-lens.process-singletons.v1");
|
|
80
|
-
const SINGLETON_SCHEMA = "pi-lens.process-singletons";
|
|
81
|
-
/** Degradation kind emitted when an incompatible cell is discarded. */
|
|
82
|
-
export const PROCESS_SINGLETON_RESET_KIND = "process-singleton-reset";
|
|
83
|
-
const singletonHost = globalThis;
|
|
84
|
-
/**
|
|
85
|
-
* The process's one container. Deliberately created on first read rather than
|
|
86
|
-
* at module scope of a single graph: whichever evaluation runs first wins, and
|
|
87
|
-
* every later evaluation adopts it.
|
|
88
|
-
*/
|
|
89
|
-
function container() {
|
|
90
|
-
const existing = singletonHost[SINGLETON_HOST_KEY];
|
|
91
|
-
if (existing instanceof Map)
|
|
92
|
-
return existing;
|
|
93
|
-
const fresh = new Map();
|
|
94
|
-
singletonHost[SINGLETON_HOST_KEY] = fresh;
|
|
95
|
-
return fresh;
|
|
96
|
-
}
|
|
97
|
-
function isAdoptable(cell, version) {
|
|
98
|
-
if (!cell || typeof cell !== "object")
|
|
99
|
-
return false;
|
|
100
|
-
const candidate = cell;
|
|
101
|
-
return (candidate.schema === SINGLETON_SCHEMA &&
|
|
102
|
-
candidate.version === version &&
|
|
103
|
-
candidate.value !== undefined);
|
|
104
|
-
}
|
|
105
|
-
/** One bounded reset log per process, capped so a pathological build pair
|
|
106
|
-
* cannot grow it without limit. */
|
|
107
|
-
export const PROCESS_SINGLETON_RESET_LOG_FAMILY = "process-singleton-reset-log";
|
|
108
|
-
const RESET_LOG_FAMILY = PROCESS_SINGLETON_RESET_LOG_FAMILY;
|
|
109
|
-
const RESET_LOG_VERSION = 1;
|
|
110
|
-
const RESET_LOG_CAP = 16;
|
|
111
|
-
function resetLog() {
|
|
112
|
-
return getProcessSingleton(RESET_LOG_FAMILY, RESET_LOG_VERSION, () => ({
|
|
113
|
-
entries: [],
|
|
114
|
-
}));
|
|
115
|
-
}
|
|
116
|
-
/**
|
|
117
|
-
* Record that an incompatible cell was discarded. Bounded twice: once per
|
|
118
|
-
* family (a nine-evaluation process logs at most one entry per family) and once
|
|
119
|
-
* overall by {@link RESET_LOG_CAP}.
|
|
120
|
-
*/
|
|
121
|
-
function recordIncompatibleCell(family, wantedVersion, found) {
|
|
122
|
-
// The reset log is itself a family, so recording ITS reset would recurse.
|
|
123
|
-
// Dropping that one record is correct: the log it would be written to is the
|
|
124
|
-
// thing being discarded.
|
|
125
|
-
if (family === RESET_LOG_FAMILY)
|
|
126
|
-
return;
|
|
127
|
-
const log = resetLog();
|
|
128
|
-
if (log.entries.some((entry) => entry.family === family))
|
|
129
|
-
return;
|
|
130
|
-
if (log.entries.length >= RESET_LOG_CAP)
|
|
131
|
-
return;
|
|
132
|
-
log.entries.push({
|
|
133
|
-
family,
|
|
134
|
-
reason: `incompatible process singleton discarded (found schema=${String(found.schema)} ` +
|
|
135
|
-
`version=${String(found.version)}, this build wants schema=${SINGLETON_SCHEMA} ` +
|
|
136
|
-
`version=${wantedVersion})`,
|
|
137
|
-
});
|
|
138
|
-
}
|
|
139
|
-
/**
|
|
140
|
-
* Read-time view for `degradation-ledger.ts` (see the header). Never performs
|
|
141
|
-
* I/O and never throws, so folding it into a health summary is free.
|
|
142
|
-
*/
|
|
143
|
-
export function getProcessSingletonResets() {
|
|
144
|
-
return resetLog().entries.map((entry) => ({ ...entry }));
|
|
145
|
-
}
|
|
146
|
-
/**
|
|
147
|
-
* Return the process-wide value for `family`, creating it on the first
|
|
148
|
-
* evaluation that asks and adopting it on every later one.
|
|
149
|
-
*
|
|
150
|
-
* `version` describes the SHAPE of the value `create()` builds. Bump it when a
|
|
151
|
-
* build changes that shape, so a graph carrying the old shape is discarded
|
|
152
|
-
* instead of mis-read (see the module docstring's fallback rules).
|
|
153
|
-
*
|
|
154
|
-
* `create()` runs at most once per process per family, unless an incompatible
|
|
155
|
-
* cell forced a reset.
|
|
156
|
-
*
|
|
157
|
-
* `onIncompatible` is for values that own external resources. It runs before
|
|
158
|
-
* the cell is replaced, so the owner can tear those resources down safely.
|
|
159
|
-
*/
|
|
160
|
-
export function getProcessSingleton(family, version, create, onIncompatible) {
|
|
161
|
-
const cells = container();
|
|
162
|
-
const existing = cells.get(family);
|
|
163
|
-
if (isAdoptable(existing, version))
|
|
164
|
-
return existing.value;
|
|
165
|
-
if (existing !== undefined) {
|
|
166
|
-
// An incompatible cell from another build. One bounded row per family:
|
|
167
|
-
// nine evaluations must not write nine records (AGENTS.md's bounded-record
|
|
168
|
-
// rule; `recordDegradationOnce` keys on kind + subject).
|
|
169
|
-
recordIncompatibleCell(family, version, existing);
|
|
170
|
-
onIncompatible?.(existing.value);
|
|
171
|
-
}
|
|
172
|
-
const value = create();
|
|
173
|
-
cells.set(family, { schema: SINGLETON_SCHEMA, version, value });
|
|
174
|
-
return value;
|
|
175
|
-
}
|
|
176
|
-
/**
|
|
177
|
-
* Test-only: drop the process-wide container so the next
|
|
178
|
-
* {@link getProcessSingleton} call rebuilds every family from `create()`.
|
|
179
|
-
*
|
|
180
|
-
* This clears the GLOBAL state, not a module-local copy — a reset that only
|
|
181
|
-
* cleared module scope would be the very defect this module fixes, and would
|
|
182
|
-
* make every suite that relies on isolation pass vacuously (catalog shape 7).
|
|
183
|
-
*/
|
|
184
|
-
export function _resetProcessSingletonsForTests() {
|
|
185
|
-
singletonHost[SINGLETON_HOST_KEY] = new Map();
|
|
186
|
-
}
|
|
187
|
-
/**
|
|
188
|
-
* Test-only: install a raw cell so a suite can exercise the older/newer-shape
|
|
189
|
-
* fallback without needing two real builds in one process.
|
|
190
|
-
*/
|
|
191
|
-
export function _seedProcessSingletonCellForTests(family, cell) {
|
|
192
|
-
container().set(family, cell);
|
|
193
|
-
}
|
|
194
|
-
// --- Module-evaluation ordinal (#2146 observability) ---
|
|
195
|
-
const EVALUATION_ORDINAL_FAMILY = "module-evaluation-ordinal";
|
|
196
|
-
const EVALUATION_ORDINAL_VERSION = 1;
|
|
197
|
-
/**
|
|
198
|
-
* How many times this process has evaluated the pi-lens module graph, 1-based.
|
|
199
|
-
*
|
|
200
|
-
* Called once, at module scope of `clients/startup-timing.ts`, so the number it
|
|
201
|
-
* returns is the evaluation count of the graph that contains the extension
|
|
202
|
-
* entry. It is carried on `host_boot.metadata.evaluationOrdinal` so a multi-eval
|
|
203
|
-
* process is greppable from `latency.log` instead of having to be inferred by
|
|
204
|
-
* counting `host_boot` lines per pid — the observability gap #2146 names.
|
|
205
|
-
*/
|
|
206
|
-
export function nextModuleEvaluationOrdinal() {
|
|
207
|
-
const state = getProcessSingleton(EVALUATION_ORDINAL_FAMILY, EVALUATION_ORDINAL_VERSION, () => ({ evaluations: 0 }));
|
|
208
|
-
state.evaluations += 1;
|
|
209
|
-
return state.evaluations;
|
|
210
|
-
}
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The extension runtime's door onto the ONE process-table seam (#2443).
|
|
3
|
-
*
|
|
4
|
-
* `scripts/lib/process-scan.mjs` owns what a process listing IS: the field →
|
|
5
|
-
* platform-column table, the Windows CIM/WQL and POSIX `ps` command
|
|
6
|
-
* composition, the WQL escaping, and the row parser. This module owns how
|
|
7
|
-
* clients/ RUNS one, which is genuinely different from how a script runs one
|
|
8
|
-
* and stays different on purpose:
|
|
9
|
-
*
|
|
10
|
-
* - the child and its stdout pipe are `unref`'d (#1155) so a one-shot
|
|
11
|
-
* `pi --print` can settle without waiting on a CIM query;
|
|
12
|
-
* - a child that blows its timeout is terminated through the caller's own
|
|
13
|
-
* tree-kill-and-verify machinery (#1864 F3), injected as `onTimeout` — a
|
|
14
|
-
* sweep that leaks its own scanner is the defect the sweep exists to fix;
|
|
15
|
-
* - the outcome carries a `SpawnCollectStatus`, so "the table is empty" and
|
|
16
|
-
* "the query never ran" stay distinguishable and the caller can record the
|
|
17
|
-
* degradation (#1857).
|
|
18
|
-
*
|
|
19
|
-
* WHY THE SEAM IS IMPORTED FROM scripts/ RATHER THAN LIVING HERE: the .mjs
|
|
20
|
-
* header argues it in full. Short version — `scripts/prune-agent-worktrees.mjs`
|
|
21
|
-
* is a SessionStart/SubagentStop hook that runs inside freshly created agent
|
|
22
|
-
* worktrees, where `clients/*.js` (gitignored build output) does not exist
|
|
23
|
-
* yet, so the shared half has to be the side that needs no build. This file
|
|
24
|
-
* is the single crossing point; nothing else in clients/ imports scripts/.
|
|
25
|
-
*/
|
|
26
|
-
import { spawnCollectStdoutResult, } from "./child-unref.js";
|
|
27
|
-
import { buildProcessQuery, parseProcessTable, } from "../scripts/lib/process-scan.mjs";
|
|
28
|
-
/**
|
|
29
|
-
* Re-exported, not redefined. `windowsExe` resolves an absolute System32
|
|
30
|
-
* interpreter path for a spawn this process is about to make (a bare
|
|
31
|
-
* `powershell.exe`/`taskkill.exe` is resolvable through a PATH a caller can
|
|
32
|
-
* shadow, and these spawns decide what gets killed) — one definition of that
|
|
33
|
-
* rule is the whole point of the seam.
|
|
34
|
-
*/
|
|
35
|
-
export { windowsExe } from "../scripts/lib/process-scan.mjs";
|
|
36
|
-
/**
|
|
37
|
-
* Run one process-table query on the extension's spawn rails.
|
|
38
|
-
*
|
|
39
|
-
* Never throws and never rejects: an unbuildable query (a Windows-only column
|
|
40
|
-
* asked for on POSIX, an empty filter) resolves as `spawn-error` with no rows,
|
|
41
|
-
* the same shape every other failure takes, because every caller here is
|
|
42
|
-
* best-effort instrumentation or a best-effort sweep.
|
|
43
|
-
*/
|
|
44
|
-
export async function queryProcessTable(request, options) {
|
|
45
|
-
let query;
|
|
46
|
-
try {
|
|
47
|
-
query = buildProcessQuery(request.fields, {
|
|
48
|
-
filter: request.filter,
|
|
49
|
-
excludeSelfPid: request.excludeSelfPid,
|
|
50
|
-
});
|
|
51
|
-
}
|
|
52
|
-
catch {
|
|
53
|
-
return { rows: [], status: "spawn-error", serverSideFiltered: false };
|
|
54
|
-
}
|
|
55
|
-
const result = await spawnCollectStdoutResult(query.command, query.args, { shell: false, windowsHide: true, stdio: ["ignore", "pipe", "ignore"] }, { timeoutMs: options.timeoutMs, onTimeout: options.onTimeout });
|
|
56
|
-
return {
|
|
57
|
-
// Whatever the collector kept is parsed rather than discarded here: it
|
|
58
|
-
// drops stdout on a non-zero exit (that output is not evidence of what
|
|
59
|
-
// is NOT running) but KEEPS the partial table from a timed-out child,
|
|
60
|
-
// and the caller decides what a partial table is worth by reading
|
|
61
|
-
// `status`. Re-deciding that here would be a second policy.
|
|
62
|
-
rows: parseProcessTable(result.stdout, query.tabSeparated, query.fields),
|
|
63
|
-
status: result.status,
|
|
64
|
-
exitCode: result.exitCode,
|
|
65
|
-
timeoutKill: result.timeoutKill,
|
|
66
|
-
serverSideFiltered: query.serverSideFiltered,
|
|
67
|
-
};
|
|
68
|
-
}
|