@maxmo74/pi-coding-agent 0.0.0-stage → 1.4.0-max.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 (1293) hide show
  1. package/CHANGELOG.md +6397 -0
  2. package/LICENSE +21 -0
  3. package/README.md +116 -2
  4. package/dist/bun/cli.d.ts +5 -0
  5. package/dist/bun/cli.d.ts.map +1 -0
  6. package/dist/bun/cli.js +5 -0
  7. package/dist/bun/cli.js.map +1 -0
  8. package/dist/bun/restore-sandbox-env.d.ts +17 -0
  9. package/dist/bun/restore-sandbox-env.d.ts.map +1 -0
  10. package/dist/bun/restore-sandbox-env.js +36 -0
  11. package/dist/bun/restore-sandbox-env.js.map +1 -0
  12. package/dist/bun/runtime-setup.d.ts +2 -0
  13. package/dist/bun/runtime-setup.d.ts.map +1 -0
  14. package/dist/bun/runtime-setup.js +12 -0
  15. package/dist/bun/runtime-setup.js.map +1 -0
  16. package/dist/bun/sandbox-env-setup.d.ts +2 -0
  17. package/dist/bun/sandbox-env-setup.d.ts.map +1 -0
  18. package/dist/bun/sandbox-env-setup.js +4 -0
  19. package/dist/bun/sandbox-env-setup.js.map +1 -0
  20. package/dist/bundle/chunks/anthropic-messages-KRX3GRGV.js +6 -0
  21. package/dist/bundle/chunks/anthropic.js +75 -0
  22. package/dist/bundle/chunks/azure-openai-responses-YWTDZRIJ.js +2 -0
  23. package/dist/bundle/chunks/bedrock-converse-stream.js +89 -0
  24. package/dist/bundle/chunks/chunk-4UNN5OGR.js +4 -0
  25. package/dist/bundle/chunks/chunk-5AGIVGSV.js +6 -0
  26. package/dist/bundle/chunks/chunk-6QGV3IWD.js +6 -0
  27. package/dist/bundle/chunks/chunk-7CBJINYJ.js +20 -0
  28. package/dist/bundle/chunks/chunk-7DDKXS2Q.js +2 -0
  29. package/dist/bundle/chunks/chunk-7ZC4UXSL.js +2 -0
  30. package/dist/bundle/chunks/chunk-AFNTYPTW.js +65 -0
  31. package/dist/bundle/chunks/chunk-BPHHHEET.js +9 -0
  32. package/dist/bundle/chunks/chunk-BSS6T6KQ.js +2 -0
  33. package/dist/bundle/chunks/chunk-CF5GWZHW.js +31 -0
  34. package/dist/bundle/chunks/chunk-CPKYLLPC.js +2 -0
  35. package/dist/bundle/chunks/chunk-FFMDRXC4.js +10 -0
  36. package/dist/bundle/chunks/chunk-HODJBMOY.js +9 -0
  37. package/dist/bundle/chunks/chunk-HQBQWHLD.js +7 -0
  38. package/dist/bundle/chunks/chunk-HQJBN2MC.js +2 -0
  39. package/dist/bundle/chunks/chunk-JXWJOIH4.js +2 -0
  40. package/dist/bundle/chunks/chunk-KFM2CJ7Q.js +4 -0
  41. package/dist/bundle/chunks/chunk-L2ZPNLYD.js +2 -0
  42. package/dist/bundle/chunks/chunk-LAMEVJ4W.js +132 -0
  43. package/dist/bundle/chunks/chunk-LPXNMA2W.js +2 -0
  44. package/dist/bundle/chunks/chunk-LVVZS2NO.js +12 -0
  45. package/dist/bundle/chunks/chunk-M3LEVT3X.js +2 -0
  46. package/dist/bundle/chunks/chunk-MTLO5CT7.js +2 -0
  47. package/dist/bundle/chunks/chunk-P7FPUEYA.js +2 -0
  48. package/dist/bundle/chunks/chunk-PGXDEOVV.js +2 -0
  49. package/dist/bundle/chunks/chunk-PJACZCIR.js +2 -0
  50. package/dist/bundle/chunks/chunk-PMRZO46Y.js +2 -0
  51. package/dist/bundle/chunks/chunk-PRRNXB7S.js +2 -0
  52. package/dist/bundle/chunks/chunk-QTM7S6TH.js +2 -0
  53. package/dist/bundle/chunks/chunk-RDZVAGPR.js +2 -0
  54. package/dist/bundle/chunks/chunk-RFUP4YGP.js +82 -0
  55. package/dist/bundle/chunks/chunk-TMTOQ7H7.js +2 -0
  56. package/dist/bundle/chunks/chunk-UKVNB6C4.js +2 -0
  57. package/dist/bundle/chunks/chunk-USJZMAIR.js +2 -0
  58. package/dist/bundle/chunks/chunk-UTB4DTYQ.js +2 -0
  59. package/dist/bundle/chunks/chunk-V4LJ5IY6.js +44 -0
  60. package/dist/bundle/chunks/chunk-XPUTTZLN.js +16 -0
  61. package/dist/bundle/chunks/chunk-YUEEC7J5.js +1237 -0
  62. package/dist/bundle/chunks/chunk-ZN2R65UF.js +2 -0
  63. package/dist/bundle/chunks/cli-QUXYJ5RR.js +51 -0
  64. package/dist/bundle/chunks/cloudflare-workers-ai-system-one-QPZQRBK5.js +2 -0
  65. package/dist/bundle/chunks/codemode-worker.js +478 -0
  66. package/dist/bundle/chunks/easter-egg-3d-RD5RBYI2.js +2 -0
  67. package/dist/bundle/chunks/execute-XTJDRV75.js +505 -0
  68. package/dist/bundle/chunks/github-copilot.js +2 -0
  69. package/dist/bundle/chunks/google-generative-ai-J3K3YPN3.js +2 -0
  70. package/dist/bundle/chunks/google-vertex-VFXOTBVP.js +2 -0
  71. package/dist/bundle/chunks/https-proxy-agent-LVOO5TPL.js +13 -0
  72. package/dist/bundle/chunks/image-resize-worker.js +2 -0
  73. package/dist/bundle/chunks/jiti-loader-GL4HJFAD.js +21 -0
  74. package/dist/bundle/chunks/jiti-static-loader-2RCDI6B4.js +2 -0
  75. package/dist/bundle/chunks/kimi-coding.js +2 -0
  76. package/dist/bundle/chunks/lib-4AVRLBHM.js +9 -0
  77. package/dist/bundle/chunks/llama-cpp-classify-4KFSGAMH.js +22 -0
  78. package/dist/bundle/chunks/meta.js +2 -0
  79. package/dist/bundle/chunks/mistral-conversations-C2QQGYVC.js +5 -0
  80. package/dist/bundle/chunks/multipart-parser-FMGQ7342.js +3 -0
  81. package/dist/bundle/chunks/node-AUOGOBCN.js +2 -0
  82. package/dist/bundle/chunks/node-KCMANYC2.js +16 -0
  83. package/dist/bundle/chunks/openai-chatgpt.js +75 -0
  84. package/dist/bundle/chunks/openai-codex-responses-H2UJSVV3.js +10 -0
  85. package/dist/bundle/chunks/openai-codex.js +75 -0
  86. package/dist/bundle/chunks/openai-completions-QPD4B26I.js +7 -0
  87. package/dist/bundle/chunks/openai-decisions-O6PHBSCB.js +5 -0
  88. package/dist/bundle/chunks/openai-responses-JOYMWKMB.js +4 -0
  89. package/dist/bundle/chunks/openrouter-images-4WG6OOLH.js +2 -0
  90. package/dist/bundle/chunks/openrouter.js +75 -0
  91. package/dist/bundle/chunks/pi-messages-EZXKVRR6.js +8 -0
  92. package/dist/bundle/chunks/radius.js +75 -0
  93. package/dist/bundle/chunks/runtime-YKR6KZPS.js +2 -0
  94. package/dist/bundle/chunks/src-QKGKDFSU.js +4 -0
  95. package/dist/bundle/chunks/typesafe-system-one-X3JT6ECA.js +2 -0
  96. package/dist/bundle/chunks/virtual-modules-DENBSTKO.js +2 -0
  97. package/dist/bundle/chunks/xai.js +2 -0
  98. package/dist/bundle/cli-runtime.js +3 -0
  99. package/dist/bundle/cli.js +5 -0
  100. package/dist/bundle/index.js +2 -0
  101. package/dist/bundle/rpc-entry.js +3 -0
  102. package/dist/cli/args.d.ts +62 -0
  103. package/dist/cli/args.d.ts.map +1 -0
  104. package/dist/cli/args.js +473 -0
  105. package/dist/cli/args.js.map +1 -0
  106. package/dist/cli/auth-check.d.ts +19 -0
  107. package/dist/cli/auth-check.d.ts.map +1 -0
  108. package/dist/cli/auth-check.js +50 -0
  109. package/dist/cli/auth-check.js.map +1 -0
  110. package/dist/cli/auth-command.d.ts +24 -0
  111. package/dist/cli/auth-command.d.ts.map +1 -0
  112. package/dist/cli/auth-command.js +103 -0
  113. package/dist/cli/auth-command.js.map +1 -0
  114. package/dist/cli/config-selector.d.ts +16 -0
  115. package/dist/cli/config-selector.d.ts.map +1 -0
  116. package/dist/cli/config-selector.js +32 -0
  117. package/dist/cli/config-selector.js.map +1 -0
  118. package/dist/cli/credential-print.d.ts +13 -0
  119. package/dist/cli/credential-print.d.ts.map +1 -0
  120. package/dist/cli/credential-print.js +76 -0
  121. package/dist/cli/credential-print.js.map +1 -0
  122. package/dist/cli/file-processor.d.ts +15 -0
  123. package/dist/cli/file-processor.d.ts.map +1 -0
  124. package/dist/cli/file-processor.js +71 -0
  125. package/dist/cli/file-processor.js.map +1 -0
  126. package/dist/cli/initial-message.d.ts +18 -0
  127. package/dist/cli/initial-message.d.ts.map +1 -0
  128. package/dist/cli/initial-message.js +22 -0
  129. package/dist/cli/initial-message.js.map +1 -0
  130. package/dist/cli/list-models.d.ts +9 -0
  131. package/dist/cli/list-models.d.ts.map +1 -0
  132. package/dist/cli/list-models.js +98 -0
  133. package/dist/cli/list-models.js.map +1 -0
  134. package/dist/cli/project-trust.d.ts +10 -0
  135. package/dist/cli/project-trust.d.ts.map +1 -0
  136. package/dist/cli/project-trust.js +48 -0
  137. package/dist/cli/project-trust.js.map +1 -0
  138. package/dist/cli/session-picker.d.ts +10 -0
  139. package/dist/cli/session-picker.d.ts.map +1 -0
  140. package/dist/cli/session-picker.js +36 -0
  141. package/dist/cli/session-picker.js.map +1 -0
  142. package/dist/cli/setup.d.ts +2 -0
  143. package/dist/cli/setup.d.ts.map +1 -0
  144. package/dist/cli/setup.js +12 -0
  145. package/dist/cli/setup.js.map +1 -0
  146. package/dist/cli/startup-ui.d.ts +20 -0
  147. package/dist/cli/startup-ui.d.ts.map +1 -0
  148. package/dist/cli/startup-ui.js +193 -0
  149. package/dist/cli/startup-ui.js.map +1 -0
  150. package/dist/cli.d.ts +3 -0
  151. package/dist/cli.d.ts.map +1 -0
  152. package/dist/cli.js +6 -0
  153. package/dist/cli.js.map +1 -0
  154. package/dist/config.d.ts +126 -0
  155. package/dist/config.d.ts.map +1 -0
  156. package/dist/config.js +534 -0
  157. package/dist/config.js.map +1 -0
  158. package/dist/core/agent-session-runtime.d.ts +120 -0
  159. package/dist/core/agent-session-runtime.d.ts.map +1 -0
  160. package/dist/core/agent-session-runtime.js +307 -0
  161. package/dist/core/agent-session-runtime.js.map +1 -0
  162. package/dist/core/agent-session-services.d.ts +86 -0
  163. package/dist/core/agent-session-services.d.ts.map +1 -0
  164. package/dist/core/agent-session-services.js +147 -0
  165. package/dist/core/agent-session-services.js.map +1 -0
  166. package/dist/core/agent-session.d.ts +940 -0
  167. package/dist/core/agent-session.d.ts.map +1 -0
  168. package/dist/core/agent-session.js +3654 -0
  169. package/dist/core/agent-session.js.map +1 -0
  170. package/dist/core/auth-guidance.d.ts +5 -0
  171. package/dist/core/auth-guidance.d.ts.map +1 -0
  172. package/dist/core/auth-guidance.js +21 -0
  173. package/dist/core/auth-guidance.js.map +1 -0
  174. package/dist/core/auth-storage.d.ts +72 -0
  175. package/dist/core/auth-storage.d.ts.map +1 -0
  176. package/dist/core/auth-storage.js +433 -0
  177. package/dist/core/auth-storage.js.map +1 -0
  178. package/dist/core/bash-executor.d.ts +32 -0
  179. package/dist/core/bash-executor.d.ts.map +1 -0
  180. package/dist/core/bash-executor.js +101 -0
  181. package/dist/core/bash-executor.js.map +1 -0
  182. package/dist/core/bug-report-upload.d.ts +12 -0
  183. package/dist/core/bug-report-upload.d.ts.map +1 -0
  184. package/dist/core/bug-report-upload.js +22 -0
  185. package/dist/core/bug-report-upload.js.map +1 -0
  186. package/dist/core/bug-report.d.ts +184 -0
  187. package/dist/core/bug-report.d.ts.map +1 -0
  188. package/dist/core/bug-report.js +292 -0
  189. package/dist/core/bug-report.js.map +1 -0
  190. package/dist/core/cache-stats.d.ts +49 -0
  191. package/dist/core/cache-stats.d.ts.map +1 -0
  192. package/dist/core/cache-stats.js +112 -0
  193. package/dist/core/cache-stats.js.map +1 -0
  194. package/dist/core/cache-warmer.d.ts +103 -0
  195. package/dist/core/cache-warmer.d.ts.map +1 -0
  196. package/dist/core/cache-warmer.js +356 -0
  197. package/dist/core/cache-warmer.js.map +1 -0
  198. package/dist/core/client-identity.d.ts +8 -0
  199. package/dist/core/client-identity.d.ts.map +1 -0
  200. package/dist/core/client-identity.js +15 -0
  201. package/dist/core/client-identity.js.map +1 -0
  202. package/dist/core/compaction/branch-summarization.d.ts +100 -0
  203. package/dist/core/compaction/branch-summarization.d.ts.map +1 -0
  204. package/dist/core/compaction/branch-summarization.js +253 -0
  205. package/dist/core/compaction/branch-summarization.js.map +1 -0
  206. package/dist/core/compaction/compaction.d.ts +145 -0
  207. package/dist/core/compaction/compaction.d.ts.map +1 -0
  208. package/dist/core/compaction/compaction.js +749 -0
  209. package/dist/core/compaction/compaction.js.map +1 -0
  210. package/dist/core/compaction/index.d.ts +7 -0
  211. package/dist/core/compaction/index.d.ts.map +1 -0
  212. package/dist/core/compaction/index.js +7 -0
  213. package/dist/core/compaction/index.js.map +1 -0
  214. package/dist/core/compaction/utils.d.ts +45 -0
  215. package/dist/core/compaction/utils.d.ts.map +1 -0
  216. package/dist/core/compaction/utils.js +148 -0
  217. package/dist/core/compaction/utils.js.map +1 -0
  218. package/dist/core/crash-log.d.ts +27 -0
  219. package/dist/core/crash-log.d.ts.map +1 -0
  220. package/dist/core/crash-log.js +140 -0
  221. package/dist/core/crash-log.js.map +1 -0
  222. package/dist/core/defaults.d.ts +4 -0
  223. package/dist/core/defaults.d.ts.map +1 -0
  224. package/dist/core/defaults.js +11 -0
  225. package/dist/core/defaults.js.map +1 -0
  226. package/dist/core/diagnostics.d.ts +15 -0
  227. package/dist/core/diagnostics.d.ts.map +1 -0
  228. package/dist/core/diagnostics.js +2 -0
  229. package/dist/core/diagnostics.js.map +1 -0
  230. package/dist/core/event-bus.d.ts +9 -0
  231. package/dist/core/event-bus.d.ts.map +1 -0
  232. package/dist/core/event-bus.js +25 -0
  233. package/dist/core/event-bus.js.map +1 -0
  234. package/dist/core/exec.d.ts +37 -0
  235. package/dist/core/exec.d.ts.map +1 -0
  236. package/dist/core/exec.js +119 -0
  237. package/dist/core/exec.js.map +1 -0
  238. package/dist/core/experimental.d.ts +2 -0
  239. package/dist/core/experimental.d.ts.map +1 -0
  240. package/dist/core/experimental.js +4 -0
  241. package/dist/core/experimental.js.map +1 -0
  242. package/dist/core/export-html/ansi-to-html.d.ts +22 -0
  243. package/dist/core/export-html/ansi-to-html.d.ts.map +1 -0
  244. package/dist/core/export-html/ansi-to-html.js +249 -0
  245. package/dist/core/export-html/ansi-to-html.js.map +1 -0
  246. package/dist/core/export-html/index.d.ts +37 -0
  247. package/dist/core/export-html/index.d.ts.map +1 -0
  248. package/dist/core/export-html/index.js +236 -0
  249. package/dist/core/export-html/index.js.map +1 -0
  250. package/dist/core/export-html/template.css +1085 -0
  251. package/dist/core/export-html/template.html +56 -0
  252. package/dist/core/export-html/template.js +2044 -0
  253. package/dist/core/export-html/tool-renderer.d.ts +34 -0
  254. package/dist/core/export-html/tool-renderer.d.ts.map +1 -0
  255. package/dist/core/export-html/tool-renderer.js +110 -0
  256. package/dist/core/export-html/tool-renderer.js.map +1 -0
  257. package/dist/core/export-html/vendor/highlight.min.js +1213 -0
  258. package/dist/core/export-html/vendor/marked-cjk-friendly.min.js +6 -0
  259. package/dist/core/export-html/vendor/marked.min.js +79 -0
  260. package/dist/core/extensions/index.d.ts +12 -0
  261. package/dist/core/extensions/index.d.ts.map +1 -0
  262. package/dist/core/extensions/index.js +9 -0
  263. package/dist/core/extensions/index.js.map +1 -0
  264. package/dist/core/extensions/jiti-loader.d.ts +2 -0
  265. package/dist/core/extensions/jiti-loader.d.ts.map +1 -0
  266. package/dist/core/extensions/jiti-loader.js +4 -0
  267. package/dist/core/extensions/jiti-loader.js.map +1 -0
  268. package/dist/core/extensions/jiti-static-loader.d.ts +2 -0
  269. package/dist/core/extensions/jiti-static-loader.d.ts.map +1 -0
  270. package/dist/core/extensions/jiti-static-loader.js +4 -0
  271. package/dist/core/extensions/jiti-static-loader.js.map +1 -0
  272. package/dist/core/extensions/loader.d.ts +23 -0
  273. package/dist/core/extensions/loader.d.ts.map +1 -0
  274. package/dist/core/extensions/loader.js +704 -0
  275. package/dist/core/extensions/loader.js.map +1 -0
  276. package/dist/core/extensions/runner.d.ts +215 -0
  277. package/dist/core/extensions/runner.d.ts.map +1 -0
  278. package/dist/core/extensions/runner.js +1238 -0
  279. package/dist/core/extensions/runner.js.map +1 -0
  280. package/dist/core/extensions/types.d.ts +1769 -0
  281. package/dist/core/extensions/types.d.ts.map +1 -0
  282. package/dist/core/extensions/types.js +48 -0
  283. package/dist/core/extensions/types.js.map +1 -0
  284. package/dist/core/extensions/virtual-modules.d.ts +3 -0
  285. package/dist/core/extensions/virtual-modules.d.ts.map +1 -0
  286. package/dist/core/extensions/virtual-modules.js +41 -0
  287. package/dist/core/extensions/virtual-modules.js.map +1 -0
  288. package/dist/core/extensions/wrapper.d.ts +20 -0
  289. package/dist/core/extensions/wrapper.d.ts.map +1 -0
  290. package/dist/core/extensions/wrapper.js +22 -0
  291. package/dist/core/extensions/wrapper.js.map +1 -0
  292. package/dist/core/footer-data-provider.d.ts +64 -0
  293. package/dist/core/footer-data-provider.d.ts.map +1 -0
  294. package/dist/core/footer-data-provider.js +338 -0
  295. package/dist/core/footer-data-provider.js.map +1 -0
  296. package/dist/core/http-dispatcher.d.ts +22 -0
  297. package/dist/core/http-dispatcher.d.ts.map +1 -0
  298. package/dist/core/http-dispatcher.js +98 -0
  299. package/dist/core/http-dispatcher.js.map +1 -0
  300. package/dist/core/index.d.ts +14 -0
  301. package/dist/core/index.d.ts.map +1 -0
  302. package/dist/core/index.js +13 -0
  303. package/dist/core/index.js.map +1 -0
  304. package/dist/core/key-id-schema.d.ts +6 -0
  305. package/dist/core/key-id-schema.d.ts.map +1 -0
  306. package/dist/core/key-id-schema.js +16 -0
  307. package/dist/core/key-id-schema.js.map +1 -0
  308. package/dist/core/keybindings-schema.d.ts +4 -0
  309. package/dist/core/keybindings-schema.d.ts.map +1 -0
  310. package/dist/core/keybindings-schema.js +16 -0
  311. package/dist/core/keybindings-schema.js.map +1 -0
  312. package/dist/core/keybindings.d.ts +568 -0
  313. package/dist/core/keybindings.d.ts.map +1 -0
  314. package/dist/core/keybindings.js +328 -0
  315. package/dist/core/keybindings.js.map +1 -0
  316. package/dist/core/mcp-servers.d.ts +139 -0
  317. package/dist/core/mcp-servers.d.ts.map +1 -0
  318. package/dist/core/mcp-servers.js +232 -0
  319. package/dist/core/mcp-servers.js.map +1 -0
  320. package/dist/core/messages.d.ts +77 -0
  321. package/dist/core/messages.d.ts.map +1 -0
  322. package/dist/core/messages.js +124 -0
  323. package/dist/core/messages.js.map +1 -0
  324. package/dist/core/model-config.d.ts +2312 -0
  325. package/dist/core/model-config.d.ts.map +1 -0
  326. package/dist/core/model-config.js +168 -0
  327. package/dist/core/model-config.js.map +1 -0
  328. package/dist/core/model-registry.d.ts +63 -0
  329. package/dist/core/model-registry.d.ts.map +1 -0
  330. package/dist/core/model-registry.js +144 -0
  331. package/dist/core/model-registry.js.map +1 -0
  332. package/dist/core/model-resolver.d.ts +137 -0
  333. package/dist/core/model-resolver.d.ts.map +1 -0
  334. package/dist/core/model-resolver.js +491 -0
  335. package/dist/core/model-resolver.js.map +1 -0
  336. package/dist/core/model-runtime.d.ts +145 -0
  337. package/dist/core/model-runtime.d.ts.map +1 -0
  338. package/dist/core/model-runtime.js +767 -0
  339. package/dist/core/model-runtime.js.map +1 -0
  340. package/dist/core/models-store.d.ts +22 -0
  341. package/dist/core/models-store.d.ts.map +1 -0
  342. package/dist/core/models-store.js +115 -0
  343. package/dist/core/models-store.js.map +1 -0
  344. package/dist/core/nested-tool-calls.d.ts +103 -0
  345. package/dist/core/nested-tool-calls.d.ts.map +1 -0
  346. package/dist/core/nested-tool-calls.js +179 -0
  347. package/dist/core/nested-tool-calls.js.map +1 -0
  348. package/dist/core/output-guard.d.ts +7 -0
  349. package/dist/core/output-guard.d.ts.map +1 -0
  350. package/dist/core/output-guard.js +89 -0
  351. package/dist/core/output-guard.js.map +1 -0
  352. package/dist/core/package-manager.d.ts +226 -0
  353. package/dist/core/package-manager.d.ts.map +1 -0
  354. package/dist/core/package-manager.js +2275 -0
  355. package/dist/core/package-manager.js.map +1 -0
  356. package/dist/core/pi-manifest.d.ts +9 -0
  357. package/dist/core/pi-manifest.d.ts.map +1 -0
  358. package/dist/core/pi-manifest.js +30 -0
  359. package/dist/core/pi-manifest.js.map +1 -0
  360. package/dist/core/project-trust.d.ts +15 -0
  361. package/dist/core/project-trust.d.ts.map +1 -0
  362. package/dist/core/project-trust.js +60 -0
  363. package/dist/core/project-trust.js.map +1 -0
  364. package/dist/core/prompt-templates.d.ts +59 -0
  365. package/dist/core/prompt-templates.d.ts.map +1 -0
  366. package/dist/core/prompt-templates.js +267 -0
  367. package/dist/core/prompt-templates.js.map +1 -0
  368. package/dist/core/provider-composer.d.ts +81 -0
  369. package/dist/core/provider-composer.d.ts.map +1 -0
  370. package/dist/core/provider-composer.js +492 -0
  371. package/dist/core/provider-composer.js.map +1 -0
  372. package/dist/core/radius.d.ts +7 -0
  373. package/dist/core/radius.d.ts.map +1 -0
  374. package/dist/core/radius.js +10 -0
  375. package/dist/core/radius.js.map +1 -0
  376. package/dist/core/remote-catalog-provider.d.ts +23 -0
  377. package/dist/core/remote-catalog-provider.d.ts.map +1 -0
  378. package/dist/core/remote-catalog-provider.js +190 -0
  379. package/dist/core/remote-catalog-provider.js.map +1 -0
  380. package/dist/core/resolve-config-value.d.ts +30 -0
  381. package/dist/core/resolve-config-value.d.ts.map +1 -0
  382. package/dist/core/resolve-config-value.js +247 -0
  383. package/dist/core/resolve-config-value.js.map +1 -0
  384. package/dist/core/resource-loader.d.ts +232 -0
  385. package/dist/core/resource-loader.d.ts.map +1 -0
  386. package/dist/core/resource-loader.js +1026 -0
  387. package/dist/core/resource-loader.js.map +1 -0
  388. package/dist/core/runtime-credentials.d.ts +15 -0
  389. package/dist/core/runtime-credentials.d.ts.map +1 -0
  390. package/dist/core/runtime-credentials.js +39 -0
  391. package/dist/core/runtime-credentials.js.map +1 -0
  392. package/dist/core/sdk.d.ts +117 -0
  393. package/dist/core/sdk.d.ts.map +1 -0
  394. package/dist/core/sdk.js +329 -0
  395. package/dist/core/sdk.js.map +1 -0
  396. package/dist/core/session-cwd.d.ts +19 -0
  397. package/dist/core/session-cwd.d.ts.map +1 -0
  398. package/dist/core/session-cwd.js +38 -0
  399. package/dist/core/session-cwd.js.map +1 -0
  400. package/dist/core/session-delete.d.ts +8 -0
  401. package/dist/core/session-delete.d.ts.map +1 -0
  402. package/dist/core/session-delete.js +37 -0
  403. package/dist/core/session-delete.js.map +1 -0
  404. package/dist/core/session-export.d.ts +8 -0
  405. package/dist/core/session-export.d.ts.map +1 -0
  406. package/dist/core/session-export.js +33 -0
  407. package/dist/core/session-export.js.map +1 -0
  408. package/dist/core/session-manager.d.ts +422 -0
  409. package/dist/core/session-manager.d.ts.map +1 -0
  410. package/dist/core/session-manager.js +1568 -0
  411. package/dist/core/session-manager.js.map +1 -0
  412. package/dist/core/session-move.d.ts +3 -0
  413. package/dist/core/session-move.d.ts.map +1 -0
  414. package/dist/core/session-move.js +133 -0
  415. package/dist/core/session-move.js.map +1 -0
  416. package/dist/core/session-ownership.d.ts +13 -0
  417. package/dist/core/session-ownership.d.ts.map +1 -0
  418. package/dist/core/session-ownership.js +205 -0
  419. package/dist/core/session-ownership.js.map +1 -0
  420. package/dist/core/settings-defaults.d.ts +66 -0
  421. package/dist/core/settings-defaults.d.ts.map +1 -0
  422. package/dist/core/settings-defaults.js +67 -0
  423. package/dist/core/settings-defaults.js.map +1 -0
  424. package/dist/core/settings-diagnostics.d.ts +9 -0
  425. package/dist/core/settings-diagnostics.d.ts.map +1 -0
  426. package/dist/core/settings-diagnostics.js +21 -0
  427. package/dist/core/settings-diagnostics.js.map +1 -0
  428. package/dist/core/settings-manager.d.ts +253 -0
  429. package/dist/core/settings-manager.d.ts.map +1 -0
  430. package/dist/core/settings-manager.js +1154 -0
  431. package/dist/core/settings-manager.js.map +1 -0
  432. package/dist/core/settings-schema.d.ts +231 -0
  433. package/dist/core/settings-schema.d.ts.map +1 -0
  434. package/dist/core/settings-schema.js +294 -0
  435. package/dist/core/settings-schema.js.map +1 -0
  436. package/dist/core/skills.d.ts +63 -0
  437. package/dist/core/skills.d.ts.map +1 -0
  438. package/dist/core/skills.js +412 -0
  439. package/dist/core/skills.js.map +1 -0
  440. package/dist/core/slash-commands.d.ts +15 -0
  441. package/dist/core/slash-commands.d.ts.map +1 -0
  442. package/dist/core/slash-commands.js +28 -0
  443. package/dist/core/slash-commands.js.map +1 -0
  444. package/dist/core/source-info.d.ts +33 -0
  445. package/dist/core/source-info.d.ts.map +1 -0
  446. package/dist/core/source-info.js +43 -0
  447. package/dist/core/source-info.js.map +1 -0
  448. package/dist/core/system-prompt.d.ts +77 -0
  449. package/dist/core/system-prompt.d.ts.map +1 -0
  450. package/dist/core/system-prompt.js +152 -0
  451. package/dist/core/system-prompt.js.map +1 -0
  452. package/dist/core/telemetry.d.ts +3 -0
  453. package/dist/core/telemetry.d.ts.map +1 -0
  454. package/dist/core/telemetry.js +9 -0
  455. package/dist/core/telemetry.js.map +1 -0
  456. package/dist/core/timings.d.ts +10 -0
  457. package/dist/core/timings.d.ts.map +1 -0
  458. package/dist/core/timings.js +41 -0
  459. package/dist/core/timings.js.map +1 -0
  460. package/dist/core/tools/bash.d.ts +100 -0
  461. package/dist/core/tools/bash.d.ts.map +1 -0
  462. package/dist/core/tools/bash.js +333 -0
  463. package/dist/core/tools/bash.js.map +1 -0
  464. package/dist/core/tools/edit-diff.d.ts +101 -0
  465. package/dist/core/tools/edit-diff.d.ts.map +1 -0
  466. package/dist/core/tools/edit-diff.js +421 -0
  467. package/dist/core/tools/edit-diff.js.map +1 -0
  468. package/dist/core/tools/edit.d.ts +44 -0
  469. package/dist/core/tools/edit.d.ts.map +1 -0
  470. package/dist/core/tools/edit.js +147 -0
  471. package/dist/core/tools/edit.js.map +1 -0
  472. package/dist/core/tools/file-mutation-queue.d.ts +6 -0
  473. package/dist/core/tools/file-mutation-queue.d.ts.map +1 -0
  474. package/dist/core/tools/file-mutation-queue.js +52 -0
  475. package/dist/core/tools/file-mutation-queue.js.map +1 -0
  476. package/dist/core/tools/find.d.ts +42 -0
  477. package/dist/core/tools/find.d.ts.map +1 -0
  478. package/dist/core/tools/find.js +251 -0
  479. package/dist/core/tools/find.js.map +1 -0
  480. package/dist/core/tools/grep.d.ts +41 -0
  481. package/dist/core/tools/grep.d.ts.map +1 -0
  482. package/dist/core/tools/grep.js +254 -0
  483. package/dist/core/tools/grep.js.map +1 -0
  484. package/dist/core/tools/index.d.ts +43 -0
  485. package/dist/core/tools/index.d.ts.map +1 -0
  486. package/dist/core/tools/index.js +129 -0
  487. package/dist/core/tools/index.js.map +1 -0
  488. package/dist/core/tools/ls.d.ts +41 -0
  489. package/dist/core/tools/ls.d.ts.map +1 -0
  490. package/dist/core/tools/ls.js +126 -0
  491. package/dist/core/tools/ls.js.map +1 -0
  492. package/dist/core/tools/output-accumulator.d.ts +63 -0
  493. package/dist/core/tools/output-accumulator.d.ts.map +1 -0
  494. package/dist/core/tools/output-accumulator.js +214 -0
  495. package/dist/core/tools/output-accumulator.js.map +1 -0
  496. package/dist/core/tools/path-utils.d.ts +10 -0
  497. package/dist/core/tools/path-utils.d.ts.map +1 -0
  498. package/dist/core/tools/path-utils.js +99 -0
  499. package/dist/core/tools/path-utils.js.map +1 -0
  500. package/dist/core/tools/powershell.d.ts +16 -0
  501. package/dist/core/tools/powershell.d.ts.map +1 -0
  502. package/dist/core/tools/powershell.js +39 -0
  503. package/dist/core/tools/powershell.js.map +1 -0
  504. package/dist/core/tools/read.d.ts +55 -0
  505. package/dist/core/tools/read.d.ts.map +1 -0
  506. package/dist/core/tools/read.js +186 -0
  507. package/dist/core/tools/read.js.map +1 -0
  508. package/dist/core/tools/render-utils.d.ts +50 -0
  509. package/dist/core/tools/render-utils.d.ts.map +1 -0
  510. package/dist/core/tools/render-utils.js +158 -0
  511. package/dist/core/tools/render-utils.js.map +1 -0
  512. package/dist/core/tools/renderers/bash.d.ts +12 -0
  513. package/dist/core/tools/renderers/bash.d.ts.map +1 -0
  514. package/dist/core/tools/renderers/bash.js +89 -0
  515. package/dist/core/tools/renderers/bash.js.map +1 -0
  516. package/dist/core/tools/renderers/edit.d.ts +23 -0
  517. package/dist/core/tools/renderers/edit.d.ts.map +1 -0
  518. package/dist/core/tools/renderers/edit.js +168 -0
  519. package/dist/core/tools/renderers/edit.js.map +1 -0
  520. package/dist/core/tools/renderers/find.d.ts +10 -0
  521. package/dist/core/tools/renderers/find.d.ts.map +1 -0
  522. package/dist/core/tools/renderers/find.js +64 -0
  523. package/dist/core/tools/renderers/find.js.map +1 -0
  524. package/dist/core/tools/renderers/grep.d.ts +10 -0
  525. package/dist/core/tools/renderers/grep.d.ts.map +1 -0
  526. package/dist/core/tools/renderers/grep.js +69 -0
  527. package/dist/core/tools/renderers/grep.js.map +1 -0
  528. package/dist/core/tools/renderers/index.d.ts +28 -0
  529. package/dist/core/tools/renderers/index.d.ts.map +1 -0
  530. package/dist/core/tools/renderers/index.js +47 -0
  531. package/dist/core/tools/renderers/index.js.map +1 -0
  532. package/dist/core/tools/renderers/ls.d.ts +10 -0
  533. package/dist/core/tools/renderers/ls.d.ts.map +1 -0
  534. package/dist/core/tools/renderers/ls.js +58 -0
  535. package/dist/core/tools/renderers/ls.js.map +1 -0
  536. package/dist/core/tools/renderers/read.d.ts +11 -0
  537. package/dist/core/tools/renderers/read.d.ts.map +1 -0
  538. package/dist/core/tools/renderers/read.js +126 -0
  539. package/dist/core/tools/renderers/read.js.map +1 -0
  540. package/dist/core/tools/renderers/write.d.ts +10 -0
  541. package/dist/core/tools/renderers/write.d.ts.map +1 -0
  542. package/dist/core/tools/renderers/write.js +153 -0
  543. package/dist/core/tools/renderers/write.js.map +1 -0
  544. package/dist/core/tools/tool-definition-wrapper.d.ts +16 -0
  545. package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -0
  546. package/dist/core/tools/tool-definition-wrapper.js +38 -0
  547. package/dist/core/tools/tool-definition-wrapper.js.map +1 -0
  548. package/dist/core/tools/truncate.d.ts +84 -0
  549. package/dist/core/tools/truncate.d.ts.map +1 -0
  550. package/dist/core/tools/truncate.js +244 -0
  551. package/dist/core/tools/truncate.js.map +1 -0
  552. package/dist/core/tools/write.d.ts +30 -0
  553. package/dist/core/tools/write.d.ts.map +1 -0
  554. package/dist/core/tools/write.js +61 -0
  555. package/dist/core/tools/write.js.map +1 -0
  556. package/dist/core/trust-manager.d.ts +36 -0
  557. package/dist/core/trust-manager.d.ts.map +1 -0
  558. package/dist/core/trust-manager.js +204 -0
  559. package/dist/core/trust-manager.js.map +1 -0
  560. package/dist/core/usage-totals.d.ts +21 -0
  561. package/dist/core/usage-totals.d.ts.map +1 -0
  562. package/dist/core/usage-totals.js +81 -0
  563. package/dist/core/usage-totals.js.map +1 -0
  564. package/dist/core/virtual-models.d.ts +117 -0
  565. package/dist/core/virtual-models.d.ts.map +1 -0
  566. package/dist/core/virtual-models.js +124 -0
  567. package/dist/core/virtual-models.js.map +1 -0
  568. package/dist/extensions/codemode/execute.d.ts +16 -0
  569. package/dist/extensions/codemode/execute.d.ts.map +1 -0
  570. package/dist/extensions/codemode/execute.js +740 -0
  571. package/dist/extensions/codemode/execute.js.map +1 -0
  572. package/dist/extensions/codemode/execute.lazy.d.ts +3 -0
  573. package/dist/extensions/codemode/execute.lazy.d.ts.map +1 -0
  574. package/dist/extensions/codemode/execute.lazy.js +3 -0
  575. package/dist/extensions/codemode/execute.lazy.js.map +1 -0
  576. package/dist/extensions/codemode/index.d.ts +21 -0
  577. package/dist/extensions/codemode/index.d.ts.map +1 -0
  578. package/dist/extensions/codemode/index.js +33 -0
  579. package/dist/extensions/codemode/index.js.map +1 -0
  580. package/dist/extensions/codemode/renderer.d.ts +12 -0
  581. package/dist/extensions/codemode/renderer.d.ts.map +1 -0
  582. package/dist/extensions/codemode/renderer.js +143 -0
  583. package/dist/extensions/codemode/renderer.js.map +1 -0
  584. package/dist/extensions/codemode/tool.d.ts +124 -0
  585. package/dist/extensions/codemode/tool.d.ts.map +1 -0
  586. package/dist/extensions/codemode/tool.js +313 -0
  587. package/dist/extensions/codemode/tool.js.map +1 -0
  588. package/dist/extensions/codemode/worker.d.ts +7 -0
  589. package/dist/extensions/codemode/worker.d.ts.map +1 -0
  590. package/dist/extensions/codemode/worker.js +7 -0
  591. package/dist/extensions/codemode/worker.js.map +1 -0
  592. package/dist/extensions/index.d.ts +3 -0
  593. package/dist/extensions/index.d.ts.map +1 -0
  594. package/dist/extensions/index.js +13 -0
  595. package/dist/extensions/index.js.map +1 -0
  596. package/dist/extensions/llama/client.d.ts +69 -0
  597. package/dist/extensions/llama/client.d.ts.map +1 -0
  598. package/dist/extensions/llama/client.js +313 -0
  599. package/dist/extensions/llama/client.js.map +1 -0
  600. package/dist/extensions/llama/huggingface.d.ts +23 -0
  601. package/dist/extensions/llama/huggingface.d.ts.map +1 -0
  602. package/dist/extensions/llama/huggingface.js +141 -0
  603. package/dist/extensions/llama/huggingface.js.map +1 -0
  604. package/dist/extensions/llama/index.d.ts +3 -0
  605. package/dist/extensions/llama/index.d.ts.map +1 -0
  606. package/dist/extensions/llama/index.js +219 -0
  607. package/dist/extensions/llama/index.js.map +1 -0
  608. package/dist/extensions/llama/provider.d.ts +12 -0
  609. package/dist/extensions/llama/provider.d.ts.map +1 -0
  610. package/dist/extensions/llama/provider.js +236 -0
  611. package/dist/extensions/llama/provider.js.map +1 -0
  612. package/dist/extensions/llama/ui.d.ts +42 -0
  613. package/dist/extensions/llama/ui.d.ts.map +1 -0
  614. package/dist/extensions/llama/ui.js +428 -0
  615. package/dist/extensions/llama/ui.js.map +1 -0
  616. package/dist/extensions/mcp/cli.d.ts +21 -0
  617. package/dist/extensions/mcp/cli.d.ts.map +1 -0
  618. package/dist/extensions/mcp/cli.js +494 -0
  619. package/dist/extensions/mcp/cli.js.map +1 -0
  620. package/dist/extensions/mcp/cli.lazy.d.ts +3 -0
  621. package/dist/extensions/mcp/cli.lazy.d.ts.map +1 -0
  622. package/dist/extensions/mcp/cli.lazy.js +3 -0
  623. package/dist/extensions/mcp/cli.lazy.js.map +1 -0
  624. package/dist/extensions/mcp/config.d.ts +84 -0
  625. package/dist/extensions/mcp/config.d.ts.map +1 -0
  626. package/dist/extensions/mcp/config.js +195 -0
  627. package/dist/extensions/mcp/config.js.map +1 -0
  628. package/dist/extensions/mcp/index.d.ts +79 -0
  629. package/dist/extensions/mcp/index.d.ts.map +1 -0
  630. package/dist/extensions/mcp/index.js +1205 -0
  631. package/dist/extensions/mcp/index.js.map +1 -0
  632. package/dist/extensions/mcp/log.d.ts +16 -0
  633. package/dist/extensions/mcp/log.d.ts.map +1 -0
  634. package/dist/extensions/mcp/log.js +66 -0
  635. package/dist/extensions/mcp/log.js.map +1 -0
  636. package/dist/extensions/mcp/oauth.d.ts +102 -0
  637. package/dist/extensions/mcp/oauth.d.ts.map +1 -0
  638. package/dist/extensions/mcp/oauth.js +428 -0
  639. package/dist/extensions/mcp/oauth.js.map +1 -0
  640. package/dist/extensions/mcp/resources.d.ts +36 -0
  641. package/dist/extensions/mcp/resources.d.ts.map +1 -0
  642. package/dist/extensions/mcp/resources.js +261 -0
  643. package/dist/extensions/mcp/resources.js.map +1 -0
  644. package/dist/extensions/mcp/runtime.d.ts +98 -0
  645. package/dist/extensions/mcp/runtime.d.ts.map +1 -0
  646. package/dist/extensions/mcp/runtime.js +378 -0
  647. package/dist/extensions/mcp/runtime.js.map +1 -0
  648. package/dist/extensions/mcp/runtime.lazy.d.ts +3 -0
  649. package/dist/extensions/mcp/runtime.lazy.d.ts.map +1 -0
  650. package/dist/extensions/mcp/runtime.lazy.js +3 -0
  651. package/dist/extensions/mcp/runtime.lazy.js.map +1 -0
  652. package/dist/extensions/mcp/tools.d.ts +86 -0
  653. package/dist/extensions/mcp/tools.d.ts.map +1 -0
  654. package/dist/extensions/mcp/tools.js +309 -0
  655. package/dist/extensions/mcp/tools.js.map +1 -0
  656. package/dist/extensions/mcp/ui.d.ts +61 -0
  657. package/dist/extensions/mcp/ui.d.ts.map +1 -0
  658. package/dist/extensions/mcp/ui.js +195 -0
  659. package/dist/extensions/mcp/ui.js.map +1 -0
  660. package/dist/extensions/tool-search/index.d.ts +12 -0
  661. package/dist/extensions/tool-search/index.d.ts.map +1 -0
  662. package/dist/extensions/tool-search/index.js +15 -0
  663. package/dist/extensions/tool-search/index.js.map +1 -0
  664. package/dist/extensions/tool-search/tool.d.ts +75 -0
  665. package/dist/extensions/tool-search/tool.d.ts.map +1 -0
  666. package/dist/extensions/tool-search/tool.js +210 -0
  667. package/dist/extensions/tool-search/tool.js.map +1 -0
  668. package/dist/index.d.ts +45 -0
  669. package/dist/index.d.ts.map +1 -0
  670. package/dist/index.js +54 -0
  671. package/dist/index.js.map +1 -0
  672. package/dist/main.d.ts +16 -0
  673. package/dist/main.d.ts.map +1 -0
  674. package/dist/main.js +836 -0
  675. package/dist/main.js.map +1 -0
  676. package/dist/migrations.d.ts +33 -0
  677. package/dist/migrations.d.ts.map +1 -0
  678. package/dist/migrations.js +282 -0
  679. package/dist/migrations.js.map +1 -0
  680. package/dist/modes/index.d.ts +10 -0
  681. package/dist/modes/index.d.ts.map +1 -0
  682. package/dist/modes/index.js +8 -0
  683. package/dist/modes/index.js.map +1 -0
  684. package/dist/modes/interactive/assets/clankolas.png +0 -0
  685. package/dist/modes/interactive/bug-report.d.ts +16 -0
  686. package/dist/modes/interactive/bug-report.d.ts.map +1 -0
  687. package/dist/modes/interactive/bug-report.js +210 -0
  688. package/dist/modes/interactive/bug-report.js.map +1 -0
  689. package/dist/modes/interactive/chat-viewport.d.ts +20 -0
  690. package/dist/modes/interactive/chat-viewport.d.ts.map +1 -0
  691. package/dist/modes/interactive/chat-viewport.js +28 -0
  692. package/dist/modes/interactive/chat-viewport.js.map +1 -0
  693. package/dist/modes/interactive/components/armin.d.ts +37 -0
  694. package/dist/modes/interactive/components/armin.d.ts.map +1 -0
  695. package/dist/modes/interactive/components/armin.js +335 -0
  696. package/dist/modes/interactive/components/armin.js.map +1 -0
  697. package/dist/modes/interactive/components/assistant-message.d.ts +28 -0
  698. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -0
  699. package/dist/modes/interactive/components/assistant-message.js +168 -0
  700. package/dist/modes/interactive/components/assistant-message.js.map +1 -0
  701. package/dist/modes/interactive/components/auth-url.d.ts +14 -0
  702. package/dist/modes/interactive/components/auth-url.d.ts.map +1 -0
  703. package/dist/modes/interactive/components/auth-url.js +37 -0
  704. package/dist/modes/interactive/components/auth-url.js.map +1 -0
  705. package/dist/modes/interactive/components/bash-execution.d.ts +38 -0
  706. package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -0
  707. package/dist/modes/interactive/components/bash-execution.js +178 -0
  708. package/dist/modes/interactive/components/bash-execution.js.map +1 -0
  709. package/dist/modes/interactive/components/bordered-loader.d.ts +16 -0
  710. package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -0
  711. package/dist/modes/interactive/components/bordered-loader.js +54 -0
  712. package/dist/modes/interactive/components/bordered-loader.js.map +1 -0
  713. package/dist/modes/interactive/components/branch-summary-message.d.ts +17 -0
  714. package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -0
  715. package/dist/modes/interactive/components/branch-summary-message.js +54 -0
  716. package/dist/modes/interactive/components/branch-summary-message.js.map +1 -0
  717. package/dist/modes/interactive/components/compaction-summary-message.d.ts +17 -0
  718. package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -0
  719. package/dist/modes/interactive/components/compaction-summary-message.js +55 -0
  720. package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -0
  721. package/dist/modes/interactive/components/config-selector.d.ts +102 -0
  722. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -0
  723. package/dist/modes/interactive/components/config-selector.js +771 -0
  724. package/dist/modes/interactive/components/config-selector.js.map +1 -0
  725. package/dist/modes/interactive/components/countdown-timer.d.ts +14 -0
  726. package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -0
  727. package/dist/modes/interactive/components/countdown-timer.js +33 -0
  728. package/dist/modes/interactive/components/countdown-timer.js.map +1 -0
  729. package/dist/modes/interactive/components/custom-editor.d.ts +30 -0
  730. package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -0
  731. package/dist/modes/interactive/components/custom-editor.js +122 -0
  732. package/dist/modes/interactive/components/custom-editor.js.map +1 -0
  733. package/dist/modes/interactive/components/custom-entry.d.ts +21 -0
  734. package/dist/modes/interactive/components/custom-entry.d.ts.map +1 -0
  735. package/dist/modes/interactive/components/custom-entry.js +58 -0
  736. package/dist/modes/interactive/components/custom-entry.js.map +1 -0
  737. package/dist/modes/interactive/components/custom-message.d.ts +22 -0
  738. package/dist/modes/interactive/components/custom-message.d.ts.map +1 -0
  739. package/dist/modes/interactive/components/custom-message.js +88 -0
  740. package/dist/modes/interactive/components/custom-message.js.map +1 -0
  741. package/dist/modes/interactive/components/diff.d.ts +12 -0
  742. package/dist/modes/interactive/components/diff.d.ts.map +1 -0
  743. package/dist/modes/interactive/components/diff.js +133 -0
  744. package/dist/modes/interactive/components/diff.js.map +1 -0
  745. package/dist/modes/interactive/components/dynamic-border.d.ts +15 -0
  746. package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -0
  747. package/dist/modes/interactive/components/dynamic-border.js +21 -0
  748. package/dist/modes/interactive/components/dynamic-border.js.map +1 -0
  749. package/dist/modes/interactive/components/earendil-announcement.d.ts +5 -0
  750. package/dist/modes/interactive/components/earendil-announcement.d.ts.map +1 -0
  751. package/dist/modes/interactive/components/earendil-announcement.js +40 -0
  752. package/dist/modes/interactive/components/earendil-announcement.js.map +1 -0
  753. package/dist/modes/interactive/components/easter-egg-3d.d.ts +104 -0
  754. package/dist/modes/interactive/components/easter-egg-3d.d.ts.map +1 -0
  755. package/dist/modes/interactive/components/easter-egg-3d.js +1139 -0
  756. package/dist/modes/interactive/components/easter-egg-3d.js.map +1 -0
  757. package/dist/modes/interactive/components/easter-egg-3d.lazy.d.ts +6 -0
  758. package/dist/modes/interactive/components/easter-egg-3d.lazy.d.ts.map +1 -0
  759. package/dist/modes/interactive/components/easter-egg-3d.lazy.js +23 -0
  760. package/dist/modes/interactive/components/easter-egg-3d.lazy.js.map +1 -0
  761. package/dist/modes/interactive/components/extension-editor.d.ts +24 -0
  762. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -0
  763. package/dist/modes/interactive/components/extension-editor.js +103 -0
  764. package/dist/modes/interactive/components/extension-editor.js.map +1 -0
  765. package/dist/modes/interactive/components/extension-input.d.ts +25 -0
  766. package/dist/modes/interactive/components/extension-input.d.ts.map +1 -0
  767. package/dist/modes/interactive/components/extension-input.js +67 -0
  768. package/dist/modes/interactive/components/extension-input.js.map +1 -0
  769. package/dist/modes/interactive/components/extension-selector.d.ts +27 -0
  770. package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -0
  771. package/dist/modes/interactive/components/extension-selector.js +87 -0
  772. package/dist/modes/interactive/components/extension-selector.js.map +1 -0
  773. package/dist/modes/interactive/components/first-time-setup.d.ts +25 -0
  774. package/dist/modes/interactive/components/first-time-setup.d.ts.map +1 -0
  775. package/dist/modes/interactive/components/first-time-setup.js +109 -0
  776. package/dist/modes/interactive/components/first-time-setup.js.map +1 -0
  777. package/dist/modes/interactive/components/footer.d.ts +39 -0
  778. package/dist/modes/interactive/components/footer.d.ts.map +1 -0
  779. package/dist/modes/interactive/components/footer.js +265 -0
  780. package/dist/modes/interactive/components/footer.js.map +1 -0
  781. package/dist/modes/interactive/components/index.d.ts +33 -0
  782. package/dist/modes/interactive/components/index.d.ts.map +1 -0
  783. package/dist/modes/interactive/components/index.js +34 -0
  784. package/dist/modes/interactive/components/index.js.map +1 -0
  785. package/dist/modes/interactive/components/keybinding-hints.d.ts +13 -0
  786. package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -0
  787. package/dist/modes/interactive/components/keybinding-hints.js +36 -0
  788. package/dist/modes/interactive/components/keybinding-hints.js.map +1 -0
  789. package/dist/modes/interactive/components/login-dialog.d.ts +59 -0
  790. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -0
  791. package/dist/modes/interactive/components/login-dialog.js +289 -0
  792. package/dist/modes/interactive/components/login-dialog.js.map +1 -0
  793. package/dist/modes/interactive/components/markdown-transform.d.ts +3 -0
  794. package/dist/modes/interactive/components/markdown-transform.d.ts.map +1 -0
  795. package/dist/modes/interactive/components/markdown-transform.js +19 -0
  796. package/dist/modes/interactive/components/markdown-transform.js.map +1 -0
  797. package/dist/modes/interactive/components/mermaid.d.ts +11 -0
  798. package/dist/modes/interactive/components/mermaid.d.ts.map +1 -0
  799. package/dist/modes/interactive/components/mermaid.js +75 -0
  800. package/dist/modes/interactive/components/mermaid.js.map +1 -0
  801. package/dist/modes/interactive/components/model-selector.d.ts +61 -0
  802. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -0
  803. package/dist/modes/interactive/components/model-selector.js +372 -0
  804. package/dist/modes/interactive/components/model-selector.js.map +1 -0
  805. package/dist/modes/interactive/components/oauth-selector.d.ts +40 -0
  806. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -0
  807. package/dist/modes/interactive/components/oauth-selector.js +175 -0
  808. package/dist/modes/interactive/components/oauth-selector.js.map +1 -0
  809. package/dist/modes/interactive/components/pi-logo.d.ts +19 -0
  810. package/dist/modes/interactive/components/pi-logo.d.ts.map +1 -0
  811. package/dist/modes/interactive/components/pi-logo.js +37 -0
  812. package/dist/modes/interactive/components/pi-logo.js.map +1 -0
  813. package/dist/modes/interactive/components/radius-login-selector.d.ts +15 -0
  814. package/dist/modes/interactive/components/radius-login-selector.d.ts.map +1 -0
  815. package/dist/modes/interactive/components/radius-login-selector.js +85 -0
  816. package/dist/modes/interactive/components/radius-login-selector.js.map +1 -0
  817. package/dist/modes/interactive/components/scoped-models-selector.d.ts +47 -0
  818. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -0
  819. package/dist/modes/interactive/components/scoped-models-selector.js +337 -0
  820. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -0
  821. package/dist/modes/interactive/components/session-selector-search.d.ts +27 -0
  822. package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -0
  823. package/dist/modes/interactive/components/session-selector-search.js +219 -0
  824. package/dist/modes/interactive/components/session-selector-search.js.map +1 -0
  825. package/dist/modes/interactive/components/session-selector.d.ts +104 -0
  826. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -0
  827. package/dist/modes/interactive/components/session-selector.js +932 -0
  828. package/dist/modes/interactive/components/session-selector.js.map +1 -0
  829. package/dist/modes/interactive/components/settings-selector.d.ts +98 -0
  830. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -0
  831. package/dist/modes/interactive/components/settings-selector.js +753 -0
  832. package/dist/modes/interactive/components/settings-selector.js.map +1 -0
  833. package/dist/modes/interactive/components/settings-submenu.d.ts +72 -0
  834. package/dist/modes/interactive/components/settings-submenu.d.ts.map +1 -0
  835. package/dist/modes/interactive/components/settings-submenu.js +167 -0
  836. package/dist/modes/interactive/components/settings-submenu.js.map +1 -0
  837. package/dist/modes/interactive/components/show-images-selector.d.ts +10 -0
  838. package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -0
  839. package/dist/modes/interactive/components/show-images-selector.js +39 -0
  840. package/dist/modes/interactive/components/show-images-selector.js.map +1 -0
  841. package/dist/modes/interactive/components/skill-invocation-message.d.ts +18 -0
  842. package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -0
  843. package/dist/modes/interactive/components/skill-invocation-message.js +57 -0
  844. package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -0
  845. package/dist/modes/interactive/components/status-indicator.d.ts +30 -0
  846. package/dist/modes/interactive/components/status-indicator.d.ts.map +1 -0
  847. package/dist/modes/interactive/components/status-indicator.js +67 -0
  848. package/dist/modes/interactive/components/status-indicator.js.map +1 -0
  849. package/dist/modes/interactive/components/theme-selector.d.ts +11 -0
  850. package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -0
  851. package/dist/modes/interactive/components/theme-selector.js +50 -0
  852. package/dist/modes/interactive/components/theme-selector.js.map +1 -0
  853. package/dist/modes/interactive/components/themed-text.d.ts +17 -0
  854. package/dist/modes/interactive/components/themed-text.d.ts.map +1 -0
  855. package/dist/modes/interactive/components/themed-text.js +29 -0
  856. package/dist/modes/interactive/components/themed-text.js.map +1 -0
  857. package/dist/modes/interactive/components/thinking-selector.d.ts +23 -0
  858. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -0
  859. package/dist/modes/interactive/components/thinking-selector.js +109 -0
  860. package/dist/modes/interactive/components/thinking-selector.js.map +1 -0
  861. package/dist/modes/interactive/components/tool-execution.d.ts +79 -0
  862. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -0
  863. package/dist/modes/interactive/components/tool-execution.js +334 -0
  864. package/dist/modes/interactive/components/tool-execution.js.map +1 -0
  865. package/dist/modes/interactive/components/tree-selector.d.ts +95 -0
  866. package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -0
  867. package/dist/modes/interactive/components/tree-selector.js +1250 -0
  868. package/dist/modes/interactive/components/tree-selector.js.map +1 -0
  869. package/dist/modes/interactive/components/trust-selector.d.ts +23 -0
  870. package/dist/modes/interactive/components/trust-selector.d.ts.map +1 -0
  871. package/dist/modes/interactive/components/trust-selector.js +91 -0
  872. package/dist/modes/interactive/components/trust-selector.js.map +1 -0
  873. package/dist/modes/interactive/components/user-message-selector.d.ts +31 -0
  874. package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -0
  875. package/dist/modes/interactive/components/user-message-selector.js +122 -0
  876. package/dist/modes/interactive/components/user-message-selector.js.map +1 -0
  877. package/dist/modes/interactive/components/user-message.d.ts +18 -0
  878. package/dist/modes/interactive/components/user-message.d.ts.map +1 -0
  879. package/dist/modes/interactive/components/user-message.js +54 -0
  880. package/dist/modes/interactive/components/user-message.js.map +1 -0
  881. package/dist/modes/interactive/components/visual-truncate.d.ts +48 -0
  882. package/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -0
  883. package/dist/modes/interactive/components/visual-truncate.js +66 -0
  884. package/dist/modes/interactive/components/visual-truncate.js.map +1 -0
  885. package/dist/modes/interactive/external-editor.d.ts +12 -0
  886. package/dist/modes/interactive/external-editor.d.ts.map +1 -0
  887. package/dist/modes/interactive/external-editor.js +38 -0
  888. package/dist/modes/interactive/external-editor.js.map +1 -0
  889. package/dist/modes/interactive/interactive-mode.d.ts +491 -0
  890. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -0
  891. package/dist/modes/interactive/interactive-mode.js +6060 -0
  892. package/dist/modes/interactive/interactive-mode.js.map +1 -0
  893. package/dist/modes/interactive/model-catalog-refresh.d.ts +7 -0
  894. package/dist/modes/interactive/model-catalog-refresh.d.ts.map +1 -0
  895. package/dist/modes/interactive/model-catalog-refresh.js +34 -0
  896. package/dist/modes/interactive/model-catalog-refresh.js.map +1 -0
  897. package/dist/modes/interactive/model-search.d.ts +22 -0
  898. package/dist/modes/interactive/model-search.d.ts.map +1 -0
  899. package/dist/modes/interactive/model-search.js +36 -0
  900. package/dist/modes/interactive/model-search.js.map +1 -0
  901. package/dist/modes/interactive/program-status-reporter.d.ts +34 -0
  902. package/dist/modes/interactive/program-status-reporter.d.ts.map +1 -0
  903. package/dist/modes/interactive/program-status-reporter.js +110 -0
  904. package/dist/modes/interactive/program-status-reporter.js.map +1 -0
  905. package/dist/modes/interactive/session-share.d.ts +18 -0
  906. package/dist/modes/interactive/session-share.d.ts.map +1 -0
  907. package/dist/modes/interactive/session-share.js +195 -0
  908. package/dist/modes/interactive/session-share.js.map +1 -0
  909. package/dist/modes/interactive/theme/dark.json +78 -0
  910. package/dist/modes/interactive/theme/light.json +78 -0
  911. package/dist/modes/interactive/theme/system-theme.d.ts +55 -0
  912. package/dist/modes/interactive/theme/system-theme.d.ts.map +1 -0
  913. package/dist/modes/interactive/theme/system-theme.js +546 -0
  914. package/dist/modes/interactive/theme/system-theme.js.map +1 -0
  915. package/dist/modes/interactive/theme/theme-controller.d.ts +81 -0
  916. package/dist/modes/interactive/theme/theme-controller.d.ts.map +1 -0
  917. package/dist/modes/interactive/theme/theme-controller.js +210 -0
  918. package/dist/modes/interactive/theme/theme-controller.js.map +1 -0
  919. package/dist/modes/interactive/theme/theme-schema.d.ts +28 -0
  920. package/dist/modes/interactive/theme/theme-schema.d.ts.map +1 -0
  921. package/dist/modes/interactive/theme/theme-schema.js +105 -0
  922. package/dist/modes/interactive/theme/theme-schema.js.map +1 -0
  923. package/dist/modes/interactive/theme/theme-tokens.d.ts +257 -0
  924. package/dist/modes/interactive/theme/theme-tokens.d.ts.map +1 -0
  925. package/dist/modes/interactive/theme/theme-tokens.js +94 -0
  926. package/dist/modes/interactive/theme/theme-tokens.js.map +1 -0
  927. package/dist/modes/interactive/theme/theme.d.ts +155 -0
  928. package/dist/modes/interactive/theme/theme.d.ts.map +1 -0
  929. package/dist/modes/interactive/theme/theme.js +905 -0
  930. package/dist/modes/interactive/theme/theme.js.map +1 -0
  931. package/dist/modes/interactive/tui-renderer.d.ts +22 -0
  932. package/dist/modes/interactive/tui-renderer.d.ts.map +1 -0
  933. package/dist/modes/interactive/tui-renderer.js +67 -0
  934. package/dist/modes/interactive/tui-renderer.js.map +1 -0
  935. package/dist/modes/json-event.d.ts +34 -0
  936. package/dist/modes/json-event.d.ts.map +1 -0
  937. package/dist/modes/json-event.js +29 -0
  938. package/dist/modes/json-event.js.map +1 -0
  939. package/dist/modes/print-mode.d.ts +28 -0
  940. package/dist/modes/print-mode.d.ts.map +1 -0
  941. package/dist/modes/print-mode.js +146 -0
  942. package/dist/modes/print-mode.js.map +1 -0
  943. package/dist/modes/rpc/jsonl.d.ts +17 -0
  944. package/dist/modes/rpc/jsonl.d.ts.map +1 -0
  945. package/dist/modes/rpc/jsonl.js +49 -0
  946. package/dist/modes/rpc/jsonl.js.map +1 -0
  947. package/dist/modes/rpc/rpc-client.d.ts +254 -0
  948. package/dist/modes/rpc/rpc-client.d.ts.map +1 -0
  949. package/dist/modes/rpc/rpc-client.js +499 -0
  950. package/dist/modes/rpc/rpc-client.js.map +1 -0
  951. package/dist/modes/rpc/rpc-mode.d.ts +20 -0
  952. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -0
  953. package/dist/modes/rpc/rpc-mode.js +655 -0
  954. package/dist/modes/rpc/rpc-mode.js.map +1 -0
  955. package/dist/modes/rpc/rpc-types.d.ts +478 -0
  956. package/dist/modes/rpc/rpc-types.d.ts.map +1 -0
  957. package/dist/modes/rpc/rpc-types.js +8 -0
  958. package/dist/modes/rpc/rpc-types.js.map +1 -0
  959. package/dist/package-manager-cli.d.ts +9 -0
  960. package/dist/package-manager-cli.d.ts.map +1 -0
  961. package/dist/package-manager-cli.js +1015 -0
  962. package/dist/package-manager-cli.js.map +1 -0
  963. package/dist/rpc-entry.d.ts +3 -0
  964. package/dist/rpc-entry.d.ts.map +1 -0
  965. package/dist/rpc-entry.js +11 -0
  966. package/dist/rpc-entry.js.map +1 -0
  967. package/dist/utils/abort.d.ts +5 -0
  968. package/dist/utils/abort.d.ts.map +1 -0
  969. package/dist/utils/abort.js +48 -0
  970. package/dist/utils/abort.js.map +1 -0
  971. package/dist/utils/ansi.d.ts +10 -0
  972. package/dist/utils/ansi.d.ts.map +1 -0
  973. package/dist/utils/ansi.js +74 -0
  974. package/dist/utils/ansi.js.map +1 -0
  975. package/dist/utils/changelog.d.ts +22 -0
  976. package/dist/utils/changelog.d.ts.map +1 -0
  977. package/dist/utils/changelog.js +165 -0
  978. package/dist/utils/changelog.js.map +1 -0
  979. package/dist/utils/child-process.d.ts +18 -0
  980. package/dist/utils/child-process.d.ts.map +1 -0
  981. package/dist/utils/child-process.js +106 -0
  982. package/dist/utils/child-process.js.map +1 -0
  983. package/dist/utils/clipboard-command.d.ts +7 -0
  984. package/dist/utils/clipboard-command.d.ts.map +1 -0
  985. package/dist/utils/clipboard-command.js +48 -0
  986. package/dist/utils/clipboard-command.js.map +1 -0
  987. package/dist/utils/clipboard-image.d.ts +11 -0
  988. package/dist/utils/clipboard-image.d.ts.map +1 -0
  989. package/dist/utils/clipboard-image.js +214 -0
  990. package/dist/utils/clipboard-image.js.map +1 -0
  991. package/dist/utils/clipboard.d.ts +6 -0
  992. package/dist/utils/clipboard.d.ts.map +1 -0
  993. package/dist/utils/clipboard.js +162 -0
  994. package/dist/utils/clipboard.js.map +1 -0
  995. package/dist/utils/deprecation.d.ts +4 -0
  996. package/dist/utils/deprecation.d.ts.map +1 -0
  997. package/dist/utils/deprecation.js +13 -0
  998. package/dist/utils/deprecation.js.map +1 -0
  999. package/dist/utils/exif-orientation.d.ts +5 -0
  1000. package/dist/utils/exif-orientation.d.ts.map +1 -0
  1001. package/dist/utils/exif-orientation.js +157 -0
  1002. package/dist/utils/exif-orientation.js.map +1 -0
  1003. package/dist/utils/frontmatter.d.ts +8 -0
  1004. package/dist/utils/frontmatter.d.ts.map +1 -0
  1005. package/dist/utils/frontmatter.js +27 -0
  1006. package/dist/utils/frontmatter.js.map +1 -0
  1007. package/dist/utils/fs-watch.d.ts +5 -0
  1008. package/dist/utils/fs-watch.d.ts.map +1 -0
  1009. package/dist/utils/fs-watch.js +25 -0
  1010. package/dist/utils/fs-watch.js.map +1 -0
  1011. package/dist/utils/git.d.ts +26 -0
  1012. package/dist/utils/git.d.ts.map +1 -0
  1013. package/dist/utils/git.js +195 -0
  1014. package/dist/utils/git.js.map +1 -0
  1015. package/dist/utils/html.d.ts +7 -0
  1016. package/dist/utils/html.d.ts.map +1 -0
  1017. package/dist/utils/html.js +40 -0
  1018. package/dist/utils/html.js.map +1 -0
  1019. package/dist/utils/image-convert.d.ts +22 -0
  1020. package/dist/utils/image-convert.d.ts.map +1 -0
  1021. package/dist/utils/image-convert.js +84 -0
  1022. package/dist/utils/image-convert.js.map +1 -0
  1023. package/dist/utils/image-process.d.ts +18 -0
  1024. package/dist/utils/image-process.d.ts.map +1 -0
  1025. package/dist/utils/image-process.js +83 -0
  1026. package/dist/utils/image-process.js.map +1 -0
  1027. package/dist/utils/image-resize-core.d.ts +42 -0
  1028. package/dist/utils/image-resize-core.d.ts.map +1 -0
  1029. package/dist/utils/image-resize-core.js +129 -0
  1030. package/dist/utils/image-resize-core.js.map +1 -0
  1031. package/dist/utils/image-resize-worker.d.ts +2 -0
  1032. package/dist/utils/image-resize-worker.d.ts.map +1 -0
  1033. package/dist/utils/image-resize-worker.js +32 -0
  1034. package/dist/utils/image-resize-worker.js.map +1 -0
  1035. package/dist/utils/image-resize.d.ts +16 -0
  1036. package/dist/utils/image-resize.d.ts.map +1 -0
  1037. package/dist/utils/image-resize.js +96 -0
  1038. package/dist/utils/image-resize.js.map +1 -0
  1039. package/dist/utils/json.d.ts +3 -0
  1040. package/dist/utils/json.d.ts.map +1 -0
  1041. package/dist/utils/json.js +7 -0
  1042. package/dist/utils/json.js.map +1 -0
  1043. package/dist/utils/management-http.d.ts +25 -0
  1044. package/dist/utils/management-http.d.ts.map +1 -0
  1045. package/dist/utils/management-http.js +54 -0
  1046. package/dist/utils/management-http.js.map +1 -0
  1047. package/dist/utils/mime.d.ts +3 -0
  1048. package/dist/utils/mime.d.ts.map +1 -0
  1049. package/dist/utils/mime.js +110 -0
  1050. package/dist/utils/mime.js.map +1 -0
  1051. package/dist/utils/open-browser.d.ts +9 -0
  1052. package/dist/utils/open-browser.d.ts.map +1 -0
  1053. package/dist/utils/open-browser.js +22 -0
  1054. package/dist/utils/open-browser.js.map +1 -0
  1055. package/dist/utils/output-files.d.ts +15 -0
  1056. package/dist/utils/output-files.d.ts.map +1 -0
  1057. package/dist/utils/output-files.js +30 -0
  1058. package/dist/utils/output-files.js.map +1 -0
  1059. package/dist/utils/paths.d.ts +34 -0
  1060. package/dist/utils/paths.d.ts.map +1 -0
  1061. package/dist/utils/paths.js +115 -0
  1062. package/dist/utils/paths.js.map +1 -0
  1063. package/dist/utils/photon.d.ts +21 -0
  1064. package/dist/utils/photon.d.ts.map +1 -0
  1065. package/dist/utils/photon.js +121 -0
  1066. package/dist/utils/photon.js.map +1 -0
  1067. package/dist/utils/pi-user-agent.d.ts +3 -0
  1068. package/dist/utils/pi-user-agent.d.ts.map +1 -0
  1069. package/dist/utils/pi-user-agent.js +6 -0
  1070. package/dist/utils/pi-user-agent.js.map +1 -0
  1071. package/dist/utils/shell.d.ts +32 -0
  1072. package/dist/utils/shell.d.ts.map +1 -0
  1073. package/dist/utils/shell.js +235 -0
  1074. package/dist/utils/shell.js.map +1 -0
  1075. package/dist/utils/sleep.d.ts +5 -0
  1076. package/dist/utils/sleep.d.ts.map +1 -0
  1077. package/dist/utils/sleep.js +17 -0
  1078. package/dist/utils/sleep.js.map +1 -0
  1079. package/dist/utils/syntax-highlight.d.ts +13 -0
  1080. package/dist/utils/syntax-highlight.d.ts.map +1 -0
  1081. package/dist/utils/syntax-highlight.js +184 -0
  1082. package/dist/utils/syntax-highlight.js.map +1 -0
  1083. package/dist/utils/text.d.ts +8 -0
  1084. package/dist/utils/text.d.ts.map +1 -0
  1085. package/dist/utils/text.js +9 -0
  1086. package/dist/utils/text.js.map +1 -0
  1087. package/dist/utils/tool-result-images.d.ts +21 -0
  1088. package/dist/utils/tool-result-images.d.ts.map +1 -0
  1089. package/dist/utils/tool-result-images.js +48 -0
  1090. package/dist/utils/tool-result-images.js.map +1 -0
  1091. package/dist/utils/tools-manager.d.ts +13 -0
  1092. package/dist/utils/tools-manager.d.ts.map +1 -0
  1093. package/dist/utils/tools-manager.js +339 -0
  1094. package/dist/utils/tools-manager.js.map +1 -0
  1095. package/dist/utils/version-check.d.ts +55 -0
  1096. package/dist/utils/version-check.d.ts.map +1 -0
  1097. package/dist/utils/version-check.js +143 -0
  1098. package/dist/utils/version-check.js.map +1 -0
  1099. package/dist/utils/windows-self-update.d.ts +3 -0
  1100. package/dist/utils/windows-self-update.d.ts.map +1 -0
  1101. package/dist/utils/windows-self-update.js +77 -0
  1102. package/dist/utils/windows-self-update.js.map +1 -0
  1103. package/dist/utils/wsl.d.ts +3 -0
  1104. package/dist/utils/wsl.d.ts.map +1 -0
  1105. package/dist/utils/wsl.js +15 -0
  1106. package/dist/utils/wsl.js.map +1 -0
  1107. package/dist/utils/zip.d.ts +7 -0
  1108. package/dist/utils/zip.d.ts.map +1 -0
  1109. package/dist/utils/zip.js +60 -0
  1110. package/dist/utils/zip.js.map +1 -0
  1111. package/docs/cli-integration.md +106 -0
  1112. package/docs/cli.md +333 -0
  1113. package/docs/codemode.md +230 -0
  1114. package/docs/compaction.md +463 -0
  1115. package/docs/configuration.md +47 -0
  1116. package/docs/containerization.md +183 -0
  1117. package/docs/custom-provider.md +227 -0
  1118. package/docs/docs.json +220 -0
  1119. package/docs/environment-variables.md +102 -0
  1120. package/docs/extensions.md +3333 -0
  1121. package/docs/how-pi-works.md +49 -0
  1122. package/docs/images/doom-extension.png +0 -0
  1123. package/docs/images/exy.png +0 -0
  1124. package/docs/images/interactive-mode.png +0 -0
  1125. package/docs/images/tree-view.png +0 -0
  1126. package/docs/index.md +39 -0
  1127. package/docs/json.md +226 -0
  1128. package/docs/keybindings.md +195 -0
  1129. package/docs/llama-cpp.md +132 -0
  1130. package/docs/mcp.md +272 -0
  1131. package/docs/message-types.md +279 -0
  1132. package/docs/models-configuration.md +196 -0
  1133. package/docs/models.md +225 -0
  1134. package/docs/nvidia-rtx-llama-cpp.md +96 -0
  1135. package/docs/packages.md +151 -0
  1136. package/docs/prompt-templates.md +59 -0
  1137. package/docs/providers.md +247 -0
  1138. package/docs/quickstart.md +140 -0
  1139. package/docs/rpc-commands.md +860 -0
  1140. package/docs/rpc-extension-ui.md +200 -0
  1141. package/docs/rpc.md +193 -0
  1142. package/docs/sdk.md +147 -0
  1143. package/docs/security.md +99 -0
  1144. package/docs/session-format.md +293 -0
  1145. package/docs/sessions.md +66 -0
  1146. package/docs/settings.md +172 -0
  1147. package/docs/shell-aliases.md +93 -0
  1148. package/docs/skills.md +93 -0
  1149. package/docs/slash-commands.md +61 -0
  1150. package/docs/terminal-setup.md +233 -0
  1151. package/docs/termux.md +117 -0
  1152. package/docs/themes.md +138 -0
  1153. package/docs/tmux.md +55 -0
  1154. package/docs/tui.md +197 -0
  1155. package/docs/usage.md +94 -0
  1156. package/docs/virtual-models.md +114 -0
  1157. package/docs/windows.md +81 -0
  1158. package/examples/README.md +36 -0
  1159. package/examples/extensions/README.md +214 -0
  1160. package/examples/extensions/auto-commit-on-exit.ts +49 -0
  1161. package/examples/extensions/bash-spawn-hook.ts +30 -0
  1162. package/examples/extensions/bookmark.ts +50 -0
  1163. package/examples/extensions/border-status-editor.ts +150 -0
  1164. package/examples/extensions/built-in-tool-renderer.ts +225 -0
  1165. package/examples/extensions/claude-rules.ts +86 -0
  1166. package/examples/extensions/commands.ts +72 -0
  1167. package/examples/extensions/confirm-destructive.ts +59 -0
  1168. package/examples/extensions/custom-compaction.ts +117 -0
  1169. package/examples/extensions/custom-footer.ts +64 -0
  1170. package/examples/extensions/custom-header.ts +73 -0
  1171. package/examples/extensions/custom-provider-anthropic/index.ts +613 -0
  1172. package/examples/extensions/custom-provider-anthropic/package-lock.json +24 -0
  1173. package/examples/extensions/custom-provider-anthropic/package.json +19 -0
  1174. package/examples/extensions/custom-provider-gitlab-duo/index.ts +405 -0
  1175. package/examples/extensions/custom-provider-gitlab-duo/package.json +16 -0
  1176. package/examples/extensions/custom-provider-gitlab-duo/test.ts +82 -0
  1177. package/examples/extensions/debug-provider.ts +90 -0
  1178. package/examples/extensions/dirty-repo-guard.ts +56 -0
  1179. package/examples/extensions/doom-overlay/README.md +46 -0
  1180. package/examples/extensions/doom-overlay/doom/build/doom.js +21 -0
  1181. package/examples/extensions/doom-overlay/doom/build/doom.wasm +0 -0
  1182. package/examples/extensions/doom-overlay/doom/build.sh +152 -0
  1183. package/examples/extensions/doom-overlay/doom/doomgeneric_pi.c +72 -0
  1184. package/examples/extensions/doom-overlay/doom-component.ts +132 -0
  1185. package/examples/extensions/doom-overlay/doom-engine.ts +173 -0
  1186. package/examples/extensions/doom-overlay/doom-keys.ts +104 -0
  1187. package/examples/extensions/doom-overlay/index.ts +74 -0
  1188. package/examples/extensions/doom-overlay/wad-finder.ts +55 -0
  1189. package/examples/extensions/dynamic-resources/SKILL.md +8 -0
  1190. package/examples/extensions/dynamic-resources/dynamic.json +81 -0
  1191. package/examples/extensions/dynamic-resources/dynamic.md +5 -0
  1192. package/examples/extensions/dynamic-resources/index.ts +15 -0
  1193. package/examples/extensions/dynamic-tools.ts +74 -0
  1194. package/examples/extensions/entry-renderer.ts +41 -0
  1195. package/examples/extensions/event-bus.ts +43 -0
  1196. package/examples/extensions/file-trigger.ts +41 -0
  1197. package/examples/extensions/git-checkpoint.ts +53 -0
  1198. package/examples/extensions/git-merge-and-resolve.ts +115 -0
  1199. package/examples/extensions/github-issue-autocomplete.ts +185 -0
  1200. package/examples/extensions/gondolin/index.ts +531 -0
  1201. package/examples/extensions/gondolin/package-lock.json +175 -0
  1202. package/examples/extensions/gondolin/package.json +19 -0
  1203. package/examples/extensions/handoff.ts +190 -0
  1204. package/examples/extensions/hello.ts +26 -0
  1205. package/examples/extensions/hidden-thinking-label.ts +53 -0
  1206. package/examples/extensions/inline-bash.ts +94 -0
  1207. package/examples/extensions/input-transform-streaming.ts +39 -0
  1208. package/examples/extensions/input-transform.ts +43 -0
  1209. package/examples/extensions/interactive-shell.ts +196 -0
  1210. package/examples/extensions/jev-router.ts +113 -0
  1211. package/examples/extensions/mac-system-theme.ts +47 -0
  1212. package/examples/extensions/message-renderer.ts +59 -0
  1213. package/examples/extensions/minimal-mode.ts +353 -0
  1214. package/examples/extensions/modal-editor.ts +85 -0
  1215. package/examples/extensions/model-status.ts +31 -0
  1216. package/examples/extensions/notify.ts +57 -0
  1217. package/examples/extensions/overlay-qa-tests.ts +1450 -0
  1218. package/examples/extensions/overlay-test.ts +153 -0
  1219. package/examples/extensions/permission-gate.ts +34 -0
  1220. package/examples/extensions/pirate.ts +47 -0
  1221. package/examples/extensions/plan-mode/README.md +66 -0
  1222. package/examples/extensions/plan-mode/index.ts +394 -0
  1223. package/examples/extensions/plan-mode/utils.ts +168 -0
  1224. package/examples/extensions/preset.ts +438 -0
  1225. package/examples/extensions/project-trust.ts +64 -0
  1226. package/examples/extensions/prompt-customizer.ts +49 -0
  1227. package/examples/extensions/protected-paths.ts +30 -0
  1228. package/examples/extensions/provider-payload.ts +18 -0
  1229. package/examples/extensions/qna.ts +118 -0
  1230. package/examples/extensions/question.ts +286 -0
  1231. package/examples/extensions/questionnaire.ts +448 -0
  1232. package/examples/extensions/rainbow-editor.ts +88 -0
  1233. package/examples/extensions/reload-runtime.ts +49 -0
  1234. package/examples/extensions/rpc-demo.ts +118 -0
  1235. package/examples/extensions/sandbox/index.ts +321 -0
  1236. package/examples/extensions/sandbox/package-lock.json +92 -0
  1237. package/examples/extensions/sandbox/package.json +19 -0
  1238. package/examples/extensions/send-user-message.ts +97 -0
  1239. package/examples/extensions/session-name.ts +27 -0
  1240. package/examples/extensions/shutdown-command.ts +63 -0
  1241. package/examples/extensions/snake.ts +343 -0
  1242. package/examples/extensions/space-invaders.ts +560 -0
  1243. package/examples/extensions/ssh.ts +220 -0
  1244. package/examples/extensions/status-line.ts +32 -0
  1245. package/examples/extensions/structured-output.ts +65 -0
  1246. package/examples/extensions/subagent/README.md +177 -0
  1247. package/examples/extensions/subagent/agents/planner.md +37 -0
  1248. package/examples/extensions/subagent/agents/reviewer.md +35 -0
  1249. package/examples/extensions/subagent/agents/scout.md +50 -0
  1250. package/examples/extensions/subagent/agents/worker.md +24 -0
  1251. package/examples/extensions/subagent/agents.ts +157 -0
  1252. package/examples/extensions/subagent/index.ts +1036 -0
  1253. package/examples/extensions/subagent/prompts/implement-and-review.md +10 -0
  1254. package/examples/extensions/subagent/prompts/implement.md +10 -0
  1255. package/examples/extensions/subagent/prompts/scout-and-plan.md +9 -0
  1256. package/examples/extensions/summarize.ts +199 -0
  1257. package/examples/extensions/system-prompt-header.ts +17 -0
  1258. package/examples/extensions/tic-tac-toe.ts +1008 -0
  1259. package/examples/extensions/timed-confirm.ts +70 -0
  1260. package/examples/extensions/titlebar-spinner.ts +58 -0
  1261. package/examples/extensions/todo.ts +304 -0
  1262. package/examples/extensions/tool-override.ts +144 -0
  1263. package/examples/extensions/tools.ts +148 -0
  1264. package/examples/extensions/trigger-compact.ts +50 -0
  1265. package/examples/extensions/truncated-tool.ts +195 -0
  1266. package/examples/extensions/widget-placement.ts +9 -0
  1267. package/examples/extensions/with-deps/index.ts +32 -0
  1268. package/examples/extensions/with-deps/package-lock.json +31 -0
  1269. package/examples/extensions/with-deps/package.json +22 -0
  1270. package/examples/extensions/working-indicator.ts +123 -0
  1271. package/examples/extensions/working-message-test.ts +25 -0
  1272. package/examples/rpc-client.ts +35 -0
  1273. package/examples/rpc-extension-ui.ts +661 -0
  1274. package/examples/sdk/01-minimal.ts +26 -0
  1275. package/examples/sdk/02-custom-model.ts +49 -0
  1276. package/examples/sdk/03-custom-prompt.ts +75 -0
  1277. package/examples/sdk/04-skills.ts +55 -0
  1278. package/examples/sdk/05-tools.ts +48 -0
  1279. package/examples/sdk/06-extensions.ts +99 -0
  1280. package/examples/sdk/07-context-files.ts +47 -0
  1281. package/examples/sdk/08-prompt-templates.ts +51 -0
  1282. package/examples/sdk/09-api-keys-and-oauth.ts +34 -0
  1283. package/examples/sdk/10-settings.ts +53 -0
  1284. package/examples/sdk/11-sessions.ts +52 -0
  1285. package/examples/sdk/12-full-control.ts +74 -0
  1286. package/examples/sdk/13-session-runtime.ts +67 -0
  1287. package/examples/sdk/14-codemode-mcp.ts +61 -0
  1288. package/examples/sdk/README.md +141 -0
  1289. package/package.json +94 -5
  1290. package/schemas/keybindings.schema.json +397 -0
  1291. package/schemas/models.schema.json +1211 -0
  1292. package/schemas/settings.schema.json +792 -0
  1293. package/schemas/theme.schema.json +365 -0
@@ -0,0 +1,428 @@
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, a Client ID Metadata Document or dynamic client registration)
8
+ * against a loopback callback.
9
+ *
10
+ * Credentials live in `<agent-dir>/mcp-auth.json`, keyed by server name and URL.
11
+ */
12
+ import { createHash } from "node:crypto";
13
+ import { mkdirSync } from "node:fs";
14
+ import { join } from "node:path";
15
+ import { oauthErrorHtml, oauthSuccessHtml } from "@earendil-works/pi-ai/utils/oauth-page";
16
+ import { authorizeMcp, McpOAuthAuthorizationRequiredError, McpOAuthProvider, OAuthCallbackServer, parseWwwAuthenticate, stepUpScope, } from "@earendil-works/pi-mcp/oauth";
17
+ import lockfile from "proper-lockfile";
18
+ import { APP_NAME, getAgentDir } from "../../config.js";
19
+ import { FileAuthStorageBackend } from "../../core/auth-storage.js";
20
+ import { mcpNamespace } from "../../core/mcp-servers.js";
21
+ const CALLBACK_HOST = "127.0.0.1";
22
+ const CALLBACK_PATH = "/callback";
23
+ /** Where pi.dev serves pi's Client ID Metadata Documents: `client.json` and `<callback ID>/client.json`. */
24
+ const CLIENT_METADATA_BASE_URL = "https://pi.dev/oauth";
25
+ /** Redirect URI for refreshes when none is stored. Refreshing never redirects the user. */
26
+ const FALLBACK_REDIRECT_URL = `http://${CALLBACK_HOST}${CALLBACK_PATH}`;
27
+ /** Access tokens this close to expiry are refreshed before they are sent. */
28
+ const REFRESH_SKEW_MS = 30_000;
29
+ /**
30
+ * Bounds each request to the authorization server, so an unresponsive one cannot hold the refresh lock,
31
+ * delay shutdown, or keep a sign-in waiting for long.
32
+ */
33
+ const OAUTH_REQUEST_TIMEOUT_MS = 15_000;
34
+ /** A refresh lock that its holder stopped renewing (the process was killed) is taken over after this. */
35
+ const REFRESH_LOCK_STALE_MS = 20_000;
36
+ /** How long to wait for another process's refresh: longer than a stale lock lives. */
37
+ const REFRESH_LOCK_WAIT_MS = 25_000;
38
+ const REFRESH_LOCK_RETRY_MS = 100;
39
+ function callbackSettings(settings) {
40
+ const url = new URL(settings.callbackUrl ?? `http://${CALLBACK_HOST}${CALLBACK_PATH}`);
41
+ const address = url.hostname.replace(/^\[|\]$/g, "");
42
+ const port = url.port ? Number(url.port) : settings.callbackPort;
43
+ let fixedRedirectUrl;
44
+ // A configured URI with a port is sent exactly as written, since servers compare it as a string.
45
+ if (url.port)
46
+ fixedRedirectUrl = settings.callbackUrl;
47
+ else if (port !== undefined) {
48
+ url.port = String(port);
49
+ fixedRedirectUrl = url.href;
50
+ }
51
+ return {
52
+ // `localhost` is served on 127.0.0.1; browsers fall back to it when ::1 refuses.
53
+ host: address === "localhost" ? CALLBACK_HOST : address,
54
+ redirectHost: address,
55
+ port,
56
+ path: url.pathname,
57
+ fixedRedirectUrl,
58
+ };
59
+ }
60
+ /** Scopes of both lists, each once. */
61
+ function mergeScopes(...scopes) {
62
+ const merged = [...new Set(scopes.flatMap((scope) => scope?.split(/\s+/).filter(Boolean) ?? []))];
63
+ return merged.length > 0 ? merged.join(" ") : undefined;
64
+ }
65
+ function parseStates(content) {
66
+ if (!content?.trim())
67
+ return {};
68
+ const parsed = JSON.parse(content);
69
+ return typeof parsed === "object" && parsed !== null && !Array.isArray(parsed) ? parsed : {};
70
+ }
71
+ function serializeStates(states) {
72
+ return `${JSON.stringify(states, null, 2)}\n`;
73
+ }
74
+ /**
75
+ * Keys of a server's state: by name and URL, so servers sharing a URL keep separate accounts, and the
76
+ * legacy key by URL alone, written by older versions.
77
+ */
78
+ function storeKeys(name, serverUrl) {
79
+ const legacyKey = String(new URL(serverUrl));
80
+ return { key: `${mcpNamespace(name)}|${legacyKey}`, legacyKey };
81
+ }
82
+ /** Per-server OAuth state (client registration, tokens, pending PKCE verifier) in `mcp-auth.json`. */
83
+ export class McpOAuthCredentialStore {
84
+ backend;
85
+ /** Directory for the refresh lock files. Without one, refreshes are only serialized in this process. */
86
+ lockDir;
87
+ constructor(backend, lockDir) {
88
+ this.backend = backend ?? new FileAuthStorageBackend(join(getAgentDir(), "mcp-auth.json"));
89
+ this.lockDir = backend ? lockDir : getAgentDir();
90
+ }
91
+ forServer(name, serverUrl) {
92
+ const { key, legacyKey } = storeKeys(name, serverUrl);
93
+ return {
94
+ // The first server to load legacy state takes it over; others with the same URL sign in again.
95
+ load: () => this.backend.withLock((current) => {
96
+ const states = parseStates(current);
97
+ if (states[key] || !states[legacyKey])
98
+ return { result: states[key] };
99
+ states[key] = states[legacyKey];
100
+ delete states[legacyKey];
101
+ return { result: states[key], next: serializeStates(states) };
102
+ }),
103
+ save: (state) => this.write((states) => {
104
+ states[key] = state;
105
+ }),
106
+ withRefreshLock: (fn) => this.withRefreshLock(key, fn),
107
+ };
108
+ }
109
+ /**
110
+ * A lock file per server. When the process exits, proper-lockfile removes the locks it holds; when
111
+ * it is killed, the lock goes stale because it is no longer renewed, and the next process takes it over.
112
+ */
113
+ async withRefreshLock(key, fn) {
114
+ if (!this.lockDir)
115
+ return fn();
116
+ mkdirSync(this.lockDir, { recursive: true, mode: 0o700 });
117
+ const hash = createHash("sha256").update(key).digest("hex").slice(0, 16);
118
+ const release = await lockfile.lock(join(this.lockDir, `mcp-auth-refresh-${hash}`), {
119
+ realpath: false,
120
+ stale: REFRESH_LOCK_STALE_MS,
121
+ retries: {
122
+ retries: REFRESH_LOCK_WAIT_MS / REFRESH_LOCK_RETRY_MS,
123
+ factor: 1,
124
+ minTimeout: REFRESH_LOCK_RETRY_MS,
125
+ maxTimeout: REFRESH_LOCK_RETRY_MS,
126
+ },
127
+ // The default throws from a timer. A lost lock at worst lets two refreshes overlap.
128
+ onCompromised: () => { },
129
+ });
130
+ try {
131
+ return await fn();
132
+ }
133
+ finally {
134
+ await release().catch(() => undefined);
135
+ }
136
+ }
137
+ /** The stored tokens of a server, for noticing sign-ins done by another process. Does not take over legacy state. */
138
+ tokens(name, serverUrl) {
139
+ const { key, legacyKey } = storeKeys(name, serverUrl);
140
+ const states = this.backend.withLock((current) => ({ result: parseStates(current) }));
141
+ return (states[key] ?? states[legacyKey])?.tokens;
142
+ }
143
+ /** Returns whether credentials were stored for the server. Removes legacy state the server would take over. */
144
+ remove(name, serverUrl) {
145
+ const { key, legacyKey } = storeKeys(name, serverUrl);
146
+ return this.backend.withLock((current) => {
147
+ const states = parseStates(current);
148
+ const stored = key in states ? key : legacyKey in states ? legacyKey : undefined;
149
+ if (!stored)
150
+ return { result: false };
151
+ delete states[stored];
152
+ return { result: true, next: serializeStates(states) };
153
+ });
154
+ }
155
+ write(update) {
156
+ this.backend.withLock((current) => {
157
+ const states = parseStates(current);
158
+ update(states);
159
+ return { result: undefined, next: serializeStates(states) };
160
+ });
161
+ }
162
+ }
163
+ /** `fetch` with `OAUTH_REQUEST_TIMEOUT_MS` per request, on top of the request's own signal. */
164
+ function timedFetch(fetch = globalThis.fetch) {
165
+ return (input, init) => {
166
+ const timeout = AbortSignal.timeout(OAUTH_REQUEST_TIMEOUT_MS);
167
+ return fetch(input, { ...init, signal: init?.signal ? AbortSignal.any([init.signal, timeout]) : timeout });
168
+ };
169
+ }
170
+ function registeredRedirectUrls(client) {
171
+ return client && "redirect_uris" in client ? client.redirect_uris : [];
172
+ }
173
+ /** 12 characters identifying an MCP server URL in callback paths, computed like Codex does. */
174
+ function callbackId(serverUrl) {
175
+ const url = new URL(serverUrl);
176
+ url.hash = "";
177
+ return createHash("sha256").update(url.href).digest().subarray(0, 9).toString("base64url");
178
+ }
179
+ /**
180
+ * pi's Client ID Metadata Document, for `clientRegistration: "cimd"`, chosen like Codex chooses its own.
181
+ * The configuration ensures the default callback path. Without the `iss` parameter in authorization
182
+ * responses (RFC 9207), the redirect URI and the document are specific to the MCP server, so a response
183
+ * cannot be mixed up with one from another authorization server (RFC 9700 section 4.4.2.2).
184
+ */
185
+ function clientMetadataDocument(serverUrl, redirectUrl, metadata) {
186
+ if (!metadata?.client_id_metadata_document_supported ||
187
+ !metadata.token_endpoint_auth_methods_supported?.includes("none")) {
188
+ throw new Error('The authorization server does not support Client ID Metadata Documents for public clients; remove oauth.clientRegistration "cimd"');
189
+ }
190
+ if (metadata.authorization_response_iss_parameter_supported) {
191
+ return { url: `${CLIENT_METADATA_BASE_URL}/client.json`, redirectUrl };
192
+ }
193
+ const id = callbackId(serverUrl);
194
+ const redirect = new URL(redirectUrl);
195
+ redirect.pathname = `${CALLBACK_PATH}/${id}`;
196
+ return { url: `${CLIENT_METADATA_BASE_URL}/${id}/client.json`, redirectUrl: redirect.href };
197
+ }
198
+ function createProvider(serverUrl, store, settings, redirectUrl, onRedirect) {
199
+ return new McpOAuthProvider({
200
+ serverUrl,
201
+ redirectUrl,
202
+ clientMetadata: { client_name: settings.clientName ?? APP_NAME },
203
+ clientMetadataDocument: settings.clientRegistration === "cimd"
204
+ ? (metadata) => clientMetadataDocument(serverUrl, redirectUrl, metadata)
205
+ : undefined,
206
+ clientId: settings.clientId,
207
+ clientSecret: settings.clientSecret,
208
+ store,
209
+ onRedirect,
210
+ });
211
+ }
212
+ /**
213
+ * Auth provider for MCP connections: sends the stored access token and refreshes it when it is about
214
+ * to expire or after a 401. Throws `McpOAuthAuthorizationRequiredError` when the user has to sign in,
215
+ * including when the server asks for more scope (`insufficient_scope`). `onChallenge` receives the
216
+ * server's `WWW-Authenticate` challenge so sign-in can use its resource metadata URL and scope.
217
+ * `settings` is only called when a refresh is needed, so a secret that fails to resolve fails the
218
+ * refresh instead of the whole connection setup.
219
+ *
220
+ * Many servers rotate refresh tokens, so two refreshes with the same refresh token lose the grant.
221
+ * Requests in this process share one refresh, and other processes are kept out by the store's
222
+ * refresh lock, held from reading the tokens to saving new ones. Tokens that changed meanwhile
223
+ * (another process refreshed them, or the user signed in) are used without refreshing.
224
+ */
225
+ export function createMcpAuthProvider(options) {
226
+ const { serverUrl, store } = options;
227
+ let refreshing;
228
+ /** Replace `staleToken`, the access token that expired or was rejected. */
229
+ const refresh = (staleToken, fetch = globalThis.fetch, challenge) => {
230
+ refreshing ??= store
231
+ .withRefreshLock(async () => {
232
+ const state = await store.load();
233
+ if (state?.tokens?.access_token !== staleToken)
234
+ return;
235
+ if (!state?.tokens?.refresh_token)
236
+ throw new McpOAuthAuthorizationRequiredError();
237
+ const settings = options.settings();
238
+ const redirectUrl = callbackSettings(settings).fixedRedirectUrl ??
239
+ registeredRedirectUrls(state.clientInformation)[0] ??
240
+ FALLBACK_REDIRECT_URL;
241
+ const provider = createProvider(serverUrl, store, settings, redirectUrl, () => { });
242
+ // Refreshes the tokens, or reports that a new sign-in is needed. Not cancellable: a refresh the
243
+ // server answered may have rotated the refresh token, so its answer must be saved.
244
+ const result = await authorizeMcp(provider, {
245
+ serverUrl,
246
+ resourceMetadataUrl: challenge?.resourceMetadataUrl,
247
+ authorizationServerMetadataUrl: settings.authServerMetadataUrl,
248
+ scope: challenge?.scope,
249
+ fetch: timedFetch(fetch),
250
+ });
251
+ if (result === "REDIRECT")
252
+ throw new McpOAuthAuthorizationRequiredError();
253
+ })
254
+ .finally(() => {
255
+ refreshing = undefined;
256
+ });
257
+ return refreshing;
258
+ };
259
+ return {
260
+ token: async () => {
261
+ await refreshing?.catch(() => undefined);
262
+ const state = await store.load();
263
+ const token = state?.tokens?.access_token;
264
+ const expired = state?.tokensExpireAt !== undefined && state.tokensExpireAt - REFRESH_SKEW_MS <= Date.now();
265
+ if (!expired || !state?.tokens?.refresh_token)
266
+ return token;
267
+ // Failures fall through: the request goes out with the old token and a 401 decides what happens.
268
+ await refresh(token).catch(() => undefined);
269
+ return (await store.load())?.tokens?.access_token;
270
+ },
271
+ onUnauthorized: async (context) => {
272
+ const challenge = parseWwwAuthenticate(context.response.headers.get("www-authenticate"));
273
+ options.onChallenge(challenge);
274
+ // A refresh keeps the granted scope, so more scope needs a new sign-in.
275
+ if (challenge.error === "insufficient_scope")
276
+ throw new McpOAuthAuthorizationRequiredError();
277
+ await refresh(context.token, context.fetch, challenge);
278
+ },
279
+ settled: async () => {
280
+ await refreshing?.catch(() => undefined);
281
+ },
282
+ };
283
+ }
284
+ export class McpSignInCancelledError extends Error {
285
+ constructor() {
286
+ super("Sign-in cancelled");
287
+ this.name = "McpSignInCancelledError";
288
+ }
289
+ }
290
+ function responseFromRedirectUrl(input, state, redirectUrl) {
291
+ let url;
292
+ try {
293
+ url = new URL(input.trim());
294
+ }
295
+ catch {
296
+ throw new Error("Expected the full redirect URL from the browser address bar");
297
+ }
298
+ // A server-specific redirect URI tells authorization servers apart, so it must match exactly.
299
+ if (url.origin !== redirectUrl.origin || url.pathname !== redirectUrl.pathname) {
300
+ throw new Error("The redirect URL does not match this sign-in's redirect URI");
301
+ }
302
+ const error = url.searchParams.get("error");
303
+ if (error)
304
+ throw new Error(url.searchParams.get("error_description") ?? error);
305
+ if (url.searchParams.get("state") !== state)
306
+ throw new Error("The redirect URL belongs to a different sign-in");
307
+ const code = url.searchParams.get("code");
308
+ if (!code)
309
+ throw new Error("The redirect URL does not contain an authorization code");
310
+ return { code, iss: url.searchParams.get("iss") ?? undefined };
311
+ }
312
+ /**
313
+ * Wait for the browser callback or a pasted redirect URL, whichever comes first. Aborting `signal`
314
+ * aborts the prompt, which then cancels the sign-in.
315
+ */
316
+ async function waitForAuthorizationResponse(callback, state, redirectUrl, prompt, signal) {
317
+ const controller = new AbortController();
318
+ const promptSignal = signal ? AbortSignal.any([controller.signal, signal]) : controller.signal;
319
+ const fromBrowser = callback.waitForCallback(state, redirectUrl.pathname);
320
+ const fromUser = prompt.promptForRedirectUrl(promptSignal).then((input) => {
321
+ if (!input?.trim())
322
+ throw new McpSignInCancelledError();
323
+ return responseFromRedirectUrl(input, state, redirectUrl);
324
+ });
325
+ try {
326
+ return await Promise.race([fromBrowser, fromUser]);
327
+ }
328
+ finally {
329
+ // The losing side rejects once the prompt is aborted or the callback server closes.
330
+ controller.abort();
331
+ fromBrowser.catch(() => undefined);
332
+ fromUser.catch(() => undefined);
333
+ }
334
+ }
335
+ /** Listen on `port`, or on a free port when it is taken and not `required`. */
336
+ async function listenForCallback(settings, extraPaths, port, required) {
337
+ const options = {
338
+ host: settings.host,
339
+ redirectHost: settings.redirectHost,
340
+ path: settings.path,
341
+ extraPaths,
342
+ renderPage: (page) => page.ok
343
+ ? oauthSuccessHtml("Signed in to the MCP server. You may now close this page.")
344
+ : oauthErrorHtml(page.message, page.details),
345
+ };
346
+ try {
347
+ return await OAuthCallbackServer.listen({ ...options, port: port ?? 0 });
348
+ }
349
+ catch (error) {
350
+ if (required || port === undefined)
351
+ throw error;
352
+ return OAuthCallbackServer.listen(options);
353
+ }
354
+ }
355
+ /**
356
+ * Sign in to an MCP server. Uses the stored refresh token when possible; otherwise runs the browser
357
+ * authorization code flow. Tokens are saved to `store`. Aborting `signal` stops the sign-in at any
358
+ * step with `McpSignInCancelledError`; requests to the authorization server are also time-limited.
359
+ */
360
+ export async function signInMcpServer(options) {
361
+ const { serverUrl, store, settings, signal } = options;
362
+ if (signal?.aborted)
363
+ throw new McpSignInCancelledError();
364
+ const stored = await store.load();
365
+ const stepUp = options.challenge?.error === "insufficient_scope";
366
+ const callbackOptions = callbackSettings(settings);
367
+ // Reuse the port of the registered redirect URI so the registered client stays valid.
368
+ const registered = registeredRedirectUrls(stored?.clientInformation)[0];
369
+ const preferredPort = callbackOptions.port ?? (registered ? Number(new URL(registered).port) || undefined : undefined);
370
+ const cimd = settings.clientRegistration === "cimd";
371
+ const callback = await listenForCallback(callbackOptions,
372
+ // The redirect URI of a server-specific Client ID Metadata Document.
373
+ cimd ? [`${CALLBACK_PATH}/${callbackId(serverUrl)}`] : [], preferredPort, callbackOptions.port !== undefined);
374
+ const redirectUrl = callbackOptions.fixedRedirectUrl ?? callback.redirectUrl;
375
+ try {
376
+ if (stored) {
377
+ const next = { ...stored };
378
+ // Every sign-in gets a fresh `state` parameter.
379
+ delete next.oauthState;
380
+ // A registered client cannot use another redirect URI, and its tokens belong to it. A Client ID
381
+ // Metadata Document is not stored, so with one, a stored client was registered before and is replaced.
382
+ const keepClient = settings.clientId ||
383
+ (cimd ? !stored.clientInformation : registeredRedirectUrls(stored.clientInformation).includes(redirectUrl));
384
+ if (!keepClient) {
385
+ delete next.clientInformation;
386
+ delete next.tokens;
387
+ delete next.tokensExpireAt;
388
+ }
389
+ await store.save(next);
390
+ }
391
+ let authorizationUrl;
392
+ const provider = createProvider(serverUrl, store, settings, redirectUrl, (url) => {
393
+ authorizationUrl = url;
394
+ });
395
+ const flow = {
396
+ serverUrl,
397
+ fetch: timedFetch(),
398
+ signal,
399
+ resourceMetadataUrl: options.challenge?.resourceMetadataUrl,
400
+ authorizationServerMetadataUrl: settings.authServerMetadataUrl,
401
+ // A server asking for more scope gets it on top of the configured scope and, since the challenge
402
+ // may list only the missing scopes, on top of the scope granted so far.
403
+ scope: mergeScopes(settings.scope, stepUp ? stepUpScope(stored?.tokens?.scope, options.challenge?.scope) : options.challenge?.scope),
404
+ };
405
+ // A refresh keeps the granted scope; a server asking for more needs the browser flow.
406
+ const skipRefresh = stepUp;
407
+ if ((await authorizeMcp(provider, { ...flow, skipRefresh })) === "AUTHORIZED")
408
+ return;
409
+ if (!authorizationUrl)
410
+ throw new Error("OAuth flow did not produce an authorization URL");
411
+ const state = await provider.state();
412
+ // The flow picks the redirect URI, which may be specific to the MCP server.
413
+ const authorizationRedirectUrl = new URL(authorizationUrl.searchParams.get("redirect_uri") ?? redirectUrl);
414
+ options.prompt.showAuthorizationUrl(authorizationUrl);
415
+ const { code, iss } = await waitForAuthorizationResponse(callback, state, authorizationRedirectUrl, options.prompt, signal);
416
+ await authorizeMcp(provider, { ...flow, authorizationCode: code, iss });
417
+ }
418
+ catch (error) {
419
+ // Aborted requests fail with the signal's reason; report them as the cancellation they are.
420
+ if (signal?.aborted)
421
+ throw new McpSignInCancelledError();
422
+ throw error;
423
+ }
424
+ finally {
425
+ await callback.close();
426
+ }
427
+ }
428
+ //# sourceMappingURL=oauth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../../src/extensions/mcp/oauth.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * OAuth sign-in for remote MCP servers.\n *\n * Connections never start a browser flow on their own. They send the stored access token and, after\n * a 401, try the stored refresh token. When that is not possible they fail with\n * `McpOAuthAuthorizationRequiredError`, and the user signs in through `/mcp`, which runs\n * the authorization code flow (PKCE, a Client ID Metadata Document or dynamic client registration)\n * against a loopback callback.\n *\n * Credentials live in `<agent-dir>/mcp-auth.json`, keyed by server name and URL.\n */\n\nimport { createHash } from \"node:crypto\";\nimport { mkdirSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { oauthErrorHtml, oauthSuccessHtml } from \"@earendil-works/pi-ai/utils/oauth-page\";\nimport type { AuthProvider, McpFetch } from \"@earendil-works/pi-mcp\";\nimport {\n\ttype AuthorizationServerMetadata,\n\tauthorizeMcp,\n\tMcpOAuthAuthorizationRequiredError,\n\tMcpOAuthProvider,\n\ttype McpOAuthState,\n\ttype McpOAuthStateStore,\n\ttype OAuthCallback,\n\ttype OAuthCallbackPage,\n\tOAuthCallbackServer,\n\ttype OAuthChallenge,\n\ttype OAuthClientInformationMixed,\n\ttype OAuthClientMetadataDocument,\n\tparseWwwAuthenticate,\n\tstepUpScope,\n} from \"@earendil-works/pi-mcp/oauth\";\nimport lockfile from \"proper-lockfile\";\nimport { APP_NAME, getAgentDir } from \"../../config.ts\";\nimport { type AuthStorageBackend, FileAuthStorageBackend } from \"../../core/auth-storage.ts\";\nimport { mcpNamespace } from \"../../core/mcp-servers.ts\";\n\nconst CALLBACK_HOST = \"127.0.0.1\";\nconst CALLBACK_PATH = \"/callback\";\n/** Where pi.dev serves pi's Client ID Metadata Documents: `client.json` and `<callback ID>/client.json`. */\nconst CLIENT_METADATA_BASE_URL = \"https://pi.dev/oauth\";\n/** Redirect URI for refreshes when none is stored. Refreshing never redirects the user. */\nconst FALLBACK_REDIRECT_URL = `http://${CALLBACK_HOST}${CALLBACK_PATH}`;\n/** Access tokens this close to expiry are refreshed before they are sent. */\nconst REFRESH_SKEW_MS = 30_000;\n/**\n * Bounds each request to the authorization server, so an unresponsive one cannot hold the refresh lock,\n * delay shutdown, or keep a sign-in waiting for long.\n */\nconst OAUTH_REQUEST_TIMEOUT_MS = 15_000;\n/** A refresh lock that its holder stopped renewing (the process was killed) is taken over after this. */\nconst REFRESH_LOCK_STALE_MS = 20_000;\n/** How long to wait for another process's refresh: longer than a stale lock lives. */\nconst REFRESH_LOCK_WAIT_MS = 25_000;\nconst REFRESH_LOCK_RETRY_MS = 100;\n\nexport interface McpOAuthSettings {\n\tclientId?: string;\n\t/** Already resolved. */\n\tclientSecret?: string;\n\tcallbackPort?: number;\n\t/** Loopback redirect URI; see `McpOAuthConfig.callbackUrl`. */\n\tcallbackUrl?: string;\n\t/** Scopes to request, separated by spaces. */\n\tscope?: string;\n\t/** `client_name` for dynamic client registration. Default: `APP_NAME`. */\n\tclientName?: string;\n\t/** See `McpOAuthConfig.clientRegistration`. */\n\tclientRegistration?: \"dcr\" | \"cimd\";\n\t/** See `McpOAuthConfig.authServerMetadataUrl`. */\n\tauthServerMetadataUrl?: URL;\n}\n\n/** Where the loopback callback server listens and the redirect URI it serves. */\ninterface CallbackSettings {\n\t/** Address to listen on. */\n\thost: string;\n\t/** Host name in the redirect URI. */\n\tredirectHost: string;\n\tport: number | undefined;\n\tpath: string;\n\t/** The exact redirect URI, when the port is fixed. */\n\tfixedRedirectUrl: string | undefined;\n}\n\nfunction callbackSettings(settings: McpOAuthSettings): CallbackSettings {\n\tconst url = new URL(settings.callbackUrl ?? `http://${CALLBACK_HOST}${CALLBACK_PATH}`);\n\tconst address = url.hostname.replace(/^\\[|\\]$/g, \"\");\n\tconst port = url.port ? Number(url.port) : settings.callbackPort;\n\tlet fixedRedirectUrl: string | undefined;\n\t// A configured URI with a port is sent exactly as written, since servers compare it as a string.\n\tif (url.port) fixedRedirectUrl = settings.callbackUrl;\n\telse if (port !== undefined) {\n\t\turl.port = String(port);\n\t\tfixedRedirectUrl = url.href;\n\t}\n\treturn {\n\t\t// `localhost` is served on 127.0.0.1; browsers fall back to it when ::1 refuses.\n\t\thost: address === \"localhost\" ? CALLBACK_HOST : address,\n\t\tredirectHost: address,\n\t\tport,\n\t\tpath: url.pathname,\n\t\tfixedRedirectUrl,\n\t};\n}\n\n/** Scopes of both lists, each once. */\nfunction mergeScopes(...scopes: (string | undefined)[]): string | undefined {\n\tconst merged = [...new Set(scopes.flatMap((scope) => scope?.split(/\\s+/).filter(Boolean) ?? []))];\n\treturn merged.length > 0 ? merged.join(\" \") : undefined;\n}\n\ntype StoredStates = Record<string, McpOAuthState>;\n\nfunction parseStates(content: string | undefined): StoredStates {\n\tif (!content?.trim()) return {};\n\tconst parsed: unknown = JSON.parse(content);\n\treturn typeof parsed === \"object\" && parsed !== null && !Array.isArray(parsed) ? (parsed as StoredStates) : {};\n}\n\nfunction serializeStates(states: StoredStates): string {\n\treturn `${JSON.stringify(states, null, 2)}\\n`;\n}\n\n/**\n * Keys of a server's state: by name and URL, so servers sharing a URL keep separate accounts, and the\n * legacy key by URL alone, written by older versions.\n */\nfunction storeKeys(name: string, serverUrl: string): { key: string; legacyKey: string } {\n\tconst legacyKey = String(new URL(serverUrl));\n\treturn { key: `${mcpNamespace(name)}|${legacyKey}`, legacyKey };\n}\n\nexport interface McpOAuthServerStore extends McpOAuthStateStore {\n\t/** Run `fn` while no other process refreshes the server's tokens. */\n\twithRefreshLock<T>(fn: () => Promise<T>): Promise<T>;\n}\n\n/** Per-server OAuth state (client registration, tokens, pending PKCE verifier) in `mcp-auth.json`. */\nexport class McpOAuthCredentialStore {\n\tprivate readonly backend: AuthStorageBackend;\n\t/** Directory for the refresh lock files. Without one, refreshes are only serialized in this process. */\n\tprivate readonly lockDir: string | undefined;\n\n\tconstructor(backend?: AuthStorageBackend, lockDir?: string) {\n\t\tthis.backend = backend ?? new FileAuthStorageBackend(join(getAgentDir(), \"mcp-auth.json\"));\n\t\tthis.lockDir = backend ? lockDir : getAgentDir();\n\t}\n\n\tforServer(name: string, serverUrl: string): McpOAuthServerStore {\n\t\tconst { key, legacyKey } = storeKeys(name, serverUrl);\n\t\treturn {\n\t\t\t// The first server to load legacy state takes it over; others with the same URL sign in again.\n\t\t\tload: () =>\n\t\t\t\tthis.backend.withLock((current) => {\n\t\t\t\t\tconst states = parseStates(current);\n\t\t\t\t\tif (states[key] || !states[legacyKey]) return { result: states[key] };\n\t\t\t\t\tstates[key] = states[legacyKey];\n\t\t\t\t\tdelete states[legacyKey];\n\t\t\t\t\treturn { result: states[key], next: serializeStates(states) };\n\t\t\t\t}),\n\t\t\tsave: (state) =>\n\t\t\t\tthis.write((states) => {\n\t\t\t\t\tstates[key] = state;\n\t\t\t\t}),\n\t\t\twithRefreshLock: (fn) => this.withRefreshLock(key, fn),\n\t\t};\n\t}\n\n\t/**\n\t * A lock file per server. When the process exits, proper-lockfile removes the locks it holds; when\n\t * it is killed, the lock goes stale because it is no longer renewed, and the next process takes it over.\n\t */\n\tprivate async withRefreshLock<T>(key: string, fn: () => Promise<T>): Promise<T> {\n\t\tif (!this.lockDir) return fn();\n\t\tmkdirSync(this.lockDir, { recursive: true, mode: 0o700 });\n\t\tconst hash = createHash(\"sha256\").update(key).digest(\"hex\").slice(0, 16);\n\t\tconst release = await lockfile.lock(join(this.lockDir, `mcp-auth-refresh-${hash}`), {\n\t\t\trealpath: false,\n\t\t\tstale: REFRESH_LOCK_STALE_MS,\n\t\t\tretries: {\n\t\t\t\tretries: REFRESH_LOCK_WAIT_MS / REFRESH_LOCK_RETRY_MS,\n\t\t\t\tfactor: 1,\n\t\t\t\tminTimeout: REFRESH_LOCK_RETRY_MS,\n\t\t\t\tmaxTimeout: REFRESH_LOCK_RETRY_MS,\n\t\t\t},\n\t\t\t// The default throws from a timer. A lost lock at worst lets two refreshes overlap.\n\t\t\tonCompromised: () => {},\n\t\t});\n\t\ttry {\n\t\t\treturn await fn();\n\t\t} finally {\n\t\t\tawait release().catch(() => undefined);\n\t\t}\n\t}\n\n\t/** The stored tokens of a server, for noticing sign-ins done by another process. Does not take over legacy state. */\n\ttokens(name: string, serverUrl: string): McpOAuthState[\"tokens\"] {\n\t\tconst { key, legacyKey } = storeKeys(name, serverUrl);\n\t\tconst states = this.backend.withLock((current) => ({ result: parseStates(current) }));\n\t\treturn (states[key] ?? states[legacyKey])?.tokens;\n\t}\n\n\t/** Returns whether credentials were stored for the server. Removes legacy state the server would take over. */\n\tremove(name: string, serverUrl: string): boolean {\n\t\tconst { key, legacyKey } = storeKeys(name, serverUrl);\n\t\treturn this.backend.withLock((current) => {\n\t\t\tconst states = parseStates(current);\n\t\t\tconst stored = key in states ? key : legacyKey in states ? legacyKey : undefined;\n\t\t\tif (!stored) return { result: false };\n\t\t\tdelete states[stored];\n\t\t\treturn { result: true, next: serializeStates(states) };\n\t\t});\n\t}\n\n\tprivate write(update: (states: StoredStates) => void): void {\n\t\tthis.backend.withLock((current) => {\n\t\t\tconst states = parseStates(current);\n\t\t\tupdate(states);\n\t\t\treturn { result: undefined, next: serializeStates(states) };\n\t\t});\n\t}\n}\n\n/** `fetch` with `OAUTH_REQUEST_TIMEOUT_MS` per request, on top of the request's own signal. */\nfunction timedFetch(fetch: McpFetch = globalThis.fetch): McpFetch {\n\treturn (input, init) => {\n\t\tconst timeout = AbortSignal.timeout(OAUTH_REQUEST_TIMEOUT_MS);\n\t\treturn fetch(input, { ...init, signal: init?.signal ? AbortSignal.any([init.signal, timeout]) : timeout });\n\t};\n}\n\nfunction registeredRedirectUrls(client: OAuthClientInformationMixed | undefined): string[] {\n\treturn client && \"redirect_uris\" in client ? client.redirect_uris : [];\n}\n\n/** 12 characters identifying an MCP server URL in callback paths, computed like Codex does. */\nfunction callbackId(serverUrl: string): string {\n\tconst url = new URL(serverUrl);\n\turl.hash = \"\";\n\treturn createHash(\"sha256\").update(url.href).digest().subarray(0, 9).toString(\"base64url\");\n}\n\n/**\n * pi's Client ID Metadata Document, for `clientRegistration: \"cimd\"`, chosen like Codex chooses its own.\n * The configuration ensures the default callback path. Without the `iss` parameter in authorization\n * responses (RFC 9207), the redirect URI and the document are specific to the MCP server, so a response\n * cannot be mixed up with one from another authorization server (RFC 9700 section 4.4.2.2).\n */\nfunction clientMetadataDocument(\n\tserverUrl: string,\n\tredirectUrl: string,\n\tmetadata: AuthorizationServerMetadata | undefined,\n): OAuthClientMetadataDocument {\n\tif (\n\t\t!metadata?.client_id_metadata_document_supported ||\n\t\t!metadata.token_endpoint_auth_methods_supported?.includes(\"none\")\n\t) {\n\t\tthrow new Error(\n\t\t\t'The authorization server does not support Client ID Metadata Documents for public clients; remove oauth.clientRegistration \"cimd\"',\n\t\t);\n\t}\n\tif (metadata.authorization_response_iss_parameter_supported) {\n\t\treturn { url: `${CLIENT_METADATA_BASE_URL}/client.json`, redirectUrl };\n\t}\n\tconst id = callbackId(serverUrl);\n\tconst redirect = new URL(redirectUrl);\n\tredirect.pathname = `${CALLBACK_PATH}/${id}`;\n\treturn { url: `${CLIENT_METADATA_BASE_URL}/${id}/client.json`, redirectUrl: redirect.href };\n}\n\nfunction createProvider(\n\tserverUrl: string,\n\tstore: McpOAuthStateStore,\n\tsettings: McpOAuthSettings,\n\tredirectUrl: string,\n\tonRedirect: (url: URL) => void,\n): McpOAuthProvider {\n\treturn new McpOAuthProvider({\n\t\tserverUrl,\n\t\tredirectUrl,\n\t\tclientMetadata: { client_name: settings.clientName ?? APP_NAME },\n\t\tclientMetadataDocument:\n\t\t\tsettings.clientRegistration === \"cimd\"\n\t\t\t\t? (metadata) => clientMetadataDocument(serverUrl, redirectUrl, metadata)\n\t\t\t\t: undefined,\n\t\tclientId: settings.clientId,\n\t\tclientSecret: settings.clientSecret,\n\t\tstore,\n\t\tonRedirect,\n\t});\n}\n\nexport interface McpAuthProvider extends AuthProvider {\n\t/** Resolves when no refresh is running, so shutdown does not drop rotated tokens before they are saved. */\n\tsettled(): Promise<void>;\n}\n\n/**\n * Auth provider for MCP connections: sends the stored access token and refreshes it when it is about\n * to expire or after a 401. Throws `McpOAuthAuthorizationRequiredError` when the user has to sign in,\n * including when the server asks for more scope (`insufficient_scope`). `onChallenge` receives the\n * server's `WWW-Authenticate` challenge so sign-in can use its resource metadata URL and scope.\n * `settings` is only called when a refresh is needed, so a secret that fails to resolve fails the\n * refresh instead of the whole connection setup.\n *\n * Many servers rotate refresh tokens, so two refreshes with the same refresh token lose the grant.\n * Requests in this process share one refresh, and other processes are kept out by the store's\n * refresh lock, held from reading the tokens to saving new ones. Tokens that changed meanwhile\n * (another process refreshed them, or the user signed in) are used without refreshing.\n */\nexport function createMcpAuthProvider(options: {\n\tserverUrl: string;\n\tstore: McpOAuthServerStore;\n\tsettings: () => McpOAuthSettings;\n\tonChallenge: (challenge: OAuthChallenge) => void;\n}): McpAuthProvider {\n\tconst { serverUrl, store } = options;\n\tlet refreshing: Promise<void> | undefined;\n\n\t/** Replace `staleToken`, the access token that expired or was rejected. */\n\tconst refresh = (staleToken: string | undefined, fetch: McpFetch = globalThis.fetch, challenge?: OAuthChallenge) => {\n\t\trefreshing ??= store\n\t\t\t.withRefreshLock(async () => {\n\t\t\t\tconst state = await store.load();\n\t\t\t\tif (state?.tokens?.access_token !== staleToken) return;\n\t\t\t\tif (!state?.tokens?.refresh_token) throw new McpOAuthAuthorizationRequiredError();\n\t\t\t\tconst settings = options.settings();\n\t\t\t\tconst redirectUrl =\n\t\t\t\t\tcallbackSettings(settings).fixedRedirectUrl ??\n\t\t\t\t\tregisteredRedirectUrls(state.clientInformation)[0] ??\n\t\t\t\t\tFALLBACK_REDIRECT_URL;\n\t\t\t\tconst provider = createProvider(serverUrl, store, settings, redirectUrl, () => {});\n\t\t\t\t// Refreshes the tokens, or reports that a new sign-in is needed. Not cancellable: a refresh the\n\t\t\t\t// server answered may have rotated the refresh token, so its answer must be saved.\n\t\t\t\tconst result = await authorizeMcp(provider, {\n\t\t\t\t\tserverUrl,\n\t\t\t\t\tresourceMetadataUrl: challenge?.resourceMetadataUrl,\n\t\t\t\t\tauthorizationServerMetadataUrl: settings.authServerMetadataUrl,\n\t\t\t\t\tscope: challenge?.scope,\n\t\t\t\t\tfetch: timedFetch(fetch),\n\t\t\t\t});\n\t\t\t\tif (result === \"REDIRECT\") throw new McpOAuthAuthorizationRequiredError();\n\t\t\t})\n\t\t\t.finally(() => {\n\t\t\t\trefreshing = undefined;\n\t\t\t});\n\t\treturn refreshing;\n\t};\n\n\treturn {\n\t\ttoken: async () => {\n\t\t\tawait refreshing?.catch(() => undefined);\n\t\t\tconst state = await store.load();\n\t\t\tconst token = state?.tokens?.access_token;\n\t\t\tconst expired = state?.tokensExpireAt !== undefined && state.tokensExpireAt - REFRESH_SKEW_MS <= Date.now();\n\t\t\tif (!expired || !state?.tokens?.refresh_token) return token;\n\t\t\t// Failures fall through: the request goes out with the old token and a 401 decides what happens.\n\t\t\tawait refresh(token).catch(() => undefined);\n\t\t\treturn (await store.load())?.tokens?.access_token;\n\t\t},\n\t\tonUnauthorized: async (context) => {\n\t\t\tconst challenge = parseWwwAuthenticate(context.response.headers.get(\"www-authenticate\"));\n\t\t\toptions.onChallenge(challenge);\n\t\t\t// A refresh keeps the granted scope, so more scope needs a new sign-in.\n\t\t\tif (challenge.error === \"insufficient_scope\") throw new McpOAuthAuthorizationRequiredError();\n\t\t\tawait refresh(context.token, context.fetch, challenge);\n\t\t},\n\t\tsettled: async () => {\n\t\t\tawait refreshing?.catch(() => undefined);\n\t\t},\n\t};\n}\n\nexport interface McpSignInPrompt {\n\t/** Show the authorization URL to the user and open it in a browser. */\n\tshowAuthorizationUrl(url: URL): void;\n\t/**\n\t * Ask for the redirect URL from the browser address bar, for when the browser cannot reach the\n\t * loopback callback (for example over SSH). Aborted once the callback arrives or the sign-in is\n\t * cancelled. Resolves to `undefined` or an empty string when the user cancels.\n\t */\n\tpromptForRedirectUrl(signal: AbortSignal): Promise<string | undefined>;\n}\n\nexport class McpSignInCancelledError extends Error {\n\tconstructor() {\n\t\tsuper(\"Sign-in cancelled\");\n\t\tthis.name = \"McpSignInCancelledError\";\n\t}\n}\n\ntype AuthorizationResponse = Pick<OAuthCallback, \"code\" | \"iss\">;\n\nfunction responseFromRedirectUrl(input: string, state: string, redirectUrl: URL): AuthorizationResponse {\n\tlet url: URL;\n\ttry {\n\t\turl = new URL(input.trim());\n\t} catch {\n\t\tthrow new Error(\"Expected the full redirect URL from the browser address bar\");\n\t}\n\t// A server-specific redirect URI tells authorization servers apart, so it must match exactly.\n\tif (url.origin !== redirectUrl.origin || url.pathname !== redirectUrl.pathname) {\n\t\tthrow new Error(\"The redirect URL does not match this sign-in's redirect URI\");\n\t}\n\tconst error = url.searchParams.get(\"error\");\n\tif (error) throw new Error(url.searchParams.get(\"error_description\") ?? error);\n\tif (url.searchParams.get(\"state\") !== state) throw new Error(\"The redirect URL belongs to a different sign-in\");\n\tconst code = url.searchParams.get(\"code\");\n\tif (!code) throw new Error(\"The redirect URL does not contain an authorization code\");\n\treturn { code, iss: url.searchParams.get(\"iss\") ?? undefined };\n}\n\n/**\n * Wait for the browser callback or a pasted redirect URL, whichever comes first. Aborting `signal`\n * aborts the prompt, which then cancels the sign-in.\n */\nasync function waitForAuthorizationResponse(\n\tcallback: OAuthCallbackServer,\n\tstate: string,\n\tredirectUrl: URL,\n\tprompt: McpSignInPrompt,\n\tsignal: AbortSignal | undefined,\n): Promise<AuthorizationResponse> {\n\tconst controller = new AbortController();\n\tconst promptSignal = signal ? AbortSignal.any([controller.signal, signal]) : controller.signal;\n\tconst fromBrowser = callback.waitForCallback(state, redirectUrl.pathname);\n\tconst fromUser = prompt.promptForRedirectUrl(promptSignal).then((input) => {\n\t\tif (!input?.trim()) throw new McpSignInCancelledError();\n\t\treturn responseFromRedirectUrl(input, state, redirectUrl);\n\t});\n\ttry {\n\t\treturn await Promise.race([fromBrowser, fromUser]);\n\t} finally {\n\t\t// The losing side rejects once the prompt is aborted or the callback server closes.\n\t\tcontroller.abort();\n\t\tfromBrowser.catch(() => undefined);\n\t\tfromUser.catch(() => undefined);\n\t}\n}\n\n/** Listen on `port`, or on a free port when it is taken and not `required`. */\nasync function listenForCallback(\n\tsettings: CallbackSettings,\n\textraPaths: string[],\n\tport: number | undefined,\n\trequired: boolean,\n): Promise<OAuthCallbackServer> {\n\tconst options = {\n\t\thost: settings.host,\n\t\tredirectHost: settings.redirectHost,\n\t\tpath: settings.path,\n\t\textraPaths,\n\t\trenderPage: (page: OAuthCallbackPage) =>\n\t\t\tpage.ok\n\t\t\t\t? oauthSuccessHtml(\"Signed in to the MCP server. You may now close this page.\")\n\t\t\t\t: oauthErrorHtml(page.message, page.details),\n\t};\n\ttry {\n\t\treturn await OAuthCallbackServer.listen({ ...options, port: port ?? 0 });\n\t} catch (error) {\n\t\tif (required || port === undefined) throw error;\n\t\treturn OAuthCallbackServer.listen(options);\n\t}\n}\n\n/**\n * Sign in to an MCP server. Uses the stored refresh token when possible; otherwise runs the browser\n * authorization code flow. Tokens are saved to `store`. Aborting `signal` stops the sign-in at any\n * step with `McpSignInCancelledError`; requests to the authorization server are also time-limited.\n */\nexport async function signInMcpServer(options: {\n\tserverUrl: string;\n\tstore: McpOAuthStateStore;\n\tsettings: McpOAuthSettings;\n\tchallenge?: OAuthChallenge;\n\tprompt: McpSignInPrompt;\n\tsignal?: AbortSignal;\n}): Promise<void> {\n\tconst { serverUrl, store, settings, signal } = options;\n\tif (signal?.aborted) throw new McpSignInCancelledError();\n\tconst stored = await store.load();\n\tconst stepUp = options.challenge?.error === \"insufficient_scope\";\n\tconst callbackOptions = callbackSettings(settings);\n\t// Reuse the port of the registered redirect URI so the registered client stays valid.\n\tconst registered = registeredRedirectUrls(stored?.clientInformation)[0];\n\tconst preferredPort =\n\t\tcallbackOptions.port ?? (registered ? Number(new URL(registered).port) || undefined : undefined);\n\tconst cimd = settings.clientRegistration === \"cimd\";\n\tconst callback = await listenForCallback(\n\t\tcallbackOptions,\n\t\t// The redirect URI of a server-specific Client ID Metadata Document.\n\t\tcimd ? [`${CALLBACK_PATH}/${callbackId(serverUrl)}`] : [],\n\t\tpreferredPort,\n\t\tcallbackOptions.port !== undefined,\n\t);\n\tconst redirectUrl = callbackOptions.fixedRedirectUrl ?? callback.redirectUrl;\n\ttry {\n\t\tif (stored) {\n\t\t\tconst next: McpOAuthState = { ...stored };\n\t\t\t// Every sign-in gets a fresh `state` parameter.\n\t\t\tdelete next.oauthState;\n\t\t\t// A registered client cannot use another redirect URI, and its tokens belong to it. A Client ID\n\t\t\t// Metadata Document is not stored, so with one, a stored client was registered before and is replaced.\n\t\t\tconst keepClient =\n\t\t\t\tsettings.clientId ||\n\t\t\t\t(cimd ? !stored.clientInformation : registeredRedirectUrls(stored.clientInformation).includes(redirectUrl));\n\t\t\tif (!keepClient) {\n\t\t\t\tdelete next.clientInformation;\n\t\t\t\tdelete next.tokens;\n\t\t\t\tdelete next.tokensExpireAt;\n\t\t\t}\n\t\t\tawait store.save(next);\n\t\t}\n\n\t\tlet authorizationUrl: URL | undefined;\n\t\tconst provider = createProvider(serverUrl, store, settings, redirectUrl, (url) => {\n\t\t\tauthorizationUrl = url;\n\t\t});\n\t\tconst flow = {\n\t\t\tserverUrl,\n\t\t\tfetch: timedFetch(),\n\t\t\tsignal,\n\t\t\tresourceMetadataUrl: options.challenge?.resourceMetadataUrl,\n\t\t\tauthorizationServerMetadataUrl: settings.authServerMetadataUrl,\n\t\t\t// A server asking for more scope gets it on top of the configured scope and, since the challenge\n\t\t\t// may list only the missing scopes, on top of the scope granted so far.\n\t\t\tscope: mergeScopes(\n\t\t\t\tsettings.scope,\n\t\t\t\tstepUp ? stepUpScope(stored?.tokens?.scope, options.challenge?.scope) : options.challenge?.scope,\n\t\t\t),\n\t\t};\n\t\t// A refresh keeps the granted scope; a server asking for more needs the browser flow.\n\t\tconst skipRefresh = stepUp;\n\t\tif ((await authorizeMcp(provider, { ...flow, skipRefresh })) === \"AUTHORIZED\") return;\n\t\tif (!authorizationUrl) throw new Error(\"OAuth flow did not produce an authorization URL\");\n\n\t\tconst state = await provider.state();\n\t\t// The flow picks the redirect URI, which may be specific to the MCP server.\n\t\tconst authorizationRedirectUrl = new URL(authorizationUrl.searchParams.get(\"redirect_uri\") ?? redirectUrl);\n\t\toptions.prompt.showAuthorizationUrl(authorizationUrl);\n\t\tconst { code, iss } = await waitForAuthorizationResponse(\n\t\t\tcallback,\n\t\t\tstate,\n\t\t\tauthorizationRedirectUrl,\n\t\t\toptions.prompt,\n\t\t\tsignal,\n\t\t);\n\t\tawait authorizeMcp(provider, { ...flow, authorizationCode: code, iss });\n\t} catch (error) {\n\t\t// Aborted requests fail with the signal's reason; report them as the cancellation they are.\n\t\tif (signal?.aborted) throw new McpSignInCancelledError();\n\t\tthrow error;\n\t} finally {\n\t\tawait callback.close();\n\t}\n}\n"]}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * MCP resources, through the tools Codex and opencode use: `list_mcp_resources`,
3
+ * `list_mcp_resource_templates`, and `read_mcp_resource`. They take a `server` argument and cover
4
+ * every connected server with resources, so models trained on those tools use them unchanged.
5
+ *
6
+ * Listings are JSON, as in Codex: `{ server?, resources: [{ server, ...resource }], nextCursor? }`.
7
+ * With a `server`, one page is listed and `cursor` continues it; without, every page of every server.
8
+ * MCP App resources (`ui://` URIs and `profile=mcp-app` HTML) are left out, since they are user
9
+ * interfaces for hosts that render them, and so are icons. Read resources become text and images for
10
+ * the model; binary resources are saved to temp files. Scripts get the JSON payloads.
11
+ */
12
+ import type { ListResourcesResult, ListResourceTemplatesResult, McpRequestOptions, ReadResourceResult, Resource, ResourceTemplate } from "@earendil-works/pi-mcp";
13
+ import type { TSchema } from "typebox";
14
+ import type { ToolDefinition } from "../../core/extensions/types.ts";
15
+ import { LIST_MCP_RESOURCE_TEMPLATES_TOOL, LIST_MCP_RESOURCES_TOOL, READ_MCP_RESOURCE_TOOL } from "../../core/mcp-servers.ts";
16
+ import type { McpExposure } from "./config.ts";
17
+ import { type McpToolDetails } from "./tools.ts";
18
+ export { LIST_MCP_RESOURCE_TEMPLATES_TOOL, LIST_MCP_RESOURCES_TOOL, READ_MCP_RESOURCE_TOOL };
19
+ /** A connected server that offers resources. */
20
+ export interface McpResourceServer {
21
+ name: string;
22
+ timeoutMs: number;
23
+ resourcesPage(cursor: string | undefined, options: McpRequestOptions): Promise<ListResourcesResult>;
24
+ resourceTemplatesPage(cursor: string | undefined, options: McpRequestOptions): Promise<ListResourceTemplatesResult>;
25
+ allResources(options: McpRequestOptions): Promise<Resource[]>;
26
+ allResourceTemplates(options: McpRequestOptions): Promise<ResourceTemplate[]>;
27
+ readResource(uri: string, options: McpRequestOptions): Promise<ReadResourceResult>;
28
+ }
29
+ /**
30
+ * The three resource tools. `servers` returns the servers whose resources they reach, at call time.
31
+ */
32
+ export declare function createMcpResourceToolDefinitions(options: {
33
+ exposure: McpExposure;
34
+ servers: () => readonly McpResourceServer[];
35
+ }): ToolDefinition<TSchema, McpToolDetails>[];
36
+ //# sourceMappingURL=resources.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../../../src/extensions/mcp/resources.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAEX,mBAAmB,EACnB,2BAA2B,EAC3B,iBAAiB,EACjB,kBAAkB,EAClB,QAAQ,EACR,gBAAgB,EAChB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,KAAK,EAAmB,cAAc,EAAE,MAAM,gCAAgC,CAAC;AACtF,OAAO,EACN,gCAAgC,EAChC,uBAAuB,EACvB,sBAAsB,EACtB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAmB,KAAK,cAAc,EAAkC,MAAM,YAAY,CAAC;AAElG,OAAO,EAAE,gCAAgC,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,CAAC;AAE7F,gDAAgD;AAChD,MAAM,WAAW,iBAAiB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACpG,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,2BAA2B,CAAC,CAAC;IACpH,YAAY,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC9D,oBAAoB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAC9E,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;CACnF;AAmJD;;GAEG;AACH,wBAAgB,gCAAgC,CAAC,OAAO,EAAE;IACzD,QAAQ,EAAE,WAAW,CAAC;IACtB,OAAO,EAAE,MAAM,SAAS,iBAAiB,EAAE,CAAC;CAC5C,GAAG,cAAc,CAAC,OAAO,EAAE,cAAc,CAAC,EAAE,CA8I5C"}