@inkobytes/nexus 1.0.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 (55) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +455 -0
  3. package/bin/nexus.js +108 -0
  4. package/drills/nexus-agent-protocol/README.md +65 -0
  5. package/drills/nexus-agent-protocol/cases/blocked.yaml +20 -0
  6. package/drills/nexus-agent-protocol/cases/claim-before-edit.yaml +16 -0
  7. package/drills/nexus-agent-protocol/cases/current-file-state.yaml +15 -0
  8. package/drills/nexus-agent-protocol/cases/data-boundary-table-header.yaml +21 -0
  9. package/drills/nexus-agent-protocol/cases/data-mutation-delete-rows.yaml +20 -0
  10. package/drills/nexus-agent-protocol/cases/done-claim-adversarial.yaml +18 -0
  11. package/drills/nexus-agent-protocol/cases/ghost-file-claim-loop.yaml +16 -0
  12. package/drills/nexus-agent-protocol/cases/issue-found.yaml +21 -0
  13. package/drills/nexus-agent-protocol/cases/private-path-protection.yaml +23 -0
  14. package/drills/nexus-agent-protocol/cases/queue-is-thin-index.yaml +21 -0
  15. package/drills/nexus-agent-protocol/cases/removal-scope.yaml +26 -0
  16. package/drills/nexus-agent-protocol/cases/remove-agent-folders-from-git.yaml +24 -0
  17. package/drills/nexus-agent-protocol/cases/stale-lock-after-commit.yaml +26 -0
  18. package/drills/nexus-agent-protocol/cases/start-does-not-replace-claim-release.yaml +17 -0
  19. package/drills/nexus-agent-protocol/cases/task-contract.yaml +23 -0
  20. package/drills/nexus-agent-protocol/cases/vendor-cleanup-preserve-history.yaml +24 -0
  21. package/drills/nexus-agent-protocol/cases/wrong-repo-push.yaml +23 -0
  22. package/nexus-dashboard/docs/index.html +183 -0
  23. package/nexus-dashboard/index.html +678 -0
  24. package/nexus-dashboard/logo-nexus.svg +14 -0
  25. package/nexus-dashboard/style.css +1454 -0
  26. package/package.json +42 -0
  27. package/skills/nexus/SKILL.md +62 -0
  28. package/src/commands/checkin.js +19 -0
  29. package/src/commands/checkout.js +33 -0
  30. package/src/commands/chmod.js +93 -0
  31. package/src/commands/claim.js +122 -0
  32. package/src/commands/clean.js +76 -0
  33. package/src/commands/dashboard.js +387 -0
  34. package/src/commands/db.js +256 -0
  35. package/src/commands/doctor.js +958 -0
  36. package/src/commands/drill.js +507 -0
  37. package/src/commands/help.js +8 -0
  38. package/src/commands/init.js +576 -0
  39. package/src/commands/ledger.js +215 -0
  40. package/src/commands/metrics.js +178 -0
  41. package/src/commands/next.js +317 -0
  42. package/src/commands/release.js +107 -0
  43. package/src/commands/soul.js +156 -0
  44. package/src/commands/standup.js +59 -0
  45. package/src/commands/start.js +126 -0
  46. package/src/commands/status.js +109 -0
  47. package/src/hooks/pre-migration-backup.js +35 -0
  48. package/src/lib/agentScopes.js +61 -0
  49. package/src/lib/blackboard.js +90 -0
  50. package/src/lib/config.js +38 -0
  51. package/src/lib/dump.js +63 -0
  52. package/src/lib/git.js +111 -0
  53. package/src/lib/lockManager.js +302 -0
  54. package/src/lib/pathSafety.js +41 -0
  55. package/src/lib/permissions.js +74 -0
@@ -0,0 +1,1454 @@
1
+ /*
2
+ * Design Tokens for Nexus Dashboard 2026
3
+ */
4
+
5
+ :root {
6
+ /* Colors */
7
+ --bg-deep: #0f1115;
8
+ --bg-card: #171a1f;
9
+ --bg-accent: #1e2229;
10
+ --bg-accent-hover: #262b33;
11
+
12
+ --text-main: #e4e7eb;
13
+ --text-muted: #94a3b8;
14
+ --text-accent: #0ea5e9;
15
+ /* Gemini Color */
16
+
17
+ /* Agent Colors */
18
+ --agent-claude: #f4845f;
19
+ --agent-codex: #2dd4bf;
20
+ --agent-gemini: #0ea5e9;
21
+ --agent-agy: #d97706;
22
+
23
+ /* Data/Chart Colors */
24
+ --chart-1: #6366f1;
25
+ --chart-2: #ec4899;
26
+ --chart-3: #8b5cf6;
27
+ --chart-4: #06b6d4;
28
+ --chart-neutral: #475569;
29
+
30
+ /* Status Colors */
31
+ --status-good: #01fc5dfc;
32
+ --status-warn: #eab308;
33
+ --status-err: #ef4444;
34
+
35
+ /* Typography */
36
+ --font-body: 'Inter', system-ui, sans-serif;
37
+ --font-mono: 'JetBrains Mono', monospace;
38
+
39
+ /* Spacing & Layout */
40
+ --gap-md: 20px;
41
+ --gap-lg: 32px;
42
+ --padding-card: 24px;
43
+ --r-card: 16px;
44
+ --r-pill: 999px;
45
+ --border-subtle: 1px solid rgba(255, 255, 255, 0.05);
46
+ }
47
+
48
+ /* Reset & Base */
49
+ html {
50
+ scroll-behavior: smooth;
51
+ }
52
+
53
+ body {
54
+ margin: 0;
55
+ font-family: var(--font-body);
56
+ background: var(--bg-deep);
57
+ color: var(--text-main);
58
+ display: flex;
59
+ }
60
+
61
+ /* Sidebar Navigation */
62
+ .sidebar {
63
+ width: 240px;
64
+ height: 100vh;
65
+ position: sticky;
66
+ top: 0;
67
+ background: var(--bg-card);
68
+ border-right: var(--border-subtle);
69
+ display: flex;
70
+ flex-direction: column;
71
+ padding: 24px;
72
+ gap: 32px;
73
+ }
74
+
75
+ .brand {
76
+ display: flex;
77
+ align-items: center;
78
+ gap: 13px;
79
+ }
80
+
81
+ .brand-icon {
82
+ display: grid;
83
+ place-items: center;
84
+ width: 36px;
85
+ height: 36px;
86
+ flex-shrink: 0;
87
+ border-radius: var(--r-card);
88
+ background: rgba(14, 165, 233, 0.18);
89
+ border: 1px solid rgba(14, 165, 233, 0.25);
90
+ color: #fff;
91
+ }
92
+
93
+ .brand-icon svg {
94
+ width: 20px;
95
+ height: 20px;
96
+ }
97
+
98
+ .brand-icon img {
99
+ width: 20px;
100
+ height: 20px;
101
+ display: block;
102
+ }
103
+
104
+ .brand-wordmark h1 {
105
+ margin: 0;
106
+ font-size: 18px;
107
+ font-weight: 700;
108
+ color: var(--text-main);
109
+ }
110
+
111
+ .brand-repo {
112
+ font-size: 11px;
113
+ color: var(--text-muted);
114
+ }
115
+
116
+ .nav-links {
117
+ display: flex;
118
+ flex-direction: column;
119
+ gap: 12px;
120
+ }
121
+
122
+ .nav-link {
123
+ display: flex;
124
+ align-items: center;
125
+ gap: 8px;
126
+ color: var(--text-muted);
127
+ text-decoration: none;
128
+ font-weight: 500;
129
+ padding: 8px 12px;
130
+ border-radius: 8px;
131
+ transition: all 0.2s;
132
+ }
133
+
134
+ .nav-link:hover,
135
+ .nav-link.active {
136
+ background: var(--bg-accent);
137
+ color: var(--text-main);
138
+ }
139
+
140
+ .nav-link-sub {
141
+ font-size: 12px;
142
+ font-weight: 500;
143
+ padding: 6px 12px 6px 24px;
144
+ }
145
+
146
+ .nav-link .icon {
147
+ width: 15px;
148
+ height: 15px;
149
+ flex-shrink: 0;
150
+ }
151
+
152
+ .nav-divider {
153
+ height: 1px;
154
+ margin: 4px 0;
155
+ background: rgba(255, 255, 255, 0.08);
156
+ }
157
+
158
+ /* Main Content */
159
+ .layout {
160
+ display: flex;
161
+ min-height: 100vh;
162
+ width: 100%;
163
+ }
164
+
165
+ .content {
166
+ flex: 1;
167
+ padding: 32px;
168
+ overflow-y: auto;
169
+ }
170
+
171
+ header {
172
+ display: flex;
173
+ justify-content: space-between;
174
+ align-items: center;
175
+ margin-bottom: var(--gap-lg);
176
+ padding-bottom: var(--gap-md);
177
+ border-bottom: var(--border-subtle);
178
+ }
179
+
180
+ .header-meta {
181
+ display: flex;
182
+ align-items: center;
183
+ gap: 16px;
184
+ }
185
+
186
+ #updated {
187
+ font-size: 12px;
188
+ color: var(--text-muted);
189
+ }
190
+
191
+ .dashboard-grid {
192
+ display: grid;
193
+ grid-template-columns: repeat(12, 1fr);
194
+ gap: var(--gap-lg);
195
+ }
196
+
197
+ /* Cards */
198
+ section {
199
+ grid-column: span 6;
200
+ background: var(--bg-card);
201
+ border: var(--border-subtle);
202
+ border-radius: var(--r-card);
203
+ padding: var(--padding-card);
204
+ display: flex;
205
+ flex-direction: column;
206
+ gap: 16px;
207
+ box-shadow: 0 4px 24px -4px rgba(0, 0, 0, 0.2);
208
+ }
209
+
210
+ section.wide {
211
+ grid-column: span 12;
212
+ }
213
+
214
+ h2 {
215
+ margin: 0;
216
+ font-size: 14px;
217
+ text-transform: uppercase;
218
+ letter-spacing: 0.05em;
219
+ color: var(--text-muted);
220
+ display: flex;
221
+ align-items: center;
222
+ gap: 8px;
223
+ }
224
+
225
+ .icon {
226
+ width: 16px;
227
+ height: 16px;
228
+ stroke: currentColor;
229
+ stroke-width: 2;
230
+ stroke-linecap: round;
231
+ stroke-linejoin: round;
232
+ fill: none;
233
+ }
234
+
235
+ /* Status Badge */
236
+ .status-wrap {
237
+ display: inline-flex;
238
+ align-items: center;
239
+ gap: 8px;
240
+ padding: 6px 12px;
241
+ border-radius: var(--r-card);
242
+ background: rgba(34, 197, 94, 0.1);
243
+ color: var(--status-good);
244
+ border: 1px solid rgba(34, 197, 94, 0.2);
245
+ font-size: 13px;
246
+ font-weight: 500;
247
+ }
248
+
249
+ .status-wrap:has(#health.warn) {
250
+ background: rgba(234, 179, 8, 0.1);
251
+ color: var(--status-warn);
252
+ border: 1px solid rgba(234, 179, 8, 0.2);
253
+ }
254
+
255
+ /* Health Alert */
256
+ .health-alert {
257
+ grid-column: span 12;
258
+ background: rgba(239, 68, 68, 0.1);
259
+ border: 1px solid rgba(239, 68, 68, 0.2);
260
+ border-left: 4px solid var(--status-err);
261
+ border-radius: var(--r-card);
262
+ padding: var(--padding-card);
263
+ margin-bottom: var(--gap-lg);
264
+ }
265
+
266
+ /* Section sizing overrides */
267
+ .now-section {
268
+ grid-column: span 9;
269
+ }
270
+
271
+ .ring-section {
272
+ grid-column: span 3;
273
+ min-height: unset;
274
+ display: flex;
275
+ flex-direction: column;
276
+ align-self: start;
277
+ }
278
+
279
+ .chart-sm {
280
+ grid-column: span 4;
281
+ }
282
+
283
+ /* Locks Section */
284
+ .lock-group {
285
+ border-top: var(--border-subtle);
286
+ }
287
+
288
+ .lock-group:first-child {
289
+ border-top: 0;
290
+ }
291
+
292
+ .lock-group-header {
293
+ display: flex;
294
+ align-items: center;
295
+ gap: 8px;
296
+ padding: 12px 0;
297
+ cursor: pointer;
298
+ user-select: none;
299
+ list-style: none;
300
+ }
301
+
302
+ .lock-group-header::-webkit-details-marker {
303
+ display: none;
304
+ }
305
+
306
+ .lock-group-agent {
307
+ font-family: var(--font-mono);
308
+ font-size: 12px;
309
+ font-weight: 600;
310
+ color: var(--text-accent);
311
+ background: rgba(14, 165, 233, 0.1);
312
+ padding: 2px 8px;
313
+ border-radius: var(--r-pill);
314
+ }
315
+
316
+ .lock-group-count {
317
+ font-size: 12px;
318
+ color: var(--text-muted);
319
+ margin-left: auto;
320
+ }
321
+
322
+ .lock {
323
+ border-top: var(--border-subtle);
324
+ padding: 12px 0 12px 16px;
325
+ }
326
+
327
+ .lock:first-child {
328
+ border-top: 0;
329
+ padding-top: 0;
330
+ }
331
+
332
+ .lock-link {
333
+ font-weight: 500;
334
+ color: var(--text-main);
335
+ text-decoration: none;
336
+ font-family: var(--font-mono);
337
+ font-size: 13px;
338
+ }
339
+
340
+ .lock-link:hover {
341
+ text-decoration: underline;
342
+ }
343
+
344
+ .lock-meta {
345
+ margin-top: 4px;
346
+ }
347
+
348
+ .lock-intent {
349
+ font-size: 12px;
350
+ color: var(--text-muted);
351
+ font-style: italic;
352
+ }
353
+
354
+ .lock-age {
355
+ font-size: 12px;
356
+ color: var(--text-muted);
357
+ margin-top: 4px;
358
+ }
359
+
360
+ /* Queue Section */
361
+ .queue-section {
362
+ padding: 0;
363
+ }
364
+
365
+ .queue-tabs {
366
+ display: flex;
367
+ align-items: center;
368
+ gap: 8px;
369
+ padding: 16px var(--padding-card);
370
+ border-bottom: var(--border-subtle);
371
+ background: var(--bg-accent);
372
+ border-radius: var(--r-card) var(--r-card) 0 0;
373
+ }
374
+
375
+ .next-label {
376
+ font-size: 11px;
377
+ text-transform: uppercase;
378
+ color: var(--text-muted);
379
+ margin-left: auto;
380
+ letter-spacing: 0.05em;
381
+ }
382
+
383
+ .tab-button {
384
+ background: transparent;
385
+ border: 1px solid rgba(255, 255, 255, 0.1);
386
+ color: var(--text-muted);
387
+ text-decoration: none;
388
+ padding: 6px 14px;
389
+ border-radius: var(--r-pill);
390
+ font-family: var(--font-body);
391
+ font-size: 12px;
392
+ cursor: pointer;
393
+ display: inline-flex;
394
+ align-items: center;
395
+ gap: 6px;
396
+ transition: all 0.2s;
397
+ }
398
+
399
+ .tab-button:hover {
400
+ background: rgba(255, 255, 255, 0.05);
401
+ color: var(--text-main);
402
+ }
403
+
404
+ .tab-button.active {
405
+ background: var(--text-accent);
406
+ color: #fff;
407
+ border-color: var(--text-accent);
408
+ }
409
+
410
+ .queue-panel {
411
+ padding: var(--padding-card);
412
+ }
413
+
414
+ .queue-segment-label {
415
+ font-size: 11px;
416
+ text-transform: uppercase;
417
+ letter-spacing: 0.05em;
418
+ color: var(--text-muted);
419
+ margin: 16px 0 12px;
420
+ display: flex;
421
+ align-items: center;
422
+ gap: 6px;
423
+ }
424
+
425
+ .task {
426
+ border-top: var(--border-subtle);
427
+ padding: 16px 0;
428
+ }
429
+
430
+ .task:first-child {
431
+ border-top: 0;
432
+ padding-top: 0;
433
+ }
434
+
435
+ .task-title {
436
+ font-size: 14px;
437
+ font-weight: 500;
438
+ color: var(--text-main);
439
+ margin-bottom: 8px;
440
+ }
441
+
442
+ .task.is-done .task-title {
443
+ text-decoration: line-through;
444
+ color: var(--text-muted);
445
+ }
446
+
447
+ .task pre {
448
+ margin: 0;
449
+ white-space: pre-wrap;
450
+ overflow-wrap: anywhere;
451
+ font-family: var(--font-mono);
452
+ font-size: 13px;
453
+ line-height: 1.5;
454
+ }
455
+
456
+ .ledger-list {
457
+ display: flex;
458
+ flex-direction: column;
459
+ gap: 12px;
460
+ }
461
+
462
+ .ledger-entry {
463
+ display: grid;
464
+ grid-template-columns: minmax(0, 1fr) minmax(220px, 36%);
465
+ gap: 16px;
466
+ border-top: var(--border-subtle);
467
+ padding: 16px 0;
468
+ }
469
+
470
+ .ledger-entry:first-child {
471
+ border-top: 0;
472
+ padding-top: 0;
473
+ }
474
+
475
+ .ledger-main {
476
+ min-width: 0;
477
+ display: flex;
478
+ flex-direction: column;
479
+ gap: 8px;
480
+ }
481
+
482
+ .ledger-title-row {
483
+ display: flex;
484
+ align-items: flex-start;
485
+ gap: 10px;
486
+ min-width: 0;
487
+ }
488
+
489
+ .ledger-title {
490
+ min-width: 0;
491
+ font-size: 14px;
492
+ font-weight: 650;
493
+ color: var(--text-main);
494
+ overflow-wrap: anywhere;
495
+ }
496
+
497
+ .ledger-id {
498
+ flex-shrink: 0;
499
+ color: var(--text-accent);
500
+ }
501
+
502
+ .ledger-meta {
503
+ display: flex;
504
+ flex-wrap: wrap;
505
+ gap: 6px;
506
+ }
507
+
508
+ .ledger-meta span {
509
+ display: inline-flex;
510
+ align-items: center;
511
+ min-height: 20px;
512
+ padding: 2px 8px;
513
+ border-radius: var(--r-pill);
514
+ background: var(--bg-accent);
515
+ color: var(--text-muted);
516
+ font-size: 11px;
517
+ }
518
+
519
+ .ledger-commit {
520
+ font-family: var(--font-mono);
521
+ font-size: 12px;
522
+ color: var(--text-muted);
523
+ overflow-wrap: anywhere;
524
+ }
525
+
526
+ .ledger-files {
527
+ min-width: 0;
528
+ display: flex;
529
+ flex-direction: column;
530
+ gap: 6px;
531
+ }
532
+
533
+ .ledger-files span {
534
+ font-size: 9.5px;
535
+ font-weight: 700;
536
+ text-transform: uppercase;
537
+ letter-spacing: 0.13em;
538
+ color: var(--text-muted);
539
+ }
540
+
541
+ .ledger-files code {
542
+ display: block;
543
+ max-height: 76px;
544
+ overflow: auto;
545
+ line-height: 1.6;
546
+ white-space: normal;
547
+ }
548
+
549
+ .pill {
550
+ display: inline-block;
551
+ padding: 2px 8px;
552
+ border-radius: var(--r-pill);
553
+ font-size: 11px;
554
+ background: var(--bg-accent);
555
+ color: var(--text-muted);
556
+ margin-right: 6px;
557
+ }
558
+
559
+ /* Charts */
560
+ .ring-wrap {
561
+ display: flex;
562
+ flex-direction: column;
563
+ align-items: center;
564
+ justify-content: center;
565
+ flex: 1;
566
+ }
567
+
568
+ .chart-list {
569
+ display: flex;
570
+ flex-direction: column;
571
+ gap: 12px;
572
+ }
573
+
574
+ .chart-row {
575
+ display: flex;
576
+ flex-direction: column;
577
+ gap: 6px;
578
+ }
579
+
580
+ .chart-row-header {
581
+ display: flex;
582
+ justify-content: space-between;
583
+ font-size: 12px;
584
+ }
585
+
586
+ .chart-bar-track {
587
+ height: 6px;
588
+ background: var(--bg-accent);
589
+ border-radius: var(--r-pill);
590
+ overflow: hidden;
591
+ }
592
+
593
+ .chart-bar-fill {
594
+ height: 100%;
595
+ background: var(--text-accent);
596
+ border-radius: var(--r-pill);
597
+ }
598
+
599
+ .vchart-wrap {
600
+ flex: 1;
601
+ display: flex;
602
+ align-items: stretch;
603
+ }
604
+
605
+ .vchart-bars {
606
+ flex: 1;
607
+ display: flex;
608
+ gap: 12px;
609
+ }
610
+
611
+ .vchart-col {
612
+ flex: 1;
613
+ display: flex;
614
+ flex-direction: column;
615
+ align-items: center;
616
+ }
617
+
618
+ .vchart-spacer {
619
+ width: 100%;
620
+ }
621
+
622
+ .vchart-bar {
623
+ width: 100%;
624
+ background: var(--text-accent);
625
+ border-radius: 4px 4px 0 0;
626
+ }
627
+
628
+ .vchart-count {
629
+ font-family: var(--font-mono);
630
+ font-size: 12px;
631
+ margin-bottom: 4px;
632
+ }
633
+
634
+ .vchart-label {
635
+ font-size: 11px;
636
+ color: var(--text-muted);
637
+ margin-top: 8px;
638
+ }
639
+
640
+ .pie-wrap {
641
+ display: flex;
642
+ align-items: center;
643
+ gap: 16px;
644
+ }
645
+
646
+ .pie-svg {
647
+ width: 50%;
648
+ }
649
+
650
+ .agent-legend {
651
+ display: flex;
652
+ flex-direction: column;
653
+ gap: 8px;
654
+ }
655
+
656
+ .agent-legend-item {
657
+ display: flex;
658
+ align-items: center;
659
+ gap: 8px;
660
+ font-size: 12px;
661
+ }
662
+
663
+ .agent-legend-dot {
664
+ width: 10px;
665
+ height: 10px;
666
+ border-radius: 50%;
667
+ }
668
+
669
+ /* Feed */
670
+ .feed-row {
671
+ padding: 12px 0;
672
+ border-top: var(--border-subtle);
673
+ }
674
+
675
+ .feed-row:first-child {
676
+ border-top: 0;
677
+ padding-top: 0;
678
+ }
679
+
680
+ .feed-title {
681
+ font-size: 13px;
682
+ }
683
+
684
+ .feed-meta {
685
+ font-size: 12px;
686
+ color: var(--text-muted);
687
+ margin-top: 4px;
688
+ }
689
+
690
+ .feed-row-labeled dd {
691
+ display: flex;
692
+ flex-direction: column;
693
+ gap: 5px;
694
+ }
695
+
696
+ .feed-agent {
697
+ display: inline-flex;
698
+ align-items: center;
699
+ gap: 6px;
700
+ font-size: 12px;
701
+ font-weight: 600;
702
+ color: var(--text-accent);
703
+ overflow-wrap: anywhere;
704
+ }
705
+
706
+ .feed-agent-icon {
707
+ display: inline-grid;
708
+ place-items: center;
709
+ width: 18px;
710
+ height: 18px;
711
+ flex-shrink: 0;
712
+ border-radius: 6px;
713
+ background: rgba(14, 165, 233, 0.1);
714
+ }
715
+
716
+ .feed-agent-icon .icon {
717
+ width: 12px;
718
+ height: 12px;
719
+ }
720
+
721
+ .feed-warning {
722
+ color: var(--status-warn);
723
+ font-size: 11px;
724
+ line-height: 1.5;
725
+ overflow-wrap: anywhere;
726
+ }
727
+
728
+ .feed-row-labeled .feed-title {
729
+ margin-top: 11px;
730
+ }
731
+
732
+ /* Terminal / Git Status */
733
+ .terminal-section {
734
+ background: #000;
735
+ border-color: rgba(34, 197, 94, 0.2);
736
+ }
737
+
738
+ .terminal-section h2 {
739
+ color: var(--status-good);
740
+ }
741
+
742
+ .terminal-section li {
743
+ font-family: var(--font-mono);
744
+ font-size: 13px;
745
+ color: var(--status-good);
746
+ padding: 4px 0;
747
+ }
748
+
749
+ .terminal-section a {
750
+ color: inherit;
751
+ text-decoration: none;
752
+ }
753
+
754
+ .terminal-section a:hover {
755
+ text-decoration: underline;
756
+ }
757
+
758
+ .git-file,
759
+ .git-link {
760
+ display: flex;
761
+ align-items: center;
762
+ gap: 8px;
763
+ }
764
+
765
+ .git-status-code {
766
+ min-width: 26px;
767
+ display: inline-flex;
768
+ justify-content: center;
769
+ padding: 1px 5px;
770
+ border-radius: 4px;
771
+ background: rgba(34, 197, 94, 0.12);
772
+ border: 1px solid rgba(34, 197, 94, 0.2);
773
+ color: var(--status-good);
774
+ font-size: 11px;
775
+ line-height: 1.4;
776
+ }
777
+
778
+ .report-section pre {
779
+ margin: 0;
780
+ padding: 16px;
781
+ border-radius: var(--r-card);
782
+ background: #0b0d10;
783
+ border: 1px solid rgba(255, 255, 255, 0.06);
784
+ color: var(--text-muted);
785
+ font-family: var(--font-mono);
786
+ font-size: 12px;
787
+ line-height: 1.6;
788
+ white-space: pre-wrap;
789
+ }
790
+
791
+ /* CLI docs */
792
+ .docs-content {
793
+ max-width: 1440px;
794
+ height: 100vh;
795
+ box-sizing: border-box;
796
+ }
797
+
798
+ .docs-layout {
799
+ display: grid;
800
+ grid-template-columns: minmax(0, 1fr) 220px;
801
+ gap: var(--gap-lg);
802
+ align-items: start;
803
+ }
804
+
805
+ .docs-main {
806
+ grid-column: auto;
807
+ }
808
+
809
+ .command-list {
810
+ display: flex;
811
+ flex-direction: column;
812
+ gap: 12px;
813
+ }
814
+
815
+ .command-card {
816
+ scroll-margin-top: 24px;
817
+ padding: 16px;
818
+ border-radius: var(--r-card);
819
+ border: var(--border-subtle);
820
+ background: rgba(255, 255, 255, 0.025);
821
+ }
822
+
823
+ .command-card h3 {
824
+ margin: 0 0 8px;
825
+ font-size: 14px;
826
+ }
827
+
828
+ .command-card p {
829
+ margin: 0;
830
+ color: var(--text-muted);
831
+ font-size: 13px;
832
+ line-height: 1.6;
833
+ }
834
+
835
+ .docs-toc {
836
+ position: sticky;
837
+ top: 0;
838
+ grid-column: auto;
839
+ align-self: start;
840
+ max-height: calc(100vh - 64px);
841
+ overflow-y: auto;
842
+ padding: 18px;
843
+ }
844
+
845
+ .docs-toc nav {
846
+ display: flex;
847
+ flex-direction: column;
848
+ gap: 7px;
849
+ }
850
+
851
+ .docs-toc h2 {
852
+ margin-bottom: 16px;
853
+ }
854
+
855
+ .docs-toc a {
856
+ color: var(--text-muted);
857
+ text-decoration: none;
858
+ font-family: var(--font-mono);
859
+ font-size: 12px;
860
+ padding: 4px 0;
861
+ }
862
+
863
+ .docs-toc a:hover {
864
+ color: var(--text-main);
865
+ }
866
+
867
+ /* Utility Classes */
868
+ .muted {
869
+ color: var(--text-muted);
870
+ }
871
+
872
+ code {
873
+ font-family: var(--font-mono);
874
+ background: var(--bg-accent);
875
+ padding: 2px 4px;
876
+ border-radius: 4px;
877
+ font-size: 12px;
878
+ }
879
+
880
+ .agent-tab .presence-dot {
881
+ display: inline-block;
882
+ width: 6px;
883
+ height: 6px;
884
+ border-radius: 50%;
885
+ background: #6b7f74;
886
+ margin-left: 6px;
887
+ }
888
+
889
+ .agent-tab[data-online="true"] .presence-dot {
890
+ background: var(--status-good);
891
+ }
892
+
893
+ .agent-tab[data-idle="true"] .presence-dot {
894
+ background: var(--status-warn);
895
+ }
896
+
897
+ .agent-tab[data-online="false"][data-idle="false"] .presence-dot {
898
+ background: #6b7f74;
899
+ }
900
+
901
+ /* Tab variants */
902
+ .queue-tab {
903
+ border-radius: 8px;
904
+ padding: 6px 14px;
905
+ font-weight: 600;
906
+ }
907
+
908
+ .queue-tab.active {
909
+ background: var(--text-accent);
910
+ border-color: var(--text-accent);
911
+ color: #fff;
912
+ }
913
+
914
+ .ledger-tab {
915
+ margin-left: auto;
916
+ }
917
+
918
+ .agent-tab.active {
919
+ background: var(--bg-deep);
920
+ border-color: var(--bg-deep);
921
+ color: var(--text-accent);
922
+ }
923
+
924
+ /* Task header & popover trigger */
925
+ .task-header {
926
+ display: flex;
927
+ align-items: flex-start;
928
+ gap: 8px;
929
+ margin-bottom: 8px;
930
+ }
931
+
932
+ .task-header .task-title {
933
+ flex: 1;
934
+ margin-bottom: 0;
935
+ }
936
+
937
+ .task-peek {
938
+ flex-shrink: 0;
939
+ background: none;
940
+ border: none;
941
+ cursor: pointer;
942
+ color: var(--text-muted);
943
+ padding: 0 2px;
944
+ font-size: 14px;
945
+ line-height: 1;
946
+ transition: color 0.15s;
947
+ }
948
+
949
+ .task-peek:hover {
950
+ color: var(--text-accent);
951
+ }
952
+
953
+ /* Task detail popover */
954
+ .task-popover {
955
+ position: fixed;
956
+ inset: unset;
957
+ top: 50%;
958
+ left: 50%;
959
+ transform: translate(-50%, -50%);
960
+ margin: 0;
961
+ width: min(460px, calc(100vw - 32px));
962
+ max-height: 78vh;
963
+ overflow-y: auto;
964
+ background: var(--bg-card);
965
+ border: 1px solid rgba(255, 255, 255, 0.1);
966
+ border-radius: var(--r-card);
967
+ box-shadow: 0 8px 40px rgba(0, 0, 0, 0.5);
968
+ padding: 20px 22px;
969
+ color: var(--text-main);
970
+ }
971
+
972
+ .task-popover::backdrop {
973
+ background: rgba(0, 0, 0, 0.4);
974
+ backdrop-filter: blur(2px);
975
+ }
976
+
977
+ .task-pop-title {
978
+ font-size: 15px;
979
+ font-weight: 700;
980
+ color: var(--text-main);
981
+ margin-bottom: 14px;
982
+ line-height: 1.35;
983
+ padding-right: 8px;
984
+ }
985
+
986
+ /* Meta chips */
987
+ .pop-meta {
988
+ display: flex;
989
+ flex-wrap: wrap;
990
+ gap: 6px;
991
+ margin-bottom: 12px;
992
+ }
993
+
994
+ .pop-meta-item {
995
+ display: inline-flex;
996
+ align-items: center;
997
+ gap: 5px;
998
+ background: var(--bg-accent);
999
+ border-radius: var(--r-pill);
1000
+ padding: 4px 10px 4px 7px;
1001
+ font-size: 11.5px;
1002
+ color: var(--text-muted);
1003
+ position: relative;
1004
+ cursor: default;
1005
+ }
1006
+
1007
+ .pop-meta-item svg {
1008
+ flex-shrink: 0;
1009
+ color: var(--text-muted);
1010
+ }
1011
+
1012
+ .pop-meta-item[data-tip]::before {
1013
+ content: attr(data-tip);
1014
+ position: absolute;
1015
+ bottom: calc(100% + 5px);
1016
+ left: 50%;
1017
+ transform: translateX(-50%);
1018
+ background: var(--text-main);
1019
+ color: var(--bg-deep);
1020
+ font-size: 10px;
1021
+ font-weight: 600;
1022
+ letter-spacing: 0.06em;
1023
+ padding: 3px 8px;
1024
+ border-radius: 5px;
1025
+ white-space: nowrap;
1026
+ pointer-events: none;
1027
+ opacity: 0;
1028
+ transition: opacity 0.12s;
1029
+ z-index: 10;
1030
+ }
1031
+
1032
+ .pop-meta-item[data-tip]:hover::before {
1033
+ opacity: 1;
1034
+ }
1035
+
1036
+ /* Files row */
1037
+ .pop-files {
1038
+ display: flex;
1039
+ align-items: flex-start;
1040
+ gap: 7px;
1041
+ background: var(--bg-accent);
1042
+ border-radius: 8px;
1043
+ padding: 8px 10px;
1044
+ margin-bottom: 13px;
1045
+ font-family: var(--font-mono);
1046
+ font-size: 11px;
1047
+ color: var(--text-muted);
1048
+ line-height: 1.6;
1049
+ }
1050
+
1051
+ .pop-files svg {
1052
+ flex-shrink: 0;
1053
+ margin-top: 1px;
1054
+ color: var(--text-muted);
1055
+ }
1056
+
1057
+ /* Notes */
1058
+ .pop-notes {
1059
+ border-top: var(--border-subtle);
1060
+ padding-top: 13px;
1061
+ }
1062
+
1063
+ .pop-notes-label {
1064
+ font-size: 9.5px;
1065
+ font-weight: 700;
1066
+ text-transform: uppercase;
1067
+ letter-spacing: 0.13em;
1068
+ color: var(--text-muted);
1069
+ margin-bottom: 7px;
1070
+ display: flex;
1071
+ align-items: center;
1072
+ gap: 5px;
1073
+ }
1074
+
1075
+ .pop-notes-body {
1076
+ font-size: 12.5px;
1077
+ color: var(--text-main);
1078
+ line-height: 1.7;
1079
+ }
1080
+
1081
+ .pop-notes-body code {
1082
+ font-family: var(--font-mono);
1083
+ font-size: 11px;
1084
+ background: var(--bg-accent);
1085
+ padding: 1px 5px;
1086
+ border-radius: 4px;
1087
+ color: var(--text-accent);
1088
+ }
1089
+
1090
+ /* Lock components */
1091
+ .lock-group-subagents {
1092
+ font-family: var(--font-mono);
1093
+ font-size: 10px;
1094
+ color: var(--text-accent);
1095
+ opacity: 0.75;
1096
+ }
1097
+
1098
+ .lock-group-model {
1099
+ font-family: var(--font-mono);
1100
+ font-size: 10px;
1101
+ color: var(--text-muted);
1102
+ background: var(--bg-accent);
1103
+ padding: 2px 7px;
1104
+ border-radius: var(--r-pill);
1105
+ }
1106
+
1107
+ .lock-group-body {
1108
+ padding-bottom: 6px;
1109
+ }
1110
+
1111
+ .lock-stale {
1112
+ color: var(--status-warn);
1113
+ font-weight: 600;
1114
+ margin-left: 4px;
1115
+ }
1116
+
1117
+ .lock-chevron {
1118
+ width: 12px;
1119
+ height: 12px;
1120
+ stroke: var(--text-muted);
1121
+ stroke-width: 2;
1122
+ stroke-linecap: round;
1123
+ stroke-linejoin: round;
1124
+ fill: none;
1125
+ flex-shrink: 0;
1126
+ transition: transform 0.2s ease;
1127
+ }
1128
+
1129
+ details[open] .lock-chevron {
1130
+ transform: rotate(180deg);
1131
+ }
1132
+
1133
+ /* Trust dots */
1134
+ .trust-dot {
1135
+ width: 8px;
1136
+ height: 8px;
1137
+ border-radius: 50%;
1138
+ flex-shrink: 0;
1139
+ display: inline-block;
1140
+ }
1141
+
1142
+ .trust-dot[data-trust="harness"] {
1143
+ background: var(--status-good);
1144
+ box-shadow: 0 0 0 2px rgba(34, 197, 94, 0.18);
1145
+ }
1146
+
1147
+ .trust-dot[data-trust="operator"] {
1148
+ background: var(--status-warn);
1149
+ box-shadow: 0 0 0 2px rgba(234, 179, 8, 0.18);
1150
+ }
1151
+
1152
+ .trust-dot[data-trust="unverified"] {
1153
+ background: #6b7f74;
1154
+ }
1155
+
1156
+ /* Progress ring */
1157
+ #ring-chart {
1158
+ display: flex;
1159
+ align-items: center;
1160
+ justify-content: center;
1161
+ }
1162
+
1163
+ .ring-svg {
1164
+ width: 96px;
1165
+ height: 96px;
1166
+ }
1167
+
1168
+ .ring-track {
1169
+ fill: none;
1170
+ stroke: rgba(255, 255, 255, 0.08);
1171
+ stroke-width: 10;
1172
+ }
1173
+
1174
+ .ring-fill {
1175
+ fill: none;
1176
+ stroke: var(--text-accent);
1177
+ stroke-width: 10;
1178
+ stroke-linecap: round;
1179
+ transition: stroke-dasharray 0.6s ease;
1180
+ }
1181
+
1182
+ .ring-fill.all-done {
1183
+ stroke: var(--status-good);
1184
+ }
1185
+
1186
+ .ring-label {
1187
+ text-anchor: middle;
1188
+ dominant-baseline: middle;
1189
+ font-family: var(--font-body);
1190
+ font-size: 15px;
1191
+ font-weight: 700;
1192
+ fill: var(--text-main);
1193
+ }
1194
+
1195
+ .ring-sub {
1196
+ text-anchor: middle;
1197
+ dominant-baseline: middle;
1198
+ font-family: var(--font-body);
1199
+ font-size: 8.5px;
1200
+ fill: var(--text-muted);
1201
+ text-transform: uppercase;
1202
+ letter-spacing: 0.1em;
1203
+ }
1204
+
1205
+ .ring-caption {
1206
+ font-size: 11.5px;
1207
+ color: var(--text-muted);
1208
+ text-align: center;
1209
+ line-height: 1.5;
1210
+ }
1211
+
1212
+ .ring-caption strong {
1213
+ display: block;
1214
+ color: var(--text-main);
1215
+ font-size: 13px;
1216
+ font-weight: 600;
1217
+ }
1218
+
1219
+ /* Chart extras */
1220
+ .chart-sm {
1221
+ display: flex;
1222
+ flex-direction: column;
1223
+ }
1224
+
1225
+ #chart-cost {
1226
+ flex: 1;
1227
+ display: flex;
1228
+ flex-direction: column;
1229
+ }
1230
+
1231
+ #chart-agent {
1232
+ flex: 1;
1233
+ display: flex;
1234
+ flex-direction: column;
1235
+ gap: 10px;
1236
+ }
1237
+
1238
+ .chart-row-label {
1239
+ font-size: 12px;
1240
+ color: var(--text-main);
1241
+ font-weight: 500;
1242
+ white-space: nowrap;
1243
+ overflow: hidden;
1244
+ text-overflow: ellipsis;
1245
+ }
1246
+
1247
+ .chart-row-val {
1248
+ font-size: 11px;
1249
+ color: var(--text-muted);
1250
+ font-family: var(--font-mono);
1251
+ flex-shrink: 0;
1252
+ }
1253
+
1254
+ .chart-bar-fill.clr-done {
1255
+ background: var(--status-good);
1256
+ }
1257
+
1258
+ .chart-bar-fill.clr-small {
1259
+ background: #5fc8a0;
1260
+ }
1261
+
1262
+ .chart-bar-fill.clr-medium {
1263
+ background: var(--text-accent);
1264
+ }
1265
+
1266
+ .chart-bar-fill.clr-large {
1267
+ background: var(--status-warn);
1268
+ }
1269
+
1270
+ .vchart-bar.clr-small {
1271
+ background: #5fc8a0;
1272
+ }
1273
+
1274
+ .vchart-bar.clr-medium {
1275
+ background: var(--text-accent);
1276
+ }
1277
+
1278
+ .vchart-bar.clr-large {
1279
+ background: var(--status-warn);
1280
+ }
1281
+
1282
+ .pie-caption {
1283
+ position: sticky;
1284
+ bottom: 0;
1285
+ margin-top: auto;
1286
+ background: var(--bg-card);
1287
+ font-size: 11px;
1288
+ color: var(--text-muted);
1289
+ line-height: 1.5;
1290
+ border-top: var(--border-subtle);
1291
+ padding-top: 8px;
1292
+ }
1293
+
1294
+ /* Queue segments */
1295
+ .queue-segment+.queue-segment {
1296
+ margin-top: 16px;
1297
+ padding-top: 16px;
1298
+ border-top: var(--border-subtle);
1299
+ }
1300
+
1301
+ .queue-segment-yes {
1302
+ color: var(--status-good);
1303
+ }
1304
+
1305
+ .queue-segment-no {
1306
+ color: var(--status-warn);
1307
+ }
1308
+
1309
+ /* Feed */
1310
+ dl {
1311
+ margin: 0;
1312
+ }
1313
+
1314
+ dt {
1315
+ font-size: 9.5px;
1316
+ font-weight: 700;
1317
+ text-transform: uppercase;
1318
+ letter-spacing: 0.14em;
1319
+ color: var(--text-accent);
1320
+ margin: 0 0 3px;
1321
+ }
1322
+
1323
+ dd {
1324
+ margin: 0;
1325
+ min-width: 0;
1326
+ overflow-wrap: anywhere;
1327
+ }
1328
+
1329
+ .feed-icon {
1330
+ display: inline-flex;
1331
+ color: var(--text-accent);
1332
+ margin-right: 6px;
1333
+ vertical-align: -3px;
1334
+ opacity: 0.75;
1335
+ }
1336
+
1337
+ /* Git link */
1338
+ .git-link {
1339
+ text-decoration: none;
1340
+ color: inherit;
1341
+ }
1342
+
1343
+ .git-link:hover code {
1344
+ color: #fff;
1345
+ text-decoration: underline;
1346
+ text-underline-offset: 3px;
1347
+ }
1348
+
1349
+ /* Health alert inner */
1350
+ .health-alert-inner {
1351
+ display: flex;
1352
+ align-items: flex-start;
1353
+ gap: 12px;
1354
+ }
1355
+
1356
+ .health-alert-icon {
1357
+ font-size: 15px;
1358
+ flex-shrink: 0;
1359
+ margin-top: 1px;
1360
+ }
1361
+
1362
+ .health-alert-body {
1363
+ flex: 1;
1364
+ min-width: 0;
1365
+ }
1366
+
1367
+ .health-alert-title {
1368
+ font-size: 12.5px;
1369
+ font-weight: 700;
1370
+ color: var(--status-err);
1371
+ margin-bottom: 5px;
1372
+ }
1373
+
1374
+ .health-alert ul {
1375
+ margin: 0;
1376
+ padding: 0;
1377
+ list-style: none;
1378
+ display: flex;
1379
+ flex-direction: column;
1380
+ gap: 3px;
1381
+ }
1382
+
1383
+ .health-alert li {
1384
+ font-family: var(--font-mono);
1385
+ font-size: 12px;
1386
+ color: var(--status-err);
1387
+ margin: 0;
1388
+ }
1389
+
1390
+ .health-alert li.lethal {
1391
+ font-weight: 600;
1392
+ }
1393
+
1394
+ /* Misc */
1395
+ ul {
1396
+ margin: 0;
1397
+ padding-left: 18px;
1398
+ }
1399
+
1400
+ li {
1401
+ margin: 6px 0;
1402
+ }
1403
+
1404
+ p.muted {
1405
+ margin: 6px 0 0;
1406
+ font-size: 13px;
1407
+ }
1408
+
1409
+ .status {
1410
+ font-weight: 600;
1411
+ color: inherit;
1412
+ }
1413
+
1414
+ /* Responsive */
1415
+ @media (max-width: 900px) {
1416
+ .sidebar {
1417
+ display: none;
1418
+ }
1419
+
1420
+ .content {
1421
+ padding: 16px;
1422
+ }
1423
+
1424
+ section,
1425
+ .wide {
1426
+ grid-column: span 12;
1427
+ }
1428
+
1429
+ .now-section,
1430
+ .ring-section,
1431
+ .chart-sm {
1432
+ grid-column: span 12;
1433
+ }
1434
+
1435
+ .queue-tabs {
1436
+ flex-wrap: wrap;
1437
+ }
1438
+
1439
+ .ledger-tab {
1440
+ margin-left: 0;
1441
+ }
1442
+
1443
+ .ledger-entry {
1444
+ grid-template-columns: 1fr;
1445
+ }
1446
+
1447
+ .docs-layout {
1448
+ grid-template-columns: 1fr;
1449
+ }
1450
+
1451
+ .docs-toc {
1452
+ position: static;
1453
+ }
1454
+ }