cursor-guard 4.9.8 → 4.9.9
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/README.md +10 -1
- package/README.zh-CN.md +10 -1
- package/ROADMAP.md +11 -4
- package/docs/RELEASE.md +196 -0
- package/package.json +2 -1
- package/references/dashboard/public/app.js +79 -79
- package/references/dashboard/public/style.css +264 -159
- package/references/lib/core/core.test.js +139 -101
- package/references/lib/core/snapshot.js +8 -4
- package/references/mcp/server.js +73 -72
- package/references/vscode-extension/dist/{cursor-guard-ide-4.9.8.vsix → cursor-guard-ide-4.9.9.vsix} +0 -0
- package/references/vscode-extension/dist/dashboard/public/app.js +79 -79
- package/references/vscode-extension/dist/dashboard/public/style.css +264 -159
- package/references/vscode-extension/dist/extension.js +9 -2
- package/references/vscode-extension/dist/guard-version.json +1 -1
- package/references/vscode-extension/dist/lib/core/snapshot.js +8 -4
- package/references/vscode-extension/dist/lib/dashboard-manager.js +110 -103
- package/references/vscode-extension/dist/lib/sidebar-webview.js +447 -156
- package/references/vscode-extension/dist/mcp/server.js +9 -6
- package/references/vscode-extension/dist/package.json +1 -1
- package/references/vscode-extension/dist/skill/ROADMAP.md +11 -4
- package/references/vscode-extension/extension.js +9 -2
- package/references/vscode-extension/lib/dashboard-manager.js +110 -103
- package/references/vscode-extension/lib/sidebar-webview.js +447 -156
- package/references/vscode-extension/package.json +1 -1
|
@@ -1,50 +1,68 @@
|
|
|
1
1
|
/* ═══════════════════════════════════════════════════════════════
|
|
2
|
-
Cursor Guard Dashboard —
|
|
2
|
+
Cursor Guard Dashboard — theme aligned with IDE sidebar webview
|
|
3
3
|
═══════════════════════════════════════════════════════════════ */
|
|
4
4
|
|
|
5
5
|
:root {
|
|
6
|
-
|
|
7
|
-
--
|
|
8
|
-
--
|
|
9
|
-
--
|
|
10
|
-
--
|
|
11
|
-
|
|
12
|
-
--
|
|
13
|
-
--
|
|
14
|
-
--
|
|
15
|
-
|
|
16
|
-
--
|
|
17
|
-
--
|
|
18
|
-
--
|
|
19
|
-
--
|
|
20
|
-
|
|
21
|
-
--
|
|
22
|
-
--
|
|
23
|
-
--green
|
|
24
|
-
--
|
|
25
|
-
--
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
--
|
|
29
|
-
--
|
|
30
|
-
--
|
|
31
|
-
--
|
|
32
|
-
--
|
|
33
|
-
--
|
|
34
|
-
--
|
|
35
|
-
--
|
|
36
|
-
--
|
|
37
|
-
--
|
|
38
|
-
--
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
--
|
|
42
|
-
--
|
|
6
|
+
/* Core tokens (parity with references/vscode-extension sidebar webview) */
|
|
7
|
+
--surface: #1f2430;
|
|
8
|
+
--surface-2: #252a38;
|
|
9
|
+
--border: rgba(120, 130, 160, 0.22);
|
|
10
|
+
--text: #e8eaf0;
|
|
11
|
+
--muted: #9aa4bd;
|
|
12
|
+
--green: #89d18a;
|
|
13
|
+
--yellow: #e4c06a;
|
|
14
|
+
--red: #f0a0a0;
|
|
15
|
+
--orange: #f0b070;
|
|
16
|
+
--blue: #8eb6ff;
|
|
17
|
+
--purple: #b8a8e8;
|
|
18
|
+
--radius: 12px;
|
|
19
|
+
--radius-sm: 8px;
|
|
20
|
+
--radius-lg: 14px;
|
|
21
|
+
--shadow: 0 1px 2px rgba(0, 0, 0, 0.18);
|
|
22
|
+
--shadow-soft: 0 4px 14px rgba(0, 0, 0, 0.12);
|
|
23
|
+
--glow-green: color-mix(in srgb, var(--green) 38%, transparent);
|
|
24
|
+
--shell-green-1: color-mix(in srgb, var(--green) 16%, #070907);
|
|
25
|
+
--shell-green-2: color-mix(in srgb, var(--green) 9%, #050805);
|
|
26
|
+
|
|
27
|
+
/* Legacy names used across this file */
|
|
28
|
+
--bg-primary: var(--surface);
|
|
29
|
+
--bg-secondary: var(--surface-2);
|
|
30
|
+
--bg-tertiary: color-mix(in srgb, var(--surface-2) 88%, var(--text));
|
|
31
|
+
--bg-elevated: color-mix(in srgb, var(--surface-2) 94%, #0a0c12);
|
|
32
|
+
--bg-hover: color-mix(in srgb, var(--text) 6%, transparent);
|
|
33
|
+
--border-subtle: color-mix(in srgb, var(--border) 48%, transparent);
|
|
34
|
+
--border-glow: color-mix(in srgb, var(--blue) 38%, var(--border));
|
|
35
|
+
--text-primary: var(--text);
|
|
36
|
+
--text-secondary: var(--muted);
|
|
37
|
+
--text-tertiary: color-mix(in srgb, var(--muted) 72%, var(--surface));
|
|
38
|
+
--text-heading: var(--text);
|
|
39
|
+
--accent: var(--blue);
|
|
40
|
+
|
|
41
|
+
--green-bg: color-mix(in srgb, var(--green) 14%, transparent);
|
|
42
|
+
--green-glow: color-mix(in srgb, var(--green) 30%, transparent);
|
|
43
|
+
--yellow-bg: color-mix(in srgb, var(--yellow) 14%, transparent);
|
|
44
|
+
--yellow-glow: color-mix(in srgb, var(--yellow) 28%, transparent);
|
|
45
|
+
--red-bg: color-mix(in srgb, var(--red) 14%, transparent);
|
|
46
|
+
--red-glow: color-mix(in srgb, var(--red) 30%, transparent);
|
|
47
|
+
--blue-bg: color-mix(in srgb, var(--blue) 14%, transparent);
|
|
48
|
+
--blue-glow: color-mix(in srgb, var(--blue) 24%, transparent);
|
|
49
|
+
--purple-bg: color-mix(in srgb, var(--purple) 14%, transparent);
|
|
50
|
+
--amber: var(--yellow);
|
|
51
|
+
--amber-bg: var(--yellow-bg);
|
|
52
|
+
--gray: var(--muted);
|
|
53
|
+
--gray-bg: color-mix(in srgb, var(--muted) 12%, transparent);
|
|
54
|
+
|
|
55
|
+
--topbar-h: 52px;
|
|
43
56
|
--drawer-w: 500px;
|
|
44
|
-
--shadow-sm:
|
|
45
|
-
--shadow-md:
|
|
46
|
-
--shadow-lg: 0 8px
|
|
47
|
-
--transition: .2s cubic-bezier(.4,0
|
|
57
|
+
--shadow-sm: var(--shadow);
|
|
58
|
+
--shadow-md: var(--shadow-soft);
|
|
59
|
+
--shadow-lg: 0 8px 28px rgba(0, 0, 0, 0.22);
|
|
60
|
+
--transition: 0.2s cubic-bezier(0.4, 0, 0.2, 1);
|
|
61
|
+
|
|
62
|
+
--font-mono: ui-monospace, 'Cascadia Code', 'JetBrains Mono', Consolas, monospace;
|
|
63
|
+
|
|
64
|
+
--card-bg: var(--bg-secondary);
|
|
65
|
+
--bg: var(--bg-primary);
|
|
48
66
|
}
|
|
49
67
|
|
|
50
68
|
/* ── Reset ────────────────────────────────────────────────── */
|
|
@@ -52,14 +70,15 @@
|
|
|
52
70
|
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
|
|
53
71
|
|
|
54
72
|
body {
|
|
55
|
-
font-family:
|
|
56
|
-
font-size:
|
|
57
|
-
line-height: 1.
|
|
73
|
+
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Microsoft YaHei', Roboto, sans-serif;
|
|
74
|
+
font-size: 13px;
|
|
75
|
+
line-height: 1.55;
|
|
58
76
|
color: var(--text-primary);
|
|
59
|
-
background: var(--bg-primary);
|
|
77
|
+
background-color: var(--bg-primary);
|
|
60
78
|
background-image:
|
|
61
|
-
radial-gradient(
|
|
62
|
-
radial-gradient(
|
|
79
|
+
radial-gradient(110% 75% at 8% -15%, var(--shell-green-1), transparent 56%),
|
|
80
|
+
radial-gradient(95% 70% at 102% 108%, var(--shell-green-2), transparent 52%),
|
|
81
|
+
linear-gradient(168deg, #0a0c0f 0%, var(--surface) 48%, #0c100e 100%);
|
|
63
82
|
padding-top: var(--topbar-h);
|
|
64
83
|
-webkit-font-smoothing: antialiased;
|
|
65
84
|
-moz-osx-font-smoothing: grayscale;
|
|
@@ -71,14 +90,15 @@ body {
|
|
|
71
90
|
position: fixed;
|
|
72
91
|
top: 0; left: 0; right: 0;
|
|
73
92
|
height: var(--topbar-h);
|
|
74
|
-
background:
|
|
75
|
-
backdrop-filter: blur(
|
|
76
|
-
-webkit-backdrop-filter: blur(
|
|
77
|
-
border-bottom: 1px solid var(--border);
|
|
93
|
+
background: color-mix(in srgb, var(--surface-2) 78%, transparent);
|
|
94
|
+
backdrop-filter: blur(12px) saturate(1.2);
|
|
95
|
+
-webkit-backdrop-filter: blur(12px) saturate(1.2);
|
|
96
|
+
border-bottom: 1px solid color-mix(in srgb, var(--border) 82%, transparent);
|
|
97
|
+
box-shadow: var(--shadow);
|
|
78
98
|
display: flex;
|
|
79
99
|
align-items: center;
|
|
80
100
|
justify-content: space-between;
|
|
81
|
-
padding: 0
|
|
101
|
+
padding: 0 20px;
|
|
82
102
|
z-index: 50;
|
|
83
103
|
gap: 12px;
|
|
84
104
|
}
|
|
@@ -92,29 +112,42 @@ body {
|
|
|
92
112
|
.logo-icon {
|
|
93
113
|
color: var(--green);
|
|
94
114
|
flex-shrink: 0;
|
|
95
|
-
filter: drop-shadow(0 0
|
|
115
|
+
filter: drop-shadow(0 0 8px var(--green-glow));
|
|
96
116
|
}
|
|
97
117
|
.logo-text {
|
|
98
|
-
font-weight:
|
|
99
|
-
font-size:
|
|
118
|
+
font-weight: 800;
|
|
119
|
+
font-size: 14px;
|
|
100
120
|
white-space: nowrap;
|
|
101
|
-
letter-spacing:
|
|
102
|
-
|
|
121
|
+
letter-spacing: -0.03em;
|
|
122
|
+
line-height: 1.2;
|
|
123
|
+
background: linear-gradient(90deg, var(--text-heading), color-mix(in srgb, var(--text-heading) 72%, var(--blue)));
|
|
124
|
+
-webkit-background-clip: text;
|
|
125
|
+
background-clip: text;
|
|
126
|
+
color: transparent;
|
|
103
127
|
}
|
|
104
128
|
|
|
105
129
|
#project-select {
|
|
106
|
-
background: var(--
|
|
130
|
+
background: color-mix(in srgb, var(--surface-2) 88%, var(--text));
|
|
107
131
|
color: var(--text-primary);
|
|
108
|
-
border: 1px solid var(--border);
|
|
109
|
-
border-radius:
|
|
110
|
-
padding: 5px
|
|
111
|
-
font-size:
|
|
132
|
+
border: 1px solid color-mix(in srgb, var(--border) 88%, transparent);
|
|
133
|
+
border-radius: 999px;
|
|
134
|
+
padding: 5px 12px;
|
|
135
|
+
font-size: 12px;
|
|
136
|
+
font-weight: 600;
|
|
112
137
|
max-width: 220px;
|
|
113
138
|
cursor: pointer;
|
|
114
|
-
transition: border-color
|
|
139
|
+
transition: border-color 0.15s ease, box-shadow 0.15s ease, color 0.15s ease;
|
|
140
|
+
}
|
|
141
|
+
#project-select:hover {
|
|
142
|
+
border-color: color-mix(in srgb, var(--blue) 55%, var(--border));
|
|
143
|
+
color: var(--blue);
|
|
144
|
+
box-shadow: var(--shadow-soft);
|
|
145
|
+
}
|
|
146
|
+
#project-select:focus {
|
|
147
|
+
outline: none;
|
|
148
|
+
border-color: color-mix(in srgb, var(--blue) 55%, var(--border));
|
|
149
|
+
box-shadow: 0 0 0 2px color-mix(in srgb, var(--blue) 35%, transparent);
|
|
115
150
|
}
|
|
116
|
-
#project-select:hover { border-color: var(--blue); }
|
|
117
|
-
#project-select:focus { outline: none; border-color: var(--blue); box-shadow: 0 0 0 3px var(--blue-bg); }
|
|
118
151
|
|
|
119
152
|
#last-refresh { font-size: 12px; white-space: nowrap; opacity: .7; }
|
|
120
153
|
|
|
@@ -211,31 +244,32 @@ body {
|
|
|
211
244
|
display: inline-flex;
|
|
212
245
|
align-items: center;
|
|
213
246
|
gap: 6px;
|
|
214
|
-
padding:
|
|
247
|
+
padding: 8px 12px;
|
|
215
248
|
border: 1px solid var(--border);
|
|
216
|
-
border-radius: var(--radius
|
|
217
|
-
background: var(--
|
|
249
|
+
border-radius: var(--radius);
|
|
250
|
+
background: color-mix(in srgb, var(--surface-2) 88%, var(--text));
|
|
218
251
|
color: var(--text-primary);
|
|
219
|
-
font-size:
|
|
220
|
-
font-weight:
|
|
252
|
+
font-size: 12px;
|
|
253
|
+
font-weight: 600;
|
|
254
|
+
font-family: inherit;
|
|
221
255
|
cursor: pointer;
|
|
222
|
-
transition:
|
|
256
|
+
transition: border-color 0.15s ease, background 0.15s ease, color 0.15s ease, box-shadow 0.15s ease;
|
|
223
257
|
white-space: nowrap;
|
|
224
258
|
}
|
|
225
259
|
.btn:hover {
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
260
|
+
border-color: color-mix(in srgb, var(--blue) 55%, var(--border));
|
|
261
|
+
color: var(--blue);
|
|
262
|
+
box-shadow: var(--shadow-soft);
|
|
229
263
|
}
|
|
230
|
-
.btn:active { transform: scale(.
|
|
264
|
+
.btn:active { transform: scale(0.98); }
|
|
231
265
|
|
|
232
266
|
.btn-ghost {
|
|
233
267
|
background: transparent;
|
|
234
|
-
border-color: transparent;
|
|
268
|
+
border-color: color-mix(in srgb, var(--border) 55%, transparent);
|
|
235
269
|
}
|
|
236
270
|
.btn-ghost:hover {
|
|
237
271
|
background: var(--bg-hover);
|
|
238
|
-
border-color:
|
|
272
|
+
border-color: color-mix(in srgb, var(--blue) 40%, var(--border));
|
|
239
273
|
}
|
|
240
274
|
|
|
241
275
|
.btn-sm { padding: 4px 10px; font-size: 12px; }
|
|
@@ -243,9 +277,9 @@ body {
|
|
|
243
277
|
/* ── Main ─────────────────────────────────────────────────── */
|
|
244
278
|
|
|
245
279
|
main {
|
|
246
|
-
max-width:
|
|
280
|
+
max-width: 1120px;
|
|
247
281
|
margin: 0 auto;
|
|
248
|
-
padding:
|
|
282
|
+
padding: 22px 20px 56px;
|
|
249
283
|
}
|
|
250
284
|
|
|
251
285
|
/* ── Sections ─────────────────────────────────────────────── */
|
|
@@ -253,11 +287,11 @@ main {
|
|
|
253
287
|
.screen { margin-bottom: 44px; }
|
|
254
288
|
|
|
255
289
|
.section-title {
|
|
256
|
-
font-size:
|
|
290
|
+
font-size: 11px;
|
|
257
291
|
font-weight: 700;
|
|
258
|
-
color: var(--
|
|
259
|
-
margin-bottom:
|
|
260
|
-
letter-spacing: .
|
|
292
|
+
color: var(--muted);
|
|
293
|
+
margin-bottom: 14px;
|
|
294
|
+
letter-spacing: 0.1em;
|
|
261
295
|
text-transform: uppercase;
|
|
262
296
|
}
|
|
263
297
|
|
|
@@ -266,38 +300,28 @@ main {
|
|
|
266
300
|
.card-grid {
|
|
267
301
|
display: grid;
|
|
268
302
|
grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
|
|
269
|
-
gap:
|
|
303
|
+
gap: 12px;
|
|
270
304
|
}
|
|
271
305
|
|
|
272
306
|
.card {
|
|
273
|
-
background:
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
307
|
+
background: linear-gradient(
|
|
308
|
+
165deg,
|
|
309
|
+
color-mix(in srgb, var(--bg-secondary) 100%, var(--text-primary)) 0%,
|
|
310
|
+
color-mix(in srgb, var(--bg-secondary) 96%, transparent) 100%
|
|
311
|
+
);
|
|
312
|
+
border: 1px solid color-mix(in srgb, var(--border) 90%, transparent);
|
|
313
|
+
border-radius: var(--radius-lg);
|
|
314
|
+
padding: 14px 16px;
|
|
315
|
+
transition: border-color 0.2s ease, box-shadow 0.2s ease;
|
|
278
316
|
position: relative;
|
|
279
317
|
overflow: hidden;
|
|
280
|
-
|
|
281
|
-
.card::before {
|
|
282
|
-
content: '';
|
|
283
|
-
position: absolute;
|
|
284
|
-
inset: 0;
|
|
285
|
-
border-radius: var(--radius);
|
|
286
|
-
padding: 1px;
|
|
287
|
-
background: linear-gradient(135deg, rgba(59,130,246,.1), transparent 50%);
|
|
288
|
-
-webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
|
|
289
|
-
-webkit-mask-composite: xor;
|
|
290
|
-
mask-composite: exclude;
|
|
291
|
-
pointer-events: none;
|
|
292
|
-
opacity: 0;
|
|
293
|
-
transition: opacity var(--transition);
|
|
318
|
+
box-shadow: var(--shadow);
|
|
294
319
|
}
|
|
295
320
|
.card:hover {
|
|
296
|
-
transform: translateY(-
|
|
297
|
-
|
|
298
|
-
|
|
321
|
+
transform: translateY(-1px);
|
|
322
|
+
border-color: color-mix(in srgb, var(--border) 70%, var(--blue));
|
|
323
|
+
box-shadow: var(--shadow-soft);
|
|
299
324
|
}
|
|
300
|
-
.card:hover::before { opacity: 1; }
|
|
301
325
|
|
|
302
326
|
.card-health {
|
|
303
327
|
grid-column: 1 / -1;
|
|
@@ -305,7 +329,11 @@ main {
|
|
|
305
329
|
align-items: center;
|
|
306
330
|
gap: 18px;
|
|
307
331
|
flex-wrap: wrap;
|
|
308
|
-
background: linear-gradient(
|
|
332
|
+
background: linear-gradient(
|
|
333
|
+
165deg,
|
|
334
|
+
color-mix(in srgb, var(--bg-secondary) 100%, var(--text-primary)) 0%,
|
|
335
|
+
color-mix(in srgb, var(--bg-elevated) 92%, transparent) 100%
|
|
336
|
+
);
|
|
309
337
|
}
|
|
310
338
|
|
|
311
339
|
.card-label {
|
|
@@ -547,15 +575,23 @@ main {
|
|
|
547
575
|
}
|
|
548
576
|
|
|
549
577
|
.stat-card {
|
|
550
|
-
background:
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
578
|
+
background: linear-gradient(
|
|
579
|
+
165deg,
|
|
580
|
+
color-mix(in srgb, var(--bg-secondary) 100%, var(--text-primary)) 0%,
|
|
581
|
+
color-mix(in srgb, var(--bg-secondary) 96%, transparent) 100%
|
|
582
|
+
);
|
|
583
|
+
border: 1px solid color-mix(in srgb, var(--border) 90%, transparent);
|
|
584
|
+
border-radius: var(--radius-lg);
|
|
585
|
+
padding: 12px 16px;
|
|
554
586
|
min-width: 150px;
|
|
555
587
|
flex: 1;
|
|
556
|
-
transition: border-color
|
|
588
|
+
transition: border-color 0.2s ease, box-shadow 0.2s ease;
|
|
589
|
+
box-shadow: var(--shadow);
|
|
590
|
+
}
|
|
591
|
+
.stat-card:hover {
|
|
592
|
+
border-color: color-mix(in srgb, var(--border) 70%, var(--blue));
|
|
593
|
+
box-shadow: var(--shadow-soft);
|
|
557
594
|
}
|
|
558
|
-
.stat-card:hover { border-color: var(--border-glow); }
|
|
559
595
|
.stat-label {
|
|
560
596
|
font-size: 10px;
|
|
561
597
|
font-weight: 700;
|
|
@@ -599,18 +635,23 @@ main {
|
|
|
599
635
|
.filter-btn.active {
|
|
600
636
|
background: var(--blue-bg);
|
|
601
637
|
color: var(--blue);
|
|
602
|
-
border-color:
|
|
638
|
+
border-color: color-mix(in srgb, var(--blue) 42%, var(--border));
|
|
603
639
|
font-weight: 600;
|
|
604
640
|
}
|
|
605
641
|
|
|
606
642
|
/* ── Table ────────────────────────────────────────────────── */
|
|
607
643
|
|
|
608
644
|
.table-wrap {
|
|
609
|
-
background:
|
|
610
|
-
|
|
611
|
-
|
|
645
|
+
background: linear-gradient(
|
|
646
|
+
165deg,
|
|
647
|
+
color-mix(in srgb, var(--bg-secondary) 100%, var(--text-primary)) 0%,
|
|
648
|
+
color-mix(in srgb, var(--bg-secondary) 97%, transparent) 100%
|
|
649
|
+
);
|
|
650
|
+
border: 1px solid color-mix(in srgb, var(--border) 88%, transparent);
|
|
651
|
+
border-radius: var(--radius-lg);
|
|
612
652
|
overflow: auto;
|
|
613
653
|
max-height: 440px;
|
|
654
|
+
box-shadow: var(--shadow);
|
|
614
655
|
}
|
|
615
656
|
|
|
616
657
|
.data-table {
|
|
@@ -642,13 +683,13 @@ main {
|
|
|
642
683
|
transition: background var(--transition);
|
|
643
684
|
}
|
|
644
685
|
.data-table tbody tr:hover {
|
|
645
|
-
background:
|
|
686
|
+
background: color-mix(in srgb, var(--blue) 6%, transparent);
|
|
646
687
|
}
|
|
647
688
|
.data-table tbody tr:nth-child(even) {
|
|
648
|
-
background:
|
|
689
|
+
background: color-mix(in srgb, var(--text-primary) 2.5%, transparent);
|
|
649
690
|
}
|
|
650
691
|
.data-table tbody tr:nth-child(even):hover {
|
|
651
|
-
background:
|
|
692
|
+
background: color-mix(in srgb, var(--blue) 6%, transparent);
|
|
652
693
|
}
|
|
653
694
|
|
|
654
695
|
/* ── Protection ───────────────────────────────────────────── */
|
|
@@ -660,21 +701,58 @@ main {
|
|
|
660
701
|
}
|
|
661
702
|
|
|
662
703
|
.pattern-card {
|
|
663
|
-
background:
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
704
|
+
background: linear-gradient(
|
|
705
|
+
165deg,
|
|
706
|
+
color-mix(in srgb, var(--bg-secondary) 100%, var(--text-primary)) 0%,
|
|
707
|
+
color-mix(in srgb, var(--bg-secondary) 96%, transparent) 100%
|
|
708
|
+
);
|
|
709
|
+
border: 1px solid color-mix(in srgb, var(--border) 90%, transparent);
|
|
710
|
+
border-radius: var(--radius-lg);
|
|
711
|
+
padding: 16px;
|
|
712
|
+
transition: border-color 0.2s ease, box-shadow 0.2s ease;
|
|
713
|
+
box-shadow: var(--shadow);
|
|
714
|
+
}
|
|
715
|
+
.pattern-card:hover {
|
|
716
|
+
box-shadow: var(--shadow-soft);
|
|
717
|
+
}
|
|
718
|
+
.pattern-card--protect {
|
|
719
|
+
border-color: color-mix(in srgb, var(--green) 34%, var(--border));
|
|
720
|
+
background: linear-gradient(
|
|
721
|
+
165deg,
|
|
722
|
+
color-mix(in srgb, var(--green) 9%, var(--bg-secondary)) 0%,
|
|
723
|
+
color-mix(in srgb, var(--bg-secondary) 98%, var(--text-primary)) 100%
|
|
724
|
+
);
|
|
725
|
+
}
|
|
726
|
+
.pattern-card--protect:hover {
|
|
727
|
+
border-color: color-mix(in srgb, var(--green) 48%, var(--border));
|
|
728
|
+
}
|
|
729
|
+
.pattern-card--ignore {
|
|
730
|
+
border-color: color-mix(in srgb, var(--muted) 26%, var(--border));
|
|
731
|
+
background: linear-gradient(
|
|
732
|
+
165deg,
|
|
733
|
+
color-mix(in srgb, var(--muted) 7%, var(--bg-secondary)) 0%,
|
|
734
|
+
color-mix(in srgb, var(--bg-secondary) 98%, var(--text-primary)) 100%
|
|
735
|
+
);
|
|
736
|
+
}
|
|
737
|
+
.pattern-card--ignore:hover {
|
|
738
|
+
border-color: color-mix(in srgb, var(--muted) 38%, var(--border));
|
|
668
739
|
}
|
|
669
|
-
.pattern-card:hover { border-color: var(--border-glow); }
|
|
670
740
|
.pattern-card h4 {
|
|
671
741
|
font-size: 10px;
|
|
672
742
|
font-weight: 700;
|
|
673
743
|
text-transform: uppercase;
|
|
674
|
-
letter-spacing: .
|
|
675
|
-
color: var(--text-tertiary);
|
|
744
|
+
letter-spacing: .1em;
|
|
676
745
|
margin-bottom: 12px;
|
|
677
746
|
}
|
|
747
|
+
.pattern-card--protect h4 { color: var(--green); }
|
|
748
|
+
.pattern-card--ignore h4 { color: color-mix(in srgb, var(--muted) 88%, var(--text)); }
|
|
749
|
+
|
|
750
|
+
.pattern-empty {
|
|
751
|
+
margin: 0;
|
|
752
|
+
line-height: 1.5;
|
|
753
|
+
}
|
|
754
|
+
.pattern-empty--protect { color: color-mix(in srgb, var(--green) 65%, var(--muted)); }
|
|
755
|
+
.pattern-empty--ignore { color: color-mix(in srgb, var(--muted) 95%, var(--text)); }
|
|
678
756
|
|
|
679
757
|
.pattern-list {
|
|
680
758
|
list-style: none;
|
|
@@ -683,16 +761,30 @@ main {
|
|
|
683
761
|
gap: 8px;
|
|
684
762
|
}
|
|
685
763
|
.pattern-item {
|
|
686
|
-
font-family:
|
|
687
|
-
font-size:
|
|
688
|
-
|
|
689
|
-
border:
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
764
|
+
font-family: var(--font-mono);
|
|
765
|
+
font-size: 11px;
|
|
766
|
+
padding: 5px 10px;
|
|
767
|
+
border-radius: 8px;
|
|
768
|
+
transition: border-color 0.15s ease, box-shadow 0.15s ease;
|
|
769
|
+
}
|
|
770
|
+
.pattern-item--protect {
|
|
771
|
+
color: color-mix(in srgb, var(--green) 90%, #fff);
|
|
772
|
+
background: color-mix(in srgb, var(--green) 13%, var(--bg-tertiary));
|
|
773
|
+
border: 1px solid color-mix(in srgb, var(--green) 40%, transparent);
|
|
774
|
+
box-shadow: 0 0 0 1px color-mix(in srgb, var(--green) 8%, transparent);
|
|
775
|
+
}
|
|
776
|
+
.pattern-item--protect:hover {
|
|
777
|
+
border-color: color-mix(in srgb, var(--green) 58%, transparent);
|
|
778
|
+
box-shadow: var(--shadow-soft);
|
|
779
|
+
}
|
|
780
|
+
.pattern-item--ignore {
|
|
781
|
+
color: color-mix(in srgb, var(--muted) 96%, var(--text));
|
|
782
|
+
background: color-mix(in srgb, var(--muted) 11%, var(--bg-tertiary));
|
|
783
|
+
border: 1px solid color-mix(in srgb, var(--muted) 32%, var(--border));
|
|
784
|
+
}
|
|
785
|
+
.pattern-item--ignore:hover {
|
|
786
|
+
border-color: color-mix(in srgb, var(--muted) 50%, var(--border));
|
|
694
787
|
}
|
|
695
|
-
.pattern-item:hover { border-color: var(--blue); }
|
|
696
788
|
|
|
697
789
|
.protection-note {
|
|
698
790
|
margin-top: 16px;
|
|
@@ -712,20 +804,25 @@ main {
|
|
|
712
804
|
/* ── Diagnostics Summary ──────────────────────────────────── */
|
|
713
805
|
|
|
714
806
|
.diag-summary {
|
|
715
|
-
background: linear-gradient(
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
807
|
+
background: linear-gradient(
|
|
808
|
+
165deg,
|
|
809
|
+
color-mix(in srgb, var(--bg-secondary) 100%, var(--text-primary)) 0%,
|
|
810
|
+
color-mix(in srgb, var(--bg-elevated) 94%, transparent) 100%
|
|
811
|
+
);
|
|
812
|
+
border: 1px solid color-mix(in srgb, var(--border) 88%, transparent);
|
|
813
|
+
border-radius: var(--radius-lg);
|
|
814
|
+
padding: 18px 22px;
|
|
719
815
|
display: flex;
|
|
720
816
|
align-items: center;
|
|
721
817
|
gap: 24px;
|
|
722
818
|
cursor: pointer;
|
|
723
|
-
transition:
|
|
819
|
+
transition: border-color 0.2s ease, box-shadow 0.2s ease, transform 0.2s ease;
|
|
820
|
+
box-shadow: var(--shadow);
|
|
724
821
|
}
|
|
725
822
|
.diag-summary:hover {
|
|
726
|
-
transform: translateY(-
|
|
727
|
-
box-shadow: var(--shadow-
|
|
728
|
-
border-color: var(--border
|
|
823
|
+
transform: translateY(-1px);
|
|
824
|
+
box-shadow: var(--shadow-soft);
|
|
825
|
+
border-color: color-mix(in srgb, var(--border) 70%, var(--blue));
|
|
729
826
|
}
|
|
730
827
|
|
|
731
828
|
.diag-counts {
|
|
@@ -778,9 +875,13 @@ main {
|
|
|
778
875
|
top: 0; right: 0; bottom: 0;
|
|
779
876
|
width: var(--drawer-w);
|
|
780
877
|
max-width: 92vw;
|
|
781
|
-
background:
|
|
782
|
-
|
|
783
|
-
|
|
878
|
+
background: linear-gradient(
|
|
879
|
+
180deg,
|
|
880
|
+
color-mix(in srgb, var(--bg-secondary) 100%, var(--text-primary)) 0%,
|
|
881
|
+
var(--bg-primary) 100%
|
|
882
|
+
);
|
|
883
|
+
border-left: 1px solid color-mix(in srgb, var(--border) 85%, transparent);
|
|
884
|
+
box-shadow: -8px 0 32px rgba(0, 0, 0, 0.2);
|
|
784
885
|
z-index: 101;
|
|
785
886
|
display: flex;
|
|
786
887
|
flex-direction: column;
|
|
@@ -1317,16 +1418,16 @@ main {
|
|
|
1317
1418
|
left: 50%;
|
|
1318
1419
|
transform: translateX(-50%) translateY(20px);
|
|
1319
1420
|
background: var(--green);
|
|
1320
|
-
color:
|
|
1421
|
+
color: var(--surface);
|
|
1321
1422
|
padding: 8px 20px;
|
|
1322
|
-
border-radius: var(--radius
|
|
1323
|
-
font-size:
|
|
1423
|
+
border-radius: var(--radius);
|
|
1424
|
+
font-size: 12px;
|
|
1324
1425
|
font-weight: 700;
|
|
1325
1426
|
opacity: 0;
|
|
1326
1427
|
transition: opacity .25s, transform .25s;
|
|
1327
1428
|
z-index: 200;
|
|
1328
1429
|
pointer-events: none;
|
|
1329
|
-
box-shadow: 0
|
|
1430
|
+
box-shadow: var(--shadow-soft), 0 0 0 1px color-mix(in srgb, var(--green) 45%, transparent);
|
|
1330
1431
|
}
|
|
1331
1432
|
.copy-toast.show {
|
|
1332
1433
|
opacity: 1;
|
|
@@ -1343,7 +1444,7 @@ main {
|
|
|
1343
1444
|
/* ── Selection ───────────────────────────────────────────── */
|
|
1344
1445
|
|
|
1345
1446
|
::selection {
|
|
1346
|
-
background:
|
|
1447
|
+
background: color-mix(in srgb, var(--blue) 32%, transparent);
|
|
1347
1448
|
color: var(--text-heading);
|
|
1348
1449
|
}
|
|
1349
1450
|
|
|
@@ -1363,15 +1464,19 @@ main {
|
|
|
1363
1464
|
display: flex;
|
|
1364
1465
|
}
|
|
1365
1466
|
.file-modal {
|
|
1366
|
-
background:
|
|
1367
|
-
|
|
1368
|
-
|
|
1467
|
+
background: linear-gradient(
|
|
1468
|
+
165deg,
|
|
1469
|
+
color-mix(in srgb, var(--card-bg) 100%, var(--text-primary)) 0%,
|
|
1470
|
+
color-mix(in srgb, var(--card-bg) 96%, transparent) 100%
|
|
1471
|
+
);
|
|
1472
|
+
border: 1px solid color-mix(in srgb, var(--border) 88%, transparent);
|
|
1473
|
+
border-radius: var(--radius-lg);
|
|
1369
1474
|
width: 90vw;
|
|
1370
1475
|
max-width: 720px;
|
|
1371
1476
|
max-height: 80vh;
|
|
1372
1477
|
display: flex;
|
|
1373
1478
|
flex-direction: column;
|
|
1374
|
-
box-shadow:
|
|
1479
|
+
box-shadow: var(--shadow-lg), var(--shadow-soft);
|
|
1375
1480
|
}
|
|
1376
1481
|
.file-modal-header {
|
|
1377
1482
|
display: flex;
|
|
@@ -414,9 +414,16 @@ async function activate(context) {
|
|
|
414
414
|
const projectPath = folders[0].uri.fsPath;
|
|
415
415
|
const result = await dashMgr.snapshotNow(projectPath);
|
|
416
416
|
if (result?.status === 'created') {
|
|
417
|
-
|
|
417
|
+
const n = result.changedCount ?? 0;
|
|
418
|
+
const msg =
|
|
419
|
+
n > 0
|
|
420
|
+
? `Cursor Guard: snapshot created (${n} file change(s))`
|
|
421
|
+
: 'Cursor Guard: snapshot created (restore point saved; no file changes since last snapshot)';
|
|
422
|
+
vscode.window.showInformationMessage(msg);
|
|
418
423
|
} else if (result?.status === 'unchanged' || result?.status === 'skipped') {
|
|
419
|
-
vscode.window.showInformationMessage(
|
|
424
|
+
vscode.window.showInformationMessage(
|
|
425
|
+
`Cursor Guard: no snapshot created (${result.reason || 'unchanged'})`
|
|
426
|
+
);
|
|
420
427
|
} else if (result?.status === 'error') {
|
|
421
428
|
vscode.window.showWarningMessage(`Cursor Guard: ${result.error}`);
|
|
422
429
|
} else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":"4.9.
|
|
1
|
+
{"version":"4.9.9"}
|