@aryee337/aery-ai 0.2.27 → 0.2.29

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 (417) hide show
  1. package/CHANGELOG.md +2914 -0
  2. package/README.md +614 -813
  3. package/package.json +140 -105
  4. package/src/api-registry.ts +96 -0
  5. package/src/auth-broker/client.ts +358 -0
  6. package/src/auth-broker/index.ts +5 -0
  7. package/src/auth-broker/refresher.ts +117 -0
  8. package/src/auth-broker/remote-store.ts +623 -0
  9. package/src/auth-broker/server.ts +644 -0
  10. package/src/auth-broker/types.ts +127 -0
  11. package/src/auth-broker/wire-schemas.ts +200 -0
  12. package/src/auth-gateway/http.ts +194 -0
  13. package/src/auth-gateway/index.ts +3 -0
  14. package/src/auth-gateway/server.ts +818 -0
  15. package/src/auth-gateway/types.ts +143 -0
  16. package/src/auth-storage.ts +4422 -0
  17. package/src/index.ts +54 -0
  18. package/src/model-cache.ts +129 -0
  19. package/src/model-manager.ts +469 -0
  20. package/src/model-thinking.ts +782 -0
  21. package/src/models.json +83530 -0
  22. package/src/models.json.d.ts +9 -0
  23. package/src/models.ts +56 -0
  24. package/src/prompts/turn-aborted-guidance.md +4 -0
  25. package/src/provider-details.ts +90 -0
  26. package/src/provider-models/bundled-references.ts +38 -0
  27. package/src/provider-models/descriptors.ts +355 -0
  28. package/src/provider-models/google.ts +88 -0
  29. package/src/provider-models/index.ts +5 -0
  30. package/src/provider-models/ollama.ts +153 -0
  31. package/src/provider-models/openai-compat.ts +2817 -0
  32. package/src/provider-models/special.ts +67 -0
  33. package/src/providers/aery-native-client.ts +228 -0
  34. package/src/providers/aery-native-server.ts +212 -0
  35. package/src/providers/amazon-bedrock.ts +873 -0
  36. package/src/providers/anthropic-client.ts +318 -0
  37. package/src/providers/anthropic-messages-server-schema.ts +243 -0
  38. package/src/providers/anthropic-messages-server.ts +683 -0
  39. package/src/providers/anthropic-wire.ts +268 -0
  40. package/src/providers/anthropic.ts +3094 -0
  41. package/src/providers/aws-credentials.ts +501 -0
  42. package/src/providers/aws-eventstream.ts +185 -0
  43. package/src/providers/aws-sigv4.ts +218 -0
  44. package/src/providers/azure-openai-responses.ts +361 -0
  45. package/src/providers/cursor/gen/agent_pb.ts +15274 -0
  46. package/src/providers/cursor/proto/agent.proto +3526 -0
  47. package/src/providers/cursor/proto/buf.gen.yaml +6 -0
  48. package/src/providers/cursor/proto/buf.yaml +17 -0
  49. package/src/providers/cursor.ts +2621 -0
  50. package/src/providers/error-message.ts +21 -0
  51. package/src/providers/github-copilot-headers.ts +140 -0
  52. package/src/providers/gitlab-duo.ts +372 -0
  53. package/src/providers/google-auth.ts +252 -0
  54. package/src/providers/google-gemini-cli.ts +809 -0
  55. package/src/providers/google-gemini-headers.ts +41 -0
  56. package/src/providers/google-shared.ts +917 -0
  57. package/src/providers/google-types.ts +167 -0
  58. package/src/providers/google-vertex.ts +91 -0
  59. package/src/providers/google.ts +41 -0
  60. package/src/providers/grammar.ts +70 -0
  61. package/src/providers/kimi.ts +52 -0
  62. package/src/providers/mock.ts +496 -0
  63. package/src/providers/ollama.ts +644 -0
  64. package/src/providers/openai-anthropic-shim.ts +138 -0
  65. package/src/providers/openai-chat-server-schema.ts +252 -0
  66. package/src/providers/openai-chat-server.ts +647 -0
  67. package/src/providers/openai-codex/constants.ts +43 -0
  68. package/src/providers/openai-codex/request-transformer.ts +161 -0
  69. package/src/providers/openai-codex/response-handler.ts +81 -0
  70. package/src/providers/openai-codex-responses.ts +3018 -0
  71. package/src/providers/openai-completions-compat.ts +300 -0
  72. package/src/providers/openai-completions.ts +1979 -0
  73. package/src/providers/openai-responses-server-schema.ts +290 -0
  74. package/src/providers/openai-responses-server.ts +1183 -0
  75. package/src/providers/openai-responses-shared.ts +873 -0
  76. package/src/providers/openai-responses.ts +679 -0
  77. package/src/providers/register-builtins.ts +436 -0
  78. package/src/providers/synthetic.ts +50 -0
  79. package/src/providers/transform-messages.ts +382 -0
  80. package/src/providers/vision-guard.ts +31 -0
  81. package/src/providers/xai-responses.ts +82 -0
  82. package/src/rate-limit-utils.ts +84 -0
  83. package/src/stream.ts +1065 -0
  84. package/src/types.ts +944 -0
  85. package/src/usage/claude.ts +482 -0
  86. package/src/usage/gemini.ts +250 -0
  87. package/src/usage/github-copilot.ts +421 -0
  88. package/src/usage/google-antigravity.ts +201 -0
  89. package/src/usage/kimi.ts +271 -0
  90. package/src/usage/minimax-code.ts +31 -0
  91. package/src/usage/openai-codex.ts +503 -0
  92. package/src/usage/shared.ts +10 -0
  93. package/src/usage/zai.ts +247 -0
  94. package/src/usage.ts +185 -0
  95. package/src/utils/abort.ts +51 -0
  96. package/src/utils/abortable-iterator.ts +69 -0
  97. package/src/utils/anthropic-auth.ts +93 -0
  98. package/src/utils/discovery/antigravity.ts +261 -0
  99. package/src/utils/discovery/codex.ts +371 -0
  100. package/src/utils/discovery/cursor.ts +306 -0
  101. package/src/utils/discovery/gemini.ts +248 -0
  102. package/src/utils/discovery/index.ts +4 -0
  103. package/src/utils/discovery/openai-compatible.ts +224 -0
  104. package/src/utils/event-stream.ts +142 -0
  105. package/src/utils/fireworks-model-id.ts +30 -0
  106. package/src/utils/foundry.ts +8 -0
  107. package/src/utils/http-inspector.ts +176 -0
  108. package/src/utils/idle-iterator.ts +267 -0
  109. package/src/utils/json-parse.ts +182 -0
  110. package/src/utils/oauth/__tests__/xai-oauth.test.ts +107 -0
  111. package/src/utils/oauth/alibaba-coding-plan.ts +59 -0
  112. package/src/utils/oauth/anthropic.ts +273 -0
  113. package/src/utils/oauth/api-key-login.ts +87 -0
  114. package/src/utils/oauth/api-key-validation.ts +92 -0
  115. package/src/utils/oauth/callback-server.ts +276 -0
  116. package/src/utils/oauth/cerebras.ts +16 -0
  117. package/src/utils/oauth/cloudflare-ai-gateway.ts +48 -0
  118. package/src/utils/oauth/cursor.ts +157 -0
  119. package/src/utils/oauth/deepseek.ts +53 -0
  120. package/src/utils/oauth/firepass.ts +24 -0
  121. package/src/utils/oauth/fireworks.ts +15 -0
  122. package/src/utils/oauth/github-copilot.ts +362 -0
  123. package/src/utils/oauth/gitlab-duo.ts +123 -0
  124. package/src/utils/oauth/google-antigravity.ts +200 -0
  125. package/src/utils/oauth/google-gemini-cli.ts +256 -0
  126. package/src/utils/oauth/google-oauth-shared.ts +110 -0
  127. package/src/utils/oauth/huggingface.ts +62 -0
  128. package/src/utils/oauth/index.ts +484 -0
  129. package/src/utils/oauth/kagi.ts +47 -0
  130. package/src/utils/oauth/kilo.ts +87 -0
  131. package/src/utils/oauth/kimi.ts +254 -0
  132. package/src/utils/oauth/litellm.ts +47 -0
  133. package/src/utils/oauth/lm-studio.ts +38 -0
  134. package/src/utils/oauth/minimax-code.ts +78 -0
  135. package/src/utils/oauth/moonshot.ts +23 -0
  136. package/src/utils/oauth/nanogpt.ts +15 -0
  137. package/src/utils/oauth/nvidia.ts +70 -0
  138. package/src/utils/oauth/oauth.html +203 -0
  139. package/src/utils/oauth/ollama-cloud.ts +28 -0
  140. package/src/utils/oauth/ollama.ts +47 -0
  141. package/src/utils/oauth/openai-codex.ts +299 -0
  142. package/src/utils/oauth/opencode.ts +49 -0
  143. package/src/utils/oauth/openrouter.ts +20 -0
  144. package/src/utils/oauth/parallel.ts +46 -0
  145. package/src/utils/oauth/perplexity.ts +206 -0
  146. package/src/utils/oauth/pkce.ts +18 -0
  147. package/src/utils/oauth/qianfan.ts +58 -0
  148. package/src/utils/oauth/qwen-portal.ts +60 -0
  149. package/src/utils/oauth/synthetic.ts +15 -0
  150. package/src/utils/oauth/tavily.ts +46 -0
  151. package/src/utils/oauth/together.ts +16 -0
  152. package/src/utils/oauth/types.ts +99 -0
  153. package/src/utils/oauth/venice.ts +59 -0
  154. package/src/utils/oauth/vercel-ai-gateway.ts +47 -0
  155. package/src/utils/oauth/vllm.ts +40 -0
  156. package/src/utils/oauth/wafer.ts +50 -0
  157. package/src/utils/oauth/xai-oauth.ts +342 -0
  158. package/src/utils/oauth/xiaomi.ts +139 -0
  159. package/src/utils/oauth/zai.ts +60 -0
  160. package/src/utils/oauth/zenmux.ts +15 -0
  161. package/src/utils/oauth/zhipu.ts +60 -0
  162. package/src/utils/overflow.ts +137 -0
  163. package/src/utils/parse-bind.ts +54 -0
  164. package/src/utils/provider-response.ts +30 -0
  165. package/src/utils/request-debug.ts +336 -0
  166. package/src/utils/retry-after.ts +110 -0
  167. package/src/utils/retry.ts +54 -0
  168. package/src/utils/schema/CONSTRAINTS.md +164 -0
  169. package/src/utils/schema/adapt.ts +36 -0
  170. package/src/utils/schema/compatibility.ts +435 -0
  171. package/src/utils/schema/dereference.ts +98 -0
  172. package/src/utils/schema/draft.ts +341 -0
  173. package/src/utils/schema/equality.ts +97 -0
  174. package/src/utils/schema/fields.ts +191 -0
  175. package/src/utils/schema/index.ts +13 -0
  176. package/src/utils/schema/json-schema-validator.ts +577 -0
  177. package/src/utils/schema/meta-validator.ts +167 -0
  178. package/src/utils/schema/normalize.ts +1588 -0
  179. package/src/utils/schema/spill.ts +43 -0
  180. package/src/utils/schema/stamps.ts +97 -0
  181. package/src/utils/schema/types.ts +10 -0
  182. package/src/utils/schema/wire.ts +293 -0
  183. package/src/utils/schema/zod-decontaminate.ts +331 -0
  184. package/src/utils/sdk-stream-timeout.ts +43 -0
  185. package/src/utils/sse-debug.ts +289 -0
  186. package/src/utils/stream-markup-healing.ts +612 -0
  187. package/src/utils/tool-choice.ts +99 -0
  188. package/src/utils/validation.ts +1024 -0
  189. package/src/utils.ts +166 -0
  190. package/dist/api-registry.d.ts +0 -20
  191. package/dist/api-registry.d.ts.map +0 -1
  192. package/dist/api-registry.js +0 -44
  193. package/dist/api-registry.js.map +0 -1
  194. package/dist/bedrock-provider.d.ts +0 -5
  195. package/dist/bedrock-provider.d.ts.map +0 -1
  196. package/dist/bedrock-provider.js +0 -6
  197. package/dist/bedrock-provider.js.map +0 -1
  198. package/dist/cli.d.ts +0 -3
  199. package/dist/cli.d.ts.map +0 -1
  200. package/dist/cli.js +0 -130
  201. package/dist/cli.js.map +0 -1
  202. package/dist/env-api-keys.d.ts +0 -18
  203. package/dist/env-api-keys.d.ts.map +0 -1
  204. package/dist/env-api-keys.js +0 -178
  205. package/dist/env-api-keys.js.map +0 -1
  206. package/dist/image-models.d.ts +0 -10
  207. package/dist/image-models.d.ts.map +0 -1
  208. package/dist/image-models.generated.d.ts +0 -440
  209. package/dist/image-models.generated.d.ts.map +0 -1
  210. package/dist/image-models.generated.js +0 -442
  211. package/dist/image-models.generated.js.map +0 -1
  212. package/dist/image-models.js +0 -23
  213. package/dist/image-models.js.map +0 -1
  214. package/dist/images-api-registry.d.ts +0 -14
  215. package/dist/images-api-registry.d.ts.map +0 -1
  216. package/dist/images-api-registry.js +0 -22
  217. package/dist/images-api-registry.js.map +0 -1
  218. package/dist/images.d.ts +0 -4
  219. package/dist/images.d.ts.map +0 -1
  220. package/dist/images.js +0 -14
  221. package/dist/images.js.map +0 -1
  222. package/dist/index.d.ts +0 -32
  223. package/dist/index.d.ts.map +0 -1
  224. package/dist/index.js +0 -20
  225. package/dist/index.js.map +0 -1
  226. package/dist/models.d.ts +0 -18
  227. package/dist/models.d.ts.map +0 -1
  228. package/dist/models.generated.d.ts +0 -17707
  229. package/dist/models.generated.d.ts.map +0 -1
  230. package/dist/models.generated.js +0 -16561
  231. package/dist/models.generated.js.map +0 -1
  232. package/dist/models.js +0 -71
  233. package/dist/models.js.map +0 -1
  234. package/dist/oauth.d.ts +0 -2
  235. package/dist/oauth.d.ts.map +0 -1
  236. package/dist/oauth.js +0 -2
  237. package/dist/oauth.js.map +0 -1
  238. package/dist/providers/aery-error-formatting.d.ts +0 -13
  239. package/dist/providers/aery-error-formatting.d.ts.map +0 -1
  240. package/dist/providers/aery-error-formatting.js +0 -112
  241. package/dist/providers/aery-error-formatting.js.map +0 -1
  242. package/dist/providers/amazon-bedrock.d.ts +0 -38
  243. package/dist/providers/amazon-bedrock.d.ts.map +0 -1
  244. package/dist/providers/amazon-bedrock.js +0 -763
  245. package/dist/providers/amazon-bedrock.js.map +0 -1
  246. package/dist/providers/anthropic.d.ts +0 -71
  247. package/dist/providers/anthropic.d.ts.map +0 -1
  248. package/dist/providers/anthropic.js +0 -949
  249. package/dist/providers/anthropic.js.map +0 -1
  250. package/dist/providers/azure-openai-responses.d.ts +0 -15
  251. package/dist/providers/azure-openai-responses.d.ts.map +0 -1
  252. package/dist/providers/azure-openai-responses.js +0 -225
  253. package/dist/providers/azure-openai-responses.js.map +0 -1
  254. package/dist/providers/cloudflare.d.ts +0 -13
  255. package/dist/providers/cloudflare.d.ts.map +0 -1
  256. package/dist/providers/cloudflare.js +0 -26
  257. package/dist/providers/cloudflare.js.map +0 -1
  258. package/dist/providers/faux.d.ts +0 -56
  259. package/dist/providers/faux.d.ts.map +0 -1
  260. package/dist/providers/faux.js +0 -368
  261. package/dist/providers/faux.js.map +0 -1
  262. package/dist/providers/github-copilot-headers.d.ts +0 -8
  263. package/dist/providers/github-copilot-headers.d.ts.map +0 -1
  264. package/dist/providers/github-copilot-headers.js +0 -29
  265. package/dist/providers/github-copilot-headers.js.map +0 -1
  266. package/dist/providers/google-gemini-cli.d.ts +0 -74
  267. package/dist/providers/google-gemini-cli.d.ts.map +0 -1
  268. package/dist/providers/google-gemini-cli.js +0 -779
  269. package/dist/providers/google-gemini-cli.js.map +0 -1
  270. package/dist/providers/google-shared.d.ts +0 -70
  271. package/dist/providers/google-shared.d.ts.map +0 -1
  272. package/dist/providers/google-shared.js +0 -329
  273. package/dist/providers/google-shared.js.map +0 -1
  274. package/dist/providers/google-vertex.d.ts +0 -15
  275. package/dist/providers/google-vertex.d.ts.map +0 -1
  276. package/dist/providers/google-vertex.js +0 -442
  277. package/dist/providers/google-vertex.js.map +0 -1
  278. package/dist/providers/google.d.ts +0 -13
  279. package/dist/providers/google.d.ts.map +0 -1
  280. package/dist/providers/google.js +0 -400
  281. package/dist/providers/google.js.map +0 -1
  282. package/dist/providers/images/openrouter.d.ts +0 -3
  283. package/dist/providers/images/openrouter.d.ts.map +0 -1
  284. package/dist/providers/images/openrouter.js +0 -129
  285. package/dist/providers/images/openrouter.js.map +0 -1
  286. package/dist/providers/images/register-builtins.d.ts +0 -4
  287. package/dist/providers/images/register-builtins.d.ts.map +0 -1
  288. package/dist/providers/images/register-builtins.js +0 -34
  289. package/dist/providers/images/register-builtins.js.map +0 -1
  290. package/dist/providers/mistral.d.ts +0 -25
  291. package/dist/providers/mistral.d.ts.map +0 -1
  292. package/dist/providers/mistral.js +0 -535
  293. package/dist/providers/mistral.js.map +0 -1
  294. package/dist/providers/openai-codex-responses.d.ts +0 -30
  295. package/dist/providers/openai-codex-responses.d.ts.map +0 -1
  296. package/dist/providers/openai-codex-responses.js +0 -1090
  297. package/dist/providers/openai-codex-responses.js.map +0 -1
  298. package/dist/providers/openai-completions.d.ts +0 -19
  299. package/dist/providers/openai-completions.d.ts.map +0 -1
  300. package/dist/providers/openai-completions.js +0 -950
  301. package/dist/providers/openai-completions.js.map +0 -1
  302. package/dist/providers/openai-prompt-cache.d.ts +0 -3
  303. package/dist/providers/openai-prompt-cache.d.ts.map +0 -1
  304. package/dist/providers/openai-prompt-cache.js +0 -10
  305. package/dist/providers/openai-prompt-cache.js.map +0 -1
  306. package/dist/providers/openai-responses-shared.d.ts +0 -18
  307. package/dist/providers/openai-responses-shared.d.ts.map +0 -1
  308. package/dist/providers/openai-responses-shared.js +0 -492
  309. package/dist/providers/openai-responses-shared.js.map +0 -1
  310. package/dist/providers/openai-responses.d.ts +0 -13
  311. package/dist/providers/openai-responses.d.ts.map +0 -1
  312. package/dist/providers/openai-responses.js +0 -237
  313. package/dist/providers/openai-responses.js.map +0 -1
  314. package/dist/providers/register-builtins.d.ts +0 -38
  315. package/dist/providers/register-builtins.d.ts.map +0 -1
  316. package/dist/providers/register-builtins.js +0 -278
  317. package/dist/providers/register-builtins.js.map +0 -1
  318. package/dist/providers/simple-options.d.ts +0 -8
  319. package/dist/providers/simple-options.d.ts.map +0 -1
  320. package/dist/providers/simple-options.js +0 -41
  321. package/dist/providers/simple-options.js.map +0 -1
  322. package/dist/providers/transform-messages.d.ts +0 -8
  323. package/dist/providers/transform-messages.d.ts.map +0 -1
  324. package/dist/providers/transform-messages.js +0 -184
  325. package/dist/providers/transform-messages.js.map +0 -1
  326. package/dist/session-resources.d.ts +0 -4
  327. package/dist/session-resources.d.ts.map +0 -1
  328. package/dist/session-resources.js +0 -22
  329. package/dist/session-resources.js.map +0 -1
  330. package/dist/stream.d.ts +0 -8
  331. package/dist/stream.d.ts.map +0 -1
  332. package/dist/stream.js +0 -27
  333. package/dist/stream.js.map +0 -1
  334. package/dist/types.d.ts +0 -498
  335. package/dist/types.d.ts.map +0 -1
  336. package/dist/types.js +0 -2
  337. package/dist/types.js.map +0 -1
  338. package/dist/utils/diagnostics.d.ts +0 -19
  339. package/dist/utils/diagnostics.d.ts.map +0 -1
  340. package/dist/utils/diagnostics.js +0 -25
  341. package/dist/utils/diagnostics.js.map +0 -1
  342. package/dist/utils/event-stream.d.ts +0 -21
  343. package/dist/utils/event-stream.d.ts.map +0 -1
  344. package/dist/utils/event-stream.js +0 -81
  345. package/dist/utils/event-stream.js.map +0 -1
  346. package/dist/utils/hash.d.ts +0 -3
  347. package/dist/utils/hash.d.ts.map +0 -1
  348. package/dist/utils/hash.js +0 -14
  349. package/dist/utils/hash.js.map +0 -1
  350. package/dist/utils/headers.d.ts +0 -2
  351. package/dist/utils/headers.d.ts.map +0 -1
  352. package/dist/utils/headers.js +0 -8
  353. package/dist/utils/headers.js.map +0 -1
  354. package/dist/utils/json-parse.d.ts +0 -16
  355. package/dist/utils/json-parse.d.ts.map +0 -1
  356. package/dist/utils/json-parse.js +0 -113
  357. package/dist/utils/json-parse.js.map +0 -1
  358. package/dist/utils/node-http-proxy.d.ts +0 -10
  359. package/dist/utils/node-http-proxy.d.ts.map +0 -1
  360. package/dist/utils/node-http-proxy.js +0 -97
  361. package/dist/utils/node-http-proxy.js.map +0 -1
  362. package/dist/utils/oauth/anthropic.d.ts +0 -25
  363. package/dist/utils/oauth/anthropic.d.ts.map +0 -1
  364. package/dist/utils/oauth/anthropic.js +0 -335
  365. package/dist/utils/oauth/anthropic.js.map +0 -1
  366. package/dist/utils/oauth/device-code.d.ts +0 -19
  367. package/dist/utils/oauth/device-code.d.ts.map +0 -1
  368. package/dist/utils/oauth/device-code.js +0 -55
  369. package/dist/utils/oauth/device-code.js.map +0 -1
  370. package/dist/utils/oauth/github-copilot.d.ts +0 -30
  371. package/dist/utils/oauth/github-copilot.d.ts.map +0 -1
  372. package/dist/utils/oauth/github-copilot.js +0 -268
  373. package/dist/utils/oauth/github-copilot.js.map +0 -1
  374. package/dist/utils/oauth/google-antigravity.d.ts +0 -26
  375. package/dist/utils/oauth/google-antigravity.d.ts.map +0 -1
  376. package/dist/utils/oauth/google-antigravity.js +0 -377
  377. package/dist/utils/oauth/google-antigravity.js.map +0 -1
  378. package/dist/utils/oauth/google-gemini-cli.d.ts +0 -26
  379. package/dist/utils/oauth/google-gemini-cli.d.ts.map +0 -1
  380. package/dist/utils/oauth/google-gemini-cli.js +0 -482
  381. package/dist/utils/oauth/google-gemini-cli.js.map +0 -1
  382. package/dist/utils/oauth/index.d.ts +0 -63
  383. package/dist/utils/oauth/index.d.ts.map +0 -1
  384. package/dist/utils/oauth/index.js +0 -131
  385. package/dist/utils/oauth/index.js.map +0 -1
  386. package/dist/utils/oauth/oauth-page.d.ts +0 -3
  387. package/dist/utils/oauth/oauth-page.d.ts.map +0 -1
  388. package/dist/utils/oauth/oauth-page.js +0 -105
  389. package/dist/utils/oauth/oauth-page.js.map +0 -1
  390. package/dist/utils/oauth/openai-codex.d.ts +0 -34
  391. package/dist/utils/oauth/openai-codex.d.ts.map +0 -1
  392. package/dist/utils/oauth/openai-codex.js +0 -385
  393. package/dist/utils/oauth/openai-codex.js.map +0 -1
  394. package/dist/utils/oauth/pkce.d.ts +0 -13
  395. package/dist/utils/oauth/pkce.d.ts.map +0 -1
  396. package/dist/utils/oauth/pkce.js +0 -31
  397. package/dist/utils/oauth/pkce.js.map +0 -1
  398. package/dist/utils/oauth/types.d.ts +0 -64
  399. package/dist/utils/oauth/types.d.ts.map +0 -1
  400. package/dist/utils/oauth/types.js +0 -2
  401. package/dist/utils/oauth/types.js.map +0 -1
  402. package/dist/utils/overflow.d.ts +0 -56
  403. package/dist/utils/overflow.d.ts.map +0 -1
  404. package/dist/utils/overflow.js +0 -151
  405. package/dist/utils/overflow.js.map +0 -1
  406. package/dist/utils/sanitize-unicode.d.ts +0 -22
  407. package/dist/utils/sanitize-unicode.d.ts.map +0 -1
  408. package/dist/utils/sanitize-unicode.js +0 -26
  409. package/dist/utils/sanitize-unicode.js.map +0 -1
  410. package/dist/utils/typebox-helpers.d.ts +0 -17
  411. package/dist/utils/typebox-helpers.d.ts.map +0 -1
  412. package/dist/utils/typebox-helpers.js +0 -21
  413. package/dist/utils/typebox-helpers.js.map +0 -1
  414. package/dist/utils/validation.d.ts +0 -18
  415. package/dist/utils/validation.d.ts.map +0 -1
  416. package/dist/utils/validation.js +0 -281
  417. package/dist/utils/validation.js.map +0 -1
@@ -0,0 +1,201 @@
1
+ import { getAntigravityUserAgent } from "../providers/google-gemini-headers";
2
+ import type {
3
+ UsageAmount,
4
+ UsageFetchContext,
5
+ UsageFetchParams,
6
+ UsageLimit,
7
+ UsageProvider,
8
+ UsageReport,
9
+ UsageStatus,
10
+ UsageWindow,
11
+ } from "../usage";
12
+
13
+ // (Refresh is the sole responsibility of AuthStorage; no provider-direct refresh here.)
14
+
15
+ interface AntigravityQuotaInfo {
16
+ remainingFraction?: number;
17
+ resetTime?: string;
18
+ tier?: string;
19
+ windowId?: string;
20
+ windowLabel?: string;
21
+ }
22
+
23
+ interface AntigravityModelInfo {
24
+ displayName?: string;
25
+ quotaInfo?: AntigravityQuotaInfo | AntigravityQuotaInfo[];
26
+ quotaInfos?: AntigravityQuotaInfo[];
27
+ quotaInfoByTier?: Record<string, AntigravityQuotaInfo | AntigravityQuotaInfo[]>;
28
+ }
29
+
30
+ interface AntigravityUsageResponse {
31
+ models: Record<string, AntigravityModelInfo>;
32
+ }
33
+
34
+ const DEFAULT_ENDPOINT = "https://daily-cloudcode-pa.googleapis.com";
35
+ const FETCH_AVAILABLE_MODELS_PATH = "/v1internal:fetchAvailableModels";
36
+
37
+ function clampFraction(value: number | undefined): number | undefined {
38
+ if (value === undefined || !Number.isFinite(value)) return undefined;
39
+ if (value < 0) return 0;
40
+ if (value > 1) return 1;
41
+ return value;
42
+ }
43
+
44
+ function getUsageStatus(remainingFraction: number | undefined): UsageStatus | undefined {
45
+ if (remainingFraction === undefined) return "unknown";
46
+ if (remainingFraction <= 0) return "exhausted";
47
+ if (remainingFraction <= 0.1) return "warning";
48
+ return "ok";
49
+ }
50
+
51
+ function parseWindow(info: AntigravityQuotaInfo): UsageWindow | undefined {
52
+ if (!info.resetTime) return undefined;
53
+ const resetAt = Date.parse(info.resetTime);
54
+ if (!Number.isFinite(resetAt)) return undefined;
55
+ return {
56
+ id: info.windowId ?? "default",
57
+ label: info.windowLabel ?? "Default",
58
+ resetsAt: resetAt,
59
+ };
60
+ }
61
+
62
+ function buildAmount(info: AntigravityQuotaInfo): UsageAmount {
63
+ const remainingFraction = clampFraction(info.remainingFraction);
64
+ const amount: UsageAmount = { unit: "percent" };
65
+ if (remainingFraction === undefined) return amount;
66
+ const usedFraction = clampFraction(1 - remainingFraction);
67
+ amount.remainingFraction = remainingFraction;
68
+ amount.usedFraction = usedFraction;
69
+ amount.remaining = remainingFraction * 100;
70
+ amount.used = usedFraction !== undefined ? usedFraction * 100 : undefined;
71
+ amount.limit = 100;
72
+ return amount;
73
+ }
74
+
75
+ function normalizeQuotaInfos(info: AntigravityModelInfo): AntigravityQuotaInfo[] {
76
+ const results: AntigravityQuotaInfo[] = [];
77
+ const addInfo = (value: AntigravityQuotaInfo, tier?: string) => {
78
+ results.push({ ...value, ...(tier ? { tier } : {}) });
79
+ };
80
+ const addArray = (values?: AntigravityQuotaInfo[]) => {
81
+ if (!values) return;
82
+ for (const value of values) addInfo(value);
83
+ };
84
+
85
+ if (Array.isArray(info.quotaInfo)) {
86
+ addArray(info.quotaInfo);
87
+ } else if (info.quotaInfo) {
88
+ addInfo(info.quotaInfo);
89
+ }
90
+ addArray(info.quotaInfos);
91
+
92
+ if (info.quotaInfoByTier) {
93
+ for (const [tier, value] of Object.entries(info.quotaInfoByTier)) {
94
+ if (Array.isArray(value)) {
95
+ for (const entry of value) addInfo(entry, tier);
96
+ } else if (value) {
97
+ addInfo(value, tier);
98
+ }
99
+ }
100
+ }
101
+
102
+ return results;
103
+ }
104
+
105
+ /**
106
+ * Return the OAuth access token to use against `/v1internal:*`. AuthStorage is
107
+ * the sole refresh authority (broker-aware, single-flighted, rotation-safe);
108
+ * an expired token short-circuits the probe rather than POSTing the broker
109
+ * sentinel back to Google.
110
+ */
111
+ function resolveAccessToken(params: UsageFetchParams): string | undefined {
112
+ const { credential } = params;
113
+ if (!credential.accessToken) return undefined;
114
+ if (credential.expiresAt !== undefined && credential.expiresAt <= Date.now()) {
115
+ return undefined;
116
+ }
117
+ return credential.accessToken;
118
+ }
119
+
120
+ async function fetchAntigravityUsage(params: UsageFetchParams, ctx: UsageFetchContext): Promise<UsageReport | null> {
121
+ const credential = params.credential;
122
+ if (!credential.projectId) return null;
123
+
124
+ const nowMs = Date.now();
125
+
126
+ const accessToken = resolveAccessToken(params);
127
+ if (!accessToken) return null;
128
+
129
+ const baseUrl = params.baseUrl?.replace(/\/+$/, "") || DEFAULT_ENDPOINT;
130
+ const url = `${baseUrl}${FETCH_AVAILABLE_MODELS_PATH}`;
131
+ const response = await ctx.fetch(url, {
132
+ method: "POST",
133
+ headers: {
134
+ Authorization: `Bearer ${accessToken}`,
135
+ "Content-Type": "application/json",
136
+ "User-Agent": getAntigravityUserAgent(),
137
+ },
138
+ body: JSON.stringify({ project: credential.projectId }),
139
+ signal: params.signal,
140
+ });
141
+
142
+ if (!response.ok) {
143
+ ctx.logger?.warn("Antigravity usage fetch failed", {
144
+ status: response.status,
145
+ statusText: response.statusText,
146
+ });
147
+ return null;
148
+ }
149
+
150
+ const data = (await response.json()) as AntigravityUsageResponse;
151
+ const limits: UsageLimit[] = [];
152
+ let earliestReset: number | undefined;
153
+
154
+ for (const [modelId, modelInfo] of Object.entries(data.models ?? {})) {
155
+ const quotaInfos = normalizeQuotaInfos(modelInfo);
156
+ for (const quotaInfo of quotaInfos) {
157
+ const amount = buildAmount(quotaInfo);
158
+ const window = parseWindow(quotaInfo);
159
+ if (window?.resetsAt) {
160
+ earliestReset = earliestReset ? Math.min(earliestReset, window.resetsAt) : window.resetsAt;
161
+ }
162
+ const labelBase = modelInfo.displayName || modelId;
163
+ const label = quotaInfo.tier ? `${labelBase} (${quotaInfo.tier})` : labelBase;
164
+ const windowId = window?.id ?? "default";
165
+ limits.push({
166
+ id: `${modelId}:${quotaInfo.tier ?? "default"}:${windowId}`,
167
+ label,
168
+ scope: {
169
+ provider: params.provider,
170
+ accountId: credential.accountId,
171
+ projectId: credential.projectId,
172
+ modelId,
173
+ tier: quotaInfo.tier,
174
+ windowId,
175
+ },
176
+ window,
177
+ amount,
178
+ status: getUsageStatus(amount.remainingFraction),
179
+ });
180
+ }
181
+ }
182
+
183
+ const report: UsageReport = {
184
+ provider: params.provider,
185
+ fetchedAt: nowMs,
186
+ limits,
187
+ metadata: {
188
+ endpoint: url,
189
+ projectId: credential.projectId,
190
+ },
191
+ raw: data,
192
+ };
193
+
194
+ return report;
195
+ }
196
+
197
+ export const antigravityUsageProvider: UsageProvider = {
198
+ id: "google-antigravity",
199
+ fetchUsage: fetchAntigravityUsage,
200
+ supports: params => params.provider === "google-antigravity",
201
+ };
@@ -0,0 +1,271 @@
1
+ import { $env } from "@aryee337/aery-utils";
2
+ import type {
3
+ UsageAmount,
4
+ UsageFetchContext,
5
+ UsageFetchParams,
6
+ UsageLimit,
7
+ UsageProvider,
8
+ UsageReport,
9
+ UsageStatus,
10
+ UsageWindow,
11
+ } from "../usage";
12
+ import { isRecord } from "../utils";
13
+ import { getKimiCommonHeaders } from "../utils/oauth/kimi";
14
+ // (Refresh is the sole responsibility of AuthStorage; no provider-direct refresh here.)
15
+ import { toNumber } from "./shared";
16
+
17
+ const DEFAULT_BASE_URL = "https://api.kimi.com/coding/v1";
18
+ const USAGE_PATH = "usages";
19
+
20
+ interface KimiUsagePayload {
21
+ usage?: unknown;
22
+ limits?: unknown;
23
+ }
24
+
25
+ type KimiUsageRow = {
26
+ label: string;
27
+ used?: number;
28
+ limit?: number;
29
+ remaining?: number;
30
+ resetsAt?: number;
31
+ window?: UsageWindow;
32
+ };
33
+
34
+ function normalizeBaseUrl(baseUrl?: string): string {
35
+ const envBase = $env.KIMI_CODE_BASE_URL?.trim();
36
+ const candidate = baseUrl?.trim() || envBase || DEFAULT_BASE_URL;
37
+ return candidate.replace(/\/+$/, "");
38
+ }
39
+
40
+ function buildUsageUrl(baseUrl: string): string {
41
+ const normalized = baseUrl.endsWith("/") ? baseUrl : `${baseUrl}/`;
42
+ return `${normalized}${USAGE_PATH}`;
43
+ }
44
+
45
+ function parseResetTime(data: Record<string, unknown>, nowMs: number): number | undefined {
46
+ const timeKeys = ["reset_at", "resetAt", "reset_time", "resetTime"] as const;
47
+ for (const key of timeKeys) {
48
+ const value = data[key];
49
+ if (typeof value === "string" && value.trim()) {
50
+ const parsed = Date.parse(value);
51
+ if (Number.isFinite(parsed)) return parsed;
52
+ }
53
+ if (typeof value === "number" && Number.isFinite(value)) {
54
+ return value > 1_000_000_000_000 ? value : value * 1000;
55
+ }
56
+ }
57
+
58
+ const secondsKeys = ["reset_in", "resetIn", "ttl", "window"] as const;
59
+ for (const key of secondsKeys) {
60
+ const seconds = toNumber(data[key]);
61
+ if (seconds !== undefined) return nowMs + seconds * 1000;
62
+ }
63
+
64
+ return undefined;
65
+ }
66
+
67
+ function formatDurationLabel(duration: number, timeUnit: string): string | undefined {
68
+ const upper = timeUnit.toUpperCase();
69
+ if (upper.includes("MINUTE")) {
70
+ if (duration >= 60 && duration % 60 === 0) return `${duration / 60}h limit`;
71
+ return `${duration}m limit`;
72
+ }
73
+ if (upper.includes("HOUR")) return `${duration}h limit`;
74
+ if (upper.includes("DAY")) return `${duration}d limit`;
75
+ if (upper.includes("SECOND")) return `${duration}s limit`;
76
+ return undefined;
77
+ }
78
+
79
+ function buildWindow(windowData: Record<string, unknown>, nowMs: number): UsageWindow | undefined {
80
+ const duration = toNumber(windowData.duration);
81
+ const timeUnit = typeof windowData.timeUnit === "string" ? windowData.timeUnit : "";
82
+ const label = duration !== undefined && timeUnit ? formatDurationLabel(duration, timeUnit) : undefined;
83
+ const resetsAt = parseResetTime(windowData, nowMs);
84
+
85
+ if (duration === undefined && !label && !resetsAt) return undefined;
86
+ let durationMs: number | undefined;
87
+ if (duration !== undefined) {
88
+ if (timeUnit.toUpperCase().includes("MINUTE")) durationMs = duration * 60_000;
89
+ else if (timeUnit.toUpperCase().includes("HOUR")) durationMs = duration * 3_600_000;
90
+ else if (timeUnit.toUpperCase().includes("DAY")) durationMs = duration * 86_400_000;
91
+ else if (timeUnit.toUpperCase().includes("SECOND")) durationMs = duration * 1000;
92
+ }
93
+
94
+ return {
95
+ id: duration !== undefined && timeUnit ? `${duration}${timeUnit.toLowerCase()}` : "default",
96
+ label: label ?? "Usage window",
97
+ durationMs,
98
+ resetsAt,
99
+ };
100
+ }
101
+
102
+ function buildUsageRow(data: Record<string, unknown>, defaultLabel: string, nowMs: number): KimiUsageRow | null {
103
+ const limit = toNumber(data.limit);
104
+ let used = toNumber(data.used);
105
+ const remaining = toNumber(data.remaining);
106
+ if (used === undefined && remaining !== undefined && limit !== undefined) {
107
+ used = limit - remaining;
108
+ }
109
+
110
+ if (used === undefined && limit === undefined) return null;
111
+ const resetsAt = parseResetTime(data, nowMs);
112
+ return {
113
+ label:
114
+ typeof data.name === "string" && data.name
115
+ ? data.name
116
+ : typeof data.title === "string" && data.title
117
+ ? data.title
118
+ : defaultLabel,
119
+ used,
120
+ limit,
121
+ remaining,
122
+ resetsAt,
123
+ };
124
+ }
125
+
126
+ function buildUsageAmount(row: KimiUsageRow): UsageAmount {
127
+ const amount: UsageAmount = { unit: "unknown" };
128
+ if (row.limit !== undefined) amount.limit = row.limit;
129
+ if (row.used !== undefined) amount.used = row.used;
130
+ if (row.remaining !== undefined) amount.remaining = row.remaining;
131
+ if (row.limit !== undefined && row.used !== undefined && row.limit > 0) {
132
+ amount.usedFraction = Math.min(Math.max(row.used / row.limit, 0), 1);
133
+ amount.remainingFraction = Math.min(Math.max((row.limit - row.used) / row.limit, 0), 1);
134
+ amount.remaining = amount.remaining ?? row.limit - row.used;
135
+ }
136
+ return amount;
137
+ }
138
+
139
+ function buildUsageStatus(amount: UsageAmount): UsageStatus {
140
+ if (amount.usedFraction === undefined) return "unknown";
141
+ if (amount.usedFraction >= 1) return "exhausted";
142
+ if (amount.usedFraction >= 0.9) return "warning";
143
+ return "ok";
144
+ }
145
+
146
+ function toUsageLimit(row: KimiUsageRow, provider: string, index: number, accountId?: string): UsageLimit {
147
+ const window: UsageWindow | undefined =
148
+ row.window ??
149
+ (row.resetsAt
150
+ ? {
151
+ id: "default",
152
+ label: "Usage window",
153
+ resetsAt: row.resetsAt,
154
+ }
155
+ : undefined);
156
+
157
+ const amount = buildUsageAmount(row);
158
+ return {
159
+ id: `${provider}:${index}`,
160
+ label: row.label,
161
+ scope: {
162
+ provider,
163
+ accountId,
164
+ windowId: window?.id,
165
+ shared: true,
166
+ },
167
+ window,
168
+ amount,
169
+ status: buildUsageStatus(amount),
170
+ };
171
+ }
172
+
173
+ function parseUsagePayload(payload: unknown, nowMs: number): { rows: KimiUsageRow[]; raw: KimiUsagePayload } | null {
174
+ if (!isRecord(payload)) return null;
175
+ const data = payload as KimiUsagePayload;
176
+ const rows: KimiUsageRow[] = [];
177
+
178
+ if (isRecord(data.usage)) {
179
+ const summary = buildUsageRow(data.usage, "Total quota", nowMs);
180
+ if (summary) rows.push(summary);
181
+ }
182
+
183
+ if (Array.isArray(data.limits)) {
184
+ data.limits.forEach((item, idx) => {
185
+ if (!isRecord(item)) return;
186
+ const detail = isRecord(item.detail) ? item.detail : item;
187
+ const windowData = isRecord(item.window) ? item.window : {};
188
+ const label =
189
+ (typeof item.name === "string" && item.name) ||
190
+ (typeof item.title === "string" && item.title) ||
191
+ (typeof item.scope === "string" && item.scope) ||
192
+ (typeof detail.name === "string" && detail.name) ||
193
+ (typeof detail.title === "string" && detail.title) ||
194
+ formatDurationLabel(toNumber(windowData.duration) ?? 0, String(windowData.timeUnit || "")) ||
195
+ `Limit #${idx + 1}`;
196
+ const row = buildUsageRow(detail, label, nowMs);
197
+ if (row) {
198
+ row.window = buildWindow(windowData, nowMs);
199
+ rows.push(row);
200
+ }
201
+ });
202
+ }
203
+
204
+ return { rows, raw: data };
205
+ }
206
+
207
+ export const kimiUsageProvider: UsageProvider = {
208
+ id: "kimi-code",
209
+ supports(params: UsageFetchParams): boolean {
210
+ return params.provider === "kimi-code" && params.credential.type === "oauth";
211
+ },
212
+ async fetchUsage(params: UsageFetchParams, ctx: UsageFetchContext): Promise<UsageReport | null> {
213
+ if (params.provider !== "kimi-code") return null;
214
+ const { credential } = params;
215
+ if (credential.type !== "oauth") return null;
216
+
217
+ const accessToken = credential.accessToken;
218
+ if (!accessToken) return null;
219
+
220
+ const nowMs = Date.now();
221
+ // AuthStorage refreshes OAuth credentials pre-emptively (60s skew). If the
222
+ // usage probe lands with an expired token, short-circuit rather than POST
223
+ // the broker sentinel back to Kimi — the next cycle will carry a freshly
224
+ // refreshed credential.
225
+ if (credential.expiresAt !== undefined && credential.expiresAt <= nowMs) {
226
+ ctx.logger?.debug("Kimi usage token expired; skipping probe", { provider: params.provider });
227
+ return null;
228
+ }
229
+
230
+ const baseUrl = normalizeBaseUrl(params.baseUrl);
231
+ const url = buildUsageUrl(baseUrl);
232
+ let payload: unknown;
233
+ try {
234
+ const response = await ctx.fetch(url, {
235
+ headers: {
236
+ ...getKimiCommonHeaders(),
237
+ Authorization: `Bearer ${accessToken}`,
238
+ },
239
+ signal: params.signal,
240
+ });
241
+ if (!response.ok) {
242
+ ctx.logger?.warn("Kimi usage request failed", { status: response.status, provider: params.provider });
243
+ return null;
244
+ }
245
+ payload = await response.json();
246
+ } catch (error) {
247
+ ctx.logger?.warn("Kimi usage request error", { provider: params.provider, error: String(error) });
248
+ return null;
249
+ }
250
+
251
+ const parsed = parseUsagePayload(payload, nowMs);
252
+ if (!parsed || parsed.rows.length === 0) {
253
+ ctx.logger?.warn("Kimi usage response invalid", { provider: params.provider });
254
+ return null;
255
+ }
256
+
257
+ const limits = parsed.rows.map((row, index) => toUsageLimit(row, params.provider, index, credential.accountId));
258
+
259
+ const report: UsageReport = {
260
+ provider: params.provider,
261
+ fetchedAt: nowMs,
262
+ limits,
263
+ metadata: {
264
+ endpoint: url,
265
+ },
266
+ raw: parsed.raw,
267
+ };
268
+
269
+ return report;
270
+ },
271
+ };
@@ -0,0 +1,31 @@
1
+ import type { UsageFetchContext, UsageFetchParams, UsageProvider, UsageReport } from "../usage";
2
+
3
+ /**
4
+ * MiniMax Coding Plan usage provider.
5
+ *
6
+ * MiniMax Coding Plan is a subscription-based service with a 5-hour rolling window
7
+ * quota system. The quota resets automatically based on a rolling window.
8
+ *
9
+ * Currently, MiniMax does not expose a usage/quota API endpoint for the Coding Plan.
10
+ * Usage is tracked via the web dashboard at https://platform.minimax.io/user-center/payment/coding-plan
11
+ *
12
+ * This provider exists to register support for the minimax-code provider in the
13
+ * usage system. When MiniMax adds a usage API, this can be implemented.
14
+ */
15
+ async function fetchMiniMaxCodeUsage(params: UsageFetchParams, _ctx: UsageFetchContext): Promise<UsageReport | null> {
16
+ if (params.provider !== "minimax-code" && params.provider !== "minimax-code-cn") {
17
+ return null;
18
+ }
19
+
20
+ // MiniMax Coding Plan does not currently expose a usage API
21
+ // Users can check their usage via the web dashboard
22
+ return null;
23
+ }
24
+
25
+ export const minimaxCodeUsageProvider: UsageProvider = {
26
+ id: "minimax-code",
27
+ fetchUsage: fetchMiniMaxCodeUsage,
28
+ supports: (params: UsageFetchParams) =>
29
+ (params.provider === "minimax-code" || params.provider === "minimax-code-cn") &&
30
+ params.credential.type === "api_key",
31
+ };