@aws/lsp-codewhisperer 0.0.80 → 0.0.82

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 (62) hide show
  1. package/CHANGELOG.md +38 -0
  2. package/out/language-server/agenticChat/agenticChatController.js +80 -2
  3. package/out/language-server/agenticChat/agenticChatController.js.map +1 -1
  4. package/out/language-server/agenticChat/context/additionalContextProvider.d.ts +1 -1
  5. package/out/language-server/agenticChat/context/additionalContextProvider.js +50 -3
  6. package/out/language-server/agenticChat/context/additionalContextProvider.js.map +1 -1
  7. package/out/language-server/agenticChat/context/memorybank/memoryBankController.d.ts +104 -0
  8. package/out/language-server/agenticChat/context/memorybank/memoryBankController.js +680 -0
  9. package/out/language-server/agenticChat/context/memorybank/memoryBankController.js.map +1 -0
  10. package/out/language-server/agenticChat/context/memorybank/memoryBankPrompts.d.ts +14 -0
  11. package/out/language-server/agenticChat/context/memorybank/memoryBankPrompts.js +156 -0
  12. package/out/language-server/agenticChat/context/memorybank/memoryBankPrompts.js.map +1 -0
  13. package/out/language-server/agenticChat/tools/mcp/agentPermissionManager.d.ts +50 -7
  14. package/out/language-server/agenticChat/tools/mcp/agentPermissionManager.js +291 -35
  15. package/out/language-server/agenticChat/tools/mcp/agentPermissionManager.js.map +1 -1
  16. package/out/language-server/agenticChat/tools/mcp/mcpEventHandler.js +44 -7
  17. package/out/language-server/agenticChat/tools/mcp/mcpEventHandler.js.map +1 -1
  18. package/out/language-server/agenticChat/tools/mcp/mcpManager.d.ts +14 -2
  19. package/out/language-server/agenticChat/tools/mcp/mcpManager.js +144 -53
  20. package/out/language-server/agenticChat/tools/mcp/mcpManager.js.map +1 -1
  21. package/out/language-server/agenticChat/tools/mcp/mcpTypes.js +1 -1
  22. package/out/language-server/agenticChat/tools/mcp/mcpTypes.js.map +1 -1
  23. package/out/language-server/agenticChat/tools/mcp/mcpUtils.d.ts +2 -1
  24. package/out/language-server/agenticChat/tools/mcp/mcpUtils.js +87 -54
  25. package/out/language-server/agenticChat/tools/mcp/mcpUtils.js.map +1 -1
  26. package/out/language-server/agenticChat/tools/qCodeAnalysis/codeReview.js +16 -6
  27. package/out/language-server/agenticChat/tools/qCodeAnalysis/codeReview.js.map +1 -1
  28. package/out/language-server/agenticChat/tools/qCodeAnalysis/codeReviewConstants.js +2 -2
  29. package/out/language-server/agenticChat/tools/qCodeAnalysis/codeReviewConstants.js.map +1 -1
  30. package/out/language-server/agenticChat/tools/qCodeAnalysis/codeReviewTypes.d.ts +1 -0
  31. package/out/language-server/agenticChat/tools/qCodeAnalysis/codeReviewUtils.d.ts +1 -1
  32. package/out/language-server/agenticChat/tools/qCodeAnalysis/codeReviewUtils.js +3 -1
  33. package/out/language-server/agenticChat/tools/qCodeAnalysis/codeReviewUtils.js.map +1 -1
  34. package/out/language-server/agenticChat/tools/toolServer.js +1 -0
  35. package/out/language-server/agenticChat/tools/toolServer.js.map +1 -1
  36. package/out/language-server/chat/telemetry/chatTelemetryController.d.ts +1 -1
  37. package/out/language-server/chat/telemetry/chatTelemetryController.js +2 -1
  38. package/out/language-server/chat/telemetry/chatTelemetryController.js.map +1 -1
  39. package/out/language-server/inline-completion/codeWhispererServer.js +9 -7
  40. package/out/language-server/inline-completion/codeWhispererServer.js.map +1 -1
  41. package/out/language-server/inline-completion/editCompletionHandler.d.ts +1 -1
  42. package/out/language-server/inline-completion/editCompletionHandler.js +7 -4
  43. package/out/language-server/inline-completion/editCompletionHandler.js.map +1 -1
  44. package/out/language-server/inline-completion/session/sessionManager.d.ts +9 -3
  45. package/out/language-server/inline-completion/session/sessionManager.js +23 -6
  46. package/out/language-server/inline-completion/session/sessionManager.js.map +1 -1
  47. package/out/language-server/inline-completion/telemetry.js +1 -1
  48. package/out/language-server/netTransform/artifactManager.js +0 -11
  49. package/out/language-server/netTransform/artifactManager.js.map +1 -1
  50. package/out/shared/amazonQServiceManager/AmazonQTokenServiceManager.js +3 -1
  51. package/out/shared/amazonQServiceManager/AmazonQTokenServiceManager.js.map +1 -1
  52. package/out/shared/codeWhispererService.d.ts +2 -2
  53. package/out/shared/codeWhispererService.js +4 -4
  54. package/out/shared/codeWhispererService.js.map +1 -1
  55. package/out/shared/supplementalContextUtil/supplementalContextUtil.js +4 -4
  56. package/out/shared/supplementalContextUtil/supplementalContextUtil.js.map +1 -1
  57. package/out/shared/telemetry/telemetryService.d.ts +1 -0
  58. package/out/shared/telemetry/telemetryService.js +14 -10
  59. package/out/shared/telemetry/telemetryService.js.map +1 -1
  60. package/out/shared/testUtils.js +2 -0
  61. package/out/shared/testUtils.js.map +1 -1
  62. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,43 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.0.82](https://github.com/aws/language-servers/compare/lsp-codewhisperer/v0.0.81...lsp-codewhisperer/v0.0.82) (2025-09-24)
4
+
5
+
6
+ ### Features
7
+
8
+ * memory bank support ([#2314](https://github.com/aws/language-servers/issues/2314)) ([0e215fc](https://github.com/aws/language-servers/commit/0e215fc0e475b4c40a8237492371716982d4d532))
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * **amazonq:** fix to emit event for same region profile switch ([#2320](https://github.com/aws/language-servers/issues/2320)) ([aa1a482](https://github.com/aws/language-servers/commit/aa1a4827871a1cfa9fcd76f7ba420107a5d44b01))
14
+ * **amazonq:** reduce number of findings to 30 as a quick fix ([#2318](https://github.com/aws/language-servers/issues/2318)) ([b31cf67](https://github.com/aws/language-servers/commit/b31cf67ddc68a2ca2e0a4ebd9ee94d0545afc656))
15
+ * **amazonq:** removing a bracket from full review message ([#2317](https://github.com/aws/language-servers/issues/2317)) ([6d321ac](https://github.com/aws/language-servers/commit/6d321ac6f318c27b01f9f97eee45a62798a60cf5))
16
+ * emit error code on failed user messages ([#2322](https://github.com/aws/language-servers/issues/2322)) ([a949ac0](https://github.com/aws/language-servers/commit/a949ac0a9d7a4dbce5fb7c8480952cee0a674b55))
17
+ * inline latency telemetry should account for preprocess time ([#2323](https://github.com/aws/language-servers/issues/2323)) ([68c6d14](https://github.com/aws/language-servers/commit/68c6d1465a3325612052740496cc1e6e50f56b9a))
18
+ * userTriggerDecision STE suggestionType validation error ([#2313](https://github.com/aws/language-servers/issues/2313)) ([8f30ac0](https://github.com/aws/language-servers/commit/8f30ac0ec5f4f7b7c343f5e889aec64a282897ea))
19
+
20
+ ## [0.0.81](https://github.com/aws/language-servers/compare/lsp-codewhisperer/v0.0.80...lsp-codewhisperer/v0.0.81) (2025-09-19)
21
+
22
+
23
+ ### Bug Fixes
24
+
25
+ * **amazonq:** fix for delete mcp for mcp config, disable and create corresponding agent file ([#2298](https://github.com/aws/language-servers/issues/2298)) ([8641860](https://github.com/aws/language-servers/commit/8641860295c4e089d09154fa5411c305f2f4ecce))
26
+ * **amazonq:** fix for legacy mcp permission consistentcy and config update ([#2300](https://github.com/aws/language-servers/issues/2300)) ([c8aa7bd](https://github.com/aws/language-servers/commit/c8aa7bd3e9d39ed327972bbc950ad72e8e401581))
27
+ * **amazonq:** fix for mcp permissions read/write inconsistencies ([#2296](https://github.com/aws/language-servers/issues/2296)) ([c7a9a8e](https://github.com/aws/language-servers/commit/c7a9a8e1ba5c1a284d661e683dd46133860a1d3d))
28
+ * **amazonq:** fix to add filewatcher for mcp config files ([#2295](https://github.com/aws/language-servers/issues/2295)) ([fcee77c](https://github.com/aws/language-servers/commit/fcee77c1b06e69f9096d8e98a0cfcc42d7fddb01))
29
+ * **amazonq:** fix to normlize workspace paths in windows ([#2306](https://github.com/aws/language-servers/issues/2306)) ([fab073c](https://github.com/aws/language-servers/commit/fab073c855109b15005bfd880894471c35652ffc))
30
+ * **amazonq:** improve messaging for code review ([#2303](https://github.com/aws/language-servers/issues/2303)) ([60bc68d](https://github.com/aws/language-servers/commit/60bc68d1d4d2ce8a0373be6ce7551e961fc2cdb8))
31
+ * **amazonq:** support mcp config files for backwards compatbility ([#2292](https://github.com/aws/language-servers/issues/2292)) ([41c99af](https://github.com/aws/language-servers/commit/41c99af02b3f415e39898f11c3c21ac530f9c406))
32
+ * inline UTD empty cases dont differentiate Edit and Completion ([#2287](https://github.com/aws/language-servers/issues/2287)) ([84e2c8c](https://github.com/aws/language-servers/commit/84e2c8c12f5d828192a302fa11483063d33b059c))
33
+ * inline UTD telemetry empty cases dont differentiate Edit and Completion ([#2288](https://github.com/aws/language-servers/issues/2288)) ([d207b6e](https://github.com/aws/language-servers/commit/d207b6e9dfded650c6f65c675ee45c52f8222571))
34
+ * quick fix for repeated logging from squashed commit ([#2291](https://github.com/aws/language-servers/issues/2291)) ([36f3eed](https://github.com/aws/language-servers/commit/36f3eedd1cad3fca4fc48792ba40b6470f733bfa))
35
+
36
+
37
+ ### Reverts
38
+
39
+ * inline UTD telemetry empty cases dont differentiate Edit and Completion ([#2288](https://github.com/aws/language-servers/issues/2288)) ([#2297](https://github.com/aws/language-servers/issues/2297)) ([eb081e6](https://github.com/aws/language-servers/commit/eb081e6bc6bef4182ab89e295bff97c4e828096b))
40
+
3
41
  ## [0.0.80](https://github.com/aws/language-servers/compare/lsp-codewhisperer/v0.0.79...lsp-codewhisperer/v0.0.80) (2025-09-16)
4
42
 
5
43
 
@@ -68,6 +68,7 @@ const constants_3 = require("../../shared/constants");
68
68
  const IdleWorkspaceManager_1 = require("../workspaceContext/IdleWorkspaceManager");
69
69
  const escapeHTML = require("escape-html");
70
70
  const semanticSearch_1 = require("./tools/workspaceContext/semanticSearch");
71
+ const memoryBankController_1 = require("./context/memorybank/memoryBankController");
71
72
  class AgenticChatController {
72
73
  #features;
73
74
  #chatSessionManagementService;
@@ -80,6 +81,7 @@ class AgenticChatController {
80
81
  #chatHistoryDb;
81
82
  #additionalContextProvider;
82
83
  #contextCommandsProvider;
84
+ #memoryBankController;
83
85
  #stoppedToolUses = new Set();
84
86
  #userWrittenCodeTracker;
85
87
  #toolUseStartTimes = {};
@@ -154,6 +156,7 @@ class AgenticChatController {
154
156
  this.#mcpEventHandler = new mcpEventHandler_1.McpEventHandler(features, telemetryService);
155
157
  this.#origin = (0, utils_2.getOriginFromClientInfo)((0, utils_2.getClientName)(this.#features.lsp.getClientInitializeParams()));
156
158
  this.#activeUserTracker = activeUserTracker_1.ActiveUserTracker.getInstance(this.#features);
159
+ this.#memoryBankController = memoryBankController_1.MemoryBankController.getInstance(features);
157
160
  }
158
161
  async onExecuteCommand(params, _token) {
159
162
  this.#log(`onExecuteCommand: ${params.command}`);
@@ -564,6 +567,80 @@ class AgenticChatController {
564
567
  // Phase 1: Initial Setup - This happens only once
565
568
  params.prompt.prompt = (0, utils_2.sanitizeInput)(params.prompt.prompt || '');
566
569
  IdleWorkspaceManager_1.IdleWorkspaceManager.recordActivityTimestamp();
570
+ // Memory Bank Creation Flow - Delegate to MemoryBankController
571
+ if (this.#memoryBankController.isMemoryBankCreationRequest(params.prompt.prompt)) {
572
+ this.#features.logging.info(`Memory Bank creation request detected for tabId: ${params.tabId}`);
573
+ // Store original prompt to prevent data loss on failure
574
+ const originalPrompt = params.prompt.prompt;
575
+ try {
576
+ const workspaceFolders = lsp_core_1.workspaceUtils.getWorkspaceFolderPaths(this.#features.workspace);
577
+ const workspaceUri = workspaceFolders.length > 0 ? workspaceFolders[0] : '';
578
+ if (!workspaceUri) {
579
+ throw new Error('No workspace folder found for Memory Bank creation');
580
+ }
581
+ // Check if memory bank already exists to provide appropriate user feedback
582
+ const memoryBankExists = await this.#memoryBankController.memoryBankExists(workspaceUri);
583
+ const actionType = memoryBankExists ? 'Regenerating' : 'Generating';
584
+ this.#features.logging.info(`${actionType} Memory Bank for workspace: ${workspaceUri}`);
585
+ const resultStream = this.#getChatResultStream(params.partialResultToken);
586
+ await resultStream.writeResultBlock({
587
+ body: `Preparing to analyze your project...`,
588
+ type: 'answer',
589
+ messageId: crypto.randomUUID(),
590
+ });
591
+ const comprehensivePrompt = await this.#memoryBankController.prepareComprehensiveMemoryBankPrompt(workspaceUri, async (prompt) => {
592
+ // Direct LLM call for ranking - no agentic loop
593
+ try {
594
+ if (!this.#serviceManager) {
595
+ throw new Error('amazonQServiceManager is not initialized');
596
+ }
597
+ const client = this.#serviceManager.getStreamingClient();
598
+ const requestInput = {
599
+ conversationState: {
600
+ chatTriggerType: codewhisperer_streaming_1.ChatTriggerType.MANUAL,
601
+ currentMessage: {
602
+ userInputMessage: {
603
+ content: prompt,
604
+ },
605
+ },
606
+ },
607
+ };
608
+ const response = await client.sendMessage(requestInput);
609
+ let responseContent = '';
610
+ const maxResponseSize = 50000; // 50KB limit
611
+ if (response.sendMessageResponse) {
612
+ for await (const chatEvent of response.sendMessageResponse) {
613
+ if (chatEvent.assistantResponseEvent?.content) {
614
+ responseContent += chatEvent.assistantResponseEvent.content;
615
+ if (responseContent.length > maxResponseSize) {
616
+ this.#features.logging.warn('LLM response exceeded size limit, truncating');
617
+ break;
618
+ }
619
+ }
620
+ }
621
+ }
622
+ return responseContent.trim();
623
+ }
624
+ catch (error) {
625
+ this.#features.logging.error(`Memory Bank LLM ranking failed: ${error}`);
626
+ return ''; // Empty string triggers TF-IDF fallback
627
+ }
628
+ });
629
+ // Only update prompt if we got a valid comprehensive prompt
630
+ if (comprehensivePrompt && comprehensivePrompt.trim().length > 0) {
631
+ params.prompt.prompt = comprehensivePrompt;
632
+ }
633
+ else {
634
+ this.#features.logging.warn('Empty comprehensive prompt received, using original prompt');
635
+ params.prompt.prompt = originalPrompt;
636
+ }
637
+ }
638
+ catch (error) {
639
+ this.#features.logging.error(`Memory Bank preparation failed: ${error}`);
640
+ // Restore original prompt to ensure no data loss
641
+ params.prompt.prompt = originalPrompt;
642
+ }
643
+ }
567
644
  const maybeDefaultResponse = !params.prompt.command && (0, utils_1.getDefaultChatResponse)(params.prompt.prompt);
568
645
  if (maybeDefaultResponse) {
569
646
  return maybeDefaultResponse;
@@ -619,7 +696,7 @@ class AgenticChatController {
619
696
  await this.#telemetryController.emitAddMessageMetric(params.tabId, metric.metric, 'Cancelled');
620
697
  });
621
698
  session.setConversationType('AgenticChat');
622
- const additionalContext = await this.#additionalContextProvider.getAdditionalContext(triggerContext, params.tabId, params.context);
699
+ const additionalContext = await this.#additionalContextProvider.getAdditionalContext(triggerContext, params.tabId, params.context, params.prompt.prompt);
623
700
  // Add active file to context list if it's not already there
624
701
  const activeFile = triggerContext.text &&
625
702
  triggerContext.relativeFilePath &&
@@ -2506,7 +2583,8 @@ class AgenticChatController {
2506
2583
  metric.metric.requestIds = [requestID];
2507
2584
  metric.metric.cwsprChatMessageId = errorMessageId;
2508
2585
  metric.metric.cwsprChatConversationId = conversationId;
2509
- await this.#telemetryController.emitAddMessageMetric(tabId, metric.metric, 'Failed', errorMessage);
2586
+ const errorCode = err.code ?? '';
2587
+ await this.#telemetryController.emitAddMessageMetric(tabId, metric.metric, 'Failed', errorMessage, errorCode);
2510
2588
  if ((0, utils_2.isUsageLimitError)(err)) {
2511
2589
  if (this.#paidTierMode !== 'paidtier') {
2512
2590
  this.setPaidTierMode(tabId, 'freetier-limit');