

























@@ -459,10 +459,11 @@ describe("noteMemorySearchHealth", () => {
459459expect(message).toContain("embeddings are not ready");
460460});
461461462-it("does not warn when key-optional provider (lmstudio) probe was skipped (checked: false)", async () => {
462+it("does not warn when key-optional provider (lmstudio) probe was skipped (skipped: true)", async () => {
463463// When `openclaw doctor` runs without --deep, the probe is skipped and returns
464-// { checked: false, ready: false }. This must NOT produce a false-positive warning —
465-// it means readiness was never checked, not that embeddings are unavailable.
464+// { checked: false, ready: false, skipped: true }. This must NOT produce a
465+// false-positive warning — it means readiness was never checked, not that
466+// embeddings are unavailable.
466467// Regression test for: https://github.com/openclaw/openclaw/issues/74608
467468resolveMemorySearchConfig.mockReturnValue({
468469provider: "lmstudio",
@@ -471,13 +472,13 @@ describe("noteMemorySearchHealth", () => {
471472});
472473473474await noteMemorySearchHealth(cfg, {
474-gatewayMemoryProbe: { checked: false, ready: false },
475+gatewayMemoryProbe: { checked: false, ready: false, skipped: true },
475476});
476477477478expect(note).not.toHaveBeenCalled();
478479});
479480480-it("does not warn when key-optional provider (ollama) probe was skipped (checked: false)", async () => {
481+it("does not warn when key-optional provider (ollama) probe was skipped (skipped: true)", async () => {
481482// Same guard for ollama — the most commonly reported false-positive case.
482483resolveMemorySearchConfig.mockReturnValue({
483484provider: "ollama",
@@ -486,12 +487,35 @@ describe("noteMemorySearchHealth", () => {
486487});
487488488489await noteMemorySearchHealth(cfg, {
489-gatewayMemoryProbe: { checked: false, ready: false },
490+gatewayMemoryProbe: { checked: false, ready: false, skipped: true },
490491});
491492492493expect(note).not.toHaveBeenCalled();
493494});
494495496+it("warns for key-optional provider (lmstudio) when gateway probe timed out", async () => {
497+// A gateway timeout sets checked: false but skipped: false/absent. This is a
498+// real diagnostic signal — embeddings may be unavailable — so we should warn.
499+// Regression guard: https://github.com/openclaw/openclaw/issues/74608
500+resolveMemorySearchConfig.mockReturnValue({
501+provider: "lmstudio",
502+local: {},
503+remote: {},
504+});
505+506+await noteMemorySearchHealth(cfg, {
507+gatewayMemoryProbe: {
508+checked: false,
509+ready: false,
510+error: "gateway memory probe timed out: gateway timeout after 8000ms",
511+skipped: false,
512+},
513+});
514+515+const message = String(note.mock.calls[0]?.[0] ?? "");
516+expect(message).toContain('provider "lmstudio" is configured');
517+});
518+495519it("notes when gateway probe reports embeddings ready and CLI API key is missing", async () => {
496520resolveMemorySearchConfig.mockReturnValue({
497521provider: "gemini",
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。