codexmate 0.0.32 → 0.0.34

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 (148) hide show
  1. package/README.md +147 -363
  2. package/README.zh.md +147 -371
  3. package/cli/agents-files.js +230 -224
  4. package/cli/archive-helpers.js +453 -446
  5. package/cli/auth-profiles.js +375 -375
  6. package/cli/builtin-proxy.js +1725 -1725
  7. package/cli/claude-proxy.js +1022 -1022
  8. package/cli/config-bootstrap.js +402 -402
  9. package/cli/config-health.js +454 -454
  10. package/cli/doctor-core.js +903 -903
  11. package/cli/import-skills-url.js +356 -356
  12. package/cli/local-bridge.js +556 -324
  13. package/cli/openai-bridge.js +1653 -1653
  14. package/cli/openclaw-config.js +629 -629
  15. package/cli/session-convert-args.js +69 -69
  16. package/cli/session-convert-io.js +82 -82
  17. package/cli/session-convert.js +150 -150
  18. package/cli/session-usage.concurrent.js +28 -28
  19. package/cli/session-usage.js +118 -118
  20. package/cli/session-usage.models.js +176 -176
  21. package/cli/skills.js +1141 -1141
  22. package/cli/update.js +171 -0
  23. package/cli/zip-commands.js +510 -510
  24. package/cli.js +16079 -15829
  25. package/lib/automation.js +404 -404
  26. package/lib/cli-file-utils.js +151 -151
  27. package/lib/cli-models-utils.js +440 -440
  28. package/lib/cli-network-utils.js +190 -190
  29. package/lib/cli-path-utils.js +85 -85
  30. package/lib/cli-session-utils.js +121 -121
  31. package/lib/cli-sessions.js +427 -426
  32. package/lib/cli-utils.js +155 -155
  33. package/lib/cli-webhook.js +154 -126
  34. package/lib/download-artifacts.js +92 -92
  35. package/lib/mcp-stdio.js +453 -453
  36. package/lib/task-orchestrator.js +869 -869
  37. package/lib/text-diff.js +303 -303
  38. package/lib/win-tray.js +119 -0
  39. package/lib/workflow-engine.js +340 -340
  40. package/package.json +76 -76
  41. package/plugins/README.md +20 -20
  42. package/plugins/README.zh-CN.md +20 -20
  43. package/plugins/prompt-templates/comment-polish/index.mjs +25 -25
  44. package/plugins/prompt-templates/computed.mjs +253 -253
  45. package/plugins/prompt-templates/index.mjs +8 -8
  46. package/plugins/prompt-templates/manifest.mjs +15 -15
  47. package/plugins/prompt-templates/methods.mjs +553 -553
  48. package/plugins/prompt-templates/overview.mjs +91 -91
  49. package/plugins/prompt-templates/ownership.mjs +19 -19
  50. package/plugins/prompt-templates/rule-ack/index.mjs +21 -21
  51. package/plugins/prompt-templates/storage.mjs +64 -64
  52. package/plugins/registry.mjs +16 -16
  53. package/web-ui/app.js +654 -647
  54. package/web-ui/index.html +37 -36
  55. package/web-ui/logic.agents-diff.mjs +386 -386
  56. package/web-ui/logic.claude.mjs +172 -168
  57. package/web-ui/logic.codex.mjs +69 -69
  58. package/web-ui/logic.mjs +5 -5
  59. package/web-ui/logic.runtime.mjs +128 -128
  60. package/web-ui/logic.session-convert.mjs +70 -70
  61. package/web-ui/logic.sessions.mjs +781 -781
  62. package/web-ui/modules/api.mjs +90 -90
  63. package/web-ui/modules/app.computed.dashboard.mjs +248 -248
  64. package/web-ui/modules/app.computed.index.mjs +17 -17
  65. package/web-ui/modules/app.computed.main-tabs.mjs +205 -205
  66. package/web-ui/modules/app.computed.session.mjs +735 -693
  67. package/web-ui/modules/app.constants.mjs +15 -15
  68. package/web-ui/modules/app.methods.agents.mjs +651 -651
  69. package/web-ui/modules/app.methods.claude-config.mjs +306 -200
  70. package/web-ui/modules/app.methods.codex-config.mjs +869 -861
  71. package/web-ui/modules/app.methods.index.mjs +94 -94
  72. package/web-ui/modules/app.methods.install.mjs +205 -205
  73. package/web-ui/modules/app.methods.navigation.mjs +788 -774
  74. package/web-ui/modules/app.methods.openclaw-core.mjs +814 -814
  75. package/web-ui/modules/app.methods.openclaw-editing.mjs +372 -372
  76. package/web-ui/modules/app.methods.openclaw-persist.mjs +369 -369
  77. package/web-ui/modules/app.methods.providers.mjs +575 -529
  78. package/web-ui/modules/app.methods.runtime.mjs +345 -345
  79. package/web-ui/modules/app.methods.session-actions.mjs +591 -591
  80. package/web-ui/modules/app.methods.session-browser.mjs +1011 -1012
  81. package/web-ui/modules/app.methods.session-timeline.mjs +479 -479
  82. package/web-ui/modules/app.methods.session-trash.mjs +438 -438
  83. package/web-ui/modules/app.methods.startup-claude.mjs +547 -537
  84. package/web-ui/modules/app.methods.task-orchestration.mjs +556 -556
  85. package/web-ui/modules/app.methods.webhook.mjs +87 -79
  86. package/web-ui/modules/config-mode.computed.mjs +124 -124
  87. package/web-ui/modules/config-template-confirm-pref.mjs +33 -33
  88. package/web-ui/modules/i18n.dict.mjs +3195 -3177
  89. package/web-ui/modules/i18n.mjs +62 -62
  90. package/web-ui/modules/plugins.computed.mjs +3 -3
  91. package/web-ui/modules/plugins.methods.mjs +3 -3
  92. package/web-ui/modules/plugins.storage.mjs +11 -11
  93. package/web-ui/modules/provider-url-display.mjs +17 -17
  94. package/web-ui/modules/sessions-filters-url.mjs +85 -85
  95. package/web-ui/modules/skills.computed.mjs +107 -107
  96. package/web-ui/modules/skills.methods.mjs +482 -482
  97. package/web-ui/partials/index/layout-footer.html +13 -13
  98. package/web-ui/partials/index/layout-header.html +499 -503
  99. package/web-ui/partials/index/modal-config-template-agents.html +185 -185
  100. package/web-ui/partials/index/modal-confirm-toast.html +32 -32
  101. package/web-ui/partials/index/modal-health-check.html +45 -45
  102. package/web-ui/partials/index/modal-openclaw-config.html +280 -280
  103. package/web-ui/partials/index/modal-skills.html +200 -200
  104. package/web-ui/partials/index/modal-webhook.html +42 -0
  105. package/web-ui/partials/index/modals-basic.html +223 -162
  106. package/web-ui/partials/index/panel-config-claude.html +155 -136
  107. package/web-ui/partials/index/panel-config-codex.html +176 -196
  108. package/web-ui/partials/index/panel-config-codex.html.bak +337 -0
  109. package/web-ui/partials/index/panel-config-openclaw.html +83 -83
  110. package/web-ui/partials/index/panel-dashboard.html +186 -219
  111. package/web-ui/partials/index/panel-docs.html +114 -114
  112. package/web-ui/partials/index/panel-market.html +177 -177
  113. package/web-ui/partials/index/panel-orchestration.html +391 -391
  114. package/web-ui/partials/index/panel-plugins.html +253 -253
  115. package/web-ui/partials/index/panel-sessions.html +319 -313
  116. package/web-ui/partials/index/panel-settings.html +158 -190
  117. package/web-ui/partials/index/panel-trash.html +82 -82
  118. package/web-ui/partials/index/panel-usage.html +137 -137
  119. package/web-ui/res/json5.min.js +1 -1
  120. package/web-ui/res/vue.global.prod.js +13 -13
  121. package/web-ui/session-helpers.mjs +591 -591
  122. package/web-ui/source-bundle.cjs +233 -233
  123. package/web-ui/styles/base-theme.css +281 -281
  124. package/web-ui/styles/bridge-pool.css +266 -197
  125. package/web-ui/styles/controls-forms.css +433 -433
  126. package/web-ui/styles/dashboard.css +406 -406
  127. package/web-ui/styles/docs-panel.css +245 -245
  128. package/web-ui/styles/feedback.css +108 -108
  129. package/web-ui/styles/health-check-dialog.css +144 -144
  130. package/web-ui/styles/layout-shell.css +628 -638
  131. package/web-ui/styles/modals-core.css +499 -466
  132. package/web-ui/styles/navigation-panels.css +391 -391
  133. package/web-ui/styles/openclaw-structured.css +266 -266
  134. package/web-ui/styles/plugins-panel.css +564 -564
  135. package/web-ui/styles/responsive.css +392 -392
  136. package/web-ui/styles/sessions-list.css +683 -647
  137. package/web-ui/styles/sessions-preview.css +407 -407
  138. package/web-ui/styles/sessions-toolbar-trash.css +518 -518
  139. package/web-ui/styles/sessions-usage.css +588 -588
  140. package/web-ui/styles/settings-panel.css +415 -349
  141. package/web-ui/styles/skills-list.css +305 -305
  142. package/web-ui/styles/skills-market.css +429 -429
  143. package/web-ui/styles/task-orchestration.css +822 -822
  144. package/web-ui/styles/titles-cards.css +472 -472
  145. package/web-ui/styles/trash-panel.css +90 -90
  146. package/web-ui/styles/webhook.css +115 -81
  147. package/web-ui/styles.css +24 -24
  148. package/web-ui.html +17 -17
@@ -1,518 +1,518 @@
1
- .session-toolbar {
2
- display: grid;
3
- grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
4
- gap: var(--spacing-xs);
5
- margin-bottom: var(--spacing-xs);
6
- align-items: end;
7
- }
8
-
9
- .session-toolbar-group {
10
- display: flex;
11
- align-items: center;
12
- gap: var(--spacing-xs);
13
- flex-wrap: wrap;
14
- min-width: 0;
15
- }
16
-
17
- .session-toolbar-secondary {
18
- justify-content: flex-end;
19
- }
20
-
21
- .session-toolbar-grow {
22
- grid-column: 1 / -1;
23
- }
24
-
25
- .session-toolbar-actions {
26
- justify-content: flex-end;
27
- }
28
-
29
- .session-toolbar-footer {
30
- display: flex;
31
- align-items: center;
32
- justify-content: flex-end;
33
- gap: var(--spacing-xs);
34
- margin-top: -1px;
35
- padding-top: 6px;
36
- margin-bottom: var(--spacing-xs);
37
- border-top: 1px solid var(--color-border-soft);
38
- }
39
-
40
- .session-filter-chips {
41
- display: flex;
42
- flex-wrap: wrap;
43
- gap: 8px;
44
- margin-top: 4px;
45
- margin-bottom: 2px;
46
- }
47
-
48
- .session-filter-chip {
49
- display: inline-flex;
50
- align-items: center;
51
- gap: 6px;
52
- max-width: 100%;
53
- padding: 5px 10px;
54
- border-radius: 999px;
55
- border: 1px solid var(--color-border-soft);
56
- background: var(--color-surface);
57
- color: var(--color-text-secondary);
58
- font-size: var(--font-size-caption);
59
- font-weight: var(--font-weight-secondary);
60
- cursor: pointer;
61
- transition: all var(--transition-fast) var(--ease-spring);
62
- min-width: 0;
63
- }
64
-
65
- .session-filter-chip:hover {
66
- border-color: var(--color-brand);
67
- background: var(--color-surface-alt);
68
- transform: translateY(-1px);
69
- }
70
-
71
- .session-filter-chip-title {
72
- opacity: 0.75;
73
- flex: 0 0 auto;
74
- }
75
-
76
- .session-filter-chip-value {
77
- min-width: 0;
78
- overflow: hidden;
79
- text-overflow: ellipsis;
80
- white-space: nowrap;
81
- max-width: 520px;
82
- }
83
-
84
- .session-filter-chip-close {
85
- display: inline-flex;
86
- align-items: center;
87
- justify-content: center;
88
- width: 18px;
89
- height: 18px;
90
- border-radius: 999px;
91
- border: 1px solid var(--color-border-soft);
92
- background: var(--color-surface-alt);
93
- line-height: 1;
94
- flex: 0 0 auto;
95
- transition: all var(--transition-fast) var(--ease-spring);
96
- }
97
-
98
- .session-filter-chip-close:hover {
99
- border-color: var(--color-brand);
100
- background: var(--color-brand);
101
- color: #fff;
102
- }
103
-
104
- .session-filter-chip:focus-visible {
105
- outline: 3px solid rgba(210, 107, 90, 0.2);
106
- outline-offset: 2px;
107
- }
108
-
109
- .session-toolbar-footer .quick-option {
110
- margin: 0;
111
- padding: 5px 10px;
112
- border-radius: var(--radius-md);
113
- border: 1px solid var(--color-border-soft);
114
- background: var(--color-surface);
115
- transition: all var(--transition-fast) var(--ease-spring);
116
- line-height: 1.2;
117
- }
118
-
119
- .session-toolbar-footer .quick-option:hover {
120
- border-color: var(--color-brand);
121
- }
122
-
123
- /* ===== Session source pill bar ===== */
124
- .session-source-pills {
125
- display: flex;
126
- gap: 4px;
127
- padding: 3px;
128
- border-radius: var(--radius-md);
129
- background: var(--color-surface-alt);
130
- border: 1px solid var(--color-border-soft);
131
- }
132
-
133
- .session-source-pill {
134
- display: inline-flex;
135
- align-items: center;
136
- gap: 6px;
137
- padding: 6px 12px;
138
- border-radius: var(--radius-sm);
139
- border: none;
140
- background: transparent;
141
- color: var(--color-text-tertiary);
142
- font-size: var(--font-size-secondary);
143
- font-family: var(--font-family);
144
- font-weight: var(--font-weight-secondary);
145
- cursor: pointer;
146
- transition: all var(--transition-fast) var(--ease-spring);
147
- outline: none;
148
- white-space: nowrap;
149
- user-select: none;
150
- -webkit-tap-highlight-color: transparent;
151
- }
152
-
153
- .session-source-pill:hover:not(:disabled) {
154
- color: var(--color-text-secondary);
155
- background: var(--color-surface);
156
- }
157
-
158
- .session-source-pill:active:not(:disabled) {
159
- transform: scale(0.97);
160
- }
161
-
162
- .session-source-pill.active {
163
- color: #fff;
164
- background: var(--color-brand);
165
- box-shadow: 0 1px 3px rgba(200, 121, 99, 0.35);
166
- font-weight: var(--font-weight-primary);
167
- }
168
-
169
- .session-source-pill.active .session-source-pill-dot {
170
- background: rgba(255,255,255,0.9);
171
- box-shadow: 0 0 0 1px rgba(255,255,255,0.3);
172
- }
173
-
174
- .session-source-pill:focus-visible {
175
- box-shadow: 0 0 0 2px var(--color-brand-light);
176
- }
177
-
178
- .session-source-pill:disabled {
179
- opacity: 0.5;
180
- cursor: not-allowed;
181
- }
182
-
183
- .session-source-pill-dot {
184
- width: 7px;
185
- height: 7px;
186
- border-radius: 50%;
187
- background: var(--color-text-muted);
188
- flex-shrink: 0;
189
- transition: all var(--transition-fast) var(--ease-spring);
190
- }
191
-
192
- .session-source-pill[data-source="codex"] .session-source-pill-dot {
193
- background: #D26B5A;
194
- }
195
- .session-source-pill[data-source="claude"] .session-source-pill-dot {
196
- background: #D97757;
197
- }
198
- .session-source-pill[data-source="gemini"] .session-source-pill-dot {
199
- background: #5B8C5A;
200
- }
201
- .session-source-pill[data-source="codebuddy"] .session-source-pill-dot {
202
- background: #6B8EB5;
203
- }
204
-
205
- .session-source-pill-label {
206
- font-size: var(--font-size-secondary);
207
- line-height: 1;
208
- }
209
-
210
- /* ===== Session card source badge ===== */
211
- .session-source {
212
- display: inline-flex;
213
- align-items: center;
214
- gap: 4px;
215
- font-size: var(--font-size-caption);
216
- font-weight: var(--font-weight-caption);
217
- border-radius: 999px;
218
- padding: 2px 8px;
219
- white-space: nowrap;
220
- background: var(--color-surface-alt);
221
- color: var(--color-text-tertiary);
222
- border: 1px solid var(--color-border-soft);
223
- transition: all var(--transition-fast) var(--ease-spring);
224
- }
225
-
226
- .session-source[data-source="codex"],
227
- .session-source.codex {
228
- background: rgba(210, 107, 90, 0.08);
229
- color: #B54A3A;
230
- border-color: rgba(210, 107, 90, 0.2);
231
- }
232
-
233
- .session-source[data-source="claude"],
234
- .session-source.claude {
235
- background: rgba(217, 119, 87, 0.08);
236
- color: #B55A3A;
237
- border-color: rgba(217, 119, 87, 0.2);
238
- }
239
-
240
- .session-source[data-source="gemini"],
241
- .session-source.gemini {
242
- background: rgba(91, 140, 90, 0.08);
243
- color: #3A6B38;
244
- border-color: rgba(91, 140, 90, 0.2);
245
- }
246
-
247
- .session-source[data-source="codebuddy"],
248
- .session-source.codebuddy {
249
- background: rgba(107, 142, 181, 0.08);
250
- color: #3A5A7A;
251
- border-color: rgba(107, 142, 181, 0.2);
252
- }
253
-
254
- .session-path-select,
255
- .session-query-input,
256
- .session-role-select,
257
- .session-time-select {
258
- flex: 1;
259
- min-width: 160px;
260
- padding: 9px 12px;
261
- border-radius: var(--radius-md);
262
- border: 1px solid var(--color-border-soft);
263
- background: var(--color-surface);
264
- color: var(--color-text-secondary);
265
- font-size: var(--font-size-body);
266
- font-family: var(--font-family);
267
- outline: none;
268
- transition: all var(--transition-fast) var(--ease-spring);
269
- }
270
-
271
- .session-query-input {
272
- flex: 2;
273
- min-width: 220px;
274
- }
275
-
276
- @media (min-width: 980px) {
277
- .session-toolbar {
278
- grid-template-columns: repeat(12, minmax(0, 1fr));
279
- gap: 10px;
280
- }
281
-
282
- .session-toolbar-primary {
283
- grid-column: span 7;
284
- }
285
-
286
- .session-toolbar-secondary {
287
- grid-column: span 5;
288
- justify-content: flex-end;
289
- }
290
-
291
- .session-toolbar-grow {
292
- grid-column: 1 / -1;
293
- }
294
- }
295
-
296
- .session-path-select:hover,
297
- .session-query-input:hover,
298
- .session-role-select:hover,
299
- .session-time-select:hover {
300
- border-color: var(--color-border-strong);
301
- }
302
-
303
- .session-path-select:focus,
304
- .session-query-input:focus,
305
- .session-role-select:focus,
306
- .session-time-select:focus {
307
- border-color: var(--color-brand);
308
- box-shadow: var(--shadow-input-focus);
309
- }
310
-
311
- .session-hint {
312
- font-size: var(--font-size-secondary);
313
- color: var(--color-text-tertiary);
314
- margin-bottom: 12px;
315
- line-height: 1.45;
316
- }
317
-
318
- .session-card {
319
- align-items: flex-start;
320
- cursor: default;
321
- }
322
-
323
- .session-card:hover {
324
- transform: none;
325
- box-shadow: var(--shadow-card);
326
- }
327
-
328
- .session-card .card-leading {
329
- align-items: flex-start;
330
- }
331
-
332
- .session-meta {
333
- margin-top: 6px;
334
- font-size: var(--font-size-caption);
335
- color: var(--color-text-tertiary);
336
- line-height: 1.4;
337
- word-break: break-all;
338
- }
339
-
340
- .session-actions {
341
- display: flex;
342
- gap: var(--spacing-xs);
343
- align-items: center;
344
- margin-left: var(--spacing-sm);
345
- flex-shrink: 0;
346
- }
347
-
348
- /* .session-source now defined above with per-source colors */
349
-
350
- .session-derived-badge {
351
- display: inline-flex;
352
- align-items: center;
353
- border: 1px solid rgba(208, 88, 58, 0.28);
354
- border-radius: 999px;
355
- padding: 2px 8px;
356
- background: rgba(208, 88, 58, 0.08);
357
- color: var(--color-brand);
358
- font-size: var(--font-size-caption);
359
- font-weight: var(--font-weight-secondary);
360
- line-height: 1.2;
361
- white-space: nowrap;
362
- }
363
-
364
- .session-count-badge {
365
- display: inline-flex;
366
- align-items: center;
367
- justify-content: center;
368
- min-width: 22px;
369
- height: 22px;
370
- padding: 0 7px;
371
- border-radius: 999px;
372
- background: linear-gradient(135deg, var(--color-brand) 0%, var(--color-brand-dark) 100%);
373
- color: #fff;
374
- font-size: var(--font-size-caption);
375
- font-weight: var(--font-weight-secondary);
376
- line-height: 1;
377
- box-shadow: 0 4px 10px rgba(208, 88, 58, 0.16);
378
- flex-shrink: 0;
379
- }
380
-
381
- .trash-list-footer {
382
- display: flex;
383
- justify-content: center;
384
- margin-top: var(--spacing-sm);
385
- }
386
-
387
- .btn-session-export,
388
- .btn-session-open,
389
- .btn-session-clone,
390
- .btn-session-refresh {
391
- border: 1px solid var(--color-border-soft);
392
- border-radius: var(--radius-md);
393
- background: var(--color-surface);
394
- color: var(--color-text-secondary);
395
- padding: 7px 12px;
396
- font-size: var(--font-size-secondary);
397
- font-weight: var(--font-weight-secondary);
398
- cursor: pointer;
399
- transition: all var(--transition-fast) var(--ease-spring);
400
- white-space: nowrap;
401
- letter-spacing: -0.01em;
402
- }
403
-
404
- .btn-session-delete {
405
- border: 1px solid rgba(189, 70, 68, 0.4);
406
- border-radius: var(--radius-md);
407
- background: var(--color-surface);
408
- color: #b74545;
409
- padding: 7px 12px;
410
- font-size: var(--font-size-secondary);
411
- font-weight: var(--font-weight-secondary);
412
- cursor: pointer;
413
- transition: all var(--transition-fast) var(--ease-spring);
414
- white-space: nowrap;
415
- letter-spacing: -0.01em;
416
- }
417
-
418
- .btn-session-refresh:hover {
419
- border-color: var(--color-brand);
420
- color: var(--color-brand);
421
- transform: translateY(-1px);
422
- }
423
-
424
- .btn-session-refresh:disabled {
425
- opacity: 0.5;
426
- cursor: not-allowed;
427
- transform: none;
428
- }
429
-
430
- .btn-session-export:hover,
431
- .btn-session-open:hover {
432
- border-color: var(--color-brand);
433
- color: var(--color-brand);
434
- transform: translateY(-1px);
435
- }
436
-
437
- .btn-session-export:disabled,
438
- .btn-session-open:disabled {
439
- opacity: 0.5;
440
- cursor: not-allowed;
441
- transform: none;
442
- }
443
-
444
- .btn-session-clone:hover {
445
- border-color: var(--color-brand);
446
- color: var(--color-brand);
447
- transform: translateY(-1px);
448
- }
449
-
450
- .btn-session-clone:disabled {
451
- opacity: 0.5;
452
- cursor: not-allowed;
453
- transform: none;
454
- }
455
-
456
- .btn-session-delete:hover {
457
- border-color: rgba(189, 70, 68, 0.8);
458
- background: rgba(189, 70, 68, 0.06);
459
- color: #9f3b3b;
460
- transform: translateY(-1px);
461
- }
462
-
463
- .btn-session-delete:disabled {
464
- opacity: 0.5;
465
- cursor: not-allowed;
466
- transform: none;
467
- }
468
-
469
- .btn-icon-sm {
470
- width: 16px;
471
- height: 16px;
472
- flex-shrink: 0;
473
- }
474
-
475
- /* ===== Session match badges ===== */
476
- .session-match-badge {
477
- display: inline-flex;
478
- align-items: center;
479
- justify-content: center;
480
- min-width: 18px;
481
- height: 18px;
482
- padding: 0 5px;
483
- border-radius: 999px;
484
- background: var(--color-brand-light);
485
- color: var(--color-brand-dark);
486
- font-size: 10px;
487
- font-weight: 600;
488
- line-height: 1;
489
- flex-shrink: 0;
490
- }
491
-
492
- .session-match-snippets {
493
- margin-top: 4px;
494
- grid-column: 1 / -1;
495
- }
496
-
497
- .session-match-snippet {
498
- font-size: var(--font-size-caption);
499
- color: var(--color-text-tertiary);
500
- line-height: 1.35;
501
- padding: 3px 8px;
502
- margin-bottom: 2px;
503
- background: var(--color-surface-alt);
504
- border-radius: var(--radius-sm);
505
- border-left: 2px solid var(--color-brand-light);
506
- overflow: hidden;
507
- text-overflow: ellipsis;
508
- white-space: nowrap;
509
- max-width: 100%;
510
- }
511
-
512
- /* ===== Session preview match highlight ===== */
513
- .session-msg-content mark {
514
- background: rgba(200, 121, 99, 0.18);
515
- color: var(--color-brand-dark);
516
- border-radius: 2px;
517
- padding: 0 1px;
518
- }
1
+ .session-toolbar {
2
+ display: grid;
3
+ grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
4
+ gap: var(--spacing-xs);
5
+ margin-bottom: var(--spacing-xs);
6
+ align-items: end;
7
+ }
8
+
9
+ .session-toolbar-group {
10
+ display: flex;
11
+ align-items: center;
12
+ gap: var(--spacing-xs);
13
+ flex-wrap: wrap;
14
+ min-width: 0;
15
+ }
16
+
17
+ .session-toolbar-secondary {
18
+ justify-content: flex-end;
19
+ }
20
+
21
+ .session-toolbar-grow {
22
+ grid-column: 1 / -1;
23
+ }
24
+
25
+ .session-toolbar-actions {
26
+ justify-content: flex-end;
27
+ }
28
+
29
+ .session-toolbar-footer {
30
+ display: flex;
31
+ align-items: center;
32
+ justify-content: flex-end;
33
+ gap: var(--spacing-xs);
34
+ margin-top: -1px;
35
+ padding-top: 6px;
36
+ margin-bottom: var(--spacing-xs);
37
+ border-top: 1px solid var(--color-border-soft);
38
+ }
39
+
40
+ .session-filter-chips {
41
+ display: flex;
42
+ flex-wrap: wrap;
43
+ gap: 8px;
44
+ margin-top: 4px;
45
+ margin-bottom: 2px;
46
+ }
47
+
48
+ .session-filter-chip {
49
+ display: inline-flex;
50
+ align-items: center;
51
+ gap: 6px;
52
+ max-width: 100%;
53
+ padding: 5px 10px;
54
+ border-radius: 999px;
55
+ border: 1px solid var(--color-border-soft);
56
+ background: var(--color-surface);
57
+ color: var(--color-text-secondary);
58
+ font-size: var(--font-size-caption);
59
+ font-weight: var(--font-weight-secondary);
60
+ cursor: pointer;
61
+ transition: all var(--transition-fast) var(--ease-spring);
62
+ min-width: 0;
63
+ }
64
+
65
+ .session-filter-chip:hover {
66
+ border-color: var(--color-brand);
67
+ background: var(--color-surface-alt);
68
+ transform: translateY(-1px);
69
+ }
70
+
71
+ .session-filter-chip-title {
72
+ opacity: 0.75;
73
+ flex: 0 0 auto;
74
+ }
75
+
76
+ .session-filter-chip-value {
77
+ min-width: 0;
78
+ overflow: hidden;
79
+ text-overflow: ellipsis;
80
+ white-space: nowrap;
81
+ max-width: 520px;
82
+ }
83
+
84
+ .session-filter-chip-close {
85
+ display: inline-flex;
86
+ align-items: center;
87
+ justify-content: center;
88
+ width: 18px;
89
+ height: 18px;
90
+ border-radius: 999px;
91
+ border: 1px solid var(--color-border-soft);
92
+ background: var(--color-surface-alt);
93
+ line-height: 1;
94
+ flex: 0 0 auto;
95
+ transition: all var(--transition-fast) var(--ease-spring);
96
+ }
97
+
98
+ .session-filter-chip-close:hover {
99
+ border-color: var(--color-brand);
100
+ background: var(--color-brand);
101
+ color: #fff;
102
+ }
103
+
104
+ .session-filter-chip:focus-visible {
105
+ outline: 3px solid rgba(210, 107, 90, 0.2);
106
+ outline-offset: 2px;
107
+ }
108
+
109
+ .session-toolbar-footer .quick-option {
110
+ margin: 0;
111
+ padding: 5px 10px;
112
+ border-radius: var(--radius-md);
113
+ border: 1px solid var(--color-border-soft);
114
+ background: var(--color-surface);
115
+ transition: all var(--transition-fast) var(--ease-spring);
116
+ line-height: 1.2;
117
+ }
118
+
119
+ .session-toolbar-footer .quick-option:hover {
120
+ border-color: var(--color-brand);
121
+ }
122
+
123
+ /* ===== Session source pill bar ===== */
124
+ .session-source-pills {
125
+ display: flex;
126
+ gap: 4px;
127
+ padding: 3px;
128
+ border-radius: var(--radius-md);
129
+ background: var(--color-surface-alt);
130
+ border: 1px solid var(--color-border-soft);
131
+ }
132
+
133
+ .session-source-pill {
134
+ display: inline-flex;
135
+ align-items: center;
136
+ gap: 6px;
137
+ padding: 6px 12px;
138
+ border-radius: var(--radius-sm);
139
+ border: none;
140
+ background: transparent;
141
+ color: var(--color-text-tertiary);
142
+ font-size: var(--font-size-secondary);
143
+ font-family: var(--font-family);
144
+ font-weight: var(--font-weight-secondary);
145
+ cursor: pointer;
146
+ transition: all var(--transition-fast) var(--ease-spring);
147
+ outline: none;
148
+ white-space: nowrap;
149
+ user-select: none;
150
+ -webkit-tap-highlight-color: transparent;
151
+ }
152
+
153
+ .session-source-pill:hover:not(:disabled) {
154
+ color: var(--color-text-secondary);
155
+ background: var(--color-surface);
156
+ }
157
+
158
+ .session-source-pill:active:not(:disabled) {
159
+ transform: scale(0.97);
160
+ }
161
+
162
+ .session-source-pill.active {
163
+ color: #fff;
164
+ background: var(--color-brand);
165
+ box-shadow: 0 1px 3px rgba(200, 121, 99, 0.35);
166
+ font-weight: var(--font-weight-primary);
167
+ }
168
+
169
+ .session-source-pill.active .session-source-pill-dot {
170
+ background: rgba(255,255,255,0.9);
171
+ box-shadow: 0 0 0 1px rgba(255,255,255,0.3);
172
+ }
173
+
174
+ .session-source-pill:focus-visible {
175
+ box-shadow: 0 0 0 2px var(--color-brand-light);
176
+ }
177
+
178
+ .session-source-pill:disabled {
179
+ opacity: 0.5;
180
+ cursor: not-allowed;
181
+ }
182
+
183
+ .session-source-pill-dot {
184
+ width: 7px;
185
+ height: 7px;
186
+ border-radius: 50%;
187
+ background: var(--color-text-muted);
188
+ flex-shrink: 0;
189
+ transition: all var(--transition-fast) var(--ease-spring);
190
+ }
191
+
192
+ .session-source-pill[data-source="codex"] .session-source-pill-dot {
193
+ background: #D26B5A;
194
+ }
195
+ .session-source-pill[data-source="claude"] .session-source-pill-dot {
196
+ background: #D97757;
197
+ }
198
+ .session-source-pill[data-source="gemini"] .session-source-pill-dot {
199
+ background: #5B8C5A;
200
+ }
201
+ .session-source-pill[data-source="codebuddy"] .session-source-pill-dot {
202
+ background: #6B8EB5;
203
+ }
204
+
205
+ .session-source-pill-label {
206
+ font-size: var(--font-size-secondary);
207
+ line-height: 1;
208
+ }
209
+
210
+ /* ===== Session card source badge ===== */
211
+ .session-source {
212
+ display: inline-flex;
213
+ align-items: center;
214
+ gap: 4px;
215
+ font-size: var(--font-size-caption);
216
+ font-weight: var(--font-weight-caption);
217
+ border-radius: 999px;
218
+ padding: 2px 8px;
219
+ white-space: nowrap;
220
+ background: var(--color-surface-alt);
221
+ color: var(--color-text-tertiary);
222
+ border: 1px solid var(--color-border-soft);
223
+ transition: all var(--transition-fast) var(--ease-spring);
224
+ }
225
+
226
+ .session-source[data-source="codex"],
227
+ .session-source.codex {
228
+ background: rgba(210, 107, 90, 0.08);
229
+ color: #B54A3A;
230
+ border-color: rgba(210, 107, 90, 0.2);
231
+ }
232
+
233
+ .session-source[data-source="claude"],
234
+ .session-source.claude {
235
+ background: rgba(217, 119, 87, 0.08);
236
+ color: #B55A3A;
237
+ border-color: rgba(217, 119, 87, 0.2);
238
+ }
239
+
240
+ .session-source[data-source="gemini"],
241
+ .session-source.gemini {
242
+ background: rgba(91, 140, 90, 0.08);
243
+ color: #3A6B38;
244
+ border-color: rgba(91, 140, 90, 0.2);
245
+ }
246
+
247
+ .session-source[data-source="codebuddy"],
248
+ .session-source.codebuddy {
249
+ background: rgba(107, 142, 181, 0.08);
250
+ color: #3A5A7A;
251
+ border-color: rgba(107, 142, 181, 0.2);
252
+ }
253
+
254
+ .session-path-select,
255
+ .session-query-input,
256
+ .session-role-select,
257
+ .session-time-select {
258
+ flex: 1;
259
+ min-width: 160px;
260
+ padding: 9px 12px;
261
+ border-radius: var(--radius-md);
262
+ border: 1px solid var(--color-border-soft);
263
+ background: var(--color-surface);
264
+ color: var(--color-text-secondary);
265
+ font-size: var(--font-size-body);
266
+ font-family: var(--font-family);
267
+ outline: none;
268
+ transition: all var(--transition-fast) var(--ease-spring);
269
+ }
270
+
271
+ .session-query-input {
272
+ flex: 2;
273
+ min-width: 220px;
274
+ }
275
+
276
+ @media (min-width: 980px) {
277
+ .session-toolbar {
278
+ grid-template-columns: repeat(12, minmax(0, 1fr));
279
+ gap: 10px;
280
+ }
281
+
282
+ .session-toolbar-primary {
283
+ grid-column: span 7;
284
+ }
285
+
286
+ .session-toolbar-secondary {
287
+ grid-column: span 5;
288
+ justify-content: flex-end;
289
+ }
290
+
291
+ .session-toolbar-grow {
292
+ grid-column: 1 / -1;
293
+ }
294
+ }
295
+
296
+ .session-path-select:hover,
297
+ .session-query-input:hover,
298
+ .session-role-select:hover,
299
+ .session-time-select:hover {
300
+ border-color: var(--color-border-strong);
301
+ }
302
+
303
+ .session-path-select:focus,
304
+ .session-query-input:focus,
305
+ .session-role-select:focus,
306
+ .session-time-select:focus {
307
+ border-color: var(--color-brand);
308
+ box-shadow: var(--shadow-input-focus);
309
+ }
310
+
311
+ .session-hint {
312
+ font-size: var(--font-size-secondary);
313
+ color: var(--color-text-tertiary);
314
+ margin-bottom: 12px;
315
+ line-height: 1.45;
316
+ }
317
+
318
+ .session-card {
319
+ align-items: flex-start;
320
+ cursor: default;
321
+ }
322
+
323
+ .session-card:hover {
324
+ transform: none;
325
+ box-shadow: var(--shadow-card);
326
+ }
327
+
328
+ .session-card .card-leading {
329
+ align-items: flex-start;
330
+ }
331
+
332
+ .session-meta {
333
+ margin-top: 6px;
334
+ font-size: var(--font-size-caption);
335
+ color: var(--color-text-tertiary);
336
+ line-height: 1.4;
337
+ word-break: break-all;
338
+ }
339
+
340
+ .session-actions {
341
+ display: flex;
342
+ gap: var(--spacing-xs);
343
+ align-items: center;
344
+ margin-left: var(--spacing-sm);
345
+ flex-shrink: 0;
346
+ }
347
+
348
+ /* .session-source now defined above with per-source colors */
349
+
350
+ .session-derived-badge {
351
+ display: inline-flex;
352
+ align-items: center;
353
+ border: 1px solid rgba(208, 88, 58, 0.28);
354
+ border-radius: 999px;
355
+ padding: 2px 8px;
356
+ background: rgba(208, 88, 58, 0.08);
357
+ color: var(--color-brand);
358
+ font-size: var(--font-size-caption);
359
+ font-weight: var(--font-weight-secondary);
360
+ line-height: 1.2;
361
+ white-space: nowrap;
362
+ }
363
+
364
+ .session-count-badge {
365
+ display: inline-flex;
366
+ align-items: center;
367
+ justify-content: center;
368
+ min-width: 22px;
369
+ height: 22px;
370
+ padding: 0 7px;
371
+ border-radius: 999px;
372
+ background: linear-gradient(135deg, var(--color-brand) 0%, var(--color-brand-dark) 100%);
373
+ color: #fff;
374
+ font-size: var(--font-size-caption);
375
+ font-weight: var(--font-weight-secondary);
376
+ line-height: 1;
377
+ box-shadow: 0 4px 10px rgba(208, 88, 58, 0.16);
378
+ flex-shrink: 0;
379
+ }
380
+
381
+ .trash-list-footer {
382
+ display: flex;
383
+ justify-content: center;
384
+ margin-top: var(--spacing-sm);
385
+ }
386
+
387
+ .btn-session-export,
388
+ .btn-session-open,
389
+ .btn-session-clone,
390
+ .btn-session-refresh {
391
+ border: 1px solid var(--color-border-soft);
392
+ border-radius: var(--radius-md);
393
+ background: var(--color-surface);
394
+ color: var(--color-text-secondary);
395
+ padding: 7px 12px;
396
+ font-size: var(--font-size-secondary);
397
+ font-weight: var(--font-weight-secondary);
398
+ cursor: pointer;
399
+ transition: all var(--transition-fast) var(--ease-spring);
400
+ white-space: nowrap;
401
+ letter-spacing: -0.01em;
402
+ }
403
+
404
+ .btn-session-delete {
405
+ border: 1px solid rgba(189, 70, 68, 0.4);
406
+ border-radius: var(--radius-md);
407
+ background: var(--color-surface);
408
+ color: #b74545;
409
+ padding: 7px 12px;
410
+ font-size: var(--font-size-secondary);
411
+ font-weight: var(--font-weight-secondary);
412
+ cursor: pointer;
413
+ transition: all var(--transition-fast) var(--ease-spring);
414
+ white-space: nowrap;
415
+ letter-spacing: -0.01em;
416
+ }
417
+
418
+ .btn-session-refresh:hover {
419
+ border-color: var(--color-brand);
420
+ color: var(--color-brand);
421
+ transform: translateY(-1px);
422
+ }
423
+
424
+ .btn-session-refresh:disabled {
425
+ opacity: 0.5;
426
+ cursor: not-allowed;
427
+ transform: none;
428
+ }
429
+
430
+ .btn-session-export:hover,
431
+ .btn-session-open:hover {
432
+ border-color: var(--color-brand);
433
+ color: var(--color-brand);
434
+ transform: translateY(-1px);
435
+ }
436
+
437
+ .btn-session-export:disabled,
438
+ .btn-session-open:disabled {
439
+ opacity: 0.5;
440
+ cursor: not-allowed;
441
+ transform: none;
442
+ }
443
+
444
+ .btn-session-clone:hover {
445
+ border-color: var(--color-brand);
446
+ color: var(--color-brand);
447
+ transform: translateY(-1px);
448
+ }
449
+
450
+ .btn-session-clone:disabled {
451
+ opacity: 0.5;
452
+ cursor: not-allowed;
453
+ transform: none;
454
+ }
455
+
456
+ .btn-session-delete:hover {
457
+ border-color: rgba(189, 70, 68, 0.8);
458
+ background: rgba(189, 70, 68, 0.06);
459
+ color: #9f3b3b;
460
+ transform: translateY(-1px);
461
+ }
462
+
463
+ .btn-session-delete:disabled {
464
+ opacity: 0.5;
465
+ cursor: not-allowed;
466
+ transform: none;
467
+ }
468
+
469
+ .btn-icon-sm {
470
+ width: 16px;
471
+ height: 16px;
472
+ flex-shrink: 0;
473
+ }
474
+
475
+ /* ===== Session match badges ===== */
476
+ .session-match-badge {
477
+ display: inline-flex;
478
+ align-items: center;
479
+ justify-content: center;
480
+ min-width: 18px;
481
+ height: 18px;
482
+ padding: 0 5px;
483
+ border-radius: 999px;
484
+ background: var(--color-brand-light);
485
+ color: var(--color-brand-dark);
486
+ font-size: 10px;
487
+ font-weight: 600;
488
+ line-height: 1;
489
+ flex-shrink: 0;
490
+ }
491
+
492
+ .session-match-snippets {
493
+ margin-top: 4px;
494
+ grid-column: 1 / -1;
495
+ }
496
+
497
+ .session-match-snippet {
498
+ font-size: var(--font-size-caption);
499
+ color: var(--color-text-tertiary);
500
+ line-height: 1.35;
501
+ padding: 3px 8px;
502
+ margin-bottom: 2px;
503
+ background: var(--color-surface-alt);
504
+ border-radius: var(--radius-sm);
505
+ border-left: 2px solid var(--color-brand-light);
506
+ overflow: hidden;
507
+ text-overflow: ellipsis;
508
+ white-space: nowrap;
509
+ max-width: 100%;
510
+ }
511
+
512
+ /* ===== Session preview match highlight ===== */
513
+ .session-msg-content mark {
514
+ background: rgba(200, 121, 99, 0.18);
515
+ color: var(--color-brand-dark);
516
+ border-radius: 2px;
517
+ padding: 0 1px;
518
+ }