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
Binary file
@@ -0,0 +1,264 @@
1
+ /* ==========================================================================
2
+ Clay — Design aligned with Claude Desktop
3
+ ========================================================================== */
4
+
5
+ /* --- Pretendard Font --- */
6
+ @font-face {
7
+ font-family: 'Pretendard';
8
+ src: url('https://cdn.jsdelivr.net/gh/projectnoonnu/pretendard@1.0/Pretendard-Thin.woff2') format('woff2');
9
+ font-weight: 100;
10
+ font-display: swap;
11
+ }
12
+ @font-face {
13
+ font-family: 'Pretendard';
14
+ src: url('https://cdn.jsdelivr.net/gh/projectnoonnu/pretendard@1.0/Pretendard-ExtraLight.woff2') format('woff2');
15
+ font-weight: 200;
16
+ font-display: swap;
17
+ }
18
+ @font-face {
19
+ font-family: 'Pretendard';
20
+ src: url('https://cdn.jsdelivr.net/gh/projectnoonnu/pretendard@1.0/Pretendard-Light.woff2') format('woff2');
21
+ font-weight: 300;
22
+ font-display: swap;
23
+ }
24
+ @font-face {
25
+ font-family: 'Pretendard';
26
+ src: url('https://cdn.jsdelivr.net/gh/projectnoonnu/pretendard@1.0/Pretendard-Regular.woff2') format('woff2');
27
+ font-weight: 400;
28
+ font-display: swap;
29
+ }
30
+ @font-face {
31
+ font-family: 'Pretendard';
32
+ src: url('https://cdn.jsdelivr.net/gh/projectnoonnu/pretendard@1.0/Pretendard-Medium.woff2') format('woff2');
33
+ font-weight: 500;
34
+ font-display: swap;
35
+ }
36
+ @font-face {
37
+ font-family: 'Pretendard';
38
+ src: url('https://cdn.jsdelivr.net/gh/projectnoonnu/pretendard@1.0/Pretendard-SemiBold.woff2') format('woff2');
39
+ font-weight: 600;
40
+ font-display: swap;
41
+ }
42
+ @font-face {
43
+ font-family: 'Pretendard';
44
+ src: url('https://cdn.jsdelivr.net/gh/projectnoonnu/pretendard@1.0/Pretendard-Bold.woff2') format('woff2');
45
+ font-weight: 700;
46
+ font-display: swap;
47
+ }
48
+ @font-face {
49
+ font-family: 'Pretendard';
50
+ src: url('https://cdn.jsdelivr.net/gh/projectnoonnu/pretendard@1.0/Pretendard-ExtraBold.woff2') format('woff2');
51
+ font-weight: 800;
52
+ font-display: swap;
53
+ }
54
+ @font-face {
55
+ font-family: 'Pretendard';
56
+ src: url('https://cdn.jsdelivr.net/gh/projectnoonnu/pretendard@1.0/Pretendard-Black.woff2') format('woff2');
57
+ font-weight: 900;
58
+ font-display: swap;
59
+ }
60
+
61
+ /* --- Reset & Variables --- */
62
+ * {
63
+ margin: 0;
64
+ padding: 0;
65
+ box-sizing: border-box;
66
+ -webkit-tap-highlight-color: transparent;
67
+ scrollbar-width: thin;
68
+ scrollbar-color: rgba(var(--overlay-rgb),0.15) transparent;
69
+ }
70
+
71
+ ::-webkit-scrollbar { width: 6px; height: 6px; }
72
+ ::-webkit-scrollbar-track { background: transparent; }
73
+ ::-webkit-scrollbar-thumb { background: rgba(var(--overlay-rgb),0.15); border-radius: 3px; }
74
+ ::-webkit-scrollbar-thumb:hover { background: rgba(var(--overlay-rgb),0.25); }
75
+
76
+ :root {
77
+ --bg: #1F1B1B;
78
+ --bg-alt: #2A2525;
79
+ --text: #E5DED8;
80
+ --text-secondary: #C2BAB4;
81
+ --text-muted: #A09590;
82
+ --text-dimmer: #7D7370;
83
+ --accent: #FE7150;
84
+ --accent-hover: #FE8265;
85
+ --accent-bg: rgba(254, 113, 80, 0.12);
86
+ --code-bg: #1A1717;
87
+ --border: #352F2F;
88
+ --border-subtle: #282323;
89
+ --input-bg: #302A2A;
90
+ --user-bubble: #322C2C;
91
+ --error: #F74728;
92
+ --success: #09E5A3;
93
+ --warning: #E5A040;
94
+ --accent-8: rgba(254, 113, 80, 0.08);
95
+ --accent-12: rgba(254, 113, 80, 0.12);
96
+ --accent-15: rgba(254, 113, 80, 0.15);
97
+ --accent-20: rgba(254, 113, 80, 0.20);
98
+ --accent-25: rgba(254, 113, 80, 0.25);
99
+ --accent-30: rgba(254, 113, 80, 0.30);
100
+ --accent2: #5857FC;
101
+ --accent2-hover: #6C6BFC;
102
+ --accent2-bg: rgba(88, 87, 252, 0.12);
103
+ --accent2-8: rgba(88, 87, 252, 0.08);
104
+ --accent2-12: rgba(88, 87, 252, 0.12);
105
+ --accent2-15: rgba(88, 87, 252, 0.15);
106
+ --accent2-20: rgba(88, 87, 252, 0.20);
107
+ --accent2-25: rgba(88, 87, 252, 0.25);
108
+ --accent2-30: rgba(88, 87, 252, 0.30);
109
+ --error-8: rgba(247, 71, 40, 0.08);
110
+ --error-12: rgba(247, 71, 40, 0.12);
111
+ --error-15: rgba(247, 71, 40, 0.15);
112
+ --error-25: rgba(247, 71, 40, 0.25);
113
+ --success-8: rgba(9, 229, 163, 0.08);
114
+ --success-12: rgba(9, 229, 163, 0.12);
115
+ --success-15: rgba(9, 229, 163, 0.15);
116
+ --success-25: rgba(9, 229, 163, 0.25);
117
+ --warning-bg: rgba(229, 160, 64, 0.12);
118
+ --overlay-rgb: 255,255,255;
119
+ --shadow-rgb: 0,0,0;
120
+ --hl-comment: #7D7370;
121
+ --hl-keyword: #D085CC;
122
+ --hl-string: #09E5A3;
123
+ --hl-number: #FE7150;
124
+ --hl-function: #6BA0E5;
125
+ --hl-variable: #F74728;
126
+ --hl-type: #E5A040;
127
+ --hl-constant: #FE7150;
128
+ --hl-tag: #F74728;
129
+ --hl-attr: #6BA0E5;
130
+ --hl-regexp: #4EC9B0;
131
+ --hl-meta: #D09558;
132
+ --hl-builtin: #FE7150;
133
+ --hl-symbol: #D09558;
134
+ --hl-addition: #09E5A3;
135
+ --hl-deletion: #F74728;
136
+ --sidebar-bg: #1C1818;
137
+ --sidebar-hover: #252020;
138
+ --sidebar-active: #302A2A;
139
+ --safe-top: env(safe-area-inset-top, 0px);
140
+ --safe-bottom: env(safe-area-inset-bottom, 0px);
141
+ --content-width: 760px;
142
+ }
143
+
144
+ ::selection {
145
+ background: rgba(9, 229, 163, 0.25);
146
+ }
147
+
148
+ html, body {
149
+ height: 100%;
150
+ background: var(--bg);
151
+ color: var(--text);
152
+ font-family: "Pretendard", system-ui, -apple-system, BlinkMacSystemFont, sans-serif;
153
+ font-size: 15px;
154
+ line-height: 1.6;
155
+ overflow: hidden;
156
+ -webkit-font-smoothing: antialiased;
157
+ -moz-osx-font-smoothing: grayscale;
158
+ }
159
+
160
+ /* --- Lucide icons --- */
161
+ .lucide {
162
+ vertical-align: middle;
163
+ flex-shrink: 0;
164
+ }
165
+
166
+ .icon-spin {
167
+ display: inline-flex;
168
+ align-items: center;
169
+ justify-content: center;
170
+ }
171
+
172
+ .icon-spin .lucide {
173
+ animation: spin 1s linear infinite;
174
+ }
175
+
176
+ .icon-spin-inline { animation: spin 1s linear infinite; }
177
+
178
+ /* --- Layout --- */
179
+ #layout {
180
+ display: flex;
181
+ flex-direction: column;
182
+ height: 100%;
183
+ height: 100dvh;
184
+ }
185
+
186
+ #layout-body {
187
+ flex: 1;
188
+ display: flex;
189
+ min-height: 0;
190
+ background: var(--sidebar-bg);
191
+ position: relative;
192
+ }
193
+
194
+ #sidebar-column {
195
+ display: flex;
196
+ flex-direction: column;
197
+ flex-shrink: 0;
198
+ min-height: 0;
199
+ overflow: hidden;
200
+ }
201
+
202
+ /* --- Main Area (sidebar + resize-handle + main-column) --- */
203
+ #main-area {
204
+ flex: 1;
205
+ display: flex;
206
+ min-width: 0;
207
+ min-height: 0;
208
+ overflow: hidden;
209
+ position: relative;
210
+ background: var(--bg);
211
+ border-top-left-radius: 8px;
212
+ border-top: 1px solid var(--border-subtle);
213
+ border-left: 1px solid var(--border-subtle);
214
+ }
215
+
216
+ /* --- Main Column --- */
217
+ #main-column {
218
+ flex: 1;
219
+ display: flex;
220
+ flex-direction: column;
221
+ min-width: 0;
222
+ min-height: 0;
223
+ overflow: hidden;
224
+ }
225
+
226
+ /* --- Main Panels (app + file-viewer + terminal side-by-side) --- */
227
+ #main-panels {
228
+ flex: 1;
229
+ display: flex;
230
+ min-width: 0;
231
+ min-height: 0;
232
+ overflow: hidden;
233
+ }
234
+
235
+ /* --- Toast --- */
236
+ .toast {
237
+ position: fixed;
238
+ bottom: 80px;
239
+ left: 50%;
240
+ transform: translateX(-50%) translateY(8px);
241
+ background: var(--bg-alt);
242
+ color: var(--text);
243
+ border: 1px solid var(--border);
244
+ border-radius: 10px;
245
+ padding: 8px 18px;
246
+ font-size: 13px;
247
+ font-weight: 500;
248
+ z-index: 400;
249
+ opacity: 0;
250
+ transition: opacity 0.2s, transform 0.2s;
251
+ pointer-events: none;
252
+ box-shadow: 0 4px 20px rgba(var(--shadow-rgb), 0.3);
253
+ }
254
+
255
+ .toast.visible {
256
+ opacity: 1;
257
+ transform: translateX(-50%) translateY(0);
258
+ }
259
+ .toast.toast-warn {
260
+ background: var(--warning-bg);
261
+ border-color: var(--warning);
262
+ color: var(--warning);
263
+ }
264
+
@@ -0,0 +1,128 @@
1
+ /* ==========================================================================
2
+ Diff Views (unified + split)
3
+ ========================================================================== */
4
+
5
+ .diff-unified,
6
+ .diff-split-view {
7
+ overflow: auto;
8
+ font-family: "Roboto Mono", monospace;
9
+ font-size: 12px;
10
+ line-height: 1.5;
11
+ }
12
+
13
+ .diff-table {
14
+ border-collapse: collapse;
15
+ width: 100%;
16
+ table-layout: fixed;
17
+ }
18
+
19
+ /* --- Line numbers --- */
20
+ .diff-ln {
21
+ width: 40px;
22
+ min-width: 40px;
23
+ padding: 0 8px 0 4px;
24
+ text-align: right;
25
+ color: var(--text-dimmer);
26
+ user-select: none;
27
+ vertical-align: top;
28
+ white-space: nowrap;
29
+ opacity: 0.6;
30
+ border-right: 1px solid var(--border-subtle);
31
+ }
32
+
33
+ /* --- Marker column (unified only) --- */
34
+ .diff-marker {
35
+ width: 16px;
36
+ min-width: 16px;
37
+ padding: 0 2px;
38
+ text-align: center;
39
+ color: var(--text-dimmer);
40
+ user-select: none;
41
+ vertical-align: top;
42
+ }
43
+
44
+ /* --- Code cells --- */
45
+ .diff-code {
46
+ padding: 0 12px;
47
+ white-space: pre;
48
+ vertical-align: top;
49
+ tab-size: 2;
50
+ }
51
+
52
+ /* --- Unified diff row colors --- */
53
+ .diff-row-remove {
54
+ background: var(--error-12);
55
+ }
56
+
57
+ .diff-row-remove .diff-marker {
58
+ color: var(--error);
59
+ }
60
+
61
+ .diff-row-add {
62
+ background: var(--success-12);
63
+ }
64
+
65
+ .diff-row-add .diff-marker {
66
+ color: var(--success);
67
+ }
68
+
69
+ /* --- Hunk header row (patch diffs) --- */
70
+ .diff-row-hunk {
71
+ background: rgba(128, 128, 128, 0.05);
72
+ }
73
+
74
+ .diff-row-hunk .diff-hunk-text {
75
+ color: var(--text-dimmer);
76
+ font-style: italic;
77
+ padding: 2px 12px;
78
+ }
79
+
80
+ /* --- Split diff specifics --- */
81
+ .diff-table-split .diff-code-old,
82
+ .diff-table-split .diff-code-new {
83
+ max-width: 0;
84
+ overflow: hidden;
85
+ }
86
+
87
+ /* Split: divider between left and right */
88
+ .diff-table-split .diff-code-old {
89
+ border-right: 1px solid var(--border-subtle);
90
+ }
91
+
92
+ /* Split: change rows */
93
+ .diff-row-change .diff-code-old,
94
+ .diff-row-remove .diff-code-old {
95
+ background: var(--error-12);
96
+ }
97
+
98
+ .diff-row-change .diff-code-new,
99
+ .diff-row-add .diff-code-new {
100
+ background: var(--success-12);
101
+ }
102
+
103
+ /* Empty cells in split view */
104
+ .diff-row-remove .diff-code-new,
105
+ .diff-row-add .diff-code-old {
106
+ background: rgba(128, 128, 128, 0.03);
107
+ }
108
+
109
+ /* --- Compact mode for inline previews --- */
110
+ .diff-compact .diff-table {
111
+ font-size: 11px;
112
+ line-height: 1.4;
113
+ }
114
+
115
+ .diff-compact .diff-ln {
116
+ width: 28px;
117
+ min-width: 28px;
118
+ padding: 0 4px 0 2px;
119
+ }
120
+
121
+ .diff-compact .diff-code {
122
+ padding: 0 6px;
123
+ }
124
+
125
+ .diff-compact .diff-marker {
126
+ width: 12px;
127
+ min-width: 12px;
128
+ }