

























@@ -45,6 +45,27 @@ const MEMORY_SEARCH_RULE: LegacyConfigRule = {
4545'top-level memorySearch was moved; use agents.defaults.memorySearch instead. Run "openclaw doctor --fix".',
4646};
474748+const LEGACY_MEMORY_SEARCH_AUTO_PROVIDER_RULES: LegacyConfigRule[] = [
49+{
50+path: ["memorySearch", "provider"],
51+message:
52+'memorySearch.provider = "auto" is legacy; use "openai" explicitly. Run "openclaw doctor --fix".',
53+match: isLegacyMemorySearchAutoProvider,
54+},
55+{
56+path: ["agents", "defaults", "memorySearch", "provider"],
57+message:
58+'agents.defaults.memorySearch.provider = "auto" is legacy; use "openai" explicitly. Run "openclaw doctor --fix".',
59+match: isLegacyMemorySearchAutoProvider,
60+},
61+{
62+path: ["agents", "list"],
63+message:
64+'agents.list[].memorySearch.provider = "auto" is legacy; use "openai" explicitly. Run "openclaw doctor --fix".',
65+match: hasAgentListLegacyMemorySearchAutoProvider,
66+},
67+];
68+4869const HEARTBEAT_RULE: LegacyConfigRule = {
4970path: ["heartbeat"],
5071message:
@@ -335,6 +356,31 @@ function migrateLegacyEmbeddedAgentKey(
335356delete container.embeddedPi;
336357}
337358359+function isLegacyMemorySearchAutoProvider(value: unknown): boolean {
360+return typeof value === "string" && value.trim().toLowerCase() === "auto";
361+}
362+363+function hasAgentListLegacyMemorySearchAutoProvider(value: unknown): boolean {
364+if (!Array.isArray(value)) {
365+return false;
366+}
367+return value.some((agent) =>
368+isLegacyMemorySearchAutoProvider(getRecord(getRecord(agent)?.memorySearch)?.provider),
369+);
370+}
371+372+function rewriteLegacyMemorySearchAutoProvider(
373+memorySearch: Record<string, unknown> | null,
374+pathLabel: string,
375+changes: string[],
376+): void {
377+if (!memorySearch || !isLegacyMemorySearchAutoProvider(memorySearch.provider)) {
378+return;
379+}
380+memorySearch.provider = "openai";
381+changes.push(`Moved ${pathLabel}.provider from legacy "auto" to "openai".`);
382+}
383+338384function migrateLegacySandboxPerSession(
339385sandbox: Record<string, unknown>,
340386pathLabel: string,
@@ -1245,6 +1291,30 @@ export const LEGACY_CONFIG_MIGRATIONS_RUNTIME_AGENTS: LegacyConfigMigrationSpec[
12451291delete raw.memorySearch;
12461292},
12471293}),
1294+defineLegacyConfigMigration({
1295+id: "memorySearch.provider-auto->openai",
1296+describe: 'Rewrite legacy memorySearch provider "auto" to "openai"',
1297+legacyRules: LEGACY_MEMORY_SEARCH_AUTO_PROVIDER_RULES,
1298+apply: (raw, changes) => {
1299+const agents = getRecord(raw.agents);
1300+rewriteLegacyMemorySearchAutoProvider(
1301+getRecord(getRecord(agents?.defaults)?.memorySearch),
1302+"agents.defaults.memorySearch",
1303+changes,
1304+);
1305+1306+if (!Array.isArray(agents?.list)) {
1307+return;
1308+}
1309+for (const [index, agent] of agents.list.entries()) {
1310+rewriteLegacyMemorySearchAutoProvider(
1311+getRecord(getRecord(agent)?.memorySearch),
1312+`agents.list.${index}.memorySearch`,
1313+changes,
1314+);
1315+}
1316+},
1317+}),
12481318defineLegacyConfigMigration({
12491319id: "heartbeat->agents.defaults.heartbeat",
12501320describe: "Move top-level heartbeat to agents.defaults.heartbeat/channels.defaults.heartbeat",
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。