myrlin-workbook 0.3.1 → 0.4.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.
- package/README.md +16 -11
- package/logo-cropped.png +0 -0
- package/package.json +1 -1
- package/src/gui.js +1 -1
- package/src/web/public/app.js +1 -1
- package/src/web/public/index.html +14 -7
- package/src/web/public/logo.png +0 -0
- package/src/web/public/styles.css +242 -6
- package/src/web/server.js +17 -10
package/README.md
CHANGED
|
@@ -1,12 +1,17 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="docs/images/logo.png" alt="Myrlin's Workbook" width="250">
|
|
3
|
+
</p>
|
|
4
|
+
<h1 align="center">Myrlin's Workbook</h1>
|
|
5
|
+
<p align="center">
|
|
6
|
+
<a href="https://www.npmjs.com/package/myrlin-workbook"><img src="https://img.shields.io/npm/v/myrlin-workbook.svg?style=flat-square" alt="npm version"></a>
|
|
7
|
+
<a href="https://www.npmjs.com/package/myrlin-workbook"><img src="https://img.shields.io/npm/dm/myrlin-workbook.svg?style=flat-square" alt="npm downloads"></a>
|
|
8
|
+
<a href="LICENSE"><img src="https://img.shields.io/badge/License-AGPL--3.0-blue.svg?style=flat-square" alt="License: AGPL-3.0"></a>
|
|
9
|
+
<a href="https://nodejs.org"><img src="https://img.shields.io/badge/Node.js-18%2B-green.svg?style=flat-square" alt="Node.js 18+"></a>
|
|
10
|
+
</p>
|
|
8
11
|
|
|
9
|
-
|
|
12
|
+
<p align="center">
|
|
13
|
+
Open-source workspace manager for Claude Code - cost tracking, conflict detection, 4-pane embedded terminals, per-workspace docs & kanban, session templates, costs dashboard, 13 themes, <a href="#full-feature-list">and more</a>. Discovers every session you've ever run, organizes them into workspaces. Runs in your browser, everything stays local.
|
|
14
|
+
</p>
|
|
10
15
|
|
|
11
16
|
<p align="center">
|
|
12
17
|
<img src="docs/images/hero-demo.gif" alt="4-pane terminal grid with live sessions" width="800">
|
|
@@ -87,7 +92,7 @@ There are good tools in this space. I tried them. Here's where Myrlin fits:
|
|
|
87
92
|
| Session discovery | Yes | Yes | No | No |
|
|
88
93
|
| Session manager overlay | Yes | No | No | No |
|
|
89
94
|
| Workspace docs/kanban | Yes | No | No | No |
|
|
90
|
-
| Themes |
|
|
95
|
+
| Themes | 13 (Catppuccin, Nord, Dracula, etc.) | No | No | No |
|
|
91
96
|
| Session templates | Yes | No | No | No |
|
|
92
97
|
| Conflict detection | Yes | No | No | No |
|
|
93
98
|
| Embedded terminals | 4-pane grid | Single | No | No |
|
|
@@ -174,7 +179,7 @@ Real-time warnings when two or more running sessions are editing the same files.
|
|
|
174
179
|
|
|
175
180
|

|
|
176
181
|
|
|
177
|
-
|
|
182
|
+
13 themes organized into Dark and Light sections. 4 official [Catppuccin](https://github.com/catppuccin/catppuccin) (Mocha, Macchiato, Frappe, Latte), 3 community favorites (Nord, Dracula, Tokyo Night), 4 custom flavors (Cherry, Ocean, Amber, Mint), and 2 light alternatives (Rose Pine Dawn, Gruvbox Light). Toggle from the header dropdown. Choice persists in localStorage.
|
|
178
183
|
|
|
179
184
|
### Port Detection & Resource Monitoring
|
|
180
185
|
|
|
@@ -260,7 +265,7 @@ A comprehensive list of everything Myrlin Workbook offers today.
|
|
|
260
265
|
|
|
261
266
|
### Themes
|
|
262
267
|
|
|
263
|
-
- **
|
|
268
|
+
- **13 themes** - 4 Catppuccin (Mocha, Macchiato, Frappe, Latte) + Nord, Dracula, Tokyo Night + Cherry, Ocean, Amber, Mint + Rose Pine Dawn, Gruvbox Light
|
|
264
269
|
- **Header dropdown toggle** - choice persists in localStorage
|
|
265
270
|
|
|
266
271
|
### Resources & Monitoring
|
package/logo-cropped.png
ADDED
|
Binary file
|
package/package.json
CHANGED
package/src/gui.js
CHANGED
package/src/web/public/app.js
CHANGED
|
@@ -2299,7 +2299,7 @@ class CWMApp {
|
|
|
2299
2299
|
// Legacy alias for any remaining callers
|
|
2300
2300
|
toggleTheme() {
|
|
2301
2301
|
const current = document.documentElement.dataset.theme || 'mocha';
|
|
2302
|
-
const themes = ['mocha', 'macchiato', 'frappe', '
|
|
2302
|
+
const themes = ['mocha', 'macchiato', 'frappe', 'nord', 'dracula', 'tokyo-night', 'cherry', 'ocean', 'amber', 'mint', 'latte', 'rose-pine-dawn', 'gruvbox-light'];
|
|
2303
2303
|
const next = themes[(themes.indexOf(current) + 1) % themes.length];
|
|
2304
2304
|
this.setTheme(next);
|
|
2305
2305
|
}
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
<script>
|
|
18
18
|
(function() {
|
|
19
19
|
var t = localStorage.getItem('cwm_theme');
|
|
20
|
-
if (['latte','frappe','macchiato'].includes(t)) document.documentElement.dataset.theme = t;
|
|
20
|
+
if (['latte','frappe','macchiato','cherry','ocean','amber','mint','nord','dracula','tokyo-night','rose-pine-dawn','gruvbox-light'].includes(t)) document.documentElement.dataset.theme = t;
|
|
21
21
|
var s = parseFloat(localStorage.getItem('cwm_ui_scale'));
|
|
22
22
|
if (s && s >= 0.85 && s <= 1.2) {
|
|
23
23
|
document.documentElement.style.setProperty('--ui-scale', s);
|
|
@@ -92,8 +92,8 @@
|
|
|
92
92
|
</svg>
|
|
93
93
|
</button>
|
|
94
94
|
<div class="header-brand">
|
|
95
|
-
<img src="logo.png" alt="
|
|
96
|
-
<span class="header-title">
|
|
95
|
+
<img src="logo.png" alt="Myrlin" class="header-logo-img">
|
|
96
|
+
<span class="header-title">Myrlin's Workbook</span>
|
|
97
97
|
</div>
|
|
98
98
|
</div>
|
|
99
99
|
|
|
@@ -156,14 +156,21 @@
|
|
|
156
156
|
</svg>
|
|
157
157
|
</button>
|
|
158
158
|
<div class="theme-dropdown" id="theme-dropdown" hidden>
|
|
159
|
-
<
|
|
160
|
-
<button class="theme-option" data-theme="
|
|
161
|
-
<button class="theme-option" data-theme="
|
|
162
|
-
<button class="theme-option" data-theme="
|
|
159
|
+
<div class="theme-dropdown-section">Dark</div>
|
|
160
|
+
<button class="theme-option" data-theme="mocha"><span class="theme-swatch" style="background:#1e1e2e"></span>Mocha<span class="theme-catppuccin-badge" title="Official Catppuccin">★</span></button>
|
|
161
|
+
<button class="theme-option" data-theme="macchiato"><span class="theme-swatch" style="background:#24273a"></span>Macchiato<span class="theme-catppuccin-badge" title="Official Catppuccin">★</span></button>
|
|
162
|
+
<button class="theme-option" data-theme="frappe"><span class="theme-swatch" style="background:#303446"></span>Frappé<span class="theme-catppuccin-badge" title="Official Catppuccin">★</span></button>
|
|
163
|
+
<button class="theme-option" data-theme="nord"><span class="theme-swatch" style="background:#2e3440"></span>Nord</button>
|
|
164
|
+
<button class="theme-option" data-theme="dracula"><span class="theme-swatch" style="background:#282a36"></span>Dracula</button>
|
|
165
|
+
<button class="theme-option" data-theme="tokyo-night"><span class="theme-swatch" style="background:#1a1b26"></span>Tokyo Night</button>
|
|
163
166
|
<button class="theme-option" data-theme="cherry"><span class="theme-swatch" style="background:linear-gradient(135deg,#221a22,#f5a0d0)"></span>Cherry</button>
|
|
164
167
|
<button class="theme-option" data-theme="ocean"><span class="theme-swatch" style="background:linear-gradient(135deg,#1a1e28,#70a8f0)"></span>Ocean</button>
|
|
165
168
|
<button class="theme-option" data-theme="amber"><span class="theme-swatch" style="background:linear-gradient(135deg,#211e1a,#f0d070)"></span>Amber</button>
|
|
166
169
|
<button class="theme-option" data-theme="mint"><span class="theme-swatch" style="background:linear-gradient(135deg,#1a2120,#78e0a0)"></span>Mint</button>
|
|
170
|
+
<div class="theme-dropdown-section">Light</div>
|
|
171
|
+
<button class="theme-option" data-theme="latte"><span class="theme-swatch" style="background:#eff1f5;border:1px solid #ccd0da"></span>Latte<span class="theme-catppuccin-badge" title="Official Catppuccin">★</span></button>
|
|
172
|
+
<button class="theme-option" data-theme="rose-pine-dawn"><span class="theme-swatch" style="background:#faf4ed;border:1px solid #dfdad9"></span>Rose Pine Dawn</button>
|
|
173
|
+
<button class="theme-option" data-theme="gruvbox-light"><span class="theme-swatch" style="background:#fbf1c7;border:1px solid #d5c4a1"></span>Gruvbox Light</button>
|
|
167
174
|
</div>
|
|
168
175
|
</div>
|
|
169
176
|
<div class="scale-controls" id="scale-controls">
|
package/src/web/public/logo.png
CHANGED
|
Binary file
|
|
@@ -634,7 +634,7 @@ textarea.input {
|
|
|
634
634
|
.header-brand {
|
|
635
635
|
display: flex;
|
|
636
636
|
align-items: center;
|
|
637
|
-
gap:
|
|
637
|
+
gap: 8px;
|
|
638
638
|
overflow: visible;
|
|
639
639
|
position: relative;
|
|
640
640
|
z-index: 1;
|
|
@@ -646,10 +646,9 @@ textarea.input {
|
|
|
646
646
|
}
|
|
647
647
|
|
|
648
648
|
.header-logo-img {
|
|
649
|
-
width:
|
|
650
|
-
height:
|
|
649
|
+
width: 64px;
|
|
650
|
+
height: 64px;
|
|
651
651
|
object-fit: contain;
|
|
652
|
-
margin-right: 4px;
|
|
653
652
|
filter: drop-shadow(0 0 10px rgba(203, 166, 247, 0.3));
|
|
654
653
|
transition: filter 0.3s ease;
|
|
655
654
|
pointer-events: auto;
|
|
@@ -660,10 +659,10 @@ textarea.input {
|
|
|
660
659
|
}
|
|
661
660
|
|
|
662
661
|
.header-title {
|
|
663
|
-
font-size:
|
|
662
|
+
font-size: 17px;
|
|
664
663
|
font-weight: 700;
|
|
665
664
|
color: var(--text-primary);
|
|
666
|
-
letter-spacing: -0.
|
|
665
|
+
letter-spacing: -0.01em;
|
|
667
666
|
}
|
|
668
667
|
|
|
669
668
|
.header-center {
|
|
@@ -6294,3 +6293,240 @@ html {
|
|
|
6294
6293
|
width: auto;
|
|
6295
6294
|
}
|
|
6296
6295
|
}
|
|
6296
|
+
|
|
6297
|
+
/* ═══════════════════════════════════════════════════════════ */
|
|
6298
|
+
/* Theme Dropdown Section Headers + Catppuccin Badge */
|
|
6299
|
+
/* ═══════════════════════════════════════════════════════════ */
|
|
6300
|
+
|
|
6301
|
+
/* Theme dropdown section headers */
|
|
6302
|
+
.theme-dropdown-section {
|
|
6303
|
+
padding: 4px 12px 2px;
|
|
6304
|
+
font-size: 10px;
|
|
6305
|
+
font-weight: 600;
|
|
6306
|
+
text-transform: uppercase;
|
|
6307
|
+
letter-spacing: 0.08em;
|
|
6308
|
+
color: var(--overlay1);
|
|
6309
|
+
pointer-events: none;
|
|
6310
|
+
user-select: none;
|
|
6311
|
+
}
|
|
6312
|
+
.theme-dropdown-section:not(:first-child) {
|
|
6313
|
+
margin-top: 4px;
|
|
6314
|
+
border-top: 1px solid var(--surface0);
|
|
6315
|
+
padding-top: 6px;
|
|
6316
|
+
}
|
|
6317
|
+
.theme-catppuccin-badge {
|
|
6318
|
+
margin-left: auto;
|
|
6319
|
+
font-size: 10px;
|
|
6320
|
+
color: var(--yellow);
|
|
6321
|
+
opacity: 0.7;
|
|
6322
|
+
}
|
|
6323
|
+
|
|
6324
|
+
/* ═══════════════════════════════════════════════════════════ */
|
|
6325
|
+
/* NORD (Dark — Polar Night & Aurora) */
|
|
6326
|
+
/* ═══════════════════════════════════════════════════════════ */
|
|
6327
|
+
|
|
6328
|
+
:root[data-theme="nord"] {
|
|
6329
|
+
--base: #2e3440;
|
|
6330
|
+
--mantle: #292e39;
|
|
6331
|
+
--crust: #242933;
|
|
6332
|
+
--surface0: #3b4252;
|
|
6333
|
+
--surface1: #434c5e;
|
|
6334
|
+
--surface2: #4c566a;
|
|
6335
|
+
--overlay0: #616e88;
|
|
6336
|
+
--overlay1: #6e7e99;
|
|
6337
|
+
--text: #eceff4;
|
|
6338
|
+
--subtext0: #a5b1c2;
|
|
6339
|
+
--subtext1: #d8dee9;
|
|
6340
|
+
--mauve: #b48ead;
|
|
6341
|
+
--blue: #81a1c1;
|
|
6342
|
+
--green: #a3be8c;
|
|
6343
|
+
--yellow: #ebcb8b;
|
|
6344
|
+
--red: #bf616a;
|
|
6345
|
+
--peach: #d08770;
|
|
6346
|
+
--teal: #8fbcbb;
|
|
6347
|
+
--sky: #88c0d0;
|
|
6348
|
+
--pink: #b48ead;
|
|
6349
|
+
--lavender: #9db2cf;
|
|
6350
|
+
--flamingo: #d08770;
|
|
6351
|
+
--rosewater: #d8b4a0;
|
|
6352
|
+
--sapphire: #5e81ac;
|
|
6353
|
+
--border-subtle: rgba(67, 76, 94, 0.5);
|
|
6354
|
+
--shadow-sm: 0 1px 2px rgba(0,0,0,0.2);
|
|
6355
|
+
--shadow-md: 0 4px 12px rgba(0,0,0,0.25);
|
|
6356
|
+
--shadow-lg: 0 8px 30px rgba(0,0,0,0.3);
|
|
6357
|
+
--shadow-xl: 0 16px 50px rgba(0,0,0,0.35);
|
|
6358
|
+
}
|
|
6359
|
+
:root[data-theme="nord"] .theme-icon-moon { display: inline; }
|
|
6360
|
+
:root[data-theme="nord"] .theme-icon-sun { display: none; }
|
|
6361
|
+
:root[data-theme="nord"] ::selection { background: rgba(129, 161, 193, 0.25); color: var(--text); }
|
|
6362
|
+
:root[data-theme="nord"] .stat-dot-running { background: var(--green); box-shadow: 0 0 4px rgba(163, 190, 140, 0.5); }
|
|
6363
|
+
:root[data-theme="nord"] .terminal-pane-empty.drag-over .terminal-container { background: rgba(129, 161, 193, 0.05); }
|
|
6364
|
+
:root[data-theme="nord"] .terminal-resize-handle:hover { background: rgba(129, 161, 193, 0.4); }
|
|
6365
|
+
|
|
6366
|
+
/* ═══════════════════════════════════════════════════════════ */
|
|
6367
|
+
/* DRACULA (Dark — Iconic Purple & Neon) */
|
|
6368
|
+
/* ═══════════════════════════════════════════════════════════ */
|
|
6369
|
+
|
|
6370
|
+
:root[data-theme="dracula"] {
|
|
6371
|
+
--base: #282a36;
|
|
6372
|
+
--mantle: #21222c;
|
|
6373
|
+
--crust: #191a21;
|
|
6374
|
+
--surface0: #343746;
|
|
6375
|
+
--surface1: #44475a;
|
|
6376
|
+
--surface2: #545768;
|
|
6377
|
+
--overlay0: #6272a4;
|
|
6378
|
+
--overlay1: #7283b5;
|
|
6379
|
+
--text: #f8f8f2;
|
|
6380
|
+
--subtext0: #b8b8b0;
|
|
6381
|
+
--subtext1: #d8d8d0;
|
|
6382
|
+
--mauve: #bd93f9;
|
|
6383
|
+
--blue: #8be9fd;
|
|
6384
|
+
--green: #50fa7b;
|
|
6385
|
+
--yellow: #f1fa8c;
|
|
6386
|
+
--red: #ff5555;
|
|
6387
|
+
--peach: #ffb86c;
|
|
6388
|
+
--teal: #8be9fd;
|
|
6389
|
+
--sky: #8be9fd;
|
|
6390
|
+
--pink: #ff79c6;
|
|
6391
|
+
--lavender: #caa9fa;
|
|
6392
|
+
--flamingo: #ff79c6;
|
|
6393
|
+
--rosewater: #ffd0e0;
|
|
6394
|
+
--sapphire: #6cb6ff;
|
|
6395
|
+
--border-subtle: rgba(68, 71, 90, 0.5);
|
|
6396
|
+
--shadow-sm: 0 1px 2px rgba(0,0,0,0.2);
|
|
6397
|
+
--shadow-md: 0 4px 12px rgba(0,0,0,0.25);
|
|
6398
|
+
--shadow-lg: 0 8px 30px rgba(0,0,0,0.3);
|
|
6399
|
+
--shadow-xl: 0 16px 50px rgba(0,0,0,0.35);
|
|
6400
|
+
}
|
|
6401
|
+
:root[data-theme="dracula"] .theme-icon-moon { display: inline; }
|
|
6402
|
+
:root[data-theme="dracula"] .theme-icon-sun { display: none; }
|
|
6403
|
+
:root[data-theme="dracula"] ::selection { background: rgba(189, 147, 249, 0.25); color: var(--text); }
|
|
6404
|
+
:root[data-theme="dracula"] .stat-dot-running { background: var(--green); box-shadow: 0 0 4px rgba(80, 250, 123, 0.5); }
|
|
6405
|
+
:root[data-theme="dracula"] .terminal-pane-empty.drag-over .terminal-container { background: rgba(189, 147, 249, 0.05); }
|
|
6406
|
+
:root[data-theme="dracula"] .terminal-resize-handle:hover { background: rgba(189, 147, 249, 0.4); }
|
|
6407
|
+
|
|
6408
|
+
/* ═══════════════════════════════════════════════════════════ */
|
|
6409
|
+
/* TOKYO NIGHT (Dark — Neon City Lights) */
|
|
6410
|
+
/* ═══════════════════════════════════════════════════════════ */
|
|
6411
|
+
|
|
6412
|
+
:root[data-theme="tokyo-night"] {
|
|
6413
|
+
--base: #1a1b26;
|
|
6414
|
+
--mantle: #16161e;
|
|
6415
|
+
--crust: #12121a;
|
|
6416
|
+
--surface0: #292e42;
|
|
6417
|
+
--surface1: #3b4261;
|
|
6418
|
+
--surface2: #545c7e;
|
|
6419
|
+
--overlay0: #565f89;
|
|
6420
|
+
--overlay1: #6b7394;
|
|
6421
|
+
--text: #c0caf5;
|
|
6422
|
+
--subtext0: #9aa5ce;
|
|
6423
|
+
--subtext1: #a9b1d6;
|
|
6424
|
+
--mauve: #bb9af7;
|
|
6425
|
+
--blue: #7aa2f7;
|
|
6426
|
+
--green: #9ece6a;
|
|
6427
|
+
--yellow: #e0af68;
|
|
6428
|
+
--red: #f7768e;
|
|
6429
|
+
--peach: #ff9e64;
|
|
6430
|
+
--teal: #73daca;
|
|
6431
|
+
--sky: #7dcfff;
|
|
6432
|
+
--pink: #ff79c6;
|
|
6433
|
+
--lavender: #b4befe;
|
|
6434
|
+
--flamingo: #f7768e;
|
|
6435
|
+
--rosewater: #ffc0cb;
|
|
6436
|
+
--sapphire: #2ac3de;
|
|
6437
|
+
--border-subtle: rgba(59, 66, 97, 0.5);
|
|
6438
|
+
--shadow-sm: 0 1px 2px rgba(0,0,0,0.2);
|
|
6439
|
+
--shadow-md: 0 4px 12px rgba(0,0,0,0.25);
|
|
6440
|
+
--shadow-lg: 0 8px 30px rgba(0,0,0,0.3);
|
|
6441
|
+
--shadow-xl: 0 16px 50px rgba(0,0,0,0.35);
|
|
6442
|
+
}
|
|
6443
|
+
:root[data-theme="tokyo-night"] .theme-icon-moon { display: inline; }
|
|
6444
|
+
:root[data-theme="tokyo-night"] .theme-icon-sun { display: none; }
|
|
6445
|
+
:root[data-theme="tokyo-night"] ::selection { background: rgba(122, 162, 247, 0.25); color: var(--text); }
|
|
6446
|
+
:root[data-theme="tokyo-night"] .stat-dot-running { background: var(--green); box-shadow: 0 0 4px rgba(158, 206, 106, 0.5); }
|
|
6447
|
+
:root[data-theme="tokyo-night"] .terminal-pane-empty.drag-over .terminal-container { background: rgba(122, 162, 247, 0.05); }
|
|
6448
|
+
:root[data-theme="tokyo-night"] .terminal-resize-handle:hover { background: rgba(122, 162, 247, 0.4); }
|
|
6449
|
+
|
|
6450
|
+
/* ═══════════════════════════════════════════════════════════ */
|
|
6451
|
+
/* ROSE PINE DAWN (Light — Soft Warm Rose) */
|
|
6452
|
+
/* ═══════════════════════════════════════════════════════════ */
|
|
6453
|
+
|
|
6454
|
+
:root[data-theme="rose-pine-dawn"] {
|
|
6455
|
+
--base: #faf4ed;
|
|
6456
|
+
--mantle: #f2e9e1;
|
|
6457
|
+
--crust: #ebe0d6;
|
|
6458
|
+
--surface0: #f4ede8;
|
|
6459
|
+
--surface1: #dfdad9;
|
|
6460
|
+
--surface2: #cecacd;
|
|
6461
|
+
--overlay0: #9893a5;
|
|
6462
|
+
--overlay1: #797593;
|
|
6463
|
+
--text: #575279;
|
|
6464
|
+
--subtext0: #6e6a86;
|
|
6465
|
+
--subtext1: #635f7b;
|
|
6466
|
+
--mauve: #907aa9;
|
|
6467
|
+
--blue: #286983;
|
|
6468
|
+
--green: #56949f;
|
|
6469
|
+
--yellow: #ea9d34;
|
|
6470
|
+
--red: #b4637a;
|
|
6471
|
+
--peach: #d7827e;
|
|
6472
|
+
--teal: #56949f;
|
|
6473
|
+
--sky: #56949f;
|
|
6474
|
+
--pink: #d7827e;
|
|
6475
|
+
--lavender: #907aa9;
|
|
6476
|
+
--flamingo: #d7827e;
|
|
6477
|
+
--rosewater: #d7827e;
|
|
6478
|
+
--sapphire: #286983;
|
|
6479
|
+
--border-subtle: rgba(206, 202, 205, 0.5);
|
|
6480
|
+
--shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.06), 0 1px 3px rgba(0, 0, 0, 0.04);
|
|
6481
|
+
--shadow-md: 0 4px 12px rgba(0, 0, 0, 0.08), 0 2px 4px rgba(0, 0, 0, 0.06);
|
|
6482
|
+
--shadow-lg: 0 8px 30px rgba(0, 0, 0, 0.1), 0 4px 12px rgba(0, 0, 0, 0.08);
|
|
6483
|
+
--shadow-xl: 0 16px 50px rgba(0, 0, 0, 0.12), 0 8px 20px rgba(0, 0, 0, 0.1);
|
|
6484
|
+
}
|
|
6485
|
+
:root[data-theme="rose-pine-dawn"] .theme-icon-moon { display: none; }
|
|
6486
|
+
:root[data-theme="rose-pine-dawn"] .theme-icon-sun { display: block !important; }
|
|
6487
|
+
:root[data-theme="rose-pine-dawn"] ::selection { background: rgba(144, 122, 169, 0.2); color: var(--text); }
|
|
6488
|
+
:root[data-theme="rose-pine-dawn"] .stat-dot-running { background: var(--green); box-shadow: 0 0 4px rgba(86, 148, 159, 0.5); }
|
|
6489
|
+
:root[data-theme="rose-pine-dawn"] .terminal-pane-empty.drag-over .terminal-container { background: rgba(144, 122, 169, 0.05); }
|
|
6490
|
+
:root[data-theme="rose-pine-dawn"] .terminal-resize-handle:hover { background: rgba(144, 122, 169, 0.4); }
|
|
6491
|
+
|
|
6492
|
+
/* ═══════════════════════════════════════════════════════════ */
|
|
6493
|
+
/* GRUVBOX LIGHT (Light — Warm Retro Earthy) */
|
|
6494
|
+
/* ═══════════════════════════════════════════════════════════ */
|
|
6495
|
+
|
|
6496
|
+
:root[data-theme="gruvbox-light"] {
|
|
6497
|
+
--base: #fbf1c7;
|
|
6498
|
+
--mantle: #f2e5bc;
|
|
6499
|
+
--crust: #ebdbb2;
|
|
6500
|
+
--surface0: #d5c4a1;
|
|
6501
|
+
--surface1: #bdae93;
|
|
6502
|
+
--surface2: #a89984;
|
|
6503
|
+
--overlay0: #928374;
|
|
6504
|
+
--overlay1: #7c6f64;
|
|
6505
|
+
--text: #3c3836;
|
|
6506
|
+
--subtext0: #504945;
|
|
6507
|
+
--subtext1: #453e3a;
|
|
6508
|
+
--mauve: #8f3f71;
|
|
6509
|
+
--blue: #076678;
|
|
6510
|
+
--green: #79740e;
|
|
6511
|
+
--yellow: #b57614;
|
|
6512
|
+
--red: #9d0006;
|
|
6513
|
+
--peach: #af3a03;
|
|
6514
|
+
--teal: #427b58;
|
|
6515
|
+
--sky: #076678;
|
|
6516
|
+
--pink: #8f3f71;
|
|
6517
|
+
--lavender: #8f3f71;
|
|
6518
|
+
--flamingo: #af3a03;
|
|
6519
|
+
--rosewater: #c8956c;
|
|
6520
|
+
--sapphire: #458588;
|
|
6521
|
+
--border-subtle: rgba(168, 153, 132, 0.5);
|
|
6522
|
+
--shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.06), 0 1px 3px rgba(0, 0, 0, 0.04);
|
|
6523
|
+
--shadow-md: 0 4px 12px rgba(0, 0, 0, 0.08), 0 2px 4px rgba(0, 0, 0, 0.06);
|
|
6524
|
+
--shadow-lg: 0 8px 30px rgba(0, 0, 0, 0.1), 0 4px 12px rgba(0, 0, 0, 0.08);
|
|
6525
|
+
--shadow-xl: 0 16px 50px rgba(0, 0, 0, 0.12), 0 8px 20px rgba(0, 0, 0, 0.1);
|
|
6526
|
+
}
|
|
6527
|
+
:root[data-theme="gruvbox-light"] .theme-icon-moon { display: none; }
|
|
6528
|
+
:root[data-theme="gruvbox-light"] .theme-icon-sun { display: block !important; }
|
|
6529
|
+
:root[data-theme="gruvbox-light"] ::selection { background: rgba(175, 58, 3, 0.2); color: var(--text); }
|
|
6530
|
+
:root[data-theme="gruvbox-light"] .stat-dot-running { background: var(--green); box-shadow: 0 0 4px rgba(121, 116, 14, 0.5); }
|
|
6531
|
+
:root[data-theme="gruvbox-light"] .terminal-pane-empty.drag-over .terminal-container { background: rgba(175, 58, 3, 0.05); }
|
|
6532
|
+
:root[data-theme="gruvbox-light"] .terminal-resize-handle:hover { background: rgba(175, 58, 3, 0.4); }
|
package/src/web/server.js
CHANGED
|
@@ -942,16 +942,23 @@ function decodeClaudePath(encoded) {
|
|
|
942
942
|
let matched = false;
|
|
943
943
|
|
|
944
944
|
for (let len = tokens.length - idx; len > 1; len--) {
|
|
945
|
-
const
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
945
|
+
const slice = tokens.slice(idx, idx + len);
|
|
946
|
+
// Try hyphen-joined (e.g. "claude-workspace-manager") and
|
|
947
|
+
// space-joined (e.g. "Work AI Project") since Claude encodes
|
|
948
|
+
// both path separators and spaces as dashes
|
|
949
|
+
const candidates = [slice.join('-'), slice.join(' ')];
|
|
950
|
+
for (const candidate of candidates) {
|
|
951
|
+
const candidatePath = path.join(resolved, candidate);
|
|
952
|
+
try {
|
|
953
|
+
if (fs.existsSync(candidatePath)) {
|
|
954
|
+
resolved = candidatePath;
|
|
955
|
+
idx += len;
|
|
956
|
+
matched = true;
|
|
957
|
+
break;
|
|
958
|
+
}
|
|
959
|
+
} catch (_) { /* skip */ }
|
|
960
|
+
}
|
|
961
|
+
if (matched) break;
|
|
955
962
|
}
|
|
956
963
|
|
|
957
964
|
if (!matched) {
|