kader 0.1.5__tar.gz → 0.1.6__tar.gz

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 (79) hide show
  1. {kader-0.1.5 → kader-0.1.6}/PKG-INFO +1 -1
  2. {kader-0.1.5 → kader-0.1.6}/cli/app.py +0 -31
  3. kader-0.1.6/cli/app.tcss +289 -0
  4. {kader-0.1.5 → kader-0.1.6}/cli/utils.py +0 -5
  5. {kader-0.1.5 → kader-0.1.6}/pyproject.toml +1 -1
  6. {kader-0.1.5 → kader-0.1.6}/uv.lock +1 -1
  7. kader-0.1.5/cli/app.tcss +0 -664
  8. {kader-0.1.5 → kader-0.1.6}/.github/workflows/ci.yml +0 -0
  9. {kader-0.1.5 → kader-0.1.6}/.github/workflows/release.yml +0 -0
  10. {kader-0.1.5 → kader-0.1.6}/.gitignore +0 -0
  11. {kader-0.1.5 → kader-0.1.6}/.python-version +0 -0
  12. {kader-0.1.5 → kader-0.1.6}/.qwen/QWEN.md +0 -0
  13. {kader-0.1.5 → kader-0.1.6}/.qwen/agents/technical-writer.md +0 -0
  14. {kader-0.1.5 → kader-0.1.6}/.qwen/agents/test-automation-specialist.md +0 -0
  15. {kader-0.1.5 → kader-0.1.6}/README.md +0 -0
  16. {kader-0.1.5 → kader-0.1.6}/cli/README.md +0 -0
  17. {kader-0.1.5 → kader-0.1.6}/cli/__init__.py +0 -0
  18. {kader-0.1.5 → kader-0.1.6}/cli/__main__.py +0 -0
  19. {kader-0.1.5 → kader-0.1.6}/cli/widgets/__init__.py +0 -0
  20. {kader-0.1.5 → kader-0.1.6}/cli/widgets/confirmation.py +0 -0
  21. {kader-0.1.5 → kader-0.1.6}/cli/widgets/conversation.py +0 -0
  22. {kader-0.1.5 → kader-0.1.6}/cli/widgets/loading.py +0 -0
  23. {kader-0.1.5 → kader-0.1.6}/examples/.gitignore +0 -0
  24. {kader-0.1.5 → kader-0.1.6}/examples/README.md +0 -0
  25. {kader-0.1.5 → kader-0.1.6}/examples/memory_example.py +0 -0
  26. {kader-0.1.5 → kader-0.1.6}/examples/ollama_example.py +0 -0
  27. {kader-0.1.5 → kader-0.1.6}/examples/planning_agent_example.py +0 -0
  28. {kader-0.1.5 → kader-0.1.6}/examples/python_developer/main.py +0 -0
  29. {kader-0.1.5 → kader-0.1.6}/examples/python_developer/template.yaml +0 -0
  30. {kader-0.1.5 → kader-0.1.6}/examples/react_agent_example.py +0 -0
  31. {kader-0.1.5 → kader-0.1.6}/examples/simple_agent.py +0 -0
  32. {kader-0.1.5 → kader-0.1.6}/examples/todo_agent/main.py +0 -0
  33. {kader-0.1.5 → kader-0.1.6}/examples/tools_example.py +0 -0
  34. {kader-0.1.5 → kader-0.1.6}/kader/__init__.py +0 -0
  35. {kader-0.1.5 → kader-0.1.6}/kader/agent/__init__.py +0 -0
  36. {kader-0.1.5 → kader-0.1.6}/kader/agent/agents.py +0 -0
  37. {kader-0.1.5 → kader-0.1.6}/kader/agent/base.py +0 -0
  38. {kader-0.1.5 → kader-0.1.6}/kader/agent/logger.py +0 -0
  39. {kader-0.1.5 → kader-0.1.6}/kader/config.py +0 -0
  40. {kader-0.1.5 → kader-0.1.6}/kader/memory/__init__.py +0 -0
  41. {kader-0.1.5 → kader-0.1.6}/kader/memory/conversation.py +0 -0
  42. {kader-0.1.5 → kader-0.1.6}/kader/memory/session.py +0 -0
  43. {kader-0.1.5 → kader-0.1.6}/kader/memory/state.py +0 -0
  44. {kader-0.1.5 → kader-0.1.6}/kader/memory/types.py +0 -0
  45. {kader-0.1.5 → kader-0.1.6}/kader/prompts/__init__.py +0 -0
  46. {kader-0.1.5 → kader-0.1.6}/kader/prompts/agent_prompts.py +0 -0
  47. {kader-0.1.5 → kader-0.1.6}/kader/prompts/base.py +0 -0
  48. {kader-0.1.5 → kader-0.1.6}/kader/prompts/templates/planning_agent.j2 +0 -0
  49. {kader-0.1.5 → kader-0.1.6}/kader/prompts/templates/react_agent.j2 +0 -0
  50. {kader-0.1.5 → kader-0.1.6}/kader/providers/__init__.py +0 -0
  51. {kader-0.1.5 → kader-0.1.6}/kader/providers/base.py +0 -0
  52. {kader-0.1.5 → kader-0.1.6}/kader/providers/mock.py +0 -0
  53. {kader-0.1.5 → kader-0.1.6}/kader/providers/ollama.py +0 -0
  54. {kader-0.1.5 → kader-0.1.6}/kader/tools/README.md +0 -0
  55. {kader-0.1.5 → kader-0.1.6}/kader/tools/__init__.py +0 -0
  56. {kader-0.1.5 → kader-0.1.6}/kader/tools/base.py +0 -0
  57. {kader-0.1.5 → kader-0.1.6}/kader/tools/exec_commands.py +0 -0
  58. {kader-0.1.5 → kader-0.1.6}/kader/tools/filesys.py +0 -0
  59. {kader-0.1.5 → kader-0.1.6}/kader/tools/filesystem.py +0 -0
  60. {kader-0.1.5 → kader-0.1.6}/kader/tools/protocol.py +0 -0
  61. {kader-0.1.5 → kader-0.1.6}/kader/tools/rag.py +0 -0
  62. {kader-0.1.5 → kader-0.1.6}/kader/tools/todo.py +0 -0
  63. {kader-0.1.5 → kader-0.1.6}/kader/tools/utils.py +0 -0
  64. {kader-0.1.5 → kader-0.1.6}/kader/tools/web.py +0 -0
  65. {kader-0.1.5 → kader-0.1.6}/tests/conftest.py +0 -0
  66. {kader-0.1.5 → kader-0.1.6}/tests/providers/test_mock.py +0 -0
  67. {kader-0.1.5 → kader-0.1.6}/tests/providers/test_ollama.py +0 -0
  68. {kader-0.1.5 → kader-0.1.6}/tests/providers/test_providers_base.py +0 -0
  69. {kader-0.1.5 → kader-0.1.6}/tests/test_agent_logger.py +0 -0
  70. {kader-0.1.5 → kader-0.1.6}/tests/test_agent_logger_integration.py +0 -0
  71. {kader-0.1.5 → kader-0.1.6}/tests/test_base_agent.py +0 -0
  72. {kader-0.1.5 → kader-0.1.6}/tests/test_file_memory.py +0 -0
  73. {kader-0.1.5 → kader-0.1.6}/tests/test_todo_tool.py +0 -0
  74. {kader-0.1.5 → kader-0.1.6}/tests/tools/test_exec_commands.py +0 -0
  75. {kader-0.1.5 → kader-0.1.6}/tests/tools/test_filesys_tools.py +0 -0
  76. {kader-0.1.5 → kader-0.1.6}/tests/tools/test_filesystem_tools.py +0 -0
  77. {kader-0.1.5 → kader-0.1.6}/tests/tools/test_rag.py +0 -0
  78. {kader-0.1.5 → kader-0.1.6}/tests/tools/test_tools_base.py +0 -0
  79. {kader-0.1.5 → kader-0.1.6}/tests/tools/test_web.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kader
3
- Version: 0.1.5
3
+ Version: 0.1.6
4
4
  Summary: kader coding agent
5
5
  Requires-Python: >=3.11
6
6
  Requires-Dist: faiss-cpu>=1.9.0
@@ -29,7 +29,6 @@ from kader.tools import get_default_registry
29
29
  from .utils import (
30
30
  DEFAULT_MODEL,
31
31
  HELP_TEXT,
32
- THEME_NAMES,
33
32
  )
34
33
  from .widgets import ConversationView, InlineSelector, LoadingSpinner, ModelSelector
35
34
 
@@ -51,7 +50,6 @@ Type a message below to start chatting, or use one of the commands:
51
50
 
52
51
  - `/help` - Show available commands
53
52
  - `/models` - View available LLM models
54
- - `/theme` - Change the color theme
55
53
  - `/clear` - Clear the conversation
56
54
  - `/save` - Save current session
57
55
  - `/load` - Load a saved session
@@ -83,7 +81,6 @@ class KaderApp(App):
83
81
  BINDINGS = [
84
82
  Binding("ctrl+q", "quit", "Quit"),
85
83
  Binding("ctrl+l", "clear", "Clear"),
86
- Binding("ctrl+t", "cycle_theme", "Theme"),
87
84
  Binding("ctrl+s", "save_session", "Save"),
88
85
  Binding("ctrl+r", "refresh_tree", "Refresh"),
89
86
  Binding("tab", "focus_next", "Next", show=False),
@@ -92,7 +89,6 @@ class KaderApp(App):
92
89
 
93
90
  def __init__(self) -> None:
94
91
  super().__init__()
95
- self._current_theme_index = 0
96
92
  self._is_processing = False
97
93
  self._current_model = DEFAULT_MODEL
98
94
  self._current_session_id: str | None = None
@@ -433,12 +429,6 @@ Please resize your terminal."""
433
429
  conversation.add_message(HELP_TEXT, "assistant")
434
430
  elif cmd == "/models":
435
431
  await self._show_model_selector(conversation)
436
- elif cmd == "/theme":
437
- self._cycle_theme()
438
- theme_name = THEME_NAMES[self._current_theme_index]
439
- conversation.add_message(
440
- f"{{~}} Theme changed to **{theme_name}**!", "assistant"
441
- )
442
432
  elif cmd == "/clear":
443
433
  conversation.clear_messages()
444
434
  self._agent.memory.clear()
@@ -522,21 +512,6 @@ Please resize your terminal."""
522
512
  # Auto-refresh directory tree in case agent created/modified files
523
513
  self._refresh_directory_tree()
524
514
 
525
- def _cycle_theme(self) -> None:
526
- """Cycle through available themes."""
527
- # Remove current theme class if it's not dark
528
- current_theme = THEME_NAMES[self._current_theme_index]
529
- if current_theme != "dark":
530
- self.remove_class(f"theme-{current_theme}")
531
-
532
- # Move to next theme
533
- self._current_theme_index = (self._current_theme_index + 1) % len(THEME_NAMES)
534
- new_theme = THEME_NAMES[self._current_theme_index]
535
-
536
- # Apply new theme class (dark is default, no class needed)
537
- if new_theme != "dark":
538
- self.add_class(f"theme-{new_theme}")
539
-
540
515
  def action_clear(self) -> None:
541
516
  """Clear the conversation (Ctrl+L)."""
542
517
  conversation = self.query_one("#conversation-view", ConversationView)
@@ -544,12 +519,6 @@ Please resize your terminal."""
544
519
  self._agent.memory.clear()
545
520
  self.notify("Conversation cleared!", severity="information")
546
521
 
547
- def action_cycle_theme(self) -> None:
548
- """Cycle theme (Ctrl+T)."""
549
- self._cycle_theme()
550
- theme_name = THEME_NAMES[self._current_theme_index]
551
- self.notify(f"Theme: {theme_name}", severity="information")
552
-
553
522
  def action_save_session(self) -> None:
554
523
  """Save session (Ctrl+S)."""
555
524
  conversation = self.query_one("#conversation-view", ConversationView)
@@ -0,0 +1,289 @@
1
+ /* Kader CLI - Modern Terminal UI Stylesheet */
2
+
3
+ /* ===== Color Themes ===== */
4
+
5
+ /* Default Dark Theme */
6
+ $primary: #7c3aed;
7
+ $secondary: #06b6d4;
8
+ $success: #10b981;
9
+ $warning: #f59e0b;
10
+ $error: #ef4444;
11
+ $surface: #1e1e2e;
12
+ $background: #11111b;
13
+ $text: #cdd6f4;
14
+ $text-muted: #6c7086;
15
+
16
+ /* ===== Root App ===== */
17
+
18
+ Screen {
19
+ background: $background;
20
+ min-width: 89;
21
+ min-height: 29;
22
+ }
23
+
24
+ /* ===== Size Warning Overlay ===== */
25
+
26
+ #size-warning {
27
+ dock: top;
28
+ width: 100%;
29
+ height: 100%;
30
+ background: $background 95%;
31
+ color: $warning;
32
+ text-align: center;
33
+ content-align: center middle;
34
+ text-style: bold;
35
+ padding: 2;
36
+ layer: overlay;
37
+ }
38
+
39
+ /* ===== Header ===== */
40
+
41
+ Header {
42
+ background: $primary;
43
+ color: $text;
44
+ text-style: bold;
45
+ height: 1;
46
+ dock: top;
47
+ }
48
+
49
+ /* ===== Footer ===== */
50
+
51
+ Footer {
52
+ background: $surface;
53
+ color: $text-muted;
54
+ height: 1;
55
+ dock: bottom;
56
+ }
57
+
58
+ FooterKey {
59
+ background: transparent;
60
+ color: $text-muted;
61
+ }
62
+
63
+ FooterKey > .footer-key--key {
64
+ background: $primary;
65
+ color: $text;
66
+ }
67
+
68
+ /* ===== Main Layout ===== */
69
+
70
+ #main-container {
71
+ layout: horizontal;
72
+ height: 1fr;
73
+ }
74
+
75
+ /* ===== Sidebar (Directory Tree) ===== */
76
+
77
+ #sidebar {
78
+ width: 22;
79
+ min-width: 18;
80
+ max-width: 35;
81
+ background: $surface;
82
+ border-right: thick $primary;
83
+ padding: 0;
84
+ }
85
+
86
+ #sidebar-title {
87
+ background: $primary 20%;
88
+ color: $text;
89
+ text-style: bold;
90
+ padding: 1;
91
+ text-align: center;
92
+ height: 3;
93
+ }
94
+
95
+ DirectoryTree {
96
+ background: transparent;
97
+ padding: 0 1;
98
+ scrollbar-size: 1 1;
99
+ }
100
+
101
+ DirectoryTree > .directory-tree--folder {
102
+ color: $secondary;
103
+ }
104
+
105
+ DirectoryTree > .directory-tree--file {
106
+ color: $text;
107
+ }
108
+
109
+ DirectoryTree > .directory-tree--extension {
110
+ color: $text-muted;
111
+ }
112
+
113
+ DirectoryTree:focus > .directory-tree--cursor {
114
+ background: $primary 40%;
115
+ }
116
+
117
+ /* ===== Content Area ===== */
118
+
119
+ #content-area {
120
+ width: 1fr;
121
+ layout: vertical;
122
+ }
123
+
124
+ /* ===== Conversation ===== */
125
+
126
+ #conversation {
127
+ height: 1fr;
128
+ background: $background;
129
+ }
130
+
131
+ ConversationView {
132
+ scrollbar-size: 1 1;
133
+ }
134
+
135
+ /* ===== Welcome Message ===== */
136
+
137
+ #welcome {
138
+ padding: 2 4;
139
+ text-align: center;
140
+ }
141
+
142
+ #welcome Markdown {
143
+ text-align: center;
144
+ }
145
+
146
+ /* ===== Input Area ===== */
147
+
148
+ #input-container {
149
+ height: auto;
150
+ min-height: 4;
151
+ max-height: 7;
152
+ background: $background;
153
+ padding: 1;
154
+ margin-bottom: 1;
155
+ }
156
+
157
+ #prompt-input {
158
+ background: transparent;
159
+ border: round $primary;
160
+ padding: 0 1;
161
+ height: 3;
162
+ }
163
+
164
+ #prompt-input:focus {
165
+ border: round $secondary;
166
+ }
167
+
168
+ Input.-valid {
169
+ border: round $success;
170
+ }
171
+
172
+ Input > .input--placeholder {
173
+ color: $text-muted;
174
+ text-style: italic;
175
+ }
176
+
177
+ /* ===== Loading Spinner ===== */
178
+
179
+ LoadingSpinner {
180
+ background: $surface;
181
+ margin: 0 2;
182
+ padding: 1;
183
+ border-left: thick $warning;
184
+ }
185
+
186
+ /* ===== Command Hints in Footer ===== */
187
+
188
+ #command-hints {
189
+ dock: bottom;
190
+ height: 1;
191
+ background: $surface;
192
+ padding: 0 1;
193
+ text-align: center;
194
+ }
195
+
196
+ .command-hint {
197
+ margin: 0 1;
198
+ color: $text-muted;
199
+ }
200
+
201
+ .command-key {
202
+ color: $primary;
203
+ text-style: bold;
204
+ }
205
+
206
+ /* ===== Markdown Styling ===== */
207
+
208
+ Markdown {
209
+ margin: 0;
210
+ padding: 0;
211
+ }
212
+
213
+ MarkdownH1 {
214
+ color: $primary;
215
+ text-style: bold underline;
216
+ margin: 1 0;
217
+ }
218
+
219
+ MarkdownH2 {
220
+ color: $secondary;
221
+ text-style: bold;
222
+ margin: 1 0;
223
+ }
224
+
225
+ MarkdownH3 {
226
+ color: $success;
227
+ text-style: bold;
228
+ margin: 1 0;
229
+ }
230
+
231
+ MarkdownFence {
232
+ background: $surface;
233
+ border: round #6c7086;
234
+ margin: 1 0;
235
+ padding: 1;
236
+ }
237
+
238
+ MarkdownBlockQuote {
239
+ background: $primary 10%;
240
+ border-left: thick $primary;
241
+ padding: 0 1;
242
+ margin: 1 0;
243
+ }
244
+
245
+ MarkdownBulletList {
246
+ margin: 0;
247
+ padding-left: 2;
248
+ }
249
+
250
+ MarkdownTable {
251
+ margin: 1 0;
252
+ }
253
+
254
+ MarkdownTH {
255
+ background: $primary 20%;
256
+ text-style: bold;
257
+ }
258
+
259
+ MarkdownTD {
260
+ padding: 0 1;
261
+ }
262
+
263
+ /* ===== Scrollbars ===== */
264
+
265
+ Scrollbar {
266
+ background: $surface;
267
+ }
268
+
269
+ ScrollbarSlider {
270
+ color: $primary;
271
+ }
272
+
273
+ ScrollbarSlider:hover {
274
+ color: $secondary;
275
+ }
276
+
277
+ /* ===== Scrollbars ===== */
278
+
279
+ Scrollbar {
280
+ background: $surface;
281
+ }
282
+
283
+ ScrollbarSlider {
284
+ color: $primary;
285
+ }
286
+
287
+ ScrollbarSlider:hover {
288
+ color: $secondary;
289
+ }
@@ -2,9 +2,6 @@
2
2
 
3
3
  from kader.providers import OllamaProvider
4
4
 
5
- # Theme names for cycling
6
- THEME_NAMES = ["dark", "ocean", "forest", "sunset"]
7
-
8
5
  # Default model
9
6
  DEFAULT_MODEL = "qwen3-coder:480b-cloud"
10
7
 
@@ -13,7 +10,6 @@ HELP_TEXT = """## Kader CLI Commands
13
10
  | Command | Description |
14
11
  |---------|-------------|
15
12
  | `/models` | Show available LLM models |
16
- | `/theme` | Cycle through color themes |
17
13
  | `/help` | Show this help message |
18
14
  | `/clear` | Clear the conversation |
19
15
  | `/save` | Save current session |
@@ -28,7 +24,6 @@ HELP_TEXT = """## Kader CLI Commands
28
24
  | Shortcut | Action |
29
25
  |----------|--------|
30
26
  | `Ctrl+L` | Clear conversation |
31
- | `Ctrl+T` | Cycle theme |
32
27
  | `Ctrl+S` | Save session |
33
28
  | `Ctrl+R` | Refresh file tree |
34
29
  | `Ctrl+Q` | Quit |
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "kader"
3
- version = "0.1.5"
3
+ version = "0.1.6"
4
4
  description = "kader coding agent"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.11"
@@ -487,7 +487,7 @@ wheels = [
487
487
 
488
488
  [[package]]
489
489
  name = "kader"
490
- version = "0.1.5"
490
+ version = "0.1.6"
491
491
  source = { editable = "." }
492
492
  dependencies = [
493
493
  { name = "faiss-cpu" },
kader-0.1.5/cli/app.tcss DELETED
@@ -1,664 +0,0 @@
1
- /* Kader CLI - Modern Terminal UI Stylesheet */
2
-
3
- /* ===== Color Themes ===== */
4
-
5
- /* Default Dark Theme */
6
- $primary: #7c3aed;
7
- $secondary: #06b6d4;
8
- $success: #10b981;
9
- $warning: #f59e0b;
10
- $error: #ef4444;
11
- $surface: #1e1e2e;
12
- $background: #11111b;
13
- $text: #cdd6f4;
14
- $text-muted: #6c7086;
15
-
16
- /* ===== Root App ===== */
17
-
18
- Screen {
19
- background: $background;
20
- min-width: 89;
21
- min-height: 29;
22
- }
23
-
24
- /* ===== Size Warning Overlay ===== */
25
-
26
- #size-warning {
27
- dock: top;
28
- width: 100%;
29
- height: 100%;
30
- background: $background 95%;
31
- color: $warning;
32
- text-align: center;
33
- content-align: center middle;
34
- text-style: bold;
35
- padding: 2;
36
- layer: overlay;
37
- }
38
-
39
- /* ===== Header ===== */
40
-
41
- Header {
42
- background: $primary;
43
- color: $text;
44
- text-style: bold;
45
- height: 1;
46
- dock: top;
47
- }
48
-
49
- /* ===== Footer ===== */
50
-
51
- Footer {
52
- background: $surface;
53
- color: $text-muted;
54
- height: 1;
55
- dock: bottom;
56
- }
57
-
58
- FooterKey {
59
- background: transparent;
60
- color: $text-muted;
61
- }
62
-
63
- FooterKey > .footer-key--key {
64
- background: $primary;
65
- color: $text;
66
- }
67
-
68
- /* ===== Main Layout ===== */
69
-
70
- #main-container {
71
- layout: horizontal;
72
- height: 1fr;
73
- }
74
-
75
- /* ===== Sidebar (Directory Tree) ===== */
76
-
77
- #sidebar {
78
- width: 22;
79
- min-width: 18;
80
- max-width: 35;
81
- background: $surface;
82
- border-right: thick $primary;
83
- padding: 0;
84
- }
85
-
86
- #sidebar-title {
87
- background: $primary 20%;
88
- color: $text;
89
- text-style: bold;
90
- padding: 1;
91
- text-align: center;
92
- height: 3;
93
- }
94
-
95
- DirectoryTree {
96
- background: transparent;
97
- padding: 0 1;
98
- scrollbar-size: 1 1;
99
- }
100
-
101
- DirectoryTree > .directory-tree--folder {
102
- color: $secondary;
103
- }
104
-
105
- DirectoryTree > .directory-tree--file {
106
- color: $text;
107
- }
108
-
109
- DirectoryTree > .directory-tree--extension {
110
- color: $text-muted;
111
- }
112
-
113
- DirectoryTree:focus > .directory-tree--cursor {
114
- background: $primary 40%;
115
- }
116
-
117
- /* ===== Content Area ===== */
118
-
119
- #content-area {
120
- width: 1fr;
121
- layout: vertical;
122
- }
123
-
124
- /* ===== Conversation ===== */
125
-
126
- #conversation {
127
- height: 1fr;
128
- background: $background;
129
- }
130
-
131
- ConversationView {
132
- scrollbar-size: 1 1;
133
- }
134
-
135
- /* ===== Welcome Message ===== */
136
-
137
- #welcome {
138
- padding: 2 4;
139
- text-align: center;
140
- }
141
-
142
- #welcome Markdown {
143
- text-align: center;
144
- }
145
-
146
- /* ===== Input Area ===== */
147
-
148
- #input-container {
149
- height: auto;
150
- min-height: 4;
151
- max-height: 7;
152
- background: $background;
153
- padding: 1;
154
- margin-bottom: 1;
155
- }
156
-
157
- #prompt-input {
158
- background: transparent;
159
- border: round $primary;
160
- padding: 0 1;
161
- height: 3;
162
- }
163
-
164
- #prompt-input:focus {
165
- border: round $secondary;
166
- }
167
-
168
- Input.-valid {
169
- border: round $success;
170
- }
171
-
172
- Input > .input--placeholder {
173
- color: $text-muted;
174
- text-style: italic;
175
- }
176
-
177
- /* ===== Loading Spinner ===== */
178
-
179
- LoadingSpinner {
180
- background: $surface;
181
- margin: 0 2;
182
- padding: 1;
183
- border-left: thick $warning;
184
- }
185
-
186
- /* ===== Command Hints in Footer ===== */
187
-
188
- #command-hints {
189
- dock: bottom;
190
- height: 1;
191
- background: $surface;
192
- padding: 0 1;
193
- text-align: center;
194
- }
195
-
196
- .command-hint {
197
- margin: 0 1;
198
- color: $text-muted;
199
- }
200
-
201
- .command-key {
202
- color: $primary;
203
- text-style: bold;
204
- }
205
-
206
- /* ===== Markdown Styling ===== */
207
-
208
- Markdown {
209
- margin: 0;
210
- padding: 0;
211
- }
212
-
213
- MarkdownH1 {
214
- color: $primary;
215
- text-style: bold underline;
216
- margin: 1 0;
217
- }
218
-
219
- MarkdownH2 {
220
- color: $secondary;
221
- text-style: bold;
222
- margin: 1 0;
223
- }
224
-
225
- MarkdownH3 {
226
- color: $success;
227
- text-style: bold;
228
- margin: 1 0;
229
- }
230
-
231
- MarkdownFence {
232
- background: $surface;
233
- border: round #6c7086;
234
- margin: 1 0;
235
- padding: 1;
236
- }
237
-
238
- MarkdownBlockQuote {
239
- background: $primary 10%;
240
- border-left: thick $primary;
241
- padding: 0 1;
242
- margin: 1 0;
243
- }
244
-
245
- MarkdownBulletList {
246
- margin: 0;
247
- padding-left: 2;
248
- }
249
-
250
- MarkdownTable {
251
- margin: 1 0;
252
- }
253
-
254
- MarkdownTH {
255
- background: $primary 20%;
256
- text-style: bold;
257
- }
258
-
259
- MarkdownTD {
260
- padding: 0 1;
261
- }
262
-
263
- /* ===== Scrollbars ===== */
264
-
265
- Scrollbar {
266
- background: $surface;
267
- }
268
-
269
- ScrollbarSlider {
270
- color: $primary;
271
- }
272
-
273
- ScrollbarSlider:hover {
274
- color: $secondary;
275
- }
276
-
277
- /* ===== Theme Variants ===== */
278
-
279
- /* Ocean Theme */
280
- .theme-ocean Screen {
281
- background: #0f172a;
282
- }
283
-
284
- .theme-ocean Header {
285
- background: #3b82f6;
286
- color: #f1f5f9;
287
- }
288
-
289
- .theme-ocean Footer {
290
- background: #1e293b;
291
- color: #94a3b8;
292
- }
293
-
294
- .theme-ocean FooterKey > .footer-key--key {
295
- background: #3b82f6;
296
- color: #f1f5f9;
297
- }
298
-
299
- .theme-ocean #sidebar {
300
- background: #1e293b;
301
- border-right: thick #3b82f6;
302
- }
303
-
304
- .theme-ocean #sidebar-title {
305
- background: #3b82f6 20%;
306
- color: #f1f5f9;
307
- }
308
-
309
- .theme-ocean DirectoryTree > .directory-tree--folder {
310
- color: #06b6d4;
311
- }
312
-
313
- .theme-ocean DirectoryTree > .directory-tree--file {
314
- color: #f1f5f9;
315
- }
316
-
317
- .theme-ocean DirectoryTree > .directory-tree--extension {
318
- color: #94a3b8;
319
- }
320
-
321
- .theme-ocean DirectoryTree:focus > .directory-tree--cursor {
322
- background: #3b82f6 40%;
323
- }
324
-
325
- .theme-ocean #conversation {
326
- background: #0f172a;
327
- border-bottom: thick #1e293b;
328
- }
329
-
330
- .theme-ocean #input-container {
331
- background: #1e293b;
332
- border-top: thick #3b82f6;
333
- }
334
-
335
- .theme-ocean #prompt-input {
336
- background: #0f172a;
337
- border: round #3b82f6;
338
- }
339
-
340
- .theme-ocean #prompt-input:focus {
341
- border: round #06b6d4;
342
- }
343
-
344
- .theme-ocean Input.-valid {
345
- border: round #10b981;
346
- }
347
-
348
- .theme-ocean Input > .input--placeholder {
349
- color: #94a3b8;
350
- text-style: italic;
351
- }
352
-
353
- .theme-ocean LoadingSpinner {
354
- background: #1e293b;
355
- border-left: thick #f59e0b;
356
- }
357
-
358
- .theme-ocean #command-hints {
359
- background: #1e293b;
360
- }
361
-
362
- .theme-ocean .command-hint {
363
- color: #94a3b8;
364
- }
365
-
366
- .theme-ocean .command-key {
367
- color: #3b82f6;
368
- }
369
-
370
- .theme-ocean MarkdownH1 {
371
- color: #3b82f6;
372
- }
373
-
374
- .theme-ocean MarkdownH2 {
375
- color: #06b6d4;
376
- }
377
-
378
- .theme-ocean MarkdownH3 {
379
- color: #10b981;
380
- }
381
-
382
- .theme-ocean MarkdownFence {
383
- background: #1e293b;
384
- border: round #94a3b8;
385
- }
386
-
387
- .theme-ocean MarkdownBlockQuote {
388
- background: #3b82f6 10%;
389
- border-left: thick #3b82f6;
390
- }
391
-
392
- .theme-ocean MarkdownTH {
393
- background: #3b82f6 20%;
394
- }
395
-
396
- .theme-ocean Scrollbar {
397
- background: #1e293b;
398
- }
399
-
400
- .theme-ocean ScrollbarSlider {
401
- color: #3b82f6;
402
- }
403
-
404
- .theme-ocean ScrollbarSlider:hover {
405
- color: #06b6d4;
406
- }
407
-
408
- /* Forest Theme */
409
- .theme-forest Screen {
410
- background: #0d1f0d;
411
- }
412
-
413
- .theme-forest Header {
414
- background: #16a34a;
415
- color: #dcfce7;
416
- }
417
-
418
- .theme-forest Footer {
419
- background: #0f2f0f;
420
- color: #6ee7b7;
421
- }
422
-
423
- .theme-forest FooterKey > .footer-key--key {
424
- background: #16a34a;
425
- color: #dcfce7;
426
- }
427
-
428
- .theme-forest #sidebar {
429
- background: #0f2f0f;
430
- border-right: thick #16a34a;
431
- }
432
-
433
- .theme-forest #sidebar-title {
434
- background: #16a34a 20%;
435
- color: #dcfce7;
436
- }
437
-
438
- .theme-forest DirectoryTree > .directory-tree--folder {
439
- color: #0891b2;
440
- }
441
-
442
- .theme-forest DirectoryTree > .directory-tree--file {
443
- color: #dcfce7;
444
- }
445
-
446
- .theme-forest DirectoryTree > .directory-tree--extension {
447
- color: #6ee7b7;
448
- }
449
-
450
- .theme-forest DirectoryTree:focus > .directory-tree--cursor {
451
- background: #16a34a 40%;
452
- }
453
-
454
- .theme-forest #conversation {
455
- background: #0d1f0d;
456
- border-bottom: thick #0f2f0f;
457
- }
458
-
459
- .theme-forest #input-container {
460
- background: #0f2f0f;
461
- border-top: thick #16a34a;
462
- }
463
-
464
- .theme-forest #prompt-input {
465
- background: #0d1f0d;
466
- border: round #16a34a;
467
- }
468
-
469
- .theme-forest #prompt-input:focus {
470
- border: round #0891b2;
471
- }
472
-
473
- .theme-forest Input.-valid {
474
- border: round #22c55e;
475
- }
476
-
477
- .theme-forest Input > .input--placeholder {
478
- color: #6ee7b7;
479
- text-style: italic;
480
- }
481
-
482
- .theme-forest LoadingSpinner {
483
- background: #0f2f0f;
484
- border-left: thick #eab308;
485
- }
486
-
487
- .theme-forest #command-hints {
488
- background: #0f2f0f;
489
- }
490
-
491
- .theme-forest .command-hint {
492
- color: #6ee7b7;
493
- }
494
-
495
- .theme-forest .command-key {
496
- color: #16a34a;
497
- }
498
-
499
- .theme-forest MarkdownH1 {
500
- color: #16a34a;
501
- }
502
-
503
- .theme-forest MarkdownH2 {
504
- color: #0891b2;
505
- }
506
-
507
- .theme-forest MarkdownH3 {
508
- color: #22c55e;
509
- }
510
-
511
- .theme-forest MarkdownFence {
512
- background: #0f2f0f;
513
- border: round #6ee7b7;
514
- }
515
-
516
- .theme-forest MarkdownBlockQuote {
517
- background: #16a34a 10%;
518
- border-left: thick #16a34a;
519
- }
520
-
521
- .theme-forest MarkdownTH {
522
- background: #16a34a 20%;
523
- }
524
-
525
- .theme-forest Scrollbar {
526
- background: #0f2f0f;
527
- }
528
-
529
- .theme-forest ScrollbarSlider {
530
- color: #16a34a;
531
- }
532
-
533
- .theme-forest ScrollbarSlider:hover {
534
- color: #0891b2;
535
- }
536
-
537
- /* Sunset Theme */
538
- .theme-sunset Screen {
539
- background: #1f1315;
540
- }
541
-
542
- .theme-sunset Header {
543
- background: #dc2626;
544
- color: #fef2f2;
545
- }
546
-
547
- .theme-sunset Footer {
548
- background: #2f171a;
549
- color: #fecaca;
550
- }
551
-
552
- .theme-sunset FooterKey > .footer-key--key {
553
- background: #dc2626;
554
- color: #fef2f2;
555
- }
556
-
557
- .theme-sunset #sidebar {
558
- background: #2f171a;
559
- border-right: thick #dc2626;
560
- }
561
-
562
- .theme-sunset #sidebar-title {
563
- background: #dc2626 20%;
564
- color: #fef2f2;
565
- }
566
-
567
- .theme-sunset DirectoryTree > .directory-tree--folder {
568
- color: #ea580c;
569
- }
570
-
571
- .theme-sunset DirectoryTree > .directory-tree--file {
572
- color: #fef2f2;
573
- }
574
-
575
- .theme-sunset DirectoryTree > .directory-tree--extension {
576
- color: #fecaca;
577
- }
578
-
579
- .theme-sunset DirectoryTree:focus > .directory-tree--cursor {
580
- background: #dc2626 40%;
581
- }
582
-
583
- .theme-sunset #conversation {
584
- background: #1f1315;
585
- border-bottom: thick #2f171a;
586
- }
587
-
588
- .theme-sunset #input-container {
589
- background: #2f171a;
590
- border-top: thick #dc2626;
591
- }
592
-
593
- .theme-sunset #prompt-input {
594
- background: #1f1315;
595
- border: round #dc2626;
596
- }
597
-
598
- .theme-sunset #prompt-input:focus {
599
- border: round #ea580c;
600
- }
601
-
602
- .theme-sunset Input.-valid {
603
- border: round #16a34a;
604
- }
605
-
606
- .theme-sunset Input > .input--placeholder {
607
- color: #fecaca;
608
- text-style: italic;
609
- }
610
-
611
- .theme-sunset LoadingSpinner {
612
- background: #2f171a;
613
- border-left: thick #eab308;
614
- }
615
-
616
- .theme-sunset #command-hints {
617
- background: #2f171a;
618
- }
619
-
620
- .theme-sunset .command-hint {
621
- color: #fecaca;
622
- }
623
-
624
- .theme-sunset .command-key {
625
- color: #dc2626;
626
- }
627
-
628
- .theme-sunset MarkdownH1 {
629
- color: #dc2626;
630
- }
631
-
632
- .theme-sunset MarkdownH2 {
633
- color: #ea580c;
634
- }
635
-
636
- .theme-sunset MarkdownH3 {
637
- color: #16a34a;
638
- }
639
-
640
- .theme-sunset MarkdownFence {
641
- background: #2f171a;
642
- border: round #fecaca;
643
- }
644
-
645
- .theme-sunset MarkdownBlockQuote {
646
- background: #dc2626 10%;
647
- border-left: thick #dc2626;
648
- }
649
-
650
- .theme-sunset MarkdownTH {
651
- background: #dc2626 20%;
652
- }
653
-
654
- .theme-sunset Scrollbar {
655
- background: #2f171a;
656
- }
657
-
658
- .theme-sunset ScrollbarSlider {
659
- color: #dc2626;
660
- }
661
-
662
- .theme-sunset ScrollbarSlider:hover {
663
- color: #ea580c;
664
- }
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes