@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.
@@ -269,8 +269,9 @@
269
269
  }
270
270
 
271
271
  .floating-sidebar-toggle.active {
272
- background: rgba(197, 101, 61, 0.1);
273
- border-color: rgba(197, 101, 61, 0.2);
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: 1px;
4466
- padding: 8px 4px;
4467
- border: 1.5px solid rgba(125, 91, 57, 0.15);
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.55);
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.75rem;
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.625rem;
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.4",
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"