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>
204 lines
6.7 KiB
Markdown
204 lines
6.7 KiB
Markdown
# Removed Code — visionA-local
|
||
|
||
> 要從 edge-ai-platform 砍掉、不搬進 local_tool 的目錄 / 檔案 / import 清單。
|
||
|
||
---
|
||
|
||
## 1. 整包刪除的目錄
|
||
|
||
| 目錄 | 原因 |
|
||
|------|-----|
|
||
| `server/internal/cluster/` | 使用者決策:砍掉 cluster |
|
||
| `server/internal/tunnel/` | 使用者決策:砍掉 relay / tunnel |
|
||
| `server/internal/update/` | 使用者決策 Q6:不做 auto-update |
|
||
| `server/internal/flash/` | 使用者決策 Q9:砍掉韌體燒錄 |
|
||
| `server/cmd/relay-server/` | 不需要 relay server |
|
||
| `server/pkg/hwid/` | 只被 relay token 生成用 |
|
||
| `server/tray/` | 使用者決策 Q-A=A3:砍掉 tray,省跨平台圖資產與 Wails tray 踩坑 |
|
||
| `server/scripts/firmware/` | flash 已砍 |
|
||
| `docker/` | 不需要 deploy |
|
||
| `scripts/deploy-aws.sh` | 不需要 deploy |
|
||
| `scripts/deploy-ec2.sh` | 同上 |
|
||
| `scripts/deploy-*.sh` | 同上 |
|
||
| `docs/` | 舊文件不 relevant,重新寫 |
|
||
| `installer/frontend/` 中 cluster / relay 相關畫面 | Wails installer 的 UI 不需要 cluster 設定 |
|
||
|
||
## 2. 檔案層級刪除
|
||
|
||
| 檔案 | 原因 |
|
||
|------|-----|
|
||
| `server/scripts/update_kl720_firmware.py` | flash 已砍 |
|
||
| `server/internal/api/handlers/cluster_handler.go` | cluster 已砍 |
|
||
| `server/internal/api/handlers/flash_handler.go`(若獨立) | flash 已砍 |
|
||
| `server/internal/api/ws/flash_progress.go` | flash 已砍 |
|
||
| `server/internal/api/ws/cluster_*.go` | cluster 已砍 |
|
||
| `frontend/src/app/clusters/` | cluster 頁面 |
|
||
| `frontend/src/app/workspace/cluster/` | 同上 |
|
||
| `frontend/src/components/cluster/` | cluster 元件 |
|
||
| `frontend/src/lib/api/clusters.ts` | API client |
|
||
| `frontend/src/components/relay-token-sync.tsx` | relay 專用 |
|
||
| `frontend/src/lib/api/update.ts`(若有) | update 已砍 |
|
||
|
||
## 3. `server/main.go` 要刪除的 import
|
||
|
||
```go
|
||
// ❌ 刪除這些 import:
|
||
"edge-ai-platform/internal/cluster"
|
||
"edge-ai-platform/internal/flash"
|
||
"edge-ai-platform/internal/tunnel"
|
||
"edge-ai-platform/pkg/hwid"
|
||
```
|
||
|
||
## 4. `server/main.go` 要刪除的變數 / 邏輯
|
||
|
||
```go
|
||
// ❌ 刪除這些:
|
||
var tunnelClient *tunnel.Client
|
||
clusterMgr := cluster.NewManager(deviceMgr)
|
||
flashSvc := flash.NewService(deviceMgr, modelRepo)
|
||
|
||
// 刪除整段 relay token 生成:
|
||
relayToken := cfg.RelayToken
|
||
if cfg.RelayURL != "" && relayToken == "" {
|
||
relayToken = hwid.Generate()
|
||
...
|
||
}
|
||
|
||
// 刪除 tunnel 啟動:
|
||
if cfg.RelayURL != "" {
|
||
tunnelClient = tunnel.NewClient(...)
|
||
tunnelClient.Start()
|
||
...
|
||
if relayHTTP := relayWebURL(...); ...
|
||
}
|
||
|
||
// 刪除 shutdownFn 裡的 tunnelClient.Stop()
|
||
|
||
// 刪除 relayWebURL 整個函式
|
||
// 刪除 openBrowser 整個函式(不需要,WebView 由 Wails 管)
|
||
|
||
// systemHandler 的 giteaURL 參數移除:
|
||
systemHandler := handlers.NewSystemHandler(Version, BuildTime, restartFn) // 移除 cfg.GiteaURL
|
||
|
||
// router.NewRouter 的呼叫:
|
||
r := api.NewRouter(
|
||
modelRepo, modelStore, deviceMgr, cameraMgr,
|
||
// ❌ clusterMgr 移除
|
||
// ❌ flashSvc 移除
|
||
inferenceSvc, wsHub, staticFS, logBroadcaster, systemHandler,
|
||
// ❌ relayToken 移除
|
||
)
|
||
```
|
||
|
||
## 5. `server/internal/config/config.go` 要刪除的欄位
|
||
|
||
見 [`code-reuse-plan.md`](./code-reuse-plan.md) §3.3 的完整改寫版。精簡列表:
|
||
|
||
```go
|
||
// ❌ 刪除:
|
||
RelayURL string
|
||
RelayToken string
|
||
GUIMode bool
|
||
GiteaURL string
|
||
|
||
// ❌ 刪除對應的 flag.StringVar / flag.BoolVar 呼叫
|
||
```
|
||
|
||
## 6. `server/internal/api/router.go` 要刪除的內容
|
||
|
||
見 [`api-endpoints.md`](./api-endpoints.md) §4 的新版完整程式碼。精簡列表:
|
||
|
||
- `clusterMgr`, `flashSvc`, `relayToken` 三個參數
|
||
- `clusterHandler` 初始化
|
||
- 所有 `/api/clusters/*` routes
|
||
- `/auth/token` endpoint + OPTIONS
|
||
- 所有 `/ws/clusters/*` routes
|
||
- `/ws/devices/:id/flash-progress`
|
||
|
||
## 7. `frontend/` 要清理的內容
|
||
|
||
**M1 階段就要清乾淨**(使用者決策 Q-C=C2:不接受「M1 先不清前端」的先前建議;必須一次到位,UI 必須乾淨):
|
||
|
||
### 7.1 刪除的目錄
|
||
- `src/app/clusters/`
|
||
- `src/app/workspace/cluster/`(若存在)
|
||
- `src/components/cluster/`
|
||
|
||
### 7.2 刪除的檔案
|
||
- `src/components/relay-token-sync.tsx`
|
||
- `src/lib/api/clusters.ts`
|
||
- `src/lib/api/tunnel.ts`(若有)
|
||
- `src/lib/api/update.ts`(若有)
|
||
- `src/stores/cluster-store.ts`(若有)
|
||
|
||
### 7.3 修改的檔案
|
||
- `src/components/layout/sidebar.tsx` — 移除 "Clusters" 導航項
|
||
- `src/app/page.tsx`(Dashboard) — 移除 cluster stat card / cluster activity
|
||
- `src/app/settings/page.tsx` — 移除 relay 模式切換、cluster 設定區塊
|
||
- 各 `.tsx` 中任何對 `clusterStore` / `clusters` API 的 import 與使用
|
||
|
||
## 8. `installer/app.go`(改寫為 `visiona-local/app.go`)要刪除的內容
|
||
|
||
```go
|
||
// ❌ 刪除的欄位與函式:
|
||
- InstallConfig 中的 relay / dashboard 相關欄位
|
||
- GenerateToken(沒有 token 需求)
|
||
- GetDashboardURL 中的 relay 邏輯
|
||
- LaunchServer 的 relay flag 組裝
|
||
- runInstall 中跟 relay 有關的 step
|
||
|
||
// ✅ 保留但改寫:
|
||
- stepInstallFfmpeg → 改為從 payload 解壓 bundled ffmpeg,不依賴系統 PATH
|
||
- stepInstallUSBDriver → 只在 Windows 執行
|
||
- stepSetupPython → 分裂為 bundled / system 兩條路徑
|
||
```
|
||
|
||
## 9. `Makefile` 要刪除的 target
|
||
|
||
```makefile
|
||
# ❌ 刪除:
|
||
build-relay
|
||
deploy-frontend
|
||
deploy-frontend-setup
|
||
deploy-ec2
|
||
|
||
# 刪除 PHONY 列表中對應的項目
|
||
```
|
||
|
||
## 10. `go.mod` 要移除的依賴
|
||
|
||
執行 `go mod tidy` 後自動移除:
|
||
- 原本為 cluster / relay / tunnel / flash / update 引入的 library
|
||
- 若 `hwid` 引用了 `machineid` 類的套件,也會自動移除
|
||
|
||
不需要手動編輯 go.mod。
|
||
|
||
## 11. 清理後的 sanity check
|
||
|
||
完成上述刪除後,執行:
|
||
|
||
```bash
|
||
# Go 編譯測試
|
||
cd server && go build ./... && go vet ./...
|
||
|
||
# 前端編譯測試
|
||
cd frontend && pnpm build
|
||
|
||
# grep 確認沒有殘留的 import
|
||
grep -rn "cluster" server/ --include="*.go" | grep -v "_test.go"
|
||
grep -rn "tunnel" server/ --include="*.go"
|
||
grep -rn "relay" server/ --include="*.go"
|
||
grep -rn "hwid" server/ --include="*.go"
|
||
grep -rn "flash" server/ --include="*.go" # 注意:可能還有「flash 燈號」等無關字眼
|
||
grep -rn "GiteaURL" server/ --include="*.go"
|
||
|
||
# 應該全部沒有匹配(或只剩無關字眼)
|
||
```
|
||
|
||
## 12. 清理階段的風險
|
||
|
||
- **隱性耦合**:某些 handler 可能透過 router 參數傳遞 `clusterMgr`,移除後要確認所有 call site
|
||
- **前端 build 炸掉**:M1 就要清乾淨(Q-C=C2),必須仔細處理 sidebar、store imports、cross-component references,建議先 grep `cluster|relay|tunnel` 全掃一次再動手
|
||
- **test 依賴**:`api_e2e_test.go` 裡可能有 cluster / flash / auth test case,要一併刪
|
||
- **i18n 殘留**:被刪除的功能對應的 i18n key 也要清(不影響功能但佔空間)
|