cicy-desktop 2.1.69 → 2.1.71

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 (61) hide show
  1. package/package.json +7 -7
  2. package/src/backends/homepage-react/assets/index-BpljolQs.js +365 -0
  3. package/src/backends/homepage-react/assets/{index-BniEbx_j.css → index-C9AZlTew.css} +1 -1
  4. package/src/backends/homepage-react/index.html +2 -2
  5. package/src/backends/local-teams.js +42 -4
  6. package/src/backends/sidecar-ipc.js +23 -1
  7. package/src/i18n/locales/en.json +9 -7
  8. package/src/i18n/locales/zh-CN.json +9 -7
  9. package/src/sidecar/cicy-code.js +54 -111
  10. package/src/sidecar/localbin.js +133 -0
  11. package/src/sidecar/native.js +4 -2
  12. package/src/sidecar/runtime.js +7 -3
  13. package/workers/render/src/App.css +156 -10
  14. package/workers/render/src/App.jsx +254 -39
  15. package/.env.dev +0 -7
  16. package/src/backends/homepage-react/assets/index-B8gGhz8B.js +0 -365
  17. package/workers/render.bak.20260528-2338/DESIGN_v2.md +0 -254
  18. package/workers/render.bak.20260528-2338/index.html +0 -12
  19. package/workers/render.bak.20260528-2338/package-lock.json +0 -827
  20. package/workers/render.bak.20260528-2338/package.json +0 -19
  21. package/workers/render.bak.20260528-2338/public/_headers +0 -5
  22. package/workers/render.bak.20260528-2338/public/manifest.json +0 -6
  23. package/workers/render.bak.20260528-2338/src/App.css +0 -224
  24. package/workers/render.bak.20260528-2338/src/App.jsx +0 -1028
  25. package/workers/render.bak.20260528-2338/src/api.js +0 -285
  26. package/workers/render.bak.20260528-2338/src/cicycode-ops.js +0 -222
  27. package/workers/render.bak.20260528-2338/src/components/BackendCard.css +0 -299
  28. package/workers/render.bak.20260528-2338/src/components/BackendCard.jsx +0 -133
  29. package/workers/render.bak.20260528-2338/src/components/BackendModal.css +0 -161
  30. package/workers/render.bak.20260528-2338/src/components/BackendModal.jsx +0 -199
  31. package/workers/render.bak.20260528-2338/src/components/Button.css +0 -72
  32. package/workers/render.bak.20260528-2338/src/components/Button.jsx +0 -37
  33. package/workers/render.bak.20260528-2338/src/components/Card.css +0 -42
  34. package/workers/render.bak.20260528-2338/src/components/Card.jsx +0 -21
  35. package/workers/render.bak.20260528-2338/src/components/Icon.jsx +0 -30
  36. package/workers/render.bak.20260528-2338/src/components/Menu.css +0 -55
  37. package/workers/render.bak.20260528-2338/src/components/Menu.jsx +0 -91
  38. package/workers/render.bak.20260528-2338/src/components/SidecarBanner.css +0 -79
  39. package/workers/render.bak.20260528-2338/src/components/SidecarBanner.jsx +0 -84
  40. package/workers/render.bak.20260528-2338/src/components/StatusChip.css +0 -19
  41. package/workers/render.bak.20260528-2338/src/components/StatusChip.jsx +0 -31
  42. package/workers/render.bak.20260528-2338/src/components/Toast.css +0 -31
  43. package/workers/render.bak.20260528-2338/src/components/Toast.jsx +0 -23
  44. package/workers/render.bak.20260528-2338/src/components/WslSetupBanner.css +0 -464
  45. package/workers/render.bak.20260528-2338/src/components/WslSetupBanner.jsx +0 -716
  46. package/workers/render.bak.20260528-2338/src/dockerInstaller.js +0 -0
  47. package/workers/render.bak.20260528-2338/src/i18n/en.json +0 -116
  48. package/workers/render.bak.20260528-2338/src/i18n/fr.json +0 -116
  49. package/workers/render.bak.20260528-2338/src/i18n/index.js +0 -69
  50. package/workers/render.bak.20260528-2338/src/i18n/ja.json +0 -116
  51. package/workers/render.bak.20260528-2338/src/i18n/zh-CN.json +0 -121
  52. package/workers/render.bak.20260528-2338/src/main.js +0 -475
  53. package/workers/render.bak.20260528-2338/src/main.jsx +0 -18
  54. package/workers/render.bak.20260528-2338/src/style.css +0 -275
  55. package/workers/render.bak.20260528-2338/src/styles/base.css +0 -98
  56. package/workers/render.bak.20260528-2338/src/styles/tokens.css +0 -90
  57. package/workers/render.bak.20260528-2338/src/tos.js +0 -72
  58. package/workers/render.bak.20260528-2338/src/worker.js +0 -40
  59. package/workers/render.bak.20260528-2338/src/wslInstaller.js +0 -1563
  60. package/workers/render.bak.20260528-2338/vite.config.js +0 -36
  61. package/workers/render.bak.20260528-2338/wrangler.toml +0 -17
@@ -1,275 +0,0 @@
1
- /* CiCy Desktop — Homepage. Loaded inside Electron (homepage-window.js)
2
- or in a plain browser tab (Vite dev). Same stylesheet for both. */
3
-
4
- :root {
5
- --bg: #0f1115;
6
- --bg-2: #161a21;
7
- --bg-card: #181c24;
8
- --bg-card-hover: #1c2230;
9
- --border: #232938;
10
- --border-strong: #2e3548;
11
- --fg: #e6e9ef;
12
- --fg-dim: #9aa3b2;
13
- --fg-mute: #5e6678;
14
- --accent: #5b8df7;
15
- --accent-2: #3c6fde;
16
- --green: #4ade80;
17
- --yellow: #facc15;
18
- --red: #f87171;
19
- --gray: #6b7280;
20
- --radius: 8px;
21
- --shadow: 0 1px 0 rgba(255,255,255,0.02), 0 8px 24px rgba(0,0,0,0.25);
22
- }
23
-
24
- * { box-sizing: border-box; }
25
- html, body { margin: 0; padding: 0; height: 100%; background: var(--bg); color: var(--fg); }
26
- body {
27
- font: 13px -apple-system, BlinkMacSystemFont, "SF Pro Text", "Helvetica Neue", system-ui, sans-serif;
28
- -webkit-font-smoothing: antialiased;
29
- display: flex; flex-direction: column; min-height: 100vh;
30
- }
31
-
32
- .topbar {
33
- -webkit-app-region: drag;
34
- display: flex; align-items: center; gap: 12px;
35
- padding: 10px 20px 10px 84px;
36
- background: var(--bg-2);
37
- border-bottom: 1px solid var(--border);
38
- user-select: none;
39
- }
40
- .topbar .brand {
41
- font-weight: 600; font-size: 13px; letter-spacing: 0.2px; color: var(--fg);
42
- display: flex; align-items: center; gap: 8px;
43
- }
44
- .topbar .brand .dot { width: 8px; height: 8px; border-radius: 50%; background: var(--accent); box-shadow: 0 0 8px var(--accent); }
45
- .topbar .ver { font-size: 11px; color: var(--fg-mute); margin-left: 4px; }
46
- .topbar .spacer { flex: 1; }
47
- .topbar .env-pill {
48
- -webkit-app-region: no-drag;
49
- background: rgba(91, 141, 247, 0.12);
50
- color: var(--accent);
51
- font-size: 10px; font-weight: 600; letter-spacing: 0.5px;
52
- padding: 3px 7px; border-radius: 3px;
53
- }
54
- .topbar button {
55
- -webkit-app-region: no-drag;
56
- background: transparent; border: 1px solid var(--border); color: var(--fg-dim);
57
- padding: 5px 10px; font: inherit; font-size: 12px;
58
- border-radius: 5px; cursor: pointer;
59
- display: inline-flex; align-items: center; gap: 6px;
60
- }
61
- .topbar button:hover { color: var(--fg); border-color: var(--border-strong); }
62
-
63
- main {
64
- flex: 1; padding: 24px 24px 40px;
65
- max-width: 920px; width: 100%; margin: 0 auto;
66
- }
67
- .section-head {
68
- display: flex; align-items: center; justify-content: space-between;
69
- margin: 18px 0 10px;
70
- }
71
- .section-head h2 {
72
- margin: 0;
73
- font-size: 11px; font-weight: 600; letter-spacing: 1px;
74
- text-transform: uppercase; color: var(--fg-mute);
75
- }
76
- .section-head .actions { display: flex; gap: 8px; }
77
- .section-head .btn-add {
78
- -webkit-app-region: no-drag;
79
- background: transparent; border: 1px dashed var(--border-strong);
80
- color: var(--fg-dim); padding: 4px 10px; font: inherit; font-size: 11px;
81
- border-radius: 4px; cursor: pointer;
82
- }
83
- .section-head .btn-add:hover { color: var(--fg); border-color: var(--accent); }
84
-
85
- .card {
86
- background: var(--bg-card);
87
- border: 1px solid var(--border);
88
- border-radius: var(--radius);
89
- box-shadow: var(--shadow);
90
- transition: border-color 120ms ease;
91
- margin-bottom: 10px;
92
- overflow: hidden;
93
- }
94
- .card:hover { border-color: var(--border-strong); }
95
- .card-row { padding: 14px 16px; display: flex; align-items: center; gap: 12px; }
96
- .card-row + .card-row { border-top: 1px solid var(--border); }
97
- .status-dot {
98
- width: 10px; height: 10px; border-radius: 50%;
99
- background: var(--gray); flex-shrink: 0;
100
- box-shadow: 0 0 6px transparent;
101
- transition: background 120ms, box-shadow 120ms;
102
- }
103
- .status-dot.s-up { background: var(--green); box-shadow: 0 0 6px rgba(74, 222, 128, 0.6); }
104
- .status-dot.s-warn { background: var(--yellow); }
105
- .status-dot.s-down { background: var(--red); }
106
- .status-dot.s-unknown { background: var(--gray); }
107
-
108
- .head-text { flex: 1; min-width: 0; }
109
- .head-text .name { font-size: 14px; font-weight: 600; color: var(--fg); display: flex; align-items: center; gap: 8px; }
110
- .head-text .meta { font-size: 11px; color: var(--fg-mute); margin-top: 3px; word-break: break-all; }
111
- .head-right { display: flex; align-items: center; gap: 10px; font-size: 11px; color: var(--fg-dim); }
112
- .badge { background: rgba(91, 141, 247, 0.12); color: var(--accent); font-size: 10px; padding: 2px 6px; border-radius: 3px; font-weight: 600; letter-spacing: 0.4px; }
113
-
114
- .metric-row { padding: 10px 16px; background: rgba(255,255,255,0.012); display: flex; gap: 24px; font-size: 11px; color: var(--fg-dim); flex-wrap: wrap; }
115
- .metric-row .m { display: flex; align-items: baseline; gap: 6px; }
116
- .metric-row .m .k { color: var(--fg-mute); font-size: 10px; text-transform: uppercase; letter-spacing: 0.5px; }
117
- .metric-row .m .v { color: var(--fg); font-weight: 500; font-size: 12px; }
118
-
119
- .action-row { padding: 10px 12px; display: flex; gap: 6px; flex-wrap: wrap; background: rgba(0,0,0,0.15); }
120
- .action-row button {
121
- background: transparent;
122
- border: 1px solid var(--border-strong);
123
- color: var(--fg-dim);
124
- padding: 5px 12px;
125
- font: inherit; font-size: 12px;
126
- border-radius: 4px;
127
- cursor: pointer;
128
- display: inline-flex; align-items: center; gap: 5px;
129
- transition: all 120ms;
130
- }
131
- .action-row button:hover { color: var(--fg); border-color: var(--accent); background: rgba(91, 141, 247, 0.06); }
132
- .action-row button.primary { background: var(--accent-2); color: #fff; border-color: var(--accent-2); }
133
- .action-row button.primary:hover { background: var(--accent); border-color: var(--accent); }
134
- .action-row button.danger:hover { color: var(--red); border-color: var(--red); background: rgba(248, 113, 113, 0.06); }
135
- .action-row .grow { flex: 1; }
136
- .action-row .upd-tip { font-size: 11px; color: var(--yellow); align-self: center; padding: 0 6px; }
137
-
138
- .recent {
139
- margin-top: 28px;
140
- padding-top: 16px;
141
- border-top: 1px solid var(--border);
142
- }
143
- .recent-row {
144
- display: flex; align-items: center; gap: 12px;
145
- padding: 8px 4px;
146
- font-size: 12px;
147
- color: var(--fg-dim);
148
- border-bottom: 1px solid rgba(255,255,255,0.02);
149
- }
150
- .recent-row .label { flex: 1; }
151
- .recent-row .label .name { color: var(--fg); font-weight: 500; }
152
- .recent-row .label .sub { font-size: 11px; color: var(--fg-mute); margin-top: 2px; }
153
- .recent-row .ago { font-size: 11px; color: var(--fg-mute); margin-right: 8px; }
154
- .recent-row button { background: transparent; border: 1px solid var(--border-strong); color: var(--fg-dim); padding: 4px 10px; border-radius: 4px; cursor: pointer; font: inherit; font-size: 11px; }
155
- .recent-row button:hover { color: var(--fg); border-color: var(--accent); }
156
-
157
- .add-form {
158
- background: var(--bg-card);
159
- border: 1px solid var(--border);
160
- border-radius: var(--radius);
161
- padding: 14px 16px;
162
- margin-bottom: 10px;
163
- display: none;
164
- }
165
- .add-form.open { display: block; }
166
- .add-form .grid {
167
- display: grid; grid-template-columns: 70px 1fr;
168
- gap: 8px 12px; align-items: center;
169
- }
170
- .add-form label { font-size: 12px; color: var(--fg-mute); }
171
- .add-form input {
172
- background: var(--bg);
173
- color: var(--fg);
174
- border: 1px solid var(--border-strong);
175
- border-radius: 4px;
176
- padding: 6px 9px;
177
- font: inherit; font-size: 12px;
178
- }
179
- .add-form input:focus { outline: none; border-color: var(--accent); }
180
- .add-form .footer { display: flex; align-items: center; justify-content: space-between; margin-top: 12px; }
181
- .add-form .status { font-size: 11px; color: var(--fg-mute); }
182
- .add-form .status.ok { color: var(--green); }
183
- .add-form .status.err { color: var(--red); }
184
- .add-form .btns { display: flex; gap: 6px; }
185
- .add-form button {
186
- background: var(--accent-2); color: #fff; border: 1px solid var(--accent-2);
187
- padding: 5px 14px; border-radius: 4px; cursor: pointer; font: inherit; font-size: 12px;
188
- }
189
- .add-form button.cancel { background: transparent; border-color: var(--border-strong); color: var(--fg-dim); }
190
- .add-form button:hover { background: var(--accent); border-color: var(--accent); }
191
- .add-form button.cancel:hover { background: rgba(255,255,255,0.04); }
192
-
193
- .empty { text-align: center; color: var(--fg-mute); padding: 20px; font-size: 12px; }
194
-
195
- .toast {
196
- position: fixed; bottom: 18px; left: 50%; transform: translateX(-50%);
197
- background: var(--bg-card); border: 1px solid var(--border-strong);
198
- padding: 8px 16px; border-radius: 6px;
199
- color: var(--fg); font-size: 12px;
200
- box-shadow: var(--shadow);
201
- opacity: 0; transition: opacity 200ms;
202
- pointer-events: none;
203
- }
204
- .toast.show { opacity: 1; }
205
- .toast.err { border-color: var(--red); color: var(--red); }
206
-
207
- /* --- ToS overlay --- */
208
- .tos-overlay {
209
- position: fixed; inset: 0;
210
- background: rgba(15, 17, 21, 0.92);
211
- backdrop-filter: blur(4px);
212
- display: flex; align-items: center; justify-content: center;
213
- z-index: 1000;
214
- }
215
- .tos-modal {
216
- width: min(680px, 92vw); max-height: 86vh;
217
- background: var(--bg-card);
218
- border: 1px solid var(--border-strong);
219
- border-radius: 10px;
220
- box-shadow: 0 18px 48px rgba(0,0,0,0.5);
221
- display: flex; flex-direction: column;
222
- overflow: hidden;
223
- }
224
- .tos-header {
225
- padding: 16px 20px;
226
- border-bottom: 1px solid var(--border);
227
- display: flex; align-items: center; gap: 10px;
228
- }
229
- .tos-header .icon { font-size: 18px; }
230
- .tos-header h2 { margin: 0; font-size: 15px; font-weight: 600; color: var(--fg); }
231
- .tos-header .ver { font-size: 11px; color: var(--fg-mute); margin-left: auto; }
232
- .tos-body {
233
- flex: 1; overflow-y: auto;
234
- padding: 18px 22px;
235
- font-size: 13px; line-height: 1.65;
236
- color: var(--fg);
237
- white-space: pre-wrap;
238
- font-family: -apple-system, system-ui, sans-serif;
239
- }
240
- .tos-body h1, .tos-body h2, .tos-body h3 {
241
- color: var(--fg);
242
- margin: 16px 0 8px;
243
- }
244
- .tos-body h1 { font-size: 16px; }
245
- .tos-body h2 { font-size: 14px; font-weight: 600; color: var(--accent); }
246
- .tos-body strong { color: var(--fg); }
247
- .tos-body code { font-size: 12px; color: var(--accent); padding: 1px 4px; background: rgba(91,141,247,0.08); border-radius: 3px; }
248
- .tos-footer {
249
- padding: 14px 20px;
250
- border-top: 1px solid var(--border);
251
- display: flex; align-items: center; gap: 12px;
252
- background: rgba(0,0,0,0.2);
253
- }
254
- .tos-footer label {
255
- font-size: 12px; color: var(--fg-dim); cursor: pointer;
256
- display: flex; align-items: center; gap: 8px;
257
- flex: 1;
258
- }
259
- .tos-footer input[type=checkbox] {
260
- width: 14px; height: 14px; cursor: pointer; accent-color: var(--accent);
261
- }
262
- .tos-footer button {
263
- font: inherit; font-size: 13px; font-weight: 500;
264
- padding: 8px 18px; border-radius: 5px; cursor: pointer;
265
- border: 1px solid transparent;
266
- }
267
- .tos-footer .decline {
268
- background: transparent; border-color: var(--border-strong); color: var(--fg-dim);
269
- }
270
- .tos-footer .decline:hover { color: var(--red); border-color: var(--red); }
271
- .tos-footer .accept {
272
- background: var(--accent-2); color: #fff; border-color: var(--accent-2);
273
- }
274
- .tos-footer .accept:disabled { opacity: 0.4; cursor: not-allowed; }
275
- .tos-footer .accept:not(:disabled):hover { background: var(--accent); border-color: var(--accent); }
@@ -1,98 +0,0 @@
1
- *, *::before, *::after { box-sizing: border-box; }
2
-
3
- html, body, #root {
4
- height: 100%;
5
- margin: 0;
6
- padding: 0;
7
- }
8
-
9
- body {
10
- font: var(--t-sm)/var(--lh-base) var(--font-sans);
11
- background: var(--bg);
12
- color: var(--fg);
13
- -webkit-font-smoothing: antialiased;
14
- text-rendering: optimizeLegibility;
15
- /* App-wide: text is unselectable by default — feels native, prevents
16
- accidental drag-to-select. Inputs and explicit .selectable get an
17
- allow-list below. */
18
- user-select: none;
19
- -webkit-user-select: none;
20
- }
21
-
22
- /* Allow text selection in inputs and explicitly opted-in elements. */
23
- input, textarea, [contenteditable], code, kbd, samp, pre, .selectable {
24
- user-select: text;
25
- -webkit-user-select: text;
26
- }
27
-
28
- /* Hide scrollbars on app shell — list scrollers manage their own. */
29
- body { overflow: hidden; }
30
- #root { overflow: auto; }
31
-
32
- /* ── App-wide custom scrollbars ───────────────────────────────────────
33
- Replaces the chunky OS default scrollbar with a thin, semi-transparent
34
- thumb that fades in on hover. Applies to every scrollable region —
35
- #root (main page scroll), tab panels, the WSL install log, etc.
36
- Firefox uses scrollbar-* (limited but native), WebKit/Chromium uses
37
- the ::-webkit-scrollbar pseudo-elements (full custom). */
38
- * {
39
- scrollbar-width: thin;
40
- scrollbar-color: color-mix(in srgb, var(--fg-3, #8b949e) 30%, transparent) transparent;
41
- }
42
- *::-webkit-scrollbar {
43
- width: 10px;
44
- height: 10px;
45
- }
46
- *::-webkit-scrollbar-track {
47
- background: transparent;
48
- }
49
- *::-webkit-scrollbar-thumb {
50
- background: color-mix(in srgb, var(--fg-3, #8b949e) 25%, transparent);
51
- border-radius: 6px;
52
- border: 2px solid transparent;
53
- background-clip: padding-box;
54
- transition: background 0.15s ease;
55
- }
56
- *::-webkit-scrollbar-thumb:hover {
57
- background: color-mix(in srgb, var(--fg-3, #8b949e) 55%, transparent);
58
- background-clip: padding-box;
59
- }
60
- *::-webkit-scrollbar-corner {
61
- background: transparent;
62
- }
63
-
64
- button {
65
- font: inherit;
66
- cursor: pointer;
67
- border: 0;
68
- background: transparent;
69
- color: inherit;
70
- padding: 0;
71
- }
72
-
73
- button:focus { outline: none; }
74
- button:focus-visible { box-shadow: var(--focus-ring); border-radius: var(--r-sm); }
75
-
76
- input, textarea, select {
77
- font: inherit;
78
- color: inherit;
79
- background: transparent;
80
- border: 0;
81
- outline: none;
82
- }
83
-
84
- a { color: var(--brand); text-decoration: none; }
85
- a:hover { text-decoration: underline; }
86
-
87
- code, kbd, samp { font-family: var(--font-mono); font-size: 0.92em; }
88
-
89
- /* Drag region (Electron frameless on macOS) */
90
- .drag { -webkit-app-region: drag; }
91
- .no-drag { -webkit-app-region: no-drag; }
92
-
93
- /* Utility: visually hidden but accessible */
94
- .sr-only {
95
- position: absolute; width: 1px; height: 1px;
96
- padding: 0; margin: -1px; overflow: hidden;
97
- clip: rect(0,0,0,0); white-space: nowrap; border: 0;
98
- }
@@ -1,90 +0,0 @@
1
- /* Design tokens — single source of truth for spacing, type, colors,
2
- radius, shadows, motion. Components only reference these vars. */
3
-
4
- :root {
5
- /* ── spacing ── 4-pt scale */
6
- --sp-1: 4px;
7
- --sp-2: 8px;
8
- --sp-3: 12px;
9
- --sp-4: 16px;
10
- --sp-5: 24px;
11
- --sp-6: 32px;
12
- --sp-7: 48px;
13
- --sp-8: 64px;
14
-
15
- /* ── type ── 3-step scale */
16
- --t-xs: 11px; /* meta, hints */
17
- --t-sm: 13px; /* body */
18
- --t-md: 15px; /* card titles, primary */
19
- --t-lg: 18px; /* section headers */
20
- --t-xl: 22px; /* page title */
21
- --lh-tight: 1.25;
22
- --lh-base: 1.5;
23
-
24
- --font-sans: -apple-system, BlinkMacSystemFont, "SF Pro Text", "Helvetica Neue", "Inter", system-ui, sans-serif;
25
- --font-mono: ui-monospace, "Cascadia Code", "Cascadia Mono", Consolas, SFMono-Regular, "JetBrains Mono", Menlo, "Courier New", monospace;
26
-
27
- /* ── colors ── single brand, semantic states */
28
- --bg: #0d1117;
29
- --bg-elev-1: #141a23;
30
- --bg-elev-2: #1b222d;
31
-
32
- --hairline: rgba(255,255,255,0.06);
33
- --hairline-2: rgba(255,255,255,0.10);
34
-
35
- --fg: #e7e9ee;
36
- --fg-2: #a0a6b3;
37
- --fg-3: #6b727f;
38
-
39
- --brand: #5b8cff; /* primary action */
40
- --brand-fg: #ffffff;
41
- --brand-soft: rgba(91,140,255,0.12);
42
- --brand-soft-2: rgba(91,140,255,0.20);
43
-
44
- --success: #4ade80;
45
- --warn: #fbbf24;
46
- --danger: #f87171;
47
-
48
- /* ── aliases (BackendCard etc.) ── */
49
- --ok: #4ade80;
50
- --err: #f87171;
51
- --accent-cloud: #f59e0b;
52
- --hairline-strong: #2a2f3a;
53
-
54
- --success-soft: rgba(74,222,128,0.12);
55
- --warn-soft: rgba(251,191,36,0.12);
56
- --danger-soft: rgba(248,113,113,0.12);
57
-
58
- /* ── radius ── 2-step */
59
- --r-sm: 6px;
60
- --r-md: 12px;
61
- --r-lg: 16px;
62
- --r-pill: 999px;
63
-
64
- /* ── shadows ── */
65
- --shadow-1: 0 1px 2px rgba(0,0,0,0.20);
66
- --shadow-2: 0 4px 12px rgba(0,0,0,0.25);
67
- --shadow-3: 0 12px 32px rgba(0,0,0,0.40);
68
-
69
- /* ── motion ── */
70
- --ease: cubic-bezier(0.2, 0.8, 0.2, 1);
71
- --dur-fast: 120ms;
72
- --dur-base: 180ms;
73
-
74
- /* ── focus ── */
75
- --focus-ring: 0 0 0 2px var(--brand);
76
- }
77
-
78
- /* light mode override (optional, low priority) */
79
- @media (prefers-color-scheme: light) {
80
- :root.auto-theme {
81
- --bg: #f7f8fa;
82
- --bg-elev-1: #ffffff;
83
- --bg-elev-2: #ffffff;
84
- --hairline: rgba(0,0,0,0.06);
85
- --hairline-2:rgba(0,0,0,0.10);
86
- --fg: #15181f;
87
- --fg-2: #4a5160;
88
- --fg-3: #8a909d;
89
- }
90
- }
@@ -1,72 +0,0 @@
1
- // Terms of Service — shown as a blocking overlay on first launch and any
2
- // time the version bumps. Replace TOS_TEXT with the canonical legal text
3
- // once it's lawyer-reviewed; bump TOS_VERSION to re-prompt all users.
4
-
5
- export const TOS_VERSION = "2026-05-18";
6
-
7
- export const TOS_TEXT = `# CiCy Desktop 使用条款 / Terms of Service
8
-
9
- **版本 / Version:** ${"2026-05-18"}
10
-
11
- ---
12
-
13
- ## 1. 软件能力 / What this software does
14
-
15
- CiCy Desktop 是一个本地客户端,运行在你自己的电脑上。它会:
16
-
17
- - 启动并管理一个本地 cicy-code 引擎(npx / Docker)
18
- - 允许你连接的 cicy-code 后端(本地或云端)向客户端发送指令
19
- - 通过 Electron 内嵌的 Chrome 实例执行网页自动化
20
- - 在你明确授权后访问剪贴板、文件、屏幕信息等系统能力
21
-
22
- CiCy Desktop is a local client that runs on your own device. It runs a
23
- local cicy-code engine, accepts commands from cicy-code backends you
24
- have configured, and — with your explicit consent — interacts with your
25
- operating system (clipboard, files, screen) and a bundled Chrome session.
26
-
27
- ## 2. 你的责任 / Your responsibilities
28
-
29
- 使用本软件,即表示你确认:
30
-
31
- - 你**对本设备拥有完全控制权或合法授权**
32
- - 你**仅在自己拥有 / 合法授权的设备上**安装和使用本软件
33
- - 你**理解并同意** cicy-code 后端在你授权范围内可以读取本设备的剪贴板、屏幕、文件和浏览器状态
34
- - 你**不会将本软件用于**:监控他人未经同意的设备、入侵他人系统、批量分发到未经授权的终端
35
-
36
- By using this software you confirm you control or are authorised to
37
- control this device, that you will only install it on devices you own or
38
- are licensed to use, and that you will not use it to access devices you
39
- are not authorised to use.
40
-
41
- ## 3. 数据收集 / Data collection
42
-
43
- CiCy Desktop 本身不向开发者上传任何使用数据。所有 agent 指令、剪贴板内
44
- 容、屏幕截图都只在你和你配置的后端之间传输。云端 backend 的数据收集
45
- 策略由该后端 (cicy-ai.com 或第三方) 单独披露。
46
-
47
- CiCy Desktop itself does not phone home. Your interactions are between
48
- the client and the cicy-code backends you choose to connect to.
49
-
50
- ## 4. 取消授权 / Revocation
51
-
52
- 你可以随时关闭本软件、在 Homepage 上断开任意 backend、或在系统里卸载
53
- CiCy Desktop。一旦断开 / 退出,该后端不再具备控制能力。
54
-
55
- You can quit the app, disconnect a backend, or uninstall at any time.
56
- Disconnection takes effect immediately.
57
-
58
- ## 5. 免责 / Disclaimer
59
-
60
- 本软件按"现状"提供,不作任何明示或默示担保。在适用法律允许的最大范围
61
- 内,开发者不对因使用本软件而产生的任何直接或间接损失负责。
62
-
63
- This software is provided "AS IS" without warranty of any kind.
64
-
65
- ---
66
-
67
- 点击下方 **"我已阅读并接受"** 即表示你同意以上条款。如果你不接受,请关闭
68
- 本软件并卸载。
69
-
70
- Click "I have read and accept" to agree. If you do not accept, close
71
- and uninstall the software.
72
- `;
@@ -1,40 +0,0 @@
1
- // CF Worker entry — overlays a few API endpoints on top of the SPA assets.
2
- //
3
- // The Worker keeps the helper-trial token out of the client bundle. Render
4
- // fetches /api/helper/token at click time; the token lives only as a
5
- // `wrangler secret` (env.HELPER_TOKEN), never in git or the CDN-cached JS.
6
- // Renderer writes the returned token into the helper window's localStorage
7
- // via CDP so the cicy-code SPA picks it up on next reload.
8
- // CORS headers — Mac/Linux cicy-desktop loads the homepage over file://, so
9
- // fetches to this Worker carry Origin: null and are cross-origin. Wildcard
10
- // allow is fine: the only sensitive thing we expose is HELPER_TOKEN which
11
- // the helper container itself authorizes; if you can read it from here you
12
- // can already hit the helper directly.
13
- const CORS = {
14
- "Access-Control-Allow-Origin": "*",
15
- "Access-Control-Allow-Methods": "GET, POST, OPTIONS",
16
- "Access-Control-Allow-Headers": "Content-Type, Authorization",
17
- };
18
-
19
- export default {
20
- async fetch(request, env, ctx) {
21
- const url = new URL(request.url);
22
-
23
- // CORS preflight
24
- if (request.method === "OPTIONS") {
25
- return new Response(null, { status: 204, headers: CORS });
26
- }
27
-
28
- if (url.pathname === "/api/helper/token") {
29
- const token = env.HELPER_TOKEN || "";
30
- if (!token) {
31
- return new Response(JSON.stringify({ ok: false, error: "HELPER_TOKEN not configured" }),
32
- { status: 503, headers: { ...CORS, "content-type": "application/json" } });
33
- }
34
- return new Response(JSON.stringify({ ok: true, token }),
35
- { headers: { ...CORS, "content-type": "application/json", "cache-control": "no-store" } });
36
- }
37
- // Everything else: fall through to the static-asset binding (SPA).
38
- return env.ASSETS.fetch(request);
39
- },
40
- };