@codemem/server 0.30.0-alpha.5 → 0.31.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/dist/index.d.ts.map +1 -1
- package/dist/index.js +210 -4
- package/dist/index.js.map +1 -1
- package/dist/routes/sync.d.ts.map +1 -1
- package/package.json +2 -2
- package/static/app.js +1068 -54
- package/static/index.html +295 -1
package/static/index.html
CHANGED
|
@@ -1237,6 +1237,99 @@
|
|
|
1237
1237
|
box-shadow: 0 0 0 3px var(--focus-ring);
|
|
1238
1238
|
}
|
|
1239
1239
|
|
|
1240
|
+
.projects-toolbar {
|
|
1241
|
+
display: flex;
|
|
1242
|
+
flex-wrap: wrap;
|
|
1243
|
+
gap: var(--sp-3);
|
|
1244
|
+
align-items: center;
|
|
1245
|
+
margin: var(--sp-4) 0 var(--sp-3);
|
|
1246
|
+
}
|
|
1247
|
+
.projects-toolbar .feed-search { flex: 1 1 320px; }
|
|
1248
|
+
.projects-toolbar select {
|
|
1249
|
+
padding: var(--sp-2) var(--sp-3);
|
|
1250
|
+
border-radius: var(--radius-sm);
|
|
1251
|
+
border: 1px solid var(--border);
|
|
1252
|
+
background: var(--input-bg);
|
|
1253
|
+
color: var(--text-primary);
|
|
1254
|
+
font-family: var(--font-sans);
|
|
1255
|
+
font-size: 13px;
|
|
1256
|
+
}
|
|
1257
|
+
.project-inventory-list {
|
|
1258
|
+
display: grid;
|
|
1259
|
+
gap: var(--sp-3);
|
|
1260
|
+
margin-top: var(--sp-4);
|
|
1261
|
+
}
|
|
1262
|
+
.project-inventory-row {
|
|
1263
|
+
padding: var(--sp-4);
|
|
1264
|
+
border: 1px solid var(--border);
|
|
1265
|
+
border-radius: var(--radius-md);
|
|
1266
|
+
background: var(--surface-1);
|
|
1267
|
+
}
|
|
1268
|
+
.project-inventory-row-header {
|
|
1269
|
+
display: flex;
|
|
1270
|
+
justify-content: space-between;
|
|
1271
|
+
gap: var(--sp-3);
|
|
1272
|
+
align-items: flex-start;
|
|
1273
|
+
}
|
|
1274
|
+
.project-inventory-title { font-size: 15px; font-weight: 650; color: var(--text-primary); }
|
|
1275
|
+
.project-inventory-domain { font-family: var(--font-mono); font-size: 12px; color: var(--accent); }
|
|
1276
|
+
.project-inventory-meta, .project-inventory-signal {
|
|
1277
|
+
margin-top: var(--sp-2);
|
|
1278
|
+
color: var(--text-secondary);
|
|
1279
|
+
font-size: 12px;
|
|
1280
|
+
}
|
|
1281
|
+
.project-inventory-signal { overflow-wrap: anywhere; }
|
|
1282
|
+
.project-inventory-badges {
|
|
1283
|
+
display: flex;
|
|
1284
|
+
flex-wrap: wrap;
|
|
1285
|
+
gap: var(--sp-2);
|
|
1286
|
+
margin-top: var(--sp-3);
|
|
1287
|
+
}
|
|
1288
|
+
.project-status-badge {
|
|
1289
|
+
padding: 2px 8px;
|
|
1290
|
+
border-radius: var(--radius-pill);
|
|
1291
|
+
background: var(--surface-2);
|
|
1292
|
+
color: var(--text-secondary);
|
|
1293
|
+
font-size: 11px;
|
|
1294
|
+
border: 1px solid var(--border);
|
|
1295
|
+
}
|
|
1296
|
+
.project-status-badge.needs_attention,
|
|
1297
|
+
.project-status-badge.legacy_review { color: var(--accent-warm); background: var(--accent-warm-subtle); }
|
|
1298
|
+
.project-status-badge.suggested { color: var(--accent); background: var(--accent-subtle); }
|
|
1299
|
+
.project-inventory-details { margin-top: var(--sp-3); }
|
|
1300
|
+
.project-inventory-details summary { cursor: pointer; color: var(--text-secondary); font-size: 12px; }
|
|
1301
|
+
.project-detail-grid {
|
|
1302
|
+
display: grid;
|
|
1303
|
+
grid-template-columns: minmax(130px, max-content) 1fr;
|
|
1304
|
+
gap: var(--sp-2) var(--sp-3);
|
|
1305
|
+
margin-top: var(--sp-3);
|
|
1306
|
+
font-size: 12px;
|
|
1307
|
+
}
|
|
1308
|
+
.project-detail-grid dt { color: var(--text-tertiary); }
|
|
1309
|
+
.project-detail-grid dd { margin: 0; overflow-wrap: anywhere; color: var(--text-primary); }
|
|
1310
|
+
.project-inventory-actions {
|
|
1311
|
+
display: flex;
|
|
1312
|
+
align-items: center;
|
|
1313
|
+
flex-wrap: wrap;
|
|
1314
|
+
gap: var(--sp-2);
|
|
1315
|
+
margin-top: var(--sp-4);
|
|
1316
|
+
}
|
|
1317
|
+
.project-domain-select {
|
|
1318
|
+
min-width: min(100%, 260px);
|
|
1319
|
+
padding: var(--sp-2) var(--sp-3);
|
|
1320
|
+
border-radius: var(--radius-sm);
|
|
1321
|
+
border: 1px solid var(--border);
|
|
1322
|
+
background: var(--input-bg);
|
|
1323
|
+
color: var(--text-primary);
|
|
1324
|
+
font-family: var(--font-sans);
|
|
1325
|
+
font-size: 13px;
|
|
1326
|
+
}
|
|
1327
|
+
.project-guardrail-confirmation {
|
|
1328
|
+
flex-basis: 100%;
|
|
1329
|
+
margin-top: var(--sp-2);
|
|
1330
|
+
}
|
|
1331
|
+
.projects-pagination { margin-top: var(--sp-4); }
|
|
1332
|
+
|
|
1240
1333
|
/* 36×36 square icon buttons — theme toggle, settings gear. */
|
|
1241
1334
|
.icon-button {
|
|
1242
1335
|
width: 36px;
|
|
@@ -1885,6 +1978,18 @@
|
|
|
1885
1978
|
.sync-action ~ .sync-action { margin-top: var(--sp-2); }
|
|
1886
1979
|
|
|
1887
1980
|
.health-action-text, .sync-action-text { font-size: 13px; color: var(--text-primary); flex: 1; min-width: 0; }
|
|
1981
|
+
.settings-link,
|
|
1982
|
+
.sync-subview-link {
|
|
1983
|
+
color: var(--accent);
|
|
1984
|
+
text-decoration-color: color-mix(in srgb, var(--accent) 52%, transparent);
|
|
1985
|
+
text-underline-offset: 3px;
|
|
1986
|
+
transition: color 140ms ease, text-decoration-color 140ms ease;
|
|
1987
|
+
}
|
|
1988
|
+
.settings-link:hover,
|
|
1989
|
+
.sync-subview-link:hover {
|
|
1990
|
+
color: var(--accent-hover);
|
|
1991
|
+
text-decoration-color: currentColor;
|
|
1992
|
+
}
|
|
1888
1993
|
.sync-section-heading {
|
|
1889
1994
|
display: flex;
|
|
1890
1995
|
align-items: center;
|
|
@@ -1980,6 +2085,108 @@
|
|
|
1980
2085
|
.actor-details { min-width: 0; display: grid; gap: 6px; }
|
|
1981
2086
|
.actor-title { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
|
|
1982
2087
|
.actor-actions { display: flex; align-items: center; gap: var(--sp-2); flex-wrap: wrap; justify-content: flex-end; }
|
|
2088
|
+
.legacy-review-card {
|
|
2089
|
+
display: grid;
|
|
2090
|
+
gap: var(--sp-3);
|
|
2091
|
+
padding: var(--sp-3);
|
|
2092
|
+
border: 1px solid color-mix(in srgb, var(--accent-warm) 24%, var(--border));
|
|
2093
|
+
border-radius: var(--radius-lg);
|
|
2094
|
+
background: color-mix(in srgb, var(--accent-warm-subtle) 34%, var(--surface-1));
|
|
2095
|
+
}
|
|
2096
|
+
.legacy-review-header {
|
|
2097
|
+
display: flex;
|
|
2098
|
+
align-items: flex-start;
|
|
2099
|
+
justify-content: space-between;
|
|
2100
|
+
gap: var(--sp-3);
|
|
2101
|
+
}
|
|
2102
|
+
.legacy-review-summary { margin-top: 6px; max-width: 78ch; color: var(--text-secondary); }
|
|
2103
|
+
.legacy-review-warning { margin-top: 4px; max-width: 78ch; }
|
|
2104
|
+
.legacy-review-groups {
|
|
2105
|
+
display: grid;
|
|
2106
|
+
gap: var(--sp-2);
|
|
2107
|
+
margin: 0;
|
|
2108
|
+
padding: 0;
|
|
2109
|
+
list-style: none;
|
|
2110
|
+
}
|
|
2111
|
+
.legacy-review-toolbar {
|
|
2112
|
+
display: grid;
|
|
2113
|
+
gap: var(--sp-2);
|
|
2114
|
+
padding: var(--sp-2);
|
|
2115
|
+
border: 1px solid var(--border);
|
|
2116
|
+
border-radius: var(--radius-md);
|
|
2117
|
+
background: color-mix(in srgb, var(--surface-2) 72%, transparent);
|
|
2118
|
+
}
|
|
2119
|
+
.legacy-review-filter-row,
|
|
2120
|
+
.legacy-review-bulk-row {
|
|
2121
|
+
display: flex;
|
|
2122
|
+
flex-wrap: wrap;
|
|
2123
|
+
gap: var(--sp-2);
|
|
2124
|
+
align-items: center;
|
|
2125
|
+
}
|
|
2126
|
+
.legacy-filter.active {
|
|
2127
|
+
background: var(--accent-subtle);
|
|
2128
|
+
border-color: color-mix(in srgb, var(--accent) 44%, var(--border));
|
|
2129
|
+
color: var(--accent);
|
|
2130
|
+
}
|
|
2131
|
+
.legacy-review-search { flex: 1 1 260px; min-width: min(260px, 100%); }
|
|
2132
|
+
.legacy-review-group {
|
|
2133
|
+
display: grid;
|
|
2134
|
+
gap: var(--sp-2);
|
|
2135
|
+
padding: var(--sp-3);
|
|
2136
|
+
border: 1px solid var(--border);
|
|
2137
|
+
border-radius: var(--radius-md);
|
|
2138
|
+
background: var(--surface-2);
|
|
2139
|
+
}
|
|
2140
|
+
.legacy-review-group-main {
|
|
2141
|
+
display: grid;
|
|
2142
|
+
grid-template-columns: minmax(0, 1fr) auto;
|
|
2143
|
+
gap: var(--sp-3);
|
|
2144
|
+
align-items: start;
|
|
2145
|
+
}
|
|
2146
|
+
.legacy-review-title-wrap { display: flex; align-items: flex-start; gap: var(--sp-2); min-width: 0; }
|
|
2147
|
+
.legacy-review-group-title { color: var(--text-primary); font-weight: 700; overflow-wrap: anywhere; }
|
|
2148
|
+
.legacy-review-group-meta,
|
|
2149
|
+
.legacy-review-reason {
|
|
2150
|
+
margin-top: 2px;
|
|
2151
|
+
color: var(--text-tertiary);
|
|
2152
|
+
font-size: 12px;
|
|
2153
|
+
line-height: 1.45;
|
|
2154
|
+
}
|
|
2155
|
+
.legacy-review-cleanup-note {
|
|
2156
|
+
margin-top: 6px;
|
|
2157
|
+
color: var(--accent-warm);
|
|
2158
|
+
font-size: 12px;
|
|
2159
|
+
line-height: 1.45;
|
|
2160
|
+
}
|
|
2161
|
+
.legacy-review-count {
|
|
2162
|
+
justify-self: end;
|
|
2163
|
+
white-space: nowrap;
|
|
2164
|
+
padding: 3px 9px;
|
|
2165
|
+
border-radius: var(--radius-pill);
|
|
2166
|
+
background: var(--accent-neutral-subtle);
|
|
2167
|
+
color: var(--text-secondary);
|
|
2168
|
+
font-family: var(--font-mono);
|
|
2169
|
+
font-size: 12px;
|
|
2170
|
+
}
|
|
2171
|
+
.legacy-review-confirmation {
|
|
2172
|
+
padding: var(--sp-2) var(--sp-3);
|
|
2173
|
+
border: 1px solid color-mix(in srgb, var(--accent-warm) 35%, var(--border));
|
|
2174
|
+
border-radius: var(--radius-md);
|
|
2175
|
+
background: var(--accent-warm-subtle);
|
|
2176
|
+
color: var(--text-secondary);
|
|
2177
|
+
font-size: 13px;
|
|
2178
|
+
line-height: 1.45;
|
|
2179
|
+
}
|
|
2180
|
+
.legacy-review-target {
|
|
2181
|
+
display: grid;
|
|
2182
|
+
gap: 5px;
|
|
2183
|
+
color: var(--text-tertiary);
|
|
2184
|
+
font-size: 11px;
|
|
2185
|
+
font-weight: 600;
|
|
2186
|
+
letter-spacing: 0.04em;
|
|
2187
|
+
text-transform: uppercase;
|
|
2188
|
+
}
|
|
2189
|
+
.legacy-review-actions { display: flex; justify-content: flex-end; }
|
|
1983
2190
|
.actor-name-input { min-width: 220px; }
|
|
1984
2191
|
.actor-merge-controls { display: flex; align-items: center; gap: var(--sp-2); flex-wrap: wrap; }
|
|
1985
2192
|
.actor-merge-select { min-width: 200px; }
|
|
@@ -2522,6 +2729,22 @@
|
|
|
2522
2729
|
@media (max-height: 720px) { .modal { align-items: flex-start; } }
|
|
2523
2730
|
.modal-backdrop[hidden], .modal[hidden] { display: none; }
|
|
2524
2731
|
|
|
2732
|
+
.legacy-upgrade-modal .modal-card { width: min(620px, 100%); }
|
|
2733
|
+
.legacy-upgrade-summary {
|
|
2734
|
+
padding: var(--sp-3);
|
|
2735
|
+
border: 1px solid color-mix(in srgb, var(--accent-warm) 28%, var(--border));
|
|
2736
|
+
border-radius: var(--radius-md);
|
|
2737
|
+
background: var(--accent-warm-subtle);
|
|
2738
|
+
color: var(--text-secondary);
|
|
2739
|
+
line-height: 1.5;
|
|
2740
|
+
}
|
|
2741
|
+
.legacy-upgrade-actions {
|
|
2742
|
+
display: flex;
|
|
2743
|
+
flex-wrap: wrap;
|
|
2744
|
+
gap: var(--sp-2);
|
|
2745
|
+
justify-content: flex-end;
|
|
2746
|
+
}
|
|
2747
|
+
|
|
2525
2748
|
.modal-card {
|
|
2526
2749
|
width: min(520px, 100%);
|
|
2527
2750
|
border-radius: var(--radius-xl);
|
|
@@ -3250,6 +3473,11 @@
|
|
|
3250
3473
|
.feed-visibility-controls { align-items: stretch; }
|
|
3251
3474
|
.feed-visibility-select { width: 100%; }
|
|
3252
3475
|
.actor-actions { justify-content: flex-start; }
|
|
3476
|
+
.legacy-review-header { flex-direction: column; }
|
|
3477
|
+
.legacy-review-group-main { grid-template-columns: 1fr; }
|
|
3478
|
+
.legacy-review-count { justify-self: start; }
|
|
3479
|
+
.legacy-review-actions { justify-content: flex-start; }
|
|
3480
|
+
.legacy-review-bulk-row .settings-save { width: 100%; }
|
|
3253
3481
|
}
|
|
3254
3482
|
|
|
3255
3483
|
@media (max-width: 520px) {
|
|
@@ -3306,8 +3534,9 @@
|
|
|
3306
3534
|
<!-- ── Tab bar ─────────────────────────────────────────── -->
|
|
3307
3535
|
<nav class="tab-bar" aria-label="Main navigation">
|
|
3308
3536
|
<button class="tab-btn active" id="tabBtn-feed">Feed</button>
|
|
3309
|
-
<button class="tab-btn" id="tabBtn-
|
|
3537
|
+
<button class="tab-btn" id="tabBtn-projects">Projects</button>
|
|
3310
3538
|
<button class="tab-btn" id="tabBtn-sync">Sync</button>
|
|
3539
|
+
<button class="tab-btn" id="tabBtn-health">Health</button>
|
|
3311
3540
|
<button class="tab-btn" id="tabBtn-coordinator-admin">Coordinator Admin</button>
|
|
3312
3541
|
</nav>
|
|
3313
3542
|
<div id="toastRoot"></div>
|
|
@@ -3328,6 +3557,49 @@
|
|
|
3328
3557
|
</div>
|
|
3329
3558
|
</div>
|
|
3330
3559
|
|
|
3560
|
+
<div class="modal-backdrop" id="legacyUpgradeModalBackdrop" hidden></div>
|
|
3561
|
+
<div
|
|
3562
|
+
aria-describedby="legacyUpgradeDescription legacyUpgradeSummary"
|
|
3563
|
+
aria-labelledby="legacyUpgradeTitle"
|
|
3564
|
+
aria-modal="true"
|
|
3565
|
+
class="modal legacy-upgrade-modal"
|
|
3566
|
+
hidden
|
|
3567
|
+
id="legacyUpgradeModal"
|
|
3568
|
+
role="dialog"
|
|
3569
|
+
>
|
|
3570
|
+
<div class="modal-card">
|
|
3571
|
+
<div class="modal-header">
|
|
3572
|
+
<h2 id="legacyUpgradeTitle">Choose where older shared memories belong</h2>
|
|
3573
|
+
</div>
|
|
3574
|
+
<div class="modal-body">
|
|
3575
|
+
<div class="small" id="legacyUpgradeDescription">
|
|
3576
|
+
Some memories were shared before codemem had clear Sharing domains. We kept them out
|
|
3577
|
+
of normal sync until you choose which project/domain they belong to.
|
|
3578
|
+
</div>
|
|
3579
|
+
<div class="legacy-upgrade-summary" id="legacyUpgradeSummary"></div>
|
|
3580
|
+
<div class="small">
|
|
3581
|
+
You’ll review projects, not individual memories. Nothing moves automatically, and this
|
|
3582
|
+
will not erase copies another device may already have received.
|
|
3583
|
+
</div>
|
|
3584
|
+
<label class="field-checkbox" for="legacyUpgradeDontShow">
|
|
3585
|
+
<input class="cm-checkbox" id="legacyUpgradeDontShow" type="checkbox" />
|
|
3586
|
+
<span>Don’t show this again</span>
|
|
3587
|
+
</label>
|
|
3588
|
+
</div>
|
|
3589
|
+
<div class="modal-footer">
|
|
3590
|
+
<div class="legacy-upgrade-actions">
|
|
3591
|
+
<button class="settings-button" id="legacyUpgradeReviewProjects" type="button">
|
|
3592
|
+
Manage all projects
|
|
3593
|
+
</button>
|
|
3594
|
+
<button class="settings-button" id="legacyUpgradeNotNow" type="button">Not now</button>
|
|
3595
|
+
<button class="settings-save" id="legacyUpgradeReviewGroups" type="button">
|
|
3596
|
+
Start review
|
|
3597
|
+
</button>
|
|
3598
|
+
</div>
|
|
3599
|
+
</div>
|
|
3600
|
+
</div>
|
|
3601
|
+
</div>
|
|
3602
|
+
|
|
3331
3603
|
<!-- ── Settings modal ──────────────────────────────────── -->
|
|
3332
3604
|
<div id="settingsDialogMount"></div>
|
|
3333
3605
|
<template id="settingsDialogTemplate">
|
|
@@ -3559,6 +3831,28 @@
|
|
|
3559
3831
|
</div>
|
|
3560
3832
|
</div>
|
|
3561
3833
|
|
|
3834
|
+
<!-- ── Tab: Projects ───────────────────────────────────── -->
|
|
3835
|
+
<div class="tab-panel" id="tab-projects" hidden>
|
|
3836
|
+
<div class="card" style="animation-delay: 0s">
|
|
3837
|
+
<div class="section-header">
|
|
3838
|
+
<div>
|
|
3839
|
+
<h2>Projects & Sharing domains</h2>
|
|
3840
|
+
<div class="section-meta">Choose which Sharing domain future memories use. “Stays on this device” means no Sharing domain is assigned yet, so it belongs in Projects review rather than Sync triage.</div>
|
|
3841
|
+
</div>
|
|
3842
|
+
</div>
|
|
3843
|
+
<div class="projects-toolbar">
|
|
3844
|
+
<input class="feed-search" id="projectsSearch" placeholder="Search project, path, git remote, or workspace id…" />
|
|
3845
|
+
<select id="projectsStatusFilter" aria-label="Project status filter"></select>
|
|
3846
|
+
</div>
|
|
3847
|
+
<div class="section-meta" id="projectsInventoryMeta">Loading project inventory…</div>
|
|
3848
|
+
<div class="project-inventory-list" id="projectsInventoryList" aria-live="polite"></div>
|
|
3849
|
+
<div class="section-actions projects-pagination">
|
|
3850
|
+
<button class="settings-button" id="projectsPrevPage" type="button">Previous</button>
|
|
3851
|
+
<button class="settings-button" id="projectsNextPage" type="button">Next</button>
|
|
3852
|
+
</div>
|
|
3853
|
+
</div>
|
|
3854
|
+
</div>
|
|
3855
|
+
|
|
3562
3856
|
<!-- ── Tab: Sync ───────────────────────────────────────── -->
|
|
3563
3857
|
<div class="tab-panel" id="tab-sync" hidden>
|
|
3564
3858
|
|