@google/gemini-cli-core 0.15.0-preview.0 → 0.16.0-nightly.20251112.c961f274
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.16.0-nightly.20251112.2abc288c.tgz +0 -0
- package/dist/src/agents/codebase-investigator.test.d.ts +6 -0
- package/dist/src/agents/codebase-investigator.test.js +35 -0
- package/dist/src/agents/codebase-investigator.test.js.map +1 -0
- package/dist/src/agents/executor.test.js +181 -1
- package/dist/src/agents/executor.test.js.map +1 -1
- package/dist/src/code_assist/codeAssist.test.d.ts +6 -0
- package/dist/src/code_assist/codeAssist.test.js +99 -0
- package/dist/src/code_assist/codeAssist.test.js.map +1 -0
- package/dist/src/code_assist/experiments/client_metadata.test.d.ts +6 -0
- package/dist/src/code_assist/experiments/client_metadata.test.js +94 -0
- package/dist/src/code_assist/experiments/client_metadata.test.js.map +1 -0
- package/dist/src/code_assist/experiments/experiments.test.d.ts +6 -0
- package/dist/src/code_assist/experiments/experiments.test.js +92 -0
- package/dist/src/code_assist/experiments/experiments.test.js.map +1 -0
- package/dist/src/code_assist/oauth-credential-storage.test.js +49 -0
- package/dist/src/code_assist/oauth-credential-storage.test.js.map +1 -1
- package/dist/src/code_assist/server.js +5 -8
- package/dist/src/code_assist/server.js.map +1 -1
- package/dist/src/code_assist/server.test.js +109 -28
- package/dist/src/code_assist/server.test.js.map +1 -1
- package/dist/src/config/defaultModelConfigs.js +6 -0
- package/dist/src/config/defaultModelConfigs.js.map +1 -1
- package/dist/src/core/loggingContentGenerator.test.d.ts +6 -0
- package/dist/src/core/loggingContentGenerator.test.js +180 -0
- package/dist/src/core/loggingContentGenerator.test.js.map +1 -0
- package/dist/src/core/tokenLimits.test.d.ts +6 -0
- package/dist/src/core/tokenLimits.test.js +26 -0
- package/dist/src/core/tokenLimits.test.js.map +1 -0
- package/dist/src/generated/git-commit.d.ts +2 -2
- package/dist/src/generated/git-commit.js +2 -2
- package/dist/src/generated/git-commit.js.map +1 -1
- package/dist/src/hooks/types.js +1 -1
- package/dist/src/hooks/types.js.map +1 -1
- package/dist/src/hooks/types.test.js +280 -2
- package/dist/src/hooks/types.test.js.map +1 -1
- package/dist/src/ide/ide-client.test.js +159 -0
- package/dist/src/ide/ide-client.test.js.map +1 -1
- package/dist/src/mcp/oauth-provider.test.js +177 -0
- package/dist/src/mcp/oauth-provider.test.js.map +1 -1
- package/dist/src/prompts/mcp-prompts.test.d.ts +6 -0
- package/dist/src/prompts/mcp-prompts.test.js +40 -0
- package/dist/src/prompts/mcp-prompts.test.js.map +1 -0
- package/dist/src/prompts/prompt-registry.test.d.ts +6 -0
- package/dist/src/prompts/prompt-registry.test.js +111 -0
- package/dist/src/prompts/prompt-registry.test.js.map +1 -0
- package/dist/src/services/loopDetectionService.d.ts +3 -0
- package/dist/src/services/loopDetectionService.js +81 -41
- package/dist/src/services/loopDetectionService.js.map +1 -1
- package/dist/src/services/loopDetectionService.test.js +96 -4
- package/dist/src/services/loopDetectionService.test.js.map +1 -1
- package/dist/src/services/test-data/resolved-aliases.golden.json +7 -0
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +4 -2
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +29 -0
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js +31 -0
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js.map +1 -1
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +5 -1
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +12 -1
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -1
- package/dist/src/telemetry/loggers.d.ts +2 -1
- package/dist/src/telemetry/loggers.js +11 -0
- package/dist/src/telemetry/loggers.js.map +1 -1
- package/dist/src/telemetry/types.d.ts +15 -2
- package/dist/src/telemetry/types.js +42 -3
- package/dist/src/telemetry/types.js.map +1 -1
- package/dist/src/tools/memoryTool.js +1 -1
- package/dist/src/tools/memoryTool.js.map +1 -1
- package/dist/src/tools/memoryTool.test.js +1 -1
- package/dist/src/tools/memoryTool.test.js.map +1 -1
- package/dist/src/tools/ripGrep.d.ts +24 -7
- package/dist/src/tools/ripGrep.js +125 -145
- package/dist/src/tools/ripGrep.js.map +1 -1
- package/dist/src/tools/ripGrep.test.js +144 -20
- package/dist/src/tools/ripGrep.test.js.map +1 -1
- package/dist/src/tools/tools.js +1 -1
- package/dist/src/tools/tools.js.map +1 -1
- package/dist/src/tools/write-todos.js +1 -1
- package/dist/src/tools/write-todos.js.map +1 -1
- package/dist/src/utils/llm-edit-fixer.test.js +8 -1
- package/dist/src/utils/llm-edit-fixer.test.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
const logApiRequest = vi.hoisted(() => vi.fn());
|
|
7
|
+
const logApiResponse = vi.hoisted(() => vi.fn());
|
|
8
|
+
const logApiError = vi.hoisted(() => vi.fn());
|
|
9
|
+
vi.mock('../telemetry/loggers.js', () => ({
|
|
10
|
+
logApiRequest,
|
|
11
|
+
logApiResponse,
|
|
12
|
+
logApiError,
|
|
13
|
+
}));
|
|
14
|
+
const runInDevTraceSpan = vi.hoisted(() => vi.fn(async (meta, fn) => fn({ metadata: {}, endSpan: vi.fn() })));
|
|
15
|
+
vi.mock('../telemetry/trace.js', () => ({
|
|
16
|
+
runInDevTraceSpan,
|
|
17
|
+
}));
|
|
18
|
+
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
|
|
19
|
+
import { LoggingContentGenerator } from './loggingContentGenerator.js';
|
|
20
|
+
import { ApiRequestEvent } from '../telemetry/types.js';
|
|
21
|
+
describe('LoggingContentGenerator', () => {
|
|
22
|
+
let wrapped;
|
|
23
|
+
let config;
|
|
24
|
+
let loggingContentGenerator;
|
|
25
|
+
beforeEach(() => {
|
|
26
|
+
wrapped = {
|
|
27
|
+
generateContent: vi.fn(),
|
|
28
|
+
generateContentStream: vi.fn(),
|
|
29
|
+
countTokens: vi.fn(),
|
|
30
|
+
embedContent: vi.fn(),
|
|
31
|
+
};
|
|
32
|
+
config = {
|
|
33
|
+
getGoogleAIConfig: vi.fn(),
|
|
34
|
+
getVertexAIConfig: vi.fn(),
|
|
35
|
+
getContentGeneratorConfig: vi.fn().mockReturnValue({
|
|
36
|
+
authType: 'API_KEY',
|
|
37
|
+
}),
|
|
38
|
+
};
|
|
39
|
+
loggingContentGenerator = new LoggingContentGenerator(wrapped, config);
|
|
40
|
+
vi.useFakeTimers();
|
|
41
|
+
});
|
|
42
|
+
afterEach(() => {
|
|
43
|
+
vi.clearAllMocks();
|
|
44
|
+
vi.useRealTimers();
|
|
45
|
+
});
|
|
46
|
+
describe('generateContent', () => {
|
|
47
|
+
it('should log request and response on success', async () => {
|
|
48
|
+
const req = {
|
|
49
|
+
contents: [{ role: 'user', parts: [{ text: 'hello' }] }],
|
|
50
|
+
model: 'gemini-pro',
|
|
51
|
+
};
|
|
52
|
+
const userPromptId = 'prompt-123';
|
|
53
|
+
const response = {
|
|
54
|
+
candidates: [],
|
|
55
|
+
usageMetadata: {
|
|
56
|
+
promptTokenCount: 1,
|
|
57
|
+
candidatesTokenCount: 2,
|
|
58
|
+
totalTokenCount: 3,
|
|
59
|
+
},
|
|
60
|
+
text: undefined,
|
|
61
|
+
functionCalls: undefined,
|
|
62
|
+
executableCode: undefined,
|
|
63
|
+
codeExecutionResult: undefined,
|
|
64
|
+
data: undefined,
|
|
65
|
+
};
|
|
66
|
+
vi.mocked(wrapped.generateContent).mockResolvedValue(response);
|
|
67
|
+
const startTime = new Date('2025-01-01T00:00:00.000Z');
|
|
68
|
+
vi.setSystemTime(startTime);
|
|
69
|
+
const promise = loggingContentGenerator.generateContent(req, userPromptId);
|
|
70
|
+
vi.advanceTimersByTime(1000);
|
|
71
|
+
await promise;
|
|
72
|
+
expect(wrapped.generateContent).toHaveBeenCalledWith(req, userPromptId);
|
|
73
|
+
expect(logApiRequest).toHaveBeenCalledWith(config, expect.any(ApiRequestEvent));
|
|
74
|
+
const responseEvent = vi.mocked(logApiResponse).mock.calls[0][1];
|
|
75
|
+
expect(responseEvent.duration_ms).toBe(1000);
|
|
76
|
+
});
|
|
77
|
+
it('should log error on failure', async () => {
|
|
78
|
+
const req = {
|
|
79
|
+
contents: [{ role: 'user', parts: [{ text: 'hello' }] }],
|
|
80
|
+
model: 'gemini-pro',
|
|
81
|
+
};
|
|
82
|
+
const userPromptId = 'prompt-123';
|
|
83
|
+
const error = new Error('test error');
|
|
84
|
+
vi.mocked(wrapped.generateContent).mockRejectedValue(error);
|
|
85
|
+
const startTime = new Date('2025-01-01T00:00:00.000Z');
|
|
86
|
+
vi.setSystemTime(startTime);
|
|
87
|
+
const promise = loggingContentGenerator.generateContent(req, userPromptId);
|
|
88
|
+
vi.advanceTimersByTime(1000);
|
|
89
|
+
await expect(promise).rejects.toThrow(error);
|
|
90
|
+
expect(logApiRequest).toHaveBeenCalledWith(config, expect.any(ApiRequestEvent));
|
|
91
|
+
const errorEvent = vi.mocked(logApiError).mock.calls[0][1];
|
|
92
|
+
expect(errorEvent.duration_ms).toBe(1000);
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
describe('generateContentStream', () => {
|
|
96
|
+
it('should log request and response on success', async () => {
|
|
97
|
+
const req = {
|
|
98
|
+
contents: [{ role: 'user', parts: [{ text: 'hello' }] }],
|
|
99
|
+
model: 'gemini-pro',
|
|
100
|
+
};
|
|
101
|
+
const userPromptId = 'prompt-123';
|
|
102
|
+
const response = {
|
|
103
|
+
candidates: [],
|
|
104
|
+
usageMetadata: {
|
|
105
|
+
promptTokenCount: 1,
|
|
106
|
+
candidatesTokenCount: 2,
|
|
107
|
+
totalTokenCount: 3,
|
|
108
|
+
},
|
|
109
|
+
};
|
|
110
|
+
async function* createAsyncGenerator() {
|
|
111
|
+
yield response;
|
|
112
|
+
}
|
|
113
|
+
vi.mocked(wrapped.generateContentStream).mockResolvedValue(createAsyncGenerator());
|
|
114
|
+
const startTime = new Date('2025-01-01T00:00:00.000Z');
|
|
115
|
+
vi.setSystemTime(startTime);
|
|
116
|
+
const stream = await loggingContentGenerator.generateContentStream(req, userPromptId);
|
|
117
|
+
vi.advanceTimersByTime(1000);
|
|
118
|
+
for await (const _ of stream) {
|
|
119
|
+
// consume stream
|
|
120
|
+
}
|
|
121
|
+
expect(wrapped.generateContentStream).toHaveBeenCalledWith(req, userPromptId);
|
|
122
|
+
expect(logApiRequest).toHaveBeenCalledWith(config, expect.any(ApiRequestEvent));
|
|
123
|
+
const responseEvent = vi.mocked(logApiResponse).mock.calls[0][1];
|
|
124
|
+
expect(responseEvent.duration_ms).toBe(1000);
|
|
125
|
+
});
|
|
126
|
+
it('should log error on failure', async () => {
|
|
127
|
+
const req = {
|
|
128
|
+
contents: [{ role: 'user', parts: [{ text: 'hello' }] }],
|
|
129
|
+
model: 'gemini-pro',
|
|
130
|
+
};
|
|
131
|
+
const userPromptId = 'prompt-123';
|
|
132
|
+
const error = new Error('test error');
|
|
133
|
+
async function* createAsyncGenerator() {
|
|
134
|
+
yield Promise.reject(error);
|
|
135
|
+
}
|
|
136
|
+
vi.mocked(wrapped.generateContentStream).mockResolvedValue(createAsyncGenerator());
|
|
137
|
+
const startTime = new Date('2025-01-01T00:00:00.000Z');
|
|
138
|
+
vi.setSystemTime(startTime);
|
|
139
|
+
const stream = await loggingContentGenerator.generateContentStream(req, userPromptId);
|
|
140
|
+
vi.advanceTimersByTime(1000);
|
|
141
|
+
await expect(async () => {
|
|
142
|
+
for await (const _ of stream) {
|
|
143
|
+
// do nothing
|
|
144
|
+
}
|
|
145
|
+
}).rejects.toThrow(error);
|
|
146
|
+
expect(logApiRequest).toHaveBeenCalledWith(config, expect.any(ApiRequestEvent));
|
|
147
|
+
const errorEvent = vi.mocked(logApiError).mock.calls[0][1];
|
|
148
|
+
expect(errorEvent.duration_ms).toBe(1000);
|
|
149
|
+
});
|
|
150
|
+
});
|
|
151
|
+
describe('getWrapped', () => {
|
|
152
|
+
it('should return the wrapped content generator', () => {
|
|
153
|
+
expect(loggingContentGenerator.getWrapped()).toBe(wrapped);
|
|
154
|
+
});
|
|
155
|
+
});
|
|
156
|
+
describe('countTokens', () => {
|
|
157
|
+
it('should call the wrapped countTokens method', async () => {
|
|
158
|
+
const req = { contents: [], model: 'gemini-pro' };
|
|
159
|
+
const response = { totalTokens: 10 };
|
|
160
|
+
vi.mocked(wrapped.countTokens).mockResolvedValue(response);
|
|
161
|
+
const result = await loggingContentGenerator.countTokens(req);
|
|
162
|
+
expect(wrapped.countTokens).toHaveBeenCalledWith(req);
|
|
163
|
+
expect(result).toBe(response);
|
|
164
|
+
});
|
|
165
|
+
});
|
|
166
|
+
describe('embedContent', () => {
|
|
167
|
+
it('should call the wrapped embedContent method', async () => {
|
|
168
|
+
const req = {
|
|
169
|
+
contents: [{ role: 'user', parts: [] }],
|
|
170
|
+
model: 'gemini-pro',
|
|
171
|
+
};
|
|
172
|
+
const response = { embeddings: [{ values: [] }] };
|
|
173
|
+
vi.mocked(wrapped.embedContent).mockResolvedValue(response);
|
|
174
|
+
const result = await loggingContentGenerator.embedContent(req);
|
|
175
|
+
expect(wrapped.embedContent).toHaveBeenCalledWith(req);
|
|
176
|
+
expect(result).toBe(response);
|
|
177
|
+
});
|
|
178
|
+
});
|
|
179
|
+
});
|
|
180
|
+
//# sourceMappingURL=loggingContentGenerator.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loggingContentGenerator.test.js","sourceRoot":"","sources":["../../../src/core/loggingContentGenerator.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { describe, it, expect } from 'vitest';
|
|
7
|
+
import { tokenLimit, DEFAULT_TOKEN_LIMIT } from './tokenLimits.js';
|
|
8
|
+
describe('tokenLimit', () => {
|
|
9
|
+
it('should return the correct token limit for gemini-1.5-pro', () => {
|
|
10
|
+
expect(tokenLimit('gemini-1.5-pro')).toBe(2_097_152);
|
|
11
|
+
});
|
|
12
|
+
it('should return the correct token limit for gemini-1.5-flash', () => {
|
|
13
|
+
expect(tokenLimit('gemini-1.5-flash')).toBe(1_048_576);
|
|
14
|
+
});
|
|
15
|
+
it('should return the default token limit for an unknown model', () => {
|
|
16
|
+
expect(tokenLimit('unknown-model')).toBe(DEFAULT_TOKEN_LIMIT);
|
|
17
|
+
});
|
|
18
|
+
it('should return the default token limit if no model is provided', () => {
|
|
19
|
+
// @ts-expect-error testing invalid input
|
|
20
|
+
expect(tokenLimit(undefined)).toBe(DEFAULT_TOKEN_LIMIT);
|
|
21
|
+
});
|
|
22
|
+
it('should have the correct default token limit value', () => {
|
|
23
|
+
expect(DEFAULT_TOKEN_LIMIT).toBe(1_048_576);
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
//# sourceMappingURL=tokenLimits.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokenLimits.test.js","sourceRoot":"","sources":["../../../src/core/tokenLimits.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEnE,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;QAClE,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACpE,MAAM,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACpE,MAAM,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;QACvE,yCAAyC;QACzC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,MAAM,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -3,5 +3,5 @@
|
|
|
3
3
|
* Copyright 2025 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.
|
|
6
|
+
export declare const GIT_COMMIT_INFO = "c961f274";
|
|
7
|
+
export declare const CLI_VERSION = "0.16.0-nightly.20251112.c961f274";
|
|
@@ -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.
|
|
8
|
+
export const GIT_COMMIT_INFO = 'c961f274';
|
|
9
|
+
export const CLI_VERSION = '0.16.0-nightly.20251112.c961f274';
|
|
10
10
|
//# sourceMappingURL=git-commit.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git-commit.js","sourceRoot":"","sources":["../../../src/generated/git-commit.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,wFAAwF;AACxF,kCAAkC;AAClC,MAAM,CAAC,MAAM,eAAe,GAAG,UAAU,CAAC;AAC1C,MAAM,CAAC,MAAM,WAAW,GAAG,
|
|
1
|
+
{"version":3,"file":"git-commit.js","sourceRoot":"","sources":["../../../src/generated/git-commit.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,wFAAwF;AACxF,kCAAkC;AAClC,MAAM,CAAC,MAAM,eAAe,GAAG,UAAU,CAAC;AAC1C,MAAM,CAAC,MAAM,WAAW,GAAG,kCAAkC,CAAC"}
|
package/dist/src/hooks/types.js
CHANGED
|
@@ -222,7 +222,7 @@ export class AfterModelHookOutput extends DefaultHookOutput {
|
|
|
222
222
|
getModifiedResponse() {
|
|
223
223
|
if (this.hookSpecificOutput && 'llm_response' in this.hookSpecificOutput) {
|
|
224
224
|
const hookResponse = this.hookSpecificOutput['llm_response'];
|
|
225
|
-
if (hookResponse?.candidates?.[0]?.content) {
|
|
225
|
+
if (hookResponse?.candidates?.[0]?.content?.parts?.length) {
|
|
226
226
|
// Convert hook format to SDK format
|
|
227
227
|
return defaultHookTranslator.fromHookLLMResponse(hookResponse);
|
|
228
228
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/hooks/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/hooks/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,8 +3,19 @@
|
|
|
3
3
|
* Copyright 2025 Google LLC
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
-
import { describe, it, expect } from 'vitest';
|
|
7
|
-
import { HookEventName, HookType } from './types.js';
|
|
6
|
+
import { describe, it, expect, vi } from 'vitest';
|
|
7
|
+
import { createHookOutput, DefaultHookOutput, BeforeToolHookOutput, BeforeModelHookOutput, BeforeToolSelectionHookOutput, AfterModelHookOutput, HookEventName, HookType, } from './types.js';
|
|
8
|
+
import { defaultHookTranslator } from './hookTranslator.js';
|
|
9
|
+
vi.mock('./hookTranslator.js', () => ({
|
|
10
|
+
defaultHookTranslator: {
|
|
11
|
+
fromHookLLMResponse: vi.fn((response) => response),
|
|
12
|
+
fromHookLLMRequest: vi.fn((request, target) => ({
|
|
13
|
+
...target,
|
|
14
|
+
...request,
|
|
15
|
+
})),
|
|
16
|
+
fromHookToolConfig: vi.fn((config) => config),
|
|
17
|
+
},
|
|
18
|
+
}));
|
|
8
19
|
describe('Hook Types', () => {
|
|
9
20
|
describe('HookEventName', () => {
|
|
10
21
|
it('should contain all required event names', () => {
|
|
@@ -32,4 +43,271 @@ describe('Hook Types', () => {
|
|
|
32
43
|
});
|
|
33
44
|
});
|
|
34
45
|
});
|
|
46
|
+
describe('Hook Output Classes', () => {
|
|
47
|
+
describe('createHookOutput', () => {
|
|
48
|
+
it('should return DefaultHookOutput for unknown event names', () => {
|
|
49
|
+
const output = createHookOutput('UnknownEvent', {});
|
|
50
|
+
expect(output).toBeInstanceOf(DefaultHookOutput);
|
|
51
|
+
expect(output).not.toBeInstanceOf(BeforeModelHookOutput);
|
|
52
|
+
expect(output).not.toBeInstanceOf(AfterModelHookOutput);
|
|
53
|
+
expect(output).not.toBeInstanceOf(BeforeToolSelectionHookOutput);
|
|
54
|
+
});
|
|
55
|
+
it('should return BeforeModelHookOutput for BeforeModel event', () => {
|
|
56
|
+
const output = createHookOutput(HookEventName.BeforeModel, {});
|
|
57
|
+
expect(output).toBeInstanceOf(BeforeModelHookOutput);
|
|
58
|
+
});
|
|
59
|
+
it('should return AfterModelHookOutput for AfterModel event', () => {
|
|
60
|
+
const output = createHookOutput(HookEventName.AfterModel, {});
|
|
61
|
+
expect(output).toBeInstanceOf(AfterModelHookOutput);
|
|
62
|
+
});
|
|
63
|
+
it('should return BeforeToolSelectionHookOutput for BeforeToolSelection event', () => {
|
|
64
|
+
const output = createHookOutput(HookEventName.BeforeToolSelection, {});
|
|
65
|
+
expect(output).toBeInstanceOf(BeforeToolSelectionHookOutput);
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
describe('DefaultHookOutput', () => {
|
|
69
|
+
it('should construct with provided data', () => {
|
|
70
|
+
const data = {
|
|
71
|
+
continue: false,
|
|
72
|
+
stopReason: 'test stop',
|
|
73
|
+
suppressOutput: true,
|
|
74
|
+
systemMessage: 'test system message',
|
|
75
|
+
decision: 'block',
|
|
76
|
+
reason: 'test reason',
|
|
77
|
+
hookSpecificOutput: { key: 'value' },
|
|
78
|
+
};
|
|
79
|
+
const output = new DefaultHookOutput(data);
|
|
80
|
+
expect(output.continue).toBe(data.continue);
|
|
81
|
+
expect(output.stopReason).toBe(data.stopReason);
|
|
82
|
+
expect(output.suppressOutput).toBe(data.suppressOutput);
|
|
83
|
+
expect(output.systemMessage).toBe(data.systemMessage);
|
|
84
|
+
expect(output.decision).toBe(data.decision);
|
|
85
|
+
expect(output.reason).toBe(data.reason);
|
|
86
|
+
expect(output.hookSpecificOutput).toEqual(data.hookSpecificOutput);
|
|
87
|
+
});
|
|
88
|
+
it('should return false for isBlockingDecision if decision is not block or deny', () => {
|
|
89
|
+
const output1 = new DefaultHookOutput({ decision: 'approve' });
|
|
90
|
+
expect(output1.isBlockingDecision()).toBe(false);
|
|
91
|
+
const output2 = new DefaultHookOutput({ decision: undefined });
|
|
92
|
+
expect(output2.isBlockingDecision()).toBe(false);
|
|
93
|
+
});
|
|
94
|
+
it('should return true for isBlockingDecision if decision is block or deny', () => {
|
|
95
|
+
const output1 = new DefaultHookOutput({ decision: 'block' });
|
|
96
|
+
expect(output1.isBlockingDecision()).toBe(true);
|
|
97
|
+
const output2 = new DefaultHookOutput({ decision: 'deny' });
|
|
98
|
+
expect(output2.isBlockingDecision()).toBe(true);
|
|
99
|
+
});
|
|
100
|
+
it('should return true for shouldStopExecution if continue is false', () => {
|
|
101
|
+
const output = new DefaultHookOutput({ continue: false });
|
|
102
|
+
expect(output.shouldStopExecution()).toBe(true);
|
|
103
|
+
});
|
|
104
|
+
it('should return false for shouldStopExecution if continue is true or undefined', () => {
|
|
105
|
+
const output1 = new DefaultHookOutput({ continue: true });
|
|
106
|
+
expect(output1.shouldStopExecution()).toBe(false);
|
|
107
|
+
const output2 = new DefaultHookOutput({});
|
|
108
|
+
expect(output2.shouldStopExecution()).toBe(false);
|
|
109
|
+
});
|
|
110
|
+
it('should return reason if available', () => {
|
|
111
|
+
const output = new DefaultHookOutput({ reason: 'specific reason' });
|
|
112
|
+
expect(output.getEffectiveReason()).toBe('specific reason');
|
|
113
|
+
});
|
|
114
|
+
it('should return stopReason if reason is not available', () => {
|
|
115
|
+
const output = new DefaultHookOutput({ stopReason: 'stop reason' });
|
|
116
|
+
expect(output.getEffectiveReason()).toBe('stop reason');
|
|
117
|
+
});
|
|
118
|
+
it('should return "No reason provided" if neither reason nor stopReason are available', () => {
|
|
119
|
+
const output = new DefaultHookOutput({});
|
|
120
|
+
expect(output.getEffectiveReason()).toBe('No reason provided');
|
|
121
|
+
});
|
|
122
|
+
it('applyLLMRequestModifications should return target unchanged', () => {
|
|
123
|
+
const target = {
|
|
124
|
+
model: 'gemini-pro',
|
|
125
|
+
contents: [],
|
|
126
|
+
};
|
|
127
|
+
const output = new DefaultHookOutput({});
|
|
128
|
+
expect(output.applyLLMRequestModifications(target)).toBe(target);
|
|
129
|
+
});
|
|
130
|
+
it('applyToolConfigModifications should return target unchanged', () => {
|
|
131
|
+
const target = { toolConfig: {}, tools: [] };
|
|
132
|
+
const output = new DefaultHookOutput({});
|
|
133
|
+
expect(output.applyToolConfigModifications(target)).toBe(target);
|
|
134
|
+
});
|
|
135
|
+
it('getAdditionalContext should return additionalContext if present', () => {
|
|
136
|
+
const output = new DefaultHookOutput({
|
|
137
|
+
hookSpecificOutput: { additionalContext: 'some context' },
|
|
138
|
+
});
|
|
139
|
+
expect(output.getAdditionalContext()).toBe('some context');
|
|
140
|
+
});
|
|
141
|
+
it('getAdditionalContext should return undefined if additionalContext is not present', () => {
|
|
142
|
+
const output = new DefaultHookOutput({
|
|
143
|
+
hookSpecificOutput: { other: 'value' },
|
|
144
|
+
});
|
|
145
|
+
expect(output.getAdditionalContext()).toBeUndefined();
|
|
146
|
+
});
|
|
147
|
+
it('getAdditionalContext should return undefined if hookSpecificOutput is undefined', () => {
|
|
148
|
+
const output = new DefaultHookOutput({});
|
|
149
|
+
expect(output.getAdditionalContext()).toBeUndefined();
|
|
150
|
+
});
|
|
151
|
+
it('getBlockingError should return blocked: true and reason if blocking decision', () => {
|
|
152
|
+
const output = new DefaultHookOutput({
|
|
153
|
+
decision: 'block',
|
|
154
|
+
reason: 'blocked by hook',
|
|
155
|
+
});
|
|
156
|
+
expect(output.getBlockingError()).toEqual({
|
|
157
|
+
blocked: true,
|
|
158
|
+
reason: 'blocked by hook',
|
|
159
|
+
});
|
|
160
|
+
});
|
|
161
|
+
it('getBlockingError should return blocked: false if not blocking decision', () => {
|
|
162
|
+
const output = new DefaultHookOutput({ decision: 'approve' });
|
|
163
|
+
expect(output.getBlockingError()).toEqual({ blocked: false, reason: '' });
|
|
164
|
+
});
|
|
165
|
+
});
|
|
166
|
+
describe('BeforeToolHookOutput', () => {
|
|
167
|
+
it('isBlockingDecision should use permissionDecision from hookSpecificOutput', () => {
|
|
168
|
+
const output1 = new BeforeToolHookOutput({
|
|
169
|
+
hookSpecificOutput: { permissionDecision: 'block' },
|
|
170
|
+
});
|
|
171
|
+
expect(output1.isBlockingDecision()).toBe(true);
|
|
172
|
+
const output2 = new BeforeToolHookOutput({
|
|
173
|
+
hookSpecificOutput: { permissionDecision: 'approve' },
|
|
174
|
+
});
|
|
175
|
+
expect(output2.isBlockingDecision()).toBe(false);
|
|
176
|
+
});
|
|
177
|
+
it('getEffectiveReason should use permissionDecisionReason from hookSpecificOutput', () => {
|
|
178
|
+
const output1 = new BeforeToolHookOutput({
|
|
179
|
+
hookSpecificOutput: { permissionDecisionReason: 'compat reason' },
|
|
180
|
+
});
|
|
181
|
+
expect(output1.getEffectiveReason()).toBe('compat reason');
|
|
182
|
+
const output2 = new BeforeToolHookOutput({
|
|
183
|
+
reason: 'default reason',
|
|
184
|
+
hookSpecificOutput: { other: 'value' },
|
|
185
|
+
});
|
|
186
|
+
expect(output2.getEffectiveReason()).toBe('default reason');
|
|
187
|
+
});
|
|
188
|
+
});
|
|
189
|
+
describe('BeforeModelHookOutput', () => {
|
|
190
|
+
it('getSyntheticResponse should return synthetic response if llm_response is present', () => {
|
|
191
|
+
const mockResponse = { candidates: [] };
|
|
192
|
+
const output = new BeforeModelHookOutput({
|
|
193
|
+
hookSpecificOutput: { llm_response: mockResponse },
|
|
194
|
+
});
|
|
195
|
+
expect(output.getSyntheticResponse()).toEqual(mockResponse);
|
|
196
|
+
expect(defaultHookTranslator.fromHookLLMResponse).toHaveBeenCalledWith(mockResponse);
|
|
197
|
+
});
|
|
198
|
+
it('getSyntheticResponse should return undefined if llm_response is not present', () => {
|
|
199
|
+
const output = new BeforeModelHookOutput({});
|
|
200
|
+
expect(output.getSyntheticResponse()).toBeUndefined();
|
|
201
|
+
});
|
|
202
|
+
it('applyLLMRequestModifications should apply modifications if llm_request is present', () => {
|
|
203
|
+
const target = {
|
|
204
|
+
model: 'gemini-pro',
|
|
205
|
+
contents: [{ parts: [{ text: 'original' }] }],
|
|
206
|
+
};
|
|
207
|
+
const mockRequest = {
|
|
208
|
+
messages: [{ role: 'user', content: 'modified' }],
|
|
209
|
+
};
|
|
210
|
+
const output = new BeforeModelHookOutput({
|
|
211
|
+
hookSpecificOutput: { llm_request: mockRequest },
|
|
212
|
+
});
|
|
213
|
+
const result = output.applyLLMRequestModifications(target);
|
|
214
|
+
expect(result).toEqual({ ...target, ...mockRequest });
|
|
215
|
+
expect(defaultHookTranslator.fromHookLLMRequest).toHaveBeenCalledWith(mockRequest, target);
|
|
216
|
+
});
|
|
217
|
+
it('applyLLMRequestModifications should return target unchanged if llm_request is not present', () => {
|
|
218
|
+
const target = {
|
|
219
|
+
model: 'gemini-pro',
|
|
220
|
+
contents: [],
|
|
221
|
+
};
|
|
222
|
+
const output = new BeforeModelHookOutput({});
|
|
223
|
+
expect(output.applyLLMRequestModifications(target)).toBe(target);
|
|
224
|
+
});
|
|
225
|
+
});
|
|
226
|
+
describe('BeforeToolSelectionHookOutput', () => {
|
|
227
|
+
it('applyToolConfigModifications should apply modifications if toolConfig is present', () => {
|
|
228
|
+
const target = { tools: [{ functionDeclarations: [] }] };
|
|
229
|
+
const mockToolConfig = { functionCallingConfig: { mode: 'ANY' } };
|
|
230
|
+
const output = new BeforeToolSelectionHookOutput({
|
|
231
|
+
hookSpecificOutput: { toolConfig: mockToolConfig },
|
|
232
|
+
});
|
|
233
|
+
const result = output.applyToolConfigModifications(target);
|
|
234
|
+
expect(result).toEqual({ ...target, toolConfig: mockToolConfig });
|
|
235
|
+
expect(defaultHookTranslator.fromHookToolConfig).toHaveBeenCalledWith(mockToolConfig);
|
|
236
|
+
});
|
|
237
|
+
it('applyToolConfigModifications should return target unchanged if toolConfig is not present', () => {
|
|
238
|
+
const target = { toolConfig: {}, tools: [] };
|
|
239
|
+
const output = new BeforeToolSelectionHookOutput({});
|
|
240
|
+
expect(output.applyToolConfigModifications(target)).toBe(target);
|
|
241
|
+
});
|
|
242
|
+
it('applyToolConfigModifications should initialize tools array if not present', () => {
|
|
243
|
+
const target = {};
|
|
244
|
+
const mockToolConfig = { functionCallingConfig: { mode: 'ANY' } };
|
|
245
|
+
const output = new BeforeToolSelectionHookOutput({
|
|
246
|
+
hookSpecificOutput: { toolConfig: mockToolConfig },
|
|
247
|
+
});
|
|
248
|
+
const result = output.applyToolConfigModifications(target);
|
|
249
|
+
expect(result).toEqual({ tools: [], toolConfig: mockToolConfig });
|
|
250
|
+
});
|
|
251
|
+
});
|
|
252
|
+
describe('AfterModelHookOutput', () => {
|
|
253
|
+
it('getModifiedResponse should return modified response if llm_response is present and has content', () => {
|
|
254
|
+
const mockResponse = {
|
|
255
|
+
candidates: [{ content: { role: 'model', parts: ['modified'] } }],
|
|
256
|
+
};
|
|
257
|
+
const output = new AfterModelHookOutput({
|
|
258
|
+
hookSpecificOutput: { llm_response: mockResponse },
|
|
259
|
+
});
|
|
260
|
+
expect(output.getModifiedResponse()).toEqual(mockResponse);
|
|
261
|
+
expect(defaultHookTranslator.fromHookLLMResponse).toHaveBeenCalledWith(mockResponse);
|
|
262
|
+
});
|
|
263
|
+
it('getModifiedResponse should return undefined if llm_response is present but no content', () => {
|
|
264
|
+
const mockResponse = {
|
|
265
|
+
candidates: [{ content: { role: 'model', parts: [] } }],
|
|
266
|
+
};
|
|
267
|
+
const output = new AfterModelHookOutput({
|
|
268
|
+
hookSpecificOutput: { llm_response: mockResponse },
|
|
269
|
+
});
|
|
270
|
+
expect(output.getModifiedResponse()).toBeUndefined();
|
|
271
|
+
});
|
|
272
|
+
it('getModifiedResponse should return undefined if llm_response is not present', () => {
|
|
273
|
+
const output = new AfterModelHookOutput({});
|
|
274
|
+
expect(output.getModifiedResponse()).toBeUndefined();
|
|
275
|
+
});
|
|
276
|
+
it('getModifiedResponse should return a synthetic stop response if shouldStopExecution is true', () => {
|
|
277
|
+
const output = new AfterModelHookOutput({
|
|
278
|
+
continue: false,
|
|
279
|
+
stopReason: 'stopped by hook',
|
|
280
|
+
});
|
|
281
|
+
const expectedResponse = {
|
|
282
|
+
candidates: [
|
|
283
|
+
{
|
|
284
|
+
content: {
|
|
285
|
+
role: 'model',
|
|
286
|
+
parts: ['stopped by hook'],
|
|
287
|
+
},
|
|
288
|
+
finishReason: 'STOP',
|
|
289
|
+
},
|
|
290
|
+
],
|
|
291
|
+
};
|
|
292
|
+
expect(output.getModifiedResponse()).toEqual(expectedResponse);
|
|
293
|
+
expect(defaultHookTranslator.fromHookLLMResponse).toHaveBeenCalledWith(expectedResponse);
|
|
294
|
+
});
|
|
295
|
+
it('getModifiedResponse should return a synthetic stop response with default reason if shouldStopExecution is true and no stopReason', () => {
|
|
296
|
+
const output = new AfterModelHookOutput({ continue: false });
|
|
297
|
+
const expectedResponse = {
|
|
298
|
+
candidates: [
|
|
299
|
+
{
|
|
300
|
+
content: {
|
|
301
|
+
role: 'model',
|
|
302
|
+
parts: ['No reason provided'],
|
|
303
|
+
},
|
|
304
|
+
finishReason: 'STOP',
|
|
305
|
+
},
|
|
306
|
+
],
|
|
307
|
+
};
|
|
308
|
+
expect(output.getModifiedResponse()).toEqual(expectedResponse);
|
|
309
|
+
expect(defaultHookTranslator.fromHookLLMResponse).toHaveBeenCalledWith(expectedResponse);
|
|
310
|
+
});
|
|
311
|
+
});
|
|
312
|
+
});
|
|
35
313
|
//# sourceMappingURL=types.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.test.js","sourceRoot":"","sources":["../../../src/hooks/types.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAErD,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;QAC7B,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;YACjD,MAAM,cAAc,GAAG;gBACrB,YAAY;gBACZ,WAAW;gBACX,aAAa;gBACb,cAAc;gBACd,YAAY;gBACZ,cAAc;gBACd,YAAY;gBACZ,aAAa;gBACb,aAAa;gBACb,YAAY;gBACZ,qBAAqB;aACtB,CAAC;YAEF,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;gBACnC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YACxD,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;QACxB,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;YACrC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"types.test.js","sourceRoot":"","sources":["../../../src/hooks/types.test.ts"],"names":[],"mappings":"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"}
|