Commit Graph

124 Commits

Author SHA1 Message Date
Leo bf1f0d9991 feat(t104): 多帳號同時看守——切換概念消滅
leo 架構依據:「它只是一個門,幾個帳號通過它同步並沒有影響」+
「我不是 Google Drive……不提供暫存空間,daemon 工作輕巧,多帳號只是頁簽問題」
(D-daemon-not-Drive)。
Accounts[] 每帳號獨立連線+資料夾;舊 config 冪等遷移 accounts[0];
逐帳號同步一敗不擋全;status.json 分帳;托盤每帳號一分組;
「連上知識庫」→「+新增帳號…」(append 非替換);t86 切換清空退役;
t101 刪除作用於正確帳號。+873/-149、collector 5+tray 5 新測試,
兩模組 go test 全綠(總管親跑)。
(實作=子 CC;驗證+commit=總管)
2026-07-28 16:45:14 +08:00
Leo f8450815d3 feat(t103): daemon 偵測雲端過舊+托盤更新入口——連動閉環
每輪 GET /health 取 bundle_version(5s timeout 失敗靜默);空或日期<minCloudBuilt
→ 托盤「⚠ 知識庫需要更新(點我)」開 install.arcrun.dev;結果進 status.json。
兩模組 go test 全綠(總管親跑)。leo:「daemon 和雲端是連動的」——自此用戶只看托盤。
(實作=子 CC;驗證+commit=總管)
2026-07-28 16:15:12 +08:00
Leo ef74c69023 feat(t101): 托盤刪除語意取代看守語意——leo 實測裁定
「沒有看守這件事,只要列入就是看守,不想同步就刪掉」:
子選單「停止看守這個資料夾」→「刪除這個知識庫」(按下從列表剔除、冪等);
「+ 建立新資料夾並看守…」整項刪除。tray go test 綠(總管親跑)。
(實作=子 CC;驗證+commit=總管。此案原被誤擱置害 v0.13 漏裝=mistakes c947e5a)
2026-07-28 16:06:08 +08:00
Leo 77aa4c5195 feat(t98): 托盤「立刻同步」——訊號檔法零 IPC,跨平台
leo:「無法知道到底同步了沒,可以在 daemon 上加一個立刻同步?」
tray 點擊寫 ~/.arcrun-rag/sync-now+短暫顯示「同步中…」;collector 主迴圈 1 秒輪詢
訊號檔、有就立刻跑一輪刪檔,無則照 PollSec 排程;完成後 status.json 更新自然刷新托盤。
測試:collector+supervisor+tray 三模組全綠(總管親跑)。
(實作=子 CC;驗證+commit=總管)
2026-07-28 15:06:08 +08:00
Leo 02833588e5 build: v0.12.0 Mac zip 重包(含 t89/t86/t77lite/t91/92)+mistakes:zip 假綠一課 2026-07-28 12:43:01 +08:00
Leo 6c9d74d588 fix(t91+t92): 萃取狀態可見+Finder 啟動 PATH 修正——背景執行不可見的兩題同根一起解
leo 07-28 實測根因:Finder 起的 GUI app 只有最小 PATH(無 /opt/homebrew/bin)
→ claude 靜默找不到→整輪萃取失敗,托盤卻顯示「看守中」。leo:「我怎麼知道它有萃?」
- FindClaudeBin:LookPath 失敗後掃 4 個常見絕對路徑,找到回寫 config claude_bin
- CheckExtractor 預檢+每輪寫 ~/.arcrun-rag/status.json(ok/fail 計數+失敗清單)
- 托盤:引擎未就緒→「⚠ 萃取引擎未就緒:<白話原因>」;失敗>0→可點開明細;正常→「已萃 N 檔」
測試:collector+supervisor+tray 三模組 go test 全綠(總管親跑)。
(實作=子 CC;驗證+commit=總管)
2026-07-28 12:41:41 +08:00
Leo 5e122b47ec feat(t77-lite): Windows 合併成單一 exe——go:embed 把 collector 吃進 tray
leo 07-28:「Windows 解開有 2 個 exe,被瀏覽器擋住,如果只有 1 個,
我還可以把 exe 改成 e_e 讓朋友改回來,但現在這樣完全不行」。
做法:build-windows.sh 先編 collector.exe 到 tray 目錄供 //go:embed,
tray 啟動時 ensureEmbeddedCollector() sha256 比對後解壓到 ~/.arcrun-rag/bin/,
失敗 fallback 同層(舊版相容);Mac 走 build-tag no-op 完全不動。
驗收(總管親跑):PE32+ GUI exe/zip 僅 1 檔 16.9MB<20MB jsDelivr 上限/
collector 特徵字串在 exe 肚裡(grep=1)/Mac go build+test 全綠/tray 測試綠。
(實作=子 CC;build+驗收+commit=總管)
2026-07-28 12:15:13 +08:00
Leo 0deef3dbd9 fix(t86 🔴): 換知識庫實例時清空看守資料夾——堵個資外洩
leo 07-28 實測坐實:youlin 時代的資料夾被原封同步進 geek6688 新實例
(「假如我把個人的同步到官方去就很危險,個資外泄」)。
修:instanceChanged(old,new) 比 host;連線精靈成功後若換了實例→清空
WatchFolders/WatchFolder,成功對話框改為說明「因為換了知識庫,為避免把舊資料夾
誤傳到新知識庫,請重新用『+新增知識資料夾…』選擇」;同實例改密碼行為照舊。
測試(main_test.go):host 異同判定含大小寫/尾斜線/scheme 差異。tray go test 綠。
(實作=子 CC;審查+commit=總管。⚠️ manifest 沿用=t86b 另案未含)
2026-07-28 12:03:20 +08:00
Leo 59cf9825d1 fix(t75 ④⑤): 連線精靈不再清空輸入+Windows 不再每幾秒閃 console 視窗
leo 同事真機實測撞到的兩個最嚴重問題。

④ 連線失敗會清空使用者輸入(leo:「很糟糕」)
   真兇:失敗後呼叫 showConnectWizard(),註解寫著「不要把他丟回空白畫面」
   **但行為與註解相反**——它重建整個對話框,urlEntry 是全新的,
   而 cfg.CypherURL 因連線失敗根本沒寫入 ⇒ 欄位就是空的 ⇒ 使用者整段重打。
   修:改 showConnectWizardWith(prevURL, prevEmail) 帶回上次輸入,
   讓他只改錯的那個字。密碼不帶回(打錯時重打較安全,也少留記憶體)。

⑤ daemon 開著時每幾秒閃一個方框(約半螢幕)
   真兇:arcrun-collector.exe 是 console 型執行檔,supervisor 每輪 exec 起它,
   **Windows 預設會為 console 程式配可見視窗** ⇒ 每輪閃一次。
   Mac/Linux 無此概念故開發期完全沒想到。
   修:新增 hidewindow_windows.go(HideWindow + CREATE_NO_WINDOW)
   +hidewindow_other.go(no-op),編譯期分平台不寫 runtime.GOOS 判斷。
   註:-H windowsgui 是連結期選項(管自己有沒有視窗),與此(管起別人時給不給視窗)
   是兩件事,兩者都要做才乾淨。

驗證:Mac 與 Windows 交叉編譯皆 exit=0 且產物生成;collector 全測試綠。
⚠️ 未真機驗——⑤ 的效果必須在真 Windows 上確認方框消失。
2026-07-28 00:42:12 +08:00
Leo 1b58cd1a35 fix(t72): build-windows.sh 補版本注入(Mac 有、Windows 漏了)+tray go.mod tidy
實測抓到:Windows 版編出來 v0.10.0 命中 0——版本注入只加在 build-mac.sh,
Windows 那支漏了(我今天改的那份在 detached worktree,沒進分支)。

v0.10.0 兩平台實測:
  Mac  zip 15.92MB|托盤 21.15MB(strip)|collector 14.46MB(含 PDFium)
  Win  zip 16.86MB|tray 22.40MB|collector 15.15MB
  兩者皆 < jsDelivr 20MB
  指紋全中:v0.10.0/版本列/結束 Arcrun RAG/PDF 打不開(轉檔層)

順帶修:tray go.mod 需 tidy 才編得過(合併後又被覆蓋,撞了兩次)。
2026-07-27 21:17:50 +08:00
Leo a0a7215d24 Merge branch 'fix/mac-build-strip-t72' into feat/daemon 2026-07-27 21:12:55 +08:00
Leo 90b6de66bc feat(t72): daemon 加版本編號(leo 07-27:沒版本號=只能靠 shasum 對帳)
病根:在此之前無法從畫面看出裝的是哪一版。07-27 花大半天對帳
「leo 手上/鏡像上/剛編的」是否同一顆,只能 shasum 比對 binary;
使用者更做不到這件事,回報問題時我們也不知道他跑的是哪版(t63 三層落差)。

做法:
- main.go 加 version/buildTime 變數,build 時 -ldflags -X 注入,未注入顯示 dev
- 托盤選單「結束」正上方加停用態版本列(回報問題時眼睛已在那一區)
- build-mac.sh / build-windows.sh 同一套:VERSION 環境變數 > git describe > dev

實測(兩平台各實跑一次 VERSION=v0.9.0):
  Mac  托盤 21.1MB/zip 12.43MB/v0.9.0 命中 3/版本列 1/結束 1/連上知識庫 1
  Win  zip 13.27MB/PE32+ GUI/v0.9.0 命中 3/版本列 1/結束 1/連上知識庫 1
  兩包皆 < jsDelivr 20MB 上限

未驗:選單版本列的實際顯示(Mac 需 leo 點選單、Windows 需真機)。
2026-07-27 19:46:19 +08:00
Leo 1c48d58789 fix(t72/t63): build-mac.sh 加 -s -w——Mac 版掉進 jsDelivr 20MB 內,免拆檔
真兇:fyne package 內部自己 go build,吃不到 -ldflags,產出含符號表+DWARF 的胖執行檔。
解:②b 用 -s -w 重編托盤覆蓋回 bundle;collector 也一併 strip。

實測(從乾淨狀態重跑 build-mac.sh):
  托盤   28.6MB → 21.1MB
  整包zip 21.1MB → 12.43MB  ← 遠低於 jsDelivr 20MB 上限
  功能指紋 結束 Arcrun RAG=1 / 連上知識庫=1(未掉功能)
  codesign -v 通過

影響:此前 Mac 版超 20MB,jsDelivr 直接回 File size exceeded,只能走 raw;
現在可走 CDN,且**免除原本要拆檔(tray/collector 分開)的工程**。
Windows 版 13MB 本來就在限內,不受影響。

未驗:真機執行行為(托盤 icon/選資料夾)——strip 不影響邏輯但仍需真機確認。
2026-07-27 19:31:30 +08:00
Leo 26dd6960c2 feat(t72): Windows 交叉編譯腳本——Mac 上就編得出 Windows 托盤(推翻「要真機」假設)
任務板一直寫「fyne GUI 沙箱編不了 CGo+GL → 歸屬真機」,本機實測推翻一半:
裝 mingw-w64 後 Mac 直接交叉編譯成功,不需 Windows 機器/Docker/fyne-cross。

  CGO_ENABLED=1 GOOS=windows CC=x86_64-w64-mingw32-gcc \
    go build -ldflags "-H windowsgui -s -w"
  → PE32+ executable (GUI) x86-64, for MS Windows

正確說法是「編得出來、但驗不了」——編譯是 Mac 的事,跑起來對不對才是真機的事。

另兩條路實測皆失敗(訊息留在文件):
- CGO_ENABLED=0 → go-gl/gl 無 non-cgo 實作
- CGO_ENABLED=1 無交叉編譯器 → 退回 host clang 報 -mthreads 不支援

體積(解掉 t72 的 zip 疑慮):tray 加 -s -w 40.8MB→23.5MB、collector 6.5MB,
zip 合計 13.9MB=在 jsDelivr 20MB 上限內,Windows 版不會踩到 Mac 版那個坑。

腳本已實跑通過。 未驗=托盤 icon/選資料夾對話框/SmartScreen 實際行為(要真 Windows)。
詳 system-dev/docs/3-specs/rag-wave1/windows-build-and-os-split.md

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-27 18:34:59 +08:00
Leo fedb765742 feat(t52): per-folder 庫章——DirectConfig.libraries 對映+libraryFor()(資料夾名 slug/中文退後備/明列優先,go test 綠);兩支 ingest workflow 的 post_block metadata 補 library(真兇:blocks 沒蓋章=兩資料夾全歸 general);托盤連線時回報庫自動登記 2026-07-26 01:53:44 +08:00
Leo 3675f38e59 fix(daemon/t55): 托盤補「結束 Arcrun RAG」——leo 07-26 實撞沒有出口(關窗只隱藏、LSUIElement 無 Dock 右鍵、只剩強制結束);結束前先 sup.Stop() 不留孤兒 collector 2026-07-26 01:12:57 +08:00
Leo 3174340c4c feat(daemon/t54): 連線精靈——首次啟動輸入知識庫網址+帳密,自動換取設定並開始看守(不再需要下載 config.json 丟隱藏資料夾);portal→cypher 子域自動換算、三種輸入格式實測可用;選單加「連上知識庫…」供換帳號 2026-07-26 00:16:58 +08:00
Leo 125377b899 feat(daemon-beta t26): 托盤選單顯連線身分(暱稱>email>未設定),CF 全程隱形
- directConfig/DirectConfig 加 Email、InstanceName(選配)欄,兩結構同形
- rebuildTray 選單頂加 disabled「連線中:<暱稱||email||未設定>」列;
  有 cypher_url 再加一行縮短 host(fyne MenuItem 無 tooltip,取捨見註解)
- connectionStatusLabel/shortCypherHost 抽純函式,3+3 案 table test
- go vet + go test 全綠(collector 43 通、tray 10 通);tray go build 過
2026-07-24 17:59:01 +08:00
Leo b9d880413d feat(daemon-beta t14/t15/t17): supervisor log 檔+removed 清本地卡+托盤建新資料夾
- t14 supervisor:子行程 stdout(tee)/stderr 全落 ~/.arcrun-rag/collector.log,
  >5MB 改名 .old 重開(兩代輪替);落 log 失敗一律吞掉不擋看守。新增 2 測試
  (輸出進檔+輪替觸發)。
- t15 direct removed(extractor 模式):雲端 takedown 2xx 後同步刪本地
  system-dev/wiki/cards/<頁名>.md(存在才刪;刪失敗只記 warning 不擋)。
  新增 2 測試(刪原檔→本地卡被清/卡已不在照常下架)。
- t17 arcrun-tray:tray 選單+設定視窗加「建立新資料夾並看守…」——
  widget.Entry 輸入名稱→ ~/ 底下 mkdir(已存在沿用;擋路徑分隔與 ..)→
  addWatchFolder+saveConfig+重啟看守+rebuildTray。

collector: go vet ✓、go test -count=1 ./... 43/43 綠;arcrun-tray: go build ✓(產物已刪)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-24 15:06:21 +08:00
Leo 387ce3d1a4 feat(daemon-beta t7/t8): Dock 隱藏真機驗證通過(lsappinfo type=UIElement)——runtime Accessory policy(cgo)+appID+ad-hoc 重簽;mistakes 記四枚真機坑;暫用 icon(等 leo logo) 2026-07-24 12:56:40 +08:00
Leo 5017d0381e feat(daemon-beta t7): 托盤多資料夾選單(每根一列:點開 Finder/子選單停止看守/動態重建)+build-mac.sh(fyne package+LSUIElement=true 隱 Dock——leo 07-24 裁決);編譯通過,真機驗歸 leo 2026-07-24 12:32:44 +08:00
Leo b355165180 feat(daemon-beta t1): 多資料夾 config——watch_folders[]+單數相容、manifest 每根一份、多根掃描標 Root、托盤資料層相容;rag-wave1 closed→daemon-beta 實作卷 active
- direct.go: Folders() 正規化(去重保序)/manifestPathFor(單根沿用不丟狀態、多根 sha 尾碼)/RunDirectOnce 多根彙總
- 新測試 4 支全綠(單數相容/多根去重/缺欄驗證/多根 dry-run 標 Root);既有 7 支不動全綠
- tray: config 加 watch_folders 欄(防存檔洗掉)+addWatchFolder 資料層;勾選 UI=task 7
2026-07-24 12:10:08 +08:00
Leo 44a9aeddc4 wip(daemon/tray): 保底 07-21 fyne 托盤進度(單資料夾版;情境1改造前的基線) 2026-07-24 12:10:08 +08:00
cloud-worker 9e356e3d99 feat(daemon/p04): fyne 托盤殼 + collector 看守器(CP-1 第6關產品化,leo 定 fyne)
leo 2026-07-21 回「fyne」。交付「可交付的殼」:
- collector/supervisor(純 stdlib,無 fyne):看守 collector direct 子行程、串 stdout JSON 出
  狀態(看守中/上次同步/出錯自動重試/已暫停)、崩潰重起、Stop 同步等 loop 收掉(修 Stop→Start
  換資料夾時舊 loop 覆寫新狀態的 race)。**sandbox `go test -race ./... 全綠(6 測,含 race)**,
  既有 collector 測試零回歸。
- collector/cmd/arcrun-tray(獨立 module,隔開 fyne CGo 依賴):選單列/系統匣 icon+狀態+
  選資料夾(原生對話框)/暫停·繼續/打開資料夾;關窗縮背景;watch_folder 預設 ~/ArcrunRAG 避開
  ~/Documents 的 TCC 禁區;wires supervisor。

誠實界定(mindset §7):
- **in-process vs 子行程**:leo 偏好 in-process,但 collector 是 package main,真 in-process 需抽核心成
  library(動已驗引擎有回歸風險)→ 本版走子行程看守(collector 零改、崩潰隔離),行為對用戶相同;
  in-process 抽取列可選後續,待 leo 裁。
- **fyne GUI 沙箱編不了**(CGo+GL)→ build/簽章/TCC 授權=leo/地端真機做(紅線②③);
  fyne API 細節以首次真機 build 為準。README 附建置/簽章/TCC 交接。
2026-07-21 09:27:55 +00:00