Skip to content

Commit 79ac8e3

Browse files
committed
Fix spinners showing when nothing is happening
1 parent c9e1bca commit 79ac8e3

6 files changed

Lines changed: 41 additions & 8 deletions

File tree

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -239,6 +239,7 @@ const TurnView = memo(function TurnView({
239239
item={renderItem}
240240
toolCalls={turn.toolCalls}
241241
turnCancelled={wasCancelled}
242+
turnComplete={turn.isComplete}
242243
/>
243244
);
244245
})}

apps/twig/src/renderer/features/sessions/components/session-update/ExecuteToolView.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ const ANSI_REGEX = new RegExp(`${String.fromCharCode(0x1b)}\\[[0-9;]*m`, "g");
1313
interface ExecuteToolViewProps {
1414
toolCall: ToolCall;
1515
turnCancelled?: boolean;
16+
turnComplete?: boolean;
1617
}
1718

1819
interface ExecuteRawInput {
@@ -36,6 +37,7 @@ function getOutputFromContent(
3637
export function ExecuteToolView({
3738
toolCall,
3839
turnCancelled,
40+
turnComplete,
3941
}: ExecuteToolViewProps) {
4042
const [isExpanded, setIsExpanded] = useState(false);
4143
const { status, rawInput, content } = toolCall;
@@ -45,7 +47,7 @@ export function ExecuteToolView({
4547
const description = executeInput?.description;
4648

4749
const isIncomplete = status === "pending" || status === "in_progress";
48-
const isLoading = isIncomplete && !turnCancelled;
50+
const isLoading = isIncomplete && !turnCancelled && !turnComplete;
4951

5052
const output = (getOutputFromContent(content) ?? "").replace(ANSI_REGEX, "");
5153
const hasOutput = output.trim().length > 0;

apps/twig/src/renderer/features/sessions/components/session-update/PlanApprovalView.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,19 @@ import { useMemo } from "react";
77
interface PlanApprovalViewProps {
88
toolCall: ToolCall;
99
turnCancelled?: boolean;
10+
turnComplete?: boolean;
1011
}
1112

1213
export function PlanApprovalView({
1314
toolCall,
1415
turnCancelled,
16+
turnComplete,
1517
}: PlanApprovalViewProps) {
1618
const { status, content } = toolCall;
1719
const isComplete = status === "completed";
1820
const wasCancelled =
19-
(status === "pending" || status === "in_progress") && turnCancelled;
21+
(status === "pending" || status === "in_progress") &&
22+
(turnCancelled || turnComplete);
2023

2124
const planText = useMemo(() => {
2225
const rawPlan = (toolCall.rawInput as { plan?: string } | undefined)?.plan;

apps/twig/src/renderer/features/sessions/components/session-update/SessionUpdateView.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,12 +45,14 @@ interface SessionUpdateViewProps {
4545
item: RenderItem;
4646
toolCalls?: Map<string, ToolCall>;
4747
turnCancelled?: boolean;
48+
turnComplete?: boolean;
4849
}
4950

5051
export const SessionUpdateView = memo(function SessionUpdateView({
5152
item,
5253
toolCalls,
5354
turnCancelled,
55+
turnComplete,
5456
}: SessionUpdateViewProps) {
5557
switch (item.sessionUpdate) {
5658
case "user_message_chunk":
@@ -68,6 +70,7 @@ export const SessionUpdateView = memo(function SessionUpdateView({
6870
<ToolCallBlock
6971
toolCall={toolCalls?.get(item.toolCallId) ?? item}
7072
turnCancelled={turnCancelled}
73+
turnComplete={turnComplete}
7174
/>
7275
);
7376
case "tool_call_update":

apps/twig/src/renderer/features/sessions/components/session-update/ToolCallBlock.tsx

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,26 @@ import { ToolCallView } from "./ToolCallView";
66
interface ToolCallBlockProps {
77
toolCall: ToolCall;
88
turnCancelled?: boolean;
9+
turnComplete?: boolean;
910
}
1011

11-
export function ToolCallBlock({ toolCall, turnCancelled }: ToolCallBlockProps) {
12+
export function ToolCallBlock({
13+
toolCall,
14+
turnCancelled,
15+
turnComplete,
16+
}: ToolCallBlockProps) {
1217
const meta = toolCall._meta as
1318
| { claudeCode?: { toolName?: string } }
1419
| undefined;
1520
const toolName = meta?.claudeCode?.toolName;
1621

1722
if (toolCall.kind === "switch_mode") {
1823
return (
19-
<PlanApprovalView toolCall={toolCall} turnCancelled={turnCancelled} />
24+
<PlanApprovalView
25+
toolCall={toolCall}
26+
turnCancelled={turnCancelled}
27+
turnComplete={turnComplete}
28+
/>
2029
);
2130
}
2231

@@ -26,9 +35,19 @@ export function ToolCallBlock({ toolCall, turnCancelled }: ToolCallBlockProps) {
2635

2736
if (toolCall.kind === "execute") {
2837
return (
29-
<ExecuteToolView toolCall={toolCall} turnCancelled={turnCancelled} />
38+
<ExecuteToolView
39+
toolCall={toolCall}
40+
turnCancelled={turnCancelled}
41+
turnComplete={turnComplete}
42+
/>
3043
);
3144
}
3245

33-
return <ToolCallView toolCall={toolCall} turnCancelled={turnCancelled} />;
46+
return (
47+
<ToolCallView
48+
toolCall={toolCall}
49+
turnCancelled={turnCancelled}
50+
turnComplete={turnComplete}
51+
/>
52+
);
3453
}

apps/twig/src/renderer/features/sessions/components/session-update/ToolCallView.tsx

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,17 @@ const kindIcons: Record<TwigToolKind, Icon> = {
3333
interface ToolCallViewProps {
3434
toolCall: ToolCall;
3535
turnCancelled?: boolean;
36+
turnComplete?: boolean;
3637
}
3738

38-
export function ToolCallView({ toolCall, turnCancelled }: ToolCallViewProps) {
39+
export function ToolCallView({
40+
toolCall,
41+
turnCancelled,
42+
turnComplete,
43+
}: ToolCallViewProps) {
3944
const { title, kind, status, locations } = toolCall;
4045
const isIncomplete = status === "pending" || status === "in_progress";
41-
const isLoading = isIncomplete && !turnCancelled;
46+
const isLoading = isIncomplete && !turnCancelled && !turnComplete;
4247
const isFailed = status === "failed";
4348
const wasCancelled = isIncomplete && turnCancelled;
4449
const KindIcon = (kind && kindIcons[kind]) || Wrench;

0 commit comments

Comments
 (0)