clay-server 2.7.2 → 2.8.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/bin/cli.js +2 -1
- package/lib/config.js +7 -4
- package/lib/project.js +343 -15
- package/lib/public/app.js +1043 -135
- package/lib/public/apple-touch-icon-dark.png +0 -0
- package/lib/public/apple-touch-icon.png +0 -0
- package/lib/public/clay-logo.png +0 -0
- package/lib/public/css/base.css +10 -0
- package/lib/public/css/filebrowser.css +1 -0
- package/lib/public/css/home-hub.css +455 -0
- package/lib/public/css/icon-strip.css +6 -5
- package/lib/public/css/loop.css +141 -23
- package/lib/public/css/messages.css +2 -0
- package/lib/public/css/mobile-nav.css +38 -12
- package/lib/public/css/overlays.css +205 -169
- package/lib/public/css/playbook.css +264 -0
- package/lib/public/css/profile.css +268 -0
- package/lib/public/css/scheduler-modal.css +1429 -0
- package/lib/public/css/scheduler.css +1305 -0
- package/lib/public/css/sidebar.css +305 -11
- package/lib/public/css/sticky-notes.css +23 -19
- package/lib/public/css/stt.css +155 -0
- package/lib/public/css/title-bar.css +14 -6
- package/lib/public/favicon-banded-32.png +0 -0
- package/lib/public/favicon-banded.png +0 -0
- package/lib/public/icon-192-dark.png +0 -0
- package/lib/public/icon-192.png +0 -0
- package/lib/public/icon-512-dark.png +0 -0
- package/lib/public/icon-512.png +0 -0
- package/lib/public/icon-banded-76.png +0 -0
- package/lib/public/icon-banded-96.png +0 -0
- package/lib/public/index.html +335 -42
- package/lib/public/modules/ascii-logo.js +389 -0
- package/lib/public/modules/filebrowser.js +2 -1
- package/lib/public/modules/markdown.js +118 -0
- package/lib/public/modules/notifications.js +50 -63
- package/lib/public/modules/playbook.js +578 -0
- package/lib/public/modules/profile.js +357 -0
- package/lib/public/modules/project-settings.js +4 -9
- package/lib/public/modules/scheduler.js +2826 -0
- package/lib/public/modules/server-settings.js +1 -1
- package/lib/public/modules/sidebar.js +378 -31
- package/lib/public/modules/sticky-notes.js +2 -0
- package/lib/public/modules/stt.js +272 -0
- package/lib/public/modules/terminal.js +32 -0
- package/lib/public/modules/theme.js +3 -10
- package/lib/public/modules/tools.js +2 -1
- package/lib/public/style.css +6 -0
- package/lib/public/sw.js +82 -3
- package/lib/public/wordmark-banded-20.png +0 -0
- package/lib/public/wordmark-banded-32.png +0 -0
- package/lib/public/wordmark-banded-64.png +0 -0
- package/lib/public/wordmark-banded-80.png +0 -0
- package/lib/scheduler.js +402 -0
- package/lib/sdk-bridge.js +3 -2
- package/lib/server.js +124 -3
- package/lib/sessions.js +35 -2
- package/package.json +1 -1
package/lib/public/css/loop.css
CHANGED
|
@@ -38,7 +38,62 @@
|
|
|
38
38
|
.loop-stop-btn:hover {
|
|
39
39
|
opacity: 0.85;
|
|
40
40
|
}
|
|
41
|
-
/*
|
|
41
|
+
/* Ralph Loop sidebar section */
|
|
42
|
+
#ralph-loop-section {
|
|
43
|
+
display: none;
|
|
44
|
+
}
|
|
45
|
+
.ralph-section-inner {
|
|
46
|
+
display: flex;
|
|
47
|
+
flex-direction: column;
|
|
48
|
+
gap: 4px;
|
|
49
|
+
}
|
|
50
|
+
.ralph-section-header {
|
|
51
|
+
display: flex;
|
|
52
|
+
align-items: center;
|
|
53
|
+
gap: 6px;
|
|
54
|
+
font-size: 12px;
|
|
55
|
+
font-weight: 600;
|
|
56
|
+
color: var(--text);
|
|
57
|
+
}
|
|
58
|
+
.ralph-section-header .ralph-section-icon { display: inline-flex; color: var(--accent); }
|
|
59
|
+
.ralph-section-header .ralph-section-icon .lucide { width: 13px; height: 13px; }
|
|
60
|
+
.ralph-section-header .ralph-section-label { flex: 1; }
|
|
61
|
+
.ralph-section-header .loop-experimental { margin-left: 0; font-size: 9.5px; }
|
|
62
|
+
.ralph-section-body {
|
|
63
|
+
font-size: 11.5px;
|
|
64
|
+
color: var(--text-muted);
|
|
65
|
+
padding-left: 2px;
|
|
66
|
+
margin-top: 2px;
|
|
67
|
+
}
|
|
68
|
+
.ralph-section-hint {
|
|
69
|
+
color: var(--text-muted);
|
|
70
|
+
}
|
|
71
|
+
.ralph-section-status {
|
|
72
|
+
display: inline-flex;
|
|
73
|
+
align-items: center;
|
|
74
|
+
gap: 4px;
|
|
75
|
+
}
|
|
76
|
+
.ralph-section-status .lucide { width: 11px; height: 11px; }
|
|
77
|
+
.ralph-section-status.crafting { color: var(--accent); }
|
|
78
|
+
.ralph-section-status.ready { color: var(--success, #27ae60); font-weight: 600; }
|
|
79
|
+
.ralph-section-status.running { color: var(--accent); }
|
|
80
|
+
.ralph-section-status.done { color: var(--success, #27ae60); }
|
|
81
|
+
.ralph-section-tasks-link {
|
|
82
|
+
display: block;
|
|
83
|
+
margin-top: 2px;
|
|
84
|
+
font-size: 11px;
|
|
85
|
+
color: var(--accent);
|
|
86
|
+
text-decoration: none;
|
|
87
|
+
cursor: pointer;
|
|
88
|
+
}
|
|
89
|
+
.ralph-section-tasks-link:hover { text-decoration: underline; }
|
|
90
|
+
|
|
91
|
+
/* Section accent states */
|
|
92
|
+
.ralph-section-ready { border-left-color: var(--success, #27ae60); }
|
|
93
|
+
.ralph-section-running { border-left-color: var(--accent); }
|
|
94
|
+
.ralph-section-done { border-left-color: var(--success, #27ae60); }
|
|
95
|
+
|
|
96
|
+
/* .loop-start-btn is now inside #ralph-loop-section, inherits sidebar button styles */
|
|
42
97
|
.loop-experimental {
|
|
43
98
|
display: inline-flex;
|
|
44
99
|
align-items: center;
|
|
@@ -638,10 +693,72 @@
|
|
|
638
693
|
flex-direction: column;
|
|
639
694
|
box-shadow: 0 8px 32px rgba(var(--shadow-rgb, 0,0,0), 0.5);
|
|
640
695
|
}
|
|
696
|
+
|
|
697
|
+
/* Header — matches scheduler-detail-header */
|
|
698
|
+
.ralph-preview-header {
|
|
699
|
+
display: flex;
|
|
700
|
+
align-items: center;
|
|
701
|
+
gap: 12px;
|
|
702
|
+
padding: 16px 20px;
|
|
703
|
+
border-bottom: 1px solid rgba(var(--overlay-rgb, 0,0,0), 0.06);
|
|
704
|
+
flex-shrink: 0;
|
|
705
|
+
}
|
|
706
|
+
.ralph-preview-name {
|
|
707
|
+
font-weight: 700;
|
|
708
|
+
font-size: 16px;
|
|
709
|
+
color: var(--text);
|
|
710
|
+
flex: 1;
|
|
711
|
+
overflow: hidden;
|
|
712
|
+
text-overflow: ellipsis;
|
|
713
|
+
white-space: nowrap;
|
|
714
|
+
}
|
|
715
|
+
.ralph-preview-actions {
|
|
716
|
+
display: flex;
|
|
717
|
+
gap: 6px;
|
|
718
|
+
flex-shrink: 0;
|
|
719
|
+
}
|
|
720
|
+
.ralph-preview-action-btn {
|
|
721
|
+
display: inline-flex;
|
|
722
|
+
align-items: center;
|
|
723
|
+
gap: 5px;
|
|
724
|
+
background: var(--bg-alt);
|
|
725
|
+
border: 1px solid var(--border);
|
|
726
|
+
color: var(--text-secondary);
|
|
727
|
+
cursor: pointer;
|
|
728
|
+
padding: 5px 12px;
|
|
729
|
+
border-radius: 6px;
|
|
730
|
+
font-size: 12px;
|
|
731
|
+
font-weight: 600;
|
|
732
|
+
font-family: inherit;
|
|
733
|
+
transition: background 0.12s, color 0.12s, opacity 0.12s;
|
|
734
|
+
}
|
|
735
|
+
.ralph-preview-action-btn .lucide { width: 13px; height: 13px; }
|
|
736
|
+
.ralph-preview-action-btn:hover { background: var(--hover, rgba(var(--overlay-rgb), 0.06)); color: var(--text); }
|
|
737
|
+
.ralph-preview-action-btn.primary { background: var(--accent); color: #fff; border-color: var(--accent); }
|
|
738
|
+
.ralph-preview-action-btn.primary:hover { opacity: 0.9; }
|
|
739
|
+
.ralph-preview-action-btn:disabled { opacity: 0.4; pointer-events: none; }
|
|
740
|
+
.ralph-preview-action-icon {
|
|
741
|
+
display: flex;
|
|
742
|
+
align-items: center;
|
|
743
|
+
justify-content: center;
|
|
744
|
+
width: 30px;
|
|
745
|
+
height: 30px;
|
|
746
|
+
border: 1px solid var(--border);
|
|
747
|
+
border-radius: 6px;
|
|
748
|
+
background: none;
|
|
749
|
+
color: var(--text-muted);
|
|
750
|
+
cursor: pointer;
|
|
751
|
+
transition: background 0.12s, color 0.12s, border-color 0.12s;
|
|
752
|
+
}
|
|
753
|
+
.ralph-preview-action-icon .lucide { width: 14px; height: 14px; }
|
|
754
|
+
.ralph-preview-action-icon:hover { background: color-mix(in srgb, var(--error) 12%, transparent); color: var(--error); border-color: var(--error); }
|
|
755
|
+
|
|
756
|
+
/* Tabs */
|
|
641
757
|
.ralph-preview-tabs {
|
|
642
758
|
display: flex;
|
|
643
|
-
border-bottom: 1px solid var(--
|
|
644
|
-
padding: 0
|
|
759
|
+
border-bottom: 1px solid rgba(var(--overlay-rgb, 0,0,0), 0.06);
|
|
760
|
+
padding: 0 20px;
|
|
761
|
+
flex-shrink: 0;
|
|
645
762
|
}
|
|
646
763
|
.ralph-tab {
|
|
647
764
|
padding: 10px 16px;
|
|
@@ -651,8 +768,9 @@
|
|
|
651
768
|
color: var(--text-secondary, #999);
|
|
652
769
|
cursor: pointer;
|
|
653
770
|
font-size: 13px;
|
|
654
|
-
font-weight:
|
|
655
|
-
|
|
771
|
+
font-weight: 600;
|
|
772
|
+
font-family: inherit;
|
|
773
|
+
transition: color 0.12s, border-color 0.12s;
|
|
656
774
|
}
|
|
657
775
|
.ralph-tab:hover {
|
|
658
776
|
color: var(--text, #fff);
|
|
@@ -661,10 +779,12 @@
|
|
|
661
779
|
color: var(--text, #fff);
|
|
662
780
|
border-bottom-color: var(--accent, #6c5ce7);
|
|
663
781
|
}
|
|
782
|
+
|
|
783
|
+
/* Body */
|
|
664
784
|
.ralph-preview-body {
|
|
665
785
|
flex: 1;
|
|
666
786
|
overflow-y: auto;
|
|
667
|
-
padding:
|
|
787
|
+
padding: 20px 24px;
|
|
668
788
|
font-size: 13px;
|
|
669
789
|
line-height: 1.6;
|
|
670
790
|
color: var(--text, #fff);
|
|
@@ -681,10 +801,6 @@
|
|
|
681
801
|
font-family: var(--font-mono, monospace);
|
|
682
802
|
font-size: 12px;
|
|
683
803
|
}
|
|
684
|
-
.ralph-preview-dialog > .ralph-btn {
|
|
685
|
-
margin: 0 16px 12px;
|
|
686
|
-
align-self: flex-end;
|
|
687
|
-
}
|
|
688
804
|
|
|
689
805
|
/* Ralph Sticky (title-bar island, mirrors #todo-sticky pattern) */
|
|
690
806
|
#ralph-sticky {
|
|
@@ -708,27 +824,29 @@
|
|
|
708
824
|
user-select: none;
|
|
709
825
|
}
|
|
710
826
|
#ralph-sticky .ralph-sticky-header:hover { background: rgba(var(--overlay-rgb), 0.03); border-radius: 10px; }
|
|
827
|
+
#ralph-sticky .ralph-sticky-inner {
|
|
828
|
+
border-color: color-mix(in srgb, var(--accent, #6c5ce7) 40%, var(--border));
|
|
829
|
+
}
|
|
711
830
|
#ralph-sticky .ralph-sticky-icon { display: inline-flex; color: var(--accent); }
|
|
712
831
|
#ralph-sticky .ralph-sticky-icon .lucide { width: 14px; height: 14px; }
|
|
713
832
|
#ralph-sticky .ralph-sticky-label { font-size: 12px; font-weight: 600; color: var(--text-secondary); }
|
|
714
|
-
#ralph-sticky .ralph-sticky-status { font-size: 12px; color: var(--
|
|
833
|
+
#ralph-sticky .ralph-sticky-status { font-size: 12px; color: var(--accent); }
|
|
715
834
|
#ralph-sticky .ralph-sticky-status .lucide { width: 12px; height: 12px; }
|
|
716
835
|
|
|
717
|
-
/* Ready state —
|
|
836
|
+
/* Ready state — accent color with glow */
|
|
718
837
|
#ralph-sticky.ralph-ready .ralph-sticky-inner {
|
|
719
|
-
border-color: var(--
|
|
838
|
+
border-color: var(--accent, #6c5ce7);
|
|
839
|
+
box-shadow: 0 0 12px 2px color-mix(in srgb, var(--accent, #6c5ce7) 35%, transparent);
|
|
840
|
+
animation: ralphReadyGlow 2s ease-in-out infinite;
|
|
720
841
|
}
|
|
721
|
-
#ralph-sticky.ralph-ready .ralph-sticky-icon { color: var(--
|
|
842
|
+
#ralph-sticky.ralph-ready .ralph-sticky-icon { color: var(--accent, #6c5ce7); }
|
|
722
843
|
#ralph-sticky.ralph-ready .ralph-sticky-status {
|
|
723
|
-
color: var(--
|
|
844
|
+
color: var(--accent, #6c5ce7);
|
|
724
845
|
font-weight: 600;
|
|
725
846
|
}
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
}
|
|
729
|
-
@keyframes ralphReadyPulse {
|
|
730
|
-
0%, 100% { box-shadow: 0 0 0 0 rgba(39, 174, 96, 0); }
|
|
731
|
-
50% { box-shadow: 0 0 8px 2px rgba(39, 174, 96, 0.25); }
|
|
847
|
+
@keyframes ralphReadyGlow {
|
|
848
|
+
0%, 100% { box-shadow: 0 0 8px 1px color-mix(in srgb, var(--accent, #6c5ce7) 25%, transparent); }
|
|
849
|
+
50% { box-shadow: 0 0 16px 4px color-mix(in srgb, var(--accent, #6c5ce7) 40%, transparent); }
|
|
732
850
|
}
|
|
733
851
|
#ralph-sticky .ralph-sticky-cancel {
|
|
734
852
|
display: inline-flex;
|
|
@@ -762,8 +880,8 @@
|
|
|
762
880
|
#ralph-sticky .ralph-sticky-action .lucide { width: 14px; height: 14px; }
|
|
763
881
|
#ralph-sticky .ralph-sticky-action:hover { color: var(--accent); background: rgba(var(--overlay-rgb), 0.06); }
|
|
764
882
|
#ralph-sticky .ralph-sticky-action:disabled { opacity: 0.3; cursor: not-allowed; }
|
|
765
|
-
#ralph-sticky .ralph-sticky-start { color: var(--
|
|
766
|
-
#ralph-sticky .ralph-sticky-start:hover { color: var(--
|
|
883
|
+
#ralph-sticky .ralph-sticky-start { color: var(--accent, #6c5ce7); }
|
|
884
|
+
#ralph-sticky .ralph-sticky-start:hover { color: var(--accent, #6c5ce7); background: color-mix(in srgb, var(--accent, #6c5ce7) 12%, transparent); }
|
|
767
885
|
#ralph-sticky .ralph-sticky-dismiss { color: var(--text-muted); margin-left: 0; }
|
|
768
886
|
#ralph-sticky .ralph-sticky-dismiss:hover { color: var(--text-secondary); background: rgba(var(--overlay-rgb), 0.06); }
|
|
769
887
|
|
|
@@ -89,8 +89,8 @@
|
|
|
89
89
|
|
|
90
90
|
.mobile-tab { position: relative; }
|
|
91
91
|
|
|
92
|
-
/* --- Center
|
|
93
|
-
.mobile-tab-
|
|
92
|
+
/* --- Center Clay home button --- */
|
|
93
|
+
.mobile-tab-home {
|
|
94
94
|
flex: 1;
|
|
95
95
|
height: 100%;
|
|
96
96
|
background: none;
|
|
@@ -102,18 +102,20 @@
|
|
|
102
102
|
-webkit-tap-highlight-color: transparent;
|
|
103
103
|
}
|
|
104
104
|
|
|
105
|
-
.mobile-
|
|
106
|
-
width:
|
|
107
|
-
height:
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
background: var(--border);
|
|
112
|
-
color: #fff;
|
|
113
|
-
transition: transform 0.1s;
|
|
105
|
+
.mobile-home-icon {
|
|
106
|
+
width: 32px;
|
|
107
|
+
height: 32px;
|
|
108
|
+
border-radius: 8px;
|
|
109
|
+
transition: transform 0.1s, filter 0.2s;
|
|
110
|
+
filter: grayscale(1) brightness(1.3) opacity(0.5);
|
|
114
111
|
}
|
|
115
112
|
|
|
116
|
-
.mobile-tab-
|
|
113
|
+
.mobile-tab-home.active .mobile-home-icon {
|
|
114
|
+
filter: none;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
.mobile-tab-home:active .mobile-home-icon {
|
|
118
|
+
filter: none;
|
|
117
119
|
transform: scale(0.92);
|
|
118
120
|
}
|
|
119
121
|
|
|
@@ -298,6 +300,30 @@
|
|
|
298
300
|
padding-bottom: calc(var(--safe-bottom) + 16px);
|
|
299
301
|
}
|
|
300
302
|
|
|
303
|
+
/* --- New session button --- */
|
|
304
|
+
.mobile-session-new {
|
|
305
|
+
display: flex;
|
|
306
|
+
align-items: center;
|
|
307
|
+
gap: 8px;
|
|
308
|
+
width: 100%;
|
|
309
|
+
padding: 12px 12px;
|
|
310
|
+
margin-bottom: 4px;
|
|
311
|
+
background: none;
|
|
312
|
+
border: none;
|
|
313
|
+
border-bottom: 1px solid var(--border-subtle);
|
|
314
|
+
color: var(--accent);
|
|
315
|
+
font-family: "Pretendard", system-ui, sans-serif;
|
|
316
|
+
font-size: 15px;
|
|
317
|
+
font-weight: 600;
|
|
318
|
+
cursor: pointer;
|
|
319
|
+
text-align: left;
|
|
320
|
+
-webkit-tap-highlight-color: transparent;
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
.mobile-session-new:active {
|
|
324
|
+
background: rgba(var(--overlay-rgb), 0.06);
|
|
325
|
+
}
|
|
326
|
+
|
|
301
327
|
/* --- Session items inside sheet --- */
|
|
302
328
|
.mobile-session-item {
|
|
303
329
|
display: flex;
|