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.0 KiB
M1-9 Review — 複製 Wails installer shell 改名為 visiona-local
審查日期:2026-04-11
審查對象:/Users/jimchen/visionA/local-tool/visiona-local/
任務描述:從 edge-ai-platform/installer/ 複製 Wails 殼層,改名為 visiona-local,只處理命名與 metadata,不碰邏輯
結論:✅ 通過
所有必要檔案就位,命名規則一致(visiona-local 全小寫 for module/binary/bundle ID、visionA-local 駝峰 for 產品顯示名),Bundle ID 正確,三平台 wheels 都在,Makefile target 已就緒但註解掉實際執行。platform_*.go / app.go 邏輯完全沒動,符合 M1-9 範圍。可以進 M1-10。
檢查清單
1. 必要檔案存在
| 檔案 | 狀態 | 備註 |
|---|---|---|
app.go |
✅ | 26502 bytes,未動 |
main.go |
✅ | 623 bytes |
wails.json |
✅ | |
go.mod |
✅ | module visiona-local |
go.sum |
✅ | 7137 bytes |
platform_darwin.go |
✅ | 未動 |
platform_linux.go |
✅ | 未動 |
platform_windows.go |
✅ | 未動 |
embed.go |
✅ | //go:embed all:payload |
build/darwin/Info.plist |
✅ | |
frontend/ |
✅ | 有 index.html / app.js / style.css / wailsjs |
wheels/ |
✅ | macos / linux / windows 三子目錄齊全 |
2. wails.json 內容
| 欄位 | 期望 | 實際 | 狀態 |
|---|---|---|---|
name |
visiona-local |
visiona-local |
✅ |
outputfilename |
visiona-local |
visiona-local |
✅ |
info.productName |
visionA-local(駝峰) |
visionA-local |
✅ |
info.companyName |
Innovedus |
Innovedus |
✅ |
author.name |
— | Innovedus |
✅ |
info.copyright |
— | Copyright 2026 Innovedus |
✅ |
3. go.mod module
module visiona-local
go 1.22.0
require github.com/wailsapp/wails/v2 v2.11.0
✅ 正確
4. Info.plist
| 欄位 | 期望 | 實際 | 狀態 |
|---|---|---|---|
CFBundleName |
visionA-local |
visionA-local |
✅ |
CFBundleDisplayName |
visionA-local |
visionA-local |
✅ |
CFBundleIdentifier |
com.innovedus.visiona-local |
com.innovedus.visiona-local |
✅ |
CFBundleExecutable |
{{.OutputFilename}}(由 wails 填入) |
{{.OutputFilename}} |
✅ |
CFBundleVersion / CFBundleShortVersionString |
{{.Info.ProductVersion}} |
同 | ✅ |
沒有殘留 {{.Name}} / {{.Identifier}} placeholder |
— | 僅剩 {{.OutputFilename}} / {{.Info.*}}(Wails 標準欄位,會在 build 時填入) |
✅ |
說明:{{.OutputFilename}}、{{.Info.ProductVersion}}、{{.Info.Copyright}}、{{.Info.Comments}} 等是 Wails 標準 template,會在 wails build 時從 wails.json 填入,不是需要手動清掉的 placeholder。關鍵的 {{.Name}} / {{.Identifier}} 已經硬編碼為正確值。
5. 未誤動邏輯
app.go26502 bytes、platform_*.go體積與 edge-ai-platform 相近 → 未改動 ✅- grep
edge-ai-platform只在platform_darwin.go/platform_linux.go的資料目錄字串 literal 出現(4 筆),符合 M1-9 不動邏輯的範圍 ✅
6. Makefile wails-macos target
wails-macos: ## wails build darwin/amd64 → visiona-local/build/bin/visiona-local.app
@echo "[M1-9] wails-macos target 已就緒;實際執行在 M1-12 啟用"
@echo " cd visiona-local && wails build -platform darwin/amd64 -clean"
# cd visiona-local && wails build -platform darwin/amd64 -clean
✅ target 已寫入 .PHONY,實際 wails build 指令被註解掉,只印提示訊息,符合 M1-9 不跑 build 的要求。
7. wheels/ 三平台
| 平台 | 檔案 | 狀態 |
|---|---|---|
| macOS | KneronPLUS-2.0.0-py3-none-any.whl |
✅ |
| Linux | KneronPLUS-2.0.0-py3-none-any.whl |
✅ |
| Windows | KneronPLUS-3.1.2-py3-none-any.whl |
✅(版本差異屬正常,KneronPLUS Windows 版本號本來就不同) |
問題
🔴 Blocker
無
🟡 Major
無
🟢 Minor / 提示(不阻擋 M1-9 通過,M1-10 處理)
-
main.go的Title: "Edge AI Platform Installer"- 位置:
visiona-local/main.go:18 - 說明:視窗標題仍是原 installer 字串。M1-10 要整個改寫 app.go + main.go 為 visionA-local 的 Python 雙策略空殼,屆時會一併改為
"visionA-local Installer"或類似。列為提示,不在 M1-9 修正。
- 位置:
-
platform_darwin.go/platform_linux.go的.edge-ai-platform資料目錄字串- 位置:
platform_darwin.go:17,22、platform_linux.go:17,22 - 說明:共 4 筆 literal,對應原 installer 的
~/.edge-ai-platform資料目錄。依第四輪決策 R4-5,新資料目錄為全小寫visiona-local(macOS 改到~/Library/Application Support/visionA-local/)。題目明確說此屬 M1-10 範圍,此處只標記。
- 位置:
-
embed.go的//go:embed all:payload- 目前
visiona-local/下沒有payload/目錄,在 M1-11 打包前,go build/wails build會失敗(pattern all:payload: no matching files found)。 - M1-9 沒有要求 build 通過,且 Makefile
wails-macos實際指令已被註解,所以不阻擋此任務。但請 M1-10/M1-11 注意:在第一次嘗試 build 前,至少要先建立payload/.gitkeep或臨時空檔案,避免 embed 編譯炸掉。
- 目前
-
frontend/仍是原 installer 的舊 UI(index.html/app.js)- M1-10 改寫 installer 邏輯時應同步改 UI,此處僅確認檔案存在,未檢查內容,符合 M1-9 範圍。
可以進 M1-10 嗎?
✅ 可以。
M1-9 目標(複製殼、改命名、改 metadata、不動邏輯)已達成。M1-10 的工作建議如下:
- 改寫
main.go的視窗標題為 visionA-local - 改寫
app.go/platform_*.go為 Python runtime 雙策略(A 內嵌 python-build-standalone + B fallback 偵測系統 Python) - 更新
platform_darwin.go/platform_linux.go的資料目錄常數(~/Library/Application Support/visionA-local/與~/.config/visiona-local/) - 改寫
frontend/installer UI - 建立
payload/.gitkeep(避免 embed 編譯失敗)