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/package.json CHANGED
@@ -1,25 +1,33 @@
1
1
  {
2
2
  "name": "openclaw-agent-dashboard",
3
- "version": "1.0.21",
4
- "description": "多 Agent 可视化看板 - 开发仓库(发布请使用 npm run publish:npm)",
5
- "scripts": {
6
- "pack": "node scripts/build-plugin.js",
7
- "install-plugin": "node scripts/install.js",
8
- "deploy": "npm run pack && npm run install-plugin",
9
- "upgrade": "git pull && npm run deploy",
10
- "bundle": "bash scripts/bundle.sh",
11
- "start": "node scripts/start.js",
12
- "publish:npm": "npm run pack && cd plugin && npm publish --access public"
3
+ "version": "1.0.23",
4
+ "description": "多 Agent 可视化看板 - OpenClaw 插件",
5
+ "main": "index.js",
6
+ "openclaw": {
7
+ "extensions": [
8
+ "./index.js"
9
+ ]
13
10
  },
14
11
  "keywords": [
15
12
  "openclaw",
16
- "agent",
17
13
  "dashboard",
18
- "visualization"
14
+ "agent",
15
+ "monitoring"
19
16
  ],
20
17
  "license": "MIT",
21
18
  "repository": {
22
19
  "type": "git",
23
20
  "url": "https://github.com/Umarchen/openclaw-agent-dashboard.git"
21
+ },
22
+ "files": [
23
+ "openclaw.plugin.json",
24
+ "index.js",
25
+ "dashboard",
26
+ "frontend-dist",
27
+ "scripts"
28
+ ],
29
+ "scripts": {
30
+ "pack": "node ../scripts/build-plugin.js",
31
+ "prepublishOnly": "npm run pack"
24
32
  }
25
- }
33
+ }
@@ -1,56 +0,0 @@
1
- name: Release
2
-
3
- on:
4
- push:
5
- tags:
6
- - 'v*'
7
- workflow_dispatch:
8
-
9
- jobs:
10
- build-and-release:
11
- runs-on: ubuntu-latest
12
- permissions:
13
- contents: write
14
-
15
- steps:
16
- - name: Checkout
17
- uses: actions/checkout@v4
18
-
19
- - name: Setup Node.js
20
- uses: actions/setup-node@v4
21
- with:
22
- node-version: '20'
23
-
24
- - name: Install dependencies
25
- run: cd frontend && npm ci
26
-
27
- - name: Build and pack plugin
28
- run: npm run pack
29
-
30
- - name: Generate release tgz
31
- run: bash scripts/release-pack.sh
32
-
33
- - name: Get version
34
- id: version
35
- run: |
36
- VERSION=$(jq -r '.version' plugin/openclaw.plugin.json)
37
- echo "version=$VERSION" >> $GITHUB_OUTPUT
38
- echo "tag=v$VERSION" >> $GITHUB_OUTPUT
39
-
40
- - name: Upload artifact
41
- uses: actions/upload-artifact@v4
42
- with:
43
- name: plugin-tgz
44
- path: openclaw-agent-dashboard-v*.tgz
45
- retention-days: 30
46
-
47
- - name: Create Release
48
- if: github.event_name == 'push'
49
- uses: softprops/action-gh-release@v2
50
- with:
51
- tag_name: ${{ steps.version.outputs.tag }}
52
- name: Release ${{ steps.version.outputs.tag }}
53
- generate_release_notes: true
54
- make_latest: true
55
- files: |
56
- openclaw-agent-dashboard-v*.tgz
@@ -1,242 +0,0 @@
1
- # 版本号显示功能 - 交付清单
2
-
3
- > **任务标识**: 开发任务 - 界面显示版本号
4
- > **交付日期**: 2026-03-19
5
- > **交付人员**: DevOps Agent (Subagent: Coder-version-display)
6
- > **任务状态**: ✅ 完成
7
-
8
- ---
9
-
10
- ## 📋 任务概述
11
-
12
- 根据设计文档和 PRD,实现"界面显示版本号"功能,使用户能够在 Dashboard 界面直观地查看当前插件的版本信息。
13
-
14
- ---
15
-
16
- ## ✅ 交付成果
17
-
18
- ### 1. 后端实现(P0)
19
-
20
- #### 1.1 新增文件
21
-
22
- | 文件 | 路径 | 大小 | 描述 |
23
- |-----|------|------|------|
24
- | 版本信息读取器 | `src/backend/data/version_info_reader.py` | 3.5 KB | 从 package.json 读取版本信息,支持缓存和降级 |
25
- | 版本信息 API | `src/backend/api/version.py` | 990 B | 提供 GET /api/version 端点 |
26
-
27
- #### 1.2 修改文件
28
-
29
- | 文件 | 修改内容 |
30
- |-----|---------|
31
- | `src/backend/main.py` | 导入 version 模块,注册 `app.include_router(version.router)` |
32
-
33
- #### 1.3 API 端点
34
-
35
- | 方法 | 路径 | 描述 |
36
- |-----|------|------|
37
- | GET | /api/version | 返回插件版本信息 |
38
-
39
- **响应示例**:
40
- ```json
41
- {
42
- "version": "1.0.10",
43
- "name": "openclaw-agent-dashboard",
44
- "description": "多 Agent 可视化看板 - 状态、任务、API、工作流、协作流程",
45
- "build_date": "2026-03-19T12:34:56Z",
46
- "git_commit": "abc123def456"
47
- }
48
- ```
49
-
50
- ---
51
-
52
- ### 2. 前端实现(P0)
53
-
54
- #### 2.1 新增文件
55
-
56
- | 文件 | 路径 | 大小 | 描述 |
57
- |-----|------|------|------|
58
- | 版本显示组件 | `frontend/src/components/common/VersionDisplay.vue` | 3.9 KB | Vue 3 组件,在界面右下角显示版本号 |
59
-
60
- #### 2.2 修改文件
61
-
62
- | 文件 | 修改内容 |
63
- |-----|---------|
64
- | `frontend/src/App.vue` | 导入 VersionDisplay 组件,在模板中添加 `<VersionDisplay />` 标签 |
65
-
66
- #### 2.3 组件特性
67
-
68
- - **位置**: 界面右下角固定显示
69
- - **样式**: 12px 灰色文字,hover 变深
70
- - **交互**: hover 时显示完整版本信息(tooltip)
71
- - **状态**: 支持加载中、错误、正常三种状态
72
- - **响应式**: 移动端自动调整大小
73
-
74
- ---
75
-
76
- ### 3. 文档交付
77
-
78
- | 文档 | 路径 | 大小 | 描述 |
79
- |-----|------|------|------|
80
- | 追溯清单 | `.staging/traceability_manifest.json` | 8.6 KB | 需求到实现的映射关系 |
81
- | 实施摘要 | `.staging/VERSION_DISPLAY_implementation_summary.md` | 5.9 KB | 详细实施过程和验证结果 |
82
- | 交付清单 | `.staging/VERSION_DISPLAY_delivery.md` | - | 本文档 |
83
-
84
- ---
85
-
86
- ## 📦 文件统计
87
-
88
- | 类型 | 数量 | 文件列表 |
89
- |-----|------|---------|
90
- | 新增文件 | 5 | version_info_reader.py, version.py, VersionDisplay.vue, traceability_manifest.json, implementation_summary.md |
91
- | 修改文件 | 2 | main.py, App.vue |
92
- | 测试脚本 | 1 | test_version_display.sh |
93
- | **总计** | **8** | - |
94
-
95
- ---
96
-
97
- ## ✅ 验收测试
98
-
99
- ### 自动化测试
100
-
101
- ```bash
102
- # 运行快速测试脚本
103
- ./scripts/test_version_display.sh
104
- ```
105
-
106
- **测试结果**: ✅ 所有测试通过
107
-
108
- ### 手动测试步骤
109
-
110
- 1. **启动服务**:
111
- ```bash
112
- cd /home/ubuntu/vrt-projects/projects/openclaw-agent-dashboard
113
- npm start
114
- ```
115
-
116
- 2. **测试 API**:
117
- ```bash
118
- curl http://localhost:8000/api/version
119
- # 预期: 返回包含 version, name, description 的 JSON
120
- ```
121
-
122
- 3. **测试前端**:
123
- - 访问 `http://localhost:8000`
124
- - 检查右下角是否显示版本号
125
- - 鼠标悬停在版本号上,查看 tooltip
126
-
127
- ---
128
-
129
- ## 📊 需求追溯
130
-
131
- | 需求 ID | 描述 | 优先级 | 状态 |
132
- |---------|------|--------|------|
133
- | REQ_VERSION_DISPLAY_001 | 后端版本信息 API | P0 | ✅ 完成 |
134
- | REQ_VERSION_DISPLAY_002 | 前端版本信息组件 | P0 | ✅ 完成 |
135
- | REQ_VERSION_DISPLAY_003 | 实时数据管理器集成 | P1 | ⏸️ 延后 |
136
- | REQ_VERSION_DISPLAY_004 | 版本信息配置 | P2 | ✅ 部分(环境变量支持) |
137
-
138
- ---
139
-
140
- ## 🔧 技术亮点
141
-
142
- ### 1. 最小侵入原则
143
- - 优先新增文件(5 个新增,2 个修改)
144
- - 修改内容极简(仅新增导入和注册/标签)
145
-
146
- ### 2. 单一数据源
147
- - 版本号仅从 `package.json` 读取
148
- - 避免多源数据导致的不一致
149
-
150
- ### 3. 降级策略
151
- - 文件读取失败返回 `version="unknown"`
152
- - API 始终返回 200 状态码
153
- - 错误日志记录,但不影响核心功能
154
-
155
- ### 4. 性能优化
156
- - 使用缓存机制,避免频繁文件读取
157
- - 响应时间 < 50ms(缓存后)
158
-
159
- ### 5. 简体中文注释
160
- - 所有新增代码使用简体中文注释
161
- - 代码可读性强,易于维护
162
-
163
- ---
164
-
165
- ## 🌐 环境变量支持
166
-
167
- | 环境变量 | 类型 | 默认值 | 说明 |
168
- |---------|------|--------|------|
169
- | `DASHBOARD_BUILD_DATE` | String | 未设置 | 构建时间戳(ISO 8601 格式) |
170
- | `DASHBOARD_GIT_COMMIT` | String | 未设置 | Git 提交哈希(短格式) |
171
-
172
- **使用示例**:
173
- ```bash
174
- export DASHBOARD_BUILD_DATE=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
175
- export DASHBOARD_GIT_COMMIT=$(git rev-parse --short HEAD)
176
- npm start
177
- ```
178
-
179
- ---
180
-
181
- ## 📝 已知限制与后续优化
182
-
183
- ### 当前限制
184
-
185
- 1. **状态管理**: 版本信息由组件独立管理,未集成到全局状态管理器
186
- 2. **重试机制**: 未实现 API 调用失败时的自动重试
187
- 3. **构建集成**: 构建脚本未自动注入构建时间和 Git 提交
188
-
189
- ### 后续优化建议
190
-
191
- #### 优化 1: 集成到状态管理器(P1)
192
- - 在 `StateManager.ts` 新增 `versionInfo` 字段和访问方法
193
- - 在 `RealtimeDataManager.ts` 实现 `loadVersionInfo()` 方法
194
- - 修改 `VersionDisplay.vue` 从状态管理器获取数据
195
-
196
- #### 优化 2: 构建脚本增强(P2)
197
- - 修改 `scripts/build-plugin.js`
198
- - 在构建时自动读取 Git 提交哈希
199
- - 自动设置构建时间戳
200
-
201
- ---
202
-
203
- ## 📚 参考文档
204
-
205
- - **设计文档**: `.staging/design/VERSION_DISPLAY_design.md`
206
- - **设计清单**: `.staging/design_manifest.md`
207
- - **需求文档**: `docs/specs/VERSION_DISPLAY_spec.md`
208
- - **追溯清单**: `.staging/traceability_manifest.json`
209
- - **实施摘要**: `.staging/VERSION_DISPLAY_implementation_summary.md`
210
-
211
- ---
212
-
213
- ## ✨ 交付确认
214
-
215
- - [x] 后端 API 实现(GET /api/version)
216
- - [x] 前端组件实现(VersionDisplay.vue)
217
- - [x] 追溯清单创建(traceability_manifest.json)
218
- - [x] 实施摘要文档(implementation_summary.md)
219
- - [x] 快速测试脚本(test_version_display.sh)
220
- - [x] Python 语法检查通过
221
- - [x] 自动化测试全部通过
222
- - [x] 最小侵入原则遵循
223
- - [x] 降级策略实现
224
- - [x] 简体中文注释
225
-
226
- ---
227
-
228
- **交付完成时间**: 2026-03-19 21:36
229
- **下一阶段**: 功能测试与部署
230
-
231
- ---
232
-
233
- ## 💬 备注
234
-
235
- 本次实施完成了"界面显示版本号"功能的核心部分(P0 阶段),满足以下目标:
236
-
237
- ✅ **用户体验提升**: 用户可在界面上直观地看到当前版本号
238
- ✅ **问题诊断优化**: 用户反馈问题时可快速提供版本信息
239
- ✅ **升级验证便利**: 升级后可立即确认版本号变化
240
- ✅ **一致性保证**: 前端显示的版本号与实际安装版本保持一致
241
-
242
- 代码质量高,遵循设计原则,可投入测试和部署。
@@ -1,315 +0,0 @@
1
- # 版本号显示功能 - 实施摘要
2
-
3
- > **特性标识**: VERSION_DISPLAY
4
- > **实施日期**: 2026-03-19
5
- > **实施人员**: DevOps Agent
6
- > **实施状态**: ✅ 完成(P0 阶段)
7
- > **版本**: 1.0.0
8
-
9
- ---
10
-
11
- ## 1. 实施概述
12
-
13
- 本次实施完成了"界面显示版本号"功能的核心部分(P0 阶段),包括后端 API 和前端组件的完整实现。功能使用户能够在 Dashboard 界面右下角直观地查看当前插件的版本信息。
14
-
15
- ### 1.1 已完成的工作
16
-
17
- ✅ **阶段 1: 后端 API 实现(P0)**
18
- - 创建版本信息读取器:`src/backend/data/version_info_reader.py`
19
- - 创建版本信息 API 路由:`src/backend/api/version.py`
20
- - 修改主入口注册路由:`src/backend/main.py`
21
-
22
- ✅ **阶段 2: 前端组件实现(P0)**
23
- - 创建版本显示组件:`frontend/src/components/common/VersionDisplay.vue`
24
- - 修改主应用集成组件:`frontend/src/App.vue`
25
-
26
- ✅ **阶段 3: 追溯清单**
27
- - 创建需求追溯清单:`.staging/traceability_manifest.json`
28
-
29
- ### 1.2 待优化的工作(P1/P2)
30
-
31
- ⏸️ **实时数据管理器集成(P1)**
32
- - 将版本信息集成到 `StateManager.ts` 和 `RealtimeDataManager.ts`
33
- - 实现重试机制和全局访问接口
34
- - 当前由组件独立管理,已满足基本需求
35
-
36
- ⏸️ **构建脚本优化(P2)**
37
- - 在构建时自动注入构建时间和 Git 提交哈希
38
- - 当前支持通过环境变量设置,构建脚本暂未修改
39
-
40
- ---
41
-
42
- ## 2. 文件变更清单
43
-
44
- ### 2.1 新增文件(3 个)
45
-
46
- | 文件路径 | 类型 | 大小 | 描述 |
47
- |---------|------|------|------|
48
- | `src/backend/data/version_info_reader.py` | Python | 3.5 KB | 版本信息读取器,支持缓存和降级 |
49
- | `src/backend/api/version.py` | Python | 990 B | 版本信息 API 路由,提供 GET /api/version |
50
- | `frontend/src/components/common/VersionDisplay.vue` | Vue | 3.9 KB | 版本显示组件,支持 hover 提示 |
51
-
52
- ### 2.2 修改文件(2 个)
53
-
54
- | 文件路径 | 修改类型 | 修改内容 |
55
- |---------|---------|---------|
56
- | `src/backend/main.py` | 新增导入 + 注册路由 | 导入 `version` 模块,注册 `app.include_router(version.router)` |
57
- | `frontend/src/App.vue` | 新增导入 + 模板标签 | 导入 `VersionDisplay` 组件,在模板中添加 `<VersionDisplay />` |
58
-
59
- ### 2.3 新增文档(1 个)
60
-
61
- | 文件路径 | 大小 | 描述 |
62
- |---------|------|------|
63
- | `.staging/traceability_manifest.json` | 8.6 KB | 需求追溯清单,记录需求到实现的映射关系 |
64
-
65
- ---
66
-
67
- ## 3. 技术实现详情
68
-
69
- ### 3.1 后端 API 实现
70
-
71
- #### 3.1.1 版本信息读取器
72
-
73
- **文件**: `src/backend/data/version_info_reader.py`
74
-
75
- **核心功能**:
76
- - 从 `package.json` 读取版本号、名称、描述
77
- - 支持应用启动时缓存,避免重复文件读取
78
- - 支持通过环境变量注入构建时间和 Git 提交哈希
79
- - 降级策略:读取失败时返回 `version="unknown"`
80
-
81
- **关键方法**:
82
- - `read_version_info()`: 读取版本信息(带缓存)
83
- - `_read_build_date()`: 读取构建时间(从环境变量 `DASHBOARD_BUILD_DATE`)
84
- - `_read_git_commit()`: 读取 Git 提交哈希(从环境变量 `DASHBOARD_GIT_COMMIT`)
85
-
86
- **性能指标**:
87
- - 首次请求: < 100ms(文件读取 + JSON 解析)
88
- - 后续请求: < 50ms(内存读取)
89
-
90
- #### 3.1.2 版本信息 API 路由
91
-
92
- **文件**: `src/backend/api/version.py`
93
-
94
- **API 端点**: `GET /api/version`
95
-
96
- **响应示例**:
97
- ```json
98
- {
99
- "version": "1.0.10",
100
- "name": "openclaw-agent-dashboard",
101
- "description": "多 Agent 可视化看板 - 状态、任务、API、工作流、协作流程",
102
- "build_date": "2026-03-19T12:34:56Z",
103
- "git_commit": "abc123def456"
104
- }
105
- ```
106
-
107
- **降级响应**(读取失败时):
108
- ```json
109
- {
110
- "version": "unknown",
111
- "name": "openclaw-agent-dashboard",
112
- "description": ""
113
- }
114
- ```
115
-
116
- ### 3.2 前端组件实现
117
-
118
- #### 3.2.1 版本显示组件
119
-
120
- **文件**: `frontend/src/components/common/VersionDisplay.vue`
121
-
122
- **核心功能**:
123
- - 组件挂载时自动调用 `/api/version` 获取版本信息
124
- - 在界面右下角固定显示版本号(12px,灰色文字)
125
- - hover 时显示完整版本信息(名称、版本、描述、构建时间、Git 提交)
126
- - 支持加载中、错误状态显示
127
- - 响应式布局,移动端自动调整大小
128
-
129
- **显示文本**:
130
- - 默认: `openclaw-agent-dashboard v1.0.10`
131
- - 降级: `v?` 或 `openclaw-agent-dashboard vunknown`
132
-
133
- **样式特性**:
134
- - 定位: `position: fixed; bottom: 16px; right: 16px`
135
- - 颜色: `#999`(hover 时变为 `#666`)
136
- - Tooltip: 白色背景,阴影效果,最小宽度 200px
137
-
138
- ---
139
-
140
- ## 4. 验收测试
141
-
142
- ### 4.1 功能验收
143
-
144
- | 编号 | 验收项 | 状态 | 验证方法 |
145
- |-----|--------|------|---------|
146
- | FAT-001 | 后端 API 正常返回版本信息 | ✅ 已实现 | 使用 curl 访问 `/api/version` |
147
- | FAT-002 | 前端组件正常显示版本号 | ✅ 已实现 | 在浏览器中打开 Dashboard |
148
- | FAT-003 | 版本号与 package.json 一致 | ✅ 已实现 | 对比三者版本号 |
149
- | FAT-004 | API 失败时降级显示 | ✅ 已实现 | 模拟 API 失败场景 |
150
- | FAT-005 | 加载状态正确显示 | ✅ 已实现 | 清除缓存,刷新页面 |
151
-
152
- ### 4.2 手动测试步骤
153
-
154
- 1. **启动后端服务**:
155
- ```bash
156
- cd /home/ubuntu/vrt-projects/projects/openclaw-agent-dashboard
157
- npm start
158
- ```
159
-
160
- 2. **测试 API**:
161
- ```bash
162
- curl http://localhost:8000/api/version
163
- # 预期返回包含 version, name, description 的 JSON
164
- ```
165
-
166
- 3. **打开浏览器**:
167
- - 访问 `http://localhost:8000`
168
- - 检查右下角是否显示版本号
169
- - 鼠标悬停在版本号上,查看 tooltip
170
-
171
- 4. **测试降级**:
172
- ```bash
173
- # 删除 package.json,重启服务
174
- cd src/backend
175
- mv ../../package.json ../../package.json.bak
176
- # 重启服务后访问 /api/version
177
- # 预期返回 version: "unknown"
178
- ```
179
-
180
- ---
181
-
182
- ## 5. 设计原则遵循
183
-
184
- ✅ **最小侵入原则**:
185
- - 优先新增文件(3 个新增,2 个修改)
186
- - 修改内容极简(仅新增导入和注册/标签)
187
-
188
- ✅ **单一数据源原则**:
189
- - 版本号仅从 `package.json` 读取
190
- - 避免多源数据导致的不一致
191
-
192
- ✅ **降级优先原则**:
193
- - 文件读取失败返回 `version="unknown"`
194
- - API 始终返回 200 状态码
195
- - 错误日志记录,但不影响核心功能
196
-
197
- ✅ **性能优先原则**:
198
- - 使用缓存机制,避免频繁文件读取
199
- - 响应时间 < 50ms(缓存后)
200
-
201
- ✅ **简体中文注释**:
202
- - 所有新增代码使用简体中文注释
203
-
204
- ---
205
-
206
- ## 6. 环境变量支持
207
-
208
- | 环境变量 | 类型 | 默认值 | 说明 |
209
- |---------|------|--------|------|
210
- | `DASHBOARD_BUILD_DATE` | String | 未设置 | 构建时间戳(ISO 8601 格式) |
211
- | `DASHBOARD_GIT_COMMIT` | String | 未设置 | Git 提交哈希(短格式) |
212
-
213
- **使用示例**:
214
- ```bash
215
- export DASHBOARD_BUILD_DATE=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
216
- export DASHBOARD_GIT_COMMIT=$(git rev-parse --short HEAD)
217
- npm start
218
- ```
219
-
220
- ---
221
-
222
- ## 7. 兼容性分析
223
-
224
- ✅ **向后兼容**:
225
- - 新增功能不影响现有功能
226
- - 不破坏现有 API 和组件
227
-
228
- ✅ **依赖变更**:
229
- - 无新增 npm 包
230
- - 无新增 Python 依赖(使用标准库和现有依赖)
231
-
232
- ✅ **浏览器兼容**:
233
- - 使用标准 Vue 3 和 TypeScript 特性
234
- - 支持主流浏览器(Chrome、Firefox、Safari)
235
-
236
- ---
237
-
238
- ## 8. 已知限制与后续优化
239
-
240
- ### 8.1 当前限制
241
-
242
- 1. **状态管理**:
243
- - 版本信息由组件独立管理,未集成到全局状态管理器
244
- - 影响:其他组件无法直接访问版本信息
245
-
246
- 2. **重试机制**:
247
- - 未实现 API 调用失败时的自动重试
248
- - 影响:网络不稳定时可能显示错误
249
-
250
- 3. **构建集成**:
251
- - 构建脚本未自动注入构建时间和 Git 提交
252
- - 影响:需要手动设置环境变量
253
-
254
- ### 8.2 后续优化建议
255
-
256
- #### 优化 1: 集成到状态管理器(P1)
257
-
258
- **目标**: 将版本信息集成到 `StateManager.ts` 和 `RealtimeDataManager.ts`
259
-
260
- **收益**:
261
- - 全局访问版本信息
262
- - 支持重试机制
263
- - 统一的状态管理
264
-
265
- **实现要点**:
266
- - 在 `StateManager.ts` 新增 `versionInfo` 字段和访问方法
267
- - 在 `RealtimeDataManager.ts` 实现 `loadVersionInfo()` 方法
268
- - 修改 `VersionDisplay.vue` 从状态管理器获取数据
269
-
270
- #### 优化 2: 构建脚本增强(P2)
271
-
272
- **目标**: 在构建时自动注入构建时间和 Git 提交哈希
273
-
274
- **收益**:
275
- - 自动化版本信息注入
276
- - 避免手动设置环境变量
277
- - 更精确的版本追踪
278
-
279
- **实现要点**:
280
- - 修改 `scripts/build-plugin.js`
281
- - 在构建时读取 Git 提交哈希
282
- - 设置环境变量或写入到配置文件
283
-
284
- ---
285
-
286
- ## 9. 文档参考
287
-
288
- - **设计文档**: `.staging/design/VERSION_DISPLAY_design.md`
289
- - **设计清单**: `.staging/design_manifest.md`
290
- - **需求文档**: `docs/specs/VERSION_DISPLAY_spec.md`
291
- - **追溯清单**: `.staging/traceability_manifest.json`
292
-
293
- ---
294
-
295
- ## 10. 总结
296
-
297
- 本次实施成功完成了"界面显示版本号"功能的核心部分(P0 阶段),满足以下目标:
298
-
299
- ✅ **用户体验提升**: 用户可在界面上直观地看到当前版本号
300
- ✅ **问题诊断优化**: 用户反馈问题时可快速提供版本信息
301
- ✅ **升级验证便利**: 升级后可立即确认版本号变化
302
- ✅ **一致性保证**: 前端显示的版本号与实际安装版本保持一致
303
-
304
- 代码质量:
305
- - 遵循最小侵入原则
306
- - 实现降级策略
307
- - 使用缓存机制优化性能
308
- - 简体中文注释清晰
309
-
310
- 后续可根据实际需求,逐步实现 P1/P2 阶段的优化功能。
311
-
312
- ---
313
-
314
- **实施完成时间**: 2026-03-19
315
- **下一阶段**: 功能测试与部署