feat(ai): 优化 AI 对话体验与 MCP 接入配置

- AI 请求:增强 OpenAI 兼容接口降级逻辑,文本模型自动省略图片并在 400 场景重试
- MCP 接入:支持自定义 HTTP 服务监听地址、端口和 Authorization Bearer Token
- MCP 生命周期:停止服务后保留授权信息,并将主动关闭子进程视为正常停止
- 交互优化:移除 AI 对话导出入口,支持关闭常驻状态提示并收敛设置弹窗 toast 宽度
- UI 调整:优化 AI 输入框边框、聚焦态和 Authorization 运行中只读可查看体验
- 测试覆盖:补充 OpenAI 降级、MCP HTTP、AI Header 和设置面板相关用例
This commit is contained in:
Syngnat
2026-06-12 14:51:37 +08:00
parent c189125aa4
commit c3a3387ee3
25 changed files with 811 additions and 184 deletions

View File

@@ -5696,29 +5696,6 @@ body[data-ui-version="v2"] .gn-v2-ai-mode-tabs button.is-active {
color: var(--gn-fg-1);
}
body[data-ui-version="v2"] .gn-v2-ai-session-row {
justify-content: flex-end;
gap: 8px;
width: 100%;
flex: 0 0 auto;
min-height: 22px;
padding: 0 10px 7px;
}
body[data-ui-version="v2"] .gn-v2-ai-export-button {
display: inline-flex;
align-items: center;
gap: 4px;
height: 22px;
padding: 0 7px;
border: 0.5px solid var(--gn-br-1);
border-radius: 6px;
background: var(--gn-bg-panel);
color: var(--gn-fg-4);
font-size: 10.5px;
font-weight: 650;
}
body[data-ui-version="v2"] .gn-v2-ai-panel .ai-chat-messages {
padding: 8px 14px 12px;
gap: 10px;
@@ -5995,6 +5972,7 @@ body[data-ui-version="v2"] .gn-v2-ai-panel .ai-chat-input-wrapper {
border: none !important;
background: transparent !important;
box-shadow: none !important;
gap: 4px !important;
}
body[data-ui-version="v2"] .gn-v2-ai-context-row {
@@ -6157,25 +6135,34 @@ body[data-ui-version="v2"] .gn-v2-ai-attachment-file button {
}
body[data-ui-version="v2"] .gn-v2-ai-input-box {
min-height: 72px;
min-height: 68px;
padding: 0;
}
body[data-ui-version="v2"] .gn-v2-ai-input-surface {
min-height: 68px;
padding: 6px 6px 6px 10px;
border: 0.5px solid var(--gn-br-2);
border-radius: 10px;
background: var(--gn-bg-input);
box-shadow: var(--gn-shadow-sm);
border: 0.5px solid var(--gn-br-2) !important;
border-radius: 10px !important;
background: var(--gn-bg-input) !important;
box-shadow: none !important;
}
body[data-ui-version="v2"] .gn-v2-ai-input-box textarea {
border: 0 !important;
border-radius: 0 !important;
background: transparent !important;
box-shadow: none !important;
font-size: 12.5px !important;
line-height: 1.55 !important;
padding: 0 !important;
}
body[data-ui-version="v2"] .gn-v2-ai-input-box textarea.ant-input:focus,
body[data-ui-version="v2"] .gn-v2-ai-input-box textarea.ant-input:focus-visible {
border-color: transparent !important;
outline: none !important;
box-shadow: none !important;
}
body[data-ui-version="v2"] .gn-v2-ai-slash-menu {
@@ -6209,7 +6196,7 @@ body[data-ui-version="v2"] .gn-v2-ai-model-bar {
align-items: center;
gap: 6px;
min-width: 0;
padding-top: 6px;
padding-top: 0;
white-space: nowrap;
}