centaurus-cli 2.3.0 → 2.5.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/README.md +151 -1
- package/dist/cli-adapter.d.ts +41 -2
- package/dist/cli-adapter.d.ts.map +1 -1
- package/dist/cli-adapter.js +407 -79
- package/dist/cli-adapter.js.map +1 -1
- package/dist/config/types.d.ts +23 -0
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js +20 -0
- package/dist/config/types.js.map +1 -1
- package/dist/context/__tests__/command-detector.test.d.ts +14 -0
- package/dist/context/__tests__/command-detector.test.d.ts.map +1 -0
- package/dist/context/__tests__/command-detector.test.js +318 -0
- package/dist/context/__tests__/command-detector.test.js.map +1 -0
- package/dist/context/__tests__/context-manager.test.d.ts +16 -0
- package/dist/context/__tests__/context-manager.test.d.ts.map +1 -0
- package/dist/context/__tests__/context-manager.test.js +375 -0
- package/dist/context/__tests__/context-manager.test.js.map +1 -0
- package/dist/context/__tests__/error-handling.test.d.ts +15 -0
- package/dist/context/__tests__/error-handling.test.d.ts.map +1 -0
- package/dist/context/__tests__/error-handling.test.js +447 -0
- package/dist/context/__tests__/error-handling.test.js.map +1 -0
- package/dist/context/command-detector.d.ts +50 -0
- package/dist/context/command-detector.d.ts.map +1 -0
- package/dist/context/command-detector.js +72 -0
- package/dist/context/command-detector.js.map +1 -0
- package/dist/context/context-manager.d.ts +144 -0
- package/dist/context/context-manager.d.ts.map +1 -0
- package/dist/context/context-manager.js +487 -0
- package/dist/context/context-manager.js.map +1 -0
- package/dist/context/handlers/__tests__/docker-handler.test.d.ts +13 -0
- package/dist/context/handlers/__tests__/docker-handler.test.d.ts.map +1 -0
- package/dist/context/handlers/__tests__/docker-handler.test.js +285 -0
- package/dist/context/handlers/__tests__/docker-handler.test.js.map +1 -0
- package/dist/context/handlers/__tests__/ssh-handler.test.d.ts +13 -0
- package/dist/context/handlers/__tests__/ssh-handler.test.d.ts.map +1 -0
- package/dist/context/handlers/__tests__/ssh-handler.test.js +251 -0
- package/dist/context/handlers/__tests__/ssh-handler.test.js.map +1 -0
- package/dist/context/handlers/__tests__/wsl-handler.test.d.ts +7 -0
- package/dist/context/handlers/__tests__/wsl-handler.test.d.ts.map +1 -0
- package/dist/context/handlers/__tests__/wsl-handler.test.js +331 -0
- package/dist/context/handlers/__tests__/wsl-handler.test.js.map +1 -0
- package/dist/context/handlers/docker-handler.d.ts +111 -0
- package/dist/context/handlers/docker-handler.d.ts.map +1 -0
- package/dist/context/handlers/docker-handler.js +439 -0
- package/dist/context/handlers/docker-handler.js.map +1 -0
- package/dist/context/handlers/ssh-handler.d.ts +120 -0
- package/dist/context/handlers/ssh-handler.d.ts.map +1 -0
- package/dist/context/handlers/ssh-handler.js +523 -0
- package/dist/context/handlers/ssh-handler.js.map +1 -0
- package/dist/context/handlers/wsl-handler.d.ts +128 -0
- package/dist/context/handlers/wsl-handler.d.ts.map +1 -0
- package/dist/context/handlers/wsl-handler.js +590 -0
- package/dist/context/handlers/wsl-handler.js.map +1 -0
- package/dist/context/index.d.ts +8 -0
- package/dist/context/index.d.ts.map +1 -0
- package/dist/context/index.js +7 -0
- package/dist/context/index.js.map +1 -0
- package/dist/context/subshell-handler.d.ts +130 -0
- package/dist/context/subshell-handler.d.ts.map +1 -0
- package/dist/context/subshell-handler.js +5 -0
- package/dist/context/subshell-handler.js.map +1 -0
- package/dist/context/types.d.ts +70 -0
- package/dist/context/types.d.ts.map +1 -0
- package/dist/context/types.js +34 -0
- package/dist/context/types.js.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/services/__tests__/ai-context-injector.test.d.ts +15 -0
- package/dist/services/__tests__/ai-context-injector.test.d.ts.map +1 -0
- package/dist/services/__tests__/ai-context-injector.test.js +326 -0
- package/dist/services/__tests__/ai-context-injector.test.js.map +1 -0
- package/dist/services/ai-context-injector.d.ts +41 -0
- package/dist/services/ai-context-injector.d.ts.map +1 -0
- package/dist/services/ai-context-injector.js +97 -0
- package/dist/services/ai-context-injector.js.map +1 -0
- package/dist/services/ai-service-client.d.ts +4 -1
- package/dist/services/ai-service-client.d.ts.map +1 -1
- package/dist/services/ai-service-client.js +6 -2
- package/dist/services/ai-service-client.js.map +1 -1
- package/dist/services/api-client.js +1 -1
- package/dist/services/api-client.js.map +1 -1
- package/dist/src/context/types.js +27 -0
- package/dist/src/services/ai-context-injector.js +96 -0
- package/dist/src/services/ai-service-client.js +270 -0
- package/dist/src/services/api-client.js +349 -0
- package/dist/src/tools/types.js +1 -0
- package/dist/src/types/index.js +1 -0
- package/dist/test/context/types.js +27 -0
- package/dist/test/services/__tests__/ai-context-injector.test.js +325 -0
- package/dist/test/services/ai-context-injector.js +96 -0
- package/dist/test/services/ai-service-client.js +270 -0
- package/dist/test/services/api-client.js +349 -0
- package/dist/test/tools/types.js +1 -0
- package/dist/test/types/index.js +1 -0
- package/dist/test-ai-context-injector.js +97 -0
- package/dist/test-ssh-handler.d.ts +8 -0
- package/dist/test-ssh-handler.d.ts.map +1 -0
- package/dist/test-ssh-handler.js +198 -0
- package/dist/test-ssh-handler.js.map +1 -0
- package/dist/tools/command.d.ts.map +1 -1
- package/dist/tools/command.js +123 -46
- package/dist/tools/command.js.map +1 -1
- package/dist/tools/file-ops.d.ts.map +1 -1
- package/dist/tools/file-ops.js +115 -48
- package/dist/tools/file-ops.js.map +1 -1
- package/dist/tools/types.d.ts +1 -0
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/tools/web-search.js +2 -2
- package/dist/tools/web-search.js.map +1 -1
- package/dist/types/index.d.ts +41 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/ui/components/App.d.ts +3 -0
- package/dist/ui/components/App.d.ts.map +1 -1
- package/dist/ui/components/App.js +213 -46
- package/dist/ui/components/App.js.map +1 -1
- package/dist/ui/components/Breadcrumbs.d.ts +12 -0
- package/dist/ui/components/Breadcrumbs.d.ts.map +1 -0
- package/dist/ui/components/Breadcrumbs.js +62 -0
- package/dist/ui/components/Breadcrumbs.js.map +1 -0
- package/dist/ui/components/CodeBlock.js +1 -1
- package/dist/ui/components/CodeBlock.js.map +1 -1
- package/dist/ui/components/DiffViewer.js +1 -1
- package/dist/ui/components/DiffViewer.js.map +1 -1
- package/dist/ui/components/FileViewerScreen.d.ts +14 -0
- package/dist/ui/components/FileViewerScreen.d.ts.map +1 -0
- package/dist/ui/components/FileViewerScreen.js +74 -0
- package/dist/ui/components/FileViewerScreen.js.map +1 -0
- package/dist/ui/components/InputBox.d.ts +2 -0
- package/dist/ui/components/InputBox.d.ts.map +1 -1
- package/dist/ui/components/InputBox.js +85 -41
- package/dist/ui/components/InputBox.js.map +1 -1
- package/dist/ui/components/MessageDisplay.d.ts.map +1 -1
- package/dist/ui/components/MessageDisplay.js +3 -28
- package/dist/ui/components/MessageDisplay.js.map +1 -1
- package/dist/ui/components/PasswordPrompt.d.ts +9 -0
- package/dist/ui/components/PasswordPrompt.d.ts.map +1 -0
- package/dist/ui/components/PasswordPrompt.js +20 -0
- package/dist/ui/components/PasswordPrompt.js.map +1 -0
- package/dist/ui/components/StatusBar.d.ts +2 -0
- package/dist/ui/components/StatusBar.d.ts.map +1 -1
- package/dist/ui/components/StatusBar.js +36 -1
- package/dist/ui/components/StatusBar.js.map +1 -1
- package/dist/ui/components/ToolExecutionMessage.d.ts.map +1 -1
- package/dist/ui/components/ToolExecutionMessage.js +13 -24
- package/dist/ui/components/ToolExecutionMessage.js.map +1 -1
- package/dist/ui/components/VersionUpdatePrompt.d.ts +10 -0
- package/dist/ui/components/VersionUpdatePrompt.d.ts.map +1 -0
- package/dist/ui/components/VersionUpdatePrompt.js +41 -0
- package/dist/ui/components/VersionUpdatePrompt.js.map +1 -0
- package/dist/utils/shell.d.ts.map +1 -1
- package/dist/utils/shell.js +38 -10
- package/dist/utils/shell.js.map +1 -1
- package/dist/utils/version-checker.d.ts +14 -0
- package/dist/utils/version-checker.d.ts.map +1 -0
- package/dist/utils/version-checker.js +63 -0
- package/dist/utils/version-checker.js.map +1 -0
- package/package.json +71 -69
|
@@ -0,0 +1,331 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Integration tests for WSL Handler
|
|
3
|
+
*
|
|
4
|
+
* Note: These tests require Windows with WSL installed
|
|
5
|
+
*/
|
|
6
|
+
import { WSLHandler } from '../wsl-handler.js';
|
|
7
|
+
import * as os from 'os';
|
|
8
|
+
describe('WSL Handler', () => {
|
|
9
|
+
let handler;
|
|
10
|
+
const isWindows = os.platform() === 'win32';
|
|
11
|
+
beforeEach(() => {
|
|
12
|
+
handler = new WSLHandler();
|
|
13
|
+
});
|
|
14
|
+
afterEach(async () => {
|
|
15
|
+
if (handler) {
|
|
16
|
+
await handler.disconnect();
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
describe('Command Detection', () => {
|
|
20
|
+
it('should detect wsl command', () => {
|
|
21
|
+
expect(handler.detect('wsl')).toBe(true);
|
|
22
|
+
});
|
|
23
|
+
it('should detect wsl with arguments', () => {
|
|
24
|
+
expect(handler.detect('wsl -d Ubuntu')).toBe(true);
|
|
25
|
+
});
|
|
26
|
+
it('should detect wsl.exe command', () => {
|
|
27
|
+
expect(handler.detect('wsl.exe --distribution Debian')).toBe(true);
|
|
28
|
+
});
|
|
29
|
+
it('should not detect non-wsl commands', () => {
|
|
30
|
+
expect(handler.detect('ls -la')).toBe(false);
|
|
31
|
+
expect(handler.detect('ssh user@host')).toBe(false);
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
describe('Breadcrumb Generation', () => {
|
|
35
|
+
it('should return empty array when not connected', () => {
|
|
36
|
+
const breadcrumbs = handler.getBreadcrumbs();
|
|
37
|
+
expect(breadcrumbs).toEqual([]);
|
|
38
|
+
});
|
|
39
|
+
it('should return breadcrumbs after connection', async () => {
|
|
40
|
+
if (!isWindows) {
|
|
41
|
+
console.log('Skipping WSL test on non-Windows platform');
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
try {
|
|
45
|
+
await handler.connect('wsl', process.cwd());
|
|
46
|
+
const breadcrumbs = handler.getBreadcrumbs();
|
|
47
|
+
expect(breadcrumbs).toHaveLength(2);
|
|
48
|
+
expect(breadcrumbs[0]).toEqual({
|
|
49
|
+
label: 'wsl',
|
|
50
|
+
color: 'yellow',
|
|
51
|
+
});
|
|
52
|
+
expect(breadcrumbs[1].label).toBeTruthy();
|
|
53
|
+
expect(breadcrumbs[1].color).toBe('yellow');
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
console.log('WSL not available, skipping test:', error);
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
describe('Path Conversion', () => {
|
|
61
|
+
it('should convert Windows path to WSL path', () => {
|
|
62
|
+
const windowsPath = 'C:\\Users\\test\\file.txt';
|
|
63
|
+
const wslPath = WSLHandler.windowsToWSLPath(windowsPath);
|
|
64
|
+
expect(wslPath).toBe('/mnt/c/Users/test/file.txt');
|
|
65
|
+
});
|
|
66
|
+
it('should convert Windows path with forward slashes', () => {
|
|
67
|
+
const windowsPath = 'D:/Projects/app';
|
|
68
|
+
const wslPath = WSLHandler.windowsToWSLPath(windowsPath);
|
|
69
|
+
expect(wslPath).toBe('/mnt/d/Projects/app');
|
|
70
|
+
});
|
|
71
|
+
it('should handle Unix paths unchanged', () => {
|
|
72
|
+
const unixPath = '/home/user/file.txt';
|
|
73
|
+
const wslPath = WSLHandler.windowsToWSLPath(unixPath);
|
|
74
|
+
expect(wslPath).toBe('/home/user/file.txt');
|
|
75
|
+
});
|
|
76
|
+
it('should convert WSL path to Windows path', () => {
|
|
77
|
+
const wslPath = '/mnt/c/Users/test/file.txt';
|
|
78
|
+
const windowsPath = WSLHandler.wslToWindowsPath(wslPath);
|
|
79
|
+
expect(windowsPath).toBe('C:\\Users\\test\\file.txt');
|
|
80
|
+
});
|
|
81
|
+
it('should handle non-mnt WSL paths unchanged', () => {
|
|
82
|
+
const wslPath = '/home/user/file.txt';
|
|
83
|
+
const windowsPath = WSLHandler.wslToWindowsPath(wslPath);
|
|
84
|
+
expect(wslPath).toBe('/home/user/file.txt');
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
describe('WSL Connection (Windows only)', () => {
|
|
88
|
+
it('should throw error on non-Windows platforms', async () => {
|
|
89
|
+
if (isWindows) {
|
|
90
|
+
console.log('Skipping non-Windows test on Windows platform');
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
await expect(handler.connect('wsl', process.cwd())).rejects.toThrow('WSL is only available on Windows');
|
|
94
|
+
});
|
|
95
|
+
it('should connect to default WSL distribution', async () => {
|
|
96
|
+
if (!isWindows) {
|
|
97
|
+
console.log('Skipping WSL test on non-Windows platform');
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
try {
|
|
101
|
+
const context = await handler.connect('wsl', process.cwd());
|
|
102
|
+
expect(context.type).toBe('wsl');
|
|
103
|
+
expect(context.handler).toBe(handler);
|
|
104
|
+
expect(context.metadata.os).toBe('linux');
|
|
105
|
+
expect(context.metadata.distroName).toBeTruthy();
|
|
106
|
+
expect(context.metadata.workingDirectory).toBeTruthy();
|
|
107
|
+
expect(context.connectionState).toBe('connected');
|
|
108
|
+
expect(context.sessionId).toBeTruthy();
|
|
109
|
+
}
|
|
110
|
+
catch (error) {
|
|
111
|
+
console.log('WSL not available, skipping test:', error);
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
it('should connect to specific WSL distribution', async () => {
|
|
115
|
+
if (!isWindows) {
|
|
116
|
+
console.log('Skipping WSL test on non-Windows platform');
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
try {
|
|
120
|
+
const context = await handler.connect('wsl -d Ubuntu', process.cwd());
|
|
121
|
+
expect(context.type).toBe('wsl');
|
|
122
|
+
expect(context.metadata.distroName).toBe('Ubuntu');
|
|
123
|
+
}
|
|
124
|
+
catch (error) {
|
|
125
|
+
console.log('Ubuntu distribution not available, skipping test:', error);
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
});
|
|
129
|
+
describe('Command Execution (Windows only)', () => {
|
|
130
|
+
beforeEach(async () => {
|
|
131
|
+
if (!isWindows)
|
|
132
|
+
return;
|
|
133
|
+
try {
|
|
134
|
+
await handler.connect('wsl', process.cwd());
|
|
135
|
+
}
|
|
136
|
+
catch (error) {
|
|
137
|
+
console.log('WSL not available, skipping tests');
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
it('should execute simple command', async () => {
|
|
141
|
+
if (!isWindows) {
|
|
142
|
+
console.log('Skipping WSL test on non-Windows platform');
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
try {
|
|
146
|
+
const result = await handler.executeCommand('echo "Hello WSL"');
|
|
147
|
+
expect(result.exitCode).toBe(0);
|
|
148
|
+
expect(result.stdout).toContain('Hello WSL');
|
|
149
|
+
expect(result.stderr).toBe('');
|
|
150
|
+
}
|
|
151
|
+
catch (error) {
|
|
152
|
+
console.log('WSL not available, skipping test:', error);
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
it('should capture stderr', async () => {
|
|
156
|
+
if (!isWindows) {
|
|
157
|
+
console.log('Skipping WSL test on non-Windows platform');
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
try {
|
|
161
|
+
const result = await handler.executeCommand('ls /nonexistent 2>&1');
|
|
162
|
+
expect(result.exitCode).toBe(0); // Command wrapper succeeds
|
|
163
|
+
expect(result.stdout).toContain('cannot access');
|
|
164
|
+
}
|
|
165
|
+
catch (error) {
|
|
166
|
+
console.log('WSL not available, skipping test:', error);
|
|
167
|
+
}
|
|
168
|
+
});
|
|
169
|
+
it('should track working directory changes', async () => {
|
|
170
|
+
if (!isWindows) {
|
|
171
|
+
console.log('Skipping WSL test on non-Windows platform');
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
try {
|
|
175
|
+
await handler.executeCommand('cd /tmp');
|
|
176
|
+
const cwd = await handler.getCurrentWorkingDirectory();
|
|
177
|
+
expect(cwd).toBe('/tmp');
|
|
178
|
+
}
|
|
179
|
+
catch (error) {
|
|
180
|
+
console.log('WSL not available, skipping test:', error);
|
|
181
|
+
}
|
|
182
|
+
});
|
|
183
|
+
});
|
|
184
|
+
describe('File Operations (Windows only)', () => {
|
|
185
|
+
const testFile = '/tmp/centaurus-wsl-test.txt';
|
|
186
|
+
const testContent = 'Hello from Centaurus WSL Handler';
|
|
187
|
+
beforeEach(async () => {
|
|
188
|
+
if (!isWindows)
|
|
189
|
+
return;
|
|
190
|
+
try {
|
|
191
|
+
await handler.connect('wsl', process.cwd());
|
|
192
|
+
}
|
|
193
|
+
catch (error) {
|
|
194
|
+
console.log('WSL not available, skipping tests');
|
|
195
|
+
}
|
|
196
|
+
});
|
|
197
|
+
afterEach(async () => {
|
|
198
|
+
if (!isWindows)
|
|
199
|
+
return;
|
|
200
|
+
try {
|
|
201
|
+
// Clean up test file
|
|
202
|
+
await handler.executeCommand(`rm -f ${testFile}`);
|
|
203
|
+
}
|
|
204
|
+
catch (error) {
|
|
205
|
+
// Ignore cleanup errors
|
|
206
|
+
}
|
|
207
|
+
});
|
|
208
|
+
it('should write and read file', async () => {
|
|
209
|
+
if (!isWindows) {
|
|
210
|
+
console.log('Skipping WSL test on non-Windows platform');
|
|
211
|
+
return;
|
|
212
|
+
}
|
|
213
|
+
try {
|
|
214
|
+
await handler.writeFile(testFile, testContent);
|
|
215
|
+
const content = await handler.readFile(testFile);
|
|
216
|
+
expect(content.trim()).toBe(testContent);
|
|
217
|
+
}
|
|
218
|
+
catch (error) {
|
|
219
|
+
console.log('WSL not available, skipping test:', error);
|
|
220
|
+
}
|
|
221
|
+
});
|
|
222
|
+
it('should list directory contents', async () => {
|
|
223
|
+
if (!isWindows) {
|
|
224
|
+
console.log('Skipping WSL test on non-Windows platform');
|
|
225
|
+
return;
|
|
226
|
+
}
|
|
227
|
+
try {
|
|
228
|
+
const entries = await handler.listDirectory('/tmp');
|
|
229
|
+
expect(Array.isArray(entries)).toBe(true);
|
|
230
|
+
expect(entries.length).toBeGreaterThan(0);
|
|
231
|
+
entries.forEach(entry => {
|
|
232
|
+
expect(entry.name).toBeTruthy();
|
|
233
|
+
expect(['file', 'directory']).toContain(entry.type);
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
catch (error) {
|
|
237
|
+
console.log('WSL not available, skipping test:', error);
|
|
238
|
+
}
|
|
239
|
+
});
|
|
240
|
+
it('should search files', async () => {
|
|
241
|
+
if (!isWindows) {
|
|
242
|
+
console.log('Skipping WSL test on non-Windows platform');
|
|
243
|
+
return;
|
|
244
|
+
}
|
|
245
|
+
try {
|
|
246
|
+
// Create test file first
|
|
247
|
+
await handler.writeFile(testFile, testContent);
|
|
248
|
+
const results = await handler.searchFiles('Centaurus', '/tmp');
|
|
249
|
+
expect(Array.isArray(results)).toBe(true);
|
|
250
|
+
const matchingResult = results.find(r => r.file.includes('centaurus-wsl-test'));
|
|
251
|
+
if (matchingResult) {
|
|
252
|
+
expect(matchingResult.content).toContain('Centaurus');
|
|
253
|
+
expect(matchingResult.line).toBeGreaterThan(0);
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
catch (error) {
|
|
257
|
+
console.log('WSL not available, skipping test:', error);
|
|
258
|
+
}
|
|
259
|
+
});
|
|
260
|
+
});
|
|
261
|
+
describe('Metadata (Windows only)', () => {
|
|
262
|
+
beforeEach(async () => {
|
|
263
|
+
if (!isWindows)
|
|
264
|
+
return;
|
|
265
|
+
try {
|
|
266
|
+
await handler.connect('wsl', process.cwd());
|
|
267
|
+
}
|
|
268
|
+
catch (error) {
|
|
269
|
+
console.log('WSL not available, skipping tests');
|
|
270
|
+
}
|
|
271
|
+
});
|
|
272
|
+
it('should return linux as OS type', async () => {
|
|
273
|
+
if (!isWindows) {
|
|
274
|
+
console.log('Skipping WSL test on non-Windows platform');
|
|
275
|
+
return;
|
|
276
|
+
}
|
|
277
|
+
try {
|
|
278
|
+
const osType = await handler.getOSType();
|
|
279
|
+
expect(osType).toBe('linux');
|
|
280
|
+
}
|
|
281
|
+
catch (error) {
|
|
282
|
+
console.log('WSL not available, skipping test:', error);
|
|
283
|
+
}
|
|
284
|
+
});
|
|
285
|
+
it('should detect shell type', async () => {
|
|
286
|
+
if (!isWindows) {
|
|
287
|
+
console.log('Skipping WSL test on non-Windows platform');
|
|
288
|
+
return;
|
|
289
|
+
}
|
|
290
|
+
try {
|
|
291
|
+
const shellType = await handler.getShellType();
|
|
292
|
+
expect(['bash', 'zsh', 'fish']).toContain(shellType);
|
|
293
|
+
}
|
|
294
|
+
catch (error) {
|
|
295
|
+
console.log('WSL not available, skipping test:', error);
|
|
296
|
+
}
|
|
297
|
+
});
|
|
298
|
+
it('should get current working directory', async () => {
|
|
299
|
+
if (!isWindows) {
|
|
300
|
+
console.log('Skipping WSL test on non-Windows platform');
|
|
301
|
+
return;
|
|
302
|
+
}
|
|
303
|
+
try {
|
|
304
|
+
const cwd = await handler.getCurrentWorkingDirectory();
|
|
305
|
+
expect(cwd).toBeTruthy();
|
|
306
|
+
expect(cwd.startsWith('/')).toBe(true);
|
|
307
|
+
}
|
|
308
|
+
catch (error) {
|
|
309
|
+
console.log('WSL not available, skipping test:', error);
|
|
310
|
+
}
|
|
311
|
+
});
|
|
312
|
+
});
|
|
313
|
+
describe('Error Handling', () => {
|
|
314
|
+
it('should throw error when executing command without connection', async () => {
|
|
315
|
+
await expect(handler.executeCommand('ls')).rejects.toThrow('Not connected to WSL');
|
|
316
|
+
});
|
|
317
|
+
it('should throw error when reading file without connection', async () => {
|
|
318
|
+
await expect(handler.readFile('/tmp/test.txt')).rejects.toThrow('Not connected to WSL');
|
|
319
|
+
});
|
|
320
|
+
it('should throw error when writing file without connection', async () => {
|
|
321
|
+
await expect(handler.writeFile('/tmp/test.txt', 'content')).rejects.toThrow('Not connected to WSL');
|
|
322
|
+
});
|
|
323
|
+
it('should throw error when listing directory without connection', async () => {
|
|
324
|
+
await expect(handler.listDirectory('/tmp')).rejects.toThrow('Not connected to WSL');
|
|
325
|
+
});
|
|
326
|
+
it('should throw error when searching files without connection', async () => {
|
|
327
|
+
await expect(handler.searchFiles('pattern', '/tmp')).rejects.toThrow('Not connected to WSL');
|
|
328
|
+
});
|
|
329
|
+
});
|
|
330
|
+
});
|
|
331
|
+
//# sourceMappingURL=wsl-handler.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wsl-handler.test.js","sourceRoot":"","sources":["../../../../src/context/handlers/__tests__/wsl-handler.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Docker Handler for container execution
|
|
3
|
+
*/
|
|
4
|
+
import { SubshellHandler, BreadcrumbInfo, CommandResult, DirectoryEntry, SearchResult } from '../subshell-handler.js';
|
|
5
|
+
import { SubshellContext, OSType } from '../types.js';
|
|
6
|
+
/**
|
|
7
|
+
* Docker-specific configuration
|
|
8
|
+
*/
|
|
9
|
+
export interface DockerConfig {
|
|
10
|
+
/** Container ID or name */
|
|
11
|
+
containerId: string;
|
|
12
|
+
/** Container name (if available) */
|
|
13
|
+
containerName?: string;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Docker Handler implementation
|
|
17
|
+
*/
|
|
18
|
+
export declare class DockerHandler implements SubshellHandler {
|
|
19
|
+
readonly type = "docker";
|
|
20
|
+
readonly detectionPatterns: RegExp[];
|
|
21
|
+
private config;
|
|
22
|
+
private currentWorkingDirectory;
|
|
23
|
+
private shellType;
|
|
24
|
+
private osType;
|
|
25
|
+
private sessionId;
|
|
26
|
+
/**
|
|
27
|
+
* Detect if a command should trigger this handler
|
|
28
|
+
*/
|
|
29
|
+
detect(command: string): boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Connect to the Docker container
|
|
32
|
+
*/
|
|
33
|
+
connect(command: string, cwd: string): Promise<SubshellContext>;
|
|
34
|
+
/**
|
|
35
|
+
* Disconnect from the Docker container
|
|
36
|
+
*/
|
|
37
|
+
disconnect(): Promise<void>;
|
|
38
|
+
/**
|
|
39
|
+
* Execute a command in the Docker container
|
|
40
|
+
*/
|
|
41
|
+
executeCommand(command: string): Promise<CommandResult>;
|
|
42
|
+
/**
|
|
43
|
+
* Read a file from the Docker container filesystem
|
|
44
|
+
*/
|
|
45
|
+
readFile(path: string): Promise<string>;
|
|
46
|
+
/**
|
|
47
|
+
* Write a file to the Docker container filesystem
|
|
48
|
+
*/
|
|
49
|
+
writeFile(path: string, content: string): Promise<void>;
|
|
50
|
+
/**
|
|
51
|
+
* List directory contents in Docker container
|
|
52
|
+
*/
|
|
53
|
+
listDirectory(path: string): Promise<DirectoryEntry[]>;
|
|
54
|
+
/**
|
|
55
|
+
* Search for files matching a pattern in Docker container
|
|
56
|
+
*/
|
|
57
|
+
searchFiles(pattern: string, directory: string): Promise<SearchResult[]>;
|
|
58
|
+
/**
|
|
59
|
+
* Get the current working directory in the Docker container
|
|
60
|
+
*/
|
|
61
|
+
getCurrentWorkingDirectory(): Promise<string>;
|
|
62
|
+
/**
|
|
63
|
+
* Get the shell type
|
|
64
|
+
*/
|
|
65
|
+
getShellType(): Promise<string>;
|
|
66
|
+
/**
|
|
67
|
+
* Get the operating system type
|
|
68
|
+
*/
|
|
69
|
+
getOSType(): Promise<OSType>;
|
|
70
|
+
/**
|
|
71
|
+
* Get breadcrumb information for the UI
|
|
72
|
+
*/
|
|
73
|
+
getBreadcrumbs(): BreadcrumbInfo[];
|
|
74
|
+
/**
|
|
75
|
+
* Parse Docker exec command to extract container ID
|
|
76
|
+
*/
|
|
77
|
+
private parseDockerCommand;
|
|
78
|
+
/**
|
|
79
|
+
* Verify that the container exists and is running
|
|
80
|
+
*/
|
|
81
|
+
private verifyContainer;
|
|
82
|
+
/**
|
|
83
|
+
* Detect the shell type in the Docker container
|
|
84
|
+
*/
|
|
85
|
+
private detectShellType;
|
|
86
|
+
/**
|
|
87
|
+
* Detect the operating system type in the Docker container
|
|
88
|
+
*/
|
|
89
|
+
private detectOSType;
|
|
90
|
+
/**
|
|
91
|
+
* Build a Docker exec command with working directory context
|
|
92
|
+
*/
|
|
93
|
+
private buildDockerCommand;
|
|
94
|
+
/**
|
|
95
|
+
* Resolve a path to an absolute path
|
|
96
|
+
*/
|
|
97
|
+
private resolveAbsolutePath;
|
|
98
|
+
/**
|
|
99
|
+
* Parse directory listing output
|
|
100
|
+
*/
|
|
101
|
+
private parseDirectoryListing;
|
|
102
|
+
/**
|
|
103
|
+
* Parse search results from grep output
|
|
104
|
+
*/
|
|
105
|
+
private parseSearchResults;
|
|
106
|
+
/**
|
|
107
|
+
* Execute a promise with a timeout
|
|
108
|
+
*/
|
|
109
|
+
private executeWithTimeout;
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=docker-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docker-handler.d.ts","sourceRoot":"","sources":["../../../src/context/handlers/docker-handler.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,aAAa,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtH,OAAO,EAAE,eAAe,EAAmD,MAAM,EAAE,MAAM,aAAa,CAAC;AAKvG;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,2BAA2B;IAC3B,WAAW,EAAE,MAAM,CAAC;IAEpB,oCAAoC;IACpC,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,qBAAa,aAAc,YAAW,eAAe;IACnD,QAAQ,CAAC,IAAI,YAAY;IACzB,QAAQ,CAAC,iBAAiB,WAGxB;IAEF,OAAO,CAAC,MAAM,CAA6B;IAC3C,OAAO,CAAC,uBAAuB,CAAe;IAC9C,OAAO,CAAC,SAAS,CAAgB;IACjC,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,SAAS,CAAc;IAE/B;;OAEG;IACH,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIhC;;OAEG;IACG,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAsCrE;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAIjC;;OAEG;IACG,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAqC7D;;OAEG;IACG,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAkB7C;;OAEG;IACG,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA6C7D;;OAEG;IACG,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAgB5D;;OAEG;IACG,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAkB9E;;OAEG;IACG,0BAA0B,IAAI,OAAO,CAAC,MAAM,CAAC;IAenD;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;IAIrC;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;IAIlC;;OAEG;IACH,cAAc,IAAI,cAAc,EAAE;IAqBlC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAuC1B;;OAEG;YACW,eAAe;IA4B7B;;OAEG;YACW,eAAe;IAsB7B;;OAEG;YACW,YAAY;IAoB1B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAY1B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAY3B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA6B7B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAkB1B;;OAEG;YACW,kBAAkB;CAejC"}
|