page-agent-sdk 2.9.0 → 2.10.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
@@ -147,7 +147,7 @@ resolveContextOptions, CONTEXT_PRESETS, resolveModelCaps, estimateTokens
147
147
  // storage
148
148
  createSessionStore, createMemoryBackend, createWebStorageBackend, isQuotaError
149
149
  // UI (reuse when headless)
150
- ChatDialog, MessageContent, CodePreview, useChat
150
+ ChatDialog, MessageContent, CodePreview, SkillPanel, useChat
151
151
  // types (omitted): ChatSdkOptions, Middleware, SubagentConfig, SkillSpec, DataConfig, AgentMessage, StreamEvent …
152
152
  ```
153
153
 
@@ -181,9 +181,19 @@ ChatDialog, MessageContent, CodePreview, useChat
181
181
  | **Robustness/other** | `maxRetries` / `maxParallelTools` / `maxToolRounds` | `number` · 2 / 1 / 10 | Model retries / per-round tool concurrency / max rounds |
182
182
  | | `mcp` | `McpServerConfig[]` | Remote MCP servers (http/sse/websocket) |
183
183
  | | `middleware` | `Middleware[]` | Custom middleware (appended to built-in stack) |
184
- | | `streaming` / `title` / `placeholder` / `debug` | — | UI/debug |
185
- | | `drawer` | `boolean` · default `false` | Drawer mode: ChatDialog slides in from right + mask + close button (replaces collapse arrow); clicking mask/close defaults to `hide` (keeps agent/history/in-flight generation; `mount`/`show` resumes). Pass `onClose` to customize |
186
- | | `onClose` | `() => void` | Drawer mode close callback (default `hide`; pass to override and sync external mount state) |
184
+ | | `streaming` / `debug` | — | UI/debug |
185
+ | | `dialog` | `DialogConfig` | Grouped dialog UI config; see `DialogConfig` fields below |
186
+
187
+ #### `DialogConfig` fields
188
+
189
+ | Field | Type · default | Purpose |
190
+ |---|---|---|
191
+ | `title` / `placeholder` | `string` | Dialog title / input placeholder (cosmetic) |
192
+ | `drawer` | `boolean` · default `false` | Drawer mode: ChatDialog slides in from right + mask + close button (replaces collapse arrow); clicking mask/close defaults to `hide` (keeps agent/history/in-flight generation; `mount`/`show` resumes). Pass `onClose` to customize |
193
+ | `drawerWidth` | `number \| string` · default `420` | Drawer mode width (pixels or CSS string, e.g. `500` / `'500px'` / `'40vw'`); only effective when `drawer: true`; inline mode width determined by `container` |
194
+ | `drawerHidden` | `boolean` · default `false` | Drawer mode hidden by default (not shown after `mount`; requires `sdk.show()` to display): for "click button to show chatbox" scenarios; only effective when `drawer: true` |
195
+ | `inputRows` | `number` · default `2` | Input box rows (visible height); `1` = single row; `2` = 2-row initial height, auto-expands up to max-height:100px; `>2` = taller initial height |
196
+ | `onClose` | `() => void` | Drawer mode close callback (default `hide`; pass to override and sync external mount state) |
187
197
 
188
198
  ### Extension points
189
199
 
@@ -317,6 +327,8 @@ mv skills/page-agent-sdk-integrate ~/.claude/skills/
317
327
 
318
328
  After install, restart your AI tool; the skill auto-triggers when you ask things like "add page-agent-sdk to my page".
319
329
 
330
+ > **Don't want to install the skill?** Copy the bundled generic integration prompt template to the target project's AI: see `node_modules/page-agent-sdk/skills/page-agent-sdk-integrate/references/integration-prompt.md` (fill in `[...]` per your scenario). For a specific scenario example, see the repo's `doc/集成提示词-Vue2-低代码页面-抽屉.md`.
331
+
320
332
  > A second skill `page-agent-sdk-release` (release workflow for maintainers) is kept in the repo's `.claude/skills/` for project maintainers only and is **not** distributed via the npm package.
321
333
 
322
334
  ## Architecture
@@ -386,6 +398,11 @@ createChatSdk({
386
398
  // sdk.importData(json) // replace bind in-place (preserves reactive ref; schema-validated by default)
387
399
  // sdk.setSkills(skills) // runtime swap the entire skill list (same-name overwrites; clears cache, index re-renders next round)
388
400
  // sdk.invalidateSkillCache(name?) // invalidate skill full-text cache (proactive; omit name to clear all)
401
+ // sdk.addSkill(skill) // user-created skill (independent SkillStore, default indexedDB, separate from storage; same-name overwrites; ChatDialog has a built-in Skill panel)
402
+ // sdk.removeSkill(name) // remove a user-created skill (only user-created, not integrator initialSkills)
403
+ // sdk.listUserSkills() // list user-created skill names
404
+ // sdk.getUserSkill(name) // read a user-created skill's detail (for SkillPanel editing)
405
+ // skillStorage: { id: 'shared' } // manually specify the same id to share the same skill set across pages/agents
389
406
  // sdk.usage // cumulative token usage {prompt_tokens, completion_tokens, total_tokens}
390
407
  // sdk.hide() / sdk.show() // drawer mode hide/show (keeps agent/history/in-flight generation; mount after hide resumes via show, no rebuild)
391
408
  ```
@@ -439,8 +456,8 @@ function switchTo(i: number) {
439
456
  ## Self-tests
440
457
 
441
458
  ```bash
442
- npm test # 461 assertions (tsx, source-level; no LLM dependency)
443
- npm run test:e2e # 151 integration assertions (node, built dist; covers APIs/options/modules/simple&complex scenes: default systemPrompt(capability overview) / dynamic register + inspect sync / inspect(tools/middleware/subagent/verify/mcp/todos/lastCompression/checkpoints reflect config) / custom tools/middleware/skills/memory injection / switchSession(on/off) / shareContext on/off sharing/independent / storage backends + object config / presets(3) / checkpoint / exports complete(39+ fns/components) / util fns usable(isQuotaError/estimateTokens/jpEval/searchJson) / source=builtin / mount boundary / hook multi-listener / llm config / hide/show / error scenes)
459
+ npm test # 474 assertions (tsx, source-level; no LLM dependency)
460
+ npm run test:e2e # 173 integration assertions (node, built dist; covers APIs/options/modules/simple&complex scenes: default systemPrompt(capability overview) / dynamic register + inspect sync / inspect(tools/middleware/subagent/verify/mcp/todos/lastCompression/checkpoints reflect config) / custom tools/middleware/skills/memory injection / switchSession(on/off) / shareContext on/off sharing/independent / storage backends + object config / presets(3) / checkpoint / exports complete(39+ fns/components) / util fns usable(isQuotaError/estimateTokens/jpEval/searchJson) / source=builtin / mount boundary / hook multi-listener / llm config / hide/show / error scenes)
444
461
  ```
445
462
 
446
463
  ## Local npm package test
package/README.zh-CN.md CHANGED
@@ -147,7 +147,7 @@ resolveContextOptions, CONTEXT_PRESETS, resolveModelCaps, estimateTokens
147
147
  // 存储
148
148
  createSessionStore, createMemoryBackend, createWebStorageBackend, isQuotaError
149
149
  // UI(headless 自建 UI 复用)
150
- ChatDialog, MessageContent, CodePreview, useChat
150
+ ChatDialog, MessageContent, CodePreview, SkillPanel, useChat
151
151
  // 类型(略):ChatSdkOptions, Middleware, SubagentConfig, SkillSpec, DataConfig, AgentMessage, StreamEvent …
152
152
  ```
153
153
 
@@ -181,9 +181,19 @@ ChatDialog, MessageContent, CodePreview, useChat
181
181
  | **鲁棒/其他** | `maxRetries` / `maxParallelTools` / `maxToolRounds` | `number` · 2 / 1 / 10 | 模型重试 / 同轮工具并发 / 最大轮次 |
182
182
  | | `mcp` | `McpServerConfig[]` | 远程 MCP server(http/sse/websocket) |
183
183
  | | `middleware` | `Middleware[]` | 自定义中间件(拼到内置栈末尾) |
184
- | | `streaming` / `title` / `placeholder` / `debug` | — | UI/调试 |
185
- | | `drawer` | `boolean` · 默认 `false` | 抽屉模式:ChatDialog 从右滑入 + 遮罩 + 关闭按钮(替代收起下箭头);点遮罩/关闭按钮默认 `hide`(保留 agent/历史/生成进程,再 `mount`/`show` 恢复),传 `onClose` 自定义 |
186
- | | `onClose` | `() => void` | 抽屉模式关闭回调(默认 `hide`;传此选项覆盖默认,便于同步外部挂载状态) |
184
+ | | `streaming` / `debug` | — | UI/调试 |
185
+ | | `dialog` | `DialogConfig` | 对话框 UI 归组配置;字段见下方 `DialogConfig` |
186
+
187
+ #### `DialogConfig` 字段
188
+
189
+ | 字段 | 类型 · 默认 | 用途 |
190
+ |---|---|---|
191
+ | `title` / `placeholder` | `string` | 对话框标题 / 输入框 placeholder(装饰性) |
192
+ | `drawer` | `boolean` · 默认 `false` | 抽屉模式:ChatDialog 从右滑入 + 遮罩 + 关闭按钮(替代收起下箭头);点遮罩/关闭按钮默认 `hide`(保留 agent/历史/生成进程,再 `mount`/`show` 恢复),传 `onClose` 自定义 |
193
+ | `drawerWidth` | `number \| string` · 默认 `420` | 抽屉模式宽度(像素或 CSS 字符串,如 `500` / `'500px'` / `'40vw'`);仅 `drawer:true` 生效;inline 模式宽度由 `container` 决定 |
194
+ | `drawerHidden` | `boolean` · 默认 `false` | 抽屉模式默认隐藏(`mount` 后不显示,需 `sdk.show()` 才出现):适合「点击按钮才出现聊天框」场景;仅 `drawer:true` 生效 |
195
+ | `inputRows` | `number` · 默认 `2` | 输入框行数(可见高度);`1` = 单行;`2` = 2 行初始高度,自动扩展至 max-height:100px;`>2` = 更高初始高度 |
196
+ | `onClose` | `() => void` | 抽屉模式关闭回调(默认 `hide`;传此选项覆盖默认,便于同步外部挂载状态) |
187
197
 
188
198
  ### 扩展点
189
199
 
@@ -262,6 +272,8 @@ mv skills/page-agent-sdk-integrate ~/.claude/skills/
262
272
 
263
273
  安装后重启 AI 工具;当你说「把 page-agent-sdk 加到我的页面」等时 skill 自动触发。
264
274
 
275
+ > **不想装 skill?** 用随包附带的通用对接提示词模板复制给对接项目的 AI:见 `node_modules/page-agent-sdk/skills/page-agent-sdk-integrate/references/integration-prompt.md`(按场景填空 `[...]` 即可)。特定场景示例见仓库 `doc/集成提示词-Vue2-低代码页面-抽屉.md`。
276
+
265
277
  > 另有 `page-agent-sdk-release`(维护者发布工作流)skill 仅保留在仓库 `.claude/skills/` 供项目维护者自用,**不**通过 npm 包公开分发。
266
278
 
267
279
  ## 架构
@@ -331,6 +343,11 @@ createChatSdk({
331
343
  // sdk.importData(json) // 整体替换 bind(就地还原保留 reactive 引用,默认经 schema 校验)
332
344
  // sdk.setSkills(skills) // 运行时替换整个 skill 列表(同名覆盖;清缓存,下轮索引重渲染)
333
345
  // sdk.invalidateSkillCache(name?) // 清 skill 全文缓存(动态 skill 内容变化时主动失效)
346
+ // sdk.addSkill(skill) // 用户创建 skill(独立 SkillStore 持久化,默认 indexedDB,与 storage 分离;同名覆盖;ChatDialog 内置 Skill 管理面板)
347
+ // sdk.removeSkill(name) // 删除用户创建的 skill(仅删用户创建的,不删集成方 initialSkills)
348
+ // sdk.listUserSkills() // 列出用户创建的 skill 名
349
+ // sdk.getUserSkill(name) // 读取用户创建的 skill 详情(SkillPanel 编辑用)
350
+ // skillStorage: { id: 'shared' } // 手动指定同一 id → 跨页面/跨 agent 复用同一套用户 skill
334
351
  // sdk.usage // 累计 token 用量 {prompt_tokens, completion_tokens, total_tokens}
335
352
  // sdk.hide() / sdk.show() // 抽屉模式隐藏/显示(保留 agent/历史/生成进程;hide 后再 mount 直接 show 不重建)
336
353
  ```
@@ -384,8 +401,8 @@ function switchTo(i: number) {
384
401
  ## 自测
385
402
 
386
403
  ```bash
387
- npm test # 461 项断言(tsx 源码级,不依赖 LLM)
388
- npm run test:e2e # 151 项集成断言(node 跑构建产物 dist;覆盖各 API/配置项/功能模块/简单与复杂场景:默认 systemPrompt(含能力概述) / 动态注册与 inspect 同步 / inspect(tools/middleware/subagent/verify/mcp/todos/lastCompression/checkpoints 反映配置) / 自定义 tools/middleware/skills/memory 注入 / switchSession(开/未开) / shareContext 开/关共享独立 / storage 后端+对象配置 / presets 三预设 / checkpoint / 导出项完整(39+ 函数/组件) / 工具函数可用(isQuotaError/estimateTokens/jpEval/searchJson) / source=builtin / mount 边界 / hook 多监听器 / llm 配置 / 错误场景)
404
+ npm test # 474 项断言(tsx 源码级,不依赖 LLM)
405
+ npm run test:e2e # 173 项集成断言(node 跑构建产物 dist;覆盖各 API/配置项/功能模块/简单与复杂场景:默认 systemPrompt(含能力概述) / 动态注册与 inspect 同步 / inspect(tools/middleware/subagent/verify/mcp/todos/lastCompression/checkpoints 反映配置) / 自定义 tools/middleware/skills/memory 注入 / switchSession(开/未开) / shareContext 开/关共享独立 / storage 后端+对象配置 / presets 三预设 / checkpoint / 导出项完整(39+ 函数/组件) / 工具函数可用(isQuotaError/estimateTokens/jpEval/searchJson) / source=builtin / mount 边界 / hook 多监听器 / llm 配置 / 错误场景)
389
406
  ```
390
407
 
391
408
  ## 本地 npm 包测试
@@ -1,2 +1,2 @@
1
- .code-preview-overlay[data-v-3d6e2a95]{z-index:9999;background:#00000080;justify-content:center;align-items:center;padding:20px;display:flex;position:fixed;inset:0}.code-preview-modal[data-v-3d6e2a95]{background:#fff;border-radius:12px;flex-direction:column;width:90%;max-width:900px;height:80vh;display:flex;overflow:hidden;box-shadow:0 20px 60px #0000004d}.preview-header[data-v-3d6e2a95]{color:#fff;background:#1f2937;align-items:center;gap:12px;padding:10px 16px;display:flex}.preview-title[data-v-3d6e2a95]{font-size:14px;font-weight:600}.preview-tabs[data-v-3d6e2a95]{gap:4px;margin-left:auto;display:flex}.preview-tabs button[data-v-3d6e2a95]{color:#fff;cursor:pointer;background:#ffffff1a;border:none;border-radius:6px;padding:4px 12px;font-size:13px}.preview-tabs button.active[data-v-3d6e2a95]{background:#667eea}.preview-tabs button[data-v-3d6e2a95]:disabled{opacity:.4;cursor:not-allowed}.preview-actions[data-v-3d6e2a95]{gap:4px;display:flex}.icon-btn[data-v-3d6e2a95]{color:#fff;cursor:pointer;background:#ffffff1a;border:none;border-radius:6px;justify-content:center;align-items:center;width:28px;height:28px;font-size:14px;display:flex}.icon-btn[data-v-3d6e2a95]:hover{background:#ffffff40}.preview-body[data-v-3d6e2a95]{background:#f9fafb;flex:1;overflow:hidden}.preview-iframe[data-v-3d6e2a95]{background:#fff;border:none;width:100%;height:100%}.preview-source[data-v-3d6e2a95]{color:#e5e7eb;white-space:pre-wrap;word-break:break-word;background:#1f2937;height:100%;margin:0;padding:16px;font-family:SF Mono,Monaco,Consolas,monospace;font-size:13px;line-height:1.5;overflow:auto}.message-md{overflow-wrap:anywhere;word-break:break-word;font-size:13px;line-height:1.6}.message-md p{margin:0 0 8px}.message-md p:last-child{margin-bottom:0}.message-md table{border-collapse:collapse;max-width:100%;margin:8px 0;display:block;overflow-x:auto}.message-md th,.message-md td{white-space:nowrap;border:1px solid #e5e7eb;padding:4px 8px;font-size:12px}.message-md th{background:#f9fafb}.message-md img{max-width:100%}.message-md ul,.message-md ol{margin:6px 0;padding-left:20px}.message-md li{margin:2px 0}.message-md h1,.message-md h2,.message-md h3{margin:10px 0 6px;font-weight:600}.message-md h1{font-size:18px}.message-md h2{font-size:16px}.message-md h3{font-size:15px}.message-md a{color:#667eea;text-decoration:underline}.message-md code:not(.hljs){color:#4338ca;background:#667eea1a;border-radius:4px;padding:1px 5px;font-family:SF Mono,Monaco,Consolas,monospace;font-size:13px}.message-md .code-block{background:#1f2937;border-radius:8px;margin:10px 0;padding:0;position:relative;overflow:hidden}.message-md .code-block code{color:#e5e7eb;background:0 0;padding:12px 14px;font-family:SF Mono,Monaco,Consolas,monospace;font-size:13px;line-height:1.5;display:block;overflow-x:auto}.message-md .code-toolbar{background:#00000040;border-bottom:1px solid #ffffff14;align-items:center;gap:8px;padding:6px 12px;display:flex}.message-md .code-lang{color:#9ca3af;text-transform:lowercase;font-family:SF Mono,Monaco,Consolas,monospace;font-size:11px}.message-md .code-action-btn{color:#e5e7eb;cursor:pointer;background:#ffffff1a;border:none;border-radius:4px;margin-left:auto;padding:3px 10px;font-size:12px;transition:background .2s}.message-md .code-action-btn:hover{background:#fff3}.message-md .code-action-btn.preview-btn{color:#fff;background:#667eea;margin-left:4px}.message-md .code-action-btn.preview-btn:hover{background:#5568d3}.message-md .hljs{color:#e5e7eb}.message-md .hljs-keyword{color:#c084fc}.message-md .hljs-string{color:#86efac}.message-md .hljs-comment{color:#6b7280;font-style:italic}.message-md .hljs-number{color:#fca5a5}.message-md .hljs-function .hljs-title,.message-md .hljs-title{color:#93c5fd}.message-md .hljs-tag{color:#fca5a5}.message-md .hljs-attr{color:#fcd34d}.message-md .hljs-built_in{color:#67e8f9}.debug-drawer[data-v-01f829a3]{z-index:9000;pointer-events:none;position:fixed;inset:0}.drawer-mask[data-v-01f829a3]{pointer-events:auto;background:#00000040;position:absolute;inset:0}.drawer-panel[data-v-01f829a3]{--cs-primary:#1f4d3a;--cs-primary-rgb:31, 77, 58;pointer-events:auto;z-index:2;background:#fff;flex-direction:column;width:520px;max-width:90vw;display:flex;position:absolute;top:0;bottom:0;right:0;box-shadow:-8px 0 32px #00000026}.drawer-mask[data-v-01f829a3]{z-index:1}.drawer-header[data-v-01f829a3]{color:#fff;background:linear-gradient(135deg,#1f2937,#111827);justify-content:space-between;align-items:center;padding:12px 16px;display:flex}.drawer-title[data-v-01f829a3]{font-size:15px;font-weight:600}.tab-group[data-v-01f829a3]{gap:4px;display:flex}.tab-btn[data-v-01f829a3]{color:#fff;cursor:pointer;background:#ffffff1f;border:none;border-radius:6px;padding:4px 12px;font-size:13px;transition:background .2s}.tab-btn[data-v-01f829a3]:hover{background:#ffffff38}.tab-btn.active[data-v-01f829a3]{background:#ffffff73;font-weight:600}.info-body[data-v-01f829a3]{padding:4px 0}.info-section[data-v-01f829a3]{margin-bottom:14px}.info-title[data-v-01f829a3]{color:#2d5a47;border-bottom:1px solid #f3f4f6;margin-bottom:6px;padding-bottom:4px;font-size:12px;font-weight:600}.info-item[data-v-01f829a3]{background:#f9fafb;border-radius:6px;margin-bottom:4px;padding:6px 8px}.info-name[data-v-01f829a3]{color:#1f2937;font-family:SF Mono,Monaco,Consolas,monospace;font-size:12px;font-weight:600}.info-desc[data-v-01f829a3]{color:#6b7280;margin-top:2px;font-size:11px;line-height:1.5}.info-desc.muted[data-v-01f829a3]{color:#9ca3af}.info-hint[data-v-01f829a3]{color:#9ca3af;margin-left:6px;font-size:10px;font-weight:400}.skill-toggle[data-v-01f829a3]{cursor:pointer;align-items:center;gap:4px;display:flex}.skill-toggle[data-v-01f829a3]:hover{color:var(--cs-primary,#1f4d3a)}.skill-arrow[data-v-01f829a3]{color:#9ca3af;font-size:8px;transition:transform .15s;display:inline-block}.skill-arrow.open[data-v-01f829a3]{transform:rotate(90deg)}.skill-content[data-v-01f829a3]{margin-top:6px}.skill-loading[data-v-01f829a3]{color:#6b7280;padding:6px 8px;font-size:11px}.skill-error[data-v-01f829a3]{color:#dc2626;padding:6px 8px;font-size:11px}.skill-pre[data-v-01f829a3]{color:#374151;white-space:pre-wrap;word-break:break-word;background:#f9fafb;border:1px solid #e5e7eb;border-radius:6px;max-height:320px;margin:0;padding:8px 10px;font-family:SF Mono,Monaco,Consolas,monospace;font-size:11px;line-height:1.6;overflow:auto}.src-tag[data-v-01f829a3]{vertical-align:middle;border-radius:8px;margin-left:6px;padding:0 6px;font-size:10px;font-weight:600;display:inline-block}.src-tag.builtin[data-v-01f829a3]{color:#6b7280;background:#f3f4f6}.src-tag.mcp[data-v-01f829a3]{color:#7c3aed;background:#f3e8ff}.src-tag.user[data-v-01f829a3]{color:#2563eb;background:#dbeafe}.info-todo[data-v-01f829a3]{color:#374151;background:#f9fafb;border-radius:6px;align-items:center;gap:6px;margin-bottom:4px;padding:4px 8px;font-size:12px;display:flex}.todo-tag[data-v-01f829a3]{color:#fff;border-radius:8px;flex-shrink:0;padding:1px 6px;font-size:10px}.info-pre[data-v-01f829a3]{color:#4b5563;white-space:pre-wrap;word-break:break-word;background:#f9fafb;border-radius:6px;max-height:200px;margin:0;padding:8px;font-family:SF Mono,Monaco,Consolas,monospace;font-size:11px;overflow-y:auto}.header-actions[data-v-01f829a3]{gap:4px;display:flex}.hd-btn[data-v-01f829a3]{color:#fff;cursor:pointer;background:#ffffff1f;border:none;border-radius:6px;width:28px;height:28px}.hd-btn[data-v-01f829a3]:hover{background:#ffffff40}.drawer-filters[data-v-01f829a3]{background:#fafafa;border-bottom:1px solid #f3f4f6;flex-wrap:wrap;gap:6px;padding:10px 16px;display:flex}.filter-chip[data-v-01f829a3]{color:#6b7280;cursor:pointer;background:#fff;border:1px solid #e5e7eb;border-radius:14px;align-items:center;gap:4px;padding:4px 10px;font-size:12px;transition:all .2s;display:inline-flex}.filter-chip[data-v-01f829a3]:hover{border-color:var(--chip-color,var(--cs-primary))}.filter-chip.active[data-v-01f829a3]{background:var(--chip-color,var(--cs-primary));border-color:var(--chip-color,var(--cs-primary));color:#fff}.chip-count[data-v-01f829a3]{background:#00000014;border-radius:8px;padding:0 5px;font-size:11px}.filter-chip.active .chip-count[data-v-01f829a3]{background:#ffffff40}.drawer-body[data-v-01f829a3]{flex:1;padding:12px;overflow-y:auto}.empty[data-v-01f829a3]{text-align:center;color:#9ca3af;padding:40px 20px;font-size:13px}.log-item[data-v-01f829a3]{background:#fff;border:1px solid #e5e7eb;border-radius:8px;margin-bottom:10px;overflow:hidden}.log-head[data-v-01f829a3]{background:#f9fafb;align-items:center;gap:8px;padding:8px 10px;display:flex}.log-type[data-v-01f829a3]{color:#fff;white-space:nowrap;border-radius:4px;padding:2px 8px;font-size:11px;font-weight:600}.log-source[data-v-01f829a3]{color:#7c3aed;white-space:nowrap;background:#f3e8ff;border-radius:4px;padding:2px 8px;font-size:10px;font-weight:600}.log-time[data-v-01f829a3]{color:#9ca3af;font-family:SF Mono,Monaco,Consolas,monospace;font-size:11px}.log-body[data-v-01f829a3]{padding:10px 12px}.log-footer[data-v-01f829a3]{border-top:1px dashed #f3f4f6;gap:8px;padding:6px 12px;display:flex}.raw-toggle[data-v-01f829a3]{color:var(--cs-primary);cursor:pointer;background:0 0;border:none;padding:2px 4px;font-size:11px}.raw-toggle[data-v-01f829a3]:hover{text-decoration:underline}.log-raw[data-v-01f829a3]{color:#e5e7eb;white-space:pre-wrap;word-break:break-word;background:#1f2937;border-top:1px solid #f3f4f6;max-height:280px;margin:0;padding:10px 12px;font-family:SF Mono,Monaco,Consolas,monospace;font-size:11px;line-height:1.5;overflow:auto}.kv-grid[data-v-01f829a3]{grid-template-columns:1fr 1fr;gap:6px;margin-bottom:8px;display:grid}.kv[data-v-01f829a3]{background:#f9fafb;border-radius:6px;flex-direction:column;padding:6px 8px;display:flex}.kv .k[data-v-01f829a3]{color:#9ca3af;text-transform:uppercase;font-size:10px}.kv .v[data-v-01f829a3]{color:#1f2937;font-family:SF Mono,Monaco,Consolas,monospace;font-size:13px;font-weight:600}.section-label[data-v-01f829a3]{color:#6b7280;margin:10px 0 4px;font-size:11px;font-weight:600}.chip-row[data-v-01f829a3]{flex-wrap:wrap;gap:4px;display:flex}.tool-chip[data-v-01f829a3]{color:#2d5a47;background:#ecf5ef;border-radius:10px;padding:2px 8px;font-family:SF Mono,Monaco,Consolas,monospace;font-size:11px}.msg-list[data-v-01f829a3]{flex-direction:column;gap:4px;display:flex}.msg-row[data-v-01f829a3]{background:#f9fafb;border-radius:6px;align-items:flex-start;gap:6px;padding:5px 8px;display:flex}.msg-role[data-v-01f829a3]{color:#fff;border-radius:3px;flex-shrink:0;margin-top:1px;padding:2px 6px;font-size:9px;font-weight:700}.msg-text[data-v-01f829a3]{color:#374151;white-space:pre-wrap;word-break:break-word;flex:1;font-size:12px;line-height:1.5}.msg-tool-hint[data-v-01f829a3]{color:#7c3aed;flex-shrink:0;font-size:10px}.badge-row[data-v-01f829a3]{flex-wrap:wrap;gap:6px;margin-bottom:8px;display:flex}.badge[data-v-01f829a3]{color:#2d5a47;background:#dbeee4;border-radius:10px;padding:2px 8px;font-size:11px;font-weight:600}.badge.muted[data-v-01f829a3]{color:#6b7280;background:#f3f4f6}.badge.warn[data-v-01f829a3]{color:#92400e;background:#fef3c7}.resp-content[data-v-01f829a3]{color:#1f2937;white-space:pre-wrap;word-break:break-word;background:#fffbeb;border-left:3px solid #d97706;border-radius:4px;margin-bottom:8px;padding:6px 10px;font-size:12px}.tc-list[data-v-01f829a3]{flex-direction:column;gap:6px;display:flex}.tc-card[data-v-01f829a3]{border:1px solid #e5e7eb;border-radius:6px;overflow:hidden}.tc-card.inline[data-v-01f829a3]{margin-top:4px}.tc-name[data-v-01f829a3]{color:#2d5a47;background:#ecf5ef;padding:5px 8px;font-size:12px;font-weight:600}.tc-args[data-v-01f829a3]{color:#e5e7eb;white-space:pre-wrap;word-break:break-word;background:#1f2937;max-height:200px;margin:0;padding:8px;font-family:SF Mono,Monaco,Consolas,monospace;font-size:11px;line-height:1.5;overflow-y:auto}.usage-row[data-v-01f829a3]{flex-wrap:wrap;gap:6px;margin-top:8px;display:flex}.usage[data-v-01f829a3]{color:#047857;background:#ecfdf5;border-radius:10px;padding:2px 8px;font-family:SF Mono,Monaco,Consolas,monospace;font-size:11px}.err-box[data-v-01f829a3]{color:#991b1b;white-space:pre-wrap;word-break:break-word;background:#fef2f2;border:1px solid #fecaca;border-radius:6px;padding:8px 10px;font-size:12px}.msg-detail[data-v-01f829a3]{flex-direction:column;flex:1;gap:3px;min-width:0;display:flex}.tc-inline[data-v-01f829a3]{background:#f0f7f3;border:1px solid #c3dcd0;border-radius:4px;align-items:baseline;gap:4px;padding:2px 6px;font-size:11px;display:flex}.tc-inline-name[data-v-01f829a3]{color:#2d5a47;white-space:nowrap;font-weight:600}.tc-inline-args[data-v-01f829a3]{color:#16402f;word-break:break-all;font-family:SF Mono,Monaco,Consolas,monospace;font-size:10px}.tc-id[data-v-01f829a3]{color:#9ca3af;font-family:SF Mono,Monaco,Consolas,monospace;font-size:10px}.view-toggle[data-v-01f829a3]{color:#2d5a47;cursor:pointer;background:#ecf5ef;border:1px solid #b8d4c5;border-radius:10px;margin-left:auto;padding:2px 8px;font-size:11px}.view-toggle[data-v-01f829a3]:hover{background:#dbeee4}.drawer-enter-active[data-v-01f829a3],.drawer-leave-active[data-v-01f829a3]{transition:opacity .25s}.drawer-enter-active .drawer-panel[data-v-01f829a3],.drawer-leave-active .drawer-panel[data-v-01f829a3]{transition:transform .25s}.drawer-enter-from[data-v-01f829a3],.drawer-leave-to[data-v-01f829a3]{opacity:0}.drawer-enter-from .drawer-panel[data-v-01f829a3],.drawer-leave-to .drawer-panel[data-v-01f829a3]{transform:translate(100%)}.flow-section[data-v-01f829a3]{margin-bottom:14px}.flow-section-title[data-v-01f829a3]{color:#6b7280;margin-bottom:6px;padding-left:2px;font-size:11px;font-weight:600}.flow-round[data-v-01f829a3]{border:1px solid #e5e7eb;border-radius:8px;margin-bottom:12px;overflow:hidden}.flow-round-head[data-v-01f829a3]{color:#fff;background:var(--cs-primary);padding:5px 10px;font-size:12px;font-weight:600}.flow-round-body[data-v-01f829a3]{flex-direction:column;gap:3px;padding:6px;display:flex}.flow-node[data-v-01f829a3]{border-left:3px solid var(--cs-primary);background:#f9fafb;border-radius:6px;align-items:center;gap:6px;padding:5px 8px;font-size:12px;display:flex}.flow-node.llm_request[data-v-01f829a3]{border-left-color:#059669}.flow-node.llm_response[data-v-01f829a3]{border-left-color:#d97706}.flow-node.tool_call[data-v-01f829a3]{border-left-color:#7c3aed}.flow-node.tool_result[data-v-01f829a3]{border-left-color:#2563eb}.flow-node.error[data-v-01f829a3]{background:#fef2f2;border-left-color:#dc2626}.flow-node.middleware[data-v-01f829a3]{border-left-color:#0891b2}.flow-ico[data-v-01f829a3]{flex-shrink:0;font-size:13px}.flow-label[data-v-01f829a3]{color:#374151;white-space:nowrap;flex-shrink:0;font-weight:600}.flow-detail[data-v-01f829a3]{color:#6b7280;text-overflow:ellipsis;white-space:nowrap;flex:1;font-family:SF Mono,Monaco,Consolas,monospace;font-size:11px;overflow:hidden}.flow-time[data-v-01f829a3]{color:#9ca3af;flex-shrink:0;font-family:SF Mono,Monaco,Consolas,monospace;font-size:10px}.chat-mask[data-v-1dc203ad]{z-index:9998;background:#00000073;animation:.28s cs-mask-in-1dc203ad;position:fixed;inset:0}@keyframes cs-mask-in-1dc203ad{0%{opacity:0}to{opacity:1}}.chat-dialog.drawer[data-v-1dc203ad]{z-index:9999;border-radius:0;width:420px;max-width:92vw;height:100vh;animation:.3s cubic-bezier(.16,1,.3,1) cs-drawer-slide-in-1dc203ad;position:fixed;top:0;bottom:0;right:0}@keyframes cs-drawer-slide-in-1dc203ad{0%{transform:translate(100%)}to{transform:translate(0)}}@media (prefers-reduced-motion:reduce){.chat-mask[data-v-1dc203ad],.chat-dialog.drawer[data-v-1dc203ad]{animation:none}}.chat-dialog[data-v-1dc203ad]{--cs-primary:#1f4d3a;--cs-primary-rgb:31, 77, 58;--cs-bg:#fff;--cs-bubble-ai:#f3f4f6;--cs-radius:12px;border-radius:var(--cs-radius);background:var(--cs-bg);flex-direction:column;width:100%;height:100%;transition:all .3s;animation:.28s cubic-bezier(.16,1,.3,1) cs-drawer-in-1dc203ad;display:flex;overflow:hidden;box-shadow:0 8px 32px #0000001f,0 2px 8px #00000014}@keyframes cs-drawer-in-1dc203ad{0%{opacity:0;transform:translate(32px)}to{opacity:1;transform:translate(0)}}@media (prefers-reduced-motion:reduce){.chat-dialog[data-v-1dc203ad]{animation:none}}.chat-dialog.collapsed[data-v-1dc203ad]{height:52px}.cs-slide-enter-active[data-v-1dc203ad],.cs-slide-leave-active[data-v-1dc203ad]{transition:opacity .22s,transform .22s}.cs-slide-enter-from[data-v-1dc203ad],.cs-slide-leave-to[data-v-1dc203ad]{opacity:0;transform:translateY(-6px)}.chat-dialog.cs-leaving[data-v-1dc203ad]{opacity:0;pointer-events:none;transform:scale(.96)translateY(8px)}.chat-dialog.drawer.cs-leaving[data-v-1dc203ad]{transform:translate(100%)}.chat-mask.cs-leaving[data-v-1dc203ad]{opacity:0}.chat-dialog.cs-hidden[data-v-1dc203ad],.chat-mask.cs-hidden[data-v-1dc203ad]{opacity:0;visibility:hidden;pointer-events:none;transition:opacity .2s,visibility 0s .2s}.chat-header[data-v-1dc203ad]{background:var(--cs-primary);color:#fff;cursor:pointer;-webkit-user-select:none;user-select:none;justify-content:space-between;align-items:center;padding:12px 16px;display:flex}.header-left[data-v-1dc203ad]{align-items:center;gap:8px;display:flex}.header-icon[data-v-1dc203ad]{font-size:20px}.header-title[data-v-1dc203ad]{font-size:15px;font-weight:600}.status-dot[data-v-1dc203ad]{background:#4ade80;border-radius:50%;width:8px;height:8px}.status-dot.pulse[data-v-1dc203ad]{animation:1.5s infinite pulse-1dc203ad}@keyframes pulse-1dc203ad{0%,to{opacity:1}50%{opacity:.4}}.header-actions[data-v-1dc203ad]{gap:4px;display:flex}.action-btn[data-v-1dc203ad]{color:#fff;cursor:pointer;background:#ffffff26;border:none;border-radius:6px;justify-content:center;align-items:center;width:28px;height:28px;transition:background .2s;display:flex}.action-btn[data-v-1dc203ad]:hover:not(:disabled){background:#ffffff4d}.action-btn[data-v-1dc203ad]:disabled{opacity:.4;cursor:not-allowed}.action-btn.debug-btn[data-v-1dc203ad]{position:relative}.action-btn.debug-btn.active[data-v-1dc203ad]{background:#ffffff73}.debug-badge[data-v-1dc203ad]{color:#fff;background:#ef4444;border-radius:8px;min-width:16px;height:16px;padding:0 4px;font-size:10px;font-weight:600;line-height:16px;position:absolute;top:-2px;right:-2px}.chat-body[data-v-1dc203ad]{overscroll-behavior:contain;flex:1;min-height:0;padding:16px;overflow-y:auto}.empty-state[data-v-1dc203ad]{color:#9ca3af;flex-direction:column;justify-content:center;align-items:center;height:200px;display:flex}.empty-icon[data-v-1dc203ad]{margin-bottom:12px;font-size:48px}.empty-state p[data-v-1dc203ad]{font-size:14px}.message-row[data-v-1dc203ad]{align-items:flex-start;gap:10px;margin-bottom:16px;display:flex}.message-row.user[data-v-1dc203ad]{flex-direction:row-reverse}.message-avatar[data-v-1dc203ad]{background:#f3f4f6;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:32px;height:32px;font-size:16px;display:flex}.message-row.user .message-avatar[data-v-1dc203ad]{background:#ecf5ef}.message-content[data-v-1dc203ad]{min-width:0;max-width:80%}.message-bubble[data-v-1dc203ad]{overflow-wrap:anywhere;word-break:break-word;white-space:pre-wrap;border-radius:12px;padding:9px 13px;font-size:13px;line-height:1.6}.message-row.assistant .message-bubble[data-v-1dc203ad]{color:#1f2937;white-space:normal;overflow-wrap:anywhere;background:#f3f4f6;border-bottom-left-radius:4px}.message-row.user .message-bubble[data-v-1dc203ad]{background:var(--cs-primary);color:#fff;border-bottom-right-radius:4px}.message-row.user .message-content[data-v-1dc203ad]{flex-direction:column;align-items:flex-end;display:flex}.message-time[data-v-1dc203ad]{color:#9ca3af;margin-top:4px;padding:0 4px;font-size:11px}.typing[data-v-1dc203ad]{gap:4px;padding:12px 16px;display:flex}.typing .dot[data-v-1dc203ad]{background:#9ca3af;border-radius:50%;width:8px;height:8px;animation:1.4s ease-in-out infinite bounce-1dc203ad}.typing .dot[data-v-1dc203ad]:nth-child(2){animation-delay:.2s}.typing .dot[data-v-1dc203ad]:nth-child(3){animation-delay:.4s}@keyframes bounce-1dc203ad{0%,80%,to{transform:translateY(0)}40%{transform:translateY(-6px)}}.typing-text[data-v-1dc203ad]{color:#9ca3af;font-size:13px}.reasoning-block[data-v-1dc203ad]{background:#f0f7f3;border:1px dashed #b8d4c5;border-radius:8px;margin-bottom:6px;overflow:hidden}.reasoning-header[data-v-1dc203ad]{cursor:pointer;-webkit-user-select:none;user-select:none;color:#2d5a47;align-items:center;gap:6px;padding:5px 10px;font-size:12px;display:flex}.reasoning-icon[data-v-1dc203ad]{font-size:13px}.reasoning-title[data-v-1dc203ad]{font-weight:600}.reasoning-toggle[data-v-1dc203ad]{margin-left:auto}.reasoning-body[data-v-1dc203ad]{color:#16402f;white-space:pre-wrap;word-break:break-word;border-top:1px dashed #b8d4c5;max-height:240px;padding:8px 10px;font-size:12px;line-height:1.6;overflow-y:auto}.steps-block[data-v-1dc203ad]{flex-direction:column;gap:4px;margin-bottom:6px;display:flex}.step-item[data-v-1dc203ad]{color:#0e7490;background:#ecfeff;border:1px solid #a5f3fc;border-radius:10px;flex-direction:column;align-self:flex-start;align-items:flex-start;gap:3px;max-width:100%;padding:2px 8px;font-size:11px;display:flex}.step-head[data-v-1dc203ad]{align-items:center;gap:5px;display:inline-flex}.step-icon[data-v-1dc203ad]{font-size:11px}.step-name[data-v-1dc203ad]{font-family:SF Mono,Monaco,Consolas,monospace}.step-count[data-v-1dc203ad]{color:#0891b2;font-size:10px;font-weight:600}.step-status.running[data-v-1dc203ad]{color:#0891b2}.step-children[data-v-1dc203ad]{background:#faf5ff;border-left:2px solid #c4b5fd;border-radius:0 8px 8px 0;flex-direction:column;gap:3px;margin-top:4px;padding:4px 8px 4px 10px;display:flex}.step-children-label[data-v-1dc203ad]{color:#7c3aed;letter-spacing:.3px;font-size:10px;font-weight:600}.step-child[data-v-1dc203ad]{color:#6d28d9;background:#ede9fe;border:1px solid #ddd6fe;border-radius:8px;align-items:center;gap:5px;padding:1px 7px;font-size:10px;display:inline-flex}.step-child .step-name[data-v-1dc203ad]{color:#6d28d9}.step-child .step-status.running[data-v-1dc203ad]{color:#8b5cf6}.stream-cursor[data-v-1dc203ad],.typing-cursor[data-v-1dc203ad]{vertical-align:text-bottom;background:var(--cs-primary);width:7px;height:14px;margin-left:2px;animation:1s steps(2,end) infinite blink-1dc203ad;display:inline-block}@keyframes blink-1dc203ad{0%,50%{opacity:1}51%,to{opacity:0}}.error-bar[data-v-1dc203ad]{color:#dc2626;background:#fef2f2;border-radius:8px;align-items:flex-start;gap:10px;margin-top:8px;padding:8px 12px;font-size:13px;display:flex}.error-text[data-v-1dc203ad]{word-break:break-word;overflow-wrap:anywhere;white-space:pre-wrap;flex:1;min-width:0;max-height:120px;line-height:1.5;overflow-y:auto}.error-bar .retry-btn[data-v-1dc203ad],.error-bar .undo-btn[data-v-1dc203ad]{flex-shrink:0;margin-top:1px}.retry-btn[data-v-1dc203ad]{color:#fff;cursor:pointer;background:#dc2626;border:none;border-radius:6px;flex-shrink:0;padding:3px 12px;font-size:12px;font-weight:600;transition:background .2s}.retry-btn[data-v-1dc203ad]:hover{background:#b91c1c}.chat-footer[data-v-1dc203ad]{background:#fafafa;border-top:1px solid #f3f4f6;align-items:flex-end;gap:8px;padding:12px 16px;display:flex}.chat-input[data-v-1dc203ad]{resize:none;overflow-wrap:anywhere;word-break:break-word;border:1px solid #e5e7eb;border-radius:8px;outline:none;flex:1;max-height:100px;padding:9px 12px;font-family:inherit;font-size:13px;line-height:1.5;transition:border-color .2s;overflow-y:auto}.chat-input[data-v-1dc203ad]:focus{border-color:var(--cs-primary);box-shadow:0 0 0 2px rgba(var(--cs-primary-rgb), .1)}.send-btn[data-v-1dc203ad]{background:var(--cs-primary);color:#fff;cursor:pointer;border:none;border-radius:8px;flex-shrink:0;justify-content:center;align-items:center;width:38px;height:38px;transition:opacity .2s,transform .1s;display:flex}.send-btn[data-v-1dc203ad]:hover:not(:disabled){opacity:.9;transform:scale(1.05)}.send-btn[data-v-1dc203ad]:active:not(:disabled){transform:scale(.95)}.send-btn[data-v-1dc203ad]:disabled{opacity:.4;cursor:not-allowed}.send-btn.stop-btn[data-v-1dc203ad]{background:#9ca3af}.send-btn.stop-btn[data-v-1dc203ad]:hover:not(:disabled){background:#6b7280;transform:none}.cap-badge[data-v-1dc203ad]{color:#6b7280;white-space:nowrap;-webkit-user-select:none;user-select:none;background:#f9fafb;border:1px solid #e5e7eb;border-radius:14px;flex-shrink:0;align-self:center;padding:4px 10px;font-size:11px}.msg-actions[data-v-1dc203ad]{opacity:0;gap:6px;margin-top:4px;transition:opacity .2s;display:flex}.message-row.assistant:hover .msg-actions[data-v-1dc203ad]{opacity:1}.msg-action-btn[data-v-1dc203ad]{color:#6b7280;cursor:pointer;background:#fff;border:1px solid #e5e7eb;border-radius:6px;padding:2px 8px;font-size:11px;transition:all .2s}.msg-action-btn[data-v-1dc203ad]:hover{border-color:var(--cs-primary);color:var(--cs-primary);background:#f0f7f3}.undo-btn[data-v-1dc203ad]{color:#92400e;cursor:pointer;background:#fffbeb;border:1px solid #f59e0b;border-radius:6px;margin-left:6px;padding:2px 10px;font-size:11px;transition:all .2s}.undo-btn[data-v-1dc203ad]:hover{background:#fde68a}.undo-foot-btn[data-v-1dc203ad]{color:#6b7280;cursor:pointer;background:#f9fafb;border:1px solid #e5e7eb;border-radius:14px;flex-shrink:0;align-self:center;padding:4px 10px;font-size:11px;transition:all .2s}.undo-foot-btn[data-v-1dc203ad]:hover{border-color:var(--cs-primary);color:var(--cs-primary);background:#f0f7f3}.approval-bar[data-v-1dc203ad]{background:#fffbeb;border:1px solid #f59e0b;border-radius:10px;margin:8px 12px;padding:10px 12px}.approval-head[data-v-1dc203ad]{color:#92400e;align-items:center;gap:6px;font-size:13px;display:flex}.approval-icon[data-v-1dc203ad]{font-size:15px}.approval-title code[data-v-1dc203ad]{color:#78350f;background:#fef3c7;border-radius:4px;padding:1px 6px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.approval-toggle[data-v-1dc203ad]{color:#92400e;cursor:pointer;background:0 0;border:none;border-radius:4px;margin-left:auto;padding:2px 8px;font-size:12px}.approval-toggle[data-v-1dc203ad]:hover{background:#fef3c7}.approval-args[data-v-1dc203ad]{color:#57534e;white-space:pre-wrap;word-break:break-all;background:#fff;border:1px solid #fde68a;border-radius:6px;max-height:140px;margin:8px 0;padding:8px;font-size:12px;overflow:auto}.approval-actions[data-v-1dc203ad]{justify-content:flex-end;gap:8px;display:flex}.approval-actions button[data-v-1dc203ad]{cursor:pointer;border:none;border-radius:6px;padding:5px 16px;font-size:13px;transition:opacity .2s}.approval-deny[data-v-1dc203ad]{color:#6b7280;background:#f3f4f6;border:1px solid #e5e7eb}.approval-deny[data-v-1dc203ad]:hover{color:#374151;background:#e5e7eb}.approval-allow[data-v-1dc203ad]{background:var(--cs-primary);color:#fff}.approval-allow[data-v-1dc203ad]:hover{opacity:.9}.approval-question[data-v-1dc203ad]{color:#57534e;white-space:pre-wrap;background:#fff;border:1px solid #fde68a;border-radius:6px;margin:8px 0;padding:8px 10px;font-size:13px;line-height:1.5}.approval-context[data-v-1dc203ad]{color:#92400e;margin:4px 0 8px;font-size:12px;line-height:1.5}.approval-recommend[data-v-1dc203ad]{color:#1f4d3a;margin:4px 0 8px;font-size:12px}.approval-opt[data-v-1dc203ad]{border:1px solid var(--cs-primary);color:var(--cs-primary);cursor:pointer;background:#fff;border-radius:6px;padding:5px 14px;font-size:13px;transition:all .2s}.approval-opt[data-v-1dc203ad]:hover{background:var(--cs-primary);color:#fff}.conflict-bar[data-v-1dc203ad]{background:#fef2f2;border:1px solid #dc2626;border-radius:10px;margin:8px 12px;padding:10px 12px}.conflict-head[data-v-1dc203ad]{color:#991b1b;align-items:center;gap:6px;font-size:13px;display:flex}.conflict-icon[data-v-1dc203ad]{font-size:15px}.conflict-title code[data-v-1dc203ad]{color:#7f1d1d;background:#fee2e2;border-radius:4px;padding:1px 6px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.conflict-detail[data-v-1dc203ad]{color:#7f1d1d;margin:6px 0 8px;font-size:12px;line-height:1.5}.conflict-actions[data-v-1dc203ad]{flex-wrap:wrap;justify-content:flex-end;gap:8px;display:flex}.conflict-actions button[data-v-1dc203ad]{cursor:pointer;border:none;border-radius:6px;padding:5px 14px;font-size:13px;transition:opacity .2s}.conflict-keep[data-v-1dc203ad]{color:#6b7280;background:#f3f4f6;border:1px solid #e5e7eb}.conflict-keep[data-v-1dc203ad]:hover{color:#374151;background:#e5e7eb}.conflict-overwrite[data-v-1dc203ad]{color:#fff;background:#dc2626}.conflict-overwrite[data-v-1dc203ad]:hover{opacity:.9}.conflict-restore[data-v-1dc203ad]{color:#dc2626;background:#fff;border:1px solid #dc2626}.conflict-restore[data-v-1dc203ad]:hover{background:#fee2e2}.conflict-toggle[data-v-1dc203ad]{color:#991b1b;cursor:pointer;background:0 0;border:none;border-radius:4px;margin:2px 0 6px;padding:2px 8px;font-size:12px}.conflict-toggle[data-v-1dc203ad]:hover{background:#fee2e2}.conflict-diff[data-v-1dc203ad]{gap:8px;margin:4px 0 8px;display:flex}.conflict-diff-col[data-v-1dc203ad]{flex:1;min-width:0}.conflict-diff-label[data-v-1dc203ad]{color:#7f1d1d;margin-bottom:2px;font-size:11px}.conflict-diff-pre[data-v-1dc203ad]{color:#57534e;white-space:pre-wrap;word-break:break-all;background:#fff;border:1px solid #fecaca;border-radius:6px;max-height:140px;margin:0;padding:6px;font-size:11px;overflow:auto}
1
+ .code-preview-overlay[data-v-3d6e2a95]{z-index:9999;background:#00000080;justify-content:center;align-items:center;padding:20px;display:flex;position:fixed;inset:0}.code-preview-modal[data-v-3d6e2a95]{background:#fff;border-radius:12px;flex-direction:column;width:90%;max-width:900px;height:80vh;display:flex;overflow:hidden;box-shadow:0 20px 60px #0000004d}.preview-header[data-v-3d6e2a95]{color:#fff;background:#1f2937;align-items:center;gap:12px;padding:10px 16px;display:flex}.preview-title[data-v-3d6e2a95]{font-size:14px;font-weight:600}.preview-tabs[data-v-3d6e2a95]{gap:4px;margin-left:auto;display:flex}.preview-tabs button[data-v-3d6e2a95]{color:#fff;cursor:pointer;background:#ffffff1a;border:none;border-radius:6px;padding:4px 12px;font-size:13px}.preview-tabs button.active[data-v-3d6e2a95]{background:#667eea}.preview-tabs button[data-v-3d6e2a95]:disabled{opacity:.4;cursor:not-allowed}.preview-actions[data-v-3d6e2a95]{gap:4px;display:flex}.icon-btn[data-v-3d6e2a95]{color:#fff;cursor:pointer;background:#ffffff1a;border:none;border-radius:6px;justify-content:center;align-items:center;width:28px;height:28px;font-size:14px;display:flex}.icon-btn[data-v-3d6e2a95]:hover{background:#ffffff40}.preview-body[data-v-3d6e2a95]{background:#f9fafb;flex:1;overflow:hidden}.preview-iframe[data-v-3d6e2a95]{background:#fff;border:none;width:100%;height:100%}.preview-source[data-v-3d6e2a95]{color:#e5e7eb;white-space:pre-wrap;word-break:break-word;background:#1f2937;height:100%;margin:0;padding:16px;font-family:SF Mono,Monaco,Consolas,monospace;font-size:13px;line-height:1.5;overflow:auto}.message-md{overflow-wrap:anywhere;word-break:break-word;font-size:13px;line-height:1.6}.message-md p{margin:0 0 8px}.message-md p:last-child{margin-bottom:0}.message-md table{border-collapse:collapse;max-width:100%;margin:8px 0;display:block;overflow-x:auto}.message-md th,.message-md td{white-space:nowrap;border:1px solid #e5e7eb;padding:4px 8px;font-size:12px}.message-md th{background:#f9fafb}.message-md img{max-width:100%}.message-md ul,.message-md ol{margin:6px 0;padding-left:20px}.message-md li{margin:2px 0}.message-md h1,.message-md h2,.message-md h3{margin:10px 0 6px;font-weight:600}.message-md h1{font-size:18px}.message-md h2{font-size:16px}.message-md h3{font-size:15px}.message-md a{color:#667eea;text-decoration:underline}.message-md code:not(.hljs){color:#4338ca;background:#667eea1a;border-radius:4px;padding:1px 5px;font-family:SF Mono,Monaco,Consolas,monospace;font-size:13px}.message-md .code-block{background:#1f2937;border-radius:8px;margin:10px 0;padding:0;position:relative;overflow:hidden}.message-md .code-block code{color:#e5e7eb;background:0 0;padding:12px 14px;font-family:SF Mono,Monaco,Consolas,monospace;font-size:13px;line-height:1.5;display:block;overflow-x:auto}.message-md .code-toolbar{background:#00000040;border-bottom:1px solid #ffffff14;align-items:center;gap:8px;padding:6px 12px;display:flex}.message-md .code-lang{color:#9ca3af;text-transform:lowercase;font-family:SF Mono,Monaco,Consolas,monospace;font-size:11px}.message-md .code-action-btn{color:#e5e7eb;cursor:pointer;background:#ffffff1a;border:none;border-radius:4px;margin-left:auto;padding:3px 10px;font-size:12px;transition:background .2s}.message-md .code-action-btn:hover{background:#fff3}.message-md .code-action-btn.preview-btn{color:#fff;background:#667eea;margin-left:4px}.message-md .code-action-btn.preview-btn:hover{background:#5568d3}.message-md .hljs{color:#e5e7eb}.message-md .hljs-keyword{color:#c084fc}.message-md .hljs-string{color:#86efac}.message-md .hljs-comment{color:#6b7280;font-style:italic}.message-md .hljs-number{color:#fca5a5}.message-md .hljs-function .hljs-title,.message-md .hljs-title{color:#93c5fd}.message-md .hljs-tag{color:#fca5a5}.message-md .hljs-attr{color:#fcd34d}.message-md .hljs-built_in{color:#67e8f9}.debug-drawer[data-v-01f829a3]{z-index:9000;pointer-events:none;position:fixed;inset:0}.drawer-mask[data-v-01f829a3]{pointer-events:auto;background:#00000040;position:absolute;inset:0}.drawer-panel[data-v-01f829a3]{--cs-primary:#1f4d3a;--cs-primary-rgb:31, 77, 58;pointer-events:auto;z-index:2;background:#fff;flex-direction:column;width:520px;max-width:90vw;display:flex;position:absolute;top:0;bottom:0;right:0;box-shadow:-8px 0 32px #00000026}.drawer-mask[data-v-01f829a3]{z-index:1}.drawer-header[data-v-01f829a3]{color:#fff;background:linear-gradient(135deg,#1f2937,#111827);justify-content:space-between;align-items:center;padding:12px 16px;display:flex}.drawer-title[data-v-01f829a3]{font-size:15px;font-weight:600}.tab-group[data-v-01f829a3]{gap:4px;display:flex}.tab-btn[data-v-01f829a3]{color:#fff;cursor:pointer;background:#ffffff1f;border:none;border-radius:6px;padding:4px 12px;font-size:13px;transition:background .2s}.tab-btn[data-v-01f829a3]:hover{background:#ffffff38}.tab-btn.active[data-v-01f829a3]{background:#ffffff73;font-weight:600}.info-body[data-v-01f829a3]{padding:4px 0}.info-section[data-v-01f829a3]{margin-bottom:14px}.info-title[data-v-01f829a3]{color:#2d5a47;border-bottom:1px solid #f3f4f6;margin-bottom:6px;padding-bottom:4px;font-size:12px;font-weight:600}.info-item[data-v-01f829a3]{background:#f9fafb;border-radius:6px;margin-bottom:4px;padding:6px 8px}.info-name[data-v-01f829a3]{color:#1f2937;font-family:SF Mono,Monaco,Consolas,monospace;font-size:12px;font-weight:600}.info-desc[data-v-01f829a3]{color:#6b7280;margin-top:2px;font-size:11px;line-height:1.5}.info-desc.muted[data-v-01f829a3]{color:#9ca3af}.info-hint[data-v-01f829a3]{color:#9ca3af;margin-left:6px;font-size:10px;font-weight:400}.skill-toggle[data-v-01f829a3]{cursor:pointer;align-items:center;gap:4px;display:flex}.skill-toggle[data-v-01f829a3]:hover{color:var(--cs-primary,#1f4d3a)}.skill-arrow[data-v-01f829a3]{color:#9ca3af;font-size:8px;transition:transform .15s;display:inline-block}.skill-arrow.open[data-v-01f829a3]{transform:rotate(90deg)}.skill-content[data-v-01f829a3]{margin-top:6px}.skill-loading[data-v-01f829a3]{color:#6b7280;padding:6px 8px;font-size:11px}.skill-error[data-v-01f829a3]{color:#dc2626;padding:6px 8px;font-size:11px}.skill-pre[data-v-01f829a3]{color:#374151;white-space:pre-wrap;word-break:break-word;background:#f9fafb;border:1px solid #e5e7eb;border-radius:6px;max-height:320px;margin:0;padding:8px 10px;font-family:SF Mono,Monaco,Consolas,monospace;font-size:11px;line-height:1.6;overflow:auto}.src-tag[data-v-01f829a3]{vertical-align:middle;border-radius:8px;margin-left:6px;padding:0 6px;font-size:10px;font-weight:600;display:inline-block}.src-tag.builtin[data-v-01f829a3]{color:#6b7280;background:#f3f4f6}.src-tag.mcp[data-v-01f829a3]{color:#7c3aed;background:#f3e8ff}.src-tag.user[data-v-01f829a3]{color:#2563eb;background:#dbeafe}.info-todo[data-v-01f829a3]{color:#374151;background:#f9fafb;border-radius:6px;align-items:center;gap:6px;margin-bottom:4px;padding:4px 8px;font-size:12px;display:flex}.todo-tag[data-v-01f829a3]{color:#fff;border-radius:8px;flex-shrink:0;padding:1px 6px;font-size:10px}.info-pre[data-v-01f829a3]{color:#4b5563;white-space:pre-wrap;word-break:break-word;background:#f9fafb;border-radius:6px;max-height:200px;margin:0;padding:8px;font-family:SF Mono,Monaco,Consolas,monospace;font-size:11px;overflow-y:auto}.header-actions[data-v-01f829a3]{gap:4px;display:flex}.hd-btn[data-v-01f829a3]{color:#fff;cursor:pointer;background:#ffffff1f;border:none;border-radius:6px;width:28px;height:28px}.hd-btn[data-v-01f829a3]:hover{background:#ffffff40}.drawer-filters[data-v-01f829a3]{background:#fafafa;border-bottom:1px solid #f3f4f6;flex-wrap:wrap;gap:6px;padding:10px 16px;display:flex}.filter-chip[data-v-01f829a3]{color:#6b7280;cursor:pointer;background:#fff;border:1px solid #e5e7eb;border-radius:14px;align-items:center;gap:4px;padding:4px 10px;font-size:12px;transition:all .2s;display:inline-flex}.filter-chip[data-v-01f829a3]:hover{border-color:var(--chip-color,var(--cs-primary))}.filter-chip.active[data-v-01f829a3]{background:var(--chip-color,var(--cs-primary));border-color:var(--chip-color,var(--cs-primary));color:#fff}.chip-count[data-v-01f829a3]{background:#00000014;border-radius:8px;padding:0 5px;font-size:11px}.filter-chip.active .chip-count[data-v-01f829a3]{background:#ffffff40}.drawer-body[data-v-01f829a3]{flex:1;padding:12px;overflow-y:auto}.empty[data-v-01f829a3]{text-align:center;color:#9ca3af;padding:40px 20px;font-size:13px}.log-item[data-v-01f829a3]{background:#fff;border:1px solid #e5e7eb;border-radius:8px;margin-bottom:10px;overflow:hidden}.log-head[data-v-01f829a3]{background:#f9fafb;align-items:center;gap:8px;padding:8px 10px;display:flex}.log-type[data-v-01f829a3]{color:#fff;white-space:nowrap;border-radius:4px;padding:2px 8px;font-size:11px;font-weight:600}.log-source[data-v-01f829a3]{color:#7c3aed;white-space:nowrap;background:#f3e8ff;border-radius:4px;padding:2px 8px;font-size:10px;font-weight:600}.log-time[data-v-01f829a3]{color:#9ca3af;font-family:SF Mono,Monaco,Consolas,monospace;font-size:11px}.log-body[data-v-01f829a3]{padding:10px 12px}.log-footer[data-v-01f829a3]{border-top:1px dashed #f3f4f6;gap:8px;padding:6px 12px;display:flex}.raw-toggle[data-v-01f829a3]{color:var(--cs-primary);cursor:pointer;background:0 0;border:none;padding:2px 4px;font-size:11px}.raw-toggle[data-v-01f829a3]:hover{text-decoration:underline}.log-raw[data-v-01f829a3]{color:#e5e7eb;white-space:pre-wrap;word-break:break-word;background:#1f2937;border-top:1px solid #f3f4f6;max-height:280px;margin:0;padding:10px 12px;font-family:SF Mono,Monaco,Consolas,monospace;font-size:11px;line-height:1.5;overflow:auto}.kv-grid[data-v-01f829a3]{grid-template-columns:1fr 1fr;gap:6px;margin-bottom:8px;display:grid}.kv[data-v-01f829a3]{background:#f9fafb;border-radius:6px;flex-direction:column;padding:6px 8px;display:flex}.kv .k[data-v-01f829a3]{color:#9ca3af;text-transform:uppercase;font-size:10px}.kv .v[data-v-01f829a3]{color:#1f2937;font-family:SF Mono,Monaco,Consolas,monospace;font-size:13px;font-weight:600}.section-label[data-v-01f829a3]{color:#6b7280;margin:10px 0 4px;font-size:11px;font-weight:600}.chip-row[data-v-01f829a3]{flex-wrap:wrap;gap:4px;display:flex}.tool-chip[data-v-01f829a3]{color:#2d5a47;background:#ecf5ef;border-radius:10px;padding:2px 8px;font-family:SF Mono,Monaco,Consolas,monospace;font-size:11px}.msg-list[data-v-01f829a3]{flex-direction:column;gap:4px;display:flex}.msg-row[data-v-01f829a3]{background:#f9fafb;border-radius:6px;align-items:flex-start;gap:6px;padding:5px 8px;display:flex}.msg-role[data-v-01f829a3]{color:#fff;border-radius:3px;flex-shrink:0;margin-top:1px;padding:2px 6px;font-size:9px;font-weight:700}.msg-text[data-v-01f829a3]{color:#374151;white-space:pre-wrap;word-break:break-word;flex:1;font-size:12px;line-height:1.5}.msg-tool-hint[data-v-01f829a3]{color:#7c3aed;flex-shrink:0;font-size:10px}.badge-row[data-v-01f829a3]{flex-wrap:wrap;gap:6px;margin-bottom:8px;display:flex}.badge[data-v-01f829a3]{color:#2d5a47;background:#dbeee4;border-radius:10px;padding:2px 8px;font-size:11px;font-weight:600}.badge.muted[data-v-01f829a3]{color:#6b7280;background:#f3f4f6}.badge.warn[data-v-01f829a3]{color:#92400e;background:#fef3c7}.resp-content[data-v-01f829a3]{color:#1f2937;white-space:pre-wrap;word-break:break-word;background:#fffbeb;border-left:3px solid #d97706;border-radius:4px;margin-bottom:8px;padding:6px 10px;font-size:12px}.tc-list[data-v-01f829a3]{flex-direction:column;gap:6px;display:flex}.tc-card[data-v-01f829a3]{border:1px solid #e5e7eb;border-radius:6px;overflow:hidden}.tc-card.inline[data-v-01f829a3]{margin-top:4px}.tc-name[data-v-01f829a3]{color:#2d5a47;background:#ecf5ef;padding:5px 8px;font-size:12px;font-weight:600}.tc-args[data-v-01f829a3]{color:#e5e7eb;white-space:pre-wrap;word-break:break-word;background:#1f2937;max-height:200px;margin:0;padding:8px;font-family:SF Mono,Monaco,Consolas,monospace;font-size:11px;line-height:1.5;overflow-y:auto}.usage-row[data-v-01f829a3]{flex-wrap:wrap;gap:6px;margin-top:8px;display:flex}.usage[data-v-01f829a3]{color:#047857;background:#ecfdf5;border-radius:10px;padding:2px 8px;font-family:SF Mono,Monaco,Consolas,monospace;font-size:11px}.err-box[data-v-01f829a3]{color:#991b1b;white-space:pre-wrap;word-break:break-word;background:#fef2f2;border:1px solid #fecaca;border-radius:6px;padding:8px 10px;font-size:12px}.msg-detail[data-v-01f829a3]{flex-direction:column;flex:1;gap:3px;min-width:0;display:flex}.tc-inline[data-v-01f829a3]{background:#f0f7f3;border:1px solid #c3dcd0;border-radius:4px;align-items:baseline;gap:4px;padding:2px 6px;font-size:11px;display:flex}.tc-inline-name[data-v-01f829a3]{color:#2d5a47;white-space:nowrap;font-weight:600}.tc-inline-args[data-v-01f829a3]{color:#16402f;word-break:break-all;font-family:SF Mono,Monaco,Consolas,monospace;font-size:10px}.tc-id[data-v-01f829a3]{color:#9ca3af;font-family:SF Mono,Monaco,Consolas,monospace;font-size:10px}.view-toggle[data-v-01f829a3]{color:#2d5a47;cursor:pointer;background:#ecf5ef;border:1px solid #b8d4c5;border-radius:10px;margin-left:auto;padding:2px 8px;font-size:11px}.view-toggle[data-v-01f829a3]:hover{background:#dbeee4}.drawer-enter-active[data-v-01f829a3],.drawer-leave-active[data-v-01f829a3]{transition:opacity .25s}.drawer-enter-active .drawer-panel[data-v-01f829a3],.drawer-leave-active .drawer-panel[data-v-01f829a3]{transition:transform .25s}.drawer-enter-from[data-v-01f829a3],.drawer-leave-to[data-v-01f829a3]{opacity:0}.drawer-enter-from .drawer-panel[data-v-01f829a3],.drawer-leave-to .drawer-panel[data-v-01f829a3]{transform:translate(100%)}.flow-section[data-v-01f829a3]{margin-bottom:14px}.flow-section-title[data-v-01f829a3]{color:#6b7280;margin-bottom:6px;padding-left:2px;font-size:11px;font-weight:600}.flow-round[data-v-01f829a3]{border:1px solid #e5e7eb;border-radius:8px;margin-bottom:12px;overflow:hidden}.flow-round-head[data-v-01f829a3]{color:#fff;background:var(--cs-primary);padding:5px 10px;font-size:12px;font-weight:600}.flow-round-body[data-v-01f829a3]{flex-direction:column;gap:3px;padding:6px;display:flex}.flow-node[data-v-01f829a3]{border-left:3px solid var(--cs-primary);background:#f9fafb;border-radius:6px;align-items:center;gap:6px;padding:5px 8px;font-size:12px;display:flex}.flow-node.llm_request[data-v-01f829a3]{border-left-color:#059669}.flow-node.llm_response[data-v-01f829a3]{border-left-color:#d97706}.flow-node.tool_call[data-v-01f829a3]{border-left-color:#7c3aed}.flow-node.tool_result[data-v-01f829a3]{border-left-color:#2563eb}.flow-node.error[data-v-01f829a3]{background:#fef2f2;border-left-color:#dc2626}.flow-node.middleware[data-v-01f829a3]{border-left-color:#0891b2}.flow-ico[data-v-01f829a3]{flex-shrink:0;font-size:13px}.flow-label[data-v-01f829a3]{color:#374151;white-space:nowrap;flex-shrink:0;font-weight:600}.flow-detail[data-v-01f829a3]{color:#6b7280;text-overflow:ellipsis;white-space:nowrap;flex:1;font-family:SF Mono,Monaco,Consolas,monospace;font-size:11px;overflow:hidden}.flow-time[data-v-01f829a3]{color:#9ca3af;flex-shrink:0;font-family:SF Mono,Monaco,Consolas,monospace;font-size:10px}.skill-mask[data-v-c6a22ea5]{z-index:10002;background:#00000059;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.skill-panel[data-v-c6a22ea5]{color:#1f2937;background:#fff;border-radius:12px;width:480px;max-width:92vw;max-height:86vh;padding:18px 20px;font-size:13px;overflow:auto;box-shadow:0 12px 40px #0003}.skill-header[data-v-c6a22ea5]{justify-content:space-between;align-items:center;margin-bottom:14px;display:flex}.skill-title[data-v-c6a22ea5]{font-size:16px;font-weight:600}.skill-close[data-v-c6a22ea5]{cursor:pointer;color:#6b7280;background:0 0;border:none;border-radius:6px;padding:4px 8px;font-size:16px}.skill-close[data-v-c6a22ea5]:hover{background:#f3f4f6}.skill-section[data-v-c6a22ea5]{background:#f9fafb;border-radius:8px;margin-bottom:16px;padding:12px}.section-title[data-v-c6a22ea5]{color:#374151;justify-content:space-between;align-items:center;margin-bottom:10px;font-size:13px;font-weight:600;display:flex}.field[data-v-c6a22ea5]{flex-direction:column;gap:4px;margin-bottom:10px;display:flex}.field-label[data-v-c6a22ea5]{color:#6b7280;font-size:12px}.field-input[data-v-c6a22ea5]{border:1px solid #d1d5db;border-radius:6px;padding:6px 10px;font-family:inherit;font-size:13px}.field-input[data-v-c6a22ea5]:focus{border-color:#6366f1;outline:none;box-shadow:0 0 0 2px #6366f126}.field-input[data-v-c6a22ea5]:disabled{color:#9ca3af;cursor:not-allowed;background:#f3f4f6}textarea.field-input[data-v-c6a22ea5]{resize:vertical;font-family:ui-monospace,monospace}.skill-error[data-v-c6a22ea5]{color:#dc2626;margin-bottom:8px;font-size:12px}.btn[data-v-c6a22ea5]{cursor:pointer;border:none;border-radius:6px;padding:6px 14px;font-size:13px}.btn-primary[data-v-c6a22ea5]{color:#fff;background:#4338ca}.btn-primary[data-v-c6a22ea5]:hover{background:#3730a3}.btn-ghost[data-v-c6a22ea5]{color:#6b7280;background:0 0;border:1px solid #e5e7eb}.btn-ghost[data-v-c6a22ea5]:hover{background:#f3f4f6}.btn-cancel[data-v-c6a22ea5]{margin-left:8px;padding:2px 8px;font-size:11px}.btn-edit[data-v-c6a22ea5]{color:#4338ca;border-color:#c7d2fe;padding:3px 10px;font-size:12px}.btn-edit[data-v-c6a22ea5]:hover{background:#eef2ff}.btn-del[data-v-c6a22ea5]{color:#dc2626;border-color:#fecaca;padding:3px 10px;font-size:12px}.btn-del[data-v-c6a22ea5]:hover{background:#fef2f2}.empty-hint[data-v-c6a22ea5]{color:#9ca3af;font-size:12px}.skill-list[data-v-c6a22ea5]{margin:0;padding:0;list-style:none}.skill-item[data-v-c6a22ea5]{border-bottom:1px dashed #e5e7eb;justify-content:space-between;align-items:center;padding:6px 0;display:flex}.skill-item[data-v-c6a22ea5]:last-child{border-bottom:none}.skill-name[data-v-c6a22ea5]{color:#4338ca;font-family:ui-monospace,monospace;font-size:12px}.skill-name.active[data-v-c6a22ea5]{color:#3730a3;font-weight:600}.skill-actions[data-v-c6a22ea5]{gap:6px;display:flex}.skill-hint[data-v-c6a22ea5]{color:#6b7280;background:#eef2ff;border-radius:6px;padding:10px 12px;font-size:12px;line-height:1.6}.skill-hint code[data-v-c6a22ea5]{color:#4338ca;background:#e0e7ff;border-radius:3px;padding:1px 5px;font-size:11px}.cs-skill-fade-enter-active[data-v-c6a22ea5],.cs-skill-fade-leave-active[data-v-c6a22ea5]{transition:opacity .2s}.cs-skill-fade-enter-from[data-v-c6a22ea5],.cs-skill-fade-leave-to[data-v-c6a22ea5]{opacity:0}.chat-mask[data-v-d3eca61c]{z-index:9998;background:#00000073;animation:.28s cs-mask-in-d3eca61c;position:fixed;inset:0}@keyframes cs-mask-in-d3eca61c{0%{opacity:0}to{opacity:1}}.chat-dialog.drawer[data-v-d3eca61c]{z-index:9999;border-radius:0;width:420px;max-width:92vw;height:100vh;animation:.3s cubic-bezier(.16,1,.3,1) cs-drawer-slide-in-d3eca61c;position:fixed;top:0;bottom:0;right:0}@keyframes cs-drawer-slide-in-d3eca61c{0%{transform:translate(100%)}to{transform:translate(0)}}@media (prefers-reduced-motion:reduce){.chat-mask[data-v-d3eca61c],.chat-dialog.drawer[data-v-d3eca61c]{animation:none}}.chat-dialog[data-v-d3eca61c]{--cs-primary:#1f4d3a;--cs-primary-rgb:31, 77, 58;--cs-bg:#fff;--cs-bubble-ai:#f3f4f6;--cs-radius:12px;border-radius:var(--cs-radius);background:var(--cs-bg);flex-direction:column;width:100%;height:100%;transition:all .3s;animation:.28s cubic-bezier(.16,1,.3,1) cs-drawer-in-d3eca61c;display:flex;overflow:hidden;box-shadow:0 8px 32px #0000001f,0 2px 8px #00000014}@keyframes cs-drawer-in-d3eca61c{0%{opacity:0;transform:translate(32px)}to{opacity:1;transform:translate(0)}}@media (prefers-reduced-motion:reduce){.chat-dialog[data-v-d3eca61c]{animation:none}}.chat-dialog.collapsed[data-v-d3eca61c]{height:52px}.cs-slide-enter-active[data-v-d3eca61c],.cs-slide-leave-active[data-v-d3eca61c]{transition:opacity .22s,transform .22s}.cs-slide-enter-from[data-v-d3eca61c],.cs-slide-leave-to[data-v-d3eca61c]{opacity:0;transform:translateY(-6px)}.chat-dialog.cs-leaving[data-v-d3eca61c]{opacity:0;pointer-events:none;transform:scale(.96)translateY(8px)}.chat-dialog.drawer.cs-leaving[data-v-d3eca61c]{transform:translate(100%)}.chat-mask.cs-leaving[data-v-d3eca61c]{opacity:0}.chat-dialog.cs-hidden[data-v-d3eca61c],.chat-mask.cs-hidden[data-v-d3eca61c]{opacity:0;visibility:hidden;pointer-events:none;transition:opacity .2s,visibility 0s .2s}.chat-header[data-v-d3eca61c]{background:var(--cs-primary);color:#fff;cursor:pointer;-webkit-user-select:none;user-select:none;flex-shrink:0;justify-content:space-between;align-items:center;padding:12px 16px;display:flex}.header-left[data-v-d3eca61c]{align-items:center;gap:8px;display:flex}.header-icon[data-v-d3eca61c]{font-size:20px}.header-title[data-v-d3eca61c]{font-size:15px;font-weight:600}.status-dot[data-v-d3eca61c]{background:#4ade80;border-radius:50%;width:8px;height:8px}.status-dot.pulse[data-v-d3eca61c]{animation:1.5s infinite pulse-d3eca61c}@keyframes pulse-d3eca61c{0%,to{opacity:1}50%{opacity:.4}}.header-actions[data-v-d3eca61c]{gap:4px;display:flex}.action-btn[data-v-d3eca61c]{color:#fff;cursor:pointer;background:#ffffff26;border:none;border-radius:6px;justify-content:center;align-items:center;width:28px;height:28px;transition:background .2s;display:flex}.action-btn[data-v-d3eca61c]:hover:not(:disabled){background:#ffffff4d}.action-btn[data-v-d3eca61c]:disabled{opacity:.4;cursor:not-allowed}.action-btn.debug-btn[data-v-d3eca61c]{position:relative}.action-btn.debug-btn.active[data-v-d3eca61c]{background:#ffffff73}.debug-badge[data-v-d3eca61c]{color:#fff;background:#ef4444;border-radius:8px;min-width:16px;height:16px;padding:0 4px;font-size:10px;font-weight:600;line-height:16px;position:absolute;top:-2px;right:-2px}.chat-body[data-v-d3eca61c]{overscroll-behavior:contain;flex:1;min-height:0;padding:16px;overflow-y:auto}.empty-state[data-v-d3eca61c]{color:#9ca3af;flex-direction:column;justify-content:center;align-items:center;height:200px;display:flex}.empty-icon[data-v-d3eca61c]{margin-bottom:12px;font-size:48px}.empty-state p[data-v-d3eca61c]{font-size:14px}.message-row[data-v-d3eca61c]{align-items:flex-start;gap:10px;margin-bottom:16px;display:flex}.message-row.user[data-v-d3eca61c]{flex-direction:row-reverse}.message-avatar[data-v-d3eca61c]{background:#f3f4f6;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:32px;height:32px;font-size:16px;display:flex}.message-row.user .message-avatar[data-v-d3eca61c]{background:#ecf5ef}.message-content[data-v-d3eca61c]{min-width:0;max-width:80%}.message-bubble[data-v-d3eca61c]{overflow-wrap:anywhere;word-break:break-word;white-space:pre-wrap;border-radius:12px;padding:9px 13px;font-size:13px;line-height:1.6}.message-row.assistant .message-bubble[data-v-d3eca61c]{color:#1f2937;white-space:normal;overflow-wrap:anywhere;background:#f3f4f6;border-bottom-left-radius:4px}.message-row.user .message-bubble[data-v-d3eca61c]{background:var(--cs-primary);color:#fff;border-bottom-right-radius:4px}.message-row.user .message-content[data-v-d3eca61c]{flex-direction:column;align-items:flex-end;display:flex}.message-time[data-v-d3eca61c]{color:#9ca3af;margin-top:4px;padding:0 4px;font-size:11px}.typing[data-v-d3eca61c]{gap:4px;padding:12px 16px;display:flex}.typing .dot[data-v-d3eca61c]{background:#9ca3af;border-radius:50%;width:8px;height:8px;animation:1.4s ease-in-out infinite bounce-d3eca61c}.typing .dot[data-v-d3eca61c]:nth-child(2){animation-delay:.2s}.typing .dot[data-v-d3eca61c]:nth-child(3){animation-delay:.4s}@keyframes bounce-d3eca61c{0%,80%,to{transform:translateY(0)}40%{transform:translateY(-6px)}}.typing-text[data-v-d3eca61c]{color:#9ca3af;font-size:13px}.reasoning-block[data-v-d3eca61c]{background:#f0f7f3;border:1px dashed #b8d4c5;border-radius:8px;margin-bottom:6px;overflow:hidden}.reasoning-header[data-v-d3eca61c]{cursor:pointer;-webkit-user-select:none;user-select:none;color:#2d5a47;align-items:center;gap:6px;padding:5px 10px;font-size:12px;display:flex}.reasoning-icon[data-v-d3eca61c]{font-size:13px}.reasoning-title[data-v-d3eca61c]{font-weight:600}.reasoning-toggle[data-v-d3eca61c]{margin-left:auto}.reasoning-body[data-v-d3eca61c]{color:#16402f;white-space:pre-wrap;word-break:break-word;border-top:1px dashed #b8d4c5;max-height:240px;padding:8px 10px;font-size:12px;line-height:1.6;overflow-y:auto}.steps-block[data-v-d3eca61c]{flex-direction:column;gap:4px;margin-bottom:6px;display:flex}.step-item[data-v-d3eca61c]{color:#0e7490;background:#ecfeff;border:1px solid #a5f3fc;border-radius:10px;flex-direction:column;align-self:flex-start;align-items:flex-start;gap:3px;max-width:100%;padding:2px 8px;font-size:11px;display:flex}.step-head[data-v-d3eca61c]{align-items:center;gap:5px;display:inline-flex}.step-icon[data-v-d3eca61c]{font-size:11px}.step-name[data-v-d3eca61c]{font-family:SF Mono,Monaco,Consolas,monospace}.step-count[data-v-d3eca61c]{color:#0891b2;font-size:10px;font-weight:600}.step-status.running[data-v-d3eca61c]{color:#0891b2}.step-children[data-v-d3eca61c]{background:#faf5ff;border-left:2px solid #c4b5fd;border-radius:0 8px 8px 0;flex-direction:column;gap:3px;margin-top:4px;padding:4px 8px 4px 10px;display:flex}.step-children-label[data-v-d3eca61c]{color:#7c3aed;letter-spacing:.3px;font-size:10px;font-weight:600}.step-child[data-v-d3eca61c]{color:#6d28d9;background:#ede9fe;border:1px solid #ddd6fe;border-radius:8px;align-items:center;gap:5px;padding:1px 7px;font-size:10px;display:inline-flex}.step-child .step-name[data-v-d3eca61c]{color:#6d28d9}.step-child .step-status.running[data-v-d3eca61c]{color:#8b5cf6}.stream-cursor[data-v-d3eca61c],.typing-cursor[data-v-d3eca61c]{vertical-align:text-bottom;background:var(--cs-primary);width:7px;height:14px;margin-left:2px;animation:1s steps(2,end) infinite blink-d3eca61c;display:inline-block}@keyframes blink-d3eca61c{0%,50%{opacity:1}51%,to{opacity:0}}.error-bar[data-v-d3eca61c]{color:#dc2626;background:#fef2f2;border-radius:8px;align-items:flex-start;gap:10px;margin-top:8px;padding:8px 12px;font-size:13px;display:flex}.error-text[data-v-d3eca61c]{word-break:break-word;overflow-wrap:anywhere;white-space:pre-wrap;flex:1;min-width:0;max-height:120px;line-height:1.5;overflow-y:auto}.error-bar .retry-btn[data-v-d3eca61c],.error-bar .undo-btn[data-v-d3eca61c]{flex-shrink:0;margin-top:1px}.retry-btn[data-v-d3eca61c]{color:#fff;cursor:pointer;background:#dc2626;border:none;border-radius:6px;flex-shrink:0;padding:3px 12px;font-size:12px;font-weight:600;transition:background .2s}.retry-btn[data-v-d3eca61c]:hover{background:#b91c1c}.chat-footer[data-v-d3eca61c]{padding:12px 16px;padding-bottom:calc(12px + env(safe-area-inset-bottom,0px));background:#fafafa;border-top:1px solid #f3f4f6;flex-shrink:0;align-items:flex-end;gap:8px;display:flex}.chat-input[data-v-d3eca61c]{resize:vertical;overflow-wrap:anywhere;word-break:break-word;border:1px solid #e5e7eb;border-radius:8px;outline:none;flex:1;min-height:38px;max-height:50vh;padding:9px 12px;font-family:inherit;font-size:13px;line-height:1.5;transition:border-color .2s;overflow-y:auto}.chat-input[data-v-d3eca61c]:focus{border-color:var(--cs-primary);box-shadow:0 0 0 2px rgba(var(--cs-primary-rgb), .1)}.send-btn[data-v-d3eca61c]{background:var(--cs-primary);color:#fff;cursor:pointer;border:none;border-radius:8px;flex-shrink:0;justify-content:center;align-items:center;width:38px;height:38px;transition:opacity .2s,transform .1s;display:flex}.send-btn[data-v-d3eca61c]:hover:not(:disabled){opacity:.9;transform:scale(1.05)}.send-btn[data-v-d3eca61c]:active:not(:disabled){transform:scale(.95)}.send-btn[data-v-d3eca61c]:disabled{opacity:.4;cursor:not-allowed}.send-btn.stop-btn[data-v-d3eca61c]{background:#9ca3af}.send-btn.stop-btn[data-v-d3eca61c]:hover:not(:disabled){background:#6b7280;transform:none}.cap-badge[data-v-d3eca61c]{color:#6b7280;white-space:nowrap;-webkit-user-select:none;user-select:none;background:#f9fafb;border:1px solid #e5e7eb;border-radius:14px;flex-shrink:0;align-self:center;padding:4px 10px;font-size:11px}.msg-actions[data-v-d3eca61c]{opacity:0;gap:6px;margin-top:4px;transition:opacity .2s;display:flex}.message-row.assistant:hover .msg-actions[data-v-d3eca61c]{opacity:1}.msg-action-btn[data-v-d3eca61c]{color:#6b7280;cursor:pointer;background:#fff;border:1px solid #e5e7eb;border-radius:6px;padding:2px 8px;font-size:11px;transition:all .2s}.msg-action-btn[data-v-d3eca61c]:hover{border-color:var(--cs-primary);color:var(--cs-primary);background:#f0f7f3}.undo-btn[data-v-d3eca61c]{color:#92400e;cursor:pointer;background:#fffbeb;border:1px solid #f59e0b;border-radius:6px;margin-left:6px;padding:2px 10px;font-size:11px;transition:all .2s}.undo-btn[data-v-d3eca61c]:hover{background:#fde68a}.undo-foot-btn[data-v-d3eca61c]{color:#6b7280;cursor:pointer;background:#f9fafb;border:1px solid #e5e7eb;border-radius:14px;flex-shrink:0;align-self:center;padding:4px 10px;font-size:11px;transition:all .2s}.undo-foot-btn[data-v-d3eca61c]:hover{border-color:var(--cs-primary);color:var(--cs-primary);background:#f0f7f3}.approval-bar[data-v-d3eca61c]{background:#fffbeb;border:1px solid #f59e0b;border-radius:10px;margin:8px 12px;padding:10px 12px}.approval-head[data-v-d3eca61c]{color:#92400e;align-items:center;gap:6px;font-size:13px;display:flex}.approval-icon[data-v-d3eca61c]{font-size:15px}.approval-title code[data-v-d3eca61c]{color:#78350f;background:#fef3c7;border-radius:4px;padding:1px 6px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.approval-toggle[data-v-d3eca61c]{color:#92400e;cursor:pointer;background:0 0;border:none;border-radius:4px;margin-left:auto;padding:2px 8px;font-size:12px}.approval-toggle[data-v-d3eca61c]:hover{background:#fef3c7}.approval-args[data-v-d3eca61c]{color:#57534e;white-space:pre-wrap;word-break:break-all;background:#fff;border:1px solid #fde68a;border-radius:6px;max-height:140px;margin:8px 0;padding:8px;font-size:12px;overflow:auto}.approval-actions[data-v-d3eca61c]{justify-content:flex-end;gap:8px;display:flex}.approval-actions button[data-v-d3eca61c]{cursor:pointer;border:none;border-radius:6px;padding:5px 16px;font-size:13px;transition:opacity .2s}.approval-deny[data-v-d3eca61c]{color:#6b7280;background:#f3f4f6;border:1px solid #e5e7eb}.approval-deny[data-v-d3eca61c]:hover{color:#374151;background:#e5e7eb}.approval-allow[data-v-d3eca61c]{background:var(--cs-primary);color:#fff}.approval-allow[data-v-d3eca61c]:hover{opacity:.9}.approval-question[data-v-d3eca61c]{color:#57534e;white-space:pre-wrap;background:#fff;border:1px solid #fde68a;border-radius:6px;margin:8px 0;padding:8px 10px;font-size:13px;line-height:1.5}.approval-context[data-v-d3eca61c]{color:#92400e;margin:4px 0 8px;font-size:12px;line-height:1.5}.approval-recommend[data-v-d3eca61c]{color:#1f4d3a;margin:4px 0 8px;font-size:12px}.approval-opt[data-v-d3eca61c]{border:1px solid var(--cs-primary);color:var(--cs-primary);cursor:pointer;background:#fff;border-radius:6px;padding:5px 14px;font-size:13px;transition:all .2s}.approval-opt[data-v-d3eca61c]:hover{background:var(--cs-primary);color:#fff}.conflict-bar[data-v-d3eca61c]{background:#fef2f2;border:1px solid #dc2626;border-radius:10px;margin:8px 12px;padding:10px 12px}.conflict-head[data-v-d3eca61c]{color:#991b1b;align-items:center;gap:6px;font-size:13px;display:flex}.conflict-icon[data-v-d3eca61c]{font-size:15px}.conflict-title code[data-v-d3eca61c]{color:#7f1d1d;background:#fee2e2;border-radius:4px;padding:1px 6px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.conflict-detail[data-v-d3eca61c]{color:#7f1d1d;margin:6px 0 8px;font-size:12px;line-height:1.5}.conflict-actions[data-v-d3eca61c]{flex-wrap:wrap;justify-content:flex-end;gap:8px;display:flex}.conflict-actions button[data-v-d3eca61c]{cursor:pointer;border:none;border-radius:6px;padding:5px 14px;font-size:13px;transition:opacity .2s}.conflict-keep[data-v-d3eca61c]{color:#6b7280;background:#f3f4f6;border:1px solid #e5e7eb}.conflict-keep[data-v-d3eca61c]:hover{color:#374151;background:#e5e7eb}.conflict-overwrite[data-v-d3eca61c]{color:#fff;background:#dc2626}.conflict-overwrite[data-v-d3eca61c]:hover{opacity:.9}.conflict-restore[data-v-d3eca61c]{color:#dc2626;background:#fff;border:1px solid #dc2626}.conflict-restore[data-v-d3eca61c]:hover{background:#fee2e2}.conflict-toggle[data-v-d3eca61c]{color:#991b1b;cursor:pointer;background:0 0;border:none;border-radius:4px;margin:2px 0 6px;padding:2px 8px;font-size:12px}.conflict-toggle[data-v-d3eca61c]:hover{background:#fee2e2}.conflict-diff[data-v-d3eca61c]{gap:8px;margin:4px 0 8px;display:flex}.conflict-diff-col[data-v-d3eca61c]{flex:1;min-width:0}.conflict-diff-label[data-v-d3eca61c]{color:#7f1d1d;margin-bottom:2px;font-size:11px}.conflict-diff-pre[data-v-d3eca61c]{color:#57534e;white-space:pre-wrap;word-break:break-all;background:#fff;border:1px solid #fecaca;border-radius:6px;max-height:140px;margin:0;padding:6px;font-size:11px;overflow:auto}
2
2
  /*$vite$:1*/