fix(openclaw): graceful startup without API key

Plugin no longer throws during register() when API key is missing.
Instead it registers successfully, logs a clear setup message with
the exact command to run, and disables memory features until configured.

Before: openclaw plugins install -> register() throws -> gateway logs error
After:  openclaw plugins install -> registers ok -> logs setup instructions

Users see:
  openclaw-mem0: API key not configured. Memory features are disabled.
  To set up, run:
  openclaw config set plugins.entries.openclaw-mem0.config.apiKey "m0-your-key"
  openclaw gateway restart

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
chaithanyak42
2026-04-02 15:25:13 +05:30
parent 7e9824e394
commit 5a5e201dd9
3 changed files with 25 additions and 8 deletions
+4 -8
View File
@@ -196,14 +196,9 @@ export const mem0ConfigSchema = {
const mode: Mem0Mode =
cfg.mode === "oss" || cfg.mode === "open-source" ? "open-source" : "platform";
// Platform mode requires apiKey
if (mode === "platform") {
if (typeof cfg.apiKey !== "string" || !cfg.apiKey) {
throw new Error(
"apiKey is required for platform mode (set mode: \"open-source\" for self-hosted)",
);
}
}
// Platform mode requires apiKey — but don't throw on missing config.
// The plugin should register successfully and log a setup message.
const needsSetup = mode === "platform" && (typeof cfg.apiKey !== "string" || !cfg.apiKey);
// Resolve env vars in oss config
let ossConfig: Mem0Config["oss"];
@@ -241,6 +236,7 @@ export const mem0ConfigSchema = {
searchThreshold:
typeof cfg.searchThreshold === "number" ? cfg.searchThreshold : 0.5,
topK: typeof cfg.topK === "number" ? cfg.topK : 5,
needsSetup,
oss: ossConfig,
skills:
cfg.skills && typeof cfg.skills === "object" && !Array.isArray(cfg.skills)
+19
View File
@@ -94,6 +94,25 @@ const memoryPlugin = {
register(api: OpenClawPluginApi) {
const cfg = mem0ConfigSchema.parse(api.pluginConfig);
// If API key is missing, register successfully but skip all memory operations.
// This prevents install from failing and gives the user a clear setup message.
if (cfg.needsSetup) {
api.logger.warn(
"openclaw-mem0: API key not configured. Memory features are disabled.\n" +
" To set up, run:\n" +
' openclaw config set plugins.entries.openclaw-mem0.config.apiKey "m0-your-key"\n' +
" openclaw gateway restart\n" +
" Get your key at: https://app.mem0.ai/dashboard/api-keys"
);
api.registerService({
id: "openclaw-mem0",
start: () => { api.logger.info("openclaw-mem0: waiting for API key configuration"); },
stop: () => {},
});
return;
}
const provider = createProvider(cfg, api);
// Track current session ID for tool-level session scoping.
+2
View File
@@ -28,6 +28,8 @@ export type Mem0Config = {
autoRecall: boolean;
searchThreshold: number;
topK: number;
// Setup state
needsSetup?: boolean;
// Agentic harness skills
skills?: SkillsConfig;
};