@aws/lsp-codewhisperer 0.0.3

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 (100) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/README.md +19 -0
  3. package/out/client/sigv4/codewhisperer.d.ts +3 -0
  4. package/out/client/sigv4/codewhisperer.js +14 -0
  5. package/out/client/sigv4/codewhisperer.js.map +1 -0
  6. package/out/client/sigv4/service.json +346 -0
  7. package/out/client/token/bearer-token-service.json +1627 -0
  8. package/out/client/token/codewhisperer.d.ts +14 -0
  9. package/out/client/token/codewhisperer.js +23 -0
  10. package/out/client/token/codewhisperer.js.map +1 -0
  11. package/out/index.d.ts +2 -0
  12. package/out/index.js +19 -0
  13. package/out/index.js.map +1 -0
  14. package/out/language-server/auto-trigger/autoTrigger.d.ts +38 -0
  15. package/out/language-server/auto-trigger/autoTrigger.js +119 -0
  16. package/out/language-server/auto-trigger/autoTrigger.js.map +1 -0
  17. package/out/language-server/auto-trigger/autoTrigger.test.d.ts +1 -0
  18. package/out/language-server/auto-trigger/autoTrigger.test.js +82 -0
  19. package/out/language-server/auto-trigger/autoTrigger.test.js.map +1 -0
  20. package/out/language-server/auto-trigger/coefficients.json +405 -0
  21. package/out/language-server/codeWhispererSecurityScanServer.d.ts +4 -0
  22. package/out/language-server/codeWhispererSecurityScanServer.js +76 -0
  23. package/out/language-server/codeWhispererSecurityScanServer.js.map +1 -0
  24. package/out/language-server/codeWhispererServer.d.ts +7 -0
  25. package/out/language-server/codeWhispererServer.js +425 -0
  26. package/out/language-server/codeWhispererServer.js.map +1 -0
  27. package/out/language-server/codeWhispererServer.test.d.ts +1 -0
  28. package/out/language-server/codeWhispererServer.test.js +1218 -0
  29. package/out/language-server/codeWhispererServer.test.js.map +1 -0
  30. package/out/language-server/codeWhispererService.d.ts +84 -0
  31. package/out/language-server/codeWhispererService.js +168 -0
  32. package/out/language-server/codeWhispererService.js.map +1 -0
  33. package/out/language-server/dependencyGraph/commonUtil.d.ts +2 -0
  34. package/out/language-server/dependencyGraph/commonUtil.js +20 -0
  35. package/out/language-server/dependencyGraph/commonUtil.js.map +1 -0
  36. package/out/language-server/dependencyGraph/constants.d.ts +2 -0
  37. package/out/language-server/dependencyGraph/constants.js +6 -0
  38. package/out/language-server/dependencyGraph/constants.js.map +1 -0
  39. package/out/language-server/dependencyGraph/csharpDependencyGraph.d.ts +27 -0
  40. package/out/language-server/dependencyGraph/csharpDependencyGraph.js +145 -0
  41. package/out/language-server/dependencyGraph/csharpDependencyGraph.js.map +1 -0
  42. package/out/language-server/dependencyGraph/csharpDependencyGraph.test.d.ts +1 -0
  43. package/out/language-server/dependencyGraph/csharpDependencyGraph.test.js +341 -0
  44. package/out/language-server/dependencyGraph/csharpDependencyGraph.test.js.map +1 -0
  45. package/out/language-server/dependencyGraph/dependencyGraph.d.ts +125 -0
  46. package/out/language-server/dependencyGraph/dependencyGraph.js +152 -0
  47. package/out/language-server/dependencyGraph/dependencyGraph.js.map +1 -0
  48. package/out/language-server/dependencyGraph/dependencyGraphFactory.d.ts +15 -0
  49. package/out/language-server/dependencyGraph/dependencyGraphFactory.js +22 -0
  50. package/out/language-server/dependencyGraph/dependencyGraphFactory.js.map +1 -0
  51. package/out/language-server/languageDetection.d.ts +3 -0
  52. package/out/language-server/languageDetection.js +56 -0
  53. package/out/language-server/languageDetection.js.map +1 -0
  54. package/out/language-server/mergeRightUtils.d.ts +6 -0
  55. package/out/language-server/mergeRightUtils.js +37 -0
  56. package/out/language-server/mergeRightUtils.js.map +1 -0
  57. package/out/language-server/mergeRightUtils.test.d.ts +1 -0
  58. package/out/language-server/mergeRightUtils.test.js +53 -0
  59. package/out/language-server/mergeRightUtils.test.js.map +1 -0
  60. package/out/language-server/proxy-server.d.ts +2 -0
  61. package/out/language-server/proxy-server.js +35 -0
  62. package/out/language-server/proxy-server.js.map +1 -0
  63. package/out/language-server/securityScan/securityScanHandler.d.ts +17 -0
  64. package/out/language-server/securityScan/securityScanHandler.js +139 -0
  65. package/out/language-server/securityScan/securityScanHandler.js.map +1 -0
  66. package/out/language-server/securityScan/securityScanHandler.test.d.ts +1 -0
  67. package/out/language-server/securityScan/securityScanHandler.test.js +170 -0
  68. package/out/language-server/securityScan/securityScanHandler.test.js.map +1 -0
  69. package/out/language-server/securityScan/types.d.ts +49 -0
  70. package/out/language-server/securityScan/types.js +3 -0
  71. package/out/language-server/securityScan/types.js.map +1 -0
  72. package/out/language-server/session/sessionManager.d.ts +91 -0
  73. package/out/language-server/session/sessionManager.js +234 -0
  74. package/out/language-server/session/sessionManager.js.map +1 -0
  75. package/out/language-server/session/sessionManager.test.d.ts +1 -0
  76. package/out/language-server/session/sessionManager.test.js +584 -0
  77. package/out/language-server/session/sessionManager.test.js.map +1 -0
  78. package/out/language-server/telemetry/codePercentage.d.ts +17 -0
  79. package/out/language-server/telemetry/codePercentage.js +82 -0
  80. package/out/language-server/telemetry/codePercentage.js.map +1 -0
  81. package/out/language-server/telemetry/codePercentage.test.d.ts +1 -0
  82. package/out/language-server/telemetry/codePercentage.test.js +85 -0
  83. package/out/language-server/telemetry/codePercentage.test.js.map +1 -0
  84. package/out/language-server/telemetry/types.d.ts +68 -0
  85. package/out/language-server/telemetry/types.js +3 -0
  86. package/out/language-server/telemetry/types.js.map +1 -0
  87. package/out/language-server/telemetry/userTriggerDecision.test.d.ts +1 -0
  88. package/out/language-server/telemetry/userTriggerDecision.test.js +946 -0
  89. package/out/language-server/telemetry/userTriggerDecision.test.js.map +1 -0
  90. package/out/language-server/telemetry.test.d.ts +1 -0
  91. package/out/language-server/telemetry.test.js +96 -0
  92. package/out/language-server/telemetry.test.js.map +1 -0
  93. package/out/language-server/testUtils.d.ts +69 -0
  94. package/out/language-server/testUtils.js +90 -0
  95. package/out/language-server/testUtils.js.map +1 -0
  96. package/out/language-server/utils.d.ts +6 -0
  97. package/out/language-server/utils.js +31 -0
  98. package/out/language-server/utils.js.map +1 -0
  99. package/package.json +53 -0
  100. package/script/generateServiceClient.ts +242 -0
@@ -0,0 +1,425 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CodeWhispererServerToken = exports.CodeWhispererServerIAM = exports.CodewhispererServerFactory = exports.CONTEXT_CHARACTERS_LIMIT = void 0;
4
+ const vscode_languageserver_1 = require("vscode-languageserver");
5
+ const autoTrigger_1 = require("./auto-trigger/autoTrigger");
6
+ const codeWhispererService_1 = require("./codeWhispererService");
7
+ const languageDetection_1 = require("./languageDetection");
8
+ const mergeRightUtils_1 = require("./mergeRightUtils");
9
+ const sessionManager_1 = require("./session/sessionManager");
10
+ const codePercentage_1 = require("./telemetry/codePercentage");
11
+ const utils_1 = require("./utils");
12
+ const EMPTY_RESULT = { sessionId: '', items: [] };
13
+ exports.CONTEXT_CHARACTERS_LIMIT = 10240;
14
+ // Both clients (token, sigv4) define their own types, this return value needs to match both of them.
15
+ const getFileContext = (params) => {
16
+ const left = params.textDocument.getText({
17
+ start: { line: 0, character: 0 },
18
+ end: params.position,
19
+ });
20
+ const right = params.textDocument.getText({
21
+ start: params.position,
22
+ end: params.textDocument.positionAt(params.textDocument.getText().length),
23
+ });
24
+ return {
25
+ filename: params.textDocument.uri,
26
+ programmingLanguage: {
27
+ languageName: params.inferredLanguageId,
28
+ },
29
+ leftFileContent: left,
30
+ rightFileContent: right,
31
+ };
32
+ };
33
+ const emitServiceInvocationTelemetry = (telemetry, session) => {
34
+ const duration = new Date().getTime() - session.startTime;
35
+ const data = {
36
+ codewhispererRequestId: session.responseContext?.requestId,
37
+ codewhispererSessionId: session.responseContext?.codewhispererSessionId,
38
+ codewhispererLastSuggestionIndex: session.suggestions.length - 1,
39
+ codewhispererCompletionType: session.suggestions.length > 0 ? (0, utils_1.getCompletionType)(session.suggestions[0]) : undefined,
40
+ codewhispererTriggerType: session.triggerType,
41
+ codewhispererAutomatedTriggerType: session.autoTriggerType,
42
+ duration,
43
+ codewhispererLineNumber: session.startPosition.line,
44
+ codewhispererCursorOffset: session.startPosition.character,
45
+ codewhispererLanguage: session.language,
46
+ credentialStartUrl: session.credentialStartUrl,
47
+ };
48
+ telemetry.emitMetric({
49
+ name: 'codewhisperer_serviceInvocation',
50
+ result: 'Succeeded',
51
+ data,
52
+ });
53
+ };
54
+ const emitServiceInvocationFailure = (telemetry, session, error) => {
55
+ const duration = new Date().getTime() - session.startTime;
56
+ const codewhispererRequestId = (0, utils_1.isAwsError)(error) ? error.requestId : undefined;
57
+ const data = {
58
+ codewhispererRequestId: codewhispererRequestId,
59
+ codewhispererSessionId: undefined,
60
+ codewhispererLastSuggestionIndex: -1,
61
+ codewhispererTriggerType: session.triggerType,
62
+ codewhispererAutomatedTriggerType: session.autoTriggerType,
63
+ reason: `CodeWhisperer Invocation Exception: ${error.name || 'UnknownError'}`,
64
+ duration,
65
+ codewhispererLineNumber: session.startPosition.line,
66
+ codewhispererCursorOffset: session.startPosition.character,
67
+ codewhispererLanguage: session.language,
68
+ credentialStartUrl: session.credentialStartUrl,
69
+ };
70
+ telemetry.emitMetric({
71
+ name: 'codewhisperer_serviceInvocation',
72
+ result: 'Failed',
73
+ data,
74
+ errorData: {
75
+ reason: error.name || 'UnknownError',
76
+ errorCode: (0, utils_1.isAwsError)(error) ? error.code : undefined,
77
+ httpStatusCode: (0, utils_1.isAwsError)(error) ? error.statusCode : undefined,
78
+ },
79
+ });
80
+ };
81
+ const emitPerceivedLatencyTelemetry = (telemetry, session) => {
82
+ const data = {
83
+ codewhispererRequestId: session.responseContext?.requestId,
84
+ codewhispererSessionId: session.responseContext?.codewhispererSessionId,
85
+ codewhispererCompletionType: session.suggestions.length > 0 ? (0, utils_1.getCompletionType)(session.suggestions[0]) : undefined,
86
+ codewhispererTriggerType: session.triggerType,
87
+ duration: session.firstCompletionDisplayLatency,
88
+ codewhispererLanguage: session.language,
89
+ credentialStartUrl: session.credentialStartUrl,
90
+ };
91
+ telemetry.emitMetric({
92
+ name: 'codewhisperer_perceivedLatency',
93
+ data,
94
+ });
95
+ };
96
+ const emitUserTriggerDecisionTelemetry = (telemetry, session, timeSinceLastUserModification) => {
97
+ // Prevent reporting user decision if it was already sent
98
+ if (session.reportedUserDecision) {
99
+ return;
100
+ }
101
+ // Can not emit previous trigger decision if it's not available on the session
102
+ if (!session.getAggregatedUserTriggerDecision()) {
103
+ return;
104
+ }
105
+ emitAggregatedUserTriggerDecisionTelemetry(telemetry, session, timeSinceLastUserModification);
106
+ emitUserDecisionTelemetry(telemetry, session);
107
+ session.reportedUserDecision = true;
108
+ };
109
+ const emitAggregatedUserTriggerDecisionTelemetry = (telemetry, session, timeSinceLastUserModification) => {
110
+ const data = {
111
+ codewhispererSessionId: session.codewhispererSessionId || '',
112
+ codewhispererFirstRequestId: session.responseContext?.requestId || '',
113
+ credentialStartUrl: session.credentialStartUrl,
114
+ codewhispererSuggestionState: session.getAggregatedUserTriggerDecision(),
115
+ codewhispererCompletionType: session.suggestions.length > 0 ? (0, utils_1.getCompletionType)(session.suggestions[0]) : undefined,
116
+ codewhispererLanguage: session.language,
117
+ codewhispererTriggerType: session.triggerType,
118
+ codewhispererAutomatedTriggerType: session.autoTriggerType,
119
+ codewhispererTriggerCharacter: session.autoTriggerType === 'SpecialCharacters' ? session.triggerCharacter : undefined,
120
+ codewhispererLineNumber: session.startPosition.line,
121
+ codewhispererCursorOffset: session.startPosition.character,
122
+ codewhispererSuggestionCount: session.suggestions.length,
123
+ codewhispererClassifierResult: session.classifierResult,
124
+ codewhispererClassifierThreshold: session.classifierThreshold,
125
+ codewhispererTotalShownTime: session.totalSessionDisplayTime || 0,
126
+ codewhispererTypeaheadLength: session.typeaheadLength || 0,
127
+ // Global time between any 2 document changes
128
+ codewhispererTimeSinceLastDocumentChange: timeSinceLastUserModification,
129
+ codewhispererTimeSinceLastUserDecision: session.previousTriggerDecisionTime
130
+ ? session.startTime - session.previousTriggerDecisionTime
131
+ : undefined,
132
+ codewhispererTimeToFirstRecommendation: session.timeToFirstRecommendation,
133
+ codewhispererPreviousSuggestionState: session.previousTriggerDecision,
134
+ };
135
+ telemetry.emitMetric({
136
+ name: 'codewhisperer_userTriggerDecision',
137
+ data,
138
+ });
139
+ };
140
+ const emitUserDecisionTelemetry = (telemetry, session) => {
141
+ session.suggestions.forEach((suggestion, i) => {
142
+ const licenses = suggestion.references?.map(r => r.licenseName).filter((l) => !!l);
143
+ const data = {
144
+ codewhispererRequestId: session.responseContext?.requestId,
145
+ codewhispererSessionId: session.responseContext?.codewhispererSessionId,
146
+ codewhispererCompletionType: (0, utils_1.getCompletionType)(suggestion),
147
+ codewhispererTriggerType: session.triggerType,
148
+ codewhispererLanguage: session.language,
149
+ credentialStartUrl: session.credentialStartUrl,
150
+ codewhispererSuggestionIndex: i,
151
+ codewhispererSuggestionState: session.getSuggestionState(suggestion.itemId),
152
+ codewhispererSuggestionReferences: [...new Set(licenses)],
153
+ codewhispererSuggestionReferenceCount: suggestion.references?.length || 0,
154
+ };
155
+ telemetry.emitMetric({
156
+ name: 'codewhisperer_userDecision',
157
+ data,
158
+ });
159
+ });
160
+ };
161
+ const mergeSuggestionsWithRightContext = (rightFileContext, suggestions, range) => {
162
+ return suggestions.map(suggestion => {
163
+ const insertText = (0, mergeRightUtils_1.truncateOverlapWithRightContext)(rightFileContext, suggestion.content);
164
+ let references = suggestion.references
165
+ ?.filter(ref => !(ref.recommendationContentSpan?.start && insertText.length <= ref.recommendationContentSpan.start) && insertText.length)
166
+ .map(r => {
167
+ return {
168
+ licenseName: r.licenseName,
169
+ referenceUrl: r.url,
170
+ referenceName: r.repository,
171
+ position: r.recommendationContentSpan && {
172
+ startCharacter: r.recommendationContentSpan.start,
173
+ endCharacter: r.recommendationContentSpan.end
174
+ ? Math.min(r.recommendationContentSpan.end, insertText.length - 1)
175
+ : r.recommendationContentSpan.end,
176
+ },
177
+ };
178
+ });
179
+ return {
180
+ itemId: suggestion.itemId,
181
+ insertText: insertText,
182
+ range,
183
+ references: references?.length ? references : undefined,
184
+ };
185
+ });
186
+ };
187
+ // Checks if any suggestion in list of suggestions matches with left context of the file
188
+ const hasLeftContextMatch = (suggestions, leftFileContent) => {
189
+ for (const suggestion of suggestions) {
190
+ const overlap = (0, mergeRightUtils_1.getPrefixSuffixOverlap)(leftFileContent, suggestion.content);
191
+ if (overlap.length > 0 && overlap != suggestion.content) {
192
+ return true;
193
+ }
194
+ }
195
+ return false;
196
+ };
197
+ const CodewhispererServerFactory = (service) => ({ credentialsProvider, lsp, workspace, telemetry, logging }) => {
198
+ let lastUserModificationTime;
199
+ let timeSinceLastUserModification = 0;
200
+ const sessionManager = sessionManager_1.SessionManager.getInstance();
201
+ const codeWhispererService = service(credentialsProvider);
202
+ // Mutable state to track whether code with references should be included in
203
+ // the response. No locking or concurrency controls, filtering is done
204
+ // right before returning and is only guaranteed to be consistent within
205
+ // the context of a single response.
206
+ let includeSuggestionsWithCodeReferences = false;
207
+ const codePercentageTracker = new codePercentage_1.CodePercentageTracker(telemetry);
208
+ const onInlineCompletionHandler = async (params, _token) => {
209
+ // On every new completion request close current inflight session.
210
+ const currentSession = sessionManager.getCurrentSession();
211
+ if (currentSession && currentSession.state == 'REQUESTING') {
212
+ // If session was requesting at cancellation time, close it
213
+ // User Trigger Decision will be reported at the time of processing API response in the callback below.
214
+ sessionManager.discardSession(currentSession);
215
+ }
216
+ return workspace.getTextDocument(params.textDocument.uri).then(textDocument => {
217
+ if (!textDocument) {
218
+ logging.log(`textDocument [${params.textDocument.uri}] not found`);
219
+ return EMPTY_RESULT;
220
+ }
221
+ const inferredLanguageId = (0, languageDetection_1.getSupportedLanguageId)(textDocument);
222
+ if (!inferredLanguageId) {
223
+ logging.log(`textDocument [${params.textDocument.uri}] with languageId [${textDocument.languageId}] not supported`);
224
+ return EMPTY_RESULT;
225
+ }
226
+ // Build request context
227
+ const isAutomaticLspTriggerKind = params.context.triggerKind == vscode_languageserver_1.InlineCompletionTriggerKind.Automatic;
228
+ const maxResults = isAutomaticLspTriggerKind ? 1 : 5;
229
+ const selectionRange = params.context.selectedCompletionInfo?.range;
230
+ const fileContext = getFileContext({ textDocument, inferredLanguageId, position: params.position });
231
+ // TODO: Can we get this derived from a keyboard event in the future?
232
+ // This picks the last non-whitespace character, if any, before the cursor
233
+ const triggerCharacter = fileContext.leftFileContent.trim().at(-1) ?? '';
234
+ const codewhispererAutoTriggerType = (0, autoTrigger_1.triggerType)(fileContext);
235
+ const previousDecision = sessionManager.getPreviousSession()?.getAggregatedUserTriggerDecision() ?? '';
236
+ const autoTriggerResult = (0, autoTrigger_1.autoTrigger)({
237
+ fileContext, // The left/right file context and programming language
238
+ lineNum: params.position.line, // the line number of the invocation, this is the line of the cursor
239
+ char: triggerCharacter, // Add the character just inserted, if any, before the invication position
240
+ ide: '', // TODO: Fetch the IDE in a platform-agnostic way (from the initialize request?)
241
+ os: '', // TODO: We should get this in a platform-agnostic way (i.e., compatible with the browser)
242
+ previousDecision, // The last decision by the user on the previous invocation
243
+ triggerType: codewhispererAutoTriggerType, // The 2 trigger types currently influencing the Auto-Trigger are SpecialCharacter and Enter
244
+ });
245
+ if (isAutomaticLspTriggerKind && !autoTriggerResult.shouldTrigger) {
246
+ return EMPTY_RESULT;
247
+ }
248
+ const requestContext = {
249
+ fileContext,
250
+ maxResults,
251
+ };
252
+ // Close ACTIVE session and record Discard trigger decision immediately
253
+ if (currentSession && currentSession.state === 'ACTIVE') {
254
+ // Emit user trigger decision at session close time for active session
255
+ sessionManager.discardSession(currentSession);
256
+ emitUserTriggerDecisionTelemetry(telemetry, currentSession, timeSinceLastUserModification);
257
+ }
258
+ const newSession = sessionManager.createSession({
259
+ startPosition: params.position,
260
+ triggerType: isAutomaticLspTriggerKind ? 'AutoTrigger' : 'OnDemand',
261
+ language: fileContext.programmingLanguage.languageName,
262
+ requestContext: requestContext,
263
+ autoTriggerType: isAutomaticLspTriggerKind ? codewhispererAutoTriggerType : undefined,
264
+ triggerCharacter: triggerCharacter,
265
+ classifierResult: autoTriggerResult?.classifierResult,
266
+ classifierThreshold: autoTriggerResult?.classifierThreshold,
267
+ credentialStartUrl: credentialsProvider.getConnectionMetadata()?.sso?.startUrl ?? undefined,
268
+ });
269
+ codePercentageTracker.countInvocation(inferredLanguageId);
270
+ return codeWhispererService
271
+ .generateSuggestions({
272
+ ...requestContext,
273
+ fileContext: {
274
+ ...requestContext.fileContext,
275
+ leftFileContent: requestContext.fileContext.leftFileContent
276
+ .slice(-exports.CONTEXT_CHARACTERS_LIMIT)
277
+ .replaceAll('\r\n', '\n'),
278
+ rightFileContent: requestContext.fileContext.rightFileContent
279
+ .slice(0, exports.CONTEXT_CHARACTERS_LIMIT)
280
+ .replaceAll('\r\n', '\n'),
281
+ },
282
+ })
283
+ .then(suggestionResponse => {
284
+ // Populate the session with information from codewhisperer response
285
+ newSession.suggestions = suggestionResponse.suggestions;
286
+ newSession.responseContext = suggestionResponse.responseContext;
287
+ newSession.codewhispererSessionId = suggestionResponse.responseContext.codewhispererSessionId;
288
+ newSession.timeToFirstRecommendation = new Date().getTime() - newSession.startTime;
289
+ // Emit service invocation telemetry for every request sent to backend
290
+ emitServiceInvocationTelemetry(telemetry, newSession);
291
+ // Exit early and discard API response
292
+ // session was closed by consequent completion request before API response was received
293
+ // and session never become ACTIVE.
294
+ // Emit Discard trigger decision here, because we will have session and requist IDs only at this point.
295
+ if (newSession.state === 'CLOSED' || newSession.state === 'DISCARD') {
296
+ // Force Discard user decision on every received suggestion
297
+ newSession.suggestions.forEach(s => newSession.setSuggestionState(s.itemId, 'Discard'));
298
+ emitUserTriggerDecisionTelemetry(telemetry, newSession, timeSinceLastUserModification);
299
+ return EMPTY_RESULT;
300
+ }
301
+ // API response was recieved, we can activate session now
302
+ sessionManager.activateSession(newSession);
303
+ // Process suggestions to apply Empty or Filter filters
304
+ const filteredSuggestions = newSession.suggestions
305
+ // Empty suggestion filter
306
+ .filter(suggestion => {
307
+ if (suggestion.content === '') {
308
+ newSession.setSuggestionState(suggestion.itemId, 'Empty');
309
+ return false;
310
+ }
311
+ return true;
312
+ })
313
+ // References setting filter
314
+ .filter(suggestion => {
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
+ newSession.setSuggestionState(suggestion.itemId, 'Filter');
323
+ return false;
324
+ });
325
+ const suggestionsWithRightContext = mergeSuggestionsWithRightContext(fileContext.rightFileContent, filteredSuggestions, selectionRange).filter(suggestion => {
326
+ // Discard suggestions that have empty string insertText after right context merge and can't be displayed anymore
327
+ if (suggestion.insertText === '') {
328
+ newSession.setSuggestionState(suggestion.itemId, 'Discard');
329
+ return false;
330
+ }
331
+ return true;
332
+ });
333
+ // If after all server-side filtering no suggestions can be displayed, close session and return empty results
334
+ if (suggestionsWithRightContext.length === 0) {
335
+ sessionManager.closeSession(newSession);
336
+ emitUserTriggerDecisionTelemetry(telemetry, newSession, timeSinceLastUserModification);
337
+ return EMPTY_RESULT;
338
+ }
339
+ return { items: suggestionsWithRightContext, sessionId: newSession.id };
340
+ })
341
+ .catch(err => {
342
+ // TODO, handle errors properly
343
+ logging.log('Recommendation failure: ' + err);
344
+ emitServiceInvocationFailure(telemetry, newSession, err);
345
+ // TODO: check if we can/should emit UserTriggerDecision
346
+ sessionManager.closeSession(newSession);
347
+ return EMPTY_RESULT;
348
+ });
349
+ });
350
+ };
351
+ const onLogInlineCompletionSessionResultsHandler = async (params) => {
352
+ const { sessionId, completionSessionResult, firstCompletionDisplayLatency, totalSessionDisplayTime, typeaheadLength, } = params;
353
+ const session = sessionManager.getSessionById(sessionId);
354
+ if (!session) {
355
+ logging.log(`ERROR: Session ID ${sessionId} was not found`);
356
+ return;
357
+ }
358
+ if (session.state !== 'ACTIVE') {
359
+ logging.log(`ERROR: Trying to record trigger decision for not-active session ${sessionId}`);
360
+ return;
361
+ }
362
+ const acceptedItemId = Object.keys(params.completionSessionResult).find(k => params.completionSessionResult[k].accepted);
363
+ const acceptedSuggestion = session.suggestions.find(s => s.itemId === acceptedItemId);
364
+ if (acceptedSuggestion !== undefined) {
365
+ if (acceptedSuggestion) {
366
+ codePercentageTracker.countSuccess(session.language);
367
+ codePercentageTracker.countAcceptedTokens(session.language, acceptedSuggestion.content);
368
+ }
369
+ }
370
+ session.setClientResultData(completionSessionResult, firstCompletionDisplayLatency, totalSessionDisplayTime, typeaheadLength);
371
+ if (firstCompletionDisplayLatency)
372
+ emitPerceivedLatencyTelemetry(telemetry, session);
373
+ // Always emit user trigger decision at session close
374
+ sessionManager.closeSession(session);
375
+ emitUserTriggerDecisionTelemetry(telemetry, session, timeSinceLastUserModification);
376
+ };
377
+ const updateConfiguration = async () => lsp.workspace
378
+ .getConfiguration('aws.codeWhisperer')
379
+ .then(config => {
380
+ if (config && config['includeSuggestionsWithCodeReferences'] === true) {
381
+ includeSuggestionsWithCodeReferences = true;
382
+ logging.log('Configuration updated to include suggestions with code references');
383
+ }
384
+ else {
385
+ includeSuggestionsWithCodeReferences = false;
386
+ logging.log('Configuration updated to exclude suggestions with code references');
387
+ }
388
+ if (config && config['shareCodeWhispererContentWithAWS'] === true) {
389
+ codeWhispererService.shareCodeWhispererContentWithAWS = true;
390
+ logging.log('Configuration updated to share code whisperer content with AWS');
391
+ }
392
+ else {
393
+ codeWhispererService.shareCodeWhispererContentWithAWS = false;
394
+ logging.log('Configuration updated to not share code whisperer content with AWS');
395
+ }
396
+ })
397
+ .catch(reason => logging.log(`Error in GetConfiguration: ${reason}`));
398
+ lsp.extensions.onInlineCompletionWithReferences(onInlineCompletionHandler);
399
+ lsp.extensions.onLogInlineCompletionSessionResults(onLogInlineCompletionSessionResultsHandler);
400
+ lsp.onInitialized(updateConfiguration);
401
+ lsp.didChangeConfiguration(updateConfiguration);
402
+ lsp.onDidChangeTextDocument(async (p) => {
403
+ const textDocument = await workspace.getTextDocument(p.textDocument.uri);
404
+ const languageId = (0, languageDetection_1.getSupportedLanguageId)(textDocument);
405
+ if (!textDocument || !languageId) {
406
+ return;
407
+ }
408
+ p.contentChanges.forEach(change => {
409
+ codePercentageTracker.countTokens(languageId, change.text);
410
+ });
411
+ // Record last user modification time for any document
412
+ if (lastUserModificationTime) {
413
+ timeSinceLastUserModification = new Date().getTime() - lastUserModificationTime;
414
+ }
415
+ lastUserModificationTime = new Date().getTime();
416
+ });
417
+ logging.log('Codewhisperer server has been initialised');
418
+ return () => {
419
+ codePercentageTracker.dispose();
420
+ };
421
+ };
422
+ exports.CodewhispererServerFactory = CodewhispererServerFactory;
423
+ exports.CodeWhispererServerIAM = (0, exports.CodewhispererServerFactory)(credentialsProvider => new codeWhispererService_1.CodeWhispererServiceIAM(credentialsProvider));
424
+ exports.CodeWhispererServerToken = (0, exports.CodewhispererServerFactory)(credentialsProvider => new codeWhispererService_1.CodeWhispererServiceToken(credentialsProvider, {}));
425
+ //# sourceMappingURL=codeWhispererServer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codeWhispererServer.js","sourceRoot":"","sources":["../../src/language-server/codeWhispererServer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};