centaurus-cli 2.4.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.
Files changed (153) hide show
  1. package/README.md +151 -1
  2. package/dist/cli-adapter.d.ts +41 -2
  3. package/dist/cli-adapter.d.ts.map +1 -1
  4. package/dist/cli-adapter.js +407 -79
  5. package/dist/cli-adapter.js.map +1 -1
  6. package/dist/config/types.d.ts +23 -0
  7. package/dist/config/types.d.ts.map +1 -1
  8. package/dist/config/types.js +20 -0
  9. package/dist/config/types.js.map +1 -1
  10. package/dist/context/__tests__/command-detector.test.d.ts +14 -0
  11. package/dist/context/__tests__/command-detector.test.d.ts.map +1 -0
  12. package/dist/context/__tests__/command-detector.test.js +318 -0
  13. package/dist/context/__tests__/command-detector.test.js.map +1 -0
  14. package/dist/context/__tests__/context-manager.test.d.ts +16 -0
  15. package/dist/context/__tests__/context-manager.test.d.ts.map +1 -0
  16. package/dist/context/__tests__/context-manager.test.js +375 -0
  17. package/dist/context/__tests__/context-manager.test.js.map +1 -0
  18. package/dist/context/__tests__/error-handling.test.d.ts +15 -0
  19. package/dist/context/__tests__/error-handling.test.d.ts.map +1 -0
  20. package/dist/context/__tests__/error-handling.test.js +447 -0
  21. package/dist/context/__tests__/error-handling.test.js.map +1 -0
  22. package/dist/context/command-detector.d.ts +50 -0
  23. package/dist/context/command-detector.d.ts.map +1 -0
  24. package/dist/context/command-detector.js +72 -0
  25. package/dist/context/command-detector.js.map +1 -0
  26. package/dist/context/context-manager.d.ts +144 -0
  27. package/dist/context/context-manager.d.ts.map +1 -0
  28. package/dist/context/context-manager.js +487 -0
  29. package/dist/context/context-manager.js.map +1 -0
  30. package/dist/context/handlers/__tests__/docker-handler.test.d.ts +13 -0
  31. package/dist/context/handlers/__tests__/docker-handler.test.d.ts.map +1 -0
  32. package/dist/context/handlers/__tests__/docker-handler.test.js +285 -0
  33. package/dist/context/handlers/__tests__/docker-handler.test.js.map +1 -0
  34. package/dist/context/handlers/__tests__/ssh-handler.test.d.ts +13 -0
  35. package/dist/context/handlers/__tests__/ssh-handler.test.d.ts.map +1 -0
  36. package/dist/context/handlers/__tests__/ssh-handler.test.js +251 -0
  37. package/dist/context/handlers/__tests__/ssh-handler.test.js.map +1 -0
  38. package/dist/context/handlers/__tests__/wsl-handler.test.d.ts +7 -0
  39. package/dist/context/handlers/__tests__/wsl-handler.test.d.ts.map +1 -0
  40. package/dist/context/handlers/__tests__/wsl-handler.test.js +331 -0
  41. package/dist/context/handlers/__tests__/wsl-handler.test.js.map +1 -0
  42. package/dist/context/handlers/docker-handler.d.ts +111 -0
  43. package/dist/context/handlers/docker-handler.d.ts.map +1 -0
  44. package/dist/context/handlers/docker-handler.js +439 -0
  45. package/dist/context/handlers/docker-handler.js.map +1 -0
  46. package/dist/context/handlers/ssh-handler.d.ts +120 -0
  47. package/dist/context/handlers/ssh-handler.d.ts.map +1 -0
  48. package/dist/context/handlers/ssh-handler.js +523 -0
  49. package/dist/context/handlers/ssh-handler.js.map +1 -0
  50. package/dist/context/handlers/wsl-handler.d.ts +128 -0
  51. package/dist/context/handlers/wsl-handler.d.ts.map +1 -0
  52. package/dist/context/handlers/wsl-handler.js +590 -0
  53. package/dist/context/handlers/wsl-handler.js.map +1 -0
  54. package/dist/context/index.d.ts +8 -0
  55. package/dist/context/index.d.ts.map +1 -0
  56. package/dist/context/index.js +7 -0
  57. package/dist/context/index.js.map +1 -0
  58. package/dist/context/subshell-handler.d.ts +130 -0
  59. package/dist/context/subshell-handler.d.ts.map +1 -0
  60. package/dist/context/subshell-handler.js +5 -0
  61. package/dist/context/subshell-handler.js.map +1 -0
  62. package/dist/context/types.d.ts +70 -0
  63. package/dist/context/types.d.ts.map +1 -0
  64. package/dist/context/types.js +34 -0
  65. package/dist/context/types.js.map +1 -0
  66. package/dist/index.js +6 -0
  67. package/dist/index.js.map +1 -1
  68. package/dist/services/__tests__/ai-context-injector.test.d.ts +15 -0
  69. package/dist/services/__tests__/ai-context-injector.test.d.ts.map +1 -0
  70. package/dist/services/__tests__/ai-context-injector.test.js +326 -0
  71. package/dist/services/__tests__/ai-context-injector.test.js.map +1 -0
  72. package/dist/services/ai-context-injector.d.ts +41 -0
  73. package/dist/services/ai-context-injector.d.ts.map +1 -0
  74. package/dist/services/ai-context-injector.js +97 -0
  75. package/dist/services/ai-context-injector.js.map +1 -0
  76. package/dist/services/ai-service-client.d.ts +4 -1
  77. package/dist/services/ai-service-client.d.ts.map +1 -1
  78. package/dist/services/ai-service-client.js +5 -1
  79. package/dist/services/ai-service-client.js.map +1 -1
  80. package/dist/src/context/types.js +27 -0
  81. package/dist/src/services/ai-context-injector.js +96 -0
  82. package/dist/src/services/ai-service-client.js +270 -0
  83. package/dist/src/services/api-client.js +349 -0
  84. package/dist/src/tools/types.js +1 -0
  85. package/dist/src/types/index.js +1 -0
  86. package/dist/test/context/types.js +27 -0
  87. package/dist/test/services/__tests__/ai-context-injector.test.js +325 -0
  88. package/dist/test/services/ai-context-injector.js +96 -0
  89. package/dist/test/services/ai-service-client.js +270 -0
  90. package/dist/test/services/api-client.js +349 -0
  91. package/dist/test/tools/types.js +1 -0
  92. package/dist/test/types/index.js +1 -0
  93. package/dist/test-ai-context-injector.js +97 -0
  94. package/dist/test-ssh-handler.d.ts +8 -0
  95. package/dist/test-ssh-handler.d.ts.map +1 -0
  96. package/dist/test-ssh-handler.js +198 -0
  97. package/dist/test-ssh-handler.js.map +1 -0
  98. package/dist/tools/command.d.ts.map +1 -1
  99. package/dist/tools/command.js +123 -46
  100. package/dist/tools/command.js.map +1 -1
  101. package/dist/tools/file-ops.d.ts.map +1 -1
  102. package/dist/tools/file-ops.js +115 -48
  103. package/dist/tools/file-ops.js.map +1 -1
  104. package/dist/tools/types.d.ts +1 -0
  105. package/dist/tools/types.d.ts.map +1 -1
  106. package/dist/types/index.d.ts +41 -0
  107. package/dist/types/index.d.ts.map +1 -1
  108. package/dist/ui/components/App.d.ts +3 -0
  109. package/dist/ui/components/App.d.ts.map +1 -1
  110. package/dist/ui/components/App.js +213 -46
  111. package/dist/ui/components/App.js.map +1 -1
  112. package/dist/ui/components/Breadcrumbs.d.ts +12 -0
  113. package/dist/ui/components/Breadcrumbs.d.ts.map +1 -0
  114. package/dist/ui/components/Breadcrumbs.js +62 -0
  115. package/dist/ui/components/Breadcrumbs.js.map +1 -0
  116. package/dist/ui/components/CodeBlock.js +1 -1
  117. package/dist/ui/components/CodeBlock.js.map +1 -1
  118. package/dist/ui/components/DiffViewer.js +1 -1
  119. package/dist/ui/components/DiffViewer.js.map +1 -1
  120. package/dist/ui/components/FileViewerScreen.d.ts +14 -0
  121. package/dist/ui/components/FileViewerScreen.d.ts.map +1 -0
  122. package/dist/ui/components/FileViewerScreen.js +74 -0
  123. package/dist/ui/components/FileViewerScreen.js.map +1 -0
  124. package/dist/ui/components/InputBox.d.ts +2 -0
  125. package/dist/ui/components/InputBox.d.ts.map +1 -1
  126. package/dist/ui/components/InputBox.js +85 -41
  127. package/dist/ui/components/InputBox.js.map +1 -1
  128. package/dist/ui/components/MessageDisplay.d.ts.map +1 -1
  129. package/dist/ui/components/MessageDisplay.js +3 -28
  130. package/dist/ui/components/MessageDisplay.js.map +1 -1
  131. package/dist/ui/components/PasswordPrompt.d.ts +9 -0
  132. package/dist/ui/components/PasswordPrompt.d.ts.map +1 -0
  133. package/dist/ui/components/PasswordPrompt.js +20 -0
  134. package/dist/ui/components/PasswordPrompt.js.map +1 -0
  135. package/dist/ui/components/StatusBar.d.ts +2 -0
  136. package/dist/ui/components/StatusBar.d.ts.map +1 -1
  137. package/dist/ui/components/StatusBar.js +36 -1
  138. package/dist/ui/components/StatusBar.js.map +1 -1
  139. package/dist/ui/components/ToolExecutionMessage.d.ts.map +1 -1
  140. package/dist/ui/components/ToolExecutionMessage.js +13 -24
  141. package/dist/ui/components/ToolExecutionMessage.js.map +1 -1
  142. package/dist/ui/components/VersionUpdatePrompt.d.ts +10 -0
  143. package/dist/ui/components/VersionUpdatePrompt.d.ts.map +1 -0
  144. package/dist/ui/components/VersionUpdatePrompt.js +41 -0
  145. package/dist/ui/components/VersionUpdatePrompt.js.map +1 -0
  146. package/dist/utils/shell.d.ts.map +1 -1
  147. package/dist/utils/shell.js +38 -10
  148. package/dist/utils/shell.js.map +1 -1
  149. package/dist/utils/version-checker.d.ts +14 -0
  150. package/dist/utils/version-checker.d.ts.map +1 -0
  151. package/dist/utils/version-checker.js +63 -0
  152. package/dist/utils/version-checker.js.map +1 -0
  153. 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"}