diff --git a/packages/cli/src/ui/components/messages/ThinkingMessage.test.tsx b/packages/cli/src/ui/components/messages/ThinkingMessage.test.tsx
index 6f92487064..582776bb82 100644
--- a/packages/cli/src/ui/components/messages/ThinkingMessage.test.tsx
+++ b/packages/cli/src/ui/components/messages/ThinkingMessage.test.tsx
@@ -35,6 +35,20 @@ describe('ThinkingMessage', () => {
expect(lastFrame()).toContain('(1)');
});
+ it('renders thought content', () => {
+ const { lastFrame } = render(
+ ,
+ );
+
+ expect(lastFrame()).toContain('Planning');
+ expect(lastFrame()).toContain('I am planning the solution.');
+ });
+
it('renders empty state gracefully', () => {
const { lastFrame } = render(
,
diff --git a/packages/cli/src/ui/components/messages/ThinkingMessage.tsx b/packages/cli/src/ui/components/messages/ThinkingMessage.tsx
index a2eda6c375..99e789f1c0 100644
--- a/packages/cli/src/ui/components/messages/ThinkingMessage.tsx
+++ b/packages/cli/src/ui/components/messages/ThinkingMessage.tsx
@@ -23,11 +23,24 @@ export const ThinkingMessage: React.FC = ({
width={terminalWidth}
paddingX={1}
marginBottom={1}
+ flexDirection="column"
>
- ◆
-
- Thinking
-
- ({thoughts.length})
+
+ ◆
+
+ Thinking
+
+ ({thoughts.length})
+
+ {thoughts.map((thought, index) => (
+
+ {thought.subject && (
+
+ {thought.subject}
+
+ )}
+ {thought.description || ' '}
+
+ ))}
);
diff --git a/packages/cli/src/ui/hooks/useGeminiStream.ts b/packages/cli/src/ui/hooks/useGeminiStream.ts
index 7791541fea..7202aa76dc 100644
--- a/packages/cli/src/ui/hooks/useGeminiStream.ts
+++ b/packages/cli/src/ui/hooks/useGeminiStream.ts
@@ -119,7 +119,9 @@ export const useGeminiStream = (
const activeQueryIdRef = useRef(null);
const [isResponding, setIsResponding] = useState(false);
const [thought, setThought] = useState(null);
- const thoughtsBufferRef = useRef([]);
+ const [thoughtsBuffer, thoughtsBufferRef, setThoughtsBuffer] = useStateAndRef<
+ ThoughtSummary[]
+ >([]);
const [pendingHistoryItem, pendingHistoryItemRef, setPendingHistoryItem] =
useStateAndRef(null);
@@ -136,10 +138,10 @@ export const useGeminiStream = (
} as HistoryItemThinking,
userMessageTimestamp,
);
- thoughtsBufferRef.current = [];
+ setThoughtsBuffer([]);
}
},
- [addItem, settings],
+ [addItem, settings, setThoughtsBuffer, thoughtsBufferRef],
);
const processedMemoryToolsRef = useRef>(new Set());
@@ -828,7 +830,7 @@ export const useGeminiStream = (
switch (event.type) {
case ServerGeminiEventType.Thought:
setThought(event.value);
- thoughtsBufferRef.current.push(event.value);
+ setThoughtsBuffer((prev) => [...prev, event.value]);
break;
case ServerGeminiEventType.Content:
geminiMessageBuffer = handleContentEvent(
@@ -908,6 +910,7 @@ export const useGeminiStream = (
handleCitationEvent,
handleChatModelEvent,
flushThoughts,
+ setThoughtsBuffer,
],
);
const submitQuery = useCallback(
@@ -1085,6 +1088,7 @@ export const useGeminiStream = (
config,
startNewPrompt,
getPromptCount,
+ thoughtsBufferRef,
],
);
@@ -1282,12 +1286,24 @@ export const useGeminiStream = (
],
);
+ const pendingThinkingItem = useMemo(() => {
+ if (settings.merged.ui?.showInlineThinking && thoughtsBuffer.length > 0) {
+ return {
+ type: 'thinking',
+ thoughts: thoughtsBuffer,
+ } as HistoryItemWithoutId;
+ }
+ return null;
+ }, [settings.merged.ui?.showInlineThinking, thoughtsBuffer]);
+
const pendingHistoryItems = useMemo(
() =>
- [pendingHistoryItem, pendingToolCallGroupDisplay].filter(
- (i) => i !== undefined && i !== null,
- ),
- [pendingHistoryItem, pendingToolCallGroupDisplay],
+ [
+ pendingThinkingItem,
+ pendingHistoryItem,
+ pendingToolCallGroupDisplay,
+ ].filter((i) => i !== undefined && i !== null),
+ [pendingThinkingItem, pendingHistoryItem, pendingToolCallGroupDisplay],
);
useEffect(() => {
diff --git a/scripts/generate-git-commit-info.js b/scripts/generate-git-commit-info.js
index 75c8bb97ba..dda65bede5 100644
--- a/scripts/generate-git-commit-info.js
+++ b/scripts/generate-git-commit-info.js
@@ -57,7 +57,7 @@ try {
const fileContent = `/**
* @license
- * Copyright ${new Date().getFullYear()} Google LLC
+ * Copyright 2025 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/