@renxqoo/renx-code 0.0.9 → 0.0.10

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 (286) hide show
  1. package/README.md +14 -0
  2. package/bin/renx.cjs +79 -42
  3. package/bin/renx.exe +0 -0
  4. package/package.json +10 -28
  5. package/src/App.tsx +0 -297
  6. package/src/agent/runtime/event-format.ts +0 -258
  7. package/src/agent/runtime/model-types.ts +0 -13
  8. package/src/agent/runtime/runtime.context-usage.test.ts +0 -192
  9. package/src/agent/runtime/runtime.error-handling.test.ts +0 -235
  10. package/src/agent/runtime/runtime.simple.test.ts +0 -16
  11. package/src/agent/runtime/runtime.test.ts +0 -296
  12. package/src/agent/runtime/runtime.ts +0 -875
  13. package/src/agent/runtime/runtime.usage-forwarding.test.ts +0 -228
  14. package/src/agent/runtime/source-modules.test.ts +0 -38
  15. package/src/agent/runtime/source-modules.ts +0 -370
  16. package/src/agent/runtime/tool-call-buffer.test.ts +0 -65
  17. package/src/agent/runtime/tool-call-buffer.ts +0 -60
  18. package/src/agent/runtime/tool-confirmation.test.ts +0 -56
  19. package/src/agent/runtime/tool-confirmation.ts +0 -15
  20. package/src/agent/runtime/types.ts +0 -99
  21. package/src/commands/slash-commands.test.ts +0 -216
  22. package/src/commands/slash-commands.ts +0 -64
  23. package/src/components/chat/assistant-reply.test.tsx +0 -47
  24. package/src/components/chat/assistant-reply.tsx +0 -136
  25. package/src/components/chat/assistant-segment.test.ts +0 -99
  26. package/src/components/chat/assistant-segment.tsx +0 -125
  27. package/src/components/chat/assistant-tool-group.tsx +0 -900
  28. package/src/components/chat/code-block.test.tsx +0 -206
  29. package/src/components/chat/code-block.tsx +0 -313
  30. package/src/components/chat/prompt-card.tsx +0 -81
  31. package/src/components/chat/segment-groups.test.ts +0 -52
  32. package/src/components/chat/segment-groups.ts +0 -106
  33. package/src/components/chat/turn-item.tsx +0 -39
  34. package/src/components/conversation-panel.tsx +0 -43
  35. package/src/components/file-mention-menu.tsx +0 -77
  36. package/src/components/file-picker-dialog.tsx +0 -206
  37. package/src/components/footer-hints.tsx +0 -75
  38. package/src/components/model-picker-dialog.tsx +0 -248
  39. package/src/components/prompt.tsx +0 -233
  40. package/src/components/slash-command-menu.tsx +0 -65
  41. package/src/components/tool-confirm-dialog-content.test.ts +0 -103
  42. package/src/components/tool-confirm-dialog-content.ts +0 -186
  43. package/src/components/tool-confirm-dialog.tsx +0 -187
  44. package/src/components/tool-display-config.ts +0 -119
  45. package/src/context-usage-regressions.test.ts +0 -26
  46. package/src/files/attachment-capabilities.test.ts +0 -30
  47. package/src/files/attachment-capabilities.ts +0 -50
  48. package/src/files/attachment-content.ts +0 -153
  49. package/src/files/file-mention-query.test.ts +0 -34
  50. package/src/files/file-mention-query.ts +0 -32
  51. package/src/files/prompt-display.ts +0 -13
  52. package/src/files/types.ts +0 -5
  53. package/src/files/workspace-files.ts +0 -61
  54. package/src/hooks/agent-event-handlers.test.ts +0 -207
  55. package/src/hooks/agent-event-handlers.ts +0 -196
  56. package/src/hooks/chat-local-replies.fixed.test.ts +0 -119
  57. package/src/hooks/chat-local-replies.test.ts +0 -153
  58. package/src/hooks/chat-local-replies.ts +0 -63
  59. package/src/hooks/turn-updater.test.ts +0 -70
  60. package/src/hooks/turn-updater.ts +0 -166
  61. package/src/hooks/use-agent-chat.context.test.ts +0 -10
  62. package/src/hooks/use-agent-chat.status.test.ts +0 -14
  63. package/src/hooks/use-agent-chat.test.ts +0 -80
  64. package/src/hooks/use-agent-chat.ts +0 -621
  65. package/src/hooks/use-file-mention-menu.ts +0 -196
  66. package/src/hooks/use-file-picker.ts +0 -185
  67. package/src/hooks/use-model-picker.ts +0 -196
  68. package/src/hooks/use-slash-command-menu.ts +0 -154
  69. package/src/index.tsx +0 -55
  70. package/src/runtime/clipboard.test.ts +0 -43
  71. package/src/runtime/clipboard.ts +0 -89
  72. package/src/runtime/exit.test.ts +0 -177
  73. package/src/runtime/exit.ts +0 -98
  74. package/src/runtime/runtime-support.test.ts +0 -31
  75. package/src/runtime/terminal-theme.test.ts +0 -55
  76. package/src/runtime/terminal-theme.ts +0 -196
  77. package/src/types/chat.ts +0 -32
  78. package/src/types/message-content.ts +0 -48
  79. package/src/ui/open-code-theme.ts +0 -176
  80. package/src/ui/opencode-markdown.ts +0 -211
  81. package/src/ui/theme.simple.test.ts +0 -52
  82. package/src/ui/theme.test.ts +0 -151
  83. package/src/ui/theme.ts +0 -152
  84. package/src/utils/time.test.ts +0 -144
  85. package/src/utils/time.ts +0 -7
  86. package/tsconfig.json +0 -30
  87. package/vendor/agent-root/src/agent/ENTERPRISE_ACCEPTANCE_CHECKLIST.md +0 -95
  88. package/vendor/agent-root/src/agent/ENTERPRISE_REALTIME.html +0 -1345
  89. package/vendor/agent-root/src/agent/ENTERPRISE_REALTIME.md +0 -1353
  90. package/vendor/agent-root/src/agent/ERROR_CONTRACT.md +0 -60
  91. package/vendor/agent-root/src/agent/TEST_COVERAGE_ANALYSIS.md +0 -278
  92. package/vendor/agent-root/src/agent/__test__/error-contract.test.ts +0 -72
  93. package/vendor/agent-root/src/agent/__test__/types.test.ts +0 -137
  94. package/vendor/agent-root/src/agent/agent/__test__/abort-runtime.test.ts +0 -83
  95. package/vendor/agent-root/src/agent/agent/__test__/callback-safety.test.ts +0 -34
  96. package/vendor/agent-root/src/agent/agent/__test__/compaction.test.ts +0 -323
  97. package/vendor/agent-root/src/agent/agent/__test__/concurrency.test.ts +0 -290
  98. package/vendor/agent-root/src/agent/agent/__test__/error-normalizer.test.ts +0 -377
  99. package/vendor/agent-root/src/agent/agent/__test__/error.test.ts +0 -212
  100. package/vendor/agent-root/src/agent/agent/__test__/fault-injection.test.ts +0 -295
  101. package/vendor/agent-root/src/agent/agent/__test__/index.test.ts +0 -3607
  102. package/vendor/agent-root/src/agent/agent/__test__/logger.test.ts +0 -35
  103. package/vendor/agent-root/src/agent/agent/__test__/message-utils.test.ts +0 -517
  104. package/vendor/agent-root/src/agent/agent/__test__/telemetry.test.ts +0 -97
  105. package/vendor/agent-root/src/agent/agent/__test__/timeout-budget.test.ts +0 -479
  106. package/vendor/agent-root/src/agent/agent/__test__/tool-call-merge.test.ts +0 -80
  107. package/vendor/agent-root/src/agent/agent/__test__/tool-execution-ledger.test.ts +0 -76
  108. package/vendor/agent-root/src/agent/agent/__test__/write-buffer.test.ts +0 -173
  109. package/vendor/agent-root/src/agent/agent/__test__/write-file-session.test.ts +0 -109
  110. package/vendor/agent-root/src/agent/agent/abort-runtime.ts +0 -71
  111. package/vendor/agent-root/src/agent/agent/callback-safety.ts +0 -33
  112. package/vendor/agent-root/src/agent/agent/compaction.ts +0 -291
  113. package/vendor/agent-root/src/agent/agent/concurrency.ts +0 -103
  114. package/vendor/agent-root/src/agent/agent/error-normalizer.ts +0 -190
  115. package/vendor/agent-root/src/agent/agent/error.ts +0 -198
  116. package/vendor/agent-root/src/agent/agent/index.ts +0 -1772
  117. package/vendor/agent-root/src/agent/agent/logger.ts +0 -65
  118. package/vendor/agent-root/src/agent/agent/message-utils.ts +0 -101
  119. package/vendor/agent-root/src/agent/agent/stream-events.ts +0 -61
  120. package/vendor/agent-root/src/agent/agent/telemetry.ts +0 -123
  121. package/vendor/agent-root/src/agent/agent/timeout-budget.ts +0 -227
  122. package/vendor/agent-root/src/agent/agent/tool-call-merge.ts +0 -111
  123. package/vendor/agent-root/src/agent/agent/tool-execution-ledger.ts +0 -164
  124. package/vendor/agent-root/src/agent/agent/write-buffer.ts +0 -188
  125. package/vendor/agent-root/src/agent/agent/write-file-session.ts +0 -238
  126. package/vendor/agent-root/src/agent/app/__test__/agent-app-service.test.ts +0 -1053
  127. package/vendor/agent-root/src/agent/app/__test__/minimal-agent-application.test.ts +0 -158
  128. package/vendor/agent-root/src/agent/app/__test__/sqlite-agent-app-store.test.ts +0 -437
  129. package/vendor/agent-root/src/agent/app/agent-app-service.ts +0 -748
  130. package/vendor/agent-root/src/agent/app/contracts.ts +0 -109
  131. package/vendor/agent-root/src/agent/app/index.ts +0 -5
  132. package/vendor/agent-root/src/agent/app/minimal-agent-application.ts +0 -151
  133. package/vendor/agent-root/src/agent/app/ports.ts +0 -72
  134. package/vendor/agent-root/src/agent/app/sqlite-agent-app-store.ts +0 -1182
  135. package/vendor/agent-root/src/agent/app/sqlite-client.ts +0 -177
  136. package/vendor/agent-root/src/agent/docs/cli-app-layer/00-README.md +0 -36
  137. package/vendor/agent-root/src/agent/docs/cli-app-layer/01-scope-and-goals.md +0 -33
  138. package/vendor/agent-root/src/agent/docs/cli-app-layer/02-architecture-overview.md +0 -40
  139. package/vendor/agent-root/src/agent/docs/cli-app-layer/03-domain-model-and-contracts.md +0 -91
  140. package/vendor/agent-root/src/agent/docs/cli-app-layer/04-ports-and-interfaces.md +0 -116
  141. package/vendor/agent-root/src/agent/docs/cli-app-layer/05-run-orchestration-and-state-machine.md +0 -52
  142. package/vendor/agent-root/src/agent/docs/cli-app-layer/06-cli-commands-and-ux.md +0 -53
  143. package/vendor/agent-root/src/agent/docs/cli-app-layer/07-storage-design-local.md +0 -52
  144. package/vendor/agent-root/src/agent/docs/cli-app-layer/08-error-and-observability.md +0 -40
  145. package/vendor/agent-root/src/agent/docs/cli-app-layer/09-security-and-policy-boundary.md +0 -19
  146. package/vendor/agent-root/src/agent/docs/cli-app-layer/10-test-plan-and-acceptance.md +0 -28
  147. package/vendor/agent-root/src/agent/docs/cli-app-layer/11-implementation-phases.md +0 -26
  148. package/vendor/agent-root/src/agent/docs/cli-app-layer/12-open-questions-and-risks.md +0 -30
  149. package/vendor/agent-root/src/agent/docs/cli-app-layer/13-sqlite-schema-fields-and-rationale.md +0 -567
  150. package/vendor/agent-root/src/agent/docs/cli-app-layer/14-project-flow-mermaid.md +0 -583
  151. package/vendor/agent-root/src/agent/docs/cli-app-layer/15-openclaw-style-project-blueprint.md +0 -972
  152. package/vendor/agent-root/src/agent/error-contract.ts +0 -154
  153. package/vendor/agent-root/src/agent/prompts/system.ts +0 -246
  154. package/vendor/agent-root/src/agent/prompts/system1.ts +0 -208
  155. package/vendor/agent-root/src/agent/storage/__test__/file-history-store.test.ts +0 -98
  156. package/vendor/agent-root/src/agent/storage/file-history-store.ts +0 -313
  157. package/vendor/agent-root/src/agent/storage/file-storage-config.ts +0 -94
  158. package/vendor/agent-root/src/agent/storage/file-system.ts +0 -31
  159. package/vendor/agent-root/src/agent/storage/file-write-service.ts +0 -21
  160. package/vendor/agent-root/src/agent/tool/__test__/base-tool.test.ts +0 -413
  161. package/vendor/agent-root/src/agent/tool/__test__/bash-policy.test.ts +0 -356
  162. package/vendor/agent-root/src/agent/tool/__test__/bash.mocked-coverage.test.ts +0 -375
  163. package/vendor/agent-root/src/agent/tool/__test__/bash.test.ts +0 -372
  164. package/vendor/agent-root/src/agent/tool/__test__/error.test.ts +0 -108
  165. package/vendor/agent-root/src/agent/tool/__test__/file-edit-tool.test.ts +0 -258
  166. package/vendor/agent-root/src/agent/tool/__test__/file-history-tools.test.ts +0 -121
  167. package/vendor/agent-root/src/agent/tool/__test__/file-read-tool.test.ts +0 -210
  168. package/vendor/agent-root/src/agent/tool/__test__/glob.test.ts +0 -139
  169. package/vendor/agent-root/src/agent/tool/__test__/grep.mocked-coverage.test.ts +0 -456
  170. package/vendor/agent-root/src/agent/tool/__test__/grep.test.ts +0 -192
  171. package/vendor/agent-root/src/agent/tool/__test__/lsp.test.ts +0 -300
  172. package/vendor/agent-root/src/agent/tool/__test__/outside-workspace-confirmation.test.ts +0 -214
  173. package/vendor/agent-root/src/agent/tool/__test__/path-security.test.ts +0 -336
  174. package/vendor/agent-root/src/agent/tool/__test__/skill-loader.test.ts +0 -494
  175. package/vendor/agent-root/src/agent/tool/__test__/skill-parser.test.ts +0 -543
  176. package/vendor/agent-root/src/agent/tool/__test__/skill-tool.test.ts +0 -172
  177. package/vendor/agent-root/src/agent/tool/__test__/task-concurrency-and-version.test.ts +0 -116
  178. package/vendor/agent-root/src/agent/tool/__test__/task-create-get-list-update.test.ts +0 -267
  179. package/vendor/agent-root/src/agent/tool/__test__/task-create.test.ts +0 -519
  180. package/vendor/agent-root/src/agent/tool/__test__/task-errors.test.ts +0 -225
  181. package/vendor/agent-root/src/agent/tool/__test__/task-output-blocking.test.ts +0 -223
  182. package/vendor/agent-root/src/agent/tool/__test__/task-output.test.ts +0 -184
  183. package/vendor/agent-root/src/agent/tool/__test__/task-parent-abort.test.ts +0 -287
  184. package/vendor/agent-root/src/agent/tool/__test__/task-real-runner-adapter.test.ts +0 -190
  185. package/vendor/agent-root/src/agent/tool/__test__/task-run-lifecycle.test.ts +0 -352
  186. package/vendor/agent-root/src/agent/tool/__test__/task-store-runner-branches.test.ts +0 -395
  187. package/vendor/agent-root/src/agent/tool/__test__/task-store.test.ts +0 -391
  188. package/vendor/agent-root/src/agent/tool/__test__/task-subagent-config-integration.test.ts +0 -176
  189. package/vendor/agent-root/src/agent/tool/__test__/task-subagent-config.test.ts +0 -68
  190. package/vendor/agent-root/src/agent/tool/__test__/task-tools-core-edges.test.ts +0 -630
  191. package/vendor/agent-root/src/agent/tool/__test__/task-tools-runtime-edges.test.ts +0 -732
  192. package/vendor/agent-root/src/agent/tool/__test__/task-types.test.ts +0 -494
  193. package/vendor/agent-root/src/agent/tool/__test__/task-utils-branches.test.ts +0 -175
  194. package/vendor/agent-root/src/agent/tool/__test__/tool-manager.test.ts +0 -505
  195. package/vendor/agent-root/src/agent/tool/__test__/types.test.ts +0 -55
  196. package/vendor/agent-root/src/agent/tool/__test__/web-fetch.test.ts +0 -244
  197. package/vendor/agent-root/src/agent/tool/__test__/web-search.test.ts +0 -290
  198. package/vendor/agent-root/src/agent/tool/__test__/write-file.test.ts +0 -368
  199. package/vendor/agent-root/src/agent/tool/base-tool.ts +0 -345
  200. package/vendor/agent-root/src/agent/tool/bash-policy.ts +0 -636
  201. package/vendor/agent-root/src/agent/tool/bash.ts +0 -688
  202. package/vendor/agent-root/src/agent/tool/error.ts +0 -131
  203. package/vendor/agent-root/src/agent/tool/file-edit-tool.ts +0 -264
  204. package/vendor/agent-root/src/agent/tool/file-history-list.ts +0 -103
  205. package/vendor/agent-root/src/agent/tool/file-history-restore.ts +0 -149
  206. package/vendor/agent-root/src/agent/tool/file-read-tool.ts +0 -211
  207. package/vendor/agent-root/src/agent/tool/glob.ts +0 -171
  208. package/vendor/agent-root/src/agent/tool/grep.ts +0 -496
  209. package/vendor/agent-root/src/agent/tool/lsp.ts +0 -481
  210. package/vendor/agent-root/src/agent/tool/path-security.ts +0 -117
  211. package/vendor/agent-root/src/agent/tool/search/common.ts +0 -153
  212. package/vendor/agent-root/src/agent/tool/skill/index.ts +0 -13
  213. package/vendor/agent-root/src/agent/tool/skill/loader.ts +0 -229
  214. package/vendor/agent-root/src/agent/tool/skill/parser.ts +0 -124
  215. package/vendor/agent-root/src/agent/tool/skill/types.ts +0 -27
  216. package/vendor/agent-root/src/agent/tool/skill-tool.ts +0 -143
  217. package/vendor/agent-root/src/agent/tool/task-create.ts +0 -186
  218. package/vendor/agent-root/src/agent/tool/task-errors.ts +0 -42
  219. package/vendor/agent-root/src/agent/tool/task-get.ts +0 -116
  220. package/vendor/agent-root/src/agent/tool/task-graph.ts +0 -78
  221. package/vendor/agent-root/src/agent/tool/task-list.ts +0 -141
  222. package/vendor/agent-root/src/agent/tool/task-mock-runner-adapter.ts +0 -232
  223. package/vendor/agent-root/src/agent/tool/task-output.ts +0 -223
  224. package/vendor/agent-root/src/agent/tool/task-parent-abort.ts +0 -115
  225. package/vendor/agent-root/src/agent/tool/task-real-runner-adapter.ts +0 -336
  226. package/vendor/agent-root/src/agent/tool/task-runner-adapter.ts +0 -55
  227. package/vendor/agent-root/src/agent/tool/task-stop.ts +0 -187
  228. package/vendor/agent-root/src/agent/tool/task-store.ts +0 -217
  229. package/vendor/agent-root/src/agent/tool/task-subagent-config.ts +0 -149
  230. package/vendor/agent-root/src/agent/tool/task-types.ts +0 -264
  231. package/vendor/agent-root/src/agent/tool/task-update.ts +0 -315
  232. package/vendor/agent-root/src/agent/tool/task.ts +0 -209
  233. package/vendor/agent-root/src/agent/tool/tool-manager.ts +0 -361
  234. package/vendor/agent-root/src/agent/tool/tool-prompts.ts +0 -242
  235. package/vendor/agent-root/src/agent/tool/types.ts +0 -116
  236. package/vendor/agent-root/src/agent/tool/web-fetch.ts +0 -227
  237. package/vendor/agent-root/src/agent/tool/web-search.ts +0 -208
  238. package/vendor/agent-root/src/agent/tool/write-file.ts +0 -497
  239. package/vendor/agent-root/src/agent/types.ts +0 -232
  240. package/vendor/agent-root/src/agent/utils/__tests__/index.test.ts +0 -18
  241. package/vendor/agent-root/src/agent/utils/__tests__/message-utils.test.ts +0 -610
  242. package/vendor/agent-root/src/agent/utils/__tests__/message.test.ts +0 -223
  243. package/vendor/agent-root/src/agent/utils/__tests__/token.test.ts +0 -42
  244. package/vendor/agent-root/src/agent/utils/index.ts +0 -16
  245. package/vendor/agent-root/src/agent/utils/message.ts +0 -171
  246. package/vendor/agent-root/src/agent/utils/token.ts +0 -28
  247. package/vendor/agent-root/src/config/__tests__/load-config-to-env.test.ts +0 -238
  248. package/vendor/agent-root/src/config/__tests__/loader.test.ts +0 -361
  249. package/vendor/agent-root/src/config/__tests__/runtime.test.ts +0 -88
  250. package/vendor/agent-root/src/config/index.ts +0 -55
  251. package/vendor/agent-root/src/config/loader.ts +0 -494
  252. package/vendor/agent-root/src/config/paths.ts +0 -30
  253. package/vendor/agent-root/src/config/runtime.ts +0 -163
  254. package/vendor/agent-root/src/config/types.ts +0 -96
  255. package/vendor/agent-root/src/logger/index.ts +0 -57
  256. package/vendor/agent-root/src/logger/logger.ts +0 -819
  257. package/vendor/agent-root/src/logger/types.ts +0 -150
  258. package/vendor/agent-root/src/providers/__tests__/errors.test.ts +0 -441
  259. package/vendor/agent-root/src/providers/__tests__/index.test.ts +0 -16
  260. package/vendor/agent-root/src/providers/__tests__/openai-compatible.options.test.ts +0 -318
  261. package/vendor/agent-root/src/providers/__tests__/openai-compatible.test.ts +0 -600
  262. package/vendor/agent-root/src/providers/__tests__/registry.test.ts +0 -523
  263. package/vendor/agent-root/src/providers/__tests__/responses-adapter.test.ts +0 -298
  264. package/vendor/agent-root/src/providers/adapters/__tests__/anthropic.test.ts +0 -354
  265. package/vendor/agent-root/src/providers/adapters/__tests__/kimi.test.ts +0 -58
  266. package/vendor/agent-root/src/providers/adapters/__tests__/standard.test.ts +0 -261
  267. package/vendor/agent-root/src/providers/adapters/anthropic.ts +0 -572
  268. package/vendor/agent-root/src/providers/adapters/base.ts +0 -131
  269. package/vendor/agent-root/src/providers/adapters/kimi.ts +0 -48
  270. package/vendor/agent-root/src/providers/adapters/responses.ts +0 -732
  271. package/vendor/agent-root/src/providers/adapters/standard.ts +0 -120
  272. package/vendor/agent-root/src/providers/http/__tests__/client.timeout.test.ts +0 -313
  273. package/vendor/agent-root/src/providers/http/client.ts +0 -289
  274. package/vendor/agent-root/src/providers/http/stream-parser.ts +0 -109
  275. package/vendor/agent-root/src/providers/index.ts +0 -76
  276. package/vendor/agent-root/src/providers/kimi-headers.ts +0 -177
  277. package/vendor/agent-root/src/providers/openai-compatible.ts +0 -387
  278. package/vendor/agent-root/src/providers/registry/model-config.ts +0 -477
  279. package/vendor/agent-root/src/providers/registry/provider-factory.ts +0 -127
  280. package/vendor/agent-root/src/providers/registry.ts +0 -135
  281. package/vendor/agent-root/src/providers/types/api.ts +0 -284
  282. package/vendor/agent-root/src/providers/types/config.ts +0 -58
  283. package/vendor/agent-root/src/providers/types/errors.ts +0 -323
  284. package/vendor/agent-root/src/providers/types/index.ts +0 -72
  285. package/vendor/agent-root/src/providers/types/provider.ts +0 -45
  286. package/vendor/agent-root/src/providers/types/registry.ts +0 -68
@@ -1,196 +0,0 @@
1
- /* global NodeJS */
2
-
3
- export type RgbColor = {
4
- r: number;
5
- g: number;
6
- b: number;
7
- };
8
-
9
- export type TerminalBackgroundMode = 'dark' | 'light';
10
- export type TerminalBackgroundProbe = {
11
- mode: TerminalBackgroundMode;
12
- rawColor: string | null;
13
- };
14
- export type TerminalColorProbe = {
15
- rawBackgroundColor: string | null;
16
- rawForegroundColor: string | null;
17
- mode: TerminalBackgroundMode;
18
- };
19
-
20
- // eslint-disable-next-line no-control-regex
21
- const OSC10_PATTERN = /\x1b]10;([^\x07\x1b]+)/;
22
- // eslint-disable-next-line no-control-regex
23
- const OSC11_PATTERN = /\x1b]11;([^\x07\x1b]+)/;
24
-
25
- const wrapOscForTmux = (osc: string) => {
26
- if (!process.env['TMUX']) {
27
- return osc;
28
- }
29
-
30
- return `\x1bPtmux;\x1b${osc}\x1b\\`;
31
- };
32
-
33
- const writeOsc = (osc: string) => {
34
- if (!process.stdout.isTTY) {
35
- return;
36
- }
37
-
38
- try {
39
- process.stdout.write(wrapOscForTmux(osc));
40
- } catch {
41
- // Ignore errors when writing to stdout
42
- }
43
- };
44
-
45
- export const parseTerminalColor = (value: string): RgbColor | null => {
46
- if (value.startsWith('rgb:')) {
47
- const parts = value.slice(4).split('/');
48
- if (parts.length !== 3 || !parts[0] || !parts[1] || !parts[2]) {
49
- return null;
50
- }
51
-
52
- const [rHex, gHex, bHex] = parts;
53
- const r16 = Number.parseInt(rHex, 16);
54
- const g16 = Number.parseInt(gHex, 16);
55
- const b16 = Number.parseInt(bHex, 16);
56
- if (Number.isNaN(r16) || Number.isNaN(g16) || Number.isNaN(b16)) {
57
- return null;
58
- }
59
-
60
- return {
61
- r: r16 >> 8,
62
- g: g16 >> 8,
63
- b: b16 >> 8,
64
- };
65
- }
66
-
67
- if (/^#[0-9a-fA-F]{6}$/.test(value)) {
68
- return {
69
- r: Number.parseInt(value.slice(1, 3), 16),
70
- g: Number.parseInt(value.slice(3, 5), 16),
71
- b: Number.parseInt(value.slice(5, 7), 16),
72
- };
73
- }
74
-
75
- const rgbMatch = value.match(/^rgb\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*\)$/);
76
- if (rgbMatch && rgbMatch[1] && rgbMatch[2] && rgbMatch[3]) {
77
- const r = Number.parseInt(rgbMatch[1], 10);
78
- const g = Number.parseInt(rgbMatch[2], 10);
79
- const b = Number.parseInt(rgbMatch[3], 10);
80
- if (r > 255 || g > 255 || b > 255) {
81
- return null;
82
- }
83
-
84
- return { r, g, b };
85
- }
86
-
87
- return null;
88
- };
89
-
90
- export const modeFromColor = ({ r, g, b }: RgbColor): TerminalBackgroundMode => {
91
- const luminance = (0.299 * r + 0.587 * g + 0.114 * b) / 255;
92
- return luminance > 0.5 ? 'light' : 'dark';
93
- };
94
-
95
- export const extractOsc10Color = (chunk: string): string | null => {
96
- const match = chunk.match(OSC10_PATTERN);
97
- return match?.[1] ?? null;
98
- };
99
-
100
- export const extractOsc11Color = (chunk: string): string | null => {
101
- const match = chunk.match(OSC11_PATTERN);
102
- return match?.[1] ?? null;
103
- };
104
-
105
- export const setTerminalWindowForeground = (color: string) => {
106
- writeOsc(`\x1b]10;${color}\x07`);
107
- };
108
-
109
- export const setTerminalWindowBackground = (color: string) => {
110
- writeOsc(`\x1b]11;${color}\x07`);
111
- };
112
-
113
- export const probeTerminalColors = async (timeoutMs = 1000): Promise<TerminalColorProbe> => {
114
- if (
115
- !process.stdin.isTTY ||
116
- !process.stdout.isTTY ||
117
- typeof process.stdin.setRawMode !== 'function'
118
- ) {
119
- return { mode: 'dark', rawBackgroundColor: null, rawForegroundColor: null };
120
- }
121
-
122
- return new Promise(resolve => {
123
- const stdin = process.stdin;
124
- const previousRawMode = Boolean(stdin.isRaw);
125
- let timer: NodeJS.Timeout | null = null;
126
- let finished = false;
127
- let rawBackgroundColor: string | null = null;
128
- let rawForegroundColor: string | null = null;
129
-
130
- const finish = () => {
131
- if (finished) {
132
- return;
133
- }
134
- finished = true;
135
-
136
- if (timer) {
137
- clearTimeout(timer);
138
- }
139
-
140
- stdin.removeListener('data', onData);
141
- try {
142
- stdin.setRawMode(previousRawMode);
143
- } catch {
144
- // Ignore errors when restoring raw mode
145
- }
146
-
147
- const color = rawBackgroundColor ? parseTerminalColor(rawBackgroundColor) : null;
148
- resolve({
149
- rawBackgroundColor,
150
- rawForegroundColor,
151
- mode: color ? modeFromColor(color) : 'dark',
152
- });
153
- };
154
-
155
- const onData = (data: Buffer) => {
156
- const chunk = data.toString();
157
- rawForegroundColor ??= extractOsc10Color(chunk);
158
- rawBackgroundColor ??= extractOsc11Color(chunk);
159
-
160
- if (rawForegroundColor && rawBackgroundColor) {
161
- finish();
162
- }
163
- };
164
-
165
- try {
166
- stdin.setRawMode(true);
167
- stdin.on('data', onData);
168
- writeOsc('\x1b]10;?\x07');
169
- writeOsc('\x1b]11;?\x07');
170
- } catch {
171
- finish();
172
- return;
173
- }
174
-
175
- timer = setTimeout(() => {
176
- finish();
177
- }, timeoutMs);
178
- });
179
- };
180
-
181
- export const probeTerminalBackground = async (
182
- timeoutMs = 1000
183
- ): Promise<TerminalBackgroundProbe> => {
184
- const result = await probeTerminalColors(timeoutMs);
185
- return {
186
- rawColor: result.rawBackgroundColor,
187
- mode: result.mode,
188
- };
189
- };
190
-
191
- export const detectTerminalBackgroundMode = async (
192
- timeoutMs = 1000
193
- ): Promise<TerminalBackgroundMode> => {
194
- const result = await probeTerminalColors(timeoutMs);
195
- return result.mode;
196
- };
package/src/types/chat.ts DELETED
@@ -1,32 +0,0 @@
1
- export type ReplySegmentType = 'thinking' | 'text' | 'code' | 'note';
2
-
3
- export type ReplySegment = {
4
- id: string;
5
- type: ReplySegmentType;
6
- content: string;
7
- data?: unknown;
8
- };
9
-
10
- export type ReplyStatus = 'streaming' | 'done' | 'error';
11
-
12
- export type AssistantReply = {
13
- segments: ReplySegment[];
14
- modelLabel: string;
15
- agentLabel: string;
16
- startedAtMs?: number;
17
- durationSeconds: number;
18
- usagePromptTokens?: number;
19
- usageCompletionTokens?: number;
20
- usageTotalTokens?: number;
21
- status: ReplyStatus;
22
- completionReason?: string;
23
- completionMessage?: string;
24
- };
25
-
26
- export type ChatTurn = {
27
- id: number;
28
- prompt: string;
29
- createdAtMs: number;
30
- files?: string[];
31
- reply?: AssistantReply;
32
- };
@@ -1,48 +0,0 @@
1
- export type TextContentPart = {
2
- type: 'text';
3
- text: string;
4
- };
5
-
6
- export type ImageUrlContentPart = {
7
- type: 'image_url';
8
- image_url: {
9
- url: string;
10
- detail?: 'auto' | 'low' | 'high';
11
- };
12
- };
13
-
14
- export type InputAudioContentPart = {
15
- type: 'input_audio';
16
- input_audio: {
17
- data: string;
18
- format: 'wav' | 'mp3';
19
- };
20
- };
21
-
22
- export type InputVideoContentPart = {
23
- type: 'input_video';
24
- input_video: {
25
- url?: string;
26
- file_id?: string;
27
- data?: string;
28
- format?: 'mp4' | 'mov' | 'webm';
29
- };
30
- };
31
-
32
- export type FileContentPart = {
33
- type: 'file';
34
- file: {
35
- file_id?: string;
36
- file_data?: string;
37
- filename?: string;
38
- };
39
- };
40
-
41
- export type InputContentPart =
42
- | TextContentPart
43
- | ImageUrlContentPart
44
- | InputAudioContentPart
45
- | InputVideoContentPart
46
- | FileContentPart;
47
-
48
- export type MessageContent = string | InputContentPart[];
@@ -1,176 +0,0 @@
1
- import { RGBA } from '@opentui/core';
2
-
3
- export type OpenCodeThemeMode = 'dark' | 'light';
4
- export type MarkdownThemePlatform = NodeJS.Platform;
5
-
6
- export type OpenCodeTheme = {
7
- primary: RGBA;
8
- secondary: RGBA;
9
- accent: RGBA;
10
- error: RGBA;
11
- warning: RGBA;
12
- success: RGBA;
13
- info: RGBA;
14
- text: RGBA;
15
- textMuted: RGBA;
16
- background: RGBA;
17
- backgroundPanel: RGBA;
18
- backgroundElement: RGBA;
19
- border: RGBA;
20
- borderActive: RGBA;
21
- borderSubtle: RGBA;
22
- diffAdded: RGBA;
23
- diffRemoved: RGBA;
24
- diffContext: RGBA;
25
- diffHunkHeader: RGBA;
26
- diffHighlightAdded: RGBA;
27
- diffHighlightRemoved: RGBA;
28
- diffAddedBg: RGBA;
29
- diffRemovedBg: RGBA;
30
- diffContextBg: RGBA;
31
- diffLineNumber: RGBA;
32
- diffAddedLineNumberBg: RGBA;
33
- diffRemovedLineNumberBg: RGBA;
34
- markdownText: RGBA;
35
- markdownHeading: RGBA;
36
- markdownLink: RGBA;
37
- markdownLinkText: RGBA;
38
- markdownCode: RGBA;
39
- markdownBlockQuote: RGBA;
40
- markdownEmph: RGBA;
41
- markdownStrong: RGBA;
42
- markdownHorizontalRule: RGBA;
43
- markdownListItem: RGBA;
44
- markdownListEnumeration: RGBA;
45
- markdownImage: RGBA;
46
- markdownImageText: RGBA;
47
- markdownCodeBlock: RGBA;
48
- syntaxComment: RGBA;
49
- syntaxKeyword: RGBA;
50
- syntaxFunction: RGBA;
51
- syntaxVariable: RGBA;
52
- syntaxString: RGBA;
53
- syntaxNumber: RGBA;
54
- syntaxType: RGBA;
55
- syntaxOperator: RGBA;
56
- syntaxPunctuation: RGBA;
57
- thinkingOpacity: number;
58
- };
59
-
60
- const color = (hex: string) => RGBA.fromHex(hex);
61
-
62
- const OPEN_CODE_DARK_THEME: OpenCodeTheme = {
63
- primary: color('#8e51ff'),
64
- secondary: color('#27272a'),
65
- accent: color('#8e51ff'),
66
- error: color('#ff6467'),
67
- warning: color('#c4b4ff'),
68
- success: color('#c4b4ff'),
69
- info: color('#a684ff'),
70
- text: color('#fafafa'),
71
- textMuted: color('#9f9fa9'),
72
- background: color('#09090b'),
73
- backgroundPanel: color('#18181b'),
74
- backgroundElement: color('#27272a'),
75
- border: color('#ffffff1a'),
76
- borderActive: color('#4d179a'),
77
- borderSubtle: color('#ffffff1a'),
78
- diffAdded: color('#8e51ff'),
79
- diffRemoved: color('#ff6467'),
80
- diffContext: color('#9f9fa9'),
81
- diffHunkHeader: color('#a684ff'),
82
- diffHighlightAdded: color('#c4b4ff'),
83
- diffHighlightRemoved: color('#ff8d8f'),
84
- diffAddedBg: color('#8e51ff1f'),
85
- diffRemovedBg: color('#ff646724'),
86
- diffContextBg: color('#27272a'),
87
- diffLineNumber: color('#9f9fa9'),
88
- diffAddedLineNumberBg: color('#4d179a66'),
89
- diffRemovedLineNumberBg: color('#ff646740'),
90
- markdownText: color('#fafafa'),
91
- markdownHeading: color('#c4b4ff'),
92
- markdownLink: color('#8e51ff'),
93
- markdownLinkText: color('#a684ff'),
94
- markdownCode: color('#c4b4ff'),
95
- markdownBlockQuote: color('#a684ff'),
96
- markdownEmph: color('#c4b4ff'),
97
- markdownStrong: color('#f5f3ff'),
98
- markdownHorizontalRule: color('#9f9fa9'),
99
- markdownListItem: color('#c4b4ff'),
100
- markdownListEnumeration: color('#a684ff'),
101
- markdownImage: color('#8e51ff'),
102
- markdownImageText: color('#a684ff'),
103
- markdownCodeBlock: color('#fafafa'),
104
- syntaxComment: color('#9f9fa9'),
105
- syntaxKeyword: color('#8e51ff'),
106
- syntaxFunction: color('#c4b4ff'),
107
- syntaxVariable: color('#f5f3ff'),
108
- syntaxString: color('#c4b4ff'),
109
- syntaxNumber: color('#a684ff'),
110
- syntaxType: color('#8e51ff'),
111
- syntaxOperator: color('#7008e7'),
112
- syntaxPunctuation: color('#fafafa'),
113
- thinkingOpacity: 0.74,
114
- };
115
-
116
- const OPEN_CODE_LIGHT_THEME: OpenCodeTheme = {
117
- primary: color('#7f22fe'),
118
- secondary: color('#f4f4f5'),
119
- accent: color('#7f22fe'),
120
- error: color('#e7000b'),
121
- warning: color('#8e51ff'),
122
- success: color('#8e51ff'),
123
- info: color('#a684ff'),
124
- text: color('#09090b'),
125
- textMuted: color('#71717b'),
126
- background: color('#ffffff'),
127
- backgroundPanel: color('#ffffff'),
128
- backgroundElement: color('#f4f4f5'),
129
- border: color('#e4e4e7'),
130
- borderActive: color('#a684ff'),
131
- borderSubtle: color('#e4e4e7'),
132
- diffAdded: color('#7f22fe'),
133
- diffRemoved: color('#e7000b'),
134
- diffContext: color('#71717b'),
135
- diffHunkHeader: color('#a684ff'),
136
- diffHighlightAdded: color('#5d0ec0'),
137
- diffHighlightRemoved: color('#e7000b'),
138
- diffAddedBg: color('#f5f3ff'),
139
- diffRemovedBg: color('#e7000b14'),
140
- diffContextBg: color('#f4f4f5'),
141
- diffLineNumber: color('#71717b'),
142
- diffAddedLineNumberBg: color('#c4b4ff80'),
143
- diffRemovedLineNumberBg: color('#e7000b26'),
144
- markdownText: color('#09090b'),
145
- markdownHeading: color('#7f22fe'),
146
- markdownLink: color('#7f22fe'),
147
- markdownLinkText: color('#8e51ff'),
148
- markdownCode: color('#5d0ec0'),
149
- markdownBlockQuote: color('#8e51ff'),
150
- markdownEmph: color('#7008e7'),
151
- markdownStrong: color('#18181b'),
152
- markdownHorizontalRule: color('#71717b'),
153
- markdownListItem: color('#7f22fe'),
154
- markdownListEnumeration: color('#8e51ff'),
155
- markdownImage: color('#7f22fe'),
156
- markdownImageText: color('#8e51ff'),
157
- markdownCodeBlock: color('#09090b'),
158
- syntaxComment: color('#71717b'),
159
- syntaxKeyword: color('#7f22fe'),
160
- syntaxFunction: color('#5d0ec0'),
161
- syntaxVariable: color('#18181b'),
162
- syntaxString: color('#8e51ff'),
163
- syntaxNumber: color('#7008e7'),
164
- syntaxType: color('#7f22fe'),
165
- syntaxOperator: color('#7008e7'),
166
- syntaxPunctuation: color('#09090b'),
167
- thinkingOpacity: 0.9,
168
- };
169
-
170
- export const resolveOpenCodeTheme = (
171
- mode: OpenCodeThemeMode,
172
- platform: MarkdownThemePlatform
173
- ): OpenCodeTheme => {
174
- void platform;
175
- return mode === 'light' ? OPEN_CODE_LIGHT_THEME : OPEN_CODE_DARK_THEME;
176
- };
@@ -1,211 +0,0 @@
1
- import { RGBA, SyntaxStyle } from '@opentui/core';
2
- import {
3
- resolveOpenCodeTheme,
4
- type MarkdownThemePlatform,
5
- type OpenCodeTheme,
6
- } from './open-code-theme';
7
- import type { UiThemeMode } from './theme';
8
-
9
- type SyntaxRule = {
10
- scope: string[];
11
- style: {
12
- foreground?: RGBA;
13
- background?: RGBA;
14
- bold?: boolean;
15
- italic?: boolean;
16
- underline?: boolean;
17
- };
18
- };
19
-
20
- type SyntaxRenderOptions = {
21
- platform: MarkdownThemePlatform;
22
- };
23
-
24
- const getSyntaxRules = (theme: OpenCodeTheme, options: SyntaxRenderOptions): SyntaxRule[] => {
25
- const useItalic = options.platform !== 'darwin';
26
- const useUnderline = options.platform !== 'darwin';
27
-
28
- return [
29
- { scope: ['default'], style: { foreground: theme.text } },
30
- { scope: ['prompt'], style: { foreground: theme.accent } },
31
- { scope: ['extmark.file'], style: { foreground: theme.warning, bold: true } },
32
- { scope: ['extmark.agent'], style: { foreground: theme.secondary, bold: true } },
33
- {
34
- scope: ['extmark.paste'],
35
- style: { foreground: theme.background, background: theme.warning, bold: true },
36
- },
37
- { scope: ['comment'], style: { foreground: theme.syntaxComment, italic: useItalic } },
38
- {
39
- scope: ['comment.documentation'],
40
- style: { foreground: theme.syntaxComment, italic: useItalic },
41
- },
42
- { scope: ['string', 'symbol'], style: { foreground: theme.syntaxString } },
43
- { scope: ['number', 'boolean'], style: { foreground: theme.syntaxNumber } },
44
- { scope: ['character.special'], style: { foreground: theme.syntaxString } },
45
- {
46
- scope: ['keyword.return', 'keyword.conditional', 'keyword.repeat', 'keyword.coroutine'],
47
- style: { foreground: theme.syntaxKeyword, italic: useItalic },
48
- },
49
- {
50
- scope: ['keyword.type'],
51
- style: { foreground: theme.syntaxType, bold: true, italic: useItalic },
52
- },
53
- { scope: ['keyword.function', 'function.method'], style: { foreground: theme.syntaxFunction } },
54
- { scope: ['keyword'], style: { foreground: theme.syntaxKeyword, italic: useItalic } },
55
- { scope: ['keyword.import'], style: { foreground: theme.syntaxKeyword } },
56
- {
57
- scope: ['operator', 'keyword.operator', 'punctuation.delimiter'],
58
- style: { foreground: theme.syntaxOperator },
59
- },
60
- { scope: ['keyword.conditional.ternary'], style: { foreground: theme.syntaxOperator } },
61
- {
62
- scope: ['variable', 'variable.parameter', 'function.method.call', 'function.call'],
63
- style: { foreground: theme.syntaxVariable },
64
- },
65
- {
66
- scope: ['variable.member', 'function', 'constructor'],
67
- style: { foreground: theme.syntaxFunction },
68
- },
69
- { scope: ['type', 'module'], style: { foreground: theme.syntaxType } },
70
- { scope: ['constant'], style: { foreground: theme.syntaxNumber } },
71
- { scope: ['property'], style: { foreground: theme.syntaxVariable } },
72
- { scope: ['class'], style: { foreground: theme.syntaxType } },
73
- { scope: ['parameter'], style: { foreground: theme.syntaxVariable } },
74
- {
75
- scope: ['punctuation', 'punctuation.bracket'],
76
- style: { foreground: theme.syntaxPunctuation },
77
- },
78
- {
79
- scope: [
80
- 'variable.builtin',
81
- 'type.builtin',
82
- 'function.builtin',
83
- 'module.builtin',
84
- 'constant.builtin',
85
- ],
86
- style: { foreground: theme.error },
87
- },
88
- { scope: ['variable.super'], style: { foreground: theme.error } },
89
- { scope: ['string.escape', 'string.regexp'], style: { foreground: theme.syntaxKeyword } },
90
- { scope: ['keyword.directive'], style: { foreground: theme.syntaxKeyword, italic: useItalic } },
91
- { scope: ['punctuation.special'], style: { foreground: theme.syntaxOperator } },
92
- { scope: ['keyword.modifier'], style: { foreground: theme.syntaxKeyword, italic: useItalic } },
93
- { scope: ['keyword.exception'], style: { foreground: theme.syntaxKeyword, italic: useItalic } },
94
- { scope: ['markup.heading'], style: { foreground: theme.markdownHeading, bold: true } },
95
- { scope: ['markup.heading.1'], style: { foreground: theme.markdownHeading, bold: true } },
96
- { scope: ['markup.heading.2'], style: { foreground: theme.markdownHeading, bold: true } },
97
- { scope: ['markup.heading.3'], style: { foreground: theme.markdownHeading, bold: true } },
98
- { scope: ['markup.heading.4'], style: { foreground: theme.markdownHeading, bold: true } },
99
- { scope: ['markup.heading.5'], style: { foreground: theme.markdownHeading, bold: true } },
100
- { scope: ['markup.heading.6'], style: { foreground: theme.markdownHeading, bold: true } },
101
- {
102
- scope: ['markup.bold', 'markup.strong'],
103
- style: { foreground: theme.markdownStrong, bold: true },
104
- },
105
- { scope: ['markup.italic'], style: { foreground: theme.markdownEmph, italic: useItalic } },
106
- { scope: ['markup.list'], style: { foreground: theme.markdownListItem } },
107
- { scope: ['markup.quote'], style: { foreground: theme.markdownBlockQuote, italic: useItalic } },
108
- { scope: ['markup.raw', 'markup.raw.block'], style: { foreground: theme.markdownCode } },
109
- {
110
- scope: ['markup.raw.inline'],
111
- style: { foreground: theme.markdownCode, background: theme.background },
112
- },
113
- { scope: ['markup.link'], style: { foreground: theme.markdownLink, underline: useUnderline } },
114
- {
115
- scope: ['markup.link.label'],
116
- style: { foreground: theme.markdownLinkText, underline: useUnderline },
117
- },
118
- {
119
- scope: ['markup.link.url'],
120
- style: { foreground: theme.markdownLink, underline: useUnderline },
121
- },
122
- { scope: ['label'], style: { foreground: theme.markdownLinkText } },
123
- { scope: ['spell', 'nospell'], style: { foreground: theme.text } },
124
- { scope: ['conceal'], style: { foreground: theme.textMuted } },
125
- {
126
- scope: ['string.special', 'string.special.url'],
127
- style: { foreground: theme.markdownLink, underline: useUnderline },
128
- },
129
- { scope: ['character'], style: { foreground: theme.syntaxString } },
130
- { scope: ['float'], style: { foreground: theme.syntaxNumber } },
131
- { scope: ['comment.error'], style: { foreground: theme.error, italic: useItalic, bold: true } },
132
- {
133
- scope: ['comment.warning'],
134
- style: { foreground: theme.warning, italic: useItalic, bold: true },
135
- },
136
- {
137
- scope: ['comment.todo', 'comment.note'],
138
- style: { foreground: theme.info, italic: useItalic, bold: true },
139
- },
140
- { scope: ['namespace'], style: { foreground: theme.syntaxType } },
141
- { scope: ['field'], style: { foreground: theme.syntaxVariable } },
142
- { scope: ['type.definition'], style: { foreground: theme.syntaxType, bold: true } },
143
- { scope: ['keyword.export'], style: { foreground: theme.syntaxKeyword } },
144
- { scope: ['attribute', 'annotation'], style: { foreground: theme.warning } },
145
- { scope: ['tag'], style: { foreground: theme.error } },
146
- { scope: ['tag.attribute'], style: { foreground: theme.syntaxKeyword } },
147
- { scope: ['tag.delimiter'], style: { foreground: theme.syntaxOperator } },
148
- { scope: ['markup.strikethrough'], style: { foreground: theme.textMuted } },
149
- { scope: ['markup.underline'], style: { foreground: theme.text, underline: useUnderline } },
150
- { scope: ['markup.list.checked'], style: { foreground: theme.success } },
151
- { scope: ['markup.list.unchecked'], style: { foreground: theme.textMuted } },
152
- { scope: ['diff.plus'], style: { foreground: theme.diffAdded, background: theme.diffAddedBg } },
153
- {
154
- scope: ['diff.minus'],
155
- style: { foreground: theme.diffRemoved, background: theme.diffRemovedBg },
156
- },
157
- {
158
- scope: ['diff.delta'],
159
- style: { foreground: theme.diffContext, background: theme.diffContextBg },
160
- },
161
- { scope: ['error'], style: { foreground: theme.error, bold: true } },
162
- { scope: ['warning'], style: { foreground: theme.warning, bold: true } },
163
- { scope: ['info'], style: { foreground: theme.info } },
164
- { scope: ['debug'], style: { foreground: theme.textMuted } },
165
- ];
166
- };
167
-
168
- const applyAlpha = (fg: RGBA, alpha: number) => {
169
- return RGBA.fromInts(
170
- Math.round(fg.r * 255),
171
- Math.round(fg.g * 255),
172
- Math.round(fg.b * 255),
173
- Math.round(alpha * 255)
174
- );
175
- };
176
-
177
- const createMarkdownSyntax = (theme: OpenCodeTheme, platform: MarkdownThemePlatform) =>
178
- SyntaxStyle.fromTheme(getSyntaxRules(theme, { platform }));
179
-
180
- const createSubtleMarkdownSyntax = (theme: OpenCodeTheme, platform: MarkdownThemePlatform) =>
181
- SyntaxStyle.fromTheme(
182
- getSyntaxRules(theme, { platform }).map(rule => {
183
- if (!rule.style.foreground) {
184
- return rule;
185
- }
186
- return {
187
- ...rule,
188
- style: {
189
- ...rule.style,
190
- foreground: applyAlpha(rule.style.foreground, theme.thinkingOpacity),
191
- },
192
- };
193
- })
194
- );
195
-
196
- const defaultMarkdownTheme = resolveOpenCodeTheme('dark', process.platform);
197
-
198
- export let opencodeMarkdownSyntax = createMarkdownSyntax(defaultMarkdownTheme, process.platform);
199
- export let opencodeSubtleMarkdownSyntax = createSubtleMarkdownSyntax(
200
- defaultMarkdownTheme,
201
- process.platform
202
- );
203
-
204
- export const applyMarkdownThemeMode = (
205
- mode: UiThemeMode,
206
- platform: MarkdownThemePlatform = process.platform
207
- ) => {
208
- const theme = resolveOpenCodeTheme(mode, platform);
209
- opencodeMarkdownSyntax = createMarkdownSyntax(theme, platform);
210
- opencodeSubtleMarkdownSyntax = createSubtleMarkdownSyntax(theme, platform);
211
- };