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,4 @@
1
+ import type { CredentialRankingStrategy, UsageProvider, UsageReport } from "../usage";
2
+ export declare function parseClaudeRateLimitHeaders(headers: Record<string, string>, now?: number): UsageReport | null;
3
+ export declare const claudeUsageProvider: UsageProvider;
4
+ export declare const claudeRankingStrategy: CredentialRankingStrategy;
@@ -0,0 +1,2 @@
1
+ import type { UsageProvider } from "../usage";
2
+ export declare const googleGeminiCliUsageProvider: UsageProvider;
@@ -0,0 +1,7 @@
1
+ /**
2
+ * GitHub Copilot usage provider.
3
+ *
4
+ * Normalizes Copilot quota usage into the shared UsageReport schema.
5
+ */
6
+ import type { UsageProvider } from "../usage";
7
+ export declare const githubCopilotUsageProvider: UsageProvider;
@@ -0,0 +1,15 @@
1
+ import type { CredentialRankingStrategy, UsageProvider } from "../usage";
2
+ export declare const antigravityUsageProvider: UsageProvider;
3
+ /**
4
+ * Antigravity quotas are returned per backend counter (Anthropic / Google /
5
+ * OpenAI) and can include both daily and weekly windows. `fetchAntigravityUsage`
6
+ * sorts `limits` ascending by `remainingFraction`; after model-family scoping,
7
+ * the most-pressured relevant counter/window is index 0.
8
+ *
9
+ * Leave `secondary` unset: AuthStorage compares secondary metrics before
10
+ * primary metrics, which is correct for providers with a fixed short/long
11
+ * split but wrong here. Ranking Antigravity by the bottleneck counter first
12
+ * avoids preferring an account at 95% Gemini daily / 0% Claude weekly over one
13
+ * with healthier Gemini headroom.
14
+ */
15
+ export declare const antigravityRankingStrategy: CredentialRankingStrategy;
@@ -0,0 +1,2 @@
1
+ import type { UsageProvider } from "../usage";
2
+ export declare const kimiUsageProvider: UsageProvider;
@@ -0,0 +1,2 @@
1
+ import type { UsageProvider } from "../usage";
2
+ export declare const minimaxCodeUsageProvider: UsageProvider;
@@ -0,0 +1,5 @@
1
+ import type { UsageProvider } from "../usage";
2
+ /** Registers Ollama accounts with usage views even though no quota endpoint is exposed. */
3
+ export declare const ollamaUsageProvider: UsageProvider;
4
+ /** Registers Ollama Cloud accounts with usage views until a quota endpoint is available. */
5
+ export declare const ollamaCloudUsageProvider: UsageProvider;
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Resolve the base URL for ChatGPT account-API requests (`wham/usage`,
3
+ * `wham/rate-limit-reset-credits`).
4
+ *
5
+ * These endpoints live on the canonical ChatGPT origin and authenticate with
6
+ * the Codex OAuth bearer minted for that origin. They are NOT part of the
7
+ * `/responses` API surface that streaming proxies (Headroom, 9router, etc.)
8
+ * forward, so a `providers.openai-codex.baseUrl` override pointed at such a
9
+ * proxy MUST NOT be used here — doing so 404s and silently breaks
10
+ * `/usage show` (issue #3679).
11
+ *
12
+ * Accepted overrides are the canonical `chatgpt.com` / `chat.openai.com`
13
+ * origins. Any extra path (e.g. a streaming override like
14
+ * `/backend-api/codex/responses`) is normalized to `${origin}/backend-api`,
15
+ * since the account endpoints always live directly under `/backend-api`. Any
16
+ * other host falls back to {@link CODEX_BASE_URL}.
17
+ */
18
+ export declare function normalizeCodexBaseUrl(baseUrl?: string): string;
@@ -0,0 +1,79 @@
1
+ /**
2
+ * OpenAI Codex "saved rate limit reset" redemption client.
3
+ *
4
+ * OpenAI lets paid Codex accounts bank a usage-window reset and spend it on
5
+ * demand (announced 2026-06-11). The count is surfaced on `/wham/usage` as
6
+ * `rate_limit_reset_credits.available_count` (see `./openai-codex.ts`), but the
7
+ * actual credit objects and the redeem action live on two dedicated routes:
8
+ *
9
+ * GET /wham/rate-limit-reset-credits → list redeemable credits
10
+ * POST /wham/rate-limit-reset-credits/consume → spend one credit
11
+ * body: { credit_id, redeem_request_id }
12
+ *
13
+ * `redeem_request_id` is a client-generated idempotency key (UUID). The consume
14
+ * response carries a `code`: `"reset"` on success, otherwise a business reason
15
+ * (`already_redeemed`, `no_credit`, `nothing_to_reset`).
16
+ *
17
+ * These are thin, dependency-light functions so both the interactive session
18
+ * (the `/usage reset` command + auto-redeem) and any out-of-band tooling can
19
+ * share one wire contract.
20
+ */
21
+ import type { FetchImpl } from "../types";
22
+ /** A single redeemable (or already-spent) saved reset. */
23
+ export interface CodexResetCredit {
24
+ /** Opaque credit id, e.g. `RateLimitResetCredit_…`. Pass to {@link consumeCodexResetCredit}. */
25
+ id: string;
26
+ /** Backend reset family, e.g. `codex_rate_limits`. */
27
+ resetType?: string;
28
+ /** `available`, `redeemed`, … */
29
+ status?: string;
30
+ grantedAt?: string;
31
+ expiresAt?: string;
32
+ redeemStartedAt?: string | null;
33
+ redeemedAt?: string | null;
34
+ /** Human-facing card title, e.g. "One free rate limit reset". */
35
+ title?: string;
36
+ description?: string;
37
+ }
38
+ /** Result of listing an account's saved resets. */
39
+ export interface CodexResetCreditList {
40
+ credits: CodexResetCredit[];
41
+ /** Backend-reported count of credits redeemable right now. */
42
+ availableCount: number;
43
+ }
44
+ /**
45
+ * Consume outcome `code`. `reset` means a window was actually reset; the others
46
+ * are no-op business outcomes the caller should surface verbatim-ish to the user.
47
+ */
48
+ export type CodexResetConsumeCode = "reset" | "already_redeemed" | "no_credit" | "nothing_to_reset" | (string & {});
49
+ export interface CodexResetConsumeResult {
50
+ /** `true` only when `code === "reset"` (a reset was applied). */
51
+ ok: boolean;
52
+ code: CodexResetConsumeCode;
53
+ /** HTTP status of the consume call (for diagnostics). */
54
+ status: number;
55
+ raw?: unknown;
56
+ }
57
+ interface CodexResetAuth {
58
+ accessToken: string;
59
+ accountId?: string;
60
+ /** Provider base URL override; defaults to the Codex backend. */
61
+ baseUrl?: string;
62
+ fetch: FetchImpl;
63
+ signal?: AbortSignal;
64
+ }
65
+ /**
66
+ * List the account's saved rate-limit resets. Returns `null` on transport/auth
67
+ * failure (non-2xx or thrown), letting callers treat it the same as "no data".
68
+ */
69
+ export declare function listCodexResetCredits(auth: CodexResetAuth): Promise<CodexResetCreditList | null>;
70
+ /**
71
+ * Spend one saved reset. `redeemRequestId` is the idempotency key; one is
72
+ * generated when omitted, so retrying with the SAME id is safe and won't
73
+ * double-spend. The returned `code` is `"reset"` on success.
74
+ */
75
+ export declare function consumeCodexResetCredit(auth: CodexResetAuth & {
76
+ creditId: string;
77
+ redeemRequestId?: string;
78
+ }): Promise<CodexResetConsumeResult>;
79
+ export {};
@@ -0,0 +1,3 @@
1
+ import type { CredentialRankingStrategy, UsageProvider } from "../usage";
2
+ export declare const openaiCodexUsageProvider: UsageProvider;
3
+ export declare const codexRankingStrategy: CredentialRankingStrategy;
@@ -0,0 +1,2 @@
1
+ import type { UsageProvider } from "../usage";
2
+ export declare const opencodeGoUsageProvider: UsageProvider;
@@ -0,0 +1 @@
1
+ export declare const toNumber: (value: unknown) => number | undefined;
@@ -0,0 +1,2 @@
1
+ import type { UsageProvider } from "../usage";
2
+ export declare const zaiUsageProvider: UsageProvider;
@@ -0,0 +1,346 @@
1
+ import type { FetchImpl, Provider } from "./types";
2
+ export type UsageUnit = "percent" | "tokens" | "requests" | "usd" | "minutes" | "bytes" | "unknown";
3
+ export type UsageStatus = "ok" | "warning" | "exhausted" | "unknown";
4
+ /** Time window for a limit (e.g. 5h, 7d, monthly). */
5
+ export interface UsageWindow {
6
+ /** Stable identifier (e.g. "5h", "7d", "monthly"). */
7
+ id: string;
8
+ /** Human label (e.g. "5 Hour", "7 Day"). */
9
+ label: string;
10
+ /** Window duration in milliseconds, when known. */
11
+ durationMs?: number;
12
+ /** Absolute reset timestamp in milliseconds since epoch. */
13
+ resetsAt?: number;
14
+ }
15
+ /** Quantitative usage data. */
16
+ export interface UsageAmount {
17
+ /** Amount used in the given unit. */
18
+ used?: number;
19
+ /** Maximum limit in the given unit. */
20
+ limit?: number;
21
+ /** Remaining amount in the given unit. */
22
+ remaining?: number;
23
+ /** Fraction used (0..1). */
24
+ usedFraction?: number;
25
+ /** Fraction remaining (0..1). */
26
+ remainingFraction?: number;
27
+ /** Unit for the amounts (percent, tokens, etc.). */
28
+ unit: UsageUnit;
29
+ }
30
+ /** Scope metadata describing what the limit applies to. */
31
+ export interface UsageScope {
32
+ provider: Provider;
33
+ accountId?: string;
34
+ projectId?: string;
35
+ orgId?: string;
36
+ modelId?: string;
37
+ tier?: string;
38
+ windowId?: string;
39
+ shared?: boolean;
40
+ }
41
+ /** Normalized limit entry for a single window or quota bucket. */
42
+ export interface UsageLimit {
43
+ /** Stable identifier for this limit entry. */
44
+ id: string;
45
+ /** Human label for display. */
46
+ label: string;
47
+ scope: UsageScope;
48
+ window?: UsageWindow;
49
+ amount: UsageAmount;
50
+ status?: UsageStatus;
51
+ notes?: string[];
52
+ }
53
+ /**
54
+ * Per-credit detail for a saved/banked rate-limit reset.
55
+ *
56
+ * Populated when the provider's listing endpoint returns individual credit
57
+ * metadata (e.g. OpenAI Codex `wham/rate-limit-reset-credits`). Callers that
58
+ * only need the count can ignore this; display layers use `expiresAt` to show
59
+ * when banked resets expire ([#3339](https://github.com/can1357/oh-my-pi/issues/3339)).
60
+ */
61
+ export interface UsageResetCreditDetail {
62
+ /** ISO timestamp when the credit was granted. */
63
+ grantedAt?: string;
64
+ /** ISO timestamp when the credit expires and can no longer be redeemed. */
65
+ expiresAt?: string;
66
+ /** Backend status, e.g. `available`, `redeemed`. */
67
+ status?: string;
68
+ }
69
+ /**
70
+ * Saved/banked rate-limit resets an account can redeem on demand.
71
+ *
72
+ * Surfaced by providers that let users defer a usage-window reset and spend it
73
+ * later (OpenAI Codex "saved rate limit resets"). The redeem itself is a
74
+ * separate, provider-specific action; this is the read-only count for display.
75
+ */
76
+ export interface UsageResetCredits {
77
+ /** Number of resets available to redeem right now. */
78
+ availableCount: number;
79
+ /** Individual credit details (expiry dates, etc.) when the provider exposes them. */
80
+ credits?: UsageResetCreditDetail[];
81
+ }
82
+ /** Aggregated usage report for a provider. */
83
+ export interface UsageReport {
84
+ provider: Provider;
85
+ fetchedAt: number;
86
+ limits: UsageLimit[];
87
+ /** Saved rate-limit resets the account can redeem, when the provider reports them. */
88
+ resetCredits?: UsageResetCredits;
89
+ /**
90
+ * Provider-wide disclaimers shown once above per-account sections.
91
+ * Use this for caveats that apply to every limit (e.g. "OMP-observed
92
+ * spend only"). Per-limit notes that differ per window (e.g. "Overage
93
+ * requests: N") stay on {@link UsageLimit.notes}.
94
+ */
95
+ notes?: string[];
96
+ metadata?: Record<string, unknown>;
97
+ raw?: unknown;
98
+ }
99
+ /**
100
+ * Resolve a limit's used fraction (0..1; >1 means overage) from whichever
101
+ * amount fields the provider populated. Precedence mirrors the usage UIs:
102
+ * explicit fraction > used/limit > percent-unit used > inverted remaining.
103
+ */
104
+ export declare function resolveUsedFraction(limit: UsageLimit): number | undefined;
105
+ /**
106
+ * One recorded usage-limit snapshot: a single limit window of one account at
107
+ * a point in time. The usage cache itself is latest-snapshot-only; history
108
+ * rows are appended by the auth storage layer whenever a fresh report is
109
+ * fetched, so limit utilization stays inspectable over time.
110
+ */
111
+ export interface UsageHistoryEntry {
112
+ /** Epoch ms the report was fetched. */
113
+ recordedAt: number;
114
+ provider: Provider;
115
+ /** Stable credential identity key (account/email/project derived). */
116
+ accountKey: string;
117
+ email?: string;
118
+ accountId?: string;
119
+ /** {@link UsageLimit.id} of the recorded window. */
120
+ limitId: string;
121
+ /** Human label of the limit. */
122
+ label: string;
123
+ windowLabel?: string;
124
+ /** Used fraction (0..1) when resolvable. */
125
+ usedFraction?: number;
126
+ status?: UsageStatus;
127
+ /** Epoch ms the window resets, when known. */
128
+ resetsAt?: number;
129
+ }
130
+ /** Filter for reading recorded usage history. */
131
+ export interface UsageHistoryQuery {
132
+ provider?: string;
133
+ /** Inclusive lower bound on {@link UsageHistoryEntry.recordedAt} (epoch ms). */
134
+ sinceMs?: number;
135
+ }
136
+ /** One observed provider request cost, attributed to the credential that made it. */
137
+ export interface UsageCostHistoryEntry {
138
+ /** Epoch ms the request completed. */
139
+ recordedAt: number;
140
+ provider: Provider;
141
+ /** Stable credential identity key (account/email/project/secret derived). */
142
+ accountKey: string;
143
+ /** Estimated request cost in USD. */
144
+ costUsd: number;
145
+ }
146
+ /** Filter for reading observed request costs. */
147
+ export interface UsageCostHistoryQuery {
148
+ provider?: string;
149
+ accountKey?: string;
150
+ /** Inclusive lower bound on {@link UsageCostHistoryEntry.recordedAt} (epoch ms). */
151
+ sinceMs?: number;
152
+ }
153
+ export declare const usageUnitSchema: import("arktype/internal/variants/string.ts").StringType<"bytes" | "minutes" | "percent" | "requests" | "tokens" | "unknown" | "usd", {}>;
154
+ export declare const usageStatusSchema: import("arktype/internal/variants/string.ts").StringType<"exhausted" | "ok" | "unknown" | "warning", {}>;
155
+ export declare const usageWindowSchema: import("arktype/internal/variants/object.ts").ObjectType<{
156
+ id: string;
157
+ label: string;
158
+ durationMs?: number | undefined;
159
+ resetsAt?: number | undefined;
160
+ }, {}>;
161
+ export declare const usageAmountSchema: import("arktype/internal/variants/object.ts").ObjectType<{
162
+ used?: number | undefined;
163
+ limit?: number | undefined;
164
+ remaining?: number | undefined;
165
+ usedFraction?: number | undefined;
166
+ remainingFraction?: number | undefined;
167
+ unit: "bytes" | "minutes" | "percent" | "requests" | "tokens" | "unknown" | "usd";
168
+ }, {}>;
169
+ export declare const usageScopeSchema: import("arktype/internal/variants/object.ts").ObjectType<{
170
+ provider: string;
171
+ accountId?: string | undefined;
172
+ projectId?: string | undefined;
173
+ orgId?: string | undefined;
174
+ modelId?: string | undefined;
175
+ tier?: string | undefined;
176
+ windowId?: string | undefined;
177
+ shared?: boolean | undefined;
178
+ }, {}>;
179
+ export declare const usageLimitSchema: import("arktype/internal/variants/object.ts").ObjectType<{
180
+ id: string;
181
+ label: string;
182
+ scope: {
183
+ provider: string;
184
+ accountId?: string | undefined;
185
+ projectId?: string | undefined;
186
+ orgId?: string | undefined;
187
+ modelId?: string | undefined;
188
+ tier?: string | undefined;
189
+ windowId?: string | undefined;
190
+ shared?: boolean | undefined;
191
+ };
192
+ window?: {
193
+ id: string;
194
+ label: string;
195
+ durationMs?: number | undefined;
196
+ resetsAt?: number | undefined;
197
+ } | undefined;
198
+ amount: {
199
+ used?: number | undefined;
200
+ limit?: number | undefined;
201
+ remaining?: number | undefined;
202
+ usedFraction?: number | undefined;
203
+ remainingFraction?: number | undefined;
204
+ unit: "bytes" | "minutes" | "percent" | "requests" | "tokens" | "unknown" | "usd";
205
+ };
206
+ status?: "exhausted" | "ok" | "unknown" | "warning" | undefined;
207
+ notes?: string[] | undefined;
208
+ }, {}>;
209
+ export declare const usageResetCreditDetailSchema: import("arktype/internal/variants/object.ts").ObjectType<{
210
+ grantedAt?: string | undefined;
211
+ expiresAt?: string | undefined;
212
+ status?: string | undefined;
213
+ }, {}>;
214
+ export declare const usageResetCreditsSchema: import("arktype/internal/variants/object.ts").ObjectType<{
215
+ availableCount: number;
216
+ credits?: {
217
+ grantedAt?: string | undefined;
218
+ expiresAt?: string | undefined;
219
+ status?: string | undefined;
220
+ }[] | undefined;
221
+ }, {}>;
222
+ export declare const usageReportSchema: import("arktype/internal/variants/object.ts").ObjectType<{
223
+ provider: string;
224
+ fetchedAt: number;
225
+ limits: {
226
+ id: string;
227
+ label: string;
228
+ scope: {
229
+ provider: string;
230
+ accountId?: string | undefined;
231
+ projectId?: string | undefined;
232
+ orgId?: string | undefined;
233
+ modelId?: string | undefined;
234
+ tier?: string | undefined;
235
+ windowId?: string | undefined;
236
+ shared?: boolean | undefined;
237
+ };
238
+ window?: {
239
+ id: string;
240
+ label: string;
241
+ durationMs?: number | undefined;
242
+ resetsAt?: number | undefined;
243
+ } | undefined;
244
+ amount: {
245
+ used?: number | undefined;
246
+ limit?: number | undefined;
247
+ remaining?: number | undefined;
248
+ usedFraction?: number | undefined;
249
+ remainingFraction?: number | undefined;
250
+ unit: "bytes" | "minutes" | "percent" | "requests" | "tokens" | "unknown" | "usd";
251
+ };
252
+ status?: "exhausted" | "ok" | "unknown" | "warning" | undefined;
253
+ notes?: string[] | undefined;
254
+ }[];
255
+ resetCredits?: {
256
+ availableCount: number;
257
+ credits?: {
258
+ grantedAt?: string | undefined;
259
+ expiresAt?: string | undefined;
260
+ status?: string | undefined;
261
+ }[] | undefined;
262
+ } | undefined;
263
+ notes?: string[] | undefined;
264
+ metadata?: {
265
+ [x: string]: unknown;
266
+ } | undefined;
267
+ raw?: unknown;
268
+ }, {}>;
269
+ /** Optional logger for usage fetchers. */
270
+ export interface UsageLogger {
271
+ debug(message: string, meta?: Record<string, unknown>): void;
272
+ warn(message: string, meta?: Record<string, unknown>): void;
273
+ }
274
+ /** Credential bundle for usage endpoints. */
275
+ export interface UsageCredential {
276
+ type: "api_key" | "oauth";
277
+ apiKey?: string;
278
+ accessToken?: string;
279
+ refreshToken?: string;
280
+ expiresAt?: number;
281
+ accountId?: string;
282
+ projectId?: string;
283
+ email?: string;
284
+ enterpriseUrl?: string;
285
+ metadata?: Record<string, unknown>;
286
+ apiEndpoint?: string;
287
+ }
288
+ /** Parameters provided to a usage fetcher. */
289
+ export interface UsageFetchParams {
290
+ provider: Provider;
291
+ credential: UsageCredential;
292
+ /** Stable credential identity key derived by the auth storage layer. */
293
+ accountKey?: string;
294
+ baseUrl?: string;
295
+ signal?: AbortSignal;
296
+ }
297
+ /** Shared runtime utilities for fetchers. */
298
+ export interface UsageFetchContext {
299
+ fetch: FetchImpl;
300
+ logger?: UsageLogger;
301
+ retryWait?: (delayMs: number, signal?: AbortSignal) => Promise<void>;
302
+ /** Observed request-cost history for providers without upstream usage APIs. */
303
+ listUsageCosts?: (query?: UsageCostHistoryQuery) => UsageCostHistoryEntry[];
304
+ }
305
+ /** Provider implementation for fetching usage information. */
306
+ export interface UsageProvider {
307
+ id: Provider;
308
+ fetchUsage(params: UsageFetchParams, ctx: UsageFetchContext): Promise<UsageReport | null>;
309
+ /** Parse provider rate-limit response headers (lowercased keys) into a usage report, if supported. */
310
+ parseRateLimitHeaders?(headers: Record<string, string>, now?: number): UsageReport | null;
311
+ supports?(params: UsageFetchParams): boolean;
312
+ /** True when fetchUsage contacts upstream and can authenticate the credential for health checks. */
313
+ validatesCredentials?: boolean;
314
+ }
315
+ /** Request context used when ranking usage for a specific model. */
316
+ export interface CredentialRankingContext {
317
+ /** Provider model id, when the caller is selecting a credential for one model. */
318
+ modelId?: string;
319
+ }
320
+ /** Strategy for usage-based credential ranking. Providers implement this to opt into smart credential selection. */
321
+ export interface CredentialRankingStrategy {
322
+ /** Extract the primary (short) and secondary (long) window limits from a usage report. */
323
+ findWindowLimits(report: UsageReport, context?: CredentialRankingContext): {
324
+ primary?: UsageLimit;
325
+ secondary?: UsageLimit;
326
+ };
327
+ /**
328
+ * Restrict limits to the ones relevant for the requested model before
329
+ * credential-wide exhaustion checks and ranking. Providers with shared
330
+ * account-wide quotas can omit this and use all limits.
331
+ */
332
+ scopeLimits?(report: UsageReport, context?: CredentialRankingContext): UsageLimit[];
333
+ /**
334
+ * Return a provider-local backoff scope for the requested model. Providers
335
+ * with backend-specific quotas use this so one exhausted model family does
336
+ * not block unrelated families on the same OAuth credential.
337
+ */
338
+ blockScope?(context?: CredentialRankingContext): string | undefined;
339
+ /** Fallback window durations (ms) when limits don't specify durationMs. */
340
+ windowDefaults: {
341
+ primaryMs: number;
342
+ secondaryMs: number;
343
+ };
344
+ /** Optional: priority boost for specific credential states (e.g., fresh 5h ticker start). */
345
+ hasPriorityBoost?(primary: UsageLimit | undefined): boolean;
346
+ }
@@ -0,0 +1,25 @@
1
+ export interface AbortSourceTracker {
2
+ requestAbortController: AbortController;
3
+ requestSignal: AbortSignal;
4
+ abortLocally(reason: Error): Error;
5
+ getLocalAbortReason(): Error | undefined;
6
+ wasCallerAbort(): boolean;
7
+ }
8
+ /**
9
+ * Tracks whether a merged request signal was aborted by the caller or by provider-local logic.
10
+ *
11
+ * Caller aborts always take priority. When both the caller and a local watchdog fire near
12
+ * each other, the merged `requestSignal.reason` reflects whichever AbortController called
13
+ * `.abort()` first — but ordering is racy and not meaningful for upstream consumers. What
14
+ * matters is intent: if the caller's signal aborted, the request was cancelled by the
15
+ * caller, and any local watchdog reason is incidental and **MUST NOT** be surfaced as a
16
+ * retryable transient error (which would cause auto-retry to re-enter streaming and leave
17
+ * the UI showing a spinner the user already tried to cancel).
18
+ */
19
+ export declare function createAbortSourceTracker(callerSignal?: AbortSignal): AbortSourceTracker;
20
+ /**
21
+ * Race a shared promise against a caller's AbortSignal without coupling the
22
+ * underlying work to that signal. The shared promise keeps running (and caches
23
+ * its result) even when an individual caller bails out.
24
+ */
25
+ export declare function raceWithSignal<T>(promise: Promise<T>, signal: AbortSignal | undefined): Promise<T>;
@@ -0,0 +1,35 @@
1
+ /** Auth configuration for Anthropic */
2
+ export interface AnthropicAuthConfig {
3
+ apiKey: string;
4
+ baseUrl: string;
5
+ isOAuth: boolean;
6
+ }
7
+ export declare function resolveAnthropicBaseUrlFromEnv(): string | undefined;
8
+ /**
9
+ * Checks if a token is an OAuth token by looking for sk-ant-oat prefix.
10
+ */
11
+ export declare function isOAuthToken(apiKey: string): boolean;
12
+ /**
13
+ * Build an {@link AnthropicAuthConfig} from an already-resolved API key.
14
+ *
15
+ * `apiKey` is whatever the caller chose for `Authorization`/`x-api-key` —
16
+ * usually `authStorage.getApiKey("anthropic")`. `baseUrl` overrides the
17
+ * env-derived base; pass `undefined` to fall back to FOUNDRY/ANTHROPIC env
18
+ * resolution and finally `DEFAULT_BASE_URL`.
19
+ *
20
+ * `isOAuth` is derived from the token prefix so the helper stays pure: callers
21
+ * never have to thread the OAuth flag through their own resolution logic.
22
+ */
23
+ export declare function buildAnthropicAuthConfig(apiKey: string, baseUrl?: string): AnthropicAuthConfig;
24
+ /**
25
+ * Builds HTTP headers for Anthropic API requests (search variant).
26
+ *
27
+ * Forwards `ANTHROPIC_CUSTOM_HEADERS` when the resolver deems them applicable
28
+ * (Foundry mode, or a non-Anthropic base URL — typically an enterprise
29
+ * gateway), matching the streaming path so web search behaves identically.
30
+ */
31
+ export declare function buildAnthropicSearchHeaders(auth: AnthropicAuthConfig): Record<string, string>;
32
+ /**
33
+ * Builds the full API URL for Anthropic messages endpoint.
34
+ */
35
+ export declare function buildAnthropicUrl(auth: AnthropicAuthConfig): string;
@@ -0,0 +1,20 @@
1
+ /** Stores streamed tool-call argument JSON for live renderers and parser recovery. */
2
+ export declare const kStreamingPartialJson: unique symbol;
3
+ /** Carries streamed tool-call argument JSON without exposing a string-keyed property. */
4
+ export type StreamingPartialJsonCarrier = object & {
5
+ [kStreamingPartialJson]?: string;
6
+ };
7
+ /** Reads streamed tool-call argument JSON from a block or event snapshot. */
8
+ export declare function getStreamingPartialJson(block: StreamingPartialJsonCarrier | null | undefined): string | undefined;
9
+ /** Writes streamed tool-call argument JSON to a block or clears it with `undefined`. */
10
+ export declare function setStreamingPartialJson(block: StreamingPartialJsonCarrier, value: string | undefined): void;
11
+ /** Clears streamed tool-call argument JSON without deleting or changing object shape. */
12
+ export declare function clearStreamingPartialJson(block: StreamingPartialJsonCarrier): void;
13
+ /** Stores a provider-local stream block index without exposing a string-keyed property. */
14
+ export declare const kStreamingBlockIndex: unique symbol;
15
+ /** Stores the last parsed argument prefix length for throttled streaming JSON parsing. */
16
+ export declare const kStreamingLastParseLen: unique symbol;
17
+ /** Marks streamed tool-call arguments that already received an authoritative done payload. */
18
+ export declare const kStreamingArgumentsDone: unique symbol;
19
+ /** Classifies Cursor's in-flight tool-call kind without leaking provider-private state. */
20
+ export declare const kStreamingBlockKind: unique symbol;
@@ -0,0 +1,16 @@
1
+ /**
2
+ * A UUID-shaped string: five hex groups in the canonical 8-4-4-4-12 layout.
3
+ *
4
+ * NOT a spec-compliant RFC 4122 UUID — the version/variant nibbles are left as
5
+ * raw hash output — but the shape passes everywhere a UUID string is expected.
6
+ */
7
+ export type DeterministicUuid = `${string}-${string}-${string}-${string}-${string}`;
8
+ /**
9
+ * Format the leading 128 bits of `seed`'s SHA-256 digest as a v4-shape UUID
10
+ * (8-4-4-4-12 hex groups).
11
+ *
12
+ * Deterministic: identical seeds always map to the same id, so callers get
13
+ * stable ids across requests / conversation turns (reusing message-blob ids,
14
+ * keying prompt caches) without persisting a seed→id mapping.
15
+ */
16
+ export declare function deterministicUuid(seed: string): DeterministicUuid;
@@ -0,0 +1,21 @@
1
+ import type { AssistantMessage, Context } from "../types";
2
+ import { AssistantMessageEventStream } from "./event-stream";
3
+ export declare const MAX_EMPTY_COMPLETION_RETRIES = 2;
4
+ export declare const EMPTY_COMPLETION_BASE_DELAY_MS = 500;
5
+ /**
6
+ * Whether a completed assistant message carries content worth delivering: a tool
7
+ * call or any non-whitespace text. An empty/whitespace-only message — or one
8
+ * that only ever produced thinking — is the "empty response" failure.
9
+ */
10
+ export declare function hasVisibleAssistantContent(message: AssistantMessage): boolean;
11
+ interface EmptyCompletionRetryOptions {
12
+ signal?: AbortSignal;
13
+ providerRetryWait?: (delayMs: number, signal?: AbortSignal) => Promise<void>;
14
+ }
15
+ /**
16
+ * Wrap a single-attempt provider stream with bounded empty-completion retries.
17
+ * `attempt` MUST create a fresh request (and its own output message) on each
18
+ * call so a retry never inherits stale metadata from an empty attempt.
19
+ */
20
+ export declare function withEmptyCompletionRetry<M, O extends EmptyCompletionRetryOptions>(model: M, context: Context, options: O | undefined, attempt: (model: M, context: Context, options?: O) => AssistantMessageEventStream): AssistantMessageEventStream;
21
+ export {};
@@ -0,0 +1,30 @@
1
+ import type { AssistantMessage, AssistantMessageEvent } from "../types";
2
+ export declare class EventStream<T, R = T> implements AsyncIterable<T> {
3
+ #private;
4
+ queue: T[];
5
+ waiting: Array<{
6
+ resolve: (value: IteratorResult<T>) => void;
7
+ reject: (err: unknown) => void;
8
+ }>;
9
+ done: boolean;
10
+ /** True once finalResultPromise has been resolved or rejected. */
11
+ resultSettled: boolean;
12
+ finalResultPromise: Promise<R>;
13
+ resolveFinalResult: (result: R) => void;
14
+ rejectFinalResult: (err: unknown) => void;
15
+ isComplete: (event: T) => boolean;
16
+ extractResult: (event: T) => R;
17
+ constructor(isComplete: (event: T) => boolean, extractResult: (event: T) => R);
18
+ push(event: T): void;
19
+ deliver(event: T): void;
20
+ end(result?: R): void;
21
+ endWaiting(): void;
22
+ fail(err: unknown): void;
23
+ [Symbol.asyncIterator](): AsyncIterator<T>;
24
+ result(): Promise<R>;
25
+ }
26
+ export declare class AssistantMessageEventStream extends EventStream<AssistantMessageEvent, AssistantMessage> {
27
+ constructor();
28
+ push(event: AssistantMessageEvent): void;
29
+ end(result?: AssistantMessage): void;
30
+ }