@machina.ai/cell-cli-core 1.19.4-rc2 → 1.20.2-rc1
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/package.json +1 -1
- package/dist/src/agents/executor.js +11 -16
- package/dist/src/agents/executor.js.map +1 -1
- package/dist/src/agents/executor.test.js +8 -9
- package/dist/src/agents/executor.test.js.map +1 -1
- package/dist/src/availability/modelAvailabilityService.d.ts +1 -1
- package/dist/src/availability/modelAvailabilityService.js +2 -2
- package/dist/src/availability/modelAvailabilityService.js.map +1 -1
- package/dist/src/availability/modelAvailabilityService.test.js +3 -3
- package/dist/src/availability/modelAvailabilityService.test.js.map +1 -1
- package/dist/src/availability/policyCatalog.d.ts +3 -1
- package/dist/src/availability/policyCatalog.js +2 -2
- package/dist/src/availability/policyCatalog.js.map +1 -1
- package/dist/src/availability/policyHelpers.d.ts +21 -0
- package/dist/src/availability/policyHelpers.js +45 -0
- package/dist/src/availability/policyHelpers.js.map +1 -0
- package/dist/src/availability/policyHelpers.test.d.ts +6 -0
- package/dist/src/availability/policyHelpers.test.js +52 -0
- package/dist/src/availability/policyHelpers.test.js.map +1 -0
- package/dist/src/code_assist/experiments/client_metadata.js +1 -1
- package/dist/src/code_assist/experiments/client_metadata.js.map +1 -1
- package/dist/src/code_assist/experiments/experiments.js +2 -2
- package/dist/src/code_assist/experiments/experiments.js.map +1 -1
- package/dist/src/code_assist/oauth2.js +3 -3
- package/dist/src/code_assist/oauth2.js.map +1 -1
- package/dist/src/code_assist/oauth2.test.js +1 -1
- package/dist/src/code_assist/oauth2.test.js.map +1 -1
- package/dist/src/code_assist/server.d.ts +2 -1
- package/dist/src/code_assist/server.js +7 -4
- package/dist/src/code_assist/server.js.map +1 -1
- package/dist/src/code_assist/server.test.js +24 -0
- package/dist/src/code_assist/server.test.js.map +1 -1
- package/dist/src/code_assist/types.d.ts +14 -0
- package/dist/src/config/config.d.ts +14 -0
- package/dist/src/config/config.js +36 -0
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/config.test.js +14 -0
- package/dist/src/config/config.test.js.map +1 -1
- package/dist/src/core/AuthenticatedContentGenerator.js +4 -4
- package/dist/src/core/AuthenticatedContentGenerator.js.map +1 -1
- package/dist/src/core/client.js +5 -38
- package/dist/src/core/client.js.map +1 -1
- package/dist/src/core/client.test.js +45 -0
- package/dist/src/core/client.test.js.map +1 -1
- package/dist/src/core/coreToolHookTriggers.d.ts +55 -0
- package/dist/src/core/coreToolHookTriggers.js +244 -0
- package/dist/src/core/coreToolHookTriggers.js.map +1 -0
- package/dist/src/core/coreToolScheduler.js +11 -2
- package/dist/src/core/coreToolScheduler.js.map +1 -1
- package/dist/src/core/coreToolScheduler.test.js +66 -1
- package/dist/src/core/coreToolScheduler.test.js.map +1 -1
- package/dist/src/core/geminiChat.js +91 -19
- package/dist/src/core/geminiChat.js.map +1 -1
- package/dist/src/core/geminiChat.test.js +15 -4
- package/dist/src/core/geminiChat.test.js.map +1 -1
- package/dist/src/core/geminiChatHookTriggers.d.ts +64 -0
- package/dist/src/core/geminiChatHookTriggers.js +136 -0
- package/dist/src/core/geminiChatHookTriggers.js.map +1 -0
- package/dist/src/core/loggingContentGenerator.js +9 -4
- package/dist/src/core/loggingContentGenerator.js.map +1 -1
- package/dist/src/core/prompts.js +39 -20
- package/dist/src/core/prompts.js.map +1 -1
- package/dist/src/fallback/handler.js +100 -28
- package/dist/src/fallback/handler.js.map +1 -1
- package/dist/src/fallback/handler.test.js +170 -0
- package/dist/src/fallback/handler.test.js.map +1 -1
- package/dist/src/fallback/types.d.ts +8 -0
- package/dist/src/generated/git-commit.d.ts +2 -2
- package/dist/src/generated/git-commit.js +2 -2
- package/dist/src/hooks/hookEventHandler.js +11 -11
- package/dist/src/hooks/hookEventHandler.js.map +1 -1
- package/dist/src/hooks/hookRunner.js +7 -1
- package/dist/src/hooks/hookRunner.js.map +1 -1
- package/dist/src/hooks/hookRunner.test.js +1 -0
- package/dist/src/hooks/hookRunner.test.js.map +1 -1
- package/dist/src/hooks/hookSystem.test.js +1 -0
- package/dist/src/hooks/hookSystem.test.js.map +1 -1
- package/dist/src/ide/ide-client.js +3 -3
- package/dist/src/ide/ide-client.js.map +1 -1
- package/dist/src/ide/ide-client.test.js +17 -0
- package/dist/src/ide/ide-client.test.js.map +1 -1
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.js +2 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/mcp/auth-provider.d.ts +16 -0
- package/dist/src/mcp/auth-provider.js +7 -0
- package/dist/src/mcp/auth-provider.js.map +1 -0
- package/dist/src/mcp/google-auth-provider.d.ts +10 -2
- package/dist/src/mcp/google-auth-provider.js +28 -0
- package/dist/src/mcp/google-auth-provider.js.map +1 -1
- package/dist/src/mcp/google-auth-provider.test.js +45 -0
- package/dist/src/mcp/google-auth-provider.test.js.map +1 -1
- package/dist/src/mcp/mcpLauncher.js +32 -8
- package/dist/src/mcp/mcpLauncher.js.map +1 -1
- package/dist/src/mcp/sa-impersonation-provider.d.ts +2 -2
- package/dist/src/mcp/sa-impersonation-provider.js.map +1 -1
- package/dist/src/mcp/token-storage/hybrid-token-storage.js +1 -1
- package/dist/src/mcp/token-storage/hybrid-token-storage.js.map +1 -1
- package/dist/src/policy/policies/read-only.toml +5 -0
- package/dist/src/services/chatCompressionService.js +2 -2
- package/dist/src/services/chatCompressionService.js.map +1 -1
- package/dist/src/services/chatCompressionService.test.js +7 -0
- package/dist/src/services/chatCompressionService.test.js.map +1 -1
- package/dist/src/services/contextManager.d.ts +35 -0
- package/dist/src/services/contextManager.js +68 -0
- package/dist/src/services/contextManager.js.map +1 -0
- package/dist/src/services/contextManager.test.d.ts +6 -0
- package/dist/src/services/contextManager.test.js +105 -0
- package/dist/src/services/contextManager.test.js.map +1 -0
- package/dist/src/services/loopDetectionService.js +1 -1
- package/dist/src/services/loopDetectionService.js.map +1 -1
- package/dist/src/services/shellExecutionService.js +51 -23
- package/dist/src/services/shellExecutionService.js.map +1 -1
- package/dist/src/services/shellExecutionService.test.js +102 -12
- package/dist/src/services/shellExecutionService.test.js.map +1 -1
- package/dist/src/telemetry/index.d.ts +1 -0
- package/dist/src/telemetry/index.js +1 -0
- package/dist/src/telemetry/index.js.map +1 -1
- package/dist/src/telemetry/loggers.js +2 -5
- package/dist/src/telemetry/loggers.js.map +1 -1
- package/dist/src/telemetry/loggers.test.js +175 -13
- package/dist/src/telemetry/loggers.test.js.map +1 -1
- package/dist/src/telemetry/startupProfiler.d.ts +51 -0
- package/dist/src/telemetry/startupProfiler.js +147 -0
- package/dist/src/telemetry/startupProfiler.js.map +1 -0
- package/dist/src/telemetry/startupProfiler.test.d.ts +6 -0
- package/dist/src/telemetry/startupProfiler.test.js +247 -0
- package/dist/src/telemetry/startupProfiler.test.js.map +1 -0
- package/dist/src/telemetry/trace.js +2 -2
- package/dist/src/telemetry/trace.js.map +1 -1
- package/dist/src/telemetry/types.d.ts +6 -4
- package/dist/src/telemetry/types.js +35 -9
- package/dist/src/telemetry/types.js.map +1 -1
- package/dist/src/tools/mcp-client-manager.d.ts +1 -0
- package/dist/src/tools/mcp-client-manager.js +10 -0
- package/dist/src/tools/mcp-client-manager.js.map +1 -1
- package/dist/src/tools/mcp-client-manager.test.js +25 -0
- package/dist/src/tools/mcp-client-manager.test.js.map +1 -1
- package/dist/src/tools/mcp-client.d.ts +1 -0
- package/dist/src/tools/mcp-client.js +4 -6
- package/dist/src/tools/mcp-client.js.map +1 -1
- package/dist/src/tools/mcp-client.test.js +47 -0
- package/dist/src/tools/mcp-client.test.js.map +1 -1
- package/dist/src/tools/shell.js +43 -3
- package/dist/src/tools/shell.js.map +1 -1
- package/dist/src/tools/shell.test.js +23 -4
- package/dist/src/tools/shell.test.js.map +1 -1
- package/dist/src/tools/smart-edit.js +1 -1
- package/dist/src/tools/smart-edit.js.map +1 -1
- package/dist/src/tools/web-fetch.js +1 -1
- package/dist/src/tools/web-fetch.js.map +1 -1
- package/dist/src/utils/exitCodes.d.ts +12 -0
- package/dist/src/utils/exitCodes.js +13 -0
- package/dist/src/utils/exitCodes.js.map +1 -0
- package/dist/src/utils/memoryDiscovery.d.ts +5 -0
- package/dist/src/utils/memoryDiscovery.js +7 -3
- package/dist/src/utils/memoryDiscovery.js.map +1 -1
- package/dist/src/utils/memoryDiscovery.test.js +28 -0
- package/dist/src/utils/memoryDiscovery.test.js.map +1 -1
- package/dist/src/utils/stdio.d.ts +2 -2
- package/dist/src/utils/stdio.js +2 -2
- package/dist/src/utils/stdio.js.map +1 -1
- package/dist/src/utils/stdio.test.js +5 -5
- package/dist/src/utils/stdio.test.js.map +1 -1
- package/dist/src/utils/tokenCalculation.d.ts +19 -0
- package/dist/src/utils/tokenCalculation.js +70 -0
- package/dist/src/utils/tokenCalculation.js.map +1 -0
- package/dist/src/utils/tokenCalculation.test.d.ts +6 -0
- package/dist/src/utils/tokenCalculation.test.js +78 -0
- package/dist/src/utils/tokenCalculation.test.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { performance } from 'node:perf_hooks';
|
|
7
|
+
import * as os from 'node:os';
|
|
8
|
+
import * as fs from 'node:fs';
|
|
9
|
+
import { recordStartupPerformance } from './metrics.js';
|
|
10
|
+
import { debugLogger } from '../utils/debugLogger.js';
|
|
11
|
+
/**
|
|
12
|
+
* Buffers startup performance metrics until the telemetry system is fully initialized.
|
|
13
|
+
*/
|
|
14
|
+
export class StartupProfiler {
|
|
15
|
+
phases = new Map();
|
|
16
|
+
static instance;
|
|
17
|
+
constructor() { }
|
|
18
|
+
static getInstance() {
|
|
19
|
+
if (!StartupProfiler.instance) {
|
|
20
|
+
StartupProfiler.instance = new StartupProfiler();
|
|
21
|
+
}
|
|
22
|
+
return StartupProfiler.instance;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Returns the mark name for the start of a phase.
|
|
26
|
+
*/
|
|
27
|
+
getStartMarkName(phaseName) {
|
|
28
|
+
return `startup:${phaseName}:start`;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Returns the mark name for the end of a phase.
|
|
32
|
+
*/
|
|
33
|
+
getEndMarkName(phaseName) {
|
|
34
|
+
return `startup:${phaseName}:end`;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Marks the start of a phase and returns a handle to end it.
|
|
38
|
+
*
|
|
39
|
+
* If a phase with the same name is already active (started but not ended),
|
|
40
|
+
* this method will log a warning and return `undefined`. This allows for
|
|
41
|
+
* idempotent calls in environments where initialization might happen multiple
|
|
42
|
+
* times.
|
|
43
|
+
*
|
|
44
|
+
* Callers should handle the potential `undefined` return value, typically
|
|
45
|
+
* by using optional chaining: `handle?.end()`.
|
|
46
|
+
*/
|
|
47
|
+
start(phaseName, details) {
|
|
48
|
+
const existingPhase = this.phases.get(phaseName);
|
|
49
|
+
// Error if starting a phase that's already active.
|
|
50
|
+
if (existingPhase && !existingPhase.ended) {
|
|
51
|
+
debugLogger.warn(`[STARTUP] Cannot start phase '${phaseName}': phase is already active. Call end() before starting again.`);
|
|
52
|
+
return undefined;
|
|
53
|
+
}
|
|
54
|
+
const startMarkName = this.getStartMarkName(phaseName);
|
|
55
|
+
performance.mark(startMarkName, { detail: details });
|
|
56
|
+
const phase = {
|
|
57
|
+
name: phaseName,
|
|
58
|
+
startCpuUsage: process.cpuUsage(),
|
|
59
|
+
details,
|
|
60
|
+
ended: false,
|
|
61
|
+
};
|
|
62
|
+
this.phases.set(phaseName, phase);
|
|
63
|
+
// Return a handle that allows ending the phase without repeating the name
|
|
64
|
+
return {
|
|
65
|
+
end: (endDetails) => {
|
|
66
|
+
this._end(phase, endDetails);
|
|
67
|
+
},
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Marks the end of a phase and calculates duration.
|
|
72
|
+
* This is now a private method; callers should use the handle returned by start().
|
|
73
|
+
*/
|
|
74
|
+
_end(phase, details) {
|
|
75
|
+
// Error if ending a phase that's already ended.
|
|
76
|
+
if (phase.ended) {
|
|
77
|
+
debugLogger.warn(`[STARTUP] Cannot end phase '${phase.name}': phase was already ended.`);
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
const startMarkName = this.getStartMarkName(phase.name);
|
|
81
|
+
const endMarkName = this.getEndMarkName(phase.name);
|
|
82
|
+
// Check if start mark exists before measuring
|
|
83
|
+
if (performance.getEntriesByName(startMarkName).length === 0) {
|
|
84
|
+
debugLogger.warn(`[STARTUP] Cannot measure phase '${phase.name}': start mark '${startMarkName}' not found (likely cleared by reset).`);
|
|
85
|
+
phase.ended = true;
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
performance.mark(endMarkName, { detail: details });
|
|
89
|
+
performance.measure(phase.name, startMarkName, endMarkName);
|
|
90
|
+
phase.cpuUsage = process.cpuUsage(phase.startCpuUsage);
|
|
91
|
+
phase.ended = true;
|
|
92
|
+
if (details) {
|
|
93
|
+
phase.details = { ...phase.details, ...details };
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Flushes buffered metrics to the telemetry system.
|
|
98
|
+
*/
|
|
99
|
+
flush(config) {
|
|
100
|
+
debugLogger.log('[STARTUP] StartupProfiler.flush() called with', this.phases.size, 'phases');
|
|
101
|
+
const commonDetails = {
|
|
102
|
+
os_platform: os.platform(),
|
|
103
|
+
os_arch: os.arch(),
|
|
104
|
+
os_release: os.release(),
|
|
105
|
+
is_docker: fs.existsSync('/.dockerenv'),
|
|
106
|
+
};
|
|
107
|
+
// Get all performance measures.
|
|
108
|
+
const measures = performance.getEntriesByType('measure');
|
|
109
|
+
for (const phase of this.phases.values()) {
|
|
110
|
+
// Warn about incomplete phases.
|
|
111
|
+
if (!phase.ended) {
|
|
112
|
+
debugLogger.warn(`[STARTUP] Phase '${phase.name}' was started but never ended. Skipping metrics.`);
|
|
113
|
+
continue;
|
|
114
|
+
}
|
|
115
|
+
// Find the corresponding measure.
|
|
116
|
+
const measure = measures.find((m) => m.name === phase.name);
|
|
117
|
+
if (measure && phase.cpuUsage) {
|
|
118
|
+
const details = {
|
|
119
|
+
...commonDetails,
|
|
120
|
+
cpu_usage_user: phase.cpuUsage.user,
|
|
121
|
+
cpu_usage_system: phase.cpuUsage.system,
|
|
122
|
+
...phase.details,
|
|
123
|
+
};
|
|
124
|
+
debugLogger.log('[STARTUP] Recording metric for phase:', phase.name, 'duration:', measure.duration);
|
|
125
|
+
recordStartupPerformance(config, measure.duration, {
|
|
126
|
+
phase: phase.name,
|
|
127
|
+
details,
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
debugLogger.log('[STARTUP] Skipping phase without measure:', phase.name);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
// Clear performance marks and measures for all tracked phases.
|
|
135
|
+
for (const phaseName of this.phases.keys()) {
|
|
136
|
+
const startMarkName = this.getStartMarkName(phaseName);
|
|
137
|
+
const endMarkName = this.getEndMarkName(phaseName);
|
|
138
|
+
performance.clearMarks(startMarkName);
|
|
139
|
+
performance.clearMarks(endMarkName);
|
|
140
|
+
performance.clearMeasures(phaseName);
|
|
141
|
+
}
|
|
142
|
+
// Clear all phases.
|
|
143
|
+
this.phases.clear();
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
export const startupProfiler = StartupProfiler.getInstance();
|
|
147
|
+
//# sourceMappingURL=startupProfiler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"startupProfiler.js","sourceRoot":"","sources":["../../../src/telemetry/startupProfiler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
|
|
7
|
+
import { StartupProfiler } from './startupProfiler.js';
|
|
8
|
+
// Mock the metrics module
|
|
9
|
+
vi.mock('./metrics.js', () => ({
|
|
10
|
+
recordStartupPerformance: vi.fn(),
|
|
11
|
+
}));
|
|
12
|
+
// Mock os module
|
|
13
|
+
vi.mock('node:os', () => ({
|
|
14
|
+
platform: vi.fn(() => 'darwin'),
|
|
15
|
+
arch: vi.fn(() => 'x64'),
|
|
16
|
+
release: vi.fn(() => '22.6.0'),
|
|
17
|
+
}));
|
|
18
|
+
// Mock fs module
|
|
19
|
+
vi.mock('node:fs', () => ({
|
|
20
|
+
existsSync: vi.fn(() => false),
|
|
21
|
+
}));
|
|
22
|
+
describe('StartupProfiler', () => {
|
|
23
|
+
let profiler;
|
|
24
|
+
let mockConfig;
|
|
25
|
+
let recordStartupPerformance;
|
|
26
|
+
beforeEach(async () => {
|
|
27
|
+
vi.resetAllMocks();
|
|
28
|
+
// Get the mocked function
|
|
29
|
+
const metricsModule = await import('./metrics.js');
|
|
30
|
+
recordStartupPerformance =
|
|
31
|
+
metricsModule.recordStartupPerformance;
|
|
32
|
+
// Create a fresh profiler instance
|
|
33
|
+
profiler = StartupProfiler.getInstance();
|
|
34
|
+
// Clear any existing phases and performance entries
|
|
35
|
+
profiler['phases'].clear();
|
|
36
|
+
performance.clearMarks();
|
|
37
|
+
performance.clearMeasures();
|
|
38
|
+
mockConfig = {
|
|
39
|
+
getSessionId: () => 'test-session-id',
|
|
40
|
+
getTelemetryEnabled: () => true,
|
|
41
|
+
};
|
|
42
|
+
});
|
|
43
|
+
afterEach(() => {
|
|
44
|
+
vi.restoreAllMocks();
|
|
45
|
+
});
|
|
46
|
+
describe('getInstance', () => {
|
|
47
|
+
it('should return a singleton instance', () => {
|
|
48
|
+
const instance1 = StartupProfiler.getInstance();
|
|
49
|
+
const instance2 = StartupProfiler.getInstance();
|
|
50
|
+
expect(instance1).toBe(instance2);
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
describe('start', () => {
|
|
54
|
+
it('should create a performance mark for a phase', () => {
|
|
55
|
+
profiler.start('test_phase');
|
|
56
|
+
const phase = profiler['phases'].get('test_phase');
|
|
57
|
+
expect(phase).toBeDefined();
|
|
58
|
+
expect(phase?.name).toBe('test_phase');
|
|
59
|
+
// Verify performance mark was created
|
|
60
|
+
const marks = performance.getEntriesByType('mark');
|
|
61
|
+
const startMark = marks.find((m) => m.name === 'startup:test_phase:start');
|
|
62
|
+
expect(startMark).toBeDefined();
|
|
63
|
+
});
|
|
64
|
+
it('should record start time with details', () => {
|
|
65
|
+
const details = { key: 'value', count: 42 };
|
|
66
|
+
profiler.start('test_phase', details);
|
|
67
|
+
const phase = profiler['phases'].get('test_phase');
|
|
68
|
+
expect(phase?.details).toEqual(details);
|
|
69
|
+
});
|
|
70
|
+
it('should return undefined when starting a phase that is already active', () => {
|
|
71
|
+
profiler.start('test_phase');
|
|
72
|
+
const handle = profiler.start('test_phase');
|
|
73
|
+
expect(handle).toBeUndefined();
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
describe('end', () => {
|
|
77
|
+
it('should create a performance measure for a started phase', () => {
|
|
78
|
+
const handle = profiler.start('test_phase');
|
|
79
|
+
handle?.end();
|
|
80
|
+
// Verify performance measure was created
|
|
81
|
+
const measures = performance.getEntriesByType('measure');
|
|
82
|
+
const measure = measures.find((m) => m.name === 'test_phase');
|
|
83
|
+
expect(measure).toBeDefined();
|
|
84
|
+
expect(measure?.duration).toBeGreaterThan(0);
|
|
85
|
+
});
|
|
86
|
+
it('should merge details when ending a phase', () => {
|
|
87
|
+
const handle = profiler.start('test_phase', { initial: 'value' });
|
|
88
|
+
handle?.end({ additional: 'data' });
|
|
89
|
+
const phase = profiler['phases'].get('test_phase');
|
|
90
|
+
expect(phase?.details).toEqual({
|
|
91
|
+
initial: 'value',
|
|
92
|
+
additional: 'data',
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
it('should overwrite details with same key', () => {
|
|
96
|
+
const handle = profiler.start('test_phase', { key: 'original' });
|
|
97
|
+
handle?.end({ key: 'updated' });
|
|
98
|
+
const phase = profiler['phases'].get('test_phase');
|
|
99
|
+
expect(phase?.details).toEqual({ key: 'updated' });
|
|
100
|
+
});
|
|
101
|
+
});
|
|
102
|
+
describe('flush', () => {
|
|
103
|
+
it('should call recordStartupPerformance for each completed phase', () => {
|
|
104
|
+
const handle1 = profiler.start('phase1');
|
|
105
|
+
handle1?.end();
|
|
106
|
+
const handle2 = profiler.start('phase2');
|
|
107
|
+
handle2?.end();
|
|
108
|
+
profiler.flush(mockConfig);
|
|
109
|
+
expect(recordStartupPerformance).toHaveBeenCalledTimes(2);
|
|
110
|
+
});
|
|
111
|
+
it('should not record phases without duration', () => {
|
|
112
|
+
profiler.start('incomplete_phase');
|
|
113
|
+
profiler.flush(mockConfig);
|
|
114
|
+
expect(recordStartupPerformance).not.toHaveBeenCalled();
|
|
115
|
+
});
|
|
116
|
+
it('should include common details in all metrics', () => {
|
|
117
|
+
const handle = profiler.start('test_phase');
|
|
118
|
+
handle?.end();
|
|
119
|
+
profiler.flush(mockConfig);
|
|
120
|
+
expect(recordStartupPerformance).toHaveBeenCalledWith(mockConfig, expect.any(Number), expect.objectContaining({
|
|
121
|
+
phase: 'test_phase',
|
|
122
|
+
details: expect.objectContaining({
|
|
123
|
+
os_platform: 'darwin',
|
|
124
|
+
os_arch: 'x64',
|
|
125
|
+
os_release: '22.6.0',
|
|
126
|
+
is_docker: false,
|
|
127
|
+
cpu_usage_user: expect.any(Number),
|
|
128
|
+
cpu_usage_system: expect.any(Number),
|
|
129
|
+
}),
|
|
130
|
+
}));
|
|
131
|
+
});
|
|
132
|
+
it('should merge phase-specific details with common details', () => {
|
|
133
|
+
const handle = profiler.start('test_phase', { custom: 'value' });
|
|
134
|
+
handle?.end();
|
|
135
|
+
profiler.flush(mockConfig);
|
|
136
|
+
expect(recordStartupPerformance).toHaveBeenCalledWith(mockConfig, expect.any(Number), expect.objectContaining({
|
|
137
|
+
phase: 'test_phase',
|
|
138
|
+
details: expect.objectContaining({
|
|
139
|
+
custom: 'value',
|
|
140
|
+
os_platform: 'darwin',
|
|
141
|
+
}),
|
|
142
|
+
}));
|
|
143
|
+
});
|
|
144
|
+
it('should clear phases after flushing', () => {
|
|
145
|
+
const handle = profiler.start('test_phase');
|
|
146
|
+
handle?.end();
|
|
147
|
+
profiler.flush(mockConfig);
|
|
148
|
+
expect(profiler['phases'].size).toBe(0);
|
|
149
|
+
});
|
|
150
|
+
it('should detect Docker environment', async () => {
|
|
151
|
+
const fs = await import('node:fs');
|
|
152
|
+
fs.existsSync.mockReturnValue(true);
|
|
153
|
+
const handle = profiler.start('test_phase');
|
|
154
|
+
handle?.end();
|
|
155
|
+
profiler.flush(mockConfig);
|
|
156
|
+
expect(recordStartupPerformance).toHaveBeenCalledWith(mockConfig, expect.any(Number), expect.objectContaining({
|
|
157
|
+
details: expect.objectContaining({
|
|
158
|
+
is_docker: true,
|
|
159
|
+
}),
|
|
160
|
+
}));
|
|
161
|
+
});
|
|
162
|
+
it('should calculate CPU usage correctly', () => {
|
|
163
|
+
const cpuUsageSpy = vi.spyOn(process, 'cpuUsage');
|
|
164
|
+
// Mock start usage
|
|
165
|
+
cpuUsageSpy.mockReturnValueOnce({ user: 1000, system: 500 });
|
|
166
|
+
// Mock diff usage (this is what process.cpuUsage(startUsage) returns)
|
|
167
|
+
cpuUsageSpy.mockReturnValueOnce({ user: 100, system: 50 });
|
|
168
|
+
const handle = profiler.start('cpu_test_phase');
|
|
169
|
+
handle?.end();
|
|
170
|
+
profiler.flush(mockConfig);
|
|
171
|
+
expect(recordStartupPerformance).toHaveBeenCalledWith(mockConfig, expect.any(Number), expect.objectContaining({
|
|
172
|
+
phase: 'cpu_test_phase',
|
|
173
|
+
details: expect.objectContaining({
|
|
174
|
+
cpu_usage_user: 100,
|
|
175
|
+
cpu_usage_system: 50,
|
|
176
|
+
}),
|
|
177
|
+
}));
|
|
178
|
+
});
|
|
179
|
+
});
|
|
180
|
+
describe('integration scenarios', () => {
|
|
181
|
+
it('should handle a complete startup profiling workflow', () => {
|
|
182
|
+
// Simulate startup sequence
|
|
183
|
+
const totalHandle = profiler.start('total_startup');
|
|
184
|
+
const settingsHandle = profiler.start('load_settings');
|
|
185
|
+
settingsHandle?.end();
|
|
186
|
+
const argsHandle = profiler.start('parse_arguments');
|
|
187
|
+
argsHandle?.end();
|
|
188
|
+
const appHandle = profiler.start('initialize_app');
|
|
189
|
+
appHandle?.end();
|
|
190
|
+
totalHandle?.end();
|
|
191
|
+
profiler.flush(mockConfig);
|
|
192
|
+
expect(recordStartupPerformance).toHaveBeenCalledTimes(4);
|
|
193
|
+
expect(recordStartupPerformance).toHaveBeenCalledWith(mockConfig, expect.any(Number), expect.objectContaining({ phase: 'total_startup' }));
|
|
194
|
+
});
|
|
195
|
+
it('should handle nested timing correctly', () => {
|
|
196
|
+
const outerHandle = profiler.start('outer');
|
|
197
|
+
const innerHandle = profiler.start('inner');
|
|
198
|
+
innerHandle?.end();
|
|
199
|
+
outerHandle?.end();
|
|
200
|
+
profiler.flush(mockConfig);
|
|
201
|
+
const calls = recordStartupPerformance.mock
|
|
202
|
+
.calls;
|
|
203
|
+
const outerCall = calls.find((call) => call[2].phase === 'outer');
|
|
204
|
+
const innerCall = calls.find((call) => call[2].phase === 'inner');
|
|
205
|
+
expect(outerCall).toBeDefined();
|
|
206
|
+
expect(innerCall).toBeDefined();
|
|
207
|
+
// Outer duration should be >= inner duration
|
|
208
|
+
expect(outerCall[1]).toBeGreaterThanOrEqual(innerCall[1]);
|
|
209
|
+
});
|
|
210
|
+
});
|
|
211
|
+
describe('sanity checking', () => {
|
|
212
|
+
it('should return undefined when starting a phase that is already active', () => {
|
|
213
|
+
profiler.start('test_phase');
|
|
214
|
+
const handle = profiler.start('test_phase');
|
|
215
|
+
expect(handle).toBeUndefined();
|
|
216
|
+
});
|
|
217
|
+
it('should allow restarting a phase after it has ended', () => {
|
|
218
|
+
const handle1 = profiler.start('test_phase');
|
|
219
|
+
handle1?.end();
|
|
220
|
+
// Should not throw
|
|
221
|
+
expect(() => profiler.start('test_phase')).not.toThrow();
|
|
222
|
+
});
|
|
223
|
+
it('should not throw error when ending a phase that is already ended', () => {
|
|
224
|
+
const handle = profiler.start('test_phase');
|
|
225
|
+
handle?.end();
|
|
226
|
+
// Calling end() again on the same handle should not throw
|
|
227
|
+
expect(() => handle?.end()).not.toThrow();
|
|
228
|
+
});
|
|
229
|
+
it('should not record metrics for incomplete phases', () => {
|
|
230
|
+
profiler.start('incomplete_phase');
|
|
231
|
+
// Never call end()
|
|
232
|
+
profiler.flush(mockConfig);
|
|
233
|
+
expect(recordStartupPerformance).not.toHaveBeenCalled();
|
|
234
|
+
});
|
|
235
|
+
it('should handle mix of complete and incomplete phases', () => {
|
|
236
|
+
const completeHandle = profiler.start('complete_phase');
|
|
237
|
+
completeHandle?.end();
|
|
238
|
+
profiler.start('incomplete_phase');
|
|
239
|
+
// Never call end()
|
|
240
|
+
profiler.flush(mockConfig);
|
|
241
|
+
// Should only record the complete phase
|
|
242
|
+
expect(recordStartupPerformance).toHaveBeenCalledTimes(1);
|
|
243
|
+
expect(recordStartupPerformance).toHaveBeenCalledWith(mockConfig, expect.any(Number), expect.objectContaining({ phase: 'complete_phase' }));
|
|
244
|
+
});
|
|
245
|
+
});
|
|
246
|
+
});
|
|
247
|
+
//# sourceMappingURL=startupProfiler.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"startupProfiler.test.js","sourceRoot":"","sources":["../../../src/telemetry/startupProfiler.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -30,7 +30,7 @@ export async function runInDevTraceSpan(opts, fn) {
|
|
|
30
30
|
const { name: spanName, noAutoEnd, ...restOfSpanOpts } = opts;
|
|
31
31
|
if (process.env['GEMINI_DEV_TRACING'] !== 'true') {
|
|
32
32
|
// If GEMINI_DEV_TRACING env var not set, we do not trace.
|
|
33
|
-
return
|
|
33
|
+
return fn({
|
|
34
34
|
metadata: {
|
|
35
35
|
name: spanName,
|
|
36
36
|
attributes: {},
|
|
@@ -41,7 +41,7 @@ export async function runInDevTraceSpan(opts, fn) {
|
|
|
41
41
|
});
|
|
42
42
|
}
|
|
43
43
|
const tracer = trace.getTracer(TRACER_NAME, TRACER_VERSION);
|
|
44
|
-
return
|
|
44
|
+
return tracer.startActiveSpan(opts.name, restOfSpanOpts, async (span) => {
|
|
45
45
|
const meta = {
|
|
46
46
|
name: spanName,
|
|
47
47
|
attributes: {},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trace.js","sourceRoot":"","sources":["../../../src/telemetry/trace.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,IAAI,EACJ,cAAc,EACd,KAAK,GAGN,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAElE,MAAM,WAAW,GAAG,YAAY,CAAC;AACjC,MAAM,cAAc,GAAG,IAAI,CAAC;AAiB5B;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,IAAyD,EACzD,EAKgB;IAEhB,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,cAAc,EAAE,GAAG,IAAI,CAAC;IAC9D,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,KAAK,MAAM,EAAE,CAAC;QACjD,0DAA0D;QAC1D,OAAO,
|
|
1
|
+
{"version":3,"file":"trace.js","sourceRoot":"","sources":["../../../src/telemetry/trace.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,6 +14,7 @@ export { ToolCallDecision };
|
|
|
14
14
|
import type { ToolRegistry } from '../tools/tool-registry.js';
|
|
15
15
|
import type { OutputFormat } from '../output/types.js';
|
|
16
16
|
import type { AgentTerminateMode } from '../agents/types.js';
|
|
17
|
+
import type { OTelFinishReason } from './semantic.js';
|
|
17
18
|
export interface BaseTelemetryEvent {
|
|
18
19
|
'event.name': string;
|
|
19
20
|
/** Current timestamp in ISO 8601 format */
|
|
@@ -98,11 +99,11 @@ export declare class ApiRequestEvent implements BaseTelemetryEvent {
|
|
|
98
99
|
'event.name': 'api_request';
|
|
99
100
|
'event.timestamp': string;
|
|
100
101
|
model: string;
|
|
101
|
-
|
|
102
|
+
prompt: GenAIPromptDetails;
|
|
102
103
|
request_text?: string;
|
|
103
|
-
constructor(model: string,
|
|
104
|
-
|
|
105
|
-
|
|
104
|
+
constructor(model: string, prompt_details: GenAIPromptDetails, request_text?: string);
|
|
105
|
+
toLogRecord(config: Config): LogRecord;
|
|
106
|
+
toSemanticLogRecord(config: Config): LogRecord;
|
|
106
107
|
}
|
|
107
108
|
export declare const EVENT_API_ERROR = "gemini_cli.api_error";
|
|
108
109
|
export declare class ApiErrorEvent implements BaseTelemetryEvent {
|
|
@@ -154,6 +155,7 @@ export declare class ApiResponseEvent implements BaseTelemetryEvent {
|
|
|
154
155
|
prompt: GenAIPromptDetails;
|
|
155
156
|
response: GenAIResponseDetails;
|
|
156
157
|
usage: GenAIUsageDetails;
|
|
158
|
+
finish_reasons: OTelFinishReason[];
|
|
157
159
|
constructor(model: string, duration_ms: number, prompt_details: GenAIPromptDetails, response_details: GenAIResponseDetails, auth_type?: string, usage_data?: GenerateContentResponseUsageMetadata, response_text?: string);
|
|
158
160
|
toLogRecord(config: Config): LogRecord;
|
|
159
161
|
toSemanticLogRecord(config: Config): LogRecord;
|
|
@@ -277,27 +277,50 @@ export class ApiRequestEvent {
|
|
|
277
277
|
'event.name';
|
|
278
278
|
'event.timestamp';
|
|
279
279
|
model;
|
|
280
|
-
|
|
280
|
+
prompt;
|
|
281
281
|
request_text;
|
|
282
|
-
constructor(model,
|
|
282
|
+
constructor(model, prompt_details, request_text) {
|
|
283
283
|
this['event.name'] = 'api_request';
|
|
284
284
|
this['event.timestamp'] = new Date().toISOString();
|
|
285
285
|
this.model = model;
|
|
286
|
-
this.
|
|
286
|
+
this.prompt = prompt_details;
|
|
287
287
|
this.request_text = request_text;
|
|
288
288
|
}
|
|
289
|
-
|
|
290
|
-
|
|
289
|
+
toLogRecord(config) {
|
|
290
|
+
const attributes = {
|
|
291
291
|
...getCommonAttributes(config),
|
|
292
292
|
'event.name': EVENT_API_REQUEST,
|
|
293
293
|
'event.timestamp': this['event.timestamp'],
|
|
294
294
|
model: this.model,
|
|
295
|
-
prompt_id: this.prompt_id,
|
|
295
|
+
prompt_id: this.prompt.prompt_id,
|
|
296
296
|
request_text: this.request_text,
|
|
297
297
|
};
|
|
298
|
+
return { body: `API request to ${this.model}.`, attributes };
|
|
298
299
|
}
|
|
299
|
-
|
|
300
|
-
|
|
300
|
+
toSemanticLogRecord(config) {
|
|
301
|
+
const { 'gen_ai.response.model': _, ...requestConventionAttributes } = getConventionAttributes({
|
|
302
|
+
model: this.model,
|
|
303
|
+
auth_type: config.getContentGeneratorConfig()?.authType,
|
|
304
|
+
});
|
|
305
|
+
const attributes = {
|
|
306
|
+
...getCommonAttributes(config),
|
|
307
|
+
'event.name': EVENT_GEN_AI_OPERATION_DETAILS,
|
|
308
|
+
'event.timestamp': this['event.timestamp'],
|
|
309
|
+
...toGenerateContentConfigAttributes(this.prompt.generate_content_config),
|
|
310
|
+
...requestConventionAttributes,
|
|
311
|
+
};
|
|
312
|
+
if (this.prompt.server) {
|
|
313
|
+
attributes['server.address'] = this.prompt.server.address;
|
|
314
|
+
attributes['server.port'] = this.prompt.server.port;
|
|
315
|
+
}
|
|
316
|
+
if (config.getTelemetryLogPromptsEnabled() && this.prompt.contents) {
|
|
317
|
+
attributes['gen_ai.input.messages'] = JSON.stringify(toInputMessages(this.prompt.contents));
|
|
318
|
+
}
|
|
319
|
+
const logRecord = {
|
|
320
|
+
body: `GenAI operation request details from ${this.model}.`,
|
|
321
|
+
attributes,
|
|
322
|
+
};
|
|
323
|
+
return logRecord;
|
|
301
324
|
}
|
|
302
325
|
}
|
|
303
326
|
export const EVENT_API_ERROR = 'gemini_cli.api_error';
|
|
@@ -402,6 +425,7 @@ export class ApiResponseEvent {
|
|
|
402
425
|
prompt;
|
|
403
426
|
response;
|
|
404
427
|
usage;
|
|
428
|
+
finish_reasons;
|
|
405
429
|
constructor(model, duration_ms, prompt_details, response_details, auth_type, usage_data, response_text) {
|
|
406
430
|
this['event.name'] = 'api_response';
|
|
407
431
|
this['event.timestamp'] = new Date().toISOString();
|
|
@@ -420,6 +444,7 @@ export class ApiResponseEvent {
|
|
|
420
444
|
tool_token_count: usage_data?.toolUsePromptTokenCount ?? 0,
|
|
421
445
|
total_token_count: usage_data?.totalTokenCount ?? 0,
|
|
422
446
|
};
|
|
447
|
+
this.finish_reasons = toFinishReasons(this.response.candidates);
|
|
423
448
|
}
|
|
424
449
|
toLogRecord(config) {
|
|
425
450
|
const attributes = {
|
|
@@ -437,6 +462,7 @@ export class ApiResponseEvent {
|
|
|
437
462
|
prompt_id: this.prompt.prompt_id,
|
|
438
463
|
auth_type: this.auth_type,
|
|
439
464
|
status_code: this.status_code,
|
|
465
|
+
finish_reasons: this.finish_reasons,
|
|
440
466
|
};
|
|
441
467
|
if (this.response_text) {
|
|
442
468
|
attributes['response_text'] = this.response_text;
|
|
@@ -458,7 +484,7 @@ export class ApiResponseEvent {
|
|
|
458
484
|
'event.name': EVENT_GEN_AI_OPERATION_DETAILS,
|
|
459
485
|
'event.timestamp': this['event.timestamp'],
|
|
460
486
|
'gen_ai.response.id': this.response.response_id,
|
|
461
|
-
'gen_ai.response.finish_reasons':
|
|
487
|
+
'gen_ai.response.finish_reasons': this.finish_reasons,
|
|
462
488
|
'gen_ai.output.messages': JSON.stringify(toOutputMessages(this.response.candidates)),
|
|
463
489
|
...toGenerateContentConfigAttributes(this.prompt.generate_content_config),
|
|
464
490
|
...getConventionAttributes(this),
|