mirror of
https://github.com/google-gemini/gemini-cli.git
synced 2026-04-20 18:14:29 -07:00
feat(core): refine shell tool description display logic (#24903)
This commit is contained in:
@@ -768,6 +768,46 @@ describe('ShellTool', () => {
|
|||||||
const shellTool = new ShellTool(mockConfig, createMockMessageBus());
|
const shellTool = new ShellTool(mockConfig, createMockMessageBus());
|
||||||
expect(shellTool.description).not.toContain('Efficiency Guidelines:');
|
expect(shellTool.description).not.toContain('Efficiency Guidelines:');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should return the command if description is not provided', () => {
|
||||||
|
const invocation = shellTool.build({
|
||||||
|
command: 'echo "hello"',
|
||||||
|
});
|
||||||
|
expect(invocation.getDescription()).toBe('echo "hello"');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should return the command if it is short (<= 150 chars), even if description is provided', () => {
|
||||||
|
const invocation = shellTool.build({
|
||||||
|
command: 'echo "hello"',
|
||||||
|
description: 'Prints a friendly greeting.',
|
||||||
|
});
|
||||||
|
expect(invocation.getDescription()).toBe('echo "hello"');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should return the description if the command is long (> 150 chars)', () => {
|
||||||
|
const longCommand = 'echo "hello" && '.repeat(15) + 'echo "world"'; // Length > 150
|
||||||
|
const invocation = shellTool.build({
|
||||||
|
command: longCommand,
|
||||||
|
description: 'Prints multiple greetings.',
|
||||||
|
});
|
||||||
|
expect(invocation.getDescription()).toBe('Prints multiple greetings.');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should return the raw command if description is an empty string', () => {
|
||||||
|
const invocation = shellTool.build({
|
||||||
|
command: 'echo hello',
|
||||||
|
description: '',
|
||||||
|
});
|
||||||
|
expect(invocation.getDescription()).toBe('echo hello');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should return the raw command if description is just whitespace', () => {
|
||||||
|
const invocation = shellTool.build({
|
||||||
|
command: 'echo hello',
|
||||||
|
description: ' ',
|
||||||
|
});
|
||||||
|
expect(invocation.getDescription()).toBe('echo hello');
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('getDisplayTitle and getExplanation', () => {
|
describe('getDisplayTitle and getExplanation', () => {
|
||||||
@@ -803,32 +843,6 @@ describe('ShellTool', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('invocation getDescription', () => {
|
|
||||||
it('should return the description if it is present and not empty whitespace', () => {
|
|
||||||
const invocation = shellTool.build({
|
|
||||||
command: 'echo hello',
|
|
||||||
description: 'prints hello',
|
|
||||||
});
|
|
||||||
expect(invocation.getDescription()).toBe('prints hello');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should return the raw command if description is an empty string', () => {
|
|
||||||
const invocation = shellTool.build({
|
|
||||||
command: 'echo hello',
|
|
||||||
description: '',
|
|
||||||
});
|
|
||||||
expect(invocation.getDescription()).toBe('echo hello');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should return the raw command if description is just whitespace', () => {
|
|
||||||
const invocation = shellTool.build({
|
|
||||||
command: 'echo hello',
|
|
||||||
description: ' ',
|
|
||||||
});
|
|
||||||
expect(invocation.getDescription()).toBe('echo hello');
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('llmContent output format', () => {
|
describe('llmContent output format', () => {
|
||||||
const mockAbortSignal = new AbortController().signal;
|
const mockAbortSignal = new AbortController().signal;
|
||||||
|
|
||||||
|
|||||||
@@ -63,6 +63,7 @@ export const OUTPUT_UPDATE_INTERVAL_MS = 1000;
|
|||||||
|
|
||||||
// Delay so user does not see the output of the process before the process is moved to the background.
|
// Delay so user does not see the output of the process before the process is moved to the background.
|
||||||
const BACKGROUND_DELAY_MS = 200;
|
const BACKGROUND_DELAY_MS = 200;
|
||||||
|
const SHOW_NL_DESCRIPTION_THRESHOLD = 150;
|
||||||
|
|
||||||
export interface ShellToolParams {
|
export interface ShellToolParams {
|
||||||
command: string;
|
command: string;
|
||||||
@@ -136,9 +137,12 @@ export class ShellToolInvocation extends BaseToolInvocation<
|
|||||||
}
|
}
|
||||||
|
|
||||||
getDescription(): string {
|
getDescription(): string {
|
||||||
return this.params.description?.trim()
|
const descStr = this.params.description?.trim();
|
||||||
? this.params.description
|
const commandStr = this.params.command;
|
||||||
: this.params.command;
|
return Array.from(commandStr).length <= SHOW_NL_DESCRIPTION_THRESHOLD ||
|
||||||
|
!descStr
|
||||||
|
? commandStr
|
||||||
|
: descStr;
|
||||||
}
|
}
|
||||||
|
|
||||||
private simplifyPaths(paths: Set<string>): string[] {
|
private simplifyPaths(paths: Set<string>): string[] {
|
||||||
|
|||||||
Reference in New Issue
Block a user