@co0ontty/wand 1.3.4 → 1.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/dist/auth.js +2 -1
- package/dist/claude-pty-bridge.d.ts +38 -0
- package/dist/claude-pty-bridge.js +224 -9
- package/dist/cli.js +2 -2
- package/dist/middleware/rate-limit.js +2 -1
- package/dist/process-manager.d.ts +1 -0
- package/dist/process-manager.js +96 -178
- package/dist/pty-text-utils.d.ts +12 -0
- package/dist/pty-text-utils.js +37 -1
- package/dist/server-session-routes.d.ts +3 -1
- package/dist/server-session-routes.js +114 -10
- package/dist/server.js +14 -34
- package/dist/session-lifecycle.js +0 -5
- package/dist/session-logger.d.ts +10 -0
- package/dist/storage.js +42 -8
- package/dist/structured-session-manager.d.ts +55 -0
- package/dist/structured-session-manager.js +723 -0
- package/dist/types.d.ts +22 -0
- package/dist/web-ui/content/scripts.js +746 -102
- package/dist/web-ui/content/styles.css +275 -9
- package/package.json +2 -1
|
@@ -269,8 +269,9 @@
|
|
|
269
269
|
}
|
|
270
270
|
|
|
271
271
|
.floating-sidebar-toggle.active {
|
|
272
|
-
|
|
273
|
-
|
|
272
|
+
opacity: 0;
|
|
273
|
+
pointer-events: none;
|
|
274
|
+
transition: opacity 0.15s ease;
|
|
274
275
|
}
|
|
275
276
|
|
|
276
277
|
.floating-sidebar-toggle:active {
|
|
@@ -3224,7 +3225,8 @@
|
|
|
3224
3225
|
}
|
|
3225
3226
|
|
|
3226
3227
|
/* Markdown Content */
|
|
3227
|
-
.markdown-content { color: inherit; }
|
|
3228
|
+
.markdown-content { color: inherit; white-space: normal; overflow-x: hidden; }
|
|
3229
|
+
.markdown-content .code-block pre { overflow-x: auto; }
|
|
3228
3230
|
.markdown-content p { margin: 0 0 8px 0; }
|
|
3229
3231
|
.markdown-content p:last-child { margin-bottom: 0; }
|
|
3230
3232
|
.markdown-content strong { font-weight: 600; }
|
|
@@ -3429,6 +3431,138 @@
|
|
|
3429
3431
|
to { opacity: 1; transform: translateX(0); }
|
|
3430
3432
|
}
|
|
3431
3433
|
|
|
3434
|
+
/* Auto-approve indicator */
|
|
3435
|
+
.auto-approve-indicator {
|
|
3436
|
+
display: inline-flex;
|
|
3437
|
+
align-items: center;
|
|
3438
|
+
gap: 2px;
|
|
3439
|
+
font-size: 0.65rem;
|
|
3440
|
+
color: var(--muted);
|
|
3441
|
+
cursor: pointer;
|
|
3442
|
+
padding: 1px 4px;
|
|
3443
|
+
border-radius: 4px;
|
|
3444
|
+
transition: color 0.15s, background 0.15s;
|
|
3445
|
+
user-select: none;
|
|
3446
|
+
white-space: nowrap;
|
|
3447
|
+
}
|
|
3448
|
+
.auto-approve-indicator:hover {
|
|
3449
|
+
background: rgba(255, 255, 255, 0.06);
|
|
3450
|
+
}
|
|
3451
|
+
.auto-approve-indicator.active {
|
|
3452
|
+
color: #22c55e;
|
|
3453
|
+
}
|
|
3454
|
+
.auto-approve-indicator.active:hover {
|
|
3455
|
+
background: rgba(34, 197, 94, 0.1);
|
|
3456
|
+
}
|
|
3457
|
+
|
|
3458
|
+
/* Approval stats badge */
|
|
3459
|
+
.approval-stats {
|
|
3460
|
+
display: inline-flex;
|
|
3461
|
+
align-items: center;
|
|
3462
|
+
position: relative;
|
|
3463
|
+
}
|
|
3464
|
+
.approval-stats.hidden {
|
|
3465
|
+
display: none;
|
|
3466
|
+
}
|
|
3467
|
+
.approval-stats-divider {
|
|
3468
|
+
width: 1px;
|
|
3469
|
+
height: 16px;
|
|
3470
|
+
background: var(--border);
|
|
3471
|
+
margin: 0 4px 0 2px;
|
|
3472
|
+
}
|
|
3473
|
+
.approval-stats-badge {
|
|
3474
|
+
display: inline-flex;
|
|
3475
|
+
align-items: center;
|
|
3476
|
+
gap: 3px;
|
|
3477
|
+
padding: 1px 7px 1px 5px;
|
|
3478
|
+
border-radius: 10px;
|
|
3479
|
+
background: rgba(34, 197, 94, 0.1);
|
|
3480
|
+
color: #22c55e;
|
|
3481
|
+
font-size: 0.68rem;
|
|
3482
|
+
font-weight: 600;
|
|
3483
|
+
cursor: default;
|
|
3484
|
+
transition: background 0.15s;
|
|
3485
|
+
line-height: 1.5;
|
|
3486
|
+
}
|
|
3487
|
+
.approval-stats-badge:hover {
|
|
3488
|
+
background: rgba(34, 197, 94, 0.18);
|
|
3489
|
+
}
|
|
3490
|
+
.approval-stats-icon {
|
|
3491
|
+
stroke: #22c55e;
|
|
3492
|
+
flex-shrink: 0;
|
|
3493
|
+
}
|
|
3494
|
+
.approval-stats-total {
|
|
3495
|
+
font-variant-numeric: tabular-nums;
|
|
3496
|
+
}
|
|
3497
|
+
@keyframes approval-pulse {
|
|
3498
|
+
0% { transform: scale(1); }
|
|
3499
|
+
50% { transform: scale(1.15); }
|
|
3500
|
+
100% { transform: scale(1); }
|
|
3501
|
+
}
|
|
3502
|
+
.approval-stats-pulse {
|
|
3503
|
+
animation: approval-pulse 0.3s ease-out;
|
|
3504
|
+
}
|
|
3505
|
+
/* Popup tooltip */
|
|
3506
|
+
.approval-stats-popup {
|
|
3507
|
+
display: none;
|
|
3508
|
+
position: absolute;
|
|
3509
|
+
bottom: calc(100% + 6px);
|
|
3510
|
+
left: 50%;
|
|
3511
|
+
transform: translateX(-50%);
|
|
3512
|
+
background: var(--bg-elevated, #1e1e2e);
|
|
3513
|
+
border: 1px solid var(--border);
|
|
3514
|
+
border-radius: 8px;
|
|
3515
|
+
padding: 8px 10px;
|
|
3516
|
+
min-width: 140px;
|
|
3517
|
+
box-shadow: 0 4px 16px rgba(0,0,0,0.25);
|
|
3518
|
+
z-index: 100;
|
|
3519
|
+
flex-direction: column;
|
|
3520
|
+
gap: 4px;
|
|
3521
|
+
}
|
|
3522
|
+
.approval-stats:hover .approval-stats-popup {
|
|
3523
|
+
display: flex;
|
|
3524
|
+
}
|
|
3525
|
+
.approval-stats-popup-title {
|
|
3526
|
+
font-size: 0.65rem;
|
|
3527
|
+
color: var(--text-muted);
|
|
3528
|
+
font-weight: 500;
|
|
3529
|
+
margin-bottom: 2px;
|
|
3530
|
+
white-space: nowrap;
|
|
3531
|
+
}
|
|
3532
|
+
.approval-stats-row {
|
|
3533
|
+
display: flex;
|
|
3534
|
+
align-items: center;
|
|
3535
|
+
gap: 6px;
|
|
3536
|
+
font-size: 0.7rem;
|
|
3537
|
+
color: var(--text-secondary, #ccc);
|
|
3538
|
+
white-space: nowrap;
|
|
3539
|
+
}
|
|
3540
|
+
.approval-stats-row-icon {
|
|
3541
|
+
width: 16px;
|
|
3542
|
+
text-align: center;
|
|
3543
|
+
flex-shrink: 0;
|
|
3544
|
+
font-size: 0.72rem;
|
|
3545
|
+
}
|
|
3546
|
+
.approval-stats-row-label {
|
|
3547
|
+
flex: 1;
|
|
3548
|
+
}
|
|
3549
|
+
.approval-stats-row-count {
|
|
3550
|
+
font-weight: 600;
|
|
3551
|
+
color: var(--text-primary, #eee);
|
|
3552
|
+
font-variant-numeric: tabular-nums;
|
|
3553
|
+
min-width: 20px;
|
|
3554
|
+
text-align: right;
|
|
3555
|
+
}
|
|
3556
|
+
.approval-stats-row-total {
|
|
3557
|
+
border-top: 1px solid var(--border);
|
|
3558
|
+
padding-top: 4px;
|
|
3559
|
+
margin-top: 2px;
|
|
3560
|
+
color: #22c55e;
|
|
3561
|
+
}
|
|
3562
|
+
.approval-stats-row-total .approval-stats-row-count {
|
|
3563
|
+
color: #22c55e;
|
|
3564
|
+
}
|
|
3565
|
+
|
|
3432
3566
|
.composer-interactive-toggle {
|
|
3433
3567
|
display: inline-flex;
|
|
3434
3568
|
align-items: center;
|
|
@@ -4462,11 +4596,11 @@
|
|
|
4462
4596
|
display: flex;
|
|
4463
4597
|
flex-direction: column;
|
|
4464
4598
|
align-items: center;
|
|
4465
|
-
gap:
|
|
4466
|
-
padding: 8px
|
|
4467
|
-
border: 1.5px solid rgba(125, 91, 57, 0.
|
|
4599
|
+
gap: 3px;
|
|
4600
|
+
padding: 10px 8px;
|
|
4601
|
+
border: 1.5px solid rgba(125, 91, 57, 0.2);
|
|
4468
4602
|
border-radius: 10px;
|
|
4469
|
-
background: rgba(255, 255, 255, 0.
|
|
4603
|
+
background: rgba(255, 255, 255, 0.6);
|
|
4470
4604
|
cursor: pointer;
|
|
4471
4605
|
transition: border-color var(--transition-fast), box-shadow var(--transition-fast), background var(--transition-fast);
|
|
4472
4606
|
text-align: center;
|
|
@@ -4486,13 +4620,13 @@
|
|
|
4486
4620
|
box-shadow: 0 0 0 1.5px var(--accent-muted);
|
|
4487
4621
|
}
|
|
4488
4622
|
.mode-card-label {
|
|
4489
|
-
font-size: 0.
|
|
4623
|
+
font-size: 0.8rem;
|
|
4490
4624
|
font-weight: 600;
|
|
4491
4625
|
color: var(--text-primary);
|
|
4492
4626
|
line-height: 1.3;
|
|
4493
4627
|
}
|
|
4494
4628
|
.mode-card-desc {
|
|
4495
|
-
font-size: 0.
|
|
4629
|
+
font-size: 0.68rem;
|
|
4496
4630
|
color: var(--text-muted);
|
|
4497
4631
|
line-height: 1.3;
|
|
4498
4632
|
}
|
|
@@ -5570,6 +5704,53 @@
|
|
|
5570
5704
|
}
|
|
5571
5705
|
}
|
|
5572
5706
|
|
|
5707
|
+
.session-kind-badge {
|
|
5708
|
+
display: inline-flex;
|
|
5709
|
+
align-items: center;
|
|
5710
|
+
height: 18px;
|
|
5711
|
+
padding: 0 6px;
|
|
5712
|
+
border-radius: 999px;
|
|
5713
|
+
font-size: 0.6875rem;
|
|
5714
|
+
font-weight: 600;
|
|
5715
|
+
letter-spacing: 0.01em;
|
|
5716
|
+
border: 1px solid transparent;
|
|
5717
|
+
flex-shrink: 0;
|
|
5718
|
+
}
|
|
5719
|
+
|
|
5720
|
+
.session-kind-badge.pty {
|
|
5721
|
+
color: var(--text-secondary);
|
|
5722
|
+
background: rgba(120, 128, 140, 0.12);
|
|
5723
|
+
border-color: rgba(120, 128, 140, 0.18);
|
|
5724
|
+
}
|
|
5725
|
+
|
|
5726
|
+
.session-kind-badge.structured {
|
|
5727
|
+
color: #d18b52;
|
|
5728
|
+
background: rgba(215, 122, 82, 0.10);
|
|
5729
|
+
border-color: rgba(215, 122, 82, 0.22);
|
|
5730
|
+
}
|
|
5731
|
+
|
|
5732
|
+
.session-kind-display {
|
|
5733
|
+
display: inline-flex;
|
|
5734
|
+
align-items: center;
|
|
5735
|
+
padding: 1px 6px;
|
|
5736
|
+
border-radius: 999px;
|
|
5737
|
+
font-size: 0.6875rem;
|
|
5738
|
+
font-weight: 600;
|
|
5739
|
+
color: #8a4b24;
|
|
5740
|
+
background: rgba(215, 122, 82, 0.12);
|
|
5741
|
+
border: 1px solid rgba(215, 122, 82, 0.2);
|
|
5742
|
+
}
|
|
5743
|
+
|
|
5744
|
+
.structured-tool-hint {
|
|
5745
|
+
margin: 4px 0 8px;
|
|
5746
|
+
padding: 6px 10px;
|
|
5747
|
+
border-radius: 10px;
|
|
5748
|
+
font-size: 0.75rem;
|
|
5749
|
+
color: var(--text-muted);
|
|
5750
|
+
background: rgba(215, 122, 82, 0.08);
|
|
5751
|
+
border: 1px dashed rgba(215, 122, 82, 0.18);
|
|
5752
|
+
}
|
|
5753
|
+
|
|
5573
5754
|
.blank-chat {
|
|
5574
5755
|
display: flex;
|
|
5575
5756
|
align-items: center;
|
|
@@ -5579,6 +5760,7 @@
|
|
|
5579
5760
|
min-height: 0;
|
|
5580
5761
|
overflow: auto;
|
|
5581
5762
|
}
|
|
5763
|
+
|
|
5582
5764
|
.blank-chat-inner {
|
|
5583
5765
|
width: 100%;
|
|
5584
5766
|
max-width: 560px;
|
|
@@ -7287,4 +7469,88 @@
|
|
|
7287
7469
|
z-index: 20;
|
|
7288
7470
|
}
|
|
7289
7471
|
|
|
7472
|
+
/* ── 结构化会话状态条 ── */
|
|
7473
|
+
.structured-status-bar {
|
|
7474
|
+
display: flex;
|
|
7475
|
+
align-items: center;
|
|
7476
|
+
gap: 10px;
|
|
7477
|
+
margin: 8px 0 4px;
|
|
7478
|
+
padding: 8px 12px;
|
|
7479
|
+
border-radius: var(--radius-sm);
|
|
7480
|
+
background: rgba(var(--accent-rgb, 99, 102, 241), 0.06);
|
|
7481
|
+
border: 1px solid rgba(var(--accent-rgb, 99, 102, 241), 0.12);
|
|
7482
|
+
font-size: 0.75rem;
|
|
7483
|
+
color: var(--text-secondary);
|
|
7484
|
+
transition: all 0.3s ease;
|
|
7485
|
+
overflow: hidden;
|
|
7486
|
+
}
|
|
7487
|
+
|
|
7488
|
+
.structured-status-bar .status-bar-label {
|
|
7489
|
+
flex-shrink: 0;
|
|
7490
|
+
font-weight: 600;
|
|
7491
|
+
color: var(--accent-soft);
|
|
7492
|
+
}
|
|
7493
|
+
|
|
7494
|
+
.structured-status-bar .status-bar-track {
|
|
7495
|
+
flex: 1;
|
|
7496
|
+
height: 3px;
|
|
7497
|
+
border-radius: 2px;
|
|
7498
|
+
background: rgba(var(--accent-rgb, 99, 102, 241), 0.1);
|
|
7499
|
+
overflow: hidden;
|
|
7500
|
+
position: relative;
|
|
7501
|
+
}
|
|
7502
|
+
|
|
7503
|
+
.structured-status-bar .status-bar-fill {
|
|
7504
|
+
position: absolute;
|
|
7505
|
+
top: 0;
|
|
7506
|
+
left: 0;
|
|
7507
|
+
width: 40%;
|
|
7508
|
+
height: 100%;
|
|
7509
|
+
border-radius: 2px;
|
|
7510
|
+
background: linear-gradient(90deg, transparent, var(--accent-soft), transparent);
|
|
7511
|
+
animation: marqueeScroll 1.5s ease-in-out infinite;
|
|
7512
|
+
}
|
|
7513
|
+
|
|
7514
|
+
@keyframes marqueeScroll {
|
|
7515
|
+
0% { left: -40%; }
|
|
7516
|
+
100% { left: 100%; }
|
|
7517
|
+
}
|
|
7518
|
+
|
|
7519
|
+
.structured-status-bar .status-bar-timer {
|
|
7520
|
+
flex-shrink: 0;
|
|
7521
|
+
font-variant-numeric: tabular-nums;
|
|
7522
|
+
font-family: var(--font-mono);
|
|
7523
|
+
font-size: 0.6875rem;
|
|
7524
|
+
color: var(--text-muted);
|
|
7525
|
+
}
|
|
7526
|
+
|
|
7527
|
+
/* 完成态 */
|
|
7528
|
+
.structured-status-bar.completed {
|
|
7529
|
+
background: rgba(79, 122, 88, 0.06);
|
|
7530
|
+
border-color: rgba(79, 122, 88, 0.15);
|
|
7531
|
+
animation: statusBarFadeOut 2s ease-out 1s forwards;
|
|
7532
|
+
}
|
|
7533
|
+
|
|
7534
|
+
.structured-status-bar.completed .status-bar-label {
|
|
7535
|
+
color: var(--success);
|
|
7536
|
+
}
|
|
7537
|
+
|
|
7538
|
+
.structured-status-bar.completed .status-bar-track {
|
|
7539
|
+
background: rgba(79, 122, 88, 0.1);
|
|
7540
|
+
}
|
|
7541
|
+
|
|
7542
|
+
.structured-status-bar.completed .status-bar-fill {
|
|
7543
|
+
width: 100%;
|
|
7544
|
+
background: var(--success);
|
|
7545
|
+
opacity: 0.5;
|
|
7546
|
+
animation: none;
|
|
7547
|
+
left: 0;
|
|
7548
|
+
}
|
|
7549
|
+
|
|
7550
|
+
@keyframes statusBarFadeOut {
|
|
7551
|
+
0% { opacity: 1; max-height: 50px; margin: 8px 0 4px; padding: 8px 12px; }
|
|
7552
|
+
70% { opacity: 0; max-height: 50px; margin: 8px 0 4px; padding: 8px 12px; }
|
|
7553
|
+
100% { opacity: 0; max-height: 0; margin: 0; padding: 0 12px; border-width: 0; }
|
|
7554
|
+
}
|
|
7555
|
+
|
|
7290
7556
|
/* 结束标记 */
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@co0ontty/wand",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.4.0",
|
|
4
4
|
"description": "A web terminal for local CLI tools like Claude.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -37,6 +37,7 @@
|
|
|
37
37
|
"@xterm/addon-fit": "^0.11.0",
|
|
38
38
|
"express": "^4.21.2",
|
|
39
39
|
"node-pty": "^1.1.0",
|
|
40
|
+
"puppeteer": "^24.40.0",
|
|
40
41
|
"ws": "^8.19.0",
|
|
41
42
|
"xterm": "^5.3.0",
|
|
42
43
|
"xterm-addon-serialize": "^0.11.0"
|