diff --git a/cmd/arcrun-app/.version-source.json b/cmd/arcrun-app/.version-source.json index b0fa1f8..1acf739 100644 --- a/cmd/arcrun-app/.version-source.json +++ b/cmd/arcrun-app/.version-source.json @@ -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" } diff --git a/direct.go b/direct.go index a22d618..ebff096 100644 --- a/direct.go +++ b/direct.go @@ -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 diff --git a/multiaccount_connected_test.go b/multiaccount_connected_test.go new file mode 100644 index 0000000..64b31ce --- /dev/null +++ b/multiaccount_connected_test.go @@ -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("完全沒帳號也沒根層設定時,應該判成沒連線") + } +}