@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,1056 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Parse bash commands for the file access the agent performed, so the read-guard
|
|
3
|
-
* stays consistent with how the Read/Write tools are tracked:
|
|
4
|
-
*
|
|
5
|
-
* - VIEW commands (cat/head/tail/sed -n) → reads, recorded with the exact line
|
|
6
|
-
* range shown (like the Read tool's delivered range).
|
|
7
|
-
* - WRITE commands (redirects, tee, sed -i, cp/mv dest, touch, and explicit
|
|
8
|
-
* in-place formatter/fixer targets) → the agent
|
|
9
|
-
* authored/owns the resulting file, exactly like the Write tool — these are
|
|
10
|
-
* registered via noteCreatedFile + recordWritten so a follow-up edit is not
|
|
11
|
-
* blocked.
|
|
12
|
-
*
|
|
13
|
-
* NOT treated as reads: grep (scattered matches, not a contiguous view), find
|
|
14
|
-
* and ls (names only, no content), and bare path mentions in arbitrary commands.
|
|
15
|
-
* Treating those as reads would let an edit through for content never shown.
|
|
16
|
-
*/
|
|
17
|
-
import * as nodeFs from "node:fs";
|
|
18
|
-
import * as path from "node:path";
|
|
19
|
-
import { isReadableSourceFile } from "./file-kinds.js";
|
|
20
|
-
import { classifyMutatingTool } from "./mutating-tool.js";
|
|
21
|
-
import { countFileLines } from "./read-guard-tool-lines.js";
|
|
22
|
-
import { stripAnsi } from "./sanitize.js";
|
|
23
|
-
function stripQuotes(token) {
|
|
24
|
-
if (token.length >= 2) {
|
|
25
|
-
const first = token[0];
|
|
26
|
-
const last = token[token.length - 1];
|
|
27
|
-
if ((first === "'" && last === "'") || (first === '"' && last === '"')) {
|
|
28
|
-
return token.slice(1, -1);
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
return token;
|
|
32
|
-
}
|
|
33
|
-
function parseHeredocDelimiter(command, start) {
|
|
34
|
-
let i = start;
|
|
35
|
-
const stripTabs = command[i] === "-";
|
|
36
|
-
if (stripTabs)
|
|
37
|
-
i += 1;
|
|
38
|
-
while (/\s/.test(command[i] ?? ""))
|
|
39
|
-
i += 1;
|
|
40
|
-
let delimiter = "";
|
|
41
|
-
let quoted = false;
|
|
42
|
-
while (i < command.length && !/[\s;&|<>]/.test(command[i] ?? "")) {
|
|
43
|
-
const ch = command[i];
|
|
44
|
-
if (ch === "'" || ch === '"') {
|
|
45
|
-
quoted = true;
|
|
46
|
-
const quote = ch;
|
|
47
|
-
i += 1;
|
|
48
|
-
while (i < command.length && command[i] !== quote) {
|
|
49
|
-
delimiter += command[i++];
|
|
50
|
-
}
|
|
51
|
-
if (command[i] !== quote)
|
|
52
|
-
return undefined;
|
|
53
|
-
i += 1;
|
|
54
|
-
continue;
|
|
55
|
-
}
|
|
56
|
-
if (ch === "\\") {
|
|
57
|
-
quoted = true;
|
|
58
|
-
i += 1;
|
|
59
|
-
if (i >= command.length)
|
|
60
|
-
return undefined;
|
|
61
|
-
delimiter += command[i++];
|
|
62
|
-
continue;
|
|
63
|
-
}
|
|
64
|
-
delimiter += ch;
|
|
65
|
-
i += 1;
|
|
66
|
-
}
|
|
67
|
-
if (!delimiter)
|
|
68
|
-
return undefined;
|
|
69
|
-
return { heredoc: { delimiter, stripTabs, quoted }, end: i - 1 };
|
|
70
|
-
}
|
|
71
|
-
function heredocSubstitutionBodies(body) {
|
|
72
|
-
const substitutions = [];
|
|
73
|
-
for (let i = 0; i < body.length; i += 1) {
|
|
74
|
-
if (body.startsWith("$(", i)) {
|
|
75
|
-
let depth = 1;
|
|
76
|
-
let quote;
|
|
77
|
-
for (let end = i + 2; end < body.length; end += 1) {
|
|
78
|
-
const ch = body[end];
|
|
79
|
-
if (quote === "single") {
|
|
80
|
-
if (ch === "'")
|
|
81
|
-
quote = undefined;
|
|
82
|
-
continue;
|
|
83
|
-
}
|
|
84
|
-
if (quote === "double") {
|
|
85
|
-
if (ch === '"' && body[end - 1] !== "\\")
|
|
86
|
-
quote = undefined;
|
|
87
|
-
continue;
|
|
88
|
-
}
|
|
89
|
-
if (ch === "'" || ch === '"') {
|
|
90
|
-
quote = ch === "'" ? "single" : "double";
|
|
91
|
-
}
|
|
92
|
-
else if (body.startsWith("$(", end)) {
|
|
93
|
-
depth += 1;
|
|
94
|
-
end += 1;
|
|
95
|
-
}
|
|
96
|
-
else if (ch === ")") {
|
|
97
|
-
depth -= 1;
|
|
98
|
-
if (depth === 0) {
|
|
99
|
-
substitutions.push(body.slice(i + 2, end));
|
|
100
|
-
i = end;
|
|
101
|
-
break;
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
else if (body[i] === "`" && body[i - 1] !== "\\") {
|
|
107
|
-
const end = body.indexOf("`", i + 1);
|
|
108
|
-
if (end >= 0) {
|
|
109
|
-
substitutions.push(body.slice(i + 1, end));
|
|
110
|
-
i = end;
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
return substitutions;
|
|
115
|
-
}
|
|
116
|
-
function consumeHeredocBodies(command, start, heredocs) {
|
|
117
|
-
let cursor = start;
|
|
118
|
-
const substitutions = [];
|
|
119
|
-
for (const heredoc of heredocs) {
|
|
120
|
-
const bodyStart = cursor;
|
|
121
|
-
let found = false;
|
|
122
|
-
while (cursor < command.length) {
|
|
123
|
-
const lineEnd = command.indexOf("\n", cursor);
|
|
124
|
-
const end = lineEnd < 0 ? command.length : lineEnd;
|
|
125
|
-
let line = command.slice(cursor, end);
|
|
126
|
-
if (heredoc.stripTabs)
|
|
127
|
-
line = line.replace(/^\t+/, "");
|
|
128
|
-
if (line.replace(/\r$/, "") === heredoc.delimiter) {
|
|
129
|
-
if (!heredoc.quoted)
|
|
130
|
-
substitutions.push(...heredocSubstitutionBodies(command.slice(bodyStart, cursor)));
|
|
131
|
-
cursor = lineEnd < 0 ? end : end + 1;
|
|
132
|
-
found = true;
|
|
133
|
-
break;
|
|
134
|
-
}
|
|
135
|
-
cursor = lineEnd < 0 ? end : end + 1;
|
|
136
|
-
}
|
|
137
|
-
if (!found) {
|
|
138
|
-
if (!heredoc.quoted)
|
|
139
|
-
substitutions.push(...heredocSubstitutionBodies(command.slice(bodyStart)));
|
|
140
|
-
return { end: command.length - 1, substitutions };
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
return { end: cursor - 1, substitutions };
|
|
144
|
-
}
|
|
145
|
-
export function tokenizeShellCommand(command) {
|
|
146
|
-
const segments = [];
|
|
147
|
-
const pendingHeredocs = [];
|
|
148
|
-
let tokens = [];
|
|
149
|
-
let word = "";
|
|
150
|
-
let quote;
|
|
151
|
-
let escaped = false;
|
|
152
|
-
let unsupported = false;
|
|
153
|
-
let atTokenStart = true;
|
|
154
|
-
const flushWord = () => {
|
|
155
|
-
if (word)
|
|
156
|
-
tokens.push(word);
|
|
157
|
-
word = "";
|
|
158
|
-
atTokenStart = true;
|
|
159
|
-
};
|
|
160
|
-
const flushSegment = (terminator) => {
|
|
161
|
-
flushWord();
|
|
162
|
-
if (tokens.length > 0 || unsupported)
|
|
163
|
-
segments.push({ tokens, unsupported, terminator });
|
|
164
|
-
tokens = [];
|
|
165
|
-
unsupported = false;
|
|
166
|
-
atTokenStart = true;
|
|
167
|
-
};
|
|
168
|
-
for (let i = 0; i < command.length; i++) {
|
|
169
|
-
const ch = command[i];
|
|
170
|
-
const next = command[i + 1];
|
|
171
|
-
if (quote === "single") {
|
|
172
|
-
if (ch === "'")
|
|
173
|
-
quote = undefined;
|
|
174
|
-
else
|
|
175
|
-
word += ch;
|
|
176
|
-
continue;
|
|
177
|
-
}
|
|
178
|
-
if (quote === "double") {
|
|
179
|
-
if (escaped) {
|
|
180
|
-
word += ch;
|
|
181
|
-
escaped = false;
|
|
182
|
-
}
|
|
183
|
-
else if (ch === "\\")
|
|
184
|
-
escaped = true;
|
|
185
|
-
else if (ch === '"')
|
|
186
|
-
quote = undefined;
|
|
187
|
-
else
|
|
188
|
-
word += ch;
|
|
189
|
-
continue;
|
|
190
|
-
}
|
|
191
|
-
if (escaped) {
|
|
192
|
-
// A backslash-newline is a shell line continuation, not part of the
|
|
193
|
-
// command argument. Keeping the newline here makes a continued git command
|
|
194
|
-
// visible to command guards.
|
|
195
|
-
if (ch !== "\n")
|
|
196
|
-
word += ch;
|
|
197
|
-
escaped = false;
|
|
198
|
-
atTokenStart = false;
|
|
199
|
-
continue;
|
|
200
|
-
}
|
|
201
|
-
if (ch === "\\") {
|
|
202
|
-
// Bash uses backslash as a general escape, but command inputs on
|
|
203
|
-
// Windows routinely contain native paths (C:\\src\\file.ts). Preserve
|
|
204
|
-
// backslashes before ordinary path characters while still honoring
|
|
205
|
-
// shell escapes and line continuations.
|
|
206
|
-
if (next === "\n" || /[\s\\'";$|&<>]/.test(next ?? "")) {
|
|
207
|
-
escaped = true;
|
|
208
|
-
}
|
|
209
|
-
else {
|
|
210
|
-
word += ch;
|
|
211
|
-
atTokenStart = false;
|
|
212
|
-
}
|
|
213
|
-
atTokenStart = false;
|
|
214
|
-
continue;
|
|
215
|
-
}
|
|
216
|
-
if (ch === "'") {
|
|
217
|
-
quote = "single";
|
|
218
|
-
atTokenStart = false;
|
|
219
|
-
continue;
|
|
220
|
-
}
|
|
221
|
-
if (ch === '"') {
|
|
222
|
-
quote = "double";
|
|
223
|
-
atTokenStart = false;
|
|
224
|
-
continue;
|
|
225
|
-
}
|
|
226
|
-
if (ch === "#" && atTokenStart) {
|
|
227
|
-
while (i + 1 < command.length && command[i + 1] !== "\n")
|
|
228
|
-
i++;
|
|
229
|
-
continue;
|
|
230
|
-
}
|
|
231
|
-
if (/\s/.test(ch) && ch !== "\n") {
|
|
232
|
-
flushWord();
|
|
233
|
-
continue;
|
|
234
|
-
}
|
|
235
|
-
if (ch === ";" || ch === "\n" || ch === "|" || ch === "&") {
|
|
236
|
-
flushWord();
|
|
237
|
-
if (ch === "\n" && pendingHeredocs.length > 0) {
|
|
238
|
-
const heredocs = pendingHeredocs.splice(0);
|
|
239
|
-
flushSegment();
|
|
240
|
-
const consumed = consumeHeredocBodies(command, i + 1, heredocs);
|
|
241
|
-
for (const substitution of consumed.substitutions)
|
|
242
|
-
segments.push(...tokenizeShellCommand(substitution));
|
|
243
|
-
i = consumed.end;
|
|
244
|
-
continue;
|
|
245
|
-
}
|
|
246
|
-
let terminator;
|
|
247
|
-
if (ch === "|" && next === "|")
|
|
248
|
-
i++;
|
|
249
|
-
else if (ch === "&" && next === "&")
|
|
250
|
-
i++;
|
|
251
|
-
else if (ch === "|") {
|
|
252
|
-
unsupported = true;
|
|
253
|
-
terminator = "pipe";
|
|
254
|
-
}
|
|
255
|
-
else if (ch === "&")
|
|
256
|
-
unsupported = true;
|
|
257
|
-
flushSegment(terminator);
|
|
258
|
-
continue;
|
|
259
|
-
}
|
|
260
|
-
if (ch === "<" || ch === ">") {
|
|
261
|
-
flushWord();
|
|
262
|
-
if (ch === "<" &&
|
|
263
|
-
next === "<" &&
|
|
264
|
-
command[i - 1] !== "<" &&
|
|
265
|
-
command[i + 2] !== "<") {
|
|
266
|
-
const parsed = parseHeredocDelimiter(command, i + 2);
|
|
267
|
-
if (parsed) {
|
|
268
|
-
pendingHeredocs.push(parsed.heredoc);
|
|
269
|
-
i = parsed.end;
|
|
270
|
-
}
|
|
271
|
-
}
|
|
272
|
-
unsupported = true;
|
|
273
|
-
continue;
|
|
274
|
-
}
|
|
275
|
-
word += ch;
|
|
276
|
-
atTokenStart = false;
|
|
277
|
-
}
|
|
278
|
-
if (quote || escaped)
|
|
279
|
-
unsupported = true;
|
|
280
|
-
flushSegment();
|
|
281
|
-
return segments;
|
|
282
|
-
}
|
|
283
|
-
/** Resolve a token to an absolute path if it looks like a source file. */
|
|
284
|
-
function resolveCandidate(token, cwd) {
|
|
285
|
-
const cleaned = stripQuotes(token);
|
|
286
|
-
if (!cleaned || cleaned.startsWith("-") || !isReadableSourceFile(cleaned)) {
|
|
287
|
-
return null;
|
|
288
|
-
}
|
|
289
|
-
return path.isAbsolute(cleaned) ? cleaned : path.resolve(cwd, cleaned);
|
|
290
|
-
}
|
|
291
|
-
/** Parse a count flag value like `-20`, `-n20`, or the `20` following `-n`. */
|
|
292
|
-
function parseCountFlag(token) {
|
|
293
|
-
const digits = token.replace(/^-n?/, "").replace(/[^0-9]/g, "");
|
|
294
|
-
if (!digits)
|
|
295
|
-
return undefined;
|
|
296
|
-
const n = Number.parseInt(digits, 10);
|
|
297
|
-
return Number.isFinite(n) && n > 0 ? n : undefined;
|
|
298
|
-
}
|
|
299
|
-
function commandSegments(command) {
|
|
300
|
-
return tokenizeShellCommand(command).map((segment) => segment.tokens);
|
|
301
|
-
}
|
|
302
|
-
/** Unwrap the common agent-authored `npx <tool>` launcher form. */
|
|
303
|
-
function unwrapCommand(tokens) {
|
|
304
|
-
let verb = path.basename(tokens[0] ?? "");
|
|
305
|
-
let args = tokens.slice(1);
|
|
306
|
-
if (verb === "npx") {
|
|
307
|
-
while (args[0] === "-y" || args[0] === "--yes")
|
|
308
|
-
args = args.slice(1);
|
|
309
|
-
verb = path.basename(args[0] ?? "");
|
|
310
|
-
args = args.slice(1);
|
|
311
|
-
}
|
|
312
|
-
return { verb, args };
|
|
313
|
-
}
|
|
314
|
-
/**
|
|
315
|
-
* Return source-file operands while excluding values consumed by known options.
|
|
316
|
-
* This stays deliberately narrower than a general CLI parser: only formatter
|
|
317
|
-
* options whose values can themselves look like source files belong here.
|
|
318
|
-
*/
|
|
319
|
-
function formatterFileArgs(args, start = 0, valueOptions = new Set()) {
|
|
320
|
-
const files = [];
|
|
321
|
-
for (let i = start; i < args.length; i += 1) {
|
|
322
|
-
const arg = args[i] ?? "";
|
|
323
|
-
if (valueOptions.has(arg)) {
|
|
324
|
-
i += 1;
|
|
325
|
-
continue;
|
|
326
|
-
}
|
|
327
|
-
if (arg === "--" || arg.startsWith("-"))
|
|
328
|
-
continue;
|
|
329
|
-
files.push(arg);
|
|
330
|
-
}
|
|
331
|
-
return files;
|
|
332
|
-
}
|
|
333
|
-
/** Find redirect targets without treating quoted `>` characters as syntax. */
|
|
334
|
-
function extractRedirectTargets(command) {
|
|
335
|
-
const targets = [];
|
|
336
|
-
let quote;
|
|
337
|
-
let escaped = false;
|
|
338
|
-
for (let i = 0; i < command.length; i += 1) {
|
|
339
|
-
const ch = command[i];
|
|
340
|
-
if (quote === "single") {
|
|
341
|
-
if (ch === "'")
|
|
342
|
-
quote = undefined;
|
|
343
|
-
continue;
|
|
344
|
-
}
|
|
345
|
-
if (quote === "double") {
|
|
346
|
-
if (escaped)
|
|
347
|
-
escaped = false;
|
|
348
|
-
else if (ch === "\\")
|
|
349
|
-
escaped = true;
|
|
350
|
-
else if (ch === '"')
|
|
351
|
-
quote = undefined;
|
|
352
|
-
continue;
|
|
353
|
-
}
|
|
354
|
-
if (escaped) {
|
|
355
|
-
escaped = false;
|
|
356
|
-
continue;
|
|
357
|
-
}
|
|
358
|
-
if (ch === "\\") {
|
|
359
|
-
escaped = true;
|
|
360
|
-
continue;
|
|
361
|
-
}
|
|
362
|
-
if (ch === "'") {
|
|
363
|
-
quote = "single";
|
|
364
|
-
continue;
|
|
365
|
-
}
|
|
366
|
-
if (ch === '"') {
|
|
367
|
-
quote = "double";
|
|
368
|
-
continue;
|
|
369
|
-
}
|
|
370
|
-
if (ch !== ">")
|
|
371
|
-
continue;
|
|
372
|
-
while (i + 1 < command.length && /\s/.test(command[i + 1]))
|
|
373
|
-
i += 1;
|
|
374
|
-
if (command[i + 1] === ">")
|
|
375
|
-
i += 1;
|
|
376
|
-
while (i + 1 < command.length && /\s/.test(command[i + 1]))
|
|
377
|
-
i += 1;
|
|
378
|
-
let target = "";
|
|
379
|
-
for (i += 1; i < command.length; i += 1) {
|
|
380
|
-
const next = command[i];
|
|
381
|
-
if (/\s/.test(next) || next === ";" || next === "|" || next === "&") {
|
|
382
|
-
i -= 1;
|
|
383
|
-
break;
|
|
384
|
-
}
|
|
385
|
-
target += next;
|
|
386
|
-
}
|
|
387
|
-
if (target)
|
|
388
|
-
targets.push(target);
|
|
389
|
-
}
|
|
390
|
-
return targets;
|
|
391
|
-
}
|
|
392
|
-
/**
|
|
393
|
-
* Extract the line ranges a bash command explicitly showed the agent.
|
|
394
|
-
* Only file-VIEWING commands, and only the exact lines shown:
|
|
395
|
-
* cat/less/more/bat/nl FILE → whole file
|
|
396
|
-
* head [-n N] FILE → lines 1..N (default 10)
|
|
397
|
-
* tail [-n N] FILE → last N lines (default 10)
|
|
398
|
-
* sed -n 'A,Bp' FILE → lines A..B
|
|
399
|
-
*/
|
|
400
|
-
export function extractReadPathsFromCommand(command, cwd) {
|
|
401
|
-
const spans = [];
|
|
402
|
-
const seen = new Set();
|
|
403
|
-
const resolveFile = (token) => {
|
|
404
|
-
const abs = resolveCandidate(token, cwd);
|
|
405
|
-
if (!abs)
|
|
406
|
-
return null;
|
|
407
|
-
try {
|
|
408
|
-
if (!nodeFs.statSync(abs).isFile())
|
|
409
|
-
return null;
|
|
410
|
-
}
|
|
411
|
-
catch {
|
|
412
|
-
return null;
|
|
413
|
-
}
|
|
414
|
-
return { abs, total: countFileLines(abs) };
|
|
415
|
-
};
|
|
416
|
-
const addSpan = (token, start, count) => {
|
|
417
|
-
const file = resolveFile(token);
|
|
418
|
-
if (!file)
|
|
419
|
-
return;
|
|
420
|
-
const offset = Math.min(Math.max(1, start), file.total);
|
|
421
|
-
const limit = Math.min(count, file.total - offset + 1);
|
|
422
|
-
if (limit < 1)
|
|
423
|
-
return;
|
|
424
|
-
const key = `${file.abs}:${offset}:${limit}`;
|
|
425
|
-
if (seen.has(key))
|
|
426
|
-
return;
|
|
427
|
-
seen.add(key);
|
|
428
|
-
spans.push({ filePath: file.abs, offset, limit });
|
|
429
|
-
};
|
|
430
|
-
for (const tokens of commandSegments(command)) {
|
|
431
|
-
if (tokens.length === 0)
|
|
432
|
-
continue;
|
|
433
|
-
const verb = path.basename(tokens[0] ?? "");
|
|
434
|
-
const args = tokens.slice(1);
|
|
435
|
-
if (["cat", "bat", "less", "more", "nl"].includes(verb)) {
|
|
436
|
-
for (const a of args)
|
|
437
|
-
addSpan(a, 1, Number.MAX_SAFE_INTEGER);
|
|
438
|
-
}
|
|
439
|
-
else if (verb === "head" || verb === "tail") {
|
|
440
|
-
let count;
|
|
441
|
-
const files = [];
|
|
442
|
-
for (let i = 0; i < args.length; i++) {
|
|
443
|
-
const a = args[i];
|
|
444
|
-
if (a === "-n" || a === "-c") {
|
|
445
|
-
const next = args[i + 1];
|
|
446
|
-
if (next !== undefined) {
|
|
447
|
-
count = parseCountFlag(next) ?? count;
|
|
448
|
-
i++;
|
|
449
|
-
}
|
|
450
|
-
}
|
|
451
|
-
else if (/^-n?\d+$/.test(a)) {
|
|
452
|
-
count = parseCountFlag(a) ?? count;
|
|
453
|
-
}
|
|
454
|
-
else if (!a.startsWith("-")) {
|
|
455
|
-
files.push(a);
|
|
456
|
-
}
|
|
457
|
-
}
|
|
458
|
-
const n = count ?? 10; // GNU head/tail default
|
|
459
|
-
for (const f of files) {
|
|
460
|
-
const file = resolveFile(f);
|
|
461
|
-
if (!file)
|
|
462
|
-
continue;
|
|
463
|
-
if (verb === "head")
|
|
464
|
-
addSpan(f, 1, n);
|
|
465
|
-
else
|
|
466
|
-
addSpan(f, file.total - n + 1, n); // tail: last n lines
|
|
467
|
-
}
|
|
468
|
-
}
|
|
469
|
-
else if (verb === "sed") {
|
|
470
|
-
if (args.includes("-i"))
|
|
471
|
-
continue; // sed -i writes, not reads
|
|
472
|
-
let range;
|
|
473
|
-
for (const a of args) {
|
|
474
|
-
const m = stripQuotes(a).match(/^(\d+),(\d+)p$/);
|
|
475
|
-
if (m) {
|
|
476
|
-
range = {
|
|
477
|
-
start: Number.parseInt(m[1], 10),
|
|
478
|
-
end: Number.parseInt(m[2], 10),
|
|
479
|
-
};
|
|
480
|
-
break;
|
|
481
|
-
}
|
|
482
|
-
}
|
|
483
|
-
if (!range)
|
|
484
|
-
continue;
|
|
485
|
-
for (const a of args)
|
|
486
|
-
addSpan(a, range.start, range.end - range.start + 1);
|
|
487
|
-
}
|
|
488
|
-
}
|
|
489
|
-
return spans;
|
|
490
|
-
}
|
|
491
|
-
function grepHasLineNumbers(args) {
|
|
492
|
-
return args.some((arg) => {
|
|
493
|
-
const token = stripQuotes(arg);
|
|
494
|
-
if (token === "--line-number")
|
|
495
|
-
return true;
|
|
496
|
-
if (!token.startsWith("-") || token.startsWith("--"))
|
|
497
|
-
return false;
|
|
498
|
-
return token.slice(1).includes("n");
|
|
499
|
-
});
|
|
500
|
-
}
|
|
501
|
-
const GREP_OPTIONS_WITH_VALUE = new Set([
|
|
502
|
-
"-e",
|
|
503
|
-
"-f",
|
|
504
|
-
"-m",
|
|
505
|
-
"-A",
|
|
506
|
-
"-B",
|
|
507
|
-
"-C",
|
|
508
|
-
"--regexp",
|
|
509
|
-
"--file",
|
|
510
|
-
"--max-count",
|
|
511
|
-
"--after-context",
|
|
512
|
-
"--before-context",
|
|
513
|
-
"--context",
|
|
514
|
-
]);
|
|
515
|
-
function parseContextValue(inline, next) {
|
|
516
|
-
const raw = inline !== "" ? inline : next;
|
|
517
|
-
if (raw === undefined)
|
|
518
|
-
return undefined;
|
|
519
|
-
const n = Number.parseInt(raw, 10);
|
|
520
|
-
if (!Number.isFinite(n) || n < 0)
|
|
521
|
-
return undefined;
|
|
522
|
-
// Bound the credit: a huge -C would credit a whole file from one hit.
|
|
523
|
-
return Math.min(n, 100);
|
|
524
|
-
}
|
|
525
|
-
/**
|
|
526
|
-
* Read the context lines a `grep` invocation actually PRINTS around each hit
|
|
527
|
-
* (#1904 item 2). Only these lines were delivered to the model, so only these
|
|
528
|
-
* may be credited as read. Handles `-A N`, `-A3`, clustered short flags such as
|
|
529
|
-
* `-rnA3`, `--after-context=N`, the `-B`/`--before-context` mirror, `-C`
|
|
530
|
-
* (both sides), and the bare `-NUM` form.
|
|
531
|
-
*/
|
|
532
|
-
export function parseGrepContextLines(args) {
|
|
533
|
-
let before = 0;
|
|
534
|
-
let after = 0;
|
|
535
|
-
for (let i = 0; i < args.length; i++) {
|
|
536
|
-
const token = stripQuotes(args[i]);
|
|
537
|
-
if (token === "--")
|
|
538
|
-
break;
|
|
539
|
-
const nextToken = args[i + 1] === undefined ? undefined : stripQuotes(args[i + 1]);
|
|
540
|
-
const long = /^--(after|before)-context(?:=(\d+))?$/.exec(token);
|
|
541
|
-
if (long) {
|
|
542
|
-
const value = parseContextValue(long[2] ?? "", nextToken);
|
|
543
|
-
if (value === undefined)
|
|
544
|
-
continue;
|
|
545
|
-
if (long[1] === "after")
|
|
546
|
-
after = Math.max(after, value);
|
|
547
|
-
else
|
|
548
|
-
before = Math.max(before, value);
|
|
549
|
-
continue;
|
|
550
|
-
}
|
|
551
|
-
const longBoth = /^--context(?:=(\d+))?$/.exec(token);
|
|
552
|
-
if (longBoth) {
|
|
553
|
-
const value = parseContextValue(longBoth[1] ?? "", nextToken);
|
|
554
|
-
if (value === undefined)
|
|
555
|
-
continue;
|
|
556
|
-
before = Math.max(before, value);
|
|
557
|
-
after = Math.max(after, value);
|
|
558
|
-
continue;
|
|
559
|
-
}
|
|
560
|
-
// Bare numeric context form: `grep -3 pattern file`.
|
|
561
|
-
const bare = /^-(\d+)$/.exec(token);
|
|
562
|
-
if (bare) {
|
|
563
|
-
const value = parseContextValue(bare[1], undefined);
|
|
564
|
-
if (value === undefined)
|
|
565
|
-
continue;
|
|
566
|
-
before = Math.max(before, value);
|
|
567
|
-
after = Math.max(after, value);
|
|
568
|
-
continue;
|
|
569
|
-
}
|
|
570
|
-
// Short flags, possibly clustered: the context flag must be LAST in the
|
|
571
|
-
// cluster because it consumes the remaining characters as its value.
|
|
572
|
-
const short = /^-[A-Za-z]*([ABC])(\d*)$/.exec(token);
|
|
573
|
-
if (!short)
|
|
574
|
-
continue;
|
|
575
|
-
const value = parseContextValue(short[2], nextToken);
|
|
576
|
-
if (value === undefined)
|
|
577
|
-
continue;
|
|
578
|
-
if (short[1] === "A")
|
|
579
|
-
after = Math.max(after, value);
|
|
580
|
-
else if (short[1] === "B")
|
|
581
|
-
before = Math.max(before, value);
|
|
582
|
-
else {
|
|
583
|
-
before = Math.max(before, value);
|
|
584
|
-
after = Math.max(after, value);
|
|
585
|
-
}
|
|
586
|
-
}
|
|
587
|
-
return { before, after };
|
|
588
|
-
}
|
|
589
|
-
function extractGrepSearchFiles(args, cwd) {
|
|
590
|
-
const files = [];
|
|
591
|
-
let patternSeen = false;
|
|
592
|
-
let endOfOptions = false;
|
|
593
|
-
for (let i = 0; i < args.length; i++) {
|
|
594
|
-
const token = stripQuotes(args[i]);
|
|
595
|
-
if (!endOfOptions && token === "--") {
|
|
596
|
-
endOfOptions = true;
|
|
597
|
-
continue;
|
|
598
|
-
}
|
|
599
|
-
if (!endOfOptions && GREP_OPTIONS_WITH_VALUE.has(token)) {
|
|
600
|
-
i++;
|
|
601
|
-
continue;
|
|
602
|
-
}
|
|
603
|
-
if (!endOfOptions && /^-[ef].+/.test(token))
|
|
604
|
-
continue;
|
|
605
|
-
if (!endOfOptions && token.startsWith("-"))
|
|
606
|
-
continue;
|
|
607
|
-
if (!patternSeen) {
|
|
608
|
-
patternSeen = true;
|
|
609
|
-
continue;
|
|
610
|
-
}
|
|
611
|
-
const abs = resolveCandidate(token, cwd);
|
|
612
|
-
if (!abs)
|
|
613
|
-
continue;
|
|
614
|
-
try {
|
|
615
|
-
if (!nodeFs.statSync(abs).isFile())
|
|
616
|
-
continue;
|
|
617
|
-
}
|
|
618
|
-
catch {
|
|
619
|
-
continue;
|
|
620
|
-
}
|
|
621
|
-
files.push(abs);
|
|
622
|
-
}
|
|
623
|
-
return files;
|
|
624
|
-
}
|
|
625
|
-
function parseGrepLineWithFile(line, cwd) {
|
|
626
|
-
const match = /^(.*?):(\d+):/.exec(stripAnsi(line));
|
|
627
|
-
if (!match)
|
|
628
|
-
return undefined;
|
|
629
|
-
const lineNumber = Number.parseInt(match[2], 10);
|
|
630
|
-
if (!Number.isFinite(lineNumber) || lineNumber < 1)
|
|
631
|
-
return undefined;
|
|
632
|
-
const abs = resolveCandidate(match[1], cwd);
|
|
633
|
-
if (!abs)
|
|
634
|
-
return undefined;
|
|
635
|
-
try {
|
|
636
|
-
if (!nodeFs.statSync(abs).isFile())
|
|
637
|
-
return undefined;
|
|
638
|
-
}
|
|
639
|
-
catch {
|
|
640
|
-
return undefined;
|
|
641
|
-
}
|
|
642
|
-
return { file: abs, startLine: lineNumber, endLine: lineNumber };
|
|
643
|
-
}
|
|
644
|
-
function parseGrepLineWithoutFile(line, file) {
|
|
645
|
-
const match = /^(\d+):/.exec(stripAnsi(line));
|
|
646
|
-
if (!match)
|
|
647
|
-
return undefined;
|
|
648
|
-
const lineNumber = Number.parseInt(match[1], 10);
|
|
649
|
-
if (!Number.isFinite(lineNumber) || lineNumber < 1)
|
|
650
|
-
return undefined;
|
|
651
|
-
return { file, startLine: lineNumber, endLine: lineNumber };
|
|
652
|
-
}
|
|
653
|
-
/**
|
|
654
|
-
* Verbs that DROP printed lines from a piped stream (#1908, review F4): a
|
|
655
|
-
* hit that survives such a tail cannot be trusted to still carry the
|
|
656
|
-
* -A/-B/-C context grep's flags declared, because that context may have
|
|
657
|
-
* been among the dropped lines. `head`/`tail` drop by position (even bare,
|
|
658
|
-
* since both default to a 10-line window); `sed` with a `q` command drops
|
|
659
|
-
* everything after the addressed line; `uniq` drops adjacent duplicate
|
|
660
|
-
* lines, which can include a context line that happens to repeat.
|
|
661
|
-
*
|
|
662
|
-
* The criterion is DROPPING, not "changes grep's output shape" — a review
|
|
663
|
-
* finding (#1913 F4) caught this file previously conflating the two:
|
|
664
|
-
* - `head`/`tail`/`sed q`/`uniq` downstream of a matching grep → some
|
|
665
|
-
* printed lines are genuinely gone, so credit falls back to
|
|
666
|
-
* match-line-only (the same conservative default already used for
|
|
667
|
-
* unparseable commands) rather than trusting the declared flags.
|
|
668
|
-
* - `sort` and other REORDER-ONLY filters keep every line grep printed,
|
|
669
|
-
* just in a different order — a surviving `file:line:` match still
|
|
670
|
-
* carries the full context grep actually printed, so no special case is
|
|
671
|
-
* needed (proven by the "still credits full context through a
|
|
672
|
-
* non-truncating pipe tail" test below).
|
|
673
|
-
* - `wc` and similar filters that REPLACE grep's output entirely (with a
|
|
674
|
-
* count, say) leave no `file:line:`-shaped line at all, so
|
|
675
|
-
* `parseGrepOutputSearchReads` already finds zero matches in the real
|
|
676
|
-
* captured stdout. Also no special case needed, but for the OPPOSITE
|
|
677
|
-
* reason from `sort`: nothing survives to credit, rather than
|
|
678
|
-
* everything surviving intact.
|
|
679
|
-
* - A pass-through filter (`cat`, `grep -v`, ...) between grep and a
|
|
680
|
-
* dropping tail still counts: the walk below follows the whole pipe
|
|
681
|
-
* chain, not just the immediate next segment.
|
|
682
|
-
* - Out of scope, deliberately: `sed -n 'Np'` range-address filtering
|
|
683
|
-
* without `q`, and `sort -u`, also drop lines but aren't in #1908's
|
|
684
|
-
* stated scope — revisit if they recur in the field. Also out of
|
|
685
|
-
* scope: a truncating tail hidden inside a subshell/brace-group
|
|
686
|
-
* (`( ... )`, `{ ...; }`) or reimplemented in `awk`/`perl` — the shared
|
|
687
|
-
* tokenizer this file uses doesn't parse inside those, matching its
|
|
688
|
-
* documented "small conservative shell lexer" scope.
|
|
689
|
-
*/
|
|
690
|
-
const LINE_DROPPING_TAIL_VERBS = new Set(["head", "tail", "uniq"]);
|
|
691
|
-
function isSedQuitCommand(args) {
|
|
692
|
-
for (const arg of args) {
|
|
693
|
-
const token = stripQuotes(arg);
|
|
694
|
-
if (token.startsWith("-"))
|
|
695
|
-
continue;
|
|
696
|
-
// A `q` command anchored at the start of the script or after a `;`/
|
|
697
|
-
// newline separator, optionally preceded by a numeric/`$` address
|
|
698
|
-
// (`q`, `1q`, `$q`, `1,3p;q`). Deliberately not a full sed parser.
|
|
699
|
-
if (/(^|[;\n])\s*(\d+|\$)?\s*q\b/.test(token))
|
|
700
|
-
return true;
|
|
701
|
-
}
|
|
702
|
-
return false;
|
|
703
|
-
}
|
|
704
|
-
function isLineDroppingTailCommand(tokens) {
|
|
705
|
-
const verb = path.basename(stripQuotes(tokens[0] ?? ""));
|
|
706
|
-
if (LINE_DROPPING_TAIL_VERBS.has(verb))
|
|
707
|
-
return true;
|
|
708
|
-
if (verb === "sed")
|
|
709
|
-
return isSedQuitCommand(tokens.slice(1));
|
|
710
|
-
return false;
|
|
711
|
-
}
|
|
712
|
-
/**
|
|
713
|
-
* True when the grep segment starting at `index` feeds — directly or through
|
|
714
|
-
* a chain of pipes — into a line-dropping tail (#1908). Only an unquoted `|`
|
|
715
|
-
* counts: a `;`/`&&`/`&`-separated command downstream never receives grep's
|
|
716
|
-
* stdout, so it must not downgrade credit (#1913 F2 — this was previously
|
|
717
|
-
* unverified by any test that could tell a real pipe from mere adjacency).
|
|
718
|
-
*/
|
|
719
|
-
function grepPipesIntoTruncatingTail(segments, index) {
|
|
720
|
-
if (segments[index]?.terminator !== "pipe")
|
|
721
|
-
return false;
|
|
722
|
-
for (let j = index + 1; j < segments.length; j++) {
|
|
723
|
-
if (isLineDroppingTailCommand(segments[j].tokens))
|
|
724
|
-
return true;
|
|
725
|
-
if (segments[j].terminator !== "pipe")
|
|
726
|
-
return false;
|
|
727
|
-
}
|
|
728
|
-
return false;
|
|
729
|
-
}
|
|
730
|
-
function collectGrepCommandFiles(command, cwd) {
|
|
731
|
-
const files = new Set();
|
|
732
|
-
let hasLineNumberGrep = false;
|
|
733
|
-
// A command can chain several greps whose output all reaches the model, but
|
|
734
|
-
// the parsed hits carry no segment identity. Credit the SMALLEST context any
|
|
735
|
-
// contributing grep printed, so no line is credited that a hit from the
|
|
736
|
-
// narrowest grep never delivered.
|
|
737
|
-
let context;
|
|
738
|
-
// #1908: if ANY contributing grep pipes into a truncating tail, fall back
|
|
739
|
-
// to match-line-only credit for the whole command — the parsed hits carry
|
|
740
|
-
// no segment identity, so a per-segment override isn't representable in
|
|
741
|
-
// the aggregate `context` this function returns.
|
|
742
|
-
let truncated = false;
|
|
743
|
-
const segments = tokenizeShellCommand(command);
|
|
744
|
-
for (let i = 0; i < segments.length; i++) {
|
|
745
|
-
const tokens = segments[i].tokens;
|
|
746
|
-
const verb = path.basename(stripQuotes(tokens[0] ?? ""));
|
|
747
|
-
if (verb !== "grep" && verb !== "egrep" && verb !== "fgrep")
|
|
748
|
-
continue;
|
|
749
|
-
const args = tokens.slice(1);
|
|
750
|
-
if (!grepHasLineNumbers(args))
|
|
751
|
-
continue;
|
|
752
|
-
hasLineNumberGrep = true;
|
|
753
|
-
const segmentContext = parseGrepContextLines(args);
|
|
754
|
-
context = context
|
|
755
|
-
? {
|
|
756
|
-
before: Math.min(context.before, segmentContext.before),
|
|
757
|
-
after: Math.min(context.after, segmentContext.after),
|
|
758
|
-
}
|
|
759
|
-
: segmentContext;
|
|
760
|
-
for (const file of extractGrepSearchFiles(args, cwd))
|
|
761
|
-
files.add(file);
|
|
762
|
-
if (grepPipesIntoTruncatingTail(segments, i))
|
|
763
|
-
truncated = true;
|
|
764
|
-
}
|
|
765
|
-
return {
|
|
766
|
-
hasLineNumberGrep,
|
|
767
|
-
files,
|
|
768
|
-
context: truncated
|
|
769
|
-
? { before: 0, after: 0 }
|
|
770
|
-
: (context ?? { before: 0, after: 0 }),
|
|
771
|
-
};
|
|
772
|
-
}
|
|
773
|
-
function dedupePushSearchRead(out, seen, loc) {
|
|
774
|
-
if (!loc)
|
|
775
|
-
return;
|
|
776
|
-
const key = `${loc.file}:${loc.startLine}:${loc.endLine ?? loc.startLine}`;
|
|
777
|
-
if (seen.has(key))
|
|
778
|
-
return;
|
|
779
|
-
seen.add(key);
|
|
780
|
-
out.push(loc);
|
|
781
|
-
}
|
|
782
|
-
function parseGrepOutputSearchReads(output, cwd, singleFile) {
|
|
783
|
-
const out = [];
|
|
784
|
-
const seen = new Set();
|
|
785
|
-
for (const rawLine of output.split(/\r?\n/)) {
|
|
786
|
-
if (!rawLine)
|
|
787
|
-
continue;
|
|
788
|
-
dedupePushSearchRead(out, seen, parseGrepLineWithFile(rawLine, cwd));
|
|
789
|
-
if (singleFile) {
|
|
790
|
-
dedupePushSearchRead(out, seen, parseGrepLineWithoutFile(rawLine, singleFile));
|
|
791
|
-
}
|
|
792
|
-
}
|
|
793
|
-
return out;
|
|
794
|
-
}
|
|
795
|
-
/**
|
|
796
|
-
* Parse `grep -n` output into the specific lines shown to the agent (#169).
|
|
797
|
-
* Multi-file grep prints `file:line:text`; single-file grep prints `line:text`,
|
|
798
|
-
* so the latter is only accepted when the command names exactly one source file.
|
|
799
|
-
*/
|
|
800
|
-
export function extractGrepSearchReadsFromOutput(command, cwd, output) {
|
|
801
|
-
const { hasLineNumberGrep, files, context } = collectGrepCommandFiles(command, cwd);
|
|
802
|
-
if (!hasLineNumberGrep)
|
|
803
|
-
return [];
|
|
804
|
-
const singleFile = files.size === 1 ? [...files][0] : undefined;
|
|
805
|
-
const locations = parseGrepOutputSearchReads(output, cwd, singleFile);
|
|
806
|
-
// Only the printed context lines were delivered to the model, so only they
|
|
807
|
-
// are credited. A bare grep credits its match line alone (#1904 item 2).
|
|
808
|
-
for (const loc of locations) {
|
|
809
|
-
loc.contextBefore = context.before;
|
|
810
|
-
loc.contextAfter = context.after;
|
|
811
|
-
}
|
|
812
|
-
return locations;
|
|
813
|
-
}
|
|
814
|
-
/**
|
|
815
|
-
* Extract files a bash command WROTE/created, so the read-guard can treat them
|
|
816
|
-
* as authored by the agent (mirrors the Write tool). Handles:
|
|
817
|
-
* redirects: `> FILE`, `>> FILE`, `N> FILE`, `&> FILE` (with or without space)
|
|
818
|
-
* tee [-a] FILE..., sed -i ... FILE, cp/mv/install ... DEST, touch FILE...,
|
|
819
|
-
* and common in-place formatter/fixer invocations with explicit file targets.
|
|
820
|
-
*
|
|
821
|
-
* Returns absolute paths. The file need not exist yet (it may be created) —
|
|
822
|
-
* existence is confirmed later by recordWritten at tool_result time.
|
|
823
|
-
*/
|
|
824
|
-
export function extractWrittenPathsFromCommand(command, cwd) {
|
|
825
|
-
const out = new Set();
|
|
826
|
-
const add = (token) => {
|
|
827
|
-
const abs = resolveCandidate(token, cwd);
|
|
828
|
-
if (abs)
|
|
829
|
-
out.add(abs);
|
|
830
|
-
};
|
|
831
|
-
for (const tokens of commandSegments(command)) {
|
|
832
|
-
if (tokens.length === 0)
|
|
833
|
-
continue;
|
|
834
|
-
// Redirect targets are collected by a quote-aware scanner. The shared
|
|
835
|
-
// tokenizer supplies the normalized command arguments; it deliberately
|
|
836
|
-
// does not expose shell redirection operators as arguments.
|
|
837
|
-
for (const target of extractRedirectTargets(command))
|
|
838
|
-
add(target);
|
|
839
|
-
// A command may contain multiple segments; only the first pass should
|
|
840
|
-
// attach redirects, otherwise targets would be duplicated harmlessly but
|
|
841
|
-
// needlessly rescanned.
|
|
842
|
-
break;
|
|
843
|
-
}
|
|
844
|
-
for (const tokens of commandSegments(command)) {
|
|
845
|
-
if (tokens.length === 0)
|
|
846
|
-
continue;
|
|
847
|
-
const { verb, args } = unwrapCommand(tokens);
|
|
848
|
-
if (verb === "tee" || verb === "touch") {
|
|
849
|
-
for (const a of args)
|
|
850
|
-
if (!a.startsWith("-"))
|
|
851
|
-
add(a);
|
|
852
|
-
}
|
|
853
|
-
else if (verb === "sed" && args.includes("-i")) {
|
|
854
|
-
for (const a of args)
|
|
855
|
-
add(a);
|
|
856
|
-
}
|
|
857
|
-
else if (verb === "cp" || verb === "mv" || verb === "install") {
|
|
858
|
-
// Known miss (#1668 review F3): the GNU `-t DEST`/`--target-directory`
|
|
859
|
-
// form puts the destination BEFORE the sources — this always treats
|
|
860
|
-
// the LAST non-flag argument as the destination, so `-t DEST SRC` and
|
|
861
|
-
// multi-source `-t DEST SRC1 SRC2...` are misread. Rare in agent-
|
|
862
|
-
// authored bash (source-before-dest is the common form); documented
|
|
863
|
-
// rather than fixed, since correctly parsing `-t` means recognizing it
|
|
864
|
-
// takes a value while telling it apart from every other single-letter
|
|
865
|
-
// flag this same branch already ignores.
|
|
866
|
-
const files = args.filter((a) => !a.startsWith("-"));
|
|
867
|
-
if (files.length >= 1)
|
|
868
|
-
add(files[files.length - 1]); // destination
|
|
869
|
-
}
|
|
870
|
-
else if (verb === "biome") {
|
|
871
|
-
const sub = args[0];
|
|
872
|
-
if ((sub === "format" || sub === "check") && args.includes("--write")) {
|
|
873
|
-
for (const file of formatterFileArgs(args, 1, new Set(["--config-path"])))
|
|
874
|
-
add(file);
|
|
875
|
-
}
|
|
876
|
-
}
|
|
877
|
-
else if (verb === "prettier" && args.includes("--write")) {
|
|
878
|
-
for (const file of formatterFileArgs(args, 0, new Set(["--config", "--ignore-path", "--parser", "--plugin"])))
|
|
879
|
-
add(file);
|
|
880
|
-
}
|
|
881
|
-
else if (verb === "eslint" && args.includes("--fix")) {
|
|
882
|
-
for (const file of formatterFileArgs(args, 0, new Set(["--config", "--ignore-path", "--parser", "--plugin"])))
|
|
883
|
-
add(file);
|
|
884
|
-
}
|
|
885
|
-
else if (verb === "ruff") {
|
|
886
|
-
const sub = args[0];
|
|
887
|
-
if (sub === "format" || args.includes("--fix")) {
|
|
888
|
-
const start = sub === "format" || sub === "check" ? 1 : 0;
|
|
889
|
-
for (const file of formatterFileArgs(args, start, new Set(["--config"])))
|
|
890
|
-
add(file);
|
|
891
|
-
}
|
|
892
|
-
}
|
|
893
|
-
else if (verb === "gofmt" && args.includes("-w")) {
|
|
894
|
-
for (const file of formatterFileArgs(args))
|
|
895
|
-
add(file);
|
|
896
|
-
}
|
|
897
|
-
else if (verb === "cargo" && args[0] === "fmt") {
|
|
898
|
-
// Bare cargo fmt is project-scoped and cannot be enumerated without a
|
|
899
|
-
// filesystem walk. Only explicit rustfmt operands after `--` are safe.
|
|
900
|
-
const separator = args.indexOf("--");
|
|
901
|
-
if (separator >= 0) {
|
|
902
|
-
for (const file of formatterFileArgs(args, separator + 1, new Set(["--edition", "--config-path"])))
|
|
903
|
-
add(file);
|
|
904
|
-
}
|
|
905
|
-
}
|
|
906
|
-
else if (verb === "rustfmt") {
|
|
907
|
-
for (const file of formatterFileArgs(args, 0, new Set(["--edition", "--config-path"])))
|
|
908
|
-
add(file);
|
|
909
|
-
}
|
|
910
|
-
else if (verb === "black") {
|
|
911
|
-
for (const file of formatterFileArgs(args, 0, new Set([
|
|
912
|
-
"--config",
|
|
913
|
-
"--exclude",
|
|
914
|
-
"--include",
|
|
915
|
-
"--line-length",
|
|
916
|
-
"--target-version",
|
|
917
|
-
])))
|
|
918
|
-
add(file);
|
|
919
|
-
}
|
|
920
|
-
else if (verb === "clang-format" && args.includes("-i")) {
|
|
921
|
-
for (const file of formatterFileArgs(args, 0, new Set(["--style", "--fallback-style", "--assume-filename"])))
|
|
922
|
-
add(file);
|
|
923
|
-
}
|
|
924
|
-
else if (verb === "dotnet" && args[0] === "format") {
|
|
925
|
-
// dotnet format is normally solution-scoped. `--include` is the one
|
|
926
|
-
// invocation form that provides attributable source paths.
|
|
927
|
-
for (let i = 1; i < args.length; i += 1) {
|
|
928
|
-
if (args[i] === "--include" && args[i + 1]) {
|
|
929
|
-
for (const file of (args[i + 1] ?? "").split(","))
|
|
930
|
-
add(file);
|
|
931
|
-
i += 1;
|
|
932
|
-
}
|
|
933
|
-
else if (args[i]?.startsWith("--include=")) {
|
|
934
|
-
for (const file of (args[i] ?? "")
|
|
935
|
-
.slice("--include=".length)
|
|
936
|
-
.split(","))
|
|
937
|
-
add(file);
|
|
938
|
-
}
|
|
939
|
-
}
|
|
940
|
-
}
|
|
941
|
-
else if (verb === "git") {
|
|
942
|
-
// git ops that REWRITE working-tree files with explicit paths:
|
|
943
|
-
// git checkout [<ref>] -- <files> git restore [opts] <files>
|
|
944
|
-
// These restore content but never go through the edit tool, so without
|
|
945
|
-
// this pi-lens keeps stale diagnostics/fileSeq for the restored file.
|
|
946
|
-
// Whole-tree ops (reset --hard, stash pop, revert, merge, rebase, pull,
|
|
947
|
-
// or `git checkout <branch>`) don't name files and aren't handled here.
|
|
948
|
-
const sub = args[0];
|
|
949
|
-
if (sub === "checkout" || sub === "restore") {
|
|
950
|
-
const dashDash = args.indexOf("--");
|
|
951
|
-
const fileArgs = dashDash >= 0
|
|
952
|
-
? args.slice(dashDash + 1)
|
|
953
|
-
: sub === "restore"
|
|
954
|
-
? args.slice(1).filter((a) => !a.startsWith("-"))
|
|
955
|
-
: []; // `git checkout` without `--` is ambiguous (ref vs path)
|
|
956
|
-
for (const a of fileArgs)
|
|
957
|
-
add(a);
|
|
958
|
-
}
|
|
959
|
-
else if (sub === "mv") {
|
|
960
|
-
// git mv SRC... DEST — the destination is a write, exactly like
|
|
961
|
-
// plain `mv` above (#1668 review F2). The source side is a delete,
|
|
962
|
-
// handled by extractDeletedPathsFromCommand.
|
|
963
|
-
const files = args.slice(1).filter((a) => !a.startsWith("-"));
|
|
964
|
-
if (files.length >= 1)
|
|
965
|
-
add(files[files.length - 1]);
|
|
966
|
-
}
|
|
967
|
-
}
|
|
968
|
-
}
|
|
969
|
-
return Array.from(out);
|
|
970
|
-
}
|
|
971
|
-
/**
|
|
972
|
-
* Extract files a bash command likely DELETED, for the type-3 (Deleted)
|
|
973
|
-
* watched-files gap (#1668): `rm FILE...`, `git rm FILE...`, and the SOURCE
|
|
974
|
-
* side of `mv SRC DEST` / `git mv SRC DEST` (the destination is a write,
|
|
975
|
-
* covered by `extractWrittenPathsFromCommand` — including for `git mv`,
|
|
976
|
-
* #1668 review F2).
|
|
977
|
-
*
|
|
978
|
-
* Deliberately narrow: only commands naming an explicit file target are
|
|
979
|
-
* handled. A bare directory op (`rm -rf dir/`, `git clean`) is skipped —
|
|
980
|
-
* resolving what vanished inside a directory would mean listing it before
|
|
981
|
-
* and after, the "stat the world" cost this module exists to avoid. The
|
|
982
|
-
* caller confirms each candidate by checking it no longer exists on disk;
|
|
983
|
-
* this function only proposes what the command named.
|
|
984
|
-
*/
|
|
985
|
-
export function extractDeletedPathsFromCommand(command, cwd) {
|
|
986
|
-
const out = new Set();
|
|
987
|
-
const add = (token) => {
|
|
988
|
-
const abs = resolveCandidate(token, cwd);
|
|
989
|
-
if (abs)
|
|
990
|
-
out.add(abs);
|
|
991
|
-
};
|
|
992
|
-
// mv SRC... DEST / git mv SRC... DEST — every argument except the last is
|
|
993
|
-
// a source that vanishes from its original path once the move lands.
|
|
994
|
-
// Known miss (#1668 review F3): the same `-t DEST`/`--target-directory`
|
|
995
|
-
// form documented in `extractWrittenPathsFromCommand` misreads here too —
|
|
996
|
-
// this assumes source-before-destination order.
|
|
997
|
-
const addMoveSources = (args) => {
|
|
998
|
-
const files = args.filter((a) => !a.startsWith("-"));
|
|
999
|
-
if (files.length >= 2) {
|
|
1000
|
-
for (const src of files.slice(0, -1))
|
|
1001
|
-
add(src);
|
|
1002
|
-
}
|
|
1003
|
-
};
|
|
1004
|
-
for (const tokens of commandSegments(command)) {
|
|
1005
|
-
if (tokens.length === 0)
|
|
1006
|
-
continue;
|
|
1007
|
-
const verb = path.basename(tokens[0] ?? "");
|
|
1008
|
-
const args = tokens.slice(1);
|
|
1009
|
-
if (verb === "rm") {
|
|
1010
|
-
for (const a of args)
|
|
1011
|
-
if (!a.startsWith("-"))
|
|
1012
|
-
add(a);
|
|
1013
|
-
}
|
|
1014
|
-
else if (verb === "git" && args[0] === "rm") {
|
|
1015
|
-
const rmArgs = args.slice(1);
|
|
1016
|
-
const dashDash = rmArgs.indexOf("--");
|
|
1017
|
-
const fileArgs = dashDash >= 0
|
|
1018
|
-
? rmArgs.slice(dashDash + 1)
|
|
1019
|
-
: rmArgs.filter((a) => !a.startsWith("-"));
|
|
1020
|
-
for (const a of fileArgs)
|
|
1021
|
-
add(a);
|
|
1022
|
-
}
|
|
1023
|
-
else if (verb === "git" && args[0] === "mv") {
|
|
1024
|
-
addMoveSources(args.slice(1));
|
|
1025
|
-
}
|
|
1026
|
-
else if (verb === "mv") {
|
|
1027
|
-
addMoveSources(args);
|
|
1028
|
-
}
|
|
1029
|
-
}
|
|
1030
|
-
return Array.from(out);
|
|
1031
|
-
}
|
|
1032
|
-
/**
|
|
1033
|
-
* One edit-class predicate for the `tool_result` path (#2939 F3).
|
|
1034
|
-
*
|
|
1035
|
-
* `index.ts` used to answer "is this an edit-class result" twice — once in
|
|
1036
|
-
* the handler body (gated on `toolName === "bash"`) and once in the
|
|
1037
|
-
* `budgetKey` callback (no tool gate) — and the copies disagreed on the
|
|
1038
|
-
* first third-party case tried (`mcp__acme__shell` with `input.command`:
|
|
1039
|
-
* wrapper said edit, handler said read-only). Both call sites now share
|
|
1040
|
-
* this function, so the answer is written once — but the call sites
|
|
1041
|
-
* themselves are not yet pinned (W4/M8, #2939), so a future tool-name gate
|
|
1042
|
-
* re-introduced at one of them would still pass the suite.
|
|
1043
|
-
*
|
|
1044
|
-
* A result is edit-class when the mutation seam classifies it, or when its
|
|
1045
|
-
* `input.command` names written files. The command half carries no tool-name
|
|
1046
|
-
* gate on purpose: a shell that wrote files runs the same pipeline whatever
|
|
1047
|
-
* its tool is named, and the edit budget must cover that work.
|
|
1048
|
-
*/
|
|
1049
|
-
export function isEditClassToolResult(event, cwd) {
|
|
1050
|
-
if (classifyMutatingTool(event, { recognizeOnly: true }) !== undefined) {
|
|
1051
|
-
return true;
|
|
1052
|
-
}
|
|
1053
|
-
const command = event?.input?.command;
|
|
1054
|
-
return (typeof command === "string" &&
|
|
1055
|
-
extractWrittenPathsFromCommand(command, cwd).length > 0);
|
|
1056
|
-
}
|