summaryrefslogtreecommitdiff
path: root/packages/core/src/config
diff options
context:
space:
mode:
Diffstat (limited to 'packages/core/src/config')
-rw-r--r--packages/core/src/config/config.test.ts29
-rw-r--r--packages/core/src/config/config.ts11
-rw-r--r--packages/core/src/config/flashFallback.test.ts9
3 files changed, 48 insertions, 1 deletions
diff --git a/packages/core/src/config/config.test.ts b/packages/core/src/config/config.test.ts
index f2169790..dcc81b4f 100644
--- a/packages/core/src/config/config.test.ts
+++ b/packages/core/src/config/config.test.ts
@@ -19,6 +19,18 @@ import {
import { GeminiClient } from '../core/client.js';
import { GitService } from '../services/gitService.js';
+vi.mock('fs', async (importOriginal) => {
+ const actual = await importOriginal<typeof import('fs')>();
+ return {
+ ...actual,
+ existsSync: vi.fn().mockReturnValue(true),
+ statSync: vi.fn().mockReturnValue({
+ isDirectory: vi.fn().mockReturnValue(true),
+ }),
+ realpathSync: vi.fn((path) => path),
+ };
+});
+
// Mock dependencies that might be called during Config construction or createServerConfig
vi.mock('../tools/tool-registry', () => {
const ToolRegistryMock = vi.fn();
@@ -219,6 +231,23 @@ describe('Server Config (config.ts)', () => {
expect(config.getFileFilteringRespectGitIgnore()).toBe(false);
});
+ it('should initialize WorkspaceContext with includeDirectories', () => {
+ const includeDirectories = ['/path/to/dir1', '/path/to/dir2'];
+ const paramsWithIncludeDirs: ConfigParameters = {
+ ...baseParams,
+ includeDirectories,
+ };
+ const config = new Config(paramsWithIncludeDirs);
+ const workspaceContext = config.getWorkspaceContext();
+ const directories = workspaceContext.getDirectories();
+
+ // Should include the target directory plus the included directories
+ expect(directories).toHaveLength(3);
+ expect(directories).toContain(path.resolve(baseParams.targetDir));
+ expect(directories).toContain('/path/to/dir1');
+ expect(directories).toContain('/path/to/dir2');
+ });
+
it('Config constructor should set telemetry to true when provided as true', () => {
const paramsWithTelemetry: ConfigParameters = {
...baseParams,
diff --git a/packages/core/src/config/config.ts b/packages/core/src/config/config.ts
index c92fb623..d8bce341 100644
--- a/packages/core/src/config/config.ts
+++ b/packages/core/src/config/config.ts
@@ -50,6 +50,7 @@ import { IdeClient } from '../ide/ide-client.js';
// Re-export OAuth config type
export type { MCPOAuthConfig };
+import { WorkspaceContext } from '../utils/workspaceContext.js';
export enum ApprovalMode {
DEFAULT = 'default',
@@ -172,6 +173,7 @@ export interface ConfigParameters {
proxy?: string;
cwd: string;
fileDiscoveryService?: FileDiscoveryService;
+ includeDirectories?: string[];
bugCommand?: BugCommandSettings;
model: string;
extensionContextFilePaths?: string[];
@@ -194,6 +196,7 @@ export class Config {
private readonly embeddingModel: string;
private readonly sandbox: SandboxConfig | undefined;
private readonly targetDir: string;
+ private readonly workspaceContext: WorkspaceContext;
private readonly debugMode: boolean;
private readonly question: string | undefined;
private readonly fullContext: boolean;
@@ -248,6 +251,10 @@ export class Config {
params.embeddingModel ?? DEFAULT_GEMINI_EMBEDDING_MODEL;
this.sandbox = params.sandbox;
this.targetDir = path.resolve(params.targetDir);
+ this.workspaceContext = new WorkspaceContext(
+ this.targetDir,
+ params.includeDirectories ?? [],
+ );
this.debugMode = params.debugMode;
this.question = params.question;
this.fullContext = params.fullContext ?? false;
@@ -392,6 +399,10 @@ export class Config {
return this.targetDir;
}
+ getWorkspaceContext(): WorkspaceContext {
+ return this.workspaceContext;
+ }
+
getToolRegistry(): Promise<ToolRegistry> {
return Promise.resolve(this.toolRegistry);
}
diff --git a/packages/core/src/config/flashFallback.test.ts b/packages/core/src/config/flashFallback.test.ts
index cd78cd34..a0034ea1 100644
--- a/packages/core/src/config/flashFallback.test.ts
+++ b/packages/core/src/config/flashFallback.test.ts
@@ -4,14 +4,21 @@
* SPDX-License-Identifier: Apache-2.0
*/
-import { describe, it, expect, beforeEach } from 'vitest';
+import { describe, it, expect, beforeEach, vi } from 'vitest';
import { Config } from './config.js';
import { DEFAULT_GEMINI_MODEL, DEFAULT_GEMINI_FLASH_MODEL } from './models.js';
+import fs from 'node:fs';
+
+vi.mock('node:fs');
describe('Flash Model Fallback Configuration', () => {
let config: Config;
beforeEach(() => {
+ vi.mocked(fs.existsSync).mockReturnValue(true);
+ vi.mocked(fs.statSync).mockReturnValue({
+ isDirectory: () => true,
+ } as fs.Stats);
config = new Config({
sessionId: 'test-session',
targetDir: '/test',