vtx-coding-agent 0.1.1__py3-none-any.whl

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 (117) hide show
  1. vtx/__init__.py +63 -0
  2. vtx/async_utils.py +40 -0
  3. vtx/builtin_skills/github/SKILL.md +139 -0
  4. vtx/builtin_skills/init/SKILL.md +74 -0
  5. vtx/builtin_skills/review/SKILL.md +73 -0
  6. vtx/builtin_skills/skill-builder/SKILL.md +133 -0
  7. vtx/cli.py +90 -0
  8. vtx/config.py +741 -0
  9. vtx/context/__init__.py +15 -0
  10. vtx/context/_xml.py +8 -0
  11. vtx/context/agent_mds.py +128 -0
  12. vtx/context/git.py +64 -0
  13. vtx/context/loader.py +41 -0
  14. vtx/context/skills.py +423 -0
  15. vtx/core/__init__.py +47 -0
  16. vtx/core/compaction.py +89 -0
  17. vtx/core/errors.py +17 -0
  18. vtx/core/handoff.py +51 -0
  19. vtx/core/scratchpad.py +54 -0
  20. vtx/core/types.py +197 -0
  21. vtx/defaults/__init__.py +0 -0
  22. vtx/defaults/config.yml +53 -0
  23. vtx/diff_display.py +12 -0
  24. vtx/events.py +224 -0
  25. vtx/gh_cli.py +82 -0
  26. vtx/git_branch.py +90 -0
  27. vtx/headless.py +127 -0
  28. vtx/llm/__init__.py +93 -0
  29. vtx/llm/base.py +217 -0
  30. vtx/llm/context_length.py +150 -0
  31. vtx/llm/dynamic_models.py +735 -0
  32. vtx/llm/model_fetcher.py +279 -0
  33. vtx/llm/models.py +78 -0
  34. vtx/llm/oauth/__init__.py +59 -0
  35. vtx/llm/oauth/copilot.py +358 -0
  36. vtx/llm/oauth/dynamic.py +236 -0
  37. vtx/llm/oauth/openai.py +400 -0
  38. vtx/llm/phase_parser.py +270 -0
  39. vtx/llm/provider.yaml +280 -0
  40. vtx/llm/provider_catalog.py +230 -0
  41. vtx/llm/providers/__init__.py +45 -0
  42. vtx/llm/providers/anthropic_sdk.py +256 -0
  43. vtx/llm/providers/mock.py +249 -0
  44. vtx/llm/providers/openai_sdk.py +246 -0
  45. vtx/llm/providers/sanitize.py +14 -0
  46. vtx/llm/sdk/__init__.py +13 -0
  47. vtx/llm/sdk/anthropic.py +382 -0
  48. vtx/llm/sdk/base.py +82 -0
  49. vtx/llm/sdk/openai.py +344 -0
  50. vtx/llm/tool_parser.py +161 -0
  51. vtx/loop.py +272 -0
  52. vtx/notify.py +109 -0
  53. vtx/permissions.py +114 -0
  54. vtx/prompts/__init__.py +45 -0
  55. vtx/prompts/builder.py +86 -0
  56. vtx/prompts/env.py +58 -0
  57. vtx/prompts/identity.py +166 -0
  58. vtx/prompts/tooling.py +36 -0
  59. vtx/py.typed +0 -0
  60. vtx/runtime.py +580 -0
  61. vtx/session.py +868 -0
  62. vtx/sounds/completion.wav +0 -0
  63. vtx/sounds/error.wav +0 -0
  64. vtx/sounds/permission.wav +0 -0
  65. vtx/themes.py +1104 -0
  66. vtx/tools/__init__.py +68 -0
  67. vtx/tools/_read_image.py +106 -0
  68. vtx/tools/_tool_utils.py +90 -0
  69. vtx/tools/base.py +36 -0
  70. vtx/tools/bash.py +371 -0
  71. vtx/tools/edit.py +261 -0
  72. vtx/tools/find.py +132 -0
  73. vtx/tools/read.py +238 -0
  74. vtx/tools/skill.py +278 -0
  75. vtx/tools/web.py +238 -0
  76. vtx/tools/write.py +88 -0
  77. vtx/tools_manager.py +216 -0
  78. vtx/turn.py +789 -0
  79. vtx/ui/__init__.py +0 -0
  80. vtx/ui/agent_runner.py +417 -0
  81. vtx/ui/app.py +665 -0
  82. vtx/ui/app_protocol.py +29 -0
  83. vtx/ui/autocomplete.py +440 -0
  84. vtx/ui/blocks.py +735 -0
  85. vtx/ui/chat.py +613 -0
  86. vtx/ui/clipboard.py +59 -0
  87. vtx/ui/commands/__init__.py +100 -0
  88. vtx/ui/commands/auth.py +306 -0
  89. vtx/ui/commands/base.py +122 -0
  90. vtx/ui/commands/models.py +144 -0
  91. vtx/ui/commands/sessions.py +388 -0
  92. vtx/ui/commands/settings.py +286 -0
  93. vtx/ui/completion_ui.py +313 -0
  94. vtx/ui/export.py +703 -0
  95. vtx/ui/floating_list.py +370 -0
  96. vtx/ui/formatting.py +287 -0
  97. vtx/ui/input.py +760 -0
  98. vtx/ui/latex.py +349 -0
  99. vtx/ui/launch.py +108 -0
  100. vtx/ui/path_complete.py +228 -0
  101. vtx/ui/prompt_history.py +102 -0
  102. vtx/ui/queue_ui.py +141 -0
  103. vtx/ui/selection_mode.py +18 -0
  104. vtx/ui/session_ui.py +235 -0
  105. vtx/ui/startup.py +124 -0
  106. vtx/ui/styles.py +327 -0
  107. vtx/ui/tool_output.py +34 -0
  108. vtx/ui/tree.py +437 -0
  109. vtx/ui/welcome.py +51 -0
  110. vtx/ui/widgets.py +558 -0
  111. vtx/update_check.py +49 -0
  112. vtx/version.py +22 -0
  113. vtx_coding_agent-0.1.1.dist-info/METADATA +259 -0
  114. vtx_coding_agent-0.1.1.dist-info/RECORD +117 -0
  115. vtx_coding_agent-0.1.1.dist-info/WHEEL +4 -0
  116. vtx_coding_agent-0.1.1.dist-info/entry_points.txt +2 -0
  117. vtx_coding_agent-0.1.1.dist-info/licenses/LICENSE +201 -0
vtx/themes.py ADDED
@@ -0,0 +1,1104 @@
1
+ from __future__ import annotations
2
+
3
+ from pydantic import BaseModel, model_validator
4
+
5
+
6
+ class ToolBgConfig(BaseModel):
7
+ pending: str
8
+ success: str
9
+ error: str
10
+
11
+
12
+ class BadgeColorConfig(BaseModel):
13
+ bg: str
14
+ label: str
15
+
16
+
17
+ class SyntaxColorConfig(BaseModel):
18
+ command: str
19
+ arg: str
20
+ option: str
21
+ operator: str
22
+ string: str
23
+ variable: str
24
+
25
+
26
+ class ColorsConfig(BaseModel):
27
+ dim: str
28
+ muted: str
29
+ title: str
30
+ spinner: str
31
+ accent: str
32
+ info: str
33
+ markdown_heading: str
34
+ markdown_code: str
35
+ selected: str
36
+ error: str
37
+ notice: str
38
+ diff_added: str
39
+ diff_removed: str
40
+ tool_bg: ToolBgConfig
41
+ badge: BadgeColorConfig
42
+ running: str
43
+ success: str
44
+ failed: str
45
+ bg: str
46
+ fg: str
47
+ panel: str
48
+ panel_alt: str
49
+ panel_user: str
50
+ editor: str
51
+ border: str
52
+ syntax: SyntaxColorConfig | None = None
53
+
54
+ @property
55
+ def syntax_colors(self) -> SyntaxColorConfig:
56
+ if self.syntax is not None:
57
+ return self.syntax
58
+ return SyntaxColorConfig(
59
+ command=self.title,
60
+ arg=self.fg,
61
+ option=self.accent,
62
+ operator=self.notice,
63
+ string=self.selected,
64
+ variable=self.markdown_code,
65
+ )
66
+
67
+ @model_validator(mode="after")
68
+ def _default_syntax_colors(self) -> ColorsConfig:
69
+ if self.syntax is None:
70
+ self.syntax = self.syntax_colors
71
+ return self
72
+
73
+
74
+ class ThemeConfig(BaseModel):
75
+ id: str
76
+ label: str
77
+ colors: ColorsConfig
78
+
79
+
80
+ _THEMES: dict[str, ThemeConfig] = {
81
+ "gruvbox-dark": ThemeConfig(
82
+ id="gruvbox-dark",
83
+ label="Gruvbox Dark",
84
+ colors=ColorsConfig(
85
+ bg="#282828",
86
+ fg="#ebdbb2",
87
+ dim="#857e6a",
88
+ muted="#a89984",
89
+ title="#fabd2f",
90
+ spinner="#83a598",
91
+ accent="#83a598",
92
+ info="#fabd2f",
93
+ markdown_heading="#fabd2f",
94
+ markdown_code="#689d6a",
95
+ selected="#689d6a",
96
+ error="#fb4934",
97
+ notice="#fe8019",
98
+ diff_added="#b8bb26",
99
+ diff_removed="#fb4934",
100
+ tool_bg=ToolBgConfig(pending="#32302f", success="#3c3836", error="#3c2f2f"),
101
+ badge=BadgeColorConfig(bg="#3c3836", label="#d3869b"),
102
+ running="#458588",
103
+ success="#98971a",
104
+ failed="#cc241d",
105
+ panel="#3c3836",
106
+ panel_alt="#32302f",
107
+ panel_user="#504945",
108
+ editor="#414141",
109
+ border="#504945",
110
+ ),
111
+ ),
112
+ "gruvbox-light": ThemeConfig(
113
+ id="gruvbox-light",
114
+ label="Gruvbox Light",
115
+ colors=ColorsConfig(
116
+ bg="#fbf1c7",
117
+ fg="#3c3836",
118
+ dim="#a89984",
119
+ muted="#7c6f64",
120
+ title="#b57614",
121
+ spinner="#076678",
122
+ accent="#076678",
123
+ info="#b57614",
124
+ markdown_heading="#b57614",
125
+ markdown_code="#427b58",
126
+ selected="#427b58",
127
+ error="#9d0006",
128
+ notice="#af3a03",
129
+ diff_added="#79740e",
130
+ diff_removed="#9d0006",
131
+ tool_bg=ToolBgConfig(pending="#f2e5bc", success="#ebdbb2", error="#f3d9d4"),
132
+ badge=BadgeColorConfig(bg="#ebdbb2", label="#b16286"),
133
+ running="#458588",
134
+ success="#79740e",
135
+ failed="#9d0006",
136
+ panel="#ebdbb2",
137
+ panel_alt="#f2e5bc",
138
+ panel_user="#d5c4a1",
139
+ editor="#f0e7bf",
140
+ border="#d5c4a1",
141
+ ),
142
+ ),
143
+ "catppuccin-mocha": ThemeConfig(
144
+ id="catppuccin-mocha",
145
+ label="Catppuccin Mocha",
146
+ colors=ColorsConfig(
147
+ bg="#1e1e2e",
148
+ fg="#cdd6f4",
149
+ dim="#6c7086",
150
+ muted="#a6adc8",
151
+ title="#f5e0dc",
152
+ spinner="#89b4fa",
153
+ accent="#89b4fa",
154
+ info="#f9e2af",
155
+ markdown_heading="#f9e2af",
156
+ markdown_code="#94e2d5",
157
+ selected="#94e2d5",
158
+ error="#f38ba8",
159
+ notice="#fab387",
160
+ diff_added="#a6e3a1",
161
+ diff_removed="#f38ba8",
162
+ tool_bg=ToolBgConfig(pending="#313244", success="#2b3a33", error="#3d2f38"),
163
+ badge=BadgeColorConfig(bg="#313244", label="#cba6f7"),
164
+ running="#89b4fa",
165
+ success="#a6e3a1",
166
+ failed="#f38ba8",
167
+ panel="#313244",
168
+ panel_alt="#45475a",
169
+ panel_user="#3b3f57",
170
+ editor="#393947",
171
+ border="#45475a",
172
+ ),
173
+ ),
174
+ "catppuccin-latte": ThemeConfig(
175
+ id="catppuccin-latte",
176
+ label="Catppuccin Latte",
177
+ colors=ColorsConfig(
178
+ bg="#eff1f5",
179
+ fg="#4c4f69",
180
+ dim="#9ca0b0",
181
+ muted="#7c7f93",
182
+ title="#dc8a78",
183
+ spinner="#1e66f5",
184
+ accent="#1e66f5",
185
+ info="#df8e1d",
186
+ markdown_heading="#df8e1d",
187
+ markdown_code="#179299",
188
+ selected="#179299",
189
+ error="#d20f39",
190
+ notice="#fe640b",
191
+ diff_added="#40a02b",
192
+ diff_removed="#d20f39",
193
+ tool_bg=ToolBgConfig(pending="#e6e9ef", success="#dfe8dc", error="#f2d8dd"),
194
+ badge=BadgeColorConfig(bg="#e6e9ef", label="#8839ef"),
195
+ running="#1e66f5",
196
+ success="#40a02b",
197
+ failed="#d20f39",
198
+ panel="#e6e9ef",
199
+ panel_alt="#dce0e8",
200
+ panel_user="#ccd0da",
201
+ editor="#e5e7eb",
202
+ border="#ccd0da",
203
+ ),
204
+ ),
205
+ "catppuccin-frappe": ThemeConfig(
206
+ id="catppuccin-frappe",
207
+ label="Catppuccin Frappe",
208
+ colors=ColorsConfig(
209
+ bg="#303446",
210
+ fg="#c6d0f5",
211
+ dim="#737994",
212
+ muted="#a5adce",
213
+ title="#ca9ee6",
214
+ spinner="#8da4e2",
215
+ accent="#f4b8e4",
216
+ info="#81c8be",
217
+ markdown_heading="#ca9ee6",
218
+ markdown_code="#a6d189",
219
+ selected="#a6d189",
220
+ error="#e78284",
221
+ notice="#e5c890",
222
+ diff_added="#a6d189",
223
+ diff_removed="#e78284",
224
+ tool_bg=ToolBgConfig(pending="#232634", success="#29342b", error="#3a2a31"),
225
+ badge=BadgeColorConfig(bg="#232634", label="#ca9ee6"),
226
+ running="#8da4e2",
227
+ success="#a6d189",
228
+ failed="#e78284",
229
+ panel="#292c3c",
230
+ panel_alt="#232634",
231
+ panel_user="#626880",
232
+ editor="#484c5c",
233
+ border="#414559",
234
+ ),
235
+ ),
236
+ "catppuccin-macchiato": ThemeConfig(
237
+ id="catppuccin-macchiato",
238
+ label="Catppuccin Macchiato",
239
+ colors=ColorsConfig(
240
+ bg="#24273a",
241
+ fg="#cad3f5",
242
+ dim="#6e738d",
243
+ muted="#a5adcb",
244
+ title="#c6a0f6",
245
+ spinner="#8aadf4",
246
+ accent="#f5bde6",
247
+ info="#8bd5ca",
248
+ markdown_heading="#c6a0f6",
249
+ markdown_code="#a6da95",
250
+ selected="#a6da95",
251
+ error="#ed8796",
252
+ notice="#eed49f",
253
+ diff_added="#a6da95",
254
+ diff_removed="#ed8796",
255
+ tool_bg=ToolBgConfig(pending="#181926", success="#29342b", error="#3a2a31"),
256
+ badge=BadgeColorConfig(bg="#181926", label="#c6a0f6"),
257
+ running="#8aadf4",
258
+ success="#a6da95",
259
+ failed="#ed8796",
260
+ panel="#1e2030",
261
+ panel_alt="#181926",
262
+ panel_user="#5b6078",
263
+ editor="#3e4051",
264
+ border="#363a4f",
265
+ ),
266
+ ),
267
+ "dracula": ThemeConfig(
268
+ id="dracula",
269
+ label="Dracula",
270
+ colors=ColorsConfig(
271
+ bg="#282a36",
272
+ fg="#f8f8f2",
273
+ dim="#6272a4",
274
+ muted="#bd93f9",
275
+ title="#ff79c6",
276
+ spinner="#8be9fd",
277
+ accent="#8be9fd",
278
+ info="#f1fa8c",
279
+ markdown_heading="#ff79c6",
280
+ markdown_code="#50fa7b",
281
+ selected="#50fa7b",
282
+ error="#ff5555",
283
+ notice="#ffb86c",
284
+ diff_added="#50fa7b",
285
+ diff_removed="#ff5555",
286
+ tool_bg=ToolBgConfig(pending="#343746", success="#2f3b35", error="#43303a"),
287
+ badge=BadgeColorConfig(bg="#343746", label="#bd93f9"),
288
+ running="#8be9fd",
289
+ success="#50fa7b",
290
+ failed="#ff5555",
291
+ panel="#343746",
292
+ panel_alt="#3a3d4d",
293
+ panel_user="#44475a",
294
+ editor="#41434e",
295
+ border="#44475a",
296
+ ),
297
+ ),
298
+ "everforest": ThemeConfig(
299
+ id="everforest",
300
+ label="Everforest",
301
+ colors=ColorsConfig(
302
+ bg="#2d353b",
303
+ fg="#d3c6aa",
304
+ dim="#859289",
305
+ muted="#5c6a61",
306
+ title="#7fbbb3",
307
+ spinner="#a7c080",
308
+ accent="#d699b6",
309
+ info="#dbbc7f",
310
+ markdown_heading="#d699b6",
311
+ markdown_code="#83c092",
312
+ selected="#83c092",
313
+ error="#e67e80",
314
+ notice="#e69875",
315
+ diff_added="#4fd6be",
316
+ diff_removed="#c53b53",
317
+ tool_bg=ToolBgConfig(pending="#343f44", success="#20303b", error="#37222c"),
318
+ badge=BadgeColorConfig(bg="#343f44", label="#7fbbb3"),
319
+ running="#a7c080",
320
+ success="#a7c080",
321
+ failed="#e67e80",
322
+ panel="#333c43",
323
+ panel_alt="#343f44",
324
+ panel_user="#3a4649",
325
+ editor="#464d52",
326
+ border="#859289",
327
+ ),
328
+ ),
329
+ "flexoki": ThemeConfig(
330
+ id="flexoki",
331
+ label="Flexoki",
332
+ colors=ColorsConfig(
333
+ bg="#100F0F",
334
+ fg="#CECDC3",
335
+ dim="#575653",
336
+ muted="#6F6E69",
337
+ title="#4385BE",
338
+ spinner="#DA702C",
339
+ accent="#8B7EC8",
340
+ info="#3AA99F",
341
+ markdown_heading="#8B7EC8",
342
+ markdown_code="#3AA99F",
343
+ selected="#3AA99F",
344
+ error="#D14D41",
345
+ notice="#DA702C",
346
+ diff_added="#879A39",
347
+ diff_removed="#D14D41",
348
+ tool_bg=ToolBgConfig(pending="#282726", success="#1A2D1A", error="#2D1A1A"),
349
+ badge=BadgeColorConfig(bg="#282726", label="#4385BE"),
350
+ running="#DA702C",
351
+ success="#879A39",
352
+ failed="#D14D41",
353
+ panel="#1C1B1A",
354
+ panel_alt="#282726",
355
+ panel_user="#403E3C",
356
+ editor="#2c2b2b",
357
+ border="#575653",
358
+ ),
359
+ ),
360
+ "github-dark": ThemeConfig(
361
+ id="github-dark",
362
+ label="GitHub Dark",
363
+ colors=ColorsConfig(
364
+ bg="#0d1117",
365
+ fg="#c9d1d9",
366
+ dim="#6e7681",
367
+ muted="#8b949e",
368
+ title="#58a6ff",
369
+ spinner="#58a6ff",
370
+ accent="#58a6ff",
371
+ info="#d29922",
372
+ markdown_heading="#79c0ff",
373
+ markdown_code="#a5d6ff",
374
+ selected="#a5d6ff",
375
+ error="#f85149",
376
+ notice="#db6d28",
377
+ diff_added="#3fb950",
378
+ diff_removed="#f85149",
379
+ tool_bg=ToolBgConfig(pending="#161b22", success="#132a1b", error="#2d1f24"),
380
+ badge=BadgeColorConfig(bg="#161b22", label="#bc8cff"),
381
+ running="#58a6ff",
382
+ success="#3fb950",
383
+ failed="#f85149",
384
+ panel="#161b22",
385
+ panel_alt="#1f2630",
386
+ panel_user="#21262d",
387
+ editor="#2a2d32",
388
+ border="#30363d",
389
+ ),
390
+ ),
391
+ "github-light": ThemeConfig(
392
+ id="github-light",
393
+ label="GitHub Light",
394
+ colors=ColorsConfig(
395
+ bg="#ffffff",
396
+ fg="#1f2328",
397
+ dim="#8c959f",
398
+ muted="#656d76",
399
+ title="#0969da",
400
+ spinner="#0969da",
401
+ accent="#0969da",
402
+ info="#9a6700",
403
+ markdown_heading="#0969da",
404
+ markdown_code="#1a7f37",
405
+ selected="#1a7f37",
406
+ error="#cf222e",
407
+ notice="#bc4c00",
408
+ diff_added="#1a7f37",
409
+ diff_removed="#cf222e",
410
+ tool_bg=ToolBgConfig(pending="#f6f8fa", success="#eaf5ec", error="#f8e6e8"),
411
+ badge=BadgeColorConfig(bg="#f6f8fa", label="#8250df"),
412
+ running="#0969da",
413
+ success="#1a7f37",
414
+ failed="#cf222e",
415
+ panel="#f6f8fa",
416
+ panel_alt="#eaeef2",
417
+ panel_user="#eef2f6",
418
+ editor="#f4f4f4",
419
+ border="#d0d7de",
420
+ ),
421
+ ),
422
+ "tokyo-night": ThemeConfig(
423
+ id="tokyo-night",
424
+ label="Tokyo Night",
425
+ colors=ColorsConfig(
426
+ bg="#1a1b26",
427
+ fg="#c0caf5",
428
+ dim="#565f89",
429
+ muted="#a9b1d6",
430
+ title="#bb9af7",
431
+ spinner="#7aa2f7",
432
+ accent="#7aa2f7",
433
+ info="#e0af68",
434
+ markdown_heading="#e0af68",
435
+ markdown_code="#73daca",
436
+ selected="#73daca",
437
+ error="#f7768e",
438
+ notice="#ff9e64",
439
+ diff_added="#9ece6a",
440
+ diff_removed="#f7768e",
441
+ tool_bg=ToolBgConfig(pending="#24283b", success="#243638", error="#3a2734"),
442
+ badge=BadgeColorConfig(bg="#24283b", label="#bb9af7"),
443
+ running="#7aa2f7",
444
+ success="#9ece6a",
445
+ failed="#f7768e",
446
+ panel="#24283b",
447
+ panel_alt="#2f354d",
448
+ panel_user="#313a5f",
449
+ editor="#353640",
450
+ border="#3b4261",
451
+ ),
452
+ ),
453
+ "tokyo-day": ThemeConfig(
454
+ id="tokyo-day",
455
+ label="Tokyo Day",
456
+ colors=ColorsConfig(
457
+ bg="#d5d6db",
458
+ fg="#3760bf",
459
+ dim="#848cb5",
460
+ muted="#6172b0",
461
+ title="#7847bd",
462
+ spinner="#2e7de9",
463
+ accent="#2e7de9",
464
+ info="#8c6c3e",
465
+ markdown_heading="#8c6c3e",
466
+ markdown_code="#007197",
467
+ selected="#007197",
468
+ error="#f52a65",
469
+ notice="#b15c00",
470
+ diff_added="#587539",
471
+ diff_removed="#f52a65",
472
+ tool_bg=ToolBgConfig(pending="#cbccd1", success="#c7d8cb", error="#dec7cf"),
473
+ badge=BadgeColorConfig(bg="#cbccd1", label="#9854f1"),
474
+ running="#2e7de9",
475
+ success="#587539",
476
+ failed="#f52a65",
477
+ panel="#cbccd1",
478
+ panel_alt="#c4c8da",
479
+ panel_user="#b7c5e3",
480
+ editor="#cccdd2",
481
+ border="#b4b5b9",
482
+ ),
483
+ ),
484
+ "kanagawa": ThemeConfig(
485
+ id="kanagawa",
486
+ label="Kanagawa",
487
+ colors=ColorsConfig(
488
+ bg="#1F1F28",
489
+ fg="#DCD7BA",
490
+ dim="#54546D",
491
+ muted="#727169",
492
+ title="#957FB8",
493
+ spinner="#7E9CD8",
494
+ accent="#D27E99",
495
+ info="#76946A",
496
+ markdown_heading="#957FB8",
497
+ markdown_code="#98BB6C",
498
+ selected="#98BB6C",
499
+ error="#E82424",
500
+ notice="#D7A657",
501
+ diff_added="#98BB6C",
502
+ diff_removed="#E82424",
503
+ tool_bg=ToolBgConfig(pending="#363646", success="#252E25", error="#362020"),
504
+ badge=BadgeColorConfig(bg="#363646", label="#957FB8"),
505
+ running="#7E9CD8",
506
+ success="#98BB6C",
507
+ failed="#E82424",
508
+ panel="#2A2A37",
509
+ panel_alt="#363646",
510
+ panel_user="#363646",
511
+ editor="#393941",
512
+ border="#54546D",
513
+ ),
514
+ ),
515
+ "kanagawa-dragon": ThemeConfig(
516
+ id="kanagawa-dragon",
517
+ label="Kanagawa Dragon",
518
+ colors=ColorsConfig(
519
+ bg="#181616",
520
+ fg="#c5c9c5",
521
+ dim="#737c73",
522
+ muted="#a6a69c",
523
+ title="#c4b28a",
524
+ spinner="#8ba4b0",
525
+ accent="#8ba4b0",
526
+ info="#c4b28a",
527
+ markdown_heading="#c4b28a",
528
+ markdown_code="#8a9a7b",
529
+ selected="#8a9a7b",
530
+ error="#E82424",
531
+ notice="#FF9E3B",
532
+ diff_added="#76946A",
533
+ diff_removed="#C34043",
534
+ tool_bg=ToolBgConfig(pending="#1D1C19", success="#282727", error="#2a2022"),
535
+ badge=BadgeColorConfig(bg="#282727", label="#a292a3"),
536
+ running="#8ba4b0",
537
+ success="#76946A",
538
+ failed="#C34043",
539
+ panel="#282727",
540
+ panel_alt="#1D1C19",
541
+ panel_user="#393836",
542
+ editor="#333131",
543
+ border="#393836",
544
+ ),
545
+ ),
546
+ "one-dark": ThemeConfig(
547
+ id="one-dark",
548
+ label="One Dark",
549
+ colors=ColorsConfig(
550
+ bg="#282c34",
551
+ fg="#abb2bf",
552
+ dim="#5c6370",
553
+ muted="#7f848e",
554
+ title="#c678dd",
555
+ spinner="#61afef",
556
+ accent="#61afef",
557
+ info="#e5c07b",
558
+ markdown_heading="#e5c07b",
559
+ markdown_code="#56b6c2",
560
+ selected="#56b6c2",
561
+ error="#e06c75",
562
+ notice="#d19a66",
563
+ diff_added="#98c379",
564
+ diff_removed="#e06c75",
565
+ tool_bg=ToolBgConfig(pending="#353b45", success="#33403b", error="#442f36"),
566
+ badge=BadgeColorConfig(bg="#353b45", label="#c678dd"),
567
+ running="#61afef",
568
+ success="#98c379",
569
+ failed="#e06c75",
570
+ panel="#353b45",
571
+ panel_alt="#3e4451",
572
+ panel_user="#404754",
573
+ editor="#41454c",
574
+ border="#4b5263",
575
+ ),
576
+ ),
577
+ "one-light": ThemeConfig(
578
+ id="one-light",
579
+ label="One Light",
580
+ colors=ColorsConfig(
581
+ bg="#fafafa",
582
+ fg="#383a42",
583
+ dim="#9ca0a4",
584
+ muted="#696c77",
585
+ title="#a626a4",
586
+ spinner="#4078f2",
587
+ accent="#4078f2",
588
+ info="#c18401",
589
+ markdown_heading="#c18401",
590
+ markdown_code="#0184bc",
591
+ selected="#0184bc",
592
+ error="#e45649",
593
+ notice="#986801",
594
+ diff_added="#50a14f",
595
+ diff_removed="#e45649",
596
+ tool_bg=ToolBgConfig(pending="#f0f0f1", success="#e6f1e6", error="#f5e3e1"),
597
+ badge=BadgeColorConfig(bg="#f0f0f1", label="#a626a4"),
598
+ running="#4078f2",
599
+ success="#50a14f",
600
+ failed="#e45649",
601
+ panel="#f0f0f1",
602
+ panel_alt="#e5e5e6",
603
+ panel_user="#dfe1e6",
604
+ editor="#f0f0f0",
605
+ border="#d0d0d2",
606
+ ),
607
+ ),
608
+ "nord": ThemeConfig(
609
+ id="nord",
610
+ label="Nord",
611
+ colors=ColorsConfig(
612
+ bg="#2e3440",
613
+ fg="#d8dee9",
614
+ dim="#616e88",
615
+ muted="#81a1c1",
616
+ title="#88c0d0",
617
+ spinner="#5e81ac",
618
+ accent="#5e81ac",
619
+ info="#ebcb8b",
620
+ markdown_heading="#88c0d0",
621
+ markdown_code="#a3be8c",
622
+ selected="#a3be8c",
623
+ error="#bf616a",
624
+ notice="#d08770",
625
+ diff_added="#a3be8c",
626
+ diff_removed="#bf616a",
627
+ tool_bg=ToolBgConfig(pending="#3b4252", success="#364238", error="#46343b"),
628
+ badge=BadgeColorConfig(bg="#3b4252", label="#b48ead"),
629
+ running="#5e81ac",
630
+ success="#a3be8c",
631
+ failed="#bf616a",
632
+ panel="#3b4252",
633
+ panel_alt="#434c5e",
634
+ panel_user="#4c566a",
635
+ editor="#474c56",
636
+ border="#4c566a",
637
+ ),
638
+ ),
639
+ "nightowl": ThemeConfig(
640
+ id="nightowl",
641
+ label="Night Owl",
642
+ colors=ColorsConfig(
643
+ bg="#011627",
644
+ fg="#d6deeb",
645
+ dim="#5f7e97",
646
+ muted="#5f7e97",
647
+ title="#7fdbca",
648
+ spinner="#82AAFF",
649
+ accent="#c792ea",
650
+ info="#82AAFF",
651
+ markdown_heading="#82AAFF",
652
+ markdown_code="#c5e478",
653
+ selected="#c5e478",
654
+ error="#EF5350",
655
+ notice="#ecc48d",
656
+ diff_added="#c5e478",
657
+ diff_removed="#EF5350",
658
+ tool_bg=ToolBgConfig(pending="#0b253a", success="#0a2e1a", error="#2d1b1b"),
659
+ badge=BadgeColorConfig(bg="#0b253a", label="#7fdbca"),
660
+ running="#82AAFF",
661
+ success="#c5e478",
662
+ failed="#EF5350",
663
+ panel="#0b253a",
664
+ panel_alt="#0b253a",
665
+ panel_user="#5f7e97",
666
+ editor="#1f3140",
667
+ border="#5f7e97",
668
+ ),
669
+ ),
670
+ "monokai": ThemeConfig(
671
+ id="monokai",
672
+ label="Monokai",
673
+ colors=ColorsConfig(
674
+ bg="#272822",
675
+ fg="#f8f8f2",
676
+ dim="#3e3d32",
677
+ muted="#75715e",
678
+ title="#ae81ff",
679
+ spinner="#66d9ef",
680
+ accent="#a6e22e",
681
+ info="#fd971f",
682
+ markdown_heading="#f92672",
683
+ markdown_code="#a6e22e",
684
+ selected="#a6e22e",
685
+ error="#f92672",
686
+ notice="#e6db74",
687
+ diff_added="#a6e22e",
688
+ diff_removed="#f92672",
689
+ tool_bg=ToolBgConfig(pending="#3e3d32", success="#1a3a1a", error="#3a1a1a"),
690
+ badge=BadgeColorConfig(bg="#3e3d32", label="#ae81ff"),
691
+ running="#66d9ef",
692
+ success="#a6e22e",
693
+ failed="#f92672",
694
+ panel="#1e1f1c",
695
+ panel_alt="#3e3d32",
696
+ panel_user="#1e1f1c",
697
+ editor="#40413c",
698
+ border="#3e3d32",
699
+ ),
700
+ ),
701
+ "solarized-dark": ThemeConfig(
702
+ id="solarized-dark",
703
+ label="Solarized Dark",
704
+ colors=ColorsConfig(
705
+ bg="#002b36",
706
+ fg="#93a1a1",
707
+ dim="#586e75",
708
+ muted="#657b83",
709
+ title="#b58900",
710
+ spinner="#268bd2",
711
+ accent="#268bd2",
712
+ info="#cb4b16",
713
+ markdown_heading="#b58900",
714
+ markdown_code="#2aa198",
715
+ selected="#2aa198",
716
+ error="#dc322f",
717
+ notice="#cb4b16",
718
+ diff_added="#859900",
719
+ diff_removed="#dc322f",
720
+ tool_bg=ToolBgConfig(pending="#073642", success="#183c37", error="#402c32"),
721
+ badge=BadgeColorConfig(bg="#073642", label="#6c71c4"),
722
+ running="#268bd2",
723
+ success="#859900",
724
+ failed="#dc322f",
725
+ panel="#073642",
726
+ panel_alt="#0b3a45",
727
+ panel_user="#12404b",
728
+ editor="#1e444e",
729
+ border="#194955",
730
+ ),
731
+ ),
732
+ "solarized-light": ThemeConfig(
733
+ id="solarized-light",
734
+ label="Solarized Light",
735
+ colors=ColorsConfig(
736
+ bg="#fdf6e3",
737
+ fg="#657b83",
738
+ dim="#839496",
739
+ muted="#586e75",
740
+ title="#b58900",
741
+ spinner="#268bd2",
742
+ accent="#268bd2",
743
+ info="#cb4b16",
744
+ markdown_heading="#b58900",
745
+ markdown_code="#2aa198",
746
+ selected="#2aa198",
747
+ error="#dc322f",
748
+ notice="#cb4b16",
749
+ diff_added="#859900",
750
+ diff_removed="#dc322f",
751
+ tool_bg=ToolBgConfig(pending="#eee8d5", success="#e5eed4", error="#f2ddda"),
752
+ badge=BadgeColorConfig(bg="#eee8d5", label="#6c71c4"),
753
+ running="#268bd2",
754
+ success="#859900",
755
+ failed="#dc322f",
756
+ panel="#eee8d5",
757
+ panel_alt="#e7e1cf",
758
+ panel_user="#e2dccb",
759
+ editor="#f2ecd9",
760
+ border="#d8d1bf",
761
+ ),
762
+ ),
763
+ "ayu": ThemeConfig(
764
+ id="ayu",
765
+ label="Ayu",
766
+ colors=ColorsConfig(
767
+ bg="#0B0E14",
768
+ fg="#BFBDB6",
769
+ dim="#6C7380",
770
+ muted="#565B66",
771
+ title="#D2A6FF",
772
+ spinner="#59C2FF",
773
+ accent="#E6B450",
774
+ info="#39BAE6",
775
+ markdown_heading="#D2A6FF",
776
+ markdown_code="#AAD94C",
777
+ selected="#AAD94C",
778
+ error="#D95757",
779
+ notice="#E6B673",
780
+ diff_added="#7FD962",
781
+ diff_removed="#F26D78",
782
+ tool_bg=ToolBgConfig(pending="#0D1017", success="#20303b", error="#37222c"),
783
+ badge=BadgeColorConfig(bg="#0D1017", label="#D2A6FF"),
784
+ running="#59C2FF",
785
+ success="#7FD962",
786
+ failed="#D95757",
787
+ panel="#0F131A",
788
+ panel_alt="#0D1017",
789
+ panel_user="#11151C",
790
+ editor="#282a30",
791
+ border="#6C7380",
792
+ ),
793
+ ),
794
+ "palenight": ThemeConfig(
795
+ id="palenight",
796
+ label="Palenight",
797
+ colors=ColorsConfig(
798
+ bg="#292d3e",
799
+ fg="#a6accd",
800
+ dim="#32364a",
801
+ muted="#676e95",
802
+ title="#c792ea",
803
+ spinner="#82aaff",
804
+ accent="#89ddff",
805
+ info="#f78c6c",
806
+ markdown_heading="#c792ea",
807
+ markdown_code="#c3e88d",
808
+ selected="#c3e88d",
809
+ error="#f07178",
810
+ notice="#ffcb6b",
811
+ diff_added="#c3e88d",
812
+ diff_removed="#f07178",
813
+ tool_bg=ToolBgConfig(pending="#32364a", success="#2e3c2b", error="#3c2b2b"),
814
+ badge=BadgeColorConfig(bg="#32364a", label="#c792ea"),
815
+ running="#82aaff",
816
+ success="#c3e88d",
817
+ failed="#f07178",
818
+ panel="#1e2132",
819
+ panel_alt="#32364a",
820
+ panel_user="#1e2132",
821
+ editor="#424655",
822
+ border="#32364a",
823
+ ),
824
+ ),
825
+ "rosepine": ThemeConfig(
826
+ id="rosepine",
827
+ label="Rosé Pine",
828
+ colors=ColorsConfig(
829
+ bg="#191724",
830
+ fg="#e0def4",
831
+ dim="#403d52",
832
+ muted="#6e6a86",
833
+ title="#c4a7e7",
834
+ spinner="#9ccfd8",
835
+ accent="#ebbcba",
836
+ info="#9ccfd8",
837
+ markdown_heading="#c4a7e7",
838
+ markdown_code="#31748f",
839
+ selected="#31748f",
840
+ error="#eb6f92",
841
+ notice="#f6c177",
842
+ diff_added="#31748f",
843
+ diff_removed="#eb6f92",
844
+ tool_bg=ToolBgConfig(pending="#26233a", success="#1f2d3a", error="#3a1f2d"),
845
+ badge=BadgeColorConfig(bg="#26233a", label="#c4a7e7"),
846
+ running="#9ccfd8",
847
+ success="#31748f",
848
+ failed="#eb6f92",
849
+ panel="#1f1d2e",
850
+ panel_alt="#26233a",
851
+ panel_user="#21202e",
852
+ editor="#34323e",
853
+ border="#403d52",
854
+ ),
855
+ ),
856
+ }
857
+
858
+ _SYNTAX_COLORS: dict[str, SyntaxColorConfig] = {
859
+ "gruvbox-dark": SyntaxColorConfig(
860
+ command="#689d6a",
861
+ arg="#ebdbb2",
862
+ option="#83a598",
863
+ operator="#d3869b",
864
+ string="#b8bb26",
865
+ variable="#d3869b",
866
+ ),
867
+ "gruvbox-light": SyntaxColorConfig(
868
+ command="#427b58",
869
+ arg="#3c3836",
870
+ option="#076678",
871
+ operator="#b16286",
872
+ string="#79740e",
873
+ variable="#8f3f71",
874
+ ),
875
+ "catppuccin-mocha": SyntaxColorConfig(
876
+ command="#94e2d5",
877
+ arg="#cdd6f4",
878
+ option="#89b4fa",
879
+ operator="#cba6f7",
880
+ string="#a6e3a1",
881
+ variable="#cba6f7",
882
+ ),
883
+ "catppuccin-latte": SyntaxColorConfig(
884
+ command="#179299",
885
+ arg="#4c4f69",
886
+ option="#1e66f5",
887
+ operator="#8839ef",
888
+ string="#40a02b",
889
+ variable="#8839ef",
890
+ ),
891
+ "catppuccin-frappe": SyntaxColorConfig(
892
+ command="#a6d189",
893
+ arg="#c6d0f5",
894
+ option="#8caaee",
895
+ operator="#ca9ee6",
896
+ string="#a6d189",
897
+ variable="#ca9ee6",
898
+ ),
899
+ "catppuccin-macchiato": SyntaxColorConfig(
900
+ command="#a6da95",
901
+ arg="#cad3f5",
902
+ option="#8aadf4",
903
+ operator="#c6a0f6",
904
+ string="#a6da95",
905
+ variable="#c6a0f6",
906
+ ),
907
+ "dracula": SyntaxColorConfig(
908
+ command="#50fa7b",
909
+ arg="#f8f8f2",
910
+ option="#8be9fd",
911
+ operator="#bd93f9",
912
+ string="#50fa7b",
913
+ variable="#bd93f9",
914
+ ),
915
+ "everforest": SyntaxColorConfig(
916
+ command="#83c092",
917
+ arg="#d3c6aa",
918
+ option="#7fbbb3",
919
+ operator="#7fbbb3",
920
+ string="#a7c080",
921
+ variable="#d699b6",
922
+ ),
923
+ "flexoki": SyntaxColorConfig(
924
+ command="#3AA99F",
925
+ arg="#CECDC3",
926
+ option="#4385BE",
927
+ operator="#4385BE",
928
+ string="#879A39",
929
+ variable="#8B7EC8",
930
+ ),
931
+ "github-dark": SyntaxColorConfig(
932
+ command="#a5d6ff",
933
+ arg="#c9d1d9",
934
+ option="#58a6ff",
935
+ operator="#bc8cff",
936
+ string="#7ee787",
937
+ variable="#bc8cff",
938
+ ),
939
+ "github-light": SyntaxColorConfig(
940
+ command="#1a7f37",
941
+ arg="#1f2328",
942
+ option="#0969da",
943
+ operator="#8250df",
944
+ string="#1a7f37",
945
+ variable="#8250df",
946
+ ),
947
+ "tokyo-night": SyntaxColorConfig(
948
+ command="#73daca",
949
+ arg="#c0caf5",
950
+ option="#7aa2f7",
951
+ operator="#bb9af7",
952
+ string="#9ece6a",
953
+ variable="#bb9af7",
954
+ ),
955
+ "tokyo-day": SyntaxColorConfig(
956
+ command="#007197",
957
+ arg="#3760bf",
958
+ option="#2e7de9",
959
+ operator="#9854f1",
960
+ string="#587539",
961
+ variable="#7847bd",
962
+ ),
963
+ "kanagawa": SyntaxColorConfig(
964
+ command="#98BB6C",
965
+ arg="#DCD7BA",
966
+ option="#7E9CD8",
967
+ operator="#957FB8",
968
+ string="#98BB6C",
969
+ variable="#957FB8",
970
+ ),
971
+ "kanagawa-dragon": SyntaxColorConfig(
972
+ command="#8a9a7b",
973
+ arg="#c5c9c5",
974
+ option="#8ba4b0",
975
+ operator="#a292a3",
976
+ string="#8a9a7b",
977
+ variable="#a292a3",
978
+ ),
979
+ "one-dark": SyntaxColorConfig(
980
+ command="#56b6c2",
981
+ arg="#abb2bf",
982
+ option="#61afef",
983
+ operator="#c678dd",
984
+ string="#98c379",
985
+ variable="#c678dd",
986
+ ),
987
+ "one-light": SyntaxColorConfig(
988
+ command="#0184bc",
989
+ arg="#383a42",
990
+ option="#4078f2",
991
+ operator="#a626a4",
992
+ string="#50a14f",
993
+ variable="#a626a4",
994
+ ),
995
+ "nord": SyntaxColorConfig(
996
+ command="#a3be8c",
997
+ arg="#d8dee9",
998
+ option="#81a1c1",
999
+ operator="#b48ead",
1000
+ string="#a3be8c",
1001
+ variable="#b48ead",
1002
+ ),
1003
+ "nightowl": SyntaxColorConfig(
1004
+ command="#c5e478",
1005
+ arg="#d6deeb",
1006
+ option="#82AAFF",
1007
+ operator="#7fdbca",
1008
+ string="#c5e478",
1009
+ variable="#c792ea",
1010
+ ),
1011
+ "monokai": SyntaxColorConfig(
1012
+ command="#a6e22e",
1013
+ arg="#f8f8f2",
1014
+ option="#66d9ef",
1015
+ operator="#ae81ff",
1016
+ string="#a6e22e",
1017
+ variable="#ae81ff",
1018
+ ),
1019
+ "solarized-dark": SyntaxColorConfig(
1020
+ command="#2aa198",
1021
+ arg="#93a1a1",
1022
+ option="#268bd2",
1023
+ operator="#6c71c4",
1024
+ string="#859900",
1025
+ variable="#6c71c4",
1026
+ ),
1027
+ "solarized-light": SyntaxColorConfig(
1028
+ command="#2aa198",
1029
+ arg="#586e75",
1030
+ option="#268bd2",
1031
+ operator="#6c71c4",
1032
+ string="#859900",
1033
+ variable="#6c71c4",
1034
+ ),
1035
+ "ayu": SyntaxColorConfig(
1036
+ command="#AAD94C",
1037
+ arg="#BFBDB6",
1038
+ option="#59C2FF",
1039
+ operator="#D2A6FF",
1040
+ string="#AAD94C",
1041
+ variable="#D2A6FF",
1042
+ ),
1043
+ "palenight": SyntaxColorConfig(
1044
+ command="#c3e88d",
1045
+ arg="#a6accd",
1046
+ option="#82aaff",
1047
+ operator="#c792ea",
1048
+ string="#c3e88d",
1049
+ variable="#c792ea",
1050
+ ),
1051
+ "rosepine": SyntaxColorConfig(
1052
+ command="#31748f",
1053
+ arg="#e0def4",
1054
+ option="#9ccfd8",
1055
+ operator="#c4a7e7",
1056
+ string="#31748f",
1057
+ variable="#c4a7e7",
1058
+ ),
1059
+ }
1060
+
1061
+ THEME_ORDER = [
1062
+ "ayu",
1063
+ "catppuccin-frappe",
1064
+ "catppuccin-latte",
1065
+ "catppuccin-macchiato",
1066
+ "catppuccin-mocha",
1067
+ "dracula",
1068
+ "everforest",
1069
+ "flexoki",
1070
+ "github-dark",
1071
+ "github-light",
1072
+ "gruvbox-dark",
1073
+ "gruvbox-light",
1074
+ "kanagawa",
1075
+ "kanagawa-dragon",
1076
+ "monokai",
1077
+ "nightowl",
1078
+ "nord",
1079
+ "one-dark",
1080
+ "one-light",
1081
+ "palenight",
1082
+ "rosepine",
1083
+ "solarized-dark",
1084
+ "solarized-light",
1085
+ "tokyo-day",
1086
+ "tokyo-night",
1087
+ ]
1088
+
1089
+
1090
+ def get_theme_ids() -> list[str]:
1091
+ return list(THEME_ORDER)
1092
+
1093
+
1094
+ def get_theme_options() -> list[tuple[str, str]]:
1095
+ return [(theme_id, _THEMES[theme_id].label) for theme_id in THEME_ORDER]
1096
+
1097
+
1098
+ def get_theme(theme_id: str) -> ThemeConfig:
1099
+ theme = _THEMES.get(theme_id)
1100
+ if theme is None:
1101
+ raise ValueError(f"Unknown theme: {theme_id}")
1102
+ result = theme.model_copy(deep=True)
1103
+ result.colors.syntax = _SYNTAX_COLORS[theme_id].model_copy(deep=True)
1104
+ return result