@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.
- package/CHANGELOG.md +7 -0
- package/README.md +19 -0
- package/out/client/sigv4/codewhisperer.d.ts +3 -0
- package/out/client/sigv4/codewhisperer.js +14 -0
- package/out/client/sigv4/codewhisperer.js.map +1 -0
- package/out/client/sigv4/service.json +346 -0
- package/out/client/token/bearer-token-service.json +1627 -0
- package/out/client/token/codewhisperer.d.ts +14 -0
- package/out/client/token/codewhisperer.js +23 -0
- package/out/client/token/codewhisperer.js.map +1 -0
- package/out/index.d.ts +2 -0
- package/out/index.js +19 -0
- package/out/index.js.map +1 -0
- package/out/language-server/auto-trigger/autoTrigger.d.ts +38 -0
- package/out/language-server/auto-trigger/autoTrigger.js +119 -0
- package/out/language-server/auto-trigger/autoTrigger.js.map +1 -0
- package/out/language-server/auto-trigger/autoTrigger.test.d.ts +1 -0
- package/out/language-server/auto-trigger/autoTrigger.test.js +82 -0
- package/out/language-server/auto-trigger/autoTrigger.test.js.map +1 -0
- package/out/language-server/auto-trigger/coefficients.json +405 -0
- package/out/language-server/codeWhispererSecurityScanServer.d.ts +4 -0
- package/out/language-server/codeWhispererSecurityScanServer.js +76 -0
- package/out/language-server/codeWhispererSecurityScanServer.js.map +1 -0
- package/out/language-server/codeWhispererServer.d.ts +7 -0
- package/out/language-server/codeWhispererServer.js +425 -0
- package/out/language-server/codeWhispererServer.js.map +1 -0
- package/out/language-server/codeWhispererServer.test.d.ts +1 -0
- package/out/language-server/codeWhispererServer.test.js +1218 -0
- package/out/language-server/codeWhispererServer.test.js.map +1 -0
- package/out/language-server/codeWhispererService.d.ts +84 -0
- package/out/language-server/codeWhispererService.js +168 -0
- package/out/language-server/codeWhispererService.js.map +1 -0
- package/out/language-server/dependencyGraph/commonUtil.d.ts +2 -0
- package/out/language-server/dependencyGraph/commonUtil.js +20 -0
- package/out/language-server/dependencyGraph/commonUtil.js.map +1 -0
- package/out/language-server/dependencyGraph/constants.d.ts +2 -0
- package/out/language-server/dependencyGraph/constants.js +6 -0
- package/out/language-server/dependencyGraph/constants.js.map +1 -0
- package/out/language-server/dependencyGraph/csharpDependencyGraph.d.ts +27 -0
- package/out/language-server/dependencyGraph/csharpDependencyGraph.js +145 -0
- package/out/language-server/dependencyGraph/csharpDependencyGraph.js.map +1 -0
- package/out/language-server/dependencyGraph/csharpDependencyGraph.test.d.ts +1 -0
- package/out/language-server/dependencyGraph/csharpDependencyGraph.test.js +341 -0
- package/out/language-server/dependencyGraph/csharpDependencyGraph.test.js.map +1 -0
- package/out/language-server/dependencyGraph/dependencyGraph.d.ts +125 -0
- package/out/language-server/dependencyGraph/dependencyGraph.js +152 -0
- package/out/language-server/dependencyGraph/dependencyGraph.js.map +1 -0
- package/out/language-server/dependencyGraph/dependencyGraphFactory.d.ts +15 -0
- package/out/language-server/dependencyGraph/dependencyGraphFactory.js +22 -0
- package/out/language-server/dependencyGraph/dependencyGraphFactory.js.map +1 -0
- package/out/language-server/languageDetection.d.ts +3 -0
- package/out/language-server/languageDetection.js +56 -0
- package/out/language-server/languageDetection.js.map +1 -0
- package/out/language-server/mergeRightUtils.d.ts +6 -0
- package/out/language-server/mergeRightUtils.js +37 -0
- package/out/language-server/mergeRightUtils.js.map +1 -0
- package/out/language-server/mergeRightUtils.test.d.ts +1 -0
- package/out/language-server/mergeRightUtils.test.js +53 -0
- package/out/language-server/mergeRightUtils.test.js.map +1 -0
- package/out/language-server/proxy-server.d.ts +2 -0
- package/out/language-server/proxy-server.js +35 -0
- package/out/language-server/proxy-server.js.map +1 -0
- package/out/language-server/securityScan/securityScanHandler.d.ts +17 -0
- package/out/language-server/securityScan/securityScanHandler.js +139 -0
- package/out/language-server/securityScan/securityScanHandler.js.map +1 -0
- package/out/language-server/securityScan/securityScanHandler.test.d.ts +1 -0
- package/out/language-server/securityScan/securityScanHandler.test.js +170 -0
- package/out/language-server/securityScan/securityScanHandler.test.js.map +1 -0
- package/out/language-server/securityScan/types.d.ts +49 -0
- package/out/language-server/securityScan/types.js +3 -0
- package/out/language-server/securityScan/types.js.map +1 -0
- package/out/language-server/session/sessionManager.d.ts +91 -0
- package/out/language-server/session/sessionManager.js +234 -0
- package/out/language-server/session/sessionManager.js.map +1 -0
- package/out/language-server/session/sessionManager.test.d.ts +1 -0
- package/out/language-server/session/sessionManager.test.js +584 -0
- package/out/language-server/session/sessionManager.test.js.map +1 -0
- package/out/language-server/telemetry/codePercentage.d.ts +17 -0
- package/out/language-server/telemetry/codePercentage.js +82 -0
- package/out/language-server/telemetry/codePercentage.js.map +1 -0
- package/out/language-server/telemetry/codePercentage.test.d.ts +1 -0
- package/out/language-server/telemetry/codePercentage.test.js +85 -0
- package/out/language-server/telemetry/codePercentage.test.js.map +1 -0
- package/out/language-server/telemetry/types.d.ts +68 -0
- package/out/language-server/telemetry/types.js +3 -0
- package/out/language-server/telemetry/types.js.map +1 -0
- package/out/language-server/telemetry/userTriggerDecision.test.d.ts +1 -0
- package/out/language-server/telemetry/userTriggerDecision.test.js +946 -0
- package/out/language-server/telemetry/userTriggerDecision.test.js.map +1 -0
- package/out/language-server/telemetry.test.d.ts +1 -0
- package/out/language-server/telemetry.test.js +96 -0
- package/out/language-server/telemetry.test.js.map +1 -0
- package/out/language-server/testUtils.d.ts +69 -0
- package/out/language-server/testUtils.js +90 -0
- package/out/language-server/testUtils.js.map +1 -0
- package/out/language-server/utils.d.ts +6 -0
- package/out/language-server/utils.js +31 -0
- package/out/language-server/utils.js.map +1 -0
- package/package.json +53 -0
- 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 {};
|