@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,102 @@
1
+ import type { Api, Model, StreamOptions } from "../types.js";
2
+ import { AssistantMessageEventStream } from "./event-stream.js";
3
+ /** Stable lead phrase of the guard's error message; exported for tests. The
4
+ * message also carries "stream stall" so the session + transport retry
5
+ * classifiers treat it as a transient (retryable) stop without bespoke rules. */
6
+ export declare const THINKING_LOOP_ERROR_MARKER = "Thinking loop detected";
7
+ /**
8
+ * True when `model` is a Gemini model whose native thinking stream surfaces the
9
+ * "thought summary" titles this module's header guard counts.
10
+ *
11
+ * OpenAI-compat transports can serve Gemini under an arbitrary provider/id, so they
12
+ * carry the explicit `compat.enableGeminiThinkingLoopGuard` flag; direct Gemini
13
+ * transports carry a clearly shaped id/provider, so a string match is sufficient.
14
+ */
15
+ export declare function isGeminiThinkingModel(model: Model<Api>): boolean;
16
+ /**
17
+ * True when `model` should be guarded for thinking/response loops (Gemini & DeepSeek).
18
+ *
19
+ * OpenAI-compat transports can serve Gemini or DeepSeek under an arbitrary provider/id.
20
+ * Direct Gemini/DeepSeek transports carry a clearly shaped id/provider, so a string match
21
+ * is sufficient.
22
+ */
23
+ export declare function isLoopGuardedModel(model: Model<Api>, options?: StreamOptions): boolean;
24
+ /** @deprecated Use isLoopGuardedModel instead. */
25
+ export declare function isGeminiThinkingLoopModel(model: Model<Api>): boolean;
26
+ /**
27
+ * Stateful detector fed the streamed thinking deltas. `push` returns a
28
+ * human-readable reason the first time a loop shape is recognized; the caller
29
+ * is responsible for stopping after the first hit.
30
+ */
31
+ export declare class ThinkingLoopDetector {
32
+ #private;
33
+ push(delta: string): string | null;
34
+ /** Process the buffered trailing paragraph (one with no blank-line / heading
35
+ * terminator). Called when the thinking block ends so the final segment —
36
+ * which may be the one that completes a duplicate cluster — is not dropped. */
37
+ flush(): string | null;
38
+ }
39
+ /**
40
+ * Consecutive Gemini thought-summary headers in one uninterrupted reasoning
41
+ * stream that trips the tool-call reminder. Gemini occasionally narrates a long
42
+ * chain of titled summaries ("Examining Result Handling", "Refining Result
43
+ * Rendering", …) without ever calling a tool, burning the whole budget on
44
+ * planning. This is the over-planning shape {@link ThinkingLoopDetector} misses —
45
+ * those titles are stripped before its similarity analysis precisely because their
46
+ * wording keeps changing, so a genuinely-distinct planning runaway never trips it.
47
+ *
48
+ * Set well above legitimate hard-problem depth: a capable model can emit ~10
49
+ * distinct, progressing hypotheses in a single reasoning block before acting (and
50
+ * a false trip is costly — the interrupt discards the whole reasoning turn). A
51
+ * real narration runaway burns dozens-to-hundreds of titles, so this still trips
52
+ * fast on the actual pathology.
53
+ */
54
+ export declare const GEMINI_HEADER_RUNAWAY_THRESHOLD = 24;
55
+ /**
56
+ * True when a single trimmed line is a Gemini reasoning-summary title: a markdown
57
+ * ATX heading (`## …`) or a whole-line bold / bold-italic run (`**Title**`,
58
+ * `***Title***`). Inline emphasis inside prose never matches — the bold run must
59
+ * span the entire line. Mirrors the title shapes {@link ThinkingLoopDetector}
60
+ * strips before similarity analysis.
61
+ */
62
+ export declare function isReasoningSummaryHeader(line: string): boolean;
63
+ /**
64
+ * Counts consecutive Gemini reasoning-summary headers across a streamed thinking
65
+ * block. {@link push} returns true exactly once — when the running header count
66
+ * first reaches {@link GEMINI_HEADER_RUNAWAY_THRESHOLD} — and the caller then
67
+ * interrupts the stream and reminds the model to issue a tool call. Paragraph
68
+ * lines between titles do NOT reset the run (Gemini emits header + paragraph per
69
+ * thought, so the run IS the number of summaries); leaving the reasoning channel
70
+ * does, via {@link reset} on a new thinking block / prose / tool call.
71
+ */
72
+ export declare class GeminiHeaderRunDetector {
73
+ #private;
74
+ /** Feed a thinking delta. Returns true the first time the run hits the threshold. */
75
+ push(delta: string): boolean;
76
+ /** Number of summary titles counted in the current run (for the reminder/log). */
77
+ get count(): number;
78
+ /** Re-arm for a fresh reasoning block: clears the buffer, count, and latch. */
79
+ reset(): void;
80
+ }
81
+ /**
82
+ * Wrap a provider stream with the loop guard. `controller` is the guard's own
83
+ * abort handle: aborting it (after wiring it into the provider's signal via
84
+ * {@link withGeminiThinkingLoopGuard}) tears down the upstream once a loop
85
+ * trips.
86
+ */
87
+ export declare function guardThinkingLoopStream(inner: AssistantMessageEventStream, model: Model<Api>, controller: AbortController, options?: StreamOptions): AssistantMessageEventStream;
88
+ /**
89
+ * Apply the loop guard around a provider dispatch. For non-guarded models
90
+ * (or when disabled) this is a transparent pass-through. For guarded models it injects a
91
+ * guard abort signal into the provider call so a detected loop tears down the
92
+ * upstream, then wraps the returned stream. The guard only raises the retryable
93
+ * stall; bounding the re-samples and the final cook pass lives in the
94
+ * result-awaiting caller.
95
+ */
96
+ export declare function withGeminiThinkingLoopGuard<O extends {
97
+ signal?: AbortSignal;
98
+ loopGuard?: {
99
+ enabled?: boolean;
100
+ checkAssistantContent?: boolean;
101
+ };
102
+ }>(model: Model<Api>, options: O | undefined, dispatch: (options: O | undefined) => AssistantMessageEventStream): AssistantMessageEventStream;
@@ -0,0 +1,26 @@
1
+ import type { AssistantMessage, ToolResultMessage } from "../types.js";
2
+ /** Runtime settings for cross-turn tool-call repetition detection. */
3
+ export interface ToolCallLoopGuardOptions {
4
+ readonly threshold: number;
5
+ readonly exemptTools: readonly string[];
6
+ }
7
+ /** A completed assistant turn plus the tool results it produced. */
8
+ export interface ToolCallLoopTurn {
9
+ readonly message: AssistantMessage;
10
+ readonly toolResults: readonly ToolResultMessage[];
11
+ }
12
+ /** Details needed to steer the model away from a repeated tool call. */
13
+ export interface RepeatedToolCallDetection {
14
+ readonly kind: "repeated_tool_call";
15
+ readonly toolName: string;
16
+ readonly count: number;
17
+ readonly resultSummary: string;
18
+ readonly argumentsSummary: string;
19
+ }
20
+ /** Detects consecutive identical assistant tool calls across model turns. */
21
+ export declare class ToolCallLoopGuard {
22
+ #private;
23
+ constructor(options: ToolCallLoopGuardOptions);
24
+ /** Records one completed turn and returns the threshold hit, if any. */
25
+ recordTurn(turn: ToolCallLoopTurn): RepeatedToolCallDetection | null;
26
+ }
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Utility functions for mapping unified ToolChoice to provider-specific formats.
3
+ */
4
+ import type { ToolChoice } from "../types.js";
5
+ /** OpenAI Completions API tool choice format */
6
+ export type OpenAICompletionsToolChoice = "auto" | "none" | "required" | {
7
+ type: "function";
8
+ function: {
9
+ name: string;
10
+ };
11
+ } | undefined;
12
+ /** OpenAI Responses API tool choice format (flat structure) */
13
+ export type OpenAIResponsesToolChoice = "auto" | "none" | "required" | {
14
+ type: "function";
15
+ name: string;
16
+ } | {
17
+ type: "custom";
18
+ name: string;
19
+ } | {
20
+ type: "computer";
21
+ } | undefined;
22
+ /** Anthropic-compatible tool choice format */
23
+ export type AnthropicToolChoice = "auto" | "none" | "any" | {
24
+ type: "tool";
25
+ name: string;
26
+ } | undefined;
27
+ /**
28
+ * Map unified ToolChoice to OpenAI Completions API format.
29
+ * - "any" → "required"
30
+ * - { type: "tool", name } → { type: "function", function: { name } }
31
+ */
32
+ export declare function mapToOpenAICompletionsToolChoice(choice?: ToolChoice): OpenAICompletionsToolChoice;
33
+ /**
34
+ * Returns true when an OpenAI-completions `tool_choice` value forces a tool
35
+ * call (`"required"` or a function-name pin), as opposed to leaving it open
36
+ * (`"auto"`, `"none"`, or unset). Accepts `unknown` because the param shape
37
+ * pulled from the OpenAI SDK (`ChatCompletionToolChoiceOption`) widens with
38
+ * each release; this check only needs the open/forced bit.
39
+ */
40
+ export declare function isForcedToolChoice(choice: unknown): boolean;
41
+ /**
42
+ * Map unified ToolChoice to OpenAI Responses API format.
43
+ * - "any" → "required"
44
+ * - { type: "tool", name } → { type: "function", name } (flat structure)
45
+ */
46
+ export declare function mapToOpenAIResponsesToolChoice(choice?: ToolChoice): OpenAIResponsesToolChoice;
47
+ /**
48
+ * Map unified ToolChoice to Anthropic-compatible format.
49
+ * - "required" → "any"
50
+ * - { type: "function", ... } → { type: "tool", name }
51
+ */
52
+ export declare function mapToAnthropicToolChoice(choice?: ToolChoice): AnthropicToolChoice;
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Tool-call argument validation pipeline.
3
+ *
4
+ * Tools may declare ArkType schemas or plain JSON Schema. This module builds a
5
+ * cached validation context, normalizes common LLM quirks against the wire
6
+ * schema, validates, performs conservative schema-directed coercions, and
7
+ * returns parsed arguments while preserving unknown root fields.
8
+ *
9
+ * The goal is to be conservative: every coercion is a structural rewrite that
10
+ * keeps the schema in charge of acceptance — we never invent values, only
11
+ * massage shapes the LLM almost got right.
12
+ */
13
+ import type { Tool, ToolCall } from "../types.js";
14
+ /**
15
+ * Finds a tool by name and validates the tool call arguments against its schema.
16
+ * @param tools Array of tool definitions
17
+ * @param toolCall The tool call from the LLM
18
+ * @returns The validated arguments
19
+ * @throws Error if tool is not found or validation fails
20
+ */
21
+ export declare function validateToolCall(tools: Tool[], toolCall: ToolCall): ToolCall["arguments"];
22
+ /**
23
+ * Validates tool call arguments against an ArkType or plain JSON Schema schema.
24
+ * Applies conservative LLM-quirk normalization before declaring failure.
25
+ *
26
+ * @throws Error with a formatted message when validation cannot be reconciled.
27
+ */
28
+ export declare function validateToolArguments(tool: Tool, toolCall: ToolCall): ToolCall["arguments"];
@@ -0,0 +1,57 @@
1
+ import type { ResponseInput } from "./providers/openai-responses-wire.js";
2
+ import type { CacheRetention, OpenAIResponsesHistoryPayload, ProviderPayload } from "./types.js";
3
+ export { isRecord } from "@linxiraos/pi-utils";
4
+ export declare function normalizeSystemPrompts(systemPrompt: readonly string[] | string | undefined | null): string[];
5
+ export declare function normalizeToolCallId(id: string): string;
6
+ type ResponsesToolItemIdPrefix = "fc" | "ctc";
7
+ export declare function normalizeResponsesToolCallId(id: string, itemPrefix?: ResponsesToolItemIdPrefix): {
8
+ callId: string;
9
+ itemId: string;
10
+ };
11
+ /**
12
+ * Truncate an OpenAI Responses API item ID to 64 characters.
13
+ * IDs exceeding the limit are replaced with a hash-based ID using the given prefix.
14
+ */
15
+ export declare function truncateResponseItemId(id: string, prefix: string): string;
16
+ interface OpenAIResponsesReplaySanitizeOptions {
17
+ supportsImageDetailOriginal?: boolean;
18
+ supportsComputerUse?: boolean;
19
+ }
20
+ /**
21
+ * Removes response-only lifecycle status from item types that reject it when replayed as input.
22
+ *
23
+ * Returns the original array when no item needs sanitization.
24
+ */
25
+ export declare function stripOpenAIResponsesOutputOnlyStatusesForReplay<TItem extends {
26
+ type?: unknown;
27
+ status?: unknown;
28
+ }>(items: TItem[]): TItem[];
29
+ export declare function sanitizeOpenAIResponsesHistoryItemsForReplay(items: Array<Record<string, unknown>>, options?: OpenAIResponsesReplaySanitizeOptions): ResponseInput;
30
+ /** Strip reasoning IDs whose only linked native output is a computer call that will be demoted. */
31
+ export declare function stripOpenAIResponsesComputerLinkedReasoningIdsForReplay(items: ResponseInput): ResponseInput;
32
+ /**
33
+ * Finalize provisional native-computer reasoning IDs after the complete
34
+ * Responses input has been rebuilt, model-adapted, and orphan-repaired.
35
+ */
36
+ export declare function stripUnpairedOpenAIResponsesComputerReasoningIdsForReplay(items: ResponseInput): ResponseInput;
37
+ /**
38
+ * Sanitize assistant-native Responses history for replay.
39
+ *
40
+ * Returns `undefined` for hidden-empty turns that only contain reasoning and an
41
+ * empty assistant message, allowing callers to rebuild visible transcript
42
+ * history instead of replaying stale native state.
43
+ */
44
+ export declare function sanitizeOpenAIResponsesAssistantHistoryItemsForReplay(items: Array<Record<string, unknown>>, options?: OpenAIResponsesReplaySanitizeOptions): ResponseInput | undefined;
45
+ /**
46
+ * Drop hidden-only fallback assistant replay after a native Responses snapshot is rejected.
47
+ */
48
+ export declare function sanitizeOpenAIResponsesAssistantFallbackItemsForReplay(items: ResponseInput): ResponseInput;
49
+ export declare function createOpenAIResponsesHistoryPayload(provider: string, items: Array<Record<string, unknown>>, incremental?: boolean): OpenAIResponsesHistoryPayload;
50
+ export declare function getOpenAIResponsesHistoryPayload(providerPayload: ProviderPayload | undefined, currentProvider: string, fallbackProvider?: string): OpenAIResponsesHistoryPayload | undefined;
51
+ export declare function getOpenAIResponsesHistoryItems(providerPayload: ProviderPayload | undefined, currentProvider: string, fallbackProvider?: string): Array<Record<string, unknown>> | undefined;
52
+ /**
53
+ * Resolve cache retention preference: explicit request option first, then the
54
+ * `PI_CACHE_RETENTION` env override (`long` | `short` | `none`), then the
55
+ * provider-supplied fallback.
56
+ */
57
+ export declare function resolveCacheRetention(cacheRetention?: CacheRetention, fallback?: CacheRetention): CacheRetention;
package/package.json ADDED
@@ -0,0 +1,138 @@
1
+ {
2
+ "type": "module",
3
+ "name": "@linxiraos/pi-ai",
4
+ "version": "1.0.0",
5
+ "description": "Unified LLM API with automatic model discovery and provider configuration",
6
+ "homepage": "https://linxira-os.github.io",
7
+ "author": "Can Boluk",
8
+ "contributors": [
9
+ "Mario Zechner"
10
+ ],
11
+ "license": "MIT",
12
+ "repository": {
13
+ "type": "git",
14
+ "url": "git+https://github.com/Linxira-OS/linxira-zeta.git",
15
+ "directory": "packages/ai"
16
+ },
17
+ "bugs": {
18
+ "url": "https://github.com/can1357/oh-my-pi/issues"
19
+ },
20
+ "keywords": [
21
+ "ai",
22
+ "llm",
23
+ "openai",
24
+ "anthropic",
25
+ "gemini",
26
+ "unified",
27
+ "api"
28
+ ],
29
+ "main": "./src/index.ts",
30
+ "types": "./dist/types/index.d.ts",
31
+ "scripts": {
32
+ "check": "biome check . && bun run check:types",
33
+ "check:types": "tsgo -p tsconfig.json --noEmit",
34
+ "lint": "biome lint .",
35
+ "test": "bun test --parallel",
36
+ "fix": "biome check --write --unsafe .",
37
+ "fmt": "biome format --write ."
38
+ },
39
+ "dependencies": {
40
+ "@bufbuild/protobuf": "^2.12.1",
41
+ "@linxiraos/pi-omptype": "1.0.0",
42
+ "@linxiraos/pi-catalog": "1.0.0",
43
+ "@linxiraos/pi-utils": "1.0.0",
44
+ "@linxiraos/pi-wire": "1.0.0"
45
+ },
46
+ "devDependencies": {
47
+ "@bufbuild/protoc-gen-es": "^2.12.1",
48
+ "@types/bun": "^1.3.14"
49
+ },
50
+ "engines": {
51
+ "bun": ">=1.3.14"
52
+ },
53
+ "files": [
54
+ "src",
55
+ "README.md",
56
+ "CHANGELOG.md",
57
+ "dist/types"
58
+ ],
59
+ "exports": {
60
+ ".": {
61
+ "types": "./dist/types/index.d.ts",
62
+ "import": "./src/index.ts"
63
+ },
64
+ "./error": {
65
+ "types": "./dist/types/error/index.d.ts",
66
+ "import": "./src/error/index.ts"
67
+ },
68
+ "./*": {
69
+ "types": "./dist/types/*.d.ts",
70
+ "import": "./src/*.ts"
71
+ },
72
+ "./auth-broker": {
73
+ "types": "./dist/types/auth-broker/index.d.ts",
74
+ "import": "./src/auth-broker/index.ts"
75
+ },
76
+ "./auth-broker/*": {
77
+ "types": "./dist/types/auth-broker/*.d.ts",
78
+ "import": "./src/auth-broker/*.ts"
79
+ },
80
+ "./auth-gateway": {
81
+ "types": "./dist/types/auth-gateway/index.d.ts",
82
+ "import": "./src/auth-gateway/index.ts"
83
+ },
84
+ "./auth-gateway/*": {
85
+ "types": "./dist/types/auth-gateway/*.d.ts",
86
+ "import": "./src/auth-gateway/*.ts"
87
+ },
88
+ "./providers/*": {
89
+ "types": "./dist/types/providers/*.d.ts",
90
+ "import": "./src/providers/*.ts"
91
+ },
92
+ "./providers/openai-codex/*": {
93
+ "types": "./dist/types/providers/openai-codex/*.d.ts",
94
+ "import": "./src/providers/openai-codex/*.ts"
95
+ },
96
+ "./usage/*": {
97
+ "types": "./dist/types/usage/*.d.ts",
98
+ "import": "./src/usage/*.ts"
99
+ },
100
+ "./utils/harmony-leak": {
101
+ "types": "./dist/types/utils/harmony-leak.d.ts",
102
+ "import": "./src/utils/harmony-leak.ts"
103
+ },
104
+ "./dialect": {
105
+ "types": "./dist/types/dialect/index.d.ts",
106
+ "import": "./src/dialect/index.ts"
107
+ },
108
+ "./utils/*": {
109
+ "types": "./dist/types/utils/*.d.ts",
110
+ "import": "./src/utils/*.ts"
111
+ },
112
+ "./oauth": {
113
+ "types": "./dist/types/registry/oauth/index.d.ts",
114
+ "import": "./src/registry/oauth/index.ts"
115
+ },
116
+ "./oauth/*": {
117
+ "types": "./dist/types/registry/oauth/*.d.ts",
118
+ "import": "./src/registry/oauth/*.ts"
119
+ },
120
+ "./registry": {
121
+ "types": "./dist/types/registry/index.d.ts",
122
+ "import": "./src/registry/index.ts"
123
+ },
124
+ "./registry/oauth": {
125
+ "types": "./dist/types/registry/oauth/index.d.ts",
126
+ "import": "./src/registry/oauth/index.ts"
127
+ },
128
+ "./utils/schema": {
129
+ "types": "./dist/types/utils/schema/index.d.ts",
130
+ "import": "./src/utils/schema/index.ts"
131
+ },
132
+ "./utils/schema/*": {
133
+ "types": "./dist/types/utils/schema/*.d.ts",
134
+ "import": "./src/utils/schema/*.ts"
135
+ },
136
+ "./*.js": "./src/*.ts"
137
+ }
138
+ }
@@ -0,0 +1,109 @@
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
+
8
+ import * as AIError from "./error";
9
+ import type {
10
+ Api,
11
+ AssistantMessageEventStream,
12
+ Context,
13
+ KnownApi,
14
+ Model,
15
+ SimpleStreamOptions,
16
+ StreamOptions,
17
+ } from "./types";
18
+
19
+ const BUILTIN_API_IDS = [
20
+ "openai-completions",
21
+ "openai-responses",
22
+ "openrouter",
23
+ "openai-codex-responses",
24
+ "azure-openai-responses",
25
+ "anthropic-messages",
26
+ "bedrock-converse-stream",
27
+ "google-generative-ai",
28
+ "google-gemini-cli",
29
+ "google-vertex",
30
+ "ollama-chat",
31
+ "cursor-agent",
32
+ "gitlab-duo-agent",
33
+ "devin-agent",
34
+ ] as const satisfies readonly KnownApi[];
35
+
36
+ type _MissingBuiltinApis = Exclude<KnownApi, (typeof BUILTIN_API_IDS)[number]>;
37
+ type _CheckBuiltinApis = _MissingBuiltinApis extends never
38
+ ? true
39
+ : ["BUILTIN_APIS is missing KnownApi values", _MissingBuiltinApis];
40
+ true satisfies _CheckBuiltinApis;
41
+
42
+ const BUILTIN_APIS = new Set<KnownApi>(BUILTIN_API_IDS);
43
+
44
+ export type CustomStreamFn = (
45
+ model: Model<Api>,
46
+ context: Context,
47
+ options?: StreamOptions,
48
+ ) => AssistantMessageEventStream;
49
+ export type CustomStreamSimpleFn = (
50
+ model: Model<Api>,
51
+ context: Context,
52
+ options?: SimpleStreamOptions,
53
+ ) => AssistantMessageEventStream;
54
+
55
+ export interface RegisteredCustomApi {
56
+ stream: CustomStreamFn;
57
+ streamSimple: CustomStreamSimpleFn;
58
+ sourceId?: string;
59
+ }
60
+
61
+ const customApiRegistry = new Map<string, RegisteredCustomApi>();
62
+
63
+ function assertCustomApiName(api: string): void {
64
+ if (BUILTIN_APIS.has(api as KnownApi)) {
65
+ throw new AIError.ConfigurationError(`Cannot register custom API "${api}": built-in API names are reserved.`);
66
+ }
67
+ }
68
+
69
+ /**
70
+ * Register a custom API streaming function.
71
+ */
72
+ export function registerCustomApi(
73
+ api: string,
74
+ streamSimple: CustomStreamSimpleFn,
75
+ sourceId?: string,
76
+ stream?: CustomStreamFn,
77
+ ): void {
78
+ assertCustomApiName(api);
79
+ customApiRegistry.set(api, {
80
+ stream: stream ?? ((model, context, options) => streamSimple(model, context, options as SimpleStreamOptions)),
81
+ streamSimple,
82
+ sourceId,
83
+ });
84
+ }
85
+
86
+ /**
87
+ * Get a custom API provider by API identifier.
88
+ */
89
+ export function getCustomApi(api: string): RegisteredCustomApi | undefined {
90
+ return customApiRegistry.get(api);
91
+ }
92
+
93
+ /**
94
+ * Remove all custom APIs registered by a specific source (e.g., extension path).
95
+ */
96
+ export function unregisterCustomApis(sourceId: string): void {
97
+ for (const [api, entry] of customApiRegistry.entries()) {
98
+ if (entry.sourceId === sourceId) {
99
+ customApiRegistry.delete(api);
100
+ }
101
+ }
102
+ }
103
+
104
+ /**
105
+ * Clear all custom API registrations.
106
+ */
107
+ export function clearCustomApis(): void {
108
+ customApiRegistry.clear();
109
+ }