hypercore-cli 1.1.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.
Files changed (84) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +110 -0
  3. package/dist/api-XGC7D5AW.js +162 -0
  4. package/dist/auth-DNQWYQKT.js +21 -0
  5. package/dist/background-2EGCAAQH.js +14 -0
  6. package/dist/backlog-Q2NZCLNY.js +24 -0
  7. package/dist/chunk-2CMSCWQW.js +162 -0
  8. package/dist/chunk-2LJ2DVEB.js +167 -0
  9. package/dist/chunk-3RPFCQKJ.js +288 -0
  10. package/dist/chunk-43OLRXM5.js +263 -0
  11. package/dist/chunk-4DVYJAJL.js +57 -0
  12. package/dist/chunk-6OL3GA3P.js +173 -0
  13. package/dist/chunk-AUHU7ALH.js +2023 -0
  14. package/dist/chunk-B6A2AKLN.js +139 -0
  15. package/dist/chunk-BE46C7JW.js +46 -0
  16. package/dist/chunk-CUVAUOXL.js +58 -0
  17. package/dist/chunk-GH7E2OJE.js +223 -0
  18. package/dist/chunk-GOOTEPBK.js +271 -0
  19. package/dist/chunk-GPPMJYSM.js +133 -0
  20. package/dist/chunk-GU2FZQ6A.js +69 -0
  21. package/dist/chunk-IOPKN5GD.js +190 -0
  22. package/dist/chunk-IXOIOGR5.js +1505 -0
  23. package/dist/chunk-KRPOPWGA.js +251 -0
  24. package/dist/chunk-MGLJ53QN.js +219 -0
  25. package/dist/chunk-MV4TTRYX.js +533 -0
  26. package/dist/chunk-OPZYEVYR.js +150 -0
  27. package/dist/chunk-QTSLP47C.js +166 -0
  28. package/dist/chunk-R3GPQC7I.js +393 -0
  29. package/dist/chunk-RKB2JOV2.js +43 -0
  30. package/dist/chunk-RNG3K465.js +80 -0
  31. package/dist/chunk-TGTYKBGC.js +86 -0
  32. package/dist/chunk-U5SGAIMM.js +681 -0
  33. package/dist/chunk-V5UHPPSY.js +140 -0
  34. package/dist/chunk-WHLVZCQY.js +245 -0
  35. package/dist/chunk-XDRCBMZZ.js +66 -0
  36. package/dist/chunk-XOS6HPEF.js +134 -0
  37. package/dist/chunk-ZSBHUGWR.js +262 -0
  38. package/dist/claude-NSQ442XD.js +12 -0
  39. package/dist/commands-CK3WFAGI.js +128 -0
  40. package/dist/commands-U63OEO5J.js +1044 -0
  41. package/dist/commands-ZE6GD3WC.js +232 -0
  42. package/dist/config-4EW42BSF.js +8 -0
  43. package/dist/config-loader-SXO674TF.js +24 -0
  44. package/dist/diagnose-AFW3ZTZ4.js +12 -0
  45. package/dist/display-IIUBEYWN.js +58 -0
  46. package/dist/extractor-QV53W2YJ.js +129 -0
  47. package/dist/history-WMSCHERZ.js +180 -0
  48. package/dist/index.d.ts +1 -0
  49. package/dist/index.js +406 -0
  50. package/dist/instance-registry-YSIJXSO7.js +15 -0
  51. package/dist/keybindings-JAAMLH3G.js +15 -0
  52. package/dist/loader-WHNTZTLP.js +58 -0
  53. package/dist/network-MM6YWPGO.js +279 -0
  54. package/dist/notify-HPTALZDC.js +14 -0
  55. package/dist/openai-compat-UQWJXBEK.js +12 -0
  56. package/dist/permissions-JUKXMNDH.js +10 -0
  57. package/dist/prompt-QV45TXRL.js +166 -0
  58. package/dist/quality-ST7PPNFR.js +16 -0
  59. package/dist/repl-RT3AHL7M.js +3375 -0
  60. package/dist/roadmap-5OBEKROY.js +17 -0
  61. package/dist/server-PORT7OEG.js +57 -0
  62. package/dist/session-4VUNDWLH.js +21 -0
  63. package/dist/skills-V4A35XKG.js +175 -0
  64. package/dist/store-Y4LU5QTO.js +25 -0
  65. package/dist/team-HO7Z4SIM.js +385 -0
  66. package/dist/telemetry-6R4EIE6O.js +30 -0
  67. package/dist/test-runner-ZQH5Y6OJ.js +619 -0
  68. package/dist/theme-3SYJ3UQA.js +14 -0
  69. package/dist/upgrade-7TGI3SXO.js +83 -0
  70. package/dist/verify-JUDKTPKZ.js +14 -0
  71. package/dist/web/static/app.js +562 -0
  72. package/dist/web/static/index.html +132 -0
  73. package/dist/web/static/mirror.css +1001 -0
  74. package/dist/web/static/mirror.html +184 -0
  75. package/dist/web/static/mirror.js +1125 -0
  76. package/dist/web/static/onboard.css +302 -0
  77. package/dist/web/static/onboard.html +140 -0
  78. package/dist/web/static/onboard.js +260 -0
  79. package/dist/web/static/style.css +602 -0
  80. package/dist/web/static/workspace.css +1568 -0
  81. package/dist/web/static/workspace.html +408 -0
  82. package/dist/web/static/workspace.js +1683 -0
  83. package/dist/web-Z5HSCQHW.js +39 -0
  84. package/package.json +67 -0
@@ -0,0 +1,1001 @@
1
+ /* HyperMirror - 内观引擎 Dashboard Styles */
2
+
3
+ /* ─── Override body/main scroll for mirror page ─── */
4
+ body {
5
+ overflow: hidden;
6
+ }
7
+ .main {
8
+ flex: 1;
9
+ overflow: hidden;
10
+ }
11
+ .panel-center {
12
+ height: 100%;
13
+ overflow: hidden;
14
+ }
15
+ .tab-content {
16
+ display: none;
17
+ height: calc(100vh - 48px);
18
+ overflow-y: auto;
19
+ }
20
+ .tab-content.active {
21
+ display: block;
22
+ }
23
+
24
+ /* ─── Grid Layout ─── */
25
+ .mirror-grid {
26
+ display: grid;
27
+ grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
28
+ gap: 16px;
29
+ padding: 16px;
30
+ }
31
+
32
+ .mirror-card {
33
+ background: var(--bg-secondary);
34
+ border: 1px solid var(--border);
35
+ border-radius: var(--radius);
36
+ overflow: hidden;
37
+ }
38
+ .mirror-card.card-wide {
39
+ grid-column: 1 / -1;
40
+ }
41
+
42
+ /* ─── Health Score ─── */
43
+ .health-row {
44
+ display: flex;
45
+ align-items: center;
46
+ gap: 24px;
47
+ padding: 8px 0;
48
+ }
49
+ .health-score {
50
+ font-size: 48px;
51
+ font-weight: 700;
52
+ font-family: var(--font-mono);
53
+ line-height: 1;
54
+ min-width: 80px;
55
+ text-align: center;
56
+ }
57
+ .health-score.score-high { color: var(--green); }
58
+ .health-score.score-mid { color: var(--yellow); }
59
+ .health-score.score-low { color: var(--red); }
60
+
61
+ .health-checks {
62
+ display: flex;
63
+ flex-wrap: wrap;
64
+ gap: 8px;
65
+ flex: 1;
66
+ }
67
+ .health-check {
68
+ display: flex;
69
+ align-items: center;
70
+ gap: 6px;
71
+ padding: 4px 10px;
72
+ background: var(--bg-tertiary);
73
+ border-radius: var(--radius-sm);
74
+ font-size: 12px;
75
+ color: var(--text-secondary);
76
+ }
77
+ .health-check .dot {
78
+ width: 8px;
79
+ height: 8px;
80
+ border-radius: 50%;
81
+ flex-shrink: 0;
82
+ }
83
+ .health-check .dot.ok { background: var(--green); }
84
+ .health-check .dot.fail { background: var(--red); }
85
+
86
+ /* ─── Stat Pairs ─── */
87
+ .stat-grid {
88
+ display: grid;
89
+ grid-template-columns: repeat(auto-fill, minmax(100px, 1fr));
90
+ gap: 8px;
91
+ }
92
+ .stat-item {
93
+ text-align: center;
94
+ padding: 8px;
95
+ background: var(--bg-tertiary);
96
+ border-radius: var(--radius-sm);
97
+ }
98
+ .stat-value {
99
+ font-size: 20px;
100
+ font-weight: 700;
101
+ font-family: var(--font-mono);
102
+ color: var(--text-primary);
103
+ }
104
+ .stat-label {
105
+ font-size: 11px;
106
+ color: var(--text-muted);
107
+ margin-top: 2px;
108
+ }
109
+
110
+ /* ─── Wuxing Bar ─── */
111
+ .wuxing-bars {
112
+ display: flex;
113
+ flex-direction: column;
114
+ gap: 6px;
115
+ }
116
+ .wuxing-row {
117
+ display: flex;
118
+ align-items: center;
119
+ gap: 8px;
120
+ font-size: 13px;
121
+ }
122
+ .wuxing-icon {
123
+ width: 24px;
124
+ text-align: center;
125
+ font-size: 14px;
126
+ }
127
+ .wuxing-name {
128
+ width: 24px;
129
+ color: var(--text-secondary);
130
+ }
131
+ .wuxing-bar-track {
132
+ flex: 1;
133
+ height: 16px;
134
+ background: var(--bg-tertiary);
135
+ border-radius: 3px;
136
+ overflow: hidden;
137
+ }
138
+ .wuxing-bar-fill {
139
+ height: 100%;
140
+ border-radius: 3px;
141
+ transition: width 0.4s ease;
142
+ }
143
+ .wuxing-bar-fill.wx-wood { background: #3fb950; }
144
+ .wuxing-bar-fill.wx-fire { background: #f85149; }
145
+ .wuxing-bar-fill.wx-water { background: #58a6ff; }
146
+ .wuxing-bar-fill.wx-metal { background: #8b949e; }
147
+ .wuxing-bar-fill.wx-earth { background: #d29922; }
148
+
149
+ .wuxing-count {
150
+ width: 28px;
151
+ text-align: right;
152
+ font-family: var(--font-mono);
153
+ font-size: 12px;
154
+ color: var(--text-muted);
155
+ }
156
+
157
+ /* ─── Toolbar & Filters ─── */
158
+ .tab-toolbar {
159
+ display: flex;
160
+ align-items: center;
161
+ gap: 8px;
162
+ padding: 12px 16px;
163
+ border-bottom: 1px solid var(--border);
164
+ background: var(--bg-secondary);
165
+ }
166
+ .filter-group {
167
+ display: flex;
168
+ gap: 8px;
169
+ flex-wrap: wrap;
170
+ }
171
+ .tab-toolbar select {
172
+ background: var(--bg-tertiary);
173
+ color: var(--text-primary);
174
+ border: 1px solid var(--border);
175
+ border-radius: var(--radius-sm);
176
+ padding: 4px 8px;
177
+ font-size: 12px;
178
+ font-family: var(--font-sans);
179
+ cursor: pointer;
180
+ }
181
+ .tab-toolbar select:focus {
182
+ outline: none;
183
+ border-color: var(--accent);
184
+ }
185
+
186
+ /* ─── Test Runner Card ─── */
187
+ .test-toolbar {
188
+ display: flex;
189
+ align-items: center;
190
+ justify-content: space-between;
191
+ gap: 12px;
192
+ margin-bottom: 10px;
193
+ flex-wrap: wrap;
194
+ }
195
+ .test-toolbar-left {
196
+ display: flex;
197
+ align-items: center;
198
+ gap: 8px;
199
+ flex-wrap: wrap;
200
+ font-size: 12px;
201
+ color: var(--text-secondary);
202
+ }
203
+ .test-toolbar-left select {
204
+ background: var(--bg-tertiary);
205
+ color: var(--text-primary);
206
+ border: 1px solid var(--border);
207
+ border-radius: var(--radius-sm);
208
+ padding: 4px 8px;
209
+ font-size: 12px;
210
+ }
211
+ .test-schema {
212
+ font-family: var(--font-mono);
213
+ color: var(--text-muted);
214
+ font-size: 11px;
215
+ }
216
+ .btn-run-tests {
217
+ border: 1px solid var(--accent);
218
+ color: var(--accent);
219
+ background: transparent;
220
+ border-radius: var(--radius-sm);
221
+ padding: 5px 10px;
222
+ font-size: 12px;
223
+ cursor: pointer;
224
+ }
225
+ .btn-run-tests:hover:not(:disabled) {
226
+ background: color-mix(in srgb, var(--accent) 15%, transparent);
227
+ }
228
+ .btn-run-tests:disabled {
229
+ opacity: 0.6;
230
+ cursor: not-allowed;
231
+ }
232
+ .test-running-line {
233
+ font-size: 12px;
234
+ color: var(--yellow);
235
+ margin-bottom: 8px;
236
+ }
237
+ .test-latest-row {
238
+ display: grid;
239
+ grid-template-columns: 1fr auto auto;
240
+ gap: 8px;
241
+ align-items: center;
242
+ margin-bottom: 8px;
243
+ font-size: 12px;
244
+ }
245
+ .test-latest-title {
246
+ color: var(--text-primary);
247
+ overflow: hidden;
248
+ text-overflow: ellipsis;
249
+ white-space: nowrap;
250
+ }
251
+ .test-latest-meta {
252
+ color: var(--text-muted);
253
+ font-family: var(--font-mono);
254
+ font-size: 11px;
255
+ }
256
+ .test-status {
257
+ font-family: var(--font-mono);
258
+ font-size: 11px;
259
+ padding: 2px 6px;
260
+ border-radius: 3px;
261
+ border: 1px solid transparent;
262
+ }
263
+ .test-status-running {
264
+ color: var(--yellow);
265
+ border-color: color-mix(in srgb, var(--yellow) 40%, transparent);
266
+ }
267
+ .test-status-passed {
268
+ color: var(--green);
269
+ border-color: color-mix(in srgb, var(--green) 40%, transparent);
270
+ }
271
+ .test-status-failed,
272
+ .test-status-timeout {
273
+ color: var(--red);
274
+ border-color: color-mix(in srgb, var(--red) 40%, transparent);
275
+ }
276
+ .test-status-idle {
277
+ color: var(--text-muted);
278
+ border-color: var(--border);
279
+ }
280
+ .test-log {
281
+ margin: 0;
282
+ max-height: 220px;
283
+ overflow: auto;
284
+ white-space: pre-wrap;
285
+ word-break: break-word;
286
+ background: var(--bg-tertiary);
287
+ border: 1px solid var(--border);
288
+ border-radius: var(--radius-sm);
289
+ padding: 10px;
290
+ font-family: var(--font-mono);
291
+ font-size: 11px;
292
+ line-height: 1.45;
293
+ color: var(--text-secondary);
294
+ }
295
+ .test-log-empty {
296
+ font-size: 12px;
297
+ color: var(--text-muted);
298
+ padding: 8px 0;
299
+ }
300
+ .test-auto-panel {
301
+ margin-top: 10px;
302
+ margin-bottom: 10px;
303
+ border: 1px solid var(--border);
304
+ border-radius: var(--radius-sm);
305
+ background: var(--bg-tertiary);
306
+ padding: 10px;
307
+ }
308
+ .test-auto-header {
309
+ display: flex;
310
+ align-items: center;
311
+ justify-content: space-between;
312
+ gap: 10px;
313
+ margin-bottom: 8px;
314
+ }
315
+ .test-auto-title {
316
+ font-size: 12px;
317
+ color: var(--text-primary);
318
+ font-weight: 600;
319
+ }
320
+ .test-auto-controls {
321
+ display: flex;
322
+ flex-wrap: wrap;
323
+ align-items: center;
324
+ gap: 8px;
325
+ }
326
+ .test-auto-controls label {
327
+ display: inline-flex;
328
+ align-items: center;
329
+ gap: 6px;
330
+ font-size: 11px;
331
+ color: var(--text-secondary);
332
+ }
333
+ .test-auto-controls select,
334
+ .test-auto-controls input {
335
+ background: var(--bg-secondary);
336
+ color: var(--text-primary);
337
+ border: 1px solid var(--border);
338
+ border-radius: var(--radius-sm);
339
+ padding: 4px 8px;
340
+ font-size: 11px;
341
+ }
342
+ .test-auto-toggle {
343
+ margin-right: 4px;
344
+ }
345
+ .btn-test-secondary {
346
+ border: 1px solid var(--border);
347
+ color: var(--text-secondary);
348
+ background: transparent;
349
+ border-radius: var(--radius-sm);
350
+ padding: 4px 8px;
351
+ font-size: 11px;
352
+ cursor: pointer;
353
+ }
354
+ .btn-test-secondary:hover:not(:disabled) {
355
+ border-color: var(--accent);
356
+ color: var(--accent);
357
+ }
358
+ .btn-test-secondary:disabled {
359
+ opacity: 0.6;
360
+ cursor: not-allowed;
361
+ }
362
+ .test-auto-meta {
363
+ margin-top: 8px;
364
+ display: flex;
365
+ flex-wrap: wrap;
366
+ gap: 10px;
367
+ font-size: 11px;
368
+ color: var(--text-muted);
369
+ }
370
+ .test-auto-meta strong {
371
+ color: var(--text-secondary);
372
+ font-family: var(--font-mono);
373
+ font-weight: 600;
374
+ }
375
+ .test-auto-error {
376
+ margin-top: 6px;
377
+ font-size: 11px;
378
+ color: var(--text-muted);
379
+ }
380
+ .test-auto-error.has-error {
381
+ color: var(--red);
382
+ }
383
+ .test-inline-error {
384
+ margin-bottom: 8px;
385
+ font-size: 12px;
386
+ color: var(--red);
387
+ }
388
+ .test-history-title {
389
+ margin-top: 10px;
390
+ margin-bottom: 6px;
391
+ font-size: 12px;
392
+ color: var(--text-secondary);
393
+ }
394
+ .test-history-summary {
395
+ display: flex;
396
+ flex-wrap: wrap;
397
+ gap: 6px;
398
+ margin-bottom: 8px;
399
+ }
400
+ .test-summary-chip {
401
+ display: inline-flex;
402
+ align-items: center;
403
+ gap: 4px;
404
+ padding: 3px 8px;
405
+ border-radius: 999px;
406
+ border: 1px solid var(--border);
407
+ background: var(--bg-tertiary);
408
+ color: var(--text-secondary);
409
+ font-size: 11px;
410
+ }
411
+ .test-summary-chip strong {
412
+ color: var(--text-primary);
413
+ font-family: var(--font-mono);
414
+ font-weight: 700;
415
+ }
416
+ .test-history-filters {
417
+ display: flex;
418
+ flex-wrap: wrap;
419
+ align-items: center;
420
+ gap: 8px;
421
+ margin-bottom: 8px;
422
+ }
423
+ .test-history-filters label {
424
+ display: inline-flex;
425
+ align-items: center;
426
+ gap: 6px;
427
+ font-size: 11px;
428
+ color: var(--text-secondary);
429
+ }
430
+ .test-history-filters select,
431
+ .test-history-filters input {
432
+ background: var(--bg-tertiary);
433
+ color: var(--text-primary);
434
+ border: 1px solid var(--border);
435
+ border-radius: var(--radius-sm);
436
+ padding: 4px 8px;
437
+ font-size: 11px;
438
+ }
439
+ .test-query-label input {
440
+ min-width: 220px;
441
+ }
442
+ .btn-test-filter-reset {
443
+ border: 1px solid var(--border);
444
+ color: var(--text-secondary);
445
+ background: transparent;
446
+ border-radius: var(--radius-sm);
447
+ padding: 4px 8px;
448
+ font-size: 11px;
449
+ cursor: pointer;
450
+ }
451
+ .btn-test-filter-reset:hover {
452
+ border-color: var(--accent);
453
+ color: var(--accent);
454
+ }
455
+ .test-history-count {
456
+ font-size: 11px;
457
+ color: var(--text-muted);
458
+ margin-left: auto;
459
+ }
460
+ .test-history-list {
461
+ display: flex;
462
+ flex-direction: column;
463
+ gap: 4px;
464
+ }
465
+ .test-history-row {
466
+ display: grid;
467
+ grid-template-columns: 1fr auto auto auto;
468
+ gap: 8px;
469
+ align-items: center;
470
+ font-size: 11px;
471
+ padding: 6px 8px;
472
+ border: 1px solid var(--border);
473
+ border-radius: var(--radius-sm);
474
+ background: var(--bg-tertiary);
475
+ cursor: pointer;
476
+ }
477
+ .test-history-row:hover {
478
+ border-color: var(--accent);
479
+ }
480
+ .test-history-row.active {
481
+ border-color: var(--accent);
482
+ box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--accent) 40%, transparent);
483
+ }
484
+ .test-history-suite {
485
+ color: var(--text-primary);
486
+ overflow: hidden;
487
+ text-overflow: ellipsis;
488
+ white-space: nowrap;
489
+ }
490
+ .test-history-duration {
491
+ color: var(--text-secondary);
492
+ font-family: var(--font-mono);
493
+ }
494
+ .test-history-time {
495
+ color: var(--text-muted);
496
+ font-family: var(--font-mono);
497
+ }
498
+ .test-history-empty {
499
+ font-size: 12px;
500
+ color: var(--text-muted);
501
+ padding: 6px 0;
502
+ }
503
+ .test-detail-panel {
504
+ margin-top: 10px;
505
+ border: 1px solid var(--border);
506
+ border-radius: var(--radius-sm);
507
+ background: var(--bg-tertiary);
508
+ padding: 10px;
509
+ }
510
+ .test-detail-title {
511
+ font-size: 12px;
512
+ color: var(--text-primary);
513
+ }
514
+ .test-detail-meta {
515
+ margin-top: 4px;
516
+ margin-bottom: 8px;
517
+ font-size: 11px;
518
+ color: var(--text-muted);
519
+ font-family: var(--font-mono);
520
+ }
521
+ .test-detail-actions {
522
+ display: flex;
523
+ gap: 6px;
524
+ flex-wrap: wrap;
525
+ margin-bottom: 8px;
526
+ }
527
+ .btn-test-rerun-suite,
528
+ .btn-test-log-download,
529
+ .btn-test-json-download {
530
+ border: 1px solid var(--border);
531
+ color: var(--text-secondary);
532
+ background: transparent;
533
+ border-radius: var(--radius-sm);
534
+ padding: 4px 8px;
535
+ font-size: 11px;
536
+ cursor: pointer;
537
+ }
538
+ .btn-test-rerun-suite {
539
+ border-color: color-mix(in srgb, var(--accent) 30%, var(--border));
540
+ color: var(--accent);
541
+ }
542
+ .btn-test-rerun-suite:hover:not(:disabled),
543
+ .btn-test-log-download:hover,
544
+ .btn-test-json-download:hover {
545
+ border-color: var(--accent);
546
+ color: var(--accent);
547
+ }
548
+ .btn-test-rerun-suite:disabled {
549
+ opacity: 0.6;
550
+ cursor: not-allowed;
551
+ }
552
+ .test-detail-log {
553
+ margin: 0;
554
+ max-height: 280px;
555
+ overflow: auto;
556
+ white-space: pre-wrap;
557
+ word-break: break-word;
558
+ font-family: var(--font-mono);
559
+ font-size: 11px;
560
+ line-height: 1.45;
561
+ color: var(--text-secondary);
562
+ }
563
+ .test-detail-loading,
564
+ .test-detail-error {
565
+ margin-top: 6px;
566
+ font-size: 12px;
567
+ }
568
+ .test-detail-loading {
569
+ color: var(--yellow);
570
+ }
571
+ .test-detail-error {
572
+ color: var(--red);
573
+ }
574
+
575
+ /* ─── Item List (Backlog, Diagnose, Verify) ─── */
576
+ .item-list {
577
+ padding: 8px 16px;
578
+ overflow-y: auto;
579
+ max-height: calc(100vh - 140px);
580
+ }
581
+
582
+ .list-item {
583
+ display: flex;
584
+ align-items: flex-start;
585
+ gap: 12px;
586
+ padding: 10px 12px;
587
+ border-bottom: 1px solid var(--border);
588
+ transition: background 0.1s;
589
+ }
590
+ .list-item:hover {
591
+ background: var(--bg-secondary);
592
+ }
593
+ .list-item:last-child {
594
+ border-bottom: none;
595
+ }
596
+
597
+ .item-id {
598
+ font-family: var(--font-mono);
599
+ font-size: 11px;
600
+ color: var(--text-muted);
601
+ min-width: 28px;
602
+ }
603
+ .item-body {
604
+ flex: 1;
605
+ min-width: 0;
606
+ }
607
+ .item-title {
608
+ font-size: 13px;
609
+ color: var(--text-primary);
610
+ margin-bottom: 4px;
611
+ word-break: break-word;
612
+ }
613
+ .item-meta {
614
+ display: flex;
615
+ flex-wrap: wrap;
616
+ gap: 6px;
617
+ font-size: 11px;
618
+ }
619
+
620
+ /* ─── Tags / Badges ─── */
621
+ .badge {
622
+ display: inline-flex;
623
+ align-items: center;
624
+ padding: 1px 6px;
625
+ border-radius: 3px;
626
+ font-size: 10px;
627
+ font-weight: 600;
628
+ letter-spacing: 0.3px;
629
+ }
630
+ .badge-priority-S { background: #f8514922; color: #f85149; border: 1px solid #f8514944; }
631
+ .badge-priority-A { background: #f0883e22; color: #f0883e; border: 1px solid #f0883e44; }
632
+ .badge-priority-B { background: #58a6ff22; color: #58a6ff; border: 1px solid #58a6ff44; }
633
+ .badge-priority-C { background: #8b949e22; color: #8b949e; border: 1px solid #8b949e44; }
634
+
635
+ .badge-status {
636
+ padding: 1px 6px;
637
+ border-radius: 3px;
638
+ font-size: 10px;
639
+ }
640
+ .badge-status-idea { background: #8b949e22; color: #8b949e; }
641
+ .badge-status-planned { background: #58a6ff22; color: #58a6ff; }
642
+ .badge-status-developing { background: #d2992222; color: #d29922; }
643
+ .badge-status-done { background: #3fb95022; color: #3fb950; }
644
+ .badge-status-archived { background: #6e768122; color: #6e7681; }
645
+
646
+ .badge-wuxing {
647
+ font-size: 12px;
648
+ padding: 0 2px;
649
+ }
650
+
651
+ .badge-type {
652
+ padding: 1px 6px;
653
+ border-radius: 3px;
654
+ font-size: 10px;
655
+ background: var(--bg-tertiary);
656
+ color: var(--text-secondary);
657
+ }
658
+
659
+ .badge-verdict {
660
+ padding: 2px 8px;
661
+ border-radius: 3px;
662
+ font-size: 11px;
663
+ font-weight: 600;
664
+ }
665
+ .badge-verdict-effective { background: #3fb95022; color: #3fb950; }
666
+ .badge-verdict-ineffective { background: #f8514922; color: #f85149; }
667
+ .badge-verdict-pending { background: #d2992222; color: #d29922; }
668
+ .badge-verdict-no-data { background: #8b949e22; color: #8b949e; }
669
+
670
+ .badge-severity {
671
+ padding: 1px 6px;
672
+ border-radius: 3px;
673
+ font-size: 10px;
674
+ font-weight: 600;
675
+ }
676
+ .badge-severity-high { background: #f8514922; color: #f85149; }
677
+ .badge-severity-medium { background: #d2992222; color: #d29922; }
678
+ .badge-severity-low { background: #58a6ff22; color: #58a6ff; }
679
+
680
+ /* ─── Quality Grid ─── */
681
+ .quality-grid {
682
+ padding: 16px;
683
+ }
684
+ .quality-score-header {
685
+ display: flex;
686
+ align-items: center;
687
+ gap: 16px;
688
+ margin-bottom: 16px;
689
+ padding: 16px;
690
+ background: var(--bg-secondary);
691
+ border: 1px solid var(--border);
692
+ border-radius: var(--radius);
693
+ }
694
+ .quality-checks-grid {
695
+ display: grid;
696
+ grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
697
+ gap: 12px;
698
+ }
699
+ .quality-check-card {
700
+ background: var(--bg-secondary);
701
+ border: 1px solid var(--border);
702
+ border-radius: var(--radius);
703
+ padding: 14px;
704
+ }
705
+ .quality-check-card.check-ok {
706
+ border-left: 3px solid var(--green);
707
+ }
708
+ .quality-check-card.check-fail {
709
+ border-left: 3px solid var(--red);
710
+ }
711
+ .quality-check-name {
712
+ font-size: 13px;
713
+ font-weight: 600;
714
+ margin-bottom: 6px;
715
+ }
716
+ .quality-check-detail {
717
+ font-size: 12px;
718
+ color: var(--text-secondary);
719
+ }
720
+ .quality-check-value {
721
+ font-family: var(--font-mono);
722
+ font-size: 18px;
723
+ font-weight: 700;
724
+ margin-top: 6px;
725
+ }
726
+
727
+ /* ─── Verify Summary Bar ─── */
728
+ .verify-summary-bar {
729
+ display: flex;
730
+ gap: 12px;
731
+ padding: 12px 16px;
732
+ background: var(--bg-secondary);
733
+ border-bottom: 1px solid var(--border);
734
+ }
735
+ .verify-stat {
736
+ display: flex;
737
+ align-items: center;
738
+ gap: 6px;
739
+ font-size: 12px;
740
+ color: var(--text-secondary);
741
+ }
742
+ .verify-stat strong {
743
+ font-family: var(--font-mono);
744
+ color: var(--text-primary);
745
+ }
746
+
747
+ /* ─── Roadmap ─── */
748
+ #roadmap-content {
749
+ padding: 16px;
750
+ }
751
+ .roadmap-version {
752
+ margin-bottom: 24px;
753
+ }
754
+ .roadmap-version-header {
755
+ display: flex;
756
+ align-items: center;
757
+ gap: 12px;
758
+ margin-bottom: 12px;
759
+ padding-bottom: 8px;
760
+ border-bottom: 1px solid var(--border);
761
+ }
762
+ .roadmap-version-tag {
763
+ font-family: var(--font-mono);
764
+ font-size: 14px;
765
+ font-weight: 700;
766
+ color: var(--accent);
767
+ padding: 2px 10px;
768
+ background: #58a6ff15;
769
+ border: 1px solid #58a6ff33;
770
+ border-radius: var(--radius-sm);
771
+ }
772
+ .roadmap-progress {
773
+ display: flex;
774
+ align-items: center;
775
+ gap: 8px;
776
+ font-size: 12px;
777
+ color: var(--text-secondary);
778
+ }
779
+ .roadmap-progress-bar {
780
+ width: 100px;
781
+ height: 6px;
782
+ background: var(--bg-tertiary);
783
+ border-radius: 3px;
784
+ overflow: hidden;
785
+ }
786
+ .roadmap-progress-fill {
787
+ height: 100%;
788
+ background: var(--green);
789
+ border-radius: 3px;
790
+ transition: width 0.3s;
791
+ }
792
+ .roadmap-items {
793
+ display: flex;
794
+ flex-direction: column;
795
+ gap: 6px;
796
+ padding-left: 16px;
797
+ }
798
+ .roadmap-item {
799
+ display: flex;
800
+ align-items: center;
801
+ gap: 8px;
802
+ padding: 6px 10px;
803
+ font-size: 13px;
804
+ border-radius: var(--radius-sm);
805
+ transition: background 0.1s;
806
+ }
807
+ .roadmap-item:hover {
808
+ background: var(--bg-secondary);
809
+ }
810
+ .roadmap-item-dot {
811
+ width: 8px;
812
+ height: 8px;
813
+ border-radius: 50%;
814
+ flex-shrink: 0;
815
+ }
816
+ .roadmap-item-dot.done { background: var(--green); }
817
+ .roadmap-item-dot.developing { background: var(--yellow); }
818
+ .roadmap-item-dot.planned { background: var(--accent); }
819
+ .roadmap-item-dot.idea { background: var(--text-muted); }
820
+
821
+ /* ─── Milestone Cards ─── */
822
+ .milestone-mini {
823
+ display: flex;
824
+ align-items: center;
825
+ gap: 8px;
826
+ padding: 6px 0;
827
+ font-size: 12px;
828
+ border-bottom: 1px solid var(--border);
829
+ }
830
+ .milestone-mini:last-child { border-bottom: none; }
831
+ .milestone-progress-mini {
832
+ width: 40px;
833
+ height: 4px;
834
+ background: var(--bg-tertiary);
835
+ border-radius: 2px;
836
+ overflow: hidden;
837
+ }
838
+ .milestone-progress-mini-fill {
839
+ height: 100%;
840
+ background: var(--accent);
841
+ border-radius: 2px;
842
+ }
843
+ .milestone-title {
844
+ flex: 1;
845
+ color: var(--text-secondary);
846
+ overflow: hidden;
847
+ text-overflow: ellipsis;
848
+ white-space: nowrap;
849
+ }
850
+ .milestone-percent {
851
+ font-family: var(--font-mono);
852
+ font-size: 11px;
853
+ color: var(--text-muted);
854
+ min-width: 32px;
855
+ text-align: right;
856
+ }
857
+
858
+ /* ─── Telemetry ─── */
859
+ #telemetry-content {
860
+ padding: 16px;
861
+ }
862
+ .telemetry-grid {
863
+ display: grid;
864
+ grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
865
+ gap: 16px;
866
+ }
867
+ .telemetry-card {
868
+ background: var(--bg-secondary);
869
+ border: 1px solid var(--border);
870
+ border-radius: var(--radius);
871
+ padding: 14px;
872
+ }
873
+ .telemetry-card-title {
874
+ font-size: 12px;
875
+ color: var(--text-muted);
876
+ margin-bottom: 10px;
877
+ text-transform: uppercase;
878
+ letter-spacing: 0.5px;
879
+ }
880
+ .cmd-row {
881
+ display: flex;
882
+ justify-content: space-between;
883
+ padding: 4px 0;
884
+ font-size: 12px;
885
+ border-bottom: 1px solid var(--border);
886
+ }
887
+ .cmd-row:last-child { border-bottom: none; }
888
+ .cmd-name {
889
+ font-family: var(--font-mono);
890
+ color: var(--accent);
891
+ }
892
+ .cmd-stats {
893
+ color: var(--text-secondary);
894
+ }
895
+ .cmd-fail {
896
+ color: var(--red);
897
+ }
898
+ .error-row {
899
+ padding: 6px 0;
900
+ border-bottom: 1px solid var(--border);
901
+ font-size: 12px;
902
+ }
903
+ .error-row:last-child { border-bottom: none; }
904
+ .error-msg {
905
+ font-family: var(--font-mono);
906
+ font-size: 11px;
907
+ color: var(--red);
908
+ word-break: break-all;
909
+ }
910
+ .error-count {
911
+ font-size: 11px;
912
+ color: var(--text-muted);
913
+ }
914
+
915
+ /* ─── Developing List (mini) ─── */
916
+ .dev-item {
917
+ display: flex;
918
+ align-items: center;
919
+ gap: 8px;
920
+ padding: 6px 0;
921
+ font-size: 12px;
922
+ border-bottom: 1px solid var(--border);
923
+ }
924
+ .dev-item:last-child { border-bottom: none; }
925
+ .dev-id {
926
+ font-family: var(--font-mono);
927
+ color: var(--text-muted);
928
+ font-size: 11px;
929
+ }
930
+ .dev-title {
931
+ flex: 1;
932
+ color: var(--text-secondary);
933
+ overflow: hidden;
934
+ text-overflow: ellipsis;
935
+ white-space: nowrap;
936
+ }
937
+
938
+ /* ─── Empty State ─── */
939
+ .mirror-empty {
940
+ text-align: center;
941
+ padding: 32px 16px;
942
+ color: var(--text-muted);
943
+ font-size: 13px;
944
+ }
945
+ .mirror-empty-icon {
946
+ font-size: 32px;
947
+ margin-bottom: 8px;
948
+ opacity: 0.5;
949
+ }
950
+
951
+ /* ─── Responsive ─── */
952
+ @media (max-width: 768px) {
953
+ .mirror-grid {
954
+ grid-template-columns: 1fr;
955
+ }
956
+ .quality-checks-grid {
957
+ grid-template-columns: 1fr;
958
+ }
959
+ .telemetry-grid {
960
+ grid-template-columns: 1fr;
961
+ }
962
+ .filter-group {
963
+ flex-direction: column;
964
+ }
965
+ .health-row {
966
+ flex-direction: column;
967
+ text-align: center;
968
+ }
969
+ .test-latest-row {
970
+ grid-template-columns: 1fr;
971
+ gap: 4px;
972
+ }
973
+ .test-history-count {
974
+ margin-left: 0;
975
+ width: 100%;
976
+ }
977
+ .test-query-label input {
978
+ min-width: 0;
979
+ width: 100%;
980
+ }
981
+ .test-history-row {
982
+ grid-template-columns: 1fr;
983
+ gap: 3px;
984
+ }
985
+ .test-auto-controls {
986
+ flex-direction: column;
987
+ align-items: stretch;
988
+ }
989
+ .test-auto-controls label {
990
+ width: 100%;
991
+ justify-content: space-between;
992
+ }
993
+ .test-auto-controls select,
994
+ .test-auto-controls input,
995
+ .btn-test-secondary {
996
+ width: 100%;
997
+ }
998
+ .test-auto-toggle {
999
+ justify-content: flex-start !important;
1000
+ }
1001
+ }