claude-code-kanban 4.26.0 → 4.28.0-rc.1
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 +68 -44
- package/cli.js +235 -7
- package/lib/claude-dir.js +1 -1
- package/lib/dispatch-groups.js +93 -0
- package/lib/dispatch.js +171 -0
- package/lib/folder-dialog.js +91 -0
- package/lib/inline-assets.js +1 -1
- package/lib/net-guard.js +20 -3
- package/lib/parsers.js +113 -0
- package/lib/scratch-files.js +47 -0
- package/lib/session-events.js +22 -2
- package/lib/terminal.js +555 -0
- package/package.json +14 -3
- package/plugin/plugins/claude-code-kanban/.claude-plugin/plugin.json +1 -1
- package/plugin/plugins/claude-code-kanban/monitors.json +6 -0
- package/plugin/plugins/claude-code-kanban/scripts/approval-gate.sh +34 -2
- package/plugin/plugins/claude-code-kanban/scripts/postman.js +7 -2
- package/plugin/plugins/claude-code-kanban/skills/kanban-dispatch/SKILL.md +23 -0
- package/public/app.js +2250 -214
- package/public/index.html +155 -14
- package/public/style.css +1048 -132
- package/public/sw.js +2 -1
- package/public/themes.css +84 -80
- package/server.js +647 -91
- package/skill-guides/dispatch.md +72 -0
package/public/style.css
CHANGED
|
@@ -9,9 +9,6 @@
|
|
|
9
9
|
--bg-surface: #16181c;
|
|
10
10
|
--bg-elevated: #1e2025;
|
|
11
11
|
--bg-hover: #282a30;
|
|
12
|
-
/* Selection reads as a recess against the darker surface here, but light theme's deep tone
|
|
13
|
-
sits within a shade of the sidebar, so there it has to rise instead. */
|
|
14
|
-
--session-active-bg: var(--bg-deep);
|
|
15
12
|
--border: #363840;
|
|
16
13
|
--text-primary: #f0f1f3;
|
|
17
14
|
--text-secondary: #c2c4c9;
|
|
@@ -32,22 +29,18 @@
|
|
|
32
29
|
--team-dim: rgba(96, 165, 250, 0.18);
|
|
33
30
|
--plan: #86a886;
|
|
34
31
|
--plan-dim: rgba(134, 168, 134, 0.18);
|
|
35
|
-
--ansi-black: var(--text-muted);
|
|
36
32
|
--ansi-red: #e06c66;
|
|
37
33
|
--ansi-green: #3ecf8e;
|
|
38
34
|
--ansi-yellow: #e0b04a;
|
|
39
35
|
--ansi-blue: #60a5fa;
|
|
40
36
|
--ansi-magenta: #c98ce0;
|
|
41
37
|
--ansi-cyan: #4dc9c9;
|
|
42
|
-
--ansi-white: var(--text-secondary);
|
|
43
|
-
--ansi-bright-black: var(--text-tertiary);
|
|
44
38
|
--ansi-bright-red: #ff8a84;
|
|
45
39
|
--ansi-bright-green: #5ee3a8;
|
|
46
40
|
--ansi-bright-yellow: #f0c56a;
|
|
47
41
|
--ansi-bright-blue: #8bbdfb;
|
|
48
42
|
--ansi-bright-magenta: #e0a8f0;
|
|
49
43
|
--ansi-bright-cyan: #7ddede;
|
|
50
|
-
--ansi-bright-white: var(--text-primary);
|
|
51
44
|
--mono: 'IBM Plex Mono', monospace;
|
|
52
45
|
--serif: 'Playfair Display', serif;
|
|
53
46
|
--card-gap: 7px;
|
|
@@ -61,6 +54,18 @@
|
|
|
61
54
|
--modal-zoom: 1;
|
|
62
55
|
}
|
|
63
56
|
|
|
57
|
+
/* Tokens derived from theme colors live on body, where color themes set those colors;
|
|
58
|
+
on :root they would resolve to the defaults before a theme applies. */
|
|
59
|
+
body {
|
|
60
|
+
/* Selection reads as a recess against the darker surface here, but light theme's deep tone
|
|
61
|
+
sits within a shade of the sidebar, so there it has to rise instead. */
|
|
62
|
+
--session-active-bg: var(--bg-deep);
|
|
63
|
+
--ansi-black: var(--text-muted);
|
|
64
|
+
--ansi-white: var(--text-secondary);
|
|
65
|
+
--ansi-bright-black: var(--text-tertiary);
|
|
66
|
+
--ansi-bright-white: var(--text-primary);
|
|
67
|
+
}
|
|
68
|
+
|
|
64
69
|
* {
|
|
65
70
|
box-sizing: border-box;
|
|
66
71
|
margin: 0;
|
|
@@ -114,8 +119,8 @@ body::before {
|
|
|
114
119
|
|
|
115
120
|
/* #region SIDEBAR */
|
|
116
121
|
.sidebar {
|
|
117
|
-
width: var(--sidebar-width,
|
|
118
|
-
background: var(--bg-surface);
|
|
122
|
+
width: var(--sidebar-width, 415px);
|
|
123
|
+
background: var(--sidebar-bg, var(--bg-surface));
|
|
119
124
|
border-right: 1px solid color-mix(in srgb, var(--border) 35%, transparent);
|
|
120
125
|
box-shadow: 1px 0 12px rgba(0, 0, 0, 0.04);
|
|
121
126
|
display: flex;
|
|
@@ -231,6 +236,37 @@ body::before {
|
|
|
231
236
|
display: none;
|
|
232
237
|
}
|
|
233
238
|
|
|
239
|
+
.new-session-pill {
|
|
240
|
+
margin-left: auto;
|
|
241
|
+
padding: 4px 10px;
|
|
242
|
+
font: inherit;
|
|
243
|
+
font-size: 11px;
|
|
244
|
+
font-weight: 500;
|
|
245
|
+
letter-spacing: 0.04em;
|
|
246
|
+
color: var(--text-secondary);
|
|
247
|
+
background: transparent;
|
|
248
|
+
border: 1px dashed color-mix(in srgb, var(--text-secondary) 40%, var(--border));
|
|
249
|
+
border-radius: 999px;
|
|
250
|
+
white-space: nowrap;
|
|
251
|
+
cursor: pointer;
|
|
252
|
+
transition:
|
|
253
|
+
color 0.2s ease,
|
|
254
|
+
border-color 0.2s ease,
|
|
255
|
+
background 0.2s ease;
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
.new-session-pill:hover,
|
|
259
|
+
.new-session-pill:focus-visible {
|
|
260
|
+
color: var(--accent-text);
|
|
261
|
+
border-color: var(--accent);
|
|
262
|
+
background: var(--accent-dim);
|
|
263
|
+
outline: none;
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
.sidebar.collapsed .new-session-pill {
|
|
267
|
+
display: none;
|
|
268
|
+
}
|
|
269
|
+
|
|
234
270
|
.sidebar-toggle-btn {
|
|
235
271
|
width: 28px;
|
|
236
272
|
height: 28px;
|
|
@@ -318,12 +354,52 @@ body::before {
|
|
|
318
354
|
border: 1px solid var(--border);
|
|
319
355
|
border-radius: 12px;
|
|
320
356
|
}
|
|
321
|
-
.
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
opacity: 0.4;
|
|
357
|
+
.clawd-sleep {
|
|
358
|
+
position: relative;
|
|
359
|
+
display: inline-block;
|
|
325
360
|
margin-bottom: 1.5rem;
|
|
326
361
|
}
|
|
362
|
+
|
|
363
|
+
.clawd-asleep {
|
|
364
|
+
display: block;
|
|
365
|
+
animation: clawd-breathe 3s ease-in-out infinite;
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
.clawd-zzz {
|
|
369
|
+
position: absolute;
|
|
370
|
+
top: -6px;
|
|
371
|
+
right: -14px;
|
|
372
|
+
color: var(--text-muted);
|
|
373
|
+
font: 600 13px var(--mono, monospace);
|
|
374
|
+
animation: clawd-zzz 3s ease-out infinite;
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
@keyframes clawd-breathe {
|
|
378
|
+
50% {
|
|
379
|
+
transform: scaleY(0.93);
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
@keyframes clawd-zzz {
|
|
384
|
+
from {
|
|
385
|
+
opacity: 0;
|
|
386
|
+
transform: translate(0, 6px);
|
|
387
|
+
}
|
|
388
|
+
30% {
|
|
389
|
+
opacity: 1;
|
|
390
|
+
}
|
|
391
|
+
to {
|
|
392
|
+
opacity: 0;
|
|
393
|
+
transform: translate(6px, -10px);
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
@media (prefers-reduced-motion: reduce) {
|
|
398
|
+
.clawd-asleep,
|
|
399
|
+
.clawd-zzz {
|
|
400
|
+
animation: none;
|
|
401
|
+
}
|
|
402
|
+
}
|
|
327
403
|
.offline-card h2 {
|
|
328
404
|
font-size: 1.15rem;
|
|
329
405
|
font-weight: 600;
|
|
@@ -571,7 +647,7 @@ body::before {
|
|
|
571
647
|
width: 100%;
|
|
572
648
|
padding: 13px 15px;
|
|
573
649
|
margin-bottom: 6px;
|
|
574
|
-
background: transparent;
|
|
650
|
+
background: var(--sidebar-item-bg, transparent);
|
|
575
651
|
border: 1px solid var(--border);
|
|
576
652
|
border-radius: 9px;
|
|
577
653
|
text-align: left;
|
|
@@ -579,6 +655,100 @@ body::before {
|
|
|
579
655
|
transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
|
|
580
656
|
}
|
|
581
657
|
|
|
658
|
+
.session-skeleton {
|
|
659
|
+
display: none;
|
|
660
|
+
flex-direction: column;
|
|
661
|
+
gap: 9px;
|
|
662
|
+
padding: 15px;
|
|
663
|
+
margin-bottom: 6px;
|
|
664
|
+
border: 1px solid var(--border);
|
|
665
|
+
border-radius: 9px;
|
|
666
|
+
}
|
|
667
|
+
|
|
668
|
+
body.booting .session-skeleton {
|
|
669
|
+
display: flex;
|
|
670
|
+
}
|
|
671
|
+
|
|
672
|
+
.session-skeleton span {
|
|
673
|
+
height: 9px;
|
|
674
|
+
width: 70%;
|
|
675
|
+
border-radius: 4px;
|
|
676
|
+
background: var(--border);
|
|
677
|
+
animation: breathe 1.4s ease-in-out infinite;
|
|
678
|
+
}
|
|
679
|
+
|
|
680
|
+
.session-skeleton span + span {
|
|
681
|
+
width: 40%;
|
|
682
|
+
}
|
|
683
|
+
|
|
684
|
+
body.booting #no-session {
|
|
685
|
+
display: none;
|
|
686
|
+
}
|
|
687
|
+
|
|
688
|
+
.boot-splash {
|
|
689
|
+
display: none;
|
|
690
|
+
flex: 1;
|
|
691
|
+
}
|
|
692
|
+
|
|
693
|
+
.boot-splash,
|
|
694
|
+
.terminal-boot {
|
|
695
|
+
flex-direction: column;
|
|
696
|
+
align-items: center;
|
|
697
|
+
justify-content: center;
|
|
698
|
+
gap: 14px;
|
|
699
|
+
color: var(--text-muted);
|
|
700
|
+
font-size: 12px;
|
|
701
|
+
}
|
|
702
|
+
|
|
703
|
+
body.booting .boot-splash {
|
|
704
|
+
display: flex;
|
|
705
|
+
animation: boot-fade 0.3s ease-out 0.15s both;
|
|
706
|
+
}
|
|
707
|
+
|
|
708
|
+
.clawd {
|
|
709
|
+
width: 64px;
|
|
710
|
+
height: 40px;
|
|
711
|
+
fill: #d97757;
|
|
712
|
+
overflow: visible;
|
|
713
|
+
transform-origin: 50% 100%;
|
|
714
|
+
}
|
|
715
|
+
|
|
716
|
+
.clawd-jump {
|
|
717
|
+
animation: clawd-jump 0.9s ease-in-out infinite;
|
|
718
|
+
}
|
|
719
|
+
|
|
720
|
+
@keyframes clawd-jump {
|
|
721
|
+
0%,
|
|
722
|
+
100% {
|
|
723
|
+
transform: translateY(0) scale(1, 1);
|
|
724
|
+
}
|
|
725
|
+
15% {
|
|
726
|
+
transform: translateY(0) scale(1.1, 0.85);
|
|
727
|
+
}
|
|
728
|
+
45% {
|
|
729
|
+
transform: translateY(-14px) scale(0.95, 1.05);
|
|
730
|
+
}
|
|
731
|
+
70% {
|
|
732
|
+
transform: translateY(0) scale(1.08, 0.9);
|
|
733
|
+
}
|
|
734
|
+
85% {
|
|
735
|
+
transform: translateY(0) scale(1, 1);
|
|
736
|
+
}
|
|
737
|
+
}
|
|
738
|
+
|
|
739
|
+
@keyframes boot-fade {
|
|
740
|
+
from {
|
|
741
|
+
opacity: 0;
|
|
742
|
+
}
|
|
743
|
+
}
|
|
744
|
+
|
|
745
|
+
@media (prefers-reduced-motion: reduce) {
|
|
746
|
+
.session-skeleton span,
|
|
747
|
+
.clawd-jump {
|
|
748
|
+
animation: none;
|
|
749
|
+
}
|
|
750
|
+
}
|
|
751
|
+
|
|
582
752
|
/* `.active` is the open session, `.kb-selected` the keyboard cursor. They own different
|
|
583
753
|
properties — fill and border — so the cursor landing on the open session adds to it
|
|
584
754
|
instead of replacing how it looks. */
|
|
@@ -586,8 +756,12 @@ body::before {
|
|
|
586
756
|
background: var(--session-active-bg);
|
|
587
757
|
}
|
|
588
758
|
|
|
589
|
-
.session-item.kb-selected
|
|
759
|
+
.session-item.kb-selected,
|
|
760
|
+
.terminal-prompt button:focus-visible {
|
|
590
761
|
border-color: var(--accent);
|
|
762
|
+
box-shadow:
|
|
763
|
+
inset 0 0 0 1px var(--accent),
|
|
764
|
+
0 0 10px var(--accent-glow);
|
|
591
765
|
}
|
|
592
766
|
|
|
593
767
|
.session-item.stale {
|
|
@@ -645,7 +819,10 @@ body::before {
|
|
|
645
819
|
padding-right: 22px;
|
|
646
820
|
}
|
|
647
821
|
|
|
648
|
-
.session-indicators .pulse
|
|
822
|
+
.session-indicators .pulse,
|
|
823
|
+
.wf-live-name .pulse,
|
|
824
|
+
.session-waiting .pulse {
|
|
825
|
+
flex: none;
|
|
649
826
|
width: 6px;
|
|
650
827
|
height: 6px;
|
|
651
828
|
background: var(--accent);
|
|
@@ -665,6 +842,19 @@ body::before {
|
|
|
665
842
|
}
|
|
666
843
|
}
|
|
667
844
|
|
|
845
|
+
.session-item.session-placeholder {
|
|
846
|
+
border-style: dashed;
|
|
847
|
+
}
|
|
848
|
+
|
|
849
|
+
.session-waiting {
|
|
850
|
+
display: flex;
|
|
851
|
+
align-items: center;
|
|
852
|
+
gap: 6px;
|
|
853
|
+
margin-top: var(--card-gap-tight);
|
|
854
|
+
font-size: 11px;
|
|
855
|
+
color: var(--text-muted);
|
|
856
|
+
}
|
|
857
|
+
|
|
668
858
|
.session-secondary {
|
|
669
859
|
font-size: 12px;
|
|
670
860
|
font-weight: 450;
|
|
@@ -769,7 +959,10 @@ body::before {
|
|
|
769
959
|
transition: width 0.5s ease-out;
|
|
770
960
|
}
|
|
771
961
|
|
|
772
|
-
|
|
962
|
+
/* The live-workflow bar takes the muted fill too: its card already carries a pulsing
|
|
963
|
+
accent dot, and a second accent bar under it shouts. */
|
|
964
|
+
.session-item:not(.active) .progress-fill,
|
|
965
|
+
.wf-live-bar .progress-fill {
|
|
773
966
|
background: color-mix(in srgb, var(--text-tertiary) 55%, transparent);
|
|
774
967
|
}
|
|
775
968
|
|
|
@@ -900,17 +1093,6 @@ body::before {
|
|
|
900
1093
|
gap: 3px 10px;
|
|
901
1094
|
}
|
|
902
1095
|
|
|
903
|
-
.zen-panel .linked-docs-section {
|
|
904
|
-
margin-top: 12px;
|
|
905
|
-
padding-top: 10px;
|
|
906
|
-
border-top: 1px solid var(--border);
|
|
907
|
-
}
|
|
908
|
-
|
|
909
|
-
.zen-panel .artifacts-section {
|
|
910
|
-
padding-top: 10px;
|
|
911
|
-
border-top: 1px solid var(--border);
|
|
912
|
-
}
|
|
913
|
-
|
|
914
1096
|
.zen-scratchpad {
|
|
915
1097
|
display: flex;
|
|
916
1098
|
align-items: center;
|
|
@@ -1920,7 +2102,8 @@ body::before {
|
|
|
1920
2102
|
.team-info-btn,
|
|
1921
2103
|
.plan-indicator,
|
|
1922
2104
|
.loop-badge,
|
|
1923
|
-
.workflow-badge
|
|
2105
|
+
.workflow-badge,
|
|
2106
|
+
.terminal-badge {
|
|
1924
2107
|
width: 18px;
|
|
1925
2108
|
height: 18px;
|
|
1926
2109
|
display: inline-flex;
|
|
@@ -2540,98 +2723,356 @@ body::before {
|
|
|
2540
2723
|
|
|
2541
2724
|
/* #endregion */
|
|
2542
2725
|
|
|
2543
|
-
/* #region
|
|
2544
|
-
.
|
|
2545
|
-
position:
|
|
2546
|
-
|
|
2547
|
-
right: 0;
|
|
2548
|
-
width: var(--message-panel-width, 540px);
|
|
2549
|
-
height: 100vh;
|
|
2550
|
-
background: var(--bg-deep);
|
|
2551
|
-
border-left: 1px solid color-mix(in srgb, var(--border) 35%, transparent);
|
|
2552
|
-
box-shadow: -1px 0 12px rgba(0, 0, 0, 0.04);
|
|
2726
|
+
/* #region TERMINAL */
|
|
2727
|
+
.terminal-pane {
|
|
2728
|
+
position: relative;
|
|
2729
|
+
flex: 1;
|
|
2553
2730
|
display: none;
|
|
2554
2731
|
flex-direction: column;
|
|
2555
|
-
|
|
2556
|
-
|
|
2732
|
+
min-height: 0;
|
|
2733
|
+
padding: 8px 12px 12px;
|
|
2734
|
+
gap: 6px;
|
|
2557
2735
|
}
|
|
2558
|
-
|
|
2559
|
-
|
|
2736
|
+
|
|
2737
|
+
.session-view.terminal-mode .kanban,
|
|
2738
|
+
.session-view.terminal-mode .agent-footer {
|
|
2739
|
+
display: none;
|
|
2560
2740
|
}
|
|
2561
|
-
|
|
2562
|
-
|
|
2741
|
+
|
|
2742
|
+
.session-view.terminal-mode .terminal-pane {
|
|
2743
|
+
display: flex;
|
|
2563
2744
|
}
|
|
2564
|
-
|
|
2565
|
-
|
|
2745
|
+
|
|
2746
|
+
.terminal-bar {
|
|
2566
2747
|
display: flex;
|
|
2567
2748
|
align-items: center;
|
|
2568
2749
|
justify-content: space-between;
|
|
2569
|
-
|
|
2570
|
-
|
|
2571
|
-
|
|
2572
|
-
|
|
2573
|
-
}
|
|
2574
|
-
.message-panel-header h3 {
|
|
2575
|
-
font-family: var(--serif);
|
|
2576
|
-
font-size: 14px;
|
|
2577
|
-
font-weight: 500;
|
|
2750
|
+
gap: 8px;
|
|
2751
|
+
font-family: var(--font-mono);
|
|
2752
|
+
font-size: 12px;
|
|
2753
|
+
color: var(--text-muted);
|
|
2578
2754
|
}
|
|
2579
|
-
|
|
2580
|
-
|
|
2581
|
-
|
|
2755
|
+
|
|
2756
|
+
.terminal-host {
|
|
2757
|
+
flex: 1;
|
|
2582
2758
|
min-height: 0;
|
|
2583
|
-
overflow
|
|
2584
|
-
|
|
2585
|
-
}
|
|
2586
|
-
.message-panel-content > * + * {
|
|
2587
|
-
margin-top: 8px;
|
|
2759
|
+
overflow: hidden;
|
|
2760
|
+
background: var(--bg-deep);
|
|
2588
2761
|
}
|
|
2589
|
-
|
|
2590
|
-
|
|
2591
|
-
|
|
2592
|
-
padding: 8px 10px;
|
|
2593
|
-
border-radius: 6px;
|
|
2594
|
-
font-size: 12px;
|
|
2595
|
-
line-height: 1.4;
|
|
2596
|
-
background: var(--bg-surface);
|
|
2597
|
-
border: 1px solid color-mix(in srgb, var(--border) 65%, transparent);
|
|
2762
|
+
|
|
2763
|
+
.terminal-pane:has(.terminal-prompt.visible) .xterm {
|
|
2764
|
+
visibility: hidden;
|
|
2598
2765
|
}
|
|
2599
|
-
|
|
2600
|
-
|
|
2766
|
+
|
|
2767
|
+
.terminal-host .xterm {
|
|
2768
|
+
height: 100%;
|
|
2601
2769
|
}
|
|
2602
|
-
|
|
2603
|
-
|
|
2604
|
-
|
|
2605
|
-
|
|
2606
|
-
font-size: 9px;
|
|
2607
|
-
letter-spacing: 0.06em;
|
|
2608
|
-
text-transform: uppercase;
|
|
2609
|
-
color: var(--gold);
|
|
2610
|
-
background: color-mix(in srgb, var(--gold) 14%, transparent);
|
|
2770
|
+
|
|
2771
|
+
/* xterm.css paints the viewport #000; it shows below the last row when the height is not a whole number of rows. */
|
|
2772
|
+
.terminal-host .xterm .xterm-viewport {
|
|
2773
|
+
background-color: var(--bg-deep);
|
|
2611
2774
|
}
|
|
2612
|
-
|
|
2613
|
-
|
|
2775
|
+
|
|
2776
|
+
.terminal-manager-modal {
|
|
2777
|
+
width: 90%;
|
|
2778
|
+
max-width: 720px;
|
|
2779
|
+
max-height: 85vh;
|
|
2780
|
+
display: flex;
|
|
2781
|
+
flex-direction: column;
|
|
2614
2782
|
}
|
|
2615
|
-
|
|
2616
|
-
|
|
2617
|
-
|
|
2618
|
-
|
|
2619
|
-
|
|
2783
|
+
|
|
2784
|
+
.terminal-manager-row {
|
|
2785
|
+
display: flex;
|
|
2786
|
+
align-items: center;
|
|
2787
|
+
gap: 14px;
|
|
2788
|
+
padding: 14px 4px;
|
|
2789
|
+
border-bottom: 1px solid var(--border);
|
|
2620
2790
|
}
|
|
2621
|
-
|
|
2622
|
-
.
|
|
2623
|
-
|
|
2624
|
-
box-shadow:
|
|
2625
|
-
0 0 0 1px var(--accent),
|
|
2626
|
-
0 0 12px var(--accent-dim);
|
|
2791
|
+
|
|
2792
|
+
.terminal-manager-row:last-child {
|
|
2793
|
+
border-bottom: none;
|
|
2627
2794
|
}
|
|
2628
|
-
|
|
2795
|
+
|
|
2796
|
+
.terminal-manager-dot {
|
|
2629
2797
|
flex-shrink: 0;
|
|
2630
|
-
width:
|
|
2631
|
-
height:
|
|
2632
|
-
|
|
2633
|
-
|
|
2634
|
-
}
|
|
2798
|
+
width: 8px;
|
|
2799
|
+
height: 8px;
|
|
2800
|
+
border-radius: 50%;
|
|
2801
|
+
border: 1.5px solid var(--text-muted);
|
|
2802
|
+
}
|
|
2803
|
+
|
|
2804
|
+
.terminal-manager-row.attached .terminal-manager-dot {
|
|
2805
|
+
border-color: var(--success);
|
|
2806
|
+
background: var(--success);
|
|
2807
|
+
}
|
|
2808
|
+
|
|
2809
|
+
.terminal-manager-info {
|
|
2810
|
+
flex: 1;
|
|
2811
|
+
min-width: 0;
|
|
2812
|
+
display: flex;
|
|
2813
|
+
flex-direction: column;
|
|
2814
|
+
gap: 4px;
|
|
2815
|
+
}
|
|
2816
|
+
|
|
2817
|
+
.terminal-manager-name {
|
|
2818
|
+
display: flex;
|
|
2819
|
+
align-items: baseline;
|
|
2820
|
+
gap: 8px;
|
|
2821
|
+
min-width: 0;
|
|
2822
|
+
font-size: 14px;
|
|
2823
|
+
font-weight: 600;
|
|
2824
|
+
color: var(--text-primary);
|
|
2825
|
+
}
|
|
2826
|
+
|
|
2827
|
+
.terminal-manager-title {
|
|
2828
|
+
overflow: hidden;
|
|
2829
|
+
text-overflow: ellipsis;
|
|
2830
|
+
white-space: nowrap;
|
|
2831
|
+
}
|
|
2832
|
+
|
|
2833
|
+
.terminal-manager-here {
|
|
2834
|
+
flex-shrink: 0;
|
|
2835
|
+
font-size: 12px;
|
|
2836
|
+
font-weight: 400;
|
|
2837
|
+
color: var(--text-muted);
|
|
2838
|
+
}
|
|
2839
|
+
|
|
2840
|
+
.terminal-manager-meta {
|
|
2841
|
+
display: flex;
|
|
2842
|
+
align-items: center;
|
|
2843
|
+
gap: 14px;
|
|
2844
|
+
min-width: 0;
|
|
2845
|
+
font-size: 12px;
|
|
2846
|
+
color: var(--text-muted);
|
|
2847
|
+
white-space: nowrap;
|
|
2848
|
+
}
|
|
2849
|
+
|
|
2850
|
+
.terminal-manager-mode {
|
|
2851
|
+
color: var(--text-secondary);
|
|
2852
|
+
}
|
|
2853
|
+
|
|
2854
|
+
.terminal-manager-cwd {
|
|
2855
|
+
overflow: hidden;
|
|
2856
|
+
text-overflow: ellipsis;
|
|
2857
|
+
}
|
|
2858
|
+
|
|
2859
|
+
.terminal-manager-actions {
|
|
2860
|
+
display: flex;
|
|
2861
|
+
gap: 8px;
|
|
2862
|
+
flex-shrink: 0;
|
|
2863
|
+
}
|
|
2864
|
+
|
|
2865
|
+
.terminal-manager-actions .btn,
|
|
2866
|
+
.terminal-manager-footer .btn {
|
|
2867
|
+
padding: 6px 14px;
|
|
2868
|
+
}
|
|
2869
|
+
|
|
2870
|
+
.terminal-manager-end.btn-secondary:hover {
|
|
2871
|
+
color: var(--danger);
|
|
2872
|
+
border-color: color-mix(in srgb, var(--danger) 50%, transparent);
|
|
2873
|
+
background: color-mix(in srgb, var(--danger) 8%, transparent);
|
|
2874
|
+
}
|
|
2875
|
+
|
|
2876
|
+
.terminal-manager-footer {
|
|
2877
|
+
align-items: center;
|
|
2878
|
+
justify-content: space-between;
|
|
2879
|
+
margin-top: 12px;
|
|
2880
|
+
border-top: 1px solid var(--border);
|
|
2881
|
+
}
|
|
2882
|
+
|
|
2883
|
+
.terminal-manager-count {
|
|
2884
|
+
font-size: 12px;
|
|
2885
|
+
color: var(--text-muted);
|
|
2886
|
+
}
|
|
2887
|
+
|
|
2888
|
+
.terminal-manager-empty {
|
|
2889
|
+
color: var(--text-muted);
|
|
2890
|
+
padding: 24px 0;
|
|
2891
|
+
text-align: center;
|
|
2892
|
+
}
|
|
2893
|
+
|
|
2894
|
+
.terminal-boot {
|
|
2895
|
+
display: none;
|
|
2896
|
+
position: absolute;
|
|
2897
|
+
z-index: 1;
|
|
2898
|
+
inset: 0;
|
|
2899
|
+
pointer-events: none;
|
|
2900
|
+
}
|
|
2901
|
+
|
|
2902
|
+
.terminal-boot.visible {
|
|
2903
|
+
display: flex;
|
|
2904
|
+
animation: boot-fade 0.3s ease-out 0.2s both;
|
|
2905
|
+
}
|
|
2906
|
+
|
|
2907
|
+
/* Opacity, not visibility: a hidden textarea drops focus, and the terminal must keep it. */
|
|
2908
|
+
.terminal-pane:has(.terminal-boot.visible) .xterm {
|
|
2909
|
+
opacity: 0;
|
|
2910
|
+
}
|
|
2911
|
+
|
|
2912
|
+
.terminal-prompt {
|
|
2913
|
+
display: none;
|
|
2914
|
+
position: absolute;
|
|
2915
|
+
z-index: 1;
|
|
2916
|
+
top: 50%;
|
|
2917
|
+
left: 50%;
|
|
2918
|
+
transform: translate(-50%, -50%);
|
|
2919
|
+
width: min(440px, calc(100% - 32px));
|
|
2920
|
+
flex-direction: column;
|
|
2921
|
+
align-items: center;
|
|
2922
|
+
gap: 16px;
|
|
2923
|
+
padding: 28px 28px 20px;
|
|
2924
|
+
text-align: center;
|
|
2925
|
+
border: 1px solid var(--border);
|
|
2926
|
+
border-radius: 12px;
|
|
2927
|
+
box-shadow: 0 12px 32px -12px rgba(0, 0, 0, 0.25);
|
|
2928
|
+
background: var(--bg-surface);
|
|
2929
|
+
color: var(--text-secondary);
|
|
2930
|
+
font-size: 13px;
|
|
2931
|
+
}
|
|
2932
|
+
|
|
2933
|
+
.terminal-prompt.visible {
|
|
2934
|
+
display: flex;
|
|
2935
|
+
}
|
|
2936
|
+
|
|
2937
|
+
.terminal-prompt-text {
|
|
2938
|
+
display: flex;
|
|
2939
|
+
flex-direction: column;
|
|
2940
|
+
gap: 4px;
|
|
2941
|
+
line-height: 1.5;
|
|
2942
|
+
}
|
|
2943
|
+
|
|
2944
|
+
.terminal-prompt-title {
|
|
2945
|
+
color: var(--text-primary);
|
|
2946
|
+
font-size: 15px;
|
|
2947
|
+
font-weight: 600;
|
|
2948
|
+
}
|
|
2949
|
+
|
|
2950
|
+
.terminal-prompt-actions {
|
|
2951
|
+
display: flex;
|
|
2952
|
+
justify-content: center;
|
|
2953
|
+
gap: 8px;
|
|
2954
|
+
flex-wrap: wrap;
|
|
2955
|
+
}
|
|
2956
|
+
|
|
2957
|
+
.terminal-prompt button:focus-visible {
|
|
2958
|
+
outline: none;
|
|
2959
|
+
}
|
|
2960
|
+
|
|
2961
|
+
.terminal-host:focus-within {
|
|
2962
|
+
box-shadow: inset 0 0 0 1px var(--accent);
|
|
2963
|
+
}
|
|
2964
|
+
|
|
2965
|
+
.terminal-prompt:has(.terminal-prompt-output) {
|
|
2966
|
+
width: min(640px, calc(100% - 32px));
|
|
2967
|
+
}
|
|
2968
|
+
|
|
2969
|
+
.terminal-prompt .terminal-prompt-output {
|
|
2970
|
+
align-self: stretch;
|
|
2971
|
+
max-height: 9.5em;
|
|
2972
|
+
overflow: auto;
|
|
2973
|
+
font-size: 12px;
|
|
2974
|
+
text-align: left;
|
|
2975
|
+
white-space: pre;
|
|
2976
|
+
}
|
|
2977
|
+
|
|
2978
|
+
#terminal-toggle.active {
|
|
2979
|
+
color: var(--accent);
|
|
2980
|
+
}
|
|
2981
|
+
|
|
2982
|
+
/* #endregion */
|
|
2983
|
+
|
|
2984
|
+
/* #region MESSAGE_PANEL */
|
|
2985
|
+
.message-panel {
|
|
2986
|
+
position: fixed;
|
|
2987
|
+
top: 0;
|
|
2988
|
+
right: 0;
|
|
2989
|
+
width: var(--message-panel-width, 540px);
|
|
2990
|
+
height: 100vh;
|
|
2991
|
+
background: var(--bg-deep);
|
|
2992
|
+
border-left: 1px solid color-mix(in srgb, var(--border) 35%, transparent);
|
|
2993
|
+
box-shadow: -1px 0 12px rgba(0, 0, 0, 0.04);
|
|
2994
|
+
display: none;
|
|
2995
|
+
flex-direction: column;
|
|
2996
|
+
z-index: 99;
|
|
2997
|
+
overflow: hidden;
|
|
2998
|
+
}
|
|
2999
|
+
.message-panel.visible {
|
|
3000
|
+
display: flex;
|
|
3001
|
+
}
|
|
3002
|
+
.message-panel.msg-expanded-wide {
|
|
3003
|
+
width: 60vw;
|
|
3004
|
+
}
|
|
3005
|
+
.message-panel-header {
|
|
3006
|
+
padding: 16px 20px;
|
|
3007
|
+
display: flex;
|
|
3008
|
+
align-items: center;
|
|
3009
|
+
justify-content: space-between;
|
|
3010
|
+
background-image: linear-gradient(to right, transparent, var(--border), transparent);
|
|
3011
|
+
background-size: 100% 1px;
|
|
3012
|
+
background-repeat: no-repeat;
|
|
3013
|
+
background-position: bottom;
|
|
3014
|
+
}
|
|
3015
|
+
.message-panel-header h3 {
|
|
3016
|
+
font-family: var(--serif);
|
|
3017
|
+
font-size: 14px;
|
|
3018
|
+
font-weight: 500;
|
|
3019
|
+
}
|
|
3020
|
+
.message-panel-content {
|
|
3021
|
+
flex: 1 1 0;
|
|
3022
|
+
height: 0;
|
|
3023
|
+
min-height: 0;
|
|
3024
|
+
overflow-y: auto;
|
|
3025
|
+
padding: 12px 16px;
|
|
3026
|
+
}
|
|
3027
|
+
.message-panel-content > * + * {
|
|
3028
|
+
margin-top: 8px;
|
|
3029
|
+
}
|
|
3030
|
+
.msg-item {
|
|
3031
|
+
display: flex;
|
|
3032
|
+
gap: 8px;
|
|
3033
|
+
padding: 8px 10px;
|
|
3034
|
+
border-radius: 6px;
|
|
3035
|
+
font-size: 12px;
|
|
3036
|
+
line-height: 1.4;
|
|
3037
|
+
background: var(--bg-surface);
|
|
3038
|
+
border: 1px solid color-mix(in srgb, var(--border) 65%, transparent);
|
|
3039
|
+
}
|
|
3040
|
+
.msg-item.msg-user {
|
|
3041
|
+
border-left: 3px solid var(--gold);
|
|
3042
|
+
}
|
|
3043
|
+
.msg-queued-tag {
|
|
3044
|
+
margin-left: 8px;
|
|
3045
|
+
padding: 0 5px;
|
|
3046
|
+
border-radius: 3px;
|
|
3047
|
+
font-size: 9px;
|
|
3048
|
+
letter-spacing: 0.06em;
|
|
3049
|
+
text-transform: uppercase;
|
|
3050
|
+
color: var(--gold);
|
|
3051
|
+
background: color-mix(in srgb, var(--gold) 14%, transparent);
|
|
3052
|
+
}
|
|
3053
|
+
.msg-item.msg-assistant {
|
|
3054
|
+
border-left: 3px solid var(--accent);
|
|
3055
|
+
}
|
|
3056
|
+
.msg-item.msg-tool {
|
|
3057
|
+
border-left: 2px solid color-mix(in srgb, var(--text-muted) 45%, transparent);
|
|
3058
|
+
font-size: 11px;
|
|
3059
|
+
padding: 5px 10px;
|
|
3060
|
+
color: var(--text-secondary);
|
|
3061
|
+
}
|
|
3062
|
+
.msg-item.selected,
|
|
3063
|
+
.msg-item.selected:hover {
|
|
3064
|
+
background: var(--bg-elevated);
|
|
3065
|
+
box-shadow:
|
|
3066
|
+
0 0 0 1px var(--accent),
|
|
3067
|
+
0 0 12px var(--accent-dim);
|
|
3068
|
+
}
|
|
3069
|
+
.msg-icon {
|
|
3070
|
+
flex-shrink: 0;
|
|
3071
|
+
width: 16px;
|
|
3072
|
+
height: 16px;
|
|
3073
|
+
margin-top: 2px;
|
|
3074
|
+
opacity: 0.9;
|
|
3075
|
+
}
|
|
2635
3076
|
.msg-body {
|
|
2636
3077
|
flex: 1;
|
|
2637
3078
|
min-width: 0;
|
|
@@ -3057,6 +3498,10 @@ body::before {
|
|
|
3057
3498
|
font-family: var(--font-mono);
|
|
3058
3499
|
font-size: 0.85rem;
|
|
3059
3500
|
}
|
|
3501
|
+
.msg-detail-pre code.hljs {
|
|
3502
|
+
background: transparent;
|
|
3503
|
+
padding: 0;
|
|
3504
|
+
}
|
|
3060
3505
|
.msg-detail-pre-tinted {
|
|
3061
3506
|
background: color-mix(in srgb, var(--text-muted) 8%, transparent);
|
|
3062
3507
|
border: 1px solid color-mix(in srgb, var(--border) 55%, transparent);
|
|
@@ -3861,6 +4306,12 @@ body::before {
|
|
|
3861
4306
|
flex-shrink: 0;
|
|
3862
4307
|
color: var(--text-secondary);
|
|
3863
4308
|
}
|
|
4309
|
+
.terminal-badge {
|
|
4310
|
+
color: var(--text-secondary);
|
|
4311
|
+
}
|
|
4312
|
+
.terminal-badge:hover {
|
|
4313
|
+
color: var(--accent, var(--text-primary));
|
|
4314
|
+
}
|
|
3864
4315
|
.agent-badge-waiting {
|
|
3865
4316
|
color: var(--warning);
|
|
3866
4317
|
animation: agent-badge-pulse 1.6s ease-in-out infinite;
|
|
@@ -3904,6 +4355,7 @@ body::before {
|
|
|
3904
4355
|
}
|
|
3905
4356
|
|
|
3906
4357
|
.linked-doc-list,
|
|
4358
|
+
.scratch-file-list,
|
|
3907
4359
|
.artifact-list {
|
|
3908
4360
|
list-style: none;
|
|
3909
4361
|
padding: 0;
|
|
@@ -3914,6 +4366,7 @@ body::before {
|
|
|
3914
4366
|
}
|
|
3915
4367
|
|
|
3916
4368
|
.linked-doc-item,
|
|
4369
|
+
.scratch-file-item,
|
|
3917
4370
|
.artifact-item {
|
|
3918
4371
|
display: flex;
|
|
3919
4372
|
align-items: baseline;
|
|
@@ -3922,11 +4375,16 @@ body::before {
|
|
|
3922
4375
|
}
|
|
3923
4376
|
|
|
3924
4377
|
.linked-doc-link,
|
|
4378
|
+
.scratch-file-link,
|
|
3925
4379
|
.artifact-link {
|
|
3926
4380
|
color: var(--accent-text);
|
|
3927
4381
|
text-decoration: underline;
|
|
3928
4382
|
text-decoration-style: dotted;
|
|
3929
4383
|
text-underline-offset: 3px;
|
|
4384
|
+
}
|
|
4385
|
+
|
|
4386
|
+
.linked-doc-link,
|
|
4387
|
+
.artifact-link {
|
|
3930
4388
|
flex-shrink: 0;
|
|
3931
4389
|
}
|
|
3932
4390
|
|
|
@@ -3940,51 +4398,209 @@ body::before {
|
|
|
3940
4398
|
min-width: 0;
|
|
3941
4399
|
}
|
|
3942
4400
|
|
|
4401
|
+
.scratch-file-time {
|
|
4402
|
+
color: var(--text-muted);
|
|
4403
|
+
font-size: 11px;
|
|
4404
|
+
opacity: 0.7;
|
|
4405
|
+
white-space: nowrap;
|
|
4406
|
+
flex-shrink: 0;
|
|
4407
|
+
}
|
|
4408
|
+
|
|
3943
4409
|
/* Rides on the shared .row-actions group; only the reveal trigger differs — per row
|
|
3944
4410
|
here, per grid in the session info. margin-left:auto pins the group to the same
|
|
3945
4411
|
right edge however long the names in between are. */
|
|
3946
4412
|
.linked-doc-actions,
|
|
4413
|
+
.scratch-file-actions,
|
|
3947
4414
|
.artifact-actions {
|
|
3948
4415
|
margin-left: auto;
|
|
3949
4416
|
align-self: center;
|
|
3950
4417
|
flex-shrink: 0;
|
|
4418
|
+
/* Two .row-actions buttons wide (22px each, 4px gap), filled from the left, so a
|
|
4419
|
+
row with one action puts it in the same column as the rows that have two. */
|
|
4420
|
+
min-width: 48px;
|
|
4421
|
+
justify-content: flex-start;
|
|
3951
4422
|
}
|
|
3952
4423
|
|
|
3953
4424
|
.linked-doc-item:hover .linked-doc-actions,
|
|
4425
|
+
.scratch-file-item:hover .scratch-file-actions,
|
|
3954
4426
|
.artifact-item:hover .artifact-actions {
|
|
3955
4427
|
opacity: 1;
|
|
3956
4428
|
}
|
|
3957
4429
|
|
|
3958
|
-
/*
|
|
3959
|
-
.
|
|
3960
|
-
|
|
3961
|
-
font-size:
|
|
3962
|
-
|
|
4430
|
+
/* Hangs off the Scratchpad path row, so it carries no header of its own. */
|
|
4431
|
+
.scratch-files-section {
|
|
4432
|
+
margin-top: 6px;
|
|
4433
|
+
font-size: 11px;
|
|
4434
|
+
}
|
|
4435
|
+
|
|
4436
|
+
.scratch-file-link {
|
|
4437
|
+
background: none;
|
|
4438
|
+
border: none;
|
|
4439
|
+
padding: 0;
|
|
4440
|
+
font: inherit;
|
|
4441
|
+
cursor: pointer;
|
|
4442
|
+
text-align: left;
|
|
4443
|
+
/* A scratch name can be longer than the zen panel is wide; without this it pushes
|
|
4444
|
+
the action buttons out of their column. The full path is on the title. */
|
|
4445
|
+
min-width: 0;
|
|
4446
|
+
overflow: hidden;
|
|
4447
|
+
text-overflow: ellipsis;
|
|
4448
|
+
white-space: nowrap;
|
|
4449
|
+
}
|
|
4450
|
+
|
|
4451
|
+
.scratch-files-more {
|
|
4452
|
+
margin: 6px 0 0;
|
|
4453
|
+
font-size: 11px;
|
|
4454
|
+
}
|
|
4455
|
+
|
|
4456
|
+
/* A folder row wraps so its child list lands on its own full-width line under the
|
|
4457
|
+
name, indented one chevron in. */
|
|
4458
|
+
.scratch-folder-item {
|
|
4459
|
+
flex-wrap: wrap;
|
|
4460
|
+
}
|
|
4461
|
+
|
|
4462
|
+
.scratch-folder-item > .scratch-file-list,
|
|
4463
|
+
.scratch-folder-item > .scratch-folder-empty {
|
|
4464
|
+
flex-basis: 100%;
|
|
4465
|
+
margin-top: 4px;
|
|
4466
|
+
padding-left: 14px;
|
|
4467
|
+
}
|
|
4468
|
+
|
|
4469
|
+
.scratch-folder-empty {
|
|
4470
|
+
color: var(--text-muted);
|
|
4471
|
+
opacity: 0.7;
|
|
4472
|
+
}
|
|
4473
|
+
|
|
4474
|
+
.scratch-folder-toggle {
|
|
4475
|
+
display: inline-flex;
|
|
4476
|
+
align-items: center;
|
|
4477
|
+
gap: 4px;
|
|
4478
|
+
text-decoration: none;
|
|
4479
|
+
color: var(--text-secondary);
|
|
4480
|
+
}
|
|
4481
|
+
|
|
4482
|
+
/* The × is a glyph, not an svg, so .row-actions button svg does not size it. */
|
|
4483
|
+
.linked-doc-remove {
|
|
4484
|
+
font-family: var(--mono);
|
|
4485
|
+
font-size: 15px;
|
|
4486
|
+
line-height: 1;
|
|
4487
|
+
}
|
|
4488
|
+
|
|
4489
|
+
.linked-doc-actions .linked-doc-remove:hover {
|
|
4490
|
+
background: var(--danger-dim);
|
|
4491
|
+
border-color: var(--danger);
|
|
4492
|
+
color: var(--danger);
|
|
4493
|
+
}
|
|
4494
|
+
|
|
4495
|
+
/* A linked file the previewer can't render opens in the editor — the dashed
|
|
4496
|
+
underline keeps that different destination visible before the click. */
|
|
4497
|
+
.linked-doc-item.is-editor .linked-doc-link {
|
|
4498
|
+
color: var(--text-secondary);
|
|
4499
|
+
text-decoration-style: dashed;
|
|
4500
|
+
}
|
|
4501
|
+
|
|
4502
|
+
/* A section of the session panel: linked documents, artifacts. */
|
|
4503
|
+
.panel-section {
|
|
4504
|
+
margin-bottom: 16px;
|
|
4505
|
+
padding-top: 10px;
|
|
4506
|
+
border-top: 1px solid var(--border);
|
|
4507
|
+
font-size: 11px;
|
|
4508
|
+
}
|
|
4509
|
+
|
|
4510
|
+
.linked-docs-section {
|
|
4511
|
+
margin-top: 12px;
|
|
4512
|
+
}
|
|
4513
|
+
|
|
4514
|
+
/* Artifacts are read out of the transcript, so the section renders before the
|
|
4515
|
+
list arrives and stays in the DOM as the patch target when there is none. */
|
|
4516
|
+
.artifacts-section:empty,
|
|
4517
|
+
.scratch-files-section:empty,
|
|
4518
|
+
.workflow-live-section:empty {
|
|
4519
|
+
display: none;
|
|
4520
|
+
}
|
|
4521
|
+
|
|
4522
|
+
/* Its own card below the zen panel — the run is live state, not session detail, so it
|
|
4523
|
+
comes and goes on its own while the panel above stays put. */
|
|
4524
|
+
.workflow-live-section {
|
|
4525
|
+
margin-top: 10px;
|
|
4526
|
+
padding: 10px;
|
|
4527
|
+
background: var(--bg-elevated);
|
|
4528
|
+
border: 1px solid var(--border);
|
|
4529
|
+
border-radius: 8px;
|
|
4530
|
+
font-size: 11px;
|
|
4531
|
+
}
|
|
4532
|
+
|
|
4533
|
+
.wf-live {
|
|
4534
|
+
cursor: pointer;
|
|
4535
|
+
}
|
|
4536
|
+
|
|
4537
|
+
.wf-live-name {
|
|
4538
|
+
display: flex;
|
|
4539
|
+
align-items: center;
|
|
4540
|
+
gap: 6px;
|
|
4541
|
+
font-size: 12px;
|
|
4542
|
+
font-weight: 500;
|
|
4543
|
+
color: var(--text-primary);
|
|
4544
|
+
overflow: hidden;
|
|
4545
|
+
text-overflow: ellipsis;
|
|
4546
|
+
white-space: nowrap;
|
|
4547
|
+
}
|
|
4548
|
+
|
|
4549
|
+
.wf-live-bar {
|
|
4550
|
+
margin: 6px 0;
|
|
4551
|
+
}
|
|
4552
|
+
|
|
4553
|
+
.wf-live-phases {
|
|
4554
|
+
display: flex;
|
|
4555
|
+
flex-wrap: wrap;
|
|
4556
|
+
gap: 4px;
|
|
4557
|
+
}
|
|
4558
|
+
|
|
4559
|
+
/* A phase reads as one chip, so the dot goes in ::before rather than costing a span. */
|
|
4560
|
+
.wf-live-phase {
|
|
4561
|
+
display: flex;
|
|
4562
|
+
align-items: center;
|
|
4563
|
+
gap: 4px;
|
|
4564
|
+
padding: 1px 6px;
|
|
4565
|
+
border: 1px solid var(--border);
|
|
4566
|
+
border-radius: 10px;
|
|
4567
|
+
font-size: 10px;
|
|
4568
|
+
color: var(--text-secondary);
|
|
4569
|
+
}
|
|
4570
|
+
|
|
4571
|
+
.wf-live-phase::before {
|
|
4572
|
+
content: '';
|
|
4573
|
+
width: 5px;
|
|
4574
|
+
height: 5px;
|
|
4575
|
+
border-radius: 50%;
|
|
4576
|
+
background: var(--text-muted);
|
|
4577
|
+
}
|
|
4578
|
+
|
|
4579
|
+
.wf-live-phase.running::before {
|
|
4580
|
+
background: var(--accent);
|
|
4581
|
+
animation: pulse 2s ease-in-out infinite;
|
|
3963
4582
|
}
|
|
3964
4583
|
|
|
3965
|
-
.
|
|
3966
|
-
background: var(--
|
|
3967
|
-
border-color: var(--danger);
|
|
3968
|
-
color: var(--danger);
|
|
4584
|
+
.wf-live-phase.done::before {
|
|
4585
|
+
background: var(--ok, #3fb950);
|
|
3969
4586
|
}
|
|
3970
4587
|
|
|
3971
|
-
|
|
3972
|
-
|
|
3973
|
-
.linked-doc-item.is-editor .linked-doc-link {
|
|
3974
|
-
color: var(--text-secondary);
|
|
3975
|
-
text-decoration-style: dashed;
|
|
4588
|
+
.wf-live-phase.done {
|
|
4589
|
+
color: var(--text-muted);
|
|
3976
4590
|
}
|
|
3977
4591
|
|
|
3978
|
-
|
|
3979
|
-
|
|
3980
|
-
margin-bottom: 16px;
|
|
3981
|
-
font-size: 12px;
|
|
4592
|
+
.wf-live-phase-count {
|
|
4593
|
+
font-family: var(--font-mono);
|
|
3982
4594
|
}
|
|
3983
4595
|
|
|
3984
|
-
|
|
3985
|
-
|
|
3986
|
-
|
|
3987
|
-
|
|
4596
|
+
.wf-live-running {
|
|
4597
|
+
margin-top: 6px;
|
|
4598
|
+
overflow: hidden;
|
|
4599
|
+
text-overflow: ellipsis;
|
|
4600
|
+
white-space: nowrap;
|
|
4601
|
+
font-family: var(--font-mono);
|
|
4602
|
+
font-size: 10px;
|
|
4603
|
+
color: var(--text-muted);
|
|
3988
4604
|
}
|
|
3989
4605
|
|
|
3990
4606
|
.panel-section-header {
|
|
@@ -4266,7 +4882,7 @@ body.light {
|
|
|
4266
4882
|
--text-secondary: #444444;
|
|
4267
4883
|
--text-tertiary: #666666;
|
|
4268
4884
|
--text-muted: #888888;
|
|
4269
|
-
--accent-text: #
|
|
4885
|
+
--accent-text: #a0501c;
|
|
4270
4886
|
--accent-dim: rgba(232, 111, 51, 0.18);
|
|
4271
4887
|
--accent-glow: rgba(232, 111, 51, 0.5);
|
|
4272
4888
|
--gold: #a8842f;
|
|
@@ -4337,7 +4953,7 @@ body.light .msg-assistant .msg-text {
|
|
|
4337
4953
|
.search-input {
|
|
4338
4954
|
width: 100%;
|
|
4339
4955
|
padding: 9px 32px 9px 12px;
|
|
4340
|
-
background: var(--bg-deep);
|
|
4956
|
+
background: var(--sidebar-item-bg, var(--bg-deep));
|
|
4341
4957
|
border: 1px solid transparent;
|
|
4342
4958
|
border-radius: 6px;
|
|
4343
4959
|
color: var(--text-primary);
|
|
@@ -4555,6 +5171,16 @@ body.light .msg-assistant .msg-text {
|
|
|
4555
5171
|
padding-right: 8px;
|
|
4556
5172
|
}
|
|
4557
5173
|
|
|
5174
|
+
#preview-modal-body .preview-image {
|
|
5175
|
+
display: block;
|
|
5176
|
+
max-width: 100%;
|
|
5177
|
+
max-height: 70vh;
|
|
5178
|
+
margin: 0 auto;
|
|
5179
|
+
border: 1px solid var(--border);
|
|
5180
|
+
border-radius: 4px;
|
|
5181
|
+
background: var(--bg-hover);
|
|
5182
|
+
}
|
|
5183
|
+
|
|
4558
5184
|
#preview-modal-meta {
|
|
4559
5185
|
margin-top: 12px;
|
|
4560
5186
|
font-size: 11px;
|
|
@@ -4598,6 +5224,29 @@ body.light .msg-assistant .msg-text {
|
|
|
4598
5224
|
padding-right: 0;
|
|
4599
5225
|
}
|
|
4600
5226
|
|
|
5227
|
+
/* Source is read line by line, so it keeps its own line breaks and scrolls sideways
|
|
5228
|
+
instead of inheriting the body's `word-break: break-word`. */
|
|
5229
|
+
.preview-source {
|
|
5230
|
+
margin: 0;
|
|
5231
|
+
padding: 10px 12px;
|
|
5232
|
+
background: var(--bg-elevated);
|
|
5233
|
+
border: 1px solid var(--border);
|
|
5234
|
+
border-radius: 6px;
|
|
5235
|
+
overflow-x: auto;
|
|
5236
|
+
font-family: var(--mono);
|
|
5237
|
+
font-size: 12px;
|
|
5238
|
+
line-height: 1.55;
|
|
5239
|
+
white-space: pre;
|
|
5240
|
+
word-break: normal;
|
|
5241
|
+
tab-size: 4;
|
|
5242
|
+
}
|
|
5243
|
+
|
|
5244
|
+
.preview-source code {
|
|
5245
|
+
background: none;
|
|
5246
|
+
padding: 0;
|
|
5247
|
+
font: inherit;
|
|
5248
|
+
}
|
|
5249
|
+
|
|
4601
5250
|
.preview-html-frame {
|
|
4602
5251
|
width: 100%;
|
|
4603
5252
|
height: 100%;
|
|
@@ -5150,6 +5799,232 @@ select.form-input option:checked {
|
|
|
5150
5799
|
|
|
5151
5800
|
/* #endregion */
|
|
5152
5801
|
|
|
5802
|
+
/* #region NEW_SESSION */
|
|
5803
|
+
.modal.new-session-modal {
|
|
5804
|
+
width: 520px;
|
|
5805
|
+
max-width: calc(100vw - 32px);
|
|
5806
|
+
overflow: visible;
|
|
5807
|
+
}
|
|
5808
|
+
|
|
5809
|
+
.ns-body {
|
|
5810
|
+
display: flex;
|
|
5811
|
+
flex-direction: column;
|
|
5812
|
+
gap: 12px;
|
|
5813
|
+
overflow: visible;
|
|
5814
|
+
}
|
|
5815
|
+
|
|
5816
|
+
.ns-row {
|
|
5817
|
+
display: grid;
|
|
5818
|
+
grid-template-columns: 86px minmax(0, 1fr);
|
|
5819
|
+
align-items: start;
|
|
5820
|
+
gap: 12px;
|
|
5821
|
+
}
|
|
5822
|
+
|
|
5823
|
+
.new-session-modal.ns-resume .ns-extra {
|
|
5824
|
+
display: none;
|
|
5825
|
+
}
|
|
5826
|
+
|
|
5827
|
+
.ns-label {
|
|
5828
|
+
padding-top: 9px;
|
|
5829
|
+
font-size: 12px;
|
|
5830
|
+
font-weight: 500;
|
|
5831
|
+
color: var(--text-secondary);
|
|
5832
|
+
}
|
|
5833
|
+
|
|
5834
|
+
.ns-body .form-input {
|
|
5835
|
+
padding: 8px 10px;
|
|
5836
|
+
font-size: 13px;
|
|
5837
|
+
}
|
|
5838
|
+
|
|
5839
|
+
.ns-inline {
|
|
5840
|
+
display: flex;
|
|
5841
|
+
align-items: center;
|
|
5842
|
+
gap: 8px;
|
|
5843
|
+
}
|
|
5844
|
+
|
|
5845
|
+
.ns-inline .form-input {
|
|
5846
|
+
flex: 1;
|
|
5847
|
+
min-width: 0;
|
|
5848
|
+
}
|
|
5849
|
+
|
|
5850
|
+
.ns-body .btn.ns-browse {
|
|
5851
|
+
flex: none;
|
|
5852
|
+
padding: 8px 12px;
|
|
5853
|
+
}
|
|
5854
|
+
|
|
5855
|
+
.ns-folder-field {
|
|
5856
|
+
position: relative;
|
|
5857
|
+
}
|
|
5858
|
+
|
|
5859
|
+
.ns-dropdown {
|
|
5860
|
+
position: absolute;
|
|
5861
|
+
top: calc(100% + 4px);
|
|
5862
|
+
left: 0;
|
|
5863
|
+
right: 0;
|
|
5864
|
+
z-index: 2;
|
|
5865
|
+
max-height: 280px;
|
|
5866
|
+
overflow-y: auto;
|
|
5867
|
+
padding: 4px;
|
|
5868
|
+
background: var(--bg-surface);
|
|
5869
|
+
border: 1px solid var(--border);
|
|
5870
|
+
border-radius: 6px;
|
|
5871
|
+
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.18);
|
|
5872
|
+
}
|
|
5873
|
+
|
|
5874
|
+
.ns-option {
|
|
5875
|
+
display: flex;
|
|
5876
|
+
align-items: baseline;
|
|
5877
|
+
gap: 8px;
|
|
5878
|
+
padding: 6px 8px;
|
|
5879
|
+
border-radius: 4px;
|
|
5880
|
+
cursor: pointer;
|
|
5881
|
+
font-size: 12px;
|
|
5882
|
+
}
|
|
5883
|
+
|
|
5884
|
+
.ns-option:hover,
|
|
5885
|
+
.ns-option.active {
|
|
5886
|
+
background: var(--bg-hover);
|
|
5887
|
+
}
|
|
5888
|
+
|
|
5889
|
+
.ns-option.active {
|
|
5890
|
+
box-shadow: inset 2px 0 0 var(--accent);
|
|
5891
|
+
}
|
|
5892
|
+
|
|
5893
|
+
.ns-option-name {
|
|
5894
|
+
flex: none;
|
|
5895
|
+
font-weight: 500;
|
|
5896
|
+
color: var(--text-primary);
|
|
5897
|
+
}
|
|
5898
|
+
|
|
5899
|
+
.ns-option-path {
|
|
5900
|
+
min-width: 0;
|
|
5901
|
+
overflow: hidden;
|
|
5902
|
+
text-overflow: ellipsis;
|
|
5903
|
+
white-space: nowrap;
|
|
5904
|
+
font-family: var(--mono);
|
|
5905
|
+
font-size: 11px;
|
|
5906
|
+
color: var(--text-muted);
|
|
5907
|
+
}
|
|
5908
|
+
|
|
5909
|
+
.ns-empty {
|
|
5910
|
+
display: flex;
|
|
5911
|
+
align-items: center;
|
|
5912
|
+
justify-content: space-between;
|
|
5913
|
+
gap: 8px;
|
|
5914
|
+
padding: 6px 8px;
|
|
5915
|
+
font-size: 12px;
|
|
5916
|
+
color: var(--text-muted);
|
|
5917
|
+
}
|
|
5918
|
+
|
|
5919
|
+
.ns-check {
|
|
5920
|
+
display: inline-flex;
|
|
5921
|
+
flex: none;
|
|
5922
|
+
align-items: center;
|
|
5923
|
+
gap: 6px;
|
|
5924
|
+
font-size: 12px;
|
|
5925
|
+
color: var(--text-primary);
|
|
5926
|
+
cursor: pointer;
|
|
5927
|
+
}
|
|
5928
|
+
|
|
5929
|
+
.ns-check input {
|
|
5930
|
+
accent-color: var(--accent);
|
|
5931
|
+
}
|
|
5932
|
+
|
|
5933
|
+
.ns-inline .form-input:disabled {
|
|
5934
|
+
opacity: 0.5;
|
|
5935
|
+
cursor: not-allowed;
|
|
5936
|
+
}
|
|
5937
|
+
|
|
5938
|
+
.ns-hint {
|
|
5939
|
+
margin-top: 4px;
|
|
5940
|
+
font-family: var(--mono);
|
|
5941
|
+
font-size: 11px;
|
|
5942
|
+
color: var(--text-muted);
|
|
5943
|
+
}
|
|
5944
|
+
|
|
5945
|
+
.ns-body textarea.form-input {
|
|
5946
|
+
min-height: 0;
|
|
5947
|
+
}
|
|
5948
|
+
|
|
5949
|
+
.ns-prompt-field {
|
|
5950
|
+
position: relative;
|
|
5951
|
+
}
|
|
5952
|
+
|
|
5953
|
+
.ns-prompt-field:has(.ns-mic:not([hidden])) textarea {
|
|
5954
|
+
padding-right: 36px;
|
|
5955
|
+
}
|
|
5956
|
+
|
|
5957
|
+
.ns-mic {
|
|
5958
|
+
position: absolute;
|
|
5959
|
+
top: 6px;
|
|
5960
|
+
right: 6px;
|
|
5961
|
+
display: flex;
|
|
5962
|
+
align-items: center;
|
|
5963
|
+
justify-content: center;
|
|
5964
|
+
width: 26px;
|
|
5965
|
+
height: 26px;
|
|
5966
|
+
padding: 0;
|
|
5967
|
+
color: var(--text-muted);
|
|
5968
|
+
background: transparent;
|
|
5969
|
+
border: none;
|
|
5970
|
+
border-radius: 4px;
|
|
5971
|
+
cursor: pointer;
|
|
5972
|
+
}
|
|
5973
|
+
|
|
5974
|
+
.ns-mic[hidden] {
|
|
5975
|
+
display: none;
|
|
5976
|
+
}
|
|
5977
|
+
|
|
5978
|
+
.ns-mic svg {
|
|
5979
|
+
width: 15px;
|
|
5980
|
+
height: 15px;
|
|
5981
|
+
}
|
|
5982
|
+
|
|
5983
|
+
.ns-mic:hover {
|
|
5984
|
+
color: var(--text-primary);
|
|
5985
|
+
background: var(--bg-hover);
|
|
5986
|
+
}
|
|
5987
|
+
|
|
5988
|
+
.ns-mic[aria-pressed='true'] {
|
|
5989
|
+
color: var(--danger);
|
|
5990
|
+
animation: ns-mic-pulse 1.2s ease-in-out infinite;
|
|
5991
|
+
}
|
|
5992
|
+
|
|
5993
|
+
@keyframes ns-mic-pulse {
|
|
5994
|
+
50% {
|
|
5995
|
+
opacity: 0.45;
|
|
5996
|
+
}
|
|
5997
|
+
}
|
|
5998
|
+
|
|
5999
|
+
@media (prefers-reduced-motion: reduce) {
|
|
6000
|
+
.ns-mic[aria-pressed='true'] {
|
|
6001
|
+
animation: none;
|
|
6002
|
+
}
|
|
6003
|
+
}
|
|
6004
|
+
|
|
6005
|
+
.ns-error {
|
|
6006
|
+
font-size: 12px;
|
|
6007
|
+
color: var(--danger);
|
|
6008
|
+
}
|
|
6009
|
+
|
|
6010
|
+
.ns-footer {
|
|
6011
|
+
align-items: center;
|
|
6012
|
+
}
|
|
6013
|
+
|
|
6014
|
+
.ns-footer .btn-primary:disabled {
|
|
6015
|
+
opacity: 0.5;
|
|
6016
|
+
cursor: not-allowed;
|
|
6017
|
+
transform: none;
|
|
6018
|
+
box-shadow: none;
|
|
6019
|
+
}
|
|
6020
|
+
|
|
6021
|
+
@media (prefers-reduced-motion: reduce) {
|
|
6022
|
+
.session-waiting .pulse {
|
|
6023
|
+
animation: none;
|
|
6024
|
+
}
|
|
6025
|
+
}
|
|
6026
|
+
/* #endregion */
|
|
6027
|
+
|
|
5153
6028
|
/* #region TOOL_STATS */
|
|
5154
6029
|
.modal.tool-stats-modal {
|
|
5155
6030
|
width: 90%;
|
|
@@ -5753,7 +6628,8 @@ pre.mermaid svg {
|
|
|
5753
6628
|
|
|
5754
6629
|
.project-group-header .group-chevron,
|
|
5755
6630
|
.session-group-header .group-chevron,
|
|
5756
|
-
.sg-section-toggle .group-chevron
|
|
6631
|
+
.sg-section-toggle .group-chevron,
|
|
6632
|
+
.scratch-folder-toggle .group-chevron {
|
|
5757
6633
|
transition: transform 0.15s ease;
|
|
5758
6634
|
flex-shrink: 0;
|
|
5759
6635
|
display: block;
|
|
@@ -5761,12 +6637,14 @@ pre.mermaid svg {
|
|
|
5761
6637
|
|
|
5762
6638
|
.project-group-header.collapsed .group-chevron,
|
|
5763
6639
|
.session-group-header.collapsed .group-chevron,
|
|
5764
|
-
.sg-section-toggle.collapsed .group-chevron
|
|
6640
|
+
.sg-section-toggle.collapsed .group-chevron,
|
|
6641
|
+
.scratch-folder-toggle.collapsed .group-chevron {
|
|
5765
6642
|
transform: rotate(-90deg);
|
|
5766
6643
|
}
|
|
5767
6644
|
|
|
5768
6645
|
.project-group-header .group-name,
|
|
5769
6646
|
.session-group-header .group-name {
|
|
6647
|
+
flex: 1;
|
|
5770
6648
|
overflow: hidden;
|
|
5771
6649
|
text-overflow: ellipsis;
|
|
5772
6650
|
white-space: nowrap;
|
|
@@ -5776,18 +6654,46 @@ pre.mermaid svg {
|
|
|
5776
6654
|
flex: 1;
|
|
5777
6655
|
}
|
|
5778
6656
|
|
|
5779
|
-
.project-view-btn
|
|
6657
|
+
.project-view-btn,
|
|
6658
|
+
.project-new-btn,
|
|
6659
|
+
.header-pad-btn {
|
|
5780
6660
|
color: var(--text-muted);
|
|
5781
6661
|
cursor: pointer;
|
|
5782
6662
|
display: flex;
|
|
5783
6663
|
align-items: center;
|
|
5784
|
-
transition:
|
|
6664
|
+
transition:
|
|
6665
|
+
color 0.15s,
|
|
6666
|
+
opacity 0.15s;
|
|
6667
|
+
}
|
|
6668
|
+
|
|
6669
|
+
.project-view-btn:hover,
|
|
6670
|
+
.project-new-btn:hover,
|
|
6671
|
+
.header-pad-btn:hover {
|
|
6672
|
+
color: var(--accent);
|
|
6673
|
+
}
|
|
6674
|
+
|
|
6675
|
+
.project-new-btn,
|
|
6676
|
+
.header-pad-btn {
|
|
6677
|
+
opacity: 0;
|
|
6678
|
+
}
|
|
6679
|
+
|
|
6680
|
+
.project-group-header:hover .project-new-btn,
|
|
6681
|
+
.project-group-header.kb-selected .project-new-btn {
|
|
6682
|
+
opacity: 1;
|
|
5785
6683
|
}
|
|
5786
6684
|
|
|
5787
|
-
.
|
|
6685
|
+
.header-pad-btn.has-pad {
|
|
5788
6686
|
color: var(--accent);
|
|
5789
6687
|
}
|
|
5790
6688
|
|
|
6689
|
+
.header-pad-btn.has-pad,
|
|
6690
|
+
.project-group-header:hover .header-pad-btn,
|
|
6691
|
+
.project-group-header.kb-selected .header-pad-btn,
|
|
6692
|
+
.session-group-header:hover .header-pad-btn,
|
|
6693
|
+
.session-group-header.kb-selected .header-pad-btn {
|
|
6694
|
+
opacity: 1;
|
|
6695
|
+
}
|
|
6696
|
+
|
|
5791
6697
|
.project-group-header .group-count {
|
|
5792
6698
|
font-weight: 400;
|
|
5793
6699
|
color: var(--text-muted);
|
|
@@ -5917,6 +6823,16 @@ pre.mermaid svg {
|
|
|
5917
6823
|
color: var(--accent);
|
|
5918
6824
|
}
|
|
5919
6825
|
|
|
6826
|
+
.sg-transient .group-name {
|
|
6827
|
+
font-weight: 500;
|
|
6828
|
+
color: var(--text-secondary);
|
|
6829
|
+
}
|
|
6830
|
+
|
|
6831
|
+
.sg-keep {
|
|
6832
|
+
font-size: 10px;
|
|
6833
|
+
font-weight: 500;
|
|
6834
|
+
}
|
|
6835
|
+
|
|
5920
6836
|
.pinned-sub-items.collapsed {
|
|
5921
6837
|
display: none;
|
|
5922
6838
|
}
|