diff --git a/plugin/index.ts b/plugin/index.ts index a1d5bc8..0561df2 100644 --- a/plugin/index.ts +++ b/plugin/index.ts @@ -116,7 +116,17 @@ function getLivePluginConfig(api: OpenClawPluginApi, fallback: WhisperGateConfig const entries = (plugins.entries as Record) || {}; const entry = (entries.whispergate as Record) || {}; const cfg = (entry.config as Record) || {}; - if (Object.keys(cfg).length > 0) return cfg as unknown as WhisperGateConfig; + if (Object.keys(cfg).length > 0) { + // Merge with defaults to ensure optional fields have values + return { + enableDiscordControlTool: true, + enableWhispergatePolicyTool: true, + discordControlApiBaseUrl: "http://127.0.0.1:8790", + enableDebugLogs: false, + debugLogChannelIds: [], + ...cfg, + } as WhisperGateConfig; + } return fallback; } @@ -202,12 +212,18 @@ export default { id: "whispergate", name: "WhisperGate", register(api: OpenClawPluginApi) { - const baseConfig = (api.pluginConfig || {}) as WhisperGateConfig & { - enableDiscordControlTool?: boolean; - discordControlApiBaseUrl?: string; + // Merge pluginConfig with defaults (in case config is missing from openclaw.json) + const baseConfig = { + enableDiscordControlTool: true, + enableWhispergatePolicyTool: true, + discordControlApiBaseUrl: "http://127.0.0.1:8790", + ...(api.pluginConfig || {}), + } as WhisperGateConfig & { + enableDiscordControlTool: boolean; + discordControlApiBaseUrl: string; discordControlApiToken?: string; discordControlCallerId?: string; - enableWhispergatePolicyTool?: boolean; + enableWhispergatePolicyTool: boolean; }; const liveAtRegister = getLivePluginConfig(api, baseConfig as WhisperGateConfig);