@herbertgao/pi-extensions 2026.10.2 → 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.
Files changed (359) hide show
  1. package/README.md +5 -12
  2. package/THIRD_PARTY_NOTICES.md +1 -1
  3. package/node_modules/@herbertgao/pi-subagents/CHANGELOG.md +8 -0
  4. package/node_modules/@herbertgao/pi-subagents/README.md +1 -1
  5. package/node_modules/@herbertgao/pi-subagents/package.json +4 -5
  6. package/node_modules/@herbertgao/pi-subagents/src/index.ts +1 -1
  7. package/node_modules/@herbertgao/pi-subagents/src/invocation-config.ts +1 -1
  8. package/node_modules/@herbertgao/pi-subagents/src/mention-clone.ts +48 -72
  9. package/node_modules/@herbertgao/pi-subagents/src/nested-tools.ts +1 -1
  10. package/node_modules/@herbertgao/pi-subagents/src/output-file.ts +15 -6
  11. package/node_modules/@herbertgao/pi-subagents/src/workflow/collisions.ts +4 -1
  12. package/node_modules/@herbertgao/pi-subagents/src/workflow/json-schema.ts +9 -8
  13. package/node_modules/@narumitw/pi-caffeinate/dist/index.ts +6 -1
  14. package/node_modules/@narumitw/pi-caffeinate/dist/index.ts.map +2 -2
  15. package/node_modules/@narumitw/pi-caffeinate/package.json +1 -1
  16. package/node_modules/@narumitw/pi-caffeinate/src/dbus-inhibit.ts +13 -1
  17. package/node_modules/pi-lens/CHANGELOG.md +95 -0
  18. package/node_modules/pi-lens/README.md +1 -0
  19. package/node_modules/pi-lens/dist/chunk-2FQ62SPM.js +83 -0
  20. package/node_modules/pi-lens/dist/{chunk-6P62QVEA.js → chunk-2UMYMRI3.js} +2 -2
  21. package/node_modules/pi-lens/dist/{chunk-O6TQT6RI.js → chunk-34OCDWOS.js} +1 -1
  22. package/node_modules/pi-lens/dist/{chunk-XK4CIILI.js → chunk-3FERWMCH.js} +26 -26
  23. package/node_modules/pi-lens/dist/{chunk-ZAWW3AF6.js → chunk-3JL6IFD7.js} +8 -8
  24. package/node_modules/pi-lens/dist/{chunk-OAXNDZJ7.js → chunk-3JSEWUWI.js} +8 -4
  25. package/node_modules/pi-lens/dist/{chunk-RPD5K5NC.js → chunk-3MRXIJ6I.js} +2 -2
  26. package/node_modules/pi-lens/dist/{chunk-IVP5KAB7.js → chunk-3P4PF2BX.js} +14 -14
  27. package/node_modules/pi-lens/dist/{chunk-5THXD6X5.js → chunk-3PNFWVHT.js} +2 -2
  28. package/node_modules/pi-lens/dist/{chunk-VD4JQCQC.js → chunk-3TTPKMEF.js} +37 -37
  29. package/node_modules/pi-lens/dist/{chunk-7F72PXY2.js → chunk-5JHXUETW.js} +3 -3
  30. package/node_modules/pi-lens/dist/{chunk-5ZEJHV35.js → chunk-64LU2OVH.js} +2 -2
  31. package/node_modules/pi-lens/dist/{chunk-ODEEOXPH.js → chunk-6B5I6ICN.js} +11 -11
  32. package/node_modules/pi-lens/dist/{chunk-5RXBNSW2.js → chunk-6P54TMWL.js} +16 -8
  33. package/node_modules/pi-lens/dist/{chunk-K6VYLB2U.js → chunk-6UYA642J.js} +12 -12
  34. package/node_modules/pi-lens/dist/{chunk-V7R425XG.js → chunk-6XX5HCLK.js} +4 -4
  35. package/node_modules/pi-lens/dist/{chunk-D6QS3U6M.js → chunk-7AXO3ZDF.js} +15 -15
  36. package/node_modules/pi-lens/dist/{chunk-YGVYKNSN.js → chunk-7BX5DWSA.js} +59 -12
  37. package/node_modules/pi-lens/dist/{chunk-N3YQJI6O.js → chunk-7ELY2CSM.js} +7 -4
  38. package/node_modules/pi-lens/dist/{chunk-AWE5TMPO.js → chunk-7M4T5N3V.js} +13 -13
  39. package/node_modules/pi-lens/dist/{chunk-AJ3QXTRQ.js → chunk-AFZYMAIV.js} +33 -33
  40. package/node_modules/pi-lens/dist/{chunk-AJXODZY6.js → chunk-ALQRYH6O.js} +12 -12
  41. package/node_modules/pi-lens/dist/{chunk-AJVLWNFN.js → chunk-AXKPQ6ZI.js} +5 -5
  42. package/node_modules/pi-lens/dist/{chunk-HWBZIGMJ.js → chunk-BHWHXMQ2.js} +8 -8
  43. package/node_modules/pi-lens/dist/{chunk-IXEBJSUE.js → chunk-BJF25SUG.js} +10 -10
  44. package/node_modules/pi-lens/dist/{chunk-GVXA6CCE.js → chunk-BNKLYOOO.js} +1 -1
  45. package/node_modules/pi-lens/dist/{chunk-T4ERT73Y.js → chunk-CBD2B5CP.js} +20 -20
  46. package/node_modules/pi-lens/dist/{chunk-O5WILGMI.js → chunk-CFYISHUW.js} +5 -5
  47. package/node_modules/pi-lens/dist/{chunk-EOKRQ3SA.js → chunk-CMU4RMJB.js} +1 -1
  48. package/node_modules/pi-lens/dist/{chunk-YSNFMJKN.js → chunk-CULQYFLU.js} +2 -2
  49. package/node_modules/pi-lens/dist/{chunk-ORTMY4Q4.js → chunk-D65GOCJB.js} +21 -14
  50. package/node_modules/pi-lens/dist/{chunk-NTUJEGDZ.js → chunk-D6YF5HKX.js} +2 -2
  51. package/node_modules/pi-lens/dist/{chunk-BRJKOBZP.js → chunk-DMS52BEP.js} +17 -6
  52. package/node_modules/pi-lens/dist/{chunk-NL5GLMFI.js → chunk-ELVWJYRV.js} +11 -11
  53. package/node_modules/pi-lens/dist/{chunk-4W2PLC4J.js → chunk-EUT3B22Y.js} +12 -12
  54. package/node_modules/pi-lens/dist/{chunk-GUOGVTCQ.js → chunk-F5VLZHUW.js} +1 -1
  55. package/node_modules/pi-lens/dist/{chunk-I7SPGOWI.js → chunk-FGALODG3.js} +1 -1
  56. package/node_modules/pi-lens/dist/{chunk-Q5U6FMDI.js → chunk-G3RLJYA2.js} +12 -6
  57. package/node_modules/pi-lens/dist/{chunk-FJNKANOS.js → chunk-GAYGGICG.js} +9 -9
  58. package/node_modules/pi-lens/dist/{chunk-HVUZXSWK.js → chunk-H2W2AXD3.js} +38 -40
  59. package/node_modules/pi-lens/dist/{chunk-VHQLPIRJ.js → chunk-H5EV3VMF.js} +2 -2
  60. package/node_modules/pi-lens/dist/{chunk-27BBHSZC.js → chunk-HREZQCT3.js} +3 -3
  61. package/node_modules/pi-lens/dist/{chunk-TT22N74J.js → chunk-HSIRMK2D.js} +12 -12
  62. package/node_modules/pi-lens/dist/{chunk-3I5QFT3N.js → chunk-IMSQR4WO.js} +6 -3
  63. package/node_modules/pi-lens/dist/{chunk-B3I2UUT4.js → chunk-IQZXOZ7S.js} +156 -32
  64. package/node_modules/pi-lens/dist/{chunk-RIISMHKN.js → chunk-IR6XFA5P.js} +14 -13
  65. package/node_modules/pi-lens/dist/{chunk-LNAKEO63.js → chunk-IUKPRZER.js} +4 -4
  66. package/node_modules/pi-lens/dist/{chunk-RUOG5D2C.js → chunk-IUR76K6A.js} +5 -5
  67. package/node_modules/pi-lens/dist/{chunk-TO6WL3GM.js → chunk-J3FZR3YY.js} +12 -2
  68. package/node_modules/pi-lens/dist/{chunk-Y4T27COV.js → chunk-J6DFZDFA.js} +4 -4
  69. package/node_modules/pi-lens/dist/{chunk-E4MAEDPM.js → chunk-J7WJZ6W7.js} +11 -11
  70. package/node_modules/pi-lens/dist/{chunk-52H5B5TC.js → chunk-JONGANYH.js} +30 -30
  71. package/node_modules/pi-lens/dist/{chunk-TGPXLY2J.js → chunk-KJCWXUUS.js} +35 -1
  72. package/node_modules/pi-lens/dist/{chunk-I3R7GKDR.js → chunk-KJN4IOEJ.js} +1 -1
  73. package/node_modules/pi-lens/dist/{chunk-RPD4ZSB7.js → chunk-KMGPUKFD.js} +12 -12
  74. package/node_modules/pi-lens/dist/{chunk-OQGFCZJ4.js → chunk-LD7WFTRX.js} +13 -13
  75. package/node_modules/pi-lens/dist/{chunk-DIULIWKU.js → chunk-LNOMA3MP.js} +3 -3
  76. package/node_modules/pi-lens/dist/{chunk-HHYAELLJ.js → chunk-MGIWSROG.js} +5 -5
  77. package/node_modules/pi-lens/dist/{chunk-YLF3PPT5.js → chunk-MQA2YBAH.js} +3 -3
  78. package/node_modules/pi-lens/dist/{chunk-TVN5N6GY.js → chunk-MTDRLSI7.js} +690 -186
  79. package/node_modules/pi-lens/dist/{chunk-DQ2NZ7C4.js → chunk-N2IRDBZI.js} +44 -6
  80. package/node_modules/pi-lens/dist/{chunk-AHDW3GPE.js → chunk-N77WFUL7.js} +22 -22
  81. package/node_modules/pi-lens/dist/{chunk-NXPS2L6U.js → chunk-N7YNJE5R.js} +7 -7
  82. package/node_modules/pi-lens/dist/{chunk-7FBF7NPR.js → chunk-NFXP47RV.js} +13 -12
  83. package/node_modules/pi-lens/dist/{chunk-UY752QSN.js → chunk-NJF2X5XF.js} +17 -17
  84. package/node_modules/pi-lens/dist/{chunk-WONERJTP.js → chunk-O7HZX7CA.js} +1 -1
  85. package/node_modules/pi-lens/dist/{chunk-AS44CFQ4.js → chunk-OC7LYAU5.js} +7 -7
  86. package/node_modules/pi-lens/dist/{chunk-4RERDEXR.js → chunk-OEX24ECI.js} +30 -30
  87. package/node_modules/pi-lens/dist/{chunk-6VCD4VKZ.js → chunk-OYOB3ZFG.js} +2 -2
  88. package/node_modules/pi-lens/dist/{chunk-IIXOAGHR.js → chunk-OYTMZXRF.js} +18 -15
  89. package/node_modules/pi-lens/dist/{chunk-ARFCXG7S.js → chunk-OZJINN4O.js} +2 -2
  90. package/node_modules/pi-lens/dist/{chunk-34U7PLGE.js → chunk-PCHDGUKT.js} +11 -11
  91. package/node_modules/pi-lens/dist/{chunk-VCSRSYLF.js → chunk-RJFED73B.js} +34 -36
  92. package/node_modules/pi-lens/dist/chunk-RTQNRM5X.js +27 -0
  93. package/node_modules/pi-lens/dist/{chunk-PAK6IDME.js → chunk-S6AMWKPC.js} +2 -2
  94. package/node_modules/pi-lens/dist/{chunk-U3VGR4VU.js → chunk-T4QZ6FEH.js} +4 -4
  95. package/node_modules/pi-lens/dist/{chunk-VN2AXLEX.js → chunk-T54VJRAD.js} +54 -12
  96. package/node_modules/pi-lens/dist/{chunk-ZMOL6RQC.js → chunk-TA5L5KWQ.js} +2 -2
  97. package/node_modules/pi-lens/dist/{chunk-JOLITGCC.js → chunk-TQFBZVCG.js} +1 -1
  98. package/node_modules/pi-lens/dist/{chunk-VDBPVIKD.js → chunk-U52SAGRM.js} +1 -1
  99. package/node_modules/pi-lens/dist/{chunk-LW6XKDZQ.js → chunk-UEAHAMEI.js} +284 -35
  100. package/node_modules/pi-lens/dist/{chunk-NMABWBZN.js → chunk-UGSMCQ4D.js} +1 -1
  101. package/node_modules/pi-lens/dist/{chunk-6QIUX4EP.js → chunk-USHG4DLH.js} +7 -7
  102. package/node_modules/pi-lens/dist/{chunk-LSMJ6KBE.js → chunk-V5MEBST3.js} +16 -16
  103. package/node_modules/pi-lens/dist/chunk-VGEVL5EQ.js +29 -0
  104. package/node_modules/pi-lens/dist/{chunk-47D2BO4S.js → chunk-VPWKF3GN.js} +10 -10
  105. package/node_modules/pi-lens/dist/{chunk-UK3CMEAL.js → chunk-VSMJK3ZJ.js} +1 -1
  106. package/node_modules/pi-lens/dist/{chunk-22AVIGXS.js → chunk-VYKKMYVT.js} +7 -7
  107. package/node_modules/pi-lens/dist/{chunk-OS32RNR2.js → chunk-VZHJS6DR.js} +15 -15
  108. package/node_modules/pi-lens/dist/{chunk-E2WFBRHM.js → chunk-WATC3IQR.js} +3 -3
  109. package/node_modules/pi-lens/dist/chunk-WPE5FPGR.js +54 -0
  110. package/node_modules/pi-lens/dist/{chunk-V5PXFSZK.js → chunk-WSEWKCXU.js} +4 -4
  111. package/node_modules/pi-lens/dist/{chunk-NKOUFPQF.js → chunk-WW5BLB74.js} +2 -2
  112. package/node_modules/pi-lens/dist/{chunk-PWFHBTSF.js → chunk-XGUL4SLQ.js} +2 -2
  113. package/node_modules/pi-lens/dist/{chunk-F3P7VQ7H.js → chunk-XHSCVSOL.js} +3 -3
  114. package/node_modules/pi-lens/dist/{chunk-DFVMIKMQ.js → chunk-YLN4K6WD.js} +45 -9
  115. package/node_modules/pi-lens/dist/{chunk-VNMT7C64.js → chunk-Z6BB4JLQ.js} +2 -2
  116. package/node_modules/pi-lens/dist/{chunk-NTHH2J74.js → chunk-Z7QQA2KT.js} +12 -12
  117. package/node_modules/pi-lens/dist/{chunk-F3AU2TMM.js → chunk-ZETYB3XG.js} +15 -15
  118. package/node_modules/pi-lens/dist/{chunk-XECLWQZN.js → chunk-ZMOMPX2Z.js} +12 -10
  119. package/node_modules/pi-lens/dist/{chunk-C2AUYXQH.js → chunk-ZOEYVXSV.js} +4 -4
  120. package/node_modules/pi-lens/dist/{chunk-TLGFBM3F.js → chunk-ZZUFZUQZ.js} +68 -64
  121. package/node_modules/pi-lens/dist/index.js +30113 -28398
  122. package/node_modules/pi-lens/dist/mcp/analyze-cli.js +8 -8
  123. package/node_modules/pi-lens/dist/mcp/cli.js +37 -37
  124. package/node_modules/pi-lens/dist/mcp/server.js +257 -158
  125. package/node_modules/pi-lens/dist/mcp/worker.js +55 -55
  126. package/node_modules/pi-lens/dist/probes/installer.js +19 -19
  127. package/node_modules/pi-lens/docs/ast-grep_rules_catalog.md +2 -2
  128. package/node_modules/pi-lens/docs/configuration.md +9 -2
  129. package/node_modules/pi-lens/docs/custom-rules.md +25 -2
  130. package/node_modules/pi-lens/docs/environment-variables.md +34 -6
  131. package/node_modules/pi-lens/docs/features.md +37 -1
  132. package/node_modules/pi-lens/docs/globalconfig.md +1 -1
  133. package/node_modules/pi-lens/docs/lsp-capability-matrix.md +2 -1
  134. package/node_modules/pi-lens/docs/lsp-idle-eviction.md +1 -1
  135. package/node_modules/pi-lens/docs/pi-lens-fixer.md +9 -5
  136. package/node_modules/pi-lens/docs/pi-lens-merge-policy.md +43 -1
  137. package/node_modules/pi-lens/docs/pi-lens-monitor.md +3 -1
  138. package/node_modules/pi-lens/docs/pi-lens-reviewer.md +4 -3
  139. package/node_modules/pi-lens/docs/schema/pi-lens-config-v1.json +530 -0
  140. package/node_modules/pi-lens/docs/servercapabilities.md +4 -1
  141. package/node_modules/pi-lens/docs/word-index.md +6 -0
  142. package/node_modules/pi-lens/package.json +1 -1
  143. package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/no-identity-operator-on-literals-test.yml +12 -2
  144. package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/throw-new-error-js-test.yml +2 -0
  145. package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/throw-new-error-test.yml +2 -0
  146. package/node_modules/pi-lens/rules/ast-grep-rules/rules/no-identity-operator-on-literals.yml +20 -12
  147. package/node_modules/pi-lens/rules/ast-grep-rules/rules/throw-new-error-js.yml +2 -2
  148. package/node_modules/pi-lens/rules/ast-grep-rules/rules/throw-new-error.yml +2 -2
  149. package/node_modules/pi-web-access/CHANGELOG.md +28 -0
  150. package/node_modules/pi-web-access/README.md +10 -6
  151. package/node_modules/pi-web-access/ceramic.ts +219 -0
  152. package/node_modules/pi-web-access/curator-page.ts +3 -1
  153. package/node_modules/pi-web-access/curator-server.ts +1 -0
  154. package/node_modules/pi-web-access/dist/index.js +846 -588
  155. package/node_modules/pi-web-access/dist/mcp-cli.js +725 -516
  156. package/node_modules/pi-web-access/gemini-search.ts +8 -4
  157. package/node_modules/pi-web-access/github-extract.ts +34 -2
  158. package/node_modules/pi-web-access/index.ts +72 -30
  159. package/node_modules/pi-web-access/openai-search.ts +3 -3
  160. package/node_modules/pi-web-access/package.json +2 -2
  161. package/node_modules/pi-web-access/page-query.ts +6 -9
  162. package/node_modules/pi-web-access/parallel-mcp.ts +2 -0
  163. package/node_modules/pi-web-access/query-rewrite.ts +2 -2
  164. package/node_modules/pi-web-access/storage.ts +49 -0
  165. package/node_modules/pi-web-access/summary-review.ts +7 -6
  166. package/node_modules/pi-web-access/utils.ts +21 -6
  167. package/node_modules/pi-web-access/web-tool-core.ts +1 -0
  168. package/package.json +7 -12
  169. package/node_modules/pi-lens/dist/chunk-54B42YRX.js +0 -27
  170. package/node_modules/pi-lens/dist/chunk-CGGAIP7J.js +0 -29
  171. package/node_modules/pi-lens/dist/chunk-HMFXILPV.js +0 -83
  172. package/node_modules/pi-lens/dist/chunk-T6D4Q4AQ.js +0 -54
  173. package/node_modules/pi-web-access/opencode-session-headers.ts +0 -24
  174. package/node_modules/remote-pi/LICENSE +0 -21
  175. package/node_modules/remote-pi/README.md +0 -675
  176. package/node_modules/remote-pi/dist/actions/handlers.d.ts +0 -122
  177. package/node_modules/remote-pi/dist/actions/handlers.js +0 -160
  178. package/node_modules/remote-pi/dist/actions/handlers.js.map +0 -1
  179. package/node_modules/remote-pi/dist/actions/registry.d.ts +0 -39
  180. package/node_modules/remote-pi/dist/actions/registry.js +0 -58
  181. package/node_modules/remote-pi/dist/actions/registry.js.map +0 -1
  182. package/node_modules/remote-pi/dist/bin/supervisord.d.ts +0 -2
  183. package/node_modules/remote-pi/dist/bin/supervisord.js +0 -86
  184. package/node_modules/remote-pi/dist/bin/supervisord.js.map +0 -1
  185. package/node_modules/remote-pi/dist/commands/builtin_mirror.d.ts +0 -58
  186. package/node_modules/remote-pi/dist/commands/builtin_mirror.js +0 -71
  187. package/node_modules/remote-pi/dist/commands/builtin_mirror.js.map +0 -1
  188. package/node_modules/remote-pi/dist/commands/list_commands.d.ts +0 -60
  189. package/node_modules/remote-pi/dist/commands/list_commands.js +0 -73
  190. package/node_modules/remote-pi/dist/commands/list_commands.js.map +0 -1
  191. package/node_modules/remote-pi/dist/config.d.ts +0 -62
  192. package/node_modules/remote-pi/dist/config.js +0 -115
  193. package/node_modules/remote-pi/dist/config.js.map +0 -1
  194. package/node_modules/remote-pi/dist/daemon/client.d.ts +0 -20
  195. package/node_modules/remote-pi/dist/daemon/client.js +0 -131
  196. package/node_modules/remote-pi/dist/daemon/client.js.map +0 -1
  197. package/node_modules/remote-pi/dist/daemon/control_protocol.d.ts +0 -176
  198. package/node_modules/remote-pi/dist/daemon/control_protocol.js +0 -63
  199. package/node_modules/remote-pi/dist/daemon/control_protocol.js.map +0 -1
  200. package/node_modules/remote-pi/dist/daemon/cron_log.d.ts +0 -45
  201. package/node_modules/remote-pi/dist/daemon/cron_log.js +0 -72
  202. package/node_modules/remote-pi/dist/daemon/cron_log.js.map +0 -1
  203. package/node_modules/remote-pi/dist/daemon/cron_registry.d.ts +0 -80
  204. package/node_modules/remote-pi/dist/daemon/cron_registry.js +0 -194
  205. package/node_modules/remote-pi/dist/daemon/cron_registry.js.map +0 -1
  206. package/node_modules/remote-pi/dist/daemon/id.d.ts +0 -24
  207. package/node_modules/remote-pi/dist/daemon/id.js +0 -36
  208. package/node_modules/remote-pi/dist/daemon/id.js.map +0 -1
  209. package/node_modules/remote-pi/dist/daemon/install.d.ts +0 -170
  210. package/node_modules/remote-pi/dist/daemon/install.js +0 -547
  211. package/node_modules/remote-pi/dist/daemon/install.js.map +0 -1
  212. package/node_modules/remote-pi/dist/daemon/registry.d.ts +0 -63
  213. package/node_modules/remote-pi/dist/daemon/registry.js +0 -153
  214. package/node_modules/remote-pi/dist/daemon/registry.js.map +0 -1
  215. package/node_modules/remote-pi/dist/daemon/rpc_child.d.ts +0 -194
  216. package/node_modules/remote-pi/dist/daemon/rpc_child.js +0 -389
  217. package/node_modules/remote-pi/dist/daemon/rpc_child.js.map +0 -1
  218. package/node_modules/remote-pi/dist/daemon/supervisor.d.ts +0 -93
  219. package/node_modules/remote-pi/dist/daemon/supervisor.js +0 -596
  220. package/node_modules/remote-pi/dist/daemon/supervisor.js.map +0 -1
  221. package/node_modules/remote-pi/dist/extension_ui_bridge.d.ts +0 -26
  222. package/node_modules/remote-pi/dist/extension_ui_bridge.js +0 -341
  223. package/node_modules/remote-pi/dist/extension_ui_bridge.js.map +0 -1
  224. package/node_modules/remote-pi/dist/index.d.ts +0 -213
  225. package/node_modules/remote-pi/dist/index.js +0 -4996
  226. package/node_modules/remote-pi/dist/index.js.map +0 -1
  227. package/node_modules/remote-pi/dist/mcp/mesh_result.d.ts +0 -10
  228. package/node_modules/remote-pi/dist/mcp/mesh_result.js +0 -42
  229. package/node_modules/remote-pi/dist/mcp/mesh_result.js.map +0 -1
  230. package/node_modules/remote-pi/dist/mcp/mesh_server.d.ts +0 -16
  231. package/node_modules/remote-pi/dist/mcp/mesh_server.js +0 -327
  232. package/node_modules/remote-pi/dist/mcp/mesh_server.js.map +0 -1
  233. package/node_modules/remote-pi/dist/mesh/canonical.d.ts +0 -30
  234. package/node_modules/remote-pi/dist/mesh/canonical.js +0 -61
  235. package/node_modules/remote-pi/dist/mesh/canonical.js.map +0 -1
  236. package/node_modules/remote-pi/dist/mesh/client.d.ts +0 -18
  237. package/node_modules/remote-pi/dist/mesh/client.js +0 -125
  238. package/node_modules/remote-pi/dist/mesh/client.js.map +0 -1
  239. package/node_modules/remote-pi/dist/mesh/encoding.d.ts +0 -38
  240. package/node_modules/remote-pi/dist/mesh/encoding.js +0 -216
  241. package/node_modules/remote-pi/dist/mesh/encoding.js.map +0 -1
  242. package/node_modules/remote-pi/dist/mesh/self_revoke.d.ts +0 -73
  243. package/node_modules/remote-pi/dist/mesh/self_revoke.js +0 -401
  244. package/node_modules/remote-pi/dist/mesh/self_revoke.js.map +0 -1
  245. package/node_modules/remote-pi/dist/mesh/siblings.d.ts +0 -49
  246. package/node_modules/remote-pi/dist/mesh/siblings.js +0 -159
  247. package/node_modules/remote-pi/dist/mesh/siblings.js.map +0 -1
  248. package/node_modules/remote-pi/dist/mesh/types.d.ts +0 -34
  249. package/node_modules/remote-pi/dist/mesh/types.js +0 -11
  250. package/node_modules/remote-pi/dist/mesh/types.js.map +0 -1
  251. package/node_modules/remote-pi/dist/mesh/verify.d.ts +0 -17
  252. package/node_modules/remote-pi/dist/mesh/verify.js +0 -86
  253. package/node_modules/remote-pi/dist/mesh/verify.js.map +0 -1
  254. package/node_modules/remote-pi/dist/pairing/crypto.d.ts +0 -8
  255. package/node_modules/remote-pi/dist/pairing/crypto.js +0 -22
  256. package/node_modules/remote-pi/dist/pairing/crypto.js.map +0 -1
  257. package/node_modules/remote-pi/dist/pairing/handshake.d.ts +0 -28
  258. package/node_modules/remote-pi/dist/pairing/handshake.js +0 -113
  259. package/node_modules/remote-pi/dist/pairing/handshake.js.map +0 -1
  260. package/node_modules/remote-pi/dist/pairing/noise-sha256.d.ts +0 -16
  261. package/node_modules/remote-pi/dist/pairing/noise-sha256.js +0 -103
  262. package/node_modules/remote-pi/dist/pairing/noise-sha256.js.map +0 -1
  263. package/node_modules/remote-pi/dist/pairing/qr.d.ts +0 -59
  264. package/node_modules/remote-pi/dist/pairing/qr.js +0 -125
  265. package/node_modules/remote-pi/dist/pairing/qr.js.map +0 -1
  266. package/node_modules/remote-pi/dist/pairing/storage.d.ts +0 -120
  267. package/node_modules/remote-pi/dist/pairing/storage.js +0 -604
  268. package/node_modules/remote-pi/dist/pairing/storage.js.map +0 -1
  269. package/node_modules/remote-pi/dist/protocol/codec.d.ts +0 -7
  270. package/node_modules/remote-pi/dist/protocol/codec.js +0 -49
  271. package/node_modules/remote-pi/dist/protocol/codec.js.map +0 -1
  272. package/node_modules/remote-pi/dist/protocol/types.d.ts +0 -393
  273. package/node_modules/remote-pi/dist/protocol/types.js +0 -2
  274. package/node_modules/remote-pi/dist/protocol/types.js.map +0 -1
  275. package/node_modules/remote-pi/dist/rooms.d.ts +0 -29
  276. package/node_modules/remote-pi/dist/rooms.js +0 -57
  277. package/node_modules/remote-pi/dist/rooms.js.map +0 -1
  278. package/node_modules/remote-pi/dist/session/address.d.ts +0 -49
  279. package/node_modules/remote-pi/dist/session/address.js +0 -58
  280. package/node_modules/remote-pi/dist/session/address.js.map +0 -1
  281. package/node_modules/remote-pi/dist/session/agent_bridge.d.ts +0 -55
  282. package/node_modules/remote-pi/dist/session/agent_bridge.js +0 -146
  283. package/node_modules/remote-pi/dist/session/agent_bridge.js.map +0 -1
  284. package/node_modules/remote-pi/dist/session/bridge.d.ts +0 -37
  285. package/node_modules/remote-pi/dist/session/bridge.js +0 -130
  286. package/node_modules/remote-pi/dist/session/bridge.js.map +0 -1
  287. package/node_modules/remote-pi/dist/session/broker.d.ts +0 -189
  288. package/node_modules/remote-pi/dist/session/broker.js +0 -507
  289. package/node_modules/remote-pi/dist/session/broker.js.map +0 -1
  290. package/node_modules/remote-pi/dist/session/broker_remote.d.ts +0 -74
  291. package/node_modules/remote-pi/dist/session/broker_remote.js +0 -583
  292. package/node_modules/remote-pi/dist/session/broker_remote.js.map +0 -1
  293. package/node_modules/remote-pi/dist/session/cwd_lock.d.ts +0 -33
  294. package/node_modules/remote-pi/dist/session/cwd_lock.js +0 -126
  295. package/node_modules/remote-pi/dist/session/cwd_lock.js.map +0 -1
  296. package/node_modules/remote-pi/dist/session/envelope.d.ts +0 -33
  297. package/node_modules/remote-pi/dist/session/envelope.js +0 -117
  298. package/node_modules/remote-pi/dist/session/envelope.js.map +0 -1
  299. package/node_modules/remote-pi/dist/session/global_config.d.ts +0 -33
  300. package/node_modules/remote-pi/dist/session/global_config.js +0 -73
  301. package/node_modules/remote-pi/dist/session/global_config.js.map +0 -1
  302. package/node_modules/remote-pi/dist/session/ipc.d.ts +0 -27
  303. package/node_modules/remote-pi/dist/session/ipc.js +0 -22
  304. package/node_modules/remote-pi/dist/session/ipc.js.map +0 -1
  305. package/node_modules/remote-pi/dist/session/leader_election.d.ts +0 -32
  306. package/node_modules/remote-pi/dist/session/leader_election.js +0 -106
  307. package/node_modules/remote-pi/dist/session/leader_election.js.map +0 -1
  308. package/node_modules/remote-pi/dist/session/local_config.d.ts +0 -55
  309. package/node_modules/remote-pi/dist/session/local_config.js +0 -157
  310. package/node_modules/remote-pi/dist/session/local_config.js.map +0 -1
  311. package/node_modules/remote-pi/dist/session/mesh_message.d.ts +0 -20
  312. package/node_modules/remote-pi/dist/session/mesh_message.js +0 -28
  313. package/node_modules/remote-pi/dist/session/mesh_message.js.map +0 -1
  314. package/node_modules/remote-pi/dist/session/mesh_node.d.ts +0 -116
  315. package/node_modules/remote-pi/dist/session/mesh_node.js +0 -573
  316. package/node_modules/remote-pi/dist/session/mesh_node.js.map +0 -1
  317. package/node_modules/remote-pi/dist/session/peer.d.ts +0 -139
  318. package/node_modules/remote-pi/dist/session/peer.js +0 -451
  319. package/node_modules/remote-pi/dist/session/peer.js.map +0 -1
  320. package/node_modules/remote-pi/dist/session/peer_inventory.d.ts +0 -13
  321. package/node_modules/remote-pi/dist/session/peer_inventory.js +0 -48
  322. package/node_modules/remote-pi/dist/session/peer_inventory.js.map +0 -1
  323. package/node_modules/remote-pi/dist/session/peer_limits.d.ts +0 -9
  324. package/node_modules/remote-pi/dist/session/peer_limits.js +0 -21
  325. package/node_modules/remote-pi/dist/session/peer_limits.js.map +0 -1
  326. package/node_modules/remote-pi/dist/session/setup_wizard.d.ts +0 -39
  327. package/node_modules/remote-pi/dist/session/setup_wizard.js +0 -63
  328. package/node_modules/remote-pi/dist/session/setup_wizard.js.map +0 -1
  329. package/node_modules/remote-pi/dist/session/tool_gate.d.ts +0 -5
  330. package/node_modules/remote-pi/dist/session/tool_gate.js +0 -11
  331. package/node_modules/remote-pi/dist/session/tool_gate.js.map +0 -1
  332. package/node_modules/remote-pi/dist/session/tools.d.ts +0 -24
  333. package/node_modules/remote-pi/dist/session/tools.js +0 -252
  334. package/node_modules/remote-pi/dist/session/tools.js.map +0 -1
  335. package/node_modules/remote-pi/dist/session/wizard.d.ts +0 -13
  336. package/node_modules/remote-pi/dist/session/wizard.js +0 -20
  337. package/node_modules/remote-pi/dist/session/wizard.js.map +0 -1
  338. package/node_modules/remote-pi/dist/settings.d.ts +0 -15
  339. package/node_modules/remote-pi/dist/settings.js +0 -52
  340. package/node_modules/remote-pi/dist/settings.js.map +0 -1
  341. package/node_modules/remote-pi/dist/transport/peer_channel.d.ts +0 -37
  342. package/node_modules/remote-pi/dist/transport/peer_channel.js +0 -98
  343. package/node_modules/remote-pi/dist/transport/peer_channel.js.map +0 -1
  344. package/node_modules/remote-pi/dist/transport/pi_forward_client.d.ts +0 -29
  345. package/node_modules/remote-pi/dist/transport/pi_forward_client.js +0 -62
  346. package/node_modules/remote-pi/dist/transport/pi_forward_client.js.map +0 -1
  347. package/node_modules/remote-pi/dist/transport/relay_client.d.ts +0 -91
  348. package/node_modules/remote-pi/dist/transport/relay_client.js +0 -206
  349. package/node_modules/remote-pi/dist/transport/relay_client.js.map +0 -1
  350. package/node_modules/remote-pi/dist/ui/footer.d.ts +0 -32
  351. package/node_modules/remote-pi/dist/ui/footer.js +0 -34
  352. package/node_modules/remote-pi/dist/ui/footer.js.map +0 -1
  353. package/node_modules/remote-pi/docs/daemon.md +0 -289
  354. package/node_modules/remote-pi/package.json +0 -92
  355. package/node_modules/remote-pi/service-templates/launchd.plist.template +0 -35
  356. package/node_modules/remote-pi/service-templates/systemd.service.template +0 -19
  357. package/node_modules/remote-pi/service-templates/task-launcher.vbs.template +0 -10
  358. package/node_modules/remote-pi/service-templates/task-scheduler.xml.template +0 -38
  359. package/node_modules/remote-pi/skills/agent-network/SKILL.md +0 -310
@@ -7,33 +7,32 @@ import {
7
7
  deadCodeIssues,
8
8
  formatDeadCodeDelta,
9
9
  stableFindingKey
10
- } from "../chunk-TT22N74J.js";
10
+ } from "../chunk-HSIRMK2D.js";
11
11
  import {
12
12
  clearFormatterCache
13
- } from "../chunk-F3AU2TMM.js";
13
+ } from "../chunk-ZETYB3XG.js";
14
14
  import {
15
15
  findNearestProjectRoot,
16
- getStartupScanMaxEntries,
17
16
  isStartupScanVerdictFresh,
18
17
  resolveStartupScanContext
19
- } from "../chunk-5RXBNSW2.js";
18
+ } from "../chunk-6P54TMWL.js";
20
19
  import {
21
20
  loadCallGraph
22
- } from "../chunk-NKOUFPQF.js";
21
+ } from "../chunk-WW5BLB74.js";
23
22
  import {
24
23
  RUNNERS,
25
24
  formatRunDurationMs,
26
25
  isExcludedTestTarget,
27
26
  isRunnerErrorResult
28
- } from "../chunk-IVP5KAB7.js";
27
+ } from "../chunk-3P4PF2BX.js";
29
28
  import {
30
29
  GovulncheckClient
31
- } from "../chunk-NXPS2L6U.js";
30
+ } from "../chunk-N7YNJE5R.js";
32
31
  import {
33
32
  GitleaksClient,
34
33
  classifyAndFilterFindings
35
- } from "../chunk-BRJKOBZP.js";
36
- import "../chunk-6P62QVEA.js";
34
+ } from "../chunk-DMS52BEP.js";
35
+ import "../chunk-2UMYMRI3.js";
37
36
  import {
38
37
  isHardFailureSummary
39
38
  } from "../chunk-7U2IDNXN.js";
@@ -54,7 +53,7 @@ import {
54
53
  peekTurnEndFindings,
55
54
  snapshotAdvisoryProvenance,
56
55
  validateAdvisoryProvenance
57
- } from "../chunk-Y4T27COV.js";
56
+ } from "../chunk-J6DFZDFA.js";
58
57
  import {
59
58
  CacheManager,
60
59
  DELTA_UNUSED_PROMOTION_NOTE,
@@ -99,56 +98,56 @@ import {
99
98
  resetPendingRunnerFindings,
100
99
  resetPsScriptAnalyzerAvailability,
101
100
  runProviders
102
- } from "../chunk-TLGFBM3F.js";
101
+ } from "../chunk-ZZUFZUQZ.js";
103
102
  import {
104
103
  resetLazyInstallAttempts
105
- } from "../chunk-C2AUYXQH.js";
104
+ } from "../chunk-ZOEYVXSV.js";
106
105
  import {
107
106
  isTestRoleCollateral
108
- } from "../chunk-I3R7GKDR.js";
107
+ } from "../chunk-KJN4IOEJ.js";
109
108
  import "../chunk-FC4RP4I2.js";
110
109
  import {
111
110
  TrivyClient
112
- } from "../chunk-DFVMIKMQ.js";
113
- import "../chunk-TO6WL3GM.js";
114
- import "../chunk-7F72PXY2.js";
111
+ } from "../chunk-YLN4K6WD.js";
112
+ import "../chunk-J3FZR3YY.js";
113
+ import "../chunk-5JHXUETW.js";
115
114
  import {
116
115
  resetRustAvailability
117
- } from "../chunk-RPD5K5NC.js";
116
+ } from "../chunk-3MRXIJ6I.js";
118
117
  import {
119
118
  findingsResult,
120
119
  hasUsableResult
121
- } from "../chunk-ZMOL6RQC.js";
122
- import "../chunk-I7SPGOWI.js";
123
- import "../chunk-AS44CFQ4.js";
120
+ } from "../chunk-TA5L5KWQ.js";
121
+ import "../chunk-FGALODG3.js";
122
+ import "../chunk-OC7LYAU5.js";
124
123
  import {
125
124
  getSgCommand,
126
125
  resetDispatchAvailabilityState,
127
126
  resolveManagedToolClient
128
- } from "../chunk-7FBF7NPR.js";
129
- import "../chunk-HHYAELLJ.js";
130
- import "../chunk-V5PXFSZK.js";
131
- import "../chunk-YLF3PPT5.js";
132
- import "../chunk-JOLITGCC.js";
133
- import "../chunk-E2WFBRHM.js";
127
+ } from "../chunk-NFXP47RV.js";
128
+ import "../chunk-MGIWSROG.js";
129
+ import "../chunk-WSEWKCXU.js";
130
+ import "../chunk-MQA2YBAH.js";
131
+ import "../chunk-TQFBZVCG.js";
132
+ import "../chunk-WATC3IQR.js";
134
133
  import {
135
134
  resetGoAvailability
136
- } from "../chunk-6VCD4VKZ.js";
137
- import "../chunk-F3P7VQ7H.js";
135
+ } from "../chunk-OYOB3ZFG.js";
136
+ import "../chunk-XHSCVSOL.js";
138
137
  import {
139
138
  SYMBOL_KIND_NAMES,
140
139
  captureReviewGraphStructuralIr,
141
140
  formatReviewGraphRevisionDriftNote,
142
141
  publishReviewGraphFileIr,
143
142
  reviewGraphIrContentHash
144
- } from "../chunk-LSMJ6KBE.js";
143
+ } from "../chunk-V5MEBST3.js";
145
144
  import {
146
145
  buildSymbolId
147
146
  } from "../chunk-3MED75HT.js";
148
147
  import {
149
148
  resolveGitCheckout,
150
149
  resolveLinkedWorktreeOwner
151
- } from "../chunk-3I5QFT3N.js";
150
+ } from "../chunk-IMSQR4WO.js";
152
151
  import {
153
152
  DEPENDENCY_DRIFT_MAX_DELIVERIES,
154
153
  MAX_LATE_AUX_REARMS,
@@ -244,18 +243,18 @@ import {
244
243
  widgetDiagnosticUri,
245
244
  workspaceEditTextPaths,
246
245
  writeOrderToken
247
- } from "../chunk-TVN5N6GY.js";
246
+ } from "../chunk-MTDRLSI7.js";
248
247
  import {
249
248
  emitBounded,
250
249
  resetBoundedTelemetry
251
- } from "../chunk-ARFCXG7S.js";
250
+ } from "../chunk-OZJINN4O.js";
252
251
  import {
253
252
  hashText,
254
253
  normalizeMessage,
255
254
  primePersistedMutationAttribution,
256
255
  resetMutationAttribution,
257
256
  stableFindingId
258
- } from "../chunk-OAXNDZJ7.js";
257
+ } from "../chunk-3JSEWUWI.js";
259
258
  import {
260
259
  mapWithConcurrency
261
260
  } from "../chunk-XIMYZ3JA.js";
@@ -264,8 +263,10 @@ import {
264
263
  customServerSpecsOf,
265
264
  describeRootFallback,
266
265
  explainServersForFile,
266
+ getAstGrepRuleFingerprint,
267
267
  getServersForFileWithConfig,
268
268
  initLSPConfig,
269
+ isAuxiliary,
269
270
  isSameOrWithin,
270
271
  loadLSPConfig,
271
272
  lspConfigOf,
@@ -275,11 +276,11 @@ import {
275
276
  resetLSPCaseSensitivityState,
276
277
  resolveLspCwdForFile,
277
278
  shouldInitializeSessionRoot
278
- } from "../chunk-B3I2UUT4.js";
279
+ } from "../chunk-IQZXOZ7S.js";
279
280
  import {
280
281
  hasAmbientPythonEnvironment
281
- } from "../chunk-DIULIWKU.js";
282
- import "../chunk-VDBPVIKD.js";
282
+ } from "../chunk-LNOMA3MP.js";
283
+ import "../chunk-U52SAGRM.js";
283
284
  import "../chunk-5W3R6LFT.js";
284
285
  import {
285
286
  EXT_TO_LANG,
@@ -293,26 +294,27 @@ import {
293
294
  queryLoader,
294
295
  reportBundledResourceDirHealth,
295
296
  resolveTreeSitterLanguage
296
- } from "../chunk-LW6XKDZQ.js";
297
+ } from "../chunk-UEAHAMEI.js";
297
298
  import "../chunk-Z54ZSOBZ.js";
298
299
  import {
299
300
  SCAN_LANGUAGE_PRIORITY,
300
301
  extensionsForLanguage,
301
302
  extensionsForLanguageToken,
303
+ getUserRuleRoot,
302
304
  resolveLanguage
303
- } from "../chunk-TGPXLY2J.js";
305
+ } from "../chunk-KJCWXUUS.js";
304
306
  import {
305
307
  dump,
306
308
  resolvePackagePath
307
309
  } from "../chunk-QOZXJ4NA.js";
308
- import "../chunk-V7R425XG.js";
309
- import "../chunk-PAK6IDME.js";
310
+ import "../chunk-6XX5HCLK.js";
311
+ import "../chunk-S6AMWKPC.js";
310
312
  import {
311
313
  HOOK_WALL_BUDGET_MS,
312
314
  bounded,
313
315
  combineAbortSignals,
314
316
  withDeadline
315
- } from "../chunk-GUOGVTCQ.js";
317
+ } from "../chunk-F5VLZHUW.js";
316
318
  import {
317
319
  PROJECT_SNAPSHOT_VERSION,
318
320
  getProjectSnapshotLegacyPath,
@@ -327,17 +329,17 @@ import {
327
329
  readJsonCache,
328
330
  readProjectSnapshotMeta,
329
331
  saveRuntimeProjectSnapshot
330
- } from "../chunk-AJVLWNFN.js";
332
+ } from "../chunk-AXKPQ6ZI.js";
331
333
  import {
332
334
  centralityFromReverseDeps,
333
335
  getWordIndexBuildStatus,
334
336
  logWordIndex,
335
337
  searchWordIndex,
336
338
  triggerBackgroundWordIndexBuild
337
- } from "../chunk-YGVYKNSN.js";
339
+ } from "../chunk-7BX5DWSA.js";
338
340
  import {
339
341
  getProjectDiagnosticsScannerMaxFiles
340
- } from "../chunk-LNAKEO63.js";
342
+ } from "../chunk-IUKPRZER.js";
341
343
  import {
342
344
  PathKeyedMap
343
345
  } from "../chunk-Z3CCVDUB.js";
@@ -350,30 +352,30 @@ import {
350
352
  readTurnEndStatus,
351
353
  resolveRunnerPath,
352
354
  toRunnerDisplayPath
353
- } from "../chunk-PWFHBTSF.js";
355
+ } from "../chunk-XGUL4SLQ.js";
354
356
  import "../chunk-2BEMIWEW.js";
355
357
  import {
356
358
  commitDurableStore,
357
359
  resetResolvedPathCache,
358
360
  resetZizmorTokenAvailability
359
- } from "../chunk-OQGFCZJ4.js";
361
+ } from "../chunk-LD7WFTRX.js";
360
362
  import {
361
363
  resolveToolCwd
362
- } from "../chunk-RUOG5D2C.js";
364
+ } from "../chunk-IUR76K6A.js";
363
365
  import {
364
366
  _resetPackageManagerCache,
365
367
  findGlobalBinary,
366
368
  pmBinary,
367
369
  resolveNodePackageManager,
368
370
  runScriptArgs
369
- } from "../chunk-U3VGR4VU.js";
371
+ } from "../chunk-T4QZ6FEH.js";
370
372
  import {
371
373
  isToolInstallAllowedByTrust,
372
374
  projectTrustDenialReason
373
- } from "../chunk-NTUJEGDZ.js";
375
+ } from "../chunk-D6YF5HKX.js";
374
376
  import {
375
377
  probeToolAsync
376
- } from "../chunk-EOKRQ3SA.js";
378
+ } from "../chunk-CMU4RMJB.js";
377
379
  import {
378
380
  classifyProbeFailure,
379
381
  createAvailabilityLatch,
@@ -381,20 +383,20 @@ import {
381
383
  logAvailabilityDecision,
382
384
  resetInstallRetryLatches,
383
385
  startHostStallSampler
384
- } from "../chunk-WONERJTP.js";
386
+ } from "../chunk-O7HZX7CA.js";
385
387
  import {
386
388
  canRunStartupHeavyScans,
387
389
  detectProjectLanguageProfile,
388
390
  getDefaultStartupTools
389
- } from "../chunk-22AVIGXS.js";
390
- import "../chunk-GVXA6CCE.js";
391
+ } from "../chunk-VYKKMYVT.js";
392
+ import "../chunk-BNKLYOOO.js";
391
393
  import {
392
394
  collectSourceFilesWithBudgetAsync,
393
395
  getSlowFsVerdict,
394
396
  isSlowFs,
395
397
  slowFsDegradationNotice
396
- } from "../chunk-6QIUX4EP.js";
397
- import "../chunk-VHQLPIRJ.js";
398
+ } from "../chunk-USHG4DLH.js";
399
+ import "../chunk-H5EV3VMF.js";
398
400
  import {
399
401
  displayProjectDataPath,
400
402
  drainProjectDataDirMigrations,
@@ -421,7 +423,7 @@ import {
421
423
  sweepDeadEphemeralDataDirs,
422
424
  updateHeartbeat,
423
425
  withGenerationLockSync
424
- } from "../chunk-VN2AXLEX.js";
426
+ } from "../chunk-T54VJRAD.js";
425
427
  import {
426
428
  createSingleFlight
427
429
  } from "../chunk-BW5KFIQC.js";
@@ -431,7 +433,7 @@ import {
431
433
  } from "../chunk-QYF5S6P6.js";
432
434
  import {
433
435
  detectFileKind
434
- } from "../chunk-5ZEJHV35.js";
436
+ } from "../chunk-64LU2OVH.js";
435
437
  import {
436
438
  compareKeys,
437
439
  detectFileRole,
@@ -441,12 +443,12 @@ import {
441
443
  provenanceView,
442
444
  resolvePiLensConfig,
443
445
  summarizeConfigResolution
444
- } from "../chunk-DQ2NZ7C4.js";
446
+ } from "../chunk-N2IRDBZI.js";
445
447
  import {
446
448
  LSP_NAMESPACE_KEY,
447
449
  getPiLensGlobalConfigPath,
448
450
  resetWorkspaceTopology
449
- } from "../chunk-VNMT7C64.js";
451
+ } from "../chunk-Z6BB4JLQ.js";
450
452
  import {
451
453
  DEFAULT_MAX_OUTPUT_BYTES,
452
454
  createBoundedOutputSink,
@@ -467,28 +469,29 @@ import {
467
469
  resolveLensToolEnabled,
468
470
  resolveLensToolName,
469
471
  toolRegistryEntryForMcp
470
- } from "../chunk-N3YQJI6O.js";
472
+ } from "../chunk-7ELY2CSM.js";
471
473
  import {
472
474
  createSubsystemLogger,
473
475
  flushExtensionLog,
474
476
  logExtension
475
- } from "../chunk-O6TQT6RI.js";
477
+ } from "../chunk-34OCDWOS.js";
476
478
  import {
477
479
  claimPhaseOncePerSession,
478
480
  logLatency
479
- } from "../chunk-5THXD6X5.js";
481
+ } from "../chunk-3PNFWVHT.js";
480
482
  import {
481
483
  beginTurnContext,
482
484
  createNdjsonLogger,
483
485
  getGlobalPiLensLogDir,
486
+ getProcessSingleton,
484
487
  isTestMode,
485
488
  runLogCleanup,
486
489
  setTurnContextSession
487
- } from "../chunk-UK3CMEAL.js";
490
+ } from "../chunk-VSMJK3ZJ.js";
488
491
  import "../chunk-LJDODBBZ.js";
489
492
  import {
490
493
  FactStore
491
- } from "../chunk-NMABWBZN.js";
494
+ } from "../chunk-UGSMCQ4D.js";
492
495
  import {
493
496
  BoundedFifoMap,
494
497
  BoundedLruCache
@@ -505,7 +508,7 @@ import {
505
508
  realpathOrResolve,
506
509
  toProjectRelativePath,
507
510
  uriToPath
508
- } from "../chunk-Q5U6FMDI.js";
511
+ } from "../chunk-G3RLJYA2.js";
509
512
  import "../chunk-NXL4FFQQ.js";
510
513
 
511
514
  // dist/mcp/server.js
@@ -821,37 +824,59 @@ function checkAstGrepRulesHealth(ruleDir) {
821
824
  var AstGrepRuleManager = class {
822
825
  ruleDir;
823
826
  log;
827
+ fingerprint;
824
828
  ruleDescriptions = null;
825
- constructor(ruleDir, log) {
829
+ ruleFingerprint = null;
830
+ constructor(ruleDir, log, fingerprint = () => getAstGrepRuleFingerprint()) {
826
831
  this.ruleDir = ruleDir;
827
832
  this.log = log;
833
+ this.fingerprint = fingerprint;
828
834
  }
829
835
  loadRuleDescriptions() {
830
- if (this.ruleDescriptions !== null)
836
+ const fingerprint = this.fingerprint();
837
+ if (this.ruleDescriptions !== null && this.ruleFingerprint === fingerprint)
831
838
  return this.ruleDescriptions;
832
839
  const descriptions = /* @__PURE__ */ new Map();
833
- const possiblePaths = candidateAstGrepRulesPaths(this.ruleDir);
834
- const rulesPath = possiblePaths.find((p) => fs2.existsSync(p));
840
+ const roots = Array.isArray(this.ruleDir) ? this.ruleDir : [this.ruleDir];
841
+ const possiblePaths = roots.flatMap(candidateAstGrepRulesPaths);
842
+ const rulesPaths = [];
843
+ if (Array.isArray(this.ruleDir)) {
844
+ for (const candidate of possiblePaths) {
845
+ if (fs2.existsSync(candidate))
846
+ rulesPaths.push(candidate);
847
+ }
848
+ } else {
849
+ for (const candidate of possiblePaths) {
850
+ if (!fs2.existsSync(candidate))
851
+ continue;
852
+ rulesPaths.push(candidate);
853
+ break;
854
+ }
855
+ }
856
+ const rulesPath = rulesPaths[0];
835
857
  if (!rulesPath) {
836
858
  this.log(`Rule descriptions: no rules directory found in ${possiblePaths.join(", ")}`);
837
859
  this.ruleDescriptions = descriptions;
860
+ this.ruleFingerprint = fingerprint;
838
861
  return descriptions;
839
862
  }
840
863
  try {
841
- const files = fs2.readdirSync(rulesPath).filter((f) => f.endsWith(".yml"));
842
- this.log(`Loaded ${files.length} rule descriptions from ${rulesPath}`);
843
- for (const file of files) {
844
- const filePath = path2.join(rulesPath, file);
845
- const content = fs2.readFileSync(filePath, "utf-8");
846
- const rule = this.parseRuleYaml(content);
847
- if (rule) {
848
- descriptions.set(rule.id, rule);
864
+ for (const resolvedPath of rulesPaths) {
865
+ const files = fs2.readdirSync(resolvedPath).filter((f) => f.endsWith(".yml"));
866
+ this.log(`Loaded ${files.length} rule descriptions from ${resolvedPath}`);
867
+ for (const file of files) {
868
+ const filePath = path2.join(resolvedPath, file);
869
+ const content = fs2.readFileSync(filePath, "utf-8");
870
+ const rule = this.parseRuleYaml(content);
871
+ if (rule && !descriptions.has(rule.id))
872
+ descriptions.set(rule.id, rule);
849
873
  }
850
874
  }
851
875
  } catch (err) {
852
876
  this.log(`Failed to load rule descriptions: ${err.message}`);
853
877
  }
854
878
  this.ruleDescriptions = descriptions;
879
+ this.ruleFingerprint = fingerprint;
855
880
  return descriptions;
856
881
  }
857
882
  parseRuleYaml(content) {
@@ -1641,7 +1666,7 @@ function reportAstGrepRulesHealth(bundledRuleDir) {
1641
1666
  });
1642
1667
  reportBundledResourceDirHealth("ast-grep-rules-dir-missing", bundledRuleDir, health, "ast-grep rule descriptions");
1643
1668
  }
1644
- function recordAstGrepApply(matches, lineage) {
1669
+ function recordAstGrepApply(matches, lineage, toolCallId) {
1645
1670
  const bridge = getMutationBridge();
1646
1671
  if (!bridge || matches.length === 0)
1647
1672
  return;
@@ -1657,13 +1682,22 @@ function recordAstGrepApply(matches, lineage) {
1657
1682
  }
1658
1683
  for (const [filePath, editRanges] of rangesByFile) {
1659
1684
  bridge.recordMutation({
1660
- filePath,
1685
+ // ast-grep echoes the spelling passed to its CLI. Resolve that
1686
+ // tool-relative spelling at the producer boundary, then use the
1687
+ // existing canonical path seam before recordability is checked (#4140).
1688
+ filePath: normalizeFilePath(path4.resolve(process.cwd(), filePath)),
1661
1689
  kind: "edit",
1662
1690
  editRanges,
1663
1691
  consumer: "ast_grep_replace",
1692
+ provenance: "observed",
1664
1693
  // #3763: the call's session, so an apply that lands after `/new`
1665
1694
  // writes none of the next session's state.
1666
- ...lineage && { lineage }
1695
+ ...lineage && { lineage },
1696
+ // #4187 R4-1: the apply rewrites every matched file, which an
1697
+ // `ast_grep_replace` call names only when its `paths` are files. The
1698
+ // call's own id lets the guard advance exactly the paths that call
1699
+ // checked, and end the authorship of every other file it rewrote.
1700
+ ...toolCallId !== void 0 && { toolCallId }
1667
1701
  });
1668
1702
  }
1669
1703
  }
@@ -1732,6 +1766,9 @@ function validateInputShape(value, maxChars, label) {
1732
1766
  }
1733
1767
  return void 0;
1734
1768
  }
1769
+ function extractRuleLanguage(ruleYaml) {
1770
+ return /^[^\S\n\r\u2028\u2029]*language:\s*([^\s#]+)/im.exec(ruleYaml)?.[1];
1771
+ }
1735
1772
  function stderrHasError(stderr) {
1736
1773
  return stderr.split(/\r?\n/).some((line) => /^\s*(error|Error):/.test(line));
1737
1774
  }
@@ -1766,7 +1803,7 @@ var AstGrepClient = class {
1766
1803
  this.log = verbose ? createSubsystemLogger("ast-grep") : () => {
1767
1804
  };
1768
1805
  this.ensureRulesHealthReported();
1769
- this.ruleManager = new AstGrepRuleManager(this.ruleDir, this.log);
1806
+ this.ruleManager = new AstGrepRuleManager(ruleDir ? this.ruleDir : [projectRuleDir, getUserRuleRoot(), this.ruleDir], this.log, () => getAstGrepRuleFingerprint(process.cwd()));
1770
1807
  this.runner = new SgRunner(verbose);
1771
1808
  }
1772
1809
  /**
@@ -1810,7 +1847,7 @@ var AstGrepClient = class {
1810
1847
  * Replace using a raw YAML rule that includes a `fix:` field (Phase 3/4 of #125).
1811
1848
  * Dry-run returns matches for preview; apply writes fixes to disk.
1812
1849
  */
1813
- async replaceWithRule(ruleYaml, paths, apply) {
1850
+ async replaceWithRule(ruleYaml, paths, apply, options) {
1814
1851
  const allMatches = [];
1815
1852
  for (const scanPath of paths) {
1816
1853
  if (apply) {
@@ -1843,6 +1880,8 @@ var AstGrepClient = class {
1843
1880
  }
1844
1881
  allMatches.push(...result.matches);
1845
1882
  }
1883
+ if (apply)
1884
+ recordAstGrepApply(allMatches, options?.lineage, options?.toolCallId);
1846
1885
  return {
1847
1886
  matches: allMatches,
1848
1887
  totalMatches: allMatches.length,
@@ -1964,7 +2003,7 @@ var AstGrepClient = class {
1964
2003
  const shapeError = validateInputShape(ruleYaml, MAX_VALIDATE_RULE_CHARS, "rule");
1965
2004
  if (shapeError)
1966
2005
  return { valid: false, error: shapeError };
1967
- const language = /^\s*language:\s*([^\s#]+)/im.exec(ruleYaml)?.[1] ?? "typescript";
2006
+ const language = extractRuleLanguage(ruleYaml) ?? "typescript";
1968
2007
  const snippet = validationSnippetFor(language);
1969
2008
  const tmpDir = fs4.mkdtempSync(path4.join(os2.tmpdir(), "pi-lens-sg-rule-"));
1970
2009
  try {
@@ -2109,7 +2148,7 @@ var AstGrepClient = class {
2109
2148
  error: applyResult.error
2110
2149
  };
2111
2150
  }
2112
- recordAstGrepApply(preCheck.matches, options?.lineage);
2151
+ recordAstGrepApply(preCheck.matches, options?.lineage, options?.toolCallId);
2113
2152
  return {
2114
2153
  matches: preCheck.matches,
2115
2154
  totalMatches: preCheck.totalMatches,
@@ -2686,7 +2725,7 @@ function resolveRebuildScript(serverFilePath) {
2686
2725
  return serverFilePath.replace(/\\/g, "/").includes("/dist/") ? "build:dist" : "build";
2687
2726
  }
2688
2727
  function analyzeFileFresh(workerPath, file, cwd, options = {}, timeoutMs = 12e4) {
2689
- return new Promise((resolve30) => {
2728
+ return new Promise((resolve31) => {
2690
2729
  const args = [workerPath, `--file=${file}`, `--cwd=${cwd}`];
2691
2730
  if (options.flags)
2692
2731
  args.push(`--flags=${JSON.stringify(options.flags)}`);
@@ -2696,7 +2735,7 @@ function analyzeFileFresh(workerPath, file, cwd, options = {}, timeoutMs = 12e4)
2696
2735
  stdio: ["ignore", "pipe", "pipe"]
2697
2736
  });
2698
2737
  } catch (err) {
2699
- resolve30({
2738
+ resolve31({
2700
2739
  error: `failed to fork worker: ${err instanceof Error ? err.message : String(err)}`
2701
2740
  });
2702
2741
  return;
@@ -2709,7 +2748,7 @@ function analyzeFileFresh(workerPath, file, cwd, options = {}, timeoutMs = 12e4)
2709
2748
  return;
2710
2749
  settled = true;
2711
2750
  clearTimeout(timer);
2712
- resolve30(outcome);
2751
+ resolve31(outcome);
2713
2752
  };
2714
2753
  const timer = setTimeout(() => {
2715
2754
  child.kill();
@@ -2874,29 +2913,29 @@ async function buildBootstrapClients() {
2874
2913
  }
2875
2914
  }
2876
2915
  const [ruffClient, biomeClient, knipClient, todoScanner, jscpdClient, depChecker, testRunnerClient, metricsClient, complexityClient, goClient, govulncheckClient, gitleaksClient, trivyClient, opengrepClient, rustClient, agentBehaviorClient2, deadCodeClients] = await Promise.all([
2877
- load("ruff", async () => new (await import("../chunk-52H5B5TC.js")).RuffClient()),
2878
- load("biome", async () => new (await import("../chunk-4RERDEXR.js")).BiomeClient()),
2879
- load("knip", async () => new (await import("../chunk-AJ3QXTRQ.js")).KnipClient()),
2880
- load("todo", async () => new (await import("../chunk-NL5GLMFI.js")).TodoScanner()),
2881
- load("jscpd", async () => new (await import("../chunk-HVUZXSWK.js")).JscpdClient()),
2882
- load("dependency-checker", async () => new (await import("../chunk-T6D4Q4AQ.js")).DependencyChecker()),
2883
- load("test-runner", async () => new (await import("../chunk-AHDW3GPE.js")).TestRunnerClient()),
2884
- load("metrics", async () => new (await import("../chunk-27BBHSZC.js")).MetricsClient()),
2885
- load("complexity", async () => new (await import("../chunk-OS32RNR2.js")).ComplexityClient()),
2916
+ load("ruff", async () => new (await import("../chunk-JONGANYH.js")).RuffClient()),
2917
+ load("biome", async () => new (await import("../chunk-OEX24ECI.js")).BiomeClient()),
2918
+ load("knip", async () => new (await import("../chunk-AFZYMAIV.js")).KnipClient()),
2919
+ load("todo", async () => new (await import("../chunk-ELVWJYRV.js")).TodoScanner()),
2920
+ load("jscpd", async () => new (await import("../chunk-H2W2AXD3.js")).JscpdClient()),
2921
+ load("dependency-checker", async () => new (await import("../chunk-WPE5FPGR.js")).DependencyChecker()),
2922
+ load("test-runner", async () => new (await import("../chunk-N77WFUL7.js")).TestRunnerClient()),
2923
+ load("metrics", async () => new (await import("../chunk-HREZQCT3.js")).MetricsClient()),
2924
+ load("complexity", async () => new (await import("../chunk-VZHJS6DR.js")).ComplexityClient()),
2886
2925
  // The process-wide singleton, NOT a fresh instance (#2455 fix round 4,
2887
2926
  // F2). `handleSessionStart` reads this object for its "Active tools"
2888
2927
  // line while `resetGoAvailability` re-arms the singleton's latch; a
2889
2928
  // second instance here meant the reset never reached the surface a
2890
2929
  // user actually sees.
2891
- load("go", async () => (await import("../chunk-NTHH2J74.js")).goClient),
2892
- load("govulncheck", async () => new (await import("../chunk-54B42YRX.js")).GovulncheckClient()),
2893
- load("gitleaks", async () => new (await import("../chunk-RIISMHKN.js")).GitleaksClient()),
2894
- load("trivy", async () => new (await import("../chunk-IIXOAGHR.js")).TrivyClient()),
2895
- load("opengrep", async () => new (await import("../chunk-ORTMY4Q4.js")).OpengrepClient()),
2930
+ load("go", async () => (await import("../chunk-Z7QQA2KT.js")).goClient),
2931
+ load("govulncheck", async () => new (await import("../chunk-RTQNRM5X.js")).GovulncheckClient()),
2932
+ load("gitleaks", async () => new (await import("../chunk-IR6XFA5P.js")).GitleaksClient()),
2933
+ load("trivy", async () => new (await import("../chunk-OYTMZXRF.js")).TrivyClient()),
2934
+ load("opengrep", async () => new (await import("../chunk-D65GOCJB.js")).OpengrepClient()),
2896
2935
  // The process-wide singleton, for the same reason as "go" above.
2897
- load("rust", async () => (await import("../chunk-4W2PLC4J.js")).rustClient),
2898
- load("agent-behavior", async () => (await import("../chunk-IXEBJSUE.js")).agentBehaviorClient),
2899
- loadList("dead-code", async () => (await import("../chunk-UY752QSN.js")).getDeadCodeClients())
2936
+ load("rust", async () => (await import("../chunk-EUT3B22Y.js")).rustClient),
2937
+ load("agent-behavior", async () => (await import("../chunk-BJF25SUG.js")).agentBehaviorClient),
2938
+ loadList("dead-code", async () => (await import("../chunk-NJF2X5XF.js")).getDeadCodeClients())
2900
2939
  ]);
2901
2940
  if (failures.length > 0)
2902
2941
  await logBootstrapFailures(failures);
@@ -2983,7 +3022,7 @@ function resetAnalyzerBootstrapSessionState() {
2983
3022
  }
2984
3023
 
2985
3024
  // dist/clients/formatters-lazy.js
2986
- var lazyFormatters = createLazyImport(() => import("../chunk-XK4CIILI.js"));
3025
+ var lazyFormatters = createLazyImport(() => import("../chunk-3FERWMCH.js"));
2987
3026
  function warmFormatters() {
2988
3027
  return lazyFormatters.get();
2989
3028
  }
@@ -3332,6 +3371,13 @@ function deriveProviderFromModelId(modelId) {
3332
3371
 
3333
3372
  // dist/clients/runtime-coordinator.js
3334
3373
  var MAX_PENDING_CASCADE_RUNS = 32;
3374
+ function nextTelemetrySessionId() {
3375
+ const state = getProcessSingleton("runtime-coordinator-telemetry", 1, () => ({
3376
+ processId: randomBytes(6).toString("hex"),
3377
+ nextGeneration: 0
3378
+ }));
3379
+ return `lens-${state.processId}-${++state.nextGeneration}`;
3380
+ }
3335
3381
  var MAX_CUT_ADVISORY_LANES = 16;
3336
3382
  var MAX_MUTATION_RECEIPTS = 512;
3337
3383
  function recordViewIncomplete(cwd, cause) {
@@ -3403,7 +3449,8 @@ var RuntimeCoordinator = class {
3403
3449
  rules: [],
3404
3450
  hasCustomRules: false
3405
3451
  };
3406
- _telemetrySessionId = `lens-${Date.now().toString(36)}`;
3452
+ /** Process-unique and monotonic across coordinator reloads (#4213). */
3453
+ _telemetrySessionId = nextTelemetrySessionId();
3407
3454
  _lifecycleReason;
3408
3455
  _hasStableSessionId = false;
3409
3456
  _telemetryModel = "unknown";
@@ -3472,9 +3519,10 @@ var RuntimeCoordinator = class {
3472
3519
  /** tool_call → tool_result path-attribution correlation (#1642). */
3473
3520
  _toolCallAttributions = new BoundedLruCache(TOOL_CALL_ATTRIBUTION_CAPACITY);
3474
3521
  /**
3475
- * #3555: reads carry no {@link ToolCallAttribution} (it is recorded for
3476
- * mutations, and its origin cwd would change how a read's path resolves),
3477
- * so a widening rides its own correlation, with the same bound.
3522
+ * #3555: a widening rides its own correlation, with the same bound. Since
3523
+ * #4138 a read also carries a {@link ToolCallAttribution} (its origin cwd
3524
+ * is what a relative read path resolves against at tool_result); the
3525
+ * widening stays separate because it outlives a blocked call's attribution.
3478
3526
  */
3479
3527
  _readWidenings = new BoundedLruCache(TOOL_CALL_ATTRIBUTION_CAPACITY);
3480
3528
  _lspReadWarmState = /* @__PURE__ */ new Map();
@@ -3543,7 +3591,7 @@ var RuntimeCoordinator = class {
3543
3591
  this._droppedMutationReceipts = 0;
3544
3592
  this._actionableWarningsThisTurn.clear(this._telemetrySessionId);
3545
3593
  this._codeQualityWarningsThisTurn.clear(this._telemetrySessionId);
3546
- this._telemetrySessionId = `lens-${Date.now().toString(36)}-${randomBytes(4).toString("hex")}`;
3594
+ this._telemetrySessionId = nextTelemetrySessionId();
3547
3595
  this._hasStableSessionId = false;
3548
3596
  this._telemetryModel = "unknown";
3549
3597
  this._telemetryModelId = "";
@@ -4075,8 +4123,8 @@ var RuntimeCoordinator = class {
4075
4123
  });
4076
4124
  return entry;
4077
4125
  });
4078
- const timeout = new Promise((resolve30) => {
4079
- setTimeout(resolve30, maxWaitMs).unref?.();
4126
+ const timeout = new Promise((resolve31) => {
4127
+ setTimeout(resolve31, maxWaitMs).unref?.();
4080
4128
  });
4081
4129
  await Promise.race([
4082
4130
  Promise.allSettled(tracked.map((t) => t.promise)),
@@ -4820,6 +4868,17 @@ var RuntimeCoordinator = class {
4820
4868
  deferFormat(filePath, cwd, toolName, turnStateCwd, ownerSessionId, originCwd) {
4821
4869
  return this.deferMutation(filePath, cwd, toolName, turnStateCwd, "format", ownerSessionId, originCwd);
4822
4870
  }
4871
+ /** Return the ownership identity of a queued format record for bus events. */
4872
+ deferredFormatIdentity(filePath) {
4873
+ const record = this._pendingDeferredMutations.get(path8.resolve(filePath));
4874
+ if (!record || !record.kinds.has("format"))
4875
+ return void 0;
4876
+ return {
4877
+ ownerSessionId: record.ownerSessionId,
4878
+ turnIndex: record.queuedTurnIndex,
4879
+ batchId: record.queuedTurnId
4880
+ };
4881
+ }
4823
4882
  get pendingDeferredFormatCount() {
4824
4883
  return this._pendingDeferredMutations.size;
4825
4884
  }
@@ -5231,6 +5290,30 @@ function resetTestRunnerDelivery() {
5231
5290
  }
5232
5291
 
5233
5292
  // dist/clients/runtime-session.js
5293
+ function notifyStartupWarmSkip(args) {
5294
+ if (!args.runtime.isCurrentSession(args.sessionGeneration))
5295
+ return;
5296
+ const reason = args.scan.reason;
5297
+ if (reason !== "too-many-source-files" && reason !== "too-many-entries") {
5298
+ return;
5299
+ }
5300
+ const bound = reason === "too-many-entries" ? {
5301
+ name: "maxScanEntries",
5302
+ value: args.scan.maxScanEntries,
5303
+ hint: `set PI_LENS_STARTUP_SCAN_MAX_ENTRIES=<n> to override the ${args.scan.maxScanEntries}-entry cap`
5304
+ } : {
5305
+ name: "maxProjectFiles",
5306
+ value: args.scan.maxProjectFiles,
5307
+ hint: `set maxProjectFiles in .pi-lens.json to override the ${args.scan.maxProjectFiles}-source-file cap`
5308
+ };
5309
+ recordDegradationOnce({
5310
+ kind: "startup-warm-skipped",
5311
+ subject: args.analysisRoot,
5312
+ reason: `${reason}; ${bound.name}=${bound.value}`,
5313
+ metadata: { reason, [bound.name]: bound.value }
5314
+ });
5315
+ args.notify(`\u{1F4E6} Project-size limits disabled background warm scans (heavy scans, TODO scan, LSP pre-warm) (${bound.hint}).`, "warning");
5316
+ }
5234
5317
  async function demandBootstrapDeps(deps, reason) {
5235
5318
  const clients = await deps.bootstrap.request(reason);
5236
5319
  if (!clients)
@@ -5359,8 +5442,8 @@ async function readSequenceWithBudget(args) {
5359
5442
  const { snapshotRoot, base, cwd, runtime, sessionGeneration, dbg, onDeferredSequenceResolved } = args;
5360
5443
  const readPromise = readLatestProjectSequenceAsync(snapshotRoot, base);
5361
5444
  let timeoutHandle;
5362
- const timeoutPromise = new Promise((resolve30) => {
5363
- timeoutHandle = setTimeout(() => resolve30({ timedOut: true }), sequenceReadBudgetMs());
5445
+ const timeoutPromise = new Promise((resolve31) => {
5446
+ timeoutHandle = setTimeout(() => resolve31({ timedOut: true }), sequenceReadBudgetMs());
5364
5447
  timeoutHandle.unref();
5365
5448
  });
5366
5449
  const raced = await Promise.race([
@@ -5460,8 +5543,8 @@ async function igniteDominantLanguageWarm(cwd, runtime, sessionGeneration, dbg)
5460
5543
  if (!runtime.isCurrentSession(sessionGeneration))
5461
5544
  return;
5462
5545
  const lspService = (await loadLspService()).getLSPService();
5463
- const { collectSourceFilesAsync } = await import("../chunk-E4MAEDPM.js");
5464
- const { CODE_KINDS, detectFileKind: detectFileKind2 } = await import("../chunk-O5WILGMI.js");
5546
+ const { collectSourceFilesAsync } = await import("../chunk-J7WJZ6W7.js");
5547
+ const { CODE_KINDS, detectFileKind: detectFileKind2 } = await import("../chunk-CFYISHUW.js");
5465
5548
  const files = await collectSourceFilesAsync(cwd, {
5466
5549
  inspectGeneratedHeaders: false
5467
5550
  });
@@ -5527,7 +5610,7 @@ function scheduleManagedToolRefresh(dbg) {
5527
5610
  const timer = setTimeout(() => {
5528
5611
  void (async () => {
5529
5612
  try {
5530
- const refresh = await import("../chunk-T4ERT73Y.js");
5613
+ const refresh = await import("../chunk-CBD2B5CP.js");
5531
5614
  const outcome = await refresh.runManagedToolRefresh();
5532
5615
  if (outcome.skipped) {
5533
5616
  dbg(`session_start tool-refresh: skipped (${outcome.skipped})`);
@@ -5574,7 +5657,7 @@ function scanOneTodoFile(scanner, filePath, items) {
5574
5657
  async function collectTodoBaselineItems(scanner, analysisRoot, stillCurrent) {
5575
5658
  const items = [];
5576
5659
  try {
5577
- const { getSourceFilesAsync } = await import("../chunk-RPD4ZSB7.js");
5660
+ const { getSourceFilesAsync } = await import("../chunk-KMGPUKFD.js");
5578
5661
  const files = await getSourceFilesAsync(analysisRoot, true);
5579
5662
  if (!stillCurrent())
5580
5663
  return items;
@@ -5603,7 +5686,7 @@ async function buildOrRefreshWordIndex(args) {
5603
5686
  const snapshot = loadProjectSnapshot(snapshotRoot);
5604
5687
  const snapshotLoadMs = Date.now() - snapshotLoadStartMs;
5605
5688
  if (snapshot?.wordIndex) {
5606
- const { deserializeWordIndex, refreshWordIndexIncrementally, countWordIndexPostingEntries: countWordIndexPostingEntries2, estimateWordIndexResidentBytes: estimateWordIndexResidentBytes2 } = await import("../chunk-XECLWQZN.js");
5689
+ const { deserializeWordIndex, refreshWordIndexIncrementally, countWordIndexPostingEntries: countWordIndexPostingEntries2, estimateWordIndexResidentBytes: estimateWordIndexResidentBytes2 } = await import("../chunk-ZMOMPX2Z.js");
5607
5690
  const deserializeStartMs = Date.now();
5608
5691
  const index = deserializeWordIndex(snapshot.wordIndex);
5609
5692
  const deserializeMs = Date.now() - deserializeStartMs;
@@ -5675,7 +5758,7 @@ async function buildOrRefreshWordIndex(args) {
5675
5758
  }
5676
5759
  }
5677
5760
  }
5678
- const { buildWordIndexAsync, collectWordIndexDocs, countWordIndexPostingEntries, estimateWordIndexResidentBytes } = await import("../chunk-XECLWQZN.js");
5761
+ const { buildWordIndexAsync, collectWordIndexDocs, countWordIndexPostingEntries, estimateWordIndexResidentBytes } = await import("../chunk-ZMOMPX2Z.js");
5679
5762
  const docs = await collectWordIndexDocs(analysisRoot, () => runtime.isCurrentSession(sessionGeneration), rebuildPreflightFiles);
5680
5763
  if (!runtime.isCurrentSession(sessionGeneration))
5681
5764
  return;
@@ -5745,7 +5828,7 @@ function scheduleStartupScansWithClients(deps, runtime, sessionGeneration, analy
5745
5828
  const queuedAt = Date.now();
5746
5829
  dbg(`session_start task ${name}: scheduled`);
5747
5830
  runtime.markStartupScanInFlight(name, sessionGeneration);
5748
- const completion = new Promise((resolve30) => {
5831
+ const completion = new Promise((resolve31) => {
5749
5832
  const fire = () => {
5750
5833
  const startedAt = Date.now();
5751
5834
  dbg(`session_start task ${name}: start queuedMs=${startedAt - queuedAt}`);
@@ -5757,7 +5840,7 @@ function scheduleStartupScansWithClients(deps, runtime, sessionGeneration, analy
5757
5840
  }).finally(() => {
5758
5841
  runtime.clearStartupScanInFlight(name, sessionGeneration);
5759
5842
  dbg(`session_start task ${name}: end`);
5760
- resolve30();
5843
+ resolve31();
5761
5844
  });
5762
5845
  };
5763
5846
  const delay = taskDeferMsByName[name] ?? 0;
@@ -6040,9 +6123,9 @@ function scheduleStartupScansWithClients(deps, runtime, sessionGeneration, analy
6040
6123
  });
6041
6124
  let callGraphIdentity;
6042
6125
  const callGraphTask = runTask("call-graph", async () => {
6043
- const { FactStore: FactStore2 } = await import("../chunk-YSNFMJKN.js");
6044
- const { buildOrUpdateGraph, extractSymbolsAndRefsFromGraph, getReviewGraphCacheIdentity } = await import("../chunk-VD4JQCQC.js");
6045
- const { buildCallGraph, saveCallGraph, loadCallGraph: loadCallGraph2 } = await import("../chunk-FJNKANOS.js");
6126
+ const { FactStore: FactStore2 } = await import("../chunk-CULQYFLU.js");
6127
+ const { buildOrUpdateGraph, extractSymbolsAndRefsFromGraph, getReviewGraphCacheIdentity } = await import("../chunk-3TTPKMEF.js");
6128
+ const { buildCallGraph, saveCallGraph, loadCallGraph: loadCallGraph2 } = await import("../chunk-GAYGGICG.js");
6046
6129
  if (!runtime.isCurrentSession(sessionGeneration))
6047
6130
  return;
6048
6131
  const startMs = Date.now();
@@ -6083,7 +6166,7 @@ function scheduleStartupScansWithClients(deps, runtime, sessionGeneration, analy
6083
6166
  return;
6084
6167
  if (!runtime.callGraph)
6085
6168
  return;
6086
- const { buildCodebaseModel, saveCodebaseModel, DEFAULT_CODEBASE_MODEL_TOKEN_BUDGET } = await import("../chunk-K6VYLB2U.js");
6169
+ const { buildCodebaseModel, saveCodebaseModel, DEFAULT_CODEBASE_MODEL_TOKEN_BUDGET } = await import("../chunk-6UYA642J.js");
6087
6170
  if (!callGraphIdentity)
6088
6171
  return;
6089
6172
  const model = buildCodebaseModel(runtime.callGraph, analysisRoot, DEFAULT_CODEBASE_MODEL_TOKEN_BUDGET, callGraphIdentity);
@@ -6161,6 +6244,7 @@ var SESSION_START_GUIDANCE = [
6161
6244
  ];
6162
6245
  async function handleSessionStart(deps) {
6163
6246
  resetDegradationLedger();
6247
+ let sessionGenerationAtStart = deps.runtime.sessionGeneration;
6164
6248
  resetAnalyzerBootstrapSessionState();
6165
6249
  resetProjectDataDirSessionState();
6166
6250
  resetTestRunnerDelivery();
@@ -6199,8 +6283,8 @@ async function handleSessionStart(deps) {
6199
6283
  try {
6200
6284
  warmupDbg("warmup: starting background warmup");
6201
6285
  const scanContextStartedAt = Date.now();
6202
- const startupScanModule = await import("../chunk-ODEEOXPH.js");
6203
- const languageProfileModule = await import("../chunk-AWE5TMPO.js");
6286
+ const startupScanModule = await import("../chunk-6B5I6ICN.js");
6287
+ const languageProfileModule = await import("../chunk-7M4T5N3V.js");
6204
6288
  const warmupSnapshotRoot = resolveSnapshotRoot(warmupCwd);
6205
6289
  const cachedSnapshot = loadProjectSnapshot(warmupSnapshotRoot);
6206
6290
  warmupOwnSnapshotRead = cachedSnapshot ? {
@@ -6241,6 +6325,13 @@ async function handleSessionStart(deps) {
6241
6325
  });
6242
6326
  if (!scan.canWarmCaches) {
6243
6327
  warmupDbg(`warmup: skipping language-profile (canWarm=false, reason=${scan.reason ?? "unknown"})`);
6328
+ notifyStartupWarmSkip({
6329
+ scan,
6330
+ analysisRoot: scan.projectRoot ?? warmupCwd,
6331
+ notify: deps.notify,
6332
+ runtime: deps.runtime,
6333
+ sessionGeneration: sessionGenerationAtStart
6334
+ });
6244
6335
  return;
6245
6336
  }
6246
6337
  const languageRoot = scan.projectRoot ?? warmupCwd;
@@ -6356,6 +6447,7 @@ async function handleSessionStart(deps) {
6356
6447
  deps.bootstrap.peek()?.knipClient.resetSessionState?.();
6357
6448
  resetCascadeTierSessionState();
6358
6449
  runtime.resetForSession(sessionStartMs);
6450
+ sessionGenerationAtStart = runtime.sessionGeneration;
6359
6451
  logLatency({
6360
6452
  type: "phase",
6361
6453
  phase: "session_start_runtime_reset",
@@ -6792,10 +6884,13 @@ async function handleSessionStart(deps) {
6792
6884
  } else if (!startupScan.canWarmCaches) {
6793
6885
  dbg(`session_start: skipping heavy scans (${startupScan.reason ?? "unknown"})`);
6794
6886
  dbg(`session_start: skipping TODO scan (${startupScan.reason ?? "unknown"})`);
6795
- if (startupScan.reason === "too-many-source-files" || startupScan.reason === "too-many-entries") {
6796
- const overrideHint = startupScan.reason === "too-many-entries" ? ` (set PI_LENS_STARTUP_SCAN_MAX_ENTRIES=<n> to override the ${getStartupScanMaxEntries()}-entry cap)` : "";
6797
- notify(`\u{1F4E6} Project-size limits disabled background warm scans (heavy scans, TODO scan, LSP pre-warm)${overrideHint}.`, "warning");
6798
- }
6887
+ notifyStartupWarmSkip({
6888
+ scan: startupScan,
6889
+ analysisRoot,
6890
+ notify,
6891
+ runtime,
6892
+ sessionGeneration
6893
+ });
6799
6894
  } else {
6800
6895
  scheduleStartupScans(deps, runtime, sessionGeneration, analysisRoot, snapshotRoot, languageProfile, dbg);
6801
6896
  }
@@ -7235,7 +7330,7 @@ async function buildActionableWarningsReport(args) {
7235
7330
  }
7236
7331
  };
7237
7332
  const deferredWork = (async () => {
7238
- await new Promise((resolve30) => setTimeout(resolve30, 0));
7333
+ await new Promise((resolve31) => setTimeout(resolve31, 0));
7239
7334
  const deferredRecords = [...carried];
7240
7335
  const deferredDeadline = Date.now() + ACTIONABLE_WARNINGS_DEFERRED_BUDGET_MS;
7241
7336
  deferredDeps.deadlineAt = deferredDeadline;
@@ -8610,7 +8705,7 @@ function stillReportedParked(parked, current, keyOf, offeredKeys) {
8610
8705
  }
8611
8706
 
8612
8707
  // dist/clients/knip-scan-roots.js
8613
- import { resolve as resolve11 } from "node:path";
8708
+ import { resolve as resolve12 } from "node:path";
8614
8709
  var MAX_KNIP_ROOTS_PER_TURN = 3;
8615
8710
  function resolveKnipScanRoots(sessionCwd, modifiedFiles) {
8616
8711
  const session = resolveGitCheckout(sessionCwd);
@@ -8620,7 +8715,7 @@ function resolveKnipScanRoots(sessionCwd, modifiedFiles) {
8620
8715
  let sessionOwnsEdit = false;
8621
8716
  const linked = [];
8622
8717
  for (const file of modifiedFiles) {
8623
- const owner = resolveLinkedWorktreeOwner(session, resolve11(sessionCwd, file));
8718
+ const owner = resolveLinkedWorktreeOwner(session, resolve12(sessionCwd, file));
8624
8719
  if (owner === null) {
8625
8720
  sessionOwnsEdit = true;
8626
8721
  } else if (!linked.some((known) => pathsEqual(known.root, owner.root))) {
@@ -9249,7 +9344,7 @@ async function runTestTargetsBounded(args) {
9249
9344
  });
9250
9345
  void pool.catch(() => {
9251
9346
  });
9252
- await new Promise((resolve30) => {
9347
+ await new Promise((resolve31) => {
9253
9348
  let settled = false;
9254
9349
  const finish = (reason) => {
9255
9350
  if (settled)
@@ -9261,7 +9356,7 @@ async function runTestTargetsBounded(args) {
9261
9356
  batchAbort.abort();
9262
9357
  clearTimeout(timer);
9263
9358
  args.signal?.removeEventListener("abort", onAbort);
9264
- resolve30();
9359
+ resolve31();
9265
9360
  };
9266
9361
  const onAbort = () => finish("abort");
9267
9362
  const timer = setTimeout(() => finish("budget"), budgetMs);
@@ -11236,8 +11331,8 @@ ${suffix}`;
11236
11331
  } else {
11237
11332
  const callGraphStart = Date.now();
11238
11333
  try {
11239
- const { impact, formatImpact, parseSymbolKey } = await import("../chunk-FJNKANOS.js");
11240
- const { callGraphImpactToProjectDiagnostics } = await import("../chunk-47D2BO4S.js");
11334
+ const { impact, formatImpact, parseSymbolKey } = await import("../chunk-GAYGGICG.js");
11335
+ const { callGraphImpactToProjectDiagnostics } = await import("../chunk-VPWKF3GN.js");
11241
11336
  const impactLines = [];
11242
11337
  let callGraphDispositionSuppressed = 0;
11243
11338
  const impactFindings = [];
@@ -12186,10 +12281,10 @@ var TurnEndQueue = class {
12186
12281
  if (this.pending.length >= 1) {
12187
12282
  return Promise.reject(new Error("turn_end queue is busy"));
12188
12283
  }
12189
- return new Promise((resolve30, reject) => {
12284
+ return new Promise((resolve31, reject) => {
12190
12285
  const item = {
12191
12286
  work,
12192
- resolve: resolve30,
12287
+ resolve: resolve31,
12193
12288
  reject,
12194
12289
  timer: setTimeout(() => {
12195
12290
  const index = this.pending.indexOf(item);
@@ -12926,7 +13021,7 @@ function blastReadArgs(graph, normalizedFile) {
12926
13021
  return { path: normalizedFile, offset: 1, limit };
12927
13022
  }
12928
13023
  async function computeBlastRadius(graph, normalizedPath, projectRoot, maxDepth) {
12929
- const { computeTransitiveImpact } = await import("../chunk-34U7PLGE.js");
13024
+ const { computeTransitiveImpact } = await import("../chunk-PCHDGUKT.js");
12930
13025
  const result = computeTransitiveImpact(graph, normalizedPath, { maxDepth });
12931
13026
  const byFile = /* @__PURE__ */ new Map();
12932
13027
  for (const hit of result.hits) {
@@ -13543,7 +13638,7 @@ async function moduleReport(file, cwd, options) {
13543
13638
  let callGraphIdentity;
13544
13639
  let revisionDriftNote;
13545
13640
  try {
13546
- const { getCachedReviewGraph, getReviewGraphCacheIdentity, getReviewGraphSizeSkipVerdict, getReviewGraphRevisionDrift, formatReviewGraphRevisionDriftNote: formatReviewGraphRevisionDriftNote2 } = await import("../chunk-VD4JQCQC.js");
13641
+ const { getCachedReviewGraph, getReviewGraphCacheIdentity, getReviewGraphSizeSkipVerdict, getReviewGraphRevisionDrift, formatReviewGraphRevisionDriftNote: formatReviewGraphRevisionDriftNote2 } = await import("../chunk-3TTPKMEF.js");
13547
13642
  graph = getCachedReviewGraph(cwd);
13548
13643
  graphFileCap = getReviewGraphSizeSkipVerdict(cwd)?.maxFileCount;
13549
13644
  const drift = graph ? getReviewGraphRevisionDrift(cwd) : void 0;
@@ -14327,7 +14422,7 @@ function roleFor(graph, filePath) {
14327
14422
  return top.length > 0 ? top.map((s) => s.name).join(", ") : void 0;
14328
14423
  }
14329
14424
  async function computeHubs(graph, degrees, cwd, limit, focusTerms) {
14330
- const { computeTransitiveImpact } = await import("../chunk-34U7PLGE.js");
14425
+ const { computeTransitiveImpact } = await import("../chunk-PCHDGUKT.js");
14331
14426
  const ranked = [...graph.fileNodes.entries()].map(([filePath, fileNodeId]) => ({
14332
14427
  filePath,
14333
14428
  fileNodeId,
@@ -14579,7 +14674,7 @@ async function projectReport(cwd, options) {
14579
14674
  const limit = clampLimit(options?.limit);
14580
14675
  const focusTerms = normalizeFocus2(options?.focus);
14581
14676
  const view = options?.view;
14582
- const { getCachedReviewGraph, getReviewGraphSizeSkipVerdict, getLastReviewGraphBuildAttempt, buildOrUpdateGraph, isGraphBuildInFlight, getReviewGraphRevisionDrift } = await import("../chunk-VD4JQCQC.js");
14677
+ const { getCachedReviewGraph, getReviewGraphSizeSkipVerdict, getLastReviewGraphBuildAttempt, buildOrUpdateGraph, isGraphBuildInFlight, getReviewGraphRevisionDrift } = await import("../chunk-3TTPKMEF.js");
14583
14678
  let graph;
14584
14679
  try {
14585
14680
  graph = getCachedReviewGraph(cwd);
@@ -14603,7 +14698,7 @@ async function projectReport(cwd, options) {
14603
14698
  };
14604
14699
  }
14605
14700
  const previousAttempt = getLastReviewGraphBuildAttempt(cwd);
14606
- const { FactStore: FactStore2 } = await import("../chunk-YSNFMJKN.js");
14701
+ const { FactStore: FactStore2 } = await import("../chunk-CULQYFLU.js");
14607
14702
  const trigger = triggerBackgroundGraphBuild(cwd, {
14608
14703
  buildOrUpdateGraph,
14609
14704
  isGraphBuildInFlight,
@@ -15022,7 +15117,7 @@ async function symbolSearch(query, cwd, limit = 20, options = {}) {
15022
15117
  warmLease.release();
15023
15118
  }
15024
15119
  const hits = results.map(toSymbolSearchHit);
15025
- const { getCachedReviewGraph } = await import("../chunk-VD4JQCQC.js");
15120
+ const { getCachedReviewGraph } = await import("../chunk-3TTPKMEF.js");
15026
15121
  const graph = getCachedReviewGraph(cwd);
15027
15122
  if (graph)
15028
15123
  annotateSymbolSearchHitsWithGraph(hits, centrality, graph);
@@ -15388,7 +15483,7 @@ function createAstGrepReplaceTool(astGrepClient2, captureLineage) {
15388
15483
  details: {}
15389
15484
  };
15390
15485
  }
15391
- const ruleResult = await astGrepClient2.replaceWithRule(ruleYaml, searchPaths, applyFlag);
15486
+ const ruleResult = await astGrepClient2.replaceWithRule(ruleYaml, searchPaths, applyFlag, { lineage, toolCallId: _toolCallId });
15392
15487
  if (ruleResult.stalePreview) {
15393
15488
  logOutcome("error", { errorRaw: "stale_preview" });
15394
15489
  return {
@@ -15427,7 +15522,7 @@ function createAstGrepReplaceTool(astGrepClient2, captureLineage) {
15427
15522
  }
15428
15523
  };
15429
15524
  }
15430
- const result = await astGrepClient2.replace(pattern, rewrite, lang, searchPaths, applyFlag, { strictness, lineage });
15525
+ const result = await astGrepClient2.replace(pattern, rewrite, lang, searchPaths, applyFlag, { strictness, lineage, toolCallId: _toolCallId });
15431
15526
  if (result.stalePreview) {
15432
15527
  logOutcome("error", { errorRaw: "stale_preview" });
15433
15528
  return {
@@ -16824,12 +16919,12 @@ async function fetchFreshProjectDiagnostics(cacheManager2, cwd, clients, signal,
16824
16919
  const allSettled = Promise.all(tasks).then(() => "completed").catch(() => "completed");
16825
16920
  const outcome = signal ? await Promise.race([
16826
16921
  allSettled,
16827
- new Promise((resolve30) => {
16922
+ new Promise((resolve31) => {
16828
16923
  if (signal.aborted) {
16829
- resolve30("aborted");
16924
+ resolve31("aborted");
16830
16925
  return;
16831
16926
  }
16832
- signal.addEventListener("abort", () => resolve30("aborted"), {
16927
+ signal.addEventListener("abort", () => resolve31("aborted"), {
16833
16928
  once: true
16834
16929
  });
16835
16930
  })
@@ -17272,7 +17367,7 @@ function coveredSourcesForCheck(file, serverScope, unconfirmedServerIds) {
17272
17367
  return [];
17273
17368
  }
17274
17369
  for (const server of servers) {
17275
- const auxiliary = server.role === "auxiliary";
17370
+ const auxiliary = isAuxiliary(server);
17276
17371
  if (auxiliary && serverScope === "primary")
17277
17372
  continue;
17278
17373
  if (unconfirmed.has(server.id))
@@ -17748,12 +17843,12 @@ async function collectBatchDiagnostics(files, severity, lspService, options) {
17748
17843
  });
17749
17844
  const result = options.signal ? await Promise.race([
17750
17845
  bounded2,
17751
- new Promise((resolve30) => {
17846
+ new Promise((resolve31) => {
17752
17847
  if (options.signal?.aborted) {
17753
- resolve30(void 0);
17848
+ resolve31(void 0);
17754
17849
  return;
17755
17850
  }
17756
- options.signal?.addEventListener("abort", () => resolve30(void 0), {
17851
+ options.signal?.addEventListener("abort", () => resolve31(void 0), {
17757
17852
  once: true
17758
17853
  });
17759
17854
  })
@@ -18170,7 +18265,7 @@ async function findFullScanBindingMismatches(results) {
18170
18265
  sinceYield += 1;
18171
18266
  if (sinceYield >= FULL_SCAN_BINDING_YIELD_EVERY) {
18172
18267
  sinceYield = 0;
18173
- await new Promise((resolve30) => setImmediate(resolve30));
18268
+ await new Promise((resolve31) => setImmediate(resolve31));
18174
18269
  }
18175
18270
  }
18176
18271
  return mismatched;
@@ -20724,6 +20819,10 @@ function createLspNavigationTool(getFlag, mutationDeps) {
20724
20819
  mutationContext = {
20725
20820
  cwd,
20726
20821
  correlationId: newLspMutationCorrelationId(_toolCallId),
20822
+ // #4187 R4-1: the call whose `tool_call` licensed the paths it
20823
+ // named; the workspace edit's other files (a rename's importers)
20824
+ // are unlicensed, so they end an authorship instead of advancing it.
20825
+ toolCallId: _toolCallId,
20727
20826
  tool: `lsp_navigation:${operation}`,
20728
20827
  source: mutationSource,
20729
20828
  ...mutationDeps,
@@ -20977,7 +21076,7 @@ ${JSON.stringify(result2)}`
20977
21076
  const msg = err instanceof Error ? err.message : String(err);
20978
21077
  if (rawPath && /No Project/i.test(msg)) {
20979
21078
  await openFileBestEffort(lspService, filePath);
20980
- await new Promise((resolve30) => setTimeout(resolve30, 120));
21079
+ await new Promise((resolve31) => setTimeout(resolve31, 120));
20981
21080
  const retryRaw = await lspService.workspaceSymbol(query ?? "", filePath);
20982
21081
  const retrySymbols = (Array.isArray(retryRaw) ? retryRaw : [retryRaw]).filter((s) => typeof s === "object" && s !== null);
20983
21082
  return dedupeWorkspaceSymbols(retrySymbols);