@draht/ai 2026.7.13 → 2026.9.5-1

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 (524) hide show
  1. package/dist/api/anthropic-messages.d.ts.map +1 -1
  2. package/dist/api/anthropic-messages.js +144 -65
  3. package/dist/api/anthropic-messages.js.map +1 -1
  4. package/dist/api/azure-openai-responses.d.ts.map +1 -1
  5. package/dist/api/azure-openai-responses.js +28 -10
  6. package/dist/api/azure-openai-responses.js.map +1 -1
  7. package/dist/api/bedrock-converse-stream.d.ts.map +1 -1
  8. package/dist/api/bedrock-converse-stream.js +70 -25
  9. package/dist/api/bedrock-converse-stream.js.map +1 -1
  10. package/dist/api/constrained-sampling.d.ts +17 -0
  11. package/dist/api/constrained-sampling.d.ts.map +1 -0
  12. package/dist/api/constrained-sampling.js +100 -0
  13. package/dist/api/constrained-sampling.js.map +1 -0
  14. package/dist/api/google-generative-ai.d.ts +2 -2
  15. package/dist/api/google-generative-ai.d.ts.map +1 -1
  16. package/dist/api/google-generative-ai.js +37 -27
  17. package/dist/api/google-generative-ai.js.map +1 -1
  18. package/dist/api/google-shared.d.ts +19 -5
  19. package/dist/api/google-shared.d.ts.map +1 -1
  20. package/dist/api/google-shared.js +77 -10
  21. package/dist/api/google-shared.js.map +1 -1
  22. package/dist/api/google-vertex.d.ts +2 -2
  23. package/dist/api/google-vertex.d.ts.map +1 -1
  24. package/dist/api/google-vertex.js +35 -25
  25. package/dist/api/google-vertex.js.map +1 -1
  26. package/dist/api/lazy.d.ts.map +1 -1
  27. package/dist/api/lazy.js +9 -10
  28. package/dist/api/lazy.js.map +1 -1
  29. package/dist/api/mistral-conversations.d.ts.map +1 -1
  30. package/dist/api/mistral-conversations.js +38 -21
  31. package/dist/api/mistral-conversations.js.map +1 -1
  32. package/dist/api/openai-codex-responses.d.ts +1 -0
  33. package/dist/api/openai-codex-responses.d.ts.map +1 -1
  34. package/dist/api/openai-codex-responses.js +136 -68
  35. package/dist/api/openai-codex-responses.js.map +1 -1
  36. package/dist/api/openai-completions.d.ts +8 -8
  37. package/dist/api/openai-completions.d.ts.map +1 -1
  38. package/dist/api/openai-completions.js +230 -54
  39. package/dist/api/openai-completions.js.map +1 -1
  40. package/dist/api/openai-responses-shared.d.ts +8 -1
  41. package/dist/api/openai-responses-shared.d.ts.map +1 -1
  42. package/dist/api/openai-responses-shared.js +233 -67
  43. package/dist/api/openai-responses-shared.js.map +1 -1
  44. package/dist/api/openai-responses.d.ts +1 -0
  45. package/dist/api/openai-responses.d.ts.map +1 -1
  46. package/dist/api/openai-responses.js +66 -18
  47. package/dist/api/openai-responses.js.map +1 -1
  48. package/dist/api/openrouter-images.d.ts.map +1 -1
  49. package/dist/api/openrouter-images.js +11 -5
  50. package/dist/api/openrouter-images.js.map +1 -1
  51. package/dist/api/pi-messages.d.ts +97 -0
  52. package/dist/api/pi-messages.d.ts.map +1 -0
  53. package/dist/api/pi-messages.js +305 -0
  54. package/dist/api/pi-messages.js.map +1 -0
  55. package/dist/api/pi-messages.lazy.d.ts +3 -0
  56. package/dist/api/pi-messages.lazy.d.ts.map +1 -0
  57. package/dist/api/pi-messages.lazy.js +3 -0
  58. package/dist/api/pi-messages.lazy.js.map +1 -0
  59. package/dist/api/simple-options.d.ts.map +1 -1
  60. package/dist/api/simple-options.js +1 -0
  61. package/dist/api/simple-options.js.map +1 -1
  62. package/dist/auth/credential-store.d.ts +2 -1
  63. package/dist/auth/credential-store.d.ts.map +1 -1
  64. package/dist/auth/credential-store.js +3 -0
  65. package/dist/auth/credential-store.js.map +1 -1
  66. package/dist/auth/helpers.d.ts +1 -0
  67. package/dist/auth/helpers.d.ts.map +1 -1
  68. package/dist/auth/helpers.js +7 -5
  69. package/dist/auth/helpers.js.map +1 -1
  70. package/dist/auth/oauth/anthropic.d.ts +9 -0
  71. package/dist/auth/oauth/anthropic.d.ts.map +1 -0
  72. package/dist/{utils → auth}/oauth/anthropic.js +51 -116
  73. package/dist/auth/oauth/anthropic.js.map +1 -0
  74. package/dist/auth/oauth/device-code.d.ts.map +1 -0
  75. package/dist/auth/oauth/device-code.js.map +1 -0
  76. package/dist/auth/oauth/github-copilot.d.ts +6 -0
  77. package/dist/auth/oauth/github-copilot.d.ts.map +1 -0
  78. package/dist/{utils → auth}/oauth/github-copilot.js +124 -107
  79. package/dist/auth/oauth/github-copilot.js.map +1 -0
  80. package/dist/auth/oauth/google-antigravity.d.ts +21 -0
  81. package/dist/auth/oauth/google-antigravity.d.ts.map +1 -0
  82. package/dist/{utils → auth}/oauth/google-antigravity.js +79 -79
  83. package/dist/auth/oauth/google-antigravity.js.map +1 -0
  84. package/dist/auth/oauth/google-gemini-cli.d.ts +21 -0
  85. package/dist/auth/oauth/google-gemini-cli.d.ts.map +1 -0
  86. package/dist/{utils → auth}/oauth/google-gemini-cli.js +79 -79
  87. package/dist/auth/oauth/google-gemini-cli.js.map +1 -0
  88. package/dist/auth/oauth/kimi-coding.d.ts +10 -0
  89. package/dist/auth/oauth/kimi-coding.d.ts.map +1 -0
  90. package/dist/auth/oauth/kimi-coding.js +249 -0
  91. package/dist/auth/oauth/kimi-coding.js.map +1 -0
  92. package/dist/auth/oauth/load.d.ts +33 -0
  93. package/dist/auth/oauth/load.d.ts.map +1 -0
  94. package/dist/auth/oauth/load.js +74 -0
  95. package/dist/auth/oauth/load.js.map +1 -0
  96. package/dist/auth/oauth/oauth-page.d.ts.map +1 -0
  97. package/dist/auth/oauth/oauth-page.js.map +1 -0
  98. package/dist/auth/oauth/openai-codex.d.ts +9 -0
  99. package/dist/auth/oauth/openai-codex.d.ts.map +1 -0
  100. package/dist/{utils → auth}/oauth/openai-codex.js +61 -155
  101. package/dist/auth/oauth/openai-codex.js.map +1 -0
  102. package/dist/auth/oauth/opencode-go.d.ts +14 -0
  103. package/dist/auth/oauth/opencode-go.d.ts.map +1 -0
  104. package/dist/auth/oauth/opencode-go.js +41 -0
  105. package/dist/auth/oauth/opencode-go.js.map +1 -0
  106. package/dist/auth/oauth/openrouter.d.ts +15 -0
  107. package/dist/auth/oauth/openrouter.d.ts.map +1 -0
  108. package/dist/auth/oauth/openrouter.js +277 -0
  109. package/dist/auth/oauth/openrouter.js.map +1 -0
  110. package/dist/auth/oauth/pkce.d.ts.map +1 -0
  111. package/dist/auth/oauth/pkce.js.map +1 -0
  112. package/dist/auth/oauth/radius.d.ts +17 -0
  113. package/dist/auth/oauth/radius.d.ts.map +1 -0
  114. package/dist/auth/oauth/radius.js +318 -0
  115. package/dist/auth/oauth/radius.js.map +1 -0
  116. package/dist/auth/oauth/xai.d.ts +17 -0
  117. package/dist/auth/oauth/xai.d.ts.map +1 -0
  118. package/dist/{utils → auth}/oauth/xai.js +54 -89
  119. package/dist/auth/oauth/xai.js.map +1 -0
  120. package/dist/auth/resolve.d.ts +4 -4
  121. package/dist/auth/resolve.d.ts.map +1 -1
  122. package/dist/auth/resolve.js +38 -17
  123. package/dist/auth/resolve.js.map +1 -1
  124. package/dist/auth/types.d.ts +49 -10
  125. package/dist/auth/types.d.ts.map +1 -1
  126. package/dist/auth/types.js.map +1 -1
  127. package/dist/bun-oauth.d.ts +3 -0
  128. package/dist/bun-oauth.d.ts.map +1 -0
  129. package/dist/bun-oauth.js +27 -0
  130. package/dist/bun-oauth.js.map +1 -0
  131. package/dist/cli.js +58 -76
  132. package/dist/cli.js.map +1 -1
  133. package/dist/compat/extension-oauth-types.d.ts +39 -0
  134. package/dist/compat/extension-oauth-types.d.ts.map +1 -0
  135. package/dist/compat/extension-oauth-types.js +2 -0
  136. package/dist/compat/extension-oauth-types.js.map +1 -0
  137. package/dist/compat.d.ts +2 -0
  138. package/dist/compat.d.ts.map +1 -1
  139. package/dist/compat.js +25 -8
  140. package/dist/compat.js.map +1 -1
  141. package/dist/env-api-keys.d.ts +3 -0
  142. package/dist/env-api-keys.d.ts.map +1 -1
  143. package/dist/env-api-keys.js +12 -3
  144. package/dist/env-api-keys.js.map +1 -1
  145. package/dist/image-models.generated.d.ts +75 -0
  146. package/dist/image-models.generated.d.ts.map +1 -1
  147. package/dist/image-models.generated.js +251 -176
  148. package/dist/image-models.generated.js.map +1 -1
  149. package/dist/images-models.d.ts +4 -2
  150. package/dist/images-models.d.ts.map +1 -1
  151. package/dist/images-models.js +5 -4
  152. package/dist/images-models.js.map +1 -1
  153. package/dist/index.d.ts +6 -2
  154. package/dist/index.d.ts.map +1 -1
  155. package/dist/index.js +3 -0
  156. package/dist/index.js.map +1 -1
  157. package/dist/model-catalog.d.ts +17 -0
  158. package/dist/model-catalog.d.ts.map +1 -0
  159. package/dist/model-catalog.js +4 -0
  160. package/dist/model-catalog.js.map +1 -0
  161. package/dist/models-store.d.ts +32 -0
  162. package/dist/models-store.d.ts.map +1 -0
  163. package/dist/models-store.js +16 -0
  164. package/dist/models-store.js.map +1 -0
  165. package/dist/models.d.ts +66 -30
  166. package/dist/models.d.ts.map +1 -1
  167. package/dist/models.generated.d.ts +74 -22035
  168. package/dist/models.generated.d.ts.map +1 -1
  169. package/dist/models.generated.js +4 -0
  170. package/dist/models.generated.js.map +1 -1
  171. package/dist/models.js +213 -29
  172. package/dist/models.js.map +1 -1
  173. package/dist/oauth.d.ts +2 -1
  174. package/dist/oauth.d.ts.map +1 -1
  175. package/dist/oauth.js +1 -1
  176. package/dist/oauth.js.map +1 -1
  177. package/dist/providers/all.d.ts +13 -6
  178. package/dist/providers/all.d.ts.map +1 -1
  179. package/dist/providers/all.js +13 -0
  180. package/dist/providers/all.js.map +1 -1
  181. package/dist/providers/amazon-bedrock.d.ts.map +1 -1
  182. package/dist/providers/amazon-bedrock.js +54 -8
  183. package/dist/providers/amazon-bedrock.js.map +1 -1
  184. package/dist/providers/amazon-bedrock.models.d.ts +3 -1931
  185. package/dist/providers/amazon-bedrock.models.d.ts.map +1 -1
  186. package/dist/providers/amazon-bedrock.models.js +3 -1838
  187. package/dist/providers/amazon-bedrock.models.js.map +1 -1
  188. package/dist/providers/ant-ling.models.d.ts +3 -85
  189. package/dist/providers/ant-ling.models.d.ts.map +1 -1
  190. package/dist/providers/ant-ling.models.js +3 -57
  191. package/dist/providers/ant-ling.models.js.map +1 -1
  192. package/dist/providers/anthropic.d.ts.map +1 -1
  193. package/dist/providers/anthropic.js +31 -4
  194. package/dist/providers/anthropic.js.map +1 -1
  195. package/dist/providers/anthropic.models.d.ts +3 -283
  196. package/dist/providers/anthropic.models.d.ts.map +1 -1
  197. package/dist/providers/anthropic.models.js +3 -252
  198. package/dist/providers/anthropic.models.js.map +1 -1
  199. package/dist/providers/azure-openai-responses.models.d.ts +3 -886
  200. package/dist/providers/azure-openai-responses.models.d.ts.map +1 -1
  201. package/dist/providers/azure-openai-responses.models.js +3 -811
  202. package/dist/providers/azure-openai-responses.models.js.map +1 -1
  203. package/dist/providers/cerebras.models.d.ts +3 -65
  204. package/dist/providers/cerebras.models.d.ts.map +1 -1
  205. package/dist/providers/cerebras.models.js +3 -56
  206. package/dist/providers/cerebras.models.js.map +1 -1
  207. package/dist/providers/cloudflare-ai-gateway.d.ts.map +1 -1
  208. package/dist/providers/cloudflare-ai-gateway.js +4 -3
  209. package/dist/providers/cloudflare-ai-gateway.js.map +1 -1
  210. package/dist/providers/cloudflare-ai-gateway.models.d.ts +3 -795
  211. package/dist/providers/cloudflare-ai-gateway.models.d.ts.map +1 -1
  212. package/dist/providers/cloudflare-ai-gateway.models.js +3 -683
  213. package/dist/providers/cloudflare-ai-gateway.models.js.map +1 -1
  214. package/dist/providers/cloudflare-auth.d.ts.map +1 -1
  215. package/dist/providers/cloudflare-auth.js +22 -26
  216. package/dist/providers/cloudflare-auth.js.map +1 -1
  217. package/dist/providers/cloudflare-stream.d.ts +8 -0
  218. package/dist/providers/cloudflare-stream.d.ts.map +1 -0
  219. package/dist/providers/cloudflare-stream.js +21 -0
  220. package/dist/providers/cloudflare-stream.js.map +1 -0
  221. package/dist/providers/cloudflare-workers-ai.d.ts.map +1 -1
  222. package/dist/providers/cloudflare-workers-ai.js +2 -1
  223. package/dist/providers/cloudflare-workers-ai.js.map +1 -1
  224. package/dist/providers/cloudflare-workers-ai.models.d.ts +3 -301
  225. package/dist/providers/cloudflare-workers-ai.models.d.ts.map +1 -1
  226. package/dist/providers/cloudflare-workers-ai.models.js +3 -236
  227. package/dist/providers/cloudflare-workers-ai.models.js.map +1 -1
  228. package/dist/providers/data/.manifest.json +1 -0
  229. package/dist/providers/data/amazon-bedrock.json +1 -0
  230. package/dist/providers/data/ant-ling.json +1 -0
  231. package/dist/providers/data/anthropic.json +1 -0
  232. package/dist/providers/data/azure-openai-responses.json +1 -0
  233. package/dist/providers/data/cerebras.json +1 -0
  234. package/dist/providers/data/cloudflare-ai-gateway.json +1 -0
  235. package/dist/providers/data/cloudflare-workers-ai.json +1 -0
  236. package/dist/providers/data/deepseek.json +1 -0
  237. package/dist/providers/data/fireworks.json +1 -0
  238. package/dist/providers/data/github-copilot.json +1 -0
  239. package/dist/providers/data/google-vertex.json +1 -0
  240. package/dist/providers/data/google.json +1 -0
  241. package/dist/providers/data/groq.json +1 -0
  242. package/dist/providers/data/huggingface.json +1 -0
  243. package/dist/providers/data/kimi-coding.json +1 -0
  244. package/dist/providers/data/minimax-cn.json +1 -0
  245. package/dist/providers/data/minimax.json +1 -0
  246. package/dist/providers/data/mistral.json +1 -0
  247. package/dist/providers/data/moonshotai-cn.json +1 -0
  248. package/dist/providers/data/moonshotai.json +1 -0
  249. package/dist/providers/data/nvidia.json +1 -0
  250. package/dist/providers/data/openai-codex.json +1 -0
  251. package/dist/providers/data/openai.json +1 -0
  252. package/dist/providers/data/opencode-go.json +1 -0
  253. package/dist/providers/data/opencode.json +1 -0
  254. package/dist/providers/data/openrouter.json +1 -0
  255. package/dist/providers/data/qwen-token-plan-cn.json +1 -0
  256. package/dist/providers/data/qwen-token-plan.json +1 -0
  257. package/dist/providers/data/together.json +1 -0
  258. package/dist/providers/data/vercel-ai-gateway.json +1 -0
  259. package/dist/providers/data/xai.json +1 -0
  260. package/dist/providers/data/xiaomi-token-plan-ams.json +1 -0
  261. package/dist/providers/data/xiaomi-token-plan-cn.json +1 -0
  262. package/dist/providers/data/xiaomi-token-plan-sgp.json +1 -0
  263. package/dist/providers/data/xiaomi.json +1 -0
  264. package/dist/providers/data/zai-coding-cn.json +1 -0
  265. package/dist/providers/data/zai.json +1 -0
  266. package/dist/providers/deepseek.models.d.ts +3 -62
  267. package/dist/providers/deepseek.models.d.ts.map +1 -1
  268. package/dist/providers/deepseek.models.js +3 -40
  269. package/dist/providers/deepseek.models.js.map +1 -1
  270. package/dist/providers/faux.d.ts.map +1 -1
  271. package/dist/providers/faux.js +4 -1
  272. package/dist/providers/faux.js.map +1 -1
  273. package/dist/providers/fireworks.models.d.ts +3 -380
  274. package/dist/providers/fireworks.models.d.ts.map +1 -1
  275. package/dist/providers/fireworks.models.js +3 -292
  276. package/dist/providers/fireworks.models.js.map +1 -1
  277. package/dist/providers/github-copilot.d.ts.map +1 -1
  278. package/dist/providers/github-copilot.js +11 -1
  279. package/dist/providers/github-copilot.js.map +1 -1
  280. package/dist/providers/github-copilot.models.d.ts +3 -790
  281. package/dist/providers/github-copilot.models.d.ts.map +1 -1
  282. package/dist/providers/github-copilot.models.js +3 -538
  283. package/dist/providers/github-copilot.models.js.map +1 -1
  284. package/dist/providers/google-vertex.d.ts.map +1 -1
  285. package/dist/providers/google-vertex.js +56 -5
  286. package/dist/providers/google-vertex.js.map +1 -1
  287. package/dist/providers/google-vertex.models.d.ts +3 -201
  288. package/dist/providers/google-vertex.models.d.ts.map +1 -1
  289. package/dist/providers/google-vertex.models.js +3 -179
  290. package/dist/providers/google-vertex.models.js.map +1 -1
  291. package/dist/providers/google.models.d.ts +3 -327
  292. package/dist/providers/google.models.d.ts.map +1 -1
  293. package/dist/providers/google.models.js +3 -285
  294. package/dist/providers/google.models.js.map +1 -1
  295. package/dist/providers/groq.models.d.ts +3 -127
  296. package/dist/providers/groq.models.d.ts.map +1 -1
  297. package/dist/providers/groq.models.js +3 -122
  298. package/dist/providers/groq.models.js.map +1 -1
  299. package/dist/providers/huggingface.models.d.ts +3 -982
  300. package/dist/providers/huggingface.models.d.ts.map +1 -1
  301. package/dist/providers/huggingface.models.js +3 -884
  302. package/dist/providers/huggingface.models.js.map +1 -1
  303. package/dist/providers/kimi-coding.d.ts.map +1 -1
  304. package/dist/providers/kimi-coding.js +10 -2
  305. package/dist/providers/kimi-coding.js.map +1 -1
  306. package/dist/providers/kimi-coding.models.d.ts +3 -62
  307. package/dist/providers/kimi-coding.models.d.ts.map +1 -1
  308. package/dist/providers/kimi-coding.models.js +3 -56
  309. package/dist/providers/kimi-coding.models.js.map +1 -1
  310. package/dist/providers/minimax-cn.models.d.ts +3 -53
  311. package/dist/providers/minimax-cn.models.d.ts.map +1 -1
  312. package/dist/providers/minimax-cn.models.js +3 -53
  313. package/dist/providers/minimax-cn.models.js.map +1 -1
  314. package/dist/providers/minimax.models.d.ts +3 -53
  315. package/dist/providers/minimax.models.d.ts.map +1 -1
  316. package/dist/providers/minimax.models.js +3 -53
  317. package/dist/providers/minimax.models.js.map +1 -1
  318. package/dist/providers/mistral.models.d.ts +3 -512
  319. package/dist/providers/mistral.models.d.ts.map +1 -1
  320. package/dist/providers/mistral.models.js +3 -512
  321. package/dist/providers/mistral.models.js.map +1 -1
  322. package/dist/providers/moonshotai-cn.models.d.ts +3 -233
  323. package/dist/providers/moonshotai-cn.models.d.ts.map +1 -1
  324. package/dist/providers/moonshotai-cn.models.js +3 -166
  325. package/dist/providers/moonshotai-cn.models.js.map +1 -1
  326. package/dist/providers/moonshotai.models.d.ts +3 -233
  327. package/dist/providers/moonshotai.models.d.ts.map +1 -1
  328. package/dist/providers/moonshotai.models.js +3 -166
  329. package/dist/providers/moonshotai.models.js.map +1 -1
  330. package/dist/providers/nvidia.models.d.ts +3 -562
  331. package/dist/providers/nvidia.models.d.ts.map +1 -1
  332. package/dist/providers/nvidia.models.js +3 -382
  333. package/dist/providers/nvidia.models.js.map +1 -1
  334. package/dist/providers/openai-codex.d.ts.map +1 -1
  335. package/dist/providers/openai-codex.js +1 -1
  336. package/dist/providers/openai-codex.js.map +1 -1
  337. package/dist/providers/openai-codex.models.d.ts +3 -187
  338. package/dist/providers/openai-codex.models.d.ts.map +1 -1
  339. package/dist/providers/openai-codex.models.js +3 -133
  340. package/dist/providers/openai-codex.models.js.map +1 -1
  341. package/dist/providers/openai.models.d.ts +3 -936
  342. package/dist/providers/openai.models.d.ts.map +1 -1
  343. package/dist/providers/openai.models.js +3 -818
  344. package/dist/providers/openai.models.js.map +1 -1
  345. package/dist/providers/opencode-go.d.ts +1 -1
  346. package/dist/providers/opencode-go.d.ts.map +1 -1
  347. package/dist/providers/opencode-go.js +15 -3
  348. package/dist/providers/opencode-go.js.map +1 -1
  349. package/dist/providers/opencode-go.models.d.ts +3 -308
  350. package/dist/providers/opencode-go.models.d.ts.map +1 -1
  351. package/dist/providers/opencode-go.models.js +3 -237
  352. package/dist/providers/opencode-go.models.js.map +1 -1
  353. package/dist/providers/opencode.models.d.ts +3 -1183
  354. package/dist/providers/opencode.models.d.ts.map +1 -1
  355. package/dist/providers/opencode.models.js +3 -977
  356. package/dist/providers/opencode.models.js.map +1 -1
  357. package/dist/providers/openrouter-images.d.ts.map +1 -1
  358. package/dist/providers/openrouter-images.js +10 -2
  359. package/dist/providers/openrouter-images.js.map +1 -1
  360. package/dist/providers/openrouter.d.ts.map +1 -1
  361. package/dist/providers/openrouter.js +10 -2
  362. package/dist/providers/openrouter.js.map +1 -1
  363. package/dist/providers/openrouter.models.d.ts +3 -5705
  364. package/dist/providers/openrouter.models.d.ts.map +1 -1
  365. package/dist/providers/openrouter.models.js +3 -4873
  366. package/dist/providers/openrouter.models.js.map +1 -1
  367. package/dist/providers/qwen-token-plan-cn.d.ts +3 -0
  368. package/dist/providers/qwen-token-plan-cn.d.ts.map +1 -0
  369. package/dist/providers/qwen-token-plan-cn.js +15 -0
  370. package/dist/providers/qwen-token-plan-cn.js.map +1 -0
  371. package/dist/providers/qwen-token-plan-cn.models.d.ts +4 -0
  372. package/dist/providers/qwen-token-plan-cn.models.d.ts.map +1 -0
  373. package/dist/providers/qwen-token-plan-cn.models.js +6 -0
  374. package/dist/providers/qwen-token-plan-cn.models.js.map +1 -0
  375. package/dist/providers/qwen-token-plan.d.ts +3 -0
  376. package/dist/providers/qwen-token-plan.d.ts.map +1 -0
  377. package/dist/providers/qwen-token-plan.js +15 -0
  378. package/dist/providers/qwen-token-plan.js.map +1 -0
  379. package/dist/providers/qwen-token-plan.models.d.ts +4 -0
  380. package/dist/providers/qwen-token-plan.models.d.ts.map +1 -0
  381. package/dist/providers/qwen-token-plan.models.js +6 -0
  382. package/dist/providers/qwen-token-plan.models.js.map +1 -0
  383. package/dist/providers/radius-config.d.ts +26 -0
  384. package/dist/providers/radius-config.d.ts.map +1 -0
  385. package/dist/providers/radius-config.js +63 -0
  386. package/dist/providers/radius-config.js.map +1 -0
  387. package/dist/providers/radius.d.ts +9 -0
  388. package/dist/providers/radius.d.ts.map +1 -0
  389. package/dist/providers/radius.js +54 -0
  390. package/dist/providers/radius.js.map +1 -0
  391. package/dist/providers/together.models.d.ts +3 -597
  392. package/dist/providers/together.models.d.ts.map +1 -1
  393. package/dist/providers/together.models.js +3 -377
  394. package/dist/providers/together.models.js.map +1 -1
  395. package/dist/providers/vercel-ai-gateway.models.d.ts +3 -3391
  396. package/dist/providers/vercel-ai-gateway.models.d.ts.map +1 -1
  397. package/dist/providers/vercel-ai-gateway.models.js +3 -3327
  398. package/dist/providers/vercel-ai-gateway.models.js.map +1 -1
  399. package/dist/providers/xai.d.ts +1 -1
  400. package/dist/providers/xai.d.ts.map +1 -1
  401. package/dist/providers/xai.js +8 -4
  402. package/dist/providers/xai.js.map +1 -1
  403. package/dist/providers/xai.models.d.ts +3 -178
  404. package/dist/providers/xai.models.d.ts.map +1 -1
  405. package/dist/providers/xai.models.js +3 -146
  406. package/dist/providers/xai.models.js.map +1 -1
  407. package/dist/providers/xiaomi-token-plan-ams.models.d.ts +3 -65
  408. package/dist/providers/xiaomi-token-plan-ams.models.d.ts.map +1 -1
  409. package/dist/providers/xiaomi-token-plan-ams.models.js +3 -56
  410. package/dist/providers/xiaomi-token-plan-ams.models.js.map +1 -1
  411. package/dist/providers/xiaomi-token-plan-cn.models.d.ts +3 -65
  412. package/dist/providers/xiaomi-token-plan-cn.models.d.ts.map +1 -1
  413. package/dist/providers/xiaomi-token-plan-cn.models.js +3 -56
  414. package/dist/providers/xiaomi-token-plan-cn.models.js.map +1 -1
  415. package/dist/providers/xiaomi-token-plan-sgp.models.d.ts +3 -65
  416. package/dist/providers/xiaomi-token-plan-sgp.models.d.ts.map +1 -1
  417. package/dist/providers/xiaomi-token-plan-sgp.models.js +3 -56
  418. package/dist/providers/xiaomi-token-plan-sgp.models.js.map +1 -1
  419. package/dist/providers/xiaomi.models.d.ts +3 -128
  420. package/dist/providers/xiaomi.models.d.ts.map +1 -1
  421. package/dist/providers/xiaomi.models.js +3 -110
  422. package/dist/providers/xiaomi.models.js.map +1 -1
  423. package/dist/providers/zai-coding-cn.models.d.ts +3 -152
  424. package/dist/providers/zai-coding-cn.models.d.ts.map +1 -1
  425. package/dist/providers/zai-coding-cn.models.js +3 -111
  426. package/dist/providers/zai-coding-cn.models.js.map +1 -1
  427. package/dist/providers/zai.models.d.ts +3 -152
  428. package/dist/providers/zai.models.d.ts.map +1 -1
  429. package/dist/providers/zai.models.js +3 -111
  430. package/dist/providers/zai.models.js.map +1 -1
  431. package/dist/types.d.ts +77 -8
  432. package/dist/types.d.ts.map +1 -1
  433. package/dist/types.js.map +1 -1
  434. package/dist/utils/deferred-tools.d.ts +9 -0
  435. package/dist/utils/deferred-tools.d.ts.map +1 -0
  436. package/dist/utils/deferred-tools.js +36 -0
  437. package/dist/utils/deferred-tools.js.map +1 -0
  438. package/dist/utils/error-body.d.ts.map +1 -1
  439. package/dist/utils/error-body.js +31 -7
  440. package/dist/utils/error-body.js.map +1 -1
  441. package/dist/utils/estimate.d.ts.map +1 -1
  442. package/dist/utils/estimate.js +18 -5
  443. package/dist/utils/estimate.js.map +1 -1
  444. package/dist/utils/node-http-proxy.d.ts.map +1 -1
  445. package/dist/utils/node-http-proxy.js +53 -12
  446. package/dist/utils/node-http-proxy.js.map +1 -1
  447. package/dist/utils/overflow.d.ts +1 -0
  448. package/dist/utils/overflow.d.ts.map +1 -1
  449. package/dist/utils/overflow.js +3 -0
  450. package/dist/utils/overflow.js.map +1 -1
  451. package/dist/utils/pi-user-agent.d.ts +2 -0
  452. package/dist/utils/pi-user-agent.d.ts.map +1 -0
  453. package/dist/utils/pi-user-agent.js +12 -0
  454. package/dist/utils/pi-user-agent.js.map +1 -0
  455. package/dist/utils/provider-retry.d.ts +16 -0
  456. package/dist/utils/provider-retry.d.ts.map +1 -0
  457. package/dist/utils/provider-retry.js +94 -0
  458. package/dist/utils/provider-retry.js.map +1 -0
  459. package/dist/utils/retry.d.ts +41 -0
  460. package/dist/utils/retry.d.ts.map +1 -1
  461. package/dist/utils/retry.js +84 -0
  462. package/dist/utils/retry.js.map +1 -1
  463. package/dist/utils/sleep.d.ts +2 -0
  464. package/dist/utils/sleep.d.ts.map +1 -0
  465. package/dist/utils/sleep.js +15 -0
  466. package/dist/utils/sleep.js.map +1 -0
  467. package/dist/utils/text.d.ts +6 -0
  468. package/dist/utils/text.d.ts.map +1 -0
  469. package/dist/utils/text.js +10 -0
  470. package/dist/utils/text.js.map +1 -0
  471. package/dist/utils/uuid.d.ts +3 -0
  472. package/dist/utils/uuid.d.ts.map +1 -0
  473. package/dist/utils/uuid.js +47 -0
  474. package/dist/utils/uuid.js.map +1 -0
  475. package/dist/utils/validation.d.ts.map +1 -1
  476. package/dist/utils/validation.js +6 -0
  477. package/dist/utils/validation.js.map +1 -1
  478. package/package.json +12 -6
  479. package/dist/utils/oauth/anthropic.d.ts +0 -27
  480. package/dist/utils/oauth/anthropic.d.ts.map +0 -1
  481. package/dist/utils/oauth/anthropic.js.map +0 -1
  482. package/dist/utils/oauth/device-code.d.ts.map +0 -1
  483. package/dist/utils/oauth/device-code.js.map +0 -1
  484. package/dist/utils/oauth/github-copilot.d.ts +0 -32
  485. package/dist/utils/oauth/github-copilot.d.ts.map +0 -1
  486. package/dist/utils/oauth/github-copilot.js.map +0 -1
  487. package/dist/utils/oauth/google-antigravity.d.ts +0 -26
  488. package/dist/utils/oauth/google-antigravity.d.ts.map +0 -1
  489. package/dist/utils/oauth/google-antigravity.js.map +0 -1
  490. package/dist/utils/oauth/google-gemini-cli.d.ts +0 -26
  491. package/dist/utils/oauth/google-gemini-cli.d.ts.map +0 -1
  492. package/dist/utils/oauth/google-gemini-cli.js.map +0 -1
  493. package/dist/utils/oauth/index.d.ts +0 -60
  494. package/dist/utils/oauth/index.d.ts.map +0 -1
  495. package/dist/utils/oauth/index.js +0 -130
  496. package/dist/utils/oauth/index.js.map +0 -1
  497. package/dist/utils/oauth/load.d.ts +0 -6
  498. package/dist/utils/oauth/load.d.ts.map +0 -1
  499. package/dist/utils/oauth/load.js +0 -23
  500. package/dist/utils/oauth/load.js.map +0 -1
  501. package/dist/utils/oauth/oauth-page.d.ts.map +0 -1
  502. package/dist/utils/oauth/oauth-page.js.map +0 -1
  503. package/dist/utils/oauth/openai-codex.d.ts +0 -45
  504. package/dist/utils/oauth/openai-codex.d.ts.map +0 -1
  505. package/dist/utils/oauth/openai-codex.js.map +0 -1
  506. package/dist/utils/oauth/opencode-go.d.ts +0 -23
  507. package/dist/utils/oauth/opencode-go.d.ts.map +0 -1
  508. package/dist/utils/oauth/opencode-go.js +0 -46
  509. package/dist/utils/oauth/opencode-go.js.map +0 -1
  510. package/dist/utils/oauth/pkce.d.ts.map +0 -1
  511. package/dist/utils/oauth/pkce.js.map +0 -1
  512. package/dist/utils/oauth/types.d.ts +0 -64
  513. package/dist/utils/oauth/types.d.ts.map +0 -1
  514. package/dist/utils/oauth/types.js +0 -2
  515. package/dist/utils/oauth/types.js.map +0 -1
  516. package/dist/utils/oauth/xai.d.ts +0 -34
  517. package/dist/utils/oauth/xai.d.ts.map +0 -1
  518. package/dist/utils/oauth/xai.js.map +0 -1
  519. /package/dist/{utils → auth}/oauth/device-code.d.ts +0 -0
  520. /package/dist/{utils → auth}/oauth/device-code.js +0 -0
  521. /package/dist/{utils → auth}/oauth/oauth-page.d.ts +0 -0
  522. /package/dist/{utils → auth}/oauth/oauth-page.js +0 -0
  523. /package/dist/{utils → auth}/oauth/pkce.d.ts +0 -0
  524. /package/dist/{utils → auth}/oauth/pkce.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"anthropic-messages.d.ts","sourceRoot":"","sources":["../../src/api/anthropic-messages.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,mBAAmB,CAAC;AAU1C,OAAO,KAAK,EAWX,mBAAmB,EAEnB,cAAc,EACd,aAAa,EAMb,MAAM,aAAa,CAAC;AAoIrB,MAAM,MAAM,eAAe,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,CAAC;AAE1E,MAAM,MAAM,wBAAwB,GAAG,YAAY,GAAG,SAAS,CAAC;AAkBhE,MAAM,WAAW,gBAAiB,SAAQ,aAAa;IACtD;;;;;;OAMG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;;OAIG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;;;;;;;;;;;OAWG;IACH,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB;;;;;;;;;;;OAWG;IACH,eAAe,CAAC,EAAE,wBAAwB,CAAC;IAC3C;;;;;OAKG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACtE;;;;OAIG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC;CACnB;AAiOD,eAAO,MAAM,MAAM,EAAE,cAAc,CAAC,oBAAoB,EAAE,gBAAgB,CAiRzE,CAAC;AA2BF,eAAO,MAAM,YAAY,EAAE,cAAc,CAAC,oBAAoB,EAAE,mBAAmB,CAwClF,CAAC"}
1
+ {"version":3,"file":"anthropic-messages.d.ts","sourceRoot":"","sources":["../../src/api/anthropic-messages.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,mBAAmB,CAAC;AAU1C,OAAO,KAAK,EAWX,mBAAmB,EAEnB,cAAc,EACd,aAAa,EAMb,MAAM,aAAa,CAAC;AAwIrB,MAAM,MAAM,eAAe,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,CAAC;AAE1E,MAAM,MAAM,wBAAwB,GAAG,YAAY,GAAG,SAAS,CAAC;AAkChE,MAAM,WAAW,gBAAiB,SAAQ,aAAa;IACtD;;;;;;OAMG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;;OAIG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;;;;;;;;;;;OAWG;IACH,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB;;;;;;;;;;;OAWG;IACH,eAAe,CAAC,EAAE,wBAAwB,CAAC;IAC3C;;;;;OAKG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACtE;;;;OAIG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC;CACnB;AAqOD,eAAO,MAAM,MAAM,EAAE,cAAc,CAAC,oBAAoB,EAAE,gBAAgB,CA+RzE,CAAC;AA2BF,eAAO,MAAM,YAAY,EAAE,cAAc,CAAC,oBAAoB,EAAE,mBAAmB,CA2ClF,CAAC"}
@@ -1,10 +1,14 @@
1
1
  import Anthropic from "@anthropic-ai/sdk";
2
2
  import { calculateCost } from "../models.js";
3
+ import { splitDeferredTools } from "../utils/deferred-tools.js";
3
4
  import { AssistantMessageEventStream } from "../utils/event-stream.js";
4
5
  import { headersToRecord } from "../utils/headers.js";
5
6
  import { parseJsonWithRepair, parseStreamingJson } from "../utils/json-parse.js";
7
+ import { getPiUserAgent } from "../utils/pi-user-agent.js";
6
8
  import { getProviderEnvValue } from "../utils/provider-env.js";
9
+ import { retryProviderRequest } from "../utils/provider-retry.js";
7
10
  import { sanitizeSurrogates } from "../utils/sanitize-unicode.js";
11
+ import { resolveJsonSchemaStrictSampling } from "./constrained-sampling.js";
8
12
  import { buildCopilotDynamicHeaders, hasCopilotVisionInput } from "./github-copilot-headers.js";
9
13
  import { adjustMaxTokensForThinking, buildBaseOptions, clampMaxTokensToContext } from "./simple-options.js";
10
14
  import { transformMessages } from "./transform-messages.js";
@@ -33,7 +37,7 @@ function getCacheControl(model, cacheRetention, env) {
33
37
  };
34
38
  }
35
39
  // Stealth mode: Mimic Claude Code's tool naming exactly
36
- const claudeCodeVersion = "2.1.75";
40
+ const claudeCodeVersion = "2.1.251";
37
41
  // Claude Code 2.x tool names (canonical casing)
38
42
  // Source: https://cchistory.mariozechner.at/data/prompts-2.1.11.md
39
43
  // To update: https://github.com/badlogic/cchistory
@@ -114,8 +118,25 @@ function getAnthropicCompat(model) {
114
118
  supportsCacheControlOnTools: model.compat?.supportsCacheControlOnTools ?? true,
115
119
  supportsTemperature: model.compat?.supportsTemperature ?? true,
116
120
  allowEmptySignature: model.compat?.allowEmptySignature ?? false,
121
+ supportsStrictTools: model.compat?.supportsStrictTools ?? false,
122
+ supportsToolReferences: model.compat?.supportsToolReferences ?? defaultSupportsToolReferences(model),
117
123
  };
118
124
  }
125
+ /**
126
+ * Default for `supportsToolReferences`: first-party Anthropic models except
127
+ * Haiku (rejects client-side tool_reference blocks) and models that predate
128
+ * tool search (Claude 3.x, Opus/Sonnet 4.0, Opus 4.1).
129
+ */
130
+ function defaultSupportsToolReferences(model) {
131
+ if (model.provider !== "anthropic" || model.id.includes("haiku"))
132
+ return false;
133
+ const version = model.id.match(/^claude-(?:opus|sonnet|fable)-(\d+)(?:-(\d+))?(?:-|$)/);
134
+ if (!version)
135
+ return false;
136
+ const major = Number(version[1]);
137
+ const minor = version[2] && version[2].length < 8 ? Number(version[2]) : 0;
138
+ return major > 4 || (major === 4 && minor >= 5);
139
+ }
119
140
  function mergeHeaders(...headerSources) {
120
141
  const merged = {};
121
142
  for (const headers of headerSources) {
@@ -125,6 +146,9 @@ function mergeHeaders(...headerSources) {
125
146
  }
126
147
  return merged;
127
148
  }
149
+ function mergeClientHeaders(...headerSources) {
150
+ return mergeHeaders({ "User-Agent": getPiUserAgent() }, ...headerSources);
151
+ }
128
152
  function hasHeader(headers, name) {
129
153
  if (!headers)
130
154
  return false;
@@ -313,7 +337,7 @@ export const stream = (model, context, options) => {
313
337
  totalTokens: 0,
314
338
  cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },
315
339
  },
316
- stopReason: "stop",
340
+ stopReason: "pending",
317
341
  timestamp: Date.now(),
318
342
  };
319
343
  try {
@@ -336,7 +360,7 @@ export const stream = (model, context, options) => {
336
360
  }
337
361
  const cacheRetention = resolveCacheRetention(options?.cacheRetention, options?.env);
338
362
  const cacheSessionId = cacheRetention === "none" ? undefined : options?.sessionId;
339
- const created = createClient(model, apiKey, options?.interleavedThinking ?? true, shouldUseFineGrainedToolStreamingBeta(model, context), options?.headers, copilotDynamicHeaders, cacheSessionId);
363
+ const created = createClient(model, apiKey, options?.interleavedThinking ?? true, shouldUseFineGrainedToolStreamingBeta(model, context), options?.headers, options?.fetch, copilotDynamicHeaders, cacheSessionId);
340
364
  client = created.client;
341
365
  isOAuth = created.isOAuthToken;
342
366
  }
@@ -348,9 +372,13 @@ export const stream = (model, context, options) => {
348
372
  const requestOptions = {
349
373
  ...(options?.signal ? { signal: options.signal } : {}),
350
374
  ...(options?.timeoutMs !== undefined ? { timeout: options.timeoutMs } : {}),
351
- maxRetries: options?.maxRetries ?? 0,
375
+ maxRetries: 0,
352
376
  };
353
- const response = await client.messages.create({ ...params, stream: true }, requestOptions).asResponse();
377
+ const response = await retryProviderRequest(() => client.messages.create({ ...params, stream: true }, requestOptions).asResponse(), {
378
+ maxRetries: options?.maxRetries,
379
+ maxRetryDelayMs: options?.maxRetryDelayMs,
380
+ signal: options?.signal,
381
+ });
354
382
  await options?.onResponse?.({ status: response.status, headers: headersToRecord(response.headers) }, model);
355
383
  stream.push({ type: "start", partial: output });
356
384
  const blocks = output.content;
@@ -373,7 +401,7 @@ export const stream = (model, context, options) => {
373
401
  if (event.content_block.type === "text") {
374
402
  const block = {
375
403
  type: "text",
376
- text: "",
404
+ text: event.content_block.text ?? "",
377
405
  index: event.index,
378
406
  };
379
407
  output.content.push(block);
@@ -382,8 +410,8 @@ export const stream = (model, context, options) => {
382
410
  else if (event.content_block.type === "thinking") {
383
411
  const block = {
384
412
  type: "thinking",
385
- thinking: "",
386
- thinkingSignature: "",
413
+ thinking: event.content_block.thinking ?? "",
414
+ thinkingSignature: event.content_block.signature ?? "",
387
415
  index: event.index,
388
416
  };
389
417
  output.content.push(block);
@@ -502,6 +530,7 @@ export const stream = (model, context, options) => {
502
530
  }
503
531
  else if (event.type === "message_delta") {
504
532
  if (event.delta.stop_reason) {
533
+ output.rawStopReason = event.delta.stop_reason;
505
534
  const stopReasonResult = mapStopReason(event.delta.stop_reason, event.delta.stop_details);
506
535
  output.stopReason = stopReasonResult.stopReason;
507
536
  if (stopReasonResult.errorMessage) {
@@ -510,25 +539,27 @@ export const stream = (model, context, options) => {
510
539
  }
511
540
  // Only update usage fields if present (not null).
512
541
  // Preserves input_tokens from message_start when proxies omit it in message_delta.
513
- if (event.usage.input_tokens != null) {
514
- output.usage.input = event.usage.input_tokens;
515
- }
516
- if (event.usage.output_tokens != null) {
517
- output.usage.output = event.usage.output_tokens;
518
- }
519
- if (event.usage.cache_read_input_tokens != null) {
520
- output.usage.cacheRead = event.usage.cache_read_input_tokens;
521
- }
522
- if (event.usage.cache_creation_input_tokens != null) {
523
- output.usage.cacheWrite = event.usage.cache_creation_input_tokens;
524
- }
525
- // Anthropic reports reasoning tokens in `output_tokens_details.thinking_tokens` on the
526
- // final message_delta usage (a subset of output_tokens). SDK 0.91.1 omits the field from
527
- // its Usage type, so read it through a narrow cast. Verified against the live API.
528
- const thinkingTokens = event.usage
529
- .output_tokens_details?.thinking_tokens;
530
- if (thinkingTokens != null) {
531
- output.usage.reasoning = thinkingTokens;
542
+ if (event.usage) {
543
+ if (event.usage.input_tokens != null) {
544
+ output.usage.input = event.usage.input_tokens;
545
+ }
546
+ if (event.usage.output_tokens != null) {
547
+ output.usage.output = event.usage.output_tokens;
548
+ }
549
+ if (event.usage.cache_read_input_tokens != null) {
550
+ output.usage.cacheRead = event.usage.cache_read_input_tokens;
551
+ }
552
+ if (event.usage.cache_creation_input_tokens != null) {
553
+ output.usage.cacheWrite = event.usage.cache_creation_input_tokens;
554
+ }
555
+ // Anthropic reports reasoning tokens in `output_tokens_details.thinking_tokens` on the
556
+ // final message_delta usage (a subset of output_tokens). SDK 0.91.1 omits the field from
557
+ // its Usage type, so read it through a narrow cast. Verified against the live API.
558
+ const thinkingTokens = event.usage
559
+ .output_tokens_details?.thinking_tokens;
560
+ if (thinkingTokens != null) {
561
+ output.usage.reasoning = thinkingTokens;
562
+ }
532
563
  }
533
564
  // Anthropic doesn't provide total_tokens, compute from components
534
565
  output.usage.totalTokens =
@@ -539,6 +570,9 @@ export const stream = (model, context, options) => {
539
570
  if (options?.signal?.aborted) {
540
571
  throw new Error("Request was aborted");
541
572
  }
573
+ if (output.stopReason === "pending") {
574
+ throw new Error("Anthropic stream ended without a stop reason");
575
+ }
542
576
  if (output.stopReason === "aborted" || output.stopReason === "error") {
543
577
  throw new Error(output.errorMessage || "An unknown error occurred");
544
578
  }
@@ -582,7 +616,10 @@ function mapThinkingLevelToEffort(model, level) {
582
616
  }
583
617
  export const streamSimple = (model, context, options) => {
584
618
  assertRequestAuth(model.provider, options?.apiKey, options?.headers);
585
- const base = buildBaseOptions(model, context, options, options?.apiKey);
619
+ const base = {
620
+ ...buildBaseOptions(model, context, options, options?.apiKey),
621
+ toolChoice: options?.toolChoice,
622
+ };
586
623
  if (!options?.reasoning) {
587
624
  return stream(model, context, { ...base, thinkingEnabled: false });
588
625
  }
@@ -610,7 +647,7 @@ export const streamSimple = (model, context, options) => {
610
647
  function isOAuthToken(apiKey) {
611
648
  return apiKey.includes("sk-ant-oat");
612
649
  }
613
- function createClient(model, apiKey, interleavedThinking, useFineGrainedToolStreamingBeta, optionsHeaders, dynamicHeaders, sessionId) {
650
+ function createClient(model, apiKey, interleavedThinking, useFineGrainedToolStreamingBeta, optionsHeaders, fetch, dynamicHeaders, sessionId) {
614
651
  // Adaptive thinking models have interleaved thinking built in, so skip the beta header.
615
652
  const needsInterleavedBeta = interleavedThinking && model.compat?.forceAdaptiveThinking !== true;
616
653
  const betaFeatures = [];
@@ -627,7 +664,8 @@ function createClient(model, apiKey, interleavedThinking, useFineGrainedToolStre
627
664
  authToken: apiKey ?? null,
628
665
  baseURL: model.baseUrl,
629
666
  dangerouslyAllowBrowser: true,
630
- defaultHeaders: mergeHeaders({
667
+ fetch,
668
+ defaultHeaders: mergeClientHeaders({
631
669
  accept: "application/json",
632
670
  "anthropic-dangerous-direct-browser-access": "true",
633
671
  ...(betaFeatures.length > 0 ? { "anthropic-beta": betaFeatures.join(",") } : {}),
@@ -642,7 +680,8 @@ function createClient(model, apiKey, interleavedThinking, useFineGrainedToolStre
642
680
  authToken: apiKey,
643
681
  baseURL: model.baseUrl,
644
682
  dangerouslyAllowBrowser: true,
645
- defaultHeaders: mergeHeaders({
683
+ fetch,
684
+ defaultHeaders: mergeClientHeaders({
646
685
  accept: "application/json",
647
686
  "anthropic-dangerous-direct-browser-access": "true",
648
687
  "anthropic-beta": ["claude-code-20250219", "oauth-2025-04-20", ...betaFeatures].join(","),
@@ -654,7 +693,7 @@ function createClient(model, apiKey, interleavedThinking, useFineGrainedToolStre
654
693
  }
655
694
  // API key or header-owned auth.
656
695
  const sessionAffinityHeaders = sessionId && getAnthropicCompat(model).sendSessionAffinityHeaders ? { "x-session-affinity": sessionId } : {};
657
- const defaultHeaders = mergeHeaders({
696
+ const defaultHeaders = mergeClientHeaders({
658
697
  accept: "application/json",
659
698
  "anthropic-dangerous-direct-browser-access": "true",
660
699
  ...(betaFeatures.length > 0 ? { "anthropic-beta": betaFeatures.join(",") } : {}),
@@ -664,6 +703,7 @@ function createClient(model, apiKey, interleavedThinking, useFineGrainedToolStre
664
703
  authToken: null,
665
704
  baseURL: model.baseUrl,
666
705
  dangerouslyAllowBrowser: true,
706
+ fetch,
667
707
  defaultHeaders,
668
708
  });
669
709
  return { client, isOAuthToken: false };
@@ -671,9 +711,19 @@ function createClient(model, apiKey, interleavedThinking, useFineGrainedToolStre
671
711
  function buildParams(model, context, isOAuthToken, options) {
672
712
  const { cacheControl } = getCacheControl(model, options?.cacheRetention, options?.env);
673
713
  const compat = getAnthropicCompat(model);
714
+ const transformedMessages = transformMessages(context.messages, model, normalizeToolCallId);
715
+ const normalizeToolName = isOAuthToken ? toClaudeCodeName : (name) => name;
716
+ const toolPlacement = splitDeferredTools({ ...context, messages: transformedMessages }, compat.supportsToolReferences, normalizeToolName);
717
+ let immediateTools = toolPlacement.immediate;
718
+ let deferredTools = [...toolPlacement.deferred.values()];
719
+ if (immediateTools.length === 0 && deferredTools.length > 0) {
720
+ immediateTools = deferredTools;
721
+ deferredTools = [];
722
+ }
723
+ const deferredToolNames = new Set(deferredTools.map((tool) => normalizeToolName(tool.name)));
674
724
  const params = {
675
725
  model: model.id,
676
- messages: convertMessages(context.messages, model, isOAuthToken, cacheControl, compat.allowEmptySignature),
726
+ messages: convertMessages(transformedMessages, isOAuthToken, cacheControl, compat.allowEmptySignature, deferredToolNames, normalizeToolName),
677
727
  max_tokens: options?.maxTokens ?? model.maxTokens,
678
728
  stream: true,
679
729
  };
@@ -708,8 +758,11 @@ function buildParams(model, context, isOAuthToken, options) {
708
758
  if (options?.temperature !== undefined && !options?.thinkingEnabled && compat.supportsTemperature) {
709
759
  params.temperature = options.temperature;
710
760
  }
711
- if (context.tools && context.tools.length > 0) {
712
- params.tools = convertTools(context.tools, isOAuthToken, compat.supportsEagerToolInputStreaming, compat.supportsCacheControlOnTools ? cacheControl : undefined);
761
+ if (immediateTools.length > 0 || deferredTools.length > 0) {
762
+ params.tools = [
763
+ ...convertTools(immediateTools, isOAuthToken, compat.supportsEagerToolInputStreaming, compat.supportsStrictTools, compat.supportsCacheControlOnTools ? cacheControl : undefined),
764
+ ...convertTools(deferredTools, isOAuthToken, compat.supportsEagerToolInputStreaming, compat.supportsStrictTools, undefined, true),
765
+ ];
713
766
  }
714
767
  // Configure thinking mode: adaptive, budget-based, or explicitly disabled.
715
768
  if (model.reasoning) {
@@ -761,10 +814,37 @@ function buildParams(model, context, isOAuthToken, options) {
761
814
  function normalizeToolCallId(id) {
762
815
  return id.replace(/[^a-zA-Z0-9_-]/g, "_").slice(0, 64);
763
816
  }
764
- function convertMessages(messages, model, isOAuthToken, cacheControl, allowEmptySignature = false) {
817
+ function convertToolResult(msg, isOAuthToken, deferredToolNames, loadedToolNames, normalizeToolName) {
818
+ const references = [];
819
+ for (const name of msg.addedToolNames ?? []) {
820
+ const normalizedName = normalizeToolName(name);
821
+ if (!deferredToolNames.has(normalizedName) || loadedToolNames.has(normalizedName))
822
+ continue;
823
+ loadedToolNames.add(normalizedName);
824
+ references.push({
825
+ type: "tool_reference",
826
+ tool_name: isOAuthToken ? toClaudeCodeName(name) : name,
827
+ });
828
+ }
829
+ const convertedContent = convertContentBlocks(msg.content);
830
+ // Anthropic rejects tool references mixed with ordinary tool-result content.
831
+ return {
832
+ toolResult: {
833
+ type: "tool_result",
834
+ tool_use_id: msg.toolCallId,
835
+ content: references.length > 0 ? references : convertedContent,
836
+ is_error: msg.isError,
837
+ },
838
+ siblingContent: references.length === 0
839
+ ? []
840
+ : typeof convertedContent === "string"
841
+ ? [{ type: "text", text: convertedContent }]
842
+ : convertedContent,
843
+ };
844
+ }
845
+ function convertMessages(transformedMessages, isOAuthToken, cacheControl, allowEmptySignature = false, deferredToolNames = new Set(), normalizeToolName = (name) => name) {
765
846
  const params = [];
766
- // Transform messages for cross-provider compatibility
767
- const transformedMessages = transformMessages(messages, model, normalizeToolCallId);
847
+ const loadedToolNames = new Set();
768
848
  for (let i = 0; i < transformedMessages.length; i++) {
769
849
  const msg = transformedMessages[i];
770
850
  if (msg.role === "user") {
@@ -873,33 +953,22 @@ function convertMessages(messages, model, isOAuthToken, cacheControl, allowEmpty
873
953
  });
874
954
  }
875
955
  else if (msg.role === "toolResult") {
876
- // Collect all consecutive toolResult messages, needed for z.ai Anthropic endpoint
956
+ // Collect all consecutive toolResult messages, needed for z.ai Anthropic endpoint.
877
957
  const toolResults = [];
878
- // Add the current tool result
879
- toolResults.push({
880
- type: "tool_result",
881
- tool_use_id: msg.toolCallId,
882
- content: convertContentBlocks(msg.content),
883
- is_error: msg.isError,
884
- });
885
- // Look ahead for consecutive toolResult messages
886
- let j = i + 1;
958
+ const siblingContent = [];
959
+ let j = i;
887
960
  while (j < transformedMessages.length && transformedMessages[j].role === "toolResult") {
888
- const nextMsg = transformedMessages[j]; // We know it's a toolResult
889
- toolResults.push({
890
- type: "tool_result",
891
- tool_use_id: nextMsg.toolCallId,
892
- content: convertContentBlocks(nextMsg.content),
893
- is_error: nextMsg.isError,
894
- });
961
+ const converted = convertToolResult(transformedMessages[j], isOAuthToken, deferredToolNames, loadedToolNames, normalizeToolName);
962
+ toolResults.push(converted.toolResult);
963
+ siblingContent.push(...converted.siblingContent);
895
964
  j++;
896
965
  }
897
- // Skip the messages we've already processed
966
+ // Skip the messages we've already processed.
898
967
  i = j - 1;
899
- // Add a single user message with all tool results
968
+ // Displaced reference-bearing results must follow every tool_result block.
900
969
  params.push({
901
970
  role: "user",
902
- content: toolResults,
971
+ content: [...toolResults, ...siblingContent],
903
972
  });
904
973
  }
905
974
  }
@@ -930,20 +999,30 @@ function convertMessages(messages, model, isOAuthToken, cacheControl, allowEmpty
930
999
  function shouldUseFineGrainedToolStreamingBeta(model, context) {
931
1000
  return !!context.tools?.length && !getAnthropicCompat(model).supportsEagerToolInputStreaming;
932
1001
  }
933
- function convertTools(tools, isOAuthToken, supportsEagerToolInputStreaming, cacheControl) {
1002
+ function convertTools(tools, isOAuthToken, supportsEagerToolInputStreaming, supportsStrictTools, cacheControl, deferLoading = false) {
934
1003
  if (!tools)
935
1004
  return [];
936
1005
  return tools.map((tool, index) => {
1006
+ const strict = resolveJsonSchemaStrictSampling(tool, supportsStrictTools);
937
1007
  const schema = tool.parameters;
1008
+ const legacyInputSchema = {
1009
+ type: "object",
1010
+ properties: schema.properties ?? {},
1011
+ required: schema.required ?? [],
1012
+ };
1013
+ const inputSchema = strict === true
1014
+ ? {
1015
+ ...tool.parameters,
1016
+ ...legacyInputSchema,
1017
+ }
1018
+ : legacyInputSchema;
938
1019
  return {
939
1020
  name: isOAuthToken ? toClaudeCodeName(tool.name) : tool.name,
940
1021
  description: tool.description,
941
1022
  ...(supportsEagerToolInputStreaming ? { eager_input_streaming: true } : {}),
942
- input_schema: {
943
- type: "object",
944
- properties: schema.properties ?? {},
945
- required: schema.required ?? [],
946
- },
1023
+ ...(strict === true ? { strict: true } : {}),
1024
+ input_schema: inputSchema,
1025
+ ...(deferLoading ? { defer_loading: true } : {}),
947
1026
  ...(cacheControl && index === tools.length - 1 ? { cache_control: cacheControl } : {}),
948
1027
  };
949
1028
  });
@@ -966,7 +1045,7 @@ function mapStopReason(reason, stopDetails) {
966
1045
  case "stop_sequence":
967
1046
  return { stopReason: "stop" }; // We don't supply stop sequences, so this should never happen
968
1047
  case "sensitive": // Content flagged by safety filters (not yet in SDK types)
969
- return { stopReason: "error" };
1048
+ return { stopReason: "error", errorMessage: "Provider stopped with: sensitive" };
970
1049
  default:
971
1050
  // Handle unknown stop reasons gracefully (API may add new values)
972
1051
  throw new Error(`Unhandled stop reason: ${reason}`);