package main import ( "embed" "github.com/wailsapp/wails/v2" "github.com/wailsapp/wails/v2/pkg/options" "github.com/wailsapp/wails/v2/pkg/options/assetserver" ) //go:embed all:frontend var assets embed.FS func main() { app := NewApp() err := wails.Run(&options.App{ Title: "visionA Local — Edge AI Workspace", Width: 1280, Height: 800, MinWidth: 960, MinHeight: 640, AssetServer: &assetserver.Options{ Assets: assets, }, OnStartup: app.startup, OnShutdown: app.shutdown, // M8-4 / R5-2:關視窗 = 結束 server + 結束 app(預設行為)。 // 不 hide-to-tray、不彈系統 native 對話框。 // // M9-4.5(TDD §8.6.2):firmware-aware close guard。 // - 韌體升降版進行中 → app.OnBeforeClose 回 true、擋住關閉、emit // `app:firmware-in-progress` event 給前端 Design §6a 攔截 modal // - 使用者通過 §6a 第二層 FORCE 確認 → 前端呼叫 ConfirmForceClose // binding → 設旗標 → 觸發 Wails Quit → OnBeforeClose 再被叫 → 放行 // - 沒韌體任務 → 直接 return false、走 OnShutdown → ctrl.Stop() // 既有 7+1s graceful shutdown OnBeforeClose: app.OnBeforeClose, Bind: []interface{}{ app, }, }) if err != nil { panic(err) } }