@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,41 @@
1
+ import type { AssistantMessage, AssistantMessageEvent } from "../types";
2
+ export declare class EventStream<T, R = T> implements AsyncIterable<T> {
3
+ #private;
4
+ waiting: Array<{
5
+ resolve: (value: IteratorResult<T>) => void;
6
+ reject: (err: unknown) => void;
7
+ }>;
8
+ done: boolean;
9
+ finalResultPromise: Promise<R>;
10
+ resolveFinalResult: (result: R) => void;
11
+ rejectFinalResult: (err: unknown) => void;
12
+ isComplete: (event: T) => boolean;
13
+ extractResult: (event: T) => R;
14
+ constructor(isComplete: (event: T) => boolean, extractResult: (event: T) => R, onConsumerClose?: () => void);
15
+ /**
16
+ * Read-only snapshot of the not-yet-consumed events. Always a fresh copy:
17
+ * external code can never mutate internal queue state or observe head-index
18
+ * tombstones or private consumer-drain sentinels, so the deque cannot desynchronize.
19
+ */
20
+ get queue(): T[];
21
+ /** Read-only test seam for outstanding consumer-drain waiters. */
22
+ get pendingConsumerDrainCountForTests(): number;
23
+ /** Whether an async iterator is currently consuming this stream. */
24
+ get hasActiveConsumer(): boolean;
25
+ push(event: T): void;
26
+ deliver(event: T): void;
27
+ /**
28
+ * Resolves after every event enqueued before this call has been yielded and
29
+ * the consumer asks the iterator for its next node. The private sentinel is
30
+ * never exposed through the async iterator.
31
+ */
32
+ waitForConsumerDrain(signal: AbortSignal): Promise<void>;
33
+ end(result?: R): void;
34
+ endWaiting(): void;
35
+ fail(err: unknown): void;
36
+ [Symbol.asyncIterator](): AsyncIterator<T>;
37
+ result(): Promise<R>;
38
+ }
39
+ export declare class AssistantMessageEventStream extends EventStream<AssistantMessageEvent, AssistantMessage> {
40
+ constructor(onConsumerClose?: () => void);
41
+ }
@@ -0,0 +1,110 @@
1
+ export type FallbackTriggerClass = "rate_limit" | "quota" | "auth" | "server" | "unknown" | "other";
2
+ /**
3
+ * Refinement of an `auth` trigger.
4
+ *
5
+ * The transport deliberately collapses HTTP 401 and 403 into a single `auth`
6
+ * class, but the two demand opposite handling: a credential problem may be
7
+ * recoverable by trying a different stored credential, whereas a plain
8
+ * `forbidden` is an authorization or configuration defect that rotation would
9
+ * only hide — it would cycle and block every otherwise-healthy credential.
10
+ *
11
+ * This is a refinement rather than a new {@link FallbackTriggerClass} member so
12
+ * every existing `trigger.class === "auth"` consumer keeps compiling and keeps
13
+ * its current behavior until it explicitly opts into the distinction.
14
+ */
15
+ export type AuthDisposition = "credential" | "forbidden";
16
+ export interface FallbackTrigger {
17
+ class: FallbackTriggerClass;
18
+ retryAfterMs?: number;
19
+ /** Present only when `class === "auth"`. */
20
+ authDisposition?: AuthDisposition;
21
+ }
22
+ /** Stable code for streams that time out before producing semantic progress. */
23
+ export declare const STREAM_FIRST_EVENT_TIMEOUT_PROVIDER_CODE = "stream_first_event_timeout";
24
+ /** Stable code for a nominally successful response with no content or token usage. */
25
+ export declare const EMPTY_RESPONSE_PROVIDER_CODE = "empty_response";
26
+ /**
27
+ * OpenAI's typed capacity-overload code. It arrives without an HTTP status —
28
+ * inside an HTTP 200 terminal Responses envelope or a Codex error event — so the
29
+ * code itself is the only structured evidence of the failure and must survive
30
+ * the existence gate below. It is always compared case-sensitively.
31
+ */
32
+ export declare const SERVER_OVERLOADED_PROVIDER_CODE = "server_is_overloaded";
33
+ export type TransportHeaders = Headers | Record<string, string | undefined>;
34
+ /**
35
+ * Structured facts from an upstream HTTP or transport failure. Retry decisions
36
+ * must use these facts rather than provider- or application-owned error text.
37
+ *
38
+ * `headers` is always a plain record limited to the retained retry-signal
39
+ * entries: facts travel on persisted `AssistantMessage`s and through
40
+ * `structuredClone` snapshots (managed fallback attempt staging), so they must
41
+ * never carry a live `Headers` instance — cloning one throws `DataCloneError`
42
+ * ("The object can not be cloned.") and masks the real provider failure.
43
+ */
44
+ export interface TransportFailureFacts {
45
+ kind: "transport";
46
+ status?: number;
47
+ /** Canonical provider error code used for fallback classification. */
48
+ providerCode?: string;
49
+ /** Anthropic's typed `error.type`, preserved separately at the transport boundary. */
50
+ anthropicErrorType?: string;
51
+ /** OpenAI's typed `error.code`, preserved separately at the transport boundary. */
52
+ openaiErrorCode?: string;
53
+ headers?: Record<string, string>;
54
+ /** Safe request-size observation for retry amplification policy. Never contains body content. */
55
+ requestBytes?: number;
56
+ /** Time spent waiting for the first semantic stream event on the failed request. */
57
+ firstEventElapsedMs?: number;
58
+ /** Configured first-event window before any bounded endpoint grace. */
59
+ firstEventTimeoutMs?: number;
60
+ /** Coarse endpoint class; deliberately excludes host, path, credentials, and query parameters. */
61
+ endpointClass?: "canonical" | "custom";
62
+ /** Provider-supplied ceiling for total attempts, including the initial request. */
63
+ retryMaxAttempts?: number;
64
+ }
65
+ /** Opaque per-invocation marker required by managed fallback transport calls. */
66
+ export interface FallbackAttemptToken {
67
+ readonly modelKey: string;
68
+ readonly attemptId: string | number;
69
+ }
70
+ /**
71
+ * Marks a single outer fallback invocation. Accounting belongs to the caller;
72
+ * this token prevents managed transport calls from silently bypassing it.
73
+ */
74
+ export declare function beginAttempt(modelKey: string, attemptId: string | number): FallbackAttemptToken;
75
+ export declare function assertManagedAttempt(options: {
76
+ fallbackManaged?: boolean;
77
+ fallbackAttempt?: FallbackAttemptToken;
78
+ } | undefined): void;
79
+ /**
80
+ * Compatibility input for callers that have not yet wrapped their HTTP facts
81
+ * in the discriminated form. Only its structured fields are inspected.
82
+ */
83
+ export interface FallbackTriggerInput {
84
+ status?: number;
85
+ providerCode?: string;
86
+ code?: string;
87
+ headers?: TransportHeaders;
88
+ response?: {
89
+ status?: number;
90
+ headers?: TransportHeaders;
91
+ };
92
+ error?: {
93
+ code?: string;
94
+ type?: string;
95
+ };
96
+ }
97
+ /** Extracts only explicit HTTP/transport metadata; it never parses error text. */
98
+ export declare function transportFailureFacts(error: unknown, capturedResponse?: {
99
+ status?: number;
100
+ headers?: TransportHeaders;
101
+ }): TransportFailureFacts | undefined;
102
+ /** Classifies only typed upstream transport facts without consuming response bodies. */
103
+ export declare function classifyFallbackTrigger(errorOrFacts: TransportFailureFacts | FallbackTriggerInput | unknown): FallbackTrigger;
104
+ /**
105
+ * True when a failure is an `auth` failure that must NOT rotate credentials.
106
+ *
107
+ * Callers that mutate credential state on auth failures should consult this
108
+ * first so a plain `forbidden` cannot block otherwise-healthy credentials.
109
+ */
110
+ export declare function isForbiddenAuthFailure(errorOrFacts: TransportFailureFacts | FallbackTriggerInput | unknown): boolean;
@@ -0,0 +1,10 @@
1
+ export declare function toFireworksPublicModelId(modelId: string): string;
2
+ export declare function toFireworksWireModelId(modelId: string): string;
3
+ /**
4
+ * Fire Pass exposes its Kimi K2.6 Turbo subscription through a dedicated router
5
+ * endpoint at `accounts/fireworks/routers/<id>` rather than the `models/` namespace.
6
+ * We keep a friendly public id (e.g. `kimi-k2.6-turbo`) in the catalog and translate
7
+ * to the wire form (`accounts/fireworks/routers/kimi-k2p6-turbo`) at request time.
8
+ */
9
+ export declare function toFirepassPublicModelId(modelId: string): string;
10
+ export declare function toFirepassWireModelId(modelId: string): string;
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Whether Anthropic requests run in Foundry gateway mode.
3
+ *
4
+ * Resolved from trusted environment sources only. Enabling Foundry switches the
5
+ * request base URL and injects TLS client material, so whatever can set this
6
+ * redirects authenticated traffic. `$env` merges the caller's `cwd/.env`, so
7
+ * reading it there would let repository content flip the mode; resolve it the
8
+ * same way the credentials themselves are (launching shell plus Vibrato/user-owned
9
+ * `.env` files, never the project `.env`).
10
+ */
11
+ export declare function isFoundryEnabled(): boolean;
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Patch `globalThis.fetch` to advertise HTTP/2 in TLS ALPN, with transparent
3
+ * HTTP/1.1 fallback when the server doesn't negotiate `h2`.
4
+ *
5
+ * Bun's HTTP/2 client is gated on `BUN_FEATURE_FLAG_EXPERIMENTAL_HTTP2_CLIENT`,
6
+ * read by the native runtime before any JS executes; assigning to
7
+ * `process.env` from inside JS is a no-op. Per-request `protocol: "http2"`
8
+ * activates h2 over TLS ALPN and rejects with `error.code === "HTTP2Unsupported"`
9
+ * if the server picks anything else, so we catch and retry without the hint.
10
+ *
11
+ * Some HTTPS endpoints (e.g. corporate API gateways behind reverse proxies)
12
+ * advertise h2 via ALPN but then refuse or reset the connection at the HTTP/2
13
+ * framing layer. Bun surfaces these as `ConnectionRefused`, `ConnectionReset`,
14
+ * or `ConnectionClosed` rather than `HTTP2Unsupported`, so we treat those
15
+ * codes as h2-fallback triggers as well.
16
+ *
17
+ * Bun negotiates h2 via ALPN over TLS only (no h2c), so plain `http://` URLs
18
+ * skip the attempt entirely — avoids the throw/retry round-trip for localhost.
19
+ *
20
+ * Idempotent.
21
+ */
22
+ export declare function installH2Fetch(): void;
@@ -0,0 +1,59 @@
1
+ export type RawHttpRequestDump = {
2
+ provider: string;
3
+ api: string;
4
+ model: string;
5
+ method?: string;
6
+ url?: string;
7
+ headers?: Record<string, string>;
8
+ body?: unknown;
9
+ diagnostics?: Record<string, unknown>;
10
+ };
11
+ export type CapturedHttpErrorResponse = {
12
+ status: number;
13
+ headers?: Headers;
14
+ bodyText?: string;
15
+ bodyJson?: unknown;
16
+ };
17
+ /** Whether `message` (from a 400 response) signals an unavailable/unknown model. */
18
+ export declare function isModelUnavailableError(message: string, error: unknown): boolean;
19
+ /** Actionable guidance for selecting an available model/provider. */
20
+ export declare function formatModelUnavailableGuidance(dump: RawHttpRequestDump | undefined): string;
21
+ /** Directory holding the retained HTTP 400 dumps. */
22
+ export declare function httpRequestDumpDir(): string;
23
+ /**
24
+ * Drop the oldest dumps beyond the cap. Best-effort: diagnostics must never turn
25
+ * a request failure into a second failure, so every step swallows its error.
26
+ *
27
+ * File names are `${Date.now()}-${hash}.json`, so a lexical sort is chronological
28
+ * for the millisecond timestamps this writer produces.
29
+ */
30
+ export declare function pruneHttpRequestDumps(dir?: string): Promise<number>;
31
+ export declare function appendRawHttpRequestDumpFor400(message: string, error: unknown, dump: RawHttpRequestDump | undefined): Promise<string>;
32
+ /**
33
+ * Name the failed connection when the request never produced an HTTP status.
34
+ *
35
+ * Bun raises DNS and socket failures as a bare `Error` whose message is a
36
+ * standalone hint ("Was there a typo in the url or port?", "Unable to connect.
37
+ * Is the computer able to access the url?") while the actionable facts live on
38
+ * `code` and `path`. Those properties are dropped when only `message` reaches
39
+ * the assistant message, so a provider outage, a local DNS failure, and a
40
+ * mistyped custom base URL all render as the same context-free sentence.
41
+ * Appending the code and the target URL tells the user which host failed and
42
+ * whether the fault is theirs.
43
+ */
44
+ export declare function appendTransportFailureContext(message: string, error: unknown, rawRequestDump: RawHttpRequestDump | undefined): string;
45
+ export declare function finalizeErrorMessage(error: unknown, rawRequestDump: RawHttpRequestDump | undefined, capturedErrorResponse?: CapturedHttpErrorResponse): Promise<string>;
46
+ export declare function withHttpStatus(error: unknown, status: number): Error;
47
+ /**
48
+ * Rewrite error message for GitHub Copilot request failures.
49
+ * Must run AFTER finalizeErrorMessage since it replaces the message entirely.
50
+ *
51
+ * 400 `model_not_supported` = Copilot routing rollout gap for our OAuth client.
52
+ * A preview model (gpt-5.3-OpenAI code backend, gpt-5.4*, ...) flaps between 200 and
53
+ * 400 because only some of Copilot's backends have the model. After the
54
+ * in-request retry exhausts, surface guidance rather than the raw error.
55
+ * 401 = token invalid/expired → credential removal is safe, prompt re-login.
56
+ * 403 = token valid but access denied (plan, model policy, org restriction) →
57
+ * do NOT reuse the auth-failed string (which triggers credential removal).
58
+ */
59
+ export declare function rewriteCopilotError(errorMessage: string, error: unknown, provider: string): string;
@@ -0,0 +1,122 @@
1
+ export declare function getProviderStreamIdleTimeoutFallbackMs(provider: string): number | undefined;
2
+ export declare function isGrokModelId(modelId: string | undefined): boolean;
3
+ export declare function getProviderFirstEventTimeoutFallbackMs(provider: string): number | undefined;
4
+ /**
5
+ * Returns the idle timeout used for provider streaming transports.
6
+ *
7
+ * `VIB_OPENAI_STREAM_IDLE_TIMEOUT_MS` is honored first; `PI_OPENAI_STREAM_IDLE_TIMEOUT_MS` is a backward-compatible alias.
8
+ * Set `PI_STREAM_IDLE_TIMEOUT_MS=0` to disable the watchdog.
9
+ *
10
+ * Providers that legitimately stream much slower than the global default can pass
11
+ * `fallbackMs` to widen the floor used when neither env var nor caller option is set.
12
+ * Caller options still take precedence; env overrides still trump the fallback.
13
+ */
14
+ export declare function getStreamIdleTimeoutMs(fallbackMs?: number): number | undefined;
15
+ /**
16
+ * Returns the idle timeout used for OpenAI-family streaming transports.
17
+ *
18
+ * Honors `VIB_OPENAI_STREAM_IDLE_TIMEOUT_MS` first (`PI_OPENAI_STREAM_IDLE_TIMEOUT_MS` is the legacy alias). Set `=0` to disable.
19
+ * When `provider` is given, long-reasoning hosts (xAI Grok and Grok Build) use that floor instead of the 120s default.
20
+ * Grok models reached through other OpenAI-compatible hosts (`openrouter/x-ai/grok-*`, kilo, litellm, …) get the
21
+ * same floor keyed on the model id, because long-reasoning silence is a property of the model (#4797).
22
+ */
23
+ export declare function getOpenAIStreamIdleTimeoutMs(provider?: string, modelId?: string): number | undefined;
24
+ /**
25
+ * Returns the timeout used while waiting for the first stream event.
26
+ * The first token can legitimately take longer than later inter-event gaps,
27
+ * so the default never undershoots the steady-state idle timeout.
28
+ *
29
+ * Set `PI_STREAM_FIRST_EVENT_TIMEOUT_MS=0` to disable the watchdog.
30
+ *
31
+ * Providers whose first response can legitimately take longer (heavy reasoning,
32
+ * slow cold-start proxies) can pass `fallbackMs` to widen the floor used when
33
+ * neither env var nor caller option is set. Caller options still take precedence;
34
+ * env overrides still trump the fallback.
35
+ */
36
+ export declare function getStreamFirstEventTimeoutMs(idleTimeoutMs?: number, fallbackMs?: number): number | undefined;
37
+ /**
38
+ * Resolves the OpenAI SDK client `timeout` so stalled-before-headers requests are
39
+ * bounded by the same first-event window the transport watchdog uses after
40
+ * `create()` returns. Without this, providers that only arm
41
+ * `iterateWithIdleTimeout` post-setup can wait the full SDK default (10 minutes
42
+ * per attempt) before any provider-owned watchdog exists.
43
+ *
44
+ * - Explicit `0` disables the request timeout (the SDK treats `timeout: 0` as an
45
+ * immediate failure, so callers that disable the first-event watchdog must not
46
+ * pass a timeout).
47
+ * - Providers with a first-event fallback (Alibaba, Kimi) honor an explicit
48
+ * nonzero override as-is, even when shorter than the fallback.
49
+ * - Other providers floor an explicit override at the env/default first-event
50
+ * window so a short post-connect first-event budget cannot kill legitimate
51
+ * slow setup.
52
+ */
53
+ export declare function resolveOpenAISdkRequestTimeoutMs(provider: string, streamFirstEventTimeoutOverride?: number, modelId?: string): number | undefined;
54
+ /**
55
+ * Resolves the Anthropic SDK client `timeout` so stalled-before-headers requests
56
+ * are bounded. The Anthropic first-event watchdog deliberately arms only once
57
+ * response headers have arrived (setup latency must not consume the first-event
58
+ * budget), which left the connect/headers phase governed solely by the SDK
59
+ * default of 10 minutes per attempt — multiplied by SDK-internal retries, a
60
+ * connection that silently died right after a completed tool call could spin
61
+ * with no user-visible error for the better part of an hour.
62
+ *
63
+ * - Explicit `0` disables the request timeout, matching a disabled first-event
64
+ * watchdog.
65
+ * - An explicit nonzero override is floored at the env/default first-event
66
+ * window (which itself never undershoots the provider idle window) so a short
67
+ * post-connect first-event budget cannot kill legitimate slow setup.
68
+ */
69
+ export declare function resolveAnthropicSdkRequestTimeoutMs(provider: string, streamFirstEventTimeoutOverride?: number, streamIdleTimeoutOverride?: number): number | undefined;
70
+ export type Watchdog = NodeJS.Timeout | undefined;
71
+ export interface FirstEventTimeoutFacts {
72
+ requestBytes?: number;
73
+ firstEventElapsedMs?: number;
74
+ firstEventTimeoutMs?: number;
75
+ endpointClass?: "canonical" | "custom";
76
+ retryMaxAttempts?: number;
77
+ }
78
+ export declare class FirstEventTimeoutError extends Error {
79
+ readonly providerCode = "stream_first_event_timeout";
80
+ readonly requestBytes?: number;
81
+ readonly firstEventElapsedMs?: number;
82
+ readonly firstEventTimeoutMs?: number;
83
+ readonly endpointClass?: "canonical" | "custom";
84
+ readonly retryMaxAttempts?: number;
85
+ constructor(message: string, facts?: FirstEventTimeoutFacts);
86
+ }
87
+ /**
88
+ * Starts a watchdog that aborts a request if no first stream event arrives in time.
89
+ * Call `markFirstEventReceived()` as soon as the first event is observed.
90
+ */
91
+ export declare function createWatchdog(timeoutMs: number | undefined, onTimeout: () => void): Watchdog;
92
+ export interface IdleTimeoutIteratorOptions {
93
+ watchdog?: Watchdog;
94
+ idleTimeoutMs?: number;
95
+ firstItemTimeoutMs?: number;
96
+ errorMessage: string;
97
+ firstItemErrorMessage?: string;
98
+ onIdle?: () => void;
99
+ onFirstItemTimeout?: () => void;
100
+ /**
101
+ * Optional semantic-progress predicate. Non-progress items are still yielded,
102
+ * but they do not reset the idle deadline. This prevents provider
103
+ * keepalive/no-op events from keeping a stalled tool call alive forever.
104
+ */
105
+ isProgressItem?: (item: unknown) => boolean;
106
+ /**
107
+ * Cancel iteration as soon as this signal aborts. Required for caller-driven
108
+ * cancellation (ESC) when the underlying transport does not surface signal
109
+ * aborts to the iterator (HTTP/2 proxies, native sockets, mocked fetch).
110
+ * Without this, the consumer sleeps on iterator.next() until the idle/first
111
+ * -event watchdog fires — observable as the issue #912 "Working… forever"
112
+ * symptom on the github-copilot provider.
113
+ */
114
+ abortSignal?: AbortSignal;
115
+ }
116
+ /**
117
+ * Yields items from an async iterable while enforcing a maximum idle gap between items.
118
+ *
119
+ * The first item may use a shorter timeout so stuck requests can be aborted and retried
120
+ * before any user-visible content has streamed.
121
+ */
122
+ export declare function iterateWithIdleTimeout<T>(iterable: AsyncIterable<T>, options: IdleTimeoutIteratorOptions): AsyncGenerator<T>;
@@ -0,0 +1,98 @@
1
+ export interface UnicodeEscapePositionEvidence {
2
+ /** UTF-16 offset of the escape's leading backslash in the raw JSON. */
3
+ readonly offset: number;
4
+ /** Process-keyed tag of the encoded scalar; never the recoverable character. */
5
+ readonly scalarTag: string;
6
+ /** Process-keyed tag of the unambiguous array-index-free path; never raw field names. */
7
+ readonly pathTag: string;
8
+ /** Escapes in object keys are structural and can never be display-safe. */
9
+ readonly location: "key" | "value";
10
+ /** Ordinal of this string among values sharing the array-index-free path. */
11
+ readonly valueOrdinal: number;
12
+ /** UTF-16 offset of the decoded scalar inside that string value. */
13
+ readonly valueOffset: number;
14
+ }
15
+ export interface UnicodeEscapeEvidence {
16
+ readonly positions: readonly UnicodeEscapePositionEvidence[];
17
+ /** Total qualifying escapes observed, including positions omitted by the cap. */
18
+ readonly totalPositions: number;
19
+ /** More qualifying escapes existed than the bounded evidence can carry. */
20
+ readonly truncated: boolean;
21
+ /** The raw JSON could not be mapped exactly and unambiguously; validation must fail closed. */
22
+ readonly malformed: boolean;
23
+ /** Process-local HMAC binding the complete collector-produced envelope. */
24
+ readonly integrity: string;
25
+ }
26
+ interface UnicodeEscapeEvidenceTarget {
27
+ escapedNonAsciiArguments?: boolean;
28
+ escapedUnicodeArgumentEvidence?: UnicodeEscapeEvidence;
29
+ }
30
+ /** Stable, payload-free identity for an unambiguous array-index-free argument path. */
31
+ export declare function unicodeEscapePathTag(path: readonly string[]): string;
32
+ /** Process-keyed scalar identity used without retaining recoverable argument text. */
33
+ export declare function unicodeEscapeScalarTag(codePoint: number): string;
34
+ /** Verify that an evidence envelope is complete and was produced in this process. */
35
+ export declare function verifyUnicodeEscapeEvidence(evidence: UnicodeEscapeEvidence): boolean;
36
+ export declare function repairJson(json: string): string;
37
+ /**
38
+ * First unnecessary `\uXXXX` escape in a JSON document, or `undefined` when the
39
+ * document contains none.
40
+ *
41
+ * "Unnecessary" means the escape encodes a printable character JSON can carry
42
+ * literally, including ASCII. ASCII must remain observable because one mistyped
43
+ * nibble can move a non-ASCII escape into ASCII (`\u00b7` → `\u0077`). Control
44
+ * characters (< U+0020), DEL, and unpaired surrogates are excluded. A `\\uXXXX`
45
+ * sequence is a literal backslash followed by `u` — the
46
+ * intended source syntax when the model is writing code or a nested JSON
47
+ * document — and is skipped, which is why this scans the raw text with the same
48
+ * string/escape state machine as {@link repairJson} instead of using a regex.
49
+ *
50
+ * Models that spell text as hand-written hex instead of literal characters
51
+ * mistype the digits, and every mistyped nibble silently decodes to a different
52
+ * but perfectly valid character (`\uc7a5` vs `\uc7a4`). The resulting arguments
53
+ * parse cleanly and cannot be repaired after the fact, so the escape itself is
54
+ * the only observable evidence that the payload is untrustworthy.
55
+ */
56
+ export declare function findUnnecessaryUnicodeEscape(json: string): string | undefined;
57
+ /**
58
+ * Bounded raw-position/scalar evidence for every suspicious `\uXXXX` escape.
59
+ *
60
+ * Scalars and paths are carried only as process-keyed HMAC tags, so terminal
61
+ * validation can match them against decoded arguments without retaining
62
+ * recoverable characters, keys, or values in messages, diagnostics, or durable
63
+ * session artifacts. Array indices are
64
+ * intentionally omitted to preserve `questions.question`-style field matching.
65
+ */
66
+ export declare function collectUnicodeEscapeEvidence(json: string): UnicodeEscapeEvidence | undefined;
67
+ /**
68
+ * Return evidence only when decoded tool arguments are unsafe to execute.
69
+ *
70
+ * Valid JSON escapes and literal UTF-8 have the same canonical decoded value,
71
+ * including a valid scalar whose hex digits differ from what a caller intended:
72
+ * runtime syntax validation cannot infer author intent after decoding.
73
+ * Malformed escape-bearing JSON, duplicate/deep suspicious escape evidence, and
74
+ * unpaired UTF-16 surrogates keep the fail-closed path.
75
+ */
76
+ export declare function collectUnsafeUnicodeEscapeEvidence(json: string): UnicodeEscapeEvidence | undefined;
77
+ /** Attach unsafe raw evidence while preserving the existing call-level guard flag. */
78
+ export declare function captureUnicodeEscapeEvidence(target: UnicodeEscapeEvidenceTarget, json: string): boolean;
79
+ /** Attach evidence as transient, non-enumerable metadata excluded from serialization. */
80
+ export declare function attachUnicodeEscapeEvidence(target: UnicodeEscapeEvidenceTarget, evidence: UnicodeEscapeEvidence): void;
81
+ export declare function parseJsonWithRepair<T>(json: string): T;
82
+ /**
83
+ * Attempts to parse potentially incomplete JSON during streaming.
84
+ * Always returns a valid object, even if the JSON is incomplete.
85
+ *
86
+ * @param partialJson The partial JSON string from streaming
87
+ * @returns Parsed object or empty object if parsing fails
88
+ */
89
+ export declare function parseStreamingJson<T = Record<string, unknown>>(partialJson: string | undefined): T;
90
+ /**
91
+ * Whether a string is a complete, well-formed JSON document (strict parse, no
92
+ * repair). Used to distinguish a tool-call argument blob that finished cleanly
93
+ * from one that was cut off mid-stream (truncation). An empty / whitespace-only
94
+ * string is treated as complete: a tool invoked with no arguments legitimately
95
+ * streams an empty buffer and must not be flagged as truncated.
96
+ */
97
+ export declare function isCompleteJson(text: string | undefined): boolean;
98
+ export {};
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Alibaba Token Plan login flow.
3
+ *
4
+ * Alibaba Token Plan provides OpenAI-compatible models via
5
+ * https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1.
6
+ *
7
+ * This is not OAuth - it's a simple API key flow:
8
+ * 1. Open browser to Alibaba Cloud Model Studio console
9
+ * 2. User copies their API key
10
+ * 3. User pastes the API key into the CLI
11
+ */
12
+ import type { OAuthController } from "./types";
13
+ /**
14
+ * Login to Alibaba Token Plan.
15
+ *
16
+ * Opens browser to API keys page, prompts user to paste their API key.
17
+ * Returns the API key directly (not OAuthCredentials - this isn't OAuth).
18
+ */
19
+ export declare function loginAlibabaTokenPlan(options: OAuthController): Promise<string>;
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Anthropic OAuth flow (Anthropic model Pro/Max)
3
+ */
4
+ import { OAuthCallbackFlow } from "./callback-server";
5
+ import type { OAuthController, OAuthCredentials } from "./types";
6
+ /**
7
+ * Redirect target for the paste-a-code login. Anthropic renders the
8
+ * authorization code on this page instead of redirecting into this machine, so
9
+ * a vib running over SSH, in a container, or on a headless box can be paired
10
+ * from a browser that has no route back to `localhost:54545`.
11
+ *
12
+ * Deliberately a hard-coded constant rather than an env/config override: this
13
+ * is where the authorization code is delivered, so making it injectable would
14
+ * turn any writable environment into an auth-code exfiltration channel.
15
+ */
16
+ export declare const ANTHROPIC_MANUAL_REDIRECT_URI = "https://platform.claude.com/oauth/code/callback";
17
+ export interface AnthropicOAuthFlowOptions {
18
+ /**
19
+ * Pair by pasting the code Anthropic displays instead of waiting on a local
20
+ * `localhost:54545` callback. Use when the browser completing the login has
21
+ * no network route back to the machine running vib.
22
+ */
23
+ manualCode?: boolean;
24
+ }
25
+ export declare class AnthropicOAuthFlow extends OAuthCallbackFlow {
26
+ #private;
27
+ constructor(ctrl: OAuthController, options?: AnthropicOAuthFlowOptions);
28
+ generateAuthUrl(state: string, redirectUri: string): Promise<{
29
+ url: string;
30
+ instructions?: string;
31
+ }>;
32
+ exchangeToken(code: string, state: string, redirectUri: string): Promise<OAuthCredentials>;
33
+ }
34
+ /**
35
+ * Login with Anthropic OAuth
36
+ */
37
+ export declare function loginAnthropic(ctrl: OAuthController, options?: AnthropicOAuthFlowOptions): Promise<OAuthCredentials>;
38
+ /**
39
+ * Refresh Anthropic OAuth token
40
+ */
41
+ export declare function refreshAnthropicToken(refreshToken: string): Promise<OAuthCredentials>;
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Shared factory for API-key-paste "login" flows.
3
+ *
4
+ * Several providers (Cerebras, Synthetic, Moonshot, Together, NanoGPT, ZenMux,
5
+ * Command Code GOAT)
6
+ * don't actually implement OAuth — they just ask the user to paste an API key,
7
+ * optionally validate it, and return the trimmed key.
8
+ */
9
+ import type { OAuthController } from "./types";
10
+ type ChatCompletionsValidation = {
11
+ kind: "chat-completions";
12
+ provider: string;
13
+ baseUrl: string;
14
+ model: string;
15
+ requireInferenceResponse?: boolean;
16
+ };
17
+ type ModelsEndpointValidation = {
18
+ kind: "models-endpoint";
19
+ provider: string;
20
+ modelsUrl: string;
21
+ };
22
+ export type ApiKeyLoginConfig = {
23
+ /** Display name used in error messages, e.g. "Cerebras", "NanoGPT". */
24
+ providerLabel: string;
25
+ /** URL opened in browser for the user to grab their key. */
26
+ authUrl: string;
27
+ /** Instructions shown with the onAuth callback. */
28
+ instructions: string;
29
+ /** Prompt message shown when asking for the key paste. */
30
+ promptMessage: string;
31
+ /** Placeholder string for the prompt (e.g. "sk-...", "csk-..."). */
32
+ placeholder: string;
33
+ /** Validation strategy, or `null` to skip validation. */
34
+ validation: ChatCompletionsValidation | ModelsEndpointValidation | null;
35
+ validationProgressMessage?: string;
36
+ };
37
+ export declare function createApiKeyLogin(config: ApiKeyLoginConfig): (options: OAuthController) => Promise<string>;
38
+ export {};
@@ -0,0 +1,39 @@
1
+ type OpenAICompatibleValidationOptions = {
2
+ provider: string;
3
+ apiKey: string;
4
+ baseUrl: string;
5
+ model: string;
6
+ signal?: AbortSignal;
7
+ fetch?: typeof globalThis.fetch;
8
+ requireInferenceResponse?: boolean;
9
+ timeoutMs?: number;
10
+ };
11
+ type ModelListValidationOptions = {
12
+ provider: string;
13
+ apiKey: string;
14
+ modelsUrl: string;
15
+ signal?: AbortSignal;
16
+ fetch?: typeof globalThis.fetch;
17
+ timeoutMs?: number;
18
+ };
19
+ /**
20
+ * Validate an API key against an OpenAI-compatible chat completions endpoint.
21
+ *
22
+ * Performs a minimal request to verify credentials and endpoint access.
23
+ */
24
+ export declare function validateOpenAICompatibleApiKey(options: OpenAICompatibleValidationOptions): Promise<void>;
25
+ /**
26
+ * Validate a provider models endpoint's reachability and response shape.
27
+ *
28
+ * Useful for providers where access to specific models may vary by plan and
29
+ * should not block login; an available model list is not proof that an
30
+ * authenticated inference request will succeed for the supplied key.
31
+ *
32
+ * A 200 status alone is NOT accepted: a captive portal, misrouting proxy, or
33
+ * broken gateway can answer 200 with an HTML page or an empty JSON object.
34
+ * The body must parse as JSON and carry a recognizable model list before the
35
+ * endpoint is considered reachable. This catalog check is not proof that
36
+ * authenticated inference is entitled to use the supplied key.
37
+ */
38
+ export declare function validateApiKeyAgainstModelsEndpoint(options: ModelListValidationOptions): Promise<void>;
39
+ export {};
@@ -0,0 +1 @@
1
+ export declare const loginBizRouter: (options: import("./types").OAuthController) => Promise<string>;