@aws/lsp-codewhisperer 0.0.70 → 0.0.72

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 (119) hide show
  1. package/CHANGELOG.md +52 -0
  2. package/out/language-server/agenticChat/agenticChatController.js +27 -8
  3. package/out/language-server/agenticChat/agenticChatController.js.map +1 -1
  4. package/out/language-server/agenticChat/constants/modelSelection.js +1 -1
  5. package/out/language-server/agenticChat/constants/modelSelection.js.map +1 -1
  6. package/out/language-server/agenticChat/tools/chatDb/chatDb.d.ts +7 -1
  7. package/out/language-server/agenticChat/tools/chatDb/chatDb.js +64 -17
  8. package/out/language-server/agenticChat/tools/chatDb/chatDb.js.map +1 -1
  9. package/out/language-server/agenticChat/tools/chatDb/util.d.ts +3 -2
  10. package/out/language-server/agenticChat/tools/chatDb/util.js.map +1 -1
  11. package/out/language-server/agenticChat/tools/executeBash.d.ts +4 -1
  12. package/out/language-server/agenticChat/tools/executeBash.js +61 -24
  13. package/out/language-server/agenticChat/tools/executeBash.js.map +1 -1
  14. package/out/language-server/agenticChat/tools/mcp/mcpEventHandler.js +279 -181
  15. package/out/language-server/agenticChat/tools/mcp/mcpEventHandler.js.map +1 -1
  16. package/out/language-server/agenticChat/tools/mcp/mcpManager.d.ts +38 -17
  17. package/out/language-server/agenticChat/tools/mcp/mcpManager.js +263 -110
  18. package/out/language-server/agenticChat/tools/mcp/mcpManager.js.map +1 -1
  19. package/out/language-server/agenticChat/tools/mcp/mcpTypes.d.ts +4 -1
  20. package/out/language-server/agenticChat/tools/mcp/mcpTypes.js.map +1 -1
  21. package/out/language-server/agenticChat/tools/mcp/mcpUtils.d.ts +1 -2
  22. package/out/language-server/agenticChat/tools/mcp/mcpUtils.js +106 -28
  23. package/out/language-server/agenticChat/tools/mcp/mcpUtils.js.map +1 -1
  24. package/out/language-server/agenticChat/tools/qCodeAnalysis/codeReview.d.ts +1 -0
  25. package/out/language-server/agenticChat/tools/qCodeAnalysis/codeReview.js +10 -15
  26. package/out/language-server/agenticChat/tools/qCodeAnalysis/codeReview.js.map +1 -1
  27. package/out/language-server/agenticChat/tools/qCodeAnalysis/codeReviewConstants.d.ts +2 -1
  28. package/out/language-server/agenticChat/tools/qCodeAnalysis/codeReviewConstants.js +3 -2
  29. package/out/language-server/agenticChat/tools/qCodeAnalysis/codeReviewConstants.js.map +1 -1
  30. package/out/language-server/agenticChat/tools/qCodeAnalysis/codeReviewUtils.d.ts +6 -0
  31. package/out/language-server/agenticChat/tools/qCodeAnalysis/codeReviewUtils.js +9 -0
  32. package/out/language-server/agenticChat/tools/qCodeAnalysis/codeReviewUtils.js.map +1 -1
  33. package/out/language-server/agenticChat/tools/qCodeAnalysis/displayFindings.d.ts +89 -0
  34. package/out/language-server/agenticChat/tools/qCodeAnalysis/displayFindings.js +138 -0
  35. package/out/language-server/agenticChat/tools/qCodeAnalysis/displayFindings.js.map +1 -0
  36. package/out/language-server/agenticChat/tools/qCodeAnalysis/displayFindingsConstants.d.ts +14 -0
  37. package/out/language-server/agenticChat/tools/qCodeAnalysis/displayFindingsConstants.js +41 -0
  38. package/out/language-server/agenticChat/tools/qCodeAnalysis/displayFindingsConstants.js.map +1 -0
  39. package/out/language-server/agenticChat/tools/qCodeAnalysis/displayFindingsSchemas.d.ts +177 -0
  40. package/out/language-server/agenticChat/tools/qCodeAnalysis/displayFindingsSchemas.js +93 -0
  41. package/out/language-server/agenticChat/tools/qCodeAnalysis/displayFindingsSchemas.js.map +1 -0
  42. package/out/language-server/agenticChat/tools/qCodeAnalysis/displayFindingsTypes.d.ts +27 -0
  43. package/out/language-server/agenticChat/tools/qCodeAnalysis/displayFindingsTypes.js +12 -0
  44. package/out/language-server/agenticChat/tools/qCodeAnalysis/displayFindingsTypes.js.map +1 -0
  45. package/out/language-server/agenticChat/tools/qCodeAnalysis/displayFindingsUtils.d.ts +17 -0
  46. package/out/language-server/agenticChat/tools/qCodeAnalysis/displayFindingsUtils.js +33 -0
  47. package/out/language-server/agenticChat/tools/qCodeAnalysis/displayFindingsUtils.js.map +1 -0
  48. package/out/language-server/agenticChat/tools/toolServer.js +22 -2
  49. package/out/language-server/agenticChat/tools/toolServer.js.map +1 -1
  50. package/out/language-server/agenticChat/utils/agenticChatControllerHelper.js +1 -1
  51. package/out/language-server/agenticChat/utils/agenticChatControllerHelper.js.map +1 -1
  52. package/out/language-server/agenticChat/utils/commandParser.d.ts +17 -0
  53. package/out/language-server/agenticChat/utils/commandParser.js +85 -0
  54. package/out/language-server/agenticChat/utils/commandParser.js.map +1 -0
  55. package/out/language-server/chat/chatController.js +77 -0
  56. package/out/language-server/chat/chatController.js.map +1 -1
  57. package/out/language-server/chat/chatSessionService.js +1 -1
  58. package/out/language-server/chat/chatSessionService.js.map +1 -1
  59. package/out/language-server/chat/constants.d.ts +1 -0
  60. package/out/language-server/chat/constants.js +2 -1
  61. package/out/language-server/chat/constants.js.map +1 -1
  62. package/out/language-server/chat/telemetry/chatTelemetryController.d.ts +2 -0
  63. package/out/language-server/chat/telemetry/chatTelemetryController.js +12 -0
  64. package/out/language-server/chat/telemetry/chatTelemetryController.js.map +1 -1
  65. package/out/language-server/chat/utils.js +6 -0
  66. package/out/language-server/chat/utils.js.map +1 -1
  67. package/out/language-server/configuration/qConfigurationServer.d.ts +1 -0
  68. package/out/language-server/configuration/qConfigurationServer.js.map +1 -1
  69. package/out/language-server/inline-completion/auto-trigger/autoTrigger.js +2 -1
  70. package/out/language-server/inline-completion/auto-trigger/autoTrigger.js.map +1 -1
  71. package/out/language-server/inline-completion/codeDiffTracker.d.ts +9 -0
  72. package/out/language-server/inline-completion/codeDiffTracker.js.map +1 -1
  73. package/out/language-server/inline-completion/codeWhispererServer.d.ts +0 -3
  74. package/out/language-server/inline-completion/codeWhispererServer.js +80 -201
  75. package/out/language-server/inline-completion/codeWhispererServer.js.map +1 -1
  76. package/out/language-server/inline-completion/constants.d.ts +9 -0
  77. package/out/language-server/inline-completion/constants.js +10 -0
  78. package/out/language-server/inline-completion/constants.js.map +1 -0
  79. package/out/language-server/inline-completion/documentChangedListener.d.ts +8 -0
  80. package/out/language-server/inline-completion/documentChangedListener.js +20 -0
  81. package/out/language-server/inline-completion/documentChangedListener.js.map +1 -0
  82. package/out/language-server/inline-completion/editCompletionHandler.d.ts +49 -0
  83. package/out/language-server/inline-completion/editCompletionHandler.js +320 -0
  84. package/out/language-server/inline-completion/editCompletionHandler.js.map +1 -0
  85. package/out/language-server/inline-completion/session/sessionManager.d.ts +10 -2
  86. package/out/language-server/inline-completion/session/sessionManager.js +34 -7
  87. package/out/language-server/inline-completion/session/sessionManager.js.map +1 -1
  88. package/out/language-server/inline-completion/telemetry.js +12 -2
  89. package/out/language-server/inline-completion/telemetry.js.map +1 -1
  90. package/out/language-server/inline-completion/trigger.d.ts +17 -0
  91. package/out/language-server/inline-completion/trigger.js +42 -0
  92. package/out/language-server/inline-completion/trigger.js.map +1 -0
  93. package/out/language-server/workspaceContext/artifactManager.js +25 -6
  94. package/out/language-server/workspaceContext/artifactManager.js.map +1 -1
  95. package/out/shared/codeWhispererService.d.ts +36 -1
  96. package/out/shared/codeWhispererService.js +77 -0
  97. package/out/shared/codeWhispererService.js.map +1 -1
  98. package/out/shared/constants.d.ts +1 -0
  99. package/out/shared/constants.js +2 -1
  100. package/out/shared/constants.js.map +1 -1
  101. package/out/shared/languageDetection.js +0 -2
  102. package/out/shared/languageDetection.js.map +1 -1
  103. package/out/shared/models/constants.js +2 -1
  104. package/out/shared/models/constants.js.map +1 -1
  105. package/out/shared/supplementalContextUtil/crossFileContextUtil.d.ts +5 -6
  106. package/out/shared/supplementalContextUtil/crossFileContextUtil.js +114 -10
  107. package/out/shared/supplementalContextUtil/crossFileContextUtil.js.map +1 -1
  108. package/out/shared/supplementalContextUtil/supplementalContextUtil.d.ts +1 -2
  109. package/out/shared/supplementalContextUtil/supplementalContextUtil.js +2 -2
  110. package/out/shared/supplementalContextUtil/supplementalContextUtil.js.map +1 -1
  111. package/out/shared/telemetry/telemetryService.js +42 -18
  112. package/out/shared/telemetry/telemetryService.js.map +1 -1
  113. package/out/shared/telemetry/types.d.ts +16 -1
  114. package/out/shared/telemetry/types.js +2 -0
  115. package/out/shared/telemetry/types.js.map +1 -1
  116. package/out/shared/utils.d.ts +13 -0
  117. package/out/shared/utils.js +60 -4
  118. package/out/shared/utils.js.map +1 -1
  119. package/package.json +4 -4
@@ -0,0 +1,8 @@
1
+ import { DidChangeTextDocumentParams } from '@aws/language-server-runtimes/protocol';
2
+ export declare class DocumentChangedListener {
3
+ private _lastUserModificationTime;
4
+ private _timeSinceLastUserModification;
5
+ get timeSinceLastUserModification(): number;
6
+ constructor();
7
+ onDocumentChanged(e: DidChangeTextDocumentParams): void;
8
+ }
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DocumentChangedListener = void 0;
4
+ class DocumentChangedListener {
5
+ _lastUserModificationTime = 0;
6
+ _timeSinceLastUserModification = 0;
7
+ get timeSinceLastUserModification() {
8
+ return this._timeSinceLastUserModification;
9
+ }
10
+ constructor() { }
11
+ onDocumentChanged(e) {
12
+ // Record last user modification time for any document
13
+ if (this._lastUserModificationTime) {
14
+ this._timeSinceLastUserModification = new Date().getTime() - this._lastUserModificationTime;
15
+ }
16
+ this._lastUserModificationTime = new Date().getTime();
17
+ }
18
+ }
19
+ exports.DocumentChangedListener = DocumentChangedListener;
20
+ //# sourceMappingURL=documentChangedListener.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"documentChangedListener.js","sourceRoot":"","sources":["../../../src/language-server/inline-completion/documentChangedListener.ts"],"names":[],"mappings":";;;AAEA,MAAa,uBAAuB;IACxB,yBAAyB,GAAW,CAAC,CAAA;IACrC,8BAA8B,GAAW,CAAC,CAAA;IAClD,IAAI,6BAA6B;QAC7B,OAAO,IAAI,CAAC,8BAA8B,CAAA;IAC9C,CAAC;IAED,gBAAe,CAAC;IAEhB,iBAAiB,CAAC,CAA8B;QAC5C,sDAAsD;QACtD,IAAI,IAAI,CAAC,yBAAyB,EAAE,CAAC;YACjC,IAAI,CAAC,8BAA8B,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,yBAAyB,CAAA;QAC/F,CAAC;QACD,IAAI,CAAC,yBAAyB,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAA;IACzD,CAAC;CACJ;AAhBD,0DAgBC"}
@@ -0,0 +1,49 @@
1
+ import { CancellationToken, InitializeParams, InlineCompletionListWithReferences, InlineCompletionWithReferencesParams, Range, TextDocument } from '@aws/language-server-runtimes/protocol';
2
+ import { RecentEditTracker } from './tracker/codeEditTracker';
3
+ import { CredentialsProvider, Logging, Telemetry, Workspace } from '@aws/language-server-runtimes/server-interface';
4
+ import { GenerateSuggestionsResponse } from '../../shared/codeWhispererService';
5
+ import { CodeWhispererSession, SessionManager } from './session/sessionManager';
6
+ import { CursorTracker } from './tracker/cursorTracker';
7
+ import { CodewhispererLanguage } from '../../shared/languageDetection';
8
+ import { TelemetryService } from '../../shared/telemetry/telemetryService';
9
+ import { AmazonQBaseServiceManager } from '../../shared/amazonQServiceManager/BaseAmazonQServiceManager';
10
+ import { RejectedEditTracker } from './tracker/rejectedEditTracker';
11
+ import { DocumentChangedListener } from './documentChangedListener';
12
+ export declare class EditCompletionHandler {
13
+ readonly logging: Logging;
14
+ readonly clientMetadata: InitializeParams;
15
+ readonly workspace: Workspace;
16
+ readonly amazonQServiceManager: AmazonQBaseServiceManager;
17
+ readonly sessionManager: SessionManager;
18
+ readonly cursorTracker: CursorTracker;
19
+ readonly recentEditsTracker: RecentEditTracker;
20
+ readonly rejectedEditTracker: RejectedEditTracker;
21
+ readonly documentChangedListener: DocumentChangedListener;
22
+ readonly telemetry: Telemetry;
23
+ readonly telemetryService: TelemetryService;
24
+ readonly credentialsProvider: CredentialsProvider;
25
+ private readonly editsEnabled;
26
+ private debounceTimeout;
27
+ private isWaiting;
28
+ private hasDocumentChangedSinceInvocation;
29
+ constructor(logging: Logging, clientMetadata: InitializeParams, workspace: Workspace, amazonQServiceManager: AmazonQBaseServiceManager, sessionManager: SessionManager, cursorTracker: CursorTracker, recentEditsTracker: RecentEditTracker, rejectedEditTracker: RejectedEditTracker, documentChangedListener: DocumentChangedListener, telemetry: Telemetry, telemetryService: TelemetryService, credentialsProvider: CredentialsProvider);
30
+ get codeWhispererService(): import("../../shared/codeWhispererService").CodeWhispererServiceBase;
31
+ /**
32
+ * This is a workaround to refresh the debounce timer when user is typing quickly.
33
+ * Adding debounce at function call doesnt work because server won't process second request until first request is processed.
34
+ * Also as a followup, ideally it should be a message/event publish/subscribe pattern instead of manual invocation like this
35
+ */
36
+ documentChanged(): void;
37
+ onEditCompletion(params: InlineCompletionWithReferencesParams, token: CancellationToken): Promise<InlineCompletionListWithReferences>;
38
+ _invoke(params: InlineCompletionWithReferencesParams, token: CancellationToken, textDocument: TextDocument, inferredLanguageId: CodewhispererLanguage, currentSession: CodeWhispererSession | undefined): Promise<InlineCompletionListWithReferences>;
39
+ processSuggestionResponse(suggestionResponse: GenerateSuggestionsResponse, session: CodeWhispererSession, isNewSession: boolean, selectionRange?: Range, textDocument?: TextDocument): Promise<{
40
+ items: {
41
+ insertText: string;
42
+ isInlineEdit: boolean;
43
+ itemId: string;
44
+ }[];
45
+ sessionId: string;
46
+ partialResultToken: string | undefined;
47
+ }>;
48
+ handleSuggestionsErrors(error: Error, session: CodeWhispererSession): InlineCompletionListWithReferences;
49
+ }
@@ -0,0 +1,320 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EditCompletionHandler = void 0;
4
+ const protocol_1 = require("@aws/language-server-runtimes/protocol");
5
+ const codeWhispererService_1 = require("../../shared/codeWhispererService");
6
+ const languageDetection_1 = require("../../shared/languageDetection");
7
+ const workspaceFolderManager_1 = require("../workspaceContext/workspaceFolderManager");
8
+ const trigger_1 = require("./trigger");
9
+ const telemetry_1 = require("./telemetry");
10
+ const mergeRightUtils_1 = require("./mergeRightUtils");
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("./constants");
15
+ class EditCompletionHandler {
16
+ logging;
17
+ clientMetadata;
18
+ workspace;
19
+ amazonQServiceManager;
20
+ sessionManager;
21
+ cursorTracker;
22
+ recentEditsTracker;
23
+ rejectedEditTracker;
24
+ documentChangedListener;
25
+ telemetry;
26
+ telemetryService;
27
+ credentialsProvider;
28
+ editsEnabled;
29
+ debounceTimeout;
30
+ isWaiting = false;
31
+ hasDocumentChangedSinceInvocation = false;
32
+ constructor(logging, clientMetadata, workspace, amazonQServiceManager, sessionManager, cursorTracker, recentEditsTracker, rejectedEditTracker, documentChangedListener, telemetry, telemetryService, credentialsProvider) {
33
+ this.logging = logging;
34
+ this.clientMetadata = clientMetadata;
35
+ this.workspace = workspace;
36
+ this.amazonQServiceManager = amazonQServiceManager;
37
+ this.sessionManager = sessionManager;
38
+ this.cursorTracker = cursorTracker;
39
+ this.recentEditsTracker = recentEditsTracker;
40
+ this.rejectedEditTracker = rejectedEditTracker;
41
+ this.documentChangedListener = documentChangedListener;
42
+ this.telemetry = telemetry;
43
+ this.telemetryService = telemetryService;
44
+ this.credentialsProvider = credentialsProvider;
45
+ this.editsEnabled =
46
+ this.clientMetadata.initializationOptions?.aws?.awsClientCapabilities?.textDocument
47
+ ?.inlineCompletionWithReferences?.inlineEditSupport ?? false;
48
+ }
49
+ get codeWhispererService() {
50
+ return this.amazonQServiceManager.getCodewhispererService();
51
+ }
52
+ /**
53
+ * This is a workaround to refresh the debounce timer when user is typing quickly.
54
+ * Adding debounce at function call doesnt work because server won't process second request until first request is processed.
55
+ * Also as a followup, ideally it should be a message/event publish/subscribe pattern instead of manual invocation like this
56
+ */
57
+ documentChanged() {
58
+ if (this.debounceTimeout) {
59
+ this.logging.info('[NEP] refresh timeout');
60
+ this.debounceTimeout.refresh();
61
+ }
62
+ if (this.isWaiting) {
63
+ this.hasDocumentChangedSinceInvocation = true;
64
+ }
65
+ }
66
+ async onEditCompletion(params, token) {
67
+ this.hasDocumentChangedSinceInvocation = false;
68
+ this.debounceTimeout = undefined;
69
+ // On every new completion request close current inflight session.
70
+ const currentSession = this.sessionManager.getCurrentSession();
71
+ if (currentSession && currentSession.state == 'REQUESTING' && !params.partialResultToken) {
72
+ // this REQUESTING state only happens when the session is initialized, which is rare
73
+ currentSession.discardInflightSessionOnNewInvocation = true;
74
+ }
75
+ if (this.cursorTracker) {
76
+ this.cursorTracker.trackPosition(params.textDocument.uri, params.position);
77
+ }
78
+ const textDocument = await this.workspace.getTextDocument(params.textDocument.uri);
79
+ if (!textDocument) {
80
+ this.logging.warn(`textDocument [${params.textDocument.uri}] not found`);
81
+ return constants_1.EMPTY_RESULT;
82
+ }
83
+ if (!(this.codeWhispererService instanceof codeWhispererService_1.CodeWhispererServiceToken)) {
84
+ return constants_1.EMPTY_RESULT;
85
+ }
86
+ // request for new session
87
+ const inferredLanguageId = (0, languageDetection_1.getSupportedLanguageId)(textDocument);
88
+ if (!inferredLanguageId) {
89
+ this.logging.log(`textDocument [${params.textDocument.uri}] with languageId [${textDocument.languageId}] not supported`);
90
+ return constants_1.EMPTY_RESULT;
91
+ }
92
+ if (params.partialResultToken && currentSession) {
93
+ // subsequent paginated requests for current session
94
+ try {
95
+ const suggestionResponse = await this.codeWhispererService.generateSuggestions({
96
+ ...currentSession.requestContext,
97
+ nextToken: `${params.partialResultToken}`,
98
+ });
99
+ return await this.processSuggestionResponse(suggestionResponse, currentSession, false, params.context.selectedCompletionInfo?.range);
100
+ }
101
+ catch (error) {
102
+ return this.handleSuggestionsErrors(error, currentSession);
103
+ }
104
+ }
105
+ // TODO: telemetry, discarded suggestions
106
+ // The other easy way to do this is simply not return any suggestion (which is used when retry > 3)
107
+ const invokeWithRetry = async (attempt = 0) => {
108
+ return new Promise(async (resolve) => {
109
+ this.debounceTimeout = setTimeout(async () => {
110
+ try {
111
+ this.isWaiting = true;
112
+ const result = await this._invoke(params, token, textDocument, inferredLanguageId, currentSession).finally(() => {
113
+ this.isWaiting = false;
114
+ });
115
+ if (this.hasDocumentChangedSinceInvocation) {
116
+ if (attempt < constants_1.EDIT_STALE_RETRY_COUNT) {
117
+ this.logging.info(`Document changed during execution, retrying (attempt ${attempt + 1})`);
118
+ this.hasDocumentChangedSinceInvocation = false;
119
+ const retryResult = await invokeWithRetry(attempt + 1);
120
+ resolve(retryResult);
121
+ }
122
+ else {
123
+ this.logging.info('Max retries reached, returning empty result');
124
+ resolve(constants_1.EMPTY_RESULT);
125
+ }
126
+ }
127
+ else {
128
+ this.logging.info('No document changes, resolving result');
129
+ resolve(result);
130
+ }
131
+ }
132
+ finally {
133
+ this.debounceTimeout = undefined;
134
+ }
135
+ }, constants_1.EDIT_DEBOUNCE_INTERVAL_MS);
136
+ });
137
+ };
138
+ return invokeWithRetry();
139
+ }
140
+ async _invoke(params, token, textDocument, inferredLanguageId, currentSession) {
141
+ // Build request context
142
+ const isAutomaticLspTriggerKind = params.context.triggerKind == protocol_1.InlineCompletionTriggerKind.Automatic;
143
+ const maxResults = isAutomaticLspTriggerKind ? 1 : 5;
144
+ const fileContext = (0, codeWhispererService_1.getFileContext)({
145
+ textDocument,
146
+ inferredLanguageId,
147
+ position: params.position,
148
+ workspaceFolder: this.workspace.getWorkspaceFolder(textDocument.uri),
149
+ });
150
+ const workspaceState = workspaceFolderManager_1.WorkspaceFolderManager.getInstance()?.getWorkspaceState();
151
+ const workspaceId = workspaceState?.webSocketClient?.isConnected() ? workspaceState.workspaceId : undefined;
152
+ const qEditsTrigger = (0, trigger_1.shouldTriggerEdits)(this.codeWhispererService, fileContext, params, this.cursorTracker, this.recentEditsTracker, this.sessionManager, true);
153
+ if (!qEditsTrigger) {
154
+ return constants_1.EMPTY_RESULT;
155
+ }
156
+ const generateCompletionReq = {
157
+ fileContext: fileContext,
158
+ maxResults: maxResults,
159
+ predictionTypes: ['EDITS'],
160
+ workspaceId: workspaceId,
161
+ };
162
+ if (qEditsTrigger) {
163
+ generateCompletionReq.editorState = {
164
+ document: {
165
+ relativeFilePath: textDocument.uri,
166
+ programmingLanguage: {
167
+ languageName: generateCompletionReq.fileContext.programmingLanguage.languageName,
168
+ },
169
+ text: textDocument.getText(),
170
+ },
171
+ cursorState: {
172
+ position: {
173
+ line: params.position.line,
174
+ character: params.position.character,
175
+ },
176
+ },
177
+ };
178
+ }
179
+ const supplementalContext = await this.codeWhispererService.constructSupplementalContext(textDocument, params.position, this.workspace, this.recentEditsTracker, this.logging, token, params.openTabFilepaths, {
180
+ includeRecentEdits: true,
181
+ });
182
+ if (supplementalContext) {
183
+ generateCompletionReq.supplementalContexts = supplementalContext.items;
184
+ }
185
+ // Close ACTIVE session and record Discard trigger decision immediately
186
+ if (currentSession && currentSession.state === 'ACTIVE') {
187
+ if (this.editsEnabled && currentSession.suggestionType === codeWhispererService_1.SuggestionType.EDIT) {
188
+ const mergedSuggestions = (0, mergeRightUtils_1.mergeEditSuggestionsWithFileContext)(currentSession, textDocument, fileContext);
189
+ if (mergedSuggestions.length > 0) {
190
+ return {
191
+ items: mergedSuggestions,
192
+ sessionId: currentSession.id,
193
+ };
194
+ }
195
+ }
196
+ // Emit user trigger decision at session close time for active session
197
+ this.sessionManager.discardSession(currentSession);
198
+ const streakLength = this.editsEnabled ? this.sessionManager.getAndUpdateStreakLength(false) : 0;
199
+ await (0, telemetry_1.emitUserTriggerDecisionTelemetry)(this.telemetry, this.telemetryService, currentSession, this.documentChangedListener.timeSinceLastUserModification, 0, 0, [], [], streakLength);
200
+ }
201
+ const newSession = this.sessionManager.createSession({
202
+ document: textDocument,
203
+ startPosition: params.position,
204
+ triggerType: isAutomaticLspTriggerKind ? 'AutoTrigger' : 'OnDemand',
205
+ language: fileContext.programmingLanguage.languageName,
206
+ requestContext: generateCompletionReq,
207
+ autoTriggerType: undefined,
208
+ triggerCharacter: '',
209
+ classifierResult: undefined,
210
+ classifierThreshold: undefined,
211
+ credentialStartUrl: this.credentialsProvider.getConnectionMetadata?.()?.sso?.startUrl ?? undefined,
212
+ supplementalMetadata: supplementalContext?.supContextData,
213
+ customizationArn: lsp_core_1.textUtils.undefinedIfEmpty(this.codeWhispererService.customizationArn),
214
+ });
215
+ try {
216
+ const suggestionResponse = await this.codeWhispererService.generateSuggestions(generateCompletionReq);
217
+ return await this.processSuggestionResponse(suggestionResponse, newSession, true, params.context.selectedCompletionInfo?.range);
218
+ }
219
+ catch (error) {
220
+ return this.handleSuggestionsErrors(error, newSession);
221
+ }
222
+ }
223
+ async processSuggestionResponse(suggestionResponse, session, isNewSession, selectionRange, textDocument) {
224
+ // TODO: we haven't decided how to do these telemetry for Edits suggestions
225
+ // codePercentageTracker.countInvocation(session.language)
226
+ // userWrittenCodeTracker?.recordUsageCount(session.language)
227
+ if (isNewSession) {
228
+ // Populate the session with information from codewhisperer response
229
+ session.suggestions = suggestionResponse.suggestions;
230
+ session.responseContext = suggestionResponse.responseContext;
231
+ session.codewhispererSessionId = suggestionResponse.responseContext.codewhispererSessionId;
232
+ session.timeToFirstRecommendation = new Date().getTime() - session.startTime;
233
+ session.suggestionType = suggestionResponse.suggestionType;
234
+ }
235
+ else {
236
+ session.suggestions = [...session.suggestions, ...suggestionResponse.suggestions];
237
+ }
238
+ // Emit service invocation telemetry for every request sent to backend
239
+ (0, telemetry_1.emitServiceInvocationTelemetry)(this.telemetry, session, suggestionResponse.responseContext.requestId);
240
+ // Discard previous inflight API response due to new trigger
241
+ if (session.discardInflightSessionOnNewInvocation) {
242
+ session.discardInflightSessionOnNewInvocation = false;
243
+ this.sessionManager.discardSession(session);
244
+ const streakLength = this.editsEnabled ? this.sessionManager.getAndUpdateStreakLength(false) : 0;
245
+ await (0, telemetry_1.emitUserTriggerDecisionTelemetry)(this.telemetry, this.telemetryService, session, this.documentChangedListener.timeSinceLastUserModification, 0, 0, [], [], streakLength);
246
+ }
247
+ // API response was recieved, we can activate session now
248
+ this.sessionManager.activateSession(session);
249
+ // Process suggestions to apply Empty or Filter filters
250
+ const filteredSuggestions = suggestionResponse.suggestions
251
+ // Empty suggestion filter
252
+ .filter(suggestion => {
253
+ if (suggestion.content === '') {
254
+ session.setSuggestionState(suggestion.itemId, 'Empty');
255
+ return false;
256
+ }
257
+ return true;
258
+ })
259
+ // References setting filter
260
+ .filter(suggestion => {
261
+ // State to track whether code with references should be included in
262
+ // the response. No locking or concurrency controls, filtering is done
263
+ // right before returning and is only guaranteed to be consistent within
264
+ // the context of a single response.
265
+ const { includeSuggestionsWithCodeReferences } = this.amazonQServiceManager.getConfiguration();
266
+ if (includeSuggestionsWithCodeReferences) {
267
+ return true;
268
+ }
269
+ if (suggestion.references == null || suggestion.references.length === 0) {
270
+ return true;
271
+ }
272
+ // Filter out suggestions that have references when includeSuggestionsWithCodeReferences setting is true
273
+ session.setSuggestionState(suggestion.itemId, 'Filter');
274
+ return false;
275
+ });
276
+ return {
277
+ items: suggestionResponse.suggestions
278
+ .map(suggestion => {
279
+ // Check if this suggestion is similar to a previously rejected edit
280
+ const isSimilarToRejected = this.rejectedEditTracker.isSimilarToRejected(suggestion.content, textDocument?.uri || '');
281
+ if (isSimilarToRejected) {
282
+ // Mark as rejected in the session
283
+ session.setSuggestionState(suggestion.itemId, 'Reject');
284
+ this.logging.debug(`[EDIT_PREDICTION] Filtered out suggestion similar to previously rejected edit`);
285
+ // Return empty item that will be filtered out
286
+ return {
287
+ insertText: '',
288
+ isInlineEdit: true,
289
+ itemId: suggestion.itemId,
290
+ };
291
+ }
292
+ return {
293
+ insertText: suggestion.content,
294
+ isInlineEdit: true,
295
+ itemId: suggestion.itemId,
296
+ };
297
+ })
298
+ .filter(item => item.insertText !== ''),
299
+ sessionId: session.id,
300
+ partialResultToken: suggestionResponse.responseContext.nextToken,
301
+ };
302
+ }
303
+ handleSuggestionsErrors(error, session) {
304
+ this.logging.log('Recommendation failure: ' + error);
305
+ (0, telemetry_1.emitServiceInvocationFailure)(this.telemetry, session, error);
306
+ this.sessionManager.closeSession(session);
307
+ let translatedError = error;
308
+ if ((0, utils_1.hasConnectionExpired)(error)) {
309
+ translatedError = new errors_1.AmazonQServiceConnectionExpiredError((0, utils_1.getErrorMessage)(error));
310
+ }
311
+ if (translatedError instanceof errors_1.AmazonQError) {
312
+ throw new protocol_1.ResponseError(protocol_1.LSPErrorCodes.RequestFailed, translatedError.message || 'Error processing suggestion requests', {
313
+ awsErrorCode: translatedError.code,
314
+ });
315
+ }
316
+ return constants_1.EMPTY_RESULT;
317
+ }
318
+ }
319
+ exports.EditCompletionHandler = EditCompletionHandler;
320
+ //# sourceMappingURL=editCompletionHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"editCompletionHandler.js","sourceRoot":"","sources":["../../../src/language-server/inline-completion/editCompletionHandler.ts"],"names":[],"mappings":"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"}
@@ -60,6 +60,8 @@ export declare class CodeWhispererSession {
60
60
  includeImportsWithSuggestions?: boolean;
61
61
  codewhispererSuggestionImportCount: number;
62
62
  suggestionType?: string;
63
+ hasEditsPending?: boolean;
64
+ recentItemId?: string;
63
65
  constructor(data: SessionData);
64
66
  generateSessionId(): string;
65
67
  get lastSuggestionIndex(): number;
@@ -79,9 +81,15 @@ export declare class CodeWhispererSession {
79
81
  * - Discard otherwise
80
82
  */
81
83
  getAggregatedUserTriggerDecision(): UserTriggerDecision | undefined;
84
+ /**
85
+ * Determines trigger decision based on the most recent user action.
86
+ * Uses the last processed itemId to determine the overall session decision.
87
+ */
88
+ getLatestUserTriggerDecision(): UserTriggerDecision | undefined;
82
89
  }
83
90
  export declare class SessionManager {
84
- private static _instance?;
91
+ private static _completionInstance?;
92
+ private static _editInstance?;
85
93
  private currentSession?;
86
94
  private sessionsLog;
87
95
  private maxHistorySize;
@@ -90,7 +98,7 @@ export declare class SessionManager {
90
98
  /**
91
99
  * Singleton SessionManager class
92
100
  */
93
- static getInstance(): SessionManager;
101
+ static getInstance(type?: 'COMPLETIONS' | 'EDITS'): SessionManager;
94
102
  static reset(): void;
95
103
  createSession(data: SessionData): CodeWhispererSession;
96
104
  closeCurrentSession(): void;
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.SessionManager = exports.CodeWhispererSession = void 0;
4
4
  const uuid_1 = require("uuid");
5
+ const codeWhispererService_1 = require("../../../shared/codeWhispererService");
5
6
  class CodeWhispererSession {
6
7
  id;
7
8
  document;
@@ -41,6 +42,9 @@ class CodeWhispererSession {
41
42
  includeImportsWithSuggestions;
42
43
  codewhispererSuggestionImportCount = 0;
43
44
  suggestionType;
45
+ hasEditsPending = false;
46
+ // Track the most recent itemId for paginated Edit suggestions
47
+ recentItemId;
44
48
  constructor(data) {
45
49
  this.id = this.generateSessionId();
46
50
  this.document = data.document;
@@ -101,7 +105,9 @@ class CodeWhispererSession {
101
105
  }
102
106
  setClientResultData(completionSessionResult, firstCompletionDisplayLatency, totalSessionDisplayTime, typeaheadLength) {
103
107
  // Skip if session results were already recorded for session of session is closed
104
- if (this.state === 'CLOSED' || this.state === 'DISCARD' || this.completionSessionResult) {
108
+ if (this.state === 'CLOSED' ||
109
+ this.state === 'DISCARD' ||
110
+ (this.completionSessionResult && this.suggestionType === codeWhispererService_1.SuggestionType.COMPLETION)) {
105
111
  return;
106
112
  }
107
113
  this.completionSessionResult = completionSessionResult;
@@ -141,6 +147,7 @@ class CodeWhispererSession {
141
147
  // No recommendation was accepted, but user have seen this suggestion
142
148
  this.setSuggestionState(itemId, 'Reject');
143
149
  }
150
+ this.recentItemId = itemId;
144
151
  }
145
152
  this.firstCompletionDisplayLatency = firstCompletionDisplayLatency;
146
153
  this.totalSessionDisplayTime = totalSessionDisplayTime;
@@ -182,10 +189,29 @@ class CodeWhispererSession {
182
189
  }
183
190
  return isEmpty ? 'Empty' : 'Discard';
184
191
  }
192
+ /**
193
+ * Determines trigger decision based on the most recent user action.
194
+ * Uses the last processed itemId to determine the overall session decision.
195
+ */
196
+ getLatestUserTriggerDecision() {
197
+ // Force Discard trigger decision when session was explicitly discarded by server
198
+ if (this.state === 'DISCARD') {
199
+ return 'Discard';
200
+ }
201
+ if (!this.recentItemId)
202
+ return;
203
+ const state = this.getSuggestionState(this.recentItemId);
204
+ if (state === 'Accept')
205
+ return 'Accept';
206
+ if (state === 'Reject')
207
+ return 'Reject';
208
+ return state === 'Empty' ? 'Empty' : 'Discard';
209
+ }
185
210
  }
186
211
  exports.CodeWhispererSession = CodeWhispererSession;
187
212
  class SessionManager {
188
- static _instance;
213
+ static _completionInstance;
214
+ static _editInstance;
189
215
  currentSession;
190
216
  sessionsLog = [];
191
217
  maxHistorySize = 5;
@@ -195,15 +221,16 @@ class SessionManager {
195
221
  /**
196
222
  * Singleton SessionManager class
197
223
  */
198
- static getInstance() {
199
- if (!SessionManager._instance) {
200
- SessionManager._instance = new SessionManager();
224
+ static getInstance(type = 'COMPLETIONS') {
225
+ if (type === 'EDITS') {
226
+ return (SessionManager._editInstance ??= new SessionManager());
201
227
  }
202
- return SessionManager._instance;
228
+ return (SessionManager._completionInstance ??= new SessionManager());
203
229
  }
204
230
  // For unit tests
205
231
  static reset() {
206
- SessionManager._instance = undefined;
232
+ SessionManager._completionInstance = undefined;
233
+ SessionManager._editInstance = undefined;
207
234
  }
208
235
  createSession(data) {
209
236
  this.closeCurrentSession();
@@ -1 +1 @@
1
- {"version":3,"file":"sessionManager.js","sourceRoot":"","sources":["../../../../src/language-server/inline-completion/session/sessionManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sessionManager.js","sourceRoot":"","sources":["../../../../src/language-server/inline-completion/session/sessionManager.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.emitAggregatedUserTriggerDecisionTelemetry = exports.emitUserTriggerDecisionTelemetry = exports.emitPerceivedLatencyTelemetry = exports.emitServiceInvocationFailure = exports.emitServiceInvocationTelemetry = void 0;
4
4
  const utils_1 = require("../../shared/utils");
5
+ const codeWhispererService_1 = require("../../shared/codeWhispererService");
5
6
  const emitServiceInvocationTelemetry = (telemetry, session, requestId) => {
6
7
  const duration = new Date().getTime() - session.startTime;
7
8
  const data = {
@@ -94,12 +95,21 @@ const emitUserTriggerDecisionTelemetry = async (telemetry, telemetryService, ses
94
95
  if (session.reportedUserDecision) {
95
96
  return;
96
97
  }
98
+ // Edits show one suggestion sequentially (with pagination), so use latest itemId state;
99
+ // Completions show multiple suggestions together, so aggregate all states
100
+ const userTriggerDecision = session.suggestionType === codeWhispererService_1.SuggestionType.EDIT
101
+ ? session.getLatestUserTriggerDecision()
102
+ : session.getAggregatedUserTriggerDecision();
97
103
  // Can not emit previous trigger decision if it's not available on the session
98
- if (!session.getAggregatedUserTriggerDecision()) {
104
+ if (!userTriggerDecision) {
99
105
  return;
100
106
  }
101
107
  await (0, exports.emitAggregatedUserTriggerDecisionTelemetry)(telemetryService, session, timeSinceLastUserModification, addedCharsCountForEditSuggestion, deletedCharsCountForEditSuggestion, addedIdeDiagnostics, removedIdeDiagnostics, streakLength);
102
- session.reportedUserDecision = true;
108
+ // Mark telemetry as complete unless Edit suggestion was accepted with more pending
109
+ const hasPendingEditTelemetry = session.suggestionType === codeWhispererService_1.SuggestionType.EDIT && session.acceptedSuggestionId && session.hasEditsPending;
110
+ if (!hasPendingEditTelemetry) {
111
+ session.reportedUserDecision = true;
112
+ }
103
113
  };
104
114
  exports.emitUserTriggerDecisionTelemetry = emitUserTriggerDecisionTelemetry;
105
115
  const emitAggregatedUserTriggerDecisionTelemetry = (telemetryService, session, timeSinceLastUserModification, addedCharsCountForEditSuggestion, deletedCharsCountForEditSuggestion, addedIdeDiagnostics, removedIdeDiagnostics, streakLength) => {