mirror of
https://github.com/google-gemini/gemini-cli.git
synced 2026-04-23 19:44:30 -07:00
feat(cli): add macOS run-event notifications (interactive only) (#19056)
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
This commit is contained in:
@@ -0,0 +1,114 @@
|
||||
/**
|
||||
* @license
|
||||
* Copyright 2026 Google LLC
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
import { describe, expect, it } from 'vitest';
|
||||
import { CoreToolCallStatus } from '@google/gemini-cli-core';
|
||||
import { getPendingAttentionNotification } from './pendingAttentionNotification.js';
|
||||
|
||||
describe('getPendingAttentionNotification', () => {
|
||||
it('returns tool confirmation notification for awaiting tool approvals', () => {
|
||||
const notification = getPendingAttentionNotification(
|
||||
[
|
||||
{
|
||||
type: 'tool_group',
|
||||
tools: [
|
||||
{
|
||||
callId: 'tool-1',
|
||||
status: CoreToolCallStatus.AwaitingApproval,
|
||||
description: 'Run command',
|
||||
confirmationDetails: {
|
||||
type: 'exec',
|
||||
title: 'Run shell command',
|
||||
command: 'ls',
|
||||
rootCommand: 'ls',
|
||||
rootCommands: ['ls'],
|
||||
},
|
||||
},
|
||||
],
|
||||
} as never,
|
||||
],
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
false,
|
||||
false,
|
||||
);
|
||||
|
||||
expect(notification?.key).toBe('tool_confirmation:tool-1');
|
||||
expect(notification?.event.type).toBe('attention');
|
||||
});
|
||||
|
||||
it('returns ask-user notification for ask_user confirmations', () => {
|
||||
const notification = getPendingAttentionNotification(
|
||||
[
|
||||
{
|
||||
type: 'tool_group',
|
||||
tools: [
|
||||
{
|
||||
callId: 'ask-user-1',
|
||||
status: CoreToolCallStatus.AwaitingApproval,
|
||||
description: 'Ask user',
|
||||
confirmationDetails: {
|
||||
type: 'ask_user',
|
||||
questions: [
|
||||
{
|
||||
header: 'Need approval?',
|
||||
question: 'Proceed?',
|
||||
options: [],
|
||||
id: 'q1',
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
],
|
||||
} as never,
|
||||
],
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
false,
|
||||
false,
|
||||
);
|
||||
|
||||
expect(notification?.key).toBe('ask_user:ask-user-1');
|
||||
expect(notification?.event).toEqual({
|
||||
type: 'attention',
|
||||
heading: 'Answer requested by agent',
|
||||
detail: 'Need approval?',
|
||||
});
|
||||
});
|
||||
|
||||
it('uses request content in command/auth keys', () => {
|
||||
const commandNotification = getPendingAttentionNotification(
|
||||
[],
|
||||
{
|
||||
prompt: 'Approve command?',
|
||||
onConfirm: () => {},
|
||||
},
|
||||
null,
|
||||
null,
|
||||
false,
|
||||
false,
|
||||
);
|
||||
|
||||
const authNotification = getPendingAttentionNotification(
|
||||
[],
|
||||
null,
|
||||
{
|
||||
prompt: 'Authorize sign-in?',
|
||||
onConfirm: () => {},
|
||||
},
|
||||
null,
|
||||
false,
|
||||
false,
|
||||
);
|
||||
|
||||
expect(commandNotification?.key).toContain('command_confirmation:');
|
||||
expect(commandNotification?.key).toContain('Approve command?');
|
||||
expect(authNotification?.key).toContain('auth_consent:');
|
||||
expect(authNotification?.key).toContain('Authorize sign-in?');
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user