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,449 @@
1
+ /* ============================================
2
+ 模态框
3
+ ============================================ */
4
+ @keyframes modalFadeIn {
5
+ from { opacity: 0; }
6
+ to { opacity: 1; }
7
+ }
8
+
9
+ @keyframes modalSlideUp {
10
+ from { transform: translateY(24px); opacity: 0; }
11
+ to { transform: translateY(0); opacity: 1; }
12
+ }
13
+
14
+ .modal-overlay {
15
+ position: fixed;
16
+ top: 0;
17
+ left: 0;
18
+ right: 0;
19
+ bottom: 0;
20
+ background: linear-gradient(to bottom, rgba(31, 26, 23, 0.3) 0%, rgba(31, 26, 23, 0.5) 100%);
21
+ display: flex;
22
+ justify-content: center;
23
+ align-items: center;
24
+ z-index: 100;
25
+ backdrop-filter: blur(8px) saturate(180%);
26
+ -webkit-backdrop-filter: blur(8px) saturate(180%);
27
+ animation: modalFadeIn var(--transition-normal) var(--ease-out-expo);
28
+ }
29
+
30
+ .modal {
31
+ background: linear-gradient(to bottom, var(--color-surface) 0%, rgba(255, 255, 255, 0.98) 100%);
32
+ width: 90%;
33
+ max-width: 400px;
34
+ max-height: 90vh;
35
+ overflow-y: auto;
36
+ overscroll-behavior: contain;
37
+ border-radius: var(--radius-lg);
38
+ padding: var(--spacing-md);
39
+ box-shadow: var(--shadow-modal);
40
+ border: 1px solid rgba(255, 255, 255, 0.8);
41
+ animation: modalSlideUp var(--transition-slow) var(--ease-spring);
42
+ }
43
+
44
+ .modal-wide {
45
+ max-width: 980px;
46
+ }
47
+
48
+ .modal-editor {
49
+ width: min(96vw, 980px);
50
+ max-height: calc(100vh - 24px);
51
+ display: flex;
52
+ flex-direction: column;
53
+ overflow: hidden;
54
+ padding: 0;
55
+ }
56
+
57
+ .agents-modal {
58
+ width: min(92vw, 900px);
59
+ max-height: calc(100vh - 56px);
60
+ }
61
+
62
+ .modal-editor-header {
63
+ margin-bottom: 0;
64
+ padding: var(--spacing-md) var(--spacing-md) 0;
65
+ }
66
+
67
+ .modal-editor-body {
68
+ flex: 1;
69
+ min-height: 0;
70
+ overflow-y: auto;
71
+ padding: var(--spacing-sm) var(--spacing-md) 0;
72
+ }
73
+
74
+ .modal-editor-footer {
75
+ margin-top: 0;
76
+ padding: var(--spacing-sm) var(--spacing-md) var(--spacing-md);
77
+ border-top: 1px solid var(--color-border-soft);
78
+ background: linear-gradient(to bottom, rgba(255, 255, 255, 0.82) 0%, rgba(255, 255, 255, 0.96) 100%);
79
+ backdrop-filter: blur(2px);
80
+ }
81
+
82
+ .modal-title {
83
+ font-size: var(--font-size-title);
84
+ font-weight: var(--font-weight-title);
85
+ margin-bottom: var(--spacing-md);
86
+ color: var(--color-text-primary);
87
+ letter-spacing: -0.01em;
88
+ }
89
+
90
+ .confirm-dialog {
91
+ max-width: 460px;
92
+ }
93
+
94
+ .confirm-dialog-message {
95
+ font-size: var(--font-size-body);
96
+ line-height: 1.7;
97
+ color: var(--color-text-secondary);
98
+ white-space: pre-wrap;
99
+ }
100
+
101
+ .confirm-dialog-actions {
102
+ margin-top: var(--spacing-lg);
103
+ justify-content: flex-end;
104
+ }
105
+
106
+ .install-list {
107
+ display: flex;
108
+ flex-direction: column;
109
+ gap: var(--spacing-sm);
110
+ margin-top: var(--spacing-sm);
111
+ }
112
+
113
+ .install-row {
114
+ display: flex;
115
+ align-items: center;
116
+ gap: var(--spacing-sm);
117
+ padding: 10px 12px;
118
+ border: 1px solid var(--color-border-soft);
119
+ border-radius: var(--radius-lg);
120
+ background: var(--color-surface-alt);
121
+ }
122
+
123
+ .install-row-main {
124
+ flex: 1;
125
+ display: flex;
126
+ flex-direction: column;
127
+ gap: 6px;
128
+ }
129
+
130
+ .install-row-title {
131
+ font-size: var(--font-size-secondary);
132
+ color: var(--color-text-secondary);
133
+ }
134
+
135
+ .install-command {
136
+ flex: 1;
137
+ font-family: var(--font-family-mono);
138
+ font-size: var(--font-size-secondary);
139
+ color: var(--color-text-primary);
140
+ word-break: break-all;
141
+ background: rgba(255, 255, 255, 0.7);
142
+ padding: 8px 10px;
143
+ border-radius: var(--radius-sm);
144
+ border: 1px solid var(--color-border-soft);
145
+ }
146
+
147
+ .install-row .btn-mini {
148
+ white-space: nowrap;
149
+ }
150
+
151
+ .install-action-tabs {
152
+ display: flex;
153
+ gap: var(--spacing-xs);
154
+ flex-wrap: wrap;
155
+ }
156
+
157
+ .install-action-tabs .btn-mini.active {
158
+ background: rgba(201, 94, 75, 0.16);
159
+ border-color: rgba(201, 94, 75, 0.32);
160
+ color: var(--color-text-primary);
161
+ }
162
+
163
+ .install-registry-input {
164
+ width: 100%;
165
+ }
166
+
167
+ .install-registry-hint {
168
+ width: 100%;
169
+ margin-top: 2px;
170
+ }
171
+
172
+ .install-help {
173
+ margin-top: var(--spacing-sm);
174
+ border-top: 1px dashed var(--color-border-soft);
175
+ padding-top: var(--spacing-sm);
176
+ }
177
+
178
+ .install-help-list {
179
+ margin: 6px 0 0;
180
+ padding-left: 18px;
181
+ color: var(--color-text-secondary);
182
+ font-size: var(--font-size-secondary);
183
+ }
184
+
185
+ .install-help-list li + li {
186
+ margin-top: 4px;
187
+ }
188
+
189
+ .modal-header {
190
+ display: flex;
191
+ align-items: center;
192
+ justify-content: space-between;
193
+ gap: var(--spacing-sm);
194
+ margin-bottom: var(--spacing-md);
195
+ flex-wrap: wrap;
196
+ }
197
+
198
+ .modal-header .modal-title {
199
+ margin-bottom: 0;
200
+ }
201
+
202
+ .modal-header-actions {
203
+ display: inline-flex;
204
+ align-items: center;
205
+ gap: 8px;
206
+ margin-left: auto;
207
+ }
208
+
209
+ .btn-modal-copy {
210
+ padding: 6px 12px;
211
+ white-space: nowrap;
212
+ flex-shrink: 0;
213
+ }
214
+
215
+ .form-group {
216
+ margin-bottom: var(--spacing-sm);
217
+ }
218
+
219
+ .form-label {
220
+ display: block;
221
+ font-size: var(--font-size-secondary);
222
+ font-weight: var(--font-weight-secondary);
223
+ color: var(--color-text-secondary);
224
+ margin-bottom: 7px;
225
+ letter-spacing: 0.01em;
226
+ }
227
+
228
+ .form-input {
229
+ width: 100%;
230
+ padding: 13px var(--spacing-sm);
231
+ border: 1.5px solid var(--color-border-soft);
232
+ border-radius: var(--radius-sm);
233
+ font-size: var(--font-size-body);
234
+ background-color: var(--color-surface-alt);
235
+ color: var(--color-text-primary);
236
+ outline: none;
237
+ transition: all var(--transition-fast) var(--ease-spring);
238
+ font-family: var(--font-family-body);
239
+ box-shadow: inset 0 1px 2px rgba(31, 26, 23, 0.04);
240
+ }
241
+
242
+ .form-input:hover {
243
+ border-color: var(--color-border-strong);
244
+ }
245
+
246
+ .form-input:focus {
247
+ border-color: var(--color-brand);
248
+ background-color: var(--color-surface);
249
+ box-shadow: var(--shadow-input-focus);
250
+ }
251
+
252
+ .form-input::placeholder {
253
+ color: var(--color-text-tertiary);
254
+ opacity: 0.7;
255
+ }
256
+
257
+ .form-select {
258
+ width: 100%;
259
+ min-height: 44px;
260
+ padding: 10px 40px 10px 12px;
261
+ border: 1.5px solid var(--color-border-soft);
262
+ border-radius: var(--radius-sm);
263
+ font-size: var(--font-size-secondary);
264
+ font-weight: var(--font-weight-secondary);
265
+ background-color: var(--color-surface-alt);
266
+ color: var(--color-text-primary);
267
+ outline: none;
268
+ transition: all var(--transition-fast) var(--ease-spring);
269
+ font-family: var(--font-family-body);
270
+ box-shadow: inset 0 1px 2px rgba(31, 26, 23, 0.04);
271
+ cursor: pointer;
272
+ appearance: none;
273
+ -webkit-appearance: none;
274
+ -moz-appearance: none;
275
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='none' stroke='%23505A66' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round' d='M2 4l4 4 4-4'/%3E%3C/svg%3E");
276
+ background-repeat: no-repeat;
277
+ background-position: right 14px center;
278
+ background-size: 12px;
279
+ }
280
+
281
+ .form-select:hover {
282
+ border-color: var(--color-border-strong);
283
+ background-color: var(--color-surface);
284
+ }
285
+
286
+ .form-select:focus {
287
+ border-color: var(--color-brand);
288
+ background-color: var(--color-surface);
289
+ box-shadow: var(--shadow-input-focus);
290
+ }
291
+
292
+ .form-select:disabled {
293
+ background: linear-gradient(to right, var(--color-bg) 0%, rgba(247, 241, 232, 0.5) 100%);
294
+ color: var(--color-text-tertiary);
295
+ cursor: not-allowed;
296
+ border-color: transparent;
297
+ }
298
+
299
+ .template-editor {
300
+ min-height: min(60vh, 520px);
301
+ max-height: min(65vh, 620px);
302
+ resize: vertical;
303
+ overflow: auto;
304
+ white-space: pre;
305
+ font-family: var(--font-family-mono);
306
+ font-size: 13px;
307
+ line-height: 1.45;
308
+ }
309
+
310
+ .template-editor-warning {
311
+ margin-top: 8px;
312
+ color: #8d5b31;
313
+ font-size: var(--font-size-caption);
314
+ line-height: 1.4;
315
+ }
316
+
317
+
318
+ .agents-diff-hint {
319
+ margin-top: 6px;
320
+ color: var(--color-text-tertiary);
321
+ font-size: var(--font-size-caption);
322
+ }
323
+
324
+ .agents-diff-save-alert {
325
+ margin-bottom: 8px;
326
+ padding: 8px 10px;
327
+ border-radius: var(--radius-sm);
328
+ border: 1px solid rgba(238, 178, 90, 0.45);
329
+ background: rgba(255, 236, 204, 0.72);
330
+ color: #8d5b31;
331
+ font-size: var(--font-size-caption);
332
+ font-weight: var(--font-weight-secondary);
333
+ }
334
+
335
+ .agents-diff-summary {
336
+ display: flex;
337
+ align-items: center;
338
+ gap: 8px;
339
+ margin-bottom: 8px;
340
+ font-size: var(--font-size-caption);
341
+ color: var(--color-text-tertiary);
342
+ }
343
+
344
+ .agents-diff-stat {
345
+ display: inline-flex;
346
+ align-items: center;
347
+ gap: 4px;
348
+ padding: 2px 8px;
349
+ border-radius: 999px;
350
+ border: 1px solid transparent;
351
+ font-weight: var(--font-weight-secondary);
352
+ }
353
+
354
+ .agents-diff-stat.add {
355
+ color: #2b6a3b;
356
+ background: rgba(57, 181, 97, 0.12);
357
+ border-color: rgba(57, 181, 97, 0.2);
358
+ }
359
+
360
+ .agents-diff-stat.del {
361
+ color: #8a2f36;
362
+ background: rgba(220, 95, 108, 0.12);
363
+ border-color: rgba(220, 95, 108, 0.2);
364
+ }
365
+
366
+
367
+ .agents-diff-empty {
368
+ padding: 10px 12px;
369
+ font-size: var(--font-size-caption);
370
+ color: var(--color-text-tertiary);
371
+ border: 1px dashed var(--color-border-soft);
372
+ border-radius: var(--radius-sm);
373
+ background: rgba(255, 255, 255, 0.6);
374
+ }
375
+
376
+ .agents-diff-view {
377
+ border: 1px solid var(--color-border-soft);
378
+ border-radius: var(--radius-sm);
379
+ background: rgba(255, 255, 255, 0.7);
380
+ font-family: var(--font-family-mono);
381
+ font-size: 12px;
382
+ line-height: 1.55;
383
+ max-height: min(32vh, 280px);
384
+ overflow: auto;
385
+ }
386
+
387
+
388
+ .agents-diff-editor {
389
+ min-height: min(60vh, 520px);
390
+ max-height: min(65vh, 620px);
391
+ }
392
+
393
+ .agents-modal .template-editor,
394
+ .agents-modal .agents-diff-editor {
395
+ min-height: min(52vh, 460px);
396
+ max-height: min(58vh, 540px);
397
+ }
398
+
399
+ .agents-diff-line {
400
+ display: grid;
401
+ grid-template-columns: 16px 1fr;
402
+ gap: 8px;
403
+ padding: 2px 10px;
404
+ align-items: start;
405
+ }
406
+
407
+ .agents-diff-line + .agents-diff-line {
408
+ border-top: none;
409
+ }
410
+
411
+ .agents-diff-line.add {
412
+ background: rgba(57, 181, 97, 0.08);
413
+ }
414
+
415
+ .agents-diff-line.del {
416
+ background: rgba(220, 95, 108, 0.1);
417
+ }
418
+
419
+ .agents-diff-line.context {
420
+ background: transparent;
421
+ }
422
+
423
+
424
+ .agents-diff-line-sign {
425
+ text-align: center;
426
+ color: var(--color-text-tertiary);
427
+ min-height: 20px;
428
+ }
429
+
430
+ .agents-diff-line-text {
431
+ white-space: pre-wrap;
432
+ word-break: break-word;
433
+ color: var(--color-text-primary);
434
+ }
435
+
436
+ .form-input:disabled,
437
+ .form-input[readonly] {
438
+ background: linear-gradient(to right, var(--color-bg) 0%, rgba(247, 241, 232, 0.5) 100%);
439
+ color: var(--color-text-tertiary);
440
+ cursor: not-allowed;
441
+ border-color: transparent;
442
+ }
443
+
444
+ .form-hint {
445
+ font-size: var(--font-size-caption);
446
+ color: var(--color-text-tertiary);
447
+ margin-top: 5px;
448
+ opacity: 0.8;
449
+ }