@aws/lsp-codewhisperer 0.0.83 → 0.0.84
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 +17 -0
- package/out/language-server/agenticChat/agenticChatController.js +62 -9
- package/out/language-server/agenticChat/agenticChatController.js.map +1 -1
- package/out/language-server/agenticChat/agenticChatResultStream.d.ts +1 -0
- package/out/language-server/agenticChat/agenticChatResultStream.js +21 -0
- package/out/language-server/agenticChat/agenticChatResultStream.js.map +1 -1
- package/out/language-server/agenticChat/constants/constants.d.ts +23 -0
- package/out/language-server/agenticChat/constants/constants.js +32 -1
- package/out/language-server/agenticChat/constants/constants.js.map +1 -1
- package/out/language-server/agenticChat/constants/modelSelection.d.ts +2 -2
- package/out/language-server/agenticChat/constants/modelSelection.js +6 -5
- package/out/language-server/agenticChat/constants/modelSelection.js.map +1 -1
- package/out/language-server/agenticChat/context/agenticChatTriggerContext.d.ts +2 -1
- package/out/language-server/agenticChat/context/agenticChatTriggerContext.js +3 -1
- package/out/language-server/agenticChat/context/agenticChatTriggerContext.js.map +1 -1
- package/out/language-server/agenticChat/retry/delayInterceptor.d.ts +33 -0
- package/out/language-server/agenticChat/retry/delayInterceptor.js +79 -0
- package/out/language-server/agenticChat/retry/delayInterceptor.js.map +1 -0
- package/out/language-server/agenticChat/retry/errorTransformer.d.ts +15 -0
- package/out/language-server/agenticChat/retry/errorTransformer.js +152 -0
- package/out/language-server/agenticChat/retry/errorTransformer.js.map +1 -0
- package/out/language-server/agenticChat/retry/index.d.ts +3 -0
- package/out/language-server/agenticChat/retry/index.js +11 -0
- package/out/language-server/agenticChat/retry/index.js.map +1 -0
- package/out/language-server/agenticChat/retry/qRetryStrategy.d.ts +20 -0
- package/out/language-server/agenticChat/retry/qRetryStrategy.js +71 -0
- package/out/language-server/agenticChat/retry/qRetryStrategy.js.map +1 -0
- package/out/language-server/agenticChat/retry/retryClassifier.d.ts +32 -0
- package/out/language-server/agenticChat/retry/retryClassifier.js +122 -0
- package/out/language-server/agenticChat/retry/retryClassifier.js.map +1 -0
- package/out/language-server/agenticChat/tabBarController.d.ts +4 -0
- package/out/language-server/agenticChat/tabBarController.js +19 -2
- package/out/language-server/agenticChat/tabBarController.js.map +1 -1
- package/out/language-server/chat/chatController.js.map +1 -1
- package/out/language-server/chat/chatSessionService.d.ts +7 -0
- package/out/language-server/chat/chatSessionService.js +37 -80
- package/out/language-server/chat/chatSessionService.js.map +1 -1
- package/out/language-server/chat/constants.d.ts +1 -0
- package/out/language-server/chat/constants.js +2 -1
- package/out/language-server/chat/constants.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/codeWhispererServer.d.ts +0 -1
- package/out/language-server/inline-completion/codeWhispererServer.js +14 -478
- package/out/language-server/inline-completion/codeWhispererServer.js.map +1 -1
- package/out/language-server/inline-completion/{editCompletionHandler.d.ts → handler/editCompletionHandler.d.ts} +10 -10
- package/out/language-server/inline-completion/{editCompletionHandler.js → handler/editCompletionHandler.js} +17 -14
- package/out/language-server/inline-completion/handler/editCompletionHandler.js.map +1 -0
- package/out/language-server/inline-completion/handler/inlineCompletionHandler.d.ts +32 -0
- package/out/language-server/inline-completion/handler/inlineCompletionHandler.js +377 -0
- package/out/language-server/inline-completion/handler/inlineCompletionHandler.js.map +1 -0
- package/out/language-server/inline-completion/handler/sessionResultsHandler.d.ts +23 -0
- package/out/language-server/inline-completion/handler/sessionResultsHandler.js +119 -0
- package/out/language-server/inline-completion/handler/sessionResultsHandler.js.map +1 -0
- package/out/language-server/inline-completion/telemetry/telemetry.js.map +1 -1
- package/out/language-server/inline-completion/utils/diffUtils.d.ts +28 -11
- package/out/language-server/inline-completion/utils/diffUtils.js +269 -117
- package/out/language-server/inline-completion/utils/diffUtils.js.map +1 -1
- package/out/language-server/inline-completion/utils/mergeRightUtils.d.ts +1 -9
- package/out/language-server/inline-completion/utils/mergeRightUtils.js +5 -33
- package/out/language-server/inline-completion/utils/mergeRightUtils.js.map +1 -1
- package/out/language-server/inline-completion/utils/textDocumentUtils.d.ts +3 -0
- package/out/language-server/inline-completion/utils/textDocumentUtils.js +37 -0
- package/out/language-server/inline-completion/utils/textDocumentUtils.js.map +1 -0
- package/out/language-server/inline-completion/{trigger.d.ts → utils/triggerUtils.d.ts} +4 -4
- package/out/language-server/inline-completion/{trigger.js → utils/triggerUtils.js} +3 -3
- package/out/language-server/inline-completion/utils/triggerUtils.js.map +1 -0
- package/out/language-server/workspaceContext/workspaceFolderManager.js +3 -1
- package/out/language-server/workspaceContext/workspaceFolderManager.js.map +1 -1
- package/out/shared/codeWhispererService.js +19 -18
- package/out/shared/codeWhispererService.js.map +1 -1
- package/out/shared/streamingClientService.d.ts +6 -1
- package/out/shared/streamingClientService.js +33 -12
- package/out/shared/streamingClientService.js.map +1 -1
- 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 +9 -3
- package/out/shared/utils.js +15 -10
- package/out/shared/utils.js.map +1 -1
- package/package.json +2 -2
- package/out/language-server/inline-completion/editCompletionHandler.js.map +0 -1
- package/out/language-server/inline-completion/trigger.js.map +0 -1
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { CancellationToken, InitializeParams, InlineCompletionListWithReferences, InlineCompletionWithReferencesParams, Range, TextDocument } from '@aws/language-server-runtimes/protocol';
|
|
2
|
-
import { RecentEditTracker } from '
|
|
2
|
+
import { RecentEditTracker } from '../tracker/codeEditTracker';
|
|
3
3
|
import { CredentialsProvider, Logging, Telemetry, Workspace } from '@aws/language-server-runtimes/server-interface';
|
|
4
|
-
import { GenerateSuggestionsResponse } from '
|
|
5
|
-
import { CodeWhispererSession, SessionManager } from '
|
|
6
|
-
import { CursorTracker } from '
|
|
7
|
-
import { CodewhispererLanguage } from '
|
|
8
|
-
import { TelemetryService } from '
|
|
9
|
-
import { AmazonQBaseServiceManager } from '
|
|
10
|
-
import { RejectedEditTracker } from '
|
|
11
|
-
import { DocumentChangedListener } from '
|
|
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
12
|
export declare class EditCompletionHandler {
|
|
13
13
|
readonly logging: Logging;
|
|
14
14
|
readonly clientMetadata: InitializeParams;
|
|
@@ -29,7 +29,7 @@ export declare class EditCompletionHandler {
|
|
|
29
29
|
private readonly streakTracker;
|
|
30
30
|
private isInProgress;
|
|
31
31
|
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);
|
|
32
|
-
get codeWhispererService(): import("
|
|
32
|
+
get codeWhispererService(): import("../../../shared/codeWhispererService").CodeWhispererServiceBase;
|
|
33
33
|
/**
|
|
34
34
|
* This is a workaround to refresh the debounce timer when user is typing quickly.
|
|
35
35
|
* Adding debounce at function call doesnt work because server won't process second request until first request is processed.
|
|
@@ -2,17 +2,18 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.EditCompletionHandler = void 0;
|
|
4
4
|
const protocol_1 = require("@aws/language-server-runtimes/protocol");
|
|
5
|
-
const codeWhispererService_1 = require("
|
|
6
|
-
const sessionManager_1 = require("
|
|
7
|
-
const languageDetection_1 = require("
|
|
8
|
-
const workspaceFolderManager_1 = require("
|
|
9
|
-
const
|
|
10
|
-
const telemetry_1 = require("
|
|
5
|
+
const codeWhispererService_1 = require("../../../shared/codeWhispererService");
|
|
6
|
+
const sessionManager_1 = require("../session/sessionManager");
|
|
7
|
+
const languageDetection_1 = require("../../../shared/languageDetection");
|
|
8
|
+
const workspaceFolderManager_1 = require("../../workspaceContext/workspaceFolderManager");
|
|
9
|
+
const triggerUtils_1 = require("../utils/triggerUtils");
|
|
10
|
+
const telemetry_1 = require("../telemetry/telemetry");
|
|
11
11
|
const lsp_core_1 = require("@aws/lsp-core");
|
|
12
|
-
const utils_1 = require("
|
|
13
|
-
const errors_1 = require("
|
|
14
|
-
const constants_1 = require("
|
|
15
|
-
const streakTracker_1 = require("
|
|
12
|
+
const utils_1 = require("../../../shared/utils");
|
|
13
|
+
const errors_1 = require("../../../shared/amazonQServiceManager/errors");
|
|
14
|
+
const constants_1 = require("../contants/constants");
|
|
15
|
+
const streakTracker_1 = require("../tracker/streakTracker");
|
|
16
|
+
const diffUtils_1 = require("../utils/diffUtils");
|
|
16
17
|
class EditCompletionHandler {
|
|
17
18
|
logging;
|
|
18
19
|
clientMetadata;
|
|
@@ -175,7 +176,7 @@ class EditCompletionHandler {
|
|
|
175
176
|
});
|
|
176
177
|
const workspaceState = workspaceFolderManager_1.WorkspaceFolderManager.getInstance()?.getWorkspaceState();
|
|
177
178
|
const workspaceId = workspaceState?.webSocketClient?.isConnected() ? workspaceState.workspaceId : undefined;
|
|
178
|
-
const qEditsTrigger = (0,
|
|
179
|
+
const qEditsTrigger = (0, triggerUtils_1.shouldTriggerEdits)(this.codeWhispererService, fileContext, params, this.cursorTracker, this.recentEditsTracker, this.sessionManager, true);
|
|
179
180
|
if (!qEditsTrigger) {
|
|
180
181
|
return constants_1.EMPTY_RESULT;
|
|
181
182
|
}
|
|
@@ -275,6 +276,8 @@ class EditCompletionHandler {
|
|
|
275
276
|
.map(suggestion => {
|
|
276
277
|
// Check if this suggestion is similar to a previously rejected edit
|
|
277
278
|
const isSimilarToRejected = this.rejectedEditTracker.isSimilarToRejected(suggestion.content, textDocument?.uri || '');
|
|
279
|
+
const processedSuggestion = (0, diffUtils_1.processEditSuggestion)(suggestion.content, session.startPosition, session.document, session.requestContext.fileContext.rightFileContent);
|
|
280
|
+
const isInlineEdit = processedSuggestion.type === codeWhispererService_1.SuggestionType.EDIT;
|
|
278
281
|
if (isSimilarToRejected) {
|
|
279
282
|
// Mark as rejected in the session
|
|
280
283
|
session.setSuggestionState(suggestion.itemId, 'Reject');
|
|
@@ -282,13 +285,13 @@ class EditCompletionHandler {
|
|
|
282
285
|
// Return empty item that will be filtered out
|
|
283
286
|
return {
|
|
284
287
|
insertText: '',
|
|
285
|
-
isInlineEdit:
|
|
288
|
+
isInlineEdit: isInlineEdit,
|
|
286
289
|
itemId: suggestion.itemId,
|
|
287
290
|
};
|
|
288
291
|
}
|
|
289
292
|
return {
|
|
290
|
-
insertText:
|
|
291
|
-
isInlineEdit:
|
|
293
|
+
insertText: processedSuggestion.suggestionContent,
|
|
294
|
+
isInlineEdit: isInlineEdit,
|
|
292
295
|
itemId: suggestion.itemId,
|
|
293
296
|
};
|
|
294
297
|
})
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"editCompletionHandler.js","sourceRoot":"","sources":["../../../../src/language-server/inline-completion/handler/editCompletionHandler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { CancellationToken, InlineCompletionListWithReferences, InlineCompletionWithReferencesParams, Logging, Telemetry, Workspace, CredentialsProvider, Lsp } from '@aws/language-server-runtimes/server-interface';
|
|
2
|
+
import { SessionManager } from '../session/sessionManager';
|
|
3
|
+
import { CodePercentageTracker } from '../tracker/codePercentageTracker';
|
|
4
|
+
import { TelemetryService } from '../../../shared/telemetry/telemetryService';
|
|
5
|
+
import { UserWrittenCodeTracker } from '../../../shared/userWrittenCodeTracker';
|
|
6
|
+
import { RecentEditTracker } from '../tracker/codeEditTracker';
|
|
7
|
+
import { CursorTracker } from '../tracker/cursorTracker';
|
|
8
|
+
import { StreakTracker } from '../tracker/streakTracker';
|
|
9
|
+
import { AmazonQBaseServiceManager } from '../../../shared/amazonQServiceManager/BaseAmazonQServiceManager';
|
|
10
|
+
export declare class InlineCompletionHandler {
|
|
11
|
+
private readonly logging;
|
|
12
|
+
private readonly workspace;
|
|
13
|
+
private readonly amazonQServiceManager;
|
|
14
|
+
private readonly completionSessionManager;
|
|
15
|
+
private readonly codePercentageTracker;
|
|
16
|
+
private readonly userWrittenCodeTracker;
|
|
17
|
+
private readonly recentEditTracker;
|
|
18
|
+
private readonly cursorTracker;
|
|
19
|
+
private readonly streakTracker;
|
|
20
|
+
private readonly telemetry;
|
|
21
|
+
private readonly telemetryService;
|
|
22
|
+
private readonly credentialsProvider;
|
|
23
|
+
private readonly getEditsEnabled;
|
|
24
|
+
private readonly getTimeSinceLastUserModification;
|
|
25
|
+
private readonly lsp;
|
|
26
|
+
private isOnInlineCompletionHandlerInProgress;
|
|
27
|
+
constructor(logging: Logging, workspace: Workspace, amazonQServiceManager: AmazonQBaseServiceManager, completionSessionManager: SessionManager, codePercentageTracker: CodePercentageTracker, userWrittenCodeTracker: UserWrittenCodeTracker | undefined, recentEditTracker: RecentEditTracker, cursorTracker: CursorTracker, streakTracker: StreakTracker, telemetry: Telemetry, telemetryService: TelemetryService, credentialsProvider: CredentialsProvider, getEditsEnabled: () => boolean, getTimeSinceLastUserModification: () => number, lsp: Lsp);
|
|
28
|
+
onInlineCompletion(params: InlineCompletionWithReferencesParams, token: CancellationToken): Promise<InlineCompletionListWithReferences>;
|
|
29
|
+
private processNewCompletionRequest;
|
|
30
|
+
private processSuggestionResponse;
|
|
31
|
+
private handleSuggestionsErrors;
|
|
32
|
+
}
|
|
@@ -0,0 +1,377 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.InlineCompletionHandler = void 0;
|
|
4
|
+
const server_interface_1 = require("@aws/language-server-runtimes/server-interface");
|
|
5
|
+
const autoTrigger_1 = require("../auto-trigger/autoTrigger");
|
|
6
|
+
const codeWhispererService_1 = require("../../../shared/codeWhispererService");
|
|
7
|
+
const languageDetection_1 = require("../../../shared/languageDetection");
|
|
8
|
+
const utils_1 = require("../../../shared/utils");
|
|
9
|
+
const telemetryUtils_1 = require("../../../shared/telemetryUtils");
|
|
10
|
+
const lsp_core_1 = require("@aws/lsp-core");
|
|
11
|
+
const errors_1 = require("../../../shared/amazonQServiceManager/errors");
|
|
12
|
+
const utils_2 = require("../../../shared/utils");
|
|
13
|
+
const workspaceFolderManager_1 = require("../../workspaceContext/workspaceFolderManager");
|
|
14
|
+
const telemetry_1 = require("../telemetry/telemetry");
|
|
15
|
+
const constants_1 = require("../contants/constants");
|
|
16
|
+
const IdleWorkspaceManager_1 = require("../../workspaceContext/IdleWorkspaceManager");
|
|
17
|
+
const mergeRightUtils_1 = require("../utils/mergeRightUtils");
|
|
18
|
+
const textDocumentUtils_1 = require("../utils/textDocumentUtils");
|
|
19
|
+
class InlineCompletionHandler {
|
|
20
|
+
logging;
|
|
21
|
+
workspace;
|
|
22
|
+
amazonQServiceManager;
|
|
23
|
+
completionSessionManager;
|
|
24
|
+
codePercentageTracker;
|
|
25
|
+
userWrittenCodeTracker;
|
|
26
|
+
recentEditTracker;
|
|
27
|
+
cursorTracker;
|
|
28
|
+
streakTracker;
|
|
29
|
+
telemetry;
|
|
30
|
+
telemetryService;
|
|
31
|
+
credentialsProvider;
|
|
32
|
+
getEditsEnabled;
|
|
33
|
+
getTimeSinceLastUserModification;
|
|
34
|
+
lsp;
|
|
35
|
+
isOnInlineCompletionHandlerInProgress = false;
|
|
36
|
+
constructor(logging, workspace, amazonQServiceManager, completionSessionManager, codePercentageTracker, userWrittenCodeTracker, recentEditTracker, cursorTracker, streakTracker, telemetry, telemetryService, credentialsProvider, getEditsEnabled, getTimeSinceLastUserModification, lsp) {
|
|
37
|
+
this.logging = logging;
|
|
38
|
+
this.workspace = workspace;
|
|
39
|
+
this.amazonQServiceManager = amazonQServiceManager;
|
|
40
|
+
this.completionSessionManager = completionSessionManager;
|
|
41
|
+
this.codePercentageTracker = codePercentageTracker;
|
|
42
|
+
this.userWrittenCodeTracker = userWrittenCodeTracker;
|
|
43
|
+
this.recentEditTracker = recentEditTracker;
|
|
44
|
+
this.cursorTracker = cursorTracker;
|
|
45
|
+
this.streakTracker = streakTracker;
|
|
46
|
+
this.telemetry = telemetry;
|
|
47
|
+
this.telemetryService = telemetryService;
|
|
48
|
+
this.credentialsProvider = credentialsProvider;
|
|
49
|
+
this.getEditsEnabled = getEditsEnabled;
|
|
50
|
+
this.getTimeSinceLastUserModification = getTimeSinceLastUserModification;
|
|
51
|
+
this.lsp = lsp;
|
|
52
|
+
}
|
|
53
|
+
async onInlineCompletion(params, token) {
|
|
54
|
+
// this handle should not run concurrently because
|
|
55
|
+
// 1. it would create a high volume of traffic, causing throttling
|
|
56
|
+
// 2. it is not designed to handle concurrent changes to these state variables.
|
|
57
|
+
// when one handler is at the API call stage, it has not yet update the session state
|
|
58
|
+
// but another request can start, causing the state to be incorrect.
|
|
59
|
+
IdleWorkspaceManager_1.IdleWorkspaceManager.recordActivityTimestamp();
|
|
60
|
+
if (this.isOnInlineCompletionHandlerInProgress) {
|
|
61
|
+
this.logging.log(`Skip concurrent inline completion`);
|
|
62
|
+
return constants_1.EMPTY_RESULT;
|
|
63
|
+
}
|
|
64
|
+
// Add this check to ensure service manager is initialized
|
|
65
|
+
if (!this.amazonQServiceManager) {
|
|
66
|
+
this.logging.log('Amazon Q Service Manager not initialized yet');
|
|
67
|
+
return constants_1.EMPTY_RESULT;
|
|
68
|
+
}
|
|
69
|
+
this.isOnInlineCompletionHandlerInProgress = true;
|
|
70
|
+
try {
|
|
71
|
+
// On every new completion request close current inflight session.
|
|
72
|
+
const currentSession = this.completionSessionManager.getCurrentSession();
|
|
73
|
+
if (currentSession && currentSession.state == 'REQUESTING' && !params.partialResultToken) {
|
|
74
|
+
// this REQUESTING state only happens when the session is initialized, which is rare
|
|
75
|
+
currentSession.discardInflightSessionOnNewInvocation = true;
|
|
76
|
+
}
|
|
77
|
+
if (this.cursorTracker) {
|
|
78
|
+
this.cursorTracker.trackPosition(params.textDocument.uri, params.position);
|
|
79
|
+
}
|
|
80
|
+
const textDocument = await (0, textDocumentUtils_1.getTextDocument)(params.textDocument.uri, this.workspace, this.logging);
|
|
81
|
+
const codeWhispererService = this.amazonQServiceManager.getCodewhispererService();
|
|
82
|
+
const authType = codeWhispererService instanceof codeWhispererService_1.CodeWhispererServiceToken ? 'token' : 'iam';
|
|
83
|
+
this.logging.debug(`[INLINE_COMPLETION] Service ready - auth: ${authType}, partial token: ${!!params.partialResultToken}`);
|
|
84
|
+
if (params.partialResultToken && currentSession) {
|
|
85
|
+
// subsequent paginated requests for current session
|
|
86
|
+
try {
|
|
87
|
+
const suggestionResponse = await codeWhispererService.generateSuggestions({
|
|
88
|
+
...currentSession.requestContext,
|
|
89
|
+
fileContext: {
|
|
90
|
+
...currentSession.requestContext.fileContext,
|
|
91
|
+
},
|
|
92
|
+
nextToken: `${params.partialResultToken}`,
|
|
93
|
+
});
|
|
94
|
+
return await this.processSuggestionResponse(suggestionResponse, currentSession, false, params.context.selectedCompletionInfo?.range);
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
return this.handleSuggestionsErrors(error, currentSession);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
return await this.processNewCompletionRequest(params, textDocument, token);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
finally {
|
|
105
|
+
this.isOnInlineCompletionHandlerInProgress = false;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
async processNewCompletionRequest(params, textDocument, token) {
|
|
109
|
+
// request for new session
|
|
110
|
+
if (!textDocument) {
|
|
111
|
+
this.logging.log(`textDocument [${params.textDocument.uri}] not found`);
|
|
112
|
+
return constants_1.EMPTY_RESULT;
|
|
113
|
+
}
|
|
114
|
+
let inferredLanguageId = (0, languageDetection_1.getSupportedLanguageId)(textDocument);
|
|
115
|
+
if (params.fileContextOverride?.programmingLanguage) {
|
|
116
|
+
inferredLanguageId = params.fileContextOverride?.programmingLanguage;
|
|
117
|
+
}
|
|
118
|
+
if (!inferredLanguageId) {
|
|
119
|
+
this.logging.log(`textDocument [${params.textDocument.uri}] with languageId [${textDocument.languageId}] not supported`);
|
|
120
|
+
return constants_1.EMPTY_RESULT;
|
|
121
|
+
}
|
|
122
|
+
// Build request context
|
|
123
|
+
const isAutomaticLspTriggerKind = params.context.triggerKind == server_interface_1.InlineCompletionTriggerKind.Automatic;
|
|
124
|
+
const maxResults = isAutomaticLspTriggerKind ? 1 : 5;
|
|
125
|
+
const selectionRange = params.context.selectedCompletionInfo?.range;
|
|
126
|
+
const startPreprocessTimestamp = Date.now();
|
|
127
|
+
// For Jupyter Notebook in VSC, the language server does not have access to
|
|
128
|
+
// its internal states including current active cell index, etc
|
|
129
|
+
// we rely on VSC to calculate file context
|
|
130
|
+
let fileContext = undefined;
|
|
131
|
+
if (params.fileContextOverride) {
|
|
132
|
+
fileContext = {
|
|
133
|
+
leftFileContent: params.fileContextOverride.leftFileContent,
|
|
134
|
+
rightFileContent: params.fileContextOverride.rightFileContent,
|
|
135
|
+
filename: params.fileContextOverride.filename,
|
|
136
|
+
fileUri: params.fileContextOverride.fileUri,
|
|
137
|
+
programmingLanguage: {
|
|
138
|
+
languageName: inferredLanguageId,
|
|
139
|
+
},
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
fileContext = (0, codeWhispererService_1.getFileContext)({
|
|
144
|
+
textDocument,
|
|
145
|
+
inferredLanguageId,
|
|
146
|
+
position: params.position,
|
|
147
|
+
workspaceFolder: this.workspace.getWorkspaceFolder(textDocument.uri),
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
const workspaceState = workspaceFolderManager_1.WorkspaceFolderManager.getInstance()?.getWorkspaceState();
|
|
151
|
+
const workspaceId = workspaceState?.webSocketClient?.isConnected() ? workspaceState.workspaceId : undefined;
|
|
152
|
+
const previousSession = this.completionSessionManager.getPreviousSession();
|
|
153
|
+
// Only refer to decisions in the past 2 mins
|
|
154
|
+
const previousDecisionForClassifier = previousSession && Date.now() - previousSession.decisionMadeTimestamp <= 2 * 60 * 1000
|
|
155
|
+
? previousSession.getAggregatedUserTriggerDecision()
|
|
156
|
+
: undefined;
|
|
157
|
+
let ideCategory = '';
|
|
158
|
+
const initializeParams = this.lsp.getClientInitializeParams();
|
|
159
|
+
if (initializeParams !== undefined) {
|
|
160
|
+
ideCategory = (0, telemetryUtils_1.getIdeCategory)(initializeParams);
|
|
161
|
+
}
|
|
162
|
+
// auto trigger code path
|
|
163
|
+
let codewhispererAutoTriggerType = undefined;
|
|
164
|
+
let triggerCharacters = '';
|
|
165
|
+
let autoTriggerResult = undefined;
|
|
166
|
+
if (isAutomaticLspTriggerKind) {
|
|
167
|
+
// Reference: https://github.com/aws/aws-toolkit-vscode/blob/amazonq/v1.74.0/packages/core/src/codewhisperer/service/classifierTrigger.ts#L477
|
|
168
|
+
if (params.documentChangeParams?.contentChanges &&
|
|
169
|
+
params.documentChangeParams.contentChanges.length > 0 &&
|
|
170
|
+
params.documentChangeParams.contentChanges[0].text !== undefined) {
|
|
171
|
+
triggerCharacters = params.documentChangeParams.contentChanges[0].text;
|
|
172
|
+
codewhispererAutoTriggerType = (0, autoTrigger_1.getAutoTriggerType)(params.documentChangeParams.contentChanges);
|
|
173
|
+
}
|
|
174
|
+
else {
|
|
175
|
+
// if the client does not emit document change for the trigger, use left most character.
|
|
176
|
+
triggerCharacters = fileContext.leftFileContent.trim().at(-1) ?? '';
|
|
177
|
+
codewhispererAutoTriggerType = (0, autoTrigger_1.triggerType)(fileContext);
|
|
178
|
+
}
|
|
179
|
+
// See: https://github.com/aws/aws-toolkit-vscode/blob/amazonq/v1.74.0/packages/core/src/codewhisperer/service/keyStrokeHandler.ts#L132
|
|
180
|
+
// In such cases, do not auto trigger.
|
|
181
|
+
if (codewhispererAutoTriggerType === undefined) {
|
|
182
|
+
return constants_1.EMPTY_RESULT;
|
|
183
|
+
}
|
|
184
|
+
autoTriggerResult = (0, autoTrigger_1.autoTrigger)({
|
|
185
|
+
fileContext, // The left/right file context and programming language
|
|
186
|
+
lineNum: params.position.line, // the line number of the invocation, this is the line of the cursor
|
|
187
|
+
char: triggerCharacters, // Add the character just inserted, if any, before the invication position
|
|
188
|
+
ide: ideCategory ?? '',
|
|
189
|
+
os: (0, autoTrigger_1.getNormalizeOsName)(),
|
|
190
|
+
previousDecision: previousDecisionForClassifier, // The last decision by the user on the previous invocation
|
|
191
|
+
triggerType: codewhispererAutoTriggerType, // The 2 trigger types currently influencing the Auto-Trigger are SpecialCharacter and Enter
|
|
192
|
+
}, this.logging);
|
|
193
|
+
if (codewhispererAutoTriggerType === 'Classifier' && !autoTriggerResult.shouldTrigger) {
|
|
194
|
+
return constants_1.EMPTY_RESULT;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
let requestContext = {
|
|
198
|
+
fileContext,
|
|
199
|
+
maxResults,
|
|
200
|
+
};
|
|
201
|
+
const codeWhispererService = this.amazonQServiceManager.getCodewhispererService();
|
|
202
|
+
const supplementalContext = await codeWhispererService.constructSupplementalContext(textDocument, params.position, this.workspace, this.recentEditTracker, this.logging, token, params.openTabFilepaths, { includeRecentEdits: false });
|
|
203
|
+
if (supplementalContext?.items) {
|
|
204
|
+
requestContext.supplementalContexts = supplementalContext.items;
|
|
205
|
+
}
|
|
206
|
+
// Close ACTIVE session and record Discard trigger decision immediately
|
|
207
|
+
const currentSession = this.completionSessionManager.getCurrentSession();
|
|
208
|
+
if (currentSession && currentSession.state === 'ACTIVE') {
|
|
209
|
+
// Emit user trigger decision at session close time for active session
|
|
210
|
+
// TODO: yuxqiang workaround to exclude JB from this logic because JB and VSC handle a
|
|
211
|
+
// bit differently in the case when there's a new trigger while a reject/discard event is sent
|
|
212
|
+
// for the previous trigger
|
|
213
|
+
if (ideCategory !== 'JETBRAINS') {
|
|
214
|
+
this.completionSessionManager.discardSession(currentSession);
|
|
215
|
+
const streakLength = this.getEditsEnabled() ? this.streakTracker.getAndUpdateStreakLength(false) : 0;
|
|
216
|
+
await (0, telemetry_1.emitUserTriggerDecisionTelemetry)(this.telemetry, this.telemetryService, currentSession, this.getTimeSinceLastUserModification(), 0, 0, [], [], streakLength);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
const supplementalMetadata = supplementalContext?.supContextData;
|
|
220
|
+
const newSession = this.completionSessionManager.createSession({
|
|
221
|
+
document: textDocument,
|
|
222
|
+
startPreprocessTimestamp: startPreprocessTimestamp,
|
|
223
|
+
startPosition: params.position,
|
|
224
|
+
triggerType: isAutomaticLspTriggerKind ? 'AutoTrigger' : 'OnDemand',
|
|
225
|
+
language: fileContext.programmingLanguage.languageName,
|
|
226
|
+
requestContext: requestContext,
|
|
227
|
+
autoTriggerType: isAutomaticLspTriggerKind ? codewhispererAutoTriggerType : undefined,
|
|
228
|
+
triggerCharacter: triggerCharacters,
|
|
229
|
+
classifierResult: autoTriggerResult?.classifierResult,
|
|
230
|
+
classifierThreshold: autoTriggerResult?.classifierThreshold,
|
|
231
|
+
credentialStartUrl: this.credentialsProvider.getConnectionMetadata?.()?.sso?.startUrl ?? undefined,
|
|
232
|
+
supplementalMetadata: supplementalMetadata,
|
|
233
|
+
customizationArn: lsp_core_1.textUtils.undefinedIfEmpty(codeWhispererService.customizationArn),
|
|
234
|
+
});
|
|
235
|
+
// Add extra context to request context
|
|
236
|
+
const { extraContext } = this.amazonQServiceManager.getConfiguration().inlineSuggestions;
|
|
237
|
+
if (extraContext) {
|
|
238
|
+
requestContext.fileContext.leftFileContent =
|
|
239
|
+
extraContext + '\n' + requestContext.fileContext.leftFileContent;
|
|
240
|
+
}
|
|
241
|
+
// Create the appropriate request based on service type
|
|
242
|
+
let generateCompletionReq;
|
|
243
|
+
if (codeWhispererService instanceof codeWhispererService_1.CodeWhispererServiceToken) {
|
|
244
|
+
const tokenRequest = requestContext;
|
|
245
|
+
generateCompletionReq = {
|
|
246
|
+
...tokenRequest,
|
|
247
|
+
...(workspaceId ? { workspaceId } : {}),
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
else {
|
|
251
|
+
const iamRequest = requestContext;
|
|
252
|
+
generateCompletionReq = {
|
|
253
|
+
...iamRequest,
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
try {
|
|
257
|
+
const authType = codeWhispererService instanceof codeWhispererService_1.CodeWhispererServiceToken ? 'token' : 'iam';
|
|
258
|
+
this.logging.debug(`[INLINE_COMPLETION] API call - generateSuggestions (new session, ${authType})`);
|
|
259
|
+
const suggestionResponse = await codeWhispererService.generateSuggestions(generateCompletionReq);
|
|
260
|
+
return await this.processSuggestionResponse(suggestionResponse, newSession, true, selectionRange);
|
|
261
|
+
}
|
|
262
|
+
catch (error) {
|
|
263
|
+
return this.handleSuggestionsErrors(error, newSession);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
async processSuggestionResponse(suggestionResponse, session, isNewSession, selectionRange) {
|
|
267
|
+
this.codePercentageTracker.countInvocation(session.language);
|
|
268
|
+
this.userWrittenCodeTracker?.recordUsageCount(session.language);
|
|
269
|
+
session.includeImportsWithSuggestions =
|
|
270
|
+
this.amazonQServiceManager.getConfiguration().includeImportsWithSuggestions;
|
|
271
|
+
if (isNewSession) {
|
|
272
|
+
// Populate the session with information from codewhisperer response
|
|
273
|
+
session.suggestions = suggestionResponse.suggestions;
|
|
274
|
+
session.responseContext = suggestionResponse.responseContext;
|
|
275
|
+
session.codewhispererSessionId = suggestionResponse.responseContext.codewhispererSessionId;
|
|
276
|
+
session.setTimeToFirstRecommendation();
|
|
277
|
+
session.predictionType = codeWhispererService_1.SuggestionType.COMPLETION;
|
|
278
|
+
}
|
|
279
|
+
else {
|
|
280
|
+
session.suggestions = [...session.suggestions, ...suggestionResponse.suggestions];
|
|
281
|
+
}
|
|
282
|
+
// Emit service invocation telemetry for every request sent to backend
|
|
283
|
+
(0, telemetry_1.emitServiceInvocationTelemetry)(this.telemetry, session, suggestionResponse.responseContext.requestId);
|
|
284
|
+
// Discard previous inflight API response due to new trigger
|
|
285
|
+
if (session.discardInflightSessionOnNewInvocation) {
|
|
286
|
+
session.discardInflightSessionOnNewInvocation = false;
|
|
287
|
+
this.completionSessionManager.discardSession(session);
|
|
288
|
+
const streakLength = this.getEditsEnabled() ? this.streakTracker.getAndUpdateStreakLength(false) : 0;
|
|
289
|
+
await (0, telemetry_1.emitUserTriggerDecisionTelemetry)(this.telemetry, this.telemetryService, session, this.getTimeSinceLastUserModification(), 0, 0, [], [], streakLength);
|
|
290
|
+
}
|
|
291
|
+
// session was closed by user already made decisions consequent completion request before new paginated API response was received
|
|
292
|
+
if (session.predictionType !== codeWhispererService_1.SuggestionType.EDIT && // TODO: this is a shorterm fix to allow Edits tabtabtab experience, however the real solution is to manage such sessions correctly
|
|
293
|
+
(session.state === 'CLOSED' || session.state === 'DISCARD')) {
|
|
294
|
+
return constants_1.EMPTY_RESULT;
|
|
295
|
+
}
|
|
296
|
+
// API response was recieved, we can activate session now
|
|
297
|
+
this.completionSessionManager.activateSession(session);
|
|
298
|
+
// Process suggestions to apply Empty or Filter filters
|
|
299
|
+
const filteredSuggestions = suggestionResponse.suggestions
|
|
300
|
+
// Empty suggestion filter
|
|
301
|
+
.filter(suggestion => {
|
|
302
|
+
if (suggestion.content === '') {
|
|
303
|
+
session.setSuggestionState(suggestion.itemId, 'Empty');
|
|
304
|
+
return false;
|
|
305
|
+
}
|
|
306
|
+
return true;
|
|
307
|
+
})
|
|
308
|
+
// References setting filter
|
|
309
|
+
.filter(suggestion => {
|
|
310
|
+
// State to track whether code with references should be included in
|
|
311
|
+
// the response. No locking or concurrency controls, filtering is done
|
|
312
|
+
// right before returning and is only guaranteed to be consistent within
|
|
313
|
+
// the context of a single response.
|
|
314
|
+
const { includeSuggestionsWithCodeReferences } = this.amazonQServiceManager.getConfiguration();
|
|
315
|
+
if (includeSuggestionsWithCodeReferences) {
|
|
316
|
+
return true;
|
|
317
|
+
}
|
|
318
|
+
if (suggestion.references == null || suggestion.references.length === 0) {
|
|
319
|
+
return true;
|
|
320
|
+
}
|
|
321
|
+
// Filter out suggestions that have references when includeSuggestionsWithCodeReferences setting is true
|
|
322
|
+
session.setSuggestionState(suggestion.itemId, 'Filter');
|
|
323
|
+
return false;
|
|
324
|
+
});
|
|
325
|
+
const { includeImportsWithSuggestions } = this.amazonQServiceManager.getConfiguration();
|
|
326
|
+
const suggestionsWithRightContext = (0, mergeRightUtils_1.mergeSuggestionsWithRightContext)(session.requestContext.fileContext.rightFileContent, filteredSuggestions, includeImportsWithSuggestions, selectionRange).filter(suggestion => {
|
|
327
|
+
// Discard suggestions that have empty string insertText after right context merge and can't be displayed anymore
|
|
328
|
+
if (suggestion.insertText === '') {
|
|
329
|
+
session.setSuggestionState(suggestion.itemId, 'Discard');
|
|
330
|
+
return false;
|
|
331
|
+
}
|
|
332
|
+
return true;
|
|
333
|
+
});
|
|
334
|
+
suggestionsWithRightContext.forEach(suggestion => {
|
|
335
|
+
const cachedSuggestion = session.suggestions.find(s => s.itemId === suggestion.itemId);
|
|
336
|
+
if (cachedSuggestion)
|
|
337
|
+
cachedSuggestion.insertText = suggestion.insertText.toString();
|
|
338
|
+
});
|
|
339
|
+
// TODO: need dedupe after right context merging but I don't see one
|
|
340
|
+
session.suggestionsAfterRightContextMerge.push(...suggestionsWithRightContext);
|
|
341
|
+
session.codewhispererSuggestionImportCount =
|
|
342
|
+
session.codewhispererSuggestionImportCount +
|
|
343
|
+
suggestionsWithRightContext.reduce((total, suggestion) => {
|
|
344
|
+
return total + (suggestion.mostRelevantMissingImports?.length || 0);
|
|
345
|
+
}, 0);
|
|
346
|
+
// If after all server-side filtering no suggestions can be displayed, and there is no nextToken
|
|
347
|
+
// close session and return empty results
|
|
348
|
+
if (session.suggestionsAfterRightContextMerge.length === 0 && !suggestionResponse.responseContext.nextToken) {
|
|
349
|
+
this.completionSessionManager.closeSession(session);
|
|
350
|
+
await (0, telemetry_1.emitUserTriggerDecisionTelemetry)(this.telemetry, this.telemetryService, session, this.getTimeSinceLastUserModification());
|
|
351
|
+
return constants_1.EMPTY_RESULT;
|
|
352
|
+
}
|
|
353
|
+
return {
|
|
354
|
+
items: suggestionsWithRightContext,
|
|
355
|
+
sessionId: session.id,
|
|
356
|
+
partialResultToken: suggestionResponse.responseContext.nextToken,
|
|
357
|
+
};
|
|
358
|
+
}
|
|
359
|
+
handleSuggestionsErrors(error, session) {
|
|
360
|
+
this.logging.log('Recommendation failure: ' + error);
|
|
361
|
+
(0, telemetry_1.emitServiceInvocationFailure)(this.telemetry, session, error);
|
|
362
|
+
// UTDE telemetry is not needed here because in error cases we don't care about UTDE for errored out sessions
|
|
363
|
+
this.completionSessionManager.closeSession(session);
|
|
364
|
+
let translatedError = error;
|
|
365
|
+
if ((0, utils_2.hasConnectionExpired)(error)) {
|
|
366
|
+
translatedError = new errors_1.AmazonQServiceConnectionExpiredError((0, utils_1.getErrorMessage)(error));
|
|
367
|
+
}
|
|
368
|
+
if (translatedError instanceof errors_1.AmazonQError) {
|
|
369
|
+
throw new server_interface_1.ResponseError(server_interface_1.LSPErrorCodes.RequestFailed, translatedError.message || 'Error processing suggestion requests', {
|
|
370
|
+
awsErrorCode: translatedError.code,
|
|
371
|
+
});
|
|
372
|
+
}
|
|
373
|
+
return constants_1.EMPTY_RESULT;
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
exports.InlineCompletionHandler = InlineCompletionHandler;
|
|
377
|
+
//# sourceMappingURL=inlineCompletionHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inlineCompletionHandler.js","sourceRoot":"","sources":["../../../../src/language-server/inline-completion/handler/inlineCompletionHandler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Logging, LogInlineCompletionSessionResultsParams, Telemetry } from '@aws/language-server-runtimes/server-interface';
|
|
2
|
+
import { SessionManager } from '../session/sessionManager';
|
|
3
|
+
import { CodePercentageTracker } from '../tracker/codePercentageTracker';
|
|
4
|
+
import { RejectedEditTracker } from '../tracker/rejectedEditTracker';
|
|
5
|
+
import { StreakTracker } from '../tracker/streakTracker';
|
|
6
|
+
import { TelemetryService } from '../../../shared/telemetry/telemetryService';
|
|
7
|
+
import { AcceptedInlineSuggestionEntry, CodeDiffTracker } from '../tracker/codeDiffTracker';
|
|
8
|
+
export declare class SessionResultsHandler {
|
|
9
|
+
private readonly logging;
|
|
10
|
+
private readonly telemetry;
|
|
11
|
+
private readonly telemetryService;
|
|
12
|
+
private readonly completionSessionManager;
|
|
13
|
+
private readonly editSessionManager;
|
|
14
|
+
private readonly codePercentageTracker;
|
|
15
|
+
private readonly codeDiffTracker;
|
|
16
|
+
private readonly rejectedEditTracker;
|
|
17
|
+
private readonly streakTracker;
|
|
18
|
+
private readonly getEditsEnabled;
|
|
19
|
+
private readonly getTimeSinceLastUserModification;
|
|
20
|
+
constructor(logging: Logging, telemetry: Telemetry, telemetryService: TelemetryService, completionSessionManager: SessionManager, editSessionManager: SessionManager, codePercentageTracker: CodePercentageTracker, codeDiffTracker: CodeDiffTracker<AcceptedInlineSuggestionEntry>, rejectedEditTracker: RejectedEditTracker, streakTracker: StreakTracker, getEditsEnabled: () => boolean, getTimeSinceLastUserModification: () => number);
|
|
21
|
+
private enqueueCodeDiffEntry;
|
|
22
|
+
handleSessionResults(params: LogInlineCompletionSessionResultsParams): Promise<void>;
|
|
23
|
+
}
|