claude-code-kanban 4.27.0 → 4.28.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.
- package/README.md +72 -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/net-guard.js +20 -3
- 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 +1761 -138
- package/public/index.html +150 -14
- package/public/style.css +772 -53
- package/public/sw.js +2 -1
- package/public/themes.css +84 -80
- package/server.js +240 -18
- 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,7 +756,8 @@ 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);
|
|
591
762
|
box-shadow:
|
|
592
763
|
inset 0 0 0 1px var(--accent),
|
|
@@ -649,7 +820,8 @@ body::before {
|
|
|
649
820
|
}
|
|
650
821
|
|
|
651
822
|
.session-indicators .pulse,
|
|
652
|
-
.wf-live-name .pulse
|
|
823
|
+
.wf-live-name .pulse,
|
|
824
|
+
.session-waiting .pulse {
|
|
653
825
|
flex: none;
|
|
654
826
|
width: 6px;
|
|
655
827
|
height: 6px;
|
|
@@ -670,6 +842,19 @@ body::before {
|
|
|
670
842
|
}
|
|
671
843
|
}
|
|
672
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
|
+
|
|
673
858
|
.session-secondary {
|
|
674
859
|
font-size: 12px;
|
|
675
860
|
font-weight: 450;
|
|
@@ -1917,7 +2102,8 @@ body::before {
|
|
|
1917
2102
|
.team-info-btn,
|
|
1918
2103
|
.plan-indicator,
|
|
1919
2104
|
.loop-badge,
|
|
1920
|
-
.workflow-badge
|
|
2105
|
+
.workflow-badge,
|
|
2106
|
+
.terminal-badge {
|
|
1921
2107
|
width: 18px;
|
|
1922
2108
|
height: 18px;
|
|
1923
2109
|
display: inline-flex;
|
|
@@ -2491,48 +2677,306 @@ body::before {
|
|
|
2491
2677
|
border-color 0.1s ease,
|
|
2492
2678
|
color 0.1s ease;
|
|
2493
2679
|
}
|
|
2494
|
-
.row-actions button:hover {
|
|
2495
|
-
background: var(--bg-hover);
|
|
2496
|
-
border-color: var(--accent);
|
|
2497
|
-
color: var(--accent-text);
|
|
2680
|
+
.row-actions button:hover {
|
|
2681
|
+
background: var(--bg-hover);
|
|
2682
|
+
border-color: var(--accent);
|
|
2683
|
+
color: var(--accent-text);
|
|
2684
|
+
}
|
|
2685
|
+
.row-actions button svg {
|
|
2686
|
+
width: 12px;
|
|
2687
|
+
height: 12px;
|
|
2688
|
+
display: block;
|
|
2689
|
+
}
|
|
2690
|
+
@media (hover: none) {
|
|
2691
|
+
.row-actions {
|
|
2692
|
+
opacity: 1;
|
|
2693
|
+
}
|
|
2694
|
+
}
|
|
2695
|
+
|
|
2696
|
+
/* #endregion */
|
|
2697
|
+
|
|
2698
|
+
/* #region OWNER_FILTER */
|
|
2699
|
+
.kanban {
|
|
2700
|
+
position: relative;
|
|
2701
|
+
}
|
|
2702
|
+
|
|
2703
|
+
.owner-filter-bar {
|
|
2704
|
+
display: none;
|
|
2705
|
+
position: absolute;
|
|
2706
|
+
top: 24px;
|
|
2707
|
+
right: 24px;
|
|
2708
|
+
z-index: 2;
|
|
2709
|
+
}
|
|
2710
|
+
|
|
2711
|
+
.owner-filter-bar.visible {
|
|
2712
|
+
display: flex;
|
|
2713
|
+
align-items: center;
|
|
2714
|
+
}
|
|
2715
|
+
|
|
2716
|
+
.owner-filter-bar .filter-dropdown {
|
|
2717
|
+
flex: none;
|
|
2718
|
+
width: auto;
|
|
2719
|
+
max-width: 180px;
|
|
2720
|
+
font-size: 13px;
|
|
2721
|
+
padding: 6px 10px;
|
|
2722
|
+
}
|
|
2723
|
+
|
|
2724
|
+
/* #endregion */
|
|
2725
|
+
|
|
2726
|
+
/* #region TERMINAL */
|
|
2727
|
+
.terminal-pane {
|
|
2728
|
+
position: relative;
|
|
2729
|
+
flex: 1;
|
|
2730
|
+
display: none;
|
|
2731
|
+
flex-direction: column;
|
|
2732
|
+
min-height: 0;
|
|
2733
|
+
padding: 8px 12px 12px;
|
|
2734
|
+
gap: 6px;
|
|
2735
|
+
}
|
|
2736
|
+
|
|
2737
|
+
.session-view.terminal-mode .kanban,
|
|
2738
|
+
.session-view.terminal-mode .agent-footer {
|
|
2739
|
+
display: none;
|
|
2740
|
+
}
|
|
2741
|
+
|
|
2742
|
+
.session-view.terminal-mode .terminal-pane {
|
|
2743
|
+
display: flex;
|
|
2744
|
+
}
|
|
2745
|
+
|
|
2746
|
+
.terminal-bar {
|
|
2747
|
+
display: flex;
|
|
2748
|
+
align-items: center;
|
|
2749
|
+
justify-content: space-between;
|
|
2750
|
+
gap: 8px;
|
|
2751
|
+
font-family: var(--font-mono);
|
|
2752
|
+
font-size: 12px;
|
|
2753
|
+
color: var(--text-muted);
|
|
2754
|
+
}
|
|
2755
|
+
|
|
2756
|
+
.terminal-host {
|
|
2757
|
+
flex: 1;
|
|
2758
|
+
min-height: 0;
|
|
2759
|
+
overflow: hidden;
|
|
2760
|
+
background: var(--bg-deep);
|
|
2761
|
+
}
|
|
2762
|
+
|
|
2763
|
+
.terminal-pane:has(.terminal-prompt.visible) .xterm {
|
|
2764
|
+
visibility: hidden;
|
|
2765
|
+
}
|
|
2766
|
+
|
|
2767
|
+
.terminal-host .xterm {
|
|
2768
|
+
height: 100%;
|
|
2769
|
+
}
|
|
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);
|
|
2774
|
+
}
|
|
2775
|
+
|
|
2776
|
+
.terminal-manager-modal {
|
|
2777
|
+
width: 90%;
|
|
2778
|
+
max-width: 720px;
|
|
2779
|
+
max-height: 85vh;
|
|
2780
|
+
display: flex;
|
|
2781
|
+
flex-direction: column;
|
|
2782
|
+
}
|
|
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);
|
|
2790
|
+
}
|
|
2791
|
+
|
|
2792
|
+
.terminal-manager-row:last-child {
|
|
2793
|
+
border-bottom: none;
|
|
2794
|
+
}
|
|
2795
|
+
|
|
2796
|
+
.terminal-manager-dot {
|
|
2797
|
+
flex-shrink: 0;
|
|
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;
|
|
2498
2935
|
}
|
|
2499
|
-
|
|
2500
|
-
|
|
2501
|
-
|
|
2502
|
-
|
|
2936
|
+
|
|
2937
|
+
.terminal-prompt-text {
|
|
2938
|
+
display: flex;
|
|
2939
|
+
flex-direction: column;
|
|
2940
|
+
gap: 4px;
|
|
2941
|
+
line-height: 1.5;
|
|
2503
2942
|
}
|
|
2504
|
-
|
|
2505
|
-
|
|
2506
|
-
|
|
2507
|
-
|
|
2943
|
+
|
|
2944
|
+
.terminal-prompt-title {
|
|
2945
|
+
color: var(--text-primary);
|
|
2946
|
+
font-size: 15px;
|
|
2947
|
+
font-weight: 600;
|
|
2508
2948
|
}
|
|
2509
2949
|
|
|
2510
|
-
|
|
2950
|
+
.terminal-prompt-actions {
|
|
2951
|
+
display: flex;
|
|
2952
|
+
justify-content: center;
|
|
2953
|
+
gap: 8px;
|
|
2954
|
+
flex-wrap: wrap;
|
|
2955
|
+
}
|
|
2511
2956
|
|
|
2512
|
-
|
|
2513
|
-
|
|
2514
|
-
position: relative;
|
|
2957
|
+
.terminal-prompt button:focus-visible {
|
|
2958
|
+
outline: none;
|
|
2515
2959
|
}
|
|
2516
2960
|
|
|
2517
|
-
.
|
|
2518
|
-
|
|
2519
|
-
position: absolute;
|
|
2520
|
-
top: 24px;
|
|
2521
|
-
right: 24px;
|
|
2522
|
-
z-index: 2;
|
|
2961
|
+
.terminal-host:focus-within {
|
|
2962
|
+
box-shadow: inset 0 0 0 1px var(--accent);
|
|
2523
2963
|
}
|
|
2524
2964
|
|
|
2525
|
-
.
|
|
2526
|
-
|
|
2527
|
-
align-items: center;
|
|
2965
|
+
.terminal-prompt:has(.terminal-prompt-output) {
|
|
2966
|
+
width: min(640px, calc(100% - 32px));
|
|
2528
2967
|
}
|
|
2529
2968
|
|
|
2530
|
-
.
|
|
2531
|
-
|
|
2532
|
-
|
|
2533
|
-
|
|
2534
|
-
font-size:
|
|
2535
|
-
|
|
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);
|
|
2536
2980
|
}
|
|
2537
2981
|
|
|
2538
2982
|
/* #endregion */
|
|
@@ -3054,6 +3498,10 @@ body::before {
|
|
|
3054
3498
|
font-family: var(--font-mono);
|
|
3055
3499
|
font-size: 0.85rem;
|
|
3056
3500
|
}
|
|
3501
|
+
.msg-detail-pre code.hljs {
|
|
3502
|
+
background: transparent;
|
|
3503
|
+
padding: 0;
|
|
3504
|
+
}
|
|
3057
3505
|
.msg-detail-pre-tinted {
|
|
3058
3506
|
background: color-mix(in srgb, var(--text-muted) 8%, transparent);
|
|
3059
3507
|
border: 1px solid color-mix(in srgb, var(--border) 55%, transparent);
|
|
@@ -3858,6 +4306,12 @@ body::before {
|
|
|
3858
4306
|
flex-shrink: 0;
|
|
3859
4307
|
color: var(--text-secondary);
|
|
3860
4308
|
}
|
|
4309
|
+
.terminal-badge {
|
|
4310
|
+
color: var(--text-secondary);
|
|
4311
|
+
}
|
|
4312
|
+
.terminal-badge:hover {
|
|
4313
|
+
color: var(--accent, var(--text-primary));
|
|
4314
|
+
}
|
|
3861
4315
|
.agent-badge-waiting {
|
|
3862
4316
|
color: var(--warning);
|
|
3863
4317
|
animation: agent-badge-pulse 1.6s ease-in-out infinite;
|
|
@@ -4428,7 +4882,7 @@ body.light {
|
|
|
4428
4882
|
--text-secondary: #444444;
|
|
4429
4883
|
--text-tertiary: #666666;
|
|
4430
4884
|
--text-muted: #888888;
|
|
4431
|
-
--accent-text: #
|
|
4885
|
+
--accent-text: #a0501c;
|
|
4432
4886
|
--accent-dim: rgba(232, 111, 51, 0.18);
|
|
4433
4887
|
--accent-glow: rgba(232, 111, 51, 0.5);
|
|
4434
4888
|
--gold: #a8842f;
|
|
@@ -4499,7 +4953,7 @@ body.light .msg-assistant .msg-text {
|
|
|
4499
4953
|
.search-input {
|
|
4500
4954
|
width: 100%;
|
|
4501
4955
|
padding: 9px 32px 9px 12px;
|
|
4502
|
-
background: var(--bg-deep);
|
|
4956
|
+
background: var(--sidebar-item-bg, var(--bg-deep));
|
|
4503
4957
|
border: 1px solid transparent;
|
|
4504
4958
|
border-radius: 6px;
|
|
4505
4959
|
color: var(--text-primary);
|
|
@@ -5345,6 +5799,232 @@ select.form-input option:checked {
|
|
|
5345
5799
|
|
|
5346
5800
|
/* #endregion */
|
|
5347
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
|
+
|
|
5348
6028
|
/* #region TOOL_STATS */
|
|
5349
6029
|
.modal.tool-stats-modal {
|
|
5350
6030
|
width: 90%;
|
|
@@ -5964,6 +6644,7 @@ pre.mermaid svg {
|
|
|
5964
6644
|
|
|
5965
6645
|
.project-group-header .group-name,
|
|
5966
6646
|
.session-group-header .group-name {
|
|
6647
|
+
flex: 1;
|
|
5967
6648
|
overflow: hidden;
|
|
5968
6649
|
text-overflow: ellipsis;
|
|
5969
6650
|
white-space: nowrap;
|
|
@@ -5973,18 +6654,46 @@ pre.mermaid svg {
|
|
|
5973
6654
|
flex: 1;
|
|
5974
6655
|
}
|
|
5975
6656
|
|
|
5976
|
-
.project-view-btn
|
|
6657
|
+
.project-view-btn,
|
|
6658
|
+
.project-new-btn,
|
|
6659
|
+
.header-pad-btn {
|
|
5977
6660
|
color: var(--text-muted);
|
|
5978
6661
|
cursor: pointer;
|
|
5979
6662
|
display: flex;
|
|
5980
6663
|
align-items: center;
|
|
5981
|
-
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;
|
|
5982
6683
|
}
|
|
5983
6684
|
|
|
5984
|
-
.
|
|
6685
|
+
.header-pad-btn.has-pad {
|
|
5985
6686
|
color: var(--accent);
|
|
5986
6687
|
}
|
|
5987
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
|
+
|
|
5988
6697
|
.project-group-header .group-count {
|
|
5989
6698
|
font-weight: 400;
|
|
5990
6699
|
color: var(--text-muted);
|
|
@@ -6114,6 +6823,16 @@ pre.mermaid svg {
|
|
|
6114
6823
|
color: var(--accent);
|
|
6115
6824
|
}
|
|
6116
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
|
+
|
|
6117
6836
|
.pinned-sub-items.collapsed {
|
|
6118
6837
|
display: none;
|
|
6119
6838
|
}
|