agent-tool-chat 1.1.5 → 1.2.0

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 CHANGED
@@ -235,6 +235,35 @@ interface FileAttachment {
235
235
  5. **业务联动** — 页面操作完成后 `eventBus.dispatch` 回灌,驱动 LLM 回复或延迟建议。
236
236
  6. **持久化** — 消息与设置自动保存(direct 模式 localStorage;proxy 模式 POST `/api/messages`,按 device_id 区分)。
237
237
 
238
+ ## 模型提供方
239
+
240
+ 插件内置 DeepSeek、OpenAI 和自定义 OpenAI 兼容三种提供方,可在设置面板切换,每个提供方独立保存 `apiKey / baseUrl / model / temperature / thinking`。
241
+
242
+ ```ts
243
+ const chat = useAgentChat({
244
+ toolPackages: [],
245
+ // 可选:扩展自定义 OpenAI 兼容提供方
246
+ providerPresets: [
247
+ {
248
+ id: 'my-gateway',
249
+ name: '内部网关',
250
+ protocol: 'openai-compatible',
251
+ defaultBaseUrl: 'https://gateway.example.com/v1',
252
+ defaultModel: 'my-model',
253
+ models: [],
254
+ capabilities: {},
255
+ },
256
+ ],
257
+ })
258
+ ```
259
+
260
+ - `settings.providerId` 标识当前提供方,默认 `deepseek`;旧版设置会自动迁移到当前提供方,无 `providerId` 时迁移到 `providers.deepseek`。
261
+ - localStorage 中已保存的设置按字段覆盖 `options.settings`;未保存的字段沿用 `options.settings` / 默认值。
262
+ - 旧字段 `settings.apiKey/baseUrl/model` 仍可读取,会始终镜像当前提供方的值。
263
+ - 前端直连使用 `POST {baseUrl}/chat/completions`;后端代理使用 `POST {proxyUrl}/api/chat`,并在请求体携带 `providerId`。
264
+ - 代理服务按 `<PROVIDER_ID>_API_KEY` / `<PROVIDER_ID>_BASE_URL` 环境变量路由,详见 `server/.env.example`。
265
+ - 非 OpenAI 兼容协议(如 Claude/Gemini)可通过 `registerProvider(id, factory)` 或 `options.provider` 接入。
266
+
238
267
  ## 数据持久化
239
268
 
240
269
  | providerMode | 消息存储 | 说明 |
@@ -249,7 +278,11 @@ useAgentChat(options) // 核心组合式函数,返回 AgentChatAP
249
278
  ChatPanel // 对话面板(chat / options prop,chat 可选)
250
279
  buildSystemPrompt(packages) // 构建系统提示词
251
280
  createDeepSeekProvider() // 直连 DeepSeek LLM 提供者
281
+ createOpenAIProvider() // 直连 OpenAI LLM 提供者
282
+ createOpenAICompatibleProvider() // 通用 OpenAI 兼容提供者
252
283
  createProxyProvider() // 代理模式 LLM 提供者
284
+ createProvider(id, mode) // 按 providerId + 模式路由
285
+ registerProvider(id, factory) // 注册非 OpenAI 兼容协议提供方
253
286
  createEventBus() // 创建独立 EventBus
254
287
  Agent, ToolRegistry // 底层 Agent 多轮循环器 / 工具注册表
255
288
  ```
@@ -38,11 +38,17 @@ export interface ThinkingConfig {
38
38
  effort?: 'low' | 'high' | 'max';
39
39
  }
40
40
  export interface LLMProviderConfig {
41
+ /** 当前模型提供方 ID(用于 registry 路由) */
42
+ providerId?: string;
43
+ /** 直连 / 代理模式 */
44
+ mode?: 'direct' | 'proxy';
41
45
  baseUrl: string;
42
46
  apiKey: string;
43
47
  model: string;
44
48
  temperature?: number;
45
49
  thinking?: ThinkingConfig;
50
+ /** 提供方专用扩展请求字段 */
51
+ extraBody?: Record<string, unknown>;
46
52
  }
47
53
  export type AgentEvent = {
48
54
  type: 'message';
@@ -1 +1 @@
1
- .render-block[data-v-ea599d5b]{margin:8px 0;padding:8px 0;width:100%}.render-block__component[data-v-ea599d5b]{border-radius:8px;background:var(--el-fill-color-lighter);box-shadow:0 0 10px #0000001a}.render-block__title[data-v-ea599d5b]{font-weight:600;font-size:14px;margin-bottom:6px;color:var(--el-text-color-primary)}.render-block__table[data-v-ea599d5b]{width:100%;max-width:900px;border-radius:8px;overflow:hidden;box-shadow:0 2px 8px #0000000f}.render-block__cards[data-v-ea599d5b]{display:flex;flex-direction:column;gap:8px}.card-item[data-v-ea599d5b]{border:1px solid var(--el-border-color);border-radius:8px;padding:10px 14px;background:var(--el-fill-color-lighter);box-shadow:0 2px 6px #0000000d}.card-field[data-v-ea599d5b]{display:flex;gap:6px;font-size:13px;line-height:1.8}.card-label[data-v-ea599d5b]{font-weight:600;color:var(--el-text-color-secondary);min-width:80px}.card-value[data-v-ea599d5b]{color:var(--el-text-color-primary)}.render-block__list[data-v-ea599d5b]{display:flex;flex-direction:column;gap:4px}.list-item[data-v-ea599d5b]{padding:6px 10px;font-size:13px;border-left:3px solid var(--el-color-primary);background:var(--el-fill-color-lighter);border-radius:0 4px 4px 0;box-shadow:0 1px 4px #0000000a}.suggested-next[data-v-0e0e9b65]{display:flex;align-items:center;gap:8px;padding:8px 12px;margin:6px 0;background:var(--el-color-primary-light-9);border:1px solid var(--el-color-primary-light-7);border-radius:8px;font-size:13px}.suggested-next__icon[data-v-0e0e9b65]{font-size:15px;flex-shrink:0}.suggested-next__text[data-v-0e0e9b65]{flex:1;color:var(--el-text-color-regular)}.chat-message[data-v-7317da3a]{display:flex;gap:10px;padding:12px 0;animation:msg-in-7317da3a .25s ease both}@keyframes msg-in-7317da3a{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}.chat-message.role-user[data-v-7317da3a]{flex-direction:row-reverse}.chat-message.role-user .message-time[data-v-7317da3a]{text-align:right}.message-avatar[data-v-7317da3a]{width:32px;height:32px;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0;font-size:16px;color:#fff;box-shadow:0 0 0 2px var(--el-bg-color),0 2px 6px #0000001f}.role-user .message-avatar[data-v-7317da3a]{background:linear-gradient(135deg,var(--el-color-primary),var(--el-color-primary-light-3))}.role-assistant .message-avatar[data-v-7317da3a]{background:linear-gradient(135deg,#009688,#2d8cf0)}.message-time[data-v-7317da3a]{display:block;font-size:11px;line-height:1;color:var(--el-text-color-placeholder);margin-bottom:4px}.message-body[data-v-7317da3a]{max-width:80%;min-width:0}.role-user .message-body[data-v-7317da3a]{background:linear-gradient(135deg,var(--el-color-primary-light-9),var(--el-color-primary-light-8));padding:8px 14px;border-radius:12px 4px 12px 12px;box-shadow:0 2px 8px #0000000f,0 1px 2px #0000000a}.role-assistant .message-body[data-v-7317da3a]{position:relative;background:var(--el-fill-color-lighter);padding:8px 14px;border-radius:4px 12px 12px;display:flex;flex-direction:column;box-shadow:0 2px 8px #0000000f,0 1px 2px #0000000a}.message-actions[data-v-7317da3a]{position:absolute;top:0;right:0;opacity:0;transition:opacity .2s;z-index:1}.role-assistant .message-body:hover .message-actions[data-v-7317da3a]{opacity:1}.role-assistant .message-body .message-time[data-v-7317da3a]{float:left;width:10px}.message-action-btn[data-v-7317da3a]{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;border:none;background:transparent;border-radius:4px;color:var(--el-text-color-secondary);cursor:pointer;font-size:15px}.message-action-btn[data-v-7317da3a]:hover{background:var(--el-fill-color);color:var(--el-color-primary)}.message-user-text[data-v-7317da3a]{font-size:14px;line-height:1.5;color:var(--el-text-color-primary);white-space:pre-wrap;word-break:break-word}.message-content[data-v-7317da3a]{font-size:14px;line-height:1.6;color:var(--el-text-color-primary);word-break:break-word;background:transparent;border:none;outline:none;box-shadow:none;height:auto;overflow-wrap:break-word}.message-content[data-v-7317da3a] p{margin:0 0 8px}.message-content[data-v-7317da3a] p:last-child{margin-bottom:0}.message-content[data-v-7317da3a] h1,.message-content[data-v-7317da3a] h2,.message-content[data-v-7317da3a] h3,.message-content[data-v-7317da3a] h4,.message-content[data-v-7317da3a] h5,.message-content[data-v-7317da3a] h6{margin:12px 0 8px;font-weight:600;line-height:1.4;color:var(--el-text-color-primary);cursor:pointer;-webkit-user-select:none;user-select:none}.message-content[data-v-7317da3a] h1[data-collapsed]:after,.message-content[data-v-7317da3a] h2[data-collapsed]:after,.message-content[data-v-7317da3a] h3[data-collapsed]:after,.message-content[data-v-7317da3a] h4[data-collapsed]:after,.message-content[data-v-7317da3a] h5[data-collapsed]:after,.message-content[data-v-7317da3a] h6[data-collapsed]:after{content:" ▸";font-size:.8em;color:var(--el-text-color-secondary)}.message-content[data-v-7317da3a] h1{font-size:20px}.message-content[data-v-7317da3a] h2{font-size:18px;padding-bottom:4px;border-bottom:1px solid var(--el-border-color-lighter)}.message-content[data-v-7317da3a] h3{font-size:16px}.message-content[data-v-7317da3a] h4{font-size:15px}.message-content[data-v-7317da3a] h5,.message-content[data-v-7317da3a] h6{font-size:14px}.message-content[data-v-7317da3a] strong{font-weight:600}.message-content[data-v-7317da3a] em{font-style:italic}.message-content[data-v-7317da3a] ul,.message-content[data-v-7317da3a] ol{margin:0 0 8px;padding-left:20px}.message-content[data-v-7317da3a] ul:last-child,.message-content[data-v-7317da3a] ol:last-child{margin-bottom:0}.message-content[data-v-7317da3a] li{margin:2px 0}.message-content[data-v-7317da3a] li>ul,.message-content[data-v-7317da3a] li>ol{margin:0}.message-content[data-v-7317da3a] code{padding:1px 5px;margin:0 2px;font-size:12px;font-family:Consolas,Monaco,Courier New,monospace;background:var(--el-fill-color);color:var(--el-color-primary);border-radius:4px}.message-content[data-v-7317da3a] pre{margin:8px 0;padding:10px 12px;background:var(--el-bg-color);border:1px solid var(--el-border-color-lighter);border-radius:6px;overflow-x:auto}.message-content[data-v-7317da3a] .md-code-block{margin:8px 0}.message-content[data-v-7317da3a] .md-code-block__head{display:flex;align-items:center;justify-content:space-between;padding:6px 12px;background:var(--el-fill-color);border:1px solid var(--el-border-color-lighter);border-bottom:none;border-radius:6px 6px 0 0;font-size:12px}.message-content[data-v-7317da3a] .md-code-block__lang{color:var(--el-text-color-secondary);font-family:Consolas,Monaco,Courier New,monospace}.message-content[data-v-7317da3a] .md-code-block__copy{color:var(--el-color-primary);cursor:pointer;-webkit-user-select:none;user-select:none;transition:opacity .2s}.message-content[data-v-7317da3a] .md-code-block__copy:hover{opacity:.7}.message-content[data-v-7317da3a] .md-code-block pre{margin:0;border-radius:0 0 6px 6px}.message-content[data-v-7317da3a] pre code{display:block;padding:0;margin:0;font-size:12px;line-height:1.6;background:transparent;color:var(--el-text-color-primary);border-radius:0;white-space:pre}.message-content[data-v-7317da3a] blockquote{margin:8px 0;padding:4px 12px;border-left:3px solid var(--el-color-primary-light-5);background:var(--el-fill-color-lighter);border-radius:0 6px 6px 0;color:var(--el-text-color-regular)}.message-content[data-v-7317da3a] blockquote p{margin:0}.message-content[data-v-7317da3a] table{width:100%;margin:8px 0;border-collapse:collapse;font-size:13px}.message-content[data-v-7317da3a] th,.message-content[data-v-7317da3a] td{padding:6px 10px;border:1px solid var(--el-border-color-lighter);text-align:left}.message-content[data-v-7317da3a] th{background:var(--el-fill-color);font-weight:600;color:var(--el-text-color-primary)}.message-content[data-v-7317da3a] tbody tr:nth-child(2n){background:var(--el-fill-color-lighter)}.message-content.is-table-clickable[data-v-7317da3a] tbody tr{cursor:pointer;transition:background .15s}.message-content.is-table-clickable[data-v-7317da3a] tbody tr:hover{background:var(--el-color-primary-light-9)}.message-content.is-list-clickable[data-v-7317da3a] li{cursor:pointer;border-radius:4px;transition:background .15s}.message-content.is-list-clickable[data-v-7317da3a] li:hover{background:var(--el-color-primary-light-9)}.message-content[data-v-7317da3a] a{color:var(--el-color-primary);text-decoration:none}.message-content[data-v-7317da3a] a:hover{text-decoration:underline}.message-content[data-v-7317da3a] img{max-width:100%;border-radius:6px}.message-content[data-v-7317da3a] hr{margin:12px 0;border:none;border-top:1px solid var(--el-border-color-lighter)}.typing-dots[data-v-7317da3a]{display:inline-flex;align-items:center;gap:4px;padding:2px 0}.typing-dots i[data-v-7317da3a]{width:6px;height:6px;border-radius:50%;background:var(--el-color-primary);animation:typing-bounce-7317da3a 1.2s ease-in-out infinite}.typing-dots i[data-v-7317da3a]:nth-child(2){animation-delay:.15s}.typing-dots i[data-v-7317da3a]:nth-child(3){animation-delay:.3s}@keyframes typing-bounce-7317da3a{0%,60%,to{transform:translateY(0);opacity:.4}30%{transform:translateY(-4px);opacity:1}}.message-error[data-v-7317da3a]{margin-top:4px;font-size:12px;color:var(--el-color-danger)}.message-reasoning[data-v-7317da3a]{margin-bottom:8px}.reasoning-toggle[data-v-7317da3a]{display:inline-flex;align-items:center;gap:4px;padding:4px 10px;border:1px solid var(--el-border-color);border-radius:999px;background:var(--el-fill-color);color:var(--el-text-color-regular);font-size:12px;line-height:1;cursor:pointer;transition:all .2s}.reasoning-toggle[data-v-7317da3a]:hover{background:var(--el-fill-color-light);color:var(--el-color-primary);border-color:var(--el-color-primary-light-5)}.reasoning-toggle__arrow[data-v-7317da3a]{display:inline-block;font-size:12px;transition:transform .2s}.reasoning-toggle__arrow.open[data-v-7317da3a]{transform:rotate(180deg)}.reasoning-content[data-v-7317da3a]{margin:6px 0 0;padding:8px;background:var(--el-fill-color);border-radius:6px;font-size:12px;white-space:pre-wrap;word-break:break-word;max-height:200px;overflow-y:auto}.message-files[data-v-7317da3a]{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:8px}.message-file[data-v-7317da3a]{display:flex;align-items:center;gap:8px;padding:6px 10px;border:1px solid var(--el-border-color);border-radius:8px;background:var(--el-bg-color);font-size:12px}.message-file.is-image[data-v-7317da3a]{padding:4px;flex-direction:column;align-items:flex-start}.file-image[data-v-7317da3a]{max-width:200px;max-height:200px;border-radius:6px;object-fit:contain;cursor:zoom-in;transition:box-shadow .2s}.file-image[data-v-7317da3a]:hover{box-shadow:0 0 0 2px var(--el-color-primary-light-5)}.file-info[data-v-7317da3a]{display:flex;flex-direction:column;gap:2px}.file-name[data-v-7317da3a]{color:var(--el-text-color-primary);font-weight:500;max-width:150px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.file-size[data-v-7317da3a]{color:var(--el-text-color-secondary);font-size:11px}.chat-input[data-v-e7db63f0]{padding:12px 16px;border-top:1px solid var(--el-border-color-lighter);background:var(--el-bg-color);display:flex;flex-direction:column}.chat-input__files[data-v-e7db63f0]{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:8px}.chat-input__preview[data-v-e7db63f0]{margin-left:auto;height:24px;padding:0 8px}.chat-input__files[data-v-e7db63f0] .el-tag{border-radius:999px}.chat-input__send.el-button--primary[data-v-e7db63f0]{background:linear-gradient(135deg,#009688,#2d8cf0);border-color:transparent;color:#fff;transition:box-shadow .2s,transform .2s}.chat-input__send.el-button--primary[data-v-e7db63f0]:hover{background:linear-gradient(135deg,#00807a,#256fce);box-shadow:0 4px 12px #2d8cf059;transform:translateY(-1px)}.chat-input__wrap[data-v-e7db63f0]{display:flex;align-items:flex-end;gap:8px;background:var(--el-fill-color-light);border:1px solid var(--el-border-color);border-radius:12px;padding:6px 6px 6px 12px;transition:border-color .2s,box-shadow .2s}.chat-input__wrap[data-v-e7db63f0]:focus-within{border-color:var(--el-color-primary);box-shadow:0 0 0 2px var(--el-color-primary-light-8)}.chat-input__wrap[data-v-e7db63f0] .el-textarea__inner{border:none;background:transparent;box-shadow:none;padding:4px 0;line-height:1.6;font-size:14px}.chat-input__wrap[data-v-e7db63f0] .el-textarea__inner:focus{box-shadow:none}.chat-input__actions[data-v-e7db63f0]{flex-shrink:0;display:flex;align-items:center;gap:2px;padding-bottom:2px}.form-tip[data-v-5879c4da]{font-size:12px;color:var(--el-text-color-secondary);line-height:1.6;margin-top:4px}.form-tip-inline[data-v-5879c4da]{margin-left:8px;font-size:12px;color:var(--el-text-color-secondary)}.temp-row[data-v-5879c4da]{display:flex;align-items:center;gap:12px;width:100%}.temp-val[data-v-5879c4da]{width:28px;text-align:right;font-size:13px;color:var(--el-text-color-secondary)}.chat-panel-root[data-v-5dde3b27]{position:fixed;z-index:1999}.ai-fab[data-v-5dde3b27]{position:fixed;right:22px;bottom:25px;z-index:2000;display:flex;align-items:center;gap:8px;height:52px;padding:0 22px 0 18px;border-radius:26px;color:#fff;font-size:15px;font-weight:600;cursor:pointer;background:linear-gradient(135deg,#009688,#2d8cf0);box-shadow:0 6px 24px #2d8cf080;transition:transform .25s cubic-bezier(.34,1.56,.64,1),box-shadow .25s;-webkit-user-select:none;user-select:none;overflow:hidden;isolation:isolate;animation:ai-fab-float-5dde3b27 3.6s ease-in-out infinite}@keyframes ai-fab-float-5dde3b27{0%,to{transform:translateY(0)}50%{transform:translateY(-6px)}}.ai-fab[data-v-5dde3b27]:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;border-radius:inherit;background:linear-gradient(105deg,transparent 30%,rgba(255,255,255,.25) 50%,transparent 70%);background-size:200% 100%;background-position:100% 0;animation:ai-fab-shimmer-5dde3b27 4s ease-in-out infinite;z-index:-1;pointer-events:none}@keyframes ai-fab-shimmer-5dde3b27{0%,to{background-position:100% 0}50%{background-position:0 0}}.ai-fab[data-v-5dde3b27]:after{content:"";position:absolute;top:-4px;right:-4px;bottom:-4px;left:-4px;border-radius:inherit;border:2px solid rgba(45,140,240,.35);animation:ai-fab-pulse-5dde3b27 2.4s ease-in-out infinite;pointer-events:none;z-index:-2}@keyframes ai-fab-pulse-5dde3b27{0%,to{opacity:.6;transform:scale(1)}50%{opacity:0;transform:scale(1.12)}}.ai-fab__icon[data-v-5dde3b27]{font-size:22px;filter:drop-shadow(0 0 4px rgba(255,255,255,.4));transition:transform .3s cubic-bezier(.34,1.56,.64,1)}.ai-fab__label[data-v-5dde3b27]{line-height:1;text-shadow:0 1px 4px rgba(0,0,0,.15)}.ai-fab[data-v-5dde3b27]:hover{animation:none;transform:translateY(-4px) scale(1.04);box-shadow:0 12px 32px #2d8cf099}.ai-fab[data-v-5dde3b27]:hover:before{animation:none;background-position:0 0}.ai-fab--active[data-v-5dde3b27]{animation:none;box-shadow:0 4px 16px #2d8cf066}.ai-fab--active[data-v-5dde3b27]:after{animation:none;opacity:0}.ai-fab--active[data-v-5dde3b27]:before{animation:none}.ai-fab--active .ai-fab__icon[data-v-5dde3b27]{transform:rotate(45deg)}.ai-fab--dragged[data-v-5dde3b27]{animation:none}.ai-fab--dragged[data-v-5dde3b27]:before,.ai-fab--dragged[data-v-5dde3b27]:after{animation:none;opacity:0}.chat-panel[data-v-5dde3b27]{position:fixed;bottom:25px;right:22px;z-index:9999;display:flex;flex-direction:column;height:680px;width:560px;min-height:400px;background:var(--el-bg-color);box-shadow:0 20px 50px #0000002e,0 6px 18px #00000014;border-radius:16px;transform-origin:bottom right}.panel-enter-active[data-v-5dde3b27],.panel-leave-active[data-v-5dde3b27]{transition:opacity .3s ease,transform .3s cubic-bezier(.34,1.56,.64,1)}.panel-enter-from[data-v-5dde3b27],.panel-leave-to[data-v-5dde3b27]{opacity:0;transform:translateY(16px) scale(.96)}.chat-panel__header[data-v-5dde3b27]{display:flex;align-items:center;justify-content:space-between;padding:10px 16px;cursor:move;-webkit-user-select:none;user-select:none;border-bottom:1px solid var(--el-border-color-lighter);background:linear-gradient(135deg,var(--el-color-primary-light-7),var(--el-bg-color));border-radius:16px 16px 0 0;flex-shrink:0}.chat-panel__title[data-v-5dde3b27]{display:flex;align-items:center;gap:8px;font-size:15px;font-weight:600;color:var(--el-text-color-primary)}.title-icon[data-v-5dde3b27]{color:var(--el-color-primary);font-size:18px}.chat-panel__ops[data-v-5dde3b27]{display:flex;gap:4px}.chat-panel__scroll-wrap[data-v-5dde3b27]{position:relative;flex:1;min-height:0;display:flex}.chat-panel__body[data-v-5dde3b27]{flex:1;overflow-y:auto;padding:0 16px;min-height:0;scrollbar-width:thin;scrollbar-color:var(--el-border-color-darker) transparent}.chat-panel__nav[data-v-5dde3b27]{position:absolute;right:6px;top:50%;transform:translateY(-50%);display:flex;flex-direction:column;align-items:center;gap:6px;padding:6px 4px;background:var(--el-bg-color);border:1px solid var(--el-border-color-lighter);border-radius:10px;box-shadow:0 2px 10px #00000014;opacity:.35;transition:opacity .2s}.chat-panel__nav[data-v-5dde3b27]:hover,.chat-panel__nav.is-suppressed-scroll[data-v-5dde3b27]{opacity:1}.chat-panel__nav-count[data-v-5dde3b27]{font-size:10px;line-height:1;color:var(--el-text-color-secondary);font-variant-numeric:tabular-nums}.chat-panel__nav-btn[data-v-5dde3b27]{display:inline-flex;align-items:center;justify-content:center;width:26px;height:26px;padding:0;border:none;border-radius:8px;background:transparent;color:var(--el-text-color-regular);cursor:pointer;font-size:14px;transition:background .15s,color .15s}.chat-panel__nav-btn[data-v-5dde3b27]:hover:not(:disabled){background:var(--el-color-primary-light-9);color:var(--el-color-primary)}.chat-panel__nav-btn[data-v-5dde3b27]:disabled{color:var(--el-text-color-placeholder);cursor:not-allowed;opacity:.5}.chat-panel__body[data-v-5dde3b27] [data-msg-id].is-locate{animation:locate-flash-5dde3b27 1.2s ease both}@keyframes locate-flash-5dde3b27{0%{outline:2px solid var(--el-color-primary);outline-offset:2px;border-radius:8px}to{outline:2px solid transparent;outline-offset:2px;border-radius:8px}}.chat-panel__body[data-v-5dde3b27]::-webkit-scrollbar{width:8px}.chat-panel__body[data-v-5dde3b27]::-webkit-scrollbar-track{background:var(--el-fill-color-lighter);border-radius:4px}.chat-panel__body[data-v-5dde3b27]::-webkit-scrollbar-thumb{background:var(--el-border-color-darker);border-radius:4px;border:2px solid transparent;background-clip:content-box}.chat-panel__body[data-v-5dde3b27]::-webkit-scrollbar-thumb:hover{background:var(--el-text-color-secondary);background-clip:content-box}.chat-empty[data-v-5dde3b27]{height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;gap:14px}.chat-empty__logo[data-v-5dde3b27]{width:64px;height:64px;border-radius:18px;background:linear-gradient(135deg,#009688,#2d8cf0);color:#fff;display:flex;align-items:center;justify-content:center;font-size:32px;box-shadow:0 8px 24px #2d8cf04d}.chat-empty h3[data-v-5dde3b27]{margin:0;font-size:18px;color:var(--el-text-color-primary)}.chat-empty__desc[data-v-5dde3b27]{margin:0;font-size:13px;color:var(--el-text-color-secondary);line-height:1.6}.chat-empty__desc .hl[data-v-5dde3b27]{color:var(--el-color-primary);font-weight:600}.chat-empty__commands[data-v-5dde3b27]{display:flex;flex-wrap:wrap;justify-content:center;gap:8px}.chat-empty__commands .el-button[data-v-5dde3b27]{margin-left:0}.chat-panel__footer[data-v-5dde3b27]{flex-shrink:0}.chat-panel__stop[data-v-5dde3b27]{display:flex;justify-content:center;padding:6px 0 0}.chat-panel__error[data-v-5dde3b27]{padding:8px 16px 0}.fade-enter-active[data-v-5dde3b27],.fade-leave-active[data-v-5dde3b27]{transition:opacity .2s}.fade-enter-from[data-v-5dde3b27],.fade-leave-to[data-v-5dde3b27]{opacity:0}.chat-panel--fullscreen[data-v-5dde3b27]{position:fixed;top:5%;right:10%;bottom:5%;left:10%;z-index:9999;height:90vh!important;width:80%!important}
1
+ .render-block[data-v-ea599d5b]{margin:8px 0;padding:8px 0;width:100%}.render-block__component[data-v-ea599d5b]{border-radius:8px;background:var(--el-fill-color-lighter);box-shadow:0 0 10px #0000001a}.render-block__title[data-v-ea599d5b]{font-weight:600;font-size:14px;margin-bottom:6px;color:var(--el-text-color-primary)}.render-block__table[data-v-ea599d5b]{width:100%;max-width:900px;border-radius:8px;overflow:hidden;box-shadow:0 2px 8px #0000000f}.render-block__cards[data-v-ea599d5b]{display:flex;flex-direction:column;gap:8px}.card-item[data-v-ea599d5b]{border:1px solid var(--el-border-color);border-radius:8px;padding:10px 14px;background:var(--el-fill-color-lighter);box-shadow:0 2px 6px #0000000d}.card-field[data-v-ea599d5b]{display:flex;gap:6px;font-size:13px;line-height:1.8}.card-label[data-v-ea599d5b]{font-weight:600;color:var(--el-text-color-secondary);min-width:80px}.card-value[data-v-ea599d5b]{color:var(--el-text-color-primary)}.render-block__list[data-v-ea599d5b]{display:flex;flex-direction:column;gap:4px}.list-item[data-v-ea599d5b]{padding:6px 10px;font-size:13px;border-left:3px solid var(--el-color-primary);background:var(--el-fill-color-lighter);border-radius:0 4px 4px 0;box-shadow:0 1px 4px #0000000a}.suggested-next[data-v-0e0e9b65]{display:flex;align-items:center;gap:8px;padding:8px 12px;margin:6px 0;background:var(--el-color-primary-light-9);border:1px solid var(--el-color-primary-light-7);border-radius:8px;font-size:13px}.suggested-next__icon[data-v-0e0e9b65]{font-size:15px;flex-shrink:0}.suggested-next__text[data-v-0e0e9b65]{flex:1;color:var(--el-text-color-regular)}.chat-message[data-v-7317da3a]{display:flex;gap:10px;padding:12px 0;animation:msg-in-7317da3a .25s ease both}@keyframes msg-in-7317da3a{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}.chat-message.role-user[data-v-7317da3a]{flex-direction:row-reverse}.chat-message.role-user .message-time[data-v-7317da3a]{text-align:right}.message-avatar[data-v-7317da3a]{width:32px;height:32px;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0;font-size:16px;color:#fff;box-shadow:0 0 0 2px var(--el-bg-color),0 2px 6px #0000001f}.role-user .message-avatar[data-v-7317da3a]{background:linear-gradient(135deg,var(--el-color-primary),var(--el-color-primary-light-3))}.role-assistant .message-avatar[data-v-7317da3a]{background:linear-gradient(135deg,#009688,#2d8cf0)}.message-time[data-v-7317da3a]{display:block;font-size:11px;line-height:1;color:var(--el-text-color-placeholder);margin-bottom:4px}.message-body[data-v-7317da3a]{max-width:80%;min-width:0}.role-user .message-body[data-v-7317da3a]{background:linear-gradient(135deg,var(--el-color-primary-light-9),var(--el-color-primary-light-8));padding:8px 14px;border-radius:12px 4px 12px 12px;box-shadow:0 2px 8px #0000000f,0 1px 2px #0000000a}.role-assistant .message-body[data-v-7317da3a]{position:relative;background:var(--el-fill-color-lighter);padding:8px 14px;border-radius:4px 12px 12px;display:flex;flex-direction:column;box-shadow:0 2px 8px #0000000f,0 1px 2px #0000000a}.message-actions[data-v-7317da3a]{position:absolute;top:0;right:0;opacity:0;transition:opacity .2s;z-index:1}.role-assistant .message-body:hover .message-actions[data-v-7317da3a]{opacity:1}.role-assistant .message-body .message-time[data-v-7317da3a]{float:left;width:10px}.message-action-btn[data-v-7317da3a]{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;border:none;background:transparent;border-radius:4px;color:var(--el-text-color-secondary);cursor:pointer;font-size:15px}.message-action-btn[data-v-7317da3a]:hover{background:var(--el-fill-color);color:var(--el-color-primary)}.message-user-text[data-v-7317da3a]{font-size:14px;line-height:1.5;color:var(--el-text-color-primary);white-space:pre-wrap;word-break:break-word}.message-content[data-v-7317da3a]{font-size:14px;line-height:1.6;color:var(--el-text-color-primary);word-break:break-word;background:transparent;border:none;outline:none;box-shadow:none;height:auto;overflow-wrap:break-word}.message-content[data-v-7317da3a] p{margin:0 0 8px}.message-content[data-v-7317da3a] p:last-child{margin-bottom:0}.message-content[data-v-7317da3a] h1,.message-content[data-v-7317da3a] h2,.message-content[data-v-7317da3a] h3,.message-content[data-v-7317da3a] h4,.message-content[data-v-7317da3a] h5,.message-content[data-v-7317da3a] h6{margin:12px 0 8px;font-weight:600;line-height:1.4;color:var(--el-text-color-primary);cursor:pointer;-webkit-user-select:none;user-select:none}.message-content[data-v-7317da3a] h1[data-collapsed]:after,.message-content[data-v-7317da3a] h2[data-collapsed]:after,.message-content[data-v-7317da3a] h3[data-collapsed]:after,.message-content[data-v-7317da3a] h4[data-collapsed]:after,.message-content[data-v-7317da3a] h5[data-collapsed]:after,.message-content[data-v-7317da3a] h6[data-collapsed]:after{content:" ▸";font-size:.8em;color:var(--el-text-color-secondary)}.message-content[data-v-7317da3a] h1{font-size:20px}.message-content[data-v-7317da3a] h2{font-size:18px;padding-bottom:4px;border-bottom:1px solid var(--el-border-color-lighter)}.message-content[data-v-7317da3a] h3{font-size:16px}.message-content[data-v-7317da3a] h4{font-size:15px}.message-content[data-v-7317da3a] h5,.message-content[data-v-7317da3a] h6{font-size:14px}.message-content[data-v-7317da3a] strong{font-weight:600}.message-content[data-v-7317da3a] em{font-style:italic}.message-content[data-v-7317da3a] ul,.message-content[data-v-7317da3a] ol{margin:0 0 8px;padding-left:20px}.message-content[data-v-7317da3a] ul:last-child,.message-content[data-v-7317da3a] ol:last-child{margin-bottom:0}.message-content[data-v-7317da3a] li{margin:2px 0}.message-content[data-v-7317da3a] li>ul,.message-content[data-v-7317da3a] li>ol{margin:0}.message-content[data-v-7317da3a] code{padding:1px 5px;margin:0 2px;font-size:12px;font-family:Consolas,Monaco,Courier New,monospace;background:var(--el-fill-color);color:var(--el-color-primary);border-radius:4px}.message-content[data-v-7317da3a] pre{margin:8px 0;padding:10px 12px;background:var(--el-bg-color);border:1px solid var(--el-border-color-lighter);border-radius:6px;overflow-x:auto}.message-content[data-v-7317da3a] .md-code-block{margin:8px 0}.message-content[data-v-7317da3a] .md-code-block__head{display:flex;align-items:center;justify-content:space-between;padding:6px 12px;background:var(--el-fill-color);border:1px solid var(--el-border-color-lighter);border-bottom:none;border-radius:6px 6px 0 0;font-size:12px}.message-content[data-v-7317da3a] .md-code-block__lang{color:var(--el-text-color-secondary);font-family:Consolas,Monaco,Courier New,monospace}.message-content[data-v-7317da3a] .md-code-block__copy{color:var(--el-color-primary);cursor:pointer;-webkit-user-select:none;user-select:none;transition:opacity .2s}.message-content[data-v-7317da3a] .md-code-block__copy:hover{opacity:.7}.message-content[data-v-7317da3a] .md-code-block pre{margin:0;border-radius:0 0 6px 6px}.message-content[data-v-7317da3a] pre code{display:block;padding:0;margin:0;font-size:12px;line-height:1.6;background:transparent;color:var(--el-text-color-primary);border-radius:0;white-space:pre}.message-content[data-v-7317da3a] blockquote{margin:8px 0;padding:4px 12px;border-left:3px solid var(--el-color-primary-light-5);background:var(--el-fill-color-lighter);border-radius:0 6px 6px 0;color:var(--el-text-color-regular)}.message-content[data-v-7317da3a] blockquote p{margin:0}.message-content[data-v-7317da3a] table{width:100%;margin:8px 0;border-collapse:collapse;font-size:13px}.message-content[data-v-7317da3a] th,.message-content[data-v-7317da3a] td{padding:6px 10px;border:1px solid var(--el-border-color-lighter);text-align:left}.message-content[data-v-7317da3a] th{background:var(--el-fill-color);font-weight:600;color:var(--el-text-color-primary)}.message-content[data-v-7317da3a] tbody tr:nth-child(2n){background:var(--el-fill-color-lighter)}.message-content.is-table-clickable[data-v-7317da3a] tbody tr{cursor:pointer;transition:background .15s}.message-content.is-table-clickable[data-v-7317da3a] tbody tr:hover{background:var(--el-color-primary-light-9)}.message-content.is-list-clickable[data-v-7317da3a] li{cursor:pointer;border-radius:4px;transition:background .15s}.message-content.is-list-clickable[data-v-7317da3a] li:hover{background:var(--el-color-primary-light-9)}.message-content[data-v-7317da3a] a{color:var(--el-color-primary);text-decoration:none}.message-content[data-v-7317da3a] a:hover{text-decoration:underline}.message-content[data-v-7317da3a] img{max-width:100%;border-radius:6px}.message-content[data-v-7317da3a] hr{margin:12px 0;border:none;border-top:1px solid var(--el-border-color-lighter)}.typing-dots[data-v-7317da3a]{display:inline-flex;align-items:center;gap:4px;padding:2px 0}.typing-dots i[data-v-7317da3a]{width:6px;height:6px;border-radius:50%;background:var(--el-color-primary);animation:typing-bounce-7317da3a 1.2s ease-in-out infinite}.typing-dots i[data-v-7317da3a]:nth-child(2){animation-delay:.15s}.typing-dots i[data-v-7317da3a]:nth-child(3){animation-delay:.3s}@keyframes typing-bounce-7317da3a{0%,60%,to{transform:translateY(0);opacity:.4}30%{transform:translateY(-4px);opacity:1}}.message-error[data-v-7317da3a]{margin-top:4px;font-size:12px;color:var(--el-color-danger)}.message-reasoning[data-v-7317da3a]{margin-bottom:8px}.reasoning-toggle[data-v-7317da3a]{display:inline-flex;align-items:center;gap:4px;padding:4px 10px;border:1px solid var(--el-border-color);border-radius:999px;background:var(--el-fill-color);color:var(--el-text-color-regular);font-size:12px;line-height:1;cursor:pointer;transition:all .2s}.reasoning-toggle[data-v-7317da3a]:hover{background:var(--el-fill-color-light);color:var(--el-color-primary);border-color:var(--el-color-primary-light-5)}.reasoning-toggle__arrow[data-v-7317da3a]{display:inline-block;font-size:12px;transition:transform .2s}.reasoning-toggle__arrow.open[data-v-7317da3a]{transform:rotate(180deg)}.reasoning-content[data-v-7317da3a]{margin:6px 0 0;padding:8px;background:var(--el-fill-color);border-radius:6px;font-size:12px;white-space:pre-wrap;word-break:break-word;max-height:200px;overflow-y:auto}.message-files[data-v-7317da3a]{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:8px}.message-file[data-v-7317da3a]{display:flex;align-items:center;gap:8px;padding:6px 10px;border:1px solid var(--el-border-color);border-radius:8px;background:var(--el-bg-color);font-size:12px}.message-file.is-image[data-v-7317da3a]{padding:4px;flex-direction:column;align-items:flex-start}.file-image[data-v-7317da3a]{max-width:200px;max-height:200px;border-radius:6px;object-fit:contain;cursor:zoom-in;transition:box-shadow .2s}.file-image[data-v-7317da3a]:hover{box-shadow:0 0 0 2px var(--el-color-primary-light-5)}.file-info[data-v-7317da3a]{display:flex;flex-direction:column;gap:2px}.file-name[data-v-7317da3a]{color:var(--el-text-color-primary);font-weight:500;max-width:150px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.file-size[data-v-7317da3a]{color:var(--el-text-color-secondary);font-size:11px}.chat-input[data-v-e7db63f0]{padding:12px 16px;border-top:1px solid var(--el-border-color-lighter);background:var(--el-bg-color);display:flex;flex-direction:column}.chat-input__files[data-v-e7db63f0]{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:8px}.chat-input__preview[data-v-e7db63f0]{margin-left:auto;height:24px;padding:0 8px}.chat-input__files[data-v-e7db63f0] .el-tag{border-radius:999px}.chat-input__send.el-button--primary[data-v-e7db63f0]{background:linear-gradient(135deg,#009688,#2d8cf0);border-color:transparent;color:#fff;transition:box-shadow .2s,transform .2s}.chat-input__send.el-button--primary[data-v-e7db63f0]:hover{background:linear-gradient(135deg,#00807a,#256fce);box-shadow:0 4px 12px #2d8cf059;transform:translateY(-1px)}.chat-input__wrap[data-v-e7db63f0]{display:flex;align-items:flex-end;gap:8px;background:var(--el-fill-color-light);border:1px solid var(--el-border-color);border-radius:12px;padding:6px 6px 6px 12px;transition:border-color .2s,box-shadow .2s}.chat-input__wrap[data-v-e7db63f0]:focus-within{border-color:var(--el-color-primary);box-shadow:0 0 0 2px var(--el-color-primary-light-8)}.chat-input__wrap[data-v-e7db63f0] .el-textarea__inner{border:none;background:transparent;box-shadow:none;padding:4px 0;line-height:1.6;font-size:14px}.chat-input__wrap[data-v-e7db63f0] .el-textarea__inner:focus{box-shadow:none}.chat-input__actions[data-v-e7db63f0]{flex-shrink:0;display:flex;align-items:center;gap:2px;padding-bottom:2px}.form-tip[data-v-6282664f]{font-size:12px;color:var(--el-text-color-secondary);line-height:1.6;margin-top:4px}.form-tip-inline[data-v-6282664f]{margin-left:8px;font-size:12px;color:var(--el-text-color-secondary)}.temp-row[data-v-6282664f]{display:flex;align-items:center;gap:12px;width:100%}.temp-val[data-v-6282664f]{width:28px;text-align:right;font-size:13px;color:var(--el-text-color-secondary)}.chat-panel-root[data-v-5dde3b27]{position:fixed;z-index:1999}.ai-fab[data-v-5dde3b27]{position:fixed;right:22px;bottom:25px;z-index:2000;display:flex;align-items:center;gap:8px;height:52px;padding:0 22px 0 18px;border-radius:26px;color:#fff;font-size:15px;font-weight:600;cursor:pointer;background:linear-gradient(135deg,#009688,#2d8cf0);box-shadow:0 6px 24px #2d8cf080;transition:transform .25s cubic-bezier(.34,1.56,.64,1),box-shadow .25s;-webkit-user-select:none;user-select:none;overflow:hidden;isolation:isolate;animation:ai-fab-float-5dde3b27 3.6s ease-in-out infinite}@keyframes ai-fab-float-5dde3b27{0%,to{transform:translateY(0)}50%{transform:translateY(-6px)}}.ai-fab[data-v-5dde3b27]:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;border-radius:inherit;background:linear-gradient(105deg,transparent 30%,rgba(255,255,255,.25) 50%,transparent 70%);background-size:200% 100%;background-position:100% 0;animation:ai-fab-shimmer-5dde3b27 4s ease-in-out infinite;z-index:-1;pointer-events:none}@keyframes ai-fab-shimmer-5dde3b27{0%,to{background-position:100% 0}50%{background-position:0 0}}.ai-fab[data-v-5dde3b27]:after{content:"";position:absolute;top:-4px;right:-4px;bottom:-4px;left:-4px;border-radius:inherit;border:2px solid rgba(45,140,240,.35);animation:ai-fab-pulse-5dde3b27 2.4s ease-in-out infinite;pointer-events:none;z-index:-2}@keyframes ai-fab-pulse-5dde3b27{0%,to{opacity:.6;transform:scale(1)}50%{opacity:0;transform:scale(1.12)}}.ai-fab__icon[data-v-5dde3b27]{font-size:22px;filter:drop-shadow(0 0 4px rgba(255,255,255,.4));transition:transform .3s cubic-bezier(.34,1.56,.64,1)}.ai-fab__label[data-v-5dde3b27]{line-height:1;text-shadow:0 1px 4px rgba(0,0,0,.15)}.ai-fab[data-v-5dde3b27]:hover{animation:none;transform:translateY(-4px) scale(1.04);box-shadow:0 12px 32px #2d8cf099}.ai-fab[data-v-5dde3b27]:hover:before{animation:none;background-position:0 0}.ai-fab--active[data-v-5dde3b27]{animation:none;box-shadow:0 4px 16px #2d8cf066}.ai-fab--active[data-v-5dde3b27]:after{animation:none;opacity:0}.ai-fab--active[data-v-5dde3b27]:before{animation:none}.ai-fab--active .ai-fab__icon[data-v-5dde3b27]{transform:rotate(45deg)}.ai-fab--dragged[data-v-5dde3b27]{animation:none}.ai-fab--dragged[data-v-5dde3b27]:before,.ai-fab--dragged[data-v-5dde3b27]:after{animation:none;opacity:0}.chat-panel[data-v-5dde3b27]{position:fixed;bottom:25px;right:22px;z-index:9999;display:flex;flex-direction:column;height:680px;width:560px;min-height:400px;background:var(--el-bg-color);box-shadow:0 20px 50px #0000002e,0 6px 18px #00000014;border-radius:16px;transform-origin:bottom right}.panel-enter-active[data-v-5dde3b27],.panel-leave-active[data-v-5dde3b27]{transition:opacity .3s ease,transform .3s cubic-bezier(.34,1.56,.64,1)}.panel-enter-from[data-v-5dde3b27],.panel-leave-to[data-v-5dde3b27]{opacity:0;transform:translateY(16px) scale(.96)}.chat-panel__header[data-v-5dde3b27]{display:flex;align-items:center;justify-content:space-between;padding:10px 16px;cursor:move;-webkit-user-select:none;user-select:none;border-bottom:1px solid var(--el-border-color-lighter);background:linear-gradient(135deg,var(--el-color-primary-light-7),var(--el-bg-color));border-radius:16px 16px 0 0;flex-shrink:0}.chat-panel__title[data-v-5dde3b27]{display:flex;align-items:center;gap:8px;font-size:15px;font-weight:600;color:var(--el-text-color-primary)}.title-icon[data-v-5dde3b27]{color:var(--el-color-primary);font-size:18px}.chat-panel__ops[data-v-5dde3b27]{display:flex;gap:4px}.chat-panel__scroll-wrap[data-v-5dde3b27]{position:relative;flex:1;min-height:0;display:flex}.chat-panel__body[data-v-5dde3b27]{flex:1;overflow-y:auto;padding:0 16px;min-height:0;scrollbar-width:thin;scrollbar-color:var(--el-border-color-darker) transparent}.chat-panel__nav[data-v-5dde3b27]{position:absolute;right:6px;top:50%;transform:translateY(-50%);display:flex;flex-direction:column;align-items:center;gap:6px;padding:6px 4px;background:var(--el-bg-color);border:1px solid var(--el-border-color-lighter);border-radius:10px;box-shadow:0 2px 10px #00000014;opacity:.35;transition:opacity .2s}.chat-panel__nav[data-v-5dde3b27]:hover,.chat-panel__nav.is-suppressed-scroll[data-v-5dde3b27]{opacity:1}.chat-panel__nav-count[data-v-5dde3b27]{font-size:10px;line-height:1;color:var(--el-text-color-secondary);font-variant-numeric:tabular-nums}.chat-panel__nav-btn[data-v-5dde3b27]{display:inline-flex;align-items:center;justify-content:center;width:26px;height:26px;padding:0;border:none;border-radius:8px;background:transparent;color:var(--el-text-color-regular);cursor:pointer;font-size:14px;transition:background .15s,color .15s}.chat-panel__nav-btn[data-v-5dde3b27]:hover:not(:disabled){background:var(--el-color-primary-light-9);color:var(--el-color-primary)}.chat-panel__nav-btn[data-v-5dde3b27]:disabled{color:var(--el-text-color-placeholder);cursor:not-allowed;opacity:.5}.chat-panel__body[data-v-5dde3b27] [data-msg-id].is-locate{animation:locate-flash-5dde3b27 1.2s ease both}@keyframes locate-flash-5dde3b27{0%{outline:2px solid var(--el-color-primary);outline-offset:2px;border-radius:8px}to{outline:2px solid transparent;outline-offset:2px;border-radius:8px}}.chat-panel__body[data-v-5dde3b27]::-webkit-scrollbar{width:8px}.chat-panel__body[data-v-5dde3b27]::-webkit-scrollbar-track{background:var(--el-fill-color-lighter);border-radius:4px}.chat-panel__body[data-v-5dde3b27]::-webkit-scrollbar-thumb{background:var(--el-border-color-darker);border-radius:4px;border:2px solid transparent;background-clip:content-box}.chat-panel__body[data-v-5dde3b27]::-webkit-scrollbar-thumb:hover{background:var(--el-text-color-secondary);background-clip:content-box}.chat-empty[data-v-5dde3b27]{height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;gap:14px}.chat-empty__logo[data-v-5dde3b27]{width:64px;height:64px;border-radius:18px;background:linear-gradient(135deg,#009688,#2d8cf0);color:#fff;display:flex;align-items:center;justify-content:center;font-size:32px;box-shadow:0 8px 24px #2d8cf04d}.chat-empty h3[data-v-5dde3b27]{margin:0;font-size:18px;color:var(--el-text-color-primary)}.chat-empty__desc[data-v-5dde3b27]{margin:0;font-size:13px;color:var(--el-text-color-secondary);line-height:1.6}.chat-empty__desc .hl[data-v-5dde3b27]{color:var(--el-color-primary);font-weight:600}.chat-empty__commands[data-v-5dde3b27]{display:flex;flex-wrap:wrap;justify-content:center;gap:8px}.chat-empty__commands .el-button[data-v-5dde3b27]{margin-left:0}.chat-panel__footer[data-v-5dde3b27]{flex-shrink:0}.chat-panel__stop[data-v-5dde3b27]{display:flex;justify-content:center;padding:6px 0 0}.chat-panel__error[data-v-5dde3b27]{padding:8px 16px 0}.fade-enter-active[data-v-5dde3b27],.fade-leave-active[data-v-5dde3b27]{transition:opacity .2s}.fade-enter-from[data-v-5dde3b27],.fade-leave-to[data-v-5dde3b27]{opacity:0}.chat-panel--fullscreen[data-v-5dde3b27]{position:fixed;top:5%;right:10%;bottom:5%;left:10%;z-index:9999;height:90vh!important;width:80%!important}
@@ -0,0 +1,11 @@
1
+ import { LLMProvider } from '../agent-core';
2
+ import { ProviderPreset } from '../types';
3
+ export interface OpenAICompatibleProviderOptions {
4
+ preset: ProviderPreset;
5
+ mode?: 'direct' | 'proxy';
6
+ }
7
+ /** 兼容传入 origin、/v1 或完整 /chat/completions 地址 */
8
+ export declare function resolveChatCompletionsUrl(baseUrl: string): string;
9
+ /** 代理地址兼容 http://host 与 http://host/api/chat 两种写法 */
10
+ export declare function getServerBase(proxyUrl: string): string;
11
+ export declare function createOpenAICompatibleProvider(options: OpenAICompatibleProviderOptions): LLMProvider;
@@ -0,0 +1,2 @@
1
+ import { LLMProvider } from '../agent-core';
2
+ export declare function createOpenAIProvider(): LLMProvider;
@@ -0,0 +1,8 @@
1
+ import { LLMProvider } from '../agent-core';
2
+ export interface ProviderFactoryContext {
3
+ id: string;
4
+ mode: 'direct' | 'proxy';
5
+ }
6
+ export type ProviderFactory = (context: ProviderFactoryContext) => LLMProvider;
7
+ export declare function registerProvider(id: string, factory: ProviderFactory): void;
8
+ export declare function createProvider(id: string, mode: 'direct' | 'proxy'): LLMProvider;
@@ -109,29 +109,33 @@ export declare function useAgentChat(options: AgentChatOptions): {
109
109
  hideMarkdown?: boolean;
110
110
  }[]>;
111
111
  settings: import('vue').Ref<{
112
- apiKey: string;
113
- baseUrl: string;
114
- model: string;
115
- temperature: number;
116
- useTools?: boolean;
112
+ providerId: string;
117
113
  providerMode: "direct" | "proxy";
118
114
  proxyUrl: string;
119
- thinking?: boolean;
120
- thinkingEffort?: "low" | "high" | "max";
115
+ providers: Record<string, import('..').ProviderSettings>;
121
116
  mdTableClick?: boolean;
122
117
  mdListClick?: boolean;
123
- }, ChatSettings | {
124
- apiKey: string;
125
- baseUrl: string;
126
- model: string;
127
- temperature: number;
128
118
  useTools?: boolean;
129
- providerMode: "direct" | "proxy";
130
- proxyUrl: string;
119
+ apiKey?: string;
120
+ baseUrl?: string;
121
+ model?: string;
122
+ temperature?: number;
131
123
  thinking?: boolean;
132
124
  thinkingEffort?: "low" | "high" | "max";
125
+ }, ChatSettings | {
126
+ providerId: string;
127
+ providerMode: "direct" | "proxy";
128
+ proxyUrl: string;
129
+ providers: Record<string, import('..').ProviderSettings>;
133
130
  mdTableClick?: boolean;
134
131
  mdListClick?: boolean;
132
+ useTools?: boolean;
133
+ apiKey?: string;
134
+ baseUrl?: string;
135
+ model?: string;
136
+ temperature?: number;
137
+ thinking?: boolean;
138
+ thinkingEffort?: "low" | "high" | "max";
135
139
  }>;
136
140
  loading: import('vue').Ref<boolean, boolean>;
137
141
  errorMsg: import('vue').Ref<string, string>;
package/dist/config.d.ts CHANGED
@@ -1,4 +1,11 @@
1
- export declare const MODEL_OPTIONS: {
2
- label: string;
3
- value: string;
4
- }[];
1
+ import { ChatSettings, ProviderPreset, ProviderSettings } from './types';
2
+ export declare const DEFAULT_PROVIDER_ID = "deepseek";
3
+ export declare const PROVIDER_PRESETS: ProviderPreset[];
4
+ export declare function registerProviderPreset(preset: ProviderPreset): void;
5
+ export declare function getProviderPreset(id?: string): ProviderPreset | undefined;
6
+ export declare function listProviderPresets(): ProviderPreset[];
7
+ export declare function createProviderSettings(preset: ProviderPreset): ProviderSettings;
8
+ export declare function syncLegacySettings(settings: ChatSettings): ChatSettings;
9
+ export declare function normalizeSettings(input?: Partial<ChatSettings>): ChatSettings;
10
+ export declare function mergeSettings(base: ChatSettings, raw?: Partial<ChatSettings>): ChatSettings;
11
+ export declare const MODEL_OPTIONS: import('./types').ProviderModelOption[];