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>
6.7 KiB
6.7 KiB
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
// ❌ 刪除這些 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 要刪除的變數 / 邏輯
// ❌ 刪除這些:
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 §3.3 的完整改寫版。精簡列表:
// ❌ 刪除:
RelayURL string
RelayToken string
GUIMode bool
GiteaURL string
// ❌ 刪除對應的 flag.StringVar / flag.BoolVar 呼叫
6. server/internal/api/router.go 要刪除的內容
見 api-endpoints.md §4 的新版完整程式碼。精簡列表:
clusterMgr,flashSvc,relayToken三個參數clusterHandler初始化- 所有
/api/clusters/*routes /auth/tokenendpoint + 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.tsxsrc/lib/api/clusters.tssrc/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 activitysrc/app/settings/page.tsx— 移除 relay 模式切換、cluster 設定區塊- 各
.tsx中任何對clusterStore/clustersAPI 的 import 與使用
8. installer/app.go(改寫為 visiona-local/app.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
# ❌ 刪除:
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
完成上述刪除後,執行:
# 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 也要清(不影響功能但佔空間)