clay-server 2.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +281 -0
  3. package/bin/cli.js +2385 -0
  4. package/lib/cli-sessions.js +270 -0
  5. package/lib/config.js +237 -0
  6. package/lib/daemon.js +489 -0
  7. package/lib/ipc.js +112 -0
  8. package/lib/notes.js +120 -0
  9. package/lib/pages.js +664 -0
  10. package/lib/project.js +1433 -0
  11. package/lib/public/app.js +2795 -0
  12. package/lib/public/apple-touch-icon-dark.png +0 -0
  13. package/lib/public/apple-touch-icon.png +0 -0
  14. package/lib/public/css/base.css +264 -0
  15. package/lib/public/css/diff.css +128 -0
  16. package/lib/public/css/filebrowser.css +1114 -0
  17. package/lib/public/css/highlight.css +144 -0
  18. package/lib/public/css/icon-strip.css +296 -0
  19. package/lib/public/css/input.css +573 -0
  20. package/lib/public/css/menus.css +856 -0
  21. package/lib/public/css/messages.css +1445 -0
  22. package/lib/public/css/mobile-nav.css +354 -0
  23. package/lib/public/css/overlays.css +697 -0
  24. package/lib/public/css/rewind.css +505 -0
  25. package/lib/public/css/server-settings.css +761 -0
  26. package/lib/public/css/sidebar.css +936 -0
  27. package/lib/public/css/sticky-notes.css +358 -0
  28. package/lib/public/css/title-bar.css +314 -0
  29. package/lib/public/favicon-dark.svg +1 -0
  30. package/lib/public/favicon.svg +1 -0
  31. package/lib/public/icon-192-dark.png +0 -0
  32. package/lib/public/icon-192.png +0 -0
  33. package/lib/public/icon-512-dark.png +0 -0
  34. package/lib/public/icon-512.png +0 -0
  35. package/lib/public/icon-mono.svg +1 -0
  36. package/lib/public/index.html +762 -0
  37. package/lib/public/manifest.json +27 -0
  38. package/lib/public/modules/diff.js +398 -0
  39. package/lib/public/modules/events.js +21 -0
  40. package/lib/public/modules/filebrowser.js +1411 -0
  41. package/lib/public/modules/fileicons.js +172 -0
  42. package/lib/public/modules/icons.js +54 -0
  43. package/lib/public/modules/input.js +584 -0
  44. package/lib/public/modules/markdown.js +356 -0
  45. package/lib/public/modules/notifications.js +649 -0
  46. package/lib/public/modules/qrcode.js +70 -0
  47. package/lib/public/modules/rewind.js +345 -0
  48. package/lib/public/modules/server-settings.js +510 -0
  49. package/lib/public/modules/sidebar.js +1083 -0
  50. package/lib/public/modules/state.js +3 -0
  51. package/lib/public/modules/sticky-notes.js +688 -0
  52. package/lib/public/modules/terminal.js +697 -0
  53. package/lib/public/modules/theme.js +738 -0
  54. package/lib/public/modules/tools.js +1608 -0
  55. package/lib/public/modules/utils.js +56 -0
  56. package/lib/public/style.css +15 -0
  57. package/lib/public/sw.js +75 -0
  58. package/lib/push.js +124 -0
  59. package/lib/sdk-bridge.js +989 -0
  60. package/lib/server.js +582 -0
  61. package/lib/sessions.js +424 -0
  62. package/lib/terminal-manager.js +187 -0
  63. package/lib/terminal.js +24 -0
  64. package/lib/themes/ayu-light.json +9 -0
  65. package/lib/themes/catppuccin-latte.json +9 -0
  66. package/lib/themes/catppuccin-mocha.json +9 -0
  67. package/lib/themes/clay-light.json +10 -0
  68. package/lib/themes/clay.json +10 -0
  69. package/lib/themes/dracula.json +9 -0
  70. package/lib/themes/everforest-light.json +9 -0
  71. package/lib/themes/everforest.json +9 -0
  72. package/lib/themes/github-light.json +9 -0
  73. package/lib/themes/gruvbox-dark.json +9 -0
  74. package/lib/themes/gruvbox-light.json +9 -0
  75. package/lib/themes/monokai.json +9 -0
  76. package/lib/themes/nord-light.json +9 -0
  77. package/lib/themes/nord.json +9 -0
  78. package/lib/themes/one-dark.json +9 -0
  79. package/lib/themes/one-light.json +9 -0
  80. package/lib/themes/rose-pine-dawn.json +9 -0
  81. package/lib/themes/rose-pine.json +9 -0
  82. package/lib/themes/solarized-dark.json +9 -0
  83. package/lib/themes/solarized-light.json +9 -0
  84. package/lib/themes/tokyo-night-light.json +9 -0
  85. package/lib/themes/tokyo-night.json +9 -0
  86. package/lib/updater.js +97 -0
  87. package/package.json +47 -0
@@ -0,0 +1,144 @@
1
+ /* ==========================================================================
2
+ Syntax Highlighting (highlight.js) — base16 CSS-variable driven
3
+ Replaces CDN github-dark-dimmed.min.css
4
+ ========================================================================== */
5
+
6
+ .hljs {
7
+ color: var(--text);
8
+ background: var(--code-bg);
9
+ }
10
+
11
+ /* --- Comments --- */
12
+ .hljs-comment,
13
+ .hljs-quote {
14
+ color: var(--hl-comment);
15
+ font-style: italic;
16
+ }
17
+
18
+ /* --- Keywords / control flow --- */
19
+ .hljs-keyword,
20
+ .hljs-selector-tag,
21
+ .hljs-selector-id {
22
+ color: var(--hl-keyword);
23
+ }
24
+
25
+ /* --- Strings / template literals --- */
26
+ .hljs-string,
27
+ .hljs-doctag,
28
+ .hljs-selector-class {
29
+ color: var(--hl-string);
30
+ }
31
+
32
+ /* --- Numbers / booleans / null --- */
33
+ .hljs-number,
34
+ .hljs-literal {
35
+ color: var(--hl-number);
36
+ }
37
+
38
+ /* --- Functions / method calls --- */
39
+ .hljs-title,
40
+ .hljs-title.function_,
41
+ .hljs-section {
42
+ color: var(--hl-function);
43
+ }
44
+
45
+ /* --- Variables / params --- */
46
+ .hljs-variable,
47
+ .hljs-template-variable,
48
+ .hljs-params {
49
+ color: var(--hl-variable);
50
+ }
51
+
52
+ /* --- Types / classes --- */
53
+ .hljs-type,
54
+ .hljs-title.class_,
55
+ .hljs-title.class_.inherited__ {
56
+ color: var(--hl-type);
57
+ }
58
+
59
+ /* --- Constants / built-ins --- */
60
+ .hljs-built_in {
61
+ color: var(--hl-builtin);
62
+ }
63
+
64
+ /* --- Tags (HTML/XML) --- */
65
+ .hljs-tag,
66
+ .hljs-name {
67
+ color: var(--hl-tag);
68
+ }
69
+
70
+ /* --- Attributes --- */
71
+ .hljs-attr,
72
+ .hljs-attribute {
73
+ color: var(--hl-attr);
74
+ }
75
+
76
+ /* --- Regexp / links --- */
77
+ .hljs-regexp,
78
+ .hljs-link {
79
+ color: var(--hl-regexp);
80
+ }
81
+
82
+ /* --- Meta / preprocessor --- */
83
+ .hljs-meta,
84
+ .hljs-meta .hljs-keyword,
85
+ .hljs-meta .hljs-string {
86
+ color: var(--hl-meta);
87
+ }
88
+
89
+ /* --- Symbols / special --- */
90
+ .hljs-symbol,
91
+ .hljs-bullet {
92
+ color: var(--hl-symbol);
93
+ }
94
+
95
+ /* --- Diff additions / deletions --- */
96
+ .hljs-addition {
97
+ color: var(--hl-addition);
98
+ background: var(--success-8);
99
+ }
100
+
101
+ .hljs-deletion {
102
+ color: var(--hl-deletion);
103
+ background: var(--error-8);
104
+ }
105
+
106
+ /* --- Emphasis / strong --- */
107
+ .hljs-emphasis {
108
+ font-style: italic;
109
+ }
110
+
111
+ .hljs-strong {
112
+ font-weight: 700;
113
+ }
114
+
115
+ /* --- Subst / interpolation --- */
116
+ .hljs-subst {
117
+ color: var(--text);
118
+ }
119
+
120
+ /* --- Selector --- */
121
+ .hljs-selector-attr,
122
+ .hljs-selector-pseudo {
123
+ color: var(--hl-keyword);
124
+ }
125
+
126
+ /* --- Property (CSS, JSON keys) --- */
127
+ .hljs-property {
128
+ color: var(--hl-attr);
129
+ }
130
+
131
+ /* --- Punctuation (brackets etc.) --- */
132
+ .hljs-punctuation {
133
+ color: var(--text-secondary);
134
+ }
135
+
136
+ /* --- Operator --- */
137
+ .hljs-operator {
138
+ color: var(--hl-keyword);
139
+ }
140
+
141
+ /* --- Char / escape sequences --- */
142
+ .hljs-char.escape_ {
143
+ color: var(--hl-regexp);
144
+ }
@@ -0,0 +1,296 @@
1
+ /* ==========================================================================
2
+ Icon Strip — Discord-style vertical server/project bar
3
+ ========================================================================== */
4
+
5
+ #icon-strip {
6
+ width: 72px;
7
+ flex-shrink: 0;
8
+ background: var(--sidebar-bg);
9
+ display: flex;
10
+ flex-direction: column;
11
+ align-items: center;
12
+ padding: 0 0 58px;
13
+ overflow: hidden;
14
+ z-index: 2;
15
+ }
16
+
17
+ /* --- Home / App icon (top) --- */
18
+ .icon-strip-home {
19
+ position: relative;
20
+ width: 48px;
21
+ height: 48px;
22
+ border-radius: 0;
23
+ background: transparent;
24
+ display: flex;
25
+ align-items: center;
26
+ justify-content: center;
27
+ cursor: pointer;
28
+ text-decoration: none;
29
+ color: var(--text);
30
+ flex-shrink: 0;
31
+ }
32
+
33
+ .icon-strip-home::before {
34
+ content: "";
35
+ position: absolute;
36
+ width: 38px;
37
+ height: 38px;
38
+ border-radius: 12px;
39
+ background: var(--bg-alt);
40
+ transition: background 0.2s ease;
41
+ z-index: -1;
42
+ }
43
+
44
+ .icon-strip-home:hover::before {
45
+ background: var(--accent);
46
+ }
47
+
48
+ .icon-strip-home .icon-strip-logo {
49
+ width: 38px;
50
+ height: 38px;
51
+ border-radius: 12px;
52
+ object-fit: cover;
53
+ }
54
+
55
+ .icon-strip-home:hover .footer-mascot {
56
+ opacity: 0.8;
57
+ }
58
+
59
+ .icon-strip-home.active::before {
60
+ background: var(--accent);
61
+ }
62
+
63
+ /* First separator aligns with title bar border (48px line) */
64
+ .icon-strip-home + .icon-strip-separator {
65
+ margin-top: 0;
66
+ }
67
+
68
+ /* --- Pill indicator (left side, Discord-style white bar) --- */
69
+ .icon-strip-pill {
70
+ position: absolute;
71
+ left: -12px;
72
+ width: 4px;
73
+ background: #fff;
74
+ border-radius: 0 4px 4px 0;
75
+ transition: height 0.2s ease, opacity 0.2s ease;
76
+ opacity: 0;
77
+ height: 0;
78
+ top: 50%;
79
+ transform: translateY(-50%);
80
+ }
81
+
82
+ /* Hover: short pill */
83
+ .icon-strip-item:hover .icon-strip-pill {
84
+ opacity: 1;
85
+ height: 20px;
86
+ }
87
+
88
+ /* Active: tall pill */
89
+ .icon-strip-item.active .icon-strip-pill {
90
+ opacity: 1;
91
+ height: 32px;
92
+ }
93
+
94
+ .icon-strip-home:hover .icon-strip-pill {
95
+ opacity: 1;
96
+ height: 20px;
97
+ }
98
+
99
+ .icon-strip-home.active .icon-strip-pill {
100
+ opacity: 1;
101
+ height: 32px;
102
+ }
103
+
104
+ /* --- Separator --- */
105
+ .icon-strip-separator {
106
+ width: 32px;
107
+ height: 2px;
108
+ border-radius: 1px;
109
+ background: var(--border);
110
+ margin: 4px 0;
111
+ flex-shrink: 0;
112
+ }
113
+
114
+ /* --- Scrollable project list area --- */
115
+ .icon-strip-projects {
116
+ width: 100%;
117
+ overflow-y: auto;
118
+ overflow-x: hidden;
119
+ display: flex;
120
+ flex-direction: column;
121
+ align-items: center;
122
+ gap: 0;
123
+ padding: 0;
124
+ scrollbar-width: none;
125
+ }
126
+
127
+ .icon-strip-projects::-webkit-scrollbar {
128
+ display: none;
129
+ }
130
+
131
+ /* --- Project icon item (48px hit-box, 38px visible bg) --- */
132
+ .icon-strip-item {
133
+ position: relative;
134
+ width: 48px;
135
+ height: 48px;
136
+ border-radius: 0;
137
+ background: transparent;
138
+ display: flex;
139
+ align-items: center;
140
+ justify-content: center;
141
+ cursor: pointer;
142
+ flex-shrink: 0;
143
+ color: var(--text-secondary);
144
+ font-size: 15px;
145
+ font-weight: 600;
146
+ text-decoration: none;
147
+ user-select: none;
148
+ }
149
+
150
+ .icon-strip-item::before {
151
+ content: "";
152
+ position: absolute;
153
+ width: 38px;
154
+ height: 38px;
155
+ border-radius: 12px;
156
+ background: var(--bg-alt);
157
+ transition: background 0.2s ease;
158
+ z-index: -1;
159
+ }
160
+
161
+ .icon-strip-item:hover::before {
162
+ background: var(--accent);
163
+ }
164
+
165
+ .icon-strip-item:hover {
166
+ color: #fff;
167
+ }
168
+
169
+ .icon-strip-item.active::before {
170
+ background: var(--accent);
171
+ }
172
+
173
+ .icon-strip-item.active {
174
+ color: #fff;
175
+ }
176
+
177
+ /* --- Socket status indicator on icon (bottom-right dot) --- */
178
+ .icon-strip-status {
179
+ position: absolute;
180
+ bottom: 3px;
181
+ right: 3px;
182
+ width: 10px;
183
+ height: 10px;
184
+ border-radius: 50%;
185
+ background: var(--text-dimmer);
186
+ border: 2px solid var(--sidebar-bg);
187
+ opacity: 0;
188
+ transition: opacity 0.2s, background 0.3s;
189
+ }
190
+
191
+ /* Show dot only on active item or when processing */
192
+ .icon-strip-item.active .icon-strip-status,
193
+ .icon-strip-home.active .icon-strip-status,
194
+ .icon-strip-status.processing {
195
+ opacity: 1;
196
+ }
197
+
198
+ /* Connected = green */
199
+ .icon-strip-status.connected {
200
+ background: var(--success);
201
+ }
202
+
203
+ /* Processing = solid green (LED off state) */
204
+ .icon-strip-status.processing {
205
+ background: var(--success);
206
+ }
207
+
208
+ /* IO blink = HDD LED flash */
209
+ .icon-strip-status.io {
210
+ background: #fff !important;
211
+ box-shadow: 0 0 6px var(--success);
212
+ transition: none;
213
+ }
214
+
215
+ /* --- Add project button --- */
216
+ .icon-strip-add {
217
+ position: relative;
218
+ width: 48px;
219
+ height: 48px;
220
+ border-radius: 0;
221
+ background: transparent;
222
+ border: none;
223
+ display: flex;
224
+ align-items: center;
225
+ justify-content: center;
226
+ cursor: pointer;
227
+ flex-shrink: 0;
228
+ color: var(--success);
229
+ margin-top: 0;
230
+ }
231
+
232
+ .icon-strip-add::before {
233
+ content: "";
234
+ position: absolute;
235
+ width: 38px;
236
+ height: 38px;
237
+ border-radius: 12px;
238
+ background: var(--bg-alt);
239
+ transition: background 0.2s ease;
240
+ z-index: -1;
241
+ }
242
+
243
+ .icon-strip-add:hover::before {
244
+ background: var(--success);
245
+ }
246
+
247
+ .icon-strip-add:hover {
248
+ color: #fff;
249
+ }
250
+
251
+ .icon-strip-add .lucide {
252
+ width: 18px;
253
+ height: 18px;
254
+ }
255
+
256
+ /* --- Tooltip on hover --- */
257
+ .icon-strip-tooltip {
258
+ position: fixed;
259
+ left: 76px;
260
+ background: var(--code-bg);
261
+ color: var(--text);
262
+ font-size: 14px;
263
+ font-weight: 600;
264
+ padding: 8px 12px;
265
+ border-radius: 6px;
266
+ white-space: nowrap;
267
+ pointer-events: none;
268
+ opacity: 0;
269
+ transform: translateX(-4px);
270
+ transition: opacity 0.1s, transform 0.1s;
271
+ z-index: 1000;
272
+ box-shadow: 0 4px 12px rgba(var(--shadow-rgb), 0.5);
273
+ }
274
+
275
+ .icon-strip-tooltip.visible {
276
+ opacity: 1;
277
+ transform: translateX(0);
278
+ }
279
+
280
+ .icon-strip-tooltip::before {
281
+ content: "";
282
+ position: absolute;
283
+ left: -6px;
284
+ top: 50%;
285
+ transform: translateY(-50%);
286
+ border: 6px solid transparent;
287
+ border-right-color: var(--code-bg);
288
+ border-left: none;
289
+ }
290
+
291
+ /* --- Mobile: hide icon strip --- */
292
+ @media (max-width: 768px) {
293
+ #icon-strip {
294
+ display: none;
295
+ }
296
+ }