@google/gemini-cli-a2a-server 0.21.0-nightly.20251204.3da4fd5f7 → 0.21.0-nightly.20251206.3cf44acc0
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/a2a-server.mjs +211 -51
- package/dist/src/config/config.js +1 -0
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/settings.d.ts +3 -0
- package/dist/src/config/settings.js.map +1 -1
- package/dist/src/config/settings.test.d.ts +6 -0
- package/dist/src/config/settings.test.js +161 -0
- package/dist/src/config/settings.test.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,161 @@
|
|
|
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 * as fs from 'node:fs';
|
|
8
|
+
import * as path from 'node:path';
|
|
9
|
+
import * as os from 'node:os';
|
|
10
|
+
import { loadSettings, USER_SETTINGS_PATH } from './settings.js';
|
|
11
|
+
const mocks = vi.hoisted(() => {
|
|
12
|
+
const suffix = Math.random().toString(36).slice(2);
|
|
13
|
+
return {
|
|
14
|
+
suffix,
|
|
15
|
+
};
|
|
16
|
+
});
|
|
17
|
+
vi.mock('node:os', async (importOriginal) => {
|
|
18
|
+
const actual = await importOriginal();
|
|
19
|
+
const path = await import('node:path');
|
|
20
|
+
return {
|
|
21
|
+
...actual,
|
|
22
|
+
homedir: () => path.join(actual.tmpdir(), `gemini-home-${mocks.suffix}`),
|
|
23
|
+
};
|
|
24
|
+
});
|
|
25
|
+
vi.mock('@google/gemini-cli-core', () => ({
|
|
26
|
+
GEMINI_DIR: '.gemini',
|
|
27
|
+
debugLogger: {
|
|
28
|
+
error: vi.fn(),
|
|
29
|
+
},
|
|
30
|
+
getErrorMessage: (error) => String(error),
|
|
31
|
+
}));
|
|
32
|
+
describe('loadSettings', () => {
|
|
33
|
+
const mockHomeDir = path.join(os.tmpdir(), `gemini-home-${mocks.suffix}`);
|
|
34
|
+
const mockWorkspaceDir = path.join(os.tmpdir(), `gemini-workspace-${mocks.suffix}`);
|
|
35
|
+
const mockGeminiHomeDir = path.join(mockHomeDir, '.gemini');
|
|
36
|
+
const mockGeminiWorkspaceDir = path.join(mockWorkspaceDir, '.gemini');
|
|
37
|
+
beforeEach(() => {
|
|
38
|
+
vi.clearAllMocks();
|
|
39
|
+
// Create the directories using the real fs
|
|
40
|
+
if (!fs.existsSync(mockGeminiHomeDir)) {
|
|
41
|
+
fs.mkdirSync(mockGeminiHomeDir, { recursive: true });
|
|
42
|
+
}
|
|
43
|
+
if (!fs.existsSync(mockGeminiWorkspaceDir)) {
|
|
44
|
+
fs.mkdirSync(mockGeminiWorkspaceDir, { recursive: true });
|
|
45
|
+
}
|
|
46
|
+
// Clean up settings files before each test
|
|
47
|
+
if (fs.existsSync(USER_SETTINGS_PATH)) {
|
|
48
|
+
fs.rmSync(USER_SETTINGS_PATH);
|
|
49
|
+
}
|
|
50
|
+
const workspaceSettingsPath = path.join(mockGeminiWorkspaceDir, 'settings.json');
|
|
51
|
+
if (fs.existsSync(workspaceSettingsPath)) {
|
|
52
|
+
fs.rmSync(workspaceSettingsPath);
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
afterEach(() => {
|
|
56
|
+
try {
|
|
57
|
+
if (fs.existsSync(mockHomeDir)) {
|
|
58
|
+
fs.rmSync(mockHomeDir, { recursive: true, force: true });
|
|
59
|
+
}
|
|
60
|
+
if (fs.existsSync(mockWorkspaceDir)) {
|
|
61
|
+
fs.rmSync(mockWorkspaceDir, { recursive: true, force: true });
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
catch (e) {
|
|
65
|
+
console.error('Failed to cleanup temp dirs', e);
|
|
66
|
+
}
|
|
67
|
+
vi.restoreAllMocks();
|
|
68
|
+
});
|
|
69
|
+
it('should load nested previewFeatures from user settings', () => {
|
|
70
|
+
const settings = {
|
|
71
|
+
general: {
|
|
72
|
+
previewFeatures: true,
|
|
73
|
+
},
|
|
74
|
+
};
|
|
75
|
+
fs.writeFileSync(USER_SETTINGS_PATH, JSON.stringify(settings));
|
|
76
|
+
const result = loadSettings(mockWorkspaceDir);
|
|
77
|
+
expect(result.general?.previewFeatures).toBe(true);
|
|
78
|
+
});
|
|
79
|
+
it('should load nested previewFeatures from workspace settings', () => {
|
|
80
|
+
const settings = {
|
|
81
|
+
general: {
|
|
82
|
+
previewFeatures: true,
|
|
83
|
+
},
|
|
84
|
+
};
|
|
85
|
+
const workspaceSettingsPath = path.join(mockGeminiWorkspaceDir, 'settings.json');
|
|
86
|
+
fs.writeFileSync(workspaceSettingsPath, JSON.stringify(settings));
|
|
87
|
+
const result = loadSettings(mockWorkspaceDir);
|
|
88
|
+
expect(result.general?.previewFeatures).toBe(true);
|
|
89
|
+
});
|
|
90
|
+
it('should prioritize workspace settings over user settings', () => {
|
|
91
|
+
const userSettings = {
|
|
92
|
+
general: {
|
|
93
|
+
previewFeatures: false,
|
|
94
|
+
},
|
|
95
|
+
};
|
|
96
|
+
fs.writeFileSync(USER_SETTINGS_PATH, JSON.stringify(userSettings));
|
|
97
|
+
const workspaceSettings = {
|
|
98
|
+
general: {
|
|
99
|
+
previewFeatures: true,
|
|
100
|
+
},
|
|
101
|
+
};
|
|
102
|
+
const workspaceSettingsPath = path.join(mockGeminiWorkspaceDir, 'settings.json');
|
|
103
|
+
fs.writeFileSync(workspaceSettingsPath, JSON.stringify(workspaceSettings));
|
|
104
|
+
const result = loadSettings(mockWorkspaceDir);
|
|
105
|
+
expect(result.general?.previewFeatures).toBe(true);
|
|
106
|
+
});
|
|
107
|
+
it('should handle missing previewFeatures', () => {
|
|
108
|
+
const settings = {
|
|
109
|
+
general: {},
|
|
110
|
+
};
|
|
111
|
+
fs.writeFileSync(USER_SETTINGS_PATH, JSON.stringify(settings));
|
|
112
|
+
const result = loadSettings(mockWorkspaceDir);
|
|
113
|
+
expect(result.general?.previewFeatures).toBeUndefined();
|
|
114
|
+
});
|
|
115
|
+
it('should load other top-level settings correctly', () => {
|
|
116
|
+
const settings = {
|
|
117
|
+
showMemoryUsage: true,
|
|
118
|
+
coreTools: ['tool1', 'tool2'],
|
|
119
|
+
mcpServers: {
|
|
120
|
+
server1: {
|
|
121
|
+
command: 'cmd',
|
|
122
|
+
args: ['arg'],
|
|
123
|
+
},
|
|
124
|
+
},
|
|
125
|
+
fileFiltering: {
|
|
126
|
+
respectGitIgnore: true,
|
|
127
|
+
},
|
|
128
|
+
};
|
|
129
|
+
fs.writeFileSync(USER_SETTINGS_PATH, JSON.stringify(settings));
|
|
130
|
+
const result = loadSettings(mockWorkspaceDir);
|
|
131
|
+
expect(result.showMemoryUsage).toBe(true);
|
|
132
|
+
expect(result.coreTools).toEqual(['tool1', 'tool2']);
|
|
133
|
+
expect(result.mcpServers).toHaveProperty('server1');
|
|
134
|
+
expect(result.fileFiltering?.respectGitIgnore).toBe(true);
|
|
135
|
+
});
|
|
136
|
+
it('should overwrite top-level settings from workspace (shallow merge)', () => {
|
|
137
|
+
const userSettings = {
|
|
138
|
+
showMemoryUsage: false,
|
|
139
|
+
fileFiltering: {
|
|
140
|
+
respectGitIgnore: true,
|
|
141
|
+
enableRecursiveFileSearch: true,
|
|
142
|
+
},
|
|
143
|
+
};
|
|
144
|
+
fs.writeFileSync(USER_SETTINGS_PATH, JSON.stringify(userSettings));
|
|
145
|
+
const workspaceSettings = {
|
|
146
|
+
showMemoryUsage: true,
|
|
147
|
+
fileFiltering: {
|
|
148
|
+
respectGitIgnore: false,
|
|
149
|
+
},
|
|
150
|
+
};
|
|
151
|
+
const workspaceSettingsPath = path.join(mockGeminiWorkspaceDir, 'settings.json');
|
|
152
|
+
fs.writeFileSync(workspaceSettingsPath, JSON.stringify(workspaceSettings));
|
|
153
|
+
const result = loadSettings(mockWorkspaceDir);
|
|
154
|
+
// Primitive value overwritten
|
|
155
|
+
expect(result.showMemoryUsage).toBe(true);
|
|
156
|
+
// Object value completely replaced (shallow merge behavior)
|
|
157
|
+
expect(result.fileFiltering?.respectGitIgnore).toBe(false);
|
|
158
|
+
expect(result.fileFiltering?.enableRecursiveFileSearch).toBeUndefined();
|
|
159
|
+
});
|
|
160
|
+
});
|
|
161
|
+
//# sourceMappingURL=settings.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings.test.js","sourceRoot":"","sources":["../../../src/config/settings.test.ts"],"names":[],"mappings":"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"}
|