onlycode 1.18.0 → 1.20.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 (418) hide show
  1. package/bin/{opencode.cjs → onlycode.cjs} +8 -42
  2. package/package.json +12 -147
  3. package/src/account/account.ts +0 -463
  4. package/src/account/repo.ts +0 -173
  5. package/src/account/schema.ts +0 -99
  6. package/src/account/url.ts +0 -8
  7. package/src/acp/agent.ts +0 -95
  8. package/src/acp/config-option.ts +0 -203
  9. package/src/acp/content.ts +0 -250
  10. package/src/acp/directory.ts +0 -210
  11. package/src/acp/error.ts +0 -90
  12. package/src/acp/event.ts +0 -342
  13. package/src/acp/permission.ts +0 -124
  14. package/src/acp/profile.ts +0 -42
  15. package/src/acp/service.ts +0 -1048
  16. package/src/acp/session.ts +0 -231
  17. package/src/acp/tool.ts +0 -367
  18. package/src/acp/usage.ts +0 -232
  19. package/src/agent/agent.ts +0 -459
  20. package/src/agent/generate.txt +0 -75
  21. package/src/agent/prompt/compaction.txt +0 -9
  22. package/src/agent/prompt/explore.txt +0 -18
  23. package/src/agent/prompt/summary.txt +0 -11
  24. package/src/agent/prompt/title.txt +0 -44
  25. package/src/agent/subagent-permissions.ts +0 -27
  26. package/src/audio.d.ts +0 -14
  27. package/src/auth/index.ts +0 -99
  28. package/src/background/job.ts +0 -39
  29. package/src/bus/global.ts +0 -22
  30. package/src/cli/bootstrap.ts +0 -11
  31. package/src/cli/cmd/account.ts +0 -264
  32. package/src/cli/cmd/acp.ts +0 -73
  33. package/src/cli/cmd/agent.ts +0 -259
  34. package/src/cli/cmd/attach.ts +0 -97
  35. package/src/cli/cmd/cmd.ts +0 -7
  36. package/src/cli/cmd/db.ts +0 -62
  37. package/src/cli/cmd/debug/agent.handler.ts +0 -193
  38. package/src/cli/cmd/debug/agent.ts +0 -27
  39. package/src/cli/cmd/debug/config.ts +0 -14
  40. package/src/cli/cmd/debug/file.ts +0 -73
  41. package/src/cli/cmd/debug/index.ts +0 -87
  42. package/src/cli/cmd/debug/lsp.ts +0 -50
  43. package/src/cli/cmd/debug/ripgrep.ts +0 -79
  44. package/src/cli/cmd/debug/scrap.ts +0 -15
  45. package/src/cli/cmd/debug/skill.ts +0 -15
  46. package/src/cli/cmd/debug/snapshot.ts +0 -50
  47. package/src/cli/cmd/debug/startup.ts +0 -11
  48. package/src/cli/cmd/debug/v2.ts +0 -44
  49. package/src/cli/cmd/export.ts +0 -292
  50. package/src/cli/cmd/generate.ts +0 -54
  51. package/src/cli/cmd/github.handler.ts +0 -1593
  52. package/src/cli/cmd/github.shared.ts +0 -30
  53. package/src/cli/cmd/github.ts +0 -42
  54. package/src/cli/cmd/import.ts +0 -224
  55. package/src/cli/cmd/mcp.ts +0 -849
  56. package/src/cli/cmd/models.ts +0 -66
  57. package/src/cli/cmd/plug.ts +0 -230
  58. package/src/cli/cmd/pr.ts +0 -115
  59. package/src/cli/cmd/prompt-display.ts +0 -1
  60. package/src/cli/cmd/providers.ts +0 -534
  61. package/src/cli/cmd/run/demo.ts +0 -1274
  62. package/src/cli/cmd/run/entry.body.ts +0 -205
  63. package/src/cli/cmd/run/footer.command.tsx +0 -1064
  64. package/src/cli/cmd/run/footer.menu.tsx +0 -351
  65. package/src/cli/cmd/run/footer.permission.tsx +0 -472
  66. package/src/cli/cmd/run/footer.prompt.tsx +0 -1306
  67. package/src/cli/cmd/run/footer.question.tsx +0 -573
  68. package/src/cli/cmd/run/footer.subagent.tsx +0 -173
  69. package/src/cli/cmd/run/footer.ts +0 -1129
  70. package/src/cli/cmd/run/footer.view.tsx +0 -943
  71. package/src/cli/cmd/run/footer.width.ts +0 -27
  72. package/src/cli/cmd/run/permission.shared.ts +0 -256
  73. package/src/cli/cmd/run/prompt.editor.ts +0 -157
  74. package/src/cli/cmd/run/prompt.shared.ts +0 -153
  75. package/src/cli/cmd/run/question.shared.ts +0 -340
  76. package/src/cli/cmd/run/runtime.boot.ts +0 -202
  77. package/src/cli/cmd/run/runtime.lifecycle.ts +0 -406
  78. package/src/cli/cmd/run/runtime.queue.ts +0 -349
  79. package/src/cli/cmd/run/runtime.shared.ts +0 -17
  80. package/src/cli/cmd/run/runtime.stdin.ts +0 -37
  81. package/src/cli/cmd/run/runtime.ts +0 -814
  82. package/src/cli/cmd/run/scrollback.shared.ts +0 -92
  83. package/src/cli/cmd/run/scrollback.surface.ts +0 -431
  84. package/src/cli/cmd/run/scrollback.writer.tsx +0 -352
  85. package/src/cli/cmd/run/session-data.ts +0 -1113
  86. package/src/cli/cmd/run/session-replay.ts +0 -374
  87. package/src/cli/cmd/run/session.shared.ts +0 -196
  88. package/src/cli/cmd/run/splash.ts +0 -275
  89. package/src/cli/cmd/run/stream.transport.ts +0 -1462
  90. package/src/cli/cmd/run/stream.ts +0 -175
  91. package/src/cli/cmd/run/subagent-data.ts +0 -876
  92. package/src/cli/cmd/run/theme.ts +0 -690
  93. package/src/cli/cmd/run/tool.ts +0 -1489
  94. package/src/cli/cmd/run/trace.ts +0 -94
  95. package/src/cli/cmd/run/turn-summary.ts +0 -47
  96. package/src/cli/cmd/run/types.ts +0 -350
  97. package/src/cli/cmd/run/variant.shared.ts +0 -215
  98. package/src/cli/cmd/run.ts +0 -894
  99. package/src/cli/cmd/serve.ts +0 -24
  100. package/src/cli/cmd/session.ts +0 -147
  101. package/src/cli/cmd/stats.ts +0 -393
  102. package/src/cli/cmd/tui.ts +0 -224
  103. package/src/cli/cmd/uninstall.ts +0 -353
  104. package/src/cli/cmd/upgrade.ts +0 -74
  105. package/src/cli/cmd/web.ts +0 -84
  106. package/src/cli/effect/prompt.ts +0 -37
  107. package/src/cli/effect-cmd.ts +0 -96
  108. package/src/cli/error.ts +0 -130
  109. package/src/cli/heap.ts +0 -45
  110. package/src/cli/logo-pixel.ts +0 -35
  111. package/src/cli/logo.ts +0 -1
  112. package/src/cli/network.ts +0 -64
  113. package/src/cli/tui/layer.ts +0 -7
  114. package/src/cli/tui/validate-session.ts +0 -29
  115. package/src/cli/tui/worker.ts +0 -71
  116. package/src/cli/ui.ts +0 -148
  117. package/src/cli/upgrade.ts +0 -53
  118. package/src/command/index.ts +0 -184
  119. package/src/command/template/initialize.txt +0 -66
  120. package/src/command/template/review.txt +0 -101
  121. package/src/config/agent.ts +0 -59
  122. package/src/config/command.ts +0 -39
  123. package/src/config/config.ts +0 -686
  124. package/src/config/entry-name.ts +0 -19
  125. package/src/config/managed.ts +0 -69
  126. package/src/config/markdown.ts +0 -36
  127. package/src/config/parse.ts +0 -79
  128. package/src/config/paths.ts +0 -45
  129. package/src/config/plugin.ts +0 -79
  130. package/src/config/tui-cwd.ts +0 -5
  131. package/src/config/tui-host-attention.ts +0 -21
  132. package/src/config/tui-migrate.ts +0 -132
  133. package/src/config/tui.ts +0 -274
  134. package/src/config/variable.ts +0 -91
  135. package/src/control-plane/adapters/index.ts +0 -41
  136. package/src/control-plane/adapters/worktree.ts +0 -96
  137. package/src/control-plane/dev/README.md +0 -19
  138. package/src/control-plane/dev/debug-workspace-plugin.ts +0 -73
  139. package/src/control-plane/types.ts +0 -59
  140. package/src/control-plane/util.ts +0 -39
  141. package/src/control-plane/workspace-adapter-runtime.ts +0 -51
  142. package/src/control-plane/workspace-context.ts +0 -26
  143. package/src/control-plane/workspace.ts +0 -989
  144. package/src/effect/app-runtime.ts +0 -132
  145. package/src/effect/bootstrap-runtime.ts +0 -23
  146. package/src/effect/bridge.ts +0 -84
  147. package/src/effect/config-service.ts +0 -67
  148. package/src/effect/instance-ref.ts +0 -11
  149. package/src/effect/instance-registry.ts +0 -12
  150. package/src/effect/instance-state.ts +0 -69
  151. package/src/effect/promise.ts +0 -17
  152. package/src/effect/run-service.ts +0 -47
  153. package/src/effect/runner.ts +0 -217
  154. package/src/effect/runtime-flags.ts +0 -79
  155. package/src/env/index.ts +0 -43
  156. package/src/event-v2-bridge.ts +0 -79
  157. package/src/format/formatter.ts +0 -404
  158. package/src/format/index.ts +0 -205
  159. package/src/git/index.ts +0 -350
  160. package/src/id/id.ts +0 -80
  161. package/src/ide/index.ts +0 -61
  162. package/src/image/image.ts +0 -174
  163. package/src/index.ts +0 -142
  164. package/src/installation/index.ts +0 -350
  165. package/src/lsp/client.ts +0 -650
  166. package/src/lsp/diagnostic.ts +0 -29
  167. package/src/lsp/language.ts +0 -121
  168. package/src/lsp/launch.ts +0 -21
  169. package/src/lsp/lsp.ts +0 -511
  170. package/src/lsp/server.ts +0 -1983
  171. package/src/markdown.d.ts +0 -4
  172. package/src/mcp/auth.ts +0 -174
  173. package/src/mcp/catalog.ts +0 -153
  174. package/src/mcp/index.ts +0 -953
  175. package/src/mcp/oauth-callback.ts +0 -233
  176. package/src/mcp/oauth-provider.ts +0 -206
  177. package/src/node.ts +0 -4
  178. package/src/patch/index.ts +0 -686
  179. package/src/permission/arity.ts +0 -163
  180. package/src/permission/evaluate.ts +0 -1
  181. package/src/permission/index.ts +0 -230
  182. package/src/plugin/azure.ts +0 -26
  183. package/src/plugin/cloudflare.ts +0 -76
  184. package/src/plugin/digitalocean.ts +0 -383
  185. package/src/plugin/github-copilot/copilot.ts +0 -414
  186. package/src/plugin/github-copilot/models.ts +0 -246
  187. package/src/plugin/index.ts +0 -316
  188. package/src/plugin/install.ts +0 -439
  189. package/src/plugin/loader.ts +0 -237
  190. package/src/plugin/meta.ts +0 -188
  191. package/src/plugin/openai/README.md +0 -31
  192. package/src/plugin/openai/codex.ts +0 -641
  193. package/src/plugin/openai/ws-pool.ts +0 -270
  194. package/src/plugin/openai/ws.ts +0 -381
  195. package/src/plugin/pty-environment.ts +0 -24
  196. package/src/plugin/shared.ts +0 -323
  197. package/src/plugin/snowflake-cortex.ts +0 -529
  198. package/src/plugin/tui/internal.ts +0 -10
  199. package/src/plugin/tui/runtime.ts +0 -1130
  200. package/src/plugin/xai.ts +0 -716
  201. package/src/project/bootstrap-service.ts +0 -9
  202. package/src/project/bootstrap.ts +0 -76
  203. package/src/project/instance-context.ts +0 -24
  204. package/src/project/instance-layer.ts +0 -11
  205. package/src/project/instance-runtime.ts +0 -16
  206. package/src/project/instance-store.ts +0 -209
  207. package/src/project/project.ts +0 -519
  208. package/src/project/vcs.ts +0 -431
  209. package/src/provider/auth.ts +0 -233
  210. package/src/provider/error.ts +0 -188
  211. package/src/provider/model-status.ts +0 -8
  212. package/src/provider/provider.ts +0 -1975
  213. package/src/provider/transform.ts +0 -1543
  214. package/src/question/index.ts +0 -229
  215. package/src/question/schema.ts +0 -10
  216. package/src/server/auth.ts +0 -48
  217. package/src/server/event.ts +0 -13
  218. package/src/server/global-lifecycle.ts +0 -28
  219. package/src/server/init-projectors.ts +0 -3
  220. package/src/server/mdns.ts +0 -47
  221. package/src/server/projectors.ts +0 -1
  222. package/src/server/proxy-util.ts +0 -48
  223. package/src/server/routes/instance/httpapi/AGENTS.md +0 -39
  224. package/src/server/routes/instance/httpapi/api.ts +0 -78
  225. package/src/server/routes/instance/httpapi/errors.ts +0 -193
  226. package/src/server/routes/instance/httpapi/groups/config.ts +0 -65
  227. package/src/server/routes/instance/httpapi/groups/control-plane.ts +0 -35
  228. package/src/server/routes/instance/httpapi/groups/control.ts +0 -76
  229. package/src/server/routes/instance/httpapi/groups/event.ts +0 -29
  230. package/src/server/routes/instance/httpapi/groups/experimental.ts +0 -275
  231. package/src/server/routes/instance/httpapi/groups/file.ts +0 -185
  232. package/src/server/routes/instance/httpapi/groups/global.ts +0 -138
  233. package/src/server/routes/instance/httpapi/groups/instance.ts +0 -206
  234. package/src/server/routes/instance/httpapi/groups/mcp.ts +0 -156
  235. package/src/server/routes/instance/httpapi/groups/metadata.ts +0 -18
  236. package/src/server/routes/instance/httpapi/groups/permission.ts +0 -61
  237. package/src/server/routes/instance/httpapi/groups/project-copy.ts +0 -32
  238. package/src/server/routes/instance/httpapi/groups/project.ts +0 -93
  239. package/src/server/routes/instance/httpapi/groups/provider.ts +0 -101
  240. package/src/server/routes/instance/httpapi/groups/pty.ts +0 -172
  241. package/src/server/routes/instance/httpapi/groups/query.ts +0 -12
  242. package/src/server/routes/instance/httpapi/groups/question.ts +0 -74
  243. package/src/server/routes/instance/httpapi/groups/session.ts +0 -462
  244. package/src/server/routes/instance/httpapi/groups/sync.ts +0 -113
  245. package/src/server/routes/instance/httpapi/groups/tui.ts +0 -208
  246. package/src/server/routes/instance/httpapi/groups/workspace.ts +0 -141
  247. package/src/server/routes/instance/httpapi/handlers/config.ts +0 -34
  248. package/src/server/routes/instance/httpapi/handlers/control-plane.ts +0 -37
  249. package/src/server/routes/instance/httpapi/handlers/control.ts +0 -43
  250. package/src/server/routes/instance/httpapi/handlers/event.ts +0 -99
  251. package/src/server/routes/instance/httpapi/handlers/experimental.ts +0 -192
  252. package/src/server/routes/instance/httpapi/handlers/file.ts +0 -139
  253. package/src/server/routes/instance/httpapi/handlers/global.ts +0 -156
  254. package/src/server/routes/instance/httpapi/handlers/instance.ts +0 -110
  255. package/src/server/routes/instance/httpapi/handlers/mcp.ts +0 -111
  256. package/src/server/routes/instance/httpapi/handlers/permission.ts +0 -41
  257. package/src/server/routes/instance/httpapi/handlers/project-copy.ts +0 -83
  258. package/src/server/routes/instance/httpapi/handlers/project.ts +0 -63
  259. package/src/server/routes/instance/httpapi/handlers/provider.ts +0 -113
  260. package/src/server/routes/instance/httpapi/handlers/pty.ts +0 -273
  261. package/src/server/routes/instance/httpapi/handlers/question.ts +0 -54
  262. package/src/server/routes/instance/httpapi/handlers/session-errors.ts +0 -21
  263. package/src/server/routes/instance/httpapi/handlers/session.ts +0 -440
  264. package/src/server/routes/instance/httpapi/handlers/sync.ts +0 -89
  265. package/src/server/routes/instance/httpapi/handlers/tui.ts +0 -131
  266. package/src/server/routes/instance/httpapi/handlers/workspace.ts +0 -102
  267. package/src/server/routes/instance/httpapi/lifecycle.ts +0 -54
  268. package/src/server/routes/instance/httpapi/middleware/authorization.ts +0 -150
  269. package/src/server/routes/instance/httpapi/middleware/compression.ts +0 -64
  270. package/src/server/routes/instance/httpapi/middleware/cors-vary.ts +0 -29
  271. package/src/server/routes/instance/httpapi/middleware/error.ts +0 -43
  272. package/src/server/routes/instance/httpapi/middleware/fence.ts +0 -25
  273. package/src/server/routes/instance/httpapi/middleware/instance-context.ts +0 -43
  274. package/src/server/routes/instance/httpapi/middleware/proxy.ts +0 -108
  275. package/src/server/routes/instance/httpapi/middleware/schema-error.ts +0 -41
  276. package/src/server/routes/instance/httpapi/middleware/workspace-routing.ts +0 -250
  277. package/src/server/routes/instance/httpapi/public.ts +0 -535
  278. package/src/server/routes/instance/httpapi/server.ts +0 -298
  279. package/src/server/routes/instance/httpapi/websocket-tracker.ts +0 -57
  280. package/src/server/server.ts +0 -225
  281. package/src/server/shared/fence.ts +0 -60
  282. package/src/server/shared/pty-ticket.ts +0 -15
  283. package/src/server/shared/public-ui.ts +0 -12
  284. package/src/server/shared/tui-control.ts +0 -28
  285. package/src/server/shared/ui.ts +0 -108
  286. package/src/server/shared/workspace-routing.ts +0 -38
  287. package/src/server/tui-event.ts +0 -53
  288. package/src/session/compaction.ts +0 -620
  289. package/src/session/instruction.ts +0 -241
  290. package/src/session/llm/AGENTS.md +0 -90
  291. package/src/session/llm/ai-sdk.ts +0 -288
  292. package/src/session/llm/native-request.ts +0 -196
  293. package/src/session/llm/native-runtime.ts +0 -195
  294. package/src/session/llm/request.ts +0 -216
  295. package/src/session/llm.ts +0 -415
  296. package/src/session/message-error.ts +0 -14
  297. package/src/session/message-v2.ts +0 -747
  298. package/src/session/message.ts +0 -148
  299. package/src/session/overflow.ts +0 -34
  300. package/src/session/processor.ts +0 -1084
  301. package/src/session/prompt/anthropic.txt +0 -109
  302. package/src/session/prompt/beast.txt +0 -151
  303. package/src/session/prompt/build-switch.txt +0 -9
  304. package/src/session/prompt/codex.txt +0 -83
  305. package/src/session/prompt/copilot-gpt-5.txt +0 -147
  306. package/src/session/prompt/default.txt +0 -99
  307. package/src/session/prompt/gemini.txt +0 -159
  308. package/src/session/prompt/gpt.txt +0 -111
  309. package/src/session/prompt/kimi.txt +0 -99
  310. package/src/session/prompt/plan-mode.txt +0 -74
  311. package/src/session/prompt/plan-reminder-anthropic.txt +0 -71
  312. package/src/session/prompt/plan.txt +0 -30
  313. package/src/session/prompt/trinity.txt +0 -101
  314. package/src/session/prompt.ts +0 -1707
  315. package/src/session/reminders.ts +0 -92
  316. package/src/session/retry.ts +0 -201
  317. package/src/session/revert.ts +0 -160
  318. package/src/session/run-state.ts +0 -156
  319. package/src/session/schema.ts +0 -26
  320. package/src/session/session.ts +0 -1119
  321. package/src/session/status.ts +0 -97
  322. package/src/session/summary.ts +0 -165
  323. package/src/session/system.ts +0 -117
  324. package/src/session/todo.ts +0 -90
  325. package/src/session/tools.ts +0 -207
  326. package/src/share/session.ts +0 -61
  327. package/src/share/share-next.ts +0 -385
  328. package/src/skill/discovery.ts +0 -109
  329. package/src/skill/index.ts +0 -366
  330. package/src/snapshot/index.ts +0 -808
  331. package/src/sql.d.ts +0 -4
  332. package/src/storage/schema.ts +0 -5
  333. package/src/storage/storage.ts +0 -329
  334. package/src/sync/README.md +0 -179
  335. package/src/sync/schema.ts +0 -11
  336. package/src/temporary.ts +0 -31
  337. package/src/tool/apply_patch.ts +0 -315
  338. package/src/tool/apply_patch.txt +0 -33
  339. package/src/tool/apply_patch.zh.txt +0 -33
  340. package/src/tool/description.ts +0 -100
  341. package/src/tool/edit.ts +0 -739
  342. package/src/tool/edit.txt +0 -10
  343. package/src/tool/edit.zh.txt +0 -10
  344. package/src/tool/external-directory.ts +0 -49
  345. package/src/tool/glob.ts +0 -78
  346. package/src/tool/glob.txt +0 -6
  347. package/src/tool/glob.zh.txt +0 -6
  348. package/src/tool/grep.ts +0 -114
  349. package/src/tool/grep.txt +0 -8
  350. package/src/tool/grep.zh.txt +0 -8
  351. package/src/tool/invalid.ts +0 -21
  352. package/src/tool/json-schema.ts +0 -164
  353. package/src/tool/lsp.ts +0 -115
  354. package/src/tool/lsp.txt +0 -24
  355. package/src/tool/lsp.zh.txt +0 -24
  356. package/src/tool/mcp-websearch.ts +0 -96
  357. package/src/tool/plan-enter.txt +0 -14
  358. package/src/tool/plan-enter.zh.txt +0 -14
  359. package/src/tool/plan-exit.txt +0 -13
  360. package/src/tool/plan-exit.zh.txt +0 -13
  361. package/src/tool/plan.ts +0 -81
  362. package/src/tool/question.ts +0 -46
  363. package/src/tool/question.txt +0 -10
  364. package/src/tool/question.zh.txt +0 -10
  365. package/src/tool/read.ts +0 -388
  366. package/src/tool/read.txt +0 -14
  367. package/src/tool/read.zh.txt +0 -14
  368. package/src/tool/registry.ts +0 -440
  369. package/src/tool/schema.ts +0 -14
  370. package/src/tool/shell/id.ts +0 -19
  371. package/src/tool/shell/prompt.ts +0 -307
  372. package/src/tool/shell/shell.txt +0 -21
  373. package/src/tool/shell.ts +0 -657
  374. package/src/tool/skill.ts +0 -73
  375. package/src/tool/skill.txt +0 -5
  376. package/src/tool/skill.zh.txt +0 -5
  377. package/src/tool/task.ts +0 -348
  378. package/src/tool/task.txt +0 -19
  379. package/src/tool/task.zh.txt +0 -19
  380. package/src/tool/todo.ts +0 -59
  381. package/src/tool/todowrite.txt +0 -44
  382. package/src/tool/todowrite.zh.txt +0 -44
  383. package/src/tool/tool.ts +0 -183
  384. package/src/tool/truncate.ts +0 -158
  385. package/src/tool/truncation-dir.ts +0 -4
  386. package/src/tool/webfetch.ts +0 -194
  387. package/src/tool/webfetch.txt +0 -13
  388. package/src/tool/webfetch.zh.txt +0 -13
  389. package/src/tool/websearch.ts +0 -145
  390. package/src/tool/websearch.txt +0 -14
  391. package/src/tool/websearch.zh.txt +0 -14
  392. package/src/tool/write.ts +0 -106
  393. package/src/tool/write.txt +0 -8
  394. package/src/tool/write.zh.txt +0 -8
  395. package/src/util/archive.ts +0 -17
  396. package/src/util/bom.ts +0 -27
  397. package/src/util/data-url.ts +0 -9
  398. package/src/util/defer.ts +0 -10
  399. package/src/util/effect-http-client.ts +0 -11
  400. package/src/util/error.ts +0 -1
  401. package/src/util/filesystem.ts +0 -251
  402. package/src/util/html.ts +0 -8
  403. package/src/util/iife.ts +0 -3
  404. package/src/util/lazy.ts +0 -20
  405. package/src/util/local-context.ts +0 -25
  406. package/src/util/locale.ts +0 -2
  407. package/src/util/media.ts +0 -26
  408. package/src/util/process.ts +0 -177
  409. package/src/util/proxy-env.ts +0 -72
  410. package/src/util/queue.ts +0 -32
  411. package/src/util/record.ts +0 -1
  412. package/src/util/repository.ts +0 -232
  413. package/src/util/rpc.ts +0 -66
  414. package/src/util/signal.ts +0 -12
  415. package/src/util/timeout.ts +0 -13
  416. package/src/util/token.ts +0 -1
  417. package/src/util/wildcard.ts +0 -59
  418. package/src/worktree/index.ts +0 -654
@@ -1,241 +0,0 @@
1
- import { LayerNode } from "@opencode-ai/core/effect/layer-node"
2
- import { httpClient } from "@opencode-ai/core/effect/layer-node-platform"
3
- import path from "path"
4
- import { SessionV1 } from "@opencode-ai/core/v1/session"
5
- import { Effect, Layer, Context } from "effect"
6
- import { FetchHttpClient, HttpClient, HttpClientRequest } from "effect/unstable/http"
7
- import { Config } from "@/config/config"
8
- import { InstanceState } from "@/effect/instance-state"
9
- import { RuntimeFlags } from "@/effect/runtime-flags"
10
- import { Flag } from "@opencode-ai/core/flag/flag"
11
- import { FSUtil } from "@opencode-ai/core/fs-util"
12
- import { withTransientReadRetry } from "@/util/effect-http-client"
13
- import { Global } from "@opencode-ai/core/global"
14
- import type { MessageV2 } from "./message-v2"
15
- import type { MessageID } from "./schema"
16
-
17
- function extract(messages: SessionV1.WithParts[]) {
18
- const paths = new Set<string>()
19
- for (const msg of messages) {
20
- for (const part of msg.parts) {
21
- if (part.type === "tool" && part.tool === "read" && part.state.status === "completed") {
22
- if (part.state.time.compacted) continue
23
- const loaded = part.state.metadata?.loaded
24
- if (!loaded || !Array.isArray(loaded)) continue
25
- for (const p of loaded) {
26
- if (typeof p === "string") paths.add(p)
27
- }
28
- }
29
- }
30
- }
31
- return paths
32
- }
33
-
34
- export interface Interface {
35
- readonly clear: (messageID: MessageID) => Effect.Effect<void>
36
- readonly systemPaths: () => Effect.Effect<Set<string>, FSUtil.Error>
37
- readonly system: () => Effect.Effect<string[], FSUtil.Error>
38
- readonly find: (dir: string) => Effect.Effect<string | undefined, FSUtil.Error>
39
- readonly resolve: (
40
- messages: SessionV1.WithParts[],
41
- filepath: string,
42
- messageID: MessageID,
43
- ) => Effect.Effect<{ filepath: string; content: string }[], FSUtil.Error>
44
- }
45
-
46
- export class Service extends Context.Service<Service, Interface>()("@opencode/Instruction") {}
47
-
48
- export const layer: Layer.Layer<
49
- Service,
50
- never,
51
- FSUtil.Service | Config.Service | Global.Service | HttpClient.HttpClient | RuntimeFlags.Service
52
- > = Layer.effect(
53
- Service,
54
- Effect.gen(function* () {
55
- const cfg = yield* Config.Service
56
- const fs = yield* FSUtil.Service
57
- const global = yield* Global.Service
58
- const flags = yield* RuntimeFlags.Service
59
- const http = HttpClient.filterStatusOk(withTransientReadRetry(yield* HttpClient.HttpClient))
60
- const globalFiles = [
61
- path.join(global.config, "AGENTS.md"),
62
- ...(!flags.disableClaudeCodePrompt ? [path.join(global.home, ".claude", "CLAUDE.md")] : []),
63
- ]
64
- const instructionFiles = [
65
- "AGENTS.md",
66
- ...(!flags.disableClaudeCodePrompt ? ["CLAUDE.md"] : []),
67
- "CONTEXT.md", // deprecated
68
- ]
69
-
70
- const state = yield* InstanceState.make(
71
- Effect.fn("Instruction.state")(() =>
72
- Effect.succeed({
73
- // Track which instruction files have already been attached for a given assistant message.
74
- claims: new Map<MessageID, Set<string>>(),
75
- }),
76
- ),
77
- )
78
-
79
- const relative = Effect.fnUntraced(function* (instruction: string) {
80
- const ctx = yield* InstanceState.context
81
- if (!Flag.OPENCODE_DISABLE_PROJECT_CONFIG) {
82
- return yield* fs
83
- .globUp(instruction, ctx.directory, ctx.worktree)
84
- .pipe(Effect.catch(() => Effect.succeed([] as string[])))
85
- }
86
- return yield* fs
87
- .globUp(instruction, global.config, global.config)
88
- .pipe(Effect.catch(() => Effect.succeed([] as string[])))
89
- })
90
-
91
- const read = Effect.fnUntraced(function* (filepath: string) {
92
- return yield* fs.readFileString(filepath).pipe(Effect.catch(() => Effect.succeed("")))
93
- })
94
-
95
- const fetch = Effect.fnUntraced(function* (url: string) {
96
- const res = yield* http.execute(HttpClientRequest.get(url)).pipe(
97
- Effect.timeout(5000),
98
- Effect.catch(() => Effect.succeed(null)),
99
- )
100
- if (!res) return ""
101
- const body = yield* res.arrayBuffer.pipe(Effect.catch(() => Effect.succeed(new ArrayBuffer(0))))
102
- return new TextDecoder().decode(body)
103
- })
104
-
105
- const clear = Effect.fn("Instruction.clear")(function* (messageID: MessageID) {
106
- const s = yield* InstanceState.get(state)
107
- s.claims.delete(messageID)
108
- })
109
-
110
- const systemPaths = Effect.fn("Instruction.systemPaths")(function* () {
111
- const config = yield* cfg.get()
112
- const ctx = yield* InstanceState.context
113
- const paths = new Set<string>()
114
-
115
- for (const file of globalFiles) {
116
- if (yield* fs.existsSafe(file)) {
117
- paths.add(path.resolve(file))
118
- break
119
- }
120
- }
121
-
122
- // The first project-level match wins so we don't stack AGENTS.md/CLAUDE.md from every ancestor.
123
- if (!Flag.OPENCODE_DISABLE_PROJECT_CONFIG) {
124
- for (const file of instructionFiles) {
125
- const matches = yield* fs
126
- .findUp(file, ctx.directory, ctx.worktree)
127
- .pipe(Effect.catch(() => Effect.succeed([])))
128
- if (matches.length > 0) {
129
- matches.forEach((item) => paths.add(path.resolve(item)))
130
- break
131
- }
132
- }
133
- }
134
-
135
- if (config.instructions) {
136
- for (const raw of config.instructions) {
137
- if (raw.startsWith("https://") || raw.startsWith("http://")) continue
138
- const instruction = raw.startsWith("~/") ? path.join(global.home, raw.slice(2)) : raw
139
- const matches = yield* (
140
- path.isAbsolute(instruction)
141
- ? fs.glob(path.basename(instruction), {
142
- cwd: path.dirname(instruction),
143
- absolute: true,
144
- include: "file",
145
- })
146
- : relative(instruction)
147
- ).pipe(Effect.catch(() => Effect.succeed([] as string[])))
148
- matches.forEach((item) => paths.add(path.resolve(item)))
149
- }
150
- }
151
-
152
- return paths
153
- })
154
-
155
- const system = Effect.fn("Instruction.system")(function* () {
156
- const config = yield* cfg.get()
157
- const paths = yield* systemPaths()
158
- const urls = (config.instructions ?? []).filter(
159
- (item) => item.startsWith("https://") || item.startsWith("http://"),
160
- )
161
-
162
- const files = yield* Effect.forEach(Array.from(paths), read, { concurrency: 8 })
163
- const remote = yield* Effect.forEach(urls, fetch, { concurrency: 4 })
164
-
165
- return [
166
- ...Array.from(paths).flatMap((item, i) => (files[i] ? [`Instructions from: ${item}\n${files[i]}`] : [])),
167
- ...urls.flatMap((item, i) => (remote[i] ? [`Instructions from: ${item}\n${remote[i]}`] : [])),
168
- ]
169
- })
170
-
171
- const find = Effect.fn("Instruction.find")(function* (dir: string) {
172
- for (const file of instructionFiles) {
173
- const filepath = path.resolve(path.join(dir, file))
174
- if (yield* fs.existsSafe(filepath)) return filepath
175
- }
176
- return undefined
177
- })
178
-
179
- const resolve = Effect.fn("Instruction.resolve")(function* (
180
- messages: SessionV1.WithParts[],
181
- filepath: string,
182
- messageID: MessageID,
183
- ) {
184
- const sys = yield* systemPaths()
185
- const already = extract(messages)
186
- const results: { filepath: string; content: string }[] = []
187
- const s = yield* InstanceState.get(state)
188
- const root = path.resolve(yield* InstanceState.directory)
189
-
190
- const target = path.resolve(filepath)
191
- let current = path.dirname(target)
192
-
193
- // Walk upward from the file being read and attach nearby instruction files once per message.
194
- while (current.startsWith(root) && current !== root) {
195
- const found = yield* find(current)
196
- if (!found || found === target || sys.has(found) || already.has(found)) {
197
- current = path.dirname(current)
198
- continue
199
- }
200
-
201
- let set = s.claims.get(messageID)
202
- if (!set) {
203
- set = new Set()
204
- s.claims.set(messageID, set)
205
- }
206
- if (set.has(found)) {
207
- current = path.dirname(current)
208
- continue
209
- }
210
-
211
- set.add(found)
212
- const content = yield* read(found)
213
- if (content) {
214
- results.push({ filepath: found, content: `Instructions from: ${found}\n${content}` })
215
- }
216
-
217
- current = path.dirname(current)
218
- }
219
-
220
- return results
221
- })
222
-
223
- return Service.of({ clear, systemPaths, system, find, resolve })
224
- }),
225
- )
226
-
227
- export const defaultLayer = layer.pipe(
228
- Layer.provide(Config.defaultLayer),
229
- Layer.provide(Global.layer),
230
- Layer.provide(FSUtil.defaultLayer),
231
- Layer.provide(FetchHttpClient.layer),
232
- Layer.provide(RuntimeFlags.defaultLayer),
233
- )
234
-
235
- export function loaded(messages: SessionV1.WithParts[]) {
236
- return extract(messages)
237
- }
238
-
239
- export const node = LayerNode.make(layer, [Config.node, FSUtil.node, Global.node, RuntimeFlags.node, httpClient])
240
-
241
- export * as Instruction from "./instruction"
@@ -1,90 +0,0 @@
1
- # Session LLM Runtime Boundaries
2
-
3
- `../llm.ts` is the opencode session LLM service. It owns opencode concerns: auth, config, model/provider resolution, plugins, permissions, telemetry headers, and runtime selection. It is the only file in this area that should know about the full session request shape.
4
-
5
- This folder contains adapters behind that service boundary:
6
-
7
- - `ai-sdk.ts` converts AI SDK `fullStream` parts into `@opencode-ai/llm` `LLMEvent`s. This is the default runtime path.
8
- - `native-request.ts` converts opencode's normalized session input into a native `@opencode-ai/llm` `LLMRequest`. It does not execute requests.
9
- - `native-runtime.ts` is the opt-in native runtime adapter. It decides whether a selected model is supported, builds the native request, bridges opencode tools into native executable tools, and delegates transport to `LLMClient` / `RequestExecutor`.
10
-
11
- ## File Structure
12
-
13
- ```txt
14
- src/session/
15
- llm.ts session-owned orchestration and runtime selection
16
- llm/
17
- AGENTS.md boundary notes for the adapter layer
18
- ai-sdk.ts AI SDK fullStream -> @opencode-ai/llm LLMEvent adapter
19
- native-request.ts opencode/AI SDK-shaped input -> @opencode-ai/llm LLMRequest
20
- native-runtime.ts native runtime gate, tool bridge, and LLMClient handoff
21
- ```
22
-
23
- Integration points:
24
-
25
- - `../llm.ts` imports `LLMClient` from `@opencode-ai/llm/route`; native execution is the only path that calls it directly.
26
- - `../llm.ts` imports `LLMAISDK` from `./llm/ai-sdk`; the AI SDK path still calls `streamText(...)` locally, then adapts `result.fullStream` into shared `LLMEvent`s.
27
- - `../llm.ts` imports `LLMNativeRuntime` from `./llm/native-runtime`; this is the runtime-selection seam. Unsupported native requests return a reason and fall back to AI SDK.
28
- - `native-runtime.ts` imports `LLMNative` from `./native-request`; this keeps request lowering separate from transport and tool execution.
29
- - `native-request.ts` is the only adapter file that should construct `LLM.request(...)`, `LLM.model(...)`, `Message.*`, `SystemPart`, `ToolCallPart`, `ToolResultPart`, or `ToolDefinition` values from `@opencode-ai/llm`.
30
- - `ai-sdk.ts` and `native-runtime.ts` both emit `@opencode-ai/llm` `LLMEvent`s so downstream session processing does not care which runtime handled the request.
31
-
32
- Keep new integration code on one of these seams. Avoid importing session services into `native-request.ts`; pass normalized data through `RequestInput` instead.
33
-
34
- ## Runtime selection
35
-
36
- Both runtimes converge on the same `LLMEvent` stream consumed by the session processor. The gate is per-request: a single session can route some calls through native and fall back for others.
37
-
38
- ```txt
39
- ╭───────────────────╮
40
- ╭───────────────────────────▶│ session processor │
41
- │ ╰─────────┬─────────╯
42
- │ │
43
- │ │
44
- │ │
45
- │ ▼
46
- │ ╭─────────────────────────╮
47
- │ │ LLM.Service (../llm.ts) │
48
- │ ╰────────────┬────────────╯
49
- │ │
50
- │ │
51
- │ │
52
- │ ▼
53
- │ ╭───────────╮
54
- │ ╭─╯ ╰─╮
55
- │ │ native gate │
56
- │ ╰─╮ ╭─╯
57
- │ ╰─────┬─────╯
58
- │ │
59
- │ ╭────── no ──────┴─────── yes ────────╮
60
- │ │ │
61
- │ ▼ ▼
62
- │ ╭───────────────────────────╮ ╭───────────────────╮
63
- │ │ AI SDK │ │ native-runtime.ts │
64
- │ │ streamText / generateText │ ╰────────┬──────────╯
65
- │ ╰─────────────┬─────────────╯ │
66
- │ │ │
67
- │ ╭───╯ │
68
- │ │ │
69
- │ ▼ ▼
70
- │ ╭───────────────────────╮ ╭────────────────────────────╮
71
- │ │ ai-sdk.ts │ │ native-request.ts │
72
- │ │ fullStream → LLMEvent │ │ session input → LLMRequest │
73
- │ ╰──────────┬────────────╯ ╰──────────────┬─────────────╯
74
- │ │ │
75
- │ │ ╭───╯
76
- │ │ │
77
- │ ▼ ▼
78
- │ ╭─────────────────╮ ╭─────────────────────────────╮
79
- ╰───────┤ LLMEvent stream │◀────────────┤ LLMClient · RequestExecutor │
80
- ╰─────────────────╯ ╰─────────────────────────────╯
81
- ```
82
-
83
- `native-runtime.ts` evaluates the gate and either bridges into `@opencode-ai/llm` or returns control so `llm.ts` can take the AI SDK path. Tool execution stays opencode-owned in both branches; only request lowering and transport differ.
84
-
85
- Safety boundary:
86
-
87
- - AI SDK remains the default.
88
- - `OPENCODE_EXPERIMENTAL_NATIVE_LLM=true` or the umbrella `OPENCODE_EXPERIMENTAL=true` opts in. Native is not a global replacement.
89
- - Native execution currently supports OpenAI, opencode-managed OpenAI-compatible, and Anthropic API-key paths backed by `@ai-sdk/openai`, `@ai-sdk/openai-compatible`, or `@ai-sdk/anthropic` catalog entries.
90
- - Unsupported providers, OpenAI OAuth, and missing API-key cases fall back to AI SDK.
@@ -1,288 +0,0 @@
1
- import { FinishReason, LLMEvent, ProviderMetadata, ToolResultValue } from "@opencode-ai/llm"
2
- import { Effect, Schema } from "effect"
3
- import { type streamText } from "ai"
4
- import { errorMessage } from "@/util/error"
5
-
6
- type Result = Awaited<ReturnType<typeof streamText>>
7
- type AISDKEvent = Result["fullStream"] extends AsyncIterable<infer T> ? T : never
8
-
9
- export function adapterState() {
10
- return {
11
- step: 0,
12
- text: 0,
13
- reasoning: 0,
14
- currentTextID: undefined as string | undefined,
15
- currentReasoningID: undefined as string | undefined,
16
- toolNames: {} as Record<string, string>,
17
- copilotTotalNanoAiu: undefined as number | undefined,
18
- }
19
- }
20
-
21
- function finishReason(value: string | undefined): FinishReason {
22
- return Schema.is(FinishReason)(value) ? value : "unknown"
23
- }
24
-
25
- function providerMetadata(value: unknown): ProviderMetadata | undefined {
26
- if (value == null) return undefined
27
- return Schema.is(ProviderMetadata)(value) ? value : undefined
28
- }
29
-
30
- // Temporary AI SDK bridge: Copilot billing survives only in raw provider chunks here.
31
- // Move this extraction into @opencode-ai/llm when Copilot is handled by the native runtime.
32
- function copilotTotalNanoAiu(value: unknown) {
33
- if (!value || typeof value !== "object") return
34
- const raw = value as Record<string, unknown>
35
- const response =
36
- raw.response && typeof raw.response === "object" ? (raw.response as Record<string, unknown>) : undefined
37
- const usage = raw.copilot_usage ?? response?.copilot_usage
38
- if (!usage || typeof usage !== "object") return
39
- const total = (usage as Record<string, unknown>).total_nano_aiu
40
- if (typeof total !== "number" || !Number.isFinite(total) || total < 0) return
41
- return total
42
- }
43
-
44
- function usage(value: unknown) {
45
- if (!value || typeof value !== "object") return undefined
46
- const item = value as {
47
- inputTokens?: number
48
- outputTokens?: number
49
- totalTokens?: number
50
- reasoningTokens?: number
51
- cachedInputTokens?: number
52
- inputTokenDetails?: { cacheReadTokens?: number; cacheWriteTokens?: number }
53
- outputTokenDetails?: { reasoningTokens?: number }
54
- }
55
- const entries = Object.entries({
56
- inputTokens: item.inputTokens,
57
- outputTokens: item.outputTokens,
58
- totalTokens: item.totalTokens,
59
- reasoningTokens: item.outputTokenDetails?.reasoningTokens ?? item.reasoningTokens,
60
- cacheReadInputTokens: item.inputTokenDetails?.cacheReadTokens ?? item.cachedInputTokens,
61
- cacheWriteInputTokens: item.inputTokenDetails?.cacheWriteTokens,
62
- }).filter((entry) => entry[1] !== undefined)
63
- return entries.length === 0 ? undefined : Object.fromEntries(entries)
64
- }
65
-
66
- function currentTextID(state: ReturnType<typeof adapterState>, id: string | undefined) {
67
- state.currentTextID = id ?? state.currentTextID ?? `text-${state.text++}`
68
- return state.currentTextID
69
- }
70
-
71
- function currentReasoningID(state: ReturnType<typeof adapterState>, id: string | undefined) {
72
- state.currentReasoningID = id ?? state.currentReasoningID ?? `reasoning-${state.reasoning++}`
73
- return state.currentReasoningID
74
- }
75
-
76
- export function toLLMEvents(
77
- state: ReturnType<typeof adapterState>,
78
- event: AISDKEvent,
79
- ): Effect.Effect<ReadonlyArray<LLMEvent>, unknown> {
80
- switch (event.type) {
81
- case "start":
82
- return Effect.succeed([])
83
-
84
- case "start-step":
85
- return Effect.succeed([LLMEvent.stepStart({ index: state.step })])
86
-
87
- case "finish-step":
88
- return Effect.sync(() => {
89
- const original = providerMetadata(event.providerMetadata)
90
- const metadata =
91
- state.copilotTotalNanoAiu === undefined
92
- ? original
93
- : {
94
- ...original,
95
- copilot: {
96
- ...original?.copilot,
97
- totalNanoAiu: state.copilotTotalNanoAiu,
98
- },
99
- }
100
- state.copilotTotalNanoAiu = undefined
101
- return [
102
- LLMEvent.stepFinish({
103
- index: state.step++,
104
- reason: finishReason(event.finishReason),
105
- usage: usage(event.usage),
106
- providerMetadata: metadata,
107
- }),
108
- ]
109
- })
110
-
111
- case "finish":
112
- return Effect.sync(() => {
113
- const events = [
114
- LLMEvent.finish({
115
- reason: finishReason(event.finishReason),
116
- usage: usage(event.totalUsage),
117
- providerMetadata: "providerMetadata" in event ? providerMetadata(event.providerMetadata) : undefined,
118
- }),
119
- ]
120
- // Reset so the adapter can be reused for a follow-up stream without leaking
121
- // counters or block IDs. adapterState() is the single source of truth for shape.
122
- Object.assign(state, adapterState())
123
- return events
124
- })
125
-
126
- case "text-start":
127
- return Effect.sync(() => {
128
- state.currentTextID = currentTextID(state, event.id)
129
- return [
130
- LLMEvent.textStart({
131
- id: state.currentTextID,
132
- providerMetadata: providerMetadata(event.providerMetadata),
133
- }),
134
- ]
135
- })
136
-
137
- case "text-delta":
138
- return Effect.succeed([
139
- LLMEvent.textDelta({
140
- id: currentTextID(state, event.id),
141
- text: event.text,
142
- providerMetadata: providerMetadata(event.providerMetadata),
143
- }),
144
- ])
145
-
146
- case "text-end":
147
- return Effect.sync(() => {
148
- const id = currentTextID(state, event.id)
149
- state.currentTextID = undefined
150
- return [
151
- LLMEvent.textEnd({
152
- id,
153
- providerMetadata: providerMetadata(event.providerMetadata),
154
- }),
155
- ]
156
- })
157
-
158
- case "reasoning-start":
159
- return Effect.sync(() => {
160
- state.currentReasoningID = currentReasoningID(state, event.id)
161
- return [
162
- LLMEvent.reasoningStart({
163
- id: state.currentReasoningID,
164
- providerMetadata: providerMetadata(event.providerMetadata),
165
- }),
166
- ]
167
- })
168
-
169
- case "reasoning-delta":
170
- return Effect.succeed([
171
- LLMEvent.reasoningDelta({
172
- id: currentReasoningID(state, event.id),
173
- text: event.text,
174
- providerMetadata: providerMetadata(event.providerMetadata),
175
- }),
176
- ])
177
-
178
- case "reasoning-end":
179
- return Effect.sync(() => {
180
- const id = currentReasoningID(state, event.id)
181
- state.currentReasoningID = undefined
182
- return [
183
- LLMEvent.reasoningEnd({
184
- id,
185
- providerMetadata: providerMetadata(event.providerMetadata),
186
- }),
187
- ]
188
- })
189
-
190
- case "tool-input-start":
191
- return Effect.sync(() => {
192
- state.toolNames[event.id] = event.toolName
193
- return [
194
- LLMEvent.toolInputStart({
195
- id: event.id,
196
- name: event.toolName,
197
- providerMetadata: providerMetadata(event.providerMetadata),
198
- }),
199
- ]
200
- })
201
-
202
- case "tool-input-delta":
203
- return Effect.succeed([
204
- LLMEvent.toolInputDelta({
205
- id: event.id,
206
- name: state.toolNames[event.id] ?? "unknown",
207
- text: event.delta ?? "",
208
- }),
209
- ])
210
-
211
- case "tool-input-end":
212
- return Effect.succeed([
213
- LLMEvent.toolInputEnd({
214
- id: event.id,
215
- name: state.toolNames[event.id] ?? "unknown",
216
- providerMetadata: providerMetadata(event.providerMetadata),
217
- }),
218
- ])
219
-
220
- case "tool-call":
221
- return Effect.sync(() => {
222
- state.toolNames[event.toolCallId] = event.toolName
223
- return [
224
- LLMEvent.toolCall({
225
- id: event.toolCallId,
226
- name: event.toolName,
227
- input: event.input,
228
- providerExecuted: "providerExecuted" in event ? event.providerExecuted : undefined,
229
- providerMetadata: providerMetadata(event.providerMetadata),
230
- }),
231
- ]
232
- })
233
-
234
- case "tool-result":
235
- return Effect.sync(() => {
236
- const name = state.toolNames[event.toolCallId] ?? "unknown"
237
- delete state.toolNames[event.toolCallId]
238
- return [
239
- LLMEvent.toolResult({
240
- id: event.toolCallId,
241
- name,
242
- result: ToolResultValue.make(event.output),
243
- providerExecuted: "providerExecuted" in event ? event.providerExecuted : undefined,
244
- providerMetadata: providerMetadata(event.providerMetadata),
245
- }),
246
- ]
247
- })
248
-
249
- case "tool-error":
250
- return Effect.sync(() => {
251
- const name = state.toolNames[event.toolCallId] ?? ("toolName" in event ? event.toolName : "unknown")
252
- delete state.toolNames[event.toolCallId]
253
- return [
254
- LLMEvent.toolError({
255
- id: event.toolCallId,
256
- name,
257
- message: errorMessage(event.error),
258
- error: event.error,
259
- providerMetadata: providerMetadata(event.providerMetadata),
260
- }),
261
- ]
262
- })
263
-
264
- case "error":
265
- return Effect.fail(event.error)
266
-
267
- case "abort":
268
- case "source":
269
- case "file":
270
- case "tool-output-denied":
271
- case "tool-approval-request":
272
- return Effect.succeed([])
273
-
274
- case "raw":
275
- return Effect.sync(() => {
276
- state.copilotTotalNanoAiu = copilotTotalNanoAiu(event.rawValue) ?? state.copilotTotalNanoAiu
277
- return []
278
- })
279
-
280
- default: {
281
- const _exhaustive: never = event
282
- void _exhaustive
283
- return Effect.succeed([])
284
- }
285
- }
286
- }
287
-
288
- export * as LLMAISDK from "./ai-sdk"