@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,21 @@
1
+ import type { AssistantMessage, Context } from "../types.js";
2
+ import { AssistantMessageEventStream } from "./event-stream.js";
3
+ export declare const MAX_EMPTY_COMPLETION_RETRIES = 2;
4
+ export declare const EMPTY_COMPLETION_BASE_DELAY_MS = 500;
5
+ /**
6
+ * Whether a completed assistant message carries content worth delivering: an
7
+ * image, tool call, or any non-whitespace text. An empty/whitespace-only message
8
+ * — or one that only ever produced thinking — is the "empty response" failure.
9
+ */
10
+ export declare function hasVisibleAssistantContent(message: AssistantMessage): boolean;
11
+ interface EmptyCompletionRetryOptions {
12
+ signal?: AbortSignal;
13
+ providerRetryWait?: (delayMs: number, signal?: AbortSignal) => Promise<void>;
14
+ }
15
+ /**
16
+ * Wrap a single-attempt provider stream with bounded empty-completion retries.
17
+ * `attempt` MUST create a fresh request (and its own output message) on each
18
+ * call so a retry never inherits stale metadata from an empty attempt.
19
+ */
20
+ export declare function withEmptyCompletionRetry<M, O extends EmptyCompletionRetryOptions>(model: M, context: Context, options: O | undefined, attempt: (model: M, context: Context, options?: O) => AssistantMessageEventStream): AssistantMessageEventStream;
21
+ export {};
@@ -0,0 +1,39 @@
1
+ import type { AssistantMessage, AssistantMessageEvent } from "../types.js";
2
+ export declare class EventStream<T, R = T> implements AsyncIterable<T> {
3
+ #private;
4
+ queue: T[];
5
+ waiting: Array<{
6
+ resolve: (value: IteratorResult<T>) => void;
7
+ reject: (err: unknown) => void;
8
+ }>;
9
+ done: boolean;
10
+ /** True once finalResultPromise has been resolved or rejected. */
11
+ resultSettled: boolean;
12
+ finalResultPromise: Promise<R>;
13
+ resolveFinalResult: (result: R) => void;
14
+ rejectFinalResult: (err: unknown) => void;
15
+ isComplete: (event: T) => boolean;
16
+ extractResult: (event: T) => R;
17
+ constructor(isComplete: (event: T) => boolean, extractResult: (event: T) => R);
18
+ push(event: T): void;
19
+ deliver(event: T): void;
20
+ end(result?: R): void;
21
+ endWaiting(): void;
22
+ fail(err: unknown): void;
23
+ [Symbol.asyncIterator](): AsyncIterator<T>;
24
+ result(): Promise<R>;
25
+ /** True while local work tracked via {@link trackLocalWork} is pending. */
26
+ get hasPendingLocalWork(): boolean;
27
+ /**
28
+ * Track a local-work promise so idle watchdogs on this stream do not treat
29
+ * the event silence while it is pending as a provider stall.
30
+ */
31
+ trackLocalWork<TWork>(work: Promise<TWork>): Promise<TWork>;
32
+ }
33
+ export declare class AssistantMessageEventStream extends EventStream<AssistantMessageEvent, AssistantMessage> {
34
+ constructor();
35
+ push(event: AssistantMessageEvent): void;
36
+ end(result?: AssistantMessage): void;
37
+ }
38
+ /** Create an assistant-message event stream for legacy extension providers. */
39
+ export declare function createAssistantMessageEventStream(): AssistantMessageEventStream;
@@ -0,0 +1 @@
1
+ export declare function isFoundryEnabled(): boolean;
@@ -0,0 +1,2 @@
1
+ export declare function extractGoogleValidationUrl(errorBody: string): string | undefined;
2
+ export declare function formatGoogleValidationRequiredMessage(validationUrl: string, nextAction: string, email?: string): string;
@@ -0,0 +1,135 @@
1
+ import type { AssistantMessage, Model, ToolCall } from "../types.js";
2
+ /**
3
+ * Escape reserved Harmony control tokens in arbitrary text so it can be
4
+ * transported as data to a harmony-dialect model. Returns the input unchanged
5
+ * when it carries no reserved spelling.
6
+ *
7
+ * Callers MUST gate on a harmony target and escape only the transport copy —
8
+ * the persisted transcript keeps the byte-for-byte original.
9
+ */
10
+ export declare function escapeHarmonyControlTokens(text: string): string;
11
+ /**
12
+ * Escape reserved Harmony control tokens inside a JSON document string (e.g.
13
+ * `function_call.arguments`). Doubles the backslash so the document remains
14
+ * valid JSON whose *decoded* strings carry the inert `<\|token\|>` spelling.
15
+ * `<|` cannot occur outside a string literal in valid JSON, so the blanket
16
+ * replace never corrupts structure; malformed documents are escaped
17
+ * best-effort.
18
+ */
19
+ export declare function escapeHarmonyControlTokensInJson(text: string): string;
20
+ /**
21
+ * Whether requests to `model` are served by a Harmony-dialect backend
22
+ * (gpt-5.x / gpt-oss), which rejects reserved control-token spellings appearing
23
+ * as data in the request. Resolves the wire model id (`requestModelId ?? id`)
24
+ * so deployment/catalog aliases — e.g. an Azure alias whose `requestModelId` is
25
+ * `gpt-5.4` — are detected even when the local id is opaque.
26
+ */
27
+ export declare function isHarmonyDialectModel(model: Model): boolean;
28
+ declare const SIGNAL_ORDER: readonly ["M", "C", "G", "S", "B", "R", "T"];
29
+ export type HarmonySignalClass = "H" | (typeof SIGNAL_ORDER)[number];
30
+ export type HarmonySurface = "assistant_text" | "assistant_thinking" | "tool_arg";
31
+ export interface HarmonySignal {
32
+ classes: HarmonySignalClass[];
33
+ start: number;
34
+ end: number;
35
+ text: string;
36
+ }
37
+ export interface HarmonyDetection {
38
+ surface: HarmonySurface;
39
+ contentIndex?: number;
40
+ toolName?: string;
41
+ toolCallId?: string;
42
+ signals: HarmonySignal[];
43
+ }
44
+ export interface HarmonyAuditEvent {
45
+ action: "truncate_resume" | "abort_retry" | "escalated";
46
+ surface: HarmonySurface;
47
+ signal: string;
48
+ retryN: number;
49
+ model: string;
50
+ provider: string;
51
+ toolName?: string;
52
+ removedLen: number;
53
+ removedSha8: string;
54
+ removedPreview: string;
55
+ removedBlob?: string;
56
+ }
57
+ export interface HarmonyRecoveredToolCall {
58
+ message: AssistantMessage;
59
+ removed: string;
60
+ }
61
+ /**
62
+ * Whether to run leak detection on responses from this model. We default-on
63
+ * for every openai-codex model rather than enumerating ids, so a future
64
+ * gpt-5.6 (or whatever) doesn't silently bypass the mitigation. Detection
65
+ * itself is cheap; the cost of missing a leak on a new model is not.
66
+ */
67
+ export declare function isHarmonyLeakMitigationTarget(model: Model): boolean;
68
+ export declare function signalListLabel(signals: readonly HarmonySignal[]): string;
69
+ /**
70
+ * Detect harmony-protocol leakage in `text`. Returns undefined if clean.
71
+ *
72
+ * Trip rule: `H` alone, or `M` paired with at least one co-signal
73
+ * (`C`/`G`/`S`/`B`/`R`/`T`). Bare `M` does not trip — this document, its
74
+ * tests, and bug reports legitimately carry the marker.
75
+ *
76
+ * The `tool_arg` surface is held to a stricter rule. A tool argument is
77
+ * arbitrary file/data content that can legitimately carry the marker, a
78
+ * channel word, harmony control tokens, or a non-Latin script run (editing
79
+ * these very fixtures does exactly that). The only robust leak signal there
80
+ * is content trailing the structurally-valid parse, so a `tool_arg` detection
81
+ * additionally requires the `T` co-signal. Absent a `parsedEnd` boundary `T`
82
+ * is never set, so `tool_arg` scanning stays inert and a legitimate codex tool
83
+ * call is never hard-aborted. `assistant_text`/`assistant_thinking` keep the
84
+ * base rule.
85
+ *
86
+ * `parsedEnd`, when supplied, marks the byte at which a structurally valid
87
+ * tool-argument parse ends; markers at or past it set the `T` co-signal.
88
+ * `contentIndex`/`toolName`/`toolCallId` flow through to the returned
89
+ * detection for downstream auditing.
90
+ */
91
+ export declare function detectHarmonyLeak(text: string, surface: HarmonySurface, options?: {
92
+ parsedEnd?: number;
93
+ contentIndex?: number;
94
+ toolName?: string;
95
+ toolCallId?: string;
96
+ }): HarmonyDetection | undefined;
97
+ /**
98
+ * Scan an assistant message's content blocks; return the first detection.
99
+ *
100
+ * `toolArgParseEnd`, when supplied, resolves the byte offset at which a tool
101
+ * call's structurally-valid argument parse ends (the `T` co-signal in
102
+ * {@link detectHarmonyLeak}). Callers that can parse a tool's argument DSL pass
103
+ * it to enable `tool_arg` leak detection; omitting it keeps that surface inert
104
+ * — the safe default the agent loop relies on, since it cannot bound a streamed
105
+ * tool DSL and must never hard-abort a legitimate tool call.
106
+ */
107
+ export declare function detectHarmonyLeakInAssistantMessage(message: AssistantMessage, toolArgParseEnd?: (toolCall: ToolCall) => number | undefined): HarmonyDetection | undefined;
108
+ /**
109
+ * Truncate a contaminated tool call at the start of the contaminated line and
110
+ * append the tool's recovery sentinel. Returns a recovered AssistantMessage
111
+ * (containing only the cleaned tool call), a synthetic continuation user
112
+ * message asking the model to re-issue the rest, and the removed substring
113
+ * for auditing. Returns undefined when the tool is not recovery-eligible or
114
+ * the truncation would leave nothing meaningful to dispatch.
115
+ *
116
+ * `providerPayload` is dropped from the recovered message: for Codex the
117
+ * encrypted reasoning blob is opaque/signed and we cannot validate that it is
118
+ * uncontaminated. The model re-reasons on the next turn.
119
+ */
120
+ export declare function recoverHarmonyToolCall(message: AssistantMessage, detection: HarmonyDetection): HarmonyRecoveredToolCall | undefined;
121
+ /**
122
+ * Return the contaminated substring from `message` for audit purposes when
123
+ * recovery is not applicable (abort path). Walks from the first detected
124
+ * signal to end-of-content within the relevant block. Returns "" if the
125
+ * detection cannot be resolved against the message.
126
+ */
127
+ export declare function extractHarmonyRemoved(message: AssistantMessage, detection: HarmonyDetection): string;
128
+ export declare function createHarmonyAuditEvent(params: {
129
+ action: HarmonyAuditEvent["action"];
130
+ detection: HarmonyDetection;
131
+ model: Model;
132
+ retryN: number;
133
+ removed: string;
134
+ }): HarmonyAuditEvent;
135
+ export {};
@@ -0,0 +1,49 @@
1
+ export type RawHttpRequestDump = {
2
+ provider: string;
3
+ api: string;
4
+ model: string;
5
+ method?: string;
6
+ url?: string;
7
+ headers?: Record<string, string>;
8
+ body?: unknown;
9
+ };
10
+ export type CapturedHttpErrorResponse = {
11
+ status: number;
12
+ headers?: Headers;
13
+ bodyText?: string;
14
+ bodyJson?: unknown;
15
+ };
16
+ /**
17
+ * Build the JSON persisted for a rejected request. Request fields stay at the
18
+ * top level (so existing dump parsers still read `body`); the provider's error
19
+ * is added under `errorResponse` so a failed request is diagnosable from the
20
+ * dump file rather than the request alone.
21
+ */
22
+ export declare function buildHttp400DumpPayload(dump: RawHttpRequestDump, error: unknown, message: string): RawHttpRequestDump & {
23
+ errorResponse: {
24
+ status: number | undefined;
25
+ message: string;
26
+ };
27
+ };
28
+ /** HTTP statuses whose rejected request we persist for post-hoc diagnosis: the
29
+ * request-content rejections that wedge a session. 400 (bad request) and 413
30
+ * (payload too large — an oversized image / snapcompact frame payload that 413s
31
+ * and empties the turn). Auth (401/403), not-found (404), rate limits and 5xx
32
+ * are excluded: 429/5xx are retried, so persisting them here would write one
33
+ * dump per attempt. */
34
+ export declare function shouldDumpRejectedRequest(error: unknown): boolean;
35
+ export declare function appendRawHttpRequestDumpFor400(message: string, error: unknown, dump: RawHttpRequestDump | undefined): Promise<string>;
36
+ export declare function finalizeErrorMessage(error: unknown, rawRequestDump: RawHttpRequestDump | undefined, capturedErrorResponse?: CapturedHttpErrorResponse): Promise<string>;
37
+ /**
38
+ * Rewrite error message for GitHub Copilot request failures.
39
+ * Must run AFTER finalizeErrorMessage since it replaces the message entirely.
40
+ *
41
+ * 400 `model_not_supported` = Copilot fleet skew. A model that `/models`
42
+ * advertises can flap between 200 and 400 because only part of
43
+ * Copilot's fleet has it in the integrator allowlist. After the
44
+ * in-request retry exhausts, surface guidance rather than the raw error.
45
+ * 401 = token invalid/expired → credential removal is safe, prompt re-login.
46
+ * 403 = token valid but access denied (plan, model policy, org restriction) →
47
+ * do NOT reuse the auth-failed string (which triggers credential removal).
48
+ */
49
+ export declare function rewriteCopilotError(errorMessage: string, error: unknown, provider: string): string;
@@ -0,0 +1,149 @@
1
+ /**
2
+ * Returns the idle timeout used for provider streaming transports.
3
+ *
4
+ * `PI_OPENAI_STREAM_IDLE_TIMEOUT_MS` is accepted as a backward-compatible alias.
5
+ * Set `PI_STREAM_IDLE_TIMEOUT_MS=0` to disable the watchdog.
6
+ *
7
+ * Providers that legitimately stream much slower than the global default can pass
8
+ * `fallbackMs` to widen the floor used when neither env var nor caller option is set.
9
+ * Caller options still take precedence; env overrides still trump the fallback.
10
+ */
11
+ export declare function getStreamIdleTimeoutMs(fallbackMs?: number): number | undefined;
12
+ /**
13
+ * Returns the idle timeout used for OpenAI-family streaming transports.
14
+ *
15
+ * `PI_OPENAI_STREAM_IDLE_TIMEOUT_MS` takes precedence over the generic
16
+ * `PI_STREAM_IDLE_TIMEOUT_MS` because some deployments tune OpenAI-compatible
17
+ * backends separately from Anthropic/Gemini-style transports.
18
+ *
19
+ * Set `PI_OPENAI_STREAM_IDLE_TIMEOUT_MS=0` to disable the watchdog.
20
+ */
21
+ export declare function getOpenAIStreamIdleTimeoutMs(fallbackMs?: number): number | undefined;
22
+ /**
23
+ * Returns the timeout used while waiting for the first stream event.
24
+ * The first token can legitimately take longer than later inter-event gaps,
25
+ * so the default never undershoots the steady-state idle timeout.
26
+ *
27
+ * Set `PI_STREAM_FIRST_EVENT_TIMEOUT_MS=0` to disable the watchdog.
28
+ *
29
+ * Providers whose first response can legitimately take longer (heavy reasoning,
30
+ * slow cold-start proxies) can pass `fallbackMs` to widen the floor used when
31
+ * neither env var nor caller option is set. Caller options still take precedence;
32
+ * env overrides still trump the fallback.
33
+ */
34
+ export declare function getStreamFirstEventTimeoutMs(idleTimeoutMs?: number, fallbackMs?: number): number | undefined;
35
+ /**
36
+ * Returns the first-event timeout used for OpenAI-family streaming transports.
37
+ *
38
+ * Precedence: explicit `PI_OPENAI_STREAM_FIRST_EVENT_TIMEOUT_MS` (including a
39
+ * `"0"` disable) wins outright. Otherwise the resolved idle (caller-supplied
40
+ * `idleTimeoutMs` — which itself already encompasses per-call
41
+ * `streamIdleTimeoutMs` or `PI_OPENAI_STREAM_IDLE_TIMEOUT_MS` resolved
42
+ * upstream) floors the first-event budget so slow OpenAI-compatible servers
43
+ * are not undercut by a shorter `PI_STREAM_FIRST_EVENT_TIMEOUT_MS` or the
44
+ * global default during prompt processing. A zero per-provider fallback
45
+ * disables the first-event watchdog unless an environment override is set.
46
+ *
47
+ * Returns `0` when an explicit env knob or per-provider fallback disables the
48
+ * watchdog, preserving the sentinel through iterator timeout resolution.
49
+ */
50
+ export declare function getOpenAIStreamFirstEventTimeoutMs(idleTimeoutMs?: number, fallbackMs?: number): number | undefined;
51
+ /**
52
+ * Arms a clearable pre-response (time-to-first-byte) abort guard for a streaming
53
+ * fetch, combined with the caller's signal.
54
+ *
55
+ * `AbortSignal.timeout(ms)` is an *absolute* wall-clock deadline: once handed to
56
+ * `fetch` it keeps governing the request after the response headers arrive, so
57
+ * it aborts an actively-streaming body the moment it fires — not just a stalled
58
+ * pre-response request (issue #2422 regression: large `write` tool-call streams
59
+ * died at the budget with `TimeoutError: The operation timed out.` despite
60
+ * deltas actively flowing). This arms a `clearTimeout`-able timer instead;
61
+ * callers MUST `clear()` as soon as the guarded transport attempt settles so
62
+ * the body stream is left to the iterator-level idle watchdog.
63
+ *
64
+ * Retrying callers MUST arm a fresh guard for each transport attempt and keep
65
+ * the retry loop's base signal reserved for caller cancellation. Reusing the
66
+ * guard as the loop signal makes its timeout indistinguishable from cancellation.
67
+ *
68
+ * Returns the caller signal unchanged (and a no-op `clear`) when no positive
69
+ * timeout is configured.
70
+ */
71
+ export declare function armPreResponseTimeout(callerSignal: AbortSignal | undefined, timeoutMs: number | undefined): {
72
+ signal: AbortSignal | undefined;
73
+ clear: () => void;
74
+ };
75
+ export interface IdleTimeoutIteratorOptions {
76
+ idleTimeoutMs?: number;
77
+ firstItemTimeoutMs?: number;
78
+ errorMessage: string;
79
+ firstItemErrorMessage?: string;
80
+ onIdle?: () => void;
81
+ onFirstItemTimeout?: () => void;
82
+ /**
83
+ * Optional semantic-progress predicate. Non-progress items are still yielded,
84
+ * but they do not reset the idle deadline. This prevents provider
85
+ * keepalive/no-op events from keeping a stalled tool call alive forever.
86
+ */
87
+ isProgressItem?: (item: unknown) => boolean;
88
+ /**
89
+ * Reports consumer-side local work in flight for the stream: the provider
90
+ * transport is waiting on a server-requested local tool bridge (e.g. the
91
+ * Cursor exec channel) before anything can flow upstream again. While it
92
+ * returns true, an expired idle / first-item deadline slides forward
93
+ * instead of aborting — the silence is ours, not a provider stall. The
94
+ * watchdog re-arms with a full budget once the local work completes, so a
95
+ * provider that stalls afterwards is still caught.
96
+ */
97
+ hasPendingLocalWork?: () => boolean;
98
+ /**
99
+ * Cancel iteration as soon as this signal aborts. Required for caller-driven
100
+ * cancellation (ESC) when the underlying transport does not surface signal
101
+ * aborts to the iterator (HTTP/2 proxies, native sockets, mocked fetch).
102
+ * Without this, the consumer sleeps on iterator.next() until the idle/first
103
+ * -event watchdog fires — observable as the issue #912 "Working… forever"
104
+ * symptom on the github-copilot provider.
105
+ */
106
+ abortSignal?: AbortSignal;
107
+ }
108
+ /**
109
+ * Yields items from an async iterable while enforcing a maximum idle gap between items.
110
+ *
111
+ * The first item may use a shorter timeout so stuck requests can be aborted and retried
112
+ * before any user-visible content has streamed.
113
+ */
114
+ export declare function iterateWithIdleTimeout<T>(iterable: AsyncIterable<T>, options: IdleTimeoutIteratorOptions): AsyncGenerator<T>;
115
+ export interface TerminalGraceIteratorOptions {
116
+ /**
117
+ * Epoch-ms timestamp at which the consumer observed a logically terminal
118
+ * item (e.g. a chat-completions chunk carrying `finish_reason`), or
119
+ * `undefined` while the stream is still mid-response. Read before every
120
+ * pull, so the consumer can flip it between yields.
121
+ */
122
+ finishedAtMs: () => number | undefined;
123
+ /**
124
+ * Post-terminal budget: how long after `finishedAtMs()` to keep draining
125
+ * trailing items (e.g. a usage-only chunk or the `[DONE]` sentinel) before
126
+ * ending the iteration cleanly. The deadline is fixed at
127
+ * `finishedAtMs() + graceMs`; trailing items do not extend it, so
128
+ * keepalive-only servers cannot hold the stream open.
129
+ */
130
+ graceMs: number;
131
+ /**
132
+ * Invoked when the grace window closes with the source still open. Use it
133
+ * to abort the underlying request: the source generator is typically parked
134
+ * mid-`next()` (not at a yield), so a queued `.return()` alone cannot reach
135
+ * the transport until that pending read settles.
136
+ */
137
+ onGraceEnd?: () => void;
138
+ }
139
+ /**
140
+ * Yields items from an async iterable until the consumer marks the stream
141
+ * logically finished AND the source stays silent past a short grace window.
142
+ *
143
+ * Misbehaving OpenAI-compatible servers deliver the terminal chunk but never
144
+ * send `[DONE]` nor close the connection; without this guard the consumer
145
+ * hangs on `iterator.next()` until the idle watchdog converts an
146
+ * already-successful turn into a timeout error. Grace expiry is a clean end
147
+ * of iteration, never an error.
148
+ */
149
+ export declare function iterateWithTerminalGrace<T>(iterable: AsyncIterable<T>, options: TerminalGraceIteratorOptions): AsyncGenerator<T>;
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Central live healing for leaked reasoning markup in the visible text channel.
3
+ *
4
+ * Some providers emit their canonical reasoning idioms (` ```thinking `,
5
+ * `<think>`, Gemma/Harmony channels, …) into the *visible* text stream instead
6
+ * of a structured thinking part. {@link wrapLeakedThinkingStream} re-projects a
7
+ * provider stream into a fresh {@link AssistantMessageEventStream}, splitting the
8
+ * leaked fences out into proper `thinking` blocks *live* as deltas arrive.
9
+ *
10
+ * Applied to every provider stream *except* official first-party endpoints
11
+ * (the official Anthropic API and the official OpenAI / OpenAI-Codex endpoints),
12
+ * which return structured thinking and never leak — `healLeakedThinking` in
13
+ * `../stream.ts` gates the wrap so the healer cannot misfire on legitimate
14
+ * fenced content those models emit as visible text.
15
+ *
16
+ * The healing is idempotent: a second pass over already-clean text finds no
17
+ * fences, so wrapping a provider that already heals (or wrapping twice) is a
18
+ * harmless pass-through. Signatures are load-bearing for Google/Gemini/Vertex
19
+ * thought round-tripping, so text sub-blocks carry the source `textSignature`,
20
+ * forwarded thinking blocks their `thinkingSignature`, and forwarded tool calls
21
+ * their `thoughtSignature`.
22
+ *
23
+ * Modeled on {@link wrapInbandToolStream} / `InbandStreamProjector` in
24
+ * `../dialect/owned-stream.ts`, minus all in-band tool-call grammar: tool-call
25
+ * events are forwarded verbatim.
26
+ */
27
+ import { AssistantMessageEventStream } from "./event-stream.js";
28
+ /**
29
+ * Wrap a provider stream so leaked reasoning fences are healed into thinking
30
+ * blocks live, for every provider. Returns a new stream that re-projects the
31
+ * inner one; the inner stream is fully consumed.
32
+ */
33
+ export declare function wrapLeakedThinkingStream(inner: AssistantMessageEventStream): AssistantMessageEventStream;
@@ -0,0 +1,48 @@
1
+ /**
2
+ * JSON-POST → SSE transport for OpenAI-wire streaming endpoints (chat
3
+ * completions, responses, azure responses). Replaces the `openai` SDK client:
4
+ *
5
+ * - Retries: `fetchWithRetry` (Retry-After/quota-hint aware; 5xx/408/429 and
6
+ * transient network errors). Default 6 total attempts — parity with the
7
+ * SDK's former `maxRetries: 5`.
8
+ * - SSE decode: `readSseJson` (spec-compliant framing, `[DONE]`-aware).
9
+ * `onSseEvent` observers now receive real wire frames instead of events
10
+ * re-synthesized from decoded SDK objects.
11
+ * - Errors: {@link OpenAIHttpError} exposes `status`/`headers`/`code`
12
+ * structurally (ProviderHttpError contract — `extractHttpStatusFromError`,
13
+ * retry-after extraction, copilot transient classification) and carries the
14
+ * captured response body for the strict-tools fallback and the responses
15
+ * chain-state detectors, which regex over `error.message`.
16
+ */
17
+ import { type SseEventObserver } from "@linxiraos/pi-utils";
18
+ import * as AIError from "../error/index.js";
19
+ import { OpenAIHttpError } from "../error/index.js";
20
+ export { OpenAIHttpError };
21
+ import type { FetchImpl } from "../types.js";
22
+ export interface OpenAIStreamRequestInit {
23
+ url: string;
24
+ headers: Record<string, string>;
25
+ /** JSON request body; serialized once per call (retries resend the same bytes). */
26
+ body: unknown;
27
+ signal: AbortSignal;
28
+ fetch?: FetchImpl;
29
+ /** Raw wire-frame observer (`onSseEvent` debug pipeline). */
30
+ onSseEvent?: SseEventObserver;
31
+ }
32
+ export interface OpenAIStreamHandle<TEvent> {
33
+ /** Decoded `data:` payloads; terminates on `[DONE]` or stream end. */
34
+ events: AsyncGenerator<TEvent>;
35
+ response: Response;
36
+ /** `x-request-id` response header (the SDK's former `request_id`). */
37
+ requestId: string | null;
38
+ }
39
+ /**
40
+ * POST a JSON body and stream back decoded SSE events.
41
+ *
42
+ * Throws {@link OpenAIHttpError} on a non-2xx terminal response. Aborts on
43
+ * `signal` propagate from `fetchWithRetry`/`readSseJson`; callers own the
44
+ * watchdog timers and abort-reason bookkeeping.
45
+ */
46
+ export declare function postOpenAIStream<TEvent>(init: OpenAIStreamRequestInit): Promise<OpenAIStreamHandle<TEvent>>;
47
+ /** Decode a non-2xx response into an {@link OpenAIHttpError} without consuming it twice. */
48
+ export declare function captureOpenAIHttpError(response: Response): Promise<AIError.OpenAIHttpError>;
@@ -0,0 +1 @@
1
+ export declare function getOpenRouterHeaders(): Record<string, string>;
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Shared `host:port` parser used by the auth-broker and auth-gateway boot
3
+ * paths. Centralized so the two servers can't drift on what they accept (the
4
+ * gateway used to silently allow empty hostnames; this fixes it).
5
+ */
6
+ export interface ParsedBind {
7
+ hostname: string;
8
+ port: number;
9
+ }
10
+ /**
11
+ * Parse a `host:port` (or bare `port`, which assumes loopback) string.
12
+ *
13
+ * Accepts:
14
+ * - `"4000"` → `127.0.0.1:4000`
15
+ * - `"0.0.0.0:4000"` → as written
16
+ * - `"[::1]:4000"` → as written (brackets retained, Bun handles them)
17
+ *
18
+ * Rejects:
19
+ * - empty input
20
+ * - empty hostname (`":4000"`)
21
+ * - non-integer / out-of-range port
22
+ */
23
+ export declare function parseBind(raw: string): ParsedBind;
@@ -0,0 +1,3 @@
1
+ import type { Api, Model, ProviderResponseMetadata, StreamOptions } from "../types.js";
2
+ export declare function normalizeProviderResponse(response: Response, requestId?: string | null, metadata?: Record<string, unknown>): ProviderResponseMetadata;
3
+ export declare function notifyProviderResponse(options: Pick<StreamOptions, "onResponse"> | undefined, response: Response, model?: Model<Api>, requestId?: string | null, metadata?: Record<string, unknown>): Promise<void>;
@@ -0,0 +1,39 @@
1
+ import * as tls from "node:tls";
2
+ import type { FetchImpl } from "../types.js";
3
+ /**
4
+ * Checks if a host is local or cloud metadata, which should always bypass the proxy
5
+ * (e.g. localhost, 127/8, ::1, 169.254.169.254, metadata.google.internal).
6
+ */
7
+ export declare function isLocalOrMetadataHost(host: string): boolean;
8
+ /**
9
+ * Check if the url should bypass the proxy due to hard-coded localhost/metadata checks
10
+ * or custom NO_PROXY/no_proxy environment variables rules.
11
+ */
12
+ export declare function shouldBypassProxy(urlObj: URL): boolean;
13
+ /** Test seam: clears the provider proxy cache. */
14
+ export declare function __resetProxyCache(): void;
15
+ /**
16
+ * Normalizes provider id (e.g. github-copilot -> PI_PROXY_GITHUB_COPILOT) and looks it up.
17
+ * If not found, falls back to PI_PROXY. Results are memoized because env values are static
18
+ * for the lifetime of the process and this function is called for every outgoing request.
19
+ */
20
+ export declare function getProxyForProvider(provider: string): string | undefined;
21
+ /** Resolves provider-specific and standard proxy variables for a target URL, honoring NO_PROXY. */
22
+ export declare function getProxyForUrl(provider: string, url: URL): string | undefined;
23
+ /**
24
+ * Wraps a fetch implementation to inject proxy options for non-local hosts.
25
+ */
26
+ export declare function wrapFetchForProxy(fetchImpl: FetchImpl, provider: string): FetchImpl;
27
+ export interface ConnectProxiedSocketOptions {
28
+ /** Caller cancellation for the proxy TCP/TLS handshake and CONNECT tunnel. */
29
+ signal?: AbortSignal;
30
+ /** Maximum wall-clock time to establish the final TLS tunnel. Disabled when absent or non-positive. */
31
+ timeoutMs?: number;
32
+ /** Target TLS profile. Cursor defaults to HTTP/2 when this is absent. */
33
+ tls?: tls.ConnectionOptions;
34
+ }
35
+ /**
36
+ * Tunnel a socket connection through an HTTP CONNECT proxy.
37
+ * This is used specifically to wrap Node's `http2.connect(baseUrl, { createConnection })` for Cursor.
38
+ */
39
+ export declare function connectProxiedSocket(proxyUrlStr: string, targetUrlStr: string, options?: ConnectProxiedSocketOptions): Promise<tls.TLSSocket>;
@@ -0,0 +1,29 @@
1
+ import type { FetchImpl } from "../types.js";
2
+ export type RequestDebugHeaders = Headers | Record<string, string | string[] | number | undefined | null> | undefined;
3
+ export interface RequestDebugPayload {
4
+ method: string;
5
+ url: string;
6
+ headers?: RequestDebugHeaders;
7
+ body?: unknown;
8
+ bodyText?: string;
9
+ bodyBase64?: string;
10
+ bodyUnavailable?: string;
11
+ protocol?: string;
12
+ }
13
+ export interface RequestDebugResponseLog {
14
+ write(chunk: Uint8Array | string): void;
15
+ close(): Promise<void>;
16
+ }
17
+ export interface RequestDebugSession {
18
+ readonly id: number;
19
+ readonly requestPath: string;
20
+ readonly responsePath: string;
21
+ openResponseLog(statusLine: string, headers?: RequestDebugHeaders): Promise<RequestDebugResponseLog>;
22
+ wrapResponse(response: Response): Promise<Response>;
23
+ }
24
+ export declare function isRequestDebugEnabled(): boolean;
25
+ export declare function wrapFetchForRequestDebug(fetchImpl: FetchImpl): FetchImpl;
26
+ export declare function withRequestDebugFetch<T extends {
27
+ fetch?: FetchImpl;
28
+ } | undefined>(options: T): T;
29
+ export declare function createRequestDebugSession(payload: RequestDebugPayload): Promise<RequestDebugSession>;
@@ -0,0 +1,4 @@
1
+ export type HeadersLike = Headers | Record<string, string | undefined> | undefined | null;
2
+ export declare function formatErrorMessageWithRetryAfter(error: unknown, headers?: HeadersLike): string;
3
+ export declare function getRetryAfterMsFromHeaders(headers: HeadersLike): number | undefined;
4
+ export declare function getHeadersFromError(error: unknown): HeadersLike;
@@ -0,0 +1,14 @@
1
+ import { isCopilotTransientModelError } from "../error/flags.js";
2
+ export { isCopilotTransientModelError };
3
+ /**
4
+ * Wrap an initial Copilot request so transient `model_not_supported` 400s are
5
+ * retried a small number of times. No-op for non-Copilot providers.
6
+ *
7
+ * The callback **MUST** create a fresh in-flight request each invocation — a
8
+ * once-consumed AsyncIterable cannot be re-iterated.
9
+ */
10
+ export declare function callWithCopilotModelRetry<T>(fn: () => Promise<T>, options: {
11
+ provider: string;
12
+ signal?: AbortSignal;
13
+ retryBaseDelayMs?: number;
14
+ }): Promise<T>;
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Set when callers want to globally bypass OpenAI strict-mode enforcement
3
+ * (e.g. for debugging a provider that misreports strict support, or when
4
+ * comparing strict vs non-strict outputs).
5
+ *
6
+ * Honored by every provider that emits `strict: true` on its function tools —
7
+ * see `openai-completions`, `openai-responses`, `openai-codex-responses`, and
8
+ * the strict candidate selection in `anthropic`.
9
+ */
10
+ export declare const NO_STRICT: boolean;
11
+ /**
12
+ * Consolidated helper for OpenAI-style strict schema enforcement.
13
+ *
14
+ * Each provider computes its own `strict` boolean (logic differs), then calls
15
+ * this to handle the tryEnforceStrictSchema dance uniformly:
16
+ * - Draft-07-shaped inputs are upgraded to draft 2020-12 first.
17
+ * - If `strict` is false, passes the upgraded schema through unchanged.
18
+ * - If `strict` is true, attempts to enforce strict mode; falls back to
19
+ * non-strict if the schema isn't representable.
20
+ */
21
+ export declare function adaptSchemaForStrict(schema: Record<string, unknown>, strict: boolean): {
22
+ schema: Record<string, unknown>;
23
+ strict: boolean;
24
+ };