@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,30 @@
1
+ /**
2
+ * Custom API provider registry.
3
+ *
4
+ * Allows extensions to register streaming functions for custom API types
5
+ * (e.g., "vertex-claude-api") that are not built into stream.ts.
6
+ */
7
+ import type { Api, AssistantMessageEventStream, Context, Model, SimpleStreamOptions, StreamOptions } from "./types.js";
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,117 @@
1
+ /**
2
+ * SQLite-backed credential persistence for AuthStorage.
3
+ *
4
+ * The public AuthCredentialStore interface remains in ../auth-storage so local
5
+ * and remote stores share the same contract.
6
+ */
7
+ import { Database } from "bun:sqlite";
8
+ import type { AuthCredential, AuthCredentialStore, CredentialRefreshLeaseFence, DisabledCredentialSummary, StoredAuthCredential, StoredCredentialBlock } from "../auth-storage.js";
9
+ import type { OAuthCredentials } from "../registry/oauth/types.js";
10
+ import type { ClientUsageReport, ClientUsageSummary, UsageCostHistoryEntry, UsageCostHistoryQuery, UsageHistoryEntry, UsageHistoryQuery } from "../usage.js";
11
+ export declare const USAGE_REPORT_TTL_MS: number;
12
+ type SerializedCredentialRecord = {
13
+ credentialType: AuthCredential["type"];
14
+ data: string;
15
+ identityKey: string | null;
16
+ };
17
+ /**
18
+ * SQLite's busy result code family — base `SQLITE_BUSY` plus the extended
19
+ * variants `SQLITE_BUSY_RECOVERY` (concurrent WAL recovery), `SQLITE_BUSY_SNAPSHOT`,
20
+ * and `SQLITE_BUSY_TIMEOUT`. All warrant the same backoff-and-retry treatment.
21
+ */
22
+ export declare function isSqliteBusyError(err: unknown): boolean;
23
+ /**
24
+ * SQLite's unrecoverable-corruption result codes — the `SQLITE_CORRUPT` family
25
+ * (base plus extended variants like `SQLITE_CORRUPT_VTAB` / `SQLITE_CORRUPT_INDEX`)
26
+ * and `SQLITE_NOTADB` (the file header is not a database). Unlike
27
+ * {@link isSqliteBusyError}, these never clear by retrying: the store must be
28
+ * repaired or replaced, so callers latch and stop touching it.
29
+ */
30
+ export declare function isSqliteCorruptionError(err: unknown): boolean;
31
+ export declare function serializeCredential(provider: string, credential: AuthCredential): SerializedCredentialRecord | null;
32
+ export declare function resolveCredentialIdentityKey(provider: string, credential: AuthCredential): string | null;
33
+ /**
34
+ * Default SQLite-backed implementation of {@link AuthCredentialStore}.
35
+ *
36
+ * Used by the pi-ai CLI and as the default store for `AuthStorage.create()`.
37
+ * Also exposes convenience methods (`saveOAuth`, `getOAuth`, `saveApiKey`,
38
+ * `getApiKey`, `listProviders`, `deleteProvider`) that callers can use directly
39
+ * without going through `AuthStorage`.
40
+ */
41
+ export declare class SqliteAuthCredentialStore implements AuthCredentialStore {
42
+ #private;
43
+ constructor(db: Database);
44
+ static open(dbPath?: string): Promise<SqliteAuthCredentialStore>;
45
+ listAuthCredentials(provider?: string): StoredAuthCredential[];
46
+ listDisabledCredentials(provider?: string): Promise<DisabledCredentialSummary[]>;
47
+ replaceAuthCredentialsForProvider(provider: string, credentials: AuthCredential[]): StoredAuthCredential[];
48
+ upsertAuthCredentialForProvider(provider: string, credential: AuthCredential): StoredAuthCredential[];
49
+ updateAuthCredential(id: number, credential: AuthCredential): void;
50
+ tryUpdateAuthCredentialIfMatches(id: number, expectedData: string, credential: AuthCredential, lease?: CredentialRefreshLeaseFence): boolean;
51
+ deleteAuthCredential(id: number, disabledCause: string): void;
52
+ /**
53
+ * CAS-style disable: only soft-deletes the row when its `data` column still
54
+ * matches `expectedData` and the row has not already been disabled. Used by
55
+ * the OAuth refresh-failure path to avoid clobbering a peer that rotated the
56
+ * row between our pre-check and the disable.
57
+ */
58
+ tryDisableAuthCredentialIfMatches(id: number, expectedData: string, disabledCause: string, lease?: CredentialRefreshLeaseFence): boolean;
59
+ deleteAuthCredentialsForProvider(provider: string, disabledCause: string): void;
60
+ getCache(key: string, options?: {
61
+ includeExpired?: boolean;
62
+ }): string | null;
63
+ setCache(key: string, value: string, expiresAtSec: number): void;
64
+ /** Drop all cache rows whose keys start with the supplied prefix. */
65
+ deleteCachePrefix(prefix: string): void;
66
+ cleanExpiredCache(): void;
67
+ getCredentialBlock(credentialId: number, providerKey: string, blockScope: string): number | undefined;
68
+ getCredentialBlockReconcileAfter(credentialId: number, providerKey: string, blockScope: string): number | undefined;
69
+ upsertCredentialBlock(block: StoredCredentialBlock): void;
70
+ deleteCredentialBlock(credentialId: number, providerKey: string, blockScope: string): void;
71
+ deleteCredentialBlocks(credentialId: number): void;
72
+ cleanExpiredCredentialBlocks(nowMs: number): void;
73
+ listCredentialBlocks(credentialIds: readonly number[]): StoredCredentialBlock[];
74
+ tryAcquireCredentialRefreshLease(credentialId: number, owner: string, expiresAtMs: number): boolean;
75
+ getCredentialRefreshLeaseExpiresAt(credentialId: number): number | undefined;
76
+ renewCredentialRefreshLease(credentialId: number, owner: string, expiresAtMs: number): boolean;
77
+ releaseCredentialRefreshLease(credentialId: number, owner: string): void;
78
+ recordUsageSnapshots(entries: UsageHistoryEntry[]): void;
79
+ listUsageHistory(query?: UsageHistoryQuery): UsageHistoryEntry[];
80
+ recordUsageCosts(entries: UsageCostHistoryEntry[]): void;
81
+ listUsageCosts(query?: UsageCostHistoryQuery): UsageCostHistoryEntry[];
82
+ recordClientUsage(report: ClientUsageReport): void;
83
+ getClientUsageSummary(sinceMs: number): ClientUsageSummary;
84
+ /**
85
+ * Save OAuth credentials for a provider.
86
+ * Preserves unrelated identities and replaces only the matching credential.
87
+ */
88
+ saveOAuth(provider: string, credentials: OAuthCredentials): void;
89
+ /**
90
+ * Get OAuth credentials for a provider.
91
+ */
92
+ getOAuth(provider: string): OAuthCredentials | null;
93
+ /**
94
+ * Save API key for a provider (replaces existing).
95
+ */
96
+ saveApiKey(provider: string, apiKey: string): void;
97
+ /**
98
+ * Get API key for a provider.
99
+ */
100
+ getApiKey(provider: string): string | null;
101
+ /**
102
+ * List all providers with credentials.
103
+ */
104
+ listProviders(): string[];
105
+ /**
106
+ * Delete all credentials for a provider.
107
+ */
108
+ deleteProvider(provider: string): void;
109
+ /**
110
+ * SQLite increments `data_version` when another connection commits. Own
111
+ * writes leave it unchanged and already notify AuthStorage directly.
112
+ */
113
+ pollExternalChanges(): boolean;
114
+ acknowledgeLocalChanges(): void;
115
+ close(): void;
116
+ }
117
+ export {};
@@ -0,0 +1,93 @@
1
+ /**
2
+ * HTTP client for the omp auth-broker server.
3
+ *
4
+ * Used by {@link RemoteAuthCredentialStore} (snapshot pulls) and by
5
+ * `omp auth-broker status` (liveness checks). All endpoints except
6
+ * `/v1/healthz` require a bearer token.
7
+ */
8
+ import type { AuthCredential, DisabledCredentialSummary } from "../auth-storage.js";
9
+ import type { ClientUsageReportRequest, ClientUsageReportResponse, ClientUsageSummaryResponse, CredentialBlockRequest, CredentialBlockResponse, CredentialBlocksDeleteResponse, CredentialDisableResponse, CredentialRefreshResponse, CredentialUploadResponse, HealthzResponse, SnapshotResponse, SnapshotStreamEvent, UsageHistoryResponse, UsageResponse, UsageStaleResponse } from "./types.js";
10
+ export interface AuthBrokerClientOptions {
11
+ /** Base URL (e.g. `https://broker.tailnet:8765`). Trailing slashes are trimmed. */
12
+ url: string;
13
+ /** Bearer token used for everything except `healthz`. */
14
+ token: string;
15
+ /** Per-request timeout in milliseconds. Default 10s. */
16
+ timeoutMs?: number;
17
+ /** Retry connection errors this many times. Default 1. */
18
+ maxRetries?: number;
19
+ /** Override fetch (used in tests). Default global `fetch`. */
20
+ fetchImpl?: typeof fetch;
21
+ }
22
+ export declare class AuthBrokerError extends Error {
23
+ readonly status: number | undefined;
24
+ readonly body: string | undefined;
25
+ constructor(message: string, opts?: {
26
+ status?: number;
27
+ body?: string;
28
+ cause?: unknown;
29
+ });
30
+ }
31
+ /**
32
+ * Thrown when a broker responds 404 to `GET /v1/snapshot/stream` — old
33
+ * brokers that predate the SSE endpoint. Callers (`RemoteAuthCredentialStore`)
34
+ * detect this sentinel to fall back to long-polling permanently.
35
+ */
36
+ export declare class AuthBrokerStreamUnsupportedError extends AuthBrokerError {
37
+ constructor(message?: string);
38
+ }
39
+ export interface FetchSnapshotOptions {
40
+ ifGenerationGt?: number;
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
+ };
52
+ export declare class AuthBrokerClient {
53
+ #private;
54
+ constructor(opts: AuthBrokerClientOptions);
55
+ healthz(signal?: AbortSignal): Promise<HealthzResponse>;
56
+ fetchSnapshot(opts?: FetchSnapshotOptions): Promise<FetchSnapshotResult>;
57
+ /**
58
+ * Subscribe to the broker's SSE snapshot stream. The first frame is always
59
+ * a full `snapshot`; subsequent frames are `entry` upserts / refreshes or
60
+ * `removed` deletes. Caller controls lifecycle via `opts.signal`.
61
+ *
62
+ * Throws {@link AuthBrokerStreamUnsupportedError} when the broker responds
63
+ * 404 — older brokers predate this endpoint and the caller should fall back
64
+ * to long-polling for the remainder of its lifetime.
65
+ */
66
+ openSnapshotStream(opts?: {
67
+ signal?: AbortSignal;
68
+ }): AsyncGenerator<SnapshotStreamEvent>;
69
+ fetchUsage(signal?: AbortSignal): Promise<UsageResponse>;
70
+ /** Recorded usage-limit snapshots from the broker host, oldest first. */
71
+ fetchUsageHistory(query?: {
72
+ sinceMs?: number;
73
+ provider?: string;
74
+ }, signal?: AbortSignal): Promise<UsageHistoryResponse>;
75
+ /** Report this client's batched observed request usage for per-install burn tracking. */
76
+ reportClientUsage(report: ClientUsageReportRequest, signal?: AbortSignal): Promise<ClientUsageReportResponse>;
77
+ /** Per-client token burn aggregates recorded by the broker host. */
78
+ fetchClientUsageSummary(query?: {
79
+ sinceMs?: number;
80
+ }, signal?: AbortSignal): Promise<ClientUsageSummaryResponse>;
81
+ notifyUsageStale(signal?: AbortSignal): Promise<UsageStaleResponse>;
82
+ refreshCredential(id: number, signal?: AbortSignal): Promise<CredentialRefreshResponse>;
83
+ disableCredential(id: number, cause: string, signal?: AbortSignal): Promise<CredentialDisableResponse>;
84
+ /**
85
+ * Disabled-credential tombstones (identity + cause, no token material).
86
+ * Returns an empty list against brokers predating `GET
87
+ * /v1/credentials/disabled` (404).
88
+ */
89
+ listDisabledCredentials(provider?: string, signal?: AbortSignal): Promise<DisabledCredentialSummary[]>;
90
+ uploadCredential(provider: string, credential: AuthCredential, signal?: AbortSignal): Promise<CredentialUploadResponse>;
91
+ upsertCredentialBlock(id: number, block: CredentialBlockRequest, signal?: AbortSignal): Promise<CredentialBlockResponse>;
92
+ deleteCredentialBlocks(id: number, signal?: AbortSignal): Promise<CredentialBlocksDeleteResponse>;
93
+ }
@@ -0,0 +1,39 @@
1
+ import { AuthStorage } from "../auth-storage.js";
2
+ import { type AuthBrokerAccountPool } from "./remote-store.js";
3
+ export interface AuthBrokerClientConfig {
4
+ url: string;
5
+ token: string;
6
+ }
7
+ export interface ResolveAuthBrokerConfigOptions {
8
+ agentDir?: string;
9
+ configValueResolver?: (config: string) => Promise<string | undefined>;
10
+ }
11
+ export interface DiscoverAuthStorageOptions {
12
+ agentDir?: string;
13
+ configValueResolver?: (config: string) => Promise<string | undefined>;
14
+ cachePath?: string;
15
+ sourceLabel?: string;
16
+ /** Programmatic pool for SDK hosts. Takes precedence over the environment file. */
17
+ accountPool?: AuthBrokerAccountPool;
18
+ }
19
+ /** Path to the local bearer token file. Created by `omp auth-broker token`. */
20
+ export declare function getAuthBrokerTokenFilePath(): string;
21
+ export declare function loadAuthBrokerAccountPool(): Promise<AuthBrokerAccountPool | undefined>;
22
+ /**
23
+ * Resolve broker connection configuration using the same precedence as the TUI:
24
+ *
25
+ * 1. `OMP_AUTH_BROKER_URL` / `OMP_AUTH_BROKER_TOKEN` env vars.
26
+ * 2. `auth.broker.url` / `auth.broker.token` in `<agentDir>/config.yml` or `<agentDir>/config.yaml`.
27
+ * 3. `<config-root>/auth-broker.token` file (paired with a URL from env/config).
28
+ *
29
+ * Returns `null` when no broker URL is configured — callers should fall back to
30
+ * the local SQLite store. Throws when a URL is configured but no token is
31
+ * available, matching the TUI behavior.
32
+ */
33
+ export declare function resolveAuthBrokerConfig(options?: ResolveAuthBrokerConfigOptions): Promise<AuthBrokerClientConfig | null>;
34
+ /**
35
+ * Create an AuthStorage instance, using the broker when configured and falling
36
+ * back to the local SQLite store otherwise. This is the single source of truth
37
+ * for the TUI and the catalog generator.
38
+ */
39
+ export declare function discoverAuthStorage(options?: DiscoverAuthStorageOptions): Promise<AuthStorage>;
@@ -0,0 +1,7 @@
1
+ export * from "./client.js";
2
+ export * from "./discover.js";
3
+ export * from "./refresher.js";
4
+ export * from "./remote-store.js";
5
+ export * from "./server.js";
6
+ export * from "./snapshot-cache.js";
7
+ export * from "./types.js";
@@ -0,0 +1,25 @@
1
+ import { type AuthStorage } from "../auth-storage.js";
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,136 @@
1
+ import { type AuthCredential, type AuthCredentialStore, type DisabledCredentialSummary, type OAuthCredential, type StoredAuthCredential, type StoredCredentialBlock } from "../auth-storage.js";
2
+ import type { OAuthCredentials } from "../registry/oauth/types.js";
3
+ import type { Provider } from "../types.js";
4
+ import type { ObservedUsageEntry, UsageReport } from "../usage.js";
5
+ import { type AuthBrokerClient } from "./client.js";
6
+ import type { SnapshotResponse } from "./types.js";
7
+ /**
8
+ * Per-provider OAuth identities visible to this trusted broker client.
9
+ * Missing providers are unrestricted; an empty set excludes that provider's
10
+ * OAuth credentials. API keys are never filtered.
11
+ */
12
+ export type AuthBrokerAccountPool = ReadonlyMap<string, ReadonlySet<string>>;
13
+ export interface RemoteAuthCredentialStoreOptions {
14
+ client: AuthBrokerClient;
15
+ /**
16
+ * Initial snapshot. When omitted, callers must call
17
+ * {@link RemoteAuthCredentialStore.refreshSnapshot} before the first read.
18
+ */
19
+ initialSnapshot?: SnapshotResponse;
20
+ /**
21
+ * Subscribe to the broker's SSE snapshot stream when available. Falls back
22
+ * to long-poll permanently when the broker returns 404. Default `true`.
23
+ */
24
+ streamSnapshots?: boolean;
25
+ /**
26
+ * Called with each broker-sourced raw full snapshot after the filtered
27
+ * public view is applied. The constructor's initial snapshot intentionally
28
+ * does not trigger this hook.
29
+ */
30
+ onSnapshot?: (snapshot: SnapshotResponse, generation: number) => void;
31
+ /**
32
+ * OAuth identities visible through this store. This is a trusted-client
33
+ * routing policy, not broker authorization.
34
+ */
35
+ accountPool?: AuthBrokerAccountPool;
36
+ /** Flush cadence for batched observed-usage reports. Default 10s. */
37
+ observedUsageFlushMs?: number;
38
+ }
39
+ export declare class RemoteAuthCredentialStore implements AuthCredentialStore {
40
+ #private;
41
+ constructor(opts: RemoteAuthCredentialStoreOptions);
42
+ get client(): AuthBrokerClient;
43
+ get snapshot(): SnapshotResponse;
44
+ /** Re-hydrate the in-memory snapshot from the broker. */
45
+ refreshSnapshot(): Promise<SnapshotResponse>;
46
+ listAuthCredentials(provider?: string): StoredAuthCredential[];
47
+ /** Broker-backed disabled tombstones; empty against brokers predating the endpoint. */
48
+ listDisabledCredentials(provider?: string, signal?: AbortSignal): Promise<DisabledCredentialSummary[]>;
49
+ getCredentialBlock(credentialId: number, providerKey: string, blockScope: string): number | undefined;
50
+ getCredentialBlockReconcileAfter(credentialId: number, providerKey: string, blockScope: string): number | undefined;
51
+ listCredentialBlocks(credentialIds: readonly number[]): StoredCredentialBlock[];
52
+ upsertCredentialBlock(block: StoredCredentialBlock): void;
53
+ deleteCredentialBlock(_credentialId: number, _providerKey: string, _blockScope: string): void;
54
+ deleteCredentialBlocks(credentialId: number): void;
55
+ cleanExpiredCredentialBlocks(nowMs: number): void;
56
+ /**
57
+ * In-memory update from a successful refresh through the broker. AuthStorage
58
+ * calls this after `#replaceCredentialAt`; the broker already persisted the
59
+ * authoritative row, so we just mirror it.
60
+ */
61
+ updateAuthCredential(id: number, credential: AuthCredential): void;
62
+ deleteAuthCredential(id: number, disabledCause: string): void;
63
+ deleteAuthCredentialRemote(id: number, disabledCause: string): Promise<boolean>;
64
+ tryDisableAuthCredentialIfMatches(id: number, _expectedData: string, disabledCause: string): boolean;
65
+ waitForFreshSnapshot(maxWaitMs: number, opts?: {
66
+ signal?: AbortSignal;
67
+ }): Promise<boolean>;
68
+ prepareForRequest(credentialId: number, opts?: {
69
+ signal?: AbortSignal;
70
+ }): Promise<boolean>;
71
+ markCredentialSuspect(credentialId: number, opts?: {
72
+ signal?: AbortSignal;
73
+ }): Promise<void>;
74
+ replaceAuthCredentialsForProvider(_provider: string, _credentials: AuthCredential[]): StoredAuthCredential[];
75
+ upsertAuthCredentialForProvider(_provider: string, _credential: AuthCredential): StoredAuthCredential[];
76
+ deleteAuthCredentialsForProvider(_provider: string, _disabledCause: string): void;
77
+ /**
78
+ * Upsert a single credential through the broker. The broker server is the
79
+ * canonical writer — see `POST /v1/credential`. The redacted snapshot
80
+ * entries returned by the server replace the provider's rows in our local
81
+ * snapshot, and the global snapshot is then refreshed in the background so
82
+ * any concurrent peer (refresh, generation bump) stays in sync.
83
+ */
84
+ upsertAuthCredentialRemote(provider: string, credential: AuthCredential): Promise<StoredAuthCredential[]>;
85
+ /**
86
+ * Replace-all semantics: disable every active credential for the provider,
87
+ * then upload each of the new credentials. Used by API-key login so a new
88
+ * key clobbers any previously stored key for the same provider.
89
+ */
90
+ replaceAuthCredentialsRemote(provider: string, credentials: AuthCredential[]): Promise<StoredAuthCredential[]>;
91
+ /**
92
+ * Logout: disable every active credential for the provider on the broker,
93
+ * then drop them from the local snapshot. Refresh fetches the authoritative
94
+ * post-state in the background.
95
+ */
96
+ deleteAuthCredentialsRemote(provider: string, disabledCause: string): Promise<void>;
97
+ getCache(key: string): string | null;
98
+ setCache(key: string, value: string, expiresAtSec: number): void;
99
+ /** Drop all cache rows whose keys start with the supplied prefix. */
100
+ deleteCachePrefix(prefix: string): void;
101
+ cleanExpiredCache(): void;
102
+ invalidateUsageCache(signal?: AbortSignal): Promise<void>;
103
+ /**
104
+ * Store-level hook consumed by `AuthStorage` — routes refresh through the
105
+ * broker so the actual refresh token never leaves the broker host. Returns
106
+ * the broker-redacted credential with {@link REMOTE_REFRESH_SENTINEL} in
107
+ * the `refresh` slot.
108
+ */
109
+ refreshOAuthCredential(_provider: Provider, credentialId: number, _credential: OAuthCredential, signal?: AbortSignal): Promise<OAuthCredentials>;
110
+ /**
111
+ * Store-level hook consumed by `AuthStorage.fetchUsageReports()` — proxies
112
+ * to the broker's `/v1/usage` endpoint. The broker's egress IP isn't
113
+ * rate-limited by Anthropic's per-IP `/usage` cap the way a heavy
114
+ * residential laptop is, so all credentials surface every cycle.
115
+ */
116
+ fetchUsageReports(signal?: AbortSignal): Promise<UsageReport[] | null>;
117
+ /**
118
+ * Per-credential usage hook consumed by `AuthStorage.#getUsageReport`. Pulls
119
+ * the aggregate broker `/v1/usage` once and serves all callers from the
120
+ * same response (coalesced + cached), then overlays any client-observed
121
+ * header hints for the matching credential.
122
+ *
123
+ * The broker already aggregates with its own 30s TTL on the server side; our
124
+ * 15s client TTL is below that so we usually re-use the broker's cache too.
125
+ */
126
+ getUsageReport(provider: Provider, credential: OAuthCredential, signal?: AbortSignal): Promise<UsageReport | null>;
127
+ ingestUsageReport(provider: Provider, credential: OAuthCredential, report: UsageReport): boolean;
128
+ /**
129
+ * Fold locally observed request usage into the pending report and schedule
130
+ * a flush. One `POST /v1/usage/observed` at most per flush interval; on
131
+ * failure the batch is retained and retried with the next flush. A 404
132
+ * (pre-endpoint broker) disables reporting for the life of this store.
133
+ */
134
+ recordObservedUsage(entries: ObservedUsageEntry[]): void;
135
+ close(): void;
136
+ }
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Auth broker HTTP server.
3
+ *
4
+ * Wraps an {@link AuthStorage} (backed by a SQLite store on the broker host)
5
+ * and exposes a minimal REST API for snapshot pulls and explicit refresh /
6
+ * disable operations. Background refresh of expiring credentials lives in
7
+ * {@link AuthBrokerRefresher}.
8
+ *
9
+ * Transport security is delegated to the operator (Tailscale / Wireguard);
10
+ * the server only checks a bearer token against an allow-list per request.
11
+ */
12
+ import type { AuthStorage } from "../auth-storage.js";
13
+ export interface AuthBrokerServerOptions {
14
+ /** Underlying credential storage (wraps the local SQLite store on the broker). */
15
+ storage: AuthStorage;
16
+ /** Listen address; accepts `host:port` or just `port`. */
17
+ bind?: string;
18
+ /** Accept any of these bearer tokens. Empty disables auth (loopback only). */
19
+ bearerTokens: string[];
20
+ /** Broker version string surfaced on `/v1/healthz`. */
21
+ version?: string;
22
+ /** Refresh credentials expiring within this window. Default 5 min. */
23
+ refreshSkewMs?: number;
24
+ /** Background refresh cadence. Default 60s. */
25
+ refreshIntervalMs?: number;
26
+ /** Disable the background refresher (e.g. for tests). */
27
+ disableRefresher?: boolean;
28
+ /**
29
+ * Override SSE keepalive cadence in milliseconds for `/v1/snapshot/stream`.
30
+ * Internal-only — tests use a short interval so they can assert heartbeats
31
+ * without long sleeps. Default {@link DEFAULT_STREAM_KEEPALIVE_MS}.
32
+ */
33
+ streamKeepaliveMs?: number;
34
+ /**
35
+ * Override cross-process SQLite change polling in milliseconds.
36
+ * Internal-only — tests use a short interval. Default 250ms.
37
+ */
38
+ externalChangePollMs?: number;
39
+ }
40
+ export interface AuthBrokerServerHandle {
41
+ /** Bound URL (`http://host:port`). */
42
+ url: string;
43
+ port: number;
44
+ hostname: string;
45
+ close(): Promise<void>;
46
+ }
47
+ /** Boot the broker. Caller owns lifecycle; `handle.close()` to stop. */
48
+ export declare function startAuthBroker(opts: AuthBrokerServerOptions): AuthBrokerServerHandle;
@@ -0,0 +1,17 @@
1
+ import type { SnapshotResponse } from "./types.js";
2
+ export interface ReadAuthBrokerSnapshotCacheOptions {
3
+ path: string;
4
+ token: string;
5
+ url: string;
6
+ ttlMs: number;
7
+ /** Override clock for deterministic tests. */
8
+ now?: () => number;
9
+ }
10
+ export interface WriteAuthBrokerSnapshotCacheOptions {
11
+ path: string;
12
+ token: string;
13
+ url: string;
14
+ snapshot: SnapshotResponse;
15
+ }
16
+ export declare function readAuthBrokerSnapshotCache(opts: ReadAuthBrokerSnapshotCacheOptions): Promise<SnapshotResponse | null>;
17
+ export declare function writeAuthBrokerSnapshotCache(opts: WriteAuthBrokerSnapshotCacheOptions): Promise<void>;