v0.18.16:修「明明連上卻說沒連上」——第三次「我這台好好的」

leo Windows 實測:首頁跳「需要你處理一下 ⇒ 還沒連上知識庫」,
但側邊欄有 geek6688、Portal 的庫目錄管理也看得到它的庫(win_on_mac_test_lib)。

## 真兇:又是「只看根層欄位」
`direct.go` 判連線只看 **根層** `cypher_url`/`api_key`,
而多帳號設定(現在的常態)根層是空的 ⇒ **恆判成沒連線**。
為什麼開發機沒事:leo 的 Mac config 帶著**單帳號時代留下的根層欄位**。
⇒ **今天第三次同一個模式**(另兩次:config 缺 manifest 靠舊檔補齊、
   啟動 log 用根層組出 `/webhooks/named//…`)。
修:抽出 `accountsConnected()`=「根層有 **或** 任一帳號有」,並補測試
(刻意用「只有 accounts、根層全空」=全新使用者的形狀)。

## 順帶:那句話還指錯路
訊息叫人「點托盤選單的『+ 新增帳號…』」——**托盤選單早就只剩「結束 Arcrun」**
(t194 起所有設定都在視窗裡)⇒ 使用者照著做會找不到入口。
改指「左邊『知識庫』下方的新增知識庫帳號」。

## 順帶修我自己的測試腳本(leo 實撞)
`① 測試最新版.bat` 用 `dir /o-d`(修改時間)挑版本 ⇒ 複製到共用資料夾後
時間順序不一定等於版本順序,**leo 那次挑到了 v0.18.13**。
改用 `dir /on`(檔名排序)取最後一個。
另把「固定等 20 秒」改成「等你操作完按 Enter 再收 log」——
清空後第一次跑,引擎本來就不該啟動,等 20 秒收到的是空的。

## 附帶確認(leo 截圖)
- 「有 1 個檔案沒有被整理」**已列出檔名**(`scripts/sdd-active-check.sh`)⇒ 08-06 那個修正生效
- Portal 庫目錄管理三個庫都在(含 Windows 的 `win_on_mac_test_lib`)⇒ 子庫沒出現是假警報
This commit is contained in:
2026-08-06 19:57:05 +08:00
parent 458ff3fd88
commit 01fbb21357
3 changed files with 58 additions and 3 deletions
+2 -1
View File
@@ -5,5 +5,6 @@
"v0.18.12": "ce37982f05d8cb5b",
"v0.18.13": "fbf7342d0d0e27b4",
"v0.18.14": "bfcb4f2701fc23b4",
"v0.18.15": "447b59ea3ade430e"
"v0.18.15": "447b59ea3ade430e",
"v0.18.16": "12de01a21cd6bf38"
}
+26 -2
View File
@@ -518,9 +518,19 @@ func RunDirectOnce(cfg *DirectConfig, dryRun bool) ([]DirectResult, int, *Trigge
}
if cfg.Extractor == "workers-ai" {
// 這條路要的不是金鑰,是「連得上自己的知識庫」——沒連線才是真的沒法做事。
if strings.TrimSpace(cfg.CypherURL) == "" || strings.TrimSpace(cfg.APIKey) == "" {
//
// 🔴 2026-08-06 leo Windows 實測:畫面說「還沒連上知識庫」,但**明明連上了**
// (側邊欄有 geek6688、庫目錄管理也看得到它的庫)。
// 真兇:這裡只看**根層**的 cypher_url/api_key,而多帳號設定(現在的常態)
// 根層是空的 ⇒ 恆判成沒連線。
// 為什麼 Mac 沒事:leo 的 Mac config 帶著單帳號時代留下的根層欄位
// ——**今天第三次「我這台好好的」**(另兩次:config 缺 manifest、log 印錯網址)。
// ⇒ 判準改成「**根層有 或 任一帳號有**」。
if !accountsConnected(cfg) {
extractorOK = false
extractorError = "還沒連上知識庫 ⇒ 點托盤選單的「+ 新增帳號…」輸入網址與帳密"
// 🔴 入口寫錯會讓人找不到:托盤選單早就沒有「+ 新增帳號…」了
// t194 起托盤只剩「結束 Arcrun」,所有設定都在視窗裡)。
extractorError = "還沒連上知識庫 ⇒ 按左邊「知識庫」下方的「新增知識庫帳號」,輸入網址與帳密"
}
}
if cfg.Extractor == "gemma" {
@@ -743,6 +753,20 @@ func retrySkipReason(m *Manifest, path string, now int64) string {
return fmt.Sprintf("上次失敗(第 %d 次),%s 後重試", e.FailCount, (time.Duration(wait) * time.Second).String())
}
// accountsConnected 回答「這份設定連得上知識庫嗎」——**根層有 或 任一帳號有**。
// 抽成函式是為了測得到(見 multiaccount_connected_test.go)。
func accountsConnected(cfg *DirectConfig) bool {
if strings.TrimSpace(cfg.CypherURL) != "" && strings.TrimSpace(cfg.APIKey) != "" {
return true
}
for _, a := range cfg.Accounts {
if strings.TrimSpace(a.CypherURL) != "" && strings.TrimSpace(a.APIKey) != "" {
return true
}
}
return false
}
func runDirectOnceRoot(cfg *DirectConfig, root string, dryRun bool) ([]DirectResult, int, *TriggerPayload) {
results := []DirectResult{}
exit := 0
+30
View File
@@ -0,0 +1,30 @@
package collector
import "testing"
// TestConnectedDetectionUsesAccounts 釘住 leo 2026-08-06 Windows 實測的假警報:
//
// 畫面說「還沒連上知識庫」,但側邊欄有帳號、庫目錄管理也看得到它的庫。
// 真兇=只看**根層** cypher_url/api_key,而多帳號設定(現在的常態)根層是空的。
// 開發機不會撞到,因為它的 config 帶著單帳號時代留下的根層欄位。
//
// 這支測試刻意用「**只有 accounts、根層全空**」的設定——也就是全新使用者的形狀。
func TestConnectedDetectionUsesAccounts(t *testing.T) {
cfg := &DirectConfig{
Extractor: "workers-ai",
Accounts: []AccountConfig{{
CypherURL: "https://example.workers.dev",
Namespace: "abc123",
APIKey: "abc123",
}},
// 根層 CypherURL / APIKey 刻意留空
}
if !accountsConnected(cfg) {
t.Fatal("有帳號卻判成沒連線 ⇒ 畫面會誤報「還沒連上知識庫」(leo 撞到的那個)")
}
empty := &DirectConfig{Extractor: "workers-ai"}
if accountsConnected(empty) {
t.Fatal("完全沒帳號也沒根層設定時,應該判成沒連線")
}
}