@relay-harness/coding-agent 0.0.0-stage → 1.0.2

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 (1297) hide show
  1. package/CHANGELOG.md +6111 -0
  2. package/README.md +80 -2
  3. package/dist/bun/cli.d.ts +5 -0
  4. package/dist/bun/cli.d.ts.map +1 -0
  5. package/dist/bun/cli.js +5 -0
  6. package/dist/bun/cli.js.map +1 -0
  7. package/dist/bun/restore-sandbox-env.d.ts +17 -0
  8. package/dist/bun/restore-sandbox-env.d.ts.map +1 -0
  9. package/dist/bun/restore-sandbox-env.js +36 -0
  10. package/dist/bun/restore-sandbox-env.js.map +1 -0
  11. package/dist/bun/runtime-setup.d.ts +2 -0
  12. package/dist/bun/runtime-setup.d.ts.map +1 -0
  13. package/dist/bun/runtime-setup.js +12 -0
  14. package/dist/bun/runtime-setup.js.map +1 -0
  15. package/dist/bun/sandbox-env-setup.d.ts +2 -0
  16. package/dist/bun/sandbox-env-setup.d.ts.map +1 -0
  17. package/dist/bun/sandbox-env-setup.js +4 -0
  18. package/dist/bun/sandbox-env-setup.js.map +1 -0
  19. package/dist/bundle/chunks/anthropic-messages-TXWUAW5N.js +6 -0
  20. package/dist/bundle/chunks/anthropic.js +75 -0
  21. package/dist/bundle/chunks/azure-openai-responses-EJG46ESA.js +2 -0
  22. package/dist/bundle/chunks/bedrock-converse-stream.js +83 -0
  23. package/dist/bundle/chunks/chunk-3QND5D7W.js +82 -0
  24. package/dist/bundle/chunks/chunk-3XNI2SB6.js +15 -0
  25. package/dist/bundle/chunks/chunk-4L3WN2XY.js +2 -0
  26. package/dist/bundle/chunks/chunk-6CYCI3EJ.js +12 -0
  27. package/dist/bundle/chunks/chunk-7ZC4UXSL.js +2 -0
  28. package/dist/bundle/chunks/chunk-A3JYRWB6.js +2 -0
  29. package/dist/bundle/chunks/chunk-C47CLQZK.js +2 -0
  30. package/dist/bundle/chunks/chunk-DRQDKNXA.js +2 -0
  31. package/dist/bundle/chunks/chunk-EQ2HXQGJ.js +2 -0
  32. package/dist/bundle/chunks/chunk-F5ZABL6Z.js +20 -0
  33. package/dist/bundle/chunks/chunk-H3QXYIF7.js +31 -0
  34. package/dist/bundle/chunks/chunk-H6S6DQTM.js +2 -0
  35. package/dist/bundle/chunks/chunk-ISNO4JTR.js +127 -0
  36. package/dist/bundle/chunks/chunk-KJUDFE6Y.js +11 -0
  37. package/dist/bundle/chunks/chunk-L2ZPNLYD.js +2 -0
  38. package/dist/bundle/chunks/chunk-LD2P6SFZ.js +2 -0
  39. package/dist/bundle/chunks/chunk-MP5FU7MG.js +20 -0
  40. package/dist/bundle/chunks/chunk-O7R77OAK.js +2 -0
  41. package/dist/bundle/chunks/chunk-PGXDEOVV.js +2 -0
  42. package/dist/bundle/chunks/chunk-PJACZCIR.js +2 -0
  43. package/dist/bundle/chunks/chunk-PRRNXB7S.js +2 -0
  44. package/dist/bundle/chunks/chunk-PTRF7IZB.js +2 -0
  45. package/dist/bundle/chunks/chunk-RZ4KG4BP.js +44 -0
  46. package/dist/bundle/chunks/chunk-S3GGRYIO.js +6 -0
  47. package/dist/bundle/chunks/chunk-TEPMHNKQ.js +2 -0
  48. package/dist/bundle/chunks/chunk-TRDNDS6A.js +4 -0
  49. package/dist/bundle/chunks/chunk-USJZMAIR.js +2 -0
  50. package/dist/bundle/chunks/chunk-UTB4DTYQ.js +2 -0
  51. package/dist/bundle/chunks/chunk-WMTXXI7H.js +4 -0
  52. package/dist/bundle/chunks/chunk-XDAWU2J5.js +132 -0
  53. package/dist/bundle/chunks/chunk-XSLAMYCK.js +1297 -0
  54. package/dist/bundle/chunks/chunk-Z2G7KLPH.js +11 -0
  55. package/dist/bundle/chunks/cli-K4CNHWOI.js +51 -0
  56. package/dist/bundle/chunks/cloudflare-workers-ai-system-one-NM3JRRWQ.js +2 -0
  57. package/dist/bundle/chunks/codemode-worker.js +374 -0
  58. package/dist/bundle/chunks/easter-egg-3d-TGRCIHA4.js +2 -0
  59. package/dist/bundle/chunks/execute-6E5DA2QI.js +388 -0
  60. package/dist/bundle/chunks/github-copilot.js +2 -0
  61. package/dist/bundle/chunks/google-generative-ai-HYUNEOCJ.js +2 -0
  62. package/dist/bundle/chunks/google-vertex-J7MDGTNM.js +2 -0
  63. package/dist/bundle/chunks/https-proxy-agent-2VXB7436.js +13 -0
  64. package/dist/bundle/chunks/image-resize-worker.js +2 -0
  65. package/dist/bundle/chunks/jiti-loader-C3NU2SDH.js +21 -0
  66. package/dist/bundle/chunks/jiti-static-loader-E6ANQD5T.js +2 -0
  67. package/dist/bundle/chunks/kimi-coding.js +2 -0
  68. package/dist/bundle/chunks/lib-TEDK3E5I.js +9 -0
  69. package/dist/bundle/chunks/llama-cpp-classify-XT44PI3C.js +22 -0
  70. package/dist/bundle/chunks/meta.js +2 -0
  71. package/dist/bundle/chunks/mistral-conversations-UD2HHXKZ.js +5 -0
  72. package/dist/bundle/chunks/multipart-parser-SQ6GDJL7.js +3 -0
  73. package/dist/bundle/chunks/node-N5BSDOA5.js +16 -0
  74. package/dist/bundle/chunks/node-TWVVAGPO.js +2 -0
  75. package/dist/bundle/chunks/openai-chatgpt.js +75 -0
  76. package/dist/bundle/chunks/openai-codex-responses-EMHXEJR4.js +10 -0
  77. package/dist/bundle/chunks/openai-codex.js +75 -0
  78. package/dist/bundle/chunks/openai-completions-LPKRZYMC.js +7 -0
  79. package/dist/bundle/chunks/openai-responses-TOOBRHUV.js +3 -0
  80. package/dist/bundle/chunks/openrouter-images-ZVXWCSIM.js +2 -0
  81. package/dist/bundle/chunks/openrouter.js +75 -0
  82. package/dist/bundle/chunks/relay-messages-QRFJXG5X.js +8 -0
  83. package/dist/bundle/chunks/runtime-O5HLCH3V.js +2 -0
  84. package/dist/bundle/chunks/src-UK77SYZE.js +4 -0
  85. package/dist/bundle/chunks/typesafe-system-one-PRR5K6CI.js +2 -0
  86. package/dist/bundle/chunks/virtual-modules-FNVEVB65.js +2 -0
  87. package/dist/bundle/chunks/xai.js +2 -0
  88. package/dist/bundle/cli-runtime.js +3 -0
  89. package/dist/bundle/cli.js +5 -0
  90. package/dist/bundle/index.js +2 -0
  91. package/dist/bundle/rpc-entry.js +3 -0
  92. package/dist/cli/args.d.ts +61 -0
  93. package/dist/cli/args.d.ts.map +1 -0
  94. package/dist/cli/args.js +454 -0
  95. package/dist/cli/args.js.map +1 -0
  96. package/dist/cli/auth-check.d.ts +19 -0
  97. package/dist/cli/auth-check.d.ts.map +1 -0
  98. package/dist/cli/auth-check.js +50 -0
  99. package/dist/cli/auth-check.js.map +1 -0
  100. package/dist/cli/auth-command.d.ts +24 -0
  101. package/dist/cli/auth-command.d.ts.map +1 -0
  102. package/dist/cli/auth-command.js +103 -0
  103. package/dist/cli/auth-command.js.map +1 -0
  104. package/dist/cli/config-selector.d.ts +16 -0
  105. package/dist/cli/config-selector.d.ts.map +1 -0
  106. package/dist/cli/config-selector.js +32 -0
  107. package/dist/cli/config-selector.js.map +1 -0
  108. package/dist/cli/credential-print.d.ts +13 -0
  109. package/dist/cli/credential-print.d.ts.map +1 -0
  110. package/dist/cli/credential-print.js +76 -0
  111. package/dist/cli/credential-print.js.map +1 -0
  112. package/dist/cli/file-processor.d.ts +15 -0
  113. package/dist/cli/file-processor.d.ts.map +1 -0
  114. package/dist/cli/file-processor.js +71 -0
  115. package/dist/cli/file-processor.js.map +1 -0
  116. package/dist/cli/initial-message.d.ts +18 -0
  117. package/dist/cli/initial-message.d.ts.map +1 -0
  118. package/dist/cli/initial-message.js +22 -0
  119. package/dist/cli/initial-message.js.map +1 -0
  120. package/dist/cli/list-models.d.ts +9 -0
  121. package/dist/cli/list-models.d.ts.map +1 -0
  122. package/dist/cli/list-models.js +98 -0
  123. package/dist/cli/list-models.js.map +1 -0
  124. package/dist/cli/project-trust.d.ts +10 -0
  125. package/dist/cli/project-trust.d.ts.map +1 -0
  126. package/dist/cli/project-trust.js +48 -0
  127. package/dist/cli/project-trust.js.map +1 -0
  128. package/dist/cli/session-picker.d.ts +10 -0
  129. package/dist/cli/session-picker.d.ts.map +1 -0
  130. package/dist/cli/session-picker.js +36 -0
  131. package/dist/cli/session-picker.js.map +1 -0
  132. package/dist/cli/setup.d.ts +2 -0
  133. package/dist/cli/setup.d.ts.map +1 -0
  134. package/dist/cli/setup.js +12 -0
  135. package/dist/cli/setup.js.map +1 -0
  136. package/dist/cli/startup-ui.d.ts +20 -0
  137. package/dist/cli/startup-ui.d.ts.map +1 -0
  138. package/dist/cli/startup-ui.js +193 -0
  139. package/dist/cli/startup-ui.js.map +1 -0
  140. package/dist/cli.d.ts +3 -0
  141. package/dist/cli.d.ts.map +1 -0
  142. package/dist/cli.js +6 -0
  143. package/dist/cli.js.map +1 -0
  144. package/dist/config.d.ts +108 -0
  145. package/dist/config.d.ts.map +1 -0
  146. package/dist/config.js +264 -0
  147. package/dist/config.js.map +1 -0
  148. package/dist/core/agent-session-runtime.d.ts +119 -0
  149. package/dist/core/agent-session-runtime.d.ts.map +1 -0
  150. package/dist/core/agent-session-runtime.js +317 -0
  151. package/dist/core/agent-session-runtime.js.map +1 -0
  152. package/dist/core/agent-session-services.d.ts +86 -0
  153. package/dist/core/agent-session-services.d.ts.map +1 -0
  154. package/dist/core/agent-session-services.js +147 -0
  155. package/dist/core/agent-session-services.js.map +1 -0
  156. package/dist/core/agent-session.d.ts +891 -0
  157. package/dist/core/agent-session.d.ts.map +1 -0
  158. package/dist/core/agent-session.js +3553 -0
  159. package/dist/core/agent-session.js.map +1 -0
  160. package/dist/core/auth-guidance.d.ts +5 -0
  161. package/dist/core/auth-guidance.d.ts.map +1 -0
  162. package/dist/core/auth-guidance.js +21 -0
  163. package/dist/core/auth-guidance.js.map +1 -0
  164. package/dist/core/auth-storage.d.ts +72 -0
  165. package/dist/core/auth-storage.d.ts.map +1 -0
  166. package/dist/core/auth-storage.js +426 -0
  167. package/dist/core/auth-storage.js.map +1 -0
  168. package/dist/core/bash-executor.d.ts +32 -0
  169. package/dist/core/bash-executor.d.ts.map +1 -0
  170. package/dist/core/bash-executor.js +106 -0
  171. package/dist/core/bash-executor.js.map +1 -0
  172. package/dist/core/bug-report.d.ts +176 -0
  173. package/dist/core/bug-report.d.ts.map +1 -0
  174. package/dist/core/bug-report.js +292 -0
  175. package/dist/core/bug-report.js.map +1 -0
  176. package/dist/core/cache-stats.d.ts +49 -0
  177. package/dist/core/cache-stats.d.ts.map +1 -0
  178. package/dist/core/cache-stats.js +112 -0
  179. package/dist/core/cache-stats.js.map +1 -0
  180. package/dist/core/cache-warmer.d.ts +103 -0
  181. package/dist/core/cache-warmer.d.ts.map +1 -0
  182. package/dist/core/cache-warmer.js +356 -0
  183. package/dist/core/cache-warmer.js.map +1 -0
  184. package/dist/core/compaction/branch-summarization.d.ts +98 -0
  185. package/dist/core/compaction/branch-summarization.d.ts.map +1 -0
  186. package/dist/core/compaction/branch-summarization.js +251 -0
  187. package/dist/core/compaction/branch-summarization.js.map +1 -0
  188. package/dist/core/compaction/compaction.d.ts +145 -0
  189. package/dist/core/compaction/compaction.d.ts.map +1 -0
  190. package/dist/core/compaction/compaction.js +744 -0
  191. package/dist/core/compaction/compaction.js.map +1 -0
  192. package/dist/core/compaction/index.d.ts +7 -0
  193. package/dist/core/compaction/index.d.ts.map +1 -0
  194. package/dist/core/compaction/index.js +7 -0
  195. package/dist/core/compaction/index.js.map +1 -0
  196. package/dist/core/compaction/utils.d.ts +39 -0
  197. package/dist/core/compaction/utils.d.ts.map +1 -0
  198. package/dist/core/compaction/utils.js +149 -0
  199. package/dist/core/compaction/utils.js.map +1 -0
  200. package/dist/core/crash-log.d.ts +27 -0
  201. package/dist/core/crash-log.d.ts.map +1 -0
  202. package/dist/core/crash-log.js +140 -0
  203. package/dist/core/crash-log.js.map +1 -0
  204. package/dist/core/defaults.d.ts +4 -0
  205. package/dist/core/defaults.d.ts.map +1 -0
  206. package/dist/core/defaults.js +11 -0
  207. package/dist/core/defaults.js.map +1 -0
  208. package/dist/core/diagnostics.d.ts +15 -0
  209. package/dist/core/diagnostics.d.ts.map +1 -0
  210. package/dist/core/diagnostics.js +2 -0
  211. package/dist/core/diagnostics.js.map +1 -0
  212. package/dist/core/event-bus.d.ts +9 -0
  213. package/dist/core/event-bus.d.ts.map +1 -0
  214. package/dist/core/event-bus.js +25 -0
  215. package/dist/core/event-bus.js.map +1 -0
  216. package/dist/core/exec.d.ts +29 -0
  217. package/dist/core/exec.d.ts.map +1 -0
  218. package/dist/core/exec.js +75 -0
  219. package/dist/core/exec.js.map +1 -0
  220. package/dist/core/experimental.d.ts +2 -0
  221. package/dist/core/experimental.d.ts.map +1 -0
  222. package/dist/core/experimental.js +4 -0
  223. package/dist/core/experimental.js.map +1 -0
  224. package/dist/core/export-html/ansi-to-html.d.ts +22 -0
  225. package/dist/core/export-html/ansi-to-html.d.ts.map +1 -0
  226. package/dist/core/export-html/ansi-to-html.js +249 -0
  227. package/dist/core/export-html/ansi-to-html.js.map +1 -0
  228. package/dist/core/export-html/index.d.ts +37 -0
  229. package/dist/core/export-html/index.d.ts.map +1 -0
  230. package/dist/core/export-html/index.js +226 -0
  231. package/dist/core/export-html/index.js.map +1 -0
  232. package/dist/core/export-html/template.css +1076 -0
  233. package/dist/core/export-html/template.html +55 -0
  234. package/dist/core/export-html/template.js +1918 -0
  235. package/dist/core/export-html/tool-renderer.d.ts +34 -0
  236. package/dist/core/export-html/tool-renderer.d.ts.map +1 -0
  237. package/dist/core/export-html/tool-renderer.js +108 -0
  238. package/dist/core/export-html/tool-renderer.js.map +1 -0
  239. package/dist/core/export-html/vendor/highlight.min.js +1213 -0
  240. package/dist/core/export-html/vendor/marked.min.js +78 -0
  241. package/dist/core/extensions/index.d.ts +12 -0
  242. package/dist/core/extensions/index.d.ts.map +1 -0
  243. package/dist/core/extensions/index.js +9 -0
  244. package/dist/core/extensions/index.js.map +1 -0
  245. package/dist/core/extensions/jiti-loader.d.ts +2 -0
  246. package/dist/core/extensions/jiti-loader.d.ts.map +1 -0
  247. package/dist/core/extensions/jiti-loader.js +4 -0
  248. package/dist/core/extensions/jiti-loader.js.map +1 -0
  249. package/dist/core/extensions/jiti-static-loader.d.ts +2 -0
  250. package/dist/core/extensions/jiti-static-loader.d.ts.map +1 -0
  251. package/dist/core/extensions/jiti-static-loader.js +4 -0
  252. package/dist/core/extensions/jiti-static-loader.js.map +1 -0
  253. package/dist/core/extensions/loader.d.ts +23 -0
  254. package/dist/core/extensions/loader.d.ts.map +1 -0
  255. package/dist/core/extensions/loader.js +701 -0
  256. package/dist/core/extensions/loader.js.map +1 -0
  257. package/dist/core/extensions/runner.d.ts +213 -0
  258. package/dist/core/extensions/runner.d.ts.map +1 -0
  259. package/dist/core/extensions/runner.js +1239 -0
  260. package/dist/core/extensions/runner.js.map +1 -0
  261. package/dist/core/extensions/types.d.ts +1720 -0
  262. package/dist/core/extensions/types.d.ts.map +1 -0
  263. package/dist/core/extensions/types.js +48 -0
  264. package/dist/core/extensions/types.js.map +1 -0
  265. package/dist/core/extensions/virtual-modules.d.ts +3 -0
  266. package/dist/core/extensions/virtual-modules.d.ts.map +1 -0
  267. package/dist/core/extensions/virtual-modules.js +38 -0
  268. package/dist/core/extensions/virtual-modules.js.map +1 -0
  269. package/dist/core/extensions/wrapper.d.ts +20 -0
  270. package/dist/core/extensions/wrapper.d.ts.map +1 -0
  271. package/dist/core/extensions/wrapper.js +22 -0
  272. package/dist/core/extensions/wrapper.js.map +1 -0
  273. package/dist/core/footer-data-provider.d.ts +64 -0
  274. package/dist/core/footer-data-provider.d.ts.map +1 -0
  275. package/dist/core/footer-data-provider.js +338 -0
  276. package/dist/core/footer-data-provider.js.map +1 -0
  277. package/dist/core/harness-core.d.ts +50 -0
  278. package/dist/core/harness-core.d.ts.map +1 -0
  279. package/dist/core/harness-core.js +240 -0
  280. package/dist/core/harness-core.js.map +1 -0
  281. package/dist/core/http-dispatcher.d.ts +22 -0
  282. package/dist/core/http-dispatcher.d.ts.map +1 -0
  283. package/dist/core/http-dispatcher.js +98 -0
  284. package/dist/core/http-dispatcher.js.map +1 -0
  285. package/dist/core/index.d.ts +14 -0
  286. package/dist/core/index.d.ts.map +1 -0
  287. package/dist/core/index.js +13 -0
  288. package/dist/core/index.js.map +1 -0
  289. package/dist/core/keybindings.d.ts +428 -0
  290. package/dist/core/keybindings.d.ts.map +1 -0
  291. package/dist/core/keybindings.js +321 -0
  292. package/dist/core/keybindings.js.map +1 -0
  293. package/dist/core/mcp-servers.d.ts +125 -0
  294. package/dist/core/mcp-servers.d.ts.map +1 -0
  295. package/dist/core/mcp-servers.js +198 -0
  296. package/dist/core/mcp-servers.js.map +1 -0
  297. package/dist/core/messages.d.ts +77 -0
  298. package/dist/core/messages.d.ts.map +1 -0
  299. package/dist/core/messages.js +124 -0
  300. package/dist/core/messages.js.map +1 -0
  301. package/dist/core/model-config.d.ts +759 -0
  302. package/dist/core/model-config.d.ts.map +1 -0
  303. package/dist/core/model-config.js +293 -0
  304. package/dist/core/model-config.js.map +1 -0
  305. package/dist/core/model-registry.d.ts +63 -0
  306. package/dist/core/model-registry.d.ts.map +1 -0
  307. package/dist/core/model-registry.js +144 -0
  308. package/dist/core/model-registry.js.map +1 -0
  309. package/dist/core/model-resolver.d.ts +124 -0
  310. package/dist/core/model-resolver.d.ts.map +1 -0
  311. package/dist/core/model-resolver.js +589 -0
  312. package/dist/core/model-resolver.js.map +1 -0
  313. package/dist/core/model-runtime.d.ts +142 -0
  314. package/dist/core/model-runtime.d.ts.map +1 -0
  315. package/dist/core/model-runtime.js +732 -0
  316. package/dist/core/model-runtime.js.map +1 -0
  317. package/dist/core/models-store.d.ts +22 -0
  318. package/dist/core/models-store.d.ts.map +1 -0
  319. package/dist/core/models-store.js +115 -0
  320. package/dist/core/models-store.js.map +1 -0
  321. package/dist/core/nested-tool-calls.d.ts +102 -0
  322. package/dist/core/nested-tool-calls.d.ts.map +1 -0
  323. package/dist/core/nested-tool-calls.js +178 -0
  324. package/dist/core/nested-tool-calls.js.map +1 -0
  325. package/dist/core/output-guard.d.ts +7 -0
  326. package/dist/core/output-guard.d.ts.map +1 -0
  327. package/dist/core/output-guard.js +89 -0
  328. package/dist/core/output-guard.js.map +1 -0
  329. package/dist/core/package-manager.d.ts +217 -0
  330. package/dist/core/package-manager.d.ts.map +1 -0
  331. package/dist/core/package-manager.js +2224 -0
  332. package/dist/core/package-manager.js.map +1 -0
  333. package/dist/core/project-trust.d.ts +15 -0
  334. package/dist/core/project-trust.d.ts.map +1 -0
  335. package/dist/core/project-trust.js +59 -0
  336. package/dist/core/project-trust.js.map +1 -0
  337. package/dist/core/prompt-templates.d.ts +59 -0
  338. package/dist/core/prompt-templates.d.ts.map +1 -0
  339. package/dist/core/prompt-templates.js +262 -0
  340. package/dist/core/prompt-templates.js.map +1 -0
  341. package/dist/core/provider-attribution.d.ts +4 -0
  342. package/dist/core/provider-attribution.d.ts.map +1 -0
  343. package/dist/core/provider-attribution.js +72 -0
  344. package/dist/core/provider-attribution.js.map +1 -0
  345. package/dist/core/provider-composer.d.ts +80 -0
  346. package/dist/core/provider-composer.d.ts.map +1 -0
  347. package/dist/core/provider-composer.js +484 -0
  348. package/dist/core/provider-composer.js.map +1 -0
  349. package/dist/core/relay-manifest.d.ts +8 -0
  350. package/dist/core/relay-manifest.d.ts.map +1 -0
  351. package/dist/core/relay-manifest.js +26 -0
  352. package/dist/core/relay-manifest.js.map +1 -0
  353. package/dist/core/resolve-config-value.d.ts +30 -0
  354. package/dist/core/resolve-config-value.d.ts.map +1 -0
  355. package/dist/core/resolve-config-value.js +247 -0
  356. package/dist/core/resolve-config-value.js.map +1 -0
  357. package/dist/core/resource-loader.d.ts +227 -0
  358. package/dist/core/resource-loader.d.ts.map +1 -0
  359. package/dist/core/resource-loader.js +1005 -0
  360. package/dist/core/resource-loader.js.map +1 -0
  361. package/dist/core/runtime-credentials.d.ts +15 -0
  362. package/dist/core/runtime-credentials.d.ts.map +1 -0
  363. package/dist/core/runtime-credentials.js +39 -0
  364. package/dist/core/runtime-credentials.js.map +1 -0
  365. package/dist/core/sdk.d.ts +108 -0
  366. package/dist/core/sdk.d.ts.map +1 -0
  367. package/dist/core/sdk.js +315 -0
  368. package/dist/core/sdk.js.map +1 -0
  369. package/dist/core/session-cwd.d.ts +19 -0
  370. package/dist/core/session-cwd.d.ts.map +1 -0
  371. package/dist/core/session-cwd.js +38 -0
  372. package/dist/core/session-cwd.js.map +1 -0
  373. package/dist/core/session-export.d.ts +8 -0
  374. package/dist/core/session-export.d.ts.map +1 -0
  375. package/dist/core/session-export.js +33 -0
  376. package/dist/core/session-export.js.map +1 -0
  377. package/dist/core/session-manager.d.ts +416 -0
  378. package/dist/core/session-manager.d.ts.map +1 -0
  379. package/dist/core/session-manager.js +1523 -0
  380. package/dist/core/session-manager.js.map +1 -0
  381. package/dist/core/settings-diagnostics.d.ts +9 -0
  382. package/dist/core/settings-diagnostics.d.ts.map +1 -0
  383. package/dist/core/settings-diagnostics.js +21 -0
  384. package/dist/core/settings-diagnostics.js.map +1 -0
  385. package/dist/core/settings-manager.d.ts +421 -0
  386. package/dist/core/settings-manager.d.ts.map +1 -0
  387. package/dist/core/settings-manager.js +1120 -0
  388. package/dist/core/settings-manager.js.map +1 -0
  389. package/dist/core/skills.d.ts +60 -0
  390. package/dist/core/skills.d.ts.map +1 -0
  391. package/dist/core/skills.js +408 -0
  392. package/dist/core/skills.js.map +1 -0
  393. package/dist/core/slash-commands.d.ts +15 -0
  394. package/dist/core/slash-commands.d.ts.map +1 -0
  395. package/dist/core/slash-commands.js +29 -0
  396. package/dist/core/slash-commands.js.map +1 -0
  397. package/dist/core/source-info.d.ts +26 -0
  398. package/dist/core/source-info.d.ts.map +1 -0
  399. package/dist/core/source-info.js +35 -0
  400. package/dist/core/source-info.js.map +1 -0
  401. package/dist/core/system-prompt.d.ts +71 -0
  402. package/dist/core/system-prompt.d.ts.map +1 -0
  403. package/dist/core/system-prompt.js +147 -0
  404. package/dist/core/system-prompt.js.map +1 -0
  405. package/dist/core/telemetry.d.ts +3 -0
  406. package/dist/core/telemetry.d.ts.map +1 -0
  407. package/dist/core/telemetry.js +9 -0
  408. package/dist/core/telemetry.js.map +1 -0
  409. package/dist/core/timings.d.ts +10 -0
  410. package/dist/core/timings.d.ts.map +1 -0
  411. package/dist/core/timings.js +41 -0
  412. package/dist/core/timings.js.map +1 -0
  413. package/dist/core/tools/bash.d.ts +100 -0
  414. package/dist/core/tools/bash.d.ts.map +1 -0
  415. package/dist/core/tools/bash.js +333 -0
  416. package/dist/core/tools/bash.js.map +1 -0
  417. package/dist/core/tools/edit-diff.d.ts +101 -0
  418. package/dist/core/tools/edit-diff.d.ts.map +1 -0
  419. package/dist/core/tools/edit-diff.js +421 -0
  420. package/dist/core/tools/edit-diff.js.map +1 -0
  421. package/dist/core/tools/edit.d.ts +44 -0
  422. package/dist/core/tools/edit.d.ts.map +1 -0
  423. package/dist/core/tools/edit.js +147 -0
  424. package/dist/core/tools/edit.js.map +1 -0
  425. package/dist/core/tools/file-mutation-queue.d.ts +6 -0
  426. package/dist/core/tools/file-mutation-queue.d.ts.map +1 -0
  427. package/dist/core/tools/file-mutation-queue.js +52 -0
  428. package/dist/core/tools/file-mutation-queue.js.map +1 -0
  429. package/dist/core/tools/find.d.ts +42 -0
  430. package/dist/core/tools/find.d.ts.map +1 -0
  431. package/dist/core/tools/find.js +251 -0
  432. package/dist/core/tools/find.js.map +1 -0
  433. package/dist/core/tools/grep.d.ts +41 -0
  434. package/dist/core/tools/grep.d.ts.map +1 -0
  435. package/dist/core/tools/grep.js +252 -0
  436. package/dist/core/tools/grep.js.map +1 -0
  437. package/dist/core/tools/index.d.ts +43 -0
  438. package/dist/core/tools/index.d.ts.map +1 -0
  439. package/dist/core/tools/index.js +129 -0
  440. package/dist/core/tools/index.js.map +1 -0
  441. package/dist/core/tools/ls.d.ts +41 -0
  442. package/dist/core/tools/ls.d.ts.map +1 -0
  443. package/dist/core/tools/ls.js +126 -0
  444. package/dist/core/tools/ls.js.map +1 -0
  445. package/dist/core/tools/output-accumulator.d.ts +63 -0
  446. package/dist/core/tools/output-accumulator.d.ts.map +1 -0
  447. package/dist/core/tools/output-accumulator.js +214 -0
  448. package/dist/core/tools/output-accumulator.js.map +1 -0
  449. package/dist/core/tools/path-utils.d.ts +10 -0
  450. package/dist/core/tools/path-utils.d.ts.map +1 -0
  451. package/dist/core/tools/path-utils.js +99 -0
  452. package/dist/core/tools/path-utils.js.map +1 -0
  453. package/dist/core/tools/powershell.d.ts +16 -0
  454. package/dist/core/tools/powershell.d.ts.map +1 -0
  455. package/dist/core/tools/powershell.js +39 -0
  456. package/dist/core/tools/powershell.js.map +1 -0
  457. package/dist/core/tools/read.d.ts +42 -0
  458. package/dist/core/tools/read.d.ts.map +1 -0
  459. package/dist/core/tools/read.js +169 -0
  460. package/dist/core/tools/read.js.map +1 -0
  461. package/dist/core/tools/render-utils.d.ts +30 -0
  462. package/dist/core/tools/render-utils.d.ts.map +1 -0
  463. package/dist/core/tools/render-utils.js +91 -0
  464. package/dist/core/tools/render-utils.js.map +1 -0
  465. package/dist/core/tools/renderers/bash.d.ts +12 -0
  466. package/dist/core/tools/renderers/bash.d.ts.map +1 -0
  467. package/dist/core/tools/renderers/bash.js +117 -0
  468. package/dist/core/tools/renderers/bash.js.map +1 -0
  469. package/dist/core/tools/renderers/edit.d.ts +23 -0
  470. package/dist/core/tools/renderers/edit.d.ts.map +1 -0
  471. package/dist/core/tools/renderers/edit.js +167 -0
  472. package/dist/core/tools/renderers/edit.js.map +1 -0
  473. package/dist/core/tools/renderers/find.d.ts +10 -0
  474. package/dist/core/tools/renderers/find.d.ts.map +1 -0
  475. package/dist/core/tools/renderers/find.js +64 -0
  476. package/dist/core/tools/renderers/find.js.map +1 -0
  477. package/dist/core/tools/renderers/grep.d.ts +10 -0
  478. package/dist/core/tools/renderers/grep.d.ts.map +1 -0
  479. package/dist/core/tools/renderers/grep.js +69 -0
  480. package/dist/core/tools/renderers/grep.js.map +1 -0
  481. package/dist/core/tools/renderers/index.d.ts +28 -0
  482. package/dist/core/tools/renderers/index.d.ts.map +1 -0
  483. package/dist/core/tools/renderers/index.js +47 -0
  484. package/dist/core/tools/renderers/index.js.map +1 -0
  485. package/dist/core/tools/renderers/ls.d.ts +10 -0
  486. package/dist/core/tools/renderers/ls.d.ts.map +1 -0
  487. package/dist/core/tools/renderers/ls.js +58 -0
  488. package/dist/core/tools/renderers/ls.js.map +1 -0
  489. package/dist/core/tools/renderers/read.d.ts +11 -0
  490. package/dist/core/tools/renderers/read.d.ts.map +1 -0
  491. package/dist/core/tools/renderers/read.js +130 -0
  492. package/dist/core/tools/renderers/read.js.map +1 -0
  493. package/dist/core/tools/renderers/write.d.ts +10 -0
  494. package/dist/core/tools/renderers/write.d.ts.map +1 -0
  495. package/dist/core/tools/renderers/write.js +153 -0
  496. package/dist/core/tools/renderers/write.js.map +1 -0
  497. package/dist/core/tools/tool-definition-wrapper.d.ts +16 -0
  498. package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -0
  499. package/dist/core/tools/tool-definition-wrapper.js +38 -0
  500. package/dist/core/tools/tool-definition-wrapper.js.map +1 -0
  501. package/dist/core/tools/truncate.d.ts +84 -0
  502. package/dist/core/tools/truncate.d.ts.map +1 -0
  503. package/dist/core/tools/truncate.js +244 -0
  504. package/dist/core/tools/truncate.js.map +1 -0
  505. package/dist/core/tools/write.d.ts +30 -0
  506. package/dist/core/tools/write.d.ts.map +1 -0
  507. package/dist/core/tools/write.js +61 -0
  508. package/dist/core/tools/write.js.map +1 -0
  509. package/dist/core/trust-manager.d.ts +36 -0
  510. package/dist/core/trust-manager.d.ts.map +1 -0
  511. package/dist/core/trust-manager.js +204 -0
  512. package/dist/core/trust-manager.js.map +1 -0
  513. package/dist/core/usage-totals.d.ts +21 -0
  514. package/dist/core/usage-totals.d.ts.map +1 -0
  515. package/dist/core/usage-totals.js +79 -0
  516. package/dist/core/usage-totals.js.map +1 -0
  517. package/dist/core/virtual-models.d.ts +117 -0
  518. package/dist/core/virtual-models.d.ts.map +1 -0
  519. package/dist/core/virtual-models.js +124 -0
  520. package/dist/core/virtual-models.js.map +1 -0
  521. package/dist/core/workspace-probe.d.ts +8 -0
  522. package/dist/core/workspace-probe.d.ts.map +1 -0
  523. package/dist/core/workspace-probe.js +65 -0
  524. package/dist/core/workspace-probe.js.map +1 -0
  525. package/dist/extensions/codemode/execute.d.ts +16 -0
  526. package/dist/extensions/codemode/execute.d.ts.map +1 -0
  527. package/dist/extensions/codemode/execute.js +577 -0
  528. package/dist/extensions/codemode/execute.js.map +1 -0
  529. package/dist/extensions/codemode/execute.lazy.d.ts +3 -0
  530. package/dist/extensions/codemode/execute.lazy.d.ts.map +1 -0
  531. package/dist/extensions/codemode/execute.lazy.js +3 -0
  532. package/dist/extensions/codemode/execute.lazy.js.map +1 -0
  533. package/dist/extensions/codemode/index.d.ts +21 -0
  534. package/dist/extensions/codemode/index.d.ts.map +1 -0
  535. package/dist/extensions/codemode/index.js +31 -0
  536. package/dist/extensions/codemode/index.js.map +1 -0
  537. package/dist/extensions/codemode/renderer.d.ts +12 -0
  538. package/dist/extensions/codemode/renderer.d.ts.map +1 -0
  539. package/dist/extensions/codemode/renderer.js +137 -0
  540. package/dist/extensions/codemode/renderer.js.map +1 -0
  541. package/dist/extensions/codemode/tool.d.ts +123 -0
  542. package/dist/extensions/codemode/tool.d.ts.map +1 -0
  543. package/dist/extensions/codemode/tool.js +268 -0
  544. package/dist/extensions/codemode/tool.js.map +1 -0
  545. package/dist/extensions/codemode/worker.d.ts +7 -0
  546. package/dist/extensions/codemode/worker.d.ts.map +1 -0
  547. package/dist/extensions/codemode/worker.js +7 -0
  548. package/dist/extensions/codemode/worker.js.map +1 -0
  549. package/dist/extensions/index.d.ts +3 -0
  550. package/dist/extensions/index.d.ts.map +1 -0
  551. package/dist/extensions/index.js +19 -0
  552. package/dist/extensions/index.js.map +1 -0
  553. package/dist/extensions/intake/docx.d.ts +42 -0
  554. package/dist/extensions/intake/docx.d.ts.map +1 -0
  555. package/dist/extensions/intake/docx.js +148 -0
  556. package/dist/extensions/intake/docx.js.map +1 -0
  557. package/dist/extensions/intake/index.d.ts +17 -0
  558. package/dist/extensions/intake/index.d.ts.map +1 -0
  559. package/dist/extensions/intake/index.js +88 -0
  560. package/dist/extensions/intake/index.js.map +1 -0
  561. package/dist/extensions/intake/prompt.d.ts +6 -0
  562. package/dist/extensions/intake/prompt.d.ts.map +1 -0
  563. package/dist/extensions/intake/prompt.js +41 -0
  564. package/dist/extensions/intake/prompt.js.map +1 -0
  565. package/dist/extensions/intake/questionnaire.d.ts +84 -0
  566. package/dist/extensions/intake/questionnaire.d.ts.map +1 -0
  567. package/dist/extensions/intake/questionnaire.js +472 -0
  568. package/dist/extensions/intake/questionnaire.js.map +1 -0
  569. package/dist/extensions/laya/assessment.d.ts +34 -0
  570. package/dist/extensions/laya/assessment.d.ts.map +1 -0
  571. package/dist/extensions/laya/assessment.js +171 -0
  572. package/dist/extensions/laya/assessment.js.map +1 -0
  573. package/dist/extensions/laya/index.d.ts +34 -0
  574. package/dist/extensions/laya/index.d.ts.map +1 -0
  575. package/dist/extensions/laya/index.js +516 -0
  576. package/dist/extensions/laya/index.js.map +1 -0
  577. package/dist/extensions/laya/model-manifest.d.ts +7 -0
  578. package/dist/extensions/laya/model-manifest.d.ts.map +1 -0
  579. package/dist/extensions/laya/model-manifest.js +48 -0
  580. package/dist/extensions/laya/model-manifest.js.map +1 -0
  581. package/dist/extensions/laya/policy.d.ts +130 -0
  582. package/dist/extensions/laya/policy.d.ts.map +1 -0
  583. package/dist/extensions/laya/policy.js +222 -0
  584. package/dist/extensions/laya/policy.js.map +1 -0
  585. package/dist/extensions/laya/questions.d.ts +60 -0
  586. package/dist/extensions/laya/questions.d.ts.map +1 -0
  587. package/dist/extensions/laya/questions.js +189 -0
  588. package/dist/extensions/laya/questions.js.map +1 -0
  589. package/dist/extensions/laya/routers.d.ts +17 -0
  590. package/dist/extensions/laya/routers.d.ts.map +1 -0
  591. package/dist/extensions/laya/routers.js +119 -0
  592. package/dist/extensions/laya/routers.js.map +1 -0
  593. package/dist/extensions/laya/runtime.d.ts +68 -0
  594. package/dist/extensions/laya/runtime.d.ts.map +1 -0
  595. package/dist/extensions/laya/runtime.js +179 -0
  596. package/dist/extensions/laya/runtime.js.map +1 -0
  597. package/dist/extensions/laya/seed.d.ts +39 -0
  598. package/dist/extensions/laya/seed.d.ts.map +1 -0
  599. package/dist/extensions/laya/seed.js +358 -0
  600. package/dist/extensions/laya/seed.js.map +1 -0
  601. package/dist/extensions/laya/server.d.ts +26 -0
  602. package/dist/extensions/laya/server.d.ts.map +1 -0
  603. package/dist/extensions/laya/server.js +117 -0
  604. package/dist/extensions/laya/server.js.map +1 -0
  605. package/dist/extensions/laya/telemetry.d.ts +94 -0
  606. package/dist/extensions/laya/telemetry.d.ts.map +1 -0
  607. package/dist/extensions/laya/telemetry.js +107 -0
  608. package/dist/extensions/laya/telemetry.js.map +1 -0
  609. package/dist/extensions/llama/client.d.ts +69 -0
  610. package/dist/extensions/llama/client.d.ts.map +1 -0
  611. package/dist/extensions/llama/client.js +313 -0
  612. package/dist/extensions/llama/client.js.map +1 -0
  613. package/dist/extensions/llama/huggingface.d.ts +23 -0
  614. package/dist/extensions/llama/huggingface.d.ts.map +1 -0
  615. package/dist/extensions/llama/huggingface.js +141 -0
  616. package/dist/extensions/llama/huggingface.js.map +1 -0
  617. package/dist/extensions/llama/index.d.ts +3 -0
  618. package/dist/extensions/llama/index.d.ts.map +1 -0
  619. package/dist/extensions/llama/index.js +219 -0
  620. package/dist/extensions/llama/index.js.map +1 -0
  621. package/dist/extensions/llama/provider.d.ts +12 -0
  622. package/dist/extensions/llama/provider.d.ts.map +1 -0
  623. package/dist/extensions/llama/provider.js +213 -0
  624. package/dist/extensions/llama/provider.js.map +1 -0
  625. package/dist/extensions/llama/ui.d.ts +42 -0
  626. package/dist/extensions/llama/ui.d.ts.map +1 -0
  627. package/dist/extensions/llama/ui.js +416 -0
  628. package/dist/extensions/llama/ui.js.map +1 -0
  629. package/dist/extensions/mcp/cli.d.ts +21 -0
  630. package/dist/extensions/mcp/cli.d.ts.map +1 -0
  631. package/dist/extensions/mcp/cli.js +503 -0
  632. package/dist/extensions/mcp/cli.js.map +1 -0
  633. package/dist/extensions/mcp/cli.lazy.d.ts +3 -0
  634. package/dist/extensions/mcp/cli.lazy.d.ts.map +1 -0
  635. package/dist/extensions/mcp/cli.lazy.js +3 -0
  636. package/dist/extensions/mcp/cli.lazy.js.map +1 -0
  637. package/dist/extensions/mcp/config.d.ts +84 -0
  638. package/dist/extensions/mcp/config.d.ts.map +1 -0
  639. package/dist/extensions/mcp/config.js +194 -0
  640. package/dist/extensions/mcp/config.js.map +1 -0
  641. package/dist/extensions/mcp/index.d.ts +79 -0
  642. package/dist/extensions/mcp/index.d.ts.map +1 -0
  643. package/dist/extensions/mcp/index.js +1101 -0
  644. package/dist/extensions/mcp/index.js.map +1 -0
  645. package/dist/extensions/mcp/log.d.ts +16 -0
  646. package/dist/extensions/mcp/log.d.ts.map +1 -0
  647. package/dist/extensions/mcp/log.js +66 -0
  648. package/dist/extensions/mcp/log.js.map +1 -0
  649. package/dist/extensions/mcp/oauth.d.ts +98 -0
  650. package/dist/extensions/mcp/oauth.d.ts.map +1 -0
  651. package/dist/extensions/mcp/oauth.js +366 -0
  652. package/dist/extensions/mcp/oauth.js.map +1 -0
  653. package/dist/extensions/mcp/resources.d.ts +43 -0
  654. package/dist/extensions/mcp/resources.d.ts.map +1 -0
  655. package/dist/extensions/mcp/resources.js +262 -0
  656. package/dist/extensions/mcp/resources.js.map +1 -0
  657. package/dist/extensions/mcp/runtime.d.ts +98 -0
  658. package/dist/extensions/mcp/runtime.d.ts.map +1 -0
  659. package/dist/extensions/mcp/runtime.js +395 -0
  660. package/dist/extensions/mcp/runtime.js.map +1 -0
  661. package/dist/extensions/mcp/runtime.lazy.d.ts +3 -0
  662. package/dist/extensions/mcp/runtime.lazy.d.ts.map +1 -0
  663. package/dist/extensions/mcp/runtime.lazy.js +3 -0
  664. package/dist/extensions/mcp/runtime.lazy.js.map +1 -0
  665. package/dist/extensions/mcp/tools.d.ts +86 -0
  666. package/dist/extensions/mcp/tools.d.ts.map +1 -0
  667. package/dist/extensions/mcp/tools.js +252 -0
  668. package/dist/extensions/mcp/tools.js.map +1 -0
  669. package/dist/extensions/mcp/ui.d.ts +60 -0
  670. package/dist/extensions/mcp/ui.d.ts.map +1 -0
  671. package/dist/extensions/mcp/ui.js +178 -0
  672. package/dist/extensions/mcp/ui.js.map +1 -0
  673. package/dist/extensions/tool-search/index.d.ts +12 -0
  674. package/dist/extensions/tool-search/index.d.ts.map +1 -0
  675. package/dist/extensions/tool-search/index.js +15 -0
  676. package/dist/extensions/tool-search/index.js.map +1 -0
  677. package/dist/extensions/tool-search/tool.d.ts +73 -0
  678. package/dist/extensions/tool-search/tool.d.ts.map +1 -0
  679. package/dist/extensions/tool-search/tool.js +189 -0
  680. package/dist/extensions/tool-search/tool.js.map +1 -0
  681. package/dist/index.d.ts +44 -0
  682. package/dist/index.d.ts.map +1 -0
  683. package/dist/index.js +53 -0
  684. package/dist/index.js.map +1 -0
  685. package/dist/main.d.ts +16 -0
  686. package/dist/main.d.ts.map +1 -0
  687. package/dist/main.js +820 -0
  688. package/dist/main.js.map +1 -0
  689. package/dist/migrations.d.ts +33 -0
  690. package/dist/migrations.d.ts.map +1 -0
  691. package/dist/migrations.js +282 -0
  692. package/dist/migrations.js.map +1 -0
  693. package/dist/modes/index.d.ts +10 -0
  694. package/dist/modes/index.d.ts.map +1 -0
  695. package/dist/modes/index.js +8 -0
  696. package/dist/modes/index.js.map +1 -0
  697. package/dist/modes/interactive/assets/clankolas.png +0 -0
  698. package/dist/modes/interactive/bug-report.d.ts +16 -0
  699. package/dist/modes/interactive/bug-report.d.ts.map +1 -0
  700. package/dist/modes/interactive/bug-report.js +171 -0
  701. package/dist/modes/interactive/bug-report.js.map +1 -0
  702. package/dist/modes/interactive/chat-viewport.d.ts +20 -0
  703. package/dist/modes/interactive/chat-viewport.d.ts.map +1 -0
  704. package/dist/modes/interactive/chat-viewport.js +28 -0
  705. package/dist/modes/interactive/chat-viewport.js.map +1 -0
  706. package/dist/modes/interactive/components/armin.d.ts +37 -0
  707. package/dist/modes/interactive/components/armin.d.ts.map +1 -0
  708. package/dist/modes/interactive/components/armin.js +335 -0
  709. package/dist/modes/interactive/components/armin.js.map +1 -0
  710. package/dist/modes/interactive/components/assistant-message.d.ts +26 -0
  711. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -0
  712. package/dist/modes/interactive/components/assistant-message.js +158 -0
  713. package/dist/modes/interactive/components/assistant-message.js.map +1 -0
  714. package/dist/modes/interactive/components/auth-url.d.ts +14 -0
  715. package/dist/modes/interactive/components/auth-url.d.ts.map +1 -0
  716. package/dist/modes/interactive/components/auth-url.js +37 -0
  717. package/dist/modes/interactive/components/auth-url.js.map +1 -0
  718. package/dist/modes/interactive/components/bash-execution.d.ts +34 -0
  719. package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -0
  720. package/dist/modes/interactive/components/bash-execution.js +175 -0
  721. package/dist/modes/interactive/components/bash-execution.js.map +1 -0
  722. package/dist/modes/interactive/components/bordered-loader.d.ts +16 -0
  723. package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -0
  724. package/dist/modes/interactive/components/bordered-loader.js +54 -0
  725. package/dist/modes/interactive/components/bordered-loader.js.map +1 -0
  726. package/dist/modes/interactive/components/branch-summary-message.d.ts +16 -0
  727. package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -0
  728. package/dist/modes/interactive/components/branch-summary-message.js +51 -0
  729. package/dist/modes/interactive/components/branch-summary-message.js.map +1 -0
  730. package/dist/modes/interactive/components/compaction-summary-message.d.ts +16 -0
  731. package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -0
  732. package/dist/modes/interactive/components/compaction-summary-message.js +52 -0
  733. package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -0
  734. package/dist/modes/interactive/components/config-selector.d.ts +102 -0
  735. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -0
  736. package/dist/modes/interactive/components/config-selector.js +771 -0
  737. package/dist/modes/interactive/components/config-selector.js.map +1 -0
  738. package/dist/modes/interactive/components/countdown-timer.d.ts +14 -0
  739. package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -0
  740. package/dist/modes/interactive/components/countdown-timer.js +33 -0
  741. package/dist/modes/interactive/components/countdown-timer.js.map +1 -0
  742. package/dist/modes/interactive/components/custom-editor.d.ts +30 -0
  743. package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -0
  744. package/dist/modes/interactive/components/custom-editor.js +115 -0
  745. package/dist/modes/interactive/components/custom-editor.js.map +1 -0
  746. package/dist/modes/interactive/components/custom-entry.d.ts +19 -0
  747. package/dist/modes/interactive/components/custom-entry.d.ts.map +1 -0
  748. package/dist/modes/interactive/components/custom-entry.js +52 -0
  749. package/dist/modes/interactive/components/custom-entry.js.map +1 -0
  750. package/dist/modes/interactive/components/custom-message.d.ts +22 -0
  751. package/dist/modes/interactive/components/custom-message.d.ts.map +1 -0
  752. package/dist/modes/interactive/components/custom-message.js +87 -0
  753. package/dist/modes/interactive/components/custom-message.js.map +1 -0
  754. package/dist/modes/interactive/components/diff.d.ts +12 -0
  755. package/dist/modes/interactive/components/diff.d.ts.map +1 -0
  756. package/dist/modes/interactive/components/diff.js +133 -0
  757. package/dist/modes/interactive/components/diff.js.map +1 -0
  758. package/dist/modes/interactive/components/dynamic-border.d.ts +15 -0
  759. package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -0
  760. package/dist/modes/interactive/components/dynamic-border.js +21 -0
  761. package/dist/modes/interactive/components/dynamic-border.js.map +1 -0
  762. package/dist/modes/interactive/components/earendil-announcement.d.ts +5 -0
  763. package/dist/modes/interactive/components/earendil-announcement.d.ts.map +1 -0
  764. package/dist/modes/interactive/components/earendil-announcement.js +40 -0
  765. package/dist/modes/interactive/components/earendil-announcement.js.map +1 -0
  766. package/dist/modes/interactive/components/easter-egg-3d.d.ts +104 -0
  767. package/dist/modes/interactive/components/easter-egg-3d.d.ts.map +1 -0
  768. package/dist/modes/interactive/components/easter-egg-3d.js +1141 -0
  769. package/dist/modes/interactive/components/easter-egg-3d.js.map +1 -0
  770. package/dist/modes/interactive/components/easter-egg-3d.lazy.d.ts +6 -0
  771. package/dist/modes/interactive/components/easter-egg-3d.lazy.d.ts.map +1 -0
  772. package/dist/modes/interactive/components/easter-egg-3d.lazy.js +23 -0
  773. package/dist/modes/interactive/components/easter-egg-3d.lazy.js.map +1 -0
  774. package/dist/modes/interactive/components/extension-editor.d.ts +24 -0
  775. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -0
  776. package/dist/modes/interactive/components/extension-editor.js +103 -0
  777. package/dist/modes/interactive/components/extension-editor.js.map +1 -0
  778. package/dist/modes/interactive/components/extension-input.d.ts +25 -0
  779. package/dist/modes/interactive/components/extension-input.d.ts.map +1 -0
  780. package/dist/modes/interactive/components/extension-input.js +67 -0
  781. package/dist/modes/interactive/components/extension-input.js.map +1 -0
  782. package/dist/modes/interactive/components/extension-selector.d.ts +27 -0
  783. package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -0
  784. package/dist/modes/interactive/components/extension-selector.js +87 -0
  785. package/dist/modes/interactive/components/extension-selector.js.map +1 -0
  786. package/dist/modes/interactive/components/first-time-setup.d.ts +25 -0
  787. package/dist/modes/interactive/components/first-time-setup.d.ts.map +1 -0
  788. package/dist/modes/interactive/components/first-time-setup.js +109 -0
  789. package/dist/modes/interactive/components/first-time-setup.js.map +1 -0
  790. package/dist/modes/interactive/components/footer.d.ts +39 -0
  791. package/dist/modes/interactive/components/footer.d.ts.map +1 -0
  792. package/dist/modes/interactive/components/footer.js +265 -0
  793. package/dist/modes/interactive/components/footer.js.map +1 -0
  794. package/dist/modes/interactive/components/index.d.ts +33 -0
  795. package/dist/modes/interactive/components/index.d.ts.map +1 -0
  796. package/dist/modes/interactive/components/index.js +34 -0
  797. package/dist/modes/interactive/components/index.js.map +1 -0
  798. package/dist/modes/interactive/components/keybinding-hints.d.ts +13 -0
  799. package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -0
  800. package/dist/modes/interactive/components/keybinding-hints.js +36 -0
  801. package/dist/modes/interactive/components/keybinding-hints.js.map +1 -0
  802. package/dist/modes/interactive/components/login-dialog.d.ts +54 -0
  803. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -0
  804. package/dist/modes/interactive/components/login-dialog.js +194 -0
  805. package/dist/modes/interactive/components/login-dialog.js.map +1 -0
  806. package/dist/modes/interactive/components/markdown-transform.d.ts +3 -0
  807. package/dist/modes/interactive/components/markdown-transform.d.ts.map +1 -0
  808. package/dist/modes/interactive/components/markdown-transform.js +19 -0
  809. package/dist/modes/interactive/components/markdown-transform.js.map +1 -0
  810. package/dist/modes/interactive/components/mermaid.d.ts +11 -0
  811. package/dist/modes/interactive/components/mermaid.d.ts.map +1 -0
  812. package/dist/modes/interactive/components/mermaid.js +75 -0
  813. package/dist/modes/interactive/components/mermaid.js.map +1 -0
  814. package/dist/modes/interactive/components/model-selector.d.ts +60 -0
  815. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -0
  816. package/dist/modes/interactive/components/model-selector.js +361 -0
  817. package/dist/modes/interactive/components/model-selector.js.map +1 -0
  818. package/dist/modes/interactive/components/oauth-selector.d.ts +39 -0
  819. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -0
  820. package/dist/modes/interactive/components/oauth-selector.js +166 -0
  821. package/dist/modes/interactive/components/oauth-selector.js.map +1 -0
  822. package/dist/modes/interactive/components/relay-logo.d.ts +22 -0
  823. package/dist/modes/interactive/components/relay-logo.d.ts.map +1 -0
  824. package/dist/modes/interactive/components/relay-logo.js +63 -0
  825. package/dist/modes/interactive/components/relay-logo.js.map +1 -0
  826. package/dist/modes/interactive/components/scoped-models-selector.d.ts +46 -0
  827. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -0
  828. package/dist/modes/interactive/components/scoped-models-selector.js +326 -0
  829. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -0
  830. package/dist/modes/interactive/components/session-selector-search.d.ts +23 -0
  831. package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -0
  832. package/dist/modes/interactive/components/session-selector-search.js +155 -0
  833. package/dist/modes/interactive/components/session-selector-search.js.map +1 -0
  834. package/dist/modes/interactive/components/session-selector.d.ts +95 -0
  835. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -0
  836. package/dist/modes/interactive/components/session-selector.js +893 -0
  837. package/dist/modes/interactive/components/session-selector.js.map +1 -0
  838. package/dist/modes/interactive/components/settings-selector.d.ts +96 -0
  839. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -0
  840. package/dist/modes/interactive/components/settings-selector.js +742 -0
  841. package/dist/modes/interactive/components/settings-selector.js.map +1 -0
  842. package/dist/modes/interactive/components/settings-submenu.d.ts +72 -0
  843. package/dist/modes/interactive/components/settings-submenu.d.ts.map +1 -0
  844. package/dist/modes/interactive/components/settings-submenu.js +165 -0
  845. package/dist/modes/interactive/components/settings-submenu.js.map +1 -0
  846. package/dist/modes/interactive/components/show-images-selector.d.ts +10 -0
  847. package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -0
  848. package/dist/modes/interactive/components/show-images-selector.js +39 -0
  849. package/dist/modes/interactive/components/show-images-selector.js.map +1 -0
  850. package/dist/modes/interactive/components/skill-invocation-message.d.ts +17 -0
  851. package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -0
  852. package/dist/modes/interactive/components/skill-invocation-message.js +54 -0
  853. package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -0
  854. package/dist/modes/interactive/components/status-indicator.d.ts +30 -0
  855. package/dist/modes/interactive/components/status-indicator.d.ts.map +1 -0
  856. package/dist/modes/interactive/components/status-indicator.js +67 -0
  857. package/dist/modes/interactive/components/status-indicator.js.map +1 -0
  858. package/dist/modes/interactive/components/theme-selector.d.ts +11 -0
  859. package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -0
  860. package/dist/modes/interactive/components/theme-selector.js +50 -0
  861. package/dist/modes/interactive/components/theme-selector.js.map +1 -0
  862. package/dist/modes/interactive/components/themed-text.d.ts +17 -0
  863. package/dist/modes/interactive/components/themed-text.d.ts.map +1 -0
  864. package/dist/modes/interactive/components/themed-text.js +29 -0
  865. package/dist/modes/interactive/components/themed-text.js.map +1 -0
  866. package/dist/modes/interactive/components/thinking-selector.d.ts +23 -0
  867. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -0
  868. package/dist/modes/interactive/components/thinking-selector.js +109 -0
  869. package/dist/modes/interactive/components/thinking-selector.js.map +1 -0
  870. package/dist/modes/interactive/components/tool-execution.d.ts +68 -0
  871. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -0
  872. package/dist/modes/interactive/components/tool-execution.js +314 -0
  873. package/dist/modes/interactive/components/tool-execution.js.map +1 -0
  874. package/dist/modes/interactive/components/tree-selector.d.ts +94 -0
  875. package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -0
  876. package/dist/modes/interactive/components/tree-selector.js +1254 -0
  877. package/dist/modes/interactive/components/tree-selector.js.map +1 -0
  878. package/dist/modes/interactive/components/trust-selector.d.ts +23 -0
  879. package/dist/modes/interactive/components/trust-selector.d.ts.map +1 -0
  880. package/dist/modes/interactive/components/trust-selector.js +91 -0
  881. package/dist/modes/interactive/components/trust-selector.js.map +1 -0
  882. package/dist/modes/interactive/components/user-message-selector.d.ts +30 -0
  883. package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -0
  884. package/dist/modes/interactive/components/user-message-selector.js +114 -0
  885. package/dist/modes/interactive/components/user-message-selector.js.map +1 -0
  886. package/dist/modes/interactive/components/user-message.d.ts +16 -0
  887. package/dist/modes/interactive/components/user-message.d.ts.map +1 -0
  888. package/dist/modes/interactive/components/user-message.js +50 -0
  889. package/dist/modes/interactive/components/user-message.js.map +1 -0
  890. package/dist/modes/interactive/components/visual-truncate.d.ts +48 -0
  891. package/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -0
  892. package/dist/modes/interactive/components/visual-truncate.js +66 -0
  893. package/dist/modes/interactive/components/visual-truncate.js.map +1 -0
  894. package/dist/modes/interactive/external-editor.d.ts +12 -0
  895. package/dist/modes/interactive/external-editor.d.ts.map +1 -0
  896. package/dist/modes/interactive/external-editor.js +38 -0
  897. package/dist/modes/interactive/external-editor.js.map +1 -0
  898. package/dist/modes/interactive/interactive-mode.d.ts +482 -0
  899. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -0
  900. package/dist/modes/interactive/interactive-mode.js +5861 -0
  901. package/dist/modes/interactive/interactive-mode.js.map +1 -0
  902. package/dist/modes/interactive/model-catalog-refresh.d.ts +7 -0
  903. package/dist/modes/interactive/model-catalog-refresh.d.ts.map +1 -0
  904. package/dist/modes/interactive/model-catalog-refresh.js +34 -0
  905. package/dist/modes/interactive/model-catalog-refresh.js.map +1 -0
  906. package/dist/modes/interactive/model-search.d.ts +12 -0
  907. package/dist/modes/interactive/model-search.d.ts.map +1 -0
  908. package/dist/modes/interactive/model-search.js +15 -0
  909. package/dist/modes/interactive/model-search.js.map +1 -0
  910. package/dist/modes/interactive/session-share.d.ts +16 -0
  911. package/dist/modes/interactive/session-share.d.ts.map +1 -0
  912. package/dist/modes/interactive/session-share.js +119 -0
  913. package/dist/modes/interactive/session-share.js.map +1 -0
  914. package/dist/modes/interactive/theme/dark.json +78 -0
  915. package/dist/modes/interactive/theme/light.json +78 -0
  916. package/dist/modes/interactive/theme/system-theme.d.ts +55 -0
  917. package/dist/modes/interactive/theme/system-theme.d.ts.map +1 -0
  918. package/dist/modes/interactive/theme/system-theme.js +546 -0
  919. package/dist/modes/interactive/theme/system-theme.js.map +1 -0
  920. package/dist/modes/interactive/theme/theme-controller.d.ts +81 -0
  921. package/dist/modes/interactive/theme/theme-controller.d.ts.map +1 -0
  922. package/dist/modes/interactive/theme/theme-controller.js +210 -0
  923. package/dist/modes/interactive/theme/theme-controller.js.map +1 -0
  924. package/dist/modes/interactive/theme/theme-json.d.ts +85 -0
  925. package/dist/modes/interactive/theme/theme-json.d.ts.map +1 -0
  926. package/dist/modes/interactive/theme/theme-json.js +132 -0
  927. package/dist/modes/interactive/theme/theme-json.js.map +1 -0
  928. package/dist/modes/interactive/theme/theme-schema.json +361 -0
  929. package/dist/modes/interactive/theme/theme.d.ts +158 -0
  930. package/dist/modes/interactive/theme/theme.d.ts.map +1 -0
  931. package/dist/modes/interactive/theme/theme.js +912 -0
  932. package/dist/modes/interactive/theme/theme.js.map +1 -0
  933. package/dist/modes/interactive/tui-renderer.d.ts +22 -0
  934. package/dist/modes/interactive/tui-renderer.d.ts.map +1 -0
  935. package/dist/modes/interactive/tui-renderer.js +67 -0
  936. package/dist/modes/interactive/tui-renderer.js.map +1 -0
  937. package/dist/modes/json-event.d.ts +34 -0
  938. package/dist/modes/json-event.d.ts.map +1 -0
  939. package/dist/modes/json-event.js +29 -0
  940. package/dist/modes/json-event.js.map +1 -0
  941. package/dist/modes/print-mode.d.ts +28 -0
  942. package/dist/modes/print-mode.d.ts.map +1 -0
  943. package/dist/modes/print-mode.js +142 -0
  944. package/dist/modes/print-mode.js.map +1 -0
  945. package/dist/modes/rpc/jsonl.d.ts +17 -0
  946. package/dist/modes/rpc/jsonl.d.ts.map +1 -0
  947. package/dist/modes/rpc/jsonl.js +49 -0
  948. package/dist/modes/rpc/jsonl.js.map +1 -0
  949. package/dist/modes/rpc/rpc-client.d.ts +254 -0
  950. package/dist/modes/rpc/rpc-client.d.ts.map +1 -0
  951. package/dist/modes/rpc/rpc-client.js +499 -0
  952. package/dist/modes/rpc/rpc-client.js.map +1 -0
  953. package/dist/modes/rpc/rpc-mode.d.ts +20 -0
  954. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -0
  955. package/dist/modes/rpc/rpc-mode.js +655 -0
  956. package/dist/modes/rpc/rpc-mode.js.map +1 -0
  957. package/dist/modes/rpc/rpc-types.d.ts +478 -0
  958. package/dist/modes/rpc/rpc-types.d.ts.map +1 -0
  959. package/dist/modes/rpc/rpc-types.js +8 -0
  960. package/dist/modes/rpc/rpc-types.js.map +1 -0
  961. package/dist/package-manager-cli.d.ts +8 -0
  962. package/dist/package-manager-cli.d.ts.map +1 -0
  963. package/dist/package-manager-cli.js +524 -0
  964. package/dist/package-manager-cli.js.map +1 -0
  965. package/dist/rpc-entry.d.ts +3 -0
  966. package/dist/rpc-entry.d.ts.map +1 -0
  967. package/dist/rpc-entry.js +11 -0
  968. package/dist/rpc-entry.js.map +1 -0
  969. package/dist/utils/abort.d.ts +5 -0
  970. package/dist/utils/abort.d.ts.map +1 -0
  971. package/dist/utils/abort.js +48 -0
  972. package/dist/utils/abort.js.map +1 -0
  973. package/dist/utils/ansi.d.ts +2 -0
  974. package/dist/utils/ansi.d.ts.map +1 -0
  975. package/dist/utils/ansi.js +52 -0
  976. package/dist/utils/ansi.js.map +1 -0
  977. package/dist/utils/changelog.d.ts +22 -0
  978. package/dist/utils/changelog.d.ts.map +1 -0
  979. package/dist/utils/changelog.js +176 -0
  980. package/dist/utils/changelog.js.map +1 -0
  981. package/dist/utils/child-process.d.ts +18 -0
  982. package/dist/utils/child-process.d.ts.map +1 -0
  983. package/dist/utils/child-process.js +106 -0
  984. package/dist/utils/child-process.js.map +1 -0
  985. package/dist/utils/clipboard-command.d.ts +7 -0
  986. package/dist/utils/clipboard-command.d.ts.map +1 -0
  987. package/dist/utils/clipboard-command.js +45 -0
  988. package/dist/utils/clipboard-command.js.map +1 -0
  989. package/dist/utils/clipboard-image.d.ts +11 -0
  990. package/dist/utils/clipboard-image.d.ts.map +1 -0
  991. package/dist/utils/clipboard-image.js +214 -0
  992. package/dist/utils/clipboard-image.js.map +1 -0
  993. package/dist/utils/clipboard.d.ts +6 -0
  994. package/dist/utils/clipboard.d.ts.map +1 -0
  995. package/dist/utils/clipboard.js +156 -0
  996. package/dist/utils/clipboard.js.map +1 -0
  997. package/dist/utils/deprecation.d.ts +4 -0
  998. package/dist/utils/deprecation.d.ts.map +1 -0
  999. package/dist/utils/deprecation.js +13 -0
  1000. package/dist/utils/deprecation.js.map +1 -0
  1001. package/dist/utils/exif-orientation.d.ts +5 -0
  1002. package/dist/utils/exif-orientation.d.ts.map +1 -0
  1003. package/dist/utils/exif-orientation.js +157 -0
  1004. package/dist/utils/exif-orientation.js.map +1 -0
  1005. package/dist/utils/frontmatter.d.ts +8 -0
  1006. package/dist/utils/frontmatter.d.ts.map +1 -0
  1007. package/dist/utils/frontmatter.js +27 -0
  1008. package/dist/utils/frontmatter.js.map +1 -0
  1009. package/dist/utils/fs-watch.d.ts +5 -0
  1010. package/dist/utils/fs-watch.d.ts.map +1 -0
  1011. package/dist/utils/fs-watch.js +25 -0
  1012. package/dist/utils/fs-watch.js.map +1 -0
  1013. package/dist/utils/git.d.ts +26 -0
  1014. package/dist/utils/git.d.ts.map +1 -0
  1015. package/dist/utils/git.js +195 -0
  1016. package/dist/utils/git.js.map +1 -0
  1017. package/dist/utils/html.d.ts +7 -0
  1018. package/dist/utils/html.d.ts.map +1 -0
  1019. package/dist/utils/html.js +40 -0
  1020. package/dist/utils/html.js.map +1 -0
  1021. package/dist/utils/image-convert.d.ts +22 -0
  1022. package/dist/utils/image-convert.d.ts.map +1 -0
  1023. package/dist/utils/image-convert.js +84 -0
  1024. package/dist/utils/image-convert.js.map +1 -0
  1025. package/dist/utils/image-process.d.ts +18 -0
  1026. package/dist/utils/image-process.d.ts.map +1 -0
  1027. package/dist/utils/image-process.js +83 -0
  1028. package/dist/utils/image-process.js.map +1 -0
  1029. package/dist/utils/image-resize-core.d.ts +30 -0
  1030. package/dist/utils/image-resize-core.d.ts.map +1 -0
  1031. package/dist/utils/image-resize-core.js +124 -0
  1032. package/dist/utils/image-resize-core.js.map +1 -0
  1033. package/dist/utils/image-resize-worker.d.ts +2 -0
  1034. package/dist/utils/image-resize-worker.d.ts.map +1 -0
  1035. package/dist/utils/image-resize-worker.js +31 -0
  1036. package/dist/utils/image-resize-worker.js.map +1 -0
  1037. package/dist/utils/image-resize.d.ts +16 -0
  1038. package/dist/utils/image-resize.d.ts.map +1 -0
  1039. package/dist/utils/image-resize.js +97 -0
  1040. package/dist/utils/image-resize.js.map +1 -0
  1041. package/dist/utils/json.d.ts +3 -0
  1042. package/dist/utils/json.d.ts.map +1 -0
  1043. package/dist/utils/json.js +7 -0
  1044. package/dist/utils/json.js.map +1 -0
  1045. package/dist/utils/management-http.d.ts +25 -0
  1046. package/dist/utils/management-http.d.ts.map +1 -0
  1047. package/dist/utils/management-http.js +54 -0
  1048. package/dist/utils/management-http.js.map +1 -0
  1049. package/dist/utils/mime.d.ts +3 -0
  1050. package/dist/utils/mime.d.ts.map +1 -0
  1051. package/dist/utils/mime.js +110 -0
  1052. package/dist/utils/mime.js.map +1 -0
  1053. package/dist/utils/open-browser.d.ts +9 -0
  1054. package/dist/utils/open-browser.d.ts.map +1 -0
  1055. package/dist/utils/open-browser.js +22 -0
  1056. package/dist/utils/open-browser.js.map +1 -0
  1057. package/dist/utils/output-files.d.ts +15 -0
  1058. package/dist/utils/output-files.d.ts.map +1 -0
  1059. package/dist/utils/output-files.js +30 -0
  1060. package/dist/utils/output-files.js.map +1 -0
  1061. package/dist/utils/paths.d.ts +34 -0
  1062. package/dist/utils/paths.d.ts.map +1 -0
  1063. package/dist/utils/paths.js +115 -0
  1064. package/dist/utils/paths.js.map +1 -0
  1065. package/dist/utils/photon.d.ts +21 -0
  1066. package/dist/utils/photon.d.ts.map +1 -0
  1067. package/dist/utils/photon.js +121 -0
  1068. package/dist/utils/photon.js.map +1 -0
  1069. package/dist/utils/relay-user-agent.d.ts +2 -0
  1070. package/dist/utils/relay-user-agent.d.ts.map +1 -0
  1071. package/dist/utils/relay-user-agent.js +5 -0
  1072. package/dist/utils/relay-user-agent.js.map +1 -0
  1073. package/dist/utils/shell.d.ts +32 -0
  1074. package/dist/utils/shell.d.ts.map +1 -0
  1075. package/dist/utils/shell.js +189 -0
  1076. package/dist/utils/shell.js.map +1 -0
  1077. package/dist/utils/sleep.d.ts +5 -0
  1078. package/dist/utils/sleep.d.ts.map +1 -0
  1079. package/dist/utils/sleep.js +17 -0
  1080. package/dist/utils/sleep.js.map +1 -0
  1081. package/dist/utils/syntax-highlight.d.ts +13 -0
  1082. package/dist/utils/syntax-highlight.d.ts.map +1 -0
  1083. package/dist/utils/syntax-highlight.js +179 -0
  1084. package/dist/utils/syntax-highlight.js.map +1 -0
  1085. package/dist/utils/text.d.ts +8 -0
  1086. package/dist/utils/text.d.ts.map +1 -0
  1087. package/dist/utils/text.js +9 -0
  1088. package/dist/utils/text.js.map +1 -0
  1089. package/dist/utils/tool-result-images.d.ts +21 -0
  1090. package/dist/utils/tool-result-images.d.ts.map +1 -0
  1091. package/dist/utils/tool-result-images.js +48 -0
  1092. package/dist/utils/tool-result-images.js.map +1 -0
  1093. package/dist/utils/tools-manager.d.ts +13 -0
  1094. package/dist/utils/tools-manager.d.ts.map +1 -0
  1095. package/dist/utils/tools-manager.js +343 -0
  1096. package/dist/utils/tools-manager.js.map +1 -0
  1097. package/dist/utils/version-check.d.ts +17 -0
  1098. package/dist/utils/version-check.d.ts.map +1 -0
  1099. package/dist/utils/version-check.js +74 -0
  1100. package/dist/utils/version-check.js.map +1 -0
  1101. package/dist/utils/wsl.d.ts +3 -0
  1102. package/dist/utils/wsl.d.ts.map +1 -0
  1103. package/dist/utils/wsl.js +15 -0
  1104. package/dist/utils/wsl.js.map +1 -0
  1105. package/dist/utils/zip.d.ts +7 -0
  1106. package/dist/utils/zip.d.ts.map +1 -0
  1107. package/dist/utils/zip.js +60 -0
  1108. package/dist/utils/zip.js.map +1 -0
  1109. package/docs/cli-integration.md +106 -0
  1110. package/docs/cli.md +316 -0
  1111. package/docs/codemode.md +207 -0
  1112. package/docs/compaction.md +463 -0
  1113. package/docs/configuration.md +47 -0
  1114. package/docs/containerization.md +154 -0
  1115. package/docs/custom-provider.md +173 -0
  1116. package/docs/docs.json +224 -0
  1117. package/docs/environment-variables.md +97 -0
  1118. package/docs/extensions.md +274 -0
  1119. package/docs/harness-core.md +99 -0
  1120. package/docs/how-relay-works.md +49 -0
  1121. package/docs/images/doom-extension.png +0 -0
  1122. package/docs/images/exy.png +0 -0
  1123. package/docs/images/interactive-mode.png +0 -0
  1124. package/docs/images/tree-view.png +0 -0
  1125. package/docs/index.md +39 -0
  1126. package/docs/intake.md +40 -0
  1127. package/docs/json.md +226 -0
  1128. package/docs/keybindings.md +194 -0
  1129. package/docs/laya.md +112 -0
  1130. package/docs/llama-cpp.md +114 -0
  1131. package/docs/mcp.md +258 -0
  1132. package/docs/message-types.md +261 -0
  1133. package/docs/models.md +205 -0
  1134. package/docs/packages.md +129 -0
  1135. package/docs/prompt-templates.md +59 -0
  1136. package/docs/providers.md +187 -0
  1137. package/docs/quickstart.md +126 -0
  1138. package/docs/rpc-commands.md +860 -0
  1139. package/docs/rpc-extension-ui.md +200 -0
  1140. package/docs/rpc.md +193 -0
  1141. package/docs/sdk.md +147 -0
  1142. package/docs/security.md +99 -0
  1143. package/docs/session-format.md +293 -0
  1144. package/docs/sessions.md +66 -0
  1145. package/docs/settings.md +205 -0
  1146. package/docs/shell-aliases.md +93 -0
  1147. package/docs/skills.md +93 -0
  1148. package/docs/slash-commands.md +61 -0
  1149. package/docs/terminal-setup.md +219 -0
  1150. package/docs/termux.md +121 -0
  1151. package/docs/themes.md +136 -0
  1152. package/docs/tmux.md +55 -0
  1153. package/docs/tui.md +125 -0
  1154. package/docs/usage.md +94 -0
  1155. package/docs/virtual-models.md +114 -0
  1156. package/docs/windows.md +67 -0
  1157. package/examples/README.md +39 -0
  1158. package/examples/extensions/README.md +213 -0
  1159. package/examples/extensions/auto-commit-on-exit.ts +49 -0
  1160. package/examples/extensions/bash-spawn-hook.ts +30 -0
  1161. package/examples/extensions/bookmark.ts +50 -0
  1162. package/examples/extensions/border-status-editor.ts +150 -0
  1163. package/examples/extensions/built-in-tool-renderer.ts +225 -0
  1164. package/examples/extensions/claude-rules.ts +86 -0
  1165. package/examples/extensions/commands.ts +72 -0
  1166. package/examples/extensions/confirm-destructive.ts +59 -0
  1167. package/examples/extensions/custom-compaction.ts +117 -0
  1168. package/examples/extensions/custom-footer.ts +64 -0
  1169. package/examples/extensions/custom-header.ts +73 -0
  1170. package/examples/extensions/custom-provider-anthropic/index.ts +617 -0
  1171. package/examples/extensions/custom-provider-anthropic/package-lock.json +24 -0
  1172. package/examples/extensions/custom-provider-anthropic/package.json +19 -0
  1173. package/examples/extensions/custom-provider-gitlab-duo/index.ts +405 -0
  1174. package/examples/extensions/custom-provider-gitlab-duo/package.json +16 -0
  1175. package/examples/extensions/custom-provider-gitlab-duo/test.ts +82 -0
  1176. package/examples/extensions/debug-provider.ts +90 -0
  1177. package/examples/extensions/dirty-repo-guard.ts +56 -0
  1178. package/examples/extensions/doom-overlay/README.md +46 -0
  1179. package/examples/extensions/doom-overlay/doom/build/doom.js +21 -0
  1180. package/examples/extensions/doom-overlay/doom/build/doom.wasm +0 -0
  1181. package/examples/extensions/doom-overlay/doom/build.sh +152 -0
  1182. package/examples/extensions/doom-overlay/doom/doomgeneric_relay.c +72 -0
  1183. package/examples/extensions/doom-overlay/doom-component.ts +132 -0
  1184. package/examples/extensions/doom-overlay/doom-engine.ts +173 -0
  1185. package/examples/extensions/doom-overlay/doom-keys.ts +104 -0
  1186. package/examples/extensions/doom-overlay/index.ts +74 -0
  1187. package/examples/extensions/doom-overlay/wad-finder.ts +55 -0
  1188. package/examples/extensions/dynamic-resources/SKILL.md +8 -0
  1189. package/examples/extensions/dynamic-resources/dynamic.json +81 -0
  1190. package/examples/extensions/dynamic-resources/dynamic.md +5 -0
  1191. package/examples/extensions/dynamic-resources/index.ts +15 -0
  1192. package/examples/extensions/dynamic-tools.ts +74 -0
  1193. package/examples/extensions/entry-renderer.ts +41 -0
  1194. package/examples/extensions/event-bus.ts +43 -0
  1195. package/examples/extensions/file-trigger.ts +41 -0
  1196. package/examples/extensions/git-checkpoint.ts +53 -0
  1197. package/examples/extensions/git-merge-and-resolve.ts +115 -0
  1198. package/examples/extensions/github-issue-autocomplete.ts +185 -0
  1199. package/examples/extensions/handoff.ts +190 -0
  1200. package/examples/extensions/hello.ts +26 -0
  1201. package/examples/extensions/hidden-thinking-label.ts +53 -0
  1202. package/examples/extensions/inline-bash.ts +94 -0
  1203. package/examples/extensions/input-transform-streaming.ts +39 -0
  1204. package/examples/extensions/input-transform.ts +43 -0
  1205. package/examples/extensions/interactive-shell.ts +196 -0
  1206. package/examples/extensions/jev-router.ts +113 -0
  1207. package/examples/extensions/mac-system-theme.ts +47 -0
  1208. package/examples/extensions/message-renderer.ts +59 -0
  1209. package/examples/extensions/minimal-mode.ts +354 -0
  1210. package/examples/extensions/modal-editor.ts +85 -0
  1211. package/examples/extensions/model-status.ts +31 -0
  1212. package/examples/extensions/notify.ts +57 -0
  1213. package/examples/extensions/overlay-qa-tests.ts +1450 -0
  1214. package/examples/extensions/overlay-test.ts +153 -0
  1215. package/examples/extensions/permission-gate.ts +34 -0
  1216. package/examples/extensions/pirate.ts +47 -0
  1217. package/examples/extensions/plan-mode/README.md +66 -0
  1218. package/examples/extensions/plan-mode/index.ts +390 -0
  1219. package/examples/extensions/plan-mode/utils.ts +168 -0
  1220. package/examples/extensions/preset.ts +436 -0
  1221. package/examples/extensions/project-trust.ts +64 -0
  1222. package/examples/extensions/prompt-customizer.ts +49 -0
  1223. package/examples/extensions/protected-paths.ts +30 -0
  1224. package/examples/extensions/provider-payload.ts +18 -0
  1225. package/examples/extensions/qna.ts +118 -0
  1226. package/examples/extensions/question.ts +278 -0
  1227. package/examples/extensions/questionnaire.ts +440 -0
  1228. package/examples/extensions/rainbow-editor.ts +88 -0
  1229. package/examples/extensions/reload-runtime.ts +37 -0
  1230. package/examples/extensions/rpc-demo.ts +118 -0
  1231. package/examples/extensions/sandbox/index.ts +321 -0
  1232. package/examples/extensions/sandbox/package-lock.json +92 -0
  1233. package/examples/extensions/sandbox/package.json +19 -0
  1234. package/examples/extensions/send-user-message.ts +97 -0
  1235. package/examples/extensions/session-name.ts +27 -0
  1236. package/examples/extensions/shutdown-command.ts +63 -0
  1237. package/examples/extensions/snake.ts +343 -0
  1238. package/examples/extensions/space-invaders.ts +560 -0
  1239. package/examples/extensions/ssh.ts +220 -0
  1240. package/examples/extensions/status-line.ts +32 -0
  1241. package/examples/extensions/structured-output.ts +65 -0
  1242. package/examples/extensions/subagent/README.md +196 -0
  1243. package/examples/extensions/subagent/agents/planner.md +37 -0
  1244. package/examples/extensions/subagent/agents/reviewer.md +35 -0
  1245. package/examples/extensions/subagent/agents/scout.md +50 -0
  1246. package/examples/extensions/subagent/agents/security-auditor.md +20 -0
  1247. package/examples/extensions/subagent/agents/verifier.md +31 -0
  1248. package/examples/extensions/subagent/agents/worker.md +24 -0
  1249. package/examples/extensions/subagent/agents.ts +157 -0
  1250. package/examples/extensions/subagent/index.ts +1038 -0
  1251. package/examples/extensions/subagent/prompts/implement-and-review.md +10 -0
  1252. package/examples/extensions/subagent/prompts/implement-and-verify.md +10 -0
  1253. package/examples/extensions/subagent/prompts/implement.md +10 -0
  1254. package/examples/extensions/subagent/prompts/scout-and-plan.md +9 -0
  1255. package/examples/extensions/subagent/skills/delegate/SKILL.md +48 -0
  1256. package/examples/extensions/subagent/skills/security-audit/SKILL.md +108 -0
  1257. package/examples/extensions/subagent/skills/security-audit/references/categories.md +130 -0
  1258. package/examples/extensions/subagent/skills/security-audit/references/report.md +38 -0
  1259. package/examples/extensions/summarize.ts +199 -0
  1260. package/examples/extensions/system-prompt-header.ts +17 -0
  1261. package/examples/extensions/tic-tac-toe.ts +1008 -0
  1262. package/examples/extensions/timed-confirm.ts +70 -0
  1263. package/examples/extensions/titlebar-spinner.ts +58 -0
  1264. package/examples/extensions/todo.ts +297 -0
  1265. package/examples/extensions/tool-override.ts +144 -0
  1266. package/examples/extensions/tools.ts +146 -0
  1267. package/examples/extensions/trigger-compact.ts +50 -0
  1268. package/examples/extensions/truncated-tool.ts +195 -0
  1269. package/examples/extensions/widget-placement.ts +9 -0
  1270. package/examples/extensions/with-deps/index.ts +32 -0
  1271. package/examples/extensions/with-deps/package-lock.json +31 -0
  1272. package/examples/extensions/with-deps/package.json +22 -0
  1273. package/examples/extensions/working-indicator.ts +123 -0
  1274. package/examples/extensions/working-message-test.ts +25 -0
  1275. package/examples/plugins/relay-example-plugin/README.md +38 -0
  1276. package/examples/plugins/relay-example-plugin/package.json +10 -0
  1277. package/examples/plugins/relay-example-plugin/src/contract.ts +13 -0
  1278. package/examples/plugins/relay-example-plugin/src/session.ts +24 -0
  1279. package/examples/plugins/relay-example-plugin/src/tui.ts +31 -0
  1280. package/examples/rpc-client.ts +35 -0
  1281. package/examples/rpc-extension-ui.ts +661 -0
  1282. package/examples/sdk/01-minimal.ts +26 -0
  1283. package/examples/sdk/02-custom-model.ts +49 -0
  1284. package/examples/sdk/03-custom-prompt.ts +70 -0
  1285. package/examples/sdk/04-skills.ts +55 -0
  1286. package/examples/sdk/05-tools.ts +48 -0
  1287. package/examples/sdk/06-extensions.ts +94 -0
  1288. package/examples/sdk/07-context-files.ts +42 -0
  1289. package/examples/sdk/08-prompt-templates.ts +51 -0
  1290. package/examples/sdk/09-api-keys-and-oauth.ts +34 -0
  1291. package/examples/sdk/10-settings.ts +53 -0
  1292. package/examples/sdk/11-sessions.ts +52 -0
  1293. package/examples/sdk/12-full-control.ts +74 -0
  1294. package/examples/sdk/13-session-runtime.ts +67 -0
  1295. package/examples/sdk/14-codemode-mcp.ts +61 -0
  1296. package/examples/sdk/README.md +141 -0
  1297. package/package.json +107 -5
@@ -0,0 +1,75 @@
1
+ import { createRequire as __piCreateRequire } from "node:module"; const require = __piCreateRequire(import.meta.url);
2
+ var __require=(x=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(x,{get:(a,b)=>(typeof require<"u"?require:a)[b]}):x)(function(x){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+x+'" is not supported')});var procEnvCache=null;function getBunSandboxEnvValue(name){if(!(typeof process>"u"||!process.versions?.bun||Object.keys(process.env).length>0)){if(procEnvCache===null){procEnvCache=new Map;try{let{readFileSync}=__require("node:fs"),data=readFileSync("/proc/self/environ","utf-8");for(let entry of data.split("\0")){let idx=entry.indexOf("=");idx>0&&procEnvCache.set(entry.slice(0,idx),entry.slice(idx+1))}}catch{}}return procEnvCache.get(name)}}function getProviderEnvValue(name,env){return env?.[name]||(typeof process<"u"?process.env[name]:void 0)||getBunSandboxEnvValue(name)||void 0}import{createServer}from"node:http";var LOGO_SVG='<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 800 800" aria-hidden="true"><path fill="#F09082" d="M165.29 165.29H517.36V400H400V282.65H165.29Z"/><path fill="#4D9ABF" d="M165.29 282.65H282.65V400H400V517.36H282.65V634.72H165.29Z"/><path fill="#F1BE58" d="M517.36 400H634.72V634.72H517.36Z"/></svg>';function escapeHtml(value){return value.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;").replaceAll("'","&#39;")}function renderPage(options){let title=escapeHtml(options.title),heading=escapeHtml(options.heading),message=escapeHtml(options.message),details=options.details?escapeHtml(options.details):void 0;return`<!doctype html>
3
+ <html lang="en">
4
+ <head>
5
+ <meta charset="utf-8" />
6
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
7
+ <title>${title}</title>
8
+ <style>
9
+ :root {
10
+ --text: #fafafa;
11
+ --text-dim: #a1a1aa;
12
+ --page-bg: #09090b;
13
+ --font-sans: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
14
+ --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
15
+ }
16
+ * { box-sizing: border-box; }
17
+ html { color-scheme: dark; }
18
+ body {
19
+ margin: 0;
20
+ min-height: 100vh;
21
+ display: flex;
22
+ align-items: center;
23
+ justify-content: center;
24
+ padding: 24px;
25
+ background: var(--page-bg);
26
+ color: var(--text);
27
+ font-family: var(--font-sans);
28
+ text-align: center;
29
+ }
30
+ main {
31
+ width: 100%;
32
+ max-width: 560px;
33
+ display: flex;
34
+ flex-direction: column;
35
+ align-items: center;
36
+ justify-content: center;
37
+ }
38
+ .logo {
39
+ width: 72px;
40
+ height: 72px;
41
+ display: block;
42
+ margin-bottom: 24px;
43
+ }
44
+ h1 {
45
+ margin: 0 0 10px;
46
+ font-size: 28px;
47
+ line-height: 1.15;
48
+ font-weight: 650;
49
+ color: var(--text);
50
+ }
51
+ p {
52
+ margin: 0;
53
+ line-height: 1.7;
54
+ color: var(--text-dim);
55
+ font-size: 15px;
56
+ }
57
+ .details {
58
+ margin-top: 16px;
59
+ font-family: var(--font-mono);
60
+ font-size: 13px;
61
+ color: var(--text-dim);
62
+ white-space: pre-wrap;
63
+ word-break: break-word;
64
+ }
65
+ </style>
66
+ </head>
67
+ <body>
68
+ <main>
69
+ <div class="logo">${LOGO_SVG}</div>
70
+ <h1>${heading}</h1>
71
+ <p>${message}</p>
72
+ ${details?`<div class="details">${details}</div>`:""}
73
+ </main>
74
+ </body>
75
+ </html>`}function oauthSuccessHtml(message){return renderPage({title:"Authentication successful",heading:"Authentication successful",message})}function oauthErrorHtml(message,details){return renderPage({title:"Authentication failed",heading:"Authentication failed",message,details})}function sendPage(response,status,html){response.writeHead(status,{"content-type":"text/html; charset=utf-8","cache-control":"no-store"}),response.end(html)}async function startOAuthCallbackServer(options){let{providerName,signal}=options;if(signal?.aborted)throw new Error("Login cancelled");let resolveWait=()=>{},rejectWait=()=>{},waitPromise=new Promise((resolve,reject)=>{resolveWait=resolve,rejectWait=reject});waitPromise.catch(()=>{});let claimed=!1,settled=!1,timer,onAbort=()=>finish({error:new Error("Login cancelled")}),finish=result=>{settled||(settled=!0,timer&&clearTimeout(timer),signal?.removeEventListener("abort",onAbort),"error"in result?rejectWait(result.error):resolveWait(result.value))},server=createServer((request,response)=>{(async()=>{let url=new URL(request.url??"/","http://localhost");if(request.method!=="GET"||url.pathname!==options.path){sendPage(response,404,oauthErrorHtml("Callback route not found."));return}if(options.state!==void 0&&url.searchParams.get("state")!==options.state){sendPage(response,400,oauthErrorHtml("State mismatch."));return}if(claimed||settled){sendPage(response,409,oauthErrorHtml("This sign-in has already been handled."));return}let error=url.searchParams.get("error");if(error){let description=url.searchParams.get("error_description")??error;sendPage(response,400,oauthErrorHtml(`${providerName} authorization failed.`,description)),finish({error:new Error(`${providerName} authorization failed: ${description}`)});return}let code=url.searchParams.get("code");if(!code){sendPage(response,400,oauthErrorHtml("Missing authorization code."));return}claimed=!0;try{let value=await options.complete(code);sendPage(response,200,oauthSuccessHtml(`Signed in to ${providerName}. You may now close this page.`)),finish({value})}catch(error2){let failure=error2 instanceof Error?error2:new Error(String(error2));sendPage(response,502,oauthErrorHtml(`${providerName} sign-in failed.`,failure.message)),finish({error:failure})}})()});await new Promise((resolve,reject)=>{server.once("error",reject),server.listen(options.port,options.host,()=>{server.off("error",reject),resolve()})});let address=server.address();if(!address||typeof address=="string")throw server.close(),new Error("OAuth callback server did not bind to TCP");server.on("error",error=>finish({error})),signal?.addEventListener("abort",onAbort,{once:!0}),options.timeoutMs!==void 0&&(timer=setTimeout(()=>finish({error:new Error(`${providerName} sign-in timed out`)}),options.timeoutMs));let redirectHost=options.redirectHost??options.host;return{redirectUri:`http://${redirectHost.includes(":")?`[${redirectHost}]`:redirectHost}:${address.port}${options.path}`,wait:()=>waitPromise,cancel:()=>{claimed||finish({value:void 0})},close:()=>{finish({error:new Error("OAuth callback server closed")}),server.close()}}}async function waitForCallbackOrManualInput(interaction,callback,prompt){let manualAbort=new AbortController,manualError,manual=interaction.prompt({type:"manual_code",...prompt,signal:manualAbort.signal}).then(input=>(callback?.cancel(),input)).catch(error=>{manualError=error instanceof Error?error:new Error(String(error)),callback?.cancel()});try{let value=await callback?.wait();if(manualError)throw manualError;if(value!==void 0)return{type:"callback",value};let input=await manual;if(manualError)throw manualError;return{type:"manual",input:input??""}}finally{manualAbort.abort()}}var CANCEL_MESSAGE="Login cancelled",TIMEOUT_MESSAGE="Device flow timed out",SLOW_DOWN_TIMEOUT_MESSAGE="Device flow timed out after one or more slow_down responses. This is often caused by clock drift in WSL or VM environments. Please sync or restart the VM clock and try again.";function abortableSleep(ms,signal,cancelMessage){return new Promise((resolve,reject)=>{if(signal.aborted){reject(new Error(cancelMessage));return}let onAbort=()=>{clearTimeout(timeout),reject(new Error(cancelMessage))},timeout=setTimeout(()=>{signal.removeEventListener("abort",onAbort),resolve()},ms);signal.addEventListener("abort",onAbort,{once:!0})})}async function pollOAuthDeviceCodeFlow(options){let deadline=typeof options.expiresInSeconds=="number"?Date.now()+options.expiresInSeconds*1e3:Number.POSITIVE_INFINITY,intervalMs=Math.max(1e3,Math.floor((options.intervalSeconds??5)*1e3)),slowDownResponses=0;if(options.waitBeforeFirstPoll){let remainingMs=deadline-Date.now();remainingMs>0&&await abortableSleep(Math.min(intervalMs,remainingMs),options.signal,CANCEL_MESSAGE)}for(;Date.now()<deadline;){if(options.signal.aborted)throw new Error(CANCEL_MESSAGE);let result=await options.poll();if(result.status==="complete")return result.value;if(result.status==="failed")throw new Error(result.message);result.status==="slow_down"&&(slowDownResponses+=1,intervalMs=typeof result.intervalSeconds=="number"&&Number.isFinite(result.intervalSeconds)&&result.intervalSeconds>0?Math.max(1e3,Math.floor(result.intervalSeconds*1e3)):Math.max(1e3,intervalMs+5e3));let remainingMs=deadline-Date.now();if(remainingMs<=0)break;await abortableSleep(Math.min(intervalMs,remainingMs),options.signal,CANCEL_MESSAGE)}throw new Error(slowDownResponses>0?SLOW_DOWN_TIMEOUT_MESSAGE:TIMEOUT_MESSAGE)}function base64urlEncode(bytes){let binary="";for(let byte of bytes)binary+=String.fromCharCode(byte);return btoa(binary).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}async function generatePKCE(){let verifierBytes=new Uint8Array(32);crypto.getRandomValues(verifierBytes);let verifier=base64urlEncode(verifierBytes),data=new TextEncoder().encode(verifier),hashBuffer=await crypto.subtle.digest("SHA-256",data),challenge=base64urlEncode(new Uint8Array(hashBuffer));return{verifier,challenge}}var _randomBytes=null;typeof process<"u"&&(process.versions?.node||process.versions?.bun)&&import("node:crypto").then(m=>{_randomBytes=m.randomBytes});var CLIENT_ID="app_EMoamEEZ73f0CkXaXp7hrann",AUTH_BASE_URL="https://auth.openai.com",AUTHORIZE_URL=`${AUTH_BASE_URL}/oauth/authorize`,TOKEN_URL=`${AUTH_BASE_URL}/oauth/token`,REDIRECT_URI="http://localhost:1455/auth/callback",DEVICE_USER_CODE_URL=`${AUTH_BASE_URL}/api/accounts/deviceauth/usercode`,DEVICE_TOKEN_URL=`${AUTH_BASE_URL}/api/accounts/deviceauth/token`,DEVICE_VERIFICATION_URI=`${AUTH_BASE_URL}/codex/device`,DEVICE_REDIRECT_URI=`${AUTH_BASE_URL}/deviceauth/callback`,DEVICE_CODE_TIMEOUT_SECONDS=900,OPENAI_CODEX_BROWSER_LOGIN_METHOD="browser",OPENAI_CODEX_DEVICE_CODE_LOGIN_METHOD="device_code",SCOPE="openid profile email offline_access",JWT_CLAIM_PATH="https://api.openai.com/auth";function getCallbackHost(){return getProviderEnvValue("RELAY_OAUTH_CALLBACK_HOST")||"127.0.0.1"}function createState(){if(!_randomBytes)throw new Error("OpenAI Codex OAuth is only available in Node.js environments");return _randomBytes(16).toString("hex")}function parseAuthorizationInput(input){let value=input.trim();if(!value)return{};try{let url=new URL(value);return{code:url.searchParams.get("code")??void 0,state:url.searchParams.get("state")??void 0}}catch{}if(value.includes("#")){let[code,state]=value.split("#",2);return{code,state}}if(value.includes("code=")){let params=new URLSearchParams(value);return{code:params.get("code")??void 0,state:params.get("state")??void 0}}return{code:value}}function decodeJwt(token){try{let parts=token.split(".");if(parts.length!==3)return null;let payload=parts[1]??"",decoded=atob(payload);return JSON.parse(decoded)}catch{return null}}async function fetchWithLoginCancellation(input,init){try{return await fetch(input,init)}catch(error){throw init.signal?.aborted?new Error("Login cancelled"):error}}async function readTokenResponse(response,operation){if(!response.ok){let text=await response.text().catch(()=>"");throw new Error(`OpenAI Codex token ${operation} failed (${response.status}): ${text||response.statusText}`)}let json=await response.json();if(!json?.access_token||!json.refresh_token||typeof json.expires_in!="number")throw new Error(`OpenAI Codex token ${operation} response missing fields: ${JSON.stringify(json)}`);return{access:json.access_token,refresh:json.refresh_token,expires:Date.now()+json.expires_in*1e3}}async function exchangeAuthorizationCode(code,verifier,redirectUri,signal){let response=await fetchWithLoginCancellation(TOKEN_URL,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"authorization_code",client_id:CLIENT_ID,code,code_verifier:verifier,redirect_uri:redirectUri}),signal});return readTokenResponse(response,"exchange")}async function refreshAccessToken(refreshToken,signal){let response;try{response=await fetch(TOKEN_URL,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:refreshToken,client_id:CLIENT_ID}),signal})}catch(error){throw new Error(`OpenAI Codex token refresh error: ${error instanceof Error?error.message:String(error)}`)}return readTokenResponse(response,"refresh")}async function startOpenAICodexDeviceAuth(signal){let response=await fetchWithLoginCancellation(DEVICE_USER_CODE_URL,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({client_id:CLIENT_ID}),signal});if(!response.ok){if(response.status===404)throw new Error("OpenAI Codex device code login is not enabled for this server. Use browser login or verify the server URL.");let responseBody=await response.text().catch(()=>"");throw new Error(`OpenAI Codex device code request failed with status ${response.status}${responseBody?`: ${responseBody}`:""}`)}let json=await response.json(),intervalSeconds=typeof json?.interval=="string"?Number(json.interval.trim()):json?.interval;if(!json?.device_auth_id||!json.user_code||typeof intervalSeconds!="number"||!Number.isFinite(intervalSeconds)||intervalSeconds<0)throw new Error(`Invalid OpenAI Codex device code response: ${JSON.stringify(json)}`);return{deviceAuthId:json.device_auth_id,userCode:json.user_code,intervalSeconds}}async function pollOpenAICodexDeviceAuth(device,signal){return pollOAuthDeviceCodeFlow({intervalSeconds:device.intervalSeconds,expiresInSeconds:DEVICE_CODE_TIMEOUT_SECONDS,signal,poll:async()=>{let response=await fetchWithLoginCancellation(DEVICE_TOKEN_URL,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({device_auth_id:device.deviceAuthId,user_code:device.userCode}),signal});if(response.ok){let json=await response.json();return!json?.authorization_code||!json.code_verifier?{status:"failed",message:`Invalid OpenAI Codex device auth token response: ${JSON.stringify(json)}`}:{status:"complete",value:{authorizationCode:json.authorization_code,codeVerifier:json.code_verifier}}}if(response.status===403||response.status===404)return{status:"pending"};let responseBody=await response.text().catch(()=>""),errorCode;try{let error=JSON.parse(responseBody)?.error;errorCode=typeof error=="object"?error?.code:error}catch{}return errorCode==="deviceauth_authorization_pending"?{status:"pending"}:errorCode==="slow_down"?{status:"slow_down"}:{status:"failed",message:`OpenAI Codex device auth failed with status ${response.status}${responseBody?`: ${responseBody}`:""}`}}})}async function createAuthorizationFlow(originator="pi"){let{verifier,challenge}=await generatePKCE(),state=createState(),url=new URL(AUTHORIZE_URL);return url.searchParams.set("response_type","code"),url.searchParams.set("client_id",CLIENT_ID),url.searchParams.set("redirect_uri",REDIRECT_URI),url.searchParams.set("scope",SCOPE),url.searchParams.set("code_challenge",challenge),url.searchParams.set("code_challenge_method","S256"),url.searchParams.set("state",state),url.searchParams.set("id_token_add_organizations","true"),url.searchParams.set("codex_cli_simplified_flow","true"),url.searchParams.set("originator",originator),{verifier,state,url:url.toString()}}function getAccountId(accessToken){let accountId=decodeJwt(accessToken)?.[JWT_CLAIM_PATH]?.chatgpt_account_id;return typeof accountId=="string"&&accountId.length>0?accountId:null}function credentialsFromToken(token){let accountId=getAccountId(token.access);if(!accountId)throw new Error("Failed to extract accountId from token");return{type:"oauth",access:token.access,refresh:token.refresh,expires:token.expires,accountId}}async function exchangeAuthorizationCodeForCredentials(code,verifier,redirectUri,signal){return credentialsFromToken(await exchangeAuthorizationCode(code,verifier,redirectUri,signal))}async function loginOpenAICodexDeviceCode(interaction){let device=await startOpenAICodexDeviceAuth(interaction.signal);interaction.notify({type:"device_code",userCode:device.userCode,verificationUri:DEVICE_VERIFICATION_URI,intervalSeconds:device.intervalSeconds,expiresInSeconds:DEVICE_CODE_TIMEOUT_SECONDS});let code=await pollOpenAICodexDeviceAuth(device,interaction.signal);return exchangeAuthorizationCodeForCredentials(code.authorizationCode,code.codeVerifier,DEVICE_REDIRECT_URI,interaction.signal)}async function loginOpenAICodex(interaction){let{verifier,state,url}=await createAuthorizationFlow(),callback=await startOAuthCallbackServer({providerName:"OpenAI",host:getCallbackHost(),port:1455,path:"/auth/callback",state,complete:async code=>code,signal:interaction.signal}).catch(()=>{});interaction.notify({type:"auth_url",url,instructions:"A browser window should open. Complete login to finish."});try{let result=await waitForCallbackOrManualInput(interaction,callback,{message:"Complete login in your browser, or paste the authorization code / redirect URL here:",placeholder:REDIRECT_URI}),code;if(result.type==="callback")code=result.value;else{let parsed=parseAuthorizationInput(result.input);if(parsed.state&&parsed.state!==state)throw new Error("State mismatch");code=parsed.code}if(!code)throw new Error("Missing authorization code");return await exchangeAuthorizationCodeForCredentials(code,verifier,REDIRECT_URI,interaction.signal)}finally{callback?.close()}}async function refreshOpenAICodexToken(refreshToken,signal){return credentialsFromToken(await refreshAccessToken(refreshToken,signal))}var openaiCodexOAuth={name:"OpenAI (ChatGPT Plus/Pro)",isSubscription:!0,async login(interaction){let method=await interaction.prompt({type:"select",message:"Select OpenAI Codex login method:",options:[{id:OPENAI_CODEX_BROWSER_LOGIN_METHOD,label:"Browser login (default)"},{id:OPENAI_CODEX_DEVICE_CODE_LOGIN_METHOD,label:"Device code login (headless)"}]});if(method===OPENAI_CODEX_DEVICE_CODE_LOGIN_METHOD)return loginOpenAICodexDeviceCode(interaction);if(method!==OPENAI_CODEX_BROWSER_LOGIN_METHOD)throw new Error(`Unknown OpenAI Codex login method: ${method}`);return loginOpenAICodex(interaction)},refresh:(credential,signal)=>refreshOpenAICodexToken(credential.refresh,signal),async toAuth(credential){return{apiKey:credential.access}}};export{openaiCodexOAuth};
@@ -0,0 +1,7 @@
1
+ import { createRequire as __piCreateRequire } from "node:module"; const require = __piCreateRequire(import.meta.url);
2
+ import{buildCopilotDynamicHeaders,hasCopilotVisionInput}from"./chunk-PGXDEOVV.js";import{clampOpenAIPromptCacheKey}from"./chunk-PRRNXB7S.js";import{OpenAI}from"./chunk-H3QXYIF7.js";import{formatProviderError,normalizeProviderError}from"./chunk-TEPMHNKQ.js";import{shortHash}from"./chunk-PJACZCIR.js";import{retryProviderRequest}from"./chunk-LD2P6SFZ.js";import{appendGrammarToolInputJsonDelta,buildBaseOptions,clampThinkingBudgetToAnswerRoom,createGrammarToolInputProperties,getGrammarToolInput,getJsonSchemaToolParameters,getRelayUserAgent,resolveGrammarConstrainedSampling,resolveJsonSchemaStrictSampling,resolveSamplingParams,thinkingBudgetForLevel,transformMessages}from"./chunk-O7R77OAK.js";import{sanitizeSurrogates}from"./chunk-L2ZPNLYD.js";import{headersToRecord}from"./chunk-UTB4DTYQ.js";import{getProviderEnvValue}from"./chunk-DRQDKNXA.js";import{parseStreamingJson}from"./chunk-TRDNDS6A.js";import{calculateCost,clampThinkingLevel,getDeclaredTools,getSystemMessageText,renderSystemMessageUpdate,resolveTranscript,resolveTranscriptTools}from"./chunk-KJUDFE6Y.js";import{AssistantMessageEventStream}from"./chunk-A3JYRWB6.js";import"./chunk-4L3WN2XY.js";function hasHeader(headers,name){if(!headers)return!1;let expected=name.toLowerCase();for(let[key,value]of Object.entries(headers))if(key.toLowerCase()===expected&&value!==null&&value.trim().length>0)return!0;return!1}function getClientApiKey(provider,apiKey,headers){if(apiKey)return apiKey;if(hasHeader(headers,"authorization")||hasHeader(headers,"cf-aig-authorization"))return"unused";throw new Error(`No API key for provider: ${provider}`)}function hasToolHistory(messages){for(let msg of messages)if(msg.role==="toolResult"||msg.role==="assistant"&&msg.content.some(block=>block.type==="toolCall"))return!0;return!1}function isTextContentBlock(block){return block.type==="text"}function isThinkingContentBlock(block){return block.type==="thinking"}function isToolCallBlock(block){return block.type==="toolCall"}function isImageContentBlock(block){return block.type==="image"}function isReasoningDetailObject(detail){return typeof detail=="object"&&detail!==null&&!Array.isArray(detail)}function hasValidCommonReasoningDetailFields(candidate){return(candidate.id===void 0||candidate.id===null||typeof candidate.id=="string")&&(candidate.format===void 0||typeof candidate.format=="string")&&(candidate.index===void 0||typeof candidate.index=="number")}function isOpenAIReasoningDetail(detail){if(!isReasoningDetailObject(detail)||!hasValidCommonReasoningDetailFields(detail))return!1;switch(detail.type){case"reasoning.summary":return typeof detail.summary=="string";case"reasoning.encrypted":return typeof detail.data=="string";case"reasoning.text":return typeof detail.text=="string"&&(detail.signature===void 0||detail.signature===null||typeof detail.signature=="string");default:return!1}}function parseOpenAIReasoningDetails(signature){if(signature)try{let parsed=JSON.parse(signature);return Array.isArray(parsed)&&parsed.length>0&&parsed.every(isOpenAIReasoningDetail)?parsed:void 0}catch{return}}function parseLegacyEncryptedReasoningDetail(signature){if(signature)try{let parsed=JSON.parse(signature);return isOpenAIReasoningDetail(parsed)&&parsed.type==="reasoning.encrypted"&&typeof parsed.id=="string"&&parsed.id.length>0&&parsed.data.length>0?parsed:void 0}catch{return}}function fillMissingCommonReasoningDetailFields(target,source){target.id??=source.id,target.format||=source.format,target.index??=source.index}function appendOpenAIReasoningDetail(details,detail){let lastDetail=details[details.length-1];if(detail.type==="reasoning.text"&&lastDetail?.type==="reasoning.text"){lastDetail.text+=detail.text,lastDetail.signature||=detail.signature,fillMissingCommonReasoningDetailFields(lastDetail,detail);return}if(detail.type==="reasoning.summary"&&lastDetail?.type==="reasoning.summary"){lastDetail.summary+=detail.summary,fillMissingCommonReasoningDetailFields(lastDetail,detail);return}details.push({...detail})}var OPENAI_COMPLETIONS_REASONING_FIELDS=["reasoning","reasoning_content","reasoning_text"];function isOpenAICompletionsReasoningField(field){return OPENAI_COMPLETIONS_REASONING_FIELDS.includes(field)}function resolveCacheRetention(cacheRetention,env){return cacheRetention||(getProviderEnvValue("RELAY_CACHE_RETENTION",env)==="long"?"long":"short")}var stream=(model,context,options)=>{let stream2=new AssistantMessageEventStream,normalizedContext=resolveTranscript(context,getCompat(model).supportsMidConvoSystemMessages);return(async()=>{let output={role:"assistant",content:[],api:model.api,provider:model.provider,model:model.id,usage:{input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},stopReason:"pending",timestamp:Date.now()},streamedReasoningDetails,applyStreamedReasoningDetails=block=>{streamedReasoningDetails!==void 0&&(block.thinkingSignature=JSON.stringify(streamedReasoningDetails))};try{let apiKey=getClientApiKey(model.provider,options?.apiKey,options?.headers),compat=getCompat(model),grammarToolInputProperties=createGrammarToolInputProperties(getDeclaredTools(normalizedContext.messages),compat.supportsOpenAIGrammarTools),cacheRetention=resolveCacheRetention(options?.cacheRetention,options?.env),cacheSessionId=cacheRetention==="none"?void 0:options?.sessionId,client=createClient(model,normalizedContext,apiKey,options?.headers,options?.fetch,cacheSessionId,compat),params=buildParams(model,normalizedContext,options,compat,cacheRetention,grammarToolInputProperties),nextParams=await options?.onPayload?.(params,model);nextParams!==void 0&&(params=nextParams);let requestOptions={...options?.signal?{signal:options.signal}:{},...options?.timeoutMs!==void 0?{timeout:options.timeoutMs}:{},maxRetries:0},{data:openaiStream,response}=await retryProviderRequest(()=>client.chat.completions.create(params,requestOptions).withResponse(),{maxRetries:options?.maxRetries,maxRetryDelayMs:options?.maxRetryDelayMs,signal:options?.signal});await options?.onResponse?.({status:response.status,headers:headersToRecord(response.headers)},model),stream2.push({type:"start",partial:output});let textBlock=null,thinkingBlock=null,hasFinishReason=!1,toolCallBlocksByIndex=new Map,toolCallBlocksById=new Map,blocks=output.content,getContentIndex=block=>blocks.indexOf(block),getCustomToolCallInput=block=>{let property=block.customInput?.property;if(property===void 0)return"";let value=block.arguments[property];return typeof value=="string"?value:""},appendCustomToolCallInput=(block,nextInput,close)=>{let customInput=block.customInput;if(!customInput)return;let delta=appendGrammarToolInputJsonDelta(customInput.jsonBuffer,customInput.property,nextInput,close);return block.arguments={[customInput.property]:nextInput},delta},finishBlock=block=>{let contentIndex=getContentIndex(block);if(contentIndex!==-1){if(block.type==="text")stream2.push({type:"text_end",contentIndex,content:block.text,partial:output});else if(block.type==="thinking")applyStreamedReasoningDetails(block),stream2.push({type:"thinking_end",contentIndex,content:block.thinking,partial:output});else if(block.type==="toolCall"){if(block.customInput){let delta=appendCustomToolCallInput(block,getCustomToolCallInput(block),!0);delta!==void 0&&stream2.push({type:"toolcall_delta",contentIndex,delta,partial:output})}else block.arguments=parseStreamingJson(block.partialArgs);delete block.partialArgs,delete block.customInput,delete block.streamIndex,stream2.push({type:"toolcall_end",contentIndex,toolCall:block,partial:output})}}},ensureTextBlock=()=>(textBlock||(textBlock={type:"text",text:""},blocks.push(textBlock),stream2.push({type:"text_start",contentIndex:getContentIndex(textBlock),partial:output})),textBlock),ensureThinkingBlock=thinkingSignature=>(thinkingBlock||(thinkingBlock={type:"thinking",thinking:"",thinkingSignature},blocks.push(thinkingBlock),stream2.push({type:"thinking_start",contentIndex:getContentIndex(thinkingBlock),partial:output})),thinkingBlock),ensureToolCallBlock=toolCall=>{let streamIndex=typeof toolCall.index=="number"?toolCall.index:void 0,name=toolCall.function?.name??toolCall.custom?.name??"",block=streamIndex!==void 0?toolCallBlocksByIndex.get(streamIndex):void 0;if(!block&&toolCall.id&&(block=toolCallBlocksById.get(toolCall.id)),!block){let customInputProperty=toolCall.custom&&!toolCall.function?grammarToolInputProperties.get(name)??"input":void 0,hasCustomInput=customInputProperty!==void 0;block={type:"toolCall",id:toolCall.id||"",name,arguments:hasCustomInput?{[customInputProperty]:""}:{},partialArgs:hasCustomInput?void 0:"",customInput:hasCustomInput?{property:customInputProperty,jsonBuffer:{input:"",started:!1,closed:!1}}:void 0,streamIndex},streamIndex!==void 0&&toolCallBlocksByIndex.set(streamIndex,block),toolCall.id&&toolCallBlocksById.set(toolCall.id,block),blocks.push(block),stream2.push({type:"toolcall_start",contentIndex:getContentIndex(block),partial:output})}if(streamIndex!==void 0&&block.streamIndex===void 0&&(block.streamIndex=streamIndex,toolCallBlocksByIndex.set(streamIndex,block)),toolCall.id&&toolCallBlocksById.set(toolCall.id,block),!block.name&&name&&(block.name=name),toolCall.custom&&!toolCall.function&&!block.customInput){let customInputProperty=grammarToolInputProperties.get(block.name)??"input";block.arguments={[customInputProperty]:""},block.customInput={property:customInputProperty,jsonBuffer:{input:"",started:!1,closed:!1}},delete block.partialArgs}return block};for await(let chunk of openaiStream){if(await options?.onProviderStreamEvent?.(chunk,model),!chunk||typeof chunk!="object")continue;output.responseId||=chunk.id,typeof chunk.model=="string"&&chunk.model.length>0&&chunk.model!==model.id&&(output.responseModel||=chunk.model),chunk.usage&&(output.usage=parseChunkUsage(chunk.usage,model));let choice=Array.isArray(chunk.choices)?chunk.choices[0]:void 0;if(choice){if(!chunk.usage&&choice.usage&&(output.usage=parseChunkUsage(choice.usage,model)),choice.finish_reason){output.rawStopReason=choice.finish_reason;let finishReasonResult=mapStopReason(choice.finish_reason);output.stopReason=finishReasonResult.stopReason,finishReasonResult.errorMessage&&(output.errorMessage=finishReasonResult.errorMessage),hasFinishReason=!0}if(choice.delta){if(choice.delta.content!==null&&choice.delta.content!==void 0&&choice.delta.content.length>0){let block=ensureTextBlock();block.text+=choice.delta.content,stream2.push({type:"text_delta",contentIndex:getContentIndex(block),delta:choice.delta.content,partial:output})}let reasoningFields=["reasoning_content","reasoning","reasoning_text"],deltaFields=choice.delta,foundReasoningField=null;for(let field of reasoningFields){let value=deltaFields[field];if(typeof value=="string"&&value.length>0){foundReasoningField=field;break}}if(foundReasoningField){let delta=deltaFields[foundReasoningField];if(typeof delta=="string"&&delta.length>0){let thinkingSignature=model.provider==="opencode-go"&&foundReasoningField==="reasoning"?"reasoning_content":foundReasoningField,block=ensureThinkingBlock(thinkingSignature);block.thinking+=delta,stream2.push({type:"thinking_delta",contentIndex:getContentIndex(block),delta,partial:output})}}if(choice?.delta?.tool_calls)for(let toolCall of choice.delta.tool_calls){let block=ensureToolCallBlock(toolCall);!block.id&&toolCall.id&&(block.id=toolCall.id,toolCallBlocksById.set(toolCall.id,block));let name=toolCall.function?.name??toolCall.custom?.name;!block.name&&name&&(block.name=name);let delta="";if(toolCall.function?.arguments)delta=toolCall.function.arguments,block.partialArgs=(block.partialArgs??"")+toolCall.function.arguments,block.arguments=parseStreamingJson(block.partialArgs);else if(toolCall.custom?.input){let nextInput=getCustomToolCallInput(block)+toolCall.custom.input;delta=appendCustomToolCallInput(block,nextInput,!1)??""}stream2.push({type:"toolcall_delta",contentIndex:getContentIndex(block),delta,partial:output})}let reasoningDetails=choice.delta.reasoning_details;if(Array.isArray(reasoningDetails))for(let detail of reasoningDetails)isOpenAIReasoningDetail(detail)&&(ensureThinkingBlock(""),streamedReasoningDetails??=[],appendOpenAIReasoningDetail(streamedReasoningDetails,detail))}}}for(let block of blocks)finishBlock(block);if(options?.signal?.aborted)throw new Error("Request was aborted");if(output.stopReason==="aborted")throw new Error("Request was aborted");if(!hasFinishReason&&!compat.supportsFinishReason&&(output.stopReason=output.content.some(block=>block.type==="toolCall")?"toolUse":"stop"),output.stopReason==="error")throw new Error(output.errorMessage||"Provider returned an error stop reason");if(compat.supportsFinishReason&&!hasFinishReason||output.stopReason==="pending")throw new Error("Stream ended without finish_reason");stream2.push({type:"done",reason:output.stopReason,message:output}),stream2.end()}catch(error){for(let block of output.content)block.type==="thinking"&&applyStreamedReasoningDetails(block),delete block.index,delete block.partialArgs,delete block.customInput,delete block.streamIndex;output.stopReason=options?.signal?.aborted?"aborted":"error",output.errorMessage=formatProviderError(normalizeProviderError(error));let rawMetadata=error?.error?.metadata?.raw;rawMetadata&&!output.errorMessage.includes(String(rawMetadata))&&(output.errorMessage+=`
3
+ ${rawMetadata}`),stream2.push({type:"error",reason:output.stopReason,error:output}),stream2.end()}})(),stream2},streamSimple=(model,context,options)=>{getClientApiKey(model.provider,options?.apiKey,options?.headers);let base={...buildBaseOptions(model,context,options,options?.apiKey),toolChoice:options?.toolChoice},clampedReasoning=options?.reasoning?clampThinkingLevel(model,options.reasoning):void 0;return stream(model,context,{...base,reasoningEffort:clampedReasoning==="off"?void 0:clampedReasoning,thinkingBudgets:options?.thinkingBudgets})};function createClient(model,context,apiKey,optionsHeaders,fetch,sessionId,compat=getCompat(model)){let headers={"User-Agent":getRelayUserAgent(),...model.headers};if(model.provider==="github-copilot"){let hasImages=hasCopilotVisionInput(context.messages),copilotHeaders=buildCopilotDynamicHeaders({messages:context.messages,hasImages});Object.assign(headers,copilotHeaders)}return sessionId&&compat.sendSessionAffinityHeaders&&(compat.sessionAffinityFormat==="openrouter"?headers["x-session-id"]=sessionId:(compat.sessionAffinityFormat==="openai"&&(headers.session_id=sessionId),headers["x-client-request-id"]=sessionId,headers["x-session-affinity"]=sessionId)),optionsHeaders&&Object.assign(headers,optionsHeaders),new OpenAI({apiKey,baseURL:model.baseUrl,dangerouslyAllowBrowser:!0,fetch,defaultHeaders:headers})}function buildParams(model,context,options,compat=getCompat(model),cacheRetention=resolveCacheRetention(options?.cacheRetention,options?.env),grammarToolInputProperties=createGrammarToolInputProperties(getDeclaredTools(context.messages),compat.supportsOpenAIGrammarTools)){let transcriptTools=resolveTranscriptTools(context.messages,compat.supportsMidConvoSystemMessages===!0&&compat.supportsMidConvoToolAdditions===!0),messages=convertMessages(model,context,compat,{grammarToolInputProperties}),cacheControl=getCompatCacheControl(compat,cacheRetention),params={model:model.id,messages,stream:!0,prompt_cache_key:model.baseUrl.includes("api.openai.com")&&cacheRetention!=="none"||cacheRetention==="long"&&compat.supportsLongCacheRetention?clampOpenAIPromptCacheKey(options?.sessionId):void 0,prompt_cache_retention:cacheRetention==="long"&&compat.supportsLongCacheRetention?"24h":void 0};compat.supportsUsageInStreaming!==!1&&(params.stream_options={include_usage:!0}),compat.supportsStore&&(params.store=!1),options?.maxTokens&&(compat.maxTokensField==="max_tokens"?params.max_tokens=options.maxTokens:params.max_completion_tokens=options.maxTokens),options?.temperature!==void 0&&(params.temperature=options.temperature),transcriptTools.requestTools.length>0?(params.tools=convertTools(transcriptTools.requestTools,compat),compat.zaiToolStream&&(params.tool_stream=!0)):hasToolHistory(context.messages)&&(params.tools=[]),cacheControl&&applyAnthropicCacheControl(messages,params.tools,cacheControl),options?.toolChoice&&(params.tool_choice=options.toolChoice),compat.vllmPriority!==void 0&&(params.priority=compat.vllmPriority);let thinkingTokenBudgetField=resolveThinkingTokenBudgetField(compat),thinkingBudget=resolveClampedThinkingBudget(model,options,params);if(compat.thinkingFormat==="zai"&&model.reasoning){let zaiParams=params;if(zaiParams.thinking=options?.reasoningEffort?{type:"enabled",clear_thinking:!1}:{type:"disabled"},options?.reasoningEffort&&compat.supportsReasoningEffort){let mappedEffort=model.thinkingLevelMap?.[options.reasoningEffort],effort=mappedEffort===void 0?options.reasoningEffort:mappedEffort;typeof effort=="string"&&(zaiParams.reasoning_effort=effort)}}else if(compat.thinkingFormat==="qwen"&&model.reasoning){if(params.enable_thinking=!!options?.reasoningEffort,options?.reasoningEffort&&compat.supportsReasoningEffort){let effort=model.thinkingLevelMap?.[options.reasoningEffort]??options.reasoningEffort;typeof effort=="string"&&(params.reasoning_effort=effort)}}else if(compat.thinkingFormat==="qwen-chat-template"&&model.reasoning)params.chat_template_kwargs={enable_thinking:!!options?.reasoningEffort,preserve_thinking:!0};else if(compat.thinkingFormat==="chat-template"&&model.reasoning){let chatTemplateKwargs=buildChatTemplateValues(model,options,compat.chatTemplateKwargs,thinkingBudget);chatTemplateKwargs&&(params.chat_template_kwargs=chatTemplateKwargs)}else if(compat.thinkingFormat==="baseten"&&model.reasoning){let basetenParams=params,chatTemplateArgs=buildChatTemplateValues(model,options,compat.chatTemplateArgs,thinkingBudget);if(chatTemplateArgs&&(basetenParams.chat_template_args=chatTemplateArgs),compat.supportsReasoningEffort){let requestedEffort=options?.reasoningEffort,mappedEffort=requestedEffort?model.thinkingLevelMap?.[requestedEffort]:model.thinkingLevelMap?.off,effort=mappedEffort===void 0?requestedEffort:mappedEffort;typeof effort=="string"&&(basetenParams.reasoning_effort=effort)}}else if(compat.thinkingFormat==="deepseek"&&model.reasoning)options?.reasoningEffort?params.thinking={type:"enabled"}:model.thinkingLevelMap?.off!==null&&(params.thinking={type:"disabled"}),options?.reasoningEffort&&compat.supportsReasoningEffort&&(params.reasoning_effort=model.thinkingLevelMap?.[options.reasoningEffort]??options.reasoningEffort);else if(compat.thinkingFormat==="openrouter"&&model.reasoning){let openRouterParams=params;options?.reasoningEffort?openRouterParams.reasoning={effort:model.thinkingLevelMap?.[options.reasoningEffort]??options.reasoningEffort}:model.thinkingLevelMap?.off!==null&&(openRouterParams.reasoning={effort:model.thinkingLevelMap?.off??"none"})}else if(compat.thinkingFormat==="ant-ling"&&model.reasoning&&options?.reasoningEffort){let effort=model.thinkingLevelMap?.[options.reasoningEffort];typeof effort=="string"&&(params.reasoning={effort})}else if(compat.thinkingFormat==="together"&&model.reasoning){let togetherParams=params;togetherParams.reasoning={enabled:!!options?.reasoningEffort},options?.reasoningEffort&&compat.supportsReasoningEffort&&(togetherParams.reasoning_effort=model.thinkingLevelMap?.[options.reasoningEffort]??options.reasoningEffort)}else if(compat.thinkingFormat==="string-thinking"&&model.reasoning){let stringThinkingParams=params;options?.reasoningEffort?stringThinkingParams.thinking=model.thinkingLevelMap?.[options.reasoningEffort]??options.reasoningEffort:model.thinkingLevelMap?.off!==null&&(stringThinkingParams.thinking=model.thinkingLevelMap?.off??"none")}else if(options?.reasoningEffort&&model.reasoning&&compat.supportsReasoningEffort)params.reasoning_effort=model.thinkingLevelMap?.[options.reasoningEffort]??options.reasoningEffort;else if(!options?.reasoningEffort&&model.reasoning&&compat.supportsReasoningEffort){let offValue=model.thinkingLevelMap?.off;typeof offValue=="string"&&(params.reasoning_effort=offValue)}if(thinkingTokenBudgetField&&thinkingBudget!==void 0&&Object.assign(params,{[thinkingTokenBudgetField]:thinkingBudget}),model.compat?.openRouterRouting&&(params.provider=model.compat.openRouterRouting),model.compat?.vercelGatewayRouting){let routing=model.compat.vercelGatewayRouting;if(routing.only||routing.order){let gatewayOptions={};routing.only&&(gatewayOptions.only=routing.only),routing.order&&(gatewayOptions.order=routing.order),params.providerOptions={gateway:gatewayOptions}}}let samplingParams=resolveSamplingParams(model,options?.reasoningEffort??"off",options?.samplingParams);return samplingParams&&Object.assign(params,samplingParams),params}function resolveThinkingTokenBudgetField(compat){if(compat.thinkingTokenBudgetField)return compat.thinkingTokenBudgetField;if(compat.supportsThinkingTokenBudget)return"thinking_token_budget"}function resolveClampedThinkingBudget(model,options,params){if(!options?.reasoningEffort||!model.reasoning)return;let ceiling=params.max_tokens??params.max_completion_tokens??model.maxTokens,budget=clampThinkingBudgetToAnswerRoom(thinkingBudgetForLevel(options.reasoningEffort,options.thinkingBudgets),ceiling);return budget>0?budget:void 0}function buildChatTemplateValues(model,options,values,thinkingBudget){let resolvedValues={};for(let[key,value]of Object.entries(values)){let resolved=resolveChatTemplateKwargValue(model,options,value,thinkingBudget);resolved!==void 0&&(resolvedValues[key]=resolved)}return Object.keys(resolvedValues).length>0?resolvedValues:void 0}function resolveChatTemplateKwargValue(model,options,value,thinkingBudget){if(typeof value!="object"||value===null)return value;let reasoningEffort=options?.reasoningEffort;if(!reasoningEffort&&value.omitWhenOff)return;if(value.$var==="thinking.enabled")return!!reasoningEffort;if(value.$var==="thinking.budget")return thinkingBudget;let mappedValue=reasoningEffort?model.thinkingLevelMap?.[reasoningEffort]:model.thinkingLevelMap?.off;return mappedValue===void 0?reasoningEffort:typeof mappedValue=="string"?mappedValue:void 0}function getCompatCacheControl(compat,cacheRetention){if(compat.cacheControlFormat!=="anthropic"||cacheRetention==="none")return;let ttl=cacheRetention==="long"&&compat.supportsLongCacheRetention?"1h":void 0;return{type:"ephemeral",...ttl?{ttl}:{}}}function applyAnthropicCacheControl(messages,tools,cacheControl){addCacheControlToSystemPrompt(messages,cacheControl),addCacheControlToLastTool(tools,cacheControl),addCacheControlToLastConversationMessage(messages,cacheControl)}function addCacheControlToSystemPrompt(messages,cacheControl){for(let message of messages)if(message.role==="system"||message.role==="developer"){addCacheControlToInstructionMessage(message,cacheControl);return}}function addCacheControlToLastConversationMessage(messages,cacheControl){for(let i=messages.length-1;i>=0;i--){let message=messages[i];if((message.role==="user"||message.role==="assistant"||message.role==="tool")&&addCacheControlToMessage(message,cacheControl))return}}function addCacheControlToLastTool(tools,cacheControl){if(!tools||tools.length===0)return;let lastTool=tools[tools.length-1];lastTool.cache_control=cacheControl}function addCacheControlToInstructionMessage(message,cacheControl){return addCacheControlToTextContent(message,cacheControl)}function addCacheControlToMessage(message,cacheControl){return message.role==="user"||message.role==="assistant"||message.role==="tool"?addCacheControlToTextContent(message,cacheControl):!1}function addCacheControlToTextContent(message,cacheControl){let content=message.content;if(typeof content=="string")return content.length===0?!1:(message.content=[{type:"text",text:content,cache_control:cacheControl}],!0);if(!Array.isArray(content))return!1;for(let i=content.length-1;i>=0;i--){let part=content[i];if(part?.type==="text"){let textPart=part;return textPart.cache_control=cacheControl,!0}}return!1}function convertMessages(model,context,compat,options){let normalizedContext=resolveTranscript(context,compat.supportsMidConvoSystemMessages),params=[],normalizeToolCallId=id=>{if(id.includes("|")){let separatorIndex=id.indexOf("|"),callId=id.slice(0,separatorIndex).replace(/[^a-zA-Z0-9_-]/g,"_"),itemId=id.slice(separatorIndex+1).replace(/[^a-zA-Z0-9_-]/g,"_"),combinedId=itemId.length>0?`${callId}_${itemId}`:callId;if(combinedId.length<=40)return combinedId;let hash=shortHash(id).slice(0,8);return`${callId.slice(0,Math.max(1,40-hash.length-1))}_${hash}`}return model.provider==="openai"&&id.length>40?id.slice(0,40):id},transformedMessages=transformMessages(normalizedContext.messages,model,id=>normalizeToolCallId(id)),transcriptTools=resolveTranscriptTools(normalizedContext.messages,compat.supportsMidConvoSystemMessages===!0&&compat.supportsMidConvoToolAdditions===!0),instructionRole=model.reasoning&&compat.supportsDeveloperRole?"developer":"system",lastRole=null;for(let i=0;i<transformedMessages.length;i++){let msg=transformedMessages[i];if(compat.requiresAssistantAfterToolResult&&lastRole==="toolResult"&&msg.role==="user"&&params.push({role:"assistant",content:"I have processed the tool results."}),msg.role==="system"){let addedTools=i>0&&transcriptTools.anchorsAdditions?msg.toolsAdded??[]:[];if(addedTools.length>0){let kimiToolMessage={role:"system",tools:convertTools(addedTools,compat)};params.push(kimiToolMessage)}let text=i===0?getSystemMessageText(msg):renderSystemMessageUpdate(msg);text.length>0&&params.push({role:instructionRole,content:sanitizeSurrogates(text)})}else if(msg.role==="user")if(typeof msg.content=="string")params.push({role:"user",content:sanitizeSurrogates(msg.content)});else{let content=msg.content.filter(item=>item.type!=="text"||item.text.length>0).map(item=>item.type==="text"?{type:"text",text:sanitizeSurrogates(item.text)}:{type:"image_url",image_url:{url:`data:${item.mimeType};base64,${item.data}`}});if(content.length===0)continue;params.push({role:"user",content})}else if(msg.role==="assistant"){let assistantMsg={role:"assistant",content:compat.requiresAssistantAfterToolResult?"":null},assistantTextParts=msg.content.filter(isTextContentBlock).filter(block=>block.text.trim().length>0).map(block=>({type:"text",text:sanitizeSurrogates(block.text)})),assistantText=assistantTextParts.map(part=>part.text).join(""),thinkingBlocks=msg.content.filter(isThinkingContentBlock),toolCalls=msg.content.filter(isToolCallBlock),signedReasoningDetails=thinkingBlocks.map(block=>parseOpenAIReasoningDetails(block.thinkingSignature)).find(details=>details!==void 0),legacyReasoningDetails=toolCalls.map(toolCall=>parseLegacyEncryptedReasoningDetail(toolCall.thoughtSignature)).filter(detail=>detail!==void 0),preservedReasoningDetails=signedReasoningDetails??(legacyReasoningDetails.length>0?legacyReasoningDetails:void 0),nonEmptyThinkingBlocks=thinkingBlocks.filter(block=>block.thinking.trim().length>0);if(nonEmptyThinkingBlocks.length>0){if(compat.requiresThinkingAsText){let thinkingText=nonEmptyThinkingBlocks.map(block=>sanitizeSurrogates(block.thinking)).join(`
4
+
5
+ `);assistantMsg.content=[{type:"text",text:thinkingText},...assistantTextParts]}else if(assistantText.length>0&&(assistantMsg.content=assistantText),!preservedReasoningDetails){let signature=nonEmptyThinkingBlocks[0].thinkingSignature;model.provider==="opencode-go"&&signature==="reasoning"&&(signature="reasoning_content"),signature&&isOpenAICompletionsReasoningField(signature)&&(assistantMsg[signature]=nonEmptyThinkingBlocks.map(block=>block.thinking).join(`
6
+ `))}}else assistantText.length>0&&(assistantMsg.content=assistantText);toolCalls.length>0&&(assistantMsg.tool_calls=toolCalls.map(tc=>{let customInputProperty=options?.grammarToolInputProperties?.get(tc.name);return customInputProperty!==void 0?{id:tc.id,type:"custom",custom:{name:tc.name,input:sanitizeSurrogates(getGrammarToolInput(tc.name,tc.arguments,customInputProperty))}}:{id:tc.id,type:"function",function:{name:tc.name,arguments:JSON.stringify(tc.arguments)}}})),preservedReasoningDetails&&(assistantMsg.reasoning_details=preservedReasoningDetails),compat.requiresReasoningContentOnAssistantMessages&&model.reasoning&&assistantMsg.reasoning_content===void 0&&(assistantMsg.reasoning_content="");let content=assistantMsg.content;if(!(content!=null&&content.length>0)&&!assistantMsg.tool_calls)continue;params.push(assistantMsg)}else if(msg.role==="toolResult"){let imageBlocks=[],j=i;for(;j<transformedMessages.length&&transformedMessages[j].role==="toolResult";j++){let toolMsg=transformedMessages[j],textResult=toolMsg.content.filter(isTextContentBlock).map(block=>block.text).join(`
7
+ `),hasImages=toolMsg.content.some(c=>c.type==="image"),toolResultText=textResult.length>0?textResult:hasImages?"(see attached image)":"(no tool output)",toolResultMsg={role:"tool",content:sanitizeSurrogates(toolResultText),tool_call_id:toolMsg.toolCallId};if(compat.requiresToolResultName&&toolMsg.toolName&&(toolResultMsg.name=toolMsg.toolName),params.push(toolResultMsg),hasImages&&model.input.includes("image"))for(let block of toolMsg.content)isImageContentBlock(block)&&imageBlocks.push({type:"image_url",image_url:{url:`data:${block.mimeType};base64,${block.data}`}})}i=j-1,imageBlocks.length>0?(compat.requiresAssistantAfterToolResult&&params.push({role:"assistant",content:"I have processed the tool results."}),params.push({role:"user",content:[{type:"text",text:"Attached image(s) from tool result:"},...imageBlocks]}),lastRole="user"):lastRole="toolResult";continue}lastRole=msg.role}return params}function convertTools(tools,compat){return tools.map(tool=>{let grammar=resolveGrammarConstrainedSampling(tool,compat.supportsOpenAIGrammarTools);if(grammar)return{type:"custom",custom:{name:tool.name,description:tool.description,format:{type:"grammar",grammar:{syntax:grammar.format,definition:grammar.definition}}}};let strict=resolveJsonSchemaStrictSampling(tool,compat.supportsStrictMode!==!1);return{type:"function",function:{name:tool.name,description:tool.description,parameters:getJsonSchemaToolParameters(tool,strict),...compat.supportsStrictMode!==!1&&{strict:strict??!1}}}})}function parseChunkUsage(rawUsage,model){let promptTokens=rawUsage.prompt_tokens||0,cacheReadTokens=rawUsage.prompt_tokens_details?.cached_tokens??rawUsage.prompt_cache_hit_tokens??rawUsage.cached_tokens??0,cacheWriteTokens=rawUsage.prompt_tokens_details?.cache_write_tokens||0,input=Math.max(0,promptTokens-cacheReadTokens-cacheWriteTokens),outputTokens=rawUsage.completion_tokens||0,usage={input,output:outputTokens,cacheRead:cacheReadTokens,cacheWrite:cacheWriteTokens,reasoning:rawUsage.completion_tokens_details?.reasoning_tokens||0,totalTokens:input+outputTokens+cacheReadTokens+cacheWriteTokens,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}};return calculateCost(model,usage),usage}function mapStopReason(reason){if(reason===null)return{stopReason:"stop"};switch(reason){case"stop":case"end":return{stopReason:"stop"};case"length":return{stopReason:"length"};case"function_call":case"tool_calls":return{stopReason:"toolUse"};case"content_filter":return{stopReason:"error",errorMessage:"Provider finish_reason: content_filter"};case"network_error":return{stopReason:"error",errorMessage:"Provider finish_reason: network_error"};default:return{stopReason:"error",errorMessage:`Provider finish_reason: ${reason}`}}}function detectCompat(model){let provider=model.provider,baseUrl=model.baseUrl,isZai=provider==="zai"||provider==="zai-coding-cn"||baseUrl.includes("api.z.ai")||baseUrl.includes("open.bigmodel.cn"),isTogether=provider==="together"||baseUrl.includes("api.together.ai")||baseUrl.includes("api.together.xyz"),isMoonshot=provider==="moonshotai"||provider==="moonshotai-cn"||baseUrl.includes("api.moonshot."),isOpenRouter=provider==="openrouter"||baseUrl.includes("openrouter.ai"),isCloudflareWorkersAI=provider==="cloudflare-workers-ai"||baseUrl.includes("api.cloudflare.com"),isCloudflareAiGateway=provider==="cloudflare-ai-gateway"||baseUrl.includes("gateway.ai.cloudflare.com"),isNvidia=provider==="nvidia"||baseUrl.includes("integrate.api.nvidia.com"),isAntLing=provider==="ant-ling"||baseUrl.includes("api.ant-ling.com"),isCerebras=provider==="cerebras"||baseUrl.includes("cerebras.ai"),isDeepSeek=provider==="deepseek"||baseUrl.toLowerCase().includes("deepseek.com"),isNonStandard=isNvidia||isCerebras||provider==="xai"||baseUrl.includes("api.x.ai")||isTogether||baseUrl.includes("chutes.ai")||isDeepSeek||isZai||isMoonshot||provider==="opencode"||baseUrl.includes("opencode.ai")||isCloudflareWorkersAI||isCloudflareAiGateway||isAntLing,useMaxTokens=baseUrl.includes("chutes.ai")||isDeepSeek||isMoonshot||isCloudflareAiGateway||isTogether||isNvidia||isAntLing||isZai,isGrok=provider==="xai"||baseUrl.includes("api.x.ai"),isOpenRouterDeveloperRoleModel=isOpenRouter&&(model.id.startsWith("anthropic/")||model.id.startsWith("openai/")),cacheControlFormat=provider==="openrouter"&&model.id.startsWith("anthropic/")?"anthropic":void 0;return{supportsStore:!isNonStandard,supportsDeveloperRole:isOpenRouterDeveloperRoleModel||!isNonStandard&&!isOpenRouter,supportsReasoningEffort:!isGrok&&!isZai&&!isMoonshot&&!isTogether&&!isCloudflareAiGateway&&!isNvidia&&!isAntLing,supportsUsageInStreaming:!0,supportsFinishReason:!0,maxTokensField:useMaxTokens?"max_tokens":"max_completion_tokens",requiresToolResultName:!1,requiresAssistantAfterToolResult:!1,requiresThinkingAsText:!1,requiresReasoningContentOnAssistantMessages:isDeepSeek,thinkingFormat:isDeepSeek?"deepseek":isZai?"zai":isTogether?"together":isAntLing?"ant-ling":isOpenRouter?"openrouter":"openai",openRouterRouting:{},vercelGatewayRouting:{},chatTemplateKwargs:{},chatTemplateArgs:{},zaiToolStream:!1,supportsThinkingTokenBudget:!1,thinkingTokenBudgetField:void 0,supportsStrictMode:!1,supportsOpenAIGrammarTools:!1,supportsMidConvoSystemMessages:!1,supportsMidConvoToolAdditions:!1,cacheControlFormat,sendSessionAffinityHeaders:isOpenRouter,sessionAffinityFormat:isOpenRouter?"openrouter":"openai",supportsLongCacheRetention:!(isTogether||isCloudflareWorkersAI||isCloudflareAiGateway||isNvidia||isAntLing)}}function getCompat(model){let detected=detectCompat(model);return model.compat?{supportsStore:model.compat.supportsStore??detected.supportsStore,supportsDeveloperRole:model.compat.supportsDeveloperRole??detected.supportsDeveloperRole,supportsReasoningEffort:model.compat.supportsReasoningEffort??detected.supportsReasoningEffort,supportsUsageInStreaming:model.compat.supportsUsageInStreaming??detected.supportsUsageInStreaming,supportsFinishReason:model.compat.supportsFinishReason??detected.supportsFinishReason,maxTokensField:model.compat.maxTokensField??detected.maxTokensField,requiresToolResultName:model.compat.requiresToolResultName??detected.requiresToolResultName,requiresAssistantAfterToolResult:model.compat.requiresAssistantAfterToolResult??detected.requiresAssistantAfterToolResult,requiresThinkingAsText:model.compat.requiresThinkingAsText??detected.requiresThinkingAsText,requiresReasoningContentOnAssistantMessages:model.compat.requiresReasoningContentOnAssistantMessages??detected.requiresReasoningContentOnAssistantMessages,thinkingFormat:model.compat.thinkingFormat??detected.thinkingFormat,openRouterRouting:model.compat.openRouterRouting??{},vercelGatewayRouting:model.compat.vercelGatewayRouting??detected.vercelGatewayRouting,chatTemplateKwargs:model.compat.chatTemplateKwargs??detected.chatTemplateKwargs,chatTemplateArgs:model.compat.chatTemplateArgs??detected.chatTemplateArgs,zaiToolStream:model.compat.zaiToolStream??detected.zaiToolStream,supportsThinkingTokenBudget:model.compat.supportsThinkingTokenBudget??detected.supportsThinkingTokenBudget,thinkingTokenBudgetField:model.compat.thinkingTokenBudgetField??detected.thinkingTokenBudgetField,supportsStrictMode:model.compat.supportsStrictMode??detected.supportsStrictMode,supportsOpenAIGrammarTools:model.compat.supportsOpenAIGrammarTools??detected.supportsOpenAIGrammarTools,supportsMidConvoSystemMessages:model.compat.supportsMidConvoSystemMessages??detected.supportsMidConvoSystemMessages,supportsMidConvoToolAdditions:model.compat.supportsMidConvoToolAdditions??detected.supportsMidConvoToolAdditions,cacheControlFormat:model.compat.cacheControlFormat??detected.cacheControlFormat,sendSessionAffinityHeaders:model.compat.sendSessionAffinityHeaders??detected.sendSessionAffinityHeaders,sessionAffinityFormat:model.compat.sessionAffinityFormat??detected.sessionAffinityFormat,supportsLongCacheRetention:model.compat.supportsLongCacheRetention??detected.supportsLongCacheRetention,vllmPriority:model.compat.vllmPriority}:detected}export{convertMessages,stream,streamSimple};
@@ -0,0 +1,3 @@
1
+ import { createRequire as __piCreateRequire } from "node:module"; const require = __piCreateRequire(import.meta.url);
2
+ import{buildCopilotDynamicHeaders,hasCopilotVisionInput}from"./chunk-PGXDEOVV.js";import{convertResponsesMessages,convertResponsesTools,processResponsesStream}from"./chunk-Z2G7KLPH.js";import{clampOpenAIPromptCacheKey}from"./chunk-PRRNXB7S.js";import{OpenAI}from"./chunk-H3QXYIF7.js";import{formatProviderError,normalizeProviderError}from"./chunk-TEPMHNKQ.js";import"./chunk-PJACZCIR.js";import{retryProviderRequest}from"./chunk-LD2P6SFZ.js";import{buildBaseOptions,createGrammarToolInputProperties,getRelayUserAgent,resolveSamplingParams}from"./chunk-O7R77OAK.js";import"./chunk-L2ZPNLYD.js";import{headersToRecord}from"./chunk-UTB4DTYQ.js";import{getProviderEnvValue}from"./chunk-DRQDKNXA.js";import"./chunk-TRDNDS6A.js";import{clampThinkingLevel,getDeclaredTools,resolveTranscript,resolveTranscriptTools}from"./chunk-KJUDFE6Y.js";import{AssistantMessageEventStream}from"./chunk-A3JYRWB6.js";import"./chunk-4L3WN2XY.js";var OPENAI_TOOL_CALL_PROVIDERS=new Set(["openai","openai-codex","opencode"]),OPENAI_RESPONSES_MIN_OUTPUT_TOKENS=16,CHATGPT_USAGE_URL="https://chatgpt.com/settings/usage";function isChatGPTSignIn(model,apiKey){return model.provider==="openai"&&model.baseUrl==="https://api.openai.com/v1"&&apiKey!==void 0&&!apiKey.startsWith("sk-")}function hasHeader(headers,name){if(!headers)return!1;let expected=name.toLowerCase();for(let[key,value]of Object.entries(headers))if(key.toLowerCase()===expected&&value!==null&&value.trim().length>0)return!0;return!1}function getClientApiKey(provider,apiKey,headers){if(apiKey)return apiKey;if(hasHeader(headers,"authorization")||hasHeader(headers,"cf-aig-authorization"))return"unused";throw new Error(`No API key for provider: ${provider}`)}function detectSessionAffinityFormat(model){return model.provider==="openrouter"||model.baseUrl.includes("openrouter.ai")?"openrouter":"openai"}function resolveCacheRetention(cacheRetention,env){return cacheRetention||(getProviderEnvValue("RELAY_CACHE_RETENTION",env)==="long"?"long":"short")}function getCompat(model){return{supportsDeveloperRole:model.compat?.supportsDeveloperRole??!0,supportsMidConvoSystemMessages:model.compat?.supportsMidConvoSystemMessages??!1,sessionAffinityFormat:model.compat?.sessionAffinityFormat??detectSessionAffinityFormat(model),supportsLongCacheRetention:model.compat?.supportsLongCacheRetention??!0,supportsStrictMode:model.compat?.supportsStrictMode??!1,supportsOpenAIGrammarTools:model.compat?.supportsOpenAIGrammarTools??!1,supportsAdditionalTools:model.compat?.supportsAdditionalTools??!1,supportsToolSearch:model.compat?.supportsToolSearch??!1,supportsExplicitPromptCacheMode:model.compat?.supportsExplicitPromptCacheMode??!1,supportsMaxOutputTokens:model.compat?.supportsMaxOutputTokens??!0}}function getPromptCacheRetention(compat,cacheRetention){return cacheRetention==="long"&&compat.supportsLongCacheRetention&&!compat.supportsExplicitPromptCacheMode?"24h":void 0}function getPromptCacheOptions(compat,cacheRetention){if(compat.supportsExplicitPromptCacheMode){if(cacheRetention==="none")return{mode:"explicit"};if(cacheRetention==="long"&&compat.supportsLongCacheRetention)return{ttl:"30m"}}}var stream=(model,context,options)=>{let stream2=new AssistantMessageEventStream,normalizedContext=resolveTranscript(context,getCompat(model).supportsMidConvoSystemMessages);return(async()=>{let output={role:"assistant",content:[],api:model.api,provider:model.provider,model:model.id,usage:{input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},stopReason:"pending",timestamp:Date.now()};try{let apiKey=getClientApiKey(model.provider,options?.apiKey,options?.headers),cacheSessionId=resolveCacheRetention(options?.cacheRetention,options?.env)==="none"?void 0:options?.sessionId,compat=getCompat(model),grammarToolInputProperties=createGrammarToolInputProperties(getDeclaredTools(normalizedContext.messages),compat.supportsOpenAIGrammarTools),client=createClient(model,normalizedContext,apiKey,options?.headers,options?.fetch,cacheSessionId),params=buildParams(model,normalizedContext,options,compat,grammarToolInputProperties),nextParams=await options?.onPayload?.(params,model);nextParams!==void 0&&(params=nextParams);let requestOptions={...options?.signal?{signal:options.signal}:{},...options?.timeoutMs!==void 0?{timeout:options.timeoutMs}:{},maxRetries:0},{data:openaiStream,response}=await retryProviderRequest(()=>client.responses.create(params,requestOptions).withResponse(),{maxRetries:options?.maxRetries,maxRetryDelayMs:options?.maxRetryDelayMs,signal:options?.signal});if(await options?.onResponse?.({status:response.status,headers:headersToRecord(response.headers)},model),stream2.push({type:"start",partial:output}),await processResponsesStream(openaiStream,output,stream2,model,{onProviderStreamEvent:options?.onProviderStreamEvent,serviceTier:options?.serviceTier,grammarToolInputProperties,applyServiceTierPricing:(usage,serviceTier)=>applyServiceTierPricing(usage,serviceTier,model)}),options?.signal?.aborted)throw new Error("Request was aborted");if(output.stopReason==="pending")throw new Error("OpenAI Responses stream ended without a stop reason");if(output.stopReason==="aborted"||output.stopReason==="error")throw new Error(output.errorMessage||"An unknown error occurred");stream2.push({type:"done",reason:output.stopReason,message:output}),stream2.end()}catch(error){for(let block of output.content)delete block.index,delete block.partialJson,delete block.customInput;output.stopReason=options?.signal?.aborted?"aborted":"error";let errorMessage=formatProviderError(normalizeProviderError(error),`${model.provider==="openai"?"OpenAI":model.provider} API error`);output.errorMessage=errorMessage.includes("subscription_sharing_usage_limit_exceeded")?`${errorMessage}
3
+ Check your ChatGPT usage: ${CHATGPT_USAGE_URL}`:errorMessage,stream2.push({type:"error",reason:output.stopReason,error:output}),stream2.end()}})(),stream2},streamSimple=(model,context,options)=>{getClientApiKey(model.provider,options?.apiKey,options?.headers);let base={...buildBaseOptions(model,context,options,options?.apiKey),toolChoice:options?.toolChoice},clampedReasoning=options?.reasoning?clampThinkingLevel(model,options.reasoning):void 0;return stream(model,context,{...base,reasoningEffort:clampedReasoning==="off"?void 0:clampedReasoning})};function createClient(model,context,apiKey,optionsHeaders,fetch,sessionId){let compat=getCompat(model),headers={"User-Agent":getRelayUserAgent(),...model.headers};if(model.provider==="github-copilot"){let hasImages=hasCopilotVisionInput(context.messages),copilotHeaders=buildCopilotDynamicHeaders({messages:context.messages,hasImages});Object.assign(headers,copilotHeaders)}return sessionId&&(compat.sessionAffinityFormat==="openrouter"?headers["x-session-id"]=sessionId:(compat.sessionAffinityFormat==="openai"&&(headers.session_id=sessionId),headers["x-client-request-id"]=sessionId)),optionsHeaders&&Object.assign(headers,optionsHeaders),new OpenAI({apiKey,baseURL:model.baseUrl,dangerouslyAllowBrowser:!0,fetch,defaultHeaders:headers})}function buildParams(model,context,options,compat=getCompat(model),grammarToolInputProperties=createGrammarToolInputProperties(getDeclaredTools(context.messages),compat.supportsOpenAIGrammarTools)){let transcriptTools=resolveTranscriptTools(context.messages,compat.supportsAdditionalTools||compat.supportsToolSearch),messages=convertResponsesMessages(model,context,OPENAI_TOOL_CALL_PROVIDERS,{grammarToolInputProperties,supportsMidConvoSystemMessages:compat.supportsMidConvoSystemMessages,supportsAdditionalTools:compat.supportsAdditionalTools,supportsToolSearch:compat.supportsToolSearch,toolOptions:{supportsStrictMode:compat.supportsStrictMode,supportsOpenAIGrammarTools:compat.supportsOpenAIGrammarTools}}),cacheRetention=resolveCacheRetention(options?.cacheRetention,options?.env),omitUnsupportedFields=isChatGPTSignIn(model,options?.apiKey),params={model:model.id,input:messages,stream:!0,prompt_cache_key:cacheRetention==="none"?void 0:clampOpenAIPromptCacheKey(options?.sessionId),prompt_cache_retention:omitUnsupportedFields?void 0:getPromptCacheRetention(compat,cacheRetention),prompt_cache_options:omitUnsupportedFields?void 0:getPromptCacheOptions(compat,cacheRetention),store:!1};options?.maxTokens&&compat.supportsMaxOutputTokens&&!omitUnsupportedFields&&(params.max_output_tokens=Math.max(options.maxTokens,OPENAI_RESPONSES_MIN_OUTPUT_TOKENS)),options?.temperature!==void 0&&!omitUnsupportedFields&&(params.temperature=options?.temperature),options?.serviceTier!==void 0&&(params.service_tier=options.serviceTier),transcriptTools.requestTools.length>0&&(params.tools=convertResponsesTools(transcriptTools.requestTools,{supportsStrictMode:compat.supportsStrictMode,supportsOpenAIGrammarTools:compat.supportsOpenAIGrammarTools})),options?.toolChoice!==void 0&&(params.tool_choice=options.toolChoice);let reasoningEffort=options?.reasoningEffort??(options?.reasoningSummary?"medium":void 0);if(model.reasoning){if(reasoningEffort){let effort=options?.reasoningEffort?model.thinkingLevelMap?.[options.reasoningEffort]??options.reasoningEffort:reasoningEffort;params.reasoning={effort,summary:options?.reasoningSummary||"auto"},params.include=["reasoning.encrypted_content"]}else model.provider!=="github-copilot"&&model.thinkingLevelMap?.off!==null&&(params.reasoning={effort:model.thinkingLevelMap?.off??"none"});model.provider==="xai"&&(params.include=["reasoning.encrypted_content"])}let samplingParams=resolveSamplingParams(model,reasoningEffort??"off",options?.samplingParams);return samplingParams&&Object.assign(params,samplingParams),params}function getServiceTierCostMultiplier(model,serviceTier){switch(serviceTier){case"flex":return .5;case"priority":case"fast":return model.id==="gpt-5.5"?2.5:2;default:return 1}}function applyServiceTierPricing(usage,serviceTier,model){let multiplier=getServiceTierCostMultiplier(model,serviceTier);multiplier!==1&&(usage.cost.input*=multiplier,usage.cost.output*=multiplier,usage.cost.cacheRead*=multiplier,usage.cost.cacheWrite*=multiplier,usage.cost.total=usage.cost.input+usage.cost.output+usage.cost.cacheRead+usage.cost.cacheWrite)}export{stream,streamSimple};
@@ -0,0 +1,2 @@
1
+ import { createRequire as __piCreateRequire } from "node:module"; const require = __piCreateRequire(import.meta.url);
2
+ import{OpenAI}from"./chunk-H3QXYIF7.js";import{formatProviderError,normalizeProviderError}from"./chunk-TEPMHNKQ.js";import{retryProviderRequest}from"./chunk-LD2P6SFZ.js";import{sanitizeSurrogates}from"./chunk-L2ZPNLYD.js";import{headersToRecord,providerHeadersToRecord}from"./chunk-UTB4DTYQ.js";import"./chunk-4L3WN2XY.js";var generateImages=async(model,context,options)=>{let output={api:model.api,provider:model.provider,model:model.id,output:[],stopReason:"stop",timestamp:Date.now()};try{let apiKey=options?.apiKey;if(!apiKey)throw new Error(`No API key for provider: ${model.provider}`);let client=createClient(model,apiKey,options?.headers,options?.fetch),params=buildParams(model,context),nextParams=await options?.onPayload?.(params,model);nextParams!==void 0&&(params=nextParams);let requestOptions={...options?.signal?{signal:options.signal}:{},...options?.timeoutMs!==void 0?{timeout:options.timeoutMs}:{},maxRetries:0},{data:response,response:rawResponse}=await retryProviderRequest(()=>client.chat.completions.create(params,requestOptions).withResponse(),{maxRetries:options?.maxRetries,maxRetryDelayMs:options?.maxRetryDelayMs,signal:options?.signal});await options?.onResponse?.({status:rawResponse.status,headers:headersToRecord(rawResponse.headers)},model);let imageResponse=response;output.responseId=imageResponse.id,imageResponse.usage&&(output.usage=parseUsage(imageResponse.usage,model));let choice=imageResponse.choices[0];if(choice){let content=choice.message.content;typeof content=="string"&&content.length>0&&output.output.push({type:"text",text:content});for(let image of choice.message.images??[]){let imageUrl=typeof image.image_url=="string"?image.image_url:image.image_url?.url;if(!imageUrl?.startsWith("data:"))continue;let matches=imageUrl.match(/^data:([^;]+);base64,(.+)$/);matches&&output.output.push({type:"image",mimeType:matches[1],data:matches[2]})}}return output}catch(error){return output.stopReason=options?.signal?.aborted?"aborted":"error",output.errorMessage=formatProviderError(normalizeProviderError(error)),output}};function createClient(model,apiKey,optionsHeaders,fetch){return new OpenAI({apiKey,baseURL:model.baseUrl,dangerouslyAllowBrowser:!0,fetch,defaultHeaders:providerHeadersToRecord({...model.headers,...optionsHeaders})})}function buildParams(model,context){let content=context.input.map(item=>item.type==="text"?{type:"text",text:sanitizeSurrogates(item.text)}:{type:"image_url",image_url:{url:`data:${item.mimeType};base64,${item.data}`}});return{model:model.id,messages:[{role:"user",content}],stream:!1,modalities:model.output.includes("text")?["image","text"]:["image"]}}function parseUsage(rawUsage,model){let promptTokens=rawUsage.prompt_tokens||0,reportedCachedTokens=rawUsage.prompt_tokens_details?.cached_tokens||0,cacheWriteTokens=rawUsage.prompt_tokens_details?.cache_write_tokens||0,cacheReadTokens=cacheWriteTokens>0?Math.max(0,reportedCachedTokens-cacheWriteTokens):reportedCachedTokens,input=Math.max(0,promptTokens-cacheReadTokens-cacheWriteTokens),output=rawUsage.completion_tokens||0,usage={input,output,cacheRead:cacheReadTokens,cacheWrite:cacheWriteTokens,totalTokens:input+output+cacheReadTokens+cacheWriteTokens,cost:{input:model.cost.input/1e6*input,output:model.cost.output/1e6*output,cacheRead:model.cost.cacheRead/1e6*cacheReadTokens,cacheWrite:model.cost.cacheWrite/1e6*cacheWriteTokens,total:0}};return usage.cost.total=usage.cost.input+usage.cost.output+usage.cost.cacheRead+usage.cost.cacheWrite,usage}export{generateImages};
@@ -0,0 +1,75 @@
1
+ import { createRequire as __piCreateRequire } from "node:module"; const require = __piCreateRequire(import.meta.url);
2
+ var __require=(x=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(x,{get:(a,b)=>(typeof require<"u"?require:a)[b]}):x)(function(x){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+x+'" is not supported')});var procEnvCache=null;function getBunSandboxEnvValue(name){if(!(typeof process>"u"||!process.versions?.bun||Object.keys(process.env).length>0)){if(procEnvCache===null){procEnvCache=new Map;try{let{readFileSync}=__require("node:fs"),data=readFileSync("/proc/self/environ","utf-8");for(let entry of data.split("\0")){let idx=entry.indexOf("=");idx>0&&procEnvCache.set(entry.slice(0,idx),entry.slice(idx+1))}}catch{}}return procEnvCache.get(name)}}function getProviderEnvValue(name,env){return env?.[name]||(typeof process<"u"?process.env[name]:void 0)||getBunSandboxEnvValue(name)||void 0}import{createServer}from"node:http";var LOGO_SVG='<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 800 800" aria-hidden="true"><path fill="#F09082" d="M165.29 165.29H517.36V400H400V282.65H165.29Z"/><path fill="#4D9ABF" d="M165.29 282.65H282.65V400H400V517.36H282.65V634.72H165.29Z"/><path fill="#F1BE58" d="M517.36 400H634.72V634.72H517.36Z"/></svg>';function escapeHtml(value){return value.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;").replaceAll("'","&#39;")}function renderPage(options){let title=escapeHtml(options.title),heading=escapeHtml(options.heading),message=escapeHtml(options.message),details=options.details?escapeHtml(options.details):void 0;return`<!doctype html>
3
+ <html lang="en">
4
+ <head>
5
+ <meta charset="utf-8" />
6
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
7
+ <title>${title}</title>
8
+ <style>
9
+ :root {
10
+ --text: #fafafa;
11
+ --text-dim: #a1a1aa;
12
+ --page-bg: #09090b;
13
+ --font-sans: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
14
+ --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
15
+ }
16
+ * { box-sizing: border-box; }
17
+ html { color-scheme: dark; }
18
+ body {
19
+ margin: 0;
20
+ min-height: 100vh;
21
+ display: flex;
22
+ align-items: center;
23
+ justify-content: center;
24
+ padding: 24px;
25
+ background: var(--page-bg);
26
+ color: var(--text);
27
+ font-family: var(--font-sans);
28
+ text-align: center;
29
+ }
30
+ main {
31
+ width: 100%;
32
+ max-width: 560px;
33
+ display: flex;
34
+ flex-direction: column;
35
+ align-items: center;
36
+ justify-content: center;
37
+ }
38
+ .logo {
39
+ width: 72px;
40
+ height: 72px;
41
+ display: block;
42
+ margin-bottom: 24px;
43
+ }
44
+ h1 {
45
+ margin: 0 0 10px;
46
+ font-size: 28px;
47
+ line-height: 1.15;
48
+ font-weight: 650;
49
+ color: var(--text);
50
+ }
51
+ p {
52
+ margin: 0;
53
+ line-height: 1.7;
54
+ color: var(--text-dim);
55
+ font-size: 15px;
56
+ }
57
+ .details {
58
+ margin-top: 16px;
59
+ font-family: var(--font-mono);
60
+ font-size: 13px;
61
+ color: var(--text-dim);
62
+ white-space: pre-wrap;
63
+ word-break: break-word;
64
+ }
65
+ </style>
66
+ </head>
67
+ <body>
68
+ <main>
69
+ <div class="logo">${LOGO_SVG}</div>
70
+ <h1>${heading}</h1>
71
+ <p>${message}</p>
72
+ ${details?`<div class="details">${details}</div>`:""}
73
+ </main>
74
+ </body>
75
+ </html>`}function oauthSuccessHtml(message){return renderPage({title:"Authentication successful",heading:"Authentication successful",message})}function oauthErrorHtml(message,details){return renderPage({title:"Authentication failed",heading:"Authentication failed",message,details})}function sendPage(response,status,html){response.writeHead(status,{"content-type":"text/html; charset=utf-8","cache-control":"no-store"}),response.end(html)}async function startOAuthCallbackServer(options){let{providerName,signal}=options;if(signal?.aborted)throw new Error("Login cancelled");let resolveWait=()=>{},rejectWait=()=>{},waitPromise=new Promise((resolve,reject)=>{resolveWait=resolve,rejectWait=reject});waitPromise.catch(()=>{});let claimed=!1,settled=!1,timer,onAbort=()=>finish({error:new Error("Login cancelled")}),finish=result=>{settled||(settled=!0,timer&&clearTimeout(timer),signal?.removeEventListener("abort",onAbort),"error"in result?rejectWait(result.error):resolveWait(result.value))},server=createServer((request,response)=>{(async()=>{let url=new URL(request.url??"/","http://localhost");if(request.method!=="GET"||url.pathname!==options.path){sendPage(response,404,oauthErrorHtml("Callback route not found."));return}if(options.state!==void 0&&url.searchParams.get("state")!==options.state){sendPage(response,400,oauthErrorHtml("State mismatch."));return}if(claimed||settled){sendPage(response,409,oauthErrorHtml("This sign-in has already been handled."));return}let error=url.searchParams.get("error");if(error){let description=url.searchParams.get("error_description")??error;sendPage(response,400,oauthErrorHtml(`${providerName} authorization failed.`,description)),finish({error:new Error(`${providerName} authorization failed: ${description}`)});return}let code=url.searchParams.get("code");if(!code){sendPage(response,400,oauthErrorHtml("Missing authorization code."));return}claimed=!0;try{let value=await options.complete(code);sendPage(response,200,oauthSuccessHtml(`Signed in to ${providerName}. You may now close this page.`)),finish({value})}catch(error2){let failure=error2 instanceof Error?error2:new Error(String(error2));sendPage(response,502,oauthErrorHtml(`${providerName} sign-in failed.`,failure.message)),finish({error:failure})}})()});await new Promise((resolve,reject)=>{server.once("error",reject),server.listen(options.port,options.host,()=>{server.off("error",reject),resolve()})});let address=server.address();if(!address||typeof address=="string")throw server.close(),new Error("OAuth callback server did not bind to TCP");server.on("error",error=>finish({error})),signal?.addEventListener("abort",onAbort,{once:!0}),options.timeoutMs!==void 0&&(timer=setTimeout(()=>finish({error:new Error(`${providerName} sign-in timed out`)}),options.timeoutMs));let redirectHost=options.redirectHost??options.host;return{redirectUri:`http://${redirectHost.includes(":")?`[${redirectHost}]`:redirectHost}:${address.port}${options.path}`,wait:()=>waitPromise,cancel:()=>{claimed||finish({value:void 0})},close:()=>{finish({error:new Error("OAuth callback server closed")}),server.close()}}}async function waitForCallbackOrManualInput(interaction,callback,prompt){let manualAbort=new AbortController,manualError,manual=interaction.prompt({type:"manual_code",...prompt,signal:manualAbort.signal}).then(input=>(callback?.cancel(),input)).catch(error=>{manualError=error instanceof Error?error:new Error(String(error)),callback?.cancel()});try{let value=await callback?.wait();if(manualError)throw manualError;if(value!==void 0)return{type:"callback",value};let input=await manual;if(manualError)throw manualError;return{type:"manual",input:input??""}}finally{manualAbort.abort()}}function base64urlEncode(bytes){let binary="";for(let byte of bytes)binary+=String.fromCharCode(byte);return btoa(binary).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}async function generatePKCE(){let verifierBytes=new Uint8Array(32);crypto.getRandomValues(verifierBytes);let verifier=base64urlEncode(verifierBytes),data=new TextEncoder().encode(verifier),hashBuffer=await crypto.subtle.digest("SHA-256",data),challenge=base64urlEncode(new Uint8Array(hashBuffer));return{verifier,challenge}}var AUTHORIZE_URL="https://openrouter.ai/auth",TOKEN_URL="https://openrouter.ai/api/v1/auth/keys",LOGIN_TIMEOUT_MS=300*1e3,TOKEN_EXCHANGE_TIMEOUT_MS=3e4;function getCallbackHost(){return getProviderEnvValue("RELAY_OAUTH_CALLBACK_HOST")||"127.0.0.1"}function parseAuthorizationInput(input){let value=input.trim();if(value){try{return new URL(value).searchParams.get("code")??void 0}catch{}return value.includes("code=")?new URLSearchParams(value).get("code")??void 0:value}}function errorDetail(body){if(typeof body.error_description=="string")return body.error_description;if(typeof body.message=="string")return body.message;if(typeof body.error=="string")return body.error;if(body.error&&typeof body.error=="object"&&!Array.isArray(body.error)){let message=body.error.message;if(typeof message=="string")return message}}async function exchangeAuthorizationCode(code,verifier,signal){if(signal.aborted)throw new Error("Login cancelled");let controller=new AbortController,onAbort=()=>controller.abort(signal.reason);signal.addEventListener("abort",onAbort,{once:!0});let timeout=setTimeout(()=>controller.abort(new Error("OpenRouter OAuth token exchange timed out")),TOKEN_EXCHANGE_TIMEOUT_MS),response,body={};try{response=await fetch(TOKEN_URL,{method:"POST",headers:{accept:"application/json","content-type":"application/json"},body:JSON.stringify({code,code_verifier:verifier,code_challenge_method:"S256"}),signal:controller.signal});try{let parsed=await response.json();parsed&&typeof parsed=="object"&&!Array.isArray(parsed)&&(body=parsed)}catch{if(response.ok)throw new Error("OpenRouter OAuth returned invalid JSON")}}catch(error){throw signal.aborted?new Error("Login cancelled"):controller.signal.aborted?new Error("OpenRouter OAuth token exchange timed out"):error}finally{clearTimeout(timeout),signal.removeEventListener("abort",onAbort)}if(!response.ok){let detail=errorDetail(body);throw new Error(`OpenRouter OAuth key exchange failed (HTTP ${response.status})${detail?`: ${detail}`:""}`)}if(typeof body.key!="string"||body.key.length===0)throw new Error('OpenRouter OAuth response carries no "key"');return{type:"oauth",access:body.key,refresh:"",expires:Number.MAX_SAFE_INTEGER}}async function loginOpenRouter(interaction){let{verifier,challenge}=await generatePKCE(),callback=await startOAuthCallbackServer({providerName:"OpenRouter",host:getCallbackHost(),port:0,path:`/oauth/callback/${crypto.randomUUID()}`,complete:code=>exchangeAuthorizationCode(code,verifier,interaction.signal),signal:interaction.signal,timeoutMs:LOGIN_TIMEOUT_MS});try{let authorizeUrl=new URL(AUTHORIZE_URL);authorizeUrl.search=new URLSearchParams({callback_url:callback.redirectUri,code_challenge:challenge,code_challenge_method:"S256"}).toString(),interaction.notify({type:"progress",message:`Listening for OpenRouter OAuth callback on ${callback.redirectUri}`}),interaction.notify({type:"auth_url",url:authorizeUrl.toString(),instructions:"Complete sign-in in your browser. If the browser is on another machine, paste the final redirect URL here."});let result=await waitForCallbackOrManualInput(interaction,callback,{message:"Complete sign-in in your browser, or paste the authorization code / redirect URL here:",placeholder:callback.redirectUri});if(result.type==="callback")return result.value;let code=parseAuthorizationInput(result.input);if(!code)throw new Error("Missing authorization code");return interaction.notify({type:"progress",message:"Exchanging authorization code for an API key..."}),await exchangeAuthorizationCode(code,verifier,interaction.signal)}finally{callback.close()}}var openRouterOAuth={name:"OpenRouter OAuth",loginLabel:"Sign in with OpenRouter",login:loginOpenRouter,async refresh(credential,_signal){return credential},async toAuth(credential){return{apiKey:credential.access}}};export{openRouterOAuth};
@@ -0,0 +1,8 @@
1
+ import { createRequire as __piCreateRequire } from "node:module"; const require = __piCreateRequire(import.meta.url);
2
+ import{headersToRecord,providerHeadersToRecord}from"./chunk-UTB4DTYQ.js";import{getProviderEnvValue}from"./chunk-DRQDKNXA.js";import{parseStreamingJson}from"./chunk-TRDNDS6A.js";import{AssistantMessageEventStream,appendAssistantMessageDiagnostic,createAssistantMessageDiagnostic}from"./chunk-A3JYRWB6.js";import"./chunk-4L3WN2XY.js";var RelayMessagesResponseError=class extends Error{code;diagnosticDetails;constructor(message,code,diagnosticDetails){super(message),this.name="RelayMessagesResponseError",this.code=code,this.diagnosticDetails=diagnosticDetails}};function parseRelayMessagesErrorBody(body){try{let parsed=JSON.parse(body),error=parsed?.error;return parsed&&typeof error=="object"&&error!==null&&!Array.isArray(error)?parsed:void 0}catch{return}}function truncateDiagnosticString(value){return value.length>8192?`${value.slice(0,8192)}\u2026`:value}function formatRelayMessagesResponseError(response,body,errorBody){let message=typeof errorBody?.error?.message=="string"?errorBody.error.message:void 0,code=typeof errorBody?.error?.code=="string"?errorBody.error.code:void 0,suffix=message??body,codeSuffix=code?` (${code})`:"";return`${response.status} ${response.statusText}: ${suffix}${codeSuffix}`}function createRelayMessagesResponseError(model,url,response,body){let errorBody=parseRelayMessagesErrorBody(body),code=typeof errorBody?.error?.code=="string"?errorBody.error.code:void 0;return new RelayMessagesResponseError(formatRelayMessagesResponseError(response,body,errorBody),code,{version:1,provider:model.provider,model:model.id,url:url.toString(),status:response.status,statusText:response.statusText,...errorBody?.error===void 0?{}:{error:errorBody.error},...errorBody?{}:{body:truncateDiagnosticString(body)},timestampMs:Date.now()})}function createEmptyUsage(){return{input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}}}function appendRewriteDiagnostic(message,rewrite){rewrite&&appendAssistantMessageDiagnostic(message,{type:"pi_messages_rewrite",timestamp:Date.now(),details:{...rewrite}})}function createEventConverter(model){let partial={role:"assistant",content:[],api:model.api,provider:model.provider,model:model.id,usage:createEmptyUsage(),stopReason:"pending",timestamp:Date.now()},toolJson=new Map;return event=>{switch(event.type){case"done":return Object.assign(partial,{stopReason:event.reason,usage:event.usage,responseId:event.responseId}),event.providerThinkingLevel!==void 0&&(partial.providerThinkingLevel=event.providerThinkingLevel),appendRewriteDiagnostic(partial,event.rewrite),{type:"done",reason:event.reason,message:partial};case"error":return Object.assign(partial,{stopReason:event.reason,usage:event.usage,errorMessage:event.errorMessage,responseId:event.responseId}),event.providerThinkingLevel!==void 0&&(partial.providerThinkingLevel=event.providerThinkingLevel),appendRewriteDiagnostic(partial,event.rewrite),{type:"error",reason:event.reason,error:partial};case"start":break;case"text_start":partial.content[event.contentIndex]={type:"text",text:""};break;case"text_delta":partial.content[event.contentIndex].text+=event.delta;break;case"text_end":Object.assign(partial.content[event.contentIndex],{text:event.content,textSignature:event.contentSignature});break;case"thinking_start":partial.content[event.contentIndex]={type:"thinking",thinking:""};break;case"thinking_delta":partial.content[event.contentIndex].thinking+=event.delta;break;case"thinking_end":Object.assign(partial.content[event.contentIndex],{thinking:event.content,thinkingSignature:event.contentSignature,redacted:event.redacted});break;case"toolcall_start":partial.content[event.contentIndex]={type:"toolCall",id:event.id,name:event.toolName,arguments:{}},toolJson.set(event.contentIndex,"");break;case"toolcall_delta":{let json=`${toolJson.get(event.contentIndex)??""}${event.delta}`;toolJson.set(event.contentIndex,json),partial.content[event.contentIndex].arguments=parseStreamingJson(json);break}case"toolcall_end":return Object.assign(partial.content[event.contentIndex],event.toolCall),toolJson.delete(event.contentIndex),{type:"toolcall_end",contentIndex:event.contentIndex,toolCall:partial.content[event.contentIndex],partial}}return{...event,partial}}}async function*readRelayMessagesEvents(stream2){let decoder=new TextDecoder,reader=stream2.getReader(),buffer="";try{for(;;){let{done,value}=await reader.read();buffer+=done?decoder.decode():decoder.decode(value,{stream:!0}),buffer=buffer.replace(/\r\n/g,`
3
+ `);let split=buffer.indexOf(`
4
+
5
+ `);for(;split!==-1;){let event=parseRelayMessagesEvent(buffer.slice(0,split));event&&(yield event),buffer=buffer.slice(split+2),split=buffer.indexOf(`
6
+
7
+ `)}if(done)break}if(buffer.trim()){let event=parseRelayMessagesEvent(buffer);event&&(yield event)}}finally{reader.releaseLock()}}function parseRelayMessagesEvent(raw){let data=raw.split(`
8
+ `).find(line=>line.startsWith("data:"))?.slice(5).trim();return data&&data!=="[DONE]"?JSON.parse(data):void 0}function createErrorEvent(model,error,aborted){let reason=aborted?"aborted":"error",assistantMessage={role:"assistant",content:[],api:model.api,provider:model.provider,model:model.id,usage:createEmptyUsage(),stopReason:reason,errorMessage:error instanceof Error?error.message:String(error),timestamp:Date.now()};return!aborted&&error instanceof RelayMessagesResponseError&&appendAssistantMessageDiagnostic(assistantMessage,createAssistantMessageDiagnostic("pi_messages_response_failure",error,error.diagnosticDetails)),{type:"error",reason,error:assistantMessage}}function resolveCacheRetention(cacheRetention,env){return cacheRetention||(getProviderEnvValue("RELAY_CACHE_RETENTION",env)==="long"?"long":void 0)}var stream=(model,context,options)=>{let eventStream=new AssistantMessageEventStream,convertEvent=createEventConverter(model);return(async()=>{try{let apiKey=options?.apiKey;if(!apiKey)throw new Error(`No API key provided for provider "${model.provider}"`);let url=new URL(`${model.baseUrl.replace(/\/+$/u,"")}/messages`);options?.debug&&url.searchParams.set("debug","1");let payload={model:model.id,context,options:{temperature:options?.temperature,maxTokens:options?.maxTokens,reasoning:options?.reasoning,cacheRetention:resolveCacheRetention(options?.cacheRetention,options?.env),sessionId:options?.sessionId,toolChoice:options?.toolChoice}},nextPayload=await options?.onPayload?.(payload,model);nextPayload!==void 0&&(payload=nextPayload);let response=await(options?.fetch??globalThis.fetch)(url,{method:"POST",headers:{authorization:`Bearer ${apiKey}`,accept:"text/event-stream","content-type":"application/json",...providerHeadersToRecord(options?.headers)},body:JSON.stringify(payload),signal:options?.signal});if(await options?.onResponse?.({status:response.status,headers:headersToRecord(response.headers)},model),!response.ok){let body=await response.text();throw createRelayMessagesResponseError(model,url,response,body)}if(!response.body)throw new Error(`${model.provider} response has no body`);for await(let relayEvent of readRelayMessagesEvents(response.body)){await options?.onProviderStreamEvent?.(relayEvent,model);let event=convertEvent(relayEvent);if(eventStream.push(event),event.type==="done"||event.type==="error")return}throw new Error(`${model.provider} stream ended without a terminal event`)}catch(error){eventStream.push(createErrorEvent(model,error,options?.signal?.aborted??!1))}})(),eventStream},streamSimple=(model,context,options)=>{let extra=options;return stream(model,context,{...options,reasoning:options?.reasoning,toolChoice:options?.toolChoice,debug:extra?.debug})};export{RelayMessagesResponseError,stream,streamSimple};
@@ -0,0 +1,2 @@
1
+ import { createRequire as __piCreateRequire } from "node:module"; const require = __piCreateRequire(import.meta.url);
2
+ import{McpOAuthCredentialStore,McpServerConnection,McpServerLog,McpSignInCancelledError,createDefaultTransport,signInMcpServer}from"./chunk-3QND5D7W.js";import"./chunk-3XNI2SB6.js";import"./chunk-MP5FU7MG.js";import"./chunk-XDAWU2J5.js";import"./chunk-S3GGRYIO.js";import"./chunk-4L3WN2XY.js";export{McpOAuthCredentialStore,McpServerConnection,McpServerLog,McpSignInCancelledError,createDefaultTransport,signInMcpServer};
@@ -0,0 +1,4 @@
1
+ import { createRequire as __piCreateRequire } from "node:module"; const require = __piCreateRequire(import.meta.url);
2
+ import{FormData,blobFrom,blobFromSync,fetch_blob_default,fileFrom,fileFromSync,file_default,formDataToBlob,init_esm_min,init_fetch_blob,init_from}from"./chunk-6CYCI3EJ.js";import{__esm}from"./chunk-4L3WN2XY.js";function dataUriToBuffer(uri){if(!/^data:/i.test(uri))throw new TypeError('`uri` does not appear to be a Data URI (must begin with "data:")');uri=uri.replace(/\r?\n/g,"");let firstComma=uri.indexOf(",");if(firstComma===-1||firstComma<=4)throw new TypeError("malformed data: URI");let meta=uri.substring(5,firstComma).split(";"),charset="",base64=!1,type=meta[0]||"text/plain",typeFull=type;for(let i=1;i<meta.length;i++)meta[i]==="base64"?base64=!0:meta[i]&&(typeFull+=`;${meta[i]}`,meta[i].indexOf("charset=")===0&&(charset=meta[i].substring(8)));!meta[0]&&!charset.length&&(typeFull+=";charset=US-ASCII",charset="US-ASCII");let encoding=base64?"base64":"ascii",data=unescape(uri.substring(firstComma+1)),buffer=Buffer.from(data,encoding);return buffer.type=type,buffer.typeFull=typeFull,buffer.charset=charset,buffer}var dist_default,init_dist=__esm({"node_modules/data-uri-to-buffer/dist/index.js"(){dist_default=dataUriToBuffer}});var FetchBaseError,init_base=__esm({"node_modules/node-fetch/src/errors/base.js"(){FetchBaseError=class extends Error{constructor(message,type){super(message),Error.captureStackTrace(this,this.constructor),this.type=type}get name(){return this.constructor.name}get[Symbol.toStringTag](){return this.constructor.name}}}});var FetchError,init_fetch_error=__esm({"node_modules/node-fetch/src/errors/fetch-error.js"(){init_base();FetchError=class extends FetchBaseError{constructor(message,type,systemError){super(message,type),systemError&&(this.code=this.errno=systemError.code,this.erroredSysCall=systemError.syscall)}}}});var NAME,isURLSearchParameters,isBlob,isAbortSignal,isDomainOrSubdomain,isSameProtocol,init_is=__esm({"node_modules/node-fetch/src/utils/is.js"(){NAME=Symbol.toStringTag,isURLSearchParameters=object=>typeof object=="object"&&typeof object.append=="function"&&typeof object.delete=="function"&&typeof object.get=="function"&&typeof object.getAll=="function"&&typeof object.has=="function"&&typeof object.set=="function"&&typeof object.sort=="function"&&object[NAME]==="URLSearchParams",isBlob=object=>object&&typeof object=="object"&&typeof object.arrayBuffer=="function"&&typeof object.type=="string"&&typeof object.stream=="function"&&typeof object.constructor=="function"&&/^(Blob|File)$/.test(object[NAME]),isAbortSignal=object=>typeof object=="object"&&(object[NAME]==="AbortSignal"||object[NAME]==="EventTarget"),isDomainOrSubdomain=(destination,original)=>{let orig=new URL(original).hostname,dest=new URL(destination).hostname;return orig===dest||orig.endsWith(`.${dest}`)},isSameProtocol=(destination,original)=>{let orig=new URL(original).protocol,dest=new URL(destination).protocol;return orig===dest}}});import Stream,{PassThrough}from"node:stream";import{types,deprecate,promisify}from"node:util";import{Buffer as Buffer2}from"node:buffer";async function consumeBody(data){if(data[INTERNALS].disturbed)throw new TypeError(`body used already for: ${data.url}`);if(data[INTERNALS].disturbed=!0,data[INTERNALS].error)throw data[INTERNALS].error;let{body}=data;if(body===null)return Buffer2.alloc(0);if(!(body instanceof Stream))return Buffer2.alloc(0);let accum=[],accumBytes=0;try{for await(let chunk of body){if(data.size>0&&accumBytes+chunk.length>data.size){let error=new FetchError(`content size at ${data.url} over limit: ${data.size}`,"max-size");throw body.destroy(error),error}accumBytes+=chunk.length,accum.push(chunk)}}catch(error){throw error instanceof FetchBaseError?error:new FetchError(`Invalid response body while trying to fetch ${data.url}: ${error.message}`,"system",error)}if(body.readableEnded===!0||body._readableState.ended===!0)try{return accum.every(c=>typeof c=="string")?Buffer2.from(accum.join("")):Buffer2.concat(accum,accumBytes)}catch(error){throw new FetchError(`Could not create Buffer from response body for ${data.url}: ${error.message}`,"system",error)}else throw new FetchError(`Premature close of server response while trying to fetch ${data.url}`)}var pipeline,INTERNALS,Body,clone,getNonSpecFormDataBoundary,extractContentType,getTotalBytes,writeToStream,init_body=__esm({"node_modules/node-fetch/src/body.js"(){init_fetch_blob();init_esm_min();init_fetch_error();init_base();init_is();pipeline=promisify(Stream.pipeline),INTERNALS=Symbol("Body internals"),Body=class{constructor(body,{size=0}={}){let boundary=null;body===null?body=null:isURLSearchParameters(body)?body=Buffer2.from(body.toString()):isBlob(body)||Buffer2.isBuffer(body)||(types.isAnyArrayBuffer(body)?body=Buffer2.from(body):ArrayBuffer.isView(body)?body=Buffer2.from(body.buffer,body.byteOffset,body.byteLength):body instanceof Stream||(body instanceof FormData?(body=formDataToBlob(body),boundary=body.type.split("=")[1]):body=Buffer2.from(String(body))));let stream=body;Buffer2.isBuffer(body)?stream=Stream.Readable.from(body):isBlob(body)&&(stream=Stream.Readable.from(body.stream())),this[INTERNALS]={body,stream,boundary,disturbed:!1,error:null},this.size=size,body instanceof Stream&&body.on("error",error_=>{let error=error_ instanceof FetchBaseError?error_:new FetchError(`Invalid response body while trying to fetch ${this.url}: ${error_.message}`,"system",error_);this[INTERNALS].error=error})}get body(){return this[INTERNALS].stream}get bodyUsed(){return this[INTERNALS].disturbed}async arrayBuffer(){let{buffer,byteOffset,byteLength}=await consumeBody(this);return buffer.slice(byteOffset,byteOffset+byteLength)}async formData(){let ct=this.headers.get("content-type");if(ct.startsWith("application/x-www-form-urlencoded")){let formData=new FormData,parameters=new URLSearchParams(await this.text());for(let[name,value]of parameters)formData.append(name,value);return formData}let{toFormData}=await import("./multipart-parser-SQ6GDJL7.js");return toFormData(this.body,ct)}async blob(){let ct=this.headers&&this.headers.get("content-type")||this[INTERNALS].body&&this[INTERNALS].body.type||"",buf=await this.arrayBuffer();return new fetch_blob_default([buf],{type:ct})}async json(){let text=await this.text();return JSON.parse(text)}async text(){let buffer=await consumeBody(this);return new TextDecoder().decode(buffer)}buffer(){return consumeBody(this)}};Body.prototype.buffer=deprecate(Body.prototype.buffer,"Please use 'response.arrayBuffer()' instead of 'response.buffer()'","node-fetch#buffer");Object.defineProperties(Body.prototype,{body:{enumerable:!0},bodyUsed:{enumerable:!0},arrayBuffer:{enumerable:!0},blob:{enumerable:!0},json:{enumerable:!0},text:{enumerable:!0},data:{get:deprecate(()=>{},"data doesn't exist, use json(), text(), arrayBuffer(), or body instead","https://github.com/node-fetch/node-fetch/issues/1000 (response)")}});clone=(instance,highWaterMark)=>{let p1,p2,{body}=instance[INTERNALS];if(instance.bodyUsed)throw new Error("cannot clone body after it is used");return body instanceof Stream&&typeof body.getBoundary!="function"&&(p1=new PassThrough({highWaterMark}),p2=new PassThrough({highWaterMark}),body.pipe(p1),body.pipe(p2),instance[INTERNALS].stream=p1,body=p2),body},getNonSpecFormDataBoundary=deprecate(body=>body.getBoundary(),"form-data doesn't follow the spec and requires special treatment. Use alternative package","https://github.com/node-fetch/node-fetch/issues/1167"),extractContentType=(body,request)=>body===null?null:typeof body=="string"?"text/plain;charset=UTF-8":isURLSearchParameters(body)?"application/x-www-form-urlencoded;charset=UTF-8":isBlob(body)?body.type||null:Buffer2.isBuffer(body)||types.isAnyArrayBuffer(body)||ArrayBuffer.isView(body)?null:body instanceof FormData?`multipart/form-data; boundary=${request[INTERNALS].boundary}`:body&&typeof body.getBoundary=="function"?`multipart/form-data;boundary=${getNonSpecFormDataBoundary(body)}`:body instanceof Stream?null:"text/plain;charset=UTF-8",getTotalBytes=request=>{let{body}=request[INTERNALS];return body===null?0:isBlob(body)?body.size:Buffer2.isBuffer(body)?body.length:body&&typeof body.getLengthSync=="function"&&body.hasKnownLength&&body.hasKnownLength()?body.getLengthSync():null},writeToStream=async(dest,{body})=>{body===null?dest.end():await pipeline(body,dest)}}});import{types as types2}from"node:util";import http from"node:http";function fromRawHeaders(headers=[]){return new Headers(headers.reduce((result,value,index,array)=>(index%2===0&&result.push(array.slice(index,index+2)),result),[]).filter(([name,value])=>{try{return validateHeaderName(name),validateHeaderValue(name,String(value)),!0}catch{return!1}}))}var validateHeaderName,validateHeaderValue,Headers,init_headers=__esm({"node_modules/node-fetch/src/headers.js"(){validateHeaderName=typeof http.validateHeaderName=="function"?http.validateHeaderName:name=>{if(!/^[\^`\-\w!#$%&'*+.|~]+$/.test(name)){let error=new TypeError(`Header name must be a valid HTTP token [${name}]`);throw Object.defineProperty(error,"code",{value:"ERR_INVALID_HTTP_TOKEN"}),error}},validateHeaderValue=typeof http.validateHeaderValue=="function"?http.validateHeaderValue:(name,value)=>{if(/[^\t\u0020-\u007E\u0080-\u00FF]/.test(value)){let error=new TypeError(`Invalid character in header content ["${name}"]`);throw Object.defineProperty(error,"code",{value:"ERR_INVALID_CHAR"}),error}},Headers=class _Headers extends URLSearchParams{constructor(init){let result=[];if(init instanceof _Headers){let raw=init.raw();for(let[name,values]of Object.entries(raw))result.push(...values.map(value=>[name,value]))}else if(init!=null)if(typeof init=="object"&&!types2.isBoxedPrimitive(init)){let method=init[Symbol.iterator];if(method==null)result.push(...Object.entries(init));else{if(typeof method!="function")throw new TypeError("Header pairs must be iterable");result=[...init].map(pair=>{if(typeof pair!="object"||types2.isBoxedPrimitive(pair))throw new TypeError("Each header pair must be an iterable object");return[...pair]}).map(pair=>{if(pair.length!==2)throw new TypeError("Each header pair must be a name/value tuple");return[...pair]})}}else throw new TypeError("Failed to construct 'Headers': The provided value is not of type '(sequence<sequence<ByteString>> or record<ByteString, ByteString>)");return result=result.length>0?result.map(([name,value])=>(validateHeaderName(name),validateHeaderValue(name,String(value)),[String(name).toLowerCase(),String(value)])):void 0,super(result),new Proxy(this,{get(target,p,receiver){switch(p){case"append":case"set":return(name,value)=>(validateHeaderName(name),validateHeaderValue(name,String(value)),URLSearchParams.prototype[p].call(target,String(name).toLowerCase(),String(value)));case"delete":case"has":case"getAll":return name=>(validateHeaderName(name),URLSearchParams.prototype[p].call(target,String(name).toLowerCase()));case"keys":return()=>(target.sort(),new Set(URLSearchParams.prototype.keys.call(target)).keys());default:return Reflect.get(target,p,receiver)}}})}get[Symbol.toStringTag](){return this.constructor.name}toString(){return Object.prototype.toString.call(this)}get(name){let values=this.getAll(name);if(values.length===0)return null;let value=values.join(", ");return/^content-encoding$/i.test(name)&&(value=value.toLowerCase()),value}forEach(callback,thisArg=void 0){for(let name of this.keys())Reflect.apply(callback,thisArg,[this.get(name),name,this])}*values(){for(let name of this.keys())yield this.get(name)}*entries(){for(let name of this.keys())yield[name,this.get(name)]}[Symbol.iterator](){return this.entries()}raw(){return[...this.keys()].reduce((result,key)=>(result[key]=this.getAll(key),result),{})}[Symbol.for("nodejs.util.inspect.custom")](){return[...this.keys()].reduce((result,key)=>{let values=this.getAll(key);return key==="host"?result[key]=values[0]:result[key]=values.length>1?values:values[0],result},{})}};Object.defineProperties(Headers.prototype,["get","entries","forEach","values"].reduce((result,property)=>(result[property]={enumerable:!0},result),{}))}});var redirectStatus,isRedirect,init_is_redirect=__esm({"node_modules/node-fetch/src/utils/is-redirect.js"(){redirectStatus=new Set([301,302,303,307,308]),isRedirect=code=>redirectStatus.has(code)}});var INTERNALS2,Response,init_response=__esm({"node_modules/node-fetch/src/response.js"(){init_headers();init_body();init_is_redirect();INTERNALS2=Symbol("Response internals"),Response=class _Response extends Body{constructor(body=null,options={}){super(body,options);let status=options.status!=null?options.status:200,headers=new Headers(options.headers);if(body!==null&&!headers.has("Content-Type")){let contentType=extractContentType(body,this);contentType&&headers.append("Content-Type",contentType)}this[INTERNALS2]={type:"default",url:options.url,status,statusText:options.statusText||"",headers,counter:options.counter,highWaterMark:options.highWaterMark}}get type(){return this[INTERNALS2].type}get url(){return this[INTERNALS2].url||""}get status(){return this[INTERNALS2].status}get ok(){return this[INTERNALS2].status>=200&&this[INTERNALS2].status<300}get redirected(){return this[INTERNALS2].counter>0}get statusText(){return this[INTERNALS2].statusText}get headers(){return this[INTERNALS2].headers}get highWaterMark(){return this[INTERNALS2].highWaterMark}clone(){return new _Response(clone(this,this.highWaterMark),{type:this.type,url:this.url,status:this.status,statusText:this.statusText,headers:this.headers,ok:this.ok,redirected:this.redirected,size:this.size,highWaterMark:this.highWaterMark})}static redirect(url,status=302){if(!isRedirect(status))throw new RangeError('Failed to execute "redirect" on "response": Invalid status code');return new _Response(null,{headers:{location:new URL(url).toString()},status})}static error(){let response=new _Response(null,{status:0,statusText:""});return response[INTERNALS2].type="error",response}static json(data=void 0,init={}){let body=JSON.stringify(data);if(body===void 0)throw new TypeError("data is not JSON serializable");let headers=new Headers(init&&init.headers);return headers.has("content-type")||headers.set("content-type","application/json"),new _Response(body,{...init,headers})}get[Symbol.toStringTag](){return"Response"}};Object.defineProperties(Response.prototype,{type:{enumerable:!0},url:{enumerable:!0},status:{enumerable:!0},ok:{enumerable:!0},redirected:{enumerable:!0},statusText:{enumerable:!0},headers:{enumerable:!0},clone:{enumerable:!0}})}});var getSearch,init_get_search=__esm({"node_modules/node-fetch/src/utils/get-search.js"(){getSearch=parsedURL=>{if(parsedURL.search)return parsedURL.search;let lastOffset=parsedURL.href.length-1,hash=parsedURL.hash||(parsedURL.href[lastOffset]==="#"?"#":"");return parsedURL.href[lastOffset-hash.length]==="?"?"?":""}}});import{isIP}from"node:net";function stripURLForUseAsAReferrer(url,originOnly=!1){return url==null||(url=new URL(url),/^(about|blob|data):$/.test(url.protocol))?"no-referrer":(url.username="",url.password="",url.hash="",originOnly&&(url.pathname="",url.search=""),url)}function validateReferrerPolicy(referrerPolicy){if(!ReferrerPolicy.has(referrerPolicy))throw new TypeError(`Invalid referrerPolicy: ${referrerPolicy}`);return referrerPolicy}function isOriginPotentiallyTrustworthy(url){if(/^(http|ws)s:$/.test(url.protocol))return!0;let hostIp=url.host.replace(/(^\[)|(]$)/g,""),hostIPVersion=isIP(hostIp);return hostIPVersion===4&&/^127\./.test(hostIp)||hostIPVersion===6&&/^(((0+:){7})|(::(0+:){0,6}))0*1$/.test(hostIp)?!0:url.host==="localhost"||url.host.endsWith(".localhost")?!1:url.protocol==="file:"}function isUrlPotentiallyTrustworthy(url){return/^about:(blank|srcdoc)$/.test(url)||url.protocol==="data:"||/^(blob|filesystem):$/.test(url.protocol)?!0:isOriginPotentiallyTrustworthy(url)}function determineRequestsReferrer(request,{referrerURLCallback,referrerOriginCallback}={}){if(request.referrer==="no-referrer"||request.referrerPolicy==="")return null;let policy=request.referrerPolicy;if(request.referrer==="about:client")return"no-referrer";let referrerSource=request.referrer,referrerURL=stripURLForUseAsAReferrer(referrerSource),referrerOrigin=stripURLForUseAsAReferrer(referrerSource,!0);referrerURL.toString().length>4096&&(referrerURL=referrerOrigin),referrerURLCallback&&(referrerURL=referrerURLCallback(referrerURL)),referrerOriginCallback&&(referrerOrigin=referrerOriginCallback(referrerOrigin));let currentURL=new URL(request.url);switch(policy){case"no-referrer":return"no-referrer";case"origin":return referrerOrigin;case"unsafe-url":return referrerURL;case"strict-origin":return isUrlPotentiallyTrustworthy(referrerURL)&&!isUrlPotentiallyTrustworthy(currentURL)?"no-referrer":referrerOrigin.toString();case"strict-origin-when-cross-origin":return referrerURL.origin===currentURL.origin?referrerURL:isUrlPotentiallyTrustworthy(referrerURL)&&!isUrlPotentiallyTrustworthy(currentURL)?"no-referrer":referrerOrigin;case"same-origin":return referrerURL.origin===currentURL.origin?referrerURL:"no-referrer";case"origin-when-cross-origin":return referrerURL.origin===currentURL.origin?referrerURL:referrerOrigin;case"no-referrer-when-downgrade":return isUrlPotentiallyTrustworthy(referrerURL)&&!isUrlPotentiallyTrustworthy(currentURL)?"no-referrer":referrerURL;default:throw new TypeError(`Invalid referrerPolicy: ${policy}`)}}function parseReferrerPolicyFromHeader(headers){let policyTokens=(headers.get("referrer-policy")||"").split(/[,\s]+/),policy="";for(let token of policyTokens)token&&ReferrerPolicy.has(token)&&(policy=token);return policy}var ReferrerPolicy,DEFAULT_REFERRER_POLICY,init_referrer=__esm({"node_modules/node-fetch/src/utils/referrer.js"(){ReferrerPolicy=new Set(["","no-referrer","no-referrer-when-downgrade","same-origin","origin","strict-origin","origin-when-cross-origin","strict-origin-when-cross-origin","unsafe-url"]),DEFAULT_REFERRER_POLICY="strict-origin-when-cross-origin"}});import{format as formatUrl}from"node:url";import{deprecate as deprecate2}from"node:util";var INTERNALS3,isRequest,doBadDataWarn,Request,getNodeRequestOptions,init_request=__esm({"node_modules/node-fetch/src/request.js"(){init_headers();init_body();init_is();init_get_search();init_referrer();INTERNALS3=Symbol("Request internals"),isRequest=object=>typeof object=="object"&&typeof object[INTERNALS3]=="object",doBadDataWarn=deprecate2(()=>{},".data is not a valid RequestInit property, use .body instead","https://github.com/node-fetch/node-fetch/issues/1000 (request)"),Request=class _Request extends Body{constructor(input,init={}){let parsedURL;if(isRequest(input)?parsedURL=new URL(input.url):(parsedURL=new URL(input),input={}),parsedURL.username!==""||parsedURL.password!=="")throw new TypeError(`${parsedURL} is an url with embedded credentials.`);let method=init.method||input.method||"GET";if(/^(delete|get|head|options|post|put)$/i.test(method)&&(method=method.toUpperCase()),!isRequest(init)&&"data"in init&&doBadDataWarn(),(init.body!=null||isRequest(input)&&input.body!==null)&&(method==="GET"||method==="HEAD"))throw new TypeError("Request with GET/HEAD method cannot have body");let inputBody=init.body?init.body:isRequest(input)&&input.body!==null?clone(input):null;super(inputBody,{size:init.size||input.size||0});let headers=new Headers(init.headers||input.headers||{});if(inputBody!==null&&!headers.has("Content-Type")){let contentType=extractContentType(inputBody,this);contentType&&headers.set("Content-Type",contentType)}let signal=isRequest(input)?input.signal:null;if("signal"in init&&(signal=init.signal),signal!=null&&!isAbortSignal(signal))throw new TypeError("Expected signal to be an instanceof AbortSignal or EventTarget");let referrer=init.referrer==null?input.referrer:init.referrer;if(referrer==="")referrer="no-referrer";else if(referrer){let parsedReferrer=new URL(referrer);referrer=/^about:(\/\/)?client$/.test(parsedReferrer)?"client":parsedReferrer}else referrer=void 0;this[INTERNALS3]={method,redirect:init.redirect||input.redirect||"follow",headers,parsedURL,signal,referrer},this.follow=init.follow===void 0?input.follow===void 0?20:input.follow:init.follow,this.compress=init.compress===void 0?input.compress===void 0?!0:input.compress:init.compress,this.counter=init.counter||input.counter||0,this.agent=init.agent||input.agent,this.highWaterMark=init.highWaterMark||input.highWaterMark||16384,this.insecureHTTPParser=init.insecureHTTPParser||input.insecureHTTPParser||!1,this.referrerPolicy=init.referrerPolicy||input.referrerPolicy||""}get method(){return this[INTERNALS3].method}get url(){return formatUrl(this[INTERNALS3].parsedURL)}get headers(){return this[INTERNALS3].headers}get redirect(){return this[INTERNALS3].redirect}get signal(){return this[INTERNALS3].signal}get referrer(){if(this[INTERNALS3].referrer==="no-referrer")return"";if(this[INTERNALS3].referrer==="client")return"about:client";if(this[INTERNALS3].referrer)return this[INTERNALS3].referrer.toString()}get referrerPolicy(){return this[INTERNALS3].referrerPolicy}set referrerPolicy(referrerPolicy){this[INTERNALS3].referrerPolicy=validateReferrerPolicy(referrerPolicy)}clone(){return new _Request(this)}get[Symbol.toStringTag](){return"Request"}};Object.defineProperties(Request.prototype,{method:{enumerable:!0},url:{enumerable:!0},headers:{enumerable:!0},redirect:{enumerable:!0},clone:{enumerable:!0},signal:{enumerable:!0},referrer:{enumerable:!0},referrerPolicy:{enumerable:!0}});getNodeRequestOptions=request=>{let{parsedURL}=request[INTERNALS3],headers=new Headers(request[INTERNALS3].headers);headers.has("Accept")||headers.set("Accept","*/*");let contentLengthValue=null;if(request.body===null&&/^(post|put)$/i.test(request.method)&&(contentLengthValue="0"),request.body!==null){let totalBytes=getTotalBytes(request);typeof totalBytes=="number"&&!Number.isNaN(totalBytes)&&(contentLengthValue=String(totalBytes))}contentLengthValue&&headers.set("Content-Length",contentLengthValue),request.referrerPolicy===""&&(request.referrerPolicy=DEFAULT_REFERRER_POLICY),request.referrer&&request.referrer!=="no-referrer"?request[INTERNALS3].referrer=determineRequestsReferrer(request):request[INTERNALS3].referrer="no-referrer",request[INTERNALS3].referrer instanceof URL&&headers.set("Referer",request.referrer),headers.has("User-Agent")||headers.set("User-Agent","node-fetch"),request.compress&&!headers.has("Accept-Encoding")&&headers.set("Accept-Encoding","gzip, deflate, br");let{agent}=request;typeof agent=="function"&&(agent=agent(parsedURL));let search=getSearch(parsedURL),options={path:parsedURL.pathname+search,method:request.method,headers:headers[Symbol.for("nodejs.util.inspect.custom")](),insecureHTTPParser:request.insecureHTTPParser,agent};return{parsedURL,options}}}});var AbortError,init_abort_error=__esm({"node_modules/node-fetch/src/errors/abort-error.js"(){init_base();AbortError=class extends FetchBaseError{constructor(message,type="aborted"){super(message,type)}}}});import http2 from"node:http";import https from"node:https";import zlib from"node:zlib";import Stream2,{PassThrough as PassThrough2,pipeline as pump}from"node:stream";import{Buffer as Buffer3}from"node:buffer";async function fetch(url,options_){return new Promise((resolve,reject)=>{let request=new Request(url,options_),{parsedURL,options}=getNodeRequestOptions(request);if(!supportedSchemas.has(parsedURL.protocol))throw new TypeError(`node-fetch cannot load ${url}. URL scheme "${parsedURL.protocol.replace(/:$/,"")}" is not supported.`);if(parsedURL.protocol==="data:"){let data=dist_default(request.url),response2=new Response(data,{headers:{"Content-Type":data.typeFull}});resolve(response2);return}let send=(parsedURL.protocol==="https:"?https:http2).request,{signal}=request,response=null,abort=()=>{let error=new AbortError("The operation was aborted.");reject(error),request.body&&request.body instanceof Stream2.Readable&&request.body.destroy(error),!(!response||!response.body)&&response.body.emit("error",error)};if(signal&&signal.aborted){abort();return}let abortAndFinalize=()=>{abort(),finalize()},request_=send(parsedURL.toString(),options);signal&&signal.addEventListener("abort",abortAndFinalize);let finalize=()=>{request_.abort(),signal&&signal.removeEventListener("abort",abortAndFinalize)};request_.on("error",error=>{reject(new FetchError(`request to ${request.url} failed, reason: ${error.message}`,"system",error)),finalize()}),fixResponseChunkedTransferBadEnding(request_,error=>{response&&response.body&&response.body.destroy(error)}),process.version<"v14"&&request_.on("socket",s=>{let endedWithEventsCount;s.prependListener("end",()=>{endedWithEventsCount=s._eventsCount}),s.prependListener("close",hadError=>{if(response&&endedWithEventsCount<s._eventsCount&&!hadError){let error=new Error("Premature close");error.code="ERR_STREAM_PREMATURE_CLOSE",response.body.emit("error",error)}})}),request_.on("response",response_=>{request_.setTimeout(0);let headers=fromRawHeaders(response_.rawHeaders);if(isRedirect(response_.statusCode)){let location=headers.get("Location"),locationURL=null;try{locationURL=location===null?null:new URL(location,request.url)}catch{if(request.redirect!=="manual"){reject(new FetchError(`uri requested responds with an invalid redirect URL: ${location}`,"invalid-redirect")),finalize();return}}switch(request.redirect){case"error":reject(new FetchError(`uri requested responds with a redirect, redirect mode is set to error: ${request.url}`,"no-redirect")),finalize();return;case"manual":break;case"follow":{if(locationURL===null)break;if(request.counter>=request.follow){reject(new FetchError(`maximum redirect reached at: ${request.url}`,"max-redirect")),finalize();return}let requestOptions={headers:new Headers(request.headers),follow:request.follow,counter:request.counter+1,agent:request.agent,compress:request.compress,method:request.method,body:clone(request),signal:request.signal,size:request.size,referrer:request.referrer,referrerPolicy:request.referrerPolicy};if(!isDomainOrSubdomain(request.url,locationURL)||!isSameProtocol(request.url,locationURL))for(let name of["authorization","www-authenticate","cookie","cookie2"])requestOptions.headers.delete(name);if(response_.statusCode!==303&&request.body&&options_.body instanceof Stream2.Readable){reject(new FetchError("Cannot follow redirect with body being a readable stream","unsupported-redirect")),finalize();return}(response_.statusCode===303||(response_.statusCode===301||response_.statusCode===302)&&request.method==="POST")&&(requestOptions.method="GET",requestOptions.body=void 0,requestOptions.headers.delete("content-length"));let responseReferrerPolicy=parseReferrerPolicyFromHeader(headers);responseReferrerPolicy&&(requestOptions.referrerPolicy=responseReferrerPolicy),resolve(fetch(new Request(locationURL,requestOptions))),finalize();return}default:return reject(new TypeError(`Redirect option '${request.redirect}' is not a valid value of RequestRedirect`))}}signal&&response_.once("end",()=>{signal.removeEventListener("abort",abortAndFinalize)});let body=pump(response_,new PassThrough2,error=>{error&&reject(error)});process.version<"v12.10"&&response_.on("aborted",abortAndFinalize);let responseOptions={url:request.url,status:response_.statusCode,statusText:response_.statusMessage,headers,size:request.size,counter:request.counter,highWaterMark:request.highWaterMark},codings=headers.get("Content-Encoding");if(!request.compress||request.method==="HEAD"||codings===null||response_.statusCode===204||response_.statusCode===304){response=new Response(body,responseOptions),resolve(response);return}let zlibOptions={flush:zlib.Z_SYNC_FLUSH,finishFlush:zlib.Z_SYNC_FLUSH};if(codings==="gzip"||codings==="x-gzip"){body=pump(body,zlib.createGunzip(zlibOptions),error=>{error&&reject(error)}),response=new Response(body,responseOptions),resolve(response);return}if(codings==="deflate"||codings==="x-deflate"){let raw=pump(response_,new PassThrough2,error=>{error&&reject(error)});raw.once("data",chunk=>{(chunk[0]&15)===8?body=pump(body,zlib.createInflate(),error=>{error&&reject(error)}):body=pump(body,zlib.createInflateRaw(),error=>{error&&reject(error)}),response=new Response(body,responseOptions),resolve(response)}),raw.once("end",()=>{response||(response=new Response(body,responseOptions),resolve(response))});return}if(codings==="br"){body=pump(body,zlib.createBrotliDecompress(),error=>{error&&reject(error)}),response=new Response(body,responseOptions),resolve(response);return}response=new Response(body,responseOptions),resolve(response)}),writeToStream(request_,request).catch(reject)})}function fixResponseChunkedTransferBadEnding(request,errorCallback){let LAST_CHUNK=Buffer3.from(`0\r
3
+ \r
4
+ `),isChunkedTransfer=!1,properLastChunkReceived=!1,previousChunk;request.on("response",response=>{let{headers}=response;isChunkedTransfer=headers["transfer-encoding"]==="chunked"&&!headers["content-length"]}),request.on("socket",socket=>{let onSocketClose=()=>{if(isChunkedTransfer&&!properLastChunkReceived){let error=new Error("Premature close");error.code="ERR_STREAM_PREMATURE_CLOSE",errorCallback(error)}},onData=buf=>{properLastChunkReceived=Buffer3.compare(buf.slice(-5),LAST_CHUNK)===0,!properLastChunkReceived&&previousChunk&&(properLastChunkReceived=Buffer3.compare(previousChunk.slice(-3),LAST_CHUNK.slice(0,3))===0&&Buffer3.compare(buf.slice(-2),LAST_CHUNK.slice(3))===0),previousChunk=buf};socket.prependListener("close",onSocketClose),socket.on("data",onData),request.on("close",()=>{socket.removeListener("close",onSocketClose),socket.removeListener("data",onData)})})}var supportedSchemas,init_src=__esm({"node_modules/node-fetch/src/index.js"(){init_dist();init_body();init_response();init_headers();init_request();init_fetch_error();init_abort_error();init_is_redirect();init_esm_min();init_is();init_referrer();init_from();supportedSchemas=new Set(["data:","http:","https:"])}});init_src();export{AbortError,fetch_blob_default as Blob,FetchError,file_default as File,FormData,Headers,Request,Response,blobFrom,blobFromSync,fetch as default,fileFrom,fileFromSync,isRedirect};
@@ -0,0 +1,2 @@
1
+ import { createRequire as __piCreateRequire } from "node:module"; const require = __piCreateRequire(import.meta.url);
2
+ import{classifySystemOne,isRecord}from"./chunk-C47CLQZK.js";import"./chunk-TEPMHNKQ.js";import"./chunk-LD2P6SFZ.js";import"./chunk-UTB4DTYQ.js";import"./chunk-KJUDFE6Y.js";import"./chunk-A3JYRWB6.js";import"./chunk-4L3WN2XY.js";var transport={api:"typesafe-system-one",label:"System One API",url:model=>new URL("systemone",`${model.baseUrl.replace(/\/+$/u,"")}/`),payload:(model,request)=>({model:model.id,...request}),output:body=>{if(!isRecord(body))throw new Error("System One API returned an unexpected response");return body}},classify=(model,context,options)=>classifySystemOne(transport,model,context,options);export{classify};
@@ -0,0 +1,2 @@
1
+ import { createRequire as __piCreateRequire } from "node:module"; const require = __piCreateRequire(import.meta.url);
2
+ import{dist_exports as dist_exports3}from"./chunk-H6S6DQTM.js";import{all_exports,compat_exports,compile_exports,dist_exports as dist_exports2,value_exports}from"./chunk-XSLAMYCK.js";import"./chunk-PTRF7IZB.js";import"./chunk-WMTXXI7H.js";import"./chunk-3XNI2SB6.js";import"./chunk-USJZMAIR.js";import{build_exports}from"./chunk-ISNO4JTR.js";import"./chunk-MP5FU7MG.js";import{dist_exports}from"./chunk-XDAWU2J5.js";import"./chunk-S3GGRYIO.js";import"./chunk-EQ2HXQGJ.js";import"./chunk-DRQDKNXA.js";import"./chunk-TRDNDS6A.js";import"./chunk-KJUDFE6Y.js";import"./chunk-A3JYRWB6.js";import"./chunk-4L3WN2XY.js";var oauth_exports={};var VIRTUAL_MODULES={typebox:build_exports,"typebox/compile":compile_exports,"typebox/value":value_exports,"@sinclair/typebox":build_exports,"@sinclair/typebox/compile":compile_exports,"@sinclair/typebox/value":value_exports,"@relay-harness/agent-core":dist_exports2,"@relay-harness/tui":dist_exports,"@relay-harness/ai":compat_exports,"@relay-harness/ai/compat":compat_exports,"@relay-harness/ai/oauth":oauth_exports,"@relay-harness/ai/providers/all":all_exports,"@relay-harness/coding-agent":dist_exports3,"@mariozechner/pi-agent-core":dist_exports2,"@mariozechner/pi-tui":dist_exports,"@mariozechner/pi-ai":compat_exports,"@mariozechner/pi-ai/compat":compat_exports,"@mariozechner/pi-ai/oauth":oauth_exports,"@mariozechner/pi-ai/providers/all":all_exports,"@mariozechner/pi-coding-agent":dist_exports3};export{VIRTUAL_MODULES};
@@ -0,0 +1,2 @@
1
+ import { createRequire as __piCreateRequire } from "node:module"; const require = __piCreateRequire(import.meta.url);
2
+ var CANCEL_MESSAGE="Login cancelled",TIMEOUT_MESSAGE="Device flow timed out",SLOW_DOWN_TIMEOUT_MESSAGE="Device flow timed out after one or more slow_down responses. This is often caused by clock drift in WSL or VM environments. Please sync or restart the VM clock and try again.";function abortableSleep(ms,signal,cancelMessage){return new Promise((resolve,reject)=>{if(signal.aborted){reject(new Error(cancelMessage));return}let onAbort=()=>{clearTimeout(timeout),reject(new Error(cancelMessage))},timeout=setTimeout(()=>{signal.removeEventListener("abort",onAbort),resolve()},ms);signal.addEventListener("abort",onAbort,{once:!0})})}async function pollOAuthDeviceCodeFlow(options){let deadline=typeof options.expiresInSeconds=="number"?Date.now()+options.expiresInSeconds*1e3:Number.POSITIVE_INFINITY,intervalMs=Math.max(1e3,Math.floor((options.intervalSeconds??5)*1e3)),slowDownResponses=0;if(options.waitBeforeFirstPoll){let remainingMs=deadline-Date.now();remainingMs>0&&await abortableSleep(Math.min(intervalMs,remainingMs),options.signal,CANCEL_MESSAGE)}for(;Date.now()<deadline;){if(options.signal.aborted)throw new Error(CANCEL_MESSAGE);let result=await options.poll();if(result.status==="complete")return result.value;if(result.status==="failed")throw new Error(result.message);result.status==="slow_down"&&(slowDownResponses+=1,intervalMs=typeof result.intervalSeconds=="number"&&Number.isFinite(result.intervalSeconds)&&result.intervalSeconds>0?Math.max(1e3,Math.floor(result.intervalSeconds*1e3)):Math.max(1e3,intervalMs+5e3));let remainingMs=deadline-Date.now();if(remainingMs<=0)break;await abortableSleep(Math.min(intervalMs,remainingMs),options.signal,CANCEL_MESSAGE)}throw new Error(slowDownResponses>0?SLOW_DOWN_TIMEOUT_MESSAGE:TIMEOUT_MESSAGE)}var XAI_CLIENT_ID="b1a00492-073a-47ea-816f-4c329264a828",XAI_SCOPE="openid profile email offline_access grok-cli:access api:access",XAI_DEVICE_CODE_URL="https://auth.x.ai/oauth2/device/code",XAI_TOKEN_URL="https://auth.x.ai/oauth2/token",REFRESH_SKEW_MS=300*1e3,DEFAULT_TOKEN_LIFETIME_SECONDS=3600;function requiredString(body,field){let value=body[field];if(typeof value!="string"||value.length===0)throw new Error(`Invalid xAI OAuth response field: ${field}`);return value}function positiveNumber(body,field){let value=body[field];if(typeof value!="number"||!Number.isFinite(value)||value<=0)throw new Error(`Invalid xAI OAuth response field: ${field}`);return value}function validateVerificationUri(raw){let url;try{url=new URL(raw)}catch{throw new Error("Untrusted verification URI in xAI OAuth response")}if(url.protocol!=="https:")throw new Error("Untrusted verification URI in xAI OAuth response");return url.href}async function postForm(url,fields,signal){let response;try{response=await fetch(url,{method:"POST",headers:{Accept:"application/json","Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams(fields),signal})}catch(error){throw signal.aborted?new Error("Login cancelled"):error}let body;try{let parsed=await response.json();body=parsed&&typeof parsed=="object"&&!Array.isArray(parsed)?parsed:{}}catch{throw signal.aborted?new Error("Login cancelled"):new Error(`xAI OAuth returned invalid JSON (HTTP ${response.status})`)}return{ok:response.ok,status:response.status,body}}function requestFailure(action,response){let error=typeof response.body.error=="string"?response.body.error:void 0,description=typeof response.body.error_description=="string"?response.body.error_description:void 0,detail=[error,description].filter(Boolean).join(": ");return new Error(`xAI OAuth ${action} failed (HTTP ${response.status})${detail?`: ${detail}`:""}`)}function parseDeviceCode(body){let interval=body.interval,intervalSeconds=typeof interval=="number"&&Number.isFinite(interval)&&interval>0?interval:void 0,verificationUriComplete=typeof body.verification_uri_complete=="string"&&body.verification_uri_complete.length>0?validateVerificationUri(body.verification_uri_complete):void 0;return{deviceCode:requiredString(body,"device_code"),userCode:requiredString(body,"user_code"),verificationUri:validateVerificationUri(requiredString(body,"verification_uri")),verificationUriComplete,intervalSeconds,expiresInSeconds:positiveNumber(body,"expires_in")}}function credentialsFromTokenResponse(body,previousRefreshToken){let access=requiredString(body,"access_token"),refresh=body.refresh_token===void 0&&previousRefreshToken?previousRefreshToken:requiredString(body,"refresh_token"),expiresInSeconds=body.expires_in===void 0?DEFAULT_TOKEN_LIFETIME_SECONDS:positiveNumber(body,"expires_in");return{type:"oauth",access,refresh,expires:Date.now()+expiresInSeconds*1e3-REFRESH_SKEW_MS}}async function requestDeviceCode(signal){let response=await postForm(XAI_DEVICE_CODE_URL,{client_id:XAI_CLIENT_ID,scope:XAI_SCOPE,referrer:"pi"},signal);if(!response.ok)throw requestFailure("device authorization",response);return parseDeviceCode(response.body)}async function pollForTokens(device,signal){return pollOAuthDeviceCodeFlow({intervalSeconds:device.intervalSeconds,expiresInSeconds:device.expiresInSeconds,waitBeforeFirstPoll:!0,signal,poll:async()=>{let response=await postForm(XAI_TOKEN_URL,{grant_type:"urn:ietf:params:oauth:grant-type:device_code",client_id:XAI_CLIENT_ID,device_code:device.deviceCode},signal);if(response.ok)return{status:"complete",value:credentialsFromTokenResponse(response.body)};let error=response.body.error;if(error==="authorization_pending")return{status:"pending"};if(error==="slow_down"){let interval=response.body.interval;return{status:"slow_down",intervalSeconds:typeof interval=="number"?interval:void 0}}return error==="access_denied"||error==="authorization_denied"?{status:"failed",message:"xAI device authorization was denied"}:error==="expired_token"?{status:"failed",message:"xAI device code expired"}:{status:"failed",message:requestFailure("device token polling",response).message}}})}async function loginXai(interaction){let device=await requestDeviceCode(interaction.signal);return interaction.notify({type:"device_code",userCode:device.userCode,verificationUri:device.verificationUriComplete??device.verificationUri,intervalSeconds:device.intervalSeconds,expiresInSeconds:device.expiresInSeconds}),pollForTokens(device,interaction.signal)}async function refreshXaiToken(refreshToken,signal){let response=await postForm(XAI_TOKEN_URL,{grant_type:"refresh_token",client_id:XAI_CLIENT_ID,refresh_token:refreshToken},signal);if(!response.ok)throw requestFailure("token refresh",response);return credentialsFromTokenResponse(response.body,refreshToken)}var xaiOAuth={name:"xAI (Grok/X subscription)",isSubscription:!0,loginLabel:"Sign in with SuperGrok or X Premium",login:loginXai,refresh:(credential,signal)=>refreshXaiToken(credential.refresh,signal),async toAuth(credential){return{apiKey:credential.access}}};export{xaiOAuth};
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ import { createRequire as __piCreateRequire } from "node:module"; const require = __piCreateRequire(import.meta.url);
3
+ import{configureHttpDispatcher,main}from"./chunks/chunk-XSLAMYCK.js";import"./chunks/chunk-PTRF7IZB.js";import"./chunks/chunk-WMTXXI7H.js";import"./chunks/chunk-3XNI2SB6.js";import"./chunks/chunk-USJZMAIR.js";import"./chunks/chunk-ISNO4JTR.js";import"./chunks/chunk-MP5FU7MG.js";import{APP_NAME}from"./chunks/chunk-XDAWU2J5.js";import"./chunks/chunk-S3GGRYIO.js";import"./chunks/chunk-EQ2HXQGJ.js";import"./chunks/chunk-DRQDKNXA.js";import"./chunks/chunk-TRDNDS6A.js";import"./chunks/chunk-KJUDFE6Y.js";import"./chunks/chunk-A3JYRWB6.js";import"./chunks/chunk-4L3WN2XY.js";function setupCli(){process.title=APP_NAME,process.env.RELAY_CODING_AGENT="true",process.env.AI_AGENT="relay",process.emitWarning=(()=>{}),configureHttpDispatcher()}setupCli();main(process.argv.slice(2));
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env node
2
+ import { createRequire, enableCompileCache } from "node:module";
3
+
4
+ enableCompileCache();
5
+ createRequire(import.meta.url)("./cli-runtime.js");
@@ -0,0 +1,2 @@
1
+ import { createRequire as __piCreateRequire } from "node:module"; const require = __piCreateRequire(import.meta.url);
2
+ import{ShowImagesSelectorComponent,ThemeSelectorComponent}from"./chunks/chunk-H6S6DQTM.js";import{AgentSession,AgentSessionRuntime,AssistantMessageComponent,BashExecutionComponent,BorderedLoader,BranchSummaryMessageComponent,CURRENT_SESSION_VERSION,CompactionSummaryMessageComponent,CredentialSynchronizationError,CustomEditor,CustomMessageComponent,DEFAULT_COMPACTION_SETTINGS,DefaultPackageManager,DefaultResourceLoader,DynamicBorder,ExtensionEditorComponent,ExtensionInputComponent,ExtensionRunner,ExtensionSelectorComponent,FooterComponent,InteractiveMode,LoginDialogComponent,ModelRegistry,ModelRuntime,ModelSelectorComponent,OAuthSelectorComponent,RpcClient,SessionManager,SessionSelectorComponent,SettingsManager,SettingsSelectorComponent,SkillInvocationMessageComponent,ThinkingSelectorComponent,ToolExecutionComponent,TreeSelectorComponent,UserMessageComponent,UserMessageSelectorComponent,VIRTUAL_MODEL_STATE_ENTRY,buildContextEntries,buildSessionContext,buildSessionProjection,calculateContextTokens,collectEntriesForBranchSummary,compact,convertToLlm,convertToPng,copyToClipboard,createAgentSession,createAgentSessionFromServices,createAgentSessionRuntime,createAgentSessionServices,createBashTool,createBashToolDefinition,createCodemodeExtension,createCodingTools,createEditTool,createEditToolDefinition,createEventBus,createExtensionRuntime,createFindTool,createFindToolDefinition,createGrepTool,createGrepToolDefinition,createLocalBashOperations,createLocalPowerShellOperations,createLsTool,createLsToolDefinition,createMcpExtension,createPowerShellTool,createPowerShellToolDefinition,createReadOnlyTools,createReadTool,createReadToolDefinition,createSyntheticSourceInfo,createToolSearchExtension,createWriteTool,createWriteToolDefinition,defineTool,detectSupportedImageMimeTypeFromFile,discoverAndLoadExtensions,estimateTokens,findCutPoint,findTurnStartIndex,formatDimensionNote,formatSkillsForPrompt,generateBranchSummary,generateDiffString,generateSummary,generateSummaryWithUsage,generateUnifiedPatch,getLastAssistantUsage,getLatestCompactionEntry,isBashToolResult,isEditToolResult,isFindToolResult,isGrepToolResult,isLsToolResult,isPowerShellToolResult,isReadToolResult,isToolCallEventType,isWriteToolResult,loadProjectContextFiles,loadSkills,loadSkillsFromDir,main,migrateSessionEntries,parseArgs,parseFrontmatter,parseSessionEntries,parseSkillBlock,prepareBranchEntries,renderDiff,resizeImage,resolveCliModel,resolveModelScopeWithDiagnostics,runPrintMode,runRpcMode,serializeConversation,sessionEntryToContextMessages,shouldCompact,stripFrontmatter,withFileMutationQueue,wrapRegisteredTool,wrapRegisteredTools}from"./chunks/chunk-XSLAMYCK.js";import{ArminComponent}from"./chunks/chunk-PTRF7IZB.js";import{ProjectTrustStore,hasTrustRequiringProjectResources}from"./chunks/chunk-WMTXXI7H.js";import{readStoredCredential}from"./chunks/chunk-3XNI2SB6.js";import"./chunks/chunk-USJZMAIR.js";import"./chunks/chunk-ISNO4JTR.js";import{DEFAULT_MAX_BYTES,DEFAULT_MAX_LINES,formatSize,getPowerShellConfig,getShellConfig,truncateHead,truncateLine,truncateTail,truncateToVisualLines}from"./chunks/chunk-MP5FU7MG.js";import{CONFIG_DIR_NAME,Theme,VERSION,getAgentDir,getDocsPath,getExamplesPath,getLanguageFromPath,getMarkdownTheme,getPackageDir,getReadmePath,getSelectListTheme,getSettingsListTheme,highlightCode,initTheme,keyHint,keyText,rawKeyHint}from"./chunks/chunk-XDAWU2J5.js";import"./chunks/chunk-S3GGRYIO.js";import"./chunks/chunk-EQ2HXQGJ.js";import"./chunks/chunk-DRQDKNXA.js";import"./chunks/chunk-TRDNDS6A.js";import"./chunks/chunk-KJUDFE6Y.js";import"./chunks/chunk-A3JYRWB6.js";import"./chunks/chunk-4L3WN2XY.js";export{AgentSession,AgentSessionRuntime,ArminComponent,AssistantMessageComponent,BashExecutionComponent,BorderedLoader,BranchSummaryMessageComponent,CONFIG_DIR_NAME,CURRENT_SESSION_VERSION,CompactionSummaryMessageComponent,CredentialSynchronizationError,CustomEditor,CustomMessageComponent,DEFAULT_COMPACTION_SETTINGS,DEFAULT_MAX_BYTES,DEFAULT_MAX_LINES,DefaultPackageManager,DefaultResourceLoader,DynamicBorder,ExtensionEditorComponent,ExtensionInputComponent,ExtensionRunner,ExtensionSelectorComponent,FooterComponent,InteractiveMode,LoginDialogComponent,ModelRegistry,ModelRuntime,ModelSelectorComponent,OAuthSelectorComponent,ProjectTrustStore,RpcClient,SessionManager,SessionSelectorComponent,SettingsManager,SettingsSelectorComponent,ShowImagesSelectorComponent,SkillInvocationMessageComponent,Theme,ThemeSelectorComponent,ThinkingSelectorComponent,ToolExecutionComponent,TreeSelectorComponent,UserMessageComponent,UserMessageSelectorComponent,VERSION,VIRTUAL_MODEL_STATE_ENTRY,buildContextEntries,buildSessionContext,buildSessionProjection,calculateContextTokens,collectEntriesForBranchSummary,compact,convertToLlm,convertToPng,copyToClipboard,createAgentSession,createAgentSessionFromServices,createAgentSessionRuntime,createAgentSessionServices,createBashTool,createBashToolDefinition,createCodemodeExtension,createCodingTools,createEditTool,createEditToolDefinition,createEventBus,createExtensionRuntime,createFindTool,createFindToolDefinition,createGrepTool,createGrepToolDefinition,createLocalBashOperations,createLocalPowerShellOperations,createLsTool,createLsToolDefinition,createMcpExtension,createPowerShellTool,createPowerShellToolDefinition,createReadOnlyTools,createReadTool,createReadToolDefinition,createSyntheticSourceInfo,createToolSearchExtension,createWriteTool,createWriteToolDefinition,defineTool,detectSupportedImageMimeTypeFromFile,discoverAndLoadExtensions,estimateTokens,findCutPoint,findTurnStartIndex,formatDimensionNote,formatSize,formatSkillsForPrompt,generateBranchSummary,generateDiffString,generateSummary,generateSummaryWithUsage,generateUnifiedPatch,getAgentDir,getDocsPath,getExamplesPath,getLanguageFromPath,getLastAssistantUsage,getLatestCompactionEntry,getMarkdownTheme,getPackageDir,getPowerShellConfig,getReadmePath,getSelectListTheme,getSettingsListTheme,getShellConfig,hasTrustRequiringProjectResources,highlightCode,initTheme,isBashToolResult,isEditToolResult,isFindToolResult,isGrepToolResult,isLsToolResult,isPowerShellToolResult,isReadToolResult,isToolCallEventType,isWriteToolResult,keyHint,keyText,loadProjectContextFiles,loadSkills,loadSkillsFromDir,main,migrateSessionEntries,parseArgs,parseFrontmatter,parseSessionEntries,parseSkillBlock,prepareBranchEntries,rawKeyHint,readStoredCredential,renderDiff,resizeImage,resolveCliModel,resolveModelScopeWithDiagnostics,runPrintMode,runRpcMode,serializeConversation,sessionEntryToContextMessages,shouldCompact,stripFrontmatter,truncateHead,truncateLine,truncateTail,truncateToVisualLines,withFileMutationQueue,wrapRegisteredTool,wrapRegisteredTools};
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ import { createRequire as __piCreateRequire } from "node:module"; const require = __piCreateRequire(import.meta.url);
3
+ import{configureHttpDispatcher,main}from"./chunks/chunk-XSLAMYCK.js";import"./chunks/chunk-PTRF7IZB.js";import"./chunks/chunk-WMTXXI7H.js";import"./chunks/chunk-3XNI2SB6.js";import"./chunks/chunk-USJZMAIR.js";import"./chunks/chunk-ISNO4JTR.js";import"./chunks/chunk-MP5FU7MG.js";import{APP_NAME}from"./chunks/chunk-XDAWU2J5.js";import"./chunks/chunk-S3GGRYIO.js";import"./chunks/chunk-EQ2HXQGJ.js";import"./chunks/chunk-DRQDKNXA.js";import"./chunks/chunk-TRDNDS6A.js";import"./chunks/chunk-KJUDFE6Y.js";import"./chunks/chunk-A3JYRWB6.js";import"./chunks/chunk-4L3WN2XY.js";process.title=`${APP_NAME}-rpc`;process.env.RELAY_CODING_AGENT="true";process.env.AI_AGENT="relay";process.emitWarning=(()=>{});configureHttpDispatcher();main(["--mode","rpc",...process.argv.slice(2)]);
@@ -0,0 +1,61 @@
1
+ /**
2
+ * CLI argument parsing and help display
3
+ */
4
+ import type { ThinkingLevel } from "@relay-harness/agent-core";
5
+ import type { ExtensionFlag } from "../core/extensions/types.ts";
6
+ import type { TuiMode } from "../core/settings-manager.ts";
7
+ export type Mode = "text" | "json" | "rpc";
8
+ export interface Args {
9
+ provider?: string;
10
+ model?: string;
11
+ apiKey?: string;
12
+ systemPrompt?: string;
13
+ appendSystemPrompt?: string[];
14
+ thinking?: ThinkingLevel;
15
+ continue?: boolean;
16
+ resume?: boolean;
17
+ help?: boolean;
18
+ version?: boolean;
19
+ mode?: Mode;
20
+ name?: string;
21
+ noSession?: boolean;
22
+ session?: string;
23
+ sessionId?: string;
24
+ fork?: string;
25
+ sessionDir?: string;
26
+ models?: string[];
27
+ tools?: string[];
28
+ excludeTools?: string[];
29
+ noTools?: boolean;
30
+ noBuiltinTools?: boolean;
31
+ extensions?: string[];
32
+ noExtensions?: boolean;
33
+ print?: boolean;
34
+ export?: string;
35
+ noSkills?: boolean;
36
+ skills?: string[];
37
+ promptTemplates?: string[];
38
+ noPromptTemplates?: boolean;
39
+ themes?: string[];
40
+ useTheme?: string;
41
+ noThemes?: boolean;
42
+ noContextFiles?: boolean;
43
+ listModels?: string | true;
44
+ offline?: boolean;
45
+ tuiMode?: TuiMode;
46
+ verbose?: boolean;
47
+ projectTrustOverride?: boolean;
48
+ messages: string[];
49
+ fileArgs: string[];
50
+ /** Unknown flags (potentially extension flags) - map of flag name to value */
51
+ unknownFlags: Map<string, boolean | string>;
52
+ diagnostics: Array<{
53
+ type: "warning" | "error";
54
+ message: string;
55
+ }>;
56
+ }
57
+ export declare function isValidThinkingLevel(level: string): level is ThinkingLevel;
58
+ export declare function normalizeSessionName(value: string): string | undefined;
59
+ export declare function parseArgs(args: string[]): Args;
60
+ export declare function printHelp(extensionFlags?: ExtensionFlag[]): void;
61
+ //# sourceMappingURL=args.d.ts.map