@earendil-works/pi-coding-agent 0.87.1 → 0.99.0

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 (721) hide show
  1. package/CHANGELOG.md +79 -0
  2. package/dist/bun/cli.d.ts.map +1 -1
  3. package/dist/bun/restore-sandbox-env.d.ts.map +1 -1
  4. package/dist/bun/restore-sandbox-env.js.map +1 -1
  5. package/dist/bun/runtime-setup.d.ts.map +1 -1
  6. package/dist/bun/runtime-setup.js +4 -1
  7. package/dist/bun/runtime-setup.js.map +1 -1
  8. package/dist/bun/sandbox-env-setup.d.ts.map +1 -1
  9. package/dist/bundle/chunks/anthropic-messages-A6EXUBG6.js +6 -0
  10. package/dist/bundle/chunks/anthropic.js +2 -2
  11. package/dist/bundle/chunks/azure-openai-responses-EN5WOBET.js +2 -0
  12. package/dist/bundle/chunks/bedrock-converse-stream.js +2 -2
  13. package/dist/bundle/chunks/chunk-4CSSZFEW.js +1435 -0
  14. package/dist/bundle/chunks/chunk-7JGR3GZN.js +11 -0
  15. package/dist/bundle/chunks/chunk-AXPY26X7.js +146 -0
  16. package/dist/bundle/chunks/chunk-EPDRUIU6.js +2 -0
  17. package/dist/bundle/chunks/chunk-GOPCREV2.js +4 -0
  18. package/dist/bundle/chunks/chunk-H3QXYIF7.js +31 -0
  19. package/dist/bundle/chunks/{chunk-S7SZN6Z3.js → chunk-HSPCVFST.js} +1 -1
  20. package/dist/bundle/chunks/chunk-IMTXZUO7.js +82 -0
  21. package/dist/bundle/chunks/chunk-J4CWPC4N.js +2 -0
  22. package/dist/bundle/chunks/chunk-LLMKQWZS.js +21 -0
  23. package/dist/bundle/chunks/{chunk-WIUZI2CJ.js → chunk-LRS5S6EK.js} +3 -3
  24. package/dist/bundle/chunks/chunk-PEHWOV5U.js +187 -0
  25. package/dist/bundle/chunks/{chunk-XDUWOHPL.js → chunk-S3GGRYIO.js} +2 -2
  26. package/dist/bundle/chunks/chunk-UTB4DTYQ.js +2 -0
  27. package/dist/bundle/chunks/{chunk-FUXEF6JQ.js → chunk-W2DOMZSC.js} +1 -1
  28. package/dist/bundle/chunks/cli-AZXNGIZH.js +49 -0
  29. package/dist/bundle/chunks/cloudflare-workers-ai-system-one-XJQQYGGU.js +2 -0
  30. package/dist/bundle/chunks/codemode-worker.js +295 -0
  31. package/dist/bundle/chunks/execute-7XXPZAWW.js +308 -0
  32. package/dist/bundle/chunks/github-copilot.js +1 -1
  33. package/dist/bundle/chunks/google-generative-ai-CQAKKJTA.js +2 -0
  34. package/dist/bundle/chunks/google-vertex-AE36YXJU.js +2 -0
  35. package/dist/bundle/chunks/{lib-HGQMNYVT.js → lib-TEDK3E5I.js} +2 -2
  36. package/dist/bundle/chunks/llama-cpp-classify-PJJYKPLD.js +22 -0
  37. package/dist/bundle/chunks/mistral-conversations-KEYTXJM7.js +5 -0
  38. package/dist/bundle/chunks/{openai-codex-responses-QDSOTBBO.js → openai-codex-responses-JQTCOVEG.js} +2 -2
  39. package/dist/bundle/chunks/openai-codex.js +2 -2
  40. package/dist/bundle/chunks/{openai-completions-OBX42CLD.js → openai-completions-XW2Q5HVC.js} +2 -2
  41. package/dist/bundle/chunks/openai-responses-6AXWFL75.js +3 -0
  42. package/dist/bundle/chunks/{openrouter-images-N4XVVFSD.js → openrouter-images-TPQ4V6OR.js} +1 -1
  43. package/dist/bundle/chunks/openrouter.js +2 -2
  44. package/dist/bundle/chunks/{pi-messages-GFKBWJHZ.js → pi-messages-TM5SOOIW.js} +2 -2
  45. package/dist/bundle/chunks/radius.js +2 -2
  46. package/dist/bundle/chunks/runtime-G5WJPRBM.js +2 -0
  47. package/dist/bundle/chunks/typesafe-system-one-E7A4HNJI.js +2 -0
  48. package/dist/bundle/chunks/virtual-modules-AQ3FLU6H.js +2 -0
  49. package/dist/bundle/cli-runtime.js +1 -1
  50. package/dist/bundle/index.js +1 -1
  51. package/dist/bundle/rpc-entry.js +1 -1
  52. package/dist/cli/args.d.ts.map +1 -1
  53. package/dist/cli/args.js +4 -3
  54. package/dist/cli/args.js.map +1 -1
  55. package/dist/cli/auth-check.d.ts.map +1 -1
  56. package/dist/cli/auth-check.js.map +1 -1
  57. package/dist/cli/auth-command.d.ts.map +1 -1
  58. package/dist/cli/auth-command.js.map +1 -1
  59. package/dist/cli/config-selector.d.ts.map +1 -1
  60. package/dist/cli/config-selector.js.map +1 -1
  61. package/dist/cli/credential-print.d.ts.map +1 -1
  62. package/dist/cli/credential-print.js.map +1 -1
  63. package/dist/cli/file-processor.d.ts.map +1 -1
  64. package/dist/cli/file-processor.js.map +1 -1
  65. package/dist/cli/initial-message.d.ts +1 -1
  66. package/dist/cli/initial-message.d.ts.map +1 -1
  67. package/dist/cli/initial-message.js.map +1 -1
  68. package/dist/cli/list-models.d.ts.map +1 -1
  69. package/dist/cli/list-models.js.map +1 -1
  70. package/dist/cli/project-trust.d.ts.map +1 -1
  71. package/dist/cli/project-trust.js.map +1 -1
  72. package/dist/cli/session-picker.d.ts.map +1 -1
  73. package/dist/cli/session-picker.js.map +1 -1
  74. package/dist/cli/setup.d.ts.map +1 -1
  75. package/dist/cli/setup.js.map +1 -1
  76. package/dist/cli/startup-ui.d.ts.map +1 -1
  77. package/dist/cli/startup-ui.js +38 -30
  78. package/dist/cli/startup-ui.js.map +1 -1
  79. package/dist/cli.d.ts.map +1 -1
  80. package/dist/config.d.ts +18 -4
  81. package/dist/config.d.ts.map +1 -1
  82. package/dist/config.js +30 -4
  83. package/dist/config.js.map +1 -1
  84. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  85. package/dist/core/agent-session-runtime.js +1 -1
  86. package/dist/core/agent-session-runtime.js.map +1 -1
  87. package/dist/core/agent-session-services.d.ts.map +1 -1
  88. package/dist/core/agent-session-services.js +13 -0
  89. package/dist/core/agent-session-services.js.map +1 -1
  90. package/dist/core/agent-session.d.ts +135 -11
  91. package/dist/core/agent-session.d.ts.map +1 -1
  92. package/dist/core/agent-session.js +509 -253
  93. package/dist/core/agent-session.js.map +1 -1
  94. package/dist/core/auth-guidance.d.ts.map +1 -1
  95. package/dist/core/auth-guidance.js.map +1 -1
  96. package/dist/core/auth-storage.d.ts.map +1 -1
  97. package/dist/core/auth-storage.js.map +1 -1
  98. package/dist/core/bash-executor.d.ts.map +1 -1
  99. package/dist/core/bash-executor.js.map +1 -1
  100. package/dist/core/bug-report-upload.d.ts.map +1 -1
  101. package/dist/core/bug-report-upload.js.map +1 -1
  102. package/dist/core/bug-report.d.ts +1 -1
  103. package/dist/core/bug-report.d.ts.map +1 -1
  104. package/dist/core/bug-report.js +1 -1
  105. package/dist/core/bug-report.js.map +1 -1
  106. package/dist/core/cache-stats.d.ts.map +1 -1
  107. package/dist/core/cache-stats.js.map +1 -1
  108. package/dist/core/cache-warmer.d.ts.map +1 -1
  109. package/dist/core/cache-warmer.js.map +1 -1
  110. package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
  111. package/dist/core/compaction/branch-summarization.js.map +1 -1
  112. package/dist/core/compaction/compaction.d.ts.map +1 -1
  113. package/dist/core/compaction/compaction.js +1 -22
  114. package/dist/core/compaction/compaction.js.map +1 -1
  115. package/dist/core/compaction/index.d.ts.map +1 -1
  116. package/dist/core/compaction/utils.d.ts +2 -1
  117. package/dist/core/compaction/utils.d.ts.map +1 -1
  118. package/dist/core/compaction/utils.js +25 -18
  119. package/dist/core/compaction/utils.js.map +1 -1
  120. package/dist/core/crash-log.d.ts.map +1 -1
  121. package/dist/core/crash-log.js +2 -1
  122. package/dist/core/crash-log.js.map +1 -1
  123. package/dist/core/defaults.d.ts.map +1 -1
  124. package/dist/core/diagnostics.d.ts.map +1 -1
  125. package/dist/core/event-bus.d.ts.map +1 -1
  126. package/dist/core/event-bus.js.map +1 -1
  127. package/dist/core/exec.d.ts.map +1 -1
  128. package/dist/core/exec.js.map +1 -1
  129. package/dist/core/experimental.d.ts.map +1 -1
  130. package/dist/core/experimental.js.map +1 -1
  131. package/dist/core/export-html/ansi-to-html.d.ts.map +1 -1
  132. package/dist/core/export-html/ansi-to-html.js.map +1 -1
  133. package/dist/core/export-html/index.d.ts.map +1 -1
  134. package/dist/core/export-html/index.js.map +1 -1
  135. package/dist/core/export-html/template.css +10 -0
  136. package/dist/core/export-html/template.js +66 -17
  137. package/dist/core/export-html/tool-renderer.d.ts.map +1 -1
  138. package/dist/core/export-html/tool-renderer.js.map +1 -1
  139. package/dist/core/extensions/index.d.ts +1 -1
  140. package/dist/core/extensions/index.d.ts.map +1 -1
  141. package/dist/core/extensions/index.js.map +1 -1
  142. package/dist/core/extensions/jiti-loader.d.ts.map +1 -1
  143. package/dist/core/extensions/jiti-static-loader.d.ts.map +1 -1
  144. package/dist/core/extensions/loader.d.ts.map +1 -1
  145. package/dist/core/extensions/loader.js +55 -5
  146. package/dist/core/extensions/loader.js.map +1 -1
  147. package/dist/core/extensions/runner.d.ts +18 -1
  148. package/dist/core/extensions/runner.d.ts.map +1 -1
  149. package/dist/core/extensions/runner.js +99 -0
  150. package/dist/core/extensions/runner.js.map +1 -1
  151. package/dist/core/extensions/types.d.ts +296 -22
  152. package/dist/core/extensions/types.d.ts.map +1 -1
  153. package/dist/core/extensions/types.js.map +1 -1
  154. package/dist/core/extensions/virtual-modules.d.ts.map +1 -1
  155. package/dist/core/extensions/wrapper.d.ts +2 -2
  156. package/dist/core/extensions/wrapper.d.ts.map +1 -1
  157. package/dist/core/extensions/wrapper.js +3 -3
  158. package/dist/core/extensions/wrapper.js.map +1 -1
  159. package/dist/core/footer-data-provider.d.ts.map +1 -1
  160. package/dist/core/footer-data-provider.js.map +1 -1
  161. package/dist/core/http-dispatcher.d.ts.map +1 -1
  162. package/dist/core/http-dispatcher.js.map +1 -1
  163. package/dist/core/index.d.ts.map +1 -1
  164. package/dist/core/keybindings.d.ts +1 -1
  165. package/dist/core/keybindings.d.ts.map +1 -1
  166. package/dist/core/keybindings.js +1 -1
  167. package/dist/core/keybindings.js.map +1 -1
  168. package/dist/core/mcp-servers.d.ts +98 -0
  169. package/dist/core/mcp-servers.d.ts.map +1 -0
  170. package/dist/core/mcp-servers.js +157 -0
  171. package/dist/core/mcp-servers.js.map +1 -0
  172. package/dist/core/messages.d.ts.map +1 -1
  173. package/dist/core/messages.js.map +1 -1
  174. package/dist/core/model-config.d.ts.map +1 -1
  175. package/dist/core/model-config.js.map +1 -1
  176. package/dist/core/model-registry.d.ts +13 -1
  177. package/dist/core/model-registry.d.ts.map +1 -1
  178. package/dist/core/model-registry.js +25 -0
  179. package/dist/core/model-registry.js.map +1 -1
  180. package/dist/core/model-resolver.d.ts +2 -2
  181. package/dist/core/model-resolver.d.ts.map +1 -1
  182. package/dist/core/model-resolver.js +4 -4
  183. package/dist/core/model-resolver.js.map +1 -1
  184. package/dist/core/model-runtime.d.ts +41 -3
  185. package/dist/core/model-runtime.d.ts.map +1 -1
  186. package/dist/core/model-runtime.js +167 -17
  187. package/dist/core/model-runtime.js.map +1 -1
  188. package/dist/core/models-store.d.ts.map +1 -1
  189. package/dist/core/models-store.js.map +1 -1
  190. package/dist/core/nested-tool-calls.d.ts +102 -0
  191. package/dist/core/nested-tool-calls.d.ts.map +1 -0
  192. package/dist/core/nested-tool-calls.js +178 -0
  193. package/dist/core/nested-tool-calls.js.map +1 -0
  194. package/dist/core/output-guard.d.ts.map +1 -1
  195. package/dist/core/output-guard.js.map +1 -1
  196. package/dist/core/package-manager.d.ts +4 -0
  197. package/dist/core/package-manager.d.ts.map +1 -1
  198. package/dist/core/package-manager.js +59 -12
  199. package/dist/core/package-manager.js.map +1 -1
  200. package/dist/core/pi-manifest.d.ts.map +1 -1
  201. package/dist/core/pi-manifest.js.map +1 -1
  202. package/dist/core/project-trust.d.ts.map +1 -1
  203. package/dist/core/project-trust.js.map +1 -1
  204. package/dist/core/prompt-templates.d.ts.map +1 -1
  205. package/dist/core/prompt-templates.js.map +1 -1
  206. package/dist/core/provider-attribution.d.ts.map +1 -1
  207. package/dist/core/provider-attribution.js.map +1 -1
  208. package/dist/core/provider-composer.d.ts +40 -21
  209. package/dist/core/provider-composer.d.ts.map +1 -1
  210. package/dist/core/provider-composer.js +92 -40
  211. package/dist/core/provider-composer.js.map +1 -1
  212. package/dist/core/radius.d.ts.map +1 -1
  213. package/dist/core/radius.js.map +1 -1
  214. package/dist/core/remote-catalog-provider.d.ts +8 -1
  215. package/dist/core/remote-catalog-provider.d.ts.map +1 -1
  216. package/dist/core/remote-catalog-provider.js +18 -3
  217. package/dist/core/remote-catalog-provider.js.map +1 -1
  218. package/dist/core/resolve-config-value.d.ts.map +1 -1
  219. package/dist/core/resolve-config-value.js.map +1 -1
  220. package/dist/core/resource-loader.d.ts +7 -1
  221. package/dist/core/resource-loader.d.ts.map +1 -1
  222. package/dist/core/resource-loader.js +161 -35
  223. package/dist/core/resource-loader.js.map +1 -1
  224. package/dist/core/runtime-credentials.d.ts.map +1 -1
  225. package/dist/core/runtime-credentials.js.map +1 -1
  226. package/dist/core/sdk.d.ts +1 -1
  227. package/dist/core/sdk.d.ts.map +1 -1
  228. package/dist/core/sdk.js +24 -6
  229. package/dist/core/sdk.js.map +1 -1
  230. package/dist/core/session-cwd.d.ts.map +1 -1
  231. package/dist/core/session-cwd.js.map +1 -1
  232. package/dist/core/session-export.d.ts.map +1 -1
  233. package/dist/core/session-export.js.map +1 -1
  234. package/dist/core/session-manager.d.ts +9 -0
  235. package/dist/core/session-manager.d.ts.map +1 -1
  236. package/dist/core/session-manager.js +22 -22
  237. package/dist/core/session-manager.js.map +1 -1
  238. package/dist/core/settings-diagnostics.d.ts.map +1 -1
  239. package/dist/core/settings-diagnostics.js.map +1 -1
  240. package/dist/core/settings-manager.d.ts +31 -1
  241. package/dist/core/settings-manager.d.ts.map +1 -1
  242. package/dist/core/settings-manager.js +72 -2
  243. package/dist/core/settings-manager.js.map +1 -1
  244. package/dist/core/skills.d.ts.map +1 -1
  245. package/dist/core/skills.js.map +1 -1
  246. package/dist/core/slash-commands.d.ts.map +1 -1
  247. package/dist/core/source-info.d.ts +8 -0
  248. package/dist/core/source-info.d.ts.map +1 -1
  249. package/dist/core/source-info.js +16 -0
  250. package/dist/core/source-info.js.map +1 -1
  251. package/dist/core/system-prompt.d.ts.map +1 -1
  252. package/dist/core/system-prompt.js +1 -1
  253. package/dist/core/system-prompt.js.map +1 -1
  254. package/dist/core/telemetry.d.ts.map +1 -1
  255. package/dist/core/telemetry.js.map +1 -1
  256. package/dist/core/timings.d.ts.map +1 -1
  257. package/dist/core/timings.js.map +1 -1
  258. package/dist/core/tools/bash.d.ts +12 -0
  259. package/dist/core/tools/bash.d.ts.map +1 -1
  260. package/dist/core/tools/bash.js +35 -2
  261. package/dist/core/tools/bash.js.map +1 -1
  262. package/dist/core/tools/edit-diff.d.ts.map +1 -1
  263. package/dist/core/tools/edit-diff.js.map +1 -1
  264. package/dist/core/tools/edit.d.ts.map +1 -1
  265. package/dist/core/tools/edit.js.map +1 -1
  266. package/dist/core/tools/file-mutation-queue.d.ts.map +1 -1
  267. package/dist/core/tools/file-mutation-queue.js.map +1 -1
  268. package/dist/core/tools/find.d.ts.map +1 -1
  269. package/dist/core/tools/find.js.map +1 -1
  270. package/dist/core/tools/grep.d.ts.map +1 -1
  271. package/dist/core/tools/grep.js.map +1 -1
  272. package/dist/core/tools/index.d.ts.map +1 -1
  273. package/dist/core/tools/index.js.map +1 -1
  274. package/dist/core/tools/ls.d.ts.map +1 -1
  275. package/dist/core/tools/ls.js.map +1 -1
  276. package/dist/core/tools/output-accumulator.d.ts +11 -0
  277. package/dist/core/tools/output-accumulator.d.ts.map +1 -1
  278. package/dist/core/tools/output-accumulator.js +36 -0
  279. package/dist/core/tools/output-accumulator.js.map +1 -1
  280. package/dist/core/tools/path-utils.d.ts.map +1 -1
  281. package/dist/core/tools/path-utils.js.map +1 -1
  282. package/dist/core/tools/powershell.d.ts.map +1 -1
  283. package/dist/core/tools/powershell.js.map +1 -1
  284. package/dist/core/tools/read.d.ts.map +1 -1
  285. package/dist/core/tools/read.js.map +1 -1
  286. package/dist/core/tools/render-utils.d.ts +6 -0
  287. package/dist/core/tools/render-utils.d.ts.map +1 -1
  288. package/dist/core/tools/render-utils.js +26 -0
  289. package/dist/core/tools/render-utils.js.map +1 -1
  290. package/dist/core/tools/renderers/bash.d.ts.map +1 -1
  291. package/dist/core/tools/renderers/bash.js +9 -10
  292. package/dist/core/tools/renderers/bash.js.map +1 -1
  293. package/dist/core/tools/renderers/edit.d.ts.map +1 -1
  294. package/dist/core/tools/renderers/edit.js.map +1 -1
  295. package/dist/core/tools/renderers/find.d.ts.map +1 -1
  296. package/dist/core/tools/renderers/find.js.map +1 -1
  297. package/dist/core/tools/renderers/grep.d.ts.map +1 -1
  298. package/dist/core/tools/renderers/grep.js.map +1 -1
  299. package/dist/core/tools/renderers/index.d.ts.map +1 -1
  300. package/dist/core/tools/renderers/index.js.map +1 -1
  301. package/dist/core/tools/renderers/ls.d.ts.map +1 -1
  302. package/dist/core/tools/renderers/ls.js.map +1 -1
  303. package/dist/core/tools/renderers/read.d.ts.map +1 -1
  304. package/dist/core/tools/renderers/read.js +3 -2
  305. package/dist/core/tools/renderers/read.js.map +1 -1
  306. package/dist/core/tools/renderers/write.d.ts.map +1 -1
  307. package/dist/core/tools/renderers/write.js.map +1 -1
  308. package/dist/core/tools/tool-definition-wrapper.d.ts +5 -3
  309. package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
  310. package/dist/core/tools/tool-definition-wrapper.js +3 -1
  311. package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
  312. package/dist/core/tools/truncate.d.ts +14 -0
  313. package/dist/core/tools/truncate.d.ts.map +1 -1
  314. package/dist/core/tools/truncate.js +29 -0
  315. package/dist/core/tools/truncate.js.map +1 -1
  316. package/dist/core/tools/write.d.ts.map +1 -1
  317. package/dist/core/tools/write.js.map +1 -1
  318. package/dist/core/trust-manager.d.ts.map +1 -1
  319. package/dist/core/trust-manager.js +1 -0
  320. package/dist/core/trust-manager.js.map +1 -1
  321. package/dist/core/usage-totals.d.ts +2 -0
  322. package/dist/core/usage-totals.d.ts.map +1 -1
  323. package/dist/core/usage-totals.js +23 -0
  324. package/dist/core/usage-totals.js.map +1 -1
  325. package/dist/core/virtual-models.d.ts +115 -0
  326. package/dist/core/virtual-models.d.ts.map +1 -0
  327. package/dist/core/virtual-models.js +117 -0
  328. package/dist/core/virtual-models.js.map +1 -0
  329. package/dist/extensions/codemode/execute.d.ts +16 -0
  330. package/dist/extensions/codemode/execute.d.ts.map +1 -0
  331. package/dist/extensions/codemode/execute.js +390 -0
  332. package/dist/extensions/codemode/execute.js.map +1 -0
  333. package/dist/extensions/codemode/execute.lazy.d.ts +3 -0
  334. package/dist/extensions/codemode/execute.lazy.d.ts.map +1 -0
  335. package/dist/extensions/codemode/execute.lazy.js +3 -0
  336. package/dist/extensions/codemode/execute.lazy.js.map +1 -0
  337. package/dist/extensions/codemode/index.d.ts +21 -0
  338. package/dist/extensions/codemode/index.d.ts.map +1 -0
  339. package/dist/extensions/codemode/index.js +31 -0
  340. package/dist/extensions/codemode/index.js.map +1 -0
  341. package/dist/extensions/codemode/renderer.d.ts +12 -0
  342. package/dist/extensions/codemode/renderer.d.ts.map +1 -0
  343. package/dist/extensions/codemode/renderer.js +119 -0
  344. package/dist/extensions/codemode/renderer.js.map +1 -0
  345. package/dist/extensions/codemode/tool.d.ts +122 -0
  346. package/dist/extensions/codemode/tool.d.ts.map +1 -0
  347. package/dist/extensions/codemode/tool.js +324 -0
  348. package/dist/extensions/codemode/tool.js.map +1 -0
  349. package/dist/extensions/codemode/worker.d.ts +7 -0
  350. package/dist/extensions/codemode/worker.d.ts.map +1 -0
  351. package/dist/extensions/codemode/worker.js +7 -0
  352. package/dist/extensions/codemode/worker.js.map +1 -0
  353. package/dist/extensions/index.d.ts.map +1 -1
  354. package/dist/extensions/index.js +11 -1
  355. package/dist/extensions/index.js.map +1 -1
  356. package/dist/extensions/llama/client.d.ts.map +1 -1
  357. package/dist/extensions/llama/client.js.map +1 -1
  358. package/dist/extensions/llama/huggingface.d.ts.map +1 -1
  359. package/dist/extensions/llama/huggingface.js.map +1 -1
  360. package/dist/extensions/llama/index.d.ts.map +1 -1
  361. package/dist/extensions/llama/index.js.map +1 -1
  362. package/dist/extensions/llama/provider.d.ts +1 -1
  363. package/dist/extensions/llama/provider.d.ts.map +1 -1
  364. package/dist/extensions/llama/provider.js +65 -13
  365. package/dist/extensions/llama/provider.js.map +1 -1
  366. package/dist/extensions/llama/ui.d.ts.map +1 -1
  367. package/dist/extensions/llama/ui.js.map +1 -1
  368. package/dist/extensions/mcp/cli.d.ts +21 -0
  369. package/dist/extensions/mcp/cli.d.ts.map +1 -0
  370. package/dist/extensions/mcp/cli.js +485 -0
  371. package/dist/extensions/mcp/cli.js.map +1 -0
  372. package/dist/extensions/mcp/cli.lazy.d.ts +3 -0
  373. package/dist/extensions/mcp/cli.lazy.d.ts.map +1 -0
  374. package/dist/extensions/mcp/cli.lazy.js +3 -0
  375. package/dist/extensions/mcp/cli.lazy.js.map +1 -0
  376. package/dist/extensions/mcp/config.d.ts +70 -0
  377. package/dist/extensions/mcp/config.d.ts.map +1 -0
  378. package/dist/extensions/mcp/config.js +146 -0
  379. package/dist/extensions/mcp/config.js.map +1 -0
  380. package/dist/extensions/mcp/index.d.ts +52 -0
  381. package/dist/extensions/mcp/index.d.ts.map +1 -0
  382. package/dist/extensions/mcp/index.js +902 -0
  383. package/dist/extensions/mcp/index.js.map +1 -0
  384. package/dist/extensions/mcp/log.d.ts +16 -0
  385. package/dist/extensions/mcp/log.d.ts.map +1 -0
  386. package/dist/extensions/mcp/log.js +66 -0
  387. package/dist/extensions/mcp/log.js.map +1 -0
  388. package/dist/extensions/mcp/oauth.d.ts +94 -0
  389. package/dist/extensions/mcp/oauth.d.ts.map +1 -0
  390. package/dist/extensions/mcp/oauth.js +333 -0
  391. package/dist/extensions/mcp/oauth.js.map +1 -0
  392. package/dist/extensions/mcp/resources.d.ts +43 -0
  393. package/dist/extensions/mcp/resources.d.ts.map +1 -0
  394. package/dist/extensions/mcp/resources.js +262 -0
  395. package/dist/extensions/mcp/resources.js.map +1 -0
  396. package/dist/extensions/mcp/runtime.d.ts +96 -0
  397. package/dist/extensions/mcp/runtime.d.ts.map +1 -0
  398. package/dist/extensions/mcp/runtime.js +388 -0
  399. package/dist/extensions/mcp/runtime.js.map +1 -0
  400. package/dist/extensions/mcp/runtime.lazy.d.ts +3 -0
  401. package/dist/extensions/mcp/runtime.lazy.d.ts.map +1 -0
  402. package/dist/extensions/mcp/runtime.lazy.js +3 -0
  403. package/dist/extensions/mcp/runtime.lazy.js.map +1 -0
  404. package/dist/extensions/mcp/tools.d.ts +83 -0
  405. package/dist/extensions/mcp/tools.d.ts.map +1 -0
  406. package/dist/extensions/mcp/tools.js +233 -0
  407. package/dist/extensions/mcp/tools.js.map +1 -0
  408. package/dist/extensions/mcp/ui.d.ts +60 -0
  409. package/dist/extensions/mcp/ui.d.ts.map +1 -0
  410. package/dist/extensions/mcp/ui.js +172 -0
  411. package/dist/extensions/mcp/ui.js.map +1 -0
  412. package/dist/extensions/tool-search/index.d.ts +12 -0
  413. package/dist/extensions/tool-search/index.d.ts.map +1 -0
  414. package/dist/extensions/tool-search/index.js +15 -0
  415. package/dist/extensions/tool-search/index.js.map +1 -0
  416. package/dist/extensions/tool-search/tool.d.ts +72 -0
  417. package/dist/extensions/tool-search/tool.d.ts.map +1 -0
  418. package/dist/extensions/tool-search/tool.js +210 -0
  419. package/dist/extensions/tool-search/tool.js.map +1 -0
  420. package/dist/index.d.ts +9 -2
  421. package/dist/index.d.ts.map +1 -1
  422. package/dist/index.js +5 -0
  423. package/dist/index.js.map +1 -1
  424. package/dist/main.d.ts.map +1 -1
  425. package/dist/main.js +10 -0
  426. package/dist/main.js.map +1 -1
  427. package/dist/migrations.d.ts.map +1 -1
  428. package/dist/migrations.js.map +1 -1
  429. package/dist/modes/index.d.ts.map +1 -1
  430. package/dist/modes/interactive/bug-report.d.ts.map +1 -1
  431. package/dist/modes/interactive/bug-report.js.map +1 -1
  432. package/dist/modes/interactive/chat-viewport.d.ts.map +1 -1
  433. package/dist/modes/interactive/chat-viewport.js.map +1 -1
  434. package/dist/modes/interactive/components/armin.d.ts.map +1 -1
  435. package/dist/modes/interactive/components/armin.js.map +1 -1
  436. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  437. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  438. package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
  439. package/dist/modes/interactive/components/bash-execution.js.map +1 -1
  440. package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -1
  441. package/dist/modes/interactive/components/bordered-loader.js.map +1 -1
  442. package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
  443. package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
  444. package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -1
  445. package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
  446. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
  447. package/dist/modes/interactive/components/config-selector.js +13 -3
  448. package/dist/modes/interactive/components/config-selector.js.map +1 -1
  449. package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -1
  450. package/dist/modes/interactive/components/countdown-timer.js.map +1 -1
  451. package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
  452. package/dist/modes/interactive/components/custom-editor.js.map +1 -1
  453. package/dist/modes/interactive/components/custom-entry.d.ts.map +1 -1
  454. package/dist/modes/interactive/components/custom-entry.js.map +1 -1
  455. package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
  456. package/dist/modes/interactive/components/custom-message.js.map +1 -1
  457. package/dist/modes/interactive/components/daxnuts.d.ts.map +1 -1
  458. package/dist/modes/interactive/components/daxnuts.js.map +1 -1
  459. package/dist/modes/interactive/components/diff.d.ts.map +1 -1
  460. package/dist/modes/interactive/components/diff.js.map +1 -1
  461. package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -1
  462. package/dist/modes/interactive/components/dynamic-border.js.map +1 -1
  463. package/dist/modes/interactive/components/earendil-announcement.d.ts.map +1 -1
  464. package/dist/modes/interactive/components/earendil-announcement.js.map +1 -1
  465. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
  466. package/dist/modes/interactive/components/extension-editor.js.map +1 -1
  467. package/dist/modes/interactive/components/extension-input.d.ts.map +1 -1
  468. package/dist/modes/interactive/components/extension-input.js.map +1 -1
  469. package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -1
  470. package/dist/modes/interactive/components/extension-selector.js.map +1 -1
  471. package/dist/modes/interactive/components/first-time-setup.d.ts +4 -4
  472. package/dist/modes/interactive/components/first-time-setup.d.ts.map +1 -1
  473. package/dist/modes/interactive/components/first-time-setup.js +8 -2
  474. package/dist/modes/interactive/components/first-time-setup.js.map +1 -1
  475. package/dist/modes/interactive/components/footer.d.ts +7 -0
  476. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  477. package/dist/modes/interactive/components/footer.js +43 -3
  478. package/dist/modes/interactive/components/footer.js.map +1 -1
  479. package/dist/modes/interactive/components/index.d.ts.map +1 -1
  480. package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -1
  481. package/dist/modes/interactive/components/keybinding-hints.js.map +1 -1
  482. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  483. package/dist/modes/interactive/components/login-dialog.js.map +1 -1
  484. package/dist/modes/interactive/components/markdown-transform.d.ts.map +1 -1
  485. package/dist/modes/interactive/components/markdown-transform.js.map +1 -1
  486. package/dist/modes/interactive/components/mermaid.d.ts.map +1 -1
  487. package/dist/modes/interactive/components/mermaid.js.map +1 -1
  488. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  489. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  490. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
  491. package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
  492. package/dist/modes/interactive/components/pi-logo.d.ts +12 -0
  493. package/dist/modes/interactive/components/pi-logo.d.ts.map +1 -0
  494. package/dist/modes/interactive/components/pi-logo.js +25 -0
  495. package/dist/modes/interactive/components/pi-logo.js.map +1 -0
  496. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
  497. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
  498. package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -1
  499. package/dist/modes/interactive/components/session-selector-search.js.map +1 -1
  500. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
  501. package/dist/modes/interactive/components/session-selector.js.map +1 -1
  502. package/dist/modes/interactive/components/settings-selector.d.ts +3 -1
  503. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  504. package/dist/modes/interactive/components/settings-selector.js +28 -6
  505. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  506. package/dist/modes/interactive/components/settings-submenu.d.ts.map +1 -1
  507. package/dist/modes/interactive/components/settings-submenu.js.map +1 -1
  508. package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -1
  509. package/dist/modes/interactive/components/show-images-selector.js.map +1 -1
  510. package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
  511. package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
  512. package/dist/modes/interactive/components/status-indicator.d.ts.map +1 -1
  513. package/dist/modes/interactive/components/status-indicator.js.map +1 -1
  514. package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -1
  515. package/dist/modes/interactive/components/theme-selector.js.map +1 -1
  516. package/dist/modes/interactive/components/themed-text.d.ts +17 -0
  517. package/dist/modes/interactive/components/themed-text.d.ts.map +1 -0
  518. package/dist/modes/interactive/components/themed-text.js +29 -0
  519. package/dist/modes/interactive/components/themed-text.js.map +1 -0
  520. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
  521. package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
  522. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  523. package/dist/modes/interactive/components/tool-execution.js +2 -2
  524. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  525. package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
  526. package/dist/modes/interactive/components/tree-selector.js.map +1 -1
  527. package/dist/modes/interactive/components/trust-selector.d.ts.map +1 -1
  528. package/dist/modes/interactive/components/trust-selector.js.map +1 -1
  529. package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -1
  530. package/dist/modes/interactive/components/user-message-selector.js.map +1 -1
  531. package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
  532. package/dist/modes/interactive/components/user-message.js.map +1 -1
  533. package/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -1
  534. package/dist/modes/interactive/components/visual-truncate.js.map +1 -1
  535. package/dist/modes/interactive/external-editor.d.ts.map +1 -1
  536. package/dist/modes/interactive/external-editor.js.map +1 -1
  537. package/dist/modes/interactive/interactive-mode.d.ts +11 -0
  538. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  539. package/dist/modes/interactive/interactive-mode.js +199 -161
  540. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  541. package/dist/modes/interactive/model-catalog-refresh.d.ts.map +1 -1
  542. package/dist/modes/interactive/model-catalog-refresh.js.map +1 -1
  543. package/dist/modes/interactive/model-search.d.ts.map +1 -1
  544. package/dist/modes/interactive/model-search.js.map +1 -1
  545. package/dist/modes/interactive/session-share.d.ts.map +1 -1
  546. package/dist/modes/interactive/session-share.js.map +1 -1
  547. package/dist/modes/interactive/theme/dark.json +59 -72
  548. package/dist/modes/interactive/theme/light.json +57 -69
  549. package/dist/modes/interactive/theme/system-theme.d.ts +54 -0
  550. package/dist/modes/interactive/theme/system-theme.d.ts.map +1 -0
  551. package/dist/modes/interactive/theme/system-theme.js +535 -0
  552. package/dist/modes/interactive/theme/system-theme.js.map +1 -0
  553. package/dist/modes/interactive/theme/theme-controller.d.ts +46 -6
  554. package/dist/modes/interactive/theme/theme-controller.d.ts.map +1 -1
  555. package/dist/modes/interactive/theme/theme-controller.js +127 -47
  556. package/dist/modes/interactive/theme/theme-controller.js.map +1 -1
  557. package/dist/modes/interactive/theme/theme-json.d.ts +1 -0
  558. package/dist/modes/interactive/theme/theme-json.d.ts.map +1 -1
  559. package/dist/modes/interactive/theme/theme-json.js +3 -1
  560. package/dist/modes/interactive/theme/theme-json.js.map +1 -1
  561. package/dist/modes/interactive/theme/theme-schema.json +7 -2
  562. package/dist/modes/interactive/theme/theme.d.ts +66 -39
  563. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  564. package/dist/modes/interactive/theme/theme.js +238 -317
  565. package/dist/modes/interactive/theme/theme.js.map +1 -1
  566. package/dist/modes/interactive/tui-renderer.d.ts +2 -1
  567. package/dist/modes/interactive/tui-renderer.d.ts.map +1 -1
  568. package/dist/modes/interactive/tui-renderer.js +1 -0
  569. package/dist/modes/interactive/tui-renderer.js.map +1 -1
  570. package/dist/modes/json-event.d.ts.map +1 -1
  571. package/dist/modes/json-event.js.map +1 -1
  572. package/dist/modes/print-mode.d.ts.map +1 -1
  573. package/dist/modes/print-mode.js.map +1 -1
  574. package/dist/modes/rpc/jsonl.d.ts.map +1 -1
  575. package/dist/modes/rpc/jsonl.js.map +1 -1
  576. package/dist/modes/rpc/rpc-client.d.ts +6 -6
  577. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  578. package/dist/modes/rpc/rpc-client.js +12 -8
  579. package/dist/modes/rpc/rpc-client.js.map +1 -1
  580. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  581. package/dist/modes/rpc/rpc-mode.js +7 -9
  582. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  583. package/dist/modes/rpc/rpc-types.d.ts +10 -1
  584. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  585. package/dist/modes/rpc/rpc-types.js.map +1 -1
  586. package/dist/package-manager-cli.d.ts.map +1 -1
  587. package/dist/package-manager-cli.js +6 -2
  588. package/dist/package-manager-cli.js.map +1 -1
  589. package/dist/rpc-entry.d.ts.map +1 -1
  590. package/dist/rpc-entry.js.map +1 -1
  591. package/dist/utils/abort.d.ts.map +1 -1
  592. package/dist/utils/abort.js.map +1 -1
  593. package/dist/utils/ansi.d.ts.map +1 -1
  594. package/dist/utils/ansi.js.map +1 -1
  595. package/dist/utils/changelog.d.ts.map +1 -1
  596. package/dist/utils/changelog.js.map +1 -1
  597. package/dist/utils/child-process.d.ts.map +1 -1
  598. package/dist/utils/child-process.js.map +1 -1
  599. package/dist/utils/clipboard-command.d.ts.map +1 -1
  600. package/dist/utils/clipboard-command.js.map +1 -1
  601. package/dist/utils/clipboard-image.d.ts.map +1 -1
  602. package/dist/utils/clipboard-image.js +14 -17
  603. package/dist/utils/clipboard-image.js.map +1 -1
  604. package/dist/utils/clipboard.d.ts +2 -0
  605. package/dist/utils/clipboard.d.ts.map +1 -1
  606. package/dist/utils/clipboard.js +5 -0
  607. package/dist/utils/clipboard.js.map +1 -1
  608. package/dist/utils/deprecation.d.ts.map +1 -1
  609. package/dist/utils/deprecation.js.map +1 -1
  610. package/dist/utils/exif-orientation.d.ts.map +1 -1
  611. package/dist/utils/exif-orientation.js.map +1 -1
  612. package/dist/utils/frontmatter.d.ts.map +1 -1
  613. package/dist/utils/frontmatter.js.map +1 -1
  614. package/dist/utils/fs-watch.d.ts.map +1 -1
  615. package/dist/utils/fs-watch.js.map +1 -1
  616. package/dist/utils/git.d.ts.map +1 -1
  617. package/dist/utils/git.js.map +1 -1
  618. package/dist/utils/html.d.ts.map +1 -1
  619. package/dist/utils/html.js.map +1 -1
  620. package/dist/utils/image-convert.d.ts.map +1 -1
  621. package/dist/utils/image-convert.js.map +1 -1
  622. package/dist/utils/image-process.d.ts.map +1 -1
  623. package/dist/utils/image-process.js.map +1 -1
  624. package/dist/utils/image-resize-core.d.ts.map +1 -1
  625. package/dist/utils/image-resize-core.js.map +1 -1
  626. package/dist/utils/image-resize-worker.d.ts.map +1 -1
  627. package/dist/utils/image-resize-worker.js.map +1 -1
  628. package/dist/utils/image-resize.d.ts.map +1 -1
  629. package/dist/utils/image-resize.js.map +1 -1
  630. package/dist/utils/json.d.ts.map +1 -1
  631. package/dist/utils/json.js.map +1 -1
  632. package/dist/utils/management-http.d.ts.map +1 -1
  633. package/dist/utils/management-http.js.map +1 -1
  634. package/dist/utils/mime.d.ts.map +1 -1
  635. package/dist/utils/mime.js.map +1 -1
  636. package/dist/utils/open-browser.d.ts.map +1 -1
  637. package/dist/utils/open-browser.js.map +1 -1
  638. package/dist/utils/paths.d.ts +3 -3
  639. package/dist/utils/paths.d.ts.map +1 -1
  640. package/dist/utils/paths.js +5 -4
  641. package/dist/utils/paths.js.map +1 -1
  642. package/dist/utils/photon.d.ts.map +1 -1
  643. package/dist/utils/photon.js.map +1 -1
  644. package/dist/utils/pi-user-agent.d.ts.map +1 -1
  645. package/dist/utils/pi-user-agent.js.map +1 -1
  646. package/dist/utils/shell.d.ts +1 -3
  647. package/dist/utils/shell.d.ts.map +1 -1
  648. package/dist/utils/shell.js +3 -30
  649. package/dist/utils/shell.js.map +1 -1
  650. package/dist/utils/sleep.d.ts.map +1 -1
  651. package/dist/utils/sleep.js.map +1 -1
  652. package/dist/utils/syntax-highlight.d.ts.map +1 -1
  653. package/dist/utils/syntax-highlight.js +2 -0
  654. package/dist/utils/syntax-highlight.js.map +1 -1
  655. package/dist/utils/text.d.ts.map +1 -1
  656. package/dist/utils/text.js.map +1 -1
  657. package/dist/utils/tool-result-images.d.ts.map +1 -1
  658. package/dist/utils/tool-result-images.js.map +1 -1
  659. package/dist/utils/tools-manager.d.ts.map +1 -1
  660. package/dist/utils/tools-manager.js.map +1 -1
  661. package/dist/utils/version-check.d.ts.map +1 -1
  662. package/dist/utils/version-check.js.map +1 -1
  663. package/dist/utils/windows-self-update.d.ts.map +1 -1
  664. package/dist/utils/windows-self-update.js.map +1 -1
  665. package/dist/utils/wsl.d.ts.map +1 -1
  666. package/dist/utils/wsl.js.map +1 -1
  667. package/dist/utils/zip.d.ts.map +1 -1
  668. package/dist/utils/zip.js.map +1 -1
  669. package/docs/cli.md +64 -3
  670. package/docs/configuration.md +2 -0
  671. package/docs/custom-provider.md +43 -4
  672. package/docs/docs.json +8 -0
  673. package/docs/extensions.md +55 -0
  674. package/docs/keybindings.md +1 -1
  675. package/docs/llama-cpp.md +13 -0
  676. package/docs/mcp.md +188 -0
  677. package/docs/models.md +35 -0
  678. package/docs/packages.md +4 -2
  679. package/docs/providers.md +1 -0
  680. package/docs/rpc-commands.md +9 -3
  681. package/docs/rpc.md +3 -1
  682. package/docs/sdk.md +7 -2
  683. package/docs/security.md +2 -0
  684. package/docs/session-format.md +5 -1
  685. package/docs/settings.md +20 -3
  686. package/docs/themes.md +33 -7
  687. package/docs/tui.md +18 -0
  688. package/docs/virtual-models.md +114 -0
  689. package/docs/windows.md +2 -0
  690. package/examples/README.md +1 -1
  691. package/examples/extensions/README.md +2 -0
  692. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  693. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  694. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  695. package/examples/extensions/custom-provider-gitlab-duo/test.ts +5 -5
  696. package/examples/extensions/debug-provider.ts +90 -0
  697. package/examples/extensions/gondolin/package-lock.json +2 -2
  698. package/examples/extensions/gondolin/package.json +1 -1
  699. package/examples/extensions/jev-router.ts +113 -0
  700. package/examples/extensions/sandbox/package-lock.json +2 -2
  701. package/examples/extensions/sandbox/package.json +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/rpc-client.ts +1 -1
  705. package/examples/rpc-extension-ui.ts +1 -1
  706. package/examples/sdk/14-codemode-mcp.ts +61 -0
  707. package/examples/sdk/README.md +2 -1
  708. package/npm-shrinkwrap.json +89 -39
  709. package/package.json +14 -12
  710. package/dist/bundle/chunks/anthropic-messages-J5WXPPPC.js +0 -6
  711. package/dist/bundle/chunks/azure-openai-responses-HUSQ3GP2.js +0 -2
  712. package/dist/bundle/chunks/chunk-65HAU2C5.js +0 -2
  713. package/dist/bundle/chunks/chunk-6R7UI4IY.js +0 -2
  714. package/dist/bundle/chunks/chunk-NUHFSC37.js +0 -25
  715. package/dist/bundle/chunks/chunk-OJP47DM6.js +0 -1568
  716. package/dist/bundle/chunks/chunk-RCZIEVGO.js +0 -11
  717. package/dist/bundle/chunks/google-generative-ai-IMS5EK2Y.js +0 -2
  718. package/dist/bundle/chunks/google-vertex-O4YJEQUW.js +0 -2
  719. package/dist/bundle/chunks/mistral-conversations-NOSQHBEY.js +0 -5
  720. package/dist/bundle/chunks/openai-responses-HWEUZ6WZ.js +0 -2
  721. package/dist/bundle/chunks/virtual-modules-VHMJYYWQ.js +0 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/extensions/mcp/index.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Built-in MCP integration.\n *\n * Connects the servers from `mcp.json` and the servers extensions register with\n * `pi.registerMcpServer()` when a session starts, and servers registered later right away. A server\n * in `mcp.json` takes precedence over a registered server of the same name. Tools are registered as\n * `mcp__<server>__<tool>`. By default (`\"exposure\": \"codemode\"`) the tools are only callable from\n * codemode scripts, which keeps large MCP tool lists out of the model's tool declarations; the\n * codemode tool is activated for that unless `autoEnableCodemode` is false. `\"codemode-deferred\"`\n * leaves them out of the codemode description as well. `\"deferred\"` declares them to the model once\n * the `tool_search` tool loads them, and activates `tool_search` instead of codemode.\n * `\"exposure\": \"direct\"` declares them to the model right away, and `\"hidden\"` makes them\n * unreachable. `toolExposure` overrides the exposure of single tools. Servers with resources are\n * reached through Codex's `list_mcp_resources`, `list_mcp_resource_templates`, and\n * `read_mcp_resource` tools (resources.ts).\n *\n * Every call runs through pi's tool pipeline, so `tool_call`/`tool_result` hooks and permission\n * extensions apply to MCP tools the same way they do to built-in tools.\n *\n * Problems found at startup (config errors, failed connections, servers that need a sign-in) are\n * reported once. `/mcp` opens a manager to sign in, reconnect, enable or disable servers, and change\n * their exposure; the last two are saved to the `mcp.json` that defines the server, or apply to the\n * current session for registered servers.\n */\n\nimport { join, resolve } from \"node:path\";\nimport type { SelectItem } from \"@earendil-works/pi-tui\";\nimport type { TSchema } from \"typebox\";\nimport { getAgentDir } from \"../../config.ts\";\nimport type {\n\tExtensionAPI,\n\tExtensionCommandContext,\n\tExtensionContext,\n\tExtensionFactory,\n\tToolDefinition,\n} from \"../../core/extensions/types.ts\";\nimport { openBrowser } from \"../../utils/open-browser.ts\";\nimport { CODEMODE_TOOL_NAME, isCodemodeTool } from \"../codemode/tool.ts\";\nimport { isToolSearchTool, TOOL_SEARCH_TOOL_NAME } from \"../tool-search/tool.ts\";\nimport {\n\tgetMcpToolExposure,\n\ttype LoadedMcpConfig,\n\tloadMcpConfig,\n\ttype McpExposure,\n\ttype McpServerConfigPatch,\n\ttype McpServerEntry,\n\tupdateMcpServerConfig,\n} from \"./config.ts\";\nimport type { McpOAuthCredentialStore, McpSignInPrompt } from \"./oauth.ts\";\nimport { createMcpResourceToolDefinitions } from \"./resources.ts\";\nimport { loadMcpRuntime } from \"./runtime.lazy.ts\";\nimport type * as McpRuntime from \"./runtime.ts\";\nimport type { McpServerConnection, McpServerLog, McpTransportFactory } from \"./runtime.ts\";\nimport { createMcpToolDefinition, createMcpToolName, type McpToolDetails } from \"./tools.ts\";\nimport { type McpMenu, type McpUi, showMcpManager } from \"./ui.ts\";\n\nexport type { McpTransportFactory } from \"./runtime.ts\";\n\nexport interface McpExtensionOptions {\n\t/** Defaults to reading `mcp.json` from the agent directory and the trusted project. */\n\tloadConfig?: (ctx: ExtensionContext) => LoadedMcpConfig;\n\t/** Defaults to stdio and streamable HTTP transports built from the server config. */\n\tcreateTransport?: McpTransportFactory;\n\t/** Defaults to `mcp-auth.json` in the agent directory. */\n\tcredentials?: McpOAuthCredentialStore;\n\t/** File server log messages are appended to. Defaults to `mcp.log` in the agent directory. */\n\tlogPath?: string;\n\t/** Opens the OAuth authorization URL. Defaults to the platform browser. */\n\topenUrl?: (url: string) => void;\n\t/** Saves `/mcp` changes to the server's config file. Defaults to editing its `mcp.json`. */\n\tupdateConfig?: (entry: McpServerEntry, patch: McpServerConfigPatch) => void;\n\t/**\n\t * How long the first prompt waits for servers that are still connecting at startup, in\n\t * milliseconds. Their tools become available when they connect. Default: 10000.\n\t */\n\tstartupWaitMs?: number;\n}\n\nconst DEFAULT_STARTUP_WAIT_MS = 10_000;\n\n/** A configured server. Disabled servers have no connection. */\ninterface McpServer {\n\tentry: McpServerEntry;\n\tconnection?: McpServerConnection;\n\t/** For servers extensions registered: the config as registered, to detect re-registrations. */\n\tregisteredConfig?: string;\n\t/** Result of the last `/mcp` action that failed, shown in the manager. */\n\tmessage?: string;\n}\n\nconst EXPOSURE_DESCRIPTIONS: Record<Exclude<McpExposure, \"hidden\">, string> = {\n\tcodemode: \"called from codemode scripts, listed in the codemode description\",\n\t\"codemode-deferred\": \"called from codemode scripts, not listed; scripts find them with searchTools()\",\n\tdeferred: \"not declared until tool_search loads them, then called directly; no codemode needed\",\n\tdirect: \"declared to the model like built-in tools\",\n};\n\nfunction errorMessage(error: unknown): string {\n\treturn error instanceof Error ? error.message : String(error);\n}\n\nfunction firstLine(text: string): string {\n\treturn text.split(\"\\n\", 1)[0] ?? \"\";\n}\n\nfunction isEnabled(server: McpServer): boolean {\n\treturn server.entry.config.enabled !== false;\n}\n\nfunction exposureOf(entry: McpServerEntry): McpExposure {\n\treturn entry.config.exposure ?? \"codemode\";\n}\n\n/** Short state for lists and the startup report. `withError` appends the first line of a failure. */\nfunction describeState(server: McpServer, withError = true): string {\n\tif (!isEnabled(server)) return \"disabled\";\n\tconst connection = server.connection;\n\tif (!connection) return \"starting\";\n\tswitch (connection.state) {\n\t\tcase \"needs-auth\":\n\t\t\treturn \"needs sign-in\";\n\t\tcase \"failed\":\n\t\t\treturn withError ? `failed: ${firstLine(connection.error ?? \"unknown error\")}` : \"failed\";\n\t\tcase \"connected\": {\n\t\t\tconst { tools, resources } = connection;\n\t\t\tconst count = resources.length;\n\t\t\tconst resourceCount = count > 0 ? ` · ${count} resource${count === 1 ? \"\" : \"s\"}` : \"\";\n\t\t\treturn `connected · ${tools.length} tool${tools.length === 1 ? \"\" : \"s\"}${resourceCount}`;\n\t\t}\n\t\tcase \"connecting\":\n\t\t\treturn \"connecting…\";\n\t\tdefault:\n\t\t\treturn connection.state;\n\t}\n}\n\n/** Servers that need the user first. */\nfunction attentionRank(server: McpServer): number {\n\tif (!isEnabled(server)) return 5;\n\tswitch (server.connection?.state) {\n\t\tcase \"needs-auth\":\n\t\t\treturn 0;\n\t\tcase \"failed\":\n\t\t\treturn 1;\n\t\tcase \"disconnected\":\n\t\t\treturn 2;\n\t\tcase \"connected\":\n\t\t\treturn 4;\n\t\tdefault:\n\t\t\treturn 3;\n\t}\n}\n\nfunction describeTransport(entry: McpServerEntry): string {\n\tconst { config } = entry;\n\tif (\"url\" in config) return config.url;\n\treturn [config.command, ...(config.args ?? [])].join(\" \");\n}\n\nconst MCP_USAGE = \"Usage: /mcp, /mcp login [server], /mcp logout [server], /mcp reconnect [server]\";\n\nexport function createMcpExtension(options: McpExtensionOptions = {}): ExtensionFactory {\n\treturn (pi: ExtensionAPI) => {\n\t\tlet servers: McpServer[] = [];\n\t\t/** Servers from `mcp.json`, which take precedence over registered servers of the same name. */\n\t\tlet configuredEntries: McpServerEntry[] = [];\n\t\tlet configErrors: string[] = [];\n\t\t/** Registered servers that `mcp.json` overrides, shown in `/mcp`. */\n\t\tlet overridden: string[] = [];\n\t\t/** Between session_start and session_shutdown. Registrations before that are read on session_start. */\n\t\tlet sessionActive = false;\n\t\tlet autoEnableCodemode = true;\n\t\t/** Whether the \"codemode tools unreachable\" warning was shown since the session started. */\n\t\tlet warnedUnreachable = false;\n\t\tlet pending: Promise<unknown> | undefined;\n\t\t/** Whether a prompt already waited for the startup connections since the session started. */\n\t\tlet waitedForStartup = false;\n\t\tconst startupWaitMs = options.startupWaitMs ?? DEFAULT_STARTUP_WAIT_MS;\n\t\t/** Bumped on every session start and shutdown so a runtime load that resolves late is dropped. */\n\t\tlet generation = 0;\n\t\t/** Working directory of the session, for stdio servers. */\n\t\tlet sessionCwd = process.cwd();\n\t\tlet credentials = options.credentials;\n\t\tlet serverLog: McpServerLog | undefined;\n\t\tconst openUrl = options.openUrl ?? openBrowser;\n\t\tconst updateConfig =\n\t\t\toptions.updateConfig ?? ((entry, patch) => updateMcpServerConfig(entry.source, entry.name, patch));\n\n\t\tconst listeners = new Set<() => void>();\n\t\tconst emitChange = () => {\n\t\t\tfor (const listener of listeners) listener();\n\t\t};\n\t\tconst subscribe = (listener: () => void) => {\n\t\t\tlisteners.add(listener);\n\t\t\treturn () => {\n\t\t\t\tlisteners.delete(listener);\n\t\t\t};\n\t\t};\n\n\t\tconst connections = () => servers.flatMap((server) => (server.connection ? [server.connection] : []));\n\t\tconst findServer = (name: string) => servers.find((server) => server.entry.name === name);\n\n\t\t/** Servers extensions registered, except names `mcp.json` defines, which take precedence. */\n\t\tconst registeredServers = (): { servers: McpServer[]; overridden: string[] } => {\n\t\t\tconst registered: McpServer[] = [];\n\t\t\tconst overriddenNames: string[] = [];\n\t\t\tfor (const { name, config, extensionPath } of pi.getMcpServers()) {\n\t\t\t\tconst configured = configuredEntries.find((entry) => entry.name === name);\n\t\t\t\tif (configured) {\n\t\t\t\t\toverriddenNames.push(`\"${name}\" registered by ${extensionPath} is overridden by ${configured.source}`);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tregistered.push({\n\t\t\t\t\tentry: { name, config, source: extensionPath, scope: \"extension\" },\n\t\t\t\t\tregisteredConfig: JSON.stringify(config),\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn { servers: registered, overridden: overriddenNames };\n\t\t};\n\n\t\tconst getCredentials = (runtime: typeof McpRuntime): McpOAuthCredentialStore => {\n\t\t\tcredentials ??= new runtime.McpOAuthCredentialStore();\n\t\t\treturn credentials;\n\t\t};\n\n\t\tconst getServerLog = (runtime: typeof McpRuntime): McpServerLog => {\n\t\t\tserverLog ??= new runtime.McpServerLog(options.logPath ?? join(getAgentDir(), \"mcp.log\"));\n\t\t\treturn serverLog;\n\t\t};\n\n\t\t/** pi tool name to the `<server>\\0<tool>` it was assigned to, so names stay unique and stable. */\n\t\tconst toolOwners = new Map<string, string>();\n\t\t/** Tool names currently offered by each server. */\n\t\tconst serverTools = new Map<string, Set<string>>();\n\t\t/** Last definition registered under each tool name, to re-register withdrawn tools as hidden. */\n\t\tconst definitions = new Map<string, ToolDefinition<TSchema, McpToolDetails>>();\n\n\t\tconst registerTools = (connection: McpServerConnection) => {\n\t\t\tconst server = connection.entry.name;\n\t\t\tconst entry = findServer(server)?.entry ?? connection.entry;\n\t\t\tconst namespaceName = `mcp__${server}`;\n\t\t\tconst namespace = {\n\t\t\t\tname: namespaceName,\n\t\t\t\tdescription: connection.instructions ?? `Tools in the ${namespaceName} namespace.`,\n\t\t\t};\n\t\t\tconst previous = serverTools.get(server) ?? new Set<string>();\n\t\t\tconst current = new Set<string>();\n\t\t\tconst assignName = (tool: string, owner: string) => {\n\t\t\t\tconst name = createMcpToolName(server, tool, (candidate) => {\n\t\t\t\t\tconst existing = toolOwners.get(candidate);\n\t\t\t\t\treturn (existing !== undefined && existing !== owner) || current.has(candidate);\n\t\t\t\t});\n\t\t\t\ttoolOwners.set(name, owner);\n\t\t\t\tcurrent.add(name);\n\t\t\t\treturn name;\n\t\t\t};\n\t\t\tfor (const tool of connection.tools) {\n\t\t\t\tconst definition = createMcpToolDefinition({\n\t\t\t\t\tserver,\n\t\t\t\t\ttool,\n\t\t\t\t\tname: assignName(tool.name, `${server}\\0${tool.name}`),\n\t\t\t\t\texposure: getMcpToolExposure(entry.config, tool.name),\n\t\t\t\t\tnamespace,\n\t\t\t\t\ttimeoutMs: connection.timeoutMs,\n\t\t\t\t\tgetClient: async () => connection,\n\t\t\t\t\treadableResources: () => resourceServers().includes(connection),\n\t\t\t\t});\n\t\t\t\tdefinitions.set(definition.name, definition);\n\t\t\t\tpi.registerTool(definition);\n\t\t\t}\n\t\t\tserverTools.set(server, current);\n\t\t\t// Tools cannot be unregistered, so tools the server dropped are re-registered as hidden. When\n\t\t\t// the server offers them again they are registered with their configured exposure above.\n\t\t\tfor (const name of previous) {\n\t\t\t\tconst definition = definitions.get(name);\n\t\t\t\tif (!current.has(name) && definition) pi.registerTool({ ...definition, exposure: \"hidden\" });\n\t\t\t}\n\t\t\tsyncResourceTools();\n\t\t};\n\n\t\t/** Make a disabled server's tools unreachable. */\n\t\tconst hideTools = (server: string) => {\n\t\t\tfor (const name of serverTools.get(server) ?? []) {\n\t\t\t\tconst definition = definitions.get(name);\n\t\t\t\tif (definition) pi.registerTool({ ...definition, exposure: \"hidden\" });\n\t\t\t}\n\t\t\tserverTools.set(server, new Set());\n\t\t\tsyncResourceTools();\n\t\t};\n\n\t\t/** Enabled servers with resources whose exposure is not `hidden`, which the resource tools reach. */\n\t\tconst serversWithResources = (): McpServer[] =>\n\t\t\tservers.filter(\n\t\t\t\t(server) => server.connection?.hasResources && isEnabled(server) && exposureOf(server.entry) !== \"hidden\",\n\t\t\t);\n\t\tconst resourceServers = (): McpServerConnection[] =>\n\t\t\tserversWithResources().flatMap((server) => (server.connection ? [server.connection] : []));\n\n\t\t/** Exposure the resource tools were last registered with; undefined until a server has resources. */\n\t\tlet resourceToolsExposure: McpExposure | undefined;\n\t\t/**\n\t\t * Register the resource tools with the widest exposure of the servers they reach: `direct` when\n\t\t * one of them is direct, and so on. They are hidden when no server has resources.\n\t\t */\n\t\tconst syncResourceTools = () => {\n\t\t\tconst exposures = new Set(serversWithResources().map((server) => exposureOf(server.entry)));\n\t\t\tconst exposure = ([\"direct\", \"codemode\", \"codemode-deferred\", \"deferred\"] as const).find((candidate) =>\n\t\t\t\texposures.has(candidate),\n\t\t\t);\n\t\t\tconst next = exposure ?? \"hidden\";\n\t\t\tif (next === resourceToolsExposure || (resourceToolsExposure === undefined && next === \"hidden\")) return;\n\t\t\tconst wasDirect = resourceToolsExposure === \"direct\";\n\t\t\tresourceToolsExposure = next;\n\t\t\tconst resourceDefinitions = createMcpResourceToolDefinitions({ exposure: next, servers: resourceServers });\n\t\t\tfor (const definition of resourceDefinitions) pi.registerTool(definition);\n\t\t\tif (wasDirect) {\n\t\t\t\tconst names = new Set(resourceDefinitions.map((definition) => definition.name));\n\t\t\t\tpi.setActiveTools(pi.getActiveTools().filter((name) => !names.has(name)));\n\t\t\t}\n\t\t};\n\n\t\t/**\n\t\t * Tools that are not declared to the model are reached through the codemode tool (scripts call\n\t\t * them) or the tool_search tool (it declares them). Either reaches every such tool. Activate the\n\t\t * one the tools' exposure asks for: codemode for `codemode` and `codemode-deferred` unless\n\t\t * `autoEnableCodemode` is false, tool_search for `deferred`.\n\t\t */\n\t\tconst ensureDiscoveryActive = (ctx: ExtensionContext) => {\n\t\t\tconst exposures = new Set<McpExposure>();\n\t\t\tfor (const { connection, entry } of servers) {\n\t\t\t\tif (connection?.state !== \"connected\") continue;\n\t\t\t\t// Resource tools share the server's exposure.\n\t\t\t\tif (connection.hasResources) exposures.add(exposureOf(entry));\n\t\t\t\tfor (const tool of connection.tools) exposures.add(getMcpToolExposure(entry.config, tool.name));\n\t\t\t}\n\t\t\tconst needsCodemode = exposures.has(\"codemode\") || exposures.has(\"codemode-deferred\");\n\t\t\tconst needsToolSearch = exposures.has(\"deferred\");\n\t\t\tif (!needsCodemode && !needsToolSearch) return;\n\t\t\t// Other extensions' tools of the same names cannot reach MCP tools, so never activate them.\n\t\t\tconst tools = pi.getAllTools();\n\t\t\tconst hasCodemode = tools.some(isCodemodeTool);\n\t\t\tconst hasToolSearch = tools.some(isToolSearchTool);\n\t\t\tconst active = pi.getActiveTools();\n\t\t\tconst activate: string[] = [];\n\t\t\tif (needsCodemode && hasCodemode && autoEnableCodemode && !active.includes(CODEMODE_TOOL_NAME)) {\n\t\t\t\tactivate.push(CODEMODE_TOOL_NAME);\n\t\t\t}\n\t\t\tif (needsToolSearch && hasToolSearch && !active.includes(TOOL_SEARCH_TOOL_NAME)) {\n\t\t\t\tactivate.push(TOOL_SEARCH_TOOL_NAME);\n\t\t\t}\n\t\t\tif (activate.length > 0) pi.setActiveTools([...active, ...activate]);\n\t\t\tconst reachable = [...active, ...activate];\n\t\t\tif (hasCodemode && reachable.includes(CODEMODE_TOOL_NAME)) return;\n\t\t\tif (hasToolSearch && reachable.includes(TOOL_SEARCH_TOOL_NAME)) return;\n\t\t\tif (warnedUnreachable) return;\n\t\t\twarnedUnreachable = true;\n\t\t\tconst reason = needsCodemode && hasCodemode && !autoEnableCodemode ? \" (autoEnableCodemode is false)\" : \"\";\n\t\t\tctx.ui.notify(\n\t\t\t\t`MCP tools are only reachable from the codemode or tool_search tool, but neither is active${reason}; they cannot be called.`,\n\t\t\t\t\"warning\",\n\t\t\t);\n\t\t};\n\n\t\t/**\n\t\t * Stored tokens of servers waiting for a sign-in, as they were when the sign-in was needed.\n\t\t * `pi mcp login` in another process (for example run by the agent) changes them.\n\t\t */\n\t\tconst tokensAtSignIn = new Map<McpServerConnection, string>();\n\t\tconst storedTokens = (connection: McpServerConnection): string => {\n\t\t\tconst url = connection.oauthUrl;\n\t\t\treturn url && credentials ? JSON.stringify(credentials.tokens(url) ?? null) : \"null\";\n\t\t};\n\t\tconst onConnectionChange = (connection: McpServerConnection) => {\n\t\t\tif (connection.state !== \"needs-auth\") tokensAtSignIn.delete(connection);\n\t\t\telse if (!tokensAtSignIn.has(connection)) tokensAtSignIn.set(connection, storedTokens(connection));\n\t\t\temitChange();\n\t\t};\n\t\t/** Reconnect servers that need a sign-in when their credentials were stored since. */\n\t\tconst reconnectSignedIn = async (ctx: ExtensionContext) => {\n\t\t\tconst signedIn = [...tokensAtSignIn].filter(([connection, tokens]) => storedTokens(connection) !== tokens);\n\t\t\tif (signedIn.length === 0) return;\n\t\t\tfor (const [connection] of signedIn) tokensAtSignIn.delete(connection);\n\t\t\tawait Promise.allSettled(signedIn.map(([connection]) => connection.reconnect()));\n\t\t\tensureDiscoveryActive(ctx);\n\t\t};\n\n\t\t/** Create the server's connection, loading the MCP runtime on first use. */\n\t\tconst createConnection = async (server: McpServer): Promise<McpServerConnection> => {\n\t\t\tconst runtime = await loadMcpRuntime();\n\t\t\tconst connection = new runtime.McpServerConnection({\n\t\t\t\tentry: server.entry,\n\t\t\t\tcwd: sessionCwd,\n\t\t\t\tcreateTransport: options.createTransport ?? runtime.createDefaultTransport,\n\t\t\t\tcredentials: getCredentials(runtime),\n\t\t\t\tlog: getServerLog(runtime),\n\t\t\t\tonTools: registerTools,\n\t\t\t\tonChange: onConnectionChange,\n\t\t\t});\n\t\t\tserver.connection = connection;\n\t\t\temitChange();\n\t\t\treturn connection;\n\t\t};\n\n\t\t/**\n\t\t * One message for everything that needs the user after startup, or only for `only`, servers\n\t\t * that connected later.\n\t\t */\n\t\tconst reportProblems = (ctx: ExtensionContext, only?: readonly McpServer[]) => {\n\t\t\tconst lines = only ? [] : configErrors.map((error) => `config: ${error}`);\n\t\t\tfor (const server of only ?? servers) {\n\t\t\t\tconst state = server.connection?.state;\n\t\t\t\tif (state === \"needs-auth\" || state === \"failed\")\n\t\t\t\t\tlines.push(`${server.entry.name}: ${describeState(server)}`);\n\t\t\t}\n\t\t\tif (lines.length === 0) return;\n\t\t\tctx.ui.notify(\n\t\t\t\t`MCP servers need attention:\\n${lines.map((line) => ` ${line}`).join(\"\\n\")}\\nRun /mcp to fix.`,\n\t\t\t\t\"warning\",\n\t\t\t);\n\t\t};\n\n\t\t/**\n\t\t * Save a config change; returns an error message when the file could not be updated. Changes to\n\t\t * registered servers only apply to the current session.\n\t\t */\n\t\tconst saveConfig = (server: McpServer, patch: McpServerConfigPatch): string | undefined => {\n\t\t\tif (server.entry.scope !== \"extension\") {\n\t\t\t\ttry {\n\t\t\t\t\tupdateConfig(server.entry, patch);\n\t\t\t\t} catch (error) {\n\t\t\t\t\treturn `Could not update ${server.entry.source}: ${errorMessage(error)}`;\n\t\t\t\t}\n\t\t\t}\n\t\t\tserver.entry = { ...server.entry, config: { ...server.entry.config, ...patch } };\n\t\t\treturn undefined;\n\t\t};\n\n\t\tconst signIn = async (server: McpServer, prompt: McpSignInPrompt): Promise<string | undefined> => {\n\t\t\tconst connection = server.connection;\n\t\t\tconst url = connection?.oauthUrl;\n\t\t\tif (!connection || !url) return `MCP server \"${server.entry.name}\" does not use OAuth.`;\n\t\t\tconst runtime = await loadMcpRuntime();\n\t\t\ttry {\n\t\t\t\tawait runtime.signInMcpServer({\n\t\t\t\t\tserverUrl: url,\n\t\t\t\t\tstore: getCredentials(runtime).forServer(url),\n\t\t\t\t\tsettings: connection.oauthSettings(),\n\t\t\t\t\tchallenge: connection.challenge,\n\t\t\t\t\tprompt,\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\tif (error instanceof runtime.McpSignInCancelledError) return \"Sign-in cancelled.\";\n\t\t\t\treturn `Sign-in failed: ${errorMessage(error)}`;\n\t\t\t}\n\t\t\t// The challenge that asked for this sign-in (for example for more scope) is answered.\n\t\t\tconnection.challenge = undefined;\n\t\t\ttry {\n\t\t\t\tawait connection.reconnect();\n\t\t\t} catch (error) {\n\t\t\t\treturn `Signed in, but ${errorMessage(error)}`;\n\t\t\t}\n\t\t\treturn undefined;\n\t\t};\n\n\t\tconst signOut = async (server: McpServer): Promise<boolean> => {\n\t\t\tconst connection = server.connection;\n\t\t\tconst url = connection?.oauthUrl;\n\t\t\tif (!connection || !url) return false;\n\t\t\tconst removed = getCredentials(await loadMcpRuntime()).remove(url);\n\t\t\tawait connection.signOut();\n\t\t\treturn removed;\n\t\t};\n\n\t\tconst reconnect = async (server: McpServer): Promise<string | undefined> => {\n\t\t\tconst connection = server.connection;\n\t\t\tif (!connection) return `MCP server \"${server.entry.name}\" is disabled.`;\n\t\t\ttry {\n\t\t\t\tawait connection.reconnect();\n\t\t\t\treturn undefined;\n\t\t\t} catch (error) {\n\t\t\t\treturn errorMessage(error);\n\t\t\t}\n\t\t};\n\n\t\t/** Returns an error message when the config could not be saved; connection errors show in the state. */\n\t\tconst setEnabled = async (server: McpServer, enabled: boolean): Promise<string | undefined> => {\n\t\t\tconst failed = saveConfig(server, { enabled });\n\t\t\tif (failed) return failed;\n\t\t\tif (!enabled) {\n\t\t\t\tconst connection = server.connection;\n\t\t\t\tserver.connection = undefined;\n\t\t\t\thideTools(server.entry.name);\n\t\t\t\temitChange();\n\t\t\t\tawait connection?.close();\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tconst connection = await createConnection(server);\n\t\t\tawait connection.getClient().catch(() => undefined);\n\t\t\treturn undefined;\n\t\t};\n\n\t\tconst setExposure = (server: McpServer, exposure: McpExposure): string | undefined => {\n\t\t\tconst failed = saveConfig(server, { exposure });\n\t\t\tif (failed) return failed;\n\t\t\tif (server.connection?.state === \"connected\") registerTools(server.connection);\n\t\t\tsyncResourceTools();\n\t\t\t// Tools no longer exposed directly leave the declared set; direct tools are activated on registration.\n\t\t\tconst indirect = new Set(\n\t\t\t\tpi\n\t\t\t\t\t.getAllTools()\n\t\t\t\t\t.filter((tool) => tool.exposure !== \"direct\")\n\t\t\t\t\t.map((tool) => tool.name),\n\t\t\t);\n\t\t\tconst tools = serverTools.get(server.entry.name) ?? new Set<string>();\n\t\t\tpi.setActiveTools(pi.getActiveTools().filter((name) => !tools.has(name) || !indirect.has(name)));\n\t\t\temitChange();\n\t\t\treturn undefined;\n\t\t};\n\n\t\t// ---------------------------------------------------------------------------------------\n\t\t// Manager (`/mcp` in the TUI)\n\t\t// ---------------------------------------------------------------------------------------\n\n\t\tconst notices = () => [\n\t\t\t...configErrors.map((error) => `config: ${error}`),\n\t\t\t...overridden.map((line) => `overridden: ${line}`),\n\t\t];\n\n\t\tconst serversMenu = (): McpMenu => ({\n\t\t\ttitle: \"MCP servers\",\n\t\t\terror: notices().join(\"\\n\") || undefined,\n\t\t\titems: [...servers]\n\t\t\t\t.sort((a, b) => attentionRank(a) - attentionRank(b) || a.entry.name.localeCompare(b.entry.name))\n\t\t\t\t.map((server) => ({\n\t\t\t\t\tvalue: server.entry.name,\n\t\t\t\t\tlabel: server.entry.name,\n\t\t\t\t\tdescription: `${describeState(server)} · ${exposureOf(server.entry)} · ${server.entry.scope ?? server.entry.source}`,\n\t\t\t\t})),\n\t\t\tempty: `No MCP servers configured. Add them to ${resolve(getAgentDir(), \"mcp.json\")} or .pi/mcp.json.`,\n\t\t\tconfirmLabel: \"manage\",\n\t\t\tcancelLabel: \"close\",\n\t\t});\n\n\t\tconst serverMenu = (name: string): McpMenu => {\n\t\t\tconst server = findServer(name);\n\t\t\tif (!server) {\n\t\t\t\treturn {\n\t\t\t\t\ttitle: name,\n\t\t\t\t\titems: [],\n\t\t\t\t\tempty: \"This server is no longer configured.\",\n\t\t\t\t\tconfirmLabel: \"\",\n\t\t\t\t\tcancelLabel: \"back\",\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst { entry, connection } = server;\n\t\t\tconst saved =\n\t\t\t\tentry.scope === \"extension\"\n\t\t\t\t\t? \"for this session\"\n\t\t\t\t\t: entry.scope\n\t\t\t\t\t\t? `saved to the ${entry.scope} mcp.json`\n\t\t\t\t\t\t: \"saved to mcp.json\";\n\t\t\tconst items: SelectItem[] = [];\n\t\t\tif (!isEnabled(server)) {\n\t\t\t\titems.push({ value: \"enable\", label: \"Enable\", description: saved });\n\t\t\t} else {\n\t\t\t\tconst state = connection?.state;\n\t\t\t\tif (state === \"needs-auth\")\n\t\t\t\t\titems.push({ value: \"signin\", label: \"Sign in\", description: \"opens the browser\" });\n\t\t\t\tif (state === \"connected\" && connection) {\n\t\t\t\t\titems.push({ value: \"tools\", label: \"Tools\", description: `${connection.tools.length} offered` });\n\t\t\t\t}\n\t\t\t\tif (state === \"failed\" || state === \"disconnected\" || state === \"connected\" || state === \"needs-auth\") {\n\t\t\t\t\titems.push({ value: \"reconnect\", label: \"Reconnect\" });\n\t\t\t\t}\n\t\t\t\tif (state === \"connected\" && connection?.oauthUrl) {\n\t\t\t\t\titems.push({ value: \"signout\", label: \"Sign out\", description: \"deletes the stored credentials\" });\n\t\t\t\t}\n\t\t\t\titems.push({ value: \"exposure\", label: \"Exposure\", description: exposureOf(entry) });\n\t\t\t\titems.push({ value: \"disable\", label: \"Disable\", description: saved });\n\t\t\t}\n\t\t\tconst details = [\n\t\t\t\tdescribeTransport(entry),\n\t\t\t\t`${entry.scope ?? \"config\"}: ${entry.source}`,\n\t\t\t\t`State: ${describeState(server, false)}`,\n\t\t\t];\n\t\t\tconst error = [server.message, connection?.state === \"connected\" ? undefined : connection?.error]\n\t\t\t\t.filter((line): line is string => line !== undefined)\n\t\t\t\t.join(\"\\n\");\n\t\t\treturn {\n\t\t\t\ttitle: `MCP server ${name}`,\n\t\t\t\tdetails: details.join(\"\\n\"),\n\t\t\t\terror: error || undefined,\n\t\t\t\titems,\n\t\t\t\tselected: items[0]?.value,\n\t\t\t\tconfirmLabel: \"select\",\n\t\t\t\tcancelLabel: \"back\",\n\t\t\t};\n\t\t};\n\n\t\tconst showTools = async (ui: McpUi, server: McpServer) => {\n\t\t\tconst exposure = exposureOf(server.entry);\n\t\t\tconst overridden = Object.keys(server.entry.config.toolExposure ?? {}).length > 0;\n\t\t\tawait ui.menu(() => ({\n\t\t\t\ttitle: `Tools of ${server.entry.name}`,\n\t\t\t\tdetails: `Exposure ${exposure}: ${exposure === \"hidden\" ? \"unreachable\" : EXPOSURE_DESCRIPTIONS[exposure]}${overridden ? \"\\nSome tools override it with toolExposure.\" : \"\"}`,\n\t\t\t\titems: (server.connection?.tools ?? []).map((tool) => {\n\t\t\t\t\tconst toolExposure = getMcpToolExposure(server.entry.config, tool.name);\n\t\t\t\t\tconst description = firstLine(tool.description ?? \"\");\n\t\t\t\t\treturn {\n\t\t\t\t\t\tvalue: tool.name,\n\t\t\t\t\t\tlabel: tool.name,\n\t\t\t\t\t\tdescription: toolExposure === exposure ? description : `[${toolExposure}] ${description}`,\n\t\t\t\t\t};\n\t\t\t\t}),\n\t\t\t\tempty: \"The server offers no tools.\",\n\t\t\t\tconfirmLabel: \"back\",\n\t\t\t\tcancelLabel: \"back\",\n\t\t\t}));\n\t\t};\n\n\t\tconst chooseExposure = async (ui: McpUi, server: McpServer): Promise<string | undefined> => {\n\t\t\tconst current = exposureOf(server.entry);\n\t\t\tconst choice = await ui.menu(() => ({\n\t\t\t\ttitle: `Exposure of ${server.entry.name}`,\n\t\t\t\tdetails:\n\t\t\t\t\tserver.entry.scope === \"extension\"\n\t\t\t\t\t\t? `Applies to this session; the server is registered by ${server.entry.source}.`\n\t\t\t\t\t\t: `Saved to ${server.entry.source}.`,\n\t\t\t\titems: (Object.keys(EXPOSURE_DESCRIPTIONS) as (keyof typeof EXPOSURE_DESCRIPTIONS)[]).map((exposure) => ({\n\t\t\t\t\tvalue: exposure,\n\t\t\t\t\tlabel: `${exposure === current ? \"✓ \" : \" \"}${exposure}`,\n\t\t\t\t\tdescription: EXPOSURE_DESCRIPTIONS[exposure],\n\t\t\t\t})),\n\t\t\t\tselected: current,\n\t\t\t\tconfirmLabel: \"save\",\n\t\t\t\tcancelLabel: \"back\",\n\t\t\t}));\n\t\t\tif (!choice || choice === current) return undefined;\n\t\t\treturn setExposure(server, choice as McpExposure);\n\t\t};\n\n\t\tconst runAction = async (ui: McpUi, ctx: ExtensionContext, server: McpServer, action: string) => {\n\t\t\tconst { name } = server.entry;\n\t\t\tlet message: string | undefined;\n\t\t\tswitch (action) {\n\t\t\t\tcase \"signin\": {\n\t\t\t\t\tconst title = `Sign in to ${name}`;\n\t\t\t\t\tlet authorizationUrl = \"\";\n\t\t\t\t\tui.status(title, \"Contacting the authorization server…\");\n\t\t\t\t\tmessage = await signIn(server, {\n\t\t\t\t\t\tshowAuthorizationUrl: (url) => {\n\t\t\t\t\t\t\tauthorizationUrl = url.href;\n\t\t\t\t\t\t\topenUrl(url.href);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tpromptForRedirectUrl: async (signal) => {\n\t\t\t\t\t\t\tconst value = await ui.redirectUrl(title, authorizationUrl, signal);\n\t\t\t\t\t\t\tui.status(title, \"Connecting…\");\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase \"reconnect\":\n\t\t\t\t\t// A failure shows as the connection's state and error.\n\t\t\t\t\tui.status(`MCP server ${name}`, \"Reconnecting…\");\n\t\t\t\t\tawait reconnect(server);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"signout\":\n\t\t\t\t\tawait signOut(server);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"tools\":\n\t\t\t\t\tawait showTools(ui, server);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"exposure\":\n\t\t\t\t\tmessage = await chooseExposure(ui, server);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"enable\":\n\t\t\t\tcase \"disable\":\n\t\t\t\t\tui.status(`MCP server ${name}`, action === \"enable\" ? \"Connecting…\" : \"Disconnecting…\");\n\t\t\t\t\tmessage = await setEnabled(server, action === \"enable\");\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tserver.message = message;\n\t\t\tensureDiscoveryActive(ctx);\n\t\t\temitChange();\n\t\t};\n\t\tconst manage = async (ui: McpUi, ctx: ExtensionContext) => {\n\t\t\tfor (;;) {\n\t\t\t\tconst name = await ui.menu(serversMenu, subscribe);\n\t\t\t\tif (!name) return;\n\t\t\t\tfor (;;) {\n\t\t\t\t\tconst action = await ui.menu(() => serverMenu(name), subscribe);\n\t\t\t\t\tconst server = findServer(name);\n\t\t\t\t\tif (!action || !server) break;\n\t\t\t\t\tawait runAction(ui, ctx, server, action);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t// ---------------------------------------------------------------------------------------\n\t\t// Subcommands and plain status (no TUI)\n\t\t// ---------------------------------------------------------------------------------------\n\n\t\tconst formatStatus = (): string => {\n\t\t\tif (servers.length === 0 && configErrors.length === 0 && overridden.length === 0) {\n\t\t\t\treturn `No MCP servers configured. Add them to ${resolve(getAgentDir(), \"mcp.json\")} or .pi/mcp.json.`;\n\t\t\t}\n\t\t\tconst lines = servers.map((server) => {\n\t\t\t\tconst { name } = server.entry;\n\t\t\t\tconst exposure = exposureOf(server.entry);\n\t\t\t\tconst connection = server.connection;\n\t\t\t\tif (connection?.state === \"needs-auth\")\n\t\t\t\t\treturn `${name}: needs sign-in, run /mcp login ${name} (${exposure})`;\n\t\t\t\tconst tools = connection?.state === \"connected\" ? `, ${connection.tools.length} tools` : \"\";\n\t\t\t\tconst state = !isEnabled(server)\n\t\t\t\t\t? \"disabled\"\n\t\t\t\t\t: connection?.state === \"disconnected\"\n\t\t\t\t\t\t? \"disconnected, reconnects on next call\"\n\t\t\t\t\t\t: (connection?.state ?? \"starting\");\n\t\t\t\tconst error =\n\t\t\t\t\tconnection?.error && connection.state !== \"connected\"\n\t\t\t\t\t\t? `\\n ${connection.error.split(\"\\n\").join(\"\\n \")}`\n\t\t\t\t\t\t: \"\";\n\t\t\t\treturn `${name}: ${state}${tools} (${exposure})${error}`;\n\t\t\t});\n\t\t\tfor (const error of configErrors) lines.push(`config error: ${error}`);\n\t\t\tfor (const line of overridden) lines.push(`overridden: ${line}`);\n\t\t\treturn lines.join(\"\\n\");\n\t\t};\n\n\t\t/** Resolve the server for a subcommand, asking when the name is omitted and ambiguous. */\n\t\tconst pickServer = async (\n\t\t\tname: string | undefined,\n\t\t\tctx: ExtensionCommandContext,\n\t\t\toptions: { eligible: (server: McpServer) => boolean; preferred: (server: McpServer) => boolean; none: string },\n\t\t): Promise<McpServer | undefined> => {\n\t\t\tif (name) {\n\t\t\t\tconst server = findServer(name);\n\t\t\t\tif (!server) ctx.ui.notify(`No MCP server named \"${name}\".`, \"error\");\n\t\t\t\telse if (!options.eligible(server)) ctx.ui.notify(options.none, \"error\");\n\t\t\t\treturn server && options.eligible(server) ? server : undefined;\n\t\t\t}\n\t\t\tconst candidates = servers.filter(options.eligible);\n\t\t\tif (candidates.length === 0) {\n\t\t\t\tctx.ui.notify(options.none, \"info\");\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tconst preferred = candidates.filter(options.preferred);\n\t\t\tif (candidates.length === 1) return candidates[0];\n\t\t\tif (preferred.length === 1) return preferred[0];\n\t\t\tconst choice = await ctx.ui.select(\n\t\t\t\t\"MCP server\",\n\t\t\t\tcandidates.map((server) => server.entry.name),\n\t\t\t);\n\t\t\treturn candidates.find((server) => server.entry.name === choice);\n\t\t};\n\n\t\tconst usesOAuth = (server: McpServer) => server.connection?.oauthUrl !== undefined;\n\t\tconst oauthPick = {\n\t\t\teligible: usesOAuth,\n\t\t\tpreferred: (server: McpServer) => server.connection?.state === \"needs-auth\",\n\t\t\tnone: \"No enabled MCP server uses OAuth. Only HTTP servers without an Authorization header do.\",\n\t\t};\n\n\t\tconst loginCommand = async (server: McpServer, ctx: ExtensionCommandContext) => {\n\t\t\tconst { name } = server.entry;\n\t\t\tif (!ctx.hasUI) {\n\t\t\t\tctx.ui.notify(`Signing in to MCP server \"${name}\" requires interactive mode.`, \"error\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst failure = await signIn(server, {\n\t\t\t\tshowAuthorizationUrl: (url) => {\n\t\t\t\t\tctx.ui.notify(`Sign in to MCP server \"${name}\" in your browser:\\n${url.href}`, \"info\");\n\t\t\t\t\topenUrl(url.href);\n\t\t\t\t},\n\t\t\t\tpromptForRedirectUrl: (signal) =>\n\t\t\t\t\tctx.ui.input(\n\t\t\t\t\t\t`Waiting for sign-in to \"${name}\". If the browser cannot reach this machine, paste the URL it was redirected to.`,\n\t\t\t\t\t\t\"http://127.0.0.1:.../callback?code=...\",\n\t\t\t\t\t\t{ signal },\n\t\t\t\t\t),\n\t\t\t});\n\t\t\tif (failure) {\n\t\t\t\tctx.ui.notify(failure, failure === \"Sign-in cancelled.\" ? \"info\" : \"error\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tensureDiscoveryActive(ctx);\n\t\t\tctx.ui.notify(`Signed in to MCP server \"${name}\" (${server.connection?.tools.length ?? 0} tools).`, \"info\");\n\t\t};\n\n\t\tpi.on(\"session_start\", (_event, ctx) => {\n\t\t\tconst loaded = (options.loadConfig ?? defaultLoadConfig)(ctx);\n\t\t\tconfigErrors = loaded.errors;\n\t\t\tautoEnableCodemode = loaded.autoEnableCodemode ?? true;\n\t\t\twarnedUnreachable = false;\n\t\t\twaitedForStartup = false;\n\t\t\tsessionCwd = ctx.cwd;\n\t\t\tconst current = ++generation;\n\t\t\tsessionActive = true;\n\t\t\tconfiguredEntries = loaded.servers;\n\t\t\tconst registered = registeredServers();\n\t\t\toverridden = registered.overridden;\n\t\t\tservers = [...loaded.servers.map((entry) => ({ entry })), ...registered.servers];\n\t\t\temitChange();\n\t\t\tconst enabled = servers.filter(isEnabled);\n\t\t\tif (enabled.length === 0) {\n\t\t\t\treportProblems(ctx);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// The MCP client loads only now, so sessions without servers never pay for it. Waiting one\n\t\t\t// event loop turn lets the first render happen before loading and connecting.\n\t\t\tpending = new Promise((resolve) => setImmediate(resolve))\n\t\t\t\t.then(() => loadMcpRuntime())\n\t\t\t\t.then(async () => {\n\t\t\t\t\tif (current !== generation) return;\n\t\t\t\t\tconst started = await Promise.all(enabled.map((server) => createConnection(server)));\n\t\t\t\t\tif (current !== generation) return;\n\t\t\t\t\tawait Promise.allSettled(started.map((connection) => connection.getClient()));\n\t\t\t\t\tif (current !== generation) return;\n\t\t\t\t\tensureDiscoveryActive(ctx);\n\t\t\t\t\treportProblems(ctx);\n\t\t\t\t})\n\t\t\t\t.catch((error: unknown) => {\n\t\t\t\t\t// The session may have been disposed meanwhile, which makes ctx stale.\n\t\t\t\t\ttry {\n\t\t\t\t\t\tctx.ui.notify(`MCP failed to load: ${errorMessage(error)}`, \"error\");\n\t\t\t\t\t} catch {}\n\t\t\t\t});\n\t\t});\n\n\t\t// The first prompt waits for startup connections so their tools are available to it, but not\n\t\t// indefinitely: a slow or hanging server must not hold up the prompt.\n\t\tpi.on(\"before_agent_start\", async (_event, ctx) => {\n\t\t\tconst startup = pending;\n\t\t\tif (!startup || waitedForStartup) return;\n\t\t\twaitedForStartup = true;\n\t\t\tlet timer: NodeJS.Timeout | undefined;\n\t\t\tconst finished = await Promise.race([\n\t\t\t\tstartup.then(() => true),\n\t\t\t\tnew Promise<boolean>((resolve) => {\n\t\t\t\t\ttimer = setTimeout(() => resolve(false), startupWaitMs);\n\t\t\t\t}),\n\t\t\t]);\n\t\t\tclearTimeout(timer);\n\t\t\tif (!finished) {\n\t\t\t\tctx.ui.notify(\"MCP servers are still connecting; their tools become available once connected.\", \"info\");\n\t\t\t}\n\t\t});\n\n\t\t// Pick up sign-ins done outside the session, such as `pi mcp login` run by the agent.\n\t\tpi.on(\"turn_start\", async (_event, ctx) => {\n\t\t\tif (tokensAtSignIn.size > 0) await reconnectSignedIn(ctx);\n\t\t});\n\n\t\t// Servers registered or unregistered during the session connect or disconnect right away.\n\t\tpi.on(\"mcp_servers_change\", async (_event, ctx) => {\n\t\t\tif (!sessionActive) return;\n\t\t\tconst current = generation;\n\t\t\tconst registered = registeredServers();\n\t\t\toverridden = registered.overridden;\n\t\t\tconst next = new Map(registered.servers.map((server) => [server.entry.name, server]));\n\t\t\t// Unregistered servers and re-registered ones with a new config are dropped; the latter come back below.\n\t\t\tconst removed = servers.filter(\n\t\t\t\t(server) =>\n\t\t\t\t\tserver.entry.scope === \"extension\" &&\n\t\t\t\t\tnext.get(server.entry.name)?.registeredConfig !== server.registeredConfig,\n\t\t\t);\n\t\t\tservers = servers.filter((server) => !removed.includes(server));\n\t\t\tfor (const server of removed) hideTools(server.entry.name);\n\t\t\tconst added = registered.servers.filter((server) => !findServer(server.entry.name));\n\t\t\tservers.push(...added);\n\t\t\temitChange();\n\t\t\tawait Promise.all(removed.map((server) => server.connection?.close()));\n\t\t\tconst connecting = added.filter(isEnabled);\n\t\t\tif (current !== generation || connecting.length === 0) return;\n\t\t\ttry {\n\t\t\t\tconst started = await Promise.all(connecting.map((server) => createConnection(server)));\n\t\t\t\tif (current !== generation) {\n\t\t\t\t\tawait Promise.all(started.map((connection) => connection.close()));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tawait Promise.allSettled(started.map((connection) => connection.getClient()));\n\t\t\t} catch (error) {\n\t\t\t\tctx.ui.notify(`MCP failed to load: ${errorMessage(error)}`, \"error\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (current !== generation) return;\n\t\t\tensureDiscoveryActive(ctx);\n\t\t\treportProblems(ctx, connecting);\n\t\t});\n\n\t\tpi.on(\"session_shutdown\", async () => {\n\t\t\tsessionActive = false;\n\t\t\tgeneration++;\n\t\t\tconst closing = connections();\n\t\t\tservers = [];\n\t\t\temitChange();\n\t\t\tawait Promise.all(closing.map((connection) => connection.close()));\n\t\t});\n\n\t\tpi.registerCommand(\"mcp\", {\n\t\t\tdescription: \"Manage MCP servers: sign in, reconnect, enable or disable, and change exposure\",\n\t\t\tgetArgumentCompletions: (prefix) => {\n\t\t\t\tconst [action, server, ...rest] = prefix.trimStart().split(/\\s+/);\n\t\t\t\tif (rest.length > 0) return null;\n\t\t\t\tif (server === undefined) {\n\t\t\t\t\treturn [\"login\", \"logout\", \"reconnect\"]\n\t\t\t\t\t\t.filter((item) => item.startsWith(action ?? \"\"))\n\t\t\t\t\t\t.map((item) => ({ value: `${item} `, label: item }));\n\t\t\t\t}\n\t\t\t\tif (action !== \"login\" && action !== \"logout\" && action !== \"reconnect\") return null;\n\t\t\t\tconst items = servers\n\t\t\t\t\t.filter((candidate) =>\n\t\t\t\t\t\taction === \"reconnect\" ? candidate.connection !== undefined : usesOAuth(candidate),\n\t\t\t\t\t)\n\t\t\t\t\t.filter((candidate) => candidate.entry.name.startsWith(server))\n\t\t\t\t\t.map((candidate) => ({\n\t\t\t\t\t\tvalue: `${action} ${candidate.entry.name}`,\n\t\t\t\t\t\tlabel: candidate.entry.name,\n\t\t\t\t\t\tdescription: describeState(candidate),\n\t\t\t\t\t}));\n\t\t\t\treturn items.length > 0 ? items : null;\n\t\t\t},\n\t\t\thandler: async (args, ctx) => {\n\t\t\t\tawait pending;\n\t\t\t\tconst [action, name, ...extra] = args.trim().split(/\\s+/).filter(Boolean);\n\t\t\t\tif (action === undefined) {\n\t\t\t\t\tif (ctx.mode === \"tui\") await showMcpManager(ctx, (ui) => manage(ui, ctx));\n\t\t\t\t\telse ctx.ui.notify(formatStatus(), \"info\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (extra.length > 0) {\n\t\t\t\t\tctx.ui.notify(MCP_USAGE, \"warning\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tswitch (action) {\n\t\t\t\t\tcase \"login\": {\n\t\t\t\t\t\tconst server = await pickServer(name, ctx, oauthPick);\n\t\t\t\t\t\tif (server) await loginCommand(server, ctx);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"logout\": {\n\t\t\t\t\t\tconst server = await pickServer(name, ctx, oauthPick);\n\t\t\t\t\t\tif (!server) return;\n\t\t\t\t\t\tconst removed = await signOut(server);\n\t\t\t\t\t\tctx.ui.notify(\n\t\t\t\t\t\t\tremoved\n\t\t\t\t\t\t\t\t? `Signed out of MCP server \"${server.entry.name}\".`\n\t\t\t\t\t\t\t\t: `No stored credentials for MCP server \"${server.entry.name}\".`,\n\t\t\t\t\t\t\t\"info\",\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"reconnect\": {\n\t\t\t\t\t\tconst server = await pickServer(name, ctx, {\n\t\t\t\t\t\t\teligible: (candidate) => candidate.connection !== undefined,\n\t\t\t\t\t\t\tpreferred: (candidate) =>\n\t\t\t\t\t\t\t\tcandidate.connection?.state === \"failed\" || candidate.connection?.state === \"disconnected\",\n\t\t\t\t\t\t\tnone: \"No enabled MCP server to reconnect.\",\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (!server) return;\n\t\t\t\t\t\tconst failure = await reconnect(server);\n\t\t\t\t\t\tif (failure) ctx.ui.notify(failure, \"error\");\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tensureDiscoveryActive(ctx);\n\t\t\t\t\t\t\tctx.ui.notify(\n\t\t\t\t\t\t\t\t`Reconnected to MCP server \"${server.entry.name}\" (${describeState(server)}).`,\n\t\t\t\t\t\t\t\t\"info\",\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tctx.ui.notify(MCP_USAGE, \"warning\");\n\t\t\t\t}\n\t\t\t},\n\t\t});\n\t};\n}\n\nfunction defaultLoadConfig(ctx: ExtensionContext): LoadedMcpConfig {\n\treturn loadMcpConfig({ agentDir: getAgentDir(), cwd: ctx.cwd, projectTrusted: ctx.isProjectTrusted() });\n}\n\nexport default createMcpExtension();\n"]}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Log messages MCP servers send with `notifications/message`, appended to `mcp.log` in the agent
3
+ * directory. Several pi processes may write to the same file, so every message is one synchronous
4
+ * append. The file is rotated to `mcp.log.1` once it grows past `MAX_LOG_BYTES`.
5
+ */
6
+ /** Format one `notifications/message` from `server` as a log line; continuation lines are indented. */
7
+ export declare function formatMcpLogMessage(server: string, params: unknown, now?: Date): string;
8
+ /** Appends server log messages to one file. Write errors are ignored: logging must not break tools. */
9
+ export declare class McpServerLog {
10
+ readonly path: string;
11
+ private size;
12
+ constructor(path: string);
13
+ write(server: string, params: unknown): void;
14
+ private currentSize;
15
+ }
16
+ //# sourceMappingURL=log.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log.d.ts","sourceRoot":"","sources":["../../../src/extensions/mcp/log.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAoBH,uGAAuG;AACvG,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,GAAE,IAAiB,GAAG,MAAM,CAMnG;AAED,uGAAuG;AACvG,qBAAa,YAAY;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,IAAI,CAAqB;IAEjC,YAAY,IAAI,EAAE,MAAM,EAEvB;IAED,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI,CAiB3C;IAED,OAAO,CAAC,WAAW;CAOnB"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Log messages MCP servers send with `notifications/message`, appended to `mcp.log` in the agent
3
+ * directory. Several pi processes may write to the same file, so every message is one synchronous
4
+ * append. The file is rotated to `mcp.log.1` once it grows past `MAX_LOG_BYTES`.
5
+ */
6
+ import { appendFileSync, mkdirSync, renameSync, statSync } from "node:fs";
7
+ import { dirname } from "node:path";
8
+ const MAX_LOG_BYTES = 5 * 1024 * 1024;
9
+ function isRecord(value) {
10
+ return typeof value === "object" && value !== null && !Array.isArray(value);
11
+ }
12
+ function formatData(data) {
13
+ if (typeof data === "string")
14
+ return data;
15
+ try {
16
+ return JSON.stringify(data) ?? String(data);
17
+ }
18
+ catch {
19
+ return String(data);
20
+ }
21
+ }
22
+ /** Format one `notifications/message` from `server` as a log line; continuation lines are indented. */
23
+ export function formatMcpLogMessage(server, params, now = new Date()) {
24
+ const message = isRecord(params) ? params : { data: params };
25
+ const level = typeof message.level === "string" ? message.level : "info";
26
+ const logger = typeof message.logger === "string" && message.logger ? ` ${message.logger}:` : "";
27
+ const text = formatData(message.data).replace(/\r?\n/g, "\n ");
28
+ return `${now.toISOString()} [${server}] ${level}${logger} ${text}\n`;
29
+ }
30
+ /** Appends server log messages to one file. Write errors are ignored: logging must not break tools. */
31
+ export class McpServerLog {
32
+ path;
33
+ size;
34
+ constructor(path) {
35
+ this.path = path;
36
+ }
37
+ write(server, params) {
38
+ const line = formatMcpLogMessage(server, params);
39
+ try {
40
+ if (this.size === undefined) {
41
+ mkdirSync(dirname(this.path), { recursive: true });
42
+ this.size = this.currentSize();
43
+ }
44
+ if (this.size > MAX_LOG_BYTES) {
45
+ // Another process may have rotated it already; check before renaming.
46
+ if (this.currentSize() > MAX_LOG_BYTES)
47
+ renameSync(this.path, `${this.path}.1`);
48
+ this.size = this.currentSize();
49
+ }
50
+ appendFileSync(this.path, line);
51
+ this.size += Buffer.byteLength(line);
52
+ }
53
+ catch {
54
+ // Ignore: the log is best effort.
55
+ }
56
+ }
57
+ currentSize() {
58
+ try {
59
+ return statSync(this.path).size;
60
+ }
61
+ catch {
62
+ return 0;
63
+ }
64
+ }
65
+ }
66
+ //# sourceMappingURL=log.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log.js","sourceRoot":"","sources":["../../../src/extensions/mcp/log.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Log messages MCP servers send with `notifications/message`, appended to `mcp.log` in the agent\n * directory. Several pi processes may write to the same file, so every message is one synchronous\n * append. The file is rotated to `mcp.log.1` once it grows past `MAX_LOG_BYTES`.\n */\n\nimport { appendFileSync, mkdirSync, renameSync, statSync } from \"node:fs\";\nimport { dirname } from \"node:path\";\n\nconst MAX_LOG_BYTES = 5 * 1024 * 1024;\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction formatData(data: unknown): string {\n\tif (typeof data === \"string\") return data;\n\ttry {\n\t\treturn JSON.stringify(data) ?? String(data);\n\t} catch {\n\t\treturn String(data);\n\t}\n}\n\n/** Format one `notifications/message` from `server` as a log line; continuation lines are indented. */\nexport function formatMcpLogMessage(server: string, params: unknown, now: Date = new Date()): string {\n\tconst message = isRecord(params) ? params : { data: params };\n\tconst level = typeof message.level === \"string\" ? message.level : \"info\";\n\tconst logger = typeof message.logger === \"string\" && message.logger ? ` ${message.logger}:` : \"\";\n\tconst text = formatData(message.data).replace(/\\r?\\n/g, \"\\n \");\n\treturn `${now.toISOString()} [${server}] ${level}${logger} ${text}\\n`;\n}\n\n/** Appends server log messages to one file. Write errors are ignored: logging must not break tools. */\nexport class McpServerLog {\n\treadonly path: string;\n\tprivate size: number | undefined;\n\n\tconstructor(path: string) {\n\t\tthis.path = path;\n\t}\n\n\twrite(server: string, params: unknown): void {\n\t\tconst line = formatMcpLogMessage(server, params);\n\t\ttry {\n\t\t\tif (this.size === undefined) {\n\t\t\t\tmkdirSync(dirname(this.path), { recursive: true });\n\t\t\t\tthis.size = this.currentSize();\n\t\t\t}\n\t\t\tif (this.size > MAX_LOG_BYTES) {\n\t\t\t\t// Another process may have rotated it already; check before renaming.\n\t\t\t\tif (this.currentSize() > MAX_LOG_BYTES) renameSync(this.path, `${this.path}.1`);\n\t\t\t\tthis.size = this.currentSize();\n\t\t\t}\n\t\t\tappendFileSync(this.path, line);\n\t\t\tthis.size += Buffer.byteLength(line);\n\t\t} catch {\n\t\t\t// Ignore: the log is best effort.\n\t\t}\n\t}\n\n\tprivate currentSize(): number {\n\t\ttry {\n\t\t\treturn statSync(this.path).size;\n\t\t} catch {\n\t\t\treturn 0;\n\t\t}\n\t}\n}\n"]}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * OAuth sign-in for remote MCP servers.
3
+ *
4
+ * Connections never start a browser flow on their own. They send the stored access token and, after
5
+ * a 401, try the stored refresh token. When that is not possible they fail with
6
+ * `McpOAuthAuthorizationRequiredError`, and the user signs in through `/mcp`, which runs
7
+ * the authorization code flow (PKCE, dynamic client registration) against a loopback callback.
8
+ *
9
+ * Credentials live in `<agent-dir>/mcp-auth.json`, keyed by server URL.
10
+ */
11
+ import type { AuthProvider } from "@earendil-works/pi-mcp";
12
+ import { type McpOAuthState, type McpOAuthStateStore, type OAuthChallenge } from "@earendil-works/pi-mcp/oauth";
13
+ import { type AuthStorageBackend } from "../../core/auth-storage.ts";
14
+ export interface McpOAuthSettings {
15
+ clientId?: string;
16
+ /** Already resolved. */
17
+ clientSecret?: string;
18
+ callbackPort?: number;
19
+ /** Loopback redirect URI; see `McpOAuthConfig.callbackUrl`. */
20
+ callbackUrl?: string;
21
+ /** Scopes to request, separated by spaces. */
22
+ scope?: string;
23
+ }
24
+ export interface McpOAuthServerStore extends McpOAuthStateStore {
25
+ /** Run `fn` while no other process refreshes the server's tokens. */
26
+ withRefreshLock<T>(fn: () => Promise<T>): Promise<T>;
27
+ }
28
+ /** Per-server OAuth state (client registration, tokens, pending PKCE verifier) in `mcp-auth.json`. */
29
+ export declare class McpOAuthCredentialStore {
30
+ private readonly backend;
31
+ /** Directory for the refresh lock files. Without one, refreshes are only serialized in this process. */
32
+ private readonly lockDir;
33
+ constructor(backend?: AuthStorageBackend, lockDir?: string);
34
+ forServer(serverUrl: string): McpOAuthServerStore;
35
+ /**
36
+ * A lock file per server. When the process exits, proper-lockfile removes the locks it holds; when
37
+ * it is killed, the lock goes stale because it is no longer renewed, and the next process takes it over.
38
+ */
39
+ private withRefreshLock;
40
+ /** The stored tokens of a server, for noticing sign-ins done by another process. */
41
+ tokens(serverUrl: string): McpOAuthState["tokens"];
42
+ /** Returns whether credentials were stored for the server. */
43
+ remove(serverUrl: string): boolean;
44
+ private read;
45
+ private write;
46
+ }
47
+ export interface McpAuthProvider extends AuthProvider {
48
+ /** Resolves when no refresh is running, so shutdown does not drop rotated tokens before they are saved. */
49
+ settled(): Promise<void>;
50
+ }
51
+ /**
52
+ * Auth provider for MCP connections: sends the stored access token and refreshes it when it is about
53
+ * to expire or after a 401. Throws `McpOAuthAuthorizationRequiredError` when the user has to sign in,
54
+ * including when the server asks for more scope (`insufficient_scope`). `onChallenge` receives the
55
+ * server's `WWW-Authenticate` challenge so sign-in can use its resource metadata URL and scope.
56
+ * `settings` is only called when a refresh is needed, so a secret that fails to resolve fails the
57
+ * refresh instead of the whole connection setup.
58
+ *
59
+ * Many servers rotate refresh tokens, so two refreshes with the same refresh token lose the grant.
60
+ * Requests in this process share one refresh, and other processes are kept out by the store's
61
+ * refresh lock, held from reading the tokens to saving new ones. Tokens that changed meanwhile
62
+ * (another process refreshed them, or the user signed in) are used without refreshing.
63
+ */
64
+ export declare function createMcpAuthProvider(options: {
65
+ serverUrl: string;
66
+ store: McpOAuthServerStore;
67
+ settings: () => McpOAuthSettings;
68
+ onChallenge: (challenge: OAuthChallenge) => void;
69
+ }): McpAuthProvider;
70
+ export interface McpSignInPrompt {
71
+ /** Show the authorization URL to the user and open it in a browser. */
72
+ showAuthorizationUrl(url: URL): void;
73
+ /**
74
+ * Ask for the redirect URL from the browser address bar, for when the browser cannot reach the
75
+ * loopback callback (for example over SSH). Aborted once the callback arrives. Resolves to
76
+ * `undefined` or an empty string when the user cancels.
77
+ */
78
+ promptForRedirectUrl(signal: AbortSignal): Promise<string | undefined>;
79
+ }
80
+ export declare class McpSignInCancelledError extends Error {
81
+ constructor();
82
+ }
83
+ /**
84
+ * Sign in to an MCP server. Uses the stored refresh token when possible; otherwise runs the browser
85
+ * authorization code flow. Tokens are saved to `store`.
86
+ */
87
+ export declare function signInMcpServer(options: {
88
+ serverUrl: string;
89
+ store: McpOAuthStateStore;
90
+ settings: McpOAuthSettings;
91
+ challenge?: OAuthChallenge;
92
+ prompt: McpSignInPrompt;
93
+ }): Promise<void>;
94
+ //# sourceMappingURL=oauth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../../../src/extensions/mcp/oauth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH,OAAO,KAAK,EAAE,YAAY,EAAY,MAAM,wBAAwB,CAAC;AACrE,OAAO,EAIN,KAAK,aAAa,EAClB,KAAK,kBAAkB,EAGvB,KAAK,cAAc,EAGnB,MAAM,8BAA8B,CAAC;AAGtC,OAAO,EAAE,KAAK,kBAAkB,EAA0B,MAAM,4BAA4B,CAAC;AAgB7F,MAAM,WAAW,gBAAgB;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wBAAwB;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,+DAA+D;IAC/D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8CAA8C;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAiDD,MAAM,WAAW,mBAAoB,SAAQ,kBAAkB;IAC9D,qEAAqE;IACrE,eAAe,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CACrD;AAED,sGAAsG;AACtG,qBAAa,uBAAuB;IACnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;IAC7C,wGAAwG;IACxG,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;IAE7C,YAAY,OAAO,CAAC,EAAE,kBAAkB,EAAE,OAAO,CAAC,EAAE,MAAM,EAGzD;IAED,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,mBAAmB,CAUhD;IAED;;;OAGG;YACW,eAAe;IAuB7B,oFAAoF;IACpF,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,CAAC,QAAQ,CAAC,CAEjD;IAED,8DAA8D;IAC9D,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAOjC;IAED,OAAO,CAAC,IAAI;IAIZ,OAAO,CAAC,KAAK;CAOb;AAwBD,MAAM,WAAW,eAAgB,SAAQ,YAAY;IACpD,2GAA2G;IAC3G,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACzB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,mBAAmB,CAAC;IAC3B,QAAQ,EAAE,MAAM,gBAAgB,CAAC;IACjC,WAAW,EAAE,CAAC,SAAS,EAAE,cAAc,KAAK,IAAI,CAAC;CACjD,GAAG,eAAe,CAuDlB;AAED,MAAM,WAAW,eAAe;IAC/B,uEAAuE;IACvE,oBAAoB,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAAC;IACrC;;;;OAIG;IACH,oBAAoB,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;CACvE;AAED,qBAAa,uBAAwB,SAAQ,KAAK;IACjD,cAGC;CACD;AA8DD;;;GAGG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,kBAAkB,CAAC;IAC1B,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,SAAS,CAAC,EAAE,cAAc,CAAC;IAC3B,MAAM,EAAE,eAAe,CAAC;CACxB,GAAG,OAAO,CAAC,IAAI,CAAC,CA8ChB"}