openclaw-agent-dashboard 1.0.21 → 1.0.23
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 +55 -321
- package/frontend-dist/assets/index-B7XqKAxm.css +1 -0
- package/frontend-dist/assets/index-CxJaSYyo.js +24 -0
- package/{frontend → frontend-dist}/index.html +2 -1
- package/{plugin/openclaw.plugin.json → openclaw.plugin.json} +2 -2
- package/package.json +21 -13
- package/.github/workflows/release.yml +0 -56
- package/VERSION_DISPLAY_delivery.md +0 -242
- package/VERSION_DISPLAY_implementation_summary.md +0 -315
- package/design_manifest.md +0 -100
- package/docs/CHANGELOG_AGENT_MODIFICATIONS.md +0 -132
- package/docs/MAINTAINER_RELEASE_WORKFLOW.md +0 -211
- package/docs/Openclaw-Agent-Dashboard/345/217/221/345/270/203/344/270/216/346/233/264/346/226/260.md +0 -147
- package/docs/RELEASE-LATEST.md +0 -189
- package/docs/RELEASE-MODEL-CONFIG.md +0 -95
- package/docs/WINDOWS_INSTALL_TROUBLESHOOTING.md +0 -171
- package/docs/design/.gitkeep +0 -0
- package/docs/design/VERSION_DISPLAY_design.md +0 -1236
- package/docs/release-guide.md +0 -259
- package/docs/release-operations-manual.md +0 -167
- package/docs/reviews/.gitkeep +0 -0
- package/docs/reviews/approval_history.json +0 -14
- package/docs/reviews/cr_VERSION_DISPLAY.md +0 -397
- package/docs/reviews/traceability_manifest.json +0 -279
- package/docs/specs/VERSION_DISPLAY_spec.md +0 -371
- package/docs/specs/tr3-install-system.md +0 -580
- package/docs/windows-collaboration-model-paths-troubleshooting.md +0 -0
- package/frontend/package-lock.json +0 -1240
- package/frontend/package.json +0 -19
- package/frontend/src/App.vue +0 -355
- package/frontend/src/components/AgentCard.vue +0 -796
- package/frontend/src/components/AgentConfigPanel.vue +0 -539
- package/frontend/src/components/AgentDetailPanel.vue +0 -738
- package/frontend/src/components/ErrorAnalysisView.vue +0 -546
- package/frontend/src/components/ErrorCenterPanel.vue +0 -844
- package/frontend/src/components/PerformanceMonitor.vue +0 -515
- package/frontend/src/components/SettingsPanel.vue +0 -236
- package/frontend/src/components/TokenAnalysisPanel.vue +0 -683
- package/frontend/src/components/chain/ChainEdge.vue +0 -85
- package/frontend/src/components/chain/ChainNode.vue +0 -166
- package/frontend/src/components/chain/TaskChainView.vue +0 -425
- package/frontend/src/components/chain/index.ts +0 -3
- package/frontend/src/components/chain/types.ts +0 -70
- package/frontend/src/components/collaboration/CollaborationFlowSection.vue +0 -1032
- package/frontend/src/components/collaboration/CollaborationFlowWrapper.vue +0 -113
- package/frontend/src/components/common/VersionDisplay.vue +0 -187
- package/frontend/src/components/performance/PerformancePanel.vue +0 -119
- package/frontend/src/components/performance/PerformanceSection.vue +0 -1137
- package/frontend/src/components/tasks/TaskStatusSection.vue +0 -973
- package/frontend/src/components/timeline/TimelineConnector.vue +0 -31
- package/frontend/src/components/timeline/TimelineRound.vue +0 -135
- package/frontend/src/components/timeline/TimelineStep.vue +0 -691
- package/frontend/src/components/timeline/TimelineToolLink.vue +0 -109
- package/frontend/src/components/timeline/TimelineView.vue +0 -540
- package/frontend/src/components/timeline/index.ts +0 -5
- package/frontend/src/components/timeline/types.ts +0 -120
- package/frontend/src/composables/index.ts +0 -7
- package/frontend/src/composables/useDebounce.ts +0 -48
- package/frontend/src/composables/useRealtime.ts +0 -52
- package/frontend/src/composables/useState.ts +0 -52
- package/frontend/src/composables/useThrottle.ts +0 -46
- package/frontend/src/composables/useVirtualScroll.ts +0 -106
- package/frontend/src/main.ts +0 -4
- package/frontend/src/managers/EventDispatcher.ts +0 -127
- package/frontend/src/managers/RealtimeDataManager.ts +0 -302
- package/frontend/src/managers/StateManager.ts +0 -128
- package/frontend/src/managers/index.ts +0 -5
- package/frontend/src/types/collaboration.ts +0 -135
- package/frontend/src/types/index.ts +0 -20
- package/frontend/src/types/performance.ts +0 -105
- package/frontend/src/types/task.ts +0 -38
- package/frontend/vite.config.ts +0 -18
- package/legacy_code_anatomy.md +0 -518
- package/plugin/README.md +0 -99
- package/plugin/config.json.example +0 -1
- package/plugin/package.json +0 -26
- package/scripts/build-plugin.js +0 -81
- package/scripts/bundle.sh +0 -62
- package/scripts/install-plugin.sh +0 -162
- package/scripts/install-python-deps.sh +0 -226
- package/scripts/install.js +0 -684
- package/scripts/install.sh +0 -367
- package/scripts/lib/common.sh +0 -137
- package/scripts/release-pack.sh +0 -110
- package/scripts/start.js +0 -50
- package/scripts/test_available_models.py +0 -284
- package/scripts/test_version_display.sh +0 -128
- package/scripts/test_websocket_ping.py +0 -44
- package/session_registry.json +0 -58
- package/tests/.gitkeep +0 -0
- package/tests/qa_regression_report.md +0 -359
- package/tests/qa_version_display_report.md +0 -598
- /package/{src/backend → dashboard}/agents.py +0 -0
- /package/{src/backend → dashboard}/api/__init__.py +0 -0
- /package/{src/backend → dashboard}/api/agent_config_api.py +0 -0
- /package/{src/backend → dashboard}/api/agents.py +0 -0
- /package/{src/backend → dashboard}/api/agents_config.py +0 -0
- /package/{src/backend → dashboard}/api/chains.py +0 -0
- /package/{src/backend → dashboard}/api/collaboration.py +0 -0
- /package/{src/backend → dashboard}/api/debug_paths.py +0 -0
- /package/{src/backend → dashboard}/api/error_analysis.py +0 -0
- /package/{src/backend → dashboard}/api/errors.py +0 -0
- /package/{src/backend → dashboard}/api/performance.py +0 -0
- /package/{src/backend → dashboard}/api/subagents.py +0 -0
- /package/{src/backend → dashboard}/api/timeline.py +0 -0
- /package/{src/backend → dashboard}/api/version.py +0 -0
- /package/{src/backend → dashboard}/api/websocket.py +0 -0
- /package/{src/backend → dashboard}/collaboration.py +0 -0
- /package/{src/backend → dashboard}/data/__init__.py +0 -0
- /package/{src/backend → dashboard}/data/agent_config_manager.py +0 -0
- /package/{src/backend → dashboard}/data/chain_reader.py +0 -0
- /package/{src/backend → dashboard}/data/config_reader.py +0 -0
- /package/{src/backend → dashboard}/data/error_analyzer.py +0 -0
- /package/{src/backend → dashboard}/data/session_reader.py +0 -0
- /package/{src/backend → dashboard}/data/subagent_reader.py +0 -0
- /package/{src/backend → dashboard}/data/task_history.py +0 -0
- /package/{src/backend → dashboard}/data/timeline_reader.py +0 -0
- /package/{src/backend → dashboard}/data/version_info_reader.py +0 -0
- /package/{src/backend → dashboard}/errors.py +0 -0
- /package/{src/backend → dashboard}/main.py +0 -0
- /package/{src/backend → dashboard}/mechanism_reader.py +0 -0
- /package/{src/backend → dashboard}/mechanisms.py +0 -0
- /package/{src/backend → dashboard}/performance.py +0 -0
- /package/{src/backend → dashboard}/requirements.txt +0 -0
- /package/{src/backend → dashboard}/session_reader.py +0 -0
- /package/{src/backend → dashboard}/status/__init__.py +0 -0
- /package/{src/backend → dashboard}/status/change_tracker.py +0 -0
- /package/{src/backend → dashboard}/status/error_detector.py +0 -0
- /package/{src/backend → dashboard}/status/status_cache.py +0 -0
- /package/{src/backend → dashboard}/status/status_calculator.py +0 -0
- /package/{src/backend → dashboard}/status_calculator.py +0 -0
- /package/{src/backend → dashboard}/subagent_reader.py +0 -0
- /package/{src/backend → dashboard}/watchers/__init__.py +0 -0
- /package/{src/backend → dashboard}/watchers/file_watcher.py +0 -0
- /package/{plugin/index.js → index.js} +0 -0
package/README.md
CHANGED
|
@@ -1,365 +1,99 @@
|
|
|
1
|
-
# OpenClaw Agent Dashboard
|
|
1
|
+
# OpenClaw Agent Dashboard 插件
|
|
2
2
|
|
|
3
|
-
多 Agent 可视化看板 -
|
|
3
|
+
多 Agent 可视化看板 - 作为 OpenClaw 插件安装后,随 OpenClaw 启动自动运行。
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## 快速开始
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
- **时序视图** - 展示 Agent 执行步骤的时间线
|
|
9
|
-
- **链路视图** - 展示主 Agent 与子 Agent 的任务派发链路
|
|
10
|
-
- **Agent 配置** - 查看和修改 Agent 的模型配置
|
|
11
|
-
- **错误分析** - 错误根因分析、分类和修复建议
|
|
12
|
-
- **API 状态** - 展示 API 服务异常和限流情况
|
|
13
|
-
- **性能监控** - Token 使用、响应时间等
|
|
14
|
-
|
|
15
|
-
## 系统要求
|
|
16
|
-
|
|
17
|
-
| 组件 | 要求 |
|
|
18
|
-
|------|------|
|
|
19
|
-
| **openclaw** | 已安装 (`npm install -g openclaw`) |
|
|
20
|
-
| **Node.js** | 16+ |
|
|
21
|
-
| **Python** | 3.8+ |
|
|
22
|
-
| **pip** | python3-pip |
|
|
23
|
-
| **venv** | python3-venv(Linux 推荐) |
|
|
24
|
-
|
|
25
|
-
### 各系统依赖安装
|
|
26
|
-
|
|
27
|
-
**Debian / Ubuntu:**
|
|
28
|
-
```bash
|
|
29
|
-
sudo apt update
|
|
30
|
-
sudo apt install python3 python3-pip python3-venv
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
**Fedora / CentOS / RHEL:**
|
|
34
|
-
```bash
|
|
35
|
-
sudo dnf install python3 python3-pip
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
**macOS:**
|
|
39
|
-
```bash
|
|
40
|
-
brew install python3
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
**Windows:**
|
|
44
|
-
1. 安装 [Node.js](https://nodejs.org/)(LTS 版本)
|
|
45
|
-
2. 安装 [Python 3](https://www.python.org/downloads/)
|
|
46
|
-
- ⚠️ 安装时务必勾选 **"Add Python to PATH"**
|
|
47
|
-
3. 全局安装 OpenClaw:`npm install -g openclaw`
|
|
48
|
-
4. [Git for Windows](https://git-scm.com/download/win)(可选;仅 **方式一从 npm 安装** 时不需要 Git)
|
|
49
|
-
|
|
50
|
-
## 快速安装
|
|
51
|
-
|
|
52
|
-
### Windows 用户(仅安装,复制顺序执行)
|
|
53
|
-
|
|
54
|
-
在 **PowerShell** 中依次执行:
|
|
55
|
-
|
|
56
|
-
```powershell
|
|
57
|
-
openclaw plugins install openclaw-agent-dashboard@latest
|
|
58
|
-
|
|
59
|
-
$plugin = "$env:USERPROFILE\.openclaw\extensions\openclaw-agent-dashboard"
|
|
60
|
-
node "$plugin\scripts\install-python-deps.js" $plugin --verbose
|
|
61
|
-
|
|
62
|
-
openclaw gateway restart
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
浏览器访问:`http://localhost:38271`。若出现 `plugin already exists`,见下文「从 path / 旧版安装迁移到 npm」一节。
|
|
66
|
-
|
|
67
|
-
安装成功时,终端会出现 **`Installed plugin: openclaw-agent-dashboard`**。过程中的 **`WARNING: ... dangerous code patterns ... child_process`** 为安全扫描提示,**可忽略**;**`plugins.allow is empty`** 为建议项,不阻止使用(可选在 `openclaw.json` 中配置 `plugins.allow` 消除提示)。
|
|
68
|
-
|
|
69
|
-
---
|
|
70
|
-
|
|
71
|
-
### 方式一:OpenClaw 官方命令(推荐,全平台)
|
|
72
|
-
|
|
73
|
-
与 OpenClaw 其它 npm 插件一致,由 CLI 从 **npm** 下载并安装到 `extensions` 目录:
|
|
74
|
-
|
|
75
|
-
```bash
|
|
76
|
-
openclaw plugins install openclaw-agent-dashboard@latest
|
|
77
|
-
```
|
|
78
|
-
|
|
79
|
-
指定版本(版本号以 npm 为准,可用 `npm view openclaw-agent-dashboard version` 查看):
|
|
7
|
+
克隆仓库后,在项目根目录执行:
|
|
80
8
|
|
|
81
9
|
```bash
|
|
82
|
-
openclaw plugins install openclaw-agent-dashboard@1.0.17
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
首次安装见上;**已安装后的升级**见下文 [升级插件(已用 npm 安装)](#升级插件已用-npm-安装)。
|
|
86
|
-
|
|
87
|
-
**安装 Python 依赖(首次或报错时执行一次)**
|
|
88
|
-
插件目录在 `~/.openclaw/extensions/openclaw-agent-dashboard`(Windows 为 `%USERPROFILE%\.openclaw\extensions\openclaw-agent-dashboard`)。打包时已包含跨平台的 `scripts/install-python-deps.js`,请用 **Node** 调用(勿依赖 bash):
|
|
89
|
-
|
|
90
|
-
**Linux / macOS:**
|
|
91
|
-
|
|
92
|
-
```bash
|
|
93
|
-
PLUGIN="$HOME/.openclaw/extensions/openclaw-agent-dashboard"
|
|
94
|
-
node "$PLUGIN/scripts/install-python-deps.js" "$PLUGIN" --verbose
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
**Windows(PowerShell):**
|
|
98
|
-
|
|
99
|
-
```powershell
|
|
100
|
-
$plugin = "$env:USERPROFILE\.openclaw\extensions\openclaw-agent-dashboard"
|
|
101
|
-
node "$plugin\scripts\install-python-deps.js" $plugin --verbose
|
|
102
|
-
```
|
|
103
|
-
|
|
104
|
-
脚本会在 `dashboard/.venv` 下创建虚拟环境并安装 `requirements.txt`,避免 Debian/Ubuntu 上 PEP 668 限制。
|
|
105
|
-
|
|
106
|
-
**安装完成后请执行** `openclaw gateway restart` **重启网关**,再访问 Dashboard。
|
|
107
|
-
|
|
108
|
-
> 在 **Gateway 进程**中加载插件时会自动启动 Dashboard。访问地址默认: http://localhost:38271
|
|
109
|
-
|
|
110
|
-
---
|
|
111
|
-
|
|
112
|
-
### 方式二:从源码安装(开发者)
|
|
113
|
-
|
|
114
|
-
```bash
|
|
115
|
-
git clone https://github.com/Umarchen/openclaw-agent-dashboard.git
|
|
116
|
-
cd openclaw-agent-dashboard
|
|
117
10
|
npm run deploy
|
|
118
11
|
```
|
|
119
12
|
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
从 [GitHub Releases](https://github.com/Umarchen/openclaw-agent-dashboard/releases) 下载 `openclaw-agent-dashboard-v*.tgz` 后:
|
|
127
|
-
|
|
128
|
-
```bash
|
|
129
|
-
openclaw plugins install ./openclaw-agent-dashboard-v1.0.0.tgz
|
|
130
|
-
```
|
|
131
|
-
|
|
132
|
-
再按 [方式一](#方式一openclaw-官方命令推荐全平台) 用 `node .../install-python-deps.js` 安装 Python 依赖。
|
|
133
|
-
|
|
134
|
-
---
|
|
135
|
-
|
|
136
|
-
### 方式四:一键脚本(仅 Linux / macOS,可选)
|
|
137
|
-
|
|
138
|
-
```bash
|
|
139
|
-
curl -fsSL https://raw.githubusercontent.com/Umarchen/openclaw-agent-dashboard/main/scripts/install.sh | bash
|
|
140
|
-
```
|
|
141
|
-
|
|
142
|
-
更推荐优先使用 **方式一**,便于版本与 OpenClaw 配置一致。
|
|
143
|
-
|
|
144
|
-
---
|
|
13
|
+
该命令会自动完成:
|
|
14
|
+
1. 检查前置条件(Node.js、Python 3、OpenClaw)
|
|
15
|
+
2. 构建前端
|
|
16
|
+
3. 打包并安装插件到 `~/.openclaw/extensions/`
|
|
17
|
+
4. 自动安装 Python 依赖(fastapi、uvicorn 等)
|
|
145
18
|
|
|
146
|
-
|
|
19
|
+
**前置要求**:
|
|
20
|
+
- Node.js(构建前端)
|
|
21
|
+
- Python 3.10+
|
|
22
|
+
- OpenClaw(`npm install -g openclaw`)
|
|
147
23
|
|
|
148
|
-
|
|
24
|
+
安装完成后,执行任意 `openclaw` 命令即可自动启动 Dashboard。
|
|
149
25
|
|
|
150
26
|
---
|
|
151
27
|
|
|
152
|
-
### 从 path / 旧版安装迁移到 npm(迁移说明)
|
|
153
|
-
|
|
154
|
-
若此前使用 **`openclaw plugins install /某路径/plugin`**、手动拷贝到 `extensions`,或旧版安装方式,改用 **方式一** 时可能出现:
|
|
155
|
-
|
|
156
|
-
```text
|
|
157
|
-
plugin already exists: .../openclaw-agent-dashboard (delete it first)
|
|
158
|
-
```
|
|
159
|
-
|
|
160
|
-
**原因简述**:OpenClaw 对 **`source: "path"`** 的插件执行卸载时,**不会删除** `~/.openclaw/extensions/` 下对应目录(避免误删本机源码目录);配置已卸掉,但文件夹仍在,新的 `plugins install` 会拒绝覆盖。
|
|
161
|
-
|
|
162
|
-
**一次性处理(迁移只需做一次)**:
|
|
163
|
-
|
|
164
|
-
```bash
|
|
165
|
-
openclaw plugins uninstall openclaw-agent-dashboard --force
|
|
166
|
-
rm -rf ~/.openclaw/extensions/openclaw-agent-dashboard
|
|
167
|
-
openclaw plugins install openclaw-agent-dashboard@latest
|
|
168
|
-
```
|
|
169
|
-
|
|
170
|
-
**Windows(PowerShell)**:
|
|
171
|
-
|
|
172
|
-
```powershell
|
|
173
|
-
openclaw plugins uninstall openclaw-agent-dashboard --force
|
|
174
|
-
Remove-Item -Recurse -Force "$env:USERPROFILE\.openclaw\extensions\openclaw-agent-dashboard"
|
|
175
|
-
openclaw plugins install openclaw-agent-dashboard@latest
|
|
176
|
-
```
|
|
177
|
-
|
|
178
|
-
然后按 [方式一](#方式一openclaw-官方命令推荐全平台) 安装 Python 依赖,并重启 Gateway。
|
|
179
|
-
|
|
180
|
-
---
|
|
181
|
-
|
|
182
|
-
### 升级插件(已用 npm 安装)
|
|
183
|
-
|
|
184
|
-
对已通过 **npm** 安装的副本,请使用 OpenClaw 的 **更新** 命令(会覆盖旧版本,**不会**出现上面的 `plugin already exists`):
|
|
185
|
-
|
|
186
|
-
```bash
|
|
187
|
-
openclaw plugins update openclaw-agent-dashboard
|
|
188
|
-
# 或按官方文档更新全部 npm 插件,例如:
|
|
189
|
-
# openclaw plugins update --all
|
|
190
|
-
```
|
|
191
|
-
|
|
192
|
-
**不要**在已安装的情况下再跑 `openclaw plugins install openclaw-agent-dashboard@latest` 当作升级(可能被判定为「全新安装」且目录已存在而失败)。具体子命令以本机 `openclaw plugins --help` 为准。
|
|
193
|
-
|
|
194
28
|
## 命令说明
|
|
195
29
|
|
|
196
30
|
| 命令 | 说明 |
|
|
197
31
|
|------|------|
|
|
198
|
-
| `
|
|
199
|
-
| `npm run
|
|
200
|
-
| `npm run
|
|
201
|
-
| 维护者全流程 | 见 [docs/MAINTAINER_RELEASE_WORKFLOW.md](docs/MAINTAINER_RELEASE_WORKFLOW.md)(npm + Git + Release + 本机更新) |
|
|
202
|
-
| `npm run upgrade` | 开发:拉取最新代码 + `deploy` |
|
|
203
|
-
| `npm run pack` | 仅打包 `plugin/`(不安装) |
|
|
32
|
+
| `npm run deploy` | 打包 + 安装到 OpenClaw(首次安装或升级) |
|
|
33
|
+
| `npm run upgrade` | 拉取最新代码 + 部署(推荐用于升级) |
|
|
34
|
+
| `npm run pack` | 仅打包插件,不安装(开发调试用) |
|
|
204
35
|
| `npm run bundle` | 生成可分发的压缩包(离线分发) |
|
|
205
|
-
| `npm run start` | 独立启动 Dashboard(插件未自动启动时使用) |
|
|
206
|
-
|
|
207
|
-
## 离线分发
|
|
208
|
-
|
|
209
|
-
如果 git clone 失败,维护者可在开发机执行 `npm run bundle` 生成压缩包(文件名以终端输出为准)。
|
|
210
|
-
|
|
211
|
-
接收方解压并进入目录,执行 `npm run deploy`(需已安装 Node、openclaw、Python 等)。**更推荐直接使用 [方式一](#方式一openclaw-官方命令推荐全平台) 从 npm 安装**,无需 bundle。
|
|
212
|
-
|
|
213
|
-
## Python 依赖安装策略
|
|
214
36
|
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
1. **venv(推荐)** - 在插件目录下创建 `.venv`,隔离依赖,不受 PEP 668 影响;Debian/Ubuntu 下**必须**用此方式(系统禁止 pip 装到系统/用户目录)。
|
|
218
|
-
2. **pip --user(回退)** - 仅在不支持 venv 或非 Debian/Ubuntu 环境下尝试,安装到 `~/.local/`。
|
|
219
|
-
|
|
220
|
-
若安装失败,请确保已安装系统依赖(见 [系统要求](#系统要求))。
|
|
221
|
-
|
|
222
|
-
详见 [Python 环境兼容性](docs/python-environment-compatibility.md)。
|
|
223
|
-
|
|
224
|
-
## 独立运行(不作为插件)
|
|
225
|
-
|
|
226
|
-
如果需要独立运行(不作为插件):
|
|
37
|
+
### 升级插件
|
|
227
38
|
|
|
228
39
|
```bash
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
pip install -r requirements.txt
|
|
232
|
-
|
|
233
|
-
# 2. 构建前端
|
|
234
|
-
cd ../../frontend
|
|
235
|
-
npm install
|
|
236
|
-
npm run build
|
|
237
|
-
|
|
238
|
-
# 3. 启动后端
|
|
239
|
-
cd ../src/backend
|
|
240
|
-
uvicorn main:app --host 0.0.0.0 --port 38271
|
|
40
|
+
cd openclaw-agent-dashboard
|
|
41
|
+
npm run upgrade
|
|
241
42
|
```
|
|
242
43
|
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
```
|
|
246
|
-
openclaw-agent-dashboard/
|
|
247
|
-
├── frontend/ # Vue 3 前端
|
|
248
|
-
│ └── src/ # 组件源码
|
|
249
|
-
├── src/backend/ # FastAPI 后端
|
|
250
|
-
│ ├── api/ # API 路由
|
|
251
|
-
│ ├── data/ # 数据读取层
|
|
252
|
-
│ └── main.py # 入口
|
|
253
|
-
├── plugin/ # 插件打包配置
|
|
254
|
-
├── scripts/ # 安装与构建脚本
|
|
255
|
-
│ ├── lib/ # 公共函数库
|
|
256
|
-
│ ├── install.sh # 一键安装
|
|
257
|
-
│ └── install-plugin.sh # 源码安装
|
|
258
|
-
├── .github/workflows/ # CI/CD
|
|
259
|
-
└── docs/ # 设计文档
|
|
44
|
+
输出示例:
|
|
260
45
|
```
|
|
46
|
+
=== OpenClaw Agent Dashboard 插件升级 ===
|
|
261
47
|
|
|
262
|
-
|
|
48
|
+
1.0.0 → 1.1.0
|
|
263
49
|
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
| GET | `/api/chains` | 任务链路 |
|
|
50
|
+
✓ 前置条件检查通过
|
|
51
|
+
>>> 1/4 构建前端...
|
|
52
|
+
>>> 2/4 打包插件...
|
|
53
|
+
>>> 3/4 移除旧版本...
|
|
54
|
+
>>> 4/4 安装新版本...
|
|
55
|
+
>>> 检查 Python 依赖...
|
|
56
|
+
✓ Python 依赖已就绪
|
|
272
57
|
|
|
273
|
-
|
|
58
|
+
=== 升级完成 (1.0.0 → 1.1.0) ===
|
|
59
|
+
```
|
|
274
60
|
|
|
275
|
-
|
|
61
|
+
---
|
|
276
62
|
|
|
277
|
-
|
|
278
|
-
- `~/.openclaw/subagents/runs.json` - 子代理运行记录
|
|
279
|
-
- `~/.openclaw/agents/*/sessions/*.jsonl` - 会话消息
|
|
63
|
+
## 使用
|
|
280
64
|
|
|
281
|
-
|
|
65
|
+
插件加载后(执行任意 `openclaw` 命令时)会自动启动 Dashboard 服务。
|
|
282
66
|
|
|
283
|
-
|
|
284
|
-
|------|------|--------|
|
|
285
|
-
| `OPENCLAW_STATE_DIR` | OpenClaw 配置根目录(优先级最高) | - |
|
|
286
|
-
| `OPENCLAW_HOME` | 替代 HOME,用于解析 `~/.openclaw` | `$HOME` |
|
|
67
|
+
**访问地址**:http://localhost:38271(或你配置的端口)
|
|
287
68
|
|
|
288
|
-
|
|
69
|
+
### 端口配置(便于移植,无需改 openclaw.json)
|
|
289
70
|
|
|
290
|
-
|
|
71
|
+
优先级从高到低:
|
|
291
72
|
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
```
|
|
73
|
+
1. **环境变量**:`DASHBOARD_PORT=38271`
|
|
74
|
+
2. **独立配置文件**:`~/.openclaw-agent-dashboard/config.json`(可与 `OPENCLAW_AGENT_DASHBOARD_DATA` 环境变量配合)
|
|
75
|
+
```json
|
|
76
|
+
{ "port": 38271 }
|
|
77
|
+
```
|
|
78
|
+
3. **openclaw.json**:`plugins.entries.openclaw-agent-dashboard.config.port`
|
|
79
|
+
4. **默认**:38271
|
|
297
80
|
|
|
298
|
-
|
|
81
|
+
端口被占用时会自动尝试 38272、38273...
|
|
299
82
|
|
|
300
|
-
|
|
83
|
+
---
|
|
301
84
|
|
|
302
|
-
|
|
303
|
-
❌ Python 依赖安装失败
|
|
304
|
-
```
|
|
85
|
+
## 手动安装(故障恢复)
|
|
305
86
|
|
|
306
|
-
|
|
87
|
+
若 `npm run deploy` 失败,可分步执行:
|
|
307
88
|
|
|
308
89
|
```bash
|
|
309
|
-
#
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
# 推荐:用插件自带的 Node 脚本安装 venv 依赖(跨平台)
|
|
313
|
-
PLUGIN="$HOME/.openclaw/extensions/openclaw-agent-dashboard"
|
|
314
|
-
node "$PLUGIN/scripts/install-python-deps.js" "$PLUGIN" --verbose
|
|
315
|
-
```
|
|
90
|
+
# 1. 打包
|
|
91
|
+
npm run pack
|
|
316
92
|
|
|
317
|
-
|
|
93
|
+
# 2. 安装插件
|
|
94
|
+
openclaw plugins install ./plugin
|
|
318
95
|
|
|
319
|
-
|
|
96
|
+
# 3. 安装 Python 依赖(通常不需要,脚本会自动完成;Debian/Ubuntu 请用 venv)
|
|
320
97
|
cd ~/.openclaw/extensions/openclaw-agent-dashboard/dashboard
|
|
321
|
-
python3 -m venv .venv
|
|
322
|
-
# Linux/macOS:
|
|
323
|
-
.venv/bin/pip install -r requirements.txt
|
|
324
|
-
# Windows: .venv\Scripts\pip install -r requirements.txt
|
|
98
|
+
python3 -m venv .venv && .venv/bin/pip install -r requirements.txt
|
|
325
99
|
```
|
|
326
|
-
|
|
327
|
-
### 无法访问 Dashboard
|
|
328
|
-
|
|
329
|
-
若 http://localhost:38271 无法访问,可能是插件未随 Gateway 自动启动,可手动启动:
|
|
330
|
-
|
|
331
|
-
```bash
|
|
332
|
-
# 方式一:在项目目录下(需先 npm run deploy)
|
|
333
|
-
npm run start
|
|
334
|
-
|
|
335
|
-
# 方式二:使用已安装的插件目录(若有 .venv 可用 .venv/bin/python 替代 python3)
|
|
336
|
-
cd ~/.openclaw/extensions/openclaw-agent-dashboard/dashboard
|
|
337
|
-
OPENCLAW_HOME=~/.openclaw python3 -m uvicorn main:app --host 0.0.0.0 --port 38271
|
|
338
|
-
```
|
|
339
|
-
|
|
340
|
-
说明:`openclaw gateway restart` 重启的是 Gateway 网关(端口 18789),不是 Agent Dashboard(38271)。Dashboard 作为插件随 Gateway 加载,若 systemd 方式运行的 Gateway 未正确加载插件,需手动启动 Dashboard。
|
|
341
|
-
|
|
342
|
-
### 安装报错:plugin not found / Invalid config
|
|
343
|
-
|
|
344
|
-
若出现 `plugins.allow: plugin not found: openclaw-agent-dashboard` 或 `Invalid config`,说明配置中有脏数据(插件曾被加入 allow 但当前未被发现)。按以下步骤处理:
|
|
345
|
-
|
|
346
|
-
**方式一:先清理再安装(推荐)**
|
|
347
|
-
|
|
348
|
-
```bash
|
|
349
|
-
openclaw plugins uninstall openclaw-agent-dashboard
|
|
350
|
-
openclaw plugins install openclaw-agent-dashboard@latest
|
|
351
|
-
```
|
|
352
|
-
|
|
353
|
-
**方式二:手动编辑配置**
|
|
354
|
-
|
|
355
|
-
编辑 `~/.openclaw/openclaw.json`,在 `plugins` 下:
|
|
356
|
-
|
|
357
|
-
- 若存在 `allow` 数组且包含 `"openclaw-agent-dashboard"`,将其移除
|
|
358
|
-
- 若存在 `entries.openclaw-agent-dashboard`,可删除
|
|
359
|
-
- 若存在 `installs.openclaw-agent-dashboard` 且为 `source: "path"` 的旧记录,可删除后改为官方 `npm` 安装
|
|
360
|
-
|
|
361
|
-
保存后再执行 `openclaw plugins install openclaw-agent-dashboard@latest`。
|
|
362
|
-
|
|
363
|
-
## 许可证
|
|
364
|
-
|
|
365
|
-
MIT
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.timeline-step[data-v-b8bd62e0]{border-radius:6px;overflow:hidden;transition:all .2s}.step-header[data-v-b8bd62e0]{display:flex;justify-content:space-between;align-items:center;padding:10px 12px;cursor:pointer;-webkit-user-select:none;user-select:none}.step-header[data-v-b8bd62e0]:hover{filter:brightness(.98)}.header-left[data-v-b8bd62e0]{display:flex;align-items:center;gap:8px;flex:1;min-width:0}.step-icon[data-v-b8bd62e0]{font-size:14px;flex-shrink:0}.step-type[data-v-b8bd62e0]{font-size:12px;font-weight:600;color:#374151;flex-shrink:0}.step-subtitle[data-v-b8bd62e0]{font-size:10px;color:#9ca3af;background:#0000000a;padding:1px 6px;border-radius:3px;flex-shrink:0}.collapse-summary[data-v-b8bd62e0]{font-size:11px;color:#9ca3af;max-width:180px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.step-time[data-v-b8bd62e0]{font-size:11px;color:#9ca3af;flex-shrink:0}.step-duration[data-v-b8bd62e0]{font-size:11px;color:#6b7280;background:#0000000d;padding:2px 6px;border-radius:3px;flex-shrink:0}.header-right[data-v-b8bd62e0]{display:flex;align-items:center;gap:8px;flex-shrink:0}.step-tokens[data-v-b8bd62e0]{font-size:11px;color:#9ca3af}.token-label[data-v-b8bd62e0]{margin-right:4px}.expand-icon[data-v-b8bd62e0]{font-size:10px;color:#9ca3af}.execution-time[data-v-b8bd62e0]{font-size:10px;color:#64748b;background:#f1f5f9;padding:1px 6px;border-radius:3px}.pair-indicator[data-v-b8bd62e0]{font-size:10px;cursor:pointer;opacity:.6;transition:opacity .2s}.pair-indicator[data-v-b8bd62e0]:hover{opacity:1}.step-user .step-header[data-v-b8bd62e0]{background:#f0f9ff;border-left:3px solid #3b82f6}.step-thinking .step-header[data-v-b8bd62e0]{background:#fef3c7;border-left:3px solid #f59e0b}.step-text .step-header[data-v-b8bd62e0]{background:#f0fdf4;border-left:3px solid #22c55e}.step-toolCall .step-header[data-v-b8bd62e0]{background:#f5f3ff;border-left:3px solid #8b5cf6}.step-toolResult .step-header[data-v-b8bd62e0]{background:#ecfdf5;border-left:3px solid #10b981}.step-error .step-header[data-v-b8bd62e0]{background:#fef2f2;border-left:3px solid #dc2626}.step-toolResult.status-error .step-header[data-v-b8bd62e0]{border-left-color:#ef4444}.is-paired-result[data-v-b8bd62e0]{margin-left:20px;border-left:2px dashed #d1d5db!important;border-radius:0 6px 6px 0}.timeline-step.highlighted[data-v-b8bd62e0]{box-shadow:0 0 0 2px #3b82f6;transform:scale(1.01);transition:all .2s ease}.timeline-step.highlighted .step-header[data-v-b8bd62e0]{background:#eff6ff!important}.step-content[data-v-b8bd62e0]{padding:0 12px 12px;margin-top:-4px}.content-block[data-v-b8bd62e0]{margin-top:8px}.content-block pre[data-v-b8bd62e0]{margin:0;padding:10px;background:#00000008;border-radius:4px;font-size:12px;line-height:1.5;white-space:pre-wrap;word-break:break-word;max-height:300px;overflow-y:auto}.content-block pre.truncated[data-v-b8bd62e0]{max-height:200px}.thinking-label[data-v-b8bd62e0]{font-size:11px;color:#92400e;margin-bottom:6px}.thinking-content pre[data-v-b8bd62e0]{background:#fffbeb;color:#78350f}.section-label[data-v-b8bd62e0]{font-size:11px;color:#6b7280;margin-bottom:4px}.code-block[data-v-b8bd62e0]{font-family:Monaco,Menlo,monospace;font-size:11px}.result-header[data-v-b8bd62e0]{display:flex;justify-content:space-between;align-items:center;margin-bottom:6px}.result-status[data-v-b8bd62e0]{font-size:12px;font-weight:500}.result-status.ok[data-v-b8bd62e0]{color:#059669}.result-status.error[data-v-b8bd62e0]{color:#dc2626}.tool-error-section[data-v-b8bd62e0]{margin-bottom:12px;padding:10px;background:#fef2f2;border-radius:4px;border-left:3px solid #ef4444}.tool-error-message[data-v-b8bd62e0]{font-size:12px;color:#991b1b;line-height:1.5;word-break:break-word}.tool-error-suggestion[data-v-b8bd62e0]{margin-top:8px;padding-top:8px;border-top:1px solid #fecaca}.tool-error-suggestion .suggestion-label[data-v-b8bd62e0]{font-size:11px;color:#374151;margin-bottom:4px}.tool-error-suggestion ul[data-v-b8bd62e0]{margin:0;padding-left:16px;font-size:12px;color:#4b5563}.tool-error-suggestion li[data-v-b8bd62e0]{margin:2px 0}.copy-btn[data-v-b8bd62e0]{font-size:11px;padding:2px 8px;border:1px solid #e5e7eb;border-radius:3px;background:#fff;cursor:pointer}.copy-btn[data-v-b8bd62e0]:hover{background:#f3f4f6}.show-more-btn[data-v-b8bd62e0]{display:block;width:100%;margin-top:8px;padding:6px;font-size:11px;color:#6b7280;background:#00000005;border:none;border-radius:4px;cursor:pointer}.show-more-btn[data-v-b8bd62e0]:hover{background:#0000000d}.error-content[data-v-b8bd62e0]{background:#fef2f2;padding:10px;border-radius:4px}.error-type[data-v-b8bd62e0]{font-size:12px;font-weight:600;color:#dc2626;margin-bottom:6px}.error-message[data-v-b8bd62e0]{font-size:12px;color:#7f1d1d;padding:8px;background:#fee2e2;border-radius:4px;margin-bottom:8px}.error-suggestion[data-v-b8bd62e0]{margin-top:8px;padding:8px;background:#fff;border-radius:4px}.suggestion-label[data-v-b8bd62e0]{font-size:11px;color:#374151;margin-bottom:4px}.error-suggestion ul[data-v-b8bd62e0]{margin:0;padding-left:16px;font-size:12px;color:#4b5563}.error-suggestion li[data-v-b8bd62e0]{margin:4px 0}.timeline-connector[data-v-01a6bfe6]{display:flex;flex-direction:column;align-items:center;padding:4px 0}.connector-line[data-v-01a6bfe6]{width:2px;height:8px;background:#d1d5db}.connector-arrow[data-v-01a6bfe6]{font-size:8px;color:#9ca3af;line-height:1}.timeline-round[data-v-2aa49052]{margin-bottom:16px;border-radius:8px;border:1px solid #e5e7eb;overflow:hidden;background:#fff}.round-header[data-v-2aa49052]{display:flex;align-items:center;gap:12px;padding:8px 12px;background:linear-gradient(135deg,#f8fafc,#f1f5f9);border-bottom:1px solid #e5e7eb}.round-badge[data-v-2aa49052]{font-size:11px;font-weight:600;color:#4338ca;background:#e0e7ff;padding:2px 8px;border-radius:4px}.round-trigger[data-v-2aa49052]{font-size:12px;color:#64748b;flex:1}.round-stats[data-v-2aa49052]{font-size:11px;color:#9ca3af;background:#0000000a;padding:2px 6px;border-radius:3px}.round-content[data-v-2aa49052]{padding:12px}.trigger-user_input .round-header[data-v-2aa49052]{border-left:3px solid #3b82f6}.trigger-subagent_result .round-header[data-v-2aa49052]{border-left:3px solid #10b981}.trigger-tool_result .round-header[data-v-2aa49052]{border-left:3px solid #f59e0b}.trigger-start .round-header[data-v-2aa49052]{border-left:3px solid #8b5cf6}.tool-link[data-v-d1e21896]{display:flex;align-items:center;padding:4px 0 4px 28px;position:relative}.link-line[data-v-d1e21896]{display:flex;flex-direction:column;align-items:center;position:absolute;left:12px;top:0;bottom:0}.link-connector[data-v-d1e21896]{width:2px;flex:1;background:linear-gradient(to bottom,#94a3b8 0%,#94a3b8 50%,transparent 50%);background-size:2px 8px;min-height:20px}.link-dot[data-v-d1e21896]{width:8px;height:8px;border-radius:50%;background:#94a3b8;border:2px solid #fff;box-shadow:0 0 0 1px #e5e7eb}.link-dot.bottom[data-v-d1e21896]{position:absolute;bottom:0}.link-time[data-v-d1e21896]{font-size:10px;color:#64748b;background:#f8fafc;padding:1px 6px;border-radius:3px;margin-left:8px;border:1px solid #e5e7eb}.link-error .link-connector[data-v-d1e21896]{background:linear-gradient(to bottom,#ef4444 0%,#ef4444 50%,transparent 50%);background-size:2px 8px}.link-error .link-dot[data-v-d1e21896]{background:#ef4444}.link-error .link-time[data-v-d1e21896]{color:#dc2626;background:#fef2f2;border-color:#fecaca}.link-active .link-connector[data-v-d1e21896]{background:linear-gradient(to bottom,#3b82f6 0%,#3b82f6 50%,transparent 50%);background-size:2px 8px}.link-active .link-dot[data-v-d1e21896]{background:#3b82f6;box-shadow:0 0 0 2px #3b82f64d}.link-active .link-time[data-v-d1e21896]{color:#2563eb;background:#eff6ff;border-color:#bfdbfe}.timeline-view[data-v-4ac4b073]{background:#fff;border-radius:8px;border:1px solid #e5e7eb;overflow:hidden}.timeline-header[data-v-4ac4b073]{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;background:#f9fafb;border-bottom:1px solid #e5e7eb}.header-left[data-v-4ac4b073]{display:flex;align-items:center;gap:12px}.title[data-v-4ac4b073]{font-weight:600;font-size:14px;color:#374151}.agent-info[data-v-4ac4b073]{font-size:13px;color:#6b7280}.agent-info .model[data-v-4ac4b073]{color:#9ca3af}.header-right[data-v-4ac4b073]{display:flex;align-items:center;gap:12px}.status-badge[data-v-4ac4b073]{font-size:12px;padding:4px 8px;border-radius:4px}.status-badge.status-running[data-v-4ac4b073]{background:#fef3c7;color:#92400e}.status-badge.status-completed[data-v-4ac4b073]{background:#d1fae5;color:#065f46}.status-badge.status-error[data-v-4ac4b073]{background:#fee2e2;color:#991b1b}.status-badge.status-no_sessions[data-v-4ac4b073]{background:#f3f4f6;color:#6b7280}.refresh-btn[data-v-4ac4b073]{font-size:12px;padding:4px 10px;border:1px solid #e5e7eb;border-radius:4px;background:#fff;cursor:pointer;color:#374151}.refresh-btn[data-v-4ac4b073]:hover:not(:disabled){background:#f3f4f6}.refresh-btn[data-v-4ac4b073]:disabled{opacity:.5;cursor:not-allowed}.loading-state[data-v-4ac4b073],.empty-state[data-v-4ac4b073]{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:48px;color:#6b7280;gap:12px}.spinner[data-v-4ac4b073]{width:24px;height:24px;border:3px solid #e5e7eb;border-top-color:#3b82f6;border-radius:50%;animation:spin-4ac4b073 1s linear infinite}@keyframes spin-4ac4b073{to{transform:rotate(360deg)}}.empty-icon[data-v-4ac4b073]{font-size:32px}.empty-message[data-v-4ac4b073]{font-size:14px;color:#374151;font-weight:500}.empty-hint[data-v-4ac4b073]{margin-top:8px;font-size:12px;color:#9ca3af;text-align:center;max-width:280px;line-height:1.5}.timeline-content[data-v-4ac4b073]{padding:16px}.timeline-legend[data-v-4ac4b073]{display:flex;flex-wrap:wrap;gap:12px 20px;font-size:11px;color:#6b7280;margin-bottom:12px;padding:8px 10px;background:#f9fafb;border-radius:6px}.legend-item[data-v-4ac4b073]{display:inline-flex;align-items:center;gap:4px}.legend-icon[data-v-4ac4b073]{font-size:12px}.session-info[data-v-4ac4b073]{display:flex;gap:16px;font-size:12px;color:#9ca3af;margin-bottom:16px;padding-bottom:12px;border-bottom:1px dashed #e5e7eb}.steps-list[data-v-4ac4b073]{display:flex;flex-direction:column}.tool-execution-label[data-v-4ac4b073]{display:flex;align-items:center;gap:12px;margin:12px 0;padding:0 4px}.tool-execution-label .label-line[data-v-4ac4b073]{flex:1;height:1px;background:#e5e7eb}.tool-execution-label .label-text[data-v-4ac4b073]{font-size:11px;color:#9ca3af;white-space:nowrap}.timeline-footer[data-v-4ac4b073]{margin-top:16px;padding-top:16px;border-top:1px solid #e5e7eb}.stats-grid[data-v-4ac4b073]{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}.stat-item[data-v-4ac4b073]{display:flex;flex-direction:column;align-items:center;padding:8px;background:#f9fafb;border-radius:6px}.stat-label[data-v-4ac4b073]{font-size:11px;color:#9ca3af;margin-bottom:4px}.stat-value[data-v-4ac4b073]{font-size:14px;font-weight:600;color:#374151}.chain-node[data-v-973c6755]{display:flex;flex-direction:column;align-items:center;padding:12px 16px;min-width:120px;background:#fff;border-radius:8px;border:2px solid #e5e7eb;cursor:pointer;transition:all .2s}.chain-node[data-v-973c6755]:hover{transform:translateY(-2px);box-shadow:0 4px 12px #0000001a}.chain-node.selected[data-v-973c6755]{box-shadow:0 0 0 4px #3b82f64d}.chain-node.status-pending[data-v-973c6755]{border-color:#9ca3af;background:#f9fafb}.chain-node.status-running[data-v-973c6755]{border-color:#3b82f6;background:#eff6ff;animation:pulse-973c6755 2s infinite}.chain-node.status-completed[data-v-973c6755]{border-color:#22c55e;background:#f0fdf4}.chain-node.status-error[data-v-973c6755]{border-color:#ef4444;background:#fef2f2}@keyframes pulse-973c6755{0%,to{opacity:1}50%{opacity:.5}to{opacity:1}}.node-icon[data-v-973c6755]{font-size:24px;margin-bottom:8px}.node-info[data-v-973c6755]{text-align:center}.node-name[data-v-973c6755]{font-size:13px;font-weight:600;color:#374151;margin-bottom:4px}.node-role[data-v-973c6755]{font-size:11px;color:#6b7280}.node-status[data-v-973c6755]{font-size:11px;padding:2px 6px;border-radius:4px;margin-top:8px}.status-pending .node-status[data-v-973c6755]{background:#f3f4f6;color:#6b7280}.status-running .node-status[data-v-973c6755]{background:#dbeafe;color:#1e40af}.status-completed .node-status[data-v-973c6755]{background:#d1fae5;color:#065f46}.status-error .node-status[data-v-973c6755]{background:#fee2e2;color:#991b1b}.node-time[data-v-973c6755]{font-size:11px;color:#9ca3af;margin-top:8px}.node-progress[data-v-973c6755]{margin-top:8px}.progress-spinner[data-v-973c6755]{width:16px;height:16px;border:2px solid #e5e7eb;border-top-color:#3b82f6;border-radius:50%;animation:spin-973c6755 1s linear infinite}@keyframes spin-973c6755{to{transform:rotate(360deg)}}.chain-edge[data-v-c94ab96b]{display:flex;align-items:center;margin:0 4px}.edge-running svg line[data-v-c94ab96b]{animation:pulse-c94ab96b 1.5s infinite}.edge-completed[data-v-c94ab96b]{opacity:1}.edge-pending[data-v-c94ab96b]{opacity:.5}.edge-error[data-v-c94ab96b]{opacity:.8}@keyframes pulse-c94ab96b{0%,to{opacity:1}50%{opacity:.5}}.chain-view[data-v-5e7f751f]{background:#fff;border-radius:8px;border:1px solid #e5e7eb;overflow:hidden}.chain-header[data-v-5e7f751f]{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;background:#f9fafb;border-bottom:1px solid #e5e7eb}.header-left[data-v-5e7f751f]{display:flex;align-items:center;gap:12px}.title[data-v-5e7f751f]{font-weight:600;font-size:14px;color:#374151}.project-info[data-v-5e7f751f]{font-size:13px;color:#6b7280}.header-right[data-v-5e7f751f]{display:flex;align-items:center;gap:12px}.status-badge[data-v-5e7f751f]{font-size:12px;padding:4px 8px;border-radius:4px}.status-badge.status-running[data-v-5e7f751f]{background:#fef3c7;color:#92400e}.status-badge.status-completed[data-v-5e7f751f]{background:#d1fae5;color:#065f46}.status-badge.status-error[data-v-5e7f751f]{background:#fee2e2;color:#991b1b}.status-badge.status-empty[data-v-5e7f751f]{background:#f3f4f6;color:#6b7280}.refresh-btn[data-v-5e7f751f]{font-size:12px;padding:4px 10px;border:1px solid #e5e7eb;border-radius:4px;background:#fff;cursor:pointer;color:#374151}.refresh-btn[data-v-5e7f751f]:hover:not(:disabled){background:#f3f4f6}.refresh-btn[data-v-5e7f751f]:disabled{opacity:.5;cursor:not-allowed}.loading-state[data-v-5e7f751f],.empty-state[data-v-5e7f751f]{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:48px;color:#6b7280;gap:12px}.spinner[data-v-5e7f751f]{width:24px;height:24px;border:3px solid #e5e7eb;border-top-color:#3b82f6;border-radius:50%;animation:spin-5e7f751f 1s linear infinite}@keyframes spin-5e7f751f{to{transform:rotate(360deg)}}.empty-icon[data-v-5e7f751f]{font-size:32px}.empty-hint[data-v-5e7f751f]{margin-top:8px;font-size:12px;color:#9ca3af;text-align:center;max-width:280px}.chain-content[data-v-5e7f751f]{padding:16px}.root-task[data-v-5e7f751f]{padding:12px;background:#f9fafb;border-radius:6px;margin-bottom:16px}.task-label[data-v-5e7f751f]{font-size:11px;color:#9ca3af;margin-bottom:4px}.task-text[data-v-5e7f751f]{font-size:14px;color:#374151;font-weight:500}.task-meta[data-v-5e7f751f]{margin-top:8px;font-size:12px;color:#6b7280}.chain-diagram[data-v-5e7f751f]{margin:20px 0}.diagram-container[data-v-5e7f751f]{display:flex;align-items:center;justify-content:center;gap:0;flex-wrap:wrap}.chain-progress[data-v-5e7f751f]{margin-top:16px}.progress-bar[data-v-5e7f751f]{height:8px;background:#e5e7eb;border-radius:4px;overflow:hidden}.progress-fill[data-v-5e7f751f]{height:100%;background:linear-gradient(90deg,#22c55e,#3b82f6);transition:width .3s ease}.progress-text[data-v-5e7f751f]{margin-top:8px;font-size:12px;color:#6b7280;text-align:center}.node-detail[data-v-5e7f751f]{margin-top:16px;padding:16px;background:#f9fafb;border-radius:8px;border:1px solid #e5e7eb}.detail-header[data-v-5e7f751f]{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px}.detail-title[data-v-5e7f751f]{font-size:14px;font-weight:600;color:#374151}.detail-status[data-v-5e7f751f]{font-size:12px;padding:4px 8px;border-radius:4px}.detail-content[data-v-5e7f751f]{display:flex;flex-direction:column;gap:12px}.section-label[data-v-5e7f751f]{font-size:11px;color:#9ca3af;margin-bottom:4px}.section-value[data-v-5e7f751f]{font-size:13px;color:#374151}.detail-row[data-v-5e7f751f]{display:flex;gap:24px}.detail-item[data-v-5e7f751f]{display:flex;flex-direction:column}.item-label[data-v-5e7f751f]{font-size:11px;color:#9ca3af}.item-value[data-v-5e7f751f]{font-size:13px;color:#374151;font-weight:500}.artifacts-list[data-v-5e7f751f]{display:flex;flex-direction:column;gap:4px}.artifact-item[data-v-5e7f751f]{font-size:12px;color:#6b7280;padding:4px 8px;background:#fff;border-radius:4px}.agent-config-panel[data-v-c0a2c245]{padding:12px;max-height:500px;overflow-y:auto}.header[data-v-c0a2c245]{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px}.header h3[data-v-c0a2c245]{margin:0;font-size:14px;color:#374151}.refresh-btn[data-v-c0a2c245]{padding:4px 12px;font-size:12px;border:1px solid #d1d5db;border-radius:4px;background:#fff;cursor:pointer}.refresh-btn[data-v-c0a2c245]:hover:not(:disabled){background:#f3f4f6}.refresh-btn[data-v-c0a2c245]:disabled{opacity:.5;cursor:not-allowed}.loading-state[data-v-c0a2c245],.error-state[data-v-c0a2c245]{text-align:center;padding:40px 20px;color:#6b7280}.error-state[data-v-c0a2c245]{color:#dc2626}.config-section[data-v-c0a2c245]{margin-bottom:16px;padding-bottom:16px;border-bottom:1px solid #e5e7eb}.config-section[data-v-c0a2c245]:last-child{border-bottom:none;margin-bottom:0}.config-section h4[data-v-c0a2c245]{margin:0 0 12px;font-size:13px;color:#374151;font-weight:600}.info-grid[data-v-c0a2c245]{display:grid;grid-template-columns:1fr 1fr;gap:8px}.info-item[data-v-c0a2c245]{display:flex;flex-direction:column;gap:2px}.info-item.full-width[data-v-c0a2c245]{grid-column:1 / -1}.info-item .label[data-v-c0a2c245]{font-size:11px;color:#6b7280}.info-item .value[data-v-c0a2c245]{font-size:13px;color:#1f2937}.info-item .value.monospace[data-v-c0a2c245]{font-family:monospace;font-size:12px;word-break:break-all}.info-item .value.status-idle[data-v-c0a2c245]{color:#22c55e}.info-item .value.status-working[data-v-c0a2c245]{color:#f59e0b}.info-item .value.status-down[data-v-c0a2c245]{color:#ef4444}.model-config[data-v-c0a2c245]{display:flex;flex-direction:column;gap:16px}.model-field label[data-v-c0a2c245]{display:block;font-size:12px;color:#374151;margin-bottom:6px;font-weight:500}.model-select-wrapper[data-v-c0a2c245]{display:flex;flex-direction:column;gap:4px}.model-select[data-v-c0a2c245]{width:100%;padding:8px 10px;font-size:13px;border:1px solid #d1d5db;border-radius:6px;background:#fff;cursor:pointer}.model-select[data-v-c0a2c245]:focus{outline:none;border-color:#3b82f6}.model-select[data-v-c0a2c245]:disabled{background:#f3f4f6;cursor:not-allowed}.model-select.small[data-v-c0a2c245]{padding:6px 8px;font-size:12px}.current-model[data-v-c0a2c245]{font-size:11px;color:#6b7280}.fallbacks-list[data-v-c0a2c245]{display:flex;flex-direction:column;gap:8px}.fallback-item[data-v-c0a2c245]{display:flex;gap:8px;align-items:center}.fallback-item .model-select[data-v-c0a2c245]{flex:1}.remove-btn[data-v-c0a2c245]{width:28px;height:28px;border:1px solid #d1d5db;border-radius:4px;background:#fff;cursor:pointer;font-size:16px;color:#6b7280;display:flex;align-items:center;justify-content:center}.remove-btn[data-v-c0a2c245]:hover:not(:disabled){background:#fee2e2;border-color:#fca5a5;color:#dc2626}.add-fallback-btn[data-v-c0a2c245]{padding:6px 12px;font-size:12px;border:1px dashed #d1d5db;border-radius:4px;background:#f9fafb;cursor:pointer;color:#6b7280}.add-fallback-btn[data-v-c0a2c245]:hover:not(:disabled){border-color:#3b82f6;color:#3b82f6}.add-fallback-btn[data-v-c0a2c245]:disabled{opacity:.5;cursor:not-allowed}.model-actions[data-v-c0a2c245]{display:flex;gap:8px;margin-top:8px}.save-btn[data-v-c0a2c245]{padding:8px 16px;font-size:13px;border:none;border-radius:6px;background:#3b82f6;color:#fff;cursor:pointer;font-weight:500}.save-btn[data-v-c0a2c245]:hover:not(:disabled){background:#2563eb}.save-btn[data-v-c0a2c245]:disabled{opacity:.5;cursor:not-allowed}.reset-btn[data-v-c0a2c245]{padding:8px 16px;font-size:13px;border:1px solid #d1d5db;border-radius:6px;background:#fff;cursor:pointer;color:#6b7280}.reset-btn[data-v-c0a2c245]:hover:not(:disabled){background:#f3f4f6}.description-text[data-v-c0a2c245]{margin:0;font-size:13px;color:#4b5563;line-height:1.5;white-space:pre-wrap}.error-analysis-view[data-v-bc05715d]{padding:12px;max-height:600px;overflow-y:auto}.header[data-v-bc05715d]{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px}.header h3[data-v-bc05715d]{margin:0;font-size:14px;color:#374151}.refresh-btn[data-v-bc05715d]{padding:4px 12px;font-size:12px;border:1px solid #d1d5db;border-radius:4px;background:#fff;cursor:pointer}.refresh-btn[data-v-bc05715d]:hover:not(:disabled){background:#f3f4f6}.refresh-btn[data-v-bc05715d]:disabled{opacity:.5}.agent-summary[data-v-bc05715d]{display:flex;gap:12px;margin-bottom:16px;flex-wrap:wrap}.summary-card[data-v-bc05715d]{display:flex;flex-direction:column;align-items:center;padding:10px 16px;background:#f9fafb;border-radius:8px;min-width:70px}.summary-card.total[data-v-bc05715d]{background:#eff6ff}.summary-card.total .count[data-v-bc05715d]{color:#3b82f6}.summary-card.critical[data-v-bc05715d]{background:#fef2f2}.summary-card.critical .count[data-v-bc05715d]{color:#dc2626}.summary-card.high[data-v-bc05715d]{background:#fff7ed}.summary-card.high .count[data-v-bc05715d]{color:#f97316}.summary-card.medium[data-v-bc05715d]{background:#fffbeb}.summary-card.medium .count[data-v-bc05715d]{color:#f59e0b}.summary-card .count[data-v-bc05715d]{font-size:20px;font-weight:700}.summary-card .label[data-v-bc05715d]{font-size:10px;color:#6b7280;margin-top:2px}.loading-state[data-v-bc05715d],.empty-state[data-v-bc05715d]{text-align:center;padding:40px 20px;color:#6b7280}.errors-list[data-v-bc05715d]{display:flex;flex-direction:column;gap:8px;margin-bottom:16px}.error-item[data-v-bc05715d]{padding:10px;background:#fff;border-radius:6px;border-left:3px solid #e5e7eb;cursor:pointer}.error-item.severity-critical[data-v-bc05715d]{border-left-color:#dc2626;background:#fef2f2}.error-item.severity-high[data-v-bc05715d]{border-left-color:#f97316;background:#fff7ed}.error-item.severity-medium[data-v-bc05715d]{border-left-color:#f59e0b;background:#fffbeb}.error-item.severity-low[data-v-bc05715d]{border-left-color:#6b7280}.error-header[data-v-bc05715d]{display:flex;justify-content:space-between;align-items:center;margin-bottom:6px;flex-wrap:wrap;gap:4px}.error-type[data-v-bc05715d]{font-weight:600;font-size:13px}.error-badges[data-v-bc05715d]{display:flex;gap:4px}.badge[data-v-bc05715d]{font-size:10px;padding:2px 6px;border-radius:3px;background:#e5e7eb;color:#6b7280}.badge.archived[data-v-bc05715d]{background:#fef3c7;color:#92400e}.badge.provider[data-v-bc05715d]{background:#dbeafe;color:#1d4ed8}.badge.model[data-v-bc05715d]{background:#f3e8ff;color:#7c3aed;font-family:monospace}.error-time[data-v-bc05715d]{font-size:11px;color:#9ca3af}.error-message[data-v-bc05715d]{font-size:12px;color:#4b5563;line-height:1.4}.error-detail[data-v-bc05715d]{margin-top:12px;padding-top:12px;border-top:1px solid #e5e7eb}.detail-section[data-v-bc05715d]{margin-bottom:12px}.detail-section[data-v-bc05715d]:last-child{margin-bottom:0}.detail-section h4[data-v-bc05715d]{margin:0 0 8px;font-size:12px;color:#374151}.error-full[data-v-bc05715d]{margin:0;padding:10px;background:#1f2937;color:#e5e7eb;border-radius:6px;font-size:11px;overflow-x:auto;white-space:pre-wrap;word-break:break-all;max-height:150px}.tool-chain[data-v-bc05715d]{display:flex;flex-direction:column;gap:4px}.tool-item[data-v-bc05715d]{display:flex;align-items:center;gap:8px;padding:6px 10px;background:#f3f4f6;border-radius:4px;font-size:12px}.tool-index[data-v-bc05715d]{width:20px;height:20px;background:#3b82f6;color:#fff;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:10px;font-weight:600}.tool-name[data-v-bc05715d]{flex:1;font-family:monospace;color:#1f2937}.tool-time[data-v-bc05715d]{font-size:10px;color:#9ca3af}.suggestions[data-v-bc05715d]{margin:0;padding-left:18px}.suggestions li[data-v-bc05715d]{margin:6px 0;font-size:12px;color:#4b5563}.detail-section.meta[data-v-bc05715d]{display:flex;gap:16px;font-size:10px;color:#9ca3af;font-family:monospace}.type-summary[data-v-bc05715d]{padding-top:16px;border-top:1px solid #e5e7eb}.type-summary h4[data-v-bc05715d]{margin:0 0 12px;font-size:13px;color:#374151}.type-bars[data-v-bc05715d]{display:flex;flex-direction:column;gap:8px}.type-bar[data-v-bc05715d]{display:flex;align-items:center;gap:8px}.type-label[data-v-bc05715d]{width:80px;font-size:11px;color:#6b7280}.bar-container[data-v-bc05715d]{flex:1;height:8px;background:#e5e7eb;border-radius:4px;overflow:hidden}.bar-fill[data-v-bc05715d]{height:100%;background:#3b82f6;border-radius:4px;transition:width .3s}.type-count[data-v-bc05715d]{width:30px;font-size:11px;color:#374151;text-align:right}.panel-overlay[data-v-aec763c1]{position:fixed;top:0;left:0;right:0;bottom:0;background:#00000080;display:flex;align-items:center;justify-content:center;z-index:1000}.panel[data-v-aec763c1]{width:800px;max-width:92vw;max-height:90vh;background:#fff;border-radius:12px;box-shadow:0 8px 32px #0003;overflow:hidden;display:flex;flex-direction:column}.header[data-v-aec763c1]{display:flex;justify-content:space-between;align-items:center;padding:1.5rem;border-bottom:1px solid #e5e7eb}.header h2[data-v-aec763c1]{margin:0;font-size:1.5rem;color:#333}.close-btn[data-v-aec763c1]{font-size:2rem;line-height:1;background:none;border:none;cursor:pointer;color:#999;padding:0;width:32px;height:32px;display:flex;align-items:center;justify-content:center}.close-btn[data-v-aec763c1]:hover{color:#333}.content[data-v-aec763c1]{padding:1.5rem;overflow-y:auto}.section[data-v-aec763c1]{margin-bottom:1.5rem}.section[data-v-aec763c1]:last-child{margin-bottom:0}.section h3[data-v-aec763c1]{margin:0 0 .75rem;font-size:1rem;color:#666}.status-info[data-v-aec763c1]{display:flex;align-items:center;gap:.5rem}.status-dot[data-v-aec763c1]{width:12px;height:12px;border-radius:50%}.status-dot.status-idle[data-v-aec763c1]{background:#4ade80}.status-dot.status-working[data-v-aec763c1]{background:#fbbf24}.status-dot.status-down[data-v-aec763c1]{background:#ef4444}.status-text[data-v-aec763c1]{font-size:1.1rem;color:#333;font-weight:500}.error-title[data-v-aec763c1]{color:#dc2626}.error-info[data-v-aec763c1]{padding:1rem;background:#fef2f2;border-radius:6px;border-left:4px solid #dc2626}.error-type[data-v-aec763c1]{font-weight:600;color:#dc2626;margin-bottom:.5rem}.error-message[data-v-aec763c1]{font-size:.9rem;color:#666}.activity-list[data-v-aec763c1]{display:flex;flex-direction:column;gap:.75rem}.activity-item[data-v-aec763c1]{padding:.75rem;border-radius:6px;font-size:.9rem}.activity-item.working[data-v-aec763c1]{background:#fef3c7;color:#92400e}.activity-item.idle[data-v-aec763c1]{background:#d1fae5;color:#065f46}.activity-item.down[data-v-aec763c1]{background:#fee2e2;color:#991b1b}.view-tabs[data-v-aec763c1]{display:flex;flex-wrap:wrap;gap:6px 10px;margin-bottom:12px}.tab-btn[data-v-aec763c1]{padding:6px 12px;font-size:12px;border:1px solid #e5e7eb;border-radius:6px;background:#fff;cursor:pointer;color:#6b7280;transition:all .2s;flex-shrink:0}.tab-btn[data-v-aec763c1]:hover{background:#f9fafb}.tab-btn.active[data-v-aec763c1]{background:#3b82f6;color:#fff;border-color:#3b82f6}.timeline-container[data-v-aec763c1],.chain-container[data-v-aec763c1]{border:1px solid #e5e7eb;border-radius:8px;overflow:hidden}.advanced-container[data-v-aec763c1]{display:flex;flex-direction:column;gap:16px}.advanced-section[data-v-aec763c1]{border:1px solid #e5e7eb;border-radius:8px;overflow:hidden}.advanced-section h4[data-v-aec763c1]{margin:0;padding:10px 14px;background:#f9fafb;border-bottom:1px solid #e5e7eb;font-size:13px;font-weight:600;color:#374151}.diagnostic-panel[data-v-aec763c1]{border-radius:8px;overflow:hidden;border:1px solid}.diagnostic-panel.severity-warning[data-v-aec763c1]{border-color:#fbbf24;background:#fffbeb}.diagnostic-panel.severity-critical[data-v-aec763c1]{border-color:#ef4444;background:#fef2f2}.diagnostic-header[data-v-aec763c1]{display:flex;align-items:center;gap:8px;padding:12px 16px;font-weight:600}.severity-warning .diagnostic-header[data-v-aec763c1]{background:#fef3c7;color:#92400e}.severity-critical .diagnostic-header[data-v-aec763c1]{background:#fee2e2;color:#991b1b}.diagnostic-icon[data-v-aec763c1]{font-size:18px}.diagnostic-title[data-v-aec763c1]{font-size:14px}.diagnostic-content[data-v-aec763c1]{padding:12px 16px}.diagnostic-item[data-v-aec763c1]{display:flex;gap:8px;margin-bottom:8px;font-size:13px}.diagnostic-item .item-label[data-v-aec763c1]{color:#6b7280;min-width:80px}.diagnostic-item .item-value[data-v-aec763c1]{color:#374151}.diagnostic-item .item-value.highlight[data-v-aec763c1]{font-weight:600;color:#dc2626}.diagnostic-hint[data-v-aec763c1]{margin-top:12px;padding:10px;background:#00000008;border-radius:6px;font-size:12px}.hint-title[data-v-aec763c1]{font-weight:600;color:#374151;margin-bottom:6px}.diagnostic-hint ul[data-v-aec763c1]{margin:0;padding-left:18px;color:#6b7280}.diagnostic-hint li[data-v-aec763c1]{margin:4px 0}.diagnostic-actions[data-v-aec763c1]{margin-top:12px;display:flex;gap:8px}.action-btn[data-v-aec763c1]{padding:6px 14px;font-size:13px;border-radius:6px;border:1px solid #d1d5db;background:#fff;cursor:pointer;color:#374151;transition:all .2s}.action-btn[data-v-aec763c1]:hover{background:#f3f4f6}.action-btn.primary[data-v-aec763c1]{background:#ef4444;border-color:#ef4444;color:#fff}.action-btn.primary[data-v-aec763c1]:hover{background:#dc2626}@media (max-width: 1280px){.panel[data-v-aec763c1]{width:700px}}@media (max-width: 768px){.panel[data-v-aec763c1]{width:95vw;max-height:95vh}.header[data-v-aec763c1]{padding:1rem}.header h2[data-v-aec763c1]{font-size:1.2rem}.content[data-v-aec763c1]{padding:1rem}.view-tabs[data-v-aec763c1]{gap:4px 8px}.tab-btn[data-v-aec763c1]{padding:5px 10px;font-size:11px}}.settings-panel[data-v-e5b26232]{position:fixed;top:0;right:0;bottom:0;width:400px;background:#fff;box-shadow:-4px 0 16px #00000026;display:flex;flex-direction:column;z-index:1000}.header[data-v-e5b26232]{display:flex;justify-content:space-between;align-items:center;padding:1.5rem;border-bottom:1px solid #e5e7eb}.header h2[data-v-e5b26232]{margin:0;font-size:1.5rem;color:#333}.close-btn[data-v-e5b26232]{font-size:2rem;line-height:1;background:none;border:none;cursor:pointer;color:#999;padding:0;width:32px;height:32px;display:flex;align-items:center;justify-content:center}.close-btn[data-v-e5b26232]:hover{color:#333}.content[data-v-e5b26232]{flex:1;padding:1.5rem;overflow-y:auto}section[data-v-e5b26232]{margin-bottom:2rem}section[data-v-e5b26232]:last-child{margin-bottom:0}section h3[data-v-e5b26232]{margin:0 0 1rem;font-size:1.1rem;color:#333}.setting-item[data-v-e5b26232]{display:flex;align-items:center;justify-content:space-between;padding:.75rem 0;border-bottom:1px solid #f3f4f6}.setting-item[data-v-e5b26232]:last-child{border-bottom:none}.setting-item label[data-v-e5b26232]{color:#666;font-size:.95rem}.setting-item input[type=number][data-v-e5b26232],.setting-item select[data-v-e5b26232]{padding:.5rem;border:1px solid #e5e7eb;border-radius:4px;width:100px}.setting-item input[type=checkbox][data-v-e5b26232]{margin-right:.5rem}.agent-card[data-v-04c4a970]{display:flex;flex-direction:column;background:#fff;border-radius:12px;box-shadow:0 2px 8px #00000014;cursor:pointer;transition:transform .2s,box-shadow .2s;overflow:hidden;height:100%}.agent-card[data-v-04c4a970]:hover{transform:translateY(-2px);box-shadow:0 4px 16px #0000001f}.agent-card.is-main[data-v-04c4a970]{border:2px solid #4a9eff;background:linear-gradient(180deg,#fff,#f8fafc)}.agent-card.is-main[data-v-04c4a970]:hover{box-shadow:0 6px 20px #4a9eff33}.agent-card.has-error[data-v-04c4a970]{border:2px solid #ef4444;background:linear-gradient(180deg,#fff,#fef2f2)}.agent-card.is-stuck[data-v-04c4a970]{border:2px solid #f59e0b;background:linear-gradient(180deg,#fff,#fffbeb)}.agent-card.is-main .card-header[data-v-04c4a970]{padding:.85rem 1rem}.agent-card.is-main .avatar[data-v-04c4a970]{font-size:2.2rem;width:48px;height:48px}.agent-card.is-main .name[data-v-04c4a970]{font-size:1rem}.agent-card.is-main .card-body[data-v-04c4a970]{padding:.85rem 1rem}.agent-card.is-main .current-task[data-v-04c4a970]{padding:.6rem .85rem}.agent-card.is-main .current-task .task-name[data-v-04c4a970]{font-size:.85rem;white-space:normal;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical}.card-header[data-v-04c4a970]{display:flex;align-items:center;gap:.75rem;padding:.75rem 1rem;background:linear-gradient(135deg,#f8fafc,#f1f5f9);border-bottom:1px solid #e5e7eb}.avatar[data-v-04c4a970]{font-size:2rem;width:44px;height:44px;display:flex;align-items:center;justify-content:center;background:#fff;border-radius:10px;box-shadow:0 2px 4px #0000000f}.header-info[data-v-04c4a970]{flex:1;min-width:0}.name[data-v-04c4a970]{font-size:.95rem;font-weight:600;color:#1e293b;margin-bottom:.25rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.status-pill[data-v-04c4a970]{display:inline-flex;align-items:center;gap:.35rem;padding:2px 8px;border-radius:10px;font-size:.7rem;font-weight:500}.status-pill.status-idle[data-v-04c4a970]{background:#dcfce7;color:#166534}.status-pill.status-working[data-v-04c4a970]{background:#dbeafe;color:#1d4ed8}.status-pill.status-down[data-v-04c4a970]{background:#fee2e2;color:#991b1b}.status-dot[data-v-04c4a970]{width:6px;height:6px;border-radius:50%}.status-dot.status-idle[data-v-04c4a970]{background:#22c55e}.status-dot.status-working[data-v-04c4a970]{background:#3b82f6}.status-dot.status-down[data-v-04c4a970]{background:#ef4444}.main-badge[data-v-04c4a970]{font-size:.65rem;font-weight:700;color:#4a9eff;background:#4a9eff1a;padding:3px 8px;border-radius:4px;letter-spacing:.5px}.card-body[data-v-04c4a970]{flex:1;padding:.75rem 1rem;display:flex;flex-direction:column;gap:.6rem;overflow:hidden}.model-row[data-v-04c4a970]{display:flex;align-items:center;flex-wrap:wrap;gap:.4rem;font-size:.75rem}.model-label[data-v-04c4a970]{color:#94a3b8;min-width:36px}.model-value[data-v-04c4a970]{font-family:ui-monospace,Cascadia Code,monospace;font-weight:500;color:#475569}.model-fallbacks[data-v-04c4a970]{display:flex;align-items:center;gap:.25rem;margin-left:.25rem}.fallback-tag[data-v-04c4a970]{font-size:.6rem;color:#64748b;background:#f1f5f9;padding:1px 5px;border-radius:3px;font-family:ui-monospace,monospace}.fallback-more[data-v-04c4a970]{font-size:.55rem;color:#94a3b8}.error-warning[data-v-04c4a970]{background:linear-gradient(135deg,#fef2f2,#fee2e2);border:1px solid #fca5a5;border-radius:8px;padding:.5rem .75rem}.stuck-warning[data-v-04c4a970]{background:linear-gradient(135deg,#fffbeb,#fef3c7);border:1px solid #fcd34d;border-radius:8px;padding:.5rem .75rem}.warning-header[data-v-04c4a970]{display:flex;align-items:center;gap:.35rem;margin-bottom:.2rem}.warning-icon[data-v-04c4a970]{font-size:.75rem}.warning-label[data-v-04c4a970]{font-size:.7rem;font-weight:600;color:#991b1b}.stuck-warning .warning-label[data-v-04c4a970]{color:#92400e}.warning-message[data-v-04c4a970]{font-size:.7rem;color:#7f1d1d;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.stuck-warning .warning-message[data-v-04c4a970]{color:#78350f}.current-task[data-v-04c4a970]{background:linear-gradient(135deg,#eff6ff,#dbeafe);border:1px solid #93c5fd;border-radius:8px;padding:.5rem .75rem}.task-header[data-v-04c4a970]{display:flex;align-items:center;gap:.35rem;margin-bottom:.25rem}.task-icon[data-v-04c4a970]{font-size:.65rem;color:#3b82f6}.task-label[data-v-04c4a970]{font-size:.65rem;color:#3b82f6;font-weight:500}.current-task .task-name[data-v-04c4a970]{font-size:.8rem;color:#1e40af;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.task-child-info[data-v-04c4a970]{display:flex;align-items:center;gap:.3rem;margin-top:.35rem;padding-top:.35rem;border-top:1px dashed #bfdbfe}.child-arrow[data-v-04c4a970]{font-size:.7rem;color:#64748b}.child-name[data-v-04c4a970]{font-size:.7rem;color:#64748b;background:#f1f5f9;padding:1px 6px;border-radius:3px}.idle-hint[data-v-04c4a970]{font-size:.75rem;color:#94a3b8;text-align:center;padding:.5rem;font-style:italic}.status-detail[data-v-04c4a970]{display:flex;align-items:center;gap:.4rem;padding:.4rem .6rem;border-radius:6px;font-size:.75rem;animation:pulse-subtle-04c4a970 2s ease-in-out infinite}.status-detail.sub-status-thinking[data-v-04c4a970]{background:linear-gradient(135deg,#fef3c7,#fde68a);border:1px solid #fcd34d;color:#92400e}.status-detail.sub-status-tool_executing[data-v-04c4a970]{background:linear-gradient(135deg,#dbeafe,#bfdbfe);border:1px solid #93c5fd;color:#1e40af}.status-detail.sub-status-waiting_llm[data-v-04c4a970]{background:linear-gradient(135deg,#e0e7ff,#c7d2fe);border:1px solid #a5b4fc;color:#3730a3}.status-detail.sub-status-waiting_child[data-v-04c4a970]{background:linear-gradient(135deg,#fce7f3,#fbcfe8);border:1px solid #f9a8d4;color:#9d174d}.action-icon[data-v-04c4a970]{font-size:.85rem}.action-text[data-v-04c4a970]{font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@keyframes pulse-subtle-04c4a970{0%,to{opacity:1}50%{opacity:.7}}.multi-tasks[data-v-04c4a970]{background:linear-gradient(135deg,#eff6ff,#dbeafe);border:1px solid #93c5fd;border-radius:8px;overflow:hidden}.tasks-header[data-v-04c4a970]{display:flex;align-items:center;gap:.35rem;padding:.5rem .75rem;cursor:pointer;-webkit-user-select:none;user-select:none}.tasks-header[data-v-04c4a970]:hover{background:#3b82f61a}.tasks-icon[data-v-04c4a970]{font-size:.75rem}.tasks-label[data-v-04c4a970]{font-size:.7rem;color:#3b82f6;font-weight:500}.tasks-count[data-v-04c4a970]{font-size:.65rem;background:#3b82f6;color:#fff;padding:1px 6px;border-radius:10px;font-weight:600;margin-left:.25rem}.tasks-toggle[data-v-04c4a970]{font-size:.6rem;color:#64748b;margin-left:auto}.tasks-list[data-v-04c4a970]{max-height:0;overflow:hidden;transition:max-height .3s ease}.tasks-list.expanded[data-v-04c4a970]{max-height:200px;overflow-y:auto}.task-item[data-v-04c4a970]{display:flex;align-items:center;gap:.4rem;padding:.4rem .75rem;border-top:1px solid #e0e7ff;font-size:.75rem}.task-item[data-v-04c4a970]:hover{background:#3b82f60d}.task-status-dot[data-v-04c4a970]{width:6px;height:6px;border-radius:50%;flex-shrink:0}.task-item.task-status-working .task-status-dot[data-v-04c4a970]{background:#3b82f6;animation:pulse-dot-04c4a970 1.5s ease-in-out infinite}.task-item.task-status-retrying .task-status-dot[data-v-04c4a970]{background:#f59e0b}.task-item.task-status-failed .task-status-dot[data-v-04c4a970]{background:#ef4444}@keyframes pulse-dot-04c4a970{0%,to{opacity:1;transform:scale(1)}50%{opacity:.6;transform:scale(.8)}}.task-item .task-name[data-v-04c4a970]{flex:1;color:#1e40af;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.task-child-agent[data-v-04c4a970]{font-size:.65rem;color:#64748b;background:#f1f5f9;padding:1px 5px;border-radius:3px;flex-shrink:0}.tasks-more[data-v-04c4a970]{padding:.4rem .75rem;font-size:.7rem;color:#64748b;text-align:center;border-top:1px solid #e0e7ff;background:#3b82f608}.collaboration-flow-section[data-v-db77627b]{background:#fff;border-radius:8px;box-shadow:0 2px 8px #0000001a;padding:1.5rem}.section-header[data-v-db77627b]{display:flex;justify-content:space-between;align-items:center;margin-bottom:1rem;flex-wrap:wrap;gap:.5rem}.section-header .header-right[data-v-db77627b]{display:flex;align-items:center;gap:.75rem;flex-wrap:wrap}.section-header h2[data-v-db77627b]{margin:0;font-size:1.3rem;color:#333}.connection-indicator[data-v-db77627b]{display:flex;align-items:center;gap:.4rem;font-size:.8rem;padding:.25rem .6rem;border-radius:12px;background:#f1f5f9}.connection-indicator.connected[data-v-db77627b]{background:#dcfce7;color:#166534}.connection-indicator.connecting[data-v-db77627b]{background:#fef3c7;color:#92400e}.connection-indicator.disconnected[data-v-db77627b],.connection-indicator.error[data-v-db77627b]{background:#fee2e2;color:#991b1b}.indicator-dot[data-v-db77627b]{width:6px;height:6px;border-radius:50%;background:currentColor}.connection-indicator.connecting .indicator-dot[data-v-db77627b]{animation:pulse-db77627b 1.5s ease-in-out infinite}@keyframes pulse-db77627b{0%,to{opacity:1}50%{opacity:.5}}.flow-container[data-v-db77627b]{border:1px solid #e5e7eb;border-radius:6px;background:#fafbfc;min-height:480px;position:relative;overflow:auto}.loading-state[data-v-db77627b],.error-state[data-v-db77627b],.empty-state[data-v-db77627b]{display:flex;flex-direction:column;align-items:center;justify-content:center;height:280px;gap:.75rem;color:#6b7280}.spinner[data-v-db77627b]{width:28px;height:28px;border:3px solid #e5e7eb;border-top-color:#4a9eff;border-radius:50%;animation:spin-db77627b .8s linear infinite}@keyframes spin-db77627b{to{transform:rotate(360deg)}}.retry-btn[data-v-db77627b]{padding:.4rem .8rem;background:#4a9eff;color:#fff;border:none;border-radius:4px;cursor:pointer;font-size:.85rem}.flow-layout[data-v-db77627b]{display:flex;min-height:460px}.agent-area[data-v-db77627b]{flex:1;position:relative;padding:1rem 1rem 2rem .5rem;min-width:300px}.level-section[data-v-db77627b]{margin-bottom:1.5rem;position:relative;z-index:1}.level-section[data-v-db77627b]:first-child{margin-bottom:2.5rem;z-index:2}.level-header[data-v-db77627b]{display:flex;align-items:center;gap:.5rem;margin-bottom:.5rem;padding-left:.5rem}.level-badge[data-v-db77627b]{display:inline-flex;align-items:center;justify-content:center;width:24px;height:20px;background:#e0e7ff;color:#4338ca;font-size:.65rem;font-weight:700;border-radius:4px}.level-title[data-v-db77627b]{font-size:.75rem;color:#64748b;font-weight:500}.level-cards[data-v-db77627b]{display:flex;flex-wrap:wrap;gap:16px;justify-content:center;padding:.5rem}.level-section:first-child .level-cards[data-v-db77627b]{min-height:auto;padding-bottom:1rem}.level-section:not(:first-child) .level-cards[data-v-db77627b]{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:16px;max-width:900px;margin:0 auto}.agent-card-wrapper[data-v-db77627b]{cursor:pointer;transition:transform .2s,box-shadow .2s;border-radius:12px;position:relative;z-index:1;overflow:hidden}.level-section:first-child .agent-card-wrapper.main-agent[data-v-db77627b]{width:320px;max-width:100%}.agent-card-wrapper[data-v-db77627b]:hover{transform:translateY(-2px)}.agent-card-wrapper.active[data-v-db77627b]{box-shadow:0 0 0 3px #4a9eff40}.agent-card-wrapper[data-v-db77627b]:before{content:"";position:absolute;left:0;top:0;bottom:0;width:4px;border-radius:4px 0 0 4px;background:var(--agent-color, #64748b);z-index:1}.edges-svg[data-v-db77627b]{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:5}.edge-path[data-v-db77627b]{fill:none;stroke:#4a9eff;stroke-width:2}.edge-path.active[data-v-db77627b]{stroke-width:2.5;stroke-dasharray:6 4;animation:flowAnim-db77627b 1s linear infinite}@keyframes flowAnim-db77627b{to{stroke-dashoffset:-10}}.model-panel[data-v-db77627b]{width:150px;min-width:120px;border-left:1px solid #e5e7eb;background:#f8fafc;flex-shrink:0;display:flex;flex-direction:column}.model-panel-header[data-v-db77627b]{display:flex;justify-content:space-between;align-items:center;padding:.5rem .6rem;background:#f1f5f9;border-bottom:1px solid #e5e7eb;cursor:pointer}.model-panel-title[data-v-db77627b]{font-size:.7rem;font-weight:600;color:#475569}.model-toggle-icon[data-v-db77627b]{font-size:.6rem;color:#94a3b8}.model-panel-body[data-v-db77627b]{flex:1;padding:.4rem;overflow-y:auto}.model-card[data-v-db77627b]{background:#fff;border:1px solid #e2e8f0;border-radius:5px;padding:.4rem .5rem;margin-bottom:.4rem}.model-card.active[data-v-db77627b]{border-color:#f97316}.model-name[data-v-db77627b]{font-size:.65rem;font-weight:600;font-family:ui-monospace,monospace;color:#334155;margin-bottom:.25rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.model-dots[data-v-db77627b]{display:flex;flex-wrap:wrap;gap:2px;margin-bottom:.2rem}.model-dot[data-v-db77627b]{width:5px;height:5px;border-radius:50%;cursor:pointer}.model-dot[data-v-db77627b]:hover{transform:scale(1.3)}.model-count[data-v-db77627b]{font-size:.55rem;color:#94a3b8}.flow-legend.flow-legend-inline[data-v-db77627b]{position:static;display:flex;flex-wrap:wrap;gap:.5rem;padding:.25rem .5rem;background:#f8fafc;border-radius:6px;border:1px solid #e5e7eb;font-size:.7rem;color:#475569}.legend-item[data-v-db77627b]{display:flex;align-items:center;gap:.35rem;padding:2px 6px;border-radius:4px;background:#f8fafc}.legend-dot[data-v-db77627b]{width:10px;height:10px;border-radius:3px}.legend-name[data-v-db77627b]{max-width:100px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:500}.call-detail-overlay[data-v-db77627b]{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000059;display:flex;align-items:center;justify-content:center;z-index:1000}.call-detail-modal[data-v-db77627b]{background:#fff;border-radius:10px;box-shadow:0 8px 32px #0003;min-width:300px;max-width:90%}.call-detail-header[data-v-db77627b]{display:flex;justify-content:space-between;align-items:center;padding:.6rem .9rem;border-bottom:1px solid #e5e7eb}.call-detail-header h3[data-v-db77627b]{margin:0;font-size:.9rem}.close-btn[data-v-db77627b]{background:none;border:none;font-size:1.2rem;cursor:pointer;color:#6b7280;line-height:1}.call-detail-body[data-v-db77627b]{padding:.6rem .9rem}.call-detail-row[data-v-db77627b]{display:flex;gap:.6rem;margin-bottom:.4rem}.call-detail-row .label[data-v-db77627b]{color:#6b7280;min-width:45px;font-size:.8rem}.call-detail-row .value[data-v-db77627b]{color:#333;font-size:.8rem;word-break:break-word}.call-detail-row.trigger .value[data-v-db77627b]{font-size:.75rem}@media (max-width: 1280px){.level-section:first-child .agent-card-wrapper.main-agent[data-v-db77627b]{width:280px}.level-section:not(:first-child) .level-cards[data-v-db77627b]{grid-template-columns:repeat(auto-fit,minmax(180px,1fr))}.model-panel[data-v-db77627b]{width:130px}}@media (max-width: 1024px){.flow-layout[data-v-db77627b]{flex-direction:column}.model-panel[data-v-db77627b]{width:100%;border-left:none;border-top:1px solid #e5e7eb;max-height:200px}.model-panel-body[data-v-db77627b]{display:flex;flex-wrap:wrap;gap:.5rem}.model-card[data-v-db77627b]{flex:1;min-width:120px;margin-bottom:0}}.collaboration-box[data-v-ef9f8c73]{background:#fff;border:1px solid #e2e8f0;border-radius:8px;box-shadow:0 2px 8px #0000001a;overflow:hidden}.collaboration-box-header[data-v-ef9f8c73]{padding:1rem 1.5rem;border-bottom:2px solid #e2e8f0;background:#f8fafc}.collaboration-box-header h2[data-v-ef9f8c73]{margin:0 0 .25rem;font-size:1.3rem;color:#1e293b}.collaboration-hint[data-v-ef9f8c73]{font-size:.85rem;color:#64748b}.collaboration-box-body[data-v-ef9f8c73]{padding:1rem 1.5rem;min-height:600px}.collaboration-error-fallback[data-v-ef9f8c73]{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:500px;gap:1rem;color:#64748b}.fallback-title[data-v-ef9f8c73]{margin:0;font-size:1.1rem;color:#334155}.fallback-reason[data-v-ef9f8c73]{margin:0;font-size:.9rem;color:#ef4444;max-width:400px;text-align:center}.collaboration-error-fallback button[data-v-ef9f8c73]{padding:.5rem 1rem;background:#4a9eff;color:#fff;border:none;border-radius:4px;cursor:pointer}.collaboration-error-fallback button[data-v-ef9f8c73]:hover{background:#3a8eef}.task-status-section[data-v-5d944098]{background:#fff;border-radius:8px;box-shadow:0 2px 8px #0000001a;padding:1.5rem}.section-header[data-v-5d944098]{display:flex;justify-content:space-between;align-items:center;margin-bottom:1rem;flex-wrap:wrap;gap:.5rem}.section-header h2[data-v-5d944098]{margin:0;font-size:1.3rem;color:#333}.summary-stats[data-v-5d944098]{display:flex;gap:1rem;flex-wrap:wrap}.stat[data-v-5d944098]{font-size:.85rem;padding:.25rem .75rem;border-radius:4px;background:#f1f5f9}.stat.running[data-v-5d944098]{background:#dcfce7;color:#166534}.stat.completed[data-v-5d944098]{background:#fef3c7;color:#92400e}.stat.failed[data-v-5d944098]{background:#fee2e2;color:#991b1b}.stat.clickable[data-v-5d944098]{cursor:pointer;transition:all .2s ease}.stat.clickable[data-v-5d944098]:hover{transform:translateY(-1px);box-shadow:0 2px 4px #0000001a}.stat.clickable.active[data-v-5d944098]{font-weight:600;box-shadow:0 0 0 2px currentColor}.filters-row[data-v-5d944098]{display:flex;gap:1rem;margin-bottom:1rem;flex-wrap:wrap}.search-box[data-v-5d944098]{flex:1;min-width:200px}.search-input[data-v-5d944098]{width:100%;padding:.5rem 1rem;border:1px solid #e5e7eb;border-radius:6px;font-size:.9rem;outline:none;transition:border-color .2s}.search-input[data-v-5d944098]:focus{border-color:#4a9eff}.filter-buttons[data-v-5d944098]{display:flex;gap:.5rem;flex-wrap:wrap}.filter-btn[data-v-5d944098]{padding:.5rem 1rem;border:1px solid #e5e7eb;border-radius:6px;background:#fff;font-size:.85rem;cursor:pointer;transition:all .2s}.filter-btn[data-v-5d944098]:hover{border-color:#4a9eff}.filter-btn.active[data-v-5d944098]{background:#4a9eff;color:#fff;border-color:#4a9eff}.loading-state[data-v-5d944098],.error-state[data-v-5d944098],.empty-state[data-v-5d944098]{display:flex;flex-direction:column;align-items:center;justify-content:center;height:200px;gap:1rem;color:#6b7280}.spinner[data-v-5d944098]{width:32px;height:32px;border:3px solid #e5e7eb;border-top-color:#4a9eff;border-radius:50%;animation:spin-5d944098 1s linear infinite}@keyframes spin-5d944098{to{transform:rotate(360deg)}}.retry-btn[data-v-5d944098]{padding:.5rem 1rem;background:#4a9eff;color:#fff;border:none;border-radius:4px;cursor:pointer}.task-list-container[data-v-5d944098]{max-height:600px;overflow-y:auto;border:1px solid #e5e7eb;border-radius:6px;position:relative}.task-list[data-v-5d944098]{display:flex;flex-direction:column}.task-item[data-v-5d944098]{display:flex;align-items:center;gap:.75rem;padding:.6rem 1rem;border-bottom:1px solid #f1f5f9;background:#fff;cursor:pointer;transition:background .15s}.task-item[data-v-5d944098]:hover{background:#f8fafc}.task-item[data-v-5d944098]:last-child{border-bottom:none}.task-status-icon[data-v-5d944098]{font-size:1rem}.task-status-icon.running[data-v-5d944098]{color:#22c55e}.task-status-icon.completed[data-v-5d944098]{color:#f59e0b}.task-status-icon.failed[data-v-5d944098]{color:#ef4444}.task-status-icon.pending[data-v-5d944098]{color:#9ca3af}.task-main[data-v-5d944098]{flex:1;min-width:0}.task-name-short[data-v-5d944098]{font-size:.9rem;font-weight:500;color:#333;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.task-detail-hint[data-v-5d944098]{font-size:.75rem;color:#94a3b8;flex-shrink:0}.task-agent[data-v-5d944098]{font-size:.8rem;color:#6b7280;background:#f1f5f9;padding:.125rem .5rem;border-radius:4px}.task-time[data-v-5d944098]{font-size:.8rem;color:#94a3b8}.task-detail-overlay[data-v-5d944098]{position:fixed;top:0;right:0;bottom:0;left:0;background:#0006;display:flex;align-items:center;justify-content:center;z-index:1000}.task-detail-modal[data-v-5d944098]{background:#fff;border-radius:12px;box-shadow:0 10px 40px #0003;max-width:560px;width:90%;max-height:85vh;display:flex;flex-direction:column}.task-detail-header[data-v-5d944098]{display:flex;align-items:center;justify-content:space-between;padding:1rem 1.25rem;border-bottom:1px solid #e5e7eb}.task-detail-header h3[data-v-5d944098]{margin:0;font-size:1rem;color:#333}.task-detail-header .close-btn[data-v-5d944098]{background:none;border:none;font-size:1.5rem;cursor:pointer;color:#6b7280;line-height:1;padding:0 .25rem}.task-detail-header .close-btn[data-v-5d944098]:hover{color:#333}.task-detail-body[data-v-5d944098]{padding:1rem 1.25rem;overflow-y:auto}.detail-row[data-v-5d944098]{margin-bottom:1rem}.detail-row[data-v-5d944098]:last-child{margin-bottom:0}.detail-label[data-v-5d944098]{display:block;font-size:.75rem;color:#64748b;margin-bottom:.25rem}.detail-value[data-v-5d944098]{font-size:.9rem;color:#333;word-break:break-word}.detail-value.task-content[data-v-5d944098]{white-space:pre-wrap;line-height:1.5}.detail-value.path-value[data-v-5d944098]{font-family:ui-monospace,monospace;font-size:.85rem;color:#475569}.generated-files-list[data-v-5d944098]{margin:0;padding-left:1.25rem;font-family:ui-monospace,monospace;font-size:.85rem;color:#475569;line-height:1.6}.file-path-item[data-v-5d944098]{word-break:break-all;margin-bottom:.25rem}.detail-value.output-content[data-v-5d944098]{white-space:pre-wrap;line-height:1.6;max-height:400px;overflow-y:auto;background:#f8fafc;padding:.75rem 1rem;border-radius:6px;border:1px solid #e2e8f0;font-size:.85rem}.detail-value.error[data-v-5d944098]{color:#b91c1c;background:#fef2f2;padding:.5rem;border-radius:6px;display:block}.detail-progress[data-v-5d944098]{display:flex;align-items:center;gap:.75rem}.detail-progress .progress-bar[data-v-5d944098]{flex:1;height:6px;background:#e5e7eb;border-radius:3px;overflow:hidden}.detail-progress .progress-fill[data-v-5d944098]{height:100%;background:linear-gradient(90deg,#4a9eff,#6bb9ff);border-radius:3px;transition:width .3s ease}.detail-progress .progress-text[data-v-5d944098]{font-size:.8rem;color:#6b7280;min-width:40px}.detail-subtasks[data-v-5d944098]{display:flex;flex-direction:column;gap:.5rem}.subtask-row[data-v-5d944098]{display:flex;align-items:center;gap:.5rem;font-size:.85rem;padding:.35rem .5rem;background:#f8fafc;border-radius:6px}.subtask-error-inline[data-v-5d944098]{margin-left:auto;font-size:.8rem;color:#b91c1c}.timeline-container[data-v-5d944098]{flex:1;max-height:300px;overflow-y:auto}.timeline[data-v-5d944098]{position:relative;padding-left:20px}.timeline[data-v-5d944098]:before{content:"";position:absolute;left:6px;top:0;bottom:0;width:2px;background:#e5e7eb}.timeline-item[data-v-5d944098]{position:relative;display:flex;align-items:flex-start;gap:12px;padding:8px 0;font-size:.85rem}.timeline-dot[data-v-5d944098]{position:absolute;left:-17px;top:12px;width:10px;height:10px;border-radius:50%;background:#9ca3af;border:2px solid #fff;box-shadow:0 0 0 2px #e5e7eb}.timeline-item.created .timeline-dot[data-v-5d944098]{background:#3b82f6;box-shadow:0 0 0 2px #3b82f6}.timeline-item.completed .timeline-dot[data-v-5d944098]{background:#10b981;box-shadow:0 0 0 2px #10b981}.timeline-item.failed .timeline-dot[data-v-5d944098]{background:#ef4444;box-shadow:0 0 0 2px #ef4444}.timeline-item.tool .timeline-dot[data-v-5d944098]{background:#f59e0b}.timeline-item.start .timeline-dot[data-v-5d944098]{background:#6366f1}.timeline-time[data-v-5d944098]{flex-shrink:0;width:70px;font-size:.75rem;color:#6b7280;font-family:monospace}.timeline-desc[data-v-5d944098]{flex:1;color:#374151}.timeline-item.failed .timeline-desc[data-v-5d944098]{color:#991b1b}@media (max-width: 640px){.section-header[data-v-5d944098]{flex-direction:column;align-items:flex-start}.summary-stats[data-v-5d944098]{font-size:.75rem}.filters-row[data-v-5d944098]{flex-direction:column}.filter-buttons[data-v-5d944098]{width:100%;justify-content:flex-start}.task-agent[data-v-5d944098]{display:none}}.performance-section[data-v-6508c9b4]{background:#fff;border-radius:8px;box-shadow:0 2px 8px #0000001a;padding:1.5rem}.section-header[data-v-6508c9b4]{display:flex;justify-content:space-between;align-items:center;margin-bottom:1.5rem;flex-wrap:wrap;gap:1rem}.section-header h2[data-v-6508c9b4]{margin:0;font-size:1.3rem;color:#333}.time-range-selector[data-v-6508c9b4]{display:flex;gap:.5rem}.range-btn[data-v-6508c9b4]{padding:.5rem 1rem;border:1px solid #e5e7eb;border-radius:6px;background:#fff;font-size:.85rem;cursor:pointer;transition:all .2s}.range-btn[data-v-6508c9b4]:hover{border-color:#4a9eff}.range-btn.active[data-v-6508c9b4]{background:#4a9eff;color:#fff;border-color:#4a9eff}.loading-state[data-v-6508c9b4],.error-state[data-v-6508c9b4]{display:flex;flex-direction:column;align-items:center;justify-content:center;height:200px;gap:1rem;color:#6b7280}.spinner[data-v-6508c9b4]{width:32px;height:32px;border:3px solid #e5e7eb;border-top-color:#4a9eff;border-radius:50%;animation:spin-6508c9b4 1s linear infinite}@keyframes spin-6508c9b4{to{transform:rotate(360deg)}}.retry-btn[data-v-6508c9b4]{padding:.5rem 1rem;background:#4a9eff;color:#fff;border:none;border-radius:4px;cursor:pointer}.metrics-grid[data-v-6508c9b4]{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:1rem;margin-bottom:2rem}.metric-card[data-v-6508c9b4]{display:flex;align-items:center;gap:1rem;padding:1.25rem;background:#f9fafb;border-radius:8px;border:1px solid #e5e7eb;position:relative}.metric-card.primary[data-v-6508c9b4]{background:linear-gradient(135deg,#eff6ff,#dbeafe);border-color:#93c5fd}.metric-card.highlight[data-v-6508c9b4]{background:#f0fdf4;border-color:#86efac}.metric-icon[data-v-6508c9b4]{font-size:2rem}.metric-content[data-v-6508c9b4]{flex:1}.metric-label[data-v-6508c9b4]{font-size:.8rem;color:#6b7280;margin-bottom:.25rem}.metric-value[data-v-6508c9b4]{font-size:1.75rem;font-weight:600;color:#333}.metric-unit[data-v-6508c9b4]{font-size:.75rem;color:#94a3b8}.metric-alert[data-v-6508c9b4]{position:absolute;top:.5rem;right:.5rem;font-size:1.25rem;animation:pulse-6508c9b4 2s infinite}@keyframes pulse-6508c9b4{0%,to{opacity:1}50%{opacity:.5}}.charts-stack[data-v-6508c9b4]{display:flex;flex-direction:column;gap:1.5rem;margin-bottom:2rem}.chart-card[data-v-6508c9b4]{background:#fff;border:1px solid #e5e7eb;border-radius:8px;padding:1.25rem}.chart-header[data-v-6508c9b4]{display:flex;justify-content:space-between;align-items:center;margin-bottom:1rem}.chart-header h3[data-v-6508c9b4]{margin:0;font-size:1rem;color:#666}.chart-datetime[data-v-6508c9b4]{font-size:.8rem;color:#94a3b8}.chart-container[data-v-6508c9b4]{height:200px;display:flex;flex-direction:column}.chart-bars[data-v-6508c9b4]{flex:1;display:flex;align-items:flex-end;gap:4px;padding-bottom:36px;padding-top:28px;overflow-x:auto;min-width:0}.chart-bar[data-v-6508c9b4]{flex:1;min-width:16px;background:linear-gradient(to top,#4a9eff,#6bb9ff);border-radius:3px 3px 0 0;min-height:8px;position:relative;transition:height .3s ease;cursor:pointer;display:flex;flex-direction:column;align-items:center}.chart-bars.rpm .chart-bar[data-v-6508c9b4]{background:linear-gradient(to top,#10b981,#34d399)}.bar-value[data-v-6508c9b4]{position:absolute;top:-22px;left:50%;transform:translate(-50%);font-size:.6rem;color:#6b7280;white-space:nowrap}.bar-time-label[data-v-6508c9b4]{position:absolute;bottom:-30px;left:50%;transform:translate(-50%);font-size:.65rem;color:#6b7280;white-space:nowrap}.summary-section[data-v-6508c9b4]{padding-top:1.5rem;border-top:1px solid #e5e7eb;margin-bottom:1.5rem}.summary-section h3[data-v-6508c9b4]{margin:0 0 1rem;font-size:1rem;color:#666}.summary-grid[data-v-6508c9b4]{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:1rem}.summary-item[data-v-6508c9b4]{display:flex;flex-direction:column;gap:.25rem;padding:1rem;background:#f9fafb;border-radius:6px}.summary-item.highlight[data-v-6508c9b4]{background:#eff6ff;border:1px solid #bfdbfe}.summary-label[data-v-6508c9b4]{font-size:.8rem;color:#6b7280}.summary-value[data-v-6508c9b4]{font-size:1.25rem;font-weight:600;color:#333}.summary-sub[data-v-6508c9b4]{font-size:.75rem;color:#6b7280}.chart-bar.clickable[data-v-6508c9b4]{cursor:pointer}.chart-bar.clickable[data-v-6508c9b4]:hover{opacity:.9}.detail-modal-overlay[data-v-6508c9b4]{position:fixed;top:0;right:0;bottom:0;left:0;background:#0006;display:flex;align-items:center;justify-content:center;z-index:1000}.detail-modal[data-v-6508c9b4]{background:#fff;border-radius:12px;box-shadow:0 10px 40px #0003;max-width:560px;width:90%;max-height:80vh;display:flex;flex-direction:column}.detail-modal-header[data-v-6508c9b4]{display:flex;align-items:center;justify-content:space-between;padding:1rem 1.25rem;border-bottom:1px solid #e5e7eb}.detail-modal-header h3[data-v-6508c9b4]{margin:0;font-size:1rem;color:#333}.detail-modal-header .close-btn[data-v-6508c9b4]{background:none;border:none;font-size:1.5rem;cursor:pointer;color:#6b7280;line-height:1;padding:0 .25rem}.detail-modal-header .close-btn[data-v-6508c9b4]:hover{color:#333}.detail-modal-body[data-v-6508c9b4]{padding:1rem 1.25rem;overflow-y:auto}.detail-loading[data-v-6508c9b4]{text-align:center;padding:2rem;color:#6b7280}.detail-summary[data-v-6508c9b4]{font-size:.9rem;color:#6b7280;margin-bottom:1rem}.detail-filters[data-v-6508c9b4]{display:flex;gap:.75rem;margin-bottom:1rem;flex-wrap:wrap}.search-input[data-v-6508c9b4]{flex:1;min-width:150px;padding:.5rem .75rem;border:1px solid #e5e7eb;border-radius:6px;font-size:.85rem;outline:none}.search-input[data-v-6508c9b4]:focus{border-color:#4a9eff}.agent-filter[data-v-6508c9b4],.sort-select[data-v-6508c9b4]{padding:.5rem .75rem;border:1px solid #e5e7eb;border-radius:6px;font-size:.85rem;background:#fff;cursor:pointer;outline:none}.agent-filter[data-v-6508c9b4]:focus,.sort-select[data-v-6508c9b4]:focus{border-color:#4a9eff}.detail-calls[data-v-6508c9b4]{display:flex;flex-direction:column;gap:.75rem}.detail-call-hint[data-v-6508c9b4]{display:flex;align-items:center;gap:.5rem;padding:.5rem 1rem;background:#eff6ff;border:1px solid #93c5fd;border-radius:6px;margin-bottom:.75rem}.detail-call-hint .hint-badge[data-v-6508c9b4]{font-size:.8rem;font-weight:600;color:#1d4ed8;padding:.15rem .5rem;background:#dbeafe;border-radius:4px}.detail-call-hint .hint-text[data-v-6508c9b4]{font-size:.8rem;color:#1e40af}.detail-call-item[data-v-6508c9b4]{padding:.75rem 1rem;background:#f9fafb;border-radius:8px;border-left:3px solid #4a9eff}.detail-call-item .call-header[data-v-6508c9b4]{display:flex;align-items:center;gap:.5rem;margin-bottom:.35rem}.detail-call-item .call-agent[data-v-6508c9b4]{font-weight:600;color:#333}.detail-call-item .call-time[data-v-6508c9b4]{font-size:.8rem;color:#6b7280}.detail-call-item .call-tokens[data-v-6508c9b4]{font-size:.8rem;color:#10b981;margin-left:auto}.detail-call-item .call-trigger[data-v-6508c9b4]{font-size:.85rem;color:#555;word-break:break-word;margin-top:.25rem;white-space:pre-wrap}.detail-call-item .call-trigger-badge[data-v-6508c9b4]{display:inline-block;font-size:.75rem;font-weight:600;color:#1d4ed8;padding:.1rem .4rem;background:#dbeafe;border-radius:4px;margin-right:.35rem}.detail-call-item .call-meta[data-v-6508c9b4]{font-size:.75rem;color:#9ca3af;margin-top:.25rem}.detail-empty[data-v-6508c9b4]{text-align:center;padding:2rem;color:#9ca3af}.alerts-panel[data-v-6508c9b4]{background:#fef3c7;border:1px solid #fcd34d;border-radius:8px;padding:1rem}.alerts-panel h3[data-v-6508c9b4]{margin:0 0 .75rem;font-size:.95rem;color:#92400e}.alerts-list[data-v-6508c9b4]{display:flex;flex-direction:column;gap:.5rem}.alert-item[data-v-6508c9b4]{display:flex;align-items:center;gap:1rem;padding:.75rem;background:#fff;border-radius:6px;font-size:.85rem}.alert-message[data-v-6508c9b4]{flex:1;color:#333}.alert-value[data-v-6508c9b4]{color:#6b7280}.alert-time[data-v-6508c9b4]{font-size:.75rem;color:#94a3b8}.ack-btn[data-v-6508c9b4]{padding:.25rem .75rem;background:#4a9eff;color:#fff;border:none;border-radius:4px;font-size:.75rem;cursor:pointer}.ack-btn[data-v-6508c9b4]:hover{background:#3a8eef}@media (max-width: 640px){.section-header[data-v-6508c9b4]{flex-direction:column;align-items:flex-start}.time-range-selector[data-v-6508c9b4]{width:100%;justify-content:space-between}.range-btn[data-v-6508c9b4]{flex:1;text-align:center;padding:.5rem;font-size:.75rem}.metrics-grid[data-v-6508c9b4]{grid-template-columns:1fr 1fr}}.token-analysis[data-v-b98a8391]{background:#fff;border-radius:8px;box-shadow:0 2px 8px #0000001a;padding:1.5rem}.section-header[data-v-b98a8391]{display:flex;justify-content:space-between;align-items:center;margin-bottom:1.5rem;flex-wrap:wrap;gap:1rem}.section-header h2[data-v-b98a8391]{margin:0;font-size:1.3rem;color:#333}.time-range-selector[data-v-b98a8391]{display:flex;gap:.5rem}.range-btn[data-v-b98a8391]{padding:.5rem 1rem;border:1px solid #e5e7eb;border-radius:6px;background:#fff;font-size:.85rem;cursor:pointer;transition:all .2s}.range-btn[data-v-b98a8391]:hover{border-color:#4a9eff}.range-btn.active[data-v-b98a8391]{background:#4a9eff;color:#fff;border-color:#4a9eff}.loading-state[data-v-b98a8391],.error-state[data-v-b98a8391]{display:flex;flex-direction:column;align-items:center;justify-content:center;height:200px;gap:1rem;color:#6b7280}.spinner[data-v-b98a8391]{width:32px;height:32px;border:3px solid #e5e7eb;border-top-color:#4a9eff;border-radius:50%;animation:spin-b98a8391 1s linear infinite}@keyframes spin-b98a8391{to{transform:rotate(360deg)}}.retry-btn[data-v-b98a8391]{padding:.5rem 1rem;background:#4a9eff;color:#fff;border:none;border-radius:4px;cursor:pointer}.error-icon[data-v-b98a8391]{font-size:2rem}.summary-cards[data-v-b98a8391]{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:1rem;margin-bottom:1.5rem}.summary-card[data-v-b98a8391]{display:flex;align-items:center;gap:.75rem;padding:1rem;background:#f9fafb;border-radius:8px;border:1px solid #e5e7eb}.summary-card.highlight[data-v-b98a8391]{background:#f0fdf4;border-color:#86efac}.summary-card.cost[data-v-b98a8391]{background:linear-gradient(135deg,#fefce8,#fef9c3);border-color:#fde047}.card-icon[data-v-b98a8391]{font-size:1.5rem}.card-content[data-v-b98a8391]{flex:1}.card-label[data-v-b98a8391]{font-size:.8rem;color:#6b7280;margin-bottom:.25rem}.card-value[data-v-b98a8391]{font-size:1.25rem;font-weight:600;color:#333}.card-sub[data-v-b98a8391]{font-size:.75rem;color:#6b7280;margin-top:.25rem}.card-sub.saved[data-v-b98a8391]{color:#16a34a;font-weight:500}.trend-section[data-v-b98a8391]{margin-bottom:1.5rem;padding:1rem;background:#f9fafb;border-radius:8px;border:1px solid #e5e7eb}.trend-section h3[data-v-b98a8391]{margin:0 0 1rem;font-size:1rem;color:#666}.trend-chart[data-v-b98a8391]{position:relative}.trend-bars[data-v-b98a8391]{display:flex;align-items:flex-end;gap:2px;height:120px;padding-bottom:30px}.trend-bar-group[data-v-b98a8391]{flex:1;display:flex;align-items:flex-end;gap:1px;min-width:20px;position:relative}.trend-bar[data-v-b98a8391]{flex:1;min-width:8px;border-radius:2px 2px 0 0;min-height:2px;position:relative;transition:height .3s ease}.trend-bar.input[data-v-b98a8391]{background:linear-gradient(to top,#4a9eff,#6bb9ff)}.trend-bar.output[data-v-b98a8391]{background:linear-gradient(to top,#f59e0b,#fbbf24)}.bar-tooltip[data-v-b98a8391]{position:absolute;bottom:100%;left:50%;transform:translate(-50%);background:#333;color:#fff;padding:2px 6px;border-radius:4px;font-size:.7rem;white-space:nowrap;opacity:0;transition:opacity .2s;pointer-events:none}.trend-bar:hover .bar-tooltip[data-v-b98a8391]{opacity:1}.trend-time[data-v-b98a8391]{position:absolute;bottom:-25px;left:50%;transform:translate(-50%);font-size:.65rem;color:#6b7280;white-space:nowrap}.trend-legend[data-v-b98a8391]{display:flex;justify-content:center;gap:1.5rem;margin-top:.5rem}.legend-item[data-v-b98a8391]{display:flex;align-items:center;gap:.5rem;font-size:.8rem;color:#6b7280}.legend-color[data-v-b98a8391]{width:12px;height:12px;border-radius:2px}.legend-color.input[data-v-b98a8391]{background:#4a9eff}.legend-color.output[data-v-b98a8391]{background:#f59e0b}.view-toggle[data-v-b98a8391]{display:flex;gap:.5rem;margin-bottom:1rem}.view-toggle button[data-v-b98a8391]{padding:.5rem 1rem;border:1px solid #e5e7eb;border-radius:6px;background:#fff;font-size:.85rem;cursor:pointer;transition:all .2s}.view-toggle button[data-v-b98a8391]:hover{border-color:#4a9eff}.view-toggle button.active[data-v-b98a8391]{background:#4a9eff;color:#fff;border-color:#4a9eff}.by-agent-table[data-v-b98a8391]{overflow-x:auto}.by-agent-table table[data-v-b98a8391]{width:100%;border-collapse:collapse;font-size:.9rem}.by-agent-table th[data-v-b98a8391],.by-agent-table td[data-v-b98a8391]{padding:.75rem;text-align:left;border-bottom:1px solid #e5e7eb}.by-agent-table th[data-v-b98a8391]{background:#f9fafb;font-weight:600;color:#6b7280;font-size:.8rem;text-transform:uppercase}.by-agent-table tfoot td[data-v-b98a8391]{background:#f9fafb;font-weight:500}.agent-name[data-v-b98a8391]{font-weight:500;color:#333}.total-col[data-v-b98a8391]{font-weight:600;color:#4a9eff}.percent-bar[data-v-b98a8391]{display:flex;align-items:center;gap:.5rem}.percent-fill[data-v-b98a8391]{height:8px;background:#4a9eff;border-radius:4px;min-width:4px}.percent-text[data-v-b98a8391]{font-size:.8rem;color:#6b7280;white-space:nowrap}.by-agent-chart h3[data-v-b98a8391]{margin:0 0 1rem;font-size:1rem;color:#666}.bar-chart[data-v-b98a8391]{display:flex;flex-direction:column;gap:.75rem}.bar-row[data-v-b98a8391]{display:flex;align-items:center;gap:1rem}.bar-label[data-v-b98a8391]{width:120px;font-size:.85rem;font-weight:500;color:#333;flex-shrink:0}.bar-container[data-v-b98a8391]{flex:1;height:24px;background:#f3f4f6;border-radius:4px;overflow:hidden}.bar[data-v-b98a8391]{height:100%;background:linear-gradient(90deg,#4a9eff,#6bb9ff);border-radius:4px;display:flex;align-items:center;justify-content:flex-end;padding-right:.5rem;min-width:fit-content}.bar-value[data-v-b98a8391]{font-size:.75rem;color:#fff;font-weight:500;white-space:nowrap}.bar-percent[data-v-b98a8391]{width:50px;font-size:.8rem;color:#6b7280;text-align:right}@media (max-width: 640px){.section-header[data-v-b98a8391]{flex-direction:column;align-items:flex-start}.time-range-selector[data-v-b98a8391]{width:100%;justify-content:space-between}.range-btn[data-v-b98a8391]{flex:1;text-align:center;padding:.5rem;font-size:.75rem}.summary-cards[data-v-b98a8391]{grid-template-columns:1fr 1fr}.bar-label[data-v-b98a8391]{width:80px;font-size:.75rem}.bar-percent[data-v-b98a8391]{width:40px}}.performance-panel[data-v-7962ace4]{background:#fff;border-radius:8px;box-shadow:0 2px 8px #0000001a;overflow:hidden}.panel-header[data-v-7962ace4]{display:flex;justify-content:space-between;align-items:center;padding:1rem 1.5rem;background:#f9fafb;border-bottom:1px solid #e5e7eb;flex-wrap:wrap;gap:1rem}.panel-header h2[data-v-7962ace4]{margin:0;font-size:1.3rem;color:#333}.tab-switcher[data-v-7962ace4]{display:flex;gap:.5rem}.tab-btn[data-v-7962ace4]{padding:.5rem 1rem;border:1px solid #e5e7eb;border-radius:6px;background:#fff;font-size:.85rem;cursor:pointer;transition:all .2s;display:flex;align-items:center;gap:.5rem}.tab-btn[data-v-7962ace4]:hover{border-color:#4a9eff}.tab-btn.active[data-v-7962ace4]{background:#4a9eff;color:#fff;border-color:#4a9eff}.panel-content[data-v-7962ace4]{padding:0}.panel-content[data-v-7962ace4] .performance-section,.panel-content[data-v-7962ace4] .token-analysis{background:transparent;box-shadow:none;border-radius:0;padding:1.5rem;margin-bottom:0}@media (max-width: 640px){.panel-header[data-v-7962ace4]{flex-direction:column;align-items:flex-start}.tab-switcher[data-v-7962ace4]{width:100%}.tab-btn[data-v-7962ace4]{flex:1;justify-content:center}}.error-center[data-v-ca874c41]{background:#fff;border-radius:8px;padding:1.5rem;box-shadow:0 2px 8px #0000001a}.header[data-v-ca874c41]{display:flex;justify-content:space-between;align-items:center;margin-bottom:1.5rem;flex-wrap:wrap;gap:1rem}.header h2[data-v-ca874c41]{margin:0;font-size:1.3rem;color:#333}.header-actions[data-v-ca874c41]{display:flex;gap:.75rem;align-items:center}.filter-select[data-v-ca874c41]{padding:.5rem .75rem;border:1px solid #e5e7eb;border-radius:6px;background:#fff;font-size:.9rem;min-width:120px}.refresh-btn[data-v-ca874c41]{padding:.5rem 1rem;background:#4a9eff;color:#fff;border:none;border-radius:6px;cursor:pointer;font-size:.9rem}.refresh-btn[data-v-ca874c41]:hover{background:#3a8eef}.stats-row[data-v-ca874c41]{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:1rem;margin-bottom:1.5rem}.stat-card[data-v-ca874c41]{background:#f8fafc;border-radius:8px;padding:1rem;text-align:center;border:1px solid #e2e8f0}.stat-card.total[data-v-ca874c41]{background:#fef2f2;border-color:#fecaca}.stat-card.session[data-v-ca874c41]{background:#fef3c7;border-color:#fde68a}.stat-card.model[data-v-ca874c41]{background:#ede9fe;border-color:#ddd6fe}.stat-card.healthy[data-v-ca874c41]{background:#d1fae5;border-color:#a7f3d0}.stat-card.warning[data-v-ca874c41]{background:#fef3c7;border-color:#fde68a}.stat-value[data-v-ca874c41]{font-size:1.8rem;font-weight:700;color:#1e293b}.stat-label[data-v-ca874c41]{font-size:.85rem;color:#64748b;margin-top:.25rem}.trend-section[data-v-ca874c41]{margin-bottom:1.5rem}.trend-section h3[data-v-ca874c41]{margin:0 0 .75rem;font-size:1rem;color:#475569}.trend-chart[data-v-ca874c41]{display:flex;align-items:flex-end;gap:2px;height:80px;background:#f8fafc;border-radius:6px;padding:.5rem}.trend-bar[data-v-ca874c41]{flex:1;background:#cbd5e1;border-radius:2px 2px 0 0;min-height:4px;position:relative;transition:background .2s}.trend-bar[data-v-ca874c41]:hover{background:#ef4444}.bar-label[data-v-ca874c41]{position:absolute;top:-16px;left:50%;transform:translate(-50%);font-size:.7rem;color:#64748b}.trend-labels[data-v-ca874c41]{display:flex;gap:2px;margin-top:.25rem}.trend-time[data-v-ca874c41]{flex:1;text-align:center;font-size:.7rem;color:#94a3b8}.type-distribution[data-v-ca874c41]{margin-bottom:1.5rem}.type-distribution h3[data-v-ca874c41]{margin:0 0 .75rem;font-size:1rem;color:#475569}.type-bars[data-v-ca874c41]{display:flex;flex-direction:column;gap:.5rem}.type-bar-item[data-v-ca874c41]{display:flex;align-items:center;gap:.75rem}.type-bar-label[data-v-ca874c41]{display:flex;align-items:center;gap:.5rem;min-width:100px;font-size:.85rem;color:#475569}.type-dot[data-v-ca874c41]{width:8px;height:8px;border-radius:50%}.type-bar-track[data-v-ca874c41]{flex:1;height:8px;background:#e2e8f0;border-radius:4px;overflow:hidden}.type-bar-fill[data-v-ca874c41]{height:100%;border-radius:4px;transition:width .3s}.type-count[data-v-ca874c41]{min-width:40px;text-align:right;font-size:.85rem;color:#64748b;font-weight:500}.api-status-section[data-v-ca874c41]{margin-bottom:1.5rem}.api-status-section h3[data-v-ca874c41]{margin:0 0 .75rem;font-size:1rem;color:#475569}.api-status-grid[data-v-ca874c41]{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:.75rem}.api-status-card[data-v-ca874c41]{padding:.75rem;background:#f8fafc;border-radius:6px;border:1px solid #e2e8f0}.api-status-card.status-healthy[data-v-ca874c41]{background:#f0fdf4;border-color:#bbf7d0}.api-status-card.status-degraded[data-v-ca874c41]{background:#fffbeb;border-color:#fde68a}.api-status-card.status-down[data-v-ca874c41]{background:#fef2f2;border-color:#fecaca}.api-header[data-v-ca874c41]{display:flex;justify-content:space-between;margin-bottom:.5rem}.api-model[data-v-ca874c41]{font-weight:600;font-size:.9rem;color:#1e293b}.api-provider[data-v-ca874c41]{font-size:.8rem;color:#94a3b8}.api-status[data-v-ca874c41]{display:flex;align-items:center;gap:.5rem}.status-dot[data-v-ca874c41]{width:8px;height:8px;border-radius:50%}.status-dot.status-healthy[data-v-ca874c41]{background:#22c55e}.status-dot.status-degraded[data-v-ca874c41]{background:#f59e0b}.status-dot.status-down[data-v-ca874c41]{background:#ef4444}.status-text[data-v-ca874c41]{font-size:.85rem;color:#64748b}.api-last-error[data-v-ca874c41]{margin-top:.5rem;font-size:.8rem;color:#dc2626;display:flex;justify-content:space-between}.api-error-count[data-v-ca874c41]{margin-top:.25rem;font-size:.8rem;color:#ef4444}.error-lists[data-v-ca874c41]{display:grid;grid-template-columns:repeat(auto-fit,minmax(400px,1fr));gap:1.5rem}.error-group h3[data-v-ca874c41]{margin:0 0 .75rem;font-size:1rem;color:#475569;display:flex;align-items:center;gap:.5rem}.count-badge[data-v-ca874c41]{background:#e2e8f0;color:#64748b;font-size:.75rem;padding:.125rem .5rem;border-radius:10px;font-weight:500}.empty[data-v-ca874c41]{color:#94a3b8;font-size:.9rem;padding:1rem;text-align:center;background:#f8fafc;border-radius:6px}.error-list[data-v-ca874c41]{display:flex;flex-direction:column;gap:.5rem}.error-item[data-v-ca874c41]{background:#fef2f2;border-radius:6px;border-left:4px solid #ef4444;cursor:pointer;transition:box-shadow .2s}.error-item[data-v-ca874c41]:hover{box-shadow:0 2px 4px #0000001a}.error-item.severity-warning[data-v-ca874c41]{border-left-color:#f59e0b;background:#fffbeb}.error-item.severity-critical[data-v-ca874c41]{border-left-color:#dc2626;background:#fef2f2}.error-main[data-v-ca874c41]{display:grid;grid-template-columns:80px 80px 1fr 70px 24px;gap:.5rem;align-items:center;padding:.75rem;font-size:.85rem}.error-agent[data-v-ca874c41]{font-weight:500;color:#991b1b}.error-type[data-v-ca874c41]{font-weight:500}.error-msg[data-v-ca874c41]{color:#7f1d1d;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.error-time[data-v-ca874c41]{color:#b91c1c;font-size:.8rem;text-align:right}.expand-icon[data-v-ca874c41]{color:#94a3b8;font-size:.7rem;text-align:center}.error-detail[data-v-ca874c41]{padding:.75rem;padding-top:0;border-top:1px solid #fecaca;margin:0 .75rem .75rem}.detail-row[data-v-ca874c41]{display:flex;gap:.5rem;margin-bottom:.5rem;font-size:.85rem}.detail-label[data-v-ca874c41]{color:#64748b;min-width:70px}.detail-message[data-v-ca874c41]{color:#1e293b;word-break:break-word}@media (max-width: 768px){.header[data-v-ca874c41]{flex-direction:column;align-items:flex-start}.error-main[data-v-ca874c41]{grid-template-columns:1fr;gap:.25rem}.error-lists[data-v-ca874c41],.api-status-grid[data-v-ca874c41]{grid-template-columns:1fr}}.version-display[data-v-87a575a1]{font-size:.8rem;color:#ffffffa6;display:inline-block;position:relative;z-index:1000;flex-shrink:0}.loading-text[data-v-87a575a1],.error-text[data-v-87a575a1]{color:#ffffff80}.version-text[data-v-87a575a1]{cursor:pointer;transition:color .2s;-webkit-user-select:none;user-select:none}.version-text[data-v-87a575a1]:hover{color:#fffffff2}.tooltip[data-v-87a575a1]{position:absolute;top:calc(100% + 8px);right:0;background:#fff;border:1px solid #ddd;border-radius:4px;padding:8px 12px;box-shadow:0 2px 8px #00000026;white-space:nowrap;z-index:1001;min-width:200px}.tooltip-item[data-v-87a575a1]{margin:4px 0;font-size:12px;color:#333}.tooltip-item strong[data-v-87a575a1]{color:#666;margin-right:4px}@media (max-width: 640px){.version-display[data-v-87a575a1]{font-size:.7rem}.tooltip[data-v-87a575a1]{min-width:160px;font-size:11px}}:root{--color-primary: #4a9eff;--color-success: #22c55e;--color-warning: #f59e0b;--color-error: #ef4444;--status-idle: #94a3b8;--status-active: #4a9eff;--status-completed: #22c55e;--status-error: #ef4444;--spacing-xs: .25rem;--spacing-sm: .5rem;--spacing-md: 1rem;--spacing-lg: 1.5rem;--spacing-xl: 2rem;--radius-sm: 4px;--radius-md: 6px;--radius-lg: 8px;--shadow-sm: 0 1px 2px rgba(0, 0, 0, .05);--shadow-md: 0 2px 8px rgba(0, 0, 0, .1);--shadow-lg: 0 4px 16px rgba(0, 0, 0, .15)}header[data-v-543ef282]{display:flex;justify-content:space-between;align-items:center;padding:1rem 2rem;background:#1a1a2e;color:#fff;flex-wrap:wrap;gap:1rem}header h1[data-v-543ef282]{margin:0;font-size:1.5rem}.controls[data-v-543ef282]{display:flex;align-items:center;gap:1rem;flex-wrap:wrap}button[data-v-543ef282]{padding:.5rem 1rem;background:#4a9eff;color:#fff;border:none;border-radius:4px;cursor:pointer}button[data-v-543ef282]:hover{background:#3a8eef}.connection-status[data-v-543ef282]{font-size:.85rem;padding:.25rem .75rem;border-radius:20px;background:#2d3748}.connection-status.connected[data-v-543ef282]{background:#22c55e}.connection-status.connecting[data-v-543ef282]{background:#f59e0b}.connection-status.disconnected[data-v-543ef282],.connection-status.error[data-v-543ef282]{background:#ef4444}main[data-v-543ef282]{padding:2rem;max-width:1600px;margin:0 auto}.collaboration-section[data-v-543ef282]{margin-bottom:2rem;min-height:400px}.task-status-section[data-v-543ef282],.performance-section[data-v-543ef282],.error-center-section[data-v-543ef282]{margin-bottom:2rem}h2[data-v-543ef282]{margin-bottom:1rem;color:#333}@media (max-width: 1024px){main[data-v-543ef282]{padding:1rem}header[data-v-543ef282]{padding:1rem}}@media (max-width: 640px){header h1[data-v-543ef282]{font-size:1.2rem}.controls[data-v-543ef282]{width:100%;justify-content:space-between}}
|