@herbertgao/pi-extensions 2026.10.1 → 2026.10.3
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 +14 -17
- package/THIRD_PARTY_NOTICES.md +2 -2
- package/node_modules/@dietrichgebert/ponytail/.opencode/command/ponytail-audit.md +2 -2
- package/node_modules/@dietrichgebert/ponytail/.opencode/command/ponytail-debt.md +2 -2
- package/node_modules/@dietrichgebert/ponytail/.opencode/command/ponytail-gain.md +1 -1
- package/node_modules/@dietrichgebert/ponytail/.opencode/command/ponytail-help.md +1 -1
- package/node_modules/@dietrichgebert/ponytail/.opencode/command/ponytail-review.md +2 -2
- package/node_modules/@dietrichgebert/ponytail/.opencode/command/ponytail.md +1 -1
- package/node_modules/@dietrichgebert/ponytail/.qoder/rules/ponytail.md +21 -21
- package/node_modules/@dietrichgebert/ponytail/.qoder-plugin/plugin.json +1 -1
- package/node_modules/@dietrichgebert/ponytail/AGENTS.md +21 -21
- package/node_modules/@dietrichgebert/ponytail/README.md +68 -72
- package/node_modules/@dietrichgebert/ponytail/hooks/ponytail-activate.js +7 -0
- package/node_modules/@dietrichgebert/ponytail/hooks/ponytail-instructions.js +30 -30
- package/node_modules/@dietrichgebert/ponytail/hooks/ponytail-map.js +103 -0
- package/node_modules/@dietrichgebert/ponytail/package.json +2 -2
- package/node_modules/@dietrichgebert/ponytail/skills/ponytail/SKILL.md +33 -101
- package/node_modules/@dietrichgebert/ponytail/skills/ponytail-audit/SKILL.md +89 -32
- package/node_modules/@dietrichgebert/ponytail/skills/ponytail-debt/SKILL.md +13 -12
- package/node_modules/@dietrichgebert/ponytail/skills/ponytail-gain/SKILL.md +17 -16
- package/node_modules/@dietrichgebert/ponytail/skills/ponytail-help/SKILL.md +9 -10
- package/node_modules/@dietrichgebert/ponytail/skills/ponytail-review/SKILL.md +96 -57
- package/node_modules/{remote-pi → @herbertgao/pi-agency}/LICENSE +1 -1
- 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/@herbertgao/pi-subagents/CHANGELOG.md +8 -0
- package/node_modules/@herbertgao/pi-subagents/README.md +1 -1
- package/node_modules/@herbertgao/pi-subagents/package.json +4 -5
- package/node_modules/@herbertgao/pi-subagents/src/index.ts +1 -1
- package/node_modules/@herbertgao/pi-subagents/src/invocation-config.ts +1 -1
- package/node_modules/@herbertgao/pi-subagents/src/mention-clone.ts +48 -72
- package/node_modules/@herbertgao/pi-subagents/src/nested-tools.ts +1 -1
- package/node_modules/@herbertgao/pi-subagents/src/output-file.ts +15 -6
- package/node_modules/@herbertgao/pi-subagents/src/workflow/collisions.ts +4 -1
- package/node_modules/@herbertgao/pi-subagents/src/workflow/json-schema.ts +9 -8
- package/node_modules/@narumitw/pi-caffeinate/dist/index.ts +6 -1
- package/node_modules/@narumitw/pi-caffeinate/dist/index.ts.map +2 -2
- package/node_modules/@narumitw/pi-caffeinate/package.json +3 -3
- package/node_modules/@narumitw/pi-caffeinate/src/dbus-inhibit.ts +13 -1
- 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 +1159 -0
- package/node_modules/pi-lens/README.md +116 -25
- package/node_modules/pi-lens/config/dependency-cruiser-eager-allowlist.json +6 -2
- 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-2FQ62SPM.js +83 -0
- package/node_modules/pi-lens/dist/chunk-2UMYMRI3.js +118 -0
- package/node_modules/pi-lens/dist/chunk-34OCDWOS.js +48 -0
- package/node_modules/pi-lens/dist/chunk-3FERWMCH.js +144 -0
- package/node_modules/pi-lens/dist/chunk-3JL6IFD7.js +97 -0
- package/node_modules/pi-lens/dist/chunk-3JSEWUWI.js +327 -0
- package/node_modules/pi-lens/dist/chunk-3MED75HT.js +37 -0
- package/node_modules/pi-lens/dist/chunk-3MRXIJ6I.js +79 -0
- package/node_modules/pi-lens/dist/chunk-3P4PF2BX.js +2250 -0
- package/node_modules/pi-lens/dist/chunk-3PNFWVHT.js +201 -0
- package/node_modules/pi-lens/dist/chunk-3TTPKMEF.js +162 -0
- package/node_modules/pi-lens/dist/chunk-5JHXUETW.js +326 -0
- package/node_modules/pi-lens/dist/chunk-5W3R6LFT.js +24 -0
- package/node_modules/pi-lens/dist/chunk-64LU2OVH.js +341 -0
- package/node_modules/pi-lens/dist/chunk-6B5I6ICN.js +44 -0
- package/node_modules/pi-lens/dist/chunk-6P54TMWL.js +274 -0
- package/node_modules/pi-lens/dist/chunk-6UYA642J.js +145 -0
- package/node_modules/pi-lens/dist/chunk-6XX5HCLK.js +398 -0
- package/node_modules/pi-lens/dist/chunk-7AXO3ZDF.js +30 -0
- package/node_modules/pi-lens/dist/chunk-7BX5DWSA.js +1907 -0
- package/node_modules/pi-lens/dist/chunk-7ELY2CSM.js +902 -0
- package/node_modules/pi-lens/dist/chunk-7M4T5N3V.js +38 -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-AFZYMAIV.js +756 -0
- package/node_modules/pi-lens/dist/chunk-ALQRYH6O.js +112 -0
- package/node_modules/pi-lens/dist/chunk-AXKPQ6ZI.js +1610 -0
- package/node_modules/pi-lens/dist/chunk-BHWHXMQ2.js +62 -0
- package/node_modules/pi-lens/dist/chunk-BJF25SUG.js +22 -0
- package/node_modules/pi-lens/dist/chunk-BNKLYOOO.js +18 -0
- package/node_modules/pi-lens/dist/chunk-BW5KFIQC.js +59 -0
- package/node_modules/pi-lens/dist/chunk-CBD2B5CP.js +599 -0
- package/node_modules/pi-lens/dist/chunk-CFYISHUW.js +42 -0
- package/node_modules/pi-lens/dist/chunk-CMU4RMJB.js +30 -0
- package/node_modules/pi-lens/dist/chunk-CULQYFLU.js +14 -0
- package/node_modules/pi-lens/dist/chunk-D65GOCJB.js +289 -0
- package/node_modules/pi-lens/dist/chunk-D6YF5HKX.js +59 -0
- package/node_modules/pi-lens/dist/chunk-DMS52BEP.js +342 -0
- package/node_modules/pi-lens/dist/chunk-ELVWJYRV.js +211 -0
- package/node_modules/pi-lens/dist/chunk-EUT3B22Y.js +27 -0
- package/node_modules/pi-lens/dist/chunk-F5VLZHUW.js +146 -0
- package/node_modules/pi-lens/dist/chunk-FC4RP4I2.js +12 -0
- package/node_modules/pi-lens/dist/chunk-FGALODG3.js +55 -0
- package/node_modules/pi-lens/dist/chunk-G3RLJYA2.js +2358 -0
- package/node_modules/pi-lens/dist/chunk-GAYGGICG.js +32 -0
- package/node_modules/pi-lens/dist/chunk-H2W2AXD3.js +419 -0
- package/node_modules/pi-lens/dist/chunk-H5EV3VMF.js +114 -0
- package/node_modules/pi-lens/dist/chunk-HREZQCT3.js +106 -0
- package/node_modules/pi-lens/dist/chunk-HSIRMK2D.js +517 -0
- package/node_modules/pi-lens/dist/chunk-IMSQR4WO.js +184 -0
- package/node_modules/pi-lens/dist/chunk-IQZXOZ7S.js +4816 -0
- package/node_modules/pi-lens/dist/chunk-IR6XFA5P.js +37 -0
- package/node_modules/pi-lens/dist/chunk-IUKPRZER.js +78 -0
- package/node_modules/pi-lens/dist/chunk-IUR76K6A.js +262 -0
- package/node_modules/pi-lens/dist/chunk-J3FZR3YY.js +98 -0
- package/node_modules/pi-lens/dist/chunk-J6DFZDFA.js +562 -0
- package/node_modules/pi-lens/dist/chunk-J7WJZ6W7.js +50 -0
- package/node_modules/pi-lens/dist/chunk-JONGANYH.js +202 -0
- package/node_modules/pi-lens/dist/chunk-KJCWXUUS.js +425 -0
- package/node_modules/pi-lens/dist/chunk-KJN4IOEJ.js +17 -0
- package/node_modules/pi-lens/dist/chunk-KMGPUKFD.js +25 -0
- package/node_modules/pi-lens/dist/chunk-LD7WFTRX.js +4533 -0
- package/node_modules/pi-lens/dist/chunk-LJDODBBZ.js +78 -0
- package/node_modules/pi-lens/dist/chunk-LNOMA3MP.js +169 -0
- package/node_modules/pi-lens/dist/chunk-MGIWSROG.js +2334 -0
- package/node_modules/pi-lens/dist/chunk-MQA2YBAH.js +308 -0
- package/node_modules/pi-lens/dist/chunk-MTDRLSI7.js +21720 -0
- package/node_modules/pi-lens/dist/chunk-N2IRDBZI.js +2355 -0
- package/node_modules/pi-lens/dist/chunk-N77WFUL7.js +50 -0
- package/node_modules/pi-lens/dist/chunk-N7YNJE5R.js +466 -0
- package/node_modules/pi-lens/dist/chunk-NABLC7W3.js +148 -0
- package/node_modules/pi-lens/dist/chunk-NFXP47RV.js +999 -0
- package/node_modules/pi-lens/dist/chunk-NJF2X5XF.js +45 -0
- package/node_modules/pi-lens/dist/chunk-NXL4FFQQ.js +47 -0
- package/node_modules/pi-lens/dist/chunk-O7HZX7CA.js +309 -0
- package/node_modules/pi-lens/dist/chunk-OC7LYAU5.js +708 -0
- package/node_modules/pi-lens/dist/chunk-OEX24ECI.js +348 -0
- package/node_modules/pi-lens/dist/chunk-OYOB3ZFG.js +78 -0
- package/node_modules/pi-lens/dist/chunk-OYTMZXRF.js +41 -0
- package/node_modules/pi-lens/dist/chunk-OZJINN4O.js +84 -0
- package/node_modules/pi-lens/dist/chunk-PCHDGUKT.js +23 -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-RJFED73B.js +79 -0
- package/node_modules/pi-lens/dist/chunk-RTQNRM5X.js +27 -0
- package/node_modules/pi-lens/dist/chunk-S6AMWKPC.js +189 -0
- package/node_modules/pi-lens/dist/chunk-T4QZ6FEH.js +308 -0
- package/node_modules/pi-lens/dist/chunk-T54VJRAD.js +5456 -0
- package/node_modules/pi-lens/dist/chunk-TA5L5KWQ.js +167 -0
- package/node_modules/pi-lens/dist/chunk-TQFBZVCG.js +27 -0
- package/node_modules/pi-lens/dist/chunk-U52SAGRM.js +62 -0
- package/node_modules/pi-lens/dist/chunk-UEAHAMEI.js +5814 -0
- package/node_modules/pi-lens/dist/chunk-UGSMCQ4D.js +327 -0
- package/node_modules/pi-lens/dist/chunk-UOPVJQ4N.js +103 -0
- package/node_modules/pi-lens/dist/chunk-USHG4DLH.js +459 -0
- package/node_modules/pi-lens/dist/chunk-UXVNL3D7.js +23 -0
- package/node_modules/pi-lens/dist/chunk-V5MEBST3.js +4139 -0
- package/node_modules/pi-lens/dist/chunk-VGEVL5EQ.js +29 -0
- package/node_modules/pi-lens/dist/chunk-VPWKF3GN.js +87 -0
- package/node_modules/pi-lens/dist/chunk-VSMJK3ZJ.js +1250 -0
- package/node_modules/pi-lens/dist/chunk-VYKKMYVT.js +560 -0
- package/node_modules/pi-lens/dist/chunk-VZHJS6DR.js +442 -0
- package/node_modules/pi-lens/dist/chunk-WATC3IQR.js +213 -0
- package/node_modules/pi-lens/dist/chunk-WPE5FPGR.js +54 -0
- package/node_modules/pi-lens/dist/chunk-WSEWKCXU.js +188 -0
- package/node_modules/pi-lens/dist/chunk-WW5BLB74.js +659 -0
- package/node_modules/pi-lens/dist/chunk-XGUL4SLQ.js +406 -0
- package/node_modules/pi-lens/dist/chunk-XHSCVSOL.js +170 -0
- package/node_modules/pi-lens/dist/chunk-XIMYZ3JA.js +27 -0
- package/node_modules/pi-lens/dist/chunk-YLN4K6WD.js +385 -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-Z6BB4JLQ.js +478 -0
- package/node_modules/pi-lens/dist/chunk-Z7QQA2KT.js +27 -0
- package/node_modules/pi-lens/dist/chunk-ZETYB3XG.js +2626 -0
- package/node_modules/pi-lens/dist/chunk-ZMOMPX2Z.js +87 -0
- package/node_modules/pi-lens/dist/chunk-ZOEYVXSV.js +149 -0
- package/node_modules/pi-lens/dist/chunk-ZZUFZUQZ.js +12120 -0
- package/node_modules/pi-lens/dist/index.js +39712 -29876
- 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 +22688 -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 +5 -4
- package/node_modules/pi-lens/docs/configuration.md +28 -2
- package/node_modules/pi-lens/docs/custom-rules.md +25 -2
- package/node_modules/pi-lens/docs/environment-variables.md +86 -8
- package/node_modules/pi-lens/docs/features.md +45 -5
- package/node_modules/pi-lens/docs/globalconfig.md +2 -1
- package/node_modules/pi-lens/docs/io-bridge-v2-migration.md +94 -0
- package/node_modules/pi-lens/docs/lsp-capability-matrix.md +37 -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 +160 -88
- package/node_modules/pi-lens/docs/pi-lens-investigator.md +74 -26
- package/node_modules/pi-lens/docs/pi-lens-merge-policy.md +736 -0
- package/node_modules/pi-lens/docs/pi-lens-monitor.md +75 -7
- package/node_modules/pi-lens/docs/pi-lens-retro.md +6 -4
- package/node_modules/pi-lens/docs/pi-lens-reviewer.md +189 -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/schema/pi-lens-config-v1.json +530 -0
- package/node_modules/pi-lens/docs/servercapabilities.md +56 -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/docs/word-index.md +6 -0
- 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/rule-tests/no-identity-operator-on-literals-test.yml +12 -2
- package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/throw-new-error-js-test.yml +2 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/throw-new-error-test.yml +2 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/advisory-registry-subset.yml +50 -0
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/no-identity-operator-on-literals.yml +20 -12
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/throw-new-error-js.yml +2 -2
- package/node_modules/pi-lens/rules/ast-grep-rules/rules/throw-new-error.yml +2 -2
- 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-web-access/CHANGELOG.md +28 -0
- package/node_modules/pi-web-access/README.md +10 -6
- package/node_modules/pi-web-access/ceramic.ts +219 -0
- package/node_modules/pi-web-access/curator-page.ts +3 -1
- package/node_modules/pi-web-access/curator-server.ts +1 -0
- package/node_modules/pi-web-access/dist/index.js +846 -588
- package/node_modules/pi-web-access/dist/mcp-cli.js +725 -516
- package/node_modules/pi-web-access/gemini-search.ts +8 -4
- package/node_modules/pi-web-access/github-extract.ts +34 -2
- package/node_modules/pi-web-access/index.ts +72 -30
- package/node_modules/pi-web-access/openai-search.ts +3 -3
- package/node_modules/pi-web-access/package.json +2 -2
- package/node_modules/pi-web-access/page-query.ts +6 -9
- package/node_modules/pi-web-access/parallel-mcp.ts +2 -0
- package/node_modules/pi-web-access/query-rewrite.ts +2 -2
- package/node_modules/pi-web-access/storage.ts +49 -0
- package/node_modules/pi-web-access/summary-review.ts +7 -6
- package/node_modules/pi-web-access/utils.ts +21 -6
- package/node_modules/pi-web-access/web-tool-core.ts +1 -0
- package/package.json +19 -19
- package/node_modules/@dietrichgebert/ponytail/README.es.md +0 -212
- package/node_modules/@dietrichgebert/ponytail/README.ja.md +0 -212
- package/node_modules/@dietrichgebert/ponytail/README.ko.md +0 -212
- package/node_modules/@dietrichgebert/ponytail/README.zh-CN.md +0 -212
- package/node_modules/pi-lens/dist/clients/actionable-warnings-logger.js +0 -35
- package/node_modules/pi-lens/dist/clients/actionable-warnings.js +0 -1610
- package/node_modules/pi-lens/dist/clients/advisory-provenance.js +0 -593
- package/node_modules/pi-lens/dist/clients/agent-behavior-client.js +0 -147
- package/node_modules/pi-lens/dist/clients/agent-nudge.js +0 -325
- package/node_modules/pi-lens/dist/clients/analysed-root.js +0 -1
- package/node_modules/pi-lens/dist/clients/ast-grep-client.js +0 -731
- package/node_modules/pi-lens/dist/clients/ast-grep-rule-manager.js +0 -146
- package/node_modules/pi-lens/dist/clients/ast-grep-tool-logger.js +0 -118
- package/node_modules/pi-lens/dist/clients/ast-grep-types.js +0 -10
- package/node_modules/pi-lens/dist/clients/ast-grep-yaml-synth.js +0 -154
- package/node_modules/pi-lens/dist/clients/atomic-write-staging.js +0 -75
- package/node_modules/pi-lens/dist/clients/atomic-write.js +0 -189
- package/node_modules/pi-lens/dist/clients/availability-probe-flight.js +0 -12
- package/node_modules/pi-lens/dist/clients/bash-file-access.js +0 -1056
- package/node_modules/pi-lens/dist/clients/biome-client.js +0 -357
- package/node_modules/pi-lens/dist/clients/blocker-freshness.js +0 -837
- package/node_modules/pi-lens/dist/clients/blocker-past-eof.js +0 -129
- package/node_modules/pi-lens/dist/clients/bootstrap.js +0 -569
- package/node_modules/pi-lens/dist/clients/bounded-cache.js +0 -190
- package/node_modules/pi-lens/dist/clients/bounded-pid-file-lock.js +0 -202
- package/node_modules/pi-lens/dist/clients/bounded-telemetry.js +0 -295
- package/node_modules/pi-lens/dist/clients/build-identity.js +0 -95
- package/node_modules/pi-lens/dist/clients/bundled-resource-health.js +0 -113
- package/node_modules/pi-lens/dist/clients/bus-events-logger.js +0 -105
- package/node_modules/pi-lens/dist/clients/bus-publish.js +0 -171
- package/node_modules/pi-lens/dist/clients/cache/rule-cache.js +0 -190
- package/node_modules/pi-lens/dist/clients/cache-manager.js +0 -524
- package/node_modules/pi-lens/dist/clients/cache-observability.js +0 -1313
- package/node_modules/pi-lens/dist/clients/call-graph.js +0 -852
- package/node_modules/pi-lens/dist/clients/cargo-manifest.js +0 -422
- package/node_modules/pi-lens/dist/clients/cascade-budget.js +0 -196
- package/node_modules/pi-lens/dist/clients/cascade-format.js +0 -315
- package/node_modules/pi-lens/dist/clients/cascade-logger.js +0 -31
- package/node_modules/pi-lens/dist/clients/cascade-types.js +0 -9
- package/node_modules/pi-lens/dist/clients/child-unref.js +0 -124
- package/node_modules/pi-lens/dist/clients/code-quality-warnings.js +0 -286
- package/node_modules/pi-lens/dist/clients/codebase-model.js +0 -173
- package/node_modules/pi-lens/dist/clients/collateral-test-role.js +0 -40
- package/node_modules/pi-lens/dist/clients/complexity-client.js +0 -462
- package/node_modules/pi-lens/dist/clients/config-core/deny.js +0 -221
- package/node_modules/pi-lens/dist/clients/config-core/index.js +0 -50
- package/node_modules/pi-lens/dist/clients/config-core/merge.js +0 -357
- package/node_modules/pi-lens/dist/clients/config-core/normalize.js +0 -340
- package/node_modules/pi-lens/dist/clients/config-core/process-spec.js +0 -248
- package/node_modules/pi-lens/dist/clients/config-core/provenance.js +0 -164
- package/node_modules/pi-lens/dist/clients/config-core/records.js +0 -218
- package/node_modules/pi-lens/dist/clients/config-core/resolve.js +0 -125
- package/node_modules/pi-lens/dist/clients/config-core/safe-object.js +0 -78
- package/node_modules/pi-lens/dist/clients/config-core/schema.js +0 -165
- package/node_modules/pi-lens/dist/clients/config-diagnostic-codes.js +0 -285
- package/node_modules/pi-lens/dist/clients/config-locations.js +0 -388
- package/node_modules/pi-lens/dist/clients/config-resolve.js +0 -798
- package/node_modules/pi-lens/dist/clients/config-schema.js +0 -251
- package/node_modules/pi-lens/dist/clients/config-warn.js +0 -407
- package/node_modules/pi-lens/dist/clients/console-guard-install.js +0 -26
- package/node_modules/pi-lens/dist/clients/cooperative-budget.js +0 -42
- package/node_modules/pi-lens/dist/clients/dead-code-client.js +0 -510
- package/node_modules/pi-lens/dist/clients/dead-code-logger.js +0 -30
- package/node_modules/pi-lens/dist/clients/deadline-utils.js +0 -280
- package/node_modules/pi-lens/dist/clients/debug-handles.js +0 -211
- package/node_modules/pi-lens/dist/clients/debug-heap.js +0 -174
- package/node_modules/pi-lens/dist/clients/deferred-lsp-work.js +0 -106
- package/node_modules/pi-lens/dist/clients/degradation-ledger.js +0 -426
- package/node_modules/pi-lens/dist/clients/demoted-finding-render.js +0 -169
- package/node_modules/pi-lens/dist/clients/dependency-checker.js +0 -885
- package/node_modules/pi-lens/dist/clients/deps/ast-grep-napi.js +0 -22
- package/node_modules/pi-lens/dist/clients/deps/js-yaml.js +0 -9
- package/node_modules/pi-lens/dist/clients/deps/minimatch.js +0 -4
- package/node_modules/pi-lens/dist/clients/deps/pi-tui.js +0 -14
- package/node_modules/pi-lens/dist/clients/deps/typebox.js +0 -14
- package/node_modules/pi-lens/dist/clients/deps/vscode-jsonrpc.js +0 -1
- package/node_modules/pi-lens/dist/clients/deps/web-tree-sitter.js +0 -24
- package/node_modules/pi-lens/dist/clients/diagnostic-dispositions.js +0 -630
- package/node_modules/pi-lens/dist/clients/diagnostic-line-freshness.js +0 -305
- package/node_modules/pi-lens/dist/clients/diagnostic-logger.js +0 -73
- package/node_modules/pi-lens/dist/clients/diagnostic-tracker.js +0 -105
- package/node_modules/pi-lens/dist/clients/diagnostics-publish.js +0 -230
- package/node_modules/pi-lens/dist/clients/dispatch/ast-grep-catalog.js +0 -65
- package/node_modules/pi-lens/dist/clients/dispatch/auxiliary-lsp.js +0 -343
- package/node_modules/pi-lens/dist/clients/dispatch/collect-later-tier.js +0 -35
- package/node_modules/pi-lens/dist/clients/dispatch/diagnostic-taxonomy.js +0 -66
- package/node_modules/pi-lens/dist/clients/dispatch/dispatcher.js +0 -1269
- package/node_modules/pi-lens/dist/clients/dispatch/fact-provider-types.js +0 -1
- package/node_modules/pi-lens/dist/clients/dispatch/fact-rule-runner.js +0 -17
- package/node_modules/pi-lens/dist/clients/dispatch/fact-runner.js +0 -30
- package/node_modules/pi-lens/dist/clients/dispatch/fact-scheduler.js +0 -68
- package/node_modules/pi-lens/dist/clients/dispatch/fact-store.js +0 -377
- package/node_modules/pi-lens/dist/clients/dispatch/facts/comment-facts.js +0 -22
- package/node_modules/pi-lens/dist/clients/dispatch/facts/file-content.js +0 -19
- package/node_modules/pi-lens/dist/clients/dispatch/facts/function-facts.js +0 -348
- package/node_modules/pi-lens/dist/clients/dispatch/facts/import-facts.js +0 -204
- package/node_modules/pi-lens/dist/clients/dispatch/facts/tree-sitter-facts.js +0 -34
- package/node_modules/pi-lens/dist/clients/dispatch/facts/try-catch-facts.js +0 -119
- package/node_modules/pi-lens/dist/clients/dispatch/finding-policy.js +0 -339
- package/node_modules/pi-lens/dist/clients/dispatch/indent-detect.js +0 -417
- package/node_modules/pi-lens/dist/clients/dispatch/inline-suppressions.js +0 -89
- package/node_modules/pi-lens/dist/clients/dispatch/integration.js +0 -2377
- package/node_modules/pi-lens/dist/clients/dispatch/lazy.js +0 -11
- package/node_modules/pi-lens/dist/clients/dispatch/pending-runner-findings.js +0 -87
- package/node_modules/pi-lens/dist/clients/dispatch/plan.js +0 -278
- package/node_modules/pi-lens/dist/clients/dispatch/priorities.js +0 -20
- package/node_modules/pi-lens/dist/clients/dispatch/rule-id-normalize.js +0 -50
- package/node_modules/pi-lens/dist/clients/dispatch/rule-ignores.js +0 -69
- package/node_modules/pi-lens/dist/clients/dispatch/rule-policy.js +0 -135
- package/node_modules/pi-lens/dist/clients/dispatch/rules/async-noise.js +0 -40
- package/node_modules/pi-lens/dist/clients/dispatch/rules/async-unnecessary-wrapper.js +0 -27
- package/node_modules/pi-lens/dist/clients/dispatch/rules/cors-wildcard.js +0 -54
- package/node_modules/pi-lens/dist/clients/dispatch/rules/error-obscuring.js +0 -32
- package/node_modules/pi-lens/dist/clients/dispatch/rules/error-swallowing.js +0 -31
- package/node_modules/pi-lens/dist/clients/dispatch/rules/framework-call-noise.js +0 -67
- package/node_modules/pi-lens/dist/clients/dispatch/rules/high-complexity.js +0 -72
- package/node_modules/pi-lens/dist/clients/dispatch/rules/high-fan-out.js +0 -74
- package/node_modules/pi-lens/dist/clients/dispatch/rules/high-import-coupling.js +0 -37
- package/node_modules/pi-lens/dist/clients/dispatch/rules/missing-error-propagation.js +0 -62
- package/node_modules/pi-lens/dist/clients/dispatch/rules/no-commented-credentials.js +0 -52
- package/node_modules/pi-lens/dist/clients/dispatch/rules/pass-through-wrappers.js +0 -42
- package/node_modules/pi-lens/dist/clients/dispatch/rules/placeholder-comments.js +0 -40
- package/node_modules/pi-lens/dist/clients/dispatch/rules/unsafe-boundary.js +0 -126
- package/node_modules/pi-lens/dist/clients/dispatch/runner-context.js +0 -52
- package/node_modules/pi-lens/dist/clients/dispatch/runners/actionlint.js +0 -111
- package/node_modules/pi-lens/dist/clients/dispatch/runners/ast-grep-napi.js +0 -1196
- package/node_modules/pi-lens/dist/clients/dispatch/runners/biome-check.js +0 -296
- package/node_modules/pi-lens/dist/clients/dispatch/runners/cpp-check.js +0 -219
- package/node_modules/pi-lens/dist/clients/dispatch/runners/credo.js +0 -82
- package/node_modules/pi-lens/dist/clients/dispatch/runners/cue-vet.js +0 -416
- package/node_modules/pi-lens/dist/clients/dispatch/runners/dart-analyze.js +0 -183
- package/node_modules/pi-lens/dist/clients/dispatch/runners/detekt.js +0 -176
- package/node_modules/pi-lens/dist/clients/dispatch/runners/dotnet-build.js +0 -164
- package/node_modules/pi-lens/dist/clients/dispatch/runners/elixir-check.js +0 -195
- package/node_modules/pi-lens/dist/clients/dispatch/runners/eslint.js +0 -137
- package/node_modules/pi-lens/dist/clients/dispatch/runners/fact-rules.js +0 -29
- package/node_modules/pi-lens/dist/clients/dispatch/runners/fish-indent.js +0 -69
- package/node_modules/pi-lens/dist/clients/dispatch/runners/gleam-check.js +0 -167
- package/node_modules/pi-lens/dist/clients/dispatch/runners/go-vet.js +0 -104
- package/node_modules/pi-lens/dist/clients/dispatch/runners/golangci-lint.js +0 -135
- package/node_modules/pi-lens/dist/clients/dispatch/runners/hadolint.js +0 -91
- package/node_modules/pi-lens/dist/clients/dispatch/runners/helm-lint.js +0 -171
- package/node_modules/pi-lens/dist/clients/dispatch/runners/helm-render.js +0 -940
- package/node_modules/pi-lens/dist/clients/dispatch/runners/htmlhint.js +0 -117
- package/node_modules/pi-lens/dist/clients/dispatch/runners/index.js +0 -108
- package/node_modules/pi-lens/dist/clients/dispatch/runners/javac.js +0 -99
- package/node_modules/pi-lens/dist/clients/dispatch/runners/ktlint.js +0 -110
- package/node_modules/pi-lens/dist/clients/dispatch/runners/lsp.js +0 -379
- package/node_modules/pi-lens/dist/clients/dispatch/runners/markdownlint.js +0 -167
- package/node_modules/pi-lens/dist/clients/dispatch/runners/mypy.js +0 -102
- package/node_modules/pi-lens/dist/clients/dispatch/runners/oxlint.js +0 -414
- package/node_modules/pi-lens/dist/clients/dispatch/runners/php-lint.js +0 -85
- package/node_modules/pi-lens/dist/clients/dispatch/runners/phpstan.js +0 -120
- package/node_modules/pi-lens/dist/clients/dispatch/runners/prisma-validate.js +0 -62
- package/node_modules/pi-lens/dist/clients/dispatch/runners/psscriptanalyzer.js +0 -445
- package/node_modules/pi-lens/dist/clients/dispatch/runners/pyright.js +0 -169
- package/node_modules/pi-lens/dist/clients/dispatch/runners/rubocop.js +0 -99
- package/node_modules/pi-lens/dist/clients/dispatch/runners/ruff.js +0 -88
- package/node_modules/pi-lens/dist/clients/dispatch/runners/rust-clippy.js +0 -256
- package/node_modules/pi-lens/dist/clients/dispatch/runners/shellcheck.js +0 -173
- package/node_modules/pi-lens/dist/clients/dispatch/runners/shfmt.js +0 -102
- package/node_modules/pi-lens/dist/clients/dispatch/runners/spellcheck.js +0 -128
- package/node_modules/pi-lens/dist/clients/dispatch/runners/spotbugs.js +0 -259
- package/node_modules/pi-lens/dist/clients/dispatch/runners/sqlfluff.js +0 -183
- package/node_modules/pi-lens/dist/clients/dispatch/runners/stylelint.js +0 -166
- package/node_modules/pi-lens/dist/clients/dispatch/runners/swiftlint.js +0 -163
- package/node_modules/pi-lens/dist/clients/dispatch/runners/taplo.js +0 -174
- package/node_modules/pi-lens/dist/clients/dispatch/runners/terragrunt.js +0 -168
- package/node_modules/pi-lens/dist/clients/dispatch/runners/tflint.js +0 -125
- package/node_modules/pi-lens/dist/clients/dispatch/runners/tree-sitter.js +0 -643
- package/node_modules/pi-lens/dist/clients/dispatch/runners/trivy-config.js +0 -253
- package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/availability-policy.js +0 -496
- package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/candidate-probe.js +0 -90
- package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/diagnostic-parsers.js +0 -95
- package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/lazy-installer.js +0 -274
- package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/runner-helpers.js +0 -1701
- package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/spawn-outcome.js +0 -101
- package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/tool-failure.js +0 -235
- package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/toolchain-availability.js +0 -169
- package/node_modules/pi-lens/dist/clients/dispatch/runners/utils.js +0 -15
- package/node_modules/pi-lens/dist/clients/dispatch/runners/vale.js +0 -128
- package/node_modules/pi-lens/dist/clients/dispatch/runners/yaml-rule-parser.js +0 -242
- package/node_modules/pi-lens/dist/clients/dispatch/runners/yamllint.js +0 -95
- package/node_modules/pi-lens/dist/clients/dispatch/runners/zig-check.js +0 -79
- package/node_modules/pi-lens/dist/clients/dispatch/suppress-writer.js +0 -79
- package/node_modules/pi-lens/dist/clients/dispatch/tool-profile.js +0 -30
- package/node_modules/pi-lens/dist/clients/dispatch/types.js +0 -21
- package/node_modules/pi-lens/dist/clients/dispatch/utils/format-utils.js +0 -45
- package/node_modules/pi-lens/dist/clients/dispatch/utils/lsp-diagnostics.js +0 -35
- package/node_modules/pi-lens/dist/clients/disposition-logger.js +0 -32
- package/node_modules/pi-lens/dist/clients/disposition-publish.js +0 -124
- package/node_modules/pi-lens/dist/clients/durable-store.js +0 -97
- package/node_modules/pi-lens/dist/clients/effective-config.js +0 -415
- package/node_modules/pi-lens/dist/clients/env-utils.js +0 -83
- package/node_modules/pi-lens/dist/clients/error-class.js +0 -23
- package/node_modules/pi-lens/dist/clients/eval-timestamp.js +0 -17
- package/node_modules/pi-lens/dist/clients/event-loop-hold.js +0 -274
- package/node_modules/pi-lens/dist/clients/event-loop-monitor.js +0 -250
- package/node_modules/pi-lens/dist/clients/extension-log.js +0 -504
- package/node_modules/pi-lens/dist/clients/extension-mode.js +0 -73
- package/node_modules/pi-lens/dist/clients/feature-hints.js +0 -103
- package/node_modules/pi-lens/dist/clients/file-kinds.js +0 -412
- package/node_modules/pi-lens/dist/clients/file-role.js +0 -134
- package/node_modules/pi-lens/dist/clients/file-time.js +0 -160
- package/node_modules/pi-lens/dist/clients/file-utils.js +0 -1032
- package/node_modules/pi-lens/dist/clients/finding-delivery-gate.js +0 -494
- package/node_modules/pi-lens/dist/clients/finding-identity.js +0 -88
- package/node_modules/pi-lens/dist/clients/fix-worklog.js +0 -103
- package/node_modules/pi-lens/dist/clients/format-events-publish.js +0 -343
- package/node_modules/pi-lens/dist/clients/format-service.js +0 -222
- package/node_modules/pi-lens/dist/clients/formatters-lazy.js +0 -9
- package/node_modules/pi-lens/dist/clients/formatters.js +0 -2032
- package/node_modules/pi-lens/dist/clients/freshness-cadence.js +0 -17
- package/node_modules/pi-lens/dist/clients/freshness.js +0 -38
- package/node_modules/pi-lens/dist/clients/generated-artifacts.js +0 -394
- package/node_modules/pi-lens/dist/clients/generation-guard.js +0 -215
- package/node_modules/pi-lens/dist/clients/git-guard.js +0 -1136
- package/node_modules/pi-lens/dist/clients/git-tracked-ignore.js +0 -243
- package/node_modules/pi-lens/dist/clients/gitleaks-client.js +0 -509
- package/node_modules/pi-lens/dist/clients/go-client.js +0 -104
- package/node_modules/pi-lens/dist/clients/govulncheck-client.js +0 -605
- package/node_modules/pi-lens/dist/clients/gradle-ktfmt-style.js +0 -348
- package/node_modules/pi-lens/dist/clients/grammar-source.js +0 -465
- package/node_modules/pi-lens/dist/clients/gzip-stage-write.js +0 -135
- package/node_modules/pi-lens/dist/clients/hashline-anchor.js +0 -424
- package/node_modules/pi-lens/dist/clients/hook-budgets.js +0 -76
- package/node_modules/pi-lens/dist/clients/host-edit-normalize.js +0 -140
- package/node_modules/pi-lens/dist/clients/host-ports.js +0 -39
- package/node_modules/pi-lens/dist/clients/indent-retarget.js +0 -154
- package/node_modules/pi-lens/dist/clients/inline-blocker-dispositions.js +0 -186
- package/node_modules/pi-lens/dist/clients/install-diagnostics.js +0 -156
- package/node_modules/pi-lens/dist/clients/installer/index.js +0 -5416
- package/node_modules/pi-lens/dist/clients/installer/managed-tool-refresh-session.js +0 -58
- package/node_modules/pi-lens/dist/clients/installer/managed-tool-refresh.js +0 -783
- package/node_modules/pi-lens/dist/clients/instance-reaper-state.js +0 -7
- package/node_modules/pi-lens/dist/clients/instance-reaper.js +0 -1137
- package/node_modules/pi-lens/dist/clients/instance-registry-lock.js +0 -145
- package/node_modules/pi-lens/dist/clients/instance-registry.js +0 -773
- package/node_modules/pi-lens/dist/clients/jscpd-client.js +0 -378
- package/node_modules/pi-lens/dist/clients/json-cache-read.js +0 -65
- package/node_modules/pi-lens/dist/clients/knip-client.js +0 -788
- package/node_modules/pi-lens/dist/clients/language-policy.js +0 -252
- package/node_modules/pi-lens/dist/clients/language-profile.js +0 -361
- package/node_modules/pi-lens/dist/clients/language-registry.js +0 -603
- package/node_modules/pi-lens/dist/clients/latency-logger.js +0 -727
- package/node_modules/pi-lens/dist/clients/lazy-import.js +0 -21
- package/node_modules/pi-lens/dist/clients/ledger-bounds.js +0 -54
- package/node_modules/pi-lens/dist/clients/lens-config.js +0 -404
- package/node_modules/pi-lens/dist/clients/lens-engine.js +0 -358
- package/node_modules/pi-lens/dist/clients/lens-events.js +0 -125
- package/node_modules/pi-lens/dist/clients/lens-flag-registry.js +0 -467
- package/node_modules/pi-lens/dist/clients/lens-map.js +0 -1156
- package/node_modules/pi-lens/dist/clients/live-bus-emitter.js +0 -74
- package/node_modules/pi-lens/dist/clients/log-cleanup.js +0 -222
- package/node_modules/pi-lens/dist/clients/lsp/aggregation.js +0 -178
- package/node_modules/pi-lens/dist/clients/lsp/cascade-tier.js +0 -421
- package/node_modules/pi-lens/dist/clients/lsp/client.js +0 -4593
- package/node_modules/pi-lens/dist/clients/lsp/config.js +0 -691
- package/node_modules/pi-lens/dist/clients/lsp/content-limits.js +0 -41
- package/node_modules/pi-lens/dist/clients/lsp/diagnostic-binding.js +0 -225
- package/node_modules/pi-lens/dist/clients/lsp/document-drift.js +0 -467
- package/node_modules/pi-lens/dist/clients/lsp/edits.js +0 -1219
- package/node_modules/pi-lens/dist/clients/lsp/index.js +0 -8305
- package/node_modules/pi-lens/dist/clients/lsp/inferred-project.js +0 -216
- package/node_modules/pi-lens/dist/clients/lsp/jvm-runtime.js +0 -298
- package/node_modules/pi-lens/dist/clients/lsp/language.js +0 -63
- package/node_modules/pi-lens/dist/clients/lsp/launch.js +0 -746
- package/node_modules/pi-lens/dist/clients/lsp/lombok.js +0 -158
- package/node_modules/pi-lens/dist/clients/lsp/path-utils.js +0 -5
- package/node_modules/pi-lens/dist/clients/lsp/pending-aux-coverage.js +0 -251
- package/node_modules/pi-lens/dist/clients/lsp/position-encoding.js +0 -61
- package/node_modules/pi-lens/dist/clients/lsp/ruby-drive-dirs.js +0 -83
- package/node_modules/pi-lens/dist/clients/lsp/server.js +0 -3290
- package/node_modules/pi-lens/dist/clients/lsp/session-roots.js +0 -192
- package/node_modules/pi-lens/dist/clients/lsp/spawn-history.js +0 -17
- package/node_modules/pi-lens/dist/clients/lsp/sync-kind.js +0 -56
- package/node_modules/pi-lens/dist/clients/lsp/tsserver-sync.js +0 -332
- package/node_modules/pi-lens/dist/clients/lsp/wait-policy/capability-snapshot.js +0 -1
- package/node_modules/pi-lens/dist/clients/lsp/wait-policy/classification.js +0 -85
- package/node_modules/pi-lens/dist/clients/lsp/wait-policy/index.js +0 -10
- package/node_modules/pi-lens/dist/clients/lsp/wait-policy/strategies.js +0 -392
- package/node_modules/pi-lens/dist/clients/lsp/watch-queue.js +0 -61
- package/node_modules/pi-lens/dist/clients/lsp/workspace-diagnostics-cache.js +0 -639
- package/node_modules/pi-lens/dist/clients/lsp/workspace-diagnostics-session.js +0 -30
- package/node_modules/pi-lens/dist/clients/lsp/workspace-sweep-hold.js +0 -184
- package/node_modules/pi-lens/dist/clients/lsp-budget.js +0 -186
- package/node_modules/pi-lens/dist/clients/lsp-document-symbols.js +0 -110
- package/node_modules/pi-lens/dist/clients/lsp-lazy.js +0 -9
- package/node_modules/pi-lens/dist/clients/lsp-mutation.js +0 -396
- package/node_modules/pi-lens/dist/clients/lsp-status.js +0 -59
- package/node_modules/pi-lens/dist/clients/map-with-concurrency.js +0 -40
- package/node_modules/pi-lens/dist/clients/mcp/analyze.js +0 -420
- package/node_modules/pi-lens/dist/clients/mcp/host-shim.js +0 -31
- package/node_modules/pi-lens/dist/clients/mcp/ipc.js +0 -523
- package/node_modules/pi-lens/dist/clients/mcp/review.js +0 -197
- package/node_modules/pi-lens/dist/clients/mcp/session.js +0 -412
- package/node_modules/pi-lens/dist/clients/memory-sampler.js +0 -208
- package/node_modules/pi-lens/dist/clients/message-end-attribution.js +0 -30
- package/node_modules/pi-lens/dist/clients/metrics-client.js +0 -107
- package/node_modules/pi-lens/dist/clients/metrics-history.js +0 -327
- package/node_modules/pi-lens/dist/clients/middle-man-analysis.js +0 -263
- package/node_modules/pi-lens/dist/clients/model-provider.js +0 -53
- package/node_modules/pi-lens/dist/clients/module-report-lsp.js +0 -189
- package/node_modules/pi-lens/dist/clients/module-report.js +0 -2150
- package/node_modules/pi-lens/dist/clients/mutating-tool.js +0 -651
- package/node_modules/pi-lens/dist/clients/mutation-attribution.js +0 -368
- package/node_modules/pi-lens/dist/clients/mutation-bridge.js +0 -240
- package/node_modules/pi-lens/dist/clients/ndjson-logger.js +0 -734
- package/node_modules/pi-lens/dist/clients/observed-mutation-sources.js +0 -101
- package/node_modules/pi-lens/dist/clients/observed-mutation.js +0 -1253
- package/node_modules/pi-lens/dist/clients/oldtext-autopatch.js +0 -128
- package/node_modules/pi-lens/dist/clients/opaque-mutation-scan.js +0 -496
- package/node_modules/pi-lens/dist/clients/opengrep-client.js +0 -333
- package/node_modules/pi-lens/dist/clients/opengrep-config.js +0 -76
- package/node_modules/pi-lens/dist/clients/package-manager.js +0 -607
- package/node_modules/pi-lens/dist/clients/package-root.js +0 -38
- package/node_modules/pi-lens/dist/clients/partial-edit-apply.js +0 -439
- package/node_modules/pi-lens/dist/clients/path-attribution-telemetry.js +0 -43
- package/node_modules/pi-lens/dist/clients/path-keyed-map.js +0 -108
- package/node_modules/pi-lens/dist/clients/path-utils.js +0 -1244
- package/node_modules/pi-lens/dist/clients/performance-report.js +0 -331
- package/node_modules/pi-lens/dist/clients/persist-debounce.js +0 -70
- package/node_modules/pi-lens/dist/clients/persistent-reverify.js +0 -271
- package/node_modules/pi-lens/dist/clients/php-cs-fixer-config.js +0 -119
- package/node_modules/pi-lens/dist/clients/pipeline.js +0 -1480
- package/node_modules/pi-lens/dist/clients/post-autofix-notice.js +0 -37
- package/node_modules/pi-lens/dist/clients/print-mode.js +0 -21
- package/node_modules/pi-lens/dist/clients/probe-home-state.js +0 -228
- package/node_modules/pi-lens/dist/clients/process-bridge.js +0 -66
- package/node_modules/pi-lens/dist/clients/process-singletons.js +0 -210
- package/node_modules/pi-lens/dist/clients/process-snapshot.js +0 -68
- package/node_modules/pi-lens/dist/clients/project-changes.js +0 -181
- package/node_modules/pi-lens/dist/clients/project-conventions.js +0 -171
- package/node_modules/pi-lens/dist/clients/project-diagnostics/cache.js +0 -137
- package/node_modules/pi-lens/dist/clients/project-diagnostics/extractors.js +0 -109
- package/node_modules/pi-lens/dist/clients/project-diagnostics/fresh-fetch.js +0 -668
- package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/call-graph-impact.js +0 -118
- package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/dead-code.js +0 -47
- package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/gitleaks.js +0 -40
- package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/govulncheck.js +0 -34
- package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/jscpd.js +0 -38
- package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/knip.js +0 -47
- package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/madge.js +0 -48
- package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/opengrep.js +0 -40
- package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/runner-findings.js +0 -127
- package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/trivy.js +0 -81
- package/node_modules/pi-lens/dist/clients/project-diagnostics/scanner.js +0 -520
- package/node_modules/pi-lens/dist/clients/project-diagnostics/types.js +0 -1
- package/node_modules/pi-lens/dist/clients/project-lens-config.js +0 -807
- package/node_modules/pi-lens/dist/clients/project-report.js +0 -701
- package/node_modules/pi-lens/dist/clients/project-scale.js +0 -237
- package/node_modules/pi-lens/dist/clients/project-scan-policy.js +0 -11
- package/node_modules/pi-lens/dist/clients/project-snapshot-fingerprint.js +0 -48
- package/node_modules/pi-lens/dist/clients/project-snapshot-persist-worker.js +0 -20
- package/node_modules/pi-lens/dist/clients/project-snapshot.js +0 -1653
- package/node_modules/pi-lens/dist/clients/project-trust.js +0 -181
- package/node_modules/pi-lens/dist/clients/python-environment.js +0 -217
- package/node_modules/pi-lens/dist/clients/python-provenance.js +0 -639
- package/node_modules/pi-lens/dist/clients/quiet-window-config.js +0 -47
- package/node_modules/pi-lens/dist/clients/quiet-window.js +0 -236
- package/node_modules/pi-lens/dist/clients/read-bridge.js +0 -139
- package/node_modules/pi-lens/dist/clients/read-expansion.js +0 -266
- package/node_modules/pi-lens/dist/clients/read-guard-logger.js +0 -251
- package/node_modules/pi-lens/dist/clients/read-guard-tool-lines.js +0 -1306
- package/node_modules/pi-lens/dist/clients/read-guard.js +0 -1561
- package/node_modules/pi-lens/dist/clients/recent-touches.js +0 -240
- package/node_modules/pi-lens/dist/clients/redact/secrets.js +0 -449
- package/node_modules/pi-lens/dist/clients/resource-sampler.js +0 -628
- package/node_modules/pi-lens/dist/clients/reverse-deps.js +0 -270
- package/node_modules/pi-lens/dist/clients/review-graph/builder.js +0 -5126
- package/node_modules/pi-lens/dist/clients/review-graph/format.js +0 -33
- package/node_modules/pi-lens/dist/clients/review-graph/git-identity.js +0 -163
- package/node_modules/pi-lens/dist/clients/review-graph/import-resolvers.js +0 -481
- package/node_modules/pi-lens/dist/clients/review-graph/persist-worker.js +0 -10
- package/node_modules/pi-lens/dist/clients/review-graph/query.js +0 -244
- package/node_modules/pi-lens/dist/clients/review-graph/revision-drift.js +0 -21
- package/node_modules/pi-lens/dist/clients/review-graph/service.js +0 -96
- package/node_modules/pi-lens/dist/clients/review-graph/shared-extraction-ir.js +0 -82
- package/node_modules/pi-lens/dist/clients/review-graph/symbol-id.js +0 -103
- package/node_modules/pi-lens/dist/clients/review-graph/tsconfig-paths.js +0 -299
- package/node_modules/pi-lens/dist/clients/review-graph/types.js +0 -1
- package/node_modules/pi-lens/dist/clients/review-graph/workspace-modules.js +0 -449
- package/node_modules/pi-lens/dist/clients/review-graph-logger.js +0 -81
- package/node_modules/pi-lens/dist/clients/ruff-client.js +0 -179
- package/node_modules/pi-lens/dist/clients/rules-scanner.js +0 -131
- package/node_modules/pi-lens/dist/clients/run-duration.js +0 -55
- package/node_modules/pi-lens/dist/clients/runtime-agent-end.js +0 -746
- package/node_modules/pi-lens/dist/clients/runtime-config.js +0 -77
- package/node_modules/pi-lens/dist/clients/runtime-context.js +0 -211
- package/node_modules/pi-lens/dist/clients/runtime-coordinator.js +0 -1324
- package/node_modules/pi-lens/dist/clients/runtime-session.js +0 -2485
- package/node_modules/pi-lens/dist/clients/runtime-tool-call.js +0 -1295
- package/node_modules/pi-lens/dist/clients/runtime-tool-result.js +0 -2049
- package/node_modules/pi-lens/dist/clients/runtime-turn.js +0 -3767
- package/node_modules/pi-lens/dist/clients/rust-client.js +0 -97
- package/node_modules/pi-lens/dist/clients/safe-spawn.js +0 -2357
- package/node_modules/pi-lens/dist/clients/sanitize.js +0 -286
- package/node_modules/pi-lens/dist/clients/scan-utils.js +0 -25
- package/node_modules/pi-lens/dist/clients/scratch-tree-policy.js +0 -165
- package/node_modules/pi-lens/dist/clients/search-read-registration.js +0 -94
- package/node_modules/pi-lens/dist/clients/secret-findings.js +0 -114
- package/node_modules/pi-lens/dist/clients/security-scan-client.js +0 -352
- package/node_modules/pi-lens/dist/clients/session-event-guard.js +0 -297
- package/node_modules/pi-lens/dist/clients/session-lifecycle.js +0 -484
- package/node_modules/pi-lens/dist/clients/session-start-observability.js +0 -94
- package/node_modules/pi-lens/dist/clients/session-state-store.js +0 -101
- package/node_modules/pi-lens/dist/clients/session-summary.js +0 -15
- package/node_modules/pi-lens/dist/clients/sessionstart-logger.js +0 -27
- package/node_modules/pi-lens/dist/clients/sg-runner.js +0 -876
- package/node_modules/pi-lens/dist/clients/sgconfig.js +0 -347
- package/node_modules/pi-lens/dist/clients/shared-checkout-guard.js +0 -338
- package/node_modules/pi-lens/dist/clients/single-flight.js +0 -158
- package/node_modules/pi-lens/dist/clients/situational-tool-telemetry.js +0 -108
- package/node_modules/pi-lens/dist/clients/skills-resolver.js +0 -141
- package/node_modules/pi-lens/dist/clients/slow-fs.js +0 -138
- package/node_modules/pi-lens/dist/clients/smells-rollup.js +0 -231
- package/node_modules/pi-lens/dist/clients/source-filter.js +0 -596
- package/node_modules/pi-lens/dist/clients/source-walker.js +0 -211
- package/node_modules/pi-lens/dist/clients/spawn-output-cap.js +0 -120
- package/node_modules/pi-lens/dist/clients/spawn-timeout-cooldown.js +0 -110
- package/node_modules/pi-lens/dist/clients/stale-marker.js +0 -17
- package/node_modules/pi-lens/dist/clients/startup-scan.js +0 -400
- package/node_modules/pi-lens/dist/clients/startup-timing.js +0 -130
- package/node_modules/pi-lens/dist/clients/string-utils.js +0 -33
- package/node_modules/pi-lens/dist/clients/subagent-mode.js +0 -111
- package/node_modules/pi-lens/dist/clients/symbol-containment.js +0 -24
- package/node_modules/pi-lens/dist/clients/symbol-types.js +0 -5
- package/node_modules/pi-lens/dist/clients/test-runner-client.js +0 -2507
- package/node_modules/pi-lens/dist/clients/test-runner-delivery.js +0 -287
- package/node_modules/pi-lens/dist/clients/todo-scanner.js +0 -229
- package/node_modules/pi-lens/dist/clients/tool-agreement.js +0 -423
- package/node_modules/pi-lens/dist/clients/tool-config.js +0 -249
- package/node_modules/pi-lens/dist/clients/tool-cwd.js +0 -270
- package/node_modules/pi-lens/dist/clients/tool-definition.js +0 -47
- package/node_modules/pi-lens/dist/clients/tool-event.js +0 -105
- package/node_modules/pi-lens/dist/clients/tool-policy.js +0 -2755
- package/node_modules/pi-lens/dist/clients/tool-probe.js +0 -53
- package/node_modules/pi-lens/dist/clients/tool-render.js +0 -156
- package/node_modules/pi-lens/dist/clients/tool-set-policy.js +0 -118
- package/node_modules/pi-lens/dist/clients/tree-sitter-cache.js +0 -364
- package/node_modules/pi-lens/dist/clients/tree-sitter-client.js +0 -4195
- package/node_modules/pi-lens/dist/clients/tree-sitter-logger.js +0 -100
- package/node_modules/pi-lens/dist/clients/tree-sitter-navigator.js +0 -269
- package/node_modules/pi-lens/dist/clients/tree-sitter-query-loader.js +0 -569
- package/node_modules/pi-lens/dist/clients/tree-sitter-shared.js +0 -158
- package/node_modules/pi-lens/dist/clients/tree-sitter-symbol-extractor.js +0 -1265
- package/node_modules/pi-lens/dist/clients/trivy-client.js +0 -467
- package/node_modules/pi-lens/dist/clients/tui-fit.js +0 -50
- package/node_modules/pi-lens/dist/clients/turn-context.js +0 -52
- package/node_modules/pi-lens/dist/clients/turn-end/lane.js +0 -51
- package/node_modules/pi-lens/dist/clients/turn-end/lanes/govulncheck.js +0 -112
- package/node_modules/pi-lens/dist/clients/turn-end/lanes/secrets.js +0 -204
- package/node_modules/pi-lens/dist/clients/turn-summary-render.js +0 -72
- package/node_modules/pi-lens/dist/clients/turn-summary.js +0 -132
- package/node_modules/pi-lens/dist/clients/typos-config.js +0 -29
- package/node_modules/pi-lens/dist/clients/user-notify.js +0 -51
- package/node_modules/pi-lens/dist/clients/vanished-instance-marker.js +0 -57
- package/node_modules/pi-lens/dist/clients/warm-attach.js +0 -305
- package/node_modules/pi-lens/dist/clients/widget-state.js +0 -1808
- package/node_modules/pi-lens/dist/clients/word-index-logger.js +0 -49
- package/node_modules/pi-lens/dist/clients/word-index-store.js +0 -459
- package/node_modules/pi-lens/dist/clients/word-index.js +0 -2080
- package/node_modules/pi-lens/dist/clients/workspace-topology.js +0 -443
- package/node_modules/pi-lens/dist/clients/write-ordering-guard.js +0 -65
- package/node_modules/pi-lens/dist/clients/zizmor-config.js +0 -340
- package/node_modules/pi-lens/dist/i18n.js +0 -69
- package/node_modules/pi-lens/dist/mcp/build-staleness.js +0 -124
- package/node_modules/pi-lens/dist/scripts/lib/process-scan.mjs +0 -583
- package/node_modules/pi-lens/dist/scripts/lib/skills-predicate.mjs +0 -129
- package/node_modules/pi-lens/dist/scripts/lib/web-tree-sitter-dir.mjs +0 -123
- package/node_modules/pi-lens/dist/tools/activate-tools.js +0 -87
- package/node_modules/pi-lens/dist/tools/ast-grep-outline.js +0 -137
- package/node_modules/pi-lens/dist/tools/ast-grep-replace.js +0 -244
- package/node_modules/pi-lens/dist/tools/ast-grep-search.js +0 -762
- package/node_modules/pi-lens/dist/tools/effective-config.js +0 -90
- package/node_modules/pi-lens/dist/tools/lens-diagnostic-mark.js +0 -375
- package/node_modules/pi-lens/dist/tools/lens-diagnostics.js +0 -2571
- package/node_modules/pi-lens/dist/tools/lsp-diagnostics.js +0 -1745
- package/node_modules/pi-lens/dist/tools/lsp-navigation.js +0 -1367
- package/node_modules/pi-lens/dist/tools/lsp-structured-output.js +0 -294
- package/node_modules/pi-lens/dist/tools/module-report.js +0 -382
- package/node_modules/pi-lens/dist/tools/project-report.js +0 -86
- package/node_modules/pi-lens/dist/tools/render-compact.js +0 -374
- package/node_modules/pi-lens/dist/tools/scan-progress.js +0 -53
- package/node_modules/pi-lens/dist/tools/shared.js +0 -29
- package/node_modules/pi-lens/dist/tools/symbol-search.js +0 -155
- package/node_modules/pi-web-access/opencode-session-headers.ts +0 -24
- package/node_modules/remote-pi/README.md +0 -675
- package/node_modules/remote-pi/dist/actions/handlers.d.ts +0 -122
- package/node_modules/remote-pi/dist/actions/handlers.js +0 -160
- package/node_modules/remote-pi/dist/actions/handlers.js.map +0 -1
- package/node_modules/remote-pi/dist/actions/registry.d.ts +0 -39
- package/node_modules/remote-pi/dist/actions/registry.js +0 -58
- package/node_modules/remote-pi/dist/actions/registry.js.map +0 -1
- package/node_modules/remote-pi/dist/bin/supervisord.d.ts +0 -2
- package/node_modules/remote-pi/dist/bin/supervisord.js +0 -86
- package/node_modules/remote-pi/dist/bin/supervisord.js.map +0 -1
- package/node_modules/remote-pi/dist/commands/builtin_mirror.d.ts +0 -58
- package/node_modules/remote-pi/dist/commands/builtin_mirror.js +0 -71
- package/node_modules/remote-pi/dist/commands/builtin_mirror.js.map +0 -1
- package/node_modules/remote-pi/dist/commands/list_commands.d.ts +0 -60
- package/node_modules/remote-pi/dist/commands/list_commands.js +0 -73
- package/node_modules/remote-pi/dist/commands/list_commands.js.map +0 -1
- package/node_modules/remote-pi/dist/config.d.ts +0 -62
- package/node_modules/remote-pi/dist/config.js +0 -115
- package/node_modules/remote-pi/dist/config.js.map +0 -1
- package/node_modules/remote-pi/dist/daemon/client.d.ts +0 -20
- package/node_modules/remote-pi/dist/daemon/client.js +0 -131
- package/node_modules/remote-pi/dist/daemon/client.js.map +0 -1
- package/node_modules/remote-pi/dist/daemon/control_protocol.d.ts +0 -176
- package/node_modules/remote-pi/dist/daemon/control_protocol.js +0 -63
- package/node_modules/remote-pi/dist/daemon/control_protocol.js.map +0 -1
- package/node_modules/remote-pi/dist/daemon/cron_log.d.ts +0 -45
- package/node_modules/remote-pi/dist/daemon/cron_log.js +0 -72
- package/node_modules/remote-pi/dist/daemon/cron_log.js.map +0 -1
- package/node_modules/remote-pi/dist/daemon/cron_registry.d.ts +0 -80
- package/node_modules/remote-pi/dist/daemon/cron_registry.js +0 -194
- package/node_modules/remote-pi/dist/daemon/cron_registry.js.map +0 -1
- package/node_modules/remote-pi/dist/daemon/id.d.ts +0 -24
- package/node_modules/remote-pi/dist/daemon/id.js +0 -36
- package/node_modules/remote-pi/dist/daemon/id.js.map +0 -1
- package/node_modules/remote-pi/dist/daemon/install.d.ts +0 -170
- package/node_modules/remote-pi/dist/daemon/install.js +0 -547
- package/node_modules/remote-pi/dist/daemon/install.js.map +0 -1
- package/node_modules/remote-pi/dist/daemon/registry.d.ts +0 -63
- package/node_modules/remote-pi/dist/daemon/registry.js +0 -153
- package/node_modules/remote-pi/dist/daemon/registry.js.map +0 -1
- package/node_modules/remote-pi/dist/daemon/rpc_child.d.ts +0 -194
- package/node_modules/remote-pi/dist/daemon/rpc_child.js +0 -389
- package/node_modules/remote-pi/dist/daemon/rpc_child.js.map +0 -1
- package/node_modules/remote-pi/dist/daemon/supervisor.d.ts +0 -93
- package/node_modules/remote-pi/dist/daemon/supervisor.js +0 -596
- package/node_modules/remote-pi/dist/daemon/supervisor.js.map +0 -1
- package/node_modules/remote-pi/dist/extension_ui_bridge.d.ts +0 -26
- package/node_modules/remote-pi/dist/extension_ui_bridge.js +0 -341
- package/node_modules/remote-pi/dist/extension_ui_bridge.js.map +0 -1
- package/node_modules/remote-pi/dist/index.d.ts +0 -213
- package/node_modules/remote-pi/dist/index.js +0 -4996
- package/node_modules/remote-pi/dist/index.js.map +0 -1
- package/node_modules/remote-pi/dist/mcp/mesh_result.d.ts +0 -10
- package/node_modules/remote-pi/dist/mcp/mesh_result.js +0 -42
- package/node_modules/remote-pi/dist/mcp/mesh_result.js.map +0 -1
- package/node_modules/remote-pi/dist/mcp/mesh_server.d.ts +0 -16
- package/node_modules/remote-pi/dist/mcp/mesh_server.js +0 -327
- package/node_modules/remote-pi/dist/mcp/mesh_server.js.map +0 -1
- package/node_modules/remote-pi/dist/mesh/canonical.d.ts +0 -30
- package/node_modules/remote-pi/dist/mesh/canonical.js +0 -61
- package/node_modules/remote-pi/dist/mesh/canonical.js.map +0 -1
- package/node_modules/remote-pi/dist/mesh/client.d.ts +0 -18
- package/node_modules/remote-pi/dist/mesh/client.js +0 -125
- package/node_modules/remote-pi/dist/mesh/client.js.map +0 -1
- package/node_modules/remote-pi/dist/mesh/encoding.d.ts +0 -38
- package/node_modules/remote-pi/dist/mesh/encoding.js +0 -216
- package/node_modules/remote-pi/dist/mesh/encoding.js.map +0 -1
- package/node_modules/remote-pi/dist/mesh/self_revoke.d.ts +0 -73
- package/node_modules/remote-pi/dist/mesh/self_revoke.js +0 -401
- package/node_modules/remote-pi/dist/mesh/self_revoke.js.map +0 -1
- package/node_modules/remote-pi/dist/mesh/siblings.d.ts +0 -49
- package/node_modules/remote-pi/dist/mesh/siblings.js +0 -159
- package/node_modules/remote-pi/dist/mesh/siblings.js.map +0 -1
- package/node_modules/remote-pi/dist/mesh/types.d.ts +0 -34
- package/node_modules/remote-pi/dist/mesh/types.js +0 -11
- package/node_modules/remote-pi/dist/mesh/types.js.map +0 -1
- package/node_modules/remote-pi/dist/mesh/verify.d.ts +0 -17
- package/node_modules/remote-pi/dist/mesh/verify.js +0 -86
- package/node_modules/remote-pi/dist/mesh/verify.js.map +0 -1
- package/node_modules/remote-pi/dist/pairing/crypto.d.ts +0 -8
- package/node_modules/remote-pi/dist/pairing/crypto.js +0 -22
- package/node_modules/remote-pi/dist/pairing/crypto.js.map +0 -1
- package/node_modules/remote-pi/dist/pairing/handshake.d.ts +0 -28
- package/node_modules/remote-pi/dist/pairing/handshake.js +0 -113
- package/node_modules/remote-pi/dist/pairing/handshake.js.map +0 -1
- package/node_modules/remote-pi/dist/pairing/noise-sha256.d.ts +0 -16
- package/node_modules/remote-pi/dist/pairing/noise-sha256.js +0 -103
- package/node_modules/remote-pi/dist/pairing/noise-sha256.js.map +0 -1
- package/node_modules/remote-pi/dist/pairing/qr.d.ts +0 -59
- package/node_modules/remote-pi/dist/pairing/qr.js +0 -125
- package/node_modules/remote-pi/dist/pairing/qr.js.map +0 -1
- package/node_modules/remote-pi/dist/pairing/storage.d.ts +0 -120
- package/node_modules/remote-pi/dist/pairing/storage.js +0 -604
- package/node_modules/remote-pi/dist/pairing/storage.js.map +0 -1
- package/node_modules/remote-pi/dist/protocol/codec.d.ts +0 -7
- package/node_modules/remote-pi/dist/protocol/codec.js +0 -49
- package/node_modules/remote-pi/dist/protocol/codec.js.map +0 -1
- package/node_modules/remote-pi/dist/protocol/types.d.ts +0 -393
- package/node_modules/remote-pi/dist/protocol/types.js +0 -2
- package/node_modules/remote-pi/dist/protocol/types.js.map +0 -1
- package/node_modules/remote-pi/dist/rooms.d.ts +0 -29
- package/node_modules/remote-pi/dist/rooms.js +0 -57
- package/node_modules/remote-pi/dist/rooms.js.map +0 -1
- package/node_modules/remote-pi/dist/session/address.d.ts +0 -49
- package/node_modules/remote-pi/dist/session/address.js +0 -58
- package/node_modules/remote-pi/dist/session/address.js.map +0 -1
- package/node_modules/remote-pi/dist/session/agent_bridge.d.ts +0 -55
- package/node_modules/remote-pi/dist/session/agent_bridge.js +0 -146
- package/node_modules/remote-pi/dist/session/agent_bridge.js.map +0 -1
- package/node_modules/remote-pi/dist/session/bridge.d.ts +0 -37
- package/node_modules/remote-pi/dist/session/bridge.js +0 -130
- package/node_modules/remote-pi/dist/session/bridge.js.map +0 -1
- package/node_modules/remote-pi/dist/session/broker.d.ts +0 -189
- package/node_modules/remote-pi/dist/session/broker.js +0 -507
- package/node_modules/remote-pi/dist/session/broker.js.map +0 -1
- package/node_modules/remote-pi/dist/session/broker_remote.d.ts +0 -74
- package/node_modules/remote-pi/dist/session/broker_remote.js +0 -583
- package/node_modules/remote-pi/dist/session/broker_remote.js.map +0 -1
- package/node_modules/remote-pi/dist/session/cwd_lock.d.ts +0 -33
- package/node_modules/remote-pi/dist/session/cwd_lock.js +0 -126
- package/node_modules/remote-pi/dist/session/cwd_lock.js.map +0 -1
- package/node_modules/remote-pi/dist/session/envelope.d.ts +0 -33
- package/node_modules/remote-pi/dist/session/envelope.js +0 -117
- package/node_modules/remote-pi/dist/session/envelope.js.map +0 -1
- package/node_modules/remote-pi/dist/session/global_config.d.ts +0 -33
- package/node_modules/remote-pi/dist/session/global_config.js +0 -73
- package/node_modules/remote-pi/dist/session/global_config.js.map +0 -1
- package/node_modules/remote-pi/dist/session/ipc.d.ts +0 -27
- package/node_modules/remote-pi/dist/session/ipc.js +0 -22
- package/node_modules/remote-pi/dist/session/ipc.js.map +0 -1
- package/node_modules/remote-pi/dist/session/leader_election.d.ts +0 -32
- package/node_modules/remote-pi/dist/session/leader_election.js +0 -106
- package/node_modules/remote-pi/dist/session/leader_election.js.map +0 -1
- package/node_modules/remote-pi/dist/session/local_config.d.ts +0 -55
- package/node_modules/remote-pi/dist/session/local_config.js +0 -157
- package/node_modules/remote-pi/dist/session/local_config.js.map +0 -1
- package/node_modules/remote-pi/dist/session/mesh_message.d.ts +0 -20
- package/node_modules/remote-pi/dist/session/mesh_message.js +0 -28
- package/node_modules/remote-pi/dist/session/mesh_message.js.map +0 -1
- package/node_modules/remote-pi/dist/session/mesh_node.d.ts +0 -116
- package/node_modules/remote-pi/dist/session/mesh_node.js +0 -573
- package/node_modules/remote-pi/dist/session/mesh_node.js.map +0 -1
- package/node_modules/remote-pi/dist/session/peer.d.ts +0 -139
- package/node_modules/remote-pi/dist/session/peer.js +0 -451
- package/node_modules/remote-pi/dist/session/peer.js.map +0 -1
- package/node_modules/remote-pi/dist/session/peer_inventory.d.ts +0 -13
- package/node_modules/remote-pi/dist/session/peer_inventory.js +0 -48
- package/node_modules/remote-pi/dist/session/peer_inventory.js.map +0 -1
- package/node_modules/remote-pi/dist/session/peer_limits.d.ts +0 -9
- package/node_modules/remote-pi/dist/session/peer_limits.js +0 -21
- package/node_modules/remote-pi/dist/session/peer_limits.js.map +0 -1
- package/node_modules/remote-pi/dist/session/setup_wizard.d.ts +0 -39
- package/node_modules/remote-pi/dist/session/setup_wizard.js +0 -63
- package/node_modules/remote-pi/dist/session/setup_wizard.js.map +0 -1
- package/node_modules/remote-pi/dist/session/tool_gate.d.ts +0 -5
- package/node_modules/remote-pi/dist/session/tool_gate.js +0 -11
- package/node_modules/remote-pi/dist/session/tool_gate.js.map +0 -1
- package/node_modules/remote-pi/dist/session/tools.d.ts +0 -24
- package/node_modules/remote-pi/dist/session/tools.js +0 -252
- package/node_modules/remote-pi/dist/session/tools.js.map +0 -1
- package/node_modules/remote-pi/dist/session/wizard.d.ts +0 -13
- package/node_modules/remote-pi/dist/session/wizard.js +0 -20
- package/node_modules/remote-pi/dist/session/wizard.js.map +0 -1
- package/node_modules/remote-pi/dist/settings.d.ts +0 -15
- package/node_modules/remote-pi/dist/settings.js +0 -52
- package/node_modules/remote-pi/dist/settings.js.map +0 -1
- package/node_modules/remote-pi/dist/transport/peer_channel.d.ts +0 -37
- package/node_modules/remote-pi/dist/transport/peer_channel.js +0 -98
- package/node_modules/remote-pi/dist/transport/peer_channel.js.map +0 -1
- package/node_modules/remote-pi/dist/transport/pi_forward_client.d.ts +0 -29
- package/node_modules/remote-pi/dist/transport/pi_forward_client.js +0 -62
- package/node_modules/remote-pi/dist/transport/pi_forward_client.js.map +0 -1
- package/node_modules/remote-pi/dist/transport/relay_client.d.ts +0 -91
- package/node_modules/remote-pi/dist/transport/relay_client.js +0 -206
- package/node_modules/remote-pi/dist/transport/relay_client.js.map +0 -1
- package/node_modules/remote-pi/dist/ui/footer.d.ts +0 -32
- package/node_modules/remote-pi/dist/ui/footer.js +0 -34
- package/node_modules/remote-pi/dist/ui/footer.js.map +0 -1
- package/node_modules/remote-pi/docs/daemon.md +0 -289
- package/node_modules/remote-pi/package.json +0 -92
- package/node_modules/remote-pi/service-templates/launchd.plist.template +0 -35
- package/node_modules/remote-pi/service-templates/systemd.service.template +0 -19
- package/node_modules/remote-pi/service-templates/task-launcher.vbs.template +0 -10
- package/node_modules/remote-pi/service-templates/task-scheduler.xml.template +0 -38
- package/node_modules/remote-pi/skills/agent-network/SKILL.md +0 -310
|
@@ -1,788 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Knip Client for pi-local
|
|
3
|
-
*
|
|
4
|
-
* Detects unused exports, files, dependencies, and more.
|
|
5
|
-
* Essential for safe refactoring — I need to know what's dead code
|
|
6
|
-
* before I can clean it up.
|
|
7
|
-
*
|
|
8
|
-
* Requires: npm install -D knip
|
|
9
|
-
* Docs: https://knip.dev/
|
|
10
|
-
*/
|
|
11
|
-
import { createSubsystemLogger } from "./extension-log.js";
|
|
12
|
-
import { incrementDegradationCount } from "./degradation-ledger.js";
|
|
13
|
-
import * as fs from "node:fs";
|
|
14
|
-
import * as path from "node:path";
|
|
15
|
-
import { getProjectDataDir } from "./file-utils.js";
|
|
16
|
-
import { findNearestMarkerRoot } from "./path-utils.js";
|
|
17
|
-
import { safeSpawnAsync } from "./safe-spawn.js";
|
|
18
|
-
import { createAvailabilityChecker, findManagedNodeToolBinary, getManagedToolEnvironment, resolveAvailableOrInstall, } from "./dispatch/runners/utils/runner-helpers.js";
|
|
19
|
-
import { createAvailabilityLatch, describeUnavailability, } from "./dispatch/runners/utils/availability-policy.js";
|
|
20
|
-
import { spawnFailedWithNoOutput } from "./dispatch/runners/utils/spawn-outcome.js";
|
|
21
|
-
import { formatToolFailure } from "./dispatch/runners/utils/tool-failure.js";
|
|
22
|
-
import { findLocalBinUpwards } from "./package-manager.js";
|
|
23
|
-
import { logSessionStart } from "./sessionstart-logger.js";
|
|
24
|
-
const EMPTY_RESULT = {
|
|
25
|
-
success: false,
|
|
26
|
-
issues: [],
|
|
27
|
-
unusedExports: [],
|
|
28
|
-
unusedFiles: [],
|
|
29
|
-
unusedDeps: [],
|
|
30
|
-
unlistedDeps: [],
|
|
31
|
-
};
|
|
32
|
-
const ANALYSIS_TIMEOUT_MS = 30_000;
|
|
33
|
-
/**
|
|
34
|
-
* Every package name referenced as a KEY (at any nesting depth — npm's
|
|
35
|
-
* `overrides` and pnpm's `pnpm.overrides` allow nested "for this dependency's
|
|
36
|
-
* sub-dependency" overrides) in `package.json`'s `overrides`, `resolutions`
|
|
37
|
-
* (Yarn's equivalent), or `pnpm.overrides` fields. These are the project's
|
|
38
|
-
* own explicit signal that a package is deliberately present to pin a
|
|
39
|
-
* resolution — not a source-imported dependency knip's import graph can see.
|
|
40
|
-
* Missing/malformed `package.json` degrades to an empty set (never throws) —
|
|
41
|
-
* this is a best-effort narrowing, not a required input.
|
|
42
|
-
*/
|
|
43
|
-
export function readOverridePinnedPackageNames(targetDir) {
|
|
44
|
-
const names = new Set();
|
|
45
|
-
let pkg;
|
|
46
|
-
try {
|
|
47
|
-
pkg = JSON.parse(fs.readFileSync(path.join(targetDir, "package.json"), "utf-8"));
|
|
48
|
-
}
|
|
49
|
-
catch {
|
|
50
|
-
return names;
|
|
51
|
-
}
|
|
52
|
-
const collectKeys = (value) => {
|
|
53
|
-
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
54
|
-
return;
|
|
55
|
-
for (const [key, nested] of Object.entries(value)) {
|
|
56
|
-
names.add(key);
|
|
57
|
-
collectKeys(nested);
|
|
58
|
-
}
|
|
59
|
-
};
|
|
60
|
-
collectKeys(pkg.overrides);
|
|
61
|
-
collectKeys(pkg.resolutions);
|
|
62
|
-
collectKeys(pkg.pnpm?.overrides);
|
|
63
|
-
return names;
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* knip's own config-file names, in knip's discovery order (knip 6
|
|
67
|
-
* `configFilesLookup`). Used for REPORTING which config a run resolved — the
|
|
68
|
-
* runner never passes `--config`, so knip still does its own discovery from the
|
|
69
|
-
* spawn cwd. Reading the same list here keeps the recorded answer honest
|
|
70
|
-
* instead of guessing "knip.json or nothing".
|
|
71
|
-
*/
|
|
72
|
-
const KNIP_CONFIG_FILENAMES = [
|
|
73
|
-
"knip.json",
|
|
74
|
-
"knip.jsonc",
|
|
75
|
-
"knip.ts",
|
|
76
|
-
"knip.js",
|
|
77
|
-
"knip.config.ts",
|
|
78
|
-
"knip.config.js",
|
|
79
|
-
".knip.json",
|
|
80
|
-
".knip.jsonc",
|
|
81
|
-
".knip.ts",
|
|
82
|
-
".knip.js",
|
|
83
|
-
];
|
|
84
|
-
/**
|
|
85
|
-
* The knip config this project ships, relative to `targetDir`, or null when the
|
|
86
|
-
* project ships none (knip then runs on its built-in defaults).
|
|
87
|
-
*
|
|
88
|
-
* `package.json` is reported last and only when it carries a `knip` field —
|
|
89
|
-
* knip reads that field as a config source, and a project that configures knip
|
|
90
|
-
* there is just as configured as one with a `knip.json`.
|
|
91
|
-
*/
|
|
92
|
-
export function resolveProjectKnipConfig(targetDir) {
|
|
93
|
-
for (const name of KNIP_CONFIG_FILENAMES) {
|
|
94
|
-
if (fs.existsSync(path.join(targetDir, name)))
|
|
95
|
-
return name;
|
|
96
|
-
}
|
|
97
|
-
try {
|
|
98
|
-
const pkg = JSON.parse(fs.readFileSync(path.join(targetDir, "package.json"), "utf-8"));
|
|
99
|
-
if (pkg && typeof pkg === "object" && pkg.knip !== undefined) {
|
|
100
|
-
return "package.json#knip";
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
catch {
|
|
104
|
-
// No/malformed package.json — "no project config" is the honest answer.
|
|
105
|
-
}
|
|
106
|
-
return null;
|
|
107
|
-
}
|
|
108
|
-
/**
|
|
109
|
-
* The knip the PROJECT itself would run: its own `node_modules/.bin/knip`,
|
|
110
|
-
* walking up so a workspace package finds the monorepo's hoisted copy. Null
|
|
111
|
-
* when the project installs no knip and pi-lens's managed shim is all there is.
|
|
112
|
-
*
|
|
113
|
-
* A project that installs knip pins the version its config is written against,
|
|
114
|
-
* and that version is what the project's `npx knip` / `npm run knip` runs.
|
|
115
|
-
* Preferring pi-lens's managed shim instead makes the lens report a DIFFERENT
|
|
116
|
-
* tool's verdict under the project's config (#1721): a managed knip 6.4.1
|
|
117
|
-
* flagged 62 unused type exports on a tree that knip 6.32.2 leaves clean, and
|
|
118
|
-
* every one of those flags is destructive advice.
|
|
119
|
-
*
|
|
120
|
-
* The walk is the shared `findLocalBinUpwards`, the same one behind jscpd's
|
|
121
|
-
* (`clients/jscpd-client.ts:269`) and madge's
|
|
122
|
-
* (`clients/dependency-checker.ts:420`) resolution, rather than a fourth copy.
|
|
123
|
-
* It stops at the filesystem half deliberately: the global-bin step those two
|
|
124
|
-
* add spawns a probe per package manager, and this runs on every analyze().
|
|
125
|
-
*/
|
|
126
|
-
export function resolveProjectKnipBinary(targetDir) {
|
|
127
|
-
return findLocalBinUpwards("knip", targetDir) ?? null;
|
|
128
|
-
}
|
|
129
|
-
/**
|
|
130
|
-
* Classify a resolved shim for the toolchain record: inside the project tree,
|
|
131
|
-
* elsewhere on the user's machine, or pi-lens's own managed/PATH fallback.
|
|
132
|
-
*/
|
|
133
|
-
export function classifyKnipBinary(binary, targetDir) {
|
|
134
|
-
if (binary === null)
|
|
135
|
-
return "managed-or-path";
|
|
136
|
-
const relative = path.relative(path.resolve(targetDir), path.resolve(binary));
|
|
137
|
-
return relative === "" ||
|
|
138
|
-
relative.startsWith("..") ||
|
|
139
|
-
path.isAbsolute(relative)
|
|
140
|
-
? "global"
|
|
141
|
-
: "project";
|
|
142
|
-
}
|
|
143
|
-
/**
|
|
144
|
-
* The version of the knip package behind a resolved shim, read from disk (no
|
|
145
|
-
* spawn — a `--version` probe per project root would add a process to a hot
|
|
146
|
-
* path for a telemetry field). Returns null for a bare PATH command, whose
|
|
147
|
-
* package location is unknown.
|
|
148
|
-
*/
|
|
149
|
-
function readKnipShimVersion(binary) {
|
|
150
|
-
if (!path.isAbsolute(binary))
|
|
151
|
-
return null;
|
|
152
|
-
const binDir = path.dirname(binary);
|
|
153
|
-
if (path.basename(binDir) !== ".bin")
|
|
154
|
-
return null;
|
|
155
|
-
try {
|
|
156
|
-
const pkg = JSON.parse(fs.readFileSync(path.join(path.dirname(binDir), "knip", "package.json"), "utf-8"));
|
|
157
|
-
const version = pkg.version;
|
|
158
|
-
return typeof version === "string" ? version : null;
|
|
159
|
-
}
|
|
160
|
-
catch {
|
|
161
|
-
return null;
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
/** Distinct toolchain records kept per client instance (bounded telemetry). */
|
|
165
|
-
const MAX_RECORDED_TOOLCHAINS = 32;
|
|
166
|
-
// --- Client ---
|
|
167
|
-
export class KnipClient {
|
|
168
|
-
knipAvailability = createAvailabilityChecker("knip", ".cmd", ["--version"], {
|
|
169
|
-
environment: (cwd) => getManagedToolEnvironment("knip", cwd),
|
|
170
|
-
unclassifiedFailureOutcome: "missing",
|
|
171
|
-
fastPath: () => findManagedNodeToolBinary("knip"),
|
|
172
|
-
});
|
|
173
|
-
/**
|
|
174
|
-
* Client-side memo. Only a DURABLE verdict is latched — a transient probe
|
|
175
|
-
* failure expires, so an installed knip becomes available again without a
|
|
176
|
-
* host restart (#1467).
|
|
177
|
-
*/
|
|
178
|
-
availabilityLatch = createAvailabilityLatch();
|
|
179
|
-
knipCommand = "knip";
|
|
180
|
-
ensureInFlight = null;
|
|
181
|
-
log;
|
|
182
|
-
/**
|
|
183
|
-
* De-dupe concurrent `analyze()` calls against the same project root.
|
|
184
|
-
*
|
|
185
|
-
* Without this guard, two back-to-back turn_end events (or a turn_end
|
|
186
|
-
* firing while the session_start scan is still in flight) can each spawn
|
|
187
|
-
* a fresh `knip` process over the same tree. Two concurrent knip
|
|
188
|
-
* runs are CPU-bound and cause the exact pathology we're fixing: load
|
|
189
|
-
* averages >5, TUI freezes, and zombie processes reparented to init
|
|
190
|
-
* after pi exits mid-scan.
|
|
191
|
-
*
|
|
192
|
-
* Key: canonicalised project root (not the caller's cwd). Value is the
|
|
193
|
-
* in-flight promise; completing clears the slot.
|
|
194
|
-
*/
|
|
195
|
-
inFlight = new Map();
|
|
196
|
-
/** Last successful result per project and runtime content generation. */
|
|
197
|
-
completedByProject = new Map();
|
|
198
|
-
/**
|
|
199
|
-
* (project root, binary, config) triples already recorded, so the toolchain
|
|
200
|
-
* row is written once per distinct resolution instead of once per run.
|
|
201
|
-
*/
|
|
202
|
-
recordedToolchains = new Set();
|
|
203
|
-
constructor(verbose = false) {
|
|
204
|
-
this.log = verbose ? createSubsystemLogger("knip") : () => { };
|
|
205
|
-
}
|
|
206
|
-
/** Re-arm content-keyed reuse at the session boundary. */
|
|
207
|
-
resetSessionState() {
|
|
208
|
-
this.completedByProject.clear();
|
|
209
|
-
}
|
|
210
|
-
/**
|
|
211
|
-
* Find the nearest directory with a project/knip config marker.
|
|
212
|
-
*
|
|
213
|
-
* Returns `null` when no marker is found up to the filesystem root.
|
|
214
|
-
* Callers MUST treat a null return as "no project here, skip knip" —
|
|
215
|
-
* previously this fell back to `startDir`, which on a bare cwd like
|
|
216
|
-
* `/home/v` caused knip to recurse through every project and balloon
|
|
217
|
-
* memory/CPU.
|
|
218
|
-
*
|
|
219
|
-
* Delegates to the shared path-utils helper (refs #625) — never treats a
|
|
220
|
-
* package/knip config at or above $HOME as the project (escapes the
|
|
221
|
-
* workspace, #296/#250), and never walks past a `.git`/`.hg`/`.svn`
|
|
222
|
-
* boundary to pick up an unrelated parent's package.json (Unity/non-JS
|
|
223
|
-
* repos often have no package.json at their own root).
|
|
224
|
-
*/
|
|
225
|
-
resolveProjectRoot(startDir, homeDirOverride) {
|
|
226
|
-
return findNearestMarkerRoot(startDir, [
|
|
227
|
-
"package.json",
|
|
228
|
-
"knip.json",
|
|
229
|
-
"knip.ts",
|
|
230
|
-
"knip.config.js",
|
|
231
|
-
"knip.config.ts",
|
|
232
|
-
], { boundaries: [".git", ".hg", ".svn"], homeDir: homeDirOverride });
|
|
233
|
-
}
|
|
234
|
-
/**
|
|
235
|
-
* Check if knip CLI is available, auto-install if not.
|
|
236
|
-
*
|
|
237
|
-
* The memo returns `null` when the last verdict was transient and its
|
|
238
|
-
* cooldown has expired, which re-enters the probe. That is the difference
|
|
239
|
-
* between "knip is missing" (a fact worth caching) and "the probe timed out"
|
|
240
|
-
* (a moment worth retrying).
|
|
241
|
-
*/
|
|
242
|
-
async ensureAvailable() {
|
|
243
|
-
const memo = this.availabilityLatch.read();
|
|
244
|
-
if (memo !== null)
|
|
245
|
-
return memo;
|
|
246
|
-
if (this.ensureInFlight)
|
|
247
|
-
return this.ensureInFlight;
|
|
248
|
-
this.ensureInFlight = this.doEnsureAvailable();
|
|
249
|
-
try {
|
|
250
|
-
return await this.ensureInFlight;
|
|
251
|
-
}
|
|
252
|
-
finally {
|
|
253
|
-
this.ensureInFlight = null;
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
async doEnsureAvailable() {
|
|
257
|
-
const cwd = process.cwd();
|
|
258
|
-
const resolved = await resolveAvailableOrInstall(this.knipAvailability, "knip", cwd);
|
|
259
|
-
if (resolved !== null) {
|
|
260
|
-
this.knipCommand = resolved;
|
|
261
|
-
this.availabilityLatch.noteAvailable();
|
|
262
|
-
return true;
|
|
263
|
-
}
|
|
264
|
-
const verdict = this.knipAvailability.getVerdict(cwd);
|
|
265
|
-
this.availabilityLatch.noteUnavailable(verdict.outcome ?? "missing", verdict.cause ?? "not-found");
|
|
266
|
-
return false;
|
|
267
|
-
}
|
|
268
|
-
/**
|
|
269
|
-
* The single place a knip-unavailable result is worded. A transient probe
|
|
270
|
-
* failure must never be reported as "install knip" — knip is on disk.
|
|
271
|
-
*/
|
|
272
|
-
unavailableResult() {
|
|
273
|
-
const verdict = this.knipAvailability.getVerdict(process.cwd());
|
|
274
|
-
const transient = verdict.outcome === "transient";
|
|
275
|
-
const retryAfterMs = verdict.retryAtMs
|
|
276
|
-
? Math.max(0, verdict.retryAtMs - Date.now())
|
|
277
|
-
: undefined;
|
|
278
|
-
return {
|
|
279
|
-
...EMPTY_RESULT,
|
|
280
|
-
failureKind: transient ? "unavailable-transient" : "unavailable-missing",
|
|
281
|
-
summary: describeUnavailability({
|
|
282
|
-
tool: "Knip",
|
|
283
|
-
installHint: "npm install -D knip",
|
|
284
|
-
outcome: verdict.outcome,
|
|
285
|
-
cause: verdict.cause,
|
|
286
|
-
elapsedMs: verdict.elapsedMs,
|
|
287
|
-
retryAfterMs,
|
|
288
|
-
}),
|
|
289
|
-
};
|
|
290
|
-
}
|
|
291
|
-
/**
|
|
292
|
-
* Run knip analysis on the project.
|
|
293
|
-
*
|
|
294
|
-
* Async (uses `safeSpawnAsync`) so it never blocks the event loop —
|
|
295
|
-
* knip scans on large monorepos can take tens of seconds, and the
|
|
296
|
-
* previous `spawnSync` implementation froze the TUI for the entire
|
|
297
|
-
* duration.
|
|
298
|
-
*
|
|
299
|
-
* Re-entrancy safe: concurrent calls resolving to the same project
|
|
300
|
-
* root share a single knip process via `inFlight`.
|
|
301
|
-
*
|
|
302
|
-
* Successful memo hits validate package.json and the resolved Knip config
|
|
303
|
-
* with bounded metadata checks. The two statSync calls replace a 10-23
|
|
304
|
-
* second project scan. Source-only external edits remain undetected until
|
|
305
|
-
* pi observes a write or the session resets.
|
|
306
|
-
*/
|
|
307
|
-
async analyze(cwd, _ignore, options = {}) {
|
|
308
|
-
const targetDir = this.resolveProjectRoot(cwd || process.cwd());
|
|
309
|
-
if (!targetDir) {
|
|
310
|
-
// No package.json / knip config anywhere up the tree. Running knip
|
|
311
|
-
// from an arbitrary cwd (e.g. $HOME) has no defined meaning and in
|
|
312
|
-
// practice walks huge irrelevant trees — bail early.
|
|
313
|
-
this.log(`No project root found from ${cwd || process.cwd()}; skipping knip`);
|
|
314
|
-
return {
|
|
315
|
-
...EMPTY_RESULT,
|
|
316
|
-
success: true,
|
|
317
|
-
summary: "No project root found; knip skipped",
|
|
318
|
-
};
|
|
319
|
-
}
|
|
320
|
-
const key = path.resolve(targetDir);
|
|
321
|
-
const completed = this.completedByProject.get(key);
|
|
322
|
-
if (options.projectSeq !== undefined &&
|
|
323
|
-
completed?.projectSeq === options.projectSeq &&
|
|
324
|
-
this.matchesMemoSignal(targetDir, completed.signal)) {
|
|
325
|
-
this.log(`Analysis cache hit for ${key} at projectSeq ${options.projectSeq}`);
|
|
326
|
-
// #2154: a memo hit did not scan the root during THIS call, so it
|
|
327
|
-
// carries no authority to retire a retained finding — the flag is
|
|
328
|
-
// cleared even though the memoised result set it when it ran.
|
|
329
|
-
return { ...completed.result, execution: "cache", analyzed: false };
|
|
330
|
-
}
|
|
331
|
-
// A project that ships its own knip needs no managed install and no
|
|
332
|
-
// managed probe — the shim is already on disk, and gating on
|
|
333
|
-
// `ensureAvailable()` would tell such a project to "npm install -D knip"
|
|
334
|
-
// whenever the MANAGED copy is missing (#1721).
|
|
335
|
-
if (resolveProjectKnipBinary(targetDir) === null &&
|
|
336
|
-
!(await this.ensureAvailable())) {
|
|
337
|
-
return this.unavailableResult();
|
|
338
|
-
}
|
|
339
|
-
const existing = this.inFlight.get(key);
|
|
340
|
-
if (existing) {
|
|
341
|
-
this.log(`Analysis already in flight for ${key}; sharing result`);
|
|
342
|
-
return existing;
|
|
343
|
-
}
|
|
344
|
-
const promise = this.runAnalyze(key).then((result) => {
|
|
345
|
-
const executed = { ...result, execution: "executed" };
|
|
346
|
-
if (result.success && options.projectSeq !== undefined) {
|
|
347
|
-
this.completedByProject.set(key, {
|
|
348
|
-
projectSeq: options.projectSeq,
|
|
349
|
-
result: executed,
|
|
350
|
-
signal: this.readMemoSignal(key),
|
|
351
|
-
});
|
|
352
|
-
}
|
|
353
|
-
return executed;
|
|
354
|
-
});
|
|
355
|
-
// Identity-guarded release (#1968, #1967's pattern): delete only if
|
|
356
|
-
// THIS build is still the registered one. A bare delete-by-key lets a
|
|
357
|
-
// late-settling build A evict a live build B that replaced the entry
|
|
358
|
-
// mid-flight, and the next caller starts a duplicate.
|
|
359
|
-
const wrapped = promise.finally(() => {
|
|
360
|
-
if (this.inFlight.get(key) === wrapped)
|
|
361
|
-
this.inFlight.delete(key);
|
|
362
|
-
});
|
|
363
|
-
this.inFlight.set(key, wrapped);
|
|
364
|
-
return wrapped;
|
|
365
|
-
}
|
|
366
|
-
readMemoFileSignal(filePath) {
|
|
367
|
-
try {
|
|
368
|
-
const stat = fs.statSync(filePath);
|
|
369
|
-
return { path: filePath, mtimeMs: stat.mtimeMs, size: stat.size };
|
|
370
|
-
}
|
|
371
|
-
catch {
|
|
372
|
-
return null;
|
|
373
|
-
}
|
|
374
|
-
}
|
|
375
|
-
readMemoSignal(targetDir) {
|
|
376
|
-
const config = resolveProjectKnipConfig(targetDir);
|
|
377
|
-
return {
|
|
378
|
-
packageJson: this.readMemoFileSignal(path.join(targetDir, "package.json")),
|
|
379
|
-
config: config && config !== "package.json#knip"
|
|
380
|
-
? this.readMemoFileSignal(path.join(targetDir, config))
|
|
381
|
-
: null,
|
|
382
|
-
};
|
|
383
|
-
}
|
|
384
|
-
matchesMemoSignal(targetDir, signal) {
|
|
385
|
-
const current = {
|
|
386
|
-
packageJson: this.readMemoFileSignal(path.join(targetDir, "package.json")),
|
|
387
|
-
config: signal.config
|
|
388
|
-
? this.readMemoFileSignal(signal.config.path)
|
|
389
|
-
: null,
|
|
390
|
-
};
|
|
391
|
-
return (JSON.stringify(current.packageJson) ===
|
|
392
|
-
JSON.stringify(signal.packageJson) &&
|
|
393
|
-
JSON.stringify(current.config) === JSON.stringify(signal.config));
|
|
394
|
-
}
|
|
395
|
-
async runAnalyze(targetDir) {
|
|
396
|
-
// Cache dir is routed through pi-lens's project-data-dir convention (NOT
|
|
397
|
-
// knip's own default `./node_modules/.cache/knip`) so it lives alongside
|
|
398
|
-
// every other project cache (see cache-manager.ts, call-graph.ts) and is
|
|
399
|
-
// covered by the existing `.pi-lens/` gitignore entry.
|
|
400
|
-
//
|
|
401
|
-
// Documented cache-invalidation gaps (both live in knip's own cache, not
|
|
402
|
-
// in pi-lens):
|
|
403
|
-
//
|
|
404
|
-
// 1. `.gitignore` (per knip's docs): a cached run does NOT pick up
|
|
405
|
-
// newly-added `.gitignore` files automatically — the cache must be
|
|
406
|
-
// deleted to detect them. Not auto-handled here; documented tradeoff.
|
|
407
|
-
// 2. Consumer-side imports (#1630): knip's glob cache records the mtime of
|
|
408
|
-
// every directory that CONTRIBUTED a matched path, and revalidates
|
|
409
|
-
// against those. A directory that matched nothing at cache time is not
|
|
410
|
-
// recorded, so a file later added to it is invisible to the cached
|
|
411
|
-
// glob. A new test that imports an export therefore never reaches the
|
|
412
|
-
// graph, and knip keeps reporting that export as unused — a stale
|
|
413
|
-
// verdict pi-lens then renders as fresh. Fixed upstream in knip 6.28.0
|
|
414
|
-
// (glob cache now tracks every directory it reads), but the managed
|
|
415
|
-
// install floats and older versions are common in the field, so
|
|
416
|
-
// `pruneStaleGlobCache()` below drops the glob cache on every run
|
|
417
|
-
// regardless of version. Measured on this repo with knip 6.4.1:
|
|
418
|
-
// uncached 3.3s, fully cached 1.3s, glob-cache-dropped 1.4s. The glob
|
|
419
|
-
// cache is worth ~0.1s of the ~2.0s the cache saves, so dropping it
|
|
420
|
-
// buys correctness for almost nothing.
|
|
421
|
-
const cacheLocation = path.join(getProjectDataDir(targetDir), "cache", "knip");
|
|
422
|
-
// knip (verified against 6.26.0) silently fails to persist the cache when
|
|
423
|
-
// `--cache-location` points at a directory that doesn't exist yet: its
|
|
424
|
-
// internal auto-mkdir throws ENOENT (swallowed internally, debug-logged
|
|
425
|
-
// only) on Windows, so the very first run — and every run after, since the
|
|
426
|
-
// dir never gets created — degrades to an uncached scan with no error
|
|
427
|
-
// surfaced. Pre-creating the dir avoids that path entirely; matches the
|
|
428
|
-
// mkdirSync-before-spawn convention call-graph.ts already uses for its
|
|
429
|
-
// cache file's parent dir.
|
|
430
|
-
try {
|
|
431
|
-
fs.mkdirSync(cacheLocation, { recursive: true });
|
|
432
|
-
}
|
|
433
|
-
catch (err) {
|
|
434
|
-
this.log(`Failed to pre-create knip cache dir ${cacheLocation}: ${err}`);
|
|
435
|
-
}
|
|
436
|
-
this.pruneStaleGlobCache(cacheLocation);
|
|
437
|
-
const args = [
|
|
438
|
-
"--reporter=json",
|
|
439
|
-
"--include",
|
|
440
|
-
// enumMembers surfaces unused enum members — finer-grained than
|
|
441
|
-
// file-level exports. (knip 6.x has NO `classMembers` issue type; passing
|
|
442
|
-
// it makes knip exit 2 with zero output, silently disabling the scan —
|
|
443
|
-
// verified against knip 6.20. Valid member-level type here is enumMembers.)
|
|
444
|
-
"files,exports,types,dependencies,unlisted,enumMembers",
|
|
445
|
-
"--cache",
|
|
446
|
-
"--cache-location",
|
|
447
|
-
cacheLocation,
|
|
448
|
-
];
|
|
449
|
-
// Project toolchain first. #1199 already put `<targetDir>/node_modules/.bin`
|
|
450
|
-
// at the front of the child PATH for exactly this preference, but the spawn
|
|
451
|
-
// command is an ABSOLUTE managed path, so PATH order never got a say
|
|
452
|
-
// (#1721). Resolving the command here is what makes that intent real.
|
|
453
|
-
const projectBinary = resolveProjectKnipBinary(targetDir);
|
|
454
|
-
const command = projectBinary ?? this.knipCommand;
|
|
455
|
-
this.recordToolchain(targetDir, command, classifyKnipBinary(projectBinary, targetDir));
|
|
456
|
-
const result = await safeSpawnAsync(command, args, {
|
|
457
|
-
timeout: ANALYSIS_TIMEOUT_MS,
|
|
458
|
-
cwd: targetDir,
|
|
459
|
-
env: await getManagedToolEnvironment("knip", targetDir),
|
|
460
|
-
});
|
|
461
|
-
if (result.error) {
|
|
462
|
-
this.log(`Analysis error: ${result.error.message}`);
|
|
463
|
-
return {
|
|
464
|
-
...EMPTY_RESULT,
|
|
465
|
-
summary: `Error: ${result.error.message}`,
|
|
466
|
-
};
|
|
467
|
-
}
|
|
468
|
-
// Empirical exit-code table (knip 6.4.1, verified live for #1736): 0 =
|
|
469
|
-
// clean run, JSON stdout `{"issues":[]}`; 1 = clean run WITH findings,
|
|
470
|
-
// JSON stdout `{"issues":[...]}`; 2 = config/load error, empty or
|
|
471
|
-
// non-JSON stdout with the error on stderr. A genuinely clean run's
|
|
472
|
-
// stdout is therefore NEVER empty — knip always prints at least
|
|
473
|
-
// `{"issues":[]}` on exit 0. Empty stdout only ever shows up paired
|
|
474
|
-
// with a NONZERO exit (a broken shim, a crash, or knip's own load
|
|
475
|
-
// error), so `status !== 0 && !output.trim()` is unambiguous evidence
|
|
476
|
-
// of a failed run, never a clean one.
|
|
477
|
-
const output = result.stdout || "";
|
|
478
|
-
this.log(`Knip output length: ${output.length}, exit status: ${result.status}`);
|
|
479
|
-
if (output.length < 500) {
|
|
480
|
-
this.log(`Knip output sample: ${output}`);
|
|
481
|
-
}
|
|
482
|
-
if (!output.trim()) {
|
|
483
|
-
// Reuses the SAME discriminator every dispatch/runners linter uses
|
|
484
|
-
// (`spawnFailedWithNoOutput`, `clients/dispatch/runners/utils/
|
|
485
|
-
// spawn-outcome.ts`) rather than a parallel hand-rolled check — a
|
|
486
|
-
// nonzero exit with nothing to parse is never a clean run, here or
|
|
487
|
-
// there.
|
|
488
|
-
if (spawnFailedWithNoOutput(result, output)) {
|
|
489
|
-
// #1816: one shared wording, one truncation, signal named. The
|
|
490
|
-
// binary-source discriminator (#1721's whole point — WHICH knip
|
|
491
|
-
// ran) survives as a named field rather than as prose.
|
|
492
|
-
const reason = formatToolFailure({
|
|
493
|
-
tool: "knip",
|
|
494
|
-
status: result.status,
|
|
495
|
-
signal: result.signal,
|
|
496
|
-
stderr: result.stderr,
|
|
497
|
-
fields: {
|
|
498
|
-
command,
|
|
499
|
-
source: classifyKnipBinary(projectBinary, targetDir),
|
|
500
|
-
},
|
|
501
|
-
});
|
|
502
|
-
this.log(reason);
|
|
503
|
-
incrementDegradationCount({
|
|
504
|
-
kind: "runner-empty-result",
|
|
505
|
-
subject: "knip",
|
|
506
|
-
reason,
|
|
507
|
-
});
|
|
508
|
-
return {
|
|
509
|
-
...EMPTY_RESULT,
|
|
510
|
-
summary: `Knip exited ${result.status} with no output; run skipped`,
|
|
511
|
-
};
|
|
512
|
-
}
|
|
513
|
-
// status === 0 with empty stdout has never been observed against a
|
|
514
|
-
// real knip binary (a genuine clean run still prints
|
|
515
|
-
// `{"issues":[]}`), but a defensive fallback is cheap insurance
|
|
516
|
-
// against a future knip release that changes this. Deliberately NOT
|
|
517
|
-
// `analyzed` (#2154): nothing was parsed, so this shape must not
|
|
518
|
-
// retire a retained knip finding — it is reported cold instead.
|
|
519
|
-
return {
|
|
520
|
-
...EMPTY_RESULT,
|
|
521
|
-
success: true,
|
|
522
|
-
summary: "No issues found",
|
|
523
|
-
};
|
|
524
|
-
}
|
|
525
|
-
return this.dropOverridePinnedDeps(this.parseOutput(output), targetDir);
|
|
526
|
-
}
|
|
527
|
-
/**
|
|
528
|
-
* Record WHICH knip a run used and WHICH config it ran under (#1721).
|
|
529
|
-
*
|
|
530
|
-
* The dogfood failure this fixes was invisible from the outside: the lens
|
|
531
|
-
* reported 62 unused type exports and the project's own `npx knip` reported
|
|
532
|
-
* none, with nothing in any log to say the two ran different binaries. This
|
|
533
|
-
* row is that missing evidence — it names the shim, its version, the config
|
|
534
|
-
* knip will discover, and whether the shim came from the project or from
|
|
535
|
-
* pi-lens.
|
|
536
|
-
*
|
|
537
|
-
* Bounded twice over: one row per distinct (project root, binary, config)
|
|
538
|
-
* triple, and at most `MAX_RECORDED_TOOLCHAINS` distinct triples per client.
|
|
539
|
-
* Steady-state cost is therefore one line per project per session, not one
|
|
540
|
-
* per turn_end.
|
|
541
|
-
*/
|
|
542
|
-
recordToolchain(targetDir, command, source) {
|
|
543
|
-
const config = resolveProjectKnipConfig(targetDir);
|
|
544
|
-
const key = `${targetDir} ${command} ${config ?? ""}`;
|
|
545
|
-
if (this.recordedToolchains.has(key))
|
|
546
|
-
return;
|
|
547
|
-
if (this.recordedToolchains.size >= MAX_RECORDED_TOOLCHAINS)
|
|
548
|
-
return;
|
|
549
|
-
this.recordedToolchains.add(key);
|
|
550
|
-
const version = readKnipShimVersion(command);
|
|
551
|
-
logSessionStart(`knip toolchain ${targetDir}: binary=${command}` +
|
|
552
|
-
`${version ? ` version=${version}` : ""}` +
|
|
553
|
-
` source=${source}` +
|
|
554
|
-
` config=${config ?? "none (knip defaults)"}`);
|
|
555
|
-
}
|
|
556
|
-
/**
|
|
557
|
-
* Delete knip's glob cache (`glob-<version>.cache`) before every run (#1630).
|
|
558
|
-
*
|
|
559
|
-
* knip revalidates a cached glob against the mtimes of the directories that
|
|
560
|
-
* contributed a matched path. Directories that matched nothing are never
|
|
561
|
-
* recorded, so files later added to them stay invisible and knip keeps
|
|
562
|
-
* reporting an export as unused after a new consumer imports it. Removing
|
|
563
|
-
* this one file forces a fresh file walk while the module and plugin caches —
|
|
564
|
-
* which carry nearly all of the cache's speed — survive.
|
|
565
|
-
*
|
|
566
|
-
* Failures are logged and ignored: a glob cache we could not delete degrades
|
|
567
|
-
* to the pre-#1630 behavior, which is stale but not fatal.
|
|
568
|
-
*/
|
|
569
|
-
pruneStaleGlobCache(cacheLocation) {
|
|
570
|
-
let entries;
|
|
571
|
-
try {
|
|
572
|
-
entries = fs.readdirSync(cacheLocation);
|
|
573
|
-
}
|
|
574
|
-
catch (err) {
|
|
575
|
-
this.log(`Failed to read knip cache dir ${cacheLocation}: ${err}`);
|
|
576
|
-
return;
|
|
577
|
-
}
|
|
578
|
-
for (const entry of entries) {
|
|
579
|
-
if (!entry.startsWith("glob-") || !entry.endsWith(".cache"))
|
|
580
|
-
continue;
|
|
581
|
-
try {
|
|
582
|
-
fs.rmSync(path.join(cacheLocation, entry), { force: true });
|
|
583
|
-
this.log(`Pruned knip glob cache ${entry}`);
|
|
584
|
-
}
|
|
585
|
-
catch (err) {
|
|
586
|
-
this.log(`Failed to prune knip glob cache ${entry}: ${err}`);
|
|
587
|
-
}
|
|
588
|
-
}
|
|
589
|
-
}
|
|
590
|
-
/**
|
|
591
|
-
* Drop `dependency`/`devDependency` issues for a package that's also
|
|
592
|
-
* referenced as an npm `overrides` (or Yarn `resolutions` / pnpm
|
|
593
|
-
* `pnpm.overrides`) key in this project's `package.json` (#968).
|
|
594
|
-
*
|
|
595
|
-
* A direct devDependency whose only job is pinning a vulnerable
|
|
596
|
-
* transitive/peer resolution has no source import — that's WORKING AS
|
|
597
|
-
* INTENDED, not dead code, and knip has no concept of "this dependency
|
|
598
|
-
* exists only to satisfy an overrides entry" (it only sees imports).
|
|
599
|
-
* `overrides`/`resolutions` are the project's own explicit, unambiguous
|
|
600
|
-
* signal that the package is deliberately present — the same class of
|
|
601
|
-
* signal `hardcoded-url`'s `SCREAMING_SNAKE_CASE` constant-name carve-out
|
|
602
|
-
* and `ts-ssrf`'s constant-identifier carve-out lean on elsewhere in this
|
|
603
|
-
* codebase — so this narrows the finding rather than suppressing
|
|
604
|
-
* `dependency`/`devDependency` issues wholesale: a devDependency that
|
|
605
|
-
* ISN'T also an overrides/resolutions key is still reported.
|
|
606
|
-
*/
|
|
607
|
-
dropOverridePinnedDeps(result, targetDir) {
|
|
608
|
-
if (result.unusedDeps.length === 0)
|
|
609
|
-
return result;
|
|
610
|
-
const pinned = readOverridePinnedPackageNames(targetDir);
|
|
611
|
-
if (pinned.size === 0)
|
|
612
|
-
return result;
|
|
613
|
-
const isPinnedDepIssue = (issue) => (issue.type === "dependency" || issue.type === "devDependency") &&
|
|
614
|
-
(pinned.has(issue.name) ||
|
|
615
|
-
(!!issue.package && pinned.has(issue.package)));
|
|
616
|
-
const issues = result.issues.filter((issue) => !isPinnedDepIssue(issue));
|
|
617
|
-
const unusedDeps = result.unusedDeps.filter((issue) => !isPinnedDepIssue(issue));
|
|
618
|
-
return unusedDeps.length === result.unusedDeps.length
|
|
619
|
-
? result
|
|
620
|
-
: { ...result, issues, unusedDeps };
|
|
621
|
-
}
|
|
622
|
-
/**
|
|
623
|
-
* Find unused exports in a specific file
|
|
624
|
-
*/
|
|
625
|
-
async findUnusedExports(filePath) {
|
|
626
|
-
const result = await this.analyze(path.dirname(filePath));
|
|
627
|
-
const basename = path.basename(filePath);
|
|
628
|
-
return result.unusedExports
|
|
629
|
-
.filter((e) => e.file?.includes(basename))
|
|
630
|
-
.map((e) => e.name);
|
|
631
|
-
}
|
|
632
|
-
/**
|
|
633
|
-
* Format results for LLM consumption. Delegates to the pure
|
|
634
|
-
* `formatKnipResult` so callers (e.g. turn-end) can format without a live
|
|
635
|
-
* client instance.
|
|
636
|
-
*/
|
|
637
|
-
formatResult(result, maxItems = 20) {
|
|
638
|
-
return formatKnipResult(result, maxItems);
|
|
639
|
-
}
|
|
640
|
-
// --- Internal ---
|
|
641
|
-
parseOutput(output) {
|
|
642
|
-
try {
|
|
643
|
-
const data = JSON.parse(output);
|
|
644
|
-
const issues = [];
|
|
645
|
-
const unusedExports = [];
|
|
646
|
-
const unusedFiles = [];
|
|
647
|
-
const unusedDeps = [];
|
|
648
|
-
const unlistedDeps = [];
|
|
649
|
-
const addIssue = (issue) => {
|
|
650
|
-
issues.push(issue);
|
|
651
|
-
if (issue.type === "export" || issue.type === "enumMember") {
|
|
652
|
-
unusedExports.push(issue);
|
|
653
|
-
}
|
|
654
|
-
if (issue.type === "file")
|
|
655
|
-
unusedFiles.push(issue);
|
|
656
|
-
if (issue.type === "dependency" || issue.type === "devDependency") {
|
|
657
|
-
unusedDeps.push(issue);
|
|
658
|
-
}
|
|
659
|
-
if (issue.type === "unlisted" || issue.type === "bin") {
|
|
660
|
-
unlistedDeps.push(issue);
|
|
661
|
-
}
|
|
662
|
-
};
|
|
663
|
-
// Knip JSON format (grouped): { issues: [ { file, exports:[], files:[], dependencies:[], ... } ] }
|
|
664
|
-
const fileEntries = Array.isArray(data?.issues) ? data.issues : [];
|
|
665
|
-
for (const entry of fileEntries) {
|
|
666
|
-
const file = entry.file ?? "";
|
|
667
|
-
const push = (arr, type, _target) => {
|
|
668
|
-
for (const item of arr) {
|
|
669
|
-
addIssue({
|
|
670
|
-
type,
|
|
671
|
-
name: item.name ?? item.symbol ?? String(item),
|
|
672
|
-
file,
|
|
673
|
-
line: item.line,
|
|
674
|
-
package: item.package,
|
|
675
|
-
});
|
|
676
|
-
}
|
|
677
|
-
};
|
|
678
|
-
push(entry.exports ?? [], "export", unusedExports);
|
|
679
|
-
push(entry.types ?? [], "export", unusedExports);
|
|
680
|
-
push(entry.enumMembers ?? [], "enumMember", unusedExports);
|
|
681
|
-
push(entry.files ?? [], "file", unusedFiles);
|
|
682
|
-
push(entry.dependencies ?? [], "dependency", unusedDeps);
|
|
683
|
-
push(entry.devDependencies ?? [], "devDependency", unusedDeps);
|
|
684
|
-
push(entry.unlisted ?? [], "unlisted", unlistedDeps);
|
|
685
|
-
push(entry.binaries ?? [], "bin", unlistedDeps);
|
|
686
|
-
}
|
|
687
|
-
// Fallback format: flat list of issue objects
|
|
688
|
-
if (issues.length === 0 && Array.isArray(data)) {
|
|
689
|
-
for (const item of data) {
|
|
690
|
-
if (!item || typeof item !== "object")
|
|
691
|
-
continue;
|
|
692
|
-
const rawType = String(item.type ?? item.issueType ?? item.kind ?? "file").toLowerCase();
|
|
693
|
-
const type = rawType === "export" || rawType === "exports"
|
|
694
|
-
? "export"
|
|
695
|
-
: rawType === "dependency"
|
|
696
|
-
? "dependency"
|
|
697
|
-
: rawType === "devdependency"
|
|
698
|
-
? "devDependency"
|
|
699
|
-
: rawType === "unlisted"
|
|
700
|
-
? "unlisted"
|
|
701
|
-
: rawType === "bin" || rawType === "binaries"
|
|
702
|
-
? "bin"
|
|
703
|
-
: "file";
|
|
704
|
-
addIssue({
|
|
705
|
-
type,
|
|
706
|
-
name: String(item.name ??
|
|
707
|
-
item.symbol ??
|
|
708
|
-
item.package ??
|
|
709
|
-
item.message ??
|
|
710
|
-
"unknown"),
|
|
711
|
-
file: item.file ?? item.path ?? item.location?.file,
|
|
712
|
-
line: item.line ?? item.location?.line,
|
|
713
|
-
package: item.package,
|
|
714
|
-
});
|
|
715
|
-
}
|
|
716
|
-
}
|
|
717
|
-
return {
|
|
718
|
-
success: true,
|
|
719
|
-
// #2154: the one knip site that parsed a scan of this root.
|
|
720
|
-
analyzed: true,
|
|
721
|
-
issues,
|
|
722
|
-
unusedExports,
|
|
723
|
-
unusedFiles,
|
|
724
|
-
unusedDeps,
|
|
725
|
-
unlistedDeps,
|
|
726
|
-
summary: `Found ${issues.length} issues`,
|
|
727
|
-
};
|
|
728
|
-
}
|
|
729
|
-
catch (err) {
|
|
730
|
-
void err;
|
|
731
|
-
this.log("Failed to parse knip JSON output");
|
|
732
|
-
return {
|
|
733
|
-
...EMPTY_RESULT,
|
|
734
|
-
summary: "Failed to parse output",
|
|
735
|
-
};
|
|
736
|
-
}
|
|
737
|
-
}
|
|
738
|
-
}
|
|
739
|
-
/**
|
|
740
|
-
* Format a KnipResult for the agent (the FULL dead-code picture: all unused
|
|
741
|
-
* exports/members, files, and deps — not a delta). Pure: no client instance or
|
|
742
|
-
* `this`, so turn-end can surface findings without depending on the injected
|
|
743
|
-
* client exposing the method. Returns "" when there is nothing to report.
|
|
744
|
-
* Unlisted deps are intentionally omitted here — they're surfaced as a
|
|
745
|
-
* delta-gated blocker (newly broken imports), not as cleanup advice.
|
|
746
|
-
*/
|
|
747
|
-
export function formatKnipResult(result, maxItems = 20) {
|
|
748
|
-
if (!result.success)
|
|
749
|
-
return `[Knip] ${result.summary}`;
|
|
750
|
-
if (result.issues.length === 0)
|
|
751
|
-
return "";
|
|
752
|
-
let output = `[Knip] ${result.issues.length} issue(s)`;
|
|
753
|
-
if (result.unusedExports.length)
|
|
754
|
-
output += ` — ${result.unusedExports.length} unused export(s)`;
|
|
755
|
-
if (result.unusedFiles.length)
|
|
756
|
-
output += ` — ${result.unusedFiles.length} unused file(s)`;
|
|
757
|
-
if (result.unusedDeps.length)
|
|
758
|
-
output += ` — ${result.unusedDeps.length} unused dep(s)`;
|
|
759
|
-
if (result.unlistedDeps.length)
|
|
760
|
-
output += ` — ${result.unlistedDeps.length} unlisted dep(s)`;
|
|
761
|
-
output += ":\n";
|
|
762
|
-
// Show unused exports first (most useful for refactoring)
|
|
763
|
-
if (result.unusedExports.length > 0) {
|
|
764
|
-
output += "\n Unused exports:\n";
|
|
765
|
-
for (const issue of result.unusedExports.slice(0, maxItems)) {
|
|
766
|
-
const loc = issue.file ? ` (${path.basename(issue.file)})` : "";
|
|
767
|
-
output += ` - ${issue.name}${loc}\n`;
|
|
768
|
-
}
|
|
769
|
-
if (result.unusedExports.length > maxItems) {
|
|
770
|
-
output += ` ... and ${result.unusedExports.length - maxItems} more\n`;
|
|
771
|
-
}
|
|
772
|
-
}
|
|
773
|
-
// Show unused files
|
|
774
|
-
if (result.unusedFiles.length > 0) {
|
|
775
|
-
output += "\n Unused files:\n";
|
|
776
|
-
for (const issue of result.unusedFiles.slice(0, 10)) {
|
|
777
|
-
output += ` - ${issue.name}\n`;
|
|
778
|
-
}
|
|
779
|
-
}
|
|
780
|
-
// Show unused deps (might be worth removing)
|
|
781
|
-
if (result.unusedDeps.length > 0) {
|
|
782
|
-
output += "\n Unused dependencies:\n";
|
|
783
|
-
for (const issue of result.unusedDeps) {
|
|
784
|
-
output += ` - ${issue.package || issue.name}\n`;
|
|
785
|
-
}
|
|
786
|
-
}
|
|
787
|
-
return output;
|
|
788
|
-
}
|