codexmate 0.0.56 → 0.1.1

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 (42) hide show
  1. package/README.md +2 -2
  2. package/README.vi.md +1 -0
  3. package/README.zh.md +2 -2
  4. package/cli/openai-bridge-retry.js +62 -0
  5. package/cli/openai-bridge-runtime.js +1819 -0
  6. package/cli/openai-bridge.js +137 -2048
  7. package/cli.js +749 -133
  8. package/lib/task-orchestrator.js +90 -21
  9. package/lib/task-workspace-chat.js +292 -0
  10. package/package.json +2 -2
  11. package/web-ui/app.js +67 -131
  12. package/web-ui/modules/app.computed.main-tabs.mjs +304 -7
  13. package/web-ui/modules/app.methods.agents.mjs +192 -1
  14. package/web-ui/modules/app.methods.claude-config.mjs +65 -25
  15. package/web-ui/modules/app.methods.navigation.mjs +67 -83
  16. package/web-ui/modules/app.methods.openclaw-editing.mjs +3 -6
  17. package/web-ui/modules/app.methods.providers.mjs +40 -10
  18. package/web-ui/modules/app.methods.session-actions.mjs +1 -12
  19. package/web-ui/modules/app.methods.session-browser.mjs +23 -54
  20. package/web-ui/modules/app.methods.session-trash.mjs +0 -1
  21. package/web-ui/modules/app.methods.startup-claude.mjs +16 -31
  22. package/web-ui/modules/app.methods.task-orchestration.mjs +347 -8
  23. package/web-ui/modules/app.methods.tool-config-permissions.mjs +0 -3
  24. package/web-ui/modules/app.methods.web-ui-preferences.mjs +442 -68
  25. package/web-ui/modules/config-template-confirm-pref.mjs +2 -3
  26. package/web-ui/modules/i18n/locales/en.mjs +181 -30
  27. package/web-ui/modules/i18n/locales/ja.mjs +178 -27
  28. package/web-ui/modules/i18n/locales/vi.mjs +180 -29
  29. package/web-ui/modules/i18n/locales/zh-tw.mjs +181 -30
  30. package/web-ui/modules/i18n/locales/zh.mjs +183 -32
  31. package/web-ui/modules/i18n.mjs +5 -12
  32. package/web-ui/modules/sessions-filters-url.mjs +1 -2
  33. package/web-ui/partials/index/layout-header.html +44 -38
  34. package/web-ui/partials/index/modals-basic.html +26 -0
  35. package/web-ui/partials/index/panel-orchestration.html +489 -282
  36. package/web-ui/partials/index/panel-prompts.html +66 -3
  37. package/web-ui/res/web-ui-render.precompiled.js +1181 -604
  38. package/web-ui/styles/layout-shell.css +157 -1
  39. package/web-ui/styles/modals-core.css +173 -0
  40. package/web-ui/styles/navigation-panels.css +11 -0
  41. package/web-ui/styles/responsive.css +32 -0
  42. package/web-ui/styles/task-orchestration.css +2161 -4
@@ -21,6 +21,7 @@ body::after {
21
21
 
22
22
  :root {
23
23
  --side-rail-width: 248px;
24
+ --side-rail-collapsed-width: 136px;
24
25
  }
25
26
 
26
27
  /* ============================================
@@ -28,7 +29,7 @@ body::after {
28
29
  ============================================ */
29
30
  .app-shell {
30
31
  display: grid;
31
- grid-template-columns: 248px minmax(0, 1fr);
32
+ grid-template-columns: var(--side-rail-width, 248px) minmax(0, 1fr);
32
33
  gap: 0;
33
34
  align-items: stretch;
34
35
  min-height: 100vh;
@@ -37,6 +38,10 @@ body::after {
37
38
  background: transparent;
38
39
  }
39
40
 
41
+ .app-shell.sidebar-collapsed {
42
+ --side-rail-width: var(--side-rail-collapsed-width, 136px);
43
+ }
44
+
40
45
  .app-shell.standalone {
41
46
  grid-template-columns: 1fr;
42
47
  }
@@ -58,6 +63,40 @@ body::after {
58
63
  scrollbar-width: none;
59
64
  -ms-overflow-style: none;
60
65
  backdrop-filter: blur(18px) saturate(130%);
66
+ width: var(--side-rail-width, 248px);
67
+ transition: width 180ms var(--ease-out-expo), padding 180ms var(--ease-out-expo);
68
+ }
69
+
70
+ .side-rail-collapse-toggle {
71
+ position: absolute;
72
+ top: 50%;
73
+ right: -13px;
74
+ z-index: 5;
75
+ width: 26px;
76
+ height: 26px;
77
+ border-radius: 999px;
78
+ border: 1px solid rgba(137, 111, 94, 0.18);
79
+ background: rgba(255, 253, 250, 0.96);
80
+ color: var(--color-text-secondary);
81
+ box-shadow: 0 8px 18px rgba(92, 68, 52, 0.10);
82
+ cursor: pointer;
83
+ display: inline-flex;
84
+ align-items: center;
85
+ justify-content: center;
86
+ font-size: 18px;
87
+ line-height: 1;
88
+ transform: translateY(-50%);
89
+ transition: color 160ms var(--ease-out-expo), border-color 160ms var(--ease-out-expo), transform 160ms var(--ease-out-expo);
90
+ }
91
+
92
+ .side-rail-collapse-toggle:hover {
93
+ color: var(--color-brand-dark);
94
+ border-color: rgba(200, 121, 99, 0.35);
95
+ transform: translate(-1px, -50%);
96
+ }
97
+
98
+ .sidebar-collapsed .side-rail-collapse-toggle:hover {
99
+ transform: translate(1px, -50%);
61
100
  }
62
101
 
63
102
  .side-rail::-webkit-scrollbar {
@@ -80,6 +119,7 @@ body::after {
80
119
  flex-direction: column;
81
120
  flex: 1 1 auto;
82
121
  gap: 0;
122
+ padding-bottom: 64px;
83
123
  overflow-y: auto;
84
124
  scrollbar-width: none;
85
125
  -ms-overflow-style: none;
@@ -356,6 +396,19 @@ body::after {
356
396
  position: relative;
357
397
  }
358
398
 
399
+ .side-item-icon {
400
+ display: none;
401
+ width: 28px;
402
+ height: 28px;
403
+ border-radius: 10px;
404
+ align-items: center;
405
+ justify-content: center;
406
+ font-size: 15px;
407
+ font-weight: 700;
408
+ line-height: 1;
409
+ color: currentColor;
410
+ }
411
+
359
412
  .side-item::before {
360
413
  content: "";
361
414
  position: absolute;
@@ -374,6 +427,17 @@ body::after {
374
427
  transform: translateX(2px);
375
428
  }
376
429
 
430
+ .side-item.side-item-disabled,
431
+ .side-item.side-item-disabled:hover {
432
+ border-color: transparent;
433
+ background: transparent;
434
+ color: var(--color-text-muted);
435
+ cursor: not-allowed;
436
+ opacity: 0.62;
437
+ transform: none;
438
+ box-shadow: none;
439
+ }
440
+
377
441
  .side-item.active,
378
442
  .side-item.nav-intent-active {
379
443
  border-color: rgba(200, 121, 99, 0.22);
@@ -438,6 +502,98 @@ body::after {
438
502
  flex: 0 0 auto;
439
503
  }
440
504
 
505
+ .sidebar-collapsed .side-rail {
506
+ padding: 14px 8px;
507
+ }
508
+
509
+ .sidebar-collapsed .brand-block {
510
+ padding: 14px 6px 16px;
511
+ align-items: stretch;
512
+ }
513
+
514
+ .sidebar-collapsed .brand-head {
515
+ justify-content: flex-start;
516
+ gap: 8px;
517
+ }
518
+
519
+ .sidebar-collapsed .side-item-meta {
520
+ display: none;
521
+ }
522
+
523
+ .sidebar-collapsed .brand-copy,
524
+ .sidebar-collapsed .side-update-copy {
525
+ display: flex;
526
+ }
527
+
528
+ .sidebar-collapsed .brand-kicker {
529
+ font-size: 13px;
530
+ white-space: nowrap;
531
+ }
532
+
533
+ .sidebar-collapsed .side-update-notice {
534
+ padding: 7px 8px;
535
+ gap: 6px;
536
+ }
537
+
538
+ .sidebar-collapsed .side-section {
539
+ padding: 5px 0;
540
+ align-items: stretch;
541
+ }
542
+
543
+ .sidebar-collapsed .side-section + .side-section {
544
+ border-top-color: rgba(137, 111, 94, 0.06);
545
+ }
546
+
547
+ .sidebar-collapsed .side-item {
548
+ width: 100%;
549
+ min-height: 36px;
550
+ padding: 8px 10px;
551
+ align-items: center;
552
+ justify-content: center;
553
+ text-align: center;
554
+ gap: 0;
555
+ border-radius: 14px;
556
+ }
557
+
558
+ .sidebar-collapsed .side-item-icon {
559
+ display: none;
560
+ }
561
+
562
+ .sidebar-collapsed .side-section-title {
563
+ display: block;
564
+ padding: 0 10px;
565
+ margin: 4px 0 5px;
566
+ text-align: left;
567
+ white-space: nowrap;
568
+ }
569
+
570
+ .sidebar-collapsed .side-item-title {
571
+ display: block;
572
+ max-width: 100%;
573
+ white-space: nowrap;
574
+ font-size: 12px;
575
+ line-height: 1.2;
576
+ }
577
+
578
+ .sidebar-collapsed .side-item::before {
579
+ left: -3px;
580
+ }
581
+
582
+ .sidebar-collapsed .side-rail-lang {
583
+ padding-inline: 4px;
584
+ }
585
+
586
+ .sidebar-collapsed .side-rail-lang-actions {
587
+ justify-content: center;
588
+ width: calc(100% - 8px);
589
+ }
590
+
591
+ .sidebar-collapsed .side-rail-lang .language-settings-link {
592
+ display: inline-flex;
593
+ padding-inline: 10px;
594
+ font-size: 12px;
595
+ }
596
+
441
597
  @media (min-width: 721px) {
442
598
  body:not(.force-compact) #app > .top-tabs {
443
599
  display: none;
@@ -693,3 +693,176 @@
693
693
  from { opacity: 0; transform: translateY(-8px); }
694
694
  to { opacity: 1; transform: translateY(0); }
695
695
  }
696
+
697
+ .prompts-md-tabs {
698
+ display: inline-flex;
699
+ align-items: center;
700
+ gap: 2px;
701
+ margin: 0 0 12px;
702
+ border-bottom: 1px solid var(--color-border-soft);
703
+ }
704
+
705
+ .prompts-md-tab {
706
+ padding: 7px 10px 8px;
707
+ border: 0;
708
+ border-bottom: 2px solid transparent;
709
+ background: transparent;
710
+ box-shadow: none;
711
+ color: var(--color-text-secondary);
712
+ cursor: pointer;
713
+ font-size: var(--font-size-body);
714
+ font-weight: var(--font-weight-secondary);
715
+ }
716
+
717
+ .prompts-md-tab:hover {
718
+ color: var(--color-text-primary);
719
+ background: transparent;
720
+ }
721
+
722
+ .prompts-md-tab.active {
723
+ color: var(--color-brand-dark);
724
+ border-bottom-color: var(--color-brand);
725
+ background: transparent;
726
+ box-shadow: none;
727
+ }
728
+
729
+ .prompt-presets-inline-row {
730
+ display: flex;
731
+ align-items: center;
732
+ gap: 10px;
733
+ margin: 8px 0 12px;
734
+ padding: 10px 12px;
735
+ border: 1px solid var(--color-border-soft);
736
+ border-radius: var(--radius-md);
737
+ background: var(--color-bg-card);
738
+ }
739
+
740
+ .prompt-presets-inline-group {
741
+ display: flex;
742
+ align-items: center;
743
+ gap: 8px;
744
+ min-width: 0;
745
+ }
746
+
747
+ .prompt-presets-inline-group--save {
748
+ flex: 1;
749
+ justify-content: flex-end;
750
+ }
751
+
752
+ .prompt-presets-inline-label {
753
+ flex-shrink: 0;
754
+ color: var(--color-text-secondary);
755
+ font-size: var(--font-size-small);
756
+ }
757
+
758
+ .prompt-presets-select {
759
+ min-width: 180px;
760
+ }
761
+
762
+ .prompt-presets-panel {
763
+ margin: 12px 0;
764
+ border: 1px solid var(--color-border-soft);
765
+ border-radius: var(--radius-md);
766
+ background: var(--color-bg-card);
767
+ }
768
+
769
+ .prompt-presets-summary {
770
+ display: flex;
771
+ align-items: baseline;
772
+ gap: 10px;
773
+ padding: 10px 12px;
774
+ cursor: pointer;
775
+ color: var(--color-text-primary);
776
+ font-weight: var(--font-weight-primary);
777
+ }
778
+
779
+ .prompt-presets-summary small {
780
+ color: var(--color-text-secondary);
781
+ font-weight: 400;
782
+ }
783
+
784
+ .prompt-presets-toolbar {
785
+ padding: 0 12px 10px;
786
+ }
787
+
788
+ .prompt-presets-save-row {
789
+ gap: 8px;
790
+ }
791
+
792
+ .prompt-presets-name-input {
793
+ width: min(340px, 34vw);
794
+ }
795
+
796
+ .prompt-presets-body {
797
+ min-height: 0;
798
+ margin: 0;
799
+ padding: 0 12px 12px;
800
+ }
801
+
802
+ .prompt-presets-frame {
803
+ max-height: 320px;
804
+ min-height: 0;
805
+ overflow: auto;
806
+ background: var(--color-bg-card);
807
+ }
808
+
809
+ .prompt-presets-empty {
810
+ margin: 0;
811
+ min-height: 120px;
812
+ display: flex;
813
+ align-items: center;
814
+ justify-content: center;
815
+ border: none;
816
+ background: transparent;
817
+ }
818
+
819
+ .prompt-presets-list {
820
+ display: flex;
821
+ flex-direction: column;
822
+ }
823
+
824
+ .prompt-preset-row {
825
+ display: grid;
826
+ grid-template-columns: minmax(0, 1fr) auto;
827
+ gap: 12px;
828
+ padding: 12px;
829
+ border-bottom: 1px solid var(--color-border-soft);
830
+ background: transparent;
831
+ }
832
+
833
+ .prompt-preset-row:last-child {
834
+ border-bottom: none;
835
+ }
836
+
837
+ .prompt-preset-main {
838
+ min-width: 0;
839
+ }
840
+
841
+ .prompt-preset-name {
842
+ font-weight: var(--font-weight-primary);
843
+ }
844
+
845
+ .prompt-preset-preview {
846
+ max-height: 180px;
847
+ margin: 8px 0 0;
848
+ padding: 10px;
849
+ overflow: auto;
850
+ white-space: pre-wrap;
851
+ word-break: break-word;
852
+ border-radius: var(--radius-sm);
853
+ background: var(--color-bg-subtle);
854
+ color: var(--color-text-secondary);
855
+ font-family: var(--font-family-mono);
856
+ font-size: 11px;
857
+ }
858
+
859
+ .prompt-preset-actions {
860
+ align-self: start;
861
+ flex-wrap: wrap;
862
+ justify-content: flex-end;
863
+ max-width: 260px;
864
+ }
865
+
866
+ .btn-danger-mini {
867
+ color: var(--color-danger);
868
+ }
@@ -305,6 +305,17 @@
305
305
  transform: translateY(-1px);
306
306
  }
307
307
 
308
+ .top-tab.top-tab-disabled,
309
+ .top-tab.top-tab-disabled:hover {
310
+ border-color: var(--color-border-soft);
311
+ background: rgba(255, 255, 255, 0.38);
312
+ color: var(--color-text-muted);
313
+ cursor: not-allowed;
314
+ opacity: 0.64;
315
+ transform: none;
316
+ box-shadow: none;
317
+ }
318
+
308
319
  .top-tab.active,
309
320
  .top-tab.nav-intent-active {
310
321
  border-color: rgba(200, 121, 99, 0.28);
@@ -199,6 +199,22 @@ textarea:focus-visible {
199
199
  flex-wrap: wrap;
200
200
  }
201
201
 
202
+ .prompt-presets-inline-row {
203
+ align-items: stretch;
204
+ flex-direction: column;
205
+ }
206
+
207
+ .prompt-presets-inline-group,
208
+ .prompt-presets-inline-group--save {
209
+ width: 100%;
210
+ justify-content: flex-start;
211
+ }
212
+
213
+ .prompt-presets-select,
214
+ .prompt-presets-name-input {
215
+ width: 100%;
216
+ }
217
+
202
218
  .template-editor,
203
219
  .agents-diff-editor {
204
220
  min-height: min(50vh, 400px);
@@ -604,6 +620,22 @@ textarea:focus-visible {
604
620
  width: 100%;
605
621
  flex-wrap: wrap;
606
622
  }
623
+
624
+ .prompt-presets-inline-row {
625
+ align-items: stretch;
626
+ flex-direction: column;
627
+ }
628
+
629
+ .prompt-presets-inline-group,
630
+ .prompt-presets-inline-group--save {
631
+ width: 100%;
632
+ justify-content: flex-start;
633
+ }
634
+
635
+ .prompt-presets-select,
636
+ .prompt-presets-name-input {
637
+ width: 100%;
638
+ }
607
639
  }
608
640
 
609
641
  @media (max-width: 820px) {