# 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 也要清(不影響功能但佔空間)