mirror of
https://github.com/google-gemini/gemini-cli.git
synced 2026-06-13 04:48:09 -07:00
174 lines
4.2 KiB
TypeScript
174 lines
4.2 KiB
TypeScript
/**
|
|
* @license
|
|
* Copyright 2026 Google LLC
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
import { expect, describe, it } from 'vitest';
|
|
import {
|
|
isRenderedInHistory,
|
|
belongsInConfirmationQueue,
|
|
isVisibleInToolGroup,
|
|
} from './tool-visibility.js';
|
|
import { CoreToolCallStatus } from '../scheduler/types.js';
|
|
import { ApprovalMode } from '../policy/types.js';
|
|
import {
|
|
ASK_USER_DISPLAY_NAME,
|
|
WRITE_FILE_DISPLAY_NAME,
|
|
EDIT_DISPLAY_NAME,
|
|
UPDATE_TOPIC_TOOL_NAME,
|
|
READ_FILE_DISPLAY_NAME,
|
|
} from '../tools/tool-names.js';
|
|
|
|
describe('ToolVisibility Rules', () => {
|
|
const createCtx = (overrides = {}) => ({
|
|
name: 'some_tool',
|
|
displayName: 'Some Tool',
|
|
status: CoreToolCallStatus.Success,
|
|
hasResult: true,
|
|
parentCallId: undefined,
|
|
isClientInitiated: false,
|
|
...overrides,
|
|
});
|
|
|
|
describe('isRenderedInHistory', () => {
|
|
it('hides tools with parents', () => {
|
|
expect(
|
|
isRenderedInHistory(createCtx({ parentCallId: 'parent-123' })),
|
|
).toBe(false);
|
|
});
|
|
|
|
it('hides AskUser errors without results', () => {
|
|
expect(
|
|
isRenderedInHistory(
|
|
createCtx({
|
|
displayName: ASK_USER_DISPLAY_NAME,
|
|
status: CoreToolCallStatus.Error,
|
|
hasResult: false,
|
|
}),
|
|
),
|
|
).toBe(false);
|
|
});
|
|
|
|
it('shows AskUser success', () => {
|
|
expect(
|
|
isRenderedInHistory(
|
|
createCtx({
|
|
displayName: ASK_USER_DISPLAY_NAME,
|
|
status: CoreToolCallStatus.Success,
|
|
}),
|
|
),
|
|
).toBe(true);
|
|
});
|
|
|
|
it('hides WriteFile/Edit in Plan Mode', () => {
|
|
expect(
|
|
isRenderedInHistory(
|
|
createCtx({
|
|
displayName: WRITE_FILE_DISPLAY_NAME,
|
|
approvalMode: ApprovalMode.PLAN,
|
|
}),
|
|
),
|
|
).toBe(false);
|
|
expect(
|
|
isRenderedInHistory(
|
|
createCtx({
|
|
displayName: EDIT_DISPLAY_NAME,
|
|
approvalMode: ApprovalMode.PLAN,
|
|
}),
|
|
),
|
|
).toBe(false);
|
|
});
|
|
|
|
it('shows ReadFile in Plan Mode', () => {
|
|
expect(
|
|
isRenderedInHistory(
|
|
createCtx({
|
|
displayName: READ_FILE_DISPLAY_NAME,
|
|
approvalMode: ApprovalMode.PLAN,
|
|
}),
|
|
),
|
|
).toBe(true);
|
|
});
|
|
});
|
|
|
|
describe('belongsInConfirmationQueue', () => {
|
|
it('returns false for update_topic', () => {
|
|
expect(
|
|
belongsInConfirmationQueue(createCtx({ name: UPDATE_TOPIC_TOOL_NAME })),
|
|
).toBe(false);
|
|
});
|
|
|
|
it('returns true for standard tools', () => {
|
|
expect(
|
|
belongsInConfirmationQueue(createCtx({ name: 'write_file' })),
|
|
).toBe(true);
|
|
});
|
|
});
|
|
|
|
describe('isVisibleInToolGroup', () => {
|
|
it('shows tools with parents (agent tools)', () => {
|
|
expect(
|
|
isVisibleInToolGroup(createCtx({ parentCallId: 'parent-123' }), 'full'),
|
|
).toBe(true);
|
|
});
|
|
|
|
it('hides WriteFile/Edit in Plan Mode', () => {
|
|
expect(
|
|
isVisibleInToolGroup(
|
|
createCtx({
|
|
displayName: WRITE_FILE_DISPLAY_NAME,
|
|
approvalMode: ApprovalMode.PLAN,
|
|
}),
|
|
'full',
|
|
),
|
|
).toBe(false);
|
|
});
|
|
|
|
it('hides non-client-initiated errors on low verbosity', () => {
|
|
expect(
|
|
isVisibleInToolGroup(
|
|
createCtx({
|
|
status: CoreToolCallStatus.Error,
|
|
isClientInitiated: false,
|
|
}),
|
|
'low',
|
|
),
|
|
).toBe(false);
|
|
});
|
|
|
|
it('shows non-client-initiated errors on full verbosity', () => {
|
|
expect(
|
|
isVisibleInToolGroup(
|
|
createCtx({
|
|
status: CoreToolCallStatus.Error,
|
|
isClientInitiated: false,
|
|
}),
|
|
'full',
|
|
),
|
|
).toBe(true);
|
|
});
|
|
|
|
it('hides confirming tools', () => {
|
|
expect(
|
|
isVisibleInToolGroup(
|
|
createCtx({ status: CoreToolCallStatus.AwaitingApproval }),
|
|
'full',
|
|
),
|
|
).toBe(false);
|
|
});
|
|
|
|
it('hides AskUser while in progress', () => {
|
|
expect(
|
|
isVisibleInToolGroup(
|
|
createCtx({
|
|
displayName: ASK_USER_DISPLAY_NAME,
|
|
status: CoreToolCallStatus.Executing,
|
|
}),
|
|
'full',
|
|
),
|
|
).toBe(false);
|
|
});
|
|
});
|
|
});
|