codexmate 0.0.28 → 0.0.30

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 (50) hide show
  1. package/cli/builtin-proxy.js +107 -2
  2. package/cli/config-bootstrap.js +30 -12
  3. package/cli/config-health.js +117 -1
  4. package/cli/local-bridge.js +324 -0
  5. package/cli/openai-bridge.js +195 -31
  6. package/cli.js +245 -28
  7. package/lib/cli-webhook.js +126 -0
  8. package/package.json +1 -1
  9. package/web-ui/app.js +28 -8
  10. package/web-ui/index.html +1 -0
  11. package/web-ui/logic.codex.mjs +13 -0
  12. package/web-ui/modules/app.computed.dashboard.mjs +25 -2
  13. package/web-ui/modules/app.computed.session.mjs +22 -17
  14. package/web-ui/modules/app.methods.claude-config.mjs +12 -2
  15. package/web-ui/modules/app.methods.codex-config.mjs +25 -0
  16. package/web-ui/modules/app.methods.index.mjs +2 -0
  17. package/web-ui/modules/app.methods.navigation.mjs +39 -8
  18. package/web-ui/modules/app.methods.providers.mjs +125 -8
  19. package/web-ui/modules/app.methods.session-actions.mjs +1 -1
  20. package/web-ui/modules/app.methods.session-browser.mjs +1 -1
  21. package/web-ui/modules/app.methods.session-trash.mjs +3 -4
  22. package/web-ui/modules/app.methods.startup-claude.mjs +1 -0
  23. package/web-ui/modules/app.methods.webhook.mjs +79 -0
  24. package/web-ui/modules/i18n.dict.mjs +1109 -72
  25. package/web-ui/modules/i18n.mjs +9 -3
  26. package/web-ui/modules/skills.methods.mjs +1 -0
  27. package/web-ui/partials/index/layout-header.html +25 -0
  28. package/web-ui/partials/index/modals-basic.html +0 -3
  29. package/web-ui/partials/index/panel-config-claude.html +8 -2
  30. package/web-ui/partials/index/panel-config-codex.html +28 -3
  31. package/web-ui/partials/index/panel-dashboard.html +33 -0
  32. package/web-ui/partials/index/panel-market.html +3 -3
  33. package/web-ui/partials/index/panel-plugins.html +2 -2
  34. package/web-ui/partials/index/panel-sessions.html +1 -9
  35. package/web-ui/partials/index/panel-settings.html +71 -134
  36. package/web-ui/partials/index/panel-trash.html +88 -0
  37. package/web-ui/session-helpers.mjs +20 -2
  38. package/web-ui/styles/dashboard.css +132 -0
  39. package/web-ui/styles/docs-panel.css +63 -39
  40. package/web-ui/styles/layout-shell.css +54 -34
  41. package/web-ui/styles/plugins-panel.css +121 -80
  42. package/web-ui/styles/sessions-list.css +41 -43
  43. package/web-ui/styles/sessions-preview.css +34 -38
  44. package/web-ui/styles/sessions-toolbar-trash.css +31 -27
  45. package/web-ui/styles/settings-panel.css +197 -33
  46. package/web-ui/styles/skills-list.css +12 -10
  47. package/web-ui/styles/skills-market.css +67 -44
  48. package/web-ui/styles/trash-panel.css +90 -0
  49. package/web-ui/styles/webhook.css +81 -0
  50. package/web-ui/styles.css +2 -0
@@ -49,11 +49,11 @@
49
49
  display: flex;
50
50
  align-items: flex-start;
51
51
  gap: var(--spacing-xs);
52
- border: 1px dashed var(--color-border-soft);
52
+ border: 1px solid var(--color-border-soft);
53
53
  border-radius: var(--radius-sm);
54
54
  padding: var(--spacing-xs);
55
- background: var(--color-surface-alt);
56
- transition: border-color var(--transition-fast) var(--ease-spring), background-color var(--transition-fast) var(--ease-spring);
55
+ background: rgba(255,255,255,0.5);
56
+ transition: all var(--transition-fast) var(--ease-spring);
57
57
  }
58
58
 
59
59
  .skill-item-main {
@@ -92,23 +92,25 @@
92
92
  }
93
93
 
94
94
  .skill-item:hover {
95
- border-color: rgba(201, 94, 75, 0.35);
95
+ border-color: rgba(200,121,99,0.35);
96
+ background: rgba(255,243,236,0.3);
96
97
  }
97
98
 
98
99
  .skill-item.selected {
99
- border-color: rgba(201, 94, 75, 0.55);
100
- background: linear-gradient(to bottom, rgba(201, 94, 75, 0.10) 0%, rgba(201, 94, 75, 0.04) 100%);
100
+ border-color: rgba(200,121,99,0.5);
101
+ background: linear-gradient(to right, rgba(255,243,236,0.7) 0%, rgba(255,255,255,0.6) 100%);
102
+ box-shadow: inset 3px 0 0 var(--color-brand);
101
103
  }
102
104
 
103
105
  .skills-empty-state {
104
106
  margin-bottom: var(--spacing-sm);
105
- border: 1px dashed var(--color-border-soft);
106
- border-radius: var(--radius-sm);
107
- background: linear-gradient(to bottom, rgba(255, 255, 255, 0.78) 0%, rgba(255, 255, 255, 0.58) 100%);
107
+ border: 1px solid var(--color-border-soft);
108
+ border-radius: var(--radius-md);
109
+ background: linear-gradient(to bottom, rgba(255,255,255,0.7) 0%, rgba(255,248,241,0.5) 100%);
108
110
  color: var(--color-text-tertiary);
109
111
  font-size: var(--font-size-secondary);
110
112
  text-align: center;
111
- padding: 18px 12px;
113
+ padding: 24px var(--spacing-sm);
112
114
  }
113
115
 
114
116
  .skills-import-block {
@@ -154,33 +154,44 @@
154
154
  }
155
155
 
156
156
  .skills-summary-item {
157
- border: 1px solid rgba(160, 145, 130, 0.2);
157
+ border: 1px solid var(--color-border-soft);
158
158
  border-radius: var(--radius-sm);
159
- background: linear-gradient(to bottom, rgba(255, 255, 255, 0.93) 0%, rgba(255, 255, 255, 0.78) 100%);
160
- padding: 10px 12px;
159
+ background: linear-gradient(to bottom, rgba(255,255,255,0.96) 0%, rgba(255,248,241,0.7) 100%);
160
+ padding: 10px 14px;
161
161
  min-width: 0;
162
162
  box-shadow: var(--shadow-subtle);
163
163
  display: flex;
164
164
  flex-direction: column;
165
- gap: 2px;
165
+ gap: 4px;
166
+ transition: transform var(--transition-fast) var(--ease-spring), box-shadow var(--transition-fast) var(--ease-spring);
167
+ }
168
+
169
+ .skills-summary-item:hover {
170
+ transform: translateY(-1px);
171
+ box-shadow: 0 4px 12px rgba(92,68,52,0.08);
166
172
  }
167
173
 
168
174
  .skills-summary-label {
169
175
  font-size: var(--font-size-caption);
170
176
  color: var(--color-text-tertiary);
177
+ text-transform: uppercase;
178
+ letter-spacing: 0.04em;
179
+ font-weight: var(--font-weight-caption);
171
180
  }
172
181
 
173
182
  .skills-summary-value {
174
183
  font-size: var(--font-size-large);
175
- color: var(--color-text-secondary);
184
+ color: var(--color-text-primary);
185
+ font-weight: 600;
176
186
  line-height: 1.2;
177
187
  }
178
188
 
179
189
  .skills-panel {
180
- border: 1px solid rgba(160, 145, 130, 0.24);
181
- border-radius: var(--radius-md);
182
- padding: 12px;
183
- background: linear-gradient(to bottom, rgba(255, 255, 255, 0.88) 0%, rgba(255, 255, 255, 0.72) 100%);
190
+ border: 1px solid var(--color-border);
191
+ border-radius: var(--radius-lg);
192
+ padding: var(--spacing-sm);
193
+ background: linear-gradient(to bottom, rgba(255,255,255,0.92) 0%, rgba(255,248,241,0.7) 100%);
194
+ box-shadow: var(--shadow-subtle);
184
195
  margin-bottom: var(--spacing-sm);
185
196
  }
186
197
 
@@ -223,18 +234,15 @@
223
234
  align-items: center;
224
235
  }
225
236
 
226
- /* 缩减顶部操作按钮尺寸(刷新概览 / 打开 Skills 管理),并确保两者对齐 */
237
+ /* Compact header action buttons */
227
238
  .selector-header.market-overview-header .market-header-actions .btn-tool-compact,
228
239
  .selector-header.market-overview-header .market-header-actions .btn-tool.btn-tool-compact {
229
- min-height: 22px !important;
230
- padding: 2px 7px !important;
231
- font-size: 10px !important;
232
- line-height: 1 !important;
240
+ min-height: 28px;
241
+ padding: 4px 10px;
242
+ font-size: var(--font-size-caption);
243
+ line-height: 1.3;
233
244
  white-space: nowrap;
234
- width: auto;
235
- display: inline-flex;
236
- align-items: center;
237
- justify-content: center;
245
+ border-radius: var(--radius-sm);
238
246
  }
239
247
 
240
248
  @media (max-width: 720px) {
@@ -259,30 +267,35 @@
259
267
  }
260
268
 
261
269
  .market-target-chip {
262
- border: 1px solid rgba(160, 145, 130, 0.28);
263
- border-radius: 999px;
264
- background: rgba(255, 255, 255, 0.92);
270
+ border: 1px solid var(--color-border);
271
+ border-radius: var(--radius-full);
272
+ background: rgba(255,255,255,0.9);
265
273
  color: var(--color-text-secondary);
266
- padding: 8px 14px;
274
+ padding: 8px 18px;
267
275
  font-size: var(--font-size-caption);
268
- font-weight: var(--font-weight-secondary);
276
+ font-weight: var(--font-weight-caption);
269
277
  cursor: pointer;
270
- transition: border-color var(--transition-fast) var(--ease-smooth), background var(--transition-fast) var(--ease-smooth), color var(--transition-fast) var(--ease-smooth), box-shadow var(--transition-fast) var(--ease-smooth);
278
+ transition: all var(--transition-fast) var(--ease-spring);
271
279
  }
272
280
 
273
281
  .market-target-chip:disabled,
274
282
  .market-target-chip[disabled] {
275
283
  cursor: not-allowed;
276
- opacity: 0.64;
284
+ opacity: 0.5;
277
285
  pointer-events: none;
278
286
  box-shadow: none;
279
287
  }
280
288
 
281
289
  .market-target-chip.active {
282
- border-color: rgba(208, 88, 58, 0.4);
283
- background: linear-gradient(to bottom, rgba(255, 243, 236, 0.98) 0%, rgba(255, 232, 220, 0.86) 100%);
284
- color: #8c3a1f;
285
- box-shadow: var(--shadow-subtle);
290
+ border-color: rgba(200,121,99,0.4);
291
+ background: linear-gradient(to bottom, rgba(255,243,236,0.98) 0%, rgba(255,232,220,0.86) 100%);
292
+ color: var(--color-brand-dark);
293
+ box-shadow: 0 2px 8px rgba(200,121,99,0.12);
294
+ }
295
+
296
+ .market-target-chip:hover:not(.active):not(:disabled) {
297
+ border-color: rgba(200,121,99,0.3);
298
+ background: rgba(255,243,236,0.4);
286
299
  }
287
300
 
288
301
  .market-root-box {
@@ -315,13 +328,19 @@
315
328
 
316
329
  .market-preview-item {
317
330
  display: flex;
318
- align-items: flex-start;
331
+ align-items: center;
319
332
  justify-content: space-between;
320
333
  gap: var(--spacing-xs);
321
334
  padding: 10px 12px;
322
- border: 1px solid rgba(160, 145, 130, 0.18);
335
+ border: 1px solid var(--color-border-soft);
323
336
  border-radius: var(--radius-sm);
324
- background: rgba(255, 255, 255, 0.64);
337
+ background: rgba(255,255,255,0.55);
338
+ transition: all var(--transition-fast) var(--ease-spring);
339
+ }
340
+
341
+ .market-preview-item:hover {
342
+ background: rgba(255,255,255,0.75);
343
+ border-color: var(--color-border);
325
344
  }
326
345
 
327
346
  .market-preview-main {
@@ -352,39 +371,43 @@
352
371
  }
353
372
 
354
373
  .market-action-card {
355
- border: 1px solid rgba(160, 145, 130, 0.24);
356
- border-radius: var(--radius-sm);
357
- background: linear-gradient(to bottom, rgba(255, 255, 255, 0.96) 0%, rgba(255, 248, 242, 0.84) 100%);
358
- color: var(--color-text-secondary);
374
+ border: 1px solid var(--color-border);
375
+ border-radius: var(--radius-md);
376
+ background: linear-gradient(to bottom, rgba(255,255,255,0.96) 0%, rgba(255,248,241,0.8) 100%);
377
+ color: var(--color-text-primary);
359
378
  text-align: left;
360
- padding: 14px;
379
+ padding: var(--spacing-sm) 16px;
361
380
  display: flex;
362
381
  flex-direction: column;
363
382
  gap: 6px;
364
383
  cursor: pointer;
365
- transition: transform var(--transition-fast) var(--ease-smooth), box-shadow var(--transition-fast) var(--ease-smooth), border-color var(--transition-fast) var(--ease-smooth);
384
+ transition: all var(--transition-fast) var(--ease-spring);
366
385
  }
367
386
 
368
387
  .market-action-card:hover:not(:disabled) {
369
- transform: translateY(-1px);
370
- border-color: rgba(208, 88, 58, 0.34);
371
- box-shadow: var(--shadow-subtle);
388
+ transform: translateY(-2px);
389
+ border-color: rgba(200,121,99,0.4);
390
+ box-shadow: var(--shadow-card);
391
+ }
392
+
393
+ .market-action-card:active:not(:disabled) {
394
+ transform: translateY(0);
372
395
  }
373
396
 
374
397
  .market-action-card:disabled {
375
398
  cursor: not-allowed;
376
- opacity: 0.64;
399
+ opacity: 0.5;
377
400
  }
378
401
 
379
402
  .market-action-title {
380
403
  font-size: var(--font-size-body);
381
- font-weight: var(--font-weight-secondary);
404
+ font-weight: var(--font-weight-primary);
382
405
  }
383
406
 
384
407
  .market-action-copy {
385
408
  font-size: var(--font-size-caption);
386
409
  color: var(--color-text-tertiary);
387
- line-height: 1.45;
410
+ line-height: 1.5;
388
411
  }
389
412
 
390
413
  .skills-filter-row {
@@ -0,0 +1,90 @@
1
+ /* 回收站面板 — 极简·本质 */
2
+
3
+ .trash-panel-shell {
4
+ max-width: 720px;
5
+ margin: 0 auto;
6
+ padding: 20px 0 40px;
7
+ }
8
+
9
+ /* ---- 空态 — 宁静留白 ---- */
10
+ .trash-empty-state {
11
+ display: flex;
12
+ flex-direction: column;
13
+ align-items: center;
14
+ justify-content: center;
15
+ gap: 12px;
16
+ padding: 80px 20px;
17
+ text-align: center;
18
+ }
19
+
20
+ .trash-empty-icon {
21
+ font-size: 40px;
22
+ line-height: 1;
23
+ opacity: 0.45;
24
+ margin-bottom: 4px;
25
+ }
26
+
27
+ .trash-empty-title {
28
+ font-size: 15px;
29
+ font-weight: 600;
30
+ color: var(--color-text-secondary);
31
+ }
32
+
33
+ .trash-empty-hint {
34
+ font-size: var(--font-size-caption);
35
+ color: var(--color-text-muted);
36
+ max-width: 280px;
37
+ line-height: 1.5;
38
+ }
39
+
40
+ /* ---- 工具栏 — 克制·精确 ---- */
41
+ .trash-toolbar {
42
+ display: flex;
43
+ align-items: center;
44
+ justify-content: space-between;
45
+ gap: 12px;
46
+ padding: 0 0 14px;
47
+ border-bottom: 1px solid var(--color-border-soft);
48
+ margin-bottom: 14px;
49
+ }
50
+
51
+ .trash-toolbar-left {
52
+ display: flex;
53
+ align-items: baseline;
54
+ gap: 6px;
55
+ }
56
+
57
+ .trash-toolbar-count {
58
+ font-size: 13px;
59
+ font-weight: 600;
60
+ color: var(--color-text-primary);
61
+ }
62
+
63
+ .trash-toolbar-retention {
64
+ font-size: var(--font-size-caption);
65
+ color: var(--color-text-muted);
66
+ }
67
+
68
+ .trash-toolbar-right {
69
+ display: flex;
70
+ align-items: center;
71
+ gap: 6px;
72
+ }
73
+
74
+ /* ---- 列表项微调 ---- */
75
+ .trash-item-dot {
76
+ color: var(--color-text-muted);
77
+ margin: 0 2px;
78
+ }
79
+
80
+ .trash-item-time {
81
+ font-size: var(--font-size-caption);
82
+ color: var(--color-text-muted);
83
+ }
84
+
85
+ /* ---- 加载更多 ---- */
86
+ .trash-list-footer {
87
+ display: flex;
88
+ justify-content: center;
89
+ padding: 16px 0;
90
+ }
@@ -0,0 +1,81 @@
1
+ /* webhook 行 — 对齐暖色设计系统 */
2
+ .webhook-row {
3
+ display: flex;
4
+ align-items: center;
5
+ gap: 6px;
6
+ margin: 6px 0;
7
+ }
8
+
9
+ .webhook-events {
10
+ display: flex;
11
+ flex-wrap: wrap;
12
+ gap: 8px;
13
+ margin: 6px 0;
14
+ }
15
+
16
+ .webhook-event-item {
17
+ display: inline-flex;
18
+ align-items: center;
19
+ gap: 4px;
20
+ font-size: var(--font-size-caption);
21
+ color: var(--color-text-secondary);
22
+ }
23
+
24
+ .status-on {
25
+ color: var(--color-success);
26
+ font-weight: var(--font-weight-secondary);
27
+ }
28
+
29
+ .status-off {
30
+ color: var(--color-text-muted);
31
+ }
32
+
33
+ /* 只读展示行 */
34
+ .webhook-readonly-row {
35
+ display: flex;
36
+ align-items: flex-start;
37
+ gap: 12px;
38
+ padding: 6px 0;
39
+ }
40
+
41
+ .webhook-readonly-row + .webhook-readonly-row {
42
+ border-top: 1px solid var(--color-border-soft);
43
+ }
44
+
45
+ .webhook-readonly-label {
46
+ flex: 0 0 56px;
47
+ font-size: var(--font-size-caption);
48
+ color: var(--color-text-muted);
49
+ font-weight: var(--font-weight-secondary);
50
+ padding-top: 2px;
51
+ }
52
+
53
+ .webhook-readonly-value {
54
+ flex: 1 1 auto;
55
+ min-width: 0;
56
+ font-family: var(--font-family-mono);
57
+ font-size: 11px;
58
+ padding: 2px 8px;
59
+ border-radius: 6px;
60
+ background: rgba(247, 240, 233, 0.55);
61
+ color: var(--color-text-secondary);
62
+ word-break: break-all;
63
+ line-height: 1.5;
64
+ }
65
+
66
+ .webhook-readonly-tags {
67
+ display: flex;
68
+ flex-wrap: wrap;
69
+ gap: 6px;
70
+ }
71
+
72
+ .webhook-event-tag {
73
+ display: inline-block;
74
+ padding: 2px 8px;
75
+ border-radius: 999px;
76
+ border: 1px solid var(--color-border);
77
+ background: var(--color-brand-light);
78
+ color: var(--color-brand-dark);
79
+ font-size: var(--font-size-caption);
80
+ font-weight: var(--font-weight-secondary);
81
+ }
package/web-ui/styles.css CHANGED
@@ -19,3 +19,5 @@
19
19
  @import url('./styles/docs-panel.css');
20
20
  @import url('./styles/feedback.css');
21
21
  @import url('./styles/responsive.css');
22
+ @import url('./styles/webhook.css');
23
+ @import url('./styles/trash-panel.css');