@co0ontty/wand 1.30.3 → 1.31.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/README.md +39 -2
- package/dist/claude-sdk-runner.d.ts +31 -0
- package/dist/claude-sdk-runner.js +142 -0
- package/dist/cli.js +104 -0
- package/dist/git-quick-commit.js +18 -26
- package/dist/process-manager.d.ts +7 -0
- package/dist/process-manager.js +26 -2
- package/dist/prompt-optimizer.js +17 -26
- package/dist/server-session-routes.js +72 -3
- package/dist/server.js +1 -0
- package/dist/structured-session-manager.d.ts +24 -0
- package/dist/structured-session-manager.js +106 -7
- package/dist/tui/attach.js +7 -8
- package/dist/tui/commands.d.ts +24 -7
- package/dist/tui/commands.js +200 -86
- package/dist/tui/index.js +8 -8
- package/dist/tui/service-panel.js +3 -4
- package/dist/types.d.ts +2 -0
- package/dist/web-ui/content/scripts.js +927 -81
- package/dist/web-ui/content/styles.css +986 -141
- package/package.json +1 -1
|
@@ -3842,14 +3842,18 @@
|
|
|
3842
3842
|
}
|
|
3843
3843
|
|
|
3844
3844
|
/* ===== 聊天消息列表 ===== */
|
|
3845
|
+
/* overflow-x: hidden 是兜底——任何子级(pre、table、tool-card)的
|
|
3846
|
+
横向溢出都不应该冒到聊天容器,由它们各自的内部滚动负责。 */
|
|
3845
3847
|
.chat-messages {
|
|
3846
3848
|
flex: 1;
|
|
3847
3849
|
overflow-y: auto;
|
|
3850
|
+
overflow-x: hidden;
|
|
3848
3851
|
display: flex;
|
|
3849
3852
|
flex-direction: column-reverse;
|
|
3850
3853
|
gap: 16px;
|
|
3851
3854
|
padding: 20px 4px 12px;
|
|
3852
3855
|
min-height: 0;
|
|
3856
|
+
min-width: 0;
|
|
3853
3857
|
scrollbar-gutter: stable;
|
|
3854
3858
|
}
|
|
3855
3859
|
|
|
@@ -3906,12 +3910,17 @@
|
|
|
3906
3910
|
}
|
|
3907
3911
|
|
|
3908
3912
|
/* ===== 聊天消息基础样式 ===== */
|
|
3913
|
+
/* 消息整体宽度跟随屏幕(容器)宽度——长文本自然换行;
|
|
3914
|
+
内部卡片(tool-use-card / inline-tool / terminal-tool / diff-tool / tool-group)
|
|
3915
|
+
通过 --chat-card-max-width 单独约束,避免在宽屏下被拉成横向大条。 */
|
|
3909
3916
|
.chat-message {
|
|
3910
3917
|
display: flex;
|
|
3911
3918
|
flex-direction: column;
|
|
3912
|
-
max-width:
|
|
3919
|
+
max-width: 100%;
|
|
3920
|
+
min-width: 0;
|
|
3913
3921
|
margin: 4px 0;
|
|
3914
3922
|
transition: opacity 0.2s ease, transform 0.2s var(--ease-out-expo);
|
|
3923
|
+
--chat-card-max-width: 720px;
|
|
3915
3924
|
}
|
|
3916
3925
|
|
|
3917
3926
|
.chat-message:hover {
|
|
@@ -3936,12 +3945,13 @@
|
|
|
3936
3945
|
|
|
3937
3946
|
.chat-message.assistant {
|
|
3938
3947
|
align-self: flex-start;
|
|
3939
|
-
max-width:
|
|
3948
|
+
max-width: 100%;
|
|
3949
|
+
width: 100%;
|
|
3940
3950
|
}
|
|
3941
3951
|
|
|
3942
3952
|
.chat-message.system-info {
|
|
3943
3953
|
align-self: center;
|
|
3944
|
-
max-width:
|
|
3954
|
+
max-width: 100%;
|
|
3945
3955
|
width: 100%;
|
|
3946
3956
|
margin: 10px 0;
|
|
3947
3957
|
animation: messageFloat 3s ease-in-out infinite;
|
|
@@ -4075,13 +4085,16 @@
|
|
|
4075
4085
|
font-family: var(--font-mono);
|
|
4076
4086
|
font-size: 0.8125rem;
|
|
4077
4087
|
max-width: 100%;
|
|
4078
|
-
|
|
4088
|
+
min-width: 0;
|
|
4089
|
+
overflow-wrap: anywhere;
|
|
4079
4090
|
word-break: break-word;
|
|
4080
4091
|
box-shadow: 0 4px 16px rgba(197, 101, 61, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.15);
|
|
4081
4092
|
}
|
|
4082
4093
|
|
|
4094
|
+
/* 用户消息默认更紧凑(贴右气泡),上限放宽到 100% 让长 prompt 不再水平
|
|
4095
|
+
挤压;实际宽度由气泡内容 + word-break 决定。 */
|
|
4083
4096
|
.chat-message.user {
|
|
4084
|
-
max-width:
|
|
4097
|
+
max-width: 100%;
|
|
4085
4098
|
}
|
|
4086
4099
|
|
|
4087
4100
|
/* 助手消息气泡 */
|
|
@@ -4090,8 +4103,11 @@
|
|
|
4090
4103
|
color: var(--text-primary);
|
|
4091
4104
|
padding: 14px 18px;
|
|
4092
4105
|
max-width: 100%;
|
|
4106
|
+
min-width: 0;
|
|
4093
4107
|
white-space: pre-wrap;
|
|
4094
4108
|
word-wrap: break-word;
|
|
4109
|
+
overflow-wrap: anywhere;
|
|
4110
|
+
word-break: break-word;
|
|
4095
4111
|
border: 1px solid var(--border-subtle);
|
|
4096
4112
|
box-shadow: var(--shadow-sm);
|
|
4097
4113
|
}
|
|
@@ -4107,9 +4123,11 @@
|
|
|
4107
4123
|
flex-direction: column;
|
|
4108
4124
|
gap: 2px;
|
|
4109
4125
|
max-width: 100%;
|
|
4126
|
+
min-width: 0;
|
|
4110
4127
|
font-size: 0.875rem;
|
|
4111
4128
|
line-height: var(--line-height-relaxed);
|
|
4112
4129
|
word-wrap: break-word;
|
|
4130
|
+
overflow-wrap: anywhere;
|
|
4113
4131
|
color: var(--text-primary);
|
|
4114
4132
|
}
|
|
4115
4133
|
|
|
@@ -4129,7 +4147,7 @@
|
|
|
4129
4147
|
display: flex;
|
|
4130
4148
|
flex-direction: column;
|
|
4131
4149
|
gap: 6px;
|
|
4132
|
-
max-width:
|
|
4150
|
+
max-width: 100%;
|
|
4133
4151
|
}
|
|
4134
4152
|
/* user turn 默认 align-self: flex-end(右对齐);多段渲染时强制
|
|
4135
4153
|
容器内左对齐,否则 subagent 段会被推到右边,border-left 色条断裂。 */
|
|
@@ -4186,6 +4204,25 @@
|
|
|
4186
4204
|
font-style: italic;
|
|
4187
4205
|
}
|
|
4188
4206
|
|
|
4207
|
+
/* subagent 身份小 tag("勤劳初二 让 侦探猫 [subagent] 帮忙"),让用户一眼知道
|
|
4208
|
+
这是子代理在说话,不是同一个 AI 突然换了个名字。色调跟 --agent-color 走。 */
|
|
4209
|
+
.chat-handoff-tag {
|
|
4210
|
+
display: inline-block;
|
|
4211
|
+
margin: 0 6px;
|
|
4212
|
+
padding: 1px 6px;
|
|
4213
|
+
font-size: 0.62rem;
|
|
4214
|
+
font-weight: 600;
|
|
4215
|
+
letter-spacing: 0.04em;
|
|
4216
|
+
text-transform: uppercase;
|
|
4217
|
+
color: var(--agent-color, var(--accent));
|
|
4218
|
+
background: color-mix(in srgb, var(--agent-color, var(--accent)) 14%, transparent);
|
|
4219
|
+
border: 1px solid color-mix(in srgb, var(--agent-color, var(--accent)) 32%, transparent);
|
|
4220
|
+
border-radius: 4px;
|
|
4221
|
+
vertical-align: 1px;
|
|
4222
|
+
line-height: 1.4;
|
|
4223
|
+
white-space: nowrap;
|
|
4224
|
+
}
|
|
4225
|
+
|
|
4189
4226
|
/* subagent 回复气泡(群聊角色完成任务后的发言) */
|
|
4190
4227
|
.subagent-reply {
|
|
4191
4228
|
background: color-mix(in srgb, var(--agent-color, var(--accent)) 6%, var(--bg-surface));
|
|
@@ -4197,6 +4234,10 @@
|
|
|
4197
4234
|
font-size: 0.875rem;
|
|
4198
4235
|
color: var(--text-primary);
|
|
4199
4236
|
word-break: break-word;
|
|
4237
|
+
overflow-wrap: anywhere;
|
|
4238
|
+
max-width: 100%;
|
|
4239
|
+
min-width: 0;
|
|
4240
|
+
overflow-x: hidden;
|
|
4200
4241
|
}
|
|
4201
4242
|
|
|
4202
4243
|
.subagent-reply > :first-child { margin-top: 0; }
|
|
@@ -4232,8 +4273,99 @@
|
|
|
4232
4273
|
background: rgba(0, 0, 0, 0.04);
|
|
4233
4274
|
padding: 10px 12px;
|
|
4234
4275
|
border-radius: 6px;
|
|
4235
|
-
overflow-x:
|
|
4276
|
+
overflow-x: hidden;
|
|
4277
|
+
white-space: pre-wrap;
|
|
4278
|
+
word-break: break-word;
|
|
4279
|
+
overflow-wrap: anywhere;
|
|
4236
4280
|
margin: 8px 0;
|
|
4281
|
+
max-width: 100%;
|
|
4282
|
+
min-width: 0;
|
|
4283
|
+
}
|
|
4284
|
+
|
|
4285
|
+
/* ===== subagent 回复三态折叠 =====
|
|
4286
|
+
preview(默认)→ 限高 ~5 行 + 渐隐 mask + 内部可滚
|
|
4287
|
+
expanded → 拉到一个比较大的上限,内部可滚
|
|
4288
|
+
collapsed → 完全收起,只剩底部一条工具栏,按钮还能再点回来 */
|
|
4289
|
+
.subagent-reply.collapsible {
|
|
4290
|
+
position: relative;
|
|
4291
|
+
padding-right: 14px;
|
|
4292
|
+
padding-bottom: 28px;
|
|
4293
|
+
}
|
|
4294
|
+
|
|
4295
|
+
.subagent-reply-scroll {
|
|
4296
|
+
overflow: hidden;
|
|
4297
|
+
transition: max-height 0.32s var(--ease-out-expo, cubic-bezier(0.16, 1, 0.3, 1));
|
|
4298
|
+
min-width: 0;
|
|
4299
|
+
max-width: 100%;
|
|
4300
|
+
}
|
|
4301
|
+
.subagent-reply-scroll > :first-child { margin-top: 0; }
|
|
4302
|
+
.subagent-reply-scroll > :last-child { margin-bottom: 0; }
|
|
4303
|
+
|
|
4304
|
+
.subagent-reply.collapsible[data-collapse-mode="preview"] .subagent-reply-scroll {
|
|
4305
|
+
max-height: 7.5em; /* ~5 行 */
|
|
4306
|
+
overflow-y: auto;
|
|
4307
|
+
-webkit-mask-image: linear-gradient(to bottom, #000 70%, transparent 100%);
|
|
4308
|
+
mask-image: linear-gradient(to bottom, #000 70%, transparent 100%);
|
|
4309
|
+
}
|
|
4310
|
+
|
|
4311
|
+
.subagent-reply.collapsible[data-collapse-mode="expanded"] .subagent-reply-scroll {
|
|
4312
|
+
max-height: 360px;
|
|
4313
|
+
overflow-y: auto;
|
|
4314
|
+
}
|
|
4315
|
+
|
|
4316
|
+
.subagent-reply.collapsible[data-collapse-mode="collapsed"] {
|
|
4317
|
+
padding-top: 6px;
|
|
4318
|
+
padding-bottom: 26px;
|
|
4319
|
+
}
|
|
4320
|
+
.subagent-reply.collapsible[data-collapse-mode="collapsed"] .subagent-reply-scroll {
|
|
4321
|
+
max-height: 0;
|
|
4322
|
+
overflow: hidden;
|
|
4323
|
+
margin: 0;
|
|
4324
|
+
}
|
|
4325
|
+
|
|
4326
|
+
/* 三态循环按钮:固定在气泡右下角,三种模式下都可见 */
|
|
4327
|
+
.subagent-reply-cycle {
|
|
4328
|
+
position: absolute;
|
|
4329
|
+
right: 8px;
|
|
4330
|
+
bottom: 6px;
|
|
4331
|
+
display: inline-flex;
|
|
4332
|
+
align-items: center;
|
|
4333
|
+
gap: 3px;
|
|
4334
|
+
padding: 2px 8px;
|
|
4335
|
+
font-size: 0.7rem;
|
|
4336
|
+
font-weight: 500;
|
|
4337
|
+
line-height: 1.4;
|
|
4338
|
+
color: var(--agent-color, var(--accent));
|
|
4339
|
+
background: color-mix(in srgb, var(--agent-color, var(--accent)) 8%, var(--bg-surface, #fff));
|
|
4340
|
+
border: 1px solid color-mix(in srgb, var(--agent-color, var(--accent)) 28%, transparent);
|
|
4341
|
+
border-radius: 999px;
|
|
4342
|
+
cursor: pointer;
|
|
4343
|
+
user-select: none;
|
|
4344
|
+
transition: background 0.15s ease, transform 0.1s ease, border-color 0.15s ease;
|
|
4345
|
+
}
|
|
4346
|
+
.subagent-reply-cycle:hover {
|
|
4347
|
+
background: color-mix(in srgb, var(--agent-color, var(--accent)) 16%, var(--bg-surface, #fff));
|
|
4348
|
+
border-color: color-mix(in srgb, var(--agent-color, var(--accent)) 45%, transparent);
|
|
4349
|
+
}
|
|
4350
|
+
.subagent-reply-cycle:active {
|
|
4351
|
+
transform: translateY(1px);
|
|
4352
|
+
}
|
|
4353
|
+
.subagent-reply-cycle-icon {
|
|
4354
|
+
font-size: 0.7rem;
|
|
4355
|
+
line-height: 1;
|
|
4356
|
+
}
|
|
4357
|
+
|
|
4358
|
+
/* 内部滚动条做小一点,别抢戏 */
|
|
4359
|
+
.subagent-reply-scroll::-webkit-scrollbar {
|
|
4360
|
+
width: 6px;
|
|
4361
|
+
height: 6px;
|
|
4362
|
+
}
|
|
4363
|
+
.subagent-reply-scroll::-webkit-scrollbar-thumb {
|
|
4364
|
+
background: color-mix(in srgb, var(--agent-color, var(--accent)) 35%, transparent);
|
|
4365
|
+
border-radius: 3px;
|
|
4366
|
+
}
|
|
4367
|
+
.subagent-reply-scroll::-webkit-scrollbar-track {
|
|
4368
|
+
background: transparent;
|
|
4237
4369
|
}
|
|
4238
4370
|
|
|
4239
4371
|
/* ===== 消息使用量信息 ===== */
|
|
@@ -4345,7 +4477,7 @@
|
|
|
4345
4477
|
/* Thinking Card (Deep Thought) */
|
|
4346
4478
|
.chat-message.thinking {
|
|
4347
4479
|
align-self: flex-start;
|
|
4348
|
-
max-width:
|
|
4480
|
+
max-width: 100%;
|
|
4349
4481
|
margin: 4px 0;
|
|
4350
4482
|
}
|
|
4351
4483
|
|
|
@@ -4384,7 +4516,7 @@
|
|
|
4384
4516
|
/* Prompt Suggestion Card (Pulsing) */
|
|
4385
4517
|
.chat-message.prompt {
|
|
4386
4518
|
align-self: center;
|
|
4387
|
-
max-width:
|
|
4519
|
+
max-width: 100%;
|
|
4388
4520
|
margin: 4px 0;
|
|
4389
4521
|
}
|
|
4390
4522
|
|
|
@@ -4467,6 +4599,7 @@
|
|
|
4467
4599
|
border-radius: var(--radius-sm);
|
|
4468
4600
|
overflow: hidden;
|
|
4469
4601
|
width: 100%;
|
|
4602
|
+
max-width: var(--chat-card-max-width, 720px);
|
|
4470
4603
|
box-sizing: border-box;
|
|
4471
4604
|
background: linear-gradient(180deg, rgba(255, 251, 245, 0.88) 0%, rgba(255, 246, 234, 0.72) 100%);
|
|
4472
4605
|
box-shadow: 0 1px 2px rgba(89, 58, 32, 0.04);
|
|
@@ -4874,6 +5007,9 @@
|
|
|
4874
5007
|
align-items: baseline;
|
|
4875
5008
|
gap: 5px;
|
|
4876
5009
|
margin: 2px 0;
|
|
5010
|
+
width: 100%;
|
|
5011
|
+
max-width: var(--chat-card-max-width, 720px);
|
|
5012
|
+
box-sizing: border-box;
|
|
4877
5013
|
padding: 3px 8px;
|
|
4878
5014
|
border-radius: 6px;
|
|
4879
5015
|
background: rgba(138, 108, 178, 0.04);
|
|
@@ -4981,6 +5117,9 @@
|
|
|
4981
5117
|
────────────────────────────────────────────────────────────── */
|
|
4982
5118
|
.tool-group {
|
|
4983
5119
|
margin: 4px 0;
|
|
5120
|
+
width: 100%;
|
|
5121
|
+
max-width: var(--chat-card-max-width, 720px);
|
|
5122
|
+
box-sizing: border-box;
|
|
4984
5123
|
border-radius: var(--radius-sm);
|
|
4985
5124
|
border: 1px solid var(--border-subtle);
|
|
4986
5125
|
background: linear-gradient(180deg, rgba(255, 251, 245, 0.85) 0%, rgba(255, 248, 238, 0.7) 100%);
|
|
@@ -5106,10 +5245,17 @@
|
|
|
5106
5245
|
display: flex;
|
|
5107
5246
|
flex-direction: column;
|
|
5108
5247
|
margin: 1px 0;
|
|
5248
|
+
width: 100%;
|
|
5249
|
+
max-width: var(--chat-card-max-width, 720px);
|
|
5250
|
+
box-sizing: border-box;
|
|
5109
5251
|
border-radius: var(--radius-xs);
|
|
5110
5252
|
cursor: pointer;
|
|
5111
5253
|
transition: background 0.16s ease;
|
|
5112
5254
|
}
|
|
5255
|
+
/* 嵌套在 tool-group-body 里的 inline-tool 撑满父容器即可(父已经限宽) */
|
|
5256
|
+
.tool-group-body > .inline-tool {
|
|
5257
|
+
max-width: 100%;
|
|
5258
|
+
}
|
|
5113
5259
|
.inline-tool-row {
|
|
5114
5260
|
display: flex;
|
|
5115
5261
|
align-items: center;
|
|
@@ -5293,6 +5439,9 @@
|
|
|
5293
5439
|
────────────────────────────────────────────────────────────── */
|
|
5294
5440
|
.inline-terminal {
|
|
5295
5441
|
margin: 4px 0;
|
|
5442
|
+
width: 100%;
|
|
5443
|
+
max-width: var(--chat-card-max-width, 720px);
|
|
5444
|
+
box-sizing: border-box;
|
|
5296
5445
|
border: 1px solid rgba(15, 12, 9, 0.6);
|
|
5297
5446
|
border-radius: var(--radius-sm);
|
|
5298
5447
|
background: #1f1b17;
|
|
@@ -5453,6 +5602,9 @@
|
|
|
5453
5602
|
────────────────────────────────────────────────────────────── */
|
|
5454
5603
|
.inline-diff {
|
|
5455
5604
|
margin: 4px 0;
|
|
5605
|
+
width: 100%;
|
|
5606
|
+
max-width: var(--chat-card-max-width, 720px);
|
|
5607
|
+
box-sizing: border-box;
|
|
5456
5608
|
border: 1px solid var(--border-subtle);
|
|
5457
5609
|
border-radius: var(--radius-sm);
|
|
5458
5610
|
overflow: hidden;
|
|
@@ -5677,15 +5829,39 @@
|
|
|
5677
5829
|
}
|
|
5678
5830
|
|
|
5679
5831
|
/* Markdown Content */
|
|
5680
|
-
|
|
5681
|
-
|
|
5682
|
-
.markdown-content
|
|
5832
|
+
/* min-width:0 让该 flex 子项可以在窄屏下收缩到比内容更窄;
|
|
5833
|
+
overflow-wrap: anywhere + word-break: break-word 兜底超长不可断词(长 URL / 长 ID / 长 token)。 */
|
|
5834
|
+
.markdown-content {
|
|
5835
|
+
color: inherit;
|
|
5836
|
+
white-space: normal;
|
|
5837
|
+
overflow-x: hidden;
|
|
5838
|
+
max-width: 100%;
|
|
5839
|
+
min-width: 0;
|
|
5840
|
+
overflow-wrap: anywhere;
|
|
5841
|
+
word-break: break-word;
|
|
5842
|
+
}
|
|
5843
|
+
/* 代码块:长行强制 wrap,不出现横向滚动条。代码块在窄屏下也保持在
|
|
5844
|
+
可视范围内,用户不需要拖横滚条才能看到右侧内容。 */
|
|
5845
|
+
.markdown-content .code-block pre {
|
|
5846
|
+
overflow-x: hidden;
|
|
5847
|
+
white-space: pre-wrap;
|
|
5848
|
+
word-break: break-word;
|
|
5849
|
+
overflow-wrap: anywhere;
|
|
5850
|
+
max-width: 100%;
|
|
5851
|
+
min-width: 0;
|
|
5852
|
+
}
|
|
5853
|
+
.markdown-content p { margin: 0 0 8px 0; overflow-wrap: anywhere; word-break: break-word; }
|
|
5683
5854
|
.markdown-content p:last-child { margin-bottom: 0; }
|
|
5684
5855
|
.markdown-content strong { font-weight: 600; }
|
|
5685
5856
|
.markdown-content em { font-style: italic; }
|
|
5686
5857
|
.markdown-content ul, .markdown-content ol { margin: 8px 0; padding-left: 20px; }
|
|
5687
|
-
.markdown-content li { margin: 4px 0; }
|
|
5688
|
-
.markdown-content h1, .markdown-content h2, .markdown-content h3 {
|
|
5858
|
+
.markdown-content li { margin: 4px 0; overflow-wrap: anywhere; word-break: break-word; }
|
|
5859
|
+
.markdown-content h1, .markdown-content h2, .markdown-content h3 {
|
|
5860
|
+
margin: 16px 0 8px 0;
|
|
5861
|
+
font-weight: 600;
|
|
5862
|
+
overflow-wrap: anywhere;
|
|
5863
|
+
word-break: break-word;
|
|
5864
|
+
}
|
|
5689
5865
|
.markdown-content h1 { font-size: 1.25rem; }
|
|
5690
5866
|
.markdown-content h2 { font-size: 1.1rem; }
|
|
5691
5867
|
.markdown-content h3 { font-size: 1rem; }
|
|
@@ -5695,6 +5871,16 @@
|
|
|
5695
5871
|
border-left: 3px solid var(--accent);
|
|
5696
5872
|
background: rgba(197, 101, 61, 0.06);
|
|
5697
5873
|
border-radius: 0 var(--radius-sm) var(--radius-sm) 0;
|
|
5874
|
+
overflow-wrap: anywhere;
|
|
5875
|
+
word-break: break-word;
|
|
5876
|
+
}
|
|
5877
|
+
.markdown-content a {
|
|
5878
|
+
overflow-wrap: anywhere;
|
|
5879
|
+
word-break: break-all;
|
|
5880
|
+
}
|
|
5881
|
+
.markdown-content img {
|
|
5882
|
+
max-width: 100%;
|
|
5883
|
+
height: auto;
|
|
5698
5884
|
}
|
|
5699
5885
|
.markdown-content code:not(.code-block):not(.code-inline) {
|
|
5700
5886
|
font-family: var(--font-mono);
|
|
@@ -5702,6 +5888,8 @@
|
|
|
5702
5888
|
background: rgba(150, 118, 85, 0.12);
|
|
5703
5889
|
padding: 2px 5px;
|
|
5704
5890
|
border-radius: 4px;
|
|
5891
|
+
overflow-wrap: anywhere;
|
|
5892
|
+
word-break: break-all;
|
|
5705
5893
|
}
|
|
5706
5894
|
|
|
5707
5895
|
.markdown-content code.code-inline {
|
|
@@ -5710,6 +5898,8 @@
|
|
|
5710
5898
|
background: rgba(150, 118, 85, 0.12);
|
|
5711
5899
|
padding: 2px 5px;
|
|
5712
5900
|
border-radius: 4px;
|
|
5901
|
+
overflow-wrap: anywhere;
|
|
5902
|
+
word-break: break-all;
|
|
5713
5903
|
}
|
|
5714
5904
|
.markdown-content .md-table-wrap {
|
|
5715
5905
|
margin: 12px 0;
|
|
@@ -5721,6 +5911,7 @@
|
|
|
5721
5911
|
.markdown-content .md-table {
|
|
5722
5912
|
border-collapse: collapse;
|
|
5723
5913
|
width: 100%;
|
|
5914
|
+
table-layout: fixed;
|
|
5724
5915
|
font-size: 0.8125rem;
|
|
5725
5916
|
white-space: normal;
|
|
5726
5917
|
}
|
|
@@ -5730,6 +5921,8 @@
|
|
|
5730
5921
|
padding: 6px 10px;
|
|
5731
5922
|
text-align: left;
|
|
5732
5923
|
vertical-align: top;
|
|
5924
|
+
overflow-wrap: anywhere;
|
|
5925
|
+
word-break: break-word;
|
|
5733
5926
|
}
|
|
5734
5927
|
.markdown-content .md-table th {
|
|
5735
5928
|
background: rgba(150, 118, 85, 0.1);
|
|
@@ -5790,7 +5983,12 @@
|
|
|
5790
5983
|
.markdown-content pre {
|
|
5791
5984
|
margin: 0;
|
|
5792
5985
|
padding: 12px;
|
|
5793
|
-
overflow-x:
|
|
5986
|
+
overflow-x: hidden;
|
|
5987
|
+
white-space: pre-wrap;
|
|
5988
|
+
word-break: break-word;
|
|
5989
|
+
overflow-wrap: anywhere;
|
|
5990
|
+
max-width: 100%;
|
|
5991
|
+
min-width: 0;
|
|
5794
5992
|
}
|
|
5795
5993
|
.markdown-content pre code {
|
|
5796
5994
|
font-family: var(--font-mono);
|
|
@@ -5799,6 +5997,8 @@
|
|
|
5799
5997
|
color: #f5eadc;
|
|
5800
5998
|
background: transparent;
|
|
5801
5999
|
padding: 0;
|
|
6000
|
+
max-width: 100%;
|
|
6001
|
+
display: block;
|
|
5802
6002
|
}
|
|
5803
6003
|
|
|
5804
6004
|
/* Syntax Highlighting */
|
|
@@ -5842,15 +6042,110 @@
|
|
|
5842
6042
|
align-items: center;
|
|
5843
6043
|
justify-content: space-between;
|
|
5844
6044
|
padding: 2px 4px 3px 6px;
|
|
5845
|
-
gap:
|
|
6045
|
+
gap: 3px;
|
|
5846
6046
|
}
|
|
5847
6047
|
.input-composer-left {
|
|
5848
6048
|
display: flex;
|
|
5849
6049
|
align-items: center;
|
|
5850
|
-
gap:
|
|
6050
|
+
gap: 3px;
|
|
5851
6051
|
flex-wrap: nowrap;
|
|
5852
6052
|
flex-shrink: 0;
|
|
6053
|
+
min-width: 0;
|
|
6054
|
+
}
|
|
6055
|
+
/* 会话设置三件套 (mode / model / thinking) 的容器 —— 用极轻的内描边视觉地
|
|
6056
|
+
把三颗"新会话/会话级配置 pill"框成一个 segmented control,与右侧
|
|
6057
|
+
开关型 chip (自动批准 / 终端交互) 在认知上分层。 */
|
|
6058
|
+
.composer-pill-group {
|
|
6059
|
+
display: inline-flex;
|
|
6060
|
+
align-items: center;
|
|
6061
|
+
gap: 2px;
|
|
6062
|
+
padding: 1px;
|
|
6063
|
+
border-radius: 11px;
|
|
6064
|
+
background: rgba(197, 101, 61, 0.05);
|
|
6065
|
+
box-shadow: inset 0 0 0 1px rgba(197, 101, 61, 0.08);
|
|
6066
|
+
min-width: 0;
|
|
6067
|
+
}
|
|
6068
|
+
.composer-pill-group .composer-pill {
|
|
6069
|
+
border-color: transparent;
|
|
6070
|
+
background: transparent;
|
|
6071
|
+
}
|
|
6072
|
+
.composer-pill-group .composer-pill:hover {
|
|
6073
|
+
border-color: var(--accent);
|
|
6074
|
+
background-color: rgba(255, 255, 255, 0.75);
|
|
6075
|
+
}
|
|
6076
|
+
.composer-pill-group .composer-pill:focus,
|
|
6077
|
+
.composer-pill-group .composer-pill:focus-visible,
|
|
6078
|
+
.composer-pill-group .composer-pill:focus-within {
|
|
6079
|
+
border-color: var(--accent);
|
|
6080
|
+
background-color: rgba(255, 255, 255, 0.9);
|
|
6081
|
+
}
|
|
6082
|
+
|
|
6083
|
+
/* 三件套(Mode / Model / Thinking)扁平文字版:
|
|
6084
|
+
去掉边框 / 背景 / chevron,只留纯文字 + · 分隔。点击文字区域弹出原生
|
|
6085
|
+
<select>(桌面端下拉、移动端滚轮选择),由透明的 .composer-text-hidden-select
|
|
6086
|
+
叠层承载交互。显示文本统一用 raw id(default / claude-sonnet-4-5 / standard…)。 */
|
|
6087
|
+
.composer-text-group {
|
|
6088
|
+
display: inline-flex;
|
|
6089
|
+
align-items: center;
|
|
6090
|
+
gap: 4px;
|
|
6091
|
+
min-width: 0;
|
|
6092
|
+
flex-wrap: nowrap;
|
|
6093
|
+
}
|
|
6094
|
+
.composer-text-pill {
|
|
6095
|
+
position: relative;
|
|
6096
|
+
font-family: var(--font-sans);
|
|
6097
|
+
font-size: 0.7rem;
|
|
6098
|
+
font-weight: 500;
|
|
6099
|
+
line-height: 1;
|
|
6100
|
+
padding: 2px 2px;
|
|
6101
|
+
color: var(--text-secondary);
|
|
6102
|
+
cursor: pointer;
|
|
6103
|
+
transition: color var(--transition-fast);
|
|
6104
|
+
display: inline-flex;
|
|
6105
|
+
align-items: center;
|
|
6106
|
+
justify-content: center;
|
|
6107
|
+
white-space: nowrap;
|
|
6108
|
+
box-sizing: border-box;
|
|
6109
|
+
user-select: none;
|
|
6110
|
+
max-width: 110px;
|
|
6111
|
+
letter-spacing: 0.01em;
|
|
6112
|
+
}
|
|
6113
|
+
.composer-text-pill:hover,
|
|
6114
|
+
.composer-text-pill:focus-within {
|
|
6115
|
+
color: var(--accent);
|
|
6116
|
+
}
|
|
6117
|
+
.composer-text-label {
|
|
6118
|
+
overflow: hidden;
|
|
6119
|
+
text-overflow: ellipsis;
|
|
6120
|
+
max-width: 100%;
|
|
5853
6121
|
}
|
|
6122
|
+
.composer-text-hidden-select {
|
|
6123
|
+
position: absolute;
|
|
6124
|
+
inset: 0;
|
|
6125
|
+
width: 100%;
|
|
6126
|
+
height: 100%;
|
|
6127
|
+
margin: 0;
|
|
6128
|
+
padding: 0;
|
|
6129
|
+
border: 0;
|
|
6130
|
+
background: transparent;
|
|
6131
|
+
color: transparent;
|
|
6132
|
+
font: inherit;
|
|
6133
|
+
opacity: 0;
|
|
6134
|
+
cursor: pointer;
|
|
6135
|
+
appearance: none;
|
|
6136
|
+
-webkit-appearance: none;
|
|
6137
|
+
}
|
|
6138
|
+
.composer-text-hidden-select:focus { outline: none; }
|
|
6139
|
+
.composer-text-sep {
|
|
6140
|
+
color: var(--text-tertiary, #b5a89a);
|
|
6141
|
+
font-size: 0.7rem;
|
|
6142
|
+
line-height: 1;
|
|
6143
|
+
user-select: none;
|
|
6144
|
+
pointer-events: none;
|
|
6145
|
+
opacity: 0.65;
|
|
6146
|
+
}
|
|
6147
|
+
.chat-model-text-pill { max-width: 110px; }
|
|
6148
|
+
.chat-thinking-text-pill { max-width: 90px; }
|
|
5854
6149
|
|
|
5855
6150
|
/* Permission actions inline in composer bar */
|
|
5856
6151
|
.permission-actions {
|
|
@@ -5913,28 +6208,16 @@
|
|
|
5913
6208
|
to { opacity: 1; transform: translateX(0); }
|
|
5914
6209
|
}
|
|
5915
6210
|
|
|
5916
|
-
/*
|
|
5917
|
-
|
|
5918
|
-
display: inline-flex;
|
|
5919
|
-
align-items: center;
|
|
5920
|
-
gap: 2px;
|
|
5921
|
-
font-size: 0.65rem;
|
|
5922
|
-
color: var(--muted);
|
|
5923
|
-
cursor: pointer;
|
|
5924
|
-
padding: 1px 4px;
|
|
5925
|
-
border-radius: 4px;
|
|
5926
|
-
transition: color 0.15s, background 0.15s;
|
|
5927
|
-
user-select: none;
|
|
5928
|
-
white-space: nowrap;
|
|
5929
|
-
}
|
|
5930
|
-
.auto-approve-indicator:hover {
|
|
5931
|
-
background: rgba(255, 255, 255, 0.06);
|
|
5932
|
-
}
|
|
6211
|
+
/* 自动批准 chip —— 套用 .composer-pill .composer-pill-chip 的基础外观,
|
|
6212
|
+
这里只覆盖 active 态的绿色(语义色)。 */
|
|
5933
6213
|
.auto-approve-indicator.active {
|
|
5934
6214
|
color: #22c55e;
|
|
6215
|
+
border-color: rgba(34, 197, 94, 0.5);
|
|
6216
|
+
background: rgba(34, 197, 94, 0.12);
|
|
5935
6217
|
}
|
|
5936
6218
|
.auto-approve-indicator.active:hover {
|
|
5937
|
-
background: rgba(34, 197, 94, 0.
|
|
6219
|
+
background: rgba(34, 197, 94, 0.2);
|
|
6220
|
+
border-color: #22c55e;
|
|
5938
6221
|
}
|
|
5939
6222
|
|
|
5940
6223
|
/* Approval stats badge */
|
|
@@ -5947,24 +6230,27 @@
|
|
|
5947
6230
|
display: none;
|
|
5948
6231
|
}
|
|
5949
6232
|
.approval-stats-divider {
|
|
5950
|
-
|
|
6233
|
+
/* 同行已经全部用 .composer-pill 的统一 gap (3px) 分隔,再加一条 1px 实线分隔
|
|
6234
|
+
反而显得拥挤。仅保留极细的 spacer 让 stats badge 与左侧 chip 不黏连。 */
|
|
6235
|
+
width: 0;
|
|
5951
6236
|
height: 16px;
|
|
5952
|
-
|
|
5953
|
-
margin: 0 4px 0 2px;
|
|
6237
|
+
margin: 0 1px;
|
|
5954
6238
|
}
|
|
5955
6239
|
.approval-stats-badge {
|
|
5956
6240
|
display: inline-flex;
|
|
5957
6241
|
align-items: center;
|
|
5958
6242
|
gap: 3px;
|
|
5959
|
-
|
|
6243
|
+
min-height: 22px;
|
|
6244
|
+
padding: 1px 8px;
|
|
5960
6245
|
border-radius: 10px;
|
|
5961
6246
|
background: rgba(34, 197, 94, 0.1);
|
|
5962
6247
|
color: #22c55e;
|
|
5963
|
-
font-size: 0.
|
|
6248
|
+
font-size: 0.625rem;
|
|
5964
6249
|
font-weight: 600;
|
|
5965
6250
|
cursor: default;
|
|
5966
6251
|
transition: background 0.15s;
|
|
5967
|
-
line-height: 1
|
|
6252
|
+
line-height: 1;
|
|
6253
|
+
box-sizing: border-box;
|
|
5968
6254
|
}
|
|
5969
6255
|
.approval-stats-badge:hover {
|
|
5970
6256
|
background: rgba(34, 197, 94, 0.18);
|
|
@@ -6028,103 +6314,463 @@
|
|
|
6028
6314
|
.approval-stats-row-label {
|
|
6029
6315
|
flex: 1;
|
|
6030
6316
|
}
|
|
6031
|
-
.approval-stats-row-count {
|
|
6032
|
-
font-weight: 600;
|
|
6033
|
-
color: var(--text-primary, #eee);
|
|
6034
|
-
font-variant-numeric: tabular-nums;
|
|
6035
|
-
min-width: 20px;
|
|
6036
|
-
text-align: right;
|
|
6317
|
+
.approval-stats-row-count {
|
|
6318
|
+
font-weight: 600;
|
|
6319
|
+
color: var(--text-primary, #eee);
|
|
6320
|
+
font-variant-numeric: tabular-nums;
|
|
6321
|
+
min-width: 20px;
|
|
6322
|
+
text-align: right;
|
|
6323
|
+
}
|
|
6324
|
+
.approval-stats-row-total {
|
|
6325
|
+
border-top: 1px solid var(--border);
|
|
6326
|
+
padding-top: 4px;
|
|
6327
|
+
margin-top: 2px;
|
|
6328
|
+
color: #22c55e;
|
|
6329
|
+
}
|
|
6330
|
+
.approval-stats-row-total .approval-stats-row-count {
|
|
6331
|
+
color: #22c55e;
|
|
6332
|
+
}
|
|
6333
|
+
|
|
6334
|
+
/* 终端交互切换按钮 —— 现在套用 .composer-pill .composer-pill-chip 的统一外观,
|
|
6335
|
+
这里仅保留图标专属的微调(字体大小 / 收紧 padding 让 ⌨ 居中)。 */
|
|
6336
|
+
.composer-interactive-toggle {
|
|
6337
|
+
font-size: 0.75rem;
|
|
6338
|
+
padding: 1px 8px;
|
|
6339
|
+
}
|
|
6340
|
+
.input-composer-right {
|
|
6341
|
+
display: flex;
|
|
6342
|
+
align-items: center;
|
|
6343
|
+
gap: 4px;
|
|
6344
|
+
position: relative;
|
|
6345
|
+
flex: 1;
|
|
6346
|
+
justify-content: flex-end;
|
|
6347
|
+
}
|
|
6348
|
+
/* 旧 #queue-counter pill(v1.30.3 那颗藏在 input-hint 旁的小角标)已下线,
|
|
6349
|
+
由 .queue-bar(输入框上方独立浮条)接管。queuePulse / queueDotPulse 关键帧
|
|
6350
|
+
新组件继续复用,保留在下方。 */
|
|
6351
|
+
@keyframes queuePulse {
|
|
6352
|
+
0%, 100% { opacity: 1; }
|
|
6353
|
+
50% { opacity: 0.78; }
|
|
6354
|
+
}
|
|
6355
|
+
@keyframes queueDotPulse {
|
|
6356
|
+
0%, 100% { transform: scale(1); opacity: 1; }
|
|
6357
|
+
50% { transform: scale(0.7); opacity: 0.55; }
|
|
6358
|
+
}
|
|
6359
|
+
|
|
6360
|
+
/* ─────────────────────────────────────────────────────────────────────
|
|
6361
|
+
排队消息条(.queue-bar)—— 浮在 .input-composer 上方,靠 .queue-bar-host
|
|
6362
|
+
右对齐到对话框右下角。结构:
|
|
6363
|
+
.queue-bar (折叠条 row)
|
|
6364
|
+
├ .queue-bar-toggle (● 排队 N · 预览 ⌃)
|
|
6365
|
+
├ .queue-bar-divider
|
|
6366
|
+
├ .queue-bar-promote (⚡ 立即)
|
|
6367
|
+
└ .queue-bar-panel (展开后下拉的消息列表,默认隐)
|
|
6368
|
+
展开时给 .queue-bar 加 .expanded class,CSS 控制 panel 显形 + chevron 翻转。
|
|
6369
|
+
───────────────────────────────────────────────────────────────────── */
|
|
6370
|
+
.queue-bar-host {
|
|
6371
|
+
display: flex;
|
|
6372
|
+
justify-content: flex-end;
|
|
6373
|
+
padding: 0 6px 6px;
|
|
6374
|
+
position: relative;
|
|
6375
|
+
z-index: 2;
|
|
6376
|
+
pointer-events: none; /* host 自身不挡点击,bar 内子节点 auto */
|
|
6377
|
+
}
|
|
6378
|
+
.queue-bar-host[hidden] { display: none; }
|
|
6379
|
+
|
|
6380
|
+
.queue-bar {
|
|
6381
|
+
pointer-events: auto;
|
|
6382
|
+
position: relative;
|
|
6383
|
+
display: inline-flex;
|
|
6384
|
+
align-items: stretch;
|
|
6385
|
+
gap: 0;
|
|
6386
|
+
width: 340px;
|
|
6387
|
+
max-width: calc(100% - 4px);
|
|
6388
|
+
height: 38px;
|
|
6389
|
+
padding: 0;
|
|
6390
|
+
border-radius: 999px;
|
|
6391
|
+
background: linear-gradient(180deg, #fffaf2 0%, #f6ead8 100%);
|
|
6392
|
+
box-shadow:
|
|
6393
|
+
0 0 0 1.2px rgba(197, 101, 61, 0.42),
|
|
6394
|
+
inset 0 1px 0 rgba(255, 255, 255, 0.85),
|
|
6395
|
+
var(--shadow-sm);
|
|
6396
|
+
transition: box-shadow var(--transition-fast), transform var(--transition-fast);
|
|
6397
|
+
animation: queueBarEnter 220ms ease-out both;
|
|
6398
|
+
}
|
|
6399
|
+
.queue-bar:hover {
|
|
6400
|
+
transform: translateY(-1px);
|
|
6401
|
+
box-shadow:
|
|
6402
|
+
0 0 0 1.2px rgba(197, 101, 61, 0.55),
|
|
6403
|
+
inset 0 1px 0 rgba(255, 255, 255, 0.9),
|
|
6404
|
+
var(--shadow-md);
|
|
6405
|
+
}
|
|
6406
|
+
.queue-bar.queue-bar-capacity {
|
|
6407
|
+
box-shadow:
|
|
6408
|
+
0 0 0 1.4px rgba(169, 106, 47, 0.6),
|
|
6409
|
+
inset 0 1px 0 rgba(255, 255, 255, 0.85),
|
|
6410
|
+
var(--shadow-sm);
|
|
6411
|
+
}
|
|
6412
|
+
.queue-bar.queue-bar-inflight {
|
|
6413
|
+
animation: queueBarEnter 220ms ease-out both, queuePulse 1.6s ease-in-out 220ms infinite;
|
|
6414
|
+
}
|
|
6415
|
+
@keyframes queueBarEnter {
|
|
6416
|
+
from { opacity: 0; transform: translateY(4px) scale(0.98); }
|
|
6417
|
+
to { opacity: 1; transform: translateY(0) scale(1); }
|
|
6418
|
+
}
|
|
6419
|
+
|
|
6420
|
+
.queue-bar-toggle {
|
|
6421
|
+
flex: 1 1 auto;
|
|
6422
|
+
min-width: 0;
|
|
6423
|
+
display: inline-flex;
|
|
6424
|
+
align-items: center;
|
|
6425
|
+
gap: 7px;
|
|
6426
|
+
padding: 0 10px 0 14px;
|
|
6427
|
+
border: none;
|
|
6428
|
+
background: transparent;
|
|
6429
|
+
cursor: pointer;
|
|
6430
|
+
font: inherit;
|
|
6431
|
+
color: var(--text-primary);
|
|
6432
|
+
border-radius: 999px 0 0 999px;
|
|
6433
|
+
text-align: left;
|
|
6434
|
+
}
|
|
6435
|
+
.queue-bar-toggle:focus-visible {
|
|
6436
|
+
outline: 2px solid var(--border-focus);
|
|
6437
|
+
outline-offset: -2px;
|
|
6438
|
+
}
|
|
6439
|
+
.queue-bar-dot {
|
|
6440
|
+
width: 8px;
|
|
6441
|
+
height: 8px;
|
|
6442
|
+
border-radius: 50%;
|
|
6443
|
+
background: var(--accent);
|
|
6444
|
+
flex-shrink: 0;
|
|
6445
|
+
box-shadow: 0 0 0 2px rgba(197, 101, 61, 0.18);
|
|
6446
|
+
}
|
|
6447
|
+
.queue-bar-dot.queue-bar-dot-pulse {
|
|
6448
|
+
animation: queueDotPulse 1.0s ease-in-out infinite;
|
|
6449
|
+
}
|
|
6450
|
+
.queue-bar-count {
|
|
6451
|
+
font-size: 0.75rem;
|
|
6452
|
+
font-weight: 600;
|
|
6453
|
+
color: var(--accent);
|
|
6454
|
+
letter-spacing: 0.02em;
|
|
6455
|
+
flex-shrink: 0;
|
|
6456
|
+
line-height: 1;
|
|
6457
|
+
}
|
|
6458
|
+
.queue-bar-sep {
|
|
6459
|
+
color: var(--text-muted);
|
|
6460
|
+
opacity: 0.55;
|
|
6461
|
+
font-size: 0.7rem;
|
|
6462
|
+
flex-shrink: 0;
|
|
6463
|
+
}
|
|
6464
|
+
.queue-bar-preview {
|
|
6465
|
+
font-size: 0.75rem;
|
|
6466
|
+
color: var(--text-secondary);
|
|
6467
|
+
flex: 1 1 auto;
|
|
6468
|
+
min-width: 0;
|
|
6469
|
+
overflow: hidden;
|
|
6470
|
+
text-overflow: ellipsis;
|
|
6471
|
+
white-space: nowrap;
|
|
6472
|
+
line-height: 1;
|
|
6473
|
+
}
|
|
6474
|
+
.queue-bar-chevron {
|
|
6475
|
+
color: var(--text-tertiary);
|
|
6476
|
+
flex-shrink: 0;
|
|
6477
|
+
transition: transform 180ms ease-out;
|
|
6478
|
+
}
|
|
6479
|
+
.queue-bar.expanded .queue-bar-chevron {
|
|
6480
|
+
transform: rotate(180deg);
|
|
6481
|
+
color: var(--accent);
|
|
6482
|
+
}
|
|
6483
|
+
|
|
6484
|
+
.queue-bar-divider {
|
|
6485
|
+
width: 1px;
|
|
6486
|
+
background: rgba(197, 101, 61, 0.28);
|
|
6487
|
+
margin: 7px 0;
|
|
6488
|
+
flex-shrink: 0;
|
|
6489
|
+
}
|
|
6490
|
+
|
|
6491
|
+
.queue-bar-promote {
|
|
6492
|
+
flex-shrink: 0;
|
|
6493
|
+
display: inline-flex;
|
|
6494
|
+
align-items: center;
|
|
6495
|
+
gap: 5px;
|
|
6496
|
+
padding: 0 14px 0 12px;
|
|
6497
|
+
border: none;
|
|
6498
|
+
cursor: pointer;
|
|
6499
|
+
font: inherit;
|
|
6500
|
+
font-size: 0.75rem;
|
|
6501
|
+
font-weight: 600;
|
|
6502
|
+
color: #fff;
|
|
6503
|
+
background: linear-gradient(180deg, var(--accent) 0%, var(--accent-active) 100%);
|
|
6504
|
+
border-radius: 0 999px 999px 0;
|
|
6505
|
+
letter-spacing: 0.04em;
|
|
6506
|
+
transition: filter var(--transition-fast), transform var(--transition-fast);
|
|
6507
|
+
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.22);
|
|
6508
|
+
}
|
|
6509
|
+
.queue-bar-promote:hover { filter: brightness(1.06); }
|
|
6510
|
+
.queue-bar-promote:active { transform: scale(0.97); }
|
|
6511
|
+
.queue-bar-promote:focus-visible {
|
|
6512
|
+
outline: 2px solid var(--border-focus);
|
|
6513
|
+
outline-offset: 2px;
|
|
6514
|
+
}
|
|
6515
|
+
.queue-bar-promote svg { flex-shrink: 0; }
|
|
6516
|
+
.queue-bar-promote-label { line-height: 1; }
|
|
6517
|
+
|
|
6518
|
+
/* 展开面板:默认折叠(不可见 + 不占空间),加 .expanded 时滑出 */
|
|
6519
|
+
.queue-bar-panel {
|
|
6520
|
+
position: absolute;
|
|
6521
|
+
right: 0;
|
|
6522
|
+
bottom: calc(100% + 8px);
|
|
6523
|
+
width: min(380px, calc(100vw - 24px));
|
|
6524
|
+
max-height: 280px;
|
|
6525
|
+
display: flex;
|
|
6526
|
+
flex-direction: column;
|
|
6527
|
+
background: var(--bg-elevated);
|
|
6528
|
+
border-radius: 14px;
|
|
6529
|
+
box-shadow:
|
|
6530
|
+
0 0 0 1px var(--border-default),
|
|
6531
|
+
var(--shadow-lg);
|
|
6532
|
+
overflow: hidden;
|
|
6533
|
+
opacity: 0;
|
|
6534
|
+
transform: scale(0.96) translateY(4px);
|
|
6535
|
+
transform-origin: bottom right;
|
|
6536
|
+
pointer-events: none;
|
|
6537
|
+
transition: opacity 180ms ease-out, transform 180ms ease-out;
|
|
6538
|
+
}
|
|
6539
|
+
.queue-bar.expanded .queue-bar-panel {
|
|
6540
|
+
opacity: 1;
|
|
6541
|
+
transform: scale(1) translateY(0);
|
|
6542
|
+
pointer-events: auto;
|
|
6543
|
+
}
|
|
6544
|
+
|
|
6545
|
+
.queue-bar-panel-header {
|
|
6546
|
+
display: flex;
|
|
6547
|
+
align-items: center;
|
|
6548
|
+
gap: 8px;
|
|
6549
|
+
padding: 9px 12px;
|
|
6550
|
+
border-bottom: 1px solid var(--border-subtle);
|
|
6551
|
+
background: linear-gradient(180deg, rgba(246, 234, 216, 0.55) 0%, transparent 100%);
|
|
6552
|
+
}
|
|
6553
|
+
.queue-bar-panel-title {
|
|
6554
|
+
font-size: 0.78rem;
|
|
6555
|
+
font-weight: 600;
|
|
6556
|
+
color: var(--text-primary);
|
|
6557
|
+
flex: 1 1 auto;
|
|
6558
|
+
min-width: 0;
|
|
6559
|
+
}
|
|
6560
|
+
.queue-bar-clear,
|
|
6561
|
+
.queue-bar-collapse {
|
|
6562
|
+
display: inline-flex;
|
|
6563
|
+
align-items: center;
|
|
6564
|
+
gap: 3px;
|
|
6565
|
+
padding: 3px 9px;
|
|
6566
|
+
border: 1px solid transparent;
|
|
6567
|
+
background: transparent;
|
|
6568
|
+
cursor: pointer;
|
|
6569
|
+
font: inherit;
|
|
6570
|
+
font-size: 0.7rem;
|
|
6571
|
+
color: var(--text-tertiary);
|
|
6572
|
+
border-radius: 8px;
|
|
6573
|
+
transition: all var(--transition-fast);
|
|
6574
|
+
line-height: 1;
|
|
6575
|
+
}
|
|
6576
|
+
.queue-bar-clear:hover:not([disabled]) {
|
|
6577
|
+
color: var(--danger);
|
|
6578
|
+
background: var(--danger-muted);
|
|
6579
|
+
border-color: rgba(178, 79, 69, 0.25);
|
|
6580
|
+
}
|
|
6581
|
+
.queue-bar-clear[disabled] {
|
|
6582
|
+
opacity: 0.4;
|
|
6583
|
+
cursor: not-allowed;
|
|
6584
|
+
}
|
|
6585
|
+
.queue-bar-collapse:hover {
|
|
6586
|
+
color: var(--accent);
|
|
6587
|
+
background: var(--accent-muted);
|
|
6588
|
+
}
|
|
6589
|
+
.queue-bar-collapse svg { flex-shrink: 0; }
|
|
6590
|
+
|
|
6591
|
+
.queue-bar-list {
|
|
6592
|
+
list-style: none;
|
|
6593
|
+
margin: 0;
|
|
6594
|
+
padding: 6px;
|
|
6595
|
+
display: flex;
|
|
6596
|
+
flex-direction: column;
|
|
6597
|
+
gap: 6px;
|
|
6598
|
+
overflow-y: auto;
|
|
6599
|
+
overscroll-behavior: contain;
|
|
6600
|
+
flex: 1 1 auto;
|
|
6601
|
+
min-height: 0;
|
|
6602
|
+
}
|
|
6603
|
+
|
|
6604
|
+
.queue-bar-item {
|
|
6605
|
+
display: flex;
|
|
6606
|
+
align-items: flex-start;
|
|
6607
|
+
gap: 6px;
|
|
6608
|
+
padding: 8px 8px 8px 4px;
|
|
6609
|
+
background: var(--bg-surface);
|
|
6610
|
+
border: 1px solid var(--border-subtle);
|
|
6611
|
+
border-radius: 10px;
|
|
6612
|
+
position: relative;
|
|
6613
|
+
transition: transform 140ms ease-out, box-shadow var(--transition-fast),
|
|
6614
|
+
background var(--transition-fast), border-color var(--transition-fast);
|
|
6615
|
+
will-change: transform;
|
|
6616
|
+
}
|
|
6617
|
+
.queue-bar-item:hover {
|
|
6618
|
+
background: rgba(255, 251, 245, 0.92);
|
|
6619
|
+
border-color: var(--border-default);
|
|
6037
6620
|
}
|
|
6038
|
-
.
|
|
6039
|
-
|
|
6040
|
-
|
|
6041
|
-
|
|
6042
|
-
|
|
6621
|
+
.queue-bar-item.dragging {
|
|
6622
|
+
z-index: 5;
|
|
6623
|
+
box-shadow: var(--shadow-lg), 0 0 0 1.5px var(--accent);
|
|
6624
|
+
background: var(--bg-elevated);
|
|
6625
|
+
transition: box-shadow var(--transition-fast); /* dragging 期间禁用 transform 过渡 */
|
|
6626
|
+
cursor: grabbing;
|
|
6043
6627
|
}
|
|
6044
|
-
.
|
|
6045
|
-
|
|
6628
|
+
.queue-bar-item-sliding {
|
|
6629
|
+
transition: transform 140ms ease-out;
|
|
6046
6630
|
}
|
|
6047
6631
|
|
|
6048
|
-
.
|
|
6632
|
+
.queue-bar-item-drag {
|
|
6633
|
+
flex-shrink: 0;
|
|
6634
|
+
width: 18px;
|
|
6635
|
+
height: 28px;
|
|
6636
|
+
border: none;
|
|
6637
|
+
background: transparent;
|
|
6638
|
+
cursor: grab;
|
|
6639
|
+
color: var(--text-muted);
|
|
6640
|
+
padding: 0;
|
|
6049
6641
|
display: inline-flex;
|
|
6050
6642
|
align-items: center;
|
|
6051
6643
|
justify-content: center;
|
|
6052
|
-
width: 22px;
|
|
6053
|
-
height: 22px;
|
|
6054
|
-
border: 1px solid var(--border-subtle);
|
|
6055
6644
|
border-radius: 4px;
|
|
6056
|
-
|
|
6645
|
+
touch-action: none; /* 不让浏览器抢走拖拽手势用作滚动 */
|
|
6646
|
+
transition: color var(--transition-fast), background var(--transition-fast);
|
|
6647
|
+
}
|
|
6648
|
+
.queue-bar-item-drag:hover { color: var(--accent); background: var(--accent-muted); }
|
|
6649
|
+
.queue-bar-item-drag:active { cursor: grabbing; }
|
|
6650
|
+
.queue-bar-item-drag[disabled] {
|
|
6651
|
+
opacity: 0.35;
|
|
6652
|
+
cursor: default;
|
|
6653
|
+
}
|
|
6654
|
+
.queue-bar-item-drag[disabled]:hover {
|
|
6057
6655
|
color: var(--text-muted);
|
|
6058
|
-
|
|
6059
|
-
|
|
6060
|
-
|
|
6656
|
+
background: transparent;
|
|
6657
|
+
}
|
|
6658
|
+
|
|
6659
|
+
.queue-bar-item-index {
|
|
6061
6660
|
flex-shrink: 0;
|
|
6062
|
-
|
|
6661
|
+
font-family: var(--font-mono);
|
|
6662
|
+
font-size: 0.65rem;
|
|
6663
|
+
font-weight: 600;
|
|
6664
|
+
color: var(--accent);
|
|
6665
|
+
background: var(--accent-muted);
|
|
6666
|
+
padding: 3px 6px;
|
|
6667
|
+
border-radius: 6px;
|
|
6668
|
+
line-height: 1;
|
|
6669
|
+
margin-top: 1px;
|
|
6670
|
+
min-width: 26px;
|
|
6671
|
+
text-align: center;
|
|
6063
6672
|
}
|
|
6064
|
-
|
|
6065
|
-
|
|
6066
|
-
|
|
6067
|
-
|
|
6673
|
+
|
|
6674
|
+
.queue-bar-item-text {
|
|
6675
|
+
flex: 1 1 auto;
|
|
6676
|
+
min-width: 0;
|
|
6677
|
+
border: none;
|
|
6678
|
+
background: transparent;
|
|
6679
|
+
cursor: pointer;
|
|
6680
|
+
font: inherit;
|
|
6681
|
+
font-size: 0.78rem;
|
|
6682
|
+
color: var(--text-primary);
|
|
6683
|
+
text-align: left;
|
|
6684
|
+
padding: 1px 0;
|
|
6685
|
+
line-height: 1.4;
|
|
6686
|
+
display: -webkit-box;
|
|
6687
|
+
-webkit-line-clamp: 2;
|
|
6688
|
+
-webkit-box-orient: vertical;
|
|
6689
|
+
overflow: hidden;
|
|
6690
|
+
white-space: pre-wrap;
|
|
6691
|
+
word-break: break-word;
|
|
6692
|
+
transition: color var(--transition-fast);
|
|
6068
6693
|
}
|
|
6069
|
-
.
|
|
6070
|
-
|
|
6071
|
-
|
|
6072
|
-
|
|
6694
|
+
.queue-bar-item.expanded .queue-bar-item-text {
|
|
6695
|
+
display: block;
|
|
6696
|
+
-webkit-line-clamp: unset;
|
|
6697
|
+
max-height: 200px;
|
|
6698
|
+
overflow-y: auto;
|
|
6073
6699
|
}
|
|
6074
|
-
.
|
|
6075
|
-
|
|
6700
|
+
.queue-bar-item-text:hover { color: var(--accent); }
|
|
6701
|
+
|
|
6702
|
+
.queue-bar-item-delete {
|
|
6703
|
+
flex-shrink: 0;
|
|
6704
|
+
width: 22px;
|
|
6705
|
+
height: 22px;
|
|
6706
|
+
border: none;
|
|
6707
|
+
background: transparent;
|
|
6708
|
+
cursor: pointer;
|
|
6709
|
+
color: var(--text-muted);
|
|
6710
|
+
border-radius: 6px;
|
|
6711
|
+
display: inline-flex;
|
|
6076
6712
|
align-items: center;
|
|
6077
|
-
|
|
6078
|
-
|
|
6079
|
-
|
|
6080
|
-
|
|
6713
|
+
justify-content: center;
|
|
6714
|
+
opacity: 0;
|
|
6715
|
+
transition: opacity var(--transition-fast), color var(--transition-fast),
|
|
6716
|
+
background var(--transition-fast);
|
|
6081
6717
|
}
|
|
6082
|
-
.queue-
|
|
6083
|
-
|
|
6084
|
-
|
|
6085
|
-
background: var(--accent-muted);
|
|
6086
|
-
padding: 1px 6px;
|
|
6087
|
-
border-radius: 8px;
|
|
6088
|
-
white-space: nowrap;
|
|
6089
|
-
font-weight: 600;
|
|
6090
|
-
animation: queuePulse 1.5s ease-in-out infinite;
|
|
6718
|
+
.queue-bar-item:hover .queue-bar-item-delete,
|
|
6719
|
+
.queue-bar-item:focus-within .queue-bar-item-delete {
|
|
6720
|
+
opacity: 1;
|
|
6091
6721
|
}
|
|
6092
|
-
.queue-
|
|
6093
|
-
|
|
6094
|
-
|
|
6095
|
-
|
|
6722
|
+
.queue-bar-item-delete:hover {
|
|
6723
|
+
color: var(--danger);
|
|
6724
|
+
background: var(--danger-muted);
|
|
6725
|
+
}
|
|
6726
|
+
|
|
6727
|
+
/* 窄屏:bar 撑满,preview 隐藏,操作按钮始终显形 */
|
|
6728
|
+
@media (max-width: 560px) {
|
|
6729
|
+
.queue-bar-host { padding: 0 4px 6px; }
|
|
6730
|
+
.queue-bar { width: 100%; }
|
|
6731
|
+
.queue-bar-preview { display: none; }
|
|
6732
|
+
.queue-bar-sep { display: none; }
|
|
6733
|
+
.queue-bar-item-delete { opacity: 1; }
|
|
6734
|
+
.queue-bar-panel { width: calc(100vw - 16px); right: -2px; }
|
|
6096
6735
|
}
|
|
6097
6736
|
|
|
6098
|
-
/* Queued message in chat view
|
|
6737
|
+
/* Queued message in chat view:用户最容易"觉得排队没生效"是因为旧版徽章太小。
|
|
6738
|
+
把气泡本身做出明显的"半成稿"质感(虚线边框 + 错位阴影),徽章放大到正常字号,
|
|
6739
|
+
让排队这件事在视觉上和"已发出"清楚拉开。 */
|
|
6099
6740
|
.chat-message.user.queued {
|
|
6100
|
-
opacity: 0.
|
|
6741
|
+
opacity: 0.92;
|
|
6101
6742
|
}
|
|
6102
6743
|
.chat-message.user.queued .chat-message-bubble,
|
|
6103
6744
|
.chat-message.user.queued .chat-message-content {
|
|
6104
|
-
|
|
6105
|
-
|
|
6745
|
+
box-shadow: 0 0 0 1.5px rgba(197, 101, 61, 0.55) inset,
|
|
6746
|
+
0 1px 0 rgba(197, 101, 61, 0.10);
|
|
6747
|
+
background: linear-gradient(180deg, rgba(255, 245, 235, 0.85) 0%, rgba(255, 235, 220, 0.65) 100%);
|
|
6748
|
+
border-radius: 14px;
|
|
6749
|
+
position: relative;
|
|
6106
6750
|
}
|
|
6107
6751
|
.queued-badge {
|
|
6108
6752
|
display: inline-flex;
|
|
6109
6753
|
align-items: center;
|
|
6110
|
-
gap:
|
|
6111
|
-
font-size: 0.
|
|
6112
|
-
color:
|
|
6113
|
-
background: var(--accent
|
|
6114
|
-
padding:
|
|
6754
|
+
gap: 5px;
|
|
6755
|
+
font-size: 0.75rem;
|
|
6756
|
+
color: #fff;
|
|
6757
|
+
background: linear-gradient(180deg, var(--accent) 0%, #a8522f 100%);
|
|
6758
|
+
padding: 3px 10px 3px 9px;
|
|
6115
6759
|
border-radius: 999px;
|
|
6116
6760
|
font-weight: 600;
|
|
6117
6761
|
margin-top: 6px;
|
|
6118
6762
|
letter-spacing: 0.04em;
|
|
6763
|
+
box-shadow: 0 2px 6px rgba(197, 101, 61, 0.30);
|
|
6119
6764
|
animation: queuePulse 1.5s ease-in-out infinite;
|
|
6120
6765
|
}
|
|
6121
6766
|
.queued-badge::before {
|
|
6122
6767
|
content: '';
|
|
6123
|
-
width:
|
|
6124
|
-
height:
|
|
6768
|
+
width: 7px;
|
|
6769
|
+
height: 7px;
|
|
6125
6770
|
border-radius: 50%;
|
|
6126
|
-
background:
|
|
6127
|
-
|
|
6771
|
+
background: #fff;
|
|
6772
|
+
box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.45);
|
|
6773
|
+
animation: queueDotPulse 1.0s ease-in-out infinite;
|
|
6128
6774
|
}
|
|
6129
6775
|
|
|
6130
6776
|
.input-hint {
|
|
@@ -6831,36 +7477,125 @@
|
|
|
6831
7477
|
.input-inline-controls {
|
|
6832
7478
|
}
|
|
6833
7479
|
|
|
6834
|
-
/*
|
|
6835
|
-
|
|
7480
|
+
/* ========================================================================
|
|
7481
|
+
输入框统一 pill 系统 —— 模式 / 模型 / 思考 / 自动批准 / 终端交互
|
|
7482
|
+
全部用同一套尺寸 / 字号 / 边框 / hover / focus 表现,避免视觉混乱。
|
|
7483
|
+
变体:
|
|
7484
|
+
.composer-pill-select → 原生 <select> 形态(右侧 chevron)
|
|
7485
|
+
.composer-pill-chip → 按钮 / 切换状态的 chip(支持 .active 亮态)
|
|
7486
|
+
现有 .chat-mode-select / .auto-approve-indicator / .composer-interactive-toggle
|
|
7487
|
+
仍保留作为特定色彩或最大宽度等微调入口。
|
|
7488
|
+
====================================================================== */
|
|
7489
|
+
.composer-pill {
|
|
6836
7490
|
font-family: var(--font-sans);
|
|
6837
7491
|
font-size: 0.625rem;
|
|
6838
7492
|
font-weight: 500;
|
|
6839
|
-
|
|
7493
|
+
line-height: 1;
|
|
7494
|
+
min-height: 22px;
|
|
7495
|
+
padding: 1px 8px;
|
|
6840
7496
|
border-radius: 10px;
|
|
6841
7497
|
border: 1px solid var(--border-subtle);
|
|
6842
7498
|
background: rgba(246, 241, 232, 0.7);
|
|
6843
7499
|
color: var(--text-secondary);
|
|
6844
7500
|
cursor: pointer;
|
|
6845
7501
|
transition: all var(--transition-fast);
|
|
6846
|
-
|
|
6847
|
-
|
|
7502
|
+
display: inline-flex;
|
|
7503
|
+
align-items: center;
|
|
7504
|
+
justify-content: center;
|
|
7505
|
+
gap: 4px;
|
|
7506
|
+
white-space: nowrap;
|
|
7507
|
+
box-sizing: border-box;
|
|
7508
|
+
user-select: none;
|
|
7509
|
+
}
|
|
7510
|
+
.composer-pill:hover {
|
|
7511
|
+
border-color: var(--accent);
|
|
7512
|
+
background-color: rgba(246, 241, 232, 1);
|
|
7513
|
+
}
|
|
7514
|
+
.composer-pill:focus,
|
|
7515
|
+
.composer-pill:focus-visible {
|
|
7516
|
+
border-color: var(--accent);
|
|
7517
|
+
box-shadow: 0 0 0 2px var(--accent-muted);
|
|
7518
|
+
outline: none;
|
|
7519
|
+
}
|
|
7520
|
+
.composer-pill.disabled,
|
|
7521
|
+
.composer-pill[disabled] {
|
|
7522
|
+
opacity: 0.55;
|
|
7523
|
+
cursor: not-allowed;
|
|
7524
|
+
}
|
|
7525
|
+
|
|
7526
|
+
/* select 变体:保留 chevron 背景图与文本截断 */
|
|
7527
|
+
.composer-pill-select {
|
|
7528
|
+
padding: 1px 16px 1px 6px;
|
|
7529
|
+
max-width: 110px;
|
|
6848
7530
|
overflow: hidden;
|
|
6849
7531
|
text-overflow: ellipsis;
|
|
6850
|
-
white-space: nowrap;
|
|
6851
7532
|
appearance: none;
|
|
6852
7533
|
-webkit-appearance: none;
|
|
6853
7534
|
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='5' fill='none'%3E%3Cpath d='M1 1l3 3 3-3' stroke='%239a8e82' stroke-width='1.2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
|
|
6854
7535
|
background-repeat: no-repeat;
|
|
6855
7536
|
background-position: right 4px center;
|
|
7537
|
+
/* 让 native <select> 在 inline-flex 下表现稳定 */
|
|
7538
|
+
display: inline-block;
|
|
7539
|
+
text-align: left;
|
|
6856
7540
|
}
|
|
6857
|
-
|
|
6858
|
-
|
|
6859
|
-
|
|
7541
|
+
|
|
7542
|
+
/* chip 变体:开关型按钮 / span,无 chevron,可亮态。
|
|
7543
|
+
字号与 select pill 对齐 (0.625rem),避免同行字号微差。 */
|
|
7544
|
+
.composer-pill-chip {
|
|
7545
|
+
padding: 1px 8px;
|
|
7546
|
+
font-size: 0.625rem;
|
|
6860
7547
|
}
|
|
6861
|
-
.
|
|
7548
|
+
.composer-pill-chip.active {
|
|
7549
|
+
background: var(--accent-muted, rgba(197, 101, 61, 0.12));
|
|
7550
|
+
color: var(--accent);
|
|
6862
7551
|
border-color: var(--accent);
|
|
6863
|
-
|
|
7552
|
+
}
|
|
7553
|
+
.composer-pill-chip.active:hover {
|
|
7554
|
+
background: rgba(197, 101, 61, 0.18);
|
|
7555
|
+
}
|
|
7556
|
+
|
|
7557
|
+
/* 兼容旧类:保留为 alias,仅用于细节微调(如最大宽度) */
|
|
7558
|
+
.chat-mode-select {
|
|
7559
|
+
/* 旧标识,沿用 .composer-pill / .composer-pill-select 的基础风格 */
|
|
7560
|
+
max-width: 78px;
|
|
7561
|
+
}
|
|
7562
|
+
.chat-model-select {
|
|
7563
|
+
max-width: 96px;
|
|
7564
|
+
}
|
|
7565
|
+
.chat-thinking-select {
|
|
7566
|
+
max-width: 86px;
|
|
7567
|
+
}
|
|
7568
|
+
|
|
7569
|
+
/* 思考深度 trigger —— 与 mode / model 同形 pill:相同 border / chevron / 字号。
|
|
7570
|
+
内部 .chat-thinking-label 显示当前档位,原生 <select> 透明叠层负责交互,
|
|
7571
|
+
移动端能调起系统滚轮选择,桌面端点击则展开原生菜单。 */
|
|
7572
|
+
.chat-thinking-trigger {
|
|
7573
|
+
position: relative;
|
|
7574
|
+
max-width: 86px;
|
|
7575
|
+
padding-left: 6px;
|
|
7576
|
+
}
|
|
7577
|
+
.chat-thinking-label {
|
|
7578
|
+
overflow: hidden;
|
|
7579
|
+
text-overflow: ellipsis;
|
|
7580
|
+
letter-spacing: 0.01em;
|
|
7581
|
+
}
|
|
7582
|
+
.chat-thinking-hidden-select {
|
|
7583
|
+
position: absolute;
|
|
7584
|
+
inset: 0;
|
|
7585
|
+
width: 100%;
|
|
7586
|
+
height: 100%;
|
|
7587
|
+
margin: 0;
|
|
7588
|
+
padding: 0;
|
|
7589
|
+
border: 0;
|
|
7590
|
+
background: transparent;
|
|
7591
|
+
color: transparent;
|
|
7592
|
+
font: inherit;
|
|
7593
|
+
opacity: 0;
|
|
7594
|
+
cursor: pointer;
|
|
7595
|
+
appearance: none;
|
|
7596
|
+
-webkit-appearance: none;
|
|
7597
|
+
}
|
|
7598
|
+
.chat-thinking-hidden-select:focus {
|
|
6864
7599
|
outline: none;
|
|
6865
7600
|
}
|
|
6866
7601
|
|
|
@@ -6917,25 +7652,66 @@
|
|
|
6917
7652
|
}
|
|
6918
7653
|
|
|
6919
7654
|
/* "立即发送":结构化会话流式输出时显示,按下会中断当前回复立即处理新输入。
|
|
6920
|
-
|
|
6921
|
-
|
|
6922
|
-
|
|
7655
|
+
v1.30.3 把它做成 28px 圆形 + dashed 边框,结果用户根本注意不到这颗按钮、
|
|
7656
|
+
误以为"立即发送没效果"。现在升级成 pill(图标 + "立即"文字 + 实色高对比 + 脉动),
|
|
7657
|
+
和 send 按钮形成"加急/默认"的视觉对位。 */
|
|
7658
|
+
.btn-pill {
|
|
7659
|
+
display: inline-flex;
|
|
7660
|
+
align-items: center;
|
|
7661
|
+
gap: 4px;
|
|
7662
|
+
height: 28px;
|
|
7663
|
+
padding: 0 10px 0 8px;
|
|
7664
|
+
border-radius: 999px;
|
|
7665
|
+
border: none;
|
|
7666
|
+
cursor: pointer;
|
|
7667
|
+
transition: all var(--transition-fast);
|
|
7668
|
+
flex-shrink: 0;
|
|
7669
|
+
font-size: 0.6875rem;
|
|
7670
|
+
font-weight: 600;
|
|
7671
|
+
letter-spacing: 0.02em;
|
|
7672
|
+
white-space: nowrap;
|
|
7673
|
+
}
|
|
7674
|
+
.btn-pill-icon {
|
|
7675
|
+
display: block;
|
|
7676
|
+
flex-shrink: 0;
|
|
7677
|
+
}
|
|
7678
|
+
.btn-pill-label {
|
|
7679
|
+
display: inline;
|
|
7680
|
+
}
|
|
7681
|
+
.btn-pill-interrupt {
|
|
7682
|
+
background: linear-gradient(180deg, rgba(197, 101, 61, 0.18) 0%, rgba(197, 101, 61, 0.10) 100%);
|
|
6923
7683
|
color: var(--accent);
|
|
6924
|
-
margin-right:
|
|
6925
|
-
|
|
7684
|
+
margin-right: 4px;
|
|
7685
|
+
box-shadow: 0 0 0 1px rgba(197, 101, 61, 0.30) inset;
|
|
7686
|
+
animation: interruptPulse 1.8s ease-in-out infinite;
|
|
6926
7687
|
}
|
|
6927
|
-
.btn-
|
|
6928
|
-
background: var(--accent);
|
|
6929
|
-
color:
|
|
6930
|
-
|
|
6931
|
-
transform:
|
|
7688
|
+
.btn-pill-interrupt:hover {
|
|
7689
|
+
background: linear-gradient(180deg, var(--accent) 0%, #a8522f 100%);
|
|
7690
|
+
color: #fff;
|
|
7691
|
+
box-shadow: 0 3px 10px rgba(197, 101, 61, 0.35);
|
|
7692
|
+
transform: translateY(-1px);
|
|
7693
|
+
animation: none;
|
|
6932
7694
|
}
|
|
6933
|
-
.btn-
|
|
6934
|
-
transform: scale(0.
|
|
7695
|
+
.btn-pill-interrupt:active {
|
|
7696
|
+
transform: translateY(0) scale(0.97);
|
|
6935
7697
|
}
|
|
6936
|
-
.btn-
|
|
7698
|
+
.btn-pill-interrupt.hidden {
|
|
6937
7699
|
display: none;
|
|
6938
7700
|
}
|
|
7701
|
+
@keyframes interruptPulse {
|
|
7702
|
+
0%, 100% { box-shadow: 0 0 0 1px rgba(197, 101, 61, 0.30) inset, 0 0 0 0 rgba(197, 101, 61, 0.0); }
|
|
7703
|
+
50% { box-shadow: 0 0 0 1px rgba(197, 101, 61, 0.45) inset, 0 0 0 4px rgba(197, 101, 61, 0.12); }
|
|
7704
|
+
}
|
|
7705
|
+
/* 屏宽 < 480 时把"立即"文字藏掉,只剩 » 图标,避免和 send 一起把行挤爆。
|
|
7706
|
+
hover/focus 期间临时回显,让长按移动端用户也能确认按钮含义。 */
|
|
7707
|
+
@media (max-width: 480px) {
|
|
7708
|
+
.btn-pill-interrupt {
|
|
7709
|
+
padding: 0 8px;
|
|
7710
|
+
}
|
|
7711
|
+
.btn-pill-interrupt .btn-pill-label {
|
|
7712
|
+
display: none;
|
|
7713
|
+
}
|
|
7714
|
+
}
|
|
6939
7715
|
|
|
6940
7716
|
/* send 按钮在「排队模式」下退到次要色,让相邻的"立即发送"成为视觉重点。
|
|
6941
7717
|
不动尺寸 / 圆形,避免 layout shift。 */
|
|
@@ -9088,19 +9864,26 @@
|
|
|
9088
9864
|
|
|
9089
9865
|
/* 平板适配 */
|
|
9090
9866
|
@media (max-width: 768px) {
|
|
9867
|
+
/* 手机隐藏「固定侧栏」按钮:手机上完整 300px 常驻太占地,
|
|
9868
|
+
只保留「收起为窄条」按钮,让用户能切到 56px 窄条形态。 */
|
|
9091
9869
|
.sidebar-pin-toggle { display: none; }
|
|
9092
|
-
|
|
9093
|
-
|
|
9870
|
+
/* drawer 模式(pinned 但非窄条)下若未打开,则隐藏到屏幕左侧。
|
|
9871
|
+
窄条模式(pinned + collapsed)由 .sidebar.pinned.collapsed 的 width:56px
|
|
9872
|
+
规则常驻显示,不进入这条隐藏分支。 */
|
|
9873
|
+
.sidebar.pinned:not(.collapsed):not(.open) {
|
|
9094
9874
|
transform: translateX(-100%);
|
|
9095
9875
|
pointer-events: none;
|
|
9096
9876
|
opacity: 0;
|
|
9097
9877
|
}
|
|
9098
|
-
|
|
9878
|
+
/* 与上方对称:drawer 模式下取消 anchored padding;
|
|
9879
|
+
窄条模式(.sidebar-pinned.sidebar-collapsed)继承全局 56px padding。 */
|
|
9880
|
+
.main-layout.sidebar-pinned:not(.sidebar-collapsed) {
|
|
9099
9881
|
padding-left: 0;
|
|
9100
9882
|
}
|
|
9101
|
-
|
|
9102
|
-
|
|
9103
|
-
|
|
9883
|
+
/* drawer 模式(未 anchored)默认就显示 hamburger(继承全局 inline-flex)。
|
|
9884
|
+
窄条模式(.sidebar-pinned.sidebar-collapsed)由全局
|
|
9885
|
+
`.main-layout.sidebar-pinned .floating-sidebar-toggle{display:none}`
|
|
9886
|
+
隐藏 hamburger,窄条自身就是入口。 */
|
|
9104
9887
|
.app-container {
|
|
9105
9888
|
--layout-main-file-panel-width: 0px;
|
|
9106
9889
|
}
|
|
@@ -9116,7 +9899,7 @@
|
|
|
9116
9899
|
.view-toggle { height: 36px; }
|
|
9117
9900
|
.view-toggle-btn { padding: 0 12px; font-size: 0.75rem; height: 30px; min-height: 30px; }
|
|
9118
9901
|
.chat-container { padding: 0 12px 12px; }
|
|
9119
|
-
.chat-message { max-width:
|
|
9902
|
+
.chat-message { max-width: 100%; }
|
|
9120
9903
|
.thinking-card { padding: 10px 14px; }
|
|
9121
9904
|
.thinking-content { font-size: 0.8125rem; }
|
|
9122
9905
|
.tool-picker { grid-template-columns: 1fr; }
|
|
@@ -9176,9 +9959,34 @@
|
|
|
9176
9959
|
.floating-sidebar-toggle .hamburger-icon { width: 13px; height: 9px; }
|
|
9177
9960
|
|
|
9178
9961
|
.sidebar { top: 0; }
|
|
9179
|
-
.sidebar-header { padding: 10px 12px; min-height: 48px; }
|
|
9180
|
-
|
|
9181
|
-
.sidebar-
|
|
9962
|
+
.sidebar-header { padding: 10px 12px; min-height: 48px; gap: 8px; }
|
|
9963
|
+
/* 收紧 actions 内按钮间距,给主区(logo/标题/计数)腾空间 */
|
|
9964
|
+
.sidebar-header-actions { gap: 4px; }
|
|
9965
|
+
/* 5 个底栏按钮在 2 列布局下最后一颗会单独占满第三行,看着很挤。
|
|
9966
|
+
手机端统一切到 4 列、隐藏文字、保留图标,更紧凑也对齐统一。 */
|
|
9967
|
+
.sidebar-footer-actions {
|
|
9968
|
+
grid-template-columns: repeat(4, 1fr);
|
|
9969
|
+
gap: 4px;
|
|
9970
|
+
}
|
|
9971
|
+
.sidebar-footer-actions .btn {
|
|
9972
|
+
min-height: 40px;
|
|
9973
|
+
padding: 6px 4px;
|
|
9974
|
+
}
|
|
9975
|
+
.sidebar-footer-actions .btn span { display: none; }
|
|
9976
|
+
.sidebar-footer-actions .btn svg { width: 18px; height: 18px; }
|
|
9977
|
+
|
|
9978
|
+
/* "更多操作"下拉:默认锚在更多按钮右沿向左展开 150px。手机端:
|
|
9979
|
+
· 加大 min-width 让中文项不会两行;
|
|
9980
|
+
· max-width 限制在可见区,防止极窄手机被裁;
|
|
9981
|
+
· 按钮在侧栏靠右,下拉自然贴侧栏右沿;用 right: 0 原值即可。 */
|
|
9982
|
+
.sidebar-header-overflow {
|
|
9983
|
+
min-width: 180px;
|
|
9984
|
+
max-width: calc(100vw - 24px);
|
|
9985
|
+
}
|
|
9986
|
+
.sidebar-header-overflow .overflow-item {
|
|
9987
|
+
padding: 11px 14px;
|
|
9988
|
+
font-size: 0.875rem;
|
|
9989
|
+
}
|
|
9182
9990
|
|
|
9183
9991
|
/* 移动端终端顶栏 - 紧凑 */
|
|
9184
9992
|
.terminal-header { padding: 5px 8px; min-height: 32px; }
|
|
@@ -9328,11 +10136,27 @@
|
|
|
9328
10136
|
|
|
9329
10137
|
.input-composer-bar {
|
|
9330
10138
|
padding: 1px 3px 2px 5px;
|
|
9331
|
-
gap:
|
|
10139
|
+
gap: 2px;
|
|
9332
10140
|
}
|
|
9333
10141
|
|
|
9334
|
-
.input-composer-left { gap:
|
|
10142
|
+
.input-composer-left { gap: 2px; }
|
|
9335
10143
|
.input-composer-right { gap: 3px; }
|
|
10144
|
+
/* 移动端窄屏:进一步收紧 group 内边距,让 mode/model/thinking 三件套不占额外 padding */
|
|
10145
|
+
.input-composer-left .composer-pill-group {
|
|
10146
|
+
padding: 0;
|
|
10147
|
+
gap: 1px;
|
|
10148
|
+
background: transparent;
|
|
10149
|
+
box-shadow: none;
|
|
10150
|
+
}
|
|
10151
|
+
/* 移动端 chip 字号微缩,与新 desktop chip 0.625rem 对齐基础上再小一点 */
|
|
10152
|
+
.input-composer-left .composer-pill-chip {
|
|
10153
|
+
font-size: 0.6rem;
|
|
10154
|
+
padding: 1px 6px;
|
|
10155
|
+
}
|
|
10156
|
+
/* 移动端三件套 select 最大宽度同步收紧 */
|
|
10157
|
+
.input-composer-left .chat-mode-select { max-width: 64px; }
|
|
10158
|
+
.input-composer-left .chat-model-select { max-width: 78px; }
|
|
10159
|
+
.input-composer-left .chat-thinking-trigger { max-width: 72px; }
|
|
9336
10160
|
|
|
9337
10161
|
/* 移动端会话信息栏 */
|
|
9338
10162
|
.input-session-info-bar {
|
|
@@ -9814,6 +10638,26 @@
|
|
|
9814
10638
|
}
|
|
9815
10639
|
}
|
|
9816
10640
|
|
|
10641
|
+
/* ===== 手机竖屏(≤480px)—— 进一步收紧 chat 视图 padding,
|
|
10642
|
+
并允许 tool-use 卡片头部 wrap,避免在极窄宽度下被裁切。 ===== */
|
|
10643
|
+
@media (max-width: 480px) {
|
|
10644
|
+
.chat-container { padding: 0 6px 8px; }
|
|
10645
|
+
.chat-messages { padding-left: 2px; padding-right: 2px; gap: 12px; }
|
|
10646
|
+
.chat-message { --chat-card-max-width: 100%; }
|
|
10647
|
+
.tool-use-header {
|
|
10648
|
+
flex-wrap: wrap;
|
|
10649
|
+
row-gap: 4px;
|
|
10650
|
+
padding: 8px 12px;
|
|
10651
|
+
}
|
|
10652
|
+
.tool-use-file { max-width: 100%; }
|
|
10653
|
+
.tool-use-body { padding: 10px 12px; }
|
|
10654
|
+
.subagent-reply { padding: 9px 12px; }
|
|
10655
|
+
.markdown-content .code-block { margin: 8px 0; }
|
|
10656
|
+
.markdown-content pre,
|
|
10657
|
+
.markdown-content .code-block pre,
|
|
10658
|
+
.subagent-reply pre { padding: 10px; }
|
|
10659
|
+
}
|
|
10660
|
+
|
|
9817
10661
|
/* Blank chat mobile optimization */
|
|
9818
10662
|
.session-kind-badge {
|
|
9819
10663
|
display: inline-flex;
|
|
@@ -10116,12 +10960,13 @@
|
|
|
10116
10960
|
align-items: center;
|
|
10117
10961
|
gap: 6px;
|
|
10118
10962
|
}
|
|
10963
|
+
/* 此处历史遗留的 .chat-mode-select 全局规则会覆盖上面 .composer-pill 的统一字号 / 边框,
|
|
10964
|
+
已上移到 .composer-pill / .composer-pill-select 体系;这里只保留 outline / cursor 的兜底,
|
|
10965
|
+
不再设置 font-size / max-width,避免和 6938 行的统一样式打架。 */
|
|
10119
10966
|
.chat-mode-select {
|
|
10120
|
-
font-size: 0.6875rem;
|
|
10121
10967
|
font-family: inherit;
|
|
10122
10968
|
cursor: pointer;
|
|
10123
10969
|
outline: none;
|
|
10124
|
-
max-width: 96px;
|
|
10125
10970
|
}
|
|
10126
10971
|
.chat-mode-select:focus {
|
|
10127
10972
|
border-color: var(--accent);
|