jeopi-ai 16.2.13

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 (598) hide show
  1. package/CHANGELOG.md +4347 -0
  2. package/README.md +1193 -0
  3. package/dist/types/api-registry.d.ts +30 -0
  4. package/dist/types/auth-broker/client.d.ts +73 -0
  5. package/dist/types/auth-broker/discover.d.ts +35 -0
  6. package/dist/types/auth-broker/index.d.ts +7 -0
  7. package/dist/types/auth-broker/refresher.d.ts +25 -0
  8. package/dist/types/auth-broker/remote-store.d.ts +102 -0
  9. package/dist/types/auth-broker/server.d.ts +43 -0
  10. package/dist/types/auth-broker/snapshot-cache.d.ts +17 -0
  11. package/dist/types/auth-broker/types.d.ts +107 -0
  12. package/dist/types/auth-broker/wire-schemas.d.ts +411 -0
  13. package/dist/types/auth-gateway/http.d.ts +39 -0
  14. package/dist/types/auth-gateway/index.d.ts +3 -0
  15. package/dist/types/auth-gateway/server.d.ts +36 -0
  16. package/dist/types/auth-gateway/types.d.ts +123 -0
  17. package/dist/types/auth-retry.d.ts +124 -0
  18. package/dist/types/auth-storage.d.ts +1026 -0
  19. package/dist/types/dialect/anthropic.d.ts +15 -0
  20. package/dist/types/dialect/catalog.d.ts +3 -0
  21. package/dist/types/dialect/coercion.d.ts +23 -0
  22. package/dist/types/dialect/deepseek.d.ts +14 -0
  23. package/dist/types/dialect/demotion.d.ts +23 -0
  24. package/dist/types/dialect/examples.d.ts +2 -0
  25. package/dist/types/dialect/factory.d.ts +3 -0
  26. package/dist/types/dialect/fenced-thinking.d.ts +53 -0
  27. package/dist/types/dialect/gemini.d.ts +17 -0
  28. package/dist/types/dialect/gemma.d.ts +15 -0
  29. package/dist/types/dialect/glm.d.ts +9 -0
  30. package/dist/types/dialect/harmony.d.ts +8 -0
  31. package/dist/types/dialect/hermes.d.ts +9 -0
  32. package/dist/types/dialect/history.d.ts +3 -0
  33. package/dist/types/dialect/index.d.ts +11 -0
  34. package/dist/types/dialect/inventory.d.ts +12 -0
  35. package/dist/types/dialect/kimi.d.ts +14 -0
  36. package/dist/types/dialect/minimax.d.ts +3 -0
  37. package/dist/types/dialect/owned-stream.d.ts +4 -0
  38. package/dist/types/dialect/qwen3.d.ts +9 -0
  39. package/dist/types/dialect/rendering.d.ts +45 -0
  40. package/dist/types/dialect/thinking.d.ts +6 -0
  41. package/dist/types/dialect/types.d.ts +69 -0
  42. package/dist/types/dialect/xml.d.ts +9 -0
  43. package/dist/types/error/abort.d.ts +14 -0
  44. package/dist/types/error/auth-classify.d.ts +16 -0
  45. package/dist/types/error/auth.d.ts +27 -0
  46. package/dist/types/error/aws.d.ts +23 -0
  47. package/dist/types/error/classes.d.ts +102 -0
  48. package/dist/types/error/finalize.d.ts +39 -0
  49. package/dist/types/error/flags.d.ts +79 -0
  50. package/dist/types/error/format.d.ts +20 -0
  51. package/dist/types/error/gateway.d.ts +20 -0
  52. package/dist/types/error/index.d.ts +13 -0
  53. package/dist/types/error/oauth.d.ts +43 -0
  54. package/dist/types/error/provider.d.ts +42 -0
  55. package/dist/types/error/rate-limit.d.ts +59 -0
  56. package/dist/types/error/retryable.d.ts +27 -0
  57. package/dist/types/error/validation.d.ts +32 -0
  58. package/dist/types/index.d.ts +49 -0
  59. package/dist/types/provider-details.d.ts +24 -0
  60. package/dist/types/providers/__tests__/google-auth.test.d.ts +1 -0
  61. package/dist/types/providers/__tests__/kimi-code-thinking.test.d.ts +1 -0
  62. package/dist/types/providers/__tests__/openai-codex-error.test.d.ts +1 -0
  63. package/dist/types/providers/amazon-bedrock.d.ts +39 -0
  64. package/dist/types/providers/anthropic-client.d.ts +94 -0
  65. package/dist/types/providers/anthropic-messages-server-schema.d.ts +497 -0
  66. package/dist/types/providers/anthropic-messages-server.d.ts +17 -0
  67. package/dist/types/providers/anthropic-wire.d.ts +318 -0
  68. package/dist/types/providers/anthropic.d.ts +248 -0
  69. package/dist/types/providers/aws-credentials.d.ts +53 -0
  70. package/dist/types/providers/aws-eventstream.d.ts +39 -0
  71. package/dist/types/providers/aws-sigv4.d.ts +55 -0
  72. package/dist/types/providers/azure-openai-responses.d.ts +16 -0
  73. package/dist/types/providers/cursor.d.ts +91 -0
  74. package/dist/types/providers/devin.d.ts +12 -0
  75. package/dist/types/providers/error-message.d.ts +27 -0
  76. package/dist/types/providers/github-copilot-headers.d.ts +40 -0
  77. package/dist/types/providers/gitlab-duo-workflow.d.ts +254 -0
  78. package/dist/types/providers/gitlab-duo.d.ts +27 -0
  79. package/dist/types/providers/google-auth.d.ts +32 -0
  80. package/dist/types/providers/google-gemini-cli.d.ts +118 -0
  81. package/dist/types/providers/google-interactions.d.ts +65 -0
  82. package/dist/types/providers/google-shared.d.ts +203 -0
  83. package/dist/types/providers/google-types.d.ts +155 -0
  84. package/dist/types/providers/google-vertex.d.ts +7 -0
  85. package/dist/types/providers/google.d.ts +4 -0
  86. package/dist/types/providers/grammar.d.ts +1 -0
  87. package/dist/types/providers/kimi.d.ts +27 -0
  88. package/dist/types/providers/mock.d.ts +178 -0
  89. package/dist/types/providers/ollama.d.ts +7 -0
  90. package/dist/types/providers/openai-anthropic-shim.d.ts +31 -0
  91. package/dist/types/providers/openai-chat-server-schema.d.ts +695 -0
  92. package/dist/types/providers/openai-chat-server.d.ts +16 -0
  93. package/dist/types/providers/openai-chat-wire.d.ts +644 -0
  94. package/dist/types/providers/openai-codex/request-transformer.d.ts +54 -0
  95. package/dist/types/providers/openai-codex/response-handler.d.ts +26 -0
  96. package/dist/types/providers/openai-codex-responses.d.ts +108 -0
  97. package/dist/types/providers/openai-completions.d.ts +45 -0
  98. package/dist/types/providers/openai-reasoning-fallback.d.ts +25 -0
  99. package/dist/types/providers/openai-responses-server-schema.d.ts +349 -0
  100. package/dist/types/providers/openai-responses-server.d.ts +17 -0
  101. package/dist/types/providers/openai-responses-wire.d.ts +6065 -0
  102. package/dist/types/providers/openai-responses.d.ts +126 -0
  103. package/dist/types/providers/openai-shared.d.ts +506 -0
  104. package/dist/types/providers/pi-native-client.d.ts +13 -0
  105. package/dist/types/providers/pi-native-server.d.ts +69 -0
  106. package/dist/types/providers/register-builtins.d.ts +32 -0
  107. package/dist/types/providers/synthetic.d.ts +26 -0
  108. package/dist/types/providers/transform-messages.d.ts +11 -0
  109. package/dist/types/providers/vision-guard.d.ts +20 -0
  110. package/dist/types/registry/aimlapi.d.ts +4 -0
  111. package/dist/types/registry/alibaba-coding-plan.d.ts +8 -0
  112. package/dist/types/registry/amazon-bedrock.d.ts +5 -0
  113. package/dist/types/registry/anthropic.d.ts +10 -0
  114. package/dist/types/registry/api-key-login.d.ts +42 -0
  115. package/dist/types/registry/api-key-validation.d.ts +43 -0
  116. package/dist/types/registry/azure.d.ts +4 -0
  117. package/dist/types/registry/cerebras.d.ts +7 -0
  118. package/dist/types/registry/cloudflare-ai-gateway.d.ts +13 -0
  119. package/dist/types/registry/coreweave.d.ts +7 -0
  120. package/dist/types/registry/cursor.d.ts +7 -0
  121. package/dist/types/registry/deepseek.d.ts +8 -0
  122. package/dist/types/registry/derived.d.ts +5 -0
  123. package/dist/types/registry/devin.d.ts +8 -0
  124. package/dist/types/registry/firepass.d.ts +16 -0
  125. package/dist/types/registry/fireworks.d.ts +7 -0
  126. package/dist/types/registry/github-copilot.d.ts +7 -0
  127. package/dist/types/registry/gitlab-duo-workflow.d.ts +10 -0
  128. package/dist/types/registry/gitlab-duo.d.ts +9 -0
  129. package/dist/types/registry/google-antigravity.d.ts +9 -0
  130. package/dist/types/registry/google-gemini-cli.d.ts +9 -0
  131. package/dist/types/registry/google-vertex.d.ts +5 -0
  132. package/dist/types/registry/google.d.ts +4 -0
  133. package/dist/types/registry/groq.d.ts +4 -0
  134. package/dist/types/registry/huggingface.d.ts +7 -0
  135. package/dist/types/registry/index.d.ts +4 -0
  136. package/dist/types/registry/kagi.d.ts +14 -0
  137. package/dist/types/registry/kilo.d.ts +7 -0
  138. package/dist/types/registry/kimi-code.d.ts +7 -0
  139. package/dist/types/registry/litellm.d.ts +13 -0
  140. package/dist/types/registry/llama-cpp.d.ts +8 -0
  141. package/dist/types/registry/lm-studio.d.ts +8 -0
  142. package/dist/types/registry/minimax-code-cn.d.ts +6 -0
  143. package/dist/types/registry/minimax-code.d.ts +6 -0
  144. package/dist/types/registry/minimax.d.ts +4 -0
  145. package/dist/types/registry/mistral.d.ts +4 -0
  146. package/dist/types/registry/moonshot.d.ts +7 -0
  147. package/dist/types/registry/nanogpt.d.ts +7 -0
  148. package/dist/types/registry/nvidia.d.ts +7 -0
  149. package/dist/types/registry/oauth/__tests__/xai-oauth.test.d.ts +1 -0
  150. package/dist/types/registry/oauth/anthropic.d.ts +23 -0
  151. package/dist/types/registry/oauth/callback-server.d.ts +72 -0
  152. package/dist/types/registry/oauth/cursor.d.ts +15 -0
  153. package/dist/types/registry/oauth/devin.d.ts +5 -0
  154. package/dist/types/registry/oauth/github-copilot.d.ts +30 -0
  155. package/dist/types/registry/oauth/gitlab-duo-workflow.d.ts +6 -0
  156. package/dist/types/registry/oauth/gitlab-duo.d.ts +3 -0
  157. package/dist/types/registry/oauth/google-antigravity.d.ts +11 -0
  158. package/dist/types/registry/oauth/google-gemini-cli.d.ts +10 -0
  159. package/dist/types/registry/oauth/google-oauth-shared.d.ts +22 -0
  160. package/dist/types/registry/oauth/index.d.ts +64 -0
  161. package/dist/types/registry/oauth/kimi.d.ts +21 -0
  162. package/dist/types/registry/oauth/minimax-code.d.ts +27 -0
  163. package/dist/types/registry/oauth/openai-codex.d.ts +33 -0
  164. package/dist/types/registry/oauth/opencode.d.ts +18 -0
  165. package/dist/types/registry/oauth/perplexity.d.ts +9 -0
  166. package/dist/types/registry/oauth/pkce.d.ts +8 -0
  167. package/dist/types/registry/oauth/types.d.ts +56 -0
  168. package/dist/types/registry/oauth/wafer.d.ts +1 -0
  169. package/dist/types/registry/oauth/xai-oauth.d.ts +52 -0
  170. package/dist/types/registry/oauth/xiaomi.d.ts +25 -0
  171. package/dist/types/registry/ollama-cloud.d.ts +7 -0
  172. package/dist/types/registry/ollama.d.ts +12 -0
  173. package/dist/types/registry/openai-codex-device.d.ts +8 -0
  174. package/dist/types/registry/openai-codex.d.ts +9 -0
  175. package/dist/types/registry/openai.d.ts +4 -0
  176. package/dist/types/registry/opencode-go.d.ts +6 -0
  177. package/dist/types/registry/opencode-zen.d.ts +6 -0
  178. package/dist/types/registry/openrouter.d.ts +13 -0
  179. package/dist/types/registry/parallel.d.ts +14 -0
  180. package/dist/types/registry/perplexity.d.ts +7 -0
  181. package/dist/types/registry/qianfan.d.ts +7 -0
  182. package/dist/types/registry/qwen-portal.d.ts +7 -0
  183. package/dist/types/registry/registry.d.ts +303 -0
  184. package/dist/types/registry/sakana.d.ts +7 -0
  185. package/dist/types/registry/synthetic.d.ts +6 -0
  186. package/dist/types/registry/tavily.d.ts +14 -0
  187. package/dist/types/registry/together.d.ts +6 -0
  188. package/dist/types/registry/types.d.ts +51 -0
  189. package/dist/types/registry/umans.d.ts +7 -0
  190. package/dist/types/registry/venice.d.ts +13 -0
  191. package/dist/types/registry/vercel-ai-gateway.d.ts +7 -0
  192. package/dist/types/registry/vllm.d.ts +7 -0
  193. package/dist/types/registry/wafer-serverless.d.ts +6 -0
  194. package/dist/types/registry/xai-oauth.d.ts +7 -0
  195. package/dist/types/registry/xai.d.ts +4 -0
  196. package/dist/types/registry/xiaomi-token-plan-ams.d.ts +6 -0
  197. package/dist/types/registry/xiaomi-token-plan-cn.d.ts +6 -0
  198. package/dist/types/registry/xiaomi-token-plan-sgp.d.ts +6 -0
  199. package/dist/types/registry/xiaomi.d.ts +6 -0
  200. package/dist/types/registry/zai.d.ts +7 -0
  201. package/dist/types/registry/zenmux.d.ts +7 -0
  202. package/dist/types/registry/zhipu-coding-plan.d.ts +7 -0
  203. package/dist/types/stream.d.ts +44 -0
  204. package/dist/types/types.d.ts +715 -0
  205. package/dist/types/usage/claude.d.ts +4 -0
  206. package/dist/types/usage/gemini.d.ts +2 -0
  207. package/dist/types/usage/github-copilot.d.ts +7 -0
  208. package/dist/types/usage/google-antigravity.d.ts +15 -0
  209. package/dist/types/usage/kimi.d.ts +2 -0
  210. package/dist/types/usage/minimax-code.d.ts +2 -0
  211. package/dist/types/usage/ollama.d.ts +5 -0
  212. package/dist/types/usage/openai-codex-base-url.d.ts +18 -0
  213. package/dist/types/usage/openai-codex-reset.d.ts +79 -0
  214. package/dist/types/usage/openai-codex.d.ts +3 -0
  215. package/dist/types/usage/opencode-go.d.ts +2 -0
  216. package/dist/types/usage/shared.d.ts +1 -0
  217. package/dist/types/usage/zai.d.ts +2 -0
  218. package/dist/types/usage.d.ts +346 -0
  219. package/dist/types/utils/abort.d.ts +25 -0
  220. package/dist/types/utils/anthropic-auth.d.ts +35 -0
  221. package/dist/types/utils/block-symbols.d.ts +20 -0
  222. package/dist/types/utils/deterministic-id.d.ts +16 -0
  223. package/dist/types/utils/empty-completion-retry.d.ts +21 -0
  224. package/dist/types/utils/event-stream.d.ts +30 -0
  225. package/dist/types/utils/foundry.d.ts +1 -0
  226. package/dist/types/utils/google-validation.d.ts +2 -0
  227. package/dist/types/utils/harmony-leak.d.ts +118 -0
  228. package/dist/types/utils/http-inspector.d.ts +30 -0
  229. package/dist/types/utils/idle-iterator.d.ts +137 -0
  230. package/dist/types/utils/leaked-thinking-stream.d.ts +29 -0
  231. package/dist/types/utils/openai-http.d.ts +54 -0
  232. package/dist/types/utils/openrouter-headers.d.ts +1 -0
  233. package/dist/types/utils/parse-bind.d.ts +23 -0
  234. package/dist/types/utils/provider-response.d.ts +3 -0
  235. package/dist/types/utils/proxy.d.ts +29 -0
  236. package/dist/types/utils/request-debug.d.ts +29 -0
  237. package/dist/types/utils/retry-after.d.ts +4 -0
  238. package/dist/types/utils/retry.d.ts +14 -0
  239. package/dist/types/utils/schema/adapt.d.ts +24 -0
  240. package/dist/types/utils/schema/compatibility.d.ts +30 -0
  241. package/dist/types/utils/schema/dereference.d.ts +11 -0
  242. package/dist/types/utils/schema/draft.d.ts +10 -0
  243. package/dist/types/utils/schema/equality.d.ts +4 -0
  244. package/dist/types/utils/schema/fields.d.ts +54 -0
  245. package/dist/types/utils/schema/index.d.ts +15 -0
  246. package/dist/types/utils/schema/json-schema-validator.d.ts +20 -0
  247. package/dist/types/utils/schema/meta-validator.d.ts +2 -0
  248. package/dist/types/utils/schema/normalize.d.ts +124 -0
  249. package/dist/types/utils/schema/spill.d.ts +8 -0
  250. package/dist/types/utils/schema/stamps.d.ts +17 -0
  251. package/dist/types/utils/schema/strict-tool-validation.d.ts +16 -0
  252. package/dist/types/utils/schema/types.d.ts +4 -0
  253. package/dist/types/utils/schema/typescript.d.ts +18 -0
  254. package/dist/types/utils/schema/wire.d.ts +92 -0
  255. package/dist/types/utils/schema/zod-decontaminate.d.ts +31 -0
  256. package/dist/types/utils/sdk-stream-timeout.d.ts +33 -0
  257. package/dist/types/utils/sse-debug.d.ts +5 -0
  258. package/dist/types/utils/stream-markup-healing.d.ts +87 -0
  259. package/dist/types/utils/thinking-loop.d.ts +102 -0
  260. package/dist/types/utils/tool-call-loop-guard.d.ts +26 -0
  261. package/dist/types/utils/tool-choice.d.ts +50 -0
  262. package/dist/types/utils/validation.d.ts +42 -0
  263. package/dist/types/utils.d.ts +24 -0
  264. package/package.json +139 -0
  265. package/src/api-registry.ts +109 -0
  266. package/src/auth-broker/client.ts +359 -0
  267. package/src/auth-broker/discover.ts +222 -0
  268. package/src/auth-broker/index.ts +7 -0
  269. package/src/auth-broker/refresher.ts +117 -0
  270. package/src/auth-broker/remote-store.ts +657 -0
  271. package/src/auth-broker/server.ts +646 -0
  272. package/src/auth-broker/snapshot-cache.ts +191 -0
  273. package/src/auth-broker/types.ts +130 -0
  274. package/src/auth-broker/wire-schemas.ts +249 -0
  275. package/src/auth-gateway/http.ts +194 -0
  276. package/src/auth-gateway/index.ts +3 -0
  277. package/src/auth-gateway/server.ts +802 -0
  278. package/src/auth-gateway/types.ts +151 -0
  279. package/src/auth-retry.ts +250 -0
  280. package/src/auth-storage.ts +5576 -0
  281. package/src/dialect/anthropic.md +31 -0
  282. package/src/dialect/anthropic.ts +608 -0
  283. package/src/dialect/catalog.ts +29 -0
  284. package/src/dialect/coercion.ts +136 -0
  285. package/src/dialect/deepseek.md +24 -0
  286. package/src/dialect/deepseek.ts +609 -0
  287. package/src/dialect/demotion.ts +36 -0
  288. package/src/dialect/examples.ts +33 -0
  289. package/src/dialect/factory.ts +34 -0
  290. package/src/dialect/fenced-thinking.ts +184 -0
  291. package/src/dialect/gemini.md +44 -0
  292. package/src/dialect/gemini.ts +597 -0
  293. package/src/dialect/gemma.md +33 -0
  294. package/src/dialect/gemma.ts +387 -0
  295. package/src/dialect/glm.md +32 -0
  296. package/src/dialect/glm.ts +456 -0
  297. package/src/dialect/harmony.md +31 -0
  298. package/src/dialect/harmony.ts +346 -0
  299. package/src/dialect/hermes.md +25 -0
  300. package/src/dialect/hermes.ts +206 -0
  301. package/src/dialect/history.ts +81 -0
  302. package/src/dialect/index.ts +15 -0
  303. package/src/dialect/inventory.ts +73 -0
  304. package/src/dialect/kimi.md +24 -0
  305. package/src/dialect/kimi.ts +340 -0
  306. package/src/dialect/minimax.md +31 -0
  307. package/src/dialect/minimax.ts +95 -0
  308. package/src/dialect/owned-stream.ts +470 -0
  309. package/src/dialect/prompt-template.md +12 -0
  310. package/src/dialect/qwen3.md +28 -0
  311. package/src/dialect/qwen3.ts +240 -0
  312. package/src/dialect/rendering.ts +249 -0
  313. package/src/dialect/thinking.ts +122 -0
  314. package/src/dialect/types.ts +57 -0
  315. package/src/dialect/xml.md +22 -0
  316. package/src/dialect/xml.ts +90 -0
  317. package/src/error/abort.ts +18 -0
  318. package/src/error/auth-classify.ts +30 -0
  319. package/src/error/auth.ts +48 -0
  320. package/src/error/aws.ts +31 -0
  321. package/src/error/classes.ts +186 -0
  322. package/src/error/finalize.ts +69 -0
  323. package/src/error/flags.ts +506 -0
  324. package/src/error/format.ts +45 -0
  325. package/src/error/gateway.ts +96 -0
  326. package/src/error/index.ts +13 -0
  327. package/src/error/oauth.ts +58 -0
  328. package/src/error/provider.ts +62 -0
  329. package/src/error/rate-limit.ts +161 -0
  330. package/src/error/retryable.ts +70 -0
  331. package/src/error/validation.ts +44 -0
  332. package/src/index.ts +49 -0
  333. package/src/provider-details.ts +90 -0
  334. package/src/providers/__tests__/google-auth.test.ts +144 -0
  335. package/src/providers/__tests__/kimi-code-thinking.test.ts +112 -0
  336. package/src/providers/__tests__/openai-codex-error.test.ts +84 -0
  337. package/src/providers/amazon-bedrock.ts +1042 -0
  338. package/src/providers/anthropic-client.ts +295 -0
  339. package/src/providers/anthropic-messages-server-schema.ts +252 -0
  340. package/src/providers/anthropic-messages-server.ts +756 -0
  341. package/src/providers/anthropic-wire.ts +318 -0
  342. package/src/providers/anthropic.ts +4078 -0
  343. package/src/providers/aws-credentials.ts +586 -0
  344. package/src/providers/aws-eventstream.ts +181 -0
  345. package/src/providers/aws-sigv4.ts +218 -0
  346. package/src/providers/azure-openai-responses.ts +382 -0
  347. package/src/providers/cursor/proto/agent.proto +3526 -0
  348. package/src/providers/cursor/proto/buf.gen.yaml +6 -0
  349. package/src/providers/cursor/proto/buf.yaml +17 -0
  350. package/src/providers/cursor.ts +2695 -0
  351. package/src/providers/devin/proto/buf/validate/validate.proto +468 -0
  352. package/src/providers/devin/proto/buf.gen.yaml +33 -0
  353. package/src/providers/devin/proto/buf.yaml +17 -0
  354. package/src/providers/devin/proto/cel/expr/checked.proto +103 -0
  355. package/src/providers/devin/proto/cel/expr/eval.proto +38 -0
  356. package/src/providers/devin/proto/cel/expr/explain.proto +15 -0
  357. package/src/providers/devin/proto/cel/expr/syntax.proto +113 -0
  358. package/src/providers/devin/proto/cel/expr/value.proto +41 -0
  359. package/src/providers/devin/proto/connectext/grpc/status/v1/status.proto +11 -0
  360. package/src/providers/devin/proto/errorspb/errors.proto +56 -0
  361. package/src/providers/devin/proto/errorspb/hintdetail.proto +7 -0
  362. package/src/providers/devin/proto/errorspb/markers.proto +10 -0
  363. package/src/providers/devin/proto/errorspb/tags.proto +12 -0
  364. package/src/providers/devin/proto/errorspb/testing.proto +6 -0
  365. package/src/providers/devin/proto/exa/analytics_pb/analytics.proto +188 -0
  366. package/src/providers/devin/proto/exa/api_server_pb/api_server.proto +2461 -0
  367. package/src/providers/devin/proto/exa/auth_pb/auth.proto +19 -0
  368. package/src/providers/devin/proto/exa/auto_cascade_common_pb/auto_cascade_common.proto +79 -0
  369. package/src/providers/devin/proto/exa/browser_preview_pb/browser_preview.proto +32 -0
  370. package/src/providers/devin/proto/exa/bug_checker_pb/bug_checker.proto +22 -0
  371. package/src/providers/devin/proto/exa/cascade_plugins_pb/cascade_plugins.proto +262 -0
  372. package/src/providers/devin/proto/exa/chat_client_server_pb/chat_client_server.proto +57 -0
  373. package/src/providers/devin/proto/exa/chat_pb/chat.proto +449 -0
  374. package/src/providers/devin/proto/exa/code_edit/code_edit_pb/code_edit.proto +186 -0
  375. package/src/providers/devin/proto/exa/codeium_common_pb/codeium_common.proto +4157 -0
  376. package/src/providers/devin/proto/exa/context_module_pb/context_module.proto +175 -0
  377. package/src/providers/devin/proto/exa/cortex_pb/cortex.proto +3268 -0
  378. package/src/providers/devin/proto/exa/dev_pb/dev.proto +26 -0
  379. package/src/providers/devin/proto/exa/diff_action_pb/diff_action.proto +75 -0
  380. package/src/providers/devin/proto/exa/eval/pr_eval/datasets_pb/datasets.proto +103 -0
  381. package/src/providers/devin/proto/exa/eval_pb/eval.proto +1315 -0
  382. package/src/providers/devin/proto/exa/extension_server_pb/extension_server.proto +556 -0
  383. package/src/providers/devin/proto/exa/file_system_provider_pb/file_system_provider.proto +75 -0
  384. package/src/providers/devin/proto/exa/index_pb/index.proto +461 -0
  385. package/src/providers/devin/proto/exa/knowledge_base_pb/knowledge_base.proto +144 -0
  386. package/src/providers/devin/proto/exa/language_server_pb/language_server.proto +2385 -0
  387. package/src/providers/devin/proto/exa/model_management_pb/model_management.proto +186 -0
  388. package/src/providers/devin/proto/exa/opensearch_clients_pb/opensearch_clients.proto +503 -0
  389. package/src/providers/devin/proto/exa/product_analytics_pb/product_analytics.proto +37 -0
  390. package/src/providers/devin/proto/exa/prompt_pb/prompt.proto +92 -0
  391. package/src/providers/devin/proto/exa/reactive_component_pb/reactive_component.proto +96 -0
  392. package/src/providers/devin/proto/exa/seat_management_pb/seat_management.proto +2680 -0
  393. package/src/providers/devin/proto/exa/tokenizer_pb/tokenizer.proto +37 -0
  394. package/src/providers/devin/proto/exa/trainer_pb/config.proto +647 -0
  395. package/src/providers/devin/proto/exa/tree_sitter/language_data_pb/language_data.proto +14 -0
  396. package/src/providers/devin/proto/exa/trust_pb/trust.proto +157 -0
  397. package/src/providers/devin/proto/exa/user_analytics_pb/user_analytics.proto +519 -0
  398. package/src/providers/devin/proto/google.golang.org/appengine/internal/base/api_base.proto +28 -0
  399. package/src/providers/devin/proto/google.golang.org/appengine/internal/datastore/datastore_v3.proto +484 -0
  400. package/src/providers/devin/proto/google.golang.org/appengine/internal/log/log_service.proto +136 -0
  401. package/src/providers/devin/proto/google.golang.org/appengine/internal/remote_api/remote_api.proto +42 -0
  402. package/src/providers/devin/proto/google.golang.org/appengine/internal/urlfetch/urlfetch_service.proto +61 -0
  403. package/src/providers/devin/proto/grpc/binlog/v1/binarylog.proto +84 -0
  404. package/src/providers/devin/proto/io/prometheus/client/metrics.proto +98 -0
  405. package/src/providers/devin.ts +577 -0
  406. package/src/providers/error-message.ts +21 -0
  407. package/src/providers/github-copilot-headers.ts +141 -0
  408. package/src/providers/gitlab-duo-workflow-chatml-note.md +1 -0
  409. package/src/providers/gitlab-duo-workflow.ts +3058 -0
  410. package/src/providers/gitlab-duo.ts +395 -0
  411. package/src/providers/google-auth.ts +350 -0
  412. package/src/providers/google-gemini-cli.ts +1362 -0
  413. package/src/providers/google-interactions.ts +753 -0
  414. package/src/providers/google-shared.ts +1103 -0
  415. package/src/providers/google-types.ts +180 -0
  416. package/src/providers/google-vertex.ts +183 -0
  417. package/src/providers/google.ts +87 -0
  418. package/src/providers/grammar.ts +70 -0
  419. package/src/providers/kimi.ts +52 -0
  420. package/src/providers/mock.ts +507 -0
  421. package/src/providers/ollama.ts +773 -0
  422. package/src/providers/openai-anthropic-shim.ts +152 -0
  423. package/src/providers/openai-chat-server-schema.ts +242 -0
  424. package/src/providers/openai-chat-server.ts +715 -0
  425. package/src/providers/openai-chat-wire.ts +847 -0
  426. package/src/providers/openai-codex/request-transformer.ts +295 -0
  427. package/src/providers/openai-codex/response-handler.ts +102 -0
  428. package/src/providers/openai-codex-responses.ts +3468 -0
  429. package/src/providers/openai-completions.ts +2173 -0
  430. package/src/providers/openai-reasoning-fallback.ts +269 -0
  431. package/src/providers/openai-responses-reasoning-suppression.md +1 -0
  432. package/src/providers/openai-responses-server-schema.ts +282 -0
  433. package/src/providers/openai-responses-server.ts +1280 -0
  434. package/src/providers/openai-responses-wire.ts +6391 -0
  435. package/src/providers/openai-responses.ts +1022 -0
  436. package/src/providers/openai-shared.ts +2648 -0
  437. package/src/providers/pi-native-client.ts +266 -0
  438. package/src/providers/pi-native-server.ts +242 -0
  439. package/src/providers/register-builtins.ts +475 -0
  440. package/src/providers/synthetic.ts +50 -0
  441. package/src/providers/transform-messages.ts +787 -0
  442. package/src/providers/vision-guard.ts +54 -0
  443. package/src/registry/aimlapi.ts +6 -0
  444. package/src/registry/alibaba-coding-plan.ts +95 -0
  445. package/src/registry/amazon-bedrock.ts +22 -0
  446. package/src/registry/anthropic.ts +26 -0
  447. package/src/registry/api-key-login.ts +112 -0
  448. package/src/registry/api-key-validation.ts +161 -0
  449. package/src/registry/azure.ts +6 -0
  450. package/src/registry/cerebras.ts +23 -0
  451. package/src/registry/cloudflare-ai-gateway.ts +45 -0
  452. package/src/registry/coreweave.ts +40 -0
  453. package/src/registry/cursor.ts +20 -0
  454. package/src/registry/deepseek.ts +46 -0
  455. package/src/registry/derived.ts +9 -0
  456. package/src/registry/devin.ts +15 -0
  457. package/src/registry/firepass.ts +32 -0
  458. package/src/registry/fireworks.ts +28 -0
  459. package/src/registry/github-copilot.ts +22 -0
  460. package/src/registry/gitlab-duo-workflow.ts +20 -0
  461. package/src/registry/gitlab-duo.ts +19 -0
  462. package/src/registry/google-antigravity.ts +22 -0
  463. package/src/registry/google-gemini-cli.ts +22 -0
  464. package/src/registry/google-vertex.ts +38 -0
  465. package/src/registry/google.ts +6 -0
  466. package/src/registry/groq.ts +6 -0
  467. package/src/registry/huggingface.ts +29 -0
  468. package/src/registry/index.ts +4 -0
  469. package/src/registry/kagi.ts +46 -0
  470. package/src/registry/kilo.ts +114 -0
  471. package/src/registry/kimi-code.ts +17 -0
  472. package/src/registry/litellm.ts +45 -0
  473. package/src/registry/llama-cpp.ts +35 -0
  474. package/src/registry/lm-studio.ts +31 -0
  475. package/src/registry/minimax-code-cn.ts +12 -0
  476. package/src/registry/minimax-code.ts +12 -0
  477. package/src/registry/minimax.ts +6 -0
  478. package/src/registry/mistral.ts +6 -0
  479. package/src/registry/moonshot.ts +22 -0
  480. package/src/registry/nanogpt.ts +22 -0
  481. package/src/registry/nvidia.ts +61 -0
  482. package/src/registry/oauth/__tests__/xai-oauth.test.ts +104 -0
  483. package/src/registry/oauth/anthropic.ts +311 -0
  484. package/src/registry/oauth/callback-server.ts +315 -0
  485. package/src/registry/oauth/cursor.ts +171 -0
  486. package/src/registry/oauth/devin.ts +124 -0
  487. package/src/registry/oauth/github-copilot.ts +369 -0
  488. package/src/registry/oauth/gitlab-duo-workflow.ts +146 -0
  489. package/src/registry/oauth/gitlab-duo.ts +222 -0
  490. package/src/registry/oauth/google-antigravity.ts +209 -0
  491. package/src/registry/oauth/google-gemini-cli.ts +273 -0
  492. package/src/registry/oauth/google-oauth-shared.ts +125 -0
  493. package/src/registry/oauth/index.ts +269 -0
  494. package/src/registry/oauth/kimi.ts +289 -0
  495. package/src/registry/oauth/minimax-code.ts +53 -0
  496. package/src/registry/oauth/oauth.html +311 -0
  497. package/src/registry/oauth/openai-codex.ts +364 -0
  498. package/src/registry/oauth/opencode.ts +50 -0
  499. package/src/registry/oauth/perplexity.ts +228 -0
  500. package/src/registry/oauth/pkce.ts +18 -0
  501. package/src/registry/oauth/types.ts +65 -0
  502. package/src/registry/oauth/wafer.ts +24 -0
  503. package/src/registry/oauth/xai-oauth.ts +394 -0
  504. package/src/registry/oauth/xiaomi.ts +211 -0
  505. package/src/registry/ollama-cloud.ts +36 -0
  506. package/src/registry/ollama.ts +43 -0
  507. package/src/registry/openai-codex-device.ts +18 -0
  508. package/src/registry/openai-codex.ts +19 -0
  509. package/src/registry/openai.ts +6 -0
  510. package/src/registry/opencode-go.ts +12 -0
  511. package/src/registry/opencode-zen.ts +12 -0
  512. package/src/registry/openrouter.ts +28 -0
  513. package/src/registry/parallel.ts +45 -0
  514. package/src/registry/perplexity.ts +13 -0
  515. package/src/registry/qianfan.ts +27 -0
  516. package/src/registry/qwen-portal.ts +50 -0
  517. package/src/registry/registry.ts +161 -0
  518. package/src/registry/sakana.ts +22 -0
  519. package/src/registry/synthetic.ts +21 -0
  520. package/src/registry/tavily.ts +45 -0
  521. package/src/registry/together.ts +22 -0
  522. package/src/registry/types.ts +56 -0
  523. package/src/registry/umans.ts +23 -0
  524. package/src/registry/venice.ts +33 -0
  525. package/src/registry/vercel-ai-gateway.ts +38 -0
  526. package/src/registry/vllm.ts +34 -0
  527. package/src/registry/wafer-serverless.ts +12 -0
  528. package/src/registry/xai-oauth.ts +17 -0
  529. package/src/registry/xai.ts +6 -0
  530. package/src/registry/xiaomi-token-plan-ams.ts +12 -0
  531. package/src/registry/xiaomi-token-plan-cn.ts +12 -0
  532. package/src/registry/xiaomi-token-plan-sgp.ts +12 -0
  533. package/src/registry/xiaomi.ts +12 -0
  534. package/src/registry/zai.ts +27 -0
  535. package/src/registry/zenmux.ts +22 -0
  536. package/src/registry/zhipu-coding-plan.ts +27 -0
  537. package/src/stream.ts +1778 -0
  538. package/src/types.ts +856 -0
  539. package/src/usage/claude.ts +485 -0
  540. package/src/usage/gemini.ts +258 -0
  541. package/src/usage/github-copilot.ts +424 -0
  542. package/src/usage/google-antigravity.ts +497 -0
  543. package/src/usage/kimi.ts +271 -0
  544. package/src/usage/minimax-code.ts +30 -0
  545. package/src/usage/ollama.ts +41 -0
  546. package/src/usage/openai-codex-base-url.ts +35 -0
  547. package/src/usage/openai-codex-reset.ts +174 -0
  548. package/src/usage/openai-codex.ts +535 -0
  549. package/src/usage/opencode-go.ts +89 -0
  550. package/src/usage/shared.ts +10 -0
  551. package/src/usage/zai.ts +321 -0
  552. package/src/usage.ts +333 -0
  553. package/src/utils/abort.ts +67 -0
  554. package/src/utils/anthropic-auth.ts +93 -0
  555. package/src/utils/block-symbols.ts +32 -0
  556. package/src/utils/deterministic-id.ts +20 -0
  557. package/src/utils/empty-completion-retry.ts +159 -0
  558. package/src/utils/event-stream.ts +171 -0
  559. package/src/utils/foundry.ts +8 -0
  560. package/src/utils/google-validation.ts +25 -0
  561. package/src/utils/harmony-leak.ts +456 -0
  562. package/src/utils/http-inspector.ts +168 -0
  563. package/src/utils/idle-iterator.ts +473 -0
  564. package/src/utils/leaked-thinking-stream.ts +294 -0
  565. package/src/utils/openai-http.ts +122 -0
  566. package/src/utils/openrouter-headers.ts +12 -0
  567. package/src/utils/parse-bind.ts +56 -0
  568. package/src/utils/provider-response.ts +30 -0
  569. package/src/utils/proxy.ts +240 -0
  570. package/src/utils/request-debug.ts +351 -0
  571. package/src/utils/retry-after.ts +110 -0
  572. package/src/utils/retry.ts +59 -0
  573. package/src/utils/schema/CONSTRAINTS.md +166 -0
  574. package/src/utils/schema/adapt.ts +36 -0
  575. package/src/utils/schema/compatibility.ts +435 -0
  576. package/src/utils/schema/dereference.ts +98 -0
  577. package/src/utils/schema/draft.ts +341 -0
  578. package/src/utils/schema/equality.ts +97 -0
  579. package/src/utils/schema/fields.ts +207 -0
  580. package/src/utils/schema/index.ts +15 -0
  581. package/src/utils/schema/json-schema-validator.ts +595 -0
  582. package/src/utils/schema/meta-validator.ts +167 -0
  583. package/src/utils/schema/normalize.ts +1901 -0
  584. package/src/utils/schema/spill.ts +43 -0
  585. package/src/utils/schema/stamps.ts +109 -0
  586. package/src/utils/schema/strict-tool-validation.ts +117 -0
  587. package/src/utils/schema/types.ts +10 -0
  588. package/src/utils/schema/typescript.ts +198 -0
  589. package/src/utils/schema/wire.ts +789 -0
  590. package/src/utils/schema/zod-decontaminate.ts +331 -0
  591. package/src/utils/sdk-stream-timeout.ts +43 -0
  592. package/src/utils/sse-debug.ts +18 -0
  593. package/src/utils/stream-markup-healing.ts +247 -0
  594. package/src/utils/thinking-loop.ts +552 -0
  595. package/src/utils/tool-call-loop-guard.ts +107 -0
  596. package/src/utils/tool-choice.ts +99 -0
  597. package/src/utils/validation.ts +1507 -0
  598. package/src/utils.ts +171 -0
package/src/types.ts ADDED
@@ -0,0 +1,856 @@
1
+ export * from "jeopi-catalog/effort";
2
+ export * from "jeopi-catalog/types";
3
+
4
+ import type { Type } from "arktype";
5
+ import type {
6
+ DeleteArgs,
7
+ DeleteResult,
8
+ DiagnosticsArgs,
9
+ DiagnosticsResult,
10
+ GrepArgs,
11
+ GrepResult,
12
+ LsArgs,
13
+ LsResult,
14
+ McpResult,
15
+ ReadArgs,
16
+ ReadResult,
17
+ ShellArgs,
18
+ ShellResult,
19
+ WriteArgs,
20
+ WriteResult,
21
+ } from "jeopi-catalog/discovery/cursor-gen/agent_pb";
22
+ import type { Effort } from "jeopi-catalog/effort";
23
+ import type { Api, FetchImpl, KnownApi, Model, Provider, ThinkingBudgets, Usage } from "jeopi-catalog/types";
24
+ import type { ZodType, z } from "zod/v4";
25
+ import type { ApiKey } from "./auth-retry";
26
+ import type { BedrockOptions } from "./providers/amazon-bedrock";
27
+ import type { AnthropicOptions } from "./providers/anthropic";
28
+ import type { FallbackParam, StopDetails } from "./providers/anthropic-wire";
29
+ import type { AzureOpenAIResponsesOptions } from "./providers/azure-openai-responses";
30
+ import type { CursorOptions } from "./providers/cursor";
31
+ import type { DevinOptions } from "./providers/devin";
32
+ import type { GitLabDuoWorkflowOptions } from "./providers/gitlab-duo-workflow";
33
+ import type { GoogleOptions } from "./providers/google";
34
+ import type { GoogleGeminiCliOptions } from "./providers/google-gemini-cli";
35
+ import type { GoogleVertexOptions } from "./providers/google-vertex";
36
+ import type { OllamaChatOptions } from "./providers/ollama";
37
+ import type { OpenAICodexResponsesOptions } from "./providers/openai-codex-responses";
38
+ import type { OpenAICompletionsOptions } from "./providers/openai-completions";
39
+ import type { OpenAIResponsesOptions } from "./providers/openai-responses";
40
+ import type { kStreamingPartialJson } from "./utils/block-symbols";
41
+ import type { AssistantMessageEventStream } from "./utils/event-stream";
42
+
43
+ export type { StopDetails } from "./providers/anthropic-wire";
44
+ export type { AssistantMessageEventStream } from "./utils/event-stream";
45
+
46
+ /**
47
+ * Ceiling on the output-token count omp requests from any OpenAI-family endpoint
48
+ * (openai-responses, azure/xai responses, and openai-completions). Mirrors
49
+ * Anthropic's {@link CLAUDE_CODE_MAX_OUTPUT_TOKENS}.
50
+ *
51
+ * Catalog `maxTokens` frequently reflects a model's context window rather than a
52
+ * given upstream's real per-request output cap. OpenRouter, for instance,
53
+ * advertises 131072 output tokens for `z-ai/glm-4.7`, but the Cerebras upstream
54
+ * only allows ~131072 tokens total — so requesting the full ceiling overflows
55
+ * with a 400. Requested output is clamped to this value (and to `model.maxTokens`).
56
+ */
57
+ export const OPENAI_MAX_OUTPUT_TOKENS = 64000;
58
+
59
+ export interface ApiOptionsMap {
60
+ "anthropic-messages": AnthropicOptions;
61
+ "bedrock-converse-stream": BedrockOptions;
62
+ "openai-completions": OpenAICompletionsOptions;
63
+ "openai-responses": OpenAIResponsesOptions;
64
+ openrouter: OpenAIResponsesOptions | OpenAICompletionsOptions;
65
+ "openai-codex-responses": OpenAICodexResponsesOptions;
66
+ "azure-openai-responses": AzureOpenAIResponsesOptions;
67
+ "google-generative-ai": GoogleOptions;
68
+ "google-gemini-cli": GoogleGeminiCliOptions;
69
+ "google-vertex": GoogleVertexOptions;
70
+ "ollama-chat": OllamaChatOptions;
71
+ "cursor-agent": CursorOptions;
72
+ "gitlab-duo-agent": GitLabDuoWorkflowOptions;
73
+ "devin-agent": DevinOptions;
74
+ }
75
+ // Compile-time exhaustiveness check - this will fail if ApiOptionsMap doesn't have all KnownApi keys
76
+ type _CheckExhaustive =
77
+ ApiOptionsMap extends Record<KnownApi, StreamOptions>
78
+ ? Record<KnownApi, StreamOptions> extends ApiOptionsMap
79
+ ? true
80
+ : ["ApiOptionsMap is missing some KnownApi values", Exclude<KnownApi, keyof ApiOptionsMap>]
81
+ : ["ApiOptionsMap doesn't extend Record<KnownApi, StreamOptions>"];
82
+ true satisfies _CheckExhaustive;
83
+ export type OptionsForApi<TApi extends Api> =
84
+ | StreamOptions
85
+ | (TApi extends keyof ApiOptionsMap ? ApiOptionsMap[TApi] : never);
86
+
87
+ export interface TokenTaskBudget {
88
+ type: "tokens";
89
+ total: number;
90
+ remaining?: number;
91
+ }
92
+
93
+ export type MessageAttribution = "user" | "agent";
94
+
95
+ export type ToolChoice =
96
+ | "auto"
97
+ | "none"
98
+ | "any"
99
+ | "required"
100
+ | { type: "function"; name: string }
101
+ | { type: "function"; function: { name: string } }
102
+ | { type: "tool"; name: string };
103
+
104
+ // Base options all providers share
105
+ export type CacheRetention = "none" | "short" | "long";
106
+
107
+ /**
108
+ * Service tier hint for processing priority / cost control. These are the
109
+ * values providers consume on the wire:
110
+ *
111
+ * - OpenAI / OpenAI-Codex: sent verbatim as the `service_tier` field
112
+ * (`flex`/`scale`/`priority`).
113
+ * - Google (Gemini API + Vertex AI): sent as the top-level `serviceTier`
114
+ * field (`flex`/`priority`).
115
+ * - OpenRouter: passed through as `service_tier`; OpenRouter realizes it for
116
+ * the OpenAI- and Google-family upstreams it supports and ignores it
117
+ * otherwise.
118
+ * - Direct Anthropic: `"priority"` is translated into `speed: "fast"` plus the
119
+ * fast-mode beta on supported Opus models. Other tiers are ignored.
120
+ *
121
+ * Per-family scoping is expressed by {@link ServiceTierByFamily}, not by
122
+ * scoped sentinel values — see {@link serviceTierFamily}.
123
+ */
124
+ export type ServiceTier = "auto" | "default" | "flex" | "scale" | "priority";
125
+
126
+ /** Provider families that expose an independent service-tier knob. */
127
+ export type ServiceTierFamily = "openai" | "anthropic" | "google";
128
+
129
+ /**
130
+ * Per-family service-tier selection. A request consults only the entry for the
131
+ * family its model belongs to (see {@link resolveModelServiceTier}), so a user
132
+ * can opt one family into priority without affecting the others when switching
133
+ * models mid-session.
134
+ */
135
+ export type ServiceTierByFamily = Partial<Record<ServiceTierFamily, ServiceTier>>;
136
+
137
+ /**
138
+ * Classify a model into the service-tier family whose knob governs it, or
139
+ * `undefined` when the model exposes no serving-priority control.
140
+ *
141
+ * OpenRouter models are classified by id namespace (`anthropic/`, `google/`,
142
+ * `openai/`); Claude on Bedrock/Vertex (api `anthropic-messages`) is the
143
+ * anthropic family even though its provider is `amazon-bedrock`/`google-vertex`.
144
+ */
145
+ export function serviceTierFamily(model: Pick<Model, "provider" | "api" | "id">): ServiceTierFamily | undefined {
146
+ const provider = model.provider;
147
+ if (provider === "openrouter") {
148
+ const id = model.id.toLowerCase();
149
+ if (id.startsWith("anthropic/")) return "anthropic";
150
+ if (id.startsWith("google/")) return "google";
151
+ if (id.startsWith("openai/")) return "openai";
152
+ return undefined;
153
+ }
154
+ if (provider === "openai" || provider === "openai-codex") return "openai";
155
+ if (model.api === "anthropic-messages") return "anthropic";
156
+ if (provider === "google" || provider === "google-vertex") return "google";
157
+ return undefined;
158
+ }
159
+
160
+ /**
161
+ * Reduce a per-family tier map to the single wire tier for `model` — the entry
162
+ * for the model's family, or `undefined` when the model has no family.
163
+ */
164
+ export function resolveModelServiceTier(
165
+ tiers: ServiceTierByFamily | null | undefined,
166
+ model: Pick<Model, "provider" | "api" | "id">,
167
+ ): ServiceTier | undefined {
168
+ if (!tiers) return undefined;
169
+ const family = serviceTierFamily(model);
170
+ return family ? tiers[family] : undefined;
171
+ }
172
+
173
+ /**
174
+ * True when the tier should be sent on the wire as the provider's service-tier
175
+ * request field. OpenAI / OpenAI-Codex accept `flex`/`scale`/`priority`; Google
176
+ * (Gemini API + Vertex) and OpenRouter accept `flex`/`priority`; Fireworks
177
+ * Serverless realizes only its Priority serving path. Anthropic is absent — it
178
+ * realizes `priority` via `speed: "fast"`, not a service-tier field.
179
+ */
180
+ export function shouldSendServiceTier(
181
+ serviceTier: ServiceTier | null | undefined,
182
+ provider: Provider | undefined,
183
+ ): boolean {
184
+ if (!serviceTier) return false;
185
+ if (provider === "openai" || provider === "openai-codex" || provider === "openrouter") {
186
+ return serviceTier === "flex" || serviceTier === "scale" || serviceTier === "priority";
187
+ }
188
+ if (provider === "google") {
189
+ return serviceTier === "flex" || serviceTier === "priority";
190
+ }
191
+ // Vertex realizes only priority (via header); flex has no documented control.
192
+ if (provider === "google-vertex" || provider === "fireworks") {
193
+ return serviceTier === "priority";
194
+ }
195
+ return false;
196
+ }
197
+
198
+ /**
199
+ * True when `priority` will actually be realized on the wire for `model`.
200
+ * Direct Anthropic realizes fast mode; OpenAI/Google/Fireworks emit the
201
+ * service-tier field; OpenRouter realizes it only for its OpenAI- and
202
+ * Google-family upstreams. Bedrock/Vertex Claude and OpenRouter Anthropic
203
+ * models do not realize priority and return `false`.
204
+ */
205
+ export function realizesPriorityServiceTier(
206
+ serviceTier: ServiceTier | null | undefined,
207
+ model: Pick<Model, "provider" | "api" | "id">,
208
+ ): boolean {
209
+ if (serviceTier !== "priority") return false;
210
+ if (model.provider === "anthropic") return true;
211
+ if (model.provider === "openrouter") {
212
+ const family = serviceTierFamily(model);
213
+ return family === "openai" || family === "google";
214
+ }
215
+ if (model.api === "anthropic-messages") return false;
216
+ return shouldSendServiceTier(serviceTier, model.provider);
217
+ }
218
+
219
+ /**
220
+ * Premium-request weight contributed by a priority request to a provider that
221
+ * realizes it and bills extra. Mirrors GitHub Copilot's `premiumRequests`
222
+ * accounting so the "premium requests" stat aggregates priority traffic across
223
+ * the OpenAI family, direct Anthropic fast mode, and Google priority.
224
+ *
225
+ * Returns 1 only when priority is actually realized on the wire for `model`
226
+ * (see {@link realizesPriorityServiceTier}) and the provider bills it as a
227
+ * premium request. OpenRouter is excluded — it bills per its own pricing, not
228
+ * Copilot-premium semantics — as are Bedrock/Vertex Claude, where priority is
229
+ * silently dropped.
230
+ */
231
+ export function getPriorityPremiumRequests(
232
+ serviceTier: ServiceTier | null | undefined,
233
+ model: Pick<Model, "provider" | "api" | "id">,
234
+ ): number {
235
+ if (!realizesPriorityServiceTier(serviceTier, model)) return 0;
236
+ const provider = model.provider;
237
+ return provider === "openai" ||
238
+ provider === "openai-codex" ||
239
+ provider === "anthropic" ||
240
+ provider === "google" ||
241
+ provider === "google-vertex"
242
+ ? 1
243
+ : 0;
244
+ }
245
+
246
+ /**
247
+ * Coerce a persisted service-tier value to a {@link ServiceTierByFamily}. Newer
248
+ * sessions store the family map directly; legacy sessions stored a single
249
+ * scalar — `"priority"` applied everywhere, `"openai-only"`/`"claude-only"`
250
+ * scoped to one family, and the remaining values were OpenAI-only semantics.
251
+ */
252
+ export function coerceServiceTierByFamily(value: unknown): ServiceTierByFamily | undefined {
253
+ if (value === null || value === undefined) return undefined;
254
+ if (typeof value === "object") {
255
+ const src = value as Record<string, unknown>;
256
+ const out: ServiceTierByFamily = {};
257
+ for (const family of ["openai", "anthropic", "google"] as const) {
258
+ const tier = src[family];
259
+ if (tier === "auto" || tier === "default" || tier === "flex" || tier === "scale" || tier === "priority") {
260
+ out[family] = tier;
261
+ }
262
+ }
263
+ return Object.keys(out).length > 0 ? out : undefined;
264
+ }
265
+ switch (value) {
266
+ case "priority":
267
+ return { openai: "priority", anthropic: "priority", google: "priority" };
268
+ case "openai-only":
269
+ return { openai: "priority" };
270
+ case "claude-only":
271
+ return { anthropic: "priority" };
272
+ case "auto":
273
+ return { openai: "auto" };
274
+ case "default":
275
+ return { openai: "default" };
276
+ case "flex":
277
+ return { openai: "flex" };
278
+ case "scale":
279
+ return { openai: "scale" };
280
+ default:
281
+ return undefined;
282
+ }
283
+ }
284
+
285
+ export interface ProviderSessionState {
286
+ close(): void;
287
+ }
288
+
289
+ export interface ProviderResponseMetadata {
290
+ status: number;
291
+ headers: Record<string, string>;
292
+ requestId?: string | null;
293
+ metadata?: Record<string, unknown>;
294
+ }
295
+
296
+ export interface RawSseEvent {
297
+ event: string | null;
298
+ data: string;
299
+ raw: string[];
300
+ }
301
+
302
+ export interface StreamOptions {
303
+ temperature?: number;
304
+ topP?: number;
305
+ topK?: number;
306
+ minP?: number;
307
+ presencePenalty?: number;
308
+ repetitionPenalty?: number;
309
+ /**
310
+ * Stop sequences. Anthropic encodes as `stop_sequences` (array, max 4);
311
+ * OpenAI chat-completions encodes as `stop` (string or array of up to 4);
312
+ * OpenAI Responses API has no `stop` field today (silently dropped by the
313
+ * provider when present).
314
+ */
315
+ stopSequences?: string[];
316
+ /**
317
+ * Frequency penalty (OpenAI). Penalizes new tokens based on existing frequency
318
+ * in the text so far. Range -2.0 to 2.0. Parallel to {@link presencePenalty}.
319
+ */
320
+ frequencyPenalty?: number;
321
+ maxTokens?: number;
322
+ signal?: AbortSignal;
323
+ apiKey?: string;
324
+ cacheRetention?: CacheRetention;
325
+ /**
326
+ * Additional headers to include in provider requests.
327
+ * These are merged on top of model-defined headers.
328
+ */
329
+ headers?: Record<string, string>;
330
+ /**
331
+ * Optional explicit request attribution override for providers that support it.
332
+ */
333
+ initiatorOverride?: MessageAttribution;
334
+ /**
335
+ * Maximum delay in milliseconds to wait for a retry when the server requests a long wait.
336
+ * If the server's requested delay exceeds this value, the request fails immediately
337
+ * with an error containing the requested delay, allowing higher-level retry logic
338
+ * to handle it with user visibility.
339
+ * Default: 60000 (60 seconds). Set to 0 to disable the cap.
340
+ */
341
+ maxRetryDelayMs?: number;
342
+ /**
343
+ * Optional metadata to include in API requests.
344
+ * Providers extract the fields they understand and ignore the rest.
345
+ * For example, Anthropic uses `user_id` for abuse tracking and rate limiting.
346
+ */
347
+ metadata?: Record<string, unknown>;
348
+ /**
349
+ * Config options for the thinking/response loop guard.
350
+ */
351
+ loopGuard?: {
352
+ enabled?: boolean;
353
+ checkAssistantContent?: boolean;
354
+ };
355
+ /**
356
+ * Advisory token budget for a full agentic loop. Anthropic encodes this as
357
+ * `output_config.task_budget` with the `task-budgets-2026-03-13` beta header.
358
+ */
359
+ taskBudget?: TokenTaskBudget;
360
+ /**
361
+ * Optional session identifier for providers that support session-based
362
+ * routing, request affinity, or transport reuse. Providers may also use this
363
+ * as the prompt-cache key when `promptCacheKey` is not set.
364
+ */
365
+ sessionId?: string;
366
+ /**
367
+ * Optional prompt-cache identity. When set, OpenAI Responses-compatible
368
+ * providers use this for `prompt_cache_key` while keeping `sessionId` for
369
+ * provider routing / conversation headers.
370
+ */
371
+ promptCacheKey?: string;
372
+ /**
373
+ * Provider-scoped mutable state store for this agent session.
374
+ * Providers can use this to persist transport/session state between turns.
375
+ */
376
+ providerSessionState?: Map<string, ProviderSessionState>;
377
+ /**
378
+ * Force Gemini model-mode Interactions API transport for providers that support it.
379
+ * When unset, those providers may still use Interactions to continue known
380
+ * server-side conversation lineage via `previousInteractionId` or stored state.
381
+ */
382
+ useInteractionsApi?: boolean;
383
+ /**
384
+ * Whether supported Interactions transports should store server-side conversation
385
+ * state and return response ids for follow-up turns. Defaults to true.
386
+ */
387
+ storeInteraction?: boolean;
388
+ /**
389
+ * Explicit Interactions response id to continue. Mutually exclusive with
390
+ * `storeInteraction: false` because the follow-up itself must be storable.
391
+ */
392
+ previousInteractionId?: string;
393
+ /**
394
+ * Optional per-provider concurrent request cap for LLM stream calls. Keys are
395
+ * provider ids (`model.provider`); positive numeric values cap in-flight
396
+ * requests across local OMP processes that share the same config root. Omitted
397
+ * providers are unlimited. Non-chat provider APIs that bypass stream helpers
398
+ * are not covered.
399
+ */
400
+ maxInFlightRequests?: Record<string, number>;
401
+ /**
402
+ * Optional callback for inspecting or replacing provider payloads before sending.
403
+ * Return undefined to keep the payload unchanged.
404
+ */
405
+ onPayload?: (payload: unknown, model?: Model<Api>) => unknown | undefined | Promise<unknown | undefined>;
406
+ /**
407
+ * Optional callback for provider response metadata after headers are received.
408
+ */
409
+ onResponse?: (response: ProviderResponseMetadata, model?: Model<Api>) => void | Promise<void>;
410
+ /**
411
+ * Optional callback for raw Server-Sent Events as they arrive from HTTP streaming providers,
412
+ * plus synthesized SSE-shaped frames for the Codex WebSocket transport (one synthetic frame
413
+ * per JSON request/response message). WebSocket frames are tagged with a leading
414
+ * `: ws → <type>` (outbound) or `: ws ← <type>` (inbound) comment line in `RawSseEvent.raw`.
415
+ *
416
+ * Diagnostic only: provider implementations must ignore callback failures and must not
417
+ * let observers alter stream contents.
418
+ */
419
+ onSseEvent?: (event: RawSseEvent, model?: Model<Api>) => void;
420
+ /**
421
+ * Optional override for the first-event watchdog in milliseconds. Built-in
422
+ * providers apply this budget twice when they can: once to the underlying
423
+ * SDK/request while waiting for the HTTP stream object to exist, then again
424
+ * in the iterator while waiting for the first semantic stream event. Set to
425
+ * `0` to disable both layers for this request. After the first semantic
426
+ * event arrives, `streamIdleTimeoutMs` governs inter-event stalls. Falls
427
+ * back to `PI_STREAM_FIRST_EVENT_TIMEOUT_MS` and then to a 100s default.
428
+ * OpenAI-family transports additionally honor
429
+ * `PI_OPENAI_STREAM_FIRST_EVENT_TIMEOUT_MS` as the most-specific override and
430
+ * floor the first-event budget at the resolved idle (per-call
431
+ * `streamIdleTimeoutMs` or `PI_OPENAI_STREAM_IDLE_TIMEOUT_MS`) so slow local
432
+ * OpenAI-compatible servers are not undercut during prompt processing.
433
+ *
434
+ * Iterator-level honored by: every built-in provider (via the lazy-stream
435
+ * forwarder in `register-builtins`). SDK-request honored by:
436
+ * `openai-completions`, `openai-responses`, `azure-openai-responses`,
437
+ * `anthropic-messages`.
438
+ */
439
+ streamFirstEventTimeoutMs?: number;
440
+ /**
441
+ * Optional override for the maximum idle gap between streamed events in
442
+ * milliseconds. Once the first event arrives, this guards against silent
443
+ * mid-stream stalls (broker dies, half-open socket, model produces no real
444
+ * progress for too long). Set to `0` to disable. Falls back to
445
+ * `PI_STREAM_IDLE_TIMEOUT_MS` (alias: `PI_OPENAI_STREAM_IDLE_TIMEOUT_MS`)
446
+ * and then to a 120s default.
447
+ */
448
+ streamIdleTimeoutMs?: number;
449
+ /**
450
+ * Optional retry delay hook for tests and transports that need custom scheduling.
451
+ */
452
+ providerRetryWait?: (delayMs: number, signal?: AbortSignal) => Promise<void>;
453
+ /**
454
+ * Optional `fetch` implementation override. Providers route every HTTP
455
+ * request — direct calls, SDK clients, and retry helpers — through this
456
+ * implementation when set. Defaults to `globalThis.fetch`. Providers that
457
+ * do not use `fetch` (Bedrock's AWS SDK transport, Cursor's HTTP/2
458
+ * channel) silently ignore the override.
459
+ */
460
+ fetch?: FetchImpl;
461
+ /** Current session working directory for providers that need workspace-scoped discovery. */
462
+ cwd?: string;
463
+
464
+ /** Cursor exec/MCP tool handlers (cursor-agent only). */
465
+ execHandlers?: CursorExecHandlers;
466
+ }
467
+
468
+ // Unified options with reasoning passed to streamSimple() and completeSimple()
469
+ export interface SimpleStreamOptions extends Omit<StreamOptions, "apiKey"> {
470
+ /**
471
+ * API key for the request: either a static bearer string, or an
472
+ * {@link ApiKeyResolver} that mints/rotates the key across the central
473
+ * a/b/c auth-retry policy. `streamSimple`/`completeSimple` resolve a
474
+ * resolver to a string before per-provider dispatch, so providers only
475
+ * ever see the resolved {@link StreamOptions.apiKey} string.
476
+ */
477
+ apiKey?: ApiKey;
478
+ reasoning?: Effort;
479
+ /**
480
+ * Force-disable reasoning for the request even when the model supports it.
481
+ * Takes precedence over `reasoning`. Useful for fast utility calls
482
+ * (e.g. title generation) where the model would otherwise burn the entire
483
+ * output budget on internal thinking. Provider support is format-specific:
484
+ * some transports can disable reasoning directly, while generic
485
+ * effort-based OpenAI-compatible endpoints use the lowest supported effort.
486
+ */
487
+ disableReasoning?: boolean;
488
+ /**
489
+ * If true, request that the provider omit thinking/reasoning summaries
490
+ * from the response (e.g. Anthropic `thinking.display = "omitted"`,
491
+ * OpenAI Responses `reasoning.summary` left unset). The model still
492
+ * reasons internally; only the human-readable summary stream is dropped.
493
+ * Useful when the UI hides thinking blocks anyway and the summary is wasted bandwidth.
494
+ */
495
+ hideThinkingSummary?: boolean;
496
+ /** OpenAI Responses/Codex `text.verbosity` response detail level. */
497
+ textVerbosity?: "low" | "medium" | "high";
498
+ /** Custom token budgets for thinking levels (token-based providers only) */
499
+ thinkingBudgets?: ThinkingBudgets;
500
+ /** Cursor exec handlers for local tool execution */
501
+ cursorExecHandlers?: CursorExecHandlers;
502
+ /** Hook to handle tool results from Cursor exec */
503
+ cursorOnToolResult?: CursorToolResultHandler;
504
+ /** Optional tool choice override for compatible providers */
505
+ toolChoice?: ToolChoice;
506
+ /** OpenAI service tier for processing priority/cost control. Ignored by non-OpenAI providers. */
507
+ serviceTier?: ServiceTier;
508
+ /** API format for Kimi Code provider: "openai" or "anthropic" (default: "anthropic") */
509
+ kimiApiFormat?: "openai" | "anthropic";
510
+ /** API format for Synthetic provider: "openai" or "anthropic" (default: "openai") */
511
+ syntheticApiFormat?: "openai" | "anthropic";
512
+ /** Hint that websocket transport should be preferred when supported by the provider implementation. */
513
+ preferWebsockets?: boolean;
514
+ /**
515
+ * OpenRouter routing-variant suffix automatically appended to model IDs when
516
+ * the request targets OpenRouter (`model.provider === "openrouter"`). Common
517
+ * values: `"nitro"` (throughput), `"floor"` (cheapest), `"online"` (web
518
+ * search plugin), `"exacto"` (cherry-picked high-quality providers, only
519
+ * defined for some models). Ignored when the resolved model id already
520
+ * contains a `:<variant>` suffix (e.g. the user typed `:nitro` explicitly
521
+ * or the catalog entry already names the variant).
522
+ */
523
+ openrouterVariant?: string;
524
+ /** Antigravity endpoint routing mode: "auto" (default with failover), "production", "sandbox". */
525
+ antigravityEndpointMode?: "auto" | "production" | "sandbox";
526
+ /**
527
+ * Anthropic `server-side-fallback-2026-06-01` fallback chain (top-level
528
+ * `fallbacks` request field). Opt-in ONLY — leaving this undefined is
529
+ * the default and preserves the pre-fallback behavior on every
530
+ * provider. Non-Anthropic providers ignore the field.
531
+ */
532
+ fallbacks?: FallbackParam[];
533
+ }
534
+
535
+ // Generic StreamFunction with typed options
536
+ export type StreamFunction<TApi extends Api> = (
537
+ model: Model<TApi>,
538
+ context: Context,
539
+ options: OptionsForApi<TApi>,
540
+ ) => AssistantMessageEventStream;
541
+
542
+ export interface TextSignatureV1 {
543
+ v: 1;
544
+ id: string;
545
+ phase?: "commentary" | "final_answer";
546
+ }
547
+
548
+ export interface TextContent {
549
+ type: "text";
550
+ text: string;
551
+ textSignature?: string; // e.g., for OpenAI responses, message metadata (legacy id string or TextSignatureV1 JSON)
552
+ }
553
+
554
+ export interface ThinkingContent {
555
+ type: "thinking";
556
+ thinking: string;
557
+ thinkingSignature?: string; // e.g., for OpenAI responses, the reasoning item ID
558
+ itemId?: string; // item.id from output_item.added, used to match output_item.done
559
+ }
560
+
561
+ export interface RedactedThinkingContent {
562
+ type: "redactedThinking";
563
+ data: string;
564
+ }
565
+
566
+ /**
567
+ * Anthropic server-side-fallback boundary marker persisted on assistant
568
+ * turns whose provider request opted into
569
+ * `AnthropicOptions.fallbacks`. Consumers other than the Anthropic
570
+ * provider MUST ignore it — `transformMessages` strips the block on any
571
+ * cross-provider hop and on non-official Anthropic replays, so downstream
572
+ * converters never see it.
573
+ */
574
+ export interface AnthropicFallbackContent {
575
+ type: "fallback";
576
+ from: { model: string };
577
+ to: { model: string };
578
+ }
579
+
580
+ export interface ImageContent {
581
+ type: "image";
582
+ data: string; // base64 encoded image data
583
+ mimeType: string; // e.g., "image/jpeg", "image/png"
584
+ /**
585
+ * OpenAI-only resolution hint. `"original"` preserves native resolution
586
+ * (required for snapcompact frames, whose glyphs do not survive the
587
+ * default `auto` downscale). Providers without a detail knob ignore it.
588
+ */
589
+ detail?: "auto" | "low" | "high" | "original";
590
+ }
591
+
592
+ export interface ToolCall {
593
+ type: "toolCall";
594
+ id: string;
595
+ name: string;
596
+ arguments: Record<string, unknown>;
597
+ [kStreamingPartialJson]?: string;
598
+ thoughtSignature?: string; // Google-specific: opaque signature for reusing thought context
599
+ intent?: string; // Harness-level intent metadata extracted from traced tool arguments
600
+ /**
601
+ * Verbatim in-band syntax block that produced this synthetic `ptc_*` call.
602
+ * Present only for owned prompt/tool-call formats; provider-native calls omit it.
603
+ */
604
+ rawBlock?: string;
605
+ /**
606
+ * Original wire-level name when the tool was invoked via OpenAI's custom-tool
607
+ * mechanism (e.g., `apply_patch`). Set by `openai-responses` on receive so
608
+ * the history-replay path can re-emit the call as `custom_tool_call` with
609
+ * its paired tool-result as `custom_tool_call_output`. Absent for regular
610
+ * JSON function tools.
611
+ */
612
+ customWireName?: string;
613
+ }
614
+
615
+ export type StopReason = "stop" | "length" | "toolUse" | "error" | "aborted";
616
+
617
+ export interface OpenAIResponsesHistoryPayload {
618
+ type: "openaiResponsesHistory";
619
+ provider?: string;
620
+ dt?: boolean;
621
+ items: Array<Record<string, unknown>>;
622
+ }
623
+
624
+ export type ProviderPayload = OpenAIResponsesHistoryPayload;
625
+
626
+ export interface UserMessage {
627
+ role: "user";
628
+ content: string | (TextContent | ImageContent)[];
629
+ /** True if the message was injected by the system (e.g., auto-continue). */
630
+ synthetic?: boolean;
631
+ /** True when injected mid-turn as a steer; consumed by the agent's pre-LLM transform to wrap it for emphasis. Never rendered. */
632
+ steering?: boolean;
633
+ /** Who initiated this message for billing/attribution semantics. */
634
+ attribution?: MessageAttribution;
635
+ /** Provider-specific opaque payload used to reconstruct transport-native history. */
636
+ providerPayload?: ProviderPayload;
637
+ timestamp: number; // Unix timestamp in milliseconds
638
+ }
639
+
640
+ export interface DeveloperMessage {
641
+ role: "developer";
642
+ content: string | (TextContent | ImageContent)[];
643
+ /** Who initiated this message for billing/attribution semantics. */
644
+ attribution?: MessageAttribution;
645
+ /** Provider-specific opaque payload used to reconstruct transport-native history. */
646
+ providerPayload?: ProviderPayload;
647
+ timestamp: number; // Unix timestamp in milliseconds
648
+ }
649
+
650
+ export interface ContextSnapshot {
651
+ promptTokens: number; // authoritative provider prompt/input tokens
652
+ nonMessageTokens: number; // estimated non-message total at send time
653
+ lastMessageTimestamp?: number;
654
+ }
655
+
656
+ export interface AssistantMessage {
657
+ role: "assistant";
658
+ content: (TextContent | ThinkingContent | RedactedThinkingContent | AnthropicFallbackContent | ToolCall)[];
659
+ api: Api;
660
+ provider: Provider;
661
+ model: string;
662
+ contextSnapshot?: ContextSnapshot;
663
+ responseId?: string; // Provider-specific response/message identifier when the upstream API exposes one
664
+ /**
665
+ * Name of the upstream provider an aggregator routed this request to, as
666
+ * reported in the response (e.g. OpenRouter's top-level `provider` field:
667
+ * `"OpenAI"`, `"Anthropic"`, `"Together"`). Distinct from `provider`, which
668
+ * is the configured gateway we called (`"openrouter"`). Undefined for direct
669
+ * providers that expose no such field.
670
+ */
671
+ upstreamProvider?: string;
672
+ usage: Usage;
673
+ stopReason: StopReason;
674
+ stopDetails?: StopDetails | null;
675
+ errorMessage?: string;
676
+ /** HTTP status surfaced by the provider when the request failed. Populated by every provider's catch block alongside `errorMessage` so consumers (auth retry, telemetry, UI) can branch without regex-scraping the message. */
677
+ errorStatus?: number;
678
+ /** Structured machine-readable error classifier; see `utils/error-id.ts` for bit layout and helpers. */
679
+ errorId?: number;
680
+ /**
681
+ * Stable identifiers for request features the provider silently dropped
682
+ * during this turn (e.g. `"priority"`). Set when a server-side rejection
683
+ * triggered an in-provider fallback retry that succeeded without the
684
+ * feature. Callers can use this to sync user-facing toggles back to the
685
+ * server's actual state.
686
+ */
687
+ disabledFeatures?: string[];
688
+ /** Provider-specific opaque payload used to reconstruct transport-native history. */
689
+ providerPayload?: ProviderPayload;
690
+ timestamp: number; // Unix timestamp in milliseconds
691
+ duration?: number; // Request duration in milliseconds
692
+ ttft?: number; // Time to first token in milliseconds
693
+ }
694
+
695
+ export interface ToolResultMessage<TDetails = unknown> {
696
+ role: "toolResult";
697
+ toolCallId: string;
698
+ toolName: string;
699
+ content: (TextContent | ImageContent)[]; // Supports text and images
700
+ details?: TDetails;
701
+ isError: boolean;
702
+ /** Who initiated this message for billing/attribution semantics. */
703
+ attribution?: MessageAttribution;
704
+ /** Timestamp when output was pruned (ms since epoch). Undefined if unpruned. */
705
+ prunedAt?: number;
706
+ /**
707
+ * Tool-declared: this result carried no information worth retaining once
708
+ * consumed (zero matches, elapsed wait). Compaction passes may elide it.
709
+ * Never set together with isError.
710
+ */
711
+ useless?: boolean;
712
+ timestamp: number; // Unix timestamp in milliseconds
713
+ }
714
+
715
+ export type Message = UserMessage | DeveloperMessage | AssistantMessage | ToolResultMessage;
716
+
717
+ export type CursorExecHandlerResult<T> = { result: T; toolResult?: ToolResultMessage } | T | ToolResultMessage;
718
+
719
+ export type CursorToolResultHandler = (
720
+ result: ToolResultMessage,
721
+ ) => ToolResultMessage | undefined | Promise<ToolResultMessage | undefined>;
722
+
723
+ export interface CursorMcpCall {
724
+ name: string;
725
+ providerIdentifier: string;
726
+ toolName: string;
727
+ toolCallId: string;
728
+ args: Record<string, unknown>;
729
+ rawArgs: Record<string, Uint8Array>;
730
+ }
731
+
732
+ export interface CursorShellStreamCallbacks {
733
+ onStdout(data: string): void;
734
+ onStderr(data: string): void;
735
+ }
736
+
737
+ export interface CursorExecHandlers {
738
+ read?: (args: ReadArgs) => Promise<CursorExecHandlerResult<ReadResult>>;
739
+ ls?: (args: LsArgs) => Promise<CursorExecHandlerResult<LsResult>>;
740
+ grep?: (args: GrepArgs) => Promise<CursorExecHandlerResult<GrepResult>>;
741
+ write?: (args: WriteArgs) => Promise<CursorExecHandlerResult<WriteResult>>;
742
+ delete?: (args: DeleteArgs) => Promise<CursorExecHandlerResult<DeleteResult>>;
743
+ shell?: (args: ShellArgs) => Promise<CursorExecHandlerResult<ShellResult>>;
744
+ shellStream?: (
745
+ args: ShellArgs,
746
+ callbacks: CursorShellStreamCallbacks,
747
+ ) => Promise<CursorExecHandlerResult<ShellResult>>;
748
+ diagnostics?: (args: DiagnosticsArgs) => Promise<CursorExecHandlerResult<DiagnosticsResult>>;
749
+ mcp?: (call: CursorMcpCall) => Promise<CursorExecHandlerResult<McpResult>>;
750
+ onToolResult?: CursorToolResultHandler;
751
+ }
752
+
753
+ /**
754
+ * Plain JSON Schema document used by extension-authored tools (legacy TypeBox
755
+ * emits this shape). Distinguished from arktype at runtime.
756
+ */
757
+ export type TJsonSchema = Record<string, unknown>;
758
+
759
+ /**
760
+ * Schema type accepted by the {@link Tool} interface.
761
+ *
762
+ * Canonical authoring uses Zod or ArkType. Extension compat may supply a JSON
763
+ * Schema object (including TypeBox static schema objects).
764
+ */
765
+ export type TSchema = ZodType | Type | TJsonSchema;
766
+
767
+ /** Resolve parameter types for tool execution / handlers. */
768
+ export type Static<S> = S extends ZodType
769
+ ? z.infer<S>
770
+ : S extends Type
771
+ ? S["infer"]
772
+ : S extends { static: infer T }
773
+ ? T
774
+ : unknown;
775
+
776
+ export interface ToolCallExample<TArgs = Record<string, unknown>> {
777
+ caption?: string;
778
+ call: TArgs;
779
+ }
780
+ export interface ToolCompareExample<TArgs = Record<string, unknown>> {
781
+ caption?: string;
782
+ bad: TArgs;
783
+ good: TArgs;
784
+ }
785
+ export interface ToolNoteExample {
786
+ caption: string;
787
+ note?: string;
788
+ }
789
+ export type ToolExample<TArgs = Record<string, unknown>> =
790
+ | ToolCallExample<TArgs>
791
+ | ToolCompareExample<TArgs>
792
+ | ToolNoteExample;
793
+
794
+ export interface Tool<TParameters extends TSchema = TSchema> {
795
+ name: string;
796
+ description: string;
797
+ parameters: TParameters;
798
+ /** If true, tool is strictly typed and validated against the parameters schema before execution */
799
+ strict?: boolean;
800
+ /**
801
+ * Optional grammar constraint for OpenAI custom-tool emission.
802
+ * When set, providers that support grammar-constrained tools (currently only
803
+ * `openai-responses` against models with the right capability flag) may emit
804
+ * this tool as `{type: "custom", format: {type: "grammar", …}}` instead of a
805
+ * JSON function tool. Other providers ignore the field.
806
+ */
807
+ customFormat?: { syntax: "lark" | "regex"; definition: string };
808
+ /**
809
+ * Optional wire-level name used when this tool is emitted as a custom tool
810
+ * (e.g. OpenAI's `{type: "custom"}` shape). Models trained on specific tool
811
+ * names — like GPT-5 on `apply_patch` — need to see that exact name on the
812
+ * wire, but it may differ from the harness-internal `name`. The agent-loop
813
+ * dispatcher matches both `name` and `customWireName` so returned tool
814
+ * calls route correctly. Absent for regular JSON function tools.
815
+ */
816
+ customWireName?: string;
817
+ /**
818
+ * Illustrative calls/notes; the AI layer renders them into an `<examples>`
819
+ * block in the model's native tool-call syntax and appends to the wire
820
+ * description. Author `call`/`bad`/`good` as plain argument objects WITHOUT
821
+ * `i` — when intent tracing injects `i` into the schema, the renderer adds
822
+ * a placeholder `i` automatically. Type each tool's `examples` against its
823
+ * own schema (e.g. `readonly ToolExample<typeof schema["type"]>[]`).
824
+ */
825
+ examples?: readonly ToolExample[];
826
+ }
827
+
828
+ export interface Context {
829
+ systemPrompt?: string[];
830
+ messages: Message[];
831
+ tools?: Tool[];
832
+ }
833
+
834
+ export type AssistantMessageEvent =
835
+ | { type: "start"; contentIndex?: undefined; partial: AssistantMessage }
836
+ | { type: "text_start"; contentIndex: number; partial: AssistantMessage }
837
+ | { type: "text_delta"; contentIndex: number; delta: string; partial: AssistantMessage }
838
+ | { type: "text_end"; contentIndex: number; content: string; partial: AssistantMessage }
839
+ | { type: "thinking_start"; contentIndex: number; partial: AssistantMessage }
840
+ | { type: "thinking_delta"; contentIndex: number; delta: string; partial: AssistantMessage }
841
+ | { type: "thinking_end"; contentIndex: number; content: string; partial: AssistantMessage }
842
+ | { type: "toolcall_start"; contentIndex: number; partial: AssistantMessage }
843
+ | { type: "toolcall_delta"; contentIndex: number; delta: string; partial: AssistantMessage }
844
+ | { type: "toolcall_end"; contentIndex: number; toolCall: ToolCall; partial: AssistantMessage }
845
+ | {
846
+ type: "done";
847
+ contentIndex?: undefined;
848
+ reason: Extract<StopReason, "stop" | "length" | "toolUse">;
849
+ message: AssistantMessage;
850
+ }
851
+ | {
852
+ type: "error";
853
+ contentIndex?: undefined;
854
+ reason: Extract<StopReason, "aborted" | "error">;
855
+ error: AssistantMessage;
856
+ };