@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.
Files changed (85) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/out/language-server/agenticChat/agenticChatController.js +62 -9
  3. package/out/language-server/agenticChat/agenticChatController.js.map +1 -1
  4. package/out/language-server/agenticChat/agenticChatResultStream.d.ts +1 -0
  5. package/out/language-server/agenticChat/agenticChatResultStream.js +21 -0
  6. package/out/language-server/agenticChat/agenticChatResultStream.js.map +1 -1
  7. package/out/language-server/agenticChat/constants/constants.d.ts +23 -0
  8. package/out/language-server/agenticChat/constants/constants.js +32 -1
  9. package/out/language-server/agenticChat/constants/constants.js.map +1 -1
  10. package/out/language-server/agenticChat/constants/modelSelection.d.ts +2 -2
  11. package/out/language-server/agenticChat/constants/modelSelection.js +6 -5
  12. package/out/language-server/agenticChat/constants/modelSelection.js.map +1 -1
  13. package/out/language-server/agenticChat/context/agenticChatTriggerContext.d.ts +2 -1
  14. package/out/language-server/agenticChat/context/agenticChatTriggerContext.js +3 -1
  15. package/out/language-server/agenticChat/context/agenticChatTriggerContext.js.map +1 -1
  16. package/out/language-server/agenticChat/retry/delayInterceptor.d.ts +33 -0
  17. package/out/language-server/agenticChat/retry/delayInterceptor.js +79 -0
  18. package/out/language-server/agenticChat/retry/delayInterceptor.js.map +1 -0
  19. package/out/language-server/agenticChat/retry/errorTransformer.d.ts +15 -0
  20. package/out/language-server/agenticChat/retry/errorTransformer.js +152 -0
  21. package/out/language-server/agenticChat/retry/errorTransformer.js.map +1 -0
  22. package/out/language-server/agenticChat/retry/index.d.ts +3 -0
  23. package/out/language-server/agenticChat/retry/index.js +11 -0
  24. package/out/language-server/agenticChat/retry/index.js.map +1 -0
  25. package/out/language-server/agenticChat/retry/qRetryStrategy.d.ts +20 -0
  26. package/out/language-server/agenticChat/retry/qRetryStrategy.js +71 -0
  27. package/out/language-server/agenticChat/retry/qRetryStrategy.js.map +1 -0
  28. package/out/language-server/agenticChat/retry/retryClassifier.d.ts +32 -0
  29. package/out/language-server/agenticChat/retry/retryClassifier.js +122 -0
  30. package/out/language-server/agenticChat/retry/retryClassifier.js.map +1 -0
  31. package/out/language-server/agenticChat/tabBarController.d.ts +4 -0
  32. package/out/language-server/agenticChat/tabBarController.js +19 -2
  33. package/out/language-server/agenticChat/tabBarController.js.map +1 -1
  34. package/out/language-server/chat/chatController.js.map +1 -1
  35. package/out/language-server/chat/chatSessionService.d.ts +7 -0
  36. package/out/language-server/chat/chatSessionService.js +37 -80
  37. package/out/language-server/chat/chatSessionService.js.map +1 -1
  38. package/out/language-server/chat/constants.d.ts +1 -0
  39. package/out/language-server/chat/constants.js +2 -1
  40. package/out/language-server/chat/constants.js.map +1 -1
  41. package/out/language-server/chat/telemetry/chatTelemetryController.d.ts +1 -0
  42. package/out/language-server/chat/telemetry/chatTelemetryController.js +11 -0
  43. package/out/language-server/chat/telemetry/chatTelemetryController.js.map +1 -1
  44. package/out/language-server/inline-completion/codeWhispererServer.d.ts +0 -1
  45. package/out/language-server/inline-completion/codeWhispererServer.js +14 -478
  46. package/out/language-server/inline-completion/codeWhispererServer.js.map +1 -1
  47. package/out/language-server/inline-completion/{editCompletionHandler.d.ts → handler/editCompletionHandler.d.ts} +10 -10
  48. package/out/language-server/inline-completion/{editCompletionHandler.js → handler/editCompletionHandler.js} +17 -14
  49. package/out/language-server/inline-completion/handler/editCompletionHandler.js.map +1 -0
  50. package/out/language-server/inline-completion/handler/inlineCompletionHandler.d.ts +32 -0
  51. package/out/language-server/inline-completion/handler/inlineCompletionHandler.js +377 -0
  52. package/out/language-server/inline-completion/handler/inlineCompletionHandler.js.map +1 -0
  53. package/out/language-server/inline-completion/handler/sessionResultsHandler.d.ts +23 -0
  54. package/out/language-server/inline-completion/handler/sessionResultsHandler.js +119 -0
  55. package/out/language-server/inline-completion/handler/sessionResultsHandler.js.map +1 -0
  56. package/out/language-server/inline-completion/telemetry/telemetry.js.map +1 -1
  57. package/out/language-server/inline-completion/utils/diffUtils.d.ts +28 -11
  58. package/out/language-server/inline-completion/utils/diffUtils.js +269 -117
  59. package/out/language-server/inline-completion/utils/diffUtils.js.map +1 -1
  60. package/out/language-server/inline-completion/utils/mergeRightUtils.d.ts +1 -9
  61. package/out/language-server/inline-completion/utils/mergeRightUtils.js +5 -33
  62. package/out/language-server/inline-completion/utils/mergeRightUtils.js.map +1 -1
  63. package/out/language-server/inline-completion/utils/textDocumentUtils.d.ts +3 -0
  64. package/out/language-server/inline-completion/utils/textDocumentUtils.js +37 -0
  65. package/out/language-server/inline-completion/utils/textDocumentUtils.js.map +1 -0
  66. package/out/language-server/inline-completion/{trigger.d.ts → utils/triggerUtils.d.ts} +4 -4
  67. package/out/language-server/inline-completion/{trigger.js → utils/triggerUtils.js} +3 -3
  68. package/out/language-server/inline-completion/utils/triggerUtils.js.map +1 -0
  69. package/out/language-server/workspaceContext/workspaceFolderManager.js +3 -1
  70. package/out/language-server/workspaceContext/workspaceFolderManager.js.map +1 -1
  71. package/out/shared/codeWhispererService.js +19 -18
  72. package/out/shared/codeWhispererService.js.map +1 -1
  73. package/out/shared/streamingClientService.d.ts +6 -1
  74. package/out/shared/streamingClientService.js +33 -12
  75. package/out/shared/streamingClientService.js.map +1 -1
  76. package/out/shared/telemetry/telemetryService.js.map +1 -1
  77. package/out/shared/telemetry/types.d.ts +8 -0
  78. package/out/shared/telemetry/types.js +1 -0
  79. package/out/shared/telemetry/types.js.map +1 -1
  80. package/out/shared/utils.d.ts +9 -3
  81. package/out/shared/utils.js +15 -10
  82. package/out/shared/utils.js.map +1 -1
  83. package/package.json +2 -2
  84. package/out/language-server/inline-completion/editCompletionHandler.js.map +0 -1
  85. 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 './tracker/codeEditTracker';
2
+ import { RecentEditTracker } from '../tracker/codeEditTracker';
3
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';
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("../../shared/codeWhispererService").CodeWhispererServiceBase;
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("../../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 trigger_1 = require("./trigger");
10
- const telemetry_1 = require("./telemetry/telemetry");
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("../../shared/utils");
13
- const errors_1 = require("../../shared/amazonQServiceManager/errors");
14
- const constants_1 = require("./contants/constants");
15
- const streakTracker_1 = require("./tracker/streakTracker");
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, trigger_1.shouldTriggerEdits)(this.codeWhispererService, fileContext, params, this.cursorTracker, this.recentEditsTracker, this.sessionManager, true);
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: true,
288
+ isInlineEdit: isInlineEdit,
286
289
  itemId: suggestion.itemId,
287
290
  };
288
291
  }
289
292
  return {
290
- insertText: suggestion.content,
291
- isInlineEdit: true,
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
+ }