From 41d63b9712760b493fbe380fc1fbf0477f3439f7 Mon Sep 17 00:00:00 2001 From: uncle6me-web Date: Tue, 4 Aug 2026 08:38:02 +0800 Subject: [PATCH] =?UTF-8?q?t176=20=E5=A5=97=E5=88=B0=20CIS=20=E7=89=88=20p?= =?UTF-8?q?ortal=EF=BC=9A=E5=88=AA=20AI=20=E8=A8=AD=E5=AE=9A=E5=8D=80?= =?UTF-8?q?=E5=A1=8A=EF=BC=88=E4=BF=AE=E6=88=91=E6=8A=8A=E8=A6=96=E8=A6=BA?= =?UTF-8?q?=E6=89=93=E5=9B=9E=E8=88=8A=E7=89=88=E7=9A=84=E9=8C=AF=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 【我犯的錯】08-03 出貨時用 `main` 建 UI bundle,但 CIS 新視覺在本分支 (fix/cis-round3-portal),main 上沒有 ⇒ **把 portal 打回 CIS 之前的樣子**。 leo 截圖坐實:新 AI 文案在(t176 生效)但 CIS 全不見(底色/字體/logo 都退回舊版)。 【為什麼會用錯】wiki 記「portal 真身=matrix/arcrun main」——那是 08-01 記的, 而 CIS 是 08-02 才進本分支 ⇒ **記錄過時**。且我沒照規矩「抓線上內容反查真身」驗證。 【本 commit】把 t176 的改動(移除 AI 設定區塊+其前端邏輯)套到 CIS 版上, 使兩者同時成立: CIS 特徵:--paper-a #FDFCFB ×8、IBM Plex Sans ×10、apple-touch-icon ×1 t176:「這裡不需要任何設定」×1、st-ai-use-claude ×0 前端 JS 語法檢查通過(4 個 script 區塊 1344 行,node --check 綠)。 重建 UI bundle 後檔數 6 → **9**(多了 favicon.ico/favicon.svg/apple-touch-icon.png) =先前那份 bundle 確實漏了 CIS 資產的機械證據。 Co-Authored-By: Claude Opus 5 (1M context) --- console-ui/public/portal/index.html | 106 ++++------------------------ 1 file changed, 15 insertions(+), 91 deletions(-) diff --git a/console-ui/public/portal/index.html b/console-ui/public/portal/index.html index 2615abd..8667b02 100644 --- a/console-ui/public/portal/index.html +++ b/console-ui/public/portal/index.html @@ -385,32 +385,18 @@
封測版未簽章,第一次請右鍵→打開。裝好第一次開啟時,貼上這個網址+你的帳號密碼就連上了。
- -
+ +
AI 設定
-
- -
-
Gemini API Key
-
聊天問答與文件萃取都用這一把。免費申請,金鑰只存在你自己的知識庫裡。
- -
- -
-
讓知識卡整理得更好(選填)
- -
- 讀你文件、整理成知識卡的那個 AI,換成更強的模型。卡片會更抓得到重點、關聯也連得更準,之後搜尋和問答的品質跟著提升。需要你的電腦已安裝 Claude Code。不填就用上面那把 Gemini,一樣能用。 -
- -
-
- -
-
+
+ 這裡不需要任何設定。聊天問答用的是你自己 Cloudflare 帳號內建的 AI,裝好就能直接問。
+ 文件整理成知識卡的部分,請在同步小幫手(電腦上的托盤圖示)的「AI 設定…」填一把 Gemini API Key。
@@ -824,72 +810,10 @@ function taipeiMonthDay(ms) { var d = new Date(ms + TAIPEI_OFFSET_MS); return { } })(); - // t131 AI 設定(合併 Gemini API Key+Claude 加強版) - (function () { - // 進入設定頁時讀取現有設定(GET /portal/admin/ai) - function loadAiConfig() { - if (!(S.profile && S.profile.role === 'admin')) return; - fetch(API_BASE + '/portal/admin/ai', { headers: authHeaders() }) - .then(function (r) { return r.ok ? safeJson(r) : null; }) - .then(function (d) { - if (!d) return; - var ki = $('st-ai-key'); - if (ki && d.has_key) ki.placeholder = '已設定(留空=不變更)'; - var cb = $('st-ai-use-claude'); - if (cb) { - // 有 claude 才能勾;沒有則停用並顯示提示 - var hint = $('st-ai-claude-hint'); - if (d.claude_available) { - cb.disabled = false; - cb.checked = !!d.use_claude_for_extract; - if (hint) hint.style.display = 'none'; - } else { - cb.disabled = true; - cb.checked = false; - if (hint) { - hint.style.display = ''; - // 區分:從未連上小幫手 vs 有連上但沒裝 Claude - hint.textContent = d.has_key - ? '你的電腦沒有偵測到 Claude Code;裝好並讓小幫手重連一次後,這個選項就會開啟。' - : '連上小幫手後才知道你的電腦有沒有 Claude Code。'; - } - } - } - }) - .catch(function () { /* 讀不到不擋頁面 */ }); - } - window._loadAiConfig = loadAiConfig; - - // 儲存 - var sb = $('st-ai-save'); - if (sb) sb.addEventListener('click', function () { - var m = $('st-ai-status'); - var k = (($('st-ai-key') && $('st-ai-key').value) || '').trim(); - var cb = $('st-ai-use-claude'); - var useClaud = cb && !cb.disabled ? cb.checked : undefined; - var body = {}; - if (k) body.gemini_api_key = k; - if (useClaud !== undefined) body.use_claude_for_extract = useClaud; - sb.disabled = true; m.textContent = '儲存中…'; m.style.color = ''; - fetch(API_BASE + '/portal/admin/ai', { - method: 'POST', - headers: Object.assign({ 'Content-Type': 'application/json' }, authHeaders()), - body: JSON.stringify(body) - }).then(function (r) { return safeJson(r).then(function (d) { return { ok: r.ok, status: r.status, d: d }; }); }) - .then(function (x) { - sb.disabled = false; - if (guard401(x.status)) return; - if (!x.ok) { m.textContent = (x.d && x.d.error) || '儲存失敗'; m.style.color = '#b03a26'; return; } - if ($('st-ai-key')) { $('st-ai-key').value = ''; $('st-ai-key').placeholder = '已設定(留空=不變更)'; } - var claudeOn = x.d && x.d.use_claude_for_extract; - m.textContent = claudeOn - ? '已儲存,萃取改用 Claude Code。小幫手請重連一次生效。' - : '已儲存,AI 問答與萃取皆可使用。'; - m.style.color = '#3f7a4f'; - }) - .catch(function (e) { sb.disabled = false; m.textContent = friendlyErr(e); m.style.color = '#b03a26'; }); - }); - })(); + // t176(leo 08-03):AI 設定的前端邏輯整段移除。 + // 雲端聊天走 Workers AI(免金鑰);地端萃取金鑰改由同步小幫手托盤「AI 設定…」自己設。 + // 原本這裡有 Claude 勾選框的 enable/disable 邏輯——它依賴 daemon 回報 has_claude, + // 而 daemon 從未實作該回報 ⇒ 勾選框恆為 disabled(leo 實測「hover 變可點但點擊沒反應」)。 $('st-logout').addEventListener('click', function () { fetch(API_BASE + '/portal/logout', { method: 'POST', headers: authHeaders() }).catch(function () { /* 盡力而為 */ });