diff --git a/console-ui/public/portal/index.html b/console-ui/public/portal/index.html
index bd7ba8f..11696ba 100644
--- a/console-ui/public/portal/index.html
+++ b/console-ui/public/portal/index.html
@@ -796,10 +796,16 @@ function taipeiMonthDay(ms) { var d = new Date(ms + TAIPEI_OFFSET_MS); return {
// 判不出 OS 時**兩個都給**,不替用戶猜;且無論判成哪個,頁面都留「不是這個系統?」的另一版連結
// ——UA 會判錯,判錯時用戶要有路可走(施工圖 §3 注意事項 1、3)。
var DAEMON_BASE_DEFAULT = 'https://raw.githubusercontent.com/youlinhsieh/arcrun-rag-bundles/main/daemon/';
- var DAEMON_MAC = 'ArcrunRAG-mac-unsigned.zip';
+ // 🔴 2026-08-05 leo:「Mac 強調要包裝成 application + dmg 的格式,拖進去就會放到
+ // application,**解決之前直接在下載資料夾啟動造成更新問題**」
+ // ⇒ Mac 一律給 **DMG**(開啟後是「把 Arcrun 拖進 Applications」的標準畫面),
+ // 不再給 zip——zip 解開就是 .app,使用者很可能直接在「下載」資料夾雙擊啟動,
+ // 而自更新會蓋錯位置(t184 Oscar 的病)。
+ // ⚠️ 用**固定檔名**(不帶版號),否則每出一版都要改這裡的 code。
+ var DAEMON_MAC = 'ArcrunRAG-mac.dmg';
var DAEMON_WIN = 'ArcrunRAG-win-unsigned.zip';
- // Mac 那顆 21MB > jsDelivr 單檔 20MB 上限(實測回 "File size exceeded...")→ 一律走 raw;
- // Windows 13MB 雖在限內,同走 raw 保持單一來源、少一個會壞的地方。
+ // Mac 那顆 > jsDelivr 單檔 20MB 上限(實測回 "File size exceeded...")→ 一律走 raw;
+ // Windows 同走 raw 保持單一來源、少一個會壞的地方。
function daemonBase() {
var cfg = (window.ARCRUN_CONFIG || {});
if (cfg.daemonBase) return String(cfg.daemonBase).replace(/\/?$/, '/');
@@ -829,7 +835,8 @@ function taipeiMonthDay(ms) { var d = new Date(ms + TAIPEI_OFFSET_MS); return {
// 封測期第一次開啟的擋關提示(未簽章)——Mac/Windows 攔法不同,話術也不同。
function daemonHint(os) {
if (os === 'win') return '(封測版未簽章,Windows 第一次會跳藍色視窗擋下來——點「更多資訊」→「仍要執行」就好)';
- return '(封測版未簽章,第一次請右鍵→打開)';
+ // DMG 版的步驟與 zip 不同:先拖進「應用程式」再從那裡開,才不會在下載資料夾啟動。
+ return '(開啟後把 Arcrun 拖進「應用程式」,再從啟動台開啟;封測版未簽章,第一次請右鍵→打開)';
}
// 07-27:設定頁的常駐入口(下載小幫手/換 AI 金鑰)——與一次性卡片同一組 API
(function () {