@ashx-j/lunr 0.2.17 → 0.2.19

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 (330) hide show
  1. package/CHANGELOG.md +26 -1
  2. package/README.md +2 -1
  3. package/dist/builtin-extensions/ashxj-thinking.d.ts +1 -0
  4. package/dist/builtin-extensions/ashxj-thinking.d.ts.map +1 -1
  5. package/dist/builtin-extensions/ashxj-thinking.js +44 -19
  6. package/dist/builtin-extensions/ashxj-thinking.js.map +1 -1
  7. package/dist/builtin-extensions/index.d.ts.map +1 -1
  8. package/dist/builtin-extensions/index.js +2 -1
  9. package/dist/builtin-extensions/index.js.map +1 -1
  10. package/dist/builtin-extensions/pi-lsp-extension/src/index.d.ts +4 -0
  11. package/dist/builtin-extensions/pi-lsp-extension/src/index.d.ts.map +1 -1
  12. package/dist/builtin-extensions/pi-lsp-extension/src/index.js +172 -171
  13. package/dist/builtin-extensions/pi-lsp-extension/src/index.js.map +1 -1
  14. package/dist/builtin-extensions/pi-lsp-extension/src/runtime.d.ts +50 -0
  15. package/dist/builtin-extensions/pi-lsp-extension/src/runtime.d.ts.map +1 -0
  16. package/dist/builtin-extensions/pi-lsp-extension/src/runtime.js +131 -0
  17. package/dist/builtin-extensions/pi-lsp-extension/src/runtime.js.map +1 -0
  18. package/dist/builtin-extensions/pi-mcp-adapter/direct-tool-executor.d.ts +7 -0
  19. package/dist/builtin-extensions/pi-mcp-adapter/direct-tool-executor.d.ts.map +1 -0
  20. package/dist/builtin-extensions/pi-mcp-adapter/direct-tool-executor.js +211 -0
  21. package/dist/builtin-extensions/pi-mcp-adapter/direct-tool-executor.js.map +1 -0
  22. package/dist/builtin-extensions/pi-mcp-adapter/direct-tools.d.ts +0 -5
  23. package/dist/builtin-extensions/pi-mcp-adapter/direct-tools.d.ts.map +1 -1
  24. package/dist/builtin-extensions/pi-mcp-adapter/direct-tools.js +0 -202
  25. package/dist/builtin-extensions/pi-mcp-adapter/direct-tools.js.map +1 -1
  26. package/dist/builtin-extensions/pi-mcp-adapter/index.d.ts.map +1 -1
  27. package/dist/builtin-extensions/pi-mcp-adapter/index.js +276 -109
  28. package/dist/builtin-extensions/pi-mcp-adapter/index.js.map +1 -1
  29. package/dist/builtin-extensions/pi-mcp-adapter/init.d.ts +4 -1
  30. package/dist/builtin-extensions/pi-mcp-adapter/init.d.ts.map +1 -1
  31. package/dist/builtin-extensions/pi-mcp-adapter/init.js +10 -3
  32. package/dist/builtin-extensions/pi-mcp-adapter/init.js.map +1 -1
  33. package/dist/builtin-extensions/pi-mcp-adapter/metadata-cache.d.ts.map +1 -1
  34. package/dist/builtin-extensions/pi-mcp-adapter/metadata-cache.js +6 -1
  35. package/dist/builtin-extensions/pi-mcp-adapter/metadata-cache.js.map +1 -1
  36. package/dist/builtin-extensions/pi-mcp-adapter/server-manager.d.ts +6 -1
  37. package/dist/builtin-extensions/pi-mcp-adapter/server-manager.d.ts.map +1 -1
  38. package/dist/builtin-extensions/pi-mcp-adapter/server-manager.js +33 -8
  39. package/dist/builtin-extensions/pi-mcp-adapter/server-manager.js.map +1 -1
  40. package/dist/builtin-extensions/pi-prompt-template-model/prompt-loader.d.ts.map +1 -1
  41. package/dist/builtin-extensions/pi-prompt-template-model/prompt-loader.js +2 -1
  42. package/dist/builtin-extensions/pi-prompt-template-model/prompt-loader.js.map +1 -1
  43. package/dist/builtin-extensions/pi-prompt-template-model/tool-manager.d.ts +1 -1
  44. package/dist/builtin-extensions/pi-prompt-template-model/tool-manager.d.ts.map +1 -1
  45. package/dist/builtin-extensions/pi-prompt-template-model/tool-manager.js +1 -1
  46. package/dist/builtin-extensions/pi-prompt-template-model/tool-manager.js.map +1 -1
  47. package/dist/builtin-extensions/pi-subagents/src/extension/index.d.ts +1 -1
  48. package/dist/builtin-extensions/pi-subagents/src/extension/index.d.ts.map +1 -1
  49. package/dist/builtin-extensions/pi-subagents/src/extension/index.js +68 -15
  50. package/dist/builtin-extensions/pi-subagents/src/extension/index.js.map +1 -1
  51. package/dist/builtin-extensions/pi-subagents/src/runs/background/wait-tool.d.ts +1 -1
  52. package/dist/builtin-extensions/pi-subagents/src/runs/background/wait-tool.d.ts.map +1 -1
  53. package/dist/builtin-extensions/pi-subagents/src/runs/background/wait-tool.js +5 -2
  54. package/dist/builtin-extensions/pi-subagents/src/runs/background/wait-tool.js.map +1 -1
  55. package/dist/builtin-extensions/pi-subagents/src/shared/fork-context.d.ts.map +1 -1
  56. package/dist/builtin-extensions/pi-subagents/src/shared/fork-context.js +1 -1
  57. package/dist/builtin-extensions/pi-subagents/src/shared/fork-context.js.map +1 -1
  58. package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.d.ts +1 -1
  59. package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.d.ts.map +1 -1
  60. package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.js +1 -1
  61. package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.js.map +1 -1
  62. package/dist/builtin-extensions/pi-subagents/src/tui/render.d.ts +2 -1
  63. package/dist/builtin-extensions/pi-subagents/src/tui/render.d.ts.map +1 -1
  64. package/dist/builtin-extensions/pi-subagents/src/tui/render.js +72 -31
  65. package/dist/builtin-extensions/pi-subagents/src/tui/render.js.map +1 -1
  66. package/dist/builtin-extensions/pi-subagents/src/watchdog/review.d.ts +1 -1
  67. package/dist/builtin-extensions/pi-subagents/src/watchdog/review.d.ts.map +1 -1
  68. package/dist/builtin-extensions/pi-subagents/src/watchdog/review.js +2 -1
  69. package/dist/builtin-extensions/pi-subagents/src/watchdog/review.js.map +1 -1
  70. package/dist/builtin-extensions/pi-web-access/extract.d.ts.map +1 -1
  71. package/dist/builtin-extensions/pi-web-access/extract.js +105 -54
  72. package/dist/builtin-extensions/pi-web-access/extract.js.map +1 -1
  73. package/dist/builtin-extensions/pi-web-access/gemini-search.d.ts +1 -1
  74. package/dist/builtin-extensions/pi-web-access/gemini-search.d.ts.map +1 -1
  75. package/dist/builtin-extensions/pi-web-access/gemini-search.js +82 -65
  76. package/dist/builtin-extensions/pi-web-access/gemini-search.js.map +1 -1
  77. package/dist/builtin-extensions/pi-web-access/github-extract.d.ts.map +1 -1
  78. package/dist/builtin-extensions/pi-web-access/github-extract.js +2 -0
  79. package/dist/builtin-extensions/pi-web-access/github-extract.js.map +1 -1
  80. package/dist/builtin-extensions/pi-web-access/index.d.ts.map +1 -1
  81. package/dist/builtin-extensions/pi-web-access/index.js +259 -168
  82. package/dist/builtin-extensions/pi-web-access/index.js.map +1 -1
  83. package/dist/builtin-extensions/pi-web-access/lazy.d.ts +18 -0
  84. package/dist/builtin-extensions/pi-web-access/lazy.d.ts.map +1 -0
  85. package/dist/builtin-extensions/pi-web-access/lazy.js +19 -0
  86. package/dist/builtin-extensions/pi-web-access/lazy.js.map +1 -0
  87. package/dist/builtin-extensions/pi-web-access/session-cleanup.d.ts +6 -0
  88. package/dist/builtin-extensions/pi-web-access/session-cleanup.d.ts.map +1 -0
  89. package/dist/builtin-extensions/pi-web-access/session-cleanup.js +17 -0
  90. package/dist/builtin-extensions/pi-web-access/session-cleanup.js.map +1 -0
  91. package/dist/cli-runtime.d.ts +3 -0
  92. package/dist/cli-runtime.d.ts.map +1 -0
  93. package/dist/cli-runtime.js +72 -0
  94. package/dist/cli-runtime.js.map +1 -0
  95. package/dist/cli.d.ts.map +1 -1
  96. package/dist/cli.js +11 -60
  97. package/dist/cli.js.map +1 -1
  98. package/dist/config.d.ts +1 -0
  99. package/dist/config.d.ts.map +1 -1
  100. package/dist/config.js +1 -0
  101. package/dist/config.js.map +1 -1
  102. package/dist/core/agent-session.d.ts.map +1 -1
  103. package/dist/core/agent-session.js +6 -3
  104. package/dist/core/agent-session.js.map +1 -1
  105. package/dist/core/extensions/host-static.d.ts.map +1 -1
  106. package/dist/core/extensions/host-static.js +34 -12
  107. package/dist/core/extensions/host-static.js.map +1 -1
  108. package/dist/core/extensions/loader.d.ts +1 -2
  109. package/dist/core/extensions/loader.d.ts.map +1 -1
  110. package/dist/core/extensions/loader.js +10 -64
  111. package/dist/core/extensions/loader.js.map +1 -1
  112. package/dist/core/keybindings.d.ts +2 -2
  113. package/dist/core/keybindings.d.ts.map +1 -1
  114. package/dist/core/keybindings.js +2 -2
  115. package/dist/core/keybindings.js.map +1 -1
  116. package/dist/core/package-manager.d.ts.map +1 -1
  117. package/dist/core/package-manager.js +1 -1
  118. package/dist/core/package-manager.js.map +1 -1
  119. package/dist/core/sdk.d.ts +1 -1
  120. package/dist/core/sdk.d.ts.map +1 -1
  121. package/dist/core/sdk.js +1 -1
  122. package/dist/core/sdk.js.map +1 -1
  123. package/dist/core/timings.d.ts +2 -1
  124. package/dist/core/timings.d.ts.map +1 -1
  125. package/dist/core/timings.js +17 -2
  126. package/dist/core/timings.js.map +1 -1
  127. package/dist/gateway/agent-bridge.d.ts +6 -1
  128. package/dist/gateway/agent-bridge.d.ts.map +1 -1
  129. package/dist/gateway/agent-bridge.js +23 -6
  130. package/dist/gateway/agent-bridge.js.map +1 -1
  131. package/dist/gateway/cron.d.ts +1 -1
  132. package/dist/gateway/cron.d.ts.map +1 -1
  133. package/dist/gateway/cron.js +3 -1
  134. package/dist/gateway/cron.js.map +1 -1
  135. package/dist/main.d.ts.map +1 -1
  136. package/dist/main.js +20 -14
  137. package/dist/main.js.map +1 -1
  138. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  139. package/dist/modes/interactive/interactive-mode.js +10 -8
  140. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  141. package/dist/modes/interactive/thinking-level-slash.d.ts +4 -0
  142. package/dist/modes/interactive/thinking-level-slash.d.ts.map +1 -0
  143. package/dist/modes/interactive/thinking-level-slash.js +23 -0
  144. package/dist/modes/interactive/thinking-level-slash.js.map +1 -0
  145. package/dist/node-runtime/agent-session-services-35WNVGMR.js +36 -0
  146. package/dist/node-runtime/benchmark-request-UC7PD3V3.js +57 -0
  147. package/dist/node-runtime/brave-UWDA3I22.js +143 -0
  148. package/dist/node-runtime/builtin-extensions-322XDDEM.js +28 -0
  149. package/dist/node-runtime/chunk-2SJB2AWP.js +47 -0
  150. package/dist/node-runtime/chunk-3NMWLTPV.js +64 -0
  151. package/dist/node-runtime/chunk-3WFAEVKS.js +115 -0
  152. package/dist/node-runtime/chunk-3X3KZKMI.js +49 -0
  153. package/dist/node-runtime/chunk-4CSFRBCN.js +7558 -0
  154. package/dist/node-runtime/chunk-4DJ6HEGH.js +296 -0
  155. package/dist/node-runtime/chunk-4FX25LWP.js +1345 -0
  156. package/dist/node-runtime/chunk-4HXHDDCF.js +16 -0
  157. package/dist/node-runtime/chunk-4I23VTC4.js +429 -0
  158. package/dist/node-runtime/chunk-4TLO4PO2.js +3427 -0
  159. package/dist/node-runtime/chunk-4ZWGEEAS.js +69 -0
  160. package/dist/node-runtime/chunk-53YJI7JU.js +137 -0
  161. package/dist/node-runtime/chunk-5EFIU3OM.js +295 -0
  162. package/dist/node-runtime/chunk-6BEIBLQ3.js +53 -0
  163. package/dist/node-runtime/chunk-6KDIOJL3.js +72 -0
  164. package/dist/node-runtime/chunk-7N3YHTYF.js +26 -0
  165. package/dist/node-runtime/chunk-7NBZ5P7I.js +24 -0
  166. package/dist/node-runtime/chunk-AD6VXAO7.js +342 -0
  167. package/dist/node-runtime/chunk-ARC4KOTI.js +11178 -0
  168. package/dist/node-runtime/chunk-AROOY4BB.js +173 -0
  169. package/dist/node-runtime/chunk-ATGA2WLC.js +5646 -0
  170. package/dist/node-runtime/chunk-AUXVGBO4.js +19 -0
  171. package/dist/node-runtime/chunk-AY6CAJSL.js +30 -0
  172. package/dist/node-runtime/chunk-BHO7O6E5.js +296 -0
  173. package/dist/node-runtime/chunk-BI3DHYCN.js +8845 -0
  174. package/dist/node-runtime/chunk-BOHIDQT4.js +21 -0
  175. package/dist/node-runtime/chunk-BRJX2PRC.js +53 -0
  176. package/dist/node-runtime/chunk-CBGB57XT.js +20211 -0
  177. package/dist/node-runtime/chunk-CCZJ3PYY.js +17 -0
  178. package/dist/node-runtime/chunk-CGBXPL3E.js +1171 -0
  179. package/dist/node-runtime/chunk-CJECDQKP.js +19 -0
  180. package/dist/node-runtime/chunk-CSFI6YXL.js +130 -0
  181. package/dist/node-runtime/chunk-DAPBPCBP.js +53 -0
  182. package/dist/node-runtime/chunk-DDWHZ633.js +37 -0
  183. package/dist/node-runtime/chunk-DMMTJQMQ.js +43 -0
  184. package/dist/node-runtime/chunk-DVGWF6A2.js +1180 -0
  185. package/dist/node-runtime/chunk-FQMM2EZ2.js +248 -0
  186. package/dist/node-runtime/chunk-FVDOXRUD.js +96 -0
  187. package/dist/node-runtime/chunk-G6LRAP36.js +105 -0
  188. package/dist/node-runtime/chunk-GKLEQ3I4.js +860 -0
  189. package/dist/node-runtime/chunk-H2EOZYMP.js +57 -0
  190. package/dist/node-runtime/chunk-HQCKFM2O.js +56 -0
  191. package/dist/node-runtime/chunk-HYHJIRDW.js +19 -0
  192. package/dist/node-runtime/chunk-I6R76AG7.js +22 -0
  193. package/dist/node-runtime/chunk-IRPJXI6U.js +1269 -0
  194. package/dist/node-runtime/chunk-J26TSGDL.js +633 -0
  195. package/dist/node-runtime/chunk-JHYKXIMM.js +378 -0
  196. package/dist/node-runtime/chunk-JZQ7F36T.js +610 -0
  197. package/dist/node-runtime/chunk-KBKMCJDU.js +126 -0
  198. package/dist/node-runtime/chunk-KWA4OC2J.js +100 -0
  199. package/dist/node-runtime/chunk-M3LZLQW2.js +98 -0
  200. package/dist/node-runtime/chunk-MCUNIRD5.js +8388 -0
  201. package/dist/node-runtime/chunk-NUIFPZWX.js +209 -0
  202. package/dist/node-runtime/chunk-OBMWP3I5.js +68 -0
  203. package/dist/node-runtime/chunk-OCVIXVTZ.js +88 -0
  204. package/dist/node-runtime/chunk-OPEK5RRY.js +466 -0
  205. package/dist/node-runtime/chunk-OR4L3IB2.js +42 -0
  206. package/dist/node-runtime/chunk-PL6JKXWI.js +3622 -0
  207. package/dist/node-runtime/chunk-PNJSG3IZ.js +807 -0
  208. package/dist/node-runtime/chunk-PVCDKGR6.js +55 -0
  209. package/dist/node-runtime/chunk-Q4Q6D4IY.js +364 -0
  210. package/dist/node-runtime/chunk-Q5ZU2VRT.js +83 -0
  211. package/dist/node-runtime/chunk-QFWG2RVL.js +5477 -0
  212. package/dist/node-runtime/chunk-QZMODZQ2.js +305 -0
  213. package/dist/node-runtime/chunk-RNBHABBA.js +986 -0
  214. package/dist/node-runtime/chunk-RQ2Q5IYR.js +72 -0
  215. package/dist/node-runtime/chunk-RRIZE6QQ.js +17 -0
  216. package/dist/node-runtime/chunk-SN6G4OU6.js +4753 -0
  217. package/dist/node-runtime/chunk-STERBGUB.js +949 -0
  218. package/dist/node-runtime/chunk-TFBIJTM3.js +966 -0
  219. package/dist/node-runtime/chunk-TXHKBRHZ.js +9450 -0
  220. package/dist/node-runtime/chunk-UWQYRSYQ.js +8973 -0
  221. package/dist/node-runtime/chunk-VRB2IYGG.js +53 -0
  222. package/dist/node-runtime/chunk-VSELYKWU.js +772 -0
  223. package/dist/node-runtime/chunk-W3CVH5RX.js +62 -0
  224. package/dist/node-runtime/chunk-WJVFOIB5.js +24921 -0
  225. package/dist/node-runtime/chunk-WKDK4C5P.js +2834 -0
  226. package/dist/node-runtime/chunk-XATUM2HK.js +46 -0
  227. package/dist/node-runtime/chunk-XBWPBZBN.js +125 -0
  228. package/dist/node-runtime/chunk-XTHQ7XR7.js +509 -0
  229. package/dist/node-runtime/chunk-ZRCBN365.js +1734 -0
  230. package/dist/node-runtime/cli-runtime.js +80 -0
  231. package/dist/node-runtime/clipboard-OZ63BBC6.js +12 -0
  232. package/dist/node-runtime/clipboard-image-7QR6GXVA.js +13 -0
  233. package/dist/node-runtime/command-DWUM5X3U.js +13 -0
  234. package/dist/node-runtime/commands-MV5KOZ64.js +291 -0
  235. package/dist/node-runtime/config-QDD5PUE2.js +73 -0
  236. package/dist/node-runtime/curator-server-XCM43VEF.js +3816 -0
  237. package/dist/node-runtime/customize-XEXL2DGQ.js +12 -0
  238. package/dist/node-runtime/direct-tool-executor-BK7CLEBX.js +188 -0
  239. package/dist/node-runtime/exa-LL64QZR2.js +329 -0
  240. package/dist/node-runtime/export-html-TEXVV5RP.js +150 -0
  241. package/dist/node-runtime/extension-input-O4HSAEM4.js +14 -0
  242. package/dist/node-runtime/extension-selector-X5FCX43D.js +14 -0
  243. package/dist/node-runtime/extract-XLQSJN4V.js +17 -0
  244. package/dist/node-runtime/file-sync-HCOP2QVF.js +117 -0
  245. package/dist/node-runtime/gateway-UZXMFGWY.js +2137 -0
  246. package/dist/node-runtime/gemini-api-QE7ANVDZ.js +29 -0
  247. package/dist/node-runtime/gemini-search-U7SUMPQA.js +330 -0
  248. package/dist/node-runtime/gemini-url-context-PXWCBQHK.js +103 -0
  249. package/dist/node-runtime/gemini-web-MM446SEH.js +14 -0
  250. package/dist/node-runtime/github-extract-F64RZOEA.js +619 -0
  251. package/dist/node-runtime/goal-NJEE5CTU.js +1831 -0
  252. package/dist/node-runtime/index.js +859 -0
  253. package/dist/node-runtime/init-3C7Z24OI.js +28 -0
  254. package/dist/node-runtime/install-cli-EXMJQESX.js +308 -0
  255. package/dist/node-runtime/interactive-mode-QT5IKGQ5.js +56 -0
  256. package/dist/node-runtime/interactive-view-ILS6TAN5.js +247 -0
  257. package/dist/node-runtime/lsp-manager-3ASUSO4T.js +1104 -0
  258. package/dist/node-runtime/lunr-cron-QPBTKBGI.js +272 -0
  259. package/dist/node-runtime/main.js +54 -0
  260. package/dist/node-runtime/mcp-auth-flow-QIXHW6QN.js +32 -0
  261. package/dist/node-runtime/mcp-panel-IIGMXQGP.js +501 -0
  262. package/dist/node-runtime/mcp-setup-panel-FEK7663I.js +355 -0
  263. package/dist/node-runtime/memory-cap-3S4XRLNP.js +20 -0
  264. package/dist/node-runtime/model-tiers-NJLHUEGK.js +20 -0
  265. package/dist/node-runtime/openai-search-B3MSNCQA.js +288 -0
  266. package/dist/node-runtime/package-manager-cli-7RKSZGEN.js +749 -0
  267. package/dist/node-runtime/parallel-AI2MNSCU.js +265 -0
  268. package/dist/node-runtime/parser-manager-TQHWYDH7.js +152 -0
  269. package/dist/node-runtime/pdf-extract-IPE6H4HP.js +57 -0
  270. package/dist/node-runtime/perplexity-QVJW3I35.js +12 -0
  271. package/dist/node-runtime/pi-intercom-EEMBGQID.js +2215 -0
  272. package/dist/node-runtime/pi-mcp-adapter-GUFZWW54.js +428 -0
  273. package/dist/node-runtime/pi-ollama-cloud-2F3Y2QNM.js +1440 -0
  274. package/dist/node-runtime/pi-prompt-template-model-QWTCGLJU.js +3946 -0
  275. package/dist/node-runtime/pi-subagents-7YJ3I4VE.js +6048 -0
  276. package/dist/node-runtime/pi-web-access-2CQGFLT2.js +1867 -0
  277. package/dist/node-runtime/print-mode-XSFM26EL.js +12 -0
  278. package/dist/node-runtime/proxy-modes-V6YVFH3C.js +685 -0
  279. package/dist/node-runtime/rpc-entry.js +62 -0
  280. package/dist/node-runtime/rpc-mode-W5ZTLTMZ.js +13 -0
  281. package/dist/node-runtime/runtime-bridges-3RKBDLNA.js +14 -0
  282. package/dist/node-runtime/session-manager-E7AREDTV.js +33 -0
  283. package/dist/node-runtime/session-selector-FJ7M2AIX.js +14 -0
  284. package/dist/node-runtime/settings-manager-GHPTUN7R.js +21 -0
  285. package/dist/node-runtime/src-BPQFJR76.js +2427 -0
  286. package/dist/node-runtime/subagent-executor-5Q5A4HJ2.js +8499 -0
  287. package/dist/node-runtime/summary-review-YSMXKITO.js +228 -0
  288. package/dist/node-runtime/tavily-WEZFVFP7.js +154 -0
  289. package/dist/node-runtime/timings-UAD5BEAS.js +16 -0
  290. package/dist/node-runtime/tool-renderer-MV5O452K.js +204 -0
  291. package/dist/node-runtime/update-cli-L3JIBH2U.js +70 -0
  292. package/dist/node-runtime/v4-5MNC3H7G.js +424 -0
  293. package/dist/node-runtime/video-extract-OYT5WKS5.js +304 -0
  294. package/dist/node-runtime/workspace-index-6DBXSTJ6.js +163 -0
  295. package/dist/node-runtime/youtube-extract-TQYKGFGS.js +264 -0
  296. package/dist/rpc.d.ts +3 -0
  297. package/dist/rpc.d.ts.map +1 -0
  298. package/dist/rpc.js +18 -0
  299. package/dist/rpc.js.map +1 -0
  300. package/dist/startup/benchmark-request.d.ts +3 -0
  301. package/dist/startup/benchmark-request.d.ts.map +1 -0
  302. package/dist/startup/benchmark-request.js +65 -0
  303. package/dist/startup/benchmark-request.js.map +1 -0
  304. package/dist/startup/interactive-view.d.ts.map +1 -1
  305. package/dist/startup/interactive-view.js +1 -2
  306. package/dist/startup/interactive-view.js.map +1 -1
  307. package/dist/startup/startup-milestones.d.ts +1 -1
  308. package/dist/startup/startup-milestones.d.ts.map +1 -1
  309. package/dist/startup/startup-milestones.js.map +1 -1
  310. package/dist/utils/await-with-abort.d.ts +2 -0
  311. package/dist/utils/await-with-abort.d.ts.map +1 -0
  312. package/dist/utils/await-with-abort.js +19 -0
  313. package/dist/utils/await-with-abort.js.map +1 -0
  314. package/docs/development.md +5 -1
  315. package/docs/features.md +2 -2
  316. package/docs/interactive-startup.md +95 -48
  317. package/docs/keybindings.md +2 -2
  318. package/docs/terminal-setup.md +1 -1
  319. package/docs/usage.md +1 -1
  320. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  321. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  322. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  323. package/examples/extensions/gondolin/package-lock.json +2 -2
  324. package/examples/extensions/gondolin/package.json +1 -1
  325. package/examples/extensions/hidden-thinking-label.ts +1 -1
  326. package/examples/extensions/sandbox/package-lock.json +2 -2
  327. package/examples/extensions/sandbox/package.json +1 -1
  328. package/examples/extensions/with-deps/package-lock.json +2 -2
  329. package/examples/extensions/with-deps/package.json +1 -1
  330. package/package.json +8 -8
@@ -0,0 +1,685 @@
1
+ import { createRequire as __lunrRequire } from "node:module"; const require = __lunrRequire(import.meta.url);
2
+ import {
3
+ guardMcpOutput,
4
+ guardedMcpDetails,
5
+ maybeStartUiSession,
6
+ resolveMcpOutputGuardOptions,
7
+ resolveMcpResultContent,
8
+ transformMcpContent
9
+ } from "./chunk-IRPJXI6U.js";
10
+ import {
11
+ buildToolMetadata,
12
+ findToolByName,
13
+ formatSchema,
14
+ getFailureAgeSeconds,
15
+ getToolNames,
16
+ lazyConnect,
17
+ updateMetadataCache,
18
+ updateServerMetadata,
19
+ updateStatusBar
20
+ } from "./chunk-UWQYRSYQ.js";
21
+ import {
22
+ abortable,
23
+ formatAuthRequiredMessage,
24
+ throwIfAborted,
25
+ truncateAtWord
26
+ } from "./chunk-VSELYKWU.js";
27
+ import {
28
+ UrlElicitationRequiredError,
29
+ authenticate,
30
+ completeAuthFromInput,
31
+ startAuth,
32
+ supportsOAuth
33
+ } from "./chunk-4TLO4PO2.js";
34
+ import "./chunk-4HXHDDCF.js";
35
+ import "./chunk-BI3DHYCN.js";
36
+ import {
37
+ getServerPrefix,
38
+ parseUiPromptHandoff
39
+ } from "./chunk-ARC4KOTI.js";
40
+ import "./chunk-Q4Q6D4IY.js";
41
+ import "./chunk-BRJX2PRC.js";
42
+
43
+ // packages/coding-agent/dist/builtin-extensions/pi-mcp-adapter/proxy-modes.js
44
+ import { checkSync } from "recheck";
45
+ var MAX_REGEX_SEARCH_QUERY_LENGTH = 256, REGEX_SAFETY_CHECK_PARAMS = {
46
+ attackTimeout: 50,
47
+ incubationTimeout: 50,
48
+ timeout: 250
49
+ };
50
+ function getAuthRequiredMessage(state, serverName, defaultMessage = `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.`) {
51
+ return formatAuthRequiredMessage(state.config, serverName, defaultMessage);
52
+ }
53
+ function getAuthFailedMessage(state, serverName, message) {
54
+ return state.config.settings?.authRequiredMessage ? `OAuth authentication failed for "${serverName}": ${message}. ${getAuthRequiredMessage(state, serverName)}` : `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.`;
55
+ }
56
+ function getRedirectPort(authorizationUrl) {
57
+ try {
58
+ let redirectUri = new URL(authorizationUrl).searchParams.get("redirect_uri");
59
+ if (!redirectUri)
60
+ return;
61
+ let port = Number.parseInt(new URL(redirectUri).port, 10);
62
+ return Number.isInteger(port) ? port : void 0;
63
+ } catch {
64
+ return;
65
+ }
66
+ }
67
+ function formatManualAuthInstructions(serverName, authorizationUrl) {
68
+ let port = getRedirectPort(authorizationUrl), portNote = port ? `
69
+ The redirect URL will use local port ${port}. On a remote server it is expected for that localhost page to fail locally; copy the address bar URL anyway.` : "";
70
+ return [
71
+ `MCP OAuth required for "${serverName}".`,
72
+ "",
73
+ "Open this URL in your local browser:",
74
+ "",
75
+ authorizationUrl,
76
+ "",
77
+ "After approving, copy the full redirected localhost URL from your browser address bar and send it back with:",
78
+ `mcp({ action: "auth-complete", server: "${serverName}", args: '{"redirectUrl":"PASTE_REDIRECT_URL_HERE"}' })`,
79
+ "",
80
+ 'You can also pass just the `code` query parameter as `args: \'{"code":"PASTE_CODE_HERE"}\'`.',
81
+ portNote.trimEnd()
82
+ ].filter(Boolean).join(`
83
+ `);
84
+ }
85
+ async function attemptAutoAuth(state, serverName) {
86
+ if (state.config.settings?.autoAuth !== !0)
87
+ return { status: "skipped" };
88
+ let definition = state.config.mcpServers[serverName];
89
+ if (!definition || !supportsOAuth(definition) || !definition.url)
90
+ return { status: "skipped" };
91
+ let grantType = definition.oauth ? definition.oauth.grantType ?? "authorization_code" : "authorization_code";
92
+ if (!state.ui && grantType !== "client_credentials")
93
+ return {
94
+ status: "failed",
95
+ message: getAuthRequiredMessage(state, serverName, `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.`)
96
+ };
97
+ try {
98
+ return await authenticate(serverName, definition.url, definition), { status: "success" };
99
+ } catch (error) {
100
+ let message = error instanceof Error ? error.message : String(error);
101
+ return {
102
+ status: "failed",
103
+ message: getAuthFailedMessage(state, serverName, message)
104
+ };
105
+ }
106
+ }
107
+ function executeUiMessages(state) {
108
+ let sessions = state.completedUiSessions;
109
+ if (sessions.length === 0)
110
+ return {
111
+ content: [{ type: "text", text: "No UI session messages available." }],
112
+ details: { sessions: 0 }
113
+ };
114
+ let output = [];
115
+ output.push(`UI Session Messages (${sessions.length} session${sessions.length > 1 ? "s" : ""}):
116
+ `);
117
+ let allPrompts = [], allIntents = sessions.flatMap((session) => session.messages.intents), parsedHandoffs = [];
118
+ for (let session of sessions) {
119
+ let timestamp = session.completedAt.toLocaleTimeString();
120
+ output.push(`
121
+ ## ${session.serverName} / ${session.toolName} (${timestamp}, ${session.reason})`);
122
+ let plainPrompts = [];
123
+ for (let prompt of session.messages.prompts) {
124
+ allPrompts.push(prompt);
125
+ let handoff = parseUiPromptHandoff(prompt);
126
+ handoff ? parsedHandoffs.push(handoff) : plainPrompts.push(prompt);
127
+ }
128
+ if (plainPrompts.length > 0) {
129
+ output.push(`
130
+ ### Prompts:`);
131
+ for (let prompt of plainPrompts)
132
+ output.push(`- ${prompt}`);
133
+ }
134
+ let intentsForSession = [
135
+ ...session.messages.intents,
136
+ ...session.messages.prompts.map((prompt) => parseUiPromptHandoff(prompt)).filter((handoff) => !!handoff).map((handoff) => ({ intent: handoff.intent, params: handoff.params }))
137
+ ];
138
+ if (intentsForSession.length > 0) {
139
+ output.push(`
140
+ ### Intents:`);
141
+ for (let intent of intentsForSession) {
142
+ let params = intent.params ? ` (${JSON.stringify(intent.params)})` : "";
143
+ output.push(`- ${intent.intent}${params}`);
144
+ }
145
+ }
146
+ if (session.messages.notifications.length > 0) {
147
+ output.push(`
148
+ ### Notifications:`);
149
+ for (let notification of session.messages.notifications)
150
+ output.push(`- ${notification}`);
151
+ }
152
+ }
153
+ let count = sessions.length;
154
+ return state.completedUiSessions = [], {
155
+ content: [{ type: "text", text: output.join(`
156
+ `) }],
157
+ details: {
158
+ sessions: count,
159
+ prompts: allPrompts,
160
+ intents: [...allIntents, ...parsedHandoffs.map(({ intent, params }) => ({ intent, params }))],
161
+ handoffs: parsedHandoffs,
162
+ cleared: !0
163
+ }
164
+ };
165
+ }
166
+ function executeStatus(state) {
167
+ let servers = [];
168
+ for (let name of Object.keys(state.config.mcpServers)) {
169
+ let connection = state.manager.getConnection(name), metadata = state.toolMetadata.get(name), toolCount = metadata?.length ?? 0, failedAgo = getFailureAgeSeconds(state, name), status = "not connected";
170
+ connection?.status === "connected" ? status = "connected" : connection?.status === "needs-auth" ? status = "needs-auth" : failedAgo !== null ? status = "failed" : metadata !== void 0 && (status = "cached"), servers.push({ name, status, toolCount, failedAgo });
171
+ }
172
+ let totalTools = servers.reduce((sum, s) => sum + s.toolCount, 0), connectedCount = servers.filter((s) => s.status === "connected").length, text = `MCP: ${connectedCount}/${servers.length} servers, ${totalTools} tools
173
+
174
+ `;
175
+ for (let server of servers) {
176
+ if (server.status === "connected") {
177
+ text += `\u2713 ${server.name} (${server.toolCount} tools)
178
+ `;
179
+ continue;
180
+ }
181
+ if (server.status === "needs-auth") {
182
+ text += `\u26A0 ${server.name} (needs auth)
183
+ `;
184
+ continue;
185
+ }
186
+ if (server.status === "cached") {
187
+ text += `\u25CB ${server.name} (${server.toolCount} tools, cached)
188
+ `;
189
+ continue;
190
+ }
191
+ if (server.status === "failed") {
192
+ text += `\u2717 ${server.name} (failed ${server.failedAgo ?? 0}s ago)
193
+ `;
194
+ continue;
195
+ }
196
+ text += `\u25CB ${server.name} (not connected)
197
+ `;
198
+ }
199
+ return servers.length > 0 && (text += `
200
+ mcp({ server: "name" }) to list tools, mcp({ search: "..." }) to search`), {
201
+ content: [{ type: "text", text: text.trim() }],
202
+ details: { mode: "status", servers, totalTools, connectedCount }
203
+ };
204
+ }
205
+ async function executeAuthStart(state, serverName) {
206
+ let definition = state.config.mcpServers[serverName];
207
+ if (!definition)
208
+ return {
209
+ content: [{ type: "text", text: `Server "${serverName}" not found. Use mcp({}) to see available servers.` }],
210
+ details: { mode: "auth-start", error: "not_found", server: serverName }
211
+ };
212
+ if (!definition.url || !supportsOAuth(definition))
213
+ return {
214
+ content: [{ type: "text", text: `Server "${serverName}" is not configured for OAuth over HTTP.` }],
215
+ details: { mode: "auth-start", error: "oauth_not_supported", server: serverName }
216
+ };
217
+ try {
218
+ let { authorizationUrl } = await startAuth(serverName, definition.url, definition);
219
+ return authorizationUrl ? {
220
+ content: [{ type: "text", text: formatManualAuthInstructions(serverName, authorizationUrl) }],
221
+ details: { mode: "auth-start", server: serverName, authorizationUrl }
222
+ } : {
223
+ content: [{ type: "text", text: `OAuth authentication successful for "${serverName}".` }],
224
+ details: { mode: "auth-start", server: serverName, authenticated: !0 }
225
+ };
226
+ } catch (error) {
227
+ let message = error instanceof Error ? error.message : String(error);
228
+ return {
229
+ content: [{ type: "text", text: `Failed to start OAuth for "${serverName}": ${message}` }],
230
+ details: { mode: "auth-start", error: "auth_start_failed", server: serverName, message }
231
+ };
232
+ }
233
+ }
234
+ async function executeAuthComplete(state, serverName, input) {
235
+ if (!state.config.mcpServers[serverName])
236
+ return {
237
+ content: [{ type: "text", text: `Server "${serverName}" not found. Use mcp({}) to see available servers.` }],
238
+ details: { mode: "auth-complete", error: "not_found", server: serverName }
239
+ };
240
+ try {
241
+ let status = await completeAuthFromInput(serverName, input);
242
+ return status !== "authenticated" ? {
243
+ content: [{ type: "text", text: `OAuth authentication did not complete for "${serverName}".` }],
244
+ details: { mode: "auth-complete", error: "not_authenticated", server: serverName, status }
245
+ } : (await state.manager.close(serverName), state.failureTracker.delete(serverName), updateStatusBar(state), {
246
+ content: [{ type: "text", text: `OAuth authentication successful for "${serverName}". Run mcp({ connect: "${serverName}" }) to connect with the new token.` }],
247
+ details: { mode: "auth-complete", server: serverName, authenticated: !0 }
248
+ });
249
+ } catch (error) {
250
+ let message = error instanceof Error ? error.message : String(error);
251
+ return {
252
+ content: [{ type: "text", text: `Failed to complete OAuth for "${serverName}": ${message}` }],
253
+ details: { mode: "auth-complete", error: "auth_complete_failed", server: serverName, message }
254
+ };
255
+ }
256
+ }
257
+ function executeDescribe(state, toolName) {
258
+ let serverName, toolMeta;
259
+ for (let [server, metadata] of state.toolMetadata.entries()) {
260
+ let found = findToolByName(metadata, toolName);
261
+ if (found) {
262
+ serverName = server, toolMeta = found;
263
+ break;
264
+ }
265
+ }
266
+ if (!serverName || !toolMeta)
267
+ return {
268
+ content: [{ type: "text", text: `Tool "${toolName}" not found. Use mcp({ search: "..." }) to search.` }],
269
+ details: { mode: "describe", error: "tool_not_found", requestedTool: toolName }
270
+ };
271
+ let text = `${toolMeta.name}
272
+ `;
273
+ return text += `Server: ${serverName}
274
+ `, toolMeta.resourceUri && (text += `Type: Resource (reads from ${toolMeta.resourceUri})
275
+ `), text += `
276
+ ${toolMeta.description || "(no description)"}
277
+ `, toolMeta.inputSchema && !toolMeta.resourceUri ? text += `
278
+ Parameters:
279
+ ${formatSchema(toolMeta.inputSchema)}` : toolMeta.resourceUri ? text += `
280
+ No parameters required (resource tool).` : text += `
281
+ No parameters defined.`, {
282
+ content: [{ type: "text", text: text.trim() }],
283
+ details: { mode: "describe", tool: toolMeta, server: serverName }
284
+ };
285
+ }
286
+ function executeSearch(state, query, regex, server, includeSchemas) {
287
+ let showSchemas = includeSchemas !== !1, matches = [], pattern;
288
+ try {
289
+ if (regex) {
290
+ if (query.length > MAX_REGEX_SEARCH_QUERY_LENGTH)
291
+ return {
292
+ content: [{ type: "text", text: `Regex query is too long; maximum length is ${MAX_REGEX_SEARCH_QUERY_LENGTH} characters.` }],
293
+ details: { mode: "search", error: "query_too_long", query, maxLength: MAX_REGEX_SEARCH_QUERY_LENGTH }
294
+ };
295
+ pattern = new RegExp(query, "i");
296
+ let safety;
297
+ try {
298
+ safety = checkSync(query, "i", REGEX_SAFETY_CHECK_PARAMS);
299
+ } catch (error) {
300
+ let message = error instanceof Error ? error.message : String(error);
301
+ return {
302
+ content: [{ type: "text", text: "Regex query rejected because safety analysis failed." }],
303
+ details: { mode: "search", error: "unsafe_pattern", query, reason: message }
304
+ };
305
+ }
306
+ if (safety.status !== "safe")
307
+ return {
308
+ content: [{ type: "text", text: `Regex query rejected as unsafe (${safety.status}).` }],
309
+ details: { mode: "search", error: "unsafe_pattern", query, safetyStatus: safety.status }
310
+ };
311
+ } else {
312
+ let terms = query.trim().split(/\s+/).filter((t) => t.length > 0);
313
+ if (terms.length === 0)
314
+ return {
315
+ content: [{ type: "text", text: "Search query cannot be empty" }],
316
+ details: { mode: "search", error: "empty_query" }
317
+ };
318
+ let escaped = terms.map((t) => t.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"));
319
+ pattern = new RegExp(escaped.join("|"), "i");
320
+ }
321
+ } catch {
322
+ return {
323
+ content: [{ type: "text", text: `Invalid regex: ${query}` }],
324
+ details: { mode: "search", error: "invalid_pattern", query }
325
+ };
326
+ }
327
+ for (let [serverName, metadata] of state.toolMetadata.entries())
328
+ if (!(server && serverName !== server))
329
+ for (let tool of metadata)
330
+ (pattern.test(tool.name) || pattern.test(tool.description)) && matches.push({
331
+ server: serverName,
332
+ tool
333
+ });
334
+ let totalCount = matches.length;
335
+ if (totalCount === 0)
336
+ return {
337
+ content: [{ type: "text", text: server ? `No tools matching "${query}" in "${server}"` : `No tools matching "${query}"` }],
338
+ details: { mode: "search", matches: [], count: 0, query }
339
+ };
340
+ let text = `Found ${totalCount} tool${totalCount === 1 ? "" : "s"} matching "${query}":
341
+
342
+ `;
343
+ for (let match of matches)
344
+ showSchemas ? (text += `${match.tool.name}
345
+ `, text += ` ${match.tool.description || "(no description)"}
346
+ `, match.tool.inputSchema && !match.tool.resourceUri ? text += `
347
+ Parameters:
348
+ ${formatSchema(match.tool.inputSchema, " ")}
349
+ ` : match.tool.resourceUri && (text += ` No parameters (resource tool).
350
+ `), text += `
351
+ `) : (text += `- ${match.tool.name}`, match.tool.description && (text += ` - ${truncateAtWord(match.tool.description, 50)}`), text += `
352
+ `);
353
+ return {
354
+ content: [{ type: "text", text: text.trim() }],
355
+ details: {
356
+ mode: "search",
357
+ matches: matches.map((m) => ({ server: m.server, tool: m.tool.name })),
358
+ count: totalCount,
359
+ query
360
+ }
361
+ };
362
+ }
363
+ function executeList(state, server) {
364
+ if (!state.config.mcpServers[server])
365
+ return {
366
+ content: [{ type: "text", text: `Server "${server}" not found. Use mcp({}) to see available servers.` }],
367
+ details: { mode: "list", server, tools: [], count: 0, error: "not_found" }
368
+ };
369
+ let metadata = state.toolMetadata.get(server), toolNames = metadata?.map((m) => m.name) ?? [], connection = state.manager.getConnection(server);
370
+ if (toolNames.length === 0)
371
+ return connection?.status === "connected" ? {
372
+ content: [{ type: "text", text: `Server "${server}" has no tools.` }],
373
+ details: { mode: "list", server, tools: [], count: 0 }
374
+ } : metadata !== void 0 ? {
375
+ content: [{ type: "text", text: `Server "${server}" has no cached tools (not connected).` }],
376
+ details: { mode: "list", server, tools: [], count: 0, cached: !0 }
377
+ } : {
378
+ content: [{ type: "text", text: `Server "${server}" is configured but not connected. Use mcp({ connect: "${server}" }) or /mcp reconnect ${server} to retry.` }],
379
+ details: { mode: "list", server, tools: [], count: 0, error: "not_connected" }
380
+ };
381
+ let cachedNote = connection?.status === "connected" ? "" : " (not connected, cached)", text = `${server} (${toolNames.length} tools${cachedNote}):
382
+
383
+ `, descMap = /* @__PURE__ */ new Map();
384
+ if (metadata)
385
+ for (let m of metadata)
386
+ descMap.set(m.name, m.description);
387
+ for (let tool of toolNames) {
388
+ let desc = descMap.get(tool) ?? "", truncated = truncateAtWord(desc, 50);
389
+ text += `- ${tool}`, truncated && (text += ` - ${truncated}`), text += `
390
+ `;
391
+ }
392
+ return {
393
+ content: [{ type: "text", text: text.trim() }],
394
+ details: { mode: "list", server, tools: toolNames, count: toolNames.length }
395
+ };
396
+ }
397
+ async function executeConnect(state, serverName, signal) {
398
+ throwIfAborted(signal);
399
+ let definition = state.config.mcpServers[serverName];
400
+ if (!definition)
401
+ return {
402
+ content: [{ type: "text", text: `Server "${serverName}" not found. Use mcp({}) to see available servers.` }],
403
+ details: { mode: "connect", error: "not_found", server: serverName }
404
+ };
405
+ try {
406
+ state.ui && state.ui.setStatus("mcp", `MCP: connecting to ${serverName}...`);
407
+ let connection = await state.manager.connect(serverName, definition, signal);
408
+ if (connection.status === "needs-auth") {
409
+ let autoAuth = await attemptAutoAuth(state, serverName);
410
+ if (autoAuth.status === "failed")
411
+ return {
412
+ content: [{ type: "text", text: autoAuth.message }],
413
+ details: { mode: "connect", error: "auth_required", server: serverName, message: autoAuth.message }
414
+ };
415
+ if (autoAuth.status === "success" && (await state.manager.close(serverName), connection = await state.manager.connect(serverName, definition, signal)), connection.status === "needs-auth") {
416
+ let message = getAuthRequiredMessage(state, serverName);
417
+ return {
418
+ content: [{ type: "text", text: message }],
419
+ details: { mode: "connect", error: "auth_required", server: serverName, message }
420
+ };
421
+ }
422
+ }
423
+ let prefix = state.config.settings?.toolPrefix ?? "server", { metadata } = buildToolMetadata(connection.tools, connection.resources, definition, serverName, prefix);
424
+ return state.toolMetadata.set(serverName, metadata), updateMetadataCache(state, serverName), state.failureTracker.delete(serverName), updateStatusBar(state), executeList(state, serverName);
425
+ } catch (error) {
426
+ signal?.aborted || state.failureTracker.set(serverName, Date.now()), updateStatusBar(state);
427
+ let message = error instanceof Error ? error.message : String(error);
428
+ return {
429
+ content: [{ type: "text", text: `Failed to connect to "${serverName}": ${message}` }],
430
+ details: { mode: "connect", error: signal?.aborted ? "aborted" : "connect_failed", server: serverName, message }
431
+ };
432
+ }
433
+ }
434
+ async function executeCall(state, toolName, args, serverOverride, getPiTools, signal) {
435
+ throwIfAborted(signal);
436
+ let serverName = serverOverride, toolMeta, autoAuthAttempted = !1, prefixMode = state.config.settings?.toolPrefix ?? "server";
437
+ if (serverName && !state.config.mcpServers[serverName])
438
+ return {
439
+ content: [{ type: "text", text: `Server "${serverName}" not found. Use mcp({}) to see available servers.` }],
440
+ details: { mode: "call", error: "server_not_found", server: serverName }
441
+ };
442
+ if (serverName)
443
+ toolMeta = findToolByName(state.toolMetadata.get(serverName), toolName);
444
+ else
445
+ for (let [server, metadata] of state.toolMetadata.entries()) {
446
+ let found = findToolByName(metadata, toolName);
447
+ if (found) {
448
+ serverName = server, toolMeta = found;
449
+ break;
450
+ }
451
+ }
452
+ if (serverName && !toolMeta)
453
+ if (await lazyConnect(state, serverName, signal))
454
+ toolMeta = findToolByName(state.toolMetadata.get(serverName), toolName);
455
+ else {
456
+ if (state.manager.getConnection(serverName)?.status === "needs-auth") {
457
+ if (!autoAuthAttempted) {
458
+ autoAuthAttempted = !0;
459
+ let autoAuth = await attemptAutoAuth(state, serverName);
460
+ if (autoAuth.status === "failed")
461
+ return {
462
+ content: [{ type: "text", text: autoAuth.message }],
463
+ details: { mode: "call", error: "auth_required", server: serverName, message: autoAuth.message }
464
+ };
465
+ if (autoAuth.status === "success" && (await state.manager.close(serverName), state.failureTracker.delete(serverName), await lazyConnect(state, serverName, signal) && (toolMeta = findToolByName(state.toolMetadata.get(serverName), toolName), !toolMeta)))
466
+ return {
467
+ content: [{ type: "text", text: `Tool "${toolName}" not found on "${serverName}" after reconnect.` }],
468
+ details: { mode: "call", error: "tool_not_found_after_reconnect", requestedTool: toolName }
469
+ };
470
+ }
471
+ if (!toolMeta && state.manager.getConnection(serverName)?.status === "needs-auth") {
472
+ let message = getAuthRequiredMessage(state, serverName);
473
+ return {
474
+ content: [{ type: "text", text: message }],
475
+ details: { mode: "call", error: "auth_required", server: serverName, message }
476
+ };
477
+ }
478
+ }
479
+ if (!toolMeta) {
480
+ let failedAgo = getFailureAgeSeconds(state, serverName);
481
+ if (failedAgo !== null)
482
+ return {
483
+ content: [{ type: "text", text: `Server "${serverName}" not available (last failed ${failedAgo}s ago)` }],
484
+ details: { mode: "call", error: "server_backoff", server: serverName }
485
+ };
486
+ }
487
+ }
488
+ let prefixMatchedServer;
489
+ if (!serverName && !toolMeta && prefixMode !== "none") {
490
+ let candidates = Object.keys(state.config.mcpServers).map((name) => ({ name, prefix: getServerPrefix(name, prefixMode) })).filter((c) => c.prefix && toolName.startsWith(c.prefix + "_")).sort((a, b) => b.prefix.length - a.prefix.length);
491
+ for (let { name: configuredServer } of candidates) {
492
+ let existingConnection = state.manager.getConnection(configuredServer);
493
+ if (getFailureAgeSeconds(state, configuredServer) !== null && existingConnection?.status !== "needs-auth")
494
+ continue;
495
+ let connected = await lazyConnect(state, configuredServer, signal);
496
+ if (!connected && state.manager.getConnection(configuredServer)?.status === "needs-auth" && !autoAuthAttempted) {
497
+ autoAuthAttempted = !0;
498
+ let autoAuth = await attemptAutoAuth(state, configuredServer);
499
+ if (autoAuth.status === "failed")
500
+ return {
501
+ content: [{ type: "text", text: autoAuth.message }],
502
+ details: { mode: "call", error: "auth_required", server: configuredServer, message: autoAuth.message }
503
+ };
504
+ autoAuth.status === "success" && (await state.manager.close(configuredServer), state.failureTracker.delete(configuredServer), connected = await lazyConnect(state, configuredServer, signal));
505
+ }
506
+ if (connected && (prefixMatchedServer || (prefixMatchedServer = configuredServer), toolMeta = findToolByName(state.toolMetadata.get(configuredServer), toolName), toolMeta)) {
507
+ serverName = configuredServer;
508
+ break;
509
+ }
510
+ }
511
+ }
512
+ if (!serverName || !toolMeta) {
513
+ if (serverOverride ? void 0 : getPiTools?.().find((tool) => tool.name === toolName && tool.name !== "mcp"))
514
+ return {
515
+ content: [{ type: "text", text: `"${toolName}" is a native Pi tool. Call ${toolName} directly instead of using mcp({ tool: "${toolName}" }).` }],
516
+ details: { mode: "call", error: "native_tool", requestedTool: toolName }
517
+ };
518
+ let hintServer = serverName ?? prefixMatchedServer, available = hintServer ? getToolNames(state, hintServer) : [], msg = `Tool "${toolName}" not found.`;
519
+ return available.length > 0 ? msg += ` Server "${hintServer}" has: ${available.join(", ")}` : msg += ' Use mcp({ search: "..." }) to search.', {
520
+ content: [{ type: "text", text: msg }],
521
+ details: { mode: "call", error: "tool_not_found", requestedTool: toolName, hintServer }
522
+ };
523
+ }
524
+ let connection = state.manager.getConnection(serverName);
525
+ if (connection?.status === "needs-auth") {
526
+ if (!autoAuthAttempted) {
527
+ autoAuthAttempted = !0;
528
+ let autoAuth = await attemptAutoAuth(state, serverName);
529
+ if (autoAuth.status === "failed")
530
+ return {
531
+ content: [{ type: "text", text: autoAuth.message }],
532
+ details: { mode: "call", error: "auth_required", server: serverName, message: autoAuth.message }
533
+ };
534
+ autoAuth.status === "success" && (await state.manager.close(serverName), state.failureTracker.delete(serverName), connection = state.manager.getConnection(serverName));
535
+ }
536
+ if (connection?.status === "needs-auth") {
537
+ let message = getAuthRequiredMessage(state, serverName);
538
+ return {
539
+ content: [{ type: "text", text: message }],
540
+ details: { mode: "call", error: "auth_required", server: serverName, message }
541
+ };
542
+ }
543
+ }
544
+ if (!connection || connection.status !== "connected") {
545
+ let failedAgo = getFailureAgeSeconds(state, serverName);
546
+ if (failedAgo !== null)
547
+ return {
548
+ content: [{ type: "text", text: `Server "${serverName}" not available (last failed ${failedAgo}s ago)` }],
549
+ details: { mode: "call", error: "server_backoff", server: serverName }
550
+ };
551
+ let definition = state.config.mcpServers[serverName];
552
+ if (!definition)
553
+ return {
554
+ content: [{ type: "text", text: `Server "${serverName}" not connected` }],
555
+ details: { mode: "call", error: "server_not_connected", server: serverName }
556
+ };
557
+ try {
558
+ if (state.ui && state.ui.setStatus("mcp", `MCP: connecting to ${serverName}...`), connection = await state.manager.connect(serverName, definition, signal), connection.status === "needs-auth") {
559
+ if (!autoAuthAttempted) {
560
+ autoAuthAttempted = !0;
561
+ let autoAuth = await attemptAutoAuth(state, serverName);
562
+ if (autoAuth.status === "failed")
563
+ return {
564
+ content: [{ type: "text", text: autoAuth.message }],
565
+ details: { mode: "call", error: "auth_required", server: serverName, message: autoAuth.message }
566
+ };
567
+ autoAuth.status === "success" && (await state.manager.close(serverName), connection = await state.manager.connect(serverName, definition, signal));
568
+ }
569
+ if (connection.status === "needs-auth") {
570
+ let message = getAuthRequiredMessage(state, serverName);
571
+ return {
572
+ content: [{ type: "text", text: message }],
573
+ details: { mode: "call", error: "auth_required", server: serverName, message }
574
+ };
575
+ }
576
+ }
577
+ if (state.failureTracker.delete(serverName), updateServerMetadata(state, serverName), updateMetadataCache(state, serverName), updateStatusBar(state), toolMeta = findToolByName(state.toolMetadata.get(serverName), toolName), !toolMeta) {
578
+ let available = getToolNames(state, serverName), hint = available.length > 0 ? `Available tools on "${serverName}": ${available.join(", ")}` : `Server "${serverName}" has no tools.`;
579
+ return {
580
+ content: [{ type: "text", text: `Tool "${toolName}" not found on "${serverName}" after reconnect. ${hint}` }],
581
+ details: { mode: "call", error: "tool_not_found_after_reconnect", requestedTool: toolName }
582
+ };
583
+ }
584
+ } catch (error) {
585
+ signal?.aborted || state.failureTracker.set(serverName, Date.now()), updateStatusBar(state);
586
+ let message = error instanceof Error ? error.message : String(error);
587
+ return {
588
+ content: [{ type: "text", text: `Failed to connect to "${serverName}": ${message}` }],
589
+ details: { mode: "call", error: signal?.aborted ? "aborted" : "connect_failed", message }
590
+ };
591
+ }
592
+ }
593
+ let uiSession = null, requestOptions = state.manager.getRequestOptions?.(serverName, signal) ?? (signal ? { signal } : void 0), outputGuardOptions = resolveMcpOutputGuardOptions(state.config.settings);
594
+ try {
595
+ if (state.manager.touch(serverName), state.manager.incrementInFlight(serverName), toolMeta.resourceUri) {
596
+ let content2 = ((await connection.client.readResource({ uri: toolMeta.resourceUri }, requestOptions)).contents ?? []).map((c) => ({
597
+ type: "text",
598
+ text: "text" in c ? c.text : "blob" in c ? `[Binary data: ${c.mimeType ?? "unknown"}]` : JSON.stringify(c)
599
+ })), guarded2 = await guardMcpOutput(content2.length > 0 ? content2 : [{ type: "text", text: "(empty resource)" }], outputGuardOptions);
600
+ return {
601
+ content: guarded2.content,
602
+ details: { mode: "call", resourceUri: toolMeta.resourceUri, server: serverName, ...guardedMcpDetails(guarded2) }
603
+ };
604
+ }
605
+ uiSession = toolMeta.uiResourceUri ? await maybeStartUiSession(state, {
606
+ serverName,
607
+ toolName: toolMeta.originalName,
608
+ toolArgs: args ?? {},
609
+ uiResourceUri: toolMeta.uiResourceUri,
610
+ streamMode: toolMeta.uiStreamMode
611
+ }) : null;
612
+ let resultPromise = connection.client.callTool({
613
+ name: toolMeta.originalName,
614
+ arguments: args ?? {},
615
+ _meta: uiSession?.requestMeta
616
+ }, void 0, requestOptions);
617
+ if (toolMeta.uiResourceUri) {
618
+ let result2 = await abortable(resultPromise, signal);
619
+ if (uiSession?.sendToolResult(result2), result2.isError) {
620
+ let mcpContent = result2.content ?? [], content3 = transformMcpContent(mcpContent), outputContent3 = content3.length > 0 ? content3 : [{ type: "text", text: "(empty result)" }], schemaText = toolMeta.inputSchema ? `
621
+
622
+ Expected parameters:
623
+ ${formatSchema(toolMeta.inputSchema)}` : "", guarded3 = await guardMcpOutput(outputContent3, { ...outputGuardOptions, prefix: "Error: ", suffix: schemaText, emptyTextFallback: "Tool execution failed", rawMcpResult: result2 });
624
+ return {
625
+ content: guarded3.content,
626
+ details: { mode: "call", error: "tool_error", ...guardedMcpDetails(guarded3) }
627
+ };
628
+ }
629
+ let content2 = resolveMcpResultContent(result2), outputContent2 = content2.length > 0 ? content2 : [{ type: "text", text: "(empty result)" }], uiMessage = uiSession?.reused ? "Updated the open UI." : "\u{1F4FA} Interactive UI is now open in your browser. I'll respond to your prompts and intents as you interact with it.", guarded2 = await guardMcpOutput(outputContent2, { ...outputGuardOptions, suffix: `
630
+
631
+ ${uiMessage}`, rawMcpResult: result2 });
632
+ return {
633
+ content: guarded2.content,
634
+ details: { mode: "call", ...guardedMcpDetails(guarded2), server: serverName, tool: toolMeta.originalName, uiOpen: !0 }
635
+ };
636
+ }
637
+ let result = await abortable(resultPromise, signal);
638
+ if (result.isError) {
639
+ let mcpContent = result.content ?? [], content2 = transformMcpContent(mcpContent), outputContent2 = content2.length > 0 ? content2 : [{ type: "text", text: "(empty result)" }], schemaText = toolMeta.inputSchema ? `
640
+
641
+ Expected parameters:
642
+ ${formatSchema(toolMeta.inputSchema)}` : "", guarded2 = await guardMcpOutput(outputContent2, { ...outputGuardOptions, prefix: "Error: ", suffix: schemaText, emptyTextFallback: "Tool execution failed", rawMcpResult: result });
643
+ return {
644
+ content: guarded2.content,
645
+ details: { mode: "call", error: "tool_error", ...guardedMcpDetails(guarded2) }
646
+ };
647
+ }
648
+ let content = resolveMcpResultContent(result), outputContent = content.length > 0 ? content : [{ type: "text", text: "(empty result)" }], guarded = await guardMcpOutput(outputContent, { ...outputGuardOptions, rawMcpResult: result });
649
+ return {
650
+ content: guarded.content,
651
+ details: { mode: "call", ...guardedMcpDetails(guarded), server: serverName, tool: toolMeta.originalName }
652
+ };
653
+ } catch (error) {
654
+ if (error instanceof UrlElicitationRequiredError) {
655
+ let action = await state.manager.handleUrlElicitationRequired(serverName, error), message2 = action === "accept" ? "The original MCP tool did not run. Complete the opened browser interaction, then retry the tool." : `The URL interaction was ${action === "decline" ? "declined" : "cancelled"}.`;
656
+ return uiSession?.sendToolCancelled(message2), {
657
+ content: [{ type: "text", text: message2 }],
658
+ details: { mode: "call", error: "url_elicitation_required", server: serverName, action }
659
+ };
660
+ }
661
+ let message = error instanceof Error ? error.message : String(error);
662
+ uiSession?.sendToolCancelled(message);
663
+ let schemaText = toolMeta.inputSchema ? `
664
+
665
+ Expected parameters:
666
+ ${formatSchema(toolMeta.inputSchema)}` : "", guarded = await guardMcpOutput([{ type: "text", text: message }], { ...outputGuardOptions, prefix: "Failed to call tool: ", suffix: schemaText });
667
+ return {
668
+ content: guarded.content,
669
+ details: { mode: "call", error: "call_failed", message: guarded.outputGuard ? "output truncated; see outputGuard.fullOutputPath" : message, ...guardedMcpDetails(guarded) }
670
+ };
671
+ } finally {
672
+ uiSession?.reused && uiSession.close(), state.manager.decrementInFlight(serverName), state.manager.touch(serverName);
673
+ }
674
+ }
675
+ export {
676
+ executeAuthComplete,
677
+ executeAuthStart,
678
+ executeCall,
679
+ executeConnect,
680
+ executeDescribe,
681
+ executeList,
682
+ executeSearch,
683
+ executeStatus,
684
+ executeUiMessages
685
+ };