@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,57 @@
1
+ /**
2
+ * DashScope Token Plan canonical request headers.
3
+ *
4
+ * Reproduces QwenLM/qwen-code's DashScopeOpenAICompatibleProvider.buildHeaders()
5
+ * defaultHeaders so the built-in `alibaba-token-plan` provider emits the same
6
+ * client identity / cache / auth-type fingerprint upstream sends. DashScope is
7
+ * compatibility-sensitive to this fingerprint; a non-identical set can cause
8
+ * request instability and affect first-event latency (vib-rato #3557).
9
+ *
10
+ * Upstream pin (reproduce EXACTLY here):
11
+ * Repository: QwenLM/qwen-code
12
+ * Commit: f4cd6e1d8bbb1c24e7e5d1a40187d8e28aa7c4fb
13
+ * Version: 0.21.1
14
+ * Source: packages/core/src/core/openaiContentGenerator/provider/dashscope.ts
15
+ * buildHeaders():
16
+ * const userAgent = `QwenCode/${version} (${process.platform}; ${process.arch})`;
17
+ * const defaultHeaders = {
18
+ * 'User-Agent': userAgent,
19
+ * 'X-DashScope-CacheControl': 'enable',
20
+ * 'X-DashScope-UserAgent': userAgent,
21
+ * 'X-DashScope-AuthType': authType,
22
+ * };
23
+ * return customHeaders ? { ...defaultHeaders, ...customHeaders } : defaultHeaders;
24
+ *
25
+ * The Token Plan preset authenticates with AuthType.USE_OPENAI ('openai'), so
26
+ * X-DashScope-AuthType is the constant 'openai'. Pin the version so an upstream
27
+ * bump is an explicit parity update rather than silent drift.
28
+ */
29
+ export declare const QWEN_CODE_UPSTREAM_REPO = "QwenLM/qwen-code";
30
+ export declare const QWEN_CODE_UPSTREAM_COMMIT = "f4cd6e1d8bbb1c24e7e5d1a40187d8e28aa7c4fb";
31
+ export declare const QWEN_CODE_UPSTREAM_VERSION = "0.21.1";
32
+ /**
33
+ * The Qwen Code CLI version string used in identity headers. Pinned to the
34
+ * upstream version at {@link QWEN_CODE_UPSTREAM_COMMIT}; change both together
35
+ * as an explicit parity update.
36
+ */
37
+ export declare function qwenCodeUserAgent(version?: string): string;
38
+ /**
39
+ * Canonical DashScope Token Plan headers (upstream defaultHeaders, no caller
40
+ * overrides applied). Exposed for tests/fixtures so the pinned wire set lives
41
+ * in exactly one place.
42
+ */
43
+ export declare function dashscopeTokenPlanDefaultHeaders(version?: string): Readonly<Record<string, string>>;
44
+ /**
45
+ * Merge canonical DashScope Token Plan identity headers onto a caller's header
46
+ * map, reproducing upstream buildHeaders() precedence EXACTLY:
47
+ * `{ ...defaultHeaders, ...customHeaders }` — caller wins per header.
48
+ *
49
+ * This mirrors Vibrato's existing kimi-code injection order
50
+ * (`headers = { ...getKimiCommonHeaders(), ...headers }`): canonical identity as
51
+ * the base, caller-supplied headers overriding individual keys. A caller that
52
+ * pins `User-Agent` takes that key; the other canonicals still apply.
53
+ *
54
+ * A null/undefined `callerHeaders` returns the canonical set alone (upstream
55
+ * `customHeaders ? {...} : defaultHeaders` shortcut).
56
+ */
57
+ export declare function mergeDashScopeTokenPlanHeaders(callerHeaders: Record<string, string> | undefined, version?: string): Record<string, string>;
@@ -0,0 +1,84 @@
1
+ /**
2
+ * DashScope Token Plan canonical request headers.
3
+ *
4
+ * Reproduces QwenLM/qwen-code's DashScopeOpenAICompatibleProvider.buildHeaders()
5
+ * defaultHeaders so the built-in `alibaba-token-plan` provider emits the same
6
+ * client identity / cache / auth-type fingerprint upstream sends. DashScope is
7
+ * compatibility-sensitive to this fingerprint; a non-identical set can cause
8
+ * request instability and affect first-event latency (vib-rato #3557).
9
+ *
10
+ * Upstream pin (reproduce EXACTLY here):
11
+ * Repository: QwenLM/qwen-code
12
+ * Commit: f4cd6e1d8bbb1c24e7e5d1a40187d8e28aa7c4fb
13
+ * Version: 0.21.1
14
+ * Source: packages/core/src/core/openaiContentGenerator/provider/dashscope.ts
15
+ * buildHeaders():
16
+ * const userAgent = `QwenCode/${version} (${process.platform}; ${process.arch})`;
17
+ * const defaultHeaders = {
18
+ * 'User-Agent': userAgent,
19
+ * 'X-DashScope-CacheControl': 'enable',
20
+ * 'X-DashScope-UserAgent': userAgent,
21
+ * 'X-DashScope-AuthType': authType,
22
+ * };
23
+ * return customHeaders ? { ...defaultHeaders, ...customHeaders } : defaultHeaders;
24
+ *
25
+ * The Token Plan preset authenticates with AuthType.USE_OPENAI ('openai'), so
26
+ * X-DashScope-AuthType is the constant 'openai'. Pin the version so an upstream
27
+ * bump is an explicit parity update rather than silent drift.
28
+ */
29
+ export const QWEN_CODE_UPSTREAM_REPO = "QwenLM/qwen-code";
30
+ export const QWEN_CODE_UPSTREAM_COMMIT = "f4cd6e1d8bbb1c24e7e5d1a40187d8e28aa7c4fb";
31
+ export const QWEN_CODE_UPSTREAM_VERSION = "0.21.1";
32
+
33
+ // Upstream Token Plan preset uses AuthType.USE_OPENAI = 'openai'.
34
+ const QWEN_CODE_TOKEN_PLAN_AUTH_TYPE = "openai";
35
+
36
+ /**
37
+ * The Qwen Code CLI version string used in identity headers. Pinned to the
38
+ * upstream version at {@link QWEN_CODE_UPSTREAM_COMMIT}; change both together
39
+ * as an explicit parity update.
40
+ */
41
+ export function qwenCodeUserAgent(version: string = QWEN_CODE_UPSTREAM_VERSION): string {
42
+ // process.platform / process.arch are read verbatim, matching upstream
43
+ // (e.g. "linux", "darwin", "win32"; "x64", "arm64"). No normalization.
44
+ return `QwenCode/${version} (${process.platform}; ${process.arch})`;
45
+ }
46
+
47
+ /**
48
+ * Canonical DashScope Token Plan headers (upstream defaultHeaders, no caller
49
+ * overrides applied). Exposed for tests/fixtures so the pinned wire set lives
50
+ * in exactly one place.
51
+ */
52
+ export function dashscopeTokenPlanDefaultHeaders(
53
+ version: string = QWEN_CODE_UPSTREAM_VERSION,
54
+ ): Readonly<Record<string, string>> {
55
+ const userAgent = qwenCodeUserAgent(version);
56
+ return Object.freeze({
57
+ "User-Agent": userAgent,
58
+ "X-DashScope-CacheControl": "enable",
59
+ "X-DashScope-UserAgent": userAgent,
60
+ "X-DashScope-AuthType": QWEN_CODE_TOKEN_PLAN_AUTH_TYPE,
61
+ });
62
+ }
63
+
64
+ /**
65
+ * Merge canonical DashScope Token Plan identity headers onto a caller's header
66
+ * map, reproducing upstream buildHeaders() precedence EXACTLY:
67
+ * `{ ...defaultHeaders, ...customHeaders }` — caller wins per header.
68
+ *
69
+ * This mirrors Vibrato's existing kimi-code injection order
70
+ * (`headers = { ...getKimiCommonHeaders(), ...headers }`): canonical identity as
71
+ * the base, caller-supplied headers overriding individual keys. A caller that
72
+ * pins `User-Agent` takes that key; the other canonicals still apply.
73
+ *
74
+ * A null/undefined `callerHeaders` returns the canonical set alone (upstream
75
+ * `customHeaders ? {...} : defaultHeaders` shortcut).
76
+ */
77
+ export function mergeDashScopeTokenPlanHeaders(
78
+ callerHeaders: Record<string, string> | undefined,
79
+ version: string = QWEN_CODE_UPSTREAM_VERSION,
80
+ ): Record<string, string> {
81
+ const defaults = dashscopeTokenPlanDefaultHeaders(version);
82
+ if (!callerHeaders) return { ...defaults };
83
+ return { ...defaults, ...callerHeaders };
84
+ }
@@ -0,0 +1,27 @@
1
+ import type { Api, Model } from "../types";
2
+ export declare function createProviderErrorMessage(model: Model<Api>, err: unknown): {
3
+ role: "assistant";
4
+ content: {
5
+ type: "text";
6
+ text: string;
7
+ }[];
8
+ api: Api;
9
+ provider: string;
10
+ model: string;
11
+ usage: {
12
+ input: number;
13
+ output: number;
14
+ cacheRead: number;
15
+ cacheWrite: number;
16
+ totalTokens: number;
17
+ cost: {
18
+ input: number;
19
+ output: number;
20
+ cacheRead: number;
21
+ cacheWrite: number;
22
+ total: number;
23
+ };
24
+ };
25
+ stopReason: "error";
26
+ timestamp: number;
27
+ };
@@ -0,0 +1,21 @@
1
+ import type { Api, Model } from "../types";
2
+
3
+ export function createProviderErrorMessage(model: Model<Api>, err: unknown) {
4
+ return {
5
+ role: "assistant" as const,
6
+ content: [{ type: "text" as const, text: err instanceof Error ? err.message : String(err) }],
7
+ api: model.api,
8
+ provider: model.provider,
9
+ model: model.id,
10
+ usage: {
11
+ input: 0,
12
+ output: 0,
13
+ cacheRead: 0,
14
+ cacheWrite: 0,
15
+ totalTokens: 0,
16
+ cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },
17
+ },
18
+ stopReason: "error" as const,
19
+ timestamp: Date.now(),
20
+ };
21
+ }
@@ -0,0 +1,40 @@
1
+ import type { Message } from "../types";
2
+ /**
3
+ * Infer whether the current request to Copilot is user-initiated or agent-initiated.
4
+ * Accepts `unknown[]` because providers may pass pre-converted message shapes.
5
+ */
6
+ export type CopilotInitiator = "user" | "agent";
7
+ export type CopilotPremiumRequests = number;
8
+ export type CopilotDynamicHeaders = {
9
+ headers: Record<string, string>;
10
+ initiator: CopilotInitiator;
11
+ premiumRequests: CopilotPremiumRequests;
12
+ };
13
+ export declare function resolveGitHubCopilotBaseUrl(baseUrl: string | undefined, apiKey: string | undefined): string | undefined;
14
+ export declare function inferCopilotInitiator(messages: unknown[]): CopilotInitiator;
15
+ /** Check whether any message in the conversation contains image content. */
16
+ export declare function hasCopilotVisionInput(messages: Message[]): boolean;
17
+ /**
18
+ * Resolve an explicitly configured Copilot initiator header, if present.
19
+ * Handles case-insensitive X-Initiator keys and returns the last valid value.
20
+ */
21
+ export declare function getCopilotInitiatorOverride(headers: Record<string, string> | undefined): CopilotInitiator | undefined;
22
+ export type CopilotPlanTier = "free" | "paid";
23
+ export declare function getCopilotPremiumMultiplier(premiumMultiplier: number | undefined, planTier?: string): number;
24
+ export declare function getCopilotPremiumRequests(params: {
25
+ initiator: CopilotInitiator;
26
+ premiumMultiplier?: number;
27
+ planTier?: string;
28
+ }): CopilotPremiumRequests;
29
+ /**
30
+ * Build dynamic Copilot headers that vary per-request.
31
+ * Static headers (User-Agent, Editor-Version, etc.) come from model.headers.
32
+ */
33
+ export declare function buildCopilotDynamicHeaders(params: {
34
+ messages: unknown[];
35
+ hasImages: boolean;
36
+ premiumMultiplier?: number;
37
+ headers?: Record<string, string>;
38
+ initiatorOverride?: CopilotInitiator;
39
+ planTier?: string;
40
+ }): CopilotDynamicHeaders;
@@ -0,0 +1,140 @@
1
+ import type { Message } from "../types";
2
+ import { getGitHubCopilotBaseUrl, parseGitHubCopilotApiKey } from "../utils/oauth/github-copilot";
3
+ /**
4
+ * Infer whether the current request to Copilot is user-initiated or agent-initiated.
5
+ * Accepts `unknown[]` because providers may pass pre-converted message shapes.
6
+ */
7
+ export type CopilotInitiator = "user" | "agent";
8
+ export type CopilotPremiumRequests = number;
9
+ export type CopilotDynamicHeaders = {
10
+ headers: Record<string, string>;
11
+ initiator: CopilotInitiator;
12
+ premiumRequests: CopilotPremiumRequests;
13
+ };
14
+ export function resolveGitHubCopilotBaseUrl(
15
+ baseUrl: string | undefined,
16
+ apiKey: string | undefined,
17
+ ): string | undefined {
18
+ if (!apiKey) return baseUrl;
19
+ const { enterpriseUrl } = parseGitHubCopilotApiKey(apiKey);
20
+ if (!enterpriseUrl) return baseUrl;
21
+ if (baseUrl && !baseUrl.includes("githubcopilot.com")) return baseUrl;
22
+ return getGitHubCopilotBaseUrl(enterpriseUrl);
23
+ }
24
+ export function inferCopilotInitiator(messages: unknown[]): CopilotInitiator {
25
+ if (messages.length === 0) return "user";
26
+
27
+ const last = messages[messages.length - 1] as Record<string, unknown>;
28
+ const attribution = last.attribution;
29
+ if (typeof attribution === "string") {
30
+ const normalizedAttribution = attribution.trim().toLowerCase();
31
+ if (normalizedAttribution === "user" || normalizedAttribution === "agent") {
32
+ return normalizedAttribution;
33
+ }
34
+ }
35
+
36
+ const role = last.role as string | undefined;
37
+ if (!role) return "user";
38
+
39
+ if (role !== "user") return "agent";
40
+
41
+ // Check if last content block is a tool_result (Anthropic-converted shape)
42
+ const content = last.content;
43
+ if (Array.isArray(content) && content.length > 0) {
44
+ const lastBlock = content[content.length - 1] as Record<string, unknown>;
45
+ if (lastBlock.type === "tool_result") {
46
+ return "agent";
47
+ }
48
+ }
49
+
50
+ return "user";
51
+ }
52
+
53
+ /** Check whether any message in the conversation contains image content. */
54
+ export function hasCopilotVisionInput(messages: Message[]): boolean {
55
+ return messages.some(msg => {
56
+ if (msg.role === "user" && Array.isArray(msg.content)) {
57
+ return msg.content.some(c => c.type === "image");
58
+ }
59
+ if (msg.role === "toolResult" && Array.isArray(msg.content)) {
60
+ return msg.content.some(c => c.type === "image");
61
+ }
62
+ return false;
63
+ });
64
+ }
65
+
66
+ /**
67
+ * Resolve an explicitly configured Copilot initiator header, if present.
68
+ * Handles case-insensitive X-Initiator keys and returns the last valid value.
69
+ */
70
+ export function getCopilotInitiatorOverride(headers: Record<string, string> | undefined): CopilotInitiator | undefined {
71
+ if (!headers) return undefined;
72
+
73
+ let override: CopilotInitiator | undefined;
74
+ for (const [key, value] of Object.entries(headers)) {
75
+ if (key.toLowerCase() !== "x-initiator") continue;
76
+ const normalized = value.trim().toLowerCase();
77
+ if (normalized === "user" || normalized === "agent") {
78
+ override = normalized;
79
+ }
80
+ }
81
+
82
+ return override;
83
+ }
84
+
85
+ export type CopilotPlanTier = "free" | "paid";
86
+
87
+ function normalizeCopilotPlanTier(planTier: string | undefined): CopilotPlanTier {
88
+ if (planTier === "paid") return "paid";
89
+ return "free";
90
+ }
91
+ export function getCopilotPremiumMultiplier(premiumMultiplier: number | undefined, planTier?: string): number {
92
+ const normalizedMultiplier = premiumMultiplier ?? 1;
93
+ if (normalizeCopilotPlanTier(planTier) === "free" && normalizedMultiplier === 0) {
94
+ return 1;
95
+ }
96
+ return normalizedMultiplier;
97
+ }
98
+
99
+ export function getCopilotPremiumRequests(params: {
100
+ initiator: CopilotInitiator;
101
+ premiumMultiplier?: number;
102
+ planTier?: string;
103
+ }): CopilotPremiumRequests {
104
+ if (params.initiator === "agent") return 0;
105
+ return getCopilotPremiumMultiplier(params.premiumMultiplier, params.planTier);
106
+ }
107
+
108
+ /**
109
+ * Build dynamic Copilot headers that vary per-request.
110
+ * Static headers (User-Agent, Editor-Version, etc.) come from model.headers.
111
+ */
112
+ export function buildCopilotDynamicHeaders(params: {
113
+ messages: unknown[];
114
+ hasImages: boolean;
115
+ premiumMultiplier?: number;
116
+ headers?: Record<string, string>;
117
+ initiatorOverride?: CopilotInitiator;
118
+ planTier?: string;
119
+ }): CopilotDynamicHeaders {
120
+ const initiator =
121
+ params.initiatorOverride ?? getCopilotInitiatorOverride(params.headers) ?? inferCopilotInitiator(params.messages);
122
+ const headers: Record<string, string> = {
123
+ "X-Initiator": initiator,
124
+ "Openai-Intent": "conversation-edits",
125
+ };
126
+
127
+ if (params.hasImages) {
128
+ headers["Copilot-Vision-Request"] = "true";
129
+ }
130
+
131
+ return {
132
+ headers,
133
+ initiator,
134
+ premiumRequests: getCopilotPremiumRequests({
135
+ initiator,
136
+ premiumMultiplier: params.premiumMultiplier,
137
+ planTier: params.planTier,
138
+ }),
139
+ };
140
+ }
@@ -0,0 +1,27 @@
1
+ import type { Api, Context, Model, SimpleStreamOptions } from "../types";
2
+ import { AssistantMessageEventStream } from "../utils/event-stream";
3
+ type GitLabProvider = "anthropic" | "openai";
4
+ type GitLabOpenAIApiType = "chat" | "responses";
5
+ export type GitLabModelMapping = {
6
+ provider: GitLabProvider;
7
+ model: string;
8
+ openaiApiType?: GitLabOpenAIApiType;
9
+ name: string;
10
+ reasoning: boolean;
11
+ input: ("text" | "image")[];
12
+ cost: {
13
+ input: number;
14
+ output: number;
15
+ cacheRead: number;
16
+ cacheWrite: number;
17
+ };
18
+ contextWindow: number;
19
+ maxTokens: number;
20
+ };
21
+ export declare const MODEL_MAPPINGS: Record<string, GitLabModelMapping>;
22
+ export declare function getModelMapping(modelId: string): GitLabModelMapping | undefined;
23
+ export declare function getGitLabDuoModels(): Model<Api>[];
24
+ export declare function clearGitLabDuoDirectAccessCache(): void;
25
+ export declare function isGitLabDuoModel(model: Model<Api>): boolean;
26
+ export declare function streamGitLabDuo(model: Model<Api>, context: Context, options?: SimpleStreamOptions): AssistantMessageEventStream;
27
+ export {};