@brainpilot/web 0.0.10 → 0.0.11
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/assets/index-DkoqxJfs.css +1 -0
- package/dist/assets/index-DtLW483q.js +451 -0
- package/dist/index.html +2 -2
- package/package.json +2 -2
- package/src/__tests__/messageGroups.test.ts +150 -0
- package/src/__tests__/newUiEvents.test.ts +32 -0
- package/src/components/chat/MessageStream.tsx +102 -32
- package/src/components/chat/PromptComposer.tsx +1 -0
- package/src/components/demo/DemoView.tsx +1 -1
- package/src/components/session/AgentTraceViews.tsx +5 -9
- package/src/components/settings/KnowledgeBasePanel.tsx +307 -143
- package/src/components/settings/SettingsDialog.tsx +115 -57
- package/src/components/shell/SandboxStatus.tsx +128 -84
- package/src/contexts/messageGroups.ts +110 -4
- package/src/contexts/messageReducer.ts +11 -1
- package/src/i18n/messages/chat.ts +10 -0
- package/src/i18n/messages/sandbox.ts +3 -0
- package/src/i18n/messages/settings.ts +40 -4
- package/src/i18n/messages/trace.ts +0 -2
- package/src/styles/global.css +821 -69
- package/src/utils/api.ts +63 -0
- package/dist/assets/index-D63mUJxx.js +0 -450
- package/dist/assets/index-D8J9Cnup.css +0 -1
package/src/styles/global.css
CHANGED
|
@@ -807,6 +807,17 @@ button {
|
|
|
807
807
|
letter-spacing: -0.01em;
|
|
808
808
|
}
|
|
809
809
|
|
|
810
|
+
.workspace-panel__title-icon {
|
|
811
|
+
display: inline-flex;
|
|
812
|
+
align-items: center;
|
|
813
|
+
gap: 9px;
|
|
814
|
+
}
|
|
815
|
+
|
|
816
|
+
.workspace-panel__title-icon svg {
|
|
817
|
+
color: var(--color-text-subtle);
|
|
818
|
+
flex: 0 0 auto;
|
|
819
|
+
}
|
|
820
|
+
|
|
810
821
|
.workspace-panel__eyebrow {
|
|
811
822
|
color: var(--color-text-muted);
|
|
812
823
|
font-size: 12px;
|
|
@@ -2807,6 +2818,88 @@ button {
|
|
|
2807
2818
|
cursor: pointer;
|
|
2808
2819
|
}
|
|
2809
2820
|
|
|
2821
|
+
/* #219 — expert-agent activity group: one more disclosure level that folds a
|
|
2822
|
+
run of specialist-agent items behind the PI narrative. Reuses the activity
|
|
2823
|
+
summary idiom (chevron rotate, pulse dot) with its own slightly stronger
|
|
2824
|
+
framing so it reads as a distinct grouping, not just another thinking fold. */
|
|
2825
|
+
.expert-group {
|
|
2826
|
+
max-width: 760px;
|
|
2827
|
+
}
|
|
2828
|
+
|
|
2829
|
+
.expert-group > details > summary {
|
|
2830
|
+
display: flex;
|
|
2831
|
+
align-items: center;
|
|
2832
|
+
gap: 8px;
|
|
2833
|
+
cursor: pointer;
|
|
2834
|
+
list-style: none;
|
|
2835
|
+
font-size: 12px;
|
|
2836
|
+
color: var(--color-text-muted);
|
|
2837
|
+
padding: 5px 10px;
|
|
2838
|
+
border: 1px solid var(--color-border);
|
|
2839
|
+
border-radius: var(--radius-sm);
|
|
2840
|
+
background: var(--color-surface-soft);
|
|
2841
|
+
transition: background var(--ease-standard), color var(--ease-standard), border-color var(--ease-standard);
|
|
2842
|
+
}
|
|
2843
|
+
|
|
2844
|
+
.expert-group > details > summary::-webkit-details-marker {
|
|
2845
|
+
display: none;
|
|
2846
|
+
}
|
|
2847
|
+
|
|
2848
|
+
.expert-group > details > summary:hover {
|
|
2849
|
+
background: var(--color-hover);
|
|
2850
|
+
color: var(--color-text);
|
|
2851
|
+
border-color: var(--color-border-strong);
|
|
2852
|
+
}
|
|
2853
|
+
|
|
2854
|
+
.expert-group__icon {
|
|
2855
|
+
flex: none;
|
|
2856
|
+
color: var(--color-text-subtle);
|
|
2857
|
+
}
|
|
2858
|
+
|
|
2859
|
+
.expert-group > details[open] > summary .activity-summary__chevron {
|
|
2860
|
+
transform: rotate(180deg);
|
|
2861
|
+
}
|
|
2862
|
+
|
|
2863
|
+
/* Nested items keep their own indentation; the left rule ties them to the
|
|
2864
|
+
group header so the hierarchy (PI timeline → specialist group → reasoning/
|
|
2865
|
+
tool folds) stays legible. */
|
|
2866
|
+
.expert-group__body {
|
|
2867
|
+
display: grid;
|
|
2868
|
+
gap: 12px;
|
|
2869
|
+
margin: 10px 0 4px 6px;
|
|
2870
|
+
padding-left: 14px;
|
|
2871
|
+
border-left: 2px solid var(--color-border);
|
|
2872
|
+
}
|
|
2873
|
+
|
|
2874
|
+
/* Audit-mode toggle in the stream toolbar — quiet until hovered/active. */
|
|
2875
|
+
.message-stack__audit-toggle {
|
|
2876
|
+
display: inline-flex;
|
|
2877
|
+
align-items: center;
|
|
2878
|
+
gap: 6px;
|
|
2879
|
+
border: 1px solid var(--color-border);
|
|
2880
|
+
border-radius: var(--radius-pill);
|
|
2881
|
+
background: var(--color-surface);
|
|
2882
|
+
color: var(--color-text-muted);
|
|
2883
|
+
padding: 3px 10px;
|
|
2884
|
+
font-size: 12px;
|
|
2885
|
+
cursor: pointer;
|
|
2886
|
+
transition: background var(--ease-standard), color var(--ease-standard), border-color var(--ease-standard);
|
|
2887
|
+
}
|
|
2888
|
+
|
|
2889
|
+
.message-stack__audit-toggle:hover,
|
|
2890
|
+
.message-stack__audit-toggle:focus-visible {
|
|
2891
|
+
border-color: var(--color-border-strong);
|
|
2892
|
+
background: var(--color-hover);
|
|
2893
|
+
color: var(--color-text);
|
|
2894
|
+
outline: none;
|
|
2895
|
+
}
|
|
2896
|
+
|
|
2897
|
+
.message-stack__audit-toggle.is-active {
|
|
2898
|
+
border-color: var(--color-accent);
|
|
2899
|
+
background: var(--color-accent-soft);
|
|
2900
|
+
color: var(--color-accent-strong);
|
|
2901
|
+
}
|
|
2902
|
+
|
|
2810
2903
|
/* Expand animations — the activity body slides in when opened, its steps
|
|
2811
2904
|
stagger, and nested tool/hook bodies reveal on their own [open] toggle. */
|
|
2812
2905
|
@media (prefers-reduced-motion: no-preference) {
|
|
@@ -3313,135 +3406,239 @@ button {
|
|
|
3313
3406
|
pointer-events: auto;
|
|
3314
3407
|
}
|
|
3315
3408
|
|
|
3316
|
-
|
|
3409
|
+
/* Small muted eyebrow — also reused by the app-bootstrapping splash. */
|
|
3410
|
+
.sandbox-status__eyebrow {
|
|
3411
|
+
color: var(--color-text-muted);
|
|
3412
|
+
font-size: 12px;
|
|
3413
|
+
}
|
|
3414
|
+
|
|
3415
|
+
/* Status hero: one colored dot + a primary state word + a small subtitle. */
|
|
3416
|
+
.sandbox-status__hero {
|
|
3317
3417
|
display: flex;
|
|
3318
|
-
align-items:
|
|
3319
|
-
|
|
3320
|
-
gap: 12px;
|
|
3418
|
+
align-items: flex-start;
|
|
3419
|
+
gap: 10px;
|
|
3321
3420
|
padding-bottom: 12px;
|
|
3322
3421
|
border-bottom: 1px solid var(--color-border);
|
|
3323
3422
|
}
|
|
3324
3423
|
|
|
3325
|
-
.sandbox-
|
|
3326
|
-
|
|
3327
|
-
|
|
3424
|
+
.sandbox-status__hero-dot {
|
|
3425
|
+
width: 9px;
|
|
3426
|
+
height: 9px;
|
|
3427
|
+
margin-top: 5px;
|
|
3428
|
+
flex: 0 0 9px;
|
|
3429
|
+
border-radius: 999px;
|
|
3430
|
+
background: var(--color-text-subtle);
|
|
3431
|
+
}
|
|
3432
|
+
|
|
3433
|
+
.sandbox-status__hero--connected .sandbox-status__hero-dot {
|
|
3434
|
+
background: var(--color-success);
|
|
3435
|
+
}
|
|
3436
|
+
|
|
3437
|
+
.sandbox-status__hero--disconnected .sandbox-status__hero-dot {
|
|
3438
|
+
background: var(--color-danger);
|
|
3439
|
+
}
|
|
3440
|
+
|
|
3441
|
+
.sandbox-status__hero--connecting .sandbox-status__hero-dot {
|
|
3442
|
+
background: var(--color-info);
|
|
3443
|
+
animation: sandbox-status-pulse 1.4s ease-in-out infinite;
|
|
3444
|
+
}
|
|
3445
|
+
|
|
3446
|
+
.sandbox-status__hero--creating .sandbox-status__hero-dot {
|
|
3447
|
+
background: var(--color-warning);
|
|
3448
|
+
animation: sandbox-status-pulse 1.4s ease-in-out infinite;
|
|
3449
|
+
}
|
|
3450
|
+
|
|
3451
|
+
.sandbox-status__hero-text {
|
|
3452
|
+
display: grid;
|
|
3453
|
+
gap: 2px;
|
|
3454
|
+
min-width: 0;
|
|
3328
3455
|
}
|
|
3329
3456
|
|
|
3330
|
-
.sandbox-
|
|
3457
|
+
.sandbox-status__hero-text strong {
|
|
3331
3458
|
color: var(--color-text);
|
|
3332
3459
|
font-size: 14px;
|
|
3333
3460
|
}
|
|
3334
3461
|
|
|
3335
|
-
.sandbox-
|
|
3336
|
-
margin: 12px 0 0;
|
|
3337
|
-
border: 1px solid var(--color-border);
|
|
3338
|
-
border-radius: 10px;
|
|
3339
|
-
background: var(--color-surface-soft);
|
|
3462
|
+
.sandbox-status__hero-text span {
|
|
3340
3463
|
color: var(--color-text-muted);
|
|
3341
|
-
padding: 9px 10px;
|
|
3342
3464
|
font-size: 12px;
|
|
3465
|
+
line-height: 1.45;
|
|
3343
3466
|
}
|
|
3344
3467
|
|
|
3345
|
-
.sandbox-
|
|
3468
|
+
.sandbox-status__hero-text span.is-loading::before {
|
|
3346
3469
|
display: inline-block;
|
|
3347
|
-
width:
|
|
3348
|
-
height:
|
|
3349
|
-
margin-right:
|
|
3470
|
+
width: 6px;
|
|
3471
|
+
height: 6px;
|
|
3472
|
+
margin-right: 6px;
|
|
3350
3473
|
border-radius: 999px;
|
|
3351
3474
|
background: var(--color-info);
|
|
3352
3475
|
content: "";
|
|
3476
|
+
animation: sandbox-status-pulse 1.4s ease-in-out infinite;
|
|
3353
3477
|
}
|
|
3354
3478
|
|
|
3355
|
-
.
|
|
3479
|
+
/* Resource meters: three thin horizontal bars (memory / disk / cpu). */
|
|
3480
|
+
.sandbox-status__meters {
|
|
3356
3481
|
display: grid;
|
|
3357
|
-
gap:
|
|
3358
|
-
margin:
|
|
3482
|
+
gap: 12px;
|
|
3483
|
+
margin: 14px 0;
|
|
3359
3484
|
}
|
|
3360
3485
|
|
|
3361
|
-
.sandbox-
|
|
3486
|
+
.sandbox-meter {
|
|
3362
3487
|
display: grid;
|
|
3363
|
-
|
|
3364
|
-
grid-template-columns: 76px minmax(0, 1fr);
|
|
3365
|
-
gap: 10px;
|
|
3488
|
+
gap: 5px;
|
|
3366
3489
|
}
|
|
3367
3490
|
|
|
3368
|
-
.sandbox-
|
|
3369
|
-
|
|
3370
|
-
|
|
3491
|
+
.sandbox-meter__head {
|
|
3492
|
+
display: flex;
|
|
3493
|
+
align-items: baseline;
|
|
3494
|
+
justify-content: space-between;
|
|
3495
|
+
gap: 8px;
|
|
3496
|
+
}
|
|
3497
|
+
|
|
3498
|
+
.sandbox-meter__head span {
|
|
3371
3499
|
color: var(--color-text-muted);
|
|
3500
|
+
font-size: 12px;
|
|
3372
3501
|
}
|
|
3373
3502
|
|
|
3374
|
-
.sandbox-
|
|
3375
|
-
|
|
3376
|
-
min-width: 0;
|
|
3377
|
-
margin: 0;
|
|
3503
|
+
.sandbox-meter__head strong {
|
|
3504
|
+
color: var(--color-text);
|
|
3378
3505
|
font-size: 12px;
|
|
3506
|
+
font-weight: 560;
|
|
3507
|
+
font-variant-numeric: tabular-nums;
|
|
3379
3508
|
}
|
|
3380
3509
|
|
|
3381
|
-
.sandbox-
|
|
3510
|
+
.sandbox-meter__track {
|
|
3511
|
+
height: 6px;
|
|
3382
3512
|
overflow: hidden;
|
|
3383
|
-
|
|
3384
|
-
|
|
3385
|
-
white-space: nowrap;
|
|
3513
|
+
border-radius: 999px;
|
|
3514
|
+
background: var(--color-surface-soft);
|
|
3386
3515
|
}
|
|
3387
3516
|
|
|
3388
|
-
.sandbox-
|
|
3389
|
-
display:
|
|
3390
|
-
|
|
3517
|
+
.sandbox-meter__fill {
|
|
3518
|
+
display: block;
|
|
3519
|
+
height: 100%;
|
|
3520
|
+
border-radius: 999px;
|
|
3521
|
+
background: var(--color-accent);
|
|
3522
|
+
transition: width var(--ease-layout);
|
|
3523
|
+
}
|
|
3524
|
+
|
|
3525
|
+
.sandbox-meter__fill--warning {
|
|
3526
|
+
background: var(--color-warning);
|
|
3527
|
+
}
|
|
3528
|
+
|
|
3529
|
+
.sandbox-meter__fill--critical {
|
|
3530
|
+
background: var(--color-danger);
|
|
3531
|
+
}
|
|
3532
|
+
|
|
3533
|
+
.sandbox-meter small {
|
|
3534
|
+
color: var(--color-text-subtle);
|
|
3535
|
+
font-size: 11px;
|
|
3536
|
+
}
|
|
3537
|
+
|
|
3538
|
+
/* Health chips: icon + label + status dot, color-coded. */
|
|
3539
|
+
.sandbox-status__chips {
|
|
3540
|
+
display: flex;
|
|
3541
|
+
flex-wrap: wrap;
|
|
3391
3542
|
gap: 8px;
|
|
3392
3543
|
}
|
|
3393
3544
|
|
|
3394
|
-
.sandbox-
|
|
3395
|
-
display:
|
|
3396
|
-
|
|
3397
|
-
gap:
|
|
3545
|
+
.sandbox-chip {
|
|
3546
|
+
display: inline-flex;
|
|
3547
|
+
align-items: center;
|
|
3548
|
+
gap: 6px;
|
|
3398
3549
|
border: 1px solid var(--color-border);
|
|
3399
|
-
border-radius:
|
|
3550
|
+
border-radius: 999px;
|
|
3400
3551
|
background: var(--color-surface-soft);
|
|
3401
|
-
|
|
3552
|
+
color: var(--color-text-muted);
|
|
3553
|
+
padding: 4px 10px;
|
|
3554
|
+
font-size: 12px;
|
|
3402
3555
|
}
|
|
3403
3556
|
|
|
3404
|
-
.sandbox-
|
|
3405
|
-
|
|
3406
|
-
font-size: 11px;
|
|
3557
|
+
.sandbox-chip svg {
|
|
3558
|
+
color: var(--color-text-subtle);
|
|
3407
3559
|
}
|
|
3408
3560
|
|
|
3409
|
-
.sandbox-
|
|
3410
|
-
|
|
3411
|
-
|
|
3561
|
+
.sandbox-chip__dot {
|
|
3562
|
+
width: 7px;
|
|
3563
|
+
height: 7px;
|
|
3564
|
+
border-radius: 999px;
|
|
3565
|
+
background: var(--color-text-subtle);
|
|
3566
|
+
}
|
|
3567
|
+
|
|
3568
|
+
.sandbox-chip--ok .sandbox-chip__dot {
|
|
3569
|
+
background: var(--color-success);
|
|
3570
|
+
}
|
|
3571
|
+
|
|
3572
|
+
.sandbox-chip--off .sandbox-chip__dot {
|
|
3573
|
+
background: var(--color-danger);
|
|
3574
|
+
}
|
|
3575
|
+
|
|
3576
|
+
.sandbox-chip--unknown .sandbox-chip__dot {
|
|
3577
|
+
background: var(--color-text-subtle);
|
|
3578
|
+
}
|
|
3579
|
+
|
|
3580
|
+
/* Collapsible identity details. */
|
|
3581
|
+
.sandbox-status__details {
|
|
3582
|
+
margin-top: 12px;
|
|
3583
|
+
}
|
|
3584
|
+
|
|
3585
|
+
.sandbox-status__details > summary {
|
|
3586
|
+
cursor: pointer;
|
|
3587
|
+
color: var(--color-text-muted);
|
|
3412
3588
|
font-size: 12px;
|
|
3413
|
-
|
|
3414
|
-
|
|
3415
|
-
|
|
3589
|
+
list-style: none;
|
|
3590
|
+
user-select: none;
|
|
3591
|
+
}
|
|
3592
|
+
|
|
3593
|
+
.sandbox-status__details > summary::-webkit-details-marker {
|
|
3594
|
+
display: none;
|
|
3595
|
+
}
|
|
3596
|
+
|
|
3597
|
+
.sandbox-status__details > summary::before {
|
|
3598
|
+
display: inline-block;
|
|
3599
|
+
margin-right: 6px;
|
|
3600
|
+
content: "▸";
|
|
3601
|
+
color: var(--color-text-subtle);
|
|
3602
|
+
transition: transform var(--ease-standard);
|
|
3416
3603
|
}
|
|
3417
3604
|
|
|
3418
|
-
.sandbox-
|
|
3605
|
+
.sandbox-status__details[open] > summary::before {
|
|
3606
|
+
transform: rotate(90deg);
|
|
3607
|
+
}
|
|
3608
|
+
|
|
3609
|
+
.sandbox-status__details > summary:hover,
|
|
3610
|
+
.sandbox-status__details > summary:focus-visible {
|
|
3611
|
+
color: var(--color-text);
|
|
3612
|
+
outline: none;
|
|
3613
|
+
}
|
|
3614
|
+
|
|
3615
|
+
.sandbox-status__grid {
|
|
3419
3616
|
display: grid;
|
|
3420
|
-
grid-template-columns: repeat(3, minmax(0, 1fr));
|
|
3421
3617
|
gap: 8px;
|
|
3422
|
-
margin
|
|
3618
|
+
margin: 10px 0 0;
|
|
3423
3619
|
}
|
|
3424
3620
|
|
|
3425
|
-
.sandbox-
|
|
3621
|
+
.sandbox-status__grid div {
|
|
3426
3622
|
display: grid;
|
|
3427
3623
|
min-width: 0;
|
|
3428
|
-
|
|
3429
|
-
|
|
3430
|
-
border-radius: 10px;
|
|
3431
|
-
background: var(--color-surface);
|
|
3432
|
-
padding: 8px 9px;
|
|
3624
|
+
grid-template-columns: 76px minmax(0, 1fr);
|
|
3625
|
+
gap: 10px;
|
|
3433
3626
|
}
|
|
3434
3627
|
|
|
3435
|
-
.sandbox-
|
|
3628
|
+
.sandbox-status__grid dt {
|
|
3436
3629
|
color: var(--color-text-muted);
|
|
3437
|
-
font-size: 11px;
|
|
3438
3630
|
}
|
|
3439
3631
|
|
|
3440
|
-
.sandbox-
|
|
3632
|
+
.sandbox-status__grid dt,
|
|
3633
|
+
.sandbox-status__grid dd {
|
|
3634
|
+
min-width: 0;
|
|
3635
|
+
margin: 0;
|
|
3636
|
+
font-size: 12px;
|
|
3637
|
+
}
|
|
3638
|
+
|
|
3639
|
+
.sandbox-status__grid dd {
|
|
3441
3640
|
overflow: hidden;
|
|
3442
3641
|
color: var(--color-text);
|
|
3443
|
-
font-size: 12px;
|
|
3444
|
-
font-weight: 560;
|
|
3445
3642
|
text-overflow: ellipsis;
|
|
3446
3643
|
white-space: nowrap;
|
|
3447
3644
|
}
|
|
@@ -3494,6 +3691,12 @@ button {
|
|
|
3494
3691
|
outline: none;
|
|
3495
3692
|
}
|
|
3496
3693
|
|
|
3694
|
+
.sandbox-status__actions button.is-active {
|
|
3695
|
+
border-color: var(--color-border-strong);
|
|
3696
|
+
background: var(--color-active);
|
|
3697
|
+
color: var(--color-text);
|
|
3698
|
+
}
|
|
3699
|
+
|
|
3497
3700
|
.sandbox-status__actions button:disabled {
|
|
3498
3701
|
color: var(--color-text-subtle);
|
|
3499
3702
|
opacity: 0.65;
|
|
@@ -4494,7 +4697,7 @@ button {
|
|
|
4494
4697
|
width: min(1040px, calc(100vw - 64px));
|
|
4495
4698
|
height: min(585px, calc(100vh - 64px));
|
|
4496
4699
|
aspect-ratio: 16 / 9;
|
|
4497
|
-
grid-template-rows: auto minmax(0, 1fr);
|
|
4700
|
+
grid-template-rows: auto minmax(0, 1fr) auto;
|
|
4498
4701
|
overflow: hidden;
|
|
4499
4702
|
transform: translate(-50%, -50%);
|
|
4500
4703
|
border: 1px solid var(--color-border);
|
|
@@ -5185,6 +5388,17 @@ button {
|
|
|
5185
5388
|
font-family: var(--font-mono);
|
|
5186
5389
|
}
|
|
5187
5390
|
|
|
5391
|
+
.settings-modal__footer {
|
|
5392
|
+
display: flex;
|
|
5393
|
+
justify-content: flex-end;
|
|
5394
|
+
align-items: center;
|
|
5395
|
+
border-top: 1px solid var(--color-border);
|
|
5396
|
+
background: var(--color-surface-soft);
|
|
5397
|
+
padding: 8px 18px;
|
|
5398
|
+
}
|
|
5399
|
+
|
|
5400
|
+
/* Inline checkbox row — used by the Knowledge Base panel (reuse-agent-key,
|
|
5401
|
+
per-stage toggles). Preferences uses .settings-toggle-row instead. */
|
|
5188
5402
|
.settings-check {
|
|
5189
5403
|
display: flex !important;
|
|
5190
5404
|
grid-template-columns: none !important;
|
|
@@ -5220,6 +5434,544 @@ button {
|
|
|
5220
5434
|
transform: rotate(45deg);
|
|
5221
5435
|
}
|
|
5222
5436
|
|
|
5437
|
+
/* ── Settings: empty states, preference groups, toggle rows ─────── */
|
|
5438
|
+
|
|
5439
|
+
.settings-empty {
|
|
5440
|
+
display: grid;
|
|
5441
|
+
justify-items: center;
|
|
5442
|
+
gap: 8px;
|
|
5443
|
+
border: 1px dashed var(--color-border-strong);
|
|
5444
|
+
border-radius: var(--radius-md);
|
|
5445
|
+
background: var(--color-surface-soft);
|
|
5446
|
+
padding: 32px 24px;
|
|
5447
|
+
text-align: center;
|
|
5448
|
+
}
|
|
5449
|
+
|
|
5450
|
+
.settings-empty svg {
|
|
5451
|
+
color: var(--color-text-subtle);
|
|
5452
|
+
}
|
|
5453
|
+
|
|
5454
|
+
.settings-empty strong {
|
|
5455
|
+
color: var(--color-text);
|
|
5456
|
+
font-size: 14px;
|
|
5457
|
+
}
|
|
5458
|
+
|
|
5459
|
+
.settings-empty p {
|
|
5460
|
+
max-width: 360px;
|
|
5461
|
+
margin: 0;
|
|
5462
|
+
color: var(--color-text-muted);
|
|
5463
|
+
font-size: 12px;
|
|
5464
|
+
line-height: 1.5;
|
|
5465
|
+
}
|
|
5466
|
+
|
|
5467
|
+
.settings-empty .settings-button {
|
|
5468
|
+
margin-top: 4px;
|
|
5469
|
+
}
|
|
5470
|
+
|
|
5471
|
+
.settings-group {
|
|
5472
|
+
display: grid;
|
|
5473
|
+
gap: 10px;
|
|
5474
|
+
}
|
|
5475
|
+
|
|
5476
|
+
.settings-group__title {
|
|
5477
|
+
margin: 0;
|
|
5478
|
+
color: var(--color-text-muted);
|
|
5479
|
+
font-size: 12px;
|
|
5480
|
+
font-weight: 600;
|
|
5481
|
+
text-transform: uppercase;
|
|
5482
|
+
letter-spacing: 0.4px;
|
|
5483
|
+
}
|
|
5484
|
+
|
|
5485
|
+
.settings-field--split {
|
|
5486
|
+
grid-template-columns: minmax(0, 1fr) 200px;
|
|
5487
|
+
align-items: center;
|
|
5488
|
+
gap: 16px;
|
|
5489
|
+
}
|
|
5490
|
+
|
|
5491
|
+
.settings-field__label {
|
|
5492
|
+
display: grid;
|
|
5493
|
+
gap: 2px;
|
|
5494
|
+
min-width: 0;
|
|
5495
|
+
}
|
|
5496
|
+
|
|
5497
|
+
.settings-field__label span {
|
|
5498
|
+
color: var(--color-text);
|
|
5499
|
+
font-size: 13px;
|
|
5500
|
+
}
|
|
5501
|
+
|
|
5502
|
+
.settings-field__label small {
|
|
5503
|
+
color: var(--color-text-muted);
|
|
5504
|
+
font-size: 12px;
|
|
5505
|
+
line-height: 1.45;
|
|
5506
|
+
}
|
|
5507
|
+
|
|
5508
|
+
.settings-toggle-row {
|
|
5509
|
+
display: flex !important;
|
|
5510
|
+
align-items: center;
|
|
5511
|
+
justify-content: space-between;
|
|
5512
|
+
gap: 16px;
|
|
5513
|
+
border: 1px solid var(--color-border);
|
|
5514
|
+
border-radius: var(--radius-md);
|
|
5515
|
+
background: var(--color-surface);
|
|
5516
|
+
padding: 12px;
|
|
5517
|
+
cursor: pointer;
|
|
5518
|
+
}
|
|
5519
|
+
|
|
5520
|
+
.settings-toggle-row:hover {
|
|
5521
|
+
border-color: var(--color-border-strong);
|
|
5522
|
+
}
|
|
5523
|
+
|
|
5524
|
+
.settings-toggle-row__text {
|
|
5525
|
+
display: grid;
|
|
5526
|
+
gap: 2px;
|
|
5527
|
+
min-width: 0;
|
|
5528
|
+
}
|
|
5529
|
+
|
|
5530
|
+
.settings-toggle-row__text span {
|
|
5531
|
+
color: var(--color-text);
|
|
5532
|
+
font-size: 13px;
|
|
5533
|
+
}
|
|
5534
|
+
|
|
5535
|
+
.settings-toggle-row__text small {
|
|
5536
|
+
color: var(--color-text-muted);
|
|
5537
|
+
font-size: 12px;
|
|
5538
|
+
line-height: 1.45;
|
|
5539
|
+
}
|
|
5540
|
+
|
|
5541
|
+
.settings-toggle-row input {
|
|
5542
|
+
flex: 0 0 16px;
|
|
5543
|
+
width: 16px;
|
|
5544
|
+
height: 16px;
|
|
5545
|
+
position: relative;
|
|
5546
|
+
appearance: none;
|
|
5547
|
+
border: 1px solid var(--color-border-strong);
|
|
5548
|
+
border-radius: 4px;
|
|
5549
|
+
background: var(--color-surface);
|
|
5550
|
+
padding: 0;
|
|
5551
|
+
cursor: pointer;
|
|
5552
|
+
}
|
|
5553
|
+
|
|
5554
|
+
.settings-toggle-row input:checked {
|
|
5555
|
+
border-color: var(--color-text);
|
|
5556
|
+
background: var(--color-text);
|
|
5557
|
+
}
|
|
5558
|
+
|
|
5559
|
+
.settings-toggle-row input:checked::after {
|
|
5560
|
+
position: absolute;
|
|
5561
|
+
top: 1px;
|
|
5562
|
+
left: 4px;
|
|
5563
|
+
width: 5px;
|
|
5564
|
+
height: 9px;
|
|
5565
|
+
border: solid var(--color-canvas);
|
|
5566
|
+
border-width: 0 2px 2px 0;
|
|
5567
|
+
content: "";
|
|
5568
|
+
transform: rotate(45deg);
|
|
5569
|
+
}
|
|
5570
|
+
|
|
5571
|
+
/* MCP transport chip — small colored label beside a server name. */
|
|
5572
|
+
.mcp-transport-chip {
|
|
5573
|
+
flex: 0 0 auto;
|
|
5574
|
+
border: 1px solid var(--color-border);
|
|
5575
|
+
border-radius: 999px;
|
|
5576
|
+
background: var(--color-surface-soft);
|
|
5577
|
+
color: var(--color-text-muted);
|
|
5578
|
+
padding: 1px 8px;
|
|
5579
|
+
font-size: 11px;
|
|
5580
|
+
font-weight: 500;
|
|
5581
|
+
letter-spacing: 0.2px;
|
|
5582
|
+
text-transform: uppercase;
|
|
5583
|
+
}
|
|
5584
|
+
|
|
5585
|
+
.mcp-transport-chip--stdio {
|
|
5586
|
+
border-color: var(--color-accent-soft);
|
|
5587
|
+
background: var(--color-accent-soft);
|
|
5588
|
+
color: var(--color-accent-strong);
|
|
5589
|
+
}
|
|
5590
|
+
|
|
5591
|
+
.mcp-transport-chip--http {
|
|
5592
|
+
border-color: var(--color-success-soft);
|
|
5593
|
+
background: var(--color-success-soft);
|
|
5594
|
+
color: var(--color-success);
|
|
5595
|
+
}
|
|
5596
|
+
|
|
5597
|
+
.mcp-transport-chip--sse {
|
|
5598
|
+
border-color: var(--color-warning-soft);
|
|
5599
|
+
background: var(--color-warning-soft);
|
|
5600
|
+
color: var(--color-warning);
|
|
5601
|
+
}
|
|
5602
|
+
|
|
5603
|
+
/* ── Knowledge Base panel (Settings › Knowledge Base) ───────────── */
|
|
5604
|
+
|
|
5605
|
+
.kb-panel__title {
|
|
5606
|
+
display: flex;
|
|
5607
|
+
align-items: center;
|
|
5608
|
+
gap: 8px;
|
|
5609
|
+
}
|
|
5610
|
+
|
|
5611
|
+
.kb-panel__title svg {
|
|
5612
|
+
color: var(--color-text-subtle);
|
|
5613
|
+
}
|
|
5614
|
+
|
|
5615
|
+
/* Environment status card. */
|
|
5616
|
+
.kb-env {
|
|
5617
|
+
display: grid;
|
|
5618
|
+
gap: 10px;
|
|
5619
|
+
border: 1px solid var(--color-border);
|
|
5620
|
+
border-radius: var(--radius-md);
|
|
5621
|
+
background: var(--color-surface-soft);
|
|
5622
|
+
padding: 12px;
|
|
5623
|
+
}
|
|
5624
|
+
|
|
5625
|
+
.kb-env--missing {
|
|
5626
|
+
border-color: var(--color-warning-soft);
|
|
5627
|
+
}
|
|
5628
|
+
|
|
5629
|
+
.kb-env__head {
|
|
5630
|
+
display: flex;
|
|
5631
|
+
}
|
|
5632
|
+
|
|
5633
|
+
.kb-env__facts {
|
|
5634
|
+
display: grid;
|
|
5635
|
+
gap: 6px;
|
|
5636
|
+
margin: 0;
|
|
5637
|
+
}
|
|
5638
|
+
|
|
5639
|
+
.kb-env__facts div {
|
|
5640
|
+
display: grid;
|
|
5641
|
+
grid-template-columns: 84px minmax(0, 1fr);
|
|
5642
|
+
gap: 10px;
|
|
5643
|
+
min-width: 0;
|
|
5644
|
+
}
|
|
5645
|
+
|
|
5646
|
+
.kb-env__facts dt {
|
|
5647
|
+
margin: 0;
|
|
5648
|
+
color: var(--color-text-muted);
|
|
5649
|
+
font-size: 12px;
|
|
5650
|
+
}
|
|
5651
|
+
|
|
5652
|
+
.kb-env__facts dd {
|
|
5653
|
+
margin: 0;
|
|
5654
|
+
overflow: hidden;
|
|
5655
|
+
color: var(--color-text);
|
|
5656
|
+
font-family: var(--font-mono);
|
|
5657
|
+
font-size: 12px;
|
|
5658
|
+
text-overflow: ellipsis;
|
|
5659
|
+
white-space: nowrap;
|
|
5660
|
+
}
|
|
5661
|
+
|
|
5662
|
+
.kb-env__action {
|
|
5663
|
+
display: grid;
|
|
5664
|
+
gap: 8px;
|
|
5665
|
+
}
|
|
5666
|
+
|
|
5667
|
+
.kb-env__note {
|
|
5668
|
+
margin: 0;
|
|
5669
|
+
color: var(--color-text-muted);
|
|
5670
|
+
font-size: 12px;
|
|
5671
|
+
line-height: 1.5;
|
|
5672
|
+
}
|
|
5673
|
+
|
|
5674
|
+
.kb-env__buttons {
|
|
5675
|
+
display: flex;
|
|
5676
|
+
align-items: center;
|
|
5677
|
+
flex-wrap: wrap;
|
|
5678
|
+
gap: 8px;
|
|
5679
|
+
}
|
|
5680
|
+
|
|
5681
|
+
.kb-env__fallback > summary {
|
|
5682
|
+
cursor: pointer;
|
|
5683
|
+
color: var(--color-text-muted);
|
|
5684
|
+
font-size: 12px;
|
|
5685
|
+
list-style: none;
|
|
5686
|
+
user-select: none;
|
|
5687
|
+
}
|
|
5688
|
+
|
|
5689
|
+
.kb-env__fallback > summary::-webkit-details-marker {
|
|
5690
|
+
display: none;
|
|
5691
|
+
}
|
|
5692
|
+
|
|
5693
|
+
.kb-env__fallback > summary::before {
|
|
5694
|
+
display: inline-block;
|
|
5695
|
+
margin-right: 6px;
|
|
5696
|
+
content: "▸";
|
|
5697
|
+
color: var(--color-text-subtle);
|
|
5698
|
+
transition: transform var(--ease-standard);
|
|
5699
|
+
}
|
|
5700
|
+
|
|
5701
|
+
.kb-env__fallback[open] > summary::before {
|
|
5702
|
+
transform: rotate(90deg);
|
|
5703
|
+
}
|
|
5704
|
+
|
|
5705
|
+
.kb-env__fallback > summary:hover {
|
|
5706
|
+
color: var(--color-text);
|
|
5707
|
+
}
|
|
5708
|
+
|
|
5709
|
+
/* Shared mono code block (CLI fallback). */
|
|
5710
|
+
.kb-code {
|
|
5711
|
+
margin: 8px 0 6px;
|
|
5712
|
+
overflow-x: auto;
|
|
5713
|
+
border: 1px solid var(--color-border);
|
|
5714
|
+
border-radius: var(--radius-sm);
|
|
5715
|
+
background: var(--color-code-bg);
|
|
5716
|
+
color: var(--color-text);
|
|
5717
|
+
padding: 9px 10px;
|
|
5718
|
+
font-family: var(--font-mono);
|
|
5719
|
+
font-size: 12px;
|
|
5720
|
+
}
|
|
5721
|
+
|
|
5722
|
+
/* Key inputs + stages. */
|
|
5723
|
+
.kb-fields {
|
|
5724
|
+
display: grid;
|
|
5725
|
+
gap: 14px;
|
|
5726
|
+
margin-top: 14px;
|
|
5727
|
+
}
|
|
5728
|
+
|
|
5729
|
+
.kb-stages {
|
|
5730
|
+
margin: 0;
|
|
5731
|
+
border: 0;
|
|
5732
|
+
padding: 0;
|
|
5733
|
+
}
|
|
5734
|
+
|
|
5735
|
+
.kb-stages > legend {
|
|
5736
|
+
margin-bottom: 8px;
|
|
5737
|
+
padding: 0;
|
|
5738
|
+
color: var(--color-text-muted);
|
|
5739
|
+
font-size: 12px;
|
|
5740
|
+
}
|
|
5741
|
+
|
|
5742
|
+
.kb-stages__row {
|
|
5743
|
+
display: flex;
|
|
5744
|
+
flex-wrap: wrap;
|
|
5745
|
+
gap: 8px;
|
|
5746
|
+
}
|
|
5747
|
+
|
|
5748
|
+
.kb-stages__item {
|
|
5749
|
+
margin: 0 !important;
|
|
5750
|
+
border: 1px solid var(--color-border);
|
|
5751
|
+
border-radius: var(--radius-sm);
|
|
5752
|
+
background: var(--color-surface);
|
|
5753
|
+
padding: 7px 10px;
|
|
5754
|
+
cursor: pointer;
|
|
5755
|
+
}
|
|
5756
|
+
|
|
5757
|
+
.kb-stages__item:hover {
|
|
5758
|
+
border-color: var(--color-border-strong);
|
|
5759
|
+
}
|
|
5760
|
+
|
|
5761
|
+
.kb-actions {
|
|
5762
|
+
display: flex;
|
|
5763
|
+
align-items: center;
|
|
5764
|
+
gap: 8px;
|
|
5765
|
+
margin-top: 14px;
|
|
5766
|
+
}
|
|
5767
|
+
|
|
5768
|
+
.kb-error {
|
|
5769
|
+
margin-top: 10px;
|
|
5770
|
+
}
|
|
5771
|
+
|
|
5772
|
+
/* Blocks: progress + log. */
|
|
5773
|
+
.kb-block {
|
|
5774
|
+
margin-top: 18px;
|
|
5775
|
+
}
|
|
5776
|
+
|
|
5777
|
+
.kb-block__title {
|
|
5778
|
+
margin: 0 0 10px;
|
|
5779
|
+
color: var(--color-text);
|
|
5780
|
+
font-size: 13px;
|
|
5781
|
+
font-weight: 600;
|
|
5782
|
+
}
|
|
5783
|
+
|
|
5784
|
+
/* Stage progress strip. */
|
|
5785
|
+
.kb-progress {
|
|
5786
|
+
display: grid;
|
|
5787
|
+
gap: 10px;
|
|
5788
|
+
}
|
|
5789
|
+
|
|
5790
|
+
.kb-progress__row {
|
|
5791
|
+
display: grid;
|
|
5792
|
+
grid-template-columns: 88px minmax(0, 1fr) 44px;
|
|
5793
|
+
align-items: center;
|
|
5794
|
+
gap: 10px;
|
|
5795
|
+
}
|
|
5796
|
+
|
|
5797
|
+
.kb-progress__label {
|
|
5798
|
+
color: var(--color-text);
|
|
5799
|
+
font-size: 12px;
|
|
5800
|
+
font-weight: 560;
|
|
5801
|
+
}
|
|
5802
|
+
|
|
5803
|
+
.kb-progress__track {
|
|
5804
|
+
height: 6px;
|
|
5805
|
+
overflow: hidden;
|
|
5806
|
+
border-radius: 999px;
|
|
5807
|
+
background: var(--color-surface-soft);
|
|
5808
|
+
}
|
|
5809
|
+
|
|
5810
|
+
.kb-progress__fill {
|
|
5811
|
+
display: block;
|
|
5812
|
+
height: 100%;
|
|
5813
|
+
border-radius: 999px;
|
|
5814
|
+
background: var(--color-border-strong);
|
|
5815
|
+
transition: width var(--ease-standard);
|
|
5816
|
+
}
|
|
5817
|
+
|
|
5818
|
+
.kb-progress__fill--running {
|
|
5819
|
+
background: var(--color-accent);
|
|
5820
|
+
}
|
|
5821
|
+
|
|
5822
|
+
.kb-progress__fill--done {
|
|
5823
|
+
background: var(--color-success);
|
|
5824
|
+
}
|
|
5825
|
+
|
|
5826
|
+
.kb-progress__fill--error {
|
|
5827
|
+
background: var(--color-danger);
|
|
5828
|
+
}
|
|
5829
|
+
|
|
5830
|
+
.kb-progress__pct {
|
|
5831
|
+
color: var(--color-text-muted);
|
|
5832
|
+
font-size: 12px;
|
|
5833
|
+
font-variant-numeric: tabular-nums;
|
|
5834
|
+
text-align: right;
|
|
5835
|
+
}
|
|
5836
|
+
|
|
5837
|
+
.kb-progress__msg {
|
|
5838
|
+
grid-column: 2 / -1;
|
|
5839
|
+
color: var(--color-text-subtle);
|
|
5840
|
+
font-size: 12px;
|
|
5841
|
+
}
|
|
5842
|
+
|
|
5843
|
+
/* Live log — mono terminal block using code-surface tokens. */
|
|
5844
|
+
.kb-log {
|
|
5845
|
+
max-height: 220px;
|
|
5846
|
+
overflow-y: auto;
|
|
5847
|
+
border: 1px solid var(--color-border);
|
|
5848
|
+
border-radius: var(--radius-sm);
|
|
5849
|
+
background: var(--color-code-bg);
|
|
5850
|
+
color: var(--color-text);
|
|
5851
|
+
padding: 9px 10px;
|
|
5852
|
+
font-family: var(--font-mono);
|
|
5853
|
+
font-size: 12px;
|
|
5854
|
+
line-height: 1.55;
|
|
5855
|
+
white-space: pre-wrap;
|
|
5856
|
+
word-break: break-word;
|
|
5857
|
+
}
|
|
5858
|
+
|
|
5859
|
+
.kb-log__empty {
|
|
5860
|
+
color: var(--color-text-subtle);
|
|
5861
|
+
}
|
|
5862
|
+
|
|
5863
|
+
.kb-log__line--error {
|
|
5864
|
+
color: var(--color-danger);
|
|
5865
|
+
}
|
|
5866
|
+
|
|
5867
|
+
.kb-log__line--warn {
|
|
5868
|
+
color: var(--color-warning);
|
|
5869
|
+
}
|
|
5870
|
+
|
|
5871
|
+
.kb-log__line--done {
|
|
5872
|
+
color: var(--color-success);
|
|
5873
|
+
}
|
|
5874
|
+
|
|
5875
|
+
.kb-log__line--progress {
|
|
5876
|
+
color: var(--color-accent);
|
|
5877
|
+
}
|
|
5878
|
+
|
|
5879
|
+
/* #236 KB hardening surfaces, re-tokenized (dark-mode safe). */
|
|
5880
|
+
|
|
5881
|
+
/* Setup progress rows (venv + model download) in the env card. */
|
|
5882
|
+
.kb-setup-rows {
|
|
5883
|
+
display: flex;
|
|
5884
|
+
flex-direction: column;
|
|
5885
|
+
gap: 10px;
|
|
5886
|
+
margin-top: 12px;
|
|
5887
|
+
}
|
|
5888
|
+
|
|
5889
|
+
.kb-setup-row__head {
|
|
5890
|
+
display: flex;
|
|
5891
|
+
justify-content: space-between;
|
|
5892
|
+
align-items: baseline;
|
|
5893
|
+
gap: 8px;
|
|
5894
|
+
margin-bottom: 4px;
|
|
5895
|
+
}
|
|
5896
|
+
|
|
5897
|
+
.kb-setup-row__label {
|
|
5898
|
+
color: var(--color-text);
|
|
5899
|
+
font-size: 12px;
|
|
5900
|
+
font-weight: 560;
|
|
5901
|
+
}
|
|
5902
|
+
|
|
5903
|
+
.kb-setup-row__pct {
|
|
5904
|
+
color: var(--color-text-muted);
|
|
5905
|
+
font-size: 12px;
|
|
5906
|
+
font-variant-numeric: tabular-nums;
|
|
5907
|
+
}
|
|
5908
|
+
|
|
5909
|
+
.kb-setup-row__track {
|
|
5910
|
+
height: 6px;
|
|
5911
|
+
overflow: hidden;
|
|
5912
|
+
border-radius: 999px;
|
|
5913
|
+
background: var(--color-surface-soft);
|
|
5914
|
+
}
|
|
5915
|
+
|
|
5916
|
+
.kb-setup-row__fill {
|
|
5917
|
+
display: block;
|
|
5918
|
+
height: 100%;
|
|
5919
|
+
border-radius: 999px;
|
|
5920
|
+
background: var(--color-accent);
|
|
5921
|
+
transition: width 250ms var(--ease-out);
|
|
5922
|
+
}
|
|
5923
|
+
|
|
5924
|
+
.kb-setup-row__fill--done {
|
|
5925
|
+
background: var(--color-success);
|
|
5926
|
+
}
|
|
5927
|
+
|
|
5928
|
+
.kb-setup-row__fill--error {
|
|
5929
|
+
background: var(--color-danger);
|
|
5930
|
+
}
|
|
5931
|
+
|
|
5932
|
+
.kb-setup-row__msg {
|
|
5933
|
+
margin-top: 3px;
|
|
5934
|
+
overflow: hidden;
|
|
5935
|
+
color: var(--color-text-subtle);
|
|
5936
|
+
font-size: 11px;
|
|
5937
|
+
text-overflow: ellipsis;
|
|
5938
|
+
white-space: nowrap;
|
|
5939
|
+
}
|
|
5940
|
+
|
|
5941
|
+
.kb-setup-row__msg--error {
|
|
5942
|
+
color: var(--color-danger);
|
|
5943
|
+
}
|
|
5944
|
+
|
|
5945
|
+
/* Persisted OCR key: masked-preview box + Change button. */
|
|
5946
|
+
.kb-key-saved-row {
|
|
5947
|
+
display: flex;
|
|
5948
|
+
align-items: center;
|
|
5949
|
+
gap: 8px;
|
|
5950
|
+
}
|
|
5951
|
+
|
|
5952
|
+
.kb-key-saved {
|
|
5953
|
+
flex: 1;
|
|
5954
|
+
min-width: 0;
|
|
5955
|
+
overflow: hidden;
|
|
5956
|
+
border: 1px solid var(--color-success-soft);
|
|
5957
|
+
border-radius: var(--radius-sm);
|
|
5958
|
+
background: var(--color-success-soft);
|
|
5959
|
+
color: var(--color-success);
|
|
5960
|
+
padding: 6px 10px;
|
|
5961
|
+
font-family: var(--font-mono);
|
|
5962
|
+
font-size: 13px;
|
|
5963
|
+
text-overflow: ellipsis;
|
|
5964
|
+
white-space: nowrap;
|
|
5965
|
+
}
|
|
5966
|
+
|
|
5967
|
+
/* Inline field hint (e.g. HF mirror explanation). */
|
|
5968
|
+
.kb-field-hint {
|
|
5969
|
+
margin: -4px 0 8px 24px;
|
|
5970
|
+
color: var(--color-text-muted);
|
|
5971
|
+
font-size: 12px;
|
|
5972
|
+
line-height: 1.45;
|
|
5973
|
+
}
|
|
5974
|
+
|
|
5223
5975
|
@media (max-width: 860px) {
|
|
5224
5976
|
.search-dialog {
|
|
5225
5977
|
width: calc(100vw - 28px);
|