@vib-rato/ai 0.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (525) hide show
  1. package/CHANGELOG.md +3354 -0
  2. package/README.md +1194 -0
  3. package/dist/types/adapter-internals/provider-safety-stop.d.ts +45 -0
  4. package/dist/types/api-registry.d.ts +30 -0
  5. package/dist/types/auth-broker/client.d.ts +80 -0
  6. package/dist/types/auth-broker/index.d.ts +5 -0
  7. package/dist/types/auth-broker/redact.d.ts +7 -0
  8. package/dist/types/auth-broker/refresher.d.ts +25 -0
  9. package/dist/types/auth-broker/remote-store.d.ts +153 -0
  10. package/dist/types/auth-broker/server.d.ts +32 -0
  11. package/dist/types/auth-broker/types.d.ts +132 -0
  12. package/dist/types/auth-broker/wire-schemas.d.ts +555 -0
  13. package/dist/types/auth-gateway/http.d.ts +40 -0
  14. package/dist/types/auth-gateway/index.d.ts +3 -0
  15. package/dist/types/auth-gateway/server.d.ts +70 -0
  16. package/dist/types/auth-gateway/types.d.ts +129 -0
  17. package/dist/types/auth-storage.d.ts +1074 -0
  18. package/dist/types/cli.d.ts +2 -0
  19. package/dist/types/codex-tools.d.ts +4 -0
  20. package/dist/types/context-cap-policy.d.ts +68 -0
  21. package/dist/types/core.d.ts +35 -0
  22. package/dist/types/index.d.ts +55 -0
  23. package/dist/types/model-cache.d.ts +24 -0
  24. package/dist/types/model-manager.d.ts +77 -0
  25. package/dist/types/model-pricing.d.ts +3 -0
  26. package/dist/types/model-retirements.d.ts +6 -0
  27. package/dist/types/model-thinking.d.ts +100 -0
  28. package/dist/types/models.d.ts +21 -0
  29. package/dist/types/openai-completions-compat.d.ts +34 -0
  30. package/dist/types/provider-details.d.ts +24 -0
  31. package/dist/types/provider-models/bundled-references.d.ts +4 -0
  32. package/dist/types/provider-models/descriptors.d.ts +48 -0
  33. package/dist/types/provider-models/google.d.ts +20 -0
  34. package/dist/types/provider-models/index.d.ts +5 -0
  35. package/dist/types/provider-models/ollama.d.ts +7 -0
  36. package/dist/types/provider-models/openai-compat.d.ts +293 -0
  37. package/dist/types/provider-models/special.d.ts +29 -0
  38. package/dist/types/providers/amazon-bedrock.d.ts +60 -0
  39. package/dist/types/providers/anthropic-messages-server-schema.d.ts +450 -0
  40. package/dist/types/providers/anthropic-messages-server.d.ts +17 -0
  41. package/dist/types/providers/anthropic.d.ts +280 -0
  42. package/dist/types/providers/aws-credential-config.d.ts +19 -0
  43. package/dist/types/providers/aws-credentials.d.ts +43 -0
  44. package/dist/types/providers/aws-eventstream.d.ts +38 -0
  45. package/dist/types/providers/aws-sigv4.d.ts +55 -0
  46. package/dist/types/providers/azure-openai-responses.d.ts +22 -0
  47. package/dist/types/providers/composer-discipline.d.ts +32 -0
  48. package/dist/types/providers/cursor/client-version.d.ts +10 -0
  49. package/dist/types/providers/cursor/exec-modern.d.ts +98 -0
  50. package/dist/types/providers/cursor/gen/agent_pb.d.ts +16769 -0
  51. package/dist/types/providers/cursor-pi-args.d.ts +119 -0
  52. package/dist/types/providers/cursor.d.ts +72 -0
  53. package/dist/types/providers/dashscope-token-plan-headers.d.ts +57 -0
  54. package/dist/types/providers/error-message.d.ts +27 -0
  55. package/dist/types/providers/github-copilot-headers.d.ts +40 -0
  56. package/dist/types/providers/gitlab-duo.d.ts +27 -0
  57. package/dist/types/providers/google-auth.d.ts +26 -0
  58. package/dist/types/providers/google-gemini-cli.d.ts +75 -0
  59. package/dist/types/providers/google-gemini-headers.d.ts +43 -0
  60. package/dist/types/providers/google-shared.d.ts +183 -0
  61. package/dist/types/providers/google-types.d.ts +138 -0
  62. package/dist/types/providers/google-vertex.d.ts +11 -0
  63. package/dist/types/providers/google.d.ts +4 -0
  64. package/dist/types/providers/grammar.d.ts +1 -0
  65. package/dist/types/providers/kimi.d.ts +27 -0
  66. package/dist/types/providers/kiro-api-key.d.ts +50 -0
  67. package/dist/types/providers/kiro-codewhisperer.d.ts +11 -0
  68. package/dist/types/providers/mock.d.ts +189 -0
  69. package/dist/types/providers/ollama.d.ts +41 -0
  70. package/dist/types/providers/openai-anthropic-shim.d.ts +31 -0
  71. package/dist/types/providers/openai-bounded-rate-limits.d.ts +3 -0
  72. package/dist/types/providers/openai-chat-server-schema.d.ts +1733 -0
  73. package/dist/types/providers/openai-chat-server.d.ts +16 -0
  74. package/dist/types/providers/openai-codex/constants.d.ts +26 -0
  75. package/dist/types/providers/openai-codex/request-transformer.d.ts +50 -0
  76. package/dist/types/providers/openai-codex/response-handler.d.ts +18 -0
  77. package/dist/types/providers/openai-codex-responses.d.ts +71 -0
  78. package/dist/types/providers/openai-completions-compat.d.ts +6 -0
  79. package/dist/types/providers/openai-completions.d.ts +35 -0
  80. package/dist/types/providers/openai-opencodex-responses.d.ts +10 -0
  81. package/dist/types/providers/openai-request-transform.d.ts +4 -0
  82. package/dist/types/providers/openai-responses-server-schema.d.ts +392 -0
  83. package/dist/types/providers/openai-responses-server.d.ts +17 -0
  84. package/dist/types/providers/openai-responses-shared.d.ts +106 -0
  85. package/dist/types/providers/openai-responses.d.ts +37 -0
  86. package/dist/types/providers/pi-native-client.d.ts +29 -0
  87. package/dist/types/providers/pi-native-server.d.ts +60 -0
  88. package/dist/types/providers/register-builtins.d.ts +59 -0
  89. package/dist/types/providers/synthetic.d.ts +26 -0
  90. package/dist/types/providers/transform-messages.d.ts +33 -0
  91. package/dist/types/providers/vision-guard.d.ts +8 -0
  92. package/dist/types/rate-limit-utils.d.ts +19 -0
  93. package/dist/types/stream.d.ts +45 -0
  94. package/dist/types/types.d.ts +1073 -0
  95. package/dist/types/usage/claude.d.ts +3 -0
  96. package/dist/types/usage/gemini.d.ts +2 -0
  97. package/dist/types/usage/github-copilot.d.ts +7 -0
  98. package/dist/types/usage/google-antigravity.d.ts +2 -0
  99. package/dist/types/usage/grok-cli.d.ts +17 -0
  100. package/dist/types/usage/kimi.d.ts +4 -0
  101. package/dist/types/usage/minimax-code.d.ts +2 -0
  102. package/dist/types/usage/openai-codex.d.ts +3 -0
  103. package/dist/types/usage/shared.d.ts +1 -0
  104. package/dist/types/usage/zai.d.ts +2 -0
  105. package/dist/types/usage.d.ts +264 -0
  106. package/dist/types/utils/abort.d.ts +19 -0
  107. package/dist/types/utils/anthropic-auth.d.ts +39 -0
  108. package/dist/types/utils/block-symbols.d.ts +6 -0
  109. package/dist/types/utils/discovery/antigravity.d.ts +67 -0
  110. package/dist/types/utils/discovery/codex.d.ts +38 -0
  111. package/dist/types/utils/discovery/cursor.d.ts +49 -0
  112. package/dist/types/utils/discovery/gemini.d.ts +25 -0
  113. package/dist/types/utils/discovery/index.d.ts +4 -0
  114. package/dist/types/utils/discovery/openai-compatible.d.ts +81 -0
  115. package/dist/types/utils/event-stream.d.ts +41 -0
  116. package/dist/types/utils/fallback-transport.d.ts +110 -0
  117. package/dist/types/utils/fireworks-model-id.d.ts +10 -0
  118. package/dist/types/utils/foundry.d.ts +11 -0
  119. package/dist/types/utils/h2-fetch.d.ts +22 -0
  120. package/dist/types/utils/http-inspector.d.ts +59 -0
  121. package/dist/types/utils/idle-iterator.d.ts +122 -0
  122. package/dist/types/utils/json-parse.d.ts +98 -0
  123. package/dist/types/utils/oauth/alibaba-token-plan.d.ts +19 -0
  124. package/dist/types/utils/oauth/anthropic.d.ts +41 -0
  125. package/dist/types/utils/oauth/api-key-login.d.ts +38 -0
  126. package/dist/types/utils/oauth/api-key-validation.d.ts +39 -0
  127. package/dist/types/utils/oauth/bizrouter.d.ts +1 -0
  128. package/dist/types/utils/oauth/callback-server.d.ts +80 -0
  129. package/dist/types/utils/oauth/cerebras.d.ts +1 -0
  130. package/dist/types/utils/oauth/cloudflare-ai-gateway.d.ts +18 -0
  131. package/dist/types/utils/oauth/commandcode.d.ts +1 -0
  132. package/dist/types/utils/oauth/cursor.d.ts +15 -0
  133. package/dist/types/utils/oauth/deepinfra.d.ts +1 -0
  134. package/dist/types/utils/oauth/deepseek.d.ts +10 -0
  135. package/dist/types/utils/oauth/firepass.d.ts +1 -0
  136. package/dist/types/utils/oauth/fireworks.d.ts +1 -0
  137. package/dist/types/utils/oauth/fugu.d.ts +1 -0
  138. package/dist/types/utils/oauth/github-copilot.d.ts +38 -0
  139. package/dist/types/utils/oauth/gitlab-duo.d.ts +3 -0
  140. package/dist/types/utils/oauth/glm-zcode.d.ts +71 -0
  141. package/dist/types/utils/oauth/google-antigravity.d.ts +11 -0
  142. package/dist/types/utils/oauth/google-gemini-cli.d.ts +10 -0
  143. package/dist/types/utils/oauth/google-oauth-shared.d.ts +28 -0
  144. package/dist/types/utils/oauth/huggingface.d.ts +19 -0
  145. package/dist/types/utils/oauth/index.d.ts +39 -0
  146. package/dist/types/utils/oauth/kagi.d.ts +17 -0
  147. package/dist/types/utils/oauth/kilo.d.ts +5 -0
  148. package/dist/types/utils/oauth/kimi.d.ts +17 -0
  149. package/dist/types/utils/oauth/kiro.d.ts +71 -0
  150. package/dist/types/utils/oauth/litellm.d.ts +18 -0
  151. package/dist/types/utils/oauth/lm-studio.d.ts +17 -0
  152. package/dist/types/utils/oauth/mara.d.ts +1 -0
  153. package/dist/types/utils/oauth/minimax-code.d.ts +28 -0
  154. package/dist/types/utils/oauth/moonshot.d.ts +1 -0
  155. package/dist/types/utils/oauth/nanogpt.d.ts +1 -0
  156. package/dist/types/utils/oauth/nvidia.d.ts +18 -0
  157. package/dist/types/utils/oauth/ollama-cloud.d.ts +2 -0
  158. package/dist/types/utils/oauth/ollama.d.ts +18 -0
  159. package/dist/types/utils/oauth/openai-codex.d.ts +21 -0
  160. package/dist/types/utils/oauth/opencode.d.ts +18 -0
  161. package/dist/types/utils/oauth/opengateway.d.ts +1 -0
  162. package/dist/types/utils/oauth/openrouter.d.ts +1 -0
  163. package/dist/types/utils/oauth/parallel.d.ts +17 -0
  164. package/dist/types/utils/oauth/perplexity.d.ts +4 -0
  165. package/dist/types/utils/oauth/pkce.d.ts +8 -0
  166. package/dist/types/utils/oauth/qianfan.d.ts +17 -0
  167. package/dist/types/utils/oauth/qwen-portal.d.ts +19 -0
  168. package/dist/types/utils/oauth/sglang.d.ts +16 -0
  169. package/dist/types/utils/oauth/synthetic.d.ts +1 -0
  170. package/dist/types/utils/oauth/tavily.d.ts +17 -0
  171. package/dist/types/utils/oauth/together.d.ts +1 -0
  172. package/dist/types/utils/oauth/types.d.ts +56 -0
  173. package/dist/types/utils/oauth/venice.d.ts +18 -0
  174. package/dist/types/utils/oauth/vercel-ai-gateway.d.ts +18 -0
  175. package/dist/types/utils/oauth/vllm.d.ts +16 -0
  176. package/dist/types/utils/oauth/xai.d.ts +30 -0
  177. package/dist/types/utils/oauth/xiaomi.d.ts +25 -0
  178. package/dist/types/utils/oauth/zai.d.ts +18 -0
  179. package/dist/types/utils/oauth/zenmux.d.ts +1 -0
  180. package/dist/types/utils/overflow.d.ts +14 -0
  181. package/dist/types/utils/parse-bind.d.ts +26 -0
  182. package/dist/types/utils/provider-response.d.ts +6 -0
  183. package/dist/types/utils/provider-safety-stop.d.ts +8 -0
  184. package/dist/types/utils/proxy.d.ts +7 -0
  185. package/dist/types/utils/retry-after.d.ts +3 -0
  186. package/dist/types/utils/retry-budget.d.ts +1 -0
  187. package/dist/types/utils/retry.d.ts +29 -0
  188. package/dist/types/utils/schema/adapt.d.ts +24 -0
  189. package/dist/types/utils/schema/compatibility.d.ts +30 -0
  190. package/dist/types/utils/schema/dereference.d.ts +11 -0
  191. package/dist/types/utils/schema/draft.d.ts +10 -0
  192. package/dist/types/utils/schema/equality.d.ts +4 -0
  193. package/dist/types/utils/schema/fields.d.ts +49 -0
  194. package/dist/types/utils/schema/index.d.ts +14 -0
  195. package/dist/types/utils/schema/json-schema-validator.d.ts +12 -0
  196. package/dist/types/utils/schema/meta-validator.d.ts +2 -0
  197. package/dist/types/utils/schema/normalize.d.ts +93 -0
  198. package/dist/types/utils/schema/root-combinator.d.ts +12 -0
  199. package/dist/types/utils/schema/spill.d.ts +8 -0
  200. package/dist/types/utils/schema/stamps.d.ts +25 -0
  201. package/dist/types/utils/schema/types.d.ts +4 -0
  202. package/dist/types/utils/schema/wire.d.ts +54 -0
  203. package/dist/types/utils/schema/zod-decontaminate.d.ts +31 -0
  204. package/dist/types/utils/sse-debug.d.ts +10 -0
  205. package/dist/types/utils/tool-call-healing.d.ts +80 -0
  206. package/dist/types/utils/tool-choice-capability.d.ts +57 -0
  207. package/dist/types/utils/tool-choice.d.ts +50 -0
  208. package/dist/types/utils/validation.d.ts +17 -0
  209. package/dist/types/utils.d.ts +117 -0
  210. package/package.json +152 -0
  211. package/src/adapter-internals/provider-safety-stop.d.ts +45 -0
  212. package/src/adapter-internals/provider-safety-stop.ts +156 -0
  213. package/src/api-registry.d.ts +30 -0
  214. package/src/api-registry.ts +96 -0
  215. package/src/auth-broker/client.ts +444 -0
  216. package/src/auth-broker/index.ts +5 -0
  217. package/src/auth-broker/redact.ts +39 -0
  218. package/src/auth-broker/refresher.ts +130 -0
  219. package/src/auth-broker/remote-store.ts +1576 -0
  220. package/src/auth-broker/server.ts +764 -0
  221. package/src/auth-broker/types.ts +164 -0
  222. package/src/auth-broker/wire-schemas.ts +261 -0
  223. package/src/auth-gateway/http.ts +198 -0
  224. package/src/auth-gateway/index.ts +3 -0
  225. package/src/auth-gateway/server.ts +1315 -0
  226. package/src/auth-gateway/types.ts +160 -0
  227. package/src/auth-storage.ts +7312 -0
  228. package/src/cli.ts +269 -0
  229. package/src/codex-tools.d.ts +4 -0
  230. package/src/codex-tools.ts +24 -0
  231. package/src/context-cap-policy.d.ts +68 -0
  232. package/src/context-cap-policy.ts +123 -0
  233. package/src/core.ts +44 -0
  234. package/src/index.ts +61 -0
  235. package/src/model-cache.ts +236 -0
  236. package/src/model-manager.ts +744 -0
  237. package/src/model-pricing.d.ts +3 -0
  238. package/src/model-pricing.ts +68 -0
  239. package/src/model-retirements.d.ts +6 -0
  240. package/src/model-retirements.ts +19 -0
  241. package/src/model-thinking.d.ts +100 -0
  242. package/src/model-thinking.ts +1054 -0
  243. package/src/models.d.ts +21 -0
  244. package/src/models.json +94672 -0
  245. package/src/models.json.d.ts +9 -0
  246. package/src/models.ts +126 -0
  247. package/src/openai-completions-compat.d.ts +34 -0
  248. package/src/openai-completions-compat.ts +383 -0
  249. package/src/prompts/composer-bash-policy-recovery.md +1 -0
  250. package/src/prompts/cursor-composer-bash-policy-recovery.md +1 -0
  251. package/src/prompts/cursor-composer-edit-discipline.md +7 -0
  252. package/src/prompts/turn-aborted-guidance.md +4 -0
  253. package/src/provider-details.ts +90 -0
  254. package/src/provider-models/bundled-references.ts +38 -0
  255. package/src/provider-models/descriptors.ts +392 -0
  256. package/src/provider-models/google.ts +92 -0
  257. package/src/provider-models/index.ts +5 -0
  258. package/src/provider-models/ollama.ts +159 -0
  259. package/src/provider-models/openai-compat.ts +2920 -0
  260. package/src/provider-models/special.ts +185 -0
  261. package/src/providers/amazon-bedrock.d.ts +60 -0
  262. package/src/providers/amazon-bedrock.ts +939 -0
  263. package/src/providers/anthropic-messages-server-schema.ts +229 -0
  264. package/src/providers/anthropic-messages-server.ts +839 -0
  265. package/src/providers/anthropic.d.ts +280 -0
  266. package/src/providers/anthropic.ts +4421 -0
  267. package/src/providers/aws-credential-config.d.ts +19 -0
  268. package/src/providers/aws-credential-config.ts +179 -0
  269. package/src/providers/aws-credentials.d.ts +43 -0
  270. package/src/providers/aws-credentials.ts +457 -0
  271. package/src/providers/aws-eventstream.d.ts +38 -0
  272. package/src/providers/aws-eventstream.ts +185 -0
  273. package/src/providers/aws-sigv4.d.ts +55 -0
  274. package/src/providers/aws-sigv4.ts +218 -0
  275. package/src/providers/azure-openai-responses.d.ts +22 -0
  276. package/src/providers/azure-openai-responses.ts +447 -0
  277. package/src/providers/composer-discipline.d.ts +32 -0
  278. package/src/providers/composer-discipline.ts +95 -0
  279. package/src/providers/cursor/client-version.d.ts +10 -0
  280. package/src/providers/cursor/client-version.ts +10 -0
  281. package/src/providers/cursor/exec-modern.d.ts +98 -0
  282. package/src/providers/cursor/exec-modern.ts +497 -0
  283. package/src/providers/cursor/gen/agent_pb.d.ts +16769 -0
  284. package/src/providers/cursor/gen/agent_pb.ts +19780 -0
  285. package/src/providers/cursor/proto/agent.proto +4533 -0
  286. package/src/providers/cursor/proto/buf.gen.yaml +6 -0
  287. package/src/providers/cursor/proto/buf.yaml +17 -0
  288. package/src/providers/cursor-pi-args.d.ts +119 -0
  289. package/src/providers/cursor-pi-args.ts +187 -0
  290. package/src/providers/cursor.d.ts +72 -0
  291. package/src/providers/cursor.ts +3396 -0
  292. package/src/providers/dashscope-token-plan-headers.d.ts +57 -0
  293. package/src/providers/dashscope-token-plan-headers.ts +84 -0
  294. package/src/providers/error-message.d.ts +27 -0
  295. package/src/providers/error-message.ts +21 -0
  296. package/src/providers/github-copilot-headers.d.ts +40 -0
  297. package/src/providers/github-copilot-headers.ts +140 -0
  298. package/src/providers/gitlab-duo.d.ts +27 -0
  299. package/src/providers/gitlab-duo.ts +393 -0
  300. package/src/providers/google-auth.d.ts +26 -0
  301. package/src/providers/google-auth.ts +262 -0
  302. package/src/providers/google-gemini-cli.d.ts +75 -0
  303. package/src/providers/google-gemini-cli.ts +969 -0
  304. package/src/providers/google-gemini-headers.d.ts +43 -0
  305. package/src/providers/google-gemini-headers.ts +100 -0
  306. package/src/providers/google-shared.d.ts +183 -0
  307. package/src/providers/google-shared.ts +1105 -0
  308. package/src/providers/google-types.d.ts +138 -0
  309. package/src/providers/google-types.ts +167 -0
  310. package/src/providers/google-vertex.d.ts +11 -0
  311. package/src/providers/google-vertex.ts +124 -0
  312. package/src/providers/google.d.ts +4 -0
  313. package/src/providers/google.ts +41 -0
  314. package/src/providers/grammar.d.ts +1 -0
  315. package/src/providers/grammar.ts +70 -0
  316. package/src/providers/kimi.d.ts +27 -0
  317. package/src/providers/kimi.ts +52 -0
  318. package/src/providers/kiro-api-key.d.ts +50 -0
  319. package/src/providers/kiro-api-key.ts +786 -0
  320. package/src/providers/kiro-codewhisperer.d.ts +11 -0
  321. package/src/providers/kiro-codewhisperer.ts +600 -0
  322. package/src/providers/mock.ts +526 -0
  323. package/src/providers/ollama.d.ts +41 -0
  324. package/src/providers/ollama.ts +645 -0
  325. package/src/providers/openai-anthropic-shim.d.ts +31 -0
  326. package/src/providers/openai-anthropic-shim.ts +156 -0
  327. package/src/providers/openai-bounded-rate-limits.d.ts +3 -0
  328. package/src/providers/openai-bounded-rate-limits.ts +57 -0
  329. package/src/providers/openai-chat-server-schema.ts +254 -0
  330. package/src/providers/openai-chat-server.ts +724 -0
  331. package/src/providers/openai-codex/constants.d.ts +26 -0
  332. package/src/providers/openai-codex/constants.ts +43 -0
  333. package/src/providers/openai-codex/request-transformer.d.ts +50 -0
  334. package/src/providers/openai-codex/request-transformer.ts +219 -0
  335. package/src/providers/openai-codex/response-handler.d.ts +18 -0
  336. package/src/providers/openai-codex/response-handler.ts +111 -0
  337. package/src/providers/openai-codex-responses.d.ts +71 -0
  338. package/src/providers/openai-codex-responses.ts +3288 -0
  339. package/src/providers/openai-completions-compat.d.ts +6 -0
  340. package/src/providers/openai-completions-compat.ts +6 -0
  341. package/src/providers/openai-completions.d.ts +35 -0
  342. package/src/providers/openai-completions.ts +2294 -0
  343. package/src/providers/openai-opencodex-responses.ts +174 -0
  344. package/src/providers/openai-request-transform.d.ts +4 -0
  345. package/src/providers/openai-request-transform.ts +136 -0
  346. package/src/providers/openai-responses-server-schema.ts +290 -0
  347. package/src/providers/openai-responses-server.ts +1268 -0
  348. package/src/providers/openai-responses-shared.d.ts +106 -0
  349. package/src/providers/openai-responses-shared.ts +1253 -0
  350. package/src/providers/openai-responses.d.ts +37 -0
  351. package/src/providers/openai-responses.ts +989 -0
  352. package/src/providers/pi-native-client.d.ts +29 -0
  353. package/src/providers/pi-native-client.ts +243 -0
  354. package/src/providers/pi-native-server.ts +488 -0
  355. package/src/providers/register-builtins.d.ts +59 -0
  356. package/src/providers/register-builtins.ts +544 -0
  357. package/src/providers/synthetic.d.ts +26 -0
  358. package/src/providers/synthetic.ts +50 -0
  359. package/src/providers/transform-messages.d.ts +33 -0
  360. package/src/providers/transform-messages.ts +408 -0
  361. package/src/providers/vision-guard.d.ts +8 -0
  362. package/src/providers/vision-guard.ts +31 -0
  363. package/src/rate-limit-utils.d.ts +19 -0
  364. package/src/rate-limit-utils.ts +102 -0
  365. package/src/stream.d.ts +45 -0
  366. package/src/stream.ts +1306 -0
  367. package/src/types.d.ts +1073 -0
  368. package/src/types.ts +1305 -0
  369. package/src/usage/claude.ts +449 -0
  370. package/src/usage/gemini.ts +250 -0
  371. package/src/usage/github-copilot.ts +421 -0
  372. package/src/usage/google-antigravity.ts +201 -0
  373. package/src/usage/grok-cli.ts +259 -0
  374. package/src/usage/kimi.ts +285 -0
  375. package/src/usage/minimax-code.ts +31 -0
  376. package/src/usage/openai-codex.ts +503 -0
  377. package/src/usage/shared.ts +10 -0
  378. package/src/usage/zai.ts +247 -0
  379. package/src/usage.ts +190 -0
  380. package/src/utils/abort.d.ts +19 -0
  381. package/src/utils/abort.ts +51 -0
  382. package/src/utils/anthropic-auth.ts +95 -0
  383. package/src/utils/block-symbols.d.ts +6 -0
  384. package/src/utils/block-symbols.ts +11 -0
  385. package/src/utils/discovery/antigravity.ts +275 -0
  386. package/src/utils/discovery/codex.ts +362 -0
  387. package/src/utils/discovery/cursor.ts +388 -0
  388. package/src/utils/discovery/gemini.ts +248 -0
  389. package/src/utils/discovery/index.ts +4 -0
  390. package/src/utils/discovery/openai-compatible.ts +379 -0
  391. package/src/utils/event-stream.d.ts +41 -0
  392. package/src/utils/event-stream.ts +269 -0
  393. package/src/utils/fallback-transport.d.ts +110 -0
  394. package/src/utils/fallback-transport.ts +411 -0
  395. package/src/utils/fireworks-model-id.d.ts +10 -0
  396. package/src/utils/fireworks-model-id.ts +30 -0
  397. package/src/utils/foundry.d.ts +11 -0
  398. package/src/utils/foundry.ts +18 -0
  399. package/src/utils/h2-fetch.ts +60 -0
  400. package/src/utils/http-inspector.d.ts +59 -0
  401. package/src/utils/http-inspector.ts +380 -0
  402. package/src/utils/idle-iterator.d.ts +122 -0
  403. package/src/utils/idle-iterator.ts +410 -0
  404. package/src/utils/json-parse.d.ts +98 -0
  405. package/src/utils/json-parse.ts +607 -0
  406. package/src/utils/oauth/alibaba-token-plan.ts +60 -0
  407. package/src/utils/oauth/anthropic.ts +233 -0
  408. package/src/utils/oauth/api-key-login.ts +98 -0
  409. package/src/utils/oauth/api-key-validation.ts +344 -0
  410. package/src/utils/oauth/bizrouter.ts +15 -0
  411. package/src/utils/oauth/callback-server.d.ts +80 -0
  412. package/src/utils/oauth/callback-server.ts +359 -0
  413. package/src/utils/oauth/cerebras.ts +16 -0
  414. package/src/utils/oauth/cloudflare-ai-gateway.ts +48 -0
  415. package/src/utils/oauth/commandcode.ts +17 -0
  416. package/src/utils/oauth/cursor.ts +157 -0
  417. package/src/utils/oauth/deepinfra.ts +15 -0
  418. package/src/utils/oauth/deepseek.ts +53 -0
  419. package/src/utils/oauth/firepass.ts +24 -0
  420. package/src/utils/oauth/fireworks.ts +15 -0
  421. package/src/utils/oauth/fugu.ts +15 -0
  422. package/src/utils/oauth/github-copilot.d.ts +38 -0
  423. package/src/utils/oauth/github-copilot.ts +362 -0
  424. package/src/utils/oauth/gitlab-duo.ts +123 -0
  425. package/src/utils/oauth/glm-zcode.d.ts +71 -0
  426. package/src/utils/oauth/glm-zcode.ts +433 -0
  427. package/src/utils/oauth/google-antigravity.ts +200 -0
  428. package/src/utils/oauth/google-gemini-cli.ts +256 -0
  429. package/src/utils/oauth/google-oauth-shared.ts +110 -0
  430. package/src/utils/oauth/huggingface.ts +62 -0
  431. package/src/utils/oauth/index.ts +558 -0
  432. package/src/utils/oauth/kagi.ts +47 -0
  433. package/src/utils/oauth/kilo.ts +87 -0
  434. package/src/utils/oauth/kimi.d.ts +17 -0
  435. package/src/utils/oauth/kimi.ts +275 -0
  436. package/src/utils/oauth/kiro.ts +448 -0
  437. package/src/utils/oauth/litellm.ts +47 -0
  438. package/src/utils/oauth/lm-studio.ts +38 -0
  439. package/src/utils/oauth/mara.ts +16 -0
  440. package/src/utils/oauth/minimax-code.ts +78 -0
  441. package/src/utils/oauth/moonshot.ts +16 -0
  442. package/src/utils/oauth/nanogpt.ts +15 -0
  443. package/src/utils/oauth/nvidia.ts +70 -0
  444. package/src/utils/oauth/oauth.html +199 -0
  445. package/src/utils/oauth/ollama-cloud.ts +28 -0
  446. package/src/utils/oauth/ollama.ts +47 -0
  447. package/src/utils/oauth/openai-codex.ts +299 -0
  448. package/src/utils/oauth/opencode.ts +49 -0
  449. package/src/utils/oauth/opengateway.ts +15 -0
  450. package/src/utils/oauth/openrouter.ts +16 -0
  451. package/src/utils/oauth/parallel.ts +46 -0
  452. package/src/utils/oauth/perplexity.ts +225 -0
  453. package/src/utils/oauth/pkce.ts +18 -0
  454. package/src/utils/oauth/qianfan.ts +58 -0
  455. package/src/utils/oauth/qwen-portal.ts +60 -0
  456. package/src/utils/oauth/sglang.ts +42 -0
  457. package/src/utils/oauth/synthetic.ts +15 -0
  458. package/src/utils/oauth/tavily.ts +46 -0
  459. package/src/utils/oauth/together.ts +16 -0
  460. package/src/utils/oauth/types.d.ts +56 -0
  461. package/src/utils/oauth/types.ts +122 -0
  462. package/src/utils/oauth/venice.ts +59 -0
  463. package/src/utils/oauth/vercel-ai-gateway.ts +47 -0
  464. package/src/utils/oauth/vllm.ts +42 -0
  465. package/src/utils/oauth/xai.ts +246 -0
  466. package/src/utils/oauth/xiaomi.ts +199 -0
  467. package/src/utils/oauth/zai.ts +60 -0
  468. package/src/utils/oauth/zenmux.ts +15 -0
  469. package/src/utils/overflow.ts +275 -0
  470. package/src/utils/parse-bind.ts +81 -0
  471. package/src/utils/provider-response.d.ts +6 -0
  472. package/src/utils/provider-response.ts +30 -0
  473. package/src/utils/provider-safety-stop.ts +8 -0
  474. package/src/utils/proxy.d.ts +7 -0
  475. package/src/utils/proxy.ts +652 -0
  476. package/src/utils/retry-after.d.ts +3 -0
  477. package/src/utils/retry-after.ts +110 -0
  478. package/src/utils/retry-budget.d.ts +1 -0
  479. package/src/utils/retry-budget.ts +4 -0
  480. package/src/utils/retry.d.ts +29 -0
  481. package/src/utils/retry.ts +67 -0
  482. package/src/utils/schema/CONSTRAINTS.md +164 -0
  483. package/src/utils/schema/adapt.d.ts +24 -0
  484. package/src/utils/schema/adapt.ts +36 -0
  485. package/src/utils/schema/compatibility.d.ts +30 -0
  486. package/src/utils/schema/compatibility.ts +435 -0
  487. package/src/utils/schema/dereference.d.ts +11 -0
  488. package/src/utils/schema/dereference.ts +98 -0
  489. package/src/utils/schema/draft.d.ts +10 -0
  490. package/src/utils/schema/draft.ts +341 -0
  491. package/src/utils/schema/equality.d.ts +4 -0
  492. package/src/utils/schema/equality.ts +97 -0
  493. package/src/utils/schema/fields.d.ts +49 -0
  494. package/src/utils/schema/fields.ts +190 -0
  495. package/src/utils/schema/index.d.ts +14 -0
  496. package/src/utils/schema/index.ts +14 -0
  497. package/src/utils/schema/json-schema-validator.d.ts +12 -0
  498. package/src/utils/schema/json-schema-validator.ts +577 -0
  499. package/src/utils/schema/meta-validator.d.ts +2 -0
  500. package/src/utils/schema/meta-validator.ts +167 -0
  501. package/src/utils/schema/normalize.d.ts +93 -0
  502. package/src/utils/schema/normalize.ts +1588 -0
  503. package/src/utils/schema/root-combinator.d.ts +12 -0
  504. package/src/utils/schema/root-combinator.ts +143 -0
  505. package/src/utils/schema/spill.d.ts +8 -0
  506. package/src/utils/schema/spill.ts +43 -0
  507. package/src/utils/schema/stamps.d.ts +25 -0
  508. package/src/utils/schema/stamps.ts +97 -0
  509. package/src/utils/schema/types.d.ts +4 -0
  510. package/src/utils/schema/types.ts +11 -0
  511. package/src/utils/schema/wire.d.ts +54 -0
  512. package/src/utils/schema/wire.ts +213 -0
  513. package/src/utils/schema/zod-decontaminate.d.ts +31 -0
  514. package/src/utils/schema/zod-decontaminate.ts +331 -0
  515. package/src/utils/sse-debug.d.ts +10 -0
  516. package/src/utils/sse-debug.ts +289 -0
  517. package/src/utils/tool-call-healing.d.ts +80 -0
  518. package/src/utils/tool-call-healing.ts +298 -0
  519. package/src/utils/tool-choice-capability.d.ts +57 -0
  520. package/src/utils/tool-choice-capability.ts +633 -0
  521. package/src/utils/tool-choice.d.ts +50 -0
  522. package/src/utils/tool-choice.ts +99 -0
  523. package/src/utils/validation.ts +1080 -0
  524. package/src/utils.d.ts +117 -0
  525. package/src/utils.ts +523 -0
@@ -0,0 +1,38 @@
1
+ /**
2
+ * `application/vnd.amazon.eventstream` decoder.
3
+ *
4
+ * Wire format (all integers big-endian):
5
+ *
6
+ * [total length u32]
7
+ * [headers length u32]
8
+ * [prelude CRC32 u32] <- CRC over the first 8 bytes
9
+ * [headers headers_length]
10
+ * [payload total_length - headers_length - 16]
11
+ * [message CRC32 u32] <- CRC over the entire message minus the trailing 4 bytes
12
+ *
13
+ * Headers: a sequence of `[name_len u8][name utf8][value_type u8][value …]`.
14
+ * We only need the typed values Bedrock emits (boolean true/false, byte, short,
15
+ * integer, long, byte-array, string, timestamp, uuid). All are surfaced as
16
+ * strings for ease of consumption — Bedrock only sets string-valued headers in
17
+ * practice (`:event-type`, `:message-type`, `:content-type`, `:exception-type`).
18
+ */
19
+ export interface EventStreamMessage {
20
+ /** Lower-cased copy is *not* applied — Bedrock uses casing like `:event-type` verbatim. */
21
+ headers: Record<string, string>;
22
+ payload: Uint8Array;
23
+ }
24
+ export declare function crc32(bytes: Uint8Array, seed?: number): number;
25
+ /**
26
+ * Decode a single, fully buffered eventstream message. Throws if the framing is
27
+ * malformed or either CRC mismatches. Used by both `decodeEventStream` (the
28
+ * streaming entry point) and the unit tests, which exercise it with hand-built
29
+ * frames.
30
+ */
31
+ export declare function decodeMessage(frame: Uint8Array): EventStreamMessage;
32
+ /**
33
+ * Async generator that consumes a `ReadableStream<Uint8Array>` (e.g. a fetch
34
+ * response body) and yields fully-framed messages. Handles arbitrary chunk
35
+ * boundaries: messages may span multiple chunks, and a single chunk may carry
36
+ * many messages.
37
+ */
38
+ export declare function decodeEventStream(source: ReadableStream<Uint8Array>): AsyncGenerator<EventStreamMessage>;
@@ -0,0 +1,185 @@
1
+ /**
2
+ * `application/vnd.amazon.eventstream` decoder.
3
+ *
4
+ * Wire format (all integers big-endian):
5
+ *
6
+ * [total length u32]
7
+ * [headers length u32]
8
+ * [prelude CRC32 u32] <- CRC over the first 8 bytes
9
+ * [headers headers_length]
10
+ * [payload total_length - headers_length - 16]
11
+ * [message CRC32 u32] <- CRC over the entire message minus the trailing 4 bytes
12
+ *
13
+ * Headers: a sequence of `[name_len u8][name utf8][value_type u8][value …]`.
14
+ * We only need the typed values Bedrock emits (boolean true/false, byte, short,
15
+ * integer, long, byte-array, string, timestamp, uuid). All are surfaced as
16
+ * strings for ease of consumption — Bedrock only sets string-valued headers in
17
+ * practice (`:event-type`, `:message-type`, `:content-type`, `:exception-type`).
18
+ */
19
+
20
+ const PRELUDE_LEN = 8;
21
+ const PRELUDE_CRC_LEN = 4;
22
+ const MESSAGE_CRC_LEN = 4;
23
+ const HEADER_BLOCK_OFFSET = PRELUDE_LEN + PRELUDE_CRC_LEN;
24
+ const MIN_MESSAGE_LEN = HEADER_BLOCK_OFFSET + MESSAGE_CRC_LEN;
25
+
26
+ export interface EventStreamMessage {
27
+ /** Lower-cased copy is *not* applied — Bedrock uses casing like `:event-type` verbatim. */
28
+ headers: Record<string, string>;
29
+ payload: Uint8Array;
30
+ }
31
+
32
+ /** CRC32 (IEEE / zlib polynomial 0xEDB88320), matches `@aws-crypto/crc32`. */
33
+ const CRC_TABLE = (() => {
34
+ const t = new Uint32Array(256);
35
+ for (let i = 0; i < 256; i++) {
36
+ let c = i;
37
+ for (let k = 0; k < 8; k++) c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1;
38
+ t[i] = c >>> 0;
39
+ }
40
+ return t;
41
+ })();
42
+
43
+ export function crc32(bytes: Uint8Array, seed = 0): number {
44
+ let c = (seed ^ 0xffffffff) >>> 0;
45
+ for (let i = 0; i < bytes.length; i++) c = (CRC_TABLE[(c ^ bytes[i]) & 0xff] ^ (c >>> 8)) >>> 0;
46
+ return (c ^ 0xffffffff) >>> 0;
47
+ }
48
+
49
+ /**
50
+ * Decode a single, fully buffered eventstream message. Throws if the framing is
51
+ * malformed or either CRC mismatches. Used by both `decodeEventStream` (the
52
+ * streaming entry point) and the unit tests, which exercise it with hand-built
53
+ * frames.
54
+ */
55
+ export function decodeMessage(frame: Uint8Array): EventStreamMessage {
56
+ if (frame.length < MIN_MESSAGE_LEN) throw new Error("eventstream: frame too short");
57
+ const view = new DataView(frame.buffer, frame.byteOffset, frame.byteLength);
58
+ const total = view.getUint32(0, false);
59
+ if (total !== frame.length) throw new Error(`eventstream: framed length ${total} != buffer ${frame.length}`);
60
+ const headersLen = view.getUint32(4, false);
61
+ const preludeCrc = view.getUint32(8, false);
62
+ const computedPreludeCrc = crc32(frame.subarray(0, PRELUDE_LEN));
63
+ if (computedPreludeCrc !== preludeCrc) throw new Error("eventstream: prelude CRC mismatch");
64
+ const msgCrc = view.getUint32(total - MESSAGE_CRC_LEN, false);
65
+ const computedMsgCrc = crc32(frame.subarray(0, total - MESSAGE_CRC_LEN));
66
+ if (computedMsgCrc !== msgCrc) throw new Error("eventstream: message CRC mismatch");
67
+
68
+ const headersBytes = frame.subarray(HEADER_BLOCK_OFFSET, HEADER_BLOCK_OFFSET + headersLen);
69
+ const payload = frame.subarray(HEADER_BLOCK_OFFSET + headersLen, total - MESSAGE_CRC_LEN);
70
+ return { headers: parseHeaders(headersBytes), payload };
71
+ }
72
+
73
+ function parseHeaders(buf: Uint8Array): Record<string, string> {
74
+ const out: Record<string, string> = {};
75
+ const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength);
76
+ const decoder = new TextDecoder();
77
+ let p = 0;
78
+ while (p < buf.length) {
79
+ const nameLen = view.getUint8(p);
80
+ p += 1;
81
+ const name = decoder.decode(buf.subarray(p, p + nameLen));
82
+ p += nameLen;
83
+ const type = view.getUint8(p);
84
+ p += 1;
85
+ switch (type) {
86
+ case 0: // bool true
87
+ out[name] = "true";
88
+ break;
89
+ case 1: // bool false
90
+ out[name] = "false";
91
+ break;
92
+ case 2: // byte
93
+ out[name] = String(view.getInt8(p));
94
+ p += 1;
95
+ break;
96
+ case 3: // short
97
+ out[name] = String(view.getInt16(p, false));
98
+ p += 2;
99
+ break;
100
+ case 4: // integer
101
+ out[name] = String(view.getInt32(p, false));
102
+ p += 4;
103
+ break;
104
+ case 5: // long — surface as decimal string to avoid precision loss
105
+ out[name] = bigIntFromBytes(buf.subarray(p, p + 8)).toString();
106
+ p += 8;
107
+ break;
108
+ case 6: {
109
+ // byte array — base64 for safe transport
110
+ const len = view.getUint16(p, false);
111
+ p += 2;
112
+ out[name] = Buffer.from(buf.buffer, buf.byteOffset + p, len).toString("base64");
113
+ p += len;
114
+ break;
115
+ }
116
+ case 7: {
117
+ // string
118
+ const len = view.getUint16(p, false);
119
+ p += 2;
120
+ out[name] = decoder.decode(buf.subarray(p, p + len));
121
+ p += len;
122
+ break;
123
+ }
124
+ case 8: // timestamp (ms since epoch as i64)
125
+ out[name] = new Date(Number(bigIntFromBytes(buf.subarray(p, p + 8)))).toISOString();
126
+ p += 8;
127
+ break;
128
+ case 9: {
129
+ // uuid
130
+ const u = buf.subarray(p, p + 16);
131
+ const hex: string[] = [];
132
+ for (let i = 0; i < 16; i++) hex.push(u[i].toString(16).padStart(2, "0"));
133
+ out[name] =
134
+ `${hex.slice(0, 4).join("")}-${hex.slice(4, 6).join("")}-${hex.slice(6, 8).join("")}-${hex.slice(8, 10).join("")}-${hex.slice(10, 16).join("")}`;
135
+ p += 16;
136
+ break;
137
+ }
138
+ default:
139
+ throw new Error(`eventstream: unknown header value type ${type}`);
140
+ }
141
+ }
142
+ return out;
143
+ }
144
+
145
+ function bigIntFromBytes(b: Uint8Array): bigint {
146
+ let v = 0n;
147
+ for (let i = 0; i < b.length; i++) v = (v << 8n) | BigInt(b[i]);
148
+ // sign-extend (two's complement)
149
+ if (b.length === 8 && b[0] & 0x80) v -= 1n << 64n;
150
+ return v;
151
+ }
152
+
153
+ /**
154
+ * Async generator that consumes a `ReadableStream<Uint8Array>` (e.g. a fetch
155
+ * response body) and yields fully-framed messages. Handles arbitrary chunk
156
+ * boundaries: messages may span multiple chunks, and a single chunk may carry
157
+ * many messages.
158
+ */
159
+ export async function* decodeEventStream(source: ReadableStream<Uint8Array>): AsyncGenerator<EventStreamMessage> {
160
+ const reader = source.getReader();
161
+ // Single growable buffer; we slide a read cursor along it and compact when a
162
+ // complete prefix has been consumed. Avoids per-message Uint8Array copies.
163
+ let buf: Uint8Array<ArrayBufferLike> = new Uint8Array(0);
164
+ try {
165
+ while (true) {
166
+ const { value, done } = await reader.read();
167
+ if (value && value.length > 0) buf = buf.length === 0 ? value : Buffer.concat([buf, value]);
168
+ let offset = 0;
169
+ while (buf.length - offset >= 4) {
170
+ const dv = new DataView(buf.buffer, buf.byteOffset + offset, buf.length - offset);
171
+ const total = dv.getUint32(0, false);
172
+ if (total < MIN_MESSAGE_LEN) throw new Error(`eventstream: total length ${total} below minimum`);
173
+ if (buf.length - offset < total) break;
174
+ const frame = buf.subarray(offset, offset + total);
175
+ yield decodeMessage(frame);
176
+ offset += total;
177
+ }
178
+ if (offset > 0) buf = buf.slice(offset);
179
+ if (done) break;
180
+ }
181
+ if (buf.length > 0) throw new Error("eventstream: truncated message at end of stream");
182
+ } finally {
183
+ reader.releaseLock();
184
+ }
185
+ }
@@ -0,0 +1,55 @@
1
+ /**
2
+ * AWS Signature V4 signing for HTTP requests. WebCrypto-only — no node:crypto.
3
+ *
4
+ * Matches `@smithy/signature-v4` for our usage: header-based signing with a
5
+ * full SHA-256 payload hash (Bedrock requires `applyChecksum: true`).
6
+ *
7
+ * Returns the set of headers to attach to the request:
8
+ * - `host`
9
+ * - `x-amz-date`
10
+ * - `x-amz-content-sha256`
11
+ * - `x-amz-security-token` (only when credentials carry a sessionToken)
12
+ * - `authorization`
13
+ */
14
+ export interface AwsCredentials {
15
+ accessKeyId: string;
16
+ secretAccessKey: string;
17
+ sessionToken?: string;
18
+ }
19
+ export interface SignParams {
20
+ method: string;
21
+ /** Hostname only — used to build the `host` header and the canonical request. */
22
+ host: string;
23
+ /** URI path component, e.g. `/model/anthropic.Anthropic model/converse-stream`. */
24
+ path: string;
25
+ /** Optional pre-built query string (without leading `?`). */
26
+ query?: string;
27
+ /** Extra headers to sign in addition to `host`/`x-amz-*`. Names are case-insensitive. */
28
+ headers?: Record<string, string>;
29
+ body: Uint8Array;
30
+ region: string;
31
+ service: string;
32
+ credentials: AwsCredentials;
33
+ /** Override clock for deterministic tests. */
34
+ date?: Date;
35
+ }
36
+ export declare function toHex(bytes: Uint8Array): string;
37
+ export declare function sha256(data: Uint8Array | string): Promise<Uint8Array>;
38
+ export declare function sha256Hex(data: Uint8Array | string): Promise<string>;
39
+ /**
40
+ * Derive a signing key: HMAC chain `kSecret → kDate → kRegion → kService → kSigning`.
41
+ */
42
+ export declare function getSigningKey(secretAccessKey: string, shortDate: string, region: string, service: string): Promise<Uint8Array>;
43
+ /** `YYYYMMDDTHHMMSSZ` + 8-char `YYYYMMDD`. */
44
+ export declare function formatAmzDate(d: Date): {
45
+ longDate: string;
46
+ shortDate: string;
47
+ };
48
+ export interface SignedHeaders {
49
+ host: string;
50
+ "x-amz-date": string;
51
+ "x-amz-content-sha256": string;
52
+ authorization: string;
53
+ "x-amz-security-token"?: string;
54
+ }
55
+ export declare function signRequest(params: SignParams): Promise<SignedHeaders>;
@@ -0,0 +1,218 @@
1
+ /**
2
+ * AWS Signature V4 signing for HTTP requests. WebCrypto-only — no node:crypto.
3
+ *
4
+ * Matches `@smithy/signature-v4` for our usage: header-based signing with a
5
+ * full SHA-256 payload hash (Bedrock requires `applyChecksum: true`).
6
+ *
7
+ * Returns the set of headers to attach to the request:
8
+ * - `host`
9
+ * - `x-amz-date`
10
+ * - `x-amz-content-sha256`
11
+ * - `x-amz-security-token` (only when credentials carry a sessionToken)
12
+ * - `authorization`
13
+ */
14
+
15
+ export interface AwsCredentials {
16
+ accessKeyId: string;
17
+ secretAccessKey: string;
18
+ sessionToken?: string;
19
+ }
20
+
21
+ export interface SignParams {
22
+ method: string;
23
+ /** Hostname only — used to build the `host` header and the canonical request. */
24
+ host: string;
25
+ /** URI path component, e.g. `/model/anthropic.Anthropic model/converse-stream`. */
26
+ path: string;
27
+ /** Optional pre-built query string (without leading `?`). */
28
+ query?: string;
29
+ /** Extra headers to sign in addition to `host`/`x-amz-*`. Names are case-insensitive. */
30
+ headers?: Record<string, string>;
31
+ body: Uint8Array;
32
+ region: string;
33
+ service: string;
34
+ credentials: AwsCredentials;
35
+ /** Override clock for deterministic tests. */
36
+ date?: Date;
37
+ }
38
+
39
+ const ALGORITHM = "AWS4-HMAC-SHA256";
40
+ const KEY_TYPE = "aws4_request";
41
+ // Headers the SDK never includes in the signature. Lowercased.
42
+ const UNSIGNABLE: Record<string, true> = {
43
+ authorization: true,
44
+ "cache-control": true,
45
+ connection: true,
46
+ expect: true,
47
+ from: true,
48
+ "keep-alive": true,
49
+ "max-forwards": true,
50
+ pragma: true,
51
+ referer: true,
52
+ te: true,
53
+ trailer: true,
54
+ "transfer-encoding": true,
55
+ upgrade: true,
56
+ "user-agent": true,
57
+ "x-amzn-trace-id": true,
58
+ };
59
+
60
+ /** Coerce a possibly-ArrayBufferLike-backed `Uint8Array` into one over a fresh
61
+ * `ArrayBuffer`, which is what `crypto.subtle.{digest,sign,importKey}` requires
62
+ * under the strict TS DOM typings. No-op when already strict.
63
+ */
64
+ function asStrict(bytes: Uint8Array): Uint8Array<ArrayBuffer> {
65
+ if (bytes.buffer instanceof ArrayBuffer && bytes.byteOffset === 0 && bytes.byteLength === bytes.buffer.byteLength) {
66
+ return bytes as Uint8Array<ArrayBuffer>;
67
+ }
68
+ const copy = new Uint8Array(bytes.byteLength);
69
+ copy.set(bytes);
70
+ return copy;
71
+ }
72
+ const subtle = globalThis.crypto.subtle;
73
+
74
+ const HEX = "0123456789abcdef";
75
+ export function toHex(bytes: Uint8Array): string {
76
+ let out = "";
77
+ for (let i = 0; i < bytes.length; i++) {
78
+ const b = bytes[i];
79
+ out += HEX[b >> 4] + HEX[b & 15];
80
+ }
81
+ return out;
82
+ }
83
+
84
+ export async function sha256(data: Uint8Array | string): Promise<Uint8Array> {
85
+ const bytes = typeof data === "string" ? new TextEncoder().encode(data) : asStrict(data);
86
+ const digest = await subtle.digest("SHA-256", bytes);
87
+ return new Uint8Array(digest);
88
+ }
89
+
90
+ export async function sha256Hex(data: Uint8Array | string): Promise<string> {
91
+ return toHex(await sha256(data));
92
+ }
93
+
94
+ async function hmac(key: Uint8Array, data: string | Uint8Array): Promise<Uint8Array> {
95
+ const cryptoKey = await subtle.importKey("raw", asStrict(key), { name: "HMAC", hash: "SHA-256" }, false, ["sign"]);
96
+ const bytes = typeof data === "string" ? new TextEncoder().encode(data) : asStrict(data);
97
+ const sig = await subtle.sign("HMAC", cryptoKey, bytes);
98
+ return new Uint8Array(sig);
99
+ }
100
+
101
+ /**
102
+ * Derive a signing key: HMAC chain `kSecret → kDate → kRegion → kService → kSigning`.
103
+ */
104
+ export async function getSigningKey(
105
+ secretAccessKey: string,
106
+ shortDate: string,
107
+ region: string,
108
+ service: string,
109
+ ): Promise<Uint8Array> {
110
+ const kDate = await hmac(new TextEncoder().encode(`AWS4${secretAccessKey}`), shortDate);
111
+ const kRegion = await hmac(kDate, region);
112
+ const kService = await hmac(kRegion, service);
113
+ return hmac(kService, KEY_TYPE);
114
+ }
115
+
116
+ /** `YYYYMMDDTHHMMSSZ` + 8-char `YYYYMMDD`. */
117
+ export function formatAmzDate(d: Date): { longDate: string; shortDate: string } {
118
+ const iso = d.toISOString();
119
+ // `2025-05-17T12:34:56.789Z` -> `20250517T123456Z`
120
+ const longDate = `${iso.slice(0, 4)}${iso.slice(5, 7)}${iso.slice(8, 10)}T${iso.slice(11, 13)}${iso.slice(14, 16)}${iso.slice(17, 19)}Z`;
121
+ return { longDate, shortDate: longDate.slice(0, 8) };
122
+ }
123
+
124
+ /**
125
+ * Canonicalize a request path per RFC 3986: each segment is %-encoded but `/`
126
+ * stays literal. Matches the smithy default (`uriEscapePath: true`, then revert
127
+ * the double-encoding of `/`). Bedrock paths use no reserved characters in
128
+ * practice, but model IDs can include `:` and `.`.
129
+ */
130
+ function canonicalPath(path: string): string {
131
+ const segments = path.split("/");
132
+ const escaped = segments.map(seg => (seg.length === 0 ? "" : encodeRfc3986(seg)));
133
+ return escaped.join("/");
134
+ }
135
+
136
+ function encodeRfc3986(str: string): string {
137
+ return encodeURIComponent(str).replace(/[!'()*]/g, c => `%${c.charCodeAt(0).toString(16).toUpperCase()}`);
138
+ }
139
+
140
+ function canonicalQuery(query: string | undefined): string {
141
+ if (!query) return "";
142
+ const pairs: Array<[string, string]> = [];
143
+ for (const part of query.split("&")) {
144
+ if (!part) continue;
145
+ const eq = part.indexOf("=");
146
+ const k = eq === -1 ? part : part.slice(0, eq);
147
+ const v = eq === -1 ? "" : part.slice(eq + 1);
148
+ pairs.push([decodeURIComponent(k), decodeURIComponent(v)]);
149
+ }
150
+ pairs.sort((a, b) => (a[0] < b[0] ? -1 : a[0] > b[0] ? 1 : a[1] < b[1] ? -1 : a[1] > b[1] ? 1 : 0));
151
+ return pairs.map(([k, v]) => `${encodeRfc3986(k)}=${encodeRfc3986(v)}`).join("&");
152
+ }
153
+
154
+ export interface SignedHeaders {
155
+ host: string;
156
+ "x-amz-date": string;
157
+ "x-amz-content-sha256": string;
158
+ authorization: string;
159
+ "x-amz-security-token"?: string;
160
+ }
161
+
162
+ export async function signRequest(params: SignParams): Promise<SignedHeaders> {
163
+ const { method, host, path, query, body, region, service, credentials } = params;
164
+ const date = params.date ?? new Date();
165
+ const { longDate, shortDate } = formatAmzDate(date);
166
+ const payloadHash = await sha256Hex(body);
167
+
168
+ // Assemble the headers that will be signed. Always include host, x-amz-date,
169
+ // x-amz-content-sha256, plus x-amz-security-token when present, plus
170
+ // caller-provided signable headers (e.g. content-type, accept).
171
+ const signed: Record<string, string> = {
172
+ host,
173
+ "x-amz-date": longDate,
174
+ "x-amz-content-sha256": payloadHash,
175
+ };
176
+ if (credentials.sessionToken) signed["x-amz-security-token"] = credentials.sessionToken;
177
+ const extraHeaders = params.headers;
178
+ if (extraHeaders) {
179
+ for (const k in extraHeaders) {
180
+ const lk = k.toLowerCase();
181
+ if (UNSIGNABLE[lk]) continue;
182
+ if (lk.startsWith("proxy-") || lk.startsWith("sec-")) continue;
183
+ signed[lk] = extraHeaders[k].trim().replace(/\s+/g, " ");
184
+ }
185
+ }
186
+
187
+ const sortedNames = Object.keys(signed).sort();
188
+ const canonicalHeaders = `${sortedNames.map(n => `${n}:${signed[n]}`).join("\n")}\n`;
189
+ const signedHeadersStr = sortedNames.join(";");
190
+
191
+ const canonicalRequest = [
192
+ method.toUpperCase(),
193
+ canonicalPath(path),
194
+ canonicalQuery(query),
195
+ canonicalHeaders,
196
+ signedHeadersStr,
197
+ payloadHash,
198
+ ].join("\n");
199
+
200
+ const scope = `${shortDate}/${region}/${service}/${KEY_TYPE}`;
201
+ const stringToSign = [ALGORITHM, longDate, scope, await sha256Hex(canonicalRequest)].join("\n");
202
+
203
+ const signingKey = await getSigningKey(credentials.secretAccessKey, shortDate, region, service);
204
+ const signature = toHex(await hmac(signingKey, stringToSign));
205
+
206
+ const authorization =
207
+ `${ALGORITHM} Credential=${credentials.accessKeyId}/${scope}, ` +
208
+ `SignedHeaders=${signedHeadersStr}, Signature=${signature}`;
209
+
210
+ const out: SignedHeaders = {
211
+ host,
212
+ "x-amz-date": longDate,
213
+ "x-amz-content-sha256": payloadHash,
214
+ authorization,
215
+ };
216
+ if (credentials.sessionToken) out["x-amz-security-token"] = credentials.sessionToken;
217
+ return out;
218
+ }
@@ -0,0 +1,22 @@
1
+ import type { Model, ServiceTier, StreamFunction, StreamOptions, ToolChoice } from "../types";
2
+ export interface AzureOpenAIResponsesOptions extends StreamOptions {
3
+ reasoning?: "minimal" | "low" | "medium" | "high" | "xhigh" | "max";
4
+ reasoningSummary?: "auto" | "detailed" | "concise" | null;
5
+ azureApiVersion?: string;
6
+ azureResourceName?: string;
7
+ azureBaseUrl?: string;
8
+ azureDeploymentName?: string;
9
+ toolChoice?: ToolChoice;
10
+ serviceTier?: ServiceTier;
11
+ }
12
+ /**
13
+ * Generate function for Azure OpenAI Responses API
14
+ */
15
+ export declare const streamAzureOpenAIResponses: StreamFunction<"azure-openai-responses">;
16
+ /** Test seam: the Azure endpoint config as resolved from trusted env. */
17
+ export declare function resolveAzureConfigForTest(model: Model<"azure-openai-responses">, options?: AzureOpenAIResponsesOptions): {
18
+ baseUrl: string;
19
+ apiVersion: string;
20
+ };
21
+ /** Test seam: the client API key as resolved from a caller value plus trusted env. */
22
+ export declare function resolveAzureClientApiKeyForTest(apiKey: string): string | undefined;