@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,93 @@
1
+ import { type DescriptionSpillFormat } from "./spill";
2
+ import { type JsonObject } from "./types";
3
+ export type ResidualSchemaIncompatibility = "type-array" | "type-null" | "nullable" | "combiners";
4
+ export interface NormalizeSchemaOptions {
5
+ unsupportedFields: (key: string) => boolean;
6
+ normalizeFieldNames: boolean;
7
+ collapseNullFields: boolean;
8
+ normalizeTypeArrayToNullable: boolean;
9
+ stripNullableKeyword: boolean;
10
+ autoPropertyOrdering: boolean;
11
+ ensureObjectProperties: boolean;
12
+ liftStrippedToDescription: false | {
13
+ keys?: (key: string) => boolean;
14
+ format?: DescriptionSpillFormat;
15
+ };
16
+ mergeObjectCombiners: boolean;
17
+ collapseSameTypeCombiners: boolean;
18
+ collapseMixedTypeCombiners: boolean;
19
+ stripResidualCombinersFixpoint: boolean;
20
+ extractNullableFromUnions: boolean;
21
+ rejectResidualIncompatibilities?: ReadonlyArray<ResidualSchemaIncompatibility>;
22
+ validateAndFallback?: {
23
+ fallback: unknown;
24
+ };
25
+ }
26
+ /** Copy all keys from a schema except the specified combiner key. */
27
+ export declare function copySchemaWithout(schema: JsonObject, combiner: string): JsonObject;
28
+ /**
29
+ * Recursively strip any remaining anyOf/oneOf that same-type or mixed-type
30
+ * collapse can handle. This is needed because object-combiner merging can
31
+ * create new anyOf in merged subtrees after child normalization already ran.
32
+ */
33
+ export declare function stripResidualCombiners(value: unknown, epoch?: number): unknown;
34
+ export declare function normalizeSchema(value: unknown, options: NormalizeSchemaOptions): unknown;
35
+ export declare function normalizeSchemaForGoogle(value: unknown): unknown;
36
+ export declare function normalizeSchemaForCCA(value: unknown): unknown;
37
+ export declare function normalizeSchemaForMCP(value: unknown): unknown;
38
+ /**
39
+ * OpenAI Responses rejects `oneOf` in tool schemas even when strict mode is
40
+ * disabled, and rejects every schema node with `type: "object"` unless it has
41
+ * a `properties` member. Normalize only schema-valued positions so literal
42
+ * payloads under `enum`, `const`, `default`, and `examples` remain unchanged.
43
+ *
44
+ * Identity-preserving: returns the input reference unchanged when no rewrite
45
+ * occurred so callers can dedupe via reference equality (and the strict-mode
46
+ * cache stays warm). If a node has both `oneOf` and `anyOf`, the two are
47
+ * concatenated (the wire payload accepts a single union; preserving both
48
+ * would not survive).
49
+ */
50
+ export declare function sanitizeSchemaForOpenAIResponses(schema: JsonObject): JsonObject;
51
+ /**
52
+ * Alias for {@link sanitizeSchemaForOpenAIResponses} matching the
53
+ * `normalizeSchemaFor*` dispatcher naming used elsewhere in this module.
54
+ */
55
+ export declare const normalizeSchemaForOpenAIResponses: (schema: JsonObject) => JsonObject;
56
+ /**
57
+ * First pass of strict-mode preparation.
58
+ *
59
+ * Rewrites everything strict mode forbids into something it accepts:
60
+ * - Drops non-structural keywords (`format`, `pattern`, `examples`, …),
61
+ * `const`, `nullable`, and `additionalProperties` (re-added by
62
+ * `enforceStrictSchema` as `false`).
63
+ * - `type: [a, b]` → `anyOf: [{type: a, …}, {type: b, …}]`, copying only the
64
+ * keywords each variant can use (e.g. `properties` stays only on the
65
+ * object variant).
66
+ * - `const` → single-entry `enum`.
67
+ * - Description carries a `(default: X)` suffix so the model still sees the
68
+ * documented default after the keyword is stripped.
69
+ * - `nullable: true` wraps the whole node in `anyOf:[T,{type:"null"}]`.
70
+ *
71
+ * Recurses into properties, items, prefixItems, combinators, and $defs. The
72
+ * `cache` WeakMap dedupes shared subgraphs; the `epoch` is the cycle guard.
73
+ */
74
+ export declare function sanitizeSchemaForStrictMode(schema: Record<string, unknown>, epoch?: number, cache?: WeakMap<Record<string, unknown>, Record<string, unknown>>, root?: Record<string, unknown>): Record<string, unknown>;
75
+ /**
76
+ * Recursively enforces JSON Schema constraints required by OpenAI/OpenAI code backend strict mode:
77
+ * - `additionalProperties: false` on every object node
78
+ * - every key in `properties` present in `required`
79
+ *
80
+ * Properties absent from the original `required` array were TypeBox-optional.
81
+ * They are made nullable (`anyOf: [T, { type: "null" }]`) so the model can
82
+ * signal omission by outputting null rather than omitting the key entirely.
83
+ *
84
+ * @throws {Error} When a schema node has no `type`, array-based combinator
85
+ * (`anyOf`/`allOf`/`oneOf`), object-based combinator (`not`), or `$ref` —
86
+ * i.e. the node is not representable in strict mode. Prefer
87
+ * {@link tryEnforceStrictSchema} which catches this and degrades gracefully.
88
+ */
89
+ export declare function enforceStrictSchema(schema: Record<string, unknown>, cache?: WeakMap<Record<string, unknown>, Record<string, unknown>>): Record<string, unknown>;
90
+ export declare function tryEnforceStrictSchema(schema: Record<string, unknown>): {
91
+ schema: Record<string, unknown>;
92
+ strict: boolean;
93
+ };
@@ -0,0 +1,12 @@
1
+ /** True when a JSON Schema node describes an object (explicit `type` or `properties`). */
2
+ export declare function isJsonSchemaObjectNode(schema: Record<string, unknown>): boolean;
3
+ /**
4
+ * Flatten a provider-emitted tool ROOT whose top level is a `oneOf`/`anyOf`/`allOf`
5
+ * combinator into one `type: "object"` schema: merge object-branch properties,
6
+ * derive the discriminant (`action`) enum, keep the common required set, and demote
7
+ * leftover combinators plus per-branch guidance into the description. Nested
8
+ * combinators (inside individual properties) are left untouched.
9
+ *
10
+ * Idempotent: a root that already lacks top-level combinators is returned unchanged.
11
+ */
12
+ export declare function flattenToolRootCombinators(schema: Record<string, unknown>): Record<string, unknown>;
@@ -0,0 +1,8 @@
1
+ import type { JsonObject } from "./types";
2
+ export type DescriptionSpillFormat = "spill" | "paren";
3
+ /**
4
+ * Demote stripped JSON Schema keywords into a node's `description` so the model
5
+ * still receives the constraint as natural-language context after the wire
6
+ * schema drops it.
7
+ */
8
+ export declare function spillToDescription(node: JsonObject, entries: ReadonlyArray<readonly [string, unknown]>, format?: DescriptionSpillFormat): void;
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Symbol-keyed lazy memoization stamped directly onto the host object.
3
+ *
4
+ * Faster than a module-level `WeakMap` in V8/JSC because the symbol slot is
5
+ * resolved through the object's hidden class instead of a side-table hash
6
+ * lookup. The slot is defined as a non-enumerable property so the stamp
7
+ * does not leak through `{...spread}`, `Object.keys`, `JSON.stringify`, or
8
+ * `toEqual`-style deep equality.
9
+ *
10
+ * Caveats: the stamp lives as long as the host object, even after callers
11
+ * release their references to the cached value — only use this for caches
12
+ * whose lifetime should match the host. Frozen hosts will throw on write in
13
+ * strict mode; callers that may receive frozen input must handle that.
14
+ */
15
+ export declare function stamp<T extends object, V>(target: T, key: symbol, compute: (target: T) => V): V;
16
+ export declare function epochNext(): number;
17
+ /**
18
+ * Marks `target` as visited for this `epoch`. Returns `true` the first time
19
+ * it is called for a given (target, epoch) pair and `false` on every
20
+ * subsequent call within the same epoch.
21
+ */
22
+ export declare function once<T extends object>(target: T, epoch: number): boolean;
23
+ /** Returns `true` on first entry, `false` if `target` is already on the current path. */
24
+ export declare function enter<T extends object>(target: T): boolean;
25
+ export declare function exit<T extends object>(target: T): void;
@@ -0,0 +1,4 @@
1
+ export type JsonObject = Record<string, unknown>;
2
+ export declare function isJsonObject(value: unknown): value is JsonObject;
3
+ /** True when `value` is a plain JSON object with no own enumerable keys. */
4
+ export declare function isJsonObjectEmpty(value: JsonObject): boolean;
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Compute the wire (JSON Schema) representation of a tool's parameters and
3
+ * convert TypeBox-style schemas into Zod for internal validation.
4
+ *
5
+ * Tools may author parameters in two shapes:
6
+ * 1. Zod (canonical going forward) — converted to JSON Schema on demand.
7
+ * 2. TypeBox / plain JSON Schema (legacy + extension compat) — upgraded to
8
+ * draft 2020-12 without converting through Zod.
9
+ *
10
+ * Both are normalized at the boundary so providers and validators see the same
11
+ * JSON Schema dialect.
12
+ */
13
+ import { type ZodType } from "zod/v4";
14
+ import type { Tool } from "../../types";
15
+ /**
16
+ * True when `value` is a live Zod schema instance.
17
+ *
18
+ * The check is stricter than "has a `_zod` property" because a JSON
19
+ * round-trip preserves the `_zod` key as a plain object and would otherwise
20
+ * fool the predicate — see issue #1101, where MCP servers ship
21
+ * `JSON.stringify(zodSchemaInstance)` as a tool's `inputSchema` and the
22
+ * resulting plain object then explodes `z.toJSONSchema` because the prototype
23
+ * (and every Zod parsing method) is gone.
24
+ *
25
+ * Live Zod instances always carry a `.parse` function on the prototype;
26
+ * impostors do not.
27
+ */
28
+ export declare function isZodSchema(value: unknown): value is ZodType;
29
+ /**
30
+ * Normalize `{}` (empty JSON Schema = `z.unknown()` / unconstrained value) to
31
+ * boolean `true` in every schema-valued position. JSON Schema draft 2020-12
32
+ * §4.3.1: `{}` and `true` are semantically equivalent ("any JSON value").
33
+ * Grammar-constrained samplers (llama.cpp, etc.) treat the object form as
34
+ * "generate an empty object" rather than "any JSON value", causing open-typed
35
+ * fields like `extra.title` (from `z.record(z.string(), z.unknown())`) to
36
+ * always emit `{}` instead of the intended string/number/etc. (issue #1179).
37
+ *
38
+ * Mutates in place. Provider-agnostic — applied to every tool wire schema so
39
+ * Anthropic, Google, OpenAI, Ollama, Bedrock, and Cursor all see the
40
+ * normalized form, regardless of whether the source was Zod or TypeBox.
41
+ */
42
+ export declare function normalizeEmptySchemas(node: unknown): void;
43
+ /** Convert a Zod schema into the JSON Schema shape providers consume. */
44
+ export declare function zodToWireSchema(schema: ZodType): Record<string, unknown>;
45
+ /**
46
+ * Resolve a tool's parameters to a JSON Schema object suitable for sending
47
+ * over the wire. Zod schemas are converted (and cached); legacy TypeBox / raw
48
+ * JSON Schema parameters are upgraded to draft 2020-12 (and cached).
49
+ *
50
+ * Both branches finish with `normalizeEmptySchemas` so every provider —
51
+ * OpenAI, Anthropic, Google, Ollama, Bedrock, Cursor — sees `{}` normalized
52
+ * to `true` in schema-valued positions (issue #1179).
53
+ */
54
+ export declare function toolWireSchema(tool: Tool): Record<string, unknown>;
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Defensive rewrite for nodes that look like `JSON.stringify(zodSchemaInstance)`
3
+ * output rather than JSON Schema. MCP servers using Zod 4 sometimes ship a
4
+ * serialised schema instance directly as a tool's `inputSchema`, because the
5
+ * fields Zod surfaces on its instances (`type`, `enum`, `options`, `def`) shadow
6
+ * (and clash with) JSON Schema keywords. The resulting payload is neither valid
7
+ * Zod nor valid JSON Schema 2020-12 and Anthropic's strict validator rejects
8
+ * the whole tool list.
9
+ *
10
+ * Symptoms we've observed (gitnexus_impact.direction):
11
+ * {
12
+ * def: { type: "enum", entries: { upstream: "upstream", ... } },
13
+ * type: "enum", // <- invalid `type` value
14
+ * enum: { upstream: "upstream", ... }, // <- `enum` MUST be an array
15
+ * options: ["upstream", "downstream"],
16
+ * }
17
+ *
18
+ * This module recognises the shape (`def.type === node.type` and `def.type` is
19
+ * a known Zod kind) and rewrites it to clean JSON Schema where deterministic.
20
+ * For Zod kinds we don't fully model, we strip the toxic siblings (`def`,
21
+ * `options`, object-shaped `enum`) and drop an invalid `type` so the remainder
22
+ * passes meta-schema validation as a permissive node.
23
+ *
24
+ * Pure / identity-preserving: returns the input reference when nothing changes.
25
+ */
26
+ /**
27
+ * Walks a JSON value and rewrites every Zod-instance-shaped node into clean
28
+ * JSON Schema 2020-12. Identity-preserving when no rewrite fires. Tolerates
29
+ * self-referential graphs — a revisited node returns as-is.
30
+ */
31
+ export declare function decontaminateZodInstance(value: unknown): unknown;
@@ -0,0 +1,10 @@
1
+ import type { ServerSentEvent } from "@vib-rato/utils";
2
+ import type { RawSseEvent } from "../types";
3
+ type FetchFunction = (input: string | URL | Request, init?: RequestInit) => Promise<Response>;
4
+ type FetchWithPreconnect = FetchFunction & {
5
+ preconnect?: typeof fetch.preconnect;
6
+ };
7
+ type RawSseObserver = (event: RawSseEvent) => void;
8
+ export declare function notifyRawSseEvent(observer: RawSseObserver | undefined, event: ServerSentEvent | RawSseEvent): void;
9
+ export declare function wrapFetchForSseDebug(fetchImpl: FetchWithPreconnect, observer: RawSseObserver | undefined): FetchWithPreconnect;
10
+ export {};
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Streaming-safe filter for the Kimi K2 chat-template "tool-call section"
3
+ * grammar.
4
+ *
5
+ * Some providers hosting Kimi K2 (the native `kimi-code` API, OpenRouter,
6
+ * Fireworks, and others) leak the raw chat-template special tokens into
7
+ * `delta.content` instead of emitting structured `tool_calls`. Visually
8
+ * that looks like:
9
+ *
10
+ * <|tool_calls_section_begin|>
11
+ * <|tool_call_begin|>functions.read:0<|tool_call_argument_begin|>{"path":"foo"}<|tool_call_end|>
12
+ * <|tool_calls_section_end|>
13
+ *
14
+ * Without healing, the user sees the raw markers and the agent loop never
15
+ * sees a tool call. This module reconstructs the embedded calls and strips
16
+ * the markers from visible text. It is stream-aware: any partial token at
17
+ * the end of a chunk is held back until the next chunk arrives.
18
+ */
19
+ import { type UnicodeEscapeEvidence } from "./json-parse";
20
+ export interface HealedToolCall {
21
+ readonly id: string;
22
+ readonly name: string;
23
+ readonly arguments: string;
24
+ /**
25
+ * Whether the raw leaked payload carried unsafe Unicode argument data.
26
+ * Captured before the normalizing round-trip below, which would otherwise
27
+ * erase malformed escape evidence. Valid `\uXXXX` spellings decode
28
+ * canonically and leave this false.
29
+ */
30
+ readonly escapedNonAsciiArguments: boolean;
31
+ readonly escapedUnicodeArgumentEvidence?: UnicodeEscapeEvidence;
32
+ }
33
+ /**
34
+ * State machine that consumes streamed text, emits visible text with all
35
+ * Kimi tool-call markers stripped, and accumulates the embedded tool calls
36
+ * for the caller to drain after each `feed()`.
37
+ *
38
+ * One instance per stream. Feed only the channel that may carry leaked
39
+ * markers (typically `delta.content`); mixing reasoning + content into the
40
+ * same accumulator corrupts the holdback buffer if both channels race in
41
+ * the same chunk.
42
+ */
43
+ export declare class ToolCallHealer {
44
+ #private;
45
+ /**
46
+ * Feed a chunk of streamed text. Returns the portion safe to emit
47
+ * downstream (with all tokens stripped). Any partial token suffix is
48
+ * held back until the next chunk arrives or {@link flushPending} is
49
+ * called.
50
+ */
51
+ feed(text: string): string;
52
+ /**
53
+ * Like {@link feed}, but discards any tool calls that the chunk completes.
54
+ * Used when the upstream provider also emits structured `delta.tool_calls`
55
+ * for the same chunk: the healer still strips leaked marker text from the
56
+ * visible output, but the structured payload remains the single source of
57
+ * truth for the call list.
58
+ */
59
+ consumeWithoutCalls(text: string): string;
60
+ /**
61
+ * Drain accumulated tool calls. The internal list is cleared so a
62
+ * subsequent section in the same stream (rare) yields fresh calls.
63
+ */
64
+ drainCompleted(): HealedToolCall[];
65
+ /**
66
+ * Flush any held-back fragment when the stream ends. If we were mid-call
67
+ * the partial is dropped (emitting raw token bytes would surface markers
68
+ * to the user); otherwise the fragment is returned verbatim so a literal
69
+ * `<|` in prose is not silently lost.
70
+ */
71
+ flushPending(): string;
72
+ /** True once any tool-call section in this stream has fully closed. */
73
+ get sectionClosed(): boolean;
74
+ }
75
+ /**
76
+ * Cheap test for whether a given model is known to leak Kimi-K2 chat-template
77
+ * tool-call tokens into visible text. Used to gate the per-stream healer so
78
+ * non-Kimi providers do not pay for the scan.
79
+ */
80
+ export declare function modelMayLeakKimiToolCalls(provider: string, modelId: string): boolean;
@@ -0,0 +1,57 @@
1
+ import type { Api, Model, ToolChoice, ToolChoiceCompat, ToolChoiceSupport, ToolChoiceSupportSource } from "../types";
2
+ /**
3
+ * Claude Mythos accepts tools but rejects forced tool use (Anthropic 400:
4
+ * "tool_choice forces tool use is not compatible with this model"). Catalog
5
+ * generation and dynamic discovery use this to default `toolChoiceSupport`.
6
+ */
7
+ export declare function isClaudeForcedToolChoiceIncapableModelId(modelId: string): boolean;
8
+ /** Derives the effective static tool-choice support from compatibility flags. */
9
+ export declare function deriveToolChoiceSupport(compat: ToolChoiceCompat | undefined): {
10
+ support: ToolChoiceSupport;
11
+ source: "static" | "derived";
12
+ };
13
+ /** Returns the registry key used for runtime tool-choice capability overrides. */
14
+ export declare function toolChoiceRegistryKey(model: Model<Api>): string;
15
+ /** Returns the current runtime tool-choice capability override for a model. */
16
+ export declare function getToolChoiceCapabilityOverride(model: Model<Api>): ToolChoiceSupport | undefined;
17
+ /** Clears runtime tool-choice capability overrides for tests. */
18
+ export declare function clearToolChoiceIncapabilityRegistryForTests(): void;
19
+ /** Overrides durable-cache dependencies for isolated tests. */
20
+ export declare function configureToolChoiceCapabilityCacheForTests(options?: {
21
+ path?: string;
22
+ now?: () => number;
23
+ beforeExpiredDelete?: () => void;
24
+ beforeMalformedDelete?: () => void;
25
+ onCacheOpen?: () => void;
26
+ simulateOperationError?: () => Error | undefined;
27
+ beforeCorruptRetire?: () => void;
28
+ beforeLockExactUnlink?: (lockPath: string) => void;
29
+ }): void;
30
+ /** Records a discovered maximum supported tool-choice level for a model. */
31
+ export declare function markToolChoiceIncapability(model: Model<Api>, maxSupport: ToolChoiceSupport, reason?: string): void;
32
+ /**
33
+ * Resolves a requested tool_choice against static and runtime capability limits.
34
+ * `compat` overrides `model.compat` for transports that layer URL/provider
35
+ * detection on top of explicit model overrides (e.g. resolveOpenAICompat).
36
+ */
37
+ export declare function resolveToolChoice(model: Model<Api>, requested: ToolChoice | undefined, compat?: ToolChoiceCompat): ResolveToolChoiceResult;
38
+ /** Detects provider errors indicating forced tool_choice is unsupported. */
39
+ export declare function isForcedToolChoiceUnsupportedError(error: unknown, sentForcedToolChoice: boolean): boolean;
40
+ /**
41
+ * Detects Codex's statusless SSE rejection for a named function tool choice.
42
+ * This is intentionally separate from the shared HTTP-400 classifier.
43
+ */
44
+ export declare function isCodexStatuslessNamedToolChoiceNotFoundError(error: unknown, forcedToolName: string | undefined, sentToolNames: readonly string[]): boolean;
45
+ export type { ToolChoiceCompat, ToolChoiceSupport, ToolChoiceSupportSource } from "../types";
46
+ export interface ResolveToolChoiceResult {
47
+ requestedChoice: ToolChoice | undefined;
48
+ requestedLevel: ToolChoiceSupport;
49
+ resolvedChoice: ToolChoice | undefined;
50
+ resolvedLevel: ToolChoiceSupport;
51
+ support: ToolChoiceSupport;
52
+ supportSource: ToolChoiceSupportSource;
53
+ degraded: boolean;
54
+ reason?: string;
55
+ registryKey: string;
56
+ targetToolName?: string;
57
+ }
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Utility functions for mapping unified ToolChoice to provider-specific formats.
3
+ */
4
+ import type { ToolChoice } from "../types";
5
+ /** OpenAI Completions API tool choice format */
6
+ export type OpenAICompletionsToolChoice = "auto" | "none" | "required" | {
7
+ type: "function";
8
+ function: {
9
+ name: string;
10
+ };
11
+ } | undefined;
12
+ /** OpenAI Responses API tool choice format (flat structure) */
13
+ export type OpenAIResponsesToolChoice = "auto" | "none" | "required" | {
14
+ type: "function";
15
+ name: string;
16
+ } | {
17
+ type: "custom";
18
+ name: string;
19
+ } | undefined;
20
+ /** Anthropic-compatible tool choice format */
21
+ export type AnthropicToolChoice = "auto" | "none" | "any" | {
22
+ type: "tool";
23
+ name: string;
24
+ } | undefined;
25
+ /**
26
+ * Map unified ToolChoice to OpenAI Completions API format.
27
+ * - "any" → "required"
28
+ * - { type: "tool", name } → { type: "function", function: { name } }
29
+ */
30
+ export declare function mapToOpenAICompletionsToolChoice(choice?: ToolChoice): OpenAICompletionsToolChoice;
31
+ /**
32
+ * Returns true when an OpenAI-completions `tool_choice` value forces a tool
33
+ * call (`"required"` or a function-name pin), as opposed to leaving it open
34
+ * (`"auto"`, `"none"`, or unset). Accepts `unknown` because the param shape
35
+ * pulled from the OpenAI SDK (`ChatCompletionToolChoiceOption`) widens with
36
+ * each release; this check only needs the open/forced bit.
37
+ */
38
+ export declare function isForcedToolChoice(choice: unknown): boolean;
39
+ /**
40
+ * Map unified ToolChoice to OpenAI Responses API format.
41
+ * - "any" → "required"
42
+ * - { type: "tool", name } → { type: "function", name } (flat structure)
43
+ */
44
+ export declare function mapToOpenAIResponsesToolChoice(choice?: ToolChoice): OpenAIResponsesToolChoice;
45
+ /**
46
+ * Map unified ToolChoice to Anthropic-compatible format.
47
+ * - "required" → "any"
48
+ * - { type: "function", ... } → { type: "tool", name }
49
+ */
50
+ export declare function mapToAnthropicToolChoice(choice?: ToolChoice): AnthropicToolChoice;
@@ -0,0 +1,17 @@
1
+ import type { Tool, ToolCall } from "../types";
2
+ /**
3
+ * Finds a tool by name and validates the tool call arguments against its schema.
4
+ * @param tools Array of tool definitions
5
+ * @param toolCall The tool call from the LLM
6
+ * @returns The validated arguments
7
+ * @throws Error if tool is not found or validation fails
8
+ */
9
+ export declare function validateToolCall(tools: Tool[], toolCall: ToolCall): ToolCall["arguments"];
10
+ /**
11
+ * Validates tool call arguments against the tool's schema (Zod or plain JSON
12
+ * Schema). Applies LLM-quirk coercions (numeric strings, JSON-string
13
+ * containers, null-for-optional, null-for-default) before declaring failure.
14
+ *
15
+ * @throws Error with a formatted message when validation cannot be reconciled.
16
+ */
17
+ export declare function validateToolArguments(tool: Tool, toolCall: ToolCall): ToolCall["arguments"];
@@ -0,0 +1,117 @@
1
+ import type { ResponseInput } from "openai/resources/responses/responses";
2
+ import type { CacheRetention, OpenAIResponsesHistoryPayload, ProviderPayload } from "./types";
3
+ export { isRecord } from "@vib-rato/utils";
4
+ export declare function normalizeSystemPrompts(systemPrompt: readonly string[] | string | undefined | null): string[];
5
+ export declare function sanitizeJsonStrings(value: unknown): unknown;
6
+ export declare function toNumber(value: unknown): number | undefined;
7
+ export declare function toPositiveNumber(value: unknown, fallback: number): number;
8
+ export declare function toBoolean(value: unknown): boolean | undefined;
9
+ export declare function normalizeToolCallId(id: string): string;
10
+ type ResponsesToolItemIdPrefix = "fc" | "ctc";
11
+ export declare function normalizeResponsesToolCallId(id: string, itemPrefix?: ResponsesToolItemIdPrefix): {
12
+ callId: string;
13
+ itemId: string;
14
+ };
15
+ /**
16
+ * Truncate an OpenAI Responses API item ID to 64 characters.
17
+ * IDs exceeding the limit are replaced with a hash-based ID using the given prefix.
18
+ */
19
+ export declare function truncateResponseItemId(id: string, prefix: string): string;
20
+ export declare function sanitizeOpenAIResponsesHistoryItemsForReplay(items: Array<Record<string, unknown>>): ResponseInput;
21
+ /**
22
+ * Neutralize leaked OpenAI Harmony / control tokens (`<|channel|>`, `<|message|>`,
23
+ * `<|call|>`, `<|constrain|>`, `<|recipient|>`, `<|content|>`, ...) in replayed
24
+ * history text. A subagent whose tool-call channel degenerates can dump raw
25
+ * control-token scaffolding into its reply text; once that poisoned text lands in
26
+ * history the Codex / Responses endpoint rejects every subsequent request with
27
+ * `Request blocked (code=invalid_prompt)`, permanently wedging the session because
28
+ * the offending item is re-sent on each turn. Insert a zero-width space after `<`
29
+ * so the delimiter can no longer be tokenized as a reserved control token while the
30
+ * text stays human-readable.
31
+ *
32
+ * The pattern matches the two control-token shapes only, so ordinary text and pipe
33
+ * syntax is left untouched:
34
+ * - simple form `<|ident|>` — a leading run of identifier chars then `|>`; and
35
+ * - header form `<|role to=recipient|>` — a known Harmony role
36
+ * (`system`/`developer`/`user`/`assistant`/`tool`) followed by a single
37
+ * recipient assignment `to=<recipient>` whose value is an unbounded run of
38
+ * non-delimiter, non-whitespace chars (so long MCP/custom tool recipients like
39
+ * `to=functions.<long.name>` are covered).
40
+ * The header branch is deliberately scoped to the known role + `to=` recipient
41
+ * grammar rather than an arbitrary `key=value`, so request-boundary sanitization
42
+ * never rewrites non-control delimiter text such as `<|foo bar=baz|>`. A single-line
43
+ * body (no `\n`) and the required leading identifier char also leave compact
44
+ * pipe/operator syntax alone — e.g. F# `value <| f |> g` (space after `<|`),
45
+ * `sum<|a+b|>c` (punctuation body), and `<|foo bar|>` (no assignment) never match.
46
+ * The simple branch is a strict superset of the original identifier-only pattern:
47
+ * every marker the old regex caught still matches.
48
+ */
49
+ export declare function neutralizeReservedControlTokens(text: string): string;
50
+ /**
51
+ * Shape-tolerant classifier for the poisoned-history rejection that wedges
52
+ * gpt-5.6 sessions: `Request blocked (code=invalid_prompt)`. Accepts a raw
53
+ * provider error, an assistant message, or any object carrying a
54
+ * `providerCode` / `transportFailure` / `errorMessage` field, and returns true
55
+ * when the failure is the deterministic `invalid_prompt` content fault rather
56
+ * than a transient upstream error. This is the single shared contract the
57
+ * provider transports and the session-level circuit breaker key on so the
58
+ * classification is explicit (not inferred from a catch-all bucket) and
59
+ * uniformly testable across transports.
60
+ */
61
+ export declare function isInvalidPromptError(input: unknown): boolean;
62
+ /**
63
+ * Shape-tolerant classifier for the DeepSeek-family reasoning-content replay
64
+ * rejection: "The `reasoning_content` in the thinking mode must be passed back
65
+ * to the API." DeepSeek V4 (and reasoning-capable siblings reached through any
66
+ * OpenAI-compatible proxy) 400 every follow-up turn once a prior assistant turn
67
+ * carried reasoning the proxy stripped to an empty `encrypted_content` /
68
+ * `reasoning_content`. Resending the identical history re-triggers it, so naive
69
+ * session auto-retry just burns the budget — it needs the same bounded
70
+ * repair-and-resend contract as the `invalid_prompt` poisoned-history breaker.
71
+ *
72
+ * Accepts a raw provider error, an assistant message, or any object carrying an
73
+ * `errorMessage` field (the agent-loop circuit breaker keys on this).
74
+ */
75
+ export declare function isReasoningContentReplayError(input: unknown): boolean;
76
+ /**
77
+ * Remove Responses-API `reasoning` items whose `encrypted_content` is missing or
78
+ * empty from an outgoing history payload. DeepSeek rejects replay of reasoning
79
+ * whose encrypted blob a proxy stripped to `""`; dropping those items lets the
80
+ * model re-reason on the next turn instead of re-triggering a deterministic 400.
81
+ * Non-reasoning items (text, function_call, function_call_output, ...) are kept
82
+ * verbatim so tool-use pairing and message order are preserved. Returns whether
83
+ * any item was actually removed — the circuit breaker uses this to decide
84
+ * between a single repaired resend (removed) and immediate fail-fast (unchanged).
85
+ */
86
+ export declare function stripUnusableReasoningItems(items: Array<Record<string, unknown>>): {
87
+ result: Array<Record<string, unknown>>;
88
+ removed: number;
89
+ };
90
+ /**
91
+ * Neutralize leaked reserved control tokens across every string in an outgoing
92
+ * Responses `input` array. This is the request-boundary complement to the
93
+ * replay-history sanitizer: leaked Harmony markers (`<|channel|>analysis`, ...)
94
+ * can enter the payload from assistant reasoning summaries, live-converted
95
+ * message/tool-output text, or user-authored content — not just replayed
96
+ * history — and every gpt-5.6 request that carries one is rejected with
97
+ * `Request blocked (code=invalid_prompt)`. Walking every string (rather than an
98
+ * item-type allowlist) guarantees no leak source is missed as item shapes
99
+ * evolve; the zero-width-space insertion is idempotent (`<\u200b|` no longer
100
+ * matches `<|`) and keeps the text human-readable.
101
+ */
102
+ export declare function neutralizeResponsesInputControlTokens<T>(items: readonly T[]): T[];
103
+ export declare function createOpenAIResponsesHistoryPayload(provider: string, items: Array<Record<string, unknown>>, incremental?: boolean): OpenAIResponsesHistoryPayload;
104
+ export declare function getOpenAIResponsesHistoryPayload(providerPayload: ProviderPayload | undefined, currentProvider: string, fallbackProvider?: string): OpenAIResponsesHistoryPayload | undefined;
105
+ export declare function getOpenAIResponsesHistoryItems(providerPayload: ProviderPayload | undefined, currentProvider: string, fallbackProvider?: string): Array<Record<string, unknown>> | undefined;
106
+ /**
107
+ * Resolve cache retention preference.
108
+ *
109
+ * Resolution order: explicit request value → `VIB_CACHE_RETENTION` →
110
+ * legacy `PI_CACHE_RETENTION` → `fallback`. Both env vars act as explicit
111
+ * opt-in (`"long"`) or opt-out (any other value) so a provider-specific
112
+ * `fallback` only applies when nothing else is configured. `fallback`
113
+ * defaults to `"short"` to preserve the historical behaviour for callers
114
+ * that don't pass one.
115
+ */
116
+ export declare function resolveCacheRetention(cacheRetention?: CacheRetention, fallback?: CacheRetention): CacheRetention;
117
+ export declare function isAnthropicOAuthToken(key: string): boolean;