@co0ontty/wand 1.18.12 → 1.21.4
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/claude-pty-bridge.d.ts +8 -0
- package/dist/claude-pty-bridge.js +34 -11
- package/dist/cli.js +72 -5
- package/dist/ensure-node-pty-helper.d.ts +1 -0
- package/dist/ensure-node-pty-helper.js +51 -0
- package/dist/git-quick-commit.d.ts +18 -0
- package/dist/git-quick-commit.js +381 -0
- package/dist/models.d.ts +3 -1
- package/dist/models.js +45 -7
- package/dist/process-manager.d.ts +6 -8
- package/dist/process-manager.js +90 -176
- package/dist/prompt-optimizer.d.ts +5 -0
- package/dist/prompt-optimizer.js +72 -0
- package/dist/pty-text-utils.d.ts +25 -1
- package/dist/pty-text-utils.js +158 -2
- package/dist/server-session-routes.d.ts +2 -2
- package/dist/server-session-routes.js +94 -8
- package/dist/server.d.ts +22 -1
- package/dist/server.js +138 -16
- package/dist/session-logger.d.ts +15 -4
- package/dist/session-logger.js +52 -4
- package/dist/structured-session-manager.d.ts +12 -2
- package/dist/structured-session-manager.js +465 -22
- package/dist/tui/index.d.ts +24 -0
- package/dist/tui/index.js +138 -0
- package/dist/tui/layout.d.ts +25 -0
- package/dist/tui/layout.js +198 -0
- package/dist/tui/log-bus.d.ts +23 -0
- package/dist/tui/log-bus.js +111 -0
- package/dist/tui/relative-time.d.ts +4 -0
- package/dist/tui/relative-time.js +27 -0
- package/dist/tui/session-formatter.d.ts +17 -0
- package/dist/tui/session-formatter.js +111 -0
- package/dist/types.d.ts +55 -2
- package/dist/web-ui/content/scripts.js +1371 -261
- package/dist/web-ui/content/styles.css +436 -9
- package/dist/web-ui/content/vendor/wterm/wterm.bundle.js +1 -1
- package/dist/ws-broadcast.js +74 -12
- package/package.json +3 -1
|
@@ -188,6 +188,10 @@
|
|
|
188
188
|
min-height: 100dvh;
|
|
189
189
|
height: 100vh;
|
|
190
190
|
height: 100dvh;
|
|
191
|
+
/* 软键盘弹起时由 JS 注入 --app-viewport-height = visualViewport.height,
|
|
192
|
+
整体 flex column 自动收缩,让底部 input-panel 上移贴键盘上沿;
|
|
193
|
+
没注入时退回 100dvh 行为。 */
|
|
194
|
+
height: var(--app-viewport-height, 100dvh);
|
|
191
195
|
line-height: var(--line-height-base);
|
|
192
196
|
overflow: hidden;
|
|
193
197
|
}
|
|
@@ -236,6 +240,8 @@
|
|
|
236
240
|
min-height: 100dvh;
|
|
237
241
|
height: 100vh;
|
|
238
242
|
height: 100dvh;
|
|
243
|
+
/* 与 body 同步:键盘弹起时跟随可见视口收缩。 */
|
|
244
|
+
height: var(--app-viewport-height, 100dvh);
|
|
239
245
|
overflow: hidden;
|
|
240
246
|
}
|
|
241
247
|
|
|
@@ -376,8 +382,9 @@
|
|
|
376
382
|
/* .sidebar-open class toggled for semantic purposes only; sidebar overlays without resizing main layout */
|
|
377
383
|
.sidebar-open:not(.sidebar-pinned) .input-panel {
|
|
378
384
|
opacity: 0;
|
|
385
|
+
visibility: hidden;
|
|
379
386
|
pointer-events: none;
|
|
380
|
-
transition: opacity 0.2s ease;
|
|
387
|
+
transition: opacity 0.2s ease, visibility 0s linear 0.2s;
|
|
381
388
|
}
|
|
382
389
|
|
|
383
390
|
/* ===== 侧边栏常驻 ===== */
|
|
@@ -2230,6 +2237,52 @@
|
|
|
2230
2237
|
gap: 8px;
|
|
2231
2238
|
position: relative;
|
|
2232
2239
|
}
|
|
2240
|
+
|
|
2241
|
+
/* 顶部细进度条:会话运行中时流动 */
|
|
2242
|
+
.main-header-row::after {
|
|
2243
|
+
content: "";
|
|
2244
|
+
position: absolute;
|
|
2245
|
+
left: 0;
|
|
2246
|
+
right: 0;
|
|
2247
|
+
bottom: 0;
|
|
2248
|
+
height: 2px;
|
|
2249
|
+
pointer-events: none;
|
|
2250
|
+
background: linear-gradient(
|
|
2251
|
+
90deg,
|
|
2252
|
+
transparent 0%,
|
|
2253
|
+
rgba(var(--accent-rgb, 197, 101, 61), 0.85) 35%,
|
|
2254
|
+
rgba(var(--accent-rgb, 197, 101, 61), 1) 50%,
|
|
2255
|
+
rgba(var(--accent-rgb, 197, 101, 61), 0.85) 65%,
|
|
2256
|
+
transparent 100%
|
|
2257
|
+
);
|
|
2258
|
+
background-size: 220% 100%;
|
|
2259
|
+
background-position: 100% center;
|
|
2260
|
+
opacity: 0;
|
|
2261
|
+
transition: opacity 0.25s ease;
|
|
2262
|
+
}
|
|
2263
|
+
.main-header-row.is-running::after {
|
|
2264
|
+
opacity: 1;
|
|
2265
|
+
animation: topbarProgressFlow 1.6s linear infinite;
|
|
2266
|
+
}
|
|
2267
|
+
.main-header-row.is-permission-blocked::after {
|
|
2268
|
+
background: linear-gradient(
|
|
2269
|
+
90deg,
|
|
2270
|
+
transparent 0%,
|
|
2271
|
+
rgba(169, 106, 47, 0.85) 35%,
|
|
2272
|
+
rgba(169, 106, 47, 1) 50%,
|
|
2273
|
+
rgba(169, 106, 47, 0.85) 65%,
|
|
2274
|
+
transparent 100%
|
|
2275
|
+
);
|
|
2276
|
+
background-size: 220% 100%;
|
|
2277
|
+
animation-duration: 2.4s;
|
|
2278
|
+
}
|
|
2279
|
+
@keyframes topbarProgressFlow {
|
|
2280
|
+
0% { background-position: 100% center; }
|
|
2281
|
+
100% { background-position: -100% center; }
|
|
2282
|
+
}
|
|
2283
|
+
@media (prefers-reduced-motion: reduce) {
|
|
2284
|
+
.main-header-row.is-running::after { animation: none; opacity: 0.7; }
|
|
2285
|
+
}
|
|
2233
2286
|
.topbar-left {
|
|
2234
2287
|
display: flex;
|
|
2235
2288
|
align-items: center;
|
|
@@ -2375,6 +2428,18 @@
|
|
|
2375
2428
|
}
|
|
2376
2429
|
.session-status-pill.failed .session-status-dot { background: var(--danger); }
|
|
2377
2430
|
.session-status-pill.archived { opacity: 0.7; }
|
|
2431
|
+
/* 运行/思考中状态的累计耗时 */
|
|
2432
|
+
.session-status-pill .session-status-elapsed {
|
|
2433
|
+
flex-shrink: 0;
|
|
2434
|
+
margin-left: 4px;
|
|
2435
|
+
padding-left: 6px;
|
|
2436
|
+
border-left: 1px solid currentColor;
|
|
2437
|
+
opacity: 0.75;
|
|
2438
|
+
font-variant-numeric: tabular-nums;
|
|
2439
|
+
font-family: var(--font-mono, monospace);
|
|
2440
|
+
font-size: 0.65rem;
|
|
2441
|
+
letter-spacing: -0.01em;
|
|
2442
|
+
}
|
|
2378
2443
|
|
|
2379
2444
|
/* Current task indicator(动态活动徽标,由 updateTaskDisplay 管理) */
|
|
2380
2445
|
.current-task {
|
|
@@ -2495,13 +2560,31 @@
|
|
|
2495
2560
|
padding: 12px;
|
|
2496
2561
|
border-radius: 0;
|
|
2497
2562
|
box-shadow: none;
|
|
2563
|
+
/* PC 端(Windows 125%/150% 缩放、Linux 1× DPR 等)字符渲染特别敏感:
|
|
2564
|
+
* 1) 默认子像素抗锯齿在彩色终端背景下视觉发虚 → 强制灰度抗锯齿;
|
|
2565
|
+
* 2) 等宽字体的连字(liga/calt)和 kerning 会让 ">=" / "->" 等
|
|
2566
|
+
* 字符相邻时实际宽度变化,破坏 wterm 用 "W" 单字符测出的等宽
|
|
2567
|
+
* 假设,累积下来就是字符错列;
|
|
2568
|
+
* 3) text-rendering: geometricPrecision 让浏览器按字形几何排版,
|
|
2569
|
+
* 不再做 optimizeSpeed 的整数像素吸附,配合下面的整数 row-height
|
|
2570
|
+
* 让网格对齐稳定。 */
|
|
2571
|
+
-webkit-font-smoothing: antialiased;
|
|
2572
|
+
-moz-osx-font-smoothing: grayscale;
|
|
2573
|
+
text-rendering: geometricPrecision;
|
|
2574
|
+
font-variant-ligatures: none;
|
|
2575
|
+
font-feature-settings: "liga" 0, "clig" 0, "calt" 0, "dlig" 0;
|
|
2576
|
+
font-kerning: none;
|
|
2498
2577
|
--term-fg: #f5eadc;
|
|
2499
2578
|
--term-bg: transparent;
|
|
2500
2579
|
--term-cursor: #d67b52;
|
|
2501
2580
|
--term-font-family: "Geist Mono", "SF Mono", monospace;
|
|
2502
2581
|
--term-font-size: 13px;
|
|
2503
|
-
|
|
2504
|
-
|
|
2582
|
+
/* 行高直接给整数像素,避免 13×1.5=19.5 的亚像素行:PC 端 1× DPR 时
|
|
2583
|
+
* 浏览器把 19.5 四舍五入成 19 或 20,相邻行的吸附方向不一致就会
|
|
2584
|
+
* 出现错位。20px 是 wterm 既定的 cell 高度基线,移动端高 DPR 也
|
|
2585
|
+
* 完全不变。 */
|
|
2586
|
+
--term-line-height: 1.54;
|
|
2587
|
+
--term-row-height: 20px;
|
|
2505
2588
|
--term-color-0: #1f1b17;
|
|
2506
2589
|
--term-color-1: #d27766;
|
|
2507
2590
|
--term-color-2: #7fa36f;
|
|
@@ -4858,6 +4941,7 @@
|
|
|
4858
4941
|
overscroll-behavior: contain;
|
|
4859
4942
|
touch-action: pan-y;
|
|
4860
4943
|
border-top: 1px solid var(--border-subtle);
|
|
4944
|
+
transition: opacity 0.2s ease, visibility 0s;
|
|
4861
4945
|
}
|
|
4862
4946
|
|
|
4863
4947
|
.input-composer {
|
|
@@ -5215,6 +5299,18 @@
|
|
|
5215
5299
|
.input-label { font-size: 0.6875rem; color: var(--text-muted); font-weight: 500; }
|
|
5216
5300
|
.input-textarea-wrap { position: relative; width: 100%; }
|
|
5217
5301
|
|
|
5302
|
+
/* Composer top row: holds todo collapse bar (left) + reply status bar (right) on one line */
|
|
5303
|
+
.composer-top-row {
|
|
5304
|
+
display: flex;
|
|
5305
|
+
align-items: flex-start;
|
|
5306
|
+
gap: 8px;
|
|
5307
|
+
min-width: 0;
|
|
5308
|
+
}
|
|
5309
|
+
.composer-top-row:has(> .todo-progress:not(.hidden)),
|
|
5310
|
+
.composer-top-row:has(> .structured-status-bar) {
|
|
5311
|
+
margin-bottom: 6px;
|
|
5312
|
+
}
|
|
5313
|
+
|
|
5218
5314
|
/* Todo progress bar */
|
|
5219
5315
|
.todo-progress {
|
|
5220
5316
|
margin-bottom: 6px;
|
|
@@ -5223,6 +5319,11 @@
|
|
|
5223
5319
|
transition: all var(--transition-fast);
|
|
5224
5320
|
}
|
|
5225
5321
|
.todo-progress.hidden { display: none; }
|
|
5322
|
+
.composer-top-row > .todo-progress {
|
|
5323
|
+
flex: 1;
|
|
5324
|
+
min-width: 0;
|
|
5325
|
+
margin-bottom: 0;
|
|
5326
|
+
}
|
|
5226
5327
|
.todo-progress-header {
|
|
5227
5328
|
display: flex;
|
|
5228
5329
|
align-items: center;
|
|
@@ -5719,7 +5820,7 @@
|
|
|
5719
5820
|
background: transparent;
|
|
5720
5821
|
border: none;
|
|
5721
5822
|
color: var(--text-primary);
|
|
5722
|
-
padding: 8px
|
|
5823
|
+
padding: 8px 34px 3px 10px;
|
|
5723
5824
|
outline: none;
|
|
5724
5825
|
resize: none;
|
|
5725
5826
|
min-height: 32px;
|
|
@@ -5758,6 +5859,16 @@
|
|
|
5758
5859
|
padding-bottom: 28px;
|
|
5759
5860
|
min-height: 60px;
|
|
5760
5861
|
}
|
|
5862
|
+
/* 终端交互模式下 textarea 设为 readonly,按键透传到 PTY。
|
|
5863
|
+
视觉上给一个降饱和度 + 斜体 placeholder,让用户感知到"这里
|
|
5864
|
+
不再录字、键被直接送到终端",避免疑惑为什么打字没字落下来。 */
|
|
5865
|
+
.input-textarea.is-terminal-passthrough {
|
|
5866
|
+
opacity: 0.7;
|
|
5867
|
+
cursor: default;
|
|
5868
|
+
}
|
|
5869
|
+
.input-textarea.is-terminal-passthrough::placeholder {
|
|
5870
|
+
font-style: italic;
|
|
5871
|
+
}
|
|
5761
5872
|
|
|
5762
5873
|
.input-inline-controls {
|
|
5763
5874
|
}
|
|
@@ -5847,6 +5958,148 @@
|
|
|
5847
5958
|
transform: scale(0.95);
|
|
5848
5959
|
}
|
|
5849
5960
|
|
|
5961
|
+
/* Prompt optimize button — top-right of the input composer */
|
|
5962
|
+
.prompt-optimize-btn {
|
|
5963
|
+
position: absolute;
|
|
5964
|
+
top: 5px;
|
|
5965
|
+
right: 6px;
|
|
5966
|
+
width: 28px;
|
|
5967
|
+
height: 28px;
|
|
5968
|
+
border-radius: 50%;
|
|
5969
|
+
border: 1px solid rgba(197, 101, 61, 0.22);
|
|
5970
|
+
padding: 0;
|
|
5971
|
+
cursor: pointer;
|
|
5972
|
+
display: inline-flex;
|
|
5973
|
+
align-items: center;
|
|
5974
|
+
justify-content: center;
|
|
5975
|
+
background: linear-gradient(135deg, rgba(255, 250, 242, 0.95) 0%, rgba(232, 197, 174, 0.35) 100%);
|
|
5976
|
+
color: var(--accent);
|
|
5977
|
+
z-index: 4;
|
|
5978
|
+
box-shadow: 0 1px 4px rgba(197, 101, 61, 0.10);
|
|
5979
|
+
transition: background var(--transition-fast), color var(--transition-fast), transform var(--transition-fast), box-shadow var(--transition-fast), border-color var(--transition-fast);
|
|
5980
|
+
}
|
|
5981
|
+
.prompt-optimize-btn:hover {
|
|
5982
|
+
background: linear-gradient(135deg, rgba(255, 250, 242, 1) 0%, rgba(232, 197, 174, 0.55) 100%);
|
|
5983
|
+
color: var(--accent-hover);
|
|
5984
|
+
transform: scale(1.12);
|
|
5985
|
+
border-color: rgba(197, 101, 61, 0.35);
|
|
5986
|
+
box-shadow: 0 2px 10px rgba(197, 101, 61, 0.22), 0 0 0 3px rgba(197, 101, 61, 0.06);
|
|
5987
|
+
}
|
|
5988
|
+
.prompt-optimize-btn:active {
|
|
5989
|
+
transform: scale(0.92);
|
|
5990
|
+
box-shadow: 0 1px 3px rgba(197, 101, 61, 0.15);
|
|
5991
|
+
}
|
|
5992
|
+
.prompt-optimize-btn:disabled {
|
|
5993
|
+
cursor: not-allowed;
|
|
5994
|
+
opacity: 0.6;
|
|
5995
|
+
}
|
|
5996
|
+
.prompt-optimize-btn:disabled:hover {
|
|
5997
|
+
transform: none;
|
|
5998
|
+
background: linear-gradient(135deg, rgba(255, 250, 242, 0.95) 0%, rgba(232, 197, 174, 0.35) 100%);
|
|
5999
|
+
box-shadow: 0 1px 4px rgba(197, 101, 61, 0.10);
|
|
6000
|
+
border-color: rgba(197, 101, 61, 0.22);
|
|
6001
|
+
}
|
|
6002
|
+
.prompt-optimize-icon {
|
|
6003
|
+
transition: transform 0.25s ease, opacity 0.2s ease;
|
|
6004
|
+
transform-origin: center;
|
|
6005
|
+
filter: drop-shadow(0 0 1px rgba(197, 101, 61, 0.3));
|
|
6006
|
+
}
|
|
6007
|
+
.prompt-optimize-btn:hover .prompt-optimize-icon {
|
|
6008
|
+
animation: prompt-optimize-twinkle 1.4s ease-in-out infinite;
|
|
6009
|
+
filter: drop-shadow(0 0 3px rgba(197, 101, 61, 0.4));
|
|
6010
|
+
}
|
|
6011
|
+
@keyframes prompt-optimize-twinkle {
|
|
6012
|
+
0%, 100% { transform: rotate(0deg) scale(1); }
|
|
6013
|
+
50% { transform: rotate(12deg) scale(1.12); }
|
|
6014
|
+
}
|
|
6015
|
+
.prompt-optimize-spinner {
|
|
6016
|
+
position: absolute;
|
|
6017
|
+
inset: 0;
|
|
6018
|
+
border-radius: 50%;
|
|
6019
|
+
pointer-events: none;
|
|
6020
|
+
opacity: 0;
|
|
6021
|
+
background: conic-gradient(from 0deg, transparent 0deg, var(--accent) 270deg, transparent 360deg);
|
|
6022
|
+
mask: radial-gradient(circle, transparent 10px, black 11px);
|
|
6023
|
+
-webkit-mask: radial-gradient(circle, transparent 10px, black 11px);
|
|
6024
|
+
transition: opacity 0.15s ease;
|
|
6025
|
+
}
|
|
6026
|
+
.prompt-optimize-btn.is-loading {
|
|
6027
|
+
color: var(--accent);
|
|
6028
|
+
background: linear-gradient(135deg, rgba(255, 250, 242, 1) 0%, rgba(232, 197, 174, 0.5) 100%);
|
|
6029
|
+
border-color: rgba(197, 101, 61, 0.4);
|
|
6030
|
+
box-shadow: 0 2px 12px rgba(197, 101, 61, 0.25), 0 0 0 3px rgba(197, 101, 61, 0.08);
|
|
6031
|
+
}
|
|
6032
|
+
.prompt-optimize-btn.is-loading .prompt-optimize-icon {
|
|
6033
|
+
animation: prompt-optimize-pulse 1.1s ease-in-out infinite;
|
|
6034
|
+
}
|
|
6035
|
+
.prompt-optimize-btn.is-loading .prompt-optimize-spinner {
|
|
6036
|
+
opacity: 1;
|
|
6037
|
+
animation: prompt-optimize-spin 0.9s linear infinite;
|
|
6038
|
+
}
|
|
6039
|
+
@keyframes prompt-optimize-spin {
|
|
6040
|
+
to { transform: rotate(360deg); }
|
|
6041
|
+
}
|
|
6042
|
+
@keyframes prompt-optimize-pulse {
|
|
6043
|
+
0%, 100% { transform: scale(0.88); opacity: 0.8; }
|
|
6044
|
+
50% { transform: scale(1.15); opacity: 1; }
|
|
6045
|
+
}
|
|
6046
|
+
|
|
6047
|
+
/* 优化中:输入框整体出现柔和的边框光晕 + textarea 区域
|
|
6048
|
+
的横向流光,文字保持原样,不打扰用户阅读。 */
|
|
6049
|
+
.input-composer.is-optimizing {
|
|
6050
|
+
border-color: rgba(197, 101, 61, 0.42);
|
|
6051
|
+
box-shadow:
|
|
6052
|
+
0 0 0 2px rgba(197, 101, 61, 0.10),
|
|
6053
|
+
0 0 18px rgba(197, 101, 61, 0.14);
|
|
6054
|
+
}
|
|
6055
|
+
.input-composer.is-optimizing .input-textarea-wrap::before {
|
|
6056
|
+
content: "";
|
|
6057
|
+
position: absolute;
|
|
6058
|
+
inset: 0;
|
|
6059
|
+
pointer-events: none;
|
|
6060
|
+
background: linear-gradient(
|
|
6061
|
+
100deg,
|
|
6062
|
+
transparent 0%,
|
|
6063
|
+
transparent 38%,
|
|
6064
|
+
rgba(214, 123, 82, 0.16) 50%,
|
|
6065
|
+
transparent 62%,
|
|
6066
|
+
transparent 100%
|
|
6067
|
+
);
|
|
6068
|
+
background-size: 220% 100%;
|
|
6069
|
+
background-repeat: no-repeat;
|
|
6070
|
+
background-position: 220% 0;
|
|
6071
|
+
animation: prompt-optimize-flow 1.6s linear infinite;
|
|
6072
|
+
z-index: 0;
|
|
6073
|
+
}
|
|
6074
|
+
@keyframes prompt-optimize-flow {
|
|
6075
|
+
from { background-position: 220% 0; }
|
|
6076
|
+
to { background-position: -120% 0; }
|
|
6077
|
+
}
|
|
6078
|
+
.prompt-optimize-btn.is-shake {
|
|
6079
|
+
animation: prompt-optimize-shake 0.4s ease-out;
|
|
6080
|
+
color: var(--danger);
|
|
6081
|
+
}
|
|
6082
|
+
@keyframes prompt-optimize-shake {
|
|
6083
|
+
0%, 100% { transform: translateX(0); }
|
|
6084
|
+
20% { transform: translateX(-3px); }
|
|
6085
|
+
40% { transform: translateX(3px); }
|
|
6086
|
+
60% { transform: translateX(-2px); }
|
|
6087
|
+
80% { transform: translateX(2px); }
|
|
6088
|
+
}
|
|
6089
|
+
|
|
6090
|
+
@media (max-width: 720px) {
|
|
6091
|
+
.prompt-optimize-btn {
|
|
6092
|
+
width: 26px;
|
|
6093
|
+
height: 26px;
|
|
6094
|
+
top: 3px;
|
|
6095
|
+
right: 4px;
|
|
6096
|
+
}
|
|
6097
|
+
.prompt-optimize-icon {
|
|
6098
|
+
width: 14px;
|
|
6099
|
+
height: 14px;
|
|
6100
|
+
}
|
|
6101
|
+
}
|
|
6102
|
+
|
|
5850
6103
|
.attachment-preview {
|
|
5851
6104
|
display: flex;
|
|
5852
6105
|
gap: 6px;
|
|
@@ -6930,7 +7183,7 @@
|
|
|
6930
7183
|
|
|
6931
7184
|
.input-textarea {
|
|
6932
7185
|
min-height: 32px;
|
|
6933
|
-
padding: 6px
|
|
7186
|
+
padding: 6px 30px 3px 8px;
|
|
6934
7187
|
font-size: 16px;
|
|
6935
7188
|
line-height: 1.35;
|
|
6936
7189
|
}
|
|
@@ -7256,7 +7509,7 @@
|
|
|
7256
7509
|
}
|
|
7257
7510
|
|
|
7258
7511
|
.input-composer { border-radius: 8px; }
|
|
7259
|
-
.input-textarea { min-height: 28px; padding: 5px
|
|
7512
|
+
.input-textarea { min-height: 28px; padding: 5px 28px 2px 6px; font-size: 16px; }
|
|
7260
7513
|
|
|
7261
7514
|
.btn-circle { width: 28px; height: 28px; min-width: 28px; }
|
|
7262
7515
|
|
|
@@ -9871,20 +10124,22 @@
|
|
|
9871
10124
|
100% { background-position: 100% center; }
|
|
9872
10125
|
}
|
|
9873
10126
|
|
|
9874
|
-
/* ──
|
|
10127
|
+
/* ── 结构化会话状态条(与 todo 折叠栏共处一行,靠右) ── */
|
|
9875
10128
|
.structured-status-bar {
|
|
9876
10129
|
display: flex;
|
|
9877
10130
|
align-items: center;
|
|
9878
10131
|
justify-content: flex-end;
|
|
9879
10132
|
gap: 5px;
|
|
9880
|
-
margin: 0
|
|
9881
|
-
|
|
10133
|
+
margin: 0;
|
|
10134
|
+
margin-left: auto;
|
|
10135
|
+
padding: 4px 8px;
|
|
9882
10136
|
background: transparent;
|
|
9883
10137
|
border: none;
|
|
9884
10138
|
font-size: 0.6875rem;
|
|
9885
10139
|
color: var(--text-muted);
|
|
9886
10140
|
transition: all 0.3s ease;
|
|
9887
10141
|
overflow: hidden;
|
|
10142
|
+
flex-shrink: 0;
|
|
9888
10143
|
}
|
|
9889
10144
|
|
|
9890
10145
|
.structured-status-bar .status-bar-dot {
|
|
@@ -10425,4 +10680,176 @@
|
|
|
10425
10680
|
}
|
|
10426
10681
|
}
|
|
10427
10682
|
|
|
10683
|
+
/* ── 顶栏 git 徽章 ── */
|
|
10684
|
+
.topbar-git-slot {
|
|
10685
|
+
display: inline-flex;
|
|
10686
|
+
align-items: center;
|
|
10687
|
+
}
|
|
10688
|
+
.topbar-git-slot:empty {
|
|
10689
|
+
display: none;
|
|
10690
|
+
}
|
|
10691
|
+
.topbar-git-badge {
|
|
10692
|
+
display: inline-flex;
|
|
10693
|
+
align-items: center;
|
|
10694
|
+
gap: 5px;
|
|
10695
|
+
height: 32px;
|
|
10696
|
+
padding: 0 10px;
|
|
10697
|
+
font-family: var(--font-sans);
|
|
10698
|
+
font-size: 0.72rem;
|
|
10699
|
+
font-weight: 500;
|
|
10700
|
+
color: var(--text-secondary);
|
|
10701
|
+
background: transparent;
|
|
10702
|
+
border: 1px solid transparent;
|
|
10703
|
+
border-radius: var(--radius-sm);
|
|
10704
|
+
cursor: pointer;
|
|
10705
|
+
white-space: nowrap;
|
|
10706
|
+
transition: all var(--transition-fast);
|
|
10707
|
+
box-sizing: border-box;
|
|
10708
|
+
line-height: 1;
|
|
10709
|
+
}
|
|
10710
|
+
.topbar-git-badge:hover {
|
|
10711
|
+
background: rgba(255, 255, 255, 0.5);
|
|
10712
|
+
color: var(--text-primary);
|
|
10713
|
+
}
|
|
10714
|
+
.topbar-git-badge:active {
|
|
10715
|
+
transform: scale(0.96);
|
|
10716
|
+
}
|
|
10717
|
+
.topbar-git-icon {
|
|
10718
|
+
flex-shrink: 0;
|
|
10719
|
+
opacity: 0.85;
|
|
10720
|
+
}
|
|
10721
|
+
.topbar-git-branch {
|
|
10722
|
+
font-family: var(--font-mono, monospace);
|
|
10723
|
+
font-weight: 600;
|
|
10724
|
+
max-width: 12em;
|
|
10725
|
+
overflow: hidden;
|
|
10726
|
+
text-overflow: ellipsis;
|
|
10727
|
+
}
|
|
10728
|
+
.topbar-git-count {
|
|
10729
|
+
color: var(--accent);
|
|
10730
|
+
font-weight: 700;
|
|
10731
|
+
font-family: var(--font-mono, monospace);
|
|
10732
|
+
}
|
|
10733
|
+
.topbar-git-clean {
|
|
10734
|
+
color: rgba(60, 160, 90, 0.85);
|
|
10735
|
+
font-weight: 700;
|
|
10736
|
+
font-size: 0.78rem;
|
|
10737
|
+
}
|
|
10738
|
+
|
|
10739
|
+
/* ── 快捷提交模态框 ── */
|
|
10740
|
+
.quick-commit-modal {
|
|
10741
|
+
max-width: 560px;
|
|
10742
|
+
}
|
|
10743
|
+
.quick-commit-modal .modal-body {
|
|
10744
|
+
display: flex;
|
|
10745
|
+
flex-direction: column;
|
|
10746
|
+
gap: 12px;
|
|
10747
|
+
}
|
|
10748
|
+
.qc-files-wrap {
|
|
10749
|
+
max-height: 200px;
|
|
10750
|
+
overflow-y: auto;
|
|
10751
|
+
padding: 8px 10px;
|
|
10752
|
+
border: 1px solid var(--border-color, rgba(0, 0, 0, 0.08));
|
|
10753
|
+
border-radius: 6px;
|
|
10754
|
+
background: rgba(255, 255, 255, 0.45);
|
|
10755
|
+
font-family: var(--font-mono, monospace);
|
|
10756
|
+
font-size: 0.78rem;
|
|
10757
|
+
display: flex;
|
|
10758
|
+
flex-direction: column;
|
|
10759
|
+
gap: 2px;
|
|
10760
|
+
}
|
|
10761
|
+
.qc-empty {
|
|
10762
|
+
color: var(--text-muted);
|
|
10763
|
+
padding: 6px 0;
|
|
10764
|
+
text-align: center;
|
|
10765
|
+
font-style: italic;
|
|
10766
|
+
}
|
|
10767
|
+
.qc-file-row {
|
|
10768
|
+
display: flex;
|
|
10769
|
+
align-items: center;
|
|
10770
|
+
gap: 8px;
|
|
10771
|
+
line-height: 1.5;
|
|
10772
|
+
}
|
|
10773
|
+
.qc-flag {
|
|
10774
|
+
flex-shrink: 0;
|
|
10775
|
+
width: 24px;
|
|
10776
|
+
text-align: center;
|
|
10777
|
+
font-weight: 700;
|
|
10778
|
+
color: var(--text-muted);
|
|
10779
|
+
letter-spacing: 0;
|
|
10780
|
+
}
|
|
10781
|
+
.qc-flag-add { color: rgba(60, 160, 90, 0.95); }
|
|
10782
|
+
.qc-flag-mod { color: rgba(220, 150, 30, 0.95); }
|
|
10783
|
+
.qc-flag-del { color: rgba(200, 70, 70, 0.95); }
|
|
10784
|
+
.qc-flag-ren { color: rgba(110, 130, 200, 0.95); }
|
|
10785
|
+
.qc-flag-untracked { color: rgba(140, 140, 140, 0.95); }
|
|
10786
|
+
.qc-file-path {
|
|
10787
|
+
color: var(--text-secondary);
|
|
10788
|
+
overflow: hidden;
|
|
10789
|
+
text-overflow: ellipsis;
|
|
10790
|
+
white-space: nowrap;
|
|
10791
|
+
flex: 1 1 auto;
|
|
10792
|
+
min-width: 0;
|
|
10793
|
+
}
|
|
10794
|
+
.qc-submodule-badge {
|
|
10795
|
+
flex-shrink: 0;
|
|
10796
|
+
padding: 1px 6px;
|
|
10797
|
+
border-radius: 8px;
|
|
10798
|
+
background: rgba(140, 100, 200, 0.16);
|
|
10799
|
+
color: rgba(110, 70, 180, 0.95);
|
|
10800
|
+
font-size: 0.68rem;
|
|
10801
|
+
font-weight: 600;
|
|
10802
|
+
letter-spacing: 0.02em;
|
|
10803
|
+
white-space: nowrap;
|
|
10804
|
+
}
|
|
10805
|
+
.qc-checkbox-row {
|
|
10806
|
+
display: flex;
|
|
10807
|
+
align-items: center;
|
|
10808
|
+
gap: 8px;
|
|
10809
|
+
font-size: 0.85rem;
|
|
10810
|
+
color: var(--text-primary);
|
|
10811
|
+
cursor: pointer;
|
|
10812
|
+
user-select: none;
|
|
10813
|
+
}
|
|
10814
|
+
.qc-checkbox-row input[type="checkbox"] {
|
|
10815
|
+
width: 16px;
|
|
10816
|
+
height: 16px;
|
|
10817
|
+
cursor: pointer;
|
|
10818
|
+
}
|
|
10819
|
+
.qc-message-row,
|
|
10820
|
+
.qc-tag-row {
|
|
10821
|
+
display: flex;
|
|
10822
|
+
flex-direction: column;
|
|
10823
|
+
gap: 4px;
|
|
10824
|
+
}
|
|
10825
|
+
.qc-message-row.hidden,
|
|
10826
|
+
.qc-tag-row.hidden {
|
|
10827
|
+
display: none;
|
|
10828
|
+
}
|
|
10829
|
+
.qc-message-header {
|
|
10830
|
+
display: flex;
|
|
10831
|
+
align-items: center;
|
|
10832
|
+
justify-content: space-between;
|
|
10833
|
+
gap: 8px;
|
|
10834
|
+
}
|
|
10835
|
+
.qc-message-row textarea {
|
|
10836
|
+
resize: vertical;
|
|
10837
|
+
min-height: 56px;
|
|
10838
|
+
font-family: var(--font-mono, monospace);
|
|
10839
|
+
font-size: 0.85rem;
|
|
10840
|
+
}
|
|
10841
|
+
.quick-commit-modal .worktree-merge-actions {
|
|
10842
|
+
display: flex;
|
|
10843
|
+
justify-content: flex-end;
|
|
10844
|
+
gap: 8px;
|
|
10845
|
+
margin-top: 4px;
|
|
10846
|
+
}
|
|
10847
|
+
|
|
10848
|
+
@media (max-width: 720px) {
|
|
10849
|
+
.topbar-git-branch { max-width: 8em; }
|
|
10850
|
+
.topbar-git-badge { padding: 0 8px; font-size: 0.7rem; }
|
|
10851
|
+
.quick-commit-modal { max-width: 95vw; }
|
|
10852
|
+
.qc-files-wrap { max-height: 160px; }
|
|
10853
|
+
}
|
|
10854
|
+
|
|
10428
10855
|
/* 结束标记 */
|