codexmate 0.0.19 → 0.0.20

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 (67) hide show
  1. package/README.en.md +8 -4
  2. package/README.md +8 -4
  3. package/cli/config-health.js +338 -0
  4. package/cli.js +1136 -584
  5. package/lib/cli-models-utils.js +186 -27
  6. package/lib/cli-network-utils.js +117 -101
  7. package/package.json +8 -1
  8. package/web-ui/app.js +381 -5532
  9. package/web-ui/index.html +15 -2231
  10. package/web-ui/logic.agents-diff.mjs +386 -0
  11. package/web-ui/logic.claude.mjs +108 -0
  12. package/web-ui/logic.mjs +5 -793
  13. package/web-ui/logic.runtime.mjs +124 -0
  14. package/web-ui/logic.sessions.mjs +263 -0
  15. package/web-ui/modules/api.mjs +69 -0
  16. package/web-ui/modules/app.computed.dashboard.mjs +113 -0
  17. package/web-ui/modules/app.computed.index.mjs +13 -0
  18. package/web-ui/modules/app.computed.session.mjs +141 -0
  19. package/web-ui/modules/app.constants.mjs +15 -0
  20. package/web-ui/modules/app.methods.agents.mjs +493 -0
  21. package/web-ui/modules/app.methods.claude-config.mjs +174 -0
  22. package/web-ui/modules/app.methods.codex-config.mjs +640 -0
  23. package/web-ui/modules/app.methods.index.mjs +86 -0
  24. package/web-ui/modules/app.methods.install.mjs +157 -0
  25. package/web-ui/modules/app.methods.navigation.mjs +478 -0
  26. package/web-ui/modules/app.methods.openclaw-core.mjs +514 -0
  27. package/web-ui/modules/app.methods.openclaw-editing.mjs +337 -0
  28. package/web-ui/modules/app.methods.openclaw-persist.mjs +251 -0
  29. package/web-ui/modules/app.methods.providers.mjs +265 -0
  30. package/web-ui/modules/app.methods.runtime.mjs +323 -0
  31. package/web-ui/modules/app.methods.session-actions.mjs +457 -0
  32. package/web-ui/modules/app.methods.session-browser.mjs +435 -0
  33. package/web-ui/modules/app.methods.session-timeline.mjs +441 -0
  34. package/web-ui/modules/app.methods.session-trash.mjs +419 -0
  35. package/web-ui/modules/app.methods.startup-claude.mjs +406 -0
  36. package/web-ui/partials/index/layout-footer.html +69 -0
  37. package/web-ui/partials/index/layout-header.html +337 -0
  38. package/web-ui/partials/index/modal-config-template-agents.html +125 -0
  39. package/web-ui/partials/index/modal-confirm-toast.html +32 -0
  40. package/web-ui/partials/index/modal-health-check.html +72 -0
  41. package/web-ui/partials/index/modal-openclaw-config.html +275 -0
  42. package/web-ui/partials/index/modal-skills.html +184 -0
  43. package/web-ui/partials/index/modals-basic.html +196 -0
  44. package/web-ui/partials/index/panel-config-claude.html +100 -0
  45. package/web-ui/partials/index/panel-config-codex.html +237 -0
  46. package/web-ui/partials/index/panel-config-openclaw.html +84 -0
  47. package/web-ui/partials/index/panel-market.html +174 -0
  48. package/web-ui/partials/index/panel-sessions.html +387 -0
  49. package/web-ui/partials/index/panel-settings.html +166 -0
  50. package/web-ui/source-bundle.cjs +233 -0
  51. package/web-ui/styles/base-theme.css +373 -0
  52. package/web-ui/styles/controls-forms.css +354 -0
  53. package/web-ui/styles/feedback.css +108 -0
  54. package/web-ui/styles/health-check-dialog.css +144 -0
  55. package/web-ui/styles/layout-shell.css +330 -0
  56. package/web-ui/styles/modals-core.css +449 -0
  57. package/web-ui/styles/navigation-panels.css +381 -0
  58. package/web-ui/styles/openclaw-structured.css +266 -0
  59. package/web-ui/styles/responsive.css +416 -0
  60. package/web-ui/styles/sessions-list.css +414 -0
  61. package/web-ui/styles/sessions-preview.css +405 -0
  62. package/web-ui/styles/sessions-toolbar-trash.css +243 -0
  63. package/web-ui/styles/sessions-usage.css +276 -0
  64. package/web-ui/styles/skills-list.css +298 -0
  65. package/web-ui/styles/skills-market.css +335 -0
  66. package/web-ui/styles/titles-cards.css +407 -0
  67. package/web-ui/styles.css +16 -4668
@@ -0,0 +1,414 @@
1
+ .session-empty {
2
+ padding: 28px var(--spacing-sm);
3
+ text-align: center;
4
+ border: 1px dashed var(--color-border-soft);
5
+ border-radius: var(--radius-lg);
6
+ color: var(--color-text-tertiary);
7
+ background: var(--bg-warm-gradient);
8
+ position: relative;
9
+ box-shadow: var(--shadow-subtle);
10
+ }
11
+
12
+ .session-empty::before {
13
+ content: "";
14
+ display: block;
15
+ width: 36px;
16
+ height: 36px;
17
+ border-radius: 50%;
18
+ margin: 0 auto 10px;
19
+ background: rgba(210, 107, 90, 0.12);
20
+ box-shadow: inset 0 0 0 6px rgba(255, 255, 255, 0.7);
21
+ }
22
+
23
+ .trash-list {
24
+ display: grid;
25
+ gap: 12px;
26
+ margin-top: 12px;
27
+ }
28
+
29
+ .trash-item.session-item {
30
+ min-height: auto;
31
+ height: auto;
32
+ cursor: default;
33
+ content-visibility: visible;
34
+ contain-intrinsic-size: auto;
35
+ }
36
+
37
+ .trash-item.session-item:hover,
38
+ .trash-item.session-item:active {
39
+ transform: none;
40
+ border-color: var(--color-border-soft);
41
+ background: linear-gradient(to bottom, var(--color-surface) 0%, rgba(255, 255, 255, 0.92) 100%);
42
+ box-shadow: var(--shadow-subtle);
43
+ }
44
+
45
+ .trash-item.session-item::before {
46
+ background: linear-gradient(180deg, rgba(70, 86, 110, 0.26), rgba(70, 86, 110, 0.08));
47
+ }
48
+
49
+ .trash-item-main {
50
+ min-width: 0;
51
+ flex: 1;
52
+ }
53
+
54
+ .trash-item-mainline {
55
+ display: flex;
56
+ align-items: flex-start;
57
+ gap: 8px;
58
+ }
59
+
60
+ .trash-item-title {
61
+ flex: 1;
62
+ font-size: var(--font-size-body);
63
+ font-weight: var(--font-weight-secondary);
64
+ color: var(--color-text-primary);
65
+ line-height: 1.4;
66
+ display: -webkit-box;
67
+ -webkit-line-clamp: 2;
68
+ -webkit-box-orient: vertical;
69
+ white-space: normal;
70
+ overflow: hidden;
71
+ overflow-wrap: anywhere;
72
+ }
73
+
74
+ .trash-item-meta {
75
+ margin-top: 6px;
76
+ }
77
+
78
+ .trash-item-side {
79
+ display: flex;
80
+ flex-direction: column;
81
+ align-items: flex-end;
82
+ gap: 8px;
83
+ flex-shrink: 0;
84
+ min-width: 132px;
85
+ }
86
+
87
+ .trash-item-actions {
88
+ display: grid;
89
+ grid-template-columns: repeat(2, minmax(108px, 108px));
90
+ align-self: flex-end;
91
+ justify-content: flex-end;
92
+ gap: 8px;
93
+ }
94
+
95
+ .trash-item-actions .btn-mini {
96
+ width: 100%;
97
+ min-height: 36px;
98
+ display: inline-flex;
99
+ align-items: center;
100
+ justify-content: center;
101
+ }
102
+
103
+ .trash-item-time {
104
+ width: 100%;
105
+ text-align: right;
106
+ white-space: nowrap;
107
+ color: var(--color-text-tertiary);
108
+ }
109
+
110
+ .trash-item-path {
111
+ margin-top: 8px;
112
+ display: grid;
113
+ grid-template-columns: 48px minmax(0, 1fr);
114
+ gap: 8px;
115
+ align-items: start;
116
+ white-space: normal;
117
+ overflow-wrap: anywhere;
118
+ }
119
+
120
+ .trash-item-label {
121
+ display: inline-block;
122
+ color: var(--color-text-secondary);
123
+ font-weight: var(--font-weight-secondary);
124
+ }
125
+
126
+ .trash-item-path span:last-child {
127
+ min-width: 0;
128
+ word-break: break-word;
129
+ }
130
+
131
+ .trash-item .session-count-badge {
132
+ margin-top: 2px;
133
+ }
134
+
135
+ .session-layout {
136
+ display: grid;
137
+ grid-template-columns: minmax(260px, 360px) minmax(0, 1fr);
138
+ gap: var(--spacing-sm);
139
+ align-items: start;
140
+ height: min(72vh, 760px);
141
+ min-height: 520px;
142
+ }
143
+
144
+ .session-layout.session-standalone {
145
+ grid-template-columns: minmax(0, 1fr);
146
+ }
147
+
148
+ .session-standalone-page {
149
+ max-width: 960px;
150
+ margin: 0 auto;
151
+ padding: var(--spacing-sm) 0;
152
+ }
153
+
154
+ .session-standalone-title {
155
+ font-size: var(--font-size-title);
156
+ font-weight: var(--font-weight-title);
157
+ color: var(--color-text-primary);
158
+ margin-bottom: var(--spacing-sm);
159
+ letter-spacing: -0.01em;
160
+ }
161
+
162
+ .session-standalone-text {
163
+ white-space: pre-wrap;
164
+ font-family: var(--font-family-body);
165
+ font-size: var(--font-size-body);
166
+ line-height: 1.7;
167
+ color: var(--color-text-primary);
168
+ word-break: break-word;
169
+ }
170
+
171
+ .session-list {
172
+ display: flex;
173
+ flex-direction: column;
174
+ gap: var(--spacing-xs);
175
+ position: sticky;
176
+ top: 12px;
177
+ height: 100%;
178
+ max-height: none;
179
+ overflow-y: auto;
180
+ overflow-x: hidden;
181
+ padding-right: 4px;
182
+ min-width: 0;
183
+ scrollbar-width: thin;
184
+ scrollbar-color: rgba(166, 149, 130, 0.85) transparent;
185
+ }
186
+
187
+ .session-list::-webkit-scrollbar,
188
+ .session-preview-scroll::-webkit-scrollbar {
189
+ width: 10px;
190
+ height: 10px;
191
+ }
192
+
193
+ .session-list::-webkit-scrollbar-track,
194
+ .session-preview-scroll::-webkit-scrollbar-track {
195
+ background: transparent;
196
+ border-radius: 999px;
197
+ }
198
+
199
+ .session-list::-webkit-scrollbar-thumb,
200
+ .session-preview-scroll::-webkit-scrollbar-thumb {
201
+ background: linear-gradient(to bottom, rgba(191, 174, 154, 0.95) 0%, rgba(160, 141, 121, 0.95) 100%);
202
+ border-radius: 999px;
203
+ border: 2px solid rgba(255, 255, 255, 0.9);
204
+ }
205
+
206
+ .session-list::-webkit-scrollbar-thumb:hover,
207
+ .session-preview-scroll::-webkit-scrollbar-thumb:hover {
208
+ background: linear-gradient(to bottom, rgba(175, 156, 136, 0.95) 0%, rgba(145, 126, 107, 0.95) 100%);
209
+ }
210
+
211
+ .session-item {
212
+ border: 1px solid var(--color-border-soft);
213
+ border-radius: var(--radius-sm);
214
+ background: linear-gradient(to bottom, var(--color-surface) 0%, rgba(255, 255, 255, 0.92) 100%);
215
+ padding: 16px;
216
+ cursor: pointer;
217
+ transition: all var(--transition-fast) var(--ease-spring);
218
+ user-select: none;
219
+ min-width: 0;
220
+ position: relative;
221
+ overflow: hidden;
222
+ min-height: 102px;
223
+ content-visibility: auto;
224
+ contain-intrinsic-size: 102px;
225
+ }
226
+
227
+ .session-item-header {
228
+ display: flex;
229
+ align-items: center;
230
+ justify-content: space-between;
231
+ gap: 10px;
232
+ margin-bottom: 4px;
233
+ }
234
+
235
+ .session-item-main {
236
+ min-width: 0;
237
+ flex: 1;
238
+ display: flex;
239
+ align-items: center;
240
+ gap: 8px;
241
+ }
242
+
243
+ .session-item:hover {
244
+ border-color: var(--color-brand);
245
+ background: linear-gradient(to bottom, rgba(210, 107, 90, 0.08) 0%, rgba(255, 255, 255, 0.98) 100%);
246
+ transform: translateY(-1px);
247
+ }
248
+
249
+ .session-item:focus-visible {
250
+ outline: 3px solid rgba(201, 94, 75, 0.25);
251
+ outline-offset: 2px;
252
+ border-color: var(--color-brand);
253
+ background: linear-gradient(to bottom, rgba(210, 107, 90, 0.08) 0%, rgba(255, 255, 255, 0.98) 100%);
254
+ }
255
+
256
+ .session-item::before {
257
+ content: "";
258
+ position: absolute;
259
+ left: 0;
260
+ top: 10px;
261
+ bottom: 10px;
262
+ width: 3px;
263
+ border-radius: 999px;
264
+ background: rgba(210, 107, 90, 0.15);
265
+ transition: background var(--transition-fast) var(--ease-spring);
266
+ }
267
+
268
+ .session-item:active {
269
+ transform: scale(0.99);
270
+ }
271
+
272
+ .session-item.active {
273
+ border-color: var(--color-brand);
274
+ background: linear-gradient(to bottom, rgba(210, 107, 90, 0.1) 0%, rgba(255, 255, 255, 0.98) 100%);
275
+ box-shadow: 0 6px 16px rgba(210, 107, 90, 0.12);
276
+ }
277
+
278
+ .session-item.pinned {
279
+ border-color: rgba(208, 88, 58, 0.42);
280
+ background: linear-gradient(to bottom, rgba(210, 107, 90, 0.12) 0%, rgba(255, 251, 247, 0.98) 100%);
281
+ box-shadow: 0 8px 18px rgba(210, 107, 90, 0.10);
282
+ }
283
+
284
+ .session-item.pinned::before {
285
+ background: linear-gradient(180deg, rgba(201, 94, 75, 0.8), rgba(201, 94, 75, 0.32));
286
+ }
287
+
288
+ .session-item.active::before {
289
+ background: linear-gradient(180deg, rgba(201, 94, 75, 0.9), rgba(201, 94, 75, 0.4));
290
+ }
291
+
292
+ .session-item-title {
293
+ font-size: var(--font-size-body);
294
+ font-weight: var(--font-weight-secondary);
295
+ color: var(--color-text-primary);
296
+ line-height: 1.4;
297
+ display: -webkit-box;
298
+ -webkit-line-clamp: 2;
299
+ -webkit-box-orient: vertical;
300
+ white-space: normal;
301
+ overflow: hidden;
302
+ flex: 1;
303
+ max-width: none;
304
+ }
305
+
306
+ .session-item-actions {
307
+ display: inline-flex;
308
+ align-items: center;
309
+ gap: 6px;
310
+ flex-shrink: 0;
311
+ }
312
+
313
+ .session-item-copy {
314
+ border: 1px solid rgba(70, 86, 110, 0.35);
315
+ background: rgba(70, 86, 110, 0.08);
316
+ color: var(--color-text-secondary);
317
+ width: 22px;
318
+ height: 22px;
319
+ border-radius: 8px;
320
+ display: inline-flex;
321
+ align-items: center;
322
+ justify-content: center;
323
+ cursor: pointer;
324
+ flex-shrink: 0;
325
+ transition: all var(--transition-fast) var(--ease-spring);
326
+ }
327
+
328
+ .session-item-copy:hover {
329
+ border-color: rgba(70, 86, 110, 0.7);
330
+ background: rgba(70, 86, 110, 0.16);
331
+ color: var(--color-text-primary);
332
+ transform: translateY(-1px);
333
+ }
334
+
335
+ .session-item-copy:disabled {
336
+ opacity: 0.5;
337
+ cursor: not-allowed;
338
+ transform: none;
339
+ }
340
+
341
+ .session-item-copy svg {
342
+ width: 10px;
343
+ height: 10px;
344
+ }
345
+
346
+ .session-item-pin {
347
+ border-color: rgba(208, 88, 58, 0.24);
348
+ }
349
+
350
+ .session-item-pin .pin-icon,
351
+ .session-item-pin svg {
352
+ width: 9px;
353
+ height: 9px;
354
+ color: rgba(208, 88, 58, 0.78);
355
+ }
356
+
357
+ .session-item.pinned .session-item-pin {
358
+ background: rgba(208, 88, 58, 0.16);
359
+ border-color: rgba(208, 88, 58, 0.46);
360
+ box-shadow: inset 0 0 0 1px rgba(208, 88, 58, 0.08);
361
+ }
362
+
363
+ .session-item.pinned .session-item-pin .pin-icon,
364
+ .session-item.pinned .session-item-pin svg {
365
+ color: var(--color-brand-dark);
366
+ }
367
+
368
+ .session-item-sub.session-item-snippet {
369
+ display: none !important;
370
+ }
371
+
372
+ .session-item-sub {
373
+ font-size: var(--font-size-caption);
374
+ color: var(--color-text-tertiary);
375
+ line-height: 1.35;
376
+ white-space: nowrap;
377
+ overflow: hidden;
378
+ text-overflow: ellipsis;
379
+ }
380
+
381
+ .session-item-sub.session-item-wrap {
382
+ white-space: normal;
383
+ }
384
+
385
+ .session-item-meta {
386
+ display: flex;
387
+ flex-wrap: wrap;
388
+ align-items: center;
389
+ gap: 6px;
390
+ margin-top: 2px;
391
+ margin-bottom: 2px;
392
+ }
393
+
394
+ .session-item-time {
395
+ font-size: var(--font-size-caption);
396
+ color: var(--color-text-tertiary);
397
+ white-space: nowrap;
398
+ }
399
+
400
+ .session-preview {
401
+ border: 1px solid var(--color-border-soft);
402
+ border-radius: var(--radius-xl);
403
+ background: linear-gradient(to bottom, var(--color-surface-elevated) 0%, rgba(255, 255, 255, 0.96) 100%);
404
+ box-shadow: var(--shadow-card);
405
+ min-height: 0;
406
+ max-height: none;
407
+ height: 100%;
408
+ display: flex;
409
+ flex-direction: column;
410
+ overflow: hidden;
411
+ position: relative;
412
+ transform: translateX(4px);
413
+ transition: transform var(--transition-normal) var(--ease-spring-soft), box-shadow var(--transition-normal) var(--ease-spring-soft);
414
+ }