@codemem/server 0.25.3 → 0.26.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.
- package/dist/index.js +105 -23
- package/dist/index.js.map +1 -1
- package/dist/routes/memory.d.ts.map +1 -1
- package/dist/routes/sync.d.ts.map +1 -1
- package/package.json +2 -2
- package/static/app.js +11698 -10023
- package/static/index.html +212 -11
package/static/index.html
CHANGED
|
@@ -738,6 +738,68 @@
|
|
|
738
738
|
flex-shrink: 0;
|
|
739
739
|
}
|
|
740
740
|
|
|
741
|
+
.feed-menu-panel {
|
|
742
|
+
min-width: 180px;
|
|
743
|
+
padding: 6px;
|
|
744
|
+
border-radius: var(--radius-lg);
|
|
745
|
+
border: 1px solid var(--border);
|
|
746
|
+
background: var(--surface-1);
|
|
747
|
+
box-shadow: var(--shadow-md);
|
|
748
|
+
z-index: 24;
|
|
749
|
+
}
|
|
750
|
+
.feed-menu-trigger {
|
|
751
|
+
display: inline-flex;
|
|
752
|
+
align-items: center;
|
|
753
|
+
justify-content: center;
|
|
754
|
+
width: 30px;
|
|
755
|
+
height: 30px;
|
|
756
|
+
border: 1px solid var(--border);
|
|
757
|
+
border-radius: var(--radius-pill);
|
|
758
|
+
background: transparent;
|
|
759
|
+
color: var(--text-tertiary);
|
|
760
|
+
font-family: var(--font-sans);
|
|
761
|
+
font-size: 18px;
|
|
762
|
+
line-height: 1;
|
|
763
|
+
cursor: pointer;
|
|
764
|
+
transition: background 0.15s ease, color 0.15s ease, border-color 0.15s ease;
|
|
765
|
+
}
|
|
766
|
+
.feed-menu-trigger:hover,
|
|
767
|
+
.feed-menu-trigger[data-state="open"] {
|
|
768
|
+
background: var(--surface-2);
|
|
769
|
+
color: var(--text-primary);
|
|
770
|
+
border-color: var(--border-hover);
|
|
771
|
+
}
|
|
772
|
+
.feed-menu-trigger:focus-visible {
|
|
773
|
+
outline: 2px solid var(--accent);
|
|
774
|
+
outline-offset: 2px;
|
|
775
|
+
}
|
|
776
|
+
.feed-menu-item {
|
|
777
|
+
display: flex;
|
|
778
|
+
align-items: center;
|
|
779
|
+
width: 100%;
|
|
780
|
+
min-height: 36px;
|
|
781
|
+
padding: 8px 10px;
|
|
782
|
+
border-radius: var(--radius-md);
|
|
783
|
+
color: var(--text-primary);
|
|
784
|
+
font-size: 13px;
|
|
785
|
+
cursor: pointer;
|
|
786
|
+
user-select: none;
|
|
787
|
+
outline: none;
|
|
788
|
+
}
|
|
789
|
+
.feed-menu-item[data-highlighted] {
|
|
790
|
+
background: var(--surface-2);
|
|
791
|
+
}
|
|
792
|
+
.feed-menu-item[data-disabled] {
|
|
793
|
+
color: var(--text-tertiary);
|
|
794
|
+
cursor: default;
|
|
795
|
+
}
|
|
796
|
+
.feed-menu-item.danger {
|
|
797
|
+
color: var(--accent-warm);
|
|
798
|
+
}
|
|
799
|
+
.feed-menu-item.danger[data-highlighted] {
|
|
800
|
+
background: rgba(212, 100, 46, 0.1);
|
|
801
|
+
}
|
|
802
|
+
|
|
741
803
|
.feed-title {
|
|
742
804
|
font-weight: 600;
|
|
743
805
|
font-size: 15px;
|
|
@@ -1361,7 +1423,38 @@
|
|
|
1361
1423
|
}
|
|
1362
1424
|
.modal-header { display: flex; align-items: center; justify-content: space-between; gap: var(--sp-3); }
|
|
1363
1425
|
.modal-header h2 { margin: 0; font-size: 18px; }
|
|
1364
|
-
.modal-close {
|
|
1426
|
+
.modal-close-button {
|
|
1427
|
+
border: 1px solid color-mix(in srgb, var(--border) 88%, transparent);
|
|
1428
|
+
background: color-mix(in srgb, var(--surface-0) 78%, transparent);
|
|
1429
|
+
color: var(--text-secondary);
|
|
1430
|
+
border-radius: var(--radius-pill);
|
|
1431
|
+
min-height: 30px;
|
|
1432
|
+
padding: 0 10px;
|
|
1433
|
+
display: inline-flex;
|
|
1434
|
+
align-items: center;
|
|
1435
|
+
gap: 7px;
|
|
1436
|
+
cursor: pointer;
|
|
1437
|
+
font-family: var(--font-sans);
|
|
1438
|
+
font-size: 12px;
|
|
1439
|
+
transition: border-color 0.15s ease, background 0.15s ease, color 0.15s ease;
|
|
1440
|
+
}
|
|
1441
|
+
.modal-close-button:hover {
|
|
1442
|
+
border-color: var(--border-hover);
|
|
1443
|
+
background: color-mix(in srgb, var(--surface-0) 92%, var(--control-hover-bg));
|
|
1444
|
+
color: var(--text-primary);
|
|
1445
|
+
}
|
|
1446
|
+
.modal-close-button:focus-visible {
|
|
1447
|
+
outline: 2px solid var(--accent);
|
|
1448
|
+
outline-offset: 2px;
|
|
1449
|
+
}
|
|
1450
|
+
.modal-close-button-icon {
|
|
1451
|
+
font-size: 11px;
|
|
1452
|
+
color: var(--text-tertiary);
|
|
1453
|
+
}
|
|
1454
|
+
.modal-close-button-label {
|
|
1455
|
+
font-weight: 600;
|
|
1456
|
+
letter-spacing: 0.01em;
|
|
1457
|
+
}
|
|
1365
1458
|
.modal-body { display: flex; flex-direction: column; gap: var(--sp-3); flex: 1; min-height: 0; overflow-y: auto; padding-right: 6px; }
|
|
1366
1459
|
.modal-footer { display: flex; align-items: center; justify-content: space-between; gap: var(--sp-3); flex-shrink: 0; padding-top: var(--sp-2); border-top: 1px solid var(--border); }
|
|
1367
1460
|
@keyframes noticeSlideIn {
|
|
@@ -1466,13 +1559,15 @@
|
|
|
1466
1559
|
cursor: pointer;
|
|
1467
1560
|
}
|
|
1468
1561
|
.settings-tab:hover { border-color: var(--border-hover); }
|
|
1469
|
-
.settings-tab.active
|
|
1562
|
+
.settings-tab.active,
|
|
1563
|
+
.settings-tab[data-state="active"] {
|
|
1470
1564
|
border-color: var(--control-hover-border);
|
|
1471
1565
|
color: var(--accent);
|
|
1472
1566
|
background: var(--accent-subtle);
|
|
1473
1567
|
}
|
|
1474
|
-
.settings-panel { display:
|
|
1475
|
-
.settings-panel
|
|
1568
|
+
.settings-panel { display: flex; flex-direction: column; gap: var(--sp-3); }
|
|
1569
|
+
.settings-panel[data-state="inactive"] { display: none; }
|
|
1570
|
+
.settings-panel[hidden] { display: none; }
|
|
1476
1571
|
.observer-status-banner {
|
|
1477
1572
|
display: flex;
|
|
1478
1573
|
flex-direction: column;
|
|
@@ -1611,6 +1706,56 @@
|
|
|
1611
1706
|
|
|
1612
1707
|
.field { display: flex; flex-direction: column; gap: 6px; font-size: 13px; }
|
|
1613
1708
|
.field input:not([type="checkbox"]), .field select, .field textarea { padding: var(--sp-2) var(--sp-3); border-radius: var(--radius-sm); border: 1px solid var(--border); background: var(--input-bg); font-family: var(--font-sans); font-size: 13px; color: var(--text-primary); }
|
|
1709
|
+
.settings-select-trigger {
|
|
1710
|
+
display: inline-flex;
|
|
1711
|
+
align-items: center;
|
|
1712
|
+
justify-content: space-between;
|
|
1713
|
+
gap: 8px;
|
|
1714
|
+
width: 100%;
|
|
1715
|
+
padding: var(--sp-2) var(--sp-3);
|
|
1716
|
+
border-radius: var(--radius-sm);
|
|
1717
|
+
border: 1px solid var(--border);
|
|
1718
|
+
background: var(--input-bg);
|
|
1719
|
+
color: var(--text-primary);
|
|
1720
|
+
font-family: var(--font-sans);
|
|
1721
|
+
font-size: 13px;
|
|
1722
|
+
text-align: left;
|
|
1723
|
+
}
|
|
1724
|
+
.settings-select-trigger:hover { border-color: var(--border-hover); }
|
|
1725
|
+
.settings-select-trigger:focus {
|
|
1726
|
+
outline: none;
|
|
1727
|
+
border-color: var(--accent);
|
|
1728
|
+
box-shadow: 0 0 0 3px var(--focus-ring);
|
|
1729
|
+
}
|
|
1730
|
+
.settings-select-content {
|
|
1731
|
+
z-index: 30;
|
|
1732
|
+
min-width: var(--radix-select-trigger-width);
|
|
1733
|
+
overflow: hidden;
|
|
1734
|
+
border: 1px solid var(--border);
|
|
1735
|
+
border-radius: var(--radius-md);
|
|
1736
|
+
background: var(--surface-1);
|
|
1737
|
+
box-shadow: var(--shadow-lg);
|
|
1738
|
+
}
|
|
1739
|
+
.settings-select-viewport { padding: 6px; }
|
|
1740
|
+
.settings-select-item {
|
|
1741
|
+
min-height: 36px;
|
|
1742
|
+
display: flex;
|
|
1743
|
+
align-items: center;
|
|
1744
|
+
justify-content: space-between;
|
|
1745
|
+
gap: 12px;
|
|
1746
|
+
padding: 8px 12px;
|
|
1747
|
+
border-radius: var(--radius-sm);
|
|
1748
|
+
color: var(--text-primary);
|
|
1749
|
+
font-family: var(--font-sans);
|
|
1750
|
+
font-size: 13px;
|
|
1751
|
+
cursor: pointer;
|
|
1752
|
+
user-select: none;
|
|
1753
|
+
}
|
|
1754
|
+
.settings-select-item[data-highlighted] {
|
|
1755
|
+
outline: none;
|
|
1756
|
+
background: var(--accent-subtle);
|
|
1757
|
+
color: var(--accent);
|
|
1758
|
+
}
|
|
1614
1759
|
.field-checkbox { flex-direction: row; align-items: center; gap: 8px; }
|
|
1615
1760
|
.field-checkbox input[type="checkbox"] { width: 14px; height: 14px; margin: 0; }
|
|
1616
1761
|
.field-checkbox label { margin: 0; }
|
|
@@ -1696,6 +1841,59 @@
|
|
|
1696
1841
|
flex-direction: column;
|
|
1697
1842
|
gap: var(--sp-2);
|
|
1698
1843
|
}
|
|
1844
|
+
.sync-dialog-radio-list {
|
|
1845
|
+
display: grid;
|
|
1846
|
+
gap: var(--sp-2);
|
|
1847
|
+
}
|
|
1848
|
+
.sync-dialog-radio-option {
|
|
1849
|
+
display: flex;
|
|
1850
|
+
align-items: center;
|
|
1851
|
+
gap: 10px;
|
|
1852
|
+
padding: 10px 12px;
|
|
1853
|
+
border: 1px solid var(--border);
|
|
1854
|
+
border-radius: var(--radius-md);
|
|
1855
|
+
background: color-mix(in srgb, var(--surface-1) 86%, var(--surface-0));
|
|
1856
|
+
cursor: pointer;
|
|
1857
|
+
transition: border-color 0.15s ease, background 0.15s ease;
|
|
1858
|
+
}
|
|
1859
|
+
.sync-dialog-radio-option:hover {
|
|
1860
|
+
border-color: var(--border-hover);
|
|
1861
|
+
background: color-mix(in srgb, var(--surface-1) 94%, var(--surface-0));
|
|
1862
|
+
}
|
|
1863
|
+
.sync-dialog-radio-option:has(button[data-state="checked"]) {
|
|
1864
|
+
border-color: color-mix(in srgb, var(--accent) 40%, var(--border));
|
|
1865
|
+
background: color-mix(in srgb, var(--accent-subtle) 68%, var(--surface-1));
|
|
1866
|
+
}
|
|
1867
|
+
.sync-dialog-radio-option button {
|
|
1868
|
+
width: 18px;
|
|
1869
|
+
height: 18px;
|
|
1870
|
+
border-radius: 999px;
|
|
1871
|
+
border: 1px solid color-mix(in srgb, var(--text-tertiary) 42%, var(--border));
|
|
1872
|
+
background: var(--surface-0);
|
|
1873
|
+
display: inline-flex;
|
|
1874
|
+
align-items: center;
|
|
1875
|
+
justify-content: center;
|
|
1876
|
+
padding: 0;
|
|
1877
|
+
flex: 0 0 auto;
|
|
1878
|
+
}
|
|
1879
|
+
.sync-dialog-radio-option button:focus-visible {
|
|
1880
|
+
outline: 2px solid var(--accent);
|
|
1881
|
+
outline-offset: 2px;
|
|
1882
|
+
}
|
|
1883
|
+
.sync-dialog-radio-option button[data-state="checked"] {
|
|
1884
|
+
border-color: color-mix(in srgb, var(--accent) 48%, var(--border));
|
|
1885
|
+
background: color-mix(in srgb, var(--accent-subtle) 82%, var(--surface-0));
|
|
1886
|
+
}
|
|
1887
|
+
.sync-dialog-radio-indicator {
|
|
1888
|
+
width: 8px;
|
|
1889
|
+
height: 8px;
|
|
1890
|
+
border-radius: 999px;
|
|
1891
|
+
background: var(--accent);
|
|
1892
|
+
}
|
|
1893
|
+
.sync-dialog-radio-label {
|
|
1894
|
+
color: var(--text-primary);
|
|
1895
|
+
font-size: 13px;
|
|
1896
|
+
}
|
|
1699
1897
|
.settings-save:disabled { opacity: 0.6; cursor: not-allowed; }
|
|
1700
1898
|
.settings-note { color: var(--text-tertiary); font-size: 12px; }
|
|
1701
1899
|
|
|
@@ -1814,14 +2012,17 @@
|
|
|
1814
2012
|
<div class="modal-card">
|
|
1815
2013
|
<div class="modal-header">
|
|
1816
2014
|
<h2 id="settingsTitle">Memory & model settings</h2>
|
|
1817
|
-
<button class="modal-close" id="settingsClose" aria-label="Close settings">
|
|
2015
|
+
<button class="modal-close-button" id="settingsClose" aria-label="Close settings">
|
|
2016
|
+
<span class="modal-close-button-icon" aria-hidden="true">✕</span>
|
|
2017
|
+
<span class="modal-close-button-label">Close</span>
|
|
2018
|
+
</button>
|
|
1818
2019
|
</div>
|
|
1819
2020
|
<div class="modal-body">
|
|
1820
2021
|
<div class="small" id="settingsDescription">Configure connection, authentication, processing, and sync behavior.</div>
|
|
1821
2022
|
<div class="settings-tabs" role="tablist" aria-label="Settings sections">
|
|
1822
|
-
<button class="settings-tab
|
|
1823
|
-
<button class="settings-tab" id="settingsTabQueue" data-settings-tab="queue" role="tab" aria-selected="false">Processing</button>
|
|
1824
|
-
<button class="settings-tab" id="settingsTabSync" data-settings-tab="sync" role="tab" aria-selected="false">Device Sync</button>
|
|
2023
|
+
<button class="settings-tab" id="settingsTabObserver" data-settings-tab="observer" role="tab" aria-selected="true" data-state="active">Connection</button>
|
|
2024
|
+
<button class="settings-tab" id="settingsTabQueue" data-settings-tab="queue" role="tab" aria-selected="false" data-state="inactive">Processing</button>
|
|
2025
|
+
<button class="settings-tab" id="settingsTabSync" data-settings-tab="sync" role="tab" aria-selected="false" data-state="inactive">Device Sync</button>
|
|
1825
2026
|
</div>
|
|
1826
2027
|
<div class="settings-advanced-toolbar field-checkbox">
|
|
1827
2028
|
<input class="cm-checkbox" id="settingsAdvancedToggle" type="checkbox" />
|
|
@@ -1829,7 +2030,7 @@
|
|
|
1829
2030
|
<button class="help-icon" type="button" data-tooltip="Advanced controls include JSON fields, tuning values, and network overrides." aria-label="About advanced controls">?</button>
|
|
1830
2031
|
</div>
|
|
1831
2032
|
|
|
1832
|
-
<div class="settings-panel
|
|
2033
|
+
<div class="settings-panel" id="settingsPanelObserver" data-settings-panel="observer" data-state="active">
|
|
1833
2034
|
<div id="observerStatusBanner" class="observer-status-banner" hidden></div>
|
|
1834
2035
|
<div class="settings-group">
|
|
1835
2036
|
<h3 class="settings-group-title">Connection</h3>
|
|
@@ -1924,7 +2125,7 @@
|
|
|
1924
2125
|
</div>
|
|
1925
2126
|
</div>
|
|
1926
2127
|
|
|
1927
|
-
<div class="settings-panel" id="settingsPanelQueue" data-settings-panel="queue">
|
|
2128
|
+
<div class="settings-panel" id="settingsPanelQueue" data-settings-panel="queue" data-state="inactive" hidden>
|
|
1928
2129
|
<div class="settings-group">
|
|
1929
2130
|
<h3 class="settings-group-title">Processing</h3>
|
|
1930
2131
|
<div class="field">
|
|
@@ -1951,7 +2152,7 @@
|
|
|
1951
2152
|
</div>
|
|
1952
2153
|
</div>
|
|
1953
2154
|
|
|
1954
|
-
<div class="settings-panel" id="settingsPanelSync" data-settings-panel="sync">
|
|
2155
|
+
<div class="settings-panel" id="settingsPanelSync" data-settings-panel="sync" data-state="inactive" hidden>
|
|
1955
2156
|
<div class="settings-group">
|
|
1956
2157
|
<h3 class="settings-group-title">Device Sync</h3>
|
|
1957
2158
|
<div class="field field-checkbox"><input class="cm-checkbox" id="syncEnabled" type="checkbox" /><label for="syncEnabled">Enable sync</label></div>
|