fix(cli): load memory plugin for doctor/status when registry is cold#76393
Conversation
|
Codex review: passed. Summary Reproducibility: yes. source-reproducible: current main's doctor/status path reads getMemoryRuntime after only checking an already-loaded registry, while memory-core registers that runtime only during plugin activation. I did not run a live macOS LaunchAgent reproduction. Next step before merge Security Review detailsBest possible solution: Land the scoped standalone runtime fallback once exact-head checks pass, and keep broader memory CLI/runtime consolidation as a separate follow-up if maintainers still want it. Do we have a high-confidence way to reproduce the issue? Yes, source-reproducible: current main's doctor/status path reads getMemoryRuntime after only checking an already-loaded registry, while memory-core registers that runtime only during plugin activation. I did not run a live macOS LaunchAgent reproduction. Is this the best way to solve the issue? Yes. The PR preserves the existing fast path and uses the existing standalone runtime loader scoped to only the selected memory-slot plugin, which is the narrow maintainable fix for the reported diagnostic mismatch. What I checked:
Likely related people:
Remaining risk / open question:
Codex review notes: model gpt-5.5, reasoning high; reviewed against 39bc94e4ddf5. |
|
Re: [P3] changelog attribution ( |
|
@clawsweeper auto merge |
|
@clawsweeper automerge |
|
🦞🦞 Source: What merged:
Automerge notes:
The automerge loop is complete. Automerge progress:
|
|
🦞🦞 Source: I added |
a23d0b5 to
62a49d1
Compare
Standalone doctor and status called resolveActiveMemoryBackendConfig without ever loading the configured memory-slot plugin, so getMemoryRuntime stayed empty while memory search CLI still worked. Fall back to ensureStandaloneRuntimePluginRegistryLoaded with the slot plugin id and resolved workspace when the active registry does not yet expose memory. Fixes openclaw#76367. Co-authored-by: Cursor <cursoragent@cursor.com>
62a49d1 to
a6a1967
Compare
…penclaw#76393) Summary: - The PR adds a scoped standalone memory-slot plugin load for doctor/status memory resolution, updates memory-runtime regression tests, and adds a changelog fix entry. - Reproducibility: yes. source-reproducible: current main's doctor/status path reads getMemoryRuntime after on ... registers that runtime only during plugin activation. I did not run a live macOS LaunchAgent reproduction. Automerge notes: - PR branch already contained follow-up commit before automerge: fix(cli): load memory plugin for doctor/status when registry is cold Validation: - ClawSweeper review passed for head a6a1967. - Required merge gates passed before the squash merge. Prepared head SHA: a6a1967 Review: openclaw#76393 (comment) Co-authored-by: Neerav Makwana <261249544+neeravmakwana@users.noreply.github.com> Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com>
…penclaw#76393) Summary: - The PR adds a scoped standalone memory-slot plugin load for doctor/status memory resolution, updates memory-runtime regression tests, and adds a changelog fix entry. - Reproducibility: yes. source-reproducible: current main's doctor/status path reads getMemoryRuntime after on ... registers that runtime only during plugin activation. I did not run a live macOS LaunchAgent reproduction. Automerge notes: - PR branch already contained follow-up commit before automerge: fix(cli): load memory plugin for doctor/status when registry is cold Validation: - ClawSweeper review passed for head a6a1967. - Required merge gates passed before the squash merge. Prepared head SHA: a6a1967 Review: openclaw#76393 (comment) Co-authored-by: Neerav Makwana <261249544+neeravmakwana@users.noreply.github.com> Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com>
…(#76393) Summary: - The PR adds a scoped standalone memory-slot plugin load for doctor/status memory resolution, updates memory-runtime regression tests, and adds a changelog fix entry. - Reproducibility: yes. source-reproducible: current main's doctor/status path reads getMemoryRuntime after on ... registers that runtime only during plugin activation. I did not run a live macOS LaunchAgent reproduction. Automerge notes: - PR branch already contained follow-up commit before automerge: fix(cli): load memory plugin for doctor/status when registry is cold Validation: - ClawSweeper review passed for head a6a19673166735a59aad64e5c485e3263cda2603. - Required merge gates passed before the squash merge. Prepared head SHA: a6a19673166735a59aad64e5c485e3263cda2603 Review: openclaw/openclaw#76393 (comment) Co-authored-by: Neerav Makwana <261249544+neeravmakwana@users.noreply.github.com> Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com>
…(#76393) Summary: - The PR adds a scoped standalone memory-slot plugin load for doctor/status memory resolution, updates memory-runtime regression tests, and adds a changelog fix entry. - Reproducibility: yes. source-reproducible: current main's doctor/status path reads getMemoryRuntime after on ... registers that runtime only during plugin activation. I did not run a live macOS LaunchAgent reproduction. Automerge notes: - PR branch already contained follow-up commit before automerge: fix(cli): load memory plugin for doctor/status when registry is cold Validation: - ClawSweeper review passed for head a6a19673166735a59aad64e5c485e3263cda2603. - Required merge gates passed before the squash merge. Prepared head SHA: a6a19673166735a59aad64e5c485e3263cda2603 Review: openclaw/openclaw#76393 (comment) Co-authored-by: Neerav Makwana <261249544+neeravmakwana@users.noreply.github.com> Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com>
…(#76393) Summary: - The PR adds a scoped standalone memory-slot plugin load for doctor/status memory resolution, updates memory-runtime regression tests, and adds a changelog fix entry. - Reproducibility: yes. source-reproducible: current main's doctor/status path reads getMemoryRuntime after on ... registers that runtime only during plugin activation. I did not run a live macOS LaunchAgent reproduction. Automerge notes: - PR branch already contained follow-up commit before automerge: fix(cli): load memory plugin for doctor/status when registry is cold Validation: - ClawSweeper review passed for head a6a19673166735a59aad64e5c485e3263cda2603. - Required merge gates passed before the squash merge. Prepared head SHA: a6a19673166735a59aad64e5c485e3263cda2603 Review: openclaw/openclaw#76393 (comment) Co-authored-by: Neerav Makwana <261249544+neeravmakwana@users.noreply.github.com> Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com>
…penclaw#76393) Summary: - The PR adds a scoped standalone memory-slot plugin load for doctor/status memory resolution, updates memory-runtime regression tests, and adds a changelog fix entry. - Reproducibility: yes. source-reproducible: current main's doctor/status path reads getMemoryRuntime after on ... registers that runtime only during plugin activation. I did not run a live macOS LaunchAgent reproduction. Automerge notes: - PR branch already contained follow-up commit before automerge: fix(cli): load memory plugin for doctor/status when registry is cold Validation: - ClawSweeper review passed for head a6a1967. - Required merge gates passed before the squash merge. Prepared head SHA: a6a1967 Review: openclaw#76393 (comment) Co-authored-by: Neerav Makwana <261249544+neeravmakwana@users.noreply.github.com> Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com>
…penclaw#76393) Summary: - The PR adds a scoped standalone memory-slot plugin load for doctor/status memory resolution, updates memory-runtime regression tests, and adds a changelog fix entry. - Reproducibility: yes. source-reproducible: current main's doctor/status path reads getMemoryRuntime after on ... registers that runtime only during plugin activation. I did not run a live macOS LaunchAgent reproduction. Automerge notes: - PR branch already contained follow-up commit before automerge: fix(cli): load memory plugin for doctor/status when registry is cold Validation: - ClawSweeper review passed for head a6a1967. - Required merge gates passed before the squash merge. Prepared head SHA: a6a1967 Review: openclaw#76393 (comment) Co-authored-by: Neerav Makwana <261249544+neeravmakwana@users.noreply.github.com> Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com>
…penclaw#76393) Summary: - The PR adds a scoped standalone memory-slot plugin load for doctor/status memory resolution, updates memory-runtime regression tests, and adds a changelog fix entry. - Reproducibility: yes. source-reproducible: current main's doctor/status path reads getMemoryRuntime after on ... registers that runtime only during plugin activation. I did not run a live macOS LaunchAgent reproduction. Automerge notes: - PR branch already contained follow-up commit before automerge: fix(cli): load memory plugin for doctor/status when registry is cold Validation: - ClawSweeper review passed for head a6a1967. - Required merge gates passed before the squash merge. Prepared head SHA: a6a1967 Review: openclaw#76393 (comment) Co-authored-by: Neerav Makwana <261249544+neeravmakwana@users.noreply.github.com> Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com>
Summary
Ensures
resolveActiveMemoryBackendConfig/getActiveMemorySearchManagerload the configured memory-slot plugin in standalone CLI processes (e.g.openclaw doctor,openclaw status) when no gateway has already activated the plugin registry.Root cause
Those entrypoints rely on
getMemoryRuntime(), which is populated when a memory plugin registers its runtime during plugin activation. They only calledgetLoadedRuntimePluginRegistry, which checks for an existing active registry and does not load plugins. Theopenclaw memoryCLI uses memory-core’s in-package search manager and does not depend on that global registration path, so operators saw workingmemory searchplus false “no active memory plugin” diagnostics from doctor / null memory in status JSON.Linked issue
Fixes #76367.
Why this is safe
ensureStandaloneRuntimePluginRegistryLoaded+loadOpenClawPluginspath used elsewhere for minimal plugin loads (onlyPluginIds= slot id,config+ resolved default-agent workspace).Security / runtime controls (unchanged)
loadOpenClawPlugins.Testing
pnpm vitest run src/plugins/memory-runtime.test.ts --reporter=dotpnpm vitest run src/commands/doctor-memory-search.test.ts --reporter=dotpnpm check:changedAI-assisted
Per project guidance: this change was developed with AI assistance; behavior was verified via the tests and checks above.
Out of scope / follow-ups
Made with Cursor