@codemem/server 0.26.1 → 0.27.0

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.
package/static/index.html CHANGED
@@ -431,6 +431,228 @@
431
431
  margin-bottom: var(--sp-3);
432
432
  }
433
433
 
434
+ .coordinator-admin-shell {
435
+ display: grid;
436
+ gap: var(--sp-5);
437
+ }
438
+
439
+ .coordinator-admin-header,
440
+ .coordinator-admin-sections {
441
+ display: grid;
442
+ gap: var(--sp-3);
443
+ }
444
+
445
+ .coordinator-admin-summary-grid {
446
+ display: grid;
447
+ grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
448
+ gap: var(--sp-3);
449
+ }
450
+
451
+ .coordinator-admin-summary-card {
452
+ border: 1px solid var(--border);
453
+ border-radius: var(--radius-md);
454
+ padding: var(--sp-3);
455
+ background: var(--surface-0);
456
+ display: grid;
457
+ gap: 6px;
458
+ }
459
+
460
+ .coordinator-admin-summary-card strong {
461
+ font-size: 16px;
462
+ line-height: 1.3;
463
+ }
464
+
465
+ .coordinator-admin-inline-warning {
466
+ border: 1px solid rgba(240, 180, 41, 0.28);
467
+ background: rgba(240, 180, 41, 0.08);
468
+ border-radius: var(--radius-md);
469
+ padding: var(--sp-3);
470
+ }
471
+
472
+ .coordinator-admin-inline-meta {
473
+ margin-top: -4px;
474
+ }
475
+
476
+ .coordinator-admin-context-line {
477
+ padding-top: var(--sp-2);
478
+ border-top: 1px solid var(--border);
479
+ }
480
+
481
+ .coordinator-admin-groups-context {
482
+ display: grid;
483
+ grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
484
+ gap: var(--sp-3);
485
+ }
486
+
487
+ .coordinator-admin-context-pair {
488
+ display: grid;
489
+ gap: 4px;
490
+ min-width: 0;
491
+ padding: var(--sp-2) 0;
492
+ }
493
+
494
+ .coordinator-admin-context-pair strong {
495
+ font-size: 16px;
496
+ line-height: 1.2;
497
+ }
498
+
499
+ .coordinator-admin-context-counts strong {
500
+ white-space: nowrap;
501
+ }
502
+
503
+ .coordinator-admin-tabs-list {
504
+ display: flex;
505
+ flex-wrap: wrap;
506
+ gap: var(--sp-2);
507
+ }
508
+
509
+ .coordinator-admin-tab-trigger {
510
+ border: 1px solid var(--border);
511
+ border-radius: var(--radius-pill);
512
+ background: var(--surface-0);
513
+ color: var(--text-secondary);
514
+ padding: var(--sp-2) var(--sp-3);
515
+ font: inherit;
516
+ cursor: pointer;
517
+ }
518
+
519
+ .coordinator-admin-tab-trigger[data-state="active"] {
520
+ background: var(--accent-subtle);
521
+ border-color: var(--control-border);
522
+ color: var(--accent);
523
+ }
524
+
525
+ .coordinator-admin-tab-trigger:disabled {
526
+ opacity: 0.55;
527
+ cursor: not-allowed;
528
+ }
529
+
530
+ .coordinator-admin-panel {
531
+ display: grid;
532
+ gap: var(--sp-3);
533
+ padding-top: var(--sp-2);
534
+ }
535
+
536
+ .coordinator-admin-panel h3 {
537
+ font-size: 18px;
538
+ line-height: 1.25;
539
+ margin: 0;
540
+ }
541
+
542
+ .coordinator-admin-form-grid {
543
+ display: grid;
544
+ gap: var(--sp-3);
545
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
546
+ }
547
+
548
+ .coordinator-admin-field {
549
+ display: grid;
550
+ gap: var(--sp-2);
551
+ }
552
+
553
+ .coordinator-admin-field > span {
554
+ font-size: 12px;
555
+ color: var(--text-secondary);
556
+ font-weight: 600;
557
+ }
558
+
559
+ .coordinator-admin-output {
560
+ min-height: 108px;
561
+ }
562
+
563
+ .coordinator-admin-warning-list {
564
+ color: var(--status-attention);
565
+ }
566
+
567
+ .coordinator-admin-groups-toolbar {
568
+ justify-content: flex-start;
569
+ flex-wrap: wrap;
570
+ align-items: center;
571
+ }
572
+
573
+ .coordinator-admin-primary-actions,
574
+ .coordinator-admin-secondary-actions {
575
+ display: inline-flex;
576
+ align-items: center;
577
+ gap: 12px;
578
+ }
579
+
580
+ .coordinator-admin-inline-filter {
581
+ display: inline-flex;
582
+ align-items: center;
583
+ gap: 6px;
584
+ }
585
+
586
+ .coordinator-admin-inline-filter .section-meta {
587
+ line-height: 1;
588
+ margin: 0;
589
+ }
590
+
591
+ .coordinator-admin-switch {
592
+ width: 34px;
593
+ height: 20px;
594
+ border: 1px solid color-mix(in srgb, var(--text-tertiary) 42%, var(--control-border));
595
+ border-radius: var(--radius-pill);
596
+ background: color-mix(in srgb, var(--surface-1) 82%, var(--surface-0));
597
+ box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--text-tertiary) 8%, transparent);
598
+ cursor: pointer;
599
+ flex-shrink: 0;
600
+ padding: 1px;
601
+ transition: background 0.15s ease, border-color 0.15s ease, box-shadow 0.15s ease;
602
+ }
603
+
604
+ .coordinator-admin-switch:hover {
605
+ border-color: color-mix(in srgb, var(--accent) 38%, var(--control-hover-border));
606
+ }
607
+
608
+ .coordinator-admin-switch:focus-visible {
609
+ outline: 2px solid var(--accent);
610
+ outline-offset: 2px;
611
+ }
612
+
613
+ .coordinator-admin-switch[data-state="checked"] {
614
+ background: color-mix(in srgb, var(--accent) 18%, var(--surface-1));
615
+ border-color: color-mix(in srgb, var(--accent) 54%, var(--control-hover-border));
616
+ box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--accent) 30%, transparent);
617
+ }
618
+
619
+ .coordinator-admin-switch:disabled {
620
+ opacity: 0.55;
621
+ cursor: not-allowed;
622
+ }
623
+
624
+ .coordinator-admin-switch-thumb {
625
+ display: block;
626
+ width: 16px;
627
+ height: 16px;
628
+ border-radius: 50%;
629
+ background: color-mix(in srgb, var(--surface-0) 88%, white);
630
+ border: 1px solid color-mix(in srgb, var(--text-tertiary) 24%, transparent);
631
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.35);
632
+ transition: transform 0.15s ease, background 0.15s ease;
633
+ transform: translateX(0);
634
+ }
635
+
636
+ .coordinator-admin-switch[data-state="checked"] .coordinator-admin-switch-thumb {
637
+ transform: translateX(14px);
638
+ background: color-mix(in srgb, var(--accent) 88%, white);
639
+ border-color: color-mix(in srgb, var(--accent) 42%, transparent);
640
+ }
641
+
642
+ .coordinator-admin-count-copy {
643
+ margin-left: 2px;
644
+ }
645
+
646
+ .coordinator-admin-empty-state {
647
+ padding: var(--sp-3) 0 var(--sp-1);
648
+ }
649
+
650
+ .coordinator-admin-list {
651
+ padding-left: var(--sp-4);
652
+ display: grid;
653
+ gap: var(--sp-2);
654
+ }
655
+
434
656
  .section-header {
435
657
  display: flex;
436
658
  align-items: center;
@@ -636,6 +858,28 @@
636
858
  justify-content: flex-end;
637
859
  }
638
860
 
861
+ .feed-inspector {
862
+ display: flex;
863
+ flex-direction: column;
864
+ align-items: flex-start;
865
+ gap: 12px;
866
+ margin-bottom: var(--sp-4);
867
+ }
868
+
869
+ .feed-inspector-button {
870
+ min-height: 30px;
871
+ padding: 4px 10px;
872
+ border-color: var(--border);
873
+ background: transparent;
874
+ color: var(--text-secondary);
875
+ white-space: nowrap;
876
+ }
877
+ .feed-inspector-button:hover {
878
+ background: var(--surface-2);
879
+ border-color: var(--border-hover);
880
+ color: var(--text-primary);
881
+ }
882
+
639
883
  .feed-search {
640
884
  min-width: 200px;
641
885
  flex: 1;
@@ -653,6 +897,28 @@
653
897
  .feed-search::placeholder { color: var(--text-tertiary); }
654
898
  .feed-search:focus { border-color: var(--accent); box-shadow: 0 0 0 3px var(--focus-ring); }
655
899
 
900
+ .feed-inspector-files {
901
+ width: 100%;
902
+ margin-top: 8px;
903
+ min-height: 84px;
904
+ padding: 10px var(--sp-3);
905
+ border-radius: var(--radius-md);
906
+ border: 1px solid var(--border);
907
+ background: var(--input-bg);
908
+ color: var(--text-primary);
909
+ font-family: var(--font-mono);
910
+ font-size: 12px;
911
+ line-height: 1.45;
912
+ resize: vertical;
913
+ outline: none;
914
+ transition: border-color 0.15s ease, box-shadow 0.15s ease;
915
+ }
916
+ .feed-inspector-files::placeholder { color: var(--text-tertiary); }
917
+ .feed-inspector-files:focus {
918
+ border-color: var(--accent);
919
+ box-shadow: 0 0 0 3px var(--focus-ring);
920
+ }
921
+
656
922
  .feed-toggle {
657
923
  display: inline-flex;
658
924
  gap: 2px;
@@ -1077,6 +1343,8 @@
1077
1343
  .peer-actions { display: flex; gap: 6px; }
1078
1344
  .peer-actions button { border: 1px solid var(--border); background: transparent; border-radius: var(--radius-pill); padding: 5px 10px; min-width: 28px; min-height: 28px; display: inline-flex; align-items: center; justify-content: center; font-family: var(--font-sans); font-size: 12px; cursor: pointer; color: var(--text-secondary); }
1079
1345
  .peer-actions button:hover { border-color: var(--border-hover); background: var(--surface-2); }
1346
+ .peer-actions button.danger { color: var(--accent-warm); border-color: color-mix(in srgb, var(--accent-warm) 36%, var(--border)); }
1347
+ .peer-actions button.danger:hover { background: var(--accent-warm-subtle); border-color: var(--accent-warm); }
1080
1348
  .peer-card,
1081
1349
  .actor-row,
1082
1350
  .peer-scope-input,
@@ -1688,7 +1956,7 @@
1688
1956
  .settings-advanced-toolbar {
1689
1957
  display: flex;
1690
1958
  align-items: center;
1691
- gap: 8px;
1959
+ gap: 10px;
1692
1960
  padding: var(--sp-2) var(--sp-3);
1693
1961
  border: 1px solid var(--border);
1694
1962
  border-radius: var(--radius-sm);
@@ -1759,6 +2027,62 @@
1759
2027
  .field-checkbox { flex-direction: row; align-items: center; gap: 8px; }
1760
2028
  .field-checkbox input[type="checkbox"] { width: 14px; height: 14px; margin: 0; }
1761
2029
  .field-checkbox label { margin: 0; }
2030
+ .settings-switch-row {
2031
+ display: inline-flex;
2032
+ align-items: center;
2033
+ justify-content: flex-start;
2034
+ gap: 10px;
2035
+ flex: 0 1 auto;
2036
+ }
2037
+ .settings-switch-copy {
2038
+ color: var(--text-primary);
2039
+ line-height: 1.35;
2040
+ cursor: pointer;
2041
+ }
2042
+ .settings-switch {
2043
+ width: 34px;
2044
+ height: 20px;
2045
+ border: 1px solid color-mix(in srgb, var(--text-tertiary) 42%, var(--control-border));
2046
+ border-radius: var(--radius-pill);
2047
+ background: color-mix(in srgb, var(--surface-1) 82%, var(--surface-0));
2048
+ box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--text-tertiary) 8%, transparent);
2049
+ cursor: pointer;
2050
+ flex-shrink: 0;
2051
+ padding: 1px;
2052
+ transition: background 0.15s ease, border-color 0.15s ease, box-shadow 0.15s ease;
2053
+ }
2054
+ .settings-switch:hover {
2055
+ border-color: color-mix(in srgb, var(--accent) 38%, var(--control-hover-border));
2056
+ }
2057
+ .settings-switch:focus-visible {
2058
+ outline: 2px solid var(--accent);
2059
+ outline-offset: 2px;
2060
+ }
2061
+ .settings-switch[data-state="checked"] {
2062
+ background: color-mix(in srgb, var(--accent) 18%, var(--surface-1));
2063
+ border-color: color-mix(in srgb, var(--accent) 54%, var(--control-hover-border));
2064
+ box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--accent) 30%, transparent);
2065
+ }
2066
+ .settings-switch:disabled {
2067
+ opacity: 0.55;
2068
+ cursor: not-allowed;
2069
+ }
2070
+ .settings-switch-thumb {
2071
+ display: block;
2072
+ width: 16px;
2073
+ height: 16px;
2074
+ border-radius: 50%;
2075
+ background: color-mix(in srgb, var(--surface-0) 88%, white);
2076
+ border: 1px solid color-mix(in srgb, var(--text-tertiary) 24%, transparent);
2077
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.35);
2078
+ transition: transform 0.15s ease, background 0.15s ease;
2079
+ transform: translateX(0);
2080
+ }
2081
+ .settings-switch[data-state="checked"] .settings-switch-thumb {
2082
+ transform: translateX(14px);
2083
+ background: color-mix(in srgb, var(--accent) 88%, white);
2084
+ border-color: color-mix(in srgb, var(--accent) 42%, transparent);
2085
+ }
1762
2086
  .cm-checkbox {
1763
2087
  appearance: none;
1764
2088
  width: 16px;
@@ -1987,6 +2311,7 @@
1987
2311
  <button class="tab-btn active" id="tabBtn-feed">Feed</button>
1988
2312
  <button class="tab-btn" id="tabBtn-health">Health</button>
1989
2313
  <button class="tab-btn" id="tabBtn-sync">Sync</button>
2314
+ <button class="tab-btn" id="tabBtn-coordinator-admin">Coordinator Admin</button>
1990
2315
  </nav>
1991
2316
  <div class="app-notice" id="globalNotice" hidden aria-live="polite"></div>
1992
2317
  <div class="viewer-reconnect-overlay" id="viewerReconnectOverlay" hidden>
@@ -2348,6 +2673,10 @@
2348
2673
  </div>
2349
2674
  </div>
2350
2675
 
2676
+ <div class="tab-panel" id="tab-coordinator-admin" hidden>
2677
+ <div id="coordinatorAdminMount"></div>
2678
+ </div>
2679
+
2351
2680
  <script src="/assets/app.js"></script>
2352
2681
  </body>
2353
2682
  </html>