@code-yeongyu/senpi-ai 2026.9.29 → 2026.9.30

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 (754) hide show
  1. package/dist/api/bedrock-converse-stream.js +4 -2
  2. package/dist/api/lazy.js +2 -1
  3. package/dist/api/openai-completions.js +13 -8
  4. package/dist/api/openai-responses-shared.js +4 -1
  5. package/dist/api/openai-responses.js +10 -7
  6. package/dist/models.js +6 -2
  7. package/dist/providers/data/.manifest.json +1 -1
  8. package/dist/providers/data/amazon-bedrock.json +1 -1
  9. package/dist/providers/data/azure-openai-responses.json +1 -1
  10. package/dist/providers/data/baseten.json +1 -1
  11. package/dist/providers/data/cerebras.json +1 -1
  12. package/dist/providers/data/chatgpt-subscription.json +1 -1
  13. package/dist/providers/data/github-copilot.json +1 -1
  14. package/dist/providers/data/openai.json +1 -1
  15. package/dist/providers/data/opencode.json +1 -1
  16. package/dist/providers/data/opengateway.json +1 -1
  17. package/dist/providers/data/openrouter.json +1 -1
  18. package/dist/providers/data/venice.json +1 -1
  19. package/dist/providers/data/vercel-ai-gateway.json +1 -1
  20. package/dist/utils/prompt-cache-ttl.js +33 -2
  21. package/dist/utils/provider-failure-description.d.ts +7 -0
  22. package/dist/utils/provider-failure-description.js +21 -0
  23. package/dist/utils/retry.js +9 -0
  24. package/dist/utils/tool-schema-compat.d.ts +2 -0
  25. package/dist/utils/tool-schema-compat.js +28 -9
  26. package/package.json +3 -2
  27. package/dist/api/anthropic-messages.d.ts.map +0 -1
  28. package/dist/api/anthropic-messages.js.map +0 -1
  29. package/dist/api/anthropic-messages.lazy.d.ts.map +0 -1
  30. package/dist/api/anthropic-messages.lazy.js.map +0 -1
  31. package/dist/api/anthropic-tool-pairs.d.ts.map +0 -1
  32. package/dist/api/anthropic-tool-pairs.js.map +0 -1
  33. package/dist/api/anthropic-tool-references.d.ts.map +0 -1
  34. package/dist/api/anthropic-tool-references.js.map +0 -1
  35. package/dist/api/azure-openai-responses.d.ts.map +0 -1
  36. package/dist/api/azure-openai-responses.js.map +0 -1
  37. package/dist/api/azure-openai-responses.lazy.d.ts.map +0 -1
  38. package/dist/api/azure-openai-responses.lazy.js.map +0 -1
  39. package/dist/api/bedrock-converse-stream.d.ts.map +0 -1
  40. package/dist/api/bedrock-converse-stream.js.map +0 -1
  41. package/dist/api/bedrock-converse-stream.lazy.d.ts.map +0 -1
  42. package/dist/api/bedrock-converse-stream.lazy.js.map +0 -1
  43. package/dist/api/cloudflare-ai-binding.d.ts.map +0 -1
  44. package/dist/api/cloudflare-ai-binding.js.map +0 -1
  45. package/dist/api/cloudflare.d.ts.map +0 -1
  46. package/dist/api/cloudflare.js.map +0 -1
  47. package/dist/api/constrained-sampling.d.ts.map +0 -1
  48. package/dist/api/constrained-sampling.js.map +0 -1
  49. package/dist/api/context-room.d.ts.map +0 -1
  50. package/dist/api/context-room.js.map +0 -1
  51. package/dist/api/cursor-agent/deterministic-id.d.ts.map +0 -1
  52. package/dist/api/cursor-agent/deterministic-id.js.map +0 -1
  53. package/dist/api/cursor-agent/exec-lifecycle.d.ts.map +0 -1
  54. package/dist/api/cursor-agent/exec-lifecycle.js.map +0 -1
  55. package/dist/api/cursor-agent/exec-modern.d.ts.map +0 -1
  56. package/dist/api/cursor-agent/exec-modern.js.map +0 -1
  57. package/dist/api/cursor-agent/gen/agent_pb.d.ts.map +0 -1
  58. package/dist/api/cursor-agent/gen/agent_pb.js.map +0 -1
  59. package/dist/api/cursor-agent/measure.d.ts.map +0 -1
  60. package/dist/api/cursor-agent/measure.js.map +0 -1
  61. package/dist/api/cursor-agent/pi-args.d.ts.map +0 -1
  62. package/dist/api/cursor-agent/pi-args.js.map +0 -1
  63. package/dist/api/cursor-agent/reasoning-params.d.ts.map +0 -1
  64. package/dist/api/cursor-agent/reasoning-params.js.map +0 -1
  65. package/dist/api/cursor-agent/stream-retry.d.ts.map +0 -1
  66. package/dist/api/cursor-agent/stream-retry.js.map +0 -1
  67. package/dist/api/cursor-agent/types.d.ts.map +0 -1
  68. package/dist/api/cursor-agent/types.js.map +0 -1
  69. package/dist/api/cursor-agent.d.ts.map +0 -1
  70. package/dist/api/cursor-agent.js.map +0 -1
  71. package/dist/api/cursor-agent.lazy.d.ts.map +0 -1
  72. package/dist/api/cursor-agent.lazy.js.map +0 -1
  73. package/dist/api/cursor-conversation-rotation.d.ts.map +0 -1
  74. package/dist/api/cursor-conversation-rotation.js.map +0 -1
  75. package/dist/api/cursor-task-args.d.ts.map +0 -1
  76. package/dist/api/cursor-task-args.js.map +0 -1
  77. package/dist/api/devin-agent/discovery.d.ts.map +0 -1
  78. package/dist/api/devin-agent/discovery.js.map +0 -1
  79. package/dist/api/devin-agent/frames.d.ts.map +0 -1
  80. package/dist/api/devin-agent/frames.js.map +0 -1
  81. package/dist/api/devin-agent/gen/cascade_pb.d.ts.map +0 -1
  82. package/dist/api/devin-agent/gen/cascade_pb.js.map +0 -1
  83. package/dist/api/devin-agent/metadata.d.ts.map +0 -1
  84. package/dist/api/devin-agent/metadata.js.map +0 -1
  85. package/dist/api/devin-agent/paths.d.ts.map +0 -1
  86. package/dist/api/devin-agent/paths.js.map +0 -1
  87. package/dist/api/devin-agent/request.d.ts.map +0 -1
  88. package/dist/api/devin-agent/request.js.map +0 -1
  89. package/dist/api/devin-agent/stream-state.d.ts.map +0 -1
  90. package/dist/api/devin-agent/stream-state.js.map +0 -1
  91. package/dist/api/devin-agent/trailer.d.ts.map +0 -1
  92. package/dist/api/devin-agent/trailer.js.map +0 -1
  93. package/dist/api/devin-agent/types.d.ts.map +0 -1
  94. package/dist/api/devin-agent/types.js.map +0 -1
  95. package/dist/api/devin-agent/unary.d.ts.map +0 -1
  96. package/dist/api/devin-agent/unary.js.map +0 -1
  97. package/dist/api/devin-agent/wire.d.ts.map +0 -1
  98. package/dist/api/devin-agent/wire.js.map +0 -1
  99. package/dist/api/devin-agent.d.ts.map +0 -1
  100. package/dist/api/devin-agent.js.map +0 -1
  101. package/dist/api/devin-agent.lazy.d.ts.map +0 -1
  102. package/dist/api/devin-agent.lazy.js.map +0 -1
  103. package/dist/api/github-copilot-endpoint.d.ts.map +0 -1
  104. package/dist/api/github-copilot-endpoint.js.map +0 -1
  105. package/dist/api/github-copilot-errors.d.ts.map +0 -1
  106. package/dist/api/github-copilot-errors.js.map +0 -1
  107. package/dist/api/github-copilot-headers.d.ts.map +0 -1
  108. package/dist/api/github-copilot-headers.js.map +0 -1
  109. package/dist/api/google-generative-ai.d.ts.map +0 -1
  110. package/dist/api/google-generative-ai.js.map +0 -1
  111. package/dist/api/google-generative-ai.lazy.d.ts.map +0 -1
  112. package/dist/api/google-generative-ai.lazy.js.map +0 -1
  113. package/dist/api/google-shared.d.ts.map +0 -1
  114. package/dist/api/google-shared.js.map +0 -1
  115. package/dist/api/google-vertex.d.ts.map +0 -1
  116. package/dist/api/google-vertex.js.map +0 -1
  117. package/dist/api/google-vertex.lazy.d.ts.map +0 -1
  118. package/dist/api/google-vertex.lazy.js.map +0 -1
  119. package/dist/api/lazy.d.ts.map +0 -1
  120. package/dist/api/lazy.js.map +0 -1
  121. package/dist/api/mistral-conversations.d.ts.map +0 -1
  122. package/dist/api/mistral-conversations.js.map +0 -1
  123. package/dist/api/mistral-conversations.lazy.d.ts.map +0 -1
  124. package/dist/api/mistral-conversations.lazy.js.map +0 -1
  125. package/dist/api/openai-client-auth.d.ts.map +0 -1
  126. package/dist/api/openai-client-auth.js.map +0 -1
  127. package/dist/api/openai-codex-responses/fallback-state.d.ts.map +0 -1
  128. package/dist/api/openai-codex-responses/fallback-state.js.map +0 -1
  129. package/dist/api/openai-codex-responses/reasoning.d.ts.map +0 -1
  130. package/dist/api/openai-codex-responses/reasoning.js.map +0 -1
  131. package/dist/api/openai-codex-responses.d.ts.map +0 -1
  132. package/dist/api/openai-codex-responses.js.map +0 -1
  133. package/dist/api/openai-codex-responses.lazy.d.ts.map +0 -1
  134. package/dist/api/openai-codex-responses.lazy.js.map +0 -1
  135. package/dist/api/openai-completions.d.ts.map +0 -1
  136. package/dist/api/openai-completions.js.map +0 -1
  137. package/dist/api/openai-completions.lazy.d.ts.map +0 -1
  138. package/dist/api/openai-completions.lazy.js.map +0 -1
  139. package/dist/api/openai-images-edit.d.ts.map +0 -1
  140. package/dist/api/openai-images-edit.js.map +0 -1
  141. package/dist/api/openai-images-params.d.ts.map +0 -1
  142. package/dist/api/openai-images-params.js.map +0 -1
  143. package/dist/api/openai-images-result.d.ts.map +0 -1
  144. package/dist/api/openai-images-result.js.map +0 -1
  145. package/dist/api/openai-images.d.ts.map +0 -1
  146. package/dist/api/openai-images.js.map +0 -1
  147. package/dist/api/openai-images.lazy.d.ts.map +0 -1
  148. package/dist/api/openai-images.lazy.js.map +0 -1
  149. package/dist/api/openai-prompt-cache.d.ts.map +0 -1
  150. package/dist/api/openai-prompt-cache.js.map +0 -1
  151. package/dist/api/openai-responses-prompt-cache.d.ts.map +0 -1
  152. package/dist/api/openai-responses-prompt-cache.js.map +0 -1
  153. package/dist/api/openai-responses-shared.d.ts.map +0 -1
  154. package/dist/api/openai-responses-shared.js.map +0 -1
  155. package/dist/api/openai-responses.d.ts.map +0 -1
  156. package/dist/api/openai-responses.js.map +0 -1
  157. package/dist/api/openai-responses.lazy.d.ts.map +0 -1
  158. package/dist/api/openai-responses.lazy.js.map +0 -1
  159. package/dist/api/openrouter-images.d.ts.map +0 -1
  160. package/dist/api/openrouter-images.js.map +0 -1
  161. package/dist/api/openrouter-images.lazy.d.ts.map +0 -1
  162. package/dist/api/openrouter-images.lazy.js.map +0 -1
  163. package/dist/api/pi-messages.d.ts.map +0 -1
  164. package/dist/api/pi-messages.js.map +0 -1
  165. package/dist/api/pi-messages.lazy.d.ts.map +0 -1
  166. package/dist/api/pi-messages.lazy.js.map +0 -1
  167. package/dist/api/prompt-cache-warmers.d.ts.map +0 -1
  168. package/dist/api/prompt-cache-warmers.js.map +0 -1
  169. package/dist/api/responses-completion-grace.d.ts.map +0 -1
  170. package/dist/api/responses-completion-grace.js.map +0 -1
  171. package/dist/api/simple-options.d.ts.map +0 -1
  172. package/dist/api/simple-options.js.map +0 -1
  173. package/dist/api/transform-messages.d.ts.map +0 -1
  174. package/dist/api/transform-messages.js.map +0 -1
  175. package/dist/api/warm-prompt-cache.d.ts.map +0 -1
  176. package/dist/api/warm-prompt-cache.js.map +0 -1
  177. package/dist/api/websocket-liveness.d.ts.map +0 -1
  178. package/dist/api/websocket-liveness.js.map +0 -1
  179. package/dist/api/websocket-transport-failure.d.ts.map +0 -1
  180. package/dist/api/websocket-transport-failure.js.map +0 -1
  181. package/dist/api-registry.d.ts.map +0 -1
  182. package/dist/api-registry.js.map +0 -1
  183. package/dist/auth/context.d.ts.map +0 -1
  184. package/dist/auth/context.js.map +0 -1
  185. package/dist/auth/credential-store.d.ts.map +0 -1
  186. package/dist/auth/credential-store.js.map +0 -1
  187. package/dist/auth/headers.d.ts.map +0 -1
  188. package/dist/auth/headers.js.map +0 -1
  189. package/dist/auth/helpers.d.ts.map +0 -1
  190. package/dist/auth/helpers.js.map +0 -1
  191. package/dist/auth/oauth/anthropic-callback-listener.d.ts.map +0 -1
  192. package/dist/auth/oauth/anthropic-callback-listener.js.map +0 -1
  193. package/dist/auth/oauth/anthropic.d.ts.map +0 -1
  194. package/dist/auth/oauth/anthropic.js.map +0 -1
  195. package/dist/auth/oauth/authorization-input.d.ts.map +0 -1
  196. package/dist/auth/oauth/authorization-input.js.map +0 -1
  197. package/dist/auth/oauth/chatgpt-subscription.d.ts.map +0 -1
  198. package/dist/auth/oauth/chatgpt-subscription.js.map +0 -1
  199. package/dist/auth/oauth/cursor.d.ts.map +0 -1
  200. package/dist/auth/oauth/cursor.js.map +0 -1
  201. package/dist/auth/oauth/device-code.d.ts.map +0 -1
  202. package/dist/auth/oauth/device-code.js.map +0 -1
  203. package/dist/auth/oauth/devin-callback.d.ts.map +0 -1
  204. package/dist/auth/oauth/devin-callback.js.map +0 -1
  205. package/dist/auth/oauth/devin-token.d.ts.map +0 -1
  206. package/dist/auth/oauth/devin-token.js.map +0 -1
  207. package/dist/auth/oauth/devin.d.ts.map +0 -1
  208. package/dist/auth/oauth/devin.js.map +0 -1
  209. package/dist/auth/oauth/error-details.d.ts.map +0 -1
  210. package/dist/auth/oauth/error-details.js.map +0 -1
  211. package/dist/auth/oauth/github-copilot-model-catalog.d.ts.map +0 -1
  212. package/dist/auth/oauth/github-copilot-model-catalog.js.map +0 -1
  213. package/dist/auth/oauth/github-copilot.d.ts.map +0 -1
  214. package/dist/auth/oauth/github-copilot.js.map +0 -1
  215. package/dist/auth/oauth/kimi-coding.d.ts.map +0 -1
  216. package/dist/auth/oauth/kimi-coding.js.map +0 -1
  217. package/dist/auth/oauth/kimi-identity.d.ts.map +0 -1
  218. package/dist/auth/oauth/kimi-identity.js.map +0 -1
  219. package/dist/auth/oauth/kimi-region.d.ts.map +0 -1
  220. package/dist/auth/oauth/kimi-region.js.map +0 -1
  221. package/dist/auth/oauth/load.d.ts.map +0 -1
  222. package/dist/auth/oauth/load.js.map +0 -1
  223. package/dist/auth/oauth/oauth-page.d.ts.map +0 -1
  224. package/dist/auth/oauth/oauth-page.js.map +0 -1
  225. package/dist/auth/oauth/openrouter.d.ts.map +0 -1
  226. package/dist/auth/oauth/openrouter.js.map +0 -1
  227. package/dist/auth/oauth/pkce.d.ts.map +0 -1
  228. package/dist/auth/oauth/pkce.js.map +0 -1
  229. package/dist/auth/oauth/radius.d.ts.map +0 -1
  230. package/dist/auth/oauth/radius.js.map +0 -1
  231. package/dist/auth/oauth/xai.d.ts.map +0 -1
  232. package/dist/auth/oauth/xai.js.map +0 -1
  233. package/dist/auth/oauth-refresh.d.ts.map +0 -1
  234. package/dist/auth/oauth-refresh.js.map +0 -1
  235. package/dist/auth/pool/classify.d.ts.map +0 -1
  236. package/dist/auth/pool/classify.js.map +0 -1
  237. package/dist/auth/pool/failover.d.ts.map +0 -1
  238. package/dist/auth/pool/failover.js.map +0 -1
  239. package/dist/auth/pool/select.d.ts.map +0 -1
  240. package/dist/auth/pool/select.js.map +0 -1
  241. package/dist/auth/pool/slots.d.ts.map +0 -1
  242. package/dist/auth/pool/slots.js.map +0 -1
  243. package/dist/auth/refresh-credential.d.ts.map +0 -1
  244. package/dist/auth/refresh-credential.js.map +0 -1
  245. package/dist/auth/resolve.d.ts.map +0 -1
  246. package/dist/auth/resolve.js.map +0 -1
  247. package/dist/auth/types.d.ts.map +0 -1
  248. package/dist/auth/types.js.map +0 -1
  249. package/dist/bedrock-provider.d.ts.map +0 -1
  250. package/dist/bedrock-provider.js.map +0 -1
  251. package/dist/bun-oauth.d.ts.map +0 -1
  252. package/dist/bun-oauth.js.map +0 -1
  253. package/dist/cli.d.ts.map +0 -1
  254. package/dist/cli.js.map +0 -1
  255. package/dist/compat/extension-oauth-types.d.ts.map +0 -1
  256. package/dist/compat/extension-oauth-types.js.map +0 -1
  257. package/dist/compat.d.ts.map +0 -1
  258. package/dist/compat.js.map +0 -1
  259. package/dist/context-provenance.d.ts.map +0 -1
  260. package/dist/context-provenance.js.map +0 -1
  261. package/dist/cursor/catalog-grouping.d.ts.map +0 -1
  262. package/dist/cursor/catalog-grouping.js.map +0 -1
  263. package/dist/cursor/composer-prompt.d.ts.map +0 -1
  264. package/dist/cursor/composer-prompt.js.map +0 -1
  265. package/dist/cursor/context-limit-store.d.ts.map +0 -1
  266. package/dist/cursor/context-limit-store.js.map +0 -1
  267. package/dist/cursor/model-capabilities.d.ts.map +0 -1
  268. package/dist/cursor/model-capabilities.js.map +0 -1
  269. package/dist/cursor/selection-descriptor.d.ts.map +0 -1
  270. package/dist/cursor/selection-descriptor.js.map +0 -1
  271. package/dist/cursor/store-migration.d.ts.map +0 -1
  272. package/dist/cursor/store-migration.js.map +0 -1
  273. package/dist/cursor-agent-provider.d.ts.map +0 -1
  274. package/dist/cursor-agent-provider.js.map +0 -1
  275. package/dist/devin-provider.d.ts.map +0 -1
  276. package/dist/devin-provider.js.map +0 -1
  277. package/dist/endpoint-reasoning-efforts.d.ts.map +0 -1
  278. package/dist/endpoint-reasoning-efforts.js.map +0 -1
  279. package/dist/env-api-keys.d.ts.map +0 -1
  280. package/dist/env-api-keys.js.map +0 -1
  281. package/dist/image-models.d.ts.map +0 -1
  282. package/dist/image-models.generated.d.ts.map +0 -1
  283. package/dist/image-models.generated.js.map +0 -1
  284. package/dist/image-models.js.map +0 -1
  285. package/dist/images-api-registry.d.ts.map +0 -1
  286. package/dist/images-api-registry.js.map +0 -1
  287. package/dist/images-models.d.ts.map +0 -1
  288. package/dist/images-models.js.map +0 -1
  289. package/dist/images.d.ts.map +0 -1
  290. package/dist/images.js.map +0 -1
  291. package/dist/index.d.ts.map +0 -1
  292. package/dist/index.js.map +0 -1
  293. package/dist/legacy-api-aliases.d.ts.map +0 -1
  294. package/dist/legacy-api-aliases.js.map +0 -1
  295. package/dist/legacy-provider-ids.d.ts.map +0 -1
  296. package/dist/legacy-provider-ids.js.map +0 -1
  297. package/dist/model-catalog.d.ts.map +0 -1
  298. package/dist/model-catalog.js.map +0 -1
  299. package/dist/model.d.ts.map +0 -1
  300. package/dist/model.js.map +0 -1
  301. package/dist/models-store.d.ts.map +0 -1
  302. package/dist/models-store.js.map +0 -1
  303. package/dist/models.d.ts.map +0 -1
  304. package/dist/models.generated.d.ts.map +0 -1
  305. package/dist/models.generated.js.map +0 -1
  306. package/dist/models.js.map +0 -1
  307. package/dist/node/provider-scope.d.ts.map +0 -1
  308. package/dist/node/provider-scope.js.map +0 -1
  309. package/dist/oauth.d.ts.map +0 -1
  310. package/dist/oauth.js.map +0 -1
  311. package/dist/openai-responses-compat.d.ts.map +0 -1
  312. package/dist/openai-responses-compat.js.map +0 -1
  313. package/dist/provider-diagnostic.d.ts.map +0 -1
  314. package/dist/provider-diagnostic.js.map +0 -1
  315. package/dist/providers/alibaba-token-plan.d.ts.map +0 -1
  316. package/dist/providers/alibaba-token-plan.js.map +0 -1
  317. package/dist/providers/alibaba-token-plan.models.d.ts.map +0 -1
  318. package/dist/providers/alibaba-token-plan.models.js.map +0 -1
  319. package/dist/providers/all.d.ts.map +0 -1
  320. package/dist/providers/all.js.map +0 -1
  321. package/dist/providers/amazon-bedrock.d.ts.map +0 -1
  322. package/dist/providers/amazon-bedrock.js.map +0 -1
  323. package/dist/providers/amazon-bedrock.models.d.ts.map +0 -1
  324. package/dist/providers/amazon-bedrock.models.js.map +0 -1
  325. package/dist/providers/ant-ling.d.ts.map +0 -1
  326. package/dist/providers/ant-ling.js.map +0 -1
  327. package/dist/providers/ant-ling.models.d.ts.map +0 -1
  328. package/dist/providers/ant-ling.models.js.map +0 -1
  329. package/dist/providers/anthropic.d.ts.map +0 -1
  330. package/dist/providers/anthropic.js.map +0 -1
  331. package/dist/providers/anthropic.models.d.ts.map +0 -1
  332. package/dist/providers/anthropic.models.js.map +0 -1
  333. package/dist/providers/azure-openai-responses.d.ts.map +0 -1
  334. package/dist/providers/azure-openai-responses.js.map +0 -1
  335. package/dist/providers/azure-openai-responses.models.d.ts.map +0 -1
  336. package/dist/providers/azure-openai-responses.models.js.map +0 -1
  337. package/dist/providers/bai-stream.d.ts.map +0 -1
  338. package/dist/providers/bai-stream.js.map +0 -1
  339. package/dist/providers/bai.d.ts.map +0 -1
  340. package/dist/providers/bai.js.map +0 -1
  341. package/dist/providers/bai.models.d.ts.map +0 -1
  342. package/dist/providers/bai.models.js.map +0 -1
  343. package/dist/providers/baseten.d.ts.map +0 -1
  344. package/dist/providers/baseten.js.map +0 -1
  345. package/dist/providers/baseten.models.d.ts.map +0 -1
  346. package/dist/providers/baseten.models.js.map +0 -1
  347. package/dist/providers/cerebras.d.ts.map +0 -1
  348. package/dist/providers/cerebras.js.map +0 -1
  349. package/dist/providers/cerebras.models.d.ts.map +0 -1
  350. package/dist/providers/cerebras.models.js.map +0 -1
  351. package/dist/providers/chatgpt-subscription.d.ts.map +0 -1
  352. package/dist/providers/chatgpt-subscription.js.map +0 -1
  353. package/dist/providers/chatgpt-subscription.models.d.ts.map +0 -1
  354. package/dist/providers/chatgpt-subscription.models.js.map +0 -1
  355. package/dist/providers/cloudflare-ai-gateway.d.ts.map +0 -1
  356. package/dist/providers/cloudflare-ai-gateway.js.map +0 -1
  357. package/dist/providers/cloudflare-ai-gateway.models.d.ts.map +0 -1
  358. package/dist/providers/cloudflare-ai-gateway.models.js.map +0 -1
  359. package/dist/providers/cloudflare-auth.d.ts.map +0 -1
  360. package/dist/providers/cloudflare-auth.js.map +0 -1
  361. package/dist/providers/cloudflare-stream.d.ts.map +0 -1
  362. package/dist/providers/cloudflare-stream.js.map +0 -1
  363. package/dist/providers/cloudflare-workers-ai.d.ts.map +0 -1
  364. package/dist/providers/cloudflare-workers-ai.js.map +0 -1
  365. package/dist/providers/cloudflare-workers-ai.models.d.ts.map +0 -1
  366. package/dist/providers/cloudflare-workers-ai.models.js.map +0 -1
  367. package/dist/providers/cursor.d.ts.map +0 -1
  368. package/dist/providers/cursor.js.map +0 -1
  369. package/dist/providers/deepseek.d.ts.map +0 -1
  370. package/dist/providers/deepseek.js.map +0 -1
  371. package/dist/providers/deepseek.models.d.ts.map +0 -1
  372. package/dist/providers/deepseek.models.js.map +0 -1
  373. package/dist/providers/devin.d.ts.map +0 -1
  374. package/dist/providers/devin.js.map +0 -1
  375. package/dist/providers/devin.models.d.ts.map +0 -1
  376. package/dist/providers/devin.models.js.map +0 -1
  377. package/dist/providers/faux.d.ts.map +0 -1
  378. package/dist/providers/faux.js.map +0 -1
  379. package/dist/providers/fireworks.d.ts.map +0 -1
  380. package/dist/providers/fireworks.js.map +0 -1
  381. package/dist/providers/fireworks.models.d.ts.map +0 -1
  382. package/dist/providers/fireworks.models.js.map +0 -1
  383. package/dist/providers/github-copilot-limits.d.ts.map +0 -1
  384. package/dist/providers/github-copilot-limits.js.map +0 -1
  385. package/dist/providers/github-copilot.d.ts.map +0 -1
  386. package/dist/providers/github-copilot.js.map +0 -1
  387. package/dist/providers/github-copilot.models.d.ts.map +0 -1
  388. package/dist/providers/github-copilot.models.js.map +0 -1
  389. package/dist/providers/google-shared.d.ts.map +0 -1
  390. package/dist/providers/google-shared.js.map +0 -1
  391. package/dist/providers/google-vertex.d.ts.map +0 -1
  392. package/dist/providers/google-vertex.js.map +0 -1
  393. package/dist/providers/google-vertex.models.d.ts.map +0 -1
  394. package/dist/providers/google-vertex.models.js.map +0 -1
  395. package/dist/providers/google.d.ts.map +0 -1
  396. package/dist/providers/google.js.map +0 -1
  397. package/dist/providers/google.models.d.ts.map +0 -1
  398. package/dist/providers/google.models.js.map +0 -1
  399. package/dist/providers/groq.d.ts.map +0 -1
  400. package/dist/providers/groq.js.map +0 -1
  401. package/dist/providers/groq.models.d.ts.map +0 -1
  402. package/dist/providers/groq.models.js.map +0 -1
  403. package/dist/providers/huggingface.d.ts.map +0 -1
  404. package/dist/providers/huggingface.js.map +0 -1
  405. package/dist/providers/huggingface.models.d.ts.map +0 -1
  406. package/dist/providers/huggingface.models.js.map +0 -1
  407. package/dist/providers/images/register-builtins.d.ts.map +0 -1
  408. package/dist/providers/images/register-builtins.js.map +0 -1
  409. package/dist/providers/kimi-coding-auth.d.ts.map +0 -1
  410. package/dist/providers/kimi-coding-auth.js.map +0 -1
  411. package/dist/providers/kimi-coding.d.ts.map +0 -1
  412. package/dist/providers/kimi-coding.js.map +0 -1
  413. package/dist/providers/kimi-coding.models.d.ts.map +0 -1
  414. package/dist/providers/kimi-coding.models.js.map +0 -1
  415. package/dist/providers/minimax-cn.d.ts.map +0 -1
  416. package/dist/providers/minimax-cn.js.map +0 -1
  417. package/dist/providers/minimax-cn.models.d.ts.map +0 -1
  418. package/dist/providers/minimax-cn.models.js.map +0 -1
  419. package/dist/providers/minimax.d.ts.map +0 -1
  420. package/dist/providers/minimax.js.map +0 -1
  421. package/dist/providers/minimax.models.d.ts.map +0 -1
  422. package/dist/providers/minimax.models.js.map +0 -1
  423. package/dist/providers/mistral.d.ts.map +0 -1
  424. package/dist/providers/mistral.js.map +0 -1
  425. package/dist/providers/mistral.models.d.ts.map +0 -1
  426. package/dist/providers/mistral.models.js.map +0 -1
  427. package/dist/providers/moonshotai-cn.d.ts.map +0 -1
  428. package/dist/providers/moonshotai-cn.js.map +0 -1
  429. package/dist/providers/moonshotai-cn.models.d.ts.map +0 -1
  430. package/dist/providers/moonshotai-cn.models.js.map +0 -1
  431. package/dist/providers/moonshotai.d.ts.map +0 -1
  432. package/dist/providers/moonshotai.js.map +0 -1
  433. package/dist/providers/moonshotai.models.d.ts.map +0 -1
  434. package/dist/providers/moonshotai.models.js.map +0 -1
  435. package/dist/providers/nvidia.d.ts.map +0 -1
  436. package/dist/providers/nvidia.js.map +0 -1
  437. package/dist/providers/nvidia.models.d.ts.map +0 -1
  438. package/dist/providers/nvidia.models.js.map +0 -1
  439. package/dist/providers/ollama.d.ts.map +0 -1
  440. package/dist/providers/ollama.js.map +0 -1
  441. package/dist/providers/openai-completions.d.ts.map +0 -1
  442. package/dist/providers/openai-completions.js.map +0 -1
  443. package/dist/providers/openai-images.d.ts.map +0 -1
  444. package/dist/providers/openai-images.js.map +0 -1
  445. package/dist/providers/openai-responses-shared.d.ts.map +0 -1
  446. package/dist/providers/openai-responses-shared.js.map +0 -1
  447. package/dist/providers/openai-responses.d.ts.map +0 -1
  448. package/dist/providers/openai-responses.js.map +0 -1
  449. package/dist/providers/openai.d.ts.map +0 -1
  450. package/dist/providers/openai.js.map +0 -1
  451. package/dist/providers/openai.models.d.ts.map +0 -1
  452. package/dist/providers/openai.models.js.map +0 -1
  453. package/dist/providers/opencode-go.d.ts.map +0 -1
  454. package/dist/providers/opencode-go.js.map +0 -1
  455. package/dist/providers/opencode-go.models.d.ts.map +0 -1
  456. package/dist/providers/opencode-go.models.js.map +0 -1
  457. package/dist/providers/opencode-headers.d.ts.map +0 -1
  458. package/dist/providers/opencode-headers.js.map +0 -1
  459. package/dist/providers/opencode.d.ts.map +0 -1
  460. package/dist/providers/opencode.js.map +0 -1
  461. package/dist/providers/opencode.models.d.ts.map +0 -1
  462. package/dist/providers/opencode.models.js.map +0 -1
  463. package/dist/providers/opengateway.d.ts.map +0 -1
  464. package/dist/providers/opengateway.js.map +0 -1
  465. package/dist/providers/opengateway.models.d.ts.map +0 -1
  466. package/dist/providers/opengateway.models.js.map +0 -1
  467. package/dist/providers/openrouter-images.d.ts.map +0 -1
  468. package/dist/providers/openrouter-images.js.map +0 -1
  469. package/dist/providers/openrouter.d.ts.map +0 -1
  470. package/dist/providers/openrouter.js.map +0 -1
  471. package/dist/providers/openrouter.models.d.ts.map +0 -1
  472. package/dist/providers/openrouter.models.js.map +0 -1
  473. package/dist/providers/qwen-token-plan-cn.d.ts.map +0 -1
  474. package/dist/providers/qwen-token-plan-cn.js.map +0 -1
  475. package/dist/providers/qwen-token-plan-cn.models.d.ts.map +0 -1
  476. package/dist/providers/qwen-token-plan-cn.models.js.map +0 -1
  477. package/dist/providers/qwen-token-plan-individual.d.ts.map +0 -1
  478. package/dist/providers/qwen-token-plan-individual.js.map +0 -1
  479. package/dist/providers/qwen-token-plan-individual.models.d.ts.map +0 -1
  480. package/dist/providers/qwen-token-plan-individual.models.js.map +0 -1
  481. package/dist/providers/qwen-token-plan.d.ts.map +0 -1
  482. package/dist/providers/qwen-token-plan.js.map +0 -1
  483. package/dist/providers/qwen-token-plan.models.d.ts.map +0 -1
  484. package/dist/providers/qwen-token-plan.models.js.map +0 -1
  485. package/dist/providers/radius-config.d.ts.map +0 -1
  486. package/dist/providers/radius-config.js.map +0 -1
  487. package/dist/providers/radius.d.ts.map +0 -1
  488. package/dist/providers/radius.js.map +0 -1
  489. package/dist/providers/register-builtins.d.ts.map +0 -1
  490. package/dist/providers/register-builtins.js.map +0 -1
  491. package/dist/providers/together.d.ts.map +0 -1
  492. package/dist/providers/together.js.map +0 -1
  493. package/dist/providers/together.models.d.ts.map +0 -1
  494. package/dist/providers/together.models.js.map +0 -1
  495. package/dist/providers/venice.d.ts.map +0 -1
  496. package/dist/providers/venice.js.map +0 -1
  497. package/dist/providers/venice.models.d.ts.map +0 -1
  498. package/dist/providers/venice.models.js.map +0 -1
  499. package/dist/providers/vercel-ai-gateway.d.ts.map +0 -1
  500. package/dist/providers/vercel-ai-gateway.js.map +0 -1
  501. package/dist/providers/vercel-ai-gateway.models.d.ts.map +0 -1
  502. package/dist/providers/vercel-ai-gateway.models.js.map +0 -1
  503. package/dist/providers/xai.d.ts.map +0 -1
  504. package/dist/providers/xai.js.map +0 -1
  505. package/dist/providers/xai.models.d.ts.map +0 -1
  506. package/dist/providers/xai.models.js.map +0 -1
  507. package/dist/providers/xiaomi-token-plan-ams.d.ts.map +0 -1
  508. package/dist/providers/xiaomi-token-plan-ams.js.map +0 -1
  509. package/dist/providers/xiaomi-token-plan-ams.models.d.ts.map +0 -1
  510. package/dist/providers/xiaomi-token-plan-ams.models.js.map +0 -1
  511. package/dist/providers/xiaomi-token-plan-cn.d.ts.map +0 -1
  512. package/dist/providers/xiaomi-token-plan-cn.js.map +0 -1
  513. package/dist/providers/xiaomi-token-plan-cn.models.d.ts.map +0 -1
  514. package/dist/providers/xiaomi-token-plan-cn.models.js.map +0 -1
  515. package/dist/providers/xiaomi-token-plan-sgp.d.ts.map +0 -1
  516. package/dist/providers/xiaomi-token-plan-sgp.js.map +0 -1
  517. package/dist/providers/xiaomi-token-plan-sgp.models.d.ts.map +0 -1
  518. package/dist/providers/xiaomi-token-plan-sgp.models.js.map +0 -1
  519. package/dist/providers/xiaomi.d.ts.map +0 -1
  520. package/dist/providers/xiaomi.js.map +0 -1
  521. package/dist/providers/xiaomi.models.d.ts.map +0 -1
  522. package/dist/providers/xiaomi.models.js.map +0 -1
  523. package/dist/providers/zai-coding-cn.d.ts.map +0 -1
  524. package/dist/providers/zai-coding-cn.js.map +0 -1
  525. package/dist/providers/zai-coding-cn.models.d.ts.map +0 -1
  526. package/dist/providers/zai-coding-cn.models.js.map +0 -1
  527. package/dist/providers/zai.d.ts.map +0 -1
  528. package/dist/providers/zai.js.map +0 -1
  529. package/dist/providers/zai.models.d.ts.map +0 -1
  530. package/dist/providers/zai.models.js.map +0 -1
  531. package/dist/session-resources.d.ts.map +0 -1
  532. package/dist/session-resources.js.map +0 -1
  533. package/dist/stream.d.ts.map +0 -1
  534. package/dist/stream.js.map +0 -1
  535. package/dist/tool-call-middleware/context-transformer.d.ts.map +0 -1
  536. package/dist/tool-call-middleware/context-transformer.js.map +0 -1
  537. package/dist/tool-call-middleware/index.d.ts.map +0 -1
  538. package/dist/tool-call-middleware/index.js.map +0 -1
  539. package/dist/tool-call-middleware/protocols/anthropic-xml/coerce-parameters.d.ts.map +0 -1
  540. package/dist/tool-call-middleware/protocols/anthropic-xml/coerce-parameters.js.map +0 -1
  541. package/dist/tool-call-middleware/protocols/anthropic-xml/format.d.ts.map +0 -1
  542. package/dist/tool-call-middleware/protocols/anthropic-xml/format.js.map +0 -1
  543. package/dist/tool-call-middleware/protocols/anthropic-xml/index.d.ts.map +0 -1
  544. package/dist/tool-call-middleware/protocols/anthropic-xml/index.js.map +0 -1
  545. package/dist/tool-call-middleware/protocols/anthropic-xml/invoke-match.d.ts.map +0 -1
  546. package/dist/tool-call-middleware/protocols/anthropic-xml/invoke-match.js.map +0 -1
  547. package/dist/tool-call-middleware/protocols/anthropic-xml/invoke-protocol.d.ts.map +0 -1
  548. package/dist/tool-call-middleware/protocols/anthropic-xml/invoke-protocol.js.map +0 -1
  549. package/dist/tool-call-middleware/protocols/anthropic-xml/invoke-stream-helpers.d.ts.map +0 -1
  550. package/dist/tool-call-middleware/protocols/anthropic-xml/invoke-stream-helpers.js.map +0 -1
  551. package/dist/tool-call-middleware/protocols/anthropic-xml/invoke-tag-scanner.d.ts.map +0 -1
  552. package/dist/tool-call-middleware/protocols/anthropic-xml/invoke-tag-scanner.js.map +0 -1
  553. package/dist/tool-call-middleware/protocols/anthropic-xml/invoke-tag-syntax.d.ts.map +0 -1
  554. package/dist/tool-call-middleware/protocols/anthropic-xml/invoke-tag-syntax.js.map +0 -1
  555. package/dist/tool-call-middleware/protocols/anthropic-xml/parse.d.ts.map +0 -1
  556. package/dist/tool-call-middleware/protocols/anthropic-xml/parse.js.map +0 -1
  557. package/dist/tool-call-middleware/protocols/anthropic-xml/recovery-stream.d.ts.map +0 -1
  558. package/dist/tool-call-middleware/protocols/anthropic-xml/recovery-stream.js.map +0 -1
  559. package/dist/tool-call-middleware/protocols/anthropic-xml/recovery-wrapper-state.d.ts.map +0 -1
  560. package/dist/tool-call-middleware/protocols/anthropic-xml/recovery-wrapper-state.js.map +0 -1
  561. package/dist/tool-call-middleware/protocols/anthropic-xml/stream-boundary.d.ts.map +0 -1
  562. package/dist/tool-call-middleware/protocols/anthropic-xml/stream-boundary.js.map +0 -1
  563. package/dist/tool-call-middleware/protocols/anthropic-xml/stream.d.ts.map +0 -1
  564. package/dist/tool-call-middleware/protocols/anthropic-xml/stream.js.map +0 -1
  565. package/dist/tool-call-middleware/protocols/anthropic-xml/tool-resolver.d.ts.map +0 -1
  566. package/dist/tool-call-middleware/protocols/anthropic-xml/tool-resolver.js.map +0 -1
  567. package/dist/tool-call-middleware/protocols/anthropic-xml/xml-entities.d.ts.map +0 -1
  568. package/dist/tool-call-middleware/protocols/anthropic-xml/xml-entities.js.map +0 -1
  569. package/dist/tool-call-middleware/protocols/antml/coerce-parameters.d.ts.map +0 -1
  570. package/dist/tool-call-middleware/protocols/antml/coerce-parameters.js.map +0 -1
  571. package/dist/tool-call-middleware/protocols/antml/config.d.ts.map +0 -1
  572. package/dist/tool-call-middleware/protocols/antml/config.js.map +0 -1
  573. package/dist/tool-call-middleware/protocols/antml/format.d.ts.map +0 -1
  574. package/dist/tool-call-middleware/protocols/antml/format.js.map +0 -1
  575. package/dist/tool-call-middleware/protocols/antml/index.d.ts.map +0 -1
  576. package/dist/tool-call-middleware/protocols/antml/index.js.map +0 -1
  577. package/dist/tool-call-middleware/protocols/antml/parse.d.ts.map +0 -1
  578. package/dist/tool-call-middleware/protocols/antml/parse.js.map +0 -1
  579. package/dist/tool-call-middleware/protocols/antml/recovery-stream.d.ts.map +0 -1
  580. package/dist/tool-call-middleware/protocols/antml/recovery-stream.js.map +0 -1
  581. package/dist/tool-call-middleware/protocols/antml/repair.d.ts.map +0 -1
  582. package/dist/tool-call-middleware/protocols/antml/repair.js.map +0 -1
  583. package/dist/tool-call-middleware/protocols/antml/stream.d.ts.map +0 -1
  584. package/dist/tool-call-middleware/protocols/antml/stream.js.map +0 -1
  585. package/dist/tool-call-middleware/protocols/gemma4.d.ts.map +0 -1
  586. package/dist/tool-call-middleware/protocols/gemma4.js.map +0 -1
  587. package/dist/tool-call-middleware/protocols/hermes.d.ts.map +0 -1
  588. package/dist/tool-call-middleware/protocols/hermes.js.map +0 -1
  589. package/dist/tool-call-middleware/protocols/json-mix.d.ts.map +0 -1
  590. package/dist/tool-call-middleware/protocols/json-mix.js.map +0 -1
  591. package/dist/tool-call-middleware/protocols/kimi-xtml/format.d.ts.map +0 -1
  592. package/dist/tool-call-middleware/protocols/kimi-xtml/format.js.map +0 -1
  593. package/dist/tool-call-middleware/protocols/kimi-xtml/index.d.ts.map +0 -1
  594. package/dist/tool-call-middleware/protocols/kimi-xtml/index.js.map +0 -1
  595. package/dist/tool-call-middleware/protocols/kimi-xtml/markers.d.ts.map +0 -1
  596. package/dist/tool-call-middleware/protocols/kimi-xtml/markers.js.map +0 -1
  597. package/dist/tool-call-middleware/protocols/kimi-xtml/parse.d.ts.map +0 -1
  598. package/dist/tool-call-middleware/protocols/kimi-xtml/parse.js.map +0 -1
  599. package/dist/tool-call-middleware/protocols/kimi-xtml/recovery-stream.d.ts.map +0 -1
  600. package/dist/tool-call-middleware/protocols/kimi-xtml/recovery-stream.js.map +0 -1
  601. package/dist/tool-call-middleware/protocols/kimi-xtml/stream.d.ts.map +0 -1
  602. package/dist/tool-call-middleware/protocols/kimi-xtml/stream.js.map +0 -1
  603. package/dist/tool-call-middleware/protocols/kimi-xtml/thinking-recovery-stream.d.ts.map +0 -1
  604. package/dist/tool-call-middleware/protocols/kimi-xtml/thinking-recovery-stream.js.map +0 -1
  605. package/dist/tool-call-middleware/protocols/kimi-xtml/thinking-recovery.d.ts.map +0 -1
  606. package/dist/tool-call-middleware/protocols/kimi-xtml/thinking-recovery.js.map +0 -1
  607. package/dist/tool-call-middleware/protocols/morph-xml.d.ts.map +0 -1
  608. package/dist/tool-call-middleware/protocols/morph-xml.js.map +0 -1
  609. package/dist/tool-call-middleware/protocols/xml-tool-tag-scanner.d.ts.map +0 -1
  610. package/dist/tool-call-middleware/protocols/xml-tool-tag-scanner.js.map +0 -1
  611. package/dist/tool-call-middleware/protocols/yaml-xml.d.ts.map +0 -1
  612. package/dist/tool-call-middleware/protocols/yaml-xml.js.map +0 -1
  613. package/dist/tool-call-middleware/recovery-code-mask.d.ts.map +0 -1
  614. package/dist/tool-call-middleware/recovery-code-mask.js.map +0 -1
  615. package/dist/tool-call-middleware/recovery-content-lifecycle.d.ts.map +0 -1
  616. package/dist/tool-call-middleware/recovery-content-lifecycle.js.map +0 -1
  617. package/dist/tool-call-middleware/recovery-diagnostics.d.ts.map +0 -1
  618. package/dist/tool-call-middleware/recovery-diagnostics.js.map +0 -1
  619. package/dist/tool-call-middleware/recovery-event-stream.d.ts.map +0 -1
  620. package/dist/tool-call-middleware/recovery-event-stream.js.map +0 -1
  621. package/dist/tool-call-middleware/recovery-message-snapshot.d.ts.map +0 -1
  622. package/dist/tool-call-middleware/recovery-message-snapshot.js.map +0 -1
  623. package/dist/tool-call-middleware/recovery-native-projection.d.ts.map +0 -1
  624. package/dist/tool-call-middleware/recovery-native-projection.js.map +0 -1
  625. package/dist/tool-call-middleware/recovery-stream-failure.d.ts.map +0 -1
  626. package/dist/tool-call-middleware/recovery-stream-failure.js.map +0 -1
  627. package/dist/tool-call-middleware/recovery-stream-terminal.d.ts.map +0 -1
  628. package/dist/tool-call-middleware/recovery-stream-terminal.js.map +0 -1
  629. package/dist/tool-call-middleware/recovery-stream-wrapper.d.ts.map +0 -1
  630. package/dist/tool-call-middleware/recovery-stream-wrapper.js.map +0 -1
  631. package/dist/tool-call-middleware/recovery-text-projection.d.ts.map +0 -1
  632. package/dist/tool-call-middleware/recovery-text-projection.js.map +0 -1
  633. package/dist/tool-call-middleware/stream-message-metadata.d.ts.map +0 -1
  634. package/dist/tool-call-middleware/stream-message-metadata.js.map +0 -1
  635. package/dist/tool-call-middleware/stream-thinking-projection.d.ts.map +0 -1
  636. package/dist/tool-call-middleware/stream-thinking-projection.js.map +0 -1
  637. package/dist/tool-call-middleware/stream-wrapper-shared.d.ts.map +0 -1
  638. package/dist/tool-call-middleware/stream-wrapper-shared.js.map +0 -1
  639. package/dist/tool-call-middleware/stream-wrapper.d.ts.map +0 -1
  640. package/dist/tool-call-middleware/stream-wrapper.js.map +0 -1
  641. package/dist/tool-call-middleware/types.d.ts.map +0 -1
  642. package/dist/tool-call-middleware/types.js.map +0 -1
  643. package/dist/types.d.ts.map +0 -1
  644. package/dist/types.js.map +0 -1
  645. package/dist/utils/abort-signals.d.ts.map +0 -1
  646. package/dist/utils/abort-signals.js.map +0 -1
  647. package/dist/utils/abort.d.ts.map +0 -1
  648. package/dist/utils/abort.js.map +0 -1
  649. package/dist/utils/assistant-message-frame.d.ts.map +0 -1
  650. package/dist/utils/assistant-message-frame.js.map +0 -1
  651. package/dist/utils/block-symbols.d.ts.map +0 -1
  652. package/dist/utils/block-symbols.js.map +0 -1
  653. package/dist/utils/chatgpt-subscription-auth.d.ts.map +0 -1
  654. package/dist/utils/chatgpt-subscription-auth.js.map +0 -1
  655. package/dist/utils/claude-code-version-cache.d.ts.map +0 -1
  656. package/dist/utils/claude-code-version-cache.js.map +0 -1
  657. package/dist/utils/claude-code-version.d.ts.map +0 -1
  658. package/dist/utils/claude-code-version.js.map +0 -1
  659. package/dist/utils/cursor-context-limit.d.ts.map +0 -1
  660. package/dist/utils/cursor-context-limit.js.map +0 -1
  661. package/dist/utils/deferred-tools.d.ts.map +0 -1
  662. package/dist/utils/deferred-tools.js.map +0 -1
  663. package/dist/utils/diagnostics.d.ts.map +0 -1
  664. package/dist/utils/diagnostics.js.map +0 -1
  665. package/dist/utils/drop-failed-assistant-turns.d.ts.map +0 -1
  666. package/dist/utils/drop-failed-assistant-turns.js.map +0 -1
  667. package/dist/utils/empty-response-errors.d.ts.map +0 -1
  668. package/dist/utils/empty-response-errors.js.map +0 -1
  669. package/dist/utils/error-body.d.ts.map +0 -1
  670. package/dist/utils/error-body.js.map +0 -1
  671. package/dist/utils/estimate.d.ts.map +0 -1
  672. package/dist/utils/estimate.js.map +0 -1
  673. package/dist/utils/event-stream.d.ts.map +0 -1
  674. package/dist/utils/event-stream.js.map +0 -1
  675. package/dist/utils/github-copilot-tool-limit.d.ts.map +0 -1
  676. package/dist/utils/github-copilot-tool-limit.js.map +0 -1
  677. package/dist/utils/hash.d.ts.map +0 -1
  678. package/dist/utils/hash.js.map +0 -1
  679. package/dist/utils/headers.d.ts.map +0 -1
  680. package/dist/utils/headers.js.map +0 -1
  681. package/dist/utils/json-parse.d.ts.map +0 -1
  682. package/dist/utils/json-parse.js.map +0 -1
  683. package/dist/utils/node-http-proxy.d.ts.map +0 -1
  684. package/dist/utils/node-http-proxy.js.map +0 -1
  685. package/dist/utils/overflow.d.ts.map +0 -1
  686. package/dist/utils/overflow.js.map +0 -1
  687. package/dist/utils/pi-user-agent.d.ts.map +0 -1
  688. package/dist/utils/pi-user-agent.js.map +0 -1
  689. package/dist/utils/process-singleton.d.ts.map +0 -1
  690. package/dist/utils/process-singleton.js.map +0 -1
  691. package/dist/utils/prompt-cache-ttl.d.ts.map +0 -1
  692. package/dist/utils/prompt-cache-ttl.js.map +0 -1
  693. package/dist/utils/provider-diagnostic-carrier.d.ts.map +0 -1
  694. package/dist/utils/provider-diagnostic-carrier.js.map +0 -1
  695. package/dist/utils/provider-diagnostic-sources.d.ts.map +0 -1
  696. package/dist/utils/provider-diagnostic-sources.js.map +0 -1
  697. package/dist/utils/provider-diagnostic-vocabulary.d.ts.map +0 -1
  698. package/dist/utils/provider-diagnostic-vocabulary.js.map +0 -1
  699. package/dist/utils/provider-env.d.ts.map +0 -1
  700. package/dist/utils/provider-env.js.map +0 -1
  701. package/dist/utils/provider-failure-description.d.ts.map +0 -1
  702. package/dist/utils/provider-failure-description.js.map +0 -1
  703. package/dist/utils/provider-retry.d.ts.map +0 -1
  704. package/dist/utils/provider-retry.js.map +0 -1
  705. package/dist/utils/retry-hint.d.ts.map +0 -1
  706. package/dist/utils/retry-hint.js.map +0 -1
  707. package/dist/utils/retry-profile/backoff.d.ts.map +0 -1
  708. package/dist/utils/retry-profile/backoff.js.map +0 -1
  709. package/dist/utils/retry-profile/classifiers.d.ts.map +0 -1
  710. package/dist/utils/retry-profile/classifiers.js.map +0 -1
  711. package/dist/utils/retry-profile/failure.d.ts.map +0 -1
  712. package/dist/utils/retry-profile/failure.js.map +0 -1
  713. package/dist/utils/retry-profile/index.d.ts.map +0 -1
  714. package/dist/utils/retry-profile/index.js.map +0 -1
  715. package/dist/utils/retry-profile/planner.d.ts.map +0 -1
  716. package/dist/utils/retry-profile/planner.js.map +0 -1
  717. package/dist/utils/retry-profile/profiles.d.ts.map +0 -1
  718. package/dist/utils/retry-profile/profiles.js.map +0 -1
  719. package/dist/utils/retry-profile/types.d.ts.map +0 -1
  720. package/dist/utils/retry-profile/types.js.map +0 -1
  721. package/dist/utils/retry.d.ts.map +0 -1
  722. package/dist/utils/retry.js.map +0 -1
  723. package/dist/utils/sanitize-unicode.d.ts.map +0 -1
  724. package/dist/utils/sanitize-unicode.js.map +0 -1
  725. package/dist/utils/server-fallback-receipt.d.ts.map +0 -1
  726. package/dist/utils/server-fallback-receipt.js.map +0 -1
  727. package/dist/utils/sleep.d.ts.map +0 -1
  728. package/dist/utils/sleep.js.map +0 -1
  729. package/dist/utils/stop-details.d.ts.map +0 -1
  730. package/dist/utils/stop-details.js.map +0 -1
  731. package/dist/utils/text.d.ts.map +0 -1
  732. package/dist/utils/text.js.map +0 -1
  733. package/dist/utils/tool-call-id.d.ts.map +0 -1
  734. package/dist/utils/tool-call-id.js.map +0 -1
  735. package/dist/utils/tool-choice-fallback.d.ts.map +0 -1
  736. package/dist/utils/tool-choice-fallback.js.map +0 -1
  737. package/dist/utils/tool-name-match.d.ts.map +0 -1
  738. package/dist/utils/tool-name-match.js.map +0 -1
  739. package/dist/utils/tool-pair-repair.d.ts.map +0 -1
  740. package/dist/utils/tool-pair-repair.js.map +0 -1
  741. package/dist/utils/tool-schema-compat.d.ts.map +0 -1
  742. package/dist/utils/tool-schema-compat.js.map +0 -1
  743. package/dist/utils/typebox-helpers.d.ts.map +0 -1
  744. package/dist/utils/typebox-helpers.js.map +0 -1
  745. package/dist/utils/unavailable-tool-text.d.ts.map +0 -1
  746. package/dist/utils/unavailable-tool-text.js.map +0 -1
  747. package/dist/utils/uuid.d.ts.map +0 -1
  748. package/dist/utils/uuid.js.map +0 -1
  749. package/dist/utils/validation.d.ts.map +0 -1
  750. package/dist/utils/validation.js.map +0 -1
  751. package/dist/utils/visible-text.d.ts.map +0 -1
  752. package/dist/utils/visible-text.js.map +0 -1
  753. package/dist/wire-identity.d.ts.map +0 -1
  754. package/dist/wire-identity.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"stream-wrapper-shared.js","sourceRoot":"","sources":["../../src/tool-call-middleware/stream-wrapper-shared.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AssistantMessage, AssistantMessageEventStream, TextContent, ToolCall } from \"../types.ts\";\nimport type { AssistantMessageDiagnostic } from \"../utils/diagnostics.ts\";\nimport { parseStreamingJson } from \"../utils/json-parse.ts\";\nimport { cloneAssistantMessageMetadata, syncAssistantMessageMetadata } from \"./stream-message-metadata.ts\";\nimport { StreamThinkingProjection } from \"./stream-thinking-projection.ts\";\nimport type { StreamParserEvent } from \"./types.ts\";\n\ntype PartialToolCall = ToolCall & { partialJson: string };\n\nexport type ParserProjectionResult = {\n\treadonly sawToolCall: boolean;\n\treadonly completedToolCalls: readonly ToolCall[];\n};\n\ntype StreamMessageProjectionOptions = { readonly preserveSourceMetadata?: boolean };\n\nfunction isPartialToolCall(block: AssistantMessage[\"content\"][number] | undefined): block is PartialToolCall {\n\treturn block?.type === \"toolCall\" && \"partialJson\" in block && typeof block.partialJson === \"string\";\n}\n\nfunction assertNever(value: never): never {\n\tthrow new Error(`Unexpected parser event: ${JSON.stringify(value)}`);\n}\n\n/** Projects parser events into the canonical outer assistant stream. */\nexport class StreamMessageProjection {\n\treadonly message: AssistantMessage;\n\tprivate readonly stream: AssistantMessageEventStream;\n\tprivate currentInnerTextIndex: number | null = null;\n\tprivate readonly textBlockIndexByInnerIndex = new Map<number, number | null>();\n\tprivate readonly lastTextBlockIndexByInnerIndex = new Map<number, number>();\n\tprivate readonly toolCallIndexByParserIndex = new Map<number, number>();\n\tprivate readonly projectedDiagnostics: AssistantMessageDiagnostic[] = [];\n\tprivate readonly thinking: StreamThinkingProjection;\n\tprivate readonly preserveSourceMetadata: boolean;\n\tprivate source: AssistantMessage;\n\n\tconstructor(\n\t\tstream: AssistantMessageEventStream,\n\t\tsource: AssistantMessage,\n\t\toptions: StreamMessageProjectionOptions = {},\n\t) {\n\t\tthis.stream = stream;\n\t\tthis.source = source;\n\t\tthis.preserveSourceMetadata = options.preserveSourceMetadata === true;\n\t\tthis.message = cloneAssistantMessageMetadata(source, [], this.projectedDiagnostics, this.preserveSourceMetadata);\n\t\tthis.thinking = new StreamThinkingProjection(stream, this.message, this.preserveSourceMetadata);\n\t}\n\n\tsync(source: AssistantMessage): void {\n\t\tthis.source = source;\n\t\tsyncAssistantMessageMetadata(this.message, source, this.projectedDiagnostics, this.preserveSourceMetadata);\n\t}\n\n\tappendDiagnostic(diagnostic: AssistantMessageDiagnostic): void {\n\t\tthis.projectedDiagnostics.push(diagnostic);\n\t\tsyncAssistantMessageMetadata(this.message, this.source, this.projectedDiagnostics, this.preserveSourceMetadata);\n\t}\n\n\tstartText(contentIndex: number, sourceBlock?: AssistantMessage[\"content\"][number]): number {\n\t\tthis.currentInnerTextIndex = contentIndex;\n\t\tconst outerIndex = this.message.content.length;\n\t\tif (this.preserveSourceMetadata) {\n\t\t\tconst block: TextContent =\n\t\t\t\tsourceBlock?.type === \"text\" ? { ...sourceBlock, text: \"\" } : { type: \"text\", text: \"\" };\n\t\t\tthis.message.content.push(block);\n\t\t\tthis.textBlockIndexByInnerIndex.set(contentIndex, outerIndex);\n\t\t\tthis.lastTextBlockIndexByInnerIndex.set(contentIndex, outerIndex);\n\t\t} else {\n\t\t\tthis.textBlockIndexByInnerIndex.set(contentIndex, null);\n\t\t}\n\t\tthis.stream.push({ type: \"text_start\", contentIndex: outerIndex, partial: this.message });\n\t\treturn outerIndex;\n\t}\n\n\tstartThinking(contentIndex: number, source: AssistantMessage): number {\n\t\treturn this.thinking.start(contentIndex, source);\n\t}\n\n\tprojectThinkingDelta(contentIndex: number, delta: string, source: AssistantMessage): void {\n\t\tthis.thinking.delta(contentIndex, delta, source);\n\t}\n\n\tfinishThinking(contentIndex: number, content: string, source: AssistantMessage): void {\n\t\tthis.thinking.end(contentIndex, content, source);\n\t}\n\n\tprojectParserEvents(events: readonly StreamParserEvent[]): ParserProjectionResult {\n\t\tlet sawToolCall = false;\n\t\tconst completedToolCalls: ToolCall[] = [];\n\t\tfor (const event of events) {\n\t\t\tswitch (event.type) {\n\t\t\t\tcase \"text\":\n\t\t\t\t\tthis.pushText(event.text);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"toolcall_start\":\n\t\t\t\t\tsawToolCall = true;\n\t\t\t\t\tthis.startToolCall(event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"toolcall_delta\":\n\t\t\t\t\tsawToolCall = true;\n\t\t\t\t\tthis.updateToolCall(event.index, event.argumentsDelta);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"toolcall_end\": {\n\t\t\t\t\tsawToolCall = true;\n\t\t\t\t\tconst completed = this.endToolCall(event);\n\t\t\t\t\tif (completed) completedToolCalls.push(completed);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tdefault:\n\t\t\t\t\tassertNever(event);\n\t\t\t}\n\t\t}\n\t\treturn { sawToolCall, completedToolCalls };\n\t}\n\n\tfinishText(): void {\n\t\tconst outerContentIndex =\n\t\t\tthis.currentInnerTextIndex == null\n\t\t\t\t? null\n\t\t\t\t: (this.textBlockIndexByInnerIndex.get(this.currentInnerTextIndex) ??\n\t\t\t\t\t(this.preserveSourceMetadata\n\t\t\t\t\t\t? this.lastTextBlockIndexByInnerIndex.get(this.currentInnerTextIndex)\n\t\t\t\t\t\t: null) ??\n\t\t\t\t\tnull);\n\t\tif (outerContentIndex != null) {\n\t\t\tconst block = this.message.content[outerContentIndex];\n\t\t\tif (block?.type === \"text\") {\n\t\t\t\tthis.stream.push({\n\t\t\t\t\ttype: \"text_end\",\n\t\t\t\t\tcontentIndex: outerContentIndex,\n\t\t\t\t\tcontent: block.text,\n\t\t\t\t\tpartial: this.message,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\tthis.currentInnerTextIndex = null;\n\t}\n\n\tfinalizeDanglingToolCalls(): void {\n\t\tfor (const [contentIndex, block] of this.message.content.entries()) {\n\t\t\tif (!isPartialToolCall(block)) continue;\n\t\t\tconst finalToolCall: ToolCall = {\n\t\t\t\ttype: \"toolCall\",\n\t\t\t\tid: block.id,\n\t\t\t\tname: block.name,\n\t\t\t\targuments: block.arguments,\n\t\t\t\tincomplete: true,\n\t\t\t\terrorMessage: \"Tool call stream ended before completion\",\n\t\t\t};\n\t\t\tthis.message.content[contentIndex] = finalToolCall;\n\t\t\tfor (const [parserIndex, mappedContentIndex] of this.toolCallIndexByParserIndex) {\n\t\t\t\tif (mappedContentIndex === contentIndex) this.toolCallIndexByParserIndex.delete(parserIndex);\n\t\t\t}\n\t\t\tthis.stream.push({ type: \"toolcall_end\", contentIndex, toolCall: finalToolCall, partial: this.message });\n\t\t}\n\t}\n\n\tfinalize(doneMessage: AssistantMessage, sawToolCall: boolean): AssistantMessage {\n\t\tconst finalMessage = cloneAssistantMessageMetadata(\n\t\t\tdoneMessage,\n\t\t\tthis.message.content,\n\t\t\tthis.projectedDiagnostics,\n\t\t\tthis.preserveSourceMetadata,\n\t\t);\n\t\tif (\n\t\t\t(sawToolCall || this.hasFinalizedToolCallContent()) &&\n\t\t\t(finalMessage.stopReason === \"stop\" || finalMessage.stopReason === \"length\")\n\t\t) {\n\t\t\tfinalMessage.stopReason = \"toolUse\";\n\t\t}\n\t\treturn finalMessage;\n\t}\n\n\thasFinalizedToolCallContent(): boolean {\n\t\treturn this.message.content.some((block) => block.type === \"toolCall\" && !isPartialToolCall(block));\n\t}\n\n\tprivate pushText(text: string): void {\n\t\tif (this.currentInnerTextIndex == null) return;\n\t\tlet contentIndex = this.textBlockIndexByInnerIndex.get(this.currentInnerTextIndex) ?? null;\n\t\tif (contentIndex == null) {\n\t\t\tcontentIndex = this.message.content.length;\n\t\t\tthis.message.content.push({ type: \"text\", text });\n\t\t\tthis.textBlockIndexByInnerIndex.set(this.currentInnerTextIndex, contentIndex);\n\t\t\tthis.lastTextBlockIndexByInnerIndex.set(this.currentInnerTextIndex, contentIndex);\n\t\t} else {\n\t\t\tconst block = this.message.content[contentIndex];\n\t\t\tif (block?.type !== \"text\") return;\n\t\t\tblock.text += text;\n\t\t}\n\t\tthis.stream.push({ type: \"text_delta\", contentIndex, delta: text, partial: this.message });\n\t}\n\n\tprivate startToolCall(event: Extract<StreamParserEvent, { type: \"toolcall_start\" }>): void {\n\t\tif (this.currentInnerTextIndex != null) {\n\t\t\tconst textIndex = this.textBlockIndexByInnerIndex.get(this.currentInnerTextIndex);\n\t\t\tconst block = textIndex == null ? undefined : this.message.content[textIndex];\n\t\t\tif (\n\t\t\t\ttextIndex === this.message.content.length - 1 &&\n\t\t\t\tblock?.type === \"text\" &&\n\t\t\t\tblock.text.length === 0 &&\n\t\t\t\tblock.textSignature === undefined\n\t\t\t) {\n\t\t\t\tthis.message.content.pop();\n\t\t\t}\n\t\t}\n\t\tconst contentIndex = this.message.content.length;\n\t\tconst toolCall: PartialToolCall = {\n\t\t\ttype: \"toolCall\",\n\t\t\tid: event.id,\n\t\t\tname: event.name,\n\t\t\targuments: {},\n\t\t\tpartialJson: \"\",\n\t\t};\n\t\tthis.message.content.push(toolCall);\n\t\tthis.toolCallIndexByParserIndex.set(event.index, contentIndex);\n\t\tif (this.currentInnerTextIndex != null) this.textBlockIndexByInnerIndex.set(this.currentInnerTextIndex, null);\n\t\tthis.stream.push({ type: \"toolcall_start\", contentIndex, partial: this.message });\n\t}\n\n\tprivate updateToolCall(parserIndex: number, delta: string): void {\n\t\tconst contentIndex = this.toolCallIndexByParserIndex.get(parserIndex);\n\t\tif (contentIndex == null) return;\n\t\tconst block = this.message.content[contentIndex];\n\t\tif (!isPartialToolCall(block)) return;\n\t\tblock.partialJson += delta;\n\t\tblock.arguments = parseStreamingJson<Record<string, unknown>>(block.partialJson);\n\t\tthis.stream.push({ type: \"toolcall_delta\", contentIndex, delta, partial: this.message });\n\t}\n\n\tprivate endToolCall(event: Extract<StreamParserEvent, { type: \"toolcall_end\" }>): ToolCall | undefined {\n\t\tconst contentIndex = this.toolCallIndexByParserIndex.get(event.index);\n\t\tif (contentIndex == null) return undefined;\n\t\tconst finalToolCall: ToolCall = {\n\t\t\ttype: \"toolCall\",\n\t\t\tid: event.id,\n\t\t\tname: event.name,\n\t\t\targuments: event.arguments,\n\t\t\t...(event.incomplete === true ? { incomplete: true } : {}),\n\t\t\t...(event.errorMessage === undefined ? {} : { errorMessage: event.errorMessage }),\n\t\t};\n\t\tthis.message.content[contentIndex] = finalToolCall;\n\t\tthis.toolCallIndexByParserIndex.delete(event.index);\n\t\tthis.stream.push({ type: \"toolcall_end\", contentIndex, toolCall: finalToolCall, partial: this.message });\n\t\treturn finalToolCall;\n\t}\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"stream-wrapper.d.ts","sourceRoot":"","sources":["../../src/tool-call-middleware/stream-wrapper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAoB,2BAA2B,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAGvF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD,wBAAgB,gCAAgC,CAC/C,WAAW,EAAE,2BAA2B,EACxC,QAAQ,EAAE,gBAAgB,EAC1B,KAAK,EAAE,IAAI,EAAE,GACX,2BAA2B,CAkH7B"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"stream-wrapper.js","sourceRoot":"","sources":["../../src/tool-call-middleware/stream-wrapper.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AssistantMessage, AssistantMessageEventStream, Tool } from \"../types.ts\";\nimport { AssistantMessageEventStream as AssistantMessageEventStreamImpl } from \"../utils/event-stream.ts\";\nimport { StreamMessageProjection } from \"./stream-wrapper-shared.ts\";\nimport type { ToolCallProtocol } from \"./types.ts\";\n\nexport function wrapStreamWithToolCallMiddleware(\n\tinnerStream: AssistantMessageEventStream,\n\tprotocol: ToolCallProtocol,\n\ttools: Tool[],\n): AssistantMessageEventStream {\n\tconst outerStream = new AssistantMessageEventStreamImpl();\n\tconst parser = protocol.createStreamParser(tools);\n\n\tvoid (async (): Promise<void> => {\n\t\tlet projection: StreamMessageProjection | null = null;\n\t\tlet sawToolCall = false;\n\t\tlet parserHasPendingInput = false;\n\n\t\tconst flushParser = (): void => {\n\t\t\tif (!projection || !parserHasPendingInput) return;\n\t\t\tconst result = projection.projectParserEvents(parser.finish());\n\t\t\tsawToolCall = sawToolCall || result.sawToolCall;\n\t\t\tprojection.finishText();\n\t\t\tparserHasPendingInput = false;\n\t\t};\n\n\t\ttry {\n\t\t\tfor await (const event of innerStream) {\n\t\t\t\tswitch (event.type) {\n\t\t\t\t\tcase \"start\":\n\t\t\t\t\t\tprojection = new StreamMessageProjection(outerStream, event.partial);\n\t\t\t\t\t\touterStream.push({ type: \"start\", partial: projection.message });\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"text_start\":\n\t\t\t\t\t\tif (!projection) break;\n\t\t\t\t\t\tprojection.sync(event.partial);\n\t\t\t\t\t\tprojection.startText(event.contentIndex, event.partial.content[event.contentIndex]);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"text_delta\": {\n\t\t\t\t\t\tif (!projection) break;\n\t\t\t\t\t\tprojection.sync(event.partial);\n\t\t\t\t\t\tif (event.delta.length > 0) parserHasPendingInput = true;\n\t\t\t\t\t\tconst result = projection.projectParserEvents(parser.feed(event.delta));\n\t\t\t\t\t\tsawToolCall = sawToolCall || result.sawToolCall;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"text_end\":\n\t\t\t\t\t\tif (!projection) break;\n\t\t\t\t\t\tprojection.sync(event.partial);\n\t\t\t\t\t\tflushParser();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"thinking_start\":\n\t\t\t\t\t\tif (!projection) break;\n\t\t\t\t\t\tprojection.sync(event.partial);\n\t\t\t\t\t\tprojection.startThinking(event.contentIndex, event.partial);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"thinking_delta\":\n\t\t\t\t\t\tif (!projection) break;\n\t\t\t\t\t\tprojection.sync(event.partial);\n\t\t\t\t\t\tprojection.projectThinkingDelta(event.contentIndex, event.delta, event.partial);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"thinking_end\":\n\t\t\t\t\t\tif (!projection) break;\n\t\t\t\t\t\tprojection.sync(event.partial);\n\t\t\t\t\t\tprojection.finishThinking(event.contentIndex, event.content, event.partial);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"done\": {\n\t\t\t\t\t\tprojection ??= new StreamMessageProjection(outerStream, event.message);\n\t\t\t\t\t\tflushParser();\n\t\t\t\t\t\tprojection.finalizeDanglingToolCalls();\n\t\t\t\t\t\tconst message = projection.finalize(event.message, sawToolCall);\n\t\t\t\t\t\tconst recovered = sawToolCall || projection.hasFinalizedToolCallContent();\n\t\t\t\t\t\tconst reason =\n\t\t\t\t\t\t\trecovered && (event.reason === \"stop\" || event.reason === \"length\") ? \"toolUse\" : event.reason;\n\t\t\t\t\t\touterStream.push({ type: \"done\", reason, message });\n\t\t\t\t\t\touterStream.end();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"error\": {\n\t\t\t\t\t\tif (!projection) {\n\t\t\t\t\t\t\touterStream.push(event);\n\t\t\t\t\t\t\touterStream.end(event.error);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tprojection.sync(event.error);\n\t\t\t\t\t\tflushParser();\n\t\t\t\t\t\tprojection.finalizeDanglingToolCalls();\n\t\t\t\t\t\tconst message = projection.finalize(event.error, sawToolCall);\n\t\t\t\t\t\tif (projection.hasFinalizedToolCallContent()) {\n\t\t\t\t\t\t\tconst recovered: AssistantMessage = { ...message, stopReason: \"toolUse\" };\n\t\t\t\t\t\t\touterStream.push({ type: \"done\", reason: \"toolUse\", message: recovered });\n\t\t\t\t\t\t\touterStream.end(recovered);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\touterStream.push({ type: \"error\", reason: event.reason, error: message });\n\t\t\t\t\t\touterStream.end(message);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"toolcall_start\":\n\t\t\t\t\tcase \"toolcall_delta\":\n\t\t\t\t\tcase \"toolcall_end\":\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst innerMessage = await innerStream.result();\n\t\t\tprojection ??= new StreamMessageProjection(outerStream, innerMessage);\n\t\t\tflushParser();\n\t\t\tprojection.finalizeDanglingToolCalls();\n\t\t\touterStream.end(projection.finalize(innerMessage, sawToolCall));\n\t\t} catch (error) {\n\t\t\tflushParser();\n\t\t\tprojection ??= new StreamMessageProjection(outerStream, await innerStream.result());\n\t\t\tprojection.finalizeDanglingToolCalls();\n\t\t\tconst fallback = projection.message;\n\t\t\tfallback.stopReason = \"error\";\n\t\t\tfallback.errorMessage = error instanceof Error ? error.message : JSON.stringify(error);\n\t\t\touterStream.push({ type: \"error\", reason: \"error\", error: fallback });\n\t\t\touterStream.end();\n\t\t}\n\t})();\n\n\treturn outerStream;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/tool-call-middleware/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAEnE;;;;;;;;;;GAUG;AACH,MAAM,MAAM,cAAc,GACvB,QAAQ,GACR,KAAK,GACL,WAAW,GACX,UAAU,GACV,kBAAkB,GAClB,eAAe,GACf,OAAO,GACP,WAAW,CAAC;AAEf;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,WAAW,GAAG,YAAY,CAAC;AAE3D,MAAM,WAAW,aAAa;IAC7B,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;CACxE;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAC1B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GACnE;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,GACjE;IACA,IAAI,EAAE,cAAc,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,UAAU,CAAC,EAAE,IAAI,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEL;;GAEG;AACH,MAAM,WAAW,YAAY;IAC5B;;;;OAIG;IACH,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,iBAAiB,EAAE,CAAC;IAE7C;;;OAGG;IACH,MAAM,IAAI,iBAAiB,EAAE,CAAC;CAC9B;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAChC;;;;OAIG;IACH,uBAAuB,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;IAE/C;;;;;;OAMG;IACH,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,EAAE,GAAG,MAAM,CAAC;IAE/F;;;;;OAKG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC;IAEpE;;;;;OAKG;IACH,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,cAAc,EAAE,CAAC;IAE3F;;;;OAIG;IACH,kBAAkB,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,YAAY,CAAC;CACzE"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/tool-call-middleware/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { ImageContent, TextContent, Tool } from \"../types.ts\";\n\n/**\n * Supported tool call formats for models that don't natively support tool calling.\n * - \"hermes\": Hermes 2/3 format with special delimiters\n * - \"morph-xml\": XML-based tool call format\n * - \"xml\": Deprecated alias for \"morph-xml\"\n * - \"yaml-xml\": YAML arguments inside XML tool tags\n * - \"gemma4-delimiter\": Gemma 4 specific delimiter format\n * - \"anthropic-xml\": Legacy Anthropic invoke/parameter XML format\n * - \"antml\": ANTML function_calls/invoke format with Claude-Code-style failure tolerance\n * - \"kimi-xtml\": Kimi K3 XTML channel format (<|open|>/<|close|>/<|sep|> markers)\n */\nexport type ToolCallFormat =\n\t| \"hermes\"\n\t| \"xml\"\n\t| \"morph-xml\"\n\t| \"yaml-xml\"\n\t| \"gemma4-delimiter\"\n\t| \"anthropic-xml\"\n\t| \"antml\"\n\t| \"kimi-xtml\";\n\n/**\n * Content type for tool results (text or image)\n */\nexport type ToolResultContent = TextContent | ImageContent;\n\nexport interface ParserOptions {\n\temitRawToolCallTextOnError?: boolean;\n\tonError?: (message: string, metadata?: Record<string, unknown>) => void;\n}\n\n/**\n * A parsed tool call extracted from generated text\n */\nexport interface ParsedToolCall {\n\tname: string;\n\targuments: Record<string, unknown>;\n}\n\n/**\n * Events emitted by the stream parser during text processing.\n * Maps 1:1 to AssistantMessageEventStream events for seamless integration.\n */\nexport type StreamParserEvent =\n\t| { type: \"text\"; text: string }\n\t| { type: \"toolcall_start\"; index: number; name: string; id: string }\n\t| { type: \"toolcall_delta\"; index: number; argumentsDelta: string }\n\t| {\n\t\t\ttype: \"toolcall_end\";\n\t\t\tindex: number;\n\t\t\tname: string;\n\t\t\tid: string;\n\t\t\targuments: Record<string, unknown>;\n\t\t\tincomplete?: true;\n\t\t\terrorMessage?: string;\n\t };\n\n/**\n * Stream parser for incremental tool call parsing during streaming.\n */\nexport interface StreamParser {\n\t/**\n\t * Feed a text delta into the parser and receive any events generated.\n\t * @param textDelta - The next chunk of text to parse\n\t * @returns Array of parser events (text or tool call events)\n\t */\n\tfeed(textDelta: string): StreamParserEvent[];\n\n\t/**\n\t * Signal that the stream has ended and receive any final events.\n\t * @returns Array of final parser events\n\t */\n\tfinish(): StreamParserEvent[];\n}\n\n/**\n * Protocol interface for formatting and parsing tool calls in different formats.\n * Implementations handle the specifics of each tool call format (Hermes, XML, etc.)\n */\nexport interface ToolCallProtocol {\n\t/**\n\t * Format tools into a system prompt that instructs the model how to use tools.\n\t * @param tools - Array of available tools\n\t * @returns Formatted system prompt string\n\t */\n\tformatToolsSystemPrompt(tools: Tool[]): string;\n\n\t/**\n\t * Format a tool response for inclusion in the conversation context.\n\t * @param toolName - Name of the tool that was called\n\t * @param toolCallId - Unique identifier for this tool call\n\t * @param content - Array of content blocks (text or images) representing the result\n\t * @returns Formatted tool response string\n\t */\n\tformatToolResponse(toolName: string, toolCallId: string, content: ToolResultContent[]): string;\n\n\t/**\n\t * Format a tool call for sending to the model.\n\t * @param name - Name of the tool to call\n\t * @param args - Arguments for the tool call\n\t * @returns Formatted tool call string\n\t */\n\tformatToolCall(name: string, args: Record<string, unknown>): string;\n\n\t/**\n\t * Parse generated text to extract tool calls.\n\t * @param text - The generated text to parse\n\t * @param tools - Available tools for validation\n\t * @returns Array of parsed tool calls\n\t */\n\tparseGeneratedText(text: string, tools: Tool[], options?: ParserOptions): ParsedToolCall[];\n\n\t/**\n\t * Create a stream parser for incremental parsing during streaming.\n\t * @param tools - Available tools for the parser to recognize\n\t * @returns A new StreamParser instance\n\t */\n\tcreateStreamParser(tools: Tool[], options?: ParserOptions): StreamParser;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAsdA,sFAAsF;AACtF,MAAM,UAAU,eAAe,CAAC,QAAgB;IAC/C,OAAO,QAAQ,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AACpD,CAAC","sourcesContent":["import type { TelemetryContext } from \"@earendil-works/pi-telemetry\";\nimport type { AnthropicOptions } from \"./api/anthropic-messages.ts\";\nimport type { AzureOpenAIResponsesOptions } from \"./api/azure-openai-responses.ts\";\nimport type { BedrockOptions } from \"./api/bedrock-converse-stream.ts\";\nimport type { CursorAgentOptions } from \"./api/cursor-agent/types.ts\";\nimport type { DevinAgentOptions } from \"./api/devin-agent/types.ts\";\nimport type { GoogleOptions } from \"./api/google-generative-ai.ts\";\nimport type { GoogleVertexOptions } from \"./api/google-vertex.ts\";\nimport type { MistralOptions } from \"./api/mistral-conversations.ts\";\nimport type { OpenAICodexResponsesOptions } from \"./api/openai-codex-responses.ts\";\nimport type { OpenAICompletionsOptions } from \"./api/openai-completions.ts\";\nimport type { OpenAIResponsesOptions } from \"./api/openai-responses.ts\";\nimport type { PiMessagesOptions } from \"./api/pi-messages.ts\";\nimport type { Model } from \"./model.ts\";\nimport type {\n\tOpenAIResponsesCompat as BaseOpenAIResponsesCompat,\n\tSessionAffinityFormat,\n} from \"./openai-responses-compat.ts\";\nimport type { ProviderDiagnostic } from \"./provider-diagnostic.ts\";\nimport type { AssistantMessageDiagnostic } from \"./utils/diagnostics.ts\";\nimport type { AssistantMessageEventStream } from \"./utils/event-stream.ts\";\n\nexport type { Model } from \"./model.ts\";\nexport type { SessionAffinityFormat } from \"./openai-responses-compat.ts\";\nexport type OpenAIResponsesCompat = BaseOpenAIResponsesCompat & {\n\t/** Whether the model supports message-anchored `additional_tools` input items. Default: false. */\n\tsupportsAdditionalTools?: boolean;\n};\nexport type { AssistantMessageEventStream } from \"./utils/event-stream.ts\";\n\nexport type KnownApi =\n\t| \"openai-completions\"\n\t| \"mistral-conversations\"\n\t| \"openai-responses\"\n\t| \"azure-openai-responses\"\n\t| \"openai-codex-responses\"\n\t| \"cursor-agent\"\n\t| \"devin-agent\"\n\t| \"anthropic-messages\"\n\t| \"bedrock-converse-stream\"\n\t| \"google-generative-ai\"\n\t| \"google-vertex\"\n\t| \"pi-messages\";\n\nexport type Api = KnownApi | (string & {});\n\nexport type KnownImagesApi = \"openrouter-images\" | \"openai-images\";\n\nexport type ImagesApi = KnownImagesApi | (string & {});\n\nexport type KnownProvider =\n\t| \"alibaba-token-plan\"\n\t| \"amazon-bedrock\"\n\t| \"ant-ling\"\n\t| \"anthropic\"\n\t| \"google\"\n\t| \"google-vertex\"\n\t| \"openai\"\n\t| \"azure-openai-responses\"\n\t| \"bai\"\n\t// \"openai-codex\" is a legacy id for \"chatgpt-subscription\" (see legacy-provider-ids.ts);\n\t// the union keeps it so persisted refs still typecheck.\n\t| \"openai-codex\"\n\t| \"chatgpt-subscription\"\n\t| \"ollama\"\n\t| \"cursor\"\n\t| \"radius\"\n\t| \"nvidia\"\n\t| \"deepseek\"\n\t| \"github-copilot\"\n\t| \"xai\"\n\t| \"groq\"\n\t| \"cerebras\"\n\t| \"openrouter\"\n\t| \"vercel-ai-gateway\"\n\t| \"opengateway\"\n\t| \"zai\"\n\t| \"zai-coding-cn\"\n\t| \"mistral\"\n\t| \"minimax\"\n\t| \"minimax-cn\"\n\t| \"moonshotai\"\n\t| \"moonshotai-cn\"\n\t| \"huggingface\"\n\t| \"fireworks\"\n\t| \"together\"\n\t| \"baseten\"\n\t| \"opencode\"\n\t| \"opencode-go\"\n\t| \"kimi-coding\"\n\t| \"cloudflare-workers-ai\"\n\t| \"cloudflare-ai-gateway\"\n\t| \"qwen-token-plan\"\n\t| \"qwen-token-plan-cn\"\n\t| \"qwen-token-plan-individual\"\n\t| \"xiaomi\"\n\t| \"xiaomi-token-plan-cn\"\n\t| \"xiaomi-token-plan-ams\"\n\t| \"xiaomi-token-plan-sgp\"\n\t| \"venice\";\nexport type ProviderId = KnownProvider | string;\n\nexport type KnownImagesProvider = \"openai\" | \"openrouter\";\n\nexport type ImagesProviderId = KnownImagesProvider | string;\n\nexport type ToolChoice = \"auto\" | \"none\";\nexport type ThinkingLevel = \"minimal\" | \"low\" | \"medium\" | \"high\" | \"xhigh\" | \"max\";\nexport type ModelThinkingLevel = \"off\" | ThinkingLevel;\n\n/**\n * Provenance-bearing thinking selection. Distinct from the always-materialized\n * effective level: a selection exists only when the user (or a legacy variant\n * alias) explicitly chose a level. See .omo/plans/cursor-reasoning-levels.md §4.1.\n */\nexport interface ThinkingSelection {\n\treadonly level: ModelThinkingLevel;\n\treadonly source: \"explicit\" | \"legacy-variant\";\n\t/** Required when source is \"legacy-variant\": the exact allowlisted original variant id. */\n\treadonly legacyVariantId?: string;\n}\nexport type ThinkingLevelMap = Partial<Record<ModelThinkingLevel, string | null>>;\nexport type ChatTemplateKwargValue =\n\t| string\n\t| number\n\t| boolean\n\t| null\n\t| {\n\t\t\t$var: \"thinking.enabled\" | \"thinking.effort\" | \"thinking.budget\";\n\t\t\tomitWhenOff?: boolean;\n\t };\n\n/** Top-level request field used to cap reasoning tokens on OpenAI-compatible servers. */\nexport type ThinkingTokenBudgetField = \"thinking_token_budget\" | \"thinking_budget\" | \"thinking_budget_tokens\";\n\n/** Token budgets for each thinking level (token-based providers only) */\nexport interface ThinkingBudgets {\n\tminimal?: number;\n\tlow?: number;\n\tmedium?: number;\n\thigh?: number;\n\tmax?: number;\n}\n\n// Base options all providers share\nexport type CacheRetention = \"none\" | \"short\" | \"long\";\n\nexport type Transport = \"sse\" | \"websocket\" | \"websocket-cached\" | \"auto\";\n\n/** Provider-scoped environment overrides. Values take precedence over process.env. */\nexport type ProviderEnv = Record<string, string>;\nexport type ProviderHeaders = Record<string, string | null>;\n/** Effective model and fully transformed headers for a request payload hook. */\nexport type ProviderRequestMetadata = {\n\tmodel: Model<Api>;\n\theaders: ProviderHeaders;\n};\nexport type FetchFunction = typeof globalThis.fetch;\n\nexport interface ProviderResponse {\n\tstatus: number;\n\theaders: Record<string, string>;\n}\n\n/** Authentication, HTTP transport, and lifecycle callbacks shared by provider requests. */\nexport interface ProviderRequestOptions<TModel = Model<Api>> {\n\tsignal?: AbortSignal;\n\t/**\n\t * Abort the request when the provider reports that a safety classifier\n\t * declined the requested model and a substitute model served the turn\n\t * instead (Anthropic `server-side-fallback-*` betas). The substitute's output\n\t * is billed but was never requested, so aborting keeps model selection with\n\t * the caller. Providers without server-side fallback ignore this.\n\t * Default: undefined (honor the substituted response).\n\t */\n\tabortServerSideFallback?: boolean;\n\t/** Explicit parent context for telemetry produced by this logical request. */\n\ttelemetryContext?: TelemetryContext;\n\tapiKey?: string;\n\t/**\n\t * Stable identity of the originating session for account-affinity providers,\n\t * preserved across auxiliary calls that replace `sessionId` (for example\n\t * compaction). Providers without account affinity ignore this.\n\t */\n\taffinitySessionId?: string;\n\t/**\n\t * Identifies whether the stream belongs to the main agent loop or an auxiliary request.\n\t * An absent value must be treated as auxiliary as a fail-safe.\n\t */\n\tstreamKind?: \"main\" | \"auxiliary\";\n\t/**\n\t * Optional fetch implementation for provider HTTP requests.\n\t * Defaults to `globalThis.fetch`. Provider adapters that cannot inject a custom implementation may reject it.\n\t * This does not affect WebSocket transports.\n\t */\n\tfetch?: FetchFunction;\n\t/**\n\t * Provider-scoped environment values. These take precedence over process.env for\n\t * provider configuration such as regional settings, endpoint placeholders, and\n\t * proxy variables.\n\t */\n\tenv?: ProviderEnv;\n\t/**\n\t * Optional callback for inspecting or replacing provider payloads before sending.\n\t * Return undefined to keep the payload unchanged.\n\t */\n\tonPayload?: (\n\t\tpayload: unknown,\n\t\tmodel: TModel,\n\t\trequest?: ProviderRequestMetadata,\n\t) => unknown | undefined | Promise<unknown | undefined>;\n\t/**\n\t * Optional callback invoked after an HTTP response is received.\n\t */\n\tonResponse?: (response: ProviderResponse, model: TModel) => void | Promise<void>;\n\t/**\n\t * Optional custom HTTP headers to include in API requests.\n\t * Merged with provider defaults; caller values override default headers.\n\t * On AWS Bedrock these are injected via a Smithy `build`-step middleware so\n\t * they are covered by SigV4 signing; reserved headers (`x-amz-*`,\n\t * `authorization`, `host`) are silently ignored to preserve SigV4 / bearer auth.\n\t * A null value suppresses a provider/API default header with the same name.\n\t */\n\theaders?: ProviderHeaders;\n\t/**\n\t * HTTP request timeout in milliseconds for providers/SDKs that support it.\n\t * For example, OpenAI and Anthropic SDK clients default to 10 minutes.\n\t */\n\ttimeoutMs?: number;\n\t/**\n\t * Maximum retry attempts for providers/SDKs that support client-side retries.\n\t * For example, OpenAI and Anthropic SDK clients default to 2.\n\t */\n\tmaxRetries?: number;\n\t/**\n\t * Maximum delay in milliseconds to wait for a retry when the server requests a long wait.\n\t * If the server's requested delay exceeds this value, the request fails immediately\n\t * with an error containing the requested delay, allowing higher-level retry logic\n\t * to handle it with user visibility.\n\t * Default: 60000 (60 seconds). Set to 0 to disable the cap.\n\t */\n\tmaxRetryDelayMs?: number;\n}\n\nexport interface StreamOptions extends ProviderRequestOptions<Model<Api>> {\n\ttemperature?: number;\n\t/**\n\t * Arbitrary sampling parameters merged into the request body as-is, after the named request\n\t * fields, so keys here override them. Lets custom OpenAI-compatible servers (llama.cpp, vLLM,\n\t * SGLang, ...) receive parameters pi does not model, e.g. `top_p`, `top_k`, `min_p`,\n\t * `repetition_penalty`. Merged over `Model.samplingParams` per key. Only applied by\n\t * OpenAI-compatible adapters (completions, responses, Azure responses); other APIs ignore it.\n\t */\n\tsamplingParams?: Record<string, unknown>;\n\tmaxTokens?: number;\n\t/**\n\t * Preferred transport for providers that support multiple transports.\n\t * Providers that do not support this option ignore it.\n\t */\n\ttransport?: Transport;\n\t/**\n\t * Prompt cache retention preference. Providers map this to their supported values.\n\t * Default: \"short\".\n\t */\n\tcacheRetention?: CacheRetention;\n\t/**\n\t * Optional session identifier for providers that support session-based caching.\n\t * Providers can use this to enable prompt caching, request routing, or other\n\t * session-aware features. Ignored by providers that don't support it.\n\t */\n\tsessionId?: string;\n\t/**\n\t * Optional custom fields to merge into the outgoing provider request body.\n\t * Applied before `onPayload` so `onPayload` can observe/override them.\n\t * Provider-managed fields (e.g. `model`, `messages`, `stream`) are preserved\n\t * and cannot be overridden to avoid breaking core request semantics.\n\t */\n\textraBody?: Record<string, unknown>;\n\t/**\n\t * WebSocket connect timeout in milliseconds for providers that support\n\t * WebSocket transports. This covers the connection/open handshake only;\n\t * stream idleness after connection uses timeoutMs.\n\t */\n\twebsocketConnectTimeoutMs?: number;\n\t/**\n\t * Optional metadata to include in API requests.\n\t * Providers extract the fields they understand and ignore the rest.\n\t * For example, Anthropic uses `user_id` for abuse tracking and rate limiting.\n\t */\n\tmetadata?: Record<string, unknown>;\n}\n\nexport type ProviderStreamOptions = StreamOptions & Record<string, unknown>;\n\nexport interface DeferredFetchOptions extends ProviderRequestOptions<Model<Api>> {\n\t/**\n\t * Maximum provider long-poll duration in milliseconds.\n\t * Defaults to 0, which performs one status check.\n\t */\n\twait?: number;\n}\n\n/** Request options for best-effort deferred-response cancellation. */\nexport type DeferredCancelOptions = ProviderRequestOptions<Model<Api>>;\n\n/**\n * Maps known APIs to their full provider-specific stream option types.\n * Type-only imports from API implementation modules are erased at emit, so\n * this is tree-shake safe.\n */\nexport interface ApiOptionsMap {\n\t\"anthropic-messages\": AnthropicOptions;\n\t\"openai-completions\": OpenAICompletionsOptions;\n\t\"openai-responses\": OpenAIResponsesOptions;\n\t\"openai-codex-responses\": OpenAICodexResponsesOptions;\n\t\"cursor-agent\": CursorAgentOptions;\n\t\"devin-agent\": DevinAgentOptions;\n\t\"azure-openai-responses\": AzureOpenAIResponsesOptions;\n\t\"google-generative-ai\": GoogleOptions;\n\t\"google-vertex\": GoogleVertexOptions;\n\t\"mistral-conversations\": MistralOptions;\n\t\"bedrock-converse-stream\": BedrockOptions;\n\t\"pi-messages\": PiMessagesOptions;\n}\n\n/**\n * Full stream options for an API. Known APIs resolve to their concrete option\n * type; custom API strings fall back to the generic shape.\n */\nexport type ApiStreamOptions<TApi extends Api> = TApi extends keyof ApiOptionsMap\n\t? ApiOptionsMap[TApi]\n\t: StreamOptions & Record<string, unknown>;\n\n/**\n * The uniform stream contract of an API implementation module: every module\n * under `src/api/` exports `stream` and `streamSimple`; capable modules may also\n * export deferred-response methods. Lazy wrappers (`lazyApi()`) and provider\n * factories pass these around as values. This is the untyped dispatch shape;\n * per-API option typing lives on the implementation modules themselves and on\n * `Provider.stream()` via `ApiStreamOptions`.\n */\nexport interface ProviderStreams {\n\tstream(model: Model<Api>, context: Context, options?: StreamOptions): AssistantMessageEventStream;\n\tstreamSimple(model: Model<Api>, context: Context, options?: SimpleStreamOptions): AssistantMessageEventStream;\n\tfetchDeferred?(\n\t\tmodel: Model<Api>,\n\t\thandle: DeferredHandle,\n\t\toptions?: DeferredFetchOptions,\n\t): AssistantMessageEventStream;\n\tcancelDeferred?(model: Model<Api>, handle: DeferredHandle, options?: DeferredCancelOptions): Promise<void>;\n}\n\n/**\n * The uniform contract of an image-generation API implementation module:\n * every image API module under `src/api/` exports exactly `generateImages`,\n * so the module itself satisfies this interface. Lazy wrappers and image\n * provider factories pass these around as values.\n */\nexport interface ProviderImages {\n\tgenerateImages(\n\t\tmodel: ImagesModel<ImagesApi>,\n\t\tcontext: ImagesContext,\n\t\toptions?: ImagesOptions,\n\t): Promise<AssistantImages>;\n}\n\nexport interface ImagesOptions extends ProviderRequestOptions<ImagesModel<ImagesApi>> {\n\t/**\n\t * Optional metadata to include in API requests.\n\t * Providers extract the fields they understand and ignore the rest.\n\t */\n\tmetadata?: Record<string, unknown>;\n}\n\nexport type ProviderImagesOptions = ImagesOptions & Record<string, unknown>;\n\nexport interface AnthropicAllowedFallbackModel {\n\tprovider: ProviderId;\n\tmodel: string;\n\tcost: ModelCost;\n}\n\nexport type AnthropicRefusalFallback = \"default\" | readonly { model: string }[];\n\n// Unified options with reasoning passed to streamSimple() and completeSimple()\nexport interface SimpleStreamOptions extends StreamOptions {\n\t/** Provider-neutral tool selection for simple requests. When omitted, adapters use provider-specific behavior. */\n\ttoolChoice?: ToolChoice;\n\treasoning?: ThinkingLevel;\n\t/**\n\t * Provenance-bearing thinking selection. Providers that need to distinguish\n\t * an explicit user choice from the always-materialized effective level read\n\t * this; `reasoning` remains the normalized effective level for everyone.\n\t */\n\tthinkingSelection?: ThinkingSelection;\n\t/** Anthropic server-side fallback for eligible refusal stop reasons. Anthropic providers only. */\n\trefusalFallbacks?: AnthropicRefusalFallback;\n\t/** Ask a capable provider to return a durable handle and continue the request asynchronously. */\n\tdeferred?: boolean | { window?: \"15m\" | \"1h\" | \"24h\" };\n\t/** Custom token budgets for thinking levels (token-based providers only) */\n\tthinkingBudgets?: ThinkingBudgets;\n\t/**\n\t * Requested processing tier for providers that price and schedule by tier (OpenAI Responses and\n\t * the ChatGPT Codex backend send it as `service_tier`). Adapters without the concept ignore it.\n\t */\n\tserviceTier?: ServiceTierPreference;\n}\n\n/** Tier preferences a caller can express; providers map `\"auto\"` to their default lane. */\nexport type ServiceTierPreference = \"auto\" | \"flex\" | \"priority\";\n\n// Generic StreamFunction with typed options.\n//\n// Contract:\n// - Must return an AssistantMessageEventStream.\n// - Direct streamSimple() calls may throw synchronously when request auth is\n// missing. Once a stream is returned, request/model/runtime failures should\n// be encoded in that stream.\n// - Error termination must produce an AssistantMessage with stopReason\n// \"error\" or \"aborted\" and errorMessage, emitted via the stream protocol.\nexport type StreamFunction<TApi extends Api = Api, TOptions extends StreamOptions = StreamOptions> = (\n\tmodel: Model<TApi>,\n\tcontext: Context,\n\toptions?: TOptions,\n) => AssistantMessageEventStream;\n\nexport type ImagesFunction<TApi extends ImagesApi = ImagesApi, TOptions extends ImagesOptions = ImagesOptions> = (\n\tmodel: ImagesModel<TApi>,\n\tcontext: ImagesContext,\n\toptions?: TOptions,\n) => Promise<AssistantImages>;\n\nexport interface TextSignatureV1 {\n\tv: 1;\n\tid: string;\n\tphase?: \"commentary\" | \"final_answer\";\n}\n\nexport interface TextContent {\n\ttype: \"text\";\n\ttext: string;\n\t/**\n\t * When set, this part is addressed to the model only: renderers and downstream UIs omit it.\n\t * Absent means visible to everyone. Provider adapters send the text unchanged.\n\t */\n\taudience?: \"model\";\n\ttextSignature?: string; // e.g., for OpenAI responses, message metadata (legacy id string or TextSignatureV1 JSON)\n}\n\nexport interface ThinkingContent {\n\ttype: \"thinking\";\n\tthinking: string;\n\t/** Epoch ms, stamped by the agent loop at stream-event receipt, best-effort. */\n\tstartedAt?: number;\n\t/** Epoch ms, stamped by the agent loop at stream-event receipt, best-effort. */\n\tendedAt?: number;\n\tthinkingSignature?: string; // e.g., for OpenAI responses, the reasoning item ID\n\t/** When true, the thinking content was redacted by safety filters. The opaque\n\t * encrypted payload is stored in `thinkingSignature` so it can be passed back\n\t * to the API for multi-turn continuity. */\n\tredacted?: boolean;\n}\n\nexport interface ImageContent {\n\ttype: \"image\";\n\tdata: string; // base64 encoded image data\n\tmimeType: string; // e.g., \"image/jpeg\", \"image/png\". Video payloads (e.g. \"video/mp4\") ride this\n\t// same block for models that declare the \"video\" input modality; use isVideoMimeType() to branch.\n}\n\n/** True when an ImageContent block actually carries video data (e.g. \"video/mp4\"). */\nexport function isVideoMimeType(mimeType: string): boolean {\n\treturn mimeType.toLowerCase().startsWith(\"video/\");\n}\n\nexport interface ToolCall {\n\ttype: \"toolCall\";\n\tid: string;\n\tname: string;\n\targuments: Record<string, any>;\n\t/** Set by text tool-call middleware when a truncated call could not be recovered. Carriers of `incomplete` MUST NOT be executed. */\n\tincomplete?: true;\n\t/** Error explaining why an incomplete tool call could not be recovered. */\n\terrorMessage?: string;\n\tthoughtSignature?: string; // Google-specific: opaque signature for reusing thought context\n\t/** OpenAI Responses namespace for calls to dynamically loaded or namespaced tools. */\n\tnamespace?: string;\n}\n\n/**\n * Provider-emitted content block whose semantics are owned by the originating\n * provider. Surfaces server-side tool invocations (web_search), server-side\n * tool results (web_search_tool_result), code execution traces, grounding\n * metadata fragments, and any other vendor-specific block the core does not\n * normalize.\n *\n * `subtype` mirrors the provider's wire `type` discriminator (e.g.\n * \"server_tool_use\", \"web_search_tool_result\", \"executableCode\"). `raw` is\n * the verbatim wire payload — extensions interpret it per provider+subtype.\n *\n * The owning provider id lives on the parent `AssistantMessage.provider`, not\n * here, to avoid drift on replay.\n *\n * On replay across providers, `convertMessages` implementations MUST drop\n * these blocks (they are not portable). This mirrors the existing\n * `redacted_thinking` skip pattern.\n */\nexport interface ProviderNativeContent {\n\ttype: \"providerNative\";\n\tsubtype: string;\n\traw: unknown;\n}\n\nexport interface Usage {\n\tinput: number;\n\toutput: number;\n\tcacheRead: number;\n\tcacheWrite: number;\n\t/** Subset of `cacheWrite` written with 1h retention. Only Anthropic reports this split. */\n\tcacheWrite1h?: number;\n\t/**\n\t * Reasoning/thinking tokens, when the provider reports them. This is a subset of\n\t * `output`: `output` already includes these tokens. Set to a number (possibly 0) by\n\t * providers that expose a reasoning breakdown; left undefined by providers that don't.\n\t */\n\treasoning?: number;\n\ttotalTokens: number;\n\tcost: {\n\t\tinput: number;\n\t\toutput: number;\n\t\tcacheRead: number;\n\t\tcacheWrite: number;\n\t\ttotal: number;\n\t};\n}\n\n/**\n * OpenAI Responses `prompt_cache_diagnostics`, returned when the request carried\n * `prompt_cache_options.comparison_response_id`. `type` is `cache_hit`, `cache_miss`\n * (with a provider `reason` such as `reasoning_effort_changed`) or `unavailable`.\n */\nexport interface PromptCacheDiagnostics {\n\ttype: \"cache_hit\" | \"cache_miss\" | \"unavailable\" | (string & {});\n\treason?: string;\n\tcacheMissedTokens?: number;\n\tcomparisonReusableTokens?: number;\n}\n\nexport type StopReason = \"pending\" | \"stop\" | \"length\" | \"toolUse\" | \"error\" | \"aborted\" | \"deferred\";\n\nexport type JsonValue = null | boolean | number | string | JsonValue[] | { [key: string]: JsonValue };\n\nexport interface DeferredHandle {\n\tprovider: string;\n\tmodelId: string;\n\tapi: string;\n\t/** Provider token, such as a response id or batch id plus row id. */\n\tid: string;\n\texpiresAt?: number;\n\tpollAfterMs?: number;\n\t/** Provider conversion data required to reconstruct the final assistant message. */\n\tdata?: JsonValue;\n}\n\nexport type AssistantStopDetails = { type: \"refusal\"; explanation?: string } | { type: \"sensitive\" };\n\nexport interface UserMessage {\n\trole: \"user\";\n\tcontent: string | (TextContent | ImageContent)[];\n\ttimestamp: number; // Unix timestamp in milliseconds\n}\n\n/** A durable Responses configuration change projected into the message stream. */\nexport interface ConfigurationUpdateMessage {\n\trole: \"configurationUpdate\";\n\tcontent: (TextContent | ImageContent)[];\n\teffort: string;\n\ttimestamp: number;\n}\n\nexport interface AssistantMessage {\n\trole: \"assistant\";\n\tcontent: (TextContent | ThinkingContent | ToolCall | ProviderNativeContent)[];\n\tapi: Api;\n\tprovider: ProviderId;\n\tmodel: string;\n\tresponseModel?: string; // Concrete `chunk.model` when different from the requested `model` (e.g. OpenRouter `auto` -> `anthropic/...`)\n\tresponseId?: string; // Provider-specific response/message identifier when the upstream API exposes one\n\t/** Exact provider-native effort level used for this response. Absent for legacy or unmanaged responses. */\n\tproviderThinkingLevel?: string;\n\tdiagnostics?: AssistantMessageDiagnostic[]; // Redacted provider/runtime diagnostics for failures and recoveries.\n\t/** Provider prompt-cache comparison against the previous response of the same model, when reported. */\n\tpromptCacheDiagnostics?: PromptCacheDiagnostics;\n\tusage: Usage;\n\tstopReason: StopReason;\n\tstopDetails?: AssistantStopDetails;\n\tdeferred?: DeferredHandle;\n\terrorMessage?: string;\n\t/** Structured provider failure family, minted only by a provider adapter from structured error metadata. */\n\tproviderDiagnostic?: ProviderDiagnostic;\n\t/** Explicit owner for an abort initiated by the provider retry watchdog. */\n\tabortSource?: \"provider\";\n\trawStopReason?: string;\n\t/**\n\t * Provider indication of whether the model explicitly ended its turn.\n\t * Preserved for debugging and does not currently affect agent control flow.\n\t */\n\tendTurn?: boolean;\n\ttimestamp: number; // Unix timestamp in milliseconds\n}\n\nexport interface ToolResultMessage<TDetails = any> {\n\trole: \"toolResult\";\n\ttoolCallId: string;\n\ttoolName: string;\n\tcontent: (TextContent | ImageContent)[]; // Supports text and images\n\tdetails?: TDetails;\n\t/** Usage from the tool execution itself, if available. Not part of main LLM context accounting. */\n\tusage?: Usage;\n\t/**\n\t * Names from `Context.tools` that became available after this result.\n\t * Providers with native deferred tool loading use this as the load point;\n\t * other providers ignore it and use `Context.tools` normally.\n\t */\n\taddedToolNames?: string[];\n\tisError: boolean;\n\ttimestamp: number; // Unix timestamp in milliseconds\n}\n\nexport type Message = UserMessage | AssistantMessage | ToolResultMessage | ConfigurationUpdateMessage;\n\nexport type ImagesInputContent = TextContent | ImageContent;\nexport type ImagesOutputContent = TextContent | ImageContent;\n\nexport interface ImagesContext {\n\tinput: ImagesInputContent[];\n}\n\nexport type ImagesStopReason = \"stop\" | \"error\" | \"aborted\";\n\nexport interface AssistantImages {\n\tapi: ImagesApi;\n\tprovider: ImagesProviderId;\n\tmodel: string;\n\toutput: ImagesOutputContent[];\n\tresponseId?: string;\n\tusage?: Usage;\n\t/** Background the provider reports for the returned images; unset when it reports `auto` or nothing. */\n\tbackground?: \"transparent\" | \"opaque\";\n\tstopReason: ImagesStopReason;\n\terrorMessage?: string;\n\ttimestamp: number; // Unix timestamp in milliseconds\n}\n\nimport type { TSchema } from \"typebox\";\n\nexport interface FreeformToolFormat {\n\ttype: \"grammar\";\n\tsyntax: \"lark\";\n\tdefinition: string;\n}\n\n/** OpenAI grammar variants for constrained sampling. */\nexport type GrammarFormat = \"openai_lark\" | \"openai_regex\";\n\nexport type GrammarVariants = Partial<Record<GrammarFormat, string>>;\n\n/**\n * Optional provider-side constrained sampling configs for a tool.\n *\n * The `json_schema` value roughly maps to the concept of `strict` in APIs which is\n * implemented as json-schema constrained sampling by APIs. Grammar variants let\n * callers provide provider-specific encodings of the same intended language.\n */\nexport type ConstrainedSamplingConfig =\n\t| {\n\t\t\ttype: \"json_schema\";\n\t\t\tstrict: \"prefer\" | \"require\";\n\t }\n\t| {\n\t\t\ttype: \"grammar\";\n\t\t\tvariants: GrammarVariants;\n\t };\nexport interface Tool<TParameters extends TSchema = TSchema> {\n\tname: string;\n\tdescription: string;\n\tparameters: TParameters;\n\tfreeform?: FreeformToolFormat;\n\tconstrainedSampling?: false | ConstrainedSamplingConfig;\n}\n\nexport interface Context {\n\tsystemPrompt?: string;\n\tmessages: Message[];\n\ttools?: Tool[];\n\t/**\n\t * Names from `tools` the model may call on this request; absent means every tool is callable.\n\t * Set only for models whose compat declares `supportsAllowedTools`: the adapter keeps `tools`\n\t * byte-stable and restricts callability through `tool_choice` (senpi#2095).\n\t */\n\tactiveToolNames?: string[];\n}\n\n/**\n * Event protocol for AssistantMessageEventStream.\n *\n * Successful streams emit `start` before partial updates and terminate with\n * `done`. A stream may terminate directly with `error` when request setup fails\n * before generation starts; after `start`, failures also terminate with `error`.\n * Direct `streamSimple()` calls throw synchronously when request auth is missing.\n * Updates and `done` must never appear before `start`.\n *\n * `partial` is the shared live response-so-far helper, not an event-time\n * snapshot. Text and thinking blocks are empty when their `*_start` event is\n * emitted and grow only through their corresponding `*_delta` events until the\n * authoritative `*_end`. Redacted thinking may be complete at start and emit no\n * deltas. Tool-call arguments at `toolcall_start` are provider-specific;\n * `toolcall_delta` carries subsequent JSON updates.\n */\nexport type AssistantMessageEvent =\n\t| { type: \"start\"; partial: AssistantMessage }\n\t| { type: \"text_start\"; contentIndex: number; partial: AssistantMessage }\n\t| { type: \"text_delta\"; contentIndex: number; delta: string; partial: AssistantMessage }\n\t| { type: \"text_end\"; contentIndex: number; content: string; partial: AssistantMessage }\n\t| { type: \"thinking_start\"; contentIndex: number; partial: AssistantMessage }\n\t| { type: \"thinking_delta\"; contentIndex: number; delta: string; partial: AssistantMessage }\n\t| { type: \"thinking_end\"; contentIndex: number; content: string; partial: AssistantMessage }\n\t| { type: \"toolcall_start\"; contentIndex: number; partial: AssistantMessage }\n\t| { type: \"toolcall_delta\"; contentIndex: number; delta: string; partial: AssistantMessage }\n\t/** Finalized - executable iff `incomplete !== true` on `toolCall`. */\n\t| { type: \"toolcall_end\"; contentIndex: number; toolCall: ToolCall; partial: AssistantMessage }\n\t| {\n\t\t\ttype: \"done\";\n\t\t\treason: Extract<StopReason, \"stop\" | \"length\" | \"toolUse\" | \"deferred\">;\n\t\t\tmessage: AssistantMessage;\n\t }\n\t| { type: \"error\"; reason: Extract<StopReason, \"aborted\" | \"error\">; error: AssistantMessage };\n\n/**\n * Compatibility settings for OpenAI-compatible completions APIs.\n * Use this to override URL-based auto-detection for custom providers.\n */\nexport interface OpenAICompletionsCompat {\n\t/** Whether the provider supports the `store` field. Default: auto-detected from URL. */\n\tsupportsStore?: boolean;\n\t/** Whether the provider supports the `developer` role (vs `system`). Default: auto-detected from URL. */\n\tsupportsDeveloperRole?: boolean;\n\t/** Whether the provider supports `reasoning_effort`. Default: auto-detected from URL. */\n\tsupportsReasoningEffort?: boolean;\n\t/** Whether the provider supports `stream_options: { include_usage: true }` for token usage in streaming responses. Default: true. */\n\tsupportsUsageInStreaming?: boolean;\n\t/** Whether streamed responses include `finish_reason`. When false, pi infers `stop` or `toolUse` when the stream ends. Default: true. */\n\tsupportsFinishReason?: boolean;\n\t/** Which field to use for max tokens. Default: auto-detected from URL. */\n\tmaxTokensField?: \"max_completion_tokens\" | \"max_tokens\";\n\t/** Whether tool results require the `name` field. Default: auto-detected from URL. */\n\trequiresToolResultName?: boolean;\n\t/** Whether a user message after tool results requires an assistant message in between. Default: auto-detected from URL. */\n\trequiresAssistantAfterToolResult?: boolean;\n\t/** Whether thinking blocks must be converted to text blocks with <thinking> delimiters. Default: auto-detected from URL. */\n\trequiresThinkingAsText?: boolean;\n\t/** Whether all replayed assistant messages must include an empty reasoning_content field when reasoning is enabled. Default: auto-detected from URL. */\n\trequiresReasoningContentOnAssistantMessages?: boolean;\n\t/** Format for reasoning/thinking parameter. \"openai\" uses reasoning_effort, \"openrouter\" uses reasoning: { effort }, \"deepseek\" uses thinking: { type } plus reasoning_effort when supported, \"together\" uses reasoning: { enabled } plus reasoning_effort when supported, \"baseten\" uses configurable chat_template_args plus reasoning_effort when supported, \"zai\" uses thinking: { type }, \"qwen\" uses top-level enable_thinking: boolean, \"qwen-chat-template\" uses chat_template_kwargs.enable_thinking and preserve_thinking, \"chat-template\" uses configurable chat_template_kwargs, \"string-thinking\" uses top-level thinking: string, and \"ant-ling\" uses reasoning: { effort } only when the mapped effort is non-null. Default: \"openai\". */\n\tthinkingFormat?:\n\t\t| \"openai\"\n\t\t| \"openrouter\"\n\t\t| \"deepseek\"\n\t\t| \"together\"\n\t\t| \"baseten\"\n\t\t| \"zai\"\n\t\t| \"qwen\"\n\t\t| \"chat-template\"\n\t\t| \"qwen-chat-template\"\n\t\t| \"string-thinking\"\n\t\t| \"ant-ling\";\n\t/** Whether the provider accepts explicit disabled-thinking markers when thinking is off. Default: true. */\n\tsupportsDisabledThinking?: boolean;\n\t/** Kwargs to send as `chat_template_kwargs` when `thinkingFormat` is `chat-template`. Use `{ \"$var\": \"thinking.enabled\" }`, `{ \"$var\": \"thinking.effort\" }`, or `{ \"$var\": \"thinking.budget\" }` for pi-controlled thinking values. */\n\tchatTemplateKwargs?: Record<string, ChatTemplateKwargValue>;\n\t/** Arguments to send as `chat_template_args` when `thinkingFormat` is `baseten`. Use `{ \"$var\": \"thinking.enabled\" }`, `{ \"$var\": \"thinking.effort\" }`, or `{ \"$var\": \"thinking.budget\" }` for pi-controlled thinking values. */\n\tchatTemplateArgs?: Record<string, ChatTemplateKwargValue>;\n\t/** OpenRouter-compatible routing preferences sent as the `provider` request field. */\n\topenRouterRouting?: OpenRouterRouting;\n\t/**\n\t * Sent as the top-level `venice_parameters` request field on Venice models.\n\t * Venice's request schema is `additionalProperties: false`, so the object\n\t * can only be shaped here — user-supplied `extraBody` can still override it.\n\t * `include_venice_system_prompt: false` stops Venice from prepending its\n\t * own default system prompt ahead of the caller's.\n\t */\n\tveniceParameters?: { include_venice_system_prompt?: boolean };\n\t/** Vercel AI Gateway routing preferences. Only used when baseUrl points to Vercel AI Gateway. */\n\tvercelGatewayRouting?: VercelGatewayRouting;\n\t/** Whether z.ai supports top-level `tool_stream: true` for streaming tool call deltas. Default: false. */\n\tzaiToolStream?: boolean;\n\t/**\n\t * Top-level request field used to cap reasoning tokens from `thinkingBudgets`.\n\t * Reasoning and the answer share `max_tokens` on these endpoints, so without a budget a\n\t * reasoning-heavy turn can consume the whole response and emit no answer.\n\t * `\"thinking_token_budget\"` is vLLM, `\"thinking_budget\"` is Qwen/DashScope/SGLang,\n\t * `\"thinking_budget_tokens\"` is llama.cpp. Off by default; not set on the generated catalog.\n\t */\n\tthinkingTokenBudgetField?: ThinkingTokenBudgetField;\n\t/** Alias for `thinkingTokenBudgetField: \"thinking_token_budget\"` (vLLM). Prefer `thinkingTokenBudgetField`. Default: false. */\n\tsupportsThinkingTokenBudget?: boolean;\n\t/** Whether the provider supports OpenAI custom tools with Lark/regex grammar formats. When false, grammar-constrained tools fall back to normal function tools. Default: false; the generated model catalog enables it for capable models. */\n\tsupportsOpenAIGrammarTools?: boolean;\n\t/** Whether the provider supports the `strict` field in tool definitions. Default: true. */\n\tsupportsStrictMode?: boolean;\n\t/**\n\t * Provider-specific JSON Schema flavor for tool parameters. `\"moonshot-mfjs\"`\n\t * normalizes schemas for Moonshot / Kimi backends that enforce a stricter subset.\n\t */\n\ttoolSchemaFlavor?: \"moonshot-mfjs\";\n\t/**\n\t * Tool call format for models that don't natively support tool calling.\n\t * When set, the middleware will intercept tool calls and format them as text.\n\t * Supported values: \"hermes\", \"morph-xml\", \"xml\" (deprecated alias for \"morph-xml\"), \"yaml-xml\", \"gemma4-delimiter\", \"anthropic-xml\", \"antml\", \"kimi-xtml\"\n\t */\n\ttoolCallFormat?: string;\n\t/** Cache control convention for prompt caching. \"anthropic\" applies Anthropic-style `cache_control` markers to the system prompt, last tool definition, and last user, assistant, or tool-result text content. */\n\tcacheControlFormat?: \"anthropic\";\n\t/** Whether to send session-affinity data from `options.sessionId`. Default: true for OpenRouter endpoints, false otherwise. */\n\tsendSessionAffinityHeaders?: boolean;\n\t/** Provider-specific deferred tool serialization mode. */\n\tdeferredToolsMode?: \"kimi\";\n\t/** Session-affinity header format: `openai` sends `session_id`, `x-client-request-id`, and `x-session-affinity`; `openai-nosession` sends `x-client-request-id` and `x-session-affinity`; `openrouter` sends `x-session-id`. Does not affect the `prompt_cache_key` body param, which is governed by cache retention. Default: auto-detected. */\n\tsessionAffinityFormat?: SessionAffinityFormat;\n\t/** Whether the provider accepts the `prompt_cache_key` request field. Default: auto-detected. */\n\tsupportsPromptCacheKey?: boolean;\n\t/** Whether the provider supports long prompt cache retention (`prompt_cache_retention: \"24h\"` or Anthropic-style `cache_control.ttl: \"1h\"`, depending on format). Default: true. */\n\tsupportsLongCacheRetention?: boolean;\n\t/** Whether the provider accepts the `max_output_tokens` parameter. Some Codex-protocol gateways reject it. Default: true. */\n\tsupportsMaxOutputTokens?: boolean;\n\t/**\n\t * Whether the provider accepts a `tool_choice` that forces a tool (`required` or a named function).\n\t * When false the forced choice is dropped before sending. Default: true; a provider that refuses one\n\t * at runtime is remembered for the process after one retry without it.\n\t */\n\tsupportsForcedToolChoice?: boolean;\n\t/**\n\t * vLLM scheduler priority sent as the top-level `priority` request field (lower values are\n\t * handled earlier; server default 0). Only meaningful when vLLM runs with\n\t * `--scheduling-policy priority`; useful for keeping background/batch work from stalling\n\t * interactive sessions. Off by default; not set on the generated catalog.\n\t */\n\tvllmPriority?: number;\n}\n\n/** Compatibility settings for Anthropic Messages-compatible APIs. */\nexport interface AnthropicMessagesCompat {\n\t/**\n\t * Whether the provider accepts per-tool `eager_input_streaming`.\n\t * When false, the Anthropic provider omits `tools[].eager_input_streaming`\n\t * and sends the legacy `fine-grained-tool-streaming-2025-05-14` beta header\n\t * for tool-enabled requests.\n\t * Default: true.\n\t */\n\tsupportsEagerToolInputStreaming?: boolean;\n\t/** Whether the provider supports Anthropic long cache retention (`cache_control.ttl: \"1h\"`). Default: true. */\n\tsupportsLongCacheRetention?: boolean;\n\t/**\n\t * Whether to send the `x-session-affinity` header from `options.sessionId`\n\t * when caching is enabled. Required for providers like Fireworks that use\n\t * session affinity for prompt cache routing (requests to the same replica\n\t * maximize cache hits).\n\t * Default: false.\n\t */\n\tsendSessionAffinityHeaders?: boolean;\n\t/** Session-affinity format. `\"openrouter\"` sends `x-session-id`; when unset, sends `x-session-affinity`. */\n\tsessionAffinityFormat?: \"openrouter\";\n\t/**\n\t * Whether the provider supports Anthropic-style `cache_control` markers on\n\t * tool definitions. When false, `cache_control` is omitted from tool params.\n\t * Some Anthropic-compatible providers (e.g., Fireworks) do not support this\n\t * field on tools and may reject or ignore it.\n\t * Default: true.\n\t */\n\tsupportsCacheControlOnTools?: boolean;\n\t/**\n\t * Whether the provider accepts `thinking: { type: \"disabled\" }` when\n\t * extended thinking is off. Some Anthropic-compatible providers support\n\t * thinking but reject Anthropic's explicit disabled marker.\n\t * Default: true.\n\t */\n\tsupportsDisabledThinking?: boolean;\n\t/**\n\t * Whether the model accepts the Anthropic `temperature` request field.\n\t * Claude Opus 4.7+ rejects non-default temperature values.\n\t * Default: true.\n\t */\n\tsupportsTemperature?: boolean;\n\t/** Whether the model accepts Anthropic `tool_choice`. Default: true. */\n\tsupportsToolChoice?: boolean;\n\t/**\n\t * Whether the model accepts forced Anthropic tool choices (`any` or a named\n\t * tool). Default: true, except Claude Fable/Mythos models.\n\t */\n\tsupportsForcedToolChoice?: boolean;\n\t/**\n\t * Whether to force adaptive thinking (`thinking.type: \"adaptive\"` plus\n\t * `output_config.effort`) regardless of the model id. Built-in models that\n\t * require adaptive thinking set this in generated metadata. Custom\n\t * Anthropic-compatible providers can set this to `true` for any model whose\n\t * upstream requires the adaptive format. Set to `false` to opt out on\n\t * overridden built-in models and disable model id/name inference.\n\t * Default: infer from adaptive Claude model ids/names when possible.\n\t */\n\tforceAdaptiveThinking?: boolean;\n\t/** Whether to replay empty thinking signatures as `signature: \"\"` instead of converting thinking to text. Default: false. */\n\tallowEmptySignature?: boolean;\n\t/** Whether the provider supports Anthropic strict tool schemas. Default: false; generated Anthropic models enable it explicitly. */\n\tsupportsStrictTools?: boolean;\n\t/** Whether the exact model transport supports effort-only system messages and thinking binding controls. Default: false. */\n\tsupportsMidConvoEffort?: boolean;\n\t/**\n\t * How to replay thinking blocks that have no usable Anthropic signature.\n\t * `\"text\"` demotes them to text; `\"empty-signature\"` preserves Anthropic's\n\t * thinking shape with `signature: \"\"`. Defaults to `\"text\"`; the legacy\n\t * `allowEmptySignature` setting remains a compatibility alias for\n\t * `\"empty-signature\"`.\n\t */\n\tunsignedThinkingReplay?: \"text\" | \"empty-signature\";\n\t/**\n\t * Model ids Anthropic accepts in `fallbacks` for server-side refusal fallback.\n\t * When absent or empty, callers must omit `fallbacks`; Anthropic rejects the\n\t * field for models with no permitted fallback targets.\n\t */\n\tallowedFallbackModels?: Array<AnthropicAllowedFallbackModel | string>;\n\t/**\n\t * Whether the provider supports deferred tools loaded by `tool_reference`\n\t * blocks in tool results. Default: true for first-party Anthropic models\n\t * except Haiku and models older than Claude 4.5; false for other providers.\n\t */\n\tsupportsToolReferences?: boolean;\n\t/**\n\t * Whether the provider executes Anthropic server-side `web_search_*` native\n\t * tools and accepts their `server_tool_use` / `web_search_tool_result`\n\t * blocks on replay. Anthropic-compatible endpoints (e.g., kimi-coding) may\n\t * run the search but reject the replayed server-tool blocks on the next\n\t * request. When false, hook-injected `web_search_*` tools are stripped from\n\t * the payload. Default: true only for the first-party Anthropic endpoint.\n\t */\n\tsupportsWebSearch?: boolean;\n}\n\n/** Compatibility settings for Amazon Bedrock models. */\nexport interface BedrockCompat {\n\t/** Whether the model supports Bedrock strict tool schemas. Default: false. */\n\tsupportsStrictMode?: boolean;\n}\n\n/**\n * OpenRouter provider routing preferences.\n * Controls which upstream providers OpenRouter routes requests to.\n * Sent as the `provider` field in the OpenRouter API request body.\n * @see https://openrouter.ai/docs/guides/routing/provider-selection\n */\nexport interface OpenRouterRouting {\n\t/** Whether to allow backup providers to serve requests. Default: true. */\n\tallow_fallbacks?: boolean;\n\t/** Whether to filter providers to only those that support all parameters in the request. Default: false. */\n\trequire_parameters?: boolean;\n\t/** Data collection setting. \"allow\" (default): allow providers that may store/train on data. \"deny\": only use providers that don't collect user data. */\n\tdata_collection?: \"deny\" | \"allow\";\n\t/** Whether to restrict routing to only ZDR (Zero Data Retention) endpoints. */\n\tzdr?: boolean;\n\t/** Whether to restrict routing to only models that allow text distillation. */\n\tenforce_distillable_text?: boolean;\n\t/** An ordered list of provider names/slugs to try in sequence, falling back to the next if unavailable. */\n\torder?: string[];\n\t/** List of provider names/slugs to exclusively allow for this request. */\n\tonly?: string[];\n\t/** List of provider names/slugs to skip for this request. */\n\tignore?: string[];\n\t/** A list of quantization levels to filter providers by (e.g., [\"fp16\", \"bf16\", \"fp8\", \"fp6\", \"int8\", \"int4\", \"fp4\", \"fp32\"]). */\n\tquantizations?: string[];\n\t/** Sorting strategy. Can be a string (e.g., \"price\", \"throughput\", \"latency\") or an object with `by` and `partition`. */\n\tsort?:\n\t\t| string\n\t\t| {\n\t\t\t\t/** The sorting metric: \"price\", \"throughput\", \"latency\". */\n\t\t\t\tby?: string;\n\t\t\t\t/** Partitioning strategy: \"model\" (default) or \"none\". */\n\t\t\t\tpartition?: string | null;\n\t\t };\n\t/** Maximum price per million tokens (USD). */\n\tmax_price?: {\n\t\t/** Price per million prompt tokens. */\n\t\tprompt?: number | string;\n\t\t/** Price per million completion tokens. */\n\t\tcompletion?: number | string;\n\t\t/** Price per image. */\n\t\timage?: number | string;\n\t\t/** Price per audio unit. */\n\t\taudio?: number | string;\n\t\t/** Price per request. */\n\t\trequest?: number | string;\n\t};\n\t/** Preferred minimum throughput (tokens/second). Can be a number (applies to p50) or an object with percentile-specific cutoffs. */\n\tpreferred_min_throughput?:\n\t\t| number\n\t\t| {\n\t\t\t\t/** Minimum tokens/second at the 50th percentile. */\n\t\t\t\tp50?: number;\n\t\t\t\t/** Minimum tokens/second at the 75th percentile. */\n\t\t\t\tp75?: number;\n\t\t\t\t/** Minimum tokens/second at the 90th percentile. */\n\t\t\t\tp90?: number;\n\t\t\t\t/** Minimum tokens/second at the 99th percentile. */\n\t\t\t\tp99?: number;\n\t\t };\n\t/** Preferred maximum latency (seconds). Can be a number (applies to p50) or an object with percentile-specific cutoffs. */\n\tpreferred_max_latency?:\n\t\t| number\n\t\t| {\n\t\t\t\t/** Maximum latency in seconds at the 50th percentile. */\n\t\t\t\tp50?: number;\n\t\t\t\t/** Maximum latency in seconds at the 75th percentile. */\n\t\t\t\tp75?: number;\n\t\t\t\t/** Maximum latency in seconds at the 90th percentile. */\n\t\t\t\tp90?: number;\n\t\t\t\t/** Maximum latency in seconds at the 99th percentile. */\n\t\t\t\tp99?: number;\n\t\t };\n}\n\n/**\n * Vercel AI Gateway routing preferences.\n * Controls which upstream providers the gateway routes requests to.\n * @see https://vercel.com/docs/ai-gateway/models-and-providers/provider-options\n */\nexport interface VercelGatewayRouting {\n\t/** List of provider slugs to exclusively use for this request (e.g., [\"bedrock\", \"anthropic\"]). */\n\tonly?: string[];\n\t/** List of provider slugs to try in order (e.g., [\"anthropic\", \"openai\"]). */\n\torder?: string[];\n}\n\nexport interface ModelCostRates {\n\tinput: number; // $/million tokens\n\toutput: number; // $/million tokens\n\tcacheRead: number; // $/million tokens\n\tcacheWrite: number; // $/million tokens\n}\n\nexport interface ModelCostTier extends ModelCostRates {\n\t/** Use this tier for requests whose total input usage exceeds this token count. */\n\tinputTokensAbove: number;\n}\n\nexport interface ModelCost extends ModelCostRates {\n\t/** Request-wide pricing tiers. The highest matching input threshold applies to the full request. */\n\ttiers?: ModelCostTier[];\n}\n\nexport interface ImagesModelCost extends ModelCost {\n\t/** $/million image input tokens (reference and edit inputs). Falls back to `input` when absent. */\n\timageInput?: number;\n}\n\nexport interface ImagesModel<TApi extends ImagesApi>\n\textends Omit<Model<Api>, \"api\" | \"provider\" | \"reasoning\" | \"contextWindow\" | \"maxTokens\" | \"compat\" | \"cost\"> {\n\tapi: TApi;\n\tprovider: ImagesProviderId;\n\toutput: (\"text\" | \"image\")[];\n\tcost: ImagesModelCost;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"abort-signals.d.ts","sourceRoot":"","sources":["../../src/utils/abort-signals.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,mBAAmB;IACnC,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,OAAO,EAAE,MAAM,IAAI,CAAC;CACpB;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,SAAS,CAAC,WAAW,GAAG,SAAS,CAAC,EAAE,GAAG,mBAAmB,CAmCtG"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"abort-signals.js","sourceRoot":"","sources":["../../src/utils/abort-signals.ts"],"names":[],"mappings":"AAKA,MAAM,UAAU,mBAAmB,CAAC,OAA6C;IAChF,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAyB,EAAE,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;IAC9F,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,CAAC;IAC9B,CAAC;IACD,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChC,OAAO,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,CAAC;IACxD,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,SAAS,GAAyD,EAAE,CAAC;IAC3E,MAAM,KAAK,GAAG,CAAC,MAAmB,EAAE,EAAE;QACrC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YAChC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACjC,CAAC;IACF,CAAC,CAAC;IAEF,KAAK,MAAM,MAAM,IAAI,aAAa,EAAE,CAAC;QACpC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,KAAK,CAAC,MAAM,CAAC,CAAC;YACd,MAAM;QACP,CAAC;QACD,MAAM,QAAQ,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACrC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3D,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IACtC,CAAC;IAED,OAAO;QACN,MAAM,EAAE,UAAU,CAAC,MAAM;QACzB,OAAO,EAAE,GAAG,EAAE;YACb,KAAK,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,SAAS,EAAE,CAAC;gBAC9C,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YAC/C,CAAC;QACF,CAAC;KACD,CAAC;AACH,CAAC","sourcesContent":["export interface CombinedAbortSignal {\n\tsignal?: AbortSignal;\n\tcleanup: () => void;\n}\n\nexport function combineAbortSignals(signals: readonly (AbortSignal | undefined)[]): CombinedAbortSignal {\n\tconst activeSignals = signals.filter((signal): signal is AbortSignal => signal !== undefined);\n\tif (activeSignals.length === 0) {\n\t\treturn { cleanup: () => {} };\n\t}\n\tif (activeSignals.length === 1) {\n\t\treturn { signal: activeSignals[0], cleanup: () => {} };\n\t}\n\n\tconst controller = new AbortController();\n\tconst listeners: Array<{ signal: AbortSignal; listener: () => void }> = [];\n\tconst abort = (signal: AbortSignal) => {\n\t\tif (!controller.signal.aborted) {\n\t\t\tcontroller.abort(signal.reason);\n\t\t}\n\t};\n\n\tfor (const signal of activeSignals) {\n\t\tif (signal.aborted) {\n\t\t\tabort(signal);\n\t\t\tbreak;\n\t\t}\n\t\tconst listener = () => abort(signal);\n\t\tsignal.addEventListener(\"abort\", listener, { once: true });\n\t\tlisteners.push({ signal, listener });\n\t}\n\n\treturn {\n\t\tsignal: controller.signal,\n\t\tcleanup: () => {\n\t\t\tfor (const { signal, listener } of listeners) {\n\t\t\t\tsignal.removeEventListener(\"abort\", listener);\n\t\t\t}\n\t\t},\n\t};\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"abort.d.ts","sourceRoot":"","sources":["../../src/utils/abort.ts"],"names":[],"mappings":"AAOA,iFAAiF;AACjF,wBAAgB,eAAe,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,WAAW,CAEjE;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,CAiC7F"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"abort.js","sourceRoot":"","sources":["../../src/utils/abort.ts"],"names":[],"mappings":"AAAA,SAAS,WAAW,CAAC,MAAmB;IACvC,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC,MAAM,CAAC;IACtD,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IACrD,KAAK,CAAC,IAAI,GAAG,YAAY,CAAC;IAC1B,OAAO,KAAK,CAAC;AACd,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,eAAe,CAAC,MAAoB;IACnD,OAAO,MAAM,IAAI,IAAI,eAAe,EAAE,CAAC,MAAM,CAAC;AAC/C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAI,SAAqB,EAAE,MAAmB;IAChF,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,KAAK,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAC/B,OAAO,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5C,CAAC;IAED,OAAO,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACzC,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACnE,MAAM,OAAO,GAAG,GAAG,EAAE;YACpB,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,OAAO,EAAE,CAAC;YACV,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;QAC7B,CAAC,CAAC;QAEF,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1D,KAAK,SAAS,CAAC,IAAI,CAClB,CAAC,KAAK,EAAE,EAAE;YACT,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,OAAO,EAAE,CAAC;YACV,OAAO,CAAC,KAAK,CAAC,CAAC;QAChB,CAAC,EACD,CAAC,KAAc,EAAE,EAAE;YAClB,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,OAAO,EAAE,CAAC;YACV,MAAM,CAAC,KAAK,CAAC,CAAC;QACf,CAAC,CACD,CAAC;QACF,IAAI,MAAM,CAAC,OAAO;YAAE,OAAO,EAAE,CAAC;IAC/B,CAAC,CAAC,CAAC;AACJ,CAAC","sourcesContent":["function abortReason(signal: AbortSignal): unknown {\n\tif (signal.reason !== undefined) return signal.reason;\n\tconst error = new Error(\"The operation was aborted\");\n\terror.name = \"AbortError\";\n\treturn error;\n}\n\n/** Create an operation-local signal for public APIs whose signal is optional. */\nexport function operationSignal(signal?: AbortSignal): AbortSignal {\n\treturn signal ?? new AbortController().signal;\n}\n\n/**\n * Stop waiting for an operation when its signal aborts while continuing to\n * observe the abandoned promise so a later rejection is always handled.\n */\nexport function raceWithAbortSignal<T>(operation: Promise<T>, signal: AbortSignal): Promise<T> {\n\tif (signal.aborted) {\n\t\tvoid operation.catch(() => {});\n\t\treturn Promise.reject(abortReason(signal));\n\t}\n\n\treturn new Promise<T>((resolve, reject) => {\n\t\tlet settled = false;\n\t\tconst cleanup = () => signal.removeEventListener(\"abort\", onAbort);\n\t\tconst onAbort = () => {\n\t\t\tif (settled) return;\n\t\t\tsettled = true;\n\t\t\tcleanup();\n\t\t\treject(abortReason(signal));\n\t\t};\n\n\t\tsignal.addEventListener(\"abort\", onAbort, { once: true });\n\t\tvoid operation.then(\n\t\t\t(value) => {\n\t\t\t\tif (settled) return;\n\t\t\t\tsettled = true;\n\t\t\t\tcleanup();\n\t\t\t\tresolve(value);\n\t\t\t},\n\t\t\t(error: unknown) => {\n\t\t\t\tif (settled) return;\n\t\t\t\tsettled = true;\n\t\t\t\tcleanup();\n\t\t\t\treject(error);\n\t\t\t},\n\t\t);\n\t\tif (signal.aborted) onAbort();\n\t});\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"assistant-message-frame.d.ts","sourceRoot":"","sources":["../../src/utils/assistant-message-frame.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,WAAW,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGnH;;;GAGG;AACH,MAAM,MAAM,qBAAqB,GAC9B;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,gBAAgB,CAAA;CAAE,GAC5C;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,WAAW,CAAA;CAAE,GAClE;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC3D;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,GACnF;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,eAAe,CAAA;CAAE,GAC1E;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC/D;IACA,IAAI,EAAE,cAAc,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;CAClB,GACD;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,QAAQ,CAAA;CAAE,GACpE;IAAE,IAAI,EAAE,qBAAqB,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACnE;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC/D;IACA,IAAI,EAAE,cAAc,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC;IACjC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAqGL;;;;GAIG;AACH,qBAAa,4BAA4B;IACxC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAwC;IAE/D,MAAM,CAAC,KAAK,EAAE,qBAAqB,GAAG,qBAAqB,GAAG,SAAS,CA6ItE;IAED,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,KAAK;IAUb,OAAO,CAAC,QAAQ;IAKhB,OAAO,CAAC,eAAe;CAgBvB;AA0CD;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,QAAQ,CAAC,qBAAqB,CAAC,GAAG,gBAAgB,GAAG,SAAS,CAsHlH"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"assistant-message-frame.js","sourceRoot":"","sources":["../../src/utils/assistant-message-frame.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AssistantMessage, AssistantMessageEvent, TextContent, ThinkingContent, ToolCall } from \"../types.ts\";\nimport { parseStreamingJson } from \"./json-parse.ts\";\n\n/**\n * Compact, replayable assistant-message progress. Terminal settlement is\n * intentionally excluded and must be persisted separately.\n */\nexport type AssistantMessageFrame =\n\t| { type: \"start\"; partial: AssistantMessage }\n\t| { type: \"text_start\"; contentIndex: number; content: TextContent }\n\t| { type: \"text_delta\"; contentIndex: number; delta: string }\n\t| { type: \"text_end\"; contentIndex: number; content: string; textSignature?: string }\n\t| { type: \"thinking_start\"; contentIndex: number; content: ThinkingContent }\n\t| { type: \"thinking_delta\"; contentIndex: number; delta: string }\n\t| {\n\t\t\ttype: \"thinking_end\";\n\t\t\tcontentIndex: number;\n\t\t\tcontent: string;\n\t\t\tthinkingSignature?: string;\n\t\t\tredacted?: boolean;\n\t }\n\t| { type: \"toolcall_start\"; contentIndex: number; toolCall: ToolCall }\n\t| { type: \"toolcall_checkpoint\"; contentIndex: number; json: string }\n\t| { type: \"toolcall_delta\"; contentIndex: number; delta: string }\n\t| {\n\t\t\ttype: \"toolcall_end\";\n\t\t\tcontentIndex: number;\n\t\t\tid: string;\n\t\t\tname: string;\n\t\t\targuments: ToolCall[\"arguments\"];\n\t\t\tthoughtSignature?: string;\n\t\t\tnamespace?: string;\n\t };\n\ntype EncoderBlockState =\n\t| { kind: \"text\" | \"thinking\"; coveredChars: number; deltaChars: number }\n\t| {\n\t\t\tkind: \"toolCall\";\n\t\t\tcaughtUp: boolean;\n\t\t\tcatchupJson: string;\n\t\t\tsnapshotArguments: string;\n\t };\n\ntype ReducerBlockState =\n\t| { kind: \"text\"; ended: boolean }\n\t| { kind: \"thinking\"; ended: boolean }\n\t| { kind: \"toolCall\"; ended: boolean; json: string };\n\nfunction cloneTextContent(content: TextContent): TextContent {\n\treturn {\n\t\ttype: \"text\",\n\t\ttext: content.text,\n\t\t...(content.textSignature === undefined ? {} : { textSignature: content.textSignature }),\n\t};\n}\n\nfunction cloneThinkingContent(content: ThinkingContent): ThinkingContent {\n\treturn {\n\t\ttype: \"thinking\",\n\t\tthinking: content.thinking,\n\t\t...(content.thinkingSignature === undefined ? {} : { thinkingSignature: content.thinkingSignature }),\n\t\t...(content.redacted === undefined ? {} : { redacted: content.redacted }),\n\t};\n}\n\nfunction cloneToolCall(toolCall: ToolCall): ToolCall {\n\treturn {\n\t\ttype: \"toolCall\",\n\t\tid: toolCall.id,\n\t\tname: toolCall.name,\n\t\targuments: structuredClone(toolCall.arguments),\n\t\t...(toolCall.thoughtSignature === undefined ? {} : { thoughtSignature: toolCall.thoughtSignature }),\n\t\t...(toolCall.namespace === undefined ? {} : { namespace: toolCall.namespace }),\n\t};\n}\n\nfunction cloneStartMessage(message: AssistantMessage): AssistantMessage {\n\treturn {\n\t\trole: \"assistant\",\n\t\tcontent: [],\n\t\tapi: message.api,\n\t\tprovider: message.provider,\n\t\tmodel: message.model,\n\t\t...(message.responseModel === undefined ? {} : { responseModel: message.responseModel }),\n\t\t...(message.responseId === undefined ? {} : { responseId: message.responseId }),\n\t\t...(message.providerThinkingLevel === undefined ? {} : { providerThinkingLevel: message.providerThinkingLevel }),\n\t\t...(message.diagnostics === undefined ? {} : { diagnostics: structuredClone(message.diagnostics) }),\n\t\tusage: structuredClone(message.usage),\n\t\tstopReason: \"pending\",\n\t\ttimestamp: message.timestamp,\n\t};\n}\n\nfunction assertContentIndex(contentIndex: number): void {\n\tif (!Number.isSafeInteger(contentIndex) || contentIndex < 0) {\n\t\tthrow new Error(`Invalid assistant message frame contentIndex: ${contentIndex}`);\n\t}\n}\n\nfunction eventBlock(event: Exclude<AssistantMessageEvent, { type: \"start\" | \"done\" | \"error\" }>) {\n\tassertContentIndex(event.contentIndex);\n\tconst block = event.partial.content[event.contentIndex];\n\tif (!block) {\n\t\tthrow new Error(`${event.type} event has no content block at index ${event.contentIndex}`);\n\t}\n\treturn block;\n}\n\nfunction serializedArguments(argumentsValue: ToolCall[\"arguments\"]): string {\n\tconst serialized = JSON.stringify(argumentsValue);\n\tif (serialized === undefined) throw new Error(\"Tool-call arguments are not JSON-serializable\");\n\treturn serialized;\n}\n\nconst EMPTY_PARSED_TOOL_ARGUMENTS = serializedArguments(parseStreamingJson<ToolCall[\"arguments\"]>(\"\"));\n\nfunction isJsonPrefix(snapshot: unknown, current: unknown): boolean {\n\tif (typeof snapshot === \"string\") return typeof current === \"string\" && current.startsWith(snapshot);\n\tif (Array.isArray(snapshot)) {\n\t\treturn (\n\t\t\tArray.isArray(current) &&\n\t\t\tsnapshot.length <= current.length &&\n\t\t\tsnapshot.every((value, index) => isJsonPrefix(value, current[index]))\n\t\t);\n\t}\n\tif (typeof snapshot !== \"object\" || snapshot === null) return Object.is(snapshot, current);\n\tif (typeof current !== \"object\" || current === null || Array.isArray(current)) return false;\n\tconst currentRecord = current as Record<string, unknown>;\n\treturn Object.entries(snapshot).every(\n\t\t([key, value]) => Object.hasOwn(currentRecord, key) && isJsonPrefix(value, currentRecord[key]),\n\t);\n}\n\n/**\n * Encodes one assistant stream. `partial` remains a shared live accumulator;\n * the encoder uses per-block offsets to avoid replaying deltas already visible\n * when an older queued event is consumed.\n */\nexport class AssistantMessageFrameEncoder {\n\tprivate started = false;\n\tprivate terminal = false;\n\tprivate readonly blocks = new Map<number, EncoderBlockState>();\n\n\tencode(event: AssistantMessageEvent): AssistantMessageFrame | undefined {\n\t\tif (this.terminal) throw new Error(`Assistant message event ${event.type} follows a terminal event`);\n\n\t\tswitch (event.type) {\n\t\t\tcase \"start\":\n\t\t\t\tif (this.started) throw new Error(\"Assistant message stream contains more than one start event\");\n\t\t\t\tthis.started = true;\n\t\t\t\treturn { type: \"start\", partial: cloneStartMessage(event.partial) };\n\t\t\tcase \"done\":\n\t\t\t\tif (!this.started) throw new Error(\"Assistant message done event appears before start\");\n\t\t\t\tthis.terminal = true;\n\t\t\t\treturn undefined;\n\t\t\tcase \"error\":\n\t\t\t\tthis.terminal = true;\n\t\t\t\treturn undefined;\n\t\t}\n\n\t\tif (!this.started) throw new Error(`Assistant message ${event.type} event appears before start`);\n\n\t\tswitch (event.type) {\n\t\t\tcase \"text_start\": {\n\t\t\t\tconst content = eventBlock(event);\n\t\t\t\tif (content.type !== \"text\") {\n\t\t\t\t\tthrow new Error(`text_start event points to ${content.type} block at index ${event.contentIndex}`);\n\t\t\t\t}\n\t\t\t\tthis.startBlock(event.contentIndex, {\n\t\t\t\t\tkind: \"text\",\n\t\t\t\t\tcoveredChars: content.text.length,\n\t\t\t\t\tdeltaChars: 0,\n\t\t\t\t});\n\t\t\t\treturn { type: \"text_start\", contentIndex: event.contentIndex, content: cloneTextContent(content) };\n\t\t\t}\n\t\t\tcase \"text_delta\":\n\t\t\t\treturn this.encodeTextDelta(event.contentIndex, event.delta, \"text\");\n\t\t\tcase \"text_end\": {\n\t\t\t\tconst content = eventBlock(event);\n\t\t\t\tif (content.type !== \"text\") {\n\t\t\t\t\tthrow new Error(`text_end event points to ${content.type} block at index ${event.contentIndex}`);\n\t\t\t\t}\n\t\t\t\tthis.endBlock(event.contentIndex, \"text\");\n\t\t\t\treturn {\n\t\t\t\t\ttype: \"text_end\",\n\t\t\t\t\tcontentIndex: event.contentIndex,\n\t\t\t\t\tcontent: event.content,\n\t\t\t\t\t...(content.textSignature === undefined ? {} : { textSignature: content.textSignature }),\n\t\t\t\t};\n\t\t\t}\n\t\t\tcase \"thinking_start\": {\n\t\t\t\tconst content = eventBlock(event);\n\t\t\t\tif (content.type !== \"thinking\") {\n\t\t\t\t\tthrow new Error(`thinking_start event points to ${content.type} block at index ${event.contentIndex}`);\n\t\t\t\t}\n\t\t\t\tthis.startBlock(event.contentIndex, {\n\t\t\t\t\tkind: \"thinking\",\n\t\t\t\t\tcoveredChars: content.thinking.length,\n\t\t\t\t\tdeltaChars: 0,\n\t\t\t\t});\n\t\t\t\treturn {\n\t\t\t\t\ttype: \"thinking_start\",\n\t\t\t\t\tcontentIndex: event.contentIndex,\n\t\t\t\t\tcontent: cloneThinkingContent(content),\n\t\t\t\t};\n\t\t\t}\n\t\t\tcase \"thinking_delta\":\n\t\t\t\treturn this.encodeTextDelta(event.contentIndex, event.delta, \"thinking\");\n\t\t\tcase \"thinking_end\": {\n\t\t\t\tconst content = eventBlock(event);\n\t\t\t\tif (content.type !== \"thinking\") {\n\t\t\t\t\tthrow new Error(`thinking_end event points to ${content.type} block at index ${event.contentIndex}`);\n\t\t\t\t}\n\t\t\t\tthis.endBlock(event.contentIndex, \"thinking\");\n\t\t\t\treturn {\n\t\t\t\t\ttype: \"thinking_end\",\n\t\t\t\t\tcontentIndex: event.contentIndex,\n\t\t\t\t\tcontent: event.content,\n\t\t\t\t\t...(content.thinkingSignature === undefined ? {} : { thinkingSignature: content.thinkingSignature }),\n\t\t\t\t\t...(content.redacted === undefined ? {} : { redacted: content.redacted }),\n\t\t\t\t};\n\t\t\t}\n\t\t\tcase \"toolcall_start\": {\n\t\t\t\tconst content = eventBlock(event);\n\t\t\t\tif (content.type !== \"toolCall\") {\n\t\t\t\t\tthrow new Error(`toolcall_start event points to ${content.type} block at index ${event.contentIndex}`);\n\t\t\t\t}\n\t\t\t\tconst snapshotArguments = serializedArguments(content.arguments);\n\t\t\t\tconst caughtUp = snapshotArguments === EMPTY_PARSED_TOOL_ARGUMENTS;\n\t\t\t\tthis.startBlock(event.contentIndex, {\n\t\t\t\t\tkind: \"toolCall\",\n\t\t\t\t\tcaughtUp,\n\t\t\t\t\tcatchupJson: \"\",\n\t\t\t\t\tsnapshotArguments: caughtUp ? \"\" : snapshotArguments,\n\t\t\t\t});\n\t\t\t\treturn { type: \"toolcall_start\", contentIndex: event.contentIndex, toolCall: cloneToolCall(content) };\n\t\t\t}\n\t\t\tcase \"toolcall_delta\": {\n\t\t\t\tconst state = this.block(event.contentIndex, \"toolCall\");\n\t\t\t\tif (state.kind !== \"toolCall\") throw new Error(\"Unreachable tool-call encoder state\");\n\t\t\t\tif (state.caughtUp) {\n\t\t\t\t\treturn event.delta.length === 0\n\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t: { type: \"toolcall_delta\", contentIndex: event.contentIndex, delta: event.delta };\n\t\t\t\t}\n\t\t\t\tstate.catchupJson += event.delta;\n\t\t\t\tconst argumentsValue = parseStreamingJson<ToolCall[\"arguments\"]>(state.catchupJson);\n\t\t\t\tif (serializedArguments(argumentsValue) !== state.snapshotArguments) {\n\t\t\t\t\t// Legacy grammar calls include the initial input in toolcall_start, but their\n\t\t\t\t\t// JSON delta stream still begins at an empty input. Its parsed arguments can\n\t\t\t\t\t// therefore extend, rather than exactly reproduce, the start snapshot.\n\t\t\t\t\tconst snapshotArguments = parseStreamingJson<ToolCall[\"arguments\"]>(state.snapshotArguments);\n\t\t\t\t\tif (!isJsonPrefix(snapshotArguments, argumentsValue)) return undefined;\n\t\t\t\t}\n\t\t\t\tstate.caughtUp = true;\n\t\t\t\tstate.snapshotArguments = \"\";\n\t\t\t\tconst json = state.catchupJson;\n\t\t\t\tstate.catchupJson = \"\";\n\t\t\t\treturn json.length === 0\n\t\t\t\t\t? undefined\n\t\t\t\t\t: { type: \"toolcall_checkpoint\", contentIndex: event.contentIndex, json };\n\t\t\t}\n\t\t\tcase \"toolcall_end\": {\n\t\t\t\tconst content = eventBlock(event);\n\t\t\t\tif (content.type !== \"toolCall\") {\n\t\t\t\t\tthrow new Error(`toolcall_end event points to ${content.type} block at index ${event.contentIndex}`);\n\t\t\t\t}\n\t\t\t\tif (event.toolCall.type !== \"toolCall\") {\n\t\t\t\t\tthrow new Error(`toolcall_end event has invalid tool call at index ${event.contentIndex}`);\n\t\t\t\t}\n\t\t\t\tthis.endBlock(event.contentIndex, \"toolCall\");\n\t\t\t\treturn {\n\t\t\t\t\ttype: \"toolcall_end\",\n\t\t\t\t\tcontentIndex: event.contentIndex,\n\t\t\t\t\tid: event.toolCall.id,\n\t\t\t\t\tname: event.toolCall.name,\n\t\t\t\t\targuments: structuredClone(event.toolCall.arguments),\n\t\t\t\t\t...(event.toolCall.thoughtSignature === undefined\n\t\t\t\t\t\t? {}\n\t\t\t\t\t\t: { thoughtSignature: event.toolCall.thoughtSignature }),\n\t\t\t\t\t...(event.toolCall.namespace === undefined ? {} : { namespace: event.toolCall.namespace }),\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate startBlock(contentIndex: number, state: EncoderBlockState): void {\n\t\tassertContentIndex(contentIndex);\n\t\tif (this.blocks.has(contentIndex)) {\n\t\t\tthrow new Error(`Assistant message block ${contentIndex} starts more than once`);\n\t\t}\n\t\tthis.blocks.set(contentIndex, state);\n\t}\n\n\tprivate block(contentIndex: number, kind: EncoderBlockState[\"kind\"]): EncoderBlockState {\n\t\tassertContentIndex(contentIndex);\n\t\tconst state = this.blocks.get(contentIndex);\n\t\tif (state === undefined) throw new Error(`Assistant message ${kind} block ${contentIndex} has not started`);\n\t\tif (state.kind !== kind) {\n\t\t\tthrow new Error(`Assistant message block ${contentIndex} is ${state.kind}, not ${kind}`);\n\t\t}\n\t\treturn state;\n\t}\n\n\tprivate endBlock(contentIndex: number, kind: EncoderBlockState[\"kind\"]): void {\n\t\tthis.block(contentIndex, kind);\n\t\tthis.blocks.delete(contentIndex);\n\t}\n\n\tprivate encodeTextDelta(\n\t\tcontentIndex: number,\n\t\tdelta: string,\n\t\tkind: \"text\" | \"thinking\",\n\t): AssistantMessageFrame | undefined {\n\t\tconst state = this.block(contentIndex, kind);\n\t\tif (state.kind === \"toolCall\") throw new Error(\"Unreachable text encoder state\");\n\t\tconst deltaStart = state.deltaChars;\n\t\tstate.deltaChars += delta.length;\n\t\tconst covered = Math.max(0, state.coveredChars - deltaStart);\n\t\tif (covered >= delta.length) return undefined;\n\t\tconst uncovered = covered === 0 ? delta : delta.slice(covered);\n\t\treturn kind === \"text\"\n\t\t\t? { type: \"text_delta\", contentIndex, delta: uncovered }\n\t\t\t: { type: \"thinking_delta\", contentIndex, delta: uncovered };\n\t}\n}\n\nfunction appendBlock(\n\tmessage: AssistantMessage,\n\tstates: Map<number, ReducerBlockState>,\n\tcontentIndex: number,\n\tblock: TextContent | ThinkingContent | ToolCall,\n\tstate: ReducerBlockState,\n): void {\n\tassertContentIndex(contentIndex);\n\tif (contentIndex !== message.content.length) {\n\t\tconst reason = contentIndex < message.content.length ? \"already exists\" : \"would leave a gap\";\n\t\tthrow new Error(`Cannot start assistant message block at index ${contentIndex}: ${reason}`);\n\t}\n\tmessage.content.push(structuredClone(block));\n\tstates.set(contentIndex, state);\n}\n\nfunction activeBlock(\n\tmessage: AssistantMessage,\n\tstates: Map<number, ReducerBlockState>,\n\tcontentIndex: number,\n\texpectedKind: ReducerBlockState[\"kind\"],\n\tframeType: AssistantMessageFrame[\"type\"],\n): { block: TextContent | ThinkingContent | ToolCall; state: ReducerBlockState } {\n\tassertContentIndex(contentIndex);\n\tconst state = states.get(contentIndex);\n\tconst block = message.content[contentIndex];\n\tif (!state || !block) {\n\t\tthrow new Error(`${frameType} frame has no started block at index ${contentIndex}`);\n\t}\n\tif (state.kind !== expectedKind || block.type !== expectedKind) {\n\t\tthrow new Error(\n\t\t\t`${frameType} frame expected ${expectedKind} block at index ${contentIndex}, found ${block.type}`,\n\t\t);\n\t}\n\tif (state.ended) {\n\t\tthrow new Error(`${frameType} frame follows the end of block at index ${contentIndex}`);\n\t}\n\treturn { block, state };\n}\n\n/**\n * Replay compact frames without mutating them. Returns `undefined` when the\n * iterable contains no start frame.\n */\nexport function reduceAssistantMessageFrames(frames: Iterable<AssistantMessageFrame>): AssistantMessage | undefined {\n\tlet message: AssistantMessage | undefined;\n\tlet frameBeforeStart: AssistantMessageFrame[\"type\"] | undefined;\n\tconst states = new Map<number, ReducerBlockState>();\n\n\tfor (const frame of frames) {\n\t\tif (frame.type === \"start\") {\n\t\t\tif (message) throw new Error(\"Assistant message frame sequence contains more than one start frame\");\n\t\t\tif (frameBeforeStart !== undefined)\n\t\t\t\tthrow new Error(`${frameBeforeStart} frame appears before the start frame`);\n\t\t\tmessage = structuredClone(frame.partial);\n\t\t\tcontinue;\n\t\t}\n\t\tif (!message) {\n\t\t\tframeBeforeStart ??= frame.type;\n\t\t\tcontinue;\n\t\t}\n\n\t\tswitch (frame.type) {\n\t\t\tcase \"text_start\":\n\t\t\t\tif (frame.content.type !== \"text\") {\n\t\t\t\t\tthrow new Error(`text_start frame contains ${frame.content.type} content`);\n\t\t\t\t}\n\t\t\t\tappendBlock(message, states, frame.contentIndex, frame.content, { kind: \"text\", ended: false });\n\t\t\t\tbreak;\n\t\t\tcase \"text_delta\": {\n\t\t\t\tconst { block } = activeBlock(message, states, frame.contentIndex, \"text\", frame.type);\n\t\t\t\tif (block.type !== \"text\") throw new Error(\"Unreachable text frame state\");\n\t\t\t\tblock.text += frame.delta;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"text_end\": {\n\t\t\t\tconst { block, state } = activeBlock(message, states, frame.contentIndex, \"text\", frame.type);\n\t\t\t\tif (block.type !== \"text\") throw new Error(\"Unreachable text frame state\");\n\t\t\t\tblock.text = frame.content;\n\t\t\t\tdelete block.textSignature;\n\t\t\t\tif (frame.textSignature !== undefined) block.textSignature = frame.textSignature;\n\t\t\t\tstate.ended = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"thinking_start\":\n\t\t\t\tif (frame.content.type !== \"thinking\") {\n\t\t\t\t\tthrow new Error(`thinking_start frame contains ${frame.content.type} content`);\n\t\t\t\t}\n\t\t\t\tappendBlock(message, states, frame.contentIndex, frame.content, {\n\t\t\t\t\tkind: \"thinking\",\n\t\t\t\t\tended: false,\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase \"thinking_delta\": {\n\t\t\t\tconst { block } = activeBlock(message, states, frame.contentIndex, \"thinking\", frame.type);\n\t\t\t\tif (block.type !== \"thinking\") throw new Error(\"Unreachable thinking frame state\");\n\t\t\t\tblock.thinking += frame.delta;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"thinking_end\": {\n\t\t\t\tconst { block, state } = activeBlock(message, states, frame.contentIndex, \"thinking\", frame.type);\n\t\t\t\tif (block.type !== \"thinking\") throw new Error(\"Unreachable thinking frame state\");\n\t\t\t\tblock.thinking = frame.content;\n\t\t\t\tdelete block.thinkingSignature;\n\t\t\t\tdelete block.redacted;\n\t\t\t\tif (frame.thinkingSignature !== undefined) block.thinkingSignature = frame.thinkingSignature;\n\t\t\t\tif (frame.redacted !== undefined) block.redacted = frame.redacted;\n\t\t\t\tstate.ended = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"toolcall_start\":\n\t\t\t\tif (frame.toolCall.type !== \"toolCall\") {\n\t\t\t\t\tthrow new Error(`toolcall_start frame contains ${frame.toolCall.type} content`);\n\t\t\t\t}\n\t\t\t\tappendBlock(message, states, frame.contentIndex, frame.toolCall, {\n\t\t\t\t\tkind: \"toolCall\",\n\t\t\t\t\tended: false,\n\t\t\t\t\tjson: \"\",\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase \"toolcall_checkpoint\": {\n\t\t\t\tconst { block, state } = activeBlock(message, states, frame.contentIndex, \"toolCall\", frame.type);\n\t\t\t\tif (block.type !== \"toolCall\" || state.kind !== \"toolCall\") {\n\t\t\t\t\tthrow new Error(\"Unreachable tool-call checkpoint state\");\n\t\t\t\t}\n\t\t\t\tstate.json = frame.json;\n\t\t\t\tblock.arguments = parseStreamingJson<ToolCall[\"arguments\"]>(frame.json);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"toolcall_delta\": {\n\t\t\t\tconst { block, state } = activeBlock(message, states, frame.contentIndex, \"toolCall\", frame.type);\n\t\t\t\tif (block.type !== \"toolCall\" || state.kind !== \"toolCall\") {\n\t\t\t\t\tthrow new Error(\"Unreachable tool-call frame state\");\n\t\t\t\t}\n\t\t\t\tstate.json += frame.delta;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"toolcall_end\": {\n\t\t\t\tconst { block, state } = activeBlock(message, states, frame.contentIndex, \"toolCall\", frame.type);\n\t\t\t\tif (block.type !== \"toolCall\") throw new Error(\"Unreachable tool-call frame state\");\n\t\t\t\tblock.id = frame.id;\n\t\t\t\tblock.name = frame.name;\n\t\t\t\tblock.arguments = structuredClone(frame.arguments);\n\t\t\t\tdelete block.thoughtSignature;\n\t\t\t\tdelete block.namespace;\n\t\t\t\tif (frame.thoughtSignature !== undefined) block.thoughtSignature = frame.thoughtSignature;\n\t\t\t\tif (frame.namespace !== undefined) block.namespace = frame.namespace;\n\t\t\t\tstate.ended = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (!message) return undefined;\n\tfor (const [contentIndex, state] of states) {\n\t\tif (state.kind !== \"toolCall\" || state.ended || state.json.length === 0) continue;\n\t\tconst block = message.content[contentIndex];\n\t\tif (block?.type !== \"toolCall\") throw new Error(\"Unreachable tool-call frame state\");\n\t\tblock.arguments = parseStreamingJson<ToolCall[\"arguments\"]>(state.json);\n\t}\n\n\treturn message;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"block-symbols.d.ts","sourceRoot":"","sources":["../../src/utils/block-symbols.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,sFAAsF;AACtF,eAAO,MAAM,qBAAqB,eAA2C,CAAC;AAE9E,yFAAyF;AACzF,MAAM,MAAM,2BAA2B,GAAG,MAAM,GAAG;IAAE,CAAC,qBAAqB,CAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAExF,yFAAyF;AACzF,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,2BAA2B,GAAG,IAAI,CAElF;AAED,2FAA2F;AAC3F,eAAO,MAAM,oBAAoB,eAAqC,CAAC;AAEvE,0FAA0F;AAC1F,eAAO,MAAM,sBAAsB,eAA4C,CAAC;AAEhF;;;;;;;;;GASG;AACH,eAAO,MAAM,oBAAoB,eAA0C,CAAC;AAE5E,2FAA2F;AAC3F,eAAO,MAAM,mBAAmB,eAAoC,CAAC;AAErE;;;;;;;;;;GAUG;AACH,eAAO,MAAM,mBAAmB,eAAkD,CAAC;AAEnF,4EAA4E;AAC5E,MAAM,MAAM,yBAAyB,GAAG,MAAM,GAAG;IAAE,CAAC,mBAAmB,CAAC,CAAC,EAAE,IAAI,CAAA;CAAE,CAAC;AAElF,gFAAgF;AAChF,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,yBAAyB,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAEjG;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,yBAAyB,EAAE,MAAM,EAAE,yBAAyB,GAAG,IAAI,CAEjH"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"block-symbols.js","sourceRoot":"","sources":["../../src/utils/block-symbols.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,sFAAsF;AACtF,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAM,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;AAK9E,yFAAyF;AACzF,MAAM,UAAU,yBAAyB,CAAC,KAAkC;IAC3E,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,qBAAqB,CAAC;QAAE,KAAK,CAAC,qBAAqB,CAAC,GAAG,SAAS,CAAC;AAC3F,CAAC;AAED,2FAA2F;AAC3F,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;AAEvE,0FAA0F;AAC1F,MAAM,CAAC,MAAM,sBAAsB,GAAG,MAAM,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;AAEhF;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;AAE5E,2FAA2F;AAC3F,MAAM,CAAC,MAAM,mBAAmB,GAAG,MAAM,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;AAErE;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,MAAM,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;AAKnF,gFAAgF;AAChF,MAAM,UAAU,oBAAoB,CAAC,KAAmD;IACvF,OAAO,KAAK,EAAE,CAAC,mBAAmB,CAAC,KAAK,IAAI,CAAC;AAC9C,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAiC,EAAE,MAAiC;IAC1G,IAAI,MAAM,CAAC,mBAAmB,CAAC,KAAK,IAAI;QAAE,MAAM,CAAC,mBAAmB,CAAC,GAAG,IAAI,CAAC;AAC9E,CAAC","sourcesContent":["/**\n * Symbol-keyed markers carried on streamed content blocks. Symbol keys never\n * survive the JSONL persistence round-trip, so these are strictly in-memory\n * coordination between a provider stream and the agent loop that consumes it.\n *\n * They are registry symbols (`Symbol.for`) because the stream and the loop can\n * hold different copies of this module: the release bundle emits the Cursor\n * provider as a self-contained chunk beside the main graph (#2334).\n */\n\n/** Stores streamed tool-call argument JSON for live renderers and parser recovery. */\nexport const kStreamingPartialJson = Symbol.for(\"provider.block.partialJson\");\n\n/** Carries streamed tool-call argument JSON without exposing a string-keyed property. */\nexport type StreamingPartialJsonCarrier = object & { [kStreamingPartialJson]?: string };\n\n/** Clears streamed tool-call argument JSON without deleting or changing object shape. */\nexport function clearStreamingPartialJson(block: StreamingPartialJsonCarrier): void {\n\tif (Object.hasOwn(block, kStreamingPartialJson)) block[kStreamingPartialJson] = undefined;\n}\n\n/** Stores a provider-local stream block index without exposing a string-keyed property. */\nexport const kStreamingBlockIndex = Symbol.for(\"provider.block.index\");\n\n/** Stores the last parsed argument prefix length for throttled streaming JSON parsing. */\nexport const kStreamingLastParseLen = Symbol.for(\"provider.block.lastParseLen\");\n\n/**\n * The Cursor interaction envelope's `call_id` for a streamed tool-call block.\n *\n * Tracked separately from the block's own `id` because they are NOT the same\n * key: MCP and Pi blocks are filed under the id inside the call's `args`, which\n * is what the exec channel pairs its result under, while every streamed\n * `ToolCall*Update` correlates on the envelope's `call_id`. Matching\n * completions against the block id would mis-route every call whose args carry\n * their own id.\n */\nexport const kStreamingEnvelopeId = Symbol.for(\"provider.block.envelopeId\");\n\n/** Classifies Cursor's in-flight tool-call kind without leaking provider-private state. */\nexport const kStreamingBlockKind = Symbol.for(\"provider.block.kind\");\n\n/**\n * Marks a `toolCall` content block that Cursor's exec channel already\n * executed (via the coding-agent bridge) and whose result is buffered\n * separately for emission alongside the assistant message.\n *\n * The agent loop MUST skip execution of blocks carrying this marker —\n * treating them as a fresh runnable tool call would run the same\n * side-effecting tool (bash, write, delete, …) a second time. Symbol-keyed\n * so it never persists across the JSONL round-trip, where rebuild instead\n * pairs the block with its already-persisted `toolResult` message by id.\n */\nexport const kCursorExecResolved = Symbol.for(\"provider.block.cursorExecResolved\");\n\n/** Carries the resolved marker without exposing a string-keyed property. */\nexport type CursorExecResolvedCarrier = object & { [kCursorExecResolved]?: true };\n\n/** True when a toolCall block was already executed by Cursor's exec channel. */\nexport function isCursorExecResolved(block: CursorExecResolvedCarrier | null | undefined): boolean {\n\treturn block?.[kCursorExecResolved] === true;\n}\n\n/**\n * Copy {@link kCursorExecResolved} onto a cloned/projected toolCall block.\n *\n * Stream projectors that rebuild toolCall objects field-by-field would\n * otherwise drop the marker and let the agent loop re-execute a call Cursor\n * already settled — duplicate toolResults and a second bash/write/delete.\n */\nexport function copyCursorExecResolved(target: CursorExecResolvedCarrier, source: CursorExecResolvedCarrier): void {\n\tif (source[kCursorExecResolved] === true) target[kCursorExecResolved] = true;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"chatgpt-subscription-auth.d.ts","sourceRoot":"","sources":["../../src/utils/chatgpt-subscription-auth.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,eAAO,MAAM,oCAAoC,gCAAgC,CAAC;AAElF;;;;;;GAMG;AACH,wBAAgB,mCAAmC,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAerF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"chatgpt-subscription-auth.js","sourceRoot":"","sources":["../../src/utils/chatgpt-subscription-auth.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,MAAM,CAAC,MAAM,oCAAoC,GAAG,6BAA6B,CAAC;AAElF;;;;;;GAMG;AACH,MAAM,UAAU,mCAAmC,CAAC,KAAa;IAChE,IAAI,CAAC;QACJ,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/B,MAAM,cAAc,GAAG,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACjE,IAAI,CAAC,cAAc;YAAE,OAAO,SAAS,CAAC;QACtC,MAAM,MAAM,GAAG,cAAc,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACxE,MAAM,OAAO,GAAY,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;QAChG,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,OAAO,SAAS,CAAC;QAC9D,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,oCAAoC,CAAC,CAAC;QACxE,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;YAAE,OAAO,SAAS,CAAC;QACxD,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC;QAC1D,OAAO,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IACtF,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,SAAS,CAAC;IAClB,CAAC;AACF,CAAC","sourcesContent":["/** The JWT claim holding the ChatGPT account that owns a Codex credential. */\nexport const CHATGPT_SUBSCRIPTION_AUTH_CLAIM_PATH = \"https://api.openai.com/auth\";\n\n/**\n * Reads the stable ChatGPT account identifier from a Codex access token.\n *\n * This deliberately uses only browser primitives so request code and OAuth\n * code can share it without pulling Node-only authentication modules into\n * browser consumers.\n */\nexport function extractChatGptSubscriptionAccountId(token: string): string | undefined {\n\ttry {\n\t\tconst parts = token.split(\".\");\n\t\tconst encodedPayload = parts.length === 3 ? parts[1] : undefined;\n\t\tif (!encodedPayload) return undefined;\n\t\tconst base64 = encodedPayload.replaceAll(\"-\", \"+\").replaceAll(\"_\", \"/\");\n\t\tconst payload: unknown = JSON.parse(atob(base64.padEnd(Math.ceil(base64.length / 4) * 4, \"=\")));\n\t\tif (!payload || typeof payload !== \"object\") return undefined;\n\t\tconst auth = Reflect.get(payload, CHATGPT_SUBSCRIPTION_AUTH_CLAIM_PATH);\n\t\tif (!auth || typeof auth !== \"object\") return undefined;\n\t\tconst accountId = Reflect.get(auth, \"chatgpt_account_id\");\n\t\treturn typeof accountId === \"string\" && accountId.length > 0 ? accountId : undefined;\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"claude-code-version-cache.d.ts","sourceRoot":"","sources":["../../src/utils/claude-code-version-cache.ts"],"names":[],"mappings":"AASA,OAAO,EAEN,KAAK,sBAAsB,EAE3B,MAAM,0BAA0B,CAAC;AAIlC,gHAAgH;AAChH,wBAAgB,iCAAiC,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAI9F;AAWD,wBAAgB,gCAAgC,CAAC,IAAI,EAAE,MAAM,GAAG,sBAAsB,CA4BrF;AAED,MAAM,WAAW,wCAAwC;IACxD,sEAAsE;IACtE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,qFAAqF;IACrF,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,wBAAgB,iCAAiC,CAAC,OAAO,GAAE,wCAA6C,GAAG,IAAI,CAO9G"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"claude-code-version-cache.js","sourceRoot":"","sources":["../../src/utils/claude-code-version-cache.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAGN,6BAA6B,GAC7B,MAAM,0BAA0B,CAAC;AAElC,MAAM,UAAU,GAAG,0BAA0B,CAAC;AAE9C,gHAAgH;AAChH,MAAM,UAAU,iCAAiC,CAAC,GAAG,GAAsB,OAAO,CAAC,GAAG;IACrF,MAAM,QAAQ,GACb,GAAG,CAAC,sBAAsB,IAAI,GAAG,CAAC,gBAAgB,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,eAAe,CAAC;IAC9G,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,UAAU,EAAE,CAAC;AACvD,CAAC;AAED,SAAS,eAAe,CAAC,KAAc;IACtC,OAAO,CACN,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,OAAQ,KAA+B,CAAC,OAAO,KAAK,QAAQ;QAC5D,OAAQ,KAAiC,CAAC,SAAS,KAAK,QAAQ,CAChE,CAAC;AACH,CAAC;AAED,MAAM,UAAU,gCAAgC,CAAC,IAAY;IAC5D,IAAI,aAAa,GAAG,IAAI,CAAC;IACzB,OAAO;QACN,IAAI,EAAE,GAAG,EAAE;YACV,IAAI,MAAe,CAAC;YACpB,IAAI,CAAC;gBACJ,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;YACjD,CAAC;YAAC,MAAM,CAAC;gBACR,iFAAiF;gBACjF,6DAA6D;gBAC7D,OAAO,SAAS,CAAC;YAClB,CAAC;YACD,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;QACrD,CAAC;QACD,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE;YAChB,IAAI,CAAC,aAAa;gBAAE,OAAO;YAC3B,IAAI,CAAC;gBACJ,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC9C,MAAM,aAAa,GAAG,GAAG,IAAI,IAAI,OAAO,CAAC,GAAG,MAAM,CAAC;gBACnD,aAAa,CAAC,aAAa,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC5D,UAAU,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;YACjC,CAAC;YAAC,MAAM,CAAC;gBACR,8EAA8E;gBAC9E,oEAAoE;gBACpE,aAAa,GAAG,KAAK,CAAC;YACvB,CAAC;QACF,CAAC;KACD,CAAC;AACH,CAAC;AASD,MAAM,UAAU,iCAAiC,CAAC,OAAO,GAA6C,EAAE;IACvG,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IACxB,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,UAAU,KAAK,SAAS,IAAI,GAAG,CAAC,UAAU,KAAK,EAAE,IAAI,GAAG,CAAC,UAAU,KAAK,GAAG,CAAC,CAAC;IACrH,6BAA6B,CAC5B,gCAAgC,CAAC,OAAO,CAAC,IAAI,IAAI,iCAAiC,CAAC,GAAG,CAAC,CAAC,EACxF,EAAE,OAAO,EAAE,CACX,CAAC;AACH,CAAC","sourcesContent":["/**\n * Node entry point for the Claude Code version cache.\n *\n * `claude-code-version.ts` is browser-safe and keeps no state on disk. Hosts with a filesystem\n * call `installClaudeCodeVersionFileStore()` once at startup so the resolved version survives\n * process restarts and one lookup per six hours serves every session on the machine.\n */\nimport { mkdirSync, readFileSync, renameSync, writeFileSync } from \"node:fs\";\nimport { dirname } from \"node:path\";\nimport {\n\ttype CachedClaudeCodeVersion,\n\ttype ClaudeCodeVersionStore,\n\tinstallClaudeCodeVersionStore,\n} from \"./claude-code-version.ts\";\n\nconst CACHE_FILE = \"claude-code-version.json\";\n\n/** Same resolution as the other pi-ai stores: the agent directory the host configured, then the default one. */\nexport function resolveClaudeCodeVersionCachePath(env: NodeJS.ProcessEnv = process.env): string {\n\tconst agentDir =\n\t\tenv.SENPI_CODING_AGENT_DIR ?? env.CODING_AGENT_DIR ?? `${(env.HOME ?? \".\").replace(/\\/$/, \"\")}/.senpi/agent`;\n\treturn `${agentDir.replace(/\\/$/, \"\")}/${CACHE_FILE}`;\n}\n\nfunction isCachedVersion(value: unknown): value is CachedClaudeCodeVersion {\n\treturn (\n\t\ttypeof value === \"object\" &&\n\t\tvalue !== null &&\n\t\ttypeof (value as { version?: unknown }).version === \"string\" &&\n\t\ttypeof (value as { checkedAt?: unknown }).checkedAt === \"number\"\n\t);\n}\n\nexport function createClaudeCodeVersionFileStore(path: string): ClaudeCodeVersionStore {\n\tlet savingEnabled = true;\n\treturn {\n\t\tload: () => {\n\t\t\tlet parsed: unknown;\n\t\t\ttry {\n\t\t\t\tparsed = JSON.parse(readFileSync(path, \"utf8\"));\n\t\t\t} catch {\n\t\t\t\t// No file on first run, and a truncated or hand-edited one is the same situation\n\t\t\t\t// for a cache: the bundled floor is the documented fallback.\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\treturn isCachedVersion(parsed) ? parsed : undefined;\n\t\t},\n\t\tsave: (record) => {\n\t\t\tif (!savingEnabled) return;\n\t\t\ttry {\n\t\t\t\tmkdirSync(dirname(path), { recursive: true });\n\t\t\t\tconst temporaryPath = `${path}.${process.pid}.tmp`;\n\t\t\t\twriteFileSync(temporaryPath, `${JSON.stringify(record)}\\n`);\n\t\t\t\trenameSync(temporaryPath, path);\n\t\t\t} catch {\n\t\t\t\t// A read-only agent directory must not fail the live request, and one failure\n\t\t\t\t// disables saving so a broken path cannot cost a write per refresh.\n\t\t\t\tsavingEnabled = false;\n\t\t\t}\n\t\t},\n\t};\n}\n\nexport interface InstallClaudeCodeVersionFileStoreOptions {\n\t/** Cache file; defaults to `<agent dir>/claude-code-version.json`. */\n\treadonly path?: string;\n\t/** Serve the cache but never fetch (host offline mode); defaults to `PI_OFFLINE`. */\n\treadonly offline?: boolean;\n}\n\nexport function installClaudeCodeVersionFileStore(options: InstallClaudeCodeVersionFileStoreOptions = {}): void {\n\tconst env = process.env;\n\tconst offline = options.offline ?? (env.PI_OFFLINE !== undefined && env.PI_OFFLINE !== \"\" && env.PI_OFFLINE !== \"0\");\n\tinstallClaudeCodeVersionStore(\n\t\tcreateClaudeCodeVersionFileStore(options.path ?? resolveClaudeCodeVersionCachePath(env)),\n\t\t{ offline },\n\t);\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"claude-code-version.d.ts","sourceRoot":"","sources":["../../src/utils/claude-code-version.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG/C,uEAAuE;AACvE,eAAO,MAAM,2BAA2B,2BAA2B,CAAC;AAEpE;;;GAGG;AACH,eAAO,MAAM,0BAA0B,qHAC4E,CAAC;AACpH,eAAO,MAAM,uBAAuB,gEAAgE,CAAC;AAQrG,MAAM,WAAW,uBAAuB;IACvC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,sBAAsB;IACtC,IAAI,IAAI,uBAAuB,GAAG,SAAS,CAAC;IAC5C,IAAI,CAAC,MAAM,EAAE,uBAAuB,GAAG,IAAI,CAAC;CAC5C;AAED,MAAM,WAAW,gCAAgC;IAChD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,0GAA0G;IAC1G,QAAQ,CAAC,KAAK,EAAE,sBAAsB,GAAG,IAAI,CAAC;IAC9C,2DAA2D;IAC3D,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IAC9B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IAC5B,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;CACpC;AAED,MAAM,WAAW,yBAAyB;IACzC,qFAAqF;IACrF,GAAG,IAAI,MAAM,CAAC;IACd,4EAA4E;IAC5E,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAC3B,sGAAsG;IACtG,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;CAC/B;AAED,wBAAgB,yBAAyB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAQtE;AA2CD;;;GAGG;AACH,wBAAsB,4BAA4B,CAAC,SAAS,GAAE,OAAO,KAAa,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAE/G;AAED,wBAAgB,kCAAkC,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAItF;AAED,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,KAAK,GAAG;IAAE,MAAM,EAAE,GAAG,CAAA;CAAE,CAE/F;AAED,wBAAgB,+BAA+B,CAAC,OAAO,EAAE,gCAAgC,GAAG,yBAAyB,CAuEpH;AAOD;;;;GAIG;AACH,wBAAgB,6BAA6B,CAC5C,KAAK,EAAE,sBAAsB,GAAG,IAAI,EACpC,OAAO,GAAE;IAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAO,GAC1C,IAAI,CAIN;AAeD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,WAAW,GAAG,MAAM,CAE7E;AAED;;;;GAIG;AACH,wBAAsB,wBAAwB,CAC7C,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,EAClB,GAAG,CAAC,EAAE,WAAW,GACf,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAK7B;AAED,wBAAgB,2BAA2B,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEtE"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"claude-code-version.js","sourceRoot":"","sources":["../../src/utils/claude-code-version.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Claude Code version the Anthropic OAuth `claude-cli/<version>` fingerprint advertises.\n *\n * Anthropic gates new models behind a minimum Claude Code version and answers an older\n * fingerprint with HTTP 400 `claude_code_version_too_old`. A build-time constant goes stale\n * between releases, so the fingerprint is the higher of the bundled floor and the latest\n * published Claude Code release, resolved in the background and cached by the host through\n * `ClaudeCodeVersionStore`. A request never waits on the lookup: it signs with whatever is\n * known at that instant, and a too-old rejection raises the version at once.\n */\nimport type { ProviderEnv } from \"../types.ts\";\nimport { getProviderEnvValue } from \"./provider-env.ts\";\n\n/** Exact `X.Y.Z` pins the fingerprint and skips the network lookup. */\nexport const CLAUDE_CODE_VERSION_PIN_ENV = \"PI_CLAUDE_CODE_VERSION\";\n\n/**\n * Anthropic's native-installer release channel. `stable` lags the npm package during a staged\n * rollout, so `latest` is the channel that matches what a freshly updated Claude Code reports.\n */\nexport const CLAUDE_RELEASE_CHANNEL_URL =\n\t\"https://storage.googleapis.com/claude-code-dist-86c565f3-f756-42ad-8dfa-d59b1c096819/claude-code-releases/latest\";\nexport const CLAUDE_NPM_DIST_TAG_URL = \"https://registry.npmjs.org/@anthropic-ai/claude-code/latest\";\n\nconst REFRESH_INTERVAL_MS = 6 * 60 * 60 * 1000;\nconst FETCH_TIMEOUT_MS = 5_000;\nconst EXACT_SEMVER = /^(\\d+)\\.(\\d+)\\.(\\d+)$/;\nconst EMBEDDED_SEMVER = /(\\d+\\.\\d+\\.\\d+)/;\nconst TOO_OLD_REJECTION = /claude_code_version_too_old|does not support this model; version (\\d+\\.\\d+\\.\\d+) or newer/i;\n\nexport interface CachedClaudeCodeVersion {\n\treadonly version: string;\n\treadonly checkedAt: number;\n}\n\nexport interface ClaudeCodeVersionStore {\n\tload(): CachedClaudeCodeVersion | undefined;\n\tsave(record: CachedClaudeCodeVersion): void;\n}\n\nexport interface ClaudeCodeVersionResolverOptions {\n\treadonly floor: string;\n\treadonly pinned?: string | undefined;\n\t/** `null` disables caching and network resolution: the resolver answers the floor or a raised version. */\n\treadonly store: ClaudeCodeVersionStore | null;\n\t/** Serve the cache but never fetch (host offline mode). */\n\treadonly offline?: boolean;\n\treadonly fetch?: typeof fetch;\n\treadonly now?: () => number;\n\treadonly refreshIntervalMs?: number;\n}\n\nexport interface ClaudeCodeVersionResolver {\n\t/** Current fingerprint; schedules one background refresh when the cache is stale. */\n\tget(): string;\n\t/** Refresh now (deduplicated); resolves with the fingerprint afterwards. */\n\trefresh(): Promise<string>;\n\t/** Adopt `version` at once when it is newer than the current fingerprint; returns the fingerprint. */\n\traise(version: string): string;\n}\n\nexport function compareClaudeCodeVersions(a: string, b: string): number {\n\tconst left = a.split(\".\").map(Number);\n\tconst right = b.split(\".\").map(Number);\n\tfor (let i = 0; i < 3; i++) {\n\t\tconst diff = (left[i] ?? 0) - (right[i] ?? 0);\n\t\tif (diff !== 0) return diff;\n\t}\n\treturn 0;\n}\n\nfunction isExactSemver(value: unknown): value is string {\n\treturn typeof value === \"string\" && EXACT_SEMVER.test(value);\n}\n\nfunction highest(candidates: ReadonlyArray<string | undefined>): string | undefined {\n\tlet best: string | undefined;\n\tfor (const candidate of candidates) {\n\t\tif (!isExactSemver(candidate)) continue;\n\t\tif (best === undefined || compareClaudeCodeVersions(candidate, best) > 0) best = candidate;\n\t}\n\treturn best;\n}\n\nasync function fetchText(fetchImpl: typeof fetch, url: string): Promise<string | undefined> {\n\ttry {\n\t\tconst response = await fetchImpl(url, { signal: AbortSignal.timeout(FETCH_TIMEOUT_MS) });\n\t\treturn response.ok ? await response.text() : undefined;\n\t} catch {\n\t\t// Offline, DNS failure, or timeout: the caller keeps the floor or the cached value.\n\t\treturn undefined;\n\t}\n}\n\nasync function fetchReleaseChannel(fetchImpl: typeof fetch): Promise<string | undefined> {\n\tconst text = await fetchText(fetchImpl, CLAUDE_RELEASE_CHANNEL_URL);\n\treturn text === undefined ? undefined : EMBEDDED_SEMVER.exec(text.trim())?.[1];\n}\n\nasync function fetchNpmDistTag(fetchImpl: typeof fetch): Promise<string | undefined> {\n\tconst text = await fetchText(fetchImpl, CLAUDE_NPM_DIST_TAG_URL);\n\tif (text === undefined) return undefined;\n\ttry {\n\t\tconst data: unknown = JSON.parse(text);\n\t\tconst version = typeof data === \"object\" && data !== null && \"version\" in data ? data.version : undefined;\n\t\treturn typeof version === \"string\" ? EMBEDDED_SEMVER.exec(version)?.[1] : undefined;\n\t} catch {\n\t\t// A registry error page is not a dist-tag document.\n\t\treturn undefined;\n\t}\n}\n\n/**\n * Latest published Claude Code version: the higher of the native-installer `latest` channel and\n * the npm dist-tag, so one lagging or unavailable source cannot hold the fingerprint back.\n */\nexport async function fetchLatestClaudeCodeVersion(fetchImpl: typeof fetch = fetch): Promise<string | undefined> {\n\treturn highest(await Promise.all([fetchReleaseChannel(fetchImpl), fetchNpmDistTag(fetchImpl)]));\n}\n\nexport function requiredClaudeCodeVersionFromError(message: string): string | undefined {\n\tconst match = TOO_OLD_REJECTION.exec(message);\n\tif (!match) return undefined;\n\treturn match[1] ?? /version (\\d+\\.\\d+\\.\\d+) or newer/i.exec(message)?.[1];\n}\n\nexport function isClaudeCodeVersionTooOldError(error: unknown): error is Error & { status: 400 } {\n\treturn error instanceof Error && \"status\" in error && error.status === 400 && TOO_OLD_REJECTION.test(error.message);\n}\n\nexport function createClaudeCodeVersionResolver(options: ClaudeCodeVersionResolverOptions): ClaudeCodeVersionResolver {\n\tconst { floor, store } = options;\n\tconst offline = options.offline === true;\n\tconst fetchImpl = options.fetch ?? fetch;\n\tconst now = options.now ?? Date.now;\n\tconst refreshIntervalMs = options.refreshIntervalMs ?? REFRESH_INTERVAL_MS;\n\tconst pinned = isExactSemver(options.pinned) ? options.pinned : undefined;\n\n\tlet loaded = false;\n\tlet resolved: string | undefined;\n\tlet checkedAt = 0;\n\tlet inflight: Promise<string> | undefined;\n\n\tconst current = (): string =>\n\t\tresolved !== undefined && compareClaudeCodeVersions(resolved, floor) > 0 ? resolved : floor;\n\n\tconst loadCache = (): void => {\n\t\tif (loaded || store === null) return;\n\t\tloaded = true;\n\t\tconst record = store.load();\n\t\tif (record && isExactSemver(record.version) && Number.isFinite(record.checkedAt)) {\n\t\t\tresolved = record.version;\n\t\t\tcheckedAt = record.checkedAt;\n\t\t}\n\t};\n\n\tconst persist = (): void => {\n\t\tif (store !== null && resolved !== undefined) store.save({ version: resolved, checkedAt });\n\t};\n\n\tconst refresh = (): Promise<string> => {\n\t\tif (pinned !== undefined || store === null) return Promise.resolve(pinned ?? current());\n\t\tloadCache();\n\t\tif (offline) return Promise.resolve(current());\n\t\tinflight ??= (async () => {\n\t\t\ttry {\n\t\t\t\tconst latest = await fetchLatestClaudeCodeVersion(fetchImpl);\n\t\t\t\t// A failed lookup still counts as a check: an offline host waits a full interval\n\t\t\t\t// before trying again instead of retrying on every request.\n\t\t\t\tcheckedAt = now();\n\t\t\t\tif (latest !== undefined && (resolved === undefined || compareClaudeCodeVersions(latest, resolved) > 0)) {\n\t\t\t\t\tresolved = latest;\n\t\t\t\t}\n\t\t\t\tpersist();\n\t\t\t} finally {\n\t\t\t\tinflight = undefined;\n\t\t\t}\n\t\t\treturn current();\n\t\t})();\n\t\treturn inflight;\n\t};\n\n\treturn {\n\t\tget() {\n\t\t\tif (pinned !== undefined) return pinned;\n\t\t\tif (store === null) return current();\n\t\t\tloadCache();\n\t\t\tif (!offline && inflight === undefined && now() - checkedAt >= refreshIntervalMs) void refresh();\n\t\t\treturn current();\n\t\t},\n\t\trefresh,\n\t\traise(version) {\n\t\t\tif (pinned !== undefined) return pinned;\n\t\t\tloadCache();\n\t\t\tif (isExactSemver(version) && compareClaudeCodeVersions(version, current()) > 0) {\n\t\t\t\tresolved = version;\n\t\t\t\tpersist();\n\t\t\t}\n\t\t\treturn current();\n\t\t},\n\t};\n}\n\nlet installedStore: ClaudeCodeVersionStore | null = null;\nlet installedOffline = false;\nlet defaultResolver: ClaudeCodeVersionResolver | undefined;\nlet defaultFloor: string | undefined;\n\n/**\n * Hosts with a filesystem install their cache here once at startup (see\n * `utils/claude-code-version-cache.ts`); until then, and in browsers, the resolver answers\n * the floor without touching the network.\n */\nexport function installClaudeCodeVersionStore(\n\tstore: ClaudeCodeVersionStore | null,\n\toptions: { readonly offline?: boolean } = {},\n): void {\n\tinstalledStore = store;\n\tinstalledOffline = options.offline === true;\n\tdefaultResolver = undefined;\n}\n\nfunction resolver(floor: string): ClaudeCodeVersionResolver {\n\tif (defaultResolver === undefined || defaultFloor !== floor) {\n\t\tdefaultFloor = floor;\n\t\tdefaultResolver = createClaudeCodeVersionResolver({ floor, store: installedStore, offline: installedOffline });\n\t}\n\treturn defaultResolver;\n}\n\nfunction pinnedClaudeCodeVersion(env?: ProviderEnv): string | undefined {\n\tconst pin = getProviderEnvValue(CLAUDE_CODE_VERSION_PIN_ENV, env)?.trim();\n\treturn isExactSemver(pin) ? pin : undefined;\n}\n\n/**\n * The version the next OAuth request signs with. `floor` is the bundled Claude Code version the\n * caller declares (the `claudeCodeVersion` constant in `api/anthropic-messages.ts`).\n */\nexport function getClaudeCodeVersion(floor: string, env?: ProviderEnv): string {\n\treturn pinnedClaudeCodeVersion(env) ?? resolver(floor).get();\n}\n\n/**\n * After a `claude_code_version_too_old` rejection: adopt the version the error names, or the\n * latest published one, and report the fingerprint to retry with; `undefined` when nothing\n * newer is available (pinned, or already at the required version).\n */\nexport async function recoverClaudeCodeVersion(\n\terror: Error,\n\tfloor: string,\n\tadvertised: string,\n\tenv?: ProviderEnv,\n): Promise<string | undefined> {\n\tif (pinnedClaudeCodeVersion(env) !== undefined) return undefined;\n\tconst required = requiredClaudeCodeVersionFromError(error.message);\n\tconst next = required === undefined ? await resolver(floor).refresh() : resolver(floor).raise(required);\n\treturn compareClaudeCodeVersions(next, advertised) > 0 ? next : undefined;\n}\n\nexport function claudeCodeVersionTooOldHint(advertised: string): string {\n\treturn `senpi advertised claude-cli/${advertised}; Anthropic requires a newer Claude Code for this model. senpi refreshes the version automatically when online; set ${CLAUDE_CODE_VERSION_PIN_ENV}=X.Y.Z to advertise a specific one.`;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"cursor-context-limit.d.ts","sourceRoot":"","sources":["../../src/utils/cursor-context-limit.ts"],"names":[],"mappings":"AAsBA;;;GAGG;AACH,wBAAgB,kCAAkC,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAO/F;AAsDD,sFAAsF;AACtF,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAG7F;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGzE;AAED,qFAAqF;AACrF,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,CAGzF;AAED,wBAAgB,mCAAmC,IAAI,IAAI,CAG1D"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"cursor-context-limit.js","sourceRoot":"","sources":["../../src/utils/cursor-context-limit.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Node entry point for the observed Cursor context limits.\n *\n * The store itself (`cursor/context-limit-store.ts`) is browser-safe because the\n * catalog builders that read it are bundled for the browser. Persistence needs\n * `node:fs`, so it lives here and is installed on first use rather than as an\n * import side effect, which a bundler is free to drop for a package declared\n * side-effect-free. Node callers - the `cursor-agent` stream and the coding\n * agent - use this module; browser-facing code uses the store directly.\n */\nimport { mkdirSync, readFileSync, renameSync, writeFileSync } from \"node:fs\";\nimport { dirname } from \"node:path\";\nimport {\n\ttype CursorContextLimitPersistence,\n\tinstallCursorContextLimitPersistence,\n\tgetCursorContextLimit as readObservedLimit,\n\trecordCursorContextLimit as recordObservedLimit,\n\tresetCursorContextLimitStoreForTest as resetObservedLimits,\n\tresolveCursorContextWindow as resolveObservedWindow,\n} from \"../cursor/context-limit-store.ts\";\nimport { processSingleton } from \"./process-singleton.ts\";\n\n/**\n * Same resolution as the conversation rotation store: an explicit override\n * first, then the agent directory the host configured, then the default one.\n */\nexport function resolveCursorContextLimitStorePath(env: NodeJS.ProcessEnv = process.env): string {\n\tif (env.CURSOR_CONTEXT_LIMIT_STORE) {\n\t\treturn env.CURSOR_CONTEXT_LIMIT_STORE;\n\t}\n\tconst agentDir =\n\t\tenv.SENPI_CODING_AGENT_DIR ?? env.CODING_AGENT_DIR ?? `${(env.HOME ?? \".\").replace(/\\/$/, \"\")}/.senpi/agent`;\n\treturn `${agentDir.replace(/\\/$/, \"\")}/cursor-context-limits.json`;\n}\n\ntype FilePersistence = CursorContextLimitPersistence & { savingEnabled: boolean };\n\n// One port per process: every bundle copy of this module installs the same port, so the store\n// does not re-hydrate from disk whenever a different copy is called.\nconst filePersistence = processSingleton<FilePersistence>(\"@earendil-works/pi-ai:cursor-context-limit-file\", () => {\n\tconst port: FilePersistence = {\n\t\tsavingEnabled: true,\n\t\tload: () => {\n\t\t\tconst limits = new Map<string, number>();\n\t\t\tlet parsed: unknown;\n\t\t\ttry {\n\t\t\t\tparsed = JSON.parse(readFileSync(resolveCursorContextLimitStorePath(), \"utf8\"));\n\t\t\t} catch (error) {\n\t\t\t\t// No file on first run, and a truncated or hand-edited one is the same\n\t\t\t\t// situation for a cache: the catalog window is the documented fallback.\n\t\t\t\tif (error instanceof Error) return limits;\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tif (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) return limits;\n\t\t\tfor (const [modelId, maxTokens] of Object.entries(parsed)) {\n\t\t\t\tif (typeof maxTokens === \"number\" && Number.isFinite(maxTokens) && maxTokens > 0) {\n\t\t\t\t\tlimits.set(modelId, maxTokens);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn limits;\n\t\t},\n\t\tsave: (limits) => {\n\t\t\tif (!port.savingEnabled) return;\n\t\t\tconst path = resolveCursorContextLimitStorePath();\n\t\t\tconst record: Record<string, number> = {};\n\t\t\tfor (const [modelId, maxTokens] of limits) record[modelId] = maxTokens;\n\t\t\ttry {\n\t\t\t\tmkdirSync(dirname(path), { recursive: true });\n\t\t\t\tconst temporaryPath = `${path}.${process.pid}.tmp`;\n\t\t\t\twriteFileSync(temporaryPath, `${JSON.stringify(record, null, 2)}\\n`);\n\t\t\t\trenameSync(temporaryPath, path);\n\t\t\t} catch (error) {\n\t\t\t\t// This file is a cache for the next process. A read-only agent directory\n\t\t\t\t// must not fail the live turn that observed the limit, and one failure\n\t\t\t\t// disables saving so a broken path cannot cost a write per checkpoint.\n\t\t\t\tif (!(error instanceof Error)) throw error;\n\t\t\t\tport.savingEnabled = false;\n\t\t\t}\n\t\t},\n\t};\n\treturn port;\n});\n\nfunction ensurePersistenceInstalled(): void {\n\tinstallCursorContextLimitPersistence(filePersistence);\n}\n\n/** Records the ceiling Cursor reported for `modelId`; ignores non-positive values. */\nexport function recordCursorContextLimit(modelId: string, maxTokens: number | undefined): void {\n\tensurePersistenceInstalled();\n\trecordObservedLimit(modelId, maxTokens);\n}\n\nexport function getCursorContextLimit(modelId: string): number | undefined {\n\tensurePersistenceInstalled();\n\treturn readObservedLimit(modelId);\n}\n\n/** The window to trust for `modelId`: what the server reported, else the catalog. */\nexport function resolveCursorContextWindow(modelId: string, catalogWindow: number): number {\n\tensurePersistenceInstalled();\n\treturn resolveObservedWindow(modelId, catalogWindow);\n}\n\nexport function resetCursorContextLimitStoreForTest(): void {\n\tfilePersistence.savingEnabled = true;\n\tresetObservedLimits();\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"deferred-tools.d.ts","sourceRoot":"","sources":["../../src/utils/deferred-tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAEjD,KAAK,kBAAkB,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;AAInD,yEAAyE;AACzE,wBAAgB,kBAAkB,CACjC,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,OAAO,EAChB,aAAa,GAAE,kBAAqC,GAClD;IAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;CAAE,CA2BpD"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"deferred-tools.js","sourceRoot":"","sources":["../../src/utils/deferred-tools.ts"],"names":[],"mappings":"AAIA,MAAM,gBAAgB,GAAuB,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC;AAE5D,yEAAyE;AACzE,MAAM,UAAU,kBAAkB,CACjC,OAAgB,EAChB,OAAgB,EAChB,aAAa,GAAuB,gBAAgB;IAEpD,MAAM,WAAW,GAAG,IAAI,GAAG,EAAgB,CAAC;IAC5C,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,IAAI,EAAE;QAAE,WAAW,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;IACxF,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,SAAS,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC;IAEnF,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;IACxC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IACpC,KAAK,MAAM,OAAO,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACxC,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAClC,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACrC,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU;oBAAE,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;YACzE,CAAC;QACF,CAAC;aAAM,IAAI,OAAO,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YAC1C,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,cAAc,IAAI,EAAE,EAAE,CAAC;gBACjD,MAAM,cAAc,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;gBAC3C,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,cAAc,CAAC;oBAAE,aAAa,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;YACvE,CAAC;QACF,CAAC;IACF,CAAC;IAED,MAAM,SAAS,GAAW,EAAE,CAAC;IAC7B,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAgB,CAAC;IACzC,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,WAAW,EAAE,CAAC;QACxC,IAAI,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;;YACjD,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IACD,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;AAChC,CAAC","sourcesContent":["import type { Context, Tool } from \"../types.ts\";\n\ntype ToolNameNormalizer = (name: string) => string;\n\nconst identityToolName: ToolNameNormalizer = (name) => name;\n\n/** Split current tools into prefix and transcript-loaded definitions. */\nexport function splitDeferredTools(\n\tcontext: Context,\n\tenabled: boolean,\n\tnormalizeName: ToolNameNormalizer = identityToolName,\n): { immediate: Tool[]; deferred: Map<string, Tool> } {\n\tconst uniqueTools = new Map<string, Tool>();\n\tfor (const tool of context.tools ?? []) uniqueTools.set(normalizeName(tool.name), tool);\n\tif (!enabled) return { immediate: [...uniqueTools.values()], deferred: new Map() };\n\n\tconst deferredNames = new Set<string>();\n\tconst usedNames = new Set<string>();\n\tfor (const message of context.messages) {\n\t\tif (message.role === \"assistant\") {\n\t\t\tfor (const block of message.content) {\n\t\t\t\tif (block.type === \"toolCall\") usedNames.add(normalizeName(block.name));\n\t\t\t}\n\t\t} else if (message.role === \"toolResult\") {\n\t\t\tfor (const name of message.addedToolNames ?? []) {\n\t\t\t\tconst normalizedName = normalizeName(name);\n\t\t\t\tif (!usedNames.has(normalizedName)) deferredNames.add(normalizedName);\n\t\t\t}\n\t\t}\n\t}\n\n\tconst immediate: Tool[] = [];\n\tconst deferred = new Map<string, Tool>();\n\tfor (const [name, tool] of uniqueTools) {\n\t\tif (deferredNames.has(name)) deferred.set(name, tool);\n\t\telse immediate.push(tool);\n\t}\n\treturn { immediate, deferred };\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../src/utils/diagnostics.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,mBAAmB;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,0BAA0B;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,mBAAmB,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAIxD;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,mBAAmB,CAS1E;AAED,wBAAgB,gCAAgC,CAC/C,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,OAAO,EACd,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,0BAA0B,CAE5B;AAED,wBAAgB,gCAAgC,CAAC,CAAC,SAAS;IAAE,WAAW,CAAC,EAAE,0BAA0B,EAAE,CAAA;CAAE,EACxG,OAAO,EAAE,CAAC,EACV,UAAU,EAAE,0BAA0B,GACpC,IAAI,CAEN"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../src/utils/diagnostics.ts"],"names":[],"mappings":"AAcA,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC/C,IAAI,KAAK,YAAY,KAAK;QAAE,OAAO,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC;IAC/D,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,KAAc;IACpD,IAAI,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;IACjG,MAAM,IAAI,GAAI,KAAoC,CAAC,IAAI,CAAC;IACxD,OAAO;QACN,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,SAAS;QAC7B,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,IAAI;QACpC,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,IAAI,EAAE,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;KAC7E,CAAC;AACH,CAAC;AAED,MAAM,UAAU,gCAAgC,CAC/C,IAAY,EACZ,KAAc,EACd,OAAiC;IAEjC,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,sBAAsB,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;AACvF,CAAC;AAED,MAAM,UAAU,gCAAgC,CAC/C,OAAU,EACV,UAAsC;IAEtC,OAAO,CAAC,WAAW,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC;AACpE,CAAC","sourcesContent":["export interface DiagnosticErrorInfo {\n\tname?: string;\n\tmessage: string;\n\tstack?: string;\n\tcode?: string | number;\n}\n\nexport interface AssistantMessageDiagnostic {\n\ttype: string;\n\ttimestamp: number;\n\terror?: DiagnosticErrorInfo;\n\tdetails?: Record<string, unknown>;\n}\n\nexport function formatThrownValue(value: unknown): string {\n\tif (value instanceof Error) return value.message || value.name;\n\tif (typeof value === \"string\") return value;\n\treturn String(value);\n}\n\nexport function extractDiagnosticError(error: unknown): DiagnosticErrorInfo {\n\tif (!(error instanceof Error)) return { name: \"ThrownValue\", message: formatThrownValue(error) };\n\tconst code = (error as Error & { code?: unknown }).code;\n\treturn {\n\t\tname: error.name || undefined,\n\t\tmessage: error.message || error.name,\n\t\tstack: error.stack,\n\t\tcode: typeof code === \"string\" || typeof code === \"number\" ? code : undefined,\n\t};\n}\n\nexport function createAssistantMessageDiagnostic(\n\ttype: string,\n\terror: unknown,\n\tdetails?: Record<string, unknown>,\n): AssistantMessageDiagnostic {\n\treturn { type, timestamp: Date.now(), error: extractDiagnosticError(error), details };\n}\n\nexport function appendAssistantMessageDiagnostic<T extends { diagnostics?: AssistantMessageDiagnostic[] }>(\n\tmessage: T,\n\tdiagnostic: AssistantMessageDiagnostic,\n): void {\n\tmessage.diagnostics = [...(message.diagnostics ?? []), diagnostic];\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"drop-failed-assistant-turns.d.ts","sourceRoot":"","sources":["../../src/utils/drop-failed-assistant-turns.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,wBAAwB,CAAC,CAAC,SAAS;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,QAAQ,EAAE,SAAS,CAAC,EAAE,GAAG,CAAC,EAAE,CAqBhG"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"drop-failed-assistant-turns.js","sourceRoot":"","sources":["../../src/utils/drop-failed-assistant-turns.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,wBAAwB,CAA6B,QAAsB;IAC1F,MAAM,uBAAuB,GAAG,IAAI,GAAG,EAAU,CAAC;IAClD,MAAM,yBAAyB,GAAG,IAAI,GAAG,EAAU,CAAC;IACpD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAChC,MAAM,SAAS,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;QAC3C,IAAI,CAAC,SAAS;YAAE,SAAS;QACzB,MAAM,QAAQ,GAAG,YAAY,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,uBAAuB,CAAC;QAC1G,KAAK,MAAM,KAAK,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;YACvC,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,IAAI,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ;gBAAE,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACvF,CAAC;IACF,CAAC;IACD,KAAK,MAAM,EAAE,IAAI,uBAAuB;QAAE,yBAAyB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAE/E,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE;QAClC,MAAM,SAAS,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;QAC3C,IAAI,SAAS;YAAE,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAC1D,IAAI,OAAO,CAAC,IAAI,KAAK,YAAY,IAAI,YAAY,IAAI,OAAO,IAAI,OAAO,OAAO,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;YACxG,OAAO,CAAC,yBAAyB,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAC3D,CAAC;QACD,OAAO,IAAI,CAAC;IACb,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,OAExB;IACA,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW;QAAE,OAAO,SAAS,CAAC;IACnD,IAAI,CAAC,CAAC,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,OAAO,SAAS,CAAC;IACjF,OAAO;QACN,UAAU,EAAE,YAAY,IAAI,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;QACpE,OAAO,EAAE,OAAO,CAAC,OAAO;KACxB,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,UAAmB;IACxC,OAAO,UAAU,KAAK,OAAO,IAAI,UAAU,KAAK,SAAS,CAAC;AAC3D,CAAC","sourcesContent":["/**\n * Drop assistant turns that terminated in failure (`stopReason` \"error\" or\n * \"aborted\") from a converted LLM message list, together with every tool\n * result whose `toolCallId` was declared ONLY by those dropped assistants.\n * An id re-declared by any kept assistant keeps its results, mirroring the\n * `droppedCallIds` pairing in `api/transform-messages.ts`. Order and every\n * other message are preserved.\n *\n * A failed turn is the provider's response to the previous request, never part\n * of one, so removing it keeps every earlier request a prefix of the next\n * (provider prompt caches survive) while preventing the replay of partial text\n * and unexecuted tool calls on lanes that build requests straight from\n * `convertToLlm` output (claude-sdk-oauth prompt bridge, cursor turns, token\n * estimation).\n *\n * The input is typed structurally so both the AI package `Message[]` and the\n * harness/coding-agent `AgentMessage[]` (a superset with extra custom roles)\n * pass through the same drop.\n */\nexport function dropFailedAssistantTurns<T extends { role: string }>(messages: readonly T[]): T[] {\n\tconst callIdsByKeptAssistants = new Set<string>();\n\tconst callIdsByFailedAssistants = new Set<string>();\n\tfor (const message of messages) {\n\t\tconst assistant = asAssistantTurn(message);\n\t\tif (!assistant) continue;\n\t\tconst declared = isFailedStop(assistant.stopReason) ? callIdsByFailedAssistants : callIdsByKeptAssistants;\n\t\tfor (const block of assistant.content) {\n\t\t\tif (block.type === \"toolCall\" && typeof block.id === \"string\") declared.add(block.id);\n\t\t}\n\t}\n\tfor (const id of callIdsByKeptAssistants) callIdsByFailedAssistants.delete(id);\n\n\treturn messages.filter((message) => {\n\t\tconst assistant = asAssistantTurn(message);\n\t\tif (assistant) return !isFailedStop(assistant.stopReason);\n\t\tif (message.role === \"toolResult\" && \"toolCallId\" in message && typeof message.toolCallId === \"string\") {\n\t\t\treturn !callIdsByFailedAssistants.has(message.toolCallId);\n\t\t}\n\t\treturn true;\n\t});\n}\n\nfunction asAssistantTurn(message: {\n\trole: string;\n}): { stopReason: unknown; content: readonly { type: string; id?: unknown }[] } | undefined {\n\tif (message.role !== \"assistant\") return undefined;\n\tif (!(\"content\" in message) || !Array.isArray(message.content)) return undefined;\n\treturn {\n\t\tstopReason: \"stopReason\" in message ? message.stopReason : undefined,\n\t\tcontent: message.content,\n\t};\n}\n\nfunction isFailedStop(stopReason: unknown): boolean {\n\treturn stopReason === \"error\" || stopReason === \"aborted\";\n}\n"]}