fix(memory): report qmd dirty watcher state

This commit is contained in:
Peter Steinberger
2026-04-27 14:19:59 +01:00
parent 28f264034b
commit c3c8f25bab
3 changed files with 5 additions and 1 deletions

View File

@@ -59,6 +59,7 @@ Docs: https://docs.openclaw.ai
- Ollama/onboarding: de-dupe suggested bare local models against installed `:latest` tags and skip redundant pulls, so setup shows the installed model once and no longer says it is downloading an already available model. Fixes #68952. Thanks @tleyden.
- Memory-core/doctor: keep `doctor.memory.status` on the cached path by default and only run live embedding pings for explicit deep probes, preventing slow local embedding backends from blocking Gateway status checks. Fixes #71568. Thanks @apex-system.
- Memory/QMD: skip QMD vector status probes and embedding maintenance in lexical `searchMode: "search"`, so BM25-only QMD setups on ARM do not trigger llama.cpp/Vulkan builds during status checks or embed cycles. Fixes #59234 and #67113. Thanks @PrinceOfEgypt, @Vksh07, @Snipe76, @NomLom, @t4r3e2q1-commits, and @dmak.
- Memory/QMD: report the live watcher dirty state in memory status, so changed QMD-backed memory files show as dirty until the queued sync finishes. Fixes #60244. Thanks @xinzf.
- Compaction: skip oversized pre-compaction checkpoint snapshots and prune duplicate long user turns from compaction input and rotated successor transcripts, preventing retry storms from being preserved across checkpoint cycles. Fixes #72780. Thanks @SweetSophia.
- Control UI/Cron: render cron job prompts and run summaries as sanitized markdown in the dashboard, with full-width block content, safer link clicks, and no duplicate error text when a failed run has no summary. Supersedes #48504. Thanks @garethdaine.
- Control UI/Gateway: preserve WebChat client version labels across localhost, 127.0.0.1, and IPv6 loopback aliases on the same port, avoiding misleading `vcontrol-ui` connection logs while investigating duplicate-message reports. Refs #72753 and #72742. Thanks @LumenFromTheFuture and @allesgutefy.

View File

@@ -434,10 +434,13 @@ describe("QmdMemoryManager", () => {
expect(initialUpdateCalls).toHaveLength(0);
watcher.emit("change", path.join(workspaceDir, "notes.md"));
expect(manager.status().dirty).toBe(true);
await vi.advanceTimersByTimeAsync(25);
const updateCalls = spawnMock.mock.calls.filter((call) => call[1]?.[0] === "update");
expect(updateCalls).toHaveLength(1);
expect(manager.status().dirty).toBe(false);
await manager.close();
});

View File

@@ -1324,7 +1324,7 @@ export class QmdMemoryManager implements MemorySearchManager {
requestedProvider: "qmd",
files: counts.totalDocuments,
chunks: counts.totalDocuments,
dirty: false,
dirty: this.dirty,
workspaceDir: this.workspaceDir,
dbPath: this.indexPath,
sources: Array.from(this.sources),