protocol-proxy 2.8.3 → 2.10.1

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/public/style.css CHANGED
@@ -1781,8 +1781,8 @@ body {
1781
1781
 
1782
1782
  /* ---------- Selection ---------- */
1783
1783
  ::selection {
1784
- background: var(--accent-subtle);
1785
- color: var(--accent);
1784
+ background: var(--accent);
1785
+ color: var(--text-inverse);
1786
1786
  }
1787
1787
 
1788
1788
  /* ---------- Assistant Page ---------- */
@@ -1828,6 +1828,86 @@ body {
1828
1828
  cursor: pointer;
1829
1829
  }
1830
1830
 
1831
+ .conversation-dropdown {
1832
+ position: relative;
1833
+ }
1834
+ .conversation-dropdown-trigger {
1835
+ height: 32px;
1836
+ padding: 0 10px;
1837
+ background: var(--bg-elevated);
1838
+ border: 1px solid var(--border-default);
1839
+ border-radius: var(--radius-md);
1840
+ color: var(--text-primary);
1841
+ font-size: 13px;
1842
+ font-family: var(--font-body);
1843
+ cursor: pointer;
1844
+ text-align: left;
1845
+ min-width: 180px;
1846
+ max-width: 260px;
1847
+ overflow: hidden;
1848
+ text-overflow: ellipsis;
1849
+ white-space: nowrap;
1850
+ }
1851
+ .conversation-dropdown-menu {
1852
+ display: none;
1853
+ position: absolute;
1854
+ top: 100%;
1855
+ left: 0;
1856
+ z-index: 100;
1857
+ min-width: 280px;
1858
+ max-height: 320px;
1859
+ overflow-y: auto;
1860
+ background: var(--bg-elevated);
1861
+ border: 1px solid var(--border-default);
1862
+ border-radius: var(--radius-md);
1863
+ box-shadow: 0 4px 12px rgba(0,0,0,0.15);
1864
+ margin-top: 4px;
1865
+ }
1866
+ .conversation-dropdown-menu.open {
1867
+ display: block;
1868
+ }
1869
+ .conversation-dropdown-item {
1870
+ display: flex;
1871
+ align-items: center;
1872
+ justify-content: space-between;
1873
+ padding: 8px 10px;
1874
+ cursor: pointer;
1875
+ font-size: 13px;
1876
+ gap: 8px;
1877
+ }
1878
+ .conversation-dropdown-item:hover {
1879
+ background: var(--bg-hover);
1880
+ }
1881
+ .conversation-dropdown-item.active {
1882
+ background: var(--bg-selected);
1883
+ }
1884
+ .conversation-dropdown-item-label {
1885
+ flex: 1;
1886
+ overflow: hidden;
1887
+ text-overflow: ellipsis;
1888
+ white-space: nowrap;
1889
+ color: var(--text-primary);
1890
+ }
1891
+ .conversation-dropdown-item-delete {
1892
+ flex-shrink: 0;
1893
+ width: 20px;
1894
+ height: 20px;
1895
+ display: flex;
1896
+ align-items: center;
1897
+ justify-content: center;
1898
+ border: none;
1899
+ background: transparent;
1900
+ color: var(--text-muted);
1901
+ cursor: pointer;
1902
+ border-radius: 4px;
1903
+ font-size: 14px;
1904
+ line-height: 1;
1905
+ }
1906
+ .conversation-dropdown-item-delete:hover {
1907
+ background: var(--error);
1908
+ color: #fff;
1909
+ }
1910
+
1831
1911
  .assistant-chat {
1832
1912
  flex: 1;
1833
1913
  overflow-y: auto;
@@ -1897,6 +1977,32 @@ body {
1897
1977
  margin-bottom: 0;
1898
1978
  }
1899
1979
 
1980
+ .think-block {
1981
+ margin: 8px 0;
1982
+ border: 1px solid var(--border-subtle);
1983
+ border-radius: var(--radius-md);
1984
+ background: var(--bg-base);
1985
+ font-size: 12px;
1986
+ }
1987
+ .think-block summary {
1988
+ padding: 6px 10px;
1989
+ cursor: pointer;
1990
+ color: var(--text-muted);
1991
+ user-select: none;
1992
+ }
1993
+ .think-block summary:hover {
1994
+ color: var(--text-secondary);
1995
+ }
1996
+ .think-content {
1997
+ padding: 8px 10px;
1998
+ border-top: 1px solid var(--border-subtle);
1999
+ color: var(--text-secondary);
2000
+ white-space: pre-wrap;
2001
+ line-height: 1.5;
2002
+ max-height: 300px;
2003
+ overflow-y: auto;
2004
+ }
2005
+
1900
2006
  .assistant-message.assistant ul,
1901
2007
  .assistant-message.assistant ol {
1902
2008
  margin: 8px 0;
@@ -1950,12 +2056,82 @@ body {
1950
2056
  margin-top: 16px;
1951
2057
  }
1952
2058
 
2059
+ .compression-summary {
2060
+ margin: 12px 24px;
2061
+ padding: 8px 12px;
2062
+ background: var(--bg-elevated);
2063
+ border: 1px solid var(--border-subtle);
2064
+ border-radius: 8px;
2065
+ font-size: 13px;
2066
+ color: var(--text-secondary);
2067
+ }
2068
+ .compression-summary summary {
2069
+ cursor: pointer;
2070
+ font-weight: 500;
2071
+ color: var(--text-primary);
2072
+ }
2073
+ .compression-summary-content {
2074
+ margin-top: 8px;
2075
+ white-space: pre-wrap;
2076
+ line-height: 1.5;
2077
+ }
2078
+
2079
+ /* 上下文占用栏 */
2080
+ .assistant-context-bar {
2081
+ display: flex;
2082
+ align-items: center;
2083
+ gap: 10px;
2084
+ padding: 6px 12px;
2085
+ flex-shrink: 0;
2086
+ border-top: 1px solid var(--border-subtle);
2087
+ }
2088
+
2089
+ .context-bar-track {
2090
+ flex: 1;
2091
+ height: 4px;
2092
+ background: var(--bg-base);
2093
+ border-radius: 2px;
2094
+ overflow: hidden;
2095
+ min-width: 60px;
2096
+ }
2097
+
2098
+ .context-bar-fill {
2099
+ height: 100%;
2100
+ border-radius: 2px;
2101
+ transition: width 0.3s ease, background 0.3s ease;
2102
+ background: var(--success);
2103
+ }
2104
+
2105
+ .context-bar-fill.mid {
2106
+ background: var(--warning);
2107
+ }
2108
+
2109
+ .context-bar-fill.high {
2110
+ background: var(--error);
2111
+ }
2112
+
2113
+ .context-bar-info {
2114
+ font-size: 11px;
2115
+ color: var(--text-muted);
2116
+ font-family: var(--font-mono);
2117
+ white-space: nowrap;
2118
+ }
2119
+
2120
+ .context-compress-btn {
2121
+ white-space: nowrap;
2122
+ color: var(--warning) !important;
2123
+ border-color: var(--warning) !important;
2124
+ }
2125
+
1953
2126
  .assistant-input-area {
1954
2127
  display: flex;
1955
2128
  gap: 8px;
1956
2129
  align-items: flex-end;
1957
2130
  flex-shrink: 0;
1958
2131
  }
2132
+ .assistant-input-area .btn {
2133
+ height: 44px;
2134
+ }
1959
2135
 
1960
2136
  .assistant-input-area textarea {
1961
2137
  flex: 1;
@@ -1992,6 +2168,13 @@ body {
1992
2168
  border: 1px solid var(--border-default);
1993
2169
  }
1994
2170
 
2171
+ .assistant-message.thinking {
2172
+ display: flex;
2173
+ gap: 5px;
2174
+ align-items: center;
2175
+ padding: 14px 18px;
2176
+ }
2177
+
1995
2178
  .assistant-dot {
1996
2179
  width: 6px;
1997
2180
  height: 6px;
@@ -2067,6 +2250,14 @@ body {
2067
2250
  color: var(--text-faint);
2068
2251
  }
2069
2252
 
2253
+ .assistant-message.tool-result.tool-error {
2254
+ border-left-color: var(--error);
2255
+ }
2256
+
2257
+ .assistant-message.tool-result.tool-error .tool-result-name {
2258
+ color: var(--error);
2259
+ }
2260
+
2070
2261
  .tool-result-header {
2071
2262
  display: flex;
2072
2263
  align-items: center;
@@ -2110,3 +2301,268 @@ body {
2110
2301
  word-break: break-all;
2111
2302
  color: var(--text-secondary);
2112
2303
  }
2304
+
2305
+ /* ========== 技能管理 ========== */
2306
+ .skill-group {
2307
+ margin-bottom: 24px;
2308
+ }
2309
+ .skills-grid {
2310
+ display: grid;
2311
+ grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
2312
+ gap: 12px;
2313
+ }
2314
+ .skill-card {
2315
+ background: var(--bg-elevated);
2316
+ border: 1px solid var(--border-default);
2317
+ border-radius: var(--radius-md);
2318
+ padding: 14px;
2319
+ display: flex;
2320
+ flex-direction: column;
2321
+ gap: 8px;
2322
+ }
2323
+ .skill-card-header {
2324
+ font-size: 14px;
2325
+ color: var(--text-primary);
2326
+ }
2327
+ .skill-card-desc {
2328
+ font-size: 12px;
2329
+ color: var(--text-muted);
2330
+ line-height: 1.4;
2331
+ flex: 1;
2332
+ }
2333
+ .skill-card-actions {
2334
+ display: flex;
2335
+ gap: 6px;
2336
+ margin-top: 4px;
2337
+ }
2338
+ .skill-panel {
2339
+ border: 1px solid var(--border-default);
2340
+ border-radius: var(--radius-md);
2341
+ background: var(--bg-elevated);
2342
+ margin-bottom: 8px;
2343
+ max-height: 200px;
2344
+ overflow-y: auto;
2345
+ }
2346
+ .skill-panel-header {
2347
+ display: flex;
2348
+ align-items: center;
2349
+ justify-content: space-between;
2350
+ padding: 8px 12px;
2351
+ font-size: 12px;
2352
+ font-weight: 600;
2353
+ color: var(--text-secondary);
2354
+ border-bottom: 1px solid var(--border-subtle);
2355
+ position: sticky;
2356
+ top: 0;
2357
+ background: var(--bg-elevated);
2358
+ }
2359
+ .skill-panel-list {
2360
+ padding: 4px;
2361
+ }
2362
+ .skill-panel-item {
2363
+ display: flex;
2364
+ align-items: center;
2365
+ gap: 8px;
2366
+ padding: 6px 8px;
2367
+ cursor: pointer;
2368
+ border-radius: var(--radius-md);
2369
+ font-size: 13px;
2370
+ }
2371
+ .skill-panel-item:hover {
2372
+ background: var(--bg-hover);
2373
+ }
2374
+ .skill-panel-badge {
2375
+ font-size: 10px;
2376
+ color: #fff;
2377
+ padding: 1px 5px;
2378
+ border-radius: 3px;
2379
+ flex-shrink: 0;
2380
+ }
2381
+ .skill-panel-item strong {
2382
+ color: var(--accent);
2383
+ white-space: nowrap;
2384
+ }
2385
+ .skill-panel-desc {
2386
+ color: var(--text-muted);
2387
+ font-size: 12px;
2388
+ overflow: hidden;
2389
+ text-overflow: ellipsis;
2390
+ white-space: nowrap;
2391
+ flex: 1;
2392
+ }
2393
+ .skill-autocomplete {
2394
+ display: none;
2395
+ position: absolute;
2396
+ bottom: 100%;
2397
+ left: 0;
2398
+ right: 0;
2399
+ max-height: 200px;
2400
+ overflow-y: auto;
2401
+ background: var(--bg-elevated);
2402
+ border: 1px solid var(--border-default);
2403
+ border-radius: var(--radius-md);
2404
+ box-shadow: 0 -4px 12px rgba(0,0,0,0.15);
2405
+ margin-bottom: 4px;
2406
+ z-index: 10;
2407
+ }
2408
+ .skill-ac-item {
2409
+ padding: 8px 12px;
2410
+ cursor: pointer;
2411
+ display: flex;
2412
+ gap: 8px;
2413
+ align-items: baseline;
2414
+ font-size: 13px;
2415
+ }
2416
+ .skill-ac-item:hover {
2417
+ background: var(--bg-hover);
2418
+ }
2419
+ .skill-ac-item strong {
2420
+ color: var(--accent);
2421
+ white-space: nowrap;
2422
+ }
2423
+ .skill-ac-desc {
2424
+ color: var(--text-muted);
2425
+ overflow: hidden;
2426
+ text-overflow: ellipsis;
2427
+ white-space: nowrap;
2428
+ font-size: 12px;
2429
+ }
2430
+ .skill-file-upload-row {
2431
+ display: flex;
2432
+ align-items: center;
2433
+ gap: 8px;
2434
+ }
2435
+ .skill-file-upload-row select {
2436
+ height: 30px;
2437
+ padding: 0 8px;
2438
+ background: var(--bg-elevated);
2439
+ border: 1px solid var(--border-default);
2440
+ border-radius: var(--radius-md);
2441
+ color: var(--text-primary);
2442
+ font-size: 12px;
2443
+ }
2444
+ .skill-file-upload-row input[type="file"] {
2445
+ font-size: 12px;
2446
+ flex: 1;
2447
+ }
2448
+ .skill-tree-dir {
2449
+ display: flex;
2450
+ align-items: center;
2451
+ gap: 4px;
2452
+ padding: 2px 0;
2453
+ cursor: pointer;
2454
+ user-select: none;
2455
+ }
2456
+ .skill-tree-dir:hover { color: var(--accent); }
2457
+ .skill-tree-arrow {
2458
+ font-size: 10px;
2459
+ transition: transform 0.15s;
2460
+ display: inline-block;
2461
+ width: 12px;
2462
+ text-align: center;
2463
+ }
2464
+ .skill-tree-file {
2465
+ display: flex;
2466
+ align-items: center;
2467
+ gap: 6px;
2468
+ padding: 1px 0;
2469
+ }
2470
+ .skill-view-content {
2471
+ font-size: 13px;
2472
+ line-height: 1.7;
2473
+ color: var(--text-primary);
2474
+ }
2475
+ .skill-view-content h1 { font-size: 20px; margin: 20px 0 10px; padding-bottom: 6px; border-bottom: 1px solid var(--border-subtle); }
2476
+ .skill-view-content h2 { font-size: 17px; margin: 18px 0 8px; }
2477
+ .skill-view-content h3 { font-size: 15px; margin: 14px 0 6px; }
2478
+ .skill-view-content p { margin: 8px 0; }
2479
+ .skill-view-content ul, .skill-view-content ol { margin: 8px 0; padding-left: 24px; }
2480
+ .skill-view-content li { margin: 4px 0; }
2481
+ .skill-view-content pre {
2482
+ background: var(--bg-base);
2483
+ padding: 12px;
2484
+ border-radius: var(--radius-md);
2485
+ overflow-x: auto;
2486
+ font-size: 12px;
2487
+ border: 1px solid var(--border-subtle);
2488
+ margin: 10px 0;
2489
+ }
2490
+ .skill-view-content code {
2491
+ background: var(--bg-base);
2492
+ padding: 1px 5px;
2493
+ border-radius: 3px;
2494
+ font-size: 12px;
2495
+ font-family: var(--font-mono, monospace);
2496
+ }
2497
+ .skill-view-content pre code {
2498
+ background: none;
2499
+ padding: 0;
2500
+ border: none;
2501
+ }
2502
+ .skill-view-content table {
2503
+ width: 100%;
2504
+ border-collapse: collapse;
2505
+ margin: 10px 0;
2506
+ font-size: 12px;
2507
+ }
2508
+ .skill-view-content th, .skill-view-content td {
2509
+ border: 1px solid var(--border-subtle);
2510
+ padding: 6px 10px;
2511
+ text-align: left;
2512
+ }
2513
+ .skill-view-content th {
2514
+ background: var(--bg-base);
2515
+ font-weight: 600;
2516
+ }
2517
+ .skill-view-content blockquote {
2518
+ border-left: 3px solid var(--accent);
2519
+ margin: 10px 0;
2520
+ padding: 6px 12px;
2521
+ color: var(--text-secondary);
2522
+ background: var(--bg-base);
2523
+ }
2524
+ .skill-view-content hr {
2525
+ border: none;
2526
+ border-top: 1px solid var(--border-subtle);
2527
+ margin: 16px 0;
2528
+ }
2529
+ .skill-view-content a {
2530
+ color: var(--accent);
2531
+ text-decoration: none;
2532
+ }
2533
+ .skill-view-content a:hover {
2534
+ text-decoration: underline;
2535
+ }
2536
+
2537
+ /* ==================== MCP 服务管理 ==================== */
2538
+
2539
+ #mcp-servers-container .skill-card {
2540
+ border-left: 3px solid var(--border);
2541
+ transition: border-color 0.2s;
2542
+ }
2543
+ #mcp-servers-container .skill-card:hover {
2544
+ border-left-color: var(--accent);
2545
+ }
2546
+
2547
+ /* MCP key-value editor rows */
2548
+ #mcp-env-editor input,
2549
+ #mcp-headers-editor input {
2550
+ background: var(--bg-inset);
2551
+ border: 1px solid var(--border);
2552
+ border-radius: 4px;
2553
+ color: var(--text);
2554
+ outline: none;
2555
+ transition: border-color 0.15s;
2556
+ }
2557
+ #mcp-env-editor input:focus,
2558
+ #mcp-headers-editor input:focus {
2559
+ border-color: var(--accent);
2560
+ }
2561
+
2562
+ /* MCP tools list in modal */
2563
+ #mcp-tools-list > div {
2564
+ transition: background 0.15s;
2565
+ }
2566
+ #mcp-tools-list > div:hover {
2567
+ background: var(--bg-hover);
2568
+ }