From 90b6de66bcce7ea367ccbdc08587883fa576a3f6 Mon Sep 17 00:00:00 2001 From: richblack Date: Mon, 27 Jul 2026 19:46:19 +0800 Subject: [PATCH] =?UTF-8?q?feat(t72):=20daemon=20=E5=8A=A0=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E7=B7=A8=E8=99=9F=EF=BC=88leo=2007-27=EF=BC=9A?= =?UTF-8?q?=E6=B2=92=E7=89=88=E6=9C=AC=E8=99=9F=EF=BC=9D=E5=8F=AA=E8=83=BD?= =?UTF-8?q?=E9=9D=A0=20shasum=20=E5=B0=8D=E5=B8=B3=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 病根:在此之前無法從畫面看出裝的是哪一版。07-27 花大半天對帳 「leo 手上/鏡像上/剛編的」是否同一顆,只能 shasum 比對 binary; 使用者更做不到這件事,回報問題時我們也不知道他跑的是哪版(t63 三層落差)。 做法: - main.go 加 version/buildTime 變數,build 時 -ldflags -X 注入,未注入顯示 dev - 托盤選單「結束」正上方加停用態版本列(回報問題時眼睛已在那一區) - build-mac.sh / build-windows.sh 同一套:VERSION 環境變數 > git describe > dev 實測(兩平台各實跑一次 VERSION=v0.9.0): Mac 托盤 21.1MB/zip 12.43MB/v0.9.0 命中 3/版本列 1/結束 1/連上知識庫 1 Win zip 13.27MB/PE32+ GUI/v0.9.0 命中 3/版本列 1/結束 1/連上知識庫 1 兩包皆 < jsDelivr 20MB 上限 未驗:選單版本列的實際顯示(Mac 需 leo 點選單、Windows 需真機)。 --- cmd/arcrun-tray/ArcrunRAG-mac-unsigned.zip | 3 +++ cmd/arcrun-tray/build-mac.sh | 13 ++++++++--- cmd/arcrun-tray/main.go | 26 ++++++++++++++++++++++ 3 files changed, 39 insertions(+), 3 deletions(-) create mode 100644 cmd/arcrun-tray/ArcrunRAG-mac-unsigned.zip diff --git a/cmd/arcrun-tray/ArcrunRAG-mac-unsigned.zip b/cmd/arcrun-tray/ArcrunRAG-mac-unsigned.zip new file mode 100644 index 0000000..d849f56 --- /dev/null +++ b/cmd/arcrun-tray/ArcrunRAG-mac-unsigned.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8dccdcd980944464c7e1d61ff74db5e0e2944a872caccdc9207cdea0c07c5fff +size 13038400 diff --git a/cmd/arcrun-tray/build-mac.sh b/cmd/arcrun-tray/build-mac.sh index a059cd2..797c8f7 100755 --- a/cmd/arcrun-tray/build-mac.sh +++ b/cmd/arcrun-tray/build-mac.sh @@ -10,6 +10,14 @@ set -euo pipefail cd "$(dirname "$0")" +# 版本編號(leo 2026-07-27:「daemon 要加上版本編號」)——沒版本號就只能靠 shasum 對帳, +# 使用者回報問題時我們也不知道他跑的是哪一版(見 t63「修好的東西傳不到用戶」)。 +# 用法:VERSION=v0.9.0 bash build-mac.sh(未給則用 git 描述,再不行才 dev) +VERSION="${VERSION:-$(git describe --tags --always --dirty 2>/dev/null || echo dev)}" +BUILD_TIME="$(date '+%Y%m%d-%H%M')" +LDFLAGS_VER="-X main.version=${VERSION} -X main.buildTime=${BUILD_TIME}" +echo "🏷 版本:${VERSION}(build ${BUILD_TIME})" + echo "① 編 collector(同綑執行檔)" ( cd ../.. && go build -ldflags "-s -w" -o "cmd/arcrun-tray/arcrun-collector" . ) @@ -22,9 +30,8 @@ go run fyne.io/fyne/v2/cmd/fyne@latest package -os darwin -icon icon.png -name " # =**掉進 jsDelivr 單檔 20MB 上限內**(此前 Mac 版超標,jsDelivr 直接回 # "File size exceeded the configured limit of 20 MB.",只能走 raw;Windows 版 13MB 無此問題)。 # ⇒ 這一步讓 Mac 版也能走 CDN,且**免除拆檔工程**。功能指紋與簽章實測皆不受影響。 -echo "②b strip 重編托盤(-s -w;為了掉進 jsDelivr 20MB 線內)" -go build -ldflags "-s -w" -o "$(ls -d *.app 2>/dev/null | head -1)/Contents/MacOS/arcrun-tray" . 2>/dev/null \ - || go build -ldflags "-s -w" -o "Arcrun RAG.app/Contents/MacOS/arcrun-tray" . +echo "②b strip 重編托盤(-s -w;為了掉進 jsDelivr 20MB 線內)+注入版本號" +go build -ldflags "-s -w ${LDFLAGS_VER}" -o "Arcrun RAG.app/Contents/MacOS/arcrun-tray" . APP="Arcrun RAG.app" PLIST="$APP/Contents/Info.plist" diff --git a/cmd/arcrun-tray/main.go b/cmd/arcrun-tray/main.go index 96cc9a6..76181bc 100644 --- a/cmd/arcrun-tray/main.go +++ b/cmd/arcrun-tray/main.go @@ -38,6 +38,27 @@ import ( "fyne.io/fyne/v2/widget" ) +// 版本資訊(leo 2026-07-27:「daemon 要加上版本編號」)。 +// +// 為什麼需要:在此之前**沒有任何辦法從畫面看出裝的是哪一版**——07-27 花了大半天在對帳 +// 「leo 手上/鏡像上/剛編的」是不是同一顆,只能靠 shasum 比對 binary。使用者更不可能做這件事, +// 回報問題時我們也無法確認他跑的是哪版(修好的東西他可能根本沒拿到,見 t63 三層落差)。 +// +// 怎麼帶值:build 時用 -ldflags "-X main.version=… -X main.buildTime=…" 注入(見 build-mac.sh/ +// build-windows.sh)。沒注入時顯示 dev,代表「本機隨手編的、非發佈品」——這本身就是有用的資訊。 +var ( + version = "dev" + buildTime = "" +) + +// versionLabel 給托盤選單顯示用:正式版顯示「v1.2.3」,開發版額外標出建置時間好辨識。 +func versionLabel() string { + if version == "dev" && buildTime != "" { + return "dev (" + buildTime + ")" + } + return version +} + // directConfig 是 collector direct 的設定(與 collector/direct.go 的 DirectConfig 同結構; // 這裡只需讀寫 watch_folder,其餘由安裝器帶入)。 type directConfig struct { @@ -540,6 +561,8 @@ func main() { // 有 cypher_url 時再加一行縮短的 host(fyne MenuItem 無 tooltip,取捨見 shortCypherHost 注解)。 connItem := fyne.NewMenuItem(connectionStatusLabel(cfg.InstanceName, cfg.Email), nil) connItem.Disabled = true + versionItem := fyne.NewMenuItem("版本 "+versionLabel(), nil) + versionItem.Disabled = true items := []*fyne.MenuItem{connItem} if host := shortCypherHost(cfg.CypherURL); host != "" { hostItem := fyne.NewMenuItem("→ "+host, nil) @@ -573,6 +596,9 @@ func main() { fyne.NewMenuItem("🔗 連上知識庫…(換帳號/重新連線)", func() { showConnectWizard() }), // t54 fyne.NewMenuItemSeparator(), pauseItem, + // 版本列(leo 2026-07-27:「daemon 要加上版本編號」):停用態=純顯示不可點。 + // 放在「結束」正上方——使用者要回報問題時,眼睛已經在選單底部這一區。 + versionItem, // t55(leo 2026-07-26 實撞:「沒有 exit 的選項,我無法關閉它」): // 沒有出口的 app 是設計缺陷——用戶只剩「強制結束」可用,而托盤 app 連 Dock 都沒有 // (LSUIElement),右鍵結束那條路也不存在。這裡給一條明確的出路: