@ultrakit/ultrakit 0.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (704) hide show
  1. package/README.md +95 -0
  2. package/dist/index.d.ts +6 -0
  3. package/dist/index.js +5991 -0
  4. package/dist/template/.opencode/.env.example +196 -0
  5. package/dist/template/.opencode/.template-manifest.json +718 -0
  6. package/dist/template/.opencode/.version +1 -0
  7. package/dist/template/.opencode/AGENTS.md +573 -0
  8. package/dist/template/.opencode/AGENT_ALIGNMENT.md +564 -0
  9. package/dist/template/.opencode/README.md +79 -0
  10. package/dist/template/.opencode/agent/build.md +447 -0
  11. package/dist/template/.opencode/agent/explore.md +114 -0
  12. package/dist/template/.opencode/agent/general.md +201 -0
  13. package/dist/template/.opencode/agent/painter.md +83 -0
  14. package/dist/template/.opencode/agent/plan.md +469 -0
  15. package/dist/template/.opencode/agent/review.md +235 -0
  16. package/dist/template/.opencode/agent/scout.md +142 -0
  17. package/dist/template/.opencode/agent/vision.md +169 -0
  18. package/dist/template/.opencode/command/compound.md +240 -0
  19. package/dist/template/.opencode/command/create.md +298 -0
  20. package/dist/template/.opencode/command/curate.md +299 -0
  21. package/dist/template/.opencode/command/design.md +130 -0
  22. package/dist/template/.opencode/command/explore.md +170 -0
  23. package/dist/template/.opencode/command/handoff.md +149 -0
  24. package/dist/template/.opencode/command/health.md +356 -0
  25. package/dist/template/.opencode/command/init-context.md +297 -0
  26. package/dist/template/.opencode/command/init-user.md +125 -0
  27. package/dist/template/.opencode/command/init.md +115 -0
  28. package/dist/template/.opencode/command/iterate.md +200 -0
  29. package/dist/template/.opencode/command/lfg.md +173 -0
  30. package/dist/template/.opencode/command/plan.md +436 -0
  31. package/dist/template/.opencode/command/pr.md +166 -0
  32. package/dist/template/.opencode/command/research.md +128 -0
  33. package/dist/template/.opencode/command/resume.md +78 -0
  34. package/dist/template/.opencode/command/review-codebase.md +135 -0
  35. package/dist/template/.opencode/command/ship.md +390 -0
  36. package/dist/template/.opencode/command/status.md +126 -0
  37. package/dist/template/.opencode/command/ui-review.md +111 -0
  38. package/dist/template/.opencode/command/ui-slop-check.md +169 -0
  39. package/dist/template/.opencode/command/verify.md +173 -0
  40. package/dist/template/.opencode/context/README.md +29 -0
  41. package/dist/template/.opencode/context/git-context.md +32 -0
  42. package/dist/template/.opencode/dcp-prompts/defaults/README.md +40 -0
  43. package/dist/template/.opencode/dcp-prompts/defaults/compress-message.md +42 -0
  44. package/dist/template/.opencode/dcp-prompts/defaults/compress-range.md +59 -0
  45. package/dist/template/.opencode/dcp-prompts/defaults/context-limit-nudge.md +15 -0
  46. package/dist/template/.opencode/dcp-prompts/defaults/iteration-nudge.md +3 -0
  47. package/dist/template/.opencode/dcp-prompts/defaults/system.md +31 -0
  48. package/dist/template/.opencode/dcp-prompts/defaults/turn-nudge.md +7 -0
  49. package/dist/template/.opencode/dcp-prompts/overrides/compress-message.md +71 -0
  50. package/dist/template/.opencode/dcp.jsonc +115 -0
  51. package/dist/template/.opencode/memory/README.md +89 -0
  52. package/dist/template/.opencode/memory/_templates/design.md +59 -0
  53. package/dist/template/.opencode/memory/_templates/prd.md +203 -0
  54. package/dist/template/.opencode/memory/_templates/project.md +58 -0
  55. package/dist/template/.opencode/memory/_templates/proposal.md +38 -0
  56. package/dist/template/.opencode/memory/_templates/roadmap.md +93 -0
  57. package/dist/template/.opencode/memory/_templates/state.md +89 -0
  58. package/dist/template/.opencode/memory/_templates/tasks.md +198 -0
  59. package/dist/template/.opencode/memory/_templates/tech-stack.md +85 -0
  60. package/dist/template/.opencode/memory/_templates/user.md +26 -0
  61. package/dist/template/.opencode/memory/project/gotchas.md +67 -0
  62. package/dist/template/.opencode/memory/project/project.md +92 -0
  63. package/dist/template/.opencode/memory/project/roadmap.md +142 -0
  64. package/dist/template/.opencode/memory/project/state.md +84 -0
  65. package/dist/template/.opencode/memory/project/tech-stack.md +53 -0
  66. package/dist/template/.opencode/memory/project/user.md +45 -0
  67. package/dist/template/.opencode/memory/research/benchmark-framework.md +162 -0
  68. package/dist/template/.opencode/memory/research/ccpm-analysis.md +334 -0
  69. package/dist/template/.opencode/memory/research/context-management-analysis.md +685 -0
  70. package/dist/template/.opencode/memory/research/effectiveness-audit.md +213 -0
  71. package/dist/template/.opencode/memory/research/opencode-mcp-bug-report.md +129 -0
  72. package/dist/template/.opencode/memory/research/openspec-analysis.md +226 -0
  73. package/dist/template/.opencode/memory/session-context.md +40 -0
  74. package/dist/template/.opencode/opencode.json +1148 -0
  75. package/dist/template/.opencode/opencodex-fast.jsonc +3 -0
  76. package/dist/template/.opencode/package.json +21 -0
  77. package/dist/template/.opencode/plugin/README.md +81 -0
  78. package/dist/template/.opencode/plugin/copilot-auth.ts +1285 -0
  79. package/dist/template/.opencode/plugin/lib/capture.ts +177 -0
  80. package/dist/template/.opencode/plugin/lib/compact.ts +194 -0
  81. package/dist/template/.opencode/plugin/lib/compile.ts +253 -0
  82. package/dist/template/.opencode/plugin/lib/context.ts +198 -0
  83. package/dist/template/.opencode/plugin/lib/curator.ts +234 -0
  84. package/dist/template/.opencode/plugin/lib/db/graph.ts +253 -0
  85. package/dist/template/.opencode/plugin/lib/db/maintenance.ts +312 -0
  86. package/dist/template/.opencode/plugin/lib/db/observations.ts +304 -0
  87. package/dist/template/.opencode/plugin/lib/db/pipeline.ts +520 -0
  88. package/dist/template/.opencode/plugin/lib/db/schema.ts +687 -0
  89. package/dist/template/.opencode/plugin/lib/db/types.ts +284 -0
  90. package/dist/template/.opencode/plugin/lib/distill.ts +376 -0
  91. package/dist/template/.opencode/plugin/lib/index-generator.ts +170 -0
  92. package/dist/template/.opencode/plugin/lib/inject.ts +126 -0
  93. package/dist/template/.opencode/plugin/lib/lint.ts +359 -0
  94. package/dist/template/.opencode/plugin/lib/memory-admin-tools.ts +277 -0
  95. package/dist/template/.opencode/plugin/lib/memory-db.ts +100 -0
  96. package/dist/template/.opencode/plugin/lib/memory-helpers.ts +141 -0
  97. package/dist/template/.opencode/plugin/lib/memory-hooks.ts +399 -0
  98. package/dist/template/.opencode/plugin/lib/memory-tools.ts +535 -0
  99. package/dist/template/.opencode/plugin/lib/notify.ts +89 -0
  100. package/dist/template/.opencode/plugin/lib/operation-log.ts +110 -0
  101. package/dist/template/.opencode/plugin/lib/validate.ts +243 -0
  102. package/dist/template/.opencode/plugin/memory.ts +90 -0
  103. package/dist/template/.opencode/plugin/package.json +7 -0
  104. package/dist/template/.opencode/plugin/prompt-leverage.ts +191 -0
  105. package/dist/template/.opencode/plugin/rtk.ts +43 -0
  106. package/dist/template/.opencode/plugin/sdk/copilot/chat/convert-to-openai-compatible-chat-messages.ts +172 -0
  107. package/dist/template/.opencode/plugin/sdk/copilot/chat/get-response-metadata.ts +15 -0
  108. package/dist/template/.opencode/plugin/sdk/copilot/chat/map-openai-compatible-finish-reason.ts +19 -0
  109. package/dist/template/.opencode/plugin/sdk/copilot/chat/openai-compatible-api-types.ts +72 -0
  110. package/dist/template/.opencode/plugin/sdk/copilot/chat/openai-compatible-chat-language-model.ts +835 -0
  111. package/dist/template/.opencode/plugin/sdk/copilot/chat/openai-compatible-chat-options.ts +30 -0
  112. package/dist/template/.opencode/plugin/sdk/copilot/chat/openai-compatible-metadata-extractor.ts +48 -0
  113. package/dist/template/.opencode/plugin/sdk/copilot/chat/openai-compatible-prepare-tools.ts +92 -0
  114. package/dist/template/.opencode/plugin/sdk/copilot/copilot-provider.ts +101 -0
  115. package/dist/template/.opencode/plugin/sdk/copilot/index.ts +5 -0
  116. package/dist/template/.opencode/plugin/sdk/copilot/openai-compatible-error.ts +30 -0
  117. package/dist/template/.opencode/plugin/sdk/copilot/responses/convert-to-openai-responses-input.ts +335 -0
  118. package/dist/template/.opencode/plugin/sdk/copilot/responses/map-openai-responses-finish-reason.ts +22 -0
  119. package/dist/template/.opencode/plugin/sdk/copilot/responses/openai-config.ts +18 -0
  120. package/dist/template/.opencode/plugin/sdk/copilot/responses/openai-error.ts +22 -0
  121. package/dist/template/.opencode/plugin/sdk/copilot/responses/openai-responses-api-types.ts +214 -0
  122. package/dist/template/.opencode/plugin/sdk/copilot/responses/openai-responses-language-model.ts +1770 -0
  123. package/dist/template/.opencode/plugin/sdk/copilot/responses/openai-responses-prepare-tools.ts +173 -0
  124. package/dist/template/.opencode/plugin/sdk/copilot/responses/openai-responses-settings.ts +1 -0
  125. package/dist/template/.opencode/plugin/sdk/copilot/responses/tool/code-interpreter.ts +87 -0
  126. package/dist/template/.opencode/plugin/sdk/copilot/responses/tool/file-search.ts +127 -0
  127. package/dist/template/.opencode/plugin/sdk/copilot/responses/tool/image-generation.ts +114 -0
  128. package/dist/template/.opencode/plugin/sdk/copilot/responses/tool/local-shell.ts +64 -0
  129. package/dist/template/.opencode/plugin/sdk/copilot/responses/tool/web-search-preview.ts +103 -0
  130. package/dist/template/.opencode/plugin/sdk/copilot/responses/tool/web-search.ts +102 -0
  131. package/dist/template/.opencode/plugin/sessions.ts +457 -0
  132. package/dist/template/.opencode/plugin/skill-mcp.ts +618 -0
  133. package/dist/template/.opencode/plugin/tsconfig.json +16 -0
  134. package/dist/template/.opencode/skill/accessibility-audit/SKILL.md +191 -0
  135. package/dist/template/.opencode/skill/agent-evals/SKILL.md +208 -0
  136. package/dist/template/.opencode/skill/agent-teams/SKILL.md +268 -0
  137. package/dist/template/.opencode/skill/anti-ai-slop/SKILL.md +76 -0
  138. package/dist/template/.opencode/skill/api-and-interface-design/SKILL.md +162 -0
  139. package/dist/template/.opencode/skill/augment-context-engine/SKILL.md +122 -0
  140. package/dist/template/.opencode/skill/augment-context-engine/mcp.json +6 -0
  141. package/dist/template/.opencode/skill/beads/SKILL.md +182 -0
  142. package/dist/template/.opencode/skill/beads/references/BEST_PRACTICES.md +27 -0
  143. package/dist/template/.opencode/skill/beads/references/BOUNDARIES.md +219 -0
  144. package/dist/template/.opencode/skill/beads/references/DEPENDENCIES.md +124 -0
  145. package/dist/template/.opencode/skill/beads/references/EXAMPLES.md +45 -0
  146. package/dist/template/.opencode/skill/beads/references/FILE_CLAIMING.md +101 -0
  147. package/dist/template/.opencode/skill/beads/references/GIT_SYNC.md +25 -0
  148. package/dist/template/.opencode/skill/beads/references/HIERARCHY.md +71 -0
  149. package/dist/template/.opencode/skill/beads/references/MULTI_AGENT.md +40 -0
  150. package/dist/template/.opencode/skill/beads/references/RESUMABILITY.md +177 -0
  151. package/dist/template/.opencode/skill/beads/references/SESSION_PROTOCOL.md +61 -0
  152. package/dist/template/.opencode/skill/beads/references/TASK_CREATION.md +38 -0
  153. package/dist/template/.opencode/skill/beads/references/TROUBLESHOOTING.md +38 -0
  154. package/dist/template/.opencode/skill/beads/references/WORKFLOWS.md +226 -0
  155. package/dist/template/.opencode/skill/brainstorming/SKILL.md +114 -0
  156. package/dist/template/.opencode/skill/brand-asset-protocol/SKILL.md +222 -0
  157. package/dist/template/.opencode/skill/chrome-devtools/SKILL.md +76 -0
  158. package/dist/template/.opencode/skill/chrome-devtools/mcp.json +19 -0
  159. package/dist/template/.opencode/skill/ci-cd-and-automation/SKILL.md +202 -0
  160. package/dist/template/.opencode/skill/cloudflare/SKILL.md +253 -0
  161. package/dist/template/.opencode/skill/cloudflare/references/agents-sdk/README.md +35 -0
  162. package/dist/template/.opencode/skill/cloudflare/references/agents-sdk/api.md +100 -0
  163. package/dist/template/.opencode/skill/cloudflare/references/agents-sdk/configuration.md +99 -0
  164. package/dist/template/.opencode/skill/cloudflare/references/agents-sdk/gotchas.md +59 -0
  165. package/dist/template/.opencode/skill/cloudflare/references/agents-sdk/patterns.md +89 -0
  166. package/dist/template/.opencode/skill/cloudflare/references/ai-gateway/README.md +695 -0
  167. package/dist/template/.opencode/skill/cloudflare/references/ai-search/README.md +14 -0
  168. package/dist/template/.opencode/skill/cloudflare/references/ai-search/api.md +38 -0
  169. package/dist/template/.opencode/skill/cloudflare/references/ai-search/configuration.md +52 -0
  170. package/dist/template/.opencode/skill/cloudflare/references/ai-search/gotchas.md +41 -0
  171. package/dist/template/.opencode/skill/cloudflare/references/ai-search/patterns.md +45 -0
  172. package/dist/template/.opencode/skill/cloudflare/references/analytics-engine/README.md +14 -0
  173. package/dist/template/.opencode/skill/cloudflare/references/analytics-engine/api.md +27 -0
  174. package/dist/template/.opencode/skill/cloudflare/references/analytics-engine/configuration.md +45 -0
  175. package/dist/template/.opencode/skill/cloudflare/references/analytics-engine/gotchas.md +3 -0
  176. package/dist/template/.opencode/skill/cloudflare/references/analytics-engine/patterns.md +36 -0
  177. package/dist/template/.opencode/skill/cloudflare/references/api/README.md +21 -0
  178. package/dist/template/.opencode/skill/cloudflare/references/api/api.md +31 -0
  179. package/dist/template/.opencode/skill/cloudflare/references/api/configuration.md +20 -0
  180. package/dist/template/.opencode/skill/cloudflare/references/api/gotchas.md +28 -0
  181. package/dist/template/.opencode/skill/cloudflare/references/api/patterns.md +47 -0
  182. package/dist/template/.opencode/skill/cloudflare/references/api-shield/README.md +20 -0
  183. package/dist/template/.opencode/skill/cloudflare/references/api-shield/api.md +78 -0
  184. package/dist/template/.opencode/skill/cloudflare/references/api-shield/configuration.md +128 -0
  185. package/dist/template/.opencode/skill/cloudflare/references/api-shield/gotchas.md +51 -0
  186. package/dist/template/.opencode/skill/cloudflare/references/api-shield/patterns.md +145 -0
  187. package/dist/template/.opencode/skill/cloudflare/references/argo-smart-routing/README.md +16 -0
  188. package/dist/template/.opencode/skill/cloudflare/references/argo-smart-routing/api.md +50 -0
  189. package/dist/template/.opencode/skill/cloudflare/references/argo-smart-routing/configuration.md +53 -0
  190. package/dist/template/.opencode/skill/cloudflare/references/argo-smart-routing/gotchas.md +16 -0
  191. package/dist/template/.opencode/skill/cloudflare/references/argo-smart-routing/patterns.md +45 -0
  192. package/dist/template/.opencode/skill/cloudflare/references/bindings/README.md +14 -0
  193. package/dist/template/.opencode/skill/cloudflare/references/bindings/api.md +3 -0
  194. package/dist/template/.opencode/skill/cloudflare/references/bindings/configuration.md +58 -0
  195. package/dist/template/.opencode/skill/cloudflare/references/bindings/gotchas.md +35 -0
  196. package/dist/template/.opencode/skill/cloudflare/references/bindings/patterns.md +37 -0
  197. package/dist/template/.opencode/skill/cloudflare/references/bot-management/README.md +71 -0
  198. package/dist/template/.opencode/skill/cloudflare/references/bot-management/api.md +168 -0
  199. package/dist/template/.opencode/skill/cloudflare/references/bot-management/configuration.md +114 -0
  200. package/dist/template/.opencode/skill/cloudflare/references/bot-management/gotchas.md +99 -0
  201. package/dist/template/.opencode/skill/cloudflare/references/bot-management/patterns.md +125 -0
  202. package/dist/template/.opencode/skill/cloudflare/references/browser-rendering/README.md +16 -0
  203. package/dist/template/.opencode/skill/cloudflare/references/browser-rendering/api.md +54 -0
  204. package/dist/template/.opencode/skill/cloudflare/references/browser-rendering/configuration.md +47 -0
  205. package/dist/template/.opencode/skill/cloudflare/references/browser-rendering/gotchas.md +29 -0
  206. package/dist/template/.opencode/skill/cloudflare/references/browser-rendering/patterns.md +29 -0
  207. package/dist/template/.opencode/skill/cloudflare/references/c3/README.md +264 -0
  208. package/dist/template/.opencode/skill/cloudflare/references/cache-reserve/README.md +93 -0
  209. package/dist/template/.opencode/skill/cloudflare/references/cache-reserve/api.md +176 -0
  210. package/dist/template/.opencode/skill/cloudflare/references/cache-reserve/configuration.md +164 -0
  211. package/dist/template/.opencode/skill/cloudflare/references/cache-reserve/gotchas.md +203 -0
  212. package/dist/template/.opencode/skill/cloudflare/references/cache-reserve/patterns.md +180 -0
  213. package/dist/template/.opencode/skill/cloudflare/references/containers/README.md +16 -0
  214. package/dist/template/.opencode/skill/cloudflare/references/containers/api.md +43 -0
  215. package/dist/template/.opencode/skill/cloudflare/references/containers/configuration.md +56 -0
  216. package/dist/template/.opencode/skill/cloudflare/references/containers/gotchas.md +21 -0
  217. package/dist/template/.opencode/skill/cloudflare/references/containers/patterns.md +40 -0
  218. package/dist/template/.opencode/skill/cloudflare/references/cron-triggers/README.md +85 -0
  219. package/dist/template/.opencode/skill/cloudflare/references/cron-triggers/api.md +198 -0
  220. package/dist/template/.opencode/skill/cloudflare/references/cron-triggers/configuration.md +151 -0
  221. package/dist/template/.opencode/skill/cloudflare/references/cron-triggers/gotchas.md +129 -0
  222. package/dist/template/.opencode/skill/cloudflare/references/cron-triggers/patterns.md +122 -0
  223. package/dist/template/.opencode/skill/cloudflare/references/d1/README.md +92 -0
  224. package/dist/template/.opencode/skill/cloudflare/references/d1/api.md +141 -0
  225. package/dist/template/.opencode/skill/cloudflare/references/d1/configuration.md +127 -0
  226. package/dist/template/.opencode/skill/cloudflare/references/d1/gotchas.md +70 -0
  227. package/dist/template/.opencode/skill/cloudflare/references/d1/patterns.md +144 -0
  228. package/dist/template/.opencode/skill/cloudflare/references/ddos/README.md +34 -0
  229. package/dist/template/.opencode/skill/cloudflare/references/ddos/api.md +136 -0
  230. package/dist/template/.opencode/skill/cloudflare/references/ddos/configuration.md +67 -0
  231. package/dist/template/.opencode/skill/cloudflare/references/ddos/gotchas.md +114 -0
  232. package/dist/template/.opencode/skill/cloudflare/references/ddos/patterns.md +158 -0
  233. package/dist/template/.opencode/skill/cloudflare/references/do-storage/README.md +62 -0
  234. package/dist/template/.opencode/skill/cloudflare/references/do-storage/api.md +89 -0
  235. package/dist/template/.opencode/skill/cloudflare/references/do-storage/configuration.md +116 -0
  236. package/dist/template/.opencode/skill/cloudflare/references/do-storage/gotchas.md +93 -0
  237. package/dist/template/.opencode/skill/cloudflare/references/do-storage/patterns.md +112 -0
  238. package/dist/template/.opencode/skill/cloudflare/references/durable-objects/README.md +125 -0
  239. package/dist/template/.opencode/skill/cloudflare/references/durable-objects/api.md +152 -0
  240. package/dist/template/.opencode/skill/cloudflare/references/durable-objects/configuration.md +148 -0
  241. package/dist/template/.opencode/skill/cloudflare/references/durable-objects/gotchas.md +158 -0
  242. package/dist/template/.opencode/skill/cloudflare/references/durable-objects/patterns.md +255 -0
  243. package/dist/template/.opencode/skill/cloudflare/references/email-routing/README.md +18 -0
  244. package/dist/template/.opencode/skill/cloudflare/references/email-routing/api.md +46 -0
  245. package/dist/template/.opencode/skill/cloudflare/references/email-routing/configuration.md +63 -0
  246. package/dist/template/.opencode/skill/cloudflare/references/email-routing/gotchas.md +16 -0
  247. package/dist/template/.opencode/skill/cloudflare/references/email-routing/patterns.md +46 -0
  248. package/dist/template/.opencode/skill/cloudflare/references/email-workers/README.md +598 -0
  249. package/dist/template/.opencode/skill/cloudflare/references/hyperdrive/README.md +62 -0
  250. package/dist/template/.opencode/skill/cloudflare/references/hyperdrive/api.md +137 -0
  251. package/dist/template/.opencode/skill/cloudflare/references/hyperdrive/configuration.md +133 -0
  252. package/dist/template/.opencode/skill/cloudflare/references/hyperdrive/gotchas.md +184 -0
  253. package/dist/template/.opencode/skill/cloudflare/references/hyperdrive/patterns.md +176 -0
  254. package/dist/template/.opencode/skill/cloudflare/references/images/README.md +14 -0
  255. package/dist/template/.opencode/skill/cloudflare/references/images/api.md +3 -0
  256. package/dist/template/.opencode/skill/cloudflare/references/images/configuration.md +45 -0
  257. package/dist/template/.opencode/skill/cloudflare/references/images/gotchas.md +23 -0
  258. package/dist/template/.opencode/skill/cloudflare/references/images/patterns.md +31 -0
  259. package/dist/template/.opencode/skill/cloudflare/references/kv/README.md +60 -0
  260. package/dist/template/.opencode/skill/cloudflare/references/kv/api.md +114 -0
  261. package/dist/template/.opencode/skill/cloudflare/references/kv/configuration.md +92 -0
  262. package/dist/template/.opencode/skill/cloudflare/references/kv/gotchas.md +117 -0
  263. package/dist/template/.opencode/skill/cloudflare/references/kv/patterns.md +139 -0
  264. package/dist/template/.opencode/skill/cloudflare/references/miniflare/README.md +64 -0
  265. package/dist/template/.opencode/skill/cloudflare/references/miniflare/api.md +144 -0
  266. package/dist/template/.opencode/skill/cloudflare/references/miniflare/configuration.md +203 -0
  267. package/dist/template/.opencode/skill/cloudflare/references/miniflare/gotchas.md +187 -0
  268. package/dist/template/.opencode/skill/cloudflare/references/miniflare/patterns.md +211 -0
  269. package/dist/template/.opencode/skill/cloudflare/references/network-interconnect/README.md +60 -0
  270. package/dist/template/.opencode/skill/cloudflare/references/network-interconnect/api.md +240 -0
  271. package/dist/template/.opencode/skill/cloudflare/references/network-interconnect/configuration.md +127 -0
  272. package/dist/template/.opencode/skill/cloudflare/references/network-interconnect/gotchas.md +171 -0
  273. package/dist/template/.opencode/skill/cloudflare/references/network-interconnect/patterns.md +171 -0
  274. package/dist/template/.opencode/skill/cloudflare/references/observability/README.md +18 -0
  275. package/dist/template/.opencode/skill/cloudflare/references/observability/api.md +51 -0
  276. package/dist/template/.opencode/skill/cloudflare/references/observability/configuration.md +60 -0
  277. package/dist/template/.opencode/skill/cloudflare/references/observability/gotchas.md +36 -0
  278. package/dist/template/.opencode/skill/cloudflare/references/observability/patterns.md +42 -0
  279. package/dist/template/.opencode/skill/cloudflare/references/pages/README.md +76 -0
  280. package/dist/template/.opencode/skill/cloudflare/references/pages/api.md +200 -0
  281. package/dist/template/.opencode/skill/cloudflare/references/pages/configuration.md +228 -0
  282. package/dist/template/.opencode/skill/cloudflare/references/pages/gotchas.md +161 -0
  283. package/dist/template/.opencode/skill/cloudflare/references/pages/patterns.md +145 -0
  284. package/dist/template/.opencode/skill/cloudflare/references/pages-functions/README.md +57 -0
  285. package/dist/template/.opencode/skill/cloudflare/references/pages-functions/api.md +201 -0
  286. package/dist/template/.opencode/skill/cloudflare/references/pages-functions/configuration.md +159 -0
  287. package/dist/template/.opencode/skill/cloudflare/references/pages-functions/gotchas.md +151 -0
  288. package/dist/template/.opencode/skill/cloudflare/references/pages-functions/patterns.md +190 -0
  289. package/dist/template/.opencode/skill/cloudflare/references/pipelines/README.md +664 -0
  290. package/dist/template/.opencode/skill/cloudflare/references/pulumi/README.md +107 -0
  291. package/dist/template/.opencode/skill/cloudflare/references/pulumi/api.md +194 -0
  292. package/dist/template/.opencode/skill/cloudflare/references/pulumi/configuration.md +216 -0
  293. package/dist/template/.opencode/skill/cloudflare/references/pulumi/gotchas.md +223 -0
  294. package/dist/template/.opencode/skill/cloudflare/references/pulumi/patterns.md +139 -0
  295. package/dist/template/.opencode/skill/cloudflare/references/queues/README.md +69 -0
  296. package/dist/template/.opencode/skill/cloudflare/references/queues/api.md +138 -0
  297. package/dist/template/.opencode/skill/cloudflare/references/queues/configuration.md +125 -0
  298. package/dist/template/.opencode/skill/cloudflare/references/queues/gotchas.md +112 -0
  299. package/dist/template/.opencode/skill/cloudflare/references/queues/patterns.md +155 -0
  300. package/dist/template/.opencode/skill/cloudflare/references/r2/README.md +61 -0
  301. package/dist/template/.opencode/skill/cloudflare/references/r2/api.md +127 -0
  302. package/dist/template/.opencode/skill/cloudflare/references/r2/configuration.md +76 -0
  303. package/dist/template/.opencode/skill/cloudflare/references/r2/gotchas.md +94 -0
  304. package/dist/template/.opencode/skill/cloudflare/references/r2/patterns.md +127 -0
  305. package/dist/template/.opencode/skill/cloudflare/references/r2-data-catalog/README.md +18 -0
  306. package/dist/template/.opencode/skill/cloudflare/references/r2-data-catalog/api.md +29 -0
  307. package/dist/template/.opencode/skill/cloudflare/references/r2-data-catalog/configuration.md +39 -0
  308. package/dist/template/.opencode/skill/cloudflare/references/r2-data-catalog/gotchas.md +20 -0
  309. package/dist/template/.opencode/skill/cloudflare/references/r2-data-catalog/patterns.md +46 -0
  310. package/dist/template/.opencode/skill/cloudflare/references/r2-sql/README.md +512 -0
  311. package/dist/template/.opencode/skill/cloudflare/references/realtime-sfu/README.md +21 -0
  312. package/dist/template/.opencode/skill/cloudflare/references/realtime-sfu/api.md +135 -0
  313. package/dist/template/.opencode/skill/cloudflare/references/realtime-sfu/configuration.md +63 -0
  314. package/dist/template/.opencode/skill/cloudflare/references/realtime-sfu/gotchas.md +75 -0
  315. package/dist/template/.opencode/skill/cloudflare/references/realtime-sfu/patterns.md +102 -0
  316. package/dist/template/.opencode/skill/cloudflare/references/realtimekit/README.md +81 -0
  317. package/dist/template/.opencode/skill/cloudflare/references/realtimekit/api.md +164 -0
  318. package/dist/template/.opencode/skill/cloudflare/references/realtimekit/configuration.md +147 -0
  319. package/dist/template/.opencode/skill/cloudflare/references/realtimekit/gotchas.md +172 -0
  320. package/dist/template/.opencode/skill/cloudflare/references/realtimekit/patterns.md +155 -0
  321. package/dist/template/.opencode/skill/cloudflare/references/sandbox/README.md +90 -0
  322. package/dist/template/.opencode/skill/cloudflare/references/sandbox/api.md +178 -0
  323. package/dist/template/.opencode/skill/cloudflare/references/sandbox/configuration.md +131 -0
  324. package/dist/template/.opencode/skill/cloudflare/references/sandbox/gotchas.md +156 -0
  325. package/dist/template/.opencode/skill/cloudflare/references/sandbox/patterns.md +203 -0
  326. package/dist/template/.opencode/skill/cloudflare/references/secrets-store/README.md +58 -0
  327. package/dist/template/.opencode/skill/cloudflare/references/secrets-store/api.md +182 -0
  328. package/dist/template/.opencode/skill/cloudflare/references/secrets-store/configuration.md +140 -0
  329. package/dist/template/.opencode/skill/cloudflare/references/secrets-store/gotchas.md +129 -0
  330. package/dist/template/.opencode/skill/cloudflare/references/secrets-store/patterns.md +218 -0
  331. package/dist/template/.opencode/skill/cloudflare/references/smart-placement/README.md +91 -0
  332. package/dist/template/.opencode/skill/cloudflare/references/smart-placement/api.md +139 -0
  333. package/dist/template/.opencode/skill/cloudflare/references/smart-placement/configuration.md +129 -0
  334. package/dist/template/.opencode/skill/cloudflare/references/smart-placement/gotchas.md +87 -0
  335. package/dist/template/.opencode/skill/cloudflare/references/smart-placement/patterns.md +135 -0
  336. package/dist/template/.opencode/skill/cloudflare/references/snippets/README.md +15 -0
  337. package/dist/template/.opencode/skill/cloudflare/references/snippets/api.md +47 -0
  338. package/dist/template/.opencode/skill/cloudflare/references/snippets/configuration.md +33 -0
  339. package/dist/template/.opencode/skill/cloudflare/references/snippets/gotchas.md +21 -0
  340. package/dist/template/.opencode/skill/cloudflare/references/snippets/patterns.md +34 -0
  341. package/dist/template/.opencode/skill/cloudflare/references/spectrum/README.md +16 -0
  342. package/dist/template/.opencode/skill/cloudflare/references/spectrum/api.md +24 -0
  343. package/dist/template/.opencode/skill/cloudflare/references/spectrum/configuration.md +43 -0
  344. package/dist/template/.opencode/skill/cloudflare/references/spectrum/gotchas.md +42 -0
  345. package/dist/template/.opencode/skill/cloudflare/references/spectrum/patterns.md +40 -0
  346. package/dist/template/.opencode/skill/cloudflare/references/static-assets/README.md +14 -0
  347. package/dist/template/.opencode/skill/cloudflare/references/static-assets/api.md +3 -0
  348. package/dist/template/.opencode/skill/cloudflare/references/static-assets/configuration.md +47 -0
  349. package/dist/template/.opencode/skill/cloudflare/references/static-assets/gotchas.md +44 -0
  350. package/dist/template/.opencode/skill/cloudflare/references/static-assets/patterns.md +42 -0
  351. package/dist/template/.opencode/skill/cloudflare/references/stream/README.md +103 -0
  352. package/dist/template/.opencode/skill/cloudflare/references/stream/api.md +204 -0
  353. package/dist/template/.opencode/skill/cloudflare/references/stream/configuration.md +127 -0
  354. package/dist/template/.opencode/skill/cloudflare/references/stream/gotchas.md +131 -0
  355. package/dist/template/.opencode/skill/cloudflare/references/stream/patterns.md +152 -0
  356. package/dist/template/.opencode/skill/cloudflare/references/tail-workers/README.md +640 -0
  357. package/dist/template/.opencode/skill/cloudflare/references/terraform/README.md +76 -0
  358. package/dist/template/.opencode/skill/cloudflare/references/terraform/api.md +159 -0
  359. package/dist/template/.opencode/skill/cloudflare/references/terraform/configuration.md +156 -0
  360. package/dist/template/.opencode/skill/cloudflare/references/terraform/gotchas.md +207 -0
  361. package/dist/template/.opencode/skill/cloudflare/references/terraform/patterns.md +135 -0
  362. package/dist/template/.opencode/skill/cloudflare/references/tunnel/README.md +82 -0
  363. package/dist/template/.opencode/skill/cloudflare/references/tunnel/api.md +105 -0
  364. package/dist/template/.opencode/skill/cloudflare/references/tunnel/configuration.md +113 -0
  365. package/dist/template/.opencode/skill/cloudflare/references/tunnel/gotchas.md +115 -0
  366. package/dist/template/.opencode/skill/cloudflare/references/tunnel/patterns.md +157 -0
  367. package/dist/template/.opencode/skill/cloudflare/references/turn/README.md +699 -0
  368. package/dist/template/.opencode/skill/cloudflare/references/turnstile/README.md +14 -0
  369. package/dist/template/.opencode/skill/cloudflare/references/turnstile/api.md +3 -0
  370. package/dist/template/.opencode/skill/cloudflare/references/turnstile/configuration.md +19 -0
  371. package/dist/template/.opencode/skill/cloudflare/references/turnstile/gotchas.md +27 -0
  372. package/dist/template/.opencode/skill/cloudflare/references/turnstile/patterns.md +41 -0
  373. package/dist/template/.opencode/skill/cloudflare/references/vectorize/README.md +682 -0
  374. package/dist/template/.opencode/skill/cloudflare/references/waf/README.md +14 -0
  375. package/dist/template/.opencode/skill/cloudflare/references/waf/api.md +3 -0
  376. package/dist/template/.opencode/skill/cloudflare/references/waf/configuration.md +44 -0
  377. package/dist/template/.opencode/skill/cloudflare/references/waf/gotchas.md +24 -0
  378. package/dist/template/.opencode/skill/cloudflare/references/waf/patterns.md +29 -0
  379. package/dist/template/.opencode/skill/cloudflare/references/web-analytics/README.md +19 -0
  380. package/dist/template/.opencode/skill/cloudflare/references/web-analytics/api.md +52 -0
  381. package/dist/template/.opencode/skill/cloudflare/references/web-analytics/configuration.md +31 -0
  382. package/dist/template/.opencode/skill/cloudflare/references/web-analytics/gotchas.md +28 -0
  383. package/dist/template/.opencode/skill/cloudflare/references/web-analytics/patterns.md +52 -0
  384. package/dist/template/.opencode/skill/cloudflare/references/workerd/README.md +47 -0
  385. package/dist/template/.opencode/skill/cloudflare/references/workerd/api.md +199 -0
  386. package/dist/template/.opencode/skill/cloudflare/references/workerd/configuration.md +185 -0
  387. package/dist/template/.opencode/skill/cloudflare/references/workerd/gotchas.md +203 -0
  388. package/dist/template/.opencode/skill/cloudflare/references/workerd/patterns.md +216 -0
  389. package/dist/template/.opencode/skill/cloudflare/references/workers/README.md +96 -0
  390. package/dist/template/.opencode/skill/cloudflare/references/workers/api.md +137 -0
  391. package/dist/template/.opencode/skill/cloudflare/references/workers/configuration.md +147 -0
  392. package/dist/template/.opencode/skill/cloudflare/references/workers/gotchas.md +99 -0
  393. package/dist/template/.opencode/skill/cloudflare/references/workers/patterns.md +149 -0
  394. package/dist/template/.opencode/skill/cloudflare/references/workers-ai/README.md +116 -0
  395. package/dist/template/.opencode/skill/cloudflare/references/workers-for-platforms/README.md +48 -0
  396. package/dist/template/.opencode/skill/cloudflare/references/workers-for-platforms/api.md +169 -0
  397. package/dist/template/.opencode/skill/cloudflare/references/workers-for-platforms/configuration.md +136 -0
  398. package/dist/template/.opencode/skill/cloudflare/references/workers-for-platforms/gotchas.md +130 -0
  399. package/dist/template/.opencode/skill/cloudflare/references/workers-for-platforms/patterns.md +170 -0
  400. package/dist/template/.opencode/skill/cloudflare/references/workers-playground/README.md +16 -0
  401. package/dist/template/.opencode/skill/cloudflare/references/workers-playground/api.md +20 -0
  402. package/dist/template/.opencode/skill/cloudflare/references/workers-playground/configuration.md +3 -0
  403. package/dist/template/.opencode/skill/cloudflare/references/workers-playground/gotchas.md +35 -0
  404. package/dist/template/.opencode/skill/cloudflare/references/workers-playground/patterns.md +42 -0
  405. package/dist/template/.opencode/skill/cloudflare/references/workers-vpc/README.md +579 -0
  406. package/dist/template/.opencode/skill/cloudflare/references/workflows/README.md +62 -0
  407. package/dist/template/.opencode/skill/cloudflare/references/workflows/api.md +125 -0
  408. package/dist/template/.opencode/skill/cloudflare/references/workflows/configuration.md +177 -0
  409. package/dist/template/.opencode/skill/cloudflare/references/workflows/gotchas.md +136 -0
  410. package/dist/template/.opencode/skill/cloudflare/references/workflows/patterns.md +132 -0
  411. package/dist/template/.opencode/skill/cloudflare/references/wrangler/README.md +90 -0
  412. package/dist/template/.opencode/skill/cloudflare/references/wrangler/api.md +140 -0
  413. package/dist/template/.opencode/skill/cloudflare/references/wrangler/configuration.md +128 -0
  414. package/dist/template/.opencode/skill/cloudflare/references/wrangler/gotchas.md +93 -0
  415. package/dist/template/.opencode/skill/cloudflare/references/wrangler/patterns.md +150 -0
  416. package/dist/template/.opencode/skill/cloudflare/references/zaraz/README.md +360 -0
  417. package/dist/template/.opencode/skill/code-search-patterns/SKILL.md +253 -0
  418. package/dist/template/.opencode/skill/code-simplification/SKILL.md +211 -0
  419. package/dist/template/.opencode/skill/condition-based-waiting/SKILL.md +135 -0
  420. package/dist/template/.opencode/skill/condition-based-waiting/example.ts +158 -0
  421. package/dist/template/.opencode/skill/context-condensation/SKILL.md +149 -0
  422. package/dist/template/.opencode/skill/context-engineering/SKILL.md +176 -0
  423. package/dist/template/.opencode/skill/context-initialization/SKILL.md +69 -0
  424. package/dist/template/.opencode/skill/context-management/SKILL.md +390 -0
  425. package/dist/template/.opencode/skill/core-data-expert/SKILL.md +93 -0
  426. package/dist/template/.opencode/skill/core-data-expert/references/batch-operations.md +543 -0
  427. package/dist/template/.opencode/skill/core-data-expert/references/cloudkit-integration.md +259 -0
  428. package/dist/template/.opencode/skill/core-data-expert/references/concurrency.md +522 -0
  429. package/dist/template/.opencode/skill/core-data-expert/references/fetch-requests.md +643 -0
  430. package/dist/template/.opencode/skill/core-data-expert/references/glossary.md +233 -0
  431. package/dist/template/.opencode/skill/core-data-expert/references/migration.md +393 -0
  432. package/dist/template/.opencode/skill/core-data-expert/references/model-configuration.md +597 -0
  433. package/dist/template/.opencode/skill/core-data-expert/references/performance.md +300 -0
  434. package/dist/template/.opencode/skill/core-data-expert/references/persistent-history.md +553 -0
  435. package/dist/template/.opencode/skill/core-data-expert/references/project-audit.md +60 -0
  436. package/dist/template/.opencode/skill/core-data-expert/references/saving.md +574 -0
  437. package/dist/template/.opencode/skill/core-data-expert/references/stack-setup.md +625 -0
  438. package/dist/template/.opencode/skill/core-data-expert/references/testing.md +300 -0
  439. package/dist/template/.opencode/skill/core-data-expert/references/threading.md +589 -0
  440. package/dist/template/.opencode/skill/deep-research/SKILL.md +384 -0
  441. package/dist/template/.opencode/skill/defense-in-depth/SKILL.md +176 -0
  442. package/dist/template/.opencode/skill/deprecation-and-migration/SKILL.md +189 -0
  443. package/dist/template/.opencode/skill/design-direction-advisor/SKILL.md +139 -0
  444. package/dist/template/.opencode/skill/design-system-audit/SKILL.md +153 -0
  445. package/dist/template/.opencode/skill/design-taste-frontend/SKILL.md +238 -0
  446. package/dist/template/.opencode/skill/development-lifecycle/SKILL.md +320 -0
  447. package/dist/template/.opencode/skill/dispatching-parallel-agents/SKILL.md +191 -0
  448. package/dist/template/.opencode/skill/documentation-and-adrs/SKILL.md +220 -0
  449. package/dist/template/.opencode/skill/executing-plans/SKILL.md +247 -0
  450. package/dist/template/.opencode/skill/figma/SKILL.md +224 -0
  451. package/dist/template/.opencode/skill/figma-go/SKILL.md +65 -0
  452. package/dist/template/.opencode/skill/finishing-a-development-branch/SKILL.md +357 -0
  453. package/dist/template/.opencode/skill/frontend-design/SKILL.md +235 -0
  454. package/dist/template/.opencode/skill/frontend-design/references/animation/motion-advanced.md +224 -0
  455. package/dist/template/.opencode/skill/frontend-design/references/animation/motion-core.md +181 -0
  456. package/dist/template/.opencode/skill/frontend-design/references/canvas/execution.md +90 -0
  457. package/dist/template/.opencode/skill/frontend-design/references/canvas/philosophy.md +94 -0
  458. package/dist/template/.opencode/skill/frontend-design/references/design/color-system.md +111 -0
  459. package/dist/template/.opencode/skill/frontend-design/references/design/interaction.md +149 -0
  460. package/dist/template/.opencode/skill/frontend-design/references/design/typography-rules.md +106 -0
  461. package/dist/template/.opencode/skill/frontend-design/references/design/ux-writing.md +99 -0
  462. package/dist/template/.opencode/skill/frontend-design/references/shadcn/accessibility.md +132 -0
  463. package/dist/template/.opencode/skill/frontend-design/references/shadcn/core-components.md +153 -0
  464. package/dist/template/.opencode/skill/frontend-design/references/shadcn/form-components.md +158 -0
  465. package/dist/template/.opencode/skill/frontend-design/references/shadcn/setup.md +69 -0
  466. package/dist/template/.opencode/skill/frontend-design/references/shadcn/theming.md +152 -0
  467. package/dist/template/.opencode/skill/frontend-design/references/tailwind/responsive.md +112 -0
  468. package/dist/template/.opencode/skill/frontend-design/references/tailwind/utilities-layout.md +134 -0
  469. package/dist/template/.opencode/skill/frontend-design/references/tailwind/utilities-styling.md +165 -0
  470. package/dist/template/.opencode/skill/frontend-design/references/tailwind/v4-config.md +147 -0
  471. package/dist/template/.opencode/skill/frontend-design/references/tailwind/v4-features.md +128 -0
  472. package/dist/template/.opencode/skill/full-output-enforcement/SKILL.md +62 -0
  473. package/dist/template/.opencode/skill/gemini-large-context/SKILL.md +216 -0
  474. package/dist/template/.opencode/skill/gh-address-comments/SKILL.md +29 -0
  475. package/dist/template/.opencode/skill/gh-address-comments/scripts/fetch_comments.py +237 -0
  476. package/dist/template/.opencode/skill/gh-fix-ci/SKILL.md +38 -0
  477. package/dist/template/.opencode/skill/gh-fix-ci/scripts/inspect_pr_checks.py +509 -0
  478. package/dist/template/.opencode/skill/hi-fi-prototype-html/SKILL.md +253 -0
  479. package/dist/template/.opencode/skill/high-end-visual-design/SKILL.md +111 -0
  480. package/dist/template/.opencode/skill/html-deck-export/SKILL.md +189 -0
  481. package/dist/template/.opencode/skill/incremental-implementation/SKILL.md +191 -0
  482. package/dist/template/.opencode/skill/index-knowledge/SKILL.md +413 -0
  483. package/dist/template/.opencode/skill/industrial-brutalist-ui/SKILL.md +105 -0
  484. package/dist/template/.opencode/skill/jira/SKILL.md +283 -0
  485. package/dist/template/.opencode/skill/jira/mcp.json +6 -0
  486. package/dist/template/.opencode/skill/memory-grounding/SKILL.md +68 -0
  487. package/dist/template/.opencode/skill/memory-system/SKILL.md +148 -0
  488. package/dist/template/.opencode/skill/minimalist-ui/SKILL.md +98 -0
  489. package/dist/template/.opencode/skill/mockup-to-code/SKILL.md +184 -0
  490. package/dist/template/.opencode/skill/opensrc/SKILL.md +284 -0
  491. package/dist/template/.opencode/skill/opensrc/references/architecture.md +176 -0
  492. package/dist/template/.opencode/skill/opensrc/references/cli-usage.md +176 -0
  493. package/dist/template/.opencode/skill/opensrc/references/registry-support.md +137 -0
  494. package/dist/template/.opencode/skill/pdf-extract/SKILL.md +438 -0
  495. package/dist/template/.opencode/skill/performance-optimization/SKILL.md +236 -0
  496. package/dist/template/.opencode/skill/playwright/SKILL.md +381 -0
  497. package/dist/template/.opencode/skill/playwright/mcp.json +16 -0
  498. package/dist/template/.opencode/skill/playwright/references/agent-browser-cli.md +405 -0
  499. package/dist/template/.opencode/skill/playwriter/SKILL.md +158 -0
  500. package/dist/template/.opencode/skill/polar/SKILL.md +102 -0
  501. package/dist/template/.opencode/skill/portless/SKILL.md +109 -0
  502. package/dist/template/.opencode/skill/prd/SKILL.md +146 -0
  503. package/dist/template/.opencode/skill/prd-task/SKILL.md +182 -0
  504. package/dist/template/.opencode/skill/prd-task/references/prd-schema.json +124 -0
  505. package/dist/template/.opencode/skill/prompt-leverage/SKILL.md +90 -0
  506. package/dist/template/.opencode/skill/prompt-leverage/references/framework.md +91 -0
  507. package/dist/template/.opencode/skill/prompt-leverage/scripts/augment_prompt.py +157 -0
  508. package/dist/template/.opencode/skill/react-best-practices/AGENTS.md +2410 -0
  509. package/dist/template/.opencode/skill/react-best-practices/README.md +123 -0
  510. package/dist/template/.opencode/skill/react-best-practices/SKILL.md +133 -0
  511. package/dist/template/.opencode/skill/react-best-practices/metadata.json +15 -0
  512. package/dist/template/.opencode/skill/react-best-practices/rules/_sections.md +46 -0
  513. package/dist/template/.opencode/skill/react-best-practices/rules/_template.md +28 -0
  514. package/dist/template/.opencode/skill/react-best-practices/rules/advanced-event-handler-refs.md +55 -0
  515. package/dist/template/.opencode/skill/react-best-practices/rules/advanced-use-latest.md +49 -0
  516. package/dist/template/.opencode/skill/react-best-practices/rules/async-api-routes.md +38 -0
  517. package/dist/template/.opencode/skill/react-best-practices/rules/async-defer-await.md +80 -0
  518. package/dist/template/.opencode/skill/react-best-practices/rules/async-dependencies.md +36 -0
  519. package/dist/template/.opencode/skill/react-best-practices/rules/async-parallel.md +28 -0
  520. package/dist/template/.opencode/skill/react-best-practices/rules/async-suspense-boundaries.md +99 -0
  521. package/dist/template/.opencode/skill/react-best-practices/rules/bundle-barrel-imports.md +59 -0
  522. package/dist/template/.opencode/skill/react-best-practices/rules/bundle-conditional.md +31 -0
  523. package/dist/template/.opencode/skill/react-best-practices/rules/bundle-defer-third-party.md +49 -0
  524. package/dist/template/.opencode/skill/react-best-practices/rules/bundle-dynamic-imports.md +35 -0
  525. package/dist/template/.opencode/skill/react-best-practices/rules/bundle-preload.md +50 -0
  526. package/dist/template/.opencode/skill/react-best-practices/rules/client-event-listeners.md +74 -0
  527. package/dist/template/.opencode/skill/react-best-practices/rules/client-localstorage-schema.md +71 -0
  528. package/dist/template/.opencode/skill/react-best-practices/rules/client-passive-event-listeners.md +48 -0
  529. package/dist/template/.opencode/skill/react-best-practices/rules/client-swr-dedup.md +56 -0
  530. package/dist/template/.opencode/skill/react-best-practices/rules/js-batch-dom-css.md +82 -0
  531. package/dist/template/.opencode/skill/react-best-practices/rules/js-cache-function-results.md +80 -0
  532. package/dist/template/.opencode/skill/react-best-practices/rules/js-cache-property-access.md +28 -0
  533. package/dist/template/.opencode/skill/react-best-practices/rules/js-cache-storage.md +70 -0
  534. package/dist/template/.opencode/skill/react-best-practices/rules/js-combine-iterations.md +32 -0
  535. package/dist/template/.opencode/skill/react-best-practices/rules/js-early-exit.md +50 -0
  536. package/dist/template/.opencode/skill/react-best-practices/rules/js-hoist-regexp.md +45 -0
  537. package/dist/template/.opencode/skill/react-best-practices/rules/js-index-maps.md +37 -0
  538. package/dist/template/.opencode/skill/react-best-practices/rules/js-length-check-first.md +49 -0
  539. package/dist/template/.opencode/skill/react-best-practices/rules/js-min-max-loop.md +82 -0
  540. package/dist/template/.opencode/skill/react-best-practices/rules/js-set-map-lookups.md +24 -0
  541. package/dist/template/.opencode/skill/react-best-practices/rules/js-tosorted-immutable.md +57 -0
  542. package/dist/template/.opencode/skill/react-best-practices/rules/rendering-activity.md +26 -0
  543. package/dist/template/.opencode/skill/react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
  544. package/dist/template/.opencode/skill/react-best-practices/rules/rendering-conditional-render.md +40 -0
  545. package/dist/template/.opencode/skill/react-best-practices/rules/rendering-content-visibility.md +38 -0
  546. package/dist/template/.opencode/skill/react-best-practices/rules/rendering-hoist-jsx.md +46 -0
  547. package/dist/template/.opencode/skill/react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
  548. package/dist/template/.opencode/skill/react-best-practices/rules/rendering-svg-precision.md +28 -0
  549. package/dist/template/.opencode/skill/react-best-practices/rules/rerender-defer-reads.md +39 -0
  550. package/dist/template/.opencode/skill/react-best-practices/rules/rerender-dependencies.md +45 -0
  551. package/dist/template/.opencode/skill/react-best-practices/rules/rerender-derived-state.md +29 -0
  552. package/dist/template/.opencode/skill/react-best-practices/rules/rerender-functional-setstate.md +74 -0
  553. package/dist/template/.opencode/skill/react-best-practices/rules/rerender-lazy-state-init.md +58 -0
  554. package/dist/template/.opencode/skill/react-best-practices/rules/rerender-memo.md +44 -0
  555. package/dist/template/.opencode/skill/react-best-practices/rules/rerender-transitions.md +40 -0
  556. package/dist/template/.opencode/skill/react-best-practices/rules/server-after-nonblocking.md +73 -0
  557. package/dist/template/.opencode/skill/react-best-practices/rules/server-cache-lru.md +41 -0
  558. package/dist/template/.opencode/skill/react-best-practices/rules/server-cache-react.md +76 -0
  559. package/dist/template/.opencode/skill/react-best-practices/rules/server-parallel-fetching.md +83 -0
  560. package/dist/template/.opencode/skill/react-best-practices/rules/server-serialization.md +38 -0
  561. package/dist/template/.opencode/skill/receiving-code-review/SKILL.md +263 -0
  562. package/dist/template/.opencode/skill/reconcile/SKILL.md +183 -0
  563. package/dist/template/.opencode/skill/redesign-existing-projects/SKILL.md +191 -0
  564. package/dist/template/.opencode/skill/reflection-checkpoints/SKILL.md +183 -0
  565. package/dist/template/.opencode/skill/requesting-code-review/SKILL.md +443 -0
  566. package/dist/template/.opencode/skill/requesting-code-review/references/specialist-profiles.md +108 -0
  567. package/dist/template/.opencode/skill/requesting-code-review/review.md +160 -0
  568. package/dist/template/.opencode/skill/resend/SKILL.md +177 -0
  569. package/dist/template/.opencode/skill/resend/references/react-email.md +287 -0
  570. package/dist/template/.opencode/skill/resend/references/receive-email.md +248 -0
  571. package/dist/template/.opencode/skill/resend/references/send-email.md +318 -0
  572. package/dist/template/.opencode/skill/root-cause-tracing/SKILL.md +192 -0
  573. package/dist/template/.opencode/skill/root-cause-tracing/find-polluter.sh +63 -0
  574. package/dist/template/.opencode/skill/rtk-command-compression/SKILL.md +134 -0
  575. package/dist/template/.opencode/skill/screenshot/SKILL.md +48 -0
  576. package/dist/template/.opencode/skill/screenshot/scripts/ensure_macos_permissions.sh +54 -0
  577. package/dist/template/.opencode/skill/screenshot/scripts/macos_display_info.swift +22 -0
  578. package/dist/template/.opencode/skill/screenshot/scripts/macos_permissions.swift +40 -0
  579. package/dist/template/.opencode/skill/screenshot/scripts/macos_window_info.swift +126 -0
  580. package/dist/template/.opencode/skill/screenshot/scripts/take_screenshot.ps1 +163 -0
  581. package/dist/template/.opencode/skill/screenshot/scripts/take_screenshot.py +585 -0
  582. package/dist/template/.opencode/skill/security-and-hardening/SKILL.md +296 -0
  583. package/dist/template/.opencode/skill/security-threat-model/SKILL.md +36 -0
  584. package/dist/template/.opencode/skill/security-threat-model/references/prompt-template.md +255 -0
  585. package/dist/template/.opencode/skill/security-threat-model/references/security-controls-and-assets.md +32 -0
  586. package/dist/template/.opencode/skill/sharing-skills/SKILL.md +214 -0
  587. package/dist/template/.opencode/skill/skill-creator/SKILL.md +181 -0
  588. package/dist/template/.opencode/skill/skill-installer/SKILL.md +58 -0
  589. package/dist/template/.opencode/skill/skill-installer/scripts/github_utils.py +21 -0
  590. package/dist/template/.opencode/skill/skill-installer/scripts/install-skill-from-github.py +313 -0
  591. package/dist/template/.opencode/skill/skill-installer/scripts/list-skills.py +106 -0
  592. package/dist/template/.opencode/skill/structured-edit/SKILL.md +191 -0
  593. package/dist/template/.opencode/skill/subagent-driven-development/SKILL.md +237 -0
  594. package/dist/template/.opencode/skill/supabase/SKILL.md +130 -0
  595. package/dist/template/.opencode/skill/supabase/mcp.json +27 -0
  596. package/dist/template/.opencode/skill/supabase-postgres-best-practices/AGENTS.md +1490 -0
  597. package/dist/template/.opencode/skill/supabase-postgres-best-practices/SKILL.md +65 -0
  598. package/dist/template/.opencode/skill/supabase-postgres-best-practices/rules/advanced-full-text-search.md +55 -0
  599. package/dist/template/.opencode/skill/supabase-postgres-best-practices/rules/advanced-jsonb-indexing.md +49 -0
  600. package/dist/template/.opencode/skill/supabase-postgres-best-practices/rules/conn-idle-timeout.md +46 -0
  601. package/dist/template/.opencode/skill/supabase-postgres-best-practices/rules/conn-limits.md +44 -0
  602. package/dist/template/.opencode/skill/supabase-postgres-best-practices/rules/conn-pooling.md +41 -0
  603. package/dist/template/.opencode/skill/supabase-postgres-best-practices/rules/conn-prepared-statements.md +46 -0
  604. package/dist/template/.opencode/skill/supabase-postgres-best-practices/rules/data-batch-inserts.md +54 -0
  605. package/dist/template/.opencode/skill/supabase-postgres-best-practices/rules/data-n-plus-one.md +53 -0
  606. package/dist/template/.opencode/skill/supabase-postgres-best-practices/rules/data-pagination.md +50 -0
  607. package/dist/template/.opencode/skill/supabase-postgres-best-practices/rules/data-upsert.md +50 -0
  608. package/dist/template/.opencode/skill/supabase-postgres-best-practices/rules/lock-advisory.md +56 -0
  609. package/dist/template/.opencode/skill/supabase-postgres-best-practices/rules/lock-deadlock-prevention.md +68 -0
  610. package/dist/template/.opencode/skill/supabase-postgres-best-practices/rules/lock-short-transactions.md +50 -0
  611. package/dist/template/.opencode/skill/supabase-postgres-best-practices/rules/lock-skip-locked.md +54 -0
  612. package/dist/template/.opencode/skill/supabase-postgres-best-practices/rules/monitor-explain-analyze.md +45 -0
  613. package/dist/template/.opencode/skill/supabase-postgres-best-practices/rules/monitor-pg-stat-statements.md +55 -0
  614. package/dist/template/.opencode/skill/supabase-postgres-best-practices/rules/monitor-vacuum-analyze.md +55 -0
  615. package/dist/template/.opencode/skill/supabase-postgres-best-practices/rules/query-composite-indexes.md +44 -0
  616. package/dist/template/.opencode/skill/supabase-postgres-best-practices/rules/query-covering-indexes.md +40 -0
  617. package/dist/template/.opencode/skill/supabase-postgres-best-practices/rules/query-index-types.md +45 -0
  618. package/dist/template/.opencode/skill/supabase-postgres-best-practices/rules/query-missing-indexes.md +43 -0
  619. package/dist/template/.opencode/skill/supabase-postgres-best-practices/rules/query-partial-indexes.md +45 -0
  620. package/dist/template/.opencode/skill/supabase-postgres-best-practices/rules/schema-data-types.md +46 -0
  621. package/dist/template/.opencode/skill/supabase-postgres-best-practices/rules/schema-foreign-key-indexes.md +59 -0
  622. package/dist/template/.opencode/skill/supabase-postgres-best-practices/rules/schema-lowercase-identifiers.md +55 -0
  623. package/dist/template/.opencode/skill/supabase-postgres-best-practices/rules/schema-partitioning.md +55 -0
  624. package/dist/template/.opencode/skill/supabase-postgres-best-practices/rules/schema-primary-keys.md +61 -0
  625. package/dist/template/.opencode/skill/supabase-postgres-best-practices/rules/security-privileges.md +54 -0
  626. package/dist/template/.opencode/skill/supabase-postgres-best-practices/rules/security-rls-basics.md +50 -0
  627. package/dist/template/.opencode/skill/supabase-postgres-best-practices/rules/security-rls-performance.md +57 -0
  628. package/dist/template/.opencode/skill/swarm-coordination/SKILL.md +244 -0
  629. package/dist/template/.opencode/skill/swarm-coordination/references/architecture.md +39 -0
  630. package/dist/template/.opencode/skill/swarm-coordination/references/delegation-worker-protocol.md +145 -0
  631. package/dist/template/.opencode/skill/swarm-coordination/references/dependency-graph.md +50 -0
  632. package/dist/template/.opencode/skill/swarm-coordination/references/drift-check.md +90 -0
  633. package/dist/template/.opencode/skill/swarm-coordination/references/integration-beads.md +20 -0
  634. package/dist/template/.opencode/skill/swarm-coordination/references/launch-flow.md +186 -0
  635. package/dist/template/.opencode/skill/swarm-coordination/references/reconciler.md +172 -0
  636. package/dist/template/.opencode/skill/swarm-coordination/references/tier-enforcement.md +78 -0
  637. package/dist/template/.opencode/skill/swarm-coordination/references/tmux-integration.md +134 -0
  638. package/dist/template/.opencode/skill/swift-concurrency/SKILL.md +266 -0
  639. package/dist/template/.opencode/skill/swift-concurrency/references/actors.md +640 -0
  640. package/dist/template/.opencode/skill/swift-concurrency/references/async-algorithms.md +822 -0
  641. package/dist/template/.opencode/skill/swift-concurrency/references/async-await-basics.md +249 -0
  642. package/dist/template/.opencode/skill/swift-concurrency/references/async-sequences.md +670 -0
  643. package/dist/template/.opencode/skill/swift-concurrency/references/core-data.md +533 -0
  644. package/dist/template/.opencode/skill/swift-concurrency/references/glossary.md +128 -0
  645. package/dist/template/.opencode/skill/swift-concurrency/references/linting.md +142 -0
  646. package/dist/template/.opencode/skill/swift-concurrency/references/memory-management.md +542 -0
  647. package/dist/template/.opencode/skill/swift-concurrency/references/migration.md +1076 -0
  648. package/dist/template/.opencode/skill/swift-concurrency/references/performance.md +574 -0
  649. package/dist/template/.opencode/skill/swift-concurrency/references/sendable.md +578 -0
  650. package/dist/template/.opencode/skill/swift-concurrency/references/tasks.md +604 -0
  651. package/dist/template/.opencode/skill/swift-concurrency/references/testing.md +565 -0
  652. package/dist/template/.opencode/skill/swift-concurrency/references/threading.md +452 -0
  653. package/dist/template/.opencode/skill/swiftui-expert-skill/SKILL.md +329 -0
  654. package/dist/template/.opencode/skill/swiftui-expert-skill/references/animation-advanced.md +351 -0
  655. package/dist/template/.opencode/skill/swiftui-expert-skill/references/animation-basics.md +284 -0
  656. package/dist/template/.opencode/skill/swiftui-expert-skill/references/animation-transitions.md +326 -0
  657. package/dist/template/.opencode/skill/swiftui-expert-skill/references/image-optimization.md +286 -0
  658. package/dist/template/.opencode/skill/swiftui-expert-skill/references/layout-best-practices.md +312 -0
  659. package/dist/template/.opencode/skill/swiftui-expert-skill/references/liquid-glass.md +377 -0
  660. package/dist/template/.opencode/skill/swiftui-expert-skill/references/list-patterns.md +153 -0
  661. package/dist/template/.opencode/skill/swiftui-expert-skill/references/modern-apis.md +400 -0
  662. package/dist/template/.opencode/skill/swiftui-expert-skill/references/performance-patterns.md +377 -0
  663. package/dist/template/.opencode/skill/swiftui-expert-skill/references/scroll-patterns.md +305 -0
  664. package/dist/template/.opencode/skill/swiftui-expert-skill/references/sheet-navigation-patterns.md +292 -0
  665. package/dist/template/.opencode/skill/swiftui-expert-skill/references/state-management.md +447 -0
  666. package/dist/template/.opencode/skill/swiftui-expert-skill/references/text-formatting.md +285 -0
  667. package/dist/template/.opencode/skill/swiftui-expert-skill/references/view-structure.md +276 -0
  668. package/dist/template/.opencode/skill/systematic-debugging/SKILL.md +402 -0
  669. package/dist/template/.opencode/skill/terse-output-mode/SKILL.md +95 -0
  670. package/dist/template/.opencode/skill/test-driven-development/SKILL.md +403 -0
  671. package/dist/template/.opencode/skill/testing-anti-patterns/SKILL.md +333 -0
  672. package/dist/template/.opencode/skill/think-in-code/SKILL.md +136 -0
  673. package/dist/template/.opencode/skill/using-git-worktrees/SKILL.md +259 -0
  674. package/dist/template/.opencode/skill/ux-quality-gates/SKILL.md +137 -0
  675. package/dist/template/.opencode/skill/v0/SKILL.md +158 -0
  676. package/dist/template/.opencode/skill/v1-run/SKILL.md +175 -0
  677. package/dist/template/.opencode/skill/v1-run/mcp.json +6 -0
  678. package/dist/template/.opencode/skill/vercel-deploy-claimable/SKILL.md +124 -0
  679. package/dist/template/.opencode/skill/vercel-deploy-claimable/scripts/deploy.sh +249 -0
  680. package/dist/template/.opencode/skill/verification-before-completion/SKILL.md +357 -0
  681. package/dist/template/.opencode/skill/verification-before-completion/references/VERIFICATION_PROTOCOL.md +171 -0
  682. package/dist/template/.opencode/skill/verification-gates/SKILL.md +63 -0
  683. package/dist/template/.opencode/skill/visual-analysis/SKILL.md +154 -0
  684. package/dist/template/.opencode/skill/web-design-guidelines/SKILL.md +46 -0
  685. package/dist/template/.opencode/skill/webclaw/SKILL.md +155 -0
  686. package/dist/template/.opencode/skill/workspace-setup/SKILL.md +76 -0
  687. package/dist/template/.opencode/skill/writing-plans/SKILL.md +320 -0
  688. package/dist/template/.opencode/skill/writing-skills/SKILL.md +324 -0
  689. package/dist/template/.opencode/skill/writing-skills/anthropic-best-practices.md +1173 -0
  690. package/dist/template/.opencode/skill/writing-skills/graphviz-conventions.dot +172 -0
  691. package/dist/template/.opencode/skill/writing-skills/persuasion-principles.md +220 -0
  692. package/dist/template/.opencode/skill/writing-skills/references/anti-patterns.md +25 -0
  693. package/dist/template/.opencode/skill/writing-skills/references/claude-search-optimization.md +140 -0
  694. package/dist/template/.opencode/skill/writing-skills/references/discovery-workflow.md +11 -0
  695. package/dist/template/.opencode/skill/writing-skills/references/file-organization.md +32 -0
  696. package/dist/template/.opencode/skill/writing-skills/references/flowcharts-and-examples.md +57 -0
  697. package/dist/template/.opencode/skill/writing-skills/references/rationalization-hardening.md +75 -0
  698. package/dist/template/.opencode/skill/writing-skills/references/testing-methodology.md +397 -0
  699. package/dist/template/.opencode/skill/writing-skills/references/testing-skill-types.md +52 -0
  700. package/dist/template/.opencode/tool/context7.ts +191 -0
  701. package/dist/template/.opencode/tool/grepsearch.ts +143 -0
  702. package/dist/template/.opencode/tsconfig.json +21 -0
  703. package/dist/template/.opencode/tui.json +15 -0
  704. package/package.json +78 -0
@@ -0,0 +1,1770 @@
1
+ import {
2
+ APICallError,
3
+ type JSONValue,
4
+ type LanguageModelV3,
5
+ type LanguageModelV3CallOptions,
6
+ type LanguageModelV3Content,
7
+ type LanguageModelV3ProviderTool,
8
+ type LanguageModelV3StreamPart,
9
+ type SharedV3ProviderMetadata,
10
+ type SharedV3Warning,
11
+ } from "@ai-sdk/provider"
12
+ import {
13
+ combineHeaders,
14
+ createEventSourceResponseHandler,
15
+ createJsonResponseHandler,
16
+ generateId,
17
+ parseProviderOptions,
18
+ type ParseResult,
19
+ postJsonToApi,
20
+ } from "@ai-sdk/provider-utils"
21
+ import { z } from "zod/v4"
22
+ import type { OpenAIConfig } from "./openai-config.js"
23
+ import { openaiFailedResponseHandler } from "./openai-error.js"
24
+ import { codeInterpreterInputSchema, codeInterpreterOutputSchema } from "./tool/code-interpreter.js"
25
+ import { fileSearchOutputSchema } from "./tool/file-search.js"
26
+ import { imageGenerationOutputSchema } from "./tool/image-generation.js"
27
+ import { convertToOpenAIResponsesInput } from "./convert-to-openai-responses-input.js"
28
+ import { mapOpenAIResponseFinishReason } from "./map-openai-responses-finish-reason.js"
29
+ import type { OpenAIResponsesIncludeOptions, OpenAIResponsesIncludeValue } from "./openai-responses-api-types.js"
30
+ import { prepareResponsesTools } from "./openai-responses-prepare-tools.js"
31
+ import type { OpenAIResponsesModelId } from "./openai-responses-settings.js"
32
+ import { localShellInputSchema } from "./tool/local-shell.js"
33
+
34
+ const webSearchCallItem = z.object({
35
+ type: z.literal("web_search_call"),
36
+ id: z.string(),
37
+ status: z.string(),
38
+ action: z
39
+ .discriminatedUnion("type", [
40
+ z.object({
41
+ type: z.literal("search"),
42
+ query: z.string().nullish(),
43
+ }),
44
+ z.object({
45
+ type: z.literal("open_page"),
46
+ url: z.string(),
47
+ }),
48
+ z.object({
49
+ type: z.literal("find"),
50
+ url: z.string(),
51
+ pattern: z.string(),
52
+ }),
53
+ ])
54
+ .nullish(),
55
+ })
56
+
57
+ const fileSearchCallItem = z.object({
58
+ type: z.literal("file_search_call"),
59
+ id: z.string(),
60
+ queries: z.array(z.string()),
61
+ results: z
62
+ .array(
63
+ z.object({
64
+ attributes: z.record(z.string(), z.unknown()),
65
+ file_id: z.string(),
66
+ filename: z.string(),
67
+ score: z.number(),
68
+ text: z.string(),
69
+ }),
70
+ )
71
+ .nullish(),
72
+ })
73
+
74
+ const codeInterpreterCallItem = z.object({
75
+ type: z.literal("code_interpreter_call"),
76
+ id: z.string(),
77
+ code: z.string().nullable(),
78
+ container_id: z.string(),
79
+ outputs: z
80
+ .array(
81
+ z.discriminatedUnion("type", [
82
+ z.object({ type: z.literal("logs"), logs: z.string() }),
83
+ z.object({ type: z.literal("image"), url: z.string() }),
84
+ ]),
85
+ )
86
+ .nullable(),
87
+ })
88
+
89
+ const localShellCallItem = z.object({
90
+ type: z.literal("local_shell_call"),
91
+ id: z.string(),
92
+ call_id: z.string(),
93
+ action: z.object({
94
+ type: z.literal("exec"),
95
+ command: z.array(z.string()),
96
+ timeout_ms: z.number().optional(),
97
+ user: z.string().optional(),
98
+ working_directory: z.string().optional(),
99
+ env: z.record(z.string(), z.string()).optional(),
100
+ }),
101
+ })
102
+
103
+ const imageGenerationCallItem = z.object({
104
+ type: z.literal("image_generation_call"),
105
+ id: z.string(),
106
+ result: z.string(),
107
+ })
108
+
109
+ /**
110
+ * `top_logprobs` request body argument can be set to an integer between
111
+ * 0 and 20 specifying the number of most likely tokens to return at each
112
+ * token position, each with an associated log probability.
113
+ *
114
+ * @see https://platform.openai.com/docs/api-reference/responses/create#responses_create-top_logprobs
115
+ */
116
+ const TOP_LOGPROBS_MAX = 20
117
+
118
+ const LOGPROBS_SCHEMA = z.array(
119
+ z.object({
120
+ token: z.string(),
121
+ logprob: z.number(),
122
+ top_logprobs: z.array(
123
+ z.object({
124
+ token: z.string(),
125
+ logprob: z.number(),
126
+ }),
127
+ ),
128
+ }),
129
+ )
130
+
131
+ export class OpenAIResponsesLanguageModel implements LanguageModelV3 {
132
+ readonly specificationVersion = "v3"
133
+
134
+ readonly modelId: OpenAIResponsesModelId
135
+
136
+ private readonly config: OpenAIConfig
137
+
138
+ constructor(modelId: OpenAIResponsesModelId, config: OpenAIConfig) {
139
+ this.modelId = modelId
140
+ this.config = config
141
+ }
142
+
143
+ readonly supportedUrls: Record<string, RegExp[]> = {
144
+ "image/*": [/^https?:\/\/.*$/],
145
+ "application/pdf": [/^https?:\/\/.*$/],
146
+ }
147
+
148
+ get provider(): string {
149
+ return this.config.provider
150
+ }
151
+
152
+ private async getArgs({
153
+ maxOutputTokens,
154
+ temperature,
155
+ stopSequences,
156
+ topP,
157
+ topK,
158
+ presencePenalty,
159
+ frequencyPenalty,
160
+ seed,
161
+ prompt,
162
+ providerOptions,
163
+ tools,
164
+ toolChoice,
165
+ responseFormat,
166
+ }: LanguageModelV3CallOptions) {
167
+ const warnings: SharedV3Warning[] = []
168
+ const modelConfig = getResponsesModelConfig(this.modelId)
169
+
170
+ if (topK != null) {
171
+ warnings.push({ type: "unsupported", feature: "topK" })
172
+ }
173
+
174
+ if (seed != null) {
175
+ warnings.push({ type: "unsupported", feature: "seed" })
176
+ }
177
+
178
+ if (presencePenalty != null) {
179
+ warnings.push({
180
+ type: "unsupported",
181
+ feature: "presencePenalty",
182
+ })
183
+ }
184
+
185
+ if (frequencyPenalty != null) {
186
+ warnings.push({
187
+ type: "unsupported",
188
+ feature: "frequencyPenalty",
189
+ })
190
+ }
191
+
192
+ if (stopSequences != null) {
193
+ warnings.push({ type: "unsupported", feature: "stopSequences" })
194
+ }
195
+
196
+ const openaiOptions = await parseProviderOptions({
197
+ provider: "copilot",
198
+ providerOptions,
199
+ schema: openaiResponsesProviderOptionsSchema,
200
+ })
201
+
202
+ const { input, warnings: inputWarnings } = await convertToOpenAIResponsesInput({
203
+ prompt,
204
+ systemMessageMode: modelConfig.systemMessageMode,
205
+ fileIdPrefixes: this.config.fileIdPrefixes,
206
+ store: openaiOptions?.store ?? true,
207
+ hasLocalShellTool: hasOpenAITool("openai.local_shell"),
208
+ })
209
+
210
+ warnings.push(...inputWarnings)
211
+
212
+ const strictJsonSchema = openaiOptions?.strictJsonSchema ?? false
213
+
214
+ let include: OpenAIResponsesIncludeOptions = openaiOptions?.include
215
+
216
+ function addInclude(key: OpenAIResponsesIncludeValue) {
217
+ include = include != null ? [...include, key] : [key]
218
+ }
219
+
220
+ function hasOpenAITool(id: string) {
221
+ return tools?.find((tool) => tool.type === "provider" && tool.id === id) != null
222
+ }
223
+
224
+ // when logprobs are requested, automatically include them:
225
+ const topLogprobs =
226
+ typeof openaiOptions?.logprobs === "number"
227
+ ? openaiOptions?.logprobs
228
+ : openaiOptions?.logprobs === true
229
+ ? TOP_LOGPROBS_MAX
230
+ : undefined
231
+
232
+ if (topLogprobs) {
233
+ addInclude("message.output_text.logprobs")
234
+ }
235
+
236
+ // when a web search tool is present, automatically include the sources:
237
+ const webSearchToolName = (
238
+ tools?.find(
239
+ (tool) =>
240
+ tool.type === "provider" && (tool.id === "openai.web_search" || tool.id === "openai.web_search_preview"),
241
+ ) as LanguageModelV3ProviderTool | undefined
242
+ )?.name
243
+
244
+ if (webSearchToolName) {
245
+ addInclude("web_search_call.action.sources")
246
+ }
247
+
248
+ // when a code interpreter tool is present, automatically include the outputs:
249
+ if (hasOpenAITool("openai.code_interpreter")) {
250
+ addInclude("code_interpreter_call.outputs")
251
+ }
252
+
253
+ const baseArgs = {
254
+ model: this.modelId,
255
+ input,
256
+ temperature,
257
+ top_p: topP,
258
+ max_output_tokens: maxOutputTokens,
259
+
260
+ ...((responseFormat?.type === "json" || openaiOptions?.textVerbosity) && {
261
+ text: {
262
+ ...(responseFormat?.type === "json" && {
263
+ format:
264
+ responseFormat.schema != null
265
+ ? {
266
+ type: "json_schema",
267
+ strict: strictJsonSchema,
268
+ name: responseFormat.name ?? "response",
269
+ description: responseFormat.description,
270
+ schema: responseFormat.schema,
271
+ }
272
+ : { type: "json_object" },
273
+ }),
274
+ ...(openaiOptions?.textVerbosity && {
275
+ verbosity: openaiOptions.textVerbosity,
276
+ }),
277
+ },
278
+ }),
279
+
280
+ // provider options:
281
+ max_tool_calls: openaiOptions?.maxToolCalls,
282
+ metadata: openaiOptions?.metadata,
283
+ parallel_tool_calls: openaiOptions?.parallelToolCalls,
284
+ previous_response_id: openaiOptions?.previousResponseId,
285
+ store: openaiOptions?.store,
286
+ user: openaiOptions?.user,
287
+ instructions: openaiOptions?.instructions,
288
+ service_tier: openaiOptions?.serviceTier,
289
+ include,
290
+ prompt_cache_key: openaiOptions?.promptCacheKey,
291
+ safety_identifier: openaiOptions?.safetyIdentifier,
292
+ top_logprobs: topLogprobs,
293
+
294
+ // model-specific settings:
295
+ ...(modelConfig.isReasoningModel &&
296
+ (openaiOptions?.reasoningEffort != null || openaiOptions?.reasoningSummary != null) && {
297
+ reasoning: {
298
+ ...(openaiOptions?.reasoningEffort != null && {
299
+ effort: openaiOptions.reasoningEffort,
300
+ }),
301
+ ...(openaiOptions?.reasoningSummary != null && {
302
+ summary: openaiOptions.reasoningSummary,
303
+ }),
304
+ },
305
+ }),
306
+ ...(modelConfig.requiredAutoTruncation && {
307
+ truncation: "auto",
308
+ }),
309
+ }
310
+
311
+ if (modelConfig.isReasoningModel) {
312
+ // remove unsupported settings for reasoning models
313
+ // see https://platform.openai.com/docs/guides/reasoning#limitations
314
+ if (baseArgs.temperature != null) {
315
+ baseArgs.temperature = undefined
316
+ warnings.push({
317
+ type: "unsupported",
318
+ feature: "temperature",
319
+ details: "temperature is not supported for reasoning models",
320
+ })
321
+ }
322
+
323
+ if (baseArgs.top_p != null) {
324
+ baseArgs.top_p = undefined
325
+ warnings.push({
326
+ type: "unsupported",
327
+ feature: "topP",
328
+ details: "topP is not supported for reasoning models",
329
+ })
330
+ }
331
+ } else {
332
+ if (openaiOptions?.reasoningEffort != null) {
333
+ warnings.push({
334
+ type: "unsupported",
335
+ feature: "reasoningEffort",
336
+ details: "reasoningEffort is not supported for non-reasoning models",
337
+ })
338
+ }
339
+
340
+ if (openaiOptions?.reasoningSummary != null) {
341
+ warnings.push({
342
+ type: "unsupported",
343
+ feature: "reasoningSummary",
344
+ details: "reasoningSummary is not supported for non-reasoning models",
345
+ })
346
+ }
347
+ }
348
+
349
+ // Validate flex processing support
350
+ if (openaiOptions?.serviceTier === "flex" && !modelConfig.supportsFlexProcessing) {
351
+ warnings.push({
352
+ type: "unsupported",
353
+ feature: "serviceTier",
354
+ details: "flex processing is only available for o3, o4-mini, and gpt-5 models",
355
+ })
356
+ // Remove from args if not supported
357
+ delete (baseArgs as any).service_tier
358
+ }
359
+
360
+ // Validate priority processing support
361
+ if (openaiOptions?.serviceTier === "priority" && !modelConfig.supportsPriorityProcessing) {
362
+ warnings.push({
363
+ type: "unsupported",
364
+ feature: "serviceTier",
365
+ details:
366
+ "priority processing is only available for supported models (gpt-4, gpt-5, gpt-5-mini, o3, o4-mini) and requires Enterprise access. gpt-5-nano is not supported",
367
+ })
368
+ // Remove from args if not supported
369
+ delete (baseArgs as any).service_tier
370
+ }
371
+
372
+ const {
373
+ tools: openaiTools,
374
+ toolChoice: openaiToolChoice,
375
+ toolWarnings,
376
+ } = prepareResponsesTools({
377
+ tools,
378
+ toolChoice,
379
+ strictJsonSchema,
380
+ })
381
+
382
+ return {
383
+ webSearchToolName,
384
+ args: {
385
+ ...baseArgs,
386
+ tools: openaiTools,
387
+ tool_choice: openaiToolChoice,
388
+ },
389
+ warnings: [...warnings, ...toolWarnings],
390
+ }
391
+ }
392
+
393
+ async doGenerate(options: LanguageModelV3CallOptions) {
394
+ const { args: body, warnings, webSearchToolName } = await this.getArgs(options)
395
+ const url = this.config.url({
396
+ path: "/responses",
397
+ modelId: this.modelId,
398
+ })
399
+
400
+ const {
401
+ responseHeaders,
402
+ value: response,
403
+ rawValue: rawResponse,
404
+ } = await postJsonToApi({
405
+ url,
406
+ headers: combineHeaders(this.config.headers(), options.headers),
407
+ body,
408
+ failedResponseHandler: openaiFailedResponseHandler,
409
+ successfulResponseHandler: createJsonResponseHandler(
410
+ z.object({
411
+ id: z.string(),
412
+ created_at: z.number(),
413
+ error: z
414
+ .object({
415
+ code: z.string(),
416
+ message: z.string(),
417
+ })
418
+ .nullish(),
419
+ model: z.string(),
420
+ output: z.array(
421
+ z.discriminatedUnion("type", [
422
+ z.object({
423
+ type: z.literal("message"),
424
+ role: z.literal("assistant"),
425
+ id: z.string(),
426
+ content: z.array(
427
+ z.object({
428
+ type: z.literal("output_text"),
429
+ text: z.string(),
430
+ logprobs: LOGPROBS_SCHEMA.nullish(),
431
+ annotations: z.array(
432
+ z.discriminatedUnion("type", [
433
+ z.object({
434
+ type: z.literal("url_citation"),
435
+ start_index: z.number(),
436
+ end_index: z.number(),
437
+ url: z.string(),
438
+ title: z.string(),
439
+ }),
440
+ z.object({
441
+ type: z.literal("file_citation"),
442
+ file_id: z.string(),
443
+ filename: z.string().nullish(),
444
+ index: z.number().nullish(),
445
+ start_index: z.number().nullish(),
446
+ end_index: z.number().nullish(),
447
+ quote: z.string().nullish(),
448
+ }),
449
+ z.object({
450
+ type: z.literal("container_file_citation"),
451
+ }),
452
+ ]),
453
+ ),
454
+ }),
455
+ ),
456
+ }),
457
+ webSearchCallItem,
458
+ fileSearchCallItem,
459
+ codeInterpreterCallItem,
460
+ imageGenerationCallItem,
461
+ localShellCallItem,
462
+ z.object({
463
+ type: z.literal("function_call"),
464
+ call_id: z.string(),
465
+ name: z.string(),
466
+ arguments: z.string(),
467
+ id: z.string(),
468
+ }),
469
+ z.object({
470
+ type: z.literal("computer_call"),
471
+ id: z.string(),
472
+ status: z.string().optional(),
473
+ }),
474
+ z.object({
475
+ type: z.literal("reasoning"),
476
+ id: z.string(),
477
+ encrypted_content: z.string().nullish(),
478
+ summary: z.array(
479
+ z.object({
480
+ type: z.literal("summary_text"),
481
+ text: z.string(),
482
+ }),
483
+ ),
484
+ }),
485
+ ]),
486
+ ),
487
+ service_tier: z.string().nullish(),
488
+ incomplete_details: z.object({ reason: z.string() }).nullish(),
489
+ usage: usageSchema,
490
+ }),
491
+ ),
492
+ abortSignal: options.abortSignal,
493
+ fetch: this.config.fetch,
494
+ })
495
+
496
+ if (response.error) {
497
+ throw new APICallError({
498
+ message: response.error.message,
499
+ url,
500
+ requestBodyValues: body,
501
+ statusCode: 400,
502
+ responseHeaders,
503
+ responseBody: rawResponse as string,
504
+ isRetryable: false,
505
+ })
506
+ }
507
+
508
+ const content: Array<LanguageModelV3Content> = []
509
+ const logprobs: Array<z.infer<typeof LOGPROBS_SCHEMA>> = []
510
+
511
+ // flag that checks if there have been client-side tool calls (not executed by openai)
512
+ let hasFunctionCall = false
513
+
514
+ // map response content to content array
515
+ for (const part of response.output) {
516
+ switch (part.type) {
517
+ case "reasoning": {
518
+ // when there are no summary parts, we need to add an empty reasoning part:
519
+ if (part.summary.length === 0) {
520
+ part.summary.push({ type: "summary_text", text: "" })
521
+ }
522
+
523
+ for (const summary of part.summary) {
524
+ content.push({
525
+ type: "reasoning" as const,
526
+ text: summary.text,
527
+ providerMetadata: {
528
+ openai: {
529
+ itemId: part.id,
530
+ reasoningEncryptedContent: part.encrypted_content ?? null,
531
+ },
532
+ },
533
+ })
534
+ }
535
+ break
536
+ }
537
+
538
+ case "image_generation_call": {
539
+ content.push({
540
+ type: "tool-call",
541
+ toolCallId: part.id,
542
+ toolName: "image_generation",
543
+ input: "{}",
544
+ providerExecuted: true,
545
+ })
546
+
547
+ content.push({
548
+ type: "tool-result",
549
+ toolCallId: part.id,
550
+ toolName: "image_generation",
551
+ result: {
552
+ result: part.result,
553
+ } satisfies z.infer<typeof imageGenerationOutputSchema>,
554
+ })
555
+
556
+ break
557
+ }
558
+
559
+ case "local_shell_call": {
560
+ content.push({
561
+ type: "tool-call",
562
+ toolCallId: part.call_id,
563
+ toolName: "local_shell",
564
+ input: JSON.stringify({ action: part.action } satisfies z.infer<typeof localShellInputSchema>),
565
+ providerMetadata: {
566
+ openai: {
567
+ itemId: part.id,
568
+ },
569
+ },
570
+ })
571
+
572
+ break
573
+ }
574
+
575
+ case "message": {
576
+ for (const contentPart of part.content) {
577
+ if (options.providerOptions?.openai?.logprobs && contentPart.logprobs) {
578
+ logprobs.push(contentPart.logprobs)
579
+ }
580
+
581
+ content.push({
582
+ type: "text",
583
+ text: contentPart.text,
584
+ providerMetadata: {
585
+ openai: {
586
+ itemId: part.id,
587
+ },
588
+ },
589
+ })
590
+
591
+ for (const annotation of contentPart.annotations) {
592
+ if (annotation.type === "url_citation") {
593
+ content.push({
594
+ type: "source",
595
+ sourceType: "url",
596
+ id: this.config.generateId?.() ?? generateId(),
597
+ url: annotation.url,
598
+ title: annotation.title,
599
+ })
600
+ } else if (annotation.type === "file_citation") {
601
+ content.push({
602
+ type: "source",
603
+ sourceType: "document",
604
+ id: this.config.generateId?.() ?? generateId(),
605
+ mediaType: "text/plain",
606
+ title: annotation.quote ?? annotation.filename ?? "Document",
607
+ filename: annotation.filename ?? annotation.file_id,
608
+ })
609
+ }
610
+ }
611
+ }
612
+
613
+ break
614
+ }
615
+
616
+ case "function_call": {
617
+ hasFunctionCall = true
618
+
619
+ content.push({
620
+ type: "tool-call",
621
+ toolCallId: part.call_id,
622
+ toolName: part.name,
623
+ input: part.arguments,
624
+ providerMetadata: {
625
+ openai: {
626
+ itemId: part.id,
627
+ },
628
+ },
629
+ })
630
+ break
631
+ }
632
+
633
+ case "web_search_call": {
634
+ content.push({
635
+ type: "tool-call",
636
+ toolCallId: part.id,
637
+ toolName: webSearchToolName ?? "web_search",
638
+ input: JSON.stringify({ action: part.action }),
639
+ providerExecuted: true,
640
+ })
641
+
642
+ content.push({
643
+ type: "tool-result",
644
+ toolCallId: part.id,
645
+ toolName: webSearchToolName ?? "web_search",
646
+ result: { status: part.status },
647
+ })
648
+
649
+ break
650
+ }
651
+
652
+ case "computer_call": {
653
+ content.push({
654
+ type: "tool-call",
655
+ toolCallId: part.id,
656
+ toolName: "computer_use",
657
+ input: "",
658
+ providerExecuted: true,
659
+ })
660
+
661
+ content.push({
662
+ type: "tool-result",
663
+ toolCallId: part.id,
664
+ toolName: "computer_use",
665
+ result: {
666
+ type: "computer_use_tool_result",
667
+ status: part.status || "completed",
668
+ },
669
+ })
670
+ break
671
+ }
672
+
673
+ case "file_search_call": {
674
+ content.push({
675
+ type: "tool-call",
676
+ toolCallId: part.id,
677
+ toolName: "file_search",
678
+ input: "{}",
679
+ providerExecuted: true,
680
+ })
681
+
682
+ content.push({
683
+ type: "tool-result",
684
+ toolCallId: part.id,
685
+ toolName: "file_search",
686
+ result: {
687
+ queries: part.queries,
688
+ results:
689
+ part.results?.map((result) => ({
690
+ attributes: result.attributes as Record<string, JSONValue>,
691
+ fileId: result.file_id,
692
+ filename: result.filename,
693
+ score: result.score,
694
+ text: result.text,
695
+ })) ?? null,
696
+ } satisfies z.infer<typeof fileSearchOutputSchema>,
697
+ })
698
+ break
699
+ }
700
+
701
+ case "code_interpreter_call": {
702
+ content.push({
703
+ type: "tool-call",
704
+ toolCallId: part.id,
705
+ toolName: "code_interpreter",
706
+ input: JSON.stringify({
707
+ code: part.code,
708
+ containerId: part.container_id,
709
+ } satisfies z.infer<typeof codeInterpreterInputSchema>),
710
+ providerExecuted: true,
711
+ })
712
+
713
+ content.push({
714
+ type: "tool-result",
715
+ toolCallId: part.id,
716
+ toolName: "code_interpreter",
717
+ result: {
718
+ outputs: part.outputs,
719
+ } satisfies z.infer<typeof codeInterpreterOutputSchema>,
720
+ })
721
+ break
722
+ }
723
+ }
724
+ }
725
+
726
+ const providerMetadata: SharedV3ProviderMetadata = {
727
+ openai: { responseId: response.id },
728
+ }
729
+
730
+ if (logprobs.length > 0) {
731
+ providerMetadata.openai.logprobs = logprobs
732
+ }
733
+
734
+ if (typeof response.service_tier === "string") {
735
+ providerMetadata.openai.serviceTier = response.service_tier
736
+ }
737
+
738
+ return {
739
+ content,
740
+ finishReason: {
741
+ unified: mapOpenAIResponseFinishReason({
742
+ finishReason: response.incomplete_details?.reason,
743
+ hasFunctionCall,
744
+ }),
745
+ raw: response.incomplete_details?.reason,
746
+ },
747
+ usage: {
748
+ inputTokens: {
749
+ total: response.usage.input_tokens,
750
+ noCache:
751
+ response.usage.input_tokens_details?.cached_tokens != null
752
+ ? response.usage.input_tokens - response.usage.input_tokens_details.cached_tokens
753
+ : undefined,
754
+ cacheRead: response.usage.input_tokens_details?.cached_tokens ?? undefined,
755
+ cacheWrite: undefined,
756
+ },
757
+ outputTokens: {
758
+ total: response.usage.output_tokens,
759
+ text: undefined,
760
+ reasoning: response.usage.output_tokens_details?.reasoning_tokens ?? undefined,
761
+ },
762
+ raw: response.usage,
763
+ },
764
+ request: { body },
765
+ response: {
766
+ id: response.id,
767
+ timestamp: new Date(response.created_at * 1000),
768
+ modelId: response.model,
769
+ headers: responseHeaders,
770
+ body: rawResponse,
771
+ },
772
+ providerMetadata,
773
+ warnings,
774
+ }
775
+ }
776
+
777
+ async doStream(options: LanguageModelV3CallOptions) {
778
+ const { args: body, warnings, webSearchToolName } = await this.getArgs(options)
779
+
780
+ const { responseHeaders, value: response } = await postJsonToApi({
781
+ url: this.config.url({
782
+ path: "/responses",
783
+ modelId: this.modelId,
784
+ }),
785
+ headers: combineHeaders(this.config.headers(), options.headers),
786
+ body: {
787
+ ...body,
788
+ stream: true,
789
+ },
790
+ failedResponseHandler: openaiFailedResponseHandler,
791
+ successfulResponseHandler: createEventSourceResponseHandler(openaiResponsesChunkSchema),
792
+ abortSignal: options.abortSignal,
793
+ fetch: this.config.fetch,
794
+ })
795
+
796
+ // oxlint-disable-next-line no-this-alias -- needed for closure scope inside generator
797
+ const self = this
798
+
799
+ let finishReason: {
800
+ unified: ReturnType<typeof mapOpenAIResponseFinishReason>
801
+ raw: string | undefined
802
+ } = {
803
+ unified: "other",
804
+ raw: undefined,
805
+ }
806
+ const usage: {
807
+ inputTokens: number | undefined
808
+ outputTokens: number | undefined
809
+ totalTokens: number | undefined
810
+ reasoningTokens: number | undefined
811
+ cachedInputTokens: number | undefined
812
+ } = {
813
+ inputTokens: undefined,
814
+ outputTokens: undefined,
815
+ totalTokens: undefined,
816
+ reasoningTokens: undefined,
817
+ cachedInputTokens: undefined,
818
+ }
819
+ const logprobs: Array<z.infer<typeof LOGPROBS_SCHEMA>> = []
820
+ let responseId: string | null = null
821
+ const ongoingToolCalls: Record<
822
+ number,
823
+ | {
824
+ toolName: string
825
+ toolCallId: string
826
+ codeInterpreter?: {
827
+ containerId: string
828
+ }
829
+ }
830
+ | undefined
831
+ > = {}
832
+
833
+ // flag that checks if there have been client-side tool calls (not executed by openai)
834
+ let hasFunctionCall = false
835
+
836
+ // Track reasoning by output_index instead of item_id
837
+ // GitHub Copilot rotates encrypted item IDs on every event
838
+ const activeReasoning: Record<
839
+ number,
840
+ {
841
+ canonicalId: string // the item.id from output_item.added
842
+ encryptedContent?: string | null
843
+ summaryParts: number[]
844
+ }
845
+ > = {}
846
+
847
+ // Track current active reasoning output_index for correlating summary events
848
+ let currentReasoningOutputIndex: number | null = null
849
+
850
+ // Track a stable text part id for the current assistant message.
851
+ // Copilot may change item_id across text deltas; normalize to one id.
852
+ let currentTextId: string | null = null
853
+
854
+ let serviceTier: string | undefined
855
+
856
+ return {
857
+ stream: response.pipeThrough(
858
+ new TransformStream<ParseResult<z.infer<typeof openaiResponsesChunkSchema>>, LanguageModelV3StreamPart>({
859
+ start(controller) {
860
+ controller.enqueue({ type: "stream-start", warnings })
861
+ },
862
+
863
+ transform(chunk, controller) {
864
+ if (options.includeRawChunks) {
865
+ controller.enqueue({ type: "raw", rawValue: chunk.rawValue })
866
+ }
867
+
868
+ // handle failed chunk parsing / validation:
869
+ if (!chunk.success) {
870
+ finishReason = {
871
+ unified: "error",
872
+ raw: undefined,
873
+ }
874
+ controller.enqueue({ type: "error", error: chunk.error })
875
+ return
876
+ }
877
+
878
+ const value = chunk.value
879
+
880
+ if (isResponseOutputItemAddedChunk(value)) {
881
+ if (value.item.type === "function_call") {
882
+ ongoingToolCalls[value.output_index] = {
883
+ toolName: value.item.name,
884
+ toolCallId: value.item.call_id,
885
+ }
886
+
887
+ controller.enqueue({
888
+ type: "tool-input-start",
889
+ id: value.item.call_id,
890
+ toolName: value.item.name,
891
+ })
892
+ } else if (value.item.type === "web_search_call") {
893
+ ongoingToolCalls[value.output_index] = {
894
+ toolName: webSearchToolName ?? "web_search",
895
+ toolCallId: value.item.id,
896
+ }
897
+
898
+ controller.enqueue({
899
+ type: "tool-input-start",
900
+ id: value.item.id,
901
+ toolName: webSearchToolName ?? "web_search",
902
+ })
903
+ } else if (value.item.type === "computer_call") {
904
+ ongoingToolCalls[value.output_index] = {
905
+ toolName: "computer_use",
906
+ toolCallId: value.item.id,
907
+ }
908
+
909
+ controller.enqueue({
910
+ type: "tool-input-start",
911
+ id: value.item.id,
912
+ toolName: "computer_use",
913
+ })
914
+ } else if (value.item.type === "code_interpreter_call") {
915
+ ongoingToolCalls[value.output_index] = {
916
+ toolName: "code_interpreter",
917
+ toolCallId: value.item.id,
918
+ codeInterpreter: {
919
+ containerId: value.item.container_id,
920
+ },
921
+ }
922
+
923
+ controller.enqueue({
924
+ type: "tool-input-start",
925
+ id: value.item.id,
926
+ toolName: "code_interpreter",
927
+ })
928
+
929
+ controller.enqueue({
930
+ type: "tool-input-delta",
931
+ id: value.item.id,
932
+ delta: `{"containerId":"${value.item.container_id}","code":"`,
933
+ })
934
+ } else if (value.item.type === "file_search_call") {
935
+ controller.enqueue({
936
+ type: "tool-call",
937
+ toolCallId: value.item.id,
938
+ toolName: "file_search",
939
+ input: "{}",
940
+ providerExecuted: true,
941
+ })
942
+ } else if (value.item.type === "image_generation_call") {
943
+ controller.enqueue({
944
+ type: "tool-call",
945
+ toolCallId: value.item.id,
946
+ toolName: "image_generation",
947
+ input: "{}",
948
+ providerExecuted: true,
949
+ })
950
+ } else if (value.item.type === "message") {
951
+ // Start a stable text part for this assistant message
952
+ currentTextId = value.item.id
953
+ controller.enqueue({
954
+ type: "text-start",
955
+ id: value.item.id,
956
+ providerMetadata: {
957
+ openai: {
958
+ itemId: value.item.id,
959
+ },
960
+ },
961
+ })
962
+ } else if (isResponseOutputItemAddedReasoningChunk(value)) {
963
+ activeReasoning[value.output_index] = {
964
+ canonicalId: value.item.id,
965
+ encryptedContent: value.item.encrypted_content,
966
+ summaryParts: [0],
967
+ }
968
+ currentReasoningOutputIndex = value.output_index
969
+
970
+ controller.enqueue({
971
+ type: "reasoning-start",
972
+ id: `${value.item.id}:0`,
973
+ providerMetadata: {
974
+ openai: {
975
+ itemId: value.item.id,
976
+ reasoningEncryptedContent: value.item.encrypted_content ?? null,
977
+ },
978
+ },
979
+ })
980
+ }
981
+ } else if (isResponseOutputItemDoneChunk(value)) {
982
+ if (value.item.type === "function_call") {
983
+ ongoingToolCalls[value.output_index] = undefined
984
+ hasFunctionCall = true
985
+
986
+ controller.enqueue({
987
+ type: "tool-input-end",
988
+ id: value.item.call_id,
989
+ })
990
+
991
+ controller.enqueue({
992
+ type: "tool-call",
993
+ toolCallId: value.item.call_id,
994
+ toolName: value.item.name,
995
+ input: value.item.arguments,
996
+ providerMetadata: {
997
+ openai: {
998
+ itemId: value.item.id,
999
+ },
1000
+ },
1001
+ })
1002
+ } else if (value.item.type === "web_search_call") {
1003
+ ongoingToolCalls[value.output_index] = undefined
1004
+
1005
+ controller.enqueue({
1006
+ type: "tool-input-end",
1007
+ id: value.item.id,
1008
+ })
1009
+
1010
+ controller.enqueue({
1011
+ type: "tool-call",
1012
+ toolCallId: value.item.id,
1013
+ toolName: "web_search",
1014
+ input: JSON.stringify({ action: value.item.action }),
1015
+ providerExecuted: true,
1016
+ })
1017
+
1018
+ controller.enqueue({
1019
+ type: "tool-result",
1020
+ toolCallId: value.item.id,
1021
+ toolName: "web_search",
1022
+ result: { status: value.item.status },
1023
+ })
1024
+ } else if (value.item.type === "computer_call") {
1025
+ ongoingToolCalls[value.output_index] = undefined
1026
+
1027
+ controller.enqueue({
1028
+ type: "tool-input-end",
1029
+ id: value.item.id,
1030
+ })
1031
+
1032
+ controller.enqueue({
1033
+ type: "tool-call",
1034
+ toolCallId: value.item.id,
1035
+ toolName: "computer_use",
1036
+ input: "",
1037
+ providerExecuted: true,
1038
+ })
1039
+
1040
+ controller.enqueue({
1041
+ type: "tool-result",
1042
+ toolCallId: value.item.id,
1043
+ toolName: "computer_use",
1044
+ result: {
1045
+ type: "computer_use_tool_result",
1046
+ status: value.item.status || "completed",
1047
+ },
1048
+ })
1049
+ } else if (value.item.type === "file_search_call") {
1050
+ ongoingToolCalls[value.output_index] = undefined
1051
+
1052
+ controller.enqueue({
1053
+ type: "tool-result",
1054
+ toolCallId: value.item.id,
1055
+ toolName: "file_search",
1056
+ result: {
1057
+ queries: value.item.queries,
1058
+ results:
1059
+ value.item.results?.map((result) => ({
1060
+ attributes: result.attributes as Record<string, JSONValue>,
1061
+ fileId: result.file_id,
1062
+ filename: result.filename,
1063
+ score: result.score,
1064
+ text: result.text,
1065
+ })) ?? null,
1066
+ } satisfies z.infer<typeof fileSearchOutputSchema>,
1067
+ })
1068
+ } else if (value.item.type === "code_interpreter_call") {
1069
+ ongoingToolCalls[value.output_index] = undefined
1070
+
1071
+ controller.enqueue({
1072
+ type: "tool-result",
1073
+ toolCallId: value.item.id,
1074
+ toolName: "code_interpreter",
1075
+ result: {
1076
+ outputs: value.item.outputs,
1077
+ } satisfies z.infer<typeof codeInterpreterOutputSchema>,
1078
+ })
1079
+ } else if (value.item.type === "image_generation_call") {
1080
+ controller.enqueue({
1081
+ type: "tool-result",
1082
+ toolCallId: value.item.id,
1083
+ toolName: "image_generation",
1084
+ result: {
1085
+ result: value.item.result,
1086
+ } satisfies z.infer<typeof imageGenerationOutputSchema>,
1087
+ })
1088
+ } else if (value.item.type === "local_shell_call") {
1089
+ ongoingToolCalls[value.output_index] = undefined
1090
+
1091
+ controller.enqueue({
1092
+ type: "tool-call",
1093
+ toolCallId: value.item.call_id,
1094
+ toolName: "local_shell",
1095
+ input: JSON.stringify({
1096
+ action: {
1097
+ type: "exec",
1098
+ command: value.item.action.command,
1099
+ timeoutMs: value.item.action.timeout_ms,
1100
+ user: value.item.action.user,
1101
+ workingDirectory: value.item.action.working_directory,
1102
+ env: value.item.action.env,
1103
+ },
1104
+ } satisfies z.infer<typeof localShellInputSchema>),
1105
+ providerMetadata: {
1106
+ openai: { itemId: value.item.id },
1107
+ },
1108
+ })
1109
+ } else if (value.item.type === "message") {
1110
+ if (currentTextId) {
1111
+ controller.enqueue({
1112
+ type: "text-end",
1113
+ id: currentTextId,
1114
+ })
1115
+ currentTextId = null
1116
+ }
1117
+ } else if (isResponseOutputItemDoneReasoningChunk(value)) {
1118
+ const activeReasoningPart = activeReasoning[value.output_index]
1119
+ if (activeReasoningPart) {
1120
+ for (const summaryIndex of activeReasoningPart.summaryParts) {
1121
+ controller.enqueue({
1122
+ type: "reasoning-end",
1123
+ id: `${activeReasoningPart.canonicalId}:${summaryIndex}`,
1124
+ providerMetadata: {
1125
+ openai: {
1126
+ itemId: activeReasoningPart.canonicalId,
1127
+ reasoningEncryptedContent: value.item.encrypted_content ?? null,
1128
+ },
1129
+ },
1130
+ })
1131
+ }
1132
+ delete activeReasoning[value.output_index]
1133
+ if (currentReasoningOutputIndex === value.output_index) {
1134
+ currentReasoningOutputIndex = null
1135
+ }
1136
+ }
1137
+ }
1138
+ } else if (isResponseFunctionCallArgumentsDeltaChunk(value)) {
1139
+ const toolCall = ongoingToolCalls[value.output_index]
1140
+
1141
+ if (toolCall != null) {
1142
+ controller.enqueue({
1143
+ type: "tool-input-delta",
1144
+ id: toolCall.toolCallId,
1145
+ delta: value.delta,
1146
+ })
1147
+ }
1148
+ } else if (isResponseImageGenerationCallPartialImageChunk(value)) {
1149
+ controller.enqueue({
1150
+ type: "tool-result",
1151
+ toolCallId: value.item_id,
1152
+ toolName: "image_generation",
1153
+ result: {
1154
+ result: value.partial_image_b64,
1155
+ } satisfies z.infer<typeof imageGenerationOutputSchema>,
1156
+ })
1157
+ } else if (isResponseCodeInterpreterCallCodeDeltaChunk(value)) {
1158
+ const toolCall = ongoingToolCalls[value.output_index]
1159
+
1160
+ if (toolCall != null) {
1161
+ controller.enqueue({
1162
+ type: "tool-input-delta",
1163
+ id: toolCall.toolCallId,
1164
+ // The delta is code, which is embedding in a JSON string.
1165
+ // To escape it, we use JSON.stringify and slice to remove the outer quotes.
1166
+ delta: JSON.stringify(value.delta).slice(1, -1),
1167
+ })
1168
+ }
1169
+ } else if (isResponseCodeInterpreterCallCodeDoneChunk(value)) {
1170
+ const toolCall = ongoingToolCalls[value.output_index]
1171
+
1172
+ if (toolCall != null) {
1173
+ controller.enqueue({
1174
+ type: "tool-input-delta",
1175
+ id: toolCall.toolCallId,
1176
+ delta: '"}',
1177
+ })
1178
+
1179
+ controller.enqueue({
1180
+ type: "tool-input-end",
1181
+ id: toolCall.toolCallId,
1182
+ })
1183
+
1184
+ // immediately send the tool call after the input end:
1185
+ controller.enqueue({
1186
+ type: "tool-call",
1187
+ toolCallId: toolCall.toolCallId,
1188
+ toolName: "code_interpreter",
1189
+ input: JSON.stringify({
1190
+ code: value.code,
1191
+ containerId: toolCall.codeInterpreter!.containerId,
1192
+ } satisfies z.infer<typeof codeInterpreterInputSchema>),
1193
+ providerExecuted: true,
1194
+ })
1195
+ }
1196
+ } else if (isResponseCreatedChunk(value)) {
1197
+ responseId = value.response.id
1198
+ controller.enqueue({
1199
+ type: "response-metadata",
1200
+ id: value.response.id,
1201
+ timestamp: new Date(value.response.created_at * 1000),
1202
+ modelId: value.response.model,
1203
+ })
1204
+ } else if (isTextDeltaChunk(value)) {
1205
+ // Ensure a text-start exists, and normalize deltas to a stable id
1206
+ if (!currentTextId) {
1207
+ currentTextId = value.item_id
1208
+ controller.enqueue({
1209
+ type: "text-start",
1210
+ id: currentTextId,
1211
+ providerMetadata: {
1212
+ openai: { itemId: value.item_id },
1213
+ },
1214
+ })
1215
+ }
1216
+
1217
+ controller.enqueue({
1218
+ type: "text-delta",
1219
+ id: currentTextId,
1220
+ delta: value.delta,
1221
+ })
1222
+
1223
+ if (options.providerOptions?.openai?.logprobs && value.logprobs) {
1224
+ logprobs.push(value.logprobs)
1225
+ }
1226
+ } else if (isResponseReasoningSummaryPartAddedChunk(value)) {
1227
+ const activeItem =
1228
+ currentReasoningOutputIndex !== null ? activeReasoning[currentReasoningOutputIndex] : null
1229
+
1230
+ // the first reasoning start is pushed in isResponseOutputItemAddedReasoningChunk.
1231
+ if (activeItem && value.summary_index > 0) {
1232
+ activeItem.summaryParts.push(value.summary_index)
1233
+
1234
+ controller.enqueue({
1235
+ type: "reasoning-start",
1236
+ id: `${activeItem.canonicalId}:${value.summary_index}`,
1237
+ providerMetadata: {
1238
+ openai: {
1239
+ itemId: activeItem.canonicalId,
1240
+ reasoningEncryptedContent: activeItem.encryptedContent ?? null,
1241
+ },
1242
+ },
1243
+ })
1244
+ }
1245
+ } else if (isResponseReasoningSummaryTextDeltaChunk(value)) {
1246
+ const activeItem =
1247
+ currentReasoningOutputIndex !== null ? activeReasoning[currentReasoningOutputIndex] : null
1248
+
1249
+ if (activeItem) {
1250
+ controller.enqueue({
1251
+ type: "reasoning-delta",
1252
+ id: `${activeItem.canonicalId}:${value.summary_index}`,
1253
+ delta: value.delta,
1254
+ providerMetadata: {
1255
+ openai: {
1256
+ itemId: activeItem.canonicalId,
1257
+ },
1258
+ },
1259
+ })
1260
+ }
1261
+ } else if (isResponseFinishedChunk(value)) {
1262
+ finishReason = {
1263
+ unified: mapOpenAIResponseFinishReason({
1264
+ finishReason: value.response.incomplete_details?.reason,
1265
+ hasFunctionCall,
1266
+ }),
1267
+ raw: value.response.incomplete_details?.reason ?? undefined,
1268
+ }
1269
+ usage.inputTokens = value.response.usage.input_tokens
1270
+ usage.outputTokens = value.response.usage.output_tokens
1271
+ usage.totalTokens = value.response.usage.input_tokens + value.response.usage.output_tokens
1272
+ usage.reasoningTokens = value.response.usage.output_tokens_details?.reasoning_tokens ?? undefined
1273
+ usage.cachedInputTokens = value.response.usage.input_tokens_details?.cached_tokens ?? undefined
1274
+ if (typeof value.response.service_tier === "string") {
1275
+ serviceTier = value.response.service_tier
1276
+ }
1277
+ } else if (isResponseAnnotationAddedChunk(value)) {
1278
+ if (value.annotation.type === "url_citation") {
1279
+ controller.enqueue({
1280
+ type: "source",
1281
+ sourceType: "url",
1282
+ id: self.config.generateId?.() ?? generateId(),
1283
+ url: value.annotation.url,
1284
+ title: value.annotation.title,
1285
+ })
1286
+ } else if (value.annotation.type === "file_citation") {
1287
+ controller.enqueue({
1288
+ type: "source",
1289
+ sourceType: "document",
1290
+ id: self.config.generateId?.() ?? generateId(),
1291
+ mediaType: "text/plain",
1292
+ title: value.annotation.quote ?? value.annotation.filename ?? "Document",
1293
+ filename: value.annotation.filename ?? value.annotation.file_id,
1294
+ })
1295
+ }
1296
+ } else if (isErrorChunk(value)) {
1297
+ controller.enqueue({ type: "error", error: value })
1298
+ }
1299
+ },
1300
+
1301
+ flush(controller) {
1302
+ // Close any dangling text part
1303
+ if (currentTextId) {
1304
+ controller.enqueue({ type: "text-end", id: currentTextId })
1305
+ currentTextId = null
1306
+ }
1307
+
1308
+ const providerMetadata: SharedV3ProviderMetadata = {
1309
+ openai: {
1310
+ responseId,
1311
+ },
1312
+ }
1313
+
1314
+ if (logprobs.length > 0) {
1315
+ providerMetadata.openai.logprobs = logprobs
1316
+ }
1317
+
1318
+ if (serviceTier !== undefined) {
1319
+ providerMetadata.openai.serviceTier = serviceTier
1320
+ }
1321
+
1322
+ controller.enqueue({
1323
+ type: "finish",
1324
+ finishReason,
1325
+ usage: {
1326
+ inputTokens: {
1327
+ total: usage.inputTokens,
1328
+ noCache:
1329
+ usage.inputTokens != null && usage.cachedInputTokens != null
1330
+ ? usage.inputTokens - usage.cachedInputTokens
1331
+ : undefined,
1332
+ cacheRead: usage.cachedInputTokens,
1333
+ cacheWrite: undefined,
1334
+ },
1335
+ outputTokens: {
1336
+ total: usage.outputTokens,
1337
+ text: undefined,
1338
+ reasoning: usage.reasoningTokens,
1339
+ },
1340
+ raw: {
1341
+ input_tokens: usage.inputTokens,
1342
+ output_tokens: usage.outputTokens,
1343
+ total_tokens: usage.totalTokens,
1344
+ },
1345
+ },
1346
+ providerMetadata,
1347
+ })
1348
+ },
1349
+ }),
1350
+ ),
1351
+ request: { body },
1352
+ response: { headers: responseHeaders },
1353
+ }
1354
+ }
1355
+ }
1356
+
1357
+ const usageSchema = z.object({
1358
+ input_tokens: z.number(),
1359
+ input_tokens_details: z.object({ cached_tokens: z.number().nullish() }).nullish(),
1360
+ output_tokens: z.number(),
1361
+ output_tokens_details: z.object({ reasoning_tokens: z.number().nullish() }).nullish(),
1362
+ })
1363
+
1364
+ const textDeltaChunkSchema = z.object({
1365
+ type: z.literal("response.output_text.delta"),
1366
+ item_id: z.string(),
1367
+ delta: z.string(),
1368
+ logprobs: LOGPROBS_SCHEMA.nullish(),
1369
+ })
1370
+
1371
+ const errorChunkSchema = z.object({
1372
+ type: z.literal("error"),
1373
+ code: z.string(),
1374
+ message: z.string(),
1375
+ param: z.string().nullish(),
1376
+ sequence_number: z.number(),
1377
+ })
1378
+
1379
+ const responseFinishedChunkSchema = z.object({
1380
+ type: z.enum(["response.completed", "response.incomplete"]),
1381
+ response: z.object({
1382
+ incomplete_details: z.object({ reason: z.string() }).nullish(),
1383
+ usage: usageSchema,
1384
+ service_tier: z.string().nullish(),
1385
+ }),
1386
+ })
1387
+
1388
+ const responseCreatedChunkSchema = z.object({
1389
+ type: z.literal("response.created"),
1390
+ response: z.object({
1391
+ id: z.string(),
1392
+ created_at: z.number(),
1393
+ model: z.string(),
1394
+ service_tier: z.string().nullish(),
1395
+ }),
1396
+ })
1397
+
1398
+ const responseOutputItemAddedSchema = z.object({
1399
+ type: z.literal("response.output_item.added"),
1400
+ output_index: z.number(),
1401
+ item: z.discriminatedUnion("type", [
1402
+ z.object({
1403
+ type: z.literal("message"),
1404
+ id: z.string(),
1405
+ }),
1406
+ z.object({
1407
+ type: z.literal("reasoning"),
1408
+ id: z.string(),
1409
+ encrypted_content: z.string().nullish(),
1410
+ }),
1411
+ z.object({
1412
+ type: z.literal("function_call"),
1413
+ id: z.string(),
1414
+ call_id: z.string(),
1415
+ name: z.string(),
1416
+ arguments: z.string(),
1417
+ }),
1418
+ z.object({
1419
+ type: z.literal("web_search_call"),
1420
+ id: z.string(),
1421
+ status: z.string(),
1422
+ action: z
1423
+ .object({
1424
+ type: z.literal("search"),
1425
+ query: z.string().optional(),
1426
+ })
1427
+ .nullish(),
1428
+ }),
1429
+ z.object({
1430
+ type: z.literal("computer_call"),
1431
+ id: z.string(),
1432
+ status: z.string(),
1433
+ }),
1434
+ z.object({
1435
+ type: z.literal("file_search_call"),
1436
+ id: z.string(),
1437
+ }),
1438
+ z.object({
1439
+ type: z.literal("image_generation_call"),
1440
+ id: z.string(),
1441
+ }),
1442
+ z.object({
1443
+ type: z.literal("code_interpreter_call"),
1444
+ id: z.string(),
1445
+ container_id: z.string(),
1446
+ code: z.string().nullable(),
1447
+ outputs: z
1448
+ .array(
1449
+ z.discriminatedUnion("type", [
1450
+ z.object({ type: z.literal("logs"), logs: z.string() }),
1451
+ z.object({ type: z.literal("image"), url: z.string() }),
1452
+ ]),
1453
+ )
1454
+ .nullable(),
1455
+ status: z.string(),
1456
+ }),
1457
+ ]),
1458
+ })
1459
+
1460
+ const responseOutputItemDoneSchema = z.object({
1461
+ type: z.literal("response.output_item.done"),
1462
+ output_index: z.number(),
1463
+ item: z.discriminatedUnion("type", [
1464
+ z.object({
1465
+ type: z.literal("message"),
1466
+ id: z.string(),
1467
+ }),
1468
+ z.object({
1469
+ type: z.literal("reasoning"),
1470
+ id: z.string(),
1471
+ encrypted_content: z.string().nullish(),
1472
+ }),
1473
+ z.object({
1474
+ type: z.literal("function_call"),
1475
+ id: z.string(),
1476
+ call_id: z.string(),
1477
+ name: z.string(),
1478
+ arguments: z.string(),
1479
+ status: z.literal("completed"),
1480
+ }),
1481
+ codeInterpreterCallItem,
1482
+ imageGenerationCallItem,
1483
+ webSearchCallItem,
1484
+ fileSearchCallItem,
1485
+ localShellCallItem,
1486
+ z.object({
1487
+ type: z.literal("computer_call"),
1488
+ id: z.string(),
1489
+ status: z.literal("completed"),
1490
+ }),
1491
+ ]),
1492
+ })
1493
+
1494
+ const responseFunctionCallArgumentsDeltaSchema = z.object({
1495
+ type: z.literal("response.function_call_arguments.delta"),
1496
+ item_id: z.string(),
1497
+ output_index: z.number(),
1498
+ delta: z.string(),
1499
+ })
1500
+
1501
+ const responseImageGenerationCallPartialImageSchema = z.object({
1502
+ type: z.literal("response.image_generation_call.partial_image"),
1503
+ item_id: z.string(),
1504
+ output_index: z.number(),
1505
+ partial_image_b64: z.string(),
1506
+ })
1507
+
1508
+ const responseCodeInterpreterCallCodeDeltaSchema = z.object({
1509
+ type: z.literal("response.code_interpreter_call_code.delta"),
1510
+ item_id: z.string(),
1511
+ output_index: z.number(),
1512
+ delta: z.string(),
1513
+ })
1514
+
1515
+ const responseCodeInterpreterCallCodeDoneSchema = z.object({
1516
+ type: z.literal("response.code_interpreter_call_code.done"),
1517
+ item_id: z.string(),
1518
+ output_index: z.number(),
1519
+ code: z.string(),
1520
+ })
1521
+
1522
+ const responseAnnotationAddedSchema = z.object({
1523
+ type: z.literal("response.output_text.annotation.added"),
1524
+ annotation: z.discriminatedUnion("type", [
1525
+ z.object({
1526
+ type: z.literal("url_citation"),
1527
+ url: z.string(),
1528
+ title: z.string(),
1529
+ }),
1530
+ z.object({
1531
+ type: z.literal("file_citation"),
1532
+ file_id: z.string(),
1533
+ filename: z.string().nullish(),
1534
+ index: z.number().nullish(),
1535
+ start_index: z.number().nullish(),
1536
+ end_index: z.number().nullish(),
1537
+ quote: z.string().nullish(),
1538
+ }),
1539
+ ]),
1540
+ })
1541
+
1542
+ const responseReasoningSummaryPartAddedSchema = z.object({
1543
+ type: z.literal("response.reasoning_summary_part.added"),
1544
+ item_id: z.string(),
1545
+ summary_index: z.number(),
1546
+ })
1547
+
1548
+ const responseReasoningSummaryTextDeltaSchema = z.object({
1549
+ type: z.literal("response.reasoning_summary_text.delta"),
1550
+ item_id: z.string(),
1551
+ summary_index: z.number(),
1552
+ delta: z.string(),
1553
+ })
1554
+
1555
+ const openaiResponsesChunkSchema = z.union([
1556
+ textDeltaChunkSchema,
1557
+ responseFinishedChunkSchema,
1558
+ responseCreatedChunkSchema,
1559
+ responseOutputItemAddedSchema,
1560
+ responseOutputItemDoneSchema,
1561
+ responseFunctionCallArgumentsDeltaSchema,
1562
+ responseImageGenerationCallPartialImageSchema,
1563
+ responseCodeInterpreterCallCodeDeltaSchema,
1564
+ responseCodeInterpreterCallCodeDoneSchema,
1565
+ responseAnnotationAddedSchema,
1566
+ responseReasoningSummaryPartAddedSchema,
1567
+ responseReasoningSummaryTextDeltaSchema,
1568
+ errorChunkSchema,
1569
+ z.object({ type: z.string() }).loose(), // fallback for unknown chunks
1570
+ ])
1571
+
1572
+ type ExtractByType<T, K extends T extends { type: infer U } ? U : never> = T extends { type: K } ? T : never
1573
+
1574
+ function isTextDeltaChunk(
1575
+ chunk: z.infer<typeof openaiResponsesChunkSchema>,
1576
+ ): chunk is z.infer<typeof textDeltaChunkSchema> {
1577
+ return chunk.type === "response.output_text.delta"
1578
+ }
1579
+
1580
+ function isResponseOutputItemDoneChunk(
1581
+ chunk: z.infer<typeof openaiResponsesChunkSchema>,
1582
+ ): chunk is z.infer<typeof responseOutputItemDoneSchema> {
1583
+ return chunk.type === "response.output_item.done"
1584
+ }
1585
+
1586
+ function isResponseOutputItemDoneReasoningChunk(chunk: z.infer<typeof openaiResponsesChunkSchema>): chunk is z.infer<
1587
+ typeof responseOutputItemDoneSchema
1588
+ > & {
1589
+ item: ExtractByType<z.infer<typeof responseOutputItemDoneSchema>["item"], "reasoning">
1590
+ } {
1591
+ return isResponseOutputItemDoneChunk(chunk) && chunk.item.type === "reasoning"
1592
+ }
1593
+
1594
+ function isResponseFinishedChunk(
1595
+ chunk: z.infer<typeof openaiResponsesChunkSchema>,
1596
+ ): chunk is z.infer<typeof responseFinishedChunkSchema> {
1597
+ return chunk.type === "response.completed" || chunk.type === "response.incomplete"
1598
+ }
1599
+
1600
+ function isResponseCreatedChunk(
1601
+ chunk: z.infer<typeof openaiResponsesChunkSchema>,
1602
+ ): chunk is z.infer<typeof responseCreatedChunkSchema> {
1603
+ return chunk.type === "response.created"
1604
+ }
1605
+
1606
+ function isResponseFunctionCallArgumentsDeltaChunk(
1607
+ chunk: z.infer<typeof openaiResponsesChunkSchema>,
1608
+ ): chunk is z.infer<typeof responseFunctionCallArgumentsDeltaSchema> {
1609
+ return chunk.type === "response.function_call_arguments.delta"
1610
+ }
1611
+ function isResponseImageGenerationCallPartialImageChunk(
1612
+ chunk: z.infer<typeof openaiResponsesChunkSchema>,
1613
+ ): chunk is z.infer<typeof responseImageGenerationCallPartialImageSchema> {
1614
+ return chunk.type === "response.image_generation_call.partial_image"
1615
+ }
1616
+
1617
+ function isResponseCodeInterpreterCallCodeDeltaChunk(
1618
+ chunk: z.infer<typeof openaiResponsesChunkSchema>,
1619
+ ): chunk is z.infer<typeof responseCodeInterpreterCallCodeDeltaSchema> {
1620
+ return chunk.type === "response.code_interpreter_call_code.delta"
1621
+ }
1622
+
1623
+ function isResponseCodeInterpreterCallCodeDoneChunk(
1624
+ chunk: z.infer<typeof openaiResponsesChunkSchema>,
1625
+ ): chunk is z.infer<typeof responseCodeInterpreterCallCodeDoneSchema> {
1626
+ return chunk.type === "response.code_interpreter_call_code.done"
1627
+ }
1628
+
1629
+ function isResponseOutputItemAddedChunk(
1630
+ chunk: z.infer<typeof openaiResponsesChunkSchema>,
1631
+ ): chunk is z.infer<typeof responseOutputItemAddedSchema> {
1632
+ return chunk.type === "response.output_item.added"
1633
+ }
1634
+
1635
+ function isResponseOutputItemAddedReasoningChunk(chunk: z.infer<typeof openaiResponsesChunkSchema>): chunk is z.infer<
1636
+ typeof responseOutputItemAddedSchema
1637
+ > & {
1638
+ item: ExtractByType<z.infer<typeof responseOutputItemAddedSchema>["item"], "reasoning">
1639
+ } {
1640
+ return isResponseOutputItemAddedChunk(chunk) && chunk.item.type === "reasoning"
1641
+ }
1642
+
1643
+ function isResponseAnnotationAddedChunk(
1644
+ chunk: z.infer<typeof openaiResponsesChunkSchema>,
1645
+ ): chunk is z.infer<typeof responseAnnotationAddedSchema> {
1646
+ return chunk.type === "response.output_text.annotation.added"
1647
+ }
1648
+
1649
+ function isResponseReasoningSummaryPartAddedChunk(
1650
+ chunk: z.infer<typeof openaiResponsesChunkSchema>,
1651
+ ): chunk is z.infer<typeof responseReasoningSummaryPartAddedSchema> {
1652
+ return chunk.type === "response.reasoning_summary_part.added"
1653
+ }
1654
+
1655
+ function isResponseReasoningSummaryTextDeltaChunk(
1656
+ chunk: z.infer<typeof openaiResponsesChunkSchema>,
1657
+ ): chunk is z.infer<typeof responseReasoningSummaryTextDeltaSchema> {
1658
+ return chunk.type === "response.reasoning_summary_text.delta"
1659
+ }
1660
+
1661
+ function isErrorChunk(chunk: z.infer<typeof openaiResponsesChunkSchema>): chunk is z.infer<typeof errorChunkSchema> {
1662
+ return chunk.type === "error"
1663
+ }
1664
+
1665
+ type ResponsesModelConfig = {
1666
+ isReasoningModel: boolean
1667
+ systemMessageMode: "remove" | "system" | "developer"
1668
+ requiredAutoTruncation: boolean
1669
+ supportsFlexProcessing: boolean
1670
+ supportsPriorityProcessing: boolean
1671
+ }
1672
+
1673
+ function getResponsesModelConfig(modelId: string): ResponsesModelConfig {
1674
+ const supportsFlexProcessing =
1675
+ modelId.startsWith("o3") ||
1676
+ modelId.startsWith("o4-mini") ||
1677
+ (modelId.startsWith("gpt-5") && !modelId.startsWith("gpt-5-chat"))
1678
+ const supportsPriorityProcessing =
1679
+ modelId.startsWith("gpt-4") ||
1680
+ modelId.startsWith("gpt-5-mini") ||
1681
+ (modelId.startsWith("gpt-5") && !modelId.startsWith("gpt-5-nano") && !modelId.startsWith("gpt-5-chat")) ||
1682
+ modelId.startsWith("o3") ||
1683
+ modelId.startsWith("o4-mini")
1684
+ const defaults = {
1685
+ requiredAutoTruncation: false,
1686
+ systemMessageMode: "system" as const,
1687
+ supportsFlexProcessing,
1688
+ supportsPriorityProcessing,
1689
+ }
1690
+
1691
+ // gpt-5-chat models are non-reasoning
1692
+ if (modelId.startsWith("gpt-5-chat")) {
1693
+ return {
1694
+ ...defaults,
1695
+ isReasoningModel: false,
1696
+ }
1697
+ }
1698
+
1699
+ // o series reasoning models:
1700
+ if (
1701
+ modelId.startsWith("o") ||
1702
+ modelId.startsWith("gpt-5") ||
1703
+ modelId.startsWith("codex-") ||
1704
+ modelId.startsWith("computer-use")
1705
+ ) {
1706
+ if (modelId.startsWith("o1-mini") || modelId.startsWith("o1-preview")) {
1707
+ return {
1708
+ ...defaults,
1709
+ isReasoningModel: true,
1710
+ systemMessageMode: "remove",
1711
+ }
1712
+ }
1713
+
1714
+ return {
1715
+ ...defaults,
1716
+ isReasoningModel: true,
1717
+ systemMessageMode: "developer",
1718
+ }
1719
+ }
1720
+
1721
+ // gpt models:
1722
+ return {
1723
+ ...defaults,
1724
+ isReasoningModel: false,
1725
+ }
1726
+ }
1727
+
1728
+ // TODO AI SDK 6: use optional here instead of nullish
1729
+ const openaiResponsesProviderOptionsSchema = z.object({
1730
+ include: z
1731
+ .array(z.enum(["reasoning.encrypted_content", "file_search_call.results", "message.output_text.logprobs"]))
1732
+ .nullish(),
1733
+ instructions: z.string().nullish(),
1734
+
1735
+ /**
1736
+ * Return the log probabilities of the tokens.
1737
+ *
1738
+ * Setting to true will return the log probabilities of the tokens that
1739
+ * were generated.
1740
+ *
1741
+ * Setting to a number will return the log probabilities of the top n
1742
+ * tokens that were generated.
1743
+ *
1744
+ * @see https://platform.openai.com/docs/api-reference/responses/create
1745
+ * @see https://cookbook.openai.com/examples/using_logprobs
1746
+ */
1747
+ logprobs: z.union([z.boolean(), z.number().min(1).max(TOP_LOGPROBS_MAX)]).optional(),
1748
+
1749
+ /**
1750
+ * The maximum number of total calls to built-in tools that can be processed in a response.
1751
+ * This maximum number applies across all built-in tool calls, not per individual tool.
1752
+ * Any further attempts to call a tool by the model will be ignored.
1753
+ */
1754
+ maxToolCalls: z.number().nullish(),
1755
+
1756
+ metadata: z.any().nullish(),
1757
+ parallelToolCalls: z.boolean().nullish(),
1758
+ previousResponseId: z.string().nullish(),
1759
+ promptCacheKey: z.string().nullish(),
1760
+ reasoningEffort: z.string().nullish(),
1761
+ reasoningSummary: z.string().nullish(),
1762
+ safetyIdentifier: z.string().nullish(),
1763
+ serviceTier: z.enum(["auto", "flex", "priority"]).nullish(),
1764
+ store: z.boolean().nullish(),
1765
+ strictJsonSchema: z.boolean().nullish(),
1766
+ textVerbosity: z.enum(["low", "medium", "high"]).nullish(),
1767
+ user: z.string().nullish(),
1768
+ })
1769
+
1770
+ export type OpenAIResponsesProviderOptions = z.infer<typeof openaiResponsesProviderOptionsSchema>