onlycode 1.18.0 → 1.19.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 (417) hide show
  1. package/package.json +11 -146
  2. package/src/account/account.ts +0 -463
  3. package/src/account/repo.ts +0 -173
  4. package/src/account/schema.ts +0 -99
  5. package/src/account/url.ts +0 -8
  6. package/src/acp/agent.ts +0 -95
  7. package/src/acp/config-option.ts +0 -203
  8. package/src/acp/content.ts +0 -250
  9. package/src/acp/directory.ts +0 -210
  10. package/src/acp/error.ts +0 -90
  11. package/src/acp/event.ts +0 -342
  12. package/src/acp/permission.ts +0 -124
  13. package/src/acp/profile.ts +0 -42
  14. package/src/acp/service.ts +0 -1048
  15. package/src/acp/session.ts +0 -231
  16. package/src/acp/tool.ts +0 -367
  17. package/src/acp/usage.ts +0 -232
  18. package/src/agent/agent.ts +0 -459
  19. package/src/agent/generate.txt +0 -75
  20. package/src/agent/prompt/compaction.txt +0 -9
  21. package/src/agent/prompt/explore.txt +0 -18
  22. package/src/agent/prompt/summary.txt +0 -11
  23. package/src/agent/prompt/title.txt +0 -44
  24. package/src/agent/subagent-permissions.ts +0 -27
  25. package/src/audio.d.ts +0 -14
  26. package/src/auth/index.ts +0 -99
  27. package/src/background/job.ts +0 -39
  28. package/src/bus/global.ts +0 -22
  29. package/src/cli/bootstrap.ts +0 -11
  30. package/src/cli/cmd/account.ts +0 -264
  31. package/src/cli/cmd/acp.ts +0 -73
  32. package/src/cli/cmd/agent.ts +0 -259
  33. package/src/cli/cmd/attach.ts +0 -97
  34. package/src/cli/cmd/cmd.ts +0 -7
  35. package/src/cli/cmd/db.ts +0 -62
  36. package/src/cli/cmd/debug/agent.handler.ts +0 -193
  37. package/src/cli/cmd/debug/agent.ts +0 -27
  38. package/src/cli/cmd/debug/config.ts +0 -14
  39. package/src/cli/cmd/debug/file.ts +0 -73
  40. package/src/cli/cmd/debug/index.ts +0 -87
  41. package/src/cli/cmd/debug/lsp.ts +0 -50
  42. package/src/cli/cmd/debug/ripgrep.ts +0 -79
  43. package/src/cli/cmd/debug/scrap.ts +0 -15
  44. package/src/cli/cmd/debug/skill.ts +0 -15
  45. package/src/cli/cmd/debug/snapshot.ts +0 -50
  46. package/src/cli/cmd/debug/startup.ts +0 -11
  47. package/src/cli/cmd/debug/v2.ts +0 -44
  48. package/src/cli/cmd/export.ts +0 -292
  49. package/src/cli/cmd/generate.ts +0 -54
  50. package/src/cli/cmd/github.handler.ts +0 -1593
  51. package/src/cli/cmd/github.shared.ts +0 -30
  52. package/src/cli/cmd/github.ts +0 -42
  53. package/src/cli/cmd/import.ts +0 -224
  54. package/src/cli/cmd/mcp.ts +0 -849
  55. package/src/cli/cmd/models.ts +0 -66
  56. package/src/cli/cmd/plug.ts +0 -230
  57. package/src/cli/cmd/pr.ts +0 -115
  58. package/src/cli/cmd/prompt-display.ts +0 -1
  59. package/src/cli/cmd/providers.ts +0 -534
  60. package/src/cli/cmd/run/demo.ts +0 -1274
  61. package/src/cli/cmd/run/entry.body.ts +0 -205
  62. package/src/cli/cmd/run/footer.command.tsx +0 -1064
  63. package/src/cli/cmd/run/footer.menu.tsx +0 -351
  64. package/src/cli/cmd/run/footer.permission.tsx +0 -472
  65. package/src/cli/cmd/run/footer.prompt.tsx +0 -1306
  66. package/src/cli/cmd/run/footer.question.tsx +0 -573
  67. package/src/cli/cmd/run/footer.subagent.tsx +0 -173
  68. package/src/cli/cmd/run/footer.ts +0 -1129
  69. package/src/cli/cmd/run/footer.view.tsx +0 -943
  70. package/src/cli/cmd/run/footer.width.ts +0 -27
  71. package/src/cli/cmd/run/permission.shared.ts +0 -256
  72. package/src/cli/cmd/run/prompt.editor.ts +0 -157
  73. package/src/cli/cmd/run/prompt.shared.ts +0 -153
  74. package/src/cli/cmd/run/question.shared.ts +0 -340
  75. package/src/cli/cmd/run/runtime.boot.ts +0 -202
  76. package/src/cli/cmd/run/runtime.lifecycle.ts +0 -406
  77. package/src/cli/cmd/run/runtime.queue.ts +0 -349
  78. package/src/cli/cmd/run/runtime.shared.ts +0 -17
  79. package/src/cli/cmd/run/runtime.stdin.ts +0 -37
  80. package/src/cli/cmd/run/runtime.ts +0 -814
  81. package/src/cli/cmd/run/scrollback.shared.ts +0 -92
  82. package/src/cli/cmd/run/scrollback.surface.ts +0 -431
  83. package/src/cli/cmd/run/scrollback.writer.tsx +0 -352
  84. package/src/cli/cmd/run/session-data.ts +0 -1113
  85. package/src/cli/cmd/run/session-replay.ts +0 -374
  86. package/src/cli/cmd/run/session.shared.ts +0 -196
  87. package/src/cli/cmd/run/splash.ts +0 -275
  88. package/src/cli/cmd/run/stream.transport.ts +0 -1462
  89. package/src/cli/cmd/run/stream.ts +0 -175
  90. package/src/cli/cmd/run/subagent-data.ts +0 -876
  91. package/src/cli/cmd/run/theme.ts +0 -690
  92. package/src/cli/cmd/run/tool.ts +0 -1489
  93. package/src/cli/cmd/run/trace.ts +0 -94
  94. package/src/cli/cmd/run/turn-summary.ts +0 -47
  95. package/src/cli/cmd/run/types.ts +0 -350
  96. package/src/cli/cmd/run/variant.shared.ts +0 -215
  97. package/src/cli/cmd/run.ts +0 -894
  98. package/src/cli/cmd/serve.ts +0 -24
  99. package/src/cli/cmd/session.ts +0 -147
  100. package/src/cli/cmd/stats.ts +0 -393
  101. package/src/cli/cmd/tui.ts +0 -224
  102. package/src/cli/cmd/uninstall.ts +0 -353
  103. package/src/cli/cmd/upgrade.ts +0 -74
  104. package/src/cli/cmd/web.ts +0 -84
  105. package/src/cli/effect/prompt.ts +0 -37
  106. package/src/cli/effect-cmd.ts +0 -96
  107. package/src/cli/error.ts +0 -130
  108. package/src/cli/heap.ts +0 -45
  109. package/src/cli/logo-pixel.ts +0 -35
  110. package/src/cli/logo.ts +0 -1
  111. package/src/cli/network.ts +0 -64
  112. package/src/cli/tui/layer.ts +0 -7
  113. package/src/cli/tui/validate-session.ts +0 -29
  114. package/src/cli/tui/worker.ts +0 -71
  115. package/src/cli/ui.ts +0 -148
  116. package/src/cli/upgrade.ts +0 -53
  117. package/src/command/index.ts +0 -184
  118. package/src/command/template/initialize.txt +0 -66
  119. package/src/command/template/review.txt +0 -101
  120. package/src/config/agent.ts +0 -59
  121. package/src/config/command.ts +0 -39
  122. package/src/config/config.ts +0 -686
  123. package/src/config/entry-name.ts +0 -19
  124. package/src/config/managed.ts +0 -69
  125. package/src/config/markdown.ts +0 -36
  126. package/src/config/parse.ts +0 -79
  127. package/src/config/paths.ts +0 -45
  128. package/src/config/plugin.ts +0 -79
  129. package/src/config/tui-cwd.ts +0 -5
  130. package/src/config/tui-host-attention.ts +0 -21
  131. package/src/config/tui-migrate.ts +0 -132
  132. package/src/config/tui.ts +0 -274
  133. package/src/config/variable.ts +0 -91
  134. package/src/control-plane/adapters/index.ts +0 -41
  135. package/src/control-plane/adapters/worktree.ts +0 -96
  136. package/src/control-plane/dev/README.md +0 -19
  137. package/src/control-plane/dev/debug-workspace-plugin.ts +0 -73
  138. package/src/control-plane/types.ts +0 -59
  139. package/src/control-plane/util.ts +0 -39
  140. package/src/control-plane/workspace-adapter-runtime.ts +0 -51
  141. package/src/control-plane/workspace-context.ts +0 -26
  142. package/src/control-plane/workspace.ts +0 -989
  143. package/src/effect/app-runtime.ts +0 -132
  144. package/src/effect/bootstrap-runtime.ts +0 -23
  145. package/src/effect/bridge.ts +0 -84
  146. package/src/effect/config-service.ts +0 -67
  147. package/src/effect/instance-ref.ts +0 -11
  148. package/src/effect/instance-registry.ts +0 -12
  149. package/src/effect/instance-state.ts +0 -69
  150. package/src/effect/promise.ts +0 -17
  151. package/src/effect/run-service.ts +0 -47
  152. package/src/effect/runner.ts +0 -217
  153. package/src/effect/runtime-flags.ts +0 -79
  154. package/src/env/index.ts +0 -43
  155. package/src/event-v2-bridge.ts +0 -79
  156. package/src/format/formatter.ts +0 -404
  157. package/src/format/index.ts +0 -205
  158. package/src/git/index.ts +0 -350
  159. package/src/id/id.ts +0 -80
  160. package/src/ide/index.ts +0 -61
  161. package/src/image/image.ts +0 -174
  162. package/src/index.ts +0 -142
  163. package/src/installation/index.ts +0 -350
  164. package/src/lsp/client.ts +0 -650
  165. package/src/lsp/diagnostic.ts +0 -29
  166. package/src/lsp/language.ts +0 -121
  167. package/src/lsp/launch.ts +0 -21
  168. package/src/lsp/lsp.ts +0 -511
  169. package/src/lsp/server.ts +0 -1983
  170. package/src/markdown.d.ts +0 -4
  171. package/src/mcp/auth.ts +0 -174
  172. package/src/mcp/catalog.ts +0 -153
  173. package/src/mcp/index.ts +0 -953
  174. package/src/mcp/oauth-callback.ts +0 -233
  175. package/src/mcp/oauth-provider.ts +0 -206
  176. package/src/node.ts +0 -4
  177. package/src/patch/index.ts +0 -686
  178. package/src/permission/arity.ts +0 -163
  179. package/src/permission/evaluate.ts +0 -1
  180. package/src/permission/index.ts +0 -230
  181. package/src/plugin/azure.ts +0 -26
  182. package/src/plugin/cloudflare.ts +0 -76
  183. package/src/plugin/digitalocean.ts +0 -383
  184. package/src/plugin/github-copilot/copilot.ts +0 -414
  185. package/src/plugin/github-copilot/models.ts +0 -246
  186. package/src/plugin/index.ts +0 -316
  187. package/src/plugin/install.ts +0 -439
  188. package/src/plugin/loader.ts +0 -237
  189. package/src/plugin/meta.ts +0 -188
  190. package/src/plugin/openai/README.md +0 -31
  191. package/src/plugin/openai/codex.ts +0 -641
  192. package/src/plugin/openai/ws-pool.ts +0 -270
  193. package/src/plugin/openai/ws.ts +0 -381
  194. package/src/plugin/pty-environment.ts +0 -24
  195. package/src/plugin/shared.ts +0 -323
  196. package/src/plugin/snowflake-cortex.ts +0 -529
  197. package/src/plugin/tui/internal.ts +0 -10
  198. package/src/plugin/tui/runtime.ts +0 -1130
  199. package/src/plugin/xai.ts +0 -716
  200. package/src/project/bootstrap-service.ts +0 -9
  201. package/src/project/bootstrap.ts +0 -76
  202. package/src/project/instance-context.ts +0 -24
  203. package/src/project/instance-layer.ts +0 -11
  204. package/src/project/instance-runtime.ts +0 -16
  205. package/src/project/instance-store.ts +0 -209
  206. package/src/project/project.ts +0 -519
  207. package/src/project/vcs.ts +0 -431
  208. package/src/provider/auth.ts +0 -233
  209. package/src/provider/error.ts +0 -188
  210. package/src/provider/model-status.ts +0 -8
  211. package/src/provider/provider.ts +0 -1975
  212. package/src/provider/transform.ts +0 -1543
  213. package/src/question/index.ts +0 -229
  214. package/src/question/schema.ts +0 -10
  215. package/src/server/auth.ts +0 -48
  216. package/src/server/event.ts +0 -13
  217. package/src/server/global-lifecycle.ts +0 -28
  218. package/src/server/init-projectors.ts +0 -3
  219. package/src/server/mdns.ts +0 -47
  220. package/src/server/projectors.ts +0 -1
  221. package/src/server/proxy-util.ts +0 -48
  222. package/src/server/routes/instance/httpapi/AGENTS.md +0 -39
  223. package/src/server/routes/instance/httpapi/api.ts +0 -78
  224. package/src/server/routes/instance/httpapi/errors.ts +0 -193
  225. package/src/server/routes/instance/httpapi/groups/config.ts +0 -65
  226. package/src/server/routes/instance/httpapi/groups/control-plane.ts +0 -35
  227. package/src/server/routes/instance/httpapi/groups/control.ts +0 -76
  228. package/src/server/routes/instance/httpapi/groups/event.ts +0 -29
  229. package/src/server/routes/instance/httpapi/groups/experimental.ts +0 -275
  230. package/src/server/routes/instance/httpapi/groups/file.ts +0 -185
  231. package/src/server/routes/instance/httpapi/groups/global.ts +0 -138
  232. package/src/server/routes/instance/httpapi/groups/instance.ts +0 -206
  233. package/src/server/routes/instance/httpapi/groups/mcp.ts +0 -156
  234. package/src/server/routes/instance/httpapi/groups/metadata.ts +0 -18
  235. package/src/server/routes/instance/httpapi/groups/permission.ts +0 -61
  236. package/src/server/routes/instance/httpapi/groups/project-copy.ts +0 -32
  237. package/src/server/routes/instance/httpapi/groups/project.ts +0 -93
  238. package/src/server/routes/instance/httpapi/groups/provider.ts +0 -101
  239. package/src/server/routes/instance/httpapi/groups/pty.ts +0 -172
  240. package/src/server/routes/instance/httpapi/groups/query.ts +0 -12
  241. package/src/server/routes/instance/httpapi/groups/question.ts +0 -74
  242. package/src/server/routes/instance/httpapi/groups/session.ts +0 -462
  243. package/src/server/routes/instance/httpapi/groups/sync.ts +0 -113
  244. package/src/server/routes/instance/httpapi/groups/tui.ts +0 -208
  245. package/src/server/routes/instance/httpapi/groups/workspace.ts +0 -141
  246. package/src/server/routes/instance/httpapi/handlers/config.ts +0 -34
  247. package/src/server/routes/instance/httpapi/handlers/control-plane.ts +0 -37
  248. package/src/server/routes/instance/httpapi/handlers/control.ts +0 -43
  249. package/src/server/routes/instance/httpapi/handlers/event.ts +0 -99
  250. package/src/server/routes/instance/httpapi/handlers/experimental.ts +0 -192
  251. package/src/server/routes/instance/httpapi/handlers/file.ts +0 -139
  252. package/src/server/routes/instance/httpapi/handlers/global.ts +0 -156
  253. package/src/server/routes/instance/httpapi/handlers/instance.ts +0 -110
  254. package/src/server/routes/instance/httpapi/handlers/mcp.ts +0 -111
  255. package/src/server/routes/instance/httpapi/handlers/permission.ts +0 -41
  256. package/src/server/routes/instance/httpapi/handlers/project-copy.ts +0 -83
  257. package/src/server/routes/instance/httpapi/handlers/project.ts +0 -63
  258. package/src/server/routes/instance/httpapi/handlers/provider.ts +0 -113
  259. package/src/server/routes/instance/httpapi/handlers/pty.ts +0 -273
  260. package/src/server/routes/instance/httpapi/handlers/question.ts +0 -54
  261. package/src/server/routes/instance/httpapi/handlers/session-errors.ts +0 -21
  262. package/src/server/routes/instance/httpapi/handlers/session.ts +0 -440
  263. package/src/server/routes/instance/httpapi/handlers/sync.ts +0 -89
  264. package/src/server/routes/instance/httpapi/handlers/tui.ts +0 -131
  265. package/src/server/routes/instance/httpapi/handlers/workspace.ts +0 -102
  266. package/src/server/routes/instance/httpapi/lifecycle.ts +0 -54
  267. package/src/server/routes/instance/httpapi/middleware/authorization.ts +0 -150
  268. package/src/server/routes/instance/httpapi/middleware/compression.ts +0 -64
  269. package/src/server/routes/instance/httpapi/middleware/cors-vary.ts +0 -29
  270. package/src/server/routes/instance/httpapi/middleware/error.ts +0 -43
  271. package/src/server/routes/instance/httpapi/middleware/fence.ts +0 -25
  272. package/src/server/routes/instance/httpapi/middleware/instance-context.ts +0 -43
  273. package/src/server/routes/instance/httpapi/middleware/proxy.ts +0 -108
  274. package/src/server/routes/instance/httpapi/middleware/schema-error.ts +0 -41
  275. package/src/server/routes/instance/httpapi/middleware/workspace-routing.ts +0 -250
  276. package/src/server/routes/instance/httpapi/public.ts +0 -535
  277. package/src/server/routes/instance/httpapi/server.ts +0 -298
  278. package/src/server/routes/instance/httpapi/websocket-tracker.ts +0 -57
  279. package/src/server/server.ts +0 -225
  280. package/src/server/shared/fence.ts +0 -60
  281. package/src/server/shared/pty-ticket.ts +0 -15
  282. package/src/server/shared/public-ui.ts +0 -12
  283. package/src/server/shared/tui-control.ts +0 -28
  284. package/src/server/shared/ui.ts +0 -108
  285. package/src/server/shared/workspace-routing.ts +0 -38
  286. package/src/server/tui-event.ts +0 -53
  287. package/src/session/compaction.ts +0 -620
  288. package/src/session/instruction.ts +0 -241
  289. package/src/session/llm/AGENTS.md +0 -90
  290. package/src/session/llm/ai-sdk.ts +0 -288
  291. package/src/session/llm/native-request.ts +0 -196
  292. package/src/session/llm/native-runtime.ts +0 -195
  293. package/src/session/llm/request.ts +0 -216
  294. package/src/session/llm.ts +0 -415
  295. package/src/session/message-error.ts +0 -14
  296. package/src/session/message-v2.ts +0 -747
  297. package/src/session/message.ts +0 -148
  298. package/src/session/overflow.ts +0 -34
  299. package/src/session/processor.ts +0 -1084
  300. package/src/session/prompt/anthropic.txt +0 -109
  301. package/src/session/prompt/beast.txt +0 -151
  302. package/src/session/prompt/build-switch.txt +0 -9
  303. package/src/session/prompt/codex.txt +0 -83
  304. package/src/session/prompt/copilot-gpt-5.txt +0 -147
  305. package/src/session/prompt/default.txt +0 -99
  306. package/src/session/prompt/gemini.txt +0 -159
  307. package/src/session/prompt/gpt.txt +0 -111
  308. package/src/session/prompt/kimi.txt +0 -99
  309. package/src/session/prompt/plan-mode.txt +0 -74
  310. package/src/session/prompt/plan-reminder-anthropic.txt +0 -71
  311. package/src/session/prompt/plan.txt +0 -30
  312. package/src/session/prompt/trinity.txt +0 -101
  313. package/src/session/prompt.ts +0 -1707
  314. package/src/session/reminders.ts +0 -92
  315. package/src/session/retry.ts +0 -201
  316. package/src/session/revert.ts +0 -160
  317. package/src/session/run-state.ts +0 -156
  318. package/src/session/schema.ts +0 -26
  319. package/src/session/session.ts +0 -1119
  320. package/src/session/status.ts +0 -97
  321. package/src/session/summary.ts +0 -165
  322. package/src/session/system.ts +0 -117
  323. package/src/session/todo.ts +0 -90
  324. package/src/session/tools.ts +0 -207
  325. package/src/share/session.ts +0 -61
  326. package/src/share/share-next.ts +0 -385
  327. package/src/skill/discovery.ts +0 -109
  328. package/src/skill/index.ts +0 -366
  329. package/src/snapshot/index.ts +0 -808
  330. package/src/sql.d.ts +0 -4
  331. package/src/storage/schema.ts +0 -5
  332. package/src/storage/storage.ts +0 -329
  333. package/src/sync/README.md +0 -179
  334. package/src/sync/schema.ts +0 -11
  335. package/src/temporary.ts +0 -31
  336. package/src/tool/apply_patch.ts +0 -315
  337. package/src/tool/apply_patch.txt +0 -33
  338. package/src/tool/apply_patch.zh.txt +0 -33
  339. package/src/tool/description.ts +0 -100
  340. package/src/tool/edit.ts +0 -739
  341. package/src/tool/edit.txt +0 -10
  342. package/src/tool/edit.zh.txt +0 -10
  343. package/src/tool/external-directory.ts +0 -49
  344. package/src/tool/glob.ts +0 -78
  345. package/src/tool/glob.txt +0 -6
  346. package/src/tool/glob.zh.txt +0 -6
  347. package/src/tool/grep.ts +0 -114
  348. package/src/tool/grep.txt +0 -8
  349. package/src/tool/grep.zh.txt +0 -8
  350. package/src/tool/invalid.ts +0 -21
  351. package/src/tool/json-schema.ts +0 -164
  352. package/src/tool/lsp.ts +0 -115
  353. package/src/tool/lsp.txt +0 -24
  354. package/src/tool/lsp.zh.txt +0 -24
  355. package/src/tool/mcp-websearch.ts +0 -96
  356. package/src/tool/plan-enter.txt +0 -14
  357. package/src/tool/plan-enter.zh.txt +0 -14
  358. package/src/tool/plan-exit.txt +0 -13
  359. package/src/tool/plan-exit.zh.txt +0 -13
  360. package/src/tool/plan.ts +0 -81
  361. package/src/tool/question.ts +0 -46
  362. package/src/tool/question.txt +0 -10
  363. package/src/tool/question.zh.txt +0 -10
  364. package/src/tool/read.ts +0 -388
  365. package/src/tool/read.txt +0 -14
  366. package/src/tool/read.zh.txt +0 -14
  367. package/src/tool/registry.ts +0 -440
  368. package/src/tool/schema.ts +0 -14
  369. package/src/tool/shell/id.ts +0 -19
  370. package/src/tool/shell/prompt.ts +0 -307
  371. package/src/tool/shell/shell.txt +0 -21
  372. package/src/tool/shell.ts +0 -657
  373. package/src/tool/skill.ts +0 -73
  374. package/src/tool/skill.txt +0 -5
  375. package/src/tool/skill.zh.txt +0 -5
  376. package/src/tool/task.ts +0 -348
  377. package/src/tool/task.txt +0 -19
  378. package/src/tool/task.zh.txt +0 -19
  379. package/src/tool/todo.ts +0 -59
  380. package/src/tool/todowrite.txt +0 -44
  381. package/src/tool/todowrite.zh.txt +0 -44
  382. package/src/tool/tool.ts +0 -183
  383. package/src/tool/truncate.ts +0 -158
  384. package/src/tool/truncation-dir.ts +0 -4
  385. package/src/tool/webfetch.ts +0 -194
  386. package/src/tool/webfetch.txt +0 -13
  387. package/src/tool/webfetch.zh.txt +0 -13
  388. package/src/tool/websearch.ts +0 -145
  389. package/src/tool/websearch.txt +0 -14
  390. package/src/tool/websearch.zh.txt +0 -14
  391. package/src/tool/write.ts +0 -106
  392. package/src/tool/write.txt +0 -8
  393. package/src/tool/write.zh.txt +0 -8
  394. package/src/util/archive.ts +0 -17
  395. package/src/util/bom.ts +0 -27
  396. package/src/util/data-url.ts +0 -9
  397. package/src/util/defer.ts +0 -10
  398. package/src/util/effect-http-client.ts +0 -11
  399. package/src/util/error.ts +0 -1
  400. package/src/util/filesystem.ts +0 -251
  401. package/src/util/html.ts +0 -8
  402. package/src/util/iife.ts +0 -3
  403. package/src/util/lazy.ts +0 -20
  404. package/src/util/local-context.ts +0 -25
  405. package/src/util/locale.ts +0 -2
  406. package/src/util/media.ts +0 -26
  407. package/src/util/process.ts +0 -177
  408. package/src/util/proxy-env.ts +0 -72
  409. package/src/util/queue.ts +0 -32
  410. package/src/util/record.ts +0 -1
  411. package/src/util/repository.ts +0 -232
  412. package/src/util/rpc.ts +0 -66
  413. package/src/util/signal.ts +0 -12
  414. package/src/util/timeout.ts +0 -13
  415. package/src/util/token.ts +0 -1
  416. package/src/util/wildcard.ts +0 -59
  417. package/src/worktree/index.ts +0 -654
package/src/tool/edit.txt DELETED
@@ -1,10 +0,0 @@
1
- Performs exact string replacements in files.
2
-
3
- Usage:
4
- - You must use your `Read` tool at least once in the conversation before editing. This tool will error if you attempt an edit without reading the file.
5
- - When editing text from Read tool output, ensure you preserve the exact indentation (tabs/spaces) as it appears AFTER the line number prefix. The line number prefix format is: line number + colon + space (e.g., `1: `). Everything after that space is the actual file content to match. Never include any part of the line number prefix in the oldString or newString.
6
- - ALWAYS prefer editing existing files in the codebase. NEVER write new files unless explicitly required.
7
- - Only use emojis if the user explicitly requests it. Avoid adding emojis to files unless asked.
8
- - The edit will FAIL if `oldString` is not found in the file with an error "oldString not found in content".
9
- - The edit will FAIL if `oldString` is found multiple times in the file with an error "Found multiple matches for oldString. Provide more surrounding lines in oldString to identify the correct match." Either provide a larger string with more surrounding context to make it unique or use `replaceAll` to change every instance of `oldString`.
10
- - Use `replaceAll` for replacing and renaming strings across the file. This parameter is useful if you want to rename a variable for instance.
@@ -1,10 +0,0 @@
1
- 在文件中执行精确的字符串替换。
2
-
3
- 用法:
4
- - 在编辑之前,您必须在对话中至少使用一次 `Read` 工具。如果您尝试在未读取文件的情况下进行编辑,此工具将报错。
5
- - 编辑来自 Read 工具输出的文本时,请确保保留行号前缀之后的精确缩进(制表符/空格)。行号前缀格式为:行号 + 冒号 + 空格(例如,`1: `)。该空格之后的所有内容都是要匹配的实际文件内容。切勿在 oldString 或 newString 中包含行号前缀的任何部分。
6
- - 始终优先编辑代码库中的现有文件。除非明确要求,否则切勿写入新文件。
7
- - 仅在用户明确请求时才使用表情符号。除非被要求,否则避免在文件中添加表情符号。
8
- - 如果在文件中未找到 `oldString`,编辑将失败,并显示错误 "oldString not found in content"。
9
- - 如果在文件中找到多个 `oldString` 匹配项,编辑将失败,并显示错误 "Found multiple matches for oldString. Provide more surrounding lines in oldString to identify the correct match."。请提供更大的字符串和更多周围上下文以使其唯一,或使用 `replaceAll` 更改 `oldString` 的每个实例。
10
- - 使用 `replaceAll` 在文件中替换和重命名字符串。例如,如果您想重命名变量,此参数很有用。
@@ -1,49 +0,0 @@
1
- import path from "path"
2
- import { Effect } from "effect"
3
- import { InstanceState } from "@/effect/instance-state"
4
- import type * as Tool from "./tool"
5
- import { containsPath } from "../project/instance-context"
6
- import { FSUtil } from "@opencode-ai/core/fs-util"
7
-
8
- type Kind = "file" | "directory"
9
-
10
- type Options = {
11
- bypass?: boolean
12
- kind?: Kind
13
- }
14
-
15
- export const assertExternalDirectoryEffect = Effect.fn("Tool.assertExternalDirectory")(function* (
16
- ctx: Tool.Context,
17
- target?: string,
18
- options?: Options,
19
- ) {
20
- if (!target) return false
21
-
22
- if (options?.bypass) return false
23
-
24
- const ins = yield* InstanceState.context
25
- const full = process.platform === "win32" ? FSUtil.normalizePath(target) : target
26
- if (containsPath(full, ins)) return false
27
-
28
- const kind = options?.kind ?? "file"
29
- const dir = kind === "directory" ? full : path.dirname(full)
30
- const glob =
31
- process.platform === "win32"
32
- ? FSUtil.normalizePathPattern(path.join(dir, "*"))
33
- : path.join(dir, "*").replaceAll("\\", "/")
34
-
35
- yield* ctx.ask({
36
- permission: "external_directory",
37
- patterns: [glob],
38
- always: [glob],
39
- metadata: {
40
- filepath: full,
41
- parentDir: dir,
42
- },
43
- })
44
- return true
45
- })
46
-
47
- export async function assertExternalDirectory(ctx: Tool.Context, target?: string, options?: Options) {
48
- return Effect.runPromise(assertExternalDirectoryEffect(ctx, target, options))
49
- }
package/src/tool/glob.ts DELETED
@@ -1,78 +0,0 @@
1
- import path from "path"
2
- import { Effect, Schema } from "effect"
3
- import { InstanceState } from "@/effect/instance-state"
4
- import { FSUtil } from "@opencode-ai/core/fs-util"
5
- import { Ripgrep } from "@opencode-ai/core/ripgrep"
6
- import { assertExternalDirectoryEffect } from "./external-directory"
7
- import DESCRIPTION from "./glob.txt"
8
- import DESCRIPTION_ZH from "./glob.zh.txt"
9
- import * as Tool from "./tool"
10
- import { loadDescription } from "./description"
11
-
12
- export const Parameters = Schema.Struct({
13
- pattern: Schema.String.annotate({ description: "The glob pattern to match files against" }),
14
- path: Schema.optional(Schema.String).annotate({
15
- description: `The directory to search in. If not specified, the current working directory will be used. IMPORTANT: Omit this field to use the default directory. DO NOT enter "undefined" or "null" - simply omit it for the default behavior. Must be a valid directory path if provided.`,
16
- }),
17
- })
18
-
19
- export const GlobTool = Tool.define(
20
- "glob",
21
- Effect.gen(function* () {
22
- const fs = yield* FSUtil.Service
23
- const ripgrep = yield* Ripgrep.Service
24
- return {
25
- description: loadDescription(DESCRIPTION, DESCRIPTION_ZH),
26
- parameters: Parameters,
27
- execute: (params: { pattern: string; path?: string }, ctx: Tool.Context) =>
28
- Effect.gen(function* () {
29
- const ins = yield* InstanceState.context
30
- yield* ctx.ask({
31
- permission: "glob",
32
- patterns: [params.pattern],
33
- always: ["*"],
34
- metadata: {
35
- pattern: params.pattern,
36
- path: params.path,
37
- },
38
- })
39
-
40
- let search = params.path ?? ins.directory
41
- search = path.isAbsolute(search) ? search : path.resolve(ins.directory, search)
42
- const info = yield* fs.stat(search).pipe(Effect.catch(() => Effect.succeed(undefined)))
43
- if (info?.type === "File") {
44
- throw new Error(`glob path must be a directory: ${search}`)
45
- }
46
- yield* assertExternalDirectoryEffect(ctx, search, {
47
- bypass: false,
48
- kind: "directory",
49
- })
50
-
51
- const limit = 100
52
- const files = yield* ripgrep.glob({ cwd: search, pattern: params.pattern, limit })
53
- const truncated = files.length === limit
54
-
55
- const output = []
56
- if (files.length === 0) output.push("No files found")
57
- if (files.length > 0) {
58
- output.push(...files.map((file) => path.resolve(search, file.path)))
59
- if (truncated) {
60
- output.push("")
61
- output.push(
62
- `(Results are truncated: showing first ${limit} results. Consider using a more specific path or pattern.)`,
63
- )
64
- }
65
- }
66
-
67
- return {
68
- title: path.relative(ins.worktree, search),
69
- metadata: {
70
- count: files.length,
71
- truncated,
72
- },
73
- output: output.join("\n"),
74
- }
75
- }).pipe(Effect.orDie),
76
- }
77
- }),
78
- )
package/src/tool/glob.txt DELETED
@@ -1,6 +0,0 @@
1
- - Fast file pattern matching tool that works with any codebase size
2
- - Supports glob patterns like "**/*.js" or "src/**/*.ts"
3
- - Returns matching file paths
4
- - Use this tool when you need to find files by name patterns
5
- - When you are doing an open-ended search that may require multiple rounds of globbing and grepping, use the Task tool instead
6
- - You have the capability to call multiple tools in a single response. It is always better to speculatively perform multiple searches as a batch that are potentially useful.
@@ -1,6 +0,0 @@
1
- - 快速文件模式匹配工具,适用于任何大小的代码库
2
- - 支持 glob 模式,如 "**/*.js" 或 "src/**/*.ts"
3
- - 返回匹配的文件路径
4
- - 当您需要按名称模式查找文件时使用此工具
5
- - 当您进行可能需要多轮 glob 和 grep 的开放式搜索时,请改用 Task 工具
6
- - 您可以在单个响应中调用多个工具。最好作为一批推测性地执行多个可能有用的搜索。
package/src/tool/grep.ts DELETED
@@ -1,114 +0,0 @@
1
- import path from "path"
2
- import { Effect, Schema } from "effect"
3
- import { InstanceState } from "@/effect/instance-state"
4
- import { FSUtil } from "@opencode-ai/core/fs-util"
5
- import { Ripgrep } from "@opencode-ai/core/ripgrep"
6
- import { assertExternalDirectoryEffect } from "./external-directory"
7
- import DESCRIPTION from "./grep.txt"
8
- import DESCRIPTION_ZH from "./grep.zh.txt"
9
- import * as Tool from "./tool"
10
- import { loadDescription } from "./description"
11
-
12
- export const Parameters = Schema.Struct({
13
- pattern: Schema.String.annotate({ description: "The regex pattern to search for in file contents" }),
14
- path: Schema.optional(Schema.String).annotate({
15
- description: "The directory to search in. Defaults to the current working directory.",
16
- }),
17
- include: Schema.optional(Schema.String).annotate({
18
- description: 'File pattern to include in the search (e.g. "*.js", "*.{ts,tsx}")',
19
- }),
20
- })
21
-
22
- export const GrepTool = Tool.define(
23
- "grep",
24
- Effect.gen(function* () {
25
- const fs = yield* FSUtil.Service
26
- const ripgrep = yield* Ripgrep.Service
27
- return {
28
- description: loadDescription(DESCRIPTION, DESCRIPTION_ZH),
29
- parameters: Parameters,
30
- execute: (params: { pattern: string; path?: string; include?: string }, ctx: Tool.Context) =>
31
- Effect.gen(function* () {
32
- const empty = {
33
- title: params.pattern,
34
- metadata: { matches: 0, truncated: false },
35
- output: "No files found",
36
- }
37
- if (!params.pattern) {
38
- throw new Error("pattern is required")
39
- }
40
-
41
- yield* ctx.ask({
42
- permission: "grep",
43
- patterns: [params.pattern],
44
- always: ["*"],
45
- metadata: {
46
- pattern: params.pattern,
47
- path: params.path,
48
- include: params.include,
49
- },
50
- })
51
-
52
- const ins = yield* InstanceState.context
53
- const requested = path.isAbsolute(params.path ?? ins.directory)
54
- ? (params.path ?? ins.directory)
55
- : path.join(ins.directory, params.path ?? ".")
56
- const requestedInfo = yield* fs.stat(requested).pipe(Effect.catch(() => Effect.succeed(undefined)))
57
- yield* assertExternalDirectoryEffect(ctx, requested, {
58
- bypass: false,
59
- kind: requestedInfo?.type === "Directory" ? "directory" : "file",
60
- })
61
-
62
- const search = FSUtil.resolve(requested)
63
- const info = yield* fs.stat(search).pipe(Effect.catch(() => Effect.succeed(undefined)))
64
- const cwd = info?.type === "Directory" ? search : path.dirname(search)
65
- const result = yield* ripgrep.grep({
66
- cwd,
67
- pattern: params.pattern,
68
- include: params.include,
69
- limit: 100,
70
- })
71
- if (result.length === 0) return empty
72
-
73
- const rows = result.map((item) => ({
74
- path: path.resolve(cwd, item.entry.path),
75
- line: item.line,
76
- text: item.text,
77
- }))
78
-
79
- const limit = 100
80
- const truncated = rows.length === limit
81
- const final = rows
82
- if (final.length === 0) return empty
83
-
84
- const total = rows.length
85
- const hasMore = truncated || result.length === limit
86
- const output = [`Found ${total} matches${hasMore ? " (more matches available)" : ""}`]
87
-
88
- let current = ""
89
- for (const match of final) {
90
- if (current !== match.path) {
91
- if (current !== "") output.push("")
92
- current = match.path
93
- output.push(`${match.path}:`)
94
- }
95
- output.push(` Line ${match.line}: ${match.text}`)
96
- }
97
-
98
- if (truncated) {
99
- output.push("")
100
- output.push("(Results truncated. Consider using a more specific path or pattern.)")
101
- }
102
-
103
- return {
104
- title: params.pattern,
105
- metadata: {
106
- matches: total,
107
- truncated,
108
- },
109
- output: output.join("\n"),
110
- }
111
- }).pipe(Effect.orDie),
112
- }
113
- }),
114
- )
package/src/tool/grep.txt DELETED
@@ -1,8 +0,0 @@
1
- - Fast content search tool that works with any codebase size
2
- - Searches file contents using regular expressions
3
- - Supports full regex syntax (eg. "log.*Error", "function\s+\w+", etc.)
4
- - Filter files by pattern with the include parameter (eg. "*.js", "*.{ts,tsx}")
5
- - Returns file paths and line numbers with matching lines
6
- - Use this tool when you need to find files containing specific patterns
7
- - If you need to identify/count the number of matches within files, use the Bash tool with `rg` (ripgrep) directly. Do NOT use `grep`.
8
- - When you are doing an open-ended search that may require multiple rounds of globbing and grepping, use the Task tool instead
@@ -1,8 +0,0 @@
1
- - 快速内容搜索工具,适用于任何大小的代码库
2
- - 使用正则表达式搜索文件内容
3
- - 支持完整的正则表达式语法(例如 "log.*Error"、"function\s+\w+" 等)
4
- - 使用 include 参数按模式筛选文件(例如 "*.js"、"*.{ts,tsx}")
5
- - 返回文件路径和包含匹配行的行号
6
- - 当您需要查找包含特定模式的文件时使用此工具
7
- - 如果需要识别/计算文件中的匹配次数,请直接使用带有 `rg`(ripgrep)的 Bash 工具。不要使用 `grep`。
8
- - 当您进行可能需要多轮 glob 和 grep 的开放式搜索时,请改用 Task 工具
@@ -1,21 +0,0 @@
1
- import { Effect, Schema } from "effect"
2
- import * as Tool from "./tool"
3
-
4
- export const Parameters = Schema.Struct({
5
- tool: Schema.String,
6
- error: Schema.String,
7
- })
8
-
9
- export const InvalidTool = Tool.define(
10
- "invalid",
11
- Effect.succeed({
12
- description: "Do not use",
13
- parameters: Parameters,
14
- execute: (params: { tool: string; error: string }) =>
15
- Effect.succeed({
16
- title: "Invalid Tool",
17
- output: `The arguments provided to the tool are invalid: ${params.error}`,
18
- metadata: {},
19
- }),
20
- }),
21
- )
@@ -1,164 +0,0 @@
1
- import type { JSONSchema7 } from "@ai-sdk/provider"
2
- import { JsonSchema, Schema } from "effect"
3
- import type * as Tool from "./tool"
4
-
5
- type JsonObject = Record<string, unknown>
6
- const cache = new WeakMap<Schema.Top, JSONSchema7>()
7
-
8
- export function fromSchema(schema: Schema.Top): JSONSchema7 {
9
- const cached = cache.get(schema)
10
- if (cached) return cached
11
-
12
- const document = Schema.toJsonSchemaDocument(schema, { additionalProperties: true })
13
- const result = normalize({
14
- $schema: JsonSchema.META_SCHEMA_URI_DRAFT_2020_12,
15
- ...document.schema,
16
- ...(Object.keys(document.definitions).length > 0 ? { $defs: document.definitions } : {}),
17
- })
18
- const inlined = dropDefinitionsIfResolved(inlineLocalReferences(result))
19
- if (!isJsonSchema(inlined)) throw new Error("tool JSON Schema helper produced a non-schema value")
20
- cache.set(schema, inlined)
21
- return inlined
22
- }
23
-
24
- export function fromTool(tool: Tool.Def): JSONSchema7 {
25
- return tool.jsonSchema ?? fromSchema(tool.parameters as Schema.Top)
26
- }
27
-
28
- function normalize(value: unknown, options: { stripNull?: boolean } = {}): unknown {
29
- if (Array.isArray(value)) return value.map((item) => normalize(item))
30
- if (!isRecord(value)) return value
31
-
32
- const required = Array.isArray(value.required)
33
- ? new Set(value.required.filter((item) => typeof item === "string"))
34
- : undefined
35
- const schema = Object.fromEntries(
36
- Object.entries(value).map(([key, item]) => [
37
- key,
38
- key === "properties" && isRecord(item)
39
- ? Object.fromEntries(
40
- Object.entries(item).map(([name, property]) => [
41
- name,
42
- normalize(property, { stripNull: !required?.has(name) }),
43
- ]),
44
- )
45
- : normalize(item),
46
- ]),
47
- )
48
-
49
- if (schema.additionalProperties === true) delete schema.additionalProperties
50
-
51
- if (options.stripNull && Array.isArray(schema.anyOf)) {
52
- const withoutNull = schema.anyOf.filter((item) => !isRecord(item) || item.type !== "null")
53
- if (withoutNull.length !== schema.anyOf.length) return normalize({ ...schema, anyOf: withoutNull })
54
- }
55
-
56
- if (Array.isArray(schema.anyOf)) {
57
- const withoutNull = schema.anyOf
58
- const number = withoutNull.find((item) => isRecord(item) && item.type === "number")
59
- const nonFinite = withoutNull.filter(
60
- (item) => isRecord(item) && Array.isArray(item.enum) && item.enum.every((entry) => isNonFiniteNumber(entry)),
61
- )
62
- if (number && nonFinite.length === withoutNull.length - 1) {
63
- const { anyOf: _, ...rest } = schema
64
- return normalize({ ...number, ...rest })
65
- }
66
-
67
- if (isEmptyStructUnion(withoutNull)) {
68
- const { anyOf: _, ...rest } = schema
69
- return normalize({ type: "object", properties: {}, ...rest })
70
- }
71
-
72
- if (withoutNull.length === 1 && isRecord(withoutNull[0])) {
73
- const { anyOf: _, ...rest } = schema
74
- return normalize({ ...withoutNull[0], ...rest })
75
- }
76
- }
77
-
78
- if (Array.isArray(schema.allOf) && schema.allOf.every(isRecord) && canFlattenAllOf(schema.allOf, schema)) {
79
- const { allOf, ...rest } = schema
80
- return normalize({ ...Object.assign({}, ...allOf), ...rest })
81
- }
82
-
83
- if (schema.type === "integer" && schema.maximum === undefined) {
84
- return { minimum: Number.MIN_SAFE_INTEGER, ...schema, maximum: Number.MAX_SAFE_INTEGER }
85
- }
86
-
87
- return schema
88
- }
89
-
90
- function isRecord(value: unknown): value is JsonObject {
91
- return typeof value === "object" && value !== null && !Array.isArray(value)
92
- }
93
-
94
- function isJsonSchema(value: unknown): value is JSONSchema7 {
95
- return typeof value === "boolean" || isRecord(value)
96
- }
97
-
98
- function isNonFiniteNumber(value: unknown) {
99
- return value === "NaN" || value === "Infinity" || value === "-Infinity"
100
- }
101
-
102
- function isEmptyStructUnion(items: unknown[]) {
103
- return (
104
- items.length === 2 &&
105
- items.some((item) => isRecord(item) && item.type === "object" && item.properties === undefined) &&
106
- items.some((item) => isRecord(item) && item.type === "array" && item.items === undefined)
107
- )
108
- }
109
-
110
- function canFlattenAllOf(allOf: JsonObject[], parent: JsonObject) {
111
- const keys = new Set(Object.keys(parent).filter((key) => key !== "allOf"))
112
- return allOf.every((item) =>
113
- Object.keys(item).every((key) => {
114
- if (keys.has(key)) return false
115
- keys.add(key)
116
- return true
117
- }),
118
- )
119
- }
120
-
121
- function inlineLocalReferences(value: unknown, definitions?: JsonObject, seen = new Set<string>()): unknown {
122
- if (Array.isArray(value)) return value.map((item) => inlineLocalReferences(item, definitions, seen))
123
- if (!isRecord(value)) return value
124
-
125
- const localDefinitions = definitions ?? (isRecord(value.$defs) ? value.$defs : undefined)
126
- if (typeof value.$ref === "string" && localDefinitions) {
127
- const name = value.$ref.match(/^#\/\$defs\/(.+)$/)?.[1] ?? value.$ref.match(/^#\/definitions\/(.+)$/)?.[1]
128
- if (name && !seen.has(name)) {
129
- const target = localDefinitions[name]
130
- if (target) {
131
- const { $ref: _, ...rest } = value
132
- return inlineLocalReferences(
133
- { ...(isRecord(target) ? target : {}), ...rest },
134
- localDefinitions,
135
- new Set(seen).add(name),
136
- )
137
- }
138
- }
139
- }
140
-
141
- return Object.fromEntries(
142
- Object.entries(value).map(([key, item]) => [key, inlineLocalReferences(item, localDefinitions, seen)]),
143
- )
144
- }
145
-
146
- function dropDefinitionsIfResolved(value: unknown): unknown {
147
- if (!isRecord(value) || hasLocalReference(value)) return value
148
- const { $defs: _, definitions: __, ...rest } = value
149
- return rest
150
- }
151
-
152
- function hasLocalReference(value: unknown): boolean {
153
- if (Array.isArray(value)) return value.some(hasLocalReference)
154
- if (!isRecord(value)) return false
155
- if (
156
- typeof value.$ref === "string" &&
157
- (value.$ref.startsWith("#/$defs/") || value.$ref.startsWith("#/definitions/"))
158
- ) {
159
- return true
160
- }
161
- return Object.values(value).some(hasLocalReference)
162
- }
163
-
164
- export * as ToolJsonSchema from "./json-schema"
package/src/tool/lsp.ts DELETED
@@ -1,115 +0,0 @@
1
- import { Effect, Schema } from "effect"
2
- import * as Tool from "./tool"
3
- import path from "path"
4
- import { LSP } from "@/lsp/lsp"
5
- import DESCRIPTION from "./lsp.txt"
6
- import DESCRIPTION_ZH from "./lsp.zh.txt"
7
- import { InstanceState } from "@/effect/instance-state"
8
- import { pathToFileURL } from "url"
9
- import { assertExternalDirectoryEffect } from "./external-directory"
10
- import { FSUtil } from "@opencode-ai/core/fs-util"
11
- import { loadDescription } from "./description"
12
-
13
- const operations = [
14
- "goToDefinition",
15
- "findReferences",
16
- "hover",
17
- "documentSymbol",
18
- "workspaceSymbol",
19
- "goToImplementation",
20
- "prepareCallHierarchy",
21
- "incomingCalls",
22
- "outgoingCalls",
23
- ] as const
24
-
25
- export const Parameters = Schema.Struct({
26
- operation: Schema.Literals(operations).annotate({ description: "The LSP operation to perform" }),
27
- filePath: Schema.String.annotate({ description: "The absolute or relative path to the file" }),
28
- line: Schema.Int.check(Schema.isGreaterThanOrEqualTo(1)).annotate({
29
- description: "The line number (1-based, as shown in editors)",
30
- }),
31
- character: Schema.Int.check(Schema.isGreaterThanOrEqualTo(1)).annotate({
32
- description: "The character offset (1-based, as shown in editors)",
33
- }),
34
- query: Schema.optional(Schema.String).annotate({
35
- description: "Search query for workspaceSymbol. Empty string requests all symbols.",
36
- }),
37
- })
38
-
39
- export const LspTool = Tool.define(
40
- "lsp",
41
- Effect.gen(function* () {
42
- const lsp = yield* LSP.Service
43
- const fs = yield* FSUtil.Service
44
- return {
45
- description: loadDescription(DESCRIPTION, DESCRIPTION_ZH),
46
- parameters: Parameters,
47
- execute: (args: Schema.Schema.Type<typeof Parameters>, ctx: Tool.Context) =>
48
- Effect.gen(function* () {
49
- const instance = yield* InstanceState.context
50
- const file = path.isAbsolute(args.filePath) ? args.filePath : path.join(instance.directory, args.filePath)
51
- yield* assertExternalDirectoryEffect(ctx, file)
52
- const meta =
53
- args.operation === "workspaceSymbol"
54
- ? { operation: args.operation }
55
- : args.operation === "documentSymbol"
56
- ? { operation: args.operation, filePath: file }
57
- : { operation: args.operation, filePath: file, line: args.line, character: args.character }
58
- yield* ctx.ask({
59
- permission: "lsp",
60
- patterns: ["*"],
61
- always: ["*"],
62
- metadata: meta,
63
- })
64
-
65
- const uri = pathToFileURL(file).href
66
- const position = { file, line: args.line - 1, character: args.character - 1 }
67
- const relPath = path.relative(instance.worktree, file)
68
- const detail =
69
- args.operation === "workspaceSymbol"
70
- ? ""
71
- : args.operation === "documentSymbol"
72
- ? relPath
73
- : `${relPath}:${args.line}:${args.character}`
74
- const title = detail ? `${args.operation} ${detail}` : args.operation
75
-
76
- const exists = yield* fs.existsSafe(file)
77
- if (!exists) throw new Error(`File not found: ${file}`)
78
-
79
- const available = yield* lsp.hasClients(file)
80
- if (!available) throw new Error("No LSP server available for this file type.")
81
-
82
- yield* lsp.touchFile(file, "document")
83
-
84
- const result: unknown[] = yield* (() => {
85
- switch (args.operation) {
86
- case "goToDefinition":
87
- return lsp.definition(position)
88
- case "findReferences":
89
- return lsp.references(position)
90
- case "hover":
91
- return lsp.hover(position)
92
- case "documentSymbol":
93
- return lsp.documentSymbol(uri)
94
- case "workspaceSymbol":
95
- return lsp.workspaceSymbol(args.query ?? "")
96
- case "goToImplementation":
97
- return lsp.implementation(position)
98
- case "prepareCallHierarchy":
99
- return lsp.prepareCallHierarchy(position)
100
- case "incomingCalls":
101
- return lsp.incomingCalls(position)
102
- case "outgoingCalls":
103
- return lsp.outgoingCalls(position)
104
- }
105
- })()
106
-
107
- return {
108
- title,
109
- metadata: { result },
110
- output: result.length === 0 ? `No results found for ${args.operation}` : JSON.stringify(result, null, 2),
111
- }
112
- }).pipe(Effect.orDie),
113
- }
114
- }),
115
- )
package/src/tool/lsp.txt DELETED
@@ -1,24 +0,0 @@
1
- Interact with Language Server Protocol (LSP) servers to get code intelligence features.
2
-
3
- Supported operations:
4
- - goToDefinition: Find where a symbol is defined
5
- - findReferences: Find all references to a symbol
6
- - hover: Get hover information (documentation, type info) for a symbol
7
- - documentSymbol: Get all symbols (functions, classes, variables) in a document
8
- - workspaceSymbol: List project-wide symbols matching a query string
9
- - goToImplementation: Find implementations of an interface or abstract method
10
- - prepareCallHierarchy: Get call hierarchy item at a position (functions/methods)
11
- - incomingCalls: Find all functions/methods that call the function at a position
12
- - outgoingCalls: Find all functions/methods called by the function at a position
13
-
14
- All operations require:
15
- - filePath: The file to operate on
16
- - line: The line number (1-based, as shown in editors)
17
- - character: The character offset (1-based, as shown in editors)
18
-
19
- workspaceSymbol also accepts:
20
- - query: A query string to filter symbols by. Empty string requests all symbols.
21
-
22
- For workspaceSymbol, filePath is not sent in the LSP workspace/symbol request. It is used by opencode to select and start the matching LSP server.
23
-
24
- Note: LSP servers must be configured for the file type. If no server is available, an error will be returned.
@@ -1,24 +0,0 @@
1
- 与语言服务器协议(LSP)服务器交互以获取代码智能功能。
2
-
3
- 支持的操作:
4
- - goToDefinition:查找符号定义的位置
5
- - findReferences:查找符号的所有引用
6
- - hover:获取符号的悬停信息(文档、类型信息)
7
- - documentSymbol:获取文档中的所有符号(函数、类、变量)
8
- - workspaceSymbol:列出与查询字符串匹配的项目范围符号
9
- - goToImplementation:查找接口或抽象方法的实现
10
- - prepareCallHierarchy:获取某个位置的调用层次结构项(函数/方法)
11
- - incomingCalls:查找调用某个位置函数的所有函数/方法
12
- - outgoingCalls:查找某个位置函数调用的所有函数/方法
13
-
14
- 所有操作都需要:
15
- - filePath:要操作的文件
16
- - line:行号(从 1 开始,如编辑器中所示)
17
- - character:字符偏移量(从 1 开始,如编辑器中所示)
18
-
19
- workspaceSymbol 还接受:
20
- - query:用于筛选符号的查询字符串。空字符串请求所有符号。
21
-
22
- 对于 workspaceSymbol,filePath 不会发送到 LSP workspace/symbol 请求中。OnlyCode 使用它来选择和启动匹配的 LSP 服务器。
23
-
24
- 注意:必须为文件类型配置 LSP 服务器。如果没有可用的服务器,将返回错误。