@vib-rato/ai 0.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (525) hide show
  1. package/CHANGELOG.md +3354 -0
  2. package/README.md +1194 -0
  3. package/dist/types/adapter-internals/provider-safety-stop.d.ts +45 -0
  4. package/dist/types/api-registry.d.ts +30 -0
  5. package/dist/types/auth-broker/client.d.ts +80 -0
  6. package/dist/types/auth-broker/index.d.ts +5 -0
  7. package/dist/types/auth-broker/redact.d.ts +7 -0
  8. package/dist/types/auth-broker/refresher.d.ts +25 -0
  9. package/dist/types/auth-broker/remote-store.d.ts +153 -0
  10. package/dist/types/auth-broker/server.d.ts +32 -0
  11. package/dist/types/auth-broker/types.d.ts +132 -0
  12. package/dist/types/auth-broker/wire-schemas.d.ts +555 -0
  13. package/dist/types/auth-gateway/http.d.ts +40 -0
  14. package/dist/types/auth-gateway/index.d.ts +3 -0
  15. package/dist/types/auth-gateway/server.d.ts +70 -0
  16. package/dist/types/auth-gateway/types.d.ts +129 -0
  17. package/dist/types/auth-storage.d.ts +1074 -0
  18. package/dist/types/cli.d.ts +2 -0
  19. package/dist/types/codex-tools.d.ts +4 -0
  20. package/dist/types/context-cap-policy.d.ts +68 -0
  21. package/dist/types/core.d.ts +35 -0
  22. package/dist/types/index.d.ts +55 -0
  23. package/dist/types/model-cache.d.ts +24 -0
  24. package/dist/types/model-manager.d.ts +77 -0
  25. package/dist/types/model-pricing.d.ts +3 -0
  26. package/dist/types/model-retirements.d.ts +6 -0
  27. package/dist/types/model-thinking.d.ts +100 -0
  28. package/dist/types/models.d.ts +21 -0
  29. package/dist/types/openai-completions-compat.d.ts +34 -0
  30. package/dist/types/provider-details.d.ts +24 -0
  31. package/dist/types/provider-models/bundled-references.d.ts +4 -0
  32. package/dist/types/provider-models/descriptors.d.ts +48 -0
  33. package/dist/types/provider-models/google.d.ts +20 -0
  34. package/dist/types/provider-models/index.d.ts +5 -0
  35. package/dist/types/provider-models/ollama.d.ts +7 -0
  36. package/dist/types/provider-models/openai-compat.d.ts +293 -0
  37. package/dist/types/provider-models/special.d.ts +29 -0
  38. package/dist/types/providers/amazon-bedrock.d.ts +60 -0
  39. package/dist/types/providers/anthropic-messages-server-schema.d.ts +450 -0
  40. package/dist/types/providers/anthropic-messages-server.d.ts +17 -0
  41. package/dist/types/providers/anthropic.d.ts +280 -0
  42. package/dist/types/providers/aws-credential-config.d.ts +19 -0
  43. package/dist/types/providers/aws-credentials.d.ts +43 -0
  44. package/dist/types/providers/aws-eventstream.d.ts +38 -0
  45. package/dist/types/providers/aws-sigv4.d.ts +55 -0
  46. package/dist/types/providers/azure-openai-responses.d.ts +22 -0
  47. package/dist/types/providers/composer-discipline.d.ts +32 -0
  48. package/dist/types/providers/cursor/client-version.d.ts +10 -0
  49. package/dist/types/providers/cursor/exec-modern.d.ts +98 -0
  50. package/dist/types/providers/cursor/gen/agent_pb.d.ts +16769 -0
  51. package/dist/types/providers/cursor-pi-args.d.ts +119 -0
  52. package/dist/types/providers/cursor.d.ts +72 -0
  53. package/dist/types/providers/dashscope-token-plan-headers.d.ts +57 -0
  54. package/dist/types/providers/error-message.d.ts +27 -0
  55. package/dist/types/providers/github-copilot-headers.d.ts +40 -0
  56. package/dist/types/providers/gitlab-duo.d.ts +27 -0
  57. package/dist/types/providers/google-auth.d.ts +26 -0
  58. package/dist/types/providers/google-gemini-cli.d.ts +75 -0
  59. package/dist/types/providers/google-gemini-headers.d.ts +43 -0
  60. package/dist/types/providers/google-shared.d.ts +183 -0
  61. package/dist/types/providers/google-types.d.ts +138 -0
  62. package/dist/types/providers/google-vertex.d.ts +11 -0
  63. package/dist/types/providers/google.d.ts +4 -0
  64. package/dist/types/providers/grammar.d.ts +1 -0
  65. package/dist/types/providers/kimi.d.ts +27 -0
  66. package/dist/types/providers/kiro-api-key.d.ts +50 -0
  67. package/dist/types/providers/kiro-codewhisperer.d.ts +11 -0
  68. package/dist/types/providers/mock.d.ts +189 -0
  69. package/dist/types/providers/ollama.d.ts +41 -0
  70. package/dist/types/providers/openai-anthropic-shim.d.ts +31 -0
  71. package/dist/types/providers/openai-bounded-rate-limits.d.ts +3 -0
  72. package/dist/types/providers/openai-chat-server-schema.d.ts +1733 -0
  73. package/dist/types/providers/openai-chat-server.d.ts +16 -0
  74. package/dist/types/providers/openai-codex/constants.d.ts +26 -0
  75. package/dist/types/providers/openai-codex/request-transformer.d.ts +50 -0
  76. package/dist/types/providers/openai-codex/response-handler.d.ts +18 -0
  77. package/dist/types/providers/openai-codex-responses.d.ts +71 -0
  78. package/dist/types/providers/openai-completions-compat.d.ts +6 -0
  79. package/dist/types/providers/openai-completions.d.ts +35 -0
  80. package/dist/types/providers/openai-opencodex-responses.d.ts +10 -0
  81. package/dist/types/providers/openai-request-transform.d.ts +4 -0
  82. package/dist/types/providers/openai-responses-server-schema.d.ts +392 -0
  83. package/dist/types/providers/openai-responses-server.d.ts +17 -0
  84. package/dist/types/providers/openai-responses-shared.d.ts +106 -0
  85. package/dist/types/providers/openai-responses.d.ts +37 -0
  86. package/dist/types/providers/pi-native-client.d.ts +29 -0
  87. package/dist/types/providers/pi-native-server.d.ts +60 -0
  88. package/dist/types/providers/register-builtins.d.ts +59 -0
  89. package/dist/types/providers/synthetic.d.ts +26 -0
  90. package/dist/types/providers/transform-messages.d.ts +33 -0
  91. package/dist/types/providers/vision-guard.d.ts +8 -0
  92. package/dist/types/rate-limit-utils.d.ts +19 -0
  93. package/dist/types/stream.d.ts +45 -0
  94. package/dist/types/types.d.ts +1073 -0
  95. package/dist/types/usage/claude.d.ts +3 -0
  96. package/dist/types/usage/gemini.d.ts +2 -0
  97. package/dist/types/usage/github-copilot.d.ts +7 -0
  98. package/dist/types/usage/google-antigravity.d.ts +2 -0
  99. package/dist/types/usage/grok-cli.d.ts +17 -0
  100. package/dist/types/usage/kimi.d.ts +4 -0
  101. package/dist/types/usage/minimax-code.d.ts +2 -0
  102. package/dist/types/usage/openai-codex.d.ts +3 -0
  103. package/dist/types/usage/shared.d.ts +1 -0
  104. package/dist/types/usage/zai.d.ts +2 -0
  105. package/dist/types/usage.d.ts +264 -0
  106. package/dist/types/utils/abort.d.ts +19 -0
  107. package/dist/types/utils/anthropic-auth.d.ts +39 -0
  108. package/dist/types/utils/block-symbols.d.ts +6 -0
  109. package/dist/types/utils/discovery/antigravity.d.ts +67 -0
  110. package/dist/types/utils/discovery/codex.d.ts +38 -0
  111. package/dist/types/utils/discovery/cursor.d.ts +49 -0
  112. package/dist/types/utils/discovery/gemini.d.ts +25 -0
  113. package/dist/types/utils/discovery/index.d.ts +4 -0
  114. package/dist/types/utils/discovery/openai-compatible.d.ts +81 -0
  115. package/dist/types/utils/event-stream.d.ts +41 -0
  116. package/dist/types/utils/fallback-transport.d.ts +110 -0
  117. package/dist/types/utils/fireworks-model-id.d.ts +10 -0
  118. package/dist/types/utils/foundry.d.ts +11 -0
  119. package/dist/types/utils/h2-fetch.d.ts +22 -0
  120. package/dist/types/utils/http-inspector.d.ts +59 -0
  121. package/dist/types/utils/idle-iterator.d.ts +122 -0
  122. package/dist/types/utils/json-parse.d.ts +98 -0
  123. package/dist/types/utils/oauth/alibaba-token-plan.d.ts +19 -0
  124. package/dist/types/utils/oauth/anthropic.d.ts +41 -0
  125. package/dist/types/utils/oauth/api-key-login.d.ts +38 -0
  126. package/dist/types/utils/oauth/api-key-validation.d.ts +39 -0
  127. package/dist/types/utils/oauth/bizrouter.d.ts +1 -0
  128. package/dist/types/utils/oauth/callback-server.d.ts +80 -0
  129. package/dist/types/utils/oauth/cerebras.d.ts +1 -0
  130. package/dist/types/utils/oauth/cloudflare-ai-gateway.d.ts +18 -0
  131. package/dist/types/utils/oauth/commandcode.d.ts +1 -0
  132. package/dist/types/utils/oauth/cursor.d.ts +15 -0
  133. package/dist/types/utils/oauth/deepinfra.d.ts +1 -0
  134. package/dist/types/utils/oauth/deepseek.d.ts +10 -0
  135. package/dist/types/utils/oauth/firepass.d.ts +1 -0
  136. package/dist/types/utils/oauth/fireworks.d.ts +1 -0
  137. package/dist/types/utils/oauth/fugu.d.ts +1 -0
  138. package/dist/types/utils/oauth/github-copilot.d.ts +38 -0
  139. package/dist/types/utils/oauth/gitlab-duo.d.ts +3 -0
  140. package/dist/types/utils/oauth/glm-zcode.d.ts +71 -0
  141. package/dist/types/utils/oauth/google-antigravity.d.ts +11 -0
  142. package/dist/types/utils/oauth/google-gemini-cli.d.ts +10 -0
  143. package/dist/types/utils/oauth/google-oauth-shared.d.ts +28 -0
  144. package/dist/types/utils/oauth/huggingface.d.ts +19 -0
  145. package/dist/types/utils/oauth/index.d.ts +39 -0
  146. package/dist/types/utils/oauth/kagi.d.ts +17 -0
  147. package/dist/types/utils/oauth/kilo.d.ts +5 -0
  148. package/dist/types/utils/oauth/kimi.d.ts +17 -0
  149. package/dist/types/utils/oauth/kiro.d.ts +71 -0
  150. package/dist/types/utils/oauth/litellm.d.ts +18 -0
  151. package/dist/types/utils/oauth/lm-studio.d.ts +17 -0
  152. package/dist/types/utils/oauth/mara.d.ts +1 -0
  153. package/dist/types/utils/oauth/minimax-code.d.ts +28 -0
  154. package/dist/types/utils/oauth/moonshot.d.ts +1 -0
  155. package/dist/types/utils/oauth/nanogpt.d.ts +1 -0
  156. package/dist/types/utils/oauth/nvidia.d.ts +18 -0
  157. package/dist/types/utils/oauth/ollama-cloud.d.ts +2 -0
  158. package/dist/types/utils/oauth/ollama.d.ts +18 -0
  159. package/dist/types/utils/oauth/openai-codex.d.ts +21 -0
  160. package/dist/types/utils/oauth/opencode.d.ts +18 -0
  161. package/dist/types/utils/oauth/opengateway.d.ts +1 -0
  162. package/dist/types/utils/oauth/openrouter.d.ts +1 -0
  163. package/dist/types/utils/oauth/parallel.d.ts +17 -0
  164. package/dist/types/utils/oauth/perplexity.d.ts +4 -0
  165. package/dist/types/utils/oauth/pkce.d.ts +8 -0
  166. package/dist/types/utils/oauth/qianfan.d.ts +17 -0
  167. package/dist/types/utils/oauth/qwen-portal.d.ts +19 -0
  168. package/dist/types/utils/oauth/sglang.d.ts +16 -0
  169. package/dist/types/utils/oauth/synthetic.d.ts +1 -0
  170. package/dist/types/utils/oauth/tavily.d.ts +17 -0
  171. package/dist/types/utils/oauth/together.d.ts +1 -0
  172. package/dist/types/utils/oauth/types.d.ts +56 -0
  173. package/dist/types/utils/oauth/venice.d.ts +18 -0
  174. package/dist/types/utils/oauth/vercel-ai-gateway.d.ts +18 -0
  175. package/dist/types/utils/oauth/vllm.d.ts +16 -0
  176. package/dist/types/utils/oauth/xai.d.ts +30 -0
  177. package/dist/types/utils/oauth/xiaomi.d.ts +25 -0
  178. package/dist/types/utils/oauth/zai.d.ts +18 -0
  179. package/dist/types/utils/oauth/zenmux.d.ts +1 -0
  180. package/dist/types/utils/overflow.d.ts +14 -0
  181. package/dist/types/utils/parse-bind.d.ts +26 -0
  182. package/dist/types/utils/provider-response.d.ts +6 -0
  183. package/dist/types/utils/provider-safety-stop.d.ts +8 -0
  184. package/dist/types/utils/proxy.d.ts +7 -0
  185. package/dist/types/utils/retry-after.d.ts +3 -0
  186. package/dist/types/utils/retry-budget.d.ts +1 -0
  187. package/dist/types/utils/retry.d.ts +29 -0
  188. package/dist/types/utils/schema/adapt.d.ts +24 -0
  189. package/dist/types/utils/schema/compatibility.d.ts +30 -0
  190. package/dist/types/utils/schema/dereference.d.ts +11 -0
  191. package/dist/types/utils/schema/draft.d.ts +10 -0
  192. package/dist/types/utils/schema/equality.d.ts +4 -0
  193. package/dist/types/utils/schema/fields.d.ts +49 -0
  194. package/dist/types/utils/schema/index.d.ts +14 -0
  195. package/dist/types/utils/schema/json-schema-validator.d.ts +12 -0
  196. package/dist/types/utils/schema/meta-validator.d.ts +2 -0
  197. package/dist/types/utils/schema/normalize.d.ts +93 -0
  198. package/dist/types/utils/schema/root-combinator.d.ts +12 -0
  199. package/dist/types/utils/schema/spill.d.ts +8 -0
  200. package/dist/types/utils/schema/stamps.d.ts +25 -0
  201. package/dist/types/utils/schema/types.d.ts +4 -0
  202. package/dist/types/utils/schema/wire.d.ts +54 -0
  203. package/dist/types/utils/schema/zod-decontaminate.d.ts +31 -0
  204. package/dist/types/utils/sse-debug.d.ts +10 -0
  205. package/dist/types/utils/tool-call-healing.d.ts +80 -0
  206. package/dist/types/utils/tool-choice-capability.d.ts +57 -0
  207. package/dist/types/utils/tool-choice.d.ts +50 -0
  208. package/dist/types/utils/validation.d.ts +17 -0
  209. package/dist/types/utils.d.ts +117 -0
  210. package/package.json +152 -0
  211. package/src/adapter-internals/provider-safety-stop.d.ts +45 -0
  212. package/src/adapter-internals/provider-safety-stop.ts +156 -0
  213. package/src/api-registry.d.ts +30 -0
  214. package/src/api-registry.ts +96 -0
  215. package/src/auth-broker/client.ts +444 -0
  216. package/src/auth-broker/index.ts +5 -0
  217. package/src/auth-broker/redact.ts +39 -0
  218. package/src/auth-broker/refresher.ts +130 -0
  219. package/src/auth-broker/remote-store.ts +1576 -0
  220. package/src/auth-broker/server.ts +764 -0
  221. package/src/auth-broker/types.ts +164 -0
  222. package/src/auth-broker/wire-schemas.ts +261 -0
  223. package/src/auth-gateway/http.ts +198 -0
  224. package/src/auth-gateway/index.ts +3 -0
  225. package/src/auth-gateway/server.ts +1315 -0
  226. package/src/auth-gateway/types.ts +160 -0
  227. package/src/auth-storage.ts +7312 -0
  228. package/src/cli.ts +269 -0
  229. package/src/codex-tools.d.ts +4 -0
  230. package/src/codex-tools.ts +24 -0
  231. package/src/context-cap-policy.d.ts +68 -0
  232. package/src/context-cap-policy.ts +123 -0
  233. package/src/core.ts +44 -0
  234. package/src/index.ts +61 -0
  235. package/src/model-cache.ts +236 -0
  236. package/src/model-manager.ts +744 -0
  237. package/src/model-pricing.d.ts +3 -0
  238. package/src/model-pricing.ts +68 -0
  239. package/src/model-retirements.d.ts +6 -0
  240. package/src/model-retirements.ts +19 -0
  241. package/src/model-thinking.d.ts +100 -0
  242. package/src/model-thinking.ts +1054 -0
  243. package/src/models.d.ts +21 -0
  244. package/src/models.json +94672 -0
  245. package/src/models.json.d.ts +9 -0
  246. package/src/models.ts +126 -0
  247. package/src/openai-completions-compat.d.ts +34 -0
  248. package/src/openai-completions-compat.ts +383 -0
  249. package/src/prompts/composer-bash-policy-recovery.md +1 -0
  250. package/src/prompts/cursor-composer-bash-policy-recovery.md +1 -0
  251. package/src/prompts/cursor-composer-edit-discipline.md +7 -0
  252. package/src/prompts/turn-aborted-guidance.md +4 -0
  253. package/src/provider-details.ts +90 -0
  254. package/src/provider-models/bundled-references.ts +38 -0
  255. package/src/provider-models/descriptors.ts +392 -0
  256. package/src/provider-models/google.ts +92 -0
  257. package/src/provider-models/index.ts +5 -0
  258. package/src/provider-models/ollama.ts +159 -0
  259. package/src/provider-models/openai-compat.ts +2920 -0
  260. package/src/provider-models/special.ts +185 -0
  261. package/src/providers/amazon-bedrock.d.ts +60 -0
  262. package/src/providers/amazon-bedrock.ts +939 -0
  263. package/src/providers/anthropic-messages-server-schema.ts +229 -0
  264. package/src/providers/anthropic-messages-server.ts +839 -0
  265. package/src/providers/anthropic.d.ts +280 -0
  266. package/src/providers/anthropic.ts +4421 -0
  267. package/src/providers/aws-credential-config.d.ts +19 -0
  268. package/src/providers/aws-credential-config.ts +179 -0
  269. package/src/providers/aws-credentials.d.ts +43 -0
  270. package/src/providers/aws-credentials.ts +457 -0
  271. package/src/providers/aws-eventstream.d.ts +38 -0
  272. package/src/providers/aws-eventstream.ts +185 -0
  273. package/src/providers/aws-sigv4.d.ts +55 -0
  274. package/src/providers/aws-sigv4.ts +218 -0
  275. package/src/providers/azure-openai-responses.d.ts +22 -0
  276. package/src/providers/azure-openai-responses.ts +447 -0
  277. package/src/providers/composer-discipline.d.ts +32 -0
  278. package/src/providers/composer-discipline.ts +95 -0
  279. package/src/providers/cursor/client-version.d.ts +10 -0
  280. package/src/providers/cursor/client-version.ts +10 -0
  281. package/src/providers/cursor/exec-modern.d.ts +98 -0
  282. package/src/providers/cursor/exec-modern.ts +497 -0
  283. package/src/providers/cursor/gen/agent_pb.d.ts +16769 -0
  284. package/src/providers/cursor/gen/agent_pb.ts +19780 -0
  285. package/src/providers/cursor/proto/agent.proto +4533 -0
  286. package/src/providers/cursor/proto/buf.gen.yaml +6 -0
  287. package/src/providers/cursor/proto/buf.yaml +17 -0
  288. package/src/providers/cursor-pi-args.d.ts +119 -0
  289. package/src/providers/cursor-pi-args.ts +187 -0
  290. package/src/providers/cursor.d.ts +72 -0
  291. package/src/providers/cursor.ts +3396 -0
  292. package/src/providers/dashscope-token-plan-headers.d.ts +57 -0
  293. package/src/providers/dashscope-token-plan-headers.ts +84 -0
  294. package/src/providers/error-message.d.ts +27 -0
  295. package/src/providers/error-message.ts +21 -0
  296. package/src/providers/github-copilot-headers.d.ts +40 -0
  297. package/src/providers/github-copilot-headers.ts +140 -0
  298. package/src/providers/gitlab-duo.d.ts +27 -0
  299. package/src/providers/gitlab-duo.ts +393 -0
  300. package/src/providers/google-auth.d.ts +26 -0
  301. package/src/providers/google-auth.ts +262 -0
  302. package/src/providers/google-gemini-cli.d.ts +75 -0
  303. package/src/providers/google-gemini-cli.ts +969 -0
  304. package/src/providers/google-gemini-headers.d.ts +43 -0
  305. package/src/providers/google-gemini-headers.ts +100 -0
  306. package/src/providers/google-shared.d.ts +183 -0
  307. package/src/providers/google-shared.ts +1105 -0
  308. package/src/providers/google-types.d.ts +138 -0
  309. package/src/providers/google-types.ts +167 -0
  310. package/src/providers/google-vertex.d.ts +11 -0
  311. package/src/providers/google-vertex.ts +124 -0
  312. package/src/providers/google.d.ts +4 -0
  313. package/src/providers/google.ts +41 -0
  314. package/src/providers/grammar.d.ts +1 -0
  315. package/src/providers/grammar.ts +70 -0
  316. package/src/providers/kimi.d.ts +27 -0
  317. package/src/providers/kimi.ts +52 -0
  318. package/src/providers/kiro-api-key.d.ts +50 -0
  319. package/src/providers/kiro-api-key.ts +786 -0
  320. package/src/providers/kiro-codewhisperer.d.ts +11 -0
  321. package/src/providers/kiro-codewhisperer.ts +600 -0
  322. package/src/providers/mock.ts +526 -0
  323. package/src/providers/ollama.d.ts +41 -0
  324. package/src/providers/ollama.ts +645 -0
  325. package/src/providers/openai-anthropic-shim.d.ts +31 -0
  326. package/src/providers/openai-anthropic-shim.ts +156 -0
  327. package/src/providers/openai-bounded-rate-limits.d.ts +3 -0
  328. package/src/providers/openai-bounded-rate-limits.ts +57 -0
  329. package/src/providers/openai-chat-server-schema.ts +254 -0
  330. package/src/providers/openai-chat-server.ts +724 -0
  331. package/src/providers/openai-codex/constants.d.ts +26 -0
  332. package/src/providers/openai-codex/constants.ts +43 -0
  333. package/src/providers/openai-codex/request-transformer.d.ts +50 -0
  334. package/src/providers/openai-codex/request-transformer.ts +219 -0
  335. package/src/providers/openai-codex/response-handler.d.ts +18 -0
  336. package/src/providers/openai-codex/response-handler.ts +111 -0
  337. package/src/providers/openai-codex-responses.d.ts +71 -0
  338. package/src/providers/openai-codex-responses.ts +3288 -0
  339. package/src/providers/openai-completions-compat.d.ts +6 -0
  340. package/src/providers/openai-completions-compat.ts +6 -0
  341. package/src/providers/openai-completions.d.ts +35 -0
  342. package/src/providers/openai-completions.ts +2294 -0
  343. package/src/providers/openai-opencodex-responses.ts +174 -0
  344. package/src/providers/openai-request-transform.d.ts +4 -0
  345. package/src/providers/openai-request-transform.ts +136 -0
  346. package/src/providers/openai-responses-server-schema.ts +290 -0
  347. package/src/providers/openai-responses-server.ts +1268 -0
  348. package/src/providers/openai-responses-shared.d.ts +106 -0
  349. package/src/providers/openai-responses-shared.ts +1253 -0
  350. package/src/providers/openai-responses.d.ts +37 -0
  351. package/src/providers/openai-responses.ts +989 -0
  352. package/src/providers/pi-native-client.d.ts +29 -0
  353. package/src/providers/pi-native-client.ts +243 -0
  354. package/src/providers/pi-native-server.ts +488 -0
  355. package/src/providers/register-builtins.d.ts +59 -0
  356. package/src/providers/register-builtins.ts +544 -0
  357. package/src/providers/synthetic.d.ts +26 -0
  358. package/src/providers/synthetic.ts +50 -0
  359. package/src/providers/transform-messages.d.ts +33 -0
  360. package/src/providers/transform-messages.ts +408 -0
  361. package/src/providers/vision-guard.d.ts +8 -0
  362. package/src/providers/vision-guard.ts +31 -0
  363. package/src/rate-limit-utils.d.ts +19 -0
  364. package/src/rate-limit-utils.ts +102 -0
  365. package/src/stream.d.ts +45 -0
  366. package/src/stream.ts +1306 -0
  367. package/src/types.d.ts +1073 -0
  368. package/src/types.ts +1305 -0
  369. package/src/usage/claude.ts +449 -0
  370. package/src/usage/gemini.ts +250 -0
  371. package/src/usage/github-copilot.ts +421 -0
  372. package/src/usage/google-antigravity.ts +201 -0
  373. package/src/usage/grok-cli.ts +259 -0
  374. package/src/usage/kimi.ts +285 -0
  375. package/src/usage/minimax-code.ts +31 -0
  376. package/src/usage/openai-codex.ts +503 -0
  377. package/src/usage/shared.ts +10 -0
  378. package/src/usage/zai.ts +247 -0
  379. package/src/usage.ts +190 -0
  380. package/src/utils/abort.d.ts +19 -0
  381. package/src/utils/abort.ts +51 -0
  382. package/src/utils/anthropic-auth.ts +95 -0
  383. package/src/utils/block-symbols.d.ts +6 -0
  384. package/src/utils/block-symbols.ts +11 -0
  385. package/src/utils/discovery/antigravity.ts +275 -0
  386. package/src/utils/discovery/codex.ts +362 -0
  387. package/src/utils/discovery/cursor.ts +388 -0
  388. package/src/utils/discovery/gemini.ts +248 -0
  389. package/src/utils/discovery/index.ts +4 -0
  390. package/src/utils/discovery/openai-compatible.ts +379 -0
  391. package/src/utils/event-stream.d.ts +41 -0
  392. package/src/utils/event-stream.ts +269 -0
  393. package/src/utils/fallback-transport.d.ts +110 -0
  394. package/src/utils/fallback-transport.ts +411 -0
  395. package/src/utils/fireworks-model-id.d.ts +10 -0
  396. package/src/utils/fireworks-model-id.ts +30 -0
  397. package/src/utils/foundry.d.ts +11 -0
  398. package/src/utils/foundry.ts +18 -0
  399. package/src/utils/h2-fetch.ts +60 -0
  400. package/src/utils/http-inspector.d.ts +59 -0
  401. package/src/utils/http-inspector.ts +380 -0
  402. package/src/utils/idle-iterator.d.ts +122 -0
  403. package/src/utils/idle-iterator.ts +410 -0
  404. package/src/utils/json-parse.d.ts +98 -0
  405. package/src/utils/json-parse.ts +607 -0
  406. package/src/utils/oauth/alibaba-token-plan.ts +60 -0
  407. package/src/utils/oauth/anthropic.ts +233 -0
  408. package/src/utils/oauth/api-key-login.ts +98 -0
  409. package/src/utils/oauth/api-key-validation.ts +344 -0
  410. package/src/utils/oauth/bizrouter.ts +15 -0
  411. package/src/utils/oauth/callback-server.d.ts +80 -0
  412. package/src/utils/oauth/callback-server.ts +359 -0
  413. package/src/utils/oauth/cerebras.ts +16 -0
  414. package/src/utils/oauth/cloudflare-ai-gateway.ts +48 -0
  415. package/src/utils/oauth/commandcode.ts +17 -0
  416. package/src/utils/oauth/cursor.ts +157 -0
  417. package/src/utils/oauth/deepinfra.ts +15 -0
  418. package/src/utils/oauth/deepseek.ts +53 -0
  419. package/src/utils/oauth/firepass.ts +24 -0
  420. package/src/utils/oauth/fireworks.ts +15 -0
  421. package/src/utils/oauth/fugu.ts +15 -0
  422. package/src/utils/oauth/github-copilot.d.ts +38 -0
  423. package/src/utils/oauth/github-copilot.ts +362 -0
  424. package/src/utils/oauth/gitlab-duo.ts +123 -0
  425. package/src/utils/oauth/glm-zcode.d.ts +71 -0
  426. package/src/utils/oauth/glm-zcode.ts +433 -0
  427. package/src/utils/oauth/google-antigravity.ts +200 -0
  428. package/src/utils/oauth/google-gemini-cli.ts +256 -0
  429. package/src/utils/oauth/google-oauth-shared.ts +110 -0
  430. package/src/utils/oauth/huggingface.ts +62 -0
  431. package/src/utils/oauth/index.ts +558 -0
  432. package/src/utils/oauth/kagi.ts +47 -0
  433. package/src/utils/oauth/kilo.ts +87 -0
  434. package/src/utils/oauth/kimi.d.ts +17 -0
  435. package/src/utils/oauth/kimi.ts +275 -0
  436. package/src/utils/oauth/kiro.ts +448 -0
  437. package/src/utils/oauth/litellm.ts +47 -0
  438. package/src/utils/oauth/lm-studio.ts +38 -0
  439. package/src/utils/oauth/mara.ts +16 -0
  440. package/src/utils/oauth/minimax-code.ts +78 -0
  441. package/src/utils/oauth/moonshot.ts +16 -0
  442. package/src/utils/oauth/nanogpt.ts +15 -0
  443. package/src/utils/oauth/nvidia.ts +70 -0
  444. package/src/utils/oauth/oauth.html +199 -0
  445. package/src/utils/oauth/ollama-cloud.ts +28 -0
  446. package/src/utils/oauth/ollama.ts +47 -0
  447. package/src/utils/oauth/openai-codex.ts +299 -0
  448. package/src/utils/oauth/opencode.ts +49 -0
  449. package/src/utils/oauth/opengateway.ts +15 -0
  450. package/src/utils/oauth/openrouter.ts +16 -0
  451. package/src/utils/oauth/parallel.ts +46 -0
  452. package/src/utils/oauth/perplexity.ts +225 -0
  453. package/src/utils/oauth/pkce.ts +18 -0
  454. package/src/utils/oauth/qianfan.ts +58 -0
  455. package/src/utils/oauth/qwen-portal.ts +60 -0
  456. package/src/utils/oauth/sglang.ts +42 -0
  457. package/src/utils/oauth/synthetic.ts +15 -0
  458. package/src/utils/oauth/tavily.ts +46 -0
  459. package/src/utils/oauth/together.ts +16 -0
  460. package/src/utils/oauth/types.d.ts +56 -0
  461. package/src/utils/oauth/types.ts +122 -0
  462. package/src/utils/oauth/venice.ts +59 -0
  463. package/src/utils/oauth/vercel-ai-gateway.ts +47 -0
  464. package/src/utils/oauth/vllm.ts +42 -0
  465. package/src/utils/oauth/xai.ts +246 -0
  466. package/src/utils/oauth/xiaomi.ts +199 -0
  467. package/src/utils/oauth/zai.ts +60 -0
  468. package/src/utils/oauth/zenmux.ts +15 -0
  469. package/src/utils/overflow.ts +275 -0
  470. package/src/utils/parse-bind.ts +81 -0
  471. package/src/utils/provider-response.d.ts +6 -0
  472. package/src/utils/provider-response.ts +30 -0
  473. package/src/utils/provider-safety-stop.ts +8 -0
  474. package/src/utils/proxy.d.ts +7 -0
  475. package/src/utils/proxy.ts +652 -0
  476. package/src/utils/retry-after.d.ts +3 -0
  477. package/src/utils/retry-after.ts +110 -0
  478. package/src/utils/retry-budget.d.ts +1 -0
  479. package/src/utils/retry-budget.ts +4 -0
  480. package/src/utils/retry.d.ts +29 -0
  481. package/src/utils/retry.ts +67 -0
  482. package/src/utils/schema/CONSTRAINTS.md +164 -0
  483. package/src/utils/schema/adapt.d.ts +24 -0
  484. package/src/utils/schema/adapt.ts +36 -0
  485. package/src/utils/schema/compatibility.d.ts +30 -0
  486. package/src/utils/schema/compatibility.ts +435 -0
  487. package/src/utils/schema/dereference.d.ts +11 -0
  488. package/src/utils/schema/dereference.ts +98 -0
  489. package/src/utils/schema/draft.d.ts +10 -0
  490. package/src/utils/schema/draft.ts +341 -0
  491. package/src/utils/schema/equality.d.ts +4 -0
  492. package/src/utils/schema/equality.ts +97 -0
  493. package/src/utils/schema/fields.d.ts +49 -0
  494. package/src/utils/schema/fields.ts +190 -0
  495. package/src/utils/schema/index.d.ts +14 -0
  496. package/src/utils/schema/index.ts +14 -0
  497. package/src/utils/schema/json-schema-validator.d.ts +12 -0
  498. package/src/utils/schema/json-schema-validator.ts +577 -0
  499. package/src/utils/schema/meta-validator.d.ts +2 -0
  500. package/src/utils/schema/meta-validator.ts +167 -0
  501. package/src/utils/schema/normalize.d.ts +93 -0
  502. package/src/utils/schema/normalize.ts +1588 -0
  503. package/src/utils/schema/root-combinator.d.ts +12 -0
  504. package/src/utils/schema/root-combinator.ts +143 -0
  505. package/src/utils/schema/spill.d.ts +8 -0
  506. package/src/utils/schema/spill.ts +43 -0
  507. package/src/utils/schema/stamps.d.ts +25 -0
  508. package/src/utils/schema/stamps.ts +97 -0
  509. package/src/utils/schema/types.d.ts +4 -0
  510. package/src/utils/schema/types.ts +11 -0
  511. package/src/utils/schema/wire.d.ts +54 -0
  512. package/src/utils/schema/wire.ts +213 -0
  513. package/src/utils/schema/zod-decontaminate.d.ts +31 -0
  514. package/src/utils/schema/zod-decontaminate.ts +331 -0
  515. package/src/utils/sse-debug.d.ts +10 -0
  516. package/src/utils/sse-debug.ts +289 -0
  517. package/src/utils/tool-call-healing.d.ts +80 -0
  518. package/src/utils/tool-call-healing.ts +298 -0
  519. package/src/utils/tool-choice-capability.d.ts +57 -0
  520. package/src/utils/tool-choice-capability.ts +633 -0
  521. package/src/utils/tool-choice.d.ts +50 -0
  522. package/src/utils/tool-choice.ts +99 -0
  523. package/src/utils/validation.ts +1080 -0
  524. package/src/utils.d.ts +117 -0
  525. package/src/utils.ts +523 -0
@@ -0,0 +1,45 @@
1
+ import type { Api, AssistantMessage, Model } from "../types";
2
+ /** This module is intentionally outside the package export map. */
3
+ declare const PROVIDER_SAFETY_STOP_ADAPTER_BRAND: unique symbol;
4
+ declare const PROVIDER_SAFETY_STOP_INVOCATION_BRAND: unique symbol;
5
+ /** Register an immutable catalog identity for first-party provider dispatch. */
6
+ export declare function registerProviderSafetyStopModel(model: Model<Api>): void;
7
+ /** Verify that a model is the unchanged identity of a bundled catalog entry. */
8
+ export declare function isProviderSafetyStopModelTrusted(model: unknown): boolean;
9
+ export type ProviderSafetyStopAdapterCapability = {
10
+ readonly [PROVIDER_SAFETY_STOP_ADAPTER_BRAND]: true;
11
+ };
12
+ /** The one unforgeable capability shared by first-party adapter parse sites. */
13
+ export declare const PROVIDER_SAFETY_STOP_ADAPTER_CAPABILITY: ProviderSafetyStopAdapterCapability;
14
+ export type ProviderSafetyStopAdapterInvocation = {
15
+ readonly [PROVIDER_SAFETY_STOP_INVOCATION_BRAND]: true;
16
+ };
17
+ export declare const PROVIDER_SAFETY_STOP_ADAPTER_INVOCATION: ProviderSafetyStopAdapterInvocation;
18
+ /** Attach runtime-owned adapter authority only when no caller transport seam is present. */
19
+ export declare function withProviderSafetyStopAdapterInvocation<T extends object>(options: T): T;
20
+ export declare function isProviderSafetyStopAdapterInvocation(value: unknown): ProviderSafetyStopAdapterInvocation | undefined;
21
+ /** Copy an existing runtime invocation token across a first-party wrapper boundary. */
22
+ export declare function copyProviderSafetyStopAdapterInvocation<T extends object>(source: unknown, destination: T): T;
23
+ /**
24
+ * Mint terminal authority only from a first-party adapter parse site. The
25
+ * capability is branded by a module-private symbol and is not available from
26
+ * the public `@vib-rato/ai` surface. Caller-controlled transport seams are
27
+ * also not trusted adapter invocations: an injected fetch or SDK client can
28
+ * fabricate a refusal without any provider contact, so adapter call sites
29
+ * pass those seams explicitly and fail closed when one is present. An
30
+ * unrecognized structured signal fails closed, so adapter mistakes remain
31
+ * fallback-eligible.
32
+ */
33
+ export declare function mintProviderSafetyStop(message: AssistantMessage, signal: string, capability: ProviderSafetyStopAdapterCapability, callerTransport?: unknown, adapterInvocation?: ProviderSafetyStopAdapterInvocation): boolean;
34
+ /** Identity check for terminal provider safety-stop authority. */
35
+ export declare function isProviderSafetyStopAuthenticated(message: unknown): boolean;
36
+ /**
37
+ * Drop terminal authority for a message. Exposing revocation publicly is
38
+ * safe by construction: it can only remove authority, never grant it, so a
39
+ * hostile caller cannot use it to forge a stop — only to degrade a genuine
40
+ * one to an ordinary fallback-eligible error. The managed runtime uses it to
41
+ * expire marks once a stop has been adjudicated, before the committed
42
+ * message is exposed to later stream dispatches (#4777 review follow-up).
43
+ */
44
+ export declare function revokeProviderSafetyStop(message: unknown): void;
45
+ export {};
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Custom API provider registry.
3
+ *
4
+ * Allows extensions to register streaming functions for custom API types
5
+ * (e.g., "vertex-Anthropic model-api") that are not built into stream.ts.
6
+ */
7
+ import type { Api, AssistantMessageEventStream, Context, Model, SimpleStreamOptions, StreamOptions } from "./types";
8
+ export type CustomStreamFn = (model: Model<Api>, context: Context, options?: StreamOptions) => AssistantMessageEventStream;
9
+ export type CustomStreamSimpleFn = (model: Model<Api>, context: Context, options?: SimpleStreamOptions) => AssistantMessageEventStream;
10
+ export interface RegisteredCustomApi {
11
+ stream: CustomStreamFn;
12
+ streamSimple: CustomStreamSimpleFn;
13
+ sourceId?: string;
14
+ }
15
+ /**
16
+ * Register a custom API streaming function.
17
+ */
18
+ export declare function registerCustomApi(api: string, streamSimple: CustomStreamSimpleFn, sourceId?: string, stream?: CustomStreamFn): void;
19
+ /**
20
+ * Get a custom API provider by API identifier.
21
+ */
22
+ export declare function getCustomApi(api: string): RegisteredCustomApi | undefined;
23
+ /**
24
+ * Remove all custom APIs registered by a specific source (e.g., extension path).
25
+ */
26
+ export declare function unregisterCustomApis(sourceId: string): void;
27
+ /**
28
+ * Clear all custom API registrations.
29
+ */
30
+ export declare function clearCustomApis(): void;
@@ -0,0 +1,80 @@
1
+ import type { AuthCredential } from "../auth-storage";
2
+ import type { Provider } from "../types";
3
+ import type { CredentialDisableResponse, CredentialIfAbsentUploadResponse, CredentialMetadataResponse, CredentialRefreshRequest, CredentialRefreshResponse, CredentialUploadResponse, HealthzResponse, SnapshotResponse, SnapshotStreamEvent, UsageResponse } from "./types";
4
+ export declare const AUTH_BROKER_EPOCH_HEADER = "X-Vibrato-Auth-Broker-Epoch";
5
+ export interface AuthBrokerClientOptions {
6
+ /** Base URL (e.g. `https://broker.tailnet:8765`). Trailing slashes are trimmed. */
7
+ url: string;
8
+ /** Bearer token used for everything except `healthz`. */
9
+ token: string;
10
+ /** Per-request timeout in milliseconds. Default 10s. */
11
+ timeoutMs?: number;
12
+ /** Retry connection errors this many times. Default 1. */
13
+ maxRetries?: number;
14
+ /** Override fetch (used in tests). Default global `fetch`. */
15
+ fetchImpl?: typeof fetch;
16
+ }
17
+ export declare class AuthBrokerError extends Error {
18
+ readonly status: number | undefined;
19
+ readonly body: string | undefined;
20
+ constructor(message: string, opts?: {
21
+ status?: number;
22
+ body?: string;
23
+ cause?: unknown;
24
+ });
25
+ }
26
+ /**
27
+ * Thrown when a broker responds 404 to `GET /v1/snapshot/stream` — old
28
+ * brokers that predate the SSE endpoint. Callers (`RemoteAuthCredentialStore`)
29
+ * detect this sentinel to fall back to long-polling permanently.
30
+ */
31
+ export declare class AuthBrokerStreamUnsupportedError extends AuthBrokerError {
32
+ constructor(message?: string);
33
+ }
34
+ /** Thrown when a broker responds 404 to `GET /v1/credentials/metadata`. */
35
+ export declare class AuthBrokerCredentialMetadataUnsupportedError extends AuthBrokerError {
36
+ constructor(message?: string);
37
+ }
38
+ export interface FetchSnapshotOptions {
39
+ ifGenerationGt?: number;
40
+ ifEpoch?: string;
41
+ waitMs?: number;
42
+ signal?: AbortSignal;
43
+ }
44
+ export type FetchSnapshotResult = {
45
+ status: 200;
46
+ snapshot: SnapshotResponse;
47
+ generation: number;
48
+ } | {
49
+ status: 304;
50
+ generation: number;
51
+ epoch?: string;
52
+ };
53
+ export declare class AuthBrokerClient {
54
+ #private;
55
+ constructor(opts: AuthBrokerClientOptions);
56
+ /** Normalized broker origin used for non-secret local presentation partitioning. */
57
+ get baseUrl(): string;
58
+ healthz(signal?: AbortSignal): Promise<HealthzResponse>;
59
+ fetchSnapshot(opts?: FetchSnapshotOptions): Promise<FetchSnapshotResult>;
60
+ /** Fetches the generation-aware, secret-free credential inventory projection. */
61
+ fetchCredentialMetadata(signal?: AbortSignal): Promise<CredentialMetadataResponse>;
62
+ /**
63
+ * Subscribe to the broker's SSE snapshot stream. The first frame is always
64
+ * a full `snapshot`; subsequent frames are `entry` upserts / refreshes or
65
+ * `removed` deletes. Caller controls lifecycle via `opts.signal`.
66
+ *
67
+ * Throws {@link AuthBrokerStreamUnsupportedError} when the broker responds
68
+ * 404 — older brokers predate this endpoint and the caller should fall back
69
+ * to long-polling for the remainder of its lifetime.
70
+ */
71
+ openSnapshotStream(opts?: {
72
+ signal?: AbortSignal;
73
+ }): AsyncGenerator<SnapshotStreamEvent>;
74
+ fetchUsage(signal?: AbortSignal, provider?: Provider): Promise<UsageResponse>;
75
+ refreshCredential(id: number, signal?: AbortSignal): Promise<CredentialRefreshResponse>;
76
+ refreshMCPCredential(id: number, body: CredentialRefreshRequest, signal?: AbortSignal): Promise<CredentialRefreshResponse>;
77
+ disableCredential(id: number, cause: string, signal?: AbortSignal, expectedRevision?: number): Promise<CredentialDisableResponse>;
78
+ uploadCredential(provider: string, credential: AuthCredential, signal?: AbortSignal): Promise<CredentialUploadResponse>;
79
+ uploadCredentialIfAbsent(provider: string, credential: AuthCredential, signal?: AbortSignal): Promise<CredentialIfAbsentUploadResponse>;
80
+ }
@@ -0,0 +1,5 @@
1
+ export * from "./client";
2
+ export * from "./refresher";
3
+ export * from "./remote-store";
4
+ export * from "./server";
5
+ export * from "./types";
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Keep provider and upstream failure text safe for less-trusted surfaces.
3
+ *
4
+ * This intentionally mirrors the bounded reason scrubber used by the account
5
+ * management CLI without taking a dependency on coding-agent.
6
+ */
7
+ export declare function cleanReason(value: unknown): string | undefined;
@@ -0,0 +1,25 @@
1
+ import type { AuthStorage } from "../auth-storage";
2
+ export interface AuthBrokerRefresherOptions {
3
+ storage: AuthStorage;
4
+ /** Refresh credentials expiring within this window. Default 5 min. */
5
+ refreshSkewMs?: number;
6
+ /** Loop cadence. Default 60s. */
7
+ refreshIntervalMs?: number;
8
+ /** Override clock (tests). */
9
+ now?: () => number;
10
+ }
11
+ export interface AuthBrokerRefresherSchedule {
12
+ enabled: boolean;
13
+ intervalMs: number;
14
+ skewMs: number;
15
+ nextSweepAt: number;
16
+ }
17
+ export declare class AuthBrokerRefresher {
18
+ #private;
19
+ constructor(opts: AuthBrokerRefresherOptions);
20
+ start(): void;
21
+ stop(): void;
22
+ getSchedule(): AuthBrokerRefresherSchedule;
23
+ /** Run one sweep. Exposed for tests. */
24
+ tick(): Promise<void>;
25
+ }
@@ -0,0 +1,153 @@
1
+ /**
2
+ * Client-side {@link AuthCredentialStore} that mirrors a remote broker's
3
+ * snapshot. Refresh tokens never leave the broker; mutating methods (`replace*`,
4
+ * `upsert*`, `delete*ForProvider`) throw because login flows are server-side.
5
+ *
6
+ * Cache (`getCache`/`setCache`/`cleanExpiredCache`) is in-memory and ephemeral —
7
+ * usage reports cache TTL is 5 minutes per credential, so durability across
8
+ * runs isn't required.
9
+ */
10
+ import { type AuthCredential, type AuthCredentialIfAbsentResult, type AuthCredentialStore, type CachedCredentialHealth, type CachedUsagePresentation, type CredentialDispatchTicket, type CredentialInventoryRecord, type MCPOAuthRefreshClient, type OAuthCredential, type SafeUsageReport, type StoredAuthCredential } from "../auth-storage";
11
+ import type { Provider } from "../types";
12
+ import type { UsageReport } from "../usage";
13
+ import type { OAuthCredentials } from "../utils/oauth/types";
14
+ import { type AuthBrokerClient } from "./client";
15
+ import type { SnapshotResponse } from "./types";
16
+ export type CredentialInventoryMetadataCapability = "pending" | "supported" | "unsupported" | "mismatch" | "failed";
17
+ export interface CachedInventoryNotice {
18
+ status: Exclude<CredentialInventoryMetadataCapability, "supported">;
19
+ reason: string;
20
+ generation?: number;
21
+ }
22
+ export interface CredentialInventoryMetadataState {
23
+ capability: CredentialInventoryMetadataCapability;
24
+ generation: number;
25
+ records: readonly CredentialInventoryRecord[];
26
+ notice?: CachedInventoryNotice;
27
+ }
28
+ export interface RemoteAuthCredentialStoreOptions {
29
+ client: AuthBrokerClient;
30
+ /**
31
+ * Initial snapshot. When omitted, callers must call
32
+ * {@link RemoteAuthCredentialStore.refreshSnapshot} before the first read.
33
+ */
34
+ initialSnapshot?: SnapshotResponse;
35
+ /**
36
+ * Subscribe to the broker's SSE snapshot stream when available. Falls back
37
+ * to long-poll permanently when the broker returns 404. Default `true`.
38
+ */
39
+ streamSnapshots?: boolean;
40
+ /** Override the local redacted presentation sidecar path (primarily for tests). */
41
+ presentationPath?: string;
42
+ }
43
+ export declare class RemoteAuthCredentialStore implements AuthCredentialStore {
44
+ #private;
45
+ constructor(opts: RemoteAuthCredentialStoreOptions);
46
+ get client(): AuthBrokerClient;
47
+ /** Wait for redacted presentation hydration and initial inventory metadata. */
48
+ waitForReady(): Promise<void>;
49
+ /** Await pending atomic sidecar writes (useful to bounded shutdown callers). */
50
+ flushPresentationPersistence(): Promise<void>;
51
+ get snapshot(): SnapshotResponse;
52
+ getInventoryMetadataState(): Readonly<CredentialInventoryMetadataState>;
53
+ onSnapshotChanged(listener: () => void): () => void;
54
+ /**
55
+ * Queue a provider-admission ticket behind all currently pending snapshot
56
+ * authority work. Snapshot applications that arrive after this ticket wait
57
+ * for its release, so a revocation is ordered either before admission or
58
+ * after it — never in the middle of the dispatch boundary.
59
+ */
60
+ acquireCredentialDispatchTicket(_provider: Provider, signal?: AbortSignal): Promise<CredentialDispatchTicket>;
61
+ syncInventoryMetadata(): Promise<Readonly<CredentialInventoryMetadataState>>;
62
+ /**
63
+ * Payload-free inventory view. This method never performs network I/O; metadata
64
+ * rows appear only after an explicit or background metadata synchronization for
65
+ * the current snapshot generation.
66
+ */
67
+ listCredentialInventory(provider?: string): CredentialInventoryRecord[];
68
+ /** Re-hydrate the in-memory snapshot from the broker. */
69
+ refreshSnapshot(signal?: AbortSignal): Promise<SnapshotResponse>;
70
+ listAuthCredentials(provider?: string): StoredAuthCredential[];
71
+ /**
72
+ * In-memory update from a successful refresh through the broker. AuthStorage
73
+ * calls this after `#replaceCredentialAt`; the broker already persisted the
74
+ * authoritative row, so we just mirror it.
75
+ */
76
+ updateAuthCredential(id: number, credential: AuthCredential): void;
77
+ deleteAuthCredential(_id: number, _disabledCause: string): void;
78
+ allocateMonotonicSequence(_key: string, _expiresAtSec: number): number;
79
+ tryDisableAuthCredentialIfMatches(_id: number, _expectedData: string, _disabledCause: string): boolean;
80
+ /** Disable one credential through the authenticated broker mutation endpoint. */
81
+ disableAuthCredentialRemote(credentialId: number, disabledCause: string, signal?: AbortSignal, expectedRevision?: number): Promise<boolean>;
82
+ waitForFreshSnapshot(maxWaitMs: number, opts?: {
83
+ signal?: AbortSignal;
84
+ }): Promise<boolean>;
85
+ prepareForRequest(credentialId: number, opts?: {
86
+ signal?: AbortSignal;
87
+ }): Promise<boolean>;
88
+ markCredentialSuspect(credentialId: number, opts?: {
89
+ signal?: AbortSignal;
90
+ }): Promise<void>;
91
+ replaceAuthCredentialsForProvider(_provider: string, _credentials: AuthCredential[]): StoredAuthCredential[];
92
+ upsertAuthCredentialForProvider(_provider: string, _credential: AuthCredential): StoredAuthCredential[];
93
+ upsertAuthCredentialForProviderIfAbsent(_provider: string, _credential: AuthCredential): AuthCredentialIfAbsentResult;
94
+ deleteAuthCredentialsForProvider(_provider: string, _disabledCause: string): void;
95
+ /** Logout authority remains on the broker; the client only mirrors its result. */
96
+ deleteAuthCredentialsRemote(provider: string, disabledCause: string): Promise<void>;
97
+ /**
98
+ * Upsert a single credential through the broker. The broker server is the
99
+ * canonical writer — see `POST /v1/credential`. The redacted snapshot
100
+ * entries returned by the server replace the provider's rows in our local
101
+ * snapshot, and the global snapshot is then refreshed in the background so
102
+ * any concurrent peer (refresh, generation bump) stays in sync.
103
+ */
104
+ upsertAuthCredentialRemote(provider: string, credential: AuthCredential): Promise<StoredAuthCredential[]>;
105
+ upsertAuthCredentialRemoteIfAbsent(provider: string, credential: AuthCredential): Promise<AuthCredentialIfAbsentResult>;
106
+ /**
107
+ * Replace-all semantics: disable every active credential for the provider,
108
+ * then upload each of the new credentials. Used by API-key login so a new
109
+ * key clobbers any previously stored key for the same provider.
110
+ */
111
+ replaceAuthCredentialsRemote(provider: string, credentials: AuthCredential[]): Promise<StoredAuthCredential[]>;
112
+ getCache(key: string): string | null;
113
+ setCache(key: string, value: string, expiresAtSec: number): void;
114
+ cleanExpiredCache(): void;
115
+ deleteCachePrefix(prefix: string): void;
116
+ /**
117
+ * Store-level hook consumed by `AuthStorage` — routes refresh through the
118
+ * broker so the actual refresh token never leaves the broker host. Returns
119
+ * the broker-redacted credential with {@link REMOTE_REFRESH_SENTINEL} in
120
+ * the `refresh` slot.
121
+ */
122
+ refreshOAuthCredential(_provider: Provider, credentialId: number, _credential: OAuthCredential, signal?: AbortSignal): Promise<OAuthCredentials>;
123
+ refreshMCPOAuthCredential(credentialId: number, credential: OAuthCredential, client: MCPOAuthRefreshClient, signal?: AbortSignal): Promise<OAuthCredential>;
124
+ /**
125
+ * Store-level hook consumed by `AuthStorage.fetchUsageReports()` — proxies
126
+ * to the broker's `/v1/usage` endpoint. The broker's egress IP isn't
127
+ * rate-limited by Anthropic's per-IP `/usage` cap the way a heavy
128
+ * residential laptop is, so all credentials surface every cycle.
129
+ */
130
+ fetchUsageReports(signal?: AbortSignal): Promise<UsageReport[] | null>;
131
+ fetchUsageReportsForProvider(provider: Provider, signal?: AbortSignal): Promise<UsageReport[] | null>;
132
+ /** Synchronous, zero-network usage presentation read. */
133
+ peekCachedUsagePresentation(provider: Provider, credentialId: number): CachedUsagePresentation | undefined;
134
+ /** Synchronous, zero-network health presentation read backed by the redacted sidecar. */
135
+ peekCachedCredentialHealth(provider: Provider, credentialId: number): CachedCredentialHealth | undefined;
136
+ /** Persist a safe health result without credential or bearer-token material. */
137
+ recordCredentialHealth(provider: Provider, credentialId: number, health: CachedCredentialHealth): void;
138
+ /** Record a safe usage observation after an explicit broker usage/check call. */
139
+ recordUsagePresentation(observation: CachedUsagePresentation): void;
140
+ /** Persist an explicit usage/check report for the current credential identity. */
141
+ recordCredentialUsage(provider: Provider, credentialId: number, report: SafeUsageReport): void;
142
+ /**
143
+ * Per-credential usage hook consumed by `AuthStorage.#getUsageReport`. Pulls
144
+ * the aggregate broker `/v1/usage` once and serves all callers from the
145
+ * same response (coalesced + cached), then matches the credential to a
146
+ * report by provider + identity (accountId / email / projectId).
147
+ *
148
+ * The broker already aggregates with its own 30s TTL on the server side; our
149
+ * 15s client TTL is below that so we usually re-use the broker's cache too.
150
+ */
151
+ getUsageReport(provider: Provider, credential: OAuthCredential, signal?: AbortSignal): Promise<UsageReport | null>;
152
+ close(): void;
153
+ }
@@ -0,0 +1,32 @@
1
+ import type { AuthStorage } from "../auth-storage";
2
+ export interface AuthBrokerServerOptions {
3
+ /** Underlying credential storage (wraps the local SQLite store on the broker). */
4
+ storage: AuthStorage;
5
+ /** Listen address; accepts `host:port` or just `port`. */
6
+ bind?: string;
7
+ /** Accept any of these bearer tokens. Empty disables auth (loopback only). */
8
+ bearerTokens: string[];
9
+ /** Broker version string surfaced on `/v1/healthz`. */
10
+ version?: string;
11
+ /** Refresh credentials expiring within this window. Default 5 min. */
12
+ refreshSkewMs?: number;
13
+ /** Background refresh cadence. Default 60s. */
14
+ refreshIntervalMs?: number;
15
+ /** Disable the background refresher (e.g. for tests). */
16
+ disableRefresher?: boolean;
17
+ /**
18
+ * Override SSE keepalive cadence in milliseconds for `/v1/snapshot/stream`.
19
+ * Internal-only — tests use a short interval so they can assert heartbeats
20
+ * without long sleeps. Default {@link DEFAULT_STREAM_KEEPALIVE_MS}.
21
+ */
22
+ streamKeepaliveMs?: number;
23
+ }
24
+ export interface AuthBrokerServerHandle {
25
+ /** Bound URL (`http://host:port`). */
26
+ url: string;
27
+ port: number;
28
+ hostname: string;
29
+ close(): Promise<void>;
30
+ }
31
+ /** Boot the broker. Caller owns lifecycle; `handle.close()` to stop. */
32
+ export declare function startAuthBroker(opts: AuthBrokerServerOptions): AuthBrokerServerHandle;
@@ -0,0 +1,132 @@
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, AuthCredentialIfAbsentReason, AuthCredentialSnapshot, AuthCredentialSnapshotEntry, MCPOAuthRefreshClient } from "../auth-storage";
9
+ import type { UsageReport } from "../usage";
10
+ /** A single credential metadata projection; secret-bearing fields are intentionally absent. */
11
+ export interface CredentialMetadataRecord {
12
+ id: number;
13
+ provider: string;
14
+ type: "oauth" | "api_key";
15
+ identity: string | null;
16
+ disabledCause: string | null;
17
+ }
18
+ /** GET /v1/credentials/metadata response body. */
19
+ export interface CredentialMetadataResponse {
20
+ epoch?: string;
21
+ generation: number;
22
+ generatedAt: number;
23
+ credentials: CredentialMetadataRecord[];
24
+ }
25
+ /** GET /v1/healthz response body. */
26
+ export interface HealthzResponse {
27
+ ok: boolean;
28
+ version?: string;
29
+ }
30
+ export interface RefresherSchedule {
31
+ enabled: boolean;
32
+ intervalMs: number;
33
+ skewMs: number;
34
+ nextSweepInMs: number;
35
+ }
36
+ export type SnapshotEntry = AuthCredentialSnapshotEntry & {
37
+ rotatesInMs: number | null;
38
+ };
39
+ /** GET /v1/snapshot response body. */
40
+ export interface SnapshotResponse extends Omit<AuthCredentialSnapshot, "credentials"> {
41
+ /** Stable for one broker process; changes when the broker restarts. */
42
+ epoch?: string;
43
+ serverNowMs: number;
44
+ refresher: RefresherSchedule;
45
+ credentials: SnapshotEntry[];
46
+ }
47
+ /** GET /v1/usage response body — matches the local `AuthStorage.fetchUsageReports` shape. */
48
+ export interface UsageResponse {
49
+ generatedAt: number;
50
+ reports: UsageReport[];
51
+ }
52
+ /** POST /v1/credential/:id/refresh response body. */
53
+ export interface CredentialRefreshResponse {
54
+ entry: AuthCredentialSnapshotEntry;
55
+ }
56
+ /** Optional MCP client metadata; the broker still selects the stored token endpoint. */
57
+ export type CredentialRefreshRequest = MCPOAuthRefreshClient;
58
+ /** POST /v1/credential/:id/disable request body. */
59
+ export interface CredentialDisableRequest {
60
+ cause: string;
61
+ expectedRevision?: number;
62
+ }
63
+ /** POST /v1/credential/:id/disable response body. */
64
+ export interface CredentialDisableResponse {
65
+ ok: boolean;
66
+ }
67
+ /**
68
+ * POST /v1/credential request body. The OAuth `refresh` must be the *real*
69
+ * refresh token (not the sentinel) — the broker is the canonical writer.
70
+ */
71
+ export interface CredentialUploadRequest {
72
+ provider: string;
73
+ credential: AuthCredential;
74
+ }
75
+ /** POST /v1/credential response body — redacted snapshot of the provider's rows after upsert. */
76
+ export interface CredentialUploadResponse {
77
+ entries: AuthCredentialSnapshotEntry[];
78
+ }
79
+ export interface CredentialIfAbsentUploadResponse {
80
+ inserted: boolean;
81
+ reason: AuthCredentialIfAbsentReason;
82
+ entries: AuthCredentialSnapshotEntry[];
83
+ }
84
+ /**
85
+ * SSE event kinds emitted on `GET /v1/snapshot/stream`. The same value is set
86
+ * as the SSE `event:` name (load-bearing for clients) **and** embedded as a
87
+ * `kind` field inside the JSON body so a Zod discriminated union can validate
88
+ * the payload without consulting the line metadata.
89
+ */
90
+ export type SnapshotStreamEventKind = "snapshot" | "entry" | "removed";
91
+ /** Initial frame emitted on connect — the full {@link SnapshotResponse}. */
92
+ export interface SnapshotStreamSnapshotEvent extends SnapshotResponse {
93
+ kind: "snapshot";
94
+ }
95
+ /** Single credential added/changed (upsert or refresh). */
96
+ export interface SnapshotStreamEntryEvent {
97
+ kind: "entry";
98
+ epoch?: string;
99
+ generation: number;
100
+ serverNowMs: number;
101
+ refresher: RefresherSchedule;
102
+ entry: SnapshotEntry;
103
+ }
104
+ /** Single credential disabled/deleted. */
105
+ export interface SnapshotStreamRemovedEvent {
106
+ kind: "removed";
107
+ epoch?: string;
108
+ generation: number;
109
+ serverNowMs: number;
110
+ refresher: RefresherSchedule;
111
+ id: number;
112
+ }
113
+ /** Discriminated union of every event the snapshot stream emits. */
114
+ export type SnapshotStreamEvent = SnapshotStreamSnapshotEvent | SnapshotStreamEntryEvent | SnapshotStreamRemovedEvent;
115
+ /**
116
+ * Default bearer-protected route prefix. The broker exposes `/v1/healthz`
117
+ * unauthenticated for liveness probes; everything else requires a bearer.
118
+ */
119
+ export declare const AUTH_BROKER_API_PREFIX = "/v1";
120
+ /** Default port when none is configured. Loopback-only, no external exposure. */
121
+ export declare const DEFAULT_AUTH_BROKER_BIND = "127.0.0.1:8765";
122
+ /** Default broker→provider refresh skew. Refresh credentials this close to expiry. */
123
+ export declare const DEFAULT_REFRESH_SKEW_MS: number;
124
+ /** Default broker refresh-loop cadence. */
125
+ export declare const DEFAULT_REFRESH_INTERVAL_MS = 60000;
126
+ /** Keepalive cadence for `GET /v1/snapshot/stream` SSE comments. */
127
+ export declare const DEFAULT_STREAM_KEEPALIVE_MS = 20000;
128
+ /**
129
+ * Bun.serve `idleTimeout` (seconds) used by the broker. Default Bun idle
130
+ * timeout (10s) would close long-lived SSE connections between keepalives.
131
+ */
132
+ export declare const DEFAULT_SERVER_IDLE_TIMEOUT_S = 255;