@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":"slots.js","sourceRoot":"","sources":["../../../src/auth/pool/slots.ts"],"names":[],"mappings":"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","sourcesContent":["import { LEGACY_PROVIDER_IDS } from \"../../legacy-provider-ids.ts\";\nimport type { ProviderEnv } from \"../../types.ts\";\nimport type { Credential } from \"../types.ts\";\n\nexport type { Credential };\n\nexport const DEFAULT_SLOT_NAME = \"default\";\n\nexport type CredentialSlotSource = \"login\" | \"import\" | \"env\";\n\nexport type CredentialSlot = {\n\t/** Immutable operational identity. */\n\tname: string;\n\t/** Optional presentation metadata; never used for credential selection. */\n\tdisplayName?: string;\n\tsource?: CredentialSlotSource;\n\tkey?: string;\n\taccess?: string;\n\trefresh?: string;\n\texpires?: number;\n\t/** Provider-scoped values this account carries (a Kimi region, a Cloudflare account id). */\n\tenv?: ProviderEnv;\n};\n\nexport type PooledCredential = Credential & {\n\taccounts?: CredentialSlot[];\n\tpinned?: string;\n};\n\nconst SLOT_NAME_PATTERN = /^[a-zA-Z0-9][a-zA-Z0-9_-]{0,63}$/;\n\nexport function assertValidSlotName(name: string): void {\n\tif (!SLOT_NAME_PATTERN.test(name)) {\n\t\tthrow new Error(\n\t\t\t`Invalid account name '${name}': use letters, digits, '-' or '_', starting with a letter or digit`,\n\t\t);\n\t}\n}\n\nconst UNSAFE_DISPLAY_CHARACTERS = /[\\p{Cc}\\p{Cf}\\p{Zl}\\p{Zp}]/u;\n\n/**\n * Labels are bounded in terminal columns, not UTF-16 code units: 80 code units\n * of CJK render ~170 columns, which no footer segment can hold, while 41 emoji\n * render 82 columns yet count 82 code units. The bound is what the footer's\n * parenthesised provider segment can carry alongside a provider id.\n */\nexport const DISPLAY_NAME_MAX_COLUMNS = 32;\n\n/** Code points that advance a cell without painting anything a user can see. */\nconst BLANK_DISPLAY_CHARACTER = /^[\\s\\p{M}\\u115f\\u1160\\u17b4\\u17b5\\u2800\\u3164\\uffa0]$/u;\n/** Invisible code points that are not whitespace, so trimming never removes them. */\nconst INVISIBLE_DISPLAY_CHARACTER = /^[\\p{M}\\u115f\\u1160\\u17b4\\u17b5\\u2800\\u3164\\uffa0]$/u;\nconst WIDE_DISPLAY_CHARACTER =\n\t/^(?:[\\u1100-\\u115f\\u2329\\u232a\\u2e80-\\u303e\\u3041-\\u33ff\\u3400-\\u4dbf\\u4e00-\\u9fff\\ua000-\\ua4cf\\ua960-\\ua97f\\uac00-\\ud7a3\\uf900-\\ufaff\\ufe10-\\ufe19\\ufe30-\\ufe6f\\uff00-\\uff60\\uffe0-\\uffe6]|[\\u{1f300}-\\u{1faff}]|[\\u{20000}-\\u{3fffd}])$/u;\n\n/**\n * Latin lookalikes for the Cyrillic letters a homoglyph label would use. Folded\n * only for the uniqueness comparison; the stored label keeps the user's script.\n */\nconst CYRILLIC_LOOKALIKES: Record<string, string> = {\n\t\"\\u0430\": \"a\",\n\t\"\\u0432\": \"b\",\n\t\"\\u0435\": \"e\",\n\t\"\\u043a\": \"k\",\n\t\"\\u043c\": \"m\",\n\t\"\\u043d\": \"h\",\n\t\"\\u043e\": \"o\",\n\t\"\\u0440\": \"p\",\n\t\"\\u0441\": \"c\",\n\t\"\\u0442\": \"t\",\n\t\"\\u0443\": \"y\",\n\t\"\\u0445\": \"x\",\n\t\"\\u0455\": \"s\",\n\t\"\\u0456\": \"i\",\n\t\"\\u0458\": \"j\",\n};\n\nconst displayNameGraphemes = new Intl.Segmenter(undefined, { granularity: \"grapheme\" });\n\n/** Terminal columns a label occupies, measured per grapheme cluster. */\nexport function displayNameColumns(value: string): number {\n\tlet columns = 0;\n\tfor (const { segment } of displayNameGraphemes.segment(value)) {\n\t\tconst codePoint = segment.codePointAt(0);\n\t\tif (codePoint === undefined) continue;\n\t\tconst base = String.fromCodePoint(codePoint);\n\t\tif (INVISIBLE_DISPLAY_CHARACTER.test(base)) continue;\n\t\tcolumns += WIDE_DISPLAY_CHARACTER.test(base) || segment.includes(\"\\ufe0f\") ? 2 : 1;\n\t}\n\treturn columns;\n}\n\n/** The stored form: NFC, trimmed, internal whitespace runs collapsed to one space. */\nfunction normalizeDisplayName(value: string): string {\n\treturn value.normalize(\"NFC\").trim().replace(/\\s+/gu, \" \");\n}\n\n/**\n * Comparison key for \"unique per provider\": compatibility-folded (fullwidth and\n * other compatibility forms), case-folded, invisible code points dropped, and\n * Cyrillic lookalikes mapped to Latin, so two labels that render identically\n * cannot both be stored.\n */\nfunction displayNameKey(value: string): string {\n\treturn [...normalizeDisplayName(value).normalize(\"NFKC\").toLowerCase()]\n\t\t.filter((character) => !INVISIBLE_DISPLAY_CHARACTER.test(character))\n\t\t.map((character) => CYRILLIC_LOOKALIKES[character] ?? character)\n\t\t.join(\"\");\n}\n\n/** Treat persisted metadata as untrusted presentation input. */\nexport function accountDisplayName(value: unknown): string | undefined {\n\tif (typeof value !== \"string\" || UNSAFE_DISPLAY_CHARACTERS.test(value)) return undefined;\n\tconst normalized = normalizeDisplayName(value);\n\tconst characters = [...normalized];\n\t// A leading combining mark glues the label onto whatever precedes it, and a\n\t// label made only of blank-rendering code points is indistinguishable from none.\n\tif (characters.length === 0 || /^\\p{M}$/u.test(characters[0])) return undefined;\n\tif (characters.every((character) => BLANK_DISPLAY_CHARACTER.test(character))) return undefined;\n\treturn displayNameColumns(normalized) <= DISPLAY_NAME_MAX_COLUMNS ? normalized : undefined;\n}\n\nexport function accountLabel(account: { name: string; displayName?: string }): string {\n\tconst displayName = accountDisplayName(account.displayName);\n\treturn displayName === undefined ? account.name : `${displayName} (${account.name})`;\n}\n\n/** Pure metadata update; callers serialize this against the latest stored credential. */\nexport function renameSlotDisplayName(\n\tcredential: PooledCredential,\n\tname: string,\n\tvalue: string | null,\n): PooledCredential {\n\tassertValidSlotName(name);\n\tconst accounts = Array.isArray(credential.accounts) ? credential.accounts : listSlots(credential);\n\tconst target = accounts.find((slot) => slot.name === name);\n\tif (!target) throw new Error(`Stored provider account not found: ${name}`);\n\tif (target.source === \"env\") throw new Error(`Environment provider account cannot be renamed: ${name}`);\n\tconst displayName = value === null ? undefined : accountDisplayName(value);\n\tif (value !== null && displayName === undefined) {\n\t\tthrow new Error(\n\t\t\t`Display name must be 1-${DISPLAY_NAME_MAX_COLUMNS} terminal columns of visible text without control or formatting characters.`,\n\t\t);\n\t}\n\tif (\n\t\tdisplayName !== undefined &&\n\t\taccounts.some(\n\t\t\t(slot) =>\n\t\t\t\tslot.name !== name &&\n\t\t\t\tdisplayNameKey(accountDisplayName(slot.displayName) ?? \"\") === displayNameKey(displayName),\n\t\t)\n\t) {\n\t\tthrow new Error(\"Display name is already used by another account for this provider.\");\n\t}\n\treturn {\n\t\t...credential,\n\t\taccounts: accounts.map((slot) => {\n\t\t\tif (slot.name !== name) return slot;\n\t\t\tconst { displayName: _displayName, ...unchanged } = slot;\n\t\t\treturn displayName === undefined ? unchanged : { ...unchanged, displayName };\n\t\t}),\n\t};\n}\n\nfunction storedSlots(credential: PooledCredential): CredentialSlot[] {\n\treturn Array.isArray(credential.accounts) ? credential.accounts : [];\n}\n\nfunction credentialSlotEnv(credential: Credential): { env: ProviderEnv } | Record<string, never> {\n\tconst value = credential.env;\n\tif (typeof value !== \"object\" || value === null || Array.isArray(value)) return {};\n\tconst env: ProviderEnv = {};\n\tfor (const [name, entry] of Object.entries(value)) {\n\t\tif (typeof entry !== \"string\") return {};\n\t\tenv[name] = entry;\n\t}\n\treturn { env };\n}\n\nfunction slotFromFlatCredential(credential: PooledCredential): CredentialSlot {\n\treturn slotFromFlatCredentialNamed(credential, DEFAULT_SLOT_NAME);\n}\n\n/**\n * A flat credential written by a build predating pools is read as a one-slot pool\n * without writing anything back; the caller decides whether a write ever happens.\n */\nexport function listSlots(credential: PooledCredential | undefined): CredentialSlot[] {\n\tif (!credential) return [];\n\tconst slots = storedSlots(credential);\n\treturn slots.length > 0 ? [...slots] : [slotFromFlatCredential(credential)];\n}\n\nexport function findSlot(credential: PooledCredential | undefined, name: string): CredentialSlot | undefined {\n\treturn listSlots(credential).find((slot) => slot.name === name);\n}\n\n/**\n * Replaces or appends one slot while every sibling, the pin, and the flat\n * top-level credential survive untouched. The flat fields stay as written so a\n * build that ignores `accounts` still authenticates from them.\n */\nexport function upsertSlot(credential: PooledCredential | undefined, slot: CredentialSlot): PooledCredential {\n\tassertValidSlotName(slot.name);\n\tconst base: PooledCredential =\n\t\tcredential ??\n\t\t(slot.access !== undefined || slot.refresh !== undefined\n\t\t\t? { type: \"oauth\", access: slot.access ?? \"\", refresh: slot.refresh ?? \"\", expires: slot.expires ?? 0 }\n\t\t\t: { type: \"api_key\", key: slot.key });\n\tconst existing = listSlots(base);\n\tconst index = existing.findIndex((candidate) => candidate.name === slot.name);\n\tconst accounts =\n\t\tindex >= 0\n\t\t\t? existing.map((candidate) => (candidate.name === slot.name ? { ...candidate, ...slot } : candidate))\n\t\t\t: [...existing, slot];\n\treturn { ...base, accounts };\n}\n\n/** Whether the flat top-level fields are this slot's material rather than a sibling's. */\nfunction slotMirrorsFlat(credential: PooledCredential, slot: CredentialSlot): boolean {\n\tif (credential.type === \"oauth\") return slot.access === credential.access || slot.refresh === credential.refresh;\n\treturn slot.key === credential.key;\n}\n\n/** Rewrites the flat top-level projection to carry the given slot's material. */\nfunction projectFlatFields(credential: PooledCredential, slot: CredentialSlot): PooledCredential {\n\tconst env = slot.env === undefined ? {} : { env: slot.env };\n\tif (credential.type === \"oauth\") {\n\t\tif (slot.access === undefined || slot.refresh === undefined || slot.expires === undefined) return credential;\n\t\treturn { ...credential, access: slot.access, refresh: slot.refresh, expires: slot.expires, ...env };\n\t}\n\treturn { ...credential, key: slot.key, ...env };\n}\n\n/**\n * Removes one slot. The credential is dropped entirely once its last slot is gone,\n * and a pin naming the removed slot is cleared so selection never points at a slot\n * that no longer exists.\n *\n * When the removed slot was the one the flat top-level fields projected, those\n * fields are re-projected from the first survivor. Without that the pool keeps\n * authenticating with the deleted account's material: a credential with a single\n * remaining slot does not enter the rotation path, so ordinary requests resolve\n * the flat projection and would keep using exactly the account the user removed.\n * `accounts` is preserved either way, so the entry stays a pool.\n */\nexport function removeSlot(credential: PooledCredential | undefined, name: string): PooledCredential | undefined {\n\tif (!credential) return undefined;\n\tconst existing = listSlots(credential);\n\tconst removed = existing.find((slot) => slot.name === name);\n\tconst accounts = existing.filter((slot) => slot.name !== name);\n\tif (accounts.length === 0) return undefined;\n\tconst reprojected =\n\t\tremoved && slotMirrorsFlat(credential, removed) ? projectFlatFields(credential, accounts[0]) : credential;\n\tconst next: PooledCredential = { ...reprojected, accounts };\n\tif (next.pinned === name) delete next.pinned;\n\treturn next;\n}\n\nexport function pinSlot(credential: PooledCredential, name: string): PooledCredential {\n\tassertValidSlotName(name);\n\treturn { ...credential, pinned: name };\n}\n\n/**\n * Projects one named slot onto the flat credential shape for request-scoped\n * resolution; pool bookkeeping fields are stripped so provider handlers see a\n * plain credential and never write pool state back through the projection.\n */\nexport function projectSlot(credential: PooledCredential | undefined, name: string): Credential | undefined {\n\tif (!credential) return undefined;\n\tconst slot = findSlot(credential, name);\n\tif (!slot) return undefined;\n\tconst { accounts: _accounts, pinned: _pinned, ...flat } = credential;\n\tconst env = slot.env === undefined ? {} : { env: slot.env };\n\tif (flat.type === \"oauth\") {\n\t\tif (slot.access === undefined || slot.refresh === undefined || slot.expires === undefined) return undefined;\n\t\treturn { ...flat, access: slot.access, refresh: slot.refresh, expires: slot.expires, ...env };\n\t}\n\treturn { ...flat, key: slot.key, ...env };\n}\n\nfunction slotFromFlatCredentialNamed(credential: Credential, name: string): CredentialSlot {\n\tif (credential.type === \"oauth\") {\n\t\treturn {\n\t\t\tname,\n\t\t\tsource: \"login\",\n\t\t\taccess: credential.access,\n\t\t\trefresh: credential.refresh,\n\t\t\texpires: credential.expires,\n\t\t\t...credentialSlotEnv(credential),\n\t\t};\n\t}\n\treturn { name, source: \"login\", key: credential.key, ...credentialSlotEnv(credential) };\n}\n\nfunction nextLoginSlotName(credential: PooledCredential): string {\n\tconst taken = new Set(listSlots(credential).map((slot) => slot.name));\n\tfor (let index = 2; index < 1000; index++) {\n\t\tconst candidate = `login-${index}`;\n\t\tif (!taken.has(candidate)) return candidate;\n\t}\n\tthrow new Error(\"Credential pool is full\");\n}\n\nfunction providedSlots(credential: Credential): CredentialSlot[] | undefined {\n\tconst accounts = (credential as PooledCredential).accounts;\n\treturn Array.isArray(accounts) && accounts.length > 0 ? accounts : undefined;\n}\n\n/**\n * Unions a provider-owned pool onto the value read under the credential lock.\n * `current` wins for every name it already holds: the provider built its\n * object from a snapshot taken BEFORE the interactive browser round trip, so a\n * sibling account that rotated its refresh token or earned a rate-limit block\n * during that window must not be rewound to the snapshot. Names that do not\n * exist yet are appended.\n *\n * The one exception is a same-name slot whose `expires` is strictly newer than\n * the stored slot's: that is this login refreshing an existing account in place\n * (re-login recovery of an auth-blocked slot), so it replaces the stored copy\n * together with any block fields it carried. A snapshot sibling is never newer\n * than what concurrent writers stored, so it still loses.\n */\nfunction mergeProvidedPool(\n\tcurrent: PooledCredential,\n\texisting: readonly CredentialSlot[],\n\tprovided: readonly CredentialSlot[],\n): PooledCredential {\n\tconst providedByName = new Map(provided.map((slot) => [slot.name, slot]));\n\tlet refreshed = false;\n\tconst merged = existing.map((slot) => {\n\t\tconst candidate = providedByName.get(slot.name);\n\t\tif (!candidate || !hasNewerMaterial(candidate, slot)) return slot;\n\t\trefreshed = true;\n\t\treturn candidate;\n\t});\n\tconst known = new Set(existing.map((slot) => slot.name));\n\tconst added = provided.filter((slot) => !known.has(slot.name));\n\treturn added.length === 0 && !refreshed ? current : { ...current, accounts: [...merged, ...added] };\n}\n\nfunction hasNewerMaterial(candidate: CredentialSlot, stored: CredentialSlot): boolean {\n\treturn candidate.expires !== undefined && (stored.expires === undefined || candidate.expires > stored.expires);\n}\n\n/**\n * Appends an unnamed flat credential to a pool as a generated `login-N` slot.\n * An absent current entry keeps today's whole-write shape; a flat current entry\n * is promoted to a pool so the legacy credential stays reachable as `default`\n * instead of being overwritten by the second login.\n *\n * A login result that already carries its own populated `accounts` array is a\n * provider-owned pool, and a provider that already holds a POOL names the\n * account this login created itself. That pool is MERGED onto `current` rather\n * than written through: a pre-browser-flow snapshot must never overwrite what\n * concurrent writers stored meanwhile. A flat `current` keeps the whole-write\n * shape - the provider echoes the flat fields it read, so there is nothing to\n * preserve and the login must not be dropped on a name collision.\n *\n * `onAllocated` reports the account this login committed, so a caller can name\n * it in a receipt without re-reading storage.\n */\nexport function appendLoginSlot(\n\tcurrent: PooledCredential | undefined,\n\tflat: Credential,\n\tonAllocated?: (name: string, origin: \"generated\" | \"provider\") => void,\n): Credential {\n\tconst provided = providedSlots(flat);\n\tif (provided) {\n\t\t// Provider-owned envelopes identify an addition by immutable ID, never by\n\t\t// token equality or array position. Ambiguous envelopes have no receipt.\n\t\tconst previous = new Set(\n\t\t\t(current && Array.isArray(current.accounts) ? current.accounts : listSlots(current)).map((slot) => slot.name),\n\t\t);\n\t\tconst added = provided.filter((slot) => !previous.has(slot.name));\n\t\tif (added.length === 1 && SLOT_NAME_PATTERN.test(added[0].name) && added[0].source !== \"env\") {\n\t\t\tonAllocated?.(added[0].name, \"provider\");\n\t\t}\n\t}\n\tif (!current) {\n\t\tif (!provided) onAllocated?.(DEFAULT_SLOT_NAME, \"generated\");\n\t\treturn flat;\n\t}\n\tconst storedAccounts = Array.isArray(current.accounts) ? current.accounts : undefined;\n\tif (provided) {\n\t\t// A pool merges onto the stored pool; a flat current keeps the whole-write\n\t\t// shape because the provider's accounts already carry this login.\n\t\treturn storedAccounts ? mergeProvidedPool(current, storedAccounts, provided) : flat;\n\t}\n\tconst name = nextLoginSlotName(current);\n\tconst next = upsertSlot(current, slotFromFlatCredentialNamed(flat, name));\n\tonAllocated?.(name, \"generated\");\n\treturn next;\n}\n\n/**\n * Material a provider writes into the flat credential when the real token lives\n * outside auth.json (an SDK subprocess or a vendor CLI owns it): the literal\n * `<providerId>-managed` in both OAuth fields. It is a marker, never a token.\n */\nexport function managedSentinelMaterial(providerId: string): string {\n\treturn `${providerId}-managed`;\n}\n\nconst LEGACY_SENTINEL_MATERIALS: ReadonlyMap<string, string> = new Map(\n\tObject.entries(LEGACY_PROVIDER_IDS).map(([legacyId, canonicalId]) => [\n\t\tcanonicalId,\n\t\tmanagedSentinelMaterial(legacyId),\n\t]),\n);\n\n/**\n * Every sentinel material a stored credential may legitimately carry for this\n * provider: the canonical `<providerId>-managed` plus the legacy material of\n * any renamed ancestor id, because credentials written before a rename keep\n * the old literal verbatim.\n */\nexport function managedSentinelMaterials(providerId: string): string[] {\n\tconst materials = [managedSentinelMaterial(providerId)];\n\tconst legacy = LEGACY_SENTINEL_MATERIALS.get(providerId);\n\tif (legacy !== undefined && !materials.includes(legacy)) materials.push(legacy);\n\treturn materials;\n}\n\n/**\n * A POOL SLOT carrying that marker can never authenticate: `projectSlot` hands\n * it to the provider's `check`, which rejects it, and the request dies with\n * \"Provider is not configured\". Slots like that exist only because a shipped\n * build appended a provider-owned pool's flat sentinel as a generated `login-N`\n * slot.\n */\nexport function isManagedSentinelSlot(providerId: string, slot: CredentialSlot): boolean {\n\tconst materials = managedSentinelMaterials(providerId);\n\treturn materials.includes(slot.access ?? \"\") && slot.refresh === slot.access;\n}\n\n/**\n * Drops those poisoned slots from a stored credential, clearing a pin that\n * named one. Returns `undefined` when the credential holds none, so a caller\n * can tell a repair from a no-op and only rewrite storage when the bytes\n * actually change.\n */\nexport function repairManagedSentinelSlots(providerId: string, credential: Credential): PooledCredential | undefined {\n\tconst pooled = credential as PooledCredential;\n\tif (!Array.isArray(pooled.accounts)) return undefined;\n\tconst kept = pooled.accounts.filter((slot) => !isManagedSentinelSlot(providerId, slot));\n\tif (kept.length === pooled.accounts.length) return undefined;\n\tconst repaired: PooledCredential = { ...pooled, accounts: kept };\n\tif (repaired.pinned !== undefined && !kept.some((slot) => slot.name === repaired.pinned)) delete repaired.pinned;\n\treturn repaired;\n}\n\n/**\n * Merges a rotated OAuth credential back into the pool: the slot whose material\n * matches the pre-refresh flat fields is updated in place together with those\n * flat fields, while every sibling and the pin survive byte-identical. A flat\n * current entry keeps today's whole-write shape.\n */\n/**\n * Merges a rotated OAuth credential into the NAMED slot. The flat top-level\n * projection rotates only when it mirrored that slot's previous material, so\n * refreshing a secondary slot never disturbs what an older binary reads.\n */\nexport function mergeRefreshedSlot(current: PooledCredential, name: string, refreshed: Credential): Credential {\n\tif (refreshed.type !== \"oauth\" || current.type !== \"oauth\") return current;\n\tif (!Array.isArray(current.accounts) || current.accounts.length === 0) return mergeRefreshed(current, refreshed);\n\tconst target = current.accounts.find((slot) => slot.name === name);\n\tif (!target) return current;\n\tconst rotated = { access: refreshed.access, refresh: refreshed.refresh, expires: refreshed.expires };\n\tconst accounts = current.accounts.map((slot) => (slot === target ? { ...slot, ...rotated } : slot));\n\tconst mirrorsFlat = target.access === current.access || target.refresh === current.refresh;\n\treturn mirrorsFlat ? { ...current, ...rotated, accounts } : { ...current, accounts };\n}\n\nexport function mergeRefreshed(current: PooledCredential, refreshed: Credential): Credential {\n\tif (!Array.isArray(current.accounts) || current.accounts.length === 0) {\n\t\treturn refreshed;\n\t}\n\tif (refreshed.type !== \"oauth\" || current.type !== \"oauth\") return refreshed;\n\tconst target = current.accounts.find((slot) => slot.access === current.access || slot.refresh === current.refresh);\n\tconst rotated = {\n\t\taccess: refreshed.access,\n\t\trefresh: refreshed.refresh,\n\t\texpires: refreshed.expires,\n\t};\n\tconst accounts = target\n\t\t? current.accounts.map((slot) => (slot === target ? { ...slot, ...rotated } : slot))\n\t\t: current.accounts;\n\treturn { ...current, ...rotated, accounts };\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"refresh-credential.d.ts","sourceRoot":"","sources":["../../src/auth/refresh-credential.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAEzF,wBAAsB,wBAAwB,CAC7C,QAAQ,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,YAAY,CAAA;CAAE,EAC5C,WAAW,EAAE,eAAe,EAC5B,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,UAAU,GAAG,SAAS,EAC9B,MAAM,EAAE,WAAW,GACjB,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CA6BjC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"refresh-credential.js","sourceRoot":"","sources":["../../src/auth/refresh-credential.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAGvD,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC7C,QAA4C,EAC5C,WAA4B,EAC5B,WAAwB,EACxB,MAA8B,EAC9B,MAAmB;IAEnB,IAAI,MAAM,EAAE,IAAI,KAAK,OAAO,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;QAClC,IAAI,CAAC,KAAK;YAAE,OAAO,SAAS,CAAC;QAC7B,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,OAAO;YAAE,OAAO,MAAM,CAAC;QAC/C,IAAI,MAAM,CAAC,OAAO;YAAE,OAAO,SAAS,CAAC;QACrC,IAAI,IAA4B,CAAC;QACjC,IAAI,CAAC;YACJ,IAAI,GAAG,MAAM,sBAAsB,CAAC;gBACnC,WAAW;gBACX,UAAU,EAAE,QAAQ,CAAC,EAAE;gBACvB,KAAK;gBACL,KAAK,EAAE,MAAM;gBACb,OAAO,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,UAAU,CAAC,OAAO;gBACzD,MAAM;gBACN,MAAM,EAAE,KAAK;aACb,CAAC,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,uBAAuB,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;QACnD,CAAC;QACD,OAAO,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;IAClD,CAAC;IAED,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;IACpC,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAC9B,MAAM,UAAU,GAAG,MAAM,EAAE,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;IACnE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC;IAC9E,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAC9B,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC;AACtE,CAAC","sourcesContent":["/**\n * Effective credential for a provider's catalog refresh (`Models.refresh`).\n * OAuth credentials are refreshed before network access; the exchange is\n * joined without owning it, so superseding the catalog refresh stops waiting\n * but never aborts a token exchange another lane may be relying on (#1542).\n */\n\nimport { refreshOAuthCredential } from \"./oauth-refresh.ts\";\nimport { oauthRefreshModelsError } from \"./resolve.ts\";\nimport type { AuthContext, Credential, CredentialStore, ProviderAuth } from \"./types.ts\";\n\nexport async function resolveRefreshCredential(\n\tprovider: { id: string; auth: ProviderAuth },\n\tcredentials: CredentialStore,\n\tauthContext: AuthContext,\n\tstored: Credential | undefined,\n\tsignal: AbortSignal,\n): Promise<Credential | undefined> {\n\tif (stored?.type === \"oauth\") {\n\t\tconst oauth = provider.auth.oauth;\n\t\tif (!oauth) return undefined;\n\t\tif (Date.now() < stored.expires) return stored;\n\t\tif (signal.aborted) return undefined;\n\t\tlet post: Credential | undefined;\n\t\ttry {\n\t\t\tpost = await refreshOAuthCredential({\n\t\t\t\tcredentials,\n\t\t\t\tproviderId: provider.id,\n\t\t\t\toauth,\n\t\t\t\tstale: stored,\n\t\t\t\tisStale: (credential) => Date.now() >= credential.expires,\n\t\t\t\tsignal,\n\t\t\t\towning: false,\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tthrow oauthRefreshModelsError(error, provider.id);\n\t\t}\n\t\treturn post?.type === \"oauth\" ? post : undefined;\n\t}\n\n\tconst apiKey = provider.auth.apiKey;\n\tif (!apiKey) return undefined;\n\tconst credential = stored?.type === \"api_key\" ? stored : undefined;\n\tconst result = await apiKey.resolve({ ctx: authContext, credential, signal });\n\tif (!result) return undefined;\n\treturn { type: \"api_key\", key: result.auth.apiKey, env: result.env };\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/auth/resolve.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAU/C,OAAO,KAAK,EAGX,WAAW,EACX,UAAU,EAEV,eAAe,EAGf,YAAY,EACZ,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,eAAe,GAAG,cAAc,GAAG,kBAAkB,GAAG,UAAU,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;AAE7G,MAAM,WAAW,uBAAuB;IACvC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,WAAW,CAAC;IAClB,kFAAkF;IAClF,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,WAAW,CAAC;CACrB;AAED;;;;;GAKG;AACH,eAAO,MAAM,8BAA8B,iCAAiC,CAAC;AAE7E,wBAAgB,4BAA4B,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEvE;AAED,qBAAa,WAAY,SAAQ,KAAK;IACrC,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAE/B,YAAY,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,EAIhF;CACD;AAUD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAClC,QAAQ,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,YAAY,CAAA;CAAE,EAC5C,WAAW,EAAE,eAAe,EAC5B,WAAW,EAAE,WAAW,EACxB,SAAS,CAAC,EAAE,uBAAuB,GACjC,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAMjC;AAuGD,mFAAmF;AACnF,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,WAAW,CAOvF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../src/auth/resolve.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ProviderEnv } from \"../types.ts\";\nimport { operationSignal, raceWithAbortSignal } from \"../utils/abort.ts\";\nimport { formatThrownValue } from \"../utils/diagnostics.ts\";\nimport {\n\tOAuthRefreshExchangeError,\n\tOAuthRefreshStoreError,\n\tprojectOAuthSlot,\n\trefreshOAuthCredential,\n} from \"./oauth-refresh.ts\";\nimport { projectSlot } from \"./pool/slots.ts\";\nimport type {\n\tApiKeyAuth,\n\tApiKeyCredential,\n\tAuthContext,\n\tAuthResult,\n\tCredential,\n\tCredentialStore,\n\tOAuthAuth,\n\tOAuthCredential,\n\tProviderAuth,\n} from \"./types.ts\";\n\nexport type ModelsErrorCode = \"model_source\" | \"model_validation\" | \"provider\" | \"stream\" | \"auth\" | \"oauth\";\n\nexport interface AuthResolutionOverrides {\n\tapiKey?: string;\n\tenv?: ProviderEnv;\n\t/** Require this much remaining OAuth-token validity; defaults to five minutes. */\n\tminOAuthValidityMs?: number;\n\t/**\n\t * Resolve against one named slot of a pooled credential. A missing entry or\n\t * slot resolves to undefined rather than falling back to another account or\n\t * ambient env, so a slot-scoped request can never silently switch identities.\n\t */\n\tslotName?: string;\n\t/**\n\t * An access token the provider just refused with one of its\n\t * `OAuthAuth.rejectedTokenStatuses`. A stored OAuth credential still carrying it\n\t * is re-exchanged regardless of its expiry; one already rotated is used as is.\n\t */\n\trejectedAccess?: string;\n\tsignal?: AbortSignal;\n}\n\n/**\n * Prefix of the auth-miss every resolution site raises when a provider has no\n * usable credential. Consumers key recovery decisions off this exact wording,\n * so it is a shared constant instead of a literal repeated at each throw site:\n * rewording one copy would silently disable the other's behavior.\n */\nexport const PROVIDER_NOT_CONFIGURED_PREFIX = \"Provider is not configured: \";\n\nexport function providerNotConfiguredMessage(providerId: string): string {\n\treturn `${PROVIDER_NOT_CONFIGURED_PREFIX}${providerId}`;\n}\n\nexport class ModelsError extends Error {\n\treadonly code: ModelsErrorCode;\n\n\tconstructor(code: ModelsErrorCode, message: string, options?: { cause?: unknown }) {\n\t\tsuper(withCauseDetail(message, options?.cause), options);\n\t\tthis.name = \"ModelsError\";\n\t\tthis.code = code;\n\t}\n}\n\n/** Callers surface `error.message` only, so keep the underlying reason in it. */\nfunction withCauseDetail(message: string, cause: unknown): string {\n\tif (cause === undefined || cause === null) return message;\n\tconst detail = formatThrownValue(cause).trim();\n\tif (!detail || message.includes(detail)) return message;\n\treturn `${message}: ${detail}`;\n}\n\n/**\n * Auth resolution shared by the `Models` and `ImagesModels` collections.\n * A stored credential owns the provider: ambient/env is consulted only when\n * nothing is stored. No silent env fallback after a failed refresh or for a\n * credential type without a matching handler.\n */\nexport function resolveProviderAuth(\n\tprovider: { id: string; auth: ProviderAuth },\n\tcredentials: CredentialStore,\n\tauthContext: AuthContext,\n\toverrides?: AuthResolutionOverrides,\n): Promise<AuthResult | undefined> {\n\tconst signal = operationSignal(overrides?.signal);\n\treturn raceWithAbortSignal(\n\t\tresolveProviderAuthWithSignal(provider, credentials, authContext, overrides, signal),\n\t\tsignal,\n\t);\n}\n\nasync function resolveProviderAuthWithSignal(\n\tprovider: { id: string; auth: ProviderAuth },\n\tcredentials: CredentialStore,\n\tauthContext: AuthContext,\n\toverrides: AuthResolutionOverrides | undefined,\n\tsignal: AbortSignal,\n): Promise<AuthResult | undefined> {\n\tsignal.throwIfAborted();\n\tconst requestAuthContext = overrides?.env ? overlayEnvAuthContext(authContext, overrides.env) : authContext;\n\tconst apiKey = provider.auth.apiKey;\n\n\tif (overrides?.apiKey !== undefined && apiKey && !apiKey.ambientOnly) {\n\t\treturn resolveApiKey(\n\t\t\trequestAuthContext,\n\t\t\tapiKey,\n\t\t\tprovider.id,\n\t\t\t{\n\t\t\t\ttype: \"api_key\",\n\t\t\t\tkey: overrides.apiKey,\n\t\t\t\tenv: overrides.env,\n\t\t\t},\n\t\t\tsignal,\n\t\t);\n\t}\n\n\tconst stored = await readCredential(credentials, provider.id, signal);\n\tconst slotName = overrides?.slotName;\n\tif (slotName !== undefined) {\n\t\tconst projected = stored === undefined ? undefined : projectSlot(stored, slotName);\n\t\tif (!projected) return undefined;\n\t\tif (projected.type === \"oauth\" && provider.auth.oauth) {\n\t\t\treturn resolveStoredOAuth(\n\t\t\t\tcredentials,\n\t\t\t\tprovider.id,\n\t\t\t\tprovider.auth.oauth,\n\t\t\t\tprojected,\n\t\t\t\trequestAuthContext,\n\t\t\t\toverrides?.env,\n\t\t\t\tsignal,\n\t\t\t\toverrides?.minOAuthValidityMs,\n\t\t\t\tslotName,\n\t\t\t\toverrides?.rejectedAccess,\n\t\t\t);\n\t\t}\n\t\tif (projected.type === \"api_key\" && provider.auth.apiKey) {\n\t\t\tconst credential = overrides?.env ? { ...projected, env: { ...projected.env, ...overrides.env } } : projected;\n\t\t\treturn resolveApiKey(requestAuthContext, provider.auth.apiKey, provider.id, credential, signal);\n\t\t}\n\t\treturn undefined;\n\t}\n\tif (stored) {\n\t\tif (stored.type === \"oauth\" && provider.auth.oauth) {\n\t\t\treturn resolveStoredOAuth(\n\t\t\t\tcredentials,\n\t\t\t\tprovider.id,\n\t\t\t\tprovider.auth.oauth,\n\t\t\t\tstored,\n\t\t\t\trequestAuthContext,\n\t\t\t\toverrides?.env,\n\t\t\t\tsignal,\n\t\t\t\toverrides?.minOAuthValidityMs,\n\t\t\t\tundefined,\n\t\t\t\toverrides?.rejectedAccess,\n\t\t\t);\n\t\t}\n\t\tif (stored.type === \"api_key\" && provider.auth.apiKey) {\n\t\t\tconst credential = overrides?.env ? { ...stored, env: { ...stored.env, ...overrides.env } } : stored;\n\t\t\treturn resolveApiKey(requestAuthContext, provider.auth.apiKey, provider.id, credential, signal);\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tif (overrides?.apiKey !== undefined && apiKey) {\n\t\treturn resolveApiKey(\n\t\t\trequestAuthContext,\n\t\t\tapiKey,\n\t\t\tprovider.id,\n\t\t\t{\n\t\t\t\ttype: \"api_key\",\n\t\t\t\tkey: overrides.apiKey,\n\t\t\t\tenv: overrides.env,\n\t\t\t},\n\t\t\tsignal,\n\t\t);\n\t}\n\n\t// Ambient (env vars, AWS profiles, ADC files).\n\tconst ambientCredential =\n\t\tapiKey?.ambientOnly && overrides?.env ? { type: \"api_key\" as const, key: \"\", env: overrides.env } : undefined;\n\treturn apiKey ? resolveApiKey(requestAuthContext, apiKey, provider.id, ambientCredential, signal) : undefined;\n}\n\nfunction overlayEnvAuthContext(base: AuthContext, env: ProviderEnv): AuthContext {\n\treturn {\n\t\tenv: async (name) => (env[name] !== undefined ? env[name] : await base.env(name)),\n\t\tfileExists: (path) => base.fileExists(path),\n\t};\n}\n\nconst DEFAULT_OAUTH_MINIMUM_VALIDITY_MS = 5 * 60 * 1000;\n\n/** Maps a shared-refresh failure onto the `ModelsError` codes callers match on. */\nexport function oauthRefreshModelsError(error: unknown, providerId: string): ModelsError {\n\tif (error instanceof ModelsError) return error;\n\tif (error instanceof OAuthRefreshExchangeError) {\n\t\treturn new ModelsError(\"oauth\", `OAuth refresh failed for ${providerId}`, { cause: error.cause });\n\t}\n\tconst cause = error instanceof OAuthRefreshStoreError ? error.cause : error;\n\treturn new ModelsError(\"auth\", `Credential store modify failed for ${providerId}`, { cause });\n}\n\n/**\n * OAuth resolution: a token with less than five minutes remaining is refreshed\n * through `refreshOAuthCredential`, which re-checks the stored value, runs the\n * exchange outside the store lock, and compare-and-swaps the rotated slot.\n */\nasync function resolveStoredOAuth(\n\tcredentials: CredentialStore,\n\tproviderId: string,\n\toauth: OAuthAuth,\n\tstored: OAuthCredential,\n\tauthContext: AuthContext,\n\trequestEnv: ProviderEnv | undefined,\n\tsignal: AbortSignal,\n\tminOAuthValidityMs?: number,\n\tslotName?: string,\n\trejectedAccess?: string,\n): Promise<AuthResult | undefined> {\n\tconst minimumValidityMs = Math.max(DEFAULT_OAUTH_MINIMUM_VALIDITY_MS, minOAuthValidityMs ?? 0);\n\tconst expiresSoon = (credential: OAuthCredential) => Date.now() + minimumValidityMs >= credential.expires;\n\tconst isStale = (credential: OAuthCredential) =>\n\t\texpiresSoon(credential) || (rejectedAccess !== undefined && credential.access === rejectedAccess);\n\tlet credential = stored;\n\n\tif (isStale(credential)) {\n\t\tlet post: Credential | undefined;\n\t\ttry {\n\t\t\tpost = await refreshOAuthCredential({\n\t\t\t\tcredentials,\n\t\t\t\tproviderId,\n\t\t\t\toauth,\n\t\t\t\tstale: credential,\n\t\t\t\tslotName,\n\t\t\t\tisStale,\n\t\t\t\tsignal,\n\t\t\t\towning: true,\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tthrow oauthRefreshModelsError(error, providerId);\n\t\t}\n\t\tif (post?.type !== \"oauth\") return undefined; // logged out meanwhile\n\t\tconst postView = slotName === undefined ? post : projectOAuthSlot(post, slotName);\n\t\tif (!postView) return undefined; // slot removed meanwhile\n\t\tcredential = postView;\n\t\t// The normal five-minute window triggers a refresh but does not impose a\n\t\t// provider contract. Explicit callers (such as bearer-token export) do\n\t\t// require the requested minimum after the refresh.\n\t\tif (minOAuthValidityMs !== undefined && expiresSoon(credential)) {\n\t\t\tthrow new ModelsError(\"oauth\", `OAuth refresh returned a token that expires too soon for ${providerId}`);\n\t\t}\n\t}\n\n\tconst storedEnv = credentialEnvironment(credential);\n\tconst effectiveEnv = requestEnv ? { ...storedEnv, ...requestEnv } : storedEnv;\n\tconst effectiveCredential = effectiveEnv ? { ...credential, env: effectiveEnv } : credential;\n\n\tif (oauth.check) {\n\t\ttry {\n\t\t\tif (!(await oauth.check({ ctx: authContext, credential: effectiveCredential, signal }))) return undefined;\n\t\t} catch (error) {\n\t\t\tthrow new ModelsError(\"auth\", `OAuth auth check failed for provider ${providerId}`, { cause: error });\n\t\t}\n\t}\n\n\ttry {\n\t\treturn {\n\t\t\tauth: await oauth.toAuth(effectiveCredential),\n\t\t\t...(effectiveEnv ? { env: effectiveEnv } : {}),\n\t\t\tsource: \"OAuth\",\n\t\t};\n\t} catch (error) {\n\t\tthrow new ModelsError(\"oauth\", `OAuth auth derivation failed for ${providerId}`, { cause: error });\n\t}\n}\n\nfunction credentialEnvironment(credential: OAuthCredential): ProviderEnv | undefined {\n\tconst value = credential.env;\n\tif (typeof value !== \"object\" || value === null || Array.isArray(value)) return undefined;\n\tconst environment: ProviderEnv = {};\n\tfor (const [name, entry] of Object.entries(value)) {\n\t\tif (typeof entry !== \"string\") return undefined;\n\t\tenvironment[name] = entry;\n\t}\n\treturn environment;\n}\n\nasync function resolveApiKey(\n\tauthContext: AuthContext,\n\tapiKey: ApiKeyAuth,\n\tproviderId: string,\n\tcredential: ApiKeyCredential | undefined,\n\tsignal: AbortSignal,\n): Promise<AuthResult | undefined> {\n\ttry {\n\t\treturn await apiKey.resolve({ ctx: authContext, credential, signal });\n\t} catch (error) {\n\t\tthrow new ModelsError(\"auth\", `API key auth failed for provider ${providerId}`, { cause: error });\n\t}\n}\n\nasync function readCredential(\n\tcredentials: CredentialStore,\n\tproviderId: string,\n\tsignal: AbortSignal,\n): Promise<Credential | undefined> {\n\ttry {\n\t\treturn await credentials.read(providerId, { signal });\n\t} catch (error) {\n\t\tthrow new ModelsError(\"auth\", `Credential store read failed for ${providerId}`, { cause: error });\n\t}\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/auth/types.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/auth/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { ProviderEnv, ProviderHeaders } from \"../types.ts\";\n\n/**\n * Request auth for a single model request. If a value cannot be expressed as\n * `apiKey`, `headers`, or `baseUrl`, it is provider config, not auth.\n */\nexport interface ModelAuth {\n\tapiKey?: string;\n\theaders?: ProviderHeaders;\n\tbaseUrl?: string;\n}\n\n/**\n * Stored api-key credential. `env` holds provider-scoped environment/config\n * values such as Cloudflare account/gateway ids.\n */\nexport interface ApiKeyCredential {\n\ttype: \"api_key\";\n\tkey?: string;\n\tenv?: ProviderEnv;\n}\n\n/** OAuth token data returned by extension compatibility flows. */\nexport interface OAuthCredentials {\n\trefresh: string;\n\taccess: string;\n\texpires: number;\n\t[key: string]: unknown;\n}\n\n/** Stored canonical OAuth credential. */\nexport interface OAuthCredential extends OAuthCredentials {\n\ttype: \"oauth\";\n}\n\n/** One type-tagged credential per provider — the shape of today's auth.json. */\nexport type Credential = ApiKeyCredential | OAuthCredential;\n\n/** Non-secret credential metadata for account/status enumeration. */\nexport interface CredentialInfo {\n\tproviderId: string;\n\ttype: Credential[\"type\"];\n}\n\n/** Optional cancellation for public auth and credential operations. */\nexport interface AuthOperationOptions {\n\tsignal?: AbortSignal;\n}\n\n/**\n * App-owned credential storage, keyed by `Provider.id`, one entry per\n * provider; an entry may pool sibling slots under `accounts` while its flat\n * fields remain a valid credential. `modify` is the only write path, so every mutation is a\n * serialized read-modify-write; `Models.getAuth()` runs OAuth refresh inside\n * `modify` so concurrent requests cannot double-refresh a rotated token. The\n * app persists a credential after login via\n * `modify(provider.id, async () => credential)`. Login/logout orchestration\n * is app-owned.\n *\n * Error semantics: `read` resolves `undefined` for missing entries. Methods\n * reject only on storage failure; `Models` wraps such rejections in\n * `ModelsError` with code \"auth\". Best-effort stores that serve an in-memory\n * view and record persistence errors internally (like coding-agent's\n * AuthStorage) are valid implementations.\n */\nexport interface CredentialStore {\n\t/**\n\t * Read the stored credential, possibly expired. Display/status use;\n\t * resolved request auth comes from `Models.getAuth()`.\n\t */\n\tread(providerId: string, options?: AuthOperationOptions): Promise<Credential | undefined>;\n\n\t/**\n\t * List stored credential metadata without resolving or exposing secrets.\n\t * Implementations must not execute configured API-key commands while listing.\n\t */\n\tlist(options?: AuthOperationOptions): Promise<readonly CredentialInfo[]>;\n\n\t/**\n\t * Serialized write — the only write path. `fn` sees the current credential\n\t * because correct writes (refresh, login-during-refresh) depend on it;\n\t * return the new credential, or undefined to leave the entry unchanged.\n\t * Mutual exclusion per provider id, cross-process too where the backing\n\t * store supports it (e.g. a file lock). Resolves with the post-write\n\t * credential. Rejections from `fn` propagate.\n\t */\n\tmodify(\n\t\tproviderId: string,\n\t\tfn: (current: Credential | undefined) => Promise<Credential | undefined>,\n\t\toptions?: AuthOperationOptions,\n\t): Promise<Credential | undefined>;\n\n\t/** Remove a credential (logout). Implementations serialize this against `modify`. */\n\tdelete(providerId: string, options?: AuthOperationOptions): Promise<void>;\n}\n\n/** Environment access for auth resolution. Injectable for tests and browsers. */\nexport interface AuthContext {\n\tenv(name: string): Promise<string | undefined>;\n\t/** Check whether a file exists. Supports a leading `~`. Always false in browsers. */\n\tfileExists(path: string): Promise<boolean>;\n}\n\n/** Result of resolving auth for a model. */\nexport interface AuthResult {\n\tauth: ModelAuth;\n\t/** Provider-scoped environment/config values resolved from credentials and ambient context. */\n\tenv?: ProviderEnv;\n\t/** Human-readable label for status UI: \"ANTHROPIC_API_KEY\", \"OAuth\", \"~/.aws/credentials\". */\n\tsource?: string;\n\t/**\n\t * Resolved only from a shared cloud credential chain (AWS profile/keys/roles, Google ADC)\n\t * that exists for other tools too, not from a credential configured for this provider.\n\t */\n\tambient?: true;\n}\n\nexport interface AuthCheck {\n\tsource?: string;\n\ttype: \"api_key\" | \"oauth\";\n\t/** Same meaning as `AuthResult.ambient`. */\n\tambient?: true;\n}\n\nexport type AuthType = \"api_key\" | \"oauth\";\n\n/**\n * Prompt shown to the user during login. `signal` lets the flow cancel a\n * pending prompt when an out-of-band event resolves the step, e.g. a\n * `manual_code` prompt raced against a callback server, aborted when the\n * callback wins.\n */\nexport type AuthPrompt = { signal?: AbortSignal } & (\n\t| { type: \"text\"; message: string; placeholder?: string }\n\t| { type: \"secret\"; message: string; placeholder?: string }\n\t| { type: \"select\"; message: string; options: readonly { id: string; label: string; description?: string }[] }\n\t| { type: \"manual_code\"; message: string; placeholder?: string }\n);\n\nexport interface AuthInfoLink {\n\turl: string;\n\tlabel?: string;\n}\n\nexport type AuthEvent =\n\t| { type: \"info\"; message: string; links?: readonly AuthInfoLink[] }\n\t| { type: \"auth_url\"; url: string; instructions?: string }\n\t| {\n\t\t\ttype: \"device_code\";\n\t\t\tuserCode: string;\n\t\t\tverificationUri: string;\n\t\t\tintervalSeconds?: number;\n\t\t\texpiresInSeconds?: number;\n\t }\n\t| { type: \"progress\"; message: string };\n\n/** Secret-free receipt emitted only after the account write succeeds. */\nexport interface AccountLoginReceipt {\n\treadonly providerId: string;\n\treadonly name: string;\n\treadonly origin: \"generated\" | \"provider\";\n}\n\n/**\n * Login interaction callbacks serving both api-key and OAuth flows.\n *\n * `prompt()` returns the entered/selected string (`select` returns the option\n * id). Rejects on cancel/abort. `signal` aborts the whole login flow;\n * per-prompt cancellation uses `AuthPrompt.signal`.\n */\nexport interface AuthInteraction {\n\tsignal?: AbortSignal;\n\t/** Absent for provider-owned envelopes without one unambiguous new slot ID. */\n\tonAccountCommitted?(receipt: AccountLoginReceipt): void;\n\n\tprompt(prompt: AuthPrompt): Promise<string>;\n\tnotify(event: AuthEvent): void;\n}\n\n/** Normalized interaction passed to provider login implementations. */\nexport type ProviderAuthInteraction = Omit<AuthInteraction, \"onAccountCommitted\"> & { signal: AbortSignal };\n\n/**\n * Api-key auth: stored key/provider env plus ambient sources (env vars, AWS\n * profiles, ADC files). Ambient-only providers omit `login`.\n */\nexport interface ApiKeyAuth {\n\t/** Display name, e.g. \"Anthropic API key\". */\n\tname: string;\n\n\t/** Ambient compatibility adapter that must not outrank a stored OAuth credential. */\n\tambientOnly?: boolean;\n\n\t/** Interactive setup (prompt for key/provider env). Absent = ambient-only. */\n\tlogin?(interaction: ProviderAuthInteraction): Promise<ApiKeyCredential>;\n\n\t/**\n\t * Optional side-effect-free availability check. Use this when `resolve()` may\n\t * execute commands or perform other request-time work. Missing means Models\n\t * checks availability by resolving auth.\n\t */\n\tcheck?(input: {\n\t\tctx: AuthContext;\n\t\tcredential?: ApiKeyCredential;\n\t\tsignal: AbortSignal;\n\t}): Promise<AuthCheck | undefined>;\n\n\t/**\n\t * Resolve auth from the stored credential and/or ambient sources, merging\n\t * per field (`credential.key ?? env(\"...\")`, `credential.env?.NAME ?? env(\"...\")`).\n\t * undefined = not configured. Resolution is provider-scoped; model-specific\n\t * endpoint preparation happens after auth has been resolved.\n\t */\n\tresolve(input: {\n\t\tctx: AuthContext;\n\t\tcredential?: ApiKeyCredential;\n\t\tsignal: AbortSignal;\n\t}): Promise<AuthResult | undefined>;\n}\n\n/**\n * OAuth auth. The `refresh`/`toAuth` split lets `Models` own the locked\n * refresh pattern: `refresh` produces a credential, `toAuth` derives request\n * auth from whatever credential ends up stored.\n */\nexport interface OAuthAuth {\n\t/** Display name, e.g. \"Anthropic (Claude Pro/Max)\". */\n\tname: string;\n\n\t/** Whether access through this auth method is backed by a provider subscription. */\n\tisSubscription?: boolean;\n\n\t/** Selector label for the OAuth login option, e.g. \"Sign in with SuperGrok or X Premium\". */\n\tloginLabel?: string;\n\n\t/**\n\t * HTTP statuses with which the provider refuses a stored access token before its\n\t * own expiry says so (GitHub Copilot revokes its short-lived token server-side and\n\t * answers 401/403). The runtime re-exchanges that exact token once and retries the\n\t * request before surfacing the failure.\n\t */\n\trejectedTokenStatuses?: readonly number[];\n\n\tlogin(interaction: ProviderAuthInteraction): Promise<OAuthCredential>;\n\n\t/**\n\t * Exchange the refresh token. Network call; throws on failure\n\t * (invalid_grant etc.). `Models` runs this under the store lock.\n\t */\n\trefresh(credential: OAuthCredential, signal: AbortSignal): Promise<OAuthCredential>;\n\n\t/**\n\t * Optional side-effect-free availability check, mirroring `ApiKeyAuth.check`.\n\t * Supply this when a stored OAuth credential does not by itself imply the\n\t * provider is usable — for example a sentinel envelope that carries zero\n\t * accounts. When absent, any stored OAuth credential counts as configured.\n\t */\n\tcheck?(input: {\n\t\tctx: AuthContext;\n\t\tcredential?: OAuthCredential;\n\t\tsignal: AbortSignal;\n\t}): Promise<AuthCheck | undefined>;\n\n\t/**\n\t * Side-effect-free derivation of request auth from a valid credential.\n\t * Covers per-credential baseUrl (GitHub Copilot). Async so lazy wrappers\n\t * can load the implementation on first use.\n\t */\n\ttoAuth(credential: OAuthCredential): Promise<ModelAuth>;\n}\n\n/**\n * Provider auth. At least one of `apiKey`/`oauth` must be present: even\n * ambient-credential providers and keyless local servers provide `apiKey`\n * auth whose `resolve()` reports whether the provider is configured.\n */\nexport interface ProviderAuth {\n\tapiKey?: ApiKeyAuth;\n\toauth?: OAuthAuth;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"bedrock-provider.d.ts","sourceRoot":"","sources":["../src/bedrock-provider.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,qBAAqB;;;CAGjC,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"bedrock-provider.js","sourceRoot":"","sources":["../src/bedrock-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAExE,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACpC,MAAM;IACN,YAAY;CACZ,CAAC","sourcesContent":["import { stream, streamSimple } from \"./api/bedrock-converse-stream.ts\";\n\nexport const bedrockProviderModule = {\n\tstream,\n\tstreamSimple,\n};\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"bun-oauth.d.ts","sourceRoot":"","sources":["../src/bun-oauth.ts"],"names":[],"mappings":"AAWA,6EAA6E;AAC7E,wBAAgB,qBAAqB,IAAI,IAAI,CAY5C"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"bun-oauth.js","sourceRoot":"","sources":["../src/bun-oauth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAC;AAChF,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,+BAA+B,EAAE,MAAM,sBAAsB,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAE/C,6EAA6E;AAC7E,MAAM,UAAU,qBAAqB;IACpC,+BAA+B,CAAC;QAC/B,SAAS,EAAE,GAAG,EAAE,CAAC,cAAc;QAC/B,mBAAmB,EAAE,GAAG,EAAE,CAAC,wBAAwB;QACnD,aAAa,EAAE,GAAG,EAAE,CAAC,kBAAkB;QACvC,UAAU,EAAE,GAAG,EAAE,CAAC,eAAe;QACjC,UAAU,EAAE,GAAG,EAAE,CAAC,eAAe;QACjC,GAAG,EAAE,GAAG,EAAE,CAAC,QAAQ;QACnB,MAAM,EAAE,GAAG,EAAE,CAAC,WAAW;QACzB,KAAK,EAAE,GAAG,EAAE,CAAC,UAAU;QACvB,MAAM,EAAE,iBAAiB;KACzB,CAAC,CAAC;AACJ,CAAC","sourcesContent":["import { anthropicOAuth } from \"./auth/oauth/anthropic.ts\";\nimport { chatgptSubscriptionOAuth } from \"./auth/oauth/chatgpt-subscription.ts\";\nimport { cursorOAuth } from \"./auth/oauth/cursor.ts\";\nimport { devinOAuth } from \"./auth/oauth/devin.ts\";\nimport { githubCopilotOAuth } from \"./auth/oauth/github-copilot.ts\";\nimport { kimiCodingOAuth } from \"./auth/oauth/kimi-coding.ts\";\nimport { registerBundledOAuthFlowLoaders } from \"./auth/oauth/load.ts\";\nimport { openRouterOAuth } from \"./auth/oauth/openrouter.ts\";\nimport { createRadiusOAuth } from \"./auth/oauth/radius.ts\";\nimport { xaiOAuth } from \"./auth/oauth/xai.ts\";\n\n/** Register OAuth flows statically embedded in the standalone Bun binary. */\nexport function registerBunOAuthFlows(): void {\n\tregisterBundledOAuthFlowLoaders({\n\t\tanthropic: () => anthropicOAuth,\n\t\tchatgptSubscription: () => chatgptSubscriptionOAuth,\n\t\tgithubCopilot: () => githubCopilotOAuth,\n\t\topenrouter: () => openRouterOAuth,\n\t\tkimiCoding: () => kimiCodingOAuth,\n\t\txai: () => xaiOAuth,\n\t\tcursor: () => cursorOAuth,\n\t\tdevin: () => devinOAuth,\n\t\tradius: createRadiusOAuth,\n\t});\n}\n"]}
package/dist/cli.d.ts.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
package/dist/cli.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,MAAM,SAAS,GAAG,WAAW,CAAC;AAC9B,MAAM,SAAS,GAAG,gBAAgB,EAAE,CAAC,MAAM,CAC1C,CAAC,QAAQ,EAAsF,EAAE,CAChG,QAAQ,CAAC,IAAI,CAAC,KAAK,KAAK,SAAS,CAClC,CAAC;AAEF,SAAS,MAAM,CAAC,EAAsC,EAAE,QAAgB;IACvE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;AACjE,CAAC;AAED,SAAS,QAAQ;IAChB,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,EAAE,CAAC;IACtC,IAAI,CAAC;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAoC,CAAC;IACxF,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,EAAE,CAAC;IACX,CAAC;AACF,CAAC;AAED,SAAS,QAAQ,CAAC,IAAqC;IACtD,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AAClE,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,EAAsC,EAAE,UAAsB;IACzF,IAAI,UAAU,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,KAAK,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;QACvC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;YAChE,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,GAAG,CAAC,KAAK,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QACnE,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,MAAM,CAAC,EAAE,EAAE,mBAAmB,UAAU,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;QAC5G,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC5C,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACpD,OAAO,QAAQ,CAAC,EAAE,CAAC;IACpB,CAAC;IACD,OAAO,MAAM,CAAC,EAAE,EAAE,GAAG,UAAU,CAAC,OAAO,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AAC7G,CAAC;AAED,KAAK,UAAU,KAAK,CAAC,UAAkB;IACtC,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,UAAU,CAAC,CAAC;IACpE,IAAI,CAAC,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,UAAU,EAAE,CAAC,CAAC;IAClE,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7E,IAAI,CAAC;QACJ,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;YAClD,MAAM,EAAE,IAAI,eAAe,EAAE,CAAC,MAAM;YACpC,MAAM,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE,UAAU,CAAC;YACpD,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;gBACjB,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;oBACpB,KAAK,UAAU;wBACd,OAAO,CAAC,GAAG,CAAC,qCAAqC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;wBAC9D,IAAI,KAAK,CAAC,YAAY;4BAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;wBACxD,MAAM;oBACP,KAAK,aAAa;wBACjB,OAAO,CAAC,GAAG,CAAC,qCAAqC,KAAK,CAAC,eAAe,EAAE,CAAC,CAAC;wBAC1E,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;wBAC7C,MAAM;oBACP,KAAK,MAAM,CAAC;oBACZ,KAAK,UAAU;wBACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;wBAC3B,MAAM;gBACR,CAAC;YACF,CAAC;SACD,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,QAAQ,EAAE,CAAC;QACxB,IAAI,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC;QAC9B,QAAQ,CAAC,IAAI,CAAC,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,0BAA0B,SAAS,EAAE,CAAC,CAAC;IACpD,CAAC;YAAS,CAAC;QACV,EAAE,CAAC,KAAK,EAAE,CAAC;IACZ,CAAC;AACF,CAAC;AAED,KAAK,UAAU,IAAI;IAClB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACxB,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,MAAM,IAAI,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QAChF,MAAM,YAAY,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,KAAK,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5G,OAAO,CAAC,GAAG,CACV,mLAAmL,YAAY,EAAE,CACjM,CAAC;QACF,OAAO;IACR,CAAC;IACD,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QACxB,KAAK,MAAM,QAAQ,IAAI,SAAS;YAAE,OAAO,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;QAC5F,OAAO;IACR,CAAC;IACD,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;QACzB,IAAI,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACzB,IAAI,CAAC,UAAU,EAAE,CAAC;YACjB,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;YAC7E,IAAI,CAAC;gBACJ,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;oBACvD,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,GAAG,CAAC,KAAK,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;gBACzD,CAAC;gBACD,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,MAAM,CAAC,EAAE,EAAE,mBAAmB,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;gBAClG,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;YACnC,CAAC;oBAAS,CAAC;gBACV,EAAE,CAAC,KAAK,EAAE,CAAC;YACZ,CAAC;QACF,CAAC;QACD,IAAI,CAAC,UAAU,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,KAAK,UAAU,CAAC,EAAE,CAAC;YAC9E,MAAM,IAAI,KAAK,CAAC,qBAAqB,UAAU,IAAI,EAAE,EAAE,CAAC,CAAC;QAC1D,CAAC;QACD,MAAM,KAAK,CAAC,UAAU,CAAC,CAAC;QACxB,OAAO;IACR,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAC;AAChD,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;IAC/B,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAChF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjB,CAAC,CAAC,CAAC","sourcesContent":["#!/usr/bin/env node\n\nimport { existsSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { createInterface } from \"node:readline\";\nimport type { AuthPrompt, OAuthCredential, Provider } from \"./index.ts\";\nimport { builtinProviders } from \"./providers/all.ts\";\n\nconst AUTH_FILE = \"auth.json\";\nconst PROVIDERS = builtinProviders().filter(\n\t(provider): provider is Provider & { auth: { oauth: NonNullable<Provider[\"auth\"][\"oauth\"]> } } =>\n\t\tprovider.auth.oauth !== undefined,\n);\n\nfunction prompt(rl: ReturnType<typeof createInterface>, question: string): Promise<string> {\n\treturn new Promise((resolve) => rl.question(question, resolve));\n}\n\nfunction loadAuth(): Record<string, OAuthCredential> {\n\tif (!existsSync(AUTH_FILE)) return {};\n\ttry {\n\t\treturn JSON.parse(readFileSync(AUTH_FILE, \"utf-8\")) as Record<string, OAuthCredential>;\n\t} catch {\n\t\treturn {};\n\t}\n}\n\nfunction saveAuth(auth: Record<string, OAuthCredential>): void {\n\twriteFileSync(AUTH_FILE, JSON.stringify(auth, null, 2), \"utf-8\");\n}\n\nasync function answerPrompt(rl: ReturnType<typeof createInterface>, authPrompt: AuthPrompt): Promise<string> {\n\tif (authPrompt.type === \"select\") {\n\t\tconsole.log(`\\n${authPrompt.message}`);\n\t\tfor (let index = 0; index < authPrompt.options.length; index++) {\n\t\t\tconsole.log(` ${index + 1}. ${authPrompt.options[index].label}`);\n\t\t}\n\t\tconst choice = Number.parseInt(await prompt(rl, `Enter number (1-${authPrompt.options.length}): `), 10) - 1;\n\t\tconst selected = authPrompt.options[choice];\n\t\tif (!selected) throw new Error(\"Invalid selection\");\n\t\treturn selected.id;\n\t}\n\treturn prompt(rl, `${authPrompt.message}${authPrompt.placeholder ? ` (${authPrompt.placeholder})` : \"\"}: `);\n}\n\nasync function login(providerId: string): Promise<void> {\n\tconst provider = PROVIDERS.find((entry) => entry.id === providerId);\n\tif (!provider) throw new Error(`Unknown provider: ${providerId}`);\n\tconst rl = createInterface({ input: process.stdin, output: process.stdout });\n\ttry {\n\t\tconst credential = await provider.auth.oauth.login({\n\t\t\tsignal: new AbortController().signal,\n\t\t\tprompt: (authPrompt) => answerPrompt(rl, authPrompt),\n\t\t\tnotify: (event) => {\n\t\t\t\tswitch (event.type) {\n\t\t\t\t\tcase \"auth_url\":\n\t\t\t\t\t\tconsole.log(`\\nOpen this URL in your browser:\\n${event.url}`);\n\t\t\t\t\t\tif (event.instructions) console.log(event.instructions);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"device_code\":\n\t\t\t\t\t\tconsole.log(`\\nOpen this URL in your browser:\\n${event.verificationUri}`);\n\t\t\t\t\t\tconsole.log(`Enter code: ${event.userCode}`);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"info\":\n\t\t\t\t\tcase \"progress\":\n\t\t\t\t\t\tconsole.log(event.message);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t},\n\t\t});\n\t\tconst auth = loadAuth();\n\t\tauth[providerId] = credential;\n\t\tsaveAuth(auth);\n\t\tconsole.log(`\\nCredentials saved to ${AUTH_FILE}`);\n\t} finally {\n\t\trl.close();\n\t}\n}\n\nasync function main(): Promise<void> {\n\tconst args = process.argv.slice(2);\n\tconst command = args[0];\n\tif (!command || command === \"help\" || command === \"--help\" || command === \"-h\") {\n\t\tconst providerList = PROVIDERS.map((provider) => ` ${provider.id.padEnd(20)} ${provider.name}`).join(\"\\n\");\n\t\tconsole.log(\n\t\t\t`Usage: npx @earendil-works/pi-ai <command> [provider]\\n\\nCommands:\\n login [provider] Login to an OAuth provider\\n list List available providers\\n\\nProviders:\\n${providerList}`,\n\t\t);\n\t\treturn;\n\t}\n\tif (command === \"list\") {\n\t\tfor (const provider of PROVIDERS) console.log(`${provider.id.padEnd(20)} ${provider.name}`);\n\t\treturn;\n\t}\n\tif (command === \"login\") {\n\t\tlet providerId = args[1];\n\t\tif (!providerId) {\n\t\t\tconst rl = createInterface({ input: process.stdin, output: process.stdout });\n\t\t\ttry {\n\t\t\t\tfor (let index = 0; index < PROVIDERS.length; index++) {\n\t\t\t\t\tconsole.log(` ${index + 1}. ${PROVIDERS[index].name}`);\n\t\t\t\t}\n\t\t\t\tconst index = Number.parseInt(await prompt(rl, `Enter number (1-${PROVIDERS.length}): `), 10) - 1;\n\t\t\t\tproviderId = PROVIDERS[index]?.id;\n\t\t\t} finally {\n\t\t\t\trl.close();\n\t\t\t}\n\t\t}\n\t\tif (!providerId || !PROVIDERS.some((provider) => provider.id === providerId)) {\n\t\t\tthrow new Error(`Unknown provider: ${providerId ?? \"\"}`);\n\t\t}\n\t\tawait login(providerId);\n\t\treturn;\n\t}\n\tthrow new Error(`Unknown command: ${command}`);\n}\n\nmain().catch((error: unknown) => {\n\tconsole.error(\"Error:\", error instanceof Error ? error.message : String(error));\n\tprocess.exit(1);\n});\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"extension-oauth-types.d.ts","sourceRoot":"","sources":["../../src/compat/extension-oauth-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEzD,mEAAmE;AACnE,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC;AAErC,qCAAqC;AACrC,MAAM,WAAW,WAAW;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;OAIG;IACH,MAAM,CAAC,EAAE,WAAW,CAAC;CACrB;AAED,iDAAiD;AACjD,MAAM,WAAW,aAAa;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,uDAAuD;AACvD,MAAM,WAAW,mBAAmB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAiB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,SAAS,iBAAiB,EAAE,CAAC;IACtC,mEAAmE;IACnE,MAAM,CAAC,EAAE,WAAW,CAAC;CACrB;AAED,+EAA+E;AAC/E,MAAM,WAAW,mBAAmB;IACnC,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,CAAC;IAClC,YAAY,CAAC,IAAI,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAC9C,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/C,UAAU,CAAC,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,iBAAiB,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IACtC,QAAQ,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IACjE,MAAM,CAAC,EAAE,WAAW,CAAC;CACrB;AAED,YAAY,EAAE,gBAAgB,EAAE,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"extension-oauth-types.js","sourceRoot":"","sources":["../../src/compat/extension-oauth-types.ts"],"names":[],"mappings":"","sourcesContent":["import type { OAuthCredentials } from \"../auth/types.ts\";\n\n/** Legacy provider identifier accepted by extension OAuth APIs. */\nexport type OAuthProviderId = string;\n\n/** Legacy extension OAuth prompt. */\nexport interface OAuthPrompt {\n\tmessage: string;\n\tplaceholder?: string;\n\tallowEmpty?: boolean;\n\t/**\n\t * Per-prompt cancellation, forwarded from `AuthPrompt.signal`: a provider\n\t * aborts it when an out-of-band step resolves the flow, e.g. a manual-code\n\t * prompt raced against a local callback server.\n\t */\n\tsignal?: AbortSignal;\n}\n\n/** Legacy extension OAuth authorization link. */\nexport interface OAuthAuthInfo {\n\turl: string;\n\tinstructions?: string;\n}\n\n/** Legacy extension OAuth device-code notification. */\nexport interface OAuthDeviceCodeInfo {\n\tuserCode: string;\n\tverificationUri: string;\n\tintervalSeconds?: number;\n\texpiresInSeconds?: number;\n}\n\nexport interface OAuthSelectOption {\n\tid: string;\n\tlabel: string;\n\tdescription?: string;\n}\n\nexport interface OAuthSelectPrompt {\n\tmessage: string;\n\toptions: readonly OAuthSelectOption[];\n\t/** Per-prompt cancellation, forwarded from `AuthPrompt.signal`. */\n\tsignal?: AbortSignal;\n}\n\n/** Callback surface retained only for coding-agent extension compatibility. */\nexport interface OAuthLoginCallbacks {\n\tonAuth(info: OAuthAuthInfo): void;\n\tonDeviceCode(info: OAuthDeviceCodeInfo): void;\n\tonPrompt(prompt: OAuthPrompt): Promise<string>;\n\tonProgress?(message: string): void;\n\tonManualCodeInput?(): Promise<string>;\n\tonSelect(prompt: OAuthSelectPrompt): Promise<string | undefined>;\n\tsignal?: AbortSignal;\n}\n\nexport type { OAuthCredentials };\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"compat.d.ts","sourceRoot":"","sources":["../src/compat.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,cAAc,kCAAkC,CAAC;AACjD,cAAc,sCAAsC,CAAC;AACrD,cAAc,uCAAuC,CAAC;AACtD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,oCAAoC,CAAC;AACnD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,qCAAqC,CAAC;AACpD,cAAc,sCAAsC,CAAC;AACrD,cAAc,kCAAkC,CAAC;AACjD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,0BAA0B,CAAC;AACzC,cAAc,YAAY,CAAC;AAC3B,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yCAAyC,CAAC;AACxD,OAAO,EACN,WAAW,EACX,iBAAiB,EACjB,gBAAgB,EAChB,gCAAgC,GAChC,MAAM,iCAAiC,CAAC;AAgBzC,OAAO,EAAiB,eAAe,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAE3G,YAAY,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE1D,OAAO,EAAkB,KAAK,wBAAwB,EAAE,KAAK,2BAA2B,EAAE,MAAM,qBAAqB,CAAC;AAOtH,OAAO,KAAK,EACX,GAAG,EAEH,gBAAgB,EAChB,2BAA2B,EAC3B,OAAO,EACP,KAAK,EACL,qBAAqB,EAErB,mBAAmB,EAEnB,MAAM,YAAY,CAAC;AAEpB,gIAAgI;AAChI,eAAO,MAAM,QAAQ,wBAAkB,CAAC;AAExC,kIAAkI;AAClI,eAAO,MAAM,SAAS,yBAAmB,CAAC;AAE1C,wIAAwI;AACxI,eAAO,MAAM,YAAY,4BAAsB,CAAC;AAEhD,OAAO,EACN,KAAK,WAAW,EAChB,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,uBAAuB,EAC5B,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,sBAAsB,GACtB,MAAM,mBAAmB,CAAC;AAU3B,wBAAgB,oBAAoB,CAAC,OAAO,GAAE,2BAAgC,GAAG,wBAAwB,CAiBxG;AAmBD;;;;GAIG;AACH,wBAAgB,2BAA2B,IAAI,IAAI,CAQlD;AAED,wBAAgB,iBAAiB,IAAI,IAAI,CAIxC;AAuCD,wBAAgB,MAAM,CAAC,IAAI,SAAS,GAAG,EACtC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,EAClB,OAAO,EAAE,OAAO,EAChB,OAAO,CAAC,EAAE,qBAAqB,GAC7B,2BAA2B,CAkB7B;AAED,wBAAsB,QAAQ,CAAC,IAAI,SAAS,GAAG,EAC9C,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,EAClB,OAAO,EAAE,OAAO,EAChB,OAAO,CAAC,EAAE,qBAAqB,GAC7B,OAAO,CAAC,gBAAgB,CAAC,CAG3B;AAED,wBAAgB,YAAY,CAAC,IAAI,SAAS,GAAG,EAC5C,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,EAClB,OAAO,EAAE,OAAO,EAChB,OAAO,CAAC,EAAE,mBAAmB,GAC3B,2BAA2B,CAkB7B;AAED,wBAAsB,cAAc,CAAC,IAAI,SAAS,GAAG,EACpD,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,EAClB,OAAO,EAAE,OAAO,EAChB,OAAO,CAAC,EAAE,mBAAmB,GAC3B,OAAO,CAAC,gBAAgB,CAAC,CAG3B"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"compat.js","sourceRoot":"","sources":["../src/compat.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Temporary compatibility entrypoint preserving the old global pi-ai API\n * surface: api-dispatch `stream()`/`complete()` with env API key injection,\n * the api-registry, generated catalog reads (`getModel`/`getModels`/\n * `getProviders`), per-API lazy stream wrappers, and image generation.\n *\n * Existing apps switch imports from \"@earendil-works/pi-ai\" to\n * \"@earendil-works/pi-ai/compat\" unchanged; new code uses `createModels()`\n * and the provider factories. This module is deleted with the coding-agent\n * ModelManager migration.\n */\n\nexport * from \"./api/anthropic-messages.lazy.ts\";\nexport * from \"./api/azure-openai-responses.lazy.ts\";\nexport * from \"./api/bedrock-converse-stream.lazy.ts\";\nexport * from \"./api/cursor-agent.lazy.ts\";\nexport * from \"./api/devin-agent.lazy.ts\";\nexport * from \"./api/google-generative-ai.lazy.ts\";\nexport * from \"./api/google-vertex.lazy.ts\";\nexport * from \"./api/mistral-conversations.lazy.ts\";\nexport * from \"./api/openai-codex-responses.lazy.ts\";\nexport * from \"./api/openai-completions.lazy.ts\";\nexport * from \"./api/openai-responses.lazy.ts\";\nexport * from \"./api/pi-messages.lazy.ts\";\nexport * from \"./env-api-keys.ts\";\nexport * from \"./image-models.ts\";\nexport * from \"./images.ts\";\nexport * from \"./images-api-registry.ts\";\nexport * from \"./index.ts\";\nexport * from \"./legacy-api-aliases.ts\";\nexport * from \"./legacy-provider-ids.ts\";\nexport * from \"./providers/images/register-builtins.ts\";\nexport {\n\tgetProtocol,\n\tgetToolCallFormat,\n\ttransformContext,\n\twrapStreamWithToolCallMiddleware,\n} from \"./tool-call-middleware/index.ts\";\n\nimport { anthropicMessagesApi } from \"./api/anthropic-messages.lazy.ts\";\nimport { azureOpenAIResponsesApi } from \"./api/azure-openai-responses.lazy.ts\";\nimport { bedrockConverseStreamApi } from \"./api/bedrock-converse-stream.lazy.ts\";\nimport { cursorAgentApi } from \"./api/cursor-agent.lazy.ts\";\nimport { devinAgentApi } from \"./api/devin-agent.lazy.ts\";\nimport { googleGenerativeAIApi } from \"./api/google-generative-ai.lazy.ts\";\nimport { googleVertexApi } from \"./api/google-vertex.lazy.ts\";\nimport { mistralConversationsApi } from \"./api/mistral-conversations.lazy.ts\";\nimport { openAICodexResponsesApi } from \"./api/openai-codex-responses.lazy.ts\";\nimport { openAICompletionsApi } from \"./api/openai-completions.lazy.ts\";\nimport { openAIResponsesApi } from \"./api/openai-responses.lazy.ts\";\nimport { piMessagesApi } from \"./api/pi-messages.lazy.ts\";\nimport { getEnvApiKey } from \"./env-api-keys.ts\";\nimport type { ModelsApiStreamOptions } from \"./models.ts\";\nimport { builtinModels, getBuiltinModel, getBuiltinModels, getBuiltinProviders } from \"./providers/all.ts\";\n\nexport type { BuiltinProvider } from \"./providers/all.ts\";\n\nimport { createFauxCore, type FauxProviderRegistration, type RegisterFauxProviderOptions } from \"./providers/faux.ts\";\nimport {\n\tgetProtocol,\n\tgetToolCallFormat,\n\ttransformContext,\n\twrapStreamWithToolCallMiddleware,\n} from \"./tool-call-middleware/index.ts\";\nimport type {\n\tApi,\n\tApiStreamOptions,\n\tAssistantMessage,\n\tAssistantMessageEventStream,\n\tContext,\n\tModel,\n\tProviderStreamOptions,\n\tProviderStreams,\n\tSimpleStreamOptions,\n\tStreamOptions,\n} from \"./types.ts\";\n\n/** @deprecated Static catalog read. Use `getBuiltinModel` from \"@earendil-works/pi-ai/providers/all\" or `Models.getModel()`. */\nexport const getModel = getBuiltinModel;\n\n/** @deprecated Static catalog read. Use `getBuiltinModels` from \"@earendil-works/pi-ai/providers/all\" or `Models.getModels()`. */\nexport const getModels = getBuiltinModels;\n\n/** @deprecated Static catalog read. Use `getBuiltinProviders` from \"@earendil-works/pi-ai/providers/all\" or `Models.getProviders()`. */\nexport const getProviders = getBuiltinProviders;\n\nexport {\n\ttype ApiProvider,\n\ttype ApiProviderInternal,\n\ttype ApiStreamFunction,\n\ttype ApiStreamSimpleFunction,\n\tgetApiProvider,\n\tgetApiProviders,\n\tregisterApiProvider,\n\tunregisterApiProviders,\n} from \"./api-registry.ts\";\n\nimport {\n\tclearApiProviders,\n\tgetApiProvider,\n\tregisterApiProvider,\n\tregisterBuiltinApiProvider,\n\tunregisterApiProviders,\n} from \"./api-registry.ts\";\n\nexport function registerFauxProvider(options: RegisterFauxProviderOptions = {}): FauxProviderRegistration {\n\tconst core = createFauxCore(options);\n\tconst sourceId = `faux-provider-${Math.random().toString(36).slice(2, 10)}`;\n\tregisterApiProvider({ api: core.api, stream: core.stream, streamSimple: core.streamSimple }, sourceId);\n\treturn {\n\t\tapi: core.api,\n\t\tmodels: core.models,\n\t\tgetModel: core.getModel,\n\t\tstate: core.state,\n\t\tsetResponses: core.setResponses,\n\t\tappendResponses: core.appendResponses,\n\t\tgetPendingResponseCount: core.getPendingResponseCount,\n\t\tgetCallLog: core.getCallLog,\n\t\tunregister() {\n\t\t\tunregisterApiProviders(sourceId);\n\t\t},\n\t};\n}\n\nconst BUILTIN_APIS: [Api, ProviderStreams][] = [\n\t[\"anthropic-messages\", anthropicMessagesApi()],\n\t[\"openai-completions\", openAICompletionsApi()],\n\t[\"openai-responses\", openAIResponsesApi()],\n\t[\"openai-codex-responses\", openAICodexResponsesApi()],\n\t[\"cursor-agent\", cursorAgentApi()],\n\t[\"devin-agent\", devinAgentApi()],\n\t[\"azure-openai-responses\", azureOpenAIResponsesApi()],\n\t[\"google-generative-ai\", googleGenerativeAIApi()],\n\t[\"google-vertex\", googleVertexApi()],\n\t[\"mistral-conversations\", mistralConversationsApi()],\n\t[\"bedrock-converse-stream\", bedrockConverseStreamApi()],\n\t[\"pi-messages\", piMessagesApi()],\n];\n\nconst builtinApiProviderInstances = new Map<Api, ReturnType<typeof getApiProvider>>();\n\n/**\n * Registers the builtin API implementations into the api-registry without\n * clobbering existing entries: compat may load after a test or extension has\n * already registered an override for a builtin api id.\n */\nexport function registerBuiltInApiProviders(): void {\n\tfor (const [api, streams] of BUILTIN_APIS) {\n\t\tregisterBuiltinApiProvider({ api, stream: streams.stream, streamSimple: streams.streamSimple });\n\t\tif (!getApiProvider(api)) {\n\t\t\tregisterApiProvider({ api, stream: streams.stream, streamSimple: streams.streamSimple });\n\t\t}\n\t\tbuiltinApiProviderInstances.set(api, getApiProvider(api));\n\t}\n}\n\nexport function resetApiProviders(): void {\n\tclearApiProviders();\n\tbuiltinApiProviderInstances.clear();\n\tregisterBuiltInApiProviders();\n}\n\nregisterBuiltInApiProviders();\n\nconst compatModels = builtinModels();\nconst AMBIENT_AUTH_MARKER = \"<authenticated>\";\n\nfunction hasExplicitApiKey(apiKey: string | undefined): apiKey is string {\n\treturn typeof apiKey === \"string\" && apiKey.trim().length > 0;\n}\n\nfunction withEnvApiKey<TOptions extends StreamOptions>(\n\tmodel: Model<Api>,\n\toptions: TOptions | undefined,\n): TOptions | undefined {\n\tif (hasExplicitApiKey(options?.apiKey)) return options;\n\tconst apiKey = getEnvApiKey(model.provider, options?.env);\n\tif (!apiKey || apiKey === AMBIENT_AUTH_MARKER) return options;\n\treturn { ...options, apiKey } as TOptions;\n}\n\nfunction hasResolvedCloudflareAuth(options: StreamOptions | undefined): boolean {\n\treturn hasExplicitApiKey(options?.apiKey) || typeof options?.headers?.[\"cf-aig-authorization\"] === \"string\";\n}\n\nfunction getBuiltinProviderForModel(model: Model<Api>) {\n\tif (getApiProvider(model.api) !== builtinApiProviderInstances.get(model.api)) return undefined;\n\tconst provider = compatModels.getProvider(model.provider);\n\treturn provider?.getModels().some((candidate) => candidate.api === model.api) ? provider : undefined;\n}\n\nfunction resolveApiProvider(api: Api) {\n\tconst provider = getApiProvider(api);\n\tif (!provider) {\n\t\tthrow new Error(`No API provider registered for api: ${api}`);\n\t}\n\treturn provider;\n}\n\nexport function stream<TApi extends Api>(\n\tmodel: Model<TApi>,\n\tcontext: Context,\n\toptions?: ProviderStreamOptions,\n): AssistantMessageEventStream {\n\tconst format = getToolCallFormat(model);\n\tif (format && context.tools && context.tools.length > 0) {\n\t\tconst protocol = getProtocol(format);\n\t\tconst transformedContext = transformContext(context, protocol);\n\t\tconst innerStream = stream(model, transformedContext, options);\n\t\treturn wrapStreamWithToolCallMiddleware(innerStream, protocol, context.tools);\n\t}\n\n\tconst builtinProvider = getBuiltinProviderForModel(model);\n\tif (builtinProvider) {\n\t\tif (model.provider.startsWith(\"cloudflare-\") && !hasResolvedCloudflareAuth(options)) {\n\t\t\treturn compatModels.stream(model, context, options as ModelsApiStreamOptions<TApi> | undefined);\n\t\t}\n\t\treturn builtinProvider.stream(model, context, withEnvApiKey(model, options) as ApiStreamOptions<TApi>);\n\t}\n\tconst provider = resolveApiProvider(model.api);\n\treturn provider.stream(model, context, withEnvApiKey(model, options) as StreamOptions);\n}\n\nexport async function complete<TApi extends Api>(\n\tmodel: Model<TApi>,\n\tcontext: Context,\n\toptions?: ProviderStreamOptions,\n): Promise<AssistantMessage> {\n\tconst s = stream(model, context, options);\n\treturn s.result();\n}\n\nexport function streamSimple<TApi extends Api>(\n\tmodel: Model<TApi>,\n\tcontext: Context,\n\toptions?: SimpleStreamOptions,\n): AssistantMessageEventStream {\n\tconst format = getToolCallFormat(model);\n\tif (format && context.tools && context.tools.length > 0) {\n\t\tconst protocol = getProtocol(format);\n\t\tconst transformedContext = transformContext(context, protocol);\n\t\tconst innerStream = streamSimple(model, transformedContext, options);\n\t\treturn wrapStreamWithToolCallMiddleware(innerStream, protocol, context.tools);\n\t}\n\n\tconst builtinProvider = getBuiltinProviderForModel(model);\n\tif (builtinProvider) {\n\t\tif (model.provider.startsWith(\"cloudflare-\") && !hasResolvedCloudflareAuth(options)) {\n\t\t\treturn compatModels.streamSimple(model, context, options);\n\t\t}\n\t\treturn builtinProvider.streamSimple(model, context, withEnvApiKey(model, options));\n\t}\n\tconst provider = resolveApiProvider(model.api);\n\treturn provider.streamSimple(model, context, withEnvApiKey(model, options));\n}\n\nexport async function completeSimple<TApi extends Api>(\n\tmodel: Model<TApi>,\n\tcontext: Context,\n\toptions?: SimpleStreamOptions,\n): Promise<AssistantMessage> {\n\tconst s = streamSimple(model, context, options);\n\treturn s.result();\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"context-provenance.d.ts","sourceRoot":"","sources":["../src/context-provenance.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,0BAA0B,CAAC;AAEhE,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAUxD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,iBAAiB,GAAG,SAAS,CAIlF;AAED,4EAA4E;AAC5E,wBAAgB,qBAAqB,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,CAGrF;AAED;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAK/E"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"context-provenance.js","sourceRoot":"","sources":["../src/context-provenance.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,uBAAuB,CAAC;AAQhE,SAAS,QAAQ,CAAC,KAAc;IAC/B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC7E,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,KAAc;IAClD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACvC,MAAM,UAAU,GAAG,KAAK,CAAC,wBAAwB,CAAC,CAAC;IACnD,OAAO,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;AACtD,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,qBAAqB,CAAmB,MAAe,EAAE,MAAS;IACjF,MAAM,UAAU,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAChD,OAAO,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AAChG,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,4BAA4B,CAAC,KAAc;IAC1D,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACvC,MAAM,KAAK,GAAG,EAAE,GAAG,KAAK,EAA8B,CAAC;IACvD,OAAO,KAAK,CAAC,wBAAwB,CAAC,CAAC;IACvC,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAC9B,CAAC","sourcesContent":["/**\n * Request-local context provenance. Providers keep this metadata out of their\n * wire payloads while allowing a context producer to prove that a transformed\n * input item still represents the same source message.\n */\nexport const CONTEXT_PROVENANCE_FIELD = \"__piContextProvenance\";\n\nexport type ContextProvenance = Record<string, unknown>;\n\ntype ContextProvenanceCarrier = {\n\t[CONTEXT_PROVENANCE_FIELD]?: ContextProvenance;\n};\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nexport function getContextProvenance(value: unknown): ContextProvenance | undefined {\n\tif (!isRecord(value)) return undefined;\n\tconst provenance = value[CONTEXT_PROVENANCE_FIELD];\n\treturn isRecord(provenance) ? provenance : undefined;\n}\n\n/** Copy request-local provenance across a context representation change. */\nexport function copyContextProvenance<T extends object>(source: unknown, target: T): T {\n\tconst provenance = getContextProvenance(source);\n\treturn provenance ? Object.assign(target, { [CONTEXT_PROVENANCE_FIELD]: provenance }) : target;\n}\n\n/**\n * Stable within one request and intentionally never serialized to a provider.\n * A mismatch is proof that a context hook changed a marked source message.\n */\nexport function contextProvenanceFingerprint(value: unknown): string | undefined {\n\tif (!isRecord(value)) return undefined;\n\tconst clone = { ...value } as ContextProvenanceCarrier;\n\tdelete clone[CONTEXT_PROVENANCE_FIELD];\n\treturn JSON.stringify(clone);\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"catalog-grouping.d.ts","sourceRoot":"","sources":["../../src/cursor/catalog-grouping.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAExE,OAAO,EAGN,KAAK,kBAAkB,EAGvB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAE/D,MAAM,WAAW,qBAAqB;IACrC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC;IAC9C,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;CAChC;AAED,MAAM,WAAW,kBAAkB;IAClC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IAC7C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,CAAC,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC;IACrC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,uBAAuB,CAAC,EAAE,MAAM,CAAC;IAC1C,QAAQ,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1C;;;;OAIG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;CAC5E;AAuHD;;;;;;;;GAQG;AACH,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,SAAS,MAAM,EAAE,GAAG,WAAW,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAgD1G;AAED,+GAA+G;AAC/G,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,SAAS,qBAAqB,EAAE,GAAG,kBAAkB,EAAE,CAkFzG"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"catalog-grouping.js","sourceRoot":"","sources":["../../src/cursor/catalog-grouping.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ModelThinkingLevel, ThinkingLevelMap } from \"../types.ts\";\nimport aliasData from \"./cursor-variant-aliases.json\" with { type: \"json\" };\nimport {\n\tCURSOR_MODEL_CAPABILITIES,\n\ttype CursorModelCapability,\n\ttype CursorVariantAlias,\n\tgetCursorVariantAlias,\n\tparseCursorVariantId,\n} from \"./model-capabilities.ts\";\n\nexport { parseCursorVariantId } from \"./model-capabilities.ts\";\n\nexport interface CursorCatalogRawEntry {\n\treadonly id: string;\n\treadonly name: string;\n\treadonly input: readonly (\"text\" | \"image\")[];\n\treadonly cursorMaxMode: boolean;\n}\n\nexport interface CursorCatalogEntry {\n\treadonly id: string;\n\treadonly name: string;\n\treadonly reasoning: boolean;\n\treadonly thinkingLevelMap?: ThinkingLevelMap;\n\treadonly window: number;\n\treadonly maxWindow?: number;\n\treadonly input: (\"text\" | \"image\")[];\n\treadonly cursorMaxMode: boolean;\n\treadonly capabilityId?: string;\n\treadonly thinkingMode?: boolean;\n\treadonly representativeVariantId?: string;\n\treadonly legacyAliases: readonly string[];\n\t/**\n\t * Derived-group variant ids: normalized thinking level -> the exact server-listed\n\t * variant id the live catalog serves. Present only on identities derived at\n\t * runtime from ids the static alias table does not list (senpi#2038).\n\t */\n\treadonly variantIds?: Readonly<Partial<Record<ModelThinkingLevel, string>>>;\n}\n\nconst ALL_LEVELS = [\"off\", \"minimal\", \"low\", \"medium\", \"high\", \"xhigh\", \"max\"] as const;\nconst FALLBACK_WINDOW = 200000;\nconst STATIC_TARGETS = new Set(Object.values(aliasData.aliases).map((alias) => alias.targetId));\n\ninterface GroupMember {\n\treadonly raw: CursorCatalogRawEntry;\n\treadonly alias: CursorVariantAlias;\n\treadonly level: string | undefined;\n\treadonly thinking: boolean | undefined;\n\treadonly fast: boolean;\n}\n\nfunction isClaude(baseId: string): boolean {\n\treturn baseId.startsWith(\"claude-\");\n}\n\nfunction cleanName(members: readonly GroupMember[], baseId: string, thinkingMode: boolean | undefined): string {\n\tconst levelWords = /(Minimal|Low|Medium|High|Extra High|XHigh|Max|None)/g;\n\tconst representative =\n\t\tmembers.find((member) => member.level === \"high\") ??\n\t\tmembers.find((member) => member.level === \"medium\") ??\n\t\tmembers.find((member) => member.level === \"low\") ??\n\t\tmembers[0];\n\tlet name = representative.raw.name;\n\tname = name.replace(/\\s*\\(NO ZDR\\)\\s*/g, \" \\u0001\").trim();\n\tname = name.replace(new RegExp(`\\\\s+${levelWords.source}\\\\b`, \"g\"), \"\");\n\tname = name.replace(/\\s+Fast\\b/g, \"\");\n\tif (thinkingMode !== true) name = name.replace(/\\s+Thinking\\b/g, \"\");\n\tname = name\n\t\t.replace(/\\u0001/g, \"(NO ZDR)\")\n\t\t.replace(/\\s+/g, \" \")\n\t\t.trim();\n\tif (name.length === 0) name = baseId;\n\treturn name;\n}\n\nfunction buildLevelMap(\n\tmembers: readonly GroupMember[],\n\tcapability: CursorModelCapability | undefined,\n): ThinkingLevelMap {\n\tconst observed = new Set(\n\t\tmembers.map((member) => member.level).filter((level): level is string => level !== undefined),\n\t);\n\tconst map = {} as Record<ModelThinkingLevel, string | null>;\n\tfor (const level of ALL_LEVELS) {\n\t\tif (level === \"off\") {\n\t\t\tconst offSpec = capability?.levels.off;\n\t\t\tmap.off = offSpec !== undefined && observed.has(\"none\") ? offSpec.value : null;\n\t\t\tcontinue;\n\t\t}\n\t\tconst spec = capability?.levels[level];\n\t\tmap[level] = spec !== undefined && (observed.has(level) || observed.has(spec.value)) ? spec.value : null;\n\t}\n\treturn map;\n}\n\nfunction pickRepresentative(members: readonly GroupMember[]): string {\n\tconst withLevels = members.filter((member) => member.level !== undefined && member.level !== \"none\");\n\tconst pool = withLevels.length > 0 ? withLevels : members;\n\tconst order = [\"medium\", \"low\", \"minimal\", \"high\", \"xhigh\", \"extra-high\", \"max\", \"none\"];\n\tconst sorted = [...pool].sort((a, b) => {\n\t\tconst ai = order.indexOf(a.level ?? \"none\");\n\t\tconst bi = order.indexOf(b.level ?? \"none\");\n\t\tif (ai !== bi) return ai - bi;\n\t\treturn a.alias.legacyVariantId.localeCompare(b.alias.legacyVariantId);\n\t});\n\treturn sorted[0].alias.legacyVariantId;\n}\n\nfunction normalizeDerivedLevel(token: string): ModelThinkingLevel | undefined {\n\tswitch (token) {\n\t\tcase \"none\":\n\t\t\treturn \"off\";\n\t\tcase \"extra-high\":\n\t\t\treturn \"xhigh\";\n\t\tcase \"minimal\":\n\t\tcase \"low\":\n\t\tcase \"medium\":\n\t\tcase \"high\":\n\t\tcase \"xhigh\":\n\t\tcase \"max\":\n\t\t\treturn token;\n\t\tdefault:\n\t\t\treturn undefined;\n\t}\n}\n\n/**\n * Every level is explicit: an unobserved level maps to `null` (unsupported), because the\n * shared model contract treats an absent ordinary level as supported and would otherwise\n * offer levels the server never listed.\n */\nfunction buildDerivedLevelMap(members: readonly GroupMember[]): ThinkingLevelMap {\n\tconst map = Object.fromEntries(ALL_LEVELS.map((level) => [level, null])) as Record<\n\t\tModelThinkingLevel,\n\t\tstring | null\n\t>;\n\tfor (const member of members) {\n\t\tconst level = member.alias.level;\n\t\tif (level !== undefined && member.level !== undefined && map[level] === null) {\n\t\t\tmap[level] = member.level;\n\t\t}\n\t}\n\treturn map;\n}\n\nfunction buildDerivedVariantIds(\n\tmembers: readonly GroupMember[],\n): Readonly<Partial<Record<ModelThinkingLevel, string>>> {\n\tconst map: Partial<Record<ModelThinkingLevel, string>> = {};\n\tfor (const member of members) {\n\t\tconst level = member.alias.level;\n\t\tif (level !== undefined && map[level] === undefined) map[level] = member.raw.id;\n\t}\n\treturn map;\n}\n\n/**\n * Derive variant-group aliases for raw ids the static alias table does not list.\n * A family (shared base id, with the `-thinking` infix as a separate identity for\n * Claude-style ids) is derived only when at least two distinct levels are observed\n * among its unlisted non-fast members in the same batch; `-fast` variants,\n * single-level families, and level-less ids stay flat exactly as today. Ids the\n * static table already covers are never re-derived, so static output stays\n * byte-identical (senpi#2038).\n */\nexport function deriveCursorVariantAliases(ids: readonly string[]): ReadonlyMap<string, CursorVariantAlias> {\n\tconst families = new Map<\n\t\tstring,\n\t\t{ targetId: string; levels: Set<ModelThinkingLevel>; members: [string, ModelThinkingLevel, string][] }\n\t>();\n\tconst rawIds = new Set(ids);\n\tfor (const id of ids) {\n\t\tif (getCursorVariantAlias(id) !== undefined) continue;\n\t\tconst parsed = parseCursorVariantId(id);\n\t\tif (parsed.fast || parsed.level === undefined || parsed.baseId === \"\") continue;\n\t\tconst level = normalizeDerivedLevel(parsed.level);\n\t\tif (level === undefined) continue;\n\t\tconst targetId = parsed.thinking === true ? `${parsed.baseId}-thinking` : parsed.baseId;\n\t\tconst family = families.get(targetId) ?? { targetId, levels: new Set(), members: [] };\n\t\tfamily.levels.add(level);\n\t\tfamily.members.push([id, level, parsed.level]);\n\t\tfamilies.set(targetId, family);\n\t}\n\tconst derived = new Map<string, CursorVariantAlias>();\n\tfor (const family of families.values()) {\n\t\t// A derived target must not shadow a static identity, a static alias key, or a raw id.\n\t\tif (\n\t\t\tfamily.levels.size < 2 ||\n\t\t\tSTATIC_TARGETS.has(family.targetId) ||\n\t\t\tgetCursorVariantAlias(family.targetId) !== undefined ||\n\t\t\trawIds.has(family.targetId)\n\t\t)\n\t\t\tcontinue;\n\t\tconst chosen = new Map<ModelThinkingLevel, string>();\n\t\tfor (const [id, level, suffix] of family.members) {\n\t\t\tconst previous = chosen.get(level);\n\t\t\tif (previous === undefined) {\n\t\t\t\tchosen.set(level, id);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst previousSuffix = parseCursorVariantId(previous).level;\n\t\t\tif (\n\t\t\t\t(suffix === level && previousSuffix !== level) ||\n\t\t\t\t((suffix === level) === (previousSuffix === level) && id < previous)\n\t\t\t) {\n\t\t\t\tchosen.set(level, id);\n\t\t\t}\n\t\t}\n\t\tfor (const [level, id] of chosen) {\n\t\t\tderived.set(id, { targetId: family.targetId, legacyVariantId: id, encoding: \"legacy-variant\", level });\n\t\t}\n\t}\n\treturn derived;\n}\n\n/** Normalize a raw Cursor catalog (live discovery, CLI scrape, or stored cache) into selectable identities. */\nexport function normalizeCursorCatalog(rawEntries: readonly CursorCatalogRawEntry[]): CursorCatalogEntry[] {\n\tconst derived = deriveCursorVariantAliases(rawEntries.map((raw) => raw.id));\n\tconst groups = new Map<string, GroupMember[]>();\n\tconst order: string[] = [];\n\tfor (const raw of rawEntries) {\n\t\tconst alias = getCursorVariantAlias(raw.id) ?? derived.get(raw.id);\n\t\tif (!alias) {\n\t\t\tconst parsed = parseCursorVariantId(raw.id);\n\t\t\tconst key = `unknown${parsed.baseId}${raw.id}`;\n\t\t\tif (!groups.has(key)) order.push(key);\n\t\t\tconst member: GroupMember = {\n\t\t\t\traw,\n\t\t\t\talias: { targetId: raw.id, legacyVariantId: raw.id, encoding: \"legacy-variant\" },\n\t\t\t\tlevel: parsed.level,\n\t\t\t\tthinking: parsed.thinking,\n\t\t\t\tfast: parsed.fast,\n\t\t\t};\n\t\t\tgroups.set(key, [member]);\n\t\t\tcontinue;\n\t\t}\n\t\tconst parsed = parseCursorVariantId(raw.id);\n\t\tconst key = `${alias.targetId}${parsed.fast}`;\n\t\tif (!groups.has(key)) {\n\t\t\torder.push(key);\n\t\t\tgroups.set(key, []);\n\t\t}\n\t\t(groups.get(key) as GroupMember[]).push({\n\t\t\traw,\n\t\t\talias,\n\t\t\tlevel: parsed.level,\n\t\t\tthinking: parsed.thinking,\n\t\t\tfast: parsed.fast,\n\t\t});\n\t}\n\n\tconst out: CursorCatalogEntry[] = [];\n\tfor (const key of order) {\n\t\tconst members = groups.get(key) as GroupMember[];\n\t\tconst first = members[0];\n\t\tconst baseParsed = parseCursorVariantId(first.alias.targetId);\n\t\tconst derivedGroup = members.every((member) => derived.has(member.raw.id));\n\t\tconst baseId = derivedGroup ? parseCursorVariantId(first.raw.id).baseId : baseParsed.baseId;\n\t\tconst capability = CURSOR_MODEL_CAPABILITIES[baseId];\n\t\tconst isGrouped = members.length > 1 || first.alias.targetId !== first.raw.id;\n\t\tconst efforts = members.filter((member) => member.level !== undefined && member.level !== \"none\");\n\n\t\tif (isGrouped && efforts.length > 0 && !first.fast) {\n\t\t\tconst thinkingMode = isClaude(baseId) ? first.thinking === true : undefined;\n\t\t\tout.push({\n\t\t\t\tid: first.alias.targetId,\n\t\t\t\tname: cleanName(members, baseId, thinkingMode),\n\t\t\t\treasoning: true,\n\t\t\t\tthinkingLevelMap: derivedGroup ? buildDerivedLevelMap(members) : buildLevelMap(members, capability),\n\t\t\t\twindow: capability?.window ?? FALLBACK_WINDOW,\n\t\t\t\t...(capability?.maxWindow !== undefined ? { maxWindow: capability.maxWindow } : {}),\n\t\t\t\tinput: [...new Set(members.flatMap((member) => member.raw.input))],\n\t\t\t\tcursorMaxMode: members.some((member) => member.raw.cursorMaxMode),\n\t\t\t\tcapabilityId: baseId,\n\t\t\t\t...(thinkingMode !== undefined ? { thinkingMode } : {}),\n\t\t\t\trepresentativeVariantId: pickRepresentative(members),\n\t\t\t\tlegacyAliases: members.map((member) => member.alias.legacyVariantId).sort(),\n\t\t\t\t...(derivedGroup ? { variantIds: buildDerivedVariantIds(members) } : {}),\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\n\t\tfor (const member of members) {\n\t\t\tconst memberBase = parseCursorVariantId(member.raw.id).baseId;\n\t\t\tconst memberCapability = CURSOR_MODEL_CAPABILITIES[memberBase];\n\t\t\tout.push({\n\t\t\t\tid: member.raw.id,\n\t\t\t\tname: member.raw.name,\n\t\t\t\treasoning: false,\n\t\t\t\twindow: memberCapability?.window ?? FALLBACK_WINDOW,\n\t\t\t\t...(memberCapability?.maxWindow !== undefined ? { maxWindow: memberCapability.maxWindow } : {}),\n\t\t\t\tinput: [...member.raw.input],\n\t\t\t\tcursorMaxMode: member.raw.cursorMaxMode,\n\t\t\t\tlegacyAliases: [member.alias.legacyVariantId],\n\t\t\t});\n\t\t}\n\t}\n\treturn out;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"composer-prompt.d.ts","sourceRoot":"","sources":["../../src/cursor/composer-prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,eAAO,MAAM,sBAAsB,qhDAcyF,CAAC;AAc7H,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE9D"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"composer-prompt.js","sourceRoot":"","sources":["../../src/cursor/composer-prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG;;;;;;;;;;;;;;4HAcsF,CAAC;AAE7H;;;;;;;;;GASG;AACH,MAAM,yBAAyB,GAAG,wCAAwC,CAAC;AAE3E,MAAM,UAAU,qBAAqB,CAAC,OAAe;IACpD,OAAO,yBAAyB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAChD,CAAC","sourcesContent":["/**\n * Cursor Composer operating prefix.\n *\n * Composer 2 and 2.5 are Cursor's continued pretraining plus large-scale\n * agentic RL on top of Moonshot's Kimi K2.5 checkpoint, and Cursor trains them\n * inside essentially the same agent harness it serves them from\n * (arXiv:2603.24477; cursor.com/blog/composer-2-5). The policy is therefore\n * shaped around Cursor's own tool surface, and Cursor reports that a model\n * given an unfamiliar tool or edit format still works but spends more reasoning\n * tokens and makes more mistakes.\n *\n * Driving Composer through this client is exactly that off-distribution case,\n * so the prefix supplies only what the host prompt cannot know: which tools\n * this wire surface actually exposes, and the operating rules for the habits\n * Cursor documents as trained-in. Everything the host prompt already covers\n * (verification depth, output style, commit policy) is deliberately absent:\n * K2-family models follow instructions strictly enough that restating an\n * existing rule buys nothing and dilutes the rules that are new.\n *\n * The wording is positive and procedural rather than a stack of prohibitions.\n * A prohibition invites this family to spend reasoning deciding whether the\n * current case is the prohibited one, while a named tool and a terminal\n * condition install the behavior directly.\n */\nexport const CURSOR_COMPOSER_PROMPT = `You are running in this client, not in Cursor. Your tools on this surface are read, ls, grep, write, delete, diagnostics, and shell. Tool names from other harnesses are unavailable here.\n\nReach for repository files through the native tools: read for file contents, ls for directory entries, grep for content and filename search, write to create or modify, delete to remove, diagnostics for a file's current errors. These carry line anchors and result metadata that shell output does not.\n\nKeep shell for terminal work: tests, builds, package scripts, git, and process control. Put only the command in the command string.\n\nTool arguments are the schema object the tool declares. Keep explanation and markdown in your message text, where it belongs.\n\nRead a file before you edit it, and read it again after any write before relying on its contents. Copy line anchors from the most recent tool output rather than computing or adjusting them; when an anchor is rejected, re-read and use the anchors that come back.\n\nRun independent searches and reads together in one batch. Keep dependent steps in sequence, and let a step that needs the previous result wait for it.\n\nA task is finished when the requested behavior is in place and you have watched it work: the relevant test, build, or command run, and its output read. Until you have that, keep going. If something remains unproven or broken, say which part and why.\n\nWhen asked a question, answer it from the code and stop there. Edit when a change was requested or when a fix is confirmed.`;\n\n/**\n * Composer ids on this provider, e.g. `composer-2.5`, `composer-2.6-thinking-max`,\n * `composer-2.6-lite-medium-fast`. The match is name-based and version-agnostic\n * because the trained-in harness habits belong to the family rather than to any\n * one release, and Cursor serves ids ahead of its public docs.\n *\n * Cursor also resells first-party Kimi models (`kimi-k2.7-code`, `kimi-k3-*`).\n * Those are ordinary hosted models rather than Cursor-harness-trained policies,\n * so keying on the Composer name keeps them out.\n */\nconst COMPOSER_MODEL_ID_PATTERN = /(?:^|[/:._-])composer(?:[/:._-]|\\d|$)/i;\n\nexport function isCursorComposerModel(modelId: string): boolean {\n\treturn COMPOSER_MODEL_ID_PATTERN.test(modelId);\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"context-limit-store.d.ts","sourceRoot":"","sources":["../../src/cursor/context-limit-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,MAAM,MAAM,6BAA6B,GAAG;IAC3C,6EAA6E;IAC7E,QAAQ,CAAC,IAAI,EAAE,MAAM,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjD,oEAAoE;IACpE,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC;CAC7D,CAAC;AAgBF,gFAAgF;AAChF,wBAAgB,oCAAoC,CAAC,IAAI,EAAE,6BAA6B,GAAG,IAAI,CAI9F;AAYD;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAM7F;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,CAEzF;AAED,kFAAkF;AAClF,wBAAgB,mCAAmC,IAAI,IAAI,CAG1D"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"context-limit-store.js","sourceRoot":"","sources":["../../src/cursor/context-limit-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAejE,8FAA8F;AAC9F,gFAAgF;AAChF,MAAM,KAAK,GAAG,gBAAgB,CAAsB,6CAA6C,EAAE,GAAG,EAAE,CAAC,CAAC;IACzG,MAAM,EAAE,IAAI,GAAG,EAAE;IACjB,WAAW,EAAE,SAAS;IACtB,QAAQ,EAAE,KAAK;CACf,CAAC,CAAC,CAAC;AAEJ,gFAAgF;AAChF,MAAM,UAAU,oCAAoC,CAAC,IAAmC;IACvF,IAAI,KAAK,CAAC,WAAW,KAAK,IAAI;QAAE,OAAO;IACvC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC;IACzB,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC;AACxB,CAAC;AAED,SAAS,OAAO;IACf,IAAI,KAAK,CAAC,QAAQ;QAAE,OAAO;IAC3B,4EAA4E;IAC5E,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;IACtB,IAAI,CAAC,KAAK,CAAC,WAAW;QAAE,OAAO;IAC/B,KAAK,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC;QAC7D,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC;YAAE,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IACtE,CAAC;AACF,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CAAC,OAAe,EAAE,SAA6B;IACtF,IAAI,SAAS,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,SAAS,IAAI,CAAC;QAAE,OAAO;IACrF,OAAO,EAAE,CAAC;IACV,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,SAAS;QAAE,OAAO;IACpD,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IACrC,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,OAAe;IACpD,OAAO,EAAE,CAAC;IACV,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAClC,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,0BAA0B,CAAC,OAAe,EAAE,aAAqB;IAChF,OAAO,qBAAqB,CAAC,OAAO,CAAC,IAAI,aAAa,CAAC;AACxD,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,mCAAmC;IAClD,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IACrB,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC;AACxB,CAAC","sourcesContent":["/**\n * Context ceilings Cursor itself reported, keyed by model id.\n *\n * `GetUsableModels` carries no window, so `CURSOR_MODEL_CAPABILITIES` is a\n * committed guess at what each family accepts. The server states the truth on\n * every conversation checkpoint (`tokenDetails.maxTokens`), so once a model has\n * been observed, that value outranks the catalog for every later request.\n *\n * This module stays browser-safe: `providers/cursor.ts` and\n * `cursor/store-migration.ts` materialize catalog windows and are bundled for\n * the browser. Node processes install file persistence through\n * `installCursorContextLimitPersistence` - see `utils/cursor-context-limit.ts`.\n */\n\nimport { processSingleton } from \"../utils/process-singleton.ts\";\n\nexport type CursorContextLimitPersistence = {\n\t/** Limits observed by earlier processes. Called at most once per install. */\n\treadonly load: () => ReadonlyMap<string, number>;\n\t/** Called only when a recorded limit actually changed the store. */\n\treadonly save: (limits: ReadonlyMap<string, number>) => void;\n};\n\ntype ObservedLimitsStore = {\n\treadonly limits: Map<string, number>;\n\tpersistence: CursorContextLimitPersistence | undefined;\n\thydrated: boolean;\n};\n\n// The Cursor stream records into this store and the coding agent reads it; the release bundle\n// gives each of them its own copy of this module, so the state is process-wide.\nconst store = processSingleton<ObservedLimitsStore>(\"@earendil-works/pi-ai:cursor-context-limits\", () => ({\n\tlimits: new Map(),\n\tpersistence: undefined,\n\thydrated: false,\n}));\n\n/** Installs the process-wide persistence port. Idempotent per port identity. */\nexport function installCursorContextLimitPersistence(port: CursorContextLimitPersistence): void {\n\tif (store.persistence === port) return;\n\tstore.persistence = port;\n\tstore.hydrated = false;\n}\n\nfunction hydrate(): void {\n\tif (store.hydrated) return;\n\t// Set before loading: a load that observes nothing must not retry per read.\n\tstore.hydrated = true;\n\tif (!store.persistence) return;\n\tfor (const [modelId, maxTokens] of store.persistence.load()) {\n\t\tif (!store.limits.has(modelId)) store.limits.set(modelId, maxTokens);\n\t}\n}\n\n/**\n * Records the server-reported ceiling for `modelId`. The first checkpoint of a\n * conversation reports 0, so non-positive and non-finite values are ignored.\n */\nexport function recordCursorContextLimit(modelId: string, maxTokens: number | undefined): void {\n\tif (maxTokens === undefined || !Number.isFinite(maxTokens) || maxTokens <= 0) return;\n\thydrate();\n\tif (store.limits.get(modelId) === maxTokens) return;\n\tstore.limits.set(modelId, maxTokens);\n\tstore.persistence?.save(store.limits);\n}\n\nexport function getCursorContextLimit(modelId: string): number | undefined {\n\thydrate();\n\treturn store.limits.get(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\treturn getCursorContextLimit(modelId) ?? catalogWindow;\n}\n\n/** Drops in-memory state so the next read re-hydrates from the installed port. */\nexport function resetCursorContextLimitStoreForTest(): void {\n\tstore.limits.clear();\n\tstore.hydrated = false;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"model-capabilities.d.ts","sourceRoot":"","sources":["../../src/cursor/model-capabilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAGtD,MAAM,MAAM,wBAAwB,GAAG,kBAAkB,GAAG,UAAU,GAAG,aAAa,CAAC;AACvF,MAAM,MAAM,mBAAmB,GAAG,YAAY,GAAG,YAAY,CAAC;AAC9D,MAAM,MAAM,iBAAiB,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,WAAW,GAAG,MAAM,CAAC;AAEzF,MAAM,WAAW,eAAe;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,mBAAmB,CAAC;CACvC;AAED,MAAM,WAAW,qBAAqB;IACrC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,wBAAwB,CAAC;IAC5C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,cAAc,EAAE,SAAS,iBAAiB,EAAE,CAAC;IACtD,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,mFAAmF;IACnF,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,kBAAkB,EAAE,eAAe,CAAC,CAAC,CAAC;CACtE;AAmDD;;;;;;GAMG;AACH,eAAO,MAAM,yBAAyB,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAkH3E,CAAC;AAEF,MAAM,WAAW,kBAAkB;IAClC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE,kBAAkB,CAAC;IACpC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;CACpC;AAKD,MAAM,WAAW,kBAAkB;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,QAAQ,CAAC,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC5B;AAED,8HAA8H;AAC9H,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,kBAAkB,CAiC3E;AAED,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS,CAExF;AAED,kGAAkG;AAClG,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAOhF;AAED,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,GAAG,qBAAqB,GAAG,SAAS,CAE5F"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"model-capabilities.js","sourceRoot":"","sources":["../../src/cursor/model-capabilities.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ModelThinkingLevel } from \"../types.ts\";\nimport aliasData from \"./cursor-variant-aliases.json\" with { type: \"json\" };\n\nexport type CursorCapabilityEvidence = \"available-models\" | \"cli-live\" | \"suffix-only\";\nexport type CursorLevelEncoding = \"parameters\" | \"variant-id\";\nexport type CursorParameterId = \"thinking\" | \"context\" | \"effort\" | \"reasoning\" | \"fast\";\n\nexport interface CursorLevelSpec {\n\treadonly value: string;\n\treadonly encoding: CursorLevelEncoding;\n}\n\nexport interface CursorModelCapability {\n\treadonly catalogKey?: string;\n\treadonly evidence: CursorCapabilityEvidence;\n\treadonly window: number;\n\treadonly maxWindow?: number;\n\treadonly parameterOrder: readonly CursorParameterId[];\n\treadonly defaultContext?: string;\n\t/** Context token matching `window`; cursor truncates to whatever this asks for. */\n\treadonly requestContext?: string;\n\treadonly levels: Partial<Record<ModelThinkingLevel, CursorLevelSpec>>;\n}\n\nconst P = \"parameters\" as const;\nconst V = \"variant-id\" as const;\n\nfunction ladder(\n\tvalues: readonly string[],\n\tencoding: CursorLevelEncoding = P,\n): Partial<Record<ModelThinkingLevel, CursorLevelSpec>> {\n\tconst out: Partial<Record<ModelThinkingLevel, CursorLevelSpec>> = {};\n\tfor (const value of values) out[value === \"none\" ? \"off\" : (value as ModelThinkingLevel)] = { value, encoding };\n\treturn out;\n}\n\nconst CLAUDE_ORDER: readonly CursorParameterId[] = [\"thinking\", \"context\", \"effort\"];\nconst GPT_ORDER: readonly CursorParameterId[] = [\"context\", \"reasoning\", \"fast\"];\n\nfunction claude(\n\twindow: number,\n\tmaxWindow: number,\n\tlevels: readonly string[],\n\tdefaultContext: string,\n): CursorModelCapability {\n\treturn {\n\t\tevidence: \"available-models\",\n\t\twindow,\n\t\tmaxWindow,\n\t\tparameterOrder: CLAUDE_ORDER,\n\t\tdefaultContext,\n\t\trequestContext: window >= 1_000_000 ? \"1m\" : defaultContext,\n\t\tlevels: ladder(levels),\n\t};\n}\n\nfunction gpt(\n\tlevels: readonly string[],\n\torder: readonly CursorParameterId[] = GPT_ORDER,\n\twindow = 400000,\n\tmaxWindow = 400000,\n): CursorModelCapability {\n\treturn {\n\t\tevidence: \"available-models\",\n\t\twindow,\n\t\tmaxWindow,\n\t\tparameterOrder: order,\n\t\tdefaultContext: \"272k\",\n\t\trequestContext: order.includes(\"context\") && window >= 1_000_000 ? \"1m\" : undefined,\n\t\tlevels: ladder(levels),\n\t};\n}\n\n/**\n * Static cursor capability table. Values come from the live\n * aiserver.v1 AvailableModels capture of 2026-08-18 (evidence:\n * local-ignore/qa-evidence/20260818-cursor-reasoning-levels/available-models-catalog.json).\n * `GetUsableModels` carries no window or parameter field, so this table is the\n * authoritative source; see .omo/plans/cursor-reasoning-levels.md §3.1/§6.\n */\nexport const CURSOR_MODEL_CAPABILITIES: Record<string, CursorModelCapability> = {\n\t\"claude-fable-5\": claude(1000000, 1000000, [\"low\", \"medium\", \"high\", \"xhigh\", \"max\"], \"300k\"),\n\t\"claude-sonnet-5\": claude(1000000, 1000000, [\"low\", \"medium\", \"high\", \"xhigh\", \"max\"], \"300k\"),\n\t\"claude-opus-4-7\": claude(1000000, 1000000, [\"low\", \"medium\", \"high\", \"xhigh\", \"max\"], \"300k\"),\n\t\"claude-opus-4-8\": claude(1000000, 1000000, [\"low\", \"medium\", \"high\", \"xhigh\", \"max\"], \"300k\"),\n\t\"claude-opus-5\": claude(1000000, 1000000, [\"low\", \"medium\", \"high\", \"xhigh\", \"max\"], \"300k\"),\n\t\"claude-4.6-opus\": claude(1000000, 1000000, [\"high\", \"max\"], \"200k\"),\n\t\"claude-4.6-sonnet\": claude(1000000, 1000000, [\"medium\"], \"200k\"),\n\t\"claude-4.5-opus\": {\n\t\tevidence: \"available-models\",\n\t\twindow: 200000,\n\t\tparameterOrder: [\"thinking\"],\n\t\tlevels: { high: { value: \"high\", encoding: V } },\n\t},\n\t\"gpt-5.6-sol\": gpt([\"none\", \"low\", \"medium\", \"high\", \"xhigh\", \"max\"], GPT_ORDER, 1000000, 1000000),\n\t\"gpt-5.6-luna\": gpt([\"none\", \"low\", \"medium\", \"high\", \"xhigh\", \"max\"], GPT_ORDER, 1000000, 1000000),\n\t\"gpt-5.6-terra\": gpt([\"none\", \"low\", \"medium\", \"high\", \"xhigh\", \"max\"], GPT_ORDER, 272000, 272000),\n\t\"gpt-5.5\": {\n\t\t...gpt([\"none\", \"low\", \"medium\", \"high\"], GPT_ORDER, 1000000, 1000000),\n\t\tlevels: { ...ladder([\"none\", \"low\", \"medium\", \"high\"]), xhigh: { value: \"extra-high\", encoding: P } },\n\t},\n\t\"gpt-5.3-codex\": {\n\t\t...gpt([], [\"reasoning\", \"fast\"]),\n\t\tmaxWindow: undefined,\n\t\tdefaultContext: undefined,\n\t\tlevels: { ...ladder([\"low\", \"medium\", \"high\"]), xhigh: { value: \"extra-high\", encoding: P } },\n\t},\n\t\"gpt-5.1\": {\n\t\t...gpt([], [\"reasoning\"]),\n\t\tmaxWindow: undefined,\n\t\tdefaultContext: undefined,\n\t\tlevels: ladder([\"low\", \"high\"]),\n\t},\n\t\"gpt-5.2\": {\n\t\t...gpt([], [\"reasoning\"]),\n\t\tmaxWindow: undefined,\n\t\tdefaultContext: undefined,\n\t\tlevels: { ...ladder([\"low\", \"high\"]), xhigh: { value: \"xhigh\", encoding: V } },\n\t},\n\t\"gpt-5.4\": {\n\t\t...gpt([], [\"reasoning\"]),\n\t\tmaxWindow: undefined,\n\t\tdefaultContext: undefined,\n\t\tlevels: { ...ladder([\"low\", \"medium\", \"high\"]), xhigh: { value: \"xhigh\", encoding: V } },\n\t},\n\t\"gpt-5.4-mini\": {\n\t\tevidence: \"available-models\",\n\t\twindow: 400_000,\n\t\tparameterOrder: [],\n\t\tlevels: ladder([\"none\", \"low\", \"medium\", \"high\", \"xhigh\"], V),\n\t},\n\t\"gpt-5.4-nano\": {\n\t\t...gpt([], [\"reasoning\"]),\n\t\tmaxWindow: undefined,\n\t\tdefaultContext: undefined,\n\t\tlevels: ladder([\"none\", \"low\", \"medium\", \"high\", \"xhigh\"]),\n\t},\n\t\"gemini-3.7-flash\": {\n\t\tevidence: \"cli-live\",\n\t\twindow: 1_048_576,\n\t\tparameterOrder: [\"effort\"],\n\t\tlevels: ladder([\"low\", \"medium\", \"high\"]),\n\t},\n\t\"gemini-3.6-flash\": {\n\t\tevidence: \"suffix-only\",\n\t\twindow: 1_048_576,\n\t\tparameterOrder: [],\n\t\tlevels: ladder([\"minimal\", \"low\", \"medium\", \"high\"], V),\n\t},\n\t\"cursor-grok-4.6\": {\n\t\tevidence: \"available-models\",\n\t\twindow: 500_000,\n\t\tparameterOrder: [\"effort\", \"fast\"],\n\t\tlevels: ladder([\"low\", \"medium\", \"high\", \"xhigh\"]),\n\t},\n\t\"cursor-grok-4.5\": {\n\t\tevidence: \"suffix-only\",\n\t\twindow: 500_000,\n\t\tparameterOrder: [],\n\t\tlevels: ladder([\"low\", \"medium\", \"high\"], V),\n\t},\n\t\"glm-5.2\": {\n\t\tevidence: \"available-models\",\n\t\twindow: 1000000,\n\t\tparameterOrder: [\"reasoning\"],\n\t\tlevels: ladder([\"high\", \"max\"]),\n\t},\n\t\"kimi-k3\": {\n\t\tevidence: \"available-models\",\n\t\twindow: 1048576,\n\t\tparameterOrder: [\"reasoning\"],\n\t\tlevels: ladder([\"low\", \"high\", \"max\"]),\n\t},\n\t\"composer-2.5\": { evidence: \"available-models\", window: 200000, parameterOrder: [\"fast\"], levels: {} },\n\t\"claude-haiku-4-5\": { evidence: \"available-models\", window: 200000, parameterOrder: [\"thinking\"], levels: {} },\n\t\"claude-4-sonnet\": {\n\t\tevidence: \"available-models\",\n\t\twindow: 200000,\n\t\tparameterOrder: [\"thinking\", \"context\"],\n\t\tdefaultContext: \"200k\",\n\t\tlevels: {},\n\t},\n\t\"claude-4.5-sonnet\": {\n\t\tevidence: \"available-models\",\n\t\twindow: 200_000,\n\t\tparameterOrder: [\"thinking\", \"context\"],\n\t\tdefaultContext: \"200k\",\n\t\tlevels: {},\n\t},\n\t\"kimi-k2.7-code\": { evidence: \"available-models\", window: 262_144, parameterOrder: [], levels: {} },\n\t\"gemini-3-flash\": { evidence: \"available-models\", window: 1000000, parameterOrder: [], levels: {} },\n\t\"gemini-3.1-pro\": { evidence: \"available-models\", window: 1000000, parameterOrder: [], levels: {} },\n\t\"gemini-3.5-flash\": { evidence: \"available-models\", window: 1_048_576, parameterOrder: [], levels: {} },\n\t\"gpt-5-mini\": { evidence: \"available-models\", window: 400_000, parameterOrder: [], levels: {} },\n};\n\nexport interface CursorVariantAlias {\n\treadonly targetId: string;\n\treadonly level?: ModelThinkingLevel;\n\treadonly legacyVariantId: string;\n\treadonly encoding: \"legacy-variant\";\n}\n\nconst ALIASES = aliasData.aliases as Record<string, CursorVariantAlias>;\nconst LEVEL_TOKENS = [\"minimal\", \"low\", \"medium\", \"high\", \"extra-high\", \"xhigh\", \"max\", \"none\"] as const;\n\nexport interface CursorVariantParse {\n\treadonly baseId: string;\n\treadonly level: string | undefined;\n\treadonly thinking: boolean | undefined;\n\treadonly fast: boolean;\n\treadonly originalId: string;\n}\n\n/** Lossless suffix parser: trailing `-fast`, `-thinking-<level>` or `-<level>-thinking`, bare `-thinking`, trailing level. */\nexport function parseCursorVariantId(originalId: string): CursorVariantParse {\n\tlet rest = originalId;\n\tlet fast = false;\n\tif (rest.endsWith(\"-fast\")) {\n\t\tfast = true;\n\t\trest = rest.slice(0, -5);\n\t}\n\tlet level: string | undefined;\n\tlet thinking: boolean | undefined;\n\tconst alternation = LEVEL_TOKENS.join(\"|\");\n\tconst patterns: [RegExp, boolean][] = [\n\t\t[new RegExp(`-thinking-(${alternation})$`), true],\n\t\t[new RegExp(`-(${alternation})-thinking$`), true],\n\t];\n\tfor (const [pattern, flag] of patterns) {\n\t\tconst match = rest.match(pattern);\n\t\tif (match) {\n\t\t\tlevel = match[1];\n\t\t\tthinking = flag;\n\t\t\trest = rest.slice(0, match.index);\n\t\t\treturn { baseId: rest, level, thinking, fast, originalId };\n\t\t}\n\t}\n\tif (rest.endsWith(\"-thinking\")) {\n\t\treturn { baseId: rest.slice(0, -9), level, thinking: true, fast, originalId };\n\t}\n\tconst levelMatch = rest.match(new RegExp(`-(${alternation})$`));\n\tif (levelMatch) {\n\t\tlevel = levelMatch[1];\n\t\tthinking = false;\n\t\trest = rest.slice(0, levelMatch.index);\n\t}\n\treturn { baseId: rest, level, thinking, fast, originalId };\n}\n\nexport function getCursorVariantAlias(originalId: string): CursorVariantAlias | undefined {\n\treturn ALIASES[originalId];\n}\n\n/** Resolve any known variant id to its selectable base identity; unknown ids return undefined. */\nexport function getCursorBaseIdForVariant(originalId: string): string | undefined {\n\tconst alias = ALIASES[originalId];\n\tif (alias) {\n\t\tconst parsed = parseCursorVariantId(alias.targetId);\n\t\treturn parsed.baseId;\n\t}\n\treturn undefined;\n}\n\nexport function getCursorCapabilityForBase(baseId: string): CursorModelCapability | undefined {\n\treturn CURSOR_MODEL_CAPABILITIES[baseId];\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"selection-descriptor.d.ts","sourceRoot":"","sources":["../../src/cursor/selection-descriptor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAqB,KAAK,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,KAAK,EAAsB,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACzE,OAAO,EAGN,KAAK,iBAAiB,EAEtB,MAAM,yBAAyB,CAAC;AAEjC,MAAM,WAAW,uBAAuB;IACvC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,SAAS;QAAE,QAAQ,CAAC,EAAE,EAAE,iBAAiB,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC3F;AAiED;;;;;;;;GAQG;AACH,wBAAgB,gCAAgC,CAC/C,KAAK,EAAE,KAAK,CAAC,cAAc,CAAC,EAC5B,SAAS,EAAE,iBAAiB,GAAG,SAAS,GACtC,uBAAuB,CA6CzB;AAED,iGAAiG;AACjG,wBAAgB,0BAA0B,CACzC,KAAK,EAAE,KAAK,CAAC,cAAc,CAAC,EAC5B,SAAS,EAAE,iBAAiB,GAAG,SAAS,GACtC,MAAM,CAKR"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"selection-descriptor.js","sourceRoot":"","sources":["../../src/cursor/selection-descriptor.ts"],"names":[],"mappings":"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","sourcesContent":["import type { CursorAgentCompat, Model } from \"../model.ts\";\nimport type { ModelThinkingLevel, ThinkingSelection } from \"../types.ts\";\nimport {\n\tCURSOR_MODEL_CAPABILITIES,\n\ttype CursorLevelSpec,\n\ttype CursorParameterId,\n\tgetCursorVariantAlias,\n} from \"./model-capabilities.ts\";\n\nexport interface CursorResolvedSelection {\n\treadonly modelId: string;\n\treadonly parameters: readonly { readonly id: CursorParameterId; readonly value: string }[];\n}\n\nfunction identityCompat(model: Model<\"cursor-agent\">): CursorAgentCompat[\"cursorReasoning\"] {\n\treturn model.compat?.cursorReasoning;\n}\n\ntype CursorReasoningIdentity = NonNullable<CursorAgentCompat[\"cursorReasoning\"]>;\n\n/**\n * Catalog-guaranteed suffix alias for a base + level, or undefined. Cursor Run\n * rejects bare capability ids with Connect `not_found` (issue #1008; live\n * probes 2026-08-20), so every resolvable level prefers the suffix variant id\n * the `GetUsableModels` catalog actually serves. Candidates try the level's\n * wire value first, then the level token itself (`extra-high` vs `xhigh`),\n * with thinking-infixed forms for thinking Claude identities.\n */\nfunction suffixAliasId(\n\tcompat: CursorReasoningIdentity,\n\tlevel: ModelThinkingLevel,\n\tspec: CursorLevelSpec,\n): string | undefined {\n\tconst suffixes = level === \"off\" ? [\"none\"] : spec.value === level ? [spec.value] : [spec.value, level];\n\tfor (const suffix of suffixes) {\n\t\tconst candidates =\n\t\t\tcompat.thinkingMode === true\n\t\t\t\t? [`${compat.capabilityId}-thinking-${suffix}`, `${compat.capabilityId}-${suffix}-thinking`]\n\t\t\t\t: [`${compat.capabilityId}-${suffix}`];\n\t\tfor (const candidate of candidates) {\n\t\t\tconst alias = getCursorVariantAlias(candidate);\n\t\t\tif (alias) return alias.legacyVariantId;\n\t\t}\n\t}\n\treturn undefined;\n}\n\nfunction buildParameters(\n\tcapabilityId: string,\n\tvalue: string,\n\tthinkingMode: boolean | undefined,\n): { id: CursorParameterId; value: string }[] {\n\tconst capability = CURSOR_MODEL_CAPABILITIES[capabilityId];\n\tif (!capability) return [];\n\tconst out: { id: CursorParameterId; value: string }[] = [];\n\tfor (const id of capability.parameterOrder) {\n\t\tswitch (id) {\n\t\t\tcase \"thinking\":\n\t\t\t\tout.push({ id, value: thinkingMode === true ? \"true\" : \"false\" });\n\t\t\t\tbreak;\n\t\t\tcase \"context\": {\n\t\t\t\tconst context = capability.requestContext ?? capability.defaultContext;\n\t\t\t\tif (context !== undefined) out.push({ id, value: context });\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"effort\":\n\t\t\tcase \"reasoning\":\n\t\t\t\tout.push({ id, value });\n\t\t\t\tbreak;\n\t\t\tcase \"fast\":\n\t\t\t\tout.push({ id, value: \"false\" });\n\t\t\t\tbreak;\n\t\t}\n\t}\n\treturn out;\n}\n\n/**\n * Resolve a Cursor model + thinking selection to its wire descriptor: the exact\n * model id plus ordered parameters. Both Cursor transports consume this; the\n * native lane renders parameters into protobuf, the CLI lane renders a model\n * string. Absent/unsupported selections return the representative or upstream\n * id with zero parameters. Identities derived from unlisted suffix variants\n * resolve each level through `cursorReasoning.variantIds` before any capability\n * lookup (senpi#2038).\n */\nexport function resolveCursorSelectionDescriptor(\n\tmodel: Model<\"cursor-agent\">,\n\tselection: ThinkingSelection | undefined,\n): CursorResolvedSelection {\n\tconst compat = identityCompat(model);\n\tconst fallback: CursorResolvedSelection = { modelId: model.upstreamModelId ?? model.id, parameters: [] };\n\tif (!compat) return fallback;\n\n\tif (selection === undefined) {\n\t\treturn { modelId: compat.representativeVariantId, parameters: [] };\n\t}\n\n\tif (selection.source === \"legacy-variant\") {\n\t\tconst legacyId = selection.legacyVariantId;\n\t\tconst allowlisted =\n\t\t\tlegacyId !== undefined &&\n\t\t\t(getCursorVariantAlias(legacyId) !== undefined || Object.values(compat.variantIds ?? {}).includes(legacyId));\n\t\tif (!allowlisted) {\n\t\t\treturn { modelId: compat.representativeVariantId, parameters: [] };\n\t\t}\n\t\treturn { modelId: legacyId, parameters: [] };\n\t}\n\n\tconst derivedVariantId = compat.variantIds?.[selection.level];\n\tif (derivedVariantId !== undefined) {\n\t\treturn { modelId: derivedVariantId, parameters: [] };\n\t}\n\tif (compat.variantIds !== undefined) {\n\t\treturn { modelId: compat.representativeVariantId, parameters: [] };\n\t}\n\n\tconst capability = CURSOR_MODEL_CAPABILITIES[compat.capabilityId];\n\tconst spec = capability?.levels[selection.level];\n\tif (!capability || !spec) {\n\t\treturn { modelId: compat.representativeVariantId, parameters: [] };\n\t}\n\n\tconst suffixId = suffixAliasId(compat, selection.level, spec);\n\tif (suffixId !== undefined) return { modelId: suffixId, parameters: [] };\n\n\tif (spec.encoding === \"variant-id\") {\n\t\treturn { modelId: compat.representativeVariantId, parameters: [] };\n\t}\n\n\treturn {\n\t\tmodelId: compat.capabilityId,\n\t\tparameters: buildParameters(compat.capabilityId, spec.value, compat.thinkingMode),\n\t};\n}\n\n/** Render the resolved descriptor as one CLI `--model` argv element (bracket or suffix form). */\nexport function renderCursorCliModelString(\n\tmodel: Model<\"cursor-agent\">,\n\tselection: ThinkingSelection | undefined,\n): string {\n\tconst resolved = resolveCursorSelectionDescriptor(model, selection);\n\tif (resolved.parameters.length === 0) return resolved.modelId;\n\tconst args = resolved.parameters.map((parameter) => `${parameter.id}=${parameter.value}`).join(\",\");\n\treturn `${resolved.modelId}[${args}]`;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"store-migration.d.ts","sourceRoot":"","sources":["../../src/cursor/store-migration.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAsB,MAAM,aAAa,CAAC;AAsD7D;;;;;;;;;GASG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,SAAS,KAAK,CAAC,cAAc,CAAC,EAAE,GAAG,KAAK,CAAC,cAAc,CAAC,EAAE,CA8F3G"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"store-migration.js","sourceRoot":"","sources":["../../src/cursor/store-migration.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Model, ModelThinkingLevel } from \"../types.ts\";\nimport { type CursorCatalogEntry, deriveCursorVariantAliases, normalizeCursorCatalog } from \"./catalog-grouping.ts\";\nimport { resolveCursorContextWindow } from \"./context-limit-store.ts\";\nimport { getCursorVariantAlias, parseCursorVariantId } from \"./model-capabilities.ts\";\n\n/**\n * Fill levels a stored static group lacks from flat alias rows regrouped beside it;\n * the group's own levels, representative, and compat metadata are never replaced.\n */\nfunction absorbStaticLevels(\n\tcurrent: Model<\"cursor-agent\">,\n\tflatGroup: Model<\"cursor-agent\"> | undefined,\n): Model<\"cursor-agent\"> {\n\tconst additions = Object.entries(flatGroup?.thinkingLevelMap ?? {}).filter(\n\t\t([level, value]) => value != null && current.thinkingLevelMap?.[level as ModelThinkingLevel] == null,\n\t);\n\tif (additions.length === 0) return current;\n\treturn { ...current, thinkingLevelMap: { ...current.thinkingLevelMap, ...Object.fromEntries(additions) } };\n}\n\nfunction entryToModel(entry: CursorCatalogEntry, maxTokensById: ReadonlyMap<string, number>): Model<\"cursor-agent\"> {\n\tconst representative = entry.representativeVariantId ?? entry.legacyAliases[0] ?? entry.id;\n\tconst maxTokens = maxTokensById.get(representative) ?? maxTokensById.get(entry.id) ?? 64000;\n\treturn {\n\t\tid: entry.id,\n\t\tname: entry.name,\n\t\tapi: \"cursor-agent\",\n\t\tprovider: \"cursor\",\n\t\tbaseUrl: \"https://api2.cursor.sh\",\n\t\treasoning: entry.reasoning,\n\t\t...(entry.thinkingLevelMap ? { thinkingLevelMap: entry.thinkingLevelMap } : {}),\n\t\tinput: entry.input,\n\t\tcost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },\n\t\tcontextWindow: resolveCursorContextWindow(entry.id, entry.window),\n\t\tmaxTokens,\n\t\t...(entry.representativeVariantId !== undefined && entry.representativeVariantId !== entry.id\n\t\t\t? { upstreamModelId: entry.representativeVariantId }\n\t\t\t: {}),\n\t\tcompat: {\n\t\t\t...(entry.cursorMaxMode ? { cursorMaxMode: true } : {}),\n\t\t\t...(entry.capabilityId !== undefined && entry.representativeVariantId !== undefined\n\t\t\t\t? {\n\t\t\t\t\t\tcursorReasoning: {\n\t\t\t\t\t\t\tcapabilityId: entry.capabilityId,\n\t\t\t\t\t\t\t...(entry.thinkingMode !== undefined ? { thinkingMode: entry.thinkingMode } : {}),\n\t\t\t\t\t\t\trepresentativeVariantId: entry.representativeVariantId,\n\t\t\t\t\t\t\t...(entry.variantIds !== undefined ? { variantIds: entry.variantIds } : {}),\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\t: {}),\n\t\t},\n\t};\n}\n\n/**\n * Idempotent stored-catalog transform: pre-grouping 204-variant cursor entries\n * are regrouped into selectable identities, including families the static\n * alias table does not list yet, which are derived over the stored batch\n * (senpi#2038). An already-grouped identity (static or derived) always wins\n * over flat rows aliasing it, regardless of input order, and absorbs their\n * levels without losing its own metadata; conflicting derived variants stay\n * flat, and duplicate identities coalesce at their first position in stable\n * input order.\n */\nexport function regroupStoredCursorModels(models: readonly Model<\"cursor-agent\">[]): Model<\"cursor-agent\">[] {\n\tconst existingGroups = new Map<string, Model<\"cursor-agent\">>();\n\tconst existingDerived = new Map<string, Model<\"cursor-agent\">>();\n\tconst representedTargetById = new Map<string, string>();\n\tfor (const model of models) {\n\t\tconst reasoning = model.compat?.cursorReasoning;\n\t\tif (reasoning === undefined || existingGroups.has(model.id)) continue;\n\t\texistingGroups.set(model.id, model);\n\t\tif (reasoning.variantIds === undefined) continue;\n\t\texistingDerived.set(model.id, model);\n\t\tfor (const id of Object.values(reasoning.variantIds)) representedTargetById.set(id, model.id);\n\t}\n\tconst derived = deriveCursorVariantAliases([\n\t\t...models.filter((model) => model.compat?.cursorReasoning === undefined).map((model) => model.id),\n\t\t...[...existingDerived.values()].flatMap((model) =>\n\t\t\tObject.values(model.compat?.cursorReasoning?.variantIds ?? {}),\n\t\t),\n\t]);\n\tconst isLegacy = (model: Model<\"cursor-agent\">): boolean =>\n\t\tmodel.compat?.cursorReasoning === undefined &&\n\t\t(getCursorVariantAlias(model.id) !== undefined || derived.has(model.id) || representedTargetById.has(model.id));\n\tconst legacy = models.filter(isLegacy);\n\tconst maxTokensById = new Map(models.map((model) => [model.id, model.maxTokens]));\n\tconst regrouped = new Map(\n\t\tnormalizeCursorCatalog(\n\t\t\tlegacy.map((model) => ({\n\t\t\t\tid: model.id,\n\t\t\t\tname: model.name,\n\t\t\t\tinput: model.input.filter((modality): modality is \"text\" | \"image\" => modality !== \"video\"),\n\t\t\t\tcursorMaxMode: model.compat?.cursorMaxMode === true,\n\t\t\t})),\n\t\t).map((entry) => [entry.id, entryToModel(entry, maxTokensById)] as const),\n\t);\n\tconst merged = new Map<string, Model<\"cursor-agent\">>();\n\tfor (const [targetId, current] of existingGroups) {\n\t\tconst kept = current.compat?.cursorReasoning;\n\t\tif (kept?.variantIds === undefined) {\n\t\t\tmerged.set(targetId, absorbStaticLevels(current, regrouped.get(targetId)));\n\t\t\tcontinue;\n\t\t}\n\t\tconst variantIds = { ...kept.variantIds };\n\t\tconst thinkingLevelMap = { ...current.thinkingLevelMap };\n\t\tlet changed = false;\n\t\tfor (const model of legacy) {\n\t\t\tconst alias = derived.get(model.id);\n\t\t\tif (alias?.targetId !== targetId || alias.level === undefined) continue;\n\t\t\tif (variantIds[alias.level] !== undefined && variantIds[alias.level] !== model.id) continue;\n\t\t\tvariantIds[alias.level] = model.id;\n\t\t\tthinkingLevelMap[alias.level] = parseCursorVariantId(model.id).level;\n\t\t\tchanged = true;\n\t\t}\n\t\tmerged.set(\n\t\t\ttargetId,\n\t\t\tchanged\n\t\t\t\t? {\n\t\t\t\t\t\t...current,\n\t\t\t\t\t\tthinkingLevelMap,\n\t\t\t\t\t\tcompat: { ...current.compat, cursorReasoning: { ...kept, variantIds } },\n\t\t\t\t\t}\n\t\t\t\t: current,\n\t\t);\n\t}\n\tconst seen = new Set<string>();\n\tconst out: Model<\"cursor-agent\">[] = [];\n\tfor (const model of models) {\n\t\tconst alias = isLegacy(model) ? (getCursorVariantAlias(model.id) ?? derived.get(model.id)) : undefined;\n\t\tconst targetId =\n\t\t\talias?.targetId ?? (isLegacy(model) ? representedTargetById.get(model.id) : undefined) ?? model.id;\n\t\tconst coalesced = merged.get(targetId);\n\t\tif (coalesced !== undefined) {\n\t\t\tconst retainedIds = coalesced.compat?.cursorReasoning?.variantIds;\n\t\t\t// Static groups absorb every flat alias row; derived groups keep conflicting variants flat.\n\t\t\tconst absorbed =\n\t\t\t\tmodel.id === targetId ||\n\t\t\t\t(retainedIds === undefined ? isLegacy(model) : Object.values(retainedIds).includes(model.id));\n\t\t\tif (!absorbed) {\n\t\t\t\tif (!seen.has(model.id)) out.push(model);\n\t\t\t\tseen.add(model.id);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (!seen.has(targetId)) out.push(coalesced);\n\t\t\tseen.add(targetId);\n\t\t\tcontinue;\n\t\t}\n\t\tif (!isLegacy(model)) {\n\t\t\tif (!seen.has(model.id)) out.push(model);\n\t\t\tseen.add(model.id);\n\t\t\tcontinue;\n\t\t}\n\t\tif (seen.has(targetId)) continue;\n\t\tseen.add(targetId);\n\t\tout.push(regrouped.get(targetId) ?? model);\n\t}\n\treturn out;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"cursor-agent-provider.d.ts","sourceRoot":"","sources":["../src/cursor-agent-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAwB,MAAM,uBAAuB,CAAC;AAEtF;;;GAGG;AACH,eAAO,MAAM,yBAAyB;;;;CAIrC,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"cursor-agent-provider.js","sourceRoot":"","sources":["../src/cursor-agent-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAEtF;;;GAGG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACxC,MAAM;IACN,YAAY;IACZ,uBAAuB;CACvB,CAAC","sourcesContent":["import { fetchCursorUsableModels, stream, streamSimple } from \"./api/cursor-agent.ts\";\n\n/**\n * Statically imported cursor-agent module for the Bun binary build, where the\n * lazy wrapper's variable-specifier import cannot be bundled.\n */\nexport const cursorAgentProviderModule = {\n\tstream,\n\tstreamSimple,\n\tfetchCursorUsableModels,\n};\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"devin-provider.d.ts","sourceRoot":"","sources":["../src/devin-provider.ts"],"names":[],"mappings":"AAEA,yDAAyD;AACzD,eAAO,MAAM,mBAAmB;;;CAA2B,CAAC"}