From 3d13e5a54e909b6eaadb743f08797877a9ff85bd Mon Sep 17 00:00:00 2001 From: richblack Date: Tue, 4 Aug 2026 23:09:54 +0800 Subject: [PATCH] =?UTF-8?q?t193=20=E4=BA=8C=E4=BF=AE=EF=BC=9A=E5=81=B4?= =?UTF-8?q?=E9=82=8A=E6=AC=84=E7=89=88=E9=9D=A2=EF=BC=8B=E5=85=B1=E7=94=A8?= =?UTF-8?q?=20CSS=EF=BC=8BApp=20=E5=85=A7=E6=9B=B4=E6=96=B0=EF=BC=8B?= =?UTF-8?q?=E5=85=A9=E6=94=AF=E8=A6=96=E8=A6=BA=E6=A9=9F=E6=A2=B0=E9=96=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit leo 08-04 看過 v0.17.0 後的四點,逐條回應: ## ① 「不會這裡又寫了一個新的 CSS?」——是,我又寫了一份 真兇:portal 的樣式內嵌在 HTML 裡,沒有獨立檔 ⇒ 四個站各抄一份、本來就在漂移。 解:抽出 InkStoneCo/arcrun-cis/css/arcrun-cis.css 當唯一真相源。 daemon 的 style.css 現在**一個 hex 都沒有**,顏色全走 var(--...)。 ## ② 「完全模仿 gdrive,左方側邊欄,在右方替換頁面」 底部 nav bar 拿掉(leo:「幾乎沒看過這種 nav bar 在下方的」)。 改成左側邊欄四頁:首頁/同步資料夾/AI 設定/版本與更新,右側換頁。 設定不再開 popup;只有「確認移除資料夾」才用覆蓋層。 ## ③ 「既然是 Web,你做的時候無法檢視?」——可以,我之前沒做 新增 check-render.sh:headless Chrome 真的渲染一次並**量像素**。 它抓到一個肉眼容易誤判的真 bug: arcrun-lockup-h-paper-on-ink.png **自帶不透明 Ink 底板**(實測左上像素 RGBA=23,24,26,255), 設計前提是貼在純 Ink 表面;我們背景有紙張紋理 ⇒ 出現突兀方塊。 修:深色模式把品牌區做成純 Ink。實測落差 4(原本會是一個明顯方塊)。 過程中也發現自己對著**舊的 dist**除錯,浪費一輪——這支閘同時防這個。 ## ④ 「檢查更新連到 docs,不正確,是直接在這裡進行」 新增「版本與更新」頁:顯示**現在版本 vs 最新版本**, 三段式全在 App 內完成——檢查/下載並安裝/重新啟動套用。 selfupdate 邏輯逐字沿用 arcrun-tray(含 t186 走 raw、t184 蓋正在跑的 .app),不重寫。 ## 交貨閘(leo:「你做為檢查有嗎?沒有怎麼交貨?」) check-cis.sh 擴充:版面檔不准出現任何 hex + 共用底層色票逐項比對。 兩支閘實跑全過。 --- cmd/arcrun-app/app.go | 6 +- cmd/arcrun-app/check-cis.sh | 10 +- cmd/arcrun-app/check-render.sh | 71 ++++ cmd/arcrun-app/frontend/index.html | 48 +-- cmd/arcrun-app/frontend/src/arcrun-cis.css | 33 ++ cmd/arcrun-app/frontend/src/main.js | 316 +++++++++++------ cmd/arcrun-app/frontend/src/style.css | 186 +++++----- cmd/arcrun-app/selfupdate.go | 375 +++++++++++++++++++++ cmd/arcrun-app/update_api.go | 74 ++++ 9 files changed, 893 insertions(+), 226 deletions(-) create mode 100755 cmd/arcrun-app/check-render.sh create mode 100644 cmd/arcrun-app/frontend/src/arcrun-cis.css create mode 100644 cmd/arcrun-app/selfupdate.go create mode 100644 cmd/arcrun-app/update_api.go diff --git a/cmd/arcrun-app/app.go b/cmd/arcrun-app/app.go index a2d1e9f..8406d6a 100644 --- a/cmd/arcrun-app/app.go +++ b/cmd/arcrun-app/app.go @@ -135,8 +135,9 @@ type UIState struct { StatusSub string `json:"statusSub"` Syncing bool `json:"syncing"` Accounts []UIAccount `json:"accounts"` - Engine string `json:"engine"` // "workers-ai" | "gemma" - GeminiKey string `json:"geminiKey"` // 只回遮罩,不回真值 + Engine string `json:"engine"` // "workers-ai" | "gemma" + GeminiKey string `json:"geminiKey"` // 只回遮罩,不回真值 + ExtractedOK int `json:"extractedOK"` // 首頁「已整理幾份」 } // GetState 是前端每秒拉一次的單一入口。 @@ -161,6 +162,7 @@ func (a *App) GetState() UIState { } sync := loadSyncStatus() + st.ExtractedOK = sync.ExtractedOK st.Syncing, st.StatusBig, st.StatusSub = describeStatus(sync) return st } diff --git a/cmd/arcrun-app/check-cis.sh b/cmd/arcrun-app/check-cis.sh index 4153468..de4318e 100755 --- a/cmd/arcrun-app/check-cis.sh +++ b/cmd/arcrun-app/check-cis.sh @@ -6,7 +6,9 @@ # ⇒ 交貨前先跑這支。不過就不准交。 set -uo pipefail cd "$(dirname "$0")" -CSS=frontend/src/style.css +# 色票/字體/紋理在共用底層;版面在 style.css ⇒ 兩份都要看 +CSS=frontend/src/arcrun-cis.css +LAYOUT=frontend/src/style.css HTML=frontend/index.html FAIL=0 ok(){ printf " ✅ %s\n" "$1"; } @@ -21,8 +23,12 @@ for t in "#FDFCFB:Paper" "#F2F1ED:Canvas" "#17181A:Ink" "#B04A2F:Relation" "#D97 done # ② 不准自創顏色:抓不在白名單內的 hex +# 版面檔**一個 hex 都不准有**(顏色一律 var(--...)) +STRAY_LAYOUT=$(grep -oiE '#[0-9a-f]{6}' "$LAYOUT" || true) +[ -z "$STRAY_LAYOUT" ] && ok "版面檔沒有寫死顏色" || ng "版面檔出現 hex:$STRAY_LAYOUT" + STRAY=$(grep -oiE '#[0-9a-f]{6}' "$CSS" | tr 'a-f' 'A-F' | sort -u \ - | grep -vE '#(FDFCFB|F2F1ED|17181A|B04A2F|D9784F|1D7A48|7FE0A8|B03A26|E58575|1B1C1E|1E1F21)' || true) + | grep -vE '#(FDFCFB|F2F1ED|17181A|B04A2F|D9784F|1D7A48|7FE0A8|B03A26|E58575|1B1C1E|1E1F21|1D6B40|A8E8C4)' || true) [ -z "$STRAY" ] && ok "沒有自創顏色" || ng "出現非 CIS 色:$(echo $STRAY | tr '\n' ' ')" # ③ Logo 必須真的放進去(leo 點名的那條) diff --git a/cmd/arcrun-app/check-render.sh b/cmd/arcrun-app/check-render.sh new file mode 100755 index 0000000..c0d4079 --- /dev/null +++ b/cmd/arcrun-app/check-render.sh @@ -0,0 +1,71 @@ +#!/usr/bin/env bash +# check-render.sh — **看得見的驗收**:用 headless Chrome 真的渲染一次並量像素(t193) +# +# 🔴 leo 2026-08-04:「既然是 Web,你做的時候**無法檢視**?例如用 chrome dev tool mcp?」 +# ⇒ 對,可以。以後改完 UI 就跑這支,不要再拿沒看過的畫面交件。 +# +# 它驗兩件肉眼容易漏、但機器一量就知道的事: +# ① lockup 底板與品牌區背景是否接合(paper-on-ink.png 自帶不透明 Ink 底板, +# 背景不對就會出現一個突兀方塊——leo 截圖裡看到的就是它) +# ② 深色模式的規則有沒有真的進到 build(曾發生 dist 是舊的、我卻對著舊圖除錯) +set -uo pipefail +cd "$(dirname "$0")" +CHROME="/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" +[ -x "$CHROME" ] || { echo "❌ 找不到 Chrome,跳過渲染檢查"; exit 0; } +[ -d frontend/dist ] || { echo "❌ 沒有 frontend/dist——先 wails build"; exit 1; } + +W=$(mktemp -d); trap 'rm -rf "$W"; kill %1 2>/dev/null' EXIT +cp -R frontend/dist/* "$W/" +cat > "$W/mock.js" <<'JS' +window.go={main:{App:{GetState:async()=>({version:'v0',statusBig:'看守中',statusSub:'', + syncing:false,engine:'workers-ai',geminiKey:'',extractedOK:0,accounts:[]}), + SyncNow:async()=>{},PickFolder:async()=>'',AddFolder:async()=>{},RemoveFolder:async()=>{}, + SetAI:async()=>{},OpenURL:()=>{},Connect:async()=>{},CheckUpdate:async()=>({})}}}; +JS +python3 - "$W" <<'PY' +import re,sys +p=sys.argv[1]+'/index.html'; s=open(p,encoding='utf-8').read() +s=s.replace('src="/assets/','src="./assets/').replace('href="/assets/','href="./assets/') +s=s.replace('\n diff --git a/cmd/arcrun-app/frontend/src/arcrun-cis.css b/cmd/arcrun-app/frontend/src/arcrun-cis.css new file mode 100644 index 0000000..04bf2bc --- /dev/null +++ b/cmd/arcrun-app/frontend/src/arcrun-cis.css @@ -0,0 +1,33 @@ +/* arcrun-cis.css — Arcrun 全站共用樣式底層(唯一真相源) + * + * 🔴 leo 2026-08-04:「不會這裡又寫了一個新的 CSS?前面剛剛才說過**不要創造新的**?」 + * + * 病根:portal 的樣式**內嵌在 HTML 裡**(單一