soraacode 0.2.0 → 0.2.2

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 (353) hide show
  1. package/LICENSE +21 -0
  2. package/bin/soraacode.exe +10 -0
  3. package/package.json +17 -25
  4. package/{script/postinstall.mjs → postinstall.mjs} +5 -5
  5. package/AGENTS.md +0 -131
  6. package/Dockerfile +0 -18
  7. package/README.md +0 -15
  8. package/bin/opencode +0 -199
  9. package/bin/soraacode +0 -199
  10. package/bunfig.toml +0 -7
  11. package/git +0 -0
  12. package/migration/20260511173437_session-metadata/migration.sql +0 -1
  13. package/migration/20260511173437_session-metadata/snapshot.json +0 -1500
  14. package/parsers-config.ts +0 -1
  15. package/script/bench-search.ts +0 -94
  16. package/script/bench-test-suite.ts +0 -52
  17. package/script/build-headless.ts +0 -51
  18. package/script/build.ts +0 -245
  19. package/script/generate.ts +0 -14
  20. package/script/httpapi-exercise.ts +0 -1
  21. package/script/profile-test-files.ts +0 -42
  22. package/script/publish.ts +0 -213
  23. package/script/run-workspace-server +0 -106
  24. package/script/schema.ts +0 -77
  25. package/script/time.ts +0 -6
  26. package/script/trace-imports.ts +0 -153
  27. package/soraacode-0.1.7.tgz +0 -0
  28. package/specs/effect/error-boundaries-plan.md +0 -235
  29. package/specs/effect/errors.md +0 -207
  30. package/specs/effect/facades.md +0 -218
  31. package/specs/effect/guide.md +0 -247
  32. package/specs/effect/instance-context.md +0 -13
  33. package/specs/effect/loose-ends.md +0 -30
  34. package/specs/effect/migration.md +0 -62
  35. package/specs/effect/routes.md +0 -61
  36. package/specs/effect/schema.md +0 -88
  37. package/specs/effect/server-package.md +0 -58
  38. package/specs/effect/todo.md +0 -241
  39. package/specs/effect/tools.md +0 -88
  40. package/specs/openapi-translation-cleanup.md +0 -204
  41. package/specs/tui-plugins.md +0 -544
  42. package/specs/v2/api.ts +0 -67
  43. package/specs/v2/message-shape.md +0 -136
  44. package/specs/v2/notifications.md +0 -13
  45. package/specs/v2/tui-command-shim.md +0 -67
  46. package/src/account/account.ts +0 -481
  47. package/src/account/repo.ts +0 -171
  48. package/src/account/schema.ts +0 -99
  49. package/src/account/url.ts +0 -8
  50. package/src/acp/agent.ts +0 -95
  51. package/src/acp/config-option.ts +0 -206
  52. package/src/acp/content.ts +0 -269
  53. package/src/acp/directory.ts +0 -212
  54. package/src/acp/error.ts +0 -97
  55. package/src/acp/event.ts +0 -421
  56. package/src/acp/permission.ts +0 -254
  57. package/src/acp/profile.ts +0 -42
  58. package/src/acp/service.ts +0 -1226
  59. package/src/acp/session.ts +0 -232
  60. package/src/acp/tool.ts +0 -364
  61. package/src/acp/usage.ts +0 -243
  62. package/src/agent/agent.ts +0 -450
  63. package/src/agent/generate.txt +0 -75
  64. package/src/agent/prompt/compaction.txt +0 -5
  65. package/src/agent/prompt/explore.txt +0 -18
  66. package/src/agent/prompt/summary.txt +0 -11
  67. package/src/agent/prompt/title.txt +0 -44
  68. package/src/agent/subagent-permissions.ts +0 -27
  69. package/src/audio.d.ts +0 -14
  70. package/src/auth/index.ts +0 -97
  71. package/src/background/job.ts +0 -37
  72. package/src/bus/global.ts +0 -22
  73. package/src/cli/bootstrap.ts +0 -11
  74. package/src/cli/cmd/cmd.ts +0 -7
  75. package/src/cli/cmd/serve.ts +0 -24
  76. package/src/cli/effect/prompt.ts +0 -37
  77. package/src/cli/effect-cmd.ts +0 -96
  78. package/src/cli/error.ts +0 -130
  79. package/src/cli/heap.ts +0 -45
  80. package/src/cli/logo.ts +0 -2
  81. package/src/cli/network.ts +0 -80
  82. package/src/cli/ui.ts +0 -132
  83. package/src/command/index.ts +0 -177
  84. package/src/command/template/initialize.txt +0 -66
  85. package/src/command/template/review.txt +0 -101
  86. package/src/config/agent.ts +0 -59
  87. package/src/config/command.ts +0 -39
  88. package/src/config/config.ts +0 -707
  89. package/src/config/entry-name.ts +0 -19
  90. package/src/config/managed.ts +0 -69
  91. package/src/config/markdown.ts +0 -36
  92. package/src/config/parse.ts +0 -61
  93. package/src/config/paths.ts +0 -45
  94. package/src/config/plugin.ts +0 -79
  95. package/src/config/v2-compat.ts +0 -449
  96. package/src/config/variable.ts +0 -91
  97. package/src/control-plane/adapters/index.ts +0 -41
  98. package/src/control-plane/adapters/worktree.ts +0 -96
  99. package/src/control-plane/dev/README.md +0 -19
  100. package/src/control-plane/dev/debug-workspace-plugin.ts +0 -73
  101. package/src/control-plane/types.ts +0 -59
  102. package/src/control-plane/util.ts +0 -39
  103. package/src/control-plane/workspace-adapter-runtime.ts +0 -51
  104. package/src/control-plane/workspace-context.ts +0 -26
  105. package/src/control-plane/workspace.ts +0 -966
  106. package/src/effect/app-node-builder-v1.ts +0 -12
  107. package/src/effect/app-runtime.ts +0 -135
  108. package/src/effect/bootstrap-runtime.ts +0 -19
  109. package/src/effect/bridge.ts +0 -84
  110. package/src/effect/config-service.ts +0 -67
  111. package/src/effect/instance-ref.ts +0 -11
  112. package/src/effect/instance-registry.ts +0 -12
  113. package/src/effect/instance-state.ts +0 -69
  114. package/src/effect/promise.ts +0 -17
  115. package/src/effect/run-service.ts +0 -47
  116. package/src/effect/runner.ts +0 -217
  117. package/src/effect/runtime-flags.ts +0 -78
  118. package/src/env/index.ts +0 -41
  119. package/src/event-manifest.ts +0 -3
  120. package/src/event-v2-bridge.ts +0 -71
  121. package/src/format/formatter.ts +0 -404
  122. package/src/format/index.ts +0 -203
  123. package/src/git/index.ts +0 -348
  124. package/src/id/id.ts +0 -80
  125. package/src/ide/index.ts +0 -54
  126. package/src/image/image.ts +0 -172
  127. package/src/index-headless.ts +0 -89
  128. package/src/index.ts +0 -93
  129. package/src/installation/index.ts +0 -336
  130. package/src/lsp/client.ts +0 -650
  131. package/src/lsp/diagnostic.ts +0 -29
  132. package/src/lsp/language.ts +0 -121
  133. package/src/lsp/launch.ts +0 -21
  134. package/src/lsp/lsp.ts +0 -507
  135. package/src/lsp/server.ts +0 -1983
  136. package/src/markdown.d.ts +0 -4
  137. package/src/mcp/auth.ts +0 -163
  138. package/src/mcp/browser.ts +0 -37
  139. package/src/mcp/catalog.ts +0 -170
  140. package/src/mcp/index.ts +0 -1004
  141. package/src/mcp/oauth-callback.ts +0 -194
  142. package/src/mcp/oauth-provider.ts +0 -259
  143. package/src/node.ts +0 -4
  144. package/src/patch/index.ts +0 -686
  145. package/src/permission/arity.ts +0 -163
  146. package/src/permission/evaluate.ts +0 -1
  147. package/src/permission/index.ts +0 -223
  148. package/src/plugin/github-copilot/copilot.ts +0 -415
  149. package/src/plugin/github-copilot/models.ts +0 -261
  150. package/src/plugin/index.ts +0 -298
  151. package/src/plugin/install.ts +0 -439
  152. package/src/plugin/loader.ts +0 -237
  153. package/src/plugin/meta.ts +0 -188
  154. package/src/plugin/openai/README.md +0 -31
  155. package/src/plugin/openai/codex.ts +0 -575
  156. package/src/plugin/openai/ws-pool.ts +0 -271
  157. package/src/plugin/openai/ws.ts +0 -383
  158. package/src/plugin/pty-environment.ts +0 -24
  159. package/src/plugin/shared.ts +0 -323
  160. package/src/project/bootstrap-service.ts +0 -9
  161. package/src/project/bootstrap.ts +0 -58
  162. package/src/project/instance-context.ts +0 -24
  163. package/src/project/instance-runtime.ts +0 -16
  164. package/src/project/instance-store.ts +0 -213
  165. package/src/project/project.ts +0 -483
  166. package/src/project/vcs.ts +0 -423
  167. package/src/provider/auth.ts +0 -229
  168. package/src/provider/error.ts +0 -195
  169. package/src/provider/model-status.ts +0 -8
  170. package/src/provider/provider.ts +0 -1955
  171. package/src/provider/transform.ts +0 -1923
  172. package/src/question/index.ts +0 -161
  173. package/src/question/schema.ts +0 -4
  174. package/src/server/auth.ts +0 -48
  175. package/src/server/event.ts +0 -10
  176. package/src/server/global-lifecycle.ts +0 -28
  177. package/src/server/mdns.ts +0 -47
  178. package/src/server/proxy-util.ts +0 -48
  179. package/src/server/routes/instance/httpapi/AGENTS.md +0 -39
  180. package/src/server/routes/instance/httpapi/api.ts +0 -97
  181. package/src/server/routes/instance/httpapi/errors.ts +0 -193
  182. package/src/server/routes/instance/httpapi/groups/config.ts +0 -65
  183. package/src/server/routes/instance/httpapi/groups/control-plane.ts +0 -35
  184. package/src/server/routes/instance/httpapi/groups/control.ts +0 -76
  185. package/src/server/routes/instance/httpapi/groups/event.ts +0 -29
  186. package/src/server/routes/instance/httpapi/groups/experimental.ts +0 -275
  187. package/src/server/routes/instance/httpapi/groups/file.ts +0 -185
  188. package/src/server/routes/instance/httpapi/groups/global.ts +0 -139
  189. package/src/server/routes/instance/httpapi/groups/instance.ts +0 -206
  190. package/src/server/routes/instance/httpapi/groups/mcp.ts +0 -156
  191. package/src/server/routes/instance/httpapi/groups/metadata.ts +0 -18
  192. package/src/server/routes/instance/httpapi/groups/permission.ts +0 -61
  193. package/src/server/routes/instance/httpapi/groups/project-copy.ts +0 -32
  194. package/src/server/routes/instance/httpapi/groups/project.ts +0 -93
  195. package/src/server/routes/instance/httpapi/groups/provider.ts +0 -101
  196. package/src/server/routes/instance/httpapi/groups/pty.ts +0 -172
  197. package/src/server/routes/instance/httpapi/groups/query.ts +0 -12
  198. package/src/server/routes/instance/httpapi/groups/question.ts +0 -74
  199. package/src/server/routes/instance/httpapi/groups/session.ts +0 -462
  200. package/src/server/routes/instance/httpapi/groups/sync.ts +0 -113
  201. package/src/server/routes/instance/httpapi/groups/tui.ts +0 -208
  202. package/src/server/routes/instance/httpapi/groups/workspace.ts +0 -141
  203. package/src/server/routes/instance/httpapi/handlers/config.ts +0 -34
  204. package/src/server/routes/instance/httpapi/handlers/control-plane.ts +0 -37
  205. package/src/server/routes/instance/httpapi/handlers/control.ts +0 -43
  206. package/src/server/routes/instance/httpapi/handlers/event.ts +0 -99
  207. package/src/server/routes/instance/httpapi/handlers/experimental.ts +0 -193
  208. package/src/server/routes/instance/httpapi/handlers/file.ts +0 -139
  209. package/src/server/routes/instance/httpapi/handlers/global.ts +0 -126
  210. package/src/server/routes/instance/httpapi/handlers/instance.ts +0 -110
  211. package/src/server/routes/instance/httpapi/handlers/mcp.ts +0 -111
  212. package/src/server/routes/instance/httpapi/handlers/permission.ts +0 -41
  213. package/src/server/routes/instance/httpapi/handlers/project-copy.ts +0 -83
  214. package/src/server/routes/instance/httpapi/handlers/project.ts +0 -63
  215. package/src/server/routes/instance/httpapi/handlers/provider.ts +0 -116
  216. package/src/server/routes/instance/httpapi/handlers/pty.ts +0 -273
  217. package/src/server/routes/instance/httpapi/handlers/question.ts +0 -54
  218. package/src/server/routes/instance/httpapi/handlers/session-errors.ts +0 -21
  219. package/src/server/routes/instance/httpapi/handlers/session.ts +0 -442
  220. package/src/server/routes/instance/httpapi/handlers/sync.ts +0 -89
  221. package/src/server/routes/instance/httpapi/handlers/tui.ts +0 -131
  222. package/src/server/routes/instance/httpapi/handlers/workspace.ts +0 -102
  223. package/src/server/routes/instance/httpapi/lifecycle.ts +0 -54
  224. package/src/server/routes/instance/httpapi/middleware/authorization.ts +0 -150
  225. package/src/server/routes/instance/httpapi/middleware/compression.ts +0 -64
  226. package/src/server/routes/instance/httpapi/middleware/cors-vary.ts +0 -29
  227. package/src/server/routes/instance/httpapi/middleware/error.ts +0 -44
  228. package/src/server/routes/instance/httpapi/middleware/fence.ts +0 -25
  229. package/src/server/routes/instance/httpapi/middleware/instance-context.ts +0 -43
  230. package/src/server/routes/instance/httpapi/middleware/proxy.ts +0 -131
  231. package/src/server/routes/instance/httpapi/middleware/schema-error.ts +0 -41
  232. package/src/server/routes/instance/httpapi/middleware/workspace-routing.ts +0 -250
  233. package/src/server/routes/instance/httpapi/public.ts +0 -537
  234. package/src/server/routes/instance/httpapi/server.ts +0 -325
  235. package/src/server/routes/instance/httpapi/websocket-tracker.ts +0 -60
  236. package/src/server/server.ts +0 -224
  237. package/src/server/shared/fence.ts +0 -60
  238. package/src/server/shared/pty-ticket.ts +0 -15
  239. package/src/server/shared/public-ui.ts +0 -12
  240. package/src/server/shared/tui-control.ts +0 -28
  241. package/src/server/shared/ui.ts +0 -108
  242. package/src/server/shared/workspace-routing.ts +0 -45
  243. package/src/server/tui-event.ts +0 -1
  244. package/src/session/compaction.ts +0 -608
  245. package/src/session/instruction.ts +0 -237
  246. package/src/session/llm/AGENTS.md +0 -90
  247. package/src/session/llm/ai-sdk.ts +0 -291
  248. package/src/session/llm/native-request.ts +0 -196
  249. package/src/session/llm/native-runtime.ts +0 -195
  250. package/src/session/llm/request.ts +0 -226
  251. package/src/session/llm.ts +0 -390
  252. package/src/session/message-error.ts +0 -14
  253. package/src/session/message-v2.ts +0 -742
  254. package/src/session/message.ts +0 -148
  255. package/src/session/overflow.ts +0 -34
  256. package/src/session/processor.ts +0 -732
  257. package/src/session/prompt/build-switch.txt +0 -5
  258. package/src/session/prompt/default.txt +0 -35
  259. package/src/session/prompt/plan-mode.txt +0 -70
  260. package/src/session/prompt/plan.txt +0 -26
  261. package/src/session/prompt.ts +0 -1631
  262. package/src/session/reminders.ts +0 -92
  263. package/src/session/retry.ts +0 -209
  264. package/src/session/revert.ts +0 -136
  265. package/src/session/run-state.ts +0 -151
  266. package/src/session/schema.ts +0 -26
  267. package/src/session/session.ts +0 -1016
  268. package/src/session/status.ts +0 -56
  269. package/src/session/summary.ts +0 -160
  270. package/src/session/system.ts +0 -123
  271. package/src/session/todo.ts +0 -74
  272. package/src/session/tools.ts +0 -590
  273. package/src/share/session.ts +0 -58
  274. package/src/share/share-next.ts +0 -371
  275. package/src/skill/discovery.ts +0 -140
  276. package/src/skill/index.ts +0 -354
  277. package/src/snapshot/index.ts +0 -807
  278. package/src/sql.d.ts +0 -4
  279. package/src/storage/schema.ts +0 -5
  280. package/src/storage/storage.ts +0 -327
  281. package/src/sync/README.md +0 -179
  282. package/src/sync/schema.ts +0 -11
  283. package/src/temporary.ts +0 -31
  284. package/src/tool/apply_patch.ts +0 -313
  285. package/src/tool/apply_patch.txt +0 -14
  286. package/src/tool/code-mode.ts +0 -310
  287. package/src/tool/edit.ts +0 -737
  288. package/src/tool/edit.txt +0 -13
  289. package/src/tool/external-directory.ts +0 -49
  290. package/src/tool/glob.ts +0 -76
  291. package/src/tool/glob.txt +0 -7
  292. package/src/tool/grep.ts +0 -115
  293. package/src/tool/grep.txt +0 -7
  294. package/src/tool/invalid.ts +0 -21
  295. package/src/tool/json-schema.ts +0 -164
  296. package/src/tool/lsp.ts +0 -113
  297. package/src/tool/lsp.txt +0 -1
  298. package/src/tool/mcp-websearch.ts +0 -96
  299. package/src/tool/plan-enter.txt +0 -1
  300. package/src/tool/plan-exit.txt +0 -1
  301. package/src/tool/plan.ts +0 -79
  302. package/src/tool/question.ts +0 -44
  303. package/src/tool/question.txt +0 -1
  304. package/src/tool/read.ts +0 -386
  305. package/src/tool/read.txt +0 -13
  306. package/src/tool/registry.ts +0 -455
  307. package/src/tool/schema.ts +0 -14
  308. package/src/tool/shell/id.ts +0 -19
  309. package/src/tool/shell/prompt.ts +0 -293
  310. package/src/tool/shell/shell.txt +0 -21
  311. package/src/tool/shell.ts +0 -645
  312. package/src/tool/skill.ts +0 -70
  313. package/src/tool/skill.txt +0 -1
  314. package/src/tool/task.ts +0 -371
  315. package/src/tool/task.txt +0 -11
  316. package/src/tool/todo.ts +0 -46
  317. package/src/tool/todowrite.txt +0 -11
  318. package/src/tool/tool.ts +0 -183
  319. package/src/tool/truncate.ts +0 -156
  320. package/src/tool/truncation-dir.ts +0 -4
  321. package/src/tool/webfetch.ts +0 -192
  322. package/src/tool/webfetch.txt +0 -9
  323. package/src/tool/websearch.ts +0 -143
  324. package/src/tool/websearch.txt +0 -9
  325. package/src/tool/write.ts +0 -104
  326. package/src/tool/write.txt +0 -11
  327. package/src/util/archive.ts +0 -17
  328. package/src/util/bom.ts +0 -27
  329. package/src/util/data-url.ts +0 -9
  330. package/src/util/defer.ts +0 -10
  331. package/src/util/effect-http-client.ts +0 -11
  332. package/src/util/error.ts +0 -16
  333. package/src/util/filesystem.ts +0 -251
  334. package/src/util/html.ts +0 -8
  335. package/src/util/iife.ts +0 -3
  336. package/src/util/lazy.ts +0 -20
  337. package/src/util/local-context.ts +0 -25
  338. package/src/util/locale.ts +0 -4
  339. package/src/util/media.ts +0 -26
  340. package/src/util/process.ts +0 -177
  341. package/src/util/proxy-env.ts +0 -72
  342. package/src/util/queue.ts +0 -32
  343. package/src/util/record.ts +0 -3
  344. package/src/util/repository.ts +0 -232
  345. package/src/util/rpc.ts +0 -66
  346. package/src/util/signal.ts +0 -12
  347. package/src/util/timeout.ts +0 -13
  348. package/src/util/token.ts +0 -1
  349. package/src/util/wildcard.ts +0 -59
  350. package/src/worktree/index.ts +0 -623
  351. package/sst-env.d.ts +0 -10
  352. package/tsconfig.headless.json +0 -13
  353. package/tsconfig.json +0 -16
@@ -1,241 +0,0 @@
1
- # Effect TODO
2
-
3
- Short roadmap for Effect cleanup in `packages/opencode`.
4
-
5
- Current patterns and examples live in [`guide.md`](./guide.md). Error
6
- boundary migration details live in
7
- [`error-boundaries-plan.md`](./error-boundaries-plan.md). Test migration rules live in
8
- [`test/EFFECT_TEST_MIGRATION.md`](../../test/EFFECT_TEST_MIGRATION.md).
9
- Older deep-dive notes in this directory may still be useful, but treat
10
- this roadmap and the guide as the current entry points.
11
-
12
- This is a planning map, not a verified inventory. Before starting a task,
13
- re-run a targeted `git grep` from current `dev` and update this file if
14
- the inventory changed.
15
-
16
- ## Priorities
17
-
18
- ```text
19
- P0 ERR + RENDER + HTTP
20
- Make expected failures typed, render them well, and stop relying on
21
- generic HTTP error guesswork.
22
-
23
- P1 TEST
24
- Convert touched tests to the ideal Effect test patterns from the guide.
25
-
26
- P2 RF
27
- Move mutable runtime flags into typed runtime/config services.
28
-
29
- P3 GLOBAL
30
- Make global paths explicit and remove import-time side effects.
31
-
32
- P4 INST + BRIDGE
33
- Remove ambient Instance coupling while keeping Promise/callback interop.
34
-
35
- P5 PROC + FS
36
- Replace raw process/filesystem edges with typed Effect services.
37
-
38
- P6 OA
39
- Shrink OpenAPI compatibility shims as source schemas improve.
40
- ```
41
-
42
- ## Work Paths
43
-
44
- - `ERR` Typed errors — replace legacy `NamedError.create(...)` and
45
- `Effect.die(...)` for expected service failures with
46
- `Schema.TaggedErrorClass` errors on the Effect error channel.
47
- Shrinks: [`NamedError`](../../../core/src/util/error.ts) usage.
48
- - `RENDER` User-visible error rendering — preserve structured typed-error
49
- details at CLI, HTTP, and tool boundaries.
50
- Shrinks: opaque `Error: Name` rendering.
51
- - `HTTP` HTTP route cleanup — make route errors explicit instead of
52
- relying on generic middleware to guess status/body from error names.
53
- Shrinks: [`middleware/error.ts`](../../src/server/routes/instance/httpapi/middleware/error.ts)
54
- and route-level compatibility shims.
55
- - `TEST` Effect test migration — use `testEffect`, `it.live`, and
56
- `it.instance` with explicit layers.
57
- Shrinks: Promise-style tests, sleeps, mutable global test flags.
58
- - `RF` RuntimeFlags / Flag deletion — move mutable
59
- [`Flag`](../../../core/src/flag/flag.ts) reads into typed runtime/config
60
- services.
61
- Shrinks: [`flag.ts`](../../../core/src/flag/flag.ts),
62
- [`test/fixture/flag.ts`](../../test/fixture/flag.ts).
63
- - `GLOBAL` Global paths / import side effects — make global path state
64
- explicit and testable instead of mutable module state.
65
- Shrinks: [`global.ts`](../../../core/src/global.ts) import-time side
66
- effects, mutable `Global.Path` overrides, and its `Flag` dependency.
67
- - `INST` Instance context — keep project context explicit through Effect refs
68
- and bridge boundaries.
69
- - `BRIDGE` Promise/callback interop — keep bridge helpers, but reduce
70
- legacy ALS coupling.
71
- Shrinks: ad hoc Promise/callback re-entry code.
72
- - `PROC` AppProcess migration — prefer `AppProcess.Service` over raw
73
- process wrappers.
74
- Shrinks: direct spawn callsites and legacy process helpers.
75
- - `FS` FSUtil migration — prefer `FSUtil.Service` over raw
76
- filesystem APIs.
77
- Shrinks: direct `fs` / `Bun.file` service callsites where inappropriate.
78
- - `RT` Runtime/facade cleanup — remove service-local `makeRuntime`
79
- facades when not intentional.
80
- Shrinks: async facade exports around services and
81
- [`run-service.ts`](../../src/effect/run-service.ts) usage.
82
- - `OA` OpenAPI compatibility — tighten source schemas instead of
83
- post-processing generated OpenAPI.
84
- Shrinks: schema workaround blocks in
85
- [`public.ts`](../../src/server/routes/instance/httpapi/public.ts).
86
-
87
- ## P0: Errors, Rendering, And HTTP
88
-
89
- This should be the next big cleanup theme. The codebase is moving toward
90
- typed Effect failures, but the user-facing boundaries still leak old
91
- shapes and sometimes collapse rich errors into opaque strings.
92
-
93
- ### Problems
94
-
95
- - Some expected service failures still use `NamedError.create(...)` or
96
- collapse to `Effect.die(...)`. The storage/worktree/provider-auth
97
- conversions are done; an inventory sweep is needed for the rest.
98
- - HTTP error middleware still guesses status codes from error names —
99
- some entries (e.g. storage `NotFound`, provider auth) can now be
100
- removed, but the middleware overall has not shrunk.
101
- - Route handlers and route groups do not consistently declare the public
102
- error body they intend to expose.
103
- - Repeated route error translations do not yet have a clear home: some
104
- should stay inline, some deserve tiny shared mapper helpers.
105
-
106
- ### Target Shape
107
-
108
- - Services define expected failures with `Schema.TaggedErrorClass`.
109
- - Services export an `Error` union and include it in method return types.
110
- - Expected failures stay on the Effect error channel.
111
- - `Effect.die(...)` is reserved for defects: bugs, impossible states,
112
- violated invariants, or final unknown-boundary fallbacks.
113
- - Inside `Effect.gen` / `Effect.fn`, use `yield* new MyError(...)` for
114
- direct expected failures.
115
- - Domain services do not import HTTP status codes, `HttpApiError`, or
116
- route-specific error schemas.
117
- - HTTP route groups make their public error contracts obvious.
118
- - Handlers map service errors to declared HTTP errors at the boundary.
119
- - Shared mapper helpers are only for repeated translations, not a giant
120
- central registry of every domain error.
121
- - Generic HTTP middleware should shrink; it should not accumulate more
122
- name-based domain knowledge.
123
-
124
- ### Recently completed
125
-
126
- - [x] `RENDER-1` CLI tagged config error rendering (#27256, tests #27257).
127
- - [x] `ERR-1` [`storage/storage.ts`](../../src/storage/storage.ts) typed
128
- `NotFoundError` (#27265) and removal of the server defect fallback
129
- (#27287).
130
- - [x] `ERR-2` [`worktree/index.ts`](../../src/worktree/index.ts) typed
131
- errors (#27296).
132
- - [x] `ERR-3` [`provider/auth.ts`](../../src/provider/auth.ts) typed
133
- validation/oauth errors (#27301).
134
- - [x] `HTTP-1` Unknown-500 details no longer leaked (#27251); follow-up
135
- to stop exposing named defects (#27471).
136
- - [x] Session message reads typed and made effectful (#27269, #27275,
137
- #27280, #27291).
138
- - [x] Session HTTP error contracts tightened (#27308); busy-session
139
- mapping centralized (#27375, #27473).
140
- - [x] Provider init (#27484) and LSP init (#27494) errors typed.
141
-
142
- ### First PR Candidates
143
-
144
- - [ ] `HTTP-2` Audit one route group for explicit error contracts and
145
- decide which mappings stay inline vs. shared helper.
146
- - [ ] `ERR-4` Sweep remaining `NamedError.create(...)` and
147
- `Effect.die(...)` callsites for expected failures — re-run `git
148
- grep` to build a current inventory.
149
- - [ ] `RENDER-2` Audit CLI and TUI surfaces for any remaining opaque
150
- `Error: Name` rendering of typed errors.
151
-
152
- ## P1: Tests
153
-
154
- When touching tests, migrate them toward the ideal patterns in
155
- [`test/EFFECT_TEST_MIGRATION.md`](../../test/EFFECT_TEST_MIGRATION.md):
156
-
157
- - Use `testEffect(...)` with explicit layers.
158
- - Prefer `it.instance(...)` for service tests that need an instance.
159
- - Prefer `it.live(...)` for real timers, filesystem mtimes, child
160
- processes, git, locks, or other live integration behavior.
161
- - Avoid sleeps; wait on real events or deterministic state transitions.
162
- - Do not mutate `process.env` or mutable globals after layers are built.
163
- - Use explicit layer variants, such as `RuntimeFlags.layer(...)`, for
164
- behavior changes.
165
-
166
- ## P2: RuntimeFlags / Flag Deletion
167
-
168
- Recently completed:
169
-
170
- - [x] Plugin/pure-mode flags moved to RuntimeFlags.
171
- - [x] Tool visibility flags moved to RuntimeFlags.
172
- - [x] Built-in websearch provider selection uses the same runtime flags as
173
- tool visibility.
174
- - [x] Removed global default-plugin disabling from test preload.
175
- - [x] `RF-1` Reference reads routed through runtime flags (#27318).
176
- - [x] `RF-2` Plan-mode prompt read routed through runtime flags (#27320).
177
- - [x] `RF-3` Event-system reads routed through runtime flags (#27323).
178
- - [x] `RF-4` Workspaces reads routed through runtime flags for session
179
- (#27335), sync (#27336), and control-plane (#27337).
180
- - [x] LLM client (#27368) and installation client (#27369) routed
181
- through runtime flags.
182
- - [x] TUI plugin runtime flags simplified (#27506).
183
- - [x] Background-subagents flag moved to RuntimeFlags, then removed
184
- (`refactor(task): use runtime flag for background subagents`,
185
- `refactor(flags): remove background subagents flag`).
186
-
187
- Remaining cleanup:
188
-
189
- - [ ] Sweep lingering `Flag.*` reads — many CLI/TUI/config/observability
190
- callsites still import [`flag.ts`](../../../core/src/flag/flag.ts).
191
- Decide per-callsite whether to route through RuntimeFlags, accept
192
- as legitimate env/config boundary, or migrate to typed `Config`.
193
- - [ ] Delete [`test/fixture/flag.ts`](../../test/fixture/flag.ts) once
194
- tests no longer mutate `Flag`.
195
- - [ ] Delete [`flag.ts`](../../../core/src/flag/flag.ts) once no packages
196
- import it.
197
-
198
- ## P3: Global Paths
199
-
200
- [`global.ts`](../../../core/src/global.ts) is real connective tissue, not
201
- just cosmetic ugliness. It currently mixes path calculation, import-time
202
- directory creation, `Flock` setup, mutable exported `Path` state, and a
203
- `Flag` dependency.
204
-
205
- Problems to reduce:
206
-
207
- - Importing the module creates directories.
208
- - Tests override `Global.Path` by mutating exported module state.
209
- - Most callers use `Global.Path` directly instead of the Effect service.
210
- - `Global.make()` still reads mutable `Flag.OPENCODE_CONFIG_DIR`.
211
-
212
- Next PR candidates:
213
-
214
- - [ ] Replace mutable `Global.Path` test overrides with explicit test
215
- layers or scoped helpers.
216
- - [ ] Move directory creation and `Flock` setup behind an explicit init
217
- boundary where possible.
218
- - [ ] Remove the `Flag` dependency from global path resolution.
219
-
220
- ## P4: Instance And Bridge
221
-
222
- Instance context migration is complete for the legacy sync shim. Promise and callback interop continues through [`effect/bridge.ts`](../../src/effect/bridge.ts).
223
-
224
- Current rules:
225
-
226
- - Effect services read instance data from `InstanceRef`, `WorkspaceRef`, `InstanceState`, or explicit arguments.
227
- - Plain JavaScript callback boundaries use `EffectBridge` or explicit context arguments.
228
- - Runtime entrypoints must provide refs explicitly when they are instance-scoped.
229
-
230
- ## Lower Priority Tracks
231
-
232
- - `PROC` / `FS` — continue AppProcess and FSUtil migrations as
233
- focused PRs when touching relevant files.
234
- - `RT` — remove service-local runtime facades only when they are not an
235
- intentional boundary.
236
- - `OA` — shrink [`public.ts`](../../src/server/routes/instance/httpapi/public.ts)
237
- by tightening source schemas one workaround at a time.
238
- - `fetch` → `HttpClient` — migrate raw fetch callsites when the caller is
239
- already effectful or being effectified.
240
- - `Tools` — remaining tool cleanup is narrow: `webfetch` HTML extraction
241
- and `shell` raw stream/promise edges.
@@ -1,88 +0,0 @@
1
- # Tool migration
2
-
3
- Practical reference for the current tool-migration state in `packages/opencode`.
4
-
5
- ## Status
6
-
7
- `Tool.Def.execute` and `Tool.Info.init` already return `Effect` on this branch, and the built-in tool surface is now largely on the target shape.
8
-
9
- The current exported tools in `src/tool` all use `Tool.define(...)` with Effect-based initialization, and nearly all of them already build their tool body with `Effect.gen(...)` and `Effect.fn(...)`.
10
-
11
- So the remaining work is no longer "convert tools to Effect at all". The remaining work is mostly:
12
-
13
- 1. remove Promise and raw platform bridges inside individual tool bodies
14
- 2. swap tool internals to Effect-native services like `FSUtil`, `HttpClient`, and `ChildProcessSpawner`
15
- 3. keep tests and callers aligned with `yield* info.init()` and real service graphs
16
-
17
- ## Current shape
18
-
19
- `Tool.define(...)` is already the Effect-native helper here.
20
-
21
- - `init` is an `Effect`
22
- - `info.init()` returns an `Effect`
23
- - `execute(...)` returns an `Effect`
24
-
25
- That means a tool does not need a separate `Tool.defineEffect(...)` helper to count as migrated. A tool is effectively migrated when its init and execute path stay Effect-native, even if some internals still bridge to Promise-based or raw APIs.
26
-
27
- ## Tests
28
-
29
- Tool tests should use the existing Effect helpers in `packages/opencode/test/lib/effect.ts`:
30
-
31
- - Use `testEffect(...)` / `it.live(...)` instead of creating fake local wrappers around effectful tools.
32
- - Yield the real tool export, then initialize it: `const info = yield* ReadTool`, `const tool = yield* info.init()`.
33
- - Run tests inside a real instance with `provideTmpdirInstance(...)` or `provideInstance(tmpdirScoped(...))` so instance-scoped services resolve exactly as they do in production.
34
-
35
- This keeps tool tests aligned with the production service graph and makes follow-up cleanup mostly mechanical.
36
-
37
- ## Exported tools
38
-
39
- These exported tool definitions currently use `Tool.define(...)` in `src/tool`:
40
-
41
- - [x] `apply_patch.ts`
42
- - [x] `bash.ts`
43
- - [x] `edit.ts`
44
- - [x] `glob.ts`
45
- - [x] `grep.ts`
46
- - [x] `invalid.ts`
47
- - [x] `lsp.ts`
48
- - [x] `plan.ts`
49
- - [x] `question.ts`
50
- - [x] `read.ts`
51
- - [x] `skill.ts`
52
- - [x] `task.ts`
53
- - [x] `todo.ts`
54
- - [x] `webfetch.ts`
55
- - [x] `websearch.ts`
56
- - [x] `write.ts`
57
-
58
- Notes:
59
-
60
- - There is no current `ls.ts` tool file on this branch.
61
- - `truncate.ts` is an Effect service used by tools, not a tool definition itself.
62
- - `mcp-exa.ts`, `external-directory.ts`, and `schema.ts` are support modules, not standalone tool definitions.
63
-
64
- ## Follow-up cleanup
65
-
66
- Most exported tools are already on the intended Effect-native shape. The remaining cleanup is narrower than the old checklist implied.
67
-
68
- Current spot cleanups worth tracking:
69
-
70
- - [x] `read.ts` — streams through `FSUtil.Service.stream` with `Stream.splitLines`; the legacy Node stream / `readline` helper is gone
71
- - [ ] `bash.ts` — already uses Effect child-process primitives; only keep tracking shell-specific platform bridges and parser/loading details as they come up
72
- - [ ] `webfetch.ts` — already uses `HttpClient`; remaining work is limited to smaller boundary helpers like HTML text extraction
73
- - [ ] `file/ripgrep.ts` — adjacent to tool migration; still has raw fs/process usage that affects `grep.ts` and file-search routes
74
- - [x] `patch/index.ts` — apply path now returns `Effect` over `FSUtil.Service`; the parser and chunk replacer stay pure
75
-
76
- Notable items that are already effectively on the target path and do not need separate migration bullets right now:
77
-
78
- - `apply_patch.ts`
79
- - `grep.ts`
80
- - `write.ts`
81
- - `websearch.ts`
82
- - `edit.ts`
83
-
84
- ## Filesystem notes
85
-
86
- Current raw fs users that still appear relevant here:
87
-
88
- - `file/ripgrep.ts` — `fs/promises`
@@ -1,204 +0,0 @@
1
- # OpenAPI Translation Cleanup Plan
2
-
3
- ## Goal
4
-
5
- Trim `packages/opencode/src/server/routes/instance/httpapi/public.ts` until OpenAPI generation is mostly a direct projection of the `HttpApi` route declarations, without breaking the generated SDK surface.
6
-
7
- The main failure mode to eliminate is spec-only behavior: anything that appears in `/doc` or the SDK but is not accepted by runtime `HttpApi` validation.
8
-
9
- ## Current Culprit
10
-
11
- `public.ts` exports `PublicApi` with a large `OpenApi.annotations({ transform })` hook. That hook rewrites the generated spec for legacy SDK compatibility.
12
-
13
- The highest-risk rewrite is `InstanceQueryParameters`, which injected `directory` and `workspace` into every instance route in OpenAPI even when the runtime query schema did not accept them. This caused the SDK and `/doc` to advertise calls that could fail with `400` at runtime.
14
-
15
- ## Non-Negotiables
16
-
17
- - Do not break the generated JavaScript SDK without an explicit versioned migration plan.
18
- - Runtime route schemas are the source of truth for accepted params, payloads, and responses.
19
- - `/doc`, generated SDK types, and runtime validation must agree for every endpoint.
20
- - Prefer endpoint or schema annotations over post-generation spec surgery.
21
- - Remove one category of rewrite at a time, with focused compatibility checks.
22
-
23
- ## PR Checklist
24
-
25
- Status legend: `[x]` done locally, `[~]` in progress locally, `[ ]` not started.
26
-
27
- Current combined PR scope:
28
-
29
- - `[x]` PR 1 drift tests: added OpenAPI/runtime query assertions and a negative fixture in `test/server/httpapi-query-schema-drift.test.ts`.
30
- - `[x]` PR 2 injection removal: removed broad `directory` / `workspace` post-generation injection from `public.ts` and replaced it with explicit runtime query schemas on affected routes.
31
- - `[ ]` PR 3+ cleanup: leave query override, path pattern, error shape, auth, and component-shape rewrites for later PRs.
32
-
33
- ### PR 1: Add OpenAPI/Runtime Query Drift Tests
34
-
35
- - `[x]` Add or extend `packages/opencode/test/server/httpapi-query-schema-drift.test.ts`.
36
- - `[x]` Import `OpenApi.fromApi` and `PublicApi`.
37
- - `[x]` Generate the public spec in-process with `OpenApi.fromApi(PublicApi)`.
38
- - `[x]` Add a route inventory for the existing runtime reproducers: `session`, `file`, `experimental`, and `instance` routes.
39
- - `[x]` For each inventory entry, assert every OpenAPI query parameter is declared by the runtime query schema.
40
- - `[x]` Add a negative regression fixture that fails on spec-only `directory` / `workspace` params.
41
- - `[x]` Keep this part test-only.
42
-
43
- Verification:
44
-
45
- - `[x]` `bun test --timeout 5000 test/server/httpapi-query-schema-drift.test.ts` from `packages/opencode`.
46
- - `[x]` `bun typecheck` from `packages/opencode`.
47
-
48
- ### PR 2: Delete Spec-Only Workspace Query Injection
49
-
50
- - `[x]` Edit `packages/opencode/src/server/routes/instance/httpapi/public.ts`.
51
- - `[x]` Delete `InstanceQueryParameters`.
52
- - `[x]` Delete the `isInstanceRoute` constant.
53
- - `[x]` Delete the branch that prepends `directory` and `workspace` to every instance operation.
54
- - `[x]` Keep `normalizeParameter(param, route)` for parameters that are actually produced by `HttpApi`.
55
- - `[x]` Add `WorkspaceRoutingQuery` / `WorkspaceRoutingQueryFields` to runtime query schemas for affected routes.
56
- - `[x]` Regenerate SDK and inspect diff. Result: no `directory` / `workspace` request-param removals; generated SDK diff is declaration ordering only.
57
-
58
- Notes:
59
-
60
- - Added `WorkspaceRoutingQuery` in `middleware/workspace-routing.ts` as the canonical runtime schema for middleware-consumed query params.
61
- - Replaced v2 union-query schemas with plain struct query schemas so `OpenApi.fromApi` emits their query params directly. This intentionally exposes the beta `/api/session` pagination/filter params in the SDK; cursor mutual-exclusion rules now live in the handlers, while `directory` / `workspace` remain allowed with cursors for routing.
62
-
63
- Expected code shape:
64
-
65
- ```ts
66
- for (const param of operation.parameters ?? []) normalizeParameter(param, `${method.toUpperCase()} ${path}`)
67
- ```
68
-
69
- Verification:
70
-
71
- - `[x]` `bun test --timeout 5000 test/server/httpapi-query-schema-drift.test.ts` from `packages/opencode`.
72
- - `[x]` `bun dev generate > /tmp/opencode-openapi.json` from `packages/opencode`.
73
- - `[x]` `./packages/sdk/js/script/build.ts` from repo root.
74
- - `[x]` Inspect SDK diff for removed `directory` / `workspace` params. Result: none after explicit runtime schemas; v2 list/message now also expose their existing beta pagination/filter query params in the SDK.
75
- - `[x]` `bun typecheck` from `packages/opencode`.
76
-
77
- ### PR 3: Replace Broad Query Type Override Sets With Route-Level Helpers
78
-
79
- - Edit `packages/opencode/src/server/routes/instance/httpapi/public.ts`.
80
- - Remove broad name-based assumptions from `QueryNumberParameters` and `QueryBooleanParameters` one field at a time.
81
- - Add shared query schema helpers near route group code if needed, for example in `groups/metadata.ts` or a new `groups/query.ts`.
82
- - Prefer route declarations like `Schema.NumberFromString.check(...)` and boolean string decoders like the existing `QueryBoolean` in `groups/session.ts`.
83
- - Keep only route-specific `QueryParameterSchemas` entries when SDK compatibility requires a public encoded type that Effect OpenAPI cannot emit yet.
84
-
85
- Concrete first targets:
86
-
87
- - `[x]` Consolidate `roots` / `archived` onto an explicit shared route schema helper. Keep `QueryBooleanParameters` until route-level schema metadata can preserve the SDK's `boolean | "true" | "false"` call shape without a global transform.
88
- - `[x]` Replace broad `QueryNumberParameters` reliance for `start` / `cursor` / `limit` with route-specific SDK compatibility schemas. Keep improving route-level constraints where behavior is intentionally stricter.
89
- - Keep `GET /find/file limit`, `GET /session/{sessionID}/diff messageID`, and `GET /session/{sessionID}/message limit` overrides until their route schemas generate identical SDK types directly.
90
-
91
- Verification:
92
-
93
- - Focused HTTP tests for changed query fields.
94
- - `bun dev generate > /tmp/opencode-openapi.json` from `packages/opencode`.
95
- - `./packages/sdk/js/script/build.ts` from repo root.
96
- - Inspect generated SDK request param types before deleting each override.
97
- - `bun typecheck` from `packages/opencode`.
98
-
99
- ### PR 4: Move Path Parameter Patterns Into ID Schemas
100
-
101
- - Audit `PathParameterSchemas` and `pathParameterSchema()` in `public.ts`.
102
- - Check source schemas in files like `packages/opencode/src/session/schema.ts`, `packages/opencode/src/permission/schema.ts`, and pty schema definitions.
103
- - Add or fix OpenAPI-compatible annotations on branded ID schemas so generated path params include the same patterns without `public.ts` overrides.
104
- - Delete one path override only after generated OpenAPI is unchanged for that param.
105
-
106
- Concrete first targets:
107
-
108
- - `[x]` `sessionID`
109
- - `[x]` `messageID`
110
- - `[x]` `partID`
111
- - `[x]` `permissionID`
112
- - `[x]` `ptyID`
113
-
114
- - `[x]` Remove ambiguous workspace `id` path overrides once the endpoint source schema emits the `wrk` pattern.
115
-
116
- Verification:
117
-
118
- - `bun dev generate > /tmp/opencode-openapi.json` from `packages/opencode`.
119
- - `./packages/sdk/js/script/build.ts` from repo root.
120
- - Inspect generated path param types and patterns.
121
- - `bun typecheck` from `packages/opencode`.
122
-
123
- ### PR 5: Replace Built-In Error Rewrites With Declared API Errors
124
-
125
- - Edit route group files under `packages/opencode/src/server/routes/instance/httpapi/groups/`.
126
- - Replace SDK-visible `HttpApiError.BadRequest` / `HttpApiError.NotFound` with explicit error schemas from `packages/opencode/src/server/routes/instance/httpapi/errors.ts` or add new ones there.
127
- - Update handlers to fail with the declared API errors at the boundary.
128
- - Remove matching cases from `normalizeLegacyErrorResponses()` only after generated OpenAPI remains SDK-compatible.
129
- - Do this group by group, starting with one small route group.
130
-
131
- Concrete first targets:
132
-
133
- - `groups/config.ts` `PATCH /config` bad request.
134
- - `groups/session.ts` endpoints that already translate domain not-found errors.
135
- - `groups/file.ts` if any handler currently relies on built-in error shape.
136
-
137
- Verification:
138
-
139
- - Focused HTTP tests asserting response body shape for changed error paths.
140
- - `bun dev generate > /tmp/opencode-openapi.json` from `packages/opencode`.
141
- - `./packages/sdk/js/script/build.ts` from repo root.
142
- - Inspect SDK error union diff.
143
- - `bun typecheck` from `packages/opencode`.
144
-
145
- ### PR 6: Remove Auth/Security Spec Rewrites If SDK Can Tolerate It
146
-
147
- - Audit `delete operation.security`, `delete operation.responses?.["401"]`, and `delete spec.components?.securitySchemes` in `public.ts`.
148
- - Decide whether SDK should expose auth in generated operation metadata.
149
- - If preserving no-auth SDK surface is required, leave this rewrite and document it as intentional compatibility code.
150
- - If removing it, update SDK generation expectations and docs in the same PR.
151
-
152
- Verification:
153
-
154
- - `./packages/sdk/js/script/build.ts` from repo root.
155
- - Inspect generated client call signatures and error unions.
156
- - Do not merge if auth churn changes normal SDK call ergonomics unintentionally.
157
-
158
- ### PR 7: Tackle Component Shape Rewrites One At A Time
159
-
160
- - Audit these in `public.ts`: `normalizeComponentNames`, `collapseDuplicateComponents`, `applyLegacySchemaOverrides`, `normalizeComponentDescriptions`, `stripOptionalNull`, `fixSelfReferencingComponents`.
161
- - For each rewrite, make a tiny PR that removes or narrows only that rewrite.
162
- - If generated SDK type names churn broadly, stop and either keep the rewrite or fix `effect-smol` generation first.
163
-
164
- Concrete first targets:
165
-
166
- - Delete cosmetic `normalizeComponentDescriptions` if SDK output does not change materially.
167
- - Narrow `applyLegacySchemaOverrides` entries that correspond to schemas already fixed at the source.
168
- - Keep `stripOptionalNull` until there is an explicit SDK migration plan, because it likely affects many optional fields.
169
-
170
- Verification:
171
-
172
- - `bun dev generate > /tmp/opencode-openapi.json` from `packages/opencode`.
173
- - `./packages/sdk/js/script/build.ts` from repo root.
174
- - Inspect generated SDK type-name and optionality diffs.
175
-
176
- ## Upstream Middleware Query Support
177
-
178
- Long-term, `WorkspaceRoutingMiddleware` should declare the query fields it reads once, and `HttpApi` should use that declaration for both runtime validation and OpenAPI generation.
179
-
180
- Target in `effect-smol`:
181
-
182
- - Extend `HttpApiMiddleware.Service` config with optional query schema support, or add a dedicated middleware query annotation.
183
- - Make runtime request decoding include middleware query schemas.
184
- - Make `OpenApi.fromApi` emit middleware query params for endpoints using that middleware.
185
-
186
- Once available, remove `WorkspaceRoutingQueryFields` spreads from route groups and declare `directory` / `workspace` only on `WorkspaceRoutingMiddleware`.
187
-
188
- ## Suggested PR Order
189
-
190
- 1. Add drift detection tests only.
191
- 2. Remove `InstanceQueryParameters` spec injection; rely on `WorkspaceRoutingQueryFields` already present in runtime schemas.
192
- 3. Convert query type overrides into route/schema-level helpers where possible.
193
- 4. Convert path parameter overrides into schema annotations or upstream fixes.
194
- 5. Replace built-in error response rewrites with explicit declared API errors by route group.
195
- 6. Tackle component naming/nullability rewrites only after SDK compatibility snapshots are stable.
196
-
197
- ## Verification Checklist Per PR
198
-
199
- - Focused HTTP tests for changed routes.
200
- - OpenAPI drift tests.
201
- - `bun dev generate > /tmp/opencode-openapi.json` from `packages/opencode`.
202
- - `./packages/sdk/js/script/build.ts` from repo root.
203
- - Inspect generated SDK diff for public API churn.
204
- - `bun typecheck` from `packages/opencode`.