diff --git a/src/resources/extensions/sf/auto.js b/src/resources/extensions/sf/auto.js index b36700c9f..33e65a481 100644 --- a/src/resources/extensions/sf/auto.js +++ b/src/resources/extensions/sf/auto.js @@ -688,7 +688,7 @@ function handleLostSessionLock(ctx, lockStatus) { : `Session lock lost (${lockFilePath}). Stopping gracefully.${recoverySuggestion}`; ctx?.ui.notify(message, "error"); ctx?.ui.setStatus("sf-auto", undefined); - ctx?.ui?.setWidget?.("sf-progress", undefined); + safeSetWidget(ctx, "sf-progress", undefined); ctx?.ui.setFooter(undefined); if (ctx) initHealthWidget(ctx); } @@ -1069,7 +1069,7 @@ export async function stopAuto(ctx, pi, reason) { resetProactiveHealing(); // UI cleanup ctx?.ui.setStatus("sf-auto", undefined); - ctx?.ui?.setWidget?.("sf-progress", undefined); + safeSetWidget(ctx, "sf-progress", undefined); ctx?.ui.setFooter(undefined); if (ctx) initHealthWidget(ctx); restoreProjectRootEnv(); @@ -1219,7 +1219,7 @@ export async function pauseAuto(ctx, _pi, _errorContext) { s.pendingVerificationRetry = null; s.verificationRetryCount.clear(); ctx?.ui.setStatus("sf-auto", "paused"); - ctx?.ui?.setWidget?.("sf-progress", undefined); + safeSetWidget(ctx, "sf-progress", undefined); ctx?.ui.setFooter(undefined); if (ctx) initHealthWidget(ctx); const resumeCmd = s.stepMode ? "/next" : "/autonomous"; diff --git a/src/resources/extensions/sf/tests/widget-safe.test.mjs b/src/resources/extensions/sf/tests/widget-safe.test.mjs index c9bd23b71..f7ee44d1d 100644 --- a/src/resources/extensions/sf/tests/widget-safe.test.mjs +++ b/src/resources/extensions/sf/tests/widget-safe.test.mjs @@ -1,3 +1,5 @@ +import { readFileSync } from "node:fs"; +import { join } from "node:path"; import { describe, expect, it, vi } from "vitest"; import { safeSetWidget } from "../widget-safe.js"; @@ -33,4 +35,14 @@ describe("safeSetWidget", () => { placement: "belowEditor", }); }); + + it("auto_runtime_uses_safeSetWidget_for_progress_widget_cleanup", () => { + const autoSource = readFileSync( + join(process.cwd(), "src/resources/extensions/sf/auto.js"), + "utf8", + ); + + expect(autoSource).not.toMatch(/\.setWidget\?\.\(/); + expect(autoSource).not.toMatch(/\.setWidget\(/); + }); });