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.
Files changed (135) hide show
  1. package/README.md +55 -321
  2. package/frontend-dist/assets/index-B7XqKAxm.css +1 -0
  3. package/frontend-dist/assets/index-CxJaSYyo.js +24 -0
  4. package/{frontend → frontend-dist}/index.html +2 -1
  5. package/{plugin/openclaw.plugin.json → openclaw.plugin.json} +2 -2
  6. package/package.json +21 -13
  7. package/.github/workflows/release.yml +0 -56
  8. package/VERSION_DISPLAY_delivery.md +0 -242
  9. package/VERSION_DISPLAY_implementation_summary.md +0 -315
  10. package/design_manifest.md +0 -100
  11. package/docs/CHANGELOG_AGENT_MODIFICATIONS.md +0 -132
  12. package/docs/MAINTAINER_RELEASE_WORKFLOW.md +0 -211
  13. package/docs/Openclaw-Agent-Dashboard/345/217/221/345/270/203/344/270/216/346/233/264/346/226/260.md +0 -147
  14. package/docs/RELEASE-LATEST.md +0 -189
  15. package/docs/RELEASE-MODEL-CONFIG.md +0 -95
  16. package/docs/WINDOWS_INSTALL_TROUBLESHOOTING.md +0 -171
  17. package/docs/design/.gitkeep +0 -0
  18. package/docs/design/VERSION_DISPLAY_design.md +0 -1236
  19. package/docs/release-guide.md +0 -259
  20. package/docs/release-operations-manual.md +0 -167
  21. package/docs/reviews/.gitkeep +0 -0
  22. package/docs/reviews/approval_history.json +0 -14
  23. package/docs/reviews/cr_VERSION_DISPLAY.md +0 -397
  24. package/docs/reviews/traceability_manifest.json +0 -279
  25. package/docs/specs/VERSION_DISPLAY_spec.md +0 -371
  26. package/docs/specs/tr3-install-system.md +0 -580
  27. package/docs/windows-collaboration-model-paths-troubleshooting.md +0 -0
  28. package/frontend/package-lock.json +0 -1240
  29. package/frontend/package.json +0 -19
  30. package/frontend/src/App.vue +0 -355
  31. package/frontend/src/components/AgentCard.vue +0 -796
  32. package/frontend/src/components/AgentConfigPanel.vue +0 -539
  33. package/frontend/src/components/AgentDetailPanel.vue +0 -738
  34. package/frontend/src/components/ErrorAnalysisView.vue +0 -546
  35. package/frontend/src/components/ErrorCenterPanel.vue +0 -844
  36. package/frontend/src/components/PerformanceMonitor.vue +0 -515
  37. package/frontend/src/components/SettingsPanel.vue +0 -236
  38. package/frontend/src/components/TokenAnalysisPanel.vue +0 -683
  39. package/frontend/src/components/chain/ChainEdge.vue +0 -85
  40. package/frontend/src/components/chain/ChainNode.vue +0 -166
  41. package/frontend/src/components/chain/TaskChainView.vue +0 -425
  42. package/frontend/src/components/chain/index.ts +0 -3
  43. package/frontend/src/components/chain/types.ts +0 -70
  44. package/frontend/src/components/collaboration/CollaborationFlowSection.vue +0 -1032
  45. package/frontend/src/components/collaboration/CollaborationFlowWrapper.vue +0 -113
  46. package/frontend/src/components/common/VersionDisplay.vue +0 -187
  47. package/frontend/src/components/performance/PerformancePanel.vue +0 -119
  48. package/frontend/src/components/performance/PerformanceSection.vue +0 -1137
  49. package/frontend/src/components/tasks/TaskStatusSection.vue +0 -973
  50. package/frontend/src/components/timeline/TimelineConnector.vue +0 -31
  51. package/frontend/src/components/timeline/TimelineRound.vue +0 -135
  52. package/frontend/src/components/timeline/TimelineStep.vue +0 -691
  53. package/frontend/src/components/timeline/TimelineToolLink.vue +0 -109
  54. package/frontend/src/components/timeline/TimelineView.vue +0 -540
  55. package/frontend/src/components/timeline/index.ts +0 -5
  56. package/frontend/src/components/timeline/types.ts +0 -120
  57. package/frontend/src/composables/index.ts +0 -7
  58. package/frontend/src/composables/useDebounce.ts +0 -48
  59. package/frontend/src/composables/useRealtime.ts +0 -52
  60. package/frontend/src/composables/useState.ts +0 -52
  61. package/frontend/src/composables/useThrottle.ts +0 -46
  62. package/frontend/src/composables/useVirtualScroll.ts +0 -106
  63. package/frontend/src/main.ts +0 -4
  64. package/frontend/src/managers/EventDispatcher.ts +0 -127
  65. package/frontend/src/managers/RealtimeDataManager.ts +0 -302
  66. package/frontend/src/managers/StateManager.ts +0 -128
  67. package/frontend/src/managers/index.ts +0 -5
  68. package/frontend/src/types/collaboration.ts +0 -135
  69. package/frontend/src/types/index.ts +0 -20
  70. package/frontend/src/types/performance.ts +0 -105
  71. package/frontend/src/types/task.ts +0 -38
  72. package/frontend/vite.config.ts +0 -18
  73. package/legacy_code_anatomy.md +0 -518
  74. package/plugin/README.md +0 -99
  75. package/plugin/config.json.example +0 -1
  76. package/plugin/package.json +0 -26
  77. package/scripts/build-plugin.js +0 -81
  78. package/scripts/bundle.sh +0 -62
  79. package/scripts/install-plugin.sh +0 -162
  80. package/scripts/install-python-deps.sh +0 -226
  81. package/scripts/install.js +0 -684
  82. package/scripts/install.sh +0 -367
  83. package/scripts/lib/common.sh +0 -137
  84. package/scripts/release-pack.sh +0 -110
  85. package/scripts/start.js +0 -50
  86. package/scripts/test_available_models.py +0 -284
  87. package/scripts/test_version_display.sh +0 -128
  88. package/scripts/test_websocket_ping.py +0 -44
  89. package/session_registry.json +0 -58
  90. package/tests/.gitkeep +0 -0
  91. package/tests/qa_regression_report.md +0 -359
  92. package/tests/qa_version_display_report.md +0 -598
  93. /package/{src/backend → dashboard}/agents.py +0 -0
  94. /package/{src/backend → dashboard}/api/__init__.py +0 -0
  95. /package/{src/backend → dashboard}/api/agent_config_api.py +0 -0
  96. /package/{src/backend → dashboard}/api/agents.py +0 -0
  97. /package/{src/backend → dashboard}/api/agents_config.py +0 -0
  98. /package/{src/backend → dashboard}/api/chains.py +0 -0
  99. /package/{src/backend → dashboard}/api/collaboration.py +0 -0
  100. /package/{src/backend → dashboard}/api/debug_paths.py +0 -0
  101. /package/{src/backend → dashboard}/api/error_analysis.py +0 -0
  102. /package/{src/backend → dashboard}/api/errors.py +0 -0
  103. /package/{src/backend → dashboard}/api/performance.py +0 -0
  104. /package/{src/backend → dashboard}/api/subagents.py +0 -0
  105. /package/{src/backend → dashboard}/api/timeline.py +0 -0
  106. /package/{src/backend → dashboard}/api/version.py +0 -0
  107. /package/{src/backend → dashboard}/api/websocket.py +0 -0
  108. /package/{src/backend → dashboard}/collaboration.py +0 -0
  109. /package/{src/backend → dashboard}/data/__init__.py +0 -0
  110. /package/{src/backend → dashboard}/data/agent_config_manager.py +0 -0
  111. /package/{src/backend → dashboard}/data/chain_reader.py +0 -0
  112. /package/{src/backend → dashboard}/data/config_reader.py +0 -0
  113. /package/{src/backend → dashboard}/data/error_analyzer.py +0 -0
  114. /package/{src/backend → dashboard}/data/session_reader.py +0 -0
  115. /package/{src/backend → dashboard}/data/subagent_reader.py +0 -0
  116. /package/{src/backend → dashboard}/data/task_history.py +0 -0
  117. /package/{src/backend → dashboard}/data/timeline_reader.py +0 -0
  118. /package/{src/backend → dashboard}/data/version_info_reader.py +0 -0
  119. /package/{src/backend → dashboard}/errors.py +0 -0
  120. /package/{src/backend → dashboard}/main.py +0 -0
  121. /package/{src/backend → dashboard}/mechanism_reader.py +0 -0
  122. /package/{src/backend → dashboard}/mechanisms.py +0 -0
  123. /package/{src/backend → dashboard}/performance.py +0 -0
  124. /package/{src/backend → dashboard}/requirements.txt +0 -0
  125. /package/{src/backend → dashboard}/session_reader.py +0 -0
  126. /package/{src/backend → dashboard}/status/__init__.py +0 -0
  127. /package/{src/backend → dashboard}/status/change_tracker.py +0 -0
  128. /package/{src/backend → dashboard}/status/error_detector.py +0 -0
  129. /package/{src/backend → dashboard}/status/status_cache.py +0 -0
  130. /package/{src/backend → dashboard}/status/status_calculator.py +0 -0
  131. /package/{src/backend → dashboard}/status_calculator.py +0 -0
  132. /package/{src/backend → dashboard}/subagent_reader.py +0 -0
  133. /package/{src/backend → dashboard}/watchers/__init__.py +0 -0
  134. /package/{src/backend → dashboard}/watchers/file_watcher.py +0 -0
  135. /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 可视化看板 - 实时展示 OpenClaw Agent 状态、任务进度和错误分析。
3
+ 多 Agent 可视化看板 - 作为 OpenClaw 插件安装后,随 OpenClaw 启动自动运行。
4
4
 
5
- ## 功能特性
5
+ ## 快速开始
6
6
 
7
- - **工位视图** - 以卡片形式展示主 Agent 和子 Agent 状态
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
- `npm run deploy` 会执行 `pack`(构建前端 + 写入 `plugin/`)并调用 `openclaw plugins install` 指向本地 `plugin` 目录。**Windows** 在 PowerShell / CMD 中同样可用。
121
-
122
- ---
123
-
124
- ### 方式三:GitHub Release 离线包
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
- ### 关于旧版 `npx openclaw-agent-dashboard`
19
+ **前置要求**:
20
+ - Node.js(构建前端)
21
+ - Python 3.10+
22
+ - OpenClaw(`npm install -g openclaw`)
147
23
 
148
- 早期曾通过 `npx` 调用安装脚本;**当前推荐**使用 `openclaw plugins install` 安装插件本体。若仍需从 GitHub Release 拉取完整 tgz,请使用方式三或仓库内 `scripts/install.js`(开发者)。
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
- | `openclaw plugins install openclaw-agent-dashboard@latest` | **用户推荐**:从 npm 安装插件到 OpenClaw |
199
- | `npm run deploy` | 开发:打包 + `openclaw plugins install` 本地 `plugin/` |
200
- | `npm run publish:npm` | 维护者:打包后 `npm publish --prefix plugin` 发布到 npm |
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
- 安装脚本采用以下策略安装 Python 依赖:
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
- # 1. 安装后端依赖(Debian/Ubuntu 建议用 venv:python3 -m venv .venv && .venv/bin/pip install -r requirements.txt)
230
- cd src/backend
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
- ## 主要 API
48
+ 1.0.0 1.1.0
263
49
 
264
- | 方法 | 路径 | 说明 |
265
- |------|------|------|
266
- | GET | `/api/agents` | Agent 列表及状态 |
267
- | GET | `/api/agent-config/:id` | Agent 配置 |
268
- | PUT | `/api/agent-config/:id/model` | 更新模型配置 |
269
- | GET | `/api/error-analysis/:id` | 错误分析 |
270
- | GET | `/api/timeline/:id` | 时序数据 |
271
- | GET | `/api/chains` | 任务链路 |
50
+ 前置条件检查通过
51
+ >>> 1/4 构建前端...
52
+ >>> 2/4 打包插件...
53
+ >>> 3/4 移除旧版本...
54
+ >>> 4/4 安装新版本...
55
+ >>> 检查 Python 依赖...
56
+ Python 依赖已就绪
272
57
 
273
- 完整 API 文档: http://localhost:38271/docs
58
+ === 升级完成 (1.0.0 → 1.1.0) ===
59
+ ```
274
60
 
275
- ## 数据源
61
+ ---
276
62
 
277
- - `~/.openclaw/openclaw.json` - Agent 配置(Windows:`%USERPROFILE%\.openclaw\openclaw.json`)
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
- 插件安装路径与 `openclaw` 命令一致:`$OPENCLAW_STATE_DIR/extensions/` 或 `$OPENCLAW_HOME/.openclaw/extensions/` 或 `~/.openclaw/extensions/`,确保 Gateway 能正确发现插件。
69
+ ### 端口配置(便于移植,无需改 openclaw.json)
289
70
 
290
- ## 开发调试
71
+ 优先级从高到低:
291
72
 
292
- ```bash
293
- # 修改代码后重新部署
294
- npm run deploy
295
- openclaw gateway restart
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
- ### Python 依赖安装失败
83
+ ---
301
84
 
302
- ```
303
- ❌ Python 依赖安装失败
304
- ```
85
+ ## 手动安装(故障恢复)
305
86
 
306
- **解决方案:**
87
+ 若 `npm run deploy` 失败,可分步执行:
307
88
 
308
89
  ```bash
309
- # Debian/Ubuntu(需安装 python3-venv)
310
- sudo apt update && sudo apt install python3 python3-pip python3-venv
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
- 若仍失败,可手动在 `dashboard` 下创建 venv:
93
+ # 2. 安装插件
94
+ openclaw plugins install ./plugin
318
95
 
319
- ```bash
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}}