codexmate 0.0.54 → 0.0.56

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 +3 -0
  2. package/README.vi.md +172 -0
  3. package/README.zh.md +2 -0
  4. package/cli/local-bridge.js +221 -22
  5. package/cli.js +666 -6
  6. package/package.json +1 -1
  7. package/web-ui/app.js +40 -0
  8. package/web-ui/logic.claude.mjs +8 -0
  9. package/web-ui/modules/app.computed.session.mjs +210 -0
  10. package/web-ui/modules/app.methods.claude-config.mjs +196 -13
  11. package/web-ui/modules/app.methods.codex-config.mjs +294 -65
  12. package/web-ui/modules/app.methods.index.mjs +4 -0
  13. package/web-ui/modules/app.methods.navigation.mjs +7 -1
  14. package/web-ui/modules/app.methods.provider-cache.mjs +223 -0
  15. package/web-ui/modules/app.methods.providers.mjs +15 -1
  16. package/web-ui/modules/app.methods.runtime.mjs +7 -2
  17. package/web-ui/modules/app.methods.session-actions.mjs +36 -0
  18. package/web-ui/modules/app.methods.session-browser.mjs +3 -0
  19. package/web-ui/modules/app.methods.session-trash.mjs +3 -0
  20. package/web-ui/modules/app.methods.startup-claude.mjs +47 -4
  21. package/web-ui/modules/app.methods.web-ui-preferences.mjs +161 -0
  22. package/web-ui/modules/i18n/locales/en.mjs +106 -3
  23. package/web-ui/modules/i18n/locales/ja.mjs +103 -3
  24. package/web-ui/modules/i18n/locales/vi.mjs +950 -0
  25. package/web-ui/modules/i18n/locales/zh-tw.mjs +103 -3
  26. package/web-ui/modules/i18n/locales/zh.mjs +103 -3
  27. package/web-ui/modules/provider-default-names.mjs +25 -0
  28. package/web-ui/partials/index/layout-header.html +18 -5
  29. package/web-ui/partials/index/modal-health-check.html +69 -5
  30. package/web-ui/partials/index/modals-basic.html +182 -0
  31. package/web-ui/partials/index/panel-config-codex.html +2 -2
  32. package/web-ui/partials/index/panel-sessions.html +99 -19
  33. package/web-ui/partials/index/panel-settings.html +20 -0
  34. package/web-ui/res/web-ui-render.precompiled.js +742 -113
  35. package/web-ui/session-helpers.mjs +4 -1
  36. package/web-ui/styles/layout-shell.css +51 -1
  37. package/web-ui/styles/responsive.css +98 -0
  38. package/web-ui/styles/sessions-preview.css +212 -2
  39. package/web-ui/styles/sessions-toolbar-trash.css +61 -18
  40. package/web-ui/styles/settings-panel.css +398 -0
  41. package/web-ui/styles/skills-list.css +122 -0
  42. package/web-ui/styles/titles-cards.css +52 -0
@@ -464,3 +464,401 @@
464
464
  .settings-language-select {
465
465
  max-width: 280px;
466
466
  }
467
+
468
+ /* ---- Provider cache records ---- */
469
+ .project-announcement-overlay {
470
+ background:
471
+ radial-gradient(circle at 50% 15%, rgba(255, 248, 241, 0.12), rgba(255, 248, 241, 0) 34%),
472
+ linear-gradient(to bottom, rgba(31, 26, 23, 0.48) 0%, rgba(31, 26, 23, 0.68) 100%);
473
+ backdrop-filter: blur(10px) saturate(120%);
474
+ -webkit-backdrop-filter: blur(10px) saturate(120%);
475
+ }
476
+
477
+ .provider-cache-announcement-modal {
478
+ position: relative;
479
+ width: min(720px, calc(100vw - 32px));
480
+ max-width: min(720px, calc(100vw - 32px));
481
+ max-height: min(86vh, 900px);
482
+ display: flex;
483
+ flex-direction: column;
484
+ overflow: hidden;
485
+ background: rgba(255, 253, 250, 0.985);
486
+ border-color: rgba(137, 111, 94, 0.22);
487
+ font-size: 12px;
488
+ }
489
+
490
+ .project-announcement-close {
491
+ position: absolute;
492
+ top: 12px;
493
+ right: 12px;
494
+ width: 30px;
495
+ height: 30px;
496
+ display: grid;
497
+ place-items: center;
498
+ border: 1px solid rgba(137, 111, 94, 0.18);
499
+ border-radius: 999px;
500
+ background: rgba(255, 255, 255, 0.74);
501
+ color: var(--color-text-tertiary);
502
+ font-size: 18px;
503
+ line-height: 1;
504
+ cursor: pointer;
505
+ }
506
+
507
+ .project-announcement-close:hover {
508
+ color: var(--color-text-primary);
509
+ border-color: rgba(200, 121, 99, 0.42);
510
+ }
511
+
512
+ .project-announcement-header {
513
+ padding-right: 36px;
514
+ }
515
+
516
+ .project-announcement-eyebrow {
517
+ margin-bottom: 6px;
518
+ color: var(--color-brand);
519
+ font-size: 11px;
520
+ font-weight: 800;
521
+ letter-spacing: 0.08em;
522
+ text-transform: uppercase;
523
+ }
524
+
525
+ .project-announcement-title {
526
+ margin-bottom: 8px;
527
+ font-size: 22px;
528
+ line-height: 1.2;
529
+ }
530
+
531
+ .provider-cache-announcement-lede {
532
+ max-width: 620px;
533
+ }
534
+
535
+ .project-announcement-feature-grid {
536
+ display: grid;
537
+ grid-template-columns: repeat(3, minmax(0, 1fr));
538
+ gap: 10px;
539
+ margin-top: 16px;
540
+ }
541
+
542
+ .project-announcement-feature-card {
543
+ border: 1px solid rgba(137, 111, 94, 0.13);
544
+ border-radius: 14px;
545
+ background: rgba(255, 253, 252, 0.86);
546
+ padding: 11px;
547
+ }
548
+
549
+ .project-announcement-feature-title,
550
+ .project-announcement-section-title {
551
+ font-weight: 800;
552
+ color: var(--color-text-primary);
553
+ }
554
+
555
+ .project-announcement-feature-meta,
556
+ .project-announcement-section-meta {
557
+ margin-top: 4px;
558
+ color: var(--color-text-secondary);
559
+ font-size: 11px;
560
+ line-height: 1.45;
561
+ }
562
+
563
+ .project-announcement-mini-status {
564
+ display: flex;
565
+ flex-wrap: wrap;
566
+ gap: 5px 10px;
567
+ padding: 7px 9px;
568
+ border-radius: 10px;
569
+ background: rgba(255, 253, 252, 0.52);
570
+ color: var(--color-text-tertiary);
571
+ font-size: 10px;
572
+ }
573
+
574
+ .project-announcement-mini-status strong {
575
+ color: var(--color-text-secondary);
576
+ font-weight: 700;
577
+ overflow-wrap: anywhere;
578
+ }
579
+
580
+ .project-announcement-cache-section {
581
+ margin-top: 14px;
582
+ border: 1px solid rgba(137, 111, 94, 0.10);
583
+ border-radius: 13px;
584
+ background: rgba(247, 240, 233, 0.22);
585
+ overflow: hidden;
586
+ }
587
+
588
+ .project-announcement-section-head {
589
+ display: flex;
590
+ justify-content: space-between;
591
+ gap: 12px;
592
+ align-items: flex-start;
593
+ padding: 9px 11px;
594
+ cursor: pointer;
595
+ list-style-position: inside;
596
+ }
597
+
598
+ .project-announcement-section-head .provider-cache-loaded-at {
599
+ flex-shrink: 0;
600
+ color: var(--color-text-tertiary);
601
+ font-size: 10px;
602
+ }
603
+
604
+ .provider-cache-announcement-body {
605
+ display: flex;
606
+ flex-direction: column;
607
+ gap: 10px;
608
+ padding: 0 11px 11px;
609
+ }
610
+
611
+ .provider-cache-announcement-copy {
612
+ margin: 0;
613
+ color: var(--color-text-secondary);
614
+ font-size: 12px;
615
+ line-height: 1.55;
616
+ }
617
+
618
+ .provider-cache-summary-grid {
619
+ display: grid;
620
+ grid-template-columns: repeat(3, minmax(0, 1fr));
621
+ gap: 8px;
622
+ }
623
+
624
+ .provider-cache-summary-card {
625
+ border: 1px solid rgba(137, 111, 94, 0.12);
626
+ border-radius: 12px;
627
+ background: rgba(255, 253, 252, 0.72);
628
+ padding: 8px 10px;
629
+ }
630
+
631
+ .provider-cache-summary-label {
632
+ display: block;
633
+ margin-bottom: 5px;
634
+ color: var(--color-text-tertiary);
635
+ font-size: 10px;
636
+ }
637
+
638
+ .provider-cache-summary-card strong {
639
+ color: var(--color-text-primary);
640
+ font-size: 18px;
641
+ line-height: 1;
642
+ }
643
+
644
+ .provider-cache-announcement-list {
645
+ display: flex;
646
+ flex-direction: column;
647
+ gap: 6px;
648
+ }
649
+
650
+ .provider-cache-announcement-row {
651
+ display: flex;
652
+ justify-content: space-between;
653
+ gap: 12px;
654
+ border: 1px solid rgba(137, 111, 94, 0.10);
655
+ border-radius: 10px;
656
+ background: rgba(255, 253, 252, 0.58);
657
+ padding: 7px 9px;
658
+ color: var(--color-text-secondary);
659
+ font-size: 11px;
660
+ }
661
+
662
+ .provider-cache-announcement-row span:last-child {
663
+ flex-shrink: 0;
664
+ color: var(--color-text-tertiary);
665
+ font-family: var(--font-family-mono);
666
+ }
667
+
668
+ .project-announcement-cache-actions {
669
+ display: flex;
670
+ flex-wrap: wrap;
671
+ gap: 8px;
672
+ }
673
+
674
+ .project-announcement-footer {
675
+ justify-content: flex-end;
676
+ }
677
+
678
+ .provider-cache-modal {
679
+ width: min(1080px, calc(100vw - 32px));
680
+ max-width: min(1080px, calc(100vw - 32px));
681
+ max-height: min(86vh, 920px);
682
+ display: flex;
683
+ flex-direction: column;
684
+ }
685
+
686
+ .provider-cache-root,
687
+ .provider-cache-loaded-at {
688
+ font-family: var(--font-family-mono);
689
+ word-break: break-all;
690
+ }
691
+
692
+ .provider-cache-toolbar {
693
+ display: flex;
694
+ flex-wrap: wrap;
695
+ align-items: center;
696
+ justify-content: space-between;
697
+ gap: 10px;
698
+ margin: 10px 0 12px;
699
+ }
700
+
701
+ .provider-cache-body {
702
+ min-height: 0;
703
+ overflow: auto;
704
+ padding-right: 4px;
705
+ }
706
+
707
+ .provider-cache-groups {
708
+ display: flex;
709
+ flex-direction: column;
710
+ gap: 12px;
711
+ }
712
+
713
+ .provider-cache-group {
714
+ border: 1px solid rgba(137, 111, 94, 0.14);
715
+ border-radius: 14px;
716
+ background: rgba(255, 253, 252, 0.76);
717
+ padding: 12px;
718
+ }
719
+
720
+ .provider-cache-group-header,
721
+ .provider-cache-file-header {
722
+ display: flex;
723
+ justify-content: space-between;
724
+ gap: 12px;
725
+ align-items: flex-start;
726
+ }
727
+
728
+ .provider-cache-group-title,
729
+ .provider-cache-file-name,
730
+ .provider-cache-provider-name {
731
+ font-weight: 700;
732
+ color: var(--color-text-primary);
733
+ }
734
+
735
+ .provider-cache-group-meta,
736
+ .provider-cache-file-meta,
737
+ .provider-cache-file-path,
738
+ .provider-cache-file-summary,
739
+ .provider-cache-empty {
740
+ font-size: 11px;
741
+ color: var(--color-text-tertiary);
742
+ }
743
+
744
+ .provider-cache-file-summary {
745
+ margin-top: 2px;
746
+ }
747
+
748
+ .provider-cache-file-list {
749
+ display: flex;
750
+ flex-direction: column;
751
+ gap: 10px;
752
+ margin-top: 10px;
753
+ }
754
+
755
+ .provider-cache-file {
756
+ border: 1px solid rgba(137, 111, 94, 0.12);
757
+ border-radius: 14px;
758
+ background: rgba(247, 240, 233, 0.44);
759
+ padding: 10px;
760
+ }
761
+
762
+ .provider-cache-file-meta {
763
+ display: flex;
764
+ flex-wrap: wrap;
765
+ gap: 8px;
766
+ justify-content: flex-end;
767
+ font-family: var(--font-family-mono);
768
+ }
769
+
770
+ .provider-cache-file-path {
771
+ margin-top: 6px;
772
+ font-family: var(--font-family-mono);
773
+ word-break: break-all;
774
+ }
775
+
776
+ .provider-cache-provider-list {
777
+ display: grid;
778
+ grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
779
+ gap: 10px;
780
+ margin-top: 10px;
781
+ }
782
+
783
+ .provider-cache-provider,
784
+ .provider-cache-raw {
785
+ border: 1px solid rgba(137, 111, 94, 0.14);
786
+ border-radius: 12px;
787
+ background: rgba(255, 253, 252, 0.72);
788
+ overflow: hidden;
789
+ }
790
+
791
+ .provider-cache-provider-summary,
792
+ .provider-cache-raw summary {
793
+ cursor: pointer;
794
+ padding: 9px 10px;
795
+ list-style-position: inside;
796
+ }
797
+
798
+ .provider-cache-provider-summary {
799
+ display: flex;
800
+ flex-direction: column;
801
+ gap: 6px;
802
+ }
803
+
804
+ .provider-cache-provider-badges {
805
+ display: flex;
806
+ flex-wrap: wrap;
807
+ gap: 6px;
808
+ }
809
+
810
+ .provider-cache-provider-badge {
811
+ max-width: 100%;
812
+ padding: 2px 7px;
813
+ border-radius: 999px;
814
+ background: rgba(200, 121, 99, 0.10);
815
+ color: var(--color-text-secondary);
816
+ font-family: var(--font-family-mono);
817
+ font-size: 10px;
818
+ word-break: break-all;
819
+ }
820
+
821
+ .provider-cache-raw {
822
+ margin-top: 10px;
823
+ }
824
+
825
+ .provider-cache-json {
826
+ margin: 8px 0 0;
827
+ padding: 10px;
828
+ max-height: 260px;
829
+ overflow: auto;
830
+ border-radius: 12px;
831
+ border: 1px solid rgba(137, 111, 94, 0.14);
832
+ background: rgba(43, 37, 33, 0.94);
833
+ color: #f7efe7;
834
+ font-family: var(--font-family-mono);
835
+ font-size: 11px;
836
+ line-height: 1.5;
837
+ white-space: pre-wrap;
838
+ overflow-wrap: anywhere;
839
+ }
840
+
841
+ .provider-cache-provider .provider-cache-json,
842
+ .provider-cache-raw .provider-cache-json {
843
+ margin: 0;
844
+ border-radius: 0;
845
+ border-right: 0;
846
+ border-bottom: 0;
847
+ border-left: 0;
848
+ }
849
+
850
+ .provider-cache-json-compact {
851
+ max-height: 180px;
852
+ }
853
+
854
+ .provider-cache-json.error {
855
+ color: #ffd7d0;
856
+ }
857
+
858
+ .provider-cache-footer {
859
+ flex-shrink: 0;
860
+ margin-top: 12px;
861
+ padding-top: 12px;
862
+ border-top: 1px solid rgba(137, 111, 94, 0.14);
863
+ background: rgba(255, 253, 252, 0.92);
864
+ }
@@ -303,3 +303,125 @@
303
303
  box-shadow: 0 2px 6px rgba(200, 74, 58, 0.25);
304
304
  border-color: transparent;
305
305
  }
306
+
307
+ .health-failed-provider-header {
308
+ font-weight: var(--font-weight-heading);
309
+ background: rgba(176, 58, 46, 0.08);
310
+ }
311
+
312
+ .health-failed-provider-item.disabled {
313
+ opacity: 0.62;
314
+ }
315
+
316
+ .health-failed-provider-main {
317
+ display: flex;
318
+ align-items: flex-start;
319
+ gap: var(--spacing-xs);
320
+ min-width: 0;
321
+ }
322
+
323
+ .health-failed-provider-main input {
324
+ flex: 0 0 auto;
325
+ width: 13px;
326
+ height: 13px;
327
+ margin-top: 2px;
328
+ accent-color: var(--color-brand-dark);
329
+ }
330
+
331
+ .health-failed-provider-main > span {
332
+ min-width: 0;
333
+ }
334
+
335
+ .health-failed-provider-main .form-hint {
336
+ display: block;
337
+ margin-top: 3px;
338
+ }
339
+
340
+ .modal-health-check {
341
+ width: min(92vw, 560px);
342
+ max-height: min(86vh, 720px);
343
+ display: flex;
344
+ flex-direction: column;
345
+ overflow: hidden;
346
+ padding: 0;
347
+ }
348
+
349
+ .modal-health-check > .modal-title {
350
+ padding: var(--spacing-md) var(--spacing-md) 0;
351
+ margin-bottom: var(--spacing-sm);
352
+ }
353
+
354
+ .health-check-modal-body {
355
+ min-height: 0;
356
+ overflow-y: auto;
357
+ padding: 0 var(--spacing-md);
358
+ scrollbar-width: none;
359
+ overscroll-behavior: contain;
360
+ }
361
+
362
+ .health-check-modal-body::-webkit-scrollbar {
363
+ display: none;
364
+ }
365
+
366
+ .health-check-modal-actions {
367
+ margin-top: 0;
368
+ padding: var(--spacing-sm) var(--spacing-md) var(--spacing-md);
369
+ border-top: 1px solid var(--color-border-soft);
370
+ background: linear-gradient(to bottom, rgba(255, 250, 246, 0.78) 0%, rgba(255, 250, 246, 0.98) 100%);
371
+ }
372
+
373
+ .health-failed-provider-list {
374
+ max-height: min(320px, 42vh);
375
+ border-color: rgba(176, 58, 46, 0.18);
376
+ border-radius: var(--radius-md);
377
+ background: linear-gradient(180deg, rgba(255, 250, 246, 0.98), rgba(255, 255, 255, 0.92));
378
+ }
379
+
380
+ .health-failed-provider-list::-webkit-scrollbar {
381
+ display: none;
382
+ }
383
+
384
+ .health-failed-provider-header {
385
+ position: sticky;
386
+ top: 0;
387
+ z-index: 1;
388
+ align-items: center;
389
+ background: linear-gradient(135deg, rgba(176, 58, 46, 0.11), rgba(210, 107, 90, 0.07));
390
+ backdrop-filter: blur(8px);
391
+ -webkit-backdrop-filter: blur(8px);
392
+ }
393
+
394
+ .health-failed-provider-actions {
395
+ display: inline-flex;
396
+ align-items: center;
397
+ gap: 8px;
398
+ flex-shrink: 0;
399
+ }
400
+
401
+ .btn-link {
402
+ border: 0;
403
+ background: transparent;
404
+ color: var(--color-brand-dark);
405
+ font-size: var(--font-size-caption);
406
+ font-weight: var(--font-weight-secondary);
407
+ cursor: pointer;
408
+ padding: 4px 6px;
409
+ border-radius: var(--radius-xs);
410
+ }
411
+
412
+ .btn-link:hover:not(:disabled) {
413
+ background: rgba(210, 107, 90, 0.1);
414
+ }
415
+
416
+ .btn-link:disabled {
417
+ cursor: not-allowed;
418
+ opacity: 0.45;
419
+ }
420
+
421
+ .health-failed-provider-item {
422
+ align-items: flex-start;
423
+ }
424
+
425
+ .health-failed-provider-item .latency {
426
+ margin-top: 1px;
427
+ }
@@ -112,6 +112,58 @@
112
112
  overflow: hidden;
113
113
  }
114
114
 
115
+ #panel-config-provider .card-list > .card,
116
+ #panel-config-claude .card-list > .card {
117
+ align-items: flex-start;
118
+ min-height: 88px;
119
+ padding-top: 22px;
120
+ padding-bottom: 22px;
121
+ }
122
+
123
+ #panel-config-provider .card-list > .card .card-leading,
124
+ #panel-config-claude .card-list > .card .card-leading {
125
+ align-items: flex-start;
126
+ }
127
+
128
+ #panel-config-provider .card-list > .card .card-content,
129
+ #panel-config-claude .card-list > .card .card-content {
130
+ gap: 4px;
131
+ }
132
+
133
+ #panel-config-provider .card-list > .card .card-title,
134
+ #panel-config-claude .card-list > .card .card-title {
135
+ align-items: flex-start;
136
+ flex-wrap: wrap;
137
+ white-space: normal;
138
+ overflow: visible;
139
+ text-overflow: clip;
140
+ overflow-wrap: anywhere;
141
+ line-height: 1.3;
142
+ }
143
+
144
+ #panel-config-provider .card-list > .card .card-title > span:first-child,
145
+ #panel-config-claude .card-list > .card .card-title > span:first-child {
146
+ white-space: normal;
147
+ overflow: visible;
148
+ text-overflow: clip;
149
+ overflow-wrap: anywhere;
150
+ line-height: 1.3;
151
+ }
152
+
153
+ @media (hover: none) and (pointer: coarse) {
154
+ #panel-config-provider .card-list,
155
+ #panel-config-claude .card-list {
156
+ grid-template-columns: 1fr;
157
+ }
158
+
159
+ #panel-config-provider .card-list > .card,
160
+ #panel-config-claude .card-list > .card {
161
+ min-height: 96px;
162
+ padding-top: 24px;
163
+ padding-bottom: 24px;
164
+ }
165
+ }
166
+
115
167
  .card:hover {
116
168
  border-color: var(--color-border-strong);
117
169
  box-shadow: var(--shadow-card-hover);