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
package/src/tool/tool.ts DELETED
@@ -1,183 +0,0 @@
1
- import { PermissionV1 } from "@opencode-ai/core/v1/permission"
2
- import { Effect, Schema } from "effect"
3
- import { SessionV1 } from "@opencode-ai/core/v1/session"
4
- import type { JSONSchema7 } from "@ai-sdk/provider"
5
- import type { MessageV2 } from "../session/message-v2"
6
- import type { Permission } from "../permission"
7
- import type { SessionID, MessageID } from "../session/schema"
8
- import * as Truncate from "./truncate"
9
- import { Agent } from "@/agent/agent"
10
-
11
- interface Metadata {
12
- [key: string]: any
13
- }
14
-
15
- // TODO: remove this hack
16
- export type DynamicDescription = (agent: Agent.Info) => Effect.Effect<string>
17
-
18
- /**
19
- * Raised when the LLM calls a tool with arguments that fail the parameter
20
- * schema. This is the canonical "rewrite the input" tool error: the typed
21
- * error class makes it matchable upstream, and its `message` getter produces
22
- * the model-facing prose that the AI SDK feeds back as the tool result.
23
- */
24
- export class InvalidArgumentsError extends Schema.TaggedErrorClass<InvalidArgumentsError>()(
25
- "ToolInvalidArgumentsError",
26
- {
27
- tool: Schema.String,
28
- detail: Schema.String,
29
- },
30
- ) {
31
- override get message() {
32
- return `The ${this.tool} tool was called with invalid arguments: ${this.detail}.\nPlease rewrite the input so it satisfies the expected schema.`
33
- }
34
- }
35
-
36
- export type Context<M extends Metadata = Metadata> = {
37
- sessionID: SessionID
38
- messageID: MessageID
39
- agent: string
40
- abort: AbortSignal
41
- callID?: string
42
- extra?: { [key: string]: unknown }
43
- messages: SessionV1.WithParts[]
44
- metadata(input: { title?: string; metadata?: M }): Effect.Effect<void>
45
- ask(input: Omit<PermissionV1.Request, "id" | "sessionID" | "tool">): Effect.Effect<void>
46
- }
47
-
48
- export interface ExecuteResult<M extends Metadata = Metadata> {
49
- title: string
50
- metadata: M
51
- output: string
52
- attachments?: Omit<SessionV1.FilePart, "id" | "sessionID" | "messageID">[]
53
- }
54
-
55
- export interface Def<
56
- Parameters extends Schema.Decoder<unknown> = Schema.Decoder<unknown>,
57
- M extends Metadata = Metadata,
58
- > {
59
- id: string
60
- description: string
61
- parameters: Parameters
62
- jsonSchema?: JSONSchema7
63
- execute(args: Schema.Schema.Type<Parameters>, ctx: Context): Effect.Effect<ExecuteResult<M>>
64
- formatValidationError?(error: unknown): string
65
- }
66
- export type DefWithoutID<
67
- Parameters extends Schema.Decoder<unknown> = Schema.Decoder<unknown>,
68
- M extends Metadata = Metadata,
69
- > = Omit<Def<Parameters, M>, "id">
70
-
71
- export interface Info<
72
- Parameters extends Schema.Decoder<unknown> = Schema.Decoder<unknown>,
73
- M extends Metadata = Metadata,
74
- > {
75
- id: string
76
- init: () => Effect.Effect<DefWithoutID<Parameters, M>>
77
- }
78
-
79
- type Init<Parameters extends Schema.Decoder<unknown>, M extends Metadata> =
80
- | DefWithoutID<Parameters, M>
81
- | (() => Effect.Effect<DefWithoutID<Parameters, M>>)
82
-
83
- export type InferParameters<T> =
84
- T extends Info<infer P, any>
85
- ? Schema.Schema.Type<P>
86
- : T extends Effect.Effect<Info<infer P, any>, any, any>
87
- ? Schema.Schema.Type<P>
88
- : never
89
- export type InferMetadata<T> =
90
- T extends Info<any, infer M> ? M : T extends Effect.Effect<Info<any, infer M>, any, any> ? M : never
91
-
92
- export type InferDef<T> =
93
- T extends Info<infer P, infer M>
94
- ? Def<P, M>
95
- : T extends Effect.Effect<Info<infer P, infer M>, any, any>
96
- ? Def<P, M>
97
- : never
98
-
99
- function wrap<Parameters extends Schema.Decoder<unknown>, Result extends Metadata>(
100
- id: string,
101
- init: Init<Parameters, Result>,
102
- truncate: Truncate.Interface,
103
- agents: Agent.Interface,
104
- ) {
105
- return () =>
106
- Effect.gen(function* () {
107
- const toolInfo = typeof init === "function" ? { ...(yield* init()) } : { ...init }
108
- // Compile the parser closure once per tool init; `decodeUnknownEffect`
109
- // allocates a new closure per call, so hoisting avoids re-closing it for
110
- // every LLM tool invocation.
111
- const decode = Schema.decodeUnknownEffect(toolInfo.parameters)
112
- const execute = toolInfo.execute
113
- toolInfo.execute = (args, ctx) => {
114
- const attrs = {
115
- "tool.name": id,
116
- "session.id": ctx.sessionID,
117
- "message.id": ctx.messageID,
118
- ...(ctx.callID ? { "tool.call_id": ctx.callID } : {}),
119
- }
120
- return Effect.gen(function* () {
121
- const decoded = yield* decode(args).pipe(
122
- Effect.mapError(
123
- (error) =>
124
- new InvalidArgumentsError({
125
- tool: id,
126
- detail: toolInfo.formatValidationError ? toolInfo.formatValidationError(error) : String(error),
127
- }),
128
- ),
129
- )
130
- const result = yield* execute(decoded as Schema.Schema.Type<Parameters>, ctx)
131
- if (result.metadata.truncated !== undefined) {
132
- return result
133
- }
134
- const agent = yield* agents.get(ctx.agent)
135
- const truncated = yield* truncate.output(result.output, {}, agent)
136
- return {
137
- ...result,
138
- output: truncated.content,
139
- metadata: {
140
- ...result.metadata,
141
- truncated: truncated.truncated,
142
- ...(truncated.truncated && { outputPath: truncated.outputPath }),
143
- },
144
- }
145
- }).pipe(Effect.orDie, Effect.withSpan("Tool.execute", { attributes: attrs }))
146
- }
147
- return toolInfo
148
- })
149
- }
150
-
151
- export function define<
152
- Parameters extends Schema.Decoder<unknown>,
153
- Result extends Metadata,
154
- R,
155
- ID extends string = string,
156
- >(
157
- id: ID,
158
- init: Effect.Effect<Init<Parameters, Result>, never, R>,
159
- ): Effect.Effect<Info<Parameters, Result>, never, R | Truncate.Service | Agent.Service> & { id: ID } {
160
- return Object.assign(
161
- Effect.gen(function* () {
162
- const resolved = yield* init
163
- const truncate = yield* Truncate.Service
164
- const agents = yield* Agent.Service
165
- return { id, init: wrap(id, resolved, truncate, agents) }
166
- }),
167
- { id },
168
- )
169
- }
170
-
171
- export function init<P extends Schema.Decoder<unknown>, M extends Metadata>(
172
- info: Info<P, M>,
173
- ): Effect.Effect<Def<P, M>> {
174
- return Effect.gen(function* () {
175
- const init = yield* info.init()
176
- return {
177
- ...init,
178
- id: info.id,
179
- }
180
- })
181
- }
182
-
183
- export * as Tool from "./tool"
@@ -1,158 +0,0 @@
1
- import { LayerNode } from "@opencode-ai/core/effect/layer-node"
2
- import { NodePath } from "@effect/platform-node"
3
- import { Cause, Duration, Effect, Layer, Option, Schedule, Context } from "effect"
4
- import path from "path"
5
- import type { Agent } from "../agent/agent"
6
- import { FSUtil } from "@opencode-ai/core/fs-util"
7
- import { evaluate } from "@/permission/evaluate"
8
- import { Config } from "@/config/config"
9
- import { Identifier } from "../id/id"
10
- import { ToolID } from "./schema"
11
- import { TRUNCATION_DIR } from "./truncation-dir"
12
-
13
- const RETENTION = Duration.days(7)
14
-
15
- export const MAX_LINES = 2000
16
- export const MAX_BYTES = 50 * 1024
17
- export const DIR = TRUNCATION_DIR
18
- export const GLOB = path.join(TRUNCATION_DIR, "*")
19
-
20
- export type Result = { content: string; truncated: false } | { content: string; truncated: true; outputPath: string }
21
-
22
- export interface Options {
23
- maxLines?: number
24
- maxBytes?: number
25
- direction?: "head" | "tail"
26
- }
27
-
28
- function hasTaskTool(agent?: Agent.Info) {
29
- if (!agent?.permission) return false
30
- return evaluate("task", "*", agent.permission).action !== "deny"
31
- }
32
-
33
- export interface Interface {
34
- readonly cleanup: () => Effect.Effect<void>
35
- readonly write: (text: string) => Effect.Effect<string>
36
- /**
37
- * Returns output unchanged when it fits within the limits, otherwise writes the full text
38
- * to the truncation directory and returns a preview plus a hint to inspect the saved file.
39
- */
40
- readonly output: (text: string, options?: Options, agent?: Agent.Info) => Effect.Effect<Result>
41
- /**
42
- * Resolved truncation limits: values from `tool_output` in opencode config, or MAX_LINES / MAX_BYTES if unset.
43
- */
44
- readonly limits: () => Effect.Effect<{ maxLines: number; maxBytes: number }>
45
- }
46
-
47
- export class Service extends Context.Service<Service, Interface>()("@opencode/Truncate") {}
48
-
49
- export const layer = Layer.effect(
50
- Service,
51
- Effect.gen(function* () {
52
- const fs = yield* FSUtil.Service
53
-
54
- const cleanup = Effect.fn("Truncate.cleanup")(function* () {
55
- const cutoff = Identifier.timestamp(
56
- Identifier.create("tool", "ascending", Date.now() - Duration.toMillis(RETENTION)),
57
- )
58
- const entries = yield* fs.readDirectory(TRUNCATION_DIR).pipe(
59
- Effect.map((all) => all.filter((name) => name.startsWith("tool_"))),
60
- Effect.catch(() => Effect.succeed([])),
61
- )
62
- for (const entry of entries) {
63
- if (Identifier.timestamp(entry) >= cutoff) continue
64
- yield* fs.remove(path.join(TRUNCATION_DIR, entry)).pipe(Effect.catch(() => Effect.void))
65
- }
66
- })
67
-
68
- const write = Effect.fn("Truncate.write")(function* (text: string) {
69
- const file = path.join(TRUNCATION_DIR, ToolID.ascending())
70
- yield* fs.ensureDir(TRUNCATION_DIR).pipe(Effect.orDie)
71
- yield* fs.writeFileString(file, text).pipe(Effect.orDie)
72
- return file
73
- })
74
-
75
- const limits = Effect.fn("Truncate.limits")(function* () {
76
- const configSvc = yield* Effect.serviceOption(Config.Service)
77
- if (Option.isNone(configSvc)) return { maxLines: MAX_LINES, maxBytes: MAX_BYTES }
78
- const cfg = yield* configSvc.value.get().pipe(Effect.catch(() => Effect.succeed(undefined)))
79
- return {
80
- maxLines: cfg?.tool_output?.max_lines ?? MAX_LINES,
81
- maxBytes: cfg?.tool_output?.max_bytes ?? MAX_BYTES,
82
- }
83
- })
84
-
85
- const output = Effect.fn("Truncate.output")(function* (text: string, options: Options = {}, agent?: Agent.Info) {
86
- const resolved = yield* limits()
87
- const maxLines = options.maxLines ?? resolved.maxLines
88
- const maxBytes = options.maxBytes ?? resolved.maxBytes
89
- const direction = options.direction ?? "head"
90
- const lines = text.split("\n")
91
- const totalBytes = Buffer.byteLength(text, "utf-8")
92
-
93
- if (lines.length <= maxLines && totalBytes <= maxBytes) {
94
- return { content: text, truncated: false } as const
95
- }
96
-
97
- const out: string[] = []
98
- let i = 0
99
- let bytes = 0
100
- let hitBytes = false
101
-
102
- if (direction === "head") {
103
- for (i = 0; i < lines.length && i < maxLines; i++) {
104
- const size = Buffer.byteLength(lines[i], "utf-8") + (i > 0 ? 1 : 0)
105
- if (bytes + size > maxBytes) {
106
- hitBytes = true
107
- break
108
- }
109
- out.push(lines[i])
110
- bytes += size
111
- }
112
- } else {
113
- for (i = lines.length - 1; i >= 0 && out.length < maxLines; i--) {
114
- const size = Buffer.byteLength(lines[i], "utf-8") + (out.length > 0 ? 1 : 0)
115
- if (bytes + size > maxBytes) {
116
- hitBytes = true
117
- break
118
- }
119
- out.unshift(lines[i])
120
- bytes += size
121
- }
122
- }
123
-
124
- const removed = hitBytes ? totalBytes - bytes : lines.length - out.length
125
- const unit = hitBytes ? "bytes" : "lines"
126
- const preview = out.join("\n")
127
- const file = yield* write(text)
128
-
129
- const hint = hasTaskTool(agent)
130
- ? `The tool call succeeded but the output was truncated. Full output saved to: ${file}\nUse the Task tool to have explore agent process this file with Grep and Read (with offset/limit). Do NOT read the full file yourself - delegate to save context.`
131
- : `The tool call succeeded but the output was truncated. Full output saved to: ${file}\nUse Grep to search the full content or Read with offset/limit to view specific sections.`
132
-
133
- return {
134
- content:
135
- direction === "head"
136
- ? `${preview}\n\n...${removed} ${unit} truncated...\n\n${hint}`
137
- : `...${removed} ${unit} truncated...\n\n${hint}\n\n${preview}`,
138
- truncated: true,
139
- outputPath: file,
140
- } as const
141
- })
142
-
143
- yield* cleanup().pipe(
144
- Effect.catchCause((cause) => Effect.logError("truncation cleanup failed", { cause: Cause.pretty(cause) })),
145
- Effect.repeat(Schedule.spaced(Duration.hours(1))),
146
- Effect.delay(Duration.minutes(1)),
147
- Effect.forkScoped,
148
- )
149
-
150
- return Service.of({ cleanup, write, output, limits })
151
- }),
152
- )
153
-
154
- export const defaultLayer = layer.pipe(Layer.provide(FSUtil.defaultLayer), Layer.provide(NodePath.layer))
155
-
156
- export const node = LayerNode.make(layer, [FSUtil.node])
157
-
158
- export * as Truncate from "./truncate"
@@ -1,4 +0,0 @@
1
- import path from "path"
2
- import { Global } from "@opencode-ai/core/global"
3
-
4
- export const TRUNCATION_DIR = path.join(Global.Path.data, "tool-output")
@@ -1,194 +0,0 @@
1
- import { Effect, Schema } from "effect"
2
- import { HttpClient, HttpClientRequest } from "effect/unstable/http"
3
- import { Parser } from "htmlparser2"
4
- import * as Tool from "./tool"
5
- import TurndownService from "turndown"
6
- import DESCRIPTION from "./webfetch.txt"
7
- import DESCRIPTION_ZH from "./webfetch.zh.txt"
8
- import { isImageAttachment } from "@/util/media"
9
- import { loadDescription } from "./description"
10
-
11
- const MAX_RESPONSE_SIZE = 5 * 1024 * 1024 // 5MB
12
- const DEFAULT_TIMEOUT = 30 * 1000 // 30 seconds
13
- const MAX_TIMEOUT = 120 * 1000 // 2 minutes
14
-
15
- export const Parameters = Schema.Struct({
16
- url: Schema.String.annotate({ description: "The URL to fetch content from" }),
17
- format: Schema.Literals(["text", "markdown", "html"])
18
- .annotate({
19
- description: "The format to return the content in (text, markdown, or html). Defaults to markdown.",
20
- default: "markdown",
21
- })
22
- .pipe(Schema.withDecodingDefault(Effect.succeed("markdown" as const))),
23
- timeout: Schema.optional(Schema.Number).annotate({ description: "Optional timeout in seconds (max 120)" }),
24
- })
25
-
26
- export const WebFetchTool = Tool.define(
27
- "webfetch",
28
- Effect.gen(function* () {
29
- const http = yield* HttpClient.HttpClient
30
- const httpOk = HttpClient.filterStatusOk(http)
31
-
32
- return {
33
- description: loadDescription(DESCRIPTION, DESCRIPTION_ZH),
34
- parameters: Parameters,
35
- execute: (params: Schema.Schema.Type<typeof Parameters>, ctx: Tool.Context) =>
36
- Effect.gen(function* () {
37
- if (!params.url.startsWith("http://") && !params.url.startsWith("https://")) {
38
- throw new Error("URL must start with http:// or https://")
39
- }
40
-
41
- yield* ctx.ask({
42
- permission: "webfetch",
43
- patterns: [params.url],
44
- always: ["*"],
45
- metadata: {
46
- url: params.url,
47
- format: params.format,
48
- timeout: params.timeout,
49
- },
50
- })
51
-
52
- const timeout = Math.min((params.timeout ?? DEFAULT_TIMEOUT / 1000) * 1000, MAX_TIMEOUT)
53
-
54
- // Build Accept header based on requested format with q parameters for fallbacks
55
- let acceptHeader = "*/*"
56
- switch (params.format) {
57
- case "markdown":
58
- acceptHeader = "text/markdown;q=1.0, text/x-markdown;q=0.9, text/plain;q=0.8, text/html;q=0.7, */*;q=0.1"
59
- break
60
- case "text":
61
- acceptHeader = "text/plain;q=1.0, text/markdown;q=0.9, text/html;q=0.8, */*;q=0.1"
62
- break
63
- case "html":
64
- acceptHeader =
65
- "text/html;q=1.0, application/xhtml+xml;q=0.9, text/plain;q=0.8, text/markdown;q=0.7, */*;q=0.1"
66
- break
67
- default:
68
- acceptHeader =
69
- "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8"
70
- }
71
- const headers = {
72
- "User-Agent":
73
- "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36",
74
- Accept: acceptHeader,
75
- "Accept-Language": "en-US,en;q=0.9",
76
- }
77
-
78
- const request = HttpClientRequest.get(params.url).pipe(HttpClientRequest.setHeaders(headers))
79
-
80
- // Retry with honest UA if blocked by Cloudflare bot detection (TLS fingerprint mismatch)
81
- const response = yield* httpOk.execute(request).pipe(
82
- Effect.catchIf(
83
- (err) =>
84
- err.reason._tag === "StatusCodeError" &&
85
- err.reason.response.status === 403 &&
86
- err.reason.response.headers["cf-mitigated"] === "challenge",
87
- () =>
88
- httpOk.execute(
89
- HttpClientRequest.get(params.url).pipe(
90
- HttpClientRequest.setHeaders({ ...headers, "User-Agent": "opencode" }),
91
- ),
92
- ),
93
- ),
94
- Effect.timeoutOrElse({ duration: timeout, orElse: () => Effect.die(new Error("Request timed out")) }),
95
- )
96
-
97
- // Check content length
98
- const contentLength = response.headers["content-length"]
99
- if (contentLength && parseInt(contentLength) > MAX_RESPONSE_SIZE) {
100
- throw new Error("Response too large (exceeds 5MB limit)")
101
- }
102
-
103
- const arrayBuffer = yield* response.arrayBuffer
104
- if (arrayBuffer.byteLength > MAX_RESPONSE_SIZE) {
105
- throw new Error("Response too large (exceeds 5MB limit)")
106
- }
107
-
108
- const contentType = response.headers["content-type"] || ""
109
- const mime = contentType.split(";")[0]?.trim().toLowerCase() || ""
110
- const title = `${params.url} (${contentType})`
111
-
112
- if (isImageAttachment(mime)) {
113
- const base64Content = Buffer.from(arrayBuffer).toString("base64")
114
- return {
115
- title,
116
- output: "Image fetched successfully",
117
- metadata: {},
118
- attachments: [
119
- {
120
- type: "file" as const,
121
- mime,
122
- url: `data:${mime};base64,${base64Content}`,
123
- },
124
- ],
125
- }
126
- }
127
-
128
- const content = new TextDecoder().decode(arrayBuffer)
129
-
130
- // Handle content based on requested format and actual content type
131
- switch (params.format) {
132
- case "markdown":
133
- if (contentType.includes("text/html")) {
134
- const markdown = convertHTMLToMarkdown(content)
135
- return {
136
- output: markdown,
137
- title,
138
- metadata: {},
139
- }
140
- }
141
- return { output: content, title, metadata: {} }
142
-
143
- case "text":
144
- if (contentType.includes("text/html")) {
145
- return { output: extractTextFromHTML(content), title, metadata: {} }
146
- }
147
- return { output: content, title, metadata: {} }
148
-
149
- case "html":
150
- return { output: content, title, metadata: {} }
151
-
152
- default:
153
- return { output: content, title, metadata: {} }
154
- }
155
- }).pipe(Effect.orDie),
156
- }
157
- }),
158
- )
159
-
160
- function extractTextFromHTML(html: string) {
161
- let text = ""
162
- let skipDepth = 0
163
-
164
- const parser = new Parser({
165
- onopentag(name) {
166
- if (skipDepth > 0 || ["script", "style", "noscript", "iframe", "object", "embed"].includes(name)) {
167
- skipDepth++
168
- }
169
- },
170
- ontext(input) {
171
- if (skipDepth === 0) text += input
172
- },
173
- onclosetag() {
174
- if (skipDepth > 0) skipDepth--
175
- },
176
- })
177
-
178
- parser.write(html)
179
- parser.end()
180
-
181
- return text.trim()
182
- }
183
-
184
- function convertHTMLToMarkdown(html: string): string {
185
- const turndownService = new TurndownService({
186
- headingStyle: "atx",
187
- hr: "---",
188
- bulletListMarker: "-",
189
- codeBlockStyle: "fenced",
190
- emDelimiter: "*",
191
- })
192
- turndownService.remove(["script", "style", "meta", "link"])
193
- return turndownService.turndown(html)
194
- }
@@ -1,13 +0,0 @@
1
- - Fetches content from a specified URL
2
- - Takes a URL and optional format as input
3
- - Fetches the URL content, converts to requested format (markdown by default)
4
- - Returns the content in the specified format
5
- - Use this tool when you need to retrieve and analyze web content
6
-
7
- Usage notes:
8
- - IMPORTANT: if another tool is present that offers better web fetching capabilities, is more targeted to the task, or has fewer restrictions, prefer using that tool instead of this one.
9
- - The URL must be a fully-formed valid URL
10
- - HTTP URLs will be automatically upgraded to HTTPS
11
- - Format options: "markdown" (default), "text", or "html"
12
- - This tool is read-only and does not modify any files
13
- - Results may be summarized if the content is very large
@@ -1,13 +0,0 @@
1
- - 从指定 URL 获取内容
2
- - 接受 URL 和可选格式作为输入
3
- - 获取 URL 内容,转换为请求的格式(默认为 markdown)
4
- - 以指定格式返回内容
5
- - 当您需要检索和分析网页内容时使用此工具
6
-
7
- 使用说明:
8
- - 重要提示:如果存在另一个提供更好网页获取功能、更针对该任务或限制更少的工具,请优先使用该工具而非此工具。
9
- - URL 必须是格式正确的有效 URL
10
- - HTTP URL 将自动升级为 HTTPS
11
- - 格式选项:"markdown"(默认)、"text" 或 "html"
12
- - 此工具是只读的,不会修改任何文件
13
- - 如果内容非常大,结果可能会被摘要