From f8533a6b04c5644ac71ca2640f68bad6a132d34d Mon Sep 17 00:00:00 2001 From: jim800121chen Date: Sun, 12 Apr 2026 04:59:23 +0800 Subject: [PATCH] =?UTF-8?q?fix(local-tool):=20sidebar=20icon=20+=20Wails?= =?UTF-8?q?=20Windows=20icon.ico=20+=20=E6=8E=83=E8=A3=9D=E7=BD=AE?= =?UTF-8?q?=E8=B7=AF=E5=BE=91=E4=BF=AE=E5=BE=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit sidebar E icon: - frontend/src/components/layout/sidebar.tsx 左上角的 "E" 方塊換成 指向 /visiona-logo.png,從 frontend/public/visiona-logo.png serve Wails 桌面/工作列 icon: - 把 branding/icon.ico 複製到 visiona-local/build/windows/icon.ico - Wails v2 Windows build 偵測到這個檔案就會直接用它當 exe embedded icon, 不再從 appicon.png 自動 resize(解析度更好) 掃裝置根因修復: 1. server main.go:新增 resolveBridgeScript() 智慧找 kneron_bridge.py - 優先 /scripts/kneron_bridge.py - fallback /../scripts/... 對應 Windows installer 的 {app}\bin\ + {app}\scripts\ 佈局 - fallback /../Resources/scripts/... 對應 macOS app bundle 2. server kneron/detector.go:ResolvePython 重寫 - 最高優先:VISIONA_PYTHON 環境變數(由 Wails 殼層注入) - 加入 visiona-local 新路徑:%APPDATA%\visiona-local\runtime\venv、 ~/Library/Application Support/visiona-local/runtime/venv、 ~/.local/share/visiona-local/runtime/venv - 保留 edge-ai-platform 舊路徑作為 legacy fallback 3. visiona-local/app.go:spawn server 時 export VISIONA_PYTHON= 讓 detector 直接用 Wails 殼層已經 resolve 好的 python interpreter, 不再自己獨立去找造成不一致。 Co-Authored-By: Claude Opus 4.6 (1M context) --- local-tool/frontend/public/visiona-logo.png | Bin 0 -> 24222 bytes .../src/components/layout/sidebar.tsx | 9 ++-- .../server/internal/driver/kneron/detector.go | 39 +++++++++++++++--- local-tool/server/main.go | 31 +++++++++++++- local-tool/visiona-local/app.go | 6 +++ .../visiona-local/build/windows/icon.ico | Bin 0 -> 50700 bytes 6 files changed, 75 insertions(+), 10 deletions(-) create mode 100644 local-tool/frontend/public/visiona-logo.png create mode 100644 local-tool/visiona-local/build/windows/icon.ico diff --git a/local-tool/frontend/public/visiona-logo.png b/local-tool/frontend/public/visiona-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..09717b54f268352e9d97d2df6b99b75f9d55cf76 GIT binary patch literal 24222 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 Yw{}ZhlHQfU1$+RhC~7E_%NYm$9~u1BP5=M^ literal 0 HcmV?d00001 diff --git a/local-tool/frontend/src/components/layout/sidebar.tsx b/local-tool/frontend/src/components/layout/sidebar.tsx index 3b0871d..306ead3 100644 --- a/local-tool/frontend/src/components/layout/sidebar.tsx +++ b/local-tool/frontend/src/components/layout/sidebar.tsx @@ -21,9 +21,12 @@ export function Sidebar() {