pi-web-ui 0.64.0 → 0.64.2

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 (45) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +504 -504
  3. package/README.zh-CN.md +427 -427
  4. package/bin/pi-web-ui.mjs +1809 -1809
  5. package/deploy/com.xingshuyin.pi-web-ui.plist +48 -48
  6. package/deploy/nginx-subpath.conf +88 -88
  7. package/deploy/pi-web-ui-task.xml +54 -54
  8. package/deploy/pi-web-ui.service +31 -31
  9. package/dist/server/agent-service.js +45 -22
  10. package/dist/server/attachments.js +16 -11
  11. package/dist/server/dsh/dsh-agent-service.js +27 -7
  12. package/dist/server/dsh/runtime/cordis.yml +1 -1
  13. package/dist/server/dsh/runtime/goal-rpc.mjs +645 -645
  14. package/dist/server/dsh/runtime/launcher.mjs +164 -164
  15. package/dist/server/dsh/runtime/override.patch.yml +71 -71
  16. package/dist/server/dsh/runtime/runtime-root.mjs +86 -86
  17. package/dist/server/files-service.js +235 -43
  18. package/dist/server/goal-service.js +4 -1
  19. package/dist/server/index.js +48 -13
  20. package/dist/server/marker-service.js +8 -3
  21. package/dist/server/markers/builtins/rename.js +3 -3
  22. package/dist/server/model-admin.js +12 -6
  23. package/dist/server/plugins.js +4 -4
  24. package/dist/server/slash-commands.js +3 -0
  25. package/dist/server/terminals.js +25 -15
  26. package/dist/server/vision-bridge.js +9 -9
  27. package/dist/server/webui-context.js +2 -2
  28. package/extensions/webui.ts +190 -190
  29. package/package.json +109 -109
  30. package/themes/cyberpunk.css +81 -81
  31. package/themes/dazzle.css +81 -81
  32. package/themes/md-preview.css +98 -98
  33. package/themes/white.css +160 -160
  34. package/web/dist/assets/TerminalPanel-BXISCcrQ.js +6 -0
  35. package/web/dist/assets/index-BxuvIAJQ.js +326 -0
  36. package/web/dist/assets/{index-CMgDryBL.css → index-DVnuQrK5.css} +1 -1
  37. package/web/dist/favicon.svg +8 -8
  38. package/web/dist/index.html +21 -21
  39. package/web/dist/manifest.webmanifest +50 -50
  40. package/web/dist/sw.js +126 -126
  41. package/web/public/favicon.svg +8 -8
  42. package/web/public/manifest.webmanifest +50 -50
  43. package/web/public/sw.js +126 -126
  44. package/web/dist/assets/TerminalPanel-DNkAT34Z.js +0 -2
  45. package/web/dist/assets/index-_1vyEugI.js +0 -326
package/package.json CHANGED
@@ -1,109 +1,109 @@
1
- {
2
- "name": "pi-web-ui",
3
- "version": "0.64.0",
4
- "description": "Web chat interface for the pi coding agent, powered by the pi SDK (@earendil-works/pi-coding-agent) — one-command run, Docker/systemd/launchd deployable",
5
- "license": "MIT",
6
- "author": {
7
- "name": "xingshuyin",
8
- "email": "xingshuyin@users.noreply.github.com"
9
- },
10
- "type": "module",
11
- "bin": {
12
- "pi-web-ui": "bin/pi-web-ui.mjs"
13
- },
14
- "main": "bin/pi-web-ui.mjs",
15
- "files": [
16
- "bin/",
17
- "dist/",
18
- "web/dist/",
19
- "web/public/",
20
- "themes/",
21
- "deploy/",
22
- "extensions/",
23
- "README.md",
24
- "LICENSE"
25
- ],
26
- "keywords": [
27
- "pi",
28
- "pi-package",
29
- "coding-agent",
30
- "ai",
31
- "chat",
32
- "web-ui",
33
- "terminal",
34
- "llm"
35
- ],
36
- "repository": {
37
- "type": "git",
38
- "url": "git+https://github.com/xing-shuyin/pi-web-ui.git"
39
- },
40
- "pi": {
41
- "extensions": [
42
- "./extensions"
43
- ]
44
- },
45
- "engines": {
46
- "node": ">=22.19.0"
47
- },
48
- "scripts": {
49
- "prepublishOnly": "npm run build",
50
- "dev": "concurrently -k -n server,web -c blue,green \"npm:dev:server\" \"npm:dev:web\"",
51
- "dev:server": "cross-env PI_WEB_PORT=8788 PI_WEB_ALLOW_ORIGINS=http://localhost:5173,http://127.0.0.1:5173 node --watch --import tsx server/index.ts",
52
- "dev:web": "vite --config web/vite.config.ts",
53
- "build": "npm run build:web && npm run build:server && npm run build:dsh-runtime",
54
- "build:web": "vite build --config web/vite.config.ts",
55
- "build:server": "tsc -p tsconfig.server.json",
56
- "build:dsh-runtime": "node scripts/copy-dsh-runtime.mjs",
57
- "typecheck": "tsc -p tsconfig.server.json --noEmit && tsc -p web/tsconfig.json --noEmit && tsc -p tsconfig.tests.json --noEmit",
58
- "test": "vitest run",
59
- "test:unit": "vitest run",
60
- "test:smoke": "node tests/run-smoke.mjs",
61
- "check:protocol": "node scripts/check-protocol-sync.mjs",
62
- "test:freeze": "node tests/freeze-test.mjs",
63
- "start": "node dist/server/index.js",
64
- "format": "prettier --write server/ web/src/ extensions/ scripts/ bin/ tests/*.mjs tests/unit/ *.mjs",
65
- "format:check": "prettier --check server/ web/src/ extensions/ scripts/ bin/ tests/*.mjs tests/unit/ *.mjs",
66
- "lint": "oxlint server/ web/src/ extensions/ scripts/",
67
- "lint:fix": "oxlint --fix server/ web/src/ extensions/ scripts/"
68
- },
69
- "dependencies": {
70
- "@deepseek-ai/dsh-sdk-jsonrpc-server": "^0.1.1-rc.2",
71
- "@deepseek-ai/dsh-sdk-protocol": "^0.1.1-rc.2",
72
- "@earendil-works/pi-coding-agent": "^0.84.4",
73
- "@xterm/addon-fit": "^0.11.0",
74
- "@xterm/xterm": "^6.0.0",
75
- "compression": "^1.8.1",
76
- "express": "^4.21.2",
77
- "highlight.js": "^11.10.0",
78
- "node-pty": "^1.1.0",
79
- "react": "^18.3.1",
80
- "react-dom": "^18.3.1",
81
- "react-icons": "^5.7.0",
82
- "react-markdown": "^9.0.1",
83
- "rehype-highlight": "^7.0.1",
84
- "remark-gfm": "^4.0.0",
85
- "typebox": "^1.3.14",
86
- "ws": "^8.18.0"
87
- },
88
- "devDependencies": {
89
- "@types/compression": "^1.8.1",
90
- "@types/express": "^4.17.21",
91
- "@types/node": "^22.10.0",
92
- "@types/react": "^18.3.12",
93
- "@types/react-dom": "^18.3.1",
94
- "@types/ws": "^8.5.13",
95
- "@vitejs/plugin-react": "^4.3.4",
96
- "concurrently": "^9.1.0",
97
- "cross-env": "^10.1.0",
98
- "oxlint": "^1.81.0",
99
- "playwright-core": "^1.62.1",
100
- "prettier": "^3.9.6",
101
- "tsx": "^4.19.2",
102
- "typescript": "^5.7.2",
103
- "vite": "^6.0.3",
104
- "vitest": "^4.1.11"
105
- },
106
- "allowScripts": {
107
- "node-pty@1.1.0": true
108
- }
109
- }
1
+ {
2
+ "name": "pi-web-ui",
3
+ "version": "0.64.2",
4
+ "description": "Web chat interface for the pi coding agent, powered by the pi SDK (@earendil-works/pi-coding-agent) — one-command run, Docker/systemd/launchd deployable",
5
+ "license": "MIT",
6
+ "author": {
7
+ "name": "xingshuyin",
8
+ "email": "xingshuyin@users.noreply.github.com"
9
+ },
10
+ "type": "module",
11
+ "bin": {
12
+ "pi-web-ui": "bin/pi-web-ui.mjs"
13
+ },
14
+ "main": "bin/pi-web-ui.mjs",
15
+ "files": [
16
+ "bin/",
17
+ "dist/",
18
+ "web/dist/",
19
+ "web/public/",
20
+ "themes/",
21
+ "deploy/",
22
+ "extensions/",
23
+ "README.md",
24
+ "LICENSE"
25
+ ],
26
+ "keywords": [
27
+ "pi",
28
+ "pi-package",
29
+ "coding-agent",
30
+ "ai",
31
+ "chat",
32
+ "web-ui",
33
+ "terminal",
34
+ "llm"
35
+ ],
36
+ "repository": {
37
+ "type": "git",
38
+ "url": "git+https://github.com/xing-shuyin/pi-web-ui.git"
39
+ },
40
+ "pi": {
41
+ "extensions": [
42
+ "./extensions"
43
+ ]
44
+ },
45
+ "engines": {
46
+ "node": ">=22.19.0"
47
+ },
48
+ "scripts": {
49
+ "prepublishOnly": "npm run build",
50
+ "dev": "concurrently -k -n server,web -c blue,green \"npm:dev:server\" \"npm:dev:web\"",
51
+ "dev:server": "cross-env PI_WEB_PORT=8788 PI_WEB_ALLOW_ORIGINS=http://localhost:5173,http://127.0.0.1:5173 node --watch --import tsx server/index.ts",
52
+ "dev:web": "vite --config web/vite.config.ts",
53
+ "build": "npm run build:web && npm run build:server && npm run build:dsh-runtime",
54
+ "build:web": "vite build --config web/vite.config.ts",
55
+ "build:server": "tsc -p tsconfig.server.json",
56
+ "build:dsh-runtime": "node scripts/copy-dsh-runtime.mjs",
57
+ "typecheck": "tsc -p tsconfig.server.json --noEmit && tsc -p web/tsconfig.json --noEmit && tsc -p tsconfig.tests.json --noEmit",
58
+ "test": "vitest run",
59
+ "test:unit": "vitest run",
60
+ "test:smoke": "node tests/run-smoke.mjs",
61
+ "check:protocol": "node scripts/check-protocol-sync.mjs",
62
+ "test:freeze": "node tests/freeze-test.mjs",
63
+ "start": "node dist/server/index.js",
64
+ "format": "prettier --write server/ web/src/ extensions/ scripts/ bin/ tests/*.mjs tests/unit/ *.mjs",
65
+ "format:check": "prettier --check server/ web/src/ extensions/ scripts/ bin/ tests/*.mjs tests/unit/ *.mjs",
66
+ "lint": "oxlint server/ web/src/ extensions/ scripts/",
67
+ "lint:fix": "oxlint --fix server/ web/src/ extensions/ scripts/"
68
+ },
69
+ "dependencies": {
70
+ "@deepseek-ai/dsh-sdk-jsonrpc-server": "^0.1.1-rc.2",
71
+ "@deepseek-ai/dsh-sdk-protocol": "^0.1.1-rc.2",
72
+ "@earendil-works/pi-coding-agent": "^0.84.4",
73
+ "@xterm/addon-fit": "^0.11.0",
74
+ "@xterm/xterm": "^6.0.0",
75
+ "compression": "^1.8.1",
76
+ "express": "^4.21.2",
77
+ "highlight.js": "^11.10.0",
78
+ "node-pty": "^1.1.0",
79
+ "react": "^18.3.1",
80
+ "react-dom": "^18.3.1",
81
+ "react-icons": "^5.7.0",
82
+ "react-markdown": "^9.0.1",
83
+ "rehype-highlight": "^7.0.1",
84
+ "remark-gfm": "^4.0.0",
85
+ "typebox": "^1.3.14",
86
+ "ws": "^8.18.0"
87
+ },
88
+ "devDependencies": {
89
+ "@types/compression": "^1.8.1",
90
+ "@types/express": "^4.17.21",
91
+ "@types/node": "^22.10.0",
92
+ "@types/react": "^18.3.12",
93
+ "@types/react-dom": "^18.3.1",
94
+ "@types/ws": "^8.5.13",
95
+ "@vitejs/plugin-react": "^4.3.4",
96
+ "concurrently": "^9.1.0",
97
+ "cross-env": "^10.1.0",
98
+ "oxlint": "^1.81.0",
99
+ "playwright-core": "^1.62.1",
100
+ "prettier": "^3.9.6",
101
+ "tsx": "^4.19.2",
102
+ "typescript": "^5.7.2",
103
+ "vite": "^6.0.3",
104
+ "vitest": "^4.1.11"
105
+ },
106
+ "allowScripts": {
107
+ "node-pty@1.1.0": true
108
+ }
109
+ }
@@ -1,81 +1,81 @@
1
- /* theme-name: 赛博朋克 */
2
- /* theme-name-en: Cyberpunk */
3
- :root {
4
- color-scheme: dark;
5
- --bg: #0a0a0f;
6
- --bg-elev: #12121e;
7
- --bg-elev2: #1a1a2e;
8
- --border: #2b2b4a;
9
- --border-soft: #20203a;
10
- --text: #e6e6ff;
11
- --text-dim: #9a9ac4;
12
- --text-faint: #6a6a8e;
13
- --accent: #00d4ff;
14
- --accent-soft: rgba(0, 212, 255, 0.14);
15
- --green: #00ff41;
16
- --green-soft: rgba(0, 255, 65, 0.12);
17
- --red: #ff006e;
18
- --red-soft: rgba(255, 0, 110, 0.12);
19
- --amber: #ffd700;
20
- --term-bg: #0a0a0f;
21
- --term-fg: #e6e6ff;
22
- --term-cursor: #00d4ff;
23
- --term-cursor-accent: #0a0a0f;
24
- --term-selection: rgba(0, 212, 255, 0.35);
25
- --term-black: #1a1a2e;
26
- --term-red: #ff006e;
27
- --term-green: #00ff41;
28
- --term-yellow: #ffd700;
29
- --term-blue: #00d4ff;
30
- --term-magenta: #ff00ff;
31
- --term-cyan: #00f5ff;
32
- --term-white: #e6e6ff;
33
- --term-bright-black: #6a6a8e;
34
- --term-bright-red: #ff006e;
35
- --term-bright-green: #00ff41;
36
- --term-bright-yellow: #ffd700;
37
- --term-bright-blue: #00d4ff;
38
- --term-bright-magenta: #ff00ff;
39
- --term-bright-cyan: #00f5ff;
40
- --term-bright-white: #ffffff;
41
- --mono: "SF Mono", "JetBrains Mono", ui-monospace, Menlo, Consolas, monospace;
42
- --tooltip-bg: #232733;
43
- --code-bg: #0b0d12;
44
- --code-text: #c9d1d9;
45
- --err-text: #f0a5a5;
46
- --red-text: #fca5a5;
47
- --amber-text: #fcd34d;
48
- --info-blue: #00d4ff;
49
- --link: #a78bfa;
50
- --link-hover: #c4b5fd;
51
- --link-soft: #ddd6fe;
52
- --md-strong: #f3f4f6;
53
- --skill-blue: #5eb3ff;
54
- --plugin-purple: #ff00ff;
55
- --auth-green: #6ee7a0;
56
- --scroll-thumb: #2a2f3d;
57
- --scroll-thumb-hover: #3a4152;
58
- --notice-err-bg: #401d23;
59
- --notice-warn-bg: #38251f;
60
- --notice-info-bg: #1b2544;
61
- --notice-err-border: #ef4444;
62
- --notice-warn-border: #f59e0b;
63
- --notice-info-border: #3b82f6;
64
- --send-blue: #00d4ff;
65
- --send-blue-hover: #00b8d4;
66
- --brand-grad-a: #00d4ff;
67
- --brand-grad-b: #ff006e;
68
- --on-amber: #1a1a1a;
69
- --search-active-fg: #1a1d26;
70
- --switch-knob: #ffffff;
71
- --bg-elev3: rgba(255, 255, 255, 0.06);
72
- --glow-015: rgba(255, 255, 255, 0.015);
73
- --glow-025: rgba(255, 255, 255, 0.025);
74
- --glow-03: rgba(255, 255, 255, 0.03);
75
- --glow-04: rgba(255, 255, 255, 0.04);
76
- --glow-05: rgba(255, 255, 255, 0.05);
77
- --glow-12: rgba(255, 255, 255, 0.12);
78
- --glow-18: rgba(255, 255, 255, 0.18);
79
- --glow-22: rgba(255, 255, 255, 0.22);
80
- --glow-38: rgba(255, 255, 255, 0.38);
81
- }
1
+ /* theme-name: 赛博朋克 */
2
+ /* theme-name-en: Cyberpunk */
3
+ :root {
4
+ color-scheme: dark;
5
+ --bg: #0a0a0f;
6
+ --bg-elev: #12121e;
7
+ --bg-elev2: #1a1a2e;
8
+ --border: #2b2b4a;
9
+ --border-soft: #20203a;
10
+ --text: #e6e6ff;
11
+ --text-dim: #9a9ac4;
12
+ --text-faint: #6a6a8e;
13
+ --accent: #00d4ff;
14
+ --accent-soft: rgba(0, 212, 255, 0.14);
15
+ --green: #00ff41;
16
+ --green-soft: rgba(0, 255, 65, 0.12);
17
+ --red: #ff006e;
18
+ --red-soft: rgba(255, 0, 110, 0.12);
19
+ --amber: #ffd700;
20
+ --term-bg: #0a0a0f;
21
+ --term-fg: #e6e6ff;
22
+ --term-cursor: #00d4ff;
23
+ --term-cursor-accent: #0a0a0f;
24
+ --term-selection: rgba(0, 212, 255, 0.35);
25
+ --term-black: #1a1a2e;
26
+ --term-red: #ff006e;
27
+ --term-green: #00ff41;
28
+ --term-yellow: #ffd700;
29
+ --term-blue: #00d4ff;
30
+ --term-magenta: #ff00ff;
31
+ --term-cyan: #00f5ff;
32
+ --term-white: #e6e6ff;
33
+ --term-bright-black: #6a6a8e;
34
+ --term-bright-red: #ff006e;
35
+ --term-bright-green: #00ff41;
36
+ --term-bright-yellow: #ffd700;
37
+ --term-bright-blue: #00d4ff;
38
+ --term-bright-magenta: #ff00ff;
39
+ --term-bright-cyan: #00f5ff;
40
+ --term-bright-white: #ffffff;
41
+ --mono: "SF Mono", "JetBrains Mono", ui-monospace, Menlo, Consolas, monospace;
42
+ --tooltip-bg: #232733;
43
+ --code-bg: #0b0d12;
44
+ --code-text: #c9d1d9;
45
+ --err-text: #f0a5a5;
46
+ --red-text: #fca5a5;
47
+ --amber-text: #fcd34d;
48
+ --info-blue: #00d4ff;
49
+ --link: #a78bfa;
50
+ --link-hover: #c4b5fd;
51
+ --link-soft: #ddd6fe;
52
+ --md-strong: #f3f4f6;
53
+ --skill-blue: #5eb3ff;
54
+ --plugin-purple: #ff00ff;
55
+ --auth-green: #6ee7a0;
56
+ --scroll-thumb: #2a2f3d;
57
+ --scroll-thumb-hover: #3a4152;
58
+ --notice-err-bg: #401d23;
59
+ --notice-warn-bg: #38251f;
60
+ --notice-info-bg: #1b2544;
61
+ --notice-err-border: #ef4444;
62
+ --notice-warn-border: #f59e0b;
63
+ --notice-info-border: #3b82f6;
64
+ --send-blue: #00d4ff;
65
+ --send-blue-hover: #00b8d4;
66
+ --brand-grad-a: #00d4ff;
67
+ --brand-grad-b: #ff006e;
68
+ --on-amber: #1a1a1a;
69
+ --search-active-fg: #1a1d26;
70
+ --switch-knob: #ffffff;
71
+ --bg-elev3: rgba(255, 255, 255, 0.06);
72
+ --glow-015: rgba(255, 255, 255, 0.015);
73
+ --glow-025: rgba(255, 255, 255, 0.025);
74
+ --glow-03: rgba(255, 255, 255, 0.03);
75
+ --glow-04: rgba(255, 255, 255, 0.04);
76
+ --glow-05: rgba(255, 255, 255, 0.05);
77
+ --glow-12: rgba(255, 255, 255, 0.12);
78
+ --glow-18: rgba(255, 255, 255, 0.18);
79
+ --glow-22: rgba(255, 255, 255, 0.22);
80
+ --glow-38: rgba(255, 255, 255, 0.38);
81
+ }
package/themes/dazzle.css CHANGED
@@ -1,81 +1,81 @@
1
- /* theme-name: 炫彩 */
2
- /* theme-name-en: Dazzle */
3
- :root {
4
- color-scheme: dark;
5
- --bg: #0b0b14;
6
- --bg-elev: #13131e;
7
- --bg-elev2: #1b1b2e;
8
- --border: #2a2a48;
9
- --border-soft: #1f1f38;
10
- --text: #e8e8f0;
11
- --text-dim: #a0a0c0;
12
- --text-faint: #707090;
13
- --accent: #818cf8;
14
- --accent-soft: rgba(129, 140, 248, 0.14);
15
- --green: #34d399;
16
- --green-soft: rgba(52, 211, 153, 0.12);
17
- --red: #f43f5e;
18
- --red-soft: rgba(244, 63, 94, 0.12);
19
- --amber: #f59e0b;
20
- --term-bg: #0b0b14;
21
- --term-fg: #e8e8f0;
22
- --term-cursor: #818cf8;
23
- --term-cursor-accent: #0b0b14;
24
- --term-selection: rgba(129, 140, 248, 0.35);
25
- --term-black: #1b1b2e;
26
- --term-red: #f43f5e;
27
- --term-green: #34d399;
28
- --term-yellow: #f59e0b;
29
- --term-blue: #60a5fa;
30
- --term-magenta: #c084fc;
31
- --term-cyan: #22d3ee;
32
- --term-white: #e8e8f0;
33
- --term-bright-black: #707090;
34
- --term-bright-red: #f43f5e;
35
- --term-bright-green: #34d399;
36
- --term-bright-yellow: #f59e0b;
37
- --term-bright-blue: #60a5fa;
38
- --term-bright-magenta: #c084fc;
39
- --term-bright-cyan: #22d3ee;
40
- --term-bright-white: #ffffff;
41
- --mono: "SF Mono", "JetBrains Mono", ui-monospace, Menlo, Consolas, monospace;
42
- --tooltip-bg: #232733;
43
- --code-bg: #0b0d12;
44
- --code-text: #c9d1d9;
45
- --err-text: #f0a5a5;
46
- --red-text: #fca5a5;
47
- --amber-text: #fcd34d;
48
- --info-blue: #60a5fa;
49
- --link: #a78bfa;
50
- --link-hover: #c4b5fd;
51
- --link-soft: #ddd6fe;
52
- --md-strong: #f3f4f6;
53
- --skill-blue: #5eb3ff;
54
- --plugin-purple: #b58cff;
55
- --auth-green: #6ee7a0;
56
- --scroll-thumb: #2a2f3d;
57
- --scroll-thumb-hover: #3a4152;
58
- --notice-err-bg: #401d23;
59
- --notice-warn-bg: #38251f;
60
- --notice-info-bg: #1b2544;
61
- --notice-err-border: #ef4444;
62
- --notice-warn-border: #f59e0b;
63
- --notice-info-border: #3b82f6;
64
- --send-blue: #818cf8;
65
- --send-blue-hover: #6366f1;
66
- --brand-grad-a: #818cf8;
67
- --brand-grad-b: #c084fc;
68
- --on-amber: #1a1a1a;
69
- --search-active-fg: #1a1d26;
70
- --switch-knob: #ffffff;
71
- --bg-elev3: rgba(255, 255, 255, 0.06);
72
- --glow-015: rgba(255, 255, 255, 0.015);
73
- --glow-025: rgba(255, 255, 255, 0.025);
74
- --glow-03: rgba(255, 255, 255, 0.03);
75
- --glow-04: rgba(255, 255, 255, 0.04);
76
- --glow-05: rgba(255, 255, 255, 0.05);
77
- --glow-12: rgba(255, 255, 255, 0.12);
78
- --glow-18: rgba(255, 255, 255, 0.18);
79
- --glow-22: rgba(255, 255, 255, 0.22);
80
- --glow-38: rgba(255, 255, 255, 0.38);
81
- }
1
+ /* theme-name: 炫彩 */
2
+ /* theme-name-en: Dazzle */
3
+ :root {
4
+ color-scheme: dark;
5
+ --bg: #0b0b14;
6
+ --bg-elev: #13131e;
7
+ --bg-elev2: #1b1b2e;
8
+ --border: #2a2a48;
9
+ --border-soft: #1f1f38;
10
+ --text: #e8e8f0;
11
+ --text-dim: #a0a0c0;
12
+ --text-faint: #707090;
13
+ --accent: #818cf8;
14
+ --accent-soft: rgba(129, 140, 248, 0.14);
15
+ --green: #34d399;
16
+ --green-soft: rgba(52, 211, 153, 0.12);
17
+ --red: #f43f5e;
18
+ --red-soft: rgba(244, 63, 94, 0.12);
19
+ --amber: #f59e0b;
20
+ --term-bg: #0b0b14;
21
+ --term-fg: #e8e8f0;
22
+ --term-cursor: #818cf8;
23
+ --term-cursor-accent: #0b0b14;
24
+ --term-selection: rgba(129, 140, 248, 0.35);
25
+ --term-black: #1b1b2e;
26
+ --term-red: #f43f5e;
27
+ --term-green: #34d399;
28
+ --term-yellow: #f59e0b;
29
+ --term-blue: #60a5fa;
30
+ --term-magenta: #c084fc;
31
+ --term-cyan: #22d3ee;
32
+ --term-white: #e8e8f0;
33
+ --term-bright-black: #707090;
34
+ --term-bright-red: #f43f5e;
35
+ --term-bright-green: #34d399;
36
+ --term-bright-yellow: #f59e0b;
37
+ --term-bright-blue: #60a5fa;
38
+ --term-bright-magenta: #c084fc;
39
+ --term-bright-cyan: #22d3ee;
40
+ --term-bright-white: #ffffff;
41
+ --mono: "SF Mono", "JetBrains Mono", ui-monospace, Menlo, Consolas, monospace;
42
+ --tooltip-bg: #232733;
43
+ --code-bg: #0b0d12;
44
+ --code-text: #c9d1d9;
45
+ --err-text: #f0a5a5;
46
+ --red-text: #fca5a5;
47
+ --amber-text: #fcd34d;
48
+ --info-blue: #60a5fa;
49
+ --link: #a78bfa;
50
+ --link-hover: #c4b5fd;
51
+ --link-soft: #ddd6fe;
52
+ --md-strong: #f3f4f6;
53
+ --skill-blue: #5eb3ff;
54
+ --plugin-purple: #b58cff;
55
+ --auth-green: #6ee7a0;
56
+ --scroll-thumb: #2a2f3d;
57
+ --scroll-thumb-hover: #3a4152;
58
+ --notice-err-bg: #401d23;
59
+ --notice-warn-bg: #38251f;
60
+ --notice-info-bg: #1b2544;
61
+ --notice-err-border: #ef4444;
62
+ --notice-warn-border: #f59e0b;
63
+ --notice-info-border: #3b82f6;
64
+ --send-blue: #818cf8;
65
+ --send-blue-hover: #6366f1;
66
+ --brand-grad-a: #818cf8;
67
+ --brand-grad-b: #c084fc;
68
+ --on-amber: #1a1a1a;
69
+ --search-active-fg: #1a1d26;
70
+ --switch-knob: #ffffff;
71
+ --bg-elev3: rgba(255, 255, 255, 0.06);
72
+ --glow-015: rgba(255, 255, 255, 0.015);
73
+ --glow-025: rgba(255, 255, 255, 0.025);
74
+ --glow-03: rgba(255, 255, 255, 0.03);
75
+ --glow-04: rgba(255, 255, 255, 0.04);
76
+ --glow-05: rgba(255, 255, 255, 0.05);
77
+ --glow-12: rgba(255, 255, 255, 0.12);
78
+ --glow-18: rgba(255, 255, 255, 0.18);
79
+ --glow-22: rgba(255, 255, 255, 0.22);
80
+ --glow-38: rgba(255, 255, 255, 0.38);
81
+ }