@google/gemini-cli-core 0.1.21 → 0.1.22
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/README.md +26 -28
- package/dist/src/code_assist/converter.d.ts +1 -0
- package/dist/src/code_assist/converter.js +1 -0
- package/dist/src/code_assist/converter.js.map +1 -1
- package/dist/src/code_assist/oauth2.d.ts +1 -0
- package/dist/src/code_assist/oauth2.js +37 -20
- package/dist/src/code_assist/oauth2.js.map +1 -1
- package/dist/src/code_assist/oauth2.test.js +51 -8
- package/dist/src/code_assist/oauth2.test.js.map +1 -1
- package/dist/src/code_assist/server.js +1 -1
- package/dist/src/code_assist/server.js.map +1 -1
- package/dist/src/code_assist/setup.js +1 -1
- package/dist/src/code_assist/setup.js.map +1 -1
- package/dist/src/code_assist/setup.test.js +14 -8
- package/dist/src/code_assist/setup.test.js.map +1 -1
- package/dist/src/config/config.d.ts +2 -0
- package/dist/src/config/config.js +7 -6
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/config.test.js +22 -0
- package/dist/src/config/config.test.js.map +1 -1
- package/dist/src/core/client.d.ts +4 -11
- package/dist/src/core/client.js +46 -28
- package/dist/src/core/client.js.map +1 -1
- package/dist/src/core/client.test.js +294 -0
- package/dist/src/core/client.test.js.map +1 -1
- package/dist/src/core/contentGenerator.js +19 -9
- package/dist/src/core/contentGenerator.js.map +1 -1
- package/dist/src/core/contentGenerator.test.js +39 -15
- package/dist/src/core/contentGenerator.test.js.map +1 -1
- package/dist/src/core/coreToolScheduler.js +6 -2
- package/dist/src/core/coreToolScheduler.js.map +1 -1
- package/dist/src/core/coreToolScheduler.test.js +46 -63
- package/dist/src/core/coreToolScheduler.test.js.map +1 -1
- package/dist/src/core/logger.d.ts +22 -1
- package/dist/src/core/logger.js +103 -17
- package/dist/src/core/logger.js.map +1 -1
- package/dist/src/core/logger.test.js +86 -20
- package/dist/src/core/logger.test.js.map +1 -1
- package/dist/src/core/nonInteractiveToolExecutor.js +1 -1
- package/dist/src/core/nonInteractiveToolExecutor.js.map +1 -1
- package/dist/src/core/nonInteractiveToolExecutor.test.js +79 -36
- package/dist/src/core/nonInteractiveToolExecutor.test.js.map +1 -1
- package/dist/src/core/prompts.js +4 -4
- package/dist/src/core/prompts.js.map +1 -1
- package/dist/src/generated/git-commit.d.ts +7 -0
- package/dist/src/generated/git-commit.js +10 -0
- package/dist/src/generated/git-commit.js.map +1 -0
- package/dist/src/ide/constants.d.ts +6 -0
- package/dist/src/ide/constants.js +7 -0
- package/dist/src/ide/constants.js.map +1 -0
- package/dist/src/ide/detect-ide.js +8 -8
- package/dist/src/ide/detect-ide.js.map +1 -1
- package/dist/src/ide/ide-client.d.ts +5 -1
- package/dist/src/ide/ide-client.js +57 -21
- package/dist/src/ide/ide-client.js.map +1 -1
- package/dist/src/ide/ide-client.test.d.ts +6 -0
- package/dist/src/ide/ide-client.test.js +43 -0
- package/dist/src/ide/ide-client.test.js.map +1 -0
- package/dist/src/ide/ide-installer.js +5 -4
- package/dist/src/ide/ide-installer.js.map +1 -1
- package/dist/src/ide/ideContext.d.ts +6 -6
- package/dist/src/ide/process-utils.d.ts +14 -0
- package/dist/src/ide/process-utils.js +57 -0
- package/dist/src/ide/process-utils.js.map +1 -0
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.js +1 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/mcp/oauth-provider.js +176 -58
- package/dist/src/mcp/oauth-provider.js.map +1 -1
- package/dist/src/mcp/oauth-provider.test.js +132 -62
- package/dist/src/mcp/oauth-provider.test.js.map +1 -1
- package/dist/src/mcp/oauth-utils.d.ts +3 -1
- package/dist/src/mcp/oauth-utils.js +50 -12
- package/dist/src/mcp/oauth-utils.js.map +1 -1
- package/dist/src/mcp/oauth-utils.test.js +17 -2
- package/dist/src/mcp/oauth-utils.test.js.map +1 -1
- package/dist/src/services/loopDetectionService.js +5 -5
- package/dist/src/services/loopDetectionService.js.map +1 -1
- package/dist/src/services/shellExecutionService.test.js +13 -3
- package/dist/src/services/shellExecutionService.test.js.map +1 -1
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +22 -4
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +60 -34
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.d.ts +11 -0
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js +91 -39
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js.map +1 -1
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +5 -2
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +10 -11
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -1
- package/dist/src/telemetry/constants.d.ts +1 -0
- package/dist/src/telemetry/constants.js +1 -0
- package/dist/src/telemetry/constants.js.map +1 -1
- package/dist/src/telemetry/index.d.ts +2 -2
- package/dist/src/telemetry/index.js +2 -2
- package/dist/src/telemetry/index.js.map +1 -1
- package/dist/src/telemetry/integration.test.circular.js +1 -0
- package/dist/src/telemetry/integration.test.circular.js.map +1 -1
- package/dist/src/telemetry/loggers.d.ts +2 -1
- package/dist/src/telemetry/loggers.js +22 -4
- package/dist/src/telemetry/loggers.js.map +1 -1
- package/dist/src/telemetry/loggers.test.js +27 -2
- package/dist/src/telemetry/loggers.test.js.map +1 -1
- package/dist/src/telemetry/metrics.d.ts +4 -0
- package/dist/src/telemetry/metrics.js +21 -8
- package/dist/src/telemetry/metrics.js.map +1 -1
- package/dist/src/telemetry/metrics.test.js +31 -1
- package/dist/src/telemetry/metrics.test.js.map +1 -1
- package/dist/src/telemetry/sdk.js +64 -36
- package/dist/src/telemetry/sdk.js.map +1 -1
- package/dist/src/telemetry/sdk.test.d.ts +6 -0
- package/dist/src/telemetry/sdk.test.js +82 -0
- package/dist/src/telemetry/sdk.test.js.map +1 -0
- package/dist/src/telemetry/types.d.ts +8 -1
- package/dist/src/telemetry/types.js +8 -0
- package/dist/src/telemetry/types.js.map +1 -1
- package/dist/src/test-utils/tools.d.ts +21 -6
- package/dist/src/test-utils/tools.js +77 -12
- package/dist/src/test-utils/tools.js.map +1 -1
- package/dist/src/tools/mcp-client.js +40 -10
- package/dist/src/tools/mcp-client.js.map +1 -1
- package/dist/src/tools/mcp-client.test.js +31 -1
- package/dist/src/tools/mcp-client.test.js.map +1 -1
- package/dist/src/tools/mcp-tool.js +21 -3
- package/dist/src/tools/mcp-tool.js.map +1 -1
- package/dist/src/tools/mcp-tool.test.js +57 -0
- package/dist/src/tools/mcp-tool.test.js.map +1 -1
- package/dist/src/tools/shell.js +25 -8
- package/dist/src/tools/shell.js.map +1 -1
- package/dist/src/tools/shell.test.js +12 -0
- package/dist/src/tools/shell.test.js.map +1 -1
- package/dist/src/tools/tool-error.d.ts +1 -0
- package/dist/src/tools/tool-error.js +1 -0
- package/dist/src/tools/tool-error.js.map +1 -1
- package/dist/src/tools/tool-registry.d.ts +3 -3
- package/dist/src/tools/tool-registry.js +45 -30
- package/dist/src/tools/tool-registry.js.map +1 -1
- package/dist/src/tools/tools.d.ts +14 -73
- package/dist/src/tools/tools.js +52 -108
- package/dist/src/tools/tools.js.map +1 -1
- package/dist/src/tools/tools.test.js +91 -2
- package/dist/src/tools/tools.test.js.map +1 -1
- package/dist/src/tools/web-search.d.ts +4 -5
- package/dist/src/tools/web-search.js +51 -50
- package/dist/src/tools/web-search.js.map +1 -1
- package/dist/src/tools/web-search.test.d.ts +6 -0
- package/dist/src/tools/web-search.test.js +139 -0
- package/dist/src/tools/web-search.test.js.map +1 -0
- package/dist/src/tools/write-file.d.ts +15 -11
- package/dist/src/tools/write-file.js +133 -144
- package/dist/src/tools/write-file.js.map +1 -1
- package/dist/src/tools/write-file.test.js +57 -88
- package/dist/src/tools/write-file.test.js.map +1 -1
- package/dist/src/utils/browser.js +4 -3
- package/dist/src/utils/browser.js.map +1 -1
- package/dist/src/utils/editCorrector.js +13 -13
- package/dist/src/utils/editCorrector.js.map +1 -1
- package/dist/src/utils/editor.js +1 -1
- package/dist/src/utils/editor.js.map +1 -1
- package/dist/src/utils/editor.test.js +10 -10
- package/dist/src/utils/editor.test.js.map +1 -1
- package/dist/src/utils/filesearch/crawler.d.ts +15 -0
- package/dist/src/utils/filesearch/crawler.js +50 -0
- package/dist/src/utils/filesearch/crawler.js.map +1 -0
- package/dist/src/utils/filesearch/crawler.test.d.ts +6 -0
- package/dist/src/utils/filesearch/crawler.test.js +468 -0
- package/dist/src/utils/filesearch/crawler.test.js.map +1 -0
- package/dist/src/utils/filesearch/fileSearch.d.ts +9 -53
- package/dist/src/utils/filesearch/fileSearch.js +62 -117
- package/dist/src/utils/filesearch/fileSearch.js.map +1 -1
- package/dist/src/utils/filesearch/fileSearch.test.js +95 -197
- package/dist/src/utils/filesearch/fileSearch.test.js.map +1 -1
- package/dist/src/utils/filesearch/ignore.d.ts +7 -0
- package/dist/src/utils/filesearch/ignore.js +25 -0
- package/dist/src/utils/filesearch/ignore.js.map +1 -1
- package/dist/src/utils/filesearch/ignore.test.js +89 -2
- package/dist/src/utils/filesearch/ignore.test.js.map +1 -1
- package/dist/src/utils/memoryDiscovery.js +3 -3
- package/dist/src/utils/memoryDiscovery.js.map +1 -1
- package/dist/src/utils/memoryDiscovery.test.js +3 -2
- package/dist/src/utils/memoryDiscovery.test.js.map +1 -1
- package/dist/src/utils/memoryImportProcessor.js +2 -6
- package/dist/src/utils/memoryImportProcessor.js.map +1 -1
- package/dist/src/utils/paths.d.ts +7 -0
- package/dist/src/utils/paths.js +15 -0
- package/dist/src/utils/paths.js.map +1 -1
- package/dist/src/utils/paths.test.js +74 -2
- package/dist/src/utils/paths.test.js.map +1 -1
- package/dist/src/utils/secure-browser-launcher.js +4 -3
- package/dist/src/utils/secure-browser-launcher.js.map +1 -1
- package/dist/src/utils/shell-utils.d.ts +39 -0
- package/dist/src/utils/shell-utils.js +72 -2
- package/dist/src/utils/shell-utils.js.map +1 -1
- package/dist/src/utils/shell-utils.test.js +132 -4
- package/dist/src/utils/shell-utils.test.js.map +1 -1
- package/dist/src/utils/systemEncoding.js +1 -1
- package/dist/src/utils/systemEncoding.js.map +1 -1
- package/dist/src/utils/systemEncoding.test.js +23 -23
- package/dist/src/utils/systemEncoding.test.js.map +1 -1
- package/dist/src/utils/workspaceContext.d.ts +22 -7
- package/dist/src/utils/workspaceContext.js +81 -55
- package/dist/src/utils/workspaceContext.js.map +1 -1
- package/dist/src/utils/workspaceContext.test.js +221 -137
- package/dist/src/utils/workspaceContext.test.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +4 -1
|
@@ -3,206 +3,290 @@
|
|
|
3
3
|
* Copyright 2025 Google LLC
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
-
import { describe, it, expect, beforeEach, vi } from 'vitest';
|
|
6
|
+
import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
|
|
7
7
|
import * as fs from 'fs';
|
|
8
|
+
import * as os from 'os';
|
|
8
9
|
import * as path from 'path';
|
|
9
10
|
import { WorkspaceContext } from './workspaceContext.js';
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
let
|
|
13
|
-
|
|
14
|
-
const mockCwd = path.resolve(path.sep, 'home', 'user', 'project');
|
|
15
|
-
const mockExistingDir = path.resolve(path.sep, 'home', 'user', 'other-project');
|
|
16
|
-
const mockNonExistentDir = path.resolve(path.sep, 'home', 'user', 'does-not-exist');
|
|
17
|
-
const mockSymlinkDir = path.resolve(path.sep, 'home', 'user', 'symlink');
|
|
18
|
-
const mockRealPath = path.resolve(path.sep, 'home', 'user', 'real-directory');
|
|
11
|
+
describe('WorkspaceContext with real filesystem', () => {
|
|
12
|
+
let tempDir;
|
|
13
|
+
let cwd;
|
|
14
|
+
let otherDir;
|
|
19
15
|
beforeEach(() => {
|
|
20
|
-
|
|
21
|
-
//
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
vi.mocked(fs.statSync).mockImplementation((path) => {
|
|
31
|
-
const pathStr = path.toString();
|
|
32
|
-
if (pathStr === mockNonExistentDir) {
|
|
33
|
-
throw new Error('ENOENT');
|
|
34
|
-
}
|
|
35
|
-
return {
|
|
36
|
-
isDirectory: () => true,
|
|
37
|
-
};
|
|
38
|
-
});
|
|
39
|
-
// Mock fs.realpathSync
|
|
40
|
-
vi.mocked(fs.realpathSync).mockImplementation((path) => {
|
|
41
|
-
const pathStr = path.toString();
|
|
42
|
-
if (pathStr === mockSymlinkDir) {
|
|
43
|
-
return mockRealPath;
|
|
44
|
-
}
|
|
45
|
-
return pathStr;
|
|
46
|
-
});
|
|
16
|
+
// os.tmpdir() can return a path using a symlink (this is standard on macOS)
|
|
17
|
+
// Use fs.realpathSync to fully resolve the absolute path.
|
|
18
|
+
tempDir = fs.realpathSync(fs.mkdtempSync(path.join(os.tmpdir(), 'workspace-context-test-')));
|
|
19
|
+
cwd = path.join(tempDir, 'project');
|
|
20
|
+
otherDir = path.join(tempDir, 'other-project');
|
|
21
|
+
fs.mkdirSync(cwd, { recursive: true });
|
|
22
|
+
fs.mkdirSync(otherDir, { recursive: true });
|
|
23
|
+
});
|
|
24
|
+
afterEach(() => {
|
|
25
|
+
fs.rmSync(tempDir, { recursive: true, force: true });
|
|
47
26
|
});
|
|
48
27
|
describe('initialization', () => {
|
|
49
28
|
it('should initialize with a single directory (cwd)', () => {
|
|
50
|
-
workspaceContext = new WorkspaceContext(
|
|
29
|
+
const workspaceContext = new WorkspaceContext(cwd);
|
|
51
30
|
const directories = workspaceContext.getDirectories();
|
|
52
|
-
expect(directories).
|
|
53
|
-
expect(directories[0]).toBe(mockCwd);
|
|
31
|
+
expect(directories).toEqual([cwd]);
|
|
54
32
|
});
|
|
55
33
|
it('should validate and resolve directories to absolute paths', () => {
|
|
56
|
-
const
|
|
57
|
-
vi.mocked(fs.existsSync).mockImplementation((p) => p === mockCwd || p === absolutePath);
|
|
58
|
-
vi.mocked(fs.realpathSync).mockImplementation((p) => p.toString());
|
|
59
|
-
workspaceContext = new WorkspaceContext(mockCwd, [absolutePath]);
|
|
34
|
+
const workspaceContext = new WorkspaceContext(cwd, [otherDir]);
|
|
60
35
|
const directories = workspaceContext.getDirectories();
|
|
61
|
-
expect(directories).
|
|
36
|
+
expect(directories).toEqual([cwd, otherDir]);
|
|
62
37
|
});
|
|
63
38
|
it('should reject non-existent directories', () => {
|
|
39
|
+
const nonExistentDir = path.join(tempDir, 'does-not-exist');
|
|
64
40
|
expect(() => {
|
|
65
|
-
new WorkspaceContext(
|
|
41
|
+
new WorkspaceContext(cwd, [nonExistentDir]);
|
|
66
42
|
}).toThrow('Directory does not exist');
|
|
67
43
|
});
|
|
68
44
|
it('should handle empty initialization', () => {
|
|
69
|
-
workspaceContext = new WorkspaceContext(
|
|
45
|
+
const workspaceContext = new WorkspaceContext(cwd, []);
|
|
70
46
|
const directories = workspaceContext.getDirectories();
|
|
71
47
|
expect(directories).toHaveLength(1);
|
|
72
|
-
expect(directories[0]).toBe(
|
|
48
|
+
expect(fs.realpathSync(directories[0])).toBe(cwd);
|
|
73
49
|
});
|
|
74
50
|
});
|
|
75
51
|
describe('adding directories', () => {
|
|
76
|
-
beforeEach(() => {
|
|
77
|
-
workspaceContext = new WorkspaceContext(mockCwd);
|
|
78
|
-
});
|
|
79
52
|
it('should add valid directories', () => {
|
|
80
|
-
workspaceContext
|
|
53
|
+
const workspaceContext = new WorkspaceContext(cwd);
|
|
54
|
+
workspaceContext.addDirectory(otherDir);
|
|
81
55
|
const directories = workspaceContext.getDirectories();
|
|
82
|
-
expect(directories).
|
|
83
|
-
expect(directories).toContain(mockExistingDir);
|
|
56
|
+
expect(directories).toEqual([cwd, otherDir]);
|
|
84
57
|
});
|
|
85
58
|
it('should resolve relative paths to absolute', () => {
|
|
86
|
-
|
|
87
|
-
|
|
59
|
+
const workspaceContext = new WorkspaceContext(cwd);
|
|
60
|
+
const relativePath = path.relative(cwd, otherDir);
|
|
61
|
+
workspaceContext.addDirectory(relativePath, cwd);
|
|
88
62
|
const directories = workspaceContext.getDirectories();
|
|
89
|
-
expect(directories).
|
|
63
|
+
expect(directories).toEqual([cwd, otherDir]);
|
|
90
64
|
});
|
|
91
65
|
it('should reject non-existent directories', () => {
|
|
66
|
+
const nonExistentDir = path.join(tempDir, 'does-not-exist');
|
|
67
|
+
const workspaceContext = new WorkspaceContext(cwd);
|
|
92
68
|
expect(() => {
|
|
93
|
-
workspaceContext.addDirectory(
|
|
69
|
+
workspaceContext.addDirectory(nonExistentDir);
|
|
94
70
|
}).toThrow('Directory does not exist');
|
|
95
71
|
});
|
|
96
72
|
it('should prevent duplicate directories', () => {
|
|
97
|
-
workspaceContext
|
|
98
|
-
workspaceContext.addDirectory(
|
|
73
|
+
const workspaceContext = new WorkspaceContext(cwd);
|
|
74
|
+
workspaceContext.addDirectory(otherDir);
|
|
75
|
+
workspaceContext.addDirectory(otherDir);
|
|
99
76
|
const directories = workspaceContext.getDirectories();
|
|
100
|
-
expect(directories
|
|
77
|
+
expect(directories).toHaveLength(2);
|
|
101
78
|
});
|
|
102
79
|
it('should handle symbolic links correctly', () => {
|
|
103
|
-
|
|
80
|
+
const realDir = path.join(tempDir, 'real');
|
|
81
|
+
fs.mkdirSync(realDir, { recursive: true });
|
|
82
|
+
const symlinkDir = path.join(tempDir, 'symlink-to-real');
|
|
83
|
+
fs.symlinkSync(realDir, symlinkDir, 'dir');
|
|
84
|
+
const workspaceContext = new WorkspaceContext(cwd);
|
|
85
|
+
workspaceContext.addDirectory(symlinkDir);
|
|
104
86
|
const directories = workspaceContext.getDirectories();
|
|
105
|
-
expect(directories).
|
|
106
|
-
expect(directories).not.toContain(mockSymlinkDir);
|
|
87
|
+
expect(directories).toEqual([cwd, realDir]);
|
|
107
88
|
});
|
|
108
89
|
});
|
|
109
90
|
describe('path validation', () => {
|
|
110
|
-
beforeEach(() => {
|
|
111
|
-
workspaceContext = new WorkspaceContext(mockCwd, [mockExistingDir]);
|
|
112
|
-
});
|
|
113
91
|
it('should accept paths within workspace directories', () => {
|
|
114
|
-
const
|
|
115
|
-
const
|
|
92
|
+
const workspaceContext = new WorkspaceContext(cwd, [otherDir]);
|
|
93
|
+
const validPath1 = path.join(cwd, 'src', 'file.ts');
|
|
94
|
+
const validPath2 = path.join(otherDir, 'lib', 'module.js');
|
|
95
|
+
fs.mkdirSync(path.dirname(validPath1), { recursive: true });
|
|
96
|
+
fs.writeFileSync(validPath1, 'content');
|
|
97
|
+
fs.mkdirSync(path.dirname(validPath2), { recursive: true });
|
|
98
|
+
fs.writeFileSync(validPath2, 'content');
|
|
99
|
+
expect(workspaceContext.isPathWithinWorkspace(validPath1)).toBe(true);
|
|
100
|
+
expect(workspaceContext.isPathWithinWorkspace(validPath2)).toBe(true);
|
|
101
|
+
});
|
|
102
|
+
it('should accept non-existent paths within workspace directories', () => {
|
|
103
|
+
const workspaceContext = new WorkspaceContext(cwd, [otherDir]);
|
|
104
|
+
const validPath1 = path.join(cwd, 'src', 'file.ts');
|
|
105
|
+
const validPath2 = path.join(otherDir, 'lib', 'module.js');
|
|
116
106
|
expect(workspaceContext.isPathWithinWorkspace(validPath1)).toBe(true);
|
|
117
107
|
expect(workspaceContext.isPathWithinWorkspace(validPath2)).toBe(true);
|
|
118
108
|
});
|
|
119
109
|
it('should reject paths outside workspace', () => {
|
|
120
|
-
const
|
|
110
|
+
const workspaceContext = new WorkspaceContext(cwd, [otherDir]);
|
|
111
|
+
const invalidPath = path.join(tempDir, 'outside-workspace', 'file.txt');
|
|
121
112
|
expect(workspaceContext.isPathWithinWorkspace(invalidPath)).toBe(false);
|
|
122
113
|
});
|
|
123
|
-
it('should
|
|
124
|
-
const
|
|
125
|
-
const
|
|
126
|
-
|
|
127
|
-
vi.mocked(fs.realpathSync).mockImplementation((p) => {
|
|
128
|
-
if (p === symlinkPath) {
|
|
129
|
-
return realPath;
|
|
130
|
-
}
|
|
131
|
-
return p.toString();
|
|
132
|
-
});
|
|
133
|
-
expect(workspaceContext.isPathWithinWorkspace(symlinkPath)).toBe(true);
|
|
114
|
+
it('should reject non-existent paths outside workspace', () => {
|
|
115
|
+
const workspaceContext = new WorkspaceContext(cwd, [otherDir]);
|
|
116
|
+
const invalidPath = path.join(tempDir, 'outside-workspace', 'file.txt');
|
|
117
|
+
expect(workspaceContext.isPathWithinWorkspace(invalidPath)).toBe(false);
|
|
134
118
|
});
|
|
135
119
|
it('should handle nested directories correctly', () => {
|
|
136
|
-
const
|
|
120
|
+
const workspaceContext = new WorkspaceContext(cwd, [otherDir]);
|
|
121
|
+
const nestedPath = path.join(cwd, 'deeply', 'nested', 'path', 'file.txt');
|
|
137
122
|
expect(workspaceContext.isPathWithinWorkspace(nestedPath)).toBe(true);
|
|
138
123
|
});
|
|
139
124
|
it('should handle edge cases (root, parent references)', () => {
|
|
140
|
-
const
|
|
141
|
-
const
|
|
125
|
+
const workspaceContext = new WorkspaceContext(cwd, [otherDir]);
|
|
126
|
+
const rootPath = path.parse(tempDir).root;
|
|
127
|
+
const parentPath = path.dirname(cwd);
|
|
142
128
|
expect(workspaceContext.isPathWithinWorkspace(rootPath)).toBe(false);
|
|
143
129
|
expect(workspaceContext.isPathWithinWorkspace(parentPath)).toBe(false);
|
|
144
130
|
});
|
|
145
131
|
it('should handle non-existent paths correctly', () => {
|
|
146
|
-
const
|
|
147
|
-
|
|
148
|
-
// Should still validate based on path structure
|
|
132
|
+
const workspaceContext = new WorkspaceContext(cwd, [otherDir]);
|
|
133
|
+
const nonExistentPath = path.join(cwd, 'does-not-exist.txt');
|
|
149
134
|
expect(workspaceContext.isPathWithinWorkspace(nonExistentPath)).toBe(true);
|
|
150
135
|
});
|
|
136
|
+
describe('with symbolic link', () => {
|
|
137
|
+
describe('in the workspace', () => {
|
|
138
|
+
let realDir;
|
|
139
|
+
let symlinkDir;
|
|
140
|
+
beforeEach(() => {
|
|
141
|
+
realDir = path.join(cwd, 'real-dir');
|
|
142
|
+
fs.mkdirSync(realDir, { recursive: true });
|
|
143
|
+
symlinkDir = path.join(cwd, 'symlink-file');
|
|
144
|
+
fs.symlinkSync(realDir, symlinkDir, 'dir');
|
|
145
|
+
});
|
|
146
|
+
it('should accept dir paths', () => {
|
|
147
|
+
const workspaceContext = new WorkspaceContext(cwd);
|
|
148
|
+
expect(workspaceContext.isPathWithinWorkspace(symlinkDir)).toBe(true);
|
|
149
|
+
});
|
|
150
|
+
it('should accept non-existent paths', () => {
|
|
151
|
+
const filePath = path.join(symlinkDir, 'does-not-exist.txt');
|
|
152
|
+
const workspaceContext = new WorkspaceContext(cwd);
|
|
153
|
+
expect(workspaceContext.isPathWithinWorkspace(filePath)).toBe(true);
|
|
154
|
+
});
|
|
155
|
+
it('should accept non-existent deep paths', () => {
|
|
156
|
+
const filePath = path.join(symlinkDir, 'deep', 'does-not-exist.txt');
|
|
157
|
+
const workspaceContext = new WorkspaceContext(cwd);
|
|
158
|
+
expect(workspaceContext.isPathWithinWorkspace(filePath)).toBe(true);
|
|
159
|
+
});
|
|
160
|
+
});
|
|
161
|
+
describe('outside the workspace', () => {
|
|
162
|
+
let realDir;
|
|
163
|
+
let symlinkDir;
|
|
164
|
+
beforeEach(() => {
|
|
165
|
+
realDir = path.join(tempDir, 'real-dir');
|
|
166
|
+
fs.mkdirSync(realDir, { recursive: true });
|
|
167
|
+
symlinkDir = path.join(cwd, 'symlink-file');
|
|
168
|
+
fs.symlinkSync(realDir, symlinkDir, 'dir');
|
|
169
|
+
});
|
|
170
|
+
it('should reject dir paths', () => {
|
|
171
|
+
const workspaceContext = new WorkspaceContext(cwd);
|
|
172
|
+
expect(workspaceContext.isPathWithinWorkspace(symlinkDir)).toBe(false);
|
|
173
|
+
});
|
|
174
|
+
it('should reject non-existent paths', () => {
|
|
175
|
+
const filePath = path.join(symlinkDir, 'does-not-exist.txt');
|
|
176
|
+
const workspaceContext = new WorkspaceContext(cwd);
|
|
177
|
+
expect(workspaceContext.isPathWithinWorkspace(filePath)).toBe(false);
|
|
178
|
+
});
|
|
179
|
+
it('should reject non-existent deep paths', () => {
|
|
180
|
+
const filePath = path.join(symlinkDir, 'deep', 'does-not-exist.txt');
|
|
181
|
+
const workspaceContext = new WorkspaceContext(cwd);
|
|
182
|
+
expect(workspaceContext.isPathWithinWorkspace(filePath)).toBe(false);
|
|
183
|
+
});
|
|
184
|
+
it('should reject partially non-existent deep paths', () => {
|
|
185
|
+
const deepDir = path.join(symlinkDir, 'deep');
|
|
186
|
+
fs.mkdirSync(deepDir, { recursive: true });
|
|
187
|
+
const filePath = path.join(deepDir, 'does-not-exist.txt');
|
|
188
|
+
const workspaceContext = new WorkspaceContext(cwd);
|
|
189
|
+
expect(workspaceContext.isPathWithinWorkspace(filePath)).toBe(false);
|
|
190
|
+
});
|
|
191
|
+
});
|
|
192
|
+
it('should reject symbolic file links outside the workspace', () => {
|
|
193
|
+
const realFile = path.join(tempDir, 'real-file.txt');
|
|
194
|
+
fs.writeFileSync(realFile, 'content');
|
|
195
|
+
const symlinkFile = path.join(cwd, 'symlink-to-real-file');
|
|
196
|
+
fs.symlinkSync(realFile, symlinkFile, 'file');
|
|
197
|
+
const workspaceContext = new WorkspaceContext(cwd);
|
|
198
|
+
expect(workspaceContext.isPathWithinWorkspace(symlinkFile)).toBe(false);
|
|
199
|
+
});
|
|
200
|
+
it('should reject non-existent symbolic file links outside the workspace', () => {
|
|
201
|
+
const realFile = path.join(tempDir, 'real-file.txt');
|
|
202
|
+
const symlinkFile = path.join(cwd, 'symlink-to-real-file');
|
|
203
|
+
fs.symlinkSync(realFile, symlinkFile, 'file');
|
|
204
|
+
const workspaceContext = new WorkspaceContext(cwd);
|
|
205
|
+
expect(workspaceContext.isPathWithinWorkspace(symlinkFile)).toBe(false);
|
|
206
|
+
});
|
|
207
|
+
it('should handle circular symlinks gracefully', () => {
|
|
208
|
+
const workspaceContext = new WorkspaceContext(cwd);
|
|
209
|
+
const linkA = path.join(cwd, 'link-a');
|
|
210
|
+
const linkB = path.join(cwd, 'link-b');
|
|
211
|
+
// Create a circular dependency: linkA -> linkB -> linkA
|
|
212
|
+
fs.symlinkSync(linkB, linkA, 'dir');
|
|
213
|
+
fs.symlinkSync(linkA, linkB, 'dir');
|
|
214
|
+
// fs.realpathSync should throw ELOOP, and isPathWithinWorkspace should
|
|
215
|
+
// handle it gracefully and return false.
|
|
216
|
+
expect(workspaceContext.isPathWithinWorkspace(linkA)).toBe(false);
|
|
217
|
+
expect(workspaceContext.isPathWithinWorkspace(linkB)).toBe(false);
|
|
218
|
+
});
|
|
219
|
+
});
|
|
220
|
+
});
|
|
221
|
+
describe('onDirectoriesChanged', () => {
|
|
222
|
+
it('should call listener when adding a directory', () => {
|
|
223
|
+
const workspaceContext = new WorkspaceContext(cwd);
|
|
224
|
+
const listener = vi.fn();
|
|
225
|
+
workspaceContext.onDirectoriesChanged(listener);
|
|
226
|
+
workspaceContext.addDirectory(otherDir);
|
|
227
|
+
expect(listener).toHaveBeenCalledOnce();
|
|
228
|
+
});
|
|
229
|
+
it('should not call listener when adding a duplicate directory', () => {
|
|
230
|
+
const workspaceContext = new WorkspaceContext(cwd);
|
|
231
|
+
workspaceContext.addDirectory(otherDir);
|
|
232
|
+
const listener = vi.fn();
|
|
233
|
+
workspaceContext.onDirectoriesChanged(listener);
|
|
234
|
+
workspaceContext.addDirectory(otherDir);
|
|
235
|
+
expect(listener).not.toHaveBeenCalled();
|
|
236
|
+
});
|
|
237
|
+
it('should call listener when setting different directories', () => {
|
|
238
|
+
const workspaceContext = new WorkspaceContext(cwd);
|
|
239
|
+
const listener = vi.fn();
|
|
240
|
+
workspaceContext.onDirectoriesChanged(listener);
|
|
241
|
+
workspaceContext.setDirectories([otherDir]);
|
|
242
|
+
expect(listener).toHaveBeenCalledOnce();
|
|
243
|
+
});
|
|
244
|
+
it('should not call listener when setting same directories', () => {
|
|
245
|
+
const workspaceContext = new WorkspaceContext(cwd);
|
|
246
|
+
const listener = vi.fn();
|
|
247
|
+
workspaceContext.onDirectoriesChanged(listener);
|
|
248
|
+
workspaceContext.setDirectories([cwd]);
|
|
249
|
+
expect(listener).not.toHaveBeenCalled();
|
|
250
|
+
});
|
|
251
|
+
it('should support multiple listeners', () => {
|
|
252
|
+
const workspaceContext = new WorkspaceContext(cwd);
|
|
253
|
+
const listener1 = vi.fn();
|
|
254
|
+
const listener2 = vi.fn();
|
|
255
|
+
workspaceContext.onDirectoriesChanged(listener1);
|
|
256
|
+
workspaceContext.onDirectoriesChanged(listener2);
|
|
257
|
+
workspaceContext.addDirectory(otherDir);
|
|
258
|
+
expect(listener1).toHaveBeenCalledOnce();
|
|
259
|
+
expect(listener2).toHaveBeenCalledOnce();
|
|
260
|
+
});
|
|
261
|
+
it('should allow unsubscribing a listener', () => {
|
|
262
|
+
const workspaceContext = new WorkspaceContext(cwd);
|
|
263
|
+
const listener = vi.fn();
|
|
264
|
+
const unsubscribe = workspaceContext.onDirectoriesChanged(listener);
|
|
265
|
+
unsubscribe();
|
|
266
|
+
workspaceContext.addDirectory(otherDir);
|
|
267
|
+
expect(listener).not.toHaveBeenCalled();
|
|
268
|
+
});
|
|
269
|
+
it('should not fail if a listener throws an error', () => {
|
|
270
|
+
const workspaceContext = new WorkspaceContext(cwd);
|
|
271
|
+
const errorListener = () => {
|
|
272
|
+
throw new Error('test error');
|
|
273
|
+
};
|
|
274
|
+
const listener = vi.fn();
|
|
275
|
+
workspaceContext.onDirectoriesChanged(errorListener);
|
|
276
|
+
workspaceContext.onDirectoriesChanged(listener);
|
|
277
|
+
expect(() => {
|
|
278
|
+
workspaceContext.addDirectory(otherDir);
|
|
279
|
+
}).not.toThrow();
|
|
280
|
+
expect(listener).toHaveBeenCalledOnce();
|
|
281
|
+
});
|
|
151
282
|
});
|
|
152
283
|
describe('getDirectories', () => {
|
|
153
284
|
it('should return a copy of directories array', () => {
|
|
154
|
-
workspaceContext = new WorkspaceContext(
|
|
285
|
+
const workspaceContext = new WorkspaceContext(cwd);
|
|
155
286
|
const dirs1 = workspaceContext.getDirectories();
|
|
156
287
|
const dirs2 = workspaceContext.getDirectories();
|
|
157
|
-
expect(dirs1).not.toBe(dirs2);
|
|
158
|
-
expect(dirs1).toEqual(dirs2);
|
|
159
|
-
});
|
|
160
|
-
});
|
|
161
|
-
describe('symbolic link security', () => {
|
|
162
|
-
beforeEach(() => {
|
|
163
|
-
workspaceContext = new WorkspaceContext(mockCwd);
|
|
164
|
-
});
|
|
165
|
-
it('should follow symlinks but validate resolved path', () => {
|
|
166
|
-
const symlinkInsideWorkspace = path.join(mockCwd, 'link-to-subdir');
|
|
167
|
-
const resolvedInsideWorkspace = path.join(mockCwd, 'subdir');
|
|
168
|
-
vi.mocked(fs.existsSync).mockReturnValue(true);
|
|
169
|
-
vi.mocked(fs.realpathSync).mockImplementation((p) => {
|
|
170
|
-
if (p === symlinkInsideWorkspace) {
|
|
171
|
-
return resolvedInsideWorkspace;
|
|
172
|
-
}
|
|
173
|
-
return p.toString();
|
|
174
|
-
});
|
|
175
|
-
expect(workspaceContext.isPathWithinWorkspace(symlinkInsideWorkspace)).toBe(true);
|
|
176
|
-
});
|
|
177
|
-
it('should prevent sandbox escape via symlinks', () => {
|
|
178
|
-
const symlinkEscape = path.join(mockCwd, 'escape-link');
|
|
179
|
-
const resolvedOutside = path.resolve(mockCwd, '..', 'outside-file');
|
|
180
|
-
vi.mocked(fs.existsSync).mockImplementation((p) => {
|
|
181
|
-
const pathStr = p.toString();
|
|
182
|
-
return (pathStr === symlinkEscape ||
|
|
183
|
-
pathStr === resolvedOutside ||
|
|
184
|
-
pathStr === mockCwd);
|
|
185
|
-
});
|
|
186
|
-
vi.mocked(fs.realpathSync).mockImplementation((p) => {
|
|
187
|
-
if (p.toString() === symlinkEscape) {
|
|
188
|
-
return resolvedOutside;
|
|
189
|
-
}
|
|
190
|
-
return p.toString();
|
|
191
|
-
});
|
|
192
|
-
vi.mocked(fs.statSync).mockImplementation((p) => ({
|
|
193
|
-
isDirectory: () => p.toString() !== resolvedOutside,
|
|
194
|
-
}));
|
|
195
|
-
workspaceContext = new WorkspaceContext(mockCwd);
|
|
196
|
-
expect(workspaceContext.isPathWithinWorkspace(symlinkEscape)).toBe(false);
|
|
197
|
-
});
|
|
198
|
-
it('should handle circular symlinks', () => {
|
|
199
|
-
const circularLink = path.join(mockCwd, 'circular');
|
|
200
|
-
vi.mocked(fs.existsSync).mockReturnValue(true);
|
|
201
|
-
vi.mocked(fs.realpathSync).mockImplementation(() => {
|
|
202
|
-
throw new Error('ELOOP: too many symbolic links encountered');
|
|
203
|
-
});
|
|
204
|
-
// Should handle the error gracefully
|
|
205
|
-
expect(workspaceContext.isPathWithinWorkspace(circularLink)).toBe(false);
|
|
288
|
+
expect(dirs1).not.toBe(dirs2);
|
|
289
|
+
expect(dirs1).toEqual(dirs2);
|
|
206
290
|
});
|
|
207
291
|
});
|
|
208
292
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspaceContext.test.js","sourceRoot":"","sources":["../../../src/utils/workspaceContext.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"workspaceContext.test.js","sourceRoot":"","sources":["../../../src/utils/workspaceContext.test.ts"],"names":[],"mappings":"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"}
|