@ashx-j/lunr 0.2.25 → 0.2.27

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 (729) hide show
  1. package/CHANGELOG.md +31 -1
  2. package/LICENSE +22 -0
  3. package/dist/builtin-extensions/ashxj-thinking.d.ts +1 -1
  4. package/dist/builtin-extensions/ashxj-thinking.d.ts.map +1 -1
  5. package/dist/builtin-extensions/ashxj-thinking.js +1 -1
  6. package/dist/builtin-extensions/ashxj-thinking.js.map +1 -1
  7. package/dist/builtin-extensions/ashxj-tui.d.ts +11 -1
  8. package/dist/builtin-extensions/ashxj-tui.d.ts.map +1 -1
  9. package/dist/builtin-extensions/ashxj-tui.js +6 -10
  10. package/dist/builtin-extensions/ashxj-tui.js.map +1 -1
  11. package/dist/builtin-extensions/index.d.ts.map +1 -1
  12. package/dist/builtin-extensions/index.js +1 -0
  13. package/dist/builtin-extensions/index.js.map +1 -1
  14. package/dist/builtin-extensions/lunr-computer-use.d.ts +3 -0
  15. package/dist/builtin-extensions/lunr-computer-use.d.ts.map +1 -0
  16. package/dist/builtin-extensions/lunr-computer-use.js +179 -0
  17. package/dist/builtin-extensions/lunr-computer-use.js.map +1 -0
  18. package/dist/builtin-extensions/lunr-cron.d.ts +4 -5
  19. package/dist/builtin-extensions/lunr-cron.d.ts.map +1 -1
  20. package/dist/builtin-extensions/lunr-cron.js +94 -108
  21. package/dist/builtin-extensions/lunr-cron.js.map +1 -1
  22. package/dist/builtin-extensions/lunr-local-providers/local-servers.d.ts.map +1 -1
  23. package/dist/builtin-extensions/lunr-local-providers/local-servers.js +3 -1
  24. package/dist/builtin-extensions/lunr-local-providers/local-servers.js.map +1 -1
  25. package/dist/builtin-extensions/narumiruna-pi-goal/src/commands.d.ts.map +1 -1
  26. package/dist/builtin-extensions/narumiruna-pi-goal/src/commands.js +2 -2
  27. package/dist/builtin-extensions/narumiruna-pi-goal/src/commands.js.map +1 -1
  28. package/dist/builtin-extensions/narumiruna-pi-goal/src/goal.d.ts.map +1 -1
  29. package/dist/builtin-extensions/narumiruna-pi-goal/src/goal.js +1 -1
  30. package/dist/builtin-extensions/narumiruna-pi-goal/src/goal.js.map +1 -1
  31. package/dist/builtin-extensions/narumiruna-pi-goal/src/runtime.d.ts.map +1 -1
  32. package/dist/builtin-extensions/narumiruna-pi-goal/src/runtime.js +1 -1
  33. package/dist/builtin-extensions/narumiruna-pi-goal/src/runtime.js.map +1 -1
  34. package/dist/builtin-extensions/pi-intercom/index.d.ts.map +1 -1
  35. package/dist/builtin-extensions/pi-intercom/index.js +2 -2
  36. package/dist/builtin-extensions/pi-intercom/index.js.map +1 -1
  37. package/dist/builtin-extensions/pi-lsp-extension/bemol-extension/index.d.ts +1 -1
  38. package/dist/builtin-extensions/pi-lsp-extension/bemol-extension/index.d.ts.map +1 -1
  39. package/dist/builtin-extensions/pi-lsp-extension/bemol-extension/index.js +1 -1
  40. package/dist/builtin-extensions/pi-lsp-extension/bemol-extension/index.js.map +1 -1
  41. package/dist/builtin-extensions/pi-lsp-extension/src/index.d.ts.map +1 -1
  42. package/dist/builtin-extensions/pi-lsp-extension/src/index.js +1 -15
  43. package/dist/builtin-extensions/pi-lsp-extension/src/index.js.map +1 -1
  44. package/dist/builtin-extensions/pi-lsp-extension/src/lsp-client.d.ts +6 -0
  45. package/dist/builtin-extensions/pi-lsp-extension/src/lsp-client.d.ts.map +1 -1
  46. package/dist/builtin-extensions/pi-lsp-extension/src/lsp-client.js +187 -132
  47. package/dist/builtin-extensions/pi-lsp-extension/src/lsp-client.js.map +1 -1
  48. package/dist/builtin-extensions/pi-lsp-extension/src/lsp-manager.d.ts +8 -0
  49. package/dist/builtin-extensions/pi-lsp-extension/src/lsp-manager.d.ts.map +1 -1
  50. package/dist/builtin-extensions/pi-lsp-extension/src/lsp-manager.js +142 -112
  51. package/dist/builtin-extensions/pi-lsp-extension/src/lsp-manager.js.map +1 -1
  52. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-rewrite.d.ts +12 -1
  53. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-rewrite.d.ts.map +1 -1
  54. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-rewrite.js +14 -7
  55. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-rewrite.js.map +1 -1
  56. package/dist/builtin-extensions/pi-lsp-extension/src/tree-sitter/rewrite-engine.d.ts +11 -3
  57. package/dist/builtin-extensions/pi-lsp-extension/src/tree-sitter/rewrite-engine.d.ts.map +1 -1
  58. package/dist/builtin-extensions/pi-lsp-extension/src/tree-sitter/rewrite-engine.js +67 -41
  59. package/dist/builtin-extensions/pi-lsp-extension/src/tree-sitter/rewrite-engine.js.map +1 -1
  60. package/dist/builtin-extensions/pi-lsp-extension/src/tree-sitter/search-engine.d.ts +4 -2
  61. package/dist/builtin-extensions/pi-lsp-extension/src/tree-sitter/search-engine.d.ts.map +1 -1
  62. package/dist/builtin-extensions/pi-lsp-extension/src/tree-sitter/search-engine.js +3 -0
  63. package/dist/builtin-extensions/pi-lsp-extension/src/tree-sitter/search-engine.js.map +1 -1
  64. package/dist/builtin-extensions/pi-mcp-adapter/commands.d.ts +2 -1
  65. package/dist/builtin-extensions/pi-mcp-adapter/commands.d.ts.map +1 -1
  66. package/dist/builtin-extensions/pi-mcp-adapter/commands.js +6 -6
  67. package/dist/builtin-extensions/pi-mcp-adapter/commands.js.map +1 -1
  68. package/dist/builtin-extensions/pi-mcp-adapter/config.d.ts +1 -1
  69. package/dist/builtin-extensions/pi-mcp-adapter/config.d.ts.map +1 -1
  70. package/dist/builtin-extensions/pi-mcp-adapter/config.js +11 -5
  71. package/dist/builtin-extensions/pi-mcp-adapter/config.js.map +1 -1
  72. package/dist/builtin-extensions/pi-mcp-adapter/direct-tool-executor.d.ts.map +1 -1
  73. package/dist/builtin-extensions/pi-mcp-adapter/direct-tool-executor.js +2 -2
  74. package/dist/builtin-extensions/pi-mcp-adapter/direct-tool-executor.js.map +1 -1
  75. package/dist/builtin-extensions/pi-mcp-adapter/host-html-template.d.ts.map +1 -1
  76. package/dist/builtin-extensions/pi-mcp-adapter/host-html-template.js +1 -1
  77. package/dist/builtin-extensions/pi-mcp-adapter/host-html-template.js.map +1 -1
  78. package/dist/builtin-extensions/pi-mcp-adapter/index.d.ts.map +1 -1
  79. package/dist/builtin-extensions/pi-mcp-adapter/index.js +48 -40
  80. package/dist/builtin-extensions/pi-mcp-adapter/index.js.map +1 -1
  81. package/dist/builtin-extensions/pi-mcp-adapter/init.d.ts.map +1 -1
  82. package/dist/builtin-extensions/pi-mcp-adapter/init.js +3 -1
  83. package/dist/builtin-extensions/pi-mcp-adapter/init.js.map +1 -1
  84. package/dist/builtin-extensions/pi-mcp-adapter/mcp-auth-flow.d.ts +12 -40
  85. package/dist/builtin-extensions/pi-mcp-adapter/mcp-auth-flow.d.ts.map +1 -1
  86. package/dist/builtin-extensions/pi-mcp-adapter/mcp-auth-flow.js +166 -235
  87. package/dist/builtin-extensions/pi-mcp-adapter/mcp-auth-flow.js.map +1 -1
  88. package/dist/builtin-extensions/pi-mcp-adapter/mcp-callback-server.d.ts +5 -0
  89. package/dist/builtin-extensions/pi-mcp-adapter/mcp-callback-server.d.ts.map +1 -1
  90. package/dist/builtin-extensions/pi-mcp-adapter/mcp-callback-server.js +43 -13
  91. package/dist/builtin-extensions/pi-mcp-adapter/mcp-callback-server.js.map +1 -1
  92. package/dist/builtin-extensions/pi-mcp-adapter/mcp-oauth-provider.d.ts +14 -3
  93. package/dist/builtin-extensions/pi-mcp-adapter/mcp-oauth-provider.d.ts.map +1 -1
  94. package/dist/builtin-extensions/pi-mcp-adapter/mcp-oauth-provider.js +73 -21
  95. package/dist/builtin-extensions/pi-mcp-adapter/mcp-oauth-provider.js.map +1 -1
  96. package/dist/builtin-extensions/pi-mcp-adapter/proxy-modes.d.ts.map +1 -1
  97. package/dist/builtin-extensions/pi-mcp-adapter/proxy-modes.js +4 -4
  98. package/dist/builtin-extensions/pi-mcp-adapter/proxy-modes.js.map +1 -1
  99. package/dist/builtin-extensions/pi-mcp-adapter/server-manager.d.ts.map +1 -1
  100. package/dist/builtin-extensions/pi-mcp-adapter/server-manager.js +2 -2
  101. package/dist/builtin-extensions/pi-mcp-adapter/server-manager.js.map +1 -1
  102. package/dist/builtin-extensions/pi-mcp-adapter/state.d.ts +2 -0
  103. package/dist/builtin-extensions/pi-mcp-adapter/state.d.ts.map +1 -1
  104. package/dist/builtin-extensions/pi-mcp-adapter/state.js.map +1 -1
  105. package/dist/builtin-extensions/pi-ollama-cloud/index.d.ts +1 -1
  106. package/dist/builtin-extensions/pi-ollama-cloud/index.d.ts.map +1 -1
  107. package/dist/builtin-extensions/pi-ollama-cloud/index.js +1 -1
  108. package/dist/builtin-extensions/pi-ollama-cloud/index.js.map +1 -1
  109. package/dist/builtin-extensions/pi-ollama-cloud/models.d.ts +11 -5
  110. package/dist/builtin-extensions/pi-ollama-cloud/models.d.ts.map +1 -1
  111. package/dist/builtin-extensions/pi-ollama-cloud/models.js +12 -32
  112. package/dist/builtin-extensions/pi-ollama-cloud/models.js.map +1 -1
  113. package/dist/builtin-extensions/pi-prompt-template-model/index.d.ts.map +1 -1
  114. package/dist/builtin-extensions/pi-prompt-template-model/index.js +5 -3
  115. package/dist/builtin-extensions/pi-prompt-template-model/index.js.map +1 -1
  116. package/dist/builtin-extensions/pi-prompt-template-model/prompt-loader.d.ts +2 -1
  117. package/dist/builtin-extensions/pi-prompt-template-model/prompt-loader.d.ts.map +1 -1
  118. package/dist/builtin-extensions/pi-prompt-template-model/prompt-loader.js +21 -12
  119. package/dist/builtin-extensions/pi-prompt-template-model/prompt-loader.js.map +1 -1
  120. package/dist/builtin-extensions/pi-prompt-template-model/tool-manager.d.ts.map +1 -1
  121. package/dist/builtin-extensions/pi-prompt-template-model/tool-manager.js +7 -24
  122. package/dist/builtin-extensions/pi-prompt-template-model/tool-manager.js.map +1 -1
  123. package/dist/builtin-extensions/pi-subagents/src/extension/index.d.ts.map +1 -1
  124. package/dist/builtin-extensions/pi-subagents/src/extension/index.js +39 -77
  125. package/dist/builtin-extensions/pi-subagents/src/extension/index.js.map +1 -1
  126. package/dist/builtin-extensions/pi-subagents/src/extension/schemas.d.ts.map +1 -1
  127. package/dist/builtin-extensions/pi-subagents/src/extension/schemas.js +1 -1
  128. package/dist/builtin-extensions/pi-subagents/src/extension/schemas.js.map +1 -1
  129. package/dist/builtin-extensions/pi-subagents/src/extension/tool-description.d.ts +4 -4
  130. package/dist/builtin-extensions/pi-subagents/src/extension/tool-description.d.ts.map +1 -1
  131. package/dist/builtin-extensions/pi-subagents/src/extension/tool-description.js +8 -5
  132. package/dist/builtin-extensions/pi-subagents/src/extension/tool-description.js.map +1 -1
  133. package/dist/builtin-extensions/pi-subagents/src/runs/background/notify.d.ts +1 -1
  134. package/dist/builtin-extensions/pi-subagents/src/runs/background/notify.d.ts.map +1 -1
  135. package/dist/builtin-extensions/pi-subagents/src/runs/background/notify.js +15 -31
  136. package/dist/builtin-extensions/pi-subagents/src/runs/background/notify.js.map +1 -1
  137. package/dist/builtin-extensions/pi-subagents/src/runs/background/result-watcher.d.ts.map +1 -1
  138. package/dist/builtin-extensions/pi-subagents/src/runs/background/result-watcher.js +7 -2
  139. package/dist/builtin-extensions/pi-subagents/src/runs/background/result-watcher.js.map +1 -1
  140. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-runner.d.ts +1 -0
  141. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-runner.d.ts.map +1 -1
  142. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-runner.js +21 -4
  143. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-runner.js.map +1 -1
  144. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.d.ts.map +1 -1
  145. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.js +11 -4
  146. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.js.map +1 -1
  147. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/execution.d.ts.map +1 -1
  148. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/execution.js +121 -25
  149. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/execution.js.map +1 -1
  150. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.d.ts.map +1 -1
  151. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.js +25 -5
  152. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.js.map +1 -1
  153. package/dist/builtin-extensions/pi-subagents/src/runs/shared/chain-outputs.d.ts +1 -0
  154. package/dist/builtin-extensions/pi-subagents/src/runs/shared/chain-outputs.d.ts.map +1 -1
  155. package/dist/builtin-extensions/pi-subagents/src/runs/shared/chain-outputs.js +5 -0
  156. package/dist/builtin-extensions/pi-subagents/src/runs/shared/chain-outputs.js.map +1 -1
  157. package/dist/builtin-extensions/pi-subagents/src/runs/shared/child-tools.d.ts +1 -1
  158. package/dist/builtin-extensions/pi-subagents/src/runs/shared/child-tools.d.ts.map +1 -1
  159. package/dist/builtin-extensions/pi-subagents/src/runs/shared/child-tools.js +2 -0
  160. package/dist/builtin-extensions/pi-subagents/src/runs/shared/child-tools.js.map +1 -1
  161. package/dist/builtin-extensions/pi-subagents/src/runs/shared/model-fallback.d.ts +1 -1
  162. package/dist/builtin-extensions/pi-subagents/src/runs/shared/model-fallback.d.ts.map +1 -1
  163. package/dist/builtin-extensions/pi-subagents/src/runs/shared/model-fallback.js +1 -1
  164. package/dist/builtin-extensions/pi-subagents/src/runs/shared/model-fallback.js.map +1 -1
  165. package/dist/builtin-extensions/pi-subagents/src/runs/shared/parallel-utils.d.ts +7 -8
  166. package/dist/builtin-extensions/pi-subagents/src/runs/shared/parallel-utils.d.ts.map +1 -1
  167. package/dist/builtin-extensions/pi-subagents/src/runs/shared/parallel-utils.js +60 -32
  168. package/dist/builtin-extensions/pi-subagents/src/runs/shared/parallel-utils.js.map +1 -1
  169. package/dist/builtin-extensions/pi-subagents/src/shared/utils.d.ts +1 -1
  170. package/dist/builtin-extensions/pi-subagents/src/shared/utils.d.ts.map +1 -1
  171. package/dist/builtin-extensions/pi-subagents/src/shared/utils.js +15 -5
  172. package/dist/builtin-extensions/pi-subagents/src/shared/utils.js.map +1 -1
  173. package/dist/builtin-extensions/pi-subagents/src/slash/prompt-workflows.d.ts.map +1 -1
  174. package/dist/builtin-extensions/pi-subagents/src/slash/prompt-workflows.js +4 -3
  175. package/dist/builtin-extensions/pi-subagents/src/slash/prompt-workflows.js.map +1 -1
  176. package/dist/builtin-extensions/pi-subagents/src/tui/communication.d.ts.map +1 -1
  177. package/dist/builtin-extensions/pi-subagents/src/tui/communication.js +1 -1
  178. package/dist/builtin-extensions/pi-subagents/src/tui/communication.js.map +1 -1
  179. package/dist/builtin-extensions/pi-subagents/src/tui/render.d.ts +2 -1
  180. package/dist/builtin-extensions/pi-subagents/src/tui/render.d.ts.map +1 -1
  181. package/dist/builtin-extensions/pi-subagents/src/tui/render.js +22 -11
  182. package/dist/builtin-extensions/pi-subagents/src/tui/render.js.map +1 -1
  183. package/dist/builtin-extensions/pi-subagents/src/watchdog/review.d.ts.map +1 -1
  184. package/dist/builtin-extensions/pi-subagents/src/watchdog/review.js +3 -3
  185. package/dist/builtin-extensions/pi-subagents/src/watchdog/review.js.map +1 -1
  186. package/dist/builtin-extensions/pi-tps.d.ts.map +1 -1
  187. package/dist/builtin-extensions/pi-tps.js +20 -17
  188. package/dist/builtin-extensions/pi-tps.js.map +1 -1
  189. package/dist/builtin-extensions/pi-web-access/activity.d.ts +1 -0
  190. package/dist/builtin-extensions/pi-web-access/activity.d.ts.map +1 -1
  191. package/dist/builtin-extensions/pi-web-access/activity.js +27 -5
  192. package/dist/builtin-extensions/pi-web-access/activity.js.map +1 -1
  193. package/dist/builtin-extensions/pi-web-access/bounded-body.d.ts +3 -0
  194. package/dist/builtin-extensions/pi-web-access/bounded-body.d.ts.map +1 -0
  195. package/dist/builtin-extensions/pi-web-access/bounded-body.js +43 -0
  196. package/dist/builtin-extensions/pi-web-access/bounded-body.js.map +1 -0
  197. package/dist/builtin-extensions/pi-web-access/content-page.d.ts +24 -0
  198. package/dist/builtin-extensions/pi-web-access/content-page.d.ts.map +1 -0
  199. package/dist/builtin-extensions/pi-web-access/content-page.js +57 -0
  200. package/dist/builtin-extensions/pi-web-access/content-page.js.map +1 -0
  201. package/dist/builtin-extensions/pi-web-access/extract.d.ts.map +1 -1
  202. package/dist/builtin-extensions/pi-web-access/extract.js +7 -2
  203. package/dist/builtin-extensions/pi-web-access/extract.js.map +1 -1
  204. package/dist/builtin-extensions/pi-web-access/github-extract.d.ts +0 -1
  205. package/dist/builtin-extensions/pi-web-access/github-extract.d.ts.map +1 -1
  206. package/dist/builtin-extensions/pi-web-access/github-extract.js +147 -36
  207. package/dist/builtin-extensions/pi-web-access/github-extract.js.map +1 -1
  208. package/dist/builtin-extensions/pi-web-access/index.d.ts.map +1 -1
  209. package/dist/builtin-extensions/pi-web-access/index.js +48 -73
  210. package/dist/builtin-extensions/pi-web-access/index.js.map +1 -1
  211. package/dist/builtin-extensions/pi-web-access/session-cleanup.d.ts +12 -4
  212. package/dist/builtin-extensions/pi-web-access/session-cleanup.d.ts.map +1 -1
  213. package/dist/builtin-extensions/pi-web-access/session-cleanup.js +35 -12
  214. package/dist/builtin-extensions/pi-web-access/session-cleanup.js.map +1 -1
  215. package/dist/builtin-extensions/pi-web-access/storage.d.ts +9 -6
  216. package/dist/builtin-extensions/pi-web-access/storage.d.ts.map +1 -1
  217. package/dist/builtin-extensions/pi-web-access/storage.js +36 -24
  218. package/dist/builtin-extensions/pi-web-access/storage.js.map +1 -1
  219. package/dist/builtin-extensions/simple-pi-memory.d.ts +1 -1
  220. package/dist/builtin-extensions/simple-pi-memory.d.ts.map +1 -1
  221. package/dist/builtin-extensions/simple-pi-memory.js +1 -1
  222. package/dist/builtin-extensions/simple-pi-memory.js.map +1 -1
  223. package/dist/cli/install-cli.d.ts.map +1 -1
  224. package/dist/cli/install-cli.js +38 -30
  225. package/dist/cli/install-cli.js.map +1 -1
  226. package/dist/core/agent-session-runtime.d.ts +13 -0
  227. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  228. package/dist/core/agent-session-runtime.js +75 -11
  229. package/dist/core/agent-session-runtime.js.map +1 -1
  230. package/dist/core/agent-session-services.d.ts +1 -0
  231. package/dist/core/agent-session-services.d.ts.map +1 -1
  232. package/dist/core/agent-session-services.js +1 -0
  233. package/dist/core/agent-session-services.js.map +1 -1
  234. package/dist/core/agent-session.d.ts +40 -6
  235. package/dist/core/agent-session.d.ts.map +1 -1
  236. package/dist/core/agent-session.js +309 -76
  237. package/dist/core/agent-session.js.map +1 -1
  238. package/dist/core/browser/runtime.d.ts +2 -0
  239. package/dist/core/browser/runtime.d.ts.map +1 -1
  240. package/dist/core/browser/runtime.js +80 -45
  241. package/dist/core/browser/runtime.js.map +1 -1
  242. package/dist/core/browser/setup.d.ts.map +1 -1
  243. package/dist/core/browser/setup.js +12 -1
  244. package/dist/core/browser/setup.js.map +1 -1
  245. package/dist/core/computer-use/adapter.d.ts +28 -0
  246. package/dist/core/computer-use/adapter.d.ts.map +1 -0
  247. package/dist/core/computer-use/adapter.js +138 -0
  248. package/dist/core/computer-use/adapter.js.map +1 -0
  249. package/dist/core/computer-use/image.d.ts +27 -0
  250. package/dist/core/computer-use/image.d.ts.map +1 -0
  251. package/dist/core/computer-use/image.js +84 -0
  252. package/dist/core/computer-use/image.js.map +1 -0
  253. package/dist/core/computer-use/lease.d.ts +18 -0
  254. package/dist/core/computer-use/lease.d.ts.map +1 -0
  255. package/dist/core/computer-use/lease.js +129 -0
  256. package/dist/core/computer-use/lease.js.map +1 -0
  257. package/dist/core/computer-use/macos-runtime.d.ts +14 -0
  258. package/dist/core/computer-use/macos-runtime.d.ts.map +1 -0
  259. package/dist/core/computer-use/macos-runtime.js +148 -0
  260. package/dist/core/computer-use/macos-runtime.js.map +1 -0
  261. package/dist/core/computer-use/policy.d.ts +19 -0
  262. package/dist/core/computer-use/policy.d.ts.map +1 -0
  263. package/dist/core/computer-use/policy.js +67 -0
  264. package/dist/core/computer-use/policy.js.map +1 -0
  265. package/dist/core/computer-use/release.generated.d.ts +31 -0
  266. package/dist/core/computer-use/release.generated.d.ts.map +1 -0
  267. package/dist/core/computer-use/release.generated.js +36 -0
  268. package/dist/core/computer-use/release.generated.js.map +1 -0
  269. package/dist/core/computer-use/runtime.d.ts +13 -0
  270. package/dist/core/computer-use/runtime.d.ts.map +1 -0
  271. package/dist/core/computer-use/runtime.js +158 -0
  272. package/dist/core/computer-use/runtime.js.map +1 -0
  273. package/dist/core/computer-use/schemas.d.ts +100 -0
  274. package/dist/core/computer-use/schemas.d.ts.map +1 -0
  275. package/dist/core/computer-use/schemas.js +96 -0
  276. package/dist/core/computer-use/schemas.js.map +1 -0
  277. package/dist/core/computer-use/windows-desktop.d.ts +3 -0
  278. package/dist/core/computer-use/windows-desktop.d.ts.map +1 -0
  279. package/dist/core/computer-use/windows-desktop.js +48 -0
  280. package/dist/core/computer-use/windows-desktop.js.map +1 -0
  281. package/dist/core/computer-use/workflow.d.ts +38 -0
  282. package/dist/core/computer-use/workflow.d.ts.map +1 -0
  283. package/dist/core/computer-use/workflow.js +900 -0
  284. package/dist/core/computer-use/workflow.js.map +1 -0
  285. package/dist/core/cron/jobs.d.ts +26 -8
  286. package/dist/core/cron/jobs.d.ts.map +1 -1
  287. package/dist/core/cron/jobs.js +357 -232
  288. package/dist/core/cron/jobs.js.map +1 -1
  289. package/dist/core/cron/origin-context.d.ts +1 -0
  290. package/dist/core/cron/origin-context.d.ts.map +1 -1
  291. package/dist/core/cron/origin-context.js.map +1 -1
  292. package/dist/core/cron/scheduler.d.ts +22 -17
  293. package/dist/core/cron/scheduler.d.ts.map +1 -1
  294. package/dist/core/cron/scheduler.js +153 -73
  295. package/dist/core/cron/scheduler.js.map +1 -1
  296. package/dist/core/extensions/index.d.ts +1 -1
  297. package/dist/core/extensions/index.d.ts.map +1 -1
  298. package/dist/core/extensions/index.js.map +1 -1
  299. package/dist/core/extensions/loader.d.ts.map +1 -1
  300. package/dist/core/extensions/loader.js +4 -0
  301. package/dist/core/extensions/loader.js.map +1 -1
  302. package/dist/core/extensions/runner.d.ts +1 -0
  303. package/dist/core/extensions/runner.d.ts.map +1 -1
  304. package/dist/core/extensions/runner.js +8 -0
  305. package/dist/core/extensions/runner.js.map +1 -1
  306. package/dist/core/extensions/types.d.ts +8 -0
  307. package/dist/core/extensions/types.d.ts.map +1 -1
  308. package/dist/core/extensions/types.js.map +1 -1
  309. package/dist/core/footer-data-provider.d.ts +4 -0
  310. package/dist/core/footer-data-provider.d.ts.map +1 -1
  311. package/dist/core/footer-data-provider.js +22 -1
  312. package/dist/core/footer-data-provider.js.map +1 -1
  313. package/dist/core/large-subagent-launch.d.ts +1 -1
  314. package/dist/core/large-subagent-launch.d.ts.map +1 -1
  315. package/dist/core/large-subagent-launch.js +7 -7
  316. package/dist/core/large-subagent-launch.js.map +1 -1
  317. package/dist/core/model-registry.d.ts +2 -0
  318. package/dist/core/model-registry.d.ts.map +1 -1
  319. package/dist/core/model-registry.js +5 -0
  320. package/dist/core/model-registry.js.map +1 -1
  321. package/dist/core/model-runtime.d.ts +4 -1
  322. package/dist/core/model-runtime.d.ts.map +1 -1
  323. package/dist/core/model-runtime.js +40 -4
  324. package/dist/core/model-runtime.js.map +1 -1
  325. package/dist/core/package-manager.d.ts.map +1 -1
  326. package/dist/core/package-manager.js.map +1 -1
  327. package/dist/core/permissions.d.ts +4 -4
  328. package/dist/core/permissions.d.ts.map +1 -1
  329. package/dist/core/permissions.js +25 -38
  330. package/dist/core/permissions.js.map +1 -1
  331. package/dist/core/plan-mode.d.ts +5 -13
  332. package/dist/core/plan-mode.d.ts.map +1 -1
  333. package/dist/core/plan-mode.js +135 -116
  334. package/dist/core/plan-mode.js.map +1 -1
  335. package/dist/core/project-trust.d.ts.map +1 -1
  336. package/dist/core/project-trust.js +1 -1
  337. package/dist/core/project-trust.js.map +1 -1
  338. package/dist/core/prompt-resource-bridge.d.ts +12 -0
  339. package/dist/core/prompt-resource-bridge.d.ts.map +1 -0
  340. package/dist/core/prompt-resource-bridge.js +9 -0
  341. package/dist/core/prompt-resource-bridge.js.map +1 -0
  342. package/dist/core/protected-targets.d.ts +6 -0
  343. package/dist/core/protected-targets.d.ts.map +1 -0
  344. package/dist/core/protected-targets.js +45 -0
  345. package/dist/core/protected-targets.js.map +1 -0
  346. package/dist/core/resource-loader.d.ts.map +1 -1
  347. package/dist/core/resource-loader.js +7 -0
  348. package/dist/core/resource-loader.js.map +1 -1
  349. package/dist/core/rollback.d.ts +19 -3
  350. package/dist/core/rollback.d.ts.map +1 -1
  351. package/dist/core/rollback.js +172 -56
  352. package/dist/core/rollback.js.map +1 -1
  353. package/dist/core/runtime-credentials.d.ts +3 -0
  354. package/dist/core/runtime-credentials.d.ts.map +1 -1
  355. package/dist/core/runtime-credentials.js +14 -1
  356. package/dist/core/runtime-credentials.js.map +1 -1
  357. package/dist/core/sdk.d.ts +3 -0
  358. package/dist/core/sdk.d.ts.map +1 -1
  359. package/dist/core/sdk.js +1 -0
  360. package/dist/core/sdk.js.map +1 -1
  361. package/dist/core/session-manager.d.ts +6 -0
  362. package/dist/core/session-manager.d.ts.map +1 -1
  363. package/dist/core/session-manager.js +95 -32
  364. package/dist/core/session-manager.js.map +1 -1
  365. package/dist/core/session-ownership.d.ts.map +1 -1
  366. package/dist/core/session-ownership.js +8 -3
  367. package/dist/core/session-ownership.js.map +1 -1
  368. package/dist/core/session-retention.d.ts.map +1 -1
  369. package/dist/core/session-retention.js +18 -7
  370. package/dist/core/session-retention.js.map +1 -1
  371. package/dist/core/session-startup-settings.d.ts +10 -0
  372. package/dist/core/session-startup-settings.d.ts.map +1 -0
  373. package/dist/core/session-startup-settings.js +70 -0
  374. package/dist/core/session-startup-settings.js.map +1 -0
  375. package/dist/core/settings-manager.d.ts +6 -0
  376. package/dist/core/settings-manager.d.ts.map +1 -1
  377. package/dist/core/settings-manager.js +19 -0
  378. package/dist/core/settings-manager.js.map +1 -1
  379. package/dist/core/subagent-event-transport.d.ts +3 -0
  380. package/dist/core/subagent-event-transport.d.ts.map +1 -0
  381. package/dist/core/subagent-event-transport.js +61 -0
  382. package/dist/core/subagent-event-transport.js.map +1 -0
  383. package/dist/core/subscriptions.d.ts +16 -7
  384. package/dist/core/subscriptions.d.ts.map +1 -1
  385. package/dist/core/subscriptions.js +96 -55
  386. package/dist/core/subscriptions.js.map +1 -1
  387. package/dist/core/trust-manager.d.ts +2 -1
  388. package/dist/core/trust-manager.d.ts.map +1 -1
  389. package/dist/core/trust-manager.js +6 -1
  390. package/dist/core/trust-manager.js.map +1 -1
  391. package/dist/core/update-check.d.ts.map +1 -1
  392. package/dist/core/update-check.js.map +1 -1
  393. package/dist/core/usage-adapters/kimi-coding.d.ts +2 -2
  394. package/dist/core/usage-adapters/kimi-coding.d.ts.map +1 -1
  395. package/dist/core/usage-adapters/kimi-coding.js +2 -2
  396. package/dist/core/usage-adapters/kimi-coding.js.map +1 -1
  397. package/dist/core/usage-adapters/openai-codex.d.ts +3 -2
  398. package/dist/core/usage-adapters/openai-codex.d.ts.map +1 -1
  399. package/dist/core/usage-adapters/openai-codex.js +3 -3
  400. package/dist/core/usage-adapters/openai-codex.js.map +1 -1
  401. package/dist/core/usage-adapters/xai.d.ts +2 -2
  402. package/dist/core/usage-adapters/xai.d.ts.map +1 -1
  403. package/dist/core/usage-adapters/xai.js +3 -3
  404. package/dist/core/usage-adapters/xai.js.map +1 -1
  405. package/dist/core/usage-adapters/zai.d.ts +2 -2
  406. package/dist/core/usage-adapters/zai.d.ts.map +1 -1
  407. package/dist/core/usage-adapters/zai.js +2 -2
  408. package/dist/core/usage-adapters/zai.js.map +1 -1
  409. package/dist/core/usage-service.d.ts +9 -2
  410. package/dist/core/usage-service.d.ts.map +1 -1
  411. package/dist/core/usage-service.js +95 -50
  412. package/dist/core/usage-service.js.map +1 -1
  413. package/dist/gateway/adapters/discord.d.ts.map +1 -1
  414. package/dist/gateway/adapters/discord.js +2 -2
  415. package/dist/gateway/adapters/discord.js.map +1 -1
  416. package/dist/gateway/agent-bridge.d.ts +9 -1
  417. package/dist/gateway/agent-bridge.d.ts.map +1 -1
  418. package/dist/gateway/agent-bridge.js +91 -37
  419. package/dist/gateway/agent-bridge.js.map +1 -1
  420. package/dist/gateway/approval.d.ts.map +1 -1
  421. package/dist/gateway/approval.js +3 -3
  422. package/dist/gateway/approval.js.map +1 -1
  423. package/dist/gateway/authz.d.ts +4 -4
  424. package/dist/gateway/authz.d.ts.map +1 -1
  425. package/dist/gateway/authz.js +8 -12
  426. package/dist/gateway/authz.js.map +1 -1
  427. package/dist/gateway/buttons.d.ts +8 -1
  428. package/dist/gateway/buttons.d.ts.map +1 -1
  429. package/dist/gateway/buttons.js +76 -18
  430. package/dist/gateway/buttons.js.map +1 -1
  431. package/dist/gateway/commands.d.ts +1 -0
  432. package/dist/gateway/commands.d.ts.map +1 -1
  433. package/dist/gateway/commands.js +12 -10
  434. package/dist/gateway/commands.js.map +1 -1
  435. package/dist/gateway/cron.d.ts +12 -11
  436. package/dist/gateway/cron.d.ts.map +1 -1
  437. package/dist/gateway/cron.js +85 -62
  438. package/dist/gateway/cron.js.map +1 -1
  439. package/dist/gateway/index.d.ts.map +1 -1
  440. package/dist/gateway/index.js +5 -4
  441. package/dist/gateway/index.js.map +1 -1
  442. package/dist/gateway/mobile-commands.d.ts +1 -0
  443. package/dist/gateway/mobile-commands.d.ts.map +1 -1
  444. package/dist/gateway/mobile-commands.js +64 -22
  445. package/dist/gateway/mobile-commands.js.map +1 -1
  446. package/dist/gateway/presenter.d.ts +12 -2
  447. package/dist/gateway/presenter.d.ts.map +1 -1
  448. package/dist/gateway/presenter.js +74 -39
  449. package/dist/gateway/presenter.js.map +1 -1
  450. package/dist/gateway/router.d.ts +2 -2
  451. package/dist/gateway/router.d.ts.map +1 -1
  452. package/dist/gateway/router.js +22 -9
  453. package/dist/gateway/router.js.map +1 -1
  454. package/dist/gateway/service.d.ts +2 -0
  455. package/dist/gateway/service.d.ts.map +1 -1
  456. package/dist/gateway/service.js +153 -0
  457. package/dist/gateway/service.js.map +1 -1
  458. package/dist/gateway/setup.d.ts.map +1 -1
  459. package/dist/gateway/setup.js +6 -4
  460. package/dist/gateway/setup.js.map +1 -1
  461. package/dist/main.d.ts.map +1 -1
  462. package/dist/main.js +86 -33
  463. package/dist/main.js.map +1 -1
  464. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  465. package/dist/modes/interactive/components/assistant-message.js +6 -4
  466. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  467. package/dist/modes/interactive/components/copyable-text.d.ts.map +1 -1
  468. package/dist/modes/interactive/components/copyable-text.js +3 -2
  469. package/dist/modes/interactive/components/copyable-text.js.map +1 -1
  470. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
  471. package/dist/modes/interactive/components/extension-editor.js +1 -1
  472. package/dist/modes/interactive/components/extension-editor.js.map +1 -1
  473. package/dist/modes/interactive/components/settings-selector.d.ts +4 -0
  474. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  475. package/dist/modes/interactive/components/settings-selector.js +20 -0
  476. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  477. package/dist/modes/interactive/interactive-mode.d.ts +2 -2
  478. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  479. package/dist/modes/interactive/interactive-mode.js +104 -109
  480. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  481. package/dist/modes/interactive/smooth-streaming.d.ts.map +1 -1
  482. package/dist/modes/interactive/smooth-streaming.js.map +1 -1
  483. package/dist/modes/print-mode.d.ts.map +1 -1
  484. package/dist/modes/print-mode.js +9 -1
  485. package/dist/modes/print-mode.js.map +1 -1
  486. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  487. package/dist/modes/rpc/rpc-mode.js +2 -1
  488. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  489. package/dist/node-runtime/adapter-247RTYLS.js +16 -0
  490. package/dist/node-runtime/agent-session-services-KDMSPQDY.js +53 -0
  491. package/dist/node-runtime/{brave-UWDA3I22.js → brave-2AFFAXNN.js} +1 -1
  492. package/dist/node-runtime/{builtin-extensions-ZLAX7TUH.js → builtin-extensions-OX6KELNX.js} +9 -7
  493. package/dist/node-runtime/{chunk-QH6YL7VK.js → chunk-252ZVPPF.js} +3 -3
  494. package/dist/node-runtime/{chunk-PCEW76PM.js → chunk-2OIPYKLZ.js} +6 -6
  495. package/dist/node-runtime/{chunk-XBWPBZBN.js → chunk-2SWW7KMW.js} +1 -1
  496. package/dist/node-runtime/{chunk-UQUCFAJ3.js → chunk-2VIW3IMF.js} +40 -7
  497. package/dist/node-runtime/{chunk-UOEDI7RP.js → chunk-4KNKQGHM.js} +2 -2
  498. package/dist/node-runtime/{chunk-FQMM2EZ2.js → chunk-64XTQNLA.js} +29 -7
  499. package/dist/node-runtime/{chunk-NRKGMJYU.js → chunk-6O3IW3IA.js} +2 -2
  500. package/dist/node-runtime/{chunk-5ZQXRPMC.js → chunk-6ZZHGUSA.js} +2 -2
  501. package/dist/node-runtime/chunk-A2WO6WIN.js +1197 -0
  502. package/dist/node-runtime/{chunk-ZXSGTGJ6.js → chunk-APVM5NEU.js} +169 -148
  503. package/dist/node-runtime/{chunk-RC7DMV45.js → chunk-AYHH7YSD.js} +205 -144
  504. package/dist/node-runtime/{chunk-LWYIVUGV.js → chunk-B2IBAXNX.js} +48 -31
  505. package/dist/node-runtime/{chunk-M3LZLQW2.js → chunk-BDRGN3L2.js} +1 -0
  506. package/dist/node-runtime/{chunk-GJ2RDBRL.js → chunk-BYC6RKCN.js} +4 -2
  507. package/dist/node-runtime/{chunk-KWIYUUZK.js → chunk-C3P6Q3B2.js} +469 -283
  508. package/dist/node-runtime/{chunk-YCUZEGJG.js → chunk-DQSCFU7R.js} +17 -8
  509. package/dist/node-runtime/chunk-EBLAZVSA.js +4170 -0
  510. package/dist/node-runtime/{chunk-2KIPT4HJ.js → chunk-EPR2F3GU.js} +68 -20
  511. package/dist/node-runtime/{chunk-CSFI6YXL.js → chunk-ES6PBSIE.js} +1 -1
  512. package/dist/node-runtime/{chunk-IF24A3FH.js → chunk-EVM653DD.js} +4 -4
  513. package/dist/node-runtime/{chunk-HTFRRDSF.js → chunk-F2SMQ6ES.js} +3 -2
  514. package/dist/node-runtime/chunk-F2V2F4ZG.js +114 -0
  515. package/dist/node-runtime/chunk-FE3WZI7F.js +290 -0
  516. package/dist/node-runtime/{chunk-GYIXXQAO.js → chunk-FIRA54AC.js} +2 -5
  517. package/dist/node-runtime/{chunk-6VYZ5UFP.js → chunk-FLGEEH27.js} +1 -1
  518. package/dist/node-runtime/{chunk-5EFIU3OM.js → chunk-FTKEZL27.js} +1 -1
  519. package/dist/node-runtime/chunk-FY4A63RK.js +73 -0
  520. package/dist/node-runtime/chunk-FYIFPFXE.js +98 -0
  521. package/dist/node-runtime/{chunk-HMBGROQK.js → chunk-GLDXBBL6.js} +3 -3
  522. package/dist/node-runtime/{chunk-KWA4OC2J.js → chunk-H6YBCWKG.js} +1 -1
  523. package/dist/node-runtime/{chunk-2MI5OPMN.js → chunk-HNNHHJAB.js} +68 -50
  524. package/dist/node-runtime/{chunk-6XL67VVY.js → chunk-HUD2RFJW.js} +17 -2
  525. package/dist/node-runtime/{chunk-I54LGHWM.js → chunk-I2H5QMWW.js} +3 -3
  526. package/dist/node-runtime/chunk-IAZSK7KK.js +108 -0
  527. package/dist/node-runtime/{chunk-2HHLJWGD.js → chunk-IHHTWSXN.js} +9 -9
  528. package/dist/node-runtime/{chunk-DAPBPCBP.js → chunk-IPP5BIV5.js} +25 -3
  529. package/dist/node-runtime/{chunk-QFWG2RVL.js → chunk-IXG6F4NT.js} +11 -0
  530. package/dist/node-runtime/{chunk-RDDAZOMU.js → chunk-JL4HYQXK.js} +1 -1
  531. package/dist/node-runtime/{chunk-CDVHZOOK.js → chunk-JQYNHAKX.js} +1 -1
  532. package/dist/node-runtime/{chunk-WF7PGWRZ.js → chunk-JWEVT363.js} +37 -28
  533. package/dist/node-runtime/{chunk-2HMIRK7W.js → chunk-LHV3V67B.js} +5 -5
  534. package/dist/node-runtime/{chunk-UAEOTO52.js → chunk-MNQXDFPV.js} +6 -2
  535. package/dist/node-runtime/{chunk-IJIFHRTB.js → chunk-MQPKUHRN.js} +165 -85
  536. package/dist/node-runtime/{chunk-MPKSOJBT.js → chunk-NHATCSOI.js} +4 -7
  537. package/dist/node-runtime/{chunk-RMQZU2YU.js → chunk-NNNR3QIY.js} +1 -1
  538. package/dist/node-runtime/{chunk-RWTKOC3B.js → chunk-QBTJG3UM.js} +1 -1
  539. package/dist/node-runtime/{chunk-E4D3IGP2.js → chunk-QNVMKNNN.js} +20 -17
  540. package/dist/node-runtime/{chunk-GS42T6MX.js → chunk-QW3AAHWN.js} +1 -1
  541. package/dist/node-runtime/{chunk-7S3T6YEA.js → chunk-R4WSB2MQ.js} +5 -5
  542. package/dist/node-runtime/{chunk-B4HP6ZWM.js → chunk-RHCGYWO7.js} +1 -1
  543. package/dist/node-runtime/{chunk-3XPLBUEM.js → chunk-RLGY2QIL.js} +49 -59
  544. package/dist/node-runtime/{chunk-KKUTQQV7.js → chunk-RYRGL7P4.js} +1 -1
  545. package/dist/node-runtime/{chunk-AD6VXAO7.js → chunk-TCT6PCUR.js} +47 -115
  546. package/dist/node-runtime/chunk-U5F4IC7R.js +53 -0
  547. package/dist/node-runtime/{chunk-OCVIXVTZ.js → chunk-UBWW2PID.js} +13 -2
  548. package/dist/node-runtime/{chunk-HFVZUPFJ.js → chunk-UNUZICC4.js} +3 -3
  549. package/dist/node-runtime/{chunk-LQP3RB67.js → chunk-UYRKUKFE.js} +1 -1
  550. package/dist/node-runtime/{chunk-DSIKTUPW.js → chunk-VSUEAI7O.js} +2993 -3820
  551. package/dist/node-runtime/{chunk-NAY6UUQZ.js → chunk-WDIVLMOH.js} +1 -1
  552. package/dist/node-runtime/{chunk-E24EO34J.js → chunk-WPXUR3HE.js} +1 -1
  553. package/dist/node-runtime/{chunk-SLVOAQOY.js → chunk-WXYNALHD.js} +113 -1
  554. package/dist/node-runtime/{chunk-KJ6DWS3K.js → chunk-XEOCUEUJ.js} +121 -60
  555. package/dist/node-runtime/chunk-YD3IZAZ7.js +47 -0
  556. package/dist/node-runtime/chunk-YSB6URMT.js +41 -0
  557. package/dist/node-runtime/{chunk-VQFSUJJG.js → chunk-ZDJUR45D.js} +430 -129
  558. package/dist/node-runtime/{chunk-YDO2F2IA.js → chunk-ZEVFBFNF.js} +95 -142
  559. package/dist/node-runtime/chunk-ZIQUS5QO.js +180 -0
  560. package/dist/node-runtime/cli-runtime.js +4 -4
  561. package/dist/node-runtime/{command-6WDOYKS6.js → command-3HMSY6W2.js} +5 -5
  562. package/dist/node-runtime/{commands-NZLSOHPE.js → commands-D6A6H4TS.js} +11 -16
  563. package/dist/node-runtime/commands-OCSSEEWJ.js +37 -0
  564. package/dist/node-runtime/{config-QDD5PUE2.js → config-CU7M7BTK.js} +1 -1
  565. package/dist/node-runtime/{config-D4QUPAHX.js → config-DS7XLMEM.js} +2 -2
  566. package/dist/node-runtime/{direct-tool-executor-77GW4F5P.js → direct-tool-executor-2QJXVQD2.js} +8 -10
  567. package/dist/node-runtime/{exa-LL64QZR2.js → exa-6VBZNPGE.js} +1 -1
  568. package/dist/node-runtime/{export-html-VM4J2MNR.js → export-html-BRWF5AHI.js} +4 -4
  569. package/dist/node-runtime/{extension-input-E7BJZ35H.js → extension-input-VBBMX7YV.js} +5 -5
  570. package/dist/node-runtime/{extension-selector-WU42XDTU.js → extension-selector-T5AOG5XB.js} +5 -5
  571. package/dist/node-runtime/{extract-EQJE7FZZ.js → extract-BFX2N35A.js} +3 -3
  572. package/dist/node-runtime/{gateway-INAYBF4Q.js → gateway-6623C2U3.js} +61 -53
  573. package/dist/node-runtime/{gemini-search-35OCRFLN.js → gemini-search-C66QHDT6.js} +2 -2
  574. package/dist/node-runtime/{gemini-url-context-UQY3PHHW.js → gemini-url-context-T7DEK73R.js} +3 -3
  575. package/dist/node-runtime/{github-extract-F64RZOEA.js → github-extract-HOGE3D6F.js} +107 -38
  576. package/dist/node-runtime/{goal-NJEE5CTU.js → goal-AIHEDUYA.js} +5 -5
  577. package/dist/node-runtime/index.js +54 -48
  578. package/dist/node-runtime/{init-HS6NQXSK.js → init-JBQJIPYI.js} +3 -4
  579. package/dist/node-runtime/{install-cli-KL4UDDAD.js → install-cli-INGHIVBY.js} +30 -25
  580. package/dist/node-runtime/interactive-mode-FM5DNUSW.js +74 -0
  581. package/dist/node-runtime/{interactive-view-NGFAMHPW.js → interactive-view-K33PM4OS.js} +8 -8
  582. package/dist/node-runtime/{lsp-manager-3ASUSO4T.js → lsp-manager-S554V5HR.js} +240 -155
  583. package/dist/node-runtime/{lunr-browser-IR7TL3J7.js → lunr-browser-H4FDOR3C.js} +7 -7
  584. package/dist/node-runtime/lunr-computer-use-VDP2QNRQ.js +158 -0
  585. package/dist/node-runtime/{lunr-cron-LWIZJM2N.js → lunr-cron-LKVA5CZZ.js} +94 -79
  586. package/dist/node-runtime/main.js +42 -39
  587. package/dist/node-runtime/{mobile-commands-J7OJEKFO.js → mobile-commands-XT3NQXLD.js} +13 -12
  588. package/dist/node-runtime/{model-runtime-OO5HFLWE.js → model-runtime-MZ2JMDV4.js} +4 -4
  589. package/dist/node-runtime/{openai-search-B3MSNCQA.js → openai-search-K72LJDYN.js} +1 -1
  590. package/dist/node-runtime/{package-manager-cli-VYZM5WHN.js → package-manager-cli-CYM262SI.js} +20 -19
  591. package/dist/node-runtime/{parallel-AI2MNSCU.js → parallel-X724NCNU.js} +1 -1
  592. package/dist/node-runtime/{perplexity-QVJW3I35.js → perplexity-RDHQHVMK.js} +2 -2
  593. package/dist/node-runtime/{pi-intercom-QM53RLTS.js → pi-intercom-NHHEPBMI.js} +2 -2
  594. package/dist/node-runtime/{pi-mcp-adapter-5UKBZP44.js → pi-mcp-adapter-PP3GQJQ2.js} +98 -94
  595. package/dist/node-runtime/{pi-ollama-cloud-2F3Y2QNM.js → pi-ollama-cloud-4MNWIMFN.js} +11 -24
  596. package/dist/node-runtime/{pi-prompt-template-model-QWTCGLJU.js → pi-prompt-template-model-FTGELLS5.js} +32 -36
  597. package/dist/node-runtime/{pi-subagents-DNY7EAIG.js → pi-subagents-LT3CTO4E.js} +114 -116
  598. package/dist/node-runtime/{pi-web-access-WTGMNZ32.js → pi-web-access-Z3LP246C.js} +144 -108
  599. package/dist/node-runtime/{print-mode-XSFM26EL.js → print-mode-2XHN5SUA.js} +4 -3
  600. package/dist/node-runtime/{process-registry-4FAKZQOL.js → process-registry-Q4QWIU33.js} +3 -3
  601. package/dist/node-runtime/{proxy-modes-LGEUYD7R.js → proxy-modes-VEGC6QG5.js} +9 -13
  602. package/dist/node-runtime/rpc-entry.js +42 -39
  603. package/dist/node-runtime/{rpc-mode-O3XV4SID.js → rpc-mode-32DHJPEJ.js} +4 -4
  604. package/dist/node-runtime/{runtime-4VA6JKNF.js → runtime-EDUUGAQD.js} +56 -46
  605. package/dist/node-runtime/runtime-UGXM4NPQ.js +21 -0
  606. package/dist/node-runtime/{runtime-bridges-VRDDR73P.js → runtime-bridges-DNKMNJCF.js} +8 -7
  607. package/dist/node-runtime/{service-MDQIPQ26.js → service-IHLGFLBT.js} +6 -4
  608. package/dist/node-runtime/{session-handoff-GWARVEWT.js → session-handoff-LNSPDTKY.js} +4 -4
  609. package/dist/node-runtime/{session-manager-JB5J6XBN.js → session-manager-YIFIAVGC.js} +3 -3
  610. package/dist/node-runtime/{session-selector-GIM4DHQ2.js → session-selector-I73U3EIO.js} +7 -7
  611. package/dist/node-runtime/{settings-manager-J4SPQPDJ.js → settings-manager-P2TKGYTR.js} +6 -5
  612. package/dist/node-runtime/{setup-JBKOLJ6F.js → setup-H7CCELIL.js} +15 -1
  613. package/dist/node-runtime/{setup-CQ2NLVK5.js → setup-OLQ4GXWS.js} +22 -21
  614. package/dist/node-runtime/{src-IVPNZ2BX.js → src-6RV4PXKJ.js} +64 -36
  615. package/dist/node-runtime/{subagent-executor-KZZQGAKV.js → subagent-executor-Q5F7DBVM.js} +141 -62
  616. package/dist/node-runtime/{tavily-WEZFVFP7.js → tavily-KZBFYQB6.js} +1 -1
  617. package/dist/node-runtime/{theme-UOO5RVFN.js → theme-YLVZKKZD.js} +2 -2
  618. package/dist/node-runtime/{trust-manager-MMISNCYO.js → trust-manager-ZCU76D23.js} +2 -2
  619. package/dist/node-runtime/{update-cli-GTFJC7XK.js → update-cli-F3XXJANQ.js} +7 -6
  620. package/dist/node-runtime/{usage-service-LFB2SWYV.js → usage-service-CPAGBED5.js} +1 -1
  621. package/dist/node-runtime/{video-extract-OOZHR7SU.js → video-extract-UPKYIBW3.js} +3 -3
  622. package/dist/node-runtime/workflow-ICDI4N3J.js +767 -0
  623. package/dist/node-runtime/{youtube-extract-FNPAUNHU.js → youtube-extract-77NT7FWH.js} +4 -4
  624. package/dist/utils/clipboard-image.d.ts.map +1 -1
  625. package/dist/utils/clipboard-image.js.map +1 -1
  626. package/dist/utils/exif-orientation.d.ts.map +1 -1
  627. package/dist/utils/exif-orientation.js +25 -10
  628. package/dist/utils/exif-orientation.js.map +1 -1
  629. package/dist/utils/image-resize-core.d.ts +2 -0
  630. package/dist/utils/image-resize-core.d.ts.map +1 -1
  631. package/dist/utils/image-resize-core.js +12 -0
  632. package/dist/utils/image-resize-core.js.map +1 -1
  633. package/dist/utils/paths.d.ts +4 -0
  634. package/dist/utils/paths.d.ts.map +1 -1
  635. package/dist/utils/paths.js +33 -2
  636. package/dist/utils/paths.js.map +1 -1
  637. package/dist/utils/sanitize-terminal-text.d.ts +7 -0
  638. package/dist/utils/sanitize-terminal-text.d.ts.map +1 -0
  639. package/dist/utils/sanitize-terminal-text.js +67 -0
  640. package/dist/utils/sanitize-terminal-text.js.map +1 -0
  641. package/docs/browser.md +1 -1
  642. package/docs/computer-use.md +362 -0
  643. package/docs/custom-provider.md +3 -3
  644. package/docs/extensions.md +8 -4
  645. package/docs/features.md +22 -12
  646. package/docs/keybindings.md +1 -1
  647. package/docs/models.md +5 -5
  648. package/docs/packages.md +1 -1
  649. package/docs/providers.md +2 -2
  650. package/docs/rpc.md +7 -7
  651. package/docs/security.md +10 -5
  652. package/docs/sessions.md +2 -2
  653. package/docs/skills.md +1 -1
  654. package/docs/terminal-setup.md +7 -7
  655. package/docs/themes.md +1 -1
  656. package/docs/usage.md +1 -1
  657. package/examples/extensions/auto-commit-on-exit.ts +1 -1
  658. package/examples/extensions/bash-spawn-hook.ts +1 -1
  659. package/examples/extensions/built-in-tool-renderer.ts +1 -1
  660. package/examples/extensions/claude-rules.ts +1 -1
  661. package/examples/extensions/commands.ts +1 -1
  662. package/examples/extensions/custom-compaction.ts +1 -1
  663. package/examples/extensions/custom-provider-anthropic/index.ts +3 -3
  664. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  665. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  666. package/examples/extensions/custom-provider-gitlab-duo/index.ts +1 -1
  667. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  668. package/examples/extensions/doom-overlay/index.ts +1 -1
  669. package/examples/extensions/git-merge-and-resolve.ts +2 -2
  670. package/examples/extensions/gondolin/index.ts +1 -1
  671. package/examples/extensions/gondolin/package-lock.json +2 -2
  672. package/examples/extensions/gondolin/package.json +1 -1
  673. package/examples/extensions/hidden-thinking-label.ts +1 -1
  674. package/examples/extensions/inline-bash.ts +2 -2
  675. package/examples/extensions/input-transform-streaming.ts +2 -2
  676. package/examples/extensions/input-transform.ts +2 -2
  677. package/examples/extensions/interactive-shell.ts +1 -1
  678. package/examples/extensions/kimi-deferred-tools.ts +1 -1
  679. package/examples/extensions/mac-system-theme.ts +1 -1
  680. package/examples/extensions/minimal-mode.ts +1 -1
  681. package/examples/extensions/modal-editor.ts +1 -1
  682. package/examples/extensions/model-status.ts +1 -1
  683. package/examples/extensions/notify.ts +3 -3
  684. package/examples/extensions/overlay-qa-tests.ts +1 -1
  685. package/examples/extensions/overlay-test.ts +1 -1
  686. package/examples/extensions/pirate.ts +1 -1
  687. package/examples/extensions/preset.ts +3 -3
  688. package/examples/extensions/project-trust.ts +4 -4
  689. package/examples/extensions/prompt-customizer.ts +1 -1
  690. package/examples/extensions/rainbow-editor.ts +1 -1
  691. package/examples/extensions/rpc-demo.ts +1 -1
  692. package/examples/extensions/sandbox/index.ts +7 -7
  693. package/examples/extensions/sandbox/package-lock.json +2 -2
  694. package/examples/extensions/sandbox/package.json +1 -1
  695. package/examples/extensions/shutdown-command.ts +5 -5
  696. package/examples/extensions/ssh.ts +2 -2
  697. package/examples/extensions/subagent/README.md +3 -3
  698. package/examples/extensions/subagent/index.ts +2 -2
  699. package/examples/extensions/titlebar-spinner.ts +1 -1
  700. package/examples/extensions/tool-override.ts +1 -1
  701. package/examples/extensions/tools.ts +1 -1
  702. package/examples/extensions/with-deps/package-lock.json +2 -2
  703. package/examples/extensions/with-deps/package.json +1 -1
  704. package/examples/extensions/working-indicator.ts +1 -1
  705. package/examples/extensions/working-message-test.ts +1 -1
  706. package/examples/sdk/01-minimal.ts +1 -1
  707. package/examples/sdk/03-custom-prompt.ts +1 -1
  708. package/examples/sdk/04-skills.ts +1 -1
  709. package/examples/sdk/06-extensions.ts +2 -2
  710. package/examples/sdk/08-prompt-templates.ts +1 -1
  711. package/install-lock/package-lock.json +3841 -0
  712. package/install-lock/package.json +18 -0
  713. package/native/computer-use/LICENSE.md +21 -0
  714. package/npm-shrinkwrap.json +3858 -0
  715. package/package.json +15 -9
  716. package/dist/modes/interactive/components/exit-card.d.ts +0 -22
  717. package/dist/modes/interactive/components/exit-card.d.ts.map +0 -1
  718. package/dist/modes/interactive/components/exit-card.js +0 -69
  719. package/dist/modes/interactive/components/exit-card.js.map +0 -1
  720. package/dist/node-runtime/agent-session-services-YXXFCP5J.js +0 -49
  721. package/dist/node-runtime/chunk-4HXHDDCF.js +0 -16
  722. package/dist/node-runtime/chunk-4TLO4PO2.js +0 -3427
  723. package/dist/node-runtime/chunk-AUXVGBO4.js +0 -19
  724. package/dist/node-runtime/chunk-OVX6X377.js +0 -50
  725. package/dist/node-runtime/chunk-QTU6AKNJ.js +0 -773
  726. package/dist/node-runtime/chunk-TORR5XBV.js +0 -356
  727. package/dist/node-runtime/commands-QC6VUZJQ.js +0 -36
  728. package/dist/node-runtime/interactive-mode-Z5M7WYYZ.js +0 -72
  729. package/dist/node-runtime/mcp-auth-flow-QIXHW6QN.js +0 -32
@@ -37,14 +37,13 @@ export default function mcpAdapter(pi) {
37
37
  return Promise.resolve(heavyModules);
38
38
  if (!heavyModulesPromise) {
39
39
  heavyModulesPromise = (async () => {
40
- const [init, authFlow, commands, proxyModes, directToolExecutor] = await Promise.all([
40
+ const [init, commands, proxyModes, directToolExecutor] = await Promise.all([
41
41
  import("./init.js"),
42
- import("./mcp-auth-flow.js"),
43
42
  import("./commands.js"),
44
43
  import("./proxy-modes.js"),
45
44
  import("./direct-tool-executor.js"),
46
45
  ]);
47
- const loaded = { init, authFlow, commands, proxyModes, directToolExecutor };
46
+ const loaded = { init, commands, proxyModes, directToolExecutor };
48
47
  heavyModules = loaded;
49
48
  return loaded;
50
49
  })().catch((error) => {
@@ -61,6 +60,7 @@ export default function mcpAdapter(pi) {
61
60
  if (existing)
62
61
  return existing;
63
62
  const shutdown = (async () => {
63
+ await currentState.authFlow.shutdown();
64
64
  if (currentState.uiServer) {
65
65
  currentState.uiServer.close(reason);
66
66
  currentState.uiServer = null;
@@ -97,11 +97,6 @@ export default function mcpAdapter(pi) {
97
97
  initializingStates.clear();
98
98
  await Promise.all(pending.map((entry) => shutdownState(entry, "initialization_cancelled")));
99
99
  }
100
- async function shutdownLoadedRuntime() {
101
- if (!heavyModules)
102
- return;
103
- await heavyModules.authFlow.shutdownOAuth();
104
- }
105
100
  async function runInitialize(generation, sessionPi, ctx) {
106
101
  const signal = sessionAbort.signal;
107
102
  const heavy = await loadHeavyModules();
@@ -109,12 +104,6 @@ export default function mcpAdapter(pi) {
109
104
  if (generation !== lifecycleGeneration) {
110
105
  throw new Error("MCP initialization aborted (session changed)");
111
106
  }
112
- await heavy.authFlow.initializeOAuth().catch(err => {
113
- console.error("MCP OAuth initialization failed:", err);
114
- });
115
- if (generation !== lifecycleGeneration) {
116
- throw new Error("MCP initialization aborted (session changed)");
117
- }
118
107
  let partial;
119
108
  try {
120
109
  const initialized = await heavy.init.initializeMcp(sessionPi, ctx, {
@@ -212,6 +201,10 @@ export default function mcpAdapter(pi) {
212
201
  function createLazyDirectToolExecute(spec) {
213
202
  return async function execute(toolCallId, params, incomingSignal, onUpdate, ctx) {
214
203
  const signal = incomingSignal ? AbortSignal.any([incomingSignal, sessionAbort.signal]) : sessionAbort.signal;
204
+ const currentSpec = currentDirectSpecs.get(spec.prefixedName);
205
+ if (!currentSpec || JSON.stringify(currentSpec) !== JSON.stringify(spec)) {
206
+ throw new Error("MCP tool is unavailable in the current trusted configuration");
207
+ }
215
208
  let currentState;
216
209
  try {
217
210
  currentState = await ensureState(pi, ctx, signal);
@@ -237,27 +230,40 @@ export default function mcpAdapter(pi) {
237
230
  const earlyConfigPath = getConfigPathFromArgv();
238
231
  const earlyConfig = loadMcpConfig(earlyConfigPath);
239
232
  const earlyCache = loadMetadataCache();
240
- const prefix = earlyConfig.settings?.toolPrefix ?? "server";
241
- const envRaw = process.env.MCP_DIRECT_TOOLS;
242
- const directSpecs = envRaw === "__none__"
243
- ? []
244
- : resolveDirectTools(earlyConfig, earlyCache, prefix, envRaw?.split(",").map(s => s.trim()).filter(Boolean));
245
- const missingConfiguredDirectToolServers = getMissingConfiguredDirectToolServers(earlyConfig, earlyCache);
246
- const shouldRegisterProxyTool = earlyConfig.settings?.disableProxyTool !== true
247
- || directSpecs.length === 0
248
- || missingConfiguredDirectToolServers.length > 0;
249
- for (const spec of directSpecs) {
250
- pi.registerTool({
251
- name: spec.prefixedName,
252
- label: `MCP: ${spec.originalName}`,
253
- description: `${spec.description || "(no description)"}\nUnavailable in read-only mode; switch to yolo or auto to call.`,
254
- promptSnippet: truncateAtWord(spec.description, 100) || `MCP tool from ${spec.serverName}`,
255
- parameters: Type.Unsafe(normalizeDirectToolInputSchema(spec.inputSchema)),
256
- execute: createLazyDirectToolExecute(spec),
257
- renderCall: createMcpDirectToolCallRenderer(spec.prefixedName),
258
- renderResult: renderMcpToolResult,
259
- });
233
+ const registeredDirectTools = new Map();
234
+ let currentDirectSpecs = new Map();
235
+ function registerConfiguredTools(config, cache) {
236
+ const prefix = config.settings?.toolPrefix ?? "server";
237
+ const envRaw = process.env.MCP_DIRECT_TOOLS;
238
+ const directSpecs = envRaw === "__none__"
239
+ ? []
240
+ : resolveDirectTools(config, cache, prefix, envRaw?.split(",").map(s => s.trim()).filter(Boolean));
241
+ currentDirectSpecs = new Map(directSpecs.map(spec => [spec.prefixedName, spec]));
242
+ const missingConfiguredDirectToolServers = getMissingConfiguredDirectToolServers(config, cache);
243
+ const shouldRegisterProxyTool = config.settings?.disableProxyTool !== true
244
+ || directSpecs.length === 0
245
+ || missingConfiguredDirectToolServers.length > 0;
246
+ for (const spec of directSpecs) {
247
+ const fingerprint = JSON.stringify(spec);
248
+ if (registeredDirectTools.get(spec.prefixedName) === fingerprint)
249
+ continue;
250
+ registeredDirectTools.set(spec.prefixedName, fingerprint);
251
+ pi.registerTool({
252
+ name: spec.prefixedName,
253
+ label: `MCP: ${spec.originalName}`,
254
+ description: `${spec.description || "(no description)"}\nUnavailable in read-only mode; switch to yolo or auto to call.`,
255
+ promptSnippet: truncateAtWord(spec.description, 100) || `MCP tool from ${spec.serverName}`,
256
+ parameters: Type.Unsafe(normalizeDirectToolInputSchema(spec.inputSchema)),
257
+ execute: createLazyDirectToolExecute(spec),
258
+ renderCall: createMcpDirectToolCallRenderer(spec.prefixedName),
259
+ renderResult: renderMcpToolResult,
260
+ });
261
+ }
262
+ if (shouldRegisterProxyTool)
263
+ registerProxyTool(config, cache, directSpecs);
264
+ return { names: directSpecs.map(spec => spec.prefixedName), proxy: shouldRegisterProxyTool };
260
265
  }
266
+ registerConfiguredTools(earlyConfig, earlyCache);
261
267
  const getPiTools = () => pi.getAllTools();
262
268
  pi.registerFlag("mcp-config", {
263
269
  description: "Path to MCP config file",
@@ -275,7 +281,6 @@ export default function mcpAdapter(pi) {
275
281
  await Promise.all([
276
282
  shutdownState(previousState, "session_restart"),
277
283
  shutdownInitializingStates(),
278
- shutdownLoadedRuntime(),
279
284
  ]);
280
285
  }
281
286
  catch (error) {
@@ -285,8 +290,12 @@ export default function mcpAdapter(pi) {
285
290
  return;
286
291
  }
287
292
  const configPath = pi.getFlag("mcp-config") ?? earlyConfigPath;
288
- const sessionConfig = loadMcpConfig(configPath, ctx.cwd);
293
+ const sessionConfig = loadMcpConfig(configPath, ctx.cwd, ctx.isProjectTrusted());
289
294
  const sessionCache = loadMetadataCache();
295
+ const registered = registerConfiguredTools(sessionConfig, sessionCache);
296
+ // Session replacement can reuse the factory. Retire definitions from its prior config.
297
+ const active = pi.getActiveTools().filter(name => !registeredDirectTools.has(name) && name !== "mcp");
298
+ pi.setActiveTools([...active, ...registered.names, ...(registered.proxy ? ["mcp"] : [])]);
290
299
  if (!shouldBackgroundAutostart(sessionConfig, sessionCache)) {
291
300
  return;
292
301
  }
@@ -303,7 +312,6 @@ export default function mcpAdapter(pi) {
303
312
  await Promise.all([
304
313
  shutdownState(currentState, "session_shutdown"),
305
314
  shutdownInitializingStates(),
306
- shutdownLoadedRuntime(),
307
315
  ]);
308
316
  }
309
317
  catch (error) {
@@ -396,14 +404,14 @@ export default function mcpAdapter(pi) {
396
404
  await heavy.commands.openMcpAuthPanel(currentState, pi, ctx, earlyConfigPath);
397
405
  return;
398
406
  }
399
- await heavy.commands.authenticateServer(serverName, currentState.config, ctx);
407
+ await heavy.commands.authenticateServer(serverName, currentState.config, ctx, currentState.authFlow);
400
408
  },
401
409
  });
402
- if (shouldRegisterProxyTool) {
410
+ function registerProxyTool(config, cache, specs) {
403
411
  pi.registerTool({
404
412
  name: "mcp",
405
413
  label: "MCP",
406
- description: buildProxyDescription(earlyConfig, earlyCache, directSpecs),
414
+ description: buildProxyDescription(config, cache, specs),
407
415
  promptSnippet: "MCP gateway - connect to MCP servers and call their tools",
408
416
  renderCall: renderMcpProxyToolCall,
409
417
  parameters: Type.Object({
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/builtin-extensions/pi-mcp-adapter/index.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\nimport type { ExtensionAPI, ExtensionContext, ToolInfo } from \"@ashx-j/lunr\";\nimport type { McpExtensionState } from \"./state.ts\";\nimport type { DirectToolSpec, McpConfig } from \"./types.ts\";\nimport type { MetadataCache } from \"./metadata-cache.ts\";\nimport { existsSync } from \"node:fs\";\nimport { Type } from \"typebox\";\nimport { loadMcpConfig } from \"./config.ts\";\nimport { buildProxyDescription, getMissingConfiguredDirectToolServers, resolveDirectTools } from \"./direct-tools.ts\";\nimport { getMetadataCachePath, loadMetadataCache } from \"./metadata-cache.ts\";\nimport { getConfigPathFromArgv, normalizeDirectToolInputSchema, truncateAtWord } from \"./utils.ts\";\nimport { createMcpDirectToolCallRenderer, renderMcpProxyToolCall, renderMcpToolResult } from \"./tool-result-renderer.ts\";\nimport { toolErrorOverride } from \"./error-signal.ts\";\nimport { abortable, throwIfAborted } from \"./abort.ts\";\n\ntype McpHeavyModules = {\n init: typeof import(\"./init.ts\");\n authFlow: typeof import(\"./mcp-auth-flow.ts\");\n commands: typeof import(\"./commands.ts\");\n proxyModes: typeof import(\"./proxy-modes.ts\");\n directToolExecutor: typeof import(\"./direct-tool-executor.ts\");\n};\n\nfunction shouldBackgroundAutostart(config: McpConfig, cache: MetadataCache | null): boolean {\n const serverEntries = Object.entries(config.mcpServers);\n if (serverEntries.length === 0) return false;\n\n if (!existsSync(getMetadataCachePath())) return true;\n\n for (const [, definition] of serverEntries) {\n const mode = definition.lifecycle ?? \"lazy\";\n if (mode === \"keep-alive\" || mode === \"eager\") return true;\n }\n\n if (process.env.MCP_DIRECT_TOOLS === \"__none__\") return false;\n return getMissingConfiguredDirectToolServers(config, cache).length > 0;\n}\n\nexport default function mcpAdapter(pi: ExtensionAPI) {\n let state: McpExtensionState | null = null;\n let initPromise: Promise<McpExtensionState> | null = null;\n let lifecycleGeneration = 0;\n let sessionAbort = new AbortController();\n const initializingStates = new Set<McpExtensionState>();\n const shutdownPromises = new WeakMap<McpExtensionState, Promise<void>>();\n let heavyModules: McpHeavyModules | null = null;\n let heavyModulesPromise: Promise<McpHeavyModules> | null = null;\n const directExecutors = new Map<string, ReturnType<McpHeavyModules[\"directToolExecutor\"][\"createDirectToolExecutor\"]>>();\n\n function loadHeavyModules(): Promise<McpHeavyModules> {\n if (heavyModules) return Promise.resolve(heavyModules);\n if (!heavyModulesPromise) {\n heavyModulesPromise = (async () => {\n const [init, authFlow, commands, proxyModes, directToolExecutor] = await Promise.all([\n import(\"./init.ts\"),\n import(\"./mcp-auth-flow.ts\"),\n import(\"./commands.ts\"),\n import(\"./proxy-modes.ts\"),\n import(\"./direct-tool-executor.ts\"),\n ]);\n const loaded: McpHeavyModules = { init, authFlow, commands, proxyModes, directToolExecutor };\n heavyModules = loaded;\n return loaded;\n })().catch((error) => {\n heavyModulesPromise = null;\n throw error;\n });\n }\n return heavyModulesPromise;\n }\n\n function shutdownState(currentState: McpExtensionState | null, reason: string): Promise<void> {\n if (!currentState) return Promise.resolve();\n const existing = shutdownPromises.get(currentState);\n if (existing) return existing;\n\n const shutdown = (async () => {\n if (currentState.uiServer) {\n currentState.uiServer.close(reason);\n currentState.uiServer = null;\n }\n\n let flushError: unknown;\n try {\n if (heavyModules) {\n heavyModules.init.flushMetadataCache(currentState);\n }\n } catch (error) {\n flushError = error;\n }\n\n try {\n await currentState.lifecycle.gracefulShutdown();\n } catch (error) {\n if (flushError) {\n console.error(\"MCP: graceful shutdown failed after metadata flush error\", error);\n } else {\n throw error;\n }\n }\n\n if (flushError) {\n throw flushError;\n }\n })();\n shutdownPromises.set(currentState, shutdown);\n return shutdown;\n }\n\n async function shutdownInitializingStates(): Promise<void> {\n const pending = [...initializingStates];\n initializingStates.clear();\n await Promise.all(pending.map((entry) => shutdownState(entry, \"initialization_cancelled\")));\n }\n\n async function shutdownLoadedRuntime(): Promise<void> {\n if (!heavyModules) return;\n await heavyModules.authFlow.shutdownOAuth();\n }\n\n async function runInitialize(\n generation: number,\n sessionPi: ExtensionAPI,\n ctx: ExtensionContext,\n ): Promise<McpExtensionState> {\n const signal = sessionAbort.signal;\n const heavy = await loadHeavyModules();\n throwIfAborted(signal);\n if (generation !== lifecycleGeneration) {\n throw new Error(\"MCP initialization aborted (session changed)\");\n }\n\n await heavy.authFlow.initializeOAuth().catch(err => {\n console.error(\"MCP OAuth initialization failed:\", err);\n });\n\n if (generation !== lifecycleGeneration) {\n throw new Error(\"MCP initialization aborted (session changed)\");\n }\n\n let partial: McpExtensionState | undefined;\n try {\n const initialized = await heavy.init.initializeMcp(sessionPi, ctx, {\n signal,\n onState: (entry: McpExtensionState) => {\n partial = entry;\n initializingStates.add(entry);\n },\n });\n if (!partial) {\n partial = initialized;\n initializingStates.add(initialized);\n }\n throwIfAborted(signal);\n return initialized;\n } catch (error) {\n if (partial) {\n initializingStates.delete(partial);\n await shutdownState(partial, \"initialization_failed\");\n }\n throw error;\n } finally {\n if (partial) initializingStates.delete(partial);\n }\n }\n\n function startSessionInit(generation: number, sessionPi: ExtensionAPI, ctx: ExtensionContext): Promise<McpExtensionState> {\n const promise = runInitialize(generation, sessionPi, ctx);\n initPromise = promise;\n\n promise.then(async (nextState) => {\n if (generation !== lifecycleGeneration || initPromise !== promise) {\n try {\n await shutdownState(nextState, \"stale_session_start\");\n } catch (error) {\n console.error(\"MCP: failed to clean stale session state\", error);\n }\n return;\n }\n\n state = nextState;\n if (heavyModules) {\n heavyModules.init.updateStatusBar(nextState);\n }\n initPromise = null;\n }).catch(err => {\n if (generation !== lifecycleGeneration) {\n return;\n }\n if (initPromise !== promise && initPromise !== null) {\n return;\n }\n console.error(\"MCP initialization failed:\", err);\n initPromise = null;\n });\n\n return promise;\n }\n\n async function ensureState(sessionPi: ExtensionAPI, ctx: ExtensionContext, signal?: AbortSignal): Promise<McpExtensionState> {\n throwIfAborted(signal);\n if (state) return state;\n\n const generation = lifecycleGeneration;\n if (!initPromise) {\n startSessionInit(generation, sessionPi, ctx);\n }\n const promise = initPromise;\n if (!promise) {\n throw new Error(\"MCP not initialized\");\n }\n\n try {\n const nextState = await abortable(promise, signal);\n if (generation !== lifecycleGeneration) {\n throw new Error(\"MCP initialization aborted (session changed)\");\n }\n if (state) return state;\n state = nextState;\n if (initPromise === promise) {\n initPromise = null;\n }\n return state;\n } catch (error) {\n if (initPromise === promise && !signal?.aborted) {\n initPromise = null;\n }\n throw error;\n }\n }\n\n function assertCurrentState(currentState: McpExtensionState): void {\n if (currentState !== state) throw new Error(\"MCP session changed before execution\");\n }\n\n function createLazyDirectToolExecute(spec: DirectToolSpec) {\n return async function execute(toolCallId, params, incomingSignal, onUpdate, ctx) {\n const signal = incomingSignal ? AbortSignal.any([incomingSignal, sessionAbort.signal]) : sessionAbort.signal;\n let currentState: McpExtensionState;\n try {\n currentState = await ensureState(pi, ctx, signal);\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 const heavy = await loadHeavyModules();\n throwIfAborted(signal);\n assertCurrentState(currentState);\n let executor = directExecutors.get(spec.prefixedName);\n if (!executor) {\n executor = heavy.directToolExecutor.createDirectToolExecutor(() => currentState, () => null, spec);\n directExecutors.set(spec.prefixedName, executor);\n }\n return executor(toolCallId, params, signal, onUpdate, ctx);\n };\n }\n\n const earlyConfigPath = getConfigPathFromArgv();\n const earlyConfig = loadMcpConfig(earlyConfigPath);\n const earlyCache = loadMetadataCache();\n const prefix = earlyConfig.settings?.toolPrefix ?? \"server\";\n\n const envRaw = process.env.MCP_DIRECT_TOOLS;\n const directSpecs = envRaw === \"__none__\"\n ? []\n : resolveDirectTools(\n earlyConfig,\n earlyCache,\n prefix,\n envRaw?.split(\",\").map(s => s.trim()).filter(Boolean),\n );\n const missingConfiguredDirectToolServers = getMissingConfiguredDirectToolServers(earlyConfig, earlyCache);\n const shouldRegisterProxyTool =\n earlyConfig.settings?.disableProxyTool !== true\n || directSpecs.length === 0\n || missingConfiguredDirectToolServers.length > 0;\n\n for (const spec of directSpecs) {\n (pi.registerTool as (tool: unknown) => unknown)({\n name: spec.prefixedName,\n label: `MCP: ${spec.originalName}`,\n description: `${spec.description || \"(no description)\"}\\nUnavailable in read-only mode; switch to yolo or auto to call.`,\n promptSnippet: truncateAtWord(spec.description, 100) || `MCP tool from ${spec.serverName}`,\n parameters: Type.Unsafe(normalizeDirectToolInputSchema(spec.inputSchema) as never),\n execute: createLazyDirectToolExecute(spec),\n renderCall: createMcpDirectToolCallRenderer(spec.prefixedName),\n renderResult: renderMcpToolResult,\n });\n }\n\n const getPiTools = (): ToolInfo[] => pi.getAllTools();\n\n pi.registerFlag(\"mcp-config\", {\n description: \"Path to MCP config file\",\n type: \"string\",\n });\n\n pi.on(\"session_start\", async (_event, ctx) => {\n const generation = ++lifecycleGeneration;\n sessionAbort.abort(new Error(\"MCP session changed\"));\n sessionAbort = new AbortController();\n const previousState = state;\n state = null;\n initPromise = null;\n directExecutors.clear();\n\n try {\n await Promise.all([\n shutdownState(previousState, \"session_restart\"),\n shutdownInitializingStates(),\n shutdownLoadedRuntime(),\n ]);\n } catch (error) {\n console.error(\"MCP: failed to shut down previous session state\", error);\n }\n\n if (generation !== lifecycleGeneration) {\n return;\n }\n\n const configPath = (pi.getFlag(\"mcp-config\") as string | undefined) ?? earlyConfigPath;\n const sessionConfig = loadMcpConfig(configPath, ctx.cwd);\n const sessionCache = loadMetadataCache();\n\n if (!shouldBackgroundAutostart(sessionConfig, sessionCache)) {\n return;\n }\n\n startSessionInit(generation, pi, ctx);\n });\n\n pi.on(\"session_shutdown\", async () => {\n ++lifecycleGeneration;\n sessionAbort.abort(new Error(\"MCP session ended\"));\n const currentState = state;\n state = null;\n initPromise = null;\n directExecutors.clear();\n\n try {\n await Promise.all([\n shutdownState(currentState, \"session_shutdown\"),\n shutdownInitializingStates(),\n shutdownLoadedRuntime(),\n ]);\n } catch (error) {\n console.error(\"MCP: session shutdown cleanup failed\", error);\n }\n });\n\n // Re-flag returned MCP tool failures so pi registers them as errors (see toolErrorOverride).\n pi.on(\"tool_result\", (event) => toolErrorOverride(event.details));\n\n pi.registerCommand(\"mcp\", {\n description: \"Show MCP server status\",\n handler: async (args, ctx) => {\n let currentState: McpExtensionState;\n try {\n currentState = await ensureState(pi, ctx);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n if (ctx.hasUI) ctx.ui.notify(`MCP initialization failed: ${message}`, \"error\");\n return;\n }\n\n const heavy = await loadHeavyModules();\n assertCurrentState(currentState);\n const parts = args?.trim()?.split(/\\s+/) ?? [];\n const subcommand = parts[0] ?? \"\";\n const targetServer = parts[1];\n const rest = parts.slice(1).join(\" \");\n\n switch (subcommand) {\n case \"reconnect\":\n await heavy.commands.reconnectServers(currentState, ctx, targetServer);\n break;\n case \"tools\":\n await heavy.commands.showTools(currentState, ctx);\n break;\n case \"setup\": {\n const result = await heavy.commands.openMcpSetup(currentState, pi, ctx, earlyConfigPath, \"setup\");\n if (result?.configChanged) {\n await ctx.reload();\n return;\n }\n break;\n }\n case \"logout\": {\n const serverName = rest;\n if (!serverName) {\n if (ctx.hasUI) ctx.ui.notify(\"Usage: /mcp logout <server>\", \"error\");\n return;\n }\n await heavy.commands.logoutServer(serverName, currentState, ctx);\n break;\n }\n case \"status\":\n case \"\":\n default:\n if (ctx.hasUI) {\n const result = await heavy.commands.openMcpPanel(currentState, pi, ctx, earlyConfigPath);\n if (result?.configChanged) {\n await ctx.reload();\n return;\n }\n } else {\n await heavy.commands.showStatus(currentState, ctx);\n }\n break;\n }\n },\n });\n\n pi.registerCommand(\"mcp-auth\", {\n description: \"Authenticate with an MCP server (OAuth)\",\n handler: async (args, ctx) => {\n const serverName = args?.trim();\n if (!serverName && !ctx.hasUI) {\n return;\n }\n\n let currentState: McpExtensionState;\n try {\n currentState = await ensureState(pi, ctx);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n if (ctx.hasUI) ctx.ui.notify(`MCP initialization failed: ${message}`, \"error\");\n return;\n }\n\n const heavy = await loadHeavyModules();\n assertCurrentState(currentState);\n\n if (!serverName) {\n await heavy.commands.openMcpAuthPanel(currentState, pi, ctx, earlyConfigPath);\n return;\n }\n\n await heavy.commands.authenticateServer(serverName, currentState.config, ctx);\n },\n });\n\n if (shouldRegisterProxyTool) {\n (pi.registerTool as (tool: unknown) => unknown)({\n name: \"mcp\",\n label: \"MCP\",\n description: buildProxyDescription(earlyConfig, earlyCache, directSpecs),\n promptSnippet: \"MCP gateway - connect to MCP servers and call their tools\",\n renderCall: renderMcpProxyToolCall,\n parameters: Type.Object({\n tool: Type.Optional(Type.String({ description: \"Tool name to call (e.g., 'xcodebuild_list_sims')\" })),\n args: Type.Optional(Type.String({ description: \"Arguments as JSON string (e.g., '{\\\"key\\\": \\\"value\\\"}')\" })),\n connect: Type.Optional(Type.String({ description: \"Server name to connect (lazy connect + metadata refresh)\" })),\n describe: Type.Optional(Type.String({ description: \"Tool name to describe (shows parameters)\" })),\n search: Type.Optional(Type.String({ description: \"Search tools by name/description\" })),\n regex: Type.Optional(Type.Boolean({ description: \"Treat search as regex (default: substring match)\" })),\n includeSchemas: Type.Optional(Type.Boolean({ description: \"Include parameter schemas in search results (default: true)\" })),\n server: Type.Optional(Type.String({ description: \"Filter to specific server (also disambiguates tool calls)\" })),\n action: Type.Optional(Type.String({ description: \"Action: 'ui-messages', 'auth-start', or 'auth-complete'\" })),\n }),\n renderResult: renderMcpToolResult,\n async execute(_toolCallId, params: {\n tool?: string;\n args?: string;\n connect?: string;\n describe?: string;\n search?: string;\n regex?: boolean;\n includeSchemas?: boolean;\n server?: string;\n action?: string;\n }, incomingSignal, _onUpdate, ctx) {\n const signal = incomingSignal ? AbortSignal.any([incomingSignal, sessionAbort.signal]) : sessionAbort.signal;\n let parsedArgs: Record<string, unknown> | undefined;\n if (params.args) {\n try {\n parsedArgs = JSON.parse(params.args);\n if (typeof parsedArgs !== \"object\" || parsedArgs === null || Array.isArray(parsedArgs)) {\n const gotType = Array.isArray(parsedArgs) ? \"array\" : parsedArgs === null ? \"null\" : typeof parsedArgs;\n throw new Error(`Invalid args: expected a JSON object, got ${gotType}`);\n }\n } catch (error) {\n if (error instanceof SyntaxError) {\n throw new Error(`Invalid args JSON: ${error.message}`, { cause: error });\n }\n throw error;\n }\n }\n\n let currentState: McpExtensionState;\n try {\n currentState = await ensureState(pi, ctx, signal);\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 const heavy = await loadHeavyModules();\n throwIfAborted(signal);\n assertCurrentState(currentState);\n\n if (params.action === \"ui-messages\") {\n return heavy.proxyModes.executeUiMessages(currentState);\n }\n if (params.action === \"auth-start\") {\n if (!params.server) {\n return {\n content: [{ type: \"text\" as const, text: \"auth-start requires `server`. Example: mcp({ action: \\\"auth-start\\\", server: \\\"linear-server\\\" })\" }],\n details: { mode: \"auth-start\", error: \"missing_server\" },\n };\n }\n return heavy.proxyModes.executeAuthStart(currentState, params.server);\n }\n if (params.action === \"auth-complete\") {\n if (!params.server) {\n return {\n content: [{ type: \"text\" as const, text: \"auth-complete requires `server`.\" }],\n details: { mode: \"auth-complete\", error: \"missing_server\" },\n };\n }\n const input = parsedArgs?.redirectUrl ?? parsedArgs?.code ?? parsedArgs?.input;\n if (typeof input !== \"string\" || input.trim().length === 0) {\n return {\n content: [{ type: \"text\" as const, text: \"auth-complete requires args with `redirectUrl`, `code`, or `input`.\" }],\n details: { mode: \"auth-complete\", error: \"missing_input\" },\n };\n }\n return heavy.proxyModes.executeAuthComplete(currentState, params.server, input);\n }\n if (params.tool) {\n return heavy.proxyModes.executeCall(currentState, params.tool, parsedArgs, params.server, getPiTools, signal);\n }\n if (params.connect) {\n return heavy.proxyModes.executeConnect(currentState, params.connect, signal);\n }\n if (params.describe) {\n return heavy.proxyModes.executeDescribe(currentState, params.describe);\n }\n if (params.search) {\n return heavy.proxyModes.executeSearch(currentState, params.search, params.regex, params.server, params.includeSchemas);\n }\n if (params.server) {\n return heavy.proxyModes.executeList(currentState, params.server);\n }\n return heavy.proxyModes.executeStatus(currentState);\n },\n });\n }\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/builtin-extensions/pi-mcp-adapter/index.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\nimport type { ExtensionAPI, ExtensionContext, ToolInfo } from \"@ashx-j/lunr\";\nimport type { McpExtensionState } from \"./state.ts\";\nimport type { DirectToolSpec, McpConfig } from \"./types.ts\";\nimport type { MetadataCache } from \"./metadata-cache.ts\";\nimport { existsSync } from \"node:fs\";\nimport { Type } from \"typebox\";\nimport { loadMcpConfig } from \"./config.ts\";\nimport { buildProxyDescription, getMissingConfiguredDirectToolServers, resolveDirectTools } from \"./direct-tools.ts\";\nimport { getMetadataCachePath, loadMetadataCache } from \"./metadata-cache.ts\";\nimport { getConfigPathFromArgv, normalizeDirectToolInputSchema, truncateAtWord } from \"./utils.ts\";\nimport { createMcpDirectToolCallRenderer, renderMcpProxyToolCall, renderMcpToolResult } from \"./tool-result-renderer.ts\";\nimport { toolErrorOverride } from \"./error-signal.ts\";\nimport { abortable, throwIfAborted } from \"./abort.ts\";\n\ntype McpHeavyModules = {\n init: typeof import(\"./init.ts\");\n commands: typeof import(\"./commands.ts\");\n proxyModes: typeof import(\"./proxy-modes.ts\");\n directToolExecutor: typeof import(\"./direct-tool-executor.ts\");\n};\n\nfunction shouldBackgroundAutostart(config: McpConfig, cache: MetadataCache | null): boolean {\n const serverEntries = Object.entries(config.mcpServers);\n if (serverEntries.length === 0) return false;\n\n if (!existsSync(getMetadataCachePath())) return true;\n\n for (const [, definition] of serverEntries) {\n const mode = definition.lifecycle ?? \"lazy\";\n if (mode === \"keep-alive\" || mode === \"eager\") return true;\n }\n\n if (process.env.MCP_DIRECT_TOOLS === \"__none__\") return false;\n return getMissingConfiguredDirectToolServers(config, cache).length > 0;\n}\n\nexport default function mcpAdapter(pi: ExtensionAPI) {\n let state: McpExtensionState | null = null;\n let initPromise: Promise<McpExtensionState> | null = null;\n let lifecycleGeneration = 0;\n let sessionAbort = new AbortController();\n const initializingStates = new Set<McpExtensionState>();\n const shutdownPromises = new WeakMap<McpExtensionState, Promise<void>>();\n let heavyModules: McpHeavyModules | null = null;\n let heavyModulesPromise: Promise<McpHeavyModules> | null = null;\n const directExecutors = new Map<string, ReturnType<McpHeavyModules[\"directToolExecutor\"][\"createDirectToolExecutor\"]>>();\n\n function loadHeavyModules(): Promise<McpHeavyModules> {\n if (heavyModules) return Promise.resolve(heavyModules);\n if (!heavyModulesPromise) {\n heavyModulesPromise = (async () => {\n const [init, commands, proxyModes, directToolExecutor] = await Promise.all([\n import(\"./init.ts\"),\n import(\"./commands.ts\"),\n import(\"./proxy-modes.ts\"),\n import(\"./direct-tool-executor.ts\"),\n ]);\n const loaded: McpHeavyModules = { init, commands, proxyModes, directToolExecutor };\n heavyModules = loaded;\n return loaded;\n })().catch((error) => {\n heavyModulesPromise = null;\n throw error;\n });\n }\n return heavyModulesPromise;\n }\n\n function shutdownState(currentState: McpExtensionState | null, reason: string): Promise<void> {\n if (!currentState) return Promise.resolve();\n const existing = shutdownPromises.get(currentState);\n if (existing) return existing;\n\n const shutdown = (async () => {\n await currentState.authFlow.shutdown();\n if (currentState.uiServer) {\n currentState.uiServer.close(reason);\n currentState.uiServer = null;\n }\n\n let flushError: unknown;\n try {\n if (heavyModules) {\n heavyModules.init.flushMetadataCache(currentState);\n }\n } catch (error) {\n flushError = error;\n }\n\n try {\n await currentState.lifecycle.gracefulShutdown();\n } catch (error) {\n if (flushError) {\n console.error(\"MCP: graceful shutdown failed after metadata flush error\", error);\n } else {\n throw error;\n }\n }\n\n if (flushError) {\n throw flushError;\n }\n })();\n shutdownPromises.set(currentState, shutdown);\n return shutdown;\n }\n\n async function shutdownInitializingStates(): Promise<void> {\n const pending = [...initializingStates];\n initializingStates.clear();\n await Promise.all(pending.map((entry) => shutdownState(entry, \"initialization_cancelled\")));\n }\n\n async function runInitialize(\n generation: number,\n sessionPi: ExtensionAPI,\n ctx: ExtensionContext,\n ): Promise<McpExtensionState> {\n const signal = sessionAbort.signal;\n const heavy = await loadHeavyModules();\n throwIfAborted(signal);\n if (generation !== lifecycleGeneration) {\n throw new Error(\"MCP initialization aborted (session changed)\");\n }\n\n let partial: McpExtensionState | undefined;\n try {\n const initialized = await heavy.init.initializeMcp(sessionPi, ctx, {\n signal,\n onState: (entry: McpExtensionState) => {\n partial = entry;\n initializingStates.add(entry);\n },\n });\n if (!partial) {\n partial = initialized;\n initializingStates.add(initialized);\n }\n throwIfAborted(signal);\n return initialized;\n } catch (error) {\n if (partial) {\n initializingStates.delete(partial);\n await shutdownState(partial, \"initialization_failed\");\n }\n throw error;\n } finally {\n if (partial) initializingStates.delete(partial);\n }\n }\n\n function startSessionInit(generation: number, sessionPi: ExtensionAPI, ctx: ExtensionContext): Promise<McpExtensionState> {\n const promise = runInitialize(generation, sessionPi, ctx);\n initPromise = promise;\n\n promise.then(async (nextState) => {\n if (generation !== lifecycleGeneration || initPromise !== promise) {\n try {\n await shutdownState(nextState, \"stale_session_start\");\n } catch (error) {\n console.error(\"MCP: failed to clean stale session state\", error);\n }\n return;\n }\n\n state = nextState;\n if (heavyModules) {\n heavyModules.init.updateStatusBar(nextState);\n }\n initPromise = null;\n }).catch(err => {\n if (generation !== lifecycleGeneration) {\n return;\n }\n if (initPromise !== promise && initPromise !== null) {\n return;\n }\n console.error(\"MCP initialization failed:\", err);\n initPromise = null;\n });\n\n return promise;\n }\n\n async function ensureState(sessionPi: ExtensionAPI, ctx: ExtensionContext, signal?: AbortSignal): Promise<McpExtensionState> {\n throwIfAborted(signal);\n if (state) return state;\n\n const generation = lifecycleGeneration;\n if (!initPromise) {\n startSessionInit(generation, sessionPi, ctx);\n }\n const promise = initPromise;\n if (!promise) {\n throw new Error(\"MCP not initialized\");\n }\n\n try {\n const nextState = await abortable(promise, signal);\n if (generation !== lifecycleGeneration) {\n throw new Error(\"MCP initialization aborted (session changed)\");\n }\n if (state) return state;\n state = nextState;\n if (initPromise === promise) {\n initPromise = null;\n }\n return state;\n } catch (error) {\n if (initPromise === promise && !signal?.aborted) {\n initPromise = null;\n }\n throw error;\n }\n }\n\n function assertCurrentState(currentState: McpExtensionState): void {\n if (currentState !== state) throw new Error(\"MCP session changed before execution\");\n }\n\n function createLazyDirectToolExecute(spec: DirectToolSpec) {\n return async function execute(toolCallId, params, incomingSignal, onUpdate, ctx) {\n const signal = incomingSignal ? AbortSignal.any([incomingSignal, sessionAbort.signal]) : sessionAbort.signal;\n const currentSpec = currentDirectSpecs.get(spec.prefixedName);\n if (!currentSpec || JSON.stringify(currentSpec) !== JSON.stringify(spec)) {\n throw new Error(\"MCP tool is unavailable in the current trusted configuration\");\n }\n let currentState: McpExtensionState;\n try {\n currentState = await ensureState(pi, ctx, signal);\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 const heavy = await loadHeavyModules();\n throwIfAborted(signal);\n assertCurrentState(currentState);\n let executor = directExecutors.get(spec.prefixedName);\n if (!executor) {\n executor = heavy.directToolExecutor.createDirectToolExecutor(() => currentState, () => null, spec);\n directExecutors.set(spec.prefixedName, executor);\n }\n return executor(toolCallId, params, signal, onUpdate, ctx);\n };\n }\n\n const earlyConfigPath = getConfigPathFromArgv();\n const earlyConfig = loadMcpConfig(earlyConfigPath);\n const earlyCache = loadMetadataCache();\n const registeredDirectTools = new Map<string, string>();\n let currentDirectSpecs = new Map<string, DirectToolSpec>();\n function registerConfiguredTools(config: McpConfig, cache: MetadataCache | null) {\n const prefix = config.settings?.toolPrefix ?? \"server\";\n\n const envRaw = process.env.MCP_DIRECT_TOOLS;\n const directSpecs = envRaw === \"__none__\"\n ? []\n : resolveDirectTools(\n config,\n cache,\n prefix,\n envRaw?.split(\",\").map(s => s.trim()).filter(Boolean),\n );\n currentDirectSpecs = new Map(directSpecs.map(spec => [spec.prefixedName, spec]));\n const missingConfiguredDirectToolServers = getMissingConfiguredDirectToolServers(config, cache);\n const shouldRegisterProxyTool =\n config.settings?.disableProxyTool !== true\n || directSpecs.length === 0\n || missingConfiguredDirectToolServers.length > 0;\n\n for (const spec of directSpecs) {\n const fingerprint = JSON.stringify(spec);\n if (registeredDirectTools.get(spec.prefixedName) === fingerprint) continue;\n registeredDirectTools.set(spec.prefixedName, fingerprint);\n (pi.registerTool as (tool: unknown) => unknown)({\n name: spec.prefixedName,\n label: `MCP: ${spec.originalName}`,\n description: `${spec.description || \"(no description)\"}\\nUnavailable in read-only mode; switch to yolo or auto to call.`,\n promptSnippet: truncateAtWord(spec.description, 100) || `MCP tool from ${spec.serverName}`,\n parameters: Type.Unsafe(normalizeDirectToolInputSchema(spec.inputSchema) as never),\n execute: createLazyDirectToolExecute(spec),\n renderCall: createMcpDirectToolCallRenderer(spec.prefixedName),\n renderResult: renderMcpToolResult,\n });\n }\n\n if (shouldRegisterProxyTool) registerProxyTool(config, cache, directSpecs);\n return { names: directSpecs.map(spec => spec.prefixedName), proxy: shouldRegisterProxyTool };\n }\n\n registerConfiguredTools(earlyConfig, earlyCache);\n\n const getPiTools = (): ToolInfo[] => pi.getAllTools();\n\n pi.registerFlag(\"mcp-config\", {\n description: \"Path to MCP config file\",\n type: \"string\",\n });\n\n pi.on(\"session_start\", async (_event, ctx) => {\n const generation = ++lifecycleGeneration;\n sessionAbort.abort(new Error(\"MCP session changed\"));\n sessionAbort = new AbortController();\n const previousState = state;\n state = null;\n initPromise = null;\n directExecutors.clear();\n\n try {\n await Promise.all([\n shutdownState(previousState, \"session_restart\"),\n shutdownInitializingStates(),\n ]);\n } catch (error) {\n console.error(\"MCP: failed to shut down previous session state\", error);\n }\n\n if (generation !== lifecycleGeneration) {\n return;\n }\n\n const configPath = (pi.getFlag(\"mcp-config\") as string | undefined) ?? earlyConfigPath;\n const sessionConfig = loadMcpConfig(configPath, ctx.cwd, ctx.isProjectTrusted());\n const sessionCache = loadMetadataCache();\n const registered = registerConfiguredTools(sessionConfig, sessionCache);\n // Session replacement can reuse the factory. Retire definitions from its prior config.\n const active = pi.getActiveTools().filter(name => !registeredDirectTools.has(name) && name !== \"mcp\");\n pi.setActiveTools([...active, ...registered.names, ...(registered.proxy ? [\"mcp\"] : [])]);\n\n if (!shouldBackgroundAutostart(sessionConfig, sessionCache)) {\n return;\n }\n\n startSessionInit(generation, pi, ctx);\n });\n\n pi.on(\"session_shutdown\", async () => {\n ++lifecycleGeneration;\n sessionAbort.abort(new Error(\"MCP session ended\"));\n const currentState = state;\n state = null;\n initPromise = null;\n directExecutors.clear();\n\n try {\n await Promise.all([\n shutdownState(currentState, \"session_shutdown\"),\n shutdownInitializingStates(),\n ]);\n } catch (error) {\n console.error(\"MCP: session shutdown cleanup failed\", error);\n }\n });\n\n // Re-flag returned MCP tool failures so pi registers them as errors (see toolErrorOverride).\n pi.on(\"tool_result\", (event) => toolErrorOverride(event.details));\n\n pi.registerCommand(\"mcp\", {\n description: \"Show MCP server status\",\n handler: async (args, ctx) => {\n let currentState: McpExtensionState;\n try {\n currentState = await ensureState(pi, ctx);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n if (ctx.hasUI) ctx.ui.notify(`MCP initialization failed: ${message}`, \"error\");\n return;\n }\n\n const heavy = await loadHeavyModules();\n assertCurrentState(currentState);\n const parts = args?.trim()?.split(/\\s+/) ?? [];\n const subcommand = parts[0] ?? \"\";\n const targetServer = parts[1];\n const rest = parts.slice(1).join(\" \");\n\n switch (subcommand) {\n case \"reconnect\":\n await heavy.commands.reconnectServers(currentState, ctx, targetServer);\n break;\n case \"tools\":\n await heavy.commands.showTools(currentState, ctx);\n break;\n case \"setup\": {\n const result = await heavy.commands.openMcpSetup(currentState, pi, ctx, earlyConfigPath, \"setup\");\n if (result?.configChanged) {\n await ctx.reload();\n return;\n }\n break;\n }\n case \"logout\": {\n const serverName = rest;\n if (!serverName) {\n if (ctx.hasUI) ctx.ui.notify(\"Usage: /mcp logout <server>\", \"error\");\n return;\n }\n await heavy.commands.logoutServer(serverName, currentState, ctx);\n break;\n }\n case \"status\":\n case \"\":\n default:\n if (ctx.hasUI) {\n const result = await heavy.commands.openMcpPanel(currentState, pi, ctx, earlyConfigPath);\n if (result?.configChanged) {\n await ctx.reload();\n return;\n }\n } else {\n await heavy.commands.showStatus(currentState, ctx);\n }\n break;\n }\n },\n });\n\n pi.registerCommand(\"mcp-auth\", {\n description: \"Authenticate with an MCP server (OAuth)\",\n handler: async (args, ctx) => {\n const serverName = args?.trim();\n if (!serverName && !ctx.hasUI) {\n return;\n }\n\n let currentState: McpExtensionState;\n try {\n currentState = await ensureState(pi, ctx);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n if (ctx.hasUI) ctx.ui.notify(`MCP initialization failed: ${message}`, \"error\");\n return;\n }\n\n const heavy = await loadHeavyModules();\n assertCurrentState(currentState);\n\n if (!serverName) {\n await heavy.commands.openMcpAuthPanel(currentState, pi, ctx, earlyConfigPath);\n return;\n }\n\n await heavy.commands.authenticateServer(serverName, currentState.config, ctx, currentState.authFlow);\n },\n });\n\n function registerProxyTool(config: McpConfig, cache: MetadataCache | null, specs: DirectToolSpec[]) {\n (pi.registerTool as (tool: unknown) => unknown)({\n name: \"mcp\",\n label: \"MCP\",\n description: buildProxyDescription(config, cache, specs),\n promptSnippet: \"MCP gateway - connect to MCP servers and call their tools\",\n renderCall: renderMcpProxyToolCall,\n parameters: Type.Object({\n tool: Type.Optional(Type.String({ description: \"Tool name to call (e.g., 'xcodebuild_list_sims')\" })),\n args: Type.Optional(Type.String({ description: \"Arguments as JSON string (e.g., '{\\\"key\\\": \\\"value\\\"}')\" })),\n connect: Type.Optional(Type.String({ description: \"Server name to connect (lazy connect + metadata refresh)\" })),\n describe: Type.Optional(Type.String({ description: \"Tool name to describe (shows parameters)\" })),\n search: Type.Optional(Type.String({ description: \"Search tools by name/description\" })),\n regex: Type.Optional(Type.Boolean({ description: \"Treat search as regex (default: substring match)\" })),\n includeSchemas: Type.Optional(Type.Boolean({ description: \"Include parameter schemas in search results (default: true)\" })),\n server: Type.Optional(Type.String({ description: \"Filter to specific server (also disambiguates tool calls)\" })),\n action: Type.Optional(Type.String({ description: \"Action: 'ui-messages', 'auth-start', or 'auth-complete'\" })),\n }),\n renderResult: renderMcpToolResult,\n async execute(_toolCallId, params: {\n tool?: string;\n args?: string;\n connect?: string;\n describe?: string;\n search?: string;\n regex?: boolean;\n includeSchemas?: boolean;\n server?: string;\n action?: string;\n }, incomingSignal, _onUpdate, ctx) {\n const signal = incomingSignal ? AbortSignal.any([incomingSignal, sessionAbort.signal]) : sessionAbort.signal;\n let parsedArgs: Record<string, unknown> | undefined;\n if (params.args) {\n try {\n parsedArgs = JSON.parse(params.args);\n if (typeof parsedArgs !== \"object\" || parsedArgs === null || Array.isArray(parsedArgs)) {\n const gotType = Array.isArray(parsedArgs) ? \"array\" : parsedArgs === null ? \"null\" : typeof parsedArgs;\n throw new Error(`Invalid args: expected a JSON object, got ${gotType}`);\n }\n } catch (error) {\n if (error instanceof SyntaxError) {\n throw new Error(`Invalid args JSON: ${error.message}`, { cause: error });\n }\n throw error;\n }\n }\n\n let currentState: McpExtensionState;\n try {\n currentState = await ensureState(pi, ctx, signal);\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 const heavy = await loadHeavyModules();\n throwIfAborted(signal);\n assertCurrentState(currentState);\n\n if (params.action === \"ui-messages\") {\n return heavy.proxyModes.executeUiMessages(currentState);\n }\n if (params.action === \"auth-start\") {\n if (!params.server) {\n return {\n content: [{ type: \"text\" as const, text: \"auth-start requires `server`. Example: mcp({ action: \\\"auth-start\\\", server: \\\"linear-server\\\" })\" }],\n details: { mode: \"auth-start\", error: \"missing_server\" },\n };\n }\n return heavy.proxyModes.executeAuthStart(currentState, params.server);\n }\n if (params.action === \"auth-complete\") {\n if (!params.server) {\n return {\n content: [{ type: \"text\" as const, text: \"auth-complete requires `server`.\" }],\n details: { mode: \"auth-complete\", error: \"missing_server\" },\n };\n }\n const input = parsedArgs?.redirectUrl ?? parsedArgs?.code ?? parsedArgs?.input;\n if (typeof input !== \"string\" || input.trim().length === 0) {\n return {\n content: [{ type: \"text\" as const, text: \"auth-complete requires args with `redirectUrl`, `code`, or `input`.\" }],\n details: { mode: \"auth-complete\", error: \"missing_input\" },\n };\n }\n return heavy.proxyModes.executeAuthComplete(currentState, params.server, input);\n }\n if (params.tool) {\n return heavy.proxyModes.executeCall(currentState, params.tool, parsedArgs, params.server, getPiTools, signal);\n }\n if (params.connect) {\n return heavy.proxyModes.executeConnect(currentState, params.connect, signal);\n }\n if (params.describe) {\n return heavy.proxyModes.executeDescribe(currentState, params.describe);\n }\n if (params.search) {\n return heavy.proxyModes.executeSearch(currentState, params.search, params.regex, params.server, params.includeSchemas);\n }\n if (params.server) {\n return heavy.proxyModes.executeList(currentState, params.server);\n }\n return heavy.proxyModes.executeStatus(currentState);\n },\n });\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/builtin-extensions/pi-mcp-adapter/init.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACtF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AA2BpD,wBAAgB,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,gBAAgB,EAAE,OAAO,GAAG,MAAM,CAAC,GAAG,OAAO,CAEhF;AAED,wBAAsB,aAAa,CACjC,EAAE,EAAE,YAAY,EAChB,GAAG,EAAE,gBAAgB,EACrB,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,WAAW,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAA;CAAO,GACnF,OAAO,CAAC,iBAAiB,CAAC,CAqM5B;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAWvF;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CA+BtF;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAMjE;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAU9D;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAMhG;AAED,wBAAsB,WAAW,CAAC,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAuCtH","sourcesContent":["// @ts-nocheck\nimport type { ExtensionAPI, ExtensionContext } from \"@ashx-j/lunr\";\nimport type { McpExtensionState } from \"./state.ts\";\nimport type { ToolMetadata } from \"./types.ts\";\nimport { existsSync } from \"node:fs\";\nimport { loadMcpConfig } from \"./config.ts\";\nimport { ConsentManager } from \"./consent-manager.ts\";\nimport { McpLifecycleManager } from \"./lifecycle.ts\";\nimport {\n computeServerHash,\n getMetadataCachePath,\n isServerCacheValid,\n loadMetadataCache,\n reconstructToolMetadata,\n saveMetadataCache,\n serializeResources,\n serializeTools,\n type ServerCacheEntry,\n} from \"./metadata-cache.ts\";\nimport { McpServerManager } from \"./server-manager.ts\";\nimport { buildToolMetadata, totalToolCount } from \"./tool-metadata.ts\";\nimport { UiResourceHandler } from \"./ui-resource-handler.ts\";\nimport { openUrl, parallelLimit } from \"./utils.ts\";\nimport { logger } from \"./logger.ts\";\nimport { getMissingConfiguredDirectToolServers } from \"./direct-tools.ts\";\nimport { throwIfAborted } from \"./abort.ts\";\n\nconst FAILURE_BACKOFF_MS = 60 * 1000;\n\nexport function isTuiMode(ctx: Pick<ExtensionContext, \"hasUI\" | \"mode\">): boolean {\n return ctx.hasUI && ctx.mode === \"tui\";\n}\n\nexport async function initializeMcp(\n pi: ExtensionAPI,\n ctx: ExtensionContext,\n options: { signal?: AbortSignal; onState?: (state: McpExtensionState) => void } = {},\n): Promise<McpExtensionState> {\n const signal = options.signal ?? ctx.signal;\n throwIfAborted(signal);\n const configPath = pi.getFlag(\"mcp-config\") as string | undefined;\n const config = loadMcpConfig(configPath, ctx.cwd);\n\n const manager = new McpServerManager(ctx.cwd);\n manager.setDefaultRequestTimeoutMs(config.settings?.requestTimeoutMs);\n const samplingAutoApprove = config.settings?.samplingAutoApprove === true;\n if (config.settings?.sampling !== false && (ctx.hasUI || samplingAutoApprove)) {\n manager.setSamplingConfig({\n autoApprove: samplingAutoApprove,\n ui: ctx.hasUI ? ctx.ui : undefined,\n modelRegistry: ctx.modelRegistry,\n getCurrentModel: () => ctx.model,\n getSignal: () => ctx.signal,\n });\n }\n const elicitationEnabled = config.settings?.elicitation !== false && ctx.hasUI;\n if (elicitationEnabled) {\n manager.setElicitationConfig({\n ui: ctx.ui,\n allowUrl: isTuiMode(ctx),\n });\n }\n const lifecycle = new McpLifecycleManager(manager);\n const toolMetadata = new Map<string, ToolMetadata[]>();\n const failureTracker = new Map<string, number>();\n const uiResourceHandler = new UiResourceHandler(manager);\n const consentManager = new ConsentManager(\"once-per-server\");\n const ui = ctx.hasUI ? ctx.ui : undefined;\n const state: McpExtensionState = {\n manager,\n lifecycle,\n toolMetadata,\n config,\n failureTracker,\n uiResourceHandler,\n consentManager,\n uiServer: null,\n completedUiSessions: [],\n openBrowser: (url: string) => openUrl(pi, url, process.env.BROWSER),\n ui,\n sendMessage: (message, options) => pi.sendMessage(message as unknown as Parameters<typeof pi.sendMessage>[0], options),\n };\n\n options.onState?.(state);\n const serverEntries = Object.entries(config.mcpServers);\n if (serverEntries.length === 0) {\n return state;\n }\n\n const idleSetting = typeof config.settings?.idleTimeout === \"number\" ? config.settings.idleTimeout : 10;\n lifecycle.setGlobalIdleTimeout(idleSetting);\n\n const cachePath = getMetadataCachePath();\n const cacheFileExists = existsSync(cachePath);\n let cache = loadMetadataCache();\n let bootstrapAll = false;\n\n if (!cacheFileExists) {\n bootstrapAll = true;\n saveMetadataCache({ version: 1, servers: {} });\n } else if (!cache) {\n cache = { version: 1, servers: {} };\n saveMetadataCache(cache);\n }\n\n const prefix = config.settings?.toolPrefix ?? \"server\";\n\n for (const [name, definition] of serverEntries) {\n const lifecycleMode = definition.lifecycle ?? \"lazy\";\n const idleOverride = definition.idleTimeout ?? (lifecycleMode === \"eager\" ? 0 : undefined);\n lifecycle.registerServer(\n name,\n definition,\n idleOverride !== undefined ? { idleTimeout: idleOverride } : undefined\n );\n if (lifecycleMode === \"keep-alive\") {\n lifecycle.markKeepAlive(name, definition);\n }\n\n if (cache?.servers?.[name] && isServerCacheValid(cache.servers[name], definition)) {\n const metadata = reconstructToolMetadata(name, cache.servers[name], prefix, definition);\n toolMetadata.set(name, metadata);\n }\n }\n\n const startupServers = bootstrapAll\n ? serverEntries\n : serverEntries.filter(([, definition]) => {\n const mode = definition.lifecycle ?? \"lazy\";\n return mode === \"keep-alive\" || mode === \"eager\";\n });\n\n if (ctx.hasUI && startupServers.length > 0) {\n ctx.ui.setStatus(\"mcp\", `MCP: connecting to ${startupServers.length} servers...`);\n }\n\n const results = await parallelLimit(startupServers, 10, async ([name, definition]) => {\n try {\n throwIfAborted(signal);\n const connection = await manager.connect(name, definition, signal);\n if (connection.status === \"needs-auth\") {\n return { name, definition, connection: null, error: `OAuth authentication required. Run /mcp-auth ${name}.` };\n }\n return { name, definition, connection, error: null };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return { name, definition, connection: null, error: message };\n }\n });\n\n throwIfAborted(signal);\n for (const { name, definition, connection, error } of results) {\n if (error || !connection) {\n if (ctx.hasUI) {\n ctx.ui.notify(`MCP: Failed to connect to ${name}: ${error}`, \"error\");\n }\n console.error(`MCP: Failed to connect to ${name}: ${error}`);\n continue;\n }\n\n const { metadata, failedTools } = buildToolMetadata(connection.tools, connection.resources, definition, name, prefix);\n toolMetadata.set(name, metadata);\n updateMetadataCache(state, name);\n\n if (failedTools.length > 0 && ctx.hasUI) {\n ctx.ui.notify(\n `MCP: ${name} - ${failedTools.length} tools skipped`,\n \"warning\"\n );\n }\n }\n\n const connectedCount = results.filter(r => r.connection).length;\n const failedCount = results.filter(r => r.error).length;\n if (ctx.hasUI && connectedCount > 0) {\n const totalTools = totalToolCount(state);\n const msg = failedCount > 0\n ? `MCP: ${connectedCount}/${startupServers.length} servers connected (${totalTools} tools)`\n : `MCP: ${connectedCount} servers connected (${totalTools} tools)`;\n ctx.ui.notify(msg, \"info\");\n }\n\n const envDirect = process.env.MCP_DIRECT_TOOLS;\n if (envDirect !== \"__none__\") {\n const currentCache = loadMetadataCache();\n const missingCacheServers = getMissingConfiguredDirectToolServers(config, currentCache);\n\n if (missingCacheServers.length > 0) {\n const bootstrapResults = await parallelLimit(\n missingCacheServers.filter(name => !results.some(r => r.name === name && r.connection)),\n 10,\n async (name) => {\n const definition = config.mcpServers[name];\n try {\n throwIfAborted(signal);\n const connection = await manager.connect(name, definition, signal);\n if (connection.status === \"needs-auth\") {\n return { name, ok: false };\n }\n const { metadata } = buildToolMetadata(connection.tools, connection.resources, definition, name, prefix);\n toolMetadata.set(name, metadata);\n updateMetadataCache(state, name);\n return { name, ok: true };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n logger.debug(`MCP: direct-tools bootstrap failed for ${name}: ${message}`);\n return { name, ok: false };\n }\n },\n );\n throwIfAborted(signal);\n const bootstrapped = bootstrapResults.filter(r => r.ok).map(r => r.name);\n if (bootstrapped.length > 0 && ctx.hasUI) {\n ctx.ui.notify(`MCP: direct tools for ${bootstrapped.join(\", \")} will be available after restart`, \"info\");\n }\n }\n }\n\n lifecycle.setReconnectCallback((serverName) => {\n updateServerMetadata(state, serverName);\n updateMetadataCache(state, serverName);\n state.failureTracker.delete(serverName);\n updateStatusBar(state);\n });\n\n lifecycle.setIdleShutdownCallback((serverName) => {\n const idleMinutes = getEffectiveIdleTimeoutMinutes(state, serverName);\n logger.debug(`${serverName} shut down (idle ${idleMinutes}m)`);\n updateStatusBar(state);\n });\n\n lifecycle.startHealthChecks();\n\n return state;\n}\n\nexport function updateServerMetadata(state: McpExtensionState, serverName: string): void {\n const connection = state.manager.getConnection(serverName);\n if (!connection || connection.status !== \"connected\") return;\n\n const definition = state.config.mcpServers[serverName];\n if (!definition) return;\n\n const prefix = state.config.settings?.toolPrefix ?? \"server\";\n\n const { metadata } = buildToolMetadata(connection.tools, connection.resources, definition, serverName, prefix);\n state.toolMetadata.set(serverName, metadata);\n}\n\nexport function updateMetadataCache(state: McpExtensionState, serverName: string): void {\n const connection = state.manager.getConnection(serverName);\n if (!connection || connection.status !== \"connected\") return;\n\n const definition = state.config.mcpServers[serverName];\n if (!definition) return;\n\n const configHash = computeServerHash(definition);\n const existing = loadMetadataCache();\n const existingEntry = existing?.servers?.[serverName];\n\n const tools = serializeTools(connection.tools);\n let resources = definition.exposeResources === false ? [] : serializeResources(connection.resources);\n\n if (\n definition.exposeResources !== false &&\n resources.length === 0 &&\n existingEntry?.resources?.length &&\n existingEntry.configHash === configHash\n ) {\n resources = existingEntry.resources;\n }\n\n const entry: ServerCacheEntry = {\n configHash,\n tools,\n resources,\n cachedAt: Date.now(),\n };\n\n saveMetadataCache({ version: 1, servers: { [serverName]: entry } });\n}\n\nexport function flushMetadataCache(state: McpExtensionState): void {\n for (const [name, connection] of state.manager.getAllConnections()) {\n if (connection.status === \"connected\") {\n updateMetadataCache(state, name);\n }\n }\n}\n\nexport function updateStatusBar(state: McpExtensionState): void {\n const ui = state.ui;\n if (!ui) return;\n const total = Object.keys(state.config.mcpServers).length;\n if (total === 0) {\n ui.setStatus(\"mcp\", undefined);\n return;\n }\n const connectedCount = state.manager.getAllConnections().size;\n ui.setStatus(\"mcp\", ui.theme.fg(\"accent\", `MCP: ${connectedCount}/${total} servers`));\n}\n\nexport function getFailureAgeSeconds(state: McpExtensionState, serverName: string): number | null {\n const failedAt = state.failureTracker.get(serverName);\n if (!failedAt) return null;\n const ageMs = Date.now() - failedAt;\n if (ageMs > FAILURE_BACKOFF_MS) return null;\n return Math.round(ageMs / 1000);\n}\n\nexport async function lazyConnect(state: McpExtensionState, serverName: string, signal?: AbortSignal): Promise<boolean> {\n const connection = state.manager.getConnection(serverName);\n if (connection?.status === \"needs-auth\") {\n return false;\n }\n if (connection?.status === \"connected\") {\n updateServerMetadata(state, serverName);\n return true;\n }\n\n const failedAgo = getFailureAgeSeconds(state, serverName);\n if (failedAgo !== null) return false;\n\n const definition = state.config.mcpServers[serverName];\n if (!definition) return false;\n\n try {\n if (state.ui) {\n state.ui.setStatus(\"mcp\", `MCP: connecting to ${serverName}...`);\n }\n const newConnection = await state.manager.connect(serverName, definition, signal);\n if (newConnection.status === \"needs-auth\") {\n return false;\n }\n state.failureTracker.delete(serverName);\n updateServerMetadata(state, serverName);\n updateMetadataCache(state, serverName);\n updateStatusBar(state);\n return true;\n } catch (error) {\n if (signal?.aborted) {\n throwIfAborted(signal);\n }\n state.failureTracker.set(serverName, Date.now());\n const message = error instanceof Error ? error.message : String(error);\n logger.debug(`MCP: lazy connect failed for ${serverName}: ${message}`);\n updateStatusBar(state);\n return false;\n }\n}\n\nfunction getEffectiveIdleTimeoutMinutes(state: McpExtensionState, serverName: string): number {\n const definition = state.config.mcpServers[serverName];\n if (!definition) {\n return typeof state.config.settings?.idleTimeout === \"number\" ? state.config.settings.idleTimeout : 10;\n }\n if (typeof definition.idleTimeout === \"number\") return definition.idleTimeout;\n const mode = definition.lifecycle ?? \"lazy\";\n if (mode === \"eager\") return 0;\n return typeof state.config.settings?.idleTimeout === \"number\" ? state.config.settings.idleTimeout : 10;\n}\n"]}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/builtin-extensions/pi-mcp-adapter/init.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAEtF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AA2BpD,wBAAgB,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,gBAAgB,EAAE,OAAO,GAAG,MAAM,CAAC,GAAG,OAAO,CAEhF;AAED,wBAAsB,aAAa,CACjC,EAAE,EAAE,YAAY,EAChB,GAAG,EAAE,gBAAgB,EACrB,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,WAAW,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAA;CAAO,GACnF,OAAO,CAAC,iBAAiB,CAAC,CAsM5B;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAWvF;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CA+BtF;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAMjE;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAU9D;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAMhG;AAED,wBAAsB,WAAW,CAAC,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAuCtH","sourcesContent":["// @ts-nocheck\nimport type { ExtensionAPI, ExtensionContext } from \"@ashx-j/lunr\";\nimport { createMcpAuthFlow } from \"./mcp-auth-flow.ts\";\nimport type { McpExtensionState } from \"./state.ts\";\nimport type { ToolMetadata } from \"./types.ts\";\nimport { existsSync } from \"node:fs\";\nimport { loadMcpConfig } from \"./config.ts\";\nimport { ConsentManager } from \"./consent-manager.ts\";\nimport { McpLifecycleManager } from \"./lifecycle.ts\";\nimport {\n computeServerHash,\n getMetadataCachePath,\n isServerCacheValid,\n loadMetadataCache,\n reconstructToolMetadata,\n saveMetadataCache,\n serializeResources,\n serializeTools,\n type ServerCacheEntry,\n} from \"./metadata-cache.ts\";\nimport { McpServerManager } from \"./server-manager.ts\";\nimport { buildToolMetadata, totalToolCount } from \"./tool-metadata.ts\";\nimport { UiResourceHandler } from \"./ui-resource-handler.ts\";\nimport { openUrl, parallelLimit } from \"./utils.ts\";\nimport { logger } from \"./logger.ts\";\nimport { getMissingConfiguredDirectToolServers } from \"./direct-tools.ts\";\nimport { throwIfAborted } from \"./abort.ts\";\n\nconst FAILURE_BACKOFF_MS = 60 * 1000;\n\nexport function isTuiMode(ctx: Pick<ExtensionContext, \"hasUI\" | \"mode\">): boolean {\n return ctx.hasUI && ctx.mode === \"tui\";\n}\n\nexport async function initializeMcp(\n pi: ExtensionAPI,\n ctx: ExtensionContext,\n options: { signal?: AbortSignal; onState?: (state: McpExtensionState) => void } = {},\n): Promise<McpExtensionState> {\n const signal = options.signal ?? ctx.signal;\n throwIfAborted(signal);\n const configPath = pi.getFlag(\"mcp-config\") as string | undefined;\n const config = loadMcpConfig(configPath, ctx.cwd, ctx.isProjectTrusted());\n\n const manager = new McpServerManager(ctx.cwd);\n manager.setDefaultRequestTimeoutMs(config.settings?.requestTimeoutMs);\n const samplingAutoApprove = config.settings?.samplingAutoApprove === true;\n if (config.settings?.sampling !== false && (ctx.hasUI || samplingAutoApprove)) {\n manager.setSamplingConfig({\n autoApprove: samplingAutoApprove,\n ui: ctx.hasUI ? ctx.ui : undefined,\n modelRegistry: ctx.modelRegistry,\n getCurrentModel: () => ctx.model,\n getSignal: () => ctx.signal,\n });\n }\n const elicitationEnabled = config.settings?.elicitation !== false && ctx.hasUI;\n if (elicitationEnabled) {\n manager.setElicitationConfig({\n ui: ctx.ui,\n allowUrl: isTuiMode(ctx),\n });\n }\n const lifecycle = new McpLifecycleManager(manager);\n const toolMetadata = new Map<string, ToolMetadata[]>();\n const failureTracker = new Map<string, number>();\n const uiResourceHandler = new UiResourceHandler(manager);\n const consentManager = new ConsentManager(\"once-per-server\");\n const ui = ctx.hasUI ? ctx.ui : undefined;\n const state: McpExtensionState = {\n authFlow: createMcpAuthFlow(),\n manager,\n lifecycle,\n toolMetadata,\n config,\n failureTracker,\n uiResourceHandler,\n consentManager,\n uiServer: null,\n completedUiSessions: [],\n openBrowser: (url: string) => openUrl(pi, url, process.env.BROWSER),\n ui,\n sendMessage: (message, options) => pi.sendMessage(message as unknown as Parameters<typeof pi.sendMessage>[0], options),\n };\n\n options.onState?.(state);\n const serverEntries = Object.entries(config.mcpServers);\n if (serverEntries.length === 0) {\n return state;\n }\n\n const idleSetting = typeof config.settings?.idleTimeout === \"number\" ? config.settings.idleTimeout : 10;\n lifecycle.setGlobalIdleTimeout(idleSetting);\n\n const cachePath = getMetadataCachePath();\n const cacheFileExists = existsSync(cachePath);\n let cache = loadMetadataCache();\n let bootstrapAll = false;\n\n if (!cacheFileExists) {\n bootstrapAll = true;\n saveMetadataCache({ version: 1, servers: {} });\n } else if (!cache) {\n cache = { version: 1, servers: {} };\n saveMetadataCache(cache);\n }\n\n const prefix = config.settings?.toolPrefix ?? \"server\";\n\n for (const [name, definition] of serverEntries) {\n const lifecycleMode = definition.lifecycle ?? \"lazy\";\n const idleOverride = definition.idleTimeout ?? (lifecycleMode === \"eager\" ? 0 : undefined);\n lifecycle.registerServer(\n name,\n definition,\n idleOverride !== undefined ? { idleTimeout: idleOverride } : undefined\n );\n if (lifecycleMode === \"keep-alive\") {\n lifecycle.markKeepAlive(name, definition);\n }\n\n if (cache?.servers?.[name] && isServerCacheValid(cache.servers[name], definition)) {\n const metadata = reconstructToolMetadata(name, cache.servers[name], prefix, definition);\n toolMetadata.set(name, metadata);\n }\n }\n\n const startupServers = bootstrapAll\n ? serverEntries\n : serverEntries.filter(([, definition]) => {\n const mode = definition.lifecycle ?? \"lazy\";\n return mode === \"keep-alive\" || mode === \"eager\";\n });\n\n if (ctx.hasUI && startupServers.length > 0) {\n ctx.ui.setStatus(\"mcp\", `MCP: connecting to ${startupServers.length} servers...`);\n }\n\n const results = await parallelLimit(startupServers, 10, async ([name, definition]) => {\n try {\n throwIfAborted(signal);\n const connection = await manager.connect(name, definition, signal);\n if (connection.status === \"needs-auth\") {\n return { name, definition, connection: null, error: `OAuth authentication required. Run /mcp-auth ${name}.` };\n }\n return { name, definition, connection, error: null };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return { name, definition, connection: null, error: message };\n }\n });\n\n throwIfAborted(signal);\n for (const { name, definition, connection, error } of results) {\n if (error || !connection) {\n if (ctx.hasUI) {\n ctx.ui.notify(`MCP: Failed to connect to ${name}: ${error}`, \"error\");\n }\n console.error(`MCP: Failed to connect to ${name}: ${error}`);\n continue;\n }\n\n const { metadata, failedTools } = buildToolMetadata(connection.tools, connection.resources, definition, name, prefix);\n toolMetadata.set(name, metadata);\n updateMetadataCache(state, name);\n\n if (failedTools.length > 0 && ctx.hasUI) {\n ctx.ui.notify(\n `MCP: ${name} - ${failedTools.length} tools skipped`,\n \"warning\"\n );\n }\n }\n\n const connectedCount = results.filter(r => r.connection).length;\n const failedCount = results.filter(r => r.error).length;\n if (ctx.hasUI && connectedCount > 0) {\n const totalTools = totalToolCount(state);\n const msg = failedCount > 0\n ? `MCP: ${connectedCount}/${startupServers.length} servers connected (${totalTools} tools)`\n : `MCP: ${connectedCount} servers connected (${totalTools} tools)`;\n ctx.ui.notify(msg, \"info\");\n }\n\n const envDirect = process.env.MCP_DIRECT_TOOLS;\n if (envDirect !== \"__none__\") {\n const currentCache = loadMetadataCache();\n const missingCacheServers = getMissingConfiguredDirectToolServers(config, currentCache);\n\n if (missingCacheServers.length > 0) {\n const bootstrapResults = await parallelLimit(\n missingCacheServers.filter(name => !results.some(r => r.name === name && r.connection)),\n 10,\n async (name) => {\n const definition = config.mcpServers[name];\n try {\n throwIfAborted(signal);\n const connection = await manager.connect(name, definition, signal);\n if (connection.status === \"needs-auth\") {\n return { name, ok: false };\n }\n const { metadata } = buildToolMetadata(connection.tools, connection.resources, definition, name, prefix);\n toolMetadata.set(name, metadata);\n updateMetadataCache(state, name);\n return { name, ok: true };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n logger.debug(`MCP: direct-tools bootstrap failed for ${name}: ${message}`);\n return { name, ok: false };\n }\n },\n );\n throwIfAborted(signal);\n const bootstrapped = bootstrapResults.filter(r => r.ok).map(r => r.name);\n if (bootstrapped.length > 0 && ctx.hasUI) {\n ctx.ui.notify(`MCP: direct tools for ${bootstrapped.join(\", \")} will be available after restart`, \"info\");\n }\n }\n }\n\n lifecycle.setReconnectCallback((serverName) => {\n updateServerMetadata(state, serverName);\n updateMetadataCache(state, serverName);\n state.failureTracker.delete(serverName);\n updateStatusBar(state);\n });\n\n lifecycle.setIdleShutdownCallback((serverName) => {\n const idleMinutes = getEffectiveIdleTimeoutMinutes(state, serverName);\n logger.debug(`${serverName} shut down (idle ${idleMinutes}m)`);\n updateStatusBar(state);\n });\n\n lifecycle.startHealthChecks();\n\n return state;\n}\n\nexport function updateServerMetadata(state: McpExtensionState, serverName: string): void {\n const connection = state.manager.getConnection(serverName);\n if (!connection || connection.status !== \"connected\") return;\n\n const definition = state.config.mcpServers[serverName];\n if (!definition) return;\n\n const prefix = state.config.settings?.toolPrefix ?? \"server\";\n\n const { metadata } = buildToolMetadata(connection.tools, connection.resources, definition, serverName, prefix);\n state.toolMetadata.set(serverName, metadata);\n}\n\nexport function updateMetadataCache(state: McpExtensionState, serverName: string): void {\n const connection = state.manager.getConnection(serverName);\n if (!connection || connection.status !== \"connected\") return;\n\n const definition = state.config.mcpServers[serverName];\n if (!definition) return;\n\n const configHash = computeServerHash(definition);\n const existing = loadMetadataCache();\n const existingEntry = existing?.servers?.[serverName];\n\n const tools = serializeTools(connection.tools);\n let resources = definition.exposeResources === false ? [] : serializeResources(connection.resources);\n\n if (\n definition.exposeResources !== false &&\n resources.length === 0 &&\n existingEntry?.resources?.length &&\n existingEntry.configHash === configHash\n ) {\n resources = existingEntry.resources;\n }\n\n const entry: ServerCacheEntry = {\n configHash,\n tools,\n resources,\n cachedAt: Date.now(),\n };\n\n saveMetadataCache({ version: 1, servers: { [serverName]: entry } });\n}\n\nexport function flushMetadataCache(state: McpExtensionState): void {\n for (const [name, connection] of state.manager.getAllConnections()) {\n if (connection.status === \"connected\") {\n updateMetadataCache(state, name);\n }\n }\n}\n\nexport function updateStatusBar(state: McpExtensionState): void {\n const ui = state.ui;\n if (!ui) return;\n const total = Object.keys(state.config.mcpServers).length;\n if (total === 0) {\n ui.setStatus(\"mcp\", undefined);\n return;\n }\n const connectedCount = state.manager.getAllConnections().size;\n ui.setStatus(\"mcp\", ui.theme.fg(\"accent\", `MCP: ${connectedCount}/${total} servers`));\n}\n\nexport function getFailureAgeSeconds(state: McpExtensionState, serverName: string): number | null {\n const failedAt = state.failureTracker.get(serverName);\n if (!failedAt) return null;\n const ageMs = Date.now() - failedAt;\n if (ageMs > FAILURE_BACKOFF_MS) return null;\n return Math.round(ageMs / 1000);\n}\n\nexport async function lazyConnect(state: McpExtensionState, serverName: string, signal?: AbortSignal): Promise<boolean> {\n const connection = state.manager.getConnection(serverName);\n if (connection?.status === \"needs-auth\") {\n return false;\n }\n if (connection?.status === \"connected\") {\n updateServerMetadata(state, serverName);\n return true;\n }\n\n const failedAgo = getFailureAgeSeconds(state, serverName);\n if (failedAgo !== null) return false;\n\n const definition = state.config.mcpServers[serverName];\n if (!definition) return false;\n\n try {\n if (state.ui) {\n state.ui.setStatus(\"mcp\", `MCP: connecting to ${serverName}...`);\n }\n const newConnection = await state.manager.connect(serverName, definition, signal);\n if (newConnection.status === \"needs-auth\") {\n return false;\n }\n state.failureTracker.delete(serverName);\n updateServerMetadata(state, serverName);\n updateMetadataCache(state, serverName);\n updateStatusBar(state);\n return true;\n } catch (error) {\n if (signal?.aborted) {\n throwIfAborted(signal);\n }\n state.failureTracker.set(serverName, Date.now());\n const message = error instanceof Error ? error.message : String(error);\n logger.debug(`MCP: lazy connect failed for ${serverName}: ${message}`);\n updateStatusBar(state);\n return false;\n }\n}\n\nfunction getEffectiveIdleTimeoutMinutes(state: McpExtensionState, serverName: string): number {\n const definition = state.config.mcpServers[serverName];\n if (!definition) {\n return typeof state.config.settings?.idleTimeout === \"number\" ? state.config.settings.idleTimeout : 10;\n }\n if (typeof definition.idleTimeout === \"number\") return definition.idleTimeout;\n const mode = definition.lifecycle ?? \"lazy\";\n if (mode === \"eager\") return 0;\n return typeof state.config.settings?.idleTimeout === \"number\" ? state.config.settings.idleTimeout : 10;\n}\n"]}
@@ -1,3 +1,4 @@
1
+ import { createMcpAuthFlow } from "./mcp-auth-flow.js";
1
2
  import { existsSync } from "node:fs";
2
3
  import { loadMcpConfig } from "./config.js";
3
4
  import { ConsentManager } from "./consent-manager.js";
@@ -18,7 +19,7 @@ export async function initializeMcp(pi, ctx, options = {}) {
18
19
  const signal = options.signal ?? ctx.signal;
19
20
  throwIfAborted(signal);
20
21
  const configPath = pi.getFlag("mcp-config");
21
- const config = loadMcpConfig(configPath, ctx.cwd);
22
+ const config = loadMcpConfig(configPath, ctx.cwd, ctx.isProjectTrusted());
22
23
  const manager = new McpServerManager(ctx.cwd);
23
24
  manager.setDefaultRequestTimeoutMs(config.settings?.requestTimeoutMs);
24
25
  const samplingAutoApprove = config.settings?.samplingAutoApprove === true;
@@ -45,6 +46,7 @@ export async function initializeMcp(pi, ctx, options = {}) {
45
46
  const consentManager = new ConsentManager("once-per-server");
46
47
  const ui = ctx.hasUI ? ctx.ui : undefined;
47
48
  const state = {
49
+ authFlow: createMcpAuthFlow(),
48
50
  manager,
49
51
  lifecycle,
50
52
  toolMetadata,
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/builtin-extensions/pi-mcp-adapter/init.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\nimport type { ExtensionAPI, ExtensionContext } from \"@ashx-j/lunr\";\nimport type { McpExtensionState } from \"./state.ts\";\nimport type { ToolMetadata } from \"./types.ts\";\nimport { existsSync } from \"node:fs\";\nimport { loadMcpConfig } from \"./config.ts\";\nimport { ConsentManager } from \"./consent-manager.ts\";\nimport { McpLifecycleManager } from \"./lifecycle.ts\";\nimport {\n computeServerHash,\n getMetadataCachePath,\n isServerCacheValid,\n loadMetadataCache,\n reconstructToolMetadata,\n saveMetadataCache,\n serializeResources,\n serializeTools,\n type ServerCacheEntry,\n} from \"./metadata-cache.ts\";\nimport { McpServerManager } from \"./server-manager.ts\";\nimport { buildToolMetadata, totalToolCount } from \"./tool-metadata.ts\";\nimport { UiResourceHandler } from \"./ui-resource-handler.ts\";\nimport { openUrl, parallelLimit } from \"./utils.ts\";\nimport { logger } from \"./logger.ts\";\nimport { getMissingConfiguredDirectToolServers } from \"./direct-tools.ts\";\nimport { throwIfAborted } from \"./abort.ts\";\n\nconst FAILURE_BACKOFF_MS = 60 * 1000;\n\nexport function isTuiMode(ctx: Pick<ExtensionContext, \"hasUI\" | \"mode\">): boolean {\n return ctx.hasUI && ctx.mode === \"tui\";\n}\n\nexport async function initializeMcp(\n pi: ExtensionAPI,\n ctx: ExtensionContext,\n options: { signal?: AbortSignal; onState?: (state: McpExtensionState) => void } = {},\n): Promise<McpExtensionState> {\n const signal = options.signal ?? ctx.signal;\n throwIfAborted(signal);\n const configPath = pi.getFlag(\"mcp-config\") as string | undefined;\n const config = loadMcpConfig(configPath, ctx.cwd);\n\n const manager = new McpServerManager(ctx.cwd);\n manager.setDefaultRequestTimeoutMs(config.settings?.requestTimeoutMs);\n const samplingAutoApprove = config.settings?.samplingAutoApprove === true;\n if (config.settings?.sampling !== false && (ctx.hasUI || samplingAutoApprove)) {\n manager.setSamplingConfig({\n autoApprove: samplingAutoApprove,\n ui: ctx.hasUI ? ctx.ui : undefined,\n modelRegistry: ctx.modelRegistry,\n getCurrentModel: () => ctx.model,\n getSignal: () => ctx.signal,\n });\n }\n const elicitationEnabled = config.settings?.elicitation !== false && ctx.hasUI;\n if (elicitationEnabled) {\n manager.setElicitationConfig({\n ui: ctx.ui,\n allowUrl: isTuiMode(ctx),\n });\n }\n const lifecycle = new McpLifecycleManager(manager);\n const toolMetadata = new Map<string, ToolMetadata[]>();\n const failureTracker = new Map<string, number>();\n const uiResourceHandler = new UiResourceHandler(manager);\n const consentManager = new ConsentManager(\"once-per-server\");\n const ui = ctx.hasUI ? ctx.ui : undefined;\n const state: McpExtensionState = {\n manager,\n lifecycle,\n toolMetadata,\n config,\n failureTracker,\n uiResourceHandler,\n consentManager,\n uiServer: null,\n completedUiSessions: [],\n openBrowser: (url: string) => openUrl(pi, url, process.env.BROWSER),\n ui,\n sendMessage: (message, options) => pi.sendMessage(message as unknown as Parameters<typeof pi.sendMessage>[0], options),\n };\n\n options.onState?.(state);\n const serverEntries = Object.entries(config.mcpServers);\n if (serverEntries.length === 0) {\n return state;\n }\n\n const idleSetting = typeof config.settings?.idleTimeout === \"number\" ? config.settings.idleTimeout : 10;\n lifecycle.setGlobalIdleTimeout(idleSetting);\n\n const cachePath = getMetadataCachePath();\n const cacheFileExists = existsSync(cachePath);\n let cache = loadMetadataCache();\n let bootstrapAll = false;\n\n if (!cacheFileExists) {\n bootstrapAll = true;\n saveMetadataCache({ version: 1, servers: {} });\n } else if (!cache) {\n cache = { version: 1, servers: {} };\n saveMetadataCache(cache);\n }\n\n const prefix = config.settings?.toolPrefix ?? \"server\";\n\n for (const [name, definition] of serverEntries) {\n const lifecycleMode = definition.lifecycle ?? \"lazy\";\n const idleOverride = definition.idleTimeout ?? (lifecycleMode === \"eager\" ? 0 : undefined);\n lifecycle.registerServer(\n name,\n definition,\n idleOverride !== undefined ? { idleTimeout: idleOverride } : undefined\n );\n if (lifecycleMode === \"keep-alive\") {\n lifecycle.markKeepAlive(name, definition);\n }\n\n if (cache?.servers?.[name] && isServerCacheValid(cache.servers[name], definition)) {\n const metadata = reconstructToolMetadata(name, cache.servers[name], prefix, definition);\n toolMetadata.set(name, metadata);\n }\n }\n\n const startupServers = bootstrapAll\n ? serverEntries\n : serverEntries.filter(([, definition]) => {\n const mode = definition.lifecycle ?? \"lazy\";\n return mode === \"keep-alive\" || mode === \"eager\";\n });\n\n if (ctx.hasUI && startupServers.length > 0) {\n ctx.ui.setStatus(\"mcp\", `MCP: connecting to ${startupServers.length} servers...`);\n }\n\n const results = await parallelLimit(startupServers, 10, async ([name, definition]) => {\n try {\n throwIfAborted(signal);\n const connection = await manager.connect(name, definition, signal);\n if (connection.status === \"needs-auth\") {\n return { name, definition, connection: null, error: `OAuth authentication required. Run /mcp-auth ${name}.` };\n }\n return { name, definition, connection, error: null };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return { name, definition, connection: null, error: message };\n }\n });\n\n throwIfAborted(signal);\n for (const { name, definition, connection, error } of results) {\n if (error || !connection) {\n if (ctx.hasUI) {\n ctx.ui.notify(`MCP: Failed to connect to ${name}: ${error}`, \"error\");\n }\n console.error(`MCP: Failed to connect to ${name}: ${error}`);\n continue;\n }\n\n const { metadata, failedTools } = buildToolMetadata(connection.tools, connection.resources, definition, name, prefix);\n toolMetadata.set(name, metadata);\n updateMetadataCache(state, name);\n\n if (failedTools.length > 0 && ctx.hasUI) {\n ctx.ui.notify(\n `MCP: ${name} - ${failedTools.length} tools skipped`,\n \"warning\"\n );\n }\n }\n\n const connectedCount = results.filter(r => r.connection).length;\n const failedCount = results.filter(r => r.error).length;\n if (ctx.hasUI && connectedCount > 0) {\n const totalTools = totalToolCount(state);\n const msg = failedCount > 0\n ? `MCP: ${connectedCount}/${startupServers.length} servers connected (${totalTools} tools)`\n : `MCP: ${connectedCount} servers connected (${totalTools} tools)`;\n ctx.ui.notify(msg, \"info\");\n }\n\n const envDirect = process.env.MCP_DIRECT_TOOLS;\n if (envDirect !== \"__none__\") {\n const currentCache = loadMetadataCache();\n const missingCacheServers = getMissingConfiguredDirectToolServers(config, currentCache);\n\n if (missingCacheServers.length > 0) {\n const bootstrapResults = await parallelLimit(\n missingCacheServers.filter(name => !results.some(r => r.name === name && r.connection)),\n 10,\n async (name) => {\n const definition = config.mcpServers[name];\n try {\n throwIfAborted(signal);\n const connection = await manager.connect(name, definition, signal);\n if (connection.status === \"needs-auth\") {\n return { name, ok: false };\n }\n const { metadata } = buildToolMetadata(connection.tools, connection.resources, definition, name, prefix);\n toolMetadata.set(name, metadata);\n updateMetadataCache(state, name);\n return { name, ok: true };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n logger.debug(`MCP: direct-tools bootstrap failed for ${name}: ${message}`);\n return { name, ok: false };\n }\n },\n );\n throwIfAborted(signal);\n const bootstrapped = bootstrapResults.filter(r => r.ok).map(r => r.name);\n if (bootstrapped.length > 0 && ctx.hasUI) {\n ctx.ui.notify(`MCP: direct tools for ${bootstrapped.join(\", \")} will be available after restart`, \"info\");\n }\n }\n }\n\n lifecycle.setReconnectCallback((serverName) => {\n updateServerMetadata(state, serverName);\n updateMetadataCache(state, serverName);\n state.failureTracker.delete(serverName);\n updateStatusBar(state);\n });\n\n lifecycle.setIdleShutdownCallback((serverName) => {\n const idleMinutes = getEffectiveIdleTimeoutMinutes(state, serverName);\n logger.debug(`${serverName} shut down (idle ${idleMinutes}m)`);\n updateStatusBar(state);\n });\n\n lifecycle.startHealthChecks();\n\n return state;\n}\n\nexport function updateServerMetadata(state: McpExtensionState, serverName: string): void {\n const connection = state.manager.getConnection(serverName);\n if (!connection || connection.status !== \"connected\") return;\n\n const definition = state.config.mcpServers[serverName];\n if (!definition) return;\n\n const prefix = state.config.settings?.toolPrefix ?? \"server\";\n\n const { metadata } = buildToolMetadata(connection.tools, connection.resources, definition, serverName, prefix);\n state.toolMetadata.set(serverName, metadata);\n}\n\nexport function updateMetadataCache(state: McpExtensionState, serverName: string): void {\n const connection = state.manager.getConnection(serverName);\n if (!connection || connection.status !== \"connected\") return;\n\n const definition = state.config.mcpServers[serverName];\n if (!definition) return;\n\n const configHash = computeServerHash(definition);\n const existing = loadMetadataCache();\n const existingEntry = existing?.servers?.[serverName];\n\n const tools = serializeTools(connection.tools);\n let resources = definition.exposeResources === false ? [] : serializeResources(connection.resources);\n\n if (\n definition.exposeResources !== false &&\n resources.length === 0 &&\n existingEntry?.resources?.length &&\n existingEntry.configHash === configHash\n ) {\n resources = existingEntry.resources;\n }\n\n const entry: ServerCacheEntry = {\n configHash,\n tools,\n resources,\n cachedAt: Date.now(),\n };\n\n saveMetadataCache({ version: 1, servers: { [serverName]: entry } });\n}\n\nexport function flushMetadataCache(state: McpExtensionState): void {\n for (const [name, connection] of state.manager.getAllConnections()) {\n if (connection.status === \"connected\") {\n updateMetadataCache(state, name);\n }\n }\n}\n\nexport function updateStatusBar(state: McpExtensionState): void {\n const ui = state.ui;\n if (!ui) return;\n const total = Object.keys(state.config.mcpServers).length;\n if (total === 0) {\n ui.setStatus(\"mcp\", undefined);\n return;\n }\n const connectedCount = state.manager.getAllConnections().size;\n ui.setStatus(\"mcp\", ui.theme.fg(\"accent\", `MCP: ${connectedCount}/${total} servers`));\n}\n\nexport function getFailureAgeSeconds(state: McpExtensionState, serverName: string): number | null {\n const failedAt = state.failureTracker.get(serverName);\n if (!failedAt) return null;\n const ageMs = Date.now() - failedAt;\n if (ageMs > FAILURE_BACKOFF_MS) return null;\n return Math.round(ageMs / 1000);\n}\n\nexport async function lazyConnect(state: McpExtensionState, serverName: string, signal?: AbortSignal): Promise<boolean> {\n const connection = state.manager.getConnection(serverName);\n if (connection?.status === \"needs-auth\") {\n return false;\n }\n if (connection?.status === \"connected\") {\n updateServerMetadata(state, serverName);\n return true;\n }\n\n const failedAgo = getFailureAgeSeconds(state, serverName);\n if (failedAgo !== null) return false;\n\n const definition = state.config.mcpServers[serverName];\n if (!definition) return false;\n\n try {\n if (state.ui) {\n state.ui.setStatus(\"mcp\", `MCP: connecting to ${serverName}...`);\n }\n const newConnection = await state.manager.connect(serverName, definition, signal);\n if (newConnection.status === \"needs-auth\") {\n return false;\n }\n state.failureTracker.delete(serverName);\n updateServerMetadata(state, serverName);\n updateMetadataCache(state, serverName);\n updateStatusBar(state);\n return true;\n } catch (error) {\n if (signal?.aborted) {\n throwIfAborted(signal);\n }\n state.failureTracker.set(serverName, Date.now());\n const message = error instanceof Error ? error.message : String(error);\n logger.debug(`MCP: lazy connect failed for ${serverName}: ${message}`);\n updateStatusBar(state);\n return false;\n }\n}\n\nfunction getEffectiveIdleTimeoutMinutes(state: McpExtensionState, serverName: string): number {\n const definition = state.config.mcpServers[serverName];\n if (!definition) {\n return typeof state.config.settings?.idleTimeout === \"number\" ? state.config.settings.idleTimeout : 10;\n }\n if (typeof definition.idleTimeout === \"number\") return definition.idleTimeout;\n const mode = definition.lifecycle ?? \"lazy\";\n if (mode === \"eager\") return 0;\n return typeof state.config.settings?.idleTimeout === \"number\" ? state.config.settings.idleTimeout : 10;\n}\n"]}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/builtin-extensions/pi-mcp-adapter/init.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\nimport type { ExtensionAPI, ExtensionContext } from \"@ashx-j/lunr\";\nimport { createMcpAuthFlow } from \"./mcp-auth-flow.ts\";\nimport type { McpExtensionState } from \"./state.ts\";\nimport type { ToolMetadata } from \"./types.ts\";\nimport { existsSync } from \"node:fs\";\nimport { loadMcpConfig } from \"./config.ts\";\nimport { ConsentManager } from \"./consent-manager.ts\";\nimport { McpLifecycleManager } from \"./lifecycle.ts\";\nimport {\n computeServerHash,\n getMetadataCachePath,\n isServerCacheValid,\n loadMetadataCache,\n reconstructToolMetadata,\n saveMetadataCache,\n serializeResources,\n serializeTools,\n type ServerCacheEntry,\n} from \"./metadata-cache.ts\";\nimport { McpServerManager } from \"./server-manager.ts\";\nimport { buildToolMetadata, totalToolCount } from \"./tool-metadata.ts\";\nimport { UiResourceHandler } from \"./ui-resource-handler.ts\";\nimport { openUrl, parallelLimit } from \"./utils.ts\";\nimport { logger } from \"./logger.ts\";\nimport { getMissingConfiguredDirectToolServers } from \"./direct-tools.ts\";\nimport { throwIfAborted } from \"./abort.ts\";\n\nconst FAILURE_BACKOFF_MS = 60 * 1000;\n\nexport function isTuiMode(ctx: Pick<ExtensionContext, \"hasUI\" | \"mode\">): boolean {\n return ctx.hasUI && ctx.mode === \"tui\";\n}\n\nexport async function initializeMcp(\n pi: ExtensionAPI,\n ctx: ExtensionContext,\n options: { signal?: AbortSignal; onState?: (state: McpExtensionState) => void } = {},\n): Promise<McpExtensionState> {\n const signal = options.signal ?? ctx.signal;\n throwIfAborted(signal);\n const configPath = pi.getFlag(\"mcp-config\") as string | undefined;\n const config = loadMcpConfig(configPath, ctx.cwd, ctx.isProjectTrusted());\n\n const manager = new McpServerManager(ctx.cwd);\n manager.setDefaultRequestTimeoutMs(config.settings?.requestTimeoutMs);\n const samplingAutoApprove = config.settings?.samplingAutoApprove === true;\n if (config.settings?.sampling !== false && (ctx.hasUI || samplingAutoApprove)) {\n manager.setSamplingConfig({\n autoApprove: samplingAutoApprove,\n ui: ctx.hasUI ? ctx.ui : undefined,\n modelRegistry: ctx.modelRegistry,\n getCurrentModel: () => ctx.model,\n getSignal: () => ctx.signal,\n });\n }\n const elicitationEnabled = config.settings?.elicitation !== false && ctx.hasUI;\n if (elicitationEnabled) {\n manager.setElicitationConfig({\n ui: ctx.ui,\n allowUrl: isTuiMode(ctx),\n });\n }\n const lifecycle = new McpLifecycleManager(manager);\n const toolMetadata = new Map<string, ToolMetadata[]>();\n const failureTracker = new Map<string, number>();\n const uiResourceHandler = new UiResourceHandler(manager);\n const consentManager = new ConsentManager(\"once-per-server\");\n const ui = ctx.hasUI ? ctx.ui : undefined;\n const state: McpExtensionState = {\n authFlow: createMcpAuthFlow(),\n manager,\n lifecycle,\n toolMetadata,\n config,\n failureTracker,\n uiResourceHandler,\n consentManager,\n uiServer: null,\n completedUiSessions: [],\n openBrowser: (url: string) => openUrl(pi, url, process.env.BROWSER),\n ui,\n sendMessage: (message, options) => pi.sendMessage(message as unknown as Parameters<typeof pi.sendMessage>[0], options),\n };\n\n options.onState?.(state);\n const serverEntries = Object.entries(config.mcpServers);\n if (serverEntries.length === 0) {\n return state;\n }\n\n const idleSetting = typeof config.settings?.idleTimeout === \"number\" ? config.settings.idleTimeout : 10;\n lifecycle.setGlobalIdleTimeout(idleSetting);\n\n const cachePath = getMetadataCachePath();\n const cacheFileExists = existsSync(cachePath);\n let cache = loadMetadataCache();\n let bootstrapAll = false;\n\n if (!cacheFileExists) {\n bootstrapAll = true;\n saveMetadataCache({ version: 1, servers: {} });\n } else if (!cache) {\n cache = { version: 1, servers: {} };\n saveMetadataCache(cache);\n }\n\n const prefix = config.settings?.toolPrefix ?? \"server\";\n\n for (const [name, definition] of serverEntries) {\n const lifecycleMode = definition.lifecycle ?? \"lazy\";\n const idleOverride = definition.idleTimeout ?? (lifecycleMode === \"eager\" ? 0 : undefined);\n lifecycle.registerServer(\n name,\n definition,\n idleOverride !== undefined ? { idleTimeout: idleOverride } : undefined\n );\n if (lifecycleMode === \"keep-alive\") {\n lifecycle.markKeepAlive(name, definition);\n }\n\n if (cache?.servers?.[name] && isServerCacheValid(cache.servers[name], definition)) {\n const metadata = reconstructToolMetadata(name, cache.servers[name], prefix, definition);\n toolMetadata.set(name, metadata);\n }\n }\n\n const startupServers = bootstrapAll\n ? serverEntries\n : serverEntries.filter(([, definition]) => {\n const mode = definition.lifecycle ?? \"lazy\";\n return mode === \"keep-alive\" || mode === \"eager\";\n });\n\n if (ctx.hasUI && startupServers.length > 0) {\n ctx.ui.setStatus(\"mcp\", `MCP: connecting to ${startupServers.length} servers...`);\n }\n\n const results = await parallelLimit(startupServers, 10, async ([name, definition]) => {\n try {\n throwIfAborted(signal);\n const connection = await manager.connect(name, definition, signal);\n if (connection.status === \"needs-auth\") {\n return { name, definition, connection: null, error: `OAuth authentication required. Run /mcp-auth ${name}.` };\n }\n return { name, definition, connection, error: null };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return { name, definition, connection: null, error: message };\n }\n });\n\n throwIfAborted(signal);\n for (const { name, definition, connection, error } of results) {\n if (error || !connection) {\n if (ctx.hasUI) {\n ctx.ui.notify(`MCP: Failed to connect to ${name}: ${error}`, \"error\");\n }\n console.error(`MCP: Failed to connect to ${name}: ${error}`);\n continue;\n }\n\n const { metadata, failedTools } = buildToolMetadata(connection.tools, connection.resources, definition, name, prefix);\n toolMetadata.set(name, metadata);\n updateMetadataCache(state, name);\n\n if (failedTools.length > 0 && ctx.hasUI) {\n ctx.ui.notify(\n `MCP: ${name} - ${failedTools.length} tools skipped`,\n \"warning\"\n );\n }\n }\n\n const connectedCount = results.filter(r => r.connection).length;\n const failedCount = results.filter(r => r.error).length;\n if (ctx.hasUI && connectedCount > 0) {\n const totalTools = totalToolCount(state);\n const msg = failedCount > 0\n ? `MCP: ${connectedCount}/${startupServers.length} servers connected (${totalTools} tools)`\n : `MCP: ${connectedCount} servers connected (${totalTools} tools)`;\n ctx.ui.notify(msg, \"info\");\n }\n\n const envDirect = process.env.MCP_DIRECT_TOOLS;\n if (envDirect !== \"__none__\") {\n const currentCache = loadMetadataCache();\n const missingCacheServers = getMissingConfiguredDirectToolServers(config, currentCache);\n\n if (missingCacheServers.length > 0) {\n const bootstrapResults = await parallelLimit(\n missingCacheServers.filter(name => !results.some(r => r.name === name && r.connection)),\n 10,\n async (name) => {\n const definition = config.mcpServers[name];\n try {\n throwIfAborted(signal);\n const connection = await manager.connect(name, definition, signal);\n if (connection.status === \"needs-auth\") {\n return { name, ok: false };\n }\n const { metadata } = buildToolMetadata(connection.tools, connection.resources, definition, name, prefix);\n toolMetadata.set(name, metadata);\n updateMetadataCache(state, name);\n return { name, ok: true };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n logger.debug(`MCP: direct-tools bootstrap failed for ${name}: ${message}`);\n return { name, ok: false };\n }\n },\n );\n throwIfAborted(signal);\n const bootstrapped = bootstrapResults.filter(r => r.ok).map(r => r.name);\n if (bootstrapped.length > 0 && ctx.hasUI) {\n ctx.ui.notify(`MCP: direct tools for ${bootstrapped.join(\", \")} will be available after restart`, \"info\");\n }\n }\n }\n\n lifecycle.setReconnectCallback((serverName) => {\n updateServerMetadata(state, serverName);\n updateMetadataCache(state, serverName);\n state.failureTracker.delete(serverName);\n updateStatusBar(state);\n });\n\n lifecycle.setIdleShutdownCallback((serverName) => {\n const idleMinutes = getEffectiveIdleTimeoutMinutes(state, serverName);\n logger.debug(`${serverName} shut down (idle ${idleMinutes}m)`);\n updateStatusBar(state);\n });\n\n lifecycle.startHealthChecks();\n\n return state;\n}\n\nexport function updateServerMetadata(state: McpExtensionState, serverName: string): void {\n const connection = state.manager.getConnection(serverName);\n if (!connection || connection.status !== \"connected\") return;\n\n const definition = state.config.mcpServers[serverName];\n if (!definition) return;\n\n const prefix = state.config.settings?.toolPrefix ?? \"server\";\n\n const { metadata } = buildToolMetadata(connection.tools, connection.resources, definition, serverName, prefix);\n state.toolMetadata.set(serverName, metadata);\n}\n\nexport function updateMetadataCache(state: McpExtensionState, serverName: string): void {\n const connection = state.manager.getConnection(serverName);\n if (!connection || connection.status !== \"connected\") return;\n\n const definition = state.config.mcpServers[serverName];\n if (!definition) return;\n\n const configHash = computeServerHash(definition);\n const existing = loadMetadataCache();\n const existingEntry = existing?.servers?.[serverName];\n\n const tools = serializeTools(connection.tools);\n let resources = definition.exposeResources === false ? [] : serializeResources(connection.resources);\n\n if (\n definition.exposeResources !== false &&\n resources.length === 0 &&\n existingEntry?.resources?.length &&\n existingEntry.configHash === configHash\n ) {\n resources = existingEntry.resources;\n }\n\n const entry: ServerCacheEntry = {\n configHash,\n tools,\n resources,\n cachedAt: Date.now(),\n };\n\n saveMetadataCache({ version: 1, servers: { [serverName]: entry } });\n}\n\nexport function flushMetadataCache(state: McpExtensionState): void {\n for (const [name, connection] of state.manager.getAllConnections()) {\n if (connection.status === \"connected\") {\n updateMetadataCache(state, name);\n }\n }\n}\n\nexport function updateStatusBar(state: McpExtensionState): void {\n const ui = state.ui;\n if (!ui) return;\n const total = Object.keys(state.config.mcpServers).length;\n if (total === 0) {\n ui.setStatus(\"mcp\", undefined);\n return;\n }\n const connectedCount = state.manager.getAllConnections().size;\n ui.setStatus(\"mcp\", ui.theme.fg(\"accent\", `MCP: ${connectedCount}/${total} servers`));\n}\n\nexport function getFailureAgeSeconds(state: McpExtensionState, serverName: string): number | null {\n const failedAt = state.failureTracker.get(serverName);\n if (!failedAt) return null;\n const ageMs = Date.now() - failedAt;\n if (ageMs > FAILURE_BACKOFF_MS) return null;\n return Math.round(ageMs / 1000);\n}\n\nexport async function lazyConnect(state: McpExtensionState, serverName: string, signal?: AbortSignal): Promise<boolean> {\n const connection = state.manager.getConnection(serverName);\n if (connection?.status === \"needs-auth\") {\n return false;\n }\n if (connection?.status === \"connected\") {\n updateServerMetadata(state, serverName);\n return true;\n }\n\n const failedAgo = getFailureAgeSeconds(state, serverName);\n if (failedAgo !== null) return false;\n\n const definition = state.config.mcpServers[serverName];\n if (!definition) return false;\n\n try {\n if (state.ui) {\n state.ui.setStatus(\"mcp\", `MCP: connecting to ${serverName}...`);\n }\n const newConnection = await state.manager.connect(serverName, definition, signal);\n if (newConnection.status === \"needs-auth\") {\n return false;\n }\n state.failureTracker.delete(serverName);\n updateServerMetadata(state, serverName);\n updateMetadataCache(state, serverName);\n updateStatusBar(state);\n return true;\n } catch (error) {\n if (signal?.aborted) {\n throwIfAborted(signal);\n }\n state.failureTracker.set(serverName, Date.now());\n const message = error instanceof Error ? error.message : String(error);\n logger.debug(`MCP: lazy connect failed for ${serverName}: ${message}`);\n updateStatusBar(state);\n return false;\n }\n}\n\nfunction getEffectiveIdleTimeoutMinutes(state: McpExtensionState, serverName: string): number {\n const definition = state.config.mcpServers[serverName];\n if (!definition) {\n return typeof state.config.settings?.idleTimeout === \"number\" ? state.config.settings.idleTimeout : 10;\n }\n if (typeof definition.idleTimeout === \"number\") return definition.idleTimeout;\n const mode = definition.lifecycle ?? \"lazy\";\n if (mode === \"eager\") return 0;\n return typeof state.config.settings?.idleTimeout === \"number\" ? state.config.settings.idleTimeout : 10;\n}\n"]}