From 413ef0258be99cad608eea5d1fe6245bed78f3f7 Mon Sep 17 00:00:00 2001 From: Mohamed Boudra Date: Fri, 24 Apr 2026 03:40:11 +0700 Subject: [PATCH] chore(lint): promise/always-return in app --- packages/app/e2e/helpers/terminal-probes.ts | 2 ++ packages/app/src/app/_layout.tsx | 5 +++++ packages/app/src/app/h/[serverId]/agent/[agentId].tsx | 1 + packages/app/src/components/file-explorer-pane.tsx | 1 + packages/app/src/components/git-diff-pane.tsx | 8 ++++++++ packages/app/src/components/message-input.tsx | 1 + packages/app/src/components/sidebar-workspace-list.tsx | 1 + packages/app/src/components/ui/context-menu.tsx | 1 + packages/app/src/components/ui/dropdown-menu.tsx | 1 + packages/app/src/components/ui/tooltip.tsx | 1 + packages/app/src/components/workspace-hover-card.tsx | 1 + packages/app/src/contexts/sidebar-callout-context.tsx | 1 + .../src/desktop/components/desktop-updates-section.tsx | 7 +++++++ .../app/src/desktop/daemon/desktop-daemon-transport.ts | 2 ++ packages/app/src/hooks/use-checkout-diff-query.ts | 1 + packages/app/src/hooks/use-file-drop-zone.ts | 1 + packages/app/src/hooks/use-git-actions.ts | 8 ++++++++ packages/app/src/panels/agent-panel.tsx | 2 ++ packages/app/src/panels/setup-panel.tsx | 1 + packages/app/src/screens/settings-screen.tsx | 1 + packages/app/src/screens/settings/host-page.tsx | 2 ++ packages/app/src/screens/startup-splash-screen.tsx | 1 + packages/app/src/screens/workspace/workspace-screen.tsx | 1 + .../app/src/terminal/runtime/terminal-emulator-runtime.ts | 2 ++ .../src/terminal/runtime/terminal-stream-controller.ts | 1 + packages/app/src/utils/test-daemon-connection.ts | 1 + 26 files changed, 55 insertions(+) diff --git a/packages/app/e2e/helpers/terminal-probes.ts b/packages/app/e2e/helpers/terminal-probes.ts index 2281b8118..f8ce6be13 100644 --- a/packages/app/e2e/helpers/terminal-probes.ts +++ b/packages/app/e2e/helpers/terminal-probes.ts @@ -592,6 +592,7 @@ export async function installTerminalKeystrokeStressProbe(page: Page): Promise { if (text === null) { @@ -602,6 +603,7 @@ export async function installTerminalKeystrokeStressProbe(page: Page): Promise { @@ -681,6 +683,7 @@ function OfferLinkListener({ const serverId = (profile as any)?.serverId; if (typeof serverId !== "string" || !serverId) return; router.replace(buildHostRootRoute(serverId)); + return; }) .catch((error) => { if (cancelled) return; @@ -752,6 +755,7 @@ function OpenProjectListener() { if (!disposed && pending) { maybeOpenProject(pending); } + return; }) .catch(() => undefined); @@ -769,6 +773,7 @@ function OpenProjectListener() { return; } unlisten = dispose; + return; }) .catch(() => undefined); diff --git a/packages/app/src/app/h/[serverId]/agent/[agentId].tsx b/packages/app/src/app/h/[serverId]/agent/[agentId].tsx index 343466715..231b8bb0f 100644 --- a/packages/app/src/app/h/[serverId]/agent/[agentId].tsx +++ b/packages/app/src/app/h/[serverId]/agent/[agentId].tsx @@ -112,6 +112,7 @@ function HostAgentReadyRouteContent() { return; } router.replace(buildHostRootRoute(serverId)); + return; }) .catch(() => { if (cancelled || redirectedRef.current) { diff --git a/packages/app/src/components/file-explorer-pane.tsx b/packages/app/src/components/file-explorer-pane.tsx index 45024ba68..82c978612 100644 --- a/packages/app/src/components/file-explorer-pane.tsx +++ b/packages/app/src/components/file-explorer-pane.tsx @@ -328,6 +328,7 @@ export function FileExplorerPane({ } } } + return; }); }, [hasWorkspaceScope, requestDirectoryListing, workspaceStateKey]); diff --git a/packages/app/src/components/git-diff-pane.tsx b/packages/app/src/components/git-diff-pane.tsx index 78ef3e4c7..0653e570b 100644 --- a/packages/app/src/components/git-diff-pane.tsx +++ b/packages/app/src/components/git-diff-pane.tsx @@ -895,6 +895,7 @@ export function GitDiffPane({ serverId, workspaceId, cwd, hideHeaderRow }: GitDi if (value === "pr" || value === "merge") { setShipDefault(value); } + return; }) .catch(() => undefined); return () => { @@ -1093,6 +1094,7 @@ export function GitDiffPane({ serverId, workspaceId, cwd, hideHeaderRow }: GitDi void runCommit({ serverId, cwd }) .then(() => { toastActionSuccess("Committed"); + return; }) .catch((err) => { toastActionError(err, "Failed to commit"); @@ -1103,6 +1105,7 @@ export function GitDiffPane({ serverId, workspaceId, cwd, hideHeaderRow }: GitDi void runPull({ serverId, cwd }) .then(() => { toastActionSuccess("Pulled"); + return; }) .catch((err) => { toastActionError(err, "Failed to pull"); @@ -1113,6 +1116,7 @@ export function GitDiffPane({ serverId, workspaceId, cwd, hideHeaderRow }: GitDi void runPush({ serverId, cwd }) .then(() => { toastActionSuccess("Pushed"); + return; }) .catch((err) => { toastActionError(err, "Failed to push"); @@ -1124,6 +1128,7 @@ export function GitDiffPane({ serverId, workspaceId, cwd, hideHeaderRow }: GitDi void runCreatePr({ serverId, cwd }) .then(() => { toastActionSuccess("PR created"); + return; }) .catch((err) => { toastActionError(err, "Failed to create PR"); @@ -1140,6 +1145,7 @@ export function GitDiffPane({ serverId, workspaceId, cwd, hideHeaderRow }: GitDi .then(() => { setPostShipArchiveSuggested(true); toastActionSuccess("Merged"); + return; }) .catch((err) => { toastActionError(err, "Failed to merge"); @@ -1163,6 +1169,7 @@ export function GitDiffPane({ serverId, workspaceId, cwd, hideHeaderRow }: GitDi void runMergeFromBase({ serverId, cwd, baseRef }) .then(() => { toastActionSuccess("Updated"); + return; }) .catch((err) => { toastActionError(err, "Failed to merge from base"); @@ -1179,6 +1186,7 @@ export function GitDiffPane({ serverId, workspaceId, cwd, hideHeaderRow }: GitDi void runArchiveWorktree({ serverId, cwd, worktreePath }) .then(() => { router.replace(buildNewAgentRoute(serverId, targetWorkingDir)); + return; }) .catch((err) => { toastActionError(err, "Failed to archive worktree"); diff --git a/packages/app/src/components/message-input.tsx b/packages/app/src/components/message-input.tsx index f750d5250..7cd2b8130 100644 --- a/packages/app/src/components/message-input.tsx +++ b/packages/app/src/components/message-input.tsx @@ -715,6 +715,7 @@ export const MessageInput = forwardRef(funct return; } onAddImages(attachments); + return; }) .catch((error) => { console.error("[MessageInput] Failed to process pasted images:", error); diff --git a/packages/app/src/components/sidebar-workspace-list.tsx b/packages/app/src/components/sidebar-workspace-list.tsx index ee530ac01..3595d2d16 100644 --- a/packages/app/src/components/sidebar-workspace-list.tsx +++ b/packages/app/src/components/sidebar-workspace-list.tsx @@ -1908,6 +1908,7 @@ function ProjectBlock({ toast.error("Failed to remove some workspaces"); } setIsRemovingProject(false); + return; }); })(); }, [isRemovingProject, serverId, displayName, toast, project.workspaces]); diff --git a/packages/app/src/components/ui/context-menu.tsx b/packages/app/src/components/ui/context-menu.tsx index f46f1688c..1deb9b3e3 100644 --- a/packages/app/src/components/ui/context-menu.tsx +++ b/packages/app/src/components/ui/context-menu.tsx @@ -452,6 +452,7 @@ export function ContextMenuContent({ ...rect, y: rect.y + statusBarHeight, }); + return; }); return () => { diff --git a/packages/app/src/components/ui/dropdown-menu.tsx b/packages/app/src/components/ui/dropdown-menu.tsx index 34e4b2c79..6a64ec001 100644 --- a/packages/app/src/components/ui/dropdown-menu.tsx +++ b/packages/app/src/components/ui/dropdown-menu.tsx @@ -379,6 +379,7 @@ export function DropdownMenuContent({ ...rect, y: rect.y + statusBarHeight, }); + return; }); return () => { diff --git a/packages/app/src/components/ui/tooltip.tsx b/packages/app/src/components/ui/tooltip.tsx index 2a8b7899a..1008bedcd 100644 --- a/packages/app/src/components/ui/tooltip.tsx +++ b/packages/app/src/components/ui/tooltip.tsx @@ -450,6 +450,7 @@ export function TooltipContent({ measureElement(ctx.triggerRef.current).then((rect) => { if (cancelled) return; setTriggerRect({ ...rect, y: rect.y + statusBarHeight }); + return; }); return () => { diff --git a/packages/app/src/components/workspace-hover-card.tsx b/packages/app/src/components/workspace-hover-card.tsx index b0eafae7e..be83c832b 100644 --- a/packages/app/src/components/workspace-hover-card.tsx +++ b/packages/app/src/components/workspace-hover-card.tsx @@ -221,6 +221,7 @@ function WorkspaceHoverCardContent({ measureElement(triggerRef.current).then((rect) => { if (cancelled) return; setTriggerRect(rect); + return; }); return () => { diff --git a/packages/app/src/contexts/sidebar-callout-context.tsx b/packages/app/src/contexts/sidebar-callout-context.tsx index 6f1a9dc66..4d09c96f5 100644 --- a/packages/app/src/contexts/sidebar-callout-context.tsx +++ b/packages/app/src/contexts/sidebar-callout-context.tsx @@ -118,6 +118,7 @@ export function SidebarCalloutProvider({ children }: { children: ReactNode }) { const nextKeys = parseDismissedCalloutKeys(value); dismissedKeysRef.current = nextKeys; setDismissedKeys(nextKeys); + return; }) .catch((error) => { console.error("[SidebarCallouts] Failed to load dismissed callouts", error); diff --git a/packages/app/src/desktop/components/desktop-updates-section.tsx b/packages/app/src/desktop/components/desktop-updates-section.tsx index 485f10808..ea83f0c44 100644 --- a/packages/app/src/desktop/components/desktop-updates-section.tsx +++ b/packages/app/src/desktop/components/desktop-updates-section.tsx @@ -82,6 +82,7 @@ export function LocalDaemonSection() { daemonStatus?.status === "running" ? "Daemon restarted." : "Daemon started.", ); refetch(); + return; }) .catch((error) => { console.error("[Settings] Failed to change desktop daemon state", error); @@ -91,6 +92,7 @@ export function LocalDaemonSection() { .finally(() => { setIsRestartingDaemon(false); }); + return; }) .catch((error) => { console.error("[Settings] Failed to open desktop daemon action confirmation", error); @@ -116,6 +118,7 @@ export function LocalDaemonSection() { void updateSettings({ manageBuiltInDaemon: true }) .then(() => { setStatusMessage("Built-in daemon management resumed."); + return; }) .catch((error) => { console.error("[Settings] Failed to update built-in daemon management", error); @@ -158,6 +161,7 @@ export function LocalDaemonSection() { .then(() => { refetch(); setStatusMessage("Built-in daemon paused and stopped."); + return; }) .catch((error) => { console.error("[Settings] Failed to pause built-in daemon management", error); @@ -166,6 +170,7 @@ export function LocalDaemonSection() { .finally(() => { setIsUpdatingDaemonManagement(false); }); + return; }) .catch((error) => { console.error("[Settings] Failed to open built-in daemon pause confirmation", error); @@ -189,6 +194,7 @@ export function LocalDaemonSection() { void Clipboard.setStringAsync(logPath) .then(() => { Alert.alert("Copied", "Log path copied."); + return; }) .catch((error) => { console.error("[Settings] Failed to copy log path", error); @@ -224,6 +230,7 @@ export function LocalDaemonSection() { void Clipboard.setStringAsync(cliStatusOutput) .then(() => { Alert.alert("Copied", "Status copied to clipboard."); + return; }) .catch((error) => { console.error("[Settings] Failed to copy daemon status", error); diff --git a/packages/app/src/desktop/daemon/desktop-daemon-transport.ts b/packages/app/src/desktop/daemon/desktop-daemon-transport.ts index ded938b64..46a98bcea 100644 --- a/packages/app/src/desktop/daemon/desktop-daemon-transport.ts +++ b/packages/app/src/desktop/daemon/desktop-daemon-transport.ts @@ -117,6 +117,7 @@ export function createDesktopLocalDaemonTransportFactory(): DaemonTransportFacto return; } unlisten = cleanup; + return; }) .catch((error) => { emitError(error); @@ -130,6 +131,7 @@ export function createDesktopLocalDaemonTransportFactory(): DaemonTransportFacto } sessionId = id; emitOpen(); + return; }) .catch((error) => { emitError(error); diff --git a/packages/app/src/hooks/use-checkout-diff-query.ts b/packages/app/src/hooks/use-checkout-diff-query.ts index e2673f619..bd5c431b7 100644 --- a/packages/app/src/hooks/use-checkout-diff-query.ts +++ b/packages/app/src/hooks/use-checkout-diff-query.ts @@ -145,6 +145,7 @@ export function useCheckoutDiffQuery({ error: payload.error, requestId: payload.requestId, }); + return; }) .catch((error) => { if (cancelled) { diff --git a/packages/app/src/hooks/use-file-drop-zone.ts b/packages/app/src/hooks/use-file-drop-zone.ts index cb6cfb004..23ebfc69b 100644 --- a/packages/app/src/hooks/use-file-drop-zone.ts +++ b/packages/app/src/hooks/use-file-drop-zone.ts @@ -167,6 +167,7 @@ export function useFileDropZone({ return; } onFilesDroppedRef.current(attachments); + return; }) .catch((error) => { console.error("[useFileDropZone] Failed to persist dropped files:", error); diff --git a/packages/app/src/hooks/use-git-actions.ts b/packages/app/src/hooks/use-git-actions.ts index 9d6bd3d1d..c70b6c093 100644 --- a/packages/app/src/hooks/use-git-actions.ts +++ b/packages/app/src/hooks/use-git-actions.ts @@ -75,6 +75,7 @@ export function useGitActions({ serverId, cwd, icons }: UseGitActionsInput): Use if (value === "pr" || value === "merge") { setShipDefault(value); } + return; }) .catch(() => undefined); return () => { @@ -150,6 +151,7 @@ export function useGitActions({ serverId, cwd, icons }: UseGitActionsInput): Use void runCommit({ serverId, cwd }) .then(() => { toastActionSuccess("Committed"); + return; }) .catch((err) => { toastActionError(err, "Failed to commit"); @@ -160,6 +162,7 @@ export function useGitActions({ serverId, cwd, icons }: UseGitActionsInput): Use void runPull({ serverId, cwd }) .then(() => { toastActionSuccess("Pulled"); + return; }) .catch((err) => { toastActionError(err, "Failed to pull"); @@ -170,6 +173,7 @@ export function useGitActions({ serverId, cwd, icons }: UseGitActionsInput): Use void runPush({ serverId, cwd }) .then(() => { toastActionSuccess("Pushed"); + return; }) .catch((err) => { toastActionError(err, "Failed to push"); @@ -181,6 +185,7 @@ export function useGitActions({ serverId, cwd, icons }: UseGitActionsInput): Use void runCreatePr({ serverId, cwd }) .then(() => { toastActionSuccess("PR created"); + return; }) .catch((err) => { toastActionError(err, "Failed to create PR"); @@ -197,6 +202,7 @@ export function useGitActions({ serverId, cwd, icons }: UseGitActionsInput): Use .then(() => { setPostShipArchiveSuggested(true); toastActionSuccess("Merged"); + return; }) .catch((err) => { toastActionError(err, "Failed to merge"); @@ -220,6 +226,7 @@ export function useGitActions({ serverId, cwd, icons }: UseGitActionsInput): Use void runMergeFromBase({ serverId, cwd, baseRef }) .then(() => { toastActionSuccess("Updated"); + return; }) .catch((err) => { toastActionError(err, "Failed to merge from base"); @@ -236,6 +243,7 @@ export function useGitActions({ serverId, cwd, icons }: UseGitActionsInput): Use void runArchiveWorktree({ serverId, cwd, worktreePath }) .then(() => { router.replace(buildNewAgentRoute(serverId, targetWorkingDir)); + return; }) .catch((err) => { toastActionError(err, "Failed to archive worktree"); diff --git a/packages/app/src/panels/agent-panel.tsx b/packages/app/src/panels/agent-panel.tsx index 3a71d91f6..defb3b4a9 100644 --- a/packages/app/src/panels/agent-panel.tsx +++ b/packages/app/src/panels/agent-panel.tsx @@ -388,6 +388,7 @@ function AgentPanelBody({ storeFetchedAgentDetail({ serverId, result }); setLookupState({ tag: "idle" }); + return; }) .catch((error) => { if (attemptToken !== lookupAttemptTokenRef.current) { @@ -834,6 +835,7 @@ function ChatAgentContent({ return; } setMissingAgentState({ kind: "idle" }); + return; }) .catch((error) => { if (attemptToken !== initAttemptTokenRef.current) { diff --git a/packages/app/src/panels/setup-panel.tsx b/packages/app/src/panels/setup-panel.tsx index 149c56593..c62652ce7 100644 --- a/packages/app/src/panels/setup-panel.tsx +++ b/packages/app/src/panels/setup-panel.tsx @@ -125,6 +125,7 @@ function SetupPanel() { payload: { workspaceId: response.workspaceId, ...response.snapshot }, }); } + return; }) .catch(() => { // Server may not support this yet — ignore diff --git a/packages/app/src/screens/settings-screen.tsx b/packages/app/src/screens/settings-screen.tsx index 5b2cb09ac..ce6094ba7 100644 --- a/packages/app/src/screens/settings-screen.tsx +++ b/packages/app/src/screens/settings-screen.tsx @@ -397,6 +397,7 @@ function DesktopAppUpdateRow() { return; } void installUpdate(); + return; }) .catch((error) => { console.error("[Settings] Failed to open app update confirmation", error); diff --git a/packages/app/src/screens/settings/host-page.tsx b/packages/app/src/screens/settings/host-page.tsx index 0e8ac199d..927d506c7 100644 --- a/packages/app/src/screens/settings/host-page.tsx +++ b/packages/app/src/screens/settings/host-page.tsx @@ -563,6 +563,7 @@ function RestartDaemonCard({ host }: { host: HostProfile }) { ); }); void waitForDaemonRestart(); + return; }) .catch((error) => { console.error(`[HostPage] Failed to open restart confirmation for ${host.label}`, error); @@ -687,6 +688,7 @@ function RemoveHostSection({ host, onRemoved }: { host: HostProfile; onRemoved?: .then(() => { setIsConfirming(false); onRemoved?.(); + return; }) .catch((error) => { console.error("[HostPage] Failed to remove host", error); diff --git a/packages/app/src/screens/startup-splash-screen.tsx b/packages/app/src/screens/startup-splash-screen.tsx index 925a3b6dc..6ffdd5a05 100644 --- a/packages/app/src/screens/startup-splash-screen.tsx +++ b/packages/app/src/screens/startup-splash-screen.tsx @@ -208,6 +208,7 @@ export function StartupSplashScreen({ bootstrapState }: StartupSplashScreenProps return; } setDaemonLogs(logs); + return; }) .catch((error) => { if (isCancelled) { diff --git a/packages/app/src/screens/workspace/workspace-screen.tsx b/packages/app/src/screens/workspace/workspace-screen.tsx index f95255e1b..9ba566890 100644 --- a/packages/app/src/screens/workspace/workspace-screen.tsx +++ b/packages/app/src/screens/workspace/workspace-screen.tsx @@ -1281,6 +1281,7 @@ function WorkspaceScreenContent({ serverId: normalizedServerId, payload: { workspaceId: response.workspaceId, ...response.snapshot }, }); + return; }) .catch(() => { if (requestedWorkspaceSetupStatusKeyRef.current === persistenceKey) { diff --git a/packages/app/src/terminal/runtime/terminal-emulator-runtime.ts b/packages/app/src/terminal/runtime/terminal-emulator-runtime.ts index 65b36a436..6b0a49391 100644 --- a/packages/app/src/terminal/runtime/terminal-emulator-runtime.ts +++ b/packages/app/src/terminal/runtime/terminal-emulator-runtime.ts @@ -303,6 +303,7 @@ export class TerminalEmulatorRuntime { if (text) { terminal.paste(text); } + return; }); return false; } @@ -393,6 +394,7 @@ export class TerminalEmulatorRuntime { void fontSet?.ready .then(() => { fitAndEmitResize(true); + return; }) .catch(() => { // no-op diff --git a/packages/app/src/terminal/runtime/terminal-stream-controller.ts b/packages/app/src/terminal/runtime/terminal-stream-controller.ts index 1e42a7199..2573f4af2 100644 --- a/packages/app/src/terminal/runtime/terminal-stream-controller.ts +++ b/packages/app/src/terminal/runtime/terminal-stream-controller.ts @@ -107,6 +107,7 @@ export class TerminalStreamController { isAttaching: false, error: null, }); + return; }) .catch((error: unknown) => { if (this.disposed || this.terminalId !== nextTerminalId) { diff --git a/packages/app/src/utils/test-daemon-connection.ts b/packages/app/src/utils/test-daemon-connection.ts index 8d321856d..03c3e2a5c 100644 --- a/packages/app/src/utils/test-daemon-connection.ts +++ b/packages/app/src/utils/test-daemon-connection.ts @@ -135,6 +135,7 @@ export function connectAndProbe( serverId: serverInfo.serverId, hostname: serverInfo.hostname, }); + return; }) .catch((error) => { clearTimeout(timer);