!feat(cli): address non-interactive review follow-ups

This commit is contained in:
Adam Weidman
2026-03-20 12:27:31 -04:00
committed by Adam Weidman
parent f7b08330f7
commit 24a4a0da1e
2 changed files with 13 additions and 19 deletions
+4 -12
View File
@@ -58,12 +58,6 @@ const mockSchedulerSchedule = vi.hoisted(() => vi.fn());
vi.mock('@google/gemini-cli-core', async (importOriginal) => {
const original =
await importOriginal<typeof import('@google/gemini-cli-core')>();
const { LegacyAgentSession } = await import(
'../../core/src/agent/legacy-agent-session.js'
);
const { geminiPartsToContentParts } = await import(
'../../core/src/agent/content-utils.js'
);
class MockChatRecordingService {
initialize = vi.fn();
@@ -83,8 +77,8 @@ vi.mock('@google/gemini-cli-core', async (importOriginal) => {
uiTelemetryService: {
getMetrics: vi.fn(),
},
LegacyAgentSession,
geminiPartsToContentParts,
LegacyAgentSession: original.LegacyAgentSession,
geminiPartsToContentParts: original.geminiPartsToContentParts,
coreEvents: mockCoreEvents,
createWorkingStdio: vi.fn(() => ({
stdout: process.stdout,
@@ -278,9 +272,7 @@ describe('runNonInteractive', () => {
});
it('should stream the specific stream started by send', async () => {
const { LegacyAgentSession } = await import(
'../../core/src/agent/legacy-agent-session.js'
);
const { LegacyAgentSession } = await import('@google/gemini-cli-core');
const streamSpy = vi.spyOn(LegacyAgentSession.prototype, 'stream');
const events: ServerGeminiStreamEvent[] = [
{ type: GeminiEventType.Content, value: 'Hello again' },
@@ -1794,7 +1786,7 @@ describe('runNonInteractive', () => {
.mockReturnValue('model-1');
// Mock debugLogger.error
const { debugLogger } = await import('../../core/src/utils/debugLogger.js');
const { debugLogger } = await import('@google/gemini-cli-core');
const debugLoggerErrorSpy = vi
.spyOn(debugLogger, 'error')
.mockImplementation(() => {});
+9 -7
View File
@@ -298,9 +298,11 @@ export async function runNonInteractive({
message: geminiPartsToContentParts(query),
});
const getFirstText = (parts?: ContentPart[]): string | undefined => {
const part = parts?.[0];
return part?.type === 'text' ? part.text : undefined;
const getTextContent = (parts?: ContentPart[]): string | undefined => {
const text = parts
?.map((part) => (part.type === 'text' ? part.text : ''))
.join('');
return text ? text : undefined;
};
const emitFinalSuccessResult = (): void => {
@@ -396,8 +398,8 @@ export async function runNonInteractive({
case 'tool_response': {
textOutput.ensureTrailingNewline();
if (streamFormatter) {
const displayText = getFirstText(event.displayContent);
const errorMsg = getFirstText(event.content) ?? 'Tool error';
const displayText = getTextContent(event.displayContent);
const errorMsg = getTextContent(event.content) ?? 'Tool error';
streamFormatter.emitEvent({
type: JsonStreamEventType.TOOL_RESULT,
timestamp: new Date().toISOString(),
@@ -416,8 +418,8 @@ export async function runNonInteractive({
});
}
if (event.isError) {
const displayText = getFirstText(event.displayContent);
const errorMsg = getFirstText(event.content) ?? 'Tool error';
const displayText = getTextContent(event.displayContent);
const errorMsg = getTextContent(event.content) ?? 'Tool error';
if (event.data?.['errorType'] === ToolErrorType.STOP_EXECUTION) {
const stopMessage = `Agent execution stopped: ${errorMsg}`;