@google/gemini-cli-core 0.41.0-preview.0 → 0.41.0-preview.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/google-gemini-cli-core-0.41.0-preview.0.tgz +0 -0
- package/dist/src/generated/git-commit.d.ts +2 -2
- package/dist/src/generated/git-commit.js +2 -2
- package/dist/src/telemetry/conseca-logger.js +18 -20
- package/dist/src/telemetry/conseca-logger.js.map +1 -1
- package/dist/src/telemetry/conseca-logger.test.js +99 -0
- package/dist/src/telemetry/conseca-logger.test.js.map +1 -1
- package/dist/src/telemetry/loggers.test.js +112 -4
- package/dist/src/telemetry/loggers.test.js.map +1 -1
- package/dist/src/telemetry/types.js +50 -11
- package/dist/src/telemetry/types.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
|
Binary file
|
|
@@ -3,5 +3,5 @@
|
|
|
3
3
|
* Copyright 2026 Google LLC
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
-
export declare const GIT_COMMIT_INFO = "
|
|
7
|
-
export declare const CLI_VERSION = "0.41.0-preview.
|
|
6
|
+
export declare const GIT_COMMIT_INFO = "7d233ddd5";
|
|
7
|
+
export declare const CLI_VERSION = "0.41.0-preview.1";
|
|
@@ -5,6 +5,6 @@
|
|
|
5
5
|
*/
|
|
6
6
|
// This file is auto-generated by the build script (scripts/generate-git-commit-info.js)
|
|
7
7
|
// Do not edit this file manually.
|
|
8
|
-
export const GIT_COMMIT_INFO = '
|
|
9
|
-
export const CLI_VERSION = '0.41.0-preview.
|
|
8
|
+
export const GIT_COMMIT_INFO = '7d233ddd5';
|
|
9
|
+
export const CLI_VERSION = '0.41.0-preview.1';
|
|
10
10
|
//# sourceMappingURL=git-commit.js.map
|
|
@@ -14,20 +14,19 @@ export function logConsecaPolicyGeneration(config, event) {
|
|
|
14
14
|
debugLogger.debug('Conseca Policy Generation Event:', event);
|
|
15
15
|
const clearcutLogger = ClearcutLogger.getInstance(config);
|
|
16
16
|
if (clearcutLogger) {
|
|
17
|
-
const data = [
|
|
18
|
-
|
|
17
|
+
const data = [];
|
|
18
|
+
if (config.getTelemetryLogPromptsEnabled()) {
|
|
19
|
+
data.push({
|
|
19
20
|
gemini_cli_key: EventMetadataKey.CONSECA_USER_PROMPT,
|
|
20
21
|
value: safeJsonStringify(event.user_prompt),
|
|
21
|
-
},
|
|
22
|
-
{
|
|
22
|
+
}, {
|
|
23
23
|
gemini_cli_key: EventMetadataKey.CONSECA_TRUSTED_CONTENT,
|
|
24
24
|
value: safeJsonStringify(event.trusted_content),
|
|
25
|
-
},
|
|
26
|
-
{
|
|
25
|
+
}, {
|
|
27
26
|
gemini_cli_key: EventMetadataKey.CONSECA_GENERATED_POLICY,
|
|
28
27
|
value: safeJsonStringify(event.policy),
|
|
29
|
-
}
|
|
30
|
-
|
|
28
|
+
});
|
|
29
|
+
}
|
|
31
30
|
if (event.error) {
|
|
32
31
|
data.push({
|
|
33
32
|
gemini_cli_key: EventMetadataKey.CONSECA_ERROR,
|
|
@@ -51,26 +50,25 @@ export function logConsecaVerdict(config, event) {
|
|
|
51
50
|
if (clearcutLogger) {
|
|
52
51
|
const data = [
|
|
53
52
|
{
|
|
53
|
+
gemini_cli_key: EventMetadataKey.CONSECA_VERDICT_RESULT,
|
|
54
|
+
value: safeJsonStringify(event.verdict),
|
|
55
|
+
},
|
|
56
|
+
];
|
|
57
|
+
if (config.getTelemetryLogPromptsEnabled()) {
|
|
58
|
+
data.push({
|
|
54
59
|
gemini_cli_key: EventMetadataKey.CONSECA_USER_PROMPT,
|
|
55
60
|
value: safeJsonStringify(event.user_prompt),
|
|
56
|
-
},
|
|
57
|
-
{
|
|
61
|
+
}, {
|
|
58
62
|
gemini_cli_key: EventMetadataKey.CONSECA_GENERATED_POLICY,
|
|
59
63
|
value: safeJsonStringify(event.policy),
|
|
60
|
-
},
|
|
61
|
-
{
|
|
64
|
+
}, {
|
|
62
65
|
gemini_cli_key: EventMetadataKey.GEMINI_CLI_TOOL_CALL_NAME,
|
|
63
66
|
value: safeJsonStringify(event.tool_call),
|
|
64
|
-
},
|
|
65
|
-
{
|
|
66
|
-
gemini_cli_key: EventMetadataKey.CONSECA_VERDICT_RESULT,
|
|
67
|
-
value: safeJsonStringify(event.verdict),
|
|
68
|
-
},
|
|
69
|
-
{
|
|
67
|
+
}, {
|
|
70
68
|
gemini_cli_key: EventMetadataKey.CONSECA_VERDICT_RATIONALE,
|
|
71
69
|
value: event.verdict_rationale,
|
|
72
|
-
}
|
|
73
|
-
|
|
70
|
+
});
|
|
71
|
+
}
|
|
74
72
|
if (event.error) {
|
|
75
73
|
data.push({
|
|
76
74
|
gemini_cli_key: EventMetadataKey.CONSECA_ERROR,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conseca-logger.js","sourceRoot":"","sources":["../../../src/telemetry/conseca-logger.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,IAAI,EAAkB,MAAM,yBAAyB,CAAC;AAE/D,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,yBAAyB,EAAE,MAAM,UAAU,CAAC;AACrD,OAAO,EACL,cAAc,EACd,UAAU,
|
|
1
|
+
{"version":3,"file":"conseca-logger.js","sourceRoot":"","sources":["../../../src/telemetry/conseca-logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,7 @@ import { logConsecaPolicyGeneration, logConsecaVerdict, } from './conseca-logger
|
|
|
9
9
|
import { ConsecaPolicyGenerationEvent, ConsecaVerdictEvent, EVENT_CONSECA_POLICY_GENERATION, EVENT_CONSECA_VERDICT, } from './types.js';
|
|
10
10
|
import * as sdk from './sdk.js';
|
|
11
11
|
import { ClearcutLogger } from './clearcut-logger/clearcut-logger.js';
|
|
12
|
+
import { EventMetadataKey } from './clearcut-logger/event-metadata-key.js';
|
|
12
13
|
vi.mock('@opentelemetry/api-logs');
|
|
13
14
|
vi.mock('./sdk.js');
|
|
14
15
|
vi.mock('./clearcut-logger/clearcut-logger.js');
|
|
@@ -87,5 +88,103 @@ describe('conseca-logger', () => {
|
|
|
87
88
|
logConsecaPolicyGeneration(mockConfig, event);
|
|
88
89
|
expect(mockLogger.emit).not.toHaveBeenCalled();
|
|
89
90
|
});
|
|
91
|
+
it('should omit user_prompt/trusted_content/policy from OTEL when logPrompts is disabled', () => {
|
|
92
|
+
const configNoPrompts = {
|
|
93
|
+
getTelemetryEnabled: vi.fn().mockReturnValue(true),
|
|
94
|
+
getSessionId: vi.fn().mockReturnValue('test-session-id'),
|
|
95
|
+
getTelemetryLogPromptsEnabled: vi.fn().mockReturnValue(false),
|
|
96
|
+
getTelemetryTracesEnabled: vi.fn().mockReturnValue(false),
|
|
97
|
+
isInteractive: vi.fn().mockReturnValue(true),
|
|
98
|
+
getExperiments: vi.fn().mockReturnValue({ experimentIds: [] }),
|
|
99
|
+
getContentGeneratorConfig: vi.fn().mockReturnValue({ authType: 'oauth' }),
|
|
100
|
+
};
|
|
101
|
+
const event = new ConsecaPolicyGenerationEvent('sensitive prompt', 'sensitive content', 'sensitive policy');
|
|
102
|
+
logConsecaPolicyGeneration(configNoPrompts, event);
|
|
103
|
+
const attrs = mockLogger.emit.mock.calls[0][0].attributes;
|
|
104
|
+
expect(attrs['user_prompt']).toBeUndefined();
|
|
105
|
+
expect(attrs['trusted_content']).toBeUndefined();
|
|
106
|
+
expect(attrs['policy']).toBeUndefined();
|
|
107
|
+
expect(attrs['event.name']).toBe(EVENT_CONSECA_POLICY_GENERATION);
|
|
108
|
+
});
|
|
109
|
+
it('should omit user_prompt/trusted_content/policy from Clearcut when logPrompts is disabled', () => {
|
|
110
|
+
const configNoPrompts = {
|
|
111
|
+
getTelemetryEnabled: vi.fn().mockReturnValue(true),
|
|
112
|
+
getSessionId: vi.fn().mockReturnValue('test-session-id'),
|
|
113
|
+
getTelemetryLogPromptsEnabled: vi.fn().mockReturnValue(false),
|
|
114
|
+
getTelemetryTracesEnabled: vi.fn().mockReturnValue(false),
|
|
115
|
+
isInteractive: vi.fn().mockReturnValue(true),
|
|
116
|
+
getExperiments: vi.fn().mockReturnValue({ experimentIds: [] }),
|
|
117
|
+
getContentGeneratorConfig: vi.fn().mockReturnValue({ authType: 'oauth' }),
|
|
118
|
+
};
|
|
119
|
+
const event = new ConsecaPolicyGenerationEvent('sensitive prompt', 'sensitive content', 'sensitive policy', 'some error');
|
|
120
|
+
logConsecaPolicyGeneration(configNoPrompts, event);
|
|
121
|
+
expect(mockClearcutLogger.createLogEvent).toHaveBeenCalledWith(expect.anything(), [
|
|
122
|
+
{
|
|
123
|
+
gemini_cli_key: EventMetadataKey.CONSECA_ERROR,
|
|
124
|
+
value: 'some error',
|
|
125
|
+
},
|
|
126
|
+
]);
|
|
127
|
+
});
|
|
128
|
+
it('should include user_prompt/trusted_content/policy in OTEL when logPrompts is enabled', () => {
|
|
129
|
+
const event = new ConsecaPolicyGenerationEvent('visible prompt', 'visible content', 'visible policy');
|
|
130
|
+
logConsecaPolicyGeneration(mockConfig, event);
|
|
131
|
+
const attrs = mockLogger.emit.mock.calls[0][0].attributes;
|
|
132
|
+
expect(attrs['user_prompt']).toBe('visible prompt');
|
|
133
|
+
expect(attrs['trusted_content']).toBe('visible content');
|
|
134
|
+
expect(attrs['policy']).toBe('visible policy');
|
|
135
|
+
});
|
|
136
|
+
it('should omit sensitive fields from verdict OTEL when logPrompts is disabled', () => {
|
|
137
|
+
const configNoPrompts = {
|
|
138
|
+
getTelemetryEnabled: vi.fn().mockReturnValue(true),
|
|
139
|
+
getSessionId: vi.fn().mockReturnValue('test-session-id'),
|
|
140
|
+
getTelemetryLogPromptsEnabled: vi.fn().mockReturnValue(false),
|
|
141
|
+
getTelemetryTracesEnabled: vi.fn().mockReturnValue(false),
|
|
142
|
+
isInteractive: vi.fn().mockReturnValue(true),
|
|
143
|
+
getExperiments: vi.fn().mockReturnValue({ experimentIds: [] }),
|
|
144
|
+
getContentGeneratorConfig: vi.fn().mockReturnValue({ authType: 'oauth' }),
|
|
145
|
+
};
|
|
146
|
+
const event = new ConsecaVerdictEvent('sensitive prompt', 'sensitive policy', 'sensitive tool call', 'allow', 'sensitive rationale');
|
|
147
|
+
logConsecaVerdict(configNoPrompts, event);
|
|
148
|
+
const attrs = mockLogger.emit.mock.calls[0][0].attributes;
|
|
149
|
+
expect(attrs['user_prompt']).toBeUndefined();
|
|
150
|
+
expect(attrs['policy']).toBeUndefined();
|
|
151
|
+
expect(attrs['tool_call']).toBeUndefined();
|
|
152
|
+
expect(attrs['verdict_rationale']).toBeUndefined();
|
|
153
|
+
// verdict (the allow/deny result) is not sensitive and should be present
|
|
154
|
+
expect(attrs['verdict']).toBe('allow');
|
|
155
|
+
});
|
|
156
|
+
it('should omit sensitive fields from verdict Clearcut when logPrompts is disabled', () => {
|
|
157
|
+
const configNoPrompts = {
|
|
158
|
+
getTelemetryEnabled: vi.fn().mockReturnValue(true),
|
|
159
|
+
getSessionId: vi.fn().mockReturnValue('test-session-id'),
|
|
160
|
+
getTelemetryLogPromptsEnabled: vi.fn().mockReturnValue(false),
|
|
161
|
+
getTelemetryTracesEnabled: vi.fn().mockReturnValue(false),
|
|
162
|
+
isInteractive: vi.fn().mockReturnValue(true),
|
|
163
|
+
getExperiments: vi.fn().mockReturnValue({ experimentIds: [] }),
|
|
164
|
+
getContentGeneratorConfig: vi.fn().mockReturnValue({ authType: 'oauth' }),
|
|
165
|
+
};
|
|
166
|
+
const event = new ConsecaVerdictEvent('sensitive prompt', 'sensitive policy', 'sensitive tool call', 'allow', 'sensitive rationale', 'some error');
|
|
167
|
+
logConsecaVerdict(configNoPrompts, event);
|
|
168
|
+
expect(mockClearcutLogger.createLogEvent).toHaveBeenCalledWith(expect.anything(), [
|
|
169
|
+
{
|
|
170
|
+
gemini_cli_key: EventMetadataKey.CONSECA_VERDICT_RESULT,
|
|
171
|
+
value: '"allow"',
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
gemini_cli_key: EventMetadataKey.CONSECA_ERROR,
|
|
175
|
+
value: 'some error',
|
|
176
|
+
},
|
|
177
|
+
]);
|
|
178
|
+
});
|
|
179
|
+
it('should include sensitive fields in verdict OTEL when logPrompts is enabled', () => {
|
|
180
|
+
const event = new ConsecaVerdictEvent('visible prompt', 'visible policy', 'visible tool call', 'deny', 'visible rationale');
|
|
181
|
+
logConsecaVerdict(mockConfig, event);
|
|
182
|
+
const attrs = mockLogger.emit.mock.calls[0][0].attributes;
|
|
183
|
+
expect(attrs['user_prompt']).toBe('visible prompt');
|
|
184
|
+
expect(attrs['policy']).toBe('visible policy');
|
|
185
|
+
expect(attrs['tool_call']).toBe('visible tool call');
|
|
186
|
+
expect(attrs['verdict_rationale']).toBe('visible rationale');
|
|
187
|
+
expect(attrs['verdict']).toBe('deny');
|
|
188
|
+
});
|
|
90
189
|
});
|
|
91
190
|
//# sourceMappingURL=conseca-logger.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conseca-logger.test.js","sourceRoot":"","sources":["../../../src/telemetry/conseca-logger.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACzE,OAAO,EAAE,IAAI,EAAe,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EACL,0BAA0B,EAC1B,iBAAiB,GAClB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,4BAA4B,EAC5B,mBAAmB,EACnB,+BAA+B,EAC/B,qBAAqB,GACtB,MAAM,YAAY,CAAC;AAEpB,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;
|
|
1
|
+
{"version":3,"file":"conseca-logger.test.js","sourceRoot":"","sources":["../../../src/telemetry/conseca-logger.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -419,6 +419,30 @@ describe('loggers', () => {
|
|
|
419
419
|
}),
|
|
420
420
|
});
|
|
421
421
|
});
|
|
422
|
+
it('should not include response_text when logPrompts is disabled', () => {
|
|
423
|
+
const mockConfigNoPrompts = {
|
|
424
|
+
getSessionId: () => 'test-session-id',
|
|
425
|
+
getTargetDir: () => 'target-dir',
|
|
426
|
+
getUsageStatisticsEnabled: () => true,
|
|
427
|
+
getTelemetryEnabled: () => true,
|
|
428
|
+
getTelemetryLogPromptsEnabled: () => false,
|
|
429
|
+
getTelemetryTracesEnabled: () => false,
|
|
430
|
+
isInteractive: () => false,
|
|
431
|
+
getExperiments: () => undefined,
|
|
432
|
+
getExperimentsAsync: async () => undefined,
|
|
433
|
+
getContentGeneratorConfig: () => undefined,
|
|
434
|
+
};
|
|
435
|
+
const event = new ApiResponseEvent('test-model', 100, { prompt_id: 'prompt-id-noprompts', contents: [] }, { candidates: [] }, AuthType.LOGIN_WITH_GOOGLE, {}, 'this response should be hidden');
|
|
436
|
+
logApiResponse(mockConfigNoPrompts, event);
|
|
437
|
+
const firstEmitCall = mockLogger.emit.mock.calls[0][0];
|
|
438
|
+
expect(firstEmitCall.attributes['response_text']).toBeUndefined();
|
|
439
|
+
});
|
|
440
|
+
it('should include response_text when logPrompts is enabled', () => {
|
|
441
|
+
const event = new ApiResponseEvent('test-model', 100, { prompt_id: 'prompt-id-withprompts', contents: [] }, { candidates: [] }, AuthType.LOGIN_WITH_GOOGLE, {}, 'this response should be visible');
|
|
442
|
+
logApiResponse(mockConfig, event);
|
|
443
|
+
const firstEmitCall = mockLogger.emit.mock.calls[0][0];
|
|
444
|
+
expect(firstEmitCall.attributes['response_text']).toBe('this response should be visible');
|
|
445
|
+
});
|
|
422
446
|
});
|
|
423
447
|
describe('logApiError', () => {
|
|
424
448
|
const mockConfig = {
|
|
@@ -750,6 +774,9 @@ describe('loggers', () => {
|
|
|
750
774
|
expect(attributes['gen_ai.provider.name']).toBe('gcp.vertex_ai');
|
|
751
775
|
// Ensure prompt messages are NOT included
|
|
752
776
|
expect(attributes['gen_ai.input.messages']).toBeUndefined();
|
|
777
|
+
// Ensure request_text is also NOT included in the first (toLogRecord) log
|
|
778
|
+
const firstLogCall = mockLogger.emit.mock.calls[0][0];
|
|
779
|
+
expect(firstLogCall.attributes['request_text']).toBeUndefined();
|
|
753
780
|
});
|
|
754
781
|
it('should correctly derive model from prompt details if available in semantic log', () => {
|
|
755
782
|
const mockConfig = {
|
|
@@ -990,7 +1017,7 @@ describe('loggers', () => {
|
|
|
990
1017
|
error_type: undefined,
|
|
991
1018
|
mcp_server_name: undefined,
|
|
992
1019
|
extension_id: undefined,
|
|
993
|
-
metadata: {
|
|
1020
|
+
metadata: JSON.stringify({
|
|
994
1021
|
model_added_lines: 1,
|
|
995
1022
|
model_removed_lines: 2,
|
|
996
1023
|
model_added_chars: 3,
|
|
@@ -999,7 +1026,7 @@ describe('loggers', () => {
|
|
|
999
1026
|
user_removed_lines: 6,
|
|
1000
1027
|
user_added_chars: 7,
|
|
1001
1028
|
user_removed_chars: 8,
|
|
1002
|
-
},
|
|
1029
|
+
}, null, 2),
|
|
1003
1030
|
content_length: 13,
|
|
1004
1031
|
},
|
|
1005
1032
|
});
|
|
@@ -1052,12 +1079,12 @@ describe('loggers', () => {
|
|
|
1052
1079
|
body: 'Tool call: ask_user. Decision: accept. Success: true. Duration: 100ms.',
|
|
1053
1080
|
attributes: expect.objectContaining({
|
|
1054
1081
|
function_name: 'ask_user',
|
|
1055
|
-
metadata:
|
|
1082
|
+
metadata: JSON.stringify({
|
|
1056
1083
|
ask_user: {
|
|
1057
1084
|
question_types: ['choice'],
|
|
1058
1085
|
dismissed: false,
|
|
1059
1086
|
},
|
|
1060
|
-
}),
|
|
1087
|
+
}, null, 2),
|
|
1061
1088
|
}),
|
|
1062
1089
|
});
|
|
1063
1090
|
});
|
|
@@ -1391,6 +1418,87 @@ describe('loggers', () => {
|
|
|
1391
1418
|
});
|
|
1392
1419
|
});
|
|
1393
1420
|
});
|
|
1421
|
+
describe('logToolCall — logPrompts flag', () => {
|
|
1422
|
+
it('should omit function_args when logPrompts is disabled', () => {
|
|
1423
|
+
const mockConfigNoPrompts = {
|
|
1424
|
+
getSessionId: () => 'test-session-id',
|
|
1425
|
+
getTargetDir: () => 'target-dir',
|
|
1426
|
+
getUsageStatisticsEnabled: () => true,
|
|
1427
|
+
getTelemetryEnabled: () => true,
|
|
1428
|
+
getTelemetryLogPromptsEnabled: () => false,
|
|
1429
|
+
getTelemetryTracesEnabled: () => false,
|
|
1430
|
+
isInteractive: () => false,
|
|
1431
|
+
getExperiments: () => undefined,
|
|
1432
|
+
getExperimentsAsync: async () => undefined,
|
|
1433
|
+
getContentGeneratorConfig: () => undefined,
|
|
1434
|
+
};
|
|
1435
|
+
const call = {
|
|
1436
|
+
status: CoreToolCallStatus.Success,
|
|
1437
|
+
request: {
|
|
1438
|
+
name: 'run_bash',
|
|
1439
|
+
args: { command: 'echo sensitive' },
|
|
1440
|
+
callId: 'call-1',
|
|
1441
|
+
isClientInitiated: false,
|
|
1442
|
+
prompt_id: 'prompt-noprompts',
|
|
1443
|
+
},
|
|
1444
|
+
response: {
|
|
1445
|
+
callId: 'call-1',
|
|
1446
|
+
responseParts: [],
|
|
1447
|
+
resultDisplay: undefined,
|
|
1448
|
+
error: undefined,
|
|
1449
|
+
errorType: undefined,
|
|
1450
|
+
contentLength: undefined,
|
|
1451
|
+
},
|
|
1452
|
+
tool: undefined,
|
|
1453
|
+
invocation: {},
|
|
1454
|
+
durationMs: 50,
|
|
1455
|
+
};
|
|
1456
|
+
const event = new ToolCallEvent(call);
|
|
1457
|
+
logToolCall(mockConfigNoPrompts, event);
|
|
1458
|
+
const emitted = mockLogger.emit.mock.calls[0][0];
|
|
1459
|
+
expect(emitted.attributes['function_args']).toBeUndefined();
|
|
1460
|
+
expect(emitted.attributes['function_name']).toBe('run_bash');
|
|
1461
|
+
});
|
|
1462
|
+
it('should include function_args when logPrompts is enabled', () => {
|
|
1463
|
+
const mockConfigWithPrompts = {
|
|
1464
|
+
getSessionId: () => 'test-session-id',
|
|
1465
|
+
getTargetDir: () => 'target-dir',
|
|
1466
|
+
getUsageStatisticsEnabled: () => true,
|
|
1467
|
+
getTelemetryEnabled: () => true,
|
|
1468
|
+
getTelemetryLogPromptsEnabled: () => true,
|
|
1469
|
+
getTelemetryTracesEnabled: () => false,
|
|
1470
|
+
isInteractive: () => false,
|
|
1471
|
+
getExperiments: () => undefined,
|
|
1472
|
+
getExperimentsAsync: async () => undefined,
|
|
1473
|
+
getContentGeneratorConfig: () => undefined,
|
|
1474
|
+
};
|
|
1475
|
+
const call = {
|
|
1476
|
+
status: CoreToolCallStatus.Success,
|
|
1477
|
+
request: {
|
|
1478
|
+
name: 'run_bash',
|
|
1479
|
+
args: { command: 'echo visible' },
|
|
1480
|
+
callId: 'call-2',
|
|
1481
|
+
isClientInitiated: false,
|
|
1482
|
+
prompt_id: 'prompt-withprompts',
|
|
1483
|
+
},
|
|
1484
|
+
response: {
|
|
1485
|
+
callId: 'call-2',
|
|
1486
|
+
responseParts: [],
|
|
1487
|
+
resultDisplay: undefined,
|
|
1488
|
+
error: undefined,
|
|
1489
|
+
errorType: undefined,
|
|
1490
|
+
contentLength: undefined,
|
|
1491
|
+
},
|
|
1492
|
+
tool: undefined,
|
|
1493
|
+
invocation: {},
|
|
1494
|
+
durationMs: 50,
|
|
1495
|
+
};
|
|
1496
|
+
const event = new ToolCallEvent(call);
|
|
1497
|
+
logToolCall(mockConfigWithPrompts, event);
|
|
1498
|
+
const emitted = mockLogger.emit.mock.calls[0][0];
|
|
1499
|
+
expect(emitted.attributes['function_args']).toBe(JSON.stringify({ command: 'echo visible' }, null, 2));
|
|
1500
|
+
});
|
|
1501
|
+
});
|
|
1394
1502
|
describe('logMalformedJsonResponse', () => {
|
|
1395
1503
|
beforeEach(() => {
|
|
1396
1504
|
vi.spyOn(ClearcutLogger.prototype, 'logMalformedJsonResponseEvent');
|