easc-cli 1.1.37 → 1.1.41

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 (413) hide show
  1. package/bin/opencode +4 -6
  2. package/bin/package.json +3 -0
  3. package/package.json +14 -119
  4. package/{script/postinstall.mjs → postinstall.mjs} +4 -4
  5. package/AGENTS.md +0 -27
  6. package/Dockerfile +0 -18
  7. package/README.md +0 -15
  8. package/bunfig.toml +0 -7
  9. package/charity-website/README.md +0 -252
  10. package/charity-website/admin/index.html +0 -299
  11. package/charity-website/package.json +0 -40
  12. package/charity-website/public/index.html +0 -265
  13. package/charity-website/src/css/admin.css +0 -710
  14. package/charity-website/src/css/style.css +0 -741
  15. package/charity-website/src/js/admin.js +0 -743
  16. package/charity-website/src/js/app.js +0 -444
  17. package/parsers-config.ts +0 -253
  18. package/script/build.ts +0 -172
  19. package/script/deploy.ts +0 -96
  20. package/script/publish-registries.ts +0 -187
  21. package/script/publish.ts +0 -70
  22. package/script/schema.ts +0 -47
  23. package/script/seed-e2e.ts +0 -50
  24. package/src/acp/README.md +0 -164
  25. package/src/acp/agent.ts +0 -1285
  26. package/src/acp/session.ts +0 -105
  27. package/src/acp/types.ts +0 -22
  28. package/src/agent/agent.ts +0 -332
  29. package/src/agent/generate.txt +0 -75
  30. package/src/agent/prompt/compaction.txt +0 -12
  31. package/src/agent/prompt/explore.txt +0 -18
  32. package/src/agent/prompt/summary.txt +0 -11
  33. package/src/agent/prompt/title.txt +0 -43
  34. package/src/auth/eliseart.ts +0 -76
  35. package/src/auth/index.ts +0 -73
  36. package/src/bun/index.ts +0 -134
  37. package/src/bus/bus-event.ts +0 -43
  38. package/src/bus/global.ts +0 -10
  39. package/src/bus/index.ts +0 -105
  40. package/src/cli/bootstrap.ts +0 -17
  41. package/src/cli/cmd/account.ts +0 -81
  42. package/src/cli/cmd/acp.ts +0 -69
  43. package/src/cli/cmd/agent.ts +0 -257
  44. package/src/cli/cmd/auth.ts +0 -427
  45. package/src/cli/cmd/cmd.ts +0 -7
  46. package/src/cli/cmd/debug/agent.ts +0 -166
  47. package/src/cli/cmd/debug/config.ts +0 -16
  48. package/src/cli/cmd/debug/file.ts +0 -97
  49. package/src/cli/cmd/debug/index.ts +0 -48
  50. package/src/cli/cmd/debug/lsp.ts +0 -52
  51. package/src/cli/cmd/debug/ripgrep.ts +0 -87
  52. package/src/cli/cmd/debug/scrap.ts +0 -16
  53. package/src/cli/cmd/debug/skill.ts +0 -16
  54. package/src/cli/cmd/debug/snapshot.ts +0 -52
  55. package/src/cli/cmd/export.ts +0 -88
  56. package/src/cli/cmd/generate.ts +0 -38
  57. package/src/cli/cmd/github.ts +0 -1548
  58. package/src/cli/cmd/import.ts +0 -98
  59. package/src/cli/cmd/mcp.ts +0 -827
  60. package/src/cli/cmd/models.ts +0 -77
  61. package/src/cli/cmd/pr.ts +0 -112
  62. package/src/cli/cmd/run.ts +0 -407
  63. package/src/cli/cmd/serve.ts +0 -20
  64. package/src/cli/cmd/session.ts +0 -135
  65. package/src/cli/cmd/stats.ts +0 -402
  66. package/src/cli/cmd/tui/app.tsx +0 -774
  67. package/src/cli/cmd/tui/attach.ts +0 -31
  68. package/src/cli/cmd/tui/component/border.tsx +0 -21
  69. package/src/cli/cmd/tui/component/dialog-agent.tsx +0 -31
  70. package/src/cli/cmd/tui/component/dialog-command.tsx +0 -148
  71. package/src/cli/cmd/tui/component/dialog-mcp.tsx +0 -86
  72. package/src/cli/cmd/tui/component/dialog-model.tsx +0 -234
  73. package/src/cli/cmd/tui/component/dialog-provider.tsx +0 -256
  74. package/src/cli/cmd/tui/component/dialog-session-list.tsx +0 -114
  75. package/src/cli/cmd/tui/component/dialog-session-rename.tsx +0 -31
  76. package/src/cli/cmd/tui/component/dialog-stash.tsx +0 -87
  77. package/src/cli/cmd/tui/component/dialog-status.tsx +0 -164
  78. package/src/cli/cmd/tui/component/dialog-supabase.tsx +0 -102
  79. package/src/cli/cmd/tui/component/dialog-tag.tsx +0 -44
  80. package/src/cli/cmd/tui/component/dialog-theme-list.tsx +0 -50
  81. package/src/cli/cmd/tui/component/logo.tsx +0 -88
  82. package/src/cli/cmd/tui/component/prompt/autocomplete.tsx +0 -653
  83. package/src/cli/cmd/tui/component/prompt/frecency.tsx +0 -89
  84. package/src/cli/cmd/tui/component/prompt/history.tsx +0 -108
  85. package/src/cli/cmd/tui/component/prompt/index.tsx +0 -1182
  86. package/src/cli/cmd/tui/component/prompt/stash.tsx +0 -101
  87. package/src/cli/cmd/tui/component/spinner.tsx +0 -16
  88. package/src/cli/cmd/tui/component/textarea-keybindings.ts +0 -73
  89. package/src/cli/cmd/tui/component/tips.tsx +0 -153
  90. package/src/cli/cmd/tui/component/todo-item.tsx +0 -32
  91. package/src/cli/cmd/tui/context/args.tsx +0 -14
  92. package/src/cli/cmd/tui/context/directory.ts +0 -13
  93. package/src/cli/cmd/tui/context/exit.tsx +0 -23
  94. package/src/cli/cmd/tui/context/helper.tsx +0 -25
  95. package/src/cli/cmd/tui/context/keybind.tsx +0 -101
  96. package/src/cli/cmd/tui/context/kv.tsx +0 -52
  97. package/src/cli/cmd/tui/context/local.tsx +0 -402
  98. package/src/cli/cmd/tui/context/prompt.tsx +0 -18
  99. package/src/cli/cmd/tui/context/route.tsx +0 -46
  100. package/src/cli/cmd/tui/context/sdk.tsx +0 -94
  101. package/src/cli/cmd/tui/context/sync.tsx +0 -445
  102. package/src/cli/cmd/tui/context/theme/aura.json +0 -69
  103. package/src/cli/cmd/tui/context/theme/ayu.json +0 -80
  104. package/src/cli/cmd/tui/context/theme/carbonfox.json +0 -248
  105. package/src/cli/cmd/tui/context/theme/catppuccin-frappe.json +0 -233
  106. package/src/cli/cmd/tui/context/theme/catppuccin-macchiato.json +0 -233
  107. package/src/cli/cmd/tui/context/theme/catppuccin.json +0 -112
  108. package/src/cli/cmd/tui/context/theme/cobalt2.json +0 -228
  109. package/src/cli/cmd/tui/context/theme/cursor.json +0 -249
  110. package/src/cli/cmd/tui/context/theme/dracula.json +0 -219
  111. package/src/cli/cmd/tui/context/theme/everforest.json +0 -241
  112. package/src/cli/cmd/tui/context/theme/flexoki.json +0 -237
  113. package/src/cli/cmd/tui/context/theme/github.json +0 -233
  114. package/src/cli/cmd/tui/context/theme/gruvbox.json +0 -95
  115. package/src/cli/cmd/tui/context/theme/kanagawa.json +0 -77
  116. package/src/cli/cmd/tui/context/theme/lucent-orng.json +0 -237
  117. package/src/cli/cmd/tui/context/theme/material.json +0 -235
  118. package/src/cli/cmd/tui/context/theme/matrix.json +0 -77
  119. package/src/cli/cmd/tui/context/theme/mercury.json +0 -252
  120. package/src/cli/cmd/tui/context/theme/monokai.json +0 -221
  121. package/src/cli/cmd/tui/context/theme/nightowl.json +0 -221
  122. package/src/cli/cmd/tui/context/theme/nord.json +0 -223
  123. package/src/cli/cmd/tui/context/theme/one-dark.json +0 -84
  124. package/src/cli/cmd/tui/context/theme/orng.json +0 -249
  125. package/src/cli/cmd/tui/context/theme/osaka-jade.json +0 -93
  126. package/src/cli/cmd/tui/context/theme/palenight.json +0 -222
  127. package/src/cli/cmd/tui/context/theme/rosepine.json +0 -234
  128. package/src/cli/cmd/tui/context/theme/solarized.json +0 -223
  129. package/src/cli/cmd/tui/context/theme/synthwave84.json +0 -226
  130. package/src/cli/cmd/tui/context/theme/tokyonight.json +0 -243
  131. package/src/cli/cmd/tui/context/theme/vercel.json +0 -245
  132. package/src/cli/cmd/tui/context/theme/vesper.json +0 -218
  133. package/src/cli/cmd/tui/context/theme/zenburn.json +0 -223
  134. package/src/cli/cmd/tui/context/theme.tsx +0 -1152
  135. package/src/cli/cmd/tui/event.ts +0 -48
  136. package/src/cli/cmd/tui/routes/home.tsx +0 -140
  137. package/src/cli/cmd/tui/routes/session/dialog-fork-from-timeline.tsx +0 -64
  138. package/src/cli/cmd/tui/routes/session/dialog-message.tsx +0 -109
  139. package/src/cli/cmd/tui/routes/session/dialog-subagent.tsx +0 -26
  140. package/src/cli/cmd/tui/routes/session/dialog-timeline.tsx +0 -47
  141. package/src/cli/cmd/tui/routes/session/dialog-tool.tsx +0 -63
  142. package/src/cli/cmd/tui/routes/session/footer.tsx +0 -129
  143. package/src/cli/cmd/tui/routes/session/header.tsx +0 -136
  144. package/src/cli/cmd/tui/routes/session/index.tsx +0 -2132
  145. package/src/cli/cmd/tui/routes/session/permission.tsx +0 -495
  146. package/src/cli/cmd/tui/routes/session/question.tsx +0 -435
  147. package/src/cli/cmd/tui/routes/session/sidebar.tsx +0 -313
  148. package/src/cli/cmd/tui/thread.ts +0 -165
  149. package/src/cli/cmd/tui/ui/dialog-alert.tsx +0 -57
  150. package/src/cli/cmd/tui/ui/dialog-confirm.tsx +0 -83
  151. package/src/cli/cmd/tui/ui/dialog-export-options.tsx +0 -204
  152. package/src/cli/cmd/tui/ui/dialog-help.tsx +0 -38
  153. package/src/cli/cmd/tui/ui/dialog-prompt.tsx +0 -77
  154. package/src/cli/cmd/tui/ui/dialog-select.tsx +0 -376
  155. package/src/cli/cmd/tui/ui/dialog.tsx +0 -167
  156. package/src/cli/cmd/tui/ui/link.tsx +0 -28
  157. package/src/cli/cmd/tui/ui/spinner.ts +0 -368
  158. package/src/cli/cmd/tui/ui/toast.tsx +0 -100
  159. package/src/cli/cmd/tui/util/clipboard.ts +0 -160
  160. package/src/cli/cmd/tui/util/editor.ts +0 -32
  161. package/src/cli/cmd/tui/util/signal.ts +0 -7
  162. package/src/cli/cmd/tui/util/terminal.ts +0 -114
  163. package/src/cli/cmd/tui/util/transcript.ts +0 -98
  164. package/src/cli/cmd/tui/worker.ts +0 -152
  165. package/src/cli/cmd/uninstall.ts +0 -357
  166. package/src/cli/cmd/upgrade.ts +0 -73
  167. package/src/cli/cmd/web.ts +0 -81
  168. package/src/cli/error.ts +0 -57
  169. package/src/cli/network.ts +0 -53
  170. package/src/cli/ui.ts +0 -84
  171. package/src/cli/upgrade.ts +0 -25
  172. package/src/command/index.ts +0 -131
  173. package/src/command/template/initialize.txt +0 -10
  174. package/src/command/template/review.txt +0 -99
  175. package/src/config/config.ts +0 -1361
  176. package/src/config/markdown.ts +0 -93
  177. package/src/env/index.ts +0 -26
  178. package/src/file/ignore.ts +0 -83
  179. package/src/file/index.ts +0 -411
  180. package/src/file/ripgrep.ts +0 -407
  181. package/src/file/time.ts +0 -64
  182. package/src/file/watcher.ts +0 -127
  183. package/src/flag/flag.ts +0 -54
  184. package/src/format/formatter.ts +0 -342
  185. package/src/format/index.ts +0 -137
  186. package/src/global/index.ts +0 -55
  187. package/src/id/id.ts +0 -83
  188. package/src/ide/index.ts +0 -76
  189. package/src/index.ts +0 -162
  190. package/src/installation/index.ts +0 -246
  191. package/src/lsp/client.ts +0 -252
  192. package/src/lsp/index.ts +0 -485
  193. package/src/lsp/language.ts +0 -119
  194. package/src/lsp/server.ts +0 -2046
  195. package/src/mcp/auth.ts +0 -135
  196. package/src/mcp/index.ts +0 -931
  197. package/src/mcp/oauth-callback.ts +0 -200
  198. package/src/mcp/oauth-provider.ts +0 -154
  199. package/src/patch/index.ts +0 -680
  200. package/src/permission/arity.ts +0 -163
  201. package/src/permission/index.ts +0 -210
  202. package/src/permission/next.ts +0 -269
  203. package/src/plugin/codex.ts +0 -493
  204. package/src/plugin/copilot.ts +0 -269
  205. package/src/plugin/index.ts +0 -136
  206. package/src/project/bootstrap.ts +0 -35
  207. package/src/project/instance.ts +0 -91
  208. package/src/project/project.ts +0 -339
  209. package/src/project/state.ts +0 -66
  210. package/src/project/vcs.ts +0 -76
  211. package/src/provider/auth.ts +0 -147
  212. package/src/provider/models-macro.ts +0 -11
  213. package/src/provider/models.ts +0 -112
  214. package/src/provider/provider.ts +0 -1435
  215. package/src/provider/sdk/openai-compatible/src/README.md +0 -5
  216. package/src/provider/sdk/openai-compatible/src/index.ts +0 -2
  217. package/src/provider/sdk/openai-compatible/src/openai-compatible-provider.ts +0 -100
  218. package/src/provider/sdk/openai-compatible/src/responses/convert-to-openai-responses-input.ts +0 -303
  219. package/src/provider/sdk/openai-compatible/src/responses/map-openai-responses-finish-reason.ts +0 -22
  220. package/src/provider/sdk/openai-compatible/src/responses/openai-config.ts +0 -18
  221. package/src/provider/sdk/openai-compatible/src/responses/openai-error.ts +0 -22
  222. package/src/provider/sdk/openai-compatible/src/responses/openai-responses-api-types.ts +0 -207
  223. package/src/provider/sdk/openai-compatible/src/responses/openai-responses-language-model.ts +0 -1732
  224. package/src/provider/sdk/openai-compatible/src/responses/openai-responses-prepare-tools.ts +0 -177
  225. package/src/provider/sdk/openai-compatible/src/responses/openai-responses-settings.ts +0 -1
  226. package/src/provider/sdk/openai-compatible/src/responses/tool/code-interpreter.ts +0 -88
  227. package/src/provider/sdk/openai-compatible/src/responses/tool/file-search.ts +0 -128
  228. package/src/provider/sdk/openai-compatible/src/responses/tool/image-generation.ts +0 -115
  229. package/src/provider/sdk/openai-compatible/src/responses/tool/local-shell.ts +0 -65
  230. package/src/provider/sdk/openai-compatible/src/responses/tool/web-search-preview.ts +0 -104
  231. package/src/provider/sdk/openai-compatible/src/responses/tool/web-search.ts +0 -103
  232. package/src/provider/transform.ts +0 -733
  233. package/src/pty/index.ts +0 -232
  234. package/src/question/index.ts +0 -171
  235. package/src/scheduler/index.ts +0 -61
  236. package/src/server/error.ts +0 -36
  237. package/src/server/event.ts +0 -7
  238. package/src/server/mdns.ts +0 -59
  239. package/src/server/routes/config.ts +0 -92
  240. package/src/server/routes/experimental.ts +0 -208
  241. package/src/server/routes/file.ts +0 -197
  242. package/src/server/routes/global.ts +0 -135
  243. package/src/server/routes/mcp.ts +0 -361
  244. package/src/server/routes/permission.ts +0 -68
  245. package/src/server/routes/project.ts +0 -82
  246. package/src/server/routes/provider.ts +0 -165
  247. package/src/server/routes/pty.ts +0 -169
  248. package/src/server/routes/question.ts +0 -98
  249. package/src/server/routes/session.ts +0 -935
  250. package/src/server/routes/tui.ts +0 -379
  251. package/src/server/server.ts +0 -573
  252. package/src/session/compaction.ts +0 -225
  253. package/src/session/index.ts +0 -488
  254. package/src/session/llm.ts +0 -279
  255. package/src/session/message-v2.ts +0 -702
  256. package/src/session/message.ts +0 -189
  257. package/src/session/processor.ts +0 -406
  258. package/src/session/prompt/anthropic-20250930.txt +0 -166
  259. package/src/session/prompt/anthropic.txt +0 -105
  260. package/src/session/prompt/anthropic_spoof.txt +0 -1
  261. package/src/session/prompt/beast.txt +0 -147
  262. package/src/session/prompt/build-switch.txt +0 -5
  263. package/src/session/prompt/codex_header.txt +0 -79
  264. package/src/session/prompt/copilot-gpt-5.txt +0 -143
  265. package/src/session/prompt/gemini.txt +0 -155
  266. package/src/session/prompt/max-steps.txt +0 -16
  267. package/src/session/prompt/plan-reminder-anthropic.txt +0 -67
  268. package/src/session/prompt/plan.txt +0 -26
  269. package/src/session/prompt/qwen.txt +0 -109
  270. package/src/session/prompt.ts +0 -1820
  271. package/src/session/retry.ts +0 -90
  272. package/src/session/revert.ts +0 -108
  273. package/src/session/status.ts +0 -76
  274. package/src/session/summary.ts +0 -150
  275. package/src/session/system.ts +0 -152
  276. package/src/session/todo.ts +0 -37
  277. package/src/share/share-next.ts +0 -200
  278. package/src/share/share.ts +0 -92
  279. package/src/shell/shell.ts +0 -67
  280. package/src/skill/index.ts +0 -1
  281. package/src/skill/skill.ts +0 -136
  282. package/src/snapshot/index.ts +0 -236
  283. package/src/storage/storage.ts +0 -227
  284. package/src/tool/apply_patch.ts +0 -269
  285. package/src/tool/apply_patch.txt +0 -33
  286. package/src/tool/bash.ts +0 -259
  287. package/src/tool/bash.txt +0 -115
  288. package/src/tool/batch.ts +0 -175
  289. package/src/tool/batch.txt +0 -24
  290. package/src/tool/codesearch.ts +0 -132
  291. package/src/tool/codesearch.txt +0 -12
  292. package/src/tool/edit.ts +0 -645
  293. package/src/tool/edit.txt +0 -10
  294. package/src/tool/external-directory.ts +0 -32
  295. package/src/tool/glob.ts +0 -77
  296. package/src/tool/glob.txt +0 -6
  297. package/src/tool/grep.ts +0 -154
  298. package/src/tool/grep.txt +0 -8
  299. package/src/tool/invalid.ts +0 -17
  300. package/src/tool/ls.ts +0 -121
  301. package/src/tool/ls.txt +0 -1
  302. package/src/tool/lsp.ts +0 -96
  303. package/src/tool/lsp.txt +0 -19
  304. package/src/tool/multiedit.ts +0 -46
  305. package/src/tool/multiedit.txt +0 -41
  306. package/src/tool/plan-enter.txt +0 -14
  307. package/src/tool/plan-exit.txt +0 -13
  308. package/src/tool/plan.ts +0 -130
  309. package/src/tool/question.ts +0 -33
  310. package/src/tool/question.txt +0 -10
  311. package/src/tool/read.ts +0 -202
  312. package/src/tool/read.txt +0 -12
  313. package/src/tool/registry.ts +0 -164
  314. package/src/tool/skill.ts +0 -75
  315. package/src/tool/task.ts +0 -188
  316. package/src/tool/task.txt +0 -60
  317. package/src/tool/todo.ts +0 -53
  318. package/src/tool/todoread.txt +0 -14
  319. package/src/tool/todowrite.txt +0 -167
  320. package/src/tool/tool.ts +0 -88
  321. package/src/tool/truncation.ts +0 -106
  322. package/src/tool/webfetch.ts +0 -182
  323. package/src/tool/webfetch.txt +0 -13
  324. package/src/tool/websearch.ts +0 -150
  325. package/src/tool/websearch.txt +0 -14
  326. package/src/tool/write.ts +0 -80
  327. package/src/tool/write.txt +0 -8
  328. package/src/util/archive.ts +0 -16
  329. package/src/util/color.ts +0 -19
  330. package/src/util/context.ts +0 -25
  331. package/src/util/defer.ts +0 -12
  332. package/src/util/eventloop.ts +0 -20
  333. package/src/util/filesystem.ts +0 -93
  334. package/src/util/fn.ts +0 -11
  335. package/src/util/format.ts +0 -20
  336. package/src/util/iife.ts +0 -3
  337. package/src/util/keybind.ts +0 -103
  338. package/src/util/lazy.ts +0 -18
  339. package/src/util/locale.ts +0 -81
  340. package/src/util/lock.ts +0 -98
  341. package/src/util/log.ts +0 -180
  342. package/src/util/queue.ts +0 -32
  343. package/src/util/rpc.ts +0 -66
  344. package/src/util/scrap.ts +0 -10
  345. package/src/util/signal.ts +0 -12
  346. package/src/util/timeout.ts +0 -14
  347. package/src/util/token.ts +0 -7
  348. package/src/util/wildcard.ts +0 -56
  349. package/src/worktree/index.ts +0 -424
  350. package/sst-env.d.ts +0 -9
  351. package/test/acp/event-subscription.test.ts +0 -436
  352. package/test/agent/agent.test.ts +0 -638
  353. package/test/bun.test.ts +0 -53
  354. package/test/cli/github-action.test.ts +0 -129
  355. package/test/cli/github-remote.test.ts +0 -80
  356. package/test/cli/tui/transcript.test.ts +0 -297
  357. package/test/config/agent-color.test.ts +0 -66
  358. package/test/config/config.test.ts +0 -1414
  359. package/test/config/fixtures/empty-frontmatter.md +0 -4
  360. package/test/config/fixtures/frontmatter.md +0 -28
  361. package/test/config/fixtures/no-frontmatter.md +0 -1
  362. package/test/config/markdown.test.ts +0 -192
  363. package/test/file/ignore.test.ts +0 -10
  364. package/test/file/path-traversal.test.ts +0 -198
  365. package/test/fixture/fixture.ts +0 -45
  366. package/test/fixture/lsp/fake-lsp-server.js +0 -77
  367. package/test/ide/ide.test.ts +0 -82
  368. package/test/keybind.test.ts +0 -421
  369. package/test/lsp/client.test.ts +0 -95
  370. package/test/mcp/headers.test.ts +0 -153
  371. package/test/mcp/oauth-browser.test.ts +0 -261
  372. package/test/patch/patch.test.ts +0 -348
  373. package/test/permission/arity.test.ts +0 -33
  374. package/test/permission/next.test.ts +0 -652
  375. package/test/permission-task.test.ts +0 -319
  376. package/test/plugin/codex.test.ts +0 -123
  377. package/test/preload.ts +0 -65
  378. package/test/project/project.test.ts +0 -120
  379. package/test/provider/amazon-bedrock.test.ts +0 -268
  380. package/test/provider/gitlab-duo.test.ts +0 -286
  381. package/test/provider/provider.test.ts +0 -2149
  382. package/test/provider/transform.test.ts +0 -1596
  383. package/test/question/question.test.ts +0 -300
  384. package/test/scheduler.test.ts +0 -73
  385. package/test/server/session-list.test.ts +0 -39
  386. package/test/server/session-select.test.ts +0 -78
  387. package/test/session/compaction.test.ts +0 -293
  388. package/test/session/llm.test.ts +0 -90
  389. package/test/session/message-v2.test.ts +0 -662
  390. package/test/session/retry.test.ts +0 -131
  391. package/test/session/revert-compact.test.ts +0 -285
  392. package/test/session/session.test.ts +0 -71
  393. package/test/skill/skill.test.ts +0 -185
  394. package/test/snapshot/snapshot.test.ts +0 -939
  395. package/test/tool/__snapshots__/tool.test.ts.snap +0 -9
  396. package/test/tool/apply_patch.test.ts +0 -499
  397. package/test/tool/bash.test.ts +0 -320
  398. package/test/tool/external-directory.test.ts +0 -126
  399. package/test/tool/fixtures/large-image.png +0 -0
  400. package/test/tool/fixtures/models-api.json +0 -33453
  401. package/test/tool/grep.test.ts +0 -109
  402. package/test/tool/question.test.ts +0 -105
  403. package/test/tool/read.test.ts +0 -332
  404. package/test/tool/registry.test.ts +0 -76
  405. package/test/tool/truncation.test.ts +0 -159
  406. package/test/util/filesystem.test.ts +0 -39
  407. package/test/util/format.test.ts +0 -59
  408. package/test/util/iife.test.ts +0 -36
  409. package/test/util/lazy.test.ts +0 -50
  410. package/test/util/lock.test.ts +0 -72
  411. package/test/util/timeout.test.ts +0 -21
  412. package/test/util/wildcard.test.ts +0 -75
  413. package/tsconfig.json +0 -16
@@ -1,1152 +0,0 @@
1
- import { SyntaxStyle, RGBA, type TerminalColors } from "@opentui/core"
2
- import path from "path"
3
- import { createEffect, createMemo, onMount } from "solid-js"
4
- import { useSync } from "@tui/context/sync"
5
- import { createSimpleContext } from "./helper"
6
- import aura from "./theme/aura.json" with { type: "json" }
7
- import ayu from "./theme/ayu.json" with { type: "json" }
8
- import catppuccin from "./theme/catppuccin.json" with { type: "json" }
9
- import catppuccinFrappe from "./theme/catppuccin-frappe.json" with { type: "json" }
10
- import catppuccinMacchiato from "./theme/catppuccin-macchiato.json" with { type: "json" }
11
- import cobalt2 from "./theme/cobalt2.json" with { type: "json" }
12
- import cursor from "./theme/cursor.json" with { type: "json" }
13
- import dracula from "./theme/dracula.json" with { type: "json" }
14
- import everforest from "./theme/everforest.json" with { type: "json" }
15
- import flexoki from "./theme/flexoki.json" with { type: "json" }
16
- import github from "./theme/github.json" with { type: "json" }
17
- import gruvbox from "./theme/gruvbox.json" with { type: "json" }
18
- import kanagawa from "./theme/kanagawa.json" with { type: "json" }
19
- import material from "./theme/material.json" with { type: "json" }
20
- import matrix from "./theme/matrix.json" with { type: "json" }
21
- import mercury from "./theme/mercury.json" with { type: "json" }
22
- import monokai from "./theme/monokai.json" with { type: "json" }
23
- import nightowl from "./theme/nightowl.json" with { type: "json" }
24
- import nord from "./theme/nord.json" with { type: "json" }
25
- import osakaJade from "./theme/osaka-jade.json" with { type: "json" }
26
- import onedark from "./theme/one-dark.json" with { type: "json" }
27
- import opencode from "./theme/opencode.json" with { type: "json" }
28
- import orng from "./theme/orng.json" with { type: "json" }
29
- import lucentOrng from "./theme/lucent-orng.json" with { type: "json" }
30
- import palenight from "./theme/palenight.json" with { type: "json" }
31
- import rosepine from "./theme/rosepine.json" with { type: "json" }
32
- import solarized from "./theme/solarized.json" with { type: "json" }
33
- import synthwave84 from "./theme/synthwave84.json" with { type: "json" }
34
- import tokyonight from "./theme/tokyonight.json" with { type: "json" }
35
- import vercel from "./theme/vercel.json" with { type: "json" }
36
- import vesper from "./theme/vesper.json" with { type: "json" }
37
- import zenburn from "./theme/zenburn.json" with { type: "json" }
38
- import carbonfox from "./theme/carbonfox.json" with { type: "json" }
39
- import { useKV } from "./kv"
40
- import { useRenderer } from "@opentui/solid"
41
- import { createStore, produce } from "solid-js/store"
42
- import { Global } from "@/global"
43
- import { Filesystem } from "@/util/filesystem"
44
- import { useSDK } from "./sdk"
45
-
46
- type ThemeColors = {
47
- primary: RGBA
48
- secondary: RGBA
49
- accent: RGBA
50
- error: RGBA
51
- warning: RGBA
52
- success: RGBA
53
- info: RGBA
54
- text: RGBA
55
- textMuted: RGBA
56
- selectedListItemText: RGBA
57
- background: RGBA
58
- backgroundPanel: RGBA
59
- backgroundElement: RGBA
60
- backgroundMenu: RGBA
61
- border: RGBA
62
- borderActive: RGBA
63
- borderSubtle: RGBA
64
- diffAdded: RGBA
65
- diffRemoved: RGBA
66
- diffContext: RGBA
67
- diffHunkHeader: RGBA
68
- diffHighlightAdded: RGBA
69
- diffHighlightRemoved: RGBA
70
- diffAddedBg: RGBA
71
- diffRemovedBg: RGBA
72
- diffContextBg: RGBA
73
- diffLineNumber: RGBA
74
- diffAddedLineNumberBg: RGBA
75
- diffRemovedLineNumberBg: RGBA
76
- markdownText: RGBA
77
- markdownHeading: RGBA
78
- markdownLink: RGBA
79
- markdownLinkText: RGBA
80
- markdownCode: RGBA
81
- markdownBlockQuote: RGBA
82
- markdownEmph: RGBA
83
- markdownStrong: RGBA
84
- markdownHorizontalRule: RGBA
85
- markdownListItem: RGBA
86
- markdownListEnumeration: RGBA
87
- markdownImage: RGBA
88
- markdownImageText: RGBA
89
- markdownCodeBlock: RGBA
90
- syntaxComment: RGBA
91
- syntaxKeyword: RGBA
92
- syntaxFunction: RGBA
93
- syntaxVariable: RGBA
94
- syntaxString: RGBA
95
- syntaxNumber: RGBA
96
- syntaxType: RGBA
97
- syntaxOperator: RGBA
98
- syntaxPunctuation: RGBA
99
- }
100
-
101
- type Theme = ThemeColors & {
102
- _hasSelectedListItemText: boolean
103
- thinkingOpacity: number
104
- }
105
-
106
- export function selectedForeground(theme: Theme, bg?: RGBA): RGBA {
107
- // If theme explicitly defines selectedListItemText, use it
108
- if (theme._hasSelectedListItemText) {
109
- return theme.selectedListItemText
110
- }
111
-
112
- // For transparent backgrounds, calculate contrast based on the actual bg (or fallback to primary)
113
- if (theme.background.a === 0) {
114
- const targetColor = bg ?? theme.primary
115
- const { r, g, b } = targetColor
116
- const luminance = 0.299 * r + 0.587 * g + 0.114 * b
117
- return luminance > 0.5 ? RGBA.fromInts(0, 0, 0) : RGBA.fromInts(255, 255, 255)
118
- }
119
-
120
- // Fall back to background color
121
- return theme.background
122
- }
123
-
124
- type HexColor = `#${string}`
125
- type RefName = string
126
- type Variant = {
127
- dark: HexColor | RefName
128
- light: HexColor | RefName
129
- }
130
- type ColorValue = HexColor | RefName | Variant | RGBA
131
- type ThemeJson = {
132
- $schema?: string
133
- defs?: Record<string, HexColor | RefName>
134
- theme: Omit<Record<keyof ThemeColors, ColorValue>, "selectedListItemText" | "backgroundMenu"> & {
135
- selectedListItemText?: ColorValue
136
- backgroundMenu?: ColorValue
137
- thinkingOpacity?: number
138
- }
139
- }
140
-
141
- export const DEFAULT_THEMES: Record<string, ThemeJson> = {
142
- aura,
143
- ayu,
144
- catppuccin,
145
- ["catppuccin-frappe"]: catppuccinFrappe,
146
- ["catppuccin-macchiato"]: catppuccinMacchiato,
147
- cobalt2,
148
- cursor,
149
- dracula,
150
- everforest,
151
- flexoki,
152
- github,
153
- gruvbox,
154
- kanagawa,
155
- material,
156
- matrix,
157
- mercury,
158
- monokai,
159
- nightowl,
160
- nord,
161
- ["one-dark"]: onedark,
162
- ["osaka-jade"]: osakaJade,
163
- opencode,
164
- orng,
165
- ["lucent-orng"]: lucentOrng,
166
- palenight,
167
- rosepine,
168
- solarized,
169
- synthwave84,
170
- tokyonight,
171
- vesper,
172
- vercel,
173
- zenburn,
174
- carbonfox,
175
- }
176
-
177
- function resolveTheme(theme: ThemeJson, mode: "dark" | "light") {
178
- const defs = theme.defs ?? {}
179
- function resolveColor(c: ColorValue): RGBA {
180
- if (c instanceof RGBA) return c
181
- if (typeof c === "string") {
182
- if (c === "transparent" || c === "none") return RGBA.fromInts(0, 0, 0, 0)
183
-
184
- if (c.startsWith("#")) return RGBA.fromHex(c)
185
-
186
- if (defs[c] != null) {
187
- return resolveColor(defs[c])
188
- } else if (theme.theme[c as keyof ThemeColors] !== undefined) {
189
- return resolveColor(theme.theme[c as keyof ThemeColors]!)
190
- } else {
191
- throw new Error(`Color reference "${c}" not found in defs or theme`)
192
- }
193
- }
194
- if (typeof c === "number") {
195
- return ansiToRgba(c)
196
- }
197
- return resolveColor(c[mode])
198
- }
199
-
200
- const resolved = Object.fromEntries(
201
- Object.entries(theme.theme)
202
- .filter(([key]) => key !== "selectedListItemText" && key !== "backgroundMenu" && key !== "thinkingOpacity")
203
- .map(([key, value]) => {
204
- return [key, resolveColor(value as ColorValue)]
205
- }),
206
- ) as Partial<ThemeColors>
207
-
208
- // Handle selectedListItemText separately since it's optional
209
- const hasSelectedListItemText = theme.theme.selectedListItemText !== undefined
210
- if (hasSelectedListItemText) {
211
- resolved.selectedListItemText = resolveColor(theme.theme.selectedListItemText!)
212
- } else {
213
- // Backward compatibility: if selectedListItemText is not defined, use background color
214
- // This preserves the current behavior for all existing themes
215
- resolved.selectedListItemText = resolved.background
216
- }
217
-
218
- // Handle backgroundMenu - optional with fallback to backgroundElement
219
- if (theme.theme.backgroundMenu !== undefined) {
220
- resolved.backgroundMenu = resolveColor(theme.theme.backgroundMenu)
221
- } else {
222
- resolved.backgroundMenu = resolved.backgroundElement
223
- }
224
-
225
- // Handle thinkingOpacity - optional with default of 0.6
226
- const thinkingOpacity = theme.theme.thinkingOpacity ?? 0.6
227
-
228
- return {
229
- ...resolved,
230
- _hasSelectedListItemText: hasSelectedListItemText,
231
- thinkingOpacity,
232
- } as Theme
233
- }
234
-
235
- function ansiToRgba(code: number): RGBA {
236
- // Standard ANSI colors (0-15)
237
- if (code < 16) {
238
- const ansiColors = [
239
- "#000000", // Black
240
- "#800000", // Red
241
- "#008000", // Green
242
- "#808000", // Yellow
243
- "#000080", // Blue
244
- "#800080", // Magenta
245
- "#008080", // Cyan
246
- "#c0c0c0", // White
247
- "#808080", // Bright Black
248
- "#ff0000", // Bright Red
249
- "#00ff00", // Bright Green
250
- "#ffff00", // Bright Yellow
251
- "#0000ff", // Bright Blue
252
- "#ff00ff", // Bright Magenta
253
- "#00ffff", // Bright Cyan
254
- "#ffffff", // Bright White
255
- ]
256
- return RGBA.fromHex(ansiColors[code] ?? "#000000")
257
- }
258
-
259
- // 6x6x6 Color Cube (16-231)
260
- if (code < 232) {
261
- const index = code - 16
262
- const b = index % 6
263
- const g = Math.floor(index / 6) % 6
264
- const r = Math.floor(index / 36)
265
-
266
- const val = (x: number) => (x === 0 ? 0 : x * 40 + 55)
267
- return RGBA.fromInts(val(r), val(g), val(b))
268
- }
269
-
270
- // Grayscale Ramp (232-255)
271
- if (code < 256) {
272
- const gray = (code - 232) * 10 + 8
273
- return RGBA.fromInts(gray, gray, gray)
274
- }
275
-
276
- // Fallback for invalid codes
277
- return RGBA.fromInts(0, 0, 0)
278
- }
279
-
280
- export const { use: useTheme, provider: ThemeProvider } = createSimpleContext({
281
- name: "Theme",
282
- init: (props: { mode: "dark" | "light" }) => {
283
- const sync = useSync()
284
- const kv = useKV()
285
- const [store, setStore] = createStore({
286
- themes: DEFAULT_THEMES,
287
- mode: kv.get("theme_mode", props.mode),
288
- active: (sync.data.config.theme ?? kv.get("theme", "opencode")) as string,
289
- ready: false,
290
- })
291
-
292
- createEffect(() => {
293
- const theme = sync.data.config.theme
294
- if (theme) setStore("active", theme)
295
- })
296
-
297
- function init() {
298
- resolveSystemTheme()
299
- getCustomThemes()
300
- .then((custom) => {
301
- setStore(
302
- produce((draft) => {
303
- Object.assign(draft.themes, custom)
304
- }),
305
- )
306
- })
307
- .catch(() => {
308
- setStore("active", "opencode")
309
- })
310
- .finally(() => {
311
- if (store.active !== "system") {
312
- setStore("ready", true)
313
- }
314
- })
315
- }
316
-
317
- onMount(init)
318
-
319
- function resolveSystemTheme() {
320
- console.log("resolveSystemTheme")
321
- renderer
322
- .getPalette({
323
- size: 16,
324
- })
325
- .then((colors) => {
326
- console.log(colors.palette)
327
- if (!colors.palette[0]) {
328
- if (store.active === "system") {
329
- setStore(
330
- produce((draft) => {
331
- draft.active = "opencode"
332
- draft.ready = true
333
- }),
334
- )
335
- }
336
- return
337
- }
338
- setStore(
339
- produce((draft) => {
340
- draft.themes.system = generateSystem(colors, store.mode)
341
- if (store.active === "system") {
342
- draft.ready = true
343
- }
344
- }),
345
- )
346
- })
347
- }
348
-
349
- const renderer = useRenderer()
350
- process.on("SIGUSR2", async () => {
351
- renderer.clearPaletteCache()
352
- init()
353
- })
354
-
355
- const values = createMemo(() => {
356
- return resolveTheme(store.themes[store.active] ?? store.themes.opencode, store.mode)
357
- })
358
-
359
- const syntax = createMemo(() => generateSyntax(values()))
360
- const subtleSyntax = createMemo(() => generateSubtleSyntax(values()))
361
-
362
- return {
363
- theme: new Proxy(values(), {
364
- get(_target, prop) {
365
- // @ts-expect-error
366
- return values()[prop]
367
- },
368
- }),
369
- get selected() {
370
- return store.active
371
- },
372
- all() {
373
- return store.themes
374
- },
375
- syntax,
376
- subtleSyntax,
377
- mode() {
378
- return store.mode
379
- },
380
- setMode(mode: "dark" | "light") {
381
- setStore("mode", mode)
382
- kv.set("theme_mode", mode)
383
- },
384
- set(theme: string) {
385
- setStore("active", theme)
386
- kv.set("theme", theme)
387
- },
388
- get ready() {
389
- return store.ready
390
- },
391
- }
392
- },
393
- })
394
-
395
- const CUSTOM_THEME_GLOB = new Bun.Glob("themes/*.json")
396
- async function getCustomThemes() {
397
- const directories = [
398
- Global.Path.config,
399
- ...(await Array.fromAsync(
400
- Filesystem.up({
401
- targets: [".opencode"],
402
- start: process.cwd(),
403
- }),
404
- )),
405
- ]
406
-
407
- const result: Record<string, ThemeJson> = {}
408
- for (const dir of directories) {
409
- for await (const item of CUSTOM_THEME_GLOB.scan({
410
- absolute: true,
411
- followSymlinks: true,
412
- dot: true,
413
- cwd: dir,
414
- })) {
415
- const name = path.basename(item, ".json")
416
- result[name] = await Bun.file(item).json()
417
- }
418
- }
419
- return result
420
- }
421
-
422
- export function tint(base: RGBA, overlay: RGBA, alpha: number): RGBA {
423
- const r = base.r + (overlay.r - base.r) * alpha
424
- const g = base.g + (overlay.g - base.g) * alpha
425
- const b = base.b + (overlay.b - base.b) * alpha
426
- return RGBA.fromInts(Math.round(r * 255), Math.round(g * 255), Math.round(b * 255))
427
- }
428
-
429
- function generateSystem(colors: TerminalColors, mode: "dark" | "light"): ThemeJson {
430
- const bg = RGBA.fromHex(colors.defaultBackground ?? colors.palette[0]!)
431
- const fg = RGBA.fromHex(colors.defaultForeground ?? colors.palette[7]!)
432
- const isDark = mode == "dark"
433
-
434
- const col = (i: number) => {
435
- const value = colors.palette[i]
436
- if (value) return RGBA.fromHex(value)
437
- return ansiToRgba(i)
438
- }
439
-
440
- // Generate gray scale based on terminal background
441
- const grays = generateGrayScale(bg, isDark)
442
- const textMuted = generateMutedTextColor(bg, isDark)
443
-
444
- // ANSI color references
445
- const ansiColors = {
446
- black: col(0),
447
- red: col(1),
448
- green: col(2),
449
- yellow: col(3),
450
- blue: col(4),
451
- magenta: col(5),
452
- cyan: col(6),
453
- white: col(7),
454
- redBright: col(9),
455
- greenBright: col(10),
456
- }
457
-
458
- const diffAlpha = isDark ? 0.22 : 0.14
459
- const diffAddedBg = tint(bg, ansiColors.green, diffAlpha)
460
- const diffRemovedBg = tint(bg, ansiColors.red, diffAlpha)
461
- const diffAddedLineNumberBg = tint(grays[3], ansiColors.green, diffAlpha)
462
- const diffRemovedLineNumberBg = tint(grays[3], ansiColors.red, diffAlpha)
463
-
464
- return {
465
- theme: {
466
- // Primary colors using ANSI
467
- primary: ansiColors.cyan,
468
- secondary: ansiColors.magenta,
469
- accent: ansiColors.cyan,
470
-
471
- // Status colors using ANSI
472
- error: ansiColors.red,
473
- warning: ansiColors.yellow,
474
- success: ansiColors.green,
475
- info: ansiColors.cyan,
476
-
477
- // Text colors
478
- text: fg,
479
- textMuted,
480
- selectedListItemText: bg,
481
-
482
- // Background colors
483
- background: bg,
484
- backgroundPanel: grays[2],
485
- backgroundElement: grays[3],
486
- backgroundMenu: grays[3],
487
-
488
- // Border colors
489
- borderSubtle: grays[6],
490
- border: grays[7],
491
- borderActive: grays[8],
492
-
493
- // Diff colors
494
- diffAdded: ansiColors.green,
495
- diffRemoved: ansiColors.red,
496
- diffContext: grays[7],
497
- diffHunkHeader: grays[7],
498
- diffHighlightAdded: ansiColors.greenBright,
499
- diffHighlightRemoved: ansiColors.redBright,
500
- diffAddedBg,
501
- diffRemovedBg,
502
- diffContextBg: grays[1],
503
- diffLineNumber: grays[6],
504
- diffAddedLineNumberBg,
505
- diffRemovedLineNumberBg,
506
-
507
- // Markdown colors
508
- markdownText: fg,
509
- markdownHeading: fg,
510
- markdownLink: ansiColors.blue,
511
- markdownLinkText: ansiColors.cyan,
512
- markdownCode: ansiColors.green,
513
- markdownBlockQuote: ansiColors.yellow,
514
- markdownEmph: ansiColors.yellow,
515
- markdownStrong: fg,
516
- markdownHorizontalRule: grays[7],
517
- markdownListItem: ansiColors.blue,
518
- markdownListEnumeration: ansiColors.cyan,
519
- markdownImage: ansiColors.blue,
520
- markdownImageText: ansiColors.cyan,
521
- markdownCodeBlock: fg,
522
-
523
- // Syntax colors
524
- syntaxComment: textMuted,
525
- syntaxKeyword: ansiColors.magenta,
526
- syntaxFunction: ansiColors.blue,
527
- syntaxVariable: fg,
528
- syntaxString: ansiColors.green,
529
- syntaxNumber: ansiColors.yellow,
530
- syntaxType: ansiColors.cyan,
531
- syntaxOperator: ansiColors.cyan,
532
- syntaxPunctuation: fg,
533
- },
534
- }
535
- }
536
-
537
- function generateGrayScale(bg: RGBA, isDark: boolean): Record<number, RGBA> {
538
- const grays: Record<number, RGBA> = {}
539
-
540
- // RGBA stores floats in range 0-1, convert to 0-255
541
- const bgR = bg.r * 255
542
- const bgG = bg.g * 255
543
- const bgB = bg.b * 255
544
-
545
- const luminance = 0.299 * bgR + 0.587 * bgG + 0.114 * bgB
546
-
547
- for (let i = 1; i <= 12; i++) {
548
- const factor = i / 12.0
549
-
550
- let grayValue: number
551
- let newR: number
552
- let newG: number
553
- let newB: number
554
-
555
- if (isDark) {
556
- if (luminance < 10) {
557
- grayValue = Math.floor(factor * 0.4 * 255)
558
- newR = grayValue
559
- newG = grayValue
560
- newB = grayValue
561
- } else {
562
- const newLum = luminance + (255 - luminance) * factor * 0.4
563
-
564
- const ratio = newLum / luminance
565
- newR = Math.min(bgR * ratio, 255)
566
- newG = Math.min(bgG * ratio, 255)
567
- newB = Math.min(bgB * ratio, 255)
568
- }
569
- } else {
570
- if (luminance > 245) {
571
- grayValue = Math.floor(255 - factor * 0.4 * 255)
572
- newR = grayValue
573
- newG = grayValue
574
- newB = grayValue
575
- } else {
576
- const newLum = luminance * (1 - factor * 0.4)
577
-
578
- const ratio = newLum / luminance
579
- newR = Math.max(bgR * ratio, 0)
580
- newG = Math.max(bgG * ratio, 0)
581
- newB = Math.max(bgB * ratio, 0)
582
- }
583
- }
584
-
585
- grays[i] = RGBA.fromInts(Math.floor(newR), Math.floor(newG), Math.floor(newB))
586
- }
587
-
588
- return grays
589
- }
590
-
591
- function generateMutedTextColor(bg: RGBA, isDark: boolean): RGBA {
592
- // RGBA stores floats in range 0-1, convert to 0-255
593
- const bgR = bg.r * 255
594
- const bgG = bg.g * 255
595
- const bgB = bg.b * 255
596
-
597
- const bgLum = 0.299 * bgR + 0.587 * bgG + 0.114 * bgB
598
-
599
- let grayValue: number
600
-
601
- if (isDark) {
602
- if (bgLum < 10) {
603
- // Very dark/black background
604
- grayValue = 180 // #b4b4b4
605
- } else {
606
- // Scale up for lighter dark backgrounds
607
- grayValue = Math.min(Math.floor(160 + bgLum * 0.3), 200)
608
- }
609
- } else {
610
- if (bgLum > 245) {
611
- // Very light/white background
612
- grayValue = 75 // #4b4b4b
613
- } else {
614
- // Scale down for darker light backgrounds
615
- grayValue = Math.max(Math.floor(100 - (255 - bgLum) * 0.2), 60)
616
- }
617
- }
618
-
619
- return RGBA.fromInts(grayValue, grayValue, grayValue)
620
- }
621
-
622
- function generateSyntax(theme: Theme) {
623
- return SyntaxStyle.fromTheme(getSyntaxRules(theme))
624
- }
625
-
626
- function generateSubtleSyntax(theme: Theme) {
627
- const rules = getSyntaxRules(theme)
628
- return SyntaxStyle.fromTheme(
629
- rules.map((rule) => {
630
- if (rule.style.foreground) {
631
- const fg = rule.style.foreground
632
- return {
633
- ...rule,
634
- style: {
635
- ...rule.style,
636
- foreground: RGBA.fromInts(
637
- Math.round(fg.r * 255),
638
- Math.round(fg.g * 255),
639
- Math.round(fg.b * 255),
640
- Math.round(theme.thinkingOpacity * 255),
641
- ),
642
- },
643
- }
644
- }
645
- return rule
646
- }),
647
- )
648
- }
649
-
650
- function getSyntaxRules(theme: Theme) {
651
- return [
652
- {
653
- scope: ["default"],
654
- style: {
655
- foreground: theme.text,
656
- },
657
- },
658
- {
659
- scope: ["prompt"],
660
- style: {
661
- foreground: theme.accent,
662
- },
663
- },
664
- {
665
- scope: ["extmark.file"],
666
- style: {
667
- foreground: theme.warning,
668
- bold: true,
669
- },
670
- },
671
- {
672
- scope: ["extmark.agent"],
673
- style: {
674
- foreground: theme.secondary,
675
- bold: true,
676
- },
677
- },
678
- {
679
- scope: ["extmark.paste"],
680
- style: {
681
- foreground: theme.background,
682
- background: theme.warning,
683
- bold: true,
684
- },
685
- },
686
- {
687
- scope: ["comment"],
688
- style: {
689
- foreground: theme.syntaxComment,
690
- italic: true,
691
- },
692
- },
693
- {
694
- scope: ["comment.documentation"],
695
- style: {
696
- foreground: theme.syntaxComment,
697
- italic: true,
698
- },
699
- },
700
- {
701
- scope: ["string", "symbol"],
702
- style: {
703
- foreground: theme.syntaxString,
704
- },
705
- },
706
- {
707
- scope: ["number", "boolean"],
708
- style: {
709
- foreground: theme.syntaxNumber,
710
- },
711
- },
712
- {
713
- scope: ["character.special"],
714
- style: {
715
- foreground: theme.syntaxString,
716
- },
717
- },
718
- {
719
- scope: ["keyword.return", "keyword.conditional", "keyword.repeat", "keyword.coroutine"],
720
- style: {
721
- foreground: theme.syntaxKeyword,
722
- italic: true,
723
- },
724
- },
725
- {
726
- scope: ["keyword.type"],
727
- style: {
728
- foreground: theme.syntaxType,
729
- bold: true,
730
- italic: true,
731
- },
732
- },
733
- {
734
- scope: ["keyword.function", "function.method"],
735
- style: {
736
- foreground: theme.syntaxFunction,
737
- },
738
- },
739
- {
740
- scope: ["keyword"],
741
- style: {
742
- foreground: theme.syntaxKeyword,
743
- italic: true,
744
- },
745
- },
746
- {
747
- scope: ["keyword.import"],
748
- style: {
749
- foreground: theme.syntaxKeyword,
750
- },
751
- },
752
- {
753
- scope: ["operator", "keyword.operator", "punctuation.delimiter"],
754
- style: {
755
- foreground: theme.syntaxOperator,
756
- },
757
- },
758
- {
759
- scope: ["keyword.conditional.ternary"],
760
- style: {
761
- foreground: theme.syntaxOperator,
762
- },
763
- },
764
- {
765
- scope: ["variable", "variable.parameter", "function.method.call", "function.call"],
766
- style: {
767
- foreground: theme.syntaxVariable,
768
- },
769
- },
770
- {
771
- scope: ["variable.member", "function", "constructor"],
772
- style: {
773
- foreground: theme.syntaxFunction,
774
- },
775
- },
776
- {
777
- scope: ["type", "module"],
778
- style: {
779
- foreground: theme.syntaxType,
780
- },
781
- },
782
- {
783
- scope: ["constant"],
784
- style: {
785
- foreground: theme.syntaxNumber,
786
- },
787
- },
788
- {
789
- scope: ["property"],
790
- style: {
791
- foreground: theme.syntaxVariable,
792
- },
793
- },
794
- {
795
- scope: ["class"],
796
- style: {
797
- foreground: theme.syntaxType,
798
- },
799
- },
800
- {
801
- scope: ["parameter"],
802
- style: {
803
- foreground: theme.syntaxVariable,
804
- },
805
- },
806
- {
807
- scope: ["punctuation", "punctuation.bracket"],
808
- style: {
809
- foreground: theme.syntaxPunctuation,
810
- },
811
- },
812
- {
813
- scope: ["variable.builtin", "type.builtin", "function.builtin", "module.builtin", "constant.builtin"],
814
- style: {
815
- foreground: theme.error,
816
- },
817
- },
818
- {
819
- scope: ["variable.super"],
820
- style: {
821
- foreground: theme.error,
822
- },
823
- },
824
- {
825
- scope: ["string.escape", "string.regexp"],
826
- style: {
827
- foreground: theme.syntaxKeyword,
828
- },
829
- },
830
- {
831
- scope: ["keyword.directive"],
832
- style: {
833
- foreground: theme.syntaxKeyword,
834
- italic: true,
835
- },
836
- },
837
- {
838
- scope: ["punctuation.special"],
839
- style: {
840
- foreground: theme.syntaxOperator,
841
- },
842
- },
843
- {
844
- scope: ["keyword.modifier"],
845
- style: {
846
- foreground: theme.syntaxKeyword,
847
- italic: true,
848
- },
849
- },
850
- {
851
- scope: ["keyword.exception"],
852
- style: {
853
- foreground: theme.syntaxKeyword,
854
- italic: true,
855
- },
856
- },
857
- // Markdown specific styles
858
- {
859
- scope: ["markup.heading"],
860
- style: {
861
- foreground: theme.markdownHeading,
862
- bold: true,
863
- },
864
- },
865
- {
866
- scope: ["markup.heading.1"],
867
- style: {
868
- foreground: theme.markdownHeading,
869
- bold: true,
870
- },
871
- },
872
- {
873
- scope: ["markup.heading.2"],
874
- style: {
875
- foreground: theme.markdownHeading,
876
- bold: true,
877
- },
878
- },
879
- {
880
- scope: ["markup.heading.3"],
881
- style: {
882
- foreground: theme.markdownHeading,
883
- bold: true,
884
- },
885
- },
886
- {
887
- scope: ["markup.heading.4"],
888
- style: {
889
- foreground: theme.markdownHeading,
890
- bold: true,
891
- },
892
- },
893
- {
894
- scope: ["markup.heading.5"],
895
- style: {
896
- foreground: theme.markdownHeading,
897
- bold: true,
898
- },
899
- },
900
- {
901
- scope: ["markup.heading.6"],
902
- style: {
903
- foreground: theme.markdownHeading,
904
- bold: true,
905
- },
906
- },
907
- {
908
- scope: ["markup.bold", "markup.strong"],
909
- style: {
910
- foreground: theme.markdownStrong,
911
- bold: true,
912
- },
913
- },
914
- {
915
- scope: ["markup.italic"],
916
- style: {
917
- foreground: theme.markdownEmph,
918
- italic: true,
919
- },
920
- },
921
- {
922
- scope: ["markup.list"],
923
- style: {
924
- foreground: theme.markdownListItem,
925
- },
926
- },
927
- {
928
- scope: ["markup.quote"],
929
- style: {
930
- foreground: theme.markdownBlockQuote,
931
- italic: true,
932
- },
933
- },
934
- {
935
- scope: ["markup.raw", "markup.raw.block"],
936
- style: {
937
- foreground: theme.markdownCode,
938
- },
939
- },
940
- {
941
- scope: ["markup.raw.inline"],
942
- style: {
943
- foreground: theme.markdownCode,
944
- background: theme.background,
945
- },
946
- },
947
- {
948
- scope: ["markup.link"],
949
- style: {
950
- foreground: theme.markdownLink,
951
- underline: true,
952
- },
953
- },
954
- {
955
- scope: ["markup.link.label"],
956
- style: {
957
- foreground: theme.markdownLinkText,
958
- underline: true,
959
- },
960
- },
961
- {
962
- scope: ["markup.link.url"],
963
- style: {
964
- foreground: theme.markdownLink,
965
- underline: true,
966
- },
967
- },
968
- {
969
- scope: ["label"],
970
- style: {
971
- foreground: theme.markdownLinkText,
972
- },
973
- },
974
- {
975
- scope: ["spell", "nospell"],
976
- style: {
977
- foreground: theme.text,
978
- },
979
- },
980
- {
981
- scope: ["conceal"],
982
- style: {
983
- foreground: theme.textMuted,
984
- },
985
- },
986
- // Additional common highlight groups
987
- {
988
- scope: ["string.special", "string.special.url"],
989
- style: {
990
- foreground: theme.markdownLink,
991
- underline: true,
992
- },
993
- },
994
- {
995
- scope: ["character"],
996
- style: {
997
- foreground: theme.syntaxString,
998
- },
999
- },
1000
- {
1001
- scope: ["float"],
1002
- style: {
1003
- foreground: theme.syntaxNumber,
1004
- },
1005
- },
1006
- {
1007
- scope: ["comment.error"],
1008
- style: {
1009
- foreground: theme.error,
1010
- italic: true,
1011
- bold: true,
1012
- },
1013
- },
1014
- {
1015
- scope: ["comment.warning"],
1016
- style: {
1017
- foreground: theme.warning,
1018
- italic: true,
1019
- bold: true,
1020
- },
1021
- },
1022
- {
1023
- scope: ["comment.todo", "comment.note"],
1024
- style: {
1025
- foreground: theme.info,
1026
- italic: true,
1027
- bold: true,
1028
- },
1029
- },
1030
- {
1031
- scope: ["namespace"],
1032
- style: {
1033
- foreground: theme.syntaxType,
1034
- },
1035
- },
1036
- {
1037
- scope: ["field"],
1038
- style: {
1039
- foreground: theme.syntaxVariable,
1040
- },
1041
- },
1042
- {
1043
- scope: ["type.definition"],
1044
- style: {
1045
- foreground: theme.syntaxType,
1046
- bold: true,
1047
- },
1048
- },
1049
- {
1050
- scope: ["keyword.export"],
1051
- style: {
1052
- foreground: theme.syntaxKeyword,
1053
- },
1054
- },
1055
- {
1056
- scope: ["attribute", "annotation"],
1057
- style: {
1058
- foreground: theme.warning,
1059
- },
1060
- },
1061
- {
1062
- scope: ["tag"],
1063
- style: {
1064
- foreground: theme.error,
1065
- },
1066
- },
1067
- {
1068
- scope: ["tag.attribute"],
1069
- style: {
1070
- foreground: theme.syntaxKeyword,
1071
- },
1072
- },
1073
- {
1074
- scope: ["tag.delimiter"],
1075
- style: {
1076
- foreground: theme.syntaxOperator,
1077
- },
1078
- },
1079
- {
1080
- scope: ["markup.strikethrough"],
1081
- style: {
1082
- foreground: theme.textMuted,
1083
- },
1084
- },
1085
- {
1086
- scope: ["markup.underline"],
1087
- style: {
1088
- foreground: theme.text,
1089
- underline: true,
1090
- },
1091
- },
1092
- {
1093
- scope: ["markup.list.checked"],
1094
- style: {
1095
- foreground: theme.success,
1096
- },
1097
- },
1098
- {
1099
- scope: ["markup.list.unchecked"],
1100
- style: {
1101
- foreground: theme.textMuted,
1102
- },
1103
- },
1104
- {
1105
- scope: ["diff.plus"],
1106
- style: {
1107
- foreground: theme.diffAdded,
1108
- background: theme.diffAddedBg,
1109
- },
1110
- },
1111
- {
1112
- scope: ["diff.minus"],
1113
- style: {
1114
- foreground: theme.diffRemoved,
1115
- background: theme.diffRemovedBg,
1116
- },
1117
- },
1118
- {
1119
- scope: ["diff.delta"],
1120
- style: {
1121
- foreground: theme.diffContext,
1122
- background: theme.diffContextBg,
1123
- },
1124
- },
1125
- {
1126
- scope: ["error"],
1127
- style: {
1128
- foreground: theme.error,
1129
- bold: true,
1130
- },
1131
- },
1132
- {
1133
- scope: ["warning"],
1134
- style: {
1135
- foreground: theme.warning,
1136
- bold: true,
1137
- },
1138
- },
1139
- {
1140
- scope: ["info"],
1141
- style: {
1142
- foreground: theme.info,
1143
- },
1144
- },
1145
- {
1146
- scope: ["debug"],
1147
- style: {
1148
- foreground: theme.textMuted,
1149
- },
1150
- },
1151
- ]
1152
- }