@linxiraos/pi-ai 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (639) hide show
  1. package/CHANGELOG.md +5066 -0
  2. package/README.md +1195 -0
  3. package/dist/types/api-registry.d.ts +30 -0
  4. package/dist/types/auth/sqlite-credential-store.d.ts +117 -0
  5. package/dist/types/auth-broker/client.d.ts +93 -0
  6. package/dist/types/auth-broker/discover.d.ts +39 -0
  7. package/dist/types/auth-broker/index.d.ts +7 -0
  8. package/dist/types/auth-broker/refresher.d.ts +25 -0
  9. package/dist/types/auth-broker/remote-store.d.ts +136 -0
  10. package/dist/types/auth-broker/server.d.ts +48 -0
  11. package/dist/types/auth-broker/snapshot-cache.d.ts +17 -0
  12. package/dist/types/auth-broker/types.d.ts +152 -0
  13. package/dist/types/auth-broker/wire-schema-resource.d.ts +53 -0
  14. package/dist/types/auth-broker/wire-schemas.d.ts +5 -0
  15. package/dist/types/auth-gateway/http.d.ts +56 -0
  16. package/dist/types/auth-gateway/index.d.ts +3 -0
  17. package/dist/types/auth-gateway/server.d.ts +36 -0
  18. package/dist/types/auth-gateway/types.d.ts +127 -0
  19. package/dist/types/auth-retry.d.ts +150 -0
  20. package/dist/types/auth-storage.d.ts +1258 -0
  21. package/dist/types/dialect/anthropic.d.ts +15 -0
  22. package/dist/types/dialect/catalog.d.ts +3 -0
  23. package/dist/types/dialect/coercion.d.ts +23 -0
  24. package/dist/types/dialect/deepseek.d.ts +14 -0
  25. package/dist/types/dialect/demotion.d.ts +30 -0
  26. package/dist/types/dialect/examples.d.ts +18 -0
  27. package/dist/types/dialect/factory.d.ts +3 -0
  28. package/dist/types/dialect/fenced-thinking.d.ts +53 -0
  29. package/dist/types/dialect/gemini.d.ts +17 -0
  30. package/dist/types/dialect/gemma.d.ts +15 -0
  31. package/dist/types/dialect/glm.d.ts +9 -0
  32. package/dist/types/dialect/harmony.d.ts +8 -0
  33. package/dist/types/dialect/hermes.d.ts +9 -0
  34. package/dist/types/dialect/history.d.ts +3 -0
  35. package/dist/types/dialect/index.d.ts +11 -0
  36. package/dist/types/dialect/inventory.d.ts +9 -0
  37. package/dist/types/dialect/kimi.d.ts +14 -0
  38. package/dist/types/dialect/minimax.d.ts +3 -0
  39. package/dist/types/dialect/owned-stream.d.ts +4 -0
  40. package/dist/types/dialect/qwen3.d.ts +9 -0
  41. package/dist/types/dialect/rendering.d.ts +54 -0
  42. package/dist/types/dialect/thinking.d.ts +6 -0
  43. package/dist/types/dialect/types.d.ts +68 -0
  44. package/dist/types/dialect/xml.d.ts +9 -0
  45. package/dist/types/error/abort.d.ts +14 -0
  46. package/dist/types/error/auth-classify.d.ts +20 -0
  47. package/dist/types/error/auth.d.ts +27 -0
  48. package/dist/types/error/aws.d.ts +27 -0
  49. package/dist/types/error/classes.d.ts +106 -0
  50. package/dist/types/error/finalize.d.ts +39 -0
  51. package/dist/types/error/flags.d.ts +94 -0
  52. package/dist/types/error/format.d.ts +20 -0
  53. package/dist/types/error/gateway.d.ts +20 -0
  54. package/dist/types/error/index.d.ts +14 -0
  55. package/dist/types/error/oauth.d.ts +43 -0
  56. package/dist/types/error/provider.d.ts +42 -0
  57. package/dist/types/error/rate-limit.d.ts +80 -0
  58. package/dist/types/error/retryable.d.ts +27 -0
  59. package/dist/types/error/validation.d.ts +32 -0
  60. package/dist/types/index.d.ts +51 -0
  61. package/dist/types/provider-details.d.ts +24 -0
  62. package/dist/types/providers/amazon-bedrock.d.ts +39 -0
  63. package/dist/types/providers/anthropic-client.d.ts +106 -0
  64. package/dist/types/providers/anthropic-messages-server-schema.d.ts +937 -0
  65. package/dist/types/providers/anthropic-messages-server.d.ts +17 -0
  66. package/dist/types/providers/anthropic-wire.d.ts +345 -0
  67. package/dist/types/providers/anthropic.d.ts +261 -0
  68. package/dist/types/providers/aws-credentials.d.ts +48 -0
  69. package/dist/types/providers/aws-eventstream.d.ts +39 -0
  70. package/dist/types/providers/aws-sigv4.d.ts +55 -0
  71. package/dist/types/providers/azure-openai-responses.d.ts +16 -0
  72. package/dist/types/providers/bedrock-mantle.d.ts +13 -0
  73. package/dist/types/providers/claude-code-fingerprint.d.ts +19 -0
  74. package/dist/types/providers/cowork-fetch.d.ts +3 -0
  75. package/dist/types/providers/cursor/exec-modern.d.ts +98 -0
  76. package/dist/types/providers/cursor-pi-args.d.ts +105 -0
  77. package/dist/types/providers/cursor.d.ts +221 -0
  78. package/dist/types/providers/devin.d.ts +12 -0
  79. package/dist/types/providers/error-message.d.ts +25 -0
  80. package/dist/types/providers/github-copilot-headers.d.ts +40 -0
  81. package/dist/types/providers/gitlab-duo-workflow.d.ts +254 -0
  82. package/dist/types/providers/gitlab-duo.d.ts +27 -0
  83. package/dist/types/providers/google-auth.d.ts +24 -0
  84. package/dist/types/providers/google-gemini-cli.d.ts +120 -0
  85. package/dist/types/providers/google-shared.d.ts +203 -0
  86. package/dist/types/providers/google-types.d.ts +155 -0
  87. package/dist/types/providers/google-vertex.d.ts +7 -0
  88. package/dist/types/providers/google.d.ts +4 -0
  89. package/dist/types/providers/grammar.d.ts +1 -0
  90. package/dist/types/providers/kimi.d.ts +27 -0
  91. package/dist/types/providers/mock.d.ts +179 -0
  92. package/dist/types/providers/ollama.d.ts +8 -0
  93. package/dist/types/providers/openai-anthropic-shim.d.ts +35 -0
  94. package/dist/types/providers/openai-chat-server-schema.d.ts +1311 -0
  95. package/dist/types/providers/openai-chat-server.d.ts +16 -0
  96. package/dist/types/providers/openai-chat-wire.d.ts +669 -0
  97. package/dist/types/providers/openai-codex/request-transformer.d.ts +109 -0
  98. package/dist/types/providers/openai-codex/response-handler.d.ts +26 -0
  99. package/dist/types/providers/openai-codex-responses.d.ts +238 -0
  100. package/dist/types/providers/openai-completions.d.ts +48 -0
  101. package/dist/types/providers/openai-reasoning-fallback.d.ts +25 -0
  102. package/dist/types/providers/openai-responses-server-schema.d.ts +1314 -0
  103. package/dist/types/providers/openai-responses-server.d.ts +17 -0
  104. package/dist/types/providers/openai-responses-wire.d.ts +6099 -0
  105. package/dist/types/providers/openai-responses.d.ts +131 -0
  106. package/dist/types/providers/openai-shared.d.ts +624 -0
  107. package/dist/types/providers/pi-native-client.d.ts +13 -0
  108. package/dist/types/providers/pi-native-server.d.ts +69 -0
  109. package/dist/types/providers/register-builtins.d.ts +37 -0
  110. package/dist/types/providers/synthetic.d.ts +26 -0
  111. package/dist/types/providers/transform-messages.d.ts +32 -0
  112. package/dist/types/providers/vision-guard.d.ts +20 -0
  113. package/dist/types/registry/aiand.d.ts +7 -0
  114. package/dist/types/registry/aimlapi.d.ts +4 -0
  115. package/dist/types/registry/alibaba-coding-plan.d.ts +8 -0
  116. package/dist/types/registry/alibaba-token-plan.d.ts +18 -0
  117. package/dist/types/registry/amazon-bedrock.d.ts +5 -0
  118. package/dist/types/registry/anthropic.d.ts +10 -0
  119. package/dist/types/registry/api-key-login.d.ts +42 -0
  120. package/dist/types/registry/api-key-validation.d.ts +43 -0
  121. package/dist/types/registry/aws.d.ts +13 -0
  122. package/dist/types/registry/azure.d.ts +4 -0
  123. package/dist/types/registry/baseten.d.ts +7 -0
  124. package/dist/types/registry/bedrock-mantle.d.ts +22 -0
  125. package/dist/types/registry/cerebras.d.ts +7 -0
  126. package/dist/types/registry/cloudflare-ai-gateway.d.ts +13 -0
  127. package/dist/types/registry/coreweave.d.ts +7 -0
  128. package/dist/types/registry/cursor.d.ts +7 -0
  129. package/dist/types/registry/deepseek.d.ts +8 -0
  130. package/dist/types/registry/derived.d.ts +5 -0
  131. package/dist/types/registry/devin.d.ts +8 -0
  132. package/dist/types/registry/exa.d.ts +8 -0
  133. package/dist/types/registry/firepass.d.ts +16 -0
  134. package/dist/types/registry/fireworks.d.ts +7 -0
  135. package/dist/types/registry/github-copilot.d.ts +7 -0
  136. package/dist/types/registry/gitlab-duo-workflow.d.ts +10 -0
  137. package/dist/types/registry/gitlab-duo.d.ts +9 -0
  138. package/dist/types/registry/gmi-cloud.d.ts +7 -0
  139. package/dist/types/registry/google-antigravity.d.ts +9 -0
  140. package/dist/types/registry/google-gemini-cli.d.ts +9 -0
  141. package/dist/types/registry/google-vertex.d.ts +5 -0
  142. package/dist/types/registry/google.d.ts +4 -0
  143. package/dist/types/registry/groq.d.ts +4 -0
  144. package/dist/types/registry/huggingface.d.ts +7 -0
  145. package/dist/types/registry/index.d.ts +4 -0
  146. package/dist/types/registry/kagi.d.ts +14 -0
  147. package/dist/types/registry/kilo.d.ts +7 -0
  148. package/dist/types/registry/kimi-code.d.ts +7 -0
  149. package/dist/types/registry/litellm.d.ts +13 -0
  150. package/dist/types/registry/llama-cpp.d.ts +8 -0
  151. package/dist/types/registry/lm-studio.d.ts +8 -0
  152. package/dist/types/registry/meta.d.ts +7 -0
  153. package/dist/types/registry/minimax-code-cn.d.ts +6 -0
  154. package/dist/types/registry/minimax-code.d.ts +6 -0
  155. package/dist/types/registry/minimax.d.ts +4 -0
  156. package/dist/types/registry/mistral.d.ts +4 -0
  157. package/dist/types/registry/moonshot.d.ts +7 -0
  158. package/dist/types/registry/nanogpt.d.ts +7 -0
  159. package/dist/types/registry/novita.d.ts +6 -0
  160. package/dist/types/registry/nvidia.d.ts +7 -0
  161. package/dist/types/registry/oauth/anthropic-constants.d.ts +12 -0
  162. package/dist/types/registry/oauth/anthropic.d.ts +24 -0
  163. package/dist/types/registry/oauth/callback-server.d.ts +74 -0
  164. package/dist/types/registry/oauth/cursor.d.ts +16 -0
  165. package/dist/types/registry/oauth/device-code.d.ts +25 -0
  166. package/dist/types/registry/oauth/devin.d.ts +5 -0
  167. package/dist/types/registry/oauth/github-copilot.d.ts +30 -0
  168. package/dist/types/registry/oauth/gitlab-duo-workflow.d.ts +6 -0
  169. package/dist/types/registry/oauth/gitlab-duo.d.ts +3 -0
  170. package/dist/types/registry/oauth/google-antigravity.d.ts +11 -0
  171. package/dist/types/registry/oauth/google-gemini-cli.d.ts +22 -0
  172. package/dist/types/registry/oauth/google-oauth-shared.d.ts +56 -0
  173. package/dist/types/registry/oauth/index.d.ts +45 -0
  174. package/dist/types/registry/oauth/kimi.d.ts +21 -0
  175. package/dist/types/registry/oauth/minimax-code.d.ts +27 -0
  176. package/dist/types/registry/oauth/openai-codex.d.ts +33 -0
  177. package/dist/types/registry/oauth/opencode.d.ts +18 -0
  178. package/dist/types/registry/oauth/perplexity.d.ts +9 -0
  179. package/dist/types/registry/oauth/pkce.d.ts +8 -0
  180. package/dist/types/registry/oauth/types.d.ts +87 -0
  181. package/dist/types/registry/oauth/wafer.d.ts +1 -0
  182. package/dist/types/registry/oauth/xai-oauth.d.ts +46 -0
  183. package/dist/types/registry/oauth/xiaomi.d.ts +25 -0
  184. package/dist/types/registry/oauth/zai.d.ts +25 -0
  185. package/dist/types/registry/ollama-cloud.d.ts +7 -0
  186. package/dist/types/registry/ollama.d.ts +12 -0
  187. package/dist/types/registry/openai-codex-device.d.ts +8 -0
  188. package/dist/types/registry/openai-codex.d.ts +9 -0
  189. package/dist/types/registry/openai.d.ts +4 -0
  190. package/dist/types/registry/opencode-go.d.ts +6 -0
  191. package/dist/types/registry/opencode-zen.d.ts +6 -0
  192. package/dist/types/registry/openrouter.d.ts +13 -0
  193. package/dist/types/registry/parallel.d.ts +14 -0
  194. package/dist/types/registry/perplexity.d.ts +7 -0
  195. package/dist/types/registry/qianfan.d.ts +7 -0
  196. package/dist/types/registry/qwen-portal.d.ts +7 -0
  197. package/dist/types/registry/registry.d.ts +367 -0
  198. package/dist/types/registry/sakana.d.ts +7 -0
  199. package/dist/types/registry/siliconflow-cn.d.ts +7 -0
  200. package/dist/types/registry/siliconflow.d.ts +7 -0
  201. package/dist/types/registry/synthetic.d.ts +6 -0
  202. package/dist/types/registry/tavily.d.ts +14 -0
  203. package/dist/types/registry/together.d.ts +6 -0
  204. package/dist/types/registry/types.d.ts +75 -0
  205. package/dist/types/registry/umans.d.ts +7 -0
  206. package/dist/types/registry/venice.d.ts +13 -0
  207. package/dist/types/registry/vercel-ai-gateway.d.ts +7 -0
  208. package/dist/types/registry/vllm.d.ts +7 -0
  209. package/dist/types/registry/wafer-serverless.d.ts +6 -0
  210. package/dist/types/registry/xai-oauth.d.ts +7 -0
  211. package/dist/types/registry/xai.d.ts +7 -0
  212. package/dist/types/registry/xiaomi-token-plan-ams.d.ts +6 -0
  213. package/dist/types/registry/xiaomi-token-plan-cn.d.ts +6 -0
  214. package/dist/types/registry/xiaomi-token-plan-sgp.d.ts +6 -0
  215. package/dist/types/registry/xiaomi.d.ts +6 -0
  216. package/dist/types/registry/zai.d.ts +15 -0
  217. package/dist/types/registry/zenmux.d.ts +7 -0
  218. package/dist/types/registry/zhipu-coding-plan.d.ts +7 -0
  219. package/dist/types/stream.d.ts +46 -0
  220. package/dist/types/types.d.ts +1064 -0
  221. package/dist/types/usage/alibaba-token-plan.d.ts +3 -0
  222. package/dist/types/usage/claude.d.ts +4 -0
  223. package/dist/types/usage/cursor.d.ts +4 -0
  224. package/dist/types/usage/gemini.d.ts +2 -0
  225. package/dist/types/usage/github-copilot.d.ts +7 -0
  226. package/dist/types/usage/google-antigravity.d.ts +15 -0
  227. package/dist/types/usage/kimi.d.ts +2 -0
  228. package/dist/types/usage/minimax-code.d.ts +3 -0
  229. package/dist/types/usage/ollama.d.ts +5 -0
  230. package/dist/types/usage/openai-codex-base-url.d.ts +18 -0
  231. package/dist/types/usage/openai-codex-reset.d.ts +88 -0
  232. package/dist/types/usage/openai-codex.d.ts +10 -0
  233. package/dist/types/usage/opencode-go.d.ts +2 -0
  234. package/dist/types/usage/shared.d.ts +1 -0
  235. package/dist/types/usage/synthetic.d.ts +2 -0
  236. package/dist/types/usage/umans.d.ts +2 -0
  237. package/dist/types/usage/xai-oauth.d.ts +12 -0
  238. package/dist/types/usage/zai.d.ts +3 -0
  239. package/dist/types/usage.d.ts +527 -0
  240. package/dist/types/utils/abort.d.ts +25 -0
  241. package/dist/types/utils/anthropic-auth.d.ts +35 -0
  242. package/dist/types/utils/aws-profile.d.ts +17 -0
  243. package/dist/types/utils/block-symbols.d.ts +62 -0
  244. package/dist/types/utils/deterministic-id.d.ts +16 -0
  245. package/dist/types/utils/empty-completion-retry.d.ts +21 -0
  246. package/dist/types/utils/event-stream.d.ts +39 -0
  247. package/dist/types/utils/foundry.d.ts +1 -0
  248. package/dist/types/utils/google-validation.d.ts +2 -0
  249. package/dist/types/utils/harmony-leak.d.ts +135 -0
  250. package/dist/types/utils/http-inspector.d.ts +49 -0
  251. package/dist/types/utils/idle-iterator.d.ts +149 -0
  252. package/dist/types/utils/leaked-thinking-stream.d.ts +33 -0
  253. package/dist/types/utils/openai-http.d.ts +48 -0
  254. package/dist/types/utils/openrouter-headers.d.ts +1 -0
  255. package/dist/types/utils/parse-bind.d.ts +23 -0
  256. package/dist/types/utils/provider-response.d.ts +3 -0
  257. package/dist/types/utils/proxy.d.ts +39 -0
  258. package/dist/types/utils/request-debug.d.ts +29 -0
  259. package/dist/types/utils/retry-after.d.ts +4 -0
  260. package/dist/types/utils/retry.d.ts +14 -0
  261. package/dist/types/utils/schema/adapt.d.ts +24 -0
  262. package/dist/types/utils/schema/compatibility.d.ts +30 -0
  263. package/dist/types/utils/schema/dereference.d.ts +11 -0
  264. package/dist/types/utils/schema/draft.d.ts +10 -0
  265. package/dist/types/utils/schema/equality.d.ts +4 -0
  266. package/dist/types/utils/schema/fields.d.ts +54 -0
  267. package/dist/types/utils/schema/index.d.ts +14 -0
  268. package/dist/types/utils/schema/json-schema-validator.d.ts +20 -0
  269. package/dist/types/utils/schema/meta-validator.d.ts +2 -0
  270. package/dist/types/utils/schema/normalize.d.ts +153 -0
  271. package/dist/types/utils/schema/spill.d.ts +8 -0
  272. package/dist/types/utils/schema/stamps.d.ts +17 -0
  273. package/dist/types/utils/schema/strict-tool-validation.d.ts +16 -0
  274. package/dist/types/utils/schema/types.d.ts +4 -0
  275. package/dist/types/utils/schema/typescript.d.ts +24 -0
  276. package/dist/types/utils/schema/wire.d.ts +52 -0
  277. package/dist/types/utils/sdk-stream-timeout.d.ts +33 -0
  278. package/dist/types/utils/sse-debug.d.ts +5 -0
  279. package/dist/types/utils/stream-markup-healing.d.ts +87 -0
  280. package/dist/types/utils/thinking-loop.d.ts +102 -0
  281. package/dist/types/utils/tool-call-loop-guard.d.ts +26 -0
  282. package/dist/types/utils/tool-choice.d.ts +52 -0
  283. package/dist/types/utils/validation.d.ts +28 -0
  284. package/dist/types/utils.d.ts +57 -0
  285. package/package.json +138 -0
  286. package/src/api-registry.ts +109 -0
  287. package/src/auth/sqlite-credential-store.ts +2066 -0
  288. package/src/auth-broker/client.ts +471 -0
  289. package/src/auth-broker/discover.ts +310 -0
  290. package/src/auth-broker/index.ts +7 -0
  291. package/src/auth-broker/refresher.ts +117 -0
  292. package/src/auth-broker/remote-store.ts +1332 -0
  293. package/src/auth-broker/server.ts +898 -0
  294. package/src/auth-broker/snapshot-cache.ts +200 -0
  295. package/src/auth-broker/types.ts +193 -0
  296. package/src/auth-broker/wire-schema-resource.ts +487 -0
  297. package/src/auth-broker/wire-schemas.ts +43 -0
  298. package/src/auth-gateway/http.ts +227 -0
  299. package/src/auth-gateway/index.ts +3 -0
  300. package/src/auth-gateway/server.ts +836 -0
  301. package/src/auth-gateway/types.ts +153 -0
  302. package/src/auth-retry.ts +401 -0
  303. package/src/auth-storage.ts +6540 -0
  304. package/src/dialect/anthropic.md +31 -0
  305. package/src/dialect/anthropic.ts +608 -0
  306. package/src/dialect/catalog.ts +29 -0
  307. package/src/dialect/coercion.ts +136 -0
  308. package/src/dialect/deepseek.md +24 -0
  309. package/src/dialect/deepseek.ts +609 -0
  310. package/src/dialect/demotion.ts +40 -0
  311. package/src/dialect/examples.ts +71 -0
  312. package/src/dialect/factory.ts +34 -0
  313. package/src/dialect/fenced-thinking.ts +184 -0
  314. package/src/dialect/gemini.md +44 -0
  315. package/src/dialect/gemini.ts +583 -0
  316. package/src/dialect/gemma.md +33 -0
  317. package/src/dialect/gemma.ts +387 -0
  318. package/src/dialect/glm.md +32 -0
  319. package/src/dialect/glm.ts +579 -0
  320. package/src/dialect/harmony.md +31 -0
  321. package/src/dialect/harmony.ts +345 -0
  322. package/src/dialect/hermes.md +25 -0
  323. package/src/dialect/hermes.ts +206 -0
  324. package/src/dialect/history.ts +81 -0
  325. package/src/dialect/index.ts +15 -0
  326. package/src/dialect/inventory.ts +30 -0
  327. package/src/dialect/kimi.md +24 -0
  328. package/src/dialect/kimi.ts +340 -0
  329. package/src/dialect/minimax.md +31 -0
  330. package/src/dialect/minimax.ts +95 -0
  331. package/src/dialect/owned-stream.ts +481 -0
  332. package/src/dialect/prompt-template.md +12 -0
  333. package/src/dialect/qwen3.md +28 -0
  334. package/src/dialect/qwen3.ts +240 -0
  335. package/src/dialect/rendering.ts +304 -0
  336. package/src/dialect/thinking.ts +292 -0
  337. package/src/dialect/types.ts +56 -0
  338. package/src/dialect/xml.md +22 -0
  339. package/src/dialect/xml.ts +90 -0
  340. package/src/error/abort.ts +18 -0
  341. package/src/error/auth-classify.ts +47 -0
  342. package/src/error/auth.ts +48 -0
  343. package/src/error/aws.ts +35 -0
  344. package/src/error/classes.ts +281 -0
  345. package/src/error/finalize.ts +69 -0
  346. package/src/error/flags.ts +602 -0
  347. package/src/error/format.ts +45 -0
  348. package/src/error/gateway.ts +96 -0
  349. package/src/error/index.ts +14 -0
  350. package/src/error/oauth.ts +58 -0
  351. package/src/error/provider.ts +63 -0
  352. package/src/error/rate-limit.ts +303 -0
  353. package/src/error/retryable.ts +70 -0
  354. package/src/error/validation.ts +44 -0
  355. package/src/index.ts +51 -0
  356. package/src/provider-details.ts +90 -0
  357. package/src/providers/amazon-bedrock.ts +1064 -0
  358. package/src/providers/anthropic-client.ts +317 -0
  359. package/src/providers/anthropic-messages-server-schema.ts +252 -0
  360. package/src/providers/anthropic-messages-server.ts +818 -0
  361. package/src/providers/anthropic-wire.ts +359 -0
  362. package/src/providers/anthropic.ts +4539 -0
  363. package/src/providers/aws-credentials.ts +772 -0
  364. package/src/providers/aws-eventstream.ts +181 -0
  365. package/src/providers/aws-sigv4.ts +218 -0
  366. package/src/providers/azure-openai-responses.ts +438 -0
  367. package/src/providers/bedrock-mantle.ts +110 -0
  368. package/src/providers/claude-code-fingerprint.ts +20 -0
  369. package/src/providers/cowork-fetch.ts +201 -0
  370. package/src/providers/cursor/exec-modern.ts +496 -0
  371. package/src/providers/cursor/proto/agent.proto +4533 -0
  372. package/src/providers/cursor/proto/buf.gen.yaml +6 -0
  373. package/src/providers/cursor/proto/buf.yaml +17 -0
  374. package/src/providers/cursor-pi-args.ts +165 -0
  375. package/src/providers/cursor.ts +4689 -0
  376. package/src/providers/devin/proto/buf/validate/validate.proto +468 -0
  377. package/src/providers/devin/proto/buf.gen.yaml +33 -0
  378. package/src/providers/devin/proto/buf.yaml +17 -0
  379. package/src/providers/devin/proto/cel/expr/checked.proto +103 -0
  380. package/src/providers/devin/proto/cel/expr/eval.proto +38 -0
  381. package/src/providers/devin/proto/cel/expr/explain.proto +15 -0
  382. package/src/providers/devin/proto/cel/expr/syntax.proto +113 -0
  383. package/src/providers/devin/proto/cel/expr/value.proto +41 -0
  384. package/src/providers/devin/proto/connectext/grpc/status/v1/status.proto +11 -0
  385. package/src/providers/devin/proto/errorspb/errors.proto +56 -0
  386. package/src/providers/devin/proto/errorspb/hintdetail.proto +7 -0
  387. package/src/providers/devin/proto/errorspb/markers.proto +10 -0
  388. package/src/providers/devin/proto/errorspb/tags.proto +12 -0
  389. package/src/providers/devin/proto/errorspb/testing.proto +6 -0
  390. package/src/providers/devin/proto/exa/analytics_pb/analytics.proto +188 -0
  391. package/src/providers/devin/proto/exa/api_server_pb/api_server.proto +2461 -0
  392. package/src/providers/devin/proto/exa/auth_pb/auth.proto +19 -0
  393. package/src/providers/devin/proto/exa/auto_cascade_common_pb/auto_cascade_common.proto +79 -0
  394. package/src/providers/devin/proto/exa/browser_preview_pb/browser_preview.proto +32 -0
  395. package/src/providers/devin/proto/exa/bug_checker_pb/bug_checker.proto +22 -0
  396. package/src/providers/devin/proto/exa/cascade_plugins_pb/cascade_plugins.proto +262 -0
  397. package/src/providers/devin/proto/exa/chat_client_server_pb/chat_client_server.proto +57 -0
  398. package/src/providers/devin/proto/exa/chat_pb/chat.proto +449 -0
  399. package/src/providers/devin/proto/exa/code_edit/code_edit_pb/code_edit.proto +186 -0
  400. package/src/providers/devin/proto/exa/codeium_common_pb/codeium_common.proto +4157 -0
  401. package/src/providers/devin/proto/exa/context_module_pb/context_module.proto +175 -0
  402. package/src/providers/devin/proto/exa/cortex_pb/cortex.proto +3268 -0
  403. package/src/providers/devin/proto/exa/dev_pb/dev.proto +26 -0
  404. package/src/providers/devin/proto/exa/diff_action_pb/diff_action.proto +75 -0
  405. package/src/providers/devin/proto/exa/eval/pr_eval/datasets_pb/datasets.proto +103 -0
  406. package/src/providers/devin/proto/exa/eval_pb/eval.proto +1315 -0
  407. package/src/providers/devin/proto/exa/extension_server_pb/extension_server.proto +556 -0
  408. package/src/providers/devin/proto/exa/file_system_provider_pb/file_system_provider.proto +75 -0
  409. package/src/providers/devin/proto/exa/index_pb/index.proto +461 -0
  410. package/src/providers/devin/proto/exa/knowledge_base_pb/knowledge_base.proto +144 -0
  411. package/src/providers/devin/proto/exa/language_server_pb/language_server.proto +2385 -0
  412. package/src/providers/devin/proto/exa/model_management_pb/model_management.proto +186 -0
  413. package/src/providers/devin/proto/exa/opensearch_clients_pb/opensearch_clients.proto +503 -0
  414. package/src/providers/devin/proto/exa/product_analytics_pb/product_analytics.proto +37 -0
  415. package/src/providers/devin/proto/exa/prompt_pb/prompt.proto +92 -0
  416. package/src/providers/devin/proto/exa/reactive_component_pb/reactive_component.proto +96 -0
  417. package/src/providers/devin/proto/exa/seat_management_pb/seat_management.proto +2680 -0
  418. package/src/providers/devin/proto/exa/tokenizer_pb/tokenizer.proto +37 -0
  419. package/src/providers/devin/proto/exa/trainer_pb/config.proto +647 -0
  420. package/src/providers/devin/proto/exa/tree_sitter/language_data_pb/language_data.proto +14 -0
  421. package/src/providers/devin/proto/exa/trust_pb/trust.proto +157 -0
  422. package/src/providers/devin/proto/exa/user_analytics_pb/user_analytics.proto +519 -0
  423. package/src/providers/devin/proto/google.golang.org/appengine/internal/base/api_base.proto +28 -0
  424. package/src/providers/devin/proto/google.golang.org/appengine/internal/datastore/datastore_v3.proto +484 -0
  425. package/src/providers/devin/proto/google.golang.org/appengine/internal/log/log_service.proto +136 -0
  426. package/src/providers/devin/proto/google.golang.org/appengine/internal/remote_api/remote_api.proto +42 -0
  427. package/src/providers/devin/proto/google.golang.org/appengine/internal/urlfetch/urlfetch_service.proto +61 -0
  428. package/src/providers/devin/proto/grpc/binlog/v1/binarylog.proto +84 -0
  429. package/src/providers/devin/proto/io/prometheus/client/metrics.proto +98 -0
  430. package/src/providers/devin.ts +679 -0
  431. package/src/providers/error-message.ts +23 -0
  432. package/src/providers/github-copilot-headers.ts +141 -0
  433. package/src/providers/gitlab-duo-workflow-chatml-note.md +1 -0
  434. package/src/providers/gitlab-duo-workflow.ts +3135 -0
  435. package/src/providers/gitlab-duo.ts +399 -0
  436. package/src/providers/google-auth.ts +330 -0
  437. package/src/providers/google-gemini-cli.ts +1370 -0
  438. package/src/providers/google-shared.ts +1122 -0
  439. package/src/providers/google-types.ts +180 -0
  440. package/src/providers/google-vertex.ts +135 -0
  441. package/src/providers/google.ts +47 -0
  442. package/src/providers/grammar.ts +70 -0
  443. package/src/providers/kimi.ts +51 -0
  444. package/src/providers/mock.ts +514 -0
  445. package/src/providers/ollama.ts +776 -0
  446. package/src/providers/openai-anthropic-shim.ts +166 -0
  447. package/src/providers/openai-chat-server-schema.ts +243 -0
  448. package/src/providers/openai-chat-server.ts +752 -0
  449. package/src/providers/openai-chat-wire.ts +859 -0
  450. package/src/providers/openai-codex/request-transformer.ts +491 -0
  451. package/src/providers/openai-codex/response-handler.ts +102 -0
  452. package/src/providers/openai-codex-responses.ts +4716 -0
  453. package/src/providers/openai-completions.ts +2389 -0
  454. package/src/providers/openai-reasoning-fallback.ts +269 -0
  455. package/src/providers/openai-responses-server-schema.ts +397 -0
  456. package/src/providers/openai-responses-server.ts +1466 -0
  457. package/src/providers/openai-responses-wire.ts +6416 -0
  458. package/src/providers/openai-responses.ts +1393 -0
  459. package/src/providers/openai-shared.ts +3500 -0
  460. package/src/providers/pi-native-client.ts +275 -0
  461. package/src/providers/pi-native-server.ts +245 -0
  462. package/src/providers/register-builtins.ts +503 -0
  463. package/src/providers/synthetic.ts +50 -0
  464. package/src/providers/transform-messages.ts +1083 -0
  465. package/src/providers/vision-guard.ts +54 -0
  466. package/src/registry/aiand.ts +22 -0
  467. package/src/registry/aimlapi.ts +6 -0
  468. package/src/registry/alibaba-coding-plan.ts +104 -0
  469. package/src/registry/alibaba-token-plan.ts +125 -0
  470. package/src/registry/amazon-bedrock.ts +22 -0
  471. package/src/registry/anthropic.ts +26 -0
  472. package/src/registry/api-key-login.ts +115 -0
  473. package/src/registry/api-key-validation.ts +145 -0
  474. package/src/registry/aws.ts +57 -0
  475. package/src/registry/azure.ts +6 -0
  476. package/src/registry/baseten.ts +22 -0
  477. package/src/registry/bedrock-mantle.ts +34 -0
  478. package/src/registry/cerebras.ts +23 -0
  479. package/src/registry/cloudflare-ai-gateway.ts +45 -0
  480. package/src/registry/coreweave.ts +40 -0
  481. package/src/registry/cursor.ts +20 -0
  482. package/src/registry/deepseek.ts +46 -0
  483. package/src/registry/derived.ts +9 -0
  484. package/src/registry/devin.ts +15 -0
  485. package/src/registry/exa.ts +19 -0
  486. package/src/registry/firepass.ts +32 -0
  487. package/src/registry/fireworks.ts +28 -0
  488. package/src/registry/github-copilot.ts +22 -0
  489. package/src/registry/gitlab-duo-workflow.ts +20 -0
  490. package/src/registry/gitlab-duo.ts +19 -0
  491. package/src/registry/gmi-cloud.ts +22 -0
  492. package/src/registry/google-antigravity.ts +22 -0
  493. package/src/registry/google-gemini-cli.ts +22 -0
  494. package/src/registry/google-vertex.ts +38 -0
  495. package/src/registry/google.ts +6 -0
  496. package/src/registry/groq.ts +6 -0
  497. package/src/registry/huggingface.ts +29 -0
  498. package/src/registry/index.ts +4 -0
  499. package/src/registry/kagi.ts +46 -0
  500. package/src/registry/kilo.ts +114 -0
  501. package/src/registry/kimi-code.ts +17 -0
  502. package/src/registry/litellm.ts +45 -0
  503. package/src/registry/llama-cpp.ts +35 -0
  504. package/src/registry/lm-studio.ts +31 -0
  505. package/src/registry/meta.ts +22 -0
  506. package/src/registry/minimax-code-cn.ts +12 -0
  507. package/src/registry/minimax-code.ts +12 -0
  508. package/src/registry/minimax.ts +6 -0
  509. package/src/registry/mistral.ts +6 -0
  510. package/src/registry/moonshot.ts +28 -0
  511. package/src/registry/nanogpt.ts +22 -0
  512. package/src/registry/novita.ts +25 -0
  513. package/src/registry/nvidia.ts +61 -0
  514. package/src/registry/oauth/anthropic-constants.ts +12 -0
  515. package/src/registry/oauth/anthropic.ts +346 -0
  516. package/src/registry/oauth/callback-server.ts +438 -0
  517. package/src/registry/oauth/cursor.ts +187 -0
  518. package/src/registry/oauth/device-code.ts +92 -0
  519. package/src/registry/oauth/devin.ts +124 -0
  520. package/src/registry/oauth/github-copilot.ts +369 -0
  521. package/src/registry/oauth/gitlab-duo-workflow.ts +146 -0
  522. package/src/registry/oauth/gitlab-duo.ts +222 -0
  523. package/src/registry/oauth/google-antigravity.ts +225 -0
  524. package/src/registry/oauth/google-gemini-cli.ts +297 -0
  525. package/src/registry/oauth/google-oauth-shared.ts +211 -0
  526. package/src/registry/oauth/index.ts +187 -0
  527. package/src/registry/oauth/kimi.ts +297 -0
  528. package/src/registry/oauth/minimax-code.ts +53 -0
  529. package/src/registry/oauth/oauth.html +317 -0
  530. package/src/registry/oauth/openai-codex.ts +384 -0
  531. package/src/registry/oauth/opencode.ts +50 -0
  532. package/src/registry/oauth/perplexity.ts +228 -0
  533. package/src/registry/oauth/pkce.ts +18 -0
  534. package/src/registry/oauth/types.ts +96 -0
  535. package/src/registry/oauth/wafer.ts +24 -0
  536. package/src/registry/oauth/xai-oauth.ts +559 -0
  537. package/src/registry/oauth/xiaomi.ts +211 -0
  538. package/src/registry/oauth/zai.ts +285 -0
  539. package/src/registry/ollama-cloud.ts +36 -0
  540. package/src/registry/ollama.ts +43 -0
  541. package/src/registry/openai-codex-device.ts +18 -0
  542. package/src/registry/openai-codex.ts +19 -0
  543. package/src/registry/openai.ts +6 -0
  544. package/src/registry/opencode-go.ts +12 -0
  545. package/src/registry/opencode-zen.ts +12 -0
  546. package/src/registry/openrouter.ts +28 -0
  547. package/src/registry/parallel.ts +45 -0
  548. package/src/registry/perplexity.ts +13 -0
  549. package/src/registry/qianfan.ts +27 -0
  550. package/src/registry/qwen-portal.ts +50 -0
  551. package/src/registry/registry.ts +182 -0
  552. package/src/registry/sakana.ts +22 -0
  553. package/src/registry/siliconflow-cn.ts +22 -0
  554. package/src/registry/siliconflow.ts +22 -0
  555. package/src/registry/synthetic.ts +21 -0
  556. package/src/registry/tavily.ts +45 -0
  557. package/src/registry/together.ts +22 -0
  558. package/src/registry/types.ts +86 -0
  559. package/src/registry/umans.ts +23 -0
  560. package/src/registry/venice.ts +33 -0
  561. package/src/registry/vercel-ai-gateway.ts +38 -0
  562. package/src/registry/vllm.ts +34 -0
  563. package/src/registry/wafer-serverless.ts +12 -0
  564. package/src/registry/xai-oauth.ts +17 -0
  565. package/src/registry/xai.ts +22 -0
  566. package/src/registry/xiaomi-token-plan-ams.ts +12 -0
  567. package/src/registry/xiaomi-token-plan-cn.ts +12 -0
  568. package/src/registry/xiaomi-token-plan-sgp.ts +12 -0
  569. package/src/registry/xiaomi.ts +12 -0
  570. package/src/registry/zai.ts +41 -0
  571. package/src/registry/zenmux.ts +22 -0
  572. package/src/registry/zhipu-coding-plan.ts +27 -0
  573. package/src/stream.ts +1944 -0
  574. package/src/types.ts +1243 -0
  575. package/src/usage/alibaba-token-plan.ts +230 -0
  576. package/src/usage/claude.ts +830 -0
  577. package/src/usage/cursor.ts +335 -0
  578. package/src/usage/gemini.ts +258 -0
  579. package/src/usage/github-copilot.ts +424 -0
  580. package/src/usage/google-antigravity.ts +497 -0
  581. package/src/usage/kimi.ts +277 -0
  582. package/src/usage/minimax-code.ts +291 -0
  583. package/src/usage/ollama.ts +41 -0
  584. package/src/usage/openai-codex-base-url.ts +35 -0
  585. package/src/usage/openai-codex-reset.ts +205 -0
  586. package/src/usage/openai-codex.ts +627 -0
  587. package/src/usage/opencode-go.ts +89 -0
  588. package/src/usage/shared.ts +10 -0
  589. package/src/usage/synthetic.ts +180 -0
  590. package/src/usage/umans.ts +192 -0
  591. package/src/usage/xai-oauth.ts +414 -0
  592. package/src/usage/zai.ts +370 -0
  593. package/src/usage.ts +411 -0
  594. package/src/utils/abort.ts +67 -0
  595. package/src/utils/anthropic-auth.ts +93 -0
  596. package/src/utils/aws-profile.ts +88 -0
  597. package/src/utils/block-symbols.ts +78 -0
  598. package/src/utils/deterministic-id.ts +20 -0
  599. package/src/utils/empty-completion-retry.ts +161 -0
  600. package/src/utils/event-stream.ts +202 -0
  601. package/src/utils/foundry.ts +8 -0
  602. package/src/utils/google-validation.ts +25 -0
  603. package/src/utils/harmony-leak.ts +500 -0
  604. package/src/utils/http-inspector.ts +196 -0
  605. package/src/utils/idle-iterator.ts +531 -0
  606. package/src/utils/leaked-thinking-stream.ts +483 -0
  607. package/src/utils/openai-http.ts +119 -0
  608. package/src/utils/openrouter-headers.ts +12 -0
  609. package/src/utils/parse-bind.ts +56 -0
  610. package/src/utils/provider-response.ts +30 -0
  611. package/src/utils/proxy.ts +314 -0
  612. package/src/utils/request-debug.ts +351 -0
  613. package/src/utils/retry-after.ts +121 -0
  614. package/src/utils/retry.ts +77 -0
  615. package/src/utils/schema/CONSTRAINTS.md +168 -0
  616. package/src/utils/schema/adapt.ts +36 -0
  617. package/src/utils/schema/compatibility.ts +435 -0
  618. package/src/utils/schema/dereference.ts +98 -0
  619. package/src/utils/schema/draft.ts +341 -0
  620. package/src/utils/schema/equality.ts +97 -0
  621. package/src/utils/schema/fields.ts +210 -0
  622. package/src/utils/schema/index.ts +14 -0
  623. package/src/utils/schema/json-schema-validator.ts +595 -0
  624. package/src/utils/schema/meta-validator.ts +167 -0
  625. package/src/utils/schema/normalize.ts +2314 -0
  626. package/src/utils/schema/spill.ts +43 -0
  627. package/src/utils/schema/stamps.ts +109 -0
  628. package/src/utils/schema/strict-tool-validation.ts +117 -0
  629. package/src/utils/schema/types.ts +10 -0
  630. package/src/utils/schema/typescript.ts +212 -0
  631. package/src/utils/schema/wire.ts +662 -0
  632. package/src/utils/sdk-stream-timeout.ts +43 -0
  633. package/src/utils/sse-debug.ts +18 -0
  634. package/src/utils/stream-markup-healing.ts +247 -0
  635. package/src/utils/thinking-loop.ts +552 -0
  636. package/src/utils/tool-call-loop-guard.ts +107 -0
  637. package/src/utils/tool-choice.ts +101 -0
  638. package/src/utils/validation.ts +1932 -0
  639. package/src/utils.ts +492 -0
@@ -0,0 +1,152 @@
1
+ /**
2
+ * Wire types shared between the auth-broker server and clients.
3
+ *
4
+ * The broker holds OAuth refresh tokens and exposes a redacted snapshot;
5
+ * clients use `access` tokens directly and call back to the broker when a
6
+ * credential expires or a 401 surfaces on a supposedly-fresh credential.
7
+ */
8
+ import type { AuthCredential, AuthCredentialSnapshot, AuthCredentialSnapshotEntry, DisabledCredentialSummary, StoredCredentialBlock } from "../auth-storage.js";
9
+ import type { ClientUsageClientSummary, ClientUsageReport, UsageHistoryEntry, UsageReport } from "../usage.js";
10
+ /** GET /v1/healthz response body. */
11
+ export interface HealthzResponse {
12
+ ok: boolean;
13
+ version?: string;
14
+ }
15
+ export interface RefresherSchedule {
16
+ enabled: boolean;
17
+ intervalMs: number;
18
+ skewMs: number;
19
+ nextSweepInMs: number;
20
+ }
21
+ export type CredentialBlockSnapshot = Omit<StoredCredentialBlock, "credentialId">;
22
+ export type SnapshotEntry = AuthCredentialSnapshotEntry & {
23
+ rotatesInMs: number | null;
24
+ blocks?: CredentialBlockSnapshot[];
25
+ };
26
+ /** GET /v1/snapshot response body. */
27
+ export interface SnapshotResponse extends Omit<AuthCredentialSnapshot, "credentials"> {
28
+ serverNowMs: number;
29
+ refresher: RefresherSchedule;
30
+ credentials: SnapshotEntry[];
31
+ }
32
+ /** GET /v1/usage response body — matches the local `AuthStorage.fetchUsageReports` shape. */
33
+ export interface UsageResponse {
34
+ generatedAt: number;
35
+ reports: UsageReport[];
36
+ }
37
+ /**
38
+ * GET /v1/usage/history response body. Entries come from the broker host's
39
+ * durable `usage_history` — the broker performs every upstream usage fetch in
40
+ * broker deployments, so this is the only complete utilization record.
41
+ */
42
+ export interface UsageHistoryResponse {
43
+ generatedAt: number;
44
+ entries: UsageHistoryEntry[];
45
+ }
46
+ /** POST /v1/usage/observed request body — one client's batched observed usage. */
47
+ export type ClientUsageReportRequest = ClientUsageReport;
48
+ /** POST /v1/usage/observed response body. */
49
+ export interface ClientUsageReportResponse {
50
+ ok: boolean;
51
+ }
52
+ /** GET /v1/usage/clients response body — per-client token burn aggregates. */
53
+ export interface ClientUsageSummaryResponse {
54
+ generatedAt: number;
55
+ clients: ClientUsageClientSummary[];
56
+ }
57
+ /** POST /v1/credential/:id/refresh response body. */
58
+ export interface CredentialRefreshResponse {
59
+ entry: AuthCredentialSnapshotEntry;
60
+ }
61
+ /** POST /v1/credential/:id/disable request body. */
62
+ export interface CredentialDisableRequest {
63
+ cause: string;
64
+ }
65
+ /** POST /v1/credential/:id/disable response body. */
66
+ export interface CredentialDisableResponse {
67
+ ok: boolean;
68
+ }
69
+ /** GET /v1/credentials/disabled response body — tombstones of auto-disabled rows. */
70
+ export interface DisabledCredentialsResponse {
71
+ generatedAt: number;
72
+ disabled: DisabledCredentialSummary[];
73
+ }
74
+ /** POST /v1/credential/:id/block request body. */
75
+ export type CredentialBlockRequest = CredentialBlockSnapshot;
76
+ /** POST /v1/credential/:id/block response body. */
77
+ export interface CredentialBlockResponse {
78
+ ok: boolean;
79
+ }
80
+ /** DELETE /v1/credential/:id/blocks response body. */
81
+ export interface CredentialBlocksDeleteResponse {
82
+ ok: boolean;
83
+ }
84
+ /** POST /v1/usage/stale response body. */
85
+ export interface UsageStaleResponse {
86
+ ok: boolean;
87
+ }
88
+ /**
89
+ * POST /v1/credential request body. The OAuth `refresh` must be the *real*
90
+ * refresh token (not the sentinel) — the broker is the canonical writer.
91
+ */
92
+ export interface CredentialUploadRequest {
93
+ provider: string;
94
+ credential: AuthCredential;
95
+ }
96
+ /** POST /v1/credential response body — redacted snapshot of the provider's rows after upsert. */
97
+ export interface CredentialUploadResponse {
98
+ entries: AuthCredentialSnapshotEntry[];
99
+ }
100
+ /**
101
+ * SSE event kinds emitted on `GET /v1/snapshot/stream`. The same value is set
102
+ * as the SSE `event:` name (load-bearing for clients) **and** embedded as a
103
+ * `kind` field inside the JSON body so a Zod discriminated union can validate
104
+ * the payload without consulting the line metadata.
105
+ */
106
+ export type SnapshotStreamEventKind = "snapshot" | "entry" | "removed";
107
+ /** Initial frame emitted on connect — the full {@link SnapshotResponse}. */
108
+ export interface SnapshotStreamSnapshotEvent extends SnapshotResponse {
109
+ kind: "snapshot";
110
+ }
111
+ /** Single credential added/changed (upsert or refresh). */
112
+ export interface SnapshotStreamEntryEvent {
113
+ kind: "entry";
114
+ generation: number;
115
+ serverNowMs: number;
116
+ refresher: RefresherSchedule;
117
+ entry: SnapshotEntry;
118
+ }
119
+ /** Single credential disabled/deleted. */
120
+ export interface SnapshotStreamRemovedEvent {
121
+ kind: "removed";
122
+ generation: number;
123
+ serverNowMs: number;
124
+ refresher: RefresherSchedule;
125
+ id: number;
126
+ }
127
+ /** Discriminated union of every event the snapshot stream emits. */
128
+ export type SnapshotStreamEvent = SnapshotStreamSnapshotEvent | SnapshotStreamEntryEvent | SnapshotStreamRemovedEvent;
129
+ /**
130
+ * Default bearer-protected route prefix. The broker exposes `/v1/healthz`
131
+ * unauthenticated for liveness probes; everything else requires a bearer.
132
+ */
133
+ export declare const AUTH_BROKER_API_PREFIX = "/v1";
134
+ /** Request header used by clients to advertise optional auth-broker protocol features. */
135
+ export declare const AUTH_BROKER_CAPABILITIES_HEADER = "OMP-Auth-Broker-Capabilities";
136
+ /** Client understands independent Codex `chat` and `spark` credential-block scopes. */
137
+ export declare const AUTH_BROKER_CAPABILITY_CODEX_METER_BLOCK_SCOPES = "codex-meter-block-scopes";
138
+ /** Default port when none is configured. Loopback-only, no external exposure. */
139
+ export declare const DEFAULT_AUTH_BROKER_BIND = "127.0.0.1:8765";
140
+ /** Default broker→provider refresh skew. Refresh credentials this close to expiry. */
141
+ export declare const DEFAULT_REFRESH_SKEW_MS: number;
142
+ /** Default broker refresh-loop cadence. */
143
+ export declare const DEFAULT_REFRESH_INTERVAL_MS = 60000;
144
+ /** Default freshness window for the encrypted local broker snapshot cache. */
145
+ export declare const DEFAULT_SNAPSHOT_CACHE_TTL_MS: number;
146
+ /** Keepalive cadence for `GET /v1/snapshot/stream` SSE comments. */
147
+ export declare const DEFAULT_STREAM_KEEPALIVE_MS = 20000;
148
+ /**
149
+ * Bun.serve `idleTimeout` (seconds) used by the broker. Default Bun idle
150
+ * timeout (10s) would close long-lived SSE connections between keepalives.
151
+ */
152
+ export declare const DEFAULT_SERVER_IDLE_TIMEOUT_S = 255;
@@ -0,0 +1,53 @@
1
+ /**
2
+ * ArkType schemas for the auth-broker wire protocol.
3
+ *
4
+ * Shared between the server (validates inbound request bodies) and the client
5
+ * (validates responses from the broker). Schemas mirror the TypeScript types
6
+ * in `./types.ts` 1:1; the types remain the source of truth for static typing,
7
+ * and `Type` is asserted-compatible with them where possible.
8
+ *
9
+ * Envelope and fixed-shape schemas use `"+": "reject"` so unknown keys are
10
+ * rejected — the previous implementation used a hand-rolled `hasOnlyFields`
11
+ * allowlist for the same effect. The OAuth credential schema is the deliberate
12
+ * exception (standard type keeps extra keys): it preserves provider-specific extension fields so
13
+ * they round-trip through the broker instead of being dropped (see below).
14
+ */
15
+ import { type Type } from "@linxiraos/pi-omptype";
16
+ import { type ApiKeyCredential, type AuthCredential, type AuthCredentialSnapshotEntry, type DisabledCredentialSummary, type OAuthCredential, type RemoteOAuthCredential, type SnapshotCredential } from "../auth-storage.js";
17
+ import type { ClientUsageReportRequest, ClientUsageReportResponse, ClientUsageSummaryResponse, CredentialBlockRequest, CredentialBlockResponse, CredentialBlockSnapshot, CredentialBlocksDeleteResponse, CredentialDisableResponse, CredentialRefreshResponse, CredentialUploadRequest, CredentialUploadResponse, DisabledCredentialsResponse, HealthzResponse, RefresherSchedule, SnapshotEntry, SnapshotResponse, SnapshotStreamEntryEvent, SnapshotStreamEvent, SnapshotStreamRemovedEvent, SnapshotStreamSnapshotEvent, UsageHistoryResponse, UsageResponse, UsageStaleResponse } from "./types.js";
18
+ export interface AuthBrokerWireSchemas {
19
+ readonly oauthCredentialSchema: Type<OAuthCredential>;
20
+ readonly remoteOauthCredentialSchema: Type<RemoteOAuthCredential>;
21
+ readonly apiKeyCredentialSchema: Type<ApiKeyCredential>;
22
+ readonly writableAuthCredentialSchema: Type<AuthCredential>;
23
+ readonly snapshotCredentialSchema: Type<SnapshotCredential>;
24
+ readonly credentialSnapshotEntrySchema: Type<AuthCredentialSnapshotEntry>;
25
+ readonly credentialBlockSnapshotSchema: Type<CredentialBlockSnapshot>;
26
+ readonly snapshotEntrySchema: Type<SnapshotEntry>;
27
+ readonly refresherScheduleSchema: Type<RefresherSchedule>;
28
+ readonly snapshotResponseSchema: Type<SnapshotResponse>;
29
+ readonly snapshotStreamSnapshotEventSchema: Type<SnapshotStreamSnapshotEvent>;
30
+ readonly snapshotStreamEntryEventSchema: Type<SnapshotStreamEntryEvent>;
31
+ readonly snapshotStreamRemovedEventSchema: Type<SnapshotStreamRemovedEvent>;
32
+ readonly snapshotStreamEventSchema: Type<SnapshotStreamEvent>;
33
+ readonly healthzResponseSchema: Type<HealthzResponse>;
34
+ readonly usageResponseSchema: Type<UsageResponse>;
35
+ readonly usageHistoryResponseSchema: Type<UsageHistoryResponse>;
36
+ readonly clientUsageReportRequestSchema: Type<ClientUsageReportRequest>;
37
+ readonly clientUsageReportResponseSchema: Type<ClientUsageReportResponse>;
38
+ readonly clientUsageSummaryResponseSchema: Type<ClientUsageSummaryResponse>;
39
+ readonly credentialRefreshResponseSchema: Type<CredentialRefreshResponse>;
40
+ readonly credentialDisableRequestSchema: Type<{
41
+ cause?: string;
42
+ }>;
43
+ readonly credentialDisableResponseSchema: Type<CredentialDisableResponse>;
44
+ readonly disabledCredentialSummarySchema: Type<DisabledCredentialSummary>;
45
+ readonly disabledCredentialsResponseSchema: Type<DisabledCredentialsResponse>;
46
+ readonly credentialBlockRequestSchema: Type<CredentialBlockRequest>;
47
+ readonly credentialBlockResponseSchema: Type<CredentialBlockResponse>;
48
+ readonly credentialBlocksDeleteResponseSchema: Type<CredentialBlocksDeleteResponse>;
49
+ readonly usageStaleResponseSchema: Type<UsageStaleResponse>;
50
+ readonly credentialUploadRequestSchema: Type<CredentialUploadRequest>;
51
+ readonly credentialUploadResponseSchema: Type<CredentialUploadResponse>;
52
+ }
53
+ export declare function getAuthBrokerWireSchemas(): AuthBrokerWireSchemas;
@@ -0,0 +1,5 @@
1
+ export declare const oauthCredentialSchema: import("@linxiraos/pi-omptype").Type<import("../index.js").OAuthCredential, import("../index.js").OAuthCredential>, remoteOauthCredentialSchema: import("@linxiraos/pi-omptype").Type<import("../index.js").RemoteOAuthCredential, import("../index.js").RemoteOAuthCredential>, apiKeyCredentialSchema: import("@linxiraos/pi-omptype").Type<import("../index.js").ApiKeyCredential, import("../index.js").ApiKeyCredential>, writableAuthCredentialSchema: import("@linxiraos/pi-omptype").Type<import("../index.js").AuthCredential, import("../index.js").AuthCredential>, snapshotCredentialSchema: import("@linxiraos/pi-omptype").Type<import("../index.js").SnapshotCredential, import("../index.js").SnapshotCredential>, credentialSnapshotEntrySchema: import("@linxiraos/pi-omptype").Type<import("../index.js").AuthCredentialSnapshotEntry, import("../index.js").AuthCredentialSnapshotEntry>, credentialBlockSnapshotSchema: import("@linxiraos/pi-omptype").Type<import("./types.js").CredentialBlockSnapshot, import("./types.js").CredentialBlockSnapshot>, snapshotEntrySchema: import("@linxiraos/pi-omptype").Type<import("./types.js").SnapshotEntry, import("./types.js").SnapshotEntry>, refresherScheduleSchema: import("@linxiraos/pi-omptype").Type<import("./types.js").RefresherSchedule, import("./types.js").RefresherSchedule>, snapshotResponseSchema: import("@linxiraos/pi-omptype").Type<import("./types.js").SnapshotResponse, import("./types.js").SnapshotResponse>, snapshotStreamSnapshotEventSchema: import("@linxiraos/pi-omptype").Type<import("./types.js").SnapshotStreamSnapshotEvent, import("./types.js").SnapshotStreamSnapshotEvent>, snapshotStreamEntryEventSchema: import("@linxiraos/pi-omptype").Type<import("./types.js").SnapshotStreamEntryEvent, import("./types.js").SnapshotStreamEntryEvent>, snapshotStreamRemovedEventSchema: import("@linxiraos/pi-omptype").Type<import("./types.js").SnapshotStreamRemovedEvent, import("./types.js").SnapshotStreamRemovedEvent>, snapshotStreamEventSchema: import("@linxiraos/pi-omptype").Type<import("./types.js").SnapshotStreamEvent, import("./types.js").SnapshotStreamEvent>, healthzResponseSchema: import("@linxiraos/pi-omptype").Type<import("./types.js").HealthzResponse, import("./types.js").HealthzResponse>, usageResponseSchema: import("@linxiraos/pi-omptype").Type<import("./types.js").UsageResponse, import("./types.js").UsageResponse>, usageHistoryResponseSchema: import("@linxiraos/pi-omptype").Type<import("./types.js").UsageHistoryResponse, import("./types.js").UsageHistoryResponse>, clientUsageReportRequestSchema: import("@linxiraos/pi-omptype").Type<import("../index.js").ClientUsageReport, import("../index.js").ClientUsageReport>, clientUsageReportResponseSchema: import("@linxiraos/pi-omptype").Type<import("./types.js").ClientUsageReportResponse, import("./types.js").ClientUsageReportResponse>, clientUsageSummaryResponseSchema: import("@linxiraos/pi-omptype").Type<import("./types.js").ClientUsageSummaryResponse, import("./types.js").ClientUsageSummaryResponse>, credentialRefreshResponseSchema: import("@linxiraos/pi-omptype").Type<import("./types.js").CredentialRefreshResponse, import("./types.js").CredentialRefreshResponse>, credentialDisableRequestSchema: import("@linxiraos/pi-omptype").Type<{
2
+ cause?: string;
3
+ }, {
4
+ cause?: string;
5
+ }>, credentialDisableResponseSchema: import("@linxiraos/pi-omptype").Type<import("./types.js").CredentialDisableResponse, import("./types.js").CredentialDisableResponse>, disabledCredentialSummarySchema: import("@linxiraos/pi-omptype").Type<import("../index.js").DisabledCredentialSummary, import("../index.js").DisabledCredentialSummary>, disabledCredentialsResponseSchema: import("@linxiraos/pi-omptype").Type<import("./types.js").DisabledCredentialsResponse, import("./types.js").DisabledCredentialsResponse>, credentialBlockRequestSchema: import("@linxiraos/pi-omptype").Type<import("./types.js").CredentialBlockSnapshot, import("./types.js").CredentialBlockSnapshot>, credentialBlockResponseSchema: import("@linxiraos/pi-omptype").Type<import("./types.js").CredentialBlockResponse, import("./types.js").CredentialBlockResponse>, credentialBlocksDeleteResponseSchema: import("@linxiraos/pi-omptype").Type<import("./types.js").CredentialBlocksDeleteResponse, import("./types.js").CredentialBlocksDeleteResponse>, usageStaleResponseSchema: import("@linxiraos/pi-omptype").Type<import("./types.js").UsageStaleResponse, import("./types.js").UsageStaleResponse>, credentialUploadRequestSchema: import("@linxiraos/pi-omptype").Type<import("./types.js").CredentialUploadRequest, import("./types.js").CredentialUploadRequest>, credentialUploadResponseSchema: import("@linxiraos/pi-omptype").Type<import("./types.js").CredentialUploadResponse, import("./types.js").CredentialUploadResponse>;
@@ -0,0 +1,56 @@
1
+ import type { Api, AssistantMessage, Model } from "../types.js";
2
+ export declare function json(status: number, body: unknown, headers?: Record<string, string>): Response;
3
+ /**
4
+ * Diagnostic response headers for translated inference requests, mirroring the
5
+ * names existing gateway-aware clients already parse: `x-request-id` /
6
+ * `request-id` (surfaced as `_request_id` by the OpenAI and Anthropic SDKs,
7
+ * matches the gateway log line), LiteLLM's model-resolution and cost headers,
8
+ * and OpenAI's `openai-processing-ms`. Model/request-id headers are always
9
+ * present; `message` — the final assistant message, available only on
10
+ * non-streaming responses — adds the computed cost, and `startedAt` the wall
11
+ * time. Streaming responses send headers before usage exists, so they carry
12
+ * only the identity headers.
13
+ */
14
+ export declare function gatewayResponseHeaders(model: Model<Api>, info: {
15
+ requestId: string;
16
+ message?: AssistantMessage;
17
+ startedAt?: number;
18
+ }): Record<string, string>;
19
+ export declare function resolvePeer(req: Request): string;
20
+ /**
21
+ * Constant-time byte comparison. Falls back to a manual XOR accumulator if
22
+ * `node:crypto.timingSafeEqual` isn't available. Always processes every byte
23
+ * of the longer input so length itself doesn't leak via timing.
24
+ */
25
+ export declare function timingSafeEqual(a: Uint8Array, b: Uint8Array): boolean;
26
+ export declare function isAuthorized(req: Request, tokens: ReadonlySet<string>): boolean;
27
+ /**
28
+ * Extract allow-listed passthrough headers from an inbound request. Keys are
29
+ * lowercased; empty values are dropped. Called once per request in
30
+ * `handleFormatEndpoint`; parsers then read `options.headers`.
31
+ */
32
+ export declare function captureRequestHeaders(headers: Headers): Record<string, string>;
33
+ /**
34
+ * Resolve a prompt-cache identity from inbound request body + headers.
35
+ * Order of precedence (first wins):
36
+ * 1. Body `prompt_cache_key`
37
+ * 2. Body `metadata.{prompt_cache_key,session_id,conversation_id}`
38
+ * 3. Header `x-prompt-cache-key`
39
+ * 4. Header `session_id` / `conversation_id` (Codex / ChatGPT-OAuth surface)
40
+ * 5. Header `x-session-id` / `x-conversation-id` (common informal)
41
+ * Returns undefined when none present; the gateway then derives a stable
42
+ * UUID from the request's stable parts.
43
+ */
44
+ export declare function resolvePromptCacheKey(body: unknown, headers?: Headers): string | undefined;
45
+ /**
46
+ * CORS headers for the auth-gateway. Currently echoes a wildcard origin; the
47
+ * request is accepted so future tightening can mirror `Origin` without
48
+ * threading the request through every caller.
49
+ */
50
+ export declare function corsHeaders(_req: Request): Record<string, string>;
51
+ /**
52
+ * Re-emit `response` with CORS headers merged. The original response body is
53
+ * passed through unchanged. Used by the gateway wrapper so every outbound
54
+ * format-endpoint response carries the same CORS surface as the preflight.
55
+ */
56
+ export declare function withCors(response: Response, req: Request): Response;
@@ -0,0 +1,3 @@
1
+ export * from "./http.js";
2
+ export * from "./server.js";
3
+ export * from "./types.js";
@@ -0,0 +1,36 @@
1
+ /**
2
+ * omp auth-gateway HTTP server.
3
+ *
4
+ * Accepts any provider-format request (OpenAI chat-completions, Anthropic
5
+ * messages, OpenAI Responses) and dispatches through pi-ai's `streamSimple()`
6
+ * — which handles credential injection, anthropic-beta headers, codex
7
+ * websocket transport, and all the per-provider intricacies. The gateway is
8
+ * pure protocol translation: foreign wire → omp Context → pi-ai stream() →
9
+ * omp events → foreign wire.
10
+ *
11
+ * Endpoints:
12
+ * GET /healthz → unauth; ok + version
13
+ * GET /v1/usage → aggregated provider usage (5-min per-credential cache via AuthStorage)
14
+ * GET /v1/credentials/check → per-credential auth probe (diagnose 401s in a multi-account pool)
15
+ * GET /v1/models → list known models from the registry
16
+ * POST /v1/chat/completions → OpenAI chat-completions in/out
17
+ * POST /v1/messages → Anthropic messages in/out
18
+ * POST /v1/responses → OpenAI Responses in/out
19
+ */
20
+ import type { AuthStorage } from "../auth-storage.js";
21
+ import type { Api, Model } from "../types.js";
22
+ import type { AuthGatewayServerHandle, AuthGatewayServerOptions } from "./types.js";
23
+ export type ModelResolver = (modelId: string) => Model<Api> | undefined;
24
+ export interface AuthGatewayBootOptions extends AuthGatewayServerOptions {
25
+ /** Source of credentials. Caller wires this to a broker-backed AuthStorage. */
26
+ storage: AuthStorage;
27
+ /**
28
+ * Resolve a client-requested model id to a pi-ai Model. Caller supplies
29
+ * this from a ModelRegistry (lives in `coding-agent` to avoid an inverse
30
+ * dependency in `pi-ai`).
31
+ */
32
+ resolveModel: ModelResolver;
33
+ /** Optional supplier for `/v1/models` listing. Returns the full model array. */
34
+ listModels?: () => Iterable<Model<Api>>;
35
+ }
36
+ export declare function startAuthGateway(opts: AuthGatewayBootOptions): AuthGatewayServerHandle;
@@ -0,0 +1,127 @@
1
+ import type { Effort } from "@linxiraos/pi-catalog/effort";
2
+ import type { AssistantMessage, AssistantMessageEventStream, CacheRetention, Context, OpenAIResponseInclude, ServiceTier, TokenTaskBudget } from "../types.js";
3
+ /**
4
+ * Wire types for the omp auth-gateway.
5
+ *
6
+ * The gateway sits between unauthenticated clients (containerized omp,
7
+ * llm-git, …) and the broker. It accepts provider-format HTTP requests
8
+ * (OpenAI chat-completions / Anthropic messages / OpenAI Responses),
9
+ * dispatches them through pi-ai's `streamSimple()`, and translates the
10
+ * canonical event stream back to the matching wire format. The gateway
11
+ * injects `Authorization` server-side so clients never see access tokens.
12
+ */
13
+ /** Default bind. Loopback-only — front with reverse proxy for remote access. */
14
+ export declare const DEFAULT_AUTH_GATEWAY_BIND = "127.0.0.1:4000";
15
+ export type AuthGatewayToolChoice = "auto" | "none" | "required" | {
16
+ name: string;
17
+ } | {
18
+ type: "computer";
19
+ };
20
+ export interface AuthGatewayParsedRequestOptions {
21
+ maxOutputTokens?: number;
22
+ temperature?: number;
23
+ topP?: number;
24
+ topK?: number;
25
+ /** OpenAI nucleus-min sampling (`min_p`). */
26
+ minP?: number;
27
+ /** Anthropic `stop_sequences` / OpenAI `stop`. */
28
+ stopSequences?: string[];
29
+ /** OpenAI `presence_penalty`. */
30
+ presencePenalty?: number;
31
+ /** OpenAI `frequency_penalty`. */
32
+ frequencyPenalty?: number;
33
+ /** OpenRouter / vLLM `repetition_penalty`. */
34
+ repetitionPenalty?: number;
35
+ /** OpenAI deterministic-sampling `seed`. */
36
+ seed?: number;
37
+ /** OpenAI `logit_bias` map (token id → bias). */
38
+ logitBias?: Record<string, number>;
39
+ /** OpenAI `response_format` (text | json_object | json_schema). Opaque passthrough. */
40
+ responseFormat?: unknown;
41
+ toolChoice?: AuthGatewayToolChoice;
42
+ /** OpenAI `parallel_tool_calls`. */
43
+ parallelToolCalls?: boolean;
44
+ /** OpenAI Responses fields requested in the response payload. */
45
+ include?: OpenAIResponseInclude[];
46
+ /** Effort-level reasoning request (OpenAI Responses / Chat `reasoning_effort`). */
47
+ reasoning?: Effort;
48
+ /** Force-disable reasoning (Anthropic `thinking: { type: "disabled" }`). */
49
+ disableReasoning?: boolean;
50
+ /**
51
+ * Explicit Anthropic `thinking.budget_tokens`. Mirrors Rust's
52
+ * `resolve_thinking_budget`: pins onto whichever effort the client
53
+ * requested (defaulting to High when unspecified). Preferred over the
54
+ * removed legacy single-number `thinkingBudget` for new code.
55
+ */
56
+ explicitThinkingBudgetTokens?: number;
57
+ /** Per-effort thinking budget map. */
58
+ thinkingBudgets?: Partial<Record<Effort, number>>;
59
+ /** Suppress the provider's reasoning summary stream. */
60
+ hideThinkingSummary?: boolean;
61
+ /** Anthropic `output_config.task_budget` advisory loop budget. */
62
+ taskBudget?: TokenTaskBudget;
63
+ /** OpenAI service tier (auto|default|flex|scale|priority). */
64
+ serviceTier?: ServiceTier;
65
+ /** Cache retention hint derived from inbound `cache_control` markers. */
66
+ cacheRetention?: CacheRetention;
67
+ /** OpenAI Responses `prompt_cache_key`; also seeds provider routing when no separate session id exists. */
68
+ promptCacheKey?: string;
69
+ /** OpenAI Responses `previous_response_id` for response chaining. */
70
+ previousResponseId?: string;
71
+ /** OpenAI / abuse-tracking `user` field. */
72
+ user?: string;
73
+ /**
74
+ * Provider-specific metadata. Anthropic uses `metadata.user_id`; OpenRouter
75
+ * carries routing hints; xAI uses `search_parameters`; OpenAI accepts a
76
+ * free-form bag. The gateway forwards as-is.
77
+ */
78
+ metadata?: Record<string, unknown>;
79
+ /**
80
+ * Captured allow-listed passthrough headers (anthropic-beta,
81
+ * anthropic-version, openai-organization, openai-project, openai-beta,
82
+ * x-stainless-*). Keys are lowercased.
83
+ */
84
+ headers?: Record<string, string>;
85
+ /**
86
+ * Escape hatch for provider-specific request controls that don't yet have a
87
+ * first-class field. Prefer adding a typed field over widening this.
88
+ */
89
+ extra?: Record<string, unknown>;
90
+ }
91
+ export interface AuthGatewayParsedRequest {
92
+ modelId: string;
93
+ context: Context;
94
+ stream: boolean;
95
+ options: AuthGatewayParsedRequestOptions;
96
+ }
97
+ export interface AuthGatewayStreamControl {
98
+ /** Gateway request signal. Encoders stop producing frames when it aborts. */
99
+ signal?: AbortSignal;
100
+ /** Called when the HTTP response body is cancelled by the client. */
101
+ onCancel?: (reason?: unknown) => void;
102
+ }
103
+ export interface AuthGatewayFormatModule {
104
+ parseRequest(body: unknown, headers?: Headers): AuthGatewayParsedRequest;
105
+ encodeResponse(message: AssistantMessage, requestedModelId: string): Record<string, unknown>;
106
+ encodeStream(events: AssistantMessageEventStream, requestedModelId: string, options?: AuthGatewayParsedRequestOptions, control?: AuthGatewayStreamControl): ReadableStream<Uint8Array>;
107
+ /**
108
+ * Emit a protocol-specific error envelope. OpenAI returns
109
+ * `{ error: { message, type } }`; Anthropic returns
110
+ * `{ type: "error", error: { type, message } }`.
111
+ */
112
+ formatError(status: number, type: string, message: string): Response;
113
+ }
114
+ export interface AuthGatewayServerOptions {
115
+ /** Listen address. Default `127.0.0.1:4000`. */
116
+ bind?: string;
117
+ /** Accept any of these bearer tokens. Empty allows unauthenticated calls. */
118
+ bearerTokens: string[];
119
+ /** Version surfaced on `/healthz`. */
120
+ version?: string;
121
+ }
122
+ export interface AuthGatewayServerHandle {
123
+ url: string;
124
+ port: number;
125
+ hostname: string;
126
+ close(): Promise<void>;
127
+ }
@@ -0,0 +1,150 @@
1
+ import type { OAuthAccess } from "./auth-storage.js";
2
+ import { isAuthRetryableError } from "./error/auth-classify.js";
3
+ /**
4
+ * Context passed to an {@link ApiKeyResolver} on each resolution attempt.
5
+ *
6
+ * The `error`/`lastChance` pair preserves the legacy a/b/c resolver contract
7
+ * shared by streaming ({@link streamSimple}) and non-streaming ({@link withAuth})
8
+ * drivers:
9
+ * - `error === undefined` → **initial resolve** (no force-refresh; cheap, may
10
+ * return a locally-cached not-yet-expired token).
11
+ * - `error !== undefined && !lastChance` → **step (b): refresh the SAME
12
+ * account** (force a token re-mint / await an in-flight broker refresh).
13
+ * - `error !== undefined && lastChance` → **step (c): switch account**
14
+ * (invalidate/usage-limit the current credential and rotate to a sibling).
15
+ *
16
+ * Current drivers preserve that bounded a/b/c sequence for ordinary 401/auth
17
+ * failures. 403/usage-limit failures skip refresh and may repeat step (c)
18
+ * until the resolver returns `undefined`, cycles, or hits
19
+ * {@link AUTH_RETRY_MAX_ATTEMPTS}.
20
+ */
21
+ export interface ApiKeyResolveContext {
22
+ /** True when the resolver should rotate to a sibling credential. */
23
+ lastChance: boolean;
24
+ /** The auth error that triggered this re-resolution, or `undefined` on the initial resolve. */
25
+ error: unknown;
26
+ /** Bearer used by the failed attempt, when the caller can expose it. */
27
+ previousKey?: string;
28
+ /** Caller cancel signal, threaded into any credential refresh / rotation work. */
29
+ signal?: AbortSignal;
30
+ }
31
+ /**
32
+ * Resolves the API key to send for a request, retried through the a/b/c policy
33
+ * described on {@link ApiKeyResolveContext}.
34
+ */
35
+ export type ApiKeyResolver = (ctx: ApiKeyResolveContext) => Promise<string | undefined> | string | undefined;
36
+ /** A static bearer string, or a {@link ApiKeyResolver} that mints/rotates one. */
37
+ export type ApiKey = string | ApiKeyResolver;
38
+ /** Narrows {@link ApiKey} to its resolver form. */
39
+ export declare function isApiKeyResolver(key: ApiKey | undefined): key is ApiKeyResolver;
40
+ /**
41
+ * Performs the initial resolve of an {@link ApiKey} (`error: undefined`,
42
+ * `lastChance: false`). Static keys pass through unchanged.
43
+ */
44
+ export declare function resolveApiKeyOnce(key: ApiKey | undefined, signal?: AbortSignal): Promise<string | undefined>;
45
+ /**
46
+ * Wraps a resolver with a bearer that was already selected for this request.
47
+ *
48
+ * Callers that preflight credentials can pass the returned resolver to the
49
+ * auth-retry driver without making the driver know about that preflight: the
50
+ * first initial resolution reuses `seed`, and all later resolutions delegate to
51
+ * `resolver`.
52
+ */
53
+ export declare function seedApiKeyResolver(seed: string | undefined, resolver: ApiKeyResolver): ApiKeyResolver;
54
+ export { isAuthRetryableError };
55
+ /**
56
+ * Legacy bounded a/b/c retry sequence retained for public compatibility:
57
+ * `false` → refresh-same, `true` → rotate/switch. Current drivers consume it
58
+ * once for ordinary 401/auth failures; usage/account-limit failures may repeat
59
+ * sibling rotation until a termination guard fires.
60
+ */
61
+ export declare const AUTH_RETRY_STEPS: readonly boolean[];
62
+ export declare const AUTH_RETRY_MAX_ATTEMPTS = 64;
63
+ /** Resolve a single retry step, swallowing resolver failures into `undefined`. */
64
+ export declare function resolveRetryKey(resolver: ApiKeyResolver, lastChance: boolean, error: unknown, signal?: AbortSignal, previousKey?: string): Promise<string | undefined>;
65
+ export interface AuthRetryKeyState {
66
+ /** Bearer strings already sent during this logical operation. */
67
+ attemptedKeys: Set<string>;
68
+ /** Bearer used by the most recent failed attempt. */
69
+ lastKey: string;
70
+ /** Whether the current credential already consumed its 401 refresh-same retry. */
71
+ refreshedCurrent: boolean;
72
+ /** Whether the legacy non-usage auth path already switched to one sibling. */
73
+ legacyAuthSwitchUsed: boolean;
74
+ /** Total outbound attempts accepted for this logical operation, including the initial request. */
75
+ attempts: number;
76
+ }
77
+ export declare function createAuthRetryKeyState(initialKey: string): AuthRetryKeyState;
78
+ export declare function resolveNextAuthRetryKey(state: AuthRetryKeyState, resolver: ApiKeyResolver, error: unknown, signal?: AbortSignal): Promise<string | undefined>;
79
+ /**
80
+ * Runs an auth-protected operation through the central a/b/c retry policy.
81
+ *
82
+ * - A static string key (or any non-resolver) → a single `attempt` with no
83
+ * retry (identical to the legacy static-key path).
84
+ * - A resolver → initial `attempt`, then resolver-driven retries until the
85
+ * applicable policy is exhausted, the resolver declines or cycles, or the
86
+ * operation reaches {@link AUTH_RETRY_MAX_ATTEMPTS}. Ordinary 401/auth
87
+ * failures retain one refresh-same plus one sibling switch; 403/usage-limit
88
+ * failures rotate directly through distinct siblings.
89
+ *
90
+ * Used by non-streaming consumers (image generation, web search, completion
91
+ * helpers). The streaming driver in `stream.ts` implements the same policy with
92
+ * its replay-safe buffering machinery.
93
+ */
94
+ export declare function withAuth<T>(key: ApiKey | undefined, attempt: (key: string) => Promise<T>, opts?: {
95
+ isAuthError?: (error: unknown) => boolean;
96
+ signal?: AbortSignal;
97
+ missingKeyMessage?: string;
98
+ }): Promise<T>;
99
+ /**
100
+ * Minimal structural slice of `AuthStorage` consumed by {@link withOAuthAccess}.
101
+ * Typed structurally (and importing only the `OAuthAccess` type) so this module
102
+ * never takes a runtime dependency on `./auth-storage`.
103
+ */
104
+ export interface OAuthAccessSource {
105
+ getOAuthAccess(provider: string, sessionId?: string, options?: {
106
+ forceRefresh?: boolean;
107
+ signal?: AbortSignal;
108
+ }): Promise<OAuthAccess | undefined>;
109
+ rotateSessionCredential(provider: string, sessionId: string | undefined, options?: {
110
+ error?: unknown;
111
+ signal?: AbortSignal;
112
+ apiKey?: string;
113
+ credentialId?: number;
114
+ }): Promise<boolean>;
115
+ }
116
+ export interface WithOAuthAccessOptions {
117
+ /** Session id for credential stickiness, threaded into every resolve. */
118
+ sessionId?: string;
119
+ signal?: AbortSignal;
120
+ /** Override the retryable-error classifier (default {@link isAuthRetryableError}). */
121
+ isAuthError?: (error: unknown) => boolean;
122
+ /**
123
+ * Pre-resolved access used for the initial attempt. Callers that already
124
+ * resolved access for an availability gate pass it here so the helper
125
+ * doesn't double-resolve (mirrors the gateway resolver's `initialKey`).
126
+ */
127
+ seed?: OAuthAccess;
128
+ missingAccessMessage?: string;
129
+ }
130
+ /**
131
+ * {@link withAuth} for OAuth-access consumers: runs an auth-protected
132
+ * operation through the central a/b/c retry policy, handing the attempt the
133
+ * full {@link OAuthAccess} (bearer + identity metadata: `accountId`,
134
+ * `projectId`, `enterpriseUrl`) instead of bare API-key bytes.
135
+ *
136
+ * - initial → `getOAuthAccess` (or `opts.seed`).
137
+ * - 401/auth failure → one `getOAuthAccess` with `forceRefresh: true` for the
138
+ * current account, then sibling rotation.
139
+ * - 403/usage-limit failure → `rotateSessionCredential` directly, without a
140
+ * force-refresh detour.
141
+ *
142
+ * A refresh-same step may retry a new bearer for the same credential identity;
143
+ * sibling rotation stops when it yields a credential identity
144
+ * (`credentialId ?? accessToken`) or bearer already attempted in this turn.
145
+ * All OAuth attempts share the {@link AUTH_RETRY_MAX_ATTEMPTS} ceiling.
146
+ * Non-auth errors propagate immediately. Use this instead of hand-rolled
147
+ * `getOAuthAccess` + fetch flows so 401s and usage-limits rotate credentials
148
+ * instead of failing the call.
149
+ */
150
+ export declare function withOAuthAccess<T>(storage: OAuthAccessSource, provider: string, attempt: (access: OAuthAccess) => Promise<T>, opts?: WithOAuthAccessOptions): Promise<T>;