@aws/lsp-codewhisperer 0.0.29 → 0.0.30

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 (34) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/out/index.d.ts +1 -0
  3. package/out/index.js +2 -0
  4. package/out/index.js.map +1 -1
  5. package/out/language-server/agenticChat/agenticChatController.d.ts +37 -0
  6. package/out/language-server/agenticChat/agenticChatController.js +361 -0
  7. package/out/language-server/agenticChat/agenticChatController.js.map +1 -0
  8. package/out/language-server/agenticChat/qAgenticChatServer.d.ts +6 -0
  9. package/out/language-server/agenticChat/qAgenticChatServer.js +92 -0
  10. package/out/language-server/agenticChat/qAgenticChatServer.js.map +1 -0
  11. package/out/language-server/chat/agents/docGeneration/constants.d.ts +59 -0
  12. package/out/language-server/chat/agents/docGeneration/constants.js +147 -0
  13. package/out/language-server/chat/agents/docGeneration/constants.js.map +1 -0
  14. package/out/language-server/chat/agents/docGeneration/errors.d.ts +29 -0
  15. package/out/language-server/chat/agents/docGeneration/errors.js +67 -0
  16. package/out/language-server/chat/agents/docGeneration/errors.js.map +1 -0
  17. package/out/language-server/chat/agents/shared/i18n.d.ts +1 -0
  18. package/out/language-server/chat/agents/shared/i18n.js +7 -0
  19. package/out/language-server/chat/agents/shared/i18n.js.map +1 -0
  20. package/out/language-server/chat/agents/shared/types.d.ts +55 -0
  21. package/out/language-server/chat/agents/shared/types.js +46 -0
  22. package/out/language-server/chat/agents/shared/types.js.map +1 -0
  23. package/out/language-server/chat/contexts/documentContext.d.ts +2 -0
  24. package/out/language-server/chat/contexts/documentContext.js +14 -1
  25. package/out/language-server/chat/contexts/documentContext.js.map +1 -1
  26. package/out/language-server/chat/contexts/triggerContext.js +1 -1
  27. package/out/language-server/chat/contexts/triggerContext.js.map +1 -1
  28. package/out/language-server/codeWhispererServer.d.ts +1 -1
  29. package/out/language-server/codeWhispererServer.js +4 -3
  30. package/out/language-server/codeWhispererServer.js.map +1 -1
  31. package/out/language-server/proxy-server.d.ts +1 -0
  32. package/out/language-server/proxy-server.js +5 -3
  33. package/out/language-server/proxy-server.js.map +1 -1
  34. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.0.30](https://github.com/aws/language-servers/compare/lsp-codewhisperer/v0.0.29...lsp-codewhisperer/v0.0.30) (2025-03-27)
4
+
5
+
6
+ ### Features
7
+
8
+ * copied test files and added README to clarify purpose of this folder ([6a18e55](https://github.com/aws/language-servers/commit/6a18e55a1392aa9e68a202a8ca6f1a8b5c55bb4b))
9
+ * create copy of chat server and controller to use in agentic chat ([035b30e](https://github.com/aws/language-servers/commit/035b30ec98b85faad5696034e56dbafef67e7f79))
10
+
11
+
12
+ ### Bug Fixes
13
+
14
+ * **amazonq:** select corrert Service manager mode in completion server factory ([8041934](https://github.com/aws/language-servers/commit/8041934de1021cfe570fc2686e4000749fe297a6))
15
+ * **amazonq:** use relative path of document with chat params ([#867](https://github.com/aws/language-servers/issues/867)) ([fbc667e](https://github.com/aws/language-servers/commit/fbc667e44767ca8ddcb743b9377bf1331a27fb29))
16
+
3
17
  ## [0.0.29](https://github.com/aws/language-servers/compare/lsp-codewhisperer/v0.0.28...lsp-codewhisperer/v0.0.29) (2025-03-26)
4
18
 
5
19
 
package/out/index.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  export * from './language-server/codeWhispererSecurityScanServer';
2
2
  export * from './language-server/codeWhispererServer';
3
3
  export * from './language-server/qChatServer';
4
+ export * as QAgenticChatServer from './language-server/agenticChat/qAgenticChatServer';
4
5
  export * from './language-server/proxy-server';
5
6
  export * from './language-server/netTransformServer';
package/out/index.js CHANGED
@@ -14,9 +14,11 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.QAgenticChatServer = void 0;
17
18
  __exportStar(require("./language-server/codeWhispererSecurityScanServer"), exports);
18
19
  __exportStar(require("./language-server/codeWhispererServer"), exports);
19
20
  __exportStar(require("./language-server/qChatServer"), exports);
21
+ exports.QAgenticChatServer = require("./language-server/agenticChat/qAgenticChatServer");
20
22
  __exportStar(require("./language-server/proxy-server"), exports);
21
23
  __exportStar(require("./language-server/netTransformServer"), exports);
22
24
  //# sourceMappingURL=index.js.map
package/out/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,oFAAiE;AACjE,wEAAqD;AACrD,gEAA6C;AAC7C,iEAA8C;AAC9C,uEAAoD"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,oFAAiE;AACjE,wEAAqD;AACrD,gEAA6C;AAC7C,yFAAsF;AACtF,iEAA8C;AAC9C,uEAAoD"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Copied from ../chat/chatController.ts for the purpose of developing a divergent implementation.
3
+ * Will be deleted or merged.
4
+ */
5
+ import { FeedbackParams, InsertToCursorPositionParams } from '@aws/language-server-runtimes/protocol';
6
+ import { CancellationToken, Chat, ChatParams, ChatResult, EndChatParams, QuickActionParams, ResponseError, TabAddParams, TabRemoveParams, TabChangeParams } from '@aws/language-server-runtimes/server-interface';
7
+ import { Features, LspHandlers } from '../types';
8
+ import { ChatSessionManagementService } from '../chat/chatSessionManagementService';
9
+ import { TelemetryService } from '../telemetryService';
10
+ type ChatHandlers = Omit<LspHandlers<Chat>, 'openTab' | 'sendChatUpdate' | 'onFileClicked'>;
11
+ export declare class AgenticChatController implements ChatHandlers {
12
+ #private;
13
+ constructor(chatSessionManagementService: ChatSessionManagementService, features: Features, telemetryService: TelemetryService);
14
+ dispose(): void;
15
+ onChatPrompt(params: ChatParams, token: CancellationToken): Promise<ChatResult | ResponseError<ChatResult>>;
16
+ onCodeInsertToCursorPosition(params: InsertToCursorPositionParams): Promise<void>;
17
+ onCopyCodeToClipboard(): void;
18
+ onEndChat(params: EndChatParams, _token: CancellationToken): boolean;
19
+ onFollowUpClicked(): void;
20
+ onInfoLinkClick(): void;
21
+ onLinkClick(): void;
22
+ onReady(): void;
23
+ onSendFeedback({ tabId, feedbackPayload }: FeedbackParams): void;
24
+ onSourceLinkClick(): void;
25
+ onTabAdd(params: TabAddParams): void;
26
+ onTabChange(params: TabChangeParams): void;
27
+ onTabRemove(params: TabRemoveParams): void;
28
+ onQuickAction(params: QuickActionParams, _cancellationToken: CancellationToken): {
29
+ messageId?: undefined;
30
+ body?: undefined;
31
+ } | {
32
+ messageId: string;
33
+ body: string;
34
+ };
35
+ updateConfiguration: () => Promise<void>;
36
+ }
37
+ export {};
@@ -0,0 +1,361 @@
1
+ "use strict";
2
+ /**
3
+ * Copied from ../chat/chatController.ts for the purpose of developing a divergent implementation.
4
+ * Will be deleted or merged.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.AgenticChatController = void 0;
8
+ const protocol_1 = require("@aws/language-server-runtimes/protocol");
9
+ const server_interface_1 = require("@aws/language-server-runtimes/server-interface");
10
+ const uuid_1 = require("uuid");
11
+ const types_1 = require("../telemetry/types");
12
+ const chatEventParser_1 = require("../chat/chatEventParser");
13
+ const utils_1 = require("../chat/utils");
14
+ const chatTelemetryController_1 = require("../chat/telemetry/chatTelemetryController");
15
+ const quickActions_1 = require("../chat/quickActions");
16
+ const metric_1 = require("../telemetry/metric");
17
+ const utils_2 = require("../utils");
18
+ const triggerContext_1 = require("../chat/contexts/triggerContext");
19
+ const constants_1 = require("../chat/constants");
20
+ const qConfigurationServer_1 = require("../configuration/qConfigurationServer");
21
+ const lsp_core_1 = require("@aws/lsp-core");
22
+ const errors_1 = require("../amazonQServiceManager/errors");
23
+ const AmazonQTokenServiceManager_1 = require("../amazonQServiceManager/AmazonQTokenServiceManager");
24
+ class AgenticChatController {
25
+ #features;
26
+ #chatSessionManagementService;
27
+ #telemetryController;
28
+ #triggerContext;
29
+ #customizationArn;
30
+ #telemetryService;
31
+ constructor(chatSessionManagementService, features, telemetryService) {
32
+ this.#features = features;
33
+ this.#chatSessionManagementService = chatSessionManagementService;
34
+ this.#triggerContext = new triggerContext_1.QChatTriggerContext(features.workspace, features.logging);
35
+ this.#telemetryController = new chatTelemetryController_1.ChatTelemetryController(features, telemetryService);
36
+ this.#telemetryService = telemetryService;
37
+ }
38
+ dispose() {
39
+ this.#chatSessionManagementService.dispose();
40
+ this.#telemetryController.dispose();
41
+ }
42
+ async onChatPrompt(params, token) {
43
+ const maybeDefaultResponse = (0, utils_1.getDefaultChatResponse)(params.prompt.prompt);
44
+ if (maybeDefaultResponse) {
45
+ return maybeDefaultResponse;
46
+ }
47
+ const sessionResult = this.#chatSessionManagementService.getSession(params.tabId);
48
+ const { data: session, success } = sessionResult;
49
+ if (!success) {
50
+ return new server_interface_1.ResponseError(protocol_1.ErrorCodes.InternalError, sessionResult.error);
51
+ }
52
+ const metric = new metric_1.Metric({
53
+ cwsprChatConversationType: 'Chat',
54
+ });
55
+ const triggerContext = await this.#getTriggerContext(params, metric);
56
+ const isNewConversation = !session.conversationId;
57
+ token.onCancellationRequested(() => {
58
+ this.#log('cancellation requested');
59
+ session.abortRequest();
60
+ });
61
+ let response;
62
+ let requestInput;
63
+ const conversationIdentifier = session?.conversationId ?? 'New conversation';
64
+ try {
65
+ this.#log('Request for conversation id:', conversationIdentifier);
66
+ const profileArn = AmazonQTokenServiceManager_1.AmazonQTokenServiceManager.getInstance(this.#features).getActiveProfileArn();
67
+ requestInput = this.#triggerContext.getChatParamsFromTrigger(params, triggerContext, this.#customizationArn, profileArn);
68
+ metric.recordStart();
69
+ response = await session.sendMessage(requestInput);
70
+ this.#log('Response for conversation id:', conversationIdentifier, JSON.stringify(response.$metadata));
71
+ }
72
+ catch (err) {
73
+ if ((0, utils_2.isAwsError)(err) || ((0, utils_2.isObject)(err) && 'statusCode' in err && typeof err.statusCode === 'number')) {
74
+ metric.setDimension('cwsprChatRepsonseCode', err.statusCode ?? 400);
75
+ this.#telemetryController.emitMessageResponseError(params.tabId, metric.metric);
76
+ }
77
+ if (err instanceof errors_1.AmazonQServicePendingSigninError) {
78
+ this.#log(`Q Chat SSO Connection error: ${(0, utils_2.getErrorMessage)(err)}`);
79
+ return (0, utils_1.createAuthFollowUpResult)('full-auth');
80
+ }
81
+ if (err instanceof errors_1.AmazonQServicePendingProfileError) {
82
+ this.#log(`Q Chat SSO Connection error: ${(0, utils_2.getErrorMessage)(err)}`);
83
+ const followUpResult = (0, utils_1.createAuthFollowUpResult)('use-supported-auth');
84
+ // Access first element in array
85
+ if (followUpResult.followUp?.options) {
86
+ followUpResult.followUp.options[0].pillText = 'Select Q Developer Profile';
87
+ }
88
+ return followUpResult;
89
+ }
90
+ const authFollowType = (0, utils_1.getAuthFollowUpType)(err);
91
+ if (authFollowType) {
92
+ this.#log(`Q auth error: ${(0, utils_2.getErrorMessage)(err)}`);
93
+ return (0, utils_1.createAuthFollowUpResult)(authFollowType);
94
+ }
95
+ this.#log(`Q api request error ${err instanceof Error ? err.message : 'unknown'}`);
96
+ return new server_interface_1.ResponseError(server_interface_1.LSPErrorCodes.RequestFailed, err instanceof Error ? err.message : 'Unknown request error');
97
+ }
98
+ try {
99
+ const result = await this.#processSendMessageResponse(response, metric.mergeWith({
100
+ cwsprChatResponseCode: response.$metadata.httpStatusCode,
101
+ cwsprChatMessageId: response.$metadata.requestId,
102
+ }), params.partialResultToken);
103
+ session.conversationId = result.data?.conversationId;
104
+ this.#log('Session conversation id:', session.conversationId || '');
105
+ if (session.conversationId) {
106
+ this.#telemetryController.setConversationId(params.tabId, session.conversationId);
107
+ if (isNewConversation) {
108
+ this.#telemetryController.updateTriggerInfo(params.tabId, {
109
+ startTrigger: {
110
+ hasUserSnippet: metric.metric.cwsprChatHasCodeSnippet ?? false,
111
+ triggerType: triggerContext.triggerType,
112
+ },
113
+ });
114
+ this.#telemetryController.emitStartConversationMetric(params.tabId, metric.metric);
115
+ }
116
+ }
117
+ metric.setDimension('codewhispererCustomizationArn', requestInput.conversationState?.customizationArn);
118
+ await this.#telemetryController.emitAddMessageMetric(params.tabId, metric.metric);
119
+ this.#telemetryController.updateTriggerInfo(params.tabId, {
120
+ lastMessageTrigger: {
121
+ ...triggerContext,
122
+ messageId: response.$metadata.requestId,
123
+ followUpActions: new Set(result.data?.chatResult.followUp?.options
124
+ ?.map(option => option.prompt ?? '')
125
+ .filter(prompt => prompt.length > 0)),
126
+ },
127
+ });
128
+ return result.success
129
+ ? result.data.chatResult
130
+ : new server_interface_1.ResponseError(server_interface_1.LSPErrorCodes.RequestFailed, result.error);
131
+ }
132
+ catch (err) {
133
+ this.#log('Error encountered during response streaming:', err instanceof Error ? err.message : 'unknown');
134
+ return new server_interface_1.ResponseError(server_interface_1.LSPErrorCodes.RequestFailed, err instanceof Error ? err.message : 'Unknown error occured during response stream');
135
+ }
136
+ }
137
+ async onCodeInsertToCursorPosition(params) {
138
+ // Implementation based on https://github.com/aws/aws-toolkit-vscode/blob/1814cc84228d4bf20270574c5980b91b227f31cf/packages/core/src/amazonq/commons/controllers/contentController.ts#L38
139
+ if (!params.textDocument || !params.cursorPosition || !params.code) {
140
+ const missingParams = [];
141
+ if (!params.textDocument)
142
+ missingParams.push('textDocument');
143
+ if (!params.cursorPosition)
144
+ missingParams.push('cursorPosition');
145
+ if (!params.code)
146
+ missingParams.push('code');
147
+ this.#log(`Q Chat server failed to insert code. Missing required parameters for insert code: ${missingParams.join(', ')}`);
148
+ return;
149
+ }
150
+ let cursorPosition = params.cursorPosition;
151
+ const indentRange = {
152
+ start: { line: cursorPosition.line, character: 0 },
153
+ end: cursorPosition,
154
+ };
155
+ const documentContent = await this.#features.workspace.getTextDocument(params.textDocument.uri);
156
+ // linePrefix is the raw text that is between the start of the line and the current cursor position
157
+ let linePrefix = documentContent?.getText(indentRange);
158
+ // calculatedIndent is the indent we calculate inside this function and apply to the text to be inserted
159
+ let calculatedIndent = '';
160
+ let hasVirtualSpace = false;
161
+ if (linePrefix) {
162
+ // If linePrefix object is not empty, there are two possibilities:
163
+ // Case 1: If linePrefix contains only whitespace: Use the entire linePrefix as is for the indent
164
+ // Case 2: If linePrefix contains non-whitespace characters: Extract leading whitespace from linePrefix (if any), ignore rest of text
165
+ calculatedIndent =
166
+ linePrefix.trim().length == 0
167
+ ? linePrefix
168
+ : ' '.repeat(linePrefix.length - linePrefix.trimStart().length);
169
+ }
170
+ else if (documentContent && cursorPosition.character > 0) {
171
+ // When the cursor is not at the start of the line (position > 0) but there's no actual text at the indentation range
172
+ // It means there are virtual spaces that is being rendered by the IDE
173
+ // In this case, the indentation is determined by the cursorPosition
174
+ this.#log('Indent is nullish and the cursor position is greater than zero while inserting code');
175
+ calculatedIndent = ' '.repeat(cursorPosition.character);
176
+ hasVirtualSpace = true;
177
+ cursorPosition.character = 0;
178
+ }
179
+ const textWithIndent = params.code
180
+ .split('\n')
181
+ .map((line, index) => {
182
+ if (index === 0) {
183
+ return hasVirtualSpace && line ? calculatedIndent + line : line;
184
+ }
185
+ // Only indent non-empty lines
186
+ return line ? calculatedIndent + line : '';
187
+ })
188
+ .join('\n');
189
+ const workspaceEdit = {
190
+ edit: {
191
+ documentChanges: [
192
+ protocol_1.TextDocumentEdit.create({ uri: params.textDocument.uri, version: 0 }, [
193
+ protocol_1.TextEdit.insert(cursorPosition, textWithIndent),
194
+ ]),
195
+ ],
196
+ },
197
+ };
198
+ const applyResult = await this.#features.lsp.workspace.applyWorkspaceEdit(workspaceEdit);
199
+ if (applyResult.applied) {
200
+ this.#log(`Q Chat server inserted code successfully`);
201
+ this.#telemetryController.enqueueCodeDiffEntry({ ...params, code: textWithIndent });
202
+ }
203
+ else {
204
+ this.#log(`Q Chat server failed to insert code: ${applyResult.failureReason ?? 'No failure reason provided'}`);
205
+ }
206
+ }
207
+ onCopyCodeToClipboard() { }
208
+ onEndChat(params, _token) {
209
+ const { success } = this.#chatSessionManagementService.deleteSession(params.tabId);
210
+ return success;
211
+ }
212
+ onFollowUpClicked() { }
213
+ onInfoLinkClick() { }
214
+ onLinkClick() { }
215
+ onReady() { }
216
+ onSendFeedback({ tabId, feedbackPayload }) {
217
+ this.#features.telemetry.emitMetric({
218
+ name: 'amazonq_sendFeedback',
219
+ data: {
220
+ comment: JSON.stringify({
221
+ type: 'codewhisperer-chat-answer-feedback',
222
+ conversationId: this.#telemetryController.getConversationId(tabId) ?? '',
223
+ messageId: feedbackPayload.messageId,
224
+ reason: feedbackPayload.selectedOption,
225
+ userComment: feedbackPayload.comment,
226
+ }),
227
+ // this is always Negative because only thumbs down has a form
228
+ sentiment: 'Negative',
229
+ },
230
+ });
231
+ }
232
+ onSourceLinkClick() { }
233
+ onTabAdd(params) {
234
+ this.#telemetryController.activeTabId = params.tabId;
235
+ this.#chatSessionManagementService.createSession(params.tabId);
236
+ }
237
+ onTabChange(params) {
238
+ this.#telemetryController.emitConversationMetric({
239
+ name: types_1.ChatTelemetryEventName.ExitFocusConversation,
240
+ data: {},
241
+ });
242
+ this.#telemetryController.activeTabId = params.tabId;
243
+ this.#telemetryController.emitConversationMetric({
244
+ name: types_1.ChatTelemetryEventName.EnterFocusConversation,
245
+ data: {},
246
+ });
247
+ }
248
+ onTabRemove(params) {
249
+ if (this.#telemetryController.activeTabId === params.tabId) {
250
+ this.#telemetryController.emitConversationMetric({
251
+ name: types_1.ChatTelemetryEventName.ExitFocusConversation,
252
+ data: {},
253
+ });
254
+ this.#telemetryController.activeTabId = undefined;
255
+ }
256
+ this.#chatSessionManagementService.deleteSession(params.tabId);
257
+ this.#telemetryController.removeConversation(params.tabId);
258
+ }
259
+ onQuickAction(params, _cancellationToken) {
260
+ switch (params.quickAction) {
261
+ case quickActions_1.QuickAction.Clear: {
262
+ const sessionResult = this.#chatSessionManagementService.getSession(params.tabId);
263
+ this.#telemetryController.emitChatMetric({
264
+ name: types_1.ChatTelemetryEventName.RunCommand,
265
+ data: {
266
+ cwsprChatCommandType: params.quickAction,
267
+ },
268
+ });
269
+ this.#telemetryController.removeConversation(params.tabId);
270
+ sessionResult.data?.clear();
271
+ return {};
272
+ }
273
+ case quickActions_1.QuickAction.Help:
274
+ this.#telemetryController.emitChatMetric({
275
+ name: types_1.ChatTelemetryEventName.RunCommand,
276
+ data: {
277
+ cwsprChatCommandType: params.quickAction,
278
+ },
279
+ });
280
+ return {
281
+ messageId: (0, uuid_1.v4)(),
282
+ body: constants_1.HELP_MESSAGE,
283
+ };
284
+ default:
285
+ return {};
286
+ }
287
+ }
288
+ async #getTriggerContext(params, metric) {
289
+ const lastMessageTrigger = this.#telemetryController.getLastMessageTrigger(params.tabId);
290
+ let triggerContext;
291
+ // this is the only way we can detect a follow up action
292
+ // we can reuse previous trigger information
293
+ if (lastMessageTrigger?.followUpActions?.has(params.prompt?.prompt ?? '')) {
294
+ await this.#telemetryController.emitInteractWithMessageMetric(params.tabId, {
295
+ cwsprChatMessageId: lastMessageTrigger.messageId,
296
+ cwsprChatInteractionType: types_1.ChatInteractionType.ClickFollowUp,
297
+ });
298
+ triggerContext = lastMessageTrigger;
299
+ }
300
+ else {
301
+ triggerContext = await this.#triggerContext.getNewTriggerContext(params);
302
+ triggerContext.triggerType = this.#telemetryController.getCurrentTrigger(params.tabId) ?? 'click';
303
+ }
304
+ metric.mergeWith({
305
+ cwsprChatUserIntent: triggerContext?.userIntent,
306
+ cwsprChatProgrammingLanguage: triggerContext?.programmingLanguage?.languageName,
307
+ cwsprChatRequestLength: params.prompt?.prompt?.length ?? 0,
308
+ cwsprChatTriggerInteraction: triggerContext?.triggerType,
309
+ cwsprChatHasCodeSnippet: triggerContext.hasCodeSnippet ?? false,
310
+ cwsprChatActiveEditorTotalCharacters: triggerContext.totalEditorCharacters ?? 0,
311
+ });
312
+ return triggerContext;
313
+ }
314
+ async #processSendMessageResponse(response, metric, partialResultToken) {
315
+ const requestId = response.$metadata.requestId;
316
+ const chatEventParser = new chatEventParser_1.ChatEventParser(requestId, metric);
317
+ for await (const chatEvent of response.sendMessageResponse) {
318
+ const result = chatEventParser.processPartialEvent(chatEvent);
319
+ // terminate early when there is an error
320
+ if (!result.success) {
321
+ return result;
322
+ }
323
+ if (!(0, utils_2.isNullish)(partialResultToken)) {
324
+ await this.#features.lsp.sendProgress(protocol_1.chatRequestType, partialResultToken, result.data.chatResult);
325
+ }
326
+ }
327
+ metric.mergeWith({
328
+ cwsprChatFullResponseLatency: metric.getTimeElapsed(),
329
+ cwsprChatFollowUpCount: chatEventParser.totalEvents.followupPromptEvent,
330
+ cwsprChatReferencesCount: chatEventParser.totalEvents.codeReferenceEvent,
331
+ cwsprChatSourceLinkCount: chatEventParser.totalEvents.supplementaryWebLinksEvent,
332
+ cwsprChatResponseLength: chatEventParser.body?.length ?? 0,
333
+ });
334
+ return chatEventParser.getResult();
335
+ }
336
+ updateConfiguration = async () => {
337
+ try {
338
+ const qConfig = await this.#features.lsp.workspace.getConfiguration(qConfigurationServer_1.Q_CONFIGURATION_SECTION);
339
+ if (qConfig) {
340
+ this.#customizationArn = lsp_core_1.textUtils.undefinedIfEmpty(qConfig.customization);
341
+ this.#log(`Chat configuration updated to use ${this.#customizationArn}`);
342
+ /*
343
+ The flag enableTelemetryEventsToDestination is set to true temporarily. It's value will be determined through destination
344
+ configuration post all events migration to STE. It'll be replaced by qConfig['enableTelemetryEventsToDestination'] === true
345
+ */
346
+ // const enableTelemetryEventsToDestination = true
347
+ // this.#telemetryService.updateEnableTelemetryEventsToDestination(enableTelemetryEventsToDestination)
348
+ const optOutTelemetryPreference = qConfig['optOutTelemetry'] === true ? 'OPTOUT' : 'OPTIN';
349
+ this.#telemetryService.updateOptOutPreference(optOutTelemetryPreference);
350
+ }
351
+ }
352
+ catch (error) {
353
+ this.#log(`Error in GetConfiguration: ${error}`);
354
+ }
355
+ };
356
+ #log(...messages) {
357
+ this.#features.logging.log(messages.join(' '));
358
+ }
359
+ }
360
+ exports.AgenticChatController = AgenticChatController;
361
+ //# sourceMappingURL=agenticChatController.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agenticChatController.js","sourceRoot":"","sources":["../../../src/language-server/agenticChat/agenticChatController.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAGH,qEAQ+C;AAC/C,qFAYuD;AACvD,+BAAiC;AACjC,8CAK2B;AAE3B,6DAAiF;AACjF,yCAAqG;AAErG,uFAAmF;AACnF,uDAAkD;AAClD,gDAA4C;AAC5C,oCAA2E;AAC3E,oEAAqF;AACrF,iDAAgD;AAChD,gFAA+E;AAC/E,4CAAyC;AAEzC,4DAAqH;AACrH,oGAAgG;AAIhG,MAAa,qBAAqB;IAC9B,SAAS,CAAU;IACnB,6BAA6B,CAA8B;IAC3D,oBAAoB,CAAyB;IAC7C,eAAe,CAAqB;IACpC,iBAAiB,CAAS;IAC1B,iBAAiB,CAAkB;IAEnC,YACI,4BAA0D,EAC1D,QAAkB,EAClB,gBAAkC;QAElC,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAA;QACzB,IAAI,CAAC,6BAA6B,GAAG,4BAA4B,CAAA;QACjE,IAAI,CAAC,eAAe,GAAG,IAAI,oCAAmB,CAAC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAA;QACpF,IAAI,CAAC,oBAAoB,GAAG,IAAI,iDAAuB,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAA;QACnF,IAAI,CAAC,iBAAiB,GAAG,gBAAgB,CAAA;IAC7C,CAAC;IAED,OAAO;QACH,IAAI,CAAC,6BAA6B,CAAC,OAAO,EAAE,CAAA;QAC5C,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,CAAA;IACvC,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,MAAkB,EAAE,KAAwB;QAC3D,MAAM,oBAAoB,GAAG,IAAA,8BAAsB,EAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QAEzE,IAAI,oBAAoB,EAAE,CAAC;YACvB,OAAO,oBAAoB,CAAA;QAC/B,CAAC;QAED,MAAM,aAAa,GAAG,IAAI,CAAC,6BAA6B,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAEjF,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,aAAa,CAAA;QAEhD,IAAI,CAAC,OAAO,EAAE,CAAC;YACX,OAAO,IAAI,gCAAa,CAAa,qBAAU,CAAC,aAAa,EAAE,aAAa,CAAC,KAAK,CAAC,CAAA;QACvF,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,eAAM,CAA4B;YACjD,yBAAyB,EAAE,MAAM;SACpC,CAAC,CAAA;QAEF,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QACpE,MAAM,iBAAiB,GAAG,CAAC,OAAO,CAAC,cAAc,CAAA;QAEjD,KAAK,CAAC,uBAAuB,CAAC,GAAG,EAAE;YAC/B,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAA;YACnC,OAAO,CAAC,YAAY,EAAE,CAAA;QAC1B,CAAC,CAAC,CAAA;QAEF,IAAI,QAAkC,CAAA;QACtC,IAAI,YAAqC,CAAA;QAEzC,MAAM,sBAAsB,GAAG,OAAO,EAAE,cAAc,IAAI,kBAAkB,CAAA;QAC5E,IAAI,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,8BAA8B,EAAE,sBAAsB,CAAC,CAAA;YACjE,MAAM,UAAU,GAAG,uDAA0B,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,mBAAmB,EAAE,CAAA;YAC/F,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,wBAAwB,CACxD,MAAM,EACN,cAAc,EACd,IAAI,CAAC,iBAAiB,EACtB,UAAU,CACb,CAAA;YAED,MAAM,CAAC,WAAW,EAAE,CAAA;YACpB,QAAQ,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC,CAAA;YAClD,IAAI,CAAC,IAAI,CAAC,+BAA+B,EAAE,sBAAsB,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAA;QAC1G,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,IAAI,IAAA,kBAAU,EAAC,GAAG,CAAC,IAAI,CAAC,IAAA,gBAAQ,EAAC,GAAG,CAAC,IAAI,YAAY,IAAI,GAAG,IAAI,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ,CAAC,EAAE,CAAC;gBAClG,MAAM,CAAC,YAAY,CAAC,uBAAuB,EAAE,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,CAAA;gBACnE,IAAI,CAAC,oBAAoB,CAAC,wBAAwB,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;YACnF,CAAC;YAED,IAAI,GAAG,YAAY,yCAAgC,EAAE,CAAC;gBAClD,IAAI,CAAC,IAAI,CAAC,gCAAgC,IAAA,uBAAe,EAAC,GAAG,CAAC,EAAE,CAAC,CAAA;gBAEjE,OAAO,IAAA,gCAAwB,EAAC,WAAW,CAAC,CAAA;YAChD,CAAC;YAED,IAAI,GAAG,YAAY,0CAAiC,EAAE,CAAC;gBACnD,IAAI,CAAC,IAAI,CAAC,gCAAgC,IAAA,uBAAe,EAAC,GAAG,CAAC,EAAE,CAAC,CAAA;gBAEjE,MAAM,cAAc,GAAG,IAAA,gCAAwB,EAAC,oBAAoB,CAAC,CAAA;gBACrE,gCAAgC;gBAChC,IAAI,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC;oBACnC,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,4BAA4B,CAAA;gBAC9E,CAAC;gBAED,OAAO,cAAc,CAAA;YACzB,CAAC;YAED,MAAM,cAAc,GAAG,IAAA,2BAAmB,EAAC,GAAG,CAAC,CAAA;YAE/C,IAAI,cAAc,EAAE,CAAC;gBACjB,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAA,uBAAe,EAAC,GAAG,CAAC,EAAE,CAAC,CAAA;gBAElD,OAAO,IAAA,gCAAwB,EAAC,cAAc,CAAC,CAAA;YACnD,CAAC;YAED,IAAI,CAAC,IAAI,CAAC,uBAAuB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAA;YAClF,OAAO,IAAI,gCAAa,CACpB,gCAAa,CAAC,aAAa,EAC3B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,uBAAuB,CAC/D,CAAA;QACL,CAAC;QAED,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,2BAA2B,CACjD,QAAQ,EACR,MAAM,CAAC,SAAS,CAAC;gBACb,qBAAqB,EAAE,QAAQ,CAAC,SAAS,CAAC,cAAc;gBACxD,kBAAkB,EAAE,QAAQ,CAAC,SAAS,CAAC,SAAS;aACnD,CAAC,EACF,MAAM,CAAC,kBAAkB,CAC5B,CAAA;YAED,OAAO,CAAC,cAAc,GAAG,MAAM,CAAC,IAAI,EAAE,cAAc,CAAA;YACpD,IAAI,CAAC,IAAI,CAAC,0BAA0B,EAAE,OAAO,CAAC,cAAc,IAAI,EAAE,CAAC,CAAA;YAEnE,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;gBACzB,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,cAAc,CAAC,CAAA;gBAEjF,IAAI,iBAAiB,EAAE,CAAC;oBACpB,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,MAAM,CAAC,KAAK,EAAE;wBACtD,YAAY,EAAE;4BACV,cAAc,EAAE,MAAM,CAAC,MAAM,CAAC,uBAAuB,IAAI,KAAK;4BAC9D,WAAW,EAAE,cAAc,CAAC,WAAW;yBAC1C;qBACJ,CAAC,CAAA;oBAEF,IAAI,CAAC,oBAAoB,CAAC,2BAA2B,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;gBACtF,CAAC;YACL,CAAC;YAED,MAAM,CAAC,YAAY,CAAC,+BAA+B,EAAE,YAAY,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,CAAA;YACtG,MAAM,IAAI,CAAC,oBAAoB,CAAC,oBAAoB,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;YAEjF,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,MAAM,CAAC,KAAK,EAAE;gBACtD,kBAAkB,EAAE;oBAChB,GAAG,cAAc;oBACjB,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC,SAAS;oBACvC,eAAe,EAAE,IAAI,GAAG,CACpB,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,EAAE,OAAO;wBACrC,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;yBACnC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAC3C;iBACJ;aACJ,CAAC,CAAA;YAEF,OAAO,MAAM,CAAC,OAAO;gBACjB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU;gBACxB,CAAC,CAAC,IAAI,gCAAa,CAAa,gCAAa,CAAC,aAAa,EAAE,MAAM,CAAC,KAAK,CAAC,CAAA;QAClF,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,IAAI,CAAC,IAAI,CAAC,8CAA8C,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;YAEzG,OAAO,IAAI,gCAAa,CACpB,gCAAa,CAAC,aAAa,EAC3B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,8CAA8C,CACtF,CAAA;QACL,CAAC;IACL,CAAC;IAED,KAAK,CAAC,4BAA4B,CAAC,MAAoC;QACnE,yLAAyL;QACzL,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,CAAC,MAAM,CAAC,cAAc,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACjE,MAAM,aAAa,GAAG,EAAE,CAAA;YAExB,IAAI,CAAC,MAAM,CAAC,YAAY;gBAAE,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;YAC5D,IAAI,CAAC,MAAM,CAAC,cAAc;gBAAE,aAAa,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;YAChE,IAAI,CAAC,MAAM,CAAC,IAAI;gBAAE,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;YAE5C,IAAI,CAAC,IAAI,CACL,qFAAqF,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAClH,CAAA;YAED,OAAM;QACV,CAAC;QAED,IAAI,cAAc,GAAG,MAAM,CAAC,cAAc,CAAA;QAE1C,MAAM,WAAW,GAAG;YAChB,KAAK,EAAE,EAAE,IAAI,EAAE,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE;YAClD,GAAG,EAAE,cAAc;SACtB,CAAA;QACD,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,eAAe,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA;QAC/F,mGAAmG;QACnG,IAAI,UAAU,GAAG,eAAe,EAAE,OAAO,CAAC,WAAW,CAAC,CAAA;QACtD,wGAAwG;QACxG,IAAI,gBAAgB,GAAG,EAAE,CAAA;QACzB,IAAI,eAAe,GAAG,KAAK,CAAA;QAE3B,IAAI,UAAU,EAAE,CAAC;YACb,kEAAkE;YAClE,iGAAiG;YACjG,qIAAqI;YACrI,gBAAgB;gBACZ,UAAU,CAAC,IAAI,EAAE,CAAC,MAAM,IAAI,CAAC;oBACzB,CAAC,CAAC,UAAU;oBACZ,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,UAAU,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,CAAA;QAC3E,CAAC;aAAM,IAAI,eAAe,IAAI,cAAc,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC;YACzD,qHAAqH;YACrH,sEAAsE;YACtE,oEAAoE;YACpE,IAAI,CAAC,IAAI,CAAC,qFAAqF,CAAC,CAAA;YAChG,gBAAgB,GAAG,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,CAAA;YACvD,eAAe,GAAG,IAAI,CAAA;YACtB,cAAc,CAAC,SAAS,GAAG,CAAC,CAAA;QAChC,CAAC;QAED,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI;aAC7B,KAAK,CAAC,IAAI,CAAC;aACX,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;YACjB,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;gBACd,OAAO,eAAe,IAAI,IAAI,CAAC,CAAC,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAA;YACnE,CAAC;YACD,8BAA8B;YAC9B,OAAO,IAAI,CAAC,CAAC,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAA;QAC9C,CAAC,CAAC;aACD,IAAI,CAAC,IAAI,CAAC,CAAA;QAEf,MAAM,aAAa,GAA6B;YAC5C,IAAI,EAAE;gBACF,eAAe,EAAE;oBACb,2BAAgB,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE;wBAClE,mBAAQ,CAAC,MAAM,CAAC,cAAc,EAAE,cAAc,CAAC;qBAClD,CAAC;iBACL;aACJ;SACJ,CAAA;QACD,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAA;QAExF,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;YACtB,IAAI,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAA;YACrD,IAAI,CAAC,oBAAoB,CAAC,oBAAoB,CAAC,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAA;QACvF,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,IAAI,CACL,wCAAwC,WAAW,CAAC,aAAa,IAAI,4BAA4B,EAAE,CACtG,CAAA;QACL,CAAC;IACL,CAAC;IACD,qBAAqB,KAAI,CAAC;IAE1B,SAAS,CAAC,MAAqB,EAAE,MAAyB;QACtD,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,6BAA6B,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAElF,OAAO,OAAO,CAAA;IAClB,CAAC;IAED,iBAAiB,KAAI,CAAC;IAEtB,eAAe,KAAI,CAAC;IAEpB,WAAW,KAAI,CAAC;IAEhB,OAAO,KAAI,CAAC;IAEZ,cAAc,CAAC,EAAE,KAAK,EAAE,eAAe,EAAkB;QACrD,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,UAAU,CAAC;YAChC,IAAI,EAAE,sBAAsB;YAC5B,IAAI,EAAE;gBACF,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC;oBACpB,IAAI,EAAE,oCAAoC;oBAC1C,cAAc,EAAE,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,KAAK,CAAC,IAAI,EAAE;oBACxE,SAAS,EAAE,eAAe,CAAC,SAAS;oBACpC,MAAM,EAAE,eAAe,CAAC,cAAc;oBACtC,WAAW,EAAE,eAAe,CAAC,OAAO;iBACvC,CAAC;gBACF,8DAA8D;gBAC9D,SAAS,EAAE,UAAU;aACxB;SACJ,CAAC,CAAA;IACN,CAAC;IAED,iBAAiB,KAAI,CAAC;IAEtB,QAAQ,CAAC,MAAoB;QACzB,IAAI,CAAC,oBAAoB,CAAC,WAAW,GAAG,MAAM,CAAC,KAAK,CAAA;QAEpD,IAAI,CAAC,6BAA6B,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IAClE,CAAC;IAED,WAAW,CAAC,MAAuB;QAC/B,IAAI,CAAC,oBAAoB,CAAC,sBAAsB,CAAC;YAC7C,IAAI,EAAE,8BAAsB,CAAC,qBAAqB;YAClD,IAAI,EAAE,EAAE;SACX,CAAC,CAAA;QAEF,IAAI,CAAC,oBAAoB,CAAC,WAAW,GAAG,MAAM,CAAC,KAAK,CAAA;QAEpD,IAAI,CAAC,oBAAoB,CAAC,sBAAsB,CAAC;YAC7C,IAAI,EAAE,8BAAsB,CAAC,sBAAsB;YACnD,IAAI,EAAE,EAAE;SACX,CAAC,CAAA;IACN,CAAC;IAED,WAAW,CAAC,MAAuB;QAC/B,IAAI,IAAI,CAAC,oBAAoB,CAAC,WAAW,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC;YACzD,IAAI,CAAC,oBAAoB,CAAC,sBAAsB,CAAC;gBAC7C,IAAI,EAAE,8BAAsB,CAAC,qBAAqB;gBAClD,IAAI,EAAE,EAAE;aACX,CAAC,CAAA;YACF,IAAI,CAAC,oBAAoB,CAAC,WAAW,GAAG,SAAS,CAAA;QACrD,CAAC;QAED,IAAI,CAAC,6BAA6B,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAC9D,IAAI,CAAC,oBAAoB,CAAC,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IAC9D,CAAC;IAED,aAAa,CAAC,MAAyB,EAAE,kBAAqC;QAC1E,QAAQ,MAAM,CAAC,WAAW,EAAE,CAAC;YACzB,KAAK,0BAAW,CAAC,KAAK,CAAC,CAAC,CAAC;gBACrB,MAAM,aAAa,GAAG,IAAI,CAAC,6BAA6B,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;gBAEjF,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC;oBACrC,IAAI,EAAE,8BAAsB,CAAC,UAAU;oBACvC,IAAI,EAAE;wBACF,oBAAoB,EAAE,MAAM,CAAC,WAAW;qBAC3C;iBACJ,CAAC,CAAA;gBAEF,IAAI,CAAC,oBAAoB,CAAC,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;gBAE1D,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE,CAAA;gBAE3B,OAAO,EAAE,CAAA;YACb,CAAC;YAED,KAAK,0BAAW,CAAC,IAAI;gBACjB,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC;oBACrC,IAAI,EAAE,8BAAsB,CAAC,UAAU;oBACvC,IAAI,EAAE;wBACF,oBAAoB,EAAE,MAAM,CAAC,WAAW;qBAC3C;iBACJ,CAAC,CAAA;gBACF,OAAO;oBACH,SAAS,EAAE,IAAA,SAAI,GAAE;oBACjB,IAAI,EAAE,wBAAY;iBACrB,CAAA;YACL;gBACI,OAAO,EAAE,CAAA;QACjB,CAAC;IACL,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,MAAkB,EAAE,MAAyC;QAClF,MAAM,kBAAkB,GAAG,IAAI,CAAC,oBAAoB,CAAC,qBAAqB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAExF,IAAI,cAA8B,CAAA;QAElC,wDAAwD;QACxD,4CAA4C;QAC5C,IAAI,kBAAkB,EAAE,eAAe,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,IAAI,EAAE,CAAC,EAAE,CAAC;YACxE,MAAM,IAAI,CAAC,oBAAoB,CAAC,6BAA6B,CAAC,MAAM,CAAC,KAAK,EAAE;gBACxE,kBAAkB,EAAE,kBAAkB,CAAC,SAAU;gBACjD,wBAAwB,EAAE,2BAAmB,CAAC,aAAa;aAC9D,CAAC,CAAA;YAEF,cAAc,GAAG,kBAAkB,CAAA;QACvC,CAAC;aAAM,CAAC;YACJ,cAAc,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAA;YACxE,cAAc,CAAC,WAAW,GAAG,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,OAAO,CAAA;QACrG,CAAC;QAED,MAAM,CAAC,SAAS,CAAC;YACb,mBAAmB,EAAE,cAAc,EAAE,UAAU;YAC/C,4BAA4B,EAAE,cAAc,EAAE,mBAAmB,EAAE,YAAY;YAC/E,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;YAC1D,2BAA2B,EAAE,cAAc,EAAE,WAAW;YACxD,uBAAuB,EAAE,cAAc,CAAC,cAAc,IAAI,KAAK;YAC/D,oCAAoC,EAAE,cAAc,CAAC,qBAAqB,IAAI,CAAC;SAClF,CAAC,CAAA;QAEF,OAAO,cAAc,CAAA;IACzB,CAAC;IAED,KAAK,CAAC,2BAA2B,CAC7B,QAAkC,EAClC,MAA+B,EAC/B,kBAAoC;QAEpC,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC,SAAU,CAAA;QAC/C,MAAM,eAAe,GAAG,IAAI,iCAAe,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;QAE9D,IAAI,KAAK,EAAE,MAAM,SAAS,IAAI,QAAQ,CAAC,mBAAoB,EAAE,CAAC;YAC1D,MAAM,MAAM,GAAG,eAAe,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAA;YAE7D,yCAAyC;YACzC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBAClB,OAAO,MAAM,CAAA;YACjB,CAAC;YAED,IAAI,CAAC,IAAA,iBAAS,EAAC,kBAAkB,CAAC,EAAE,CAAC;gBACjC,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,0BAAe,EAAE,kBAAkB,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;YACtG,CAAC;QACL,CAAC;QAED,MAAM,CAAC,SAAS,CAAC;YACb,4BAA4B,EAAE,MAAM,CAAC,cAAc,EAAE;YACrD,sBAAsB,EAAE,eAAe,CAAC,WAAW,CAAC,mBAAmB;YACvE,wBAAwB,EAAE,eAAe,CAAC,WAAW,CAAC,kBAAkB;YACxE,wBAAwB,EAAE,eAAe,CAAC,WAAW,CAAC,0BAA0B;YAChF,uBAAuB,EAAE,eAAe,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC;SAC7D,CAAC,CAAA;QAEF,OAAO,eAAe,CAAC,SAAS,EAAE,CAAA;IACtC,CAAC;IAED,mBAAmB,GAAG,KAAK,IAAI,EAAE;QAC7B,IAAI,CAAC;YACD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,gBAAgB,CAAC,8CAAuB,CAAC,CAAA;YAC5F,IAAI,OAAO,EAAE,CAAC;gBACV,IAAI,CAAC,iBAAiB,GAAG,oBAAS,CAAC,gBAAgB,CAAC,OAAO,CAAC,aAAa,CAAC,CAAA;gBAC1E,IAAI,CAAC,IAAI,CAAC,qCAAqC,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAA;gBACxE;;;kBAGE;gBACF,kDAAkD;gBAClD,sGAAsG;gBACtG,MAAM,yBAAyB,GAAG,OAAO,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAA;gBAC1F,IAAI,CAAC,iBAAiB,CAAC,sBAAsB,CAAC,yBAAyB,CAAC,CAAA;YAC5E,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,IAAI,CAAC,IAAI,CAAC,8BAA8B,KAAK,EAAE,CAAC,CAAA;QACpD,CAAC;IACL,CAAC,CAAA;IAED,IAAI,CAAC,GAAG,QAAkB;QACtB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;IAClD,CAAC;CACJ;AA/aD,sDA+aC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Copied from ../qChatServer.ts for the purpose of developing a divergent implementation.
3
+ * Will be deleted or merged.
4
+ */
5
+ import { Server } from '@aws/language-server-runtimes/server-interface';
6
+ export declare const QAgenticChatServer: () => Server;
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+ /**
3
+ * Copied from ../qChatServer.ts for the purpose of developing a divergent implementation.
4
+ * Will be deleted or merged.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.QAgenticChatServer = void 0;
8
+ const agenticChatController_1 = require("./agenticChatController");
9
+ const chatSessionManagementService_1 = require("../chat/chatSessionManagementService");
10
+ const quickActions_1 = require("../chat/quickActions");
11
+ const telemetryService_1 = require("../telemetryService");
12
+ const telemetryUtils_1 = require("../utilities/telemetryUtils");
13
+ const AmazonQTokenServiceManager_1 = require("../amazonQServiceManager/AmazonQTokenServiceManager");
14
+ const errors_1 = require("../amazonQServiceManager/errors");
15
+ const utils_1 = require("../utils");
16
+ const QAgenticChatServer =
17
+ // prettier-ignore
18
+ () => features => {
19
+ const { chat, credentialsProvider, telemetry, logging, lsp, runtime } = features;
20
+ let amazonQServiceManager;
21
+ let chatController;
22
+ let chatSessionManagementService;
23
+ let telemetryService;
24
+ lsp.addInitializer((params) => {
25
+ return {
26
+ capabilities: {},
27
+ awsServerCapabilities: {
28
+ chatOptions: {
29
+ quickActions: {
30
+ quickActionsCommandGroups: [
31
+ {
32
+ commands: [quickActions_1.HELP_QUICK_ACTION, quickActions_1.CLEAR_QUICK_ACTION],
33
+ },
34
+ ],
35
+ },
36
+ },
37
+ },
38
+ };
39
+ });
40
+ const updateConfigurationHandler = async () => {
41
+ await amazonQServiceManager.handleDidChangeConfiguration();
42
+ await chatController.updateConfiguration();
43
+ };
44
+ lsp.onInitialized(async () => {
45
+ // Initialize service manager and inject it to chatSessionManagementService to pass it down
46
+ amazonQServiceManager = AmazonQTokenServiceManager_1.AmazonQTokenServiceManager.getInstance(features);
47
+ chatSessionManagementService = chatSessionManagementService_1.ChatSessionManagementService
48
+ .getInstance()
49
+ .withAmazonQServiceManager(amazonQServiceManager);
50
+ telemetryService = new telemetryService_1.TelemetryService(amazonQServiceManager, credentialsProvider, telemetry, logging);
51
+ const clientParams = (0, utils_1.safeGet)(lsp.getClientInitializeParams(), new errors_1.AmazonQServiceInitializationError('TelemetryService initialized before LSP connection was initialized.'));
52
+ telemetryService.updateUserContext((0, telemetryUtils_1.makeUserContextObject)(clientParams, runtime.platform, 'CHAT'));
53
+ chatController = new agenticChatController_1.AgenticChatController(chatSessionManagementService, features, telemetryService);
54
+ await updateConfigurationHandler();
55
+ });
56
+ lsp.didChangeConfiguration(updateConfigurationHandler);
57
+ chat.onTabAdd(params => {
58
+ logging.log(`Adding tab: ${params.tabId}`);
59
+ return chatController.onTabAdd(params);
60
+ });
61
+ chat.onTabChange(params => {
62
+ logging.log(`Changing to tab: ${params.tabId}`);
63
+ return chatController.onTabChange(params);
64
+ });
65
+ chat.onTabRemove(params => {
66
+ logging.log(`Removing tab: ${params.tabId}`);
67
+ return chatController.onTabRemove(params);
68
+ });
69
+ chat.onEndChat((...params) => {
70
+ logging.log('Received end chat request');
71
+ return chatController.onEndChat(...params);
72
+ });
73
+ chat.onChatPrompt((...params) => {
74
+ logging.log('Received chat prompt');
75
+ return chatController.onChatPrompt(...params);
76
+ });
77
+ chat.onQuickAction((...params) => {
78
+ return chatController.onQuickAction(...params);
79
+ });
80
+ chat.onSendFeedback(params => {
81
+ return chatController.onSendFeedback(params);
82
+ });
83
+ chat.onCodeInsertToCursorPosition(params => {
84
+ return chatController.onCodeInsertToCursorPosition(params);
85
+ });
86
+ logging.log('Q Chat server has been initialized');
87
+ return () => {
88
+ chatController?.dispose();
89
+ };
90
+ };
91
+ exports.QAgenticChatServer = QAgenticChatServer;
92
+ //# sourceMappingURL=qAgenticChatServer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qAgenticChatServer.js","sourceRoot":"","sources":["../../../src/language-server/agenticChat/qAgenticChatServer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ /*!
2
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+ import { MynahIcons, Status } from '@aws/mynah-ui';
6
+ import { FollowUpTypes, NewFileInfo } from '../shared/types';
7
+ export declare const docChat = "docChat";
8
+ export declare const docScheme = "aws-doc";
9
+ export declare const featureName = "Amazon Q Doc Generation";
10
+ export declare function getFileSummaryPercentage(input: string): number;
11
+ export declare enum DocGenerationStep {
12
+ UPLOAD_TO_S3 = 0,
13
+ SUMMARIZING_FILES = 1,
14
+ GENERATING_ARTIFACTS = 2
15
+ }
16
+ export declare const docGenerationProgressMessage: (currentStep: DocGenerationStep, mode: Mode) => string;
17
+ export declare const docGenerationSuccessMessage: (mode: Mode) => string;
18
+ export declare const docRejectConfirmation = "Your changes have been discarded.";
19
+ export declare const FolderSelectorFollowUps: {
20
+ icon: MynahIcons;
21
+ pillText: string;
22
+ prompt: string;
23
+ status: Status;
24
+ type: FollowUpTypes;
25
+ }[];
26
+ export declare const CodeChangeFollowUps: {
27
+ pillText: string;
28
+ prompt: string;
29
+ type: FollowUpTypes;
30
+ icon: MynahIcons;
31
+ status: Status;
32
+ }[];
33
+ export declare const NewSessionFollowUps: {
34
+ pillText: string;
35
+ type: FollowUpTypes;
36
+ status: Status;
37
+ }[];
38
+ export declare const SynchronizeDocumentation: {
39
+ pillText: string;
40
+ prompt: string;
41
+ type: FollowUpTypes;
42
+ };
43
+ export declare const EditDocumentation: {
44
+ pillText: string;
45
+ prompt: string;
46
+ type: FollowUpTypes;
47
+ };
48
+ export declare enum Mode {
49
+ NONE = "None",
50
+ CREATE = "Create",
51
+ SYNC = "Sync",
52
+ EDIT = "Edit"
53
+ }
54
+ /**
55
+ *
56
+ * @param paths file paths
57
+ * @returns the path to a README.md, or undefined if none exist
58
+ */
59
+ export declare const findReadmePath: (paths?: NewFileInfo[]) => NewFileInfo | undefined;