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,354 @@
1
+ /* ==========================================================================
2
+ Mobile Bottom Tab Bar
3
+ ========================================================================== */
4
+
5
+ #mobile-tab-bar {
6
+ display: none;
7
+ }
8
+
9
+ #mobile-sheet {
10
+ display: none;
11
+ }
12
+
13
+ @media (max-width: 768px) {
14
+ #mobile-tab-bar {
15
+ position: fixed;
16
+ bottom: 0;
17
+ left: 0;
18
+ right: 0;
19
+ height: 56px;
20
+ padding-bottom: var(--safe-bottom);
21
+ background: var(--bg);
22
+ border-top: 1px solid var(--border);
23
+ display: flex;
24
+ align-items: center;
25
+ justify-content: space-around;
26
+ z-index: 200;
27
+ }
28
+
29
+ /* --- Tab item --- */
30
+ .mobile-tab {
31
+ flex: 1;
32
+ display: flex;
33
+ flex-direction: column;
34
+ align-items: center;
35
+ justify-content: center;
36
+ gap: 2px;
37
+ height: 100%;
38
+ background: none;
39
+ border: none;
40
+ color: var(--text-dimmer);
41
+ cursor: pointer;
42
+ padding: 0;
43
+ -webkit-tap-highlight-color: transparent;
44
+ transition: color 0.15s;
45
+ }
46
+
47
+ .mobile-tab .lucide {
48
+ width: 20px;
49
+ height: 20px;
50
+ }
51
+
52
+ .mobile-tab-label {
53
+ font-size: 10px;
54
+ font-family: "Pretendard", system-ui, sans-serif;
55
+ font-weight: 500;
56
+ line-height: 1;
57
+ }
58
+
59
+ .mobile-tab:active {
60
+ color: var(--text-secondary);
61
+ }
62
+
63
+ .mobile-tab.active {
64
+ color: var(--accent);
65
+ }
66
+
67
+ /* --- Badge on tab icon (e.g. terminal count) --- */
68
+ .mobile-tab-badge {
69
+ position: absolute;
70
+ top: 4px;
71
+ right: calc(50% - 18px);
72
+ background: var(--success);
73
+ color: #fff;
74
+ font-size: 9px;
75
+ font-weight: 700;
76
+ font-family: "Roboto Mono", monospace;
77
+ min-width: 14px;
78
+ height: 14px;
79
+ border-radius: 7px;
80
+ display: inline-flex;
81
+ align-items: center;
82
+ justify-content: center;
83
+ padding: 0 3px;
84
+ line-height: 1;
85
+ }
86
+
87
+ .mobile-tab-badge.hidden { display: none; }
88
+
89
+ .mobile-tab { position: relative; }
90
+
91
+ /* --- Center "+" button (raised) --- */
92
+ .mobile-tab-new {
93
+ flex: none;
94
+ width: 48px;
95
+ height: 48px;
96
+ border-radius: 50%;
97
+ background: var(--accent);
98
+ color: #fff;
99
+ border: none;
100
+ display: flex;
101
+ align-items: center;
102
+ justify-content: center;
103
+ cursor: pointer;
104
+ margin-top: -12px;
105
+ box-shadow: 0 2px 12px rgba(var(--shadow-rgb), 0.25);
106
+ -webkit-tap-highlight-color: transparent;
107
+ transition: transform 0.1s, box-shadow 0.15s;
108
+ }
109
+
110
+ .mobile-tab-new .lucide {
111
+ width: 24px;
112
+ height: 24px;
113
+ }
114
+
115
+ .mobile-tab-new:active {
116
+ transform: scale(0.92);
117
+ box-shadow: 0 1px 6px rgba(var(--shadow-rgb), 0.2);
118
+ }
119
+
120
+ /* --- Mobile project list items (inside sidebar) --- */
121
+ .mobile-project-item {
122
+ display: flex;
123
+ align-items: center;
124
+ gap: 10px;
125
+ width: 100%;
126
+ padding: 10px 12px;
127
+ background: none;
128
+ border: none;
129
+ border-radius: 8px;
130
+ color: var(--text-secondary);
131
+ font-family: "Pretendard", system-ui, sans-serif;
132
+ font-size: 14px;
133
+ cursor: pointer;
134
+ text-align: left;
135
+ -webkit-tap-highlight-color: transparent;
136
+ transition: background 0.15s;
137
+ }
138
+
139
+ .mobile-project-item:active {
140
+ background: rgba(var(--overlay-rgb), 0.06);
141
+ }
142
+
143
+ .mobile-project-item.active {
144
+ color: var(--text);
145
+ background: rgba(var(--overlay-rgb), 0.06);
146
+ }
147
+
148
+ .mobile-project-abbrev {
149
+ width: 32px;
150
+ height: 32px;
151
+ border-radius: 8px;
152
+ background: var(--bg-alt);
153
+ display: flex;
154
+ align-items: center;
155
+ justify-content: center;
156
+ font-size: 13px;
157
+ font-weight: 600;
158
+ color: var(--text-secondary);
159
+ flex-shrink: 0;
160
+ }
161
+
162
+ .mobile-project-item.active .mobile-project-abbrev {
163
+ background: var(--accent);
164
+ color: #fff;
165
+ }
166
+
167
+ .mobile-project-name {
168
+ flex: 1;
169
+ overflow: hidden;
170
+ text-overflow: ellipsis;
171
+ white-space: nowrap;
172
+ }
173
+
174
+ .mobile-project-processing {
175
+ width: 8px;
176
+ height: 8px;
177
+ border-radius: 50%;
178
+ background: var(--success);
179
+ flex-shrink: 0;
180
+ }
181
+
182
+ /* ==========================================================================
183
+ Mobile Sheet — fullscreen overlay for Projects / Sessions
184
+ ========================================================================== */
185
+
186
+ #mobile-sheet {
187
+ position: fixed;
188
+ inset: 0;
189
+ z-index: 250;
190
+ display: flex;
191
+ flex-direction: column;
192
+ justify-content: flex-end;
193
+ }
194
+
195
+ #mobile-sheet.hidden { display: none; }
196
+
197
+ /* Blurred backdrop */
198
+ .mobile-sheet-backdrop {
199
+ position: absolute;
200
+ inset: 0;
201
+ background: rgba(var(--shadow-rgb), 0.45);
202
+ backdrop-filter: blur(16px);
203
+ -webkit-backdrop-filter: blur(16px);
204
+ }
205
+
206
+ /* Content card — slides up from bottom */
207
+ .mobile-sheet-content {
208
+ position: relative;
209
+ background: var(--bg);
210
+ border-radius: 20px 20px 0 0;
211
+ max-height: 80vh;
212
+ display: flex;
213
+ flex-direction: column;
214
+ box-shadow: 0 -4px 32px rgba(var(--shadow-rgb), 0.2);
215
+ animation: sheetSlideUp 0.28s ease-out;
216
+ }
217
+
218
+ /* Taller sheet for file browser */
219
+ #mobile-sheet.sheet-files .mobile-sheet-content {
220
+ max-height: 90vh;
221
+ }
222
+
223
+ #mobile-sheet.closing .mobile-sheet-content {
224
+ animation: sheetSlideDown 0.22s ease-in forwards;
225
+ }
226
+
227
+ #mobile-sheet.closing .mobile-sheet-backdrop {
228
+ animation: sheetFadeOut 0.22s ease-in forwards;
229
+ }
230
+
231
+ @keyframes sheetSlideUp {
232
+ from { transform: translateY(100%); }
233
+ to { transform: translateY(0); }
234
+ }
235
+
236
+ @keyframes sheetSlideDown {
237
+ from { transform: translateY(0); }
238
+ to { transform: translateY(100%); }
239
+ }
240
+
241
+ @keyframes sheetFadeOut {
242
+ from { opacity: 1; }
243
+ to { opacity: 0; }
244
+ }
245
+
246
+ /* Drag handle pill */
247
+ .mobile-sheet-handle {
248
+ width: 36px;
249
+ height: 4px;
250
+ border-radius: 2px;
251
+ background: var(--text-dimmer);
252
+ opacity: 0.4;
253
+ margin: 10px auto 0;
254
+ flex-shrink: 0;
255
+ }
256
+
257
+ /* Header */
258
+ .mobile-sheet-header {
259
+ display: flex;
260
+ align-items: center;
261
+ padding: 12px 16px 8px;
262
+ flex-shrink: 0;
263
+ }
264
+
265
+ .mobile-sheet-title {
266
+ flex: 1;
267
+ font-family: "Pretendard", system-ui, sans-serif;
268
+ font-size: 17px;
269
+ font-weight: 700;
270
+ color: var(--text);
271
+ }
272
+
273
+ .mobile-sheet-close {
274
+ width: 32px;
275
+ height: 32px;
276
+ border-radius: 50%;
277
+ border: none;
278
+ background: rgba(var(--overlay-rgb), 0.06);
279
+ color: var(--text-secondary);
280
+ display: flex;
281
+ align-items: center;
282
+ justify-content: center;
283
+ cursor: pointer;
284
+ -webkit-tap-highlight-color: transparent;
285
+ }
286
+
287
+ .mobile-sheet-close .lucide {
288
+ width: 16px;
289
+ height: 16px;
290
+ }
291
+
292
+ /* Scrollable list */
293
+ .mobile-sheet-list {
294
+ flex: 1;
295
+ overflow-y: auto;
296
+ -webkit-overflow-scrolling: touch;
297
+ padding: 4px 8px;
298
+ padding-bottom: calc(var(--safe-bottom) + 16px);
299
+ }
300
+
301
+ /* --- Session items inside sheet --- */
302
+ .mobile-session-item {
303
+ display: flex;
304
+ align-items: center;
305
+ gap: 10px;
306
+ width: 100%;
307
+ padding: 12px 12px;
308
+ background: none;
309
+ border: none;
310
+ border-radius: 10px;
311
+ color: var(--text-secondary);
312
+ font-family: "Pretendard", system-ui, sans-serif;
313
+ font-size: 15px;
314
+ cursor: pointer;
315
+ text-align: left;
316
+ -webkit-tap-highlight-color: transparent;
317
+ transition: background 0.15s;
318
+ }
319
+
320
+ .mobile-session-item:active {
321
+ background: rgba(var(--overlay-rgb), 0.06);
322
+ }
323
+
324
+ .mobile-session-item.active {
325
+ color: var(--text);
326
+ background: rgba(var(--overlay-rgb), 0.06);
327
+ font-weight: 600;
328
+ }
329
+
330
+ .mobile-session-title {
331
+ flex: 1;
332
+ overflow: hidden;
333
+ text-overflow: ellipsis;
334
+ white-space: nowrap;
335
+ }
336
+
337
+ .mobile-session-processing {
338
+ width: 7px;
339
+ height: 7px;
340
+ border-radius: 50%;
341
+ background: var(--accent);
342
+ flex-shrink: 0;
343
+ animation: pulse 1.5s ease-in-out infinite;
344
+ }
345
+
346
+ /* Date group header inside sheet */
347
+ .mobile-sheet-group {
348
+ padding: 14px 12px 6px;
349
+ font-size: 12px;
350
+ font-weight: 600;
351
+ color: var(--text-dimmer);
352
+ letter-spacing: 0.3px;
353
+ }
354
+ }