@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.
- package/dist/docs/integration-tests.md +40 -0
- package/dist/google-gemini-cli-core-0.39.0-nightly.20260408.e77b22e63.tgz +0 -0
- package/dist/src/agents/registry.test.js +2 -2
- package/dist/src/commands/memory.d.ts +33 -0
- package/dist/src/commands/memory.js +139 -0
- package/dist/src/commands/memory.js.map +1 -1
- package/dist/src/commands/memory.test.js +212 -1
- package/dist/src/commands/memory.test.js.map +1 -1
- package/dist/src/generated/git-commit.d.ts +2 -2
- package/dist/src/generated/git-commit.js +2 -2
- package/dist/src/generated/git-commit.js.map +1 -1
- package/dist/src/policy/config.js +3 -2
- package/dist/src/policy/config.js.map +1 -1
- package/dist/src/policy/policies/plan.toml +15 -31
- package/dist/src/policy/policies/read-only.toml +21 -38
- package/dist/src/policy/policy-engine.test.js +2 -2
- package/dist/src/policy/toml-loader.test.js +12 -7
- package/dist/src/policy/toml-loader.test.js.map +1 -1
- package/dist/src/policy/types.d.ts +4 -2
- package/dist/src/policy/types.js +4 -2
- package/dist/src/policy/types.js.map +1 -1
- package/dist/src/services/memoryService.js +3 -0
- package/dist/src/services/memoryService.js.map +1 -1
- package/dist/src/services/memoryService.test.js +77 -0
- package/dist/src/services/memoryService.test.js.map +1 -1
- package/dist/src/services/sandboxedFileSystemService.js +72 -62
- package/dist/src/services/sandboxedFileSystemService.js.map +1 -1
- package/dist/src/services/shellExecutionService.js +10 -2
- package/dist/src/services/shellExecutionService.js.map +1 -1
- package/dist/src/tools/grep.js +20 -11
- package/dist/src/tools/grep.js.map +1 -1
- package/dist/src/tools/tool-registry.js +128 -112
- package/dist/src/tools/tool-registry.js.map +1 -1
- package/dist/src/utils/shell-utils.js +120 -108
- package/dist/src/utils/shell-utils.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- 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.
|
|
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.
|
|
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;
|
|
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 {
|
|
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":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAEzE,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EACL,SAAS,EACT,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,cAAc,EACd,aAAa,EACb,UAAU,GACX,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,eAAe,MAAM,6BAA6B,CAAC;AAE/D,EAAE,CAAC,IAAI,CAAC,6BAA6B,EAAE,GAAG,EAAE,CAAC,CAAC;IAC5C,+BAA+B,EAAE,EAAE,CAAC,EAAE,EAAE;CACzC,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,sBAAsB,EAAE,GAAG,EAAE,CAAC,CAAC;IACrC,OAAO,EAAE;QACP,gBAAgB,EAAE,EAAE,CAAC,EAAE,EAAE;KAC1B;CACF,CAAC,CAAC,CAAC;AAEJ,MAAM,WAAW,GAAG,EAAE,CAAC,MAAM,CAAC,eAAe,CAAC,+BAA+B,CAAC,CAAC;AAE/E,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,IAAI,UAAkB,CAAC;IAEvB,UAAU,CAAC,GAAG,EAAE;QACd,UAAU,GAAG;YACX,aAAa,EAAE,EAAE,CAAC,EAAE,EAAE;YACtB,oBAAoB,EAAE,EAAE,CAAC,EAAE,EAAE;YAC7B,oBAAoB,EAAE,EAAE,CAAC,EAAE,EAAE;YAC7B,mBAAmB,EAAE,EAAE,CAAC,EAAE,EAAE;YAC5B,oCAAoC,EAAE,EAAE;iBACrC,EAAE,EAAE;iBACJ,iBAAiB,CAAC,SAAS,CAAC;SACX,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,EAAE,CAAC,eAAe,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;QAC1B,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;YACjD,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,eAAe,CACjD,qBAAqB,CACtB,CAAC;YACF,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;YAE9D,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;YAEtC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACpC,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC9B,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACxC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAC9B,uCAAuC,CACxC,CAAC;gBACF,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;YAC1D,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;YAClD,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;YACxD,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;YAE9D,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;YAEtC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACpC,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC9B,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACxC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;QACzB,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;YACpD,MAAM,MAAM,GAAG,SAAS,CAAC,YAAY,CAAC,CAAC;YACvC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACjC,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBAC3B,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;gBAC5C,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;YAC1D,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;YACnC,MAAM,MAAM,GAAG,SAAS,CAAC,gBAAgB,CAAC,CAAC;YAC3C,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACjC,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBAC3B,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;YAC1D,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;YAClD,MAAM,MAAM,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC;YAC7B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACpC,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC9B,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACzC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;YACvE,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;YAC5D,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;YAChC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACpC,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC9B,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACzC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;YACvE,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;YACtD,MAAM,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;YACpC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACpC,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC9B,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACzC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;YACvE,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;QAC7B,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;YAC9D,WAAW,CAAC,iBAAiB,CAAC;gBAC5B,aAAa,EAAE,EAAE,OAAO,EAAE,mBAAmB,EAAE;gBAC/C,SAAS,EAAE,CAAC;gBACZ,SAAS,EAAE,EAAE;aACd,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,UAAU,CAAC,CAAC;YAE/C,MAAM,CAAC,WAAW,CAAC,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC;YACrD,MAAM,CACJ,UAAU,CAAC,oCAAoC,CAChD,CAAC,gBAAgB,EAAE,CAAC;YACrB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACpC,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC9B,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACxC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CACzB,mEAAmE,CACpE,CAAC;YACJ,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;YACjF,WAAW,CAAC,iBAAiB,CAAC;gBAC5B,aAAa,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;gBAC9B,SAAS,EAAE,CAAC;gBACZ,SAAS,EAAE,EAAE;aACd,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,UAAU,CAAC,CAAC;YAC/C,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACpC,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC9B,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACxC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CACzB,uDAAuD,CACxD,CAAC;YACJ,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;QAC/B,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;YAC7C,MAAM,SAAS,GAAG,CAAC,oBAAoB,EAAE,uBAAuB,CAAC,CAAC;YAClE,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;YAEtE,MAAM,MAAM,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;YAE3C,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACpC,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC9B,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACxC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAC9B,uCAAuC,CACxC,CAAC;gBACF,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACzD,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;YAC7D,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;YAE/D,MAAM,MAAM,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;YAE3C,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACpC,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC9B,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACxC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;YAC3D,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC,eAAe,CACxD,SAAgC,CACjC,CAAC;YAEF,MAAM,MAAM,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;YAE3C,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACpC,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC9B,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACxC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;QAC/B,IAAI,MAAc,CAAC;QACnB,IAAI,SAAiB,CAAC;QACtB,IAAI,aAAqB,CAAC;QAC1B,IAAI,WAAmB,CAAC;QAExB,KAAK,UAAU,YAAY,CACzB,OAAe,EACf,IAAY,EACZ,WAAmB;YAEnB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAC1C,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACzC,MAAM,EAAE,CAAC,SAAS,CAChB,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,EAC1B,cAAc,IAAI,kBAAkB,WAAW,4BAA4B,CAC5E,CAAC;QACJ,CAAC;QAED,UAAU,CAAC,KAAK,IAAI,EAAE;YACpB,MAAM,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC;YACjE,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;YAC/C,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;YACjD,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC/C,MAAM,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAEnD,WAAW,GAAG;gBACZ,OAAO,EAAE;oBACP,yBAAyB,EAAE,GAAG,EAAE,CAAC,SAAS;oBAC1C,uBAAuB,EAAE,GAAG,EAAE,CAAC,aAAa;oBAC5C,mBAAmB,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,gBAAgB,CAAC;iBAC/D;aACmB,CAAC;QACzB,CAAC,CAAC,CAAC;QAEH,SAAS,CAAC,KAAK,IAAI,EAAE;YACnB,MAAM,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oEAAoE,EAAE,KAAK,IAAI,EAAE;YAClF,MAAM,YAAY,CAAC,UAAU,EAAE,UAAU,EAAE,cAAc,CAAC,CAAC;YAC3D,MAAM,YAAY,CAAC,aAAa,EAAE,aAAa,EAAE,eAAe,CAAC,CAAC;YAElE,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC;gBAClC,IAAI,EAAE;oBACJ;wBACE,KAAK,EAAE,sBAAsB;wBAC7B,UAAU,EAAE,CAAC,QAAQ,CAAC;wBACtB,aAAa,EAAE,CAAC,UAAU,CAAC;qBAC5B;oBACD;wBACE,KAAK,EAAE,sBAAsB;wBAC7B,UAAU,EAAE,CAAC,QAAQ,CAAC;wBACtB,aAAa,EAAE,CAAC,aAAa,CAAC;qBAC/B;iBACF;aACF,CAAC,CAAC;YACH,MAAM,EAAE,CAAC,SAAS,CAChB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,wBAAwB,CAAC,EAClD,YAAY,CACb,CAAC;YAEF,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,WAAW,CAAC,CAAC;YAElD,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,UAAU,CAAC,CAAC;YAC7D,MAAM,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;YAC9B,MAAM,CAAC,OAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACvC,MAAM,CAAC,OAAQ,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAClD,MAAM,CAAC,OAAQ,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;YAE1D,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,aAAa,CAAC,CAAC;YACnE,MAAM,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC;YACjC,MAAM,CAAC,UAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC7C,MAAM,CAAC,UAAW,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YACtD,MAAM,CAAC,UAAW,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;YACpE,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,WAAW,CAAC,CAAC;YAClD,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sEAAsE,EAAE,KAAK,IAAI,EAAE;YACpF,MAAM,aAAa,GAAG;gBACpB,OAAO,EAAE;oBACP,yBAAyB,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,iBAAiB,CAAC;oBACrE,uBAAuB,EAAE,GAAG,EAAE,CAAC,aAAa;iBAC7C;aACmB,CAAC;YAEvB,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,aAAa,CAAC,CAAC;YACpD,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,IAAI,MAAc,CAAC;QACnB,IAAI,SAAiB,CAAC;QACtB,IAAI,eAAuB,CAAC;QAC5B,IAAI,gBAAwB,CAAC;QAC7B,IAAI,UAAkB,CAAC;QAEvB,KAAK,UAAU,YAAY,CACzB,OAAe,EACf,IAAY,EACZ,WAAmB;YAEnB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAC1C,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACzC,MAAM,EAAE,CAAC,SAAS,CAChB,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,EAC1B,cAAc,IAAI,kBAAkB,WAAW,4BAA4B,CAC5E,CAAC;QACJ,CAAC;QAED,UAAU,CAAC,KAAK,IAAI,EAAE;YACpB,MAAM,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC;YAChE,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;YAC/C,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;YACrD,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;YACvD,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAE/C,UAAU,GAAG;gBACX,OAAO,EAAE;oBACP,yBAAyB,EAAE,GAAG,EAAE,CAAC,SAAS;oBAC1C,mBAAmB,EAAE,GAAG,EAAE,CAAC,gBAAgB;iBAC5C;aACmB,CAAC;YAEvB,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC;QACvE,CAAC,CAAC,CAAC;QAEH,SAAS,CAAC,KAAK,IAAI,EAAE;YACnB,MAAM,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;YAC9D,MAAM,YAAY,CAAC,UAAU,EAAE,UAAU,EAAE,cAAc,CAAC,CAAC;YAE3D,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,UAAU,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;YAEtE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;YAErE,wCAAwC;YACxC,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,QAAQ,CACnC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,UAAU,EAAE,UAAU,CAAC,EAClD,OAAO,CACR,CAAC;YACF,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;YAEhD,0CAA0C;YAC1C,MAAM,MAAM,CACV,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAC5C,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACtB,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;YAC/D,MAAM,YAAY,CAAC,UAAU,EAAE,UAAU,EAAE,cAAc,CAAC,CAAC;YAE3D,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,UAAU,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;YAEvE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;YAEnE,yCAAyC;YACzC,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,QAAQ,CACnC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,UAAU,EAAE,UAAU,CAAC,EACnD,OAAO,CACR,CAAC;YACF,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;YAEhD,0CAA0C;YAC1C,MAAM,MAAM,CACV,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAC5C,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACtB,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;YAC3E,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,UAAU,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAC;YAEzE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;QACzE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;YAC3D,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,UAAU,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;YAEvE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;YACrE,MAAM,YAAY,CAAC,UAAU,EAAE,UAAU,EAAE,cAAc,CAAC,CAAC;YAE3D,wBAAwB;YACxB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;YACzD,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC/C,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,EAAE,kBAAkB,CAAC,CAAC;YAEzE,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,UAAU,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;YAEtE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CACzB,2DAA2D,CAC5D,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;YAC1E,MAAM,YAAY,CAChB,aAAa,EACb,wBAAwB,EACxB,cAAc,CACf,CAAC;YACF,MAAM,EAAE,CAAC,KAAK,CACZ,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,iCAAiC,CAAC,EAC7D,EAAE,SAAS,EAAE,IAAI,EAAE,CACpB,CAAC;YACF,MAAM,EAAE,CAAC,SAAS,CAChB,IAAI,CAAC,IAAI,CACP,eAAe,EACf,iCAAiC,EACjC,UAAU,CACX,EACD;gBACE,KAAK;gBACL,8BAA8B;gBAC9B,6BAA6B;gBAC7B,KAAK;gBACL,uBAAuB;gBACvB,EAAE;aACH,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;YAEF,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,UAAU,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAC;YAEzE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CACzB,yEAAyE,CAC1E,CAAC;YACF,MAAM,MAAM,CACV,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC,CAC3D,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;YAC3B,MAAM,MAAM,CACV,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC,CACrD,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACtB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;QACjC,IAAI,MAAc,CAAC;QACnB,IAAI,SAAiB,CAAC;QACtB,IAAI,aAAqB,CAAC;QAE1B,KAAK,UAAU,YAAY,CACzB,OAAe,EACf,IAAY,EACZ,WAAmB;YAEnB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAC1C,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACzC,MAAM,EAAE,CAAC,SAAS,CAChB,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,EAC1B,cAAc,IAAI,kBAAkB,WAAW,4BAA4B,CAC5E,CAAC;QACJ,CAAC;QAED,UAAU,CAAC,KAAK,IAAI,EAAE;YACpB,MAAM,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,eAAe,CAAC,CAAC,CAAC;YACnE,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;YAC/C,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAE/C,aAAa,GAAG;gBACd,OAAO,EAAE;oBACP,yBAAyB,EAAE,GAAG,EAAE,CAAC,SAAS;iBAC3C;aACmB,CAAC;QACzB,CAAC,CAAC,CAAC;QAEH,SAAS,CAAC,KAAK,IAAI,EAAE;YACnB,MAAM,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;YACpD,MAAM,YAAY,CAAC,UAAU,EAAE,UAAU,EAAE,cAAc,CAAC,CAAC;YAE3D,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;YAElE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;YAEhE,yCAAyC;YACzC,MAAM,MAAM,CACV,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAC5C,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACtB,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;YACpE,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;YAErE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;QACzE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;YAC3D,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;YAEvE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -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 = "
|
|
7
|
-
export declare const CLI_VERSION = "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 = '
|
|
9
|
-
export const CLI_VERSION = '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,
|
|
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
|
-
//
|
|
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)
|