From fa61699f9a7483f7dbe39ef416dc55c708252393 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 10 Jan 2026 22:52:09 +0100 Subject: [PATCH] fix: polish restart feedback + stabilize tests (#685) (thanks @carlulsoe) --- CHANGELOG.md | 1 + src/auto-reply/reply.ts | 1 - src/cli/update-cli.test.ts | 27 +++++++++++++++++++++++++ src/commands/sandbox-explain.test.ts | 2 +- src/discord/monitor.tool-result.test.ts | 2 +- 5 files changed, 30 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a9f30f7a3..96053c509 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ - Docker: allow optional home volume + extra bind mounts in `docker-setup.sh`. (#679) — thanks @gabriel-trigo. ### Fixes +- CLI: avoid success message when daemon restart is skipped. (#685) — thanks @carlulsoe. - macOS: stabilize bridge tunnels, guard invoke senders on disconnect, and drain stdout/stderr to avoid deadlocks. (#676) — thanks @ngutman. - Agents/System: clarify sandboxed runtime in system prompt and surface elevated availability when sandboxed. - Auto-reply: prefer `RawBody` for command/directive parsing (WhatsApp + Discord) and prevent fallback runs from clobbering concurrent session updates. (#643) — thanks @mcinteerj. diff --git a/src/auto-reply/reply.ts b/src/auto-reply/reply.ts index b8d8b9a66..6f9be3111 100644 --- a/src/auto-reply/reply.ts +++ b/src/auto-reply/reply.ts @@ -589,7 +589,6 @@ export async function getReplyFromConfig( (agentCfg?.elevatedDefault as ElevatedLevel | undefined) ?? "on") : "off"; - const providerKey = sessionCtx.Provider?.trim().toLowerCase(); const resolvedBlockStreaming = opts?.disableBlockStreaming === true ? "off" diff --git a/src/cli/update-cli.test.ts b/src/cli/update-cli.test.ts index a29d8b1ac..8a5f3296e 100644 --- a/src/cli/update-cli.test.ts +++ b/src/cli/update-cli.test.ts @@ -131,6 +131,33 @@ describe("update-cli", () => { expect(runDaemonRestart).toHaveBeenCalled(); }); + it("updateCommand skips success message when restart does not run", async () => { + const { runGatewayUpdate } = await import("../infra/update-runner.js"); + const { runDaemonRestart } = await import("./daemon-cli.js"); + const { defaultRuntime } = await import("../runtime.js"); + const { updateCommand } = await import("./update-cli.js"); + + const mockResult: UpdateRunResult = { + status: "ok", + mode: "git", + steps: [], + durationMs: 100, + }; + + vi.mocked(runGatewayUpdate).mockResolvedValue(mockResult); + vi.mocked(runDaemonRestart).mockResolvedValue(false); + vi.mocked(defaultRuntime.log).mockClear(); + + await updateCommand({ restart: true }); + + const logLines = vi + .mocked(defaultRuntime.log) + .mock.calls.map((call) => String(call[0])); + expect( + logLines.some((line) => line.includes("Daemon restarted successfully.")), + ).toBe(false); + }); + it("updateCommand validates timeout option", async () => { const { defaultRuntime } = await import("../runtime.js"); const { updateCommand } = await import("./update-cli.js"); diff --git a/src/commands/sandbox-explain.test.ts b/src/commands/sandbox-explain.test.ts index 3fec0f172..d3e5ea2ee 100644 --- a/src/commands/sandbox-explain.test.ts +++ b/src/commands/sandbox-explain.test.ts @@ -42,5 +42,5 @@ describe("sandbox explain command", () => { expect(Array.isArray(parsed.fixIt)).toBe(true); expect(parsed.fixIt).toContain("agents.defaults.sandbox.mode=off"); expect(parsed.fixIt).toContain("tools.sandbox.tools.deny"); - }); + }, 15_000); }); diff --git a/src/discord/monitor.tool-result.test.ts b/src/discord/monitor.tool-result.test.ts index 5963a4d2d..7c36dd37b 100644 --- a/src/discord/monitor.tool-result.test.ts +++ b/src/discord/monitor.tool-result.test.ts @@ -118,7 +118,7 @@ describe("discord tool result dispatch", () => { expect(runtimeError).not.toHaveBeenCalled(); expect(sendMock).toHaveBeenCalledTimes(1); expect(sendMock.mock.calls[0]?.[1]).toMatch(/^PFX /); - }, 10000); + }, 15_000); it("caches channel info lookups between messages", async () => { const { createDiscordMessageHandler } = await import("./monitor.js");