feat(t215): 每個知識庫顯示是否要更新,落後就給 install 頁連結

leo 08-08:「在每個知識庫會看到其他需要更新的,在每個知識庫上顯示是否要更新,
如果要,加開啓 install 頁的連結」。小幫手以前只提示自己(daemon 本體)要不要
更新,使用者連著多個雲端知識庫時完全看不出哪一個落後。

- collector/cloud_latest.go:EvalCloudUpdate + FetchLatestCloudRelease(30 分鐘節流),
  判準與 portal 版本卡 loadVersion() 同一套(bundle_version vs install.arcrun.dev/
  api/latest 的 release,semver 逐段整數比較),不是 t103 minCloudRelease 那把相容
  底線,避免同一個知識庫在兩處得到相反答案。
- direct.go/sync_status.go:每輪同步順帶算好每個帳號的 CloudUpdateKnown/
  CloudUpdateStale/CloudLatest,寫進 status.json。
- app.go:GetState 把這些欄位接進 UIAccount,供前端讀。
- main.js/style.css:首頁新增「知識庫版本」卡(每庫一行,落後才出現「前往安裝頁
  更新」按鈕,帶 email 預填);側邊欄庫名旁加警示點;各庫頁也顯示同一行版本狀態。
  查不到版本(連不上/latest 暫時查不到)一律誠實說「查不到」,不當成「已最新」。

已用假 window.go 在瀏覽器實測四種情境(落後/已最新/連不上/查得到 mine 但查不到
latest)+零知識庫的 onboarding 頁+深色模式,畫面與按鈕行為皆符合預期。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-09 00:21:40 +08:00
parent 2bbfa453d3
commit 779a1b801e
8 changed files with 328 additions and 10 deletions
+12 -5
View File
@@ -11,11 +11,18 @@ import (
// AccountSyncStatus 彙總單一帳號的每輪同步結果(t104 多帳號看守)。
// key in SyncStatus.AccountDetails = instanceHostOf(cypher_url)。
type AccountSyncStatus struct {
LastSync string `json:"last_sync,omitempty"`
CloudVersion string `json:"cloud_version,omitempty"` // t103 per-account
CloudCheckOK bool `json:"cloud_check_ok"`
ExtractedOK int `json:"extracted_ok"`
ExtractFailed int `json:"extract_failed"`
LastSync string `json:"last_sync,omitempty"`
CloudVersion string `json:"cloud_version,omitempty"` // t103 per-account
CloudCheckOK bool `json:"cloud_check_ok"`
// t2152026-08-08leo:「在每個知識庫上顯示是否要更新」):這個帳號的雲端知識庫
// 有沒有新版可以裝——與 portal 版本卡同一套判準(EvalCloudUpdatecloud_latest.go),
// **不是**上面 CloudVersion/CloudCheckOK 搭配 t103 cloudVersionStale 那把尺
// (那把量的是「太舊會不相容」的協定底線,這裡量的是「有沒有更新版可以裝」)。
CloudUpdateKnown bool `json:"cloud_update_known"`
CloudUpdateStale bool `json:"cloud_update_stale"`
CloudLatest string `json:"cloud_latest,omitempty"` // 已知的最新版(供畫面顯示「最新版 x.y.z」)
ExtractedOK int `json:"extracted_ok"`
ExtractFailed int `json:"extract_failed"`
// t182leo 08-04:「沒裝好就顯示 workers AI 還沒通,一旦通了就顯示可用」):
// 這個帳號的雲端實例有沒有 /portal/daemon/extract。**逐帳號**各自記——
// 用戶可能有多個實例、更新進度不同步。只在走 workers-ai 這條路時探測。