@aws/lsp-codewhisperer 0.0.71 → 0.0.73
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 +37 -0
- package/out/language-server/agenticChat/agenticChatController.js +116 -71
- package/out/language-server/agenticChat/agenticChatController.js.map +1 -1
- package/out/language-server/agenticChat/agenticChatResultStream.d.ts +4 -27
- package/out/language-server/agenticChat/agenticChatResultStream.js +14 -31
- package/out/language-server/agenticChat/agenticChatResultStream.js.map +1 -1
- package/out/language-server/agenticChat/constants/modelSelection.js +1 -1
- package/out/language-server/agenticChat/constants/modelSelection.js.map +1 -1
- package/out/language-server/agenticChat/tools/chatDb/chatDb.d.ts +7 -1
- package/out/language-server/agenticChat/tools/chatDb/chatDb.js +64 -17
- package/out/language-server/agenticChat/tools/chatDb/chatDb.js.map +1 -1
- package/out/language-server/agenticChat/tools/chatDb/util.d.ts +3 -2
- package/out/language-server/agenticChat/tools/chatDb/util.js.map +1 -1
- package/out/language-server/agenticChat/tools/executeBash.d.ts +1 -0
- package/out/language-server/agenticChat/tools/executeBash.js +33 -0
- package/out/language-server/agenticChat/tools/executeBash.js.map +1 -1
- package/out/language-server/agenticChat/tools/fileSearch.d.ts +1 -0
- package/out/language-server/agenticChat/tools/fileSearch.js +4 -0
- package/out/language-server/agenticChat/tools/fileSearch.js.map +1 -1
- package/out/language-server/agenticChat/tools/mcp/mcpEventHandler.js +22 -18
- package/out/language-server/agenticChat/tools/mcp/mcpEventHandler.js.map +1 -1
- package/out/language-server/agenticChat/tools/mcp/mcpManager.d.ts +1 -0
- package/out/language-server/agenticChat/tools/mcp/mcpManager.js +68 -32
- package/out/language-server/agenticChat/tools/mcp/mcpManager.js.map +1 -1
- package/out/language-server/agenticChat/tools/mcp/mcpTypes.d.ts +1 -0
- package/out/language-server/agenticChat/tools/mcp/mcpTypes.js.map +1 -1
- package/out/language-server/agenticChat/tools/mcp/mcpUtils.d.ts +1 -1
- package/out/language-server/agenticChat/tools/mcp/mcpUtils.js +70 -7
- package/out/language-server/agenticChat/tools/mcp/mcpUtils.js.map +1 -1
- package/out/language-server/agenticChat/tools/qCodeAnalysis/displayFindingsConstants.js +1 -0
- package/out/language-server/agenticChat/tools/qCodeAnalysis/displayFindingsConstants.js.map +1 -1
- package/out/language-server/agenticChat/utils/agenticChatControllerHelper.js +1 -1
- package/out/language-server/agenticChat/utils/agenticChatControllerHelper.js.map +1 -1
- package/out/language-server/chat/chatSessionService.js +1 -1
- package/out/language-server/chat/chatSessionService.js.map +1 -1
- package/out/language-server/chat/telemetry/chatTelemetryController.d.ts +1 -0
- package/out/language-server/chat/telemetry/chatTelemetryController.js +11 -0
- package/out/language-server/chat/telemetry/chatTelemetryController.js.map +1 -1
- package/out/language-server/inline-completion/codeDiffTracker.d.ts +9 -0
- package/out/language-server/inline-completion/codeDiffTracker.js.map +1 -1
- package/out/language-server/inline-completion/codePercentage.d.ts +2 -0
- package/out/language-server/inline-completion/codePercentage.js +10 -2
- package/out/language-server/inline-completion/codePercentage.js.map +1 -1
- package/out/language-server/inline-completion/codeWhispererServer.d.ts +0 -3
- package/out/language-server/inline-completion/codeWhispererServer.js +91 -200
- package/out/language-server/inline-completion/codeWhispererServer.js.map +1 -1
- package/out/language-server/inline-completion/constants.d.ts +10 -0
- package/out/language-server/inline-completion/constants.js +35 -0
- package/out/language-server/inline-completion/constants.js.map +1 -0
- package/out/language-server/inline-completion/diffUtils.d.ts +15 -0
- package/out/language-server/inline-completion/diffUtils.js +53 -0
- package/out/language-server/inline-completion/diffUtils.js.map +1 -1
- package/out/language-server/inline-completion/documentChangedListener.d.ts +8 -0
- package/out/language-server/inline-completion/documentChangedListener.js +20 -0
- package/out/language-server/inline-completion/documentChangedListener.js.map +1 -0
- package/out/language-server/inline-completion/editCompletionHandler.d.ts +49 -0
- package/out/language-server/inline-completion/editCompletionHandler.js +328 -0
- package/out/language-server/inline-completion/editCompletionHandler.js.map +1 -0
- package/out/language-server/inline-completion/session/sessionManager.d.ts +9 -3
- package/out/language-server/inline-completion/session/sessionManager.js +31 -7
- package/out/language-server/inline-completion/session/sessionManager.js.map +1 -1
- package/out/language-server/inline-completion/telemetry.d.ts +3 -3
- package/out/language-server/inline-completion/telemetry.js +11 -5
- package/out/language-server/inline-completion/telemetry.js.map +1 -1
- package/out/language-server/inline-completion/trigger.d.ts +17 -0
- package/out/language-server/inline-completion/trigger.js +42 -0
- package/out/language-server/inline-completion/trigger.js.map +1 -0
- package/out/language-server/workspaceContext/IdleWorkspaceManager.d.ts +13 -0
- package/out/language-server/workspaceContext/IdleWorkspaceManager.js +39 -0
- package/out/language-server/workspaceContext/IdleWorkspaceManager.js.map +1 -0
- package/out/language-server/workspaceContext/artifactManager.js +14 -0
- package/out/language-server/workspaceContext/artifactManager.js.map +1 -1
- package/out/language-server/workspaceContext/dependency/dependencyDiscoverer.d.ts +1 -1
- package/out/language-server/workspaceContext/dependency/dependencyDiscoverer.js +2 -1
- package/out/language-server/workspaceContext/dependency/dependencyDiscoverer.js.map +1 -1
- package/out/language-server/workspaceContext/workspaceContextServer.js +2 -6
- package/out/language-server/workspaceContext/workspaceContextServer.js.map +1 -1
- package/out/language-server/workspaceContext/workspaceFolderManager.d.ts +8 -5
- package/out/language-server/workspaceContext/workspaceFolderManager.js +109 -82
- package/out/language-server/workspaceContext/workspaceFolderManager.js.map +1 -1
- package/out/shared/codeWhispererService.d.ts +36 -1
- package/out/shared/codeWhispererService.js +112 -9
- package/out/shared/codeWhispererService.js.map +1 -1
- package/out/shared/constants.d.ts +1 -0
- package/out/shared/constants.js +2 -1
- package/out/shared/constants.js.map +1 -1
- package/out/shared/supplementalContextUtil/crossFileContextUtil.d.ts +3 -4
- package/out/shared/supplementalContextUtil/crossFileContextUtil.js +5 -5
- package/out/shared/supplementalContextUtil/crossFileContextUtil.js.map +1 -1
- package/out/shared/supplementalContextUtil/supplementalContextUtil.d.ts +1 -2
- package/out/shared/supplementalContextUtil/supplementalContextUtil.js +2 -2
- package/out/shared/supplementalContextUtil/supplementalContextUtil.js.map +1 -1
- package/out/shared/telemetry/telemetryService.d.ts +2 -2
- package/out/shared/telemetry/telemetryService.js +8 -5
- package/out/shared/telemetry/telemetryService.js.map +1 -1
- package/out/shared/telemetry/types.d.ts +8 -0
- package/out/shared/telemetry/types.js +1 -0
- package/out/shared/telemetry/types.js.map +1 -1
- package/out/shared/utils.d.ts +1 -0
- package/out/shared/utils.js +10 -1
- package/out/shared/utils.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare const FILE_URI_CHARS_LIMIT = 1024;
|
|
2
|
+
export declare const FILENAME_CHARS_LIMIT = 1024;
|
|
3
|
+
export declare const CONTEXT_CHARACTERS_LIMIT = 10240;
|
|
4
|
+
export declare const EMPTY_RESULT: {
|
|
5
|
+
sessionId: string;
|
|
6
|
+
items: never[];
|
|
7
|
+
};
|
|
8
|
+
export declare const EDIT_DEBOUNCE_INTERVAL_MS = 500;
|
|
9
|
+
export declare const EDIT_STALE_RETRY_COUNT = 3;
|
|
10
|
+
export declare const ABAP_EXTENSIONS: Set<string>;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ABAP_EXTENSIONS = exports.EDIT_STALE_RETRY_COUNT = exports.EDIT_DEBOUNCE_INTERVAL_MS = exports.EMPTY_RESULT = exports.CONTEXT_CHARACTERS_LIMIT = exports.FILENAME_CHARS_LIMIT = exports.FILE_URI_CHARS_LIMIT = void 0;
|
|
4
|
+
exports.FILE_URI_CHARS_LIMIT = 1024;
|
|
5
|
+
exports.FILENAME_CHARS_LIMIT = 1024;
|
|
6
|
+
exports.CONTEXT_CHARACTERS_LIMIT = 10240;
|
|
7
|
+
exports.EMPTY_RESULT = { sessionId: '', items: [] };
|
|
8
|
+
exports.EDIT_DEBOUNCE_INTERVAL_MS = 500;
|
|
9
|
+
exports.EDIT_STALE_RETRY_COUNT = 3;
|
|
10
|
+
// ABAP ADT extensions commonly used with Eclipse
|
|
11
|
+
exports.ABAP_EXTENSIONS = new Set([
|
|
12
|
+
'asprog',
|
|
13
|
+
'aclass',
|
|
14
|
+
'asinc',
|
|
15
|
+
'aint',
|
|
16
|
+
'assrvds',
|
|
17
|
+
'asbdef',
|
|
18
|
+
'asddls',
|
|
19
|
+
'astablds',
|
|
20
|
+
'astabldt',
|
|
21
|
+
'amdp',
|
|
22
|
+
'apack',
|
|
23
|
+
'asrv',
|
|
24
|
+
'aobj',
|
|
25
|
+
'aexit',
|
|
26
|
+
'abdef',
|
|
27
|
+
'acinc',
|
|
28
|
+
'asfugr',
|
|
29
|
+
'apfugr',
|
|
30
|
+
'asfunc',
|
|
31
|
+
'asfinc',
|
|
32
|
+
'apfunc',
|
|
33
|
+
'apfinc',
|
|
34
|
+
]);
|
|
35
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/language-server/inline-completion/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,oBAAoB,GAAG,IAAI,CAAA;AAC3B,QAAA,oBAAoB,GAAG,IAAI,CAAA;AAC3B,QAAA,wBAAwB,GAAG,KAAK,CAAA;AAChC,QAAA,YAAY,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAA;AAC3C,QAAA,yBAAyB,GAAG,GAAG,CAAA;AAC/B,QAAA,sBAAsB,GAAG,CAAC,CAAA;AACvC,iDAAiD;AACpC,QAAA,eAAe,GAAG,IAAI,GAAG,CAAC;IACnC,QAAQ;IACR,QAAQ;IACR,OAAO;IACP,MAAM;IACN,SAAS;IACT,QAAQ;IACR,QAAQ;IACR,UAAU;IACV,UAAU;IACV,MAAM;IACN,OAAO;IACP,MAAM;IACN,MAAM;IACN,OAAO;IACP,OAAO;IACP,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;CACX,CAAC,CAAA"}
|
|
@@ -44,7 +44,22 @@ export declare function generateDiffContexts(filePath: string, currentContent: s
|
|
|
44
44
|
* @returns The modified code after applying the diff
|
|
45
45
|
*/
|
|
46
46
|
export declare function applyUnifiedDiff(docText: string, unifiedDiff: string): string;
|
|
47
|
+
export declare function getAddedAndDeletedLines(unifiedDiff: string): {
|
|
48
|
+
addedLines: string[];
|
|
49
|
+
deletedLines: string[];
|
|
50
|
+
};
|
|
47
51
|
export declare function getAddedAndDeletedChars(unifiedDiff: string): {
|
|
48
52
|
addedCharacters: string;
|
|
49
53
|
deletedCharacters: string;
|
|
50
54
|
};
|
|
55
|
+
/**
|
|
56
|
+
* Calculate character differences between added and deleted text blocks using LCS
|
|
57
|
+
*/
|
|
58
|
+
export interface CharDiffResult {
|
|
59
|
+
charactersAdded: number;
|
|
60
|
+
charactersRemoved: number;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Calculate character differences between added and deleted blocks
|
|
64
|
+
*/
|
|
65
|
+
export declare function getCharacterDifferences(addedLines: string[], deletedLines: string[]): CharDiffResult;
|
|
@@ -7,7 +7,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
7
7
|
exports.generateUnifiedDiffWithTimestamps = generateUnifiedDiffWithTimestamps;
|
|
8
8
|
exports.generateDiffContexts = generateDiffContexts;
|
|
9
9
|
exports.applyUnifiedDiff = applyUnifiedDiff;
|
|
10
|
+
exports.getAddedAndDeletedLines = getAddedAndDeletedLines;
|
|
10
11
|
exports.getAddedAndDeletedChars = getAddedAndDeletedChars;
|
|
12
|
+
exports.getCharacterDifferences = getCharacterDifferences;
|
|
11
13
|
const diff = require("diff");
|
|
12
14
|
const supplementalContextUtil_1 = require("../../shared/supplementalContextUtil/supplementalContextUtil");
|
|
13
15
|
/**
|
|
@@ -159,6 +161,17 @@ function applyUnifiedDiff(docText, unifiedDiff) {
|
|
|
159
161
|
return docText; // Return original text if all methods fail
|
|
160
162
|
}
|
|
161
163
|
}
|
|
164
|
+
function getAddedAndDeletedLines(unifiedDiff) {
|
|
165
|
+
const lines = unifiedDiff.split('\n');
|
|
166
|
+
const addedLines = lines.filter(line => line.startsWith('+') && !line.startsWith('+++')).map(line => line.slice(1));
|
|
167
|
+
const deletedLines = lines
|
|
168
|
+
.filter(line => line.startsWith('-') && !line.startsWith('---'))
|
|
169
|
+
.map(line => line.slice(1));
|
|
170
|
+
return {
|
|
171
|
+
addedLines,
|
|
172
|
+
deletedLines,
|
|
173
|
+
};
|
|
174
|
+
}
|
|
162
175
|
// src https://github.com/aws/aws-toolkit-vscode/blob/3921457b0a2094b831beea0d66cc2cbd2a833890/packages/amazonq/src/app/inline/EditRendering/diffUtils.ts#L147
|
|
163
176
|
function getAddedAndDeletedChars(unifiedDiff) {
|
|
164
177
|
let addedCharacters = '';
|
|
@@ -199,4 +212,44 @@ function getAddedAndDeletedChars(unifiedDiff) {
|
|
|
199
212
|
deletedCharacters,
|
|
200
213
|
};
|
|
201
214
|
}
|
|
215
|
+
/**
|
|
216
|
+
* Find longest common subsequence length between two strings
|
|
217
|
+
*/
|
|
218
|
+
function lcsLength(str1, str2) {
|
|
219
|
+
const m = str1.length;
|
|
220
|
+
const n = str2.length;
|
|
221
|
+
const dp = Array(m + 1)
|
|
222
|
+
.fill(null)
|
|
223
|
+
.map(() => Array(n + 1).fill(0));
|
|
224
|
+
for (let i = 1; i <= m; i++) {
|
|
225
|
+
for (let j = 1; j <= n; j++) {
|
|
226
|
+
if (str1[i - 1] === str2[j - 1]) {
|
|
227
|
+
dp[i][j] = dp[i - 1][j - 1] + 1;
|
|
228
|
+
}
|
|
229
|
+
else {
|
|
230
|
+
dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]);
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
return dp;
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Calculate character differences between added and deleted blocks
|
|
238
|
+
*/
|
|
239
|
+
function getCharacterDifferences(addedLines, deletedLines) {
|
|
240
|
+
const addedText = addedLines.join('\n');
|
|
241
|
+
const deletedText = deletedLines.join('\n');
|
|
242
|
+
if (addedText.length === 0) {
|
|
243
|
+
return { charactersAdded: 0, charactersRemoved: deletedText.length };
|
|
244
|
+
}
|
|
245
|
+
if (deletedText.length === 0) {
|
|
246
|
+
return { charactersAdded: addedText.length, charactersRemoved: 0 };
|
|
247
|
+
}
|
|
248
|
+
const lcsTable = lcsLength(deletedText, addedText);
|
|
249
|
+
const lcsLen = lcsTable[deletedText.length][addedText.length];
|
|
250
|
+
return {
|
|
251
|
+
charactersAdded: addedText.length - lcsLen,
|
|
252
|
+
charactersRemoved: deletedText.length - lcsLen,
|
|
253
|
+
};
|
|
254
|
+
}
|
|
202
255
|
//# sourceMappingURL=diffUtils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diffUtils.js","sourceRoot":"","sources":["../../../src/language-server/inline-completion/diffUtils.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAkBH,8EA2BC;AAuBD,oDA4DC;AAQD,4CA0EC;AAGD,0DAuCC;
|
|
1
|
+
{"version":3,"file":"diffUtils.js","sourceRoot":"","sources":["../../../src/language-server/inline-completion/diffUtils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { DidChangeTextDocumentParams } from '@aws/language-server-runtimes/protocol';
|
|
2
|
+
export declare class DocumentChangedListener {
|
|
3
|
+
private _lastUserModificationTime;
|
|
4
|
+
private _timeSinceLastUserModification;
|
|
5
|
+
get timeSinceLastUserModification(): number;
|
|
6
|
+
constructor();
|
|
7
|
+
onDocumentChanged(e: DidChangeTextDocumentParams): void;
|
|
8
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DocumentChangedListener = void 0;
|
|
4
|
+
class DocumentChangedListener {
|
|
5
|
+
_lastUserModificationTime = 0;
|
|
6
|
+
_timeSinceLastUserModification = 0;
|
|
7
|
+
get timeSinceLastUserModification() {
|
|
8
|
+
return this._timeSinceLastUserModification;
|
|
9
|
+
}
|
|
10
|
+
constructor() { }
|
|
11
|
+
onDocumentChanged(e) {
|
|
12
|
+
// Record last user modification time for any document
|
|
13
|
+
if (this._lastUserModificationTime) {
|
|
14
|
+
this._timeSinceLastUserModification = new Date().getTime() - this._lastUserModificationTime;
|
|
15
|
+
}
|
|
16
|
+
this._lastUserModificationTime = new Date().getTime();
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
exports.DocumentChangedListener = DocumentChangedListener;
|
|
20
|
+
//# sourceMappingURL=documentChangedListener.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"documentChangedListener.js","sourceRoot":"","sources":["../../../src/language-server/inline-completion/documentChangedListener.ts"],"names":[],"mappings":";;;AAEA,MAAa,uBAAuB;IACxB,yBAAyB,GAAW,CAAC,CAAA;IACrC,8BAA8B,GAAW,CAAC,CAAA;IAClD,IAAI,6BAA6B;QAC7B,OAAO,IAAI,CAAC,8BAA8B,CAAA;IAC9C,CAAC;IAED,gBAAe,CAAC;IAEhB,iBAAiB,CAAC,CAA8B;QAC5C,sDAAsD;QACtD,IAAI,IAAI,CAAC,yBAAyB,EAAE,CAAC;YACjC,IAAI,CAAC,8BAA8B,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,yBAAyB,CAAA;QAC/F,CAAC;QACD,IAAI,CAAC,yBAAyB,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAA;IACzD,CAAC;CACJ;AAhBD,0DAgBC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { CancellationToken, InitializeParams, InlineCompletionListWithReferences, InlineCompletionWithReferencesParams, Range, TextDocument } from '@aws/language-server-runtimes/protocol';
|
|
2
|
+
import { RecentEditTracker } from './tracker/codeEditTracker';
|
|
3
|
+
import { CredentialsProvider, Logging, Telemetry, Workspace } from '@aws/language-server-runtimes/server-interface';
|
|
4
|
+
import { GenerateSuggestionsResponse } from '../../shared/codeWhispererService';
|
|
5
|
+
import { CodeWhispererSession, SessionManager } from './session/sessionManager';
|
|
6
|
+
import { CursorTracker } from './tracker/cursorTracker';
|
|
7
|
+
import { CodewhispererLanguage } from '../../shared/languageDetection';
|
|
8
|
+
import { TelemetryService } from '../../shared/telemetry/telemetryService';
|
|
9
|
+
import { AmazonQBaseServiceManager } from '../../shared/amazonQServiceManager/BaseAmazonQServiceManager';
|
|
10
|
+
import { RejectedEditTracker } from './tracker/rejectedEditTracker';
|
|
11
|
+
import { DocumentChangedListener } from './documentChangedListener';
|
|
12
|
+
export declare class EditCompletionHandler {
|
|
13
|
+
readonly logging: Logging;
|
|
14
|
+
readonly clientMetadata: InitializeParams;
|
|
15
|
+
readonly workspace: Workspace;
|
|
16
|
+
readonly amazonQServiceManager: AmazonQBaseServiceManager;
|
|
17
|
+
readonly sessionManager: SessionManager;
|
|
18
|
+
readonly cursorTracker: CursorTracker;
|
|
19
|
+
readonly recentEditsTracker: RecentEditTracker;
|
|
20
|
+
readonly rejectedEditTracker: RejectedEditTracker;
|
|
21
|
+
readonly documentChangedListener: DocumentChangedListener;
|
|
22
|
+
readonly telemetry: Telemetry;
|
|
23
|
+
readonly telemetryService: TelemetryService;
|
|
24
|
+
readonly credentialsProvider: CredentialsProvider;
|
|
25
|
+
private readonly editsEnabled;
|
|
26
|
+
private debounceTimeout;
|
|
27
|
+
private isWaiting;
|
|
28
|
+
private hasDocumentChangedSinceInvocation;
|
|
29
|
+
constructor(logging: Logging, clientMetadata: InitializeParams, workspace: Workspace, amazonQServiceManager: AmazonQBaseServiceManager, sessionManager: SessionManager, cursorTracker: CursorTracker, recentEditsTracker: RecentEditTracker, rejectedEditTracker: RejectedEditTracker, documentChangedListener: DocumentChangedListener, telemetry: Telemetry, telemetryService: TelemetryService, credentialsProvider: CredentialsProvider);
|
|
30
|
+
get codeWhispererService(): import("../../shared/codeWhispererService").CodeWhispererServiceBase;
|
|
31
|
+
/**
|
|
32
|
+
* This is a workaround to refresh the debounce timer when user is typing quickly.
|
|
33
|
+
* Adding debounce at function call doesnt work because server won't process second request until first request is processed.
|
|
34
|
+
* Also as a followup, ideally it should be a message/event publish/subscribe pattern instead of manual invocation like this
|
|
35
|
+
*/
|
|
36
|
+
documentChanged(): void;
|
|
37
|
+
onEditCompletion(params: InlineCompletionWithReferencesParams, token: CancellationToken): Promise<InlineCompletionListWithReferences>;
|
|
38
|
+
_invoke(params: InlineCompletionWithReferencesParams, token: CancellationToken, textDocument: TextDocument, inferredLanguageId: CodewhispererLanguage, currentSession: CodeWhispererSession | undefined): Promise<InlineCompletionListWithReferences>;
|
|
39
|
+
processSuggestionResponse(suggestionResponse: GenerateSuggestionsResponse, session: CodeWhispererSession, isNewSession: boolean, selectionRange?: Range, textDocument?: TextDocument): Promise<{
|
|
40
|
+
items: {
|
|
41
|
+
insertText: string;
|
|
42
|
+
isInlineEdit: boolean;
|
|
43
|
+
itemId: string;
|
|
44
|
+
}[];
|
|
45
|
+
sessionId: string;
|
|
46
|
+
partialResultToken: string | undefined;
|
|
47
|
+
}>;
|
|
48
|
+
handleSuggestionsErrors(error: Error, session: CodeWhispererSession): InlineCompletionListWithReferences;
|
|
49
|
+
}
|
|
@@ -0,0 +1,328 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EditCompletionHandler = void 0;
|
|
4
|
+
const protocol_1 = require("@aws/language-server-runtimes/protocol");
|
|
5
|
+
const codeWhispererService_1 = require("../../shared/codeWhispererService");
|
|
6
|
+
const languageDetection_1 = require("../../shared/languageDetection");
|
|
7
|
+
const workspaceFolderManager_1 = require("../workspaceContext/workspaceFolderManager");
|
|
8
|
+
const trigger_1 = require("./trigger");
|
|
9
|
+
const telemetry_1 = require("./telemetry");
|
|
10
|
+
const lsp_core_1 = require("@aws/lsp-core");
|
|
11
|
+
const utils_1 = require("../../shared/utils");
|
|
12
|
+
const errors_1 = require("../../shared/amazonQServiceManager/errors");
|
|
13
|
+
const constants_1 = require("./constants");
|
|
14
|
+
class EditCompletionHandler {
|
|
15
|
+
logging;
|
|
16
|
+
clientMetadata;
|
|
17
|
+
workspace;
|
|
18
|
+
amazonQServiceManager;
|
|
19
|
+
sessionManager;
|
|
20
|
+
cursorTracker;
|
|
21
|
+
recentEditsTracker;
|
|
22
|
+
rejectedEditTracker;
|
|
23
|
+
documentChangedListener;
|
|
24
|
+
telemetry;
|
|
25
|
+
telemetryService;
|
|
26
|
+
credentialsProvider;
|
|
27
|
+
editsEnabled;
|
|
28
|
+
debounceTimeout;
|
|
29
|
+
isWaiting = false;
|
|
30
|
+
hasDocumentChangedSinceInvocation = false;
|
|
31
|
+
constructor(logging, clientMetadata, workspace, amazonQServiceManager, sessionManager, cursorTracker, recentEditsTracker, rejectedEditTracker, documentChangedListener, telemetry, telemetryService, credentialsProvider) {
|
|
32
|
+
this.logging = logging;
|
|
33
|
+
this.clientMetadata = clientMetadata;
|
|
34
|
+
this.workspace = workspace;
|
|
35
|
+
this.amazonQServiceManager = amazonQServiceManager;
|
|
36
|
+
this.sessionManager = sessionManager;
|
|
37
|
+
this.cursorTracker = cursorTracker;
|
|
38
|
+
this.recentEditsTracker = recentEditsTracker;
|
|
39
|
+
this.rejectedEditTracker = rejectedEditTracker;
|
|
40
|
+
this.documentChangedListener = documentChangedListener;
|
|
41
|
+
this.telemetry = telemetry;
|
|
42
|
+
this.telemetryService = telemetryService;
|
|
43
|
+
this.credentialsProvider = credentialsProvider;
|
|
44
|
+
this.editsEnabled =
|
|
45
|
+
this.clientMetadata.initializationOptions?.aws?.awsClientCapabilities?.textDocument
|
|
46
|
+
?.inlineCompletionWithReferences?.inlineEditSupport ?? false;
|
|
47
|
+
}
|
|
48
|
+
get codeWhispererService() {
|
|
49
|
+
return this.amazonQServiceManager.getCodewhispererService();
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* This is a workaround to refresh the debounce timer when user is typing quickly.
|
|
53
|
+
* Adding debounce at function call doesnt work because server won't process second request until first request is processed.
|
|
54
|
+
* Also as a followup, ideally it should be a message/event publish/subscribe pattern instead of manual invocation like this
|
|
55
|
+
*/
|
|
56
|
+
documentChanged() {
|
|
57
|
+
if (this.debounceTimeout) {
|
|
58
|
+
this.logging.info('[NEP] refresh timeout');
|
|
59
|
+
this.debounceTimeout.refresh();
|
|
60
|
+
}
|
|
61
|
+
if (this.isWaiting) {
|
|
62
|
+
this.hasDocumentChangedSinceInvocation = true;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
async onEditCompletion(params, token) {
|
|
66
|
+
this.hasDocumentChangedSinceInvocation = false;
|
|
67
|
+
this.debounceTimeout = undefined;
|
|
68
|
+
// On every new completion request close current inflight session.
|
|
69
|
+
const currentSession = this.sessionManager.getCurrentSession();
|
|
70
|
+
if (currentSession && currentSession.state == 'REQUESTING' && !params.partialResultToken) {
|
|
71
|
+
// this REQUESTING state only happens when the session is initialized, which is rare
|
|
72
|
+
currentSession.discardInflightSessionOnNewInvocation = true;
|
|
73
|
+
}
|
|
74
|
+
if (this.cursorTracker) {
|
|
75
|
+
this.cursorTracker.trackPosition(params.textDocument.uri, params.position);
|
|
76
|
+
}
|
|
77
|
+
const textDocument = await this.workspace.getTextDocument(params.textDocument.uri);
|
|
78
|
+
if (!textDocument) {
|
|
79
|
+
this.logging.warn(`textDocument [${params.textDocument.uri}] not found`);
|
|
80
|
+
return constants_1.EMPTY_RESULT;
|
|
81
|
+
}
|
|
82
|
+
if (!(this.codeWhispererService instanceof codeWhispererService_1.CodeWhispererServiceToken)) {
|
|
83
|
+
return constants_1.EMPTY_RESULT;
|
|
84
|
+
}
|
|
85
|
+
// request for new session
|
|
86
|
+
const inferredLanguageId = (0, languageDetection_1.getSupportedLanguageId)(textDocument);
|
|
87
|
+
if (!inferredLanguageId) {
|
|
88
|
+
this.logging.log(`textDocument [${params.textDocument.uri}] with languageId [${textDocument.languageId}] not supported`);
|
|
89
|
+
return constants_1.EMPTY_RESULT;
|
|
90
|
+
}
|
|
91
|
+
if (params.partialResultToken && currentSession) {
|
|
92
|
+
// Close ACTIVE session. We shouldn't record Discard trigger decision for trigger with nextToken.
|
|
93
|
+
if (currentSession && currentSession.state === 'ACTIVE') {
|
|
94
|
+
this.sessionManager.discardSession(currentSession);
|
|
95
|
+
}
|
|
96
|
+
const newSession = this.sessionManager.createSession({
|
|
97
|
+
document: textDocument,
|
|
98
|
+
startPosition: params.position,
|
|
99
|
+
triggerType: 'AutoTrigger',
|
|
100
|
+
language: currentSession.language,
|
|
101
|
+
requestContext: currentSession.requestContext,
|
|
102
|
+
autoTriggerType: undefined,
|
|
103
|
+
triggerCharacter: '',
|
|
104
|
+
classifierResult: undefined,
|
|
105
|
+
classifierThreshold: undefined,
|
|
106
|
+
credentialStartUrl: currentSession.credentialStartUrl,
|
|
107
|
+
supplementalMetadata: currentSession.supplementalMetadata,
|
|
108
|
+
customizationArn: currentSession.customizationArn,
|
|
109
|
+
});
|
|
110
|
+
// subsequent paginated requests for current session
|
|
111
|
+
try {
|
|
112
|
+
const suggestionResponse = await this.codeWhispererService.generateSuggestions({
|
|
113
|
+
...newSession.requestContext,
|
|
114
|
+
nextToken: `${params.partialResultToken}`,
|
|
115
|
+
});
|
|
116
|
+
return await this.processSuggestionResponse(suggestionResponse, newSession, true, params.context.selectedCompletionInfo?.range);
|
|
117
|
+
}
|
|
118
|
+
catch (error) {
|
|
119
|
+
return this.handleSuggestionsErrors(error, currentSession);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
// TODO: telemetry, discarded suggestions
|
|
123
|
+
// The other easy way to do this is simply not return any suggestion (which is used when retry > 3)
|
|
124
|
+
const invokeWithRetry = async (attempt = 0) => {
|
|
125
|
+
return new Promise(async (resolve) => {
|
|
126
|
+
this.debounceTimeout = setTimeout(async () => {
|
|
127
|
+
try {
|
|
128
|
+
this.isWaiting = true;
|
|
129
|
+
const result = await this._invoke(params, token, textDocument, inferredLanguageId, currentSession).finally(() => {
|
|
130
|
+
this.isWaiting = false;
|
|
131
|
+
});
|
|
132
|
+
if (this.hasDocumentChangedSinceInvocation) {
|
|
133
|
+
if (attempt < constants_1.EDIT_STALE_RETRY_COUNT) {
|
|
134
|
+
this.logging.info(`EditCompletionHandler - Document changed during execution, retrying (attempt ${attempt + 1})`);
|
|
135
|
+
this.hasDocumentChangedSinceInvocation = false;
|
|
136
|
+
const retryResult = await invokeWithRetry(attempt + 1);
|
|
137
|
+
resolve(retryResult);
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
this.logging.info('EditCompletionHandler - Max retries reached, returning empty result');
|
|
141
|
+
resolve(constants_1.EMPTY_RESULT);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
this.logging.info('EditCompletionHandler - No document changes, resolving result');
|
|
146
|
+
resolve(result);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
finally {
|
|
150
|
+
this.debounceTimeout = undefined;
|
|
151
|
+
}
|
|
152
|
+
}, constants_1.EDIT_DEBOUNCE_INTERVAL_MS);
|
|
153
|
+
});
|
|
154
|
+
};
|
|
155
|
+
return invokeWithRetry();
|
|
156
|
+
}
|
|
157
|
+
async _invoke(params, token, textDocument, inferredLanguageId, currentSession) {
|
|
158
|
+
// Build request context
|
|
159
|
+
const isAutomaticLspTriggerKind = params.context.triggerKind == protocol_1.InlineCompletionTriggerKind.Automatic;
|
|
160
|
+
const maxResults = isAutomaticLspTriggerKind ? 1 : 5;
|
|
161
|
+
const fileContext = (0, codeWhispererService_1.getFileContext)({
|
|
162
|
+
textDocument,
|
|
163
|
+
inferredLanguageId,
|
|
164
|
+
position: params.position,
|
|
165
|
+
workspaceFolder: this.workspace.getWorkspaceFolder(textDocument.uri),
|
|
166
|
+
});
|
|
167
|
+
const workspaceState = workspaceFolderManager_1.WorkspaceFolderManager.getInstance()?.getWorkspaceState();
|
|
168
|
+
const workspaceId = workspaceState?.webSocketClient?.isConnected() ? workspaceState.workspaceId : undefined;
|
|
169
|
+
const qEditsTrigger = (0, trigger_1.shouldTriggerEdits)(this.codeWhispererService, fileContext, params, this.cursorTracker, this.recentEditsTracker, this.sessionManager, true);
|
|
170
|
+
if (!qEditsTrigger) {
|
|
171
|
+
return constants_1.EMPTY_RESULT;
|
|
172
|
+
}
|
|
173
|
+
const generateCompletionReq = {
|
|
174
|
+
fileContext: fileContext,
|
|
175
|
+
maxResults: maxResults,
|
|
176
|
+
predictionTypes: ['EDITS'],
|
|
177
|
+
workspaceId: workspaceId,
|
|
178
|
+
};
|
|
179
|
+
if (qEditsTrigger) {
|
|
180
|
+
generateCompletionReq.editorState = {
|
|
181
|
+
document: {
|
|
182
|
+
relativeFilePath: textDocument.uri,
|
|
183
|
+
programmingLanguage: {
|
|
184
|
+
languageName: generateCompletionReq.fileContext.programmingLanguage.languageName,
|
|
185
|
+
},
|
|
186
|
+
text: textDocument.getText(),
|
|
187
|
+
},
|
|
188
|
+
cursorState: {
|
|
189
|
+
position: {
|
|
190
|
+
line: params.position.line,
|
|
191
|
+
character: params.position.character,
|
|
192
|
+
},
|
|
193
|
+
},
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
const supplementalContext = await this.codeWhispererService.constructSupplementalContext(textDocument, params.position, this.workspace, this.recentEditsTracker, this.logging, token, params.openTabFilepaths, {
|
|
197
|
+
includeRecentEdits: true,
|
|
198
|
+
});
|
|
199
|
+
if (supplementalContext) {
|
|
200
|
+
generateCompletionReq.supplementalContexts = supplementalContext.items;
|
|
201
|
+
}
|
|
202
|
+
// Close ACTIVE session and record Discard trigger decision immediately
|
|
203
|
+
if (currentSession && currentSession.state === 'ACTIVE') {
|
|
204
|
+
// Emit user trigger decision at session close time for active session
|
|
205
|
+
this.sessionManager.discardSession(currentSession);
|
|
206
|
+
const streakLength = this.editsEnabled ? this.sessionManager.getAndUpdateStreakLength(false) : 0;
|
|
207
|
+
await (0, telemetry_1.emitUserTriggerDecisionTelemetry)(this.telemetry, this.telemetryService, currentSession, this.documentChangedListener.timeSinceLastUserModification, 0, 0, [], [], streakLength);
|
|
208
|
+
}
|
|
209
|
+
const newSession = this.sessionManager.createSession({
|
|
210
|
+
document: textDocument,
|
|
211
|
+
startPosition: params.position,
|
|
212
|
+
triggerType: isAutomaticLspTriggerKind ? 'AutoTrigger' : 'OnDemand',
|
|
213
|
+
language: fileContext.programmingLanguage.languageName,
|
|
214
|
+
requestContext: generateCompletionReq,
|
|
215
|
+
autoTriggerType: undefined,
|
|
216
|
+
triggerCharacter: '',
|
|
217
|
+
classifierResult: undefined,
|
|
218
|
+
classifierThreshold: undefined,
|
|
219
|
+
credentialStartUrl: this.credentialsProvider.getConnectionMetadata?.()?.sso?.startUrl ?? undefined,
|
|
220
|
+
supplementalMetadata: supplementalContext?.supContextData,
|
|
221
|
+
customizationArn: lsp_core_1.textUtils.undefinedIfEmpty(this.codeWhispererService.customizationArn),
|
|
222
|
+
});
|
|
223
|
+
try {
|
|
224
|
+
const suggestionResponse = await this.codeWhispererService.generateSuggestions(generateCompletionReq);
|
|
225
|
+
return await this.processSuggestionResponse(suggestionResponse, newSession, true, params.context.selectedCompletionInfo?.range);
|
|
226
|
+
}
|
|
227
|
+
catch (error) {
|
|
228
|
+
return this.handleSuggestionsErrors(error, newSession);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
async processSuggestionResponse(suggestionResponse, session, isNewSession, selectionRange, textDocument) {
|
|
232
|
+
// TODO: we haven't decided how to do these telemetry for Edits suggestions
|
|
233
|
+
// codePercentageTracker.countInvocation(session.language)
|
|
234
|
+
// userWrittenCodeTracker?.recordUsageCount(session.language)
|
|
235
|
+
if (isNewSession) {
|
|
236
|
+
// Populate the session with information from codewhisperer response
|
|
237
|
+
session.suggestions = suggestionResponse.suggestions;
|
|
238
|
+
session.responseContext = suggestionResponse.responseContext;
|
|
239
|
+
session.codewhispererSessionId = suggestionResponse.responseContext.codewhispererSessionId;
|
|
240
|
+
session.timeToFirstRecommendation = new Date().getTime() - session.startTime;
|
|
241
|
+
session.suggestionType = suggestionResponse.suggestionType;
|
|
242
|
+
}
|
|
243
|
+
else {
|
|
244
|
+
session.suggestions = [...session.suggestions, ...suggestionResponse.suggestions];
|
|
245
|
+
}
|
|
246
|
+
// Emit service invocation telemetry for every request sent to backend
|
|
247
|
+
(0, telemetry_1.emitServiceInvocationTelemetry)(this.telemetry, session, suggestionResponse.responseContext.requestId);
|
|
248
|
+
// Discard previous inflight API response due to new trigger
|
|
249
|
+
if (session.discardInflightSessionOnNewInvocation) {
|
|
250
|
+
session.discardInflightSessionOnNewInvocation = false;
|
|
251
|
+
this.sessionManager.discardSession(session);
|
|
252
|
+
const streakLength = this.editsEnabled ? this.sessionManager.getAndUpdateStreakLength(false) : 0;
|
|
253
|
+
await (0, telemetry_1.emitUserTriggerDecisionTelemetry)(this.telemetry, this.telemetryService, session, this.documentChangedListener.timeSinceLastUserModification, 0, 0, [], [], streakLength);
|
|
254
|
+
}
|
|
255
|
+
// API response was recieved, we can activate session now
|
|
256
|
+
this.sessionManager.activateSession(session);
|
|
257
|
+
// Process suggestions to apply Empty or Filter filters
|
|
258
|
+
const filteredSuggestions = suggestionResponse.suggestions
|
|
259
|
+
// Empty suggestion filter
|
|
260
|
+
.filter(suggestion => {
|
|
261
|
+
if (suggestion.content === '') {
|
|
262
|
+
session.setSuggestionState(suggestion.itemId, 'Empty');
|
|
263
|
+
return false;
|
|
264
|
+
}
|
|
265
|
+
return true;
|
|
266
|
+
})
|
|
267
|
+
// References setting filter
|
|
268
|
+
.filter(suggestion => {
|
|
269
|
+
// State to track whether code with references should be included in
|
|
270
|
+
// the response. No locking or concurrency controls, filtering is done
|
|
271
|
+
// right before returning and is only guaranteed to be consistent within
|
|
272
|
+
// the context of a single response.
|
|
273
|
+
const { includeSuggestionsWithCodeReferences } = this.amazonQServiceManager.getConfiguration();
|
|
274
|
+
if (includeSuggestionsWithCodeReferences) {
|
|
275
|
+
return true;
|
|
276
|
+
}
|
|
277
|
+
if (suggestion.references == null || suggestion.references.length === 0) {
|
|
278
|
+
return true;
|
|
279
|
+
}
|
|
280
|
+
// Filter out suggestions that have references when includeSuggestionsWithCodeReferences setting is true
|
|
281
|
+
session.setSuggestionState(suggestion.itemId, 'Filter');
|
|
282
|
+
return false;
|
|
283
|
+
});
|
|
284
|
+
return {
|
|
285
|
+
items: suggestionResponse.suggestions
|
|
286
|
+
.map(suggestion => {
|
|
287
|
+
// Check if this suggestion is similar to a previously rejected edit
|
|
288
|
+
const isSimilarToRejected = this.rejectedEditTracker.isSimilarToRejected(suggestion.content, textDocument?.uri || '');
|
|
289
|
+
if (isSimilarToRejected) {
|
|
290
|
+
// Mark as rejected in the session
|
|
291
|
+
session.setSuggestionState(suggestion.itemId, 'Reject');
|
|
292
|
+
this.logging.debug(`[EDIT_PREDICTION] Filtered out suggestion similar to previously rejected edit`);
|
|
293
|
+
// Return empty item that will be filtered out
|
|
294
|
+
return {
|
|
295
|
+
insertText: '',
|
|
296
|
+
isInlineEdit: true,
|
|
297
|
+
itemId: suggestion.itemId,
|
|
298
|
+
};
|
|
299
|
+
}
|
|
300
|
+
return {
|
|
301
|
+
insertText: suggestion.content,
|
|
302
|
+
isInlineEdit: true,
|
|
303
|
+
itemId: suggestion.itemId,
|
|
304
|
+
};
|
|
305
|
+
})
|
|
306
|
+
.filter(item => item.insertText !== ''),
|
|
307
|
+
sessionId: session.id,
|
|
308
|
+
partialResultToken: suggestionResponse.responseContext.nextToken,
|
|
309
|
+
};
|
|
310
|
+
}
|
|
311
|
+
handleSuggestionsErrors(error, session) {
|
|
312
|
+
this.logging.log('Recommendation failure: ' + error);
|
|
313
|
+
(0, telemetry_1.emitServiceInvocationFailure)(this.telemetry, session, error);
|
|
314
|
+
this.sessionManager.closeSession(session);
|
|
315
|
+
let translatedError = error;
|
|
316
|
+
if ((0, utils_1.hasConnectionExpired)(error)) {
|
|
317
|
+
translatedError = new errors_1.AmazonQServiceConnectionExpiredError((0, utils_1.getErrorMessage)(error));
|
|
318
|
+
}
|
|
319
|
+
if (translatedError instanceof errors_1.AmazonQError) {
|
|
320
|
+
throw new protocol_1.ResponseError(protocol_1.LSPErrorCodes.RequestFailed, translatedError.message || 'Error processing suggestion requests', {
|
|
321
|
+
awsErrorCode: translatedError.code,
|
|
322
|
+
});
|
|
323
|
+
}
|
|
324
|
+
return constants_1.EMPTY_RESULT;
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
exports.EditCompletionHandler = EditCompletionHandler;
|
|
328
|
+
//# sourceMappingURL=editCompletionHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"editCompletionHandler.js","sourceRoot":"","sources":["../../../src/language-server/inline-completion/editCompletionHandler.ts"],"names":[],"mappings":"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"}
|