@google/gemini-cli-core 0.38.0-preview.0 → 0.39.0-nightly.20260408.a39461718

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 (38) hide show
  1. package/dist/docs/integration-tests.md +40 -0
  2. package/dist/google-gemini-cli-core-0.39.0-nightly.20260408.e77b22e63.tgz +0 -0
  3. package/dist/src/agents/registry.test.js +2 -2
  4. package/dist/src/commands/memory.d.ts +33 -0
  5. package/dist/src/commands/memory.js +139 -0
  6. package/dist/src/commands/memory.js.map +1 -1
  7. package/dist/src/commands/memory.test.js +212 -1
  8. package/dist/src/commands/memory.test.js.map +1 -1
  9. package/dist/src/generated/git-commit.d.ts +2 -2
  10. package/dist/src/generated/git-commit.js +2 -2
  11. package/dist/src/generated/git-commit.js.map +1 -1
  12. package/dist/src/policy/config.js +3 -2
  13. package/dist/src/policy/config.js.map +1 -1
  14. package/dist/src/policy/policies/plan.toml +15 -31
  15. package/dist/src/policy/policies/read-only.toml +21 -38
  16. package/dist/src/policy/policy-engine.test.js +2 -2
  17. package/dist/src/policy/toml-loader.test.js +12 -7
  18. package/dist/src/policy/toml-loader.test.js.map +1 -1
  19. package/dist/src/policy/types.d.ts +4 -2
  20. package/dist/src/policy/types.js +4 -2
  21. package/dist/src/policy/types.js.map +1 -1
  22. package/dist/src/services/memoryService.js +3 -0
  23. package/dist/src/services/memoryService.js.map +1 -1
  24. package/dist/src/services/memoryService.test.js +77 -0
  25. package/dist/src/services/memoryService.test.js.map +1 -1
  26. package/dist/src/services/sandboxedFileSystemService.js +72 -62
  27. package/dist/src/services/sandboxedFileSystemService.js.map +1 -1
  28. package/dist/src/services/shellExecutionService.js +10 -2
  29. package/dist/src/services/shellExecutionService.js.map +1 -1
  30. package/dist/src/tools/grep.js +20 -11
  31. package/dist/src/tools/grep.js.map +1 -1
  32. package/dist/src/tools/tool-registry.js +128 -112
  33. package/dist/src/tools/tool-registry.js.map +1 -1
  34. package/dist/src/utils/shell-utils.js +120 -108
  35. package/dist/src/utils/shell-utils.js.map +1 -1
  36. package/dist/tsconfig.tsbuildinfo +1 -1
  37. package/package.json +1 -1
  38. package/dist/src/policy/policies/tracker.toml +0 -34
@@ -117,6 +117,46 @@ npm run test:integration:sandbox:docker
117
117
  npm run test:integration:sandbox:podman
118
118
  ```
119
119
 
120
+ ## Memory regression tests
121
+
122
+ Memory regression tests are designed to detect heap growth and leaks across key
123
+ CLI scenarios. They are located in the `memory-tests` directory.
124
+
125
+ These tests are distinct from standard integration tests because they measure
126
+ memory usage and compare it against committed baselines.
127
+
128
+ ### Running memory tests
129
+
130
+ Memory tests are not run as part of the default `npm run test` or
131
+ `npm run test:e2e` commands. They are run nightly in CI but can be run manually:
132
+
133
+ ```bash
134
+ npm run test:memory
135
+ ```
136
+
137
+ ### Updating baselines
138
+
139
+ If you intentionally change behavior that affects memory usage, you may need to
140
+ update the baselines. Set the `UPDATE_MEMORY_BASELINES` environment variable to
141
+ `true`:
142
+
143
+ ```bash
144
+ UPDATE_MEMORY_BASELINES=true npm run test:memory
145
+ ```
146
+
147
+ This will run the tests, take median snapshots, and overwrite
148
+ `memory-tests/baselines.json`. You should review the changes and commit the
149
+ updated baseline file.
150
+
151
+ ### How it works
152
+
153
+ The harness (`MemoryTestHarness` in `packages/test-utils`):
154
+
155
+ - Forces garbage collection multiple times to reduce noise.
156
+ - Takes median snapshots to filter spikes.
157
+ - Compares against baselines with a 10% tolerance.
158
+ - Can analyze sustained leaks across 3 snapshots using `analyzeSnapshots()`.
159
+
120
160
  ## Diagnostics
121
161
 
122
162
  The integration test runner provides several options for diagnostics to help
@@ -790,7 +790,7 @@ describe('AgentRegistry', () => {
790
790
  expect(addRuleSpy).toHaveBeenCalledWith(expect.objectContaining({
791
791
  toolName: 'PolicyTestAgent',
792
792
  decision: PolicyDecision.ALLOW,
793
- priority: 1.05,
793
+ priority: 1.03,
794
794
  }));
795
795
  });
796
796
  it('should dynamically register an ASK_USER policy for remote agents', async () => {
@@ -810,7 +810,7 @@ describe('AgentRegistry', () => {
810
810
  expect(addRuleSpy).toHaveBeenCalledWith(expect.objectContaining({
811
811
  toolName: 'RemotePolicyAgent',
812
812
  decision: PolicyDecision.ASK_USER,
813
- priority: 1.05,
813
+ priority: 1.03,
814
814
  }));
815
815
  });
816
816
  it('should not register a policy if a USER policy already exists', async () => {
@@ -9,3 +9,36 @@ export declare function showMemory(config: Config): MessageActionReturn;
9
9
  export declare function addMemory(args?: string): MessageActionReturn | ToolActionReturn;
10
10
  export declare function refreshMemory(config: Config): Promise<MessageActionReturn>;
11
11
  export declare function listMemoryFiles(config: Config): MessageActionReturn;
12
+ /**
13
+ * Represents a skill found in the extraction inbox.
14
+ */
15
+ export interface InboxSkill {
16
+ /** Directory name in the inbox. */
17
+ dirName: string;
18
+ /** Skill name from SKILL.md frontmatter. */
19
+ name: string;
20
+ /** Skill description from SKILL.md frontmatter. */
21
+ description: string;
22
+ /** When the skill was extracted (ISO string), if known. */
23
+ extractedAt?: string;
24
+ }
25
+ /**
26
+ * Scans the skill extraction inbox and returns structured data
27
+ * for each extracted skill.
28
+ */
29
+ export declare function listInboxSkills(config: Config): Promise<InboxSkill[]>;
30
+ export type InboxSkillDestination = 'global' | 'project';
31
+ /**
32
+ * Copies an inbox skill to the target skills directory.
33
+ */
34
+ export declare function moveInboxSkill(config: Config, dirName: string, destination: InboxSkillDestination): Promise<{
35
+ success: boolean;
36
+ message: string;
37
+ }>;
38
+ /**
39
+ * Removes a skill from the extraction inbox.
40
+ */
41
+ export declare function dismissInboxSkill(config: Config, dirName: string): Promise<{
42
+ success: boolean;
43
+ message: string;
44
+ }>;
@@ -3,7 +3,12 @@
3
3
  * Copyright 2025 Google LLC
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
+ import * as fs from 'node:fs/promises';
7
+ import * as path from 'node:path';
8
+ import { Storage } from '../config/storage.js';
6
9
  import { flattenMemory } from '../config/memory.js';
10
+ import { loadSkillFromFile, loadSkillsFromDir } from '../skills/skillLoader.js';
11
+ import { readExtractionState } from '../services/memoryService.js';
7
12
  import { refreshServerHierarchicalMemory } from '../utils/memoryDiscovery.js';
8
13
  export function showMemory(config) {
9
14
  const memoryContent = flattenMemory(config.getUserMemory());
@@ -78,4 +83,138 @@ export function listMemoryFiles(config) {
78
83
  content,
79
84
  };
80
85
  }
86
+ /**
87
+ * Scans the skill extraction inbox and returns structured data
88
+ * for each extracted skill.
89
+ */
90
+ export async function listInboxSkills(config) {
91
+ const skillsDir = config.storage.getProjectSkillsMemoryDir();
92
+ let entries;
93
+ try {
94
+ entries = await fs.readdir(skillsDir, { withFileTypes: true });
95
+ }
96
+ catch {
97
+ return [];
98
+ }
99
+ const dirs = entries.filter((e) => e.isDirectory());
100
+ if (dirs.length === 0) {
101
+ return [];
102
+ }
103
+ // Load extraction state to get dates
104
+ const memoryDir = config.storage.getProjectMemoryTempDir();
105
+ const statePath = path.join(memoryDir, '.extraction-state.json');
106
+ const state = await readExtractionState(statePath);
107
+ // Build a map: skillDirName → extractedAt
108
+ const skillDateMap = new Map();
109
+ for (const run of state.runs) {
110
+ for (const skillName of run.skillsCreated) {
111
+ skillDateMap.set(skillName, run.runAt);
112
+ }
113
+ }
114
+ const skills = [];
115
+ for (const dir of dirs) {
116
+ const skillPath = path.join(skillsDir, dir.name, 'SKILL.md');
117
+ const skillDef = await loadSkillFromFile(skillPath);
118
+ if (!skillDef)
119
+ continue;
120
+ skills.push({
121
+ dirName: dir.name,
122
+ name: skillDef.name,
123
+ description: skillDef.description,
124
+ extractedAt: skillDateMap.get(dir.name),
125
+ });
126
+ }
127
+ return skills;
128
+ }
129
+ function isValidInboxSkillDirName(dirName) {
130
+ return (dirName.length > 0 &&
131
+ dirName !== '.' &&
132
+ dirName !== '..' &&
133
+ !dirName.includes('/') &&
134
+ !dirName.includes('\\'));
135
+ }
136
+ async function getSkillNameForConflictCheck(skillDir, fallbackName) {
137
+ const skill = await loadSkillFromFile(path.join(skillDir, 'SKILL.md'));
138
+ return skill?.name ?? fallbackName;
139
+ }
140
+ /**
141
+ * Copies an inbox skill to the target skills directory.
142
+ */
143
+ export async function moveInboxSkill(config, dirName, destination) {
144
+ if (!isValidInboxSkillDirName(dirName)) {
145
+ return {
146
+ success: false,
147
+ message: 'Invalid skill name.',
148
+ };
149
+ }
150
+ const skillsDir = config.storage.getProjectSkillsMemoryDir();
151
+ const sourcePath = path.join(skillsDir, dirName);
152
+ try {
153
+ await fs.access(sourcePath);
154
+ }
155
+ catch {
156
+ return {
157
+ success: false,
158
+ message: `Skill "${dirName}" not found in inbox.`,
159
+ };
160
+ }
161
+ const targetBase = destination === 'global'
162
+ ? Storage.getUserSkillsDir()
163
+ : config.storage.getProjectSkillsDir();
164
+ const targetPath = path.join(targetBase, dirName);
165
+ const skillName = await getSkillNameForConflictCheck(sourcePath, dirName);
166
+ try {
167
+ await fs.access(targetPath);
168
+ return {
169
+ success: false,
170
+ message: `A skill named "${skillName}" already exists in ${destination} skills.`,
171
+ };
172
+ }
173
+ catch {
174
+ // Target doesn't exist — good
175
+ }
176
+ const existingTargetSkills = await loadSkillsFromDir(targetBase);
177
+ if (existingTargetSkills.some((skill) => skill.name === skillName)) {
178
+ return {
179
+ success: false,
180
+ message: `A skill named "${skillName}" already exists in ${destination} skills.`,
181
+ };
182
+ }
183
+ await fs.mkdir(targetBase, { recursive: true });
184
+ await fs.cp(sourcePath, targetPath, { recursive: true });
185
+ // Remove from inbox after successful copy
186
+ await fs.rm(sourcePath, { recursive: true, force: true });
187
+ const label = destination === 'global' ? '~/.gemini/skills' : '.gemini/skills';
188
+ return {
189
+ success: true,
190
+ message: `Moved "${dirName}" to ${label}.`,
191
+ };
192
+ }
193
+ /**
194
+ * Removes a skill from the extraction inbox.
195
+ */
196
+ export async function dismissInboxSkill(config, dirName) {
197
+ if (!isValidInboxSkillDirName(dirName)) {
198
+ return {
199
+ success: false,
200
+ message: 'Invalid skill name.',
201
+ };
202
+ }
203
+ const skillsDir = config.storage.getProjectSkillsMemoryDir();
204
+ const sourcePath = path.join(skillsDir, dirName);
205
+ try {
206
+ await fs.access(sourcePath);
207
+ }
208
+ catch {
209
+ return {
210
+ success: false,
211
+ message: `Skill "${dirName}" not found in inbox.`,
212
+ };
213
+ }
214
+ await fs.rm(sourcePath, { recursive: true, force: true });
215
+ return {
216
+ success: true,
217
+ message: `Dismissed "${dirName}" from inbox.`,
218
+ };
219
+ }
81
220
  //# sourceMappingURL=memory.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"memory.js","sourceRoot":"","sources":["../../../src/commands/memory.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,+BAA+B,EAAE,MAAM,6BAA6B,CAAC;AAG9E,MAAM,UAAU,UAAU,CAAC,MAAc;IACvC,MAAM,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC;IAC5D,MAAM,SAAS,GAAG,MAAM,CAAC,oBAAoB,EAAE,IAAI,CAAC,CAAC;IACrD,IAAI,OAAe,CAAC;IAEpB,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,OAAO,GAAG,+BAA+B,SAAS,qBAAqB,aAAa,OAAO,CAAC;IAC9F,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,4BAA4B,CAAC;IACzC,CAAC;IAED,OAAO;QACL,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,MAAM;QACnB,OAAO;KACR,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,SAAS,CACvB,IAAa;IAEb,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAChC,OAAO;YACL,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,OAAO;YACpB,OAAO,EAAE,uCAAuC;SACjD,CAAC;IACJ,CAAC;IACD,OAAO;QACL,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,aAAa;QACvB,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE;KAChC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,MAAc;IAEd,IAAI,aAAa,GAAG,EAAE,CAAC;IACvB,IAAI,SAAS,GAAG,CAAC,CAAC;IAElB,IAAI,MAAM,CAAC,mBAAmB,EAAE,EAAE,CAAC;QACjC,MAAM,MAAM,CAAC,uBAAuB,EAAE,EAAE,OAAO,EAAE,CAAC;QAClD,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC;QACtD,SAAS,GAAG,MAAM,CAAC,oBAAoB,EAAE,CAAC;IAC5C,CAAC;SAAM,CAAC;QACN,MAAM,MAAM,GAAG,MAAM,+BAA+B,CAAC,MAAM,CAAC,CAAC;QAC7D,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QACpD,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;IAC/B,CAAC;IAED,MAAM,CAAC,oCAAoC,EAAE,CAAC;IAC9C,IAAI,OAAe,CAAC;IAEpB,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,OAAO,GAAG,wCAAwC,aAAa,CAAC,MAAM,oBAAoB,SAAS,UAAU,CAAC;IAChH,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,uDAAuD,CAAC;IACpE,CAAC;IAED,OAAO;QACL,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,MAAM;QACnB,OAAO;KACR,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,MAAc;IAC5C,MAAM,SAAS,GAAG,MAAM,CAAC,oBAAoB,EAAE,IAAI,EAAE,CAAC;IACtD,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC;IACnC,IAAI,OAAe,CAAC;IAEpB,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;QAClB,OAAO,GAAG,aAAa,SAAS,iCAAiC,SAAS,CAAC,IAAI,CAC7E,IAAI,CACL,EAAE,CAAC;IACN,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,4BAA4B,CAAC;IACzC,CAAC;IAED,OAAO;QACL,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,MAAM;QACnB,OAAO;KACR,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"memory.js","sourceRoot":"","sources":["../../../src/commands/memory.ts"],"names":[],"mappings":"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"}
@@ -3,12 +3,21 @@
3
3
  * Copyright 2025 Google LLC
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
+ import * as fs from 'node:fs/promises';
7
+ import * as os from 'node:os';
8
+ import * as path from 'node:path';
6
9
  import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
7
- import { addMemory, listMemoryFiles, refreshMemory, showMemory, } from './memory.js';
10
+ import { Storage } from '../config/storage.js';
11
+ import { addMemory, dismissInboxSkill, listInboxSkills, listMemoryFiles, moveInboxSkill, refreshMemory, showMemory, } from './memory.js';
8
12
  import * as memoryDiscovery from '../utils/memoryDiscovery.js';
9
13
  vi.mock('../utils/memoryDiscovery.js', () => ({
10
14
  refreshServerHierarchicalMemory: vi.fn(),
11
15
  }));
16
+ vi.mock('../config/storage.js', () => ({
17
+ Storage: {
18
+ getUserSkillsDir: vi.fn(),
19
+ },
20
+ }));
12
21
  const mockRefresh = vi.mocked(memoryDiscovery.refreshServerHierarchicalMemory);
13
22
  describe('memory commands', () => {
14
23
  let mockConfig;
@@ -151,5 +160,207 @@ describe('memory commands', () => {
151
160
  }
152
161
  });
153
162
  });
163
+ describe('listInboxSkills', () => {
164
+ let tmpDir;
165
+ let skillsDir;
166
+ let memoryTempDir;
167
+ let inboxConfig;
168
+ async function writeSkillMd(dirName, name, description) {
169
+ const dir = path.join(skillsDir, dirName);
170
+ await fs.mkdir(dir, { recursive: true });
171
+ await fs.writeFile(path.join(dir, 'SKILL.md'), `---\nname: ${name}\ndescription: ${description}\n---\nBody content here\n`);
172
+ }
173
+ beforeEach(async () => {
174
+ tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), 'inbox-test-'));
175
+ skillsDir = path.join(tmpDir, 'skills-memory');
176
+ memoryTempDir = path.join(tmpDir, 'memory-temp');
177
+ await fs.mkdir(skillsDir, { recursive: true });
178
+ await fs.mkdir(memoryTempDir, { recursive: true });
179
+ inboxConfig = {
180
+ storage: {
181
+ getProjectSkillsMemoryDir: () => skillsDir,
182
+ getProjectMemoryTempDir: () => memoryTempDir,
183
+ getProjectSkillsDir: () => path.join(tmpDir, 'project-skills'),
184
+ },
185
+ };
186
+ });
187
+ afterEach(async () => {
188
+ await fs.rm(tmpDir, { recursive: true, force: true });
189
+ });
190
+ it('should return inbox skills with name, description, and extractedAt', async () => {
191
+ await writeSkillMd('my-skill', 'my-skill', 'A test skill');
192
+ await writeSkillMd('other-skill', 'other-skill', 'Another skill');
193
+ const stateContent = JSON.stringify({
194
+ runs: [
195
+ {
196
+ runAt: '2025-01-15T10:00:00Z',
197
+ sessionIds: ['sess-1'],
198
+ skillsCreated: ['my-skill'],
199
+ },
200
+ {
201
+ runAt: '2025-01-16T12:00:00Z',
202
+ sessionIds: ['sess-2'],
203
+ skillsCreated: ['other-skill'],
204
+ },
205
+ ],
206
+ });
207
+ await fs.writeFile(path.join(memoryTempDir, '.extraction-state.json'), stateContent);
208
+ const skills = await listInboxSkills(inboxConfig);
209
+ expect(skills).toHaveLength(2);
210
+ const mySkill = skills.find((s) => s.dirName === 'my-skill');
211
+ expect(mySkill).toBeDefined();
212
+ expect(mySkill.name).toBe('my-skill');
213
+ expect(mySkill.description).toBe('A test skill');
214
+ expect(mySkill.extractedAt).toBe('2025-01-15T10:00:00Z');
215
+ const otherSkill = skills.find((s) => s.dirName === 'other-skill');
216
+ expect(otherSkill).toBeDefined();
217
+ expect(otherSkill.name).toBe('other-skill');
218
+ expect(otherSkill.description).toBe('Another skill');
219
+ expect(otherSkill.extractedAt).toBe('2025-01-16T12:00:00Z');
220
+ });
221
+ it('should return an empty array when the inbox is empty', async () => {
222
+ const skills = await listInboxSkills(inboxConfig);
223
+ expect(skills).toEqual([]);
224
+ });
225
+ it('should return an empty array when the inbox directory does not exist', async () => {
226
+ const missingConfig = {
227
+ storage: {
228
+ getProjectSkillsMemoryDir: () => path.join(tmpDir, 'nonexistent-dir'),
229
+ getProjectMemoryTempDir: () => memoryTempDir,
230
+ },
231
+ };
232
+ const skills = await listInboxSkills(missingConfig);
233
+ expect(skills).toEqual([]);
234
+ });
235
+ });
236
+ describe('moveInboxSkill', () => {
237
+ let tmpDir;
238
+ let skillsDir;
239
+ let globalSkillsDir;
240
+ let projectSkillsDir;
241
+ let moveConfig;
242
+ async function writeSkillMd(dirName, name, description) {
243
+ const dir = path.join(skillsDir, dirName);
244
+ await fs.mkdir(dir, { recursive: true });
245
+ await fs.writeFile(path.join(dir, 'SKILL.md'), `---\nname: ${name}\ndescription: ${description}\n---\nBody content here\n`);
246
+ }
247
+ beforeEach(async () => {
248
+ tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), 'move-test-'));
249
+ skillsDir = path.join(tmpDir, 'skills-memory');
250
+ globalSkillsDir = path.join(tmpDir, 'global-skills');
251
+ projectSkillsDir = path.join(tmpDir, 'project-skills');
252
+ await fs.mkdir(skillsDir, { recursive: true });
253
+ moveConfig = {
254
+ storage: {
255
+ getProjectSkillsMemoryDir: () => skillsDir,
256
+ getProjectSkillsDir: () => projectSkillsDir,
257
+ },
258
+ };
259
+ vi.mocked(Storage.getUserSkillsDir).mockReturnValue(globalSkillsDir);
260
+ });
261
+ afterEach(async () => {
262
+ await fs.rm(tmpDir, { recursive: true, force: true });
263
+ });
264
+ it('should move a skill to global skills directory', async () => {
265
+ await writeSkillMd('my-skill', 'my-skill', 'A test skill');
266
+ const result = await moveInboxSkill(moveConfig, 'my-skill', 'global');
267
+ expect(result.success).toBe(true);
268
+ expect(result.message).toBe('Moved "my-skill" to ~/.gemini/skills.');
269
+ // Verify the skill was copied to global
270
+ const targetSkill = await fs.readFile(path.join(globalSkillsDir, 'my-skill', 'SKILL.md'), 'utf-8');
271
+ expect(targetSkill).toContain('name: my-skill');
272
+ // Verify the skill was removed from inbox
273
+ await expect(fs.access(path.join(skillsDir, 'my-skill'))).rejects.toThrow();
274
+ });
275
+ it('should move a skill to project skills directory', async () => {
276
+ await writeSkillMd('my-skill', 'my-skill', 'A test skill');
277
+ const result = await moveInboxSkill(moveConfig, 'my-skill', 'project');
278
+ expect(result.success).toBe(true);
279
+ expect(result.message).toBe('Moved "my-skill" to .gemini/skills.');
280
+ // Verify the skill was copied to project
281
+ const targetSkill = await fs.readFile(path.join(projectSkillsDir, 'my-skill', 'SKILL.md'), 'utf-8');
282
+ expect(targetSkill).toContain('name: my-skill');
283
+ // Verify the skill was removed from inbox
284
+ await expect(fs.access(path.join(skillsDir, 'my-skill'))).rejects.toThrow();
285
+ });
286
+ it('should return an error when the source skill does not exist', async () => {
287
+ const result = await moveInboxSkill(moveConfig, 'nonexistent', 'global');
288
+ expect(result.success).toBe(false);
289
+ expect(result.message).toBe('Skill "nonexistent" not found in inbox.');
290
+ });
291
+ it('should reject invalid skill directory names', async () => {
292
+ const result = await moveInboxSkill(moveConfig, '../escape', 'global');
293
+ expect(result.success).toBe(false);
294
+ expect(result.message).toBe('Invalid skill name.');
295
+ });
296
+ it('should return an error when the target already exists', async () => {
297
+ await writeSkillMd('my-skill', 'my-skill', 'A test skill');
298
+ // Pre-create the target
299
+ const targetDir = path.join(globalSkillsDir, 'my-skill');
300
+ await fs.mkdir(targetDir, { recursive: true });
301
+ await fs.writeFile(path.join(targetDir, 'SKILL.md'), 'existing content');
302
+ const result = await moveInboxSkill(moveConfig, 'my-skill', 'global');
303
+ expect(result.success).toBe(false);
304
+ expect(result.message).toBe('A skill named "my-skill" already exists in global skills.');
305
+ });
306
+ it('should detect conflicts based on the normalized skill name', async () => {
307
+ await writeSkillMd('inbox-skill', 'gke:prs-troubleshooter', 'A test skill');
308
+ await fs.mkdir(path.join(globalSkillsDir, 'existing-gke-prs-troubleshooter'), { recursive: true });
309
+ await fs.writeFile(path.join(globalSkillsDir, 'existing-gke-prs-troubleshooter', 'SKILL.md'), [
310
+ '---',
311
+ 'name: gke-prs-troubleshooter',
312
+ 'description: Existing skill',
313
+ '---',
314
+ 'Existing body content',
315
+ '',
316
+ ].join('\n'));
317
+ const result = await moveInboxSkill(moveConfig, 'inbox-skill', 'global');
318
+ expect(result.success).toBe(false);
319
+ expect(result.message).toBe('A skill named "gke-prs-troubleshooter" already exists in global skills.');
320
+ await expect(fs.access(path.join(skillsDir, 'inbox-skill', 'SKILL.md'))).resolves.toBeUndefined();
321
+ await expect(fs.access(path.join(globalSkillsDir, 'inbox-skill'))).rejects.toThrow();
322
+ });
323
+ });
324
+ describe('dismissInboxSkill', () => {
325
+ let tmpDir;
326
+ let skillsDir;
327
+ let dismissConfig;
328
+ async function writeSkillMd(dirName, name, description) {
329
+ const dir = path.join(skillsDir, dirName);
330
+ await fs.mkdir(dir, { recursive: true });
331
+ await fs.writeFile(path.join(dir, 'SKILL.md'), `---\nname: ${name}\ndescription: ${description}\n---\nBody content here\n`);
332
+ }
333
+ beforeEach(async () => {
334
+ tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), 'dismiss-test-'));
335
+ skillsDir = path.join(tmpDir, 'skills-memory');
336
+ await fs.mkdir(skillsDir, { recursive: true });
337
+ dismissConfig = {
338
+ storage: {
339
+ getProjectSkillsMemoryDir: () => skillsDir,
340
+ },
341
+ };
342
+ });
343
+ afterEach(async () => {
344
+ await fs.rm(tmpDir, { recursive: true, force: true });
345
+ });
346
+ it('should remove a skill from the inbox', async () => {
347
+ await writeSkillMd('my-skill', 'my-skill', 'A test skill');
348
+ const result = await dismissInboxSkill(dismissConfig, 'my-skill');
349
+ expect(result.success).toBe(true);
350
+ expect(result.message).toBe('Dismissed "my-skill" from inbox.');
351
+ // Verify the skill directory was removed
352
+ await expect(fs.access(path.join(skillsDir, 'my-skill'))).rejects.toThrow();
353
+ });
354
+ it('should return an error when the skill does not exist', async () => {
355
+ const result = await dismissInboxSkill(dismissConfig, 'nonexistent');
356
+ expect(result.success).toBe(false);
357
+ expect(result.message).toBe('Skill "nonexistent" not found in inbox.');
358
+ });
359
+ it('should reject invalid skill directory names', async () => {
360
+ const result = await dismissInboxSkill(dismissConfig, 'nested\\skill');
361
+ expect(result.success).toBe(false);
362
+ expect(result.message).toBe('Invalid skill name.');
363
+ });
364
+ });
154
365
  });
155
366
  //# sourceMappingURL=memory.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"memory.test.js","sourceRoot":"","sources":["../../../src/commands/memory.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"memory.test.js","sourceRoot":"","sources":["../../../src/commands/memory.test.ts"],"names":[],"mappings":"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"}
@@ -3,5 +3,5 @@
3
3
  * Copyright 2026 Google LLC
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
- export declare const GIT_COMMIT_INFO = "e77b22e63";
7
- export declare const CLI_VERSION = "0.38.0-preview.0";
6
+ export declare const GIT_COMMIT_INFO = "a39461718";
7
+ export declare const CLI_VERSION = "0.39.0-nightly.20260408.a39461718";
@@ -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 = 'e77b22e63';
9
- export const CLI_VERSION = '0.38.0-preview.0';
8
+ export const GIT_COMMIT_INFO = 'a39461718';
9
+ export const CLI_VERSION = '0.39.0-nightly.20260408.a39461718';
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,WAAW,CAAC;AAC3C,MAAM,CAAC,MAAM,WAAW,GAAG,kBAAkB,CAAC"}
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,WAAW,CAAC;AAC3C,MAAM,CAAC,MAAM,WAAW,GAAG,mCAAmC,CAAC"}
@@ -272,9 +272,10 @@ export async function createPolicyEngineConfig(settings, approvalMode, defaultPo
272
272
  // TOML policy priorities (before transformation):
273
273
  // 10: Write tools default to ASK_USER (becomes 1.010 in default tier)
274
274
  // 15: Auto-edit tool override (becomes 1.015 in default tier)
275
+ // 30: Unknown subagents (blocked by Plan Mode's 40)
276
+ // 40: Plan mode catch-all DENY override (becomes 1.040 in default tier)
275
277
  // 50: Read-only tools (becomes 1.050 in default tier)
276
- // 60: Plan mode catch-all DENY override (becomes 1.060 in default tier)
277
- // 70: Plan mode explicit ALLOW override (becomes 1.070 in default tier)
278
+ // 70: Mode transition overrides (becomes 1.070 in default tier)
278
279
  // 999: YOLO mode allow-all (becomes 1.999 in default tier)
279
280
  // MCP servers that are explicitly excluded in settings.mcp.excluded
280
281
  // Priority: MCP_EXCLUDED_PRIORITY (highest in user tier for security - persistent server blocks)