@google/gemini-cli-a2a-server 0.25.0-nightly.20260112.15891721a → 0.25.0-preview.0
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 +22755 -4267
- package/dist/src/commands/command-registry.js +2 -0
- package/dist/src/commands/command-registry.js.map +1 -1
- package/dist/src/commands/memory.d.ts +34 -0
- package/dist/src/commands/memory.js +82 -0
- package/dist/src/commands/memory.js.map +1 -0
- package/dist/src/commands/memory.test.d.ts +6 -0
- package/dist/src/commands/memory.test.js +158 -0
- package/dist/src/commands/memory.test.js.map +1 -0
- package/dist/src/config/config.js +6 -2
- package/dist/src/config/config.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -2
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* Copyright 2025 Google LLC
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
+
import { MemoryCommand } from './memory.js';
|
|
6
7
|
import { debugLogger } from '@google/gemini-cli-core';
|
|
7
8
|
import { ExtensionsCommand } from './extensions.js';
|
|
8
9
|
import { InitCommand } from './init.js';
|
|
@@ -17,6 +18,7 @@ export class CommandRegistry {
|
|
|
17
18
|
this.register(new ExtensionsCommand());
|
|
18
19
|
this.register(new RestoreCommand());
|
|
19
20
|
this.register(new InitCommand());
|
|
21
|
+
this.register(new MemoryCommand());
|
|
20
22
|
}
|
|
21
23
|
register(command) {
|
|
22
24
|
if (this.commands.has(command.name)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command-registry.js","sourceRoot":"","sources":["../../../src/commands/command-registry.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAG9C,MAAM,OAAO,eAAe;IACT,QAAQ,GAAG,IAAI,GAAG,EAAmB,CAAC;IAEvD;QACE,IAAI,CAAC,UAAU,EAAE,CAAC;IACpB,CAAC;IAED,UAAU;QACR,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,QAAQ,CAAC,IAAI,iBAAiB,EAAE,CAAC,CAAC;QACvC,IAAI,CAAC,QAAQ,CAAC,IAAI,cAAc,EAAE,CAAC,CAAC;QACpC,IAAI,CAAC,QAAQ,CAAC,IAAI,WAAW,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"command-registry.js","sourceRoot":"","sources":["../../../src/commands/command-registry.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAG9C,MAAM,OAAO,eAAe;IACT,QAAQ,GAAG,IAAI,GAAG,EAAmB,CAAC;IAEvD;QACE,IAAI,CAAC,UAAU,EAAE,CAAC;IACpB,CAAC;IAED,UAAU;QACR,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,QAAQ,CAAC,IAAI,iBAAiB,EAAE,CAAC,CAAC;QACvC,IAAI,CAAC,QAAQ,CAAC,IAAI,cAAc,EAAE,CAAC,CAAC;QACpC,IAAI,CAAC,QAAQ,CAAC,IAAI,WAAW,EAAE,CAAC,CAAC;QACjC,IAAI,CAAC,QAAQ,CAAC,IAAI,aAAa,EAAE,CAAC,CAAC;IACrC,CAAC;IAED,QAAQ,CAAC,OAAgB;QACvB,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACpC,WAAW,CAAC,IAAI,CAAC,WAAW,OAAO,CAAC,IAAI,gCAAgC,CAAC,CAAC;YAC1E,OAAO;QACT,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAEzC,KAAK,MAAM,UAAU,IAAI,OAAO,CAAC,WAAW,IAAI,EAAE,EAAE,CAAC;YACnD,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,GAAG,CAAC,WAAmB;QACrB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACxC,CAAC;IAED,cAAc;QACZ,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IACrC,CAAC;CACF;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import type { Command, CommandContext, CommandExecutionResponse } from './types.js';
|
|
7
|
+
export declare class MemoryCommand implements Command {
|
|
8
|
+
readonly name = "memory";
|
|
9
|
+
readonly description = "Manage memory.";
|
|
10
|
+
readonly subCommands: (ShowMemoryCommand | RefreshMemoryCommand | ListMemoryCommand | AddMemoryCommand)[];
|
|
11
|
+
readonly topLevel = true;
|
|
12
|
+
readonly requiresWorkspace = true;
|
|
13
|
+
execute(context: CommandContext, _: string[]): Promise<CommandExecutionResponse>;
|
|
14
|
+
}
|
|
15
|
+
export declare class ShowMemoryCommand implements Command {
|
|
16
|
+
readonly name = "memory show";
|
|
17
|
+
readonly description = "Shows the current memory contents.";
|
|
18
|
+
execute(context: CommandContext, _: string[]): Promise<CommandExecutionResponse>;
|
|
19
|
+
}
|
|
20
|
+
export declare class RefreshMemoryCommand implements Command {
|
|
21
|
+
readonly name = "memory refresh";
|
|
22
|
+
readonly description = "Refreshes the memory from the source.";
|
|
23
|
+
execute(context: CommandContext, _: string[]): Promise<CommandExecutionResponse>;
|
|
24
|
+
}
|
|
25
|
+
export declare class ListMemoryCommand implements Command {
|
|
26
|
+
readonly name = "memory list";
|
|
27
|
+
readonly description = "Lists the paths of the GEMINI.md files in use.";
|
|
28
|
+
execute(context: CommandContext, _: string[]): Promise<CommandExecutionResponse>;
|
|
29
|
+
}
|
|
30
|
+
export declare class AddMemoryCommand implements Command {
|
|
31
|
+
readonly name = "memory add";
|
|
32
|
+
readonly description = "Add content to the memory.";
|
|
33
|
+
execute(context: CommandContext, args: string[]): Promise<CommandExecutionResponse>;
|
|
34
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { addMemory, listMemoryFiles, refreshMemory, showMemory, } from '@google/gemini-cli-core';
|
|
7
|
+
const DEFAULT_SANITIZATION_CONFIG = {
|
|
8
|
+
allowedEnvironmentVariables: [],
|
|
9
|
+
blockedEnvironmentVariables: [],
|
|
10
|
+
enableEnvironmentVariableRedaction: false,
|
|
11
|
+
};
|
|
12
|
+
export class MemoryCommand {
|
|
13
|
+
name = 'memory';
|
|
14
|
+
description = 'Manage memory.';
|
|
15
|
+
subCommands = [
|
|
16
|
+
new ShowMemoryCommand(),
|
|
17
|
+
new RefreshMemoryCommand(),
|
|
18
|
+
new ListMemoryCommand(),
|
|
19
|
+
new AddMemoryCommand(),
|
|
20
|
+
];
|
|
21
|
+
topLevel = true;
|
|
22
|
+
requiresWorkspace = true;
|
|
23
|
+
async execute(context, _) {
|
|
24
|
+
return new ShowMemoryCommand().execute(context, _);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
export class ShowMemoryCommand {
|
|
28
|
+
name = 'memory show';
|
|
29
|
+
description = 'Shows the current memory contents.';
|
|
30
|
+
async execute(context, _) {
|
|
31
|
+
const result = showMemory(context.config);
|
|
32
|
+
return { name: this.name, data: result.content };
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
export class RefreshMemoryCommand {
|
|
36
|
+
name = 'memory refresh';
|
|
37
|
+
description = 'Refreshes the memory from the source.';
|
|
38
|
+
async execute(context, _) {
|
|
39
|
+
const result = await refreshMemory(context.config);
|
|
40
|
+
return { name: this.name, data: result.content };
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
export class ListMemoryCommand {
|
|
44
|
+
name = 'memory list';
|
|
45
|
+
description = 'Lists the paths of the GEMINI.md files in use.';
|
|
46
|
+
async execute(context, _) {
|
|
47
|
+
const result = listMemoryFiles(context.config);
|
|
48
|
+
return { name: this.name, data: result.content };
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
export class AddMemoryCommand {
|
|
52
|
+
name = 'memory add';
|
|
53
|
+
description = 'Add content to the memory.';
|
|
54
|
+
async execute(context, args) {
|
|
55
|
+
const textToAdd = args.join(' ').trim();
|
|
56
|
+
const result = addMemory(textToAdd);
|
|
57
|
+
if (result.type === 'message') {
|
|
58
|
+
return { name: this.name, data: result.content };
|
|
59
|
+
}
|
|
60
|
+
const toolRegistry = context.config.getToolRegistry();
|
|
61
|
+
const tool = toolRegistry.getTool(result.toolName);
|
|
62
|
+
if (tool) {
|
|
63
|
+
const abortController = new AbortController();
|
|
64
|
+
const signal = abortController.signal;
|
|
65
|
+
await tool.buildAndExecute(result.toolArgs, signal, undefined, {
|
|
66
|
+
sanitizationConfig: DEFAULT_SANITIZATION_CONFIG,
|
|
67
|
+
});
|
|
68
|
+
await refreshMemory(context.config);
|
|
69
|
+
return {
|
|
70
|
+
name: this.name,
|
|
71
|
+
data: `Added memory: "${textToAdd}"`,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
return {
|
|
76
|
+
name: this.name,
|
|
77
|
+
data: `Error: Tool ${result.toolName} not found.`,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=memory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory.js","sourceRoot":"","sources":["../../../src/commands/memory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { addMemory, listMemoryFiles, refreshMemory, showMemory, } from '@google/gemini-cli-core';
|
|
7
|
+
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
|
8
|
+
import { AddMemoryCommand, ListMemoryCommand, MemoryCommand, RefreshMemoryCommand, ShowMemoryCommand, } from './memory.js';
|
|
9
|
+
// Mock the core functions
|
|
10
|
+
vi.mock('@google/gemini-cli-core', async (importOriginal) => {
|
|
11
|
+
const actual = await importOriginal();
|
|
12
|
+
return {
|
|
13
|
+
...actual,
|
|
14
|
+
showMemory: vi.fn(),
|
|
15
|
+
refreshMemory: vi.fn(),
|
|
16
|
+
listMemoryFiles: vi.fn(),
|
|
17
|
+
addMemory: vi.fn(),
|
|
18
|
+
};
|
|
19
|
+
});
|
|
20
|
+
const mockShowMemory = vi.mocked(showMemory);
|
|
21
|
+
const mockRefreshMemory = vi.mocked(refreshMemory);
|
|
22
|
+
const mockListMemoryFiles = vi.mocked(listMemoryFiles);
|
|
23
|
+
const mockAddMemory = vi.mocked(addMemory);
|
|
24
|
+
describe('a2a-server memory commands', () => {
|
|
25
|
+
let mockContext;
|
|
26
|
+
let mockConfig;
|
|
27
|
+
let mockToolRegistry;
|
|
28
|
+
let mockSaveMemoryTool;
|
|
29
|
+
beforeEach(() => {
|
|
30
|
+
mockSaveMemoryTool = {
|
|
31
|
+
name: 'save_memory',
|
|
32
|
+
description: 'Saves memory',
|
|
33
|
+
buildAndExecute: vi.fn().mockResolvedValue(undefined),
|
|
34
|
+
};
|
|
35
|
+
mockToolRegistry = {
|
|
36
|
+
getTool: vi.fn(),
|
|
37
|
+
};
|
|
38
|
+
mockConfig = {
|
|
39
|
+
getToolRegistry: vi.fn().mockReturnValue(mockToolRegistry),
|
|
40
|
+
};
|
|
41
|
+
mockContext = {
|
|
42
|
+
config: mockConfig,
|
|
43
|
+
};
|
|
44
|
+
vi.mocked(mockToolRegistry.getTool).mockReturnValue(mockSaveMemoryTool);
|
|
45
|
+
});
|
|
46
|
+
describe('MemoryCommand', () => {
|
|
47
|
+
it('delegates to ShowMemoryCommand', async () => {
|
|
48
|
+
const command = new MemoryCommand();
|
|
49
|
+
mockShowMemory.mockReturnValue({
|
|
50
|
+
type: 'message',
|
|
51
|
+
messageType: 'info',
|
|
52
|
+
content: 'showing memory',
|
|
53
|
+
});
|
|
54
|
+
const response = await command.execute(mockContext, []);
|
|
55
|
+
expect(response.data).toBe('showing memory');
|
|
56
|
+
expect(mockShowMemory).toHaveBeenCalledWith(mockContext.config);
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
describe('ShowMemoryCommand', () => {
|
|
60
|
+
it('executes showMemory and returns the content', async () => {
|
|
61
|
+
const command = new ShowMemoryCommand();
|
|
62
|
+
mockShowMemory.mockReturnValue({
|
|
63
|
+
type: 'message',
|
|
64
|
+
messageType: 'info',
|
|
65
|
+
content: 'test memory content',
|
|
66
|
+
});
|
|
67
|
+
const response = await command.execute(mockContext, []);
|
|
68
|
+
expect(mockShowMemory).toHaveBeenCalledWith(mockContext.config);
|
|
69
|
+
expect(response.name).toBe('memory show');
|
|
70
|
+
expect(response.data).toBe('test memory content');
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
describe('RefreshMemoryCommand', () => {
|
|
74
|
+
it('executes refreshMemory and returns the content', async () => {
|
|
75
|
+
const command = new RefreshMemoryCommand();
|
|
76
|
+
mockRefreshMemory.mockResolvedValue({
|
|
77
|
+
type: 'message',
|
|
78
|
+
messageType: 'info',
|
|
79
|
+
content: 'memory refreshed',
|
|
80
|
+
});
|
|
81
|
+
const response = await command.execute(mockContext, []);
|
|
82
|
+
expect(mockRefreshMemory).toHaveBeenCalledWith(mockContext.config);
|
|
83
|
+
expect(response.name).toBe('memory refresh');
|
|
84
|
+
expect(response.data).toBe('memory refreshed');
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
describe('ListMemoryCommand', () => {
|
|
88
|
+
it('executes listMemoryFiles and returns the content', async () => {
|
|
89
|
+
const command = new ListMemoryCommand();
|
|
90
|
+
mockListMemoryFiles.mockReturnValue({
|
|
91
|
+
type: 'message',
|
|
92
|
+
messageType: 'info',
|
|
93
|
+
content: 'file1.md\nfile2.md',
|
|
94
|
+
});
|
|
95
|
+
const response = await command.execute(mockContext, []);
|
|
96
|
+
expect(mockListMemoryFiles).toHaveBeenCalledWith(mockContext.config);
|
|
97
|
+
expect(response.name).toBe('memory list');
|
|
98
|
+
expect(response.data).toBe('file1.md\nfile2.md');
|
|
99
|
+
});
|
|
100
|
+
});
|
|
101
|
+
describe('AddMemoryCommand', () => {
|
|
102
|
+
it('returns message content if addMemory returns a message', async () => {
|
|
103
|
+
const command = new AddMemoryCommand();
|
|
104
|
+
mockAddMemory.mockReturnValue({
|
|
105
|
+
type: 'message',
|
|
106
|
+
messageType: 'error',
|
|
107
|
+
content: 'error message',
|
|
108
|
+
});
|
|
109
|
+
const response = await command.execute(mockContext, []);
|
|
110
|
+
expect(mockAddMemory).toHaveBeenCalledWith('');
|
|
111
|
+
expect(response.name).toBe('memory add');
|
|
112
|
+
expect(response.data).toBe('error message');
|
|
113
|
+
});
|
|
114
|
+
it('executes the save_memory tool if found', async () => {
|
|
115
|
+
const command = new AddMemoryCommand();
|
|
116
|
+
const fact = 'this is a new fact';
|
|
117
|
+
mockAddMemory.mockReturnValue({
|
|
118
|
+
type: 'tool',
|
|
119
|
+
toolName: 'save_memory',
|
|
120
|
+
toolArgs: { fact },
|
|
121
|
+
});
|
|
122
|
+
const response = await command.execute(mockContext, [
|
|
123
|
+
'this',
|
|
124
|
+
'is',
|
|
125
|
+
'a',
|
|
126
|
+
'new',
|
|
127
|
+
'fact',
|
|
128
|
+
]);
|
|
129
|
+
expect(mockAddMemory).toHaveBeenCalledWith(fact);
|
|
130
|
+
expect(mockConfig.getToolRegistry).toHaveBeenCalled();
|
|
131
|
+
expect(mockToolRegistry.getTool).toHaveBeenCalledWith('save_memory');
|
|
132
|
+
expect(mockSaveMemoryTool.buildAndExecute).toHaveBeenCalledWith({ fact }, expect.any(AbortSignal), undefined, {
|
|
133
|
+
sanitizationConfig: {
|
|
134
|
+
allowedEnvironmentVariables: [],
|
|
135
|
+
blockedEnvironmentVariables: [],
|
|
136
|
+
enableEnvironmentVariableRedaction: false,
|
|
137
|
+
},
|
|
138
|
+
});
|
|
139
|
+
expect(mockRefreshMemory).toHaveBeenCalledWith(mockContext.config);
|
|
140
|
+
expect(response.name).toBe('memory add');
|
|
141
|
+
expect(response.data).toBe(`Added memory: "${fact}"`);
|
|
142
|
+
});
|
|
143
|
+
it('returns an error if the tool is not found', async () => {
|
|
144
|
+
const command = new AddMemoryCommand();
|
|
145
|
+
const fact = 'another fact';
|
|
146
|
+
mockAddMemory.mockReturnValue({
|
|
147
|
+
type: 'tool',
|
|
148
|
+
toolName: 'save_memory',
|
|
149
|
+
toolArgs: { fact },
|
|
150
|
+
});
|
|
151
|
+
vi.mocked(mockToolRegistry.getTool).mockReturnValue(undefined);
|
|
152
|
+
const response = await command.execute(mockContext, ['another', 'fact']);
|
|
153
|
+
expect(response.name).toBe('memory add');
|
|
154
|
+
expect(response.data).toBe('Error: Tool save_memory not found.');
|
|
155
|
+
});
|
|
156
|
+
});
|
|
157
|
+
});
|
|
158
|
+
//# sourceMappingURL=memory.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory.test.js","sourceRoot":"","sources":["../../../src/commands/memory.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,6 +12,8 @@ import { CoderAgentEvent } from '../types.js';
|
|
|
12
12
|
export async function loadConfig(settings, extensionLoader, taskId) {
|
|
13
13
|
const workspaceDir = process.cwd();
|
|
14
14
|
const adcFilePath = process.env['GOOGLE_APPLICATION_CREDENTIALS'];
|
|
15
|
+
const folderTrust = settings.folderTrust === true ||
|
|
16
|
+
process.env['GEMINI_FOLDER_TRUST'] === 'true';
|
|
15
17
|
const configParams = {
|
|
16
18
|
sessionId: taskId,
|
|
17
19
|
model: settings.general?.previewFeatures
|
|
@@ -43,7 +45,8 @@ export async function loadConfig(settings, extensionLoader, taskId) {
|
|
|
43
45
|
enableRecursiveFileSearch: settings.fileFiltering?.enableRecursiveFileSearch,
|
|
44
46
|
},
|
|
45
47
|
ideMode: false,
|
|
46
|
-
folderTrust
|
|
48
|
+
folderTrust,
|
|
49
|
+
trustedFolder: true,
|
|
47
50
|
extensionLoader,
|
|
48
51
|
checkpointing: process.env['CHECKPOINTING']
|
|
49
52
|
? process.env['CHECKPOINTING'] === 'true'
|
|
@@ -53,9 +56,10 @@ export async function loadConfig(settings, extensionLoader, taskId) {
|
|
|
53
56
|
enableInteractiveShell: true,
|
|
54
57
|
};
|
|
55
58
|
const fileService = new FileDiscoveryService(workspaceDir);
|
|
56
|
-
const { memoryContent, fileCount } = await loadServerHierarchicalMemory(workspaceDir, [workspaceDir], false, fileService, extensionLoader,
|
|
59
|
+
const { memoryContent, fileCount, filePaths } = await loadServerHierarchicalMemory(workspaceDir, [workspaceDir], false, fileService, extensionLoader, folderTrust);
|
|
57
60
|
configParams.userMemory = memoryContent;
|
|
58
61
|
configParams.geminiMdFileCount = fileCount;
|
|
62
|
+
configParams.geminiMdFilePaths = filePaths;
|
|
59
63
|
const config = new Config({
|
|
60
64
|
...configParams,
|
|
61
65
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/config/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AAGjC,OAAO,EACL,QAAQ,EACR,MAAM,EAEN,oBAAoB,EACpB,YAAY,EACZ,4BAA4B,EAC5B,UAAU,EACV,8BAA8B,EAC9B,oBAAoB,EAEpB,eAAe,EACf,oBAAoB,EACpB,OAAO,GACR,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,OAAO,EAAsB,eAAe,EAAE,MAAM,aAAa,CAAC;AAElE,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,QAAkB,EAClB,eAAgC,EAChC,MAAc;IAEd,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IACnC,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;IAElE,MAAM,YAAY,GAAqB;QACrC,SAAS,EAAE,MAAM;QACjB,KAAK,EAAE,QAAQ,CAAC,OAAO,EAAE,eAAe;YACtC,CAAC,CAAC,oBAAoB;YACtB,CAAC,CAAC,oBAAoB;QACxB,cAAc,EAAE,8BAA8B;QAC9C,OAAO,EAAE,SAAS,EAAE,wDAAwD;QAC5E,SAAS,EAAE,YAAY,EAAE,gDAAgD;QACzE,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,MAAM,IAAI,KAAK;QACnD,QAAQ,EAAE,EAAE,EAAE,4CAA4C;QAE1D,SAAS,EAAE,QAAQ,CAAC,SAAS,IAAI,SAAS;QAC1C,YAAY,EAAE,QAAQ,CAAC,YAAY,IAAI,SAAS;QAChD,eAAe,EAAE,QAAQ,CAAC,eAAe,IAAI,KAAK;QAClD,YAAY,EACV,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,KAAK,MAAM;YACxC,CAAC,CAAC,YAAY,CAAC,IAAI;YACnB,CAAC,CAAC,YAAY,CAAC,OAAO;QAC1B,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,GAAG,EAAE,YAAY;QACjB,SAAS,EAAE;YACT,OAAO,EAAE,QAAQ,CAAC,SAAS,EAAE,OAAO;YACpC,MAAM,EAAE,QAAQ,CAAC,SAAS,EAAE,MAAyB;YACrD,YAAY,EACV,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC;gBAC1C,QAAQ,CAAC,SAAS,EAAE,YAAY;YAClC,UAAU,EAAE,QAAQ,CAAC,SAAS,EAAE,UAAU;SAC3C;QACD,oCAAoC;QACpC,aAAa,EAAE;YACb,gBAAgB,EAAE,QAAQ,CAAC,aAAa,EAAE,gBAAgB;YAC1D,yBAAyB,EACvB,QAAQ,CAAC,aAAa,EAAE,yBAAyB;SACpD;QACD,OAAO,EAAE,KAAK;QACd,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/config/config.ts"],"names":[],"mappings":"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"}
|