page-agent-sdk 2.11.0 → 2.12.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,14 +1,14 @@
1
1
  # page-agent-sdk
2
2
 
3
- > **[English](https://github.com/whyymj/chat-sdk/blob/master/README.md)** · **[中文](https://github.com/whyymj/chat-sdk/blob/master/README.zh-CN.md)**
3
+ > **[English](https://github.com/whyymj/page-agent-sdk/blob/master/README.md)** · **[中文](https://github.com/whyymj/page-agent-sdk/blob/master/README.zh-CN.md)**
4
4
 
5
5
  > Give your web page an **AI assistant that edits the page itself**. Mount a chat dialog in one line; the AI reads/writes page data safely via schema-validated tools — "conversational" building/editing/ops.
6
6
 
7
- > **AI agent integration**: see [Agent Integration Cheat Sheet](#agent-integration-cheat-sheet-for-ai-agents) below (exports / options / extension points / built-in tools / file structure). Architecture & gotchas in [`CLAUDE.md`](https://github.com/whyymj/chat-sdk/blob/master/CLAUDE.md).
7
+ > **AI agent integration**: see [Agent Integration Cheat Sheet](#agent-integration-cheat-sheet-for-ai-agents) below (exports / options / extension points / built-in tools / file structure). Architecture & gotchas in [`CLAUDE.md`](https://github.com/whyymj/page-agent-sdk/blob/master/CLAUDE.md).
8
8
 
9
9
  [![npm](https://img.shields.io/npm/v/page-agent-sdk.svg)](https://www.npmjs.com/package/page-agent-sdk)
10
- [![license](https://img.shields.io/badge/license-ISC-blue.svg)](https://github.com/whyymj/chat-sdk/blob/master/LICENSE)
11
- [![tests](https://img.shields.io/badge/self%20tests-434%20asserts-brightgreen.svg)](#self-tests)
10
+ [![license](https://img.shields.io/badge/license-ISC-blue.svg)](https://github.com/whyymj/page-agent-sdk/blob/master/LICENSE)
11
+ [![tests](https://img.shields.io/badge/self%20tests-524%20asserts-brightgreen.svg)](#self-tests)
12
12
 
13
13
  ---
14
14
 
@@ -162,6 +162,7 @@ ChatDialog, MessageContent, CodePreview, SkillPanel, useChat
162
162
  | | `llm` | `LLMConfig \| BaseChatModel` · **required** | `LLMConfig={apiKey,baseUrl?,model?,temperature?,maxTokens?}`; OpenAI-compatible (default DeepSeek) |
163
163
  | | `id` | `string` | Stable id (multi-agent isolation + persistence resume; random+warn if omitted) |
164
164
  | | `systemPrompt` | `string` | Agent identity (no hardcoded business; inject via this). Optional — built-in default (JSON operation assistant + `reliableWriteRules`) used if omitted; passing your own fully overrides it. `appendReliableWriteRules` defaults to `true`: auto-appends `reliableWriteRules` with a `---` separator; set `false` to disable |
165
+ | | `augmentSystem` | `(ctx:{state,data?}) => string \| undefined` | Dynamic system prompt injection hook: called each turn, returns a string injected as a segment based on runtime state/data; return undefined to skip; callback errors degrade to skip (no crash). `ctx.data` is taken from liveData() each turn (auto-syncs after setData), enabling dynamic component descriptions / partial schema hints. Not set = current behavior |
165
166
  | **Page data** | `data` | `{schema,bind,description?}` | Single main object: declare zod schema (validation + field descriptions auto-injected into prompt) + bind (reactive/plain object, tools read/write directly, no `window`) + description |
166
167
  | | `tools` / `skills` / `memory` | `Tool[]` / `SkillSpec[]` / `string` | Custom tools / skills / AGENTS.md-style directives |
167
168
  | **Capability toggles** | `capabilities` | `{planning?,dataOps?,fetch?,skills?,vfs?,summarization?,memory?,subagent?,verify?}` | Default all on (`verify` default off); `false` to turn off |
@@ -323,7 +324,7 @@ npm i page-agent-sdk
323
324
  cp -R node_modules/page-agent-sdk/skills/page-agent-sdk-integrate ~/.claude/skills/
324
325
 
325
326
  # Option B — download from the repo (no install needed)
326
- curl -L https://github.com/whyymj/chat-sdk/tarball/master | tar xz --strip-components=1 --wildcards '*/skills/page-agent-sdk-integrate'
327
+ curl -L https://github.com/whyymj/page-agent-sdk/tarball/master | tar xz --strip-components=1 --wildcards '*/skills/page-agent-sdk-integrate'
327
328
  mv skills/page-agent-sdk-integrate ~/.claude/skills/
328
329
  ```
329
330
 
@@ -407,6 +408,15 @@ createChatSdk({
407
408
  // skillStorage: { id: 'shared' } // manually specify the same id to share the same skill set across pages/agents
408
409
  // sdk.usage // cumulative token usage {prompt_tokens, completion_tokens, total_tokens}
409
410
  // sdk.hide() / sdk.show() // drawer mode hide/show (keeps agent/history/in-flight generation; mount after hide resumes via show, no rebuild)
411
+ // Runtime dynamic reconfiguration (zero-breakage; not calling = current behavior):
412
+ // sdk.setTools(tools) // replace user tools at runtime (built-ins untouched; internal rebind to LLM; next round uses new set)
413
+ // sdk.addTool(tool) // append user tool at runtime (dedup by name)
414
+ // sdk.removeTool(name) // remove user tool at runtime (built-ins untouched); returns whether removed
415
+ // sdk.setLlm(llm) // switch LLM at runtime (quota-exhausted→cheaper model / complex task→stronger model / switch provider; param BaseChatModel or LLMConfig; rebind + re-resolve model caps)
416
+ // sdk.setMemory(text) // update persistent memory directive at runtime (next augmentPrompt injects latest)
417
+ // sdk.setSubagents(configs) // replace pre-declared subagents at runtime (regenerates use_<id> delegation tools + rebind; requires subagents:[] at creation)
418
+ // sdk.addSubagent(config) // append pre-declared subagent at runtime
419
+ // sdk.removeSubagent(id) // remove pre-declared subagent at runtime; returns whether removed
410
420
  ```
411
421
 
412
422
  ## Examples
@@ -449,18 +459,18 @@ function switchTo(i: number) {
449
459
 
450
460
  | Doc | Contents |
451
461
  |---|---|
452
- | [Doc Index](https://github.com/whyymj/chat-sdk/blob/master/doc/README.en.md) | Navigation + other info sources (specs/changes/tests) |
453
- | [Usage Guide](https://github.com/whyymj/chat-sdk/blob/master/doc/usage-guide.en.md) | Install / options / capability deep-dive / custom middleware / FAQ |
454
- | [Architecture](https://github.com/whyymj/chat-sdk/blob/master/doc/architecture.md) *(Chinese)* | Layering / control flow / window-op safety flow |
455
- | [Context & Compression](https://github.com/whyymj/chat-sdk/blob/master/doc/context-management.md) *(Chinese)* | Context composition / 4-layer compression / flow diagrams |
456
- | [File Overview](https://github.com/whyymj/chat-sdk/blob/master/doc/architecture-files.md) *(Chinese)* | Per-file responsibilities / deps / data flow |
457
- | [CLAUDE.md](https://github.com/whyymj/chat-sdk/blob/master/CLAUDE.md) | **agent must-read** · architecture / gotchas / coding conventions |
462
+ | [Doc Index](https://github.com/whyymj/page-agent-sdk/blob/master/doc/README.en.md) | Navigation + other info sources (specs/changes/tests) |
463
+ | [Usage Guide](https://github.com/whyymj/page-agent-sdk/blob/master/doc/usage-guide.en.md) | Install / options / capability deep-dive / custom middleware / FAQ |
464
+ | [Architecture](https://github.com/whyymj/page-agent-sdk/blob/master/doc/architecture.md) *(Chinese)* | Layering / control flow / window-op safety flow |
465
+ | [Context & Compression](https://github.com/whyymj/page-agent-sdk/blob/master/doc/context-management.md) *(Chinese)* | Context composition / 4-layer compression / flow diagrams |
466
+ | [File Overview](https://github.com/whyymj/page-agent-sdk/blob/master/doc/architecture-files.md) *(Chinese)* | Per-file responsibilities / deps / data flow |
467
+ | [CLAUDE.md](https://github.com/whyymj/page-agent-sdk/blob/master/CLAUDE.md) | **agent must-read** · architecture / gotchas / coding conventions |
458
468
 
459
469
  ## Self-tests
460
470
 
461
471
  ```bash
462
- npm test # 483 assertions (tsx, source-level; no LLM dependency)
463
- 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)
472
+ npm test # 524 assertions (tsx, source-level; no LLM dependency)
473
+ npm run test:e2e # 210 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 / runtime dynamic reconfiguration(setTools/addTool/removeTool/setLlm/setMemory/setSubagents reflect) / 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)
464
474
  ```
465
475
 
466
476
  ## Local npm package test
@@ -535,8 +545,8 @@ npm test
535
545
 
536
546
  ## Relationship to Deep Agents
537
547
 
538
- Borrows the harness idea from [Deep Agents](https://github.com/langchain-ai/deepagents) (ReAct + middleware + planning + skills + memory + context management), but implemented in-house: no LangGraph/langchain full bundle; browser-oriented (persistence via IndexedDB, not server-side DB); context via input compression + memory trim + large-result offload, rather than per-step checkpointer archival. See [Context & Compression - Differences from Deep Agents](https://github.com/whyymj/chat-sdk/blob/master/doc/context-management.md#七与-deep-agents-的差异).
548
+ Borrows the harness idea from [Deep Agents](https://github.com/langchain-ai/deepagents) (ReAct + middleware + planning + skills + memory + context management), but implemented in-house: no LangGraph/langchain full bundle; browser-oriented (persistence via IndexedDB, not server-side DB); context via input compression + memory trim + large-result offload, rather than per-step checkpointer archival. See [Context & Compression - Differences from Deep Agents](https://github.com/whyymj/page-agent-sdk/blob/master/doc/context-management.md#七与-deep-agents-的差异).
539
549
 
540
550
  ## License
541
551
 
542
- [ISC](https://github.com/whyymj/chat-sdk/blob/master/LICENSE)
552
+ [ISC](https://github.com/whyymj/page-agent-sdk/blob/master/LICENSE)
package/README.zh-CN.md CHANGED
@@ -1,14 +1,14 @@
1
1
  # page-agent-sdk
2
2
 
3
- > **[English](https://github.com/whyymj/chat-sdk/blob/master/README.md)** · **[中文](https://github.com/whyymj/chat-sdk/blob/master/README.zh-CN.md)**
3
+ > **[English](https://github.com/whyymj/page-agent-sdk/blob/master/README.md)** · **[中文](https://github.com/whyymj/page-agent-sdk/blob/master/README.zh-CN.md)**
4
4
 
5
5
  > 给网页一个**会改页面的 AI 助手**。一行代码挂载对话框,AI 通过工具按 schema 安全读写页面数据,实现「对话式」搭建/编辑/运维。
6
6
 
7
- > **AI agent 接入**:直接看下方「[Agent 接入速查](#agent-接入速查给-ai-agent-读)」(导出 / 选项表 / 扩展点 / 内置工具 / 文件结构),架构与约定坑见 [`CLAUDE.md`](https://github.com/whyymj/chat-sdk/blob/master/CLAUDE.md)。
7
+ > **AI agent 接入**:直接看下方「[Agent 接入速查](#agent-接入速查给-ai-agent-读)」(导出 / 选项表 / 扩展点 / 内置工具 / 文件结构),架构与约定坑见 [`CLAUDE.md`](https://github.com/whyymj/page-agent-sdk/blob/master/CLAUDE.md)。
8
8
 
9
9
  [![npm](https://img.shields.io/npm/v/page-agent-sdk.svg)](https://www.npmjs.com/package/page-agent-sdk)
10
- [![license](https://img.shields.io/badge/license-ISC-blue.svg)](https://github.com/whyymj/chat-sdk/blob/master/LICENSE)
11
- [![tests](https://img.shields.io/badge/self%20tests-364%20asserts-brightgreen.svg)](#自测)
10
+ [![license](https://img.shields.io/badge/license-ISC-blue.svg)](https://github.com/whyymj/page-agent-sdk/blob/master/LICENSE)
11
+ [![tests](https://img.shields.io/badge/self%20tests-524%20asserts-brightgreen.svg)](#自测)
12
12
 
13
13
  ---
14
14
 
@@ -162,6 +162,7 @@ ChatDialog, MessageContent, CodePreview, SkillPanel, useChat
162
162
  | | `llm` | `LLMConfig \| BaseChatModel` · **必传** | `LLMConfig={apiKey,baseUrl?,model?,temperature?,maxTokens?}`;兼容 OpenAI 协议(默认 DeepSeek) |
163
163
  | | `id` | `string` | 稳定 id(多 agent 隔离 + 持久化恢复;不传随机+warn) |
164
164
  | | `systemPrompt` | `string` | Agent 身份(不硬编码业务,靠这注入)。可选——不传用内置默认(JSON 操作助手 + `reliableWriteRules`);传了则完全覆盖。`appendReliableWriteRules` 默认 `true`:自动用 `---` 分隔线追加 reliableWriteRules;设 `false` 关闭 |
165
+ | | `augmentSystem` | `(ctx:{state,data?}) => string \| undefined` | 动态 system prompt 注入钩子:每轮调,按运行时 state/data 返回字符串作为一段注入;返回 undefined 跳过;回调抛错降级跳过(不崩)。`ctx.data` 每轮从 liveData() 取最新(setData 后自动同步),可据此动态算当前组件说明 / 部分 schema 描述。不配 = 现状行为 |
165
166
  | **页面数据** | `data` | `{schema,bind,description?}` | 单主对象:声明 zod schema(校验 + 字段描述自动注入提示词)+ bind(reactive/普通对象,工具直接读写,不挂 window)+ description |
166
167
  | | `tools` / `skills` / `memory` | `Tool[]` / `SkillSpec[]` / `string` | 自定义工具 / 技能 / AGENTS.md 风格持久指令 |
167
168
  | **能力开关** | `capabilities` | `{planning?,dataOps?,fetch?,skills?,vfs?,summarization?,memory?,subagent?,verify?}` | 默认全开(`verify` 默认关);`false` 关掉省 token |
@@ -268,7 +269,7 @@ npm i page-agent-sdk
268
269
  cp -R node_modules/page-agent-sdk/skills/page-agent-sdk-integrate ~/.claude/skills/
269
270
 
270
271
  # 方式 B —— 从仓库下载(无需安装)
271
- curl -L https://github.com/whyymj/chat-sdk/tarball/master | tar xz --strip-components=1 --wildcards '*/skills/page-agent-sdk-integrate'
272
+ curl -L https://github.com/whyymj/page-agent-sdk/tarball/master | tar xz --strip-components=1 --wildcards '*/skills/page-agent-sdk-integrate'
272
273
  mv skills/page-agent-sdk-integrate ~/.claude/skills/
273
274
  ```
274
275
 
@@ -352,6 +353,15 @@ createChatSdk({
352
353
  // skillStorage: { id: 'shared' } // 手动指定同一 id → 跨页面/跨 agent 复用同一套用户 skill
353
354
  // sdk.usage // 累计 token 用量 {prompt_tokens, completion_tokens, total_tokens}
354
355
  // sdk.hide() / sdk.show() // 抽屉模式隐藏/显示(保留 agent/历史/生成进程;hide 后再 mount 直接 show 不重建)
356
+ // 运行时动态重配置(零破坏,不调用 = 现状):
357
+ // sdk.setTools(tools) // 运行时替换用户工具集(内置不动,内部 rebind 重新绑定到 LLM,下一轮即生效)
358
+ // sdk.addTool(tool) // 运行时追加用户工具(去重 by name)
359
+ // sdk.removeTool(name) // 运行时移除用户工具(内置不动);返回是否移除成功
360
+ // sdk.setLlm(llm) // 运行时切换 LLM(配额耗尽切便宜模型/复杂任务切强模型/切 provider;参数 BaseChatModel 或 LLMConfig;rebind + 重解析模型能力)
361
+ // sdk.setMemory(text) // 运行时更新持久指令 memory(下一轮 augmentPrompt 注入最新)
362
+ // sdk.setSubagents(configs) // 运行时替换预声明子 agent(重新生成 use_<id> 委派工具 + rebind;需创建时配 subagents:[])
363
+ // sdk.addSubagent(config) // 运行时追加预声明子 agent
364
+ // sdk.removeSubagent(id) // 运行时移除预声明子 agent;返回是否移除成功
355
365
  ```
356
366
 
357
367
  ## 示例
@@ -394,18 +404,18 @@ function switchTo(i: number) {
394
404
 
395
405
  | 文档 | 内容 |
396
406
  |---|---|
397
- | [文档索引](https://github.com/whyymj/chat-sdk/blob/master/doc/README.md) | 各文档导航 + 其他信息源(规范/变更/自测) |
398
- | [使用手册](https://github.com/whyymj/chat-sdk/blob/master/doc/usage-guide.md) | 安装 / 配置项 / 能力详解 / 自定义中间件 / FAQ |
399
- | [功能架构](https://github.com/whyymj/chat-sdk/blob/master/doc/architecture.md) | 分层 / 控制流 / 数据操作安全流 |
400
- | [上下文与压缩](https://github.com/whyymj/chat-sdk/blob/master/doc/context-management.md) | 上下文组成 / 4 层压缩 / 流程图 |
401
- | [文件全览](https://github.com/whyymj/chat-sdk/blob/master/doc/architecture-files.md) | 逐文件职责 / 依赖 / 数据流 |
402
- | [CLAUDE.md](https://github.com/whyymj/chat-sdk/blob/master/CLAUDE.md) | **agent 必读** · 架构要点 / 约定坑 / 编码规范 |
407
+ | [文档索引](https://github.com/whyymj/page-agent-sdk/blob/master/doc/README.md) | 各文档导航 + 其他信息源(规范/变更/自测) |
408
+ | [使用手册](https://github.com/whyymj/page-agent-sdk/blob/master/doc/usage-guide.md) | 安装 / 配置项 / 能力详解 / 自定义中间件 / FAQ |
409
+ | [功能架构](https://github.com/whyymj/page-agent-sdk/blob/master/doc/architecture.md) | 分层 / 控制流 / 数据操作安全流 |
410
+ | [上下文与压缩](https://github.com/whyymj/page-agent-sdk/blob/master/doc/context-management.md) | 上下文组成 / 4 层压缩 / 流程图 |
411
+ | [文件全览](https://github.com/whyymj/page-agent-sdk/blob/master/doc/architecture-files.md) | 逐文件职责 / 依赖 / 数据流 |
412
+ | [CLAUDE.md](https://github.com/whyymj/page-agent-sdk/blob/master/CLAUDE.md) | **agent 必读** · 架构要点 / 约定坑 / 编码规范 |
403
413
 
404
414
  ## 自测
405
415
 
406
416
  ```bash
407
- npm test # 483 项断言(tsx 源码级,不依赖 LLM)
408
- 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 配置 / 错误场景)
417
+ npm test # 524 项断言(tsx 源码级,不依赖 LLM)
418
+ npm run test:e2e # 210 项集成断言(node 跑构建产物 dist;覆盖各 API/配置项/功能模块/简单与复杂场景:默认 systemPrompt(含能力概述) / 动态注册与 inspect 同步 / inspect(tools/middleware/subagent/verify/mcp/todos/lastCompression/checkpoints 反映配置) / 自定义 tools/middleware/skills/memory 注入 / 运行时动态重配置(setTools/addTool/removeTool/setLlm/setMemory/setSubagents 反映) / switchSession(开/未开) / shareContext 开/关共享独立 / storage 后端+对象配置 / presets 三预设 / checkpoint / 导出项完整(39+ 函数/组件) / 工具函数可用(isQuotaError/estimateTokens/jpEval/searchJson) / source=builtin / mount 边界 / hook 多监听器 / llm 配置 / 错误场景)
409
419
  ```
410
420
 
411
421
  ## 本地 npm 包测试
@@ -480,8 +490,8 @@ npm test
480
490
 
481
491
  ## 与 Deep Agents 的关系
482
492
 
483
- 借鉴 [Deep Agents](https://github.com/langchain-ai/deepagents) 的 harness 思路(ReAct + 中间件 + planning + skills + memory + context 管理),但自研实现:不引 LangGraph/langchain 整包;面向浏览器端(持久化用 IndexedDB 而非服务端 DB);上下文用输入压缩 + 内存裁剪 + 大结果 offload,而非每步 checkpointer 存档。详见 [上下文与压缩 - 与 Deep Agents 的差异](https://github.com/whyymj/chat-sdk/blob/master/doc/context-management.md#七与-deep-agents-的差异)。
493
+ 借鉴 [Deep Agents](https://github.com/langchain-ai/deepagents) 的 harness 思路(ReAct + 中间件 + planning + skills + memory + context 管理),但自研实现:不引 LangGraph/langchain 整包;面向浏览器端(持久化用 IndexedDB 而非服务端 DB);上下文用输入压缩 + 内存裁剪 + 大结果 offload,而非每步 checkpointer 存档。详见 [上下文与压缩 - 与 Deep Agents 的差异](https://github.com/whyymj/page-agent-sdk/blob/master/doc/context-management.md#七与-deep-agents-的差异)。
484
494
 
485
495
  ## License
486
496
 
487
- [ISC](https://github.com/whyymj/chat-sdk/blob/master/LICENSE)
497
+ [ISC](https://github.com/whyymj/page-agent-sdk/blob/master/LICENSE)
@@ -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}.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}
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-58dec249]{z-index:9998;background:#00000073;animation:.28s cs-mask-in-58dec249;position:fixed;inset:0}@keyframes cs-mask-in-58dec249{0%{opacity:0}to{opacity:1}}.chat-dialog.drawer[data-v-58dec249]{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-58dec249;position:fixed;top:0;bottom:0;right:0}@keyframes cs-drawer-slide-in-58dec249{0%{transform:translate(100%)}to{transform:translate(0)}}@media (prefers-reduced-motion:reduce){.chat-mask[data-v-58dec249],.chat-dialog.drawer[data-v-58dec249]{animation:none}}.chat-dialog[data-v-58dec249]{--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-58dec249;display:flex;overflow:hidden;box-shadow:0 8px 32px #0000001f,0 2px 8px #00000014}@keyframes cs-drawer-in-58dec249{0%{opacity:0;transform:translate(32px)}to{opacity:1;transform:translate(0)}}@media (prefers-reduced-motion:reduce){.chat-dialog[data-v-58dec249]{animation:none}}.chat-dialog.collapsed[data-v-58dec249]{height:52px}.cs-slide-enter-active[data-v-58dec249],.cs-slide-leave-active[data-v-58dec249]{transition:opacity .22s,transform .22s}.cs-slide-enter-from[data-v-58dec249],.cs-slide-leave-to[data-v-58dec249]{opacity:0;transform:translateY(-6px)}.chat-dialog.cs-leaving[data-v-58dec249]{opacity:0;pointer-events:none;transform:scale(.96)translateY(8px)}.chat-dialog.drawer.cs-leaving[data-v-58dec249]{transform:translate(100%)}.chat-mask.cs-leaving[data-v-58dec249]{opacity:0}.chat-dialog.cs-hidden[data-v-58dec249],.chat-mask.cs-hidden[data-v-58dec249]{opacity:0;visibility:hidden;pointer-events:none;transition:opacity .2s,visibility 0s .2s}.chat-header[data-v-58dec249]{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-58dec249]{align-items:center;gap:8px;display:flex}.header-icon[data-v-58dec249]{font-size:20px}.header-title[data-v-58dec249]{font-size:15px;font-weight:600}.status-dot[data-v-58dec249]{background:#4ade80;border-radius:50%;width:8px;height:8px}.status-dot.pulse[data-v-58dec249]{animation:1.5s infinite pulse-58dec249}@keyframes pulse-58dec249{0%,to{opacity:1}50%{opacity:.4}}.header-actions[data-v-58dec249]{gap:4px;display:flex}.action-btn[data-v-58dec249]{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-58dec249]:hover:not(:disabled){background:#ffffff4d}.action-btn[data-v-58dec249]:disabled{opacity:.4;cursor:not-allowed}.action-btn.debug-btn[data-v-58dec249]{position:relative}.action-btn.debug-btn.active[data-v-58dec249]{background:#ffffff73}.debug-badge[data-v-58dec249]{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-58dec249]{overscroll-behavior:contain;flex:1;min-height:0;padding:16px;overflow-y:auto}.empty-state[data-v-58dec249]{color:#9ca3af;flex-direction:column;justify-content:center;align-items:center;height:200px;display:flex}.empty-icon[data-v-58dec249]{margin-bottom:12px;font-size:48px}.empty-state p[data-v-58dec249]{font-size:14px}.message-row[data-v-58dec249]{align-items:flex-start;gap:10px;margin-bottom:16px;display:flex}.message-row.user[data-v-58dec249]{flex-direction:row-reverse}.message-avatar[data-v-58dec249]{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-58dec249]{background:#ecf5ef}.message-content[data-v-58dec249]{min-width:0;max-width:80%}.message-bubble[data-v-58dec249]{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-58dec249]{color:#1f2937;white-space:normal;overflow-wrap:anywhere;background:#f3f4f6;border-bottom-left-radius:4px}.message-row.user .message-bubble[data-v-58dec249]{background:var(--cs-primary);color:#fff;border-bottom-right-radius:4px}.message-row.user .message-content[data-v-58dec249]{flex-direction:column;align-items:flex-end;display:flex}.message-time[data-v-58dec249]{color:#9ca3af;margin-top:4px;padding:0 4px;font-size:11px}.typing[data-v-58dec249]{gap:4px;padding:12px 16px;display:flex}.typing .dot[data-v-58dec249]{background:#9ca3af;border-radius:50%;width:8px;height:8px;animation:1.4s ease-in-out infinite bounce-58dec249}.typing .dot[data-v-58dec249]:nth-child(2){animation-delay:.2s}.typing .dot[data-v-58dec249]:nth-child(3){animation-delay:.4s}@keyframes bounce-58dec249{0%,80%,to{transform:translateY(0)}40%{transform:translateY(-6px)}}.typing-text[data-v-58dec249]{color:#9ca3af;font-size:13px}.reasoning-block[data-v-58dec249]{background:#f0f7f3;border:1px dashed #b8d4c5;border-radius:8px;margin-bottom:6px;overflow:hidden}.reasoning-header[data-v-58dec249]{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-58dec249]{font-size:13px}.reasoning-title[data-v-58dec249]{font-weight:600}.reasoning-toggle[data-v-58dec249]{margin-left:auto}.reasoning-body[data-v-58dec249]{color:#16402f;white-space:pre-wrap;word-break:break-word;border-top:1px dashed #b8d4c5;padding:8px 10px;font-size:12px;line-height:1.6}.steps-block[data-v-58dec249]{flex-direction:column;gap:4px;margin-bottom:6px;display:flex}.step-item[data-v-58dec249]{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-58dec249]{align-items:center;gap:5px;display:inline-flex}.step-icon[data-v-58dec249]{font-size:11px}.step-name[data-v-58dec249]{font-family:SF Mono,Monaco,Consolas,monospace}.step-count[data-v-58dec249]{color:#0891b2;font-size:10px;font-weight:600}.step-status.running[data-v-58dec249]{color:#0891b2}.step-children[data-v-58dec249]{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-58dec249]{color:#7c3aed;letter-spacing:.3px;font-size:10px;font-weight:600}.step-child[data-v-58dec249]{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-58dec249]{color:#6d28d9}.step-child .step-status.running[data-v-58dec249]{color:#8b5cf6}.stream-cursor[data-v-58dec249],.typing-cursor[data-v-58dec249]{vertical-align:text-bottom;background:var(--cs-primary);width:7px;height:14px;margin-left:2px;animation:1s steps(2,end) infinite blink-58dec249;display:inline-block}@keyframes blink-58dec249{0%,50%{opacity:1}51%,to{opacity:0}}.error-bar[data-v-58dec249]{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-58dec249]{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-58dec249],.error-bar .undo-btn[data-v-58dec249]{flex-shrink:0;margin-top:1px}.retry-btn[data-v-58dec249]{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-58dec249]:hover{background:#b91c1c}.chat-footer[data-v-58dec249]{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-58dec249]{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-58dec249]:focus{border-color:var(--cs-primary);box-shadow:0 0 0 2px rgba(var(--cs-primary-rgb), .1)}.send-btn[data-v-58dec249]{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-58dec249]:hover:not(:disabled){opacity:.9;transform:scale(1.05)}.send-btn[data-v-58dec249]:active:not(:disabled){transform:scale(.95)}.send-btn[data-v-58dec249]:disabled{opacity:.4;cursor:not-allowed}.send-btn.stop-btn[data-v-58dec249]{background:#9ca3af}.send-btn.stop-btn[data-v-58dec249]:hover:not(:disabled){background:#6b7280;transform:none}.cap-badge[data-v-58dec249]{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-58dec249]{opacity:0;gap:6px;margin-top:4px;transition:opacity .2s;display:flex}.message-row.assistant:hover .msg-actions[data-v-58dec249]{opacity:1}.msg-action-btn[data-v-58dec249]{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-58dec249]:hover{border-color:var(--cs-primary);color:var(--cs-primary);background:#f0f7f3}.undo-btn[data-v-58dec249]{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-58dec249]:hover{background:#fde68a}.undo-foot-btn[data-v-58dec249]{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-58dec249]:hover{border-color:var(--cs-primary);color:var(--cs-primary);background:#f0f7f3}.approval-bar[data-v-58dec249]{background:#fffbeb;border:1px solid #f59e0b;border-radius:10px;margin:8px 12px;padding:10px 12px}.approval-head[data-v-58dec249]{color:#92400e;align-items:center;gap:6px;font-size:13px;display:flex}.approval-icon[data-v-58dec249]{font-size:15px}.approval-title code[data-v-58dec249]{color:#78350f;background:#fef3c7;border-radius:4px;padding:1px 6px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.approval-toggle[data-v-58dec249]{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-58dec249]:hover{background:#fef3c7}.approval-args[data-v-58dec249]{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-58dec249]{justify-content:flex-end;gap:8px;display:flex}.approval-actions button[data-v-58dec249]{cursor:pointer;border:none;border-radius:6px;padding:5px 16px;font-size:13px;transition:opacity .2s}.approval-deny[data-v-58dec249]{color:#6b7280;background:#f3f4f6;border:1px solid #e5e7eb}.approval-deny[data-v-58dec249]:hover{color:#374151;background:#e5e7eb}.approval-allow[data-v-58dec249]{background:var(--cs-primary);color:#fff}.approval-allow[data-v-58dec249]:hover{opacity:.9}.approval-question[data-v-58dec249]{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-58dec249]{color:#92400e;margin:4px 0 8px;font-size:12px;line-height:1.5}.approval-recommend[data-v-58dec249]{color:#1f4d3a;margin:4px 0 8px;font-size:12px}.approval-opt[data-v-58dec249]{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-58dec249]:hover{background:var(--cs-primary);color:#fff}.conflict-bar[data-v-58dec249]{background:#fef2f2;border:1px solid #dc2626;border-radius:10px;margin:8px 12px;padding:10px 12px}.conflict-head[data-v-58dec249]{color:#991b1b;align-items:center;gap:6px;font-size:13px;display:flex}.conflict-icon[data-v-58dec249]{font-size:15px}.conflict-title code[data-v-58dec249]{color:#7f1d1d;background:#fee2e2;border-radius:4px;padding:1px 6px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.conflict-detail[data-v-58dec249]{color:#7f1d1d;margin:6px 0 8px;font-size:12px;line-height:1.5}.conflict-actions[data-v-58dec249]{flex-wrap:wrap;justify-content:flex-end;gap:8px;display:flex}.conflict-actions button[data-v-58dec249]{cursor:pointer;border:none;border-radius:6px;padding:5px 14px;font-size:13px;transition:opacity .2s}.conflict-keep[data-v-58dec249]{color:#6b7280;background:#f3f4f6;border:1px solid #e5e7eb}.conflict-keep[data-v-58dec249]:hover{color:#374151;background:#e5e7eb}.conflict-overwrite[data-v-58dec249]{color:#fff;background:#dc2626}.conflict-overwrite[data-v-58dec249]:hover{opacity:.9}.conflict-restore[data-v-58dec249]{color:#dc2626;background:#fff;border:1px solid #dc2626}.conflict-restore[data-v-58dec249]:hover{background:#fee2e2}.conflict-toggle[data-v-58dec249]{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-58dec249]:hover{background:#fee2e2}.conflict-diff[data-v-58dec249]{gap:8px;margin:4px 0 8px;display:flex}.conflict-diff-col[data-v-58dec249]{flex:1;min-width:0}.conflict-diff-label[data-v-58dec249]{color:#7f1d1d;margin-bottom:2px;font-size:11px}.conflict-diff-pre[data-v-58dec249]{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*/