diff --git a/packages/cli/src/ui/components/messages/ToolGroupMessage.test.tsx b/packages/cli/src/ui/components/messages/ToolGroupMessage.test.tsx
index 94584879f9..dbf1533d9d 100644
--- a/packages/cli/src/ui/components/messages/ToolGroupMessage.test.tsx
+++ b/packages/cli/src/ui/components/messages/ToolGroupMessage.test.tsx
@@ -368,6 +368,39 @@ describe('', () => {
unmount();
});
+ it('renders update_topic in the middle of other tools', async () => {
+ const toolCalls = [
+ createToolCall({
+ callId: 'tool-1',
+ name: 'read_file',
+ status: CoreToolCallStatus.Success,
+ }),
+ createToolCall({
+ callId: 'topic-tool-middle',
+ name: UPDATE_TOPIC_TOOL_NAME,
+ args: {
+ [TOPIC_PARAM_TITLE]: 'Middle Topic',
+ },
+ }),
+ createToolCall({
+ callId: 'tool-2',
+ name: 'write_file',
+ status: CoreToolCallStatus.Success,
+ }),
+ ];
+ const item = createItem(toolCalls);
+
+ const { lastFrame, unmount } = await renderWithProviders(
+ ,
+ {
+ config: baseMockConfig,
+ settings: fullVerbositySettings,
+ },
+ );
+ expect(lastFrame()).toMatchSnapshot('update_topic_middle');
+ unmount();
+ });
+
it('renders with limited terminal height', async () => {
const toolCalls = [
createToolCall({
diff --git a/packages/cli/src/ui/components/messages/ToolGroupMessage.tsx b/packages/cli/src/ui/components/messages/ToolGroupMessage.tsx
index f71f3e7800..3ca1fad658 100644
--- a/packages/cli/src/ui/components/messages/ToolGroupMessage.tsx
+++ b/packages/cli/src/ui/components/messages/ToolGroupMessage.tsx
@@ -192,6 +192,9 @@ export const ToolGroupMessage: React.FC = ({
!Array.isArray(prevGroup) &&
isCompactTool(prevGroup, isCompactModeEnabled);
+ const prevIsTopic =
+ prevGroup && !Array.isArray(prevGroup) && isTopicTool(prevGroup.name);
+
const nextGroup = !isLast ? groupedTools[i + 1] : null;
const nextIsCompact =
nextGroup &&
@@ -226,7 +229,7 @@ export const ToolGroupMessage: React.FC = ({
const isFirstProp = !!(isFirst
? (borderTopOverride ?? true)
- : prevIsCompact);
+ : prevIsCompact || prevIsTopic);
const showClosingBorder =
!isCompact &&
@@ -363,6 +366,8 @@ export const ToolGroupMessage: React.FC = ({
prevGroup &&
!Array.isArray(prevGroup) &&
isCompactTool(prevGroup, isCompactModeEnabled);
+ const prevIsTopic =
+ prevGroup && !Array.isArray(prevGroup) && isTopicTool(prevGroup.name);
const nextGroup = !isLast ? groupedTools[index + 1] : null;
const nextIsCompact =
@@ -379,7 +384,7 @@ export const ToolGroupMessage: React.FC = ({
const isFirstProp = !!(isFirst
? (borderTopOverride ?? true)
- : prevIsCompact);
+ : prevIsCompact || prevIsTopic);
const showClosingBorder =
!isCompact &&
diff --git a/packages/cli/src/ui/components/messages/__snapshots__/ToolGroupMessage.test.tsx.snap b/packages/cli/src/ui/components/messages/__snapshots__/ToolGroupMessage.test.tsx.snap
index b0d33feebd..e0caedef9b 100644
--- a/packages/cli/src/ui/components/messages/__snapshots__/ToolGroupMessage.test.tsx.snap
+++ b/packages/cli/src/ui/components/messages/__snapshots__/ToolGroupMessage.test.tsx.snap
@@ -141,6 +141,22 @@ exports[` > Golden Snapshots > renders two tool groups where
"
`;
+exports[` > Golden Snapshots > renders update_topic in the middle of other tools > update_topic_middle 1`] = `
+"╭──────────────────────────────────────────────────────────────────────────╮
+│ ✓ read_file A tool for testing │
+│ │
+│ Test result │
+╰──────────────────────────────────────────────────────────────────────────╯
+ Middle Topic
+
+╭──────────────────────────────────────────────────────────────────────────╮
+│ ✓ write_file A tool for testing │
+│ │
+│ Test result │
+╰──────────────────────────────────────────────────────────────────────────╯
+"
+`;
+
exports[` > Golden Snapshots > renders update_topic tool call using TopicMessage > update_topic_tool 1`] = `
" Testing Topic: This is the description
"