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
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 opencode
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/NODE_COMPAT.md ADDED
@@ -0,0 +1,184 @@
1
+ # OpenCode Node.js Compatibility
2
+
3
+ OpenCode serve mode has been patched to run on Node.js 24+ without Bun.
4
+ This document describes what was changed, why, and how to run it.
5
+
6
+ ## Quick Start
7
+
8
+ ```bash
9
+ # Requires Node.js 24+
10
+ node --experimental-strip-types --experimental-transform-types \
11
+ --import ./packages/opencode/src/node-preload.mjs \
12
+ packages/opencode/src/serve.ts --port 4096
13
+
14
+ # With per-project data isolation (recommended for alchemylab)
15
+ node --experimental-strip-types --experimental-transform-types \
16
+ --import ./packages/opencode/src/node-preload.mjs \
17
+ packages/opencode/src/serve.ts --port 4096 --data-dir /path/to/project/.alchemy_lab/opencode
18
+ ```
19
+
20
+ ## Per-Project Data Isolation
21
+
22
+ By default, OpenCode stores data in `~/.local/share/opencode/`. The `--data-dir` flag
23
+ (or `OPENCODE_DATA_DIR` env var) redirects project-specific data to a custom directory:
24
+
25
+ | Path | Default | With `--data-dir` |
26
+ |------|---------|-------------------|
27
+ | Database | `~/.local/share/opencode/opencode.db` | `<data-dir>/opencode.db` |
28
+ | Auth | `~/.local/share/opencode/auth.json` | `<data-dir>/auth.json` |
29
+ | Plans | `~/.local/share/opencode/plans/` | `<data-dir>/plans/` |
30
+ | State/locks | `~/.local/state/opencode/` | `<data-dir>/state/` |
31
+ | Logs | `~/.local/share/opencode/log/` | `<data-dir>/log/` |
32
+ | Config | `~/.config/opencode/` | `~/.config/opencode/` (unchanged) |
33
+ | Bin cache | `~/.cache/opencode/bin/` | `~/.cache/opencode/bin/` (unchanged) |
34
+
35
+ Config and bin cache stay global so user preferences and downloaded tools are shared.
36
+
37
+ ## Why Node.js 24?
38
+
39
+ | Node Version | Status | Issue |
40
+ |--------------|--------|-------|
41
+ | 22 LTS | ❌ | `tsx` injects esbuild `__name` helper that breaks Effect framework |
42
+ | 23 | ❌ | V8 crash in async ESM module evaluation (`AsyncModuleExecutionFulfilled`) |
43
+ | 24 LTS | ✅ | Native `--experimental-strip-types` avoids esbuild entirely |
44
+ | 25+ | ✅ | Should work (untested) |
45
+
46
+ Node 24's native TypeScript stripping means no transpiler is needed. The code runs
47
+ as-is with types stripped at load time. This avoids the `__name` injection that
48
+ `tsx`/`esbuild` add and that Bun provides globally but Node doesn't.
49
+
50
+ ## Architecture
51
+
52
+ ### Entry Point
53
+
54
+ `src/serve.ts` — A minimal entry point that only imports the server path.
55
+ The main `src/index.ts` eagerly imports TUI/CLI code that depends on Bun-specific
56
+ packages (`bun`, `bun-pty`, `bun:ffi`). The serve entry point sidesteps all of that.
57
+
58
+ ### Node Preload (`src/node-preload.mjs`)
59
+
60
+ Loaded via `--import` before any application code. Does two things:
61
+
62
+ 1. **Polyfills `globalThis.__name`** — Bun provides this globally (esbuild `--keep-names`
63
+ helper). The Effect framework and other dependencies rely on it.
64
+ 2. **Registers the custom ESM loader** via `node:module` `register()`.
65
+
66
+ ### Node Loader (`src/node-loader.mjs`)
67
+
68
+ Custom ESM resolve + load hooks that bridge Bun/Node differences:
69
+
70
+ - **Extensionless imports** → tries `.ts`, `.tsx`, `/index.ts`, `/index.tsx`
71
+ - **`.txt` file imports** → reads file and exports as default string (Bun supports this natively)
72
+ - **`bun:sqlite`** → redirected to `node:sqlite`
73
+ - **`bun:ffi`** → stubbed (only used for Windows TUI, not serve)
74
+ - **`bun` / `bun-pty`** → stubbed (only used for TUI/CLI)
75
+ - **`.js` → `.ts` remapping** → for workspace packages where imports use `.js` but source is `.ts`
76
+ - **`@/` and `@tui/` path aliases** → resolved to `src/` and `src/cli/cmd/tui/`
77
+
78
+ ## Files Changed
79
+
80
+ ### HTTP Server (`src/server/server.ts`)
81
+ - **Already done in dev branch**: Uses `@hono/node-server` with `createAdaptorServer`
82
+ - No Bun-specific code remains
83
+
84
+ ### WebSocket Proxy (`src/server/proxy.ts`)
85
+ - **Before**: `import { upgradeWebSocket } from "hono/bun"`
86
+ - **After**: `import { createNodeWebSocket } from "@hono/node-ws"`
87
+
88
+ ### Static File Serving (`src/server/instance.ts`)
89
+ - **Before**: `Bun.file(match)` for embedded web UI
90
+ - **After**: `fs.readFileSync(match)` with manual MIME type lookup
91
+
92
+ ### Prompt Async Route (`src/server/routes/session.ts`)
93
+ - **Before**: `c.status(204)` + `stream()` — Node's `Response` rejects 204 with body
94
+ - **After**: `c.status(202)` — semantically correct for "accepted for processing"
95
+
96
+ ### Database (`src/storage/db.ts`)
97
+ - **Before**: `import { type SQLiteBunDatabase } from "drizzle-orm/bun-sqlite"` and
98
+ `import { migrate } from "drizzle-orm/bun-sqlite/migrator"`
99
+ - **After**: Uses `drizzle-orm/node-sqlite` equivalents
100
+ - **Migration**: `bun-sqlite` migrator accepts raw journal entries; `node-sqlite` migrator
101
+ requires `{ migrationsFolder }` config. Dev mode now passes the folder path.
102
+
103
+ ### Database Conditional Import (`package.json`)
104
+ - **Before**: `"#db": { "default": "./src/storage/db.bun.ts" }`
105
+ - **After**: `"#db": { "default": "./src/storage/db.node.ts" }`
106
+
107
+ ### File Watcher (`src/file/watcher.ts`)
108
+ - **Before**: `require("@parcel/watcher-...")` — `require` doesn't exist in ESM
109
+ - **After**: `import { createRequire } from "node:module"` then `createRequire(import.meta.url)`
110
+
111
+ ### OAuth Servers
112
+ Both `src/mcp/oauth-callback.ts` and `src/plugin/codex.ts`:
113
+ - **Before**: `Bun.serve({ port, fetch() {} })`
114
+ - **After**: `http.createServer()` with manual Request/Response bridging
115
+
116
+ ### Lazy Imports (`src/index.ts`)
117
+ These modules use `bun:sqlite` directly and would crash on import:
118
+ - `JsonMigration` — now lazy: `import("./storage/json-migration").catch(() => null)`
119
+ - `DbCommand` — now lazy, removed from yargs command registration
120
+
121
+ ## Dependencies Added
122
+
123
+ - `@hono/node-ws` — Node.js WebSocket adapter for Hono (already had `@hono/node-server`)
124
+
125
+ ## Session Identity via _meta (Core Fix)
126
+
127
+ Upstream OpenCode's `callTool` does not pass `_meta` on MCP tool calls. This means MCP
128
+ servers cannot know which session a tool call belongs to — a critical problem when MCP
129
+ processes are shared across sessions (which OpenCode does for efficiency).
130
+
131
+ ### The Fix
132
+
133
+ - `src/mcp/index.ts`: Added `MCP.currentToolContext` (thread-local context) and modified
134
+ `convertMcpTool()` to include `_meta: { sessionId, messageId }` in every `callTool` request.
135
+ - `src/session/prompt.ts`: Sets `MCP.currentToolContext` from the session's tool execution
136
+ context before each MCP tool call.
137
+
138
+ ### Result
139
+
140
+ Every MCP tool call now carries `_meta.sessionId` and `_meta.messageId`. The alchemy MCP
141
+ server uses these directly (via `request.params._meta.sessionId`) instead of expensive HTTP
142
+ discovery. This eliminates session identity races when MCP processes are shared across
143
+ concurrent sessions.
144
+
145
+ ### Verified
146
+
147
+ ```
148
+ [11:58:36] read_files | _meta-debug {
149
+ "has_meta": true,
150
+ "sessionId": "ses_2986f17c8ffefuXAJN3qDIHzND",
151
+ "messageId": "msg_d67cf04da001EdSMwdFednSJES"
152
+ }
153
+ ```
154
+
155
+ ## Known Limitations
156
+
157
+ 1. **Plugin CJS loading** — Alchemy plugins compiled as CJS fail with "not a function"
158
+ under Node's ESM import. The IIFE wrapper in `MCPClientConfigurer.ts` handles this
159
+ for Bun/OpenCode; same approach needed for Node.
160
+
161
+ 2. **`opencode db` CLI command** — Not available (uses `bun:sqlite` directly). Only
162
+ affects database admin tasks, not serve mode.
163
+
164
+ 3. **JSON migration** — Skipped on Node.js (migrates legacy JSON storage to SQLite).
165
+ Only relevant for users upgrading from very old opencode versions.
166
+
167
+ 4. **ExperimentalWarning** — Node 24 prints warnings for `strip-types`, `transform-types`,
168
+ and `SQLite`. These are harmless and can be suppressed with `--no-warnings`.
169
+
170
+ ## Tested Endpoints
171
+
172
+ All passing on Node.js 24.14.1:
173
+
174
+ - `GET /session` — list sessions
175
+ - `POST /session` — create session
176
+ - `GET /session/:id` — get session
177
+ - `DELETE /session/:id` — delete session
178
+ - `POST /session/:id/prompt_async` — send async prompt
179
+ - `GET /session/:id/message` — get messages
180
+ - `GET /event` — SSE event stream
181
+ - `GET /global/health` — health check
182
+ - `GET /config/providers` — provider configuration
183
+ - `GET /auth/:provider` — auth status
184
+ - `GET /doc` — OpenAPI specification
package/package.json ADDED
@@ -0,0 +1,112 @@
1
+ {
2
+ "name": "alchemylab-opencode",
3
+ "version": "1.0.0",
4
+ "description": "OpenCode server runtime for AlchemyLab",
5
+ "type": "module",
6
+ "license": "MIT",
7
+ "scripts": {
8
+ "postinstall": "node postinstall.cjs"
9
+ },
10
+ "files": [
11
+ "packages/opencode/src/**",
12
+ "packages/opencode/migration/**",
13
+ "packages/opencode/package.json",
14
+ "packages/plugin/src/**",
15
+ "packages/plugin/package.json",
16
+ "packages/sdk/src/**",
17
+ "packages/sdk/package.json",
18
+ "packages/util/src/**",
19
+ "packages/util/package.json",
20
+ "packages/script/src/**",
21
+ "packages/script/package.json",
22
+ "postinstall.cjs",
23
+ "NODE_COMPAT.md"
24
+ ],
25
+ "dependencies": {
26
+ "@agentclientprotocol/sdk": "0.16.1",
27
+ "@ai-sdk/amazon-bedrock": "^4.0.91",
28
+ "@ai-sdk/anthropic": "3.0.67",
29
+ "@ai-sdk/azure": "3.0.49",
30
+ "@ai-sdk/cerebras": "2.0.41",
31
+ "@ai-sdk/cohere": "3.0.27",
32
+ "@ai-sdk/deepinfra": "2.0.41",
33
+ "@ai-sdk/gateway": "3.0.80",
34
+ "@ai-sdk/google": "3.0.53",
35
+ "@ai-sdk/google-vertex": "4.0.95",
36
+ "@ai-sdk/groq": "3.0.31",
37
+ "@ai-sdk/mistral": "3.0.27",
38
+ "@ai-sdk/openai": "3.0.48",
39
+ "@ai-sdk/openai-compatible": "2.0.37",
40
+ "@ai-sdk/perplexity": "3.0.26",
41
+ "@ai-sdk/provider": "3.0.8",
42
+ "@ai-sdk/provider-utils": "4.0.23",
43
+ "@ai-sdk/togetherai": "2.0.41",
44
+ "@ai-sdk/vercel": "2.0.39",
45
+ "@ai-sdk/xai": "3.0.75",
46
+ "@aws-sdk/credential-providers": "^3.1025.0",
47
+ "@clack/prompts": "1.0.0-alpha.1",
48
+ "@effect/platform-node": "4.0.0-beta.43",
49
+ "@gitlab/gitlab-ai-provider": "3.6.0",
50
+ "@gitlab/opencode-gitlab-auth": "1.3.3",
51
+ "@hono/node-server": "1.19.11",
52
+ "@hono/node-ws": "1.3.0",
53
+ "@hono/standard-validator": "^0.2.2",
54
+ "@hono/zod-validator": "0.4.2",
55
+ "@lydell/node-pty": "1.2.0-beta.10",
56
+ "@modelcontextprotocol/sdk": "1.27.1",
57
+ "@npmcli/arborist": "9.4.0",
58
+ "@openrouter/ai-sdk-provider": "2.4.2",
59
+ "@parcel/watcher": "2.5.1",
60
+ "@standard-community/standard-json": "^0.3.5",
61
+ "@standard-community/standard-openapi": "^0.2.9",
62
+ "@standard-schema/spec": "^1.1.0",
63
+ "@zip.js/zip.js": "2.7.62",
64
+ "ai": "6.0.149",
65
+ "bonjour-service": "1.3.0",
66
+ "chokidar": "4.0.3",
67
+ "cross-spawn": "7.0.6",
68
+ "decimal.js": "10.5.0",
69
+ "diff": "8.0.2",
70
+ "drizzle-orm": "1.0.0-beta.19-d95b7a4",
71
+ "effect": "4.0.0-beta.43",
72
+ "fuzzysort": "3.1.0",
73
+ "gitlab-ai-provider": "^6.4.1",
74
+ "glob": "13.0.5",
75
+ "google-auth-library": "^10.6.2",
76
+ "gray-matter": "4.0.3",
77
+ "gtoken": "^8.0.0",
78
+ "hono": "4.10.7",
79
+ "hono-openapi": "1.1.2",
80
+ "ignore": "7.0.5",
81
+ "ioredis": "^5.10.1",
82
+ "jsonc-parser": "3.3.1",
83
+ "mime-types": "3.0.2",
84
+ "minimatch": "10.0.3",
85
+ "npm-package-arg": "13.0.2",
86
+ "open": "10.1.2",
87
+ "opencode-gitlab-auth": "2.0.1",
88
+ "opencode-poe-auth": "0.0.1",
89
+ "partial-json": "0.1.7",
90
+ "quansync": "^1.0.0",
91
+ "remeda": "2.26.0",
92
+ "semver": "^7.6.3",
93
+ "turndown": "7.2.0",
94
+ "ulid": "3.0.1",
95
+ "venice-ai-sdk-provider": "2.0.1",
96
+ "vscode-jsonrpc": "8.2.1",
97
+ "web-tree-sitter": "0.25.10",
98
+ "which": "6.0.1",
99
+ "xdg-basedir": "5.1.0",
100
+ "yargs": "18.0.0",
101
+ "zod": "4.1.8",
102
+ "zod-to-json-schema": "3.24.5"
103
+ },
104
+ "trustedDependencies": [
105
+ "esbuild",
106
+ "node-pty",
107
+ "web-tree-sitter"
108
+ ],
109
+ "engines": {
110
+ "node": ">=24.0.0"
111
+ }
112
+ }
@@ -0,0 +1,90 @@
1
+ CREATE TABLE `project` (
2
+ `id` text PRIMARY KEY,
3
+ `worktree` text NOT NULL,
4
+ `vcs` text,
5
+ `name` text,
6
+ `icon_url` text,
7
+ `icon_color` text,
8
+ `time_created` integer NOT NULL,
9
+ `time_updated` integer NOT NULL,
10
+ `time_initialized` integer,
11
+ `sandboxes` text NOT NULL
12
+ );
13
+ --> statement-breakpoint
14
+ CREATE TABLE `message` (
15
+ `id` text PRIMARY KEY,
16
+ `session_id` text NOT NULL,
17
+ `time_created` integer NOT NULL,
18
+ `time_updated` integer NOT NULL,
19
+ `data` text NOT NULL,
20
+ CONSTRAINT `fk_message_session_id_session_id_fk` FOREIGN KEY (`session_id`) REFERENCES `session`(`id`) ON DELETE CASCADE
21
+ );
22
+ --> statement-breakpoint
23
+ CREATE TABLE `part` (
24
+ `id` text PRIMARY KEY,
25
+ `message_id` text NOT NULL,
26
+ `session_id` text NOT NULL,
27
+ `time_created` integer NOT NULL,
28
+ `time_updated` integer NOT NULL,
29
+ `data` text NOT NULL,
30
+ CONSTRAINT `fk_part_message_id_message_id_fk` FOREIGN KEY (`message_id`) REFERENCES `message`(`id`) ON DELETE CASCADE
31
+ );
32
+ --> statement-breakpoint
33
+ CREATE TABLE `permission` (
34
+ `project_id` text PRIMARY KEY,
35
+ `time_created` integer NOT NULL,
36
+ `time_updated` integer NOT NULL,
37
+ `data` text NOT NULL,
38
+ CONSTRAINT `fk_permission_project_id_project_id_fk` FOREIGN KEY (`project_id`) REFERENCES `project`(`id`) ON DELETE CASCADE
39
+ );
40
+ --> statement-breakpoint
41
+ CREATE TABLE `session` (
42
+ `id` text PRIMARY KEY,
43
+ `project_id` text NOT NULL,
44
+ `parent_id` text,
45
+ `slug` text NOT NULL,
46
+ `directory` text NOT NULL,
47
+ `title` text NOT NULL,
48
+ `version` text NOT NULL,
49
+ `share_url` text,
50
+ `summary_additions` integer,
51
+ `summary_deletions` integer,
52
+ `summary_files` integer,
53
+ `summary_diffs` text,
54
+ `revert` text,
55
+ `permission` text,
56
+ `time_created` integer NOT NULL,
57
+ `time_updated` integer NOT NULL,
58
+ `time_compacting` integer,
59
+ `time_archived` integer,
60
+ CONSTRAINT `fk_session_project_id_project_id_fk` FOREIGN KEY (`project_id`) REFERENCES `project`(`id`) ON DELETE CASCADE
61
+ );
62
+ --> statement-breakpoint
63
+ CREATE TABLE `todo` (
64
+ `session_id` text NOT NULL,
65
+ `content` text NOT NULL,
66
+ `status` text NOT NULL,
67
+ `priority` text NOT NULL,
68
+ `position` integer NOT NULL,
69
+ `time_created` integer NOT NULL,
70
+ `time_updated` integer NOT NULL,
71
+ CONSTRAINT `todo_pk` PRIMARY KEY(`session_id`, `position`),
72
+ CONSTRAINT `fk_todo_session_id_session_id_fk` FOREIGN KEY (`session_id`) REFERENCES `session`(`id`) ON DELETE CASCADE
73
+ );
74
+ --> statement-breakpoint
75
+ CREATE TABLE `session_share` (
76
+ `session_id` text PRIMARY KEY,
77
+ `id` text NOT NULL,
78
+ `secret` text NOT NULL,
79
+ `url` text NOT NULL,
80
+ `time_created` integer NOT NULL,
81
+ `time_updated` integer NOT NULL,
82
+ CONSTRAINT `fk_session_share_session_id_session_id_fk` FOREIGN KEY (`session_id`) REFERENCES `session`(`id`) ON DELETE CASCADE
83
+ );
84
+ --> statement-breakpoint
85
+ CREATE INDEX `message_session_idx` ON `message` (`session_id`);--> statement-breakpoint
86
+ CREATE INDEX `part_message_idx` ON `part` (`message_id`);--> statement-breakpoint
87
+ CREATE INDEX `part_session_idx` ON `part` (`session_id`);--> statement-breakpoint
88
+ CREATE INDEX `session_project_idx` ON `session` (`project_id`);--> statement-breakpoint
89
+ CREATE INDEX `session_parent_idx` ON `session` (`parent_id`);--> statement-breakpoint
90
+ CREATE INDEX `todo_session_idx` ON `todo` (`session_id`);