@aws/lsp-codewhisperer 0.0.81 → 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.
- package/CHANGELOG.md +17 -0
- package/out/language-server/agenticChat/agenticChatController.js +80 -2
- package/out/language-server/agenticChat/agenticChatController.js.map +1 -1
- package/out/language-server/agenticChat/context/additionalContextProvider.d.ts +1 -1
- package/out/language-server/agenticChat/context/additionalContextProvider.js +50 -3
- package/out/language-server/agenticChat/context/additionalContextProvider.js.map +1 -1
- package/out/language-server/agenticChat/context/memorybank/memoryBankController.d.ts +104 -0
- package/out/language-server/agenticChat/context/memorybank/memoryBankController.js +680 -0
- package/out/language-server/agenticChat/context/memorybank/memoryBankController.js.map +1 -0
- package/out/language-server/agenticChat/context/memorybank/memoryBankPrompts.d.ts +14 -0
- package/out/language-server/agenticChat/context/memorybank/memoryBankPrompts.js +156 -0
- package/out/language-server/agenticChat/context/memorybank/memoryBankPrompts.js.map +1 -0
- package/out/language-server/agenticChat/tools/qCodeAnalysis/codeReview.js +3 -3
- package/out/language-server/agenticChat/tools/qCodeAnalysis/codeReview.js.map +1 -1
- package/out/language-server/agenticChat/tools/qCodeAnalysis/codeReviewConstants.js +1 -1
- package/out/language-server/chat/telemetry/chatTelemetryController.d.ts +1 -1
- package/out/language-server/chat/telemetry/chatTelemetryController.js +2 -1
- package/out/language-server/chat/telemetry/chatTelemetryController.js.map +1 -1
- package/out/language-server/inline-completion/codeWhispererServer.js +6 -4
- package/out/language-server/inline-completion/codeWhispererServer.js.map +1 -1
- package/out/language-server/inline-completion/editCompletionHandler.d.ts +1 -1
- package/out/language-server/inline-completion/editCompletionHandler.js +6 -3
- package/out/language-server/inline-completion/editCompletionHandler.js.map +1 -1
- package/out/language-server/inline-completion/session/sessionManager.d.ts +7 -1
- package/out/language-server/inline-completion/session/sessionManager.js +20 -4
- package/out/language-server/inline-completion/session/sessionManager.js.map +1 -1
- package/out/shared/amazonQServiceManager/AmazonQTokenServiceManager.js +2 -0
- package/out/shared/amazonQServiceManager/AmazonQTokenServiceManager.js.map +1 -1
- package/out/shared/codeWhispererService.d.ts +2 -2
- package/out/shared/codeWhispererService.js +4 -4
- package/out/shared/codeWhispererService.js.map +1 -1
- package/out/shared/supplementalContextUtil/supplementalContextUtil.js +4 -4
- package/out/shared/supplementalContextUtil/supplementalContextUtil.js.map +1 -1
- package/out/shared/telemetry/telemetryService.d.ts +1 -0
- package/out/shared/telemetry/telemetryService.js +10 -8
- package/out/shared/telemetry/telemetryService.js.map +1 -1
- package/out/shared/testUtils.js +2 -0
- package/out/shared/testUtils.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,22 @@
|
|
|
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
|
+
|
|
3
20
|
## [0.0.81](https://github.com/aws/language-servers/compare/lsp-codewhisperer/v0.0.80...lsp-codewhisperer/v0.0.81) (2025-09-19)
|
|
4
21
|
|
|
5
22
|
|
|
@@ -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
|
-
|
|
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');
|