@ashx-j/lunr-dev 0.2.13-dev.7.1 → 0.2.16-dev.9.1

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 (384) hide show
  1. package/CHANGELOG.md +29 -1
  2. package/dist/builtin-extensions/ashxj-tui.d.ts +14 -0
  3. package/dist/builtin-extensions/ashxj-tui.d.ts.map +1 -1
  4. package/dist/builtin-extensions/ashxj-tui.js +37 -3
  5. package/dist/builtin-extensions/ashxj-tui.js.map +1 -1
  6. package/dist/builtin-extensions/index.d.ts +1 -15
  7. package/dist/builtin-extensions/index.d.ts.map +1 -1
  8. package/dist/builtin-extensions/index.js +7 -21
  9. package/dist/builtin-extensions/index.js.map +1 -1
  10. package/dist/builtin-extensions/narumiruna-pi-goal/src/goal.d.ts.map +1 -1
  11. package/dist/builtin-extensions/narumiruna-pi-goal/src/goal.js +6 -2
  12. package/dist/builtin-extensions/narumiruna-pi-goal/src/goal.js.map +1 -1
  13. package/dist/builtin-extensions/pi-lsp-extension/src/index.d.ts +4 -0
  14. package/dist/builtin-extensions/pi-lsp-extension/src/index.d.ts.map +1 -1
  15. package/dist/builtin-extensions/pi-lsp-extension/src/index.js +163 -169
  16. package/dist/builtin-extensions/pi-lsp-extension/src/index.js.map +1 -1
  17. package/dist/builtin-extensions/pi-lsp-extension/src/runtime.d.ts +46 -0
  18. package/dist/builtin-extensions/pi-lsp-extension/src/runtime.d.ts.map +1 -0
  19. package/dist/builtin-extensions/pi-lsp-extension/src/runtime.js +109 -0
  20. package/dist/builtin-extensions/pi-lsp-extension/src/runtime.js.map +1 -0
  21. package/dist/builtin-extensions/pi-mcp-adapter/direct-tool-executor.d.ts +7 -0
  22. package/dist/builtin-extensions/pi-mcp-adapter/direct-tool-executor.d.ts.map +1 -0
  23. package/dist/builtin-extensions/pi-mcp-adapter/direct-tool-executor.js +211 -0
  24. package/dist/builtin-extensions/pi-mcp-adapter/direct-tool-executor.js.map +1 -0
  25. package/dist/builtin-extensions/pi-mcp-adapter/direct-tools.d.ts +0 -5
  26. package/dist/builtin-extensions/pi-mcp-adapter/direct-tools.d.ts.map +1 -1
  27. package/dist/builtin-extensions/pi-mcp-adapter/direct-tools.js +0 -202
  28. package/dist/builtin-extensions/pi-mcp-adapter/direct-tools.js.map +1 -1
  29. package/dist/builtin-extensions/pi-mcp-adapter/index.d.ts.map +1 -1
  30. package/dist/builtin-extensions/pi-mcp-adapter/index.js +251 -94
  31. package/dist/builtin-extensions/pi-mcp-adapter/index.js.map +1 -1
  32. package/dist/builtin-extensions/pi-mcp-adapter/init.d.ts +4 -1
  33. package/dist/builtin-extensions/pi-mcp-adapter/init.d.ts.map +1 -1
  34. package/dist/builtin-extensions/pi-mcp-adapter/init.js +10 -3
  35. package/dist/builtin-extensions/pi-mcp-adapter/init.js.map +1 -1
  36. package/dist/builtin-extensions/pi-mcp-adapter/metadata-cache.d.ts.map +1 -1
  37. package/dist/builtin-extensions/pi-mcp-adapter/metadata-cache.js +6 -1
  38. package/dist/builtin-extensions/pi-mcp-adapter/metadata-cache.js.map +1 -1
  39. package/dist/builtin-extensions/pi-prompt-template-model/prompt-loader.d.ts.map +1 -1
  40. package/dist/builtin-extensions/pi-prompt-template-model/prompt-loader.js +2 -1
  41. package/dist/builtin-extensions/pi-prompt-template-model/prompt-loader.js.map +1 -1
  42. package/dist/builtin-extensions/pi-prompt-template-model/tool-manager.d.ts +1 -1
  43. package/dist/builtin-extensions/pi-prompt-template-model/tool-manager.d.ts.map +1 -1
  44. package/dist/builtin-extensions/pi-prompt-template-model/tool-manager.js +1 -1
  45. package/dist/builtin-extensions/pi-prompt-template-model/tool-manager.js.map +1 -1
  46. package/dist/builtin-extensions/pi-subagents/src/extension/index.d.ts +1 -1
  47. package/dist/builtin-extensions/pi-subagents/src/extension/index.d.ts.map +1 -1
  48. package/dist/builtin-extensions/pi-subagents/src/extension/index.js +38 -14
  49. package/dist/builtin-extensions/pi-subagents/src/extension/index.js.map +1 -1
  50. package/dist/builtin-extensions/pi-subagents/src/shared/fork-context.d.ts.map +1 -1
  51. package/dist/builtin-extensions/pi-subagents/src/shared/fork-context.js +1 -1
  52. package/dist/builtin-extensions/pi-subagents/src/shared/fork-context.js.map +1 -1
  53. package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.d.ts +1 -1
  54. package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.d.ts.map +1 -1
  55. package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.js +1 -1
  56. package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.js.map +1 -1
  57. package/dist/builtin-extensions/pi-subagents/src/tui/render.d.ts +1 -1
  58. package/dist/builtin-extensions/pi-subagents/src/tui/render.d.ts.map +1 -1
  59. package/dist/builtin-extensions/pi-subagents/src/tui/render.js +2 -1
  60. package/dist/builtin-extensions/pi-subagents/src/tui/render.js.map +1 -1
  61. package/dist/builtin-extensions/pi-subagents/src/watchdog/review.d.ts +1 -1
  62. package/dist/builtin-extensions/pi-subagents/src/watchdog/review.d.ts.map +1 -1
  63. package/dist/builtin-extensions/pi-subagents/src/watchdog/review.js +2 -1
  64. package/dist/builtin-extensions/pi-subagents/src/watchdog/review.js.map +1 -1
  65. package/dist/builtin-extensions/pi-web-access/extract.d.ts.map +1 -1
  66. package/dist/builtin-extensions/pi-web-access/extract.js +105 -54
  67. package/dist/builtin-extensions/pi-web-access/extract.js.map +1 -1
  68. package/dist/builtin-extensions/pi-web-access/gemini-search.d.ts +1 -1
  69. package/dist/builtin-extensions/pi-web-access/gemini-search.d.ts.map +1 -1
  70. package/dist/builtin-extensions/pi-web-access/gemini-search.js +82 -65
  71. package/dist/builtin-extensions/pi-web-access/gemini-search.js.map +1 -1
  72. package/dist/builtin-extensions/pi-web-access/github-extract.d.ts.map +1 -1
  73. package/dist/builtin-extensions/pi-web-access/github-extract.js +2 -0
  74. package/dist/builtin-extensions/pi-web-access/github-extract.js.map +1 -1
  75. package/dist/builtin-extensions/pi-web-access/index.d.ts.map +1 -1
  76. package/dist/builtin-extensions/pi-web-access/index.js +167 -77
  77. package/dist/builtin-extensions/pi-web-access/index.js.map +1 -1
  78. package/dist/builtin-extensions/pi-web-access/lazy.d.ts +18 -0
  79. package/dist/builtin-extensions/pi-web-access/lazy.d.ts.map +1 -0
  80. package/dist/builtin-extensions/pi-web-access/lazy.js +19 -0
  81. package/dist/builtin-extensions/pi-web-access/lazy.js.map +1 -0
  82. package/dist/builtin-extensions/pi-web-access/session-cleanup.d.ts +6 -0
  83. package/dist/builtin-extensions/pi-web-access/session-cleanup.d.ts.map +1 -0
  84. package/dist/builtin-extensions/pi-web-access/session-cleanup.js +17 -0
  85. package/dist/builtin-extensions/pi-web-access/session-cleanup.js.map +1 -0
  86. package/dist/catalog/models.json +1 -1
  87. package/dist/catalog/providers/amazon-bedrock.json +1 -1
  88. package/dist/catalog/providers/azure-openai-responses.json +1 -1
  89. package/dist/catalog/providers/fireworks.json +1 -1
  90. package/dist/catalog/providers/github-copilot.json +1 -1
  91. package/dist/catalog/providers/openai-codex.json +1 -1
  92. package/dist/catalog/providers/openai.json +1 -1
  93. package/dist/catalog/providers/opencode.json +1 -1
  94. package/dist/catalog/providers/openrouter.json +1 -1
  95. package/dist/catalog/providers/vercel-ai-gateway.json +1 -1
  96. package/dist/catalog/publication.json +131 -3
  97. package/dist/cli/list-models.d.ts.map +1 -1
  98. package/dist/cli/list-models.js +1 -0
  99. package/dist/cli/list-models.js.map +1 -1
  100. package/dist/cli-runtime.d.ts +3 -0
  101. package/dist/cli-runtime.d.ts.map +1 -0
  102. package/dist/cli-runtime.js +73 -0
  103. package/dist/cli-runtime.js.map +1 -0
  104. package/dist/cli.d.ts.map +1 -1
  105. package/dist/cli.js +14 -53
  106. package/dist/cli.js.map +1 -1
  107. package/dist/config.d.ts +1 -0
  108. package/dist/config.d.ts.map +1 -1
  109. package/dist/config.js +1 -0
  110. package/dist/config.js.map +1 -1
  111. package/dist/core/agent-session.d.ts +3 -0
  112. package/dist/core/agent-session.d.ts.map +1 -1
  113. package/dist/core/agent-session.js +56 -12
  114. package/dist/core/agent-session.js.map +1 -1
  115. package/dist/core/catalog-cache-scope.d.ts +3 -0
  116. package/dist/core/catalog-cache-scope.d.ts.map +1 -0
  117. package/dist/core/catalog-cache-scope.js +12 -0
  118. package/dist/core/catalog-cache-scope.js.map +1 -0
  119. package/dist/core/catalog-merge.d.ts +2 -0
  120. package/dist/core/catalog-merge.d.ts.map +1 -1
  121. package/dist/core/catalog-merge.js +29 -2
  122. package/dist/core/catalog-merge.js.map +1 -1
  123. package/dist/core/catalog-refresh-polling.d.ts +8 -0
  124. package/dist/core/catalog-refresh-polling.d.ts.map +1 -0
  125. package/dist/core/catalog-refresh-polling.js +30 -0
  126. package/dist/core/catalog-refresh-polling.js.map +1 -0
  127. package/dist/core/codex-catalog.d.ts +3 -0
  128. package/dist/core/codex-catalog.d.ts.map +1 -0
  129. package/dist/core/codex-catalog.js +15 -0
  130. package/dist/core/codex-catalog.js.map +1 -0
  131. package/dist/core/compaction/compaction.d.ts.map +1 -1
  132. package/dist/core/compaction/compaction.js +10 -5
  133. package/dist/core/compaction/compaction.js.map +1 -1
  134. package/dist/core/extensions/host-static.d.ts.map +1 -1
  135. package/dist/core/extensions/host-static.js +34 -12
  136. package/dist/core/extensions/host-static.js.map +1 -1
  137. package/dist/core/extensions/loader.d.ts +1 -2
  138. package/dist/core/extensions/loader.d.ts.map +1 -1
  139. package/dist/core/extensions/loader.js +10 -64
  140. package/dist/core/extensions/loader.js.map +1 -1
  141. package/dist/core/extensions/types.d.ts +2 -2
  142. package/dist/core/extensions/types.d.ts.map +1 -1
  143. package/dist/core/extensions/types.js.map +1 -1
  144. package/dist/core/footer-data-provider.d.ts.map +1 -1
  145. package/dist/core/footer-data-provider.js +2 -0
  146. package/dist/core/footer-data-provider.js.map +1 -1
  147. package/dist/core/live-catalog.d.ts +5 -2
  148. package/dist/core/live-catalog.d.ts.map +1 -1
  149. package/dist/core/live-catalog.js +108 -27
  150. package/dist/core/live-catalog.js.map +1 -1
  151. package/dist/core/model-runtime.d.ts +8 -0
  152. package/dist/core/model-runtime.d.ts.map +1 -1
  153. package/dist/core/model-runtime.js +64 -12
  154. package/dist/core/model-runtime.js.map +1 -1
  155. package/dist/core/official-catalog.d.ts +4 -0
  156. package/dist/core/official-catalog.d.ts.map +1 -1
  157. package/dist/core/official-catalog.js +86 -21
  158. package/dist/core/official-catalog.js.map +1 -1
  159. package/dist/core/permissions.d.ts +0 -2
  160. package/dist/core/permissions.d.ts.map +1 -1
  161. package/dist/core/permissions.js +10 -18
  162. package/dist/core/permissions.js.map +1 -1
  163. package/dist/core/sdk.d.ts +1 -1
  164. package/dist/core/sdk.d.ts.map +1 -1
  165. package/dist/core/sdk.js +1 -1
  166. package/dist/core/sdk.js.map +1 -1
  167. package/dist/core/slash-commands.d.ts.map +1 -1
  168. package/dist/core/slash-commands.js +0 -1
  169. package/dist/core/slash-commands.js.map +1 -1
  170. package/dist/core/timings.d.ts +2 -1
  171. package/dist/core/timings.d.ts.map +1 -1
  172. package/dist/core/timings.js +17 -2
  173. package/dist/core/timings.js.map +1 -1
  174. package/dist/gateway/commands.d.ts +1 -1
  175. package/dist/gateway/commands.d.ts.map +1 -1
  176. package/dist/gateway/commands.js +1 -18
  177. package/dist/gateway/commands.js.map +1 -1
  178. package/dist/main.d.ts +2 -2
  179. package/dist/main.d.ts.map +1 -1
  180. package/dist/main.js +66 -48
  181. package/dist/main.js.map +1 -1
  182. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  183. package/dist/modes/interactive/components/model-selector.js +4 -1
  184. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  185. package/dist/modes/interactive/interactive-mode.d.ts +13 -22
  186. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  187. package/dist/modes/interactive/interactive-mode.js +141 -207
  188. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  189. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  190. package/dist/modes/interactive/theme/theme.js +95 -84
  191. package/dist/modes/interactive/theme/theme.js.map +1 -1
  192. package/dist/node-runtime/agent-session-services-IFJMSX7Z.js +36 -0
  193. package/dist/node-runtime/benchmark-request-UC7PD3V3.js +57 -0
  194. package/dist/node-runtime/brave-UWDA3I22.js +143 -0
  195. package/dist/node-runtime/builtin-extensions-LYZ3BFWQ.js +28 -0
  196. package/dist/node-runtime/chunk-2QKLKMKC.js +173 -0
  197. package/dist/node-runtime/chunk-3GHXVUAK.js +21 -0
  198. package/dist/node-runtime/chunk-3RCWXWAY.js +466 -0
  199. package/dist/node-runtime/chunk-3WFAEVKS.js +115 -0
  200. package/dist/node-runtime/chunk-3X3KZKMI.js +49 -0
  201. package/dist/node-runtime/chunk-4HXHDDCF.js +16 -0
  202. package/dist/node-runtime/chunk-4TLO4PO2.js +3427 -0
  203. package/dist/node-runtime/chunk-4ZWGEEAS.js +69 -0
  204. package/dist/node-runtime/chunk-53YJI7JU.js +137 -0
  205. package/dist/node-runtime/chunk-5P7PZMRU.js +610 -0
  206. package/dist/node-runtime/chunk-7N3YHTYF.js +26 -0
  207. package/dist/node-runtime/chunk-7NBZ5P7I.js +24 -0
  208. package/dist/node-runtime/chunk-A2KQXUJD.js +105 -0
  209. package/dist/node-runtime/chunk-AD6VXAO7.js +342 -0
  210. package/dist/node-runtime/chunk-AHSTJBIB.js +64 -0
  211. package/dist/node-runtime/chunk-AJX357CL.js +20211 -0
  212. package/dist/node-runtime/chunk-ARC4KOTI.js +11178 -0
  213. package/dist/node-runtime/chunk-AUXVGBO4.js +19 -0
  214. package/dist/node-runtime/chunk-AY6CAJSL.js +30 -0
  215. package/dist/node-runtime/chunk-BHO7O6E5.js +296 -0
  216. package/dist/node-runtime/chunk-BI3DHYCN.js +8845 -0
  217. package/dist/node-runtime/chunk-BR7YDUKA.js +109 -0
  218. package/dist/node-runtime/chunk-BRJX2PRC.js +53 -0
  219. package/dist/node-runtime/chunk-C4O2RSQQ.js +37 -0
  220. package/dist/node-runtime/chunk-CCZJ3PYY.js +17 -0
  221. package/dist/node-runtime/chunk-CDFZEWPU.js +8388 -0
  222. package/dist/node-runtime/chunk-CGBXPL3E.js +1171 -0
  223. package/dist/node-runtime/chunk-CJECDQKP.js +19 -0
  224. package/dist/node-runtime/chunk-DAPBPCBP.js +53 -0
  225. package/dist/node-runtime/chunk-DDGMHUOW.js +305 -0
  226. package/dist/node-runtime/chunk-DMMTJQMQ.js +43 -0
  227. package/dist/node-runtime/chunk-DVGWF6A2.js +1180 -0
  228. package/dist/node-runtime/chunk-ECD5L7YI.js +1369 -0
  229. package/dist/node-runtime/chunk-EDBJNRSM.js +46 -0
  230. package/dist/node-runtime/chunk-F4VQFJI2.js +1269 -0
  231. package/dist/node-runtime/chunk-FVDOXRUD.js +96 -0
  232. package/dist/node-runtime/chunk-GZQHMEWL.js +126 -0
  233. package/dist/node-runtime/chunk-H2EOZYMP.js +57 -0
  234. package/dist/node-runtime/chunk-HQCKFM2O.js +56 -0
  235. package/dist/node-runtime/chunk-HYHJIRDW.js +19 -0
  236. package/dist/node-runtime/chunk-I6R76AG7.js +22 -0
  237. package/dist/node-runtime/chunk-IPA627GP.js +296 -0
  238. package/dist/node-runtime/chunk-JHYKXIMM.js +378 -0
  239. package/dist/node-runtime/chunk-KKSIVROT.js +88 -0
  240. package/dist/node-runtime/chunk-LZAW4ZX3.js +633 -0
  241. package/dist/node-runtime/chunk-M3LZLQW2.js +98 -0
  242. package/dist/node-runtime/chunk-MGWCVY6Y.js +47 -0
  243. package/dist/node-runtime/chunk-MJQDX3BA.js +72 -0
  244. package/dist/node-runtime/chunk-MKKH27PH.js +8956 -0
  245. package/dist/node-runtime/chunk-MX3GJNXJ.js +986 -0
  246. package/dist/node-runtime/chunk-N77MY65L.js +966 -0
  247. package/dist/node-runtime/chunk-NUIFPZWX.js +209 -0
  248. package/dist/node-runtime/chunk-OBMWP3I5.js +68 -0
  249. package/dist/node-runtime/chunk-OR4L3IB2.js +42 -0
  250. package/dist/node-runtime/chunk-PBC2Y6GS.js +903 -0
  251. package/dist/node-runtime/chunk-PCGNAY2O.js +1324 -0
  252. package/dist/node-runtime/chunk-PCIGF2XK.js +250 -0
  253. package/dist/node-runtime/chunk-PGAJ5MO5.js +7558 -0
  254. package/dist/node-runtime/chunk-PL6JKXWI.js +3622 -0
  255. package/dist/node-runtime/chunk-PVCDKGR6.js +55 -0
  256. package/dist/node-runtime/chunk-Q4Q6D4IY.js +364 -0
  257. package/dist/node-runtime/chunk-Q5ZU2VRT.js +83 -0
  258. package/dist/node-runtime/chunk-QFWG2RVL.js +5477 -0
  259. package/dist/node-runtime/chunk-QH42CDX3.js +9451 -0
  260. package/dist/node-runtime/chunk-RQ2Q5IYR.js +72 -0
  261. package/dist/node-runtime/chunk-RQ5DNUNG.js +429 -0
  262. package/dist/node-runtime/chunk-RRIZE6QQ.js +17 -0
  263. package/dist/node-runtime/chunk-SN6G4OU6.js +4753 -0
  264. package/dist/node-runtime/chunk-SWSN6HAB.js +53 -0
  265. package/dist/node-runtime/chunk-TQNSPERU.js +949 -0
  266. package/dist/node-runtime/chunk-VRB2IYGG.js +53 -0
  267. package/dist/node-runtime/chunk-VSELYKWU.js +772 -0
  268. package/dist/node-runtime/chunk-W3CVH5RX.js +62 -0
  269. package/dist/node-runtime/chunk-WJVFOIB5.js +24921 -0
  270. package/dist/node-runtime/chunk-WOVTOV5P.js +5653 -0
  271. package/dist/node-runtime/chunk-XBWPBZBN.js +125 -0
  272. package/dist/node-runtime/chunk-XTHQ7XR7.js +509 -0
  273. package/dist/node-runtime/chunk-YF63P5ZT.js +864 -0
  274. package/dist/node-runtime/chunk-YSKSB3BJ.js +295 -0
  275. package/dist/node-runtime/chunk-ZCHMJ34K.js +130 -0
  276. package/dist/node-runtime/chunk-ZKMFUD3Q.js +2834 -0
  277. package/dist/node-runtime/cli-runtime.js +81 -0
  278. package/dist/node-runtime/clipboard-OZ63BBC6.js +12 -0
  279. package/dist/node-runtime/clipboard-image-7QR6GXVA.js +13 -0
  280. package/dist/node-runtime/command-L3LAHDIH.js +13 -0
  281. package/dist/node-runtime/commands-RL5YBW5I.js +291 -0
  282. package/dist/node-runtime/config-FMEOZSWE.js +77 -0
  283. package/dist/node-runtime/curator-server-XCM43VEF.js +3816 -0
  284. package/dist/node-runtime/customize-XEXL2DGQ.js +12 -0
  285. package/dist/node-runtime/direct-tool-executor-JVDXTO7A.js +188 -0
  286. package/dist/node-runtime/exa-LL64QZR2.js +329 -0
  287. package/dist/node-runtime/export-html-KR26FOUZ.js +150 -0
  288. package/dist/node-runtime/extension-input-RV5N6APL.js +14 -0
  289. package/dist/node-runtime/extension-selector-CPD5LWDD.js +14 -0
  290. package/dist/node-runtime/extract-XLQSJN4V.js +17 -0
  291. package/dist/node-runtime/file-sync-HCOP2QVF.js +117 -0
  292. package/dist/node-runtime/gateway-X2TI5X7F.js +2484 -0
  293. package/dist/node-runtime/gemini-api-QE7ANVDZ.js +29 -0
  294. package/dist/node-runtime/gemini-search-U7SUMPQA.js +330 -0
  295. package/dist/node-runtime/gemini-url-context-PXWCBQHK.js +103 -0
  296. package/dist/node-runtime/gemini-web-MM446SEH.js +14 -0
  297. package/dist/node-runtime/github-extract-F64RZOEA.js +619 -0
  298. package/dist/node-runtime/goal-CZQ7FFQJ.js +1831 -0
  299. package/dist/node-runtime/index.js +859 -0
  300. package/dist/node-runtime/init-NJV2T55N.js +28 -0
  301. package/dist/node-runtime/install-cli-TH7IJJQQ.js +308 -0
  302. package/dist/node-runtime/interactive-mode-KOM35YF2.js +56 -0
  303. package/dist/node-runtime/interactive-view-U6OILKF3.js +249 -0
  304. package/dist/node-runtime/lsp-manager-3ASUSO4T.js +1104 -0
  305. package/dist/node-runtime/lunr-cron-YJ5UHYRD.js +268 -0
  306. package/dist/node-runtime/main.js +54 -0
  307. package/dist/node-runtime/mcp-auth-flow-QIXHW6QN.js +32 -0
  308. package/dist/node-runtime/mcp-panel-IIGMXQGP.js +501 -0
  309. package/dist/node-runtime/mcp-setup-panel-FEK7663I.js +355 -0
  310. package/dist/node-runtime/memory-cap-3S4XRLNP.js +20 -0
  311. package/dist/node-runtime/model-tiers-NJLHUEGK.js +20 -0
  312. package/dist/node-runtime/openai-search-B3MSNCQA.js +288 -0
  313. package/dist/node-runtime/package-manager-cli-TZZHJCVI.js +749 -0
  314. package/dist/node-runtime/parallel-AI2MNSCU.js +265 -0
  315. package/dist/node-runtime/parser-manager-TQHWYDH7.js +152 -0
  316. package/dist/node-runtime/pdf-extract-IPE6H4HP.js +57 -0
  317. package/dist/node-runtime/perplexity-QVJW3I35.js +12 -0
  318. package/dist/node-runtime/pi-intercom-EEMBGQID.js +2215 -0
  319. package/dist/node-runtime/pi-mcp-adapter-QFB37AVN.js +422 -0
  320. package/dist/node-runtime/pi-ollama-cloud-4VZRMULP.js +1440 -0
  321. package/dist/node-runtime/pi-prompt-template-model-4QT4LLXF.js +3946 -0
  322. package/dist/node-runtime/pi-subagents-7XJ4H53P.js +6023 -0
  323. package/dist/node-runtime/pi-web-access-DPGAVKOA.js +1864 -0
  324. package/dist/node-runtime/print-mode-VWIRFDAC.js +12 -0
  325. package/dist/node-runtime/proxy-modes-HEEFK4KC.js +685 -0
  326. package/dist/node-runtime/rpc-entry.js +62 -0
  327. package/dist/node-runtime/rpc-mode-SJNSOA4G.js +13 -0
  328. package/dist/node-runtime/runtime-bridges-PPHNBFWL.js +14 -0
  329. package/dist/node-runtime/session-manager-MQNBYACL.js +35 -0
  330. package/dist/node-runtime/session-selector-5AZLJS6U.js +14 -0
  331. package/dist/node-runtime/settings-manager-5LF2VQWC.js +21 -0
  332. package/dist/node-runtime/src-Y7JSCK64.js +2407 -0
  333. package/dist/node-runtime/subagent-executor-5RNDEPIJ.js +8483 -0
  334. package/dist/node-runtime/summary-review-YSMXKITO.js +228 -0
  335. package/dist/node-runtime/tavily-WEZFVFP7.js +154 -0
  336. package/dist/node-runtime/timings-UAD5BEAS.js +16 -0
  337. package/dist/node-runtime/tool-renderer-MV5O452K.js +204 -0
  338. package/dist/node-runtime/update-cli-A253SZ7P.js +73 -0
  339. package/dist/node-runtime/v4-5MNC3H7G.js +424 -0
  340. package/dist/node-runtime/video-extract-OYT5WKS5.js +304 -0
  341. package/dist/node-runtime/workspace-index-6DBXSTJ6.js +163 -0
  342. package/dist/node-runtime/youtube-extract-TQYKGFGS.js +264 -0
  343. package/dist/startup/benchmark-request.d.ts +3 -0
  344. package/dist/startup/benchmark-request.d.ts.map +1 -0
  345. package/dist/startup/benchmark-request.js +65 -0
  346. package/dist/startup/benchmark-request.js.map +1 -0
  347. package/dist/startup/interactive-view.d.ts +55 -0
  348. package/dist/startup/interactive-view.d.ts.map +1 -0
  349. package/dist/startup/interactive-view.js +332 -0
  350. package/dist/startup/interactive-view.js.map +1 -0
  351. package/dist/startup/launch-routing.d.ts.map +1 -1
  352. package/dist/startup/launch-routing.js +9 -10
  353. package/dist/startup/launch-routing.js.map +1 -1
  354. package/dist/startup/startup-milestones.d.ts +1 -1
  355. package/dist/startup/startup-milestones.d.ts.map +1 -1
  356. package/dist/startup/startup-milestones.js +3 -2
  357. package/dist/startup/startup-milestones.js.map +1 -1
  358. package/dist/utils/await-with-abort.d.ts +2 -0
  359. package/dist/utils/await-with-abort.d.ts.map +1 -0
  360. package/dist/utils/await-with-abort.js +19 -0
  361. package/dist/utils/await-with-abort.js.map +1 -0
  362. package/dist/utils/syntax-highlight.d.ts.map +1 -1
  363. package/dist/utils/syntax-highlight.js +10 -4
  364. package/dist/utils/syntax-highlight.js.map +1 -1
  365. package/docs/compaction.md +5 -3
  366. package/docs/development.md +5 -1
  367. package/docs/features.md +0 -1
  368. package/docs/interactive-startup.md +98 -0
  369. package/docs/model-catalog.md +29 -0
  370. package/docs/usage.md +0 -1
  371. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  372. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  373. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  374. package/examples/extensions/gondolin/package-lock.json +2 -2
  375. package/examples/extensions/gondolin/package.json +1 -1
  376. package/examples/extensions/sandbox/package-lock.json +2 -2
  377. package/examples/extensions/sandbox/package.json +1 -1
  378. package/examples/extensions/with-deps/package-lock.json +2 -2
  379. package/examples/extensions/with-deps/package.json +1 -1
  380. package/package.json +20 -20
  381. package/dist/core/swarm.d.ts +0 -23
  382. package/dist/core/swarm.d.ts.map +0 -1
  383. package/dist/core/swarm.js +0 -45
  384. package/dist/core/swarm.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/builtin-extensions/pi-lsp-extension/src/index.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\n/**\n * pi-lsp-extension — Pi coding agent extension for LSP integration.\n *\n * Exposes Language Server Protocol capabilities as tools the LLM can call:\n * - lsp_diagnostics: compilation errors and warnings\n * - lsp_hover: type info and docs at a position\n * - lsp_definition: go to definition\n * - lsp_references: find all references\n * - lsp_symbols: file/workspace symbol search\n * - lsp_rename: preview rename refactoring\n * - lsp_completions: code completion suggestions at a position\n * - lsp_code_actions: quick fixes, refactorings, and source actions\n *\n * Position-based tools (hover, definition, references, rename, code_actions)\n * accept an optional `query` parameter as an alternative to line/character,\n * resolving a symbol name to its position automatically.\n *\n * Usage:\n * 1. npm install in this directory\n * 2. Add to pi via settings.json extensions, or: pi -e ./src/index.ts\n * 3. LSP servers start lazily when you first use a tool on a file\n */\n\nimport type { ExtensionAPI } from \"@ashx-j/lunr-dev\";\nimport {\n isReadToolResult,\n isWriteToolResult,\n isEditToolResult,\n} from \"@ashx-j/lunr-dev\";\nimport { DiagnosticSeverity, type Diagnostic } from \"vscode-languageserver-protocol\";\n\nimport { LspManager, type ServerConfig, type LspManagerCallbacks } from \"./lsp-manager.js\";\nimport { FileSync } from \"./file-sync.js\";\nimport { TreeSitterManager } from \"./tree-sitter/parser-manager.js\";\nimport { WorkspaceIndex } from \"./tree-sitter/workspace-index.js\";\nimport { type WorkspaceProvider, DefaultWorkspaceProvider } from \"./workspace-provider.js\";\nimport { createDiagnosticsTool } from \"./tools/diagnostics.js\";\nimport { createHoverTool } from \"./tools/hover.js\";\nimport { createDefinitionTool } from \"./tools/definition.js\";\nimport { createReferencesTool } from \"./tools/references.js\";\nimport { createSymbolsTool } from \"./tools/symbols.js\";\nimport { createRenameTool } from \"./tools/rename.js\";\nimport { createCodeOverviewTool } from \"./tools/code-overview.js\";\nimport { createCompletionsTool } from \"./tools/completions.js\";\nimport { createCodeSearchTool } from \"./tools/code-search.js\";\nimport { createCodeRewriteTool } from \"./tools/code-rewrite.js\";\nimport { createCodeActionsTool } from \"./tools/code-actions.js\";\nimport { syntheticDotLocks } from \"./tools/completions.js\";\nimport { relative } from \"node:path\";\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { DIAGNOSTIC_SETTLE_DELAY_MS } from \"./shared/timing.js\";\n\n/**\n * Project-level LSP config — loaded from `.pi-lsp.json` in the workspace root.\n *\n * Example:\n * ```json\n * {\n * \"autoStart\": [\"java\", \"typescript\"],\n * \"lombokJar\": \"env/Lombok-1.18.x/runtime/lib/lombok-1.18.42.jar\",\n * \"servers\": {\n * \"python\": { \"command\": \"pylsp\", \"args\": [] }\n * }\n * }\n * ```\n */\ninterface ProjectLspConfig {\n /** Languages to start eagerly on session_start (e.g. [\"java\", \"typescript\"]) */\n autoStart?: string[];\n /** Path to Lombok jar (absolute or relative to project root). \"auto\" to auto-detect. */\n lombokJar?: string;\n /** Custom server configs keyed by language ID */\n servers?: Record<string, { command: string; args?: string[]; env?: Record<string, string>; initializationOptions?: Record<string, unknown>; settings?: Record<string, unknown> }>;\n /**\n * Auto-inject LSP error diagnostics into write/edit tool results.\n * Set to false to disable, or provide an array of language IDs to enable selectively.\n * Default: true (all languages).\n *\n * Examples:\n * true — inject for all languages\n * false — never inject\n * [\"typescript\"] — only inject for TypeScript files\n */\n autoInjectDiagnostics?: boolean | string[];\n}\n\n/** Load .pi-lsp.json from a directory. Returns null if not found or invalid. */\nfunction loadProjectConfig(dir: string): ProjectLspConfig | null {\n const configPath = join(dir, \".pi-lsp.json\");\n try {\n if (!existsSync(configPath)) return null;\n const raw = readFileSync(configPath, \"utf-8\");\n const parsed = JSON.parse(raw);\n if (typeof parsed !== \"object\" || parsed === null) return null;\n return parsed as ProjectLspConfig;\n } catch {\n return null;\n }\n}\n\nexport default function lspExtension(pi: ExtensionAPI) {\n // Prevent EPIPE errors from LSP server exits from crashing the host process.\n // When an LSP server exits unexpectedly, in-flight writes to its stdin pipe\n // can produce EPIPE errors that escape all connection-level error handlers.\n const origListeners = process.listeners(\"uncaughtException\");\n process.on(\"uncaughtException\", (err: any) => {\n if (err?.code === \"EPIPE\") return; // swallow — LSP server exited, harmless\n // Re-throw for other handlers\n for (const listener of origListeners) (listener as any)(err);\n if (origListeners.length === 0) {\n console.error(\"[LSP] Uncaught exception:\", err);\n }\n });\n\n let manager: LspManager | null = null;\n let fileSync: FileSync | null = null;\n let treeSitter: TreeSitterManager | null = null;\n let workspaceIndex: WorkspaceIndex | null = null;\n let pendingProvider: WorkspaceProvider | null = null;\n // Store latest ctx for lifecycle callbacks (updated on each event)\n let latestCtx: any = null;\n // Project config — loaded on session_start, used by auto-injection guard\n let projectConfig: ProjectLspConfig | null = null;\n\n /**\n * Run `fn` with the currently captured ctx, swallowing stale-ctx errors.\n *\n * Lifecycle callbacks from LspManager (server ready, workspace setup, etc.)\n * and `pi.events` listeners can fire AFTER the session is replaced or reloaded,\n * at which point the captured ctx has been invalidated and any property access\n * throws via ExtensionRunner.assertActive(). We can't use optional chaining to\n * dodge it because the `ui` / `theme` getters themselves run assertActive().\n */\n const withLatestCtx = (fn: (ctx: any) => void) => {\n const ctx = latestCtx;\n if (!ctx) return;\n try {\n fn(ctx);\n } catch (err: any) {\n if (typeof err?.message === \"string\" && err.message.includes(\"stale after session\")) {\n // Session was replaced/reloaded — drop the stale ctx and move on.\n latestCtx = null;\n return;\n }\n throw err;\n }\n };\n\n // Listen for external workspace providers (e.g. bemol extension).\n // Also check if one was already registered before we loaded (load order varies).\n // Store as pendingProvider so it's available when the manager is created later.\n const applyProvider = (data: unknown) => {\n const provider = data as WorkspaceProvider;\n pendingProvider = provider;\n if (manager) {\n manager.setWorkspaceProvider(provider);\n }\n // Update status if we have a UI context\n const statusText = provider.getStatusText();\n if (!statusText) return;\n withLatestCtx((ctx) => {\n if (!ctx.ui?.theme) return;\n ctx.ui.setStatus(\"lsp\", ctx.ui.theme.fg(\"accent\", `LSP: ${statusText}`));\n });\n };\n\n pi.events.on(\"lsp:register-workspace-provider\", applyProvider);\n\n // Check for provider registered before our listener existed\n const existing = (pi.events as any)[\"lsp:workspace-provider\"];\n if (existing) applyProvider(existing);\n\n /** Build lifecycle callbacks that update UI status */\n const setLspStatus = (color: string, text: string) => {\n withLatestCtx((ctx) => {\n if (!ctx.ui?.theme) return;\n ctx.ui.setStatus(\"lsp\", ctx.ui.theme.fg(color, text));\n });\n };\n\n const makeCallbacks = (): LspManagerCallbacks => ({\n onWorkspaceSetupStart: () => {\n setLspStatus(\"warning\", \"LSP: workspace setup...\");\n },\n onWorkspaceSetupEnd: (success: boolean, duration: number) => {\n const secs = (duration / 1000).toFixed(1);\n if (success) {\n setLspStatus(\"accent\", `LSP: workspace ready (${secs}s)`);\n } else {\n setLspStatus(\"warning\", `LSP: workspace setup failed (${secs}s)`);\n }\n },\n onServerStart: (languageId: string, command: string) => {\n setLspStatus(\"warning\", `LSP: starting ${languageId} (${command})...`);\n },\n onServerReady: (languageId: string) => {\n setLspStatus(\"accent\", `LSP: ${languageId} ready`);\n },\n onServerError: (languageId: string, _error: string) => {\n setLspStatus(\"error\", `LSP: ${languageId} failed`);\n },\n onServerCrash: (languageId: string, restarting: boolean, attempt: number) => {\n if (restarting) {\n setLspStatus(\"warning\", `LSP: restarting ${languageId}... (attempt ${attempt}/3)`);\n } else {\n setLspStatus(\"error\", `LSP: ${languageId} crashed — auto-restart exhausted`);\n }\n },\n });\n\n // Create manager eagerly so tools can reference it, but servers start lazily\n const getManager = (): LspManager => {\n if (!manager) {\n manager = new LspManager(process.cwd(), undefined, makeCallbacks(), undefined, pendingProvider ?? undefined);\n fileSync = new FileSync(manager);\n fileSync.setSyntheticDotChecker((uri) => syntheticDotLocks.has(uri));\n treeSitter = new TreeSitterManager();\n workspaceIndex = new WorkspaceIndex(process.cwd(), treeSitter);\n fileSync.setTreeSitter(treeSitter, workspaceIndex);\n }\n return manager;\n };\n\n const getFileSync = (): FileSync => {\n if (!fileSync) {\n getManager(); // ensures fileSync is created\n }\n return fileSync!;\n };\n\n const getTreeSitter = (): TreeSitterManager => {\n if (!treeSitter) {\n getManager(); // ensures treeSitter is created\n }\n return treeSitter!;\n };\n\n const getWorkspaceIndex = (): WorkspaceIndex => {\n if (!workspaceIndex) {\n getManager(); // ensures workspaceIndex is created\n }\n return workspaceIndex!;\n };\n\n // Initialize manager (uses cwd at session start time)\n pi.on(\"session_start\", async (_event, ctx) => {\n latestCtx = ctx;\n\n // If manager was already created eagerly (e.g. by a tool before session_start),\n // shut it down so we can re-create with the correct ctx.cwd.\n if (manager) {\n await manager.shutdownAll().catch(() => {});\n if (treeSitter) treeSitter.shutdown();\n }\n\n manager = new LspManager(ctx.cwd, undefined, makeCallbacks(), undefined, pendingProvider ?? undefined);\n fileSync = new FileSync(manager);\n fileSync.setSyntheticDotChecker((uri) => syntheticDotLocks.has(uri));\n treeSitter = new TreeSitterManager();\n workspaceIndex = new WorkspaceIndex(ctx.cwd, treeSitter);\n fileSync.setTreeSitter(treeSitter, workspaceIndex);\n\n // Initialize tree-sitter in the background (don't block session start)\n treeSitter.init().catch((err) => {\n console.error(`[pi-lsp-extension] tree-sitter WASM init failed: ${err?.message ?? err}`);\n });\n\n // Show workspace provider status\n const wsProvider = manager.workspace;\n const statusText = wsProvider.getStatusText();\n if (statusText) {\n ctx.ui.setStatus(\"lsp\", ctx.ui.theme.fg(\"accent\", `LSP: ${statusText}`));\n } else {\n ctx.ui.setStatus(\"lsp\", ctx.ui.theme.fg(\"dim\", \"LSP: idle\"));\n }\n\n // Load project config and apply settings\n projectConfig = loadProjectConfig(ctx.cwd);\n if (projectConfig) {\n // Apply custom server configs\n if (projectConfig.servers) {\n for (const [lang, serverConf] of Object.entries(projectConfig.servers)) {\n manager.setServerConfig(lang, {\n command: serverConf.command,\n args: serverConf.args ?? [],\n env: serverConf.env,\n initializationOptions: serverConf.initializationOptions,\n settings: serverConf.settings,\n });\n }\n }\n\n // Set Lombok jar path (explicit path or \"auto\" for auto-detection)\n if (projectConfig.lombokJar) {\n if (projectConfig.lombokJar !== \"auto\") {\n manager.setLombokJar(projectConfig.lombokJar);\n }\n // \"auto\" is the default behavior — findLombokJar() already auto-detects.\n // Setting it explicitly just confirms the user wants Lombok support.\n }\n\n // Auto-start configured languages in the background\n if (projectConfig.autoStart && projectConfig.autoStart.length > 0) {\n const langs = projectConfig.autoStart;\n const lombokNote = langs.includes(\"java\") && manager.getLombokJar()\n ? ` (lombok: ${manager.getLombokJar()?.split(\"/\").pop()})` : \"\";\n setLspStatus(\"warning\", `LSP: auto-starting ${langs.join(\", \")}${lombokNote}...`);\n manager.startEagerly(langs);\n }\n }\n });\n\n // Register all LSP tools\n // Tools call getManager() lazily so they work even if session_start hasn't fired\n const managerProxy = new Proxy({} as LspManager, {\n get(_target, prop) {\n return (getManager() as any)[prop];\n },\n });\n\n const treeSitterProxy = new Proxy({} as TreeSitterManager, {\n get(_target, prop) {\n return (getTreeSitter() as any)[prop];\n },\n });\n\n const workspaceIndexProxy = new Proxy({} as WorkspaceIndex, {\n get(_target, prop) {\n return (getWorkspaceIndex() as any)[prop];\n },\n });\n\n pi.registerTool(createDiagnosticsTool(managerProxy, treeSitterProxy));\n pi.registerTool(createHoverTool(managerProxy, treeSitterProxy));\n pi.registerTool(createDefinitionTool(managerProxy, treeSitterProxy, workspaceIndexProxy));\n pi.registerTool(createReferencesTool(managerProxy, treeSitterProxy));\n pi.registerTool(createSymbolsTool(managerProxy, treeSitterProxy, workspaceIndexProxy));\n pi.registerTool(createRenameTool(managerProxy, treeSitterProxy));\n pi.registerTool(createCodeActionsTool(managerProxy, treeSitterProxy));\n pi.registerTool(createCompletionsTool(managerProxy, {\n getTrackedVersion: (uri) => getFileSync().getTrackedVersion(uri),\n setTrackedVersion: (uri, v) => getFileSync().setTrackedVersion(uri, v),\n isSyntheticDotActive: (uri) => syntheticDotLocks.has(uri),\n }, treeSitterProxy));\n const getRootDir = () => manager?.resolvePath(\".\") ?? process.cwd();\n pi.registerTool(createCodeOverviewTool(getRootDir, treeSitterProxy, workspaceIndexProxy));\n pi.registerTool(createCodeSearchTool(getRootDir, treeSitterProxy));\n pi.registerTool(createCodeRewriteTool(getRootDir, treeSitterProxy, {\n onFileModified: (filePath: string) => {\n getFileSync().handleFileWrite(filePath).catch(() => {});\n },\n }));\n pi.registerTool(createCodeActionsTool(managerProxy, treeSitterProxy));\n\n // File sync: track file reads/writes/edits\n // After writes/edits, append file-scoped error diagnostics to the tool result\n pi.on(\"tool_result\", async (event) => {\n const sync = getFileSync();\n\n try {\n if (isReadToolResult(event) && !event.isError) {\n const path = (event.input as any)?.path;\n if (path) await sync.handleFileRead(path);\n }\n\n if (isWriteToolResult(event) && !event.isError) {\n const path = (event.input as any)?.path;\n if (path) await sync.handleFileWrite(path);\n }\n\n if (isEditToolResult(event) && !event.isError) {\n const path = (event.input as any)?.path;\n if (path) await sync.handleFileWrite(path);\n }\n } catch {\n // File sync errors are non-fatal\n }\n\n // Auto-append diagnostics for the changed file (write/edit only)\n if ((isWriteToolResult(event) || isEditToolResult(event)) && !event.isError && manager) {\n const path = (event.input as any)?.path;\n if (!path) return;\n\n const languageId = manager.getLanguageId(path);\n if (!languageId) return;\n\n // Check autoInjectDiagnostics config\n const inject = projectConfig?.autoInjectDiagnostics;\n if (inject === false) return;\n if (Array.isArray(inject) && !inject.includes(languageId)) return;\n\n const client = manager.getRunningClient(languageId);\n if (!client) return;\n\n // Wait briefly for the LSP to publish updated diagnostics\n await new Promise((r) => setTimeout(r, DIAGNOSTIC_SETTLE_DELAY_MS));\n\n const uri = manager.getFileUri(path);\n const diagnostics = client.getDiagnostics(uri);\n const errors = diagnostics.filter((d) => d.severity === DiagnosticSeverity.Error);\n\n if (errors.length === 0) return;\n\n // Build a compact summary — just errors, max 10 lines\n const relPath = relative(manager.resolvePath(\".\"), manager.resolvePath(path));\n const lines = errors.slice(0, 10).map((d) => {\n const line = d.range.start.line + 1;\n const col = d.range.start.character + 1;\n const source = d.source ? ` [${d.source}]` : \"\";\n return `${relPath}:${line}:${col} error: ${d.message}${source}`;\n });\n if (errors.length > 10) {\n lines.push(`... and ${errors.length - 10} more error(s)`);\n }\n\n const summary = `\\n\\n⚠ LSP: ${errors.length} error(s) in ${relPath}:\\n${lines.join(\"\\n\")}`;\n\n return {\n content: [\n ...event.content,\n { type: \"text\" as const, text: summary },\n ],\n };\n }\n });\n\n // Update status after tool execution ends\n pi.on(\"tool_execution_end\", async (_event, ctx) => {\n latestCtx = ctx;\n if (!manager) return;\n const statuses = manager.getStatus();\n const running = statuses.filter((s) => s.running);\n if (running.length === 0) {\n ctx.ui.setStatus(\"lsp\", ctx.ui.theme.fg(\"dim\", \"LSP: idle\"));\n } else {\n const totalDiags = running.reduce((n, s) => n + s.diagnosticsCount, 0);\n const langs = running.map((s) => s.languageId).join(\", \");\n let status = `LSP: ${langs}`;\n if (totalDiags > 0) {\n status += ` (${totalDiags} diagnostic${totalDiags !== 1 ? \"s\" : \"\"})`;\n }\n ctx.ui.setStatus(\"lsp\", ctx.ui.theme.fg(\"accent\", status));\n }\n });\n\n // /lsp command — show server status\n pi.registerCommand(\"lsp\", {\n description: \"Show LSP server status\",\n handler: async (_args, ctx) => {\n if (!manager) {\n ctx.ui.notify(\"LSP manager not initialized\", \"warning\");\n return;\n }\n\n const statuses = manager.getStatus();\n if (statuses.length === 0) {\n ctx.ui.notify(\"No LSP servers configured\", \"info\");\n return;\n }\n\n const lines = statuses.map((s) => {\n const icon = s.running ? \"🟢\" : \"⚪\";\n const diags =\n s.diagnosticsCount > 0 ? ` (${s.diagnosticsCount} diagnostics)` : \"\";\n const shared = s.shared ? \" [shared]\" : \"\";\n return `${icon} ${s.languageId}: ${s.command}${diags}${shared}`;\n });\n\n ctx.ui.notify(lines.join(\"\\n\"), \"info\");\n },\n });\n\n // /lsp-restart command — restart a specific language server\n pi.registerCommand(\"lsp-restart\", {\n description: \"Restart an LSP server: /lsp-restart <language> (e.g. java, typescript)\",\n handler: async (args, ctx) => {\n if (!manager) {\n ctx.ui.notify(\"LSP manager not initialized\", \"warning\");\n return;\n }\n\n const languageId = args?.trim().toLowerCase();\n if (!languageId) {\n // Show running servers and usage\n const statuses = manager.getStatus().filter((s) => s.running);\n if (statuses.length === 0) {\n ctx.ui.notify(\"No LSP servers are running.\\n\\nUsage: /lsp-restart <language>\", \"info\");\n } else {\n const langs = statuses.map((s) => s.languageId).join(\", \");\n ctx.ui.notify(\n `Running servers: ${langs}\\n\\nUsage: /lsp-restart <language>\\nExample: /lsp-restart java`,\n \"info\"\n );\n }\n return;\n }\n\n ctx.ui.setStatus(\"lsp\", ctx.ui.theme.fg(\"warning\", `LSP: restarting ${languageId}...`));\n ctx.ui.notify(`Restarting ${languageId} server (kills daemon if shared)...`, \"info\");\n\n try {\n await manager.restartServer(languageId);\n const lombokJar = languageId === \"java\" ? manager.getLombokJar() : null;\n const lombokNote = lombokJar ? `\\nLombok: ${lombokJar}` : \"\";\n ctx.ui.notify(`${languageId} server restarted successfully.${lombokNote}`, \"info\");\n ctx.ui.setStatus(\"lsp\", ctx.ui.theme.fg(\"accent\", `LSP: ${languageId} ready`));\n } catch (err: any) {\n ctx.ui.notify(`Failed to restart ${languageId}: ${err.message}`, \"error\");\n ctx.ui.setStatus(\"lsp\", ctx.ui.theme.fg(\"error\", `LSP: ${languageId} restart failed`));\n }\n },\n });\n\n // /lsp-config command — add or override server configuration\n pi.registerCommand(\"lsp-config\", {\n description:\n \"Configure an LSP server: /lsp-config <language> <command> [args...]\",\n handler: async (args, ctx) => {\n if (!args?.trim()) {\n ctx.ui.notify(\n \"Usage: /lsp-config <language> <command> [args...]\\nExample: /lsp-config python pylsp\",\n \"info\"\n );\n return;\n }\n\n const parts = args.trim().split(/\\s+/);\n if (parts.length < 2) {\n ctx.ui.notify(\n \"Usage: /lsp-config <language> <command> [args...]\",\n \"warning\"\n );\n return;\n }\n\n const [languageId, command, ...serverArgs] = parts;\n const config: ServerConfig = { command, args: serverArgs };\n\n getManager().setServerConfig(languageId, config);\n ctx.ui.notify(\n `Configured LSP for ${languageId}: ${command} ${serverArgs.join(\" \")}`,\n \"info\"\n );\n },\n });\n\n // /lsp-lombok command — set Lombok jar path for Java\n pi.registerCommand(\"lsp-lombok\", {\n description:\n \"Set Lombok jar path for Java: /lsp-lombok <path-to-lombok.jar>\",\n handler: async (args, ctx) => {\n const mgr = getManager();\n\n if (!args?.trim()) {\n const current = mgr.getLombokJar();\n if (current) {\n ctx.ui.notify(`Lombok jar: ${current}`, \"info\");\n } else {\n ctx.ui.notify(\n \"No Lombok jar configured or detected.\\n\\n\" +\n \"Usage: /lsp-lombok <path-to-lombok.jar>\\n\" +\n \"Or set LOMBOK_JAR environment variable.\\n\\n\" +\n \"Download from: https://projectlombok.org/download\",\n \"info\"\n );\n }\n return;\n }\n\n const jarPath = args.trim();\n const { existsSync } = await import(\"node:fs\");\n const { resolve } = await import(\"node:path\");\n const resolved = resolve(ctx.cwd, jarPath);\n\n if (!existsSync(resolved)) {\n ctx.ui.notify(`File not found: ${resolved}`, \"error\");\n return;\n }\n\n if (!resolved.endsWith(\".jar\")) {\n ctx.ui.notify(`Warning: ${resolved} doesn't end in .jar — setting anyway`, \"warning\");\n }\n\n mgr.setLombokJar(resolved);\n ctx.ui.notify(`Lombok jar set: ${resolved}`, \"info\");\n },\n });\n\n // Clean shutdown (includes workspace provider, all LSP servers, and tree-sitter)\n pi.on(\"session_shutdown\", async () => {\n // Drop the captured ctx immediately — once shutdown fires, any late\n // LSP manager callback that reaches setLspStatus/applyProvider would\n // otherwise hit an invalidated ctx and throw an uncaught exception.\n latestCtx = null;\n if (manager) {\n await manager.shutdownAll();\n manager = null;\n fileSync = null;\n }\n if (treeSitter) {\n treeSitter.shutdown();\n treeSitter = null;\n }\n workspaceIndex = null;\n });\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/builtin-extensions/pi-lsp-extension/src/index.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\n/**\n * pi-lsp-extension — Pi coding agent extension for LSP integration.\n *\n * Exposes Language Server Protocol capabilities as tools the LLM can call:\n * - lsp_diagnostics: compilation errors and warnings\n * - lsp_hover: type info and docs at a position\n * - lsp_definition: go to definition\n * - lsp_references: find all references\n * - lsp_symbols: file/workspace symbol search\n * - lsp_rename: preview rename refactoring\n * - lsp_completions: code completion suggestions at a position\n * - lsp_code_actions: quick fixes, refactorings, and source actions\n *\n * Position-based tools (hover, definition, references, rename, code_actions)\n * accept an optional `query` parameter as an alternative to line/character,\n * resolving a symbol name to its position automatically.\n *\n * Tool schemas, commands, and hooks register immediately. Heavy managers\n * (LspManager, FileSync, Tree-sitter/WASM, WorkspaceIndex) load on first use.\n *\n * Usage:\n * 1. npm install in this directory\n * 2. Add to pi via settings.json extensions, or: pi -e ./src/index.ts\n * 3. LSP servers start lazily when you first use a tool on a file\n */\n\nimport type { ExtensionAPI, ToolDefinition } from \"@ashx-j/lunr-dev\";\nimport type { TSchema } from \"typebox\";\nimport { awaitWithAbort } from \"../../../utils/await-with-abort.ts\";\nimport {\n isReadToolResult,\n isWriteToolResult,\n isEditToolResult,\n} from \"../../../core/extensions/types.js\";\nimport { DiagnosticSeverity } from \"vscode-languageserver-protocol\";\n\nimport type { WorkspaceProvider } from \"./workspace-provider.js\";\nimport { LspRuntimeHost, type LspRuntimeCallbacks } from \"./runtime.js\";\nimport { createDiagnosticsTool } from \"./tools/diagnostics.js\";\nimport { createHoverTool } from \"./tools/hover.js\";\nimport { createDefinitionTool } from \"./tools/definition.js\";\nimport { createReferencesTool } from \"./tools/references.js\";\nimport { createSymbolsTool } from \"./tools/symbols.js\";\nimport { createRenameTool } from \"./tools/rename.js\";\nimport { createCodeOverviewTool } from \"./tools/code-overview.js\";\nimport { createCompletionsTool } from \"./tools/completions.js\";\nimport { createCodeSearchTool } from \"./tools/code-search.js\";\nimport { createCodeRewriteTool } from \"./tools/code-rewrite.js\";\nimport { createCodeActionsTool } from \"./tools/code-actions.js\";\nimport { syntheticDotLocks } from \"./tools/completions.js\";\nimport { relative } from \"node:path\";\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { join, resolve } from \"node:path\";\nimport { DIAGNOSTIC_SETTLE_DELAY_MS } from \"./shared/timing.js\";\n\n/**\n * Project-level LSP config — loaded from `.pi-lsp.json` in the workspace root.\n *\n * Example:\n * ```json\n * {\n * \"autoStart\": [\"java\", \"typescript\"],\n * \"lombokJar\": \"env/Lombok-1.18.x/runtime/lib/lombok-1.18.42.jar\",\n * \"servers\": {\n * \"python\": { \"command\": \"pylsp\", \"args\": [] }\n * }\n * }\n * ```\n */\ninterface ProjectLspConfig {\n /** Languages to start eagerly on session_start (e.g. [\"java\", \"typescript\"]) */\n autoStart?: string[];\n /** Path to Lombok jar (absolute or relative to project root). \"auto\" to auto-detect. */\n lombokJar?: string;\n /** Custom server configs keyed by language ID */\n servers?: Record<string, { command: string; args?: string[]; env?: Record<string, string>; initializationOptions?: Record<string, unknown>; settings?: Record<string, unknown> }>;\n /**\n * Auto-inject LSP error diagnostics into write/edit tool results.\n * Set to false to disable, or provide an array of language IDs to enable selectively.\n * Default: true (all languages).\n *\n * Examples:\n * true — inject for all languages\n * false — never inject\n * [\"typescript\"] — only inject for TypeScript files\n */\n autoInjectDiagnostics?: boolean | string[];\n}\n\ninterface ServerConfig {\n command: string;\n args: string[];\n env?: Record<string, string>;\n initializationOptions?: Record<string, unknown>;\n settings?: Record<string, unknown>;\n}\n\n/** Load .pi-lsp.json from a directory. Returns null if not found or invalid. */\nfunction loadProjectConfig(dir: string): ProjectLspConfig | null {\n const configPath = join(dir, \".pi-lsp.json\");\n try {\n if (!existsSync(configPath)) return null;\n const raw = readFileSync(configPath, \"utf-8\");\n const parsed = JSON.parse(raw);\n if (typeof parsed !== \"object\" || parsed === null) return null;\n return parsed as ProjectLspConfig;\n } catch {\n return null;\n }\n}\n\nfunction createServiceProxy<T extends object>(getTarget: () => T | null, label: string): T {\n return new Proxy({} as T, {\n get(_target, prop, receiver) {\n const service = getTarget();\n if (!service) {\n throw new Error(`${label} is not initialized`);\n }\n const value = Reflect.get(service, prop, service);\n if (typeof value === \"function\") {\n return value.bind(service);\n }\n return value;\n },\n });\n}\n\nfunction registerToolWithRuntime<T extends TSchema, D>(pi: ExtensionAPI, tool: ToolDefinition<T, D>, ensure: () => Promise<unknown>, host: LspRuntimeHost) {\n pi.registerTool({\n ...tool,\n async execute(id, params, signal, onUpdate, ctx) {\n const generation = host.getGeneration();\n signal?.throwIfAborted();\n await awaitWithAbort(ensure(), signal);\n signal?.throwIfAborted();\n if (host.getGeneration() !== generation) throw new Error(\"LSP session changed before execution\");\n return tool.execute(id, params, signal, onUpdate, ctx);\n },\n });\n}\n\nexport default function lspExtension(pi: ExtensionAPI) {\n // Prevent EPIPE errors from LSP server exits from crashing the host process.\n // When an LSP server exits unexpectedly, in-flight writes to its stdin pipe\n // can produce EPIPE errors that escape all connection-level error handlers.\n const origListeners = process.listeners(\"uncaughtException\");\n process.on(\"uncaughtException\", (err: any) => {\n if (err?.code === \"EPIPE\") return; // swallow — LSP server exited, harmless\n // Re-throw for other handlers\n for (const listener of origListeners) (listener as any)(err);\n if (origListeners.length === 0) {\n console.error(\"[LSP] Uncaught exception:\", err);\n }\n });\n\n const host = new LspRuntimeHost();\n let pendingProvider: WorkspaceProvider | null = null;\n let latestCtx: any = null;\n let projectConfig: ProjectLspConfig | null = null;\n let sessionCwd = process.cwd();\n\n /**\n * Run `fn` with the currently captured ctx, swallowing stale-ctx errors.\n *\n * Lifecycle callbacks from LspManager (server ready, workspace setup, etc.)\n * and `pi.events` listeners can fire AFTER the session is replaced or reloaded,\n * at which point the captured ctx has been invalidated and any property access\n * throws via ExtensionRunner.assertActive(). We can't use optional chaining to\n * dodge it because the `ui` / `theme` getters themselves run assertActive().\n */\n const withLatestCtx = (fn: (ctx: any) => void) => {\n const ctx = latestCtx;\n if (!ctx) return;\n try {\n fn(ctx);\n } catch (err: any) {\n if (typeof err?.message === \"string\" && err.message.includes(\"stale after session\")) {\n // Session was replaced/reloaded — drop the stale ctx and move on.\n latestCtx = null;\n return;\n }\n throw err;\n }\n };\n\n const applyProvider = (data: unknown) => {\n const provider = data as WorkspaceProvider;\n pendingProvider = provider;\n host.setPendingProvider(provider);\n const statusText = provider.getStatusText();\n if (!statusText) return;\n withLatestCtx((ctx) => {\n if (!ctx.ui?.theme) return;\n ctx.ui.setStatus(\"lsp\", ctx.ui.theme.fg(\"accent\", `LSP: ${statusText}`));\n });\n };\n\n pi.events.on(\"lsp:register-workspace-provider\", applyProvider);\n\n // Check for provider registered before our listener existed\n const existing = (pi.events as any)[\"lsp:workspace-provider\"];\n if (existing) applyProvider(existing);\n\n const setLspStatus = (color: string, text: string) => {\n withLatestCtx((ctx) => {\n if (!ctx.ui?.theme) return;\n ctx.ui.setStatus(\"lsp\", ctx.ui.theme.fg(color, text));\n });\n };\n\n const makeCallbacks = (): LspRuntimeCallbacks => ({\n onWorkspaceSetupStart: () => {\n setLspStatus(\"warning\", \"LSP: workspace setup...\");\n },\n onWorkspaceSetupEnd: (success: boolean, duration: number) => {\n const secs = (duration / 1000).toFixed(1);\n if (success) {\n setLspStatus(\"accent\", `LSP: workspace ready (${secs}s)`);\n } else {\n setLspStatus(\"warning\", `LSP: workspace setup failed (${secs}s)`);\n }\n },\n onServerStart: (languageId: string, command: string) => {\n setLspStatus(\"warning\", `LSP: starting ${languageId} (${command})...`);\n },\n onServerReady: (languageId: string) => {\n setLspStatus(\"accent\", `LSP: ${languageId} ready`);\n },\n onServerError: (languageId: string, _error: string) => {\n setLspStatus(\"error\", `LSP: ${languageId} failed`);\n },\n onServerCrash: (languageId: string, restarting: boolean, attempt: number) => {\n if (restarting) {\n setLspStatus(\"warning\", `LSP: restarting ${languageId}... (attempt ${attempt}/3)`);\n } else {\n setLspStatus(\"error\", `LSP: ${languageId} crashed — auto-restart exhausted`);\n }\n },\n });\n\n const applyProjectConfigToManager = (manager: { setServerConfig: Function; setLombokJar: Function }, config: ProjectLspConfig | null) => {\n if (!config) return;\n if (config.servers) {\n for (const [lang, serverConf] of Object.entries(config.servers)) {\n manager.setServerConfig(lang, {\n command: serverConf.command,\n args: serverConf.args ?? [],\n env: serverConf.env,\n initializationOptions: serverConf.initializationOptions,\n settings: serverConf.settings,\n });\n }\n }\n if (config.lombokJar && config.lombokJar !== \"auto\") {\n manager.setLombokJar(config.lombokJar);\n }\n };\n\n const buildBindOptions = (cwd: string) => ({\n cwd,\n callbacks: makeCallbacks(),\n pendingProvider,\n syntheticDotChecker: (uri: string) => syntheticDotLocks.has(uri),\n configureManager: (manager) => {\n applyProjectConfigToManager(manager, projectConfig);\n },\n });\n\n const ensureRuntime = async () => {\n return host.ensureServices(\n buildBindOptions(sessionCwd || process.cwd()),\n );\n };\n\n // session_start binds cwd/config only. Heavy managers load on first use,\n // unless autoStart is configured (then ensure + startEagerly).\n pi.on(\"session_start\", async (_event, ctx) => {\n latestCtx = ctx;\n sessionCwd = ctx.cwd;\n\n projectConfig = loadProjectConfig(ctx.cwd);\n host.bindSession(buildBindOptions(ctx.cwd));\n\n const statusText = pendingProvider?.getStatusText?.() ?? \"\";\n if (statusText) {\n ctx.ui.setStatus(\"lsp\", ctx.ui.theme.fg(\"accent\", `LSP: ${statusText}`));\n } else {\n ctx.ui.setStatus(\"lsp\", ctx.ui.theme.fg(\"dim\", \"LSP: idle\"));\n }\n\n if (projectConfig?.autoStart && projectConfig.autoStart.length > 0) {\n const langs = projectConfig.autoStart;\n const generation = host.getGeneration();\n void ensureRuntime().then((services) => {\n if (host.getGeneration() !== generation) return;\n const lombokJar = services.manager.getLombokJar?.() ?? null;\n const lombokNote = langs.includes(\"java\") && lombokJar\n ? ` (lombok: ${String(lombokJar).split(/[/\\\\]/).pop()})`\n : \"\";\n setLspStatus(\"warning\", `LSP: auto-starting ${langs.join(\", \")}${lombokNote}...`);\n services.manager.startEagerly(langs);\n }).catch((error) => {\n if (host.getGeneration() === generation) setLspStatus(\"error\", `LSP startup failed: ${String(error)}`);\n });\n }\n });\n\n const managerProxy = createServiceProxy(\n () => host.getServicesIfReady()?.manager ?? null,\n \"LSP manager\",\n );\n const treeSitterProxy = createServiceProxy(\n () => host.getServicesIfReady()?.treeSitter ?? null,\n \"Tree-sitter manager\",\n );\n const workspaceIndexProxy = createServiceProxy(\n () => host.getServicesIfReady()?.workspaceIndex ?? null,\n \"Workspace index\",\n );\n\n registerToolWithRuntime(pi, createDiagnosticsTool(managerProxy, treeSitterProxy), ensureRuntime, host);\n registerToolWithRuntime(pi, createHoverTool(managerProxy, treeSitterProxy), ensureRuntime, host);\n registerToolWithRuntime(pi, createDefinitionTool(managerProxy, treeSitterProxy, workspaceIndexProxy), ensureRuntime, host);\n registerToolWithRuntime(pi, createReferencesTool(managerProxy, treeSitterProxy), ensureRuntime, host);\n registerToolWithRuntime(pi, createSymbolsTool(managerProxy, treeSitterProxy, workspaceIndexProxy), ensureRuntime, host);\n registerToolWithRuntime(pi, createRenameTool(managerProxy, treeSitterProxy), ensureRuntime, host);\n registerToolWithRuntime(pi, createCodeActionsTool(managerProxy, treeSitterProxy), ensureRuntime, host);\n registerToolWithRuntime(pi, createCompletionsTool(\n managerProxy,\n {\n getTrackedVersion: (uri) => {\n const services = host.getServicesIfReady();\n if (!services) return null;\n return services.fileSync.getTrackedVersion(uri);\n },\n setTrackedVersion: (uri, v) => {\n host.getServicesIfReady()?.fileSync.setTrackedVersion(uri, v);\n },\n isSyntheticDotActive: (uri) => syntheticDotLocks.has(uri),\n },\n treeSitterProxy,\n ), ensureRuntime, host);\n const getRootDir = () => {\n const manager = host.getServicesIfReady()?.manager;\n if (manager) return manager.resolvePath(\".\");\n return sessionCwd || process.cwd();\n };\n registerToolWithRuntime(pi, createCodeOverviewTool(getRootDir, treeSitterProxy, workspaceIndexProxy), ensureRuntime, host);\n registerToolWithRuntime(pi, createCodeSearchTool(getRootDir, treeSitterProxy), ensureRuntime, host);\n registerToolWithRuntime(pi, createCodeRewriteTool(getRootDir, treeSitterProxy, {\n onFileModified: (filePath: string) => {\n const services = host.getServicesIfReady();\n if (!services) return;\n services.fileSync.handleFileWrite(filePath).catch(() => {});\n },\n }), ensureRuntime, host);\n\n // File sync: track file reads/writes/edits without loading runtime on plain reads\n // when LSP was never used. Writes may start a server (existing behavior) so they\n // ensure runtime. After writes/edits, append file-scoped error diagnostics.\n pi.on(\"tool_result\", async (event) => {\n const generation = host.getGeneration();\n try {\n if (isReadToolResult(event) && !event.isError) {\n const services = host.getServicesIfReady();\n if (services) {\n const path = (event.input as any)?.path;\n if (path) await services.fileSync.handleFileRead(path);\n if (host.getGeneration() !== generation) return;\n }\n }\n\n if ((isWriteToolResult(event) || isEditToolResult(event)) && !event.isError) {\n const path = (event.input as any)?.path;\n if (path) {\n const services = await ensureRuntime();\n if (host.getGeneration() !== generation) return;\n await services.fileSync.handleFileWrite(path);\n }\n }\n } catch {\n // File sync errors are non-fatal\n }\n\n if (host.getGeneration() !== generation) return;\n // Auto-append diagnostics for the changed file (write/edit only)\n const services = host.getServicesIfReady();\n if ((isWriteToolResult(event) || isEditToolResult(event)) && !event.isError && services) {\n const path = (event.input as any)?.path;\n if (!path) return;\n\n const manager = services.manager;\n const languageId = manager.getLanguageId(path);\n if (!languageId) return;\n\n // Check autoInjectDiagnostics config\n const inject = projectConfig?.autoInjectDiagnostics;\n if (inject === false) return;\n if (Array.isArray(inject) && !inject.includes(languageId)) return;\n\n const client = manager.getRunningClient(languageId);\n if (!client) return;\n\n // Wait briefly for the LSP to publish updated diagnostics\n await new Promise((r) => setTimeout(r, DIAGNOSTIC_SETTLE_DELAY_MS));\n if (host.getGeneration() !== generation) return;\n\n const uri = manager.getFileUri(path);\n const diagnostics = client.getDiagnostics(uri);\n const errors = diagnostics.filter((d) => d.severity === DiagnosticSeverity.Error);\n\n if (errors.length === 0) return;\n\n // Build a compact summary — just errors, max 10 lines\n const relPath = relative(manager.resolvePath(\".\"), manager.resolvePath(path));\n const lines = errors.slice(0, 10).map((d) => {\n const line = d.range.start.line + 1;\n const col = d.range.start.character + 1;\n const source = d.source ? ` [${d.source}]` : \"\";\n return `${relPath}:${line}:${col} error: ${d.message}${source}`;\n });\n if (errors.length > 10) {\n lines.push(`... and ${errors.length - 10} more error(s)`);\n }\n\n const summary = `\\n\\n⚠ LSP: ${errors.length} error(s) in ${relPath}:\\n${lines.join(\"\\n\")}`;\n\n return {\n content: [\n ...event.content,\n { type: \"text\" as const, text: summary },\n ],\n };\n }\n });\n\n // Update status after tool execution ends\n pi.on(\"tool_execution_end\", async (_event, ctx) => {\n latestCtx = ctx;\n const services = host.getServicesIfReady();\n if (!services) return;\n const statuses = services.manager.getStatus();\n const running = statuses.filter((s) => s.running);\n if (running.length === 0) {\n ctx.ui.setStatus(\"lsp\", ctx.ui.theme.fg(\"dim\", \"LSP: idle\"));\n } else {\n const totalDiags = running.reduce((n, s) => n + s.diagnosticsCount, 0);\n const langs = running.map((s) => s.languageId).join(\", \");\n let status = `LSP: ${langs}`;\n if (totalDiags > 0) {\n status += ` (${totalDiags} diagnostic${totalDiags !== 1 ? \"s\" : \"\"})`;\n }\n ctx.ui.setStatus(\"lsp\", ctx.ui.theme.fg(\"accent\", status));\n }\n });\n\n // /lsp command — show server status\n pi.registerCommand(\"lsp\", {\n description: \"Show LSP server status\",\n handler: async (_args, ctx) => {\n const services = host.getServicesIfReady();\n if (!services) {\n ctx.ui.notify(\"LSP manager not initialized\", \"warning\");\n return;\n }\n\n const statuses = services.manager.getStatus();\n if (statuses.length === 0) {\n ctx.ui.notify(\"No LSP servers configured\", \"info\");\n return;\n }\n\n const lines = statuses.map((s) => {\n const icon = s.running ? \"🟢\" : \"⚪\";\n const diags =\n s.diagnosticsCount > 0 ? ` (${s.diagnosticsCount} diagnostics)` : \"\";\n const shared = s.shared ? \" [shared]\" : \"\";\n return `${icon} ${s.languageId}: ${s.command}${diags}${shared}`;\n });\n\n ctx.ui.notify(lines.join(\"\\n\"), \"info\");\n },\n });\n\n // /lsp-restart command — restart a specific language server\n pi.registerCommand(\"lsp-restart\", {\n description: \"Restart an LSP server: /lsp-restart <language> (e.g. java, typescript)\",\n handler: async (args, ctx) => {\n const services = host.getServicesIfReady();\n if (!services) {\n ctx.ui.notify(\"LSP manager not initialized\", \"warning\");\n return;\n }\n\n const languageId = args?.trim().toLowerCase();\n if (!languageId) {\n // Show running servers and usage\n const statuses = services.manager.getStatus().filter((s) => s.running);\n if (statuses.length === 0) {\n ctx.ui.notify(\"No LSP servers are running.\\n\\nUsage: /lsp-restart <language>\", \"info\");\n } else {\n const langs = statuses.map((s) => s.languageId).join(\", \");\n ctx.ui.notify(\n `Running servers: ${langs}\\n\\nUsage: /lsp-restart <language>\\nExample: /lsp-restart java`,\n \"info\"\n );\n }\n return;\n }\n\n ctx.ui.setStatus(\"lsp\", ctx.ui.theme.fg(\"warning\", `LSP: restarting ${languageId}...`));\n ctx.ui.notify(`Restarting ${languageId} server (kills daemon if shared)...`, \"info\");\n\n try {\n await services.manager.restartServer(languageId);\n const lombokJar = languageId === \"java\" ? services.manager.getLombokJar() : null;\n const lombokNote = lombokJar ? `\\nLombok: ${lombokJar}` : \"\";\n ctx.ui.notify(`${languageId} server restarted successfully.${lombokNote}`, \"info\");\n ctx.ui.setStatus(\"lsp\", ctx.ui.theme.fg(\"accent\", `LSP: ${languageId} ready`));\n } catch (err: any) {\n ctx.ui.notify(`Failed to restart ${languageId}: ${err.message}`, \"error\");\n ctx.ui.setStatus(\"lsp\", ctx.ui.theme.fg(\"error\", `LSP: ${languageId} restart failed`));\n }\n },\n });\n\n // /lsp-config command — add or override server configuration\n pi.registerCommand(\"lsp-config\", {\n description:\n \"Configure an LSP server: /lsp-config <language> <command> [args...]\",\n handler: async (args, ctx) => {\n if (!args?.trim()) {\n ctx.ui.notify(\n \"Usage: /lsp-config <language> <command> [args...]\\nExample: /lsp-config python pylsp\",\n \"info\"\n );\n return;\n }\n\n const parts = args.trim().split(/\\s+/);\n if (parts.length < 2) {\n ctx.ui.notify(\n \"Usage: /lsp-config <language> <command> [args...]\",\n \"warning\"\n );\n return;\n }\n\n const [languageId, command, ...serverArgs] = parts;\n const config: ServerConfig = { command, args: serverArgs };\n\n const services = await ensureRuntime();\n services.manager.setServerConfig(languageId, config);\n ctx.ui.notify(\n `Configured LSP for ${languageId}: ${command} ${serverArgs.join(\" \")}`,\n \"info\"\n );\n },\n });\n\n // /lsp-lombok command — set Lombok jar path for Java\n pi.registerCommand(\"lsp-lombok\", {\n description:\n \"Set Lombok jar path for Java: /lsp-lombok <path-to-lombok.jar>\",\n handler: async (args, ctx) => {\n const services = await ensureRuntime();\n const mgr = services.manager;\n\n if (!args?.trim()) {\n const current = mgr.getLombokJar();\n if (current) {\n ctx.ui.notify(`Lombok jar: ${current}`, \"info\");\n } else {\n ctx.ui.notify(\n \"No Lombok jar configured or detected.\\n\\n\" +\n \"Usage: /lsp-lombok <path-to-lombok.jar>\\n\" +\n \"Or set LOMBOK_JAR environment variable.\\n\\n\" +\n \"Download from: https://projectlombok.org/download\",\n \"info\"\n );\n }\n return;\n }\n\n const jarPath = args.trim();\n const resolved = resolve(ctx.cwd, jarPath);\n\n if (!existsSync(resolved)) {\n ctx.ui.notify(`File not found: ${resolved}`, \"error\");\n return;\n }\n\n if (!resolved.endsWith(\".jar\")) {\n ctx.ui.notify(`Warning: ${resolved} doesn't end in .jar — setting anyway`, \"warning\");\n }\n\n mgr.setLombokJar(resolved);\n ctx.ui.notify(`Lombok jar set: ${resolved}`, \"info\");\n },\n });\n\n // Clean shutdown — never loads heavy modules if they were unused\n pi.on(\"session_shutdown\", async () => {\n // Drop the captured ctx immediately — once shutdown fires, any late\n // LSP manager callback that reaches setLspStatus/applyProvider would\n // otherwise hit an invalidated ctx and throw an uncaught exception.\n latestCtx = null;\n await host.shutdown();\n });\n}\n\nexport { LspRuntimeHost } from \"./runtime.js\";\n"]}
@@ -0,0 +1,46 @@
1
+ import type { FileSync } from "./file-sync.js";
2
+ import type { LspManager, LspManagerCallbacks } from "./lsp-manager.js";
3
+ import type { TreeSitterManager } from "./tree-sitter/parser-manager.js";
4
+ import type { WorkspaceIndex } from "./tree-sitter/workspace-index.js";
5
+ import type { WorkspaceProvider } from "./workspace-provider.js";
6
+ export type LspRuntimeCallbacks = LspManagerCallbacks;
7
+ export interface LspRuntimeServices {
8
+ manager: LspManager;
9
+ fileSync: FileSync;
10
+ treeSitter: TreeSitterManager;
11
+ workspaceIndex: WorkspaceIndex;
12
+ }
13
+ export interface LspRuntimeBindOptions {
14
+ cwd: string;
15
+ callbacks: LspRuntimeCallbacks;
16
+ pendingProvider?: WorkspaceProvider | null;
17
+ syntheticDotChecker: (uri: string) => boolean;
18
+ configureManager?: (manager: LspManager) => void;
19
+ }
20
+ declare const defaultLoaders: {
21
+ loadLspManager: () => Promise<typeof import("./lsp-manager.js")>;
22
+ loadFileSync: () => Promise<typeof import("./file-sync.js")>;
23
+ loadTreeSitter: () => Promise<typeof import("./tree-sitter/parser-manager.js")>;
24
+ loadWorkspaceIndex: () => Promise<typeof import("./tree-sitter/workspace-index.js")>;
25
+ };
26
+ export type LspRuntimeModuleLoaders = Partial<typeof defaultLoaders>;
27
+ export declare class LspRuntimeHost {
28
+ private generation;
29
+ private services;
30
+ private initPromise;
31
+ private bindOptions;
32
+ private readonly loaders;
33
+ constructor(loaders?: LspRuntimeModuleLoaders);
34
+ getGeneration(): number;
35
+ hasServices(): boolean;
36
+ getServicesIfReady(): LspRuntimeServices | null;
37
+ getBindOptions(): LspRuntimeBindOptions | null;
38
+ bindSession(options: LspRuntimeBindOptions): void;
39
+ setPendingProvider(provider: WorkspaceProvider | null): void;
40
+ ensureServices(fallbackOptions?: LspRuntimeBindOptions): Promise<LspRuntimeServices>;
41
+ shutdown(): Promise<void>;
42
+ private loadServices;
43
+ private shutdownServices;
44
+ }
45
+ export {};
46
+ //# sourceMappingURL=runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../../src/builtin-extensions/pi-lsp-extension/src/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACxE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEjE,MAAM,MAAM,mBAAmB,GAAG,mBAAmB,CAAC;AAEtD,MAAM,WAAW,kBAAkB;IAClC,OAAO,EAAE,UAAU,CAAC;IACpB,QAAQ,EAAE,QAAQ,CAAC;IACnB,UAAU,EAAE,iBAAiB,CAAC;IAC9B,cAAc,EAAE,cAAc,CAAC;CAC/B;AAED,MAAM,WAAW,qBAAqB;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,mBAAmB,CAAC;IAC/B,eAAe,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAC3C,mBAAmB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;IAC9C,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,KAAK,IAAI,CAAC;CACjD;AAED,QAAA,MAAM,cAAc;;;;;CAKnB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG,OAAO,CAAC,OAAO,cAAc,CAAC,CAAC;AAErE,qBAAa,cAAc;IAC1B,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,QAAQ,CAAmC;IACnD,OAAO,CAAC,WAAW,CAA4C;IAC/D,OAAO,CAAC,WAAW,CAAsC;IACzD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwB;IAEhD,YAAY,OAAO,CAAC,EAAE,uBAAuB,EAE5C;IAED,aAAa,IAAI,MAAM,CAEtB;IAED,WAAW,IAAI,OAAO,CAErB;IAED,kBAAkB,IAAI,kBAAkB,GAAG,IAAI,CAE9C;IAED,cAAc,IAAI,qBAAqB,GAAG,IAAI,CAE7C;IAED,WAAW,CAAC,OAAO,EAAE,qBAAqB,GAAG,IAAI,CAOhD;IAED,kBAAkB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI,GAAG,IAAI,CAG3D;IAEK,cAAc,CAAC,eAAe,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAgBzF;IAEK,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAO9B;YAEa,YAAY;YA6BZ,gBAAgB;CAI9B","sourcesContent":["import type { FileSync } from \"./file-sync.js\";\nimport type { LspManager, LspManagerCallbacks } from \"./lsp-manager.js\";\nimport type { TreeSitterManager } from \"./tree-sitter/parser-manager.js\";\nimport type { WorkspaceIndex } from \"./tree-sitter/workspace-index.js\";\nimport type { WorkspaceProvider } from \"./workspace-provider.js\";\n\nexport type LspRuntimeCallbacks = LspManagerCallbacks;\n\nexport interface LspRuntimeServices {\n\tmanager: LspManager;\n\tfileSync: FileSync;\n\ttreeSitter: TreeSitterManager;\n\tworkspaceIndex: WorkspaceIndex;\n}\n\nexport interface LspRuntimeBindOptions {\n\tcwd: string;\n\tcallbacks: LspRuntimeCallbacks;\n\tpendingProvider?: WorkspaceProvider | null;\n\tsyntheticDotChecker: (uri: string) => boolean;\n\tconfigureManager?: (manager: LspManager) => void;\n}\n\nconst defaultLoaders = {\n\tloadLspManager: () => import(\"./lsp-manager.js\"),\n\tloadFileSync: () => import(\"./file-sync.js\"),\n\tloadTreeSitter: () => import(\"./tree-sitter/parser-manager.js\"),\n\tloadWorkspaceIndex: () => import(\"./tree-sitter/workspace-index.js\"),\n};\n\nexport type LspRuntimeModuleLoaders = Partial<typeof defaultLoaders>;\n\nexport class LspRuntimeHost {\n\tprivate generation = 0;\n\tprivate services: LspRuntimeServices | null = null;\n\tprivate initPromise: Promise<LspRuntimeServices> | null = null;\n\tprivate bindOptions: LspRuntimeBindOptions | null = null;\n\tprivate readonly loaders: typeof defaultLoaders;\n\n\tconstructor(loaders?: LspRuntimeModuleLoaders) {\n\t\tthis.loaders = { ...defaultLoaders, ...loaders };\n\t}\n\n\tgetGeneration(): number {\n\t\treturn this.generation;\n\t}\n\n\thasServices(): boolean {\n\t\treturn this.services !== null;\n\t}\n\n\tgetServicesIfReady(): LspRuntimeServices | null {\n\t\treturn this.services;\n\t}\n\n\tgetBindOptions(): LspRuntimeBindOptions | null {\n\t\treturn this.bindOptions;\n\t}\n\n\tbindSession(options: LspRuntimeBindOptions): void {\n\t\tthis.generation++;\n\t\tconst previous = this.services;\n\t\tthis.services = null;\n\t\tthis.initPromise = null;\n\t\tthis.bindOptions = options;\n\t\tif (previous) void this.shutdownServices(previous);\n\t}\n\n\tsetPendingProvider(provider: WorkspaceProvider | null): void {\n\t\tif (this.bindOptions) this.bindOptions = { ...this.bindOptions, pendingProvider: provider };\n\t\tif (this.services && provider) this.services.manager.setWorkspaceProvider(provider);\n\t}\n\n\tasync ensureServices(fallbackOptions?: LspRuntimeBindOptions): Promise<LspRuntimeServices> {\n\t\tif (this.services) return this.services;\n\t\tif (this.initPromise) return this.initPromise;\n\t\tif (!this.bindOptions) {\n\t\t\tif (!fallbackOptions) throw new Error(\"LSP runtime is not bound to a session\");\n\t\t\tthis.bindOptions = fallbackOptions;\n\t\t}\n\t\tconst gen = this.generation;\n\t\tconst pending = this.loadServices(gen);\n\t\tthis.initPromise = pending;\n\t\ttry {\n\t\t\treturn await pending;\n\t\t} catch (error) {\n\t\t\tif (this.generation === gen && this.initPromise === pending) this.initPromise = null;\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tasync shutdown(): Promise<void> {\n\t\tthis.generation++;\n\t\tconst previous = this.services;\n\t\tthis.services = null;\n\t\tthis.initPromise = null;\n\t\tthis.bindOptions = null;\n\t\tif (previous) await this.shutdownServices(previous);\n\t}\n\n\tprivate async loadServices(gen: number): Promise<LspRuntimeServices> {\n\t\tconst [managerMod, fileSyncMod, treeSitterMod, workspaceIndexMod] = await Promise.all([\n\t\t\tthis.loaders.loadLspManager(),\n\t\t\tthis.loaders.loadFileSync(),\n\t\t\tthis.loaders.loadTreeSitter(),\n\t\t\tthis.loaders.loadWorkspaceIndex(),\n\t\t]);\n\t\tconst options = this.bindOptions;\n\t\tif (gen !== this.generation || !options) {\n\t\t\tthrow new Error(\"LSP runtime initialization aborted: session replaced\");\n\t\t}\n\t\tconst manager = new managerMod.LspManager(options.cwd, undefined, options.callbacks, undefined, options.pendingProvider ?? undefined);\n\t\tconst treeSitter = new treeSitterMod.TreeSitterManager();\n\t\ttry {\n\t\t\tconst fileSync = new fileSyncMod.FileSync(manager);\n\t\t\tfileSync.setSyntheticDotChecker(options.syntheticDotChecker);\n\t\t\tconst workspaceIndex = new workspaceIndexMod.WorkspaceIndex(options.cwd, treeSitter);\n\t\t\tfileSync.setTreeSitter(treeSitter, workspaceIndex);\n\t\t\toptions.configureManager?.(manager);\n\t\t\tif (gen !== this.generation) throw new Error(\"LSP runtime initialization aborted: session replaced\");\n\t\t\tthis.services = { manager, fileSync, treeSitter, workspaceIndex };\n\t\t\treturn this.services;\n\t\t} catch (error) {\n\t\t\tawait manager.shutdownAll().catch(() => {});\n\t\t\ttreeSitter.shutdown();\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tprivate async shutdownServices(services: LspRuntimeServices): Promise<void> {\n\t\tawait services.manager.shutdownAll().catch(() => {});\n\t\tservices.treeSitter.shutdown();\n\t}\n}\n"]}
@@ -0,0 +1,109 @@
1
+ const defaultLoaders = {
2
+ loadLspManager: () => import("./lsp-manager.js"),
3
+ loadFileSync: () => import("./file-sync.js"),
4
+ loadTreeSitter: () => import("./tree-sitter/parser-manager.js"),
5
+ loadWorkspaceIndex: () => import("./tree-sitter/workspace-index.js"),
6
+ };
7
+ export class LspRuntimeHost {
8
+ generation = 0;
9
+ services = null;
10
+ initPromise = null;
11
+ bindOptions = null;
12
+ loaders;
13
+ constructor(loaders) {
14
+ this.loaders = { ...defaultLoaders, ...loaders };
15
+ }
16
+ getGeneration() {
17
+ return this.generation;
18
+ }
19
+ hasServices() {
20
+ return this.services !== null;
21
+ }
22
+ getServicesIfReady() {
23
+ return this.services;
24
+ }
25
+ getBindOptions() {
26
+ return this.bindOptions;
27
+ }
28
+ bindSession(options) {
29
+ this.generation++;
30
+ const previous = this.services;
31
+ this.services = null;
32
+ this.initPromise = null;
33
+ this.bindOptions = options;
34
+ if (previous)
35
+ void this.shutdownServices(previous);
36
+ }
37
+ setPendingProvider(provider) {
38
+ if (this.bindOptions)
39
+ this.bindOptions = { ...this.bindOptions, pendingProvider: provider };
40
+ if (this.services && provider)
41
+ this.services.manager.setWorkspaceProvider(provider);
42
+ }
43
+ async ensureServices(fallbackOptions) {
44
+ if (this.services)
45
+ return this.services;
46
+ if (this.initPromise)
47
+ return this.initPromise;
48
+ if (!this.bindOptions) {
49
+ if (!fallbackOptions)
50
+ throw new Error("LSP runtime is not bound to a session");
51
+ this.bindOptions = fallbackOptions;
52
+ }
53
+ const gen = this.generation;
54
+ const pending = this.loadServices(gen);
55
+ this.initPromise = pending;
56
+ try {
57
+ return await pending;
58
+ }
59
+ catch (error) {
60
+ if (this.generation === gen && this.initPromise === pending)
61
+ this.initPromise = null;
62
+ throw error;
63
+ }
64
+ }
65
+ async shutdown() {
66
+ this.generation++;
67
+ const previous = this.services;
68
+ this.services = null;
69
+ this.initPromise = null;
70
+ this.bindOptions = null;
71
+ if (previous)
72
+ await this.shutdownServices(previous);
73
+ }
74
+ async loadServices(gen) {
75
+ const [managerMod, fileSyncMod, treeSitterMod, workspaceIndexMod] = await Promise.all([
76
+ this.loaders.loadLspManager(),
77
+ this.loaders.loadFileSync(),
78
+ this.loaders.loadTreeSitter(),
79
+ this.loaders.loadWorkspaceIndex(),
80
+ ]);
81
+ const options = this.bindOptions;
82
+ if (gen !== this.generation || !options) {
83
+ throw new Error("LSP runtime initialization aborted: session replaced");
84
+ }
85
+ const manager = new managerMod.LspManager(options.cwd, undefined, options.callbacks, undefined, options.pendingProvider ?? undefined);
86
+ const treeSitter = new treeSitterMod.TreeSitterManager();
87
+ try {
88
+ const fileSync = new fileSyncMod.FileSync(manager);
89
+ fileSync.setSyntheticDotChecker(options.syntheticDotChecker);
90
+ const workspaceIndex = new workspaceIndexMod.WorkspaceIndex(options.cwd, treeSitter);
91
+ fileSync.setTreeSitter(treeSitter, workspaceIndex);
92
+ options.configureManager?.(manager);
93
+ if (gen !== this.generation)
94
+ throw new Error("LSP runtime initialization aborted: session replaced");
95
+ this.services = { manager, fileSync, treeSitter, workspaceIndex };
96
+ return this.services;
97
+ }
98
+ catch (error) {
99
+ await manager.shutdownAll().catch(() => { });
100
+ treeSitter.shutdown();
101
+ throw error;
102
+ }
103
+ }
104
+ async shutdownServices(services) {
105
+ await services.manager.shutdownAll().catch(() => { });
106
+ services.treeSitter.shutdown();
107
+ }
108
+ }
109
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../../../src/builtin-extensions/pi-lsp-extension/src/runtime.ts"],"names":[],"mappings":"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","sourcesContent":["import type { FileSync } from \"./file-sync.js\";\nimport type { LspManager, LspManagerCallbacks } from \"./lsp-manager.js\";\nimport type { TreeSitterManager } from \"./tree-sitter/parser-manager.js\";\nimport type { WorkspaceIndex } from \"./tree-sitter/workspace-index.js\";\nimport type { WorkspaceProvider } from \"./workspace-provider.js\";\n\nexport type LspRuntimeCallbacks = LspManagerCallbacks;\n\nexport interface LspRuntimeServices {\n\tmanager: LspManager;\n\tfileSync: FileSync;\n\ttreeSitter: TreeSitterManager;\n\tworkspaceIndex: WorkspaceIndex;\n}\n\nexport interface LspRuntimeBindOptions {\n\tcwd: string;\n\tcallbacks: LspRuntimeCallbacks;\n\tpendingProvider?: WorkspaceProvider | null;\n\tsyntheticDotChecker: (uri: string) => boolean;\n\tconfigureManager?: (manager: LspManager) => void;\n}\n\nconst defaultLoaders = {\n\tloadLspManager: () => import(\"./lsp-manager.js\"),\n\tloadFileSync: () => import(\"./file-sync.js\"),\n\tloadTreeSitter: () => import(\"./tree-sitter/parser-manager.js\"),\n\tloadWorkspaceIndex: () => import(\"./tree-sitter/workspace-index.js\"),\n};\n\nexport type LspRuntimeModuleLoaders = Partial<typeof defaultLoaders>;\n\nexport class LspRuntimeHost {\n\tprivate generation = 0;\n\tprivate services: LspRuntimeServices | null = null;\n\tprivate initPromise: Promise<LspRuntimeServices> | null = null;\n\tprivate bindOptions: LspRuntimeBindOptions | null = null;\n\tprivate readonly loaders: typeof defaultLoaders;\n\n\tconstructor(loaders?: LspRuntimeModuleLoaders) {\n\t\tthis.loaders = { ...defaultLoaders, ...loaders };\n\t}\n\n\tgetGeneration(): number {\n\t\treturn this.generation;\n\t}\n\n\thasServices(): boolean {\n\t\treturn this.services !== null;\n\t}\n\n\tgetServicesIfReady(): LspRuntimeServices | null {\n\t\treturn this.services;\n\t}\n\n\tgetBindOptions(): LspRuntimeBindOptions | null {\n\t\treturn this.bindOptions;\n\t}\n\n\tbindSession(options: LspRuntimeBindOptions): void {\n\t\tthis.generation++;\n\t\tconst previous = this.services;\n\t\tthis.services = null;\n\t\tthis.initPromise = null;\n\t\tthis.bindOptions = options;\n\t\tif (previous) void this.shutdownServices(previous);\n\t}\n\n\tsetPendingProvider(provider: WorkspaceProvider | null): void {\n\t\tif (this.bindOptions) this.bindOptions = { ...this.bindOptions, pendingProvider: provider };\n\t\tif (this.services && provider) this.services.manager.setWorkspaceProvider(provider);\n\t}\n\n\tasync ensureServices(fallbackOptions?: LspRuntimeBindOptions): Promise<LspRuntimeServices> {\n\t\tif (this.services) return this.services;\n\t\tif (this.initPromise) return this.initPromise;\n\t\tif (!this.bindOptions) {\n\t\t\tif (!fallbackOptions) throw new Error(\"LSP runtime is not bound to a session\");\n\t\t\tthis.bindOptions = fallbackOptions;\n\t\t}\n\t\tconst gen = this.generation;\n\t\tconst pending = this.loadServices(gen);\n\t\tthis.initPromise = pending;\n\t\ttry {\n\t\t\treturn await pending;\n\t\t} catch (error) {\n\t\t\tif (this.generation === gen && this.initPromise === pending) this.initPromise = null;\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tasync shutdown(): Promise<void> {\n\t\tthis.generation++;\n\t\tconst previous = this.services;\n\t\tthis.services = null;\n\t\tthis.initPromise = null;\n\t\tthis.bindOptions = null;\n\t\tif (previous) await this.shutdownServices(previous);\n\t}\n\n\tprivate async loadServices(gen: number): Promise<LspRuntimeServices> {\n\t\tconst [managerMod, fileSyncMod, treeSitterMod, workspaceIndexMod] = await Promise.all([\n\t\t\tthis.loaders.loadLspManager(),\n\t\t\tthis.loaders.loadFileSync(),\n\t\t\tthis.loaders.loadTreeSitter(),\n\t\t\tthis.loaders.loadWorkspaceIndex(),\n\t\t]);\n\t\tconst options = this.bindOptions;\n\t\tif (gen !== this.generation || !options) {\n\t\t\tthrow new Error(\"LSP runtime initialization aborted: session replaced\");\n\t\t}\n\t\tconst manager = new managerMod.LspManager(options.cwd, undefined, options.callbacks, undefined, options.pendingProvider ?? undefined);\n\t\tconst treeSitter = new treeSitterMod.TreeSitterManager();\n\t\ttry {\n\t\t\tconst fileSync = new fileSyncMod.FileSync(manager);\n\t\t\tfileSync.setSyntheticDotChecker(options.syntheticDotChecker);\n\t\t\tconst workspaceIndex = new workspaceIndexMod.WorkspaceIndex(options.cwd, treeSitter);\n\t\t\tfileSync.setTreeSitter(treeSitter, workspaceIndex);\n\t\t\toptions.configureManager?.(manager);\n\t\t\tif (gen !== this.generation) throw new Error(\"LSP runtime initialization aborted: session replaced\");\n\t\t\tthis.services = { manager, fileSync, treeSitter, workspaceIndex };\n\t\t\treturn this.services;\n\t\t} catch (error) {\n\t\t\tawait manager.shutdownAll().catch(() => {});\n\t\t\ttreeSitter.shutdown();\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tprivate async shutdownServices(services: LspRuntimeServices): Promise<void> {\n\t\tawait services.manager.shutdownAll().catch(() => {});\n\t\tservices.treeSitter.shutdown();\n\t}\n}\n"]}
@@ -0,0 +1,7 @@
1
+ import type { AgentToolResult, AgentToolUpdateCallback, ExtensionContext } from "@ashx-j/lunr-dev";
2
+ import type { McpExtensionState } from "./state.ts";
3
+ import type { DirectToolSpec } from "./types.ts";
4
+ type DirectToolExecute = (toolCallId: string, params: Record<string, unknown>, signal: AbortSignal | undefined, onUpdate: AgentToolUpdateCallback<Record<string, unknown>> | undefined, ctx: ExtensionContext) => Promise<AgentToolResult<Record<string, unknown>>>;
5
+ export declare function createDirectToolExecutor(getState: () => McpExtensionState | null, getInitPromise: () => Promise<McpExtensionState> | null, spec: DirectToolSpec): DirectToolExecute;
6
+ export {};
7
+ //# sourceMappingURL=direct-tool-executor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"direct-tool-executor.d.ts","sourceRoot":"","sources":["../../../src/builtin-extensions/pi-mcp-adapter/direct-tool-executor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAElH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAc,MAAM,YAAY,CAAC;AAuE7D,KAAK,iBAAiB,GAAG,CACvB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,MAAM,EAAE,WAAW,GAAG,SAAS,EAC/B,QAAQ,EAAE,uBAAuB,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,SAAS,EACtE,GAAG,EAAE,gBAAgB,KAClB,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AAEvD,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,MAAM,iBAAiB,GAAG,IAAI,EACxC,cAAc,EAAE,MAAM,OAAO,CAAC,iBAAiB,CAAC,GAAG,IAAI,EACvD,IAAI,EAAE,cAAc,GACnB,iBAAiB,CA6KnB","sourcesContent":["// @ts-nocheck\nimport type { AgentToolResult, AgentToolUpdateCallback, ExtensionContext } from \"@ashx-j/lunr-dev\";\nimport { UrlElicitationRequiredError } from \"@modelcontextprotocol/sdk/types.js\";\nimport type { McpExtensionState } from \"./state.ts\";\nimport type { DirectToolSpec, McpContent } from \"./types.ts\";\nimport { lazyConnect, getFailureAgeSeconds } from \"./init.ts\";\nimport { abortable, throwIfAborted } from \"./abort.ts\";\nimport { formatSchema } from \"./tool-metadata.ts\";\nimport { resolveMcpResultContent, transformMcpContent } from \"./tool-registrar.ts\";\nimport { guardMcpOutput, guardedMcpDetails, resolveMcpOutputGuardOptions } from \"./mcp-output-guard.ts\";\nimport { maybeStartUiSession, type UiSessionRuntime } from \"./ui-session.ts\";\nimport { authenticate, supportsOAuth } from \"./mcp-auth-flow.ts\";\nimport { formatAuthRequiredMessage } from \"./utils.ts\";\n\ntype DirectAutoAuthResult =\n | { status: \"skipped\" }\n | { status: \"success\" }\n | { status: \"failed\"; message: string };\n\nfunction getDirectAuthRequiredMessage(\n state: McpExtensionState,\n serverName: string,\n defaultMessage = `MCP server \"${serverName}\" requires OAuth authentication. Run mcp({ action: \"auth-start\", server: \"${serverName}\" }) to get a browser URL, or /mcp-auth ${serverName} in an interactive local session.`,\n): string {\n return formatAuthRequiredMessage(state.config, serverName, defaultMessage);\n}\n\nfunction getDirectAuthFailedMessage(state: McpExtensionState, serverName: string, message: string): string {\n const customGuidance = state.config.settings?.authRequiredMessage;\n if (customGuidance) {\n return `OAuth authentication failed for \"${serverName}\": ${message}. ${getDirectAuthRequiredMessage(state, serverName)}`;\n }\n return `OAuth authentication failed for \"${serverName}\": ${message}. Run mcp({ action: \"auth-start\", server: \"${serverName}\" }) to get a browser URL, or /mcp-auth ${serverName} in an interactive local session.`;\n}\n\nasync function attemptDirectAutoAuth(\n state: McpExtensionState,\n serverName: string,\n signal?: AbortSignal,\n): Promise<DirectAutoAuthResult> {\n if (state.config.settings?.autoAuth !== true) {\n return { status: \"skipped\" };\n }\n\n const definition = state.config.mcpServers[serverName];\n if (!definition || !supportsOAuth(definition) || !definition.url) {\n return { status: \"skipped\" };\n }\n\n const grantType = definition.oauth ? definition.oauth.grantType ?? \"authorization_code\" : \"authorization_code\";\n if (!state.ui && grantType !== \"client_credentials\") {\n return {\n status: \"failed\",\n message: getDirectAuthRequiredMessage(\n state,\n serverName,\n `MCP server \"${serverName}\" requires OAuth authentication. Run mcp({ action: \"auth-start\", server: \"${serverName}\" }) to get a browser URL, or /mcp-auth ${serverName} in an interactive local session.`,\n ),\n };\n }\n\n try {\n await abortable(authenticate(serverName, definition.url, definition), signal);\n throwIfAborted(signal);\n return { status: \"success\" };\n } catch (error) {\n throwIfAborted(signal);\n const message = error instanceof Error ? error.message : String(error);\n return {\n status: \"failed\",\n message: getDirectAuthFailedMessage(state, serverName, message),\n };\n }\n}\n\ntype DirectToolExecute = (\n toolCallId: string,\n params: Record<string, unknown>,\n signal: AbortSignal | undefined,\n onUpdate: AgentToolUpdateCallback<Record<string, unknown>> | undefined,\n ctx: ExtensionContext,\n) => Promise<AgentToolResult<Record<string, unknown>>>;\n\nexport function createDirectToolExecutor(\n getState: () => McpExtensionState | null,\n getInitPromise: () => Promise<McpExtensionState> | null,\n spec: DirectToolSpec\n): DirectToolExecute {\n return async function execute(_toolCallId, params, signal) {\n throwIfAborted(signal);\n let state = getState();\n const initPromise = getInitPromise();\n\n if (!state && initPromise) {\n try {\n state = await initPromise;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: \"text\" as const, text: `MCP initialization failed: ${message}` }],\n details: { error: \"init_failed\", message },\n };\n }\n }\n if (!state) {\n return {\n content: [{ type: \"text\" as const, text: \"MCP not initialized\" }],\n details: { error: \"not_initialized\" },\n };\n }\n\n let connected = await lazyConnect(state, spec.serverName, signal);\n throwIfAborted(signal);\n let autoAuthAttempted = false;\n\n if (!connected && state.manager.getConnection(spec.serverName)?.status === \"needs-auth\") {\n autoAuthAttempted = true;\n const autoAuth = await attemptDirectAutoAuth(state, spec.serverName, signal);\n throwIfAborted(signal);\n if (autoAuth.status === \"failed\") {\n return {\n content: [{ type: \"text\" as const, text: autoAuth.message }],\n details: { error: \"auth_required\", server: spec.serverName, message: autoAuth.message },\n };\n }\n if (autoAuth.status === \"success\") {\n await state.manager.close(spec.serverName);\n throwIfAborted(signal);\n state.failureTracker.delete(spec.serverName);\n connected = await lazyConnect(state, spec.serverName, signal);\n throwIfAborted(signal);\n }\n }\n\n if (!connected) {\n const authConnection = state.manager.getConnection(spec.serverName);\n if (authConnection?.status === \"needs-auth\") {\n const message = getDirectAuthRequiredMessage(state, spec.serverName);\n return {\n content: [{ type: \"text\" as const, text: message }],\n details: { error: \"auth_required\", server: spec.serverName, message, autoAuthAttempted },\n };\n }\n const failedAgo = getFailureAgeSeconds(state, spec.serverName);\n return {\n content: [{ type: \"text\" as const, text: `MCP server \"${spec.serverName}\" not available${failedAgo !== null ? ` (failed ${failedAgo}s ago)` : \"\"}` }],\n details: { error: \"server_unavailable\", server: spec.serverName },\n };\n }\n\n const connection = state.manager.getConnection(spec.serverName);\n if (!connection || connection.status !== \"connected\") {\n return {\n content: [{ type: \"text\" as const, text: `MCP server \"${spec.serverName}\" not connected` }],\n details: { error: \"not_connected\", server: spec.serverName },\n };\n }\n\n let uiSession: UiSessionRuntime | null = null;\n const requestOptions = state.manager.getRequestOptions?.(spec.serverName, signal) ?? (signal ? { signal } : undefined);\n\n const outputGuardOptions = resolveMcpOutputGuardOptions(state.config.settings);\n\n try {\n state.manager.touch(spec.serverName);\n state.manager.incrementInFlight(spec.serverName);\n\n if (spec.resourceUri) {\n const result = await connection.client.readResource({ uri: spec.resourceUri }, requestOptions);\n const content = (result.contents ?? []).map(c => ({\n type: \"text\" as const,\n text: \"text\" in c ? c.text : (\"blob\" in c ? `[Binary data: ${(c as { mimeType?: string }).mimeType ?? \"unknown\"}]` : JSON.stringify(c)),\n }));\n const guarded = await guardMcpOutput(content.length > 0 ? content : [{ type: \"text\" as const, text: \"(empty resource)\" }], outputGuardOptions);\n return {\n content: guarded.content,\n details: { server: spec.serverName, resourceUri: spec.resourceUri, ...guardedMcpDetails(guarded) },\n };\n }\n\n const hasUi = !!spec.uiResourceUri;\n uiSession = hasUi\n ? await maybeStartUiSession(state, {\n serverName: spec.serverName,\n toolName: spec.originalName,\n toolArgs: params ?? {},\n uiResourceUri: spec.uiResourceUri!,\n streamMode: spec.uiStreamMode,\n })\n : null;\n\n throwIfAborted(signal);\n const resultPromise = connection.client.callTool({\n name: spec.originalName,\n arguments: params ?? {},\n _meta: uiSession?.requestMeta,\n }, undefined, requestOptions);\n\n const result = await abortable(resultPromise, signal);\n throwIfAborted(signal);\n uiSession?.sendToolResult(result as unknown as import(\"@modelcontextprotocol/sdk/types.js\").CallToolResult);\n\n if (result.isError) {\n const mcpContent = (result.content ?? []) as McpContent[];\n const content = transformMcpContent(mcpContent);\n const outputContent = content.length > 0 ? content : [{ type: \"text\" as const, text: \"(empty result)\" }];\n const schemaText = spec.inputSchema ? `\\n\\nExpected parameters:\\n${formatSchema(spec.inputSchema)}` : \"\";\n const guarded = await guardMcpOutput(outputContent, { ...outputGuardOptions, prefix: \"Error: \", suffix: schemaText, emptyTextFallback: \"Tool execution failed\" });\n return {\n content: guarded.content,\n details: { error: \"tool_error\", server: spec.serverName, ...guardedMcpDetails(guarded) },\n };\n }\n\n const content = resolveMcpResultContent(result as Record<string, unknown>);\n const outputContent = content.length > 0 ? content : [{ type: \"text\" as const, text: \"(empty result)\" }];\n if (hasUi) {\n const uiMessage = uiSession?.reused\n ? \"Updated the open UI.\"\n : \"📺 Interactive UI is now open in your browser. I'll respond to your prompts and intents as you interact with it.\";\n const guarded = await guardMcpOutput(outputContent, { ...outputGuardOptions, suffix: `\\n\\n${uiMessage}` });\n return {\n content: guarded.content,\n details: { server: spec.serverName, tool: spec.originalName, uiOpen: true, ...guardedMcpDetails(guarded) },\n };\n }\n\n const guarded = await guardMcpOutput(outputContent, { ...outputGuardOptions });\n return {\n content: guarded.content,\n details: { server: spec.serverName, tool: spec.originalName, ...guardedMcpDetails(guarded) },\n };\n } catch (error) {\n if (error instanceof UrlElicitationRequiredError) {\n const action = await state.manager.handleUrlElicitationRequired(spec.serverName, error);\n const message = action === \"accept\"\n ? \"The original MCP tool did not run. Complete the opened browser interaction, then retry the tool.\"\n : `The URL interaction was ${action === \"decline\" ? \"declined\" : \"cancelled\"}.`;\n uiSession?.sendToolCancelled(message);\n return {\n content: [{ type: \"text\" as const, text: message }],\n details: { error: \"url_elicitation_required\", server: spec.serverName, action },\n };\n }\n const message = error instanceof Error ? error.message : String(error);\n uiSession?.sendToolCancelled(message);\n const schemaText = spec.inputSchema ? `\\n\\nExpected parameters:\\n${formatSchema(spec.inputSchema)}` : \"\";\n const guarded = await guardMcpOutput([{ type: \"text\" as const, text: message }], { ...outputGuardOptions, prefix: \"Failed to call tool: \", suffix: schemaText });\n return {\n content: guarded.content,\n details: { error: \"call_failed\", server: spec.serverName, ...guardedMcpDetails(guarded) },\n };\n } finally {\n if (uiSession?.reused) {\n uiSession.close();\n }\n state.manager.decrementInFlight(spec.serverName);\n state.manager.touch(spec.serverName);\n }\n };\n}\n"]}