@aryee337/aery-ai 0.2.28 → 0.2.29

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 (417) hide show
  1. package/CHANGELOG.md +2914 -0
  2. package/README.md +614 -813
  3. package/package.json +140 -105
  4. package/src/api-registry.ts +96 -0
  5. package/src/auth-broker/client.ts +358 -0
  6. package/src/auth-broker/index.ts +5 -0
  7. package/src/auth-broker/refresher.ts +117 -0
  8. package/src/auth-broker/remote-store.ts +623 -0
  9. package/src/auth-broker/server.ts +644 -0
  10. package/src/auth-broker/types.ts +127 -0
  11. package/src/auth-broker/wire-schemas.ts +200 -0
  12. package/src/auth-gateway/http.ts +194 -0
  13. package/src/auth-gateway/index.ts +3 -0
  14. package/src/auth-gateway/server.ts +818 -0
  15. package/src/auth-gateway/types.ts +143 -0
  16. package/src/auth-storage.ts +4422 -0
  17. package/src/index.ts +54 -0
  18. package/src/model-cache.ts +129 -0
  19. package/src/model-manager.ts +469 -0
  20. package/src/model-thinking.ts +782 -0
  21. package/src/models.json +83530 -0
  22. package/src/models.json.d.ts +9 -0
  23. package/src/models.ts +56 -0
  24. package/src/prompts/turn-aborted-guidance.md +4 -0
  25. package/src/provider-details.ts +90 -0
  26. package/src/provider-models/bundled-references.ts +38 -0
  27. package/src/provider-models/descriptors.ts +355 -0
  28. package/src/provider-models/google.ts +88 -0
  29. package/src/provider-models/index.ts +5 -0
  30. package/src/provider-models/ollama.ts +153 -0
  31. package/src/provider-models/openai-compat.ts +2817 -0
  32. package/src/provider-models/special.ts +67 -0
  33. package/src/providers/aery-native-client.ts +228 -0
  34. package/src/providers/aery-native-server.ts +212 -0
  35. package/src/providers/amazon-bedrock.ts +873 -0
  36. package/src/providers/anthropic-client.ts +318 -0
  37. package/src/providers/anthropic-messages-server-schema.ts +243 -0
  38. package/src/providers/anthropic-messages-server.ts +683 -0
  39. package/src/providers/anthropic-wire.ts +268 -0
  40. package/src/providers/anthropic.ts +3094 -0
  41. package/src/providers/aws-credentials.ts +501 -0
  42. package/src/providers/aws-eventstream.ts +185 -0
  43. package/src/providers/aws-sigv4.ts +218 -0
  44. package/src/providers/azure-openai-responses.ts +361 -0
  45. package/src/providers/cursor/gen/agent_pb.ts +15274 -0
  46. package/src/providers/cursor/proto/agent.proto +3526 -0
  47. package/src/providers/cursor/proto/buf.gen.yaml +6 -0
  48. package/src/providers/cursor/proto/buf.yaml +17 -0
  49. package/src/providers/cursor.ts +2621 -0
  50. package/src/providers/error-message.ts +21 -0
  51. package/src/providers/github-copilot-headers.ts +140 -0
  52. package/src/providers/gitlab-duo.ts +372 -0
  53. package/src/providers/google-auth.ts +252 -0
  54. package/src/providers/google-gemini-cli.ts +809 -0
  55. package/src/providers/google-gemini-headers.ts +41 -0
  56. package/src/providers/google-shared.ts +917 -0
  57. package/src/providers/google-types.ts +167 -0
  58. package/src/providers/google-vertex.ts +91 -0
  59. package/src/providers/google.ts +41 -0
  60. package/src/providers/grammar.ts +70 -0
  61. package/src/providers/kimi.ts +52 -0
  62. package/src/providers/mock.ts +496 -0
  63. package/src/providers/ollama.ts +644 -0
  64. package/src/providers/openai-anthropic-shim.ts +138 -0
  65. package/src/providers/openai-chat-server-schema.ts +252 -0
  66. package/src/providers/openai-chat-server.ts +647 -0
  67. package/src/providers/openai-codex/constants.ts +43 -0
  68. package/src/providers/openai-codex/request-transformer.ts +161 -0
  69. package/src/providers/openai-codex/response-handler.ts +81 -0
  70. package/src/providers/openai-codex-responses.ts +3018 -0
  71. package/src/providers/openai-completions-compat.ts +300 -0
  72. package/src/providers/openai-completions.ts +1979 -0
  73. package/src/providers/openai-responses-server-schema.ts +290 -0
  74. package/src/providers/openai-responses-server.ts +1183 -0
  75. package/src/providers/openai-responses-shared.ts +873 -0
  76. package/src/providers/openai-responses.ts +679 -0
  77. package/src/providers/register-builtins.ts +436 -0
  78. package/src/providers/synthetic.ts +50 -0
  79. package/src/providers/transform-messages.ts +382 -0
  80. package/src/providers/vision-guard.ts +31 -0
  81. package/src/providers/xai-responses.ts +82 -0
  82. package/src/rate-limit-utils.ts +84 -0
  83. package/src/stream.ts +1065 -0
  84. package/src/types.ts +944 -0
  85. package/src/usage/claude.ts +482 -0
  86. package/src/usage/gemini.ts +250 -0
  87. package/src/usage/github-copilot.ts +421 -0
  88. package/src/usage/google-antigravity.ts +201 -0
  89. package/src/usage/kimi.ts +271 -0
  90. package/src/usage/minimax-code.ts +31 -0
  91. package/src/usage/openai-codex.ts +503 -0
  92. package/src/usage/shared.ts +10 -0
  93. package/src/usage/zai.ts +247 -0
  94. package/src/usage.ts +185 -0
  95. package/src/utils/abort.ts +51 -0
  96. package/src/utils/abortable-iterator.ts +69 -0
  97. package/src/utils/anthropic-auth.ts +93 -0
  98. package/src/utils/discovery/antigravity.ts +261 -0
  99. package/src/utils/discovery/codex.ts +371 -0
  100. package/src/utils/discovery/cursor.ts +306 -0
  101. package/src/utils/discovery/gemini.ts +248 -0
  102. package/src/utils/discovery/index.ts +4 -0
  103. package/src/utils/discovery/openai-compatible.ts +224 -0
  104. package/src/utils/event-stream.ts +142 -0
  105. package/src/utils/fireworks-model-id.ts +30 -0
  106. package/src/utils/foundry.ts +8 -0
  107. package/src/utils/http-inspector.ts +176 -0
  108. package/src/utils/idle-iterator.ts +267 -0
  109. package/src/utils/json-parse.ts +182 -0
  110. package/src/utils/oauth/__tests__/xai-oauth.test.ts +107 -0
  111. package/src/utils/oauth/alibaba-coding-plan.ts +59 -0
  112. package/src/utils/oauth/anthropic.ts +273 -0
  113. package/src/utils/oauth/api-key-login.ts +87 -0
  114. package/src/utils/oauth/api-key-validation.ts +92 -0
  115. package/src/utils/oauth/callback-server.ts +276 -0
  116. package/src/utils/oauth/cerebras.ts +16 -0
  117. package/src/utils/oauth/cloudflare-ai-gateway.ts +48 -0
  118. package/src/utils/oauth/cursor.ts +157 -0
  119. package/src/utils/oauth/deepseek.ts +53 -0
  120. package/src/utils/oauth/firepass.ts +24 -0
  121. package/src/utils/oauth/fireworks.ts +15 -0
  122. package/src/utils/oauth/github-copilot.ts +362 -0
  123. package/src/utils/oauth/gitlab-duo.ts +123 -0
  124. package/src/utils/oauth/google-antigravity.ts +200 -0
  125. package/src/utils/oauth/google-gemini-cli.ts +256 -0
  126. package/src/utils/oauth/google-oauth-shared.ts +110 -0
  127. package/src/utils/oauth/huggingface.ts +62 -0
  128. package/src/utils/oauth/index.ts +484 -0
  129. package/src/utils/oauth/kagi.ts +47 -0
  130. package/src/utils/oauth/kilo.ts +87 -0
  131. package/src/utils/oauth/kimi.ts +254 -0
  132. package/src/utils/oauth/litellm.ts +47 -0
  133. package/src/utils/oauth/lm-studio.ts +38 -0
  134. package/src/utils/oauth/minimax-code.ts +78 -0
  135. package/src/utils/oauth/moonshot.ts +23 -0
  136. package/src/utils/oauth/nanogpt.ts +15 -0
  137. package/src/utils/oauth/nvidia.ts +70 -0
  138. package/src/utils/oauth/oauth.html +203 -0
  139. package/src/utils/oauth/ollama-cloud.ts +28 -0
  140. package/src/utils/oauth/ollama.ts +47 -0
  141. package/src/utils/oauth/openai-codex.ts +299 -0
  142. package/src/utils/oauth/opencode.ts +49 -0
  143. package/src/utils/oauth/openrouter.ts +20 -0
  144. package/src/utils/oauth/parallel.ts +46 -0
  145. package/src/utils/oauth/perplexity.ts +206 -0
  146. package/src/utils/oauth/pkce.ts +18 -0
  147. package/src/utils/oauth/qianfan.ts +58 -0
  148. package/src/utils/oauth/qwen-portal.ts +60 -0
  149. package/src/utils/oauth/synthetic.ts +15 -0
  150. package/src/utils/oauth/tavily.ts +46 -0
  151. package/src/utils/oauth/together.ts +16 -0
  152. package/src/utils/oauth/types.ts +99 -0
  153. package/src/utils/oauth/venice.ts +59 -0
  154. package/src/utils/oauth/vercel-ai-gateway.ts +47 -0
  155. package/src/utils/oauth/vllm.ts +40 -0
  156. package/src/utils/oauth/wafer.ts +50 -0
  157. package/src/utils/oauth/xai-oauth.ts +342 -0
  158. package/src/utils/oauth/xiaomi.ts +139 -0
  159. package/src/utils/oauth/zai.ts +60 -0
  160. package/src/utils/oauth/zenmux.ts +15 -0
  161. package/src/utils/oauth/zhipu.ts +60 -0
  162. package/src/utils/overflow.ts +137 -0
  163. package/src/utils/parse-bind.ts +54 -0
  164. package/src/utils/provider-response.ts +30 -0
  165. package/src/utils/request-debug.ts +336 -0
  166. package/src/utils/retry-after.ts +110 -0
  167. package/src/utils/retry.ts +54 -0
  168. package/src/utils/schema/CONSTRAINTS.md +164 -0
  169. package/src/utils/schema/adapt.ts +36 -0
  170. package/src/utils/schema/compatibility.ts +435 -0
  171. package/src/utils/schema/dereference.ts +98 -0
  172. package/src/utils/schema/draft.ts +341 -0
  173. package/src/utils/schema/equality.ts +97 -0
  174. package/src/utils/schema/fields.ts +191 -0
  175. package/src/utils/schema/index.ts +13 -0
  176. package/src/utils/schema/json-schema-validator.ts +577 -0
  177. package/src/utils/schema/meta-validator.ts +167 -0
  178. package/src/utils/schema/normalize.ts +1588 -0
  179. package/src/utils/schema/spill.ts +43 -0
  180. package/src/utils/schema/stamps.ts +97 -0
  181. package/src/utils/schema/types.ts +10 -0
  182. package/src/utils/schema/wire.ts +293 -0
  183. package/src/utils/schema/zod-decontaminate.ts +331 -0
  184. package/src/utils/sdk-stream-timeout.ts +43 -0
  185. package/src/utils/sse-debug.ts +289 -0
  186. package/src/utils/stream-markup-healing.ts +612 -0
  187. package/src/utils/tool-choice.ts +99 -0
  188. package/src/utils/validation.ts +1024 -0
  189. package/src/utils.ts +166 -0
  190. package/dist/api-registry.d.ts +0 -20
  191. package/dist/api-registry.d.ts.map +0 -1
  192. package/dist/api-registry.js +0 -44
  193. package/dist/api-registry.js.map +0 -1
  194. package/dist/bedrock-provider.d.ts +0 -5
  195. package/dist/bedrock-provider.d.ts.map +0 -1
  196. package/dist/bedrock-provider.js +0 -6
  197. package/dist/bedrock-provider.js.map +0 -1
  198. package/dist/cli.d.ts +0 -3
  199. package/dist/cli.d.ts.map +0 -1
  200. package/dist/cli.js +0 -130
  201. package/dist/cli.js.map +0 -1
  202. package/dist/env-api-keys.d.ts +0 -18
  203. package/dist/env-api-keys.d.ts.map +0 -1
  204. package/dist/env-api-keys.js +0 -178
  205. package/dist/env-api-keys.js.map +0 -1
  206. package/dist/image-models.d.ts +0 -10
  207. package/dist/image-models.d.ts.map +0 -1
  208. package/dist/image-models.generated.d.ts +0 -440
  209. package/dist/image-models.generated.d.ts.map +0 -1
  210. package/dist/image-models.generated.js +0 -442
  211. package/dist/image-models.generated.js.map +0 -1
  212. package/dist/image-models.js +0 -23
  213. package/dist/image-models.js.map +0 -1
  214. package/dist/images-api-registry.d.ts +0 -14
  215. package/dist/images-api-registry.d.ts.map +0 -1
  216. package/dist/images-api-registry.js +0 -22
  217. package/dist/images-api-registry.js.map +0 -1
  218. package/dist/images.d.ts +0 -4
  219. package/dist/images.d.ts.map +0 -1
  220. package/dist/images.js +0 -14
  221. package/dist/images.js.map +0 -1
  222. package/dist/index.d.ts +0 -32
  223. package/dist/index.d.ts.map +0 -1
  224. package/dist/index.js +0 -20
  225. package/dist/index.js.map +0 -1
  226. package/dist/models.d.ts +0 -18
  227. package/dist/models.d.ts.map +0 -1
  228. package/dist/models.generated.d.ts +0 -17707
  229. package/dist/models.generated.d.ts.map +0 -1
  230. package/dist/models.generated.js +0 -16561
  231. package/dist/models.generated.js.map +0 -1
  232. package/dist/models.js +0 -71
  233. package/dist/models.js.map +0 -1
  234. package/dist/oauth.d.ts +0 -2
  235. package/dist/oauth.d.ts.map +0 -1
  236. package/dist/oauth.js +0 -2
  237. package/dist/oauth.js.map +0 -1
  238. package/dist/providers/aery-error-formatting.d.ts +0 -13
  239. package/dist/providers/aery-error-formatting.d.ts.map +0 -1
  240. package/dist/providers/aery-error-formatting.js +0 -112
  241. package/dist/providers/aery-error-formatting.js.map +0 -1
  242. package/dist/providers/amazon-bedrock.d.ts +0 -38
  243. package/dist/providers/amazon-bedrock.d.ts.map +0 -1
  244. package/dist/providers/amazon-bedrock.js +0 -763
  245. package/dist/providers/amazon-bedrock.js.map +0 -1
  246. package/dist/providers/anthropic.d.ts +0 -71
  247. package/dist/providers/anthropic.d.ts.map +0 -1
  248. package/dist/providers/anthropic.js +0 -949
  249. package/dist/providers/anthropic.js.map +0 -1
  250. package/dist/providers/azure-openai-responses.d.ts +0 -15
  251. package/dist/providers/azure-openai-responses.d.ts.map +0 -1
  252. package/dist/providers/azure-openai-responses.js +0 -225
  253. package/dist/providers/azure-openai-responses.js.map +0 -1
  254. package/dist/providers/cloudflare.d.ts +0 -13
  255. package/dist/providers/cloudflare.d.ts.map +0 -1
  256. package/dist/providers/cloudflare.js +0 -26
  257. package/dist/providers/cloudflare.js.map +0 -1
  258. package/dist/providers/faux.d.ts +0 -56
  259. package/dist/providers/faux.d.ts.map +0 -1
  260. package/dist/providers/faux.js +0 -368
  261. package/dist/providers/faux.js.map +0 -1
  262. package/dist/providers/github-copilot-headers.d.ts +0 -8
  263. package/dist/providers/github-copilot-headers.d.ts.map +0 -1
  264. package/dist/providers/github-copilot-headers.js +0 -29
  265. package/dist/providers/github-copilot-headers.js.map +0 -1
  266. package/dist/providers/google-gemini-cli.d.ts +0 -74
  267. package/dist/providers/google-gemini-cli.d.ts.map +0 -1
  268. package/dist/providers/google-gemini-cli.js +0 -779
  269. package/dist/providers/google-gemini-cli.js.map +0 -1
  270. package/dist/providers/google-shared.d.ts +0 -70
  271. package/dist/providers/google-shared.d.ts.map +0 -1
  272. package/dist/providers/google-shared.js +0 -329
  273. package/dist/providers/google-shared.js.map +0 -1
  274. package/dist/providers/google-vertex.d.ts +0 -15
  275. package/dist/providers/google-vertex.d.ts.map +0 -1
  276. package/dist/providers/google-vertex.js +0 -442
  277. package/dist/providers/google-vertex.js.map +0 -1
  278. package/dist/providers/google.d.ts +0 -13
  279. package/dist/providers/google.d.ts.map +0 -1
  280. package/dist/providers/google.js +0 -400
  281. package/dist/providers/google.js.map +0 -1
  282. package/dist/providers/images/openrouter.d.ts +0 -3
  283. package/dist/providers/images/openrouter.d.ts.map +0 -1
  284. package/dist/providers/images/openrouter.js +0 -129
  285. package/dist/providers/images/openrouter.js.map +0 -1
  286. package/dist/providers/images/register-builtins.d.ts +0 -4
  287. package/dist/providers/images/register-builtins.d.ts.map +0 -1
  288. package/dist/providers/images/register-builtins.js +0 -34
  289. package/dist/providers/images/register-builtins.js.map +0 -1
  290. package/dist/providers/mistral.d.ts +0 -25
  291. package/dist/providers/mistral.d.ts.map +0 -1
  292. package/dist/providers/mistral.js +0 -535
  293. package/dist/providers/mistral.js.map +0 -1
  294. package/dist/providers/openai-codex-responses.d.ts +0 -30
  295. package/dist/providers/openai-codex-responses.d.ts.map +0 -1
  296. package/dist/providers/openai-codex-responses.js +0 -1090
  297. package/dist/providers/openai-codex-responses.js.map +0 -1
  298. package/dist/providers/openai-completions.d.ts +0 -19
  299. package/dist/providers/openai-completions.d.ts.map +0 -1
  300. package/dist/providers/openai-completions.js +0 -950
  301. package/dist/providers/openai-completions.js.map +0 -1
  302. package/dist/providers/openai-prompt-cache.d.ts +0 -3
  303. package/dist/providers/openai-prompt-cache.d.ts.map +0 -1
  304. package/dist/providers/openai-prompt-cache.js +0 -10
  305. package/dist/providers/openai-prompt-cache.js.map +0 -1
  306. package/dist/providers/openai-responses-shared.d.ts +0 -18
  307. package/dist/providers/openai-responses-shared.d.ts.map +0 -1
  308. package/dist/providers/openai-responses-shared.js +0 -492
  309. package/dist/providers/openai-responses-shared.js.map +0 -1
  310. package/dist/providers/openai-responses.d.ts +0 -13
  311. package/dist/providers/openai-responses.d.ts.map +0 -1
  312. package/dist/providers/openai-responses.js +0 -237
  313. package/dist/providers/openai-responses.js.map +0 -1
  314. package/dist/providers/register-builtins.d.ts +0 -38
  315. package/dist/providers/register-builtins.d.ts.map +0 -1
  316. package/dist/providers/register-builtins.js +0 -278
  317. package/dist/providers/register-builtins.js.map +0 -1
  318. package/dist/providers/simple-options.d.ts +0 -8
  319. package/dist/providers/simple-options.d.ts.map +0 -1
  320. package/dist/providers/simple-options.js +0 -41
  321. package/dist/providers/simple-options.js.map +0 -1
  322. package/dist/providers/transform-messages.d.ts +0 -8
  323. package/dist/providers/transform-messages.d.ts.map +0 -1
  324. package/dist/providers/transform-messages.js +0 -184
  325. package/dist/providers/transform-messages.js.map +0 -1
  326. package/dist/session-resources.d.ts +0 -4
  327. package/dist/session-resources.d.ts.map +0 -1
  328. package/dist/session-resources.js +0 -22
  329. package/dist/session-resources.js.map +0 -1
  330. package/dist/stream.d.ts +0 -8
  331. package/dist/stream.d.ts.map +0 -1
  332. package/dist/stream.js +0 -27
  333. package/dist/stream.js.map +0 -1
  334. package/dist/types.d.ts +0 -498
  335. package/dist/types.d.ts.map +0 -1
  336. package/dist/types.js +0 -2
  337. package/dist/types.js.map +0 -1
  338. package/dist/utils/diagnostics.d.ts +0 -19
  339. package/dist/utils/diagnostics.d.ts.map +0 -1
  340. package/dist/utils/diagnostics.js +0 -25
  341. package/dist/utils/diagnostics.js.map +0 -1
  342. package/dist/utils/event-stream.d.ts +0 -21
  343. package/dist/utils/event-stream.d.ts.map +0 -1
  344. package/dist/utils/event-stream.js +0 -81
  345. package/dist/utils/event-stream.js.map +0 -1
  346. package/dist/utils/hash.d.ts +0 -3
  347. package/dist/utils/hash.d.ts.map +0 -1
  348. package/dist/utils/hash.js +0 -14
  349. package/dist/utils/hash.js.map +0 -1
  350. package/dist/utils/headers.d.ts +0 -2
  351. package/dist/utils/headers.d.ts.map +0 -1
  352. package/dist/utils/headers.js +0 -8
  353. package/dist/utils/headers.js.map +0 -1
  354. package/dist/utils/json-parse.d.ts +0 -16
  355. package/dist/utils/json-parse.d.ts.map +0 -1
  356. package/dist/utils/json-parse.js +0 -113
  357. package/dist/utils/json-parse.js.map +0 -1
  358. package/dist/utils/node-http-proxy.d.ts +0 -10
  359. package/dist/utils/node-http-proxy.d.ts.map +0 -1
  360. package/dist/utils/node-http-proxy.js +0 -97
  361. package/dist/utils/node-http-proxy.js.map +0 -1
  362. package/dist/utils/oauth/anthropic.d.ts +0 -25
  363. package/dist/utils/oauth/anthropic.d.ts.map +0 -1
  364. package/dist/utils/oauth/anthropic.js +0 -335
  365. package/dist/utils/oauth/anthropic.js.map +0 -1
  366. package/dist/utils/oauth/device-code.d.ts +0 -19
  367. package/dist/utils/oauth/device-code.d.ts.map +0 -1
  368. package/dist/utils/oauth/device-code.js +0 -55
  369. package/dist/utils/oauth/device-code.js.map +0 -1
  370. package/dist/utils/oauth/github-copilot.d.ts +0 -30
  371. package/dist/utils/oauth/github-copilot.d.ts.map +0 -1
  372. package/dist/utils/oauth/github-copilot.js +0 -268
  373. package/dist/utils/oauth/github-copilot.js.map +0 -1
  374. package/dist/utils/oauth/google-antigravity.d.ts +0 -26
  375. package/dist/utils/oauth/google-antigravity.d.ts.map +0 -1
  376. package/dist/utils/oauth/google-antigravity.js +0 -377
  377. package/dist/utils/oauth/google-antigravity.js.map +0 -1
  378. package/dist/utils/oauth/google-gemini-cli.d.ts +0 -26
  379. package/dist/utils/oauth/google-gemini-cli.d.ts.map +0 -1
  380. package/dist/utils/oauth/google-gemini-cli.js +0 -482
  381. package/dist/utils/oauth/google-gemini-cli.js.map +0 -1
  382. package/dist/utils/oauth/index.d.ts +0 -63
  383. package/dist/utils/oauth/index.d.ts.map +0 -1
  384. package/dist/utils/oauth/index.js +0 -131
  385. package/dist/utils/oauth/index.js.map +0 -1
  386. package/dist/utils/oauth/oauth-page.d.ts +0 -3
  387. package/dist/utils/oauth/oauth-page.d.ts.map +0 -1
  388. package/dist/utils/oauth/oauth-page.js +0 -105
  389. package/dist/utils/oauth/oauth-page.js.map +0 -1
  390. package/dist/utils/oauth/openai-codex.d.ts +0 -34
  391. package/dist/utils/oauth/openai-codex.d.ts.map +0 -1
  392. package/dist/utils/oauth/openai-codex.js +0 -385
  393. package/dist/utils/oauth/openai-codex.js.map +0 -1
  394. package/dist/utils/oauth/pkce.d.ts +0 -13
  395. package/dist/utils/oauth/pkce.d.ts.map +0 -1
  396. package/dist/utils/oauth/pkce.js +0 -31
  397. package/dist/utils/oauth/pkce.js.map +0 -1
  398. package/dist/utils/oauth/types.d.ts +0 -64
  399. package/dist/utils/oauth/types.d.ts.map +0 -1
  400. package/dist/utils/oauth/types.js +0 -2
  401. package/dist/utils/oauth/types.js.map +0 -1
  402. package/dist/utils/overflow.d.ts +0 -56
  403. package/dist/utils/overflow.d.ts.map +0 -1
  404. package/dist/utils/overflow.js +0 -151
  405. package/dist/utils/overflow.js.map +0 -1
  406. package/dist/utils/sanitize-unicode.d.ts +0 -22
  407. package/dist/utils/sanitize-unicode.d.ts.map +0 -1
  408. package/dist/utils/sanitize-unicode.js +0 -26
  409. package/dist/utils/sanitize-unicode.js.map +0 -1
  410. package/dist/utils/typebox-helpers.d.ts +0 -17
  411. package/dist/utils/typebox-helpers.d.ts.map +0 -1
  412. package/dist/utils/typebox-helpers.js +0 -21
  413. package/dist/utils/typebox-helpers.js.map +0 -1
  414. package/dist/utils/validation.d.ts +0 -18
  415. package/dist/utils/validation.d.ts.map +0 -1
  416. package/dist/utils/validation.js +0 -281
  417. package/dist/utils/validation.js.map +0 -1
@@ -0,0 +1,138 @@
1
+ /**
2
+ * Shared implementation for providers that expose BOTH an OpenAI-compatible
3
+ * and an Anthropic-compatible API surface against the same model catalog
4
+ * (currently Kimi Code and Synthetic).
5
+ *
6
+ * Each call site supplies the provider-specific bits (base URLs, default
7
+ * format, optional extra headers); the streaming/forwarding plumbing lives
8
+ * here once.
9
+ */
10
+
11
+ import { ANTHROPIC_THINKING } from "../stream";
12
+ import type { Context, Model, SimpleStreamOptions } from "../types";
13
+ import { AssistantMessageEventStream } from "../utils/event-stream";
14
+ import { createProviderErrorMessage } from "./error-message";
15
+ import { streamAnthropic, streamOpenAICompletions } from "./register-builtins";
16
+
17
+ export type OpenAIAnthropicApiFormat = "openai" | "anthropic";
18
+
19
+ export interface OpenAIAnthropicShimOptions extends SimpleStreamOptions {
20
+ /** API format: "openai" or "anthropic". */
21
+ format?: OpenAIAnthropicApiFormat;
22
+ }
23
+
24
+ export interface OpenAIAnthropicShimConfig {
25
+ /** Base URL for the Anthropic-compatible endpoint (without trailing /v1/messages). */
26
+ anthropicBaseUrl: string;
27
+ /** Optional override for the OpenAI-compatible base URL. If omitted, `model.baseUrl` is used as-is. */
28
+ openaiBaseUrl?: string;
29
+ /** Default API format when caller does not specify one. */
30
+ defaultFormat: OpenAIAnthropicApiFormat;
31
+ /** Provider-specific headers (e.g. auth/session) merged ahead of user-supplied headers. */
32
+ extraHeaders?: () => Record<string, string>;
33
+ }
34
+
35
+ /**
36
+ * Stream from an OpenAI-or-Anthropic compatible provider. Returns synchronously;
37
+ * async header fetching and stream piping happen internally.
38
+ */
39
+ export function streamOpenAIAnthropicShim(
40
+ model: Model<"openai-completions">,
41
+ context: Context,
42
+ options: OpenAIAnthropicShimOptions | undefined,
43
+ config: OpenAIAnthropicShimConfig,
44
+ ): AssistantMessageEventStream {
45
+ const stream = new AssistantMessageEventStream();
46
+ const format = options?.format ?? config.defaultFormat;
47
+
48
+ (async () => {
49
+ try {
50
+ const mergedHeaders = {
51
+ ...(config.extraHeaders?.() ?? {}),
52
+ ...options?.headers,
53
+ };
54
+
55
+ if (format === "anthropic") {
56
+ const anthropicModel: Model<"anthropic-messages"> = {
57
+ id: model.id,
58
+ name: model.name,
59
+ api: "anthropic-messages",
60
+ provider: model.provider,
61
+ baseUrl: config.anthropicBaseUrl,
62
+ headers: mergedHeaders,
63
+ contextWindow: model.contextWindow,
64
+ maxTokens: model.maxTokens,
65
+ reasoning: model.reasoning,
66
+ input: model.input,
67
+ cost: model.cost,
68
+ };
69
+
70
+ const reasoningEffort = options?.reasoning;
71
+ const thinkingEnabled = !!reasoningEffort && model.reasoning;
72
+ const thinkingBudget = reasoningEffort
73
+ ? (options?.thinkingBudgets?.[reasoningEffort] ?? ANTHROPIC_THINKING[reasoningEffort])
74
+ : undefined;
75
+
76
+ const innerStream = streamAnthropic(anthropicModel, context, {
77
+ apiKey: options?.apiKey,
78
+ temperature: options?.temperature,
79
+ topP: options?.topP,
80
+ topK: options?.topK,
81
+ minP: options?.minP,
82
+ presencePenalty: options?.presencePenalty,
83
+ repetitionPenalty: options?.repetitionPenalty,
84
+ maxTokens: options?.maxTokens ?? Math.min(model.maxTokens, 32000),
85
+ signal: options?.signal,
86
+ headers: mergedHeaders,
87
+ sessionId: options?.sessionId,
88
+ onPayload: options?.onPayload,
89
+ onResponse: options?.onResponse,
90
+ onSseEvent: options?.onSseEvent,
91
+ fetch: options?.fetch,
92
+ thinkingEnabled,
93
+ thinkingBudgetTokens: thinkingBudget,
94
+ });
95
+
96
+ for await (const event of innerStream) {
97
+ stream.push(event);
98
+ }
99
+ } else {
100
+ const openaiModel: Model<"openai-completions"> = config.openaiBaseUrl
101
+ ? { ...model, baseUrl: config.openaiBaseUrl, headers: mergedHeaders }
102
+ : model;
103
+
104
+ const reasoningEffort = options?.reasoning;
105
+ const innerStream = streamOpenAICompletions(openaiModel, context, {
106
+ apiKey: options?.apiKey,
107
+ temperature: options?.temperature,
108
+ topP: options?.topP,
109
+ topK: options?.topK,
110
+ minP: options?.minP,
111
+ presencePenalty: options?.presencePenalty,
112
+ repetitionPenalty: options?.repetitionPenalty,
113
+ maxTokens: options?.maxTokens ?? model.maxTokens,
114
+ signal: options?.signal,
115
+ headers: mergedHeaders,
116
+ sessionId: options?.sessionId,
117
+ onPayload: options?.onPayload,
118
+ onResponse: options?.onResponse,
119
+ onSseEvent: options?.onSseEvent,
120
+ fetch: options?.fetch,
121
+ reasoning: reasoningEffort,
122
+ });
123
+
124
+ for await (const event of innerStream) {
125
+ stream.push(event);
126
+ }
127
+ }
128
+ } catch (err) {
129
+ stream.push({
130
+ type: "error",
131
+ reason: "error",
132
+ error: createProviderErrorMessage(model, err),
133
+ });
134
+ }
135
+ })();
136
+
137
+ return stream;
138
+ }
@@ -0,0 +1,252 @@
1
+ /**
2
+ * Zod schemas for the OpenAI chat-completions request shape we accept on the
3
+ * gateway. Mirrors https://platform.openai.com/docs/api-reference/chat — only
4
+ * the shapes the gateway translation layer understands. Unknown fields on
5
+ * permissive objects are accepted-and-stripped (via `z.unknown()` passthroughs
6
+ * or `.loose()`) so the official OpenAI SDK — which sends a growing pile of
7
+ * non-strict defaults (e.g. `stream_options.include_obfuscation`) — does not
8
+ * trip 400s on shapes we simply ignore.
9
+ */
10
+ import type {
11
+ ChatCompletionContentPart,
12
+ ChatCompletionCreateParams,
13
+ ChatCompletionMessageParam,
14
+ ChatCompletionMessageToolCall,
15
+ ChatCompletionTool,
16
+ ChatCompletionToolChoiceOption,
17
+ } from "openai/resources/chat/completions";
18
+ import * as z from "zod/v4";
19
+
20
+ // ─── User-message content parts ─────────────────────────────────────────────
21
+
22
+ export const textPartSchema = z.object({
23
+ type: z.literal("text"),
24
+ text: z.string(),
25
+ });
26
+
27
+ /**
28
+ * OpenAI documents `image_url` as either `{ url: string, detail?: ... }` or —
29
+ * older clients — a bare string. Accept both shapes; downstream we extract a
30
+ * URL. `detail` is accepted for forward-compat but currently dropped (aery-ai's
31
+ * `ImageContent` has no detail field — TODO: plumb through if/when added).
32
+ */
33
+ export const imagePartSchema = z.object({
34
+ type: z.literal("image_url"),
35
+ image_url: z.union([
36
+ z.string(),
37
+ z.object({
38
+ url: z.string(),
39
+ detail: z.enum(["auto", "low", "high"]).optional(),
40
+ }),
41
+ ]),
42
+ });
43
+
44
+ /** OpenAI audio input block (gpt-4o-audio). Accepted; currently dropped downstream. */
45
+ export const inputAudioPartSchema = z.object({
46
+ type: z.literal("input_audio"),
47
+ input_audio: z.object({
48
+ data: z.string(),
49
+ format: z.enum(["wav", "mp3"]),
50
+ }),
51
+ });
52
+
53
+ /** OpenAI file input block (file_search / vision-document). Accepted; currently dropped downstream. */
54
+ export const filePartSchema = z.object({
55
+ type: z.literal("file"),
56
+ file: z.object({
57
+ file_id: z.string().optional(),
58
+ filename: z.string().optional(),
59
+ file_data: z.string().optional(),
60
+ }),
61
+ });
62
+
63
+ /** Replayed assistant refusal block. Accepted; currently dropped downstream. */
64
+ export const refusalPartSchema = z.object({
65
+ type: z.literal("refusal"),
66
+ refusal: z.string(),
67
+ });
68
+
69
+ /**
70
+ * Forward-compat catch-all for unknown content-part types. Matches every other
71
+ * `{ type: string, ... }` object so a new OpenAI block kind does not 400 the
72
+ * whole request; the walker ignores parts whose `type` it does not know.
73
+ */
74
+ export const unknownPartSchema = z.object({ type: z.string() }).loose();
75
+
76
+ export const userContentPartSchema = z.union([
77
+ textPartSchema,
78
+ imagePartSchema,
79
+ inputAudioPartSchema,
80
+ filePartSchema,
81
+ refusalPartSchema,
82
+ unknownPartSchema,
83
+ ]);
84
+
85
+ // ─── Tool calls / tools ─────────────────────────────────────────────────────
86
+
87
+ export const toolCallSchema = z.object({
88
+ id: z.string(),
89
+ type: z.literal("function").optional(),
90
+ function: z.object({
91
+ name: z.string(),
92
+ arguments: z.string(),
93
+ }),
94
+ });
95
+
96
+ export const toolSchema = z.object({
97
+ type: z.literal("function"),
98
+ function: z.object({
99
+ name: z.string().min(1),
100
+ description: z.string().optional(),
101
+ parameters: z.record(z.string(), z.unknown()).optional(),
102
+ /** OpenAI structured-output strict mode. Accepted, not enforced upstream. */
103
+ strict: z.boolean().optional(),
104
+ }),
105
+ });
106
+
107
+ // ─── Tool choice ────────────────────────────────────────────────────────────
108
+
109
+ export const toolChoiceSchema = z.union([
110
+ z.literal("auto"),
111
+ z.literal("none"),
112
+ z.literal("required"),
113
+ z.object({
114
+ type: z.literal("function"),
115
+ function: z.object({ name: z.string().min(1) }),
116
+ }),
117
+ // Anthropic-style `{ type: 'tool', name }` — translated to the OpenAI
118
+ // function shape in the walker.
119
+ z.object({
120
+ type: z.literal("tool"),
121
+ name: z.string().min(1),
122
+ }),
123
+ ]);
124
+
125
+ // ─── Messages ───────────────────────────────────────────────────────────────
126
+
127
+ const baseContent = z.union([z.string(), z.array(userContentPartSchema)]);
128
+
129
+ export const systemMessageSchema = z.object({
130
+ role: z.literal("system"),
131
+ content: baseContent,
132
+ });
133
+
134
+ export const developerMessageSchema = z.object({
135
+ role: z.literal("developer"),
136
+ content: baseContent,
137
+ });
138
+
139
+ export const userMessageSchema = z.object({
140
+ role: z.literal("user"),
141
+ content: baseContent,
142
+ });
143
+
144
+ export const assistantMessageSchema = z.object({
145
+ role: z.literal("assistant"),
146
+ content: baseContent.optional(),
147
+ tool_calls: z.array(toolCallSchema).optional(),
148
+ });
149
+
150
+ export const toolMessageSchema = z.object({
151
+ role: z.literal("tool"),
152
+ content: baseContent.optional(),
153
+ tool_call_id: z.string().optional(),
154
+ // OpenAI's wire spec omits `name` on `role:"tool"`, but in practice the
155
+ // official Python SDK and several wrappers do send it. Accept it so we can
156
+ // honour it downstream (Google's `functionResponse.name` is required and
157
+ // non-empty); empty strings are coerced to undefined so the back-resolve
158
+ // path runs.
159
+ name: z
160
+ .string()
161
+ .optional()
162
+ .transform(v => (v && v.length > 0 ? v : undefined)),
163
+ });
164
+
165
+ /**
166
+ * Legacy `function` role (pre-tools API). Translated to a `tool` role
167
+ * canonical message in the walker so downstream providers see one shape.
168
+ */
169
+ export const functionMessageSchema = z.object({
170
+ role: z.literal("function"),
171
+ name: z.string(),
172
+ content: z.string().nullable(),
173
+ });
174
+
175
+ export const messageSchema = z.discriminatedUnion("role", [
176
+ systemMessageSchema,
177
+ developerMessageSchema,
178
+ userMessageSchema,
179
+ assistantMessageSchema,
180
+ toolMessageSchema,
181
+ functionMessageSchema,
182
+ ]);
183
+
184
+ // ─── Stream options ─────────────────────────────────────────────────────────
185
+
186
+ /**
187
+ * Permissive: the official OpenAI SDK sets `include_obfuscation: false` by
188
+ * default. We only consume `include_usage`, so unknown keys are silently
189
+ * stripped rather than 400'd.
190
+ */
191
+ export const streamOptionsSchema = z.object({
192
+ include_usage: z.boolean().optional(),
193
+ });
194
+
195
+ // ─── Stop sequences ─────────────────────────────────────────────────────────
196
+
197
+ // OpenAI rejects > 4 stop strings; mirror that at the gateway.
198
+ export const stopSchema = z.union([z.string(), z.array(z.string()).max(4)]);
199
+
200
+ // ─── Top-level request ──────────────────────────────────────────────────────
201
+
202
+ export const openaiChatRequestSchema = z.object({
203
+ model: z.string().min(1),
204
+ messages: z.array(messageSchema),
205
+ tools: z.array(toolSchema).optional(),
206
+ tool_choice: toolChoiceSchema.optional(),
207
+ max_tokens: z.number().optional(),
208
+ max_completion_tokens: z.number().optional(),
209
+ temperature: z.number().optional(),
210
+ top_p: z.number().optional(),
211
+ stop: stopSchema.optional(),
212
+ stream: z.boolean().optional(),
213
+ stream_options: streamOptionsSchema.optional(),
214
+
215
+ // ── Typed first-class passthroughs (now consumed by the walker) ────────
216
+ response_format: z.unknown().optional(),
217
+ seed: z.number().optional(),
218
+ presence_penalty: z.number().optional(),
219
+ frequency_penalty: z.number().optional(),
220
+ logit_bias: z.record(z.string(), z.number()).optional(),
221
+ user: z.string().optional(),
222
+ reasoning_effort: z.enum(["minimal", "low", "medium", "high", "xhigh"]).optional(),
223
+ parallel_tool_calls: z.boolean().optional(),
224
+ service_tier: z.enum(["auto", "default", "flex", "scale", "priority"]).optional(),
225
+ metadata: z.record(z.string(), z.unknown()).optional(),
226
+
227
+ // ── Accept-and-ignore passthroughs ─────────────────────────────────────
228
+ // Forward acceptance only: validating these would 400 on shapes the
229
+ // gateway has no opinion on. The downstream provider does the real check.
230
+ logprobs: z.unknown().optional(),
231
+ top_logprobs: z.unknown().optional(),
232
+ prediction: z.unknown().optional(),
233
+ modalities: z.unknown().optional(),
234
+ audio: z.unknown().optional(),
235
+ store: z.unknown().optional(),
236
+ prompt_cache_key: z.unknown().optional(),
237
+ safety_identifier: z.unknown().optional(),
238
+ n: z.unknown().optional(),
239
+ web_search_options: z.unknown().optional(),
240
+ });
241
+
242
+ /**
243
+ * Public types are sourced from the OpenAI SDK so the gateway stays in
244
+ * lock-step with the canonical API surface; the schemas above are runtime
245
+ * validators for the subset we actually accept.
246
+ */
247
+ export type OpenAIChatRequest = ChatCompletionCreateParams;
248
+ export type OpenAIChatMessage = ChatCompletionMessageParam;
249
+ export type OpenAIChatToolCall = ChatCompletionMessageToolCall;
250
+ export type OpenAIChatTool = ChatCompletionTool;
251
+ export type OpenAIChatToolChoice = ChatCompletionToolChoiceOption;
252
+ export type OpenAIChatContentPart = ChatCompletionContentPart;