alchemylab-opencode 1.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 (379) hide show
  1. package/LICENSE +21 -0
  2. package/NODE_COMPAT.md +184 -0
  3. package/package.json +112 -0
  4. package/packages/opencode/migration/20260127222353_familiar_lady_ursula/migration.sql +90 -0
  5. package/packages/opencode/migration/20260127222353_familiar_lady_ursula/snapshot.json +796 -0
  6. package/packages/opencode/migration/20260211171708_add_project_commands/migration.sql +1 -0
  7. package/packages/opencode/migration/20260211171708_add_project_commands/snapshot.json +806 -0
  8. package/packages/opencode/migration/20260213144116_wakeful_the_professor/migration.sql +11 -0
  9. package/packages/opencode/migration/20260213144116_wakeful_the_professor/snapshot.json +897 -0
  10. package/packages/opencode/migration/20260225215848_workspace/migration.sql +7 -0
  11. package/packages/opencode/migration/20260225215848_workspace/snapshot.json +959 -0
  12. package/packages/opencode/migration/20260227213759_add_session_workspace_id/migration.sql +2 -0
  13. package/packages/opencode/migration/20260227213759_add_session_workspace_id/snapshot.json +983 -0
  14. package/packages/opencode/migration/20260228203230_blue_harpoon/migration.sql +17 -0
  15. package/packages/opencode/migration/20260228203230_blue_harpoon/snapshot.json +1102 -0
  16. package/packages/opencode/migration/20260303231226_add_workspace_fields/migration.sql +5 -0
  17. package/packages/opencode/migration/20260303231226_add_workspace_fields/snapshot.json +1013 -0
  18. package/packages/opencode/migration/20260309230000_move_org_to_state/migration.sql +3 -0
  19. package/packages/opencode/migration/20260309230000_move_org_to_state/snapshot.json +1156 -0
  20. package/packages/opencode/migration/20260312043431_session_message_cursor/migration.sql +4 -0
  21. package/packages/opencode/migration/20260312043431_session_message_cursor/snapshot.json +1168 -0
  22. package/packages/opencode/migration/20260323234822_events/migration.sql +13 -0
  23. package/packages/opencode/migration/20260323234822_events/snapshot.json +1271 -0
  24. package/packages/opencode/package.json +140 -0
  25. package/packages/opencode/src/account/account.sql.ts +39 -0
  26. package/packages/opencode/src/account/index.ts +463 -0
  27. package/packages/opencode/src/account/repo.ts +163 -0
  28. package/packages/opencode/src/account/schema.ts +91 -0
  29. package/packages/opencode/src/acp/README.md +174 -0
  30. package/packages/opencode/src/acp/agent.ts +1847 -0
  31. package/packages/opencode/src/acp/session.ts +116 -0
  32. package/packages/opencode/src/acp/types.ts +24 -0
  33. package/packages/opencode/src/agent/agent.ts +420 -0
  34. package/packages/opencode/src/agent/generate.txt +75 -0
  35. package/packages/opencode/src/agent/prompt/compaction.txt +15 -0
  36. package/packages/opencode/src/agent/prompt/explore.txt +18 -0
  37. package/packages/opencode/src/agent/prompt/summary.txt +11 -0
  38. package/packages/opencode/src/agent/prompt/title.txt +44 -0
  39. package/packages/opencode/src/auth/index.ts +110 -0
  40. package/packages/opencode/src/bus/bus-event.ts +40 -0
  41. package/packages/opencode/src/bus/global.ts +10 -0
  42. package/packages/opencode/src/bus/index.ts +185 -0
  43. package/packages/opencode/src/cli/bootstrap.ts +17 -0
  44. package/packages/opencode/src/cli/cmd/cmd.ts +7 -0
  45. package/packages/opencode/src/cli/cmd/run.ts +689 -0
  46. package/packages/opencode/src/cli/cmd/serve.ts +24 -0
  47. package/packages/opencode/src/cli/cmd/tui/event.ts +49 -0
  48. package/packages/opencode/src/cli/effect/prompt.ts +25 -0
  49. package/packages/opencode/src/cli/error.ts +46 -0
  50. package/packages/opencode/src/cli/heap.ts +59 -0
  51. package/packages/opencode/src/cli/logo.ts +6 -0
  52. package/packages/opencode/src/cli/network.ts +60 -0
  53. package/packages/opencode/src/cli/ui.ts +133 -0
  54. package/packages/opencode/src/cli/upgrade.ts +31 -0
  55. package/packages/opencode/src/command/index.ts +195 -0
  56. package/packages/opencode/src/command/template/initialize.txt +66 -0
  57. package/packages/opencode/src/command/template/review.txt +101 -0
  58. package/packages/opencode/src/config/config.ts +1599 -0
  59. package/packages/opencode/src/config/console-state.ts +15 -0
  60. package/packages/opencode/src/config/markdown.ts +99 -0
  61. package/packages/opencode/src/config/paths.ts +167 -0
  62. package/packages/opencode/src/config/tui-migrate.ts +155 -0
  63. package/packages/opencode/src/config/tui-schema.ts +37 -0
  64. package/packages/opencode/src/config/tui.ts +179 -0
  65. package/packages/opencode/src/control-plane/adaptors/index.ts +20 -0
  66. package/packages/opencode/src/control-plane/adaptors/worktree.ts +42 -0
  67. package/packages/opencode/src/control-plane/schema.ts +17 -0
  68. package/packages/opencode/src/control-plane/sse.ts +66 -0
  69. package/packages/opencode/src/control-plane/types.ts +32 -0
  70. package/packages/opencode/src/control-plane/workspace.sql.ts +17 -0
  71. package/packages/opencode/src/control-plane/workspace.ts +168 -0
  72. package/packages/opencode/src/effect/cross-spawn-spawner.ts +502 -0
  73. package/packages/opencode/src/effect/instance-ref.ts +6 -0
  74. package/packages/opencode/src/effect/instance-registry.ts +12 -0
  75. package/packages/opencode/src/effect/instance-state.ts +82 -0
  76. package/packages/opencode/src/effect/run-service.ts +33 -0
  77. package/packages/opencode/src/effect/runner.ts +216 -0
  78. package/packages/opencode/src/env/index.ts +28 -0
  79. package/packages/opencode/src/file/ignore.ts +82 -0
  80. package/packages/opencode/src/file/index.ts +686 -0
  81. package/packages/opencode/src/file/protected.ts +59 -0
  82. package/packages/opencode/src/file/ripgrep.ts +376 -0
  83. package/packages/opencode/src/file/time.ts +133 -0
  84. package/packages/opencode/src/file/watcher.ts +173 -0
  85. package/packages/opencode/src/filesystem/index.ts +236 -0
  86. package/packages/opencode/src/flag/flag.ts +156 -0
  87. package/packages/opencode/src/format/formatter.ts +413 -0
  88. package/packages/opencode/src/format/index.ts +203 -0
  89. package/packages/opencode/src/git/index.ts +303 -0
  90. package/packages/opencode/src/global/index.ts +56 -0
  91. package/packages/opencode/src/id/id.ts +85 -0
  92. package/packages/opencode/src/ide/index.ts +74 -0
  93. package/packages/opencode/src/installation/index.ts +355 -0
  94. package/packages/opencode/src/installation/meta.ts +7 -0
  95. package/packages/opencode/src/lsp/client.ts +252 -0
  96. package/packages/opencode/src/lsp/index.ts +558 -0
  97. package/packages/opencode/src/lsp/language.ts +120 -0
  98. package/packages/opencode/src/lsp/launch.ts +21 -0
  99. package/packages/opencode/src/lsp/server.ts +1968 -0
  100. package/packages/opencode/src/mcp/auth.ts +173 -0
  101. package/packages/opencode/src/mcp/index.ts +931 -0
  102. package/packages/opencode/src/mcp/oauth-callback.ts +216 -0
  103. package/packages/opencode/src/mcp/oauth-provider.ts +185 -0
  104. package/packages/opencode/src/node-loader.mjs +104 -0
  105. package/packages/opencode/src/node-preload.mjs +39 -0
  106. package/packages/opencode/src/node.ts +1 -0
  107. package/packages/opencode/src/npm/index.ts +188 -0
  108. package/packages/opencode/src/patch/index.ts +680 -0
  109. package/packages/opencode/src/permission/arity.ts +163 -0
  110. package/packages/opencode/src/permission/evaluate.ts +15 -0
  111. package/packages/opencode/src/permission/index.ts +325 -0
  112. package/packages/opencode/src/permission/schema.ts +17 -0
  113. package/packages/opencode/src/plugin/cloudflare.ts +67 -0
  114. package/packages/opencode/src/plugin/codex.ts +608 -0
  115. package/packages/opencode/src/plugin/github-copilot/copilot.ts +361 -0
  116. package/packages/opencode/src/plugin/github-copilot/models.ts +144 -0
  117. package/packages/opencode/src/plugin/index.ts +299 -0
  118. package/packages/opencode/src/plugin/install.ts +439 -0
  119. package/packages/opencode/src/plugin/loader.ts +174 -0
  120. package/packages/opencode/src/plugin/meta.ts +188 -0
  121. package/packages/opencode/src/plugin/shared.ts +323 -0
  122. package/packages/opencode/src/project/bootstrap.ts +31 -0
  123. package/packages/opencode/src/project/instance.ts +175 -0
  124. package/packages/opencode/src/project/project.sql.ts +16 -0
  125. package/packages/opencode/src/project/project.ts +519 -0
  126. package/packages/opencode/src/project/schema.ts +16 -0
  127. package/packages/opencode/src/project/state.ts +70 -0
  128. package/packages/opencode/src/project/vcs.ts +240 -0
  129. package/packages/opencode/src/provider/auth.ts +253 -0
  130. package/packages/opencode/src/provider/error.ts +197 -0
  131. package/packages/opencode/src/provider/models.ts +162 -0
  132. package/packages/opencode/src/provider/provider.ts +1709 -0
  133. package/packages/opencode/src/provider/schema.ts +38 -0
  134. package/packages/opencode/src/provider/sdk/copilot/README.md +5 -0
  135. package/packages/opencode/src/provider/sdk/copilot/chat/convert-to-openai-compatible-chat-messages.ts +170 -0
  136. package/packages/opencode/src/provider/sdk/copilot/chat/get-response-metadata.ts +15 -0
  137. package/packages/opencode/src/provider/sdk/copilot/chat/map-openai-compatible-finish-reason.ts +19 -0
  138. package/packages/opencode/src/provider/sdk/copilot/chat/openai-compatible-api-types.ts +64 -0
  139. package/packages/opencode/src/provider/sdk/copilot/chat/openai-compatible-chat-language-model.ts +815 -0
  140. package/packages/opencode/src/provider/sdk/copilot/chat/openai-compatible-chat-options.ts +28 -0
  141. package/packages/opencode/src/provider/sdk/copilot/chat/openai-compatible-metadata-extractor.ts +44 -0
  142. package/packages/opencode/src/provider/sdk/copilot/chat/openai-compatible-prepare-tools.ts +83 -0
  143. package/packages/opencode/src/provider/sdk/copilot/copilot-provider.ts +100 -0
  144. package/packages/opencode/src/provider/sdk/copilot/index.ts +2 -0
  145. package/packages/opencode/src/provider/sdk/copilot/openai-compatible-error.ts +27 -0
  146. package/packages/opencode/src/provider/sdk/copilot/responses/convert-to-openai-responses-input.ts +335 -0
  147. package/packages/opencode/src/provider/sdk/copilot/responses/map-openai-responses-finish-reason.ts +22 -0
  148. package/packages/opencode/src/provider/sdk/copilot/responses/openai-config.ts +18 -0
  149. package/packages/opencode/src/provider/sdk/copilot/responses/openai-error.ts +22 -0
  150. package/packages/opencode/src/provider/sdk/copilot/responses/openai-responses-api-types.ts +214 -0
  151. package/packages/opencode/src/provider/sdk/copilot/responses/openai-responses-language-model.ts +1769 -0
  152. package/packages/opencode/src/provider/sdk/copilot/responses/openai-responses-prepare-tools.ts +173 -0
  153. package/packages/opencode/src/provider/sdk/copilot/responses/openai-responses-settings.ts +1 -0
  154. package/packages/opencode/src/provider/sdk/copilot/responses/tool/code-interpreter.ts +87 -0
  155. package/packages/opencode/src/provider/sdk/copilot/responses/tool/file-search.ts +127 -0
  156. package/packages/opencode/src/provider/sdk/copilot/responses/tool/image-generation.ts +114 -0
  157. package/packages/opencode/src/provider/sdk/copilot/responses/tool/local-shell.ts +64 -0
  158. package/packages/opencode/src/provider/sdk/copilot/responses/tool/web-search-preview.ts +103 -0
  159. package/packages/opencode/src/provider/sdk/copilot/responses/tool/web-search.ts +102 -0
  160. package/packages/opencode/src/provider/transform.ts +1050 -0
  161. package/packages/opencode/src/pty/index.ts +397 -0
  162. package/packages/opencode/src/pty/pty.node.ts +27 -0
  163. package/packages/opencode/src/pty/pty.ts +25 -0
  164. package/packages/opencode/src/pty/schema.ts +17 -0
  165. package/packages/opencode/src/question/index.ts +224 -0
  166. package/packages/opencode/src/question/schema.ts +17 -0
  167. package/packages/opencode/src/run.ts +28 -0
  168. package/packages/opencode/src/serve.ts +45 -0
  169. package/packages/opencode/src/server/error.ts +36 -0
  170. package/packages/opencode/src/server/event.ts +7 -0
  171. package/packages/opencode/src/server/instance.ts +324 -0
  172. package/packages/opencode/src/server/mdns.ts +60 -0
  173. package/packages/opencode/src/server/middleware.ts +33 -0
  174. package/packages/opencode/src/server/projectors.ts +28 -0
  175. package/packages/opencode/src/server/proxy.ts +131 -0
  176. package/packages/opencode/src/server/router.ts +105 -0
  177. package/packages/opencode/src/server/routes/config.ts +92 -0
  178. package/packages/opencode/src/server/routes/event.ts +83 -0
  179. package/packages/opencode/src/server/routes/experimental.ts +374 -0
  180. package/packages/opencode/src/server/routes/file.ts +197 -0
  181. package/packages/opencode/src/server/routes/global.ts +312 -0
  182. package/packages/opencode/src/server/routes/mcp.ts +225 -0
  183. package/packages/opencode/src/server/routes/permission.ts +69 -0
  184. package/packages/opencode/src/server/routes/project.ts +118 -0
  185. package/packages/opencode/src/server/routes/provider.ts +171 -0
  186. package/packages/opencode/src/server/routes/pty.ts +210 -0
  187. package/packages/opencode/src/server/routes/question.ts +99 -0
  188. package/packages/opencode/src/server/routes/session.ts +1030 -0
  189. package/packages/opencode/src/server/routes/tui.ts +379 -0
  190. package/packages/opencode/src/server/routes/workspace.ts +94 -0
  191. package/packages/opencode/src/server/server.ts +353 -0
  192. package/packages/opencode/src/session/compaction.ts +428 -0
  193. package/packages/opencode/src/session/index.ts +887 -0
  194. package/packages/opencode/src/session/instruction.ts +258 -0
  195. package/packages/opencode/src/session/llm.ts +354 -0
  196. package/packages/opencode/src/session/message-v2.ts +1031 -0
  197. package/packages/opencode/src/session/message.ts +191 -0
  198. package/packages/opencode/src/session/overflow.ts +22 -0
  199. package/packages/opencode/src/session/processor.ts +523 -0
  200. package/packages/opencode/src/session/projectors.ts +135 -0
  201. package/packages/opencode/src/session/prompt/anthropic.txt +105 -0
  202. package/packages/opencode/src/session/prompt/beast.txt +147 -0
  203. package/packages/opencode/src/session/prompt/build-switch.txt +5 -0
  204. package/packages/opencode/src/session/prompt/codex.txt +79 -0
  205. package/packages/opencode/src/session/prompt/copilot-gpt-5.txt +143 -0
  206. package/packages/opencode/src/session/prompt/default.txt +105 -0
  207. package/packages/opencode/src/session/prompt/gemini.txt +155 -0
  208. package/packages/opencode/src/session/prompt/gpt.txt +107 -0
  209. package/packages/opencode/src/session/prompt/kimi.txt +95 -0
  210. package/packages/opencode/src/session/prompt/max-steps.txt +16 -0
  211. package/packages/opencode/src/session/prompt/plan-reminder-anthropic.txt +67 -0
  212. package/packages/opencode/src/session/prompt/plan.txt +26 -0
  213. package/packages/opencode/src/session/prompt/trinity.txt +97 -0
  214. package/packages/opencode/src/session/prompt.ts +1911 -0
  215. package/packages/opencode/src/session/retry.ts +106 -0
  216. package/packages/opencode/src/session/revert.ts +176 -0
  217. package/packages/opencode/src/session/schema.ts +38 -0
  218. package/packages/opencode/src/session/session.sql.ts +103 -0
  219. package/packages/opencode/src/session/status.ts +102 -0
  220. package/packages/opencode/src/session/summary.ts +177 -0
  221. package/packages/opencode/src/session/system.ts +76 -0
  222. package/packages/opencode/src/session/todo.ts +95 -0
  223. package/packages/opencode/src/share/share-next.ts +369 -0
  224. package/packages/opencode/src/share/share.sql.ts +13 -0
  225. package/packages/opencode/src/shell/shell.ts +110 -0
  226. package/packages/opencode/src/skill/discovery.ts +116 -0
  227. package/packages/opencode/src/skill/index.ts +277 -0
  228. package/packages/opencode/src/snapshot/index.ts +726 -0
  229. package/packages/opencode/src/sql.d.ts +4 -0
  230. package/packages/opencode/src/storage/db.node.ts +8 -0
  231. package/packages/opencode/src/storage/db.ts +177 -0
  232. package/packages/opencode/src/storage/json-migration.ts +425 -0
  233. package/packages/opencode/src/storage/schema.sql.ts +10 -0
  234. package/packages/opencode/src/storage/schema.ts +5 -0
  235. package/packages/opencode/src/storage/storage.ts +353 -0
  236. package/packages/opencode/src/sync/README.md +179 -0
  237. package/packages/opencode/src/sync/event.sql.ts +16 -0
  238. package/packages/opencode/src/sync/index.ts +263 -0
  239. package/packages/opencode/src/sync/schema.ts +14 -0
  240. package/packages/opencode/src/tool/apply_patch.ts +281 -0
  241. package/packages/opencode/src/tool/apply_patch.txt +33 -0
  242. package/packages/opencode/src/tool/bash.ts +496 -0
  243. package/packages/opencode/src/tool/bash.txt +117 -0
  244. package/packages/opencode/src/tool/batch.ts +183 -0
  245. package/packages/opencode/src/tool/batch.txt +24 -0
  246. package/packages/opencode/src/tool/codesearch.ts +132 -0
  247. package/packages/opencode/src/tool/codesearch.txt +12 -0
  248. package/packages/opencode/src/tool/edit.ts +667 -0
  249. package/packages/opencode/src/tool/edit.txt +10 -0
  250. package/packages/opencode/src/tool/external-directory.ts +46 -0
  251. package/packages/opencode/src/tool/glob.ts +78 -0
  252. package/packages/opencode/src/tool/glob.txt +6 -0
  253. package/packages/opencode/src/tool/grep.ts +156 -0
  254. package/packages/opencode/src/tool/grep.txt +8 -0
  255. package/packages/opencode/src/tool/invalid.ts +17 -0
  256. package/packages/opencode/src/tool/ls.ts +121 -0
  257. package/packages/opencode/src/tool/ls.txt +1 -0
  258. package/packages/opencode/src/tool/lsp.ts +97 -0
  259. package/packages/opencode/src/tool/lsp.txt +19 -0
  260. package/packages/opencode/src/tool/multiedit.ts +46 -0
  261. package/packages/opencode/src/tool/multiedit.txt +41 -0
  262. package/packages/opencode/src/tool/plan-enter.txt +14 -0
  263. package/packages/opencode/src/tool/plan-exit.txt +13 -0
  264. package/packages/opencode/src/tool/plan.ts +131 -0
  265. package/packages/opencode/src/tool/question.ts +46 -0
  266. package/packages/opencode/src/tool/question.txt +10 -0
  267. package/packages/opencode/src/tool/read.ts +332 -0
  268. package/packages/opencode/src/tool/read.txt +14 -0
  269. package/packages/opencode/src/tool/registry.ts +265 -0
  270. package/packages/opencode/src/tool/schema.ts +17 -0
  271. package/packages/opencode/src/tool/skill.ts +105 -0
  272. package/packages/opencode/src/tool/task.ts +166 -0
  273. package/packages/opencode/src/tool/task.txt +60 -0
  274. package/packages/opencode/src/tool/todo.ts +48 -0
  275. package/packages/opencode/src/tool/todowrite.txt +167 -0
  276. package/packages/opencode/src/tool/tool.ts +112 -0
  277. package/packages/opencode/src/tool/truncate.ts +144 -0
  278. package/packages/opencode/src/tool/truncation-dir.ts +4 -0
  279. package/packages/opencode/src/tool/webfetch.ts +206 -0
  280. package/packages/opencode/src/tool/webfetch.txt +13 -0
  281. package/packages/opencode/src/tool/websearch.ts +150 -0
  282. package/packages/opencode/src/tool/websearch.txt +14 -0
  283. package/packages/opencode/src/tool/write.ts +84 -0
  284. package/packages/opencode/src/tool/write.txt +8 -0
  285. package/packages/opencode/src/util/abort.ts +35 -0
  286. package/packages/opencode/src/util/archive.ts +17 -0
  287. package/packages/opencode/src/util/color.ts +19 -0
  288. package/packages/opencode/src/util/context.ts +25 -0
  289. package/packages/opencode/src/util/data-url.ts +9 -0
  290. package/packages/opencode/src/util/defer.ts +12 -0
  291. package/packages/opencode/src/util/effect-http-client.ts +11 -0
  292. package/packages/opencode/src/util/effect-zod.ts +98 -0
  293. package/packages/opencode/src/util/error.ts +77 -0
  294. package/packages/opencode/src/util/filesystem.ts +245 -0
  295. package/packages/opencode/src/util/flock.ts +333 -0
  296. package/packages/opencode/src/util/fn.ts +21 -0
  297. package/packages/opencode/src/util/format.ts +20 -0
  298. package/packages/opencode/src/util/glob.ts +34 -0
  299. package/packages/opencode/src/util/hash.ts +7 -0
  300. package/packages/opencode/src/util/iife.ts +3 -0
  301. package/packages/opencode/src/util/keybind.ts +103 -0
  302. package/packages/opencode/src/util/lazy.ts +23 -0
  303. package/packages/opencode/src/util/locale.ts +81 -0
  304. package/packages/opencode/src/util/lock.ts +98 -0
  305. package/packages/opencode/src/util/log.ts +182 -0
  306. package/packages/opencode/src/util/network.ts +9 -0
  307. package/packages/opencode/src/util/process.ts +176 -0
  308. package/packages/opencode/src/util/queue.ts +32 -0
  309. package/packages/opencode/src/util/record.ts +3 -0
  310. package/packages/opencode/src/util/rpc.ts +66 -0
  311. package/packages/opencode/src/util/schema.ts +53 -0
  312. package/packages/opencode/src/util/scrap.ts +10 -0
  313. package/packages/opencode/src/util/signal.ts +12 -0
  314. package/packages/opencode/src/util/timeout.ts +14 -0
  315. package/packages/opencode/src/util/token.ts +7 -0
  316. package/packages/opencode/src/util/update-schema.ts +13 -0
  317. package/packages/opencode/src/util/which.ts +14 -0
  318. package/packages/opencode/src/util/wildcard.ts +59 -0
  319. package/packages/opencode/src/worktree/index.ts +612 -0
  320. package/packages/plugin/package.json +38 -0
  321. package/packages/plugin/src/example.ts +18 -0
  322. package/packages/plugin/src/index.ts +282 -0
  323. package/packages/plugin/src/shell.ts +136 -0
  324. package/packages/plugin/src/tool.ts +38 -0
  325. package/packages/plugin/src/tui.ts +508 -0
  326. package/packages/script/package.json +16 -0
  327. package/packages/script/src/index.ts +77 -0
  328. package/packages/sdk/package.json +33 -0
  329. package/packages/sdk/src/client.ts +55 -0
  330. package/packages/sdk/src/gen/client/client.gen.ts +212 -0
  331. package/packages/sdk/src/gen/client/index.ts +25 -0
  332. package/packages/sdk/src/gen/client/types.gen.ts +222 -0
  333. package/packages/sdk/src/gen/client/utils.gen.ts +287 -0
  334. package/packages/sdk/src/gen/client.gen.ts +22 -0
  335. package/packages/sdk/src/gen/core/auth.gen.ts +41 -0
  336. package/packages/sdk/src/gen/core/bodySerializer.gen.ts +74 -0
  337. package/packages/sdk/src/gen/core/params.gen.ts +144 -0
  338. package/packages/sdk/src/gen/core/pathSerializer.gen.ts +167 -0
  339. package/packages/sdk/src/gen/core/queryKeySerializer.gen.ts +111 -0
  340. package/packages/sdk/src/gen/core/serverSentEvents.gen.ts +210 -0
  341. package/packages/sdk/src/gen/core/types.gen.ts +91 -0
  342. package/packages/sdk/src/gen/core/utils.gen.ts +109 -0
  343. package/packages/sdk/src/gen/sdk.gen.ts +1197 -0
  344. package/packages/sdk/src/gen/types.gen.ts +3904 -0
  345. package/packages/sdk/src/index.ts +21 -0
  346. package/packages/sdk/src/process.ts +31 -0
  347. package/packages/sdk/src/server.ts +134 -0
  348. package/packages/sdk/src/v2/client.ts +81 -0
  349. package/packages/sdk/src/v2/gen/client/client.gen.ts +285 -0
  350. package/packages/sdk/src/v2/gen/client/index.ts +25 -0
  351. package/packages/sdk/src/v2/gen/client/types.gen.ts +202 -0
  352. package/packages/sdk/src/v2/gen/client/utils.gen.ts +289 -0
  353. package/packages/sdk/src/v2/gen/client.gen.ts +18 -0
  354. package/packages/sdk/src/v2/gen/core/auth.gen.ts +41 -0
  355. package/packages/sdk/src/v2/gen/core/bodySerializer.gen.ts +82 -0
  356. package/packages/sdk/src/v2/gen/core/params.gen.ts +169 -0
  357. package/packages/sdk/src/v2/gen/core/pathSerializer.gen.ts +167 -0
  358. package/packages/sdk/src/v2/gen/core/queryKeySerializer.gen.ts +111 -0
  359. package/packages/sdk/src/v2/gen/core/serverSentEvents.gen.ts +239 -0
  360. package/packages/sdk/src/v2/gen/core/types.gen.ts +86 -0
  361. package/packages/sdk/src/v2/gen/core/utils.gen.ts +137 -0
  362. package/packages/sdk/src/v2/gen/sdk.gen.ts +4223 -0
  363. package/packages/sdk/src/v2/gen/types.gen.ts +5265 -0
  364. package/packages/sdk/src/v2/index.ts +21 -0
  365. package/packages/sdk/src/v2/server.ts +134 -0
  366. package/packages/util/package.json +20 -0
  367. package/packages/util/src/array.ts +10 -0
  368. package/packages/util/src/binary.ts +41 -0
  369. package/packages/util/src/encode.ts +51 -0
  370. package/packages/util/src/error.ts +54 -0
  371. package/packages/util/src/fn.ts +11 -0
  372. package/packages/util/src/identifier.ts +48 -0
  373. package/packages/util/src/iife.ts +3 -0
  374. package/packages/util/src/lazy.ts +11 -0
  375. package/packages/util/src/module.ts +10 -0
  376. package/packages/util/src/path.ts +37 -0
  377. package/packages/util/src/retry.ts +41 -0
  378. package/packages/util/src/slug.ts +74 -0
  379. package/postinstall.cjs +55 -0
@@ -0,0 +1,197 @@
1
+ import { APICallError } from "ai"
2
+ import { STATUS_CODES } from "http"
3
+ import { iife } from "@/util/iife"
4
+ import type { ProviderID } from "./schema"
5
+
6
+ export namespace ProviderError {
7
+ // Adapted from overflow detection patterns in:
8
+ // https://github.com/badlogic/pi-mono/blob/main/packages/ai/src/utils/overflow.ts
9
+ const OVERFLOW_PATTERNS = [
10
+ /prompt is too long/i, // Anthropic
11
+ /input is too long for requested model/i, // Amazon Bedrock
12
+ /exceeds the context window/i, // OpenAI (Completions + Responses API message text)
13
+ /input token count.*exceeds the maximum/i, // Google (Gemini)
14
+ /maximum prompt length is \d+/i, // xAI (Grok)
15
+ /reduce the length of the messages/i, // Groq
16
+ /maximum context length is \d+ tokens/i, // OpenRouter, DeepSeek, vLLM
17
+ /exceeds the limit of \d+/i, // GitHub Copilot
18
+ /exceeds the available context size/i, // llama.cpp server
19
+ /greater than the context length/i, // LM Studio
20
+ /context window exceeds limit/i, // MiniMax
21
+ /exceeded model token limit/i, // Kimi For Coding, Moonshot
22
+ /context[_ ]length[_ ]exceeded/i, // Generic fallback
23
+ /request entity too large/i, // HTTP 413
24
+ /context length is only \d+ tokens/i, // vLLM
25
+ /input length.*exceeds.*context length/i, // vLLM
26
+ /prompt too long; exceeded (?:max )?context length/i, // Ollama explicit overflow error
27
+ /too large for model with \d+ maximum context length/i, // Mistral
28
+ /model_context_window_exceeded/i, // z.ai non-standard finish_reason surfaced as error text
29
+ ]
30
+
31
+ function isOpenAiErrorRetryable(e: APICallError) {
32
+ const status = e.statusCode
33
+ if (!status) return e.isRetryable
34
+ // openai sometimes returns 404 for models that are actually available
35
+ return status === 404 || e.isRetryable
36
+ }
37
+
38
+ // Providers not reliably handled in this function:
39
+ // - z.ai: can accept overflow silently (needs token-count/context-window checks)
40
+ function isOverflow(message: string) {
41
+ if (OVERFLOW_PATTERNS.some((p) => p.test(message))) return true
42
+
43
+ // Providers/status patterns handled outside of regex list:
44
+ // - Cerebras: often returns "400 (no body)" / "413 (no body)"
45
+ // - Mistral: often returns "400 (no body)" / "413 (no body)"
46
+ return /^4(00|13)\s*(status code)?\s*\(no body\)/i.test(message)
47
+ }
48
+
49
+ function message(providerID: ProviderID, e: APICallError) {
50
+ return iife(() => {
51
+ const msg = e.message
52
+ if (msg === "") {
53
+ if (e.responseBody) return e.responseBody
54
+ if (e.statusCode) {
55
+ const err = STATUS_CODES[e.statusCode]
56
+ if (err) return err
57
+ }
58
+ return "Unknown error"
59
+ }
60
+
61
+ if (!e.responseBody || (e.statusCode && msg !== STATUS_CODES[e.statusCode])) {
62
+ return msg
63
+ }
64
+
65
+ try {
66
+ const body = JSON.parse(e.responseBody)
67
+ // try to extract common error message fields
68
+ const errMsg = body.message || body.error || body.error?.message
69
+ if (errMsg && typeof errMsg === "string") {
70
+ return `${msg}: ${errMsg}`
71
+ }
72
+ } catch {}
73
+
74
+ // If responseBody is HTML (e.g. from a gateway or proxy error page),
75
+ // provide a human-readable message instead of dumping raw markup
76
+ if (/^\s*<!doctype|^\s*<html/i.test(e.responseBody)) {
77
+ if (e.statusCode === 401) {
78
+ return "Unauthorized: request was blocked by a gateway or proxy. Your authentication token may be missing or expired — try running `opencode auth login <your provider URL>` to re-authenticate."
79
+ }
80
+ if (e.statusCode === 403) {
81
+ return "Forbidden: request was blocked by a gateway or proxy. You may not have permission to access this resource — check your account and provider settings."
82
+ }
83
+ return msg
84
+ }
85
+
86
+ return `${msg}: ${e.responseBody}`
87
+ }).trim()
88
+ }
89
+
90
+ function json(input: unknown) {
91
+ if (typeof input === "string") {
92
+ try {
93
+ const result = JSON.parse(input)
94
+ if (result && typeof result === "object") return result
95
+ return undefined
96
+ } catch {
97
+ return undefined
98
+ }
99
+ }
100
+ if (typeof input === "object" && input !== null) {
101
+ return input
102
+ }
103
+ return undefined
104
+ }
105
+
106
+ export type ParsedStreamError =
107
+ | {
108
+ type: "context_overflow"
109
+ message: string
110
+ responseBody: string
111
+ }
112
+ | {
113
+ type: "api_error"
114
+ message: string
115
+ isRetryable: false
116
+ responseBody: string
117
+ }
118
+
119
+ export function parseStreamError(input: unknown): ParsedStreamError | undefined {
120
+ const body = json(input)
121
+ if (!body) return
122
+
123
+ const responseBody = JSON.stringify(body)
124
+ if (body.type !== "error") return
125
+
126
+ switch (body?.error?.code) {
127
+ case "context_length_exceeded":
128
+ return {
129
+ type: "context_overflow",
130
+ message: "Input exceeds context window of this model",
131
+ responseBody,
132
+ }
133
+ case "insufficient_quota":
134
+ return {
135
+ type: "api_error",
136
+ message: "Quota exceeded. Check your plan and billing details.",
137
+ isRetryable: false,
138
+ responseBody,
139
+ }
140
+ case "usage_not_included":
141
+ return {
142
+ type: "api_error",
143
+ message: "To use Codex with your ChatGPT plan, upgrade to Plus: https://chatgpt.com/explore/plus.",
144
+ isRetryable: false,
145
+ responseBody,
146
+ }
147
+ case "invalid_prompt":
148
+ return {
149
+ type: "api_error",
150
+ message: typeof body?.error?.message === "string" ? body?.error?.message : "Invalid prompt.",
151
+ isRetryable: false,
152
+ responseBody,
153
+ }
154
+ }
155
+ }
156
+
157
+ export type ParsedAPICallError =
158
+ | {
159
+ type: "context_overflow"
160
+ message: string
161
+ responseBody?: string
162
+ }
163
+ | {
164
+ type: "api_error"
165
+ message: string
166
+ statusCode?: number
167
+ isRetryable: boolean
168
+ responseHeaders?: Record<string, string>
169
+ responseBody?: string
170
+ metadata?: Record<string, string>
171
+ }
172
+
173
+ export function parseAPICallError(input: { providerID: ProviderID; error: APICallError }): ParsedAPICallError {
174
+ const m = message(input.providerID, input.error)
175
+ const body = json(input.error.responseBody)
176
+ if (isOverflow(m) || input.error.statusCode === 413 || body?.error?.code === "context_length_exceeded") {
177
+ return {
178
+ type: "context_overflow",
179
+ message: m,
180
+ responseBody: input.error.responseBody,
181
+ }
182
+ }
183
+
184
+ const metadata = input.error.url ? { url: input.error.url } : undefined
185
+ return {
186
+ type: "api_error",
187
+ message: m,
188
+ statusCode: input.error.statusCode,
189
+ isRetryable: input.providerID.startsWith("openai")
190
+ ? isOpenAiErrorRetryable(input.error)
191
+ : input.error.isRetryable,
192
+ responseHeaders: input.error.responseHeaders,
193
+ responseBody: input.error.responseBody,
194
+ metadata,
195
+ }
196
+ }
197
+ }
@@ -0,0 +1,162 @@
1
+ import { Global } from "../global"
2
+ import { Log } from "../util/log"
3
+ import path from "path"
4
+ import z from "zod"
5
+ import { Installation } from "../installation"
6
+ import { Flag } from "../flag/flag"
7
+ import { lazy } from "@/util/lazy"
8
+ import { Filesystem } from "../util/filesystem"
9
+ import { Flock } from "@/util/flock"
10
+ import { Hash } from "@/util/hash"
11
+
12
+ // Try to import bundled snapshot (generated at build time)
13
+ // Falls back to undefined in dev mode when snapshot doesn't exist
14
+ /* @ts-ignore */
15
+
16
+ export namespace ModelsDev {
17
+ const log = Log.create({ service: "models.dev" })
18
+ const source = url()
19
+ const filepath = path.join(
20
+ Global.Path.cache,
21
+ source === "https://models.dev" ? "models.json" : `models-${Hash.fast(source)}.json`,
22
+ )
23
+ const ttl = 5 * 60 * 1000
24
+
25
+ export const Model = z.object({
26
+ id: z.string(),
27
+ name: z.string(),
28
+ family: z.string().optional(),
29
+ release_date: z.string(),
30
+ attachment: z.boolean(),
31
+ reasoning: z.boolean(),
32
+ temperature: z.boolean(),
33
+ tool_call: z.boolean(),
34
+ interleaved: z
35
+ .union([
36
+ z.literal(true),
37
+ z
38
+ .object({
39
+ field: z.enum(["reasoning_content", "reasoning_details"]),
40
+ })
41
+ .strict(),
42
+ ])
43
+ .optional(),
44
+ cost: z
45
+ .object({
46
+ input: z.number(),
47
+ output: z.number(),
48
+ cache_read: z.number().optional(),
49
+ cache_write: z.number().optional(),
50
+ context_over_200k: z
51
+ .object({
52
+ input: z.number(),
53
+ output: z.number(),
54
+ cache_read: z.number().optional(),
55
+ cache_write: z.number().optional(),
56
+ })
57
+ .optional(),
58
+ })
59
+ .optional(),
60
+ limit: z.object({
61
+ context: z.number(),
62
+ input: z.number().optional(),
63
+ output: z.number(),
64
+ }),
65
+ modalities: z
66
+ .object({
67
+ input: z.array(z.enum(["text", "audio", "image", "video", "pdf"])),
68
+ output: z.array(z.enum(["text", "audio", "image", "video", "pdf"])),
69
+ })
70
+ .optional(),
71
+ experimental: z.boolean().optional(),
72
+ status: z.enum(["alpha", "beta", "deprecated"]).optional(),
73
+ options: z.record(z.string(), z.any()),
74
+ headers: z.record(z.string(), z.string()).optional(),
75
+ provider: z.object({ npm: z.string().optional(), api: z.string().optional() }).optional(),
76
+ variants: z.record(z.string(), z.record(z.string(), z.any())).optional(),
77
+ })
78
+ export type Model = z.infer<typeof Model>
79
+
80
+ export const Provider = z.object({
81
+ api: z.string().optional(),
82
+ name: z.string(),
83
+ env: z.array(z.string()),
84
+ id: z.string(),
85
+ npm: z.string().optional(),
86
+ models: z.record(z.string(), Model),
87
+ })
88
+
89
+ export type Provider = z.infer<typeof Provider>
90
+
91
+ function url() {
92
+ return Flag.OPENCODE_MODELS_URL || "https://models.dev"
93
+ }
94
+
95
+ function fresh() {
96
+ return Date.now() - Number(Filesystem.stat(filepath)?.mtimeMs ?? 0) < ttl
97
+ }
98
+
99
+ function skip(force: boolean) {
100
+ return !force && fresh()
101
+ }
102
+
103
+ const fetchApi = async () => {
104
+ const result = await fetch(`${url()}/api.json`, {
105
+ headers: { "User-Agent": Installation.USER_AGENT },
106
+ signal: AbortSignal.timeout(10000),
107
+ })
108
+ return { ok: result.ok, text: await result.text() }
109
+ }
110
+
111
+ export const Data = lazy(async () => {
112
+ const result = await Filesystem.readJson(Flag.OPENCODE_MODELS_PATH ?? filepath).catch(() => {})
113
+ if (result) return result
114
+ // @ts-ignore
115
+ const snapshot = await import("./models-snapshot.js")
116
+ .then((m) => m.snapshot as Record<string, unknown>)
117
+ .catch(() => undefined)
118
+ if (snapshot) return snapshot
119
+ if (Flag.OPENCODE_DISABLE_MODELS_FETCH) return {}
120
+ return Flock.withLock(`models-dev:${filepath}`, async () => {
121
+ const result = await Filesystem.readJson(Flag.OPENCODE_MODELS_PATH ?? filepath).catch(() => {})
122
+ if (result) return result
123
+ const result2 = await fetchApi()
124
+ if (result2.ok) {
125
+ await Filesystem.write(filepath, result2.text).catch((e) => {
126
+ log.error("Failed to write models cache", { error: e })
127
+ })
128
+ }
129
+ return JSON.parse(result2.text)
130
+ })
131
+ })
132
+
133
+ export async function get() {
134
+ const result = await Data()
135
+ return result as Record<string, Provider>
136
+ }
137
+
138
+ export async function refresh(force = false) {
139
+ if (skip(force)) return ModelsDev.Data.reset()
140
+ await Flock.withLock(`models-dev:${filepath}`, async () => {
141
+ if (skip(force)) return ModelsDev.Data.reset()
142
+ const result = await fetchApi()
143
+ if (!result.ok) return
144
+ await Filesystem.write(filepath, result.text)
145
+ ModelsDev.Data.reset()
146
+ }).catch((e) => {
147
+ log.error("Failed to fetch models.dev", {
148
+ error: e,
149
+ })
150
+ })
151
+ }
152
+ }
153
+
154
+ if (!Flag.OPENCODE_DISABLE_MODELS_FETCH && !process.argv.includes("--get-yargs-completions")) {
155
+ ModelsDev.refresh()
156
+ setInterval(
157
+ async () => {
158
+ await ModelsDev.refresh()
159
+ },
160
+ 60 * 1000 * 60,
161
+ ).unref()
162
+ }