jeopi-ai 16.2.13

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 (598) hide show
  1. package/CHANGELOG.md +4347 -0
  2. package/README.md +1193 -0
  3. package/dist/types/api-registry.d.ts +30 -0
  4. package/dist/types/auth-broker/client.d.ts +73 -0
  5. package/dist/types/auth-broker/discover.d.ts +35 -0
  6. package/dist/types/auth-broker/index.d.ts +7 -0
  7. package/dist/types/auth-broker/refresher.d.ts +25 -0
  8. package/dist/types/auth-broker/remote-store.d.ts +102 -0
  9. package/dist/types/auth-broker/server.d.ts +43 -0
  10. package/dist/types/auth-broker/snapshot-cache.d.ts +17 -0
  11. package/dist/types/auth-broker/types.d.ts +107 -0
  12. package/dist/types/auth-broker/wire-schemas.d.ts +411 -0
  13. package/dist/types/auth-gateway/http.d.ts +39 -0
  14. package/dist/types/auth-gateway/index.d.ts +3 -0
  15. package/dist/types/auth-gateway/server.d.ts +36 -0
  16. package/dist/types/auth-gateway/types.d.ts +123 -0
  17. package/dist/types/auth-retry.d.ts +124 -0
  18. package/dist/types/auth-storage.d.ts +1026 -0
  19. package/dist/types/dialect/anthropic.d.ts +15 -0
  20. package/dist/types/dialect/catalog.d.ts +3 -0
  21. package/dist/types/dialect/coercion.d.ts +23 -0
  22. package/dist/types/dialect/deepseek.d.ts +14 -0
  23. package/dist/types/dialect/demotion.d.ts +23 -0
  24. package/dist/types/dialect/examples.d.ts +2 -0
  25. package/dist/types/dialect/factory.d.ts +3 -0
  26. package/dist/types/dialect/fenced-thinking.d.ts +53 -0
  27. package/dist/types/dialect/gemini.d.ts +17 -0
  28. package/dist/types/dialect/gemma.d.ts +15 -0
  29. package/dist/types/dialect/glm.d.ts +9 -0
  30. package/dist/types/dialect/harmony.d.ts +8 -0
  31. package/dist/types/dialect/hermes.d.ts +9 -0
  32. package/dist/types/dialect/history.d.ts +3 -0
  33. package/dist/types/dialect/index.d.ts +11 -0
  34. package/dist/types/dialect/inventory.d.ts +12 -0
  35. package/dist/types/dialect/kimi.d.ts +14 -0
  36. package/dist/types/dialect/minimax.d.ts +3 -0
  37. package/dist/types/dialect/owned-stream.d.ts +4 -0
  38. package/dist/types/dialect/qwen3.d.ts +9 -0
  39. package/dist/types/dialect/rendering.d.ts +45 -0
  40. package/dist/types/dialect/thinking.d.ts +6 -0
  41. package/dist/types/dialect/types.d.ts +69 -0
  42. package/dist/types/dialect/xml.d.ts +9 -0
  43. package/dist/types/error/abort.d.ts +14 -0
  44. package/dist/types/error/auth-classify.d.ts +16 -0
  45. package/dist/types/error/auth.d.ts +27 -0
  46. package/dist/types/error/aws.d.ts +23 -0
  47. package/dist/types/error/classes.d.ts +102 -0
  48. package/dist/types/error/finalize.d.ts +39 -0
  49. package/dist/types/error/flags.d.ts +79 -0
  50. package/dist/types/error/format.d.ts +20 -0
  51. package/dist/types/error/gateway.d.ts +20 -0
  52. package/dist/types/error/index.d.ts +13 -0
  53. package/dist/types/error/oauth.d.ts +43 -0
  54. package/dist/types/error/provider.d.ts +42 -0
  55. package/dist/types/error/rate-limit.d.ts +59 -0
  56. package/dist/types/error/retryable.d.ts +27 -0
  57. package/dist/types/error/validation.d.ts +32 -0
  58. package/dist/types/index.d.ts +49 -0
  59. package/dist/types/provider-details.d.ts +24 -0
  60. package/dist/types/providers/__tests__/google-auth.test.d.ts +1 -0
  61. package/dist/types/providers/__tests__/kimi-code-thinking.test.d.ts +1 -0
  62. package/dist/types/providers/__tests__/openai-codex-error.test.d.ts +1 -0
  63. package/dist/types/providers/amazon-bedrock.d.ts +39 -0
  64. package/dist/types/providers/anthropic-client.d.ts +94 -0
  65. package/dist/types/providers/anthropic-messages-server-schema.d.ts +497 -0
  66. package/dist/types/providers/anthropic-messages-server.d.ts +17 -0
  67. package/dist/types/providers/anthropic-wire.d.ts +318 -0
  68. package/dist/types/providers/anthropic.d.ts +248 -0
  69. package/dist/types/providers/aws-credentials.d.ts +53 -0
  70. package/dist/types/providers/aws-eventstream.d.ts +39 -0
  71. package/dist/types/providers/aws-sigv4.d.ts +55 -0
  72. package/dist/types/providers/azure-openai-responses.d.ts +16 -0
  73. package/dist/types/providers/cursor.d.ts +91 -0
  74. package/dist/types/providers/devin.d.ts +12 -0
  75. package/dist/types/providers/error-message.d.ts +27 -0
  76. package/dist/types/providers/github-copilot-headers.d.ts +40 -0
  77. package/dist/types/providers/gitlab-duo-workflow.d.ts +254 -0
  78. package/dist/types/providers/gitlab-duo.d.ts +27 -0
  79. package/dist/types/providers/google-auth.d.ts +32 -0
  80. package/dist/types/providers/google-gemini-cli.d.ts +118 -0
  81. package/dist/types/providers/google-interactions.d.ts +65 -0
  82. package/dist/types/providers/google-shared.d.ts +203 -0
  83. package/dist/types/providers/google-types.d.ts +155 -0
  84. package/dist/types/providers/google-vertex.d.ts +7 -0
  85. package/dist/types/providers/google.d.ts +4 -0
  86. package/dist/types/providers/grammar.d.ts +1 -0
  87. package/dist/types/providers/kimi.d.ts +27 -0
  88. package/dist/types/providers/mock.d.ts +178 -0
  89. package/dist/types/providers/ollama.d.ts +7 -0
  90. package/dist/types/providers/openai-anthropic-shim.d.ts +31 -0
  91. package/dist/types/providers/openai-chat-server-schema.d.ts +695 -0
  92. package/dist/types/providers/openai-chat-server.d.ts +16 -0
  93. package/dist/types/providers/openai-chat-wire.d.ts +644 -0
  94. package/dist/types/providers/openai-codex/request-transformer.d.ts +54 -0
  95. package/dist/types/providers/openai-codex/response-handler.d.ts +26 -0
  96. package/dist/types/providers/openai-codex-responses.d.ts +108 -0
  97. package/dist/types/providers/openai-completions.d.ts +45 -0
  98. package/dist/types/providers/openai-reasoning-fallback.d.ts +25 -0
  99. package/dist/types/providers/openai-responses-server-schema.d.ts +349 -0
  100. package/dist/types/providers/openai-responses-server.d.ts +17 -0
  101. package/dist/types/providers/openai-responses-wire.d.ts +6065 -0
  102. package/dist/types/providers/openai-responses.d.ts +126 -0
  103. package/dist/types/providers/openai-shared.d.ts +506 -0
  104. package/dist/types/providers/pi-native-client.d.ts +13 -0
  105. package/dist/types/providers/pi-native-server.d.ts +69 -0
  106. package/dist/types/providers/register-builtins.d.ts +32 -0
  107. package/dist/types/providers/synthetic.d.ts +26 -0
  108. package/dist/types/providers/transform-messages.d.ts +11 -0
  109. package/dist/types/providers/vision-guard.d.ts +20 -0
  110. package/dist/types/registry/aimlapi.d.ts +4 -0
  111. package/dist/types/registry/alibaba-coding-plan.d.ts +8 -0
  112. package/dist/types/registry/amazon-bedrock.d.ts +5 -0
  113. package/dist/types/registry/anthropic.d.ts +10 -0
  114. package/dist/types/registry/api-key-login.d.ts +42 -0
  115. package/dist/types/registry/api-key-validation.d.ts +43 -0
  116. package/dist/types/registry/azure.d.ts +4 -0
  117. package/dist/types/registry/cerebras.d.ts +7 -0
  118. package/dist/types/registry/cloudflare-ai-gateway.d.ts +13 -0
  119. package/dist/types/registry/coreweave.d.ts +7 -0
  120. package/dist/types/registry/cursor.d.ts +7 -0
  121. package/dist/types/registry/deepseek.d.ts +8 -0
  122. package/dist/types/registry/derived.d.ts +5 -0
  123. package/dist/types/registry/devin.d.ts +8 -0
  124. package/dist/types/registry/firepass.d.ts +16 -0
  125. package/dist/types/registry/fireworks.d.ts +7 -0
  126. package/dist/types/registry/github-copilot.d.ts +7 -0
  127. package/dist/types/registry/gitlab-duo-workflow.d.ts +10 -0
  128. package/dist/types/registry/gitlab-duo.d.ts +9 -0
  129. package/dist/types/registry/google-antigravity.d.ts +9 -0
  130. package/dist/types/registry/google-gemini-cli.d.ts +9 -0
  131. package/dist/types/registry/google-vertex.d.ts +5 -0
  132. package/dist/types/registry/google.d.ts +4 -0
  133. package/dist/types/registry/groq.d.ts +4 -0
  134. package/dist/types/registry/huggingface.d.ts +7 -0
  135. package/dist/types/registry/index.d.ts +4 -0
  136. package/dist/types/registry/kagi.d.ts +14 -0
  137. package/dist/types/registry/kilo.d.ts +7 -0
  138. package/dist/types/registry/kimi-code.d.ts +7 -0
  139. package/dist/types/registry/litellm.d.ts +13 -0
  140. package/dist/types/registry/llama-cpp.d.ts +8 -0
  141. package/dist/types/registry/lm-studio.d.ts +8 -0
  142. package/dist/types/registry/minimax-code-cn.d.ts +6 -0
  143. package/dist/types/registry/minimax-code.d.ts +6 -0
  144. package/dist/types/registry/minimax.d.ts +4 -0
  145. package/dist/types/registry/mistral.d.ts +4 -0
  146. package/dist/types/registry/moonshot.d.ts +7 -0
  147. package/dist/types/registry/nanogpt.d.ts +7 -0
  148. package/dist/types/registry/nvidia.d.ts +7 -0
  149. package/dist/types/registry/oauth/__tests__/xai-oauth.test.d.ts +1 -0
  150. package/dist/types/registry/oauth/anthropic.d.ts +23 -0
  151. package/dist/types/registry/oauth/callback-server.d.ts +72 -0
  152. package/dist/types/registry/oauth/cursor.d.ts +15 -0
  153. package/dist/types/registry/oauth/devin.d.ts +5 -0
  154. package/dist/types/registry/oauth/github-copilot.d.ts +30 -0
  155. package/dist/types/registry/oauth/gitlab-duo-workflow.d.ts +6 -0
  156. package/dist/types/registry/oauth/gitlab-duo.d.ts +3 -0
  157. package/dist/types/registry/oauth/google-antigravity.d.ts +11 -0
  158. package/dist/types/registry/oauth/google-gemini-cli.d.ts +10 -0
  159. package/dist/types/registry/oauth/google-oauth-shared.d.ts +22 -0
  160. package/dist/types/registry/oauth/index.d.ts +64 -0
  161. package/dist/types/registry/oauth/kimi.d.ts +21 -0
  162. package/dist/types/registry/oauth/minimax-code.d.ts +27 -0
  163. package/dist/types/registry/oauth/openai-codex.d.ts +33 -0
  164. package/dist/types/registry/oauth/opencode.d.ts +18 -0
  165. package/dist/types/registry/oauth/perplexity.d.ts +9 -0
  166. package/dist/types/registry/oauth/pkce.d.ts +8 -0
  167. package/dist/types/registry/oauth/types.d.ts +56 -0
  168. package/dist/types/registry/oauth/wafer.d.ts +1 -0
  169. package/dist/types/registry/oauth/xai-oauth.d.ts +52 -0
  170. package/dist/types/registry/oauth/xiaomi.d.ts +25 -0
  171. package/dist/types/registry/ollama-cloud.d.ts +7 -0
  172. package/dist/types/registry/ollama.d.ts +12 -0
  173. package/dist/types/registry/openai-codex-device.d.ts +8 -0
  174. package/dist/types/registry/openai-codex.d.ts +9 -0
  175. package/dist/types/registry/openai.d.ts +4 -0
  176. package/dist/types/registry/opencode-go.d.ts +6 -0
  177. package/dist/types/registry/opencode-zen.d.ts +6 -0
  178. package/dist/types/registry/openrouter.d.ts +13 -0
  179. package/dist/types/registry/parallel.d.ts +14 -0
  180. package/dist/types/registry/perplexity.d.ts +7 -0
  181. package/dist/types/registry/qianfan.d.ts +7 -0
  182. package/dist/types/registry/qwen-portal.d.ts +7 -0
  183. package/dist/types/registry/registry.d.ts +303 -0
  184. package/dist/types/registry/sakana.d.ts +7 -0
  185. package/dist/types/registry/synthetic.d.ts +6 -0
  186. package/dist/types/registry/tavily.d.ts +14 -0
  187. package/dist/types/registry/together.d.ts +6 -0
  188. package/dist/types/registry/types.d.ts +51 -0
  189. package/dist/types/registry/umans.d.ts +7 -0
  190. package/dist/types/registry/venice.d.ts +13 -0
  191. package/dist/types/registry/vercel-ai-gateway.d.ts +7 -0
  192. package/dist/types/registry/vllm.d.ts +7 -0
  193. package/dist/types/registry/wafer-serverless.d.ts +6 -0
  194. package/dist/types/registry/xai-oauth.d.ts +7 -0
  195. package/dist/types/registry/xai.d.ts +4 -0
  196. package/dist/types/registry/xiaomi-token-plan-ams.d.ts +6 -0
  197. package/dist/types/registry/xiaomi-token-plan-cn.d.ts +6 -0
  198. package/dist/types/registry/xiaomi-token-plan-sgp.d.ts +6 -0
  199. package/dist/types/registry/xiaomi.d.ts +6 -0
  200. package/dist/types/registry/zai.d.ts +7 -0
  201. package/dist/types/registry/zenmux.d.ts +7 -0
  202. package/dist/types/registry/zhipu-coding-plan.d.ts +7 -0
  203. package/dist/types/stream.d.ts +44 -0
  204. package/dist/types/types.d.ts +715 -0
  205. package/dist/types/usage/claude.d.ts +4 -0
  206. package/dist/types/usage/gemini.d.ts +2 -0
  207. package/dist/types/usage/github-copilot.d.ts +7 -0
  208. package/dist/types/usage/google-antigravity.d.ts +15 -0
  209. package/dist/types/usage/kimi.d.ts +2 -0
  210. package/dist/types/usage/minimax-code.d.ts +2 -0
  211. package/dist/types/usage/ollama.d.ts +5 -0
  212. package/dist/types/usage/openai-codex-base-url.d.ts +18 -0
  213. package/dist/types/usage/openai-codex-reset.d.ts +79 -0
  214. package/dist/types/usage/openai-codex.d.ts +3 -0
  215. package/dist/types/usage/opencode-go.d.ts +2 -0
  216. package/dist/types/usage/shared.d.ts +1 -0
  217. package/dist/types/usage/zai.d.ts +2 -0
  218. package/dist/types/usage.d.ts +346 -0
  219. package/dist/types/utils/abort.d.ts +25 -0
  220. package/dist/types/utils/anthropic-auth.d.ts +35 -0
  221. package/dist/types/utils/block-symbols.d.ts +20 -0
  222. package/dist/types/utils/deterministic-id.d.ts +16 -0
  223. package/dist/types/utils/empty-completion-retry.d.ts +21 -0
  224. package/dist/types/utils/event-stream.d.ts +30 -0
  225. package/dist/types/utils/foundry.d.ts +1 -0
  226. package/dist/types/utils/google-validation.d.ts +2 -0
  227. package/dist/types/utils/harmony-leak.d.ts +118 -0
  228. package/dist/types/utils/http-inspector.d.ts +30 -0
  229. package/dist/types/utils/idle-iterator.d.ts +137 -0
  230. package/dist/types/utils/leaked-thinking-stream.d.ts +29 -0
  231. package/dist/types/utils/openai-http.d.ts +54 -0
  232. package/dist/types/utils/openrouter-headers.d.ts +1 -0
  233. package/dist/types/utils/parse-bind.d.ts +23 -0
  234. package/dist/types/utils/provider-response.d.ts +3 -0
  235. package/dist/types/utils/proxy.d.ts +29 -0
  236. package/dist/types/utils/request-debug.d.ts +29 -0
  237. package/dist/types/utils/retry-after.d.ts +4 -0
  238. package/dist/types/utils/retry.d.ts +14 -0
  239. package/dist/types/utils/schema/adapt.d.ts +24 -0
  240. package/dist/types/utils/schema/compatibility.d.ts +30 -0
  241. package/dist/types/utils/schema/dereference.d.ts +11 -0
  242. package/dist/types/utils/schema/draft.d.ts +10 -0
  243. package/dist/types/utils/schema/equality.d.ts +4 -0
  244. package/dist/types/utils/schema/fields.d.ts +54 -0
  245. package/dist/types/utils/schema/index.d.ts +15 -0
  246. package/dist/types/utils/schema/json-schema-validator.d.ts +20 -0
  247. package/dist/types/utils/schema/meta-validator.d.ts +2 -0
  248. package/dist/types/utils/schema/normalize.d.ts +124 -0
  249. package/dist/types/utils/schema/spill.d.ts +8 -0
  250. package/dist/types/utils/schema/stamps.d.ts +17 -0
  251. package/dist/types/utils/schema/strict-tool-validation.d.ts +16 -0
  252. package/dist/types/utils/schema/types.d.ts +4 -0
  253. package/dist/types/utils/schema/typescript.d.ts +18 -0
  254. package/dist/types/utils/schema/wire.d.ts +92 -0
  255. package/dist/types/utils/schema/zod-decontaminate.d.ts +31 -0
  256. package/dist/types/utils/sdk-stream-timeout.d.ts +33 -0
  257. package/dist/types/utils/sse-debug.d.ts +5 -0
  258. package/dist/types/utils/stream-markup-healing.d.ts +87 -0
  259. package/dist/types/utils/thinking-loop.d.ts +102 -0
  260. package/dist/types/utils/tool-call-loop-guard.d.ts +26 -0
  261. package/dist/types/utils/tool-choice.d.ts +50 -0
  262. package/dist/types/utils/validation.d.ts +42 -0
  263. package/dist/types/utils.d.ts +24 -0
  264. package/package.json +139 -0
  265. package/src/api-registry.ts +109 -0
  266. package/src/auth-broker/client.ts +359 -0
  267. package/src/auth-broker/discover.ts +222 -0
  268. package/src/auth-broker/index.ts +7 -0
  269. package/src/auth-broker/refresher.ts +117 -0
  270. package/src/auth-broker/remote-store.ts +657 -0
  271. package/src/auth-broker/server.ts +646 -0
  272. package/src/auth-broker/snapshot-cache.ts +191 -0
  273. package/src/auth-broker/types.ts +130 -0
  274. package/src/auth-broker/wire-schemas.ts +249 -0
  275. package/src/auth-gateway/http.ts +194 -0
  276. package/src/auth-gateway/index.ts +3 -0
  277. package/src/auth-gateway/server.ts +802 -0
  278. package/src/auth-gateway/types.ts +151 -0
  279. package/src/auth-retry.ts +250 -0
  280. package/src/auth-storage.ts +5576 -0
  281. package/src/dialect/anthropic.md +31 -0
  282. package/src/dialect/anthropic.ts +608 -0
  283. package/src/dialect/catalog.ts +29 -0
  284. package/src/dialect/coercion.ts +136 -0
  285. package/src/dialect/deepseek.md +24 -0
  286. package/src/dialect/deepseek.ts +609 -0
  287. package/src/dialect/demotion.ts +36 -0
  288. package/src/dialect/examples.ts +33 -0
  289. package/src/dialect/factory.ts +34 -0
  290. package/src/dialect/fenced-thinking.ts +184 -0
  291. package/src/dialect/gemini.md +44 -0
  292. package/src/dialect/gemini.ts +597 -0
  293. package/src/dialect/gemma.md +33 -0
  294. package/src/dialect/gemma.ts +387 -0
  295. package/src/dialect/glm.md +32 -0
  296. package/src/dialect/glm.ts +456 -0
  297. package/src/dialect/harmony.md +31 -0
  298. package/src/dialect/harmony.ts +346 -0
  299. package/src/dialect/hermes.md +25 -0
  300. package/src/dialect/hermes.ts +206 -0
  301. package/src/dialect/history.ts +81 -0
  302. package/src/dialect/index.ts +15 -0
  303. package/src/dialect/inventory.ts +73 -0
  304. package/src/dialect/kimi.md +24 -0
  305. package/src/dialect/kimi.ts +340 -0
  306. package/src/dialect/minimax.md +31 -0
  307. package/src/dialect/minimax.ts +95 -0
  308. package/src/dialect/owned-stream.ts +470 -0
  309. package/src/dialect/prompt-template.md +12 -0
  310. package/src/dialect/qwen3.md +28 -0
  311. package/src/dialect/qwen3.ts +240 -0
  312. package/src/dialect/rendering.ts +249 -0
  313. package/src/dialect/thinking.ts +122 -0
  314. package/src/dialect/types.ts +57 -0
  315. package/src/dialect/xml.md +22 -0
  316. package/src/dialect/xml.ts +90 -0
  317. package/src/error/abort.ts +18 -0
  318. package/src/error/auth-classify.ts +30 -0
  319. package/src/error/auth.ts +48 -0
  320. package/src/error/aws.ts +31 -0
  321. package/src/error/classes.ts +186 -0
  322. package/src/error/finalize.ts +69 -0
  323. package/src/error/flags.ts +506 -0
  324. package/src/error/format.ts +45 -0
  325. package/src/error/gateway.ts +96 -0
  326. package/src/error/index.ts +13 -0
  327. package/src/error/oauth.ts +58 -0
  328. package/src/error/provider.ts +62 -0
  329. package/src/error/rate-limit.ts +161 -0
  330. package/src/error/retryable.ts +70 -0
  331. package/src/error/validation.ts +44 -0
  332. package/src/index.ts +49 -0
  333. package/src/provider-details.ts +90 -0
  334. package/src/providers/__tests__/google-auth.test.ts +144 -0
  335. package/src/providers/__tests__/kimi-code-thinking.test.ts +112 -0
  336. package/src/providers/__tests__/openai-codex-error.test.ts +84 -0
  337. package/src/providers/amazon-bedrock.ts +1042 -0
  338. package/src/providers/anthropic-client.ts +295 -0
  339. package/src/providers/anthropic-messages-server-schema.ts +252 -0
  340. package/src/providers/anthropic-messages-server.ts +756 -0
  341. package/src/providers/anthropic-wire.ts +318 -0
  342. package/src/providers/anthropic.ts +4078 -0
  343. package/src/providers/aws-credentials.ts +586 -0
  344. package/src/providers/aws-eventstream.ts +181 -0
  345. package/src/providers/aws-sigv4.ts +218 -0
  346. package/src/providers/azure-openai-responses.ts +382 -0
  347. package/src/providers/cursor/proto/agent.proto +3526 -0
  348. package/src/providers/cursor/proto/buf.gen.yaml +6 -0
  349. package/src/providers/cursor/proto/buf.yaml +17 -0
  350. package/src/providers/cursor.ts +2695 -0
  351. package/src/providers/devin/proto/buf/validate/validate.proto +468 -0
  352. package/src/providers/devin/proto/buf.gen.yaml +33 -0
  353. package/src/providers/devin/proto/buf.yaml +17 -0
  354. package/src/providers/devin/proto/cel/expr/checked.proto +103 -0
  355. package/src/providers/devin/proto/cel/expr/eval.proto +38 -0
  356. package/src/providers/devin/proto/cel/expr/explain.proto +15 -0
  357. package/src/providers/devin/proto/cel/expr/syntax.proto +113 -0
  358. package/src/providers/devin/proto/cel/expr/value.proto +41 -0
  359. package/src/providers/devin/proto/connectext/grpc/status/v1/status.proto +11 -0
  360. package/src/providers/devin/proto/errorspb/errors.proto +56 -0
  361. package/src/providers/devin/proto/errorspb/hintdetail.proto +7 -0
  362. package/src/providers/devin/proto/errorspb/markers.proto +10 -0
  363. package/src/providers/devin/proto/errorspb/tags.proto +12 -0
  364. package/src/providers/devin/proto/errorspb/testing.proto +6 -0
  365. package/src/providers/devin/proto/exa/analytics_pb/analytics.proto +188 -0
  366. package/src/providers/devin/proto/exa/api_server_pb/api_server.proto +2461 -0
  367. package/src/providers/devin/proto/exa/auth_pb/auth.proto +19 -0
  368. package/src/providers/devin/proto/exa/auto_cascade_common_pb/auto_cascade_common.proto +79 -0
  369. package/src/providers/devin/proto/exa/browser_preview_pb/browser_preview.proto +32 -0
  370. package/src/providers/devin/proto/exa/bug_checker_pb/bug_checker.proto +22 -0
  371. package/src/providers/devin/proto/exa/cascade_plugins_pb/cascade_plugins.proto +262 -0
  372. package/src/providers/devin/proto/exa/chat_client_server_pb/chat_client_server.proto +57 -0
  373. package/src/providers/devin/proto/exa/chat_pb/chat.proto +449 -0
  374. package/src/providers/devin/proto/exa/code_edit/code_edit_pb/code_edit.proto +186 -0
  375. package/src/providers/devin/proto/exa/codeium_common_pb/codeium_common.proto +4157 -0
  376. package/src/providers/devin/proto/exa/context_module_pb/context_module.proto +175 -0
  377. package/src/providers/devin/proto/exa/cortex_pb/cortex.proto +3268 -0
  378. package/src/providers/devin/proto/exa/dev_pb/dev.proto +26 -0
  379. package/src/providers/devin/proto/exa/diff_action_pb/diff_action.proto +75 -0
  380. package/src/providers/devin/proto/exa/eval/pr_eval/datasets_pb/datasets.proto +103 -0
  381. package/src/providers/devin/proto/exa/eval_pb/eval.proto +1315 -0
  382. package/src/providers/devin/proto/exa/extension_server_pb/extension_server.proto +556 -0
  383. package/src/providers/devin/proto/exa/file_system_provider_pb/file_system_provider.proto +75 -0
  384. package/src/providers/devin/proto/exa/index_pb/index.proto +461 -0
  385. package/src/providers/devin/proto/exa/knowledge_base_pb/knowledge_base.proto +144 -0
  386. package/src/providers/devin/proto/exa/language_server_pb/language_server.proto +2385 -0
  387. package/src/providers/devin/proto/exa/model_management_pb/model_management.proto +186 -0
  388. package/src/providers/devin/proto/exa/opensearch_clients_pb/opensearch_clients.proto +503 -0
  389. package/src/providers/devin/proto/exa/product_analytics_pb/product_analytics.proto +37 -0
  390. package/src/providers/devin/proto/exa/prompt_pb/prompt.proto +92 -0
  391. package/src/providers/devin/proto/exa/reactive_component_pb/reactive_component.proto +96 -0
  392. package/src/providers/devin/proto/exa/seat_management_pb/seat_management.proto +2680 -0
  393. package/src/providers/devin/proto/exa/tokenizer_pb/tokenizer.proto +37 -0
  394. package/src/providers/devin/proto/exa/trainer_pb/config.proto +647 -0
  395. package/src/providers/devin/proto/exa/tree_sitter/language_data_pb/language_data.proto +14 -0
  396. package/src/providers/devin/proto/exa/trust_pb/trust.proto +157 -0
  397. package/src/providers/devin/proto/exa/user_analytics_pb/user_analytics.proto +519 -0
  398. package/src/providers/devin/proto/google.golang.org/appengine/internal/base/api_base.proto +28 -0
  399. package/src/providers/devin/proto/google.golang.org/appengine/internal/datastore/datastore_v3.proto +484 -0
  400. package/src/providers/devin/proto/google.golang.org/appengine/internal/log/log_service.proto +136 -0
  401. package/src/providers/devin/proto/google.golang.org/appengine/internal/remote_api/remote_api.proto +42 -0
  402. package/src/providers/devin/proto/google.golang.org/appengine/internal/urlfetch/urlfetch_service.proto +61 -0
  403. package/src/providers/devin/proto/grpc/binlog/v1/binarylog.proto +84 -0
  404. package/src/providers/devin/proto/io/prometheus/client/metrics.proto +98 -0
  405. package/src/providers/devin.ts +577 -0
  406. package/src/providers/error-message.ts +21 -0
  407. package/src/providers/github-copilot-headers.ts +141 -0
  408. package/src/providers/gitlab-duo-workflow-chatml-note.md +1 -0
  409. package/src/providers/gitlab-duo-workflow.ts +3058 -0
  410. package/src/providers/gitlab-duo.ts +395 -0
  411. package/src/providers/google-auth.ts +350 -0
  412. package/src/providers/google-gemini-cli.ts +1362 -0
  413. package/src/providers/google-interactions.ts +753 -0
  414. package/src/providers/google-shared.ts +1103 -0
  415. package/src/providers/google-types.ts +180 -0
  416. package/src/providers/google-vertex.ts +183 -0
  417. package/src/providers/google.ts +87 -0
  418. package/src/providers/grammar.ts +70 -0
  419. package/src/providers/kimi.ts +52 -0
  420. package/src/providers/mock.ts +507 -0
  421. package/src/providers/ollama.ts +773 -0
  422. package/src/providers/openai-anthropic-shim.ts +152 -0
  423. package/src/providers/openai-chat-server-schema.ts +242 -0
  424. package/src/providers/openai-chat-server.ts +715 -0
  425. package/src/providers/openai-chat-wire.ts +847 -0
  426. package/src/providers/openai-codex/request-transformer.ts +295 -0
  427. package/src/providers/openai-codex/response-handler.ts +102 -0
  428. package/src/providers/openai-codex-responses.ts +3468 -0
  429. package/src/providers/openai-completions.ts +2173 -0
  430. package/src/providers/openai-reasoning-fallback.ts +269 -0
  431. package/src/providers/openai-responses-reasoning-suppression.md +1 -0
  432. package/src/providers/openai-responses-server-schema.ts +282 -0
  433. package/src/providers/openai-responses-server.ts +1280 -0
  434. package/src/providers/openai-responses-wire.ts +6391 -0
  435. package/src/providers/openai-responses.ts +1022 -0
  436. package/src/providers/openai-shared.ts +2648 -0
  437. package/src/providers/pi-native-client.ts +266 -0
  438. package/src/providers/pi-native-server.ts +242 -0
  439. package/src/providers/register-builtins.ts +475 -0
  440. package/src/providers/synthetic.ts +50 -0
  441. package/src/providers/transform-messages.ts +787 -0
  442. package/src/providers/vision-guard.ts +54 -0
  443. package/src/registry/aimlapi.ts +6 -0
  444. package/src/registry/alibaba-coding-plan.ts +95 -0
  445. package/src/registry/amazon-bedrock.ts +22 -0
  446. package/src/registry/anthropic.ts +26 -0
  447. package/src/registry/api-key-login.ts +112 -0
  448. package/src/registry/api-key-validation.ts +161 -0
  449. package/src/registry/azure.ts +6 -0
  450. package/src/registry/cerebras.ts +23 -0
  451. package/src/registry/cloudflare-ai-gateway.ts +45 -0
  452. package/src/registry/coreweave.ts +40 -0
  453. package/src/registry/cursor.ts +20 -0
  454. package/src/registry/deepseek.ts +46 -0
  455. package/src/registry/derived.ts +9 -0
  456. package/src/registry/devin.ts +15 -0
  457. package/src/registry/firepass.ts +32 -0
  458. package/src/registry/fireworks.ts +28 -0
  459. package/src/registry/github-copilot.ts +22 -0
  460. package/src/registry/gitlab-duo-workflow.ts +20 -0
  461. package/src/registry/gitlab-duo.ts +19 -0
  462. package/src/registry/google-antigravity.ts +22 -0
  463. package/src/registry/google-gemini-cli.ts +22 -0
  464. package/src/registry/google-vertex.ts +38 -0
  465. package/src/registry/google.ts +6 -0
  466. package/src/registry/groq.ts +6 -0
  467. package/src/registry/huggingface.ts +29 -0
  468. package/src/registry/index.ts +4 -0
  469. package/src/registry/kagi.ts +46 -0
  470. package/src/registry/kilo.ts +114 -0
  471. package/src/registry/kimi-code.ts +17 -0
  472. package/src/registry/litellm.ts +45 -0
  473. package/src/registry/llama-cpp.ts +35 -0
  474. package/src/registry/lm-studio.ts +31 -0
  475. package/src/registry/minimax-code-cn.ts +12 -0
  476. package/src/registry/minimax-code.ts +12 -0
  477. package/src/registry/minimax.ts +6 -0
  478. package/src/registry/mistral.ts +6 -0
  479. package/src/registry/moonshot.ts +22 -0
  480. package/src/registry/nanogpt.ts +22 -0
  481. package/src/registry/nvidia.ts +61 -0
  482. package/src/registry/oauth/__tests__/xai-oauth.test.ts +104 -0
  483. package/src/registry/oauth/anthropic.ts +311 -0
  484. package/src/registry/oauth/callback-server.ts +315 -0
  485. package/src/registry/oauth/cursor.ts +171 -0
  486. package/src/registry/oauth/devin.ts +124 -0
  487. package/src/registry/oauth/github-copilot.ts +369 -0
  488. package/src/registry/oauth/gitlab-duo-workflow.ts +146 -0
  489. package/src/registry/oauth/gitlab-duo.ts +222 -0
  490. package/src/registry/oauth/google-antigravity.ts +209 -0
  491. package/src/registry/oauth/google-gemini-cli.ts +273 -0
  492. package/src/registry/oauth/google-oauth-shared.ts +125 -0
  493. package/src/registry/oauth/index.ts +269 -0
  494. package/src/registry/oauth/kimi.ts +289 -0
  495. package/src/registry/oauth/minimax-code.ts +53 -0
  496. package/src/registry/oauth/oauth.html +311 -0
  497. package/src/registry/oauth/openai-codex.ts +364 -0
  498. package/src/registry/oauth/opencode.ts +50 -0
  499. package/src/registry/oauth/perplexity.ts +228 -0
  500. package/src/registry/oauth/pkce.ts +18 -0
  501. package/src/registry/oauth/types.ts +65 -0
  502. package/src/registry/oauth/wafer.ts +24 -0
  503. package/src/registry/oauth/xai-oauth.ts +394 -0
  504. package/src/registry/oauth/xiaomi.ts +211 -0
  505. package/src/registry/ollama-cloud.ts +36 -0
  506. package/src/registry/ollama.ts +43 -0
  507. package/src/registry/openai-codex-device.ts +18 -0
  508. package/src/registry/openai-codex.ts +19 -0
  509. package/src/registry/openai.ts +6 -0
  510. package/src/registry/opencode-go.ts +12 -0
  511. package/src/registry/opencode-zen.ts +12 -0
  512. package/src/registry/openrouter.ts +28 -0
  513. package/src/registry/parallel.ts +45 -0
  514. package/src/registry/perplexity.ts +13 -0
  515. package/src/registry/qianfan.ts +27 -0
  516. package/src/registry/qwen-portal.ts +50 -0
  517. package/src/registry/registry.ts +161 -0
  518. package/src/registry/sakana.ts +22 -0
  519. package/src/registry/synthetic.ts +21 -0
  520. package/src/registry/tavily.ts +45 -0
  521. package/src/registry/together.ts +22 -0
  522. package/src/registry/types.ts +56 -0
  523. package/src/registry/umans.ts +23 -0
  524. package/src/registry/venice.ts +33 -0
  525. package/src/registry/vercel-ai-gateway.ts +38 -0
  526. package/src/registry/vllm.ts +34 -0
  527. package/src/registry/wafer-serverless.ts +12 -0
  528. package/src/registry/xai-oauth.ts +17 -0
  529. package/src/registry/xai.ts +6 -0
  530. package/src/registry/xiaomi-token-plan-ams.ts +12 -0
  531. package/src/registry/xiaomi-token-plan-cn.ts +12 -0
  532. package/src/registry/xiaomi-token-plan-sgp.ts +12 -0
  533. package/src/registry/xiaomi.ts +12 -0
  534. package/src/registry/zai.ts +27 -0
  535. package/src/registry/zenmux.ts +22 -0
  536. package/src/registry/zhipu-coding-plan.ts +27 -0
  537. package/src/stream.ts +1778 -0
  538. package/src/types.ts +856 -0
  539. package/src/usage/claude.ts +485 -0
  540. package/src/usage/gemini.ts +258 -0
  541. package/src/usage/github-copilot.ts +424 -0
  542. package/src/usage/google-antigravity.ts +497 -0
  543. package/src/usage/kimi.ts +271 -0
  544. package/src/usage/minimax-code.ts +30 -0
  545. package/src/usage/ollama.ts +41 -0
  546. package/src/usage/openai-codex-base-url.ts +35 -0
  547. package/src/usage/openai-codex-reset.ts +174 -0
  548. package/src/usage/openai-codex.ts +535 -0
  549. package/src/usage/opencode-go.ts +89 -0
  550. package/src/usage/shared.ts +10 -0
  551. package/src/usage/zai.ts +321 -0
  552. package/src/usage.ts +333 -0
  553. package/src/utils/abort.ts +67 -0
  554. package/src/utils/anthropic-auth.ts +93 -0
  555. package/src/utils/block-symbols.ts +32 -0
  556. package/src/utils/deterministic-id.ts +20 -0
  557. package/src/utils/empty-completion-retry.ts +159 -0
  558. package/src/utils/event-stream.ts +171 -0
  559. package/src/utils/foundry.ts +8 -0
  560. package/src/utils/google-validation.ts +25 -0
  561. package/src/utils/harmony-leak.ts +456 -0
  562. package/src/utils/http-inspector.ts +168 -0
  563. package/src/utils/idle-iterator.ts +473 -0
  564. package/src/utils/leaked-thinking-stream.ts +294 -0
  565. package/src/utils/openai-http.ts +122 -0
  566. package/src/utils/openrouter-headers.ts +12 -0
  567. package/src/utils/parse-bind.ts +56 -0
  568. package/src/utils/provider-response.ts +30 -0
  569. package/src/utils/proxy.ts +240 -0
  570. package/src/utils/request-debug.ts +351 -0
  571. package/src/utils/retry-after.ts +110 -0
  572. package/src/utils/retry.ts +59 -0
  573. package/src/utils/schema/CONSTRAINTS.md +166 -0
  574. package/src/utils/schema/adapt.ts +36 -0
  575. package/src/utils/schema/compatibility.ts +435 -0
  576. package/src/utils/schema/dereference.ts +98 -0
  577. package/src/utils/schema/draft.ts +341 -0
  578. package/src/utils/schema/equality.ts +97 -0
  579. package/src/utils/schema/fields.ts +207 -0
  580. package/src/utils/schema/index.ts +15 -0
  581. package/src/utils/schema/json-schema-validator.ts +595 -0
  582. package/src/utils/schema/meta-validator.ts +167 -0
  583. package/src/utils/schema/normalize.ts +1901 -0
  584. package/src/utils/schema/spill.ts +43 -0
  585. package/src/utils/schema/stamps.ts +109 -0
  586. package/src/utils/schema/strict-tool-validation.ts +117 -0
  587. package/src/utils/schema/types.ts +10 -0
  588. package/src/utils/schema/typescript.ts +198 -0
  589. package/src/utils/schema/wire.ts +789 -0
  590. package/src/utils/schema/zod-decontaminate.ts +331 -0
  591. package/src/utils/sdk-stream-timeout.ts +43 -0
  592. package/src/utils/sse-debug.ts +18 -0
  593. package/src/utils/stream-markup-healing.ts +247 -0
  594. package/src/utils/thinking-loop.ts +552 -0
  595. package/src/utils/tool-call-loop-guard.ts +107 -0
  596. package/src/utils/tool-choice.ts +99 -0
  597. package/src/utils/validation.ts +1507 -0
  598. package/src/utils.ts +171 -0
@@ -0,0 +1,475 @@
1
+ /**
2
+ * Lazy provider module loading.
3
+ *
4
+ * Each provider module is loaded only when its stream function is first called.
5
+ * This avoids eagerly importing heavy SDK dependencies (e.g., openai) at
6
+ * startup. The loaded module promise is cached so subsequent calls
7
+ * reuse the same import.
8
+ *
9
+ * NOTE: stream.ts currently imports providers directly, so this file is not yet
10
+ * wired into the main streaming path. It provides the infrastructure for lazy
11
+ * loading that can be integrated when stream.ts is refactored.
12
+ */
13
+
14
+ import * as AIError from "../error";
15
+ import type {
16
+ Api,
17
+ AssistantMessage,
18
+ AssistantMessageEvent,
19
+ AssistantMessageEventStream,
20
+ Context,
21
+ Model,
22
+ OptionsForApi,
23
+ } from "../types";
24
+ import { type AbortSourceTracker, createAbortSourceTracker } from "../utils/abort";
25
+ import { AssistantMessageEventStream as EventStreamImpl } from "../utils/event-stream";
26
+ import {
27
+ getOpenAIStreamFirstEventTimeoutMs,
28
+ getOpenAIStreamIdleTimeoutMs,
29
+ getStreamFirstEventTimeoutMs,
30
+ getStreamIdleTimeoutMs,
31
+ iterateWithIdleTimeout,
32
+ } from "../utils/idle-iterator";
33
+ import type { BedrockOptions } from "./amazon-bedrock";
34
+ import type { AnthropicOptions } from "./anthropic";
35
+ import type { AzureOpenAIResponsesOptions } from "./azure-openai-responses";
36
+ import type { CursorOptions } from "./cursor";
37
+ import type { DevinOptions } from "./devin";
38
+ import type { GoogleOptions } from "./google";
39
+ import type { GoogleGeminiCliOptions } from "./google-gemini-cli";
40
+ import type { GoogleVertexOptions } from "./google-vertex";
41
+ import type { OllamaChatOptions } from "./ollama";
42
+ import type { OpenAICodexResponsesOptions } from "./openai-codex-responses";
43
+ import type { OpenAICompletionsOptions } from "./openai-completions";
44
+ import type { OpenAIResponsesOptions } from "./openai-responses";
45
+
46
+ // ---------------------------------------------------------------------------
47
+ // Lazy provider module shape
48
+ // ---------------------------------------------------------------------------
49
+
50
+ interface LazyProviderModule<TApi extends Api> {
51
+ stream: (model: Model<TApi>, context: Context, options: OptionsForApi<TApi>) => AsyncIterable<AssistantMessageEvent>;
52
+ }
53
+
54
+ interface AnthropicProviderModule {
55
+ streamAnthropic: (
56
+ model: Model<"anthropic-messages">,
57
+ context: Context,
58
+ options: AnthropicOptions,
59
+ ) => AssistantMessageEventStream;
60
+ }
61
+
62
+ interface AzureOpenAIResponsesProviderModule {
63
+ streamAzureOpenAIResponses: (
64
+ model: Model<"azure-openai-responses">,
65
+ context: Context,
66
+ options: AzureOpenAIResponsesOptions,
67
+ ) => AssistantMessageEventStream;
68
+ }
69
+
70
+ interface GoogleProviderModule {
71
+ streamGoogle: (
72
+ model: Model<"google-generative-ai">,
73
+ context: Context,
74
+ options: GoogleOptions,
75
+ ) => AssistantMessageEventStream;
76
+ }
77
+
78
+ interface GoogleGeminiCliProviderModule {
79
+ streamGoogleGeminiCli: (
80
+ model: Model<"google-gemini-cli">,
81
+ context: Context,
82
+ options: GoogleGeminiCliOptions,
83
+ ) => AssistantMessageEventStream;
84
+ }
85
+
86
+ interface GoogleVertexProviderModule {
87
+ streamGoogleVertex: (
88
+ model: Model<"google-vertex">,
89
+ context: Context,
90
+ options: GoogleVertexOptions,
91
+ ) => AssistantMessageEventStream;
92
+ }
93
+
94
+ interface OpenAICodexResponsesProviderModule {
95
+ streamOpenAICodexResponses: (
96
+ model: Model<"openai-codex-responses">,
97
+ context: Context,
98
+ options: OpenAICodexResponsesOptions,
99
+ ) => AssistantMessageEventStream;
100
+ }
101
+
102
+ interface OpenAICompletionsProviderModule {
103
+ streamOpenAICompletions: (
104
+ model: Model<"openai-completions">,
105
+ context: Context,
106
+ options: OpenAICompletionsOptions,
107
+ ) => AssistantMessageEventStream;
108
+ }
109
+
110
+ interface OpenAIResponsesProviderModule {
111
+ streamOpenAIResponses: (
112
+ model: Model<"openai-responses">,
113
+ context: Context,
114
+ options: OpenAIResponsesOptions,
115
+ ) => AssistantMessageEventStream;
116
+ }
117
+
118
+ interface OllamaProviderModule {
119
+ streamOllama: (
120
+ model: Model<"ollama-chat">,
121
+ context: Context,
122
+ options: OllamaChatOptions,
123
+ ) => AssistantMessageEventStream;
124
+ }
125
+
126
+ interface CursorProviderModule {
127
+ streamCursor: (
128
+ model: Model<"cursor-agent">,
129
+ context: Context,
130
+ options: CursorOptions,
131
+ ) => AssistantMessageEventStream;
132
+ }
133
+
134
+ interface DevinProviderModule {
135
+ streamDevin: (model: Model<"devin-agent">, context: Context, options: DevinOptions) => AssistantMessageEventStream;
136
+ }
137
+
138
+ interface BedrockProviderModule {
139
+ streamBedrock: (
140
+ model: Model<"bedrock-converse-stream">,
141
+ context: Context,
142
+ options: BedrockOptions,
143
+ ) => AssistantMessageEventStream;
144
+ }
145
+
146
+ // ---------------------------------------------------------------------------
147
+ // Module-level lazy promise caches
148
+ // ---------------------------------------------------------------------------
149
+
150
+ let anthropicProviderModulePromise: Promise<LazyProviderModule<"anthropic-messages">> | undefined;
151
+ let azureOpenAIResponsesProviderModulePromise: Promise<LazyProviderModule<"azure-openai-responses">> | undefined;
152
+ let googleProviderModulePromise: Promise<LazyProviderModule<"google-generative-ai">> | undefined;
153
+ let googleGeminiCliProviderModulePromise: Promise<LazyProviderModule<"google-gemini-cli">> | undefined;
154
+ let googleVertexProviderModulePromise: Promise<LazyProviderModule<"google-vertex">> | undefined;
155
+ let openAICodexResponsesProviderModulePromise: Promise<LazyProviderModule<"openai-codex-responses">> | undefined;
156
+ let openAICompletionsProviderModulePromise: Promise<LazyProviderModule<"openai-completions">> | undefined;
157
+ let openAIResponsesProviderModulePromise: Promise<LazyProviderModule<"openai-responses">> | undefined;
158
+ let ollamaProviderModulePromise: Promise<LazyProviderModule<"ollama-chat">> | undefined;
159
+ let cursorProviderModulePromise: Promise<LazyProviderModule<"cursor-agent">> | undefined;
160
+ let devinProviderModulePromise: Promise<LazyProviderModule<"devin-agent">> | undefined;
161
+ let bedrockProviderModuleOverride: LazyProviderModule<"bedrock-converse-stream"> | undefined;
162
+ let bedrockProviderModulePromise: Promise<LazyProviderModule<"bedrock-converse-stream">> | undefined;
163
+
164
+ export function setBedrockProviderModule(module: BedrockProviderModule): void {
165
+ bedrockProviderModuleOverride = {
166
+ stream: module.streamBedrock,
167
+ };
168
+ }
169
+
170
+ // ---------------------------------------------------------------------------
171
+ // Stream forwarding / error helpers
172
+ // ---------------------------------------------------------------------------
173
+
174
+ const LAZY_STREAM_IDLE_TIMEOUT_ERROR = "Provider stream stalled while waiting for the next event";
175
+ const LAZY_STREAM_FIRST_EVENT_TIMEOUT_ERROR = "Provider stream timed out while waiting for the first event";
176
+
177
+ function hasFinalResult(
178
+ source: AsyncIterable<AssistantMessageEvent>,
179
+ ): source is AsyncIterable<AssistantMessageEvent> & { result(): Promise<AssistantMessage> } {
180
+ return typeof (source as { result?: unknown }).result === "function";
181
+ }
182
+
183
+ /**
184
+ * floor used when neither caller option nor env var pins a value. Generic env
185
+ * vars (`PI_STREAM_FIRST_EVENT_TIMEOUT_MS`, `PI_STREAM_IDLE_TIMEOUT_MS`) still
186
+ * take precedence unless a provider opts into OpenAI-family idle flooring for
187
+ * local backends that users historically tuned with `PI_OPENAI_STREAM_IDLE_TIMEOUT_MS`.
188
+ */
189
+ interface LazyStreamLimits {
190
+ defaultFirstEventTimeoutMs?: number;
191
+ defaultIdleTimeoutMs?: number;
192
+ /**
193
+ * The provider implementation already wraps its upstream transport with
194
+ * stream timeouts. Keep the lazy loader from racing it with generic errors.
195
+ */
196
+ providerHandlesStreamTimeouts?: boolean;
197
+ /**
198
+ * Apply OpenAI-family idle timeout precedence in the lazy wrapper. Used by
199
+ * local backends whose users historically tune slow prompt-processing gaps
200
+ * with `PI_OPENAI_STREAM_IDLE_TIMEOUT_MS`.
201
+ */
202
+ openAIIdleEnvFloorsFirstEvent?: boolean;
203
+ }
204
+ /**
205
+ * Cloud Code Assist (google-gemini-cli / google-antigravity) routinely takes
206
+ * longer than the global 100s default to emit its first SSE event when serving
207
+ * the heavier Gemini 3.x Pro tiers at high thinking levels. Bump the first-event
208
+ * floor to five minutes so callers stop seeing spurious "stream timed out while
209
+ * waiting for the first event" aborts on legitimate cold reasoning starts.
210
+ * The steady-state idle watchdog stays on the global default since the upstream
211
+ * emits thinking tokens frequently once it gets going.
212
+ */
213
+ const GOOGLE_GEMINI_CLI_LAZY_STREAM_LIMITS: LazyStreamLimits = {
214
+ defaultFirstEventTimeoutMs: 300_000,
215
+ };
216
+
217
+ const PROVIDER_HANDLED_STREAM_TIMEOUTS: LazyStreamLimits = {
218
+ providerHandlesStreamTimeouts: true,
219
+ };
220
+
221
+ const OPENAI_IDLE_FLOORED_LAZY_STREAM_LIMITS: LazyStreamLimits = {
222
+ openAIIdleEnvFloorsFirstEvent: true,
223
+ };
224
+
225
+ function forwardStream<TApi extends Api>(
226
+ target: EventStreamImpl,
227
+ source: AsyncIterable<AssistantMessageEvent>,
228
+ model: Model<TApi>,
229
+ options: OptionsForApi<TApi>,
230
+ abortTracker: AbortSourceTracker,
231
+ limits?: LazyStreamLimits,
232
+ ): void {
233
+ (async () => {
234
+ try {
235
+ const providerHandlesStreamTimeouts = limits?.providerHandlesStreamTimeouts === true;
236
+ const idleTimeoutMs = providerHandlesStreamTimeouts
237
+ ? undefined
238
+ : (options.streamIdleTimeoutMs ??
239
+ (limits?.openAIIdleEnvFloorsFirstEvent
240
+ ? getOpenAIStreamIdleTimeoutMs(limits.defaultIdleTimeoutMs)
241
+ : getStreamIdleTimeoutMs(limits?.defaultIdleTimeoutMs)));
242
+ const firstItemTimeoutMs = providerHandlesStreamTimeouts
243
+ ? 0
244
+ : (options.streamFirstEventTimeoutMs ??
245
+ (limits?.openAIIdleEnvFloorsFirstEvent
246
+ ? getOpenAIStreamFirstEventTimeoutMs(idleTimeoutMs, limits.defaultFirstEventTimeoutMs)
247
+ : getStreamFirstEventTimeoutMs(idleTimeoutMs, limits?.defaultFirstEventTimeoutMs)));
248
+ const watchedSource = iterateWithIdleTimeout(source, {
249
+ idleTimeoutMs,
250
+ firstItemTimeoutMs,
251
+ errorMessage: LAZY_STREAM_IDLE_TIMEOUT_ERROR,
252
+ firstItemErrorMessage: LAZY_STREAM_FIRST_EVENT_TIMEOUT_ERROR,
253
+ onIdle: () => abortTracker.abortLocally(new AIError.StreamTimeoutError(LAZY_STREAM_IDLE_TIMEOUT_ERROR)),
254
+ onFirstItemTimeout: () =>
255
+ abortTracker.abortLocally(new AIError.StreamTimeoutError(LAZY_STREAM_FIRST_EVENT_TIMEOUT_ERROR)),
256
+ abortSignal: options.signal,
257
+ // The synthetic `start` event is yielded immediately by every provider before
258
+ // the upstream model has emitted any tokens. Treating it as the first "real"
259
+ // item would flip the watchdog from `firstItemTimeoutMs` to the much shorter
260
+ // `idleTimeoutMs` while we're still legitimately waiting on the model's
261
+ // first response (slow first-token from reasoning models, cold proxies, etc.).
262
+ isProgressItem: event => (event as AssistantMessageEvent).type !== "start",
263
+ });
264
+
265
+ for await (const event of watchedSource) {
266
+ target.push(event);
267
+ }
268
+ if (hasFinalResult(source)) {
269
+ target.end(await source.result());
270
+ } else {
271
+ target.end();
272
+ }
273
+ } catch (error) {
274
+ const stopReason = abortTracker.wasCallerAbort() ? "aborted" : "error";
275
+ const message = createLazyLoadErrorMessage(model, error, stopReason);
276
+ target.push({ type: "error", reason: stopReason, error: message });
277
+ target.end(message);
278
+ }
279
+ })();
280
+ }
281
+
282
+ function createLazyLoadErrorMessage<TApi extends Api>(
283
+ model: Model<TApi>,
284
+ error: unknown,
285
+ stopReason: Extract<AssistantMessage["stopReason"], "aborted" | "error"> = "error",
286
+ ): AssistantMessage {
287
+ return {
288
+ role: "assistant",
289
+ content: [],
290
+ api: model.api,
291
+ provider: model.provider,
292
+ model: model.id,
293
+ usage: {
294
+ input: 0,
295
+ output: 0,
296
+ cacheRead: 0,
297
+ cacheWrite: 0,
298
+ totalTokens: 0,
299
+ cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },
300
+ },
301
+ stopReason,
302
+ errorMessage:
303
+ stopReason === "aborted" ? "Request was aborted" : error instanceof Error ? error.message : String(error),
304
+ timestamp: Date.now(),
305
+ };
306
+ }
307
+
308
+ // ---------------------------------------------------------------------------
309
+ // Generic lazy stream factory
310
+ // ---------------------------------------------------------------------------
311
+
312
+ function createLazyStream<TApi extends Api>(
313
+ loadModule: () => Promise<LazyProviderModule<TApi>>,
314
+ limits?: LazyStreamLimits,
315
+ ): (model: Model<TApi>, context: Context, options: OptionsForApi<TApi>) => EventStreamImpl {
316
+ return (model, context, options) => {
317
+ const outer = new EventStreamImpl();
318
+ const streamOptions = (options ?? {}) as OptionsForApi<TApi>;
319
+
320
+ loadModule()
321
+ .then(module => {
322
+ const abortTracker = createAbortSourceTracker(streamOptions.signal);
323
+ const providerOptions = { ...streamOptions, signal: abortTracker.requestSignal } as OptionsForApi<TApi>;
324
+ const inner = module.stream(model, context, providerOptions);
325
+ forwardStream(outer, inner, model, streamOptions, abortTracker, limits);
326
+ })
327
+ .catch(error => {
328
+ const message = createLazyLoadErrorMessage(model, error);
329
+ outer.push({ type: "error", reason: "error", error: message });
330
+ outer.end(message);
331
+ });
332
+
333
+ return outer;
334
+ };
335
+ }
336
+
337
+ // ---------------------------------------------------------------------------
338
+ // Module loaders (one per provider, cached via ||=)
339
+ // ---------------------------------------------------------------------------
340
+
341
+ function loadAnthropicProviderModule(): Promise<LazyProviderModule<"anthropic-messages">> {
342
+ anthropicProviderModulePromise ||= import("./anthropic").then(module => {
343
+ const provider = module as AnthropicProviderModule;
344
+ return { stream: provider.streamAnthropic };
345
+ });
346
+ return anthropicProviderModulePromise;
347
+ }
348
+
349
+ function loadAzureOpenAIResponsesProviderModule(): Promise<LazyProviderModule<"azure-openai-responses">> {
350
+ azureOpenAIResponsesProviderModulePromise ||= import("./azure-openai-responses").then(module => {
351
+ const provider = module as AzureOpenAIResponsesProviderModule;
352
+ return { stream: provider.streamAzureOpenAIResponses };
353
+ });
354
+ return azureOpenAIResponsesProviderModulePromise;
355
+ }
356
+
357
+ function loadGoogleProviderModule(): Promise<LazyProviderModule<"google-generative-ai">> {
358
+ googleProviderModulePromise ||= import("./google").then(module => {
359
+ const provider = module as GoogleProviderModule;
360
+ return { stream: provider.streamGoogle };
361
+ });
362
+ return googleProviderModulePromise;
363
+ }
364
+
365
+ function loadGoogleGeminiCliProviderModule(): Promise<LazyProviderModule<"google-gemini-cli">> {
366
+ googleGeminiCliProviderModulePromise ||= import("./google-gemini-cli").then(module => {
367
+ const provider = module as GoogleGeminiCliProviderModule;
368
+ return { stream: provider.streamGoogleGeminiCli };
369
+ });
370
+ return googleGeminiCliProviderModulePromise;
371
+ }
372
+
373
+ function loadGoogleVertexProviderModule(): Promise<LazyProviderModule<"google-vertex">> {
374
+ googleVertexProviderModulePromise ||= import("./google-vertex").then(module => {
375
+ const provider = module as GoogleVertexProviderModule;
376
+ return { stream: provider.streamGoogleVertex };
377
+ });
378
+ return googleVertexProviderModulePromise;
379
+ }
380
+
381
+ function loadOpenAICodexResponsesProviderModule(): Promise<LazyProviderModule<"openai-codex-responses">> {
382
+ openAICodexResponsesProviderModulePromise ||= import("./openai-codex-responses").then(module => {
383
+ const provider = module as OpenAICodexResponsesProviderModule;
384
+ return { stream: provider.streamOpenAICodexResponses };
385
+ });
386
+ return openAICodexResponsesProviderModulePromise;
387
+ }
388
+
389
+ function loadOpenAICompletionsProviderModule(): Promise<LazyProviderModule<"openai-completions">> {
390
+ openAICompletionsProviderModulePromise ||= import("./openai-completions").then(module => {
391
+ const provider = module as OpenAICompletionsProviderModule;
392
+ return { stream: provider.streamOpenAICompletions };
393
+ });
394
+ return openAICompletionsProviderModulePromise;
395
+ }
396
+
397
+ function loadOpenAIResponsesProviderModule(): Promise<LazyProviderModule<"openai-responses">> {
398
+ openAIResponsesProviderModulePromise ||= import("./openai-responses").then(module => {
399
+ const provider = module as OpenAIResponsesProviderModule;
400
+ return { stream: provider.streamOpenAIResponses };
401
+ });
402
+ return openAIResponsesProviderModulePromise;
403
+ }
404
+
405
+ function loadOllamaProviderModule(): Promise<LazyProviderModule<"ollama-chat">> {
406
+ ollamaProviderModulePromise ||= import("./ollama").then(module => {
407
+ const provider = module as OllamaProviderModule;
408
+ return { stream: provider.streamOllama };
409
+ });
410
+ return ollamaProviderModulePromise;
411
+ }
412
+
413
+ function loadCursorProviderModule(): Promise<LazyProviderModule<"cursor-agent">> {
414
+ cursorProviderModulePromise ||= import("./cursor").then(module => {
415
+ const provider = module as CursorProviderModule;
416
+ return { stream: provider.streamCursor };
417
+ });
418
+ return cursorProviderModulePromise;
419
+ }
420
+
421
+ function loadDevinProviderModule(): Promise<LazyProviderModule<"devin-agent">> {
422
+ devinProviderModulePromise ||= import("./devin").then(module => {
423
+ const provider = module as DevinProviderModule;
424
+ return { stream: provider.streamDevin };
425
+ });
426
+ return devinProviderModulePromise;
427
+ }
428
+
429
+ function loadBedrockProviderModule(): Promise<LazyProviderModule<"bedrock-converse-stream">> {
430
+ if (bedrockProviderModuleOverride) {
431
+ return Promise.resolve(bedrockProviderModuleOverride);
432
+ }
433
+ bedrockProviderModulePromise ||= import("./amazon-bedrock").then(module => {
434
+ const provider = module as BedrockProviderModule;
435
+ return { stream: provider.streamBedrock };
436
+ });
437
+ return bedrockProviderModulePromise;
438
+ }
439
+
440
+ // ---------------------------------------------------------------------------
441
+ // Lazy stream function exports
442
+ //
443
+ // These use the same names as the direct provider stream functions. When
444
+ // stream.ts is updated to import from this module instead of individual
445
+ // providers, the lazy loading will take effect on the main code path.
446
+ // ---------------------------------------------------------------------------
447
+
448
+ export const streamAnthropic = createLazyStream(loadAnthropicProviderModule, PROVIDER_HANDLED_STREAM_TIMEOUTS);
449
+ export const streamAzureOpenAIResponses = createLazyStream(
450
+ loadAzureOpenAIResponsesProviderModule,
451
+ PROVIDER_HANDLED_STREAM_TIMEOUTS,
452
+ );
453
+ export const streamGoogle = createLazyStream(loadGoogleProviderModule);
454
+ export const streamGoogleGeminiCli = createLazyStream(
455
+ loadGoogleGeminiCliProviderModule,
456
+ GOOGLE_GEMINI_CLI_LAZY_STREAM_LIMITS,
457
+ );
458
+ export const streamGoogleVertex = createLazyStream(loadGoogleVertexProviderModule);
459
+ export const streamOpenAICodexResponses = createLazyStream(
460
+ loadOpenAICodexResponsesProviderModule,
461
+ PROVIDER_HANDLED_STREAM_TIMEOUTS,
462
+ );
463
+ export const streamOpenAICompletions = createLazyStream(
464
+ loadOpenAICompletionsProviderModule,
465
+ PROVIDER_HANDLED_STREAM_TIMEOUTS,
466
+ );
467
+ export const streamOpenAIResponses = createLazyStream(
468
+ loadOpenAIResponsesProviderModule,
469
+ PROVIDER_HANDLED_STREAM_TIMEOUTS,
470
+ );
471
+ export const streamCursor = createLazyStream(loadCursorProviderModule);
472
+ export const streamDevin = createLazyStream(loadDevinProviderModule);
473
+ export const streamOllama = createLazyStream(loadOllamaProviderModule, OPENAI_IDLE_FLOORED_LAZY_STREAM_LIMITS);
474
+
475
+ export const streamBedrock = createLazyStream(loadBedrockProviderModule);
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Synthetic provider - wraps OpenAI or Anthropic API based on format setting.
3
+ *
4
+ * Synthetic offers both OpenAI-compatible and Anthropic-compatible APIs:
5
+ * - OpenAI: https://api.synthetic.new/openai/v1/chat/completions
6
+ * - Anthropic: https://api.synthetic.new/anthropic/v1/messages
7
+ *
8
+ * @see https://dev.synthetic.new/docs/api/overview
9
+ */
10
+
11
+ import type { Api, Context, Model } from "../types";
12
+ import type { AssistantMessageEventStream } from "../utils/event-stream";
13
+ import {
14
+ type OpenAIAnthropicApiFormat,
15
+ type OpenAIAnthropicShimOptions,
16
+ streamOpenAIAnthropicShim,
17
+ } from "./openai-anthropic-shim";
18
+
19
+ export type SyntheticApiFormat = OpenAIAnthropicApiFormat;
20
+
21
+ const SYNTHETIC_NEW_BASE_URL = "https://api.synthetic.new/openai/v1";
22
+ const SYNTHETIC_NEW_ANTHROPIC_BASE_URL = "https://api.synthetic.new/anthropic";
23
+
24
+ export interface SyntheticOptions extends OpenAIAnthropicShimOptions {
25
+ /** API format: "openai" or "anthropic". Default: "openai" */
26
+ format?: SyntheticApiFormat;
27
+ }
28
+
29
+ /**
30
+ * Stream from Synthetic, routing to either OpenAI or Anthropic API based on format.
31
+ * Returns synchronously like other providers - async processing happens internally.
32
+ */
33
+ export function streamSynthetic(
34
+ model: Model<"openai-completions">,
35
+ context: Context,
36
+ options?: SyntheticOptions,
37
+ ): AssistantMessageEventStream {
38
+ return streamOpenAIAnthropicShim(model, context, options, {
39
+ anthropicBaseUrl: SYNTHETIC_NEW_ANTHROPIC_BASE_URL,
40
+ openaiBaseUrl: SYNTHETIC_NEW_BASE_URL,
41
+ defaultFormat: "openai",
42
+ });
43
+ }
44
+
45
+ /**
46
+ * Check if a model is a Synthetic model.
47
+ */
48
+ export function isSyntheticModel(model: Model<Api>): boolean {
49
+ return model.provider === "synthetic";
50
+ }