package main // supervise.go — 看守 collector 子行程(t194) // // 🔴 沒有這一段,這個 App 就只是個「會顯示設定的空殼」—— // daemon 的本體是 `collector direct`,它才在監看資料夾、萃卡、上傳。 // (寫 Wails 版時我一度漏了它,等於做出一個裝了也不會同步的東西。) // // 邊界:**複用既有的 supervisor 套件**(重起退避、狀態機、round 解析都在裡面, // 含 t191 的 phase:start/done ⇒ 「同步中…」)。這裡只做「找到執行檔、拉起來」。 import ( "os" "path/filepath" "runtime" "arcrun-rag/collector/supervisor" ) var sup *supervisor.Supervisor // collectorBinPath 找同綑的 collector 執行檔。 // 規則與 arcrun-tray 一致:跟 App 執行檔同層(build 時會複製進 .app)。 func collectorBinPath() string { name := "arcrun-collector" if runtime.GOOS == "windows" { name += ".exe" } exe, err := os.Executable() if err != nil { return name } if p, err := filepath.EvalSymlinks(exe); err == nil { exe = p } return filepath.Join(filepath.Dir(exe), name) } // startSupervisor 在 App 啟動時拉起 collector;沒有 config 就先不啟動 // (使用者還沒連知識庫,啟動只會一直失敗刷 log)。 func startSupervisor() { sup = supervisor.New(collectorBinPath(), configPath()) if _, err := os.Stat(configPath()); err == nil { sup.Start() } } // restartWatch 在設定變更後重起看守,讓新設定立刻生效。 func restartWatch() { if sup == nil { return } sup.Stop() if _, err := os.Stat(configPath()); err == nil { sup.Start() } }