mirror of
https://github.com/google-gemini/gemini-cli.git
synced 2026-04-21 02:24:09 -07:00
refactor(core): adopt CoreToolCallStatus enum for type safety (#18998)
This commit is contained in:
@@ -17,6 +17,7 @@ import {
|
||||
type ToolCallRequestInfo,
|
||||
type ToolCallResponseInfo,
|
||||
} from '../scheduler/types.js';
|
||||
import { CoreToolCallStatus } from '../scheduler/types.js';
|
||||
import { MockTool } from '../test-utils/mock-tool.js';
|
||||
|
||||
describe('Circular Reference Handling', () => {
|
||||
@@ -62,7 +63,7 @@ describe('Circular Reference Handling', () => {
|
||||
|
||||
const tool = new MockTool({ name: 'mock-tool' });
|
||||
const mockCompletedToolCall: CompletedToolCall = {
|
||||
status: 'success',
|
||||
status: CoreToolCallStatus.Success,
|
||||
request: mockRequest,
|
||||
response: mockResponse,
|
||||
tool,
|
||||
@@ -112,7 +113,7 @@ describe('Circular Reference Handling', () => {
|
||||
|
||||
const tool = new MockTool({ name: 'mock-tool' });
|
||||
const mockCompletedToolCall: CompletedToolCall = {
|
||||
status: 'success',
|
||||
status: CoreToolCallStatus.Success,
|
||||
request: mockRequest,
|
||||
response: mockResponse,
|
||||
tool,
|
||||
|
||||
@@ -12,6 +12,7 @@ import type {
|
||||
ErroredToolCall,
|
||||
} from '../index.js';
|
||||
import {
|
||||
CoreToolCallStatus,
|
||||
AuthType,
|
||||
EditTool,
|
||||
GeminiClient,
|
||||
@@ -1070,7 +1071,7 @@ describe('loggers', () => {
|
||||
it('should log a tool call with all fields', () => {
|
||||
const tool = new EditTool(mockConfig, createMockMessageBus());
|
||||
const call: CompletedToolCall = {
|
||||
status: 'success',
|
||||
status: CoreToolCallStatus.Success,
|
||||
request: {
|
||||
name: 'test-function',
|
||||
args: {
|
||||
@@ -1188,7 +1189,7 @@ describe('loggers', () => {
|
||||
|
||||
it('should merge data from response into metadata', () => {
|
||||
const call: CompletedToolCall = {
|
||||
status: 'success',
|
||||
status: CoreToolCallStatus.Success,
|
||||
request: {
|
||||
name: 'ask_user',
|
||||
args: { questions: [] },
|
||||
@@ -1234,7 +1235,7 @@ describe('loggers', () => {
|
||||
|
||||
it('should log a tool call with a reject decision', () => {
|
||||
const call: ErroredToolCall = {
|
||||
status: 'error',
|
||||
status: CoreToolCallStatus.Error,
|
||||
request: {
|
||||
name: 'test-function',
|
||||
args: {
|
||||
@@ -1312,7 +1313,7 @@ describe('loggers', () => {
|
||||
|
||||
it('should log a tool call with a modify decision', () => {
|
||||
const call: CompletedToolCall = {
|
||||
status: 'success',
|
||||
status: CoreToolCallStatus.Success,
|
||||
request: {
|
||||
name: 'test-function',
|
||||
args: {
|
||||
@@ -1392,7 +1393,7 @@ describe('loggers', () => {
|
||||
|
||||
it('should log a tool call without a decision', () => {
|
||||
const call: CompletedToolCall = {
|
||||
status: 'success',
|
||||
status: CoreToolCallStatus.Success,
|
||||
request: {
|
||||
name: 'test-function',
|
||||
args: {
|
||||
@@ -1472,7 +1473,7 @@ describe('loggers', () => {
|
||||
it('should log a failed tool call with an error', () => {
|
||||
const errorMessage = 'test-error';
|
||||
const call: ErroredToolCall = {
|
||||
status: 'error',
|
||||
status: CoreToolCallStatus.Error,
|
||||
request: {
|
||||
name: 'test-function',
|
||||
args: {
|
||||
@@ -1573,7 +1574,7 @@ describe('loggers', () => {
|
||||
);
|
||||
|
||||
const call: CompletedToolCall = {
|
||||
status: 'success',
|
||||
status: CoreToolCallStatus.Success,
|
||||
request: {
|
||||
name: 'mock_mcp_tool',
|
||||
args: { arg1: 'value1', arg2: 2 },
|
||||
@@ -1890,7 +1891,7 @@ describe('loggers', () => {
|
||||
'testing-id',
|
||||
'0.1.0',
|
||||
'git',
|
||||
'success',
|
||||
CoreToolCallStatus.Success,
|
||||
);
|
||||
|
||||
await logExtensionInstallEvent(mockConfig, event);
|
||||
@@ -1911,7 +1912,7 @@ describe('loggers', () => {
|
||||
extension_name: 'testing',
|
||||
extension_version: '0.1.0',
|
||||
extension_source: 'git',
|
||||
status: 'success',
|
||||
status: CoreToolCallStatus.Success,
|
||||
},
|
||||
});
|
||||
});
|
||||
@@ -1943,7 +1944,7 @@ describe('loggers', () => {
|
||||
'0.1.0',
|
||||
'0.1.1',
|
||||
'git',
|
||||
'success',
|
||||
CoreToolCallStatus.Success,
|
||||
);
|
||||
|
||||
await logExtensionUpdateEvent(mockConfig, event);
|
||||
@@ -1965,7 +1966,7 @@ describe('loggers', () => {
|
||||
extension_version: '0.1.0',
|
||||
extension_previous_version: '0.1.1',
|
||||
extension_source: 'git',
|
||||
status: 'success',
|
||||
status: CoreToolCallStatus.Success,
|
||||
},
|
||||
});
|
||||
});
|
||||
@@ -1993,7 +1994,7 @@ describe('loggers', () => {
|
||||
'testing',
|
||||
'testing-hash',
|
||||
'testing-id',
|
||||
'success',
|
||||
CoreToolCallStatus.Success,
|
||||
);
|
||||
|
||||
await logExtensionUninstall(mockConfig, event);
|
||||
@@ -2012,7 +2013,7 @@ describe('loggers', () => {
|
||||
'event.timestamp': '2025-01-01T00:00:00.000Z',
|
||||
interactive: false,
|
||||
extension_name: 'testing',
|
||||
status: 'success',
|
||||
status: CoreToolCallStatus.Success,
|
||||
},
|
||||
});
|
||||
});
|
||||
|
||||
@@ -14,6 +14,7 @@ import type { Config } from '../config/config.js';
|
||||
import type { ApprovalMode } from '../policy/types.js';
|
||||
|
||||
import type { CompletedToolCall } from '../core/coreToolScheduler.js';
|
||||
import { CoreToolCallStatus } from '../scheduler/types.js';
|
||||
import { DiscoveredMCPTool } from '../tools/mcp-tool.js';
|
||||
import { AuthType } from '../core/contentGenerator.js';
|
||||
import type { LogAttributes, LogRecord } from '@opentelemetry/api-logs';
|
||||
@@ -271,7 +272,7 @@ export class ToolCallEvent implements BaseTelemetryEvent {
|
||||
this.function_name = call.request.name;
|
||||
this.function_args = call.request.args;
|
||||
this.duration_ms = call.durationMs ?? 0;
|
||||
this.success = call.status === 'success';
|
||||
this.success = call.status === CoreToolCallStatus.Success;
|
||||
this.decision = call.outcome
|
||||
? getDecisionFromOutcome(call.outcome)
|
||||
: undefined;
|
||||
@@ -296,7 +297,7 @@ export class ToolCallEvent implements BaseTelemetryEvent {
|
||||
);
|
||||
|
||||
if (
|
||||
call.status === 'success' &&
|
||||
call.status === CoreToolCallStatus.Success &&
|
||||
typeof call.response.resultDisplay === 'object' &&
|
||||
call.response.resultDisplay !== null &&
|
||||
fileDiff
|
||||
@@ -317,7 +318,7 @@ export class ToolCallEvent implements BaseTelemetryEvent {
|
||||
}
|
||||
}
|
||||
|
||||
if (call.status === 'success' && call.response.data) {
|
||||
if (call.status === CoreToolCallStatus.Success && call.response.data) {
|
||||
this.metadata = { ...this.metadata, ...call.response.data };
|
||||
}
|
||||
} else {
|
||||
@@ -352,7 +353,7 @@ export class ToolCallEvent implements BaseTelemetryEvent {
|
||||
};
|
||||
|
||||
if (this.error) {
|
||||
attributes['error'] = this.error;
|
||||
attributes[CoreToolCallStatus.Error] = this.error;
|
||||
attributes['error.message'] = this.error;
|
||||
if (this.error_type) {
|
||||
attributes['error_type'] = this.error_type;
|
||||
@@ -891,8 +892,8 @@ export function makeSlashCommandEvent({
|
||||
}
|
||||
|
||||
export enum SlashCommandStatus {
|
||||
SUCCESS = 'success',
|
||||
ERROR = 'error',
|
||||
SUCCESS = CoreToolCallStatus.Success,
|
||||
ERROR = CoreToolCallStatus.Error,
|
||||
}
|
||||
|
||||
export const EVENT_REWIND = 'gemini_cli.rewind';
|
||||
@@ -1294,7 +1295,7 @@ export class ExtensionInstallEvent implements BaseTelemetryEvent {
|
||||
extension_id: string;
|
||||
extension_version: string;
|
||||
extension_source: string;
|
||||
status: 'success' | 'error';
|
||||
status: CoreToolCallStatus.Success | CoreToolCallStatus.Error;
|
||||
|
||||
constructor(
|
||||
extension_name: string,
|
||||
@@ -1302,7 +1303,7 @@ export class ExtensionInstallEvent implements BaseTelemetryEvent {
|
||||
extension_id: string,
|
||||
extension_version: string,
|
||||
extension_source: string,
|
||||
status: 'success' | 'error',
|
||||
status: CoreToolCallStatus.Success | CoreToolCallStatus.Error,
|
||||
) {
|
||||
this['event.name'] = 'extension_install';
|
||||
this['event.timestamp'] = new Date().toISOString();
|
||||
@@ -1428,13 +1429,13 @@ export class ExtensionUninstallEvent implements BaseTelemetryEvent {
|
||||
extension_name: string;
|
||||
hashed_extension_name: string;
|
||||
extension_id: string;
|
||||
status: 'success' | 'error';
|
||||
status: CoreToolCallStatus.Success | CoreToolCallStatus.Error;
|
||||
|
||||
constructor(
|
||||
extension_name: string,
|
||||
hashed_extension_name: string,
|
||||
extension_id: string,
|
||||
status: 'success' | 'error',
|
||||
status: CoreToolCallStatus.Success | CoreToolCallStatus.Error,
|
||||
) {
|
||||
this['event.name'] = 'extension_uninstall';
|
||||
this['event.timestamp'] = new Date().toISOString();
|
||||
@@ -1469,7 +1470,7 @@ export class ExtensionUpdateEvent implements BaseTelemetryEvent {
|
||||
extension_previous_version: string;
|
||||
extension_version: string;
|
||||
extension_source: string;
|
||||
status: 'success' | 'error';
|
||||
status: CoreToolCallStatus.Success | CoreToolCallStatus.Error;
|
||||
|
||||
constructor(
|
||||
extension_name: string,
|
||||
@@ -1478,7 +1479,7 @@ export class ExtensionUpdateEvent implements BaseTelemetryEvent {
|
||||
extension_version: string,
|
||||
extension_previous_version: string,
|
||||
extension_source: string,
|
||||
status: 'success' | 'error',
|
||||
status: CoreToolCallStatus.Success | CoreToolCallStatus.Error,
|
||||
) {
|
||||
this['event.name'] = 'extension_update';
|
||||
this['event.timestamp'] = new Date().toISOString();
|
||||
@@ -1721,9 +1722,9 @@ export const EVENT_EDIT_CORRECTION = 'gemini_cli.edit_correction';
|
||||
export class EditCorrectionEvent implements BaseTelemetryEvent {
|
||||
'event.name': 'edit_correction';
|
||||
'event.timestamp': string;
|
||||
correction: 'success' | 'failure';
|
||||
correction: CoreToolCallStatus.Success | 'failure';
|
||||
|
||||
constructor(correction: 'success' | 'failure') {
|
||||
constructor(correction: CoreToolCallStatus.Success | 'failure') {
|
||||
this['event.name'] = 'edit_correction';
|
||||
this['event.timestamp'] = new Date().toISOString();
|
||||
this.correction = correction;
|
||||
@@ -2098,7 +2099,7 @@ export class HookCallEvent implements BaseTelemetryEvent {
|
||||
|
||||
if (this.error) {
|
||||
// Always log errors
|
||||
attributes['error'] = this.error;
|
||||
attributes[CoreToolCallStatus.Error] = this.error;
|
||||
}
|
||||
|
||||
return attributes;
|
||||
|
||||
Reference in New Issue
Block a user