@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,484 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Concurrent-session guard (#473).
|
|
3
|
-
*
|
|
4
|
-
* In-process subagent extensions (tintinweb/pi-subagents-style: a fresh
|
|
5
|
-
* `AgentSession` built and `bindExtensions()`-ed inside the SAME Node process
|
|
6
|
-
* as the parent pi session) reuse pi's process-global extension-loader cache,
|
|
7
|
-
* so the subagent's `session_start` re-invokes pi-lens's SAME module-scope
|
|
8
|
-
* singletons the parent is still using. Left unguarded, `handleSessionStart`
|
|
9
|
-
* destructively resets shared state (`resetLSPService({fast:true})` kills
|
|
10
|
-
* every live LSP client; `runtime.resetForSession()` bumps the session
|
|
11
|
-
* generation, silently orphaning the parent's in-flight continuations gated
|
|
12
|
-
* on `isCurrentSession`) while the parent is mid-turn.
|
|
13
|
-
*
|
|
14
|
-
* pi's own SDK contract only invalidates a captured ctx for SEQUENTIAL
|
|
15
|
-
* session replacement (`newSession`/`fork`/`switchSession`/`reload` —
|
|
16
|
-
* `ExtensionRunner.invalidate()`, called from `core/agent-session.js` on
|
|
17
|
-
* dispose). A concurrently-live sibling session's bind invalidates nothing.
|
|
18
|
-
* That asymmetry — is the PRIOR ctx still active or not — is the reliable,
|
|
19
|
-
* empirically-verified discriminator this module implements.
|
|
20
|
-
*
|
|
21
|
-
* Fail-safe direction is non-negotiable: whenever classification is
|
|
22
|
-
* uncertain, this module falls back to today's behavior (treat as a
|
|
23
|
-
* sequential replacement, i.e. run the full reset). It only suppresses the
|
|
24
|
-
* reset on POSITIVE evidence that a live sibling primary session exists.
|
|
25
|
-
*
|
|
26
|
-
* Kill switch: `PI_LENS_CONCURRENT_SESSION_GUARD=0` disables the guard
|
|
27
|
-
* entirely — every session_start classifies as if sequential (today's
|
|
28
|
-
* behavior), matching the lazy-env-read house style (see
|
|
29
|
-
* `subagent-mode.ts` / `runtime-config.ts`).
|
|
30
|
-
*/
|
|
31
|
-
import { normalizeFilePath } from "./path-utils.js";
|
|
32
|
-
import { getProcessSingleton } from "./process-singletons.js";
|
|
33
|
-
const SESSION_LIFECYCLE_FAMILY = "session-lifecycle.primary-registration";
|
|
34
|
-
/** Bump when {@link SessionLifecycleState}'s shape changes. */
|
|
35
|
-
const SESSION_LIFECYCLE_VERSION = 1;
|
|
36
|
-
function state() {
|
|
37
|
-
return getProcessSingleton(SESSION_LIFECYCLE_FAMILY, SESSION_LIFECYCLE_VERSION, () => ({
|
|
38
|
-
activeCtx: undefined,
|
|
39
|
-
activeSessionId: undefined,
|
|
40
|
-
activeRoot: undefined,
|
|
41
|
-
secondarySessionCount: 0,
|
|
42
|
-
}));
|
|
43
|
-
}
|
|
44
|
-
/** The stable id of the currently registered primary session, if known. */
|
|
45
|
-
export function getActiveSessionId() {
|
|
46
|
-
return state().activeSessionId;
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* The normalized project root of the currently registered primary session
|
|
50
|
-
* (#2129), or `undefined` when no primary has registered a root yet.
|
|
51
|
-
*
|
|
52
|
-
* This is the process's answer to "which directory does pi-lens actually
|
|
53
|
-
* serve", and it is what `memory_sample` carries as its root discriminator
|
|
54
|
-
* (#2130) so a record from a multi-root host is attributable.
|
|
55
|
-
*/
|
|
56
|
-
export function getActivePrimaryRoot() {
|
|
57
|
-
return state().activeRoot;
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* PURE classifier — no I/O, no throws, fully unit-testable in isolation.
|
|
61
|
-
*
|
|
62
|
-
* Branches (fail-safe order matters):
|
|
63
|
-
* 1. No prior primary registered → `primary` (first session_start this
|
|
64
|
-
* process has seen; zero behavior change for the single-session case).
|
|
65
|
-
* 2. Prior exists, same stable session id → `sequential-replacement` (the
|
|
66
|
-
* same session re-announcing itself, e.g. resume/reload paths — must
|
|
67
|
-
* keep today's behavior, NOT be mistaken for a sibling).
|
|
68
|
-
* 3. Prior exists, `priorCtxActive === false` (confirmed invalidated) →
|
|
69
|
-
* `sequential-replacement` (the prior really was replaced/disposed —
|
|
70
|
-
* this IS the sequential case pi's own contract covers).
|
|
71
|
-
* 4. Prior exists, `priorCtxActive === true`, different session id →
|
|
72
|
-
* `concurrent-secondary` (positive evidence of a live sibling).
|
|
73
|
-
* 5. Prior exists, different session id, `sameRoot === false` (positive
|
|
74
|
-
* evidence of a DIFFERENT project root) → `secondary-root` (#2129).
|
|
75
|
-
* 6. Prior exists, `priorCtxActive === undefined` (probe inconclusive) →
|
|
76
|
-
* `sequential-replacement` (fail toward today's behavior).
|
|
77
|
-
*
|
|
78
|
-
* WHY ROOT IDENTITY IS AN INPUT AT ALL (#2129). Branch 3 alone made a subagent
|
|
79
|
-
* temp worktree — a session_start in a DIFFERENT directory, arriving after the
|
|
80
|
-
* host's real session had already been disposed or had an unprobeable ctx —
|
|
81
|
-
* classify as a sequential replacement. It then re-registered itself as the
|
|
82
|
-
* process's primary and ran the full session_start body: `resetLSPService`
|
|
83
|
-
* killed the host's warm LSP fleet, and the whole async battery (opengrep,
|
|
84
|
-
* word-index rebuild, review-graph build) re-ran per temp root over content
|
|
85
|
-
* that had not changed. Two temp roots in one host cost ~50s of opengrep and
|
|
86
|
-
* ~53s of word-index rebuild EACH, and drove host RSS from 290MB to 1.1GB in
|
|
87
|
-
* four minutes.
|
|
88
|
-
*
|
|
89
|
-
* A start in a different root is therefore never allowed to steal primary. It
|
|
90
|
-
* is a `secondary-root`, which the caller treats exactly like a
|
|
91
|
-
* `concurrent-secondary`: skip the destructive resets and the expensive
|
|
92
|
-
* battery, leave the registered primary's ctx/session id/root untouched. The
|
|
93
|
-
* root still gets served — `initLSPConfig` registers session roots lazily,
|
|
94
|
-
* per file (`clients/lsp/session-roots.ts`), not from this handler.
|
|
95
|
-
*
|
|
96
|
-
* Ordering note: the root check sits BELOW the `priorCtxActive === true`
|
|
97
|
-
* branch so a live sibling still reports the more specific
|
|
98
|
-
* `concurrent-secondary`, and it deliberately fires even when
|
|
99
|
-
* `priorCtxActive === false`. "The prior ctx was invalidated" is exactly the
|
|
100
|
-
* state a temp-worktree start arrives in, so deferring to it would restore the
|
|
101
|
-
* defect.
|
|
102
|
-
*
|
|
103
|
-
* Accepted trade-off: an in-process SEQUENTIAL replacement that genuinely
|
|
104
|
-
* moves to a new directory (a host that switches sessions across cwds within
|
|
105
|
-
* one process) now takes the reduced path instead of a full start. It keeps
|
|
106
|
-
* working — the LSP still attaches per file — but skips the startup battery
|
|
107
|
-
* for the new root until a same-root start re-registers. `sameRoot` is only
|
|
108
|
-
* ever `false` on positive evidence, and
|
|
109
|
-
* `PI_LENS_CONCURRENT_SESSION_GUARD=0` disables this branch with the rest of
|
|
110
|
-
* the guard.
|
|
111
|
-
*/
|
|
112
|
-
export function classifySessionStart(input) {
|
|
113
|
-
const { hasPrior, priorCtxActive, sameSessionId, sameRoot } = input;
|
|
114
|
-
if (!hasPrior)
|
|
115
|
-
return "primary";
|
|
116
|
-
if (sameSessionId)
|
|
117
|
-
return "sequential-replacement";
|
|
118
|
-
if (priorCtxActive === true)
|
|
119
|
-
return "concurrent-secondary";
|
|
120
|
-
if (sameRoot === false)
|
|
121
|
-
return "secondary-root";
|
|
122
|
-
if (priorCtxActive === false)
|
|
123
|
-
return "sequential-replacement";
|
|
124
|
-
// priorCtxActive === undefined: inconclusive probe — fail-safe.
|
|
125
|
-
return "sequential-replacement";
|
|
126
|
-
}
|
|
127
|
-
/** Lazy env read (house style) — never memoized, so tests can flip it
|
|
128
|
-
* mid-run via `process.env` without a reset hook. */
|
|
129
|
-
function guardEnabled() {
|
|
130
|
-
return process.env.PI_LENS_CONCURRENT_SESSION_GUARD !== "0";
|
|
131
|
-
}
|
|
132
|
-
/**
|
|
133
|
-
* Impure probe: exercises a cheap, side-effect-free ctx accessor that the
|
|
134
|
-
* SDK's `ExtensionRunner.createContext()` wraps with `assertActive()`.
|
|
135
|
-
*
|
|
136
|
-
* Chosen accessor: `ctx.isIdle` (a bound method reading `runner.isIdleFn()`,
|
|
137
|
-
* i.e. pure process/session state — no mutation, no I/O). It is wrapped the
|
|
138
|
-
* same way every other guarded getter/method on the context is (`ui`,
|
|
139
|
-
* `cwd`, `mode`, `signal`, `sessionManager`, ...): `assertActive()` runs
|
|
140
|
-
* first and throws the SDK's stale-ctx error, matching the message fragment
|
|
141
|
-
* `"stale after session replacement"`
|
|
142
|
-
* (`ExtensionRunner.invalidate()`'s default message,
|
|
143
|
-
* `core/extensions/runner.js` in the installed
|
|
144
|
-
* `@earendil-works/pi-coding-agent` SDK dist). `isIdle` was picked over the
|
|
145
|
-
* plain getters (`cwd`, `mode`, `hasUI`) only for readability at call sites
|
|
146
|
-
* that already branch on idle state elsewhere in pi-lens; any of the other
|
|
147
|
-
* assertActive()-wrapped accessors would work identically for this probe.
|
|
148
|
-
*
|
|
149
|
-
* Returns:
|
|
150
|
-
* - `true` — the accessor call returned normally (ctx still active).
|
|
151
|
-
* - `false` — the accessor threw, and the message matches the known
|
|
152
|
-
* stale-ctx fragment (ctx confirmed invalidated by the SDK).
|
|
153
|
-
* - `undefined` — ctx has an unexpected shape (accessor missing / not a
|
|
154
|
-
* function), or the accessor threw something that does NOT look like the
|
|
155
|
-
* SDK's stale-ctx error (never assume — treat as inconclusive).
|
|
156
|
-
*
|
|
157
|
-
* Never throws out of this function; every branch is wrapped.
|
|
158
|
-
*/
|
|
159
|
-
export function probeCtxActive(ctx) {
|
|
160
|
-
try {
|
|
161
|
-
const candidate = ctx;
|
|
162
|
-
if (candidate === null ||
|
|
163
|
-
candidate === undefined ||
|
|
164
|
-
typeof candidate.isIdle !== "function") {
|
|
165
|
-
return undefined;
|
|
166
|
-
}
|
|
167
|
-
candidate.isIdle();
|
|
168
|
-
return true;
|
|
169
|
-
}
|
|
170
|
-
catch (err) {
|
|
171
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
172
|
-
if (message.includes("stale after session replacement")) {
|
|
173
|
-
return false;
|
|
174
|
-
}
|
|
175
|
-
// Threw, but not the SDK's known stale-ctx error — don't guess.
|
|
176
|
-
return undefined;
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
/** Register the current session as the process's primary. Called for both
|
|
180
|
-
* `primary` and `sequential-replacement` classifications — a sequential
|
|
181
|
-
* replacement re-registers itself as the (new) primary, matching today's
|
|
182
|
-
* one-active-session-at-a-time behavior. */
|
|
183
|
-
export function registerPrimarySession(ctx, sessionId, root) {
|
|
184
|
-
const s = state();
|
|
185
|
-
s.activeCtx = ctx;
|
|
186
|
-
s.activeSessionId = sessionId;
|
|
187
|
-
// #2129: a re-registration that carries NO root must not erase a root the
|
|
188
|
-
// previous primary did record — losing it would make every later start's
|
|
189
|
-
// `sameRoot` read `undefined` (unknown) and silently restore the pre-fix
|
|
190
|
-
// "any root may steal primary" behavior.
|
|
191
|
-
if (root !== undefined)
|
|
192
|
-
s.activeRoot = normalizeRootForCompare(root);
|
|
193
|
-
s.secondarySessionCount = 0;
|
|
194
|
-
}
|
|
195
|
-
/**
|
|
196
|
-
* Normalize a project root for identity comparison (#2129).
|
|
197
|
-
*
|
|
198
|
-
* Uses `normalizeFilePath` — the SAME comparator `registerInstance`
|
|
199
|
-
* (`clients/instance-registry.ts:213`) writes roots with — so drive-letter
|
|
200
|
-
* case, separators, and symlinked temp dirs cannot make two spellings of one
|
|
201
|
-
* root look like two roots (catalog shape 1). Never throws: an unresolvable
|
|
202
|
-
* path degrades to `undefined`, which reads as "root unknown" and leaves the
|
|
203
|
-
* classification exactly where it was before this input existed.
|
|
204
|
-
*/
|
|
205
|
-
function normalizeRootForCompare(root) {
|
|
206
|
-
if (typeof root !== "string" || root.length === 0)
|
|
207
|
-
return undefined;
|
|
208
|
-
try {
|
|
209
|
-
return normalizeFilePath(root);
|
|
210
|
-
}
|
|
211
|
-
catch {
|
|
212
|
-
return undefined;
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
/**
|
|
216
|
-
* Release the primary registration when the primary session itself shuts down
|
|
217
|
-
* (#2129 review F3).
|
|
218
|
-
*
|
|
219
|
-
* WHY THIS EXISTS. Before root identity was an input, a stale `activeCtx` left
|
|
220
|
-
* behind by a departed primary was benign: the next start probed it, got
|
|
221
|
-
* `false` (dead ctx), and classified `sequential-replacement`, so it took over
|
|
222
|
-
* as the new primary. Root identity made that stale state DECISIVE — a start in
|
|
223
|
-
* a different root behind a dead-but-still-registered primary now classifies
|
|
224
|
-
* `secondary-root` and declines. Without an explicit release, root A's primary
|
|
225
|
-
* ending would mean every later start in root B declines FOREVER: never
|
|
226
|
-
* primary, never a full start, no re-arm.
|
|
227
|
-
*
|
|
228
|
-
* This is the catalog's process-lifetime-latch shape (state that must re-arm at
|
|
229
|
-
* a session boundary must not outlive it). `session_shutdown`'s primary path is
|
|
230
|
-
* that boundary. Deliberately NOT called on a secondary's shutdown — that path
|
|
231
|
-
* returns before the shared teardown precisely because the primary is still
|
|
232
|
-
* live.
|
|
233
|
-
*
|
|
234
|
-
* A concurrent secondary that outlives the primary now classifies `primary` on
|
|
235
|
-
* its later emissions rather than `concurrent-secondary`. That is the fail-safe
|
|
236
|
-
* direction this module has always taken (run the handler), and it is correct
|
|
237
|
-
* here: with the primary gone there is no live sibling to protect.
|
|
238
|
-
*
|
|
239
|
-
* WHAT PROTECTS A SURVIVING SECONDARY (#2130 round 2, remainder N3/F3). Not the
|
|
240
|
-
* count zeroed below, and not this module-level classification at all: it is the
|
|
241
|
-
* per-activation `ownedSessionRole` closure in `index.ts`. Each activation
|
|
242
|
-
* records the role IT was classified as at its own session_start and consults
|
|
243
|
-
* that at its own shutdown, so a secondary whose primary has already released
|
|
244
|
-
* still takes the secondary teardown path.
|
|
245
|
-
*
|
|
246
|
-
* `secondarySessionCount` is therefore an OBSERVABILITY counter, not a guard.
|
|
247
|
-
* Zeroing it here under-reports for the window between the primary's release
|
|
248
|
-
* and the next primary's registration. That is real and accepted: the only
|
|
249
|
-
* reader is `concurrent_session_bind.metadata.secondaryCount` in `latency.log`,
|
|
250
|
-
* and during that window no primary is registered, so every arriving start
|
|
251
|
-
* classifies `primary` and re-registers — which zeroes the count anyway —
|
|
252
|
-
* instead of emitting a bind record. `decrementSecondarySessionCount` clamps at
|
|
253
|
-
* zero, so a late secondary's shutdown cannot underflow it. Documented rather
|
|
254
|
-
* than changed, because a count that outlived the registration it is scoped to
|
|
255
|
-
* would disagree with `getActivePrimaryRoot()` in the same record.
|
|
256
|
-
*/
|
|
257
|
-
export function releasePrimarySession() {
|
|
258
|
-
const s = state();
|
|
259
|
-
s.activeCtx = undefined;
|
|
260
|
-
s.activeSessionId = undefined;
|
|
261
|
-
s.activeRoot = undefined;
|
|
262
|
-
s.secondarySessionCount = 0;
|
|
263
|
-
}
|
|
264
|
-
/** Register a concurrently-bound secondary (subagent) session. Does not
|
|
265
|
-
* touch the primary's ctx/session id. */
|
|
266
|
-
export function registerSecondarySession() {
|
|
267
|
-
state().secondarySessionCount += 1;
|
|
268
|
-
}
|
|
269
|
-
/**
|
|
270
|
-
* Classifies a `session_shutdown` firing the same fail-safe way as
|
|
271
|
-
* `classifySessionStart`: it is `secondary` ONLY when a DIFFERENT primary is
|
|
272
|
-
* registered (positively identified — ctx identity differs AND session ids
|
|
273
|
-
* are both known and differ) and that primary's ctx still probes active
|
|
274
|
-
* (positive evidence the shutting-down session is a live sibling, not the
|
|
275
|
-
* real parent exiting). Any inconclusive signal — no primary registered,
|
|
276
|
-
* same ctx object, same session id, EITHER session id unknown, or the
|
|
277
|
-
* primary's ctx probe returning `undefined`/`false` — classifies as
|
|
278
|
-
* `primary` so today's full-teardown behavior is preserved.
|
|
279
|
-
*
|
|
280
|
-
* The id-unknown guard matters: without it, a single ordinary session whose
|
|
281
|
-
* `sessionManager.getSessionId()` is unavailable (SDK drift) would register
|
|
282
|
-
* with `sessionId === undefined`, then at its OWN shutdown the same-id check
|
|
283
|
-
* couldn't fire, the probe of its own (still-live — pi invalidates on
|
|
284
|
-
* replacement, not shutdown) ctx would return true, and its teardown would
|
|
285
|
-
* be skipped on EVERY clean exit — leaking the LSP fleet (the #472 orphan
|
|
286
|
-
* class). Trade-off accepted: a REAL secondary that also has unknown ids
|
|
287
|
-
* now classifies `primary` (conservative miss — its teardown runs and hurts
|
|
288
|
-
* the parent, same as pre-#473 behavior), because uncertainty must never
|
|
289
|
-
* classify `secondary`.
|
|
290
|
-
*
|
|
291
|
-
* ROOT IDENTITY (#2146 review F1). The probe-based branch above is the only
|
|
292
|
-
* evidence this function had, and it is exactly the evidence that is missing in
|
|
293
|
-
* the state #2146 describes: the host's ctx is already invalidated, which is
|
|
294
|
-
* WHY `secondary-root` fires on the start side. A subagent's teardown therefore
|
|
295
|
-
* read "the primary's ctx is dead, so I must be the primary", and index.ts's
|
|
296
|
-
* primary path called `releasePrimarySession()` and wiped the SHARED process
|
|
297
|
-
* registration. The decline then survived exactly one subagent: the next one
|
|
298
|
-
* classified `primary` and ran the full battery.
|
|
299
|
-
*
|
|
300
|
-
* So this function takes the same root discriminator `decideSessionStart` has,
|
|
301
|
-
* with the same rule and the same fail-safe direction. A shutdown whose root is
|
|
302
|
-
* POSITIVELY different from the registered primary's root is a `secondary`,
|
|
303
|
-
* even when the primary's ctx probes `false` or `undefined` — deferring to the
|
|
304
|
-
* dead-ctx branch is what restored the defect. `undefined` on either side means
|
|
305
|
-
* "root unknown" and changes no verdict.
|
|
306
|
-
*
|
|
307
|
-
* Ordering: the root check sits BELOW the id-unknown guard, not above it. That
|
|
308
|
-
* guard is the #472 fix — a session with an unreadable session id must still
|
|
309
|
-
* tear itself down — and a root comparison cannot establish "different session"
|
|
310
|
-
* when the ids that identify sessions are unavailable.
|
|
311
|
-
*/
|
|
312
|
-
export function noteSessionShutdown(
|
|
313
|
-
// Load-bearing: ctx OBJECT IDENTITY is the definitive discriminator when
|
|
314
|
-
// available — if the shutting-down handler's ctx IS the registered
|
|
315
|
-
// primary's ctx, this is the primary regardless of session-id reads.
|
|
316
|
-
// (Note: pi's ExtensionRunner.emit() builds a FRESH ctx object per emit,
|
|
317
|
-
// so identity match is not expected with today's SDK — this check is
|
|
318
|
-
// defense-in-depth for SDK versions/paths that reuse a ctx.)
|
|
319
|
-
ctx, sessionId,
|
|
320
|
-
/** This session's own project root (`ctx.cwd`), when readable. `undefined`
|
|
321
|
-
* means "root unknown" and never on its own changes a verdict. */
|
|
322
|
-
root) {
|
|
323
|
-
const s = state();
|
|
324
|
-
if (ctx !== undefined && ctx === s.activeCtx) {
|
|
325
|
-
return "primary";
|
|
326
|
-
}
|
|
327
|
-
if (s.activeCtx === undefined && s.activeSessionId === undefined) {
|
|
328
|
-
return "primary";
|
|
329
|
-
}
|
|
330
|
-
if (sessionId !== undefined && sessionId === s.activeSessionId) {
|
|
331
|
-
return "primary";
|
|
332
|
-
}
|
|
333
|
-
// Uncertainty guard: if EITHER side's session id is unknown we cannot
|
|
334
|
-
// positively establish "different session", so never classify secondary.
|
|
335
|
-
if (sessionId === undefined || s.activeSessionId === undefined) {
|
|
336
|
-
return "primary";
|
|
337
|
-
}
|
|
338
|
-
const primaryStillActive = probeCtxActive(s.activeCtx);
|
|
339
|
-
if (primaryStillActive === true) {
|
|
340
|
-
return "secondary";
|
|
341
|
-
}
|
|
342
|
-
// #2146 F1: positive evidence of a DIFFERENT root, in a session positively
|
|
343
|
-
// identified as not the primary. Deliberately below the probe-true branch
|
|
344
|
-
// (a live sibling is already answered) and deliberately ABOVE the
|
|
345
|
-
// dead-ctx fail-safe, because a dead primary ctx is precisely the state a
|
|
346
|
-
// subagent teardown arrives in.
|
|
347
|
-
const shutdownRoot = normalizeRootForCompare(root);
|
|
348
|
-
if (s.activeRoot !== undefined &&
|
|
349
|
-
shutdownRoot !== undefined &&
|
|
350
|
-
s.activeRoot !== shutdownRoot) {
|
|
351
|
-
return "secondary";
|
|
352
|
-
}
|
|
353
|
-
// primaryStillActive is false or undefined: fail-safe to primary.
|
|
354
|
-
return "primary";
|
|
355
|
-
}
|
|
356
|
-
/**
|
|
357
|
-
* Read-only counterpart to {@link classifySessionStart}, usable from ANY
|
|
358
|
-
* event handler (agent_end, turn_end, ...) rather than only session_start.
|
|
359
|
-
* Unlike `decideSessionStart` this never mutates the module-scope
|
|
360
|
-
* registration — repeated calls across a session's many agent_end/turn_end
|
|
361
|
-
* firings are side-effect-free.
|
|
362
|
-
*
|
|
363
|
-
* Same fail-safe direction as the rest of this module: only returns
|
|
364
|
-
* `"concurrent-secondary"` on POSITIVE evidence — a different, KNOWN session
|
|
365
|
-
* id than the registered primary's, AND the registered primary's ctx still
|
|
366
|
-
* probes active (i.e. a live sibling, not a primary that simply never
|
|
367
|
-
* re-registered). Every uncertain case (no primary registered yet, same ctx
|
|
368
|
-
* object, same session id, either id unknown, or the primary's probe isn't
|
|
369
|
-
* affirmatively `true`) classifies as `"primary"` so today's behavior (run
|
|
370
|
-
* the handler) is preserved. #791: used to skip the deferred-format flush at
|
|
371
|
-
* `agent_end` for a concurrent secondary's own firing, mirroring how
|
|
372
|
-
* `decideSessionStart` already skips `handleSessionStart`.
|
|
373
|
-
*/
|
|
374
|
-
export function classifyCurrentSessionEmission(ctx, sessionId) {
|
|
375
|
-
if (!guardEnabled())
|
|
376
|
-
return "primary";
|
|
377
|
-
const s = state();
|
|
378
|
-
if (s.activeCtx === undefined && s.activeSessionId === undefined)
|
|
379
|
-
return "primary";
|
|
380
|
-
if (ctx !== undefined && ctx === s.activeCtx)
|
|
381
|
-
return "primary";
|
|
382
|
-
if (sessionId !== undefined && sessionId === s.activeSessionId)
|
|
383
|
-
return "primary";
|
|
384
|
-
// Uncertainty guard: if EITHER side's session id is unknown we cannot
|
|
385
|
-
// positively establish "different session", so never classify secondary.
|
|
386
|
-
if (sessionId === undefined || s.activeSessionId === undefined)
|
|
387
|
-
return "primary";
|
|
388
|
-
const primaryStillActive = probeCtxActive(s.activeCtx);
|
|
389
|
-
if (primaryStillActive === true)
|
|
390
|
-
return "concurrent-secondary";
|
|
391
|
-
return "primary";
|
|
392
|
-
}
|
|
393
|
-
export function getSecondarySessionCount() {
|
|
394
|
-
return state().secondarySessionCount;
|
|
395
|
-
}
|
|
396
|
-
export function decrementSecondarySessionCount() {
|
|
397
|
-
const s = state();
|
|
398
|
-
if (s.secondarySessionCount > 0)
|
|
399
|
-
s.secondarySessionCount -= 1;
|
|
400
|
-
}
|
|
401
|
-
/**
|
|
402
|
-
* Guard-aware wrapper used by callers (index.ts) so the kill switch lives in
|
|
403
|
-
* one place: when disabled, always report `sequential-replacement` (i.e.
|
|
404
|
-
* behave exactly as if this module didn't exist).
|
|
405
|
-
*/
|
|
406
|
-
export function classifySessionStartGuarded(input) {
|
|
407
|
-
if (!guardEnabled())
|
|
408
|
-
return input.hasPrior ? "sequential-replacement" : "primary";
|
|
409
|
-
return classifySessionStart(input);
|
|
410
|
-
}
|
|
411
|
-
/** Test-only: clears all module-scope state (house style — see
|
|
412
|
-
* `_resetSubagentModeForTests` / `slow-fs.ts`). */
|
|
413
|
-
export function _resetSessionLifecycleForTests() {
|
|
414
|
-
// Resets the PROCESS state, not a module-local copy: a reset that cleared
|
|
415
|
-
// only module scope would leave the real registration behind and make every
|
|
416
|
-
// suite that relies on isolation pass vacuously (#2146, catalog shape 7).
|
|
417
|
-
const s = state();
|
|
418
|
-
s.activeCtx = undefined;
|
|
419
|
-
s.activeSessionId = undefined;
|
|
420
|
-
s.activeRoot = undefined;
|
|
421
|
-
s.secondarySessionCount = 0;
|
|
422
|
-
}
|
|
423
|
-
/**
|
|
424
|
-
* Single entry point `index.ts`'s `session_start` handler delegates to, so
|
|
425
|
-
* the classify → probe → register decision is unit-testable independent of
|
|
426
|
-
* the SDK's `pi.on("session_start", ...)` wiring (which cannot be invoked
|
|
427
|
-
* directly in tests).
|
|
428
|
-
*
|
|
429
|
-
* `ctx` is whatever the SDK handed the handler (only ever probed via
|
|
430
|
-
* {@link probeCtxActive}, never dereferenced otherwise, so passing a plain
|
|
431
|
-
* fake object in tests is safe). `sessionId` is the STABLE session id
|
|
432
|
-
* (`ctx.sessionManager.getSessionId()`), which may be `undefined`.
|
|
433
|
-
*/
|
|
434
|
-
export function decideSessionStart(ctx, sessionId, root) {
|
|
435
|
-
const s = state();
|
|
436
|
-
const hasPrior = s.activeCtx !== undefined || s.activeSessionId !== undefined;
|
|
437
|
-
const priorCtxActive = hasPrior ? probeCtxActive(s.activeCtx) : undefined;
|
|
438
|
-
// ctx OBJECT IDENTITY: if the SDK ever hands the SAME ctx object to a
|
|
439
|
-
// repeated session_start, that is by definition the same session
|
|
440
|
-
// re-announcing itself — sequential, never concurrent. (Not expected with
|
|
441
|
-
// today's SDK — ExtensionRunner.emit() builds a fresh ctx per emit — but
|
|
442
|
-
// identity is the one signal that can't false-positive, so honor it.)
|
|
443
|
-
const sameCtx = hasPrior && ctx !== undefined && ctx === s.activeCtx;
|
|
444
|
-
const sameSessionId = sameCtx ||
|
|
445
|
-
(hasPrior && sessionId !== undefined && sessionId === s.activeSessionId);
|
|
446
|
-
// #2129: compare THIS start's cwd against the registered primary's root.
|
|
447
|
-
// `undefined` on either side means "unknown", never "different" — see
|
|
448
|
-
// `classifySessionStart`'s fail-safe note.
|
|
449
|
-
const incomingRoot = normalizeRootForCompare(root);
|
|
450
|
-
const sameRoot = hasPrior && s.activeRoot !== undefined && incomingRoot !== undefined
|
|
451
|
-
? s.activeRoot === incomingRoot
|
|
452
|
-
: undefined;
|
|
453
|
-
// #2129 review F5: capture the primary root BEFORE any registration mutates
|
|
454
|
-
// it, so the reported value is genuinely the decision-time input the
|
|
455
|
-
// classifier consulted rather than the value this call just wrote.
|
|
456
|
-
const primaryRootAtDecision = s.activeRoot;
|
|
457
|
-
const classification = classifySessionStartGuarded({
|
|
458
|
-
hasPrior,
|
|
459
|
-
priorCtxActive,
|
|
460
|
-
sameSessionId,
|
|
461
|
-
sameRoot,
|
|
462
|
-
});
|
|
463
|
-
if (classification === "concurrent-secondary" ||
|
|
464
|
-
classification === "secondary-root") {
|
|
465
|
-
registerSecondarySession();
|
|
466
|
-
return {
|
|
467
|
-
classification,
|
|
468
|
-
runFullSessionStart: false,
|
|
469
|
-
secondaryCount: s.secondarySessionCount,
|
|
470
|
-
sameRoot,
|
|
471
|
-
primaryRoot: primaryRootAtDecision,
|
|
472
|
-
};
|
|
473
|
-
}
|
|
474
|
-
// "primary" or "sequential-replacement": register as the (new) primary
|
|
475
|
-
// and proceed exactly as today.
|
|
476
|
-
registerPrimarySession(ctx, sessionId, root);
|
|
477
|
-
return {
|
|
478
|
-
classification,
|
|
479
|
-
runFullSessionStart: true,
|
|
480
|
-
secondaryCount: s.secondarySessionCount,
|
|
481
|
-
sameRoot,
|
|
482
|
-
primaryRoot: primaryRootAtDecision,
|
|
483
|
-
};
|
|
484
|
-
}
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
import { logLatency } from "./latency-logger.js";
|
|
2
|
-
import { getProcessSingleton } from "./process-singletons.js";
|
|
3
|
-
/**
|
|
4
|
-
* The complete observability path for a concurrent secondary. It deliberately
|
|
5
|
-
* emits one bind record only: secondary sessions skip every primary reset and
|
|
6
|
-
* hydration phase.
|
|
7
|
-
*/
|
|
8
|
-
// #2249: bounded per-session rollup of declined binds, counted at this shared
|
|
9
|
-
// seam so every decline the process's PRIMARY has seen this session —
|
|
10
|
-
// `concurrent-secondary` and `secondary-root` alike — is summarized in one row
|
|
11
|
-
// at session end instead of requiring a reader to hand-count
|
|
12
|
-
// `concurrent_session_bind` lines. Process-singleton backed (AGENTS.md catalog
|
|
13
|
-
// shape 25), NOT a module-scope `let` like the other `*_rollup` counters
|
|
14
|
-
// (bus-events-logger.ts, path-attribution-telemetry.ts): a `let` here exists
|
|
15
|
-
// once per module EVALUATION, not once per process, and #2146 measured one pid
|
|
16
|
-
// evaluating this exact graph nine times — a bare `let` would only ever see
|
|
17
|
-
// the binds routed through its own copy, undercounting every rollup that
|
|
18
|
-
// isn't reached through the first evaluation. `decideSessionStart` never
|
|
19
|
-
// returns a declined classification outside `concurrent-secondary`/
|
|
20
|
-
// `secondary-root` (session-lifecycle.ts), so those two are the whole
|
|
21
|
-
// contract; `unclassified` is a bounded third bucket for the legacy callers
|
|
22
|
-
// this function's `classification?` param still accepts.
|
|
23
|
-
const BIND_ROLLUP_FAMILY = "concurrent-session-bind-rollup";
|
|
24
|
-
const BIND_ROLLUP_VERSION = 1;
|
|
25
|
-
function bindRollupCounts() {
|
|
26
|
-
return getProcessSingleton(BIND_ROLLUP_FAMILY, BIND_ROLLUP_VERSION, () => ({
|
|
27
|
-
"concurrent-secondary": 0,
|
|
28
|
-
"secondary-root": 0,
|
|
29
|
-
unclassified: 0,
|
|
30
|
-
}));
|
|
31
|
-
}
|
|
32
|
-
function bindRollupKey(classification) {
|
|
33
|
-
return classification === "concurrent-secondary" ||
|
|
34
|
-
classification === "secondary-root"
|
|
35
|
-
? classification
|
|
36
|
-
: "unclassified";
|
|
37
|
-
}
|
|
38
|
-
export function logConcurrentSessionBind(args) {
|
|
39
|
-
bindRollupCounts()[bindRollupKey(args.classification)] += 1;
|
|
40
|
-
logLatency({
|
|
41
|
-
type: "phase",
|
|
42
|
-
filePath: "<pi-lens>",
|
|
43
|
-
phase: "concurrent_session_bind",
|
|
44
|
-
durationMs: 0,
|
|
45
|
-
metadata: args,
|
|
46
|
-
});
|
|
47
|
-
}
|
|
48
|
-
/** Snapshot of the current rollup counters, keyed by classification.
|
|
49
|
-
* Non-mutating — for tests/observability, mirroring
|
|
50
|
-
* `getBusEventRollupCounts`/`getVerifiedPathAttributionGuessCount`. */
|
|
51
|
-
export function getConcurrentSessionBindRollupCounts() {
|
|
52
|
-
return { ...bindRollupCounts() };
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* Log one `concurrent_session_bind_rollup` row summarizing this session's
|
|
56
|
-
* declined binds by classification, then clear the counters. Call from
|
|
57
|
-
* index.ts's `session_shutdown` handler at the same primary-only placement as
|
|
58
|
-
* `emitBusEventRollupAtSessionEnd`/`emitVerifiedPathAttributionRollup` — a
|
|
59
|
-
* concurrent secondary's own shutdown returns before reaching that point, and
|
|
60
|
-
* the counters are process-wide state a still-live secondary would still need.
|
|
61
|
-
* A no-op when nothing was ever declined this session, matching those same
|
|
62
|
-
* rollups' "no noise on an ordinary session" shape.
|
|
63
|
-
*/
|
|
64
|
-
export function emitConcurrentSessionBindRollupAtSessionEnd(cwd) {
|
|
65
|
-
const counts = bindRollupCounts();
|
|
66
|
-
const total = counts["concurrent-secondary"] +
|
|
67
|
-
counts["secondary-root"] +
|
|
68
|
-
counts.unclassified;
|
|
69
|
-
if (total === 0)
|
|
70
|
-
return;
|
|
71
|
-
logLatency({
|
|
72
|
-
type: "phase",
|
|
73
|
-
filePath: cwd,
|
|
74
|
-
phase: "concurrent_session_bind_rollup",
|
|
75
|
-
durationMs: 0,
|
|
76
|
-
metadata: { ...counts },
|
|
77
|
-
});
|
|
78
|
-
resetConcurrentSessionBindRollupCounts();
|
|
79
|
-
}
|
|
80
|
-
/**
|
|
81
|
-
* Session-boundary reset (AGENTS.md catalog shape 17). Call from index.ts's
|
|
82
|
-
* `session_start` handler on the PRIMARY continuation path only — never from
|
|
83
|
-
* a declined bind's own `session_start`, which is exactly what increments
|
|
84
|
-
* these counters, so resetting there would erase every prior sibling's tally
|
|
85
|
-
* from the same primary session. Covers the case a primary session never
|
|
86
|
-
* reaches `session_shutdown` (a crash, a forced kill) and the process's next
|
|
87
|
-
* primary must still start from zero. Also exported for tests.
|
|
88
|
-
*/
|
|
89
|
-
export function resetConcurrentSessionBindRollupCounts() {
|
|
90
|
-
const counts = bindRollupCounts();
|
|
91
|
-
counts["concurrent-secondary"] = 0;
|
|
92
|
-
counts["secondary-root"] = 0;
|
|
93
|
-
counts.unclassified = 0;
|
|
94
|
-
}
|
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Per-session diagnostic state persistence (#190 Phase 1).
|
|
3
|
-
*
|
|
4
|
-
* pi-lens's widget/diagnostic state was in-memory only, so quitting and resuming
|
|
5
|
-
* a session (`pi --session <id>`) started "fresh" — `lens_diagnostics` returned
|
|
6
|
-
* nothing. This store persists the widget snapshot to disk keyed by pi's STABLE
|
|
7
|
-
* session id (`ctx.sessionManager.getSessionId()`), so a resumed session can
|
|
8
|
-
* rehydrate its prior findings. Best-effort: every read/write swallows errors
|
|
9
|
-
* (a missing or corrupt file just means "start clean").
|
|
10
|
-
*/
|
|
11
|
-
import { promises as fs } from "node:fs";
|
|
12
|
-
import * as path from "node:path";
|
|
13
|
-
import { writeFileAtomicAsync } from "./atomic-write.js";
|
|
14
|
-
import { getProjectDataDir } from "./file-utils.js";
|
|
15
|
-
import { readJsonCacheAsync } from "./json-cache-read.js";
|
|
16
|
-
export const STATE_VERSION = 1;
|
|
17
|
-
export function sessionStartMode(reason, hasPendingForkSnapshot) {
|
|
18
|
-
if (reason === "fork" && hasPendingForkSnapshot)
|
|
19
|
-
return "fork";
|
|
20
|
-
if (reason === "reload")
|
|
21
|
-
return "keep";
|
|
22
|
-
if (reason === "new")
|
|
23
|
-
return "clean";
|
|
24
|
-
return "maybe-rehydrate";
|
|
25
|
-
}
|
|
26
|
-
function sessionsDir(cwd) {
|
|
27
|
-
return path.join(getProjectDataDir(cwd), "sessions");
|
|
28
|
-
}
|
|
29
|
-
/** Session ids are pi uuids, but sanitize defensively before using as a filename. */
|
|
30
|
-
function sessionFilePath(cwd, sessionId) {
|
|
31
|
-
const safe = sessionId.replace(/[^A-Za-z0-9._-]/g, "_").slice(0, 200);
|
|
32
|
-
return path.join(sessionsDir(cwd), `${safe}.json`);
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Persist the widget snapshot for `sessionId` (atomic write via tmp+rename).
|
|
36
|
-
* No-op on a missing id or any I/O error — persistence must never break a turn.
|
|
37
|
-
*/
|
|
38
|
-
export async function saveSessionState(cwd, sessionId, widget, readGuard) {
|
|
39
|
-
if (!sessionId || !sessionId.trim())
|
|
40
|
-
return;
|
|
41
|
-
try {
|
|
42
|
-
const dir = sessionsDir(cwd);
|
|
43
|
-
await fs.mkdir(dir, { recursive: true });
|
|
44
|
-
const payload = {
|
|
45
|
-
version: STATE_VERSION,
|
|
46
|
-
sessionId,
|
|
47
|
-
savedAt: Date.now(),
|
|
48
|
-
widget,
|
|
49
|
-
...(readGuard ? { readGuard } : {}),
|
|
50
|
-
};
|
|
51
|
-
const file = sessionFilePath(cwd, sessionId);
|
|
52
|
-
// bestEffort (default): a failed write/rename just means this snapshot is
|
|
53
|
-
// lost, matching this store's documented "start clean" fallback — never
|
|
54
|
-
// throw for the caller. (Tmp naming is now the shared
|
|
55
|
-
// `${target}.tmp-${pid}-${seq}` shape (unique per call, not just per process,
|
|
56
|
-
// since #1205) rather than this site's former
|
|
57
|
-
// `${file}.${pid}.tmp` — no behavioral difference: nothing reads the
|
|
58
|
-
// intermediate tmp filename.)
|
|
59
|
-
await writeFileAtomicAsync(file, JSON.stringify(payload));
|
|
60
|
-
}
|
|
61
|
-
catch {
|
|
62
|
-
/* best-effort */
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* Reconcile a rehydrated snapshot with the current filesystem (#190 / #180):
|
|
67
|
-
* drop files whose on-disk mtime is newer than `savedAt` (changed since the
|
|
68
|
-
* snapshot) or that no longer exist, so a resume never shows stale diagnostics
|
|
69
|
-
* for files edited between sessions. Dropped files simply re-scan on their next
|
|
70
|
-
* edit. Existence/mtime are probed concurrently (off the event loop).
|
|
71
|
-
*/
|
|
72
|
-
export async function dropStaleFiles(widget, savedAt) {
|
|
73
|
-
const checked = await Promise.all(widget.files.map(async (file) => {
|
|
74
|
-
try {
|
|
75
|
-
const st = await fs.stat(file.filePath);
|
|
76
|
-
// mtime within a small skew of savedAt counts as unchanged.
|
|
77
|
-
return st.mtimeMs <= savedAt + 1 ? file : undefined;
|
|
78
|
-
}
|
|
79
|
-
catch {
|
|
80
|
-
return undefined; // gone → drop
|
|
81
|
-
}
|
|
82
|
-
}));
|
|
83
|
-
return {
|
|
84
|
-
...widget,
|
|
85
|
-
files: checked.filter((f) => f !== undefined),
|
|
86
|
-
};
|
|
87
|
-
}
|
|
88
|
-
/**
|
|
89
|
-
* Load the persisted widget snapshot for `sessionId`, or undefined if none /
|
|
90
|
-
* unreadable / version mismatch.
|
|
91
|
-
*/
|
|
92
|
-
export async function loadSessionState(cwd, sessionId) {
|
|
93
|
-
if (!sessionId || !sessionId.trim())
|
|
94
|
-
return undefined;
|
|
95
|
-
return readJsonCacheAsync(sessionFilePath(cwd, sessionId), (parsed) => {
|
|
96
|
-
const state = parsed;
|
|
97
|
-
if (state?.version !== STATE_VERSION || !state.widget)
|
|
98
|
-
return undefined;
|
|
99
|
-
return state;
|
|
100
|
-
});
|
|
101
|
-
}
|