Skip to content

Commit d7c92e2

Browse files
author
思晗
committed
fix(cli): use dedicated prop for subagent approval waiting state
1 parent cd054bd commit d7c92e2

3 files changed

Lines changed: 26 additions & 3 deletions

File tree

packages/cli/src/ui/components/messages/ToolGroupMessage.tsx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,12 @@ export const ToolGroupMessage: React.FC<ToolGroupMessageProps> = ({
149149
isFocused &&
150150
!toolAwaitingApproval &&
151151
focusedSubagentCallId === tool.callId;
152+
// Show the waiting indicator only when this subagent genuinely has a
153+
// pending confirmation AND another subagent holds the focus lock.
154+
const isWaitingForOtherApproval =
155+
isAgentWithPendingConfirmation(tool.resultDisplay) &&
156+
focusedSubagentCallId !== null &&
157+
focusedSubagentCallId !== tool.callId;
152158
return (
153159
<Box key={tool.callId} flexDirection="column" minHeight={1}>
154160
<Box flexDirection="row" alignItems="center">
@@ -167,6 +173,7 @@ export const ToolGroupMessage: React.FC<ToolGroupMessageProps> = ({
167173
embeddedShellFocused={embeddedShellFocused}
168174
config={config}
169175
isFocused={isSubagentFocused}
176+
isWaitingForOtherApproval={isWaitingForOtherApproval}
170177
/>
171178
</Box>
172179
{tool.status === ToolCallStatus.Confirming &&

packages/cli/src/ui/components/messages/ToolMessage.tsx

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,13 +174,22 @@ const SubagentExecutionRenderer: React.FC<{
174174
childWidth: number;
175175
config: Config;
176176
isFocused?: boolean;
177-
}> = ({ data, availableHeight, childWidth, config, isFocused }) => (
177+
isWaitingForOtherApproval?: boolean;
178+
}> = ({
179+
data,
180+
availableHeight,
181+
childWidth,
182+
config,
183+
isFocused,
184+
isWaitingForOtherApproval,
185+
}) => (
178186
<AgentExecutionDisplay
179187
data={data}
180188
availableHeight={availableHeight}
181189
childWidth={childWidth}
182190
config={config}
183191
isFocused={isFocused}
192+
isWaitingForOtherApproval={isWaitingForOtherApproval}
184193
/>
185194
);
186195

@@ -252,6 +261,8 @@ export interface ToolMessageProps extends IndividualToolCallDisplay {
252261
config?: Config;
253262
/** Whether this tool's subagent confirmation prompt should respond to keyboard input. */
254263
isFocused?: boolean;
264+
/** Whether another subagent's approval currently holds the focus lock, blocking this one. */
265+
isWaitingForOtherApproval?: boolean;
255266
}
256267

257268
export const ToolMessage: React.FC<ToolMessageProps> = ({
@@ -268,6 +279,7 @@ export const ToolMessage: React.FC<ToolMessageProps> = ({
268279
ptyId,
269280
config,
270281
isFocused,
282+
isWaitingForOtherApproval,
271283
}) => {
272284
const settings = useSettings();
273285
const isThisShellFocused =
@@ -369,6 +381,7 @@ export const ToolMessage: React.FC<ToolMessageProps> = ({
369381
childWidth={innerWidth}
370382
config={config}
371383
isFocused={isFocused}
384+
isWaitingForOtherApproval={isWaitingForOtherApproval}
372385
/>
373386
)}
374387
{displayRenderer.type === 'diff' && (

packages/cli/src/ui/components/subagents/runtime/AgentExecutionDisplay.tsx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ export interface AgentExecutionDisplayProps {
2626
config: Config;
2727
/** Whether this display's confirmation prompt should respond to keyboard input. */
2828
isFocused?: boolean;
29+
/** Whether another subagent's approval currently holds the focus lock, blocking this one. */
30+
isWaitingForOtherApproval?: boolean;
2931
}
3032

3133
const getStatusColor = (
@@ -81,6 +83,7 @@ export const AgentExecutionDisplay: React.FC<AgentExecutionDisplayProps> = ({
8183
childWidth,
8284
config,
8385
isFocused = true,
86+
isWaitingForOtherApproval = false,
8487
}) => {
8588
const [displayMode, setDisplayMode] = React.useState<DisplayMode>('compact');
8689

@@ -171,7 +174,7 @@ export const AgentExecutionDisplay: React.FC<AgentExecutionDisplayProps> = ({
171174
{/* Inline approval prompt when awaiting confirmation */}
172175
{data.pendingConfirmation && (
173176
<Box flexDirection="column" marginTop={1} paddingLeft={1}>
174-
{!isFocused && (
177+
{isWaitingForOtherApproval && (
175178
<Box marginBottom={0}>
176179
<Text color={theme.text.secondary} dimColor>
177180
⏳ Waiting for other approval...
@@ -247,7 +250,7 @@ export const AgentExecutionDisplay: React.FC<AgentExecutionDisplayProps> = ({
247250
{/* Inline approval prompt when awaiting confirmation */}
248251
{data.pendingConfirmation && (
249252
<Box flexDirection="column">
250-
{!isFocused && (
253+
{isWaitingForOtherApproval && (
251254
<Box marginBottom={0}>
252255
<Text color={theme.text.secondary} dimColor>
253256
⏳ Waiting for other approval...

0 commit comments

Comments
 (0)