kader 0.1.5__py3-none-any.whl → 0.1.6__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.
cli/app.py CHANGED
@@ -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)
cli/app.tcss CHANGED
@@ -274,391 +274,16 @@ ScrollbarSlider:hover {
274
274
  color: $secondary;
275
275
  }
276
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
- }
277
+ /* ===== Scrollbars ===== */
649
278
 
650
- .theme-sunset MarkdownTH {
651
- background: #dc2626 20%;
279
+ Scrollbar {
280
+ background: $surface;
652
281
  }
653
282
 
654
- .theme-sunset Scrollbar {
655
- background: #2f171a;
283
+ ScrollbarSlider {
284
+ color: $primary;
656
285
  }
657
286
 
658
- .theme-sunset ScrollbarSlider {
659
- color: #dc2626;
287
+ ScrollbarSlider:hover {
288
+ color: $secondary;
660
289
  }
661
-
662
- .theme-sunset ScrollbarSlider:hover {
663
- color: #ea580c;
664
- }
cli/utils.py CHANGED
@@ -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
  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
@@ -1,9 +1,9 @@
1
1
  cli/README.md,sha256=DY3X7w6LPka1GzhtTrGwhpkFmx0YyRpcTCHjFmti3Yg,4654
2
2
  cli/__init__.py,sha256=OAi_KSwcuYXR0sRxKuw1DYQrz1jbu8p7vn41_99f36I,107
3
3
  cli/__main__.py,sha256=xO2JVjCsh691b-cjSBAEKocJeUeI3P0gfUqM-f1Mp1A,95
4
- cli/app.py,sha256=-Kd3gK_UFPIC5Ky3J-6VgbtqP4QLYinpa4ZX1LHYC3U,26054
5
- cli/app.tcss,sha256=BPwrPt2kxJI9GRHmHg-52XOPgRKkTqORgJCaxGpZTew,10374
6
- cli/utils.py,sha256=ySTPf1xX7D26NgglChXX5NVhtYjmnFn1axL8HDrDn2U,1877
4
+ cli/app.py,sha256=Gh5QgDwBkhQtM6dJuIY8erVCuMnDOe5pBrlyLx9ihiA,24809
5
+ cli/app.tcss,sha256=2SeoN-1FrvYu9ERIPxSyGzz9evtb_-YjT4j0VOJsmzg,4207
6
+ cli/utils.py,sha256=BcvQJWGyIC3wm5yT18Py7F7dcyT-h0W6F7AZwHovbS8,1729
7
7
  cli/widgets/__init__.py,sha256=1vj31CrJyxZROLthkKr79i_GbNyj8g3q60ZQPbJHK5k,300
8
8
  cli/widgets/confirmation.py,sha256=7hXqGyhW5V9fmtjgiWR4z2fJWmKxWhUH9RigqDrTKp4,9396
9
9
  cli/widgets/conversation.py,sha256=tW2Euox239B9avkGqmRnVwP1RMLd3oGFpjRrAyS4rn0,1519
@@ -39,7 +39,7 @@ kader/tools/rag.py,sha256=37Nd49D5R_DlWmMyhSdSvst_XFOnoxpaFNtlbLEt6qM,15653
39
39
  kader/tools/todo.py,sha256=omirxoG7_KVHAmMoD12DGmn7scqRaewbI1cqWm0ShUo,7735
40
40
  kader/tools/utils.py,sha256=bfq7b1vpA1qBaL_QZYBFTqOM35-omu_UeDjo6v0rxEg,14176
41
41
  kader/tools/web.py,sha256=2Aqy0nO7ZwNLAqE9IWjCg5y8qnhbt-AIZOHy02XgbxA,8464
42
- kader-0.1.5.dist-info/METADATA,sha256=YASfdVzY-r5WWh0Yvz134_R0Xo_WEsGt4fdQxmKpPZk,9521
43
- kader-0.1.5.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
44
- kader-0.1.5.dist-info/entry_points.txt,sha256=TK0VOtrfDFqZ8JQfxpuAHHvDLHyoiafUjS-VOixl02c,39
45
- kader-0.1.5.dist-info/RECORD,,
42
+ kader-0.1.6.dist-info/METADATA,sha256=u3PFuX7e__OMAAhf2UGjxTY-BF90AvVQQFM47jw0EfI,9521
43
+ kader-0.1.6.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
44
+ kader-0.1.6.dist-info/entry_points.txt,sha256=TK0VOtrfDFqZ8JQfxpuAHHvDLHyoiafUjS-VOixl02c,39
45
+ kader-0.1.6.dist-info/RECORD,,
File without changes