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

129 lines
6.0 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-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
```go
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.go` 26502 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
```makefile
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 處理)
1. **`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 修正。
2. **`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 範圍,此處只標記。
3. **`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 編譯炸掉。
4. **`frontend/` 仍是原 installer 的舊 UI**`index.html` / `app.js`
- M1-10 改寫 installer 邏輯時應同步改 UI此處僅確認檔案存在未檢查內容符合 M1-9 範圍。
---
## 可以進 M1-10 嗎?
**可以**
M1-9 目標(複製殼、改命名、改 metadata、不動邏輯已達成。M1-10 的工作建議如下:
1. 改寫 `main.go` 的視窗標題為 visionA-local
2. 改寫 `app.go` / `platform_*.go` 為 Python runtime 雙策略A 內嵌 python-build-standalone + B fallback 偵測系統 Python
3. 更新 `platform_darwin.go` / `platform_linux.go` 的資料目錄常數(`~/Library/Application Support/visionA-local/``~/.config/visiona-local/`
4. 改寫 `frontend/` installer UI
5. 建立 `payload/.gitkeep`(避免 embed 編譯失敗)