我的帳號
@@ -1736,11 +1752,80 @@ function taipeiMonthDay(ms) { var d = new Date(ms + TAIPEI_OFFSET_MS); return {
if (ev.target && ev.target.id === 'ad-otp-close') $('ad-otp').innerHTML = '';
});
+ // ── 版本檢查(2026-08-02)──────────────────────────────────────────────
+ // leo 的兩個要求:
+ // ②「不顯示的話用戶不知道要不要更新」→ 一定要有目前版本
+ // ③「白癡化,發現落後就按一下開啟 install 直接帶它的 email 和辨識碼」
+ // → 落後才出現按鈕,且自動帶 email;辨識碼不必帶(安裝器 t154 對既有實例免碼)
+ //
+ // 比法:自己的版本(cypher /health 的 bundle_version)vs 最新版(安裝器 /api/latest)。
+ // 兩邊都是 semver(例 1.4.2),用數字逐段比,不用字串比('1.4.10' < '1.4.9' 會出錯)。
+ var INSTALLER_ORIGIN = 'https://install.arcrun.dev';
+
+ function cmpSemver(a, b) {
+ var x = String(a || '').split('.').map(Number);
+ var y = String(b || '').split('.').map(Number);
+ for (var i = 0; i < 3; i++) {
+ var d = (x[i] || 0) - (y[i] || 0);
+ if (d) return d < 0 ? -1 : 1;
+ }
+ return 0;
+ }
+
+ function loadVersion() {
+ var line = $('st-ver-line');
+ var dot = $('st-ver-dot');
+ var btn = $('st-ver-update');
+ if (!line) return;
+
+ var mineP = fetch(window.ARCRUN_API_BASE + '/health', { cache: 'no-store' })
+ .then(function (r) { return r.ok ? r.json() : null; })
+ .then(function (j) { return (j && j.bundle_version) || ''; })
+ .catch(function () { return ''; });
+ var latestP = fetch(INSTALLER_ORIGIN + '/api/latest')
+ .then(function (r) { return r.ok ? r.json() : null; })
+ .then(function (j) { return (j && j.release) || ''; })
+ .catch(function () { return ''; });
+
+ Promise.all([mineP, latestP]).then(function (res) {
+ var mine = res[0], latest = res[1];
+
+ if (!mine) { line.textContent = '無法讀取目前版本(知識庫服務可能正在啟動)'; return; }
+ // 舊實例的 bundle_version 是舊格式(2026-07-31+8e83589),比不了 semver。
+ // 這種情況一律當成「落後」——因為新版才會寫 semver 進來。
+ var mineIsSemver = /^\d+\.\d+\.\d+$/.test(mine);
+
+ if (!latest) {
+ line.textContent = '目前版本 ' + mine + '(暫時查不到最新版,稍後再試)';
+ return;
+ }
+ var behind = !mineIsSemver || cmpSemver(mine, latest) < 0;
+ if (!behind) {
+ line.innerHTML = '目前版本
' + esc(mine) + ' 已是最新版';
+ dot.style.display = 'none';
+ btn.style.display = 'none';
+ return;
+ }
+ line.innerHTML = '目前版本
' + esc(mineIsSemver ? mine : '較舊版本') + ''
+ + ' → 最新版
' + esc(latest) + ''
+ + '
有新版可以更新。按「立即更新」會開啟安裝頁,用你原本的 Cloudflare 帳號重新安裝一次即可,知識庫內容不會動到。';
+ dot.style.display = 'inline-block';
+ btn.style.display = '';
+ btn.onclick = function () {
+ // 帶 email 讓安裝頁預填;既有實例更新免辨識碼(安裝器 t154)
+ var email = (S.profile && S.profile.email) || '';
+ var url = INSTALLER_ORIGIN + '/' + (email ? '?email=' + encodeURIComponent(email) : '');
+ window.open(url, '_blank', 'noopener');
+ };
+ });
+ }
+
// ── 設定 ──
function loadSettings() {
var p = S.profile;
if (!p) { $('st-me').innerHTML = '
載入中…
'; return; }
if (window._loadAiConfig) window._loadAiConfig();
+ loadVersion();
var libs = p.libraries || [];
var libHtml = libs.indexOf('*') >= 0
? '
全部知識庫'