diff --git a/src/agents/tools/pdf-tool.model-config.test.ts b/src/agents/tools/pdf-tool.model-config.test.ts index 0184812aa610..bc9ce246dc2d 100644 --- a/src/agents/tools/pdf-tool.model-config.test.ts +++ b/src/agents/tools/pdf-tool.model-config.test.ts @@ -180,7 +180,7 @@ describe("resolvePdfModelConfigForTool", () => { } as OpenClawConfig; expect(resolvePdfModelConfigForTool({ cfg, agentDir: TEST_AGENT_DIR })).toEqual({ - primary: "openai/gpt-5.4-mini", + primary: "openai/gpt-5.5", fallbacks: ["minimax/MiniMax-M2.7", "minimax-portal/MiniMax-M2.7"], }); }); diff --git a/src/auto-reply/heartbeat.ts b/src/auto-reply/heartbeat.ts index 9e2e66abc7ff..93924d5b040e 100644 --- a/src/auto-reply/heartbeat.ts +++ b/src/auto-reply/heartbeat.ts @@ -31,6 +31,7 @@ export const DEFAULT_HEARTBEAT_ACK_MAX_CHARS = 300; * A file is considered effectively empty if it contains only: * - Whitespace / empty lines * - Markdown ATX headers (`#`, `##`, ...) + * - One-line HTML comments (``) * - Markdown fence markers such as ``` or ```markdown * - Empty list item stubs (`- `, `- [ ]`, `* `, `+ `) * @@ -58,6 +59,9 @@ export function isHeartbeatContentEffectivelyEmpty(content: string | undefined | if (/^#+(\s|$)/.test(trimmed)) { continue; } + if (/^$/.test(trimmed)) { + continue; + } // Skip empty markdown list items like "- [ ]" or "* [ ]" or just "- " if (/^[-*+]\s*(\[[\sXx]?\]\s*)?$/.test(trimmed)) { continue; diff --git a/src/commands/doctor-heartbeat-template-repair.test.ts b/src/commands/doctor-heartbeat-template-repair.test.ts index bf0a3896ebdb..d96746ae725c 100644 --- a/src/commands/doctor-heartbeat-template-repair.test.ts +++ b/src/commands/doctor-heartbeat-template-repair.test.ts @@ -208,6 +208,8 @@ Add short tasks below the comments only when you want the agent to check somethi await expect(fs.readFile(heartbeatPath, "utf-8")).resolves.toBe( `${[ + "", + "", "# Keep this file empty (or with only comments) to skip heartbeat API calls.", "", "# Add tasks below when you want the agent to check something periodically.",