@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,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,298 @@
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
+
20
+ import {
21
+ attachUnicodeEscapeEvidence,
22
+ collectUnsafeUnicodeEscapeEvidence,
23
+ parseJsonWithRepair,
24
+ type UnicodeEscapeEvidence,
25
+ } from "./json-parse";
26
+
27
+ const TOK_SECTION_BEGIN = "<|tool_calls_section_begin|>";
28
+ const TOK_SECTION_END = "<|tool_calls_section_end|>";
29
+ const TOK_CALL_BEGIN = "<|tool_call_begin|>";
30
+ const TOK_CALL_END = "<|tool_call_end|>";
31
+ const TOK_ARG_BEGIN = "<|tool_call_argument_begin|>";
32
+
33
+ const TOKENS = [TOK_SECTION_BEGIN, TOK_SECTION_END, TOK_CALL_BEGIN, TOK_CALL_END, TOK_ARG_BEGIN] as const;
34
+
35
+ /** Maximum buffered partial-token length before we give up holding back. */
36
+ const MAX_PARTIAL_HOLD = 64;
37
+
38
+ export interface HealedToolCall {
39
+ readonly id: string;
40
+ readonly name: string;
41
+ readonly arguments: string;
42
+ /**
43
+ * Whether the raw leaked payload carried unsafe Unicode argument data.
44
+ * Captured before the normalizing round-trip below, which would otherwise
45
+ * erase malformed escape evidence. Valid `\uXXXX` spellings decode
46
+ * canonically and leave this false.
47
+ */
48
+ readonly escapedNonAsciiArguments: boolean;
49
+ readonly escapedUnicodeArgumentEvidence?: UnicodeEscapeEvidence;
50
+ }
51
+
52
+ /**
53
+ * State machine that consumes streamed text, emits visible text with all
54
+ * Kimi tool-call markers stripped, and accumulates the embedded tool calls
55
+ * for the caller to drain after each `feed()`.
56
+ *
57
+ * One instance per stream. Feed only the channel that may carry leaked
58
+ * markers (typically `delta.content`); mixing reasoning + content into the
59
+ * same accumulator corrupts the holdback buffer if both channels race in
60
+ * the same chunk.
61
+ */
62
+ export class ToolCallHealer {
63
+ #buffer = "";
64
+ #offset = 0;
65
+ #inSection = false;
66
+ #inCall = false;
67
+ #inArgs = false;
68
+ #pendingId = "";
69
+ #pendingArgs = "";
70
+ #sectionTerminated = false;
71
+ readonly #completed: HealedToolCall[] = [];
72
+
73
+ /**
74
+ * Feed a chunk of streamed text. Returns the portion safe to emit
75
+ * downstream (with all tokens stripped). Any partial token suffix is
76
+ * held back until the next chunk arrives or {@link flushPending} is
77
+ * called.
78
+ */
79
+ feed(text: string): string {
80
+ if (text.length === 0) return "";
81
+ this.#compact();
82
+ this.#buffer += text;
83
+ return this.#consume();
84
+ }
85
+
86
+ /**
87
+ * Like {@link feed}, but discards any tool calls that the chunk completes.
88
+ * Used when the upstream provider also emits structured `delta.tool_calls`
89
+ * for the same chunk: the healer still strips leaked marker text from the
90
+ * visible output, but the structured payload remains the single source of
91
+ * truth for the call list.
92
+ */
93
+ consumeWithoutCalls(text: string): string {
94
+ const clean = this.feed(text);
95
+ if (this.#completed.length > 0) this.#completed.length = 0;
96
+ return clean;
97
+ }
98
+
99
+ /**
100
+ * Drain accumulated tool calls. The internal list is cleared so a
101
+ * subsequent section in the same stream (rare) yields fresh calls.
102
+ */
103
+ drainCompleted(): HealedToolCall[] {
104
+ if (this.#completed.length === 0) return [];
105
+ return this.#completed.splice(0, this.#completed.length);
106
+ }
107
+
108
+ /**
109
+ * Flush any held-back fragment when the stream ends. If we were mid-call
110
+ * the partial is dropped (emitting raw token bytes would surface markers
111
+ * to the user); otherwise the fragment is returned verbatim so a literal
112
+ * `<|` in prose is not silently lost.
113
+ */
114
+ flushPending(): string {
115
+ const tail = this.#remaining();
116
+ this.#buffer = "";
117
+ this.#offset = 0;
118
+ if (this.#inCall || this.#inSection) return "";
119
+ return tail;
120
+ }
121
+
122
+ /** True once any tool-call section in this stream has fully closed. */
123
+ get sectionClosed(): boolean {
124
+ return this.#sectionTerminated;
125
+ }
126
+
127
+ #remaining(): string {
128
+ return this.#offset === 0 ? this.#buffer : this.#buffer.slice(this.#offset);
129
+ }
130
+
131
+ #compact(): void {
132
+ if (this.#offset === 0) return;
133
+ this.#buffer = this.#buffer.slice(this.#offset);
134
+ this.#offset = 0;
135
+ }
136
+
137
+ #consume(): string {
138
+ let clean = "";
139
+
140
+ while (this.#offset < this.#buffer.length) {
141
+ if (this.#startsWithPartialToken()) break;
142
+
143
+ if (this.#matches(TOK_SECTION_BEGIN)) {
144
+ this.#inSection = true;
145
+ this.#offset += TOK_SECTION_BEGIN.length;
146
+ continue;
147
+ }
148
+ if (this.#matches(TOK_SECTION_END)) {
149
+ this.#inSection = false;
150
+ this.#sectionTerminated = true;
151
+ this.#offset += TOK_SECTION_END.length;
152
+ continue;
153
+ }
154
+ if (this.#matches(TOK_CALL_BEGIN)) {
155
+ if (!this.#inSection) {
156
+ // Literal mention outside a section — pass through as text so
157
+ // docs/examples explaining tool tokens are not silently eaten.
158
+ clean += TOK_CALL_BEGIN;
159
+ this.#offset += TOK_CALL_BEGIN.length;
160
+ continue;
161
+ }
162
+ this.#inCall = true;
163
+ this.#inArgs = false;
164
+ this.#pendingId = "";
165
+ this.#pendingArgs = "";
166
+ this.#offset += TOK_CALL_BEGIN.length;
167
+ continue;
168
+ }
169
+ if (this.#matches(TOK_ARG_BEGIN)) {
170
+ if (!this.#inSection) {
171
+ clean += TOK_ARG_BEGIN;
172
+ this.#offset += TOK_ARG_BEGIN.length;
173
+ continue;
174
+ }
175
+ this.#inArgs = true;
176
+ this.#offset += TOK_ARG_BEGIN.length;
177
+ continue;
178
+ }
179
+ if (this.#matches(TOK_CALL_END)) {
180
+ if (!this.#inSection || !this.#inCall) {
181
+ // Token appeared outside an active call (e.g. an assistant
182
+ // turn explaining the Kimi format). Emit it verbatim instead
183
+ // of synthesizing a bogus empty tool call.
184
+ clean += TOK_CALL_END;
185
+ this.#offset += TOK_CALL_END.length;
186
+ continue;
187
+ }
188
+ this.#finalizeCall();
189
+ this.#offset += TOK_CALL_END.length;
190
+ continue;
191
+ }
192
+
193
+ const ch = this.#buffer[this.#offset]!;
194
+ this.#offset += 1;
195
+
196
+ if (this.#inCall) {
197
+ if (this.#inArgs) {
198
+ this.#pendingArgs += ch;
199
+ } else {
200
+ this.#pendingId += ch;
201
+ }
202
+ continue;
203
+ }
204
+
205
+ // Inside the section but outside an individual call: swallow
206
+ // inter-call whitespace/newlines. Outside the section: pass through.
207
+ if (!this.#inSection) clean += ch;
208
+ }
209
+
210
+ return clean;
211
+ }
212
+
213
+ #matches(token: string): boolean {
214
+ return this.#buffer.startsWith(token, this.#offset);
215
+ }
216
+
217
+ /**
218
+ * True if the remaining buffer is a strict prefix of any known token —
219
+ * we need more bytes before deciding whether it's a token or prose.
220
+ * Capped so a stray `<|` in normal text can't grow the holdback
221
+ * unboundedly.
222
+ */
223
+ #startsWithPartialToken(): boolean {
224
+ const remainingLength = this.#buffer.length - this.#offset;
225
+ if (remainingLength === 0 || remainingLength > MAX_PARTIAL_HOLD) return false;
226
+ for (const token of TOKENS) {
227
+ if (token.length <= remainingLength) continue;
228
+ if (this.#bufferIsPrefixOf(token, remainingLength)) return true;
229
+ }
230
+ return false;
231
+ }
232
+
233
+ #bufferIsPrefixOf(token: string, remainingLength: number): boolean {
234
+ for (let i = 0; i < remainingLength; i++) {
235
+ if (this.#buffer[this.#offset + i] !== token[i]) return false;
236
+ }
237
+ return true;
238
+ }
239
+
240
+ #finalizeCall(): void {
241
+ const rawId = this.#pendingId.trim();
242
+ const rawArgs = this.#pendingArgs.trim();
243
+ const name = normalizeFunctionName(rawId);
244
+ const id = generateHealedToolCallId();
245
+
246
+ // Sample unsafe raw payloads first: the round-trip below decodes `\uXXXX`
247
+ // into literal characters, so malformed escape data must be retained before
248
+ // normalization. Valid escapes need no evidence because their decoded value
249
+ // is canonical.
250
+ const escapedUnicodeArgumentEvidence = collectUnsafeUnicodeEscapeEvidence(rawArgs);
251
+ const escapedNonAsciiArguments = escapedUnicodeArgumentEvidence !== undefined;
252
+
253
+ let argsJson = rawArgs;
254
+ if (rawArgs.length > 0) {
255
+ try {
256
+ // Round-trip to normalize whitespace and repair near-valid JSON.
257
+ argsJson = JSON.stringify(parseJsonWithRepair<unknown>(rawArgs));
258
+ } catch {
259
+ // Leave raw; downstream parseStreamingJson absorbs the failure.
260
+ }
261
+ } else {
262
+ argsJson = "{}";
263
+ }
264
+
265
+ const completed: HealedToolCall = {
266
+ id,
267
+ name,
268
+ arguments: argsJson,
269
+ escapedNonAsciiArguments,
270
+ };
271
+ if (escapedUnicodeArgumentEvidence) attachUnicodeEscapeEvidence(completed, escapedUnicodeArgumentEvidence);
272
+ this.#completed.push(completed);
273
+ this.#inCall = false;
274
+ this.#inArgs = false;
275
+ this.#pendingId = "";
276
+ this.#pendingArgs = "";
277
+ }
278
+ }
279
+
280
+ /**
281
+ * Cheap test for whether a given model is known to leak Kimi-K2 chat-template
282
+ * tool-call tokens into visible text. Used to gate the per-stream healer so
283
+ * non-Kimi providers do not pay for the scan.
284
+ */
285
+ export function modelMayLeakKimiToolCalls(provider: string, modelId: string): boolean {
286
+ if (provider === "kimi-code" || provider === "moonshot") return true;
287
+ return /kimi[-/_.]?k2/i.test(modelId);
288
+ }
289
+
290
+ function normalizeFunctionName(rawId: string): string {
291
+ const stripped = rawId.startsWith("functions.") ? rawId.slice("functions.".length) : rawId;
292
+ const colon = stripped.indexOf(":");
293
+ return colon >= 0 ? stripped.slice(0, colon) : stripped;
294
+ }
295
+
296
+ function generateHealedToolCallId(): string {
297
+ return `call_${crypto.randomUUID().replace(/-/g, "").slice(0, 24)}`;
298
+ }
@@ -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
+ }