codexmate 0.0.41 → 0.0.42

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 (155) hide show
  1. package/README.md +168 -168
  2. package/README.zh.md +168 -168
  3. package/cli/agents-files.js +230 -230
  4. package/cli/analytics-export-args.js +68 -68
  5. package/cli/archive-helpers.js +453 -453
  6. package/cli/auth-profiles.js +375 -375
  7. package/cli/builtin-proxy.js +2144 -2144
  8. package/cli/claude-proxy.js +1022 -1022
  9. package/cli/config-bootstrap.js +407 -407
  10. package/cli/config-health.js +454 -454
  11. package/cli/doctor-core.js +903 -903
  12. package/cli/import-skills-url.js +356 -356
  13. package/cli/local-bridge.js +556 -556
  14. package/cli/openai-bridge.js +1984 -1984
  15. package/cli/openclaw-config.js +629 -629
  16. package/cli/session-convert-args.js +69 -69
  17. package/cli/session-convert-io.js +82 -82
  18. package/cli/session-convert.js +150 -150
  19. package/cli/session-usage.concurrent.js +28 -28
  20. package/cli/session-usage.js +304 -304
  21. package/cli/session-usage.models.js +176 -176
  22. package/cli/skills.js +1141 -1141
  23. package/cli/update.js +171 -171
  24. package/cli/zip-commands.js +510 -510
  25. package/cli.js +16494 -16458
  26. package/lib/automation.js +404 -404
  27. package/lib/cli-file-utils.js +151 -151
  28. package/lib/cli-models-utils.js +440 -440
  29. package/lib/cli-network-utils.js +190 -190
  30. package/lib/cli-path-utils.js +85 -85
  31. package/lib/cli-session-utils.js +121 -121
  32. package/lib/cli-sessions.js +427 -427
  33. package/lib/cli-utils.js +155 -155
  34. package/lib/cli-webhook.js +154 -154
  35. package/lib/download-artifacts.js +92 -92
  36. package/lib/mcp-stdio.js +453 -453
  37. package/lib/task-orchestrator.js +869 -869
  38. package/lib/text-diff.js +303 -303
  39. package/lib/win-tray.js +119 -119
  40. package/lib/workflow-engine.js +340 -340
  41. package/package.json +77 -77
  42. package/plugins/README.md +20 -20
  43. package/plugins/README.zh-CN.md +20 -20
  44. package/plugins/prompt-templates/comment-polish/index.mjs +25 -25
  45. package/plugins/prompt-templates/computed.mjs +311 -311
  46. package/plugins/prompt-templates/index.mjs +8 -8
  47. package/plugins/prompt-templates/manifest.mjs +18 -18
  48. package/plugins/prompt-templates/methods.mjs +553 -553
  49. package/plugins/prompt-templates/overview.mjs +91 -91
  50. package/plugins/prompt-templates/ownership.mjs +19 -19
  51. package/plugins/prompt-templates/rule-ack/index.mjs +21 -21
  52. package/plugins/prompt-templates/storage.mjs +64 -64
  53. package/plugins/registry.mjs +16 -16
  54. package/web-ui/app.js +695 -695
  55. package/web-ui/index.html +37 -37
  56. package/web-ui/logic.agents-diff.mjs +386 -386
  57. package/web-ui/logic.claude.mjs +172 -172
  58. package/web-ui/logic.codex.mjs +69 -69
  59. package/web-ui/logic.mjs +5 -5
  60. package/web-ui/logic.runtime.mjs +128 -128
  61. package/web-ui/logic.session-convert.mjs +70 -70
  62. package/web-ui/logic.sessions.mjs +782 -782
  63. package/web-ui/modules/api.mjs +90 -90
  64. package/web-ui/modules/app.computed.dashboard.mjs +252 -252
  65. package/web-ui/modules/app.computed.index.mjs +17 -17
  66. package/web-ui/modules/app.computed.main-tabs.mjs +214 -214
  67. package/web-ui/modules/app.computed.session.mjs +876 -876
  68. package/web-ui/modules/app.constants.mjs +15 -15
  69. package/web-ui/modules/app.methods.agents.mjs +651 -651
  70. package/web-ui/modules/app.methods.claude-config.mjs +412 -412
  71. package/web-ui/modules/app.methods.codex-config.mjs +869 -869
  72. package/web-ui/modules/app.methods.index.mjs +96 -96
  73. package/web-ui/modules/app.methods.install.mjs +205 -205
  74. package/web-ui/modules/app.methods.navigation.mjs +804 -804
  75. package/web-ui/modules/app.methods.openclaw-core.mjs +814 -814
  76. package/web-ui/modules/app.methods.openclaw-editing.mjs +420 -420
  77. package/web-ui/modules/app.methods.openclaw-persist.mjs +375 -375
  78. package/web-ui/modules/app.methods.providers.mjs +601 -601
  79. package/web-ui/modules/app.methods.runtime.mjs +420 -420
  80. package/web-ui/modules/app.methods.session-actions.mjs +617 -591
  81. package/web-ui/modules/app.methods.session-browser.mjs +1018 -1018
  82. package/web-ui/modules/app.methods.session-timeline.mjs +479 -479
  83. package/web-ui/modules/app.methods.session-trash.mjs +468 -468
  84. package/web-ui/modules/app.methods.startup-claude.mjs +554 -554
  85. package/web-ui/modules/app.methods.task-orchestration.mjs +556 -556
  86. package/web-ui/modules/app.methods.tool-config-permissions.mjs +87 -87
  87. package/web-ui/modules/app.methods.webhook.mjs +87 -87
  88. package/web-ui/modules/config-mode.computed.mjs +124 -124
  89. package/web-ui/modules/config-template-confirm-pref.mjs +33 -33
  90. package/web-ui/modules/i18n/locales/en.mjs +1141 -1140
  91. package/web-ui/modules/i18n/locales/ja.mjs +1132 -1130
  92. package/web-ui/modules/i18n/locales/vi.mjs +239 -239
  93. package/web-ui/modules/i18n/locales/zh.mjs +1144 -1143
  94. package/web-ui/modules/i18n.dict.mjs +14 -14
  95. package/web-ui/modules/i18n.mjs +111 -111
  96. package/web-ui/modules/plugins.computed.mjs +3 -3
  97. package/web-ui/modules/plugins.methods.mjs +3 -3
  98. package/web-ui/modules/plugins.storage.mjs +11 -11
  99. package/web-ui/modules/provider-url-display.mjs +17 -17
  100. package/web-ui/modules/sessions-filters-url.mjs +138 -138
  101. package/web-ui/modules/skills.computed.mjs +107 -107
  102. package/web-ui/modules/skills.methods.mjs +513 -513
  103. package/web-ui/partials/index/layout-footer.html +13 -13
  104. package/web-ui/partials/index/layout-header.html +478 -478
  105. package/web-ui/partials/index/modal-config-template-agents.html +185 -185
  106. package/web-ui/partials/index/modal-confirm-toast.html +32 -32
  107. package/web-ui/partials/index/modal-health-check.html +45 -45
  108. package/web-ui/partials/index/modal-openclaw-config.html +344 -344
  109. package/web-ui/partials/index/modal-skills.html +200 -200
  110. package/web-ui/partials/index/modal-webhook.html +42 -42
  111. package/web-ui/partials/index/modals-basic.html +263 -263
  112. package/web-ui/partials/index/panel-config-claude.html +187 -187
  113. package/web-ui/partials/index/panel-config-codex.html +205 -205
  114. package/web-ui/partials/index/panel-config-openclaw.html +89 -89
  115. package/web-ui/partials/index/panel-dashboard.html +171 -171
  116. package/web-ui/partials/index/panel-docs.html +114 -114
  117. package/web-ui/partials/index/panel-market.html +104 -104
  118. package/web-ui/partials/index/panel-orchestration.html +391 -391
  119. package/web-ui/partials/index/panel-plugins.html +253 -253
  120. package/web-ui/partials/index/panel-sessions.html +325 -319
  121. package/web-ui/partials/index/panel-settings.html +181 -181
  122. package/web-ui/partials/index/panel-trash.html +82 -82
  123. package/web-ui/partials/index/panel-usage.html +181 -181
  124. package/web-ui/res/json5.min.js +1 -1
  125. package/web-ui/res/vue.global.prod.js +13 -13
  126. package/web-ui/res/vue.runtime.global.prod.js +7 -7
  127. package/web-ui/res/web-ui-render.precompiled.js +7671 -7666
  128. package/web-ui/session-helpers.mjs +602 -602
  129. package/web-ui/source-bundle.cjs +305 -305
  130. package/web-ui/styles/base-theme.css +291 -291
  131. package/web-ui/styles/bridge-pool.css +266 -266
  132. package/web-ui/styles/controls-forms.css +532 -532
  133. package/web-ui/styles/dashboard.css +438 -438
  134. package/web-ui/styles/docs-panel.css +245 -245
  135. package/web-ui/styles/feedback.css +108 -108
  136. package/web-ui/styles/health-check-dialog.css +144 -144
  137. package/web-ui/styles/layout-shell.css +711 -711
  138. package/web-ui/styles/modals-core.css +499 -499
  139. package/web-ui/styles/navigation-panels.css +399 -399
  140. package/web-ui/styles/openclaw-structured.css +616 -616
  141. package/web-ui/styles/plugins-panel.css +564 -564
  142. package/web-ui/styles/responsive.css +501 -501
  143. package/web-ui/styles/sessions-list.css +683 -683
  144. package/web-ui/styles/sessions-preview.css +407 -407
  145. package/web-ui/styles/sessions-toolbar-trash.css +518 -518
  146. package/web-ui/styles/sessions-usage.css +849 -849
  147. package/web-ui/styles/settings-panel.css +419 -419
  148. package/web-ui/styles/skills-list.css +305 -305
  149. package/web-ui/styles/skills-market.css +723 -723
  150. package/web-ui/styles/task-orchestration.css +822 -822
  151. package/web-ui/styles/titles-cards.css +486 -486
  152. package/web-ui/styles/trash-panel.css +90 -90
  153. package/web-ui/styles/webhook.css +115 -115
  154. package/web-ui/styles.css +24 -24
  155. package/web-ui.html +17 -17
@@ -1,501 +1,501 @@
1
- .content-wrapper {
2
- min-height: 300px;
3
- position: relative;
4
- }
5
-
6
- button:focus-visible,
7
- select:focus-visible,
8
- input:focus-visible,
9
- textarea:focus-visible {
10
- outline: 3px solid rgba(201, 94, 75, 0.25);
11
- outline-offset: 2px;
12
- }
13
-
14
- @media (max-width: 1280px) {
15
- :root {
16
- --side-rail-width: 224px;
17
- }
18
- .app-shell {
19
- grid-template-columns: 224px minmax(0, 1fr);
20
- gap: 0;
21
- }
22
-
23
- .main-panel {
24
- padding: 0 20px 20px;
25
- }
26
-
27
- .main-panel-topbar {
28
- margin: 0 -20px 12px;
29
- padding: 0 20px 10px;
30
- }
31
-
32
- }
33
-
34
- @media (max-width: 960px) {
35
- :root {
36
- --side-rail-width: 188px;
37
- }
38
- .container {
39
- padding: 0;
40
- }
41
- .app-shell {
42
- grid-template-columns: 188px minmax(0, 1fr);
43
- gap: 0;
44
- }
45
- .main-panel {
46
- padding: 0 16px 16px;
47
- border-radius: 0;
48
- min-height: 0;
49
- }
50
- .main-panel-topbar {
51
- margin: 0 -16px 12px;
52
- padding: 0 16px 10px;
53
- }
54
- .top-tabs {
55
- display: none !important;
56
- }
57
- .status-strip {
58
- grid-template-columns: repeat(2, minmax(0, 1fr));
59
- gap: 8px;
60
- margin-top: 2px;
61
- }
62
- .status-chip {
63
- min-width: 0;
64
- }
65
-
66
- .skills-summary-strip {
67
- grid-template-columns: repeat(2, minmax(0, 1fr));
68
- }
69
-
70
- .skills-panel-header {
71
- flex-direction: column;
72
- align-items: stretch;
73
- }
74
-
75
- .skills-modal-actions {
76
- align-items: flex-start;
77
- }
78
-
79
- .market-target-switch-compact {
80
- justify-content: flex-start;
81
- }
82
- }
83
-
84
- @media (max-width: 720px) {
85
- :root {
86
- --side-rail-width: min(188px, 46vw);
87
- }
88
-
89
- .container {
90
- display: flex;
91
- flex-direction: column;
92
- height: 100vh;
93
- min-height: 100vh;
94
- overflow: hidden;
95
- }
96
-
97
- .app-shell {
98
- grid-template-columns: 1fr;
99
- flex: 1 1 auto;
100
- min-height: 0;
101
- height: auto;
102
- overflow: hidden;
103
- }
104
-
105
- .side-rail {
106
- display: none;
107
- }
108
-
109
- .lang-fab {
110
- display: block;
111
- }
112
-
113
- .top-tabs {
114
- display: flex !important;
115
- flex: 0 0 auto;
116
- flex-wrap: nowrap;
117
- overflow-x: auto;
118
- overflow-y: hidden;
119
- padding-bottom: 2px;
120
- margin-left: -2px;
121
- margin-right: -2px;
122
- background: rgba(255, 248, 241, 0.96);
123
- position: relative;
124
- z-index: 30;
125
- }
126
-
127
- .main-panel {
128
- padding: 0 12px 16px;
129
- height: 100%;
130
- min-height: 0;
131
- overflow-y: auto;
132
- -webkit-overflow-scrolling: touch;
133
- }
134
-
135
- .main-panel-topbar {
136
- position: sticky;
137
- top: 0;
138
- z-index: 20;
139
- margin: 0 0 10px;
140
- padding: 0 0 8px;
141
- background: rgba(255, 248, 241, 0.96);
142
- backdrop-filter: blur(14px) saturate(130%);
143
- }
144
-
145
- .panel-header-refined {
146
- margin-left: 0;
147
- margin-right: 0;
148
- padding: 14px 0 12px;
149
- }
150
-
151
- .main-title {
152
- font-size: 18px;
153
- }
154
-
155
- .subtitle {
156
- font-size: 12px;
157
- margin-bottom: 0;
158
- line-height: 1.4;
159
- }
160
-
161
- .panel-kicker {
162
- display: none;
163
- }
164
-
165
- .top-tabs {
166
- margin: 8px 0 10px;
167
- gap: 5px;
168
- }
169
-
170
- .segmented-control {
171
- flex-direction: column;
172
- gap: 6px;
173
- }
174
-
175
- .status-strip {
176
- gap: 12px;
177
- }
178
-
179
- .main-panel-topbar .status-strip {
180
- display: flex;
181
- flex-wrap: nowrap;
182
- gap: 8px;
183
- overflow-x: auto;
184
- overflow-y: hidden;
185
- padding-bottom: 2px;
186
- scrollbar-width: none;
187
- -webkit-overflow-scrolling: touch;
188
- }
189
-
190
- .main-panel-topbar .status-strip::-webkit-scrollbar {
191
- display: none;
192
- }
193
-
194
- .main-panel-topbar .status-chip {
195
- flex: 0 0 auto;
196
- min-width: max-content;
197
- }
198
-
199
- .market-grid {
200
- grid-template-columns: 1fr;
201
- }
202
-
203
- .market-action-grid {
204
- grid-template-columns: 1fr;
205
- }
206
-
207
- }
208
-
209
- @media (max-width: 540px) {
210
- .trash-header-actions {
211
- display: grid;
212
- grid-template-columns: repeat(2, minmax(0, 1fr));
213
- width: 100%;
214
- }
215
-
216
- .selector-header .trash-header-actions > .btn-tool,
217
- .selector-header .trash-header-actions > .btn-tool-compact {
218
- width: 100%;
219
- min-width: 0;
220
- height: 44px;
221
- min-height: 44px;
222
- }
223
- .top-tabs {
224
- gap: 5px;
225
- margin: 2px 0 8px;
226
- padding-right: 14px;
227
- }
228
- .main-panel {
229
- padding: 0 10px 12px;
230
- }
231
-
232
- .main-panel-topbar {
233
- margin-bottom: 8px;
234
- }
235
- .card {
236
- padding: 12px;
237
- }
238
- .session-layout {
239
- grid-template-columns: 1fr;
240
- height: auto;
241
- min-height: 0;
242
- }
243
-
244
- .status-strip {
245
- gap: var(--spacing-xs);
246
- }
247
-
248
- .status-chip {
249
- min-width: 100%;
250
- }
251
-
252
- .main-panel-topbar .status-chip {
253
- min-width: max-content;
254
- }
255
-
256
- .btn-add,
257
- .btn-tool,
258
- .card-action-btn,
259
- .btn-session-export,
260
- .btn-session-open,
261
- .btn-session-clone,
262
- .btn-session-refresh,
263
- .btn-session-delete,
264
- .btn-icon,
265
- .session-item-copy {
266
- min-height: 44px;
267
- padding-top: 12px;
268
- padding-bottom: 12px;
269
- }
270
-
271
- .btn-icon,
272
- .session-item-copy {
273
- min-width: 36px;
274
- }
275
-
276
- .session-item {
277
- min-height: 79px;
278
- height: 79px;
279
- contain-intrinsic-size: 79px;
280
- padding: 12px 14px;
281
- }
282
-
283
- .session-item-header {
284
- flex-direction: row;
285
- align-items: center;
286
- gap: 8px;
287
- }
288
-
289
- .session-item-main {
290
- align-items: center;
291
- }
292
-
293
- .session-item-copy {
294
- width: 36px;
295
- height: 36px;
296
- min-width: 36px;
297
- min-height: 36px;
298
- border-radius: 6px;
299
- padding: 2px;
300
- display: inline-flex;
301
- align-items: center;
302
- justify-content: center;
303
- transform: translate(-3px, 0);
304
- }
305
-
306
- .session-item-copy svg {
307
- width: 10px;
308
- height: 10px;
309
- }
310
-
311
- .session-item-title {
312
- white-space: nowrap;
313
- text-overflow: ellipsis;
314
- overflow: hidden;
315
- }
316
-
317
- .session-item-actions {
318
- margin-top: 0;
319
- }
320
-
321
- .session-item-meta {
322
- margin-top: 4px;
323
- margin-bottom: 0;
324
- gap: 4px;
325
- align-items: center;
326
- }
327
-
328
- .trash-item-body {
329
- flex-direction: column;
330
- align-items: stretch;
331
- gap: 10px;
332
- }
333
-
334
- .trash-item-actions {
335
- opacity: 1;
336
- justify-content: flex-end;
337
- }
338
-
339
- .trash-item-cwd {
340
- max-width: 140px;
341
- }
342
-
343
- .card {
344
- padding: 8px;
345
- }
346
-
347
- .card-list {
348
- gap: 4px;
349
- margin-bottom: 4px;
350
- }
351
-
352
- .card-actions {
353
- gap: 8px;
354
- }
355
-
356
- .card-action-btn {
357
- width: 40px;
358
- height: 40px;
359
- border-radius: 10px;
360
- }
361
-
362
- .card-action-btn svg {
363
- width: 18px;
364
- height: 18px;
365
- }
366
-
367
- .card-trailing {
368
- grid-auto-flow: row;
369
- grid-auto-columns: 1fr;
370
- justify-content: stretch;
371
- justify-items: end;
372
- }
373
-
374
- .card-trailing .card-actions {
375
- width: 100%;
376
- justify-content: flex-end;
377
- justify-self: end;
378
- }
379
-
380
- /* 移动端不显示配置状态 pill,节省空间 */
381
- .card-trailing .pill {
382
- display: none;
383
- }
384
-
385
- .openclaw-card-list .card-trailing .pill {
386
- display: block;
387
- }
388
-
389
- .auth-profile-item {
390
- padding: 10px;
391
- }
392
-
393
- .auth-profile-header {
394
- flex-direction: column;
395
- align-items: stretch;
396
- gap: 10px;
397
- }
398
-
399
- .auth-profile-actions {
400
- justify-content: flex-start;
401
- }
402
-
403
- .auth-profile-grid {
404
- grid-template-columns: 1fr;
405
- gap: 6px;
406
- margin-top: 8px;
407
- }
408
-
409
- .auth-profile-row {
410
- display: flex;
411
- flex-direction: column;
412
- gap: 2px;
413
- padding-bottom: 4px;
414
- border-bottom: 1px dashed rgba(160, 145, 130, 0.25);
415
- }
416
-
417
- .auth-profile-row:last-child {
418
- border-bottom: none;
419
- padding-bottom: 0;
420
- }
421
-
422
- .session-preview {
423
- border-radius: var(--radius-lg);
424
- }
425
-
426
- .skills-summary-strip {
427
- grid-template-columns: 1fr;
428
- }
429
-
430
- .skills-panel {
431
- padding: 10px;
432
- }
433
-
434
- .skills-root-box {
435
- font-size: 11px;
436
- }
437
- }
438
-
439
- @media (max-width: 820px) {
440
- .container {
441
- display: flex;
442
- flex-direction: column;
443
- height: 100vh;
444
- min-height: 100vh;
445
- overflow: hidden;
446
- }
447
-
448
- .app-shell {
449
- grid-template-columns: 1fr;
450
- flex: 1 1 auto;
451
- min-height: 0;
452
- height: auto;
453
- overflow: hidden;
454
- }
455
-
456
- .side-rail {
457
- display: none !important;
458
- }
459
-
460
- .lang-fab {
461
- display: none !important;
462
- }
463
-
464
- .top-tabs {
465
- display: flex !important;
466
- flex: 0 0 auto;
467
- width: 100%;
468
- max-width: 100%;
469
- margin: 8px 0 10px;
470
- padding: 0 max(18px, calc(env(safe-area-inset-right, 0px) + 14px)) 4px max(10px, calc(env(safe-area-inset-left, 0px) + 10px));
471
- gap: 5px;
472
- overflow-x: auto;
473
- overflow-y: hidden;
474
- scroll-padding-inline: 10px 18px;
475
- background: rgba(255, 248, 241, 0.96);
476
- position: relative;
477
- z-index: 30;
478
- }
479
-
480
- .top-tab:last-child {
481
- margin-right: 8px;
482
- }
483
-
484
- .main-panel {
485
- padding: 0 12px 16px;
486
- height: 100%;
487
- min-height: 0;
488
- overflow-y: auto;
489
- -webkit-overflow-scrolling: touch;
490
- }
491
-
492
- .main-panel-topbar {
493
- position: sticky;
494
- top: 0;
495
- z-index: 20;
496
- margin: 0 0 10px;
497
- padding: 0 0 8px;
498
- background: rgba(255, 248, 241, 0.96);
499
- backdrop-filter: blur(14px) saturate(130%);
500
- }
501
- }
1
+ .content-wrapper {
2
+ min-height: 300px;
3
+ position: relative;
4
+ }
5
+
6
+ button:focus-visible,
7
+ select:focus-visible,
8
+ input:focus-visible,
9
+ textarea:focus-visible {
10
+ outline: 3px solid rgba(201, 94, 75, 0.25);
11
+ outline-offset: 2px;
12
+ }
13
+
14
+ @media (max-width: 1280px) {
15
+ :root {
16
+ --side-rail-width: 224px;
17
+ }
18
+ .app-shell {
19
+ grid-template-columns: 224px minmax(0, 1fr);
20
+ gap: 0;
21
+ }
22
+
23
+ .main-panel {
24
+ padding: 0 20px 20px;
25
+ }
26
+
27
+ .main-panel-topbar {
28
+ margin: 0 -20px 12px;
29
+ padding: 0 20px 10px;
30
+ }
31
+
32
+ }
33
+
34
+ @media (max-width: 960px) {
35
+ :root {
36
+ --side-rail-width: 188px;
37
+ }
38
+ .container {
39
+ padding: 0;
40
+ }
41
+ .app-shell {
42
+ grid-template-columns: 188px minmax(0, 1fr);
43
+ gap: 0;
44
+ }
45
+ .main-panel {
46
+ padding: 0 16px 16px;
47
+ border-radius: 0;
48
+ min-height: 0;
49
+ }
50
+ .main-panel-topbar {
51
+ margin: 0 -16px 12px;
52
+ padding: 0 16px 10px;
53
+ }
54
+ .top-tabs {
55
+ display: none !important;
56
+ }
57
+ .status-strip {
58
+ grid-template-columns: repeat(2, minmax(0, 1fr));
59
+ gap: 8px;
60
+ margin-top: 2px;
61
+ }
62
+ .status-chip {
63
+ min-width: 0;
64
+ }
65
+
66
+ .skills-summary-strip {
67
+ grid-template-columns: repeat(2, minmax(0, 1fr));
68
+ }
69
+
70
+ .skills-panel-header {
71
+ flex-direction: column;
72
+ align-items: stretch;
73
+ }
74
+
75
+ .skills-modal-actions {
76
+ align-items: flex-start;
77
+ }
78
+
79
+ .market-target-switch-compact {
80
+ justify-content: flex-start;
81
+ }
82
+ }
83
+
84
+ @media (max-width: 720px) {
85
+ :root {
86
+ --side-rail-width: min(188px, 46vw);
87
+ }
88
+
89
+ .container {
90
+ display: flex;
91
+ flex-direction: column;
92
+ height: 100vh;
93
+ min-height: 100vh;
94
+ overflow: hidden;
95
+ }
96
+
97
+ .app-shell {
98
+ grid-template-columns: 1fr;
99
+ flex: 1 1 auto;
100
+ min-height: 0;
101
+ height: auto;
102
+ overflow: hidden;
103
+ }
104
+
105
+ .side-rail {
106
+ display: none;
107
+ }
108
+
109
+ .lang-fab {
110
+ display: block;
111
+ }
112
+
113
+ .top-tabs {
114
+ display: flex !important;
115
+ flex: 0 0 auto;
116
+ flex-wrap: nowrap;
117
+ overflow-x: auto;
118
+ overflow-y: hidden;
119
+ padding-bottom: 2px;
120
+ margin-left: -2px;
121
+ margin-right: -2px;
122
+ background: rgba(255, 248, 241, 0.96);
123
+ position: relative;
124
+ z-index: 30;
125
+ }
126
+
127
+ .main-panel {
128
+ padding: 0 12px 16px;
129
+ height: 100%;
130
+ min-height: 0;
131
+ overflow-y: auto;
132
+ -webkit-overflow-scrolling: touch;
133
+ }
134
+
135
+ .main-panel-topbar {
136
+ position: sticky;
137
+ top: 0;
138
+ z-index: 20;
139
+ margin: 0 0 10px;
140
+ padding: 0 0 8px;
141
+ background: rgba(255, 248, 241, 0.96);
142
+ backdrop-filter: blur(14px) saturate(130%);
143
+ }
144
+
145
+ .panel-header-refined {
146
+ margin-left: 0;
147
+ margin-right: 0;
148
+ padding: 14px 0 12px;
149
+ }
150
+
151
+ .main-title {
152
+ font-size: 18px;
153
+ }
154
+
155
+ .subtitle {
156
+ font-size: 12px;
157
+ margin-bottom: 0;
158
+ line-height: 1.4;
159
+ }
160
+
161
+ .panel-kicker {
162
+ display: none;
163
+ }
164
+
165
+ .top-tabs {
166
+ margin: 8px 0 10px;
167
+ gap: 5px;
168
+ }
169
+
170
+ .segmented-control {
171
+ flex-direction: column;
172
+ gap: 6px;
173
+ }
174
+
175
+ .status-strip {
176
+ gap: 12px;
177
+ }
178
+
179
+ .main-panel-topbar .status-strip {
180
+ display: flex;
181
+ flex-wrap: nowrap;
182
+ gap: 8px;
183
+ overflow-x: auto;
184
+ overflow-y: hidden;
185
+ padding-bottom: 2px;
186
+ scrollbar-width: none;
187
+ -webkit-overflow-scrolling: touch;
188
+ }
189
+
190
+ .main-panel-topbar .status-strip::-webkit-scrollbar {
191
+ display: none;
192
+ }
193
+
194
+ .main-panel-topbar .status-chip {
195
+ flex: 0 0 auto;
196
+ min-width: max-content;
197
+ }
198
+
199
+ .market-grid {
200
+ grid-template-columns: 1fr;
201
+ }
202
+
203
+ .market-action-grid {
204
+ grid-template-columns: 1fr;
205
+ }
206
+
207
+ }
208
+
209
+ @media (max-width: 540px) {
210
+ .trash-header-actions {
211
+ display: grid;
212
+ grid-template-columns: repeat(2, minmax(0, 1fr));
213
+ width: 100%;
214
+ }
215
+
216
+ .selector-header .trash-header-actions > .btn-tool,
217
+ .selector-header .trash-header-actions > .btn-tool-compact {
218
+ width: 100%;
219
+ min-width: 0;
220
+ height: 44px;
221
+ min-height: 44px;
222
+ }
223
+ .top-tabs {
224
+ gap: 5px;
225
+ margin: 2px 0 8px;
226
+ padding-right: 14px;
227
+ }
228
+ .main-panel {
229
+ padding: 0 10px 12px;
230
+ }
231
+
232
+ .main-panel-topbar {
233
+ margin-bottom: 8px;
234
+ }
235
+ .card {
236
+ padding: 12px;
237
+ }
238
+ .session-layout {
239
+ grid-template-columns: 1fr;
240
+ height: auto;
241
+ min-height: 0;
242
+ }
243
+
244
+ .status-strip {
245
+ gap: var(--spacing-xs);
246
+ }
247
+
248
+ .status-chip {
249
+ min-width: 100%;
250
+ }
251
+
252
+ .main-panel-topbar .status-chip {
253
+ min-width: max-content;
254
+ }
255
+
256
+ .btn-add,
257
+ .btn-tool,
258
+ .card-action-btn,
259
+ .btn-session-export,
260
+ .btn-session-open,
261
+ .btn-session-clone,
262
+ .btn-session-refresh,
263
+ .btn-session-delete,
264
+ .btn-icon,
265
+ .session-item-copy {
266
+ min-height: 44px;
267
+ padding-top: 12px;
268
+ padding-bottom: 12px;
269
+ }
270
+
271
+ .btn-icon,
272
+ .session-item-copy {
273
+ min-width: 36px;
274
+ }
275
+
276
+ .session-item {
277
+ min-height: 79px;
278
+ height: 79px;
279
+ contain-intrinsic-size: 79px;
280
+ padding: 12px 14px;
281
+ }
282
+
283
+ .session-item-header {
284
+ flex-direction: row;
285
+ align-items: center;
286
+ gap: 8px;
287
+ }
288
+
289
+ .session-item-main {
290
+ align-items: center;
291
+ }
292
+
293
+ .session-item-copy {
294
+ width: 36px;
295
+ height: 36px;
296
+ min-width: 36px;
297
+ min-height: 36px;
298
+ border-radius: 6px;
299
+ padding: 2px;
300
+ display: inline-flex;
301
+ align-items: center;
302
+ justify-content: center;
303
+ transform: translate(-3px, 0);
304
+ }
305
+
306
+ .session-item-copy svg {
307
+ width: 10px;
308
+ height: 10px;
309
+ }
310
+
311
+ .session-item-title {
312
+ white-space: nowrap;
313
+ text-overflow: ellipsis;
314
+ overflow: hidden;
315
+ }
316
+
317
+ .session-item-actions {
318
+ margin-top: 0;
319
+ }
320
+
321
+ .session-item-meta {
322
+ margin-top: 4px;
323
+ margin-bottom: 0;
324
+ gap: 4px;
325
+ align-items: center;
326
+ }
327
+
328
+ .trash-item-body {
329
+ flex-direction: column;
330
+ align-items: stretch;
331
+ gap: 10px;
332
+ }
333
+
334
+ .trash-item-actions {
335
+ opacity: 1;
336
+ justify-content: flex-end;
337
+ }
338
+
339
+ .trash-item-cwd {
340
+ max-width: 140px;
341
+ }
342
+
343
+ .card {
344
+ padding: 8px;
345
+ }
346
+
347
+ .card-list {
348
+ gap: 4px;
349
+ margin-bottom: 4px;
350
+ }
351
+
352
+ .card-actions {
353
+ gap: 8px;
354
+ }
355
+
356
+ .card-action-btn {
357
+ width: 40px;
358
+ height: 40px;
359
+ border-radius: 10px;
360
+ }
361
+
362
+ .card-action-btn svg {
363
+ width: 18px;
364
+ height: 18px;
365
+ }
366
+
367
+ .card-trailing {
368
+ grid-auto-flow: row;
369
+ grid-auto-columns: 1fr;
370
+ justify-content: stretch;
371
+ justify-items: end;
372
+ }
373
+
374
+ .card-trailing .card-actions {
375
+ width: 100%;
376
+ justify-content: flex-end;
377
+ justify-self: end;
378
+ }
379
+
380
+ /* 移动端不显示配置状态 pill,节省空间 */
381
+ .card-trailing .pill {
382
+ display: none;
383
+ }
384
+
385
+ .openclaw-card-list .card-trailing .pill {
386
+ display: block;
387
+ }
388
+
389
+ .auth-profile-item {
390
+ padding: 10px;
391
+ }
392
+
393
+ .auth-profile-header {
394
+ flex-direction: column;
395
+ align-items: stretch;
396
+ gap: 10px;
397
+ }
398
+
399
+ .auth-profile-actions {
400
+ justify-content: flex-start;
401
+ }
402
+
403
+ .auth-profile-grid {
404
+ grid-template-columns: 1fr;
405
+ gap: 6px;
406
+ margin-top: 8px;
407
+ }
408
+
409
+ .auth-profile-row {
410
+ display: flex;
411
+ flex-direction: column;
412
+ gap: 2px;
413
+ padding-bottom: 4px;
414
+ border-bottom: 1px dashed rgba(160, 145, 130, 0.25);
415
+ }
416
+
417
+ .auth-profile-row:last-child {
418
+ border-bottom: none;
419
+ padding-bottom: 0;
420
+ }
421
+
422
+ .session-preview {
423
+ border-radius: var(--radius-lg);
424
+ }
425
+
426
+ .skills-summary-strip {
427
+ grid-template-columns: 1fr;
428
+ }
429
+
430
+ .skills-panel {
431
+ padding: 10px;
432
+ }
433
+
434
+ .skills-root-box {
435
+ font-size: 11px;
436
+ }
437
+ }
438
+
439
+ @media (max-width: 820px) {
440
+ .container {
441
+ display: flex;
442
+ flex-direction: column;
443
+ height: 100vh;
444
+ min-height: 100vh;
445
+ overflow: hidden;
446
+ }
447
+
448
+ .app-shell {
449
+ grid-template-columns: 1fr;
450
+ flex: 1 1 auto;
451
+ min-height: 0;
452
+ height: auto;
453
+ overflow: hidden;
454
+ }
455
+
456
+ .side-rail {
457
+ display: none !important;
458
+ }
459
+
460
+ .lang-fab {
461
+ display: none !important;
462
+ }
463
+
464
+ .top-tabs {
465
+ display: flex !important;
466
+ flex: 0 0 auto;
467
+ width: 100%;
468
+ max-width: 100%;
469
+ margin: 8px 0 10px;
470
+ padding: 0 max(18px, calc(env(safe-area-inset-right, 0px) + 14px)) 4px max(10px, calc(env(safe-area-inset-left, 0px) + 10px));
471
+ gap: 5px;
472
+ overflow-x: auto;
473
+ overflow-y: hidden;
474
+ scroll-padding-inline: 10px 18px;
475
+ background: rgba(255, 248, 241, 0.96);
476
+ position: relative;
477
+ z-index: 30;
478
+ }
479
+
480
+ .top-tab:last-child {
481
+ margin-right: 8px;
482
+ }
483
+
484
+ .main-panel {
485
+ padding: 0 12px 16px;
486
+ height: 100%;
487
+ min-height: 0;
488
+ overflow-y: auto;
489
+ -webkit-overflow-scrolling: touch;
490
+ }
491
+
492
+ .main-panel-topbar {
493
+ position: sticky;
494
+ top: 0;
495
+ z-index: 20;
496
+ margin: 0 0 10px;
497
+ padding: 0 0 8px;
498
+ background: rgba(255, 248, 241, 0.96);
499
+ backdrop-filter: blur(14px) saturate(130%);
500
+ }
501
+ }