codexmate 0.0.20 → 0.0.22

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 (96) hide show
  1. package/README.md +289 -152
  2. package/README.zh.md +321 -0
  3. package/cli/agents-files.js +224 -0
  4. package/cli/archive-helpers.js +446 -0
  5. package/cli/auth-profiles.js +359 -0
  6. package/cli/builtin-proxy.js +1044 -0
  7. package/cli/claude-proxy.js +998 -0
  8. package/cli/config-bootstrap.js +384 -0
  9. package/cli/openai-bridge.js +950 -0
  10. package/cli/openclaw-config.js +629 -0
  11. package/cli/session-usage.concurrent.js +28 -0
  12. package/cli/session-usage.js +112 -0
  13. package/cli/session-usage.models.js +176 -0
  14. package/cli/skills.js +1141 -0
  15. package/cli/zip-commands.js +510 -0
  16. package/cli.js +9408 -9719
  17. package/lib/cli-models-utils.js +109 -1
  18. package/lib/cli-path-utils.js +69 -0
  19. package/lib/cli-sessions.js +386 -0
  20. package/lib/download-artifacts.js +77 -0
  21. package/lib/task-orchestrator.js +869 -0
  22. package/package.json +14 -10
  23. package/res/logo.png +0 -0
  24. package/res/vue.global.prod.js +13 -0
  25. package/web-ui/app.js +193 -15
  26. package/web-ui/index.html +5 -1
  27. package/web-ui/logic.agents-diff.mjs +1 -1
  28. package/web-ui/logic.claude.mjs +60 -0
  29. package/web-ui/logic.runtime.mjs +11 -7
  30. package/web-ui/logic.sessions.mjs +372 -21
  31. package/web-ui/modules/api.mjs +22 -1
  32. package/web-ui/modules/app.computed.dashboard.mjs +23 -10
  33. package/web-ui/modules/app.computed.index.mjs +4 -0
  34. package/web-ui/modules/app.computed.main-tabs.mjs +198 -0
  35. package/web-ui/modules/app.computed.session.mjs +521 -9
  36. package/web-ui/modules/app.methods.agents.mjs +62 -11
  37. package/web-ui/modules/app.methods.codex-config.mjs +189 -34
  38. package/web-ui/modules/app.methods.index.mjs +7 -1
  39. package/web-ui/modules/app.methods.install.mjs +24 -20
  40. package/web-ui/modules/app.methods.navigation.mjs +142 -1
  41. package/web-ui/modules/app.methods.openclaw-core.mjs +339 -39
  42. package/web-ui/modules/app.methods.openclaw-editing.mjs +39 -4
  43. package/web-ui/modules/app.methods.openclaw-persist.mjs +122 -4
  44. package/web-ui/modules/app.methods.providers.mjs +192 -53
  45. package/web-ui/modules/app.methods.session-actions.mjs +99 -19
  46. package/web-ui/modules/app.methods.session-browser.mjs +196 -5
  47. package/web-ui/modules/app.methods.session-timeline.mjs +22 -15
  48. package/web-ui/modules/app.methods.session-trash.mjs +3 -0
  49. package/web-ui/modules/app.methods.startup-claude.mjs +70 -71
  50. package/web-ui/modules/app.methods.task-orchestration.mjs +471 -0
  51. package/web-ui/modules/config-mode.computed.mjs +2 -0
  52. package/web-ui/modules/config-template-confirm-pref.mjs +33 -0
  53. package/web-ui/modules/i18n.mjs +1609 -0
  54. package/web-ui/modules/plugins.computed.mjs +220 -0
  55. package/web-ui/modules/plugins.methods.mjs +620 -0
  56. package/web-ui/modules/plugins.storage.mjs +37 -0
  57. package/web-ui/partials/index/layout-footer.html +1 -57
  58. package/web-ui/partials/index/layout-header.html +299 -175
  59. package/web-ui/partials/index/modal-config-template-agents.html +79 -29
  60. package/web-ui/partials/index/modal-confirm-toast.html +1 -1
  61. package/web-ui/partials/index/modal-health-check.html +14 -14
  62. package/web-ui/partials/index/modal-openclaw-config.html +47 -42
  63. package/web-ui/partials/index/modal-skills.html +130 -114
  64. package/web-ui/partials/index/modals-basic.html +71 -102
  65. package/web-ui/partials/index/panel-config-claude.html +50 -12
  66. package/web-ui/partials/index/panel-config-codex.html +34 -37
  67. package/web-ui/partials/index/panel-config-openclaw.html +10 -16
  68. package/web-ui/partials/index/panel-docs.html +147 -0
  69. package/web-ui/partials/index/panel-market.html +38 -38
  70. package/web-ui/partials/index/panel-orchestration.html +397 -0
  71. package/web-ui/partials/index/panel-plugins.html +243 -0
  72. package/web-ui/partials/index/panel-sessions.html +51 -146
  73. package/web-ui/partials/index/panel-settings.html +188 -96
  74. package/web-ui/partials/index/panel-usage.html +353 -0
  75. package/web-ui/session-helpers.mjs +221 -10
  76. package/web-ui/styles/base-theme.css +120 -229
  77. package/web-ui/styles/controls-forms.css +59 -51
  78. package/web-ui/styles/docs-panel.css +247 -0
  79. package/web-ui/styles/layout-shell.css +394 -128
  80. package/web-ui/styles/modals-core.css +18 -3
  81. package/web-ui/styles/navigation-panels.css +184 -183
  82. package/web-ui/styles/plugins-panel.css +518 -0
  83. package/web-ui/styles/responsive.css +102 -62
  84. package/web-ui/styles/sessions-list.css +13 -27
  85. package/web-ui/styles/sessions-preview.css +13 -7
  86. package/web-ui/styles/sessions-toolbar-trash.css +25 -0
  87. package/web-ui/styles/sessions-usage.css +581 -6
  88. package/web-ui/styles/settings-panel.css +166 -0
  89. package/web-ui/styles/skills-list.css +16 -11
  90. package/web-ui/styles/skills-market.css +63 -2
  91. package/web-ui/styles/task-orchestration.css +776 -0
  92. package/web-ui/styles/titles-cards.css +67 -66
  93. package/web-ui/styles.css +4 -0
  94. package/README.en.md +0 -259
  95. package/res/screenshot.png +0 -0
  96. package/res/vue.global.js +0 -18552
@@ -34,58 +34,100 @@
34
34
  .status-strip {
35
35
  display: flex;
36
36
  flex-wrap: wrap;
37
- gap: var(--spacing-xs);
38
- margin-bottom: var(--spacing-sm);
39
- margin-top: 6px;
37
+ gap: 8px;
38
+ margin: 0 0 12px;
40
39
  }
41
40
 
42
- .status-chip {
43
- min-width: 200px;
41
+ /* Give the status strip a bit more breathing room under the sticky header. */
42
+ .main-panel-topbar .status-strip {
43
+ margin-top: 10px;
44
+ margin-bottom: 16px;
45
+ }
46
+
47
+ .lang-toggle {
48
+ display: grid;
49
+ grid-template-columns: 1fr 1fr;
50
+ gap: 10px;
51
+ }
52
+
53
+ .lang-toggle-btn {
54
+ border: 1px solid var(--color-border);
55
+ background: rgba(255, 255, 255, 0.75);
56
+ border-radius: 10px;
44
57
  padding: 10px 12px;
45
- border-radius: var(--radius-lg);
46
- border: 1px solid var(--color-border-soft);
47
- background: linear-gradient(180deg, rgba(255, 255, 255, 0.99) 0%, rgba(255, 250, 245, 0.97) 100%);
48
- box-shadow: var(--shadow-subtle);
58
+ font-size: 12px;
59
+ font-weight: 700;
60
+ color: var(--color-text-secondary);
61
+ transition: background 160ms ease, border-color 160ms ease, color 160ms ease;
62
+ }
63
+
64
+ .lang-toggle-btn:hover {
65
+ border-color: rgba(0, 0, 0, 0.22);
66
+ background: rgba(255, 255, 255, 0.95);
67
+ }
68
+
69
+ .lang-toggle-btn.active {
70
+ background: rgba(18, 22, 35, 0.10);
71
+ border-color: rgba(18, 22, 35, 0.30);
72
+ color: var(--color-text);
73
+ }
74
+
75
+ .status-chip {
76
+ min-width: 0;
77
+ max-width: 100%;
78
+ padding: 6px 10px;
79
+ border: 1px solid var(--color-border);
80
+ background: rgba(255, 253, 252, 0.82);
81
+ box-shadow: none;
82
+ display: inline-flex;
83
+ flex-direction: row;
84
+ align-items: center;
85
+ gap: 8px;
86
+ border-radius: 999px;
49
87
  }
50
88
 
51
89
  .status-chip .label {
52
- display: block;
53
- font-size: var(--font-size-caption);
54
- color: var(--color-text-tertiary);
55
- margin-bottom: 4px;
90
+ display: inline;
91
+ font-size: 10px;
92
+ color: var(--color-text-muted);
93
+ margin-bottom: 0;
94
+ letter-spacing: 0.06em;
95
+ text-transform: uppercase;
96
+ flex-shrink: 0;
56
97
  }
57
98
 
58
99
  .status-chip .value {
59
- font-size: var(--font-size-body);
60
- font-weight: var(--font-weight-secondary);
100
+ font-size: 12px;
101
+ font-weight: 600;
61
102
  color: var(--color-text-primary);
62
103
  letter-spacing: -0.01em;
63
- white-space: normal;
64
- overflow-wrap: anywhere;
65
- word-break: break-word;
104
+ white-space: nowrap;
105
+ overflow-wrap: normal;
106
+ word-break: normal;
66
107
  }
67
108
 
68
109
  .provider-fast-switch {
69
- margin: 0 0 var(--spacing-sm);
110
+ margin: 0 0 14px;
70
111
  padding: 10px 12px;
71
- border-radius: var(--radius-lg);
72
- border: 1px solid rgba(216, 201, 184, 0.6);
73
- background: linear-gradient(180deg, rgba(255, 255, 255, 0.98) 0%, rgba(255, 249, 243, 0.96) 100%);
74
- box-shadow: var(--shadow-subtle);
112
+ border-radius: 10px;
113
+ border: 1px solid var(--color-border);
114
+ background: rgba(255, 253, 252, 0.88);
115
+ box-shadow: none;
75
116
  display: grid;
76
117
  gap: 6px;
77
118
  }
78
119
 
79
120
  .provider-fast-switch-label {
80
- font-size: var(--font-size-caption);
121
+ font-size: 11px;
81
122
  color: var(--color-text-tertiary);
82
123
  letter-spacing: 0.02em;
124
+ font-weight: 600;
83
125
  }
84
126
 
85
127
  .provider-fast-switch-select {
86
128
  width: 100%;
87
- min-height: 40px;
88
- padding: 8px 12px;
129
+ min-height: 36px;
130
+ padding: 7px 10px;
89
131
  padding-right: 38px;
90
132
  border: 1px solid var(--color-border-soft);
91
133
  border-radius: var(--radius-sm);
@@ -108,105 +150,64 @@
108
150
 
109
151
  .main-panel {
110
152
  min-width: 0;
111
- background: rgba(255, 255, 255, 0.95);
112
- border: 1px solid rgba(216, 201, 184, 0.48);
113
- border-radius: 18px;
114
- box-shadow: var(--shadow-card);
115
- padding: var(--spacing-md) var(--spacing-lg);
116
- backdrop-filter: blur(8px);
153
+ background: var(--color-bg);
154
+ border: none;
155
+ border-radius: 0;
156
+ box-shadow: none;
157
+ padding: 0 28px 28px;
158
+ backdrop-filter: none;
117
159
  position: relative;
118
160
  overflow-x: hidden;
119
- overflow-y: visible;
161
+ overflow-y: auto;
162
+ min-height: 0;
163
+ height: 100vh;
164
+ scrollbar-width: none;
165
+ -ms-overflow-style: none;
120
166
  }
121
167
 
122
- .status-inspector {
123
- position: sticky;
124
- top: 24px;
125
- align-self: start;
126
- height: calc(100vh - 48px);
127
- overflow: auto;
128
- padding: 16px;
129
- border-radius: var(--radius-xl);
130
- border: 1px solid var(--color-border-soft);
131
- background: linear-gradient(180deg, rgba(255, 255, 255, 0.96) 0%, rgba(255, 248, 241, 0.92) 100%);
132
- box-shadow: var(--shadow-card);
133
- display: flex;
134
- flex-direction: column;
135
- gap: 12px;
136
- }
137
-
138
- .inspector-head {
139
- padding: 2px 2px 8px;
140
- border-bottom: 1px solid rgba(216, 201, 184, 0.35);
141
- }
142
-
143
- .inspector-title {
144
- font-size: 16px;
145
- line-height: 1.25;
146
- font-weight: 600;
147
- color: var(--color-text-primary);
148
- }
149
-
150
- .inspector-subtitle {
151
- margin-top: 4px;
152
- font-size: 12px;
153
- color: var(--color-text-tertiary);
154
- }
155
-
156
- .inspector-group {
157
- padding: 12px;
158
- border-radius: var(--radius-lg);
159
- border: 1px solid rgba(216, 201, 184, 0.34);
160
- background: rgba(255, 255, 255, 0.88);
161
- box-shadow: var(--shadow-subtle);
162
- }
163
-
164
- .inspector-group-title {
165
- font-size: 13px;
166
- font-weight: 600;
167
- color: var(--color-text-secondary);
168
- margin-bottom: 10px;
169
- }
170
-
171
- .inspector-kv {
172
- display: grid;
173
- grid-template-columns: 92px minmax(0, 1fr);
174
- gap: 8px 10px;
175
- align-items: start;
176
- }
177
-
178
- .inspector-kv .key {
179
- font-size: 11px;
180
- line-height: 1.4;
181
- color: var(--color-text-muted);
182
- letter-spacing: 0.01em;
183
- font-family: var(--font-family-mono);
168
+ .main-panel::-webkit-scrollbar {
169
+ display: none;
184
170
  }
185
171
 
186
- .inspector-kv .value {
187
- font-size: 14px;
188
- line-height: 1.35;
189
- font-weight: 500;
190
- color: var(--color-text-primary);
191
- overflow-wrap: anywhere;
192
- word-break: break-word;
172
+ .main-panel-topbar {
173
+ position: sticky;
174
+ top: 0;
175
+ z-index: 12;
176
+ margin: 0 -28px 14px;
177
+ padding: 0 28px 12px;
178
+ background: linear-gradient(180deg, rgba(247, 243, 239, 0.96) 0%, rgba(247, 243, 239, 0.92) 78%, rgba(247, 243, 239, 0) 100%);
179
+ backdrop-filter: blur(8px);
193
180
  }
194
181
 
195
- .inspector-kv .value.tone-ok {
196
- color: var(--color-success);
182
+ .panel-header {
183
+ margin-bottom: 14px;
184
+ text-align: left;
197
185
  }
198
186
 
199
- .inspector-kv .value.tone-warn {
200
- color: #8d5b31;
187
+ .panel-header-refined {
188
+ display: flex;
189
+ align-items: center;
190
+ justify-content: space-between;
191
+ gap: 14px;
192
+ margin: 0 0 14px;
193
+ padding: 18px 0 14px;
194
+ border-bottom: 1px solid var(--color-border);
195
+ background: transparent;
201
196
  }
202
197
 
203
- .inspector-kv .value.tone-error {
204
- color: var(--color-error);
198
+ .panel-header-copy {
199
+ display: flex;
200
+ flex-direction: column;
201
+ gap: 4px;
202
+ max-width: none;
205
203
  }
206
204
 
207
- .panel-header {
208
- margin-bottom: 12px;
209
- text-align: left;
205
+ .panel-kicker {
206
+ font-size: 10px;
207
+ letter-spacing: 0.08em;
208
+ text-transform: uppercase;
209
+ color: var(--color-brand-dark);
210
+ font-weight: 700;
210
211
  }
211
212
 
212
213
  .hero {
@@ -218,22 +219,14 @@
218
219
 
219
220
  .hero-logo {
220
221
  display: none;
221
- width: 64px;
222
- height: 64px;
223
- border-radius: 18px;
224
- padding: 8px;
225
- background: var(--color-surface-elevated);
226
- border: 1px solid var(--color-border-soft);
227
- box-shadow: var(--shadow-card);
228
- object-fit: contain;
229
222
  }
230
223
 
231
224
  .hero-title {
232
- font-size: 48px;
233
- line-height: 1.05;
225
+ font-size: clamp(22px, 2.4vw, 30px);
226
+ line-height: 1.08;
234
227
  font-family: var(--font-family-display);
235
228
  color: var(--color-text-primary);
236
- letter-spacing: -0.02em;
229
+ letter-spacing: -0.025em;
237
230
  }
238
231
 
239
232
  .hero-title .accent {
@@ -241,10 +234,11 @@
241
234
  }
242
235
 
243
236
  .hero-subtitle {
244
- margin-top: 8px;
245
- font-size: var(--font-size-body);
237
+ margin-top: 0;
238
+ font-size: 13px;
246
239
  color: var(--color-text-tertiary);
247
240
  line-height: 1.5;
241
+ max-width: 54ch;
248
242
  }
249
243
 
250
244
  .hero-github {
@@ -253,57 +247,61 @@
253
247
  }
254
248
 
255
249
  .top-tabs {
256
- margin: 14px 0 18px;
257
- background: rgba(255, 255, 255, 0.92);
258
- border: 1px solid rgba(255, 255, 255, 0.7);
259
- border-radius: 14px;
260
- padding: 6px;
261
- box-shadow: inset 0 1px 2px rgba(31, 26, 23, 0.06);
262
- display: grid;
263
- grid-template-columns: repeat(4, 1fr);
264
- gap: 8px;
265
- backdrop-filter: blur(6px);
250
+ margin: 10px 12px 12px;
251
+ background: transparent;
252
+ border: none;
253
+ border-radius: 0;
254
+ padding: 0 8px 2px 2px;
255
+ box-shadow: none;
256
+ display: flex;
257
+ flex-wrap: nowrap;
258
+ gap: 6px;
259
+ backdrop-filter: none;
260
+ overflow-x: auto;
261
+ overflow-y: hidden;
262
+ -webkit-overflow-scrolling: touch;
263
+ scrollbar-width: none;
264
+ scroll-snap-type: x proximity;
265
+ }
266
+
267
+ .top-tabs::-webkit-scrollbar {
268
+ display: none;
266
269
  }
267
270
 
268
271
  .top-tab {
269
- border: 1px solid rgba(216, 201, 184, 0.55);
270
- border-radius: 12px;
271
- background: rgba(255, 255, 255, 0.96);
272
- padding: 11px 10px;
273
- font-size: var(--font-size-body);
272
+ border: 1px solid var(--color-border);
273
+ border-radius: 999px;
274
+ background: var(--color-surface);
275
+ padding: 6px 10px;
276
+ font-size: 11px;
274
277
  color: var(--color-text-secondary);
275
278
  text-align: center;
276
279
  cursor: pointer;
277
- transition: none;
278
- box-shadow: var(--shadow-subtle);
280
+ transition: border-color var(--transition-fast) var(--ease-smooth), background-color var(--transition-fast) var(--ease-smooth), color var(--transition-fast) var(--ease-smooth);
281
+ box-shadow: none;
282
+ flex: 0 0 auto;
283
+ scroll-snap-align: start;
279
284
  }
280
285
 
281
286
  .top-tab:hover {
282
- border-color: var(--color-brand);
283
- color: var(--color-text-primary);
284
- transform: translateY(-1px);
285
- }
286
-
287
- .top-tab.active {
288
- border-color: var(--color-brand);
287
+ border-color: var(--color-border-strong);
289
288
  color: var(--color-text-primary);
290
- background: linear-gradient(135deg, rgba(201, 94, 75, 0.12), rgba(255, 255, 255, 0.95));
291
- box-shadow: 0 10px 24px rgba(27, 23, 20, 0.08);
292
289
  }
293
290
 
291
+ .top-tab.active,
294
292
  .top-tab.nav-intent-active {
295
- border-color: var(--color-brand);
296
- color: var(--color-text-primary);
297
- background: linear-gradient(135deg, rgba(201, 94, 75, 0.12), rgba(255, 255, 255, 0.95));
298
- box-shadow: 0 10px 24px rgba(27, 23, 20, 0.08);
293
+ border-color: rgba(199, 116, 98, 0.18);
294
+ color: var(--color-brand-dark);
295
+ background: var(--color-brand-light);
296
+ box-shadow: none;
299
297
  }
300
298
 
301
299
  .top-tab.nav-intent-inactive,
302
300
  .top-tab.active.nav-intent-inactive {
303
- border-color: rgba(216, 201, 184, 0.55);
301
+ border-color: var(--color-border);
304
302
  color: var(--color-text-secondary);
305
- background: rgba(255, 255, 255, 0.96);
306
- box-shadow: var(--shadow-subtle);
303
+ background: var(--color-surface);
304
+ box-shadow: none;
307
305
  }
308
306
 
309
307
  #panel-sessions.session-panel-fast-hidden {
@@ -312,26 +310,26 @@
312
310
 
313
311
  .config-subtabs {
314
312
  display: flex;
315
- gap: 8px;
316
- margin-bottom: 16px;
317
- padding: 6px;
318
- background: linear-gradient(180deg, rgba(255, 255, 255, 0.85), rgba(255, 255, 255, 0.7));
319
- border-radius: var(--radius-lg);
320
- border: 1px solid rgba(255, 255, 255, 0.7);
321
- box-shadow: inset 0 1px 2px rgba(31, 26, 23, 0.05);
313
+ gap: 6px;
314
+ margin-bottom: 12px;
315
+ padding: 4px;
316
+ background: rgba(246, 241, 235, 0.72);
317
+ border-radius: 12px;
318
+ border: 1px solid rgba(216, 201, 184, 0.26);
319
+ box-shadow: none;
322
320
  }
323
321
 
324
322
  .config-subtab {
325
- border: 1px solid var(--color-border-soft);
326
- border-radius: var(--radius-lg);
327
- padding: 10px 14px;
328
- background: linear-gradient(180deg, rgba(255, 255, 255, 0.92), rgba(255, 250, 245, 0.9));
323
+ border: 1px solid rgba(216, 201, 184, 0.3);
324
+ border-radius: 10px;
325
+ padding: 8px 10px;
326
+ background: rgba(255, 255, 255, 0.82);
329
327
  color: var(--color-text-secondary);
330
328
  cursor: pointer;
331
- font-size: var(--font-size-body);
329
+ font-size: 13px;
332
330
  font-weight: var(--font-weight-secondary);
333
- transition: all var(--transition-normal) var(--ease-spring);
334
- box-shadow: var(--shadow-subtle);
331
+ transition: all var(--transition-fast) var(--ease-smooth);
332
+ box-shadow: none;
335
333
  }
336
334
 
337
335
  .config-subtab:hover {
@@ -340,10 +338,10 @@
340
338
  }
341
339
 
342
340
  .config-subtab.active {
343
- border-color: var(--color-brand);
341
+ border-color: rgba(201, 94, 75, 0.34);
344
342
  color: var(--color-text-primary);
345
- background: linear-gradient(135deg, rgba(201, 94, 75, 0.18), rgba(255, 255, 255, 0.95));
346
- box-shadow: var(--shadow-card);
343
+ background: rgba(255, 255, 255, 0.98);
344
+ box-shadow: 0 1px 4px rgba(31, 26, 23, 0.025);
347
345
  }
348
346
 
349
347
  .settings-subtabs {
@@ -366,16 +364,19 @@
366
364
  }
367
365
 
368
366
  .content-wrapper {
369
- background: rgba(255, 255, 255, 0.94);
370
- border: 1px solid rgba(216, 201, 184, 0.35);
371
- border-radius: var(--radius-lg);
372
- box-shadow: var(--shadow-subtle);
373
- padding: 0;
367
+ background: transparent;
368
+ border: none;
369
+ border-radius: 0;
370
+ box-shadow: none;
371
+ padding: 0 0 40px;
372
+ width: min(100%, 1480px);
373
+ max-width: none;
374
374
  }
375
375
 
376
376
  .mode-content {
377
- border-radius: var(--radius-lg);
378
- background: rgba(255, 255, 255, 0.9);
379
- box-shadow: var(--shadow-subtle);
380
- padding: 12px;
377
+ width: 100%;
378
+ border-radius: 0;
379
+ background: transparent;
380
+ box-shadow: none;
381
+ padding: 0;
381
382
  }