codexmate 0.0.31 → 0.0.33

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 (37) hide show
  1. package/README.md +92 -308
  2. package/README.zh.md +94 -318
  3. package/cli/local-bridge.js +227 -0
  4. package/cli/update.js +162 -0
  5. package/cli.js +357 -112
  6. package/lib/cli-sessions.js +16 -6
  7. package/lib/win-tray.js +119 -0
  8. package/package.json +2 -2
  9. package/web-ui/app.js +4 -0
  10. package/web-ui/logic.sessions.mjs +17 -1
  11. package/web-ui/modules/app.computed.session.mjs +51 -315
  12. package/web-ui/modules/app.methods.agents.mjs +19 -0
  13. package/web-ui/modules/app.methods.claude-config.mjs +71 -2
  14. package/web-ui/modules/app.methods.codex-config.mjs +20 -0
  15. package/web-ui/modules/app.methods.providers.mjs +53 -7
  16. package/web-ui/modules/app.methods.session-actions.mjs +1 -1
  17. package/web-ui/modules/app.methods.session-browser.mjs +29 -1
  18. package/web-ui/modules/app.methods.startup-claude.mjs +4 -0
  19. package/web-ui/modules/i18n.dict.mjs +21 -3
  20. package/web-ui/partials/index/layout-header.html +1 -2
  21. package/web-ui/partials/index/modal-config-template-agents.html +12 -1
  22. package/web-ui/partials/index/modals-basic.html +14 -3
  23. package/web-ui/partials/index/panel-config-claude.html +57 -85
  24. package/web-ui/partials/index/panel-config-codex.html +60 -226
  25. package/web-ui/partials/index/panel-dashboard.html +0 -33
  26. package/web-ui/partials/index/panel-docs.html +21 -53
  27. package/web-ui/partials/index/panel-sessions.html +37 -20
  28. package/web-ui/partials/index/panel-trash.html +33 -38
  29. package/web-ui/partials/index/panel-usage.html +71 -304
  30. package/web-ui/styles/controls-forms.css +11 -0
  31. package/web-ui/styles/docs-panel.css +57 -83
  32. package/web-ui/styles/layout-shell.css +26 -24
  33. package/web-ui/styles/modals-core.css +33 -0
  34. package/web-ui/styles/responsive.css +5 -67
  35. package/web-ui/styles/sessions-list.css +274 -8
  36. package/web-ui/styles/sessions-toolbar-trash.css +185 -15
  37. package/web-ui/styles/sessions-usage.css +336 -788
@@ -1,42 +1,14 @@
1
- .docs-mode-content {
2
- display: grid;
3
- gap: 14px;
4
- cursor: default;
5
- }
6
-
7
- .docs-mode-content * {
8
- cursor: default;
9
- }
10
-
11
- .docs-mode-content button,
12
- .docs-mode-content [role="button"] {
13
- cursor: pointer;
14
- }
15
-
16
- .docs-mode-content input,
17
- .docs-mode-content textarea {
18
- cursor: text;
19
- }
20
-
21
- .docs-mode-content select {
22
- cursor: pointer;
23
- }
24
-
25
- .docs-overview-section,
26
- .docs-command-section,
27
- .docs-help-section {
28
- gap: 12px;
29
- }
30
-
31
- .docs-overview-header,
32
- .docs-section-header {
33
- align-items: flex-start;
34
- }
1
+ /* ============================================
2
+ Docs / Install Panel — Refined
3
+ ============================================ */
35
4
 
36
- .docs-section-note {
37
- margin-top: 4px;
5
+ .docs-mode-content {
6
+ display: flex;
7
+ flex-direction: column;
8
+ gap: 16px;
38
9
  }
39
10
 
11
+ /* ---- Toolbar grid ---- */
40
12
  .docs-toolbar-grid {
41
13
  display: grid;
42
14
  grid-template-columns: repeat(12, minmax(0, 1fr));
@@ -45,20 +17,20 @@
45
17
 
46
18
  .docs-toolbar-card {
47
19
  grid-column: span 4;
48
- display: grid;
20
+ display: flex;
21
+ flex-direction: column;
49
22
  gap: 8px;
50
23
  padding: 14px;
51
24
  border: 1px solid var(--color-border-soft);
52
25
  border-radius: var(--radius-md);
53
- background: rgba(255, 255, 255, 0.42);
54
- box-shadow: var(--shadow-subtle);
55
- backdrop-filter: blur(8px);
26
+ background: var(--color-surface);
56
27
  }
57
28
 
58
29
  .docs-toolbar-card-wide {
59
30
  grid-column: span 8;
60
31
  }
61
32
 
33
+ /* ---- Summary strip ---- */
62
34
  .docs-summary-strip {
63
35
  display: grid;
64
36
  grid-template-columns: repeat(4, minmax(0, 1fr));
@@ -67,13 +39,13 @@
67
39
  }
68
40
 
69
41
  .docs-summary-item {
70
- display: grid;
42
+ display: flex;
43
+ flex-direction: column;
71
44
  gap: 4px;
72
- padding: 12px 14px;
45
+ padding: 14px 16px;
73
46
  border: 1px solid var(--color-border-soft);
74
47
  border-radius: var(--radius-md);
75
- background: linear-gradient(180deg, rgba(255,255,255,0.88), rgba(255,251,247,0.78));
76
- box-shadow: var(--shadow-card);
48
+ background: var(--color-surface);
77
49
  }
78
50
 
79
51
  .docs-summary-item-wide {
@@ -86,39 +58,42 @@
86
58
  color: var(--color-text-muted);
87
59
  letter-spacing: 0.06em;
88
60
  text-transform: uppercase;
89
- opacity: 0.82;
90
61
  }
91
62
 
92
63
  .docs-summary-value {
93
- font-size: 15px;
64
+ font-size: 18px;
94
65
  font-weight: 700;
95
66
  color: var(--color-text-primary);
96
- line-height: 1.25;
97
- word-break: break-word;
67
+ line-height: 1.2;
98
68
  letter-spacing: -0.02em;
69
+ word-break: break-word;
99
70
  }
100
71
 
72
+ /* ---- Install rows ---- */
101
73
  .docs-install-list {
102
- margin-top: 0;
74
+ display: flex;
75
+ flex-direction: column;
76
+ gap: 10px;
103
77
  }
104
78
 
105
79
  .docs-install-row {
106
- align-items: stretch;
107
- background: linear-gradient(180deg, rgba(255,255,255,0.88), rgba(255,251,247,0.78));
80
+ padding: 16px;
108
81
  border: 1px solid var(--color-border-soft);
109
82
  border-radius: var(--radius-md);
110
- padding: 14px;
111
- box-shadow: var(--shadow-card);
83
+ background: var(--color-surface);
112
84
  }
113
85
 
114
86
  .docs-command-head {
115
- display: grid;
87
+ display: flex;
88
+ flex-direction: column;
116
89
  gap: 6px;
90
+ margin-bottom: 10px;
117
91
  }
118
92
 
119
93
  .docs-command-row {
120
- display: grid;
121
- gap: 10px;
94
+ display: flex;
95
+ flex-direction: column;
96
+ gap: 8px;
122
97
  }
123
98
 
124
99
  .docs-command-row-secondary {
@@ -126,28 +101,28 @@
126
101
  }
127
102
 
128
103
  .docs-command-box {
129
- display: grid;
130
- grid-template-columns: 1fr auto;
131
- align-items: stretch;
104
+ display: flex;
105
+ align-items: center;
132
106
  gap: 10px;
133
107
  padding: 10px 10px 10px 14px;
134
108
  border: 1px solid var(--color-border-soft);
135
109
  border-radius: var(--radius-sm);
136
- background: rgba(255,255,255,0.64);
137
- box-shadow: var(--shadow-subtle);
110
+ background: var(--color-surface-alt);
138
111
  }
139
112
 
140
- .docs-command-row .install-command {
113
+ .docs-command-box .install-command {
114
+ flex: 1;
141
115
  min-width: 0;
142
- padding: 10px 14px;
116
+ padding: 8px 12px;
143
117
  border-radius: var(--radius-sm);
144
- background: rgba(18,22,35,0.04);
145
- border: 1px solid rgba(18,22,35,0.05);
118
+ background: var(--color-surface);
119
+ border: 1px solid var(--color-border-soft);
146
120
  overflow-x: auto;
147
121
  white-space: nowrap;
148
- user-select: text;
149
122
  font-size: 13px;
150
123
  line-height: 1.5;
124
+ font-family: var(--font-family-mono);
125
+ user-select: all;
151
126
  }
152
127
 
153
128
  .docs-command-prefix {
@@ -167,7 +142,7 @@
167
142
  .docs-command-meta {
168
143
  display: flex;
169
144
  flex-wrap: wrap;
170
- gap: 6px 10px;
145
+ gap: 6px;
171
146
  font-size: 11px;
172
147
  color: var(--color-text-tertiary);
173
148
  }
@@ -175,25 +150,24 @@
175
150
  .docs-meta-pill {
176
151
  display: inline-flex;
177
152
  align-items: center;
178
- padding: 3px 10px;
153
+ padding: 2px 8px;
179
154
  border-radius: 999px;
180
155
  border: 1px solid var(--color-border-soft);
181
- background: rgba(255,255,255,0.72);
156
+ background: var(--color-surface-alt);
182
157
  font-size: 11px;
183
158
  font-weight: 600;
184
159
  color: var(--color-text-secondary);
185
- letter-spacing: 0.01em;
186
160
  }
187
161
 
188
162
  .docs-copy-btn {
189
- min-width: 72px;
190
- min-height: 40px;
191
- flex: 0 0 auto;
163
+ flex-shrink: 0;
164
+ min-width: 64px;
165
+ height: 36px;
192
166
  border-radius: var(--radius-sm);
193
167
  font-weight: 600;
194
- letter-spacing: 0.01em;
195
168
  }
196
169
 
170
+ /* ---- Help section ---- */
197
171
  .docs-help-grid {
198
172
  display: grid;
199
173
  grid-template-columns: repeat(2, minmax(0, 1fr));
@@ -204,8 +178,7 @@
204
178
  padding: 16px;
205
179
  border: 1px solid var(--color-border-soft);
206
180
  border-radius: var(--radius-md);
207
- background: linear-gradient(180deg, rgba(255,255,255,0.86), rgba(255,251,247,0.76));
208
- box-shadow: var(--shadow-card);
181
+ background: var(--color-surface);
209
182
  }
210
183
 
211
184
  .docs-note-title {
@@ -213,11 +186,10 @@
213
186
  font-weight: 700;
214
187
  color: var(--color-text-primary);
215
188
  margin-bottom: 10px;
216
- letter-spacing: -0.02em;
217
189
  }
218
190
 
219
191
  .docs-help-list {
220
- margin-top: 0;
192
+ margin: 0;
221
193
  }
222
194
 
223
195
  .docs-static-list {
@@ -232,6 +204,11 @@
232
204
  margin-top: 8px;
233
205
  }
234
206
 
207
+ .docs-section-note {
208
+ margin-top: 4px;
209
+ }
210
+
211
+ /* ---- Responsive ---- */
235
212
  @media (max-width: 1100px) {
236
213
  .docs-toolbar-card,
237
214
  .docs-toolbar-card-wide {
@@ -257,12 +234,9 @@
257
234
  grid-column: span 1;
258
235
  }
259
236
 
260
- .docs-command-row {
261
- gap: 8px;
262
- }
263
-
264
237
  .docs-command-box {
265
- grid-template-columns: 1fr;
238
+ flex-direction: column;
239
+ align-items: stretch;
266
240
  }
267
241
 
268
242
  .docs-copy-btn {
@@ -55,7 +55,6 @@ body::after {
55
55
  border-radius: 0;
56
56
  box-shadow: 8px 0 28px rgba(92, 68, 52, 0.05), 1px 0 0 rgba(255, 255, 255, 0.5);
57
57
  min-height: 100vh;
58
- overflow-y: auto;
59
58
  scrollbar-width: none;
60
59
  -ms-overflow-style: none;
61
60
  backdrop-filter: blur(18px) saturate(130%);
@@ -65,11 +64,6 @@ body::after {
65
64
  display: none;
66
65
  }
67
66
 
68
- .side-rail .brand-title {
69
- font-size: 22px;
70
- margin-bottom: 0;
71
- }
72
-
73
67
  .side-section {
74
68
  display: flex;
75
69
  flex-direction: column;
@@ -84,8 +78,15 @@ body::after {
84
78
  .side-rail-nav {
85
79
  display: flex;
86
80
  flex-direction: column;
87
- gap: 0;
88
81
  flex: 1 1 auto;
82
+ gap: 0;
83
+ overflow-y: auto;
84
+ scrollbar-width: none;
85
+ -ms-overflow-style: none;
86
+ }
87
+
88
+ .side-rail-nav::-webkit-scrollbar {
89
+ display: none;
89
90
  }
90
91
 
91
92
  .lang-fab {
@@ -168,7 +169,6 @@ body::after {
168
169
  transform: none;
169
170
  z-index: 60;
170
171
  pointer-events: none;
171
- display: flex;
172
172
  justify-content: center;
173
173
  }
174
174
 
@@ -206,16 +206,19 @@ body::after {
206
206
  }
207
207
 
208
208
  .side-rail-lang {
209
- position: sticky;
209
+ position: absolute;
210
210
  bottom: 0;
211
+ left: 0;
212
+ right: 0;
211
213
  z-index: 2;
212
- margin-top: auto;
213
214
  padding: 10px 4px 6px;
214
215
  background: linear-gradient(180deg, rgba(255, 248, 241, 0), rgba(255, 248, 241, 0.94) 28%);
215
216
  border-top: 1px solid rgba(137, 111, 94, 0.08);
216
217
  backdrop-filter: blur(12px);
217
218
  display: flex;
218
- justify-content: center;
219
+ flex-direction: column;
220
+ align-items: center;
221
+ gap: 4px;
219
222
  }
220
223
 
221
224
  .side-rail-lang .lang-choice {
@@ -453,12 +456,20 @@ body::after {
453
456
  }
454
457
 
455
458
  .brand-kicker {
459
+ font-size: 18px;
460
+ line-height: 1.15;
461
+ font-family: var(--font-family-display);
462
+ color: var(--color-text-primary);
463
+ letter-spacing: -0.02em;
464
+ font-weight: 700;
465
+ }
466
+
467
+ .brand-version {
456
468
  font-size: 11px;
457
- line-height: 1;
458
- letter-spacing: 0.06em;
459
- text-transform: uppercase;
469
+ font-weight: 500;
460
470
  color: var(--color-text-muted);
461
- font-weight: 700;
471
+ vertical-align: middle;
472
+ margin-left: 4px;
462
473
  }
463
474
 
464
475
  .brand-subtitle {
@@ -468,15 +479,6 @@ body::after {
468
479
  max-width: 22ch;
469
480
  }
470
481
 
471
- .brand-title {
472
- font-size: 18px;
473
- line-height: 1.15;
474
- font-family: var(--font-family-display);
475
- color: var(--color-text-primary);
476
- letter-spacing: -0.02em;
477
- font-weight: 700;
478
- }
479
-
480
482
  .github-badge {
481
483
  display: inline-flex;
482
484
  align-items: center;
@@ -266,6 +266,39 @@
266
266
  opacity: 0.7;
267
267
  }
268
268
 
269
+ .input-with-toggle {
270
+ position: relative;
271
+ display: flex;
272
+ align-items: center;
273
+ }
274
+
275
+ .input-with-toggle .form-input {
276
+ width: 100%;
277
+ padding-right: 36px;
278
+ }
279
+
280
+ .input-toggle-btn {
281
+ position: absolute;
282
+ right: 6px;
283
+ display: flex;
284
+ align-items: center;
285
+ justify-content: center;
286
+ width: 28px;
287
+ height: 28px;
288
+ padding: 0;
289
+ border: none;
290
+ border-radius: var(--radius-sm);
291
+ background: transparent;
292
+ color: var(--color-text-secondary);
293
+ cursor: pointer;
294
+ transition: color var(--transition-fast);
295
+ }
296
+
297
+ .input-toggle-btn:hover {
298
+ color: var(--color-text-primary);
299
+ background: var(--color-surface-alt);
300
+ }
301
+
269
302
  .form-select {
270
303
  width: 100%;
271
304
  min-height: 44px;
@@ -284,81 +284,19 @@ textarea:focus-visible {
284
284
  align-items: center;
285
285
  }
286
286
 
287
- .trash-item.session-item {
288
- min-height: auto;
289
- height: auto;
290
- contain-intrinsic-size: auto;
291
- }
292
-
293
- .trash-item-header {
287
+ .trash-item-body {
294
288
  flex-direction: column;
295
289
  align-items: stretch;
296
290
  gap: 10px;
297
291
  }
298
292
 
299
- .trash-item-mainline {
300
- flex-direction: column;
301
- align-items: flex-start;
302
- gap: 6px;
303
- }
304
-
305
- .trash-item-side {
306
- width: 100%;
307
- min-width: 0;
308
- align-items: stretch;
309
- gap: 10px;
310
- padding-top: 8px;
311
- border-top: 1px dashed rgba(216, 201, 184, 0.55);
312
- }
313
-
314
293
  .trash-item-actions {
315
- display: grid;
316
- grid-template-columns: repeat(2, minmax(0, 1fr));
317
- justify-content: flex-start;
318
- width: 100%;
319
- }
320
-
321
- .trash-item-actions .btn-mini {
322
- width: 100%;
323
- height: 44px;
324
- min-height: 44px;
325
- padding: 0 10px;
326
- display: inline-flex;
327
- align-items: center;
328
- justify-content: center;
329
- line-height: 1;
330
- white-space: nowrap;
331
- }
332
-
333
- .trash-item .session-count-badge {
334
- align-self: flex-start;
335
- margin-top: 0;
336
- }
337
-
338
- .trash-item-title {
339
- -webkit-line-clamp: 3;
340
- max-height: none;
341
- white-space: normal;
342
- text-overflow: clip;
343
- overflow: hidden;
344
- }
345
-
346
- .trash-item-meta {
347
- margin-top: 6px;
348
- margin-bottom: 0;
349
- gap: 6px;
350
- align-items: center;
351
- }
352
-
353
- .trash-item-time {
354
- padding-top: 2px;
355
- line-height: 1.35;
356
- text-align: right;
294
+ opacity: 1;
295
+ justify-content: flex-end;
357
296
  }
358
297
 
359
- .trash-item-path {
360
- grid-template-columns: 1fr;
361
- gap: 4px;
298
+ .trash-item-cwd {
299
+ max-width: 140px;
362
300
  }
363
301
 
364
302
  .card {