@google/gemini-cli-core 0.15.0-preview.3 → 0.16.0-nightly.20251113.ad1f0d99
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.c961f274.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.js +2 -1
- package/dist/src/code_assist/experiments/client_metadata.js.map +1 -1
- package/dist/src/code_assist/experiments/client_metadata.test.d.ts +6 -0
- package/dist/src/code_assist/experiments/client_metadata.test.js +99 -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/confirmation-bus/message-bus.d.ts +1 -1
- package/dist/src/confirmation-bus/message-bus.js +2 -2
- package/dist/src/confirmation-bus/message-bus.js.map +1 -1
- package/dist/src/confirmation-bus/message-bus.test.js +30 -24
- package/dist/src/confirmation-bus/message-bus.test.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/hookAggregator.d.ts +68 -0
- package/dist/src/hooks/hookAggregator.js +262 -0
- package/dist/src/hooks/hookAggregator.js.map +1 -0
- package/dist/src/hooks/hookAggregator.test.d.ts +6 -0
- package/dist/src/hooks/hookAggregator.test.js +387 -0
- package/dist/src/hooks/hookAggregator.test.js.map +1 -0
- 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/policy/config.js +3 -1
- package/dist/src/policy/config.js.map +1 -1
- package/dist/src/policy/config.test.js +118 -1
- package/dist/src/policy/config.test.js.map +1 -1
- package/dist/src/policy/policies/write.toml +10 -0
- package/dist/src/policy/policy-engine.d.ts +12 -3
- package/dist/src/policy/policy-engine.js +61 -7
- package/dist/src/policy/policy-engine.js.map +1 -1
- package/dist/src/policy/policy-engine.test.js +422 -86
- package/dist/src/policy/policy-engine.test.js.map +1 -1
- package/dist/src/policy/toml-loader.d.ts +2 -1
- package/dist/src/policy/toml-loader.js +103 -6
- package/dist/src/policy/toml-loader.js.map +1 -1
- package/dist/src/policy/toml-loader.test.js +32 -88
- package/dist/src/policy/toml-loader.test.js.map +1 -1
- package/dist/src/policy/types.d.ts +65 -0
- package/dist/src/policy/types.js +4 -0
- package/dist/src/policy/types.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/safety/built-in.d.ts +21 -0
- package/dist/src/safety/built-in.js +106 -0
- package/dist/src/safety/built-in.js.map +1 -0
- package/dist/src/safety/built-in.test.d.ts +6 -0
- package/dist/src/safety/built-in.test.js +199 -0
- package/dist/src/safety/built-in.test.js.map +1 -0
- package/dist/src/safety/checker-runner.d.ts +48 -0
- package/dist/src/safety/checker-runner.js +208 -0
- package/dist/src/safety/checker-runner.js.map +1 -0
- package/dist/src/safety/checker-runner.test.d.ts +6 -0
- package/dist/src/safety/checker-runner.test.js +238 -0
- package/dist/src/safety/checker-runner.test.js.map +1 -0
- package/dist/src/safety/context-builder.d.ts +23 -0
- package/dist/src/safety/context-builder.js +47 -0
- package/dist/src/safety/context-builder.js.map +1 -0
- package/dist/src/safety/context-builder.test.d.ts +6 -0
- package/dist/src/safety/context-builder.test.js +49 -0
- package/dist/src/safety/context-builder.test.js.map +1 -0
- package/dist/src/safety/protocol.d.ts +88 -0
- package/dist/src/safety/protocol.js +15 -0
- package/dist/src/safety/protocol.js.map +1 -0
- package/dist/src/safety/registry.d.ts +26 -0
- package/dist/src/safety/registry.js +65 -0
- package/dist/src/safety/registry.js.map +1 -0
- package/dist/src/safety/registry.test.d.ts +6 -0
- package/dist/src/safety/registry.test.js +31 -0
- package/dist/src/safety/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/base-tool-invocation.test.js +2 -2
- package/dist/src/tools/base-tool-invocation.test.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
- package/dist/google-gemini-cli-core-0.15.0-preview.2.tgz +0 -0
|
@@ -29,7 +29,7 @@ export class MessageBus extends EventEmitter {
|
|
|
29
29
|
emitMessage(message) {
|
|
30
30
|
this.emit(message.type, message);
|
|
31
31
|
}
|
|
32
|
-
publish(message) {
|
|
32
|
+
async publish(message) {
|
|
33
33
|
if (this.debug) {
|
|
34
34
|
console.debug(`[MESSAGE_BUS] publish: ${safeJsonStringify(message)}`);
|
|
35
35
|
}
|
|
@@ -38,7 +38,7 @@ export class MessageBus extends EventEmitter {
|
|
|
38
38
|
throw new Error(`Invalid message structure: ${safeJsonStringify(message)}`);
|
|
39
39
|
}
|
|
40
40
|
if (message.type === MessageBusType.TOOL_CONFIRMATION_REQUEST) {
|
|
41
|
-
const decision = this.policyEngine.check(message.toolCall, message.serverName);
|
|
41
|
+
const { decision } = await this.policyEngine.check(message.toolCall, message.serverName);
|
|
42
42
|
switch (decision) {
|
|
43
43
|
case PolicyDecision.ALLOW:
|
|
44
44
|
// Directly emit the response instead of recursive publish
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message-bus.js","sourceRoot":"","sources":["../../../src/confirmation-bus/message-bus.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAgB,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAElE,MAAM,OAAO,UAAW,SAAQ,YAAY;IAEvB;IACA;IAFnB,YACmB,YAA0B,EAC1B,QAAQ,KAAK;QAE9B,KAAK,EAAE,CAAC;QAHS,iBAAY,GAAZ,YAAY,CAAc;QAC1B,UAAK,GAAL,KAAK,CAAQ;QAG9B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAEO,cAAc,CAAC,OAAgB;QACrC,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAC9B,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IACE,OAAO,CAAC,IAAI,KAAK,cAAc,CAAC,yBAAyB;YACzD,CAAC,CAAC,eAAe,IAAI,OAAO,CAAC,EAC7B,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,WAAW,CAAC,OAAgB;QAClC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACnC,CAAC;IAED,OAAO,CAAC,OAAgB;
|
|
1
|
+
{"version":3,"file":"message-bus.js","sourceRoot":"","sources":["../../../src/confirmation-bus/message-bus.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,27 +16,29 @@ describe('MessageBus', () => {
|
|
|
16
16
|
messageBus = new MessageBus(policyEngine);
|
|
17
17
|
});
|
|
18
18
|
describe('publish', () => {
|
|
19
|
-
it('should emit error for invalid message', () => {
|
|
19
|
+
it('should emit error for invalid message', async () => {
|
|
20
20
|
const errorHandler = vi.fn();
|
|
21
21
|
messageBus.on('error', errorHandler);
|
|
22
22
|
// @ts-expect-error - Testing invalid message
|
|
23
|
-
messageBus.publish({ invalid: 'message' });
|
|
23
|
+
await messageBus.publish({ invalid: 'message' });
|
|
24
24
|
expect(errorHandler).toHaveBeenCalledWith(expect.objectContaining({
|
|
25
25
|
message: expect.stringContaining('Invalid message structure'),
|
|
26
26
|
}));
|
|
27
27
|
});
|
|
28
|
-
it('should validate tool confirmation requests have correlationId', () => {
|
|
28
|
+
it('should validate tool confirmation requests have correlationId', async () => {
|
|
29
29
|
const errorHandler = vi.fn();
|
|
30
30
|
messageBus.on('error', errorHandler);
|
|
31
31
|
// @ts-expect-error - Testing missing correlationId
|
|
32
|
-
messageBus.publish({
|
|
32
|
+
await messageBus.publish({
|
|
33
33
|
type: MessageBusType.TOOL_CONFIRMATION_REQUEST,
|
|
34
34
|
toolCall: { name: 'test' },
|
|
35
35
|
});
|
|
36
36
|
expect(errorHandler).toHaveBeenCalled();
|
|
37
37
|
});
|
|
38
|
-
it('should emit confirmation response when policy allows', () => {
|
|
39
|
-
vi.spyOn(policyEngine, 'check').
|
|
38
|
+
it('should emit confirmation response when policy allows', async () => {
|
|
39
|
+
vi.spyOn(policyEngine, 'check').mockResolvedValue({
|
|
40
|
+
decision: PolicyDecision.ALLOW,
|
|
41
|
+
});
|
|
40
42
|
const responseHandler = vi.fn();
|
|
41
43
|
messageBus.subscribe(MessageBusType.TOOL_CONFIRMATION_RESPONSE, responseHandler);
|
|
42
44
|
const request = {
|
|
@@ -44,7 +46,7 @@ describe('MessageBus', () => {
|
|
|
44
46
|
toolCall: { name: 'test-tool', args: {} },
|
|
45
47
|
correlationId: '123',
|
|
46
48
|
};
|
|
47
|
-
messageBus.publish(request);
|
|
49
|
+
await messageBus.publish(request);
|
|
48
50
|
const expectedResponse = {
|
|
49
51
|
type: MessageBusType.TOOL_CONFIRMATION_RESPONSE,
|
|
50
52
|
correlationId: '123',
|
|
@@ -52,8 +54,10 @@ describe('MessageBus', () => {
|
|
|
52
54
|
};
|
|
53
55
|
expect(responseHandler).toHaveBeenCalledWith(expectedResponse);
|
|
54
56
|
});
|
|
55
|
-
it('should emit rejection and response when policy denies', () => {
|
|
56
|
-
vi.spyOn(policyEngine, 'check').
|
|
57
|
+
it('should emit rejection and response when policy denies', async () => {
|
|
58
|
+
vi.spyOn(policyEngine, 'check').mockResolvedValue({
|
|
59
|
+
decision: PolicyDecision.DENY,
|
|
60
|
+
});
|
|
57
61
|
const responseHandler = vi.fn();
|
|
58
62
|
const rejectionHandler = vi.fn();
|
|
59
63
|
messageBus.subscribe(MessageBusType.TOOL_CONFIRMATION_RESPONSE, responseHandler);
|
|
@@ -63,7 +67,7 @@ describe('MessageBus', () => {
|
|
|
63
67
|
toolCall: { name: 'test-tool', args: {} },
|
|
64
68
|
correlationId: '123',
|
|
65
69
|
};
|
|
66
|
-
messageBus.publish(request);
|
|
70
|
+
await messageBus.publish(request);
|
|
67
71
|
const expectedRejection = {
|
|
68
72
|
type: MessageBusType.TOOL_POLICY_REJECTION,
|
|
69
73
|
toolCall: { name: 'test-tool', args: {} },
|
|
@@ -76,8 +80,10 @@ describe('MessageBus', () => {
|
|
|
76
80
|
};
|
|
77
81
|
expect(responseHandler).toHaveBeenCalledWith(expectedResponse);
|
|
78
82
|
});
|
|
79
|
-
it('should pass through to UI when policy says ASK_USER', () => {
|
|
80
|
-
vi.spyOn(policyEngine, 'check').
|
|
83
|
+
it('should pass through to UI when policy says ASK_USER', async () => {
|
|
84
|
+
vi.spyOn(policyEngine, 'check').mockResolvedValue({
|
|
85
|
+
decision: PolicyDecision.ASK_USER,
|
|
86
|
+
});
|
|
81
87
|
const requestHandler = vi.fn();
|
|
82
88
|
messageBus.subscribe(MessageBusType.TOOL_CONFIRMATION_REQUEST, requestHandler);
|
|
83
89
|
const request = {
|
|
@@ -85,10 +91,10 @@ describe('MessageBus', () => {
|
|
|
85
91
|
toolCall: { name: 'test-tool', args: {} },
|
|
86
92
|
correlationId: '123',
|
|
87
93
|
};
|
|
88
|
-
messageBus.publish(request);
|
|
94
|
+
await messageBus.publish(request);
|
|
89
95
|
expect(requestHandler).toHaveBeenCalledWith(request);
|
|
90
96
|
});
|
|
91
|
-
it('should emit other message types directly', () => {
|
|
97
|
+
it('should emit other message types directly', async () => {
|
|
92
98
|
const successHandler = vi.fn();
|
|
93
99
|
messageBus.subscribe(MessageBusType.TOOL_EXECUTION_SUCCESS, successHandler);
|
|
94
100
|
const message = {
|
|
@@ -96,12 +102,12 @@ describe('MessageBus', () => {
|
|
|
96
102
|
toolCall: { name: 'test-tool' },
|
|
97
103
|
result: 'success',
|
|
98
104
|
};
|
|
99
|
-
messageBus.publish(message);
|
|
105
|
+
await messageBus.publish(message);
|
|
100
106
|
expect(successHandler).toHaveBeenCalledWith(message);
|
|
101
107
|
});
|
|
102
108
|
});
|
|
103
109
|
describe('subscribe/unsubscribe', () => {
|
|
104
|
-
it('should allow subscribing to specific message types', () => {
|
|
110
|
+
it('should allow subscribing to specific message types', async () => {
|
|
105
111
|
const handler = vi.fn();
|
|
106
112
|
messageBus.subscribe(MessageBusType.TOOL_EXECUTION_SUCCESS, handler);
|
|
107
113
|
const message = {
|
|
@@ -109,10 +115,10 @@ describe('MessageBus', () => {
|
|
|
109
115
|
toolCall: { name: 'test' },
|
|
110
116
|
result: 'test',
|
|
111
117
|
};
|
|
112
|
-
messageBus.publish(message);
|
|
118
|
+
await messageBus.publish(message);
|
|
113
119
|
expect(handler).toHaveBeenCalledWith(message);
|
|
114
120
|
});
|
|
115
|
-
it('should allow unsubscribing from message types', () => {
|
|
121
|
+
it('should allow unsubscribing from message types', async () => {
|
|
116
122
|
const handler = vi.fn();
|
|
117
123
|
messageBus.subscribe(MessageBusType.TOOL_EXECUTION_SUCCESS, handler);
|
|
118
124
|
messageBus.unsubscribe(MessageBusType.TOOL_EXECUTION_SUCCESS, handler);
|
|
@@ -121,10 +127,10 @@ describe('MessageBus', () => {
|
|
|
121
127
|
toolCall: { name: 'test' },
|
|
122
128
|
result: 'test',
|
|
123
129
|
};
|
|
124
|
-
messageBus.publish(message);
|
|
130
|
+
await messageBus.publish(message);
|
|
125
131
|
expect(handler).not.toHaveBeenCalled();
|
|
126
132
|
});
|
|
127
|
-
it('should support multiple subscribers for the same message type', () => {
|
|
133
|
+
it('should support multiple subscribers for the same message type', async () => {
|
|
128
134
|
const handler1 = vi.fn();
|
|
129
135
|
const handler2 = vi.fn();
|
|
130
136
|
messageBus.subscribe(MessageBusType.TOOL_EXECUTION_SUCCESS, handler1);
|
|
@@ -134,17 +140,17 @@ describe('MessageBus', () => {
|
|
|
134
140
|
toolCall: { name: 'test' },
|
|
135
141
|
result: 'test',
|
|
136
142
|
};
|
|
137
|
-
messageBus.publish(message);
|
|
143
|
+
await messageBus.publish(message);
|
|
138
144
|
expect(handler1).toHaveBeenCalledWith(message);
|
|
139
145
|
expect(handler2).toHaveBeenCalledWith(message);
|
|
140
146
|
});
|
|
141
147
|
});
|
|
142
148
|
describe('error handling', () => {
|
|
143
|
-
it('should not crash on errors during message processing', () => {
|
|
149
|
+
it('should not crash on errors during message processing', async () => {
|
|
144
150
|
const errorHandler = vi.fn();
|
|
145
151
|
messageBus.on('error', errorHandler);
|
|
146
152
|
// Mock policyEngine to throw an error
|
|
147
|
-
vi.spyOn(policyEngine, 'check').mockImplementation(() => {
|
|
153
|
+
vi.spyOn(policyEngine, 'check').mockImplementation(async () => {
|
|
148
154
|
throw new Error('Policy check failed');
|
|
149
155
|
});
|
|
150
156
|
const request = {
|
|
@@ -153,7 +159,7 @@ describe('MessageBus', () => {
|
|
|
153
159
|
correlationId: '123',
|
|
154
160
|
};
|
|
155
161
|
// Should not throw
|
|
156
|
-
expect(
|
|
162
|
+
await expect(messageBus.publish(request)).resolves.not.toThrow();
|
|
157
163
|
// Should emit error
|
|
158
164
|
expect(errorHandler).toHaveBeenCalledWith(expect.objectContaining({
|
|
159
165
|
message: 'Policy check failed',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message-bus.test.js","sourceRoot":"","sources":["../../../src/confirmation-bus/message-bus.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EACL,cAAc,GAKf,MAAM,YAAY,CAAC;AAEpB,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,IAAI,UAAsB,CAAC;IAC3B,IAAI,YAA0B,CAAC;IAE/B,UAAU,CAAC,GAAG,EAAE;QACd,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;QAClC,UAAU,GAAG,IAAI,UAAU,CAAC,YAAY,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;QACvB,EAAE,CAAC,uCAAuC,EAAE,
|
|
1
|
+
{"version":3,"file":"message-bus.test.js","sourceRoot":"","sources":["../../../src/confirmation-bus/message-bus.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -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 = "ad1f0d99";
|
|
7
|
+
export declare const CLI_VERSION = "0.16.0-nightly.20251113.ad1f0d99";
|
|
@@ -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 = 'ad1f0d99';
|
|
9
|
+
export const CLI_VERSION = '0.16.0-nightly.20251113.ad1f0d99';
|
|
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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import type { HookOutput, HookExecutionResult } from './types.js';
|
|
7
|
+
import { DefaultHookOutput } from './types.js';
|
|
8
|
+
import { HookEventName } from './types.js';
|
|
9
|
+
/**
|
|
10
|
+
* Aggregated hook result
|
|
11
|
+
*/
|
|
12
|
+
export interface AggregatedHookResult {
|
|
13
|
+
success: boolean;
|
|
14
|
+
finalOutput?: DefaultHookOutput;
|
|
15
|
+
allOutputs: HookOutput[];
|
|
16
|
+
errors: Error[];
|
|
17
|
+
totalDuration: number;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Hook aggregator that merges results from multiple hooks using event-specific strategies
|
|
21
|
+
*/
|
|
22
|
+
export declare class HookAggregator {
|
|
23
|
+
/**
|
|
24
|
+
* Aggregate results from multiple hook executions
|
|
25
|
+
*/
|
|
26
|
+
aggregateResults(results: HookExecutionResult[], eventName: HookEventName): AggregatedHookResult;
|
|
27
|
+
/**
|
|
28
|
+
* Merge hook outputs using event-specific strategies
|
|
29
|
+
*
|
|
30
|
+
* Note: We always use the merge logic even for single hooks to ensure
|
|
31
|
+
* consistent default behaviors (e.g., default decision='allow' for OR logic)
|
|
32
|
+
*/
|
|
33
|
+
private mergeOutputs;
|
|
34
|
+
/**
|
|
35
|
+
* Merge outputs with OR decision logic and message concatenation
|
|
36
|
+
*/
|
|
37
|
+
private mergeWithOrDecision;
|
|
38
|
+
/**
|
|
39
|
+
* Merge outputs with later fields replacing earlier fields
|
|
40
|
+
*/
|
|
41
|
+
private mergeWithFieldReplacement;
|
|
42
|
+
/**
|
|
43
|
+
* Merge tool selection outputs with specific logic for tool config
|
|
44
|
+
*
|
|
45
|
+
* Tool Selection Strategy:
|
|
46
|
+
* - The intent is to provide a UNION of tools from all hooks
|
|
47
|
+
* - If any hook specifies NONE mode, no tools are available (most restrictive wins)
|
|
48
|
+
* - If any hook specifies ANY mode (and no NONE), ANY mode is used
|
|
49
|
+
* - Otherwise AUTO mode is used
|
|
50
|
+
* - Function names are collected from all hooks and sorted for deterministic caching
|
|
51
|
+
*
|
|
52
|
+
* This means hooks can only add/enable tools, not filter them out individually.
|
|
53
|
+
* If one hook restricts and another re-enables, the union takes the re-enabled tool.
|
|
54
|
+
*/
|
|
55
|
+
private mergeToolSelectionOutputs;
|
|
56
|
+
/**
|
|
57
|
+
* Simple merge for events without special logic
|
|
58
|
+
*/
|
|
59
|
+
private mergeSimple;
|
|
60
|
+
/**
|
|
61
|
+
* Create the appropriate specific hook output class based on event type
|
|
62
|
+
*/
|
|
63
|
+
private createSpecificHookOutput;
|
|
64
|
+
/**
|
|
65
|
+
* Extract additional context from hook-specific outputs
|
|
66
|
+
*/
|
|
67
|
+
private extractAdditionalContext;
|
|
68
|
+
}
|