@vib-rato/ai 0.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (525) hide show
  1. package/CHANGELOG.md +3354 -0
  2. package/README.md +1194 -0
  3. package/dist/types/adapter-internals/provider-safety-stop.d.ts +45 -0
  4. package/dist/types/api-registry.d.ts +30 -0
  5. package/dist/types/auth-broker/client.d.ts +80 -0
  6. package/dist/types/auth-broker/index.d.ts +5 -0
  7. package/dist/types/auth-broker/redact.d.ts +7 -0
  8. package/dist/types/auth-broker/refresher.d.ts +25 -0
  9. package/dist/types/auth-broker/remote-store.d.ts +153 -0
  10. package/dist/types/auth-broker/server.d.ts +32 -0
  11. package/dist/types/auth-broker/types.d.ts +132 -0
  12. package/dist/types/auth-broker/wire-schemas.d.ts +555 -0
  13. package/dist/types/auth-gateway/http.d.ts +40 -0
  14. package/dist/types/auth-gateway/index.d.ts +3 -0
  15. package/dist/types/auth-gateway/server.d.ts +70 -0
  16. package/dist/types/auth-gateway/types.d.ts +129 -0
  17. package/dist/types/auth-storage.d.ts +1074 -0
  18. package/dist/types/cli.d.ts +2 -0
  19. package/dist/types/codex-tools.d.ts +4 -0
  20. package/dist/types/context-cap-policy.d.ts +68 -0
  21. package/dist/types/core.d.ts +35 -0
  22. package/dist/types/index.d.ts +55 -0
  23. package/dist/types/model-cache.d.ts +24 -0
  24. package/dist/types/model-manager.d.ts +77 -0
  25. package/dist/types/model-pricing.d.ts +3 -0
  26. package/dist/types/model-retirements.d.ts +6 -0
  27. package/dist/types/model-thinking.d.ts +100 -0
  28. package/dist/types/models.d.ts +21 -0
  29. package/dist/types/openai-completions-compat.d.ts +34 -0
  30. package/dist/types/provider-details.d.ts +24 -0
  31. package/dist/types/provider-models/bundled-references.d.ts +4 -0
  32. package/dist/types/provider-models/descriptors.d.ts +48 -0
  33. package/dist/types/provider-models/google.d.ts +20 -0
  34. package/dist/types/provider-models/index.d.ts +5 -0
  35. package/dist/types/provider-models/ollama.d.ts +7 -0
  36. package/dist/types/provider-models/openai-compat.d.ts +293 -0
  37. package/dist/types/provider-models/special.d.ts +29 -0
  38. package/dist/types/providers/amazon-bedrock.d.ts +60 -0
  39. package/dist/types/providers/anthropic-messages-server-schema.d.ts +450 -0
  40. package/dist/types/providers/anthropic-messages-server.d.ts +17 -0
  41. package/dist/types/providers/anthropic.d.ts +280 -0
  42. package/dist/types/providers/aws-credential-config.d.ts +19 -0
  43. package/dist/types/providers/aws-credentials.d.ts +43 -0
  44. package/dist/types/providers/aws-eventstream.d.ts +38 -0
  45. package/dist/types/providers/aws-sigv4.d.ts +55 -0
  46. package/dist/types/providers/azure-openai-responses.d.ts +22 -0
  47. package/dist/types/providers/composer-discipline.d.ts +32 -0
  48. package/dist/types/providers/cursor/client-version.d.ts +10 -0
  49. package/dist/types/providers/cursor/exec-modern.d.ts +98 -0
  50. package/dist/types/providers/cursor/gen/agent_pb.d.ts +16769 -0
  51. package/dist/types/providers/cursor-pi-args.d.ts +119 -0
  52. package/dist/types/providers/cursor.d.ts +72 -0
  53. package/dist/types/providers/dashscope-token-plan-headers.d.ts +57 -0
  54. package/dist/types/providers/error-message.d.ts +27 -0
  55. package/dist/types/providers/github-copilot-headers.d.ts +40 -0
  56. package/dist/types/providers/gitlab-duo.d.ts +27 -0
  57. package/dist/types/providers/google-auth.d.ts +26 -0
  58. package/dist/types/providers/google-gemini-cli.d.ts +75 -0
  59. package/dist/types/providers/google-gemini-headers.d.ts +43 -0
  60. package/dist/types/providers/google-shared.d.ts +183 -0
  61. package/dist/types/providers/google-types.d.ts +138 -0
  62. package/dist/types/providers/google-vertex.d.ts +11 -0
  63. package/dist/types/providers/google.d.ts +4 -0
  64. package/dist/types/providers/grammar.d.ts +1 -0
  65. package/dist/types/providers/kimi.d.ts +27 -0
  66. package/dist/types/providers/kiro-api-key.d.ts +50 -0
  67. package/dist/types/providers/kiro-codewhisperer.d.ts +11 -0
  68. package/dist/types/providers/mock.d.ts +189 -0
  69. package/dist/types/providers/ollama.d.ts +41 -0
  70. package/dist/types/providers/openai-anthropic-shim.d.ts +31 -0
  71. package/dist/types/providers/openai-bounded-rate-limits.d.ts +3 -0
  72. package/dist/types/providers/openai-chat-server-schema.d.ts +1733 -0
  73. package/dist/types/providers/openai-chat-server.d.ts +16 -0
  74. package/dist/types/providers/openai-codex/constants.d.ts +26 -0
  75. package/dist/types/providers/openai-codex/request-transformer.d.ts +50 -0
  76. package/dist/types/providers/openai-codex/response-handler.d.ts +18 -0
  77. package/dist/types/providers/openai-codex-responses.d.ts +71 -0
  78. package/dist/types/providers/openai-completions-compat.d.ts +6 -0
  79. package/dist/types/providers/openai-completions.d.ts +35 -0
  80. package/dist/types/providers/openai-opencodex-responses.d.ts +10 -0
  81. package/dist/types/providers/openai-request-transform.d.ts +4 -0
  82. package/dist/types/providers/openai-responses-server-schema.d.ts +392 -0
  83. package/dist/types/providers/openai-responses-server.d.ts +17 -0
  84. package/dist/types/providers/openai-responses-shared.d.ts +106 -0
  85. package/dist/types/providers/openai-responses.d.ts +37 -0
  86. package/dist/types/providers/pi-native-client.d.ts +29 -0
  87. package/dist/types/providers/pi-native-server.d.ts +60 -0
  88. package/dist/types/providers/register-builtins.d.ts +59 -0
  89. package/dist/types/providers/synthetic.d.ts +26 -0
  90. package/dist/types/providers/transform-messages.d.ts +33 -0
  91. package/dist/types/providers/vision-guard.d.ts +8 -0
  92. package/dist/types/rate-limit-utils.d.ts +19 -0
  93. package/dist/types/stream.d.ts +45 -0
  94. package/dist/types/types.d.ts +1073 -0
  95. package/dist/types/usage/claude.d.ts +3 -0
  96. package/dist/types/usage/gemini.d.ts +2 -0
  97. package/dist/types/usage/github-copilot.d.ts +7 -0
  98. package/dist/types/usage/google-antigravity.d.ts +2 -0
  99. package/dist/types/usage/grok-cli.d.ts +17 -0
  100. package/dist/types/usage/kimi.d.ts +4 -0
  101. package/dist/types/usage/minimax-code.d.ts +2 -0
  102. package/dist/types/usage/openai-codex.d.ts +3 -0
  103. package/dist/types/usage/shared.d.ts +1 -0
  104. package/dist/types/usage/zai.d.ts +2 -0
  105. package/dist/types/usage.d.ts +264 -0
  106. package/dist/types/utils/abort.d.ts +19 -0
  107. package/dist/types/utils/anthropic-auth.d.ts +39 -0
  108. package/dist/types/utils/block-symbols.d.ts +6 -0
  109. package/dist/types/utils/discovery/antigravity.d.ts +67 -0
  110. package/dist/types/utils/discovery/codex.d.ts +38 -0
  111. package/dist/types/utils/discovery/cursor.d.ts +49 -0
  112. package/dist/types/utils/discovery/gemini.d.ts +25 -0
  113. package/dist/types/utils/discovery/index.d.ts +4 -0
  114. package/dist/types/utils/discovery/openai-compatible.d.ts +81 -0
  115. package/dist/types/utils/event-stream.d.ts +41 -0
  116. package/dist/types/utils/fallback-transport.d.ts +110 -0
  117. package/dist/types/utils/fireworks-model-id.d.ts +10 -0
  118. package/dist/types/utils/foundry.d.ts +11 -0
  119. package/dist/types/utils/h2-fetch.d.ts +22 -0
  120. package/dist/types/utils/http-inspector.d.ts +59 -0
  121. package/dist/types/utils/idle-iterator.d.ts +122 -0
  122. package/dist/types/utils/json-parse.d.ts +98 -0
  123. package/dist/types/utils/oauth/alibaba-token-plan.d.ts +19 -0
  124. package/dist/types/utils/oauth/anthropic.d.ts +41 -0
  125. package/dist/types/utils/oauth/api-key-login.d.ts +38 -0
  126. package/dist/types/utils/oauth/api-key-validation.d.ts +39 -0
  127. package/dist/types/utils/oauth/bizrouter.d.ts +1 -0
  128. package/dist/types/utils/oauth/callback-server.d.ts +80 -0
  129. package/dist/types/utils/oauth/cerebras.d.ts +1 -0
  130. package/dist/types/utils/oauth/cloudflare-ai-gateway.d.ts +18 -0
  131. package/dist/types/utils/oauth/commandcode.d.ts +1 -0
  132. package/dist/types/utils/oauth/cursor.d.ts +15 -0
  133. package/dist/types/utils/oauth/deepinfra.d.ts +1 -0
  134. package/dist/types/utils/oauth/deepseek.d.ts +10 -0
  135. package/dist/types/utils/oauth/firepass.d.ts +1 -0
  136. package/dist/types/utils/oauth/fireworks.d.ts +1 -0
  137. package/dist/types/utils/oauth/fugu.d.ts +1 -0
  138. package/dist/types/utils/oauth/github-copilot.d.ts +38 -0
  139. package/dist/types/utils/oauth/gitlab-duo.d.ts +3 -0
  140. package/dist/types/utils/oauth/glm-zcode.d.ts +71 -0
  141. package/dist/types/utils/oauth/google-antigravity.d.ts +11 -0
  142. package/dist/types/utils/oauth/google-gemini-cli.d.ts +10 -0
  143. package/dist/types/utils/oauth/google-oauth-shared.d.ts +28 -0
  144. package/dist/types/utils/oauth/huggingface.d.ts +19 -0
  145. package/dist/types/utils/oauth/index.d.ts +39 -0
  146. package/dist/types/utils/oauth/kagi.d.ts +17 -0
  147. package/dist/types/utils/oauth/kilo.d.ts +5 -0
  148. package/dist/types/utils/oauth/kimi.d.ts +17 -0
  149. package/dist/types/utils/oauth/kiro.d.ts +71 -0
  150. package/dist/types/utils/oauth/litellm.d.ts +18 -0
  151. package/dist/types/utils/oauth/lm-studio.d.ts +17 -0
  152. package/dist/types/utils/oauth/mara.d.ts +1 -0
  153. package/dist/types/utils/oauth/minimax-code.d.ts +28 -0
  154. package/dist/types/utils/oauth/moonshot.d.ts +1 -0
  155. package/dist/types/utils/oauth/nanogpt.d.ts +1 -0
  156. package/dist/types/utils/oauth/nvidia.d.ts +18 -0
  157. package/dist/types/utils/oauth/ollama-cloud.d.ts +2 -0
  158. package/dist/types/utils/oauth/ollama.d.ts +18 -0
  159. package/dist/types/utils/oauth/openai-codex.d.ts +21 -0
  160. package/dist/types/utils/oauth/opencode.d.ts +18 -0
  161. package/dist/types/utils/oauth/opengateway.d.ts +1 -0
  162. package/dist/types/utils/oauth/openrouter.d.ts +1 -0
  163. package/dist/types/utils/oauth/parallel.d.ts +17 -0
  164. package/dist/types/utils/oauth/perplexity.d.ts +4 -0
  165. package/dist/types/utils/oauth/pkce.d.ts +8 -0
  166. package/dist/types/utils/oauth/qianfan.d.ts +17 -0
  167. package/dist/types/utils/oauth/qwen-portal.d.ts +19 -0
  168. package/dist/types/utils/oauth/sglang.d.ts +16 -0
  169. package/dist/types/utils/oauth/synthetic.d.ts +1 -0
  170. package/dist/types/utils/oauth/tavily.d.ts +17 -0
  171. package/dist/types/utils/oauth/together.d.ts +1 -0
  172. package/dist/types/utils/oauth/types.d.ts +56 -0
  173. package/dist/types/utils/oauth/venice.d.ts +18 -0
  174. package/dist/types/utils/oauth/vercel-ai-gateway.d.ts +18 -0
  175. package/dist/types/utils/oauth/vllm.d.ts +16 -0
  176. package/dist/types/utils/oauth/xai.d.ts +30 -0
  177. package/dist/types/utils/oauth/xiaomi.d.ts +25 -0
  178. package/dist/types/utils/oauth/zai.d.ts +18 -0
  179. package/dist/types/utils/oauth/zenmux.d.ts +1 -0
  180. package/dist/types/utils/overflow.d.ts +14 -0
  181. package/dist/types/utils/parse-bind.d.ts +26 -0
  182. package/dist/types/utils/provider-response.d.ts +6 -0
  183. package/dist/types/utils/provider-safety-stop.d.ts +8 -0
  184. package/dist/types/utils/proxy.d.ts +7 -0
  185. package/dist/types/utils/retry-after.d.ts +3 -0
  186. package/dist/types/utils/retry-budget.d.ts +1 -0
  187. package/dist/types/utils/retry.d.ts +29 -0
  188. package/dist/types/utils/schema/adapt.d.ts +24 -0
  189. package/dist/types/utils/schema/compatibility.d.ts +30 -0
  190. package/dist/types/utils/schema/dereference.d.ts +11 -0
  191. package/dist/types/utils/schema/draft.d.ts +10 -0
  192. package/dist/types/utils/schema/equality.d.ts +4 -0
  193. package/dist/types/utils/schema/fields.d.ts +49 -0
  194. package/dist/types/utils/schema/index.d.ts +14 -0
  195. package/dist/types/utils/schema/json-schema-validator.d.ts +12 -0
  196. package/dist/types/utils/schema/meta-validator.d.ts +2 -0
  197. package/dist/types/utils/schema/normalize.d.ts +93 -0
  198. package/dist/types/utils/schema/root-combinator.d.ts +12 -0
  199. package/dist/types/utils/schema/spill.d.ts +8 -0
  200. package/dist/types/utils/schema/stamps.d.ts +25 -0
  201. package/dist/types/utils/schema/types.d.ts +4 -0
  202. package/dist/types/utils/schema/wire.d.ts +54 -0
  203. package/dist/types/utils/schema/zod-decontaminate.d.ts +31 -0
  204. package/dist/types/utils/sse-debug.d.ts +10 -0
  205. package/dist/types/utils/tool-call-healing.d.ts +80 -0
  206. package/dist/types/utils/tool-choice-capability.d.ts +57 -0
  207. package/dist/types/utils/tool-choice.d.ts +50 -0
  208. package/dist/types/utils/validation.d.ts +17 -0
  209. package/dist/types/utils.d.ts +117 -0
  210. package/package.json +152 -0
  211. package/src/adapter-internals/provider-safety-stop.d.ts +45 -0
  212. package/src/adapter-internals/provider-safety-stop.ts +156 -0
  213. package/src/api-registry.d.ts +30 -0
  214. package/src/api-registry.ts +96 -0
  215. package/src/auth-broker/client.ts +444 -0
  216. package/src/auth-broker/index.ts +5 -0
  217. package/src/auth-broker/redact.ts +39 -0
  218. package/src/auth-broker/refresher.ts +130 -0
  219. package/src/auth-broker/remote-store.ts +1576 -0
  220. package/src/auth-broker/server.ts +764 -0
  221. package/src/auth-broker/types.ts +164 -0
  222. package/src/auth-broker/wire-schemas.ts +261 -0
  223. package/src/auth-gateway/http.ts +198 -0
  224. package/src/auth-gateway/index.ts +3 -0
  225. package/src/auth-gateway/server.ts +1315 -0
  226. package/src/auth-gateway/types.ts +160 -0
  227. package/src/auth-storage.ts +7312 -0
  228. package/src/cli.ts +269 -0
  229. package/src/codex-tools.d.ts +4 -0
  230. package/src/codex-tools.ts +24 -0
  231. package/src/context-cap-policy.d.ts +68 -0
  232. package/src/context-cap-policy.ts +123 -0
  233. package/src/core.ts +44 -0
  234. package/src/index.ts +61 -0
  235. package/src/model-cache.ts +236 -0
  236. package/src/model-manager.ts +744 -0
  237. package/src/model-pricing.d.ts +3 -0
  238. package/src/model-pricing.ts +68 -0
  239. package/src/model-retirements.d.ts +6 -0
  240. package/src/model-retirements.ts +19 -0
  241. package/src/model-thinking.d.ts +100 -0
  242. package/src/model-thinking.ts +1054 -0
  243. package/src/models.d.ts +21 -0
  244. package/src/models.json +94672 -0
  245. package/src/models.json.d.ts +9 -0
  246. package/src/models.ts +126 -0
  247. package/src/openai-completions-compat.d.ts +34 -0
  248. package/src/openai-completions-compat.ts +383 -0
  249. package/src/prompts/composer-bash-policy-recovery.md +1 -0
  250. package/src/prompts/cursor-composer-bash-policy-recovery.md +1 -0
  251. package/src/prompts/cursor-composer-edit-discipline.md +7 -0
  252. package/src/prompts/turn-aborted-guidance.md +4 -0
  253. package/src/provider-details.ts +90 -0
  254. package/src/provider-models/bundled-references.ts +38 -0
  255. package/src/provider-models/descriptors.ts +392 -0
  256. package/src/provider-models/google.ts +92 -0
  257. package/src/provider-models/index.ts +5 -0
  258. package/src/provider-models/ollama.ts +159 -0
  259. package/src/provider-models/openai-compat.ts +2920 -0
  260. package/src/provider-models/special.ts +185 -0
  261. package/src/providers/amazon-bedrock.d.ts +60 -0
  262. package/src/providers/amazon-bedrock.ts +939 -0
  263. package/src/providers/anthropic-messages-server-schema.ts +229 -0
  264. package/src/providers/anthropic-messages-server.ts +839 -0
  265. package/src/providers/anthropic.d.ts +280 -0
  266. package/src/providers/anthropic.ts +4421 -0
  267. package/src/providers/aws-credential-config.d.ts +19 -0
  268. package/src/providers/aws-credential-config.ts +179 -0
  269. package/src/providers/aws-credentials.d.ts +43 -0
  270. package/src/providers/aws-credentials.ts +457 -0
  271. package/src/providers/aws-eventstream.d.ts +38 -0
  272. package/src/providers/aws-eventstream.ts +185 -0
  273. package/src/providers/aws-sigv4.d.ts +55 -0
  274. package/src/providers/aws-sigv4.ts +218 -0
  275. package/src/providers/azure-openai-responses.d.ts +22 -0
  276. package/src/providers/azure-openai-responses.ts +447 -0
  277. package/src/providers/composer-discipline.d.ts +32 -0
  278. package/src/providers/composer-discipline.ts +95 -0
  279. package/src/providers/cursor/client-version.d.ts +10 -0
  280. package/src/providers/cursor/client-version.ts +10 -0
  281. package/src/providers/cursor/exec-modern.d.ts +98 -0
  282. package/src/providers/cursor/exec-modern.ts +497 -0
  283. package/src/providers/cursor/gen/agent_pb.d.ts +16769 -0
  284. package/src/providers/cursor/gen/agent_pb.ts +19780 -0
  285. package/src/providers/cursor/proto/agent.proto +4533 -0
  286. package/src/providers/cursor/proto/buf.gen.yaml +6 -0
  287. package/src/providers/cursor/proto/buf.yaml +17 -0
  288. package/src/providers/cursor-pi-args.d.ts +119 -0
  289. package/src/providers/cursor-pi-args.ts +187 -0
  290. package/src/providers/cursor.d.ts +72 -0
  291. package/src/providers/cursor.ts +3396 -0
  292. package/src/providers/dashscope-token-plan-headers.d.ts +57 -0
  293. package/src/providers/dashscope-token-plan-headers.ts +84 -0
  294. package/src/providers/error-message.d.ts +27 -0
  295. package/src/providers/error-message.ts +21 -0
  296. package/src/providers/github-copilot-headers.d.ts +40 -0
  297. package/src/providers/github-copilot-headers.ts +140 -0
  298. package/src/providers/gitlab-duo.d.ts +27 -0
  299. package/src/providers/gitlab-duo.ts +393 -0
  300. package/src/providers/google-auth.d.ts +26 -0
  301. package/src/providers/google-auth.ts +262 -0
  302. package/src/providers/google-gemini-cli.d.ts +75 -0
  303. package/src/providers/google-gemini-cli.ts +969 -0
  304. package/src/providers/google-gemini-headers.d.ts +43 -0
  305. package/src/providers/google-gemini-headers.ts +100 -0
  306. package/src/providers/google-shared.d.ts +183 -0
  307. package/src/providers/google-shared.ts +1105 -0
  308. package/src/providers/google-types.d.ts +138 -0
  309. package/src/providers/google-types.ts +167 -0
  310. package/src/providers/google-vertex.d.ts +11 -0
  311. package/src/providers/google-vertex.ts +124 -0
  312. package/src/providers/google.d.ts +4 -0
  313. package/src/providers/google.ts +41 -0
  314. package/src/providers/grammar.d.ts +1 -0
  315. package/src/providers/grammar.ts +70 -0
  316. package/src/providers/kimi.d.ts +27 -0
  317. package/src/providers/kimi.ts +52 -0
  318. package/src/providers/kiro-api-key.d.ts +50 -0
  319. package/src/providers/kiro-api-key.ts +786 -0
  320. package/src/providers/kiro-codewhisperer.d.ts +11 -0
  321. package/src/providers/kiro-codewhisperer.ts +600 -0
  322. package/src/providers/mock.ts +526 -0
  323. package/src/providers/ollama.d.ts +41 -0
  324. package/src/providers/ollama.ts +645 -0
  325. package/src/providers/openai-anthropic-shim.d.ts +31 -0
  326. package/src/providers/openai-anthropic-shim.ts +156 -0
  327. package/src/providers/openai-bounded-rate-limits.d.ts +3 -0
  328. package/src/providers/openai-bounded-rate-limits.ts +57 -0
  329. package/src/providers/openai-chat-server-schema.ts +254 -0
  330. package/src/providers/openai-chat-server.ts +724 -0
  331. package/src/providers/openai-codex/constants.d.ts +26 -0
  332. package/src/providers/openai-codex/constants.ts +43 -0
  333. package/src/providers/openai-codex/request-transformer.d.ts +50 -0
  334. package/src/providers/openai-codex/request-transformer.ts +219 -0
  335. package/src/providers/openai-codex/response-handler.d.ts +18 -0
  336. package/src/providers/openai-codex/response-handler.ts +111 -0
  337. package/src/providers/openai-codex-responses.d.ts +71 -0
  338. package/src/providers/openai-codex-responses.ts +3288 -0
  339. package/src/providers/openai-completions-compat.d.ts +6 -0
  340. package/src/providers/openai-completions-compat.ts +6 -0
  341. package/src/providers/openai-completions.d.ts +35 -0
  342. package/src/providers/openai-completions.ts +2294 -0
  343. package/src/providers/openai-opencodex-responses.ts +174 -0
  344. package/src/providers/openai-request-transform.d.ts +4 -0
  345. package/src/providers/openai-request-transform.ts +136 -0
  346. package/src/providers/openai-responses-server-schema.ts +290 -0
  347. package/src/providers/openai-responses-server.ts +1268 -0
  348. package/src/providers/openai-responses-shared.d.ts +106 -0
  349. package/src/providers/openai-responses-shared.ts +1253 -0
  350. package/src/providers/openai-responses.d.ts +37 -0
  351. package/src/providers/openai-responses.ts +989 -0
  352. package/src/providers/pi-native-client.d.ts +29 -0
  353. package/src/providers/pi-native-client.ts +243 -0
  354. package/src/providers/pi-native-server.ts +488 -0
  355. package/src/providers/register-builtins.d.ts +59 -0
  356. package/src/providers/register-builtins.ts +544 -0
  357. package/src/providers/synthetic.d.ts +26 -0
  358. package/src/providers/synthetic.ts +50 -0
  359. package/src/providers/transform-messages.d.ts +33 -0
  360. package/src/providers/transform-messages.ts +408 -0
  361. package/src/providers/vision-guard.d.ts +8 -0
  362. package/src/providers/vision-guard.ts +31 -0
  363. package/src/rate-limit-utils.d.ts +19 -0
  364. package/src/rate-limit-utils.ts +102 -0
  365. package/src/stream.d.ts +45 -0
  366. package/src/stream.ts +1306 -0
  367. package/src/types.d.ts +1073 -0
  368. package/src/types.ts +1305 -0
  369. package/src/usage/claude.ts +449 -0
  370. package/src/usage/gemini.ts +250 -0
  371. package/src/usage/github-copilot.ts +421 -0
  372. package/src/usage/google-antigravity.ts +201 -0
  373. package/src/usage/grok-cli.ts +259 -0
  374. package/src/usage/kimi.ts +285 -0
  375. package/src/usage/minimax-code.ts +31 -0
  376. package/src/usage/openai-codex.ts +503 -0
  377. package/src/usage/shared.ts +10 -0
  378. package/src/usage/zai.ts +247 -0
  379. package/src/usage.ts +190 -0
  380. package/src/utils/abort.d.ts +19 -0
  381. package/src/utils/abort.ts +51 -0
  382. package/src/utils/anthropic-auth.ts +95 -0
  383. package/src/utils/block-symbols.d.ts +6 -0
  384. package/src/utils/block-symbols.ts +11 -0
  385. package/src/utils/discovery/antigravity.ts +275 -0
  386. package/src/utils/discovery/codex.ts +362 -0
  387. package/src/utils/discovery/cursor.ts +388 -0
  388. package/src/utils/discovery/gemini.ts +248 -0
  389. package/src/utils/discovery/index.ts +4 -0
  390. package/src/utils/discovery/openai-compatible.ts +379 -0
  391. package/src/utils/event-stream.d.ts +41 -0
  392. package/src/utils/event-stream.ts +269 -0
  393. package/src/utils/fallback-transport.d.ts +110 -0
  394. package/src/utils/fallback-transport.ts +411 -0
  395. package/src/utils/fireworks-model-id.d.ts +10 -0
  396. package/src/utils/fireworks-model-id.ts +30 -0
  397. package/src/utils/foundry.d.ts +11 -0
  398. package/src/utils/foundry.ts +18 -0
  399. package/src/utils/h2-fetch.ts +60 -0
  400. package/src/utils/http-inspector.d.ts +59 -0
  401. package/src/utils/http-inspector.ts +380 -0
  402. package/src/utils/idle-iterator.d.ts +122 -0
  403. package/src/utils/idle-iterator.ts +410 -0
  404. package/src/utils/json-parse.d.ts +98 -0
  405. package/src/utils/json-parse.ts +607 -0
  406. package/src/utils/oauth/alibaba-token-plan.ts +60 -0
  407. package/src/utils/oauth/anthropic.ts +233 -0
  408. package/src/utils/oauth/api-key-login.ts +98 -0
  409. package/src/utils/oauth/api-key-validation.ts +344 -0
  410. package/src/utils/oauth/bizrouter.ts +15 -0
  411. package/src/utils/oauth/callback-server.d.ts +80 -0
  412. package/src/utils/oauth/callback-server.ts +359 -0
  413. package/src/utils/oauth/cerebras.ts +16 -0
  414. package/src/utils/oauth/cloudflare-ai-gateway.ts +48 -0
  415. package/src/utils/oauth/commandcode.ts +17 -0
  416. package/src/utils/oauth/cursor.ts +157 -0
  417. package/src/utils/oauth/deepinfra.ts +15 -0
  418. package/src/utils/oauth/deepseek.ts +53 -0
  419. package/src/utils/oauth/firepass.ts +24 -0
  420. package/src/utils/oauth/fireworks.ts +15 -0
  421. package/src/utils/oauth/fugu.ts +15 -0
  422. package/src/utils/oauth/github-copilot.d.ts +38 -0
  423. package/src/utils/oauth/github-copilot.ts +362 -0
  424. package/src/utils/oauth/gitlab-duo.ts +123 -0
  425. package/src/utils/oauth/glm-zcode.d.ts +71 -0
  426. package/src/utils/oauth/glm-zcode.ts +433 -0
  427. package/src/utils/oauth/google-antigravity.ts +200 -0
  428. package/src/utils/oauth/google-gemini-cli.ts +256 -0
  429. package/src/utils/oauth/google-oauth-shared.ts +110 -0
  430. package/src/utils/oauth/huggingface.ts +62 -0
  431. package/src/utils/oauth/index.ts +558 -0
  432. package/src/utils/oauth/kagi.ts +47 -0
  433. package/src/utils/oauth/kilo.ts +87 -0
  434. package/src/utils/oauth/kimi.d.ts +17 -0
  435. package/src/utils/oauth/kimi.ts +275 -0
  436. package/src/utils/oauth/kiro.ts +448 -0
  437. package/src/utils/oauth/litellm.ts +47 -0
  438. package/src/utils/oauth/lm-studio.ts +38 -0
  439. package/src/utils/oauth/mara.ts +16 -0
  440. package/src/utils/oauth/minimax-code.ts +78 -0
  441. package/src/utils/oauth/moonshot.ts +16 -0
  442. package/src/utils/oauth/nanogpt.ts +15 -0
  443. package/src/utils/oauth/nvidia.ts +70 -0
  444. package/src/utils/oauth/oauth.html +199 -0
  445. package/src/utils/oauth/ollama-cloud.ts +28 -0
  446. package/src/utils/oauth/ollama.ts +47 -0
  447. package/src/utils/oauth/openai-codex.ts +299 -0
  448. package/src/utils/oauth/opencode.ts +49 -0
  449. package/src/utils/oauth/opengateway.ts +15 -0
  450. package/src/utils/oauth/openrouter.ts +16 -0
  451. package/src/utils/oauth/parallel.ts +46 -0
  452. package/src/utils/oauth/perplexity.ts +225 -0
  453. package/src/utils/oauth/pkce.ts +18 -0
  454. package/src/utils/oauth/qianfan.ts +58 -0
  455. package/src/utils/oauth/qwen-portal.ts +60 -0
  456. package/src/utils/oauth/sglang.ts +42 -0
  457. package/src/utils/oauth/synthetic.ts +15 -0
  458. package/src/utils/oauth/tavily.ts +46 -0
  459. package/src/utils/oauth/together.ts +16 -0
  460. package/src/utils/oauth/types.d.ts +56 -0
  461. package/src/utils/oauth/types.ts +122 -0
  462. package/src/utils/oauth/venice.ts +59 -0
  463. package/src/utils/oauth/vercel-ai-gateway.ts +47 -0
  464. package/src/utils/oauth/vllm.ts +42 -0
  465. package/src/utils/oauth/xai.ts +246 -0
  466. package/src/utils/oauth/xiaomi.ts +199 -0
  467. package/src/utils/oauth/zai.ts +60 -0
  468. package/src/utils/oauth/zenmux.ts +15 -0
  469. package/src/utils/overflow.ts +275 -0
  470. package/src/utils/parse-bind.ts +81 -0
  471. package/src/utils/provider-response.d.ts +6 -0
  472. package/src/utils/provider-response.ts +30 -0
  473. package/src/utils/provider-safety-stop.ts +8 -0
  474. package/src/utils/proxy.d.ts +7 -0
  475. package/src/utils/proxy.ts +652 -0
  476. package/src/utils/retry-after.d.ts +3 -0
  477. package/src/utils/retry-after.ts +110 -0
  478. package/src/utils/retry-budget.d.ts +1 -0
  479. package/src/utils/retry-budget.ts +4 -0
  480. package/src/utils/retry.d.ts +29 -0
  481. package/src/utils/retry.ts +67 -0
  482. package/src/utils/schema/CONSTRAINTS.md +164 -0
  483. package/src/utils/schema/adapt.d.ts +24 -0
  484. package/src/utils/schema/adapt.ts +36 -0
  485. package/src/utils/schema/compatibility.d.ts +30 -0
  486. package/src/utils/schema/compatibility.ts +435 -0
  487. package/src/utils/schema/dereference.d.ts +11 -0
  488. package/src/utils/schema/dereference.ts +98 -0
  489. package/src/utils/schema/draft.d.ts +10 -0
  490. package/src/utils/schema/draft.ts +341 -0
  491. package/src/utils/schema/equality.d.ts +4 -0
  492. package/src/utils/schema/equality.ts +97 -0
  493. package/src/utils/schema/fields.d.ts +49 -0
  494. package/src/utils/schema/fields.ts +190 -0
  495. package/src/utils/schema/index.d.ts +14 -0
  496. package/src/utils/schema/index.ts +14 -0
  497. package/src/utils/schema/json-schema-validator.d.ts +12 -0
  498. package/src/utils/schema/json-schema-validator.ts +577 -0
  499. package/src/utils/schema/meta-validator.d.ts +2 -0
  500. package/src/utils/schema/meta-validator.ts +167 -0
  501. package/src/utils/schema/normalize.d.ts +93 -0
  502. package/src/utils/schema/normalize.ts +1588 -0
  503. package/src/utils/schema/root-combinator.d.ts +12 -0
  504. package/src/utils/schema/root-combinator.ts +143 -0
  505. package/src/utils/schema/spill.d.ts +8 -0
  506. package/src/utils/schema/spill.ts +43 -0
  507. package/src/utils/schema/stamps.d.ts +25 -0
  508. package/src/utils/schema/stamps.ts +97 -0
  509. package/src/utils/schema/types.d.ts +4 -0
  510. package/src/utils/schema/types.ts +11 -0
  511. package/src/utils/schema/wire.d.ts +54 -0
  512. package/src/utils/schema/wire.ts +213 -0
  513. package/src/utils/schema/zod-decontaminate.d.ts +31 -0
  514. package/src/utils/schema/zod-decontaminate.ts +331 -0
  515. package/src/utils/sse-debug.d.ts +10 -0
  516. package/src/utils/sse-debug.ts +289 -0
  517. package/src/utils/tool-call-healing.d.ts +80 -0
  518. package/src/utils/tool-call-healing.ts +298 -0
  519. package/src/utils/tool-choice-capability.d.ts +57 -0
  520. package/src/utils/tool-choice-capability.ts +633 -0
  521. package/src/utils/tool-choice.d.ts +50 -0
  522. package/src/utils/tool-choice.ts +99 -0
  523. package/src/utils/validation.ts +1080 -0
  524. package/src/utils.d.ts +117 -0
  525. package/src/utils.ts +523 -0
@@ -0,0 +1,11 @@
1
+ import type { Effort } from "../model-thinking";
2
+ import type { StreamFunction, StreamOptions } from "../types";
3
+ export interface KiroCodeWhispererOptions extends StreamOptions {
4
+ /** Effort level for Kiro API-key reasoning. */
5
+ reasoning?: Effort | boolean;
6
+ /** AWS region for the CodeWhisperer streaming endpoint. */
7
+ region?: string;
8
+ /** Profile ARN for enterprise IAM Identity Center accounts. */
9
+ profileArn?: string;
10
+ }
11
+ export declare const streamKiroCodeWhisperer: StreamFunction<"kiro-codewhisperer-stream">;
@@ -0,0 +1,600 @@
1
+ /**
2
+ * Kiro / Amazon Q Developer / CodeWhisperer streaming transport.
3
+ *
4
+ * Talks directly to the CodeWhisperer streaming service over HTTPS using
5
+ * a bearer token from AWS SSO OIDC. The response is an
6
+ * `application/vnd.amazon.eventstream`, decoded by the shared
7
+ * `decodeEventStream` primitive from `aws-eventstream.ts`.
8
+ *
9
+ * Clean-room: derived from published Amazon service model shapes
10
+ * (aws-toolkit-vscode CodeWhisperer streaming + codewhispererruntime-2022-11-11),
11
+ * not from any AGPL reference implementation.
12
+ */
13
+ import { $credentialEnv, $env, extractHttpStatusFromError } from "@vib-rato/utils";
14
+ import type { Effort } from "../model-thinking";
15
+ import type {
16
+ Api,
17
+ AssistantMessage,
18
+ Context,
19
+ Model,
20
+ StreamFunction,
21
+ StreamOptions,
22
+ TextContent,
23
+ Tool,
24
+ ToolCall,
25
+ ToolResultMessage,
26
+ } from "../types";
27
+ import { AssistantMessageEventStream } from "../utils/event-stream";
28
+ import { transportFailureFacts } from "../utils/fallback-transport";
29
+ import { withHttpStatus } from "../utils/http-inspector";
30
+ import { captureUnicodeEscapeEvidence } from "../utils/json-parse";
31
+ import { decodeEventStream } from "./aws-eventstream";
32
+ import { isKiroApiKey, streamKiroApiKey, toKiroModelId } from "./kiro-api-key";
33
+
34
+ // ─────────────────────────────────────────────────────────────────────────────
35
+ // Provider options
36
+ // ─────────────────────────────────────────────────────────────────────────────
37
+
38
+ export interface KiroCodeWhispererOptions extends StreamOptions {
39
+ /** Effort level for Kiro API-key reasoning. */
40
+ reasoning?: Effort | boolean;
41
+ /** AWS region for the CodeWhisperer streaming endpoint. */
42
+ region?: string;
43
+ /** Profile ARN for enterprise IAM Identity Center accounts. */
44
+ profileArn?: string;
45
+ }
46
+
47
+ // ─────────────────────────────────────────────────────────────────────────────
48
+ // CodeWhisperer streaming wire types
49
+ // ─────────────────────────────────────────────────────────────────────────────
50
+
51
+ interface WireToolSpec {
52
+ toolSpecification: {
53
+ name: string;
54
+ description?: string;
55
+ inputSchema: { json: unknown };
56
+ };
57
+ }
58
+
59
+ interface WireToolResult {
60
+ toolResultMessage: {
61
+ content: string;
62
+ toolUseId: string;
63
+ status?: "success" | "error";
64
+ };
65
+ }
66
+
67
+ interface WireUserMessage {
68
+ userInputMessage: {
69
+ content: string;
70
+ modelId?: string;
71
+ userInputMessageContext?: {
72
+ tools?: { tools: WireToolSpec[] };
73
+ toolResults?: { toolResults: WireToolResult[][] };
74
+ editorStateContext?: Record<string, unknown>;
75
+ };
76
+ origin?: string;
77
+ };
78
+ }
79
+
80
+ interface WireAssistantMessage {
81
+ assistantResponseMessage: {
82
+ content: string;
83
+ };
84
+ }
85
+
86
+ type WireHistoryMessage = WireUserMessage | WireAssistantMessage;
87
+
88
+ interface ConversationState {
89
+ chatTriggerType: "MANUAL";
90
+ currentMessage: WireUserMessage;
91
+ history?: WireHistoryMessage[];
92
+ profileArn?: string;
93
+ customizationArn?: string;
94
+ }
95
+
96
+ interface GenerateAssistantResponseRequest {
97
+ conversationState: ConversationState;
98
+ }
99
+
100
+ // ─────────────────────────────────────────────────────────────────────────────
101
+ // Response eventstream types (ChatResponseStream union members)
102
+ // ─────────────────────────────────────────────────────────────────────────────
103
+
104
+ interface AssistantResponseEvent {
105
+ assistantResponseEvent?: {
106
+ content?: string;
107
+ };
108
+ }
109
+
110
+ interface ToolUseEventPayload {
111
+ toolUseEvent?: {
112
+ toolUseId?: string;
113
+ name?: string;
114
+ input?: unknown;
115
+ stop?: { stopReason?: string };
116
+ };
117
+ }
118
+
119
+ interface MessageMetadataEvent {
120
+ messageMetadataEvent?: {
121
+ conversationId?: string;
122
+ utteranceId?: string;
123
+ };
124
+ }
125
+
126
+ interface ErrorPayload {
127
+ error?: {
128
+ message?: string;
129
+ code?: string;
130
+ };
131
+ }
132
+
133
+ // ─────────────────────────────────────────────────────────────────────────────
134
+ // Constants
135
+ // ─────────────────────────────────────────────────────────────────────────────
136
+
137
+ const DEFAULT_REGION = "us-east-1";
138
+ const STREAMING_SERVICE_NAME = "amazoncodewhispererstreamingservice";
139
+
140
+ type Block = (TextContent | ToolCall) & { index?: number; partialJson?: string };
141
+
142
+ // ─────────────────────────────────────────────────────────────────────────────
143
+ // Stream function
144
+ // ─────────────────────────────────────────────────────────────────────────────
145
+
146
+ export const streamKiroCodeWhisperer: StreamFunction<"kiro-codewhisperer-stream"> = (
147
+ model: Model<"kiro-codewhisperer-stream">,
148
+ context: Context,
149
+ options: KiroCodeWhispererOptions,
150
+ ): AssistantMessageEventStream => {
151
+ const token = resolveBearerToken(options.apiKey);
152
+ if (isKiroApiKey(token)) {
153
+ return streamKiroApiKey(model, context, { ...options, apiKey: token });
154
+ }
155
+
156
+ const stream = new AssistantMessageEventStream();
157
+
158
+ (async () => {
159
+ const startTime = Date.now();
160
+ let firstTokenTime: number | undefined;
161
+
162
+ const output: AssistantMessage = {
163
+ role: "assistant",
164
+ content: [],
165
+ api: "kiro-codewhisperer-stream" as Api,
166
+ provider: model.provider,
167
+ model: model.id,
168
+ usage: {
169
+ input: 0,
170
+ output: 0,
171
+ cacheRead: 0,
172
+ cacheWrite: 0,
173
+ totalTokens: 0,
174
+ cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },
175
+ },
176
+ stopReason: "stop",
177
+ timestamp: Date.now(),
178
+ };
179
+
180
+ const blocks = output.content as Block[];
181
+ const region = options.region || $env.KIRO_REGION || $env.AWS_REGION || $env.AWS_DEFAULT_REGION || DEFAULT_REGION;
182
+
183
+ try {
184
+ // Resolve bearer token
185
+ const bearerToken = resolveBearerToken(options.apiKey);
186
+ if (!bearerToken) {
187
+ throw new Error(
188
+ "No Kiro credentials found. Set KIRO_API_KEY (ksk_ from https://app.kiro.dev/settings/api-keys) or run 'vib auth-broker login kiro'.",
189
+ );
190
+ }
191
+
192
+ // Build request
193
+ const conversationState = buildConversationState(context, model, options);
194
+ const requestBody: GenerateAssistantResponseRequest = {
195
+ conversationState,
196
+ };
197
+
198
+ options?.onPayload?.(requestBody, model, options?.attemptScope);
199
+
200
+ const host = `${STREAMING_SERVICE_NAME}.${region}.amazonaws.com`;
201
+ const url = `https://${host}/`;
202
+
203
+ const bodyText = JSON.stringify(requestBody);
204
+ const body = new TextEncoder().encode(bodyText);
205
+ const requestHeaders: Record<string, string> = {
206
+ "content-type": "application/json",
207
+ accept: "application/vnd.amazon.eventstream",
208
+ authorization: `Bearer ${bearerToken}`,
209
+ "amzn-X-amz-target": "AmazonCodeWhispererService.GenerateAssistantResponse",
210
+ };
211
+
212
+ if (options.profileArn) {
213
+ requestHeaders["x-amzn-codewhisperer-proflearn"] = options.profileArn;
214
+ }
215
+
216
+ // Merge user-provided headers
217
+ if (options.headers) {
218
+ Object.assign(requestHeaders, options.headers);
219
+ }
220
+
221
+ const response = await fetch(url, {
222
+ method: "POST",
223
+ headers: requestHeaders,
224
+ body,
225
+ signal: options.signal,
226
+ });
227
+
228
+ if (!response.ok) {
229
+ const errBody = await response.text().catch(() => "");
230
+ throw withHttpStatus(
231
+ new Error(`Kiro CodeWhisperer HTTP ${response.status}: ${errBody.slice(0, 1000)}`),
232
+ response.status,
233
+ );
234
+ }
235
+
236
+ if (!response.body) throw new Error("Kiro CodeWhisperer response has no body");
237
+
238
+ // Decode eventstream
239
+ for await (const message of decodeEventStream(response.body)) {
240
+ if (options.signal?.aborted) break;
241
+
242
+ const messageType = message.headers[":message-type"];
243
+ const eventType = message.headers[":event-type"];
244
+
245
+ if (messageType === "exception") {
246
+ const exceptionType = message.headers[":exception-type"] || "Exception";
247
+ const payload = safeParsePayload(message.payload) as { message?: string } | undefined;
248
+ const errorMessage = payload?.message || new TextDecoder().decode(message.payload);
249
+ const status = exceptionType === "ValidationException" ? 400 : 0;
250
+ const err = new Error(`${exceptionType}: ${errorMessage}`);
251
+ throw status ? withHttpStatus(err, status) : err;
252
+ }
253
+
254
+ if (messageType === "error") {
255
+ const code = message.headers[":error-code"] || "UnknownError";
256
+ const errorMessage = message.headers[":error-message"] || new TextDecoder().decode(message.payload);
257
+ throw new Error(`${code}: ${errorMessage}`);
258
+ }
259
+
260
+ if (messageType !== "event") continue;
261
+
262
+ const payload = safeParsePayload(message.payload);
263
+ if (!payload) continue;
264
+
265
+ switch (eventType) {
266
+ case "assistantResponseEvent": {
267
+ const ev = payload as AssistantResponseEvent;
268
+ const content = ev.assistantResponseEvent?.content;
269
+ if (content) {
270
+ if (!firstTokenTime) firstTokenTime = Date.now();
271
+ if (blocks.length === 0) {
272
+ stream.push({ type: "start", partial: output });
273
+ }
274
+ handleTextDelta(content, blocks, output, stream);
275
+ }
276
+ break;
277
+ }
278
+ case "toolUseEvent": {
279
+ const ev = payload as ToolUseEventPayload;
280
+ if (!firstTokenTime) firstTokenTime = Date.now();
281
+ if (blocks.length === 0) {
282
+ stream.push({ type: "start", partial: output });
283
+ }
284
+ handleToolUseEvent(ev, blocks, output, stream);
285
+ break;
286
+ }
287
+ case "messageMetadataEvent": {
288
+ const ev = payload as MessageMetadataEvent;
289
+ if (ev.messageMetadataEvent?.conversationId) {
290
+ output.responseId = ev.messageMetadataEvent.conversationId;
291
+ }
292
+ break;
293
+ }
294
+ case "codeReferenceEvent":
295
+ case "supplementaryWebLinksEvent":
296
+ case "followupPromptEvent":
297
+ case "dryRunSucceedEvent":
298
+ case "citationEvent":
299
+ case "intentsEvent":
300
+ case "interactionComponentsEvent":
301
+ case "invalidStateEvent":
302
+ // Known but unhandled events — ignore gracefully
303
+ break;
304
+ default:
305
+ // Unknown event types — ignore (forward compatibility)
306
+ break;
307
+ }
308
+
309
+ const errorPayload = payload as ErrorPayload;
310
+ if (errorPayload.error?.message) {
311
+ throw new Error(`Kiro CodeWhisperer stream error: ${errorPayload.error.message}`);
312
+ }
313
+ }
314
+
315
+ if (options.signal?.aborted) throw new Error("Request was aborted");
316
+
317
+ // Finalize blocks
318
+ for (const block of blocks) {
319
+ delete block.index;
320
+ delete block.partialJson;
321
+ }
322
+
323
+ // Determine stop reason
324
+ const hasToolCall = blocks.some(b => b.type === "toolCall");
325
+ output.stopReason = hasToolCall ? "toolUse" : "stop";
326
+
327
+ output.duration = Date.now() - startTime;
328
+ if (firstTokenTime) output.ttft = firstTokenTime - startTime;
329
+ stream.push({ type: "done", reason: output.stopReason as "stop" | "length" | "toolUse", message: output });
330
+ stream.end();
331
+ } catch (error) {
332
+ for (const block of output.content) {
333
+ delete (block as Block).index;
334
+ delete (block as Block).partialJson;
335
+ }
336
+ output.stopReason = options.signal?.aborted ? "aborted" : "error";
337
+ output.errorStatus = extractHttpStatusFromError(error);
338
+ output.transportFailure = transportFailureFacts(error);
339
+ const baseMessage = error instanceof Error ? error.message : JSON.stringify(error);
340
+ output.errorMessage = baseMessage;
341
+ output.duration = Date.now() - startTime;
342
+ if (firstTokenTime) output.ttft = firstTokenTime - startTime;
343
+ stream.push({ type: "error", reason: output.stopReason, error: output });
344
+ stream.end();
345
+ }
346
+ })();
347
+
348
+ return stream;
349
+ };
350
+
351
+ // ─────────────────────────────────────────────────────────────────────────────
352
+ // Request building
353
+ // ─────────────────────────────────────────────────────────────────────────────
354
+
355
+ function buildConversationState(
356
+ context: Context,
357
+ model: Model<"kiro-codewhisperer-stream">,
358
+ options: KiroCodeWhispererOptions,
359
+ ): ConversationState {
360
+ const messages = context.messages;
361
+ if (messages.length === 0) {
362
+ throw new Error("Kiro CodeWhisperer requires at least one message");
363
+ }
364
+
365
+ // Normalize the local dashed selector/wire id (e.g. "claude-haiku-4-5") to
366
+ // the canonical dotted upstream Kiro model id (e.g. "claude-haiku-4.5"),
367
+ // matching the sibling ksk_ API-key transport (kiro-api-key.ts) so both
368
+ // auth methods send the same wire form for the same catalog entry.
369
+ const modelId = toKiroModelId(model.wireModelId || model.id);
370
+
371
+ // Build history from all messages except the last
372
+ const history: WireHistoryMessage[] = [];
373
+ const systemPrompt = context.systemPrompt?.join("\n") ?? "";
374
+
375
+ for (let i = 0; i < messages.length - 1; i++) {
376
+ const msg = messages[i];
377
+ history.push(convertToWireMessage(msg, modelId, i === 0 ? systemPrompt : undefined));
378
+ }
379
+
380
+ // Convert the last message as currentMessage
381
+ const lastMsg = messages[messages.length - 1];
382
+ const currentMessage = convertToWireUserMessage(lastMsg, modelId, systemPrompt);
383
+
384
+ // Add tools to the current message context
385
+ if (context.tools && context.tools.length > 0) {
386
+ if (!currentMessage.userInputMessage.userInputMessageContext) {
387
+ currentMessage.userInputMessage.userInputMessageContext = {};
388
+ }
389
+ currentMessage.userInputMessage.userInputMessageContext.tools = {
390
+ tools: convertTools(context.tools),
391
+ };
392
+ }
393
+
394
+ return {
395
+ chatTriggerType: "MANUAL",
396
+ currentMessage,
397
+ history: history.length > 0 ? history : undefined,
398
+ profileArn: options.profileArn,
399
+ };
400
+ }
401
+
402
+ function convertToWireMessage(
403
+ msg: Context["messages"][number],
404
+ modelId: string,
405
+ systemPrompt?: string,
406
+ ): WireHistoryMessage {
407
+ if (msg.role === "user") {
408
+ return convertToWireUserMessage(msg, modelId, systemPrompt);
409
+ }
410
+ if (msg.role === "toolResult") {
411
+ return convertToWireUserMessage(msg, modelId, systemPrompt);
412
+ }
413
+ // assistant → assistant response
414
+ const textParts: string[] = [];
415
+ for (const block of msg.content) {
416
+ if (typeof block === "string") {
417
+ textParts.push(block);
418
+ } else if (block.type === "text") {
419
+ textParts.push(block.text);
420
+ } else if (block.type === "toolCall") {
421
+ textParts.push(JSON.stringify({ toolUseId: block.id, name: block.name, input: block.arguments }));
422
+ }
423
+ }
424
+ return {
425
+ assistantResponseMessage: {
426
+ content: textParts.join("\n") || "",
427
+ },
428
+ };
429
+ }
430
+
431
+ function convertToWireUserMessage(
432
+ msg: Context["messages"][number],
433
+ modelId: string,
434
+ systemPrompt?: string,
435
+ ): WireUserMessage {
436
+ let content = extractTextContent(msg);
437
+ if (systemPrompt) {
438
+ content = `${systemPrompt}\n\n${content}`;
439
+ }
440
+
441
+ const userMsg: WireUserMessage = {
442
+ userInputMessage: {
443
+ content,
444
+ modelId,
445
+ },
446
+ };
447
+
448
+ // Handle tool results
449
+ if (msg.role === "toolResult") {
450
+ const toolResultMsg = msg as ToolResultMessage;
451
+ const toolResults = (toolResultMsg.content ?? []).map(detail => ({
452
+ toolResultMessage: {
453
+ content: detail.type === "text" ? detail.text : "",
454
+ toolUseId: toolResultMsg.toolCallId,
455
+ status: toolResultMsg.isError ? ("error" as const) : ("success" as const),
456
+ },
457
+ }));
458
+ if (toolResults.length > 0) {
459
+ if (!userMsg.userInputMessage.userInputMessageContext) {
460
+ userMsg.userInputMessage.userInputMessageContext = {};
461
+ }
462
+ userMsg.userInputMessage.userInputMessageContext.toolResults = { toolResults: [toolResults] };
463
+ }
464
+ }
465
+
466
+ return userMsg;
467
+ }
468
+
469
+ function extractTextContent(msg: Context["messages"][number]): string {
470
+ if (typeof msg.content === "string") return msg.content;
471
+ if (Array.isArray(msg.content)) {
472
+ return msg.content
473
+ .map(block => {
474
+ if (typeof block === "string") return block;
475
+ if (block.type === "text") return block.text;
476
+ if (block.type === "image") return ""; // Images not supported in text field
477
+ return "";
478
+ })
479
+ .join("");
480
+ }
481
+ return "";
482
+ }
483
+
484
+ function convertTools(tools: Tool[]): WireToolSpec[] {
485
+ return tools.map(tool => ({
486
+ toolSpecification: {
487
+ name: tool.name,
488
+ description: tool.description ?? "",
489
+ inputSchema: {
490
+ json: tool.parameters ?? {},
491
+ },
492
+ },
493
+ }));
494
+ }
495
+
496
+ // ─────────────────────────────────────────────────────────────────────────────
497
+ // Event handling
498
+ // ─────────────────────────────────────────────────────────────────────────────
499
+
500
+ function handleTextDelta(
501
+ delta: string,
502
+ blocks: Block[],
503
+ output: AssistantMessage,
504
+ stream: AssistantMessageEventStream,
505
+ ): void {
506
+ // Find or create the last text block
507
+ let lastBlock = blocks[blocks.length - 1];
508
+ if (lastBlock?.type !== "text") {
509
+ const newBlock: Block = { type: "text", text: "", index: blocks.length };
510
+ blocks.push(newBlock);
511
+ lastBlock = newBlock;
512
+ stream.push({ type: "text_start", contentIndex: newBlock.index!, partial: output });
513
+ }
514
+ lastBlock.text += delta;
515
+ stream.push({ type: "text_delta", contentIndex: lastBlock.index!, delta, partial: output });
516
+ }
517
+
518
+ function handleToolUseEvent(
519
+ ev: ToolUseEventPayload,
520
+ blocks: Block[],
521
+ output: AssistantMessage,
522
+ stream: AssistantMessageEventStream,
523
+ ): void {
524
+ const toolEvent = ev.toolUseEvent;
525
+ if (!toolEvent) return;
526
+
527
+ const toolUseId = toolEvent.toolUseId ?? "";
528
+ const name = toolEvent.name ?? "";
529
+
530
+ // If input is provided as a complete object, emit toolcall_end
531
+ if (toolEvent.input !== undefined && toolEvent.input !== null) {
532
+ const inputStr = typeof toolEvent.input === "string" ? toolEvent.input : JSON.stringify(toolEvent.input);
533
+ const toolCall: ToolCall = {
534
+ type: "toolCall",
535
+ id: toolUseId,
536
+ name,
537
+ arguments: safeParseJson(inputStr) as Record<string, any>,
538
+ };
539
+ if (typeof toolEvent.input === "string") captureUnicodeEscapeEvidence(toolCall, inputStr);
540
+
541
+ const newBlock: Block = { ...toolCall, index: blocks.length };
542
+ if (typeof toolEvent.input === "string") captureUnicodeEscapeEvidence(newBlock, inputStr);
543
+ blocks.push(newBlock);
544
+ stream.push({ type: "toolcall_end", contentIndex: newBlock.index!, toolCall, partial: output });
545
+ return;
546
+ }
547
+
548
+ // Otherwise, accumulate partial input (if the service streams it in chunks)
549
+ // The published model does not document chunked tool input for CodeWhisperer,
550
+ // so this path handles the case defensively but expects complete input per event.
551
+ const toolCall: ToolCall = {
552
+ type: "toolCall",
553
+ id: toolUseId,
554
+ name,
555
+ arguments: {},
556
+ };
557
+
558
+ const newBlock: Block = { ...toolCall, index: blocks.length };
559
+ blocks.push(newBlock);
560
+ stream.push({ type: "toolcall_end", contentIndex: newBlock.index!, toolCall, partial: output });
561
+ }
562
+
563
+ // ─────────────────────────────────────────────────────────────────────────────
564
+ // Helpers
565
+ // ─────────────────────────────────────────────────────────────────────────────
566
+
567
+ function resolveBearerToken(apiKey: string | undefined): string | undefined {
568
+ if (!apiKey) {
569
+ return $credentialEnv("KIRO_API_KEY") ?? $credentialEnv("AWS_BEARER_TOKEN_KIRO") ?? undefined;
570
+ }
571
+
572
+ // Structured API key (from getOAuthApiKey) contains the access token as JSON
573
+ try {
574
+ const parsed = JSON.parse(apiKey) as { token?: string };
575
+ if (parsed.token) return parsed.token;
576
+ } catch {
577
+ // Plain bearer token
578
+ }
579
+
580
+ return apiKey;
581
+ }
582
+
583
+ function safeParsePayload(payload: Uint8Array): unknown {
584
+ if (payload.length === 0) return {};
585
+ try {
586
+ const text = new TextDecoder().decode(payload);
587
+ return JSON.parse(text);
588
+ } catch {
589
+ return undefined;
590
+ }
591
+ }
592
+
593
+ function safeParseJson(str: string): unknown {
594
+ if (!str) return {};
595
+ try {
596
+ return JSON.parse(str);
597
+ } catch {
598
+ return str;
599
+ }
600
+ }