Skip to content

Commit 178ee1b

Browse files
committed
Fix retry race condition and error message formatting
1 parent 2038796 commit 178ee1b

File tree

4 files changed

+18
-8
lines changed

4 files changed

+18
-8
lines changed

apps/twig/src/renderer/features/sessions/components/SessionView.tsx

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ interface SessionViewProps {
4242
onCancelPrompt: () => void;
4343
repoPath?: string | null;
4444
hasError?: boolean;
45+
errorTitle?: string;
4546
errorMessage?: string;
4647
onRetry?: () => void;
4748
onDelete?: () => void;
@@ -62,6 +63,7 @@ export function SessionView({
6263
onCancelPrompt,
6364
repoPath,
6465
hasError = false,
66+
errorTitle,
6567
errorMessage = DEFAULT_ERROR_MESSAGE,
6668
onRetry,
6769
onDelete,
@@ -380,11 +382,16 @@ export function SessionView({
380382
className="absolute inset-0 bg-gray-1"
381383
>
382384
<Warning size={32} weight="duotone" color="var(--red-9)" />
385+
{errorTitle && (
386+
<Text size="3" weight="bold" align="center" color="red">
387+
{errorTitle}
388+
</Text>
389+
)}
383390
<Text
384-
size="3"
385-
weight="medium"
391+
size={errorTitle ? "2" : "3"}
392+
weight={errorTitle ? "regular" : "medium"}
386393
align="center"
387-
color="red"
394+
color={errorTitle ? "gray" : "red"}
388395
className="max-w-md px-4"
389396
>
390397
{errorMessage}

apps/twig/src/renderer/features/sessions/service/service.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -268,7 +268,8 @@ export class SessionService {
268268
const taskRunId = latestRun?.id ?? `error-${taskId}`;
269269
const session = this.createBaseSession(taskRunId, taskId, taskTitle);
270270
session.status = "error";
271-
session.errorMessage = `Failed to connect to the agent: ${message}`;
271+
session.errorTitle = "Failed to connect";
272+
session.errorMessage = message;
272273

273274
if (latestRun?.log_url) {
274275
try {
@@ -487,9 +488,11 @@ export class SessionService {
487488
taskRunId: string,
488489
taskTitle: string,
489490
errorMessage: string,
491+
errorTitle?: string,
490492
): void {
491493
const session = this.createBaseSession(taskRunId, taskId, taskTitle);
492494
session.status = "error";
495+
session.errorTitle = errorTitle;
493496
session.errorMessage = errorMessage;
494497
sessionStoreSetters.setSession(session);
495498
}
@@ -1365,8 +1368,6 @@ export class SessionService {
13651368
if (session) {
13661369
await this.teardownSession(session.taskRunId);
13671370
}
1368-
// Clear from connecting tasks as well
1369-
this.connectingTasks.delete(taskId);
13701371
}
13711372

13721373
/**

apps/twig/src/renderer/features/sessions/stores/sessionStore.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ export interface AgentSession {
3636
events: AcpMessage[];
3737
startedAt: number;
3838
status: "connecting" | "connected" | "disconnected" | "error";
39+
errorTitle?: string;
3940
errorMessage?: string;
4041
isPromptPending: boolean;
4142
logUrl?: string;

apps/twig/src/renderer/features/task-detail/components/TaskLogsPanel.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ export function TaskLogsPanel({ taskId, task }: TaskLogsPanelProps) {
6969
const isRunning =
7070
session?.status === "connected" || session?.status === "connecting";
7171
const hasError = session?.status === "error";
72+
const errorTitle = session?.errorTitle;
7273
const errorMessage = session?.errorMessage;
7374

7475
const events = session?.events ?? [];
@@ -236,8 +237,7 @@ export function TaskLogsPanel({ taskId, task }: TaskLogsPanelProps) {
236237
const handleRetry = useCallback(async () => {
237238
if (!repoPath) return;
238239
await getSessionService().clearSessionError(taskId);
239-
getSessionService().connectToTask({ task, repoPath });
240-
}, [taskId, repoPath, task]);
240+
}, [taskId, repoPath]);
241241

242242
const handleDelete = useCallback(() => {
243243
const hasWorktree = workspace?.mode === "worktree";
@@ -322,6 +322,7 @@ export function TaskLogsPanel({ taskId, task }: TaskLogsPanelProps) {
322322
onCancelPrompt={handleCancelPrompt}
323323
repoPath={repoPath}
324324
hasError={isCloud ? false : hasError}
325+
errorTitle={isCloud ? undefined : errorTitle}
325326
errorMessage={isCloud ? undefined : errorMessage}
326327
onRetry={handleRetry}
327328
onDelete={handleDelete}

0 commit comments

Comments
 (0)