pi-web-ui 0.91.0 → 0.93.0

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 (64) hide show
  1. package/CHANGELOG.md +90 -1
  2. package/README.md +69 -14
  3. package/README.zh-CN.md +36 -10
  4. package/bin/pi-web-ui.mjs +39 -8
  5. package/dist/server/agent-service.js +938 -163
  6. package/dist/server/auth-cookie.js +26 -0
  7. package/dist/server/claim-files-tool.js +115 -0
  8. package/dist/server/claim-store.js +301 -0
  9. package/dist/server/client-state.js +114 -6
  10. package/dist/server/conversation-read-tool.js +371 -28
  11. package/dist/server/conversation-touches.js +357 -0
  12. package/dist/server/delegate-task.js +10 -3
  13. package/dist/server/dsh/dsh-agent-service.js +50 -1
  14. package/dist/server/files-service.js +78 -26
  15. package/dist/server/http-proxy.js +72 -0
  16. package/dist/server/index.js +94 -11
  17. package/dist/server/model-admin.js +124 -2
  18. package/dist/server/model-enrich.js +478 -0
  19. package/dist/server/patch-node-pty.js +11 -0
  20. package/dist/server/plugin-schedule.js +27 -2
  21. package/dist/server/plugins.js +66 -10
  22. package/dist/server/present-files-tool.js +303 -0
  23. package/dist/server/protocol-version.js +1 -1
  24. package/dist/server/read-tool.js +125 -0
  25. package/dist/server/resolve-global-sdk.js +72 -0
  26. package/dist/server/sdk-origin.js +64 -0
  27. package/dist/server/serialize.js +80 -22
  28. package/dist/server/settings-service.js +19 -1
  29. package/dist/server/skill-tool.js +2 -1
  30. package/dist/server/subagents.js +30 -13
  31. package/dist/server/terminals.js +38 -18
  32. package/dist/server/text-sniff.js +15 -0
  33. package/dist/server/themes.js +32 -2
  34. package/dist/server/tool-info.js +89 -0
  35. package/dist/server/tool-manager.js +110 -11
  36. package/package.json +2 -2
  37. package/plugin-sdk/README.md +1 -0
  38. package/plugins/catalog.json +20 -0
  39. package/themes/ayu-light.css +136 -0
  40. package/themes/catppuccin-latte.css +140 -0
  41. package/themes/catppuccin.css +144 -0
  42. package/themes/codex.css +136 -0
  43. package/themes/cyberpunk.css +4 -0
  44. package/themes/dazzle.css +4 -0
  45. package/themes/everforest-light.css +136 -0
  46. package/themes/geist.css +136 -0
  47. package/themes/gruvbox-light.css +136 -0
  48. package/themes/kanagawa-lotus.css +136 -0
  49. package/themes/md-preview.css +4 -0
  50. package/themes/mist.css +4 -0
  51. package/themes/nord.css +134 -0
  52. package/themes/one-dark.css +135 -0
  53. package/themes/paper.css +16 -12
  54. package/themes/rose-pine-dawn.css +136 -0
  55. package/themes/sakura.css +4 -0
  56. package/themes/solarized-light.css +135 -0
  57. package/themes/tokyo-night.css +144 -0
  58. package/themes/white.css +4 -0
  59. package/web/dist/assets/{TerminalPanel-GtDQ1h85.js → TerminalPanel-C1A23aI-.js} +1 -1
  60. package/web/dist/assets/index-B48QWf0I.js +364 -0
  61. package/web/dist/assets/index-DGL5OInG.css +1 -0
  62. package/web/dist/index.html +2 -2
  63. package/web/dist/assets/index-CdsKltOS.css +0 -1
  64. package/web/dist/assets/index-OoULNF70.js +0 -363
@@ -0,0 +1,144 @@
1
+ /* theme-name: Catppuccin */
2
+ /* theme-name-en: Catppuccin Mocha */
3
+ /* theme-group: classic */
4
+ :root {
5
+ color-scheme: dark;
6
+ --bg: #1e1e2e;
7
+ --bg-elev: #24273a;
8
+ --bg-elev2: #313244;
9
+ --border: #45475a;
10
+ --border-soft: #363a4f;
11
+ --text: #cdd6f4;
12
+ --text-dim: #a6adc8;
13
+ --text-faint: #6c7086;
14
+ --accent: #89b4fa;
15
+ --accent-soft: rgba(137, 180, 250, 0.14);
16
+ --green: #a6e3a1;
17
+ --green-soft: rgba(166, 227, 161, 0.12);
18
+ --red: #f38ba8;
19
+ --red-soft: rgba(243, 139, 168, 0.12);
20
+ --amber: #f9e2af;
21
+ --blue: #3b82f6;
22
+ --blue-soft: rgba(59, 130, 246, 0.12);
23
+ --term-bg: #181825;
24
+ --term-fg: #cdd6f4;
25
+ --term-cursor: #f5e0dc;
26
+ --term-cursor-accent: #181825;
27
+ --term-selection: rgba(88, 91, 112, 0.4);
28
+ --term-black: #45475a;
29
+ --term-red: #f38ba8;
30
+ --term-green: #a6e3a1;
31
+ --term-yellow: #f9e2af;
32
+ --term-blue: #89b4fa;
33
+ --term-magenta: #cba6f7;
34
+ --term-cyan: #89dceb;
35
+ --term-white: #bac2de;
36
+ --term-bright-black: #585b70;
37
+ --term-bright-red: #f38ba8;
38
+ --term-bright-green: #a6e3a1;
39
+ --term-bright-yellow: #f9e2af;
40
+ --term-bright-blue: #89b4fa;
41
+ --term-bright-magenta: #cba6f7;
42
+ --term-bright-cyan: #89dceb;
43
+ --term-bright-white: #a6adc8;
44
+ --mono: "SF Mono", "JetBrains Mono", ui-monospace, Menlo, Consolas, monospace;
45
+ --mermaid-font-size: 12px;
46
+ --tooltip-bg: #313244;
47
+ --code-bg: #181825;
48
+ --code-text: #cdd6f4;
49
+ --code-border: var(--border-soft);
50
+ --code-pad: 8px 10px;
51
+ --card-body-pad: 4px 14px 12px;
52
+ --err-text: #f38ba8;
53
+ --red-text: #f38ba8;
54
+ --amber-text: #f9e2af;
55
+ --info-blue: #89dceb;
56
+ --link: #89b4fa;
57
+ --link-hover: #b4befe;
58
+ --link-soft: #89b4fa;
59
+ --md-strong: #cdd6f4;
60
+ --skill-blue: #89b4fa;
61
+ --plugin-purple: #b58cff;
62
+ --auth-green: #a6e3a1;
63
+ --scroll-thumb: #45475a;
64
+ --scroll-thumb-hover: #585b70;
65
+ --notice-err-bg: #401d23;
66
+ --notice-warn-bg: #38251f;
67
+ --notice-info-bg: #1b2544;
68
+ --notice-err-border: #ef4444;
69
+ --notice-warn-border: #f59e0b;
70
+ --notice-info-border: #3b82f6;
71
+ --send-blue: #89b4fa;
72
+ --send-blue-hover: #b4befe;
73
+ --stop-red: #ef4444;
74
+ --stop-red-hover: #dc2626;
75
+ --brand-grad-a: #89b4fa;
76
+ --brand-grad-b: #cba6f7;
77
+ --on-amber: #1a1a1a;
78
+ --search-active-fg: #1a1d26;
79
+ --switch-knob: #ffffff;
80
+ --bg-elev3: rgba(255, 255, 255, 0.06);
81
+ --sunken-bg: rgba(0, 0, 0, 0.15);
82
+ --glow-015: rgba(255, 255, 255, 0.015);
83
+ --glow-025: rgba(255, 255, 255, 0.025);
84
+ --glow-03: rgba(255, 255, 255, 0.03);
85
+ --glow-04: rgba(255, 255, 255, 0.04);
86
+ --glow-05: rgba(255, 255, 255, 0.05);
87
+ --glow-12: rgba(255, 255, 255, 0.12);
88
+ --glow-18: rgba(255, 255, 255, 0.18);
89
+ --glow-22: rgba(255, 255, 255, 0.22);
90
+ --glow-38: rgba(255, 255, 255, 0.38);
91
+ --control-fg: #a6adc8;
92
+ --control-bg: #313244;
93
+ --control-border: #45475a;
94
+ --bg-image: none;
95
+ --bg-image-dim: 0.78;
96
+ --bg-image-blur: 0px;
97
+ --wallpaper-panel-alpha: 100%;
98
+ --topbar-bg: #24273a;
99
+ --statusbar-bg: #181825;
100
+ --panel-bg: #24273a;
101
+ --card-bg: #24273a;
102
+ --chip-bg: #313244;
103
+ --msgs-bg: #1e1e2e;
104
+ --inputbox-bg: #313244;
105
+ --menu-bg: var(--bg-elev2);
106
+ }
107
+
108
+ /* ---- syntax highlighting (Catppuccin Mocha) ---- */
109
+ .hljs {
110
+ color: #cdd6f4;
111
+ background: #181825;
112
+ }
113
+ .hljs-doctag,
114
+ .hljs-keyword,
115
+ .hljs-meta .hljs-keyword {
116
+ color: #cba6f7;
117
+ }
118
+ .hljs-title,
119
+ .hljs-title.class_,
120
+ .hljs-title.function_ {
121
+ color: #89b4fa;
122
+ }
123
+ .hljs-attr,
124
+ .hljs-attribute,
125
+ .hljs-literal,
126
+ .hljs-number {
127
+ color: #fab387;
128
+ }
129
+ .hljs-string,
130
+ .hljs-regexp {
131
+ color: #a6e3a1;
132
+ }
133
+ .hljs-built_in,
134
+ .hljs-type {
135
+ color: #f9e2af;
136
+ }
137
+ .hljs-comment,
138
+ .hljs-code {
139
+ color: #6c7086;
140
+ }
141
+ .hljs-tag,
142
+ .hljs-name {
143
+ color: #89dceb;
144
+ }
@@ -0,0 +1,136 @@
1
+ /* theme-name: Codex 清白 */
2
+ /* theme-name-en: Codex Pure */
3
+ /* theme-group: classic */
4
+ :root {
5
+ color-scheme: light;
6
+ --bg: #ffffff;
7
+ --bg-elev: #f7f7f8;
8
+ --bg-elev2: #f0f0f2;
9
+ --border: #e5e5e5;
10
+ --border-soft: #ececf1;
11
+ --text: #0d0d0d;
12
+ --text-dim: #5d5d5d;
13
+ --text-faint: #6b6b7b;
14
+ --accent: #10a37f;
15
+ --accent-soft: rgba(16, 163, 127, 0.12);
16
+ --green: #10a37f;
17
+ --green-soft: rgba(16, 163, 127, 0.12);
18
+ --red: #ef4444;
19
+ --red-soft: rgba(239, 68, 68, 0.1);
20
+ --amber: #f59e0b;
21
+ --blue: #3b82f6;
22
+ --blue-soft: rgba(59, 130, 246, 0.12);
23
+ --term-bg: #f9f9fb;
24
+ --term-fg: #0d0d0d;
25
+ --term-cursor: #10a37f;
26
+ --term-cursor-accent: #ffffff;
27
+ --term-selection: rgba(16, 163, 127, 0.22);
28
+ --term-black: #0d0d0d;
29
+ --term-red: #ef4444;
30
+ --term-green: #10a37f;
31
+ --term-yellow: #f59e0b;
32
+ --term-blue: #2563eb;
33
+ --term-magenta: #8b5cf6;
34
+ --term-cyan: #06b6d4;
35
+ --term-white: #f7f7f8;
36
+ --term-bright-black: #5d5d5d;
37
+ --term-bright-red: #dc2626;
38
+ --term-bright-green: #059669;
39
+ --term-bright-yellow: #d97706;
40
+ --term-bright-blue: #1d4ed8;
41
+ --term-bright-magenta: #7c3aed;
42
+ --term-bright-cyan: #0891b2;
43
+ --term-bright-white: #ffffff;
44
+ --mono: "SF Mono", "JetBrains Mono", ui-monospace, Menlo, Consolas, monospace;
45
+ --mermaid-font-size: 12px;
46
+ --tooltip-bg: #ffffff;
47
+ --code-bg: #f4f4f5;
48
+ --code-text: #18181b;
49
+ --code-border: var(--border-soft);
50
+ --code-pad: 8px 10px;
51
+ --card-body-pad: 4px 14px 12px;
52
+ --err-text: #ef4444;
53
+ --red-text: #ef4444;
54
+ --amber-text: #d97706;
55
+ --info-blue: #2563eb;
56
+ --link: #10a37f;
57
+ --link-hover: #0e8c6d;
58
+ --link-soft: #10a37f;
59
+ --md-strong: #000000;
60
+ --skill-blue: #10a37f;
61
+ --plugin-purple: #b58cff;
62
+ --auth-green: #10a37f;
63
+ --scroll-thumb: #d4d4d8;
64
+ --scroll-thumb-hover: #a1a1aa;
65
+ --notice-err-bg: #401d23;
66
+ --notice-warn-bg: #38251f;
67
+ --notice-info-bg: #1b2544;
68
+ --notice-err-border: #ef4444;
69
+ --notice-warn-border: #f59e0b;
70
+ --notice-info-border: #3b82f6;
71
+ --send-blue: #10a37f;
72
+ --send-blue-hover: #0e8c6d;
73
+ --stop-red: #ef4444;
74
+ --stop-red-hover: #dc2626;
75
+ --brand-grad-a: #10a37f;
76
+ --brand-grad-b: #1a7f64;
77
+ --on-amber: #1a1a1a;
78
+ --search-active-fg: #1a1d26;
79
+ --switch-knob: #ffffff;
80
+ --bg-elev3: rgba(255, 255, 255, 0.06);
81
+ --sunken-bg: rgba(0, 0, 0, 0.15);
82
+ --glow-015: rgba(255, 255, 255, 0.015);
83
+ --glow-025: rgba(255, 255, 255, 0.025);
84
+ --glow-03: rgba(255, 255, 255, 0.03);
85
+ --glow-04: rgba(255, 255, 255, 0.04);
86
+ --glow-05: rgba(255, 255, 255, 0.05);
87
+ --glow-12: rgba(255, 255, 255, 0.12);
88
+ --glow-18: rgba(255, 255, 255, 0.18);
89
+ --glow-22: rgba(255, 255, 255, 0.22);
90
+ --glow-38: rgba(255, 255, 255, 0.38);
91
+ --control-fg: #52525b;
92
+ --control-bg: #f4f4f5;
93
+ --control-border: #e4e4e7;
94
+ --bg-image: none;
95
+ --bg-image-dim: 0.78;
96
+ --bg-image-blur: 0px;
97
+ --wallpaper-panel-alpha: 100%;
98
+ --topbar-bg: #ffffff;
99
+ --statusbar-bg: #f7f7f8;
100
+ --panel-bg: #ffffff;
101
+ --card-bg: #ffffff;
102
+ --chip-bg: #f4f4f5;
103
+ --msgs-bg: #ffffff;
104
+ --inputbox-bg: #f4f4f5;
105
+ --menu-bg: var(--bg-elev2);
106
+ }
107
+
108
+ /* ---- syntax highlighting (Codex Light) ---- */
109
+ .hljs {
110
+ color: #18181b;
111
+ background: #f4f4f5;
112
+ }
113
+ .hljs-keyword,
114
+ .hljs-meta .hljs-keyword {
115
+ color: #cf222e;
116
+ font-weight: 600;
117
+ }
118
+ .hljs-title,
119
+ .hljs-title.function_ {
120
+ color: #8250df;
121
+ }
122
+ .hljs-number,
123
+ .hljs-literal {
124
+ color: #0550ae;
125
+ }
126
+ .hljs-string {
127
+ color: #0a3069;
128
+ }
129
+ .hljs-built_in,
130
+ .hljs-type {
131
+ color: #953800;
132
+ }
133
+ .hljs-comment {
134
+ color: #6e7781;
135
+ font-style: italic;
136
+ }
@@ -17,6 +17,8 @@
17
17
  --red: #ff006e;
18
18
  --red-soft: rgba(255, 0, 110, 0.12);
19
19
  --amber: #ffd700;
20
+ --blue: #3b82f6;
21
+ --blue-soft: rgba(59, 130, 246, 0.12);
20
22
  --term-bg: #0a0a0f;
21
23
  --term-fg: #e6e6ff;
22
24
  --term-cursor: #00d4ff;
@@ -67,6 +69,8 @@
67
69
  --notice-info-border: #3b82f6;
68
70
  --send-blue: #00d4ff;
69
71
  --send-blue-hover: #00b8d4;
72
+ --stop-red: #ef4444;
73
+ --stop-red-hover: #dc2626;
70
74
  --brand-grad-a: #00d4ff;
71
75
  --brand-grad-b: #ff006e;
72
76
  --on-amber: #1a1a1a;
package/themes/dazzle.css CHANGED
@@ -17,6 +17,8 @@
17
17
  --red: #f43f5e;
18
18
  --red-soft: rgba(244, 63, 94, 0.12);
19
19
  --amber: #f59e0b;
20
+ --blue: #3b82f6;
21
+ --blue-soft: rgba(59, 130, 246, 0.12);
20
22
  --term-bg: #0b0b14;
21
23
  --term-fg: #e8e8f0;
22
24
  --term-cursor: #818cf8;
@@ -67,6 +69,8 @@
67
69
  --notice-info-border: #3b82f6;
68
70
  --send-blue: #818cf8;
69
71
  --send-blue-hover: #6366f1;
72
+ --stop-red: #ef4444;
73
+ --stop-red-hover: #dc2626;
70
74
  --brand-grad-a: #818cf8;
71
75
  --brand-grad-b: #c084fc;
72
76
  --on-amber: #1a1a1a;
@@ -0,0 +1,136 @@
1
+ /* theme-name: 森野浅绿 */
2
+ /* theme-name-en: Everforest Light */
3
+ /* theme-group: classic */
4
+ :root {
5
+ color-scheme: light;
6
+ --bg: #fdf6e3;
7
+ --bg-elev: #f4f0d9;
8
+ --bg-elev2: #efebd4;
9
+ --border: #e6e2cc;
10
+ --border-soft: #efebd4;
11
+ --text: #5c6a72;
12
+ --text-dim: #687361;
13
+ --text-faint: #6a7365;
14
+ --accent: #3a94c5;
15
+ --accent-soft: rgba(58, 148, 197, 0.14);
16
+ --green: #8da101;
17
+ --green-soft: rgba(141, 161, 1, 0.12);
18
+ --red: #f85552;
19
+ --red-soft: rgba(248, 85, 82, 0.1);
20
+ --amber: #dfa000;
21
+ --blue: #3b82f6;
22
+ --blue-soft: rgba(59, 130, 246, 0.12);
23
+ --term-bg: #fdf6e3;
24
+ --term-fg: #5c6a72;
25
+ --term-cursor: #3a94c5;
26
+ --term-cursor-accent: #fdf6e3;
27
+ --term-selection: rgba(58, 148, 197, 0.24);
28
+ --term-black: #5c6a72;
29
+ --term-red: #f85552;
30
+ --term-green: #8da101;
31
+ --term-yellow: #dfa000;
32
+ --term-blue: #3a94c5;
33
+ --term-magenta: #df69ba;
34
+ --term-cyan: #35a77c;
35
+ --term-white: #f4f0d9;
36
+ --term-bright-black: #7a8478;
37
+ --term-bright-red: #f85552;
38
+ --term-bright-green: #8da101;
39
+ --term-bright-yellow: #dfa000;
40
+ --term-bright-blue: #3a94c5;
41
+ --term-bright-magenta: #df69ba;
42
+ --term-bright-cyan: #35a77c;
43
+ --term-bright-white: #fdf6e3;
44
+ --mono: "SF Mono", "JetBrains Mono", ui-monospace, Menlo, Consolas, monospace;
45
+ --mermaid-font-size: 12px;
46
+ --tooltip-bg: #f4f0d9;
47
+ --code-bg: #f4f0d9;
48
+ --code-text: #5c6a72;
49
+ --code-border: var(--border-soft);
50
+ --code-pad: 8px 10px;
51
+ --card-body-pad: 4px 14px 12px;
52
+ --err-text: #c14c45;
53
+ --red-text: #c14c45;
54
+ --amber-text: #a97b00;
55
+ --info-blue: #3a94c5;
56
+ --link: #3a94c5;
57
+ --link-hover: #2e7aa6;
58
+ --link-soft: #3a94c5;
59
+ --md-strong: #4a5940;
60
+ --skill-blue: #3a94c5;
61
+ --plugin-purple: #b58cff;
62
+ --auth-green: #8da101;
63
+ --scroll-thumb: #d8d3bd;
64
+ --scroll-thumb-hover: #bdc3af;
65
+ --notice-err-bg: #401d23;
66
+ --notice-warn-bg: #38251f;
67
+ --notice-info-bg: #1b2544;
68
+ --notice-err-border: #ef4444;
69
+ --notice-warn-border: #f59e0b;
70
+ --notice-info-border: #3b82f6;
71
+ --send-blue: #3a94c5;
72
+ --send-blue-hover: #2e7aa6;
73
+ --stop-red: #ef4444;
74
+ --stop-red-hover: #dc2626;
75
+ --brand-grad-a: #8da101;
76
+ --brand-grad-b: #3a94c5;
77
+ --on-amber: #1a1a1a;
78
+ --search-active-fg: #1a1d26;
79
+ --switch-knob: #ffffff;
80
+ --bg-elev3: rgba(255, 255, 255, 0.06);
81
+ --sunken-bg: rgba(0, 0, 0, 0.15);
82
+ --glow-015: rgba(255, 255, 255, 0.015);
83
+ --glow-025: rgba(255, 255, 255, 0.025);
84
+ --glow-03: rgba(255, 255, 255, 0.03);
85
+ --glow-04: rgba(255, 255, 255, 0.04);
86
+ --glow-05: rgba(255, 255, 255, 0.05);
87
+ --glow-12: rgba(255, 255, 255, 0.12);
88
+ --glow-18: rgba(255, 255, 255, 0.18);
89
+ --glow-22: rgba(255, 255, 255, 0.22);
90
+ --glow-38: rgba(255, 255, 255, 0.38);
91
+ --control-fg: #7a8478;
92
+ --control-bg: #f4f0d9;
93
+ --control-border: #e6e2cc;
94
+ --bg-image: none;
95
+ --bg-image-dim: 0.78;
96
+ --bg-image-blur: 0px;
97
+ --wallpaper-panel-alpha: 100%;
98
+ --topbar-bg: #f4f0d9;
99
+ --statusbar-bg: #fdf6e3;
100
+ --panel-bg: #f4f0d9;
101
+ --card-bg: #f4f0d9;
102
+ --chip-bg: #efebd4;
103
+ --msgs-bg: #fdf6e3;
104
+ --inputbox-bg: #efebd4;
105
+ --menu-bg: var(--bg-elev2);
106
+ }
107
+
108
+ /* ---- syntax highlighting (Everforest Light) ---- */
109
+ .hljs {
110
+ color: #5c6a72;
111
+ background: #f4f0d9;
112
+ }
113
+ .hljs-keyword,
114
+ .hljs-meta .hljs-keyword {
115
+ color: #c14c45;
116
+ font-weight: 600;
117
+ }
118
+ .hljs-title,
119
+ .hljs-title.function_ {
120
+ color: #3a94c5;
121
+ }
122
+ .hljs-number,
123
+ .hljs-literal {
124
+ color: #df69ba;
125
+ }
126
+ .hljs-string {
127
+ color: #8da101;
128
+ }
129
+ .hljs-built_in,
130
+ .hljs-type {
131
+ color: #a97b00;
132
+ }
133
+ .hljs-comment {
134
+ color: #6d7768;
135
+ font-style: italic;
136
+ }
@@ -0,0 +1,136 @@
1
+ /* theme-name: 极客雪白 */
2
+ /* theme-name-en: Geist Light */
3
+ /* theme-group: classic */
4
+ :root {
5
+ color-scheme: light;
6
+ --bg: #ffffff;
7
+ --bg-elev: #fafafa;
8
+ --bg-elev2: #f4f4f5;
9
+ --border: #eaeaea;
10
+ --border-soft: #f2f2f2;
11
+ --text: #000000;
12
+ --text-dim: #666666;
13
+ --text-faint: #767676;
14
+ --accent: #0070f3;
15
+ --accent-soft: rgba(0, 112, 243, 0.12);
16
+ --green: #059669;
17
+ --green-soft: rgba(5, 150, 105, 0.12);
18
+ --red: #ee0000;
19
+ --red-soft: rgba(238, 0, 0, 0.1);
20
+ --amber: #f5a623;
21
+ --blue: #3b82f6;
22
+ --blue-soft: rgba(59, 130, 246, 0.12);
23
+ --term-bg: #fafafa;
24
+ --term-fg: #000000;
25
+ --term-cursor: #000000;
26
+ --term-cursor-accent: #ffffff;
27
+ --term-selection: rgba(0, 112, 243, 0.2);
28
+ --term-black: #000000;
29
+ --term-red: #ee0000;
30
+ --term-green: #059669;
31
+ --term-yellow: #f5a623;
32
+ --term-blue: #0070f3;
33
+ --term-magenta: #7928ca;
34
+ --term-cyan: #50e3c2;
35
+ --term-white: #fafafa;
36
+ --term-bright-black: #666666;
37
+ --term-bright-red: #ff0000;
38
+ --term-bright-green: #047857;
39
+ --term-bright-yellow: #f5a623;
40
+ --term-bright-blue: #0070f3;
41
+ --term-bright-magenta: #7928ca;
42
+ --term-bright-cyan: #50e3c2;
43
+ --term-bright-white: #ffffff;
44
+ --mono: "SF Mono", "JetBrains Mono", ui-monospace, Menlo, Consolas, monospace;
45
+ --mermaid-font-size: 12px;
46
+ --tooltip-bg: #ffffff;
47
+ --code-bg: #f7f7f8;
48
+ --code-text: #111111;
49
+ --code-border: var(--border-soft);
50
+ --code-pad: 8px 10px;
51
+ --card-body-pad: 4px 14px 12px;
52
+ --err-text: #ee0000;
53
+ --red-text: #ee0000;
54
+ --amber-text: #f5a623;
55
+ --info-blue: #0070f3;
56
+ --link: #0070f3;
57
+ --link-hover: #0051b3;
58
+ --link-soft: #0070f3;
59
+ --md-strong: #000000;
60
+ --skill-blue: #0070f3;
61
+ --plugin-purple: #b58cff;
62
+ --auth-green: #059669;
63
+ --scroll-thumb: #d4d4d4;
64
+ --scroll-thumb-hover: #a3a3a3;
65
+ --notice-err-bg: #401d23;
66
+ --notice-warn-bg: #38251f;
67
+ --notice-info-bg: #1b2544;
68
+ --notice-err-border: #ef4444;
69
+ --notice-warn-border: #f59e0b;
70
+ --notice-info-border: #3b82f6;
71
+ --send-blue: #000000;
72
+ --send-blue-hover: #333333;
73
+ --stop-red: #ef4444;
74
+ --stop-red-hover: #dc2626;
75
+ --brand-grad-a: #000000;
76
+ --brand-grad-b: #0070f3;
77
+ --on-amber: #1a1a1a;
78
+ --search-active-fg: #1a1d26;
79
+ --switch-knob: #ffffff;
80
+ --bg-elev3: rgba(255, 255, 255, 0.06);
81
+ --sunken-bg: rgba(0, 0, 0, 0.15);
82
+ --glow-015: rgba(255, 255, 255, 0.015);
83
+ --glow-025: rgba(255, 255, 255, 0.025);
84
+ --glow-03: rgba(255, 255, 255, 0.03);
85
+ --glow-04: rgba(255, 255, 255, 0.04);
86
+ --glow-05: rgba(255, 255, 255, 0.05);
87
+ --glow-12: rgba(255, 255, 255, 0.12);
88
+ --glow-18: rgba(255, 255, 255, 0.18);
89
+ --glow-22: rgba(255, 255, 255, 0.22);
90
+ --glow-38: rgba(255, 255, 255, 0.38);
91
+ --control-fg: #444444;
92
+ --control-bg: #fafafa;
93
+ --control-border: #eaeaea;
94
+ --bg-image: none;
95
+ --bg-image-dim: 0.78;
96
+ --bg-image-blur: 0px;
97
+ --wallpaper-panel-alpha: 100%;
98
+ --topbar-bg: #ffffff;
99
+ --statusbar-bg: #fafafa;
100
+ --panel-bg: #ffffff;
101
+ --card-bg: #ffffff;
102
+ --chip-bg: #f4f4f5;
103
+ --msgs-bg: #ffffff;
104
+ --inputbox-bg: #f4f4f5;
105
+ --menu-bg: var(--bg-elev2);
106
+ }
107
+
108
+ /* ---- syntax highlighting (Geist Light) ---- */
109
+ .hljs {
110
+ color: #111111;
111
+ background: #f7f7f8;
112
+ }
113
+ .hljs-keyword,
114
+ .hljs-meta .hljs-keyword {
115
+ color: #e00000;
116
+ font-weight: 600;
117
+ }
118
+ .hljs-title,
119
+ .hljs-title.function_ {
120
+ color: #0070f3;
121
+ }
122
+ .hljs-number,
123
+ .hljs-literal {
124
+ color: #7928ca;
125
+ }
126
+ .hljs-string {
127
+ color: #0284c7;
128
+ }
129
+ .hljs-built_in,
130
+ .hljs-type {
131
+ color: #f5a623;
132
+ }
133
+ .hljs-comment {
134
+ color: #888888;
135
+ font-style: italic;
136
+ }
@@ -0,0 +1,136 @@
1
+ /* theme-name: 格鲁夫沙 */
2
+ /* theme-name-en: Gruvbox Light */
3
+ /* theme-group: classic */
4
+ :root {
5
+ color-scheme: light;
6
+ --bg: #fbf1c7;
7
+ --bg-elev: #ebdbb2;
8
+ --bg-elev2: #d5c4a1;
9
+ --border: #d5c4a1;
10
+ --border-soft: #ebdbb2;
11
+ --text: #3c3836;
12
+ --text-dim: #504945;
13
+ --text-faint: #665c54;
14
+ --accent: #af3a03;
15
+ --accent-soft: rgba(175, 58, 3, 0.14);
16
+ --green: #79740e;
17
+ --green-soft: rgba(121, 116, 14, 0.12);
18
+ --red: #9d0006;
19
+ --red-soft: rgba(157, 0, 6, 0.1);
20
+ --amber: #b57614;
21
+ --blue: #3b82f6;
22
+ --blue-soft: rgba(59, 130, 246, 0.12);
23
+ --term-bg: #fbf1c7;
24
+ --term-fg: #3c3836;
25
+ --term-cursor: #af3a03;
26
+ --term-cursor-accent: #fbf1c7;
27
+ --term-selection: rgba(175, 58, 3, 0.24);
28
+ --term-black: #3c3836;
29
+ --term-red: #9d0006;
30
+ --term-green: #79740e;
31
+ --term-yellow: #b57614;
32
+ --term-blue: #076678;
33
+ --term-magenta: #8f3f71;
34
+ --term-cyan: #427b58;
35
+ --term-white: #ebdbb2;
36
+ --term-bright-black: #665c54;
37
+ --term-bright-red: #9d0006;
38
+ --term-bright-green: #79740e;
39
+ --term-bright-yellow: #b57614;
40
+ --term-bright-blue: #076678;
41
+ --term-bright-magenta: #8f3f71;
42
+ --term-bright-cyan: #427b58;
43
+ --term-bright-white: #fbf1c7;
44
+ --mono: "SF Mono", "JetBrains Mono", ui-monospace, Menlo, Consolas, monospace;
45
+ --mermaid-font-size: 12px;
46
+ --tooltip-bg: #ebdbb2;
47
+ --code-bg: #ebdbb2;
48
+ --code-text: #3c3836;
49
+ --code-border: var(--border-soft);
50
+ --code-pad: 8px 10px;
51
+ --card-body-pad: 4px 14px 12px;
52
+ --err-text: #9d0006;
53
+ --red-text: #9d0006;
54
+ --amber-text: #b57614;
55
+ --info-blue: #076678;
56
+ --link: #076678;
57
+ --link-hover: #055a68;
58
+ --link-soft: #076678;
59
+ --md-strong: #282828;
60
+ --skill-blue: #076678;
61
+ --plugin-purple: #b58cff;
62
+ --auth-green: #79740e;
63
+ --scroll-thumb: #d5c4a1;
64
+ --scroll-thumb-hover: #bdae93;
65
+ --notice-err-bg: #401d23;
66
+ --notice-warn-bg: #38251f;
67
+ --notice-info-bg: #1b2544;
68
+ --notice-err-border: #ef4444;
69
+ --notice-warn-border: #f59e0b;
70
+ --notice-info-border: #3b82f6;
71
+ --send-blue: #9d0006;
72
+ --send-blue-hover: #af3a03;
73
+ --stop-red: #ef4444;
74
+ --stop-red-hover: #dc2626;
75
+ --brand-grad-a: #af3a03;
76
+ --brand-grad-b: #b57614;
77
+ --on-amber: #1a1a1a;
78
+ --search-active-fg: #1a1d26;
79
+ --switch-knob: #ffffff;
80
+ --bg-elev3: rgba(255, 255, 255, 0.06);
81
+ --sunken-bg: rgba(0, 0, 0, 0.15);
82
+ --glow-015: rgba(255, 255, 255, 0.015);
83
+ --glow-025: rgba(255, 255, 255, 0.025);
84
+ --glow-03: rgba(255, 255, 255, 0.03);
85
+ --glow-04: rgba(255, 255, 255, 0.04);
86
+ --glow-05: rgba(255, 255, 255, 0.05);
87
+ --glow-12: rgba(255, 255, 255, 0.12);
88
+ --glow-18: rgba(255, 255, 255, 0.18);
89
+ --glow-22: rgba(255, 255, 255, 0.22);
90
+ --glow-38: rgba(255, 255, 255, 0.38);
91
+ --control-fg: #504945;
92
+ --control-bg: #ebdbb2;
93
+ --control-border: #d5c4a1;
94
+ --bg-image: none;
95
+ --bg-image-dim: 0.78;
96
+ --bg-image-blur: 0px;
97
+ --wallpaper-panel-alpha: 100%;
98
+ --topbar-bg: #ebdbb2;
99
+ --statusbar-bg: #fbf1c7;
100
+ --panel-bg: #ebdbb2;
101
+ --card-bg: #ebdbb2;
102
+ --chip-bg: #d5c4a1;
103
+ --msgs-bg: #fbf1c7;
104
+ --inputbox-bg: #d5c4a1;
105
+ --menu-bg: var(--bg-elev2);
106
+ }
107
+
108
+ /* ---- syntax highlighting (Gruvbox Light) ---- */
109
+ .hljs {
110
+ color: #3c3836;
111
+ background: #ebdbb2;
112
+ }
113
+ .hljs-keyword,
114
+ .hljs-meta .hljs-keyword {
115
+ color: #9d0006;
116
+ font-weight: 600;
117
+ }
118
+ .hljs-title,
119
+ .hljs-title.function_ {
120
+ color: #076678;
121
+ }
122
+ .hljs-number,
123
+ .hljs-literal {
124
+ color: #8f3f71;
125
+ }
126
+ .hljs-string {
127
+ color: #79740e;
128
+ }
129
+ .hljs-built_in,
130
+ .hljs-type {
131
+ color: #b57614;
132
+ }
133
+ .hljs-comment {
134
+ color: #7f7360;
135
+ font-style: italic;
136
+ }