page-agent-sdk 2.8.0 → 2.9.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 +27 -3
- package/README.zh-CN.md +27 -3
- package/dist/page-agent-sdk.css +1 -1
- package/dist/page-agent-sdk.iife.js +112 -112
- package/dist/page-agent-sdk.js +1897 -1669
- package/dist/page-agent-sdk.umd.cjs +46 -46
- package/package.json +1 -1
- package/skills/page-agent-sdk-integrate/SKILL.md +1 -0
- package/skills/page-agent-sdk-integrate/references/api.md +1 -1
- package/skills/page-agent-sdk-integrate/references/integration-prompt.md +177 -0
- package/skills/page-agent-sdk-integrate/references/use-cases.md +31 -0
- package/types/index.d.ts +8 -0
package/README.md
CHANGED
|
@@ -24,7 +24,7 @@ At its core, it gives the AI a **standardized, safe JSON-operation channel**. AI
|
|
|
24
24
|
|
|
25
25
|
| Constraint | Mechanism | Effect |
|
|
26
26
|
|---|---|---|
|
|
27
|
-
| **Scope control** | Declared schema fields (`data`) — only declared
|
|
27
|
+
| **Scope control** | Declared schema fields (`data`) — only declared keys are writable; schema shape auto-whitelist (top-level + sub-path recursively projected by sub-schema; undeclared fields hidden/denied; whole-set becomes merge to prevent accidental deletion; `interceptors.write`-supplied invisible fields persisted) | AI touching undeclared fields → `PATH_DENIED` |
|
|
28
28
|
| **Validity check** | zod schema — `write`/`set`/`edit` validated against schema | Invalid type/enum/structure → structured error, no write |
|
|
29
29
|
| **Incremental op** | `write` with `patch`/`patches` (batch, atomic rollback) or advanced `edit_data` patches by `jsonPath` (set/remove/merge/append) | Avoid re-sending the whole large JSON; precise local edits; use `patches` to edit many at once |
|
|
30
30
|
| **Large-object retrieval** | `read` supports `fields` (projection) + `depth` (truncation) to shrink payload; `query_data` (JSONPath)/`search_data` (text)/`eval_script` (sandboxed JS) | Efficient retrieval + pinpoint location in large JSON |
|
|
@@ -182,6 +182,8 @@ ChatDialog, MessageContent, CodePreview, useChat
|
|
|
182
182
|
| | `mcp` | `McpServerConfig[]` | Remote MCP servers (http/sse/websocket) |
|
|
183
183
|
| | `middleware` | `Middleware[]` | Custom middleware (appended to built-in stack) |
|
|
184
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) |
|
|
185
187
|
|
|
186
188
|
### Extension points
|
|
187
189
|
|
|
@@ -315,6 +317,8 @@ mv skills/page-agent-sdk-integrate ~/.claude/skills/
|
|
|
315
317
|
|
|
316
318
|
After install, restart your AI tool; the skill auto-triggers when you ask things like "add page-agent-sdk to my page".
|
|
317
319
|
|
|
320
|
+
> **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`.
|
|
321
|
+
|
|
318
322
|
> 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.
|
|
319
323
|
|
|
320
324
|
## Architecture
|
|
@@ -385,6 +389,7 @@ createChatSdk({
|
|
|
385
389
|
// sdk.setSkills(skills) // runtime swap the entire skill list (same-name overwrites; clears cache, index re-renders next round)
|
|
386
390
|
// sdk.invalidateSkillCache(name?) // invalidate skill full-text cache (proactive; omit name to clear all)
|
|
387
391
|
// sdk.usage // cumulative token usage {prompt_tokens, completion_tokens, total_tokens}
|
|
392
|
+
// sdk.hide() / sdk.show() // drawer mode hide/show (keeps agent/history/in-flight generation; mount after hide resumes via show, no rebuild)
|
|
388
393
|
```
|
|
389
394
|
|
|
390
395
|
## Examples
|
|
@@ -400,9 +405,28 @@ After `npm run dev`, visit the corresponding page:
|
|
|
400
405
|
| planner-demo | `/examples/planner-demo/` | Plan-reflect-execute (high-temp creative planner + low-temp reflector) |
|
|
401
406
|
| subagent-demo | `/examples/subagent-demo/` | Subagent parallel orchestration |
|
|
402
407
|
| mcp-demo | `/examples/mcp-demo/` | MCP remote tools (needs `npm run mcp:mock`) |
|
|
408
|
+
| animation-demo | `/examples/animation-demo/` | ChatDialog enter/collapse/unmount animations + inline/drawer + hide/show |
|
|
409
|
+
| multi-agent-demo | `/examples/multi-agent-demo/` | Multi-agent parallel + exclusive switch (3 independent agents, drawer hide/show keeps each history) |
|
|
403
410
|
|
|
404
411
|
Framework-agnostic integration: `demo/plain.html` (importmap + esm.sh).
|
|
405
412
|
|
|
413
|
+
### Multi-agent parallel + exclusive switch
|
|
414
|
+
|
|
415
|
+
A single page can host multiple independent agents (each `createChatSdk` + distinct `id` for isolation), each managing its own `data`/history/tools, running their own generation tasks **in parallel**; **exclusive** chatbox switching uses `drawer` + `hide()`/`show()` — `hide` the old one (keeps agent/history/in-flight generation), `show` the new one (history resumes), no unmount, no lost conversation:
|
|
416
|
+
|
|
417
|
+
```ts
|
|
418
|
+
const agents = [agentA, agentB, agentC] // each createChatSdk({ id, drawer: true, data, ... })
|
|
419
|
+
await Promise.all(agents.map(a => a.mount())) // ready in parallel
|
|
420
|
+
agents.slice(1).forEach(a => a.hide()) // show only the first initially
|
|
421
|
+
|
|
422
|
+
let active = 0
|
|
423
|
+
function switchTo(i: number) {
|
|
424
|
+
agents[active].hide(); active = i; agents[i].show() // exclusive switch, each history preserved
|
|
425
|
+
}
|
|
426
|
+
```
|
|
427
|
+
|
|
428
|
+
> Multiple agents operating on the same `data` need coordination (optimistic lock `expectedHash` or `jsonPath` partitioning); each managing its own `data` object has no conflict (recommended). Full example: `examples/multi-agent-demo/`.
|
|
429
|
+
|
|
406
430
|
## Documentation
|
|
407
431
|
|
|
408
432
|
| Doc | Contents |
|
|
@@ -417,8 +441,8 @@ Framework-agnostic integration: `demo/plain.html` (importmap + esm.sh).
|
|
|
417
441
|
## Self-tests
|
|
418
442
|
|
|
419
443
|
```bash
|
|
420
|
-
npm test #
|
|
421
|
-
npm run test:e2e #
|
|
444
|
+
npm test # 461 assertions (tsx, source-level; no LLM dependency)
|
|
445
|
+
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)
|
|
422
446
|
```
|
|
423
447
|
|
|
424
448
|
## Local npm package test
|
package/README.zh-CN.md
CHANGED
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
|
|
25
25
|
| 约束 | 机制 | 作用 |
|
|
26
26
|
|---|---|---|
|
|
27
|
-
| **范围控制** | schema 校验(`data`)—— 只能改 schema 允许的值;schema 形状自动白名单(顶层
|
|
27
|
+
| **范围控制** | schema 校验(`data`)—— 只能改 schema 允许的值;schema 形状自动白名单(顶层 + 子路径按子 schema 递归投影,未声明字段隐藏/拒改/整体 set 转 merge 防误删;`interceptors.write` 补充的不可见字段落地保留) | AI 传非法值 → 拒绝;非声明字段 → `PATH_DENIED` |
|
|
28
28
|
| **合法性校验** | zod schema —— `write`/`set`/`edit` 按 schema 校验 | 类型/枚举/结构不合法 → 结构化错误,不写入 |
|
|
29
29
|
| **增量操作** | `write` 的 `patch`/`patches`(批量,原子回滚)或 advanced `edit_data` 按 `jsonPath` 发 patch(set/remove/merge/append) | 避免重传整个大 JSON,精确改局部;一次改多处用 `patches` |
|
|
30
30
|
| **大对象检索** | `read` 支持 `fields`(字段裁剪)+ `depth`(深度截断)减体积;`query_data`(JSONPath)/`search_data`(文本)/`eval_script`(沙箱 JS) | 大 JSON 高效检索 + 局部定位 |
|
|
@@ -182,6 +182,8 @@ ChatDialog, MessageContent, CodePreview, useChat
|
|
|
182
182
|
| | `mcp` | `McpServerConfig[]` | 远程 MCP server(http/sse/websocket) |
|
|
183
183
|
| | `middleware` | `Middleware[]` | 自定义中间件(拼到内置栈末尾) |
|
|
184
184
|
| | `streaming` / `title` / `placeholder` / `debug` | — | UI/调试 |
|
|
185
|
+
| | `drawer` | `boolean` · 默认 `false` | 抽屉模式:ChatDialog 从右滑入 + 遮罩 + 关闭按钮(替代收起下箭头);点遮罩/关闭按钮默认 `hide`(保留 agent/历史/生成进程,再 `mount`/`show` 恢复),传 `onClose` 自定义 |
|
|
186
|
+
| | `onClose` | `() => void` | 抽屉模式关闭回调(默认 `hide`;传此选项覆盖默认,便于同步外部挂载状态) |
|
|
185
187
|
|
|
186
188
|
### 扩展点
|
|
187
189
|
|
|
@@ -260,6 +262,8 @@ mv skills/page-agent-sdk-integrate ~/.claude/skills/
|
|
|
260
262
|
|
|
261
263
|
安装后重启 AI 工具;当你说「把 page-agent-sdk 加到我的页面」等时 skill 自动触发。
|
|
262
264
|
|
|
265
|
+
> **不想装 skill?** 用随包附带的通用对接提示词模板复制给对接项目的 AI:见 `node_modules/page-agent-sdk/skills/page-agent-sdk-integrate/references/integration-prompt.md`(按场景填空 `[...]` 即可)。特定场景示例见仓库 `doc/集成提示词-Vue2-低代码页面-抽屉.md`。
|
|
266
|
+
|
|
263
267
|
> 另有 `page-agent-sdk-release`(维护者发布工作流)skill 仅保留在仓库 `.claude/skills/` 供项目维护者自用,**不**通过 npm 包公开分发。
|
|
264
268
|
|
|
265
269
|
## 架构
|
|
@@ -330,6 +334,7 @@ createChatSdk({
|
|
|
330
334
|
// sdk.setSkills(skills) // 运行时替换整个 skill 列表(同名覆盖;清缓存,下轮索引重渲染)
|
|
331
335
|
// sdk.invalidateSkillCache(name?) // 清 skill 全文缓存(动态 skill 内容变化时主动失效)
|
|
332
336
|
// sdk.usage // 累计 token 用量 {prompt_tokens, completion_tokens, total_tokens}
|
|
337
|
+
// sdk.hide() / sdk.show() // 抽屉模式隐藏/显示(保留 agent/历史/生成进程;hide 后再 mount 直接 show 不重建)
|
|
333
338
|
```
|
|
334
339
|
|
|
335
340
|
## 示例
|
|
@@ -345,9 +350,28 @@ createChatSdk({
|
|
|
345
350
|
| planner-demo | `/examples/planner-demo/` | 规划-反思-执行(高温创意 planner + 低温 reflector) |
|
|
346
351
|
| subagent-demo | `/examples/subagent-demo/` | 子 agent 并行编排 |
|
|
347
352
|
| mcp-demo | `/examples/mcp-demo/` | MCP 远程工具(需 `npm run mcp:mock`) |
|
|
353
|
+
| animation-demo | `/examples/animation-demo/` | ChatDialog 入场/收起/卸载动画 + inline/drawer 模式 + hide/show |
|
|
354
|
+
| multi-agent-demo | `/examples/multi-agent-demo/` | 多 Agent 并行 + 互斥切换(三独立 agent,drawer hide/show 保留各自历史) |
|
|
348
355
|
|
|
349
356
|
框架无关集成:`demo/plain.html`(importmap + esm.sh)。
|
|
350
357
|
|
|
358
|
+
### 多 Agent 并行 + 互斥切换
|
|
359
|
+
|
|
360
|
+
同一页面可挂多个独立 Agent(各自 `createChatSdk` + 不同 `id` 隔离),各管各 `data`/历史/工具,可**并行**跑各自生成任务;聊天框**互斥切换**用 `drawer` + `hide()`/`show()`——切换时 `hide` 旧的(保留 agent/历史/生成进程)、`show` 新的(历史恢复),不卸载不丢对话:
|
|
361
|
+
|
|
362
|
+
```ts
|
|
363
|
+
const agents = [agentA, agentB, agentC] // 各自 createChatSdk({ id, drawer: true, data, ... })
|
|
364
|
+
await Promise.all(agents.map(a => a.mount())) // 并行就绪
|
|
365
|
+
agents.slice(1).forEach(a => a.hide()) // 初始只显示第一个
|
|
366
|
+
|
|
367
|
+
let active = 0
|
|
368
|
+
function switchTo(i: number) {
|
|
369
|
+
agents[active].hide(); active = i; agents[i].show() // 互斥切换,历史各自保留
|
|
370
|
+
}
|
|
371
|
+
```
|
|
372
|
+
|
|
373
|
+
> 多 agent 操作同一 `data` 需协调(乐观锁 `expectedHash` 或按 `jsonPath` 分区);各管各 `data` 对象则无冲突(推荐)。完整示例见 `examples/multi-agent-demo/`。
|
|
374
|
+
|
|
351
375
|
## 文档
|
|
352
376
|
|
|
353
377
|
| 文档 | 内容 |
|
|
@@ -362,8 +386,8 @@ createChatSdk({
|
|
|
362
386
|
## 自测
|
|
363
387
|
|
|
364
388
|
```bash
|
|
365
|
-
npm test #
|
|
366
|
-
npm run test:e2e #
|
|
389
|
+
npm test # 461 项断言(tsx 源码级,不依赖 LLM)
|
|
390
|
+
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 配置 / 错误场景)
|
|
367
391
|
```
|
|
368
392
|
|
|
369
393
|
## 本地 npm 包测试
|
package/dist/page-agent-sdk.css
CHANGED
|
@@ -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-cc5d7052]{z-index:9000;pointer-events:none;position:fixed;inset:0}.drawer-mask[data-v-cc5d7052]{pointer-events:auto;background:#00000040;position:absolute;inset:0}.drawer-panel[data-v-cc5d7052]{--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-cc5d7052]{z-index:1}.drawer-header[data-v-cc5d7052]{color:#fff;background:linear-gradient(135deg,#1f2937,#111827);justify-content:space-between;align-items:center;padding:12px 16px;display:flex}.drawer-title[data-v-cc5d7052]{font-size:15px;font-weight:600}.tab-group[data-v-cc5d7052]{gap:4px;display:flex}.tab-btn[data-v-cc5d7052]{color:#fff;cursor:pointer;background:#ffffff1f;border:none;border-radius:6px;padding:4px 12px;font-size:13px;transition:background .2s}.tab-btn[data-v-cc5d7052]:hover{background:#ffffff38}.tab-btn.active[data-v-cc5d7052]{background:#ffffff73;font-weight:600}.info-body[data-v-cc5d7052]{padding:4px 0}.info-section[data-v-cc5d7052]{margin-bottom:14px}.info-title[data-v-cc5d7052]{color:#2d5a47;border-bottom:1px solid #f3f4f6;margin-bottom:6px;padding-bottom:4px;font-size:12px;font-weight:600}.info-item[data-v-cc5d7052]{background:#f9fafb;border-radius:6px;margin-bottom:4px;padding:6px 8px}.info-name[data-v-cc5d7052]{color:#1f2937;font-family:SF Mono,Monaco,Consolas,monospace;font-size:12px;font-weight:600}.info-desc[data-v-cc5d7052]{color:#6b7280;margin-top:2px;font-size:11px;line-height:1.5}.info-desc.muted[data-v-cc5d7052]{color:#9ca3af}.src-tag[data-v-cc5d7052]{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-cc5d7052]{color:#6b7280;background:#f3f4f6}.src-tag.mcp[data-v-cc5d7052]{color:#7c3aed;background:#f3e8ff}.src-tag.user[data-v-cc5d7052]{color:#2563eb;background:#dbeafe}.info-todo[data-v-cc5d7052]{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-cc5d7052]{color:#fff;border-radius:8px;flex-shrink:0;padding:1px 6px;font-size:10px}.info-pre[data-v-cc5d7052]{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-cc5d7052]{gap:4px;display:flex}.hd-btn[data-v-cc5d7052]{color:#fff;cursor:pointer;background:#ffffff1f;border:none;border-radius:6px;width:28px;height:28px}.hd-btn[data-v-cc5d7052]:hover{background:#ffffff40}.drawer-filters[data-v-cc5d7052]{background:#fafafa;border-bottom:1px solid #f3f4f6;flex-wrap:wrap;gap:6px;padding:10px 16px;display:flex}.filter-chip[data-v-cc5d7052]{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-cc5d7052]:hover{border-color:var(--chip-color,var(--cs-primary))}.filter-chip.active[data-v-cc5d7052]{background:var(--chip-color,var(--cs-primary));border-color:var(--chip-color,var(--cs-primary));color:#fff}.chip-count[data-v-cc5d7052]{background:#00000014;border-radius:8px;padding:0 5px;font-size:11px}.filter-chip.active .chip-count[data-v-cc5d7052]{background:#ffffff40}.drawer-body[data-v-cc5d7052]{flex:1;padding:12px;overflow-y:auto}.empty[data-v-cc5d7052]{text-align:center;color:#9ca3af;padding:40px 20px;font-size:13px}.log-item[data-v-cc5d7052]{background:#fff;border:1px solid #e5e7eb;border-radius:8px;margin-bottom:10px;overflow:hidden}.log-head[data-v-cc5d7052]{background:#f9fafb;align-items:center;gap:8px;padding:8px 10px;display:flex}.log-type[data-v-cc5d7052]{color:#fff;white-space:nowrap;border-radius:4px;padding:2px 8px;font-size:11px;font-weight:600}.log-source[data-v-cc5d7052]{color:#7c3aed;white-space:nowrap;background:#f3e8ff;border-radius:4px;padding:2px 8px;font-size:10px;font-weight:600}.log-time[data-v-cc5d7052]{color:#9ca3af;font-family:SF Mono,Monaco,Consolas,monospace;font-size:11px}.log-body[data-v-cc5d7052]{padding:10px 12px}.log-footer[data-v-cc5d7052]{border-top:1px dashed #f3f4f6;gap:8px;padding:6px 12px;display:flex}.raw-toggle[data-v-cc5d7052]{color:var(--cs-primary);cursor:pointer;background:0 0;border:none;padding:2px 4px;font-size:11px}.raw-toggle[data-v-cc5d7052]:hover{text-decoration:underline}.log-raw[data-v-cc5d7052]{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-cc5d7052]{grid-template-columns:1fr 1fr;gap:6px;margin-bottom:8px;display:grid}.kv[data-v-cc5d7052]{background:#f9fafb;border-radius:6px;flex-direction:column;padding:6px 8px;display:flex}.kv .k[data-v-cc5d7052]{color:#9ca3af;text-transform:uppercase;font-size:10px}.kv .v[data-v-cc5d7052]{color:#1f2937;font-family:SF Mono,Monaco,Consolas,monospace;font-size:13px;font-weight:600}.section-label[data-v-cc5d7052]{color:#6b7280;margin:10px 0 4px;font-size:11px;font-weight:600}.chip-row[data-v-cc5d7052]{flex-wrap:wrap;gap:4px;display:flex}.tool-chip[data-v-cc5d7052]{color:#2d5a47;background:#ecf5ef;border-radius:10px;padding:2px 8px;font-family:SF Mono,Monaco,Consolas,monospace;font-size:11px}.msg-list[data-v-cc5d7052]{flex-direction:column;gap:4px;display:flex}.msg-row[data-v-cc5d7052]{background:#f9fafb;border-radius:6px;align-items:flex-start;gap:6px;padding:5px 8px;display:flex}.msg-role[data-v-cc5d7052]{color:#fff;border-radius:3px;flex-shrink:0;margin-top:1px;padding:2px 6px;font-size:9px;font-weight:700}.msg-text[data-v-cc5d7052]{color:#374151;white-space:pre-wrap;word-break:break-word;flex:1;font-size:12px;line-height:1.5}.msg-tool-hint[data-v-cc5d7052]{color:#7c3aed;flex-shrink:0;font-size:10px}.badge-row[data-v-cc5d7052]{flex-wrap:wrap;gap:6px;margin-bottom:8px;display:flex}.badge[data-v-cc5d7052]{color:#2d5a47;background:#dbeee4;border-radius:10px;padding:2px 8px;font-size:11px;font-weight:600}.badge.muted[data-v-cc5d7052]{color:#6b7280;background:#f3f4f6}.badge.warn[data-v-cc5d7052]{color:#92400e;background:#fef3c7}.resp-content[data-v-cc5d7052]{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-cc5d7052]{flex-direction:column;gap:6px;display:flex}.tc-card[data-v-cc5d7052]{border:1px solid #e5e7eb;border-radius:6px;overflow:hidden}.tc-card.inline[data-v-cc5d7052]{margin-top:4px}.tc-name[data-v-cc5d7052]{color:#2d5a47;background:#ecf5ef;padding:5px 8px;font-size:12px;font-weight:600}.tc-args[data-v-cc5d7052]{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-cc5d7052]{flex-wrap:wrap;gap:6px;margin-top:8px;display:flex}.usage[data-v-cc5d7052]{color:#047857;background:#ecfdf5;border-radius:10px;padding:2px 8px;font-family:SF Mono,Monaco,Consolas,monospace;font-size:11px}.err-box[data-v-cc5d7052]{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-cc5d7052]{flex-direction:column;flex:1;gap:3px;min-width:0;display:flex}.tc-inline[data-v-cc5d7052]{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-cc5d7052]{color:#2d5a47;white-space:nowrap;font-weight:600}.tc-inline-args[data-v-cc5d7052]{color:#16402f;word-break:break-all;font-family:SF Mono,Monaco,Consolas,monospace;font-size:10px}.tc-id[data-v-cc5d7052]{color:#9ca3af;font-family:SF Mono,Monaco,Consolas,monospace;font-size:10px}.view-toggle[data-v-cc5d7052]{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-cc5d7052]:hover{background:#dbeee4}.drawer-enter-active[data-v-cc5d7052],.drawer-leave-active[data-v-cc5d7052]{transition:opacity .25s}.drawer-enter-active .drawer-panel[data-v-cc5d7052],.drawer-leave-active .drawer-panel[data-v-cc5d7052]{transition:transform .25s}.drawer-enter-from[data-v-cc5d7052],.drawer-leave-to[data-v-cc5d7052]{opacity:0}.drawer-enter-from .drawer-panel[data-v-cc5d7052],.drawer-leave-to .drawer-panel[data-v-cc5d7052]{transform:translate(100%)}.flow-section[data-v-cc5d7052]{margin-bottom:14px}.flow-section-title[data-v-cc5d7052]{color:#6b7280;margin-bottom:6px;padding-left:2px;font-size:11px;font-weight:600}.flow-round[data-v-cc5d7052]{border:1px solid #e5e7eb;border-radius:8px;margin-bottom:12px;overflow:hidden}.flow-round-head[data-v-cc5d7052]{color:#fff;background:var(--cs-primary);padding:5px 10px;font-size:12px;font-weight:600}.flow-round-body[data-v-cc5d7052]{flex-direction:column;gap:3px;padding:6px;display:flex}.flow-node[data-v-cc5d7052]{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-cc5d7052]{border-left-color:#059669}.flow-node.llm_response[data-v-cc5d7052]{border-left-color:#d97706}.flow-node.tool_call[data-v-cc5d7052]{border-left-color:#7c3aed}.flow-node.tool_result[data-v-cc5d7052]{border-left-color:#2563eb}.flow-node.error[data-v-cc5d7052]{background:#fef2f2;border-left-color:#dc2626}.flow-node.middleware[data-v-cc5d7052]{border-left-color:#0891b2}.flow-ico[data-v-cc5d7052]{flex-shrink:0;font-size:13px}.flow-label[data-v-cc5d7052]{color:#374151;white-space:nowrap;flex-shrink:0;font-weight:600}.flow-detail[data-v-cc5d7052]{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-cc5d7052]{color:#9ca3af;flex-shrink:0;font-family:SF Mono,Monaco,Consolas,monospace;font-size:10px}.chat-dialog[data-v-6f6e6133]{--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;display:flex;overflow:hidden;box-shadow:0 8px 32px #0000001f,0 2px 8px #00000014}.chat-dialog.collapsed[data-v-6f6e6133]{height:52px}.chat-header[data-v-6f6e6133]{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-6f6e6133]{align-items:center;gap:8px;display:flex}.header-icon[data-v-6f6e6133]{font-size:20px}.header-title[data-v-6f6e6133]{font-size:15px;font-weight:600}.status-dot[data-v-6f6e6133]{background:#4ade80;border-radius:50%;width:8px;height:8px}.status-dot.pulse[data-v-6f6e6133]{animation:1.5s infinite pulse-6f6e6133}@keyframes pulse-6f6e6133{0%,to{opacity:1}50%{opacity:.4}}.header-actions[data-v-6f6e6133]{gap:4px;display:flex}.action-btn[data-v-6f6e6133]{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-6f6e6133]:hover:not(:disabled){background:#ffffff4d}.action-btn[data-v-6f6e6133]:disabled{opacity:.4;cursor:not-allowed}.action-btn.debug-btn[data-v-6f6e6133]{position:relative}.action-btn.debug-btn.active[data-v-6f6e6133]{background:#ffffff73}.debug-badge[data-v-6f6e6133]{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-6f6e6133]{overscroll-behavior:contain;flex:1;min-height:0;padding:16px;overflow-y:auto}.empty-state[data-v-6f6e6133]{color:#9ca3af;flex-direction:column;justify-content:center;align-items:center;height:200px;display:flex}.empty-icon[data-v-6f6e6133]{margin-bottom:12px;font-size:48px}.empty-state p[data-v-6f6e6133]{font-size:14px}.message-row[data-v-6f6e6133]{align-items:flex-start;gap:10px;margin-bottom:16px;display:flex}.message-row.user[data-v-6f6e6133]{flex-direction:row-reverse}.message-avatar[data-v-6f6e6133]{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-6f6e6133]{background:#ecf5ef}.message-content[data-v-6f6e6133]{min-width:0;max-width:80%}.message-bubble[data-v-6f6e6133]{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-6f6e6133]{color:#1f2937;white-space:normal;overflow-wrap:anywhere;background:#f3f4f6;border-bottom-left-radius:4px}.message-row.user .message-bubble[data-v-6f6e6133]{background:var(--cs-primary);color:#fff;border-bottom-right-radius:4px}.message-row.user .message-content[data-v-6f6e6133]{flex-direction:column;align-items:flex-end;display:flex}.message-time[data-v-6f6e6133]{color:#9ca3af;margin-top:4px;padding:0 4px;font-size:11px}.typing[data-v-6f6e6133]{gap:4px;padding:12px 16px;display:flex}.typing .dot[data-v-6f6e6133]{background:#9ca3af;border-radius:50%;width:8px;height:8px;animation:1.4s ease-in-out infinite bounce-6f6e6133}.typing .dot[data-v-6f6e6133]:nth-child(2){animation-delay:.2s}.typing .dot[data-v-6f6e6133]:nth-child(3){animation-delay:.4s}@keyframes bounce-6f6e6133{0%,80%,to{transform:translateY(0)}40%{transform:translateY(-6px)}}.typing-text[data-v-6f6e6133]{color:#9ca3af;font-size:13px}.reasoning-block[data-v-6f6e6133]{background:#f0f7f3;border:1px dashed #b8d4c5;border-radius:8px;margin-bottom:6px;overflow:hidden}.reasoning-header[data-v-6f6e6133]{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-6f6e6133]{font-size:13px}.reasoning-title[data-v-6f6e6133]{font-weight:600}.reasoning-toggle[data-v-6f6e6133]{margin-left:auto}.reasoning-body[data-v-6f6e6133]{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-6f6e6133]{flex-direction:column;gap:4px;margin-bottom:6px;display:flex}.step-item[data-v-6f6e6133]{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-6f6e6133]{align-items:center;gap:5px;display:inline-flex}.step-icon[data-v-6f6e6133]{font-size:11px}.step-name[data-v-6f6e6133]{font-family:SF Mono,Monaco,Consolas,monospace}.step-count[data-v-6f6e6133]{color:#0891b2;font-size:10px;font-weight:600}.step-status.running[data-v-6f6e6133]{color:#0891b2}.step-children[data-v-6f6e6133]{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-6f6e6133]{color:#7c3aed;letter-spacing:.3px;font-size:10px;font-weight:600}.step-child[data-v-6f6e6133]{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-6f6e6133]{color:#6d28d9}.step-child .step-status.running[data-v-6f6e6133]{color:#8b5cf6}.stream-cursor[data-v-6f6e6133],.typing-cursor[data-v-6f6e6133]{vertical-align:text-bottom;background:var(--cs-primary);width:7px;height:14px;margin-left:2px;animation:1s steps(2,end) infinite blink-6f6e6133;display:inline-block}@keyframes blink-6f6e6133{0%,50%{opacity:1}51%,to{opacity:0}}.error-bar[data-v-6f6e6133]{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-6f6e6133]{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-6f6e6133],.error-bar .undo-btn[data-v-6f6e6133]{flex-shrink:0;margin-top:1px}.retry-btn[data-v-6f6e6133]{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-6f6e6133]:hover{background:#b91c1c}.chat-footer[data-v-6f6e6133]{background:#fafafa;border-top:1px solid #f3f4f6;align-items:flex-end;gap:8px;padding:12px 16px;display:flex}.chat-input[data-v-6f6e6133]{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-6f6e6133]:focus{border-color:var(--cs-primary);box-shadow:0 0 0 2px rgba(var(--cs-primary-rgb), .1)}.send-btn[data-v-6f6e6133]{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-6f6e6133]:hover:not(:disabled){opacity:.9;transform:scale(1.05)}.send-btn[data-v-6f6e6133]:active:not(:disabled){transform:scale(.95)}.send-btn[data-v-6f6e6133]:disabled{opacity:.4;cursor:not-allowed}.send-btn.stop-btn[data-v-6f6e6133]{background:#9ca3af}.send-btn.stop-btn[data-v-6f6e6133]:hover:not(:disabled){background:#6b7280;transform:none}.cap-badge[data-v-6f6e6133]{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-6f6e6133]{opacity:0;gap:6px;margin-top:4px;transition:opacity .2s;display:flex}.message-row.assistant:hover .msg-actions[data-v-6f6e6133]{opacity:1}.msg-action-btn[data-v-6f6e6133]{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-6f6e6133]:hover{border-color:var(--cs-primary);color:var(--cs-primary);background:#f0f7f3}.undo-btn[data-v-6f6e6133]{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-6f6e6133]:hover{background:#fde68a}.undo-foot-btn[data-v-6f6e6133]{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-6f6e6133]:hover{border-color:var(--cs-primary);color:var(--cs-primary);background:#f0f7f3}.approval-bar[data-v-6f6e6133]{background:#fffbeb;border:1px solid #f59e0b;border-radius:10px;margin:8px 12px;padding:10px 12px}.approval-head[data-v-6f6e6133]{color:#92400e;align-items:center;gap:6px;font-size:13px;display:flex}.approval-icon[data-v-6f6e6133]{font-size:15px}.approval-title code[data-v-6f6e6133]{color:#78350f;background:#fef3c7;border-radius:4px;padding:1px 6px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.approval-toggle[data-v-6f6e6133]{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-6f6e6133]:hover{background:#fef3c7}.approval-args[data-v-6f6e6133]{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-6f6e6133]{justify-content:flex-end;gap:8px;display:flex}.approval-actions button[data-v-6f6e6133]{cursor:pointer;border:none;border-radius:6px;padding:5px 16px;font-size:13px;transition:opacity .2s}.approval-deny[data-v-6f6e6133]{color:#6b7280;background:#f3f4f6;border:1px solid #e5e7eb}.approval-deny[data-v-6f6e6133]:hover{color:#374151;background:#e5e7eb}.approval-allow[data-v-6f6e6133]{background:var(--cs-primary);color:#fff}.approval-allow[data-v-6f6e6133]:hover{opacity:.9}.approval-question[data-v-6f6e6133]{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-6f6e6133]{color:#92400e;margin:4px 0 8px;font-size:12px;line-height:1.5}.approval-recommend[data-v-6f6e6133]{color:#1f4d3a;margin:4px 0 8px;font-size:12px}.approval-opt[data-v-6f6e6133]{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-6f6e6133]:hover{background:var(--cs-primary);color:#fff}.conflict-bar[data-v-6f6e6133]{background:#fef2f2;border:1px solid #dc2626;border-radius:10px;margin:8px 12px;padding:10px 12px}.conflict-head[data-v-6f6e6133]{color:#991b1b;align-items:center;gap:6px;font-size:13px;display:flex}.conflict-icon[data-v-6f6e6133]{font-size:15px}.conflict-title code[data-v-6f6e6133]{color:#7f1d1d;background:#fee2e2;border-radius:4px;padding:1px 6px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.conflict-detail[data-v-6f6e6133]{color:#7f1d1d;margin:6px 0 8px;font-size:12px;line-height:1.5}.conflict-actions[data-v-6f6e6133]{flex-wrap:wrap;justify-content:flex-end;gap:8px;display:flex}.conflict-actions button[data-v-6f6e6133]{cursor:pointer;border:none;border-radius:6px;padding:5px 14px;font-size:13px;transition:opacity .2s}.conflict-keep[data-v-6f6e6133]{color:#6b7280;background:#f3f4f6;border:1px solid #e5e7eb}.conflict-keep[data-v-6f6e6133]:hover{color:#374151;background:#e5e7eb}.conflict-overwrite[data-v-6f6e6133]{color:#fff;background:#dc2626}.conflict-overwrite[data-v-6f6e6133]:hover{opacity:.9}.conflict-restore[data-v-6f6e6133]{color:#dc2626;background:#fff;border:1px solid #dc2626}.conflict-restore[data-v-6f6e6133]:hover{background:#fee2e2}.conflict-toggle[data-v-6f6e6133]{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-6f6e6133]:hover{background:#fee2e2}.conflict-diff[data-v-6f6e6133]{gap:8px;margin:4px 0 8px;display:flex}.conflict-diff-col[data-v-6f6e6133]{flex:1;min-width:0}.conflict-diff-label[data-v-6f6e6133]{color:#7f1d1d;margin-bottom:2px;font-size:11px}.conflict-diff-pre[data-v-6f6e6133]{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}.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}
|
|
2
2
|
/*$vite$:1*/
|