@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.
Files changed (172) hide show
  1. package/dist/package.json +1 -1
  2. package/dist/src/agents/executor.js +11 -16
  3. package/dist/src/agents/executor.js.map +1 -1
  4. package/dist/src/agents/executor.test.js +8 -9
  5. package/dist/src/agents/executor.test.js.map +1 -1
  6. package/dist/src/availability/modelAvailabilityService.d.ts +1 -1
  7. package/dist/src/availability/modelAvailabilityService.js +2 -2
  8. package/dist/src/availability/modelAvailabilityService.js.map +1 -1
  9. package/dist/src/availability/modelAvailabilityService.test.js +3 -3
  10. package/dist/src/availability/modelAvailabilityService.test.js.map +1 -1
  11. package/dist/src/availability/policyCatalog.d.ts +3 -1
  12. package/dist/src/availability/policyCatalog.js +2 -2
  13. package/dist/src/availability/policyCatalog.js.map +1 -1
  14. package/dist/src/availability/policyHelpers.d.ts +21 -0
  15. package/dist/src/availability/policyHelpers.js +45 -0
  16. package/dist/src/availability/policyHelpers.js.map +1 -0
  17. package/dist/src/availability/policyHelpers.test.d.ts +6 -0
  18. package/dist/src/availability/policyHelpers.test.js +52 -0
  19. package/dist/src/availability/policyHelpers.test.js.map +1 -0
  20. package/dist/src/code_assist/experiments/client_metadata.js +1 -1
  21. package/dist/src/code_assist/experiments/client_metadata.js.map +1 -1
  22. package/dist/src/code_assist/experiments/experiments.js +2 -2
  23. package/dist/src/code_assist/experiments/experiments.js.map +1 -1
  24. package/dist/src/code_assist/oauth2.js +3 -3
  25. package/dist/src/code_assist/oauth2.js.map +1 -1
  26. package/dist/src/code_assist/oauth2.test.js +1 -1
  27. package/dist/src/code_assist/oauth2.test.js.map +1 -1
  28. package/dist/src/code_assist/server.d.ts +2 -1
  29. package/dist/src/code_assist/server.js +7 -4
  30. package/dist/src/code_assist/server.js.map +1 -1
  31. package/dist/src/code_assist/server.test.js +24 -0
  32. package/dist/src/code_assist/server.test.js.map +1 -1
  33. package/dist/src/code_assist/types.d.ts +14 -0
  34. package/dist/src/config/config.d.ts +14 -0
  35. package/dist/src/config/config.js +36 -0
  36. package/dist/src/config/config.js.map +1 -1
  37. package/dist/src/config/config.test.js +14 -0
  38. package/dist/src/config/config.test.js.map +1 -1
  39. package/dist/src/core/AuthenticatedContentGenerator.js +4 -4
  40. package/dist/src/core/AuthenticatedContentGenerator.js.map +1 -1
  41. package/dist/src/core/client.js +5 -38
  42. package/dist/src/core/client.js.map +1 -1
  43. package/dist/src/core/client.test.js +45 -0
  44. package/dist/src/core/client.test.js.map +1 -1
  45. package/dist/src/core/coreToolHookTriggers.d.ts +55 -0
  46. package/dist/src/core/coreToolHookTriggers.js +244 -0
  47. package/dist/src/core/coreToolHookTriggers.js.map +1 -0
  48. package/dist/src/core/coreToolScheduler.js +11 -2
  49. package/dist/src/core/coreToolScheduler.js.map +1 -1
  50. package/dist/src/core/coreToolScheduler.test.js +66 -1
  51. package/dist/src/core/coreToolScheduler.test.js.map +1 -1
  52. package/dist/src/core/geminiChat.js +91 -19
  53. package/dist/src/core/geminiChat.js.map +1 -1
  54. package/dist/src/core/geminiChat.test.js +15 -4
  55. package/dist/src/core/geminiChat.test.js.map +1 -1
  56. package/dist/src/core/geminiChatHookTriggers.d.ts +64 -0
  57. package/dist/src/core/geminiChatHookTriggers.js +136 -0
  58. package/dist/src/core/geminiChatHookTriggers.js.map +1 -0
  59. package/dist/src/core/loggingContentGenerator.js +9 -4
  60. package/dist/src/core/loggingContentGenerator.js.map +1 -1
  61. package/dist/src/core/prompts.js +39 -20
  62. package/dist/src/core/prompts.js.map +1 -1
  63. package/dist/src/fallback/handler.js +100 -28
  64. package/dist/src/fallback/handler.js.map +1 -1
  65. package/dist/src/fallback/handler.test.js +170 -0
  66. package/dist/src/fallback/handler.test.js.map +1 -1
  67. package/dist/src/fallback/types.d.ts +8 -0
  68. package/dist/src/generated/git-commit.d.ts +2 -2
  69. package/dist/src/generated/git-commit.js +2 -2
  70. package/dist/src/hooks/hookEventHandler.js +11 -11
  71. package/dist/src/hooks/hookEventHandler.js.map +1 -1
  72. package/dist/src/hooks/hookRunner.js +7 -1
  73. package/dist/src/hooks/hookRunner.js.map +1 -1
  74. package/dist/src/hooks/hookRunner.test.js +1 -0
  75. package/dist/src/hooks/hookRunner.test.js.map +1 -1
  76. package/dist/src/hooks/hookSystem.test.js +1 -0
  77. package/dist/src/hooks/hookSystem.test.js.map +1 -1
  78. package/dist/src/ide/ide-client.js +3 -3
  79. package/dist/src/ide/ide-client.js.map +1 -1
  80. package/dist/src/ide/ide-client.test.js +17 -0
  81. package/dist/src/ide/ide-client.test.js.map +1 -1
  82. package/dist/src/index.d.ts +2 -0
  83. package/dist/src/index.js +2 -0
  84. package/dist/src/index.js.map +1 -1
  85. package/dist/src/mcp/auth-provider.d.ts +16 -0
  86. package/dist/src/mcp/auth-provider.js +7 -0
  87. package/dist/src/mcp/auth-provider.js.map +1 -0
  88. package/dist/src/mcp/google-auth-provider.d.ts +10 -2
  89. package/dist/src/mcp/google-auth-provider.js +28 -0
  90. package/dist/src/mcp/google-auth-provider.js.map +1 -1
  91. package/dist/src/mcp/google-auth-provider.test.js +45 -0
  92. package/dist/src/mcp/google-auth-provider.test.js.map +1 -1
  93. package/dist/src/mcp/mcpLauncher.js +32 -8
  94. package/dist/src/mcp/mcpLauncher.js.map +1 -1
  95. package/dist/src/mcp/sa-impersonation-provider.d.ts +2 -2
  96. package/dist/src/mcp/sa-impersonation-provider.js.map +1 -1
  97. package/dist/src/mcp/token-storage/hybrid-token-storage.js +1 -1
  98. package/dist/src/mcp/token-storage/hybrid-token-storage.js.map +1 -1
  99. package/dist/src/policy/policies/read-only.toml +5 -0
  100. package/dist/src/services/chatCompressionService.js +2 -2
  101. package/dist/src/services/chatCompressionService.js.map +1 -1
  102. package/dist/src/services/chatCompressionService.test.js +7 -0
  103. package/dist/src/services/chatCompressionService.test.js.map +1 -1
  104. package/dist/src/services/contextManager.d.ts +35 -0
  105. package/dist/src/services/contextManager.js +68 -0
  106. package/dist/src/services/contextManager.js.map +1 -0
  107. package/dist/src/services/contextManager.test.d.ts +6 -0
  108. package/dist/src/services/contextManager.test.js +105 -0
  109. package/dist/src/services/contextManager.test.js.map +1 -0
  110. package/dist/src/services/loopDetectionService.js +1 -1
  111. package/dist/src/services/loopDetectionService.js.map +1 -1
  112. package/dist/src/services/shellExecutionService.js +51 -23
  113. package/dist/src/services/shellExecutionService.js.map +1 -1
  114. package/dist/src/services/shellExecutionService.test.js +102 -12
  115. package/dist/src/services/shellExecutionService.test.js.map +1 -1
  116. package/dist/src/telemetry/index.d.ts +1 -0
  117. package/dist/src/telemetry/index.js +1 -0
  118. package/dist/src/telemetry/index.js.map +1 -1
  119. package/dist/src/telemetry/loggers.js +2 -5
  120. package/dist/src/telemetry/loggers.js.map +1 -1
  121. package/dist/src/telemetry/loggers.test.js +175 -13
  122. package/dist/src/telemetry/loggers.test.js.map +1 -1
  123. package/dist/src/telemetry/startupProfiler.d.ts +51 -0
  124. package/dist/src/telemetry/startupProfiler.js +147 -0
  125. package/dist/src/telemetry/startupProfiler.js.map +1 -0
  126. package/dist/src/telemetry/startupProfiler.test.d.ts +6 -0
  127. package/dist/src/telemetry/startupProfiler.test.js +247 -0
  128. package/dist/src/telemetry/startupProfiler.test.js.map +1 -0
  129. package/dist/src/telemetry/trace.js +2 -2
  130. package/dist/src/telemetry/trace.js.map +1 -1
  131. package/dist/src/telemetry/types.d.ts +6 -4
  132. package/dist/src/telemetry/types.js +35 -9
  133. package/dist/src/telemetry/types.js.map +1 -1
  134. package/dist/src/tools/mcp-client-manager.d.ts +1 -0
  135. package/dist/src/tools/mcp-client-manager.js +10 -0
  136. package/dist/src/tools/mcp-client-manager.js.map +1 -1
  137. package/dist/src/tools/mcp-client-manager.test.js +25 -0
  138. package/dist/src/tools/mcp-client-manager.test.js.map +1 -1
  139. package/dist/src/tools/mcp-client.d.ts +1 -0
  140. package/dist/src/tools/mcp-client.js +4 -6
  141. package/dist/src/tools/mcp-client.js.map +1 -1
  142. package/dist/src/tools/mcp-client.test.js +47 -0
  143. package/dist/src/tools/mcp-client.test.js.map +1 -1
  144. package/dist/src/tools/shell.js +43 -3
  145. package/dist/src/tools/shell.js.map +1 -1
  146. package/dist/src/tools/shell.test.js +23 -4
  147. package/dist/src/tools/shell.test.js.map +1 -1
  148. package/dist/src/tools/smart-edit.js +1 -1
  149. package/dist/src/tools/smart-edit.js.map +1 -1
  150. package/dist/src/tools/web-fetch.js +1 -1
  151. package/dist/src/tools/web-fetch.js.map +1 -1
  152. package/dist/src/utils/exitCodes.d.ts +12 -0
  153. package/dist/src/utils/exitCodes.js +13 -0
  154. package/dist/src/utils/exitCodes.js.map +1 -0
  155. package/dist/src/utils/memoryDiscovery.d.ts +5 -0
  156. package/dist/src/utils/memoryDiscovery.js +7 -3
  157. package/dist/src/utils/memoryDiscovery.js.map +1 -1
  158. package/dist/src/utils/memoryDiscovery.test.js +28 -0
  159. package/dist/src/utils/memoryDiscovery.test.js.map +1 -1
  160. package/dist/src/utils/stdio.d.ts +2 -2
  161. package/dist/src/utils/stdio.js +2 -2
  162. package/dist/src/utils/stdio.js.map +1 -1
  163. package/dist/src/utils/stdio.test.js +5 -5
  164. package/dist/src/utils/stdio.test.js.map +1 -1
  165. package/dist/src/utils/tokenCalculation.d.ts +19 -0
  166. package/dist/src/utils/tokenCalculation.js +70 -0
  167. package/dist/src/utils/tokenCalculation.js.map +1 -0
  168. package/dist/src/utils/tokenCalculation.test.d.ts +6 -0
  169. package/dist/src/utils/tokenCalculation.test.js +78 -0
  170. package/dist/src/utils/tokenCalculation.test.js.map +1 -0
  171. package/dist/tsconfig.tsbuildinfo +1 -1
  172. 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,6 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export {};
@@ -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 await fn({
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 await tracer.startActiveSpan(opts.name, restOfSpanOpts, async (span) => {
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":"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"}
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
- prompt_id: string;
102
+ prompt: GenAIPromptDetails;
102
103
  request_text?: string;
103
- constructor(model: string, prompt_id: string, request_text?: string);
104
- toOpenTelemetryAttributes(config: Config): LogAttributes;
105
- toLogBody(): string;
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
- prompt_id;
280
+ prompt;
281
281
  request_text;
282
- constructor(model, prompt_id, request_text) {
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.prompt_id = prompt_id;
286
+ this.prompt = prompt_details;
287
287
  this.request_text = request_text;
288
288
  }
289
- toOpenTelemetryAttributes(config) {
290
- return {
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
- toLogBody() {
300
- return `API request to ${this.model}.`;
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': toFinishReasons(this.response.candidates),
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),