uncle6me-web
|
a7d54751fb
|
merge main:把 t176(拔雲端 LLM 下發)與 workers_ai_chat 種子併進 CIS 分支
出貨前發現兩條分支各有一半:
main → t176 拔掉雲端下發 extractor/刪 admin/extractor/workers_ai_chat 種子
fix/cis-round3-portal → t181 新萃取端點 /portal/daemon/extract、CIS 視覺
**要合起來才是完整的出貨內容**(實測:合併前 bundle 仍含 admin/extractor ×2)。
原始碼三檔全自動合併;只有 portal-admin.test.ts 衝突——
HEAD 側是**過時的 t131/t122 測試**(測 main 已刪的端點,留著必紅),
main 側是刪除。解法:接受刪除、保留我這側的 t181 守衛。
測試 31 passed,唯一 failed 是基準線既有的 GET /portal 靜態資源案。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
2026-08-04 15:33:43 +08:00 |
|
uncle6me-web
|
41d63b9712
|
t176 套到 CIS 版 portal:刪 AI 設定區塊(修我把視覺打回舊版的錯)
【我犯的錯】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) <noreply@anthropic.com>
|
2026-08-04 08:38:02 +08:00 |
|
uncle6me-web
|
66f1b59f7f
|
t176:雲端不再管地端 LLM 設定(leo 08-03 緊急)
leo 回報四件事:①雲端 Gemini 無法用 ②搞不清楚設定 AI 是設雲端還是地端
③地端不會萃、每個人都死掉因為都去抓 Claude ④雲端還要設置明明就有 Workers AI。
目標:「雲端裝好就能用,地端輸一個 Gemini API Key,然後就開始用。」
根因:extractor_config 的 KV key 由 portalTenant() 組出,而 portalTenant 是
**worker 層級**環境變數(portal.ts:43)⇒ **全租戶共用一把**。任一處設了 claude,
所有人的 daemon 都收到 claude;沒裝 Claude Code 的機器萃取全滅,而 portal 的
Claude 勾選框又恆 disabled(daemon 從未實作 report-capabilities ⇒ daemon_caps 永遠空)
⇒ 用戶自己解不開(awindhon 08-03 實證:雲端同步成功、金鑰有效、零張卡)。
本次(雲端側):
- POST /portal/daemon/config **不再下發** extractor/gemini_api_key/llm_model,
只回連線欄位。⚠️ route 本身與 daemon/libraries 資料夾管理完全不動(leo 明確劃界:
「雲端拉地端檔案夾部分不要刪,刪掉從雲端設置地端 LLM 選項部分」)。
- 移除 POST|GET /portal/admin/extractor(t122)——這是「雲端指定地端引擎」的入口,
且無任何伺服器端驗證,打一下就能把全租戶設成 claude。
- 移除 POST /portal/daemon/report-capabilities(t131)——daemon 端從未實作該呼叫。
- 移除 t131 那組重複註冊的 /portal/admin/ai。**它是重複 route**:後段(arcrun-rag#10)
另有同路徑一組,Hono 先到先比 ⇒ 舊的一直贏,後段修好的「金鑰真的寫進 credentials」
形同死碼。保留後段那組(只管 Gemini 金鑰、走 storeCredential),並拿掉 Claude 偏好欄。
- portal 設定頁「AI 設定」整塊移除,改成一句話說明:雲端不需設定(Workers AI 免金鑰),
地端請在同步小幫手的「AI 設定…」填 Gemini Key。順手清掉 main 上既有的 conflict 標記。
- 清掉隨之孤兒化的 helper(ExtractorConfig/AiConfig/DaemonCapabilities/
syncExtractorFromAiConfig/readAiPref 等)。
測試:**相對 merge 前 main 基準線,新增失敗 = 0**(基準線本就 9 紅:console 藏書地圖 6/
portal HTML 殼 2/POST execute 1,皆與本次無關)。t122/t131 兩組測試改寫成
**回歸守衛**(斷言那些端點/欄位確實 404、確實不存在),不是刪掉充綠。
順手修 health bundle_version 測試與實作對齊(實作刻意省略該欄,測試卻期待空字串)。
未送達:本 commit 只到 code,尚未部署上線。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
2026-08-03 22:11:45 +08:00 |
|
Leo
|
5b983c47b8
|
Merge branch 'main' into fix/merge-main-into-batch-t173
# Conflicts:
# console-ui/public/portal/index.html
# cypher-executor/src/routes/health.ts
# cypher-executor/src/routes/portal.ts
# registry/components/kbdb_upsert_block/component.contract.yaml
# registry/examples/km-wiki-ingest/workflow.yaml
|
2026-08-02 23:43:16 +08:00 |
|
uncle6me-web
|
e570714472
|
portal 設定頁加版本卡:顯示目前版本+落後紅點+一鍵更新(帶 email,t154 免辨識碼)
leo 08-02:「不顯示的話用戶不知道要不要更新」「發現落後就按一下開啟 install
直接帶它的 email 和辨識碼」。
比法=自己的 bundle_version(cypher /health)vs 最新版(安裝器 /api/latest),
semver 逐段數字比(避免 1.4.10 < 1.4.9 的字串比錯誤);
舊格式版本(日期+sha)一律判為落後,舊實例才會被正確提示更新。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
2026-08-02 19:23:12 +08:00 |
|
uncle6me-web
|
1e89be1ea0
|
portal 字形對齊 landing(9 處 Songti 明體→無襯線)+側邊欄 logo 縮小並讓出左右空白
leo 08-01:「RAG, Install 都沒有襯線,但這裡的字形帶襯線,要複製那裡的 Style」
「logo 再小一點,因為在側邊欄顯得很大,讓出左右的空白」
|
2026-08-01 18:54:35 +08:00 |
|
uncle6me-web
|
bb023a12fb
|
portal 底色對齊 landing:--paper-a #F2F1ED→#FDFCFB(Paper)、--paper-b/-bar-bg #ECEAE4→#F2F1ED(Canvas)
leo 08-01:「換了 logo 和部分配色,但整個 style 不同,如果可以修就簡單修」
差異根因:portal 用 Canvas 當主表面色、還自訂了不在 CIS 裡的 #ECEAE4,
整個背景比 landing 暗一階 ⇒ 看起來偏暖褐。改兩個變數即對齊。
其餘 9 種非 CIS 色為狀態色(成功綠/錯誤紅)與深色模式暗底,landing 同款,不動。
|
2026-08-01 18:18:06 +08:00 |
|
uncle6me-web
|
a78cbbce64
|
portal CIS 收尾:側邊欄壞 SVG(字腔缺失)換 2x 官方圖+.logo svg→img CSS 修正+全站 logo 加 responsive clamp
|
2026-08-01 16:31:07 +08:00 |
|
uncle6me-web
|
47d90c9feb
|
fix: portal 登入頁 lockup 換裁淨版 PNG,字太小問題修正
同 rag/install 問題:官方 PNG 畫布 1840x560 只有 32% 高度是實際字形,
height:44px 時實際字高僅約 14px。改用裁淨版(493x88,長寬比 5.604:1,
四邊已裁到字腔邊緣),height 保持 44px 不變,但現在等於實際字高。
兩處 <div class="brand"> 各兩張圖(wm-ink + wm-paper)全部換裝。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
2026-08-01 16:02:30 +08:00 |
|
uncle6me-web
|
a542eb5b5b
|
CIS 緊急修正:wordmark 字腔缺失,改用官方 PNG(portal)
同 landing/install 根因(自產 SVG outline compound path,a/u/n 字腔洞
未畫進去)與修法:兩處 .brand 內嵌 svg(登入頁×2)改用官方
arcrun-cis/arcrun-lockup-h-ink.png + arcrun-lockup-h-paper-on-ink.png
as base64 data URI。本頁主題靠 data-theme 屬性切換(非 media query),
:root[data-theme="dark"] 時顯示 -paper-on-ink,預設(無屬性=light)
顯示 -ink。favicon(另外的 favicon.svg/.ico)未動。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
2026-08-01 15:39:10 +08:00 |
|
uncle6me-web
|
f078eba34a
|
CIS 復盤修正 t3b:favicon chevron 筆畫加粗,修 weight mismatch
同 t1b/t2b(landing/install)根因與修法:CHEV_STROKE 46→109,重產三件套
(favicon.svg/favicon.ico 16·32·48/apple-touch-icon 180×180),三站現在
是同一份位元組。本地驗證(512px 畫布中線段寬):a 字身 78px/
chevron 85px/chevron 85px,與官方 mark-square-ink.svg 基準(85px)吻合。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
2026-08-01 15:08:41 +08:00 |
|
uncle6me-web
|
8dfed921dd
|
CIS 第三輪 t3:portal 換裝 CIS 色票 + 真向量 wordmark + favicon 三件套
leo 08-01 親驗「Portal 裡的色彩都沒改還是跟原來一樣」——實測前 CIS 色票 0
命中、favicon 0(連宣告都沒有)、<svg>=2(皆非 CIS,是既有 graph 視覺化)。
改動(console-ui/public/portal/index.html,僅視覺層,未動
cypher-executor/ 或任何後端邏輯):
- :root 色板整套換裝:--paper-a/b(舊宣紙米白)→ Canvas #F2F1ED/
--ink(舊墨字)→ Ink #17181A/--amber(舊琥珀金)→ Relation #B04A2F
(dark 模式對應 Relation-dark #D9784F)。
- 6 處直接寫死的舊 hex(#241804/#e8b45a/#e57373/#c0392b/#b4462f/#b98330)
一併清零,統一走 CSS 變數或既有 err token。
- 登入頁/首次設定頁的 .brand、側邊欄 .logo:原本是 Songti 襯線純文字
「Arcrun」+ var(--amber) 上色(違反「mark 永遠單色」+不該用 Relation
當 logo 色)→ 換成真向量 WORDMARK_SVG(同 t1/t2 那份 IBM Plex Sans
SemiBold outline + chevron compound path),單色 var(--ink)。
- 新增 favicon.svg(a 加雙 chevron,Ink 底 Paper 挖空)/favicon.ico
(16/32/48)/apple-touch-icon.png(180×180)到 console-ui/public/
根目錄,<head> 補三個 <link> 宣告(原本連宣告都沒有)。
本地 Chrome headless 截圖驗證:淺色/深色模式登入頁、側邊欄 logo 三張截圖,
wordmark 與按鈕色階層正確(登入按鈕 Relation 底 + Paper 字)。
已知未盡(誠實列出,留給下一輪):
- var(--amber) 在原設計裡被當「次要強調色」大量使用(連結色/標題色/
hover 態,39 處),超出 CIS「≤5% 螢幕」的精神——這次只換色票本身
沒收斂用法,需要更大範圍的互動色階層重新設計,故未動。
- console/index.html、console/dashboard/index.html 同族問題(舊宣紙+
琥珀配色、無 favicon)未套用,任務允許但為避免半套改動造成視覺不
一致,留待下一輪明確處理。
分支從 main 開(fix/cis-round3-portal),未動目前 checkout 的
fix/kbdb-search-deprecated-t24(那份是 7/24 舊版)。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
2026-08-01 14:57:28 +08:00 |
|
uncle6me-web
|
36cdc8fba6
|
#10 補測試守衛+console 兩頁同族 fallback 一併拔
① tests/portal-admin-ai.test.ts(6 項綠)=**route 消失就會紅**的迴歸防線。
這條 route 以前不存在、前端卻一直在打它 ⇒ key 從來沒存進去(藍字=假綠),
所以最該守的就是「它還在不在」。覆蓋:未登入 401(**不是 404**=route 真的在)/
非 admin 403/GET 回 has_key 布林且回應不含任何金鑰欄位(D36)/
空 body 400 不假裝成功/只改偏好不誤報 has_key/同測試內寫→讀一致。
註:vitest-pool-workers 預設 isolatedStorage=true ⇒ 跨 it 的 KV 會還原,
驗來回一致必須在同一個 it 內完成(我第一版寫成跨 it,測試如實抓出來了)。
② console/index.html 與 console/dashboard/index.html 也有同一個寫死
`|| "https://cypher.arcrun.dev"` fallback(與 portal 同族)⇒ 一併拔掉。
靜態 config.js 保留無妨:build-ui-bundle.mjs 的 SKIP 會跳過它、改由 worker 動態產生。
驗證:cypher tsc 綠、全套 248 passed(9 既有失敗未變);
UI 產物 grep 寫死 fallback 歸 0;stage verify.sh 仍 11/3(無迴歸)。
|
2026-07-31 20:57:05 +08:00 |
|
uncle6me-web
|
0d49989c19
|
修 arcrun-rag#10:補 /portal/admin/ai(key 從來沒存進去的真因)+UI 已輸入態
真因(不是重裝洗掉,是從來沒存進去):前端唯一寫入路徑 POST /portal/admin/ai
**後端從來沒有這條 route** ⇒ 用戶填 key → 404 → 什麼都沒存,畫面卻像成功了(藍字=假綠)。
產物層鐵證:bundle tier2/ui grep 'portal/admin/ai'=1、tier2/cypher=0;兩實例實打皆 404。
反證(別改不壞的東西):走正確端點寫入 → 完整重裝 24/24 → credential 仍在、
rag_chat verdict failed→success ⇒ **重裝不洗 credential,資料層本來就是保留式的**。
① cypher 補 GET|POST /portal/admin/ai(routes/portal.ts)
- POST 內部轉呼 credentials.ts 既有 storeCredential()=**唯一寫入路徑**,不另造第二套
- GET 只回 has_key 布林,**永不回傳 key 本身**(D36)
- credential 的 api_key 欄=租戶 slug(portalTenant),與安裝器 seedCredential 寫
kbdb_internal_token 用的 ns 同值 ⇒ 同租戶分區,彼此查得到
- use_claude_for_extract 存 KV(單一布林偏好,不為它開 KBDB template)
- claude_available 目前無訊號來源(該由小幫手回報)⇒ **誠實回 false 不假綠**
- 寫入失敗回 502 帶原因——本 bug 的教訓就是「不能讓前端以為存好了」
- 兩者皆未提供 → 400,避免「看起來成功但什麼都沒做」
② 前端(console-ui/public/portal/index.html)
- 拔掉寫死 `|| "https://cypher.arcrun.dev"` fallback ⇒ 缺 config.js 就顯示紅色橫幅明顯報錯。
**寧可明顯失敗,不要靜默把用戶金鑰送去中央實例。**
⚠️ 更正我先前的錯誤診斷:config.js **有**正確注入(實查 leo 實例指向自己的 cypher),
跨租戶錯置未發生;這條是未爆彈不是現行災情。
- leo 規格:已存 → 唯讀「已輸入」+「修改」鈕(不顯示 key);按修改才變回輸入框;
未存 → 一般輸入框。舊版只改 placeholder=讀起來像臨時提示,是它像 UI bug 的原因。
- 只有真的送了新 key 才切回「已輸入」(單純改 Claude 勾選不誤報)
tsc 綠;三個 script 區塊 node --check 全過。
卷:system-dev/docs/3-specs/journeys/gemini-key-lost-on-reinstall.md
|
2026-07-31 19:56:47 +08:00 |
|
uncle6me-web
|
9f777ff43e
|
t161+t162 修 leo prod 實撞兩病:庫清單靜默空白/「需要更新」假警報迴圈
t162(假警報,實錘):daemon cloudVersionStale() 讀 cypher /health 的 bundle_version
比對 minCloudBuilt(2026-07-28),但 **/health 從來只回 {ok:true}、沒有這個欄位**
⇒ 恆讀到空字串 ⇒ 恆判 stale ⇒ 「知識庫需要更新」永遠不消失,重裝也沒用
(leo:「按下就跳到 install,但重新更新後並不會消失,這個訊息是幹嘛的?」)。
安裝器其實一直有注入 ARCRUN_BUNDLE_VERSION(worker.js:819),只是沒人吐出來。
修:/health 讀該 var 誠實回報(未注入則省略欄位=老實例,daemon 判 stale 是對的)。
新 bundle 注入值 2026-07-31+<commit7> ≥ 2026-07-28 ⇒ 重裝後警報自然消失。
t161(庫清單空白):portal 前端 guard401 → dropSession() **靜默**清 token 跳登入頁,
畫面不說任何原因 ⇒ 用戶看到的是「庫不見了」而非「請重新登入」(leo:「實際上根本
沒連上任何庫,清單空白」)。修:dropSession 帶原因寫進 #login-status——
「你的登入已過期,請重新登入(你的資料都還在,不會遺失)。」
資料側無恙(portal_library records=2 已驗),純讀側 session 過期+靜默 UX 缺陷。
驗:cypher tsc 全綠;vitest 9 failed/187 passed=基線不變。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-07-31 15:34:27 +08:00 |
|
uncle6me-web
|
e744ad1f96
|
t160 世代債清除(leo:「如果你會搞不清楚,就把錯的東西刪掉」)——repo 只留一個 UI 世代
事故鏈(07-31 深夜,leo 刷新撞到):t159 重打包 staging bundle 時,build-ui-bundle
吃了 feat/step3 分支的 console-ui/public/——該分支基底早於 main d7fab7c
「拿掉登記新庫」,public 停在舊世代 ⇒ youlin 實例 UI 被打回被淘汰的
「登記新庫」人工表單典範(07-27 mistakes 已記帳的 src/public 雙世代債,
這次由「分支副本停舊代」路徑引爆——債沒還,任何一個部署路徑都會引爆它)。
刪掉的(舊世代,git rm 實體刪除):
- console-ui/src/(console.ts/console-dashboard.ts/portal-ui.ts)=07-22 從
cypher-executor 搬出的 renderer 快照,自 07-27 起與 public/ 真身脫鉤、只會
重產舊 UI
- console-ui/scripts/build.mjs=從上述舊 renderer 重產 public 的 build 步驟
(deploy.mjs 原自動跑它=引爆器本體)
- cypher POST /portal/admin/libraries(人工建庫端點)=死端點(e28e190 起 UI
零呼叫;leo 規格「要直通 daemon,同步,沒有登記這回事」)。GET 列表/PATCH
管理/t159 daemon 自動登記照舊
新唯一源:console-ui/public/=手改演進的真身(本 commit 同步到 main e28e190
世代+註解字樣改寫達成「登記新庫」全檔 0 命中);deploy.mjs 改為直接託管
public(無 build 步)+世代閘(缺「不需要人工新增」或含「登記新庫」拒部署)。
驗:tsc 全綠;deploy.mjs node --check 過;重打 ui bundle 242KB 過世代閘,
指紋「登記新庫」=0/「不需要人工新增」=1。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-07-31 14:36:48 +08:00 |
|
Leo
|
e28e19069f
|
t142: 雲端子庫顯示同步幾張卡+幾個三元組(政府專案驗收需求)
leo 07-29:「要在雲端子庫顯示同步了幾個 wiki,既然這樣也同步顯示有幾個三元組,
這是為了政府專案驗收。」
kbdb 兩支統計端點:
- entries.ts: COUNT(DISTINCT page_name) AS card_count
⚠️ 必須 distinct——算 block 數會膨脹 3-5 倍,政府驗收看到假數字比沒數字更糟
- records.ts: COUNT(*) AS triplet_count(三元組本來就算全部)
portal.ts 聚合兩者掛進庫目錄;前端 index.html 顯示。
驗:卡數確為 COUNT(DISTINCT page_name)/前端內嵌 JS node --check 全通過
(07-29 白畫面事故教訓)/portal-admin 測試 34 passed(改動前 31 passed,
唯一的 1 failed 是既有債:GET /portal 回 404,改動前後相同,非本次造成)。
註:此為子 CC 完成後未 commit 的懸置工作,總管收工檢查時發現並補收。
|
2026-07-29 19:55:03 +08:00 |
|
uncle6me-web
|
159f0b07dc
|
🔴🔴 fix: portal 白畫面——t131 誤刪上一個 IIFE 的收尾 })();
leo:「問題是 portal 是白的」。真因:t131 合併 AI 設定時刪掉舊的 chat-key/extractor 兩區,
**連同上一個 IIFE 的收尾 })(); 一起刪掉** ⇒ 整段 JS 語法錯(Unexpected end of file)
⇒ 瀏覽器整支 script 不執行=白畫面。
**總管失職**:t131 驗收只跑了 vitest(測後端)+grep 字串,**從未驗過前端 JS 語法**——
portal/index.html 是純前端檔,vitest 根本測不到它。
修:補回 })();;node --check 通過;os-split/safejson 測試綠。
|
2026-07-29 17:45:30 +08:00 |
|
uncle6me-web
|
9d38d580f2
|
feat(t131): AI 設定合併成一把金鑰——聊天與萃取共用,Claude 為選填加強
leo:「拿到一把就很難了,還要拿兩把。一律規定先輸入 gemini api key,
如果想要強化本地萃取,可以選擇 claude……前面那個,聊天和萃都一次設好,後面那把,不填就是 gemini」
+「重點是更好的模型萃取知識更能抓重點,不然他也不知道加強什麼」(文案講感覺得到的差別)
+「本地如果有裝 claude,掃到,只要一個 checkbox 就好」(daemon 偵測回報,沒偵測到就停用選項)。
- POST/GET /portal/admin/ai(一次寫 chat-key 與 extractor)+/portal/daemon/report-capabilities
- 舊 chat-key/extractor 端點保留相容;UI 兩區合併成「AI 設定」
t131 新測 7 條全綠(總體 229 passed/9 紅皆 pre-existing:HTML shell 搬遷×2、library-map 未實作×6、
executor 零件×1)。(實作=子 CC;驗證+commit=總管)
|
2026-07-29 15:28:10 +08:00 |
|
uncle6me-web
|
0860e84d22
|
feat(t135): 庫目錄可自主移除+標示還在不在同步
leo:「需要加移除按鈕。因為別人裝錯我沒辦法幫他弄,需要可以自主」
+「你應該要顯示這個庫沒有本地對應的 folder,那就不容易刪錯」
(兩態非三態——leo 二修:「分兩種沒意義」,那是內部狀態不是用戶分類)。
- DELETE /portal/admin/libraries/:id(登記簿)與 by-name/:name(auto 庫需輸入庫名確認)
- kbdb 加 deprecate-by-library(auto 庫移除=標 deprecated,資料保留可還原)
- daemon/libraries 存 active 清單 → 卡片標 🟢同步中/灰目前沒有在同步
- 不自動刪(daemon 可能沒開機);daemon 從未回報時整列不標
vitest 24 passed(1 紅=console HTML 搬遷陳舊測試,非本案)。
(實作=子 CC;驗證+commit=總管。含 t116/t117 先前未 commit 的 graph-executor/wasi-shim 修正)
|
2026-07-29 14:45:44 +08:00 |
|
uncle6me-web
|
eb9f2db513
|
feat(t122 🔴🔴): 萃取引擎雲端設定+隨連線下發——封測者終於萃得出東西
真兇(總管查證):daemon/config 寫死 extractor='claude' 且不下發金鑰 ⇒ 封測者 100% 萃取失敗
(leo:「地端沒有 AI 根本不能萃,那它就不能玩」)。
- POST/GET /portal/admin/extractor(admin 閘;GET 只回 has_key 不回明文)
- daemon/config 改讀設定:未設定→gemma 無金鑰;設定後→含 gemini_api_key
- portal 設定頁加「萃取引擎」區(Gemini 推薦+aistudio 連結,存後提示「小幫手點連上知識庫重連即可」)
測試 3 條新綠(vitest 17 passed;1 紅=console HTML 搬遷陳舊測試,非本案)。
(實作=子 CC;驗證+commit=總管)
|
2026-07-29 13:21:26 +08:00 |
|
uncle6me-web
|
429b2d965f
|
fix(t97+t114): 庫目錄只顯示用戶同步進來的庫、拿掉兩段式登記
leo 07-28 原話:「用戶沒加上的庫,不要自作主張給它加上」/「掃進來的就是要進目錄…
加入目錄這件小事還要分兩段做?…這是在攻打用戶嗎?根本是 attack」。
- portal.ts:859 auto 段濾掉 general(系統未標庫桶,非用戶的庫)
- index.html:bootstrap 不再預埋 kb 庫;移除「登記到目錄」按鈕與 auto/registered 視覺分岔
驗證(總管 grep 真相源):登記到目錄=0、kb 種子=0、general 濾在;
os-split 10/10+safejson 8/8 綠;portal-admin 1 紅=console HTML 搬遷陳舊測試
(stash 基線同紅,與本案無關)。(實作=子 CC;驗證+commit=總管)
|
2026-07-28 23:54:57 +08:00 |
|
uncle6me-web
|
ba92d10a3f
|
fix(t88): 拿掉庫管理頁「圖譜來源」概念——任何庫都能進總圖
leo 裁定(2026-07-28):「任何的庫都要進到圖譜模式」「給他選擇就是客服問題」
「不要給他選,掃到就能進總圖,也不用停用按鈕」。
移除:標為/取消圖譜來源鈕、庫停用/啟用鈕與 dialog、graph_source tag 與過濾、
說明文字「標了圖譜來源的庫決定誰能用圖譜模式」;後端 API 不動;
用戶管理的「停用」(set-status)未動。diff +6/-33。
按鈕來歷(leo 問):5a16484 第一刀拆分引入(當時 B5 不存在,粗閘是唯一保護);
t52(139d4c5) 補 auto 庫說明。拆的是過期鷹架非錯誤設計。
(實作=子 CC;驗證+commit=總管)
|
2026-07-28 12:41:00 +08:00 |
|
uncle6me-web
|
a909072dc1
|
feat(t87): portal 兩處顯示「去後綴的乾淨網址」+一鍵複製——連線不再要人抄網址列
leo 07-28 拍板:「一律用網址,把後綴拉掉,以免他貼了說我的網址錯了」。
設定頁「同步小幫手」卡+管理頁「庫目錄管理」各一行:location.origin(無 /portal/#/ 後綴)
+複製鈕(成功短暫顯示「已複製」,失敗 fallback 提示手動選取)。共用同一 helper。
os-split 10/10、safejson 8/8 仍綠(總管親跑)。(實作=子 CC;審查+commit=總管)
|
2026-07-28 12:04:04 +08:00 |
|
uncle6me-web
|
11e772496f
|
fix(t75 ①): portal 不再把 JSON 解析錯誤噴給使用者+404 說人話
leo 同事實測:存 Gemini 金鑰時畫面出現
「Unexpected non-whitespace character after JSON at position 4」。
根因兩層:
① 前端 15 處無條件 r.json(),但伺服器不一定回 JSON——404 頁/CF 錯誤頁都是 HTML。
JSON.parse 一爆,錯誤沿 .catch 走到 friendlyErr,而 friendlyErr 最後一行是
=把任何例外訊息原樣顯示 ⇒ 技術英文直接噴到畫面。
② 真正的原因是 /portal/admin/chat-key 回 404(實例的 cypher 是舊版沒這端點),
但使用者完全看不出來,只看到一句看不懂的英文。
修:
- 新增 safeJson(r):用 r.text() 再 try/catch parse,解析不了回 {} 不拋錯;15 處改用它
- friendlyErr 收斂:JSON 類錯誤→「伺服器回應異常,請稍後再試」;
純英文技術訊息→「操作失敗」;我們自己寫的中文訊息才原樣顯示
- 兩處金鑰儲存加 404 專屬提示:「你的知識庫版本還沒有這個功能,請先更新知識庫」
——講清楚為什麼與怎麼辦,否則他只看到「儲存失敗」會反覆重試同一件事
- 順手:安裝卡片那處原本 x.d.error 在 x.d 為 undefined 時會再爆一次,補 x.d && 防護
測試 safejson.test.mjs 8/8:404 HTML 不拋錯/空回應/正常 JSON 仍解析得出/
JSON 錯誤不外洩原文且說人話/網路錯誤訊息保留/中文訊息原樣/英文技術訊息收斂。
⚠️ 這只解「不噴技術訊息」;金鑰要真的存得進去仍需實例更新 cypher(②層待辦)。
|
2026-07-28 01:02:12 +08:00 |
|
uncle6me-web
|
53c6334fd9
|
fix(portal/t72): 下載頁 OS 分流——Windows 客戶不再拿到 Mac 的 .app
leo 07-27:「客戶是用 windows 的」。此前四處寫死「下載 Mac 版」,
Windows 用戶按下去拿到 .app=按了連到錯的東西(leo 判準:那不算友善)。
改法(施工圖 rag-wave1/windows-build-and-os-split.md §3):
- daemonPick() 依 UA 判 OS,四處共用;判不出來=兩個都給,不替用戶猜
- 判對了也附「不是這個系統?」另一版連結(UA 會判錯,用戶要有路走)
- 擋關話術跟著 OS 走:Mac=右鍵打開/Windows=更多資訊→仍要執行
- daemonBase 新 key,保留 daemonDownload 舊 key 相容(由檔名推目錄)
- 一律走 raw:Mac zip 21MB > jsDelivr 20MB 上限(實測回 File size exceeded)
測試 os-split.test.mjs 10/10:
⚠️ 測試抓到真 bug——iPhone 的 UA 含 'Mac OS X' 會被判成 Mac,
讓手機用戶下載裝不起來的桌面 app。已加 isMobile 排除,手機落到「兩個都給」。
未驗:真 Windows 機器的實際下載與安裝行為(需真機)。
|
2026-07-27 19:28:43 +08:00 |
|
Leo
|
d7fab7c6aa
|
fix(portal): 拿掉登記新庫/設定頁補常駐入口(下載小幫手+AI 金鑰)
leo 07-27 走完安裝後三點回饋:
1) 「登記新庫」是設計錯誤 —— leo:「應該是同步小幫手抓到的庫就顯示在上面,
沒有人工登記的選項。」人工登記只會製造對不上的空庫。
移除表單+對應 JS;說明改為「裝好同步小幫手並選好資料夾後,每個資料夾會自動
成為一個庫出現在下面,不需要人工新增。下面還是空的,代表小幫手還沒裝好或還沒選資料夾。」
2) AI 金鑰與下載連結只存在一次性的「還差 N 步」卡片,按了「稍後再說」或裝完就
再也找不到 —— 換金鑰/換電腦重新下載都沒入口。
設定頁新增兩個常駐面板:「同步小幫手」(下載)與「AI 問答金鑰」(可隨時更換),
共用既有 API POST /portal/admin/chat-key。
3) 修 window.ARCRUN_CFG → ARCRUN_CONFIG(與 721 行既有用法一致,原為筆誤)
驗證:ad-nl-create 殘留 0 / st-daemon-dl 2 / st-key-save 2 / ARCRUN_CFG 0
抽出頁面 3 個 script 區塊 node --check 語法通過
|
2026-07-27 16:26:52 +08:00 |
|
uncle6me-web
|
139d4c5ed1
|
feat(t52): 資料夾=庫端到端——kbdb 加 /entries/libraries(資料面 distinct 庫);portal 庫目錄合併「登記簿+蓋章自動出現」(auto);auto 庫改安全渲染(無 record_id 不放死按鈕,改給『登記到目錄』)+daemon/libraries 自動登記端點。leo 07-26:地端 2 個資料夾雲端就要 2 個庫
|
2026-07-26 01:49:43 +08:00 |
|
uncle6me-web
|
e7fe83a872
|
feat(t54): 小幫手憑帳密自取設定——新端點 POST /portal/daemon/config(帳密驗證同 login,回連線設定不含知識內容);portal 清單移除 config.json 下載(3 步→2 步)。leo 07-25:「最好的就是把它的帳密直接輸入」
|
2026-07-26 00:16:21 +08:00 |
|
uncle6me-web
|
8d19d0b2d7
|
fix(portal/t53): daemon 下載連結補實——zip 上鏡像(raw 路徑;jsDelivr 20MB 上限擋 21MB 檔)+無下載點時誠實降級不放死連結(交付警察抓到 404 死連結)
|
2026-07-25 23:44:44 +08:00 |
|
uncle6me-web
|
a8d246ebe9
|
feat(portal/t53): 進站完成安裝清單(leo 07-25:金鑰與 daemon 要在站內做,不然安裝沒完成)——常駐三項清單(下載小幫手/下載 config.json 站內生成/貼 Gemini 金鑰即時啟用)+新端點 POST /portal/admin/chat-key(改寫 tenant rag_chat 的 x-goog-api-key,admin 閘、金鑰不落 log)+session 回 email 供 config 生成
|
2026-07-25 23:26:44 +08:00 |
|
uncle6me-web
|
11ffd42899
|
fix(portal/t49): 首登頁補逃生口——『已經有帳號?改用登入』+setup 409 自動切登入帶提示(leo 實撞死路)
|
2026-07-25 21:12:31 +08:00 |
|
uncle6me-web
|
9bbd25fdfc
|
feat(portal/t49): 首登建帳一顆按鈕——auth-status 偵測未初始化→v-firstsetup(console/setup→portal/admin/bootstrap→自動登記預設庫 kb→portal/login 四發連鎖)+進站一次性歡迎卡(下載小幫手/金鑰 → installer /setup)。leo 07-25:『加入的體驗要搞定』——用戶打開專屬網址第一眼就是建帳號,不再回安裝頁等
|
2026-07-25 20:35:33 +08:00 |
|
Claude
|
beb0653e15
|
fix(console/t36): 語意搜尋改狀態列——移除按不動的假開關與 CLI 指示
leo 2026-07-25 定案:語意搜尋預設開啟、不做開關(費用實算後屬雜訊——1 萬張卡規模
下 Vectorize 約 $0.18/月,佔 CF 帳單 3~4%;關掉省幾毛錢卻換來很爛的搜尋體驗)。
設定頁那顆「語意搜尋(vectorize)」開關其實不能按(title 自承「不能遠端改,只如實
顯示狀態」),旁邊還教用戶去部署端改 config.yaml 跑 acr update——對一鍵安裝進來的
用戶那是天書(與 t35 同一種白癡化違規),而且安裝器現在裝機時就把語意索引開好了,
那段指示本身已不成立。
改成單純狀態列:啟用時只說「已啟用,搜尋頁切語意就能用」不給任何操作指示;未啟用
才給一句人話與下一步(重跑安裝流程會補上,已建資料不重來)。
⚠️ 連帶必修:一併移除綁在該開關上的 click handler——留著會讓 $('st-vec-switch')
回 null、addEventListener 當場拋錯,把後面所有綁定(含登出)一起打斷。
驗:三個 script 區塊語法檢查通過、全檔已無 st-vec-switch/st-vec-state 殘留參照。
|
2026-07-25 08:51:54 +00:00 |
|
uncle6me-web
|
ad367e450d
|
console-ui: 修好壞了一個月的 build + 具名部署目標(個人版/企業版)
🔴 根因:5a16484 把 UI 搬 CF Pages 時「移出 → console-ui/」實際上只搬了
build 產物(HTML),三支 renderer 原始檔被刪且沒搬 →
`npm run build` 從那天起 ENOENT 死掉,線上 HTML 是刪檔前烤好的,
一個月來無法重建(CONSOLE_PROFILE 改了也不會生效,因為 build 跑不起來)。
修法:
- 從 git 撈回 console.ts(1623)/portal-ui.ts(1390)/console-dashboard.ts(822)
放進 console-ui/src/——UI 原始碼跟著 UI 專案走,才是那一刀的原意
- build.mjs 加 resolveSource():本地 src/ 優先,找不到才回退 cypher-executor
新增具名部署目標(deploy.targets.json + scripts/deploy.mjs):
一個目標=帳號+profile+apiBase 綁在一起,解決三次帶漏參數:
- demo 站漏 CONSOLE_PROFILE=rag → 顯示個人版 7 頁駕駛艙(leo「進去是 Mira 介面」的真因)
- 兩站漏 ARCRUN_API_BASE → apiBase 空 → 前端打自己 405 → 登不進去
- 兩帳號都有同名 arcrun-console-ui 專案且 wrangler OAuth 登入在 uncle6
→ 不指定帳號 deploy 會部到 demo 站(差點蓋掉,改用 API token 鎖帳號)
npm run deploy:personal → leo21c, profile=full(7頁), apiBase 指 leo21c worker
npm run deploy:enterprise → uncle6, profile=rag(4頁落地搜尋), apiBase 指 cypher.arcrun.dev
實測(用戶真的會走的路):
- mira.uncle6.me/console/ 200,VIEWS 7 頁,apiBase 對,CORS ACAO 通
- rag-demo.arcrun.dev 4 頁落地搜尋;登入 OK、搜「藍鯨導航儀」5 筆(未受部署影響)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-07-22 19:09:29 +08:00 |
|
Leo
|
5a164843ef
|
refactor(cypher): 第一刀拆分——UI 搬 CF Pages,ingest 從必爆變穩定
根因(leo 2026-07-21 三個判斷全被數字證實):
- 「cypher 展開上萬行,當時我就懷疑這樣跑得動嗎」→ 15,446 行、bundle 748KB
- 「不相信 CF 連讀文字檔都會撞牆」→ 不是 CF 的問題,是 cypher 太肥
- 「它違反了樂高化的原則」→ 零件 4KB,調度它們的 cypher 是巨石
定位錯誤(比效能更根本):console.ts:1 自陳「Mira Console」,而 wiki 明載
「Mira 是 Arcrun 的使用者,不是開發者」→ 使用者的前端寫進了框架的執行引擎。
CLI/MCP 都已拆成獨立薄殼,唯獨 UI 沒有。責任誠實記:console.ts 標
「2026-07-04 總管派工」,是總管當初選了「就近寫在 cypher」的方便路。
本刀:
- console.ts(1623行) + portal-ui.ts(1390行) 移出 → console-ui/ CF Pages 專案
(單檔 HTML + 原生 JS,零 build step,保持原特性)
- index.ts 移除兩個路由掛載、修 implicit any
- console-dashboard.ts 只留 API(UI 部分移出)
實測驗收(leo 指定判準:不看 /health,看真實任務):
| 測試 | 拆分前 | 拆分後 |
|---|---|---|
| 連灌 10 張新卡(無間隔) | 從未成功 | 10 張全 create、73 條三元組 |
| 同卡連跑 6 次 | 前 2 過、後 4 全 1102 | 6 次全過 |
| Bundle | 747.9 KB | 528.0 KB(-29%) |
Pages 已上線:arcrun-console-ui.pages.dev(console/portal 皆 200)
cypher API 正常:/health、/console/dashboard-data 皆 200
未做(第二刀):console-dashboard/portal/portal-data 尚未拆,cypher 仍 528KB。
但 ingest 已穩定,急迫性下降。
註:部署撞到三個既有 self-hosted 陷阱(KV/D1 id 是官方帳號的、arcrun.dev route
leo21c 無該 zone),用 wrangler.leo21c.toml 繞過,未改原始設定檔。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-07-21 18:55:31 +08:00 |
|