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

92 lines
7.7 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.

# visionA-local 設計規格(索引)
> Design Agent · 第二輪正式規格 · 2026-04-11第三輪修訂 2026-04-11
> 本文件為索引檔,各章節詳細內容請見 `spec/` 子檔。所有決策依據 progress.md2026-04-11定案。
## 文件結構
| # | 章節 | 檔案 | 一句話摘要 |
|---|------|------|-----------|
| 1 | 資訊架構IA | `spec/01-information-architecture.md` | 4 主區塊 + Settingssidebar 導航,無 deep link |
| 2 | 頁面清單與變更對照 | `spec/02-pages-diff.md` | 對照原 edge-ai-platform 的保留/刪除/修改 |
| 3 | 主要頁面 Wireframe | `spec/03-wireframes.md` | Dashboard / Models / Devices / Workspace / Settings 結構描述 |
| 4 | First-Run Experience | `spec/04-first-run.md` | 歡迎 → 模式選擇 → 硬體偵測,可跳過 |
| 5 | ~~Tray 互動規格~~ | — | **已於第三輪決策 Q-A 砍除**(不做 tray。編號保留以避免後續引用失效 |
| 6 | 跨平台 UX 差異 | `spec/06-cross-platform.md` | title bar、快捷鍵、對話框、通知 |
| 7 | Design Tokens | `spec/07-design-tokens.md` | 沿用 edge-ai-platform oklch tokens補 L 級 elevation |
| 8 | 錯誤與空狀態 | `spec/08-states.md` | 全域錯誤分級 + 空狀態文案庫 |
| 9 | 無障礙A11y | `spec/09-accessibility.md` | **盡力而為**R4-3 降級,非硬性目標)— 保留鍵盤、焦點、語意化 HTML 等低成本項目 |
| 10 | i18n 策略 | `spec/10-i18n.md` | 中英雙語,跟隨系統,沿用 react-i18next |
## 關鍵設計決策(摘要)
1. **視窗模型**:傳統桌面 app — **關閉視窗 = 結束程式**。**不做 tray icon**(第三輪決策 Q-A省跨平台圖資產與 Wails tray 踩坑,也避免與「關閉 = 結束」的語意衝突。
2. **資訊架構扁平化**:從原 5 區(含 clusters瘦身為 4 主區 + Settings。所有 clusterrelay 相關入口完全移除,**M1 就一次清乾淨**(第三輪決策 Q-C
3. **Dashboard 重定位**:原本是叢集總覽,現在改成「快速開始 + 單機狀態卡」,把首頁價值從「監看」轉為「起手」。
4. **預設真實硬體模式**:首次啟動不預設 Mock但在模式選擇步驟提供 Mock 作為明確替代,且可隨時切換。
5. **First-Run 可全跳過**:三步流程(歡迎 / 模式 / 偵測),每一步右上都有「略過」,降低挫敗。
6. **深色模式跟隨系統**不提供手動切換Settings 僅顯示「目前跟隨系統」唯讀狀態,避免決策疲勞)。
7. **中英雙語**:預設跟隨系統 Locale`zh-*` → 繁中;其他 → 英文Settings 可手動切換。
8. **Logo 沿用 edge-ai-platform**暫不重新設計品牌識別僅把產品字樣改為「visionA-local」。
9. **Design Tokens 完全沿用**:原專案使用 shadcn + oklch 中性色盤local 版無變更,只補 desktop 專用的 elevation 與 window chrome token。
10. **Settings 重構為分頁式****一般 / 硬體 / 模型 / 進階**4 分頁,第三輪決策 Q-E3 取消「外觀」分頁,語言併入「一般」)。
11. **macOS 資料目錄**`~/Library/Application Support/visiona-local/`(第三輪決策 Q-E1遵循 OS 慣例;第四輪 R4-5 全小寫對齊 Bundle ID 與 Linux 慣例)。
## 第四輪決策採納對照2026-04-11 交叉審閱後)
| # | 決策 | 落地位置 |
|---|------|---------|
| R4-2 | MJPEG 延遲目標:首次 ≤250ms / 穩定後 ≤150ms | `spec/03-wireframes.md` Workspace Perf 示例值改為 180ms |
| R4-3 | WCAG 2.2 AA 降級為「盡力而為」(非硬性目標) | `spec/09-accessibility.md` 全節改寫、design-spec 索引同步 |
| R4-5 | 資料目錄全小寫 `visiona-local`(對齊 Bundle ID 與 Linux 慣例) | `spec/06-cross-platform.md §6.7``spec/04-first-run.md §4.1/§4.6/§4.7``spec/03-wireframes.md §3.5``spec/10-i18n.md §10.2` |
| R4-6 | ⌘R → ⌘Shift+R⌘Shift+W 取消 | `spec/06-cross-platform.md §6.2` |
| R4-8 | 通知策略:裝置連/斷 → App toastServer 崩潰 → OS 原生通知 | `spec/06-cross-platform.md §6.4` |
| — | Single-instance 第二次啟動 → 靜默 raise不彈 toast | `spec/06-cross-platform.md §6.9`(新增) |
| — | Python sidecar crash loading + 自動重啟 | `spec/08-states.md §8.8`(新增) |
| — | Python 雙策略切換 UI 入口 | `spec/03-wireframes.md §3.5` Settings > 進階 |
| — | 深色模式CSS `prefers-color-scheme`(不需 JS emit event | `spec/06-cross-platform.md §6.8``spec/07-design-tokens.md §7.5` 註記 |
| — | i18n 即時切換 → M2 才做 | `spec/10-i18n.md §10.7` 明確標註 |
## 已知 contingency
- **R9 Kneron 預置模型 re-distribution**:第四輪 R4-1 決定繼續內嵌、不主動問 Kneron發佈前 gate 維持。**若 R9 觸發**First-Run 需插入「下載預置模型」步驟,完整 fallback 流程的 Wireframe 與互動規格草案保留在 `design-cross-review.md §「R9 Plan B 的 First-Run 下載流程草案」`,目前**不納入正式 design-spec**(避免誤導開發團隊)。若真的觸發,會把該草案升格為 `spec/04-first-run-plan-b.md`
## 第三輪決策採納對照
| # | 原疑問 | 第三輪結果 |
|---|--------|----------|
| 1 | Tray 是否要做? | **Q-A 砍掉 tray**。05-tray.md 已刪除;`⌘0 顯示主視窗` 等 tray 相關快捷鍵同步移除 |
| 3 | Workspace 升為 sidebar 一級 | **Q-E2 採納**。IA 已確定 4 主區塊含 Workspace |
| 4 | Settings「外觀」分頁取消 | **Q-E3 採納**。Settings 為 4 分頁(一般 / 硬體 / 模型 / 進階),語言在「一般」 |
| — | macOS 資料目錄 | **Q-E1**`~/Library/Application Support/visiona-local/`(取代 `~/.visiona-local/`R4-5 全小寫) |
| — | M1 範圍 | **Q-C**M1 就要清乾淨前端 cluster/relay UI不分期 |
## 第三輪修訂後仍待確認 / 仍需使用者回饋
1. **Mock 模式的視覺標記**(沿用第二輪建議)
預設真實硬體模式後Mock 變成明確的「次要體驗」。建議在 header 右側加一個永久性 `Mock` badge黃色避免使用者誤把假結果當成真推論。此項已寫入 wireframe**未見使用者反對,視為採納**。
2. **簽章警示的 UX**Q2 決策:不買憑證)
macOS 會跳 Gatekeeper 警告、Windows 會跳 SmartScreen。這些是 **OS 層的對話框App 內無法攔截**;但首次啟動完成後的「歡迎畫面」應該主動說明「你可能剛才看到警告,那是因為我們是內部工具,已經安全」,降低焦慮。文案已寫入 `04-first-run.md`
3. **快捷鍵衝突tray 砍除 + 第四輪 R4-6 重整後)**
最小快捷鍵集:⌘, (Settings)、⌘W關閉結束、⌘Q結束、⌘1~4切換主區塊⌘4 即前往 Workspace、⌘Shift+R重新整理裝置、⌘U上傳模型
**R4-6 變更**
- `⌘R`**`⌘Shift+R`**(避免與 WebView 的 reload 衝突)
- **取消 `⌘Shift+W`**(與 macOS 內建「關閉所有視窗」衝突⌘4 已涵蓋前往 Workspace
-`⌘0 顯示主視窗(從 tray` 已於第三輪隨 tray 移除。
4. **[第三輪新增] Mock 模式切換入口的去留**
砍掉 tray 後,原本 tray 選單提供的「一鍵切換 Mock ↔ Real」捷徑消失。目前 Mock 切換入口剩下:
- Settings > 硬體(主要入口)
- Devices 頁面右上角的「真實 / Mock」pill 切換
- First-Run Step 2僅首次
Design 認為這樣夠用(切換頻率不高),但若未來使用者抱怨「找不到切換入口」,可考慮在 Dashboard 的 Quick Start 區加一個二級行動。**目前不改**。
---
**下一步:**
- PM / Architect 交叉 review 本規格第三輪修訂版
- 三方確認後進入 Prototype 階段HTML/CSS 原型,後續迭代處理)