@aws/lsp-codewhisperer 0.0.34 → 0.0.36
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/CHANGELOG.md +66 -0
- package/out/client/token/bearer-token-service.json +91 -225
- package/out/language-server/agenticChat/agenticChatController.js +82 -29
- package/out/language-server/agenticChat/agenticChatController.js.map +1 -1
- package/out/language-server/agenticChat/agenticChatResultStream.js +3 -0
- package/out/language-server/agenticChat/agenticChatResultStream.js.map +1 -1
- package/out/language-server/agenticChat/constants.d.ts +3 -0
- package/out/language-server/agenticChat/constants.js +4 -1
- package/out/language-server/agenticChat/constants.js.map +1 -1
- package/out/language-server/agenticChat/context/agenticChatTriggerContext.d.ts +3 -8
- package/out/language-server/agenticChat/context/agenticChatTriggerContext.js +9 -2
- package/out/language-server/agenticChat/context/agenticChatTriggerContext.js.map +1 -1
- package/out/language-server/agenticChat/context/contextUtils.d.ts +20 -0
- package/out/language-server/agenticChat/context/contextUtils.js +107 -0
- package/out/language-server/agenticChat/context/contextUtils.js.map +1 -1
- package/out/language-server/agenticChat/errors.d.ts +2 -1
- package/out/language-server/agenticChat/errors.js +4 -1
- package/out/language-server/agenticChat/errors.js.map +1 -1
- package/out/language-server/agenticChat/tabBarController.js +1 -1
- package/out/language-server/agenticChat/tabBarController.js.map +1 -1
- package/out/language-server/agenticChat/tools/chatDb/chatDb.js +3 -2
- package/out/language-server/agenticChat/tools/chatDb/chatDb.js.map +1 -1
- package/out/language-server/agenticChat/tools/fileSearch.js +1 -1
- package/out/language-server/agenticChat/tools/fileSearch.js.map +1 -1
- package/out/language-server/agenticChat/tools/listDirectory.js +5 -5
- package/out/language-server/agenticChat/tools/listDirectory.js.map +1 -1
- package/out/language-server/chat/chatController.js +1 -1
- package/out/language-server/chat/chatController.js.map +1 -1
- package/out/language-server/chat/chatSessionService.d.ts +5 -0
- package/out/language-server/chat/chatSessionService.js +4 -1
- package/out/language-server/chat/chatSessionService.js.map +1 -1
- package/out/language-server/chat/constants.d.ts +3 -1
- package/out/language-server/chat/constants.js +15 -2
- package/out/language-server/chat/constants.js.map +1 -1
- package/out/language-server/chat/contexts/triggerContext.d.ts +3 -1
- package/out/language-server/chat/contexts/triggerContext.js +14 -1
- package/out/language-server/chat/contexts/triggerContext.js.map +1 -1
- package/out/language-server/configuration/qConfigurationServer.d.ts +8 -1
- package/out/language-server/configuration/qConfigurationServer.js +107 -8
- package/out/language-server/configuration/qConfigurationServer.js.map +1 -1
- package/out/language-server/inline-completion/codeWhispererServer.js +15 -2
- package/out/language-server/inline-completion/codeWhispererServer.js.map +1 -1
- package/out/language-server/netTransform/resources/SupportedProjects.js +1 -7
- package/out/language-server/netTransform/resources/SupportedProjects.js.map +1 -1
- package/out/language-server/workspaceContext/artifactManager.d.ts +44 -0
- package/out/language-server/workspaceContext/artifactManager.js +496 -0
- package/out/language-server/workspaceContext/artifactManager.js.map +1 -0
- package/out/language-server/workspaceContext/client.d.ts +23 -0
- package/out/language-server/workspaceContext/client.js +172 -0
- package/out/language-server/workspaceContext/client.js.map +1 -0
- package/out/language-server/workspaceContext/dependency/dependencyDiscoverer.d.ts +15 -0
- package/out/language-server/workspaceContext/dependency/dependencyDiscoverer.js +129 -0
- package/out/language-server/workspaceContext/dependency/dependencyDiscoverer.js.map +1 -0
- package/out/language-server/workspaceContext/dependency/dependencyHandler/JSTSDependencyHandler.d.ts +18 -0
- package/out/language-server/workspaceContext/dependency/dependencyHandler/JSTSDependencyHandler.js +204 -0
- package/out/language-server/workspaceContext/dependency/dependencyHandler/JSTSDependencyHandler.js.map +1 -0
- package/out/language-server/workspaceContext/dependency/dependencyHandler/JavaDependencyHandler.d.ts +16 -0
- package/out/language-server/workspaceContext/dependency/dependencyHandler/JavaDependencyHandler.js +160 -0
- package/out/language-server/workspaceContext/dependency/dependencyHandler/JavaDependencyHandler.js.map +1 -0
- package/out/language-server/workspaceContext/dependency/dependencyHandler/LanguageDependencyHandler.d.ts +78 -0
- package/out/language-server/workspaceContext/dependency/dependencyHandler/LanguageDependencyHandler.js +255 -0
- package/out/language-server/workspaceContext/dependency/dependencyHandler/LanguageDependencyHandler.js.map +1 -0
- package/out/language-server/workspaceContext/dependency/dependencyHandler/LanguageDependencyHandlerFactory.d.ts +7 -0
- package/out/language-server/workspaceContext/dependency/dependencyHandler/LanguageDependencyHandlerFactory.js +23 -0
- package/out/language-server/workspaceContext/dependency/dependencyHandler/LanguageDependencyHandlerFactory.js.map +1 -0
- package/out/language-server/workspaceContext/dependency/dependencyHandler/PythonDependencyHandler.d.ts +46 -0
- package/out/language-server/workspaceContext/dependency/dependencyHandler/PythonDependencyHandler.js +233 -0
- package/out/language-server/workspaceContext/dependency/dependencyHandler/PythonDependencyHandler.js.map +1 -0
- package/out/language-server/workspaceContext/javaManager.d.ts +92 -0
- package/out/language-server/workspaceContext/javaManager.js +710 -0
- package/out/language-server/workspaceContext/javaManager.js.map +1 -0
- package/out/language-server/workspaceContext/util.d.ts +10 -0
- package/out/language-server/workspaceContext/util.js +72 -0
- package/out/language-server/workspaceContext/util.js.map +1 -0
- package/out/language-server/workspaceContext/workspaceContextServer.d.ts +2 -0
- package/out/language-server/workspaceContext/workspaceContextServer.js +414 -0
- package/out/language-server/workspaceContext/workspaceContextServer.js.map +1 -0
- package/out/language-server/workspaceContext/workspaceFolderManager.d.ts +113 -0
- package/out/language-server/workspaceContext/workspaceFolderManager.js +827 -0
- package/out/language-server/workspaceContext/workspaceFolderManager.js.map +1 -0
- package/out/shared/amazonQServiceManager/qDeveloperProfiles.js.map +1 -1
- package/out/shared/codeWhispererService.d.ts +13 -0
- package/out/shared/codeWhispererService.js +24 -0
- package/out/shared/codeWhispererService.js.map +1 -1
- package/out/shared/languageDetection.d.ts +27 -0
- package/out/shared/languageDetection.js +44 -1
- package/out/shared/languageDetection.js.map +1 -1
- package/out/shared/localProjectContextController.d.ts +1 -0
- package/out/shared/localProjectContextController.js +7 -9
- package/out/shared/localProjectContextController.js.map +1 -1
- package/out/shared/proxy-server.d.ts +1 -0
- package/out/shared/proxy-server.js +3 -1
- package/out/shared/proxy-server.js.map +1 -1
- package/out/shared/supplementalContextUtil/crossFileContextUtil.d.ts +4 -3
- package/out/shared/supplementalContextUtil/crossFileContextUtil.js +16 -5
- package/out/shared/supplementalContextUtil/crossFileContextUtil.js.map +1 -1
- package/out/shared/supplementalContextUtil/supplementalContextUtil.d.ts +2 -1
- package/out/shared/supplementalContextUtil/supplementalContextUtil.js +2 -2
- package/out/shared/supplementalContextUtil/supplementalContextUtil.js.map +1 -1
- package/out/shared/utils.d.ts +1 -0
- package/out/shared/utils.js +15 -1
- package/out/shared/utils.js.map +1 -1
- package/package.json +9 -3
|
@@ -0,0 +1,496 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ArtifactManager = exports.SUPPORTED_WORKSPACE_CONTEXT_LANGUAGES = void 0;
|
|
4
|
+
const fs = require("fs");
|
|
5
|
+
const path = require("path");
|
|
6
|
+
const vscode_uri_1 = require("vscode-uri");
|
|
7
|
+
const JSZip = require("jszip");
|
|
8
|
+
const javaManager_1 = require("./javaManager");
|
|
9
|
+
const util_1 = require("./util");
|
|
10
|
+
const glob = require("fast-glob");
|
|
11
|
+
const languageDetection_1 = require("../../shared/languageDetection");
|
|
12
|
+
exports.SUPPORTED_WORKSPACE_CONTEXT_LANGUAGES = [
|
|
13
|
+
'python',
|
|
14
|
+
'javascript',
|
|
15
|
+
'typescript',
|
|
16
|
+
'java',
|
|
17
|
+
];
|
|
18
|
+
const ARTIFACT_FOLDER_NAME = 'workspaceContextArtifacts';
|
|
19
|
+
const IGNORE_PATTERNS = [
|
|
20
|
+
// Package management and git
|
|
21
|
+
'**/node_modules/**',
|
|
22
|
+
'**/.git/**',
|
|
23
|
+
// Build outputs
|
|
24
|
+
'**/dist/**',
|
|
25
|
+
'**/build/**',
|
|
26
|
+
'**/out/**',
|
|
27
|
+
// Test directories
|
|
28
|
+
'**/test/**',
|
|
29
|
+
'**/tests/**',
|
|
30
|
+
'**/coverage/**',
|
|
31
|
+
// Hidden directories and files
|
|
32
|
+
'**/.*/**',
|
|
33
|
+
'**/.*',
|
|
34
|
+
// Logs and temporary files
|
|
35
|
+
'**/logs/**',
|
|
36
|
+
'**/tmp/**',
|
|
37
|
+
// Environment and configuration
|
|
38
|
+
'**/env/**',
|
|
39
|
+
'**/venv/**',
|
|
40
|
+
'**/bin/**',
|
|
41
|
+
// Framework specific
|
|
42
|
+
'**/target/**', // Maven/Gradle builds
|
|
43
|
+
];
|
|
44
|
+
const MAX_UNCOMPRESSED_SRC_SIZE_MB = 250; // 250 MB limit per language per workspace folder
|
|
45
|
+
const MAX_UNCOMPRESSED_SRC_SIZE_BYTES = MAX_UNCOMPRESSED_SRC_SIZE_MB * 1024 * 1024; // Convert to bytes
|
|
46
|
+
class ArtifactManager {
|
|
47
|
+
workspace;
|
|
48
|
+
logging;
|
|
49
|
+
workspaceFolders;
|
|
50
|
+
// TODO, how to handle when two workspace folders have the same name but different URI
|
|
51
|
+
filesByWorkspaceFolderAndLanguage;
|
|
52
|
+
tempDirPath;
|
|
53
|
+
constructor(workspace, logging, workspaceFolders) {
|
|
54
|
+
this.workspace = workspace;
|
|
55
|
+
this.logging = logging;
|
|
56
|
+
this.workspaceFolders = workspaceFolders;
|
|
57
|
+
this.filesByWorkspaceFolderAndLanguage = new Map();
|
|
58
|
+
this.tempDirPath = path.join(this.workspace.fs.getTempDirPath(), ARTIFACT_FOLDER_NAME);
|
|
59
|
+
this.createFolderIfNotExist(this.tempDirPath);
|
|
60
|
+
}
|
|
61
|
+
updateWorkspaceFolders(workspaceFolders) {
|
|
62
|
+
this.workspaceFolders = workspaceFolders;
|
|
63
|
+
}
|
|
64
|
+
async addWorkspaceFolders(workspaceFolders) {
|
|
65
|
+
this.log(`Adding new workspace folders: ${workspaceFolders.map(f => f.name).join(', ')}`);
|
|
66
|
+
this.workspaceFolders = [...this.workspaceFolders, ...workspaceFolders];
|
|
67
|
+
const zipFileMetadata = await this.processWorkspaceFolders(workspaceFolders);
|
|
68
|
+
return zipFileMetadata;
|
|
69
|
+
}
|
|
70
|
+
async addNewDirectories(newDirectories) {
|
|
71
|
+
let zipFileMetadata = [];
|
|
72
|
+
for (const directory of newDirectories) {
|
|
73
|
+
const workspaceFolder = this.workspaceFolders.find(ws => directory.path.startsWith(vscode_uri_1.URI.parse(ws.uri).path));
|
|
74
|
+
if (!workspaceFolder) {
|
|
75
|
+
// No workspace folder found for directory, it will not be processed
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
try {
|
|
79
|
+
const workspacePath = vscode_uri_1.URI.parse(workspaceFolder.uri).path;
|
|
80
|
+
const relativePath = path.relative(workspacePath, directory.path);
|
|
81
|
+
const filesByLanguage = await this.processDirectory(workspaceFolder, directory.path, relativePath);
|
|
82
|
+
zipFileMetadata = await this.processFilesByLanguage(workspaceFolder, filesByLanguage, relativePath);
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
this.logging.warn(`Error processing new directory ${directory.path}: ${error}`);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return zipFileMetadata;
|
|
89
|
+
}
|
|
90
|
+
async removeWorkspaceFolders(workspaceFolders) {
|
|
91
|
+
workspaceFolders.forEach(workspaceToRemove => {
|
|
92
|
+
// Find the matching workspace folder by URI
|
|
93
|
+
let folderToDelete;
|
|
94
|
+
for (const [existingFolder] of this.filesByWorkspaceFolderAndLanguage) {
|
|
95
|
+
if (existingFolder.uri === workspaceToRemove.uri) {
|
|
96
|
+
folderToDelete = existingFolder;
|
|
97
|
+
break;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
if (!folderToDelete) {
|
|
101
|
+
// No matching workspace found to remove, do nothing
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
this.filesByWorkspaceFolderAndLanguage.delete(folderToDelete);
|
|
105
|
+
this.workspaceFolders = this.workspaceFolders.filter(folder => folder.uri !== workspaceToRemove.uri);
|
|
106
|
+
const workspaceDirPath = path.join(this.tempDirPath, workspaceToRemove.name);
|
|
107
|
+
fs.rmSync(workspaceDirPath, { recursive: true, force: true });
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
async getFileMetadata(currentWorkspace, filePath, languageOverride, filePathInZipOverride) {
|
|
111
|
+
let fileMetadataList = [];
|
|
112
|
+
const language = languageOverride !== undefined ? languageOverride : (0, languageDetection_1.getCodeWhispererLanguageIdFromPath)(filePath);
|
|
113
|
+
if (!language || !exports.SUPPORTED_WORKSPACE_CONTEXT_LANGUAGES.includes(language)) {
|
|
114
|
+
return Promise.reject('unsupported language');
|
|
115
|
+
}
|
|
116
|
+
if ((0, util_1.isDirectory)(filePath)) {
|
|
117
|
+
const files = await glob(['**/*'], {
|
|
118
|
+
cwd: filePath,
|
|
119
|
+
dot: false,
|
|
120
|
+
ignore: IGNORE_PATTERNS,
|
|
121
|
+
followSymbolicLinks: false,
|
|
122
|
+
absolute: false,
|
|
123
|
+
onlyFiles: true,
|
|
124
|
+
});
|
|
125
|
+
for (const relativePath of files) {
|
|
126
|
+
const fullPath = path.join(filePath, relativePath);
|
|
127
|
+
try {
|
|
128
|
+
const fileMetadata = await this.createFileMetadata(fullPath, path.join(filePathInZipOverride !== undefined ? filePathInZipOverride : '', relativePath), language, currentWorkspace);
|
|
129
|
+
fileMetadataList.push(fileMetadata);
|
|
130
|
+
}
|
|
131
|
+
catch (error) {
|
|
132
|
+
this.logging.warn(`Error processing file ${fullPath}: ${error}`);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
const workspaceUri = vscode_uri_1.URI.parse(currentWorkspace.uri);
|
|
138
|
+
const fileUri = vscode_uri_1.URI.parse(filePath);
|
|
139
|
+
const relativePath = filePathInZipOverride !== undefined
|
|
140
|
+
? filePathInZipOverride
|
|
141
|
+
: path.join(currentWorkspace.name, path.relative(workspaceUri.path, fileUri.path));
|
|
142
|
+
const fileMetadata = await this.createFileMetadata(fileUri.path, relativePath, language, currentWorkspace);
|
|
143
|
+
fileMetadataList.push(fileMetadata);
|
|
144
|
+
}
|
|
145
|
+
return fileMetadataList;
|
|
146
|
+
}
|
|
147
|
+
async processNewFile(currentWorkspace, filePath) {
|
|
148
|
+
const workspaceUri = vscode_uri_1.URI.parse(currentWorkspace.uri);
|
|
149
|
+
const fileUri = vscode_uri_1.URI.parse(filePath);
|
|
150
|
+
// const relativePath = path.join(currentWorkspace.name, path.relative(workspaceUri.path, fileUri.path))
|
|
151
|
+
const language = (0, languageDetection_1.getCodeWhispererLanguageIdFromPath)(filePath);
|
|
152
|
+
if (!language || !exports.SUPPORTED_WORKSPACE_CONTEXT_LANGUAGES.includes(language)) {
|
|
153
|
+
return Promise.reject('unsupported language');
|
|
154
|
+
}
|
|
155
|
+
const fileMetadata = await this.createFileMetadata(fileUri.path, path.relative(workspaceUri.path, fileUri.path), language, currentWorkspace);
|
|
156
|
+
// Find existing workspace folder or use current one
|
|
157
|
+
const workspaceKey = this.findWorkspaceFolder(currentWorkspace) || currentWorkspace;
|
|
158
|
+
// Update the internal map with the new file metadata
|
|
159
|
+
if (!this.filesByWorkspaceFolderAndLanguage.has(workspaceKey)) {
|
|
160
|
+
this.filesByWorkspaceFolderAndLanguage.set(workspaceKey, new Map());
|
|
161
|
+
}
|
|
162
|
+
const workspaceMap = this.filesByWorkspaceFolderAndLanguage.get(workspaceKey);
|
|
163
|
+
if (!workspaceMap.has(language)) {
|
|
164
|
+
workspaceMap.set(language, []);
|
|
165
|
+
}
|
|
166
|
+
// Replace or add the file metadata
|
|
167
|
+
const files = workspaceMap.get(language);
|
|
168
|
+
const existingIndex = files.findIndex(f => f.filePath === fileMetadata.filePath);
|
|
169
|
+
if (existingIndex !== -1) {
|
|
170
|
+
files[existingIndex] = fileMetadata;
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
files.push(fileMetadata);
|
|
174
|
+
}
|
|
175
|
+
const zippedMetadata = await this.createZipForFile(currentWorkspace, language, [fileMetadata], path.relative(workspaceUri.path, fileUri.path));
|
|
176
|
+
return zippedMetadata;
|
|
177
|
+
}
|
|
178
|
+
handleDeletedPathAndGetLanguages(fileUri, workspaceRoot) {
|
|
179
|
+
const fileLanguage = (0, languageDetection_1.getCodeWhispererLanguageIdFromPath)(fileUri);
|
|
180
|
+
const programmingLanguages = new Set();
|
|
181
|
+
// Add the file language if we can determine it, but don't return early
|
|
182
|
+
if (fileLanguage) {
|
|
183
|
+
programmingLanguages.add(fileLanguage);
|
|
184
|
+
}
|
|
185
|
+
const languagesMap = this.getLanguagesForWorkspaceFolder(workspaceRoot);
|
|
186
|
+
if (!languagesMap) {
|
|
187
|
+
return Array.from(programmingLanguages);
|
|
188
|
+
}
|
|
189
|
+
const deletedFilePath = vscode_uri_1.URI.parse(fileUri).fsPath;
|
|
190
|
+
// Check and update the language maps
|
|
191
|
+
for (const [language, files] of languagesMap.entries()) {
|
|
192
|
+
const affectedFiles = files.filter(file => file.filePath.startsWith(deletedFilePath) || file.filePath === deletedFilePath);
|
|
193
|
+
if (affectedFiles.length > 0) {
|
|
194
|
+
programmingLanguages.add(language);
|
|
195
|
+
// Update the map by removing affected files
|
|
196
|
+
const remainingFiles = files.filter(file => !affectedFiles.includes(file));
|
|
197
|
+
if (remainingFiles.length === 0) {
|
|
198
|
+
languagesMap.delete(language);
|
|
199
|
+
}
|
|
200
|
+
else {
|
|
201
|
+
languagesMap.set(language, remainingFiles);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
return Array.from(programmingLanguages);
|
|
206
|
+
}
|
|
207
|
+
async handleRename(workspaceFolder, oldUri, newUri) {
|
|
208
|
+
// First remove the old entry
|
|
209
|
+
this.handleDeletedPathAndGetLanguages(oldUri, workspaceFolder);
|
|
210
|
+
// Then process the new path
|
|
211
|
+
let filesMetadata = [];
|
|
212
|
+
if ((0, util_1.isDirectory)(newUri)) {
|
|
213
|
+
if (!(0, util_1.isEmptyDirectory)(newUri)) {
|
|
214
|
+
filesMetadata = await this.addNewDirectories([vscode_uri_1.URI.parse(newUri)]);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
else {
|
|
218
|
+
filesMetadata = [await this.processNewFile(workspaceFolder, newUri)];
|
|
219
|
+
}
|
|
220
|
+
return filesMetadata;
|
|
221
|
+
}
|
|
222
|
+
cleanup(preserveDependencies = false) {
|
|
223
|
+
try {
|
|
224
|
+
this.workspaceFolders.forEach(workspaceToRemove => {
|
|
225
|
+
const workspaceDirPath = path.join(this.tempDirPath, workspaceToRemove.name);
|
|
226
|
+
if (preserveDependencies) {
|
|
227
|
+
// Define the zip files to delete
|
|
228
|
+
const zipPatternsToDelete = [
|
|
229
|
+
'files.zip',
|
|
230
|
+
...exports.SUPPORTED_WORKSPACE_CONTEXT_LANGUAGES.map(lang => `${lang}.zip`),
|
|
231
|
+
];
|
|
232
|
+
// If directory exists, only delete specific zip files
|
|
233
|
+
if (fs.existsSync(workspaceDirPath)) {
|
|
234
|
+
const entries = fs.readdirSync(workspaceDirPath);
|
|
235
|
+
entries.forEach(entry => {
|
|
236
|
+
const entryPath = path.join(workspaceDirPath, entry);
|
|
237
|
+
const stat = fs.statSync(entryPath);
|
|
238
|
+
if (stat.isFile() && zipPatternsToDelete.includes(entry.toLowerCase())) {
|
|
239
|
+
fs.rmSync(entryPath, { force: true });
|
|
240
|
+
this.log(`Deleted zip file: ${workspaceDirPath}/${entry}`);
|
|
241
|
+
}
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
else {
|
|
246
|
+
// Original cleanup behavior - delete everything
|
|
247
|
+
if (fs.existsSync(workspaceDirPath)) {
|
|
248
|
+
fs.rmSync(workspaceDirPath, { recursive: true, force: true });
|
|
249
|
+
this.log(`Deleted workspace directory: ${workspaceDirPath}`);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
});
|
|
253
|
+
}
|
|
254
|
+
catch (error) {
|
|
255
|
+
this.logging.warn(`Failed to cleanup workspace artifacts: ${error}`);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
getLanguagesForWorkspaceFolder(workspaceFolder) {
|
|
259
|
+
// Find the matching workspace folder by URI
|
|
260
|
+
for (const [existingFolder, languagesMap] of this.filesByWorkspaceFolderAndLanguage) {
|
|
261
|
+
if (existingFolder.uri === workspaceFolder.uri) {
|
|
262
|
+
return languagesMap;
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
return undefined;
|
|
266
|
+
}
|
|
267
|
+
async createZipForDependencies(workspaceFolder, language, files, subDirectory = '', zipChunkIndex) {
|
|
268
|
+
const zipDirectoryPath = path.join(this.tempDirPath, workspaceFolder.name, subDirectory);
|
|
269
|
+
this.createFolderIfNotExist(zipDirectoryPath);
|
|
270
|
+
const zipFileName = `${zipChunkIndex}_${Date.now()}.zip`;
|
|
271
|
+
const zipPath = path.join(zipDirectoryPath, zipFileName);
|
|
272
|
+
const zipBuffer = await this.createZipBuffer(files);
|
|
273
|
+
await fs.promises.writeFile(zipPath, zipBuffer);
|
|
274
|
+
const stats = fs.statSync(zipPath);
|
|
275
|
+
return {
|
|
276
|
+
filePath: zipPath,
|
|
277
|
+
relativePath: path.join(workspaceFolder.name, subDirectory, zipFileName),
|
|
278
|
+
language,
|
|
279
|
+
contentLength: stats.size,
|
|
280
|
+
lastModified: stats.mtimeMs,
|
|
281
|
+
content: zipBuffer,
|
|
282
|
+
workspaceFolder: workspaceFolder,
|
|
283
|
+
};
|
|
284
|
+
}
|
|
285
|
+
async processDirectory(workspaceFolder, directoryPath, baseRelativePath = '') {
|
|
286
|
+
const filesByLanguage = new Map();
|
|
287
|
+
const files = await glob(['**/*'], {
|
|
288
|
+
cwd: directoryPath,
|
|
289
|
+
dot: false,
|
|
290
|
+
ignore: IGNORE_PATTERNS,
|
|
291
|
+
followSymbolicLinks: false,
|
|
292
|
+
absolute: false,
|
|
293
|
+
onlyFiles: true,
|
|
294
|
+
});
|
|
295
|
+
for (const relativePath of files) {
|
|
296
|
+
const fullPath = path.join(directoryPath, relativePath);
|
|
297
|
+
const language = (0, languageDetection_1.getCodeWhispererLanguageIdFromPath)(fullPath);
|
|
298
|
+
if (!language || !exports.SUPPORTED_WORKSPACE_CONTEXT_LANGUAGES.includes(language)) {
|
|
299
|
+
continue;
|
|
300
|
+
}
|
|
301
|
+
try {
|
|
302
|
+
const fileMetadata = await this.createFileMetadata(fullPath, path.join(baseRelativePath, relativePath), language, workspaceFolder);
|
|
303
|
+
if (!filesByLanguage.has(language)) {
|
|
304
|
+
filesByLanguage.set(language, []);
|
|
305
|
+
}
|
|
306
|
+
filesByLanguage.get(language).push(fileMetadata);
|
|
307
|
+
}
|
|
308
|
+
catch (error) {
|
|
309
|
+
this.logging.warn(`Error processing file ${fullPath}: ${error}`);
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
return filesByLanguage;
|
|
313
|
+
}
|
|
314
|
+
// TODO, if MD5 hash is not needed, better to remove this function and remove content from FileMetadata interface to be memory efficient
|
|
315
|
+
// Doing the readfile call inside this function and storing the contents in the FileMetadata allows us to call readFile only once
|
|
316
|
+
// instead of calling it twice: once in md5 calculation and once during zip creation
|
|
317
|
+
async createFileMetadata(filePath, relativePath, language, workspaceFolder) {
|
|
318
|
+
const fileContent = fs.readFileSync(filePath);
|
|
319
|
+
return {
|
|
320
|
+
filePath,
|
|
321
|
+
contentLength: fileContent.length,
|
|
322
|
+
lastModified: fs.statSync(filePath).mtimeMs,
|
|
323
|
+
content: fileContent,
|
|
324
|
+
language,
|
|
325
|
+
relativePath,
|
|
326
|
+
workspaceFolder,
|
|
327
|
+
};
|
|
328
|
+
}
|
|
329
|
+
async createZipForLanguage(workspaceFolder, language, files, subDirectory = '') {
|
|
330
|
+
const zipDirectoryPath = path.join(this.tempDirPath, workspaceFolder.name, subDirectory);
|
|
331
|
+
this.createFolderIfNotExist(zipDirectoryPath);
|
|
332
|
+
const zipPath = path.join(zipDirectoryPath, `${language}.zip`);
|
|
333
|
+
let currentSize = 0;
|
|
334
|
+
let skippedSize = 0;
|
|
335
|
+
let skippedFiles = 0;
|
|
336
|
+
const filesToInclude = [];
|
|
337
|
+
// Don't add files to the zip if the total size of uncompressed source code would go over the limit
|
|
338
|
+
// Currently there is no ordering on the files. If the first file added to the zip is equal to the limit, only it will be added and no other files will be added
|
|
339
|
+
for (const file of files) {
|
|
340
|
+
if (currentSize + file.contentLength <= MAX_UNCOMPRESSED_SRC_SIZE_BYTES) {
|
|
341
|
+
filesToInclude.push(file);
|
|
342
|
+
currentSize += file.contentLength;
|
|
343
|
+
}
|
|
344
|
+
else {
|
|
345
|
+
skippedSize += file.contentLength;
|
|
346
|
+
skippedFiles += 1;
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
const zipBuffer = await this.createZipBuffer(filesToInclude);
|
|
350
|
+
await fs.promises.writeFile(zipPath, zipBuffer);
|
|
351
|
+
const stats = fs.statSync(zipPath);
|
|
352
|
+
if (skippedFiles > 0) {
|
|
353
|
+
this.log(`Skipped ${skippedFiles} ${language} files of total size ${skippedSize} bytes due to exceeding the maximum zip size`);
|
|
354
|
+
}
|
|
355
|
+
return {
|
|
356
|
+
filePath: zipPath,
|
|
357
|
+
relativePath: path.join(workspaceFolder.name, subDirectory, `files.zip`),
|
|
358
|
+
language,
|
|
359
|
+
contentLength: stats.size,
|
|
360
|
+
lastModified: stats.mtimeMs,
|
|
361
|
+
content: zipBuffer,
|
|
362
|
+
workspaceFolder: workspaceFolder,
|
|
363
|
+
};
|
|
364
|
+
}
|
|
365
|
+
async createZipForFile(workspaceFolder, language, files, subDirectory = '') {
|
|
366
|
+
const zipDirectoryPath = path.join(this.tempDirPath, workspaceFolder.name, subDirectory);
|
|
367
|
+
this.createFolderIfNotExist(zipDirectoryPath);
|
|
368
|
+
const zipPath = path.join(zipDirectoryPath, `files.zip`);
|
|
369
|
+
const zip = new JSZip();
|
|
370
|
+
for (const file of files) {
|
|
371
|
+
zip.file(path.basename(file.relativePath), file.content);
|
|
372
|
+
}
|
|
373
|
+
const zipBuffer = await zip.generateAsync({ type: 'nodebuffer' });
|
|
374
|
+
await fs.promises.writeFile(zipPath, zipBuffer);
|
|
375
|
+
const stats = fs.statSync(zipPath);
|
|
376
|
+
return {
|
|
377
|
+
filePath: zipPath,
|
|
378
|
+
relativePath: path.join(workspaceFolder.name, subDirectory, 'files.zip'),
|
|
379
|
+
language,
|
|
380
|
+
contentLength: stats.size,
|
|
381
|
+
lastModified: stats.mtimeMs,
|
|
382
|
+
content: zipBuffer,
|
|
383
|
+
workspaceFolder: workspaceFolder,
|
|
384
|
+
};
|
|
385
|
+
}
|
|
386
|
+
async createZipBuffer(files) {
|
|
387
|
+
const zip = new JSZip();
|
|
388
|
+
// Common compressed file extensions
|
|
389
|
+
const compressedExtensions = new Set(['.jar', '.zip', '.gz', '.bz2', '.7z', '.rar', '.war', '.ear', '.apk']);
|
|
390
|
+
for (const file of files) {
|
|
391
|
+
const fileExt = path.extname(file.relativePath).toLowerCase();
|
|
392
|
+
if (compressedExtensions.has(fileExt)) {
|
|
393
|
+
// Store already compressed files without additional compression
|
|
394
|
+
zip.file(file.relativePath, file.content, {
|
|
395
|
+
compression: 'STORE', // No compression, just store
|
|
396
|
+
});
|
|
397
|
+
}
|
|
398
|
+
else {
|
|
399
|
+
// Use default compression for other files
|
|
400
|
+
zip.file(file.relativePath, file.content, {
|
|
401
|
+
compression: 'DEFLATE',
|
|
402
|
+
compressionOptions: {
|
|
403
|
+
level: 9, // Maximum compression (0-9)
|
|
404
|
+
},
|
|
405
|
+
});
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
return await zip.generateAsync({ type: 'nodebuffer' });
|
|
409
|
+
}
|
|
410
|
+
findWorkspaceFolder(workspace) {
|
|
411
|
+
for (const [existingWorkspace] of this.filesByWorkspaceFolderAndLanguage) {
|
|
412
|
+
if (existingWorkspace.uri === workspace.uri) {
|
|
413
|
+
return existingWorkspace;
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
return undefined;
|
|
417
|
+
}
|
|
418
|
+
async updateWorkspaceFiles(workspaceFolder, filesByLanguage) {
|
|
419
|
+
// Find existing workspace folder or use current one
|
|
420
|
+
const workspaceKey = this.findWorkspaceFolder(workspaceFolder) || workspaceFolder;
|
|
421
|
+
// Initialize map for new workspace folders
|
|
422
|
+
if (!this.filesByWorkspaceFolderAndLanguage.has(workspaceKey)) {
|
|
423
|
+
this.filesByWorkspaceFolderAndLanguage.set(workspaceKey, new Map());
|
|
424
|
+
}
|
|
425
|
+
const workspaceMap = this.filesByWorkspaceFolderAndLanguage.get(workspaceKey);
|
|
426
|
+
for (const [language, files] of filesByLanguage.entries()) {
|
|
427
|
+
if (!workspaceMap.has(language)) {
|
|
428
|
+
workspaceMap.set(language, []);
|
|
429
|
+
}
|
|
430
|
+
workspaceMap.get(language).push(...files);
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
async processWorkspaceFolders(workspaceFolders) {
|
|
434
|
+
const startTime = performance.now();
|
|
435
|
+
let zipFileMetadata = [];
|
|
436
|
+
for (const workspaceFolder of workspaceFolders) {
|
|
437
|
+
const workspacePath = vscode_uri_1.URI.parse(workspaceFolder.uri).path;
|
|
438
|
+
try {
|
|
439
|
+
const filesByLanguage = await this.processDirectory(workspaceFolder, workspacePath);
|
|
440
|
+
const fileMetadata = await this.processFilesByLanguage(workspaceFolder, filesByLanguage);
|
|
441
|
+
zipFileMetadata.push(...fileMetadata);
|
|
442
|
+
}
|
|
443
|
+
catch (error) {
|
|
444
|
+
this.logging.warn(`Error processing workspace folder ${workspacePath}: ${error}`);
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
const totalTime = performance.now() - startTime;
|
|
448
|
+
this.log(`Creating workspace source code artifacts took: ${totalTime.toFixed(2)}ms`);
|
|
449
|
+
return zipFileMetadata;
|
|
450
|
+
}
|
|
451
|
+
async processFilesByLanguage(workspaceFolder, filesByLanguage, relativePath) {
|
|
452
|
+
const zipFileMetadata = [];
|
|
453
|
+
await this.updateWorkspaceFiles(workspaceFolder, filesByLanguage);
|
|
454
|
+
for (const [language, files] of filesByLanguage.entries()) {
|
|
455
|
+
// Genrate java .classpath and .project files
|
|
456
|
+
const processedFiles = language === 'java' ? await this.processJavaProjectConfig(workspaceFolder, files) : files;
|
|
457
|
+
const zipMetadata = await this.createZipForLanguage(workspaceFolder, language, processedFiles, relativePath);
|
|
458
|
+
this.log(`Created zip for language ${language} out of ${processedFiles.length} files in ${workspaceFolder.name}`);
|
|
459
|
+
zipFileMetadata.push(zipMetadata);
|
|
460
|
+
}
|
|
461
|
+
return zipFileMetadata;
|
|
462
|
+
}
|
|
463
|
+
createFolderIfNotExist(dir) {
|
|
464
|
+
if (!fs.existsSync(dir)) {
|
|
465
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
log(...messages) {
|
|
469
|
+
this.logging.log(messages.join(' '));
|
|
470
|
+
}
|
|
471
|
+
async processJavaProjectConfig(workspaceFolder, files) {
|
|
472
|
+
const workspacePath = vscode_uri_1.URI.parse(workspaceFolder.uri).path;
|
|
473
|
+
const hasJavaFiles = files.some(file => file.language === 'java');
|
|
474
|
+
if (!hasJavaFiles) {
|
|
475
|
+
return files;
|
|
476
|
+
}
|
|
477
|
+
const additionalFiles = [];
|
|
478
|
+
// Generate Eclipse configuration files
|
|
479
|
+
const javaManager = new javaManager_1.JavaProjectAnalyzer(workspacePath);
|
|
480
|
+
const structure = await javaManager.analyze();
|
|
481
|
+
const generator = new javaManager_1.EclipseConfigGenerator(workspaceFolder, this.logging);
|
|
482
|
+
// Generate and add .classpath file
|
|
483
|
+
const classpathFiles = await generator.generateDotClasspath(structure);
|
|
484
|
+
for (const classpathFile of classpathFiles) {
|
|
485
|
+
additionalFiles.push(classpathFile);
|
|
486
|
+
}
|
|
487
|
+
// Generate and add .project file
|
|
488
|
+
const projectFiles = await generator.generateDotProject(path.basename(workspacePath), structure);
|
|
489
|
+
for (const projectFile of projectFiles) {
|
|
490
|
+
additionalFiles.push(projectFile);
|
|
491
|
+
}
|
|
492
|
+
return [...files, ...additionalFiles];
|
|
493
|
+
}
|
|
494
|
+
}
|
|
495
|
+
exports.ArtifactManager = ArtifactManager;
|
|
496
|
+
//# sourceMappingURL=artifactManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artifactManager.js","sourceRoot":"","sources":["../../../src/language-server/workspaceContext/artifactManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { CredentialsProvider, Logging } from '@aws/language-server-runtimes/server-interface';
|
|
2
|
+
export type WebSocketReadyState = 'CONNECTING' | 'OPEN' | 'CLOSING' | 'CLOSED';
|
|
3
|
+
export declare class WebSocketClient {
|
|
4
|
+
private ws;
|
|
5
|
+
private logging;
|
|
6
|
+
private credentialsProvider;
|
|
7
|
+
private readonly url;
|
|
8
|
+
private reconnectAttempts;
|
|
9
|
+
private readonly maxReconnectAttempts;
|
|
10
|
+
private messageQueue;
|
|
11
|
+
private readonly messageThrottleDelay;
|
|
12
|
+
constructor(url: string, logging: Logging, credentialsProvider: CredentialsProvider);
|
|
13
|
+
private connect;
|
|
14
|
+
private attachEventListeners;
|
|
15
|
+
private handleDisconnect;
|
|
16
|
+
private flushMessageQueue;
|
|
17
|
+
private queueMessage;
|
|
18
|
+
isConnected(): boolean;
|
|
19
|
+
getWebsocketReadyState(): WebSocketReadyState;
|
|
20
|
+
send(message: string): Promise<void>;
|
|
21
|
+
disconnect(): void;
|
|
22
|
+
destroyClient(): void;
|
|
23
|
+
}
|