codexmate 0.1.28 → 0.1.29
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.
- package/README.md +53 -44
- package/README.vi.md +45 -36
- package/README.zh.md +51 -42
- package/cli/session-usage.js +2 -2
- package/cli.js +369 -15
- package/package.json +1 -1
- package/web-ui/app.js +3 -0
- package/web-ui/index.html +3 -2
- package/web-ui/logic.sessions.mjs +6 -4
- package/web-ui/modules/app.computed.session.mjs +52 -33
- package/web-ui/modules/app.methods.agents.mjs +36 -0
- package/web-ui/modules/app.methods.codex-config.mjs +3 -1
- package/web-ui/modules/app.methods.providers.mjs +12 -4
- package/web-ui/modules/app.methods.session-actions.mjs +10 -8
- package/web-ui/modules/app.methods.session-browser.mjs +3 -1
- package/web-ui/modules/app.methods.session-trash.mjs +16 -16
- package/web-ui/modules/app.methods.theme.mjs +5 -4
- package/web-ui/modules/i18n/locales/en.mjs +74 -1
- package/web-ui/modules/i18n/locales/ja.mjs +74 -1
- package/web-ui/modules/i18n/locales/vi.mjs +74 -1
- package/web-ui/modules/i18n/locales/zh-tw.mjs +74 -1
- package/web-ui/modules/i18n/locales/zh.mjs +74 -1
- package/web-ui/modules/i18n.mjs +7 -0
- package/web-ui/partials/index/modal-config-template-agents.html +1 -1
- package/web-ui/partials/index/modal-health-check.html +1 -1
- package/web-ui/partials/index/modal-openclaw-config.html +50 -50
- package/web-ui/partials/index/panel-dashboard.html +1 -1
- package/web-ui/partials/index/panel-prompts.html +2 -2
- package/web-ui/partials/index/panel-sessions.html +45 -28
- package/web-ui/partials/index/panel-settings.html +6 -0
- package/web-ui/res/web-ui-render.precompiled.js +219 -156
- package/web-ui/session-helpers.mjs +3 -0
- package/web-ui/styles/base-theme.css +2 -2
- package/web-ui/styles/bridge-pool.css +1 -1
- package/web-ui/styles/layout-shell.css +0 -1
- package/web-ui/styles/sessions-preview.css +77 -0
- package/web-ui/styles/theme-dark-tokens.css +2 -2
- package/web-ui/styles/theme-dark.css +2 -2
- package/web-ui/styles/theme-ocean-tokens.css +88 -0
- package/web-ui/styles/theme-ocean.css +920 -0
- package/web-ui/styles.css +1 -0
|
@@ -222,6 +222,7 @@ export async function loadSessions(api, options = {}) {
|
|
|
222
222
|
const normalizedOptions = normalizeSessionLoadOptions(options);
|
|
223
223
|
const includeActiveDetail = shouldIncludeActiveSessionDetail(this, normalizedOptions);
|
|
224
224
|
this.sessionsLoading = true;
|
|
225
|
+
this.sessionSearchInfo = null;
|
|
225
226
|
this.activeSessionDetailError = '';
|
|
226
227
|
let loadSucceeded = false;
|
|
227
228
|
const params = buildSessionListParams({
|
|
@@ -257,6 +258,7 @@ export async function loadSessions(api, options = {}) {
|
|
|
257
258
|
clearSessionTimelineRefs(this);
|
|
258
259
|
} else {
|
|
259
260
|
loadSucceeded = true;
|
|
261
|
+
this.sessionSearchInfo = res.searchInfo || null;
|
|
260
262
|
const rawSessions = Array.isArray(res.sessions) ? res.sessions : [];
|
|
261
263
|
this.sessionsList = rawSessions.filter(s => s && typeof s === 'object');
|
|
262
264
|
if (typeof this.clearSessionBatchSelection === 'function') {
|
|
@@ -313,6 +315,7 @@ export async function loadSessions(api, options = {}) {
|
|
|
313
315
|
}
|
|
314
316
|
}
|
|
315
317
|
} catch (e) {
|
|
318
|
+
this.sessionSearchInfo = null;
|
|
316
319
|
emitSessionLoadDebug(this, 'loadSessions:exception', e && e.message ? e.message : String(e));
|
|
317
320
|
this.sessionsList = [];
|
|
318
321
|
if (typeof this.primeSessionListRender === 'function') {
|
|
@@ -18,8 +18,8 @@
|
|
|
18
18
|
--color-surface-chip: rgba(255, 255, 255, 0.76);
|
|
19
19
|
--color-text-primary: #241F1C;
|
|
20
20
|
--color-text-secondary: #5A504A;
|
|
21
|
-
--color-text-tertiary: #
|
|
22
|
-
--color-text-muted: #
|
|
21
|
+
--color-text-tertiary: #74655B;
|
|
22
|
+
--color-text-muted: #77675C;
|
|
23
23
|
--color-border: rgba(137, 111, 94, 0.18);
|
|
24
24
|
--color-border-soft: rgba(137, 111, 94, 0.13);
|
|
25
25
|
--color-border-strong: rgba(137, 111, 94, 0.34);
|
|
@@ -758,3 +758,80 @@
|
|
|
758
758
|
width: 14px;
|
|
759
759
|
height: 14px;
|
|
760
760
|
}
|
|
761
|
+
|
|
762
|
+
/* Refined session workspace: preserve the list/detail structure and action contracts. */
|
|
763
|
+
#panel-sessions.session-browser-refined .session-preview-header {
|
|
764
|
+
padding: 12px 16px 8px; gap: 8px 16px;
|
|
765
|
+
display: grid; grid-template-columns: minmax(0, 1fr) auto;
|
|
766
|
+
grid-template-areas: "title export" "actions actions";
|
|
767
|
+
background: var(--color-surface); backdrop-filter: none;
|
|
768
|
+
}
|
|
769
|
+
#panel-sessions.session-browser-refined .session-preview-title {
|
|
770
|
+
font-size: 17px; line-height: 1.5; letter-spacing: -.015em;
|
|
771
|
+
}
|
|
772
|
+
#panel-sessions.session-browser-refined .session-preview-header > div:first-child { grid-area: title; min-width: 0; }
|
|
773
|
+
#panel-sessions .session-preview-actions { grid-area: actions; gap: 10px; justify-content: flex-start; margin-top: 0; }
|
|
774
|
+
#panel-sessions .session-export-control {
|
|
775
|
+
grid-area: export; justify-self: end; align-self: start;
|
|
776
|
+
display: flex; flex-wrap: wrap; align-items: center; gap: 6px;
|
|
777
|
+
padding: 2px; border: 1px solid var(--color-border-soft); border-radius: var(--radius-md);
|
|
778
|
+
background: var(--color-surface-alt); max-width: 100%;
|
|
779
|
+
}
|
|
780
|
+
#panel-sessions .session-export-label { font-size: 12px; line-height: 1; color: var(--color-text-secondary); padding-inline: 6px 0; margin-block: 0; }
|
|
781
|
+
#panel-sessions #session-export-range {
|
|
782
|
+
min-height: 44px; min-width: 0; max-width: 100%; padding: 8px 28px 8px 10px;
|
|
783
|
+
border: 0; border-radius: var(--radius-sm); background: var(--color-surface);
|
|
784
|
+
color: var(--color-text-primary); font: inherit; font-size: 14px; cursor: pointer;
|
|
785
|
+
}
|
|
786
|
+
#panel-sessions .session-preview-actions button {
|
|
787
|
+
min-width: 44px; min-height: 44px; height: auto; width: auto; padding: 9px 12px;
|
|
788
|
+
border-radius: var(--radius-sm); box-shadow: none;
|
|
789
|
+
transition: background-color 120ms ease-out, transform 100ms ease-out, color 120ms ease-out;
|
|
790
|
+
touch-action: manipulation;
|
|
791
|
+
}
|
|
792
|
+
#panel-sessions .session-export-control .btn-session-export {
|
|
793
|
+
background: var(--color-text-primary); color: var(--color-surface);
|
|
794
|
+
border-color: transparent; font-weight: 600;
|
|
795
|
+
}
|
|
796
|
+
#panel-sessions .session-secondary-actions { display: flex; align-items: center; flex-wrap: wrap; gap: 4px; }
|
|
797
|
+
#panel-sessions .session-secondary-actions button { background: transparent; border-color: transparent; color: var(--color-text-secondary); }
|
|
798
|
+
#panel-sessions .session-secondary-actions .session-link-group { display: inline-flex; gap: 2px; }
|
|
799
|
+
#panel-sessions .session-danger-action { margin-inline-start: auto; padding-inline-start: 12px; border-inline-start: 1px solid var(--color-border-soft); }
|
|
800
|
+
#panel-sessions .session-danger-action button { background: transparent; border-color: transparent; }
|
|
801
|
+
#panel-sessions .session-preview-actions button:hover:not(:disabled) { transform: none; background: var(--color-surface-alt); }
|
|
802
|
+
#panel-sessions .session-export-control .btn-session-export:hover:not(:disabled) { background: var(--color-text-secondary); }
|
|
803
|
+
#panel-sessions .session-preview-actions button:active:not(:disabled) { transform: scale(.97); }
|
|
804
|
+
#panel-sessions .session-preview-actions :is(button, select):focus-visible,
|
|
805
|
+
#panel-sessions .session-empty-refined button:focus-visible { outline: 2px solid var(--color-brand); outline-offset: 3px; }
|
|
806
|
+
#panel-sessions .session-preview-actions :disabled { opacity: .5; cursor: not-allowed; }
|
|
807
|
+
#panel-sessions .session-export-feedback { padding: 0 16px 16px; color: var(--color-text-secondary); line-height: 1.6; }
|
|
808
|
+
#panel-sessions .session-export-feedback small { display: block; font-size: 12px; }
|
|
809
|
+
#panel-sessions .session-export-notice {
|
|
810
|
+
margin: 10px 0 0; padding: 10px 12px; border: 1px solid var(--color-border-soft);
|
|
811
|
+
border-radius: var(--radius-sm); background: var(--color-surface-alt); font-size: 13px;
|
|
812
|
+
}
|
|
813
|
+
#panel-sessions .session-search-status {
|
|
814
|
+
display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 14px;
|
|
815
|
+
padding: 10px 2px 14px; font-size: 12px; line-height: 1.6; color: var(--color-text-secondary);
|
|
816
|
+
}
|
|
817
|
+
#panel-sessions .session-search-count { font-weight: 600; color: var(--color-text-primary); font-variant-numeric: tabular-nums; }
|
|
818
|
+
#panel-sessions .session-search-partial { color: var(--color-text-secondary); }
|
|
819
|
+
#panel-sessions .session-search-scope { font-size: inherit; margin-inline-start: auto; }
|
|
820
|
+
#panel-sessions .session-empty-refined { padding: 40px 20px; border: 1px dashed var(--color-border-soft); background: transparent; }
|
|
821
|
+
#panel-sessions .session-empty-refined::before { display: none; }
|
|
822
|
+
#panel-sessions .session-empty-refined p { margin: 0 0 16px; line-height: 1.65; }
|
|
823
|
+
#panel-sessions .session-empty-refined button { min-height: 44px; padding-inline: 16px; }
|
|
824
|
+
@media (max-width: 640px) {
|
|
825
|
+
#panel-sessions .session-preview-actions { flex-direction: row; align-items: center; gap: 10px; }
|
|
826
|
+
#panel-sessions .session-export-control { justify-self: stretch; }
|
|
827
|
+
#panel-sessions #session-export-range { flex: 1 1 120px; }
|
|
828
|
+
#panel-sessions .session-secondary-actions { flex: 1 1 180px; }
|
|
829
|
+
#panel-sessions .session-preview-actions button { width: auto; }
|
|
830
|
+
#panel-sessions .session-search-scope { flex-basis: 100%; margin-inline-start: 0; }
|
|
831
|
+
#panel-sessions.session-browser-refined .session-preview-header { padding: 12px 12px 8px; gap: 8px; grid-template-columns: 1fr; grid-template-areas: "title" "export" "actions"; }
|
|
832
|
+
#panel-sessions .session-export-feedback { padding-inline: 12px; }
|
|
833
|
+
}
|
|
834
|
+
@media (prefers-reduced-motion: reduce) {
|
|
835
|
+
#panel-sessions .session-preview-actions button { transition: none; }
|
|
836
|
+
#panel-sessions .session-preview-actions button:active:not(:disabled) { transform: none; }
|
|
837
|
+
}
|
|
@@ -20,8 +20,8 @@
|
|
|
20
20
|
--color-surface-chip: rgba(30, 31, 34, 0.76);
|
|
21
21
|
--color-text-primary: #ECE8E4;
|
|
22
22
|
--color-text-secondary: #B5ABA4;
|
|
23
|
-
--color-text-tertiary: #
|
|
24
|
-
--color-text-muted: #
|
|
23
|
+
--color-text-tertiary: #A59A91;
|
|
24
|
+
--color-text-muted: #9A8D83;
|
|
25
25
|
--color-border: rgba(255, 255, 255, 0.09);
|
|
26
26
|
--color-border-soft: rgba(255, 255, 255, 0.06);
|
|
27
27
|
--color-border-strong: rgba(255, 255, 255, 0.2);
|
|
@@ -29,8 +29,8 @@
|
|
|
29
29
|
--color-surface-chip: rgba(30, 31, 34, 0.76);
|
|
30
30
|
--color-text-primary: #ECE8E4;
|
|
31
31
|
--color-text-secondary: #B5ABA4;
|
|
32
|
-
--color-text-tertiary: #
|
|
33
|
-
--color-text-muted: #
|
|
32
|
+
--color-text-tertiary: #A59A91;
|
|
33
|
+
--color-text-muted: #9A8D83;
|
|
34
34
|
--color-border: rgba(255, 255, 255, 0.09);
|
|
35
35
|
--color-border-soft: rgba(255, 255, 255, 0.06);
|
|
36
36
|
--color-border-strong: rgba(255, 255, 255, 0.2);
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Codex Mate Web UI - ocean light theme tokens (hand maintained).
|
|
3
|
+
*
|
|
4
|
+
* Background layer adapted from the "dafy-whale-theme" project
|
|
5
|
+
* (https://github.com/DViridescent/dafy-whale-theme, MIT licensed).
|
|
6
|
+
* Only the static background layer (the ocean wash gradients) is reused:
|
|
7
|
+
* no mascot, no fish swarm, no bubble animation, no plugin dependency.
|
|
8
|
+
*
|
|
9
|
+
* The component section of theme-ocean.css is GENERATED - do not edit by hand.
|
|
10
|
+
* Regenerate after changing any stylesheet:
|
|
11
|
+
* node scripts/generate-ocean-theme-css.mjs
|
|
12
|
+
*/
|
|
13
|
+
:root[data-theme="ocean"] {
|
|
14
|
+
color-scheme: light;
|
|
15
|
+
|
|
16
|
+
/* 品牌色:海洋蓝(源自 dafy-whale-theme 的 --dsw-alias-brand-primary) */
|
|
17
|
+
--color-brand: #3B62F6;
|
|
18
|
+
--color-brand-dark: #2B4BD0;
|
|
19
|
+
--color-brand-light: rgba(59, 98, 246, 0.13);
|
|
20
|
+
--color-brand-subtle: rgba(59, 98, 246, 0.2);
|
|
21
|
+
|
|
22
|
+
/* 中性蓝层级底色 */
|
|
23
|
+
--color-bg: #E9F3FC;
|
|
24
|
+
--color-surface: #F3F9FE;
|
|
25
|
+
--color-surface-alt: #E0EDF9;
|
|
26
|
+
--color-surface-elevated: #FFFFFF;
|
|
27
|
+
--color-surface-tint: rgba(243, 249, 254, 0.86);
|
|
28
|
+
--color-surface-chip: rgba(255, 255, 255, 0.76);
|
|
29
|
+
--color-text-primary: #0E2A5C;
|
|
30
|
+
--color-text-secondary: #3B5C85;
|
|
31
|
+
--color-text-tertiary: #45678F;
|
|
32
|
+
--color-text-muted: #476A90;
|
|
33
|
+
--color-border: rgba(31, 86, 150, 0.18);
|
|
34
|
+
--color-border-soft: rgba(31, 86, 150, 0.13);
|
|
35
|
+
--color-border-strong: rgba(31, 86, 150, 0.34);
|
|
36
|
+
|
|
37
|
+
--color-success: #127450;
|
|
38
|
+
--color-error: #B92A50;
|
|
39
|
+
|
|
40
|
+
/* Delta 指示色 */
|
|
41
|
+
--color-delta-up: #127450;
|
|
42
|
+
--color-delta-down: #B92A50;
|
|
43
|
+
|
|
44
|
+
/* 热力图色阶:海洋蓝 alpha 阶梯 */
|
|
45
|
+
--color-heatmap-1: rgba(59, 98, 246, 0.2);
|
|
46
|
+
--color-heatmap-2: rgba(59, 98, 246, 0.4);
|
|
47
|
+
--color-heatmap-3: rgba(59, 98, 246, 0.6);
|
|
48
|
+
--color-heatmap-4: rgba(59, 98, 246, 0.85);
|
|
49
|
+
|
|
50
|
+
/*
|
|
51
|
+
* 背景海面光晕:取自 dafy-whale-theme 的 .dafy-wash 三层径向渐变,
|
|
52
|
+
* 仅保留静态渐变层,颜色全部由下方 wash token 承载。
|
|
53
|
+
*/
|
|
54
|
+
--color-ocean-wash-brand: rgba(59, 98, 246, 0.30);
|
|
55
|
+
--color-ocean-wash-cyan: rgba(87, 199, 232, 0.26);
|
|
56
|
+
--color-ocean-wash-teal: rgba(47, 208, 181, 0.14);
|
|
57
|
+
|
|
58
|
+
--bg-warm-gradient:
|
|
59
|
+
radial-gradient(circle at 14% 8%, rgba(255, 255, 255, 0.62), rgba(255, 255, 255, 0) 26%),
|
|
60
|
+
radial-gradient(circle at 86% 18%, rgba(214, 236, 255, 0.55), rgba(214, 236, 255, 0) 30%),
|
|
61
|
+
linear-gradient(135deg, var(--color-bg) 0%, var(--color-surface-alt) 100%);
|
|
62
|
+
|
|
63
|
+
--color-bg-topbar-strong: rgba(233, 243, 252, 0.96);
|
|
64
|
+
--color-bg-topbar-soft: rgba(233, 243, 252, 0.86);
|
|
65
|
+
--color-bg-topbar-clear: rgba(233, 243, 252, 0);
|
|
66
|
+
|
|
67
|
+
/* 阴影系统:冷色蓝调 */
|
|
68
|
+
--shadow-subtle: 0 1px 2px rgba(16, 48, 92, 0.05);
|
|
69
|
+
--shadow-card: 0 12px 30px rgba(16, 48, 92, 0.08);
|
|
70
|
+
--shadow-card-hover: 0 18px 44px rgba(16, 48, 92, 0.14);
|
|
71
|
+
--shadow-float: 0 22px 56px rgba(12, 40, 80, 0.18);
|
|
72
|
+
--shadow-raised: 0 14px 30px rgba(16, 48, 92, 0.14);
|
|
73
|
+
--shadow-modal:
|
|
74
|
+
0 16px 42px rgba(12, 40, 80, 0.16),
|
|
75
|
+
0 34px 84px rgba(12, 40, 80, 0.16);
|
|
76
|
+
--shadow-input-focus:
|
|
77
|
+
0 0 0 3px var(--color-brand-light),
|
|
78
|
+
0 1px 2px rgba(16, 48, 92, 0.06);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/* 背景海面光晕:固定层,不参与滚动,避免长页面拉伸与错位 */
|
|
82
|
+
:root[data-theme="ocean"] body::before {
|
|
83
|
+
background:
|
|
84
|
+
radial-gradient(1100px 620px at 88% -8%, var(--color-ocean-wash-brand), transparent 62%),
|
|
85
|
+
radial-gradient(900px 560px at -6% 108%, var(--color-ocean-wash-cyan), transparent 58%),
|
|
86
|
+
radial-gradient(520px 340px at 50% 46%, var(--color-ocean-wash-teal), transparent 70%);
|
|
87
|
+
mix-blend-mode: soft-light;
|
|
88
|
+
}
|