jim800121chen c54f16fca0 Initial commit: visionA monorepo with local-tool subproject
local-tool/: visionA-local desktop app
- M1: Wails shell + Go server + Next.js UI + Mock mode (macOS dmg ready)
- M2: i18n (zh-TW/en) + Settings 4-tab refactor
- M3: Embedded Python 3.12 runtime (python-build-standalone) + KneronPLUS wheels
- M4: Windows Inno Setup script (build on Windows runner)
- M5: Linux AppImage script + udev rule (build on Linux runner)
- M6: ffmpeg (GPL, pending legal review) + yt-dlp bundled
- Lifecycle: watchServer health check, fatal native dialog,
            Wails IPC raise endpoint, stale process cleanup

.autoflow/: full PRD / Design Spec / Architecture / Testing docs
            (4 rounds tri-party discussion + cross review)
.github/workflows/: macOS / Windows / Linux build CI

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 22:10:38 +08:00

142 lines
7.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# M1-2 Review — 複製 server core
- 審查者Reviewer Agent
- 日期2026-04-10
- 審查對象:`/Users/jimchen/visionA/local-tool/server/`
- 來源:`/Users/jimchen/Innovedus/edge-ai-platform/edge-ai-platform/server/`
## 結論:✅ 通過
M1-2 的任務目標是「直接複製 server core跳過要刪的目錄不修改內容」。所有檢查項全部符合預期檔案內容與來源 byte-for-byte 相同,跳過清單 100% 正確。Import 在這個階段壞掉是預期中的事M1-3 才會清理),以下已預先蒐集 M1-3 要修的完整清單。
---
## 跳過清單檢查
| 項目 | 來源是否存在 | 目標是否存在 | 結果 |
|------|------------|------------|------|
| `server/internal/cluster/` | ✅ | ❌ | ✅ 正確跳過 |
| `server/internal/tunnel/` | ✅ | ❌ | ✅ 正確跳過 |
| `server/internal/flash/` | ✅ | ❌ | ✅ 正確跳過 |
| `server/internal/update/` | ✅ | ❌ | ✅ 正確跳過 |
| `server/internal/relay/` | ✅ | ❌ | ✅ 正確跳過code-reuse-plan 未明列但符合「relay 相關一律砍」精神) |
| `server/pkg/hwid/` | ✅ | ❌ | ✅ 正確跳過 |
| `server/cmd/relay-server/` | ✅ | ❌ | ✅ 正確跳過(目標根本沒有 `cmd/` 目錄) |
| `server/tray/` | ✅ | ❌ | ✅ 正確跳過 |
| `server/scripts/firmware/` | ✅ | ❌ | ✅ 正確跳過 |
| `server/scripts/update_kl720_firmware.py` | ✅ | ❌ | ✅ 正確跳過 |
| `server/scripts/__pycache__/` | ✅ | ❌ | ✅ 正確跳過 |
| `server/web/out/`(舊 Next.js 產物) | ✅ | ❌ | ✅ 正確跳過 |
| `edge-ai-server` binary / `.next/` | — | ❌ | ✅ 未帶入 |
**驗證方法:** 對目標執行 `for d in ...; do [ -e "$d" ] && echo FOUND || echo OK; done`,全部 OK-MISSING。
---
## 必要檔案檢查
| 項目 | 結果 | 備註 |
|------|------|------|
| `server/main.go` | ✅ | 305 行,與來源逐 byte 相同 |
| `server/go.mod` | ✅ | 與來源相同 |
| `server/go.sum` | ✅ | 與來源相同 |
| `server/internal/api/` | ✅ | 含 handlers、ws、router.go、middleware.go、api_e2e_test.go 全齊 |
| `server/internal/camera/` | ✅ | |
| `server/internal/config/` | ✅ | |
| `server/internal/deps/` | ✅ | |
| `server/internal/device/` | ✅ | |
| `server/internal/driver/` | ✅ | |
| `server/internal/inference/` | ✅ | |
| `server/internal/model/` | ✅ | |
| `server/pkg/logger/` | ✅ | |
| `server/pkg/wsconn/` | ✅ | Backend 判斷保留 — 合理,`ws/` 下的 hub/device_events 等會依賴它 |
| `server/data/models.json` | ✅ | |
| `server/data/nef/` | ✅ | 8 個 `.nef` 檔、`data/` 總大小 73M符合規格 |
| `server/scripts/kneron_bridge.py` | ✅ | |
| `server/scripts/requirements.txt` | ✅ | |
| `server/scripts/drivers/` | ✅ | 來源也有,順帶帶入,無衝突 |
| `server/web/embed.go` | ✅ | |
**注意:** `server/internal/api/handlers/cluster_handler.go``server/internal/api/ws/flash_ws.go``cluster_flash_ws.go``cluster_inference_ws.go` 這四個「檔案層級要刪」的檔案目前「存在」。這符合本階段規則(只跳過**整個目錄**,不砍單檔;檔案層級的刪除是 M1-3 的工作)。已列入下方 M1-3 待辦。
---
## 內容未修改驗證
使用 `diff -rq SRC/ DST/` 全面比對,結果:
- `diff -q main.go` → 完全相同
- `diff -q go.mod` → 完全相同
- `diff -rq internal/` → 只回報 `Only in SRC: cluster / tunnel / flash / update / relay`(全部都是預期要跳過的)
- `diff -rq pkg/` → 只回報 `Only in SRC: hwid`(預期)
- `diff -rq scripts/` → 只回報 `Only in SRC: __pycache__ / firmware / update_kl720_firmware.py`(預期)
- `diff -rq data/` → 無任何差異
- `diff -rq web/` → 只回報 `Only in SRC: out`(預期,舊 build 產物)
**結論:除了跳過清單上的項目,其餘檔案與來源 100% 相同。Backend Agent 確實沒動任何內容。**
---
## M1-3 要修的 import 清單(預先蒐集)
以下檔案含有「壞掉的 import」或「需要刪除的整檔」M1-3 必須處理:
### A. 需要刪除的整個檔案
| 檔案 | 原因 |
|------|------|
| `server/internal/api/handlers/cluster_handler.go` | cluster 已砍removed-code.md §2 |
| `server/internal/api/ws/flash_ws.go` | flash 已砍 |
| `server/internal/api/ws/cluster_flash_ws.go` | cluster + flash |
| `server/internal/api/ws/cluster_inference_ws.go` | cluster |
### B. 需要修改 import 與邏輯的檔案
| 檔案 | 壞掉的 import | M1-3 動作 |
|------|-------------|----------|
| `server/main.go` | `internal/cluster`L23`internal/flash`L27`internal/tunnel`L30`pkg/hwid`L31 | 依 removed-code.md §3、§4 刪除 import 與對應變數/啟動邏輯,並同步改 module path`edge-ai-platform``visiona-local/server` 或使用者決定的名字) |
| `server/internal/api/router.go` | `internal/cluster`L13`internal/flash`L15 | 依 api-endpoints.md §4 改寫:移除 `clusterMgr` / `flashSvc` / `relayToken` 參數與對應 routes |
| `server/internal/api/api_e2e_test.go` | `internal/cluster`L14`internal/flash`L16 | 依 code-reuse-plan §2 改寫:刪除 cluster / flash / auth 測試案例 |
| `server/internal/api/handlers/device_handler.go` | `internal/flash`L11 | 移除 `FlashDevice` handler 與 `flashSvc` 注入 |
| `server/internal/api/handlers/system_handler.go` | `internal/update`L9 | 移除 `CheckUpdate``giteaURL` 參數、`update-check` handler |
### C. Module path 改名(全檔大量影響)
目前 `go.mod` 仍是 `module edge-ai-platform`(未改),所以**所有 .go 檔**中 `import "edge-ai-platform/..."` 會在 M1-3 改 module 名時一併更新。這是預期內的大規模 find-replace不算額外壞掉的 import。
### D. grep 結果補充
```
grep -rn "edge-ai-platform/(cluster|tunnel|flash|update|relay|hwid)" server/
```
僅在上表 6 個檔案命中,其餘檔案乾淨。`ws/` 下的剩餘檔案hub.go、device_events_ws.go、server_logs_ws.go、inference_ws.go沒有任何壞掉的 importM1-3 只需保留。
---
## 問題
### 🔴 Critical
無。
### 🟡 Major
無。M1-2 的範圍就是「複製 + 跳過」,目前所有檔案都在正確位置,內容未動,沒有任何超出職責的改動。
### 🟢 Minor / 備註
1. **Module name 尚未更改**`go.mod` 仍是 `module edge-ai-platform`。這符合「本階段不修改內容」的承諾,但 M1-3 務必記得要改 module name 並同步所有 import。
2. **`scripts/drivers/` 順帶帶入** — 來源 `server/scripts/` 下有一個 `drivers/` 子目錄code-reuse-plan 沒特別列出也沒列入刪除。Backend Agent 一起複製過來了,屬於無害的保守做法。若確認完全用不到,可在 M1-3 或清理階段再決定是否刪除。
3. **`web/embed.go` 保留但 `web/out/` 未複製** — 這是刻意的:`go:embed` 目標目錄是 `out/`,在 M1 階段因為還沒建 frontend`embed.go` 編譯會失敗。這是 M1-3 或 frontend 階段要處理的問題(需要先放一個 placeholder `out/` 或改 embed 策略),**請提醒 M1-3 注意此編譯障礙**。
---
## 可以進入 M1-3 嗎?
**可以**。M1-2 所有目標達成複製完整、跳過正確、內容未動。M1-3 可直接依本報告「M1-3 要修的 import 清單」開始清理工作,建議順序:
1. 先刪除 A 清單的 4 個整檔
2. 再改 B 清單的 5 個檔案router.go 最關鍵)
3. 執行 `go mod edit -module visiona-local/server`(或使用者決定的名字)
4. 全檔 find-replace `edge-ai-platform/` → 新 module path
5. 處理 `web/embed.go` 的 embed target建立空 `out/` 或加 build tag
6. `cd server && go build ./...` 驗證可通過