kiro-memory 1.2.2 → 1.4.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.
@@ -1,642 +1,112 @@
1
1
  <!DOCTYPE html>
2
- <html lang="en">
2
+ <html lang="en" class="dark">
3
3
  <head>
4
4
  <meta charset="UTF-8">
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>Kiro Memory</title>
7
- <style>
8
- /* Palette dark moderna (default) */
9
- :root {
10
- --bg-primary: #0a0a0b;
11
- --bg-secondary: #141416;
12
- --bg-tertiary: #1c1c1f;
13
- --bg-hover: #232328;
14
- --bg-elevated: #1a1a1d;
15
- --text-primary: #f5f5f7;
16
- --text-secondary: #8e8e93;
17
- --text-muted: #636366;
18
- --border-color: #2c2c2e;
19
- --border-subtle: #1f1f22;
20
- --accent: #6366f1;
21
- --accent-hover: #818cf8;
22
- --accent-muted: rgba(99, 102, 241, 0.15);
23
- --green: #34d399;
24
- --green-muted: rgba(52, 211, 153, 0.15);
25
- --amber: #fbbf24;
26
- --amber-muted: rgba(251, 191, 36, 0.15);
27
- --blue: #60a5fa;
28
- --blue-muted: rgba(96, 165, 250, 0.15);
29
- --violet: #a78bfa;
30
- --violet-muted: rgba(167, 139, 250, 0.15);
31
- --pink: #f472b6;
32
- --pink-muted: rgba(244, 114, 182, 0.15);
33
- --red: #f87171;
34
- --red-muted: rgba(248, 113, 113, 0.15);
35
- --teal: #2dd4bf;
36
- --teal-muted: rgba(45, 212, 191, 0.15);
37
- --sidebar-width: 260px;
38
- --header-height: 56px;
39
- --radius: 8px;
40
- --radius-sm: 4px;
41
- --shadow-card: 0 1px 3px rgba(0,0,0,0.4);
42
- --shadow-hover: 0 4px 12px rgba(0,0,0,0.5);
43
- --font-mono: 'SF Mono', 'Fira Code', 'Cascadia Code', monospace;
44
- --font-sans: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
45
- --transition: 150ms ease;
46
- }
47
-
48
- /* Light mode */
49
- [data-theme="light"] {
50
- --bg-primary: #ffffff;
51
- --bg-secondary: #f9fafb;
52
- --bg-tertiary: #f3f4f6;
53
- --bg-hover: #e5e7eb;
54
- --bg-elevated: #ffffff;
55
- --text-primary: #111827;
56
- --text-secondary: #6b7280;
57
- --text-muted: #9ca3af;
58
- --border-color: #e5e7eb;
59
- --border-subtle: #f3f4f6;
60
- --accent: #4f46e5;
61
- --accent-hover: #6366f1;
62
- --accent-muted: rgba(79, 70, 229, 0.1);
63
- --green-muted: rgba(52, 211, 153, 0.1);
64
- --amber-muted: rgba(251, 191, 36, 0.1);
65
- --blue-muted: rgba(96, 165, 250, 0.1);
66
- --violet-muted: rgba(167, 139, 250, 0.1);
67
- --pink-muted: rgba(244, 114, 182, 0.1);
68
- --red-muted: rgba(248, 113, 113, 0.1);
69
- --shadow-card: 0 1px 3px rgba(0,0,0,0.08);
70
- --shadow-hover: 0 4px 12px rgba(0,0,0,0.12);
71
- }
72
-
73
- /* Reset */
74
- *, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; }
75
-
76
- body {
77
- font-family: var(--font-sans);
78
- background: var(--bg-primary);
79
- color: var(--text-primary);
80
- line-height: 1.5;
81
- -webkit-font-smoothing: antialiased;
82
- }
83
-
84
- /* Layout principale */
85
- .app {
86
- display: grid;
87
- grid-template-columns: var(--sidebar-width) 1fr;
88
- grid-template-rows: var(--header-height) 1fr;
89
- grid-template-areas:
90
- "header header"
91
- "sidebar main";
92
- height: 100vh;
93
- overflow: hidden;
94
- }
95
-
96
- /* Header */
97
- .header {
98
- grid-area: header;
99
- display: flex;
100
- align-items: center;
101
- gap: 16px;
102
- padding: 0 20px;
103
- background: var(--bg-secondary);
104
- border-bottom: 1px solid var(--border-color);
105
- z-index: 100;
106
- }
107
-
108
- .header-brand {
109
- display: flex;
110
- align-items: center;
111
- gap: 8px;
112
- width: var(--sidebar-width);
113
- flex-shrink: 0;
114
- padding-right: 16px;
115
- border-right: 1px solid var(--border-color);
116
- }
117
-
118
- .header-brand h1 {
119
- font-size: 15px;
120
- font-weight: 600;
121
- letter-spacing: -0.01em;
122
- }
123
-
124
- .status-dot {
125
- width: 8px;
126
- height: 8px;
127
- border-radius: 50%;
128
- flex-shrink: 0;
129
- }
130
- .status-dot.connected { background: var(--green); box-shadow: 0 0 6px var(--green); }
131
- .status-dot.disconnected { background: var(--red); }
132
-
133
- /* Ricerca spotlight */
134
- .search-container {
135
- flex: 1;
136
- max-width: 600px;
137
- position: relative;
138
- }
139
-
140
- .search-input-wrapper {
141
- display: flex;
142
- align-items: center;
143
- gap: 8px;
144
- padding: 0 12px;
145
- height: 36px;
146
- background: var(--bg-tertiary);
147
- border: 1px solid var(--border-color);
148
- border-radius: var(--radius);
149
- transition: border-color var(--transition), box-shadow var(--transition);
150
- }
151
-
152
- .search-input-wrapper:focus-within {
153
- border-color: var(--accent);
154
- box-shadow: 0 0 0 3px var(--accent-muted);
155
- }
156
-
157
- .search-icon {
158
- color: var(--text-muted);
159
- flex-shrink: 0;
160
- width: 16px;
161
- height: 16px;
162
- }
163
-
164
- .search-input {
165
- flex: 1;
166
- border: none;
167
- background: transparent;
168
- color: var(--text-primary);
169
- font-size: 13px;
170
- outline: none;
171
- font-family: var(--font-sans);
172
- }
173
-
174
- .search-input::placeholder { color: var(--text-muted); }
175
-
176
- .search-shortcut {
177
- font-size: 11px;
178
- color: var(--text-muted);
179
- background: var(--bg-hover);
180
- padding: 2px 6px;
181
- border-radius: var(--radius-sm);
182
- border: 1px solid var(--border-color);
183
- font-family: var(--font-mono);
184
- }
185
-
186
- /* Dropdown risultati ricerca */
187
- .search-results {
188
- position: absolute;
189
- top: calc(100% + 4px);
190
- left: 0;
191
- right: 0;
192
- max-height: 400px;
193
- overflow-y: auto;
194
- background: var(--bg-elevated);
195
- border: 1px solid var(--border-color);
196
- border-radius: var(--radius);
197
- box-shadow: var(--shadow-hover);
198
- z-index: 200;
199
- }
200
-
201
- .search-result-item {
202
- display: flex;
203
- align-items: flex-start;
204
- gap: 10px;
205
- padding: 10px 14px;
206
- cursor: pointer;
207
- border-bottom: 1px solid var(--border-subtle);
208
- transition: background var(--transition);
209
- }
210
-
211
- .search-result-item:hover { background: var(--bg-hover); }
212
- .search-result-item:last-child { border-bottom: none; }
213
-
214
- .search-result-title {
215
- font-size: 13px;
216
- font-weight: 500;
217
- color: var(--text-primary);
218
- }
219
-
220
- .search-result-snippet {
221
- font-size: 12px;
222
- color: var(--text-secondary);
223
- margin-top: 2px;
224
- overflow: hidden;
225
- text-overflow: ellipsis;
226
- white-space: nowrap;
227
- }
228
-
229
- .search-result-meta {
230
- font-size: 11px;
231
- color: var(--text-muted);
232
- margin-top: 2px;
233
- }
234
-
235
- .search-empty {
236
- padding: 20px;
237
- text-align: center;
238
- color: var(--text-muted);
239
- font-size: 13px;
240
- }
241
-
242
- /* Controlli header a destra */
243
- .header-controls {
244
- display: flex;
245
- align-items: center;
246
- gap: 8px;
247
- margin-left: auto;
248
- }
249
-
250
- .theme-btn {
251
- display: flex;
252
- align-items: center;
253
- justify-content: center;
254
- width: 32px;
255
- height: 32px;
256
- border: 1px solid var(--border-color);
257
- border-radius: var(--radius);
258
- background: var(--bg-tertiary);
259
- color: var(--text-secondary);
260
- cursor: pointer;
261
- transition: all var(--transition);
262
- font-size: 16px;
263
- }
264
-
265
- .theme-btn:hover {
266
- background: var(--bg-hover);
267
- color: var(--text-primary);
268
- }
269
-
270
- /* Sidebar */
271
- .sidebar {
272
- grid-area: sidebar;
273
- background: var(--bg-secondary);
274
- border-right: 1px solid var(--border-color);
275
- overflow-y: auto;
276
- padding: 16px 0;
277
- display: flex;
278
- flex-direction: column;
279
- gap: 24px;
280
- }
281
-
282
- .sidebar-section {
283
- padding: 0 16px;
284
- }
285
-
286
- .sidebar-title {
287
- font-size: 11px;
288
- font-weight: 600;
289
- text-transform: uppercase;
290
- letter-spacing: 0.05em;
291
- color: var(--text-muted);
292
- margin-bottom: 8px;
293
- }
294
-
295
- .sidebar-item {
296
- display: flex;
297
- align-items: center;
298
- gap: 8px;
299
- padding: 6px 10px;
300
- border-radius: var(--radius-sm);
301
- font-size: 13px;
302
- color: var(--text-secondary);
303
- cursor: pointer;
304
- transition: all var(--transition);
305
- }
306
-
307
- .sidebar-item:hover {
308
- background: var(--bg-hover);
309
- color: var(--text-primary);
310
- }
311
-
312
- .sidebar-item.active {
313
- background: var(--accent-muted);
314
- color: var(--accent);
315
- font-weight: 500;
316
- }
317
-
318
- .sidebar-item-count {
319
- margin-left: auto;
320
- font-size: 11px;
321
- color: var(--text-muted);
322
- font-family: var(--font-mono);
323
- }
324
-
325
- /* Checkbox filtri tipo */
326
- .filter-checkbox {
327
- display: flex;
328
- align-items: center;
329
- gap: 8px;
330
- padding: 5px 10px;
331
- border-radius: var(--radius-sm);
332
- font-size: 13px;
333
- color: var(--text-secondary);
334
- cursor: pointer;
335
- transition: all var(--transition);
336
- }
337
-
338
- .filter-checkbox:hover { background: var(--bg-hover); }
339
-
340
- .filter-checkbox input[type="checkbox"] {
341
- accent-color: var(--accent);
342
- width: 14px;
343
- height: 14px;
344
- }
345
-
346
- .filter-dot {
347
- width: 8px;
348
- height: 8px;
349
- border-radius: 50%;
350
- flex-shrink: 0;
351
- }
352
-
353
- /* Statistiche sidebar */
354
- .stats-grid {
355
- display: grid;
356
- grid-template-columns: 1fr 1fr;
357
- gap: 8px;
358
- }
359
-
360
- .stat-card {
361
- background: var(--bg-tertiary);
362
- border-radius: var(--radius-sm);
363
- padding: 10px;
364
- text-align: center;
365
- }
366
-
367
- .stat-value {
368
- font-size: 18px;
369
- font-weight: 600;
370
- color: var(--text-primary);
371
- font-family: var(--font-mono);
372
- }
373
-
374
- .stat-label {
375
- font-size: 10px;
376
- color: var(--text-muted);
377
- text-transform: uppercase;
378
- letter-spacing: 0.05em;
379
- margin-top: 2px;
380
- }
381
-
382
- /* Area principale (feed) */
383
- .main {
384
- grid-area: main;
385
- overflow-y: auto;
386
- padding: 20px 24px;
387
- background: var(--bg-primary);
388
- }
389
-
390
- .feed {
391
- max-width: 800px;
392
- margin: 0 auto;
393
- display: flex;
394
- flex-direction: column;
395
- gap: 10px;
396
- }
397
-
398
- /* Card generica */
399
- .card {
400
- background: var(--bg-secondary);
401
- border: 1px solid var(--border-color);
402
- border-radius: var(--radius);
403
- padding: 14px 16px;
404
- border-left: 3px solid transparent;
405
- transition: transform var(--transition), box-shadow var(--transition);
406
- }
407
-
408
- .card:hover {
409
- transform: translateY(-1px);
410
- box-shadow: var(--shadow-hover);
411
- }
412
-
413
- /* Colori bordo sinistro per tipo */
414
- .card--file-write { border-left-color: var(--green); }
415
- .card--command { border-left-color: var(--amber); }
416
- .card--research { border-left-color: var(--blue); }
417
- .card--summary { border-left-color: var(--violet); }
418
- .card--prompt { border-left-color: var(--pink); }
419
- .card--delegation { border-left-color: var(--accent); }
420
- .card--file-read { border-left-color: var(--teal); }
421
- .card--tool-use { border-left-color: var(--text-muted); }
422
- .card--default { border-left-color: var(--text-muted); }
423
-
424
- .card-header {
425
- display: flex;
426
- align-items: center;
427
- gap: 8px;
428
- margin-bottom: 8px;
429
- font-size: 12px;
430
- }
431
-
432
- /* Badge tipo */
433
- .badge {
434
- display: inline-flex;
435
- align-items: center;
436
- gap: 4px;
437
- padding: 2px 8px;
438
- border-radius: 9999px;
439
- font-size: 11px;
440
- font-weight: 500;
441
- text-transform: uppercase;
442
- letter-spacing: 0.03em;
443
- }
444
-
445
- .badge--file-write { background: var(--green-muted); color: var(--green); }
446
- .badge--command { background: var(--amber-muted); color: var(--amber); }
447
- .badge--research { background: var(--blue-muted); color: var(--blue); }
448
- .badge--summary { background: var(--violet-muted); color: var(--violet); }
449
- .badge--prompt { background: var(--pink-muted); color: var(--pink); }
450
- .badge--delegation { background: var(--accent-muted); color: var(--accent); }
451
- .badge--file-read { background: var(--teal-muted); color: var(--teal); }
452
- .badge--tool-use { background: var(--bg-tertiary); color: var(--text-secondary); }
453
- .badge--default { background: var(--bg-tertiary); color: var(--text-secondary); }
454
-
455
- .card-project {
456
- color: var(--text-muted);
457
- font-size: 12px;
458
- }
459
-
460
- .card-time {
461
- margin-left: auto;
462
- color: var(--text-muted);
463
- font-size: 11px;
464
- font-family: var(--font-mono);
465
- flex-shrink: 0;
466
- }
467
-
468
- .card-title {
469
- font-size: 14px;
470
- font-weight: 600;
471
- color: var(--text-primary);
472
- margin-bottom: 4px;
473
- line-height: 1.4;
474
- }
475
-
476
- .card-subtitle {
477
- font-size: 13px;
478
- color: var(--text-secondary);
479
- margin-bottom: 6px;
480
- font-style: italic;
481
- }
482
-
483
- .card-content {
484
- font-size: 13px;
485
- color: var(--text-secondary);
486
- line-height: 1.6;
487
- white-space: pre-wrap;
488
- word-break: break-word;
489
- }
490
-
491
- .card-content--mono {
492
- font-family: var(--font-mono);
493
- font-size: 12px;
494
- background: var(--bg-tertiary);
495
- border-radius: var(--radius-sm);
496
- padding: 8px 10px;
497
- }
6
+ <title>ContextKit Memory Dashboard</title>
7
+
8
+ <!-- Fonts: Inter (ui) + JetBrains Mono (code) -->
9
+ <link rel="preconnect" href="https://fonts.googleapis.com">
10
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
11
+ <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet">
12
+
13
+ <!-- Tailwind CSS CDN -->
14
+ <script src="https://cdn.tailwindcss.com"></script>
15
+ <script>
16
+ tailwind.config = {
17
+ darkMode: 'class',
18
+ theme: {
19
+ extend: {
20
+ fontFamily: {
21
+ sans: ['"Inter"', '-apple-system', 'BlinkMacSystemFont', 'sans-serif'],
22
+ mono: ['"JetBrains Mono"', 'ui-monospace', 'monospace'],
23
+ },
24
+ colors: {
25
+ surface: {
26
+ 0: '#0A0B10',
27
+ 1: '#111218',
28
+ 2: '#191A22',
29
+ 3: '#21222D',
30
+ 4: '#2A2B38',
31
+ },
32
+ border: {
33
+ DEFAULT: '#2A2B38',
34
+ subtle: '#1E1F2A',
35
+ hover: '#3A3B4A',
36
+ },
37
+ accent: {
38
+ violet: '#7C5AFF',
39
+ blue: '#3B82F6',
40
+ cyan: '#22D3EE',
41
+ green: '#34D399',
42
+ amber: '#FBBF24',
43
+ rose: '#FB7185',
44
+ orange: '#FB923C',
45
+ },
46
+ },
47
+ boxShadow: {
48
+ 'card': '0 1px 3px rgba(0,0,0,0.4), 0 1px 2px rgba(0,0,0,0.3)',
49
+ 'card-hover': '0 4px 12px rgba(0,0,0,0.5), 0 2px 4px rgba(0,0,0,0.3)',
50
+ 'glow-violet': '0 0 20px rgba(124,90,255,0.15)',
51
+ 'glow-blue': '0 0 20px rgba(59,130,246,0.15)',
52
+ 'panel': '0 0 0 1px rgba(255,255,255,0.03), 0 2px 8px rgba(0,0,0,0.4)',
53
+ },
54
+ keyframes: {
55
+ 'slide-up': {
56
+ '0%': { opacity: '0', transform: 'translateY(8px)' },
57
+ '100%': { opacity: '1', transform: 'translateY(0)' },
58
+ },
59
+ 'fade-in': {
60
+ '0%': { opacity: '0' },
61
+ '100%': { opacity: '1' },
62
+ },
63
+ 'scale-in': {
64
+ '0%': { opacity: '0', transform: 'scale(0.97)' },
65
+ '100%': { opacity: '1', transform: 'scale(1)' },
66
+ },
67
+ 'spin': {
68
+ '0%': { transform: 'rotate(0deg)' },
69
+ '100%': { transform: 'rotate(360deg)' },
70
+ },
71
+ 'pulse-dot': {
72
+ '0%, 100%': { opacity: '1' },
73
+ '50%': { opacity: '0.5' },
74
+ },
75
+ },
76
+ animation: {
77
+ 'slide-up': 'slide-up 0.35s ease-out forwards',
78
+ 'fade-in': 'fade-in 0.3s ease-out forwards',
79
+ 'scale-in': 'scale-in 0.2s ease-out forwards',
80
+ 'spin': 'spin 0.8s linear infinite',
81
+ 'pulse-dot': 'pulse-dot 2s ease-in-out infinite',
82
+ },
83
+ },
84
+ },
85
+ }
86
+ </script>
498
87
 
499
- /* Sezione generica dentro le card (narrativa, fatti, completato, ecc.) */
500
- .card-section {
501
- margin-top: 8px;
502
- padding: 8px 10px;
503
- background: var(--bg-tertiary);
504
- border-radius: var(--radius-sm);
505
- }
506
-
507
- .card-section-label {
508
- display: block;
509
- font-size: 11px;
510
- font-weight: 600;
511
- text-transform: uppercase;
512
- letter-spacing: 0.03em;
513
- color: var(--text-muted);
514
- margin-bottom: 4px;
515
- }
516
-
517
- .card-section p {
518
- font-size: 13px;
519
- color: var(--text-secondary);
520
- line-height: 1.5;
521
- }
522
-
523
- /* Indicatori file modificati / letti */
524
- .card-files {
525
- display: flex;
526
- gap: 8px;
527
- margin-top: 8px;
528
- }
529
-
530
- .file-pill {
531
- display: inline-flex;
532
- align-items: center;
533
- gap: 4px;
534
- padding: 2px 8px;
535
- border-radius: 9999px;
536
- font-size: 11px;
537
- font-family: var(--font-mono);
538
- }
539
-
540
- .file-pill--modified {
541
- background: var(--green-muted);
542
- color: var(--green);
543
- }
544
-
545
- .file-pill--read {
546
- background: var(--blue-muted);
547
- color: var(--blue);
548
- }
549
-
550
- /* Tag concetti */
551
- .card-tags {
552
- display: flex;
553
- flex-wrap: wrap;
554
- gap: 4px;
555
- margin-top: 8px;
556
- }
557
-
558
- .tag {
559
- padding: 2px 8px;
560
- border-radius: 9999px;
561
- font-size: 11px;
562
- background: var(--bg-tertiary);
563
- color: var(--text-muted);
564
- border: 1px solid var(--border-subtle);
565
- }
566
-
567
- /* Bottone Load More */
568
- .load-more-btn {
569
- display: flex;
570
- align-items: center;
571
- justify-content: center;
572
- padding: 10px;
573
- width: 100%;
574
- background: var(--bg-secondary);
575
- border: 1px solid var(--border-color);
576
- border-radius: var(--radius);
577
- color: var(--text-secondary);
578
- font-size: 13px;
579
- font-family: var(--font-sans);
580
- cursor: pointer;
581
- transition: all var(--transition);
582
- }
583
-
584
- .load-more-btn:hover:not(:disabled) {
585
- background: var(--bg-hover);
586
- color: var(--text-primary);
587
- }
588
-
589
- .load-more-btn:disabled {
590
- opacity: 0.5;
591
- cursor: not-allowed;
592
- }
593
-
594
- /* Stato vuoto */
595
- .empty-state {
596
- display: flex;
597
- flex-direction: column;
598
- align-items: center;
599
- justify-content: center;
600
- padding: 60px 20px;
601
- color: var(--text-muted);
602
- text-align: center;
603
- gap: 12px;
604
- }
605
-
606
- .empty-state-icon {
607
- opacity: 0.3;
608
- color: var(--text-muted);
609
- }
610
-
611
- .empty-state-hint {
612
- font-size: 12px;
613
- color: var(--text-muted);
614
- max-width: 300px;
615
- }
616
-
617
- /* Scrollbar personalizzata */
88
+ <style>
89
+ /* Scrollbar */
618
90
  ::-webkit-scrollbar { width: 6px; }
619
91
  ::-webkit-scrollbar-track { background: transparent; }
620
- ::-webkit-scrollbar-thumb {
621
- background: var(--border-color);
622
- border-radius: 3px;
623
- }
624
- ::-webkit-scrollbar-thumb:hover { background: var(--text-muted); }
625
-
626
- /* Responsive: sidebar collassata su mobile */
627
- @media (max-width: 768px) {
628
- .app {
629
- grid-template-columns: 1fr;
630
- grid-template-areas:
631
- "header"
632
- "main";
633
- }
634
- .sidebar { display: none; }
635
- .header-brand { width: auto; border-right: none; padding-right: 0; }
636
- }
92
+ ::-webkit-scrollbar-thumb { background: #2A2B38; border-radius: 3px; }
93
+ ::-webkit-scrollbar-thumb:hover { background: #3A3B4A; }
94
+
95
+ /* Stagger */
96
+ .stagger-1 { animation-delay: 30ms; }
97
+ .stagger-2 { animation-delay: 60ms; }
98
+ .stagger-3 { animation-delay: 90ms; }
99
+ .stagger-4 { animation-delay: 120ms; }
100
+ .stagger-5 { animation-delay: 150ms; }
101
+ .stagger-6 { animation-delay: 180ms; }
102
+ .stagger-7 { animation-delay: 210ms; }
103
+ .stagger-8 { animation-delay: 240ms; }
104
+
105
+ /* Cmd palette */
106
+ .cmd-input::placeholder { color: rgba(255,255,255,0.3); }
637
107
  </style>
638
108
  </head>
639
- <body>
109
+ <body class="font-sans antialiased bg-surface-0 text-zinc-100 overflow-hidden">
640
110
  <div id="root"></div>
641
111
  <script type="module" src="/viewer.js"></script>
642
112
  </body>