@aws/lsp-codewhisperer 0.0.29 → 0.0.31
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 +42 -0
- package/CONTRIBUTING.md +28 -0
- package/README.md +1 -1
- package/out/client/streamingClient/codewhispererStreamingClient.js +1 -0
- package/out/client/streamingClient/codewhispererStreamingClient.js.map +1 -1
- package/out/index.d.ts +6 -5
- package/out/index.js +7 -5
- package/out/index.js.map +1 -1
- package/out/language-server/agenticChat/agenticChatController.d.ts +40 -0
- package/out/language-server/agenticChat/agenticChatController.js +414 -0
- package/out/language-server/agenticChat/agenticChatController.js.map +1 -0
- package/out/language-server/agenticChat/qAgenticChatServer.d.ts +6 -0
- package/out/language-server/agenticChat/qAgenticChatServer.js +96 -0
- package/out/language-server/agenticChat/qAgenticChatServer.js.map +1 -0
- package/out/language-server/agenticChat/tools/fsRead.d.ts +38 -0
- package/out/language-server/agenticChat/tools/fsRead.js +96 -0
- package/out/language-server/agenticChat/tools/fsRead.js.map +1 -0
- package/out/language-server/agenticChat/tools/fsWrite.d.ts +73 -0
- package/out/language-server/agenticChat/tools/fsWrite.js +128 -0
- package/out/language-server/agenticChat/tools/fsWrite.js.map +1 -0
- package/out/language-server/agenticChat/tools/toolServer.d.ts +2 -0
- package/out/language-server/agenticChat/tools/toolServer.js +14 -0
- package/out/language-server/agenticChat/tools/toolServer.js.map +1 -0
- package/out/language-server/agenticChat/tools/toolShared.d.ts +7 -0
- package/out/language-server/agenticChat/tools/toolShared.js +5 -0
- package/out/language-server/agenticChat/tools/toolShared.js.map +1 -0
- package/out/language-server/chat/agents/docGeneration/constants.d.ts +59 -0
- package/out/language-server/chat/agents/docGeneration/constants.js +147 -0
- package/out/language-server/chat/agents/docGeneration/constants.js.map +1 -0
- package/out/language-server/chat/agents/docGeneration/errors.d.ts +29 -0
- package/out/language-server/chat/agents/docGeneration/errors.js +67 -0
- package/out/language-server/chat/agents/docGeneration/errors.js.map +1 -0
- package/out/language-server/chat/agents/shared/i18n.d.ts +1 -0
- package/out/language-server/chat/agents/shared/i18n.js +7 -0
- package/out/language-server/chat/agents/shared/i18n.js.map +1 -0
- package/out/language-server/chat/agents/shared/types.d.ts +55 -0
- package/out/language-server/chat/agents/shared/types.js +46 -0
- package/out/language-server/chat/agents/shared/types.js.map +1 -0
- package/out/language-server/chat/chatController.d.ts +9 -6
- package/out/language-server/chat/chatController.js +74 -27
- package/out/language-server/chat/chatController.js.map +1 -1
- package/out/language-server/chat/chatEventParser.d.ts +2 -2
- package/out/language-server/chat/chatSessionManagementService.d.ts +1 -1
- package/out/language-server/chat/chatSessionService.d.ts +1 -1
- package/out/language-server/chat/chatSessionService.js +1 -3
- package/out/language-server/chat/chatSessionService.js.map +1 -1
- package/out/language-server/chat/contexts/documentContext.d.ts +2 -0
- package/out/language-server/chat/contexts/documentContext.js +15 -2
- package/out/language-server/chat/contexts/documentContext.js.map +1 -1
- package/out/language-server/chat/contexts/triggerContext.d.ts +5 -5
- package/out/language-server/chat/contexts/triggerContext.js +3 -3
- package/out/language-server/chat/contexts/triggerContext.js.map +1 -1
- package/out/language-server/{qChatServer.js → chat/qChatServer.js} +15 -11
- package/out/language-server/chat/qChatServer.js.map +1 -0
- package/out/language-server/chat/telemetry/chatTelemetryController.d.ts +3 -3
- package/out/language-server/chat/telemetry/chatTelemetryController.js +3 -3
- package/out/language-server/chat/telemetry/chatTelemetryController.js.map +1 -1
- package/out/language-server/chat/telemetry/clientTelemetry.js +1 -1
- package/out/language-server/chat/telemetry/clientTelemetry.js.map +1 -1
- package/out/language-server/chat/utils.js +1 -1
- package/out/language-server/chat/utils.js.map +1 -1
- package/out/language-server/configuration/qConfigurationServer.d.ts +2 -2
- package/out/language-server/configuration/qConfigurationServer.js +2 -2
- package/out/language-server/configuration/qConfigurationServer.js.map +1 -1
- package/out/language-server/{auto-trigger → inline-completion/auto-trigger}/autoTrigger.d.ts +1 -1
- package/out/language-server/inline-completion/auto-trigger/autoTrigger.js.map +1 -0
- package/out/language-server/{telemetry → inline-completion}/codeDiffTracker.js +1 -1
- package/out/language-server/inline-completion/codeDiffTracker.js.map +1 -0
- package/out/language-server/{telemetry → inline-completion}/codePercentage.d.ts +1 -1
- package/out/language-server/inline-completion/codePercentage.js.map +1 -0
- package/out/language-server/inline-completion/codeWhispererServer.d.ts +7 -0
- package/out/language-server/{codeWhispererServer.js → inline-completion/codeWhispererServer.js} +37 -75
- package/out/language-server/inline-completion/codeWhispererServer.js.map +1 -0
- package/out/language-server/inline-completion/mergeRightUtils.js.map +1 -0
- package/out/language-server/{session → inline-completion/session}/sessionManager.d.ts +3 -3
- package/out/language-server/inline-completion/session/sessionManager.js.map +1 -0
- package/out/language-server/netTransform/artifactManager.d.ts +7 -7
- package/out/language-server/netTransform/artifactManager.js +86 -46
- package/out/language-server/netTransform/artifactManager.js.map +1 -1
- package/out/language-server/netTransform/metrics.js +1 -1
- package/out/language-server/netTransform/metrics.js.map +1 -1
- package/out/language-server/netTransform/models.d.ts +12 -0
- package/out/language-server/netTransform/models.js.map +1 -1
- package/out/language-server/{netTransformServer.d.ts → netTransform/netTransformServer.d.ts} +1 -1
- package/out/language-server/{netTransformServer.js → netTransform/netTransformServer.js} +5 -5
- package/out/language-server/netTransform/netTransformServer.js.map +1 -0
- package/out/language-server/netTransform/tests/mockData.d.ts +2 -21
- package/out/language-server/netTransform/tests/mockData.js +16 -13
- package/out/language-server/netTransform/tests/mockData.js.map +1 -1
- package/out/language-server/netTransform/transformHandler.d.ts +3 -1
- package/out/language-server/netTransform/transformHandler.js +49 -15
- package/out/language-server/netTransform/transformHandler.js.map +1 -1
- package/out/language-server/{codeWhispererSecurityScanServer.js → securityScan/codeWhispererSecurityScanServer.js} +5 -5
- package/out/language-server/securityScan/codeWhispererSecurityScanServer.js.map +1 -0
- package/out/language-server/securityScan/dependencyGraph/commonUtil.js.map +1 -0
- package/out/language-server/securityScan/dependencyGraph/constants.js.map +1 -0
- package/out/language-server/securityScan/dependencyGraph/csharpDependencyGraph.js.map +1 -0
- package/out/language-server/securityScan/dependencyGraph/dependencyGraph.js.map +1 -0
- package/out/language-server/securityScan/dependencyGraph/dependencyGraphFactory.js.map +1 -0
- package/out/language-server/securityScan/securityScanHandler.d.ts +1 -1
- package/out/language-server/securityScan/securityScanHandler.js +1 -1
- package/out/language-server/securityScan/securityScanHandler.js.map +1 -1
- package/out/{language-server → shared}/amazonQServiceManager/AmazonQTokenServiceManager.d.ts +6 -3
- package/out/{language-server → shared}/amazonQServiceManager/AmazonQTokenServiceManager.js +48 -84
- package/out/shared/amazonQServiceManager/AmazonQTokenServiceManager.js.map +1 -0
- package/out/shared/amazonQServiceManager/BaseAmazonQServiceManager.d.ts +7 -0
- package/out/shared/amazonQServiceManager/BaseAmazonQServiceManager.js.map +1 -0
- package/out/shared/amazonQServiceManager/configurationUtils.d.ts +45 -0
- package/out/shared/amazonQServiceManager/configurationUtils.js +130 -0
- package/out/shared/amazonQServiceManager/configurationUtils.js.map +1 -0
- package/out/shared/amazonQServiceManager/errors.js.map +1 -0
- package/out/shared/amazonQServiceManager/factories.d.ts +15 -0
- package/out/shared/amazonQServiceManager/factories.js +47 -0
- package/out/shared/amazonQServiceManager/factories.js.map +1 -0
- package/out/{language-server → shared}/amazonQServiceManager/qDeveloperProfiles.d.ts +1 -3
- package/out/{language-server → shared}/amazonQServiceManager/qDeveloperProfiles.js +2 -2
- package/out/shared/amazonQServiceManager/qDeveloperProfiles.js.map +1 -0
- package/out/shared/codeWhispererService.js.map +1 -0
- package/out/{language-server → shared}/constants.d.ts +5 -0
- package/out/shared/constants.js +16 -0
- package/out/shared/constants.js.map +1 -0
- package/out/shared/languageDetection.js.map +1 -0
- package/out/shared/models/constants.js.map +1 -0
- package/out/shared/models/model.js.map +1 -0
- package/out/{language-server → shared}/proxy-server.d.ts +1 -0
- package/out/shared/proxy-server.js +21 -0
- package/out/shared/proxy-server.js.map +1 -0
- package/out/shared/streamingClientService.d.ts +10 -0
- package/out/shared/streamingClientService.js +42 -0
- package/out/shared/streamingClientService.js.map +1 -0
- package/out/shared/supplementalContextUtil/codeParsingUtil.js.map +1 -0
- package/out/{language-server/utilities → shared}/supplementalContextUtil/crossFileContextUtil.d.ts +1 -1
- package/out/{language-server/utilities → shared}/supplementalContextUtil/crossFileContextUtil.js +1 -1
- package/out/shared/supplementalContextUtil/crossFileContextUtil.js.map +1 -0
- package/out/shared/supplementalContextUtil/rankBm25.js.map +1 -0
- package/out/{language-server/utilities → shared}/supplementalContextUtil/supplementalContextUtil.d.ts +1 -1
- package/out/shared/supplementalContextUtil/supplementalContextUtil.js.map +1 -0
- package/out/shared/telemetry/metric.js.map +1 -0
- package/out/{language-server → shared/telemetry}/telemetryService.d.ts +5 -5
- package/out/{language-server → shared/telemetry}/telemetryService.js +4 -4
- package/out/shared/telemetry/telemetryService.js.map +1 -0
- package/out/{language-server → shared}/telemetry/types.d.ts +2 -2
- package/out/shared/telemetry/types.js.map +1 -0
- package/out/{language-server/utilities → shared}/telemetryUtils.d.ts +1 -1
- package/out/shared/telemetryUtils.js.map +1 -0
- package/out/shared/testUtils.js.map +1 -0
- package/out/shared/utils.js.map +1 -0
- package/package.json +4 -4
- package/out/constants.d.ts +0 -8
- package/out/constants.js +0 -12
- package/out/constants.js.map +0 -1
- package/out/language-server/amazonQServiceManager/AmazonQTokenServiceManager.js.map +0 -1
- package/out/language-server/amazonQServiceManager/BaseAmazonQServiceManager.d.ts +0 -5
- package/out/language-server/amazonQServiceManager/BaseAmazonQServiceManager.js.map +0 -1
- package/out/language-server/amazonQServiceManager/errors.js.map +0 -1
- package/out/language-server/amazonQServiceManager/qDeveloperProfiles.js.map +0 -1
- package/out/language-server/auto-trigger/autoTrigger.js.map +0 -1
- package/out/language-server/codeWhispererSecurityScanServer.js.map +0 -1
- package/out/language-server/codeWhispererServer.d.ts +0 -6
- package/out/language-server/codeWhispererServer.js.map +0 -1
- package/out/language-server/codeWhispererService.js.map +0 -1
- package/out/language-server/constants.js +0 -8
- package/out/language-server/constants.js.map +0 -1
- package/out/language-server/dependencyGraph/commonUtil.js.map +0 -1
- package/out/language-server/dependencyGraph/constants.js.map +0 -1
- package/out/language-server/dependencyGraph/csharpDependencyGraph.js.map +0 -1
- package/out/language-server/dependencyGraph/dependencyGraph.js.map +0 -1
- package/out/language-server/dependencyGraph/dependencyGraphFactory.js.map +0 -1
- package/out/language-server/languageDetection.js.map +0 -1
- package/out/language-server/mergeRightUtils.js.map +0 -1
- package/out/language-server/models/constants.js.map +0 -1
- package/out/language-server/models/model.js.map +0 -1
- package/out/language-server/netTransformServer.js.map +0 -1
- package/out/language-server/proxy-server.js +0 -22
- package/out/language-server/proxy-server.js.map +0 -1
- package/out/language-server/qChatServer.js.map +0 -1
- package/out/language-server/session/sessionManager.js.map +0 -1
- package/out/language-server/telemetry/codeDiffTracker.js.map +0 -1
- package/out/language-server/telemetry/codePercentage.js.map +0 -1
- package/out/language-server/telemetry/metric.js.map +0 -1
- package/out/language-server/telemetry/types.js.map +0 -1
- package/out/language-server/telemetryService.js.map +0 -1
- package/out/language-server/testUtils.js.map +0 -1
- package/out/language-server/utilities/supplementalContextUtil/codeParsingUtil.js.map +0 -1
- package/out/language-server/utilities/supplementalContextUtil/crossFileContextUtil.js.map +0 -1
- package/out/language-server/utilities/supplementalContextUtil/rankBm25.js.map +0 -1
- package/out/language-server/utilities/supplementalContextUtil/supplementalContextUtil.js.map +0 -1
- package/out/language-server/utilities/telemetryUtils.js.map +0 -1
- package/out/language-server/utils.js.map +0 -1
- /package/out/language-server/{qChatServer.d.ts → chat/qChatServer.d.ts} +0 -0
- /package/out/language-server/{auto-trigger → inline-completion/auto-trigger}/autoTrigger.js +0 -0
- /package/out/language-server/{auto-trigger → inline-completion/auto-trigger}/coefficients.json +0 -0
- /package/out/language-server/{telemetry → inline-completion}/codeDiffTracker.d.ts +0 -0
- /package/out/language-server/{telemetry → inline-completion}/codePercentage.js +0 -0
- /package/out/language-server/{mergeRightUtils.d.ts → inline-completion/mergeRightUtils.d.ts} +0 -0
- /package/out/language-server/{mergeRightUtils.js → inline-completion/mergeRightUtils.js} +0 -0
- /package/out/language-server/{session → inline-completion/session}/sessionManager.js +0 -0
- /package/out/language-server/{codeWhispererSecurityScanServer.d.ts → securityScan/codeWhispererSecurityScanServer.d.ts} +0 -0
- /package/out/language-server/{dependencyGraph → securityScan/dependencyGraph}/commonUtil.d.ts +0 -0
- /package/out/language-server/{dependencyGraph → securityScan/dependencyGraph}/commonUtil.js +0 -0
- /package/out/language-server/{dependencyGraph → securityScan/dependencyGraph}/constants.d.ts +0 -0
- /package/out/language-server/{dependencyGraph → securityScan/dependencyGraph}/constants.js +0 -0
- /package/out/language-server/{dependencyGraph → securityScan/dependencyGraph}/csharpDependencyGraph.d.ts +0 -0
- /package/out/language-server/{dependencyGraph → securityScan/dependencyGraph}/csharpDependencyGraph.js +0 -0
- /package/out/language-server/{dependencyGraph → securityScan/dependencyGraph}/dependencyGraph.d.ts +0 -0
- /package/out/language-server/{dependencyGraph → securityScan/dependencyGraph}/dependencyGraph.js +0 -0
- /package/out/language-server/{dependencyGraph → securityScan/dependencyGraph}/dependencyGraphFactory.d.ts +0 -0
- /package/out/language-server/{dependencyGraph → securityScan/dependencyGraph}/dependencyGraphFactory.js +0 -0
- /package/out/{language-server → shared}/amazonQServiceManager/BaseAmazonQServiceManager.js +0 -0
- /package/out/{language-server → shared}/amazonQServiceManager/errors.d.ts +0 -0
- /package/out/{language-server → shared}/amazonQServiceManager/errors.js +0 -0
- /package/out/{language-server → shared}/codeWhispererService.d.ts +0 -0
- /package/out/{language-server → shared}/codeWhispererService.js +0 -0
- /package/out/{language-server → shared}/languageDetection.d.ts +0 -0
- /package/out/{language-server → shared}/languageDetection.js +0 -0
- /package/out/{language-server → shared}/models/constants.d.ts +0 -0
- /package/out/{language-server → shared}/models/constants.js +0 -0
- /package/out/{language-server → shared}/models/model.d.ts +0 -0
- /package/out/{language-server → shared}/models/model.js +0 -0
- /package/out/{language-server/utilities → shared}/supplementalContextUtil/codeParsingUtil.d.ts +0 -0
- /package/out/{language-server/utilities → shared}/supplementalContextUtil/codeParsingUtil.js +0 -0
- /package/out/{language-server/utilities → shared}/supplementalContextUtil/rankBm25.d.ts +0 -0
- /package/out/{language-server/utilities → shared}/supplementalContextUtil/rankBm25.js +0 -0
- /package/out/{language-server/utilities → shared}/supplementalContextUtil/supplementalContextUtil.js +0 -0
- /package/out/{language-server → shared}/telemetry/metric.d.ts +0 -0
- /package/out/{language-server → shared}/telemetry/metric.js +0 -0
- /package/out/{language-server → shared}/telemetry/types.js +0 -0
- /package/out/{language-server/utilities → shared}/telemetryUtils.js +0 -0
- /package/out/{language-server → shared}/testUtils.d.ts +0 -0
- /package/out/{language-server → shared}/testUtils.js +0 -0
- /package/out/{language-server → shared}/utils.d.ts +0 -0
- /package/out/{language-server → shared}/utils.js +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,47 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.0.31](https://github.com/aws/language-servers/compare/lsp-codewhisperer/v0.0.30...lsp-codewhisperer/v0.0.31) (2025-04-07)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Features
|
|
7
|
+
|
|
8
|
+
* Add support for inline chat ([#897](https://github.com/aws/language-servers/issues/897)) ([9fd97ea](https://github.com/aws/language-servers/commit/9fd97ea946712dbbd4490752d41c395d508c8d0c))
|
|
9
|
+
* **amazonq:** add streaming client caching and inflight-request cancellation ([#901](https://github.com/aws/language-servers/issues/901)) ([ecb323d](https://github.com/aws/language-servers/commit/ecb323dbd3835193c1f8478d797b6a37d89b5961))
|
|
10
|
+
* **amazonq:** optimize service manager reuse ([#886](https://github.com/aws/language-servers/issues/886)) ([84f46ef](https://github.com/aws/language-servers/commit/84f46ef88fbae72a246c3e966ee525124eb8915a))
|
|
11
|
+
* context data selection support in chat-client ([#902](https://github.com/aws/language-servers/issues/902)) ([a22dea5](https://github.com/aws/language-servers/commit/a22dea51c0039f198a403e88f774ad7769b15d29))
|
|
12
|
+
* port fs related tools from VSC. ([#894](https://github.com/aws/language-servers/issues/894)) ([a368acc](https://github.com/aws/language-servers/commit/a368accfcd0b5c88b81f407d4cd7b73be2782b9b))
|
|
13
|
+
* update artifact manager for qct .net to include private package support ([#872](https://github.com/aws/language-servers/issues/872)) ([9c86cac](https://github.com/aws/language-servers/commit/9c86caceb2ebaf803d3e47ad257d49c8ab87bded))
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
### Bug Fixes
|
|
17
|
+
|
|
18
|
+
* **amazonq:** do not throw when receiving null profile while client not connected ([#908](https://github.com/aws/language-servers/issues/908)) ([a04eed1](https://github.com/aws/language-servers/commit/a04eed1d3527009d848c4d00d0860dc0adf70d80))
|
|
19
|
+
* **amazonq:** reduce noisy logging from Q Service Manager ([7ef13b5](https://github.com/aws/language-servers/commit/7ef13b585130e264f4fa9a2ba4fae2e923fb940a))
|
|
20
|
+
* for transformation failure with incorrect filePath while extracting ([#875](https://github.com/aws/language-servers/issues/875)) ([54310cc](https://github.com/aws/language-servers/commit/54310cc15a8cfb3d0eb44559f0d560bdd70581e5))
|
|
21
|
+
* handle large file uploads using streams ([#874](https://github.com/aws/language-servers/issues/874)) ([b5999aa](https://github.com/aws/language-servers/commit/b5999aa7c54addd4e6b92483a2bb28c2fe70ffa6))
|
|
22
|
+
* update null check for net core compatibility version and path for private package support ([#914](https://github.com/aws/language-servers/issues/914)) ([30a0d80](https://github.com/aws/language-servers/commit/30a0d80591dbe73fd54ad3783e0d75526d994af8))
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
### Dependencies
|
|
26
|
+
|
|
27
|
+
* The following workspace dependencies were updated
|
|
28
|
+
* dependencies
|
|
29
|
+
* @aws/lsp-core bumped from ^0.0.2 to ^0.0.3
|
|
30
|
+
|
|
31
|
+
## [0.0.30](https://github.com/aws/language-servers/compare/lsp-codewhisperer/v0.0.29...lsp-codewhisperer/v0.0.30) (2025-03-27)
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
### Features
|
|
35
|
+
|
|
36
|
+
* copied test files and added README to clarify purpose of this folder ([6a18e55](https://github.com/aws/language-servers/commit/6a18e55a1392aa9e68a202a8ca6f1a8b5c55bb4b))
|
|
37
|
+
* create copy of chat server and controller to use in agentic chat ([035b30e](https://github.com/aws/language-servers/commit/035b30ec98b85faad5696034e56dbafef67e7f79))
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
### Bug Fixes
|
|
41
|
+
|
|
42
|
+
* **amazonq:** select corrert Service manager mode in completion server factory ([8041934](https://github.com/aws/language-servers/commit/8041934de1021cfe570fc2686e4000749fe297a6))
|
|
43
|
+
* **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))
|
|
44
|
+
|
|
3
45
|
## [0.0.29](https://github.com/aws/language-servers/compare/lsp-codewhisperer/v0.0.28...lsp-codewhisperer/v0.0.29) (2025-03-26)
|
|
4
46
|
|
|
5
47
|
|
package/CONTRIBUTING.md
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Contribution Guide to @aws/lsp-codewhisperer
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
## Code structure
|
|
5
|
+
|
|
6
|
+
### Servers
|
|
7
|
+
|
|
8
|
+
The code whisperer capability is consist of the following [LSP servers](https://github.com/aws/language-server-runtimes/blob/main/runtimes/server-interface/server.ts):
|
|
9
|
+
|
|
10
|
+
- `agenticChat`
|
|
11
|
+
- `chat`
|
|
12
|
+
- `inline-completion`
|
|
13
|
+
- `netTransform`
|
|
14
|
+
- `securityScan`
|
|
15
|
+
|
|
16
|
+
New server should always be created in their own directory under [`./src/language-server/`](./src/language-server/).
|
|
17
|
+
|
|
18
|
+
Please make sure:
|
|
19
|
+
|
|
20
|
+
1. servers must be in a self-contained directory and not import files from each other.
|
|
21
|
+
1. shared code should be in `shared` directory to be used by more than one server.
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
### Client
|
|
25
|
+
|
|
26
|
+
`client` directory contains the AWS SDK for JavaScript client to call CodeWhisperer service using either [AWS Signature Version 4 (SigV4)](https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html) or [Builder ID (bearer token)](https://docs.aws.amazon.com/signin/latest/userguide/sign-in-aws_builder_id.html), which are two different ways to access Amazon Q Developer.
|
|
27
|
+
|
|
28
|
+
|
package/README.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
## Guides
|
|
4
4
|
|
|
5
5
|
### Proxy
|
|
6
|
-
To use the CodeWhisperer server behind a proxy, import the [`CodeWhispererServerTokenProxy`](./src/
|
|
6
|
+
To use the CodeWhisperer server behind a proxy, import the [`CodeWhispererServerTokenProxy`](./src/shared/proxy-server.ts) as the server and set up the environment variable `HTTPS_PROXY` or `https_proxy` to the proxy URL you are using.
|
|
7
7
|
You can pass the environment variable to the process or just set it up globally on your system.
|
|
8
8
|
|
|
9
9
|
```
|
|
@@ -4,6 +4,7 @@ exports.StreamingClient = void 0;
|
|
|
4
4
|
exports.createStreamingClient = createStreamingClient;
|
|
5
5
|
const codewhisperer_streaming_1 = require("@amzn/codewhisperer-streaming");
|
|
6
6
|
const util_retry_1 = require("@aws-sdk/util-retry");
|
|
7
|
+
// TODO: refactor and combine with language-server/streamingClientService.ts when no longer in use
|
|
7
8
|
class StreamingClient {
|
|
8
9
|
async getStreamingClient(credentialsProvider, codeWhispererRegion, codeWhispererEndpoint, sdkInitializator, config) {
|
|
9
10
|
return await createStreamingClient(credentialsProvider, codeWhispererRegion, codeWhispererEndpoint, sdkInitializator, config);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codewhispererStreamingClient.js","sourceRoot":"","sources":["../../../src/client/streamingClient/codewhispererStreamingClient.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"codewhispererStreamingClient.js","sourceRoot":"","sources":["../../../src/client/streamingClient/codewhispererStreamingClient.ts"],"names":[],"mappings":";;;AAsBA,sDAiBC;AAvCD,2EAA0G;AAC1G,oDAA6D;AAG7D,kGAAkG;AAClG,MAAa,eAAe;IACjB,KAAK,CAAC,kBAAkB,CAC3B,mBAAwB,EACxB,mBAA2B,EAC3B,qBAA6B,EAC7B,gBAAkC,EAClC,MAA2C;QAE3C,OAAO,MAAM,qBAAqB,CAC9B,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,gBAAgB,EAChB,MAAM,CACT,CAAA;IACL,CAAC;CACJ;AAhBD,0CAgBC;AACM,KAAK,UAAU,qBAAqB,CACvC,mBAAwB,EACxB,mBAA2B,EAC3B,qBAA6B,EAC7B,gBAAkC,EAClC,MAA2C;IAE3C,MAAM,KAAK,GAAG,mBAAmB,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAA;IAE1D,MAAM,eAAe,GAAG,gBAAgB,CAAC,gDAAsB,EAAE;QAC7D,MAAM,EAAE,mBAAmB;QAC3B,QAAQ,EAAE,qBAAqB;QAC/B,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE;QAC7B,aAAa,EAAE,IAAI,oCAAuB,CAAC,CAAC,EAAE,CAAC,OAAe,EAAE,EAAE,CAAC,GAAG,GAAG,OAAO,IAAI,EAAE,CAAC;QACvF,GAAG,MAAM;KACZ,CAAC,CAAA;IACF,OAAO,eAAe,CAAA;AAC1B,CAAC"}
|
package/out/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
export * from './language-server/codeWhispererSecurityScanServer';
|
|
2
|
-
export * from './language-server/codeWhispererServer';
|
|
3
|
-
export * from './language-server/qChatServer';
|
|
4
|
-
export * from './language-server/
|
|
5
|
-
export * from './
|
|
1
|
+
export * from './language-server/securityScan/codeWhispererSecurityScanServer';
|
|
2
|
+
export * from './language-server/inline-completion/codeWhispererServer';
|
|
3
|
+
export * from './language-server/chat/qChatServer';
|
|
4
|
+
export * as QAgenticChatServer from './language-server/agenticChat/qAgenticChatServer';
|
|
5
|
+
export * from './shared/proxy-server';
|
|
6
|
+
export * from './language-server/netTransform/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
|
-
|
|
18
|
-
__exportStar(require("./language-server/
|
|
19
|
-
__exportStar(require("./language-server/
|
|
20
|
-
__exportStar(require("./language-server/
|
|
21
|
-
|
|
17
|
+
exports.QAgenticChatServer = void 0;
|
|
18
|
+
__exportStar(require("./language-server/securityScan/codeWhispererSecurityScanServer"), exports);
|
|
19
|
+
__exportStar(require("./language-server/inline-completion/codeWhispererServer"), exports);
|
|
20
|
+
__exportStar(require("./language-server/chat/qChatServer"), exports);
|
|
21
|
+
exports.QAgenticChatServer = require("./language-server/agenticChat/qAgenticChatServer");
|
|
22
|
+
__exportStar(require("./shared/proxy-server"), exports);
|
|
23
|
+
__exportStar(require("./language-server/netTransform/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":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,iGAA8E;AAC9E,0FAAuE;AACvE,qEAAkD;AAClD,yFAAsF;AACtF,wDAAqC;AACrC,oFAAiE"}
|
|
@@ -0,0 +1,40 @@
|
|
|
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, InlineChatParams } from '@aws/language-server-runtimes/protocol';
|
|
6
|
+
import { CancellationToken, Chat, ChatParams, ChatResult, EndChatParams, QuickActionParams, ResponseError, TabAddParams, TabRemoveParams, TabChangeParams, InlineChatResult } from '@aws/language-server-runtimes/server-interface';
|
|
7
|
+
import { Features, LspHandlers } from '../types';
|
|
8
|
+
import { ChatSessionManagementService } from '../chat/chatSessionManagementService';
|
|
9
|
+
import { TelemetryService } from '../../shared/telemetry/telemetryService';
|
|
10
|
+
import { AmazonQTokenServiceManager } from '../../shared/amazonQServiceManager/AmazonQTokenServiceManager';
|
|
11
|
+
import { AmazonQWorkspaceConfig } from '../../shared/amazonQServiceManager/configurationUtils';
|
|
12
|
+
type ChatHandlers = Omit<LspHandlers<Chat>, 'openTab' | 'sendChatUpdate' | 'onFileClicked' | 'onInlineChatPrompt' | 'sendContextCommands' | 'onCreatePrompt'>;
|
|
13
|
+
export declare class AgenticChatController implements ChatHandlers {
|
|
14
|
+
#private;
|
|
15
|
+
constructor(chatSessionManagementService: ChatSessionManagementService, features: Features, telemetryService: TelemetryService, amazonQServiceManager?: AmazonQTokenServiceManager);
|
|
16
|
+
dispose(): void;
|
|
17
|
+
onChatPrompt(params: ChatParams, token: CancellationToken): Promise<ChatResult | ResponseError<ChatResult>>;
|
|
18
|
+
onInlineChatPrompt(params: InlineChatParams, token: CancellationToken): Promise<InlineChatResult | ResponseError<InlineChatResult>>;
|
|
19
|
+
onCodeInsertToCursorPosition(params: InsertToCursorPositionParams): Promise<void>;
|
|
20
|
+
onCopyCodeToClipboard(): void;
|
|
21
|
+
onEndChat(params: EndChatParams, _token: CancellationToken): boolean;
|
|
22
|
+
onFollowUpClicked(): void;
|
|
23
|
+
onInfoLinkClick(): void;
|
|
24
|
+
onLinkClick(): void;
|
|
25
|
+
onReady(): void;
|
|
26
|
+
onSendFeedback({ tabId, feedbackPayload }: FeedbackParams): void;
|
|
27
|
+
onSourceLinkClick(): void;
|
|
28
|
+
onTabAdd(params: TabAddParams): void;
|
|
29
|
+
onTabChange(params: TabChangeParams): void;
|
|
30
|
+
onTabRemove(params: TabRemoveParams): void;
|
|
31
|
+
onQuickAction(params: QuickActionParams, _cancellationToken: CancellationToken): {
|
|
32
|
+
messageId?: undefined;
|
|
33
|
+
body?: undefined;
|
|
34
|
+
} | {
|
|
35
|
+
messageId: string;
|
|
36
|
+
body: string;
|
|
37
|
+
};
|
|
38
|
+
updateConfiguration: (newConfig: AmazonQWorkspaceConfig) => void;
|
|
39
|
+
}
|
|
40
|
+
export {};
|
|
@@ -0,0 +1,414 @@
|
|
|
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 codewhisperer_streaming_1 = require("@amzn/codewhisperer-streaming");
|
|
9
|
+
const protocol_1 = require("@aws/language-server-runtimes/protocol");
|
|
10
|
+
const server_interface_1 = require("@aws/language-server-runtimes/server-interface");
|
|
11
|
+
const uuid_1 = require("uuid");
|
|
12
|
+
const types_1 = require("../../shared/telemetry/types");
|
|
13
|
+
const chatEventParser_1 = require("../chat/chatEventParser");
|
|
14
|
+
const utils_1 = require("../chat/utils");
|
|
15
|
+
const chatTelemetryController_1 = require("../chat/telemetry/chatTelemetryController");
|
|
16
|
+
const quickActions_1 = require("../chat/quickActions");
|
|
17
|
+
const metric_1 = require("../../shared/telemetry/metric");
|
|
18
|
+
const utils_2 = require("../../shared/utils");
|
|
19
|
+
const triggerContext_1 = require("../chat/contexts/triggerContext");
|
|
20
|
+
const constants_1 = require("../chat/constants");
|
|
21
|
+
const errors_1 = require("../../shared/amazonQServiceManager/errors");
|
|
22
|
+
const AmazonQTokenServiceManager_1 = require("../../shared/amazonQServiceManager/AmazonQTokenServiceManager");
|
|
23
|
+
class AgenticChatController {
|
|
24
|
+
#features;
|
|
25
|
+
#chatSessionManagementService;
|
|
26
|
+
#telemetryController;
|
|
27
|
+
#triggerContext;
|
|
28
|
+
#customizationArn;
|
|
29
|
+
#telemetryService;
|
|
30
|
+
#amazonQServiceManager;
|
|
31
|
+
constructor(chatSessionManagementService, features, telemetryService, amazonQServiceManager) {
|
|
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
|
+
this.#amazonQServiceManager = amazonQServiceManager;
|
|
38
|
+
}
|
|
39
|
+
dispose() {
|
|
40
|
+
this.#chatSessionManagementService.dispose();
|
|
41
|
+
this.#telemetryController.dispose();
|
|
42
|
+
}
|
|
43
|
+
async onChatPrompt(params, token) {
|
|
44
|
+
const maybeDefaultResponse = (0, utils_1.getDefaultChatResponse)(params.prompt.prompt);
|
|
45
|
+
if (maybeDefaultResponse) {
|
|
46
|
+
return maybeDefaultResponse;
|
|
47
|
+
}
|
|
48
|
+
const sessionResult = this.#chatSessionManagementService.getSession(params.tabId);
|
|
49
|
+
const { data: session, success } = sessionResult;
|
|
50
|
+
if (!success) {
|
|
51
|
+
return new server_interface_1.ResponseError(protocol_1.ErrorCodes.InternalError, sessionResult.error);
|
|
52
|
+
}
|
|
53
|
+
const metric = new metric_1.Metric({
|
|
54
|
+
cwsprChatConversationType: 'Chat',
|
|
55
|
+
});
|
|
56
|
+
const triggerContext = await this.#getTriggerContext(params, metric);
|
|
57
|
+
const isNewConversation = !session.conversationId;
|
|
58
|
+
token.onCancellationRequested(() => {
|
|
59
|
+
this.#log('cancellation requested');
|
|
60
|
+
session.abortRequest();
|
|
61
|
+
});
|
|
62
|
+
let response;
|
|
63
|
+
let requestInput;
|
|
64
|
+
const conversationIdentifier = session?.conversationId ?? 'New conversation';
|
|
65
|
+
try {
|
|
66
|
+
this.#log('Request for conversation id:', conversationIdentifier);
|
|
67
|
+
const profileArn = AmazonQTokenServiceManager_1.AmazonQTokenServiceManager.getInstance(this.#features).getActiveProfileArn();
|
|
68
|
+
requestInput = this.#triggerContext.getChatParamsFromTrigger(params, triggerContext, codewhisperer_streaming_1.ChatTriggerType.MANUAL, this.#customizationArn, profileArn);
|
|
69
|
+
metric.recordStart();
|
|
70
|
+
response = await session.sendMessage(requestInput);
|
|
71
|
+
this.#log('Response for conversation id:', conversationIdentifier, JSON.stringify(response.$metadata));
|
|
72
|
+
}
|
|
73
|
+
catch (err) {
|
|
74
|
+
if ((0, utils_2.isAwsError)(err) || ((0, utils_2.isObject)(err) && 'statusCode' in err && typeof err.statusCode === 'number')) {
|
|
75
|
+
metric.setDimension('cwsprChatRepsonseCode', err.statusCode ?? 400);
|
|
76
|
+
this.#telemetryController.emitMessageResponseError(params.tabId, metric.metric);
|
|
77
|
+
}
|
|
78
|
+
if (err instanceof errors_1.AmazonQServicePendingSigninError) {
|
|
79
|
+
this.#log(`Q Chat SSO Connection error: ${(0, utils_2.getErrorMessage)(err)}`);
|
|
80
|
+
return (0, utils_1.createAuthFollowUpResult)('full-auth');
|
|
81
|
+
}
|
|
82
|
+
if (err instanceof errors_1.AmazonQServicePendingProfileError) {
|
|
83
|
+
this.#log(`Q Chat SSO Connection error: ${(0, utils_2.getErrorMessage)(err)}`);
|
|
84
|
+
const followUpResult = (0, utils_1.createAuthFollowUpResult)('use-supported-auth');
|
|
85
|
+
// Access first element in array
|
|
86
|
+
if (followUpResult.followUp?.options) {
|
|
87
|
+
followUpResult.followUp.options[0].pillText = 'Select Q Developer Profile';
|
|
88
|
+
}
|
|
89
|
+
return followUpResult;
|
|
90
|
+
}
|
|
91
|
+
const authFollowType = (0, utils_1.getAuthFollowUpType)(err);
|
|
92
|
+
if (authFollowType) {
|
|
93
|
+
this.#log(`Q auth error: ${(0, utils_2.getErrorMessage)(err)}`);
|
|
94
|
+
return (0, utils_1.createAuthFollowUpResult)(authFollowType);
|
|
95
|
+
}
|
|
96
|
+
this.#log(`Q api request error ${err instanceof Error ? err.message : 'unknown'}`);
|
|
97
|
+
return new server_interface_1.ResponseError(server_interface_1.LSPErrorCodes.RequestFailed, err instanceof Error ? err.message : 'Unknown request error');
|
|
98
|
+
}
|
|
99
|
+
try {
|
|
100
|
+
const result = await this.#processSendMessageResponse(response, metric.mergeWith({
|
|
101
|
+
cwsprChatResponseCode: response.$metadata.httpStatusCode,
|
|
102
|
+
cwsprChatMessageId: response.$metadata.requestId,
|
|
103
|
+
}), params.partialResultToken);
|
|
104
|
+
session.conversationId = result.data?.conversationId;
|
|
105
|
+
this.#log('Session conversation id:', session.conversationId || '');
|
|
106
|
+
if (session.conversationId) {
|
|
107
|
+
this.#telemetryController.setConversationId(params.tabId, session.conversationId);
|
|
108
|
+
if (isNewConversation) {
|
|
109
|
+
this.#telemetryController.updateTriggerInfo(params.tabId, {
|
|
110
|
+
startTrigger: {
|
|
111
|
+
hasUserSnippet: metric.metric.cwsprChatHasCodeSnippet ?? false,
|
|
112
|
+
triggerType: triggerContext.triggerType,
|
|
113
|
+
},
|
|
114
|
+
});
|
|
115
|
+
this.#telemetryController.emitStartConversationMetric(params.tabId, metric.metric);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
metric.setDimension('codewhispererCustomizationArn', requestInput.conversationState?.customizationArn);
|
|
119
|
+
await this.#telemetryController.emitAddMessageMetric(params.tabId, metric.metric);
|
|
120
|
+
this.#telemetryController.updateTriggerInfo(params.tabId, {
|
|
121
|
+
lastMessageTrigger: {
|
|
122
|
+
...triggerContext,
|
|
123
|
+
messageId: response.$metadata.requestId,
|
|
124
|
+
followUpActions: new Set(result.data?.chatResult.followUp?.options
|
|
125
|
+
?.map(option => option.prompt ?? '')
|
|
126
|
+
.filter(prompt => prompt.length > 0)),
|
|
127
|
+
},
|
|
128
|
+
});
|
|
129
|
+
return result.success
|
|
130
|
+
? result.data.chatResult
|
|
131
|
+
: new server_interface_1.ResponseError(server_interface_1.LSPErrorCodes.RequestFailed, result.error);
|
|
132
|
+
}
|
|
133
|
+
catch (err) {
|
|
134
|
+
this.#log('Error encountered during response streaming:', err instanceof Error ? err.message : 'unknown');
|
|
135
|
+
return new server_interface_1.ResponseError(server_interface_1.LSPErrorCodes.RequestFailed, err instanceof Error ? err.message : 'Unknown error occured during response stream');
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
async onInlineChatPrompt(params, token) {
|
|
139
|
+
// TODO: This metric needs to be removed later, just added for now to be able to create a ChatEventParser object
|
|
140
|
+
const metric = new metric_1.Metric({
|
|
141
|
+
cwsprChatConversationType: 'Chat',
|
|
142
|
+
});
|
|
143
|
+
const triggerContext = await this.#getInlineChatTriggerContext(params);
|
|
144
|
+
let response;
|
|
145
|
+
let requestInput;
|
|
146
|
+
try {
|
|
147
|
+
const profileArn = AmazonQTokenServiceManager_1.AmazonQTokenServiceManager.getInstance(this.#features).getActiveProfileArn();
|
|
148
|
+
requestInput = this.#triggerContext.getChatParamsFromTrigger(params, triggerContext, codewhisperer_streaming_1.ChatTriggerType.INLINE_CHAT, this.#customizationArn, profileArn);
|
|
149
|
+
if (!this.#amazonQServiceManager) {
|
|
150
|
+
throw new Error('amazonQServiceManager is not initialized');
|
|
151
|
+
}
|
|
152
|
+
const client = this.#amazonQServiceManager.getStreamingClient();
|
|
153
|
+
response = await client.sendMessage(requestInput);
|
|
154
|
+
this.#log('Response for inline chat', JSON.stringify(response.$metadata), JSON.stringify(response));
|
|
155
|
+
}
|
|
156
|
+
catch (err) {
|
|
157
|
+
if (err instanceof errors_1.AmazonQServicePendingSigninError || err instanceof errors_1.AmazonQServicePendingProfileError) {
|
|
158
|
+
this.#log(`Q Inline Chat SSO Connection error: ${(0, utils_2.getErrorMessage)(err)}`);
|
|
159
|
+
return new server_interface_1.ResponseError(server_interface_1.LSPErrorCodes.RequestFailed, err.message);
|
|
160
|
+
}
|
|
161
|
+
this.#log(`Q api request error ${err instanceof Error ? err.message : 'unknown'}`);
|
|
162
|
+
return new server_interface_1.ResponseError(server_interface_1.LSPErrorCodes.RequestFailed, err instanceof Error ? err.message : 'Unknown request error');
|
|
163
|
+
}
|
|
164
|
+
try {
|
|
165
|
+
const result = await this.#processSendMessageResponseForInlineChat(response, metric, params.partialResultToken);
|
|
166
|
+
return result.success
|
|
167
|
+
? {
|
|
168
|
+
...result.data.chatResult,
|
|
169
|
+
requestId: response.$metadata.requestId,
|
|
170
|
+
}
|
|
171
|
+
: new server_interface_1.ResponseError(server_interface_1.LSPErrorCodes.RequestFailed, result.error);
|
|
172
|
+
}
|
|
173
|
+
catch (err) {
|
|
174
|
+
this.#log('Error encountered during inline chat response streaming:', err instanceof Error ? err.message : 'unknown');
|
|
175
|
+
return new server_interface_1.ResponseError(server_interface_1.LSPErrorCodes.RequestFailed, err instanceof Error ? err.message : 'Unknown error occurred during inline chat response stream');
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
async onCodeInsertToCursorPosition(params) {
|
|
179
|
+
// Implementation based on https://github.com/aws/aws-toolkit-vscode/blob/1814cc84228d4bf20270574c5980b91b227f31cf/packages/core/src/amazonq/commons/controllers/contentController.ts#L38
|
|
180
|
+
if (!params.textDocument || !params.cursorPosition || !params.code) {
|
|
181
|
+
const missingParams = [];
|
|
182
|
+
if (!params.textDocument)
|
|
183
|
+
missingParams.push('textDocument');
|
|
184
|
+
if (!params.cursorPosition)
|
|
185
|
+
missingParams.push('cursorPosition');
|
|
186
|
+
if (!params.code)
|
|
187
|
+
missingParams.push('code');
|
|
188
|
+
this.#log(`Q Chat server failed to insert code. Missing required parameters for insert code: ${missingParams.join(', ')}`);
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
let cursorPosition = params.cursorPosition;
|
|
192
|
+
const indentRange = {
|
|
193
|
+
start: { line: cursorPosition.line, character: 0 },
|
|
194
|
+
end: cursorPosition,
|
|
195
|
+
};
|
|
196
|
+
const documentContent = await this.#features.workspace.getTextDocument(params.textDocument.uri);
|
|
197
|
+
// linePrefix is the raw text that is between the start of the line and the current cursor position
|
|
198
|
+
let linePrefix = documentContent?.getText(indentRange);
|
|
199
|
+
// calculatedIndent is the indent we calculate inside this function and apply to the text to be inserted
|
|
200
|
+
let calculatedIndent = '';
|
|
201
|
+
let hasVirtualSpace = false;
|
|
202
|
+
if (linePrefix) {
|
|
203
|
+
// If linePrefix object is not empty, there are two possibilities:
|
|
204
|
+
// Case 1: If linePrefix contains only whitespace: Use the entire linePrefix as is for the indent
|
|
205
|
+
// Case 2: If linePrefix contains non-whitespace characters: Extract leading whitespace from linePrefix (if any), ignore rest of text
|
|
206
|
+
calculatedIndent =
|
|
207
|
+
linePrefix.trim().length == 0
|
|
208
|
+
? linePrefix
|
|
209
|
+
: ' '.repeat(linePrefix.length - linePrefix.trimStart().length);
|
|
210
|
+
}
|
|
211
|
+
else if (documentContent && cursorPosition.character > 0) {
|
|
212
|
+
// When the cursor is not at the start of the line (position > 0) but there's no actual text at the indentation range
|
|
213
|
+
// It means there are virtual spaces that is being rendered by the IDE
|
|
214
|
+
// In this case, the indentation is determined by the cursorPosition
|
|
215
|
+
this.#log('Indent is nullish and the cursor position is greater than zero while inserting code');
|
|
216
|
+
calculatedIndent = ' '.repeat(cursorPosition.character);
|
|
217
|
+
hasVirtualSpace = true;
|
|
218
|
+
cursorPosition.character = 0;
|
|
219
|
+
}
|
|
220
|
+
const textWithIndent = params.code
|
|
221
|
+
.split('\n')
|
|
222
|
+
.map((line, index) => {
|
|
223
|
+
if (index === 0) {
|
|
224
|
+
return hasVirtualSpace && line ? calculatedIndent + line : line;
|
|
225
|
+
}
|
|
226
|
+
// Only indent non-empty lines
|
|
227
|
+
return line ? calculatedIndent + line : '';
|
|
228
|
+
})
|
|
229
|
+
.join('\n');
|
|
230
|
+
const workspaceEdit = {
|
|
231
|
+
edit: {
|
|
232
|
+
documentChanges: [
|
|
233
|
+
protocol_1.TextDocumentEdit.create({ uri: params.textDocument.uri, version: 0 }, [
|
|
234
|
+
protocol_1.TextEdit.insert(cursorPosition, textWithIndent),
|
|
235
|
+
]),
|
|
236
|
+
],
|
|
237
|
+
},
|
|
238
|
+
};
|
|
239
|
+
const applyResult = await this.#features.lsp.workspace.applyWorkspaceEdit(workspaceEdit);
|
|
240
|
+
if (applyResult.applied) {
|
|
241
|
+
this.#log(`Q Chat server inserted code successfully`);
|
|
242
|
+
this.#telemetryController.enqueueCodeDiffEntry({ ...params, code: textWithIndent });
|
|
243
|
+
}
|
|
244
|
+
else {
|
|
245
|
+
this.#log(`Q Chat server failed to insert code: ${applyResult.failureReason ?? 'No failure reason provided'}`);
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
onCopyCodeToClipboard() { }
|
|
249
|
+
onEndChat(params, _token) {
|
|
250
|
+
const { success } = this.#chatSessionManagementService.deleteSession(params.tabId);
|
|
251
|
+
return success;
|
|
252
|
+
}
|
|
253
|
+
onFollowUpClicked() { }
|
|
254
|
+
onInfoLinkClick() { }
|
|
255
|
+
onLinkClick() { }
|
|
256
|
+
onReady() { }
|
|
257
|
+
onSendFeedback({ tabId, feedbackPayload }) {
|
|
258
|
+
this.#features.telemetry.emitMetric({
|
|
259
|
+
name: 'amazonq_sendFeedback',
|
|
260
|
+
data: {
|
|
261
|
+
comment: JSON.stringify({
|
|
262
|
+
type: 'codewhisperer-chat-answer-feedback',
|
|
263
|
+
conversationId: this.#telemetryController.getConversationId(tabId) ?? '',
|
|
264
|
+
messageId: feedbackPayload.messageId,
|
|
265
|
+
reason: feedbackPayload.selectedOption,
|
|
266
|
+
userComment: feedbackPayload.comment,
|
|
267
|
+
}),
|
|
268
|
+
// this is always Negative because only thumbs down has a form
|
|
269
|
+
sentiment: 'Negative',
|
|
270
|
+
},
|
|
271
|
+
});
|
|
272
|
+
}
|
|
273
|
+
onSourceLinkClick() { }
|
|
274
|
+
onTabAdd(params) {
|
|
275
|
+
this.#telemetryController.activeTabId = params.tabId;
|
|
276
|
+
this.#chatSessionManagementService.createSession(params.tabId);
|
|
277
|
+
}
|
|
278
|
+
onTabChange(params) {
|
|
279
|
+
this.#telemetryController.emitConversationMetric({
|
|
280
|
+
name: types_1.ChatTelemetryEventName.ExitFocusConversation,
|
|
281
|
+
data: {},
|
|
282
|
+
});
|
|
283
|
+
this.#telemetryController.activeTabId = params.tabId;
|
|
284
|
+
this.#telemetryController.emitConversationMetric({
|
|
285
|
+
name: types_1.ChatTelemetryEventName.EnterFocusConversation,
|
|
286
|
+
data: {},
|
|
287
|
+
});
|
|
288
|
+
}
|
|
289
|
+
onTabRemove(params) {
|
|
290
|
+
if (this.#telemetryController.activeTabId === params.tabId) {
|
|
291
|
+
this.#telemetryController.emitConversationMetric({
|
|
292
|
+
name: types_1.ChatTelemetryEventName.ExitFocusConversation,
|
|
293
|
+
data: {},
|
|
294
|
+
});
|
|
295
|
+
this.#telemetryController.activeTabId = undefined;
|
|
296
|
+
}
|
|
297
|
+
this.#chatSessionManagementService.deleteSession(params.tabId);
|
|
298
|
+
this.#telemetryController.removeConversation(params.tabId);
|
|
299
|
+
}
|
|
300
|
+
onQuickAction(params, _cancellationToken) {
|
|
301
|
+
switch (params.quickAction) {
|
|
302
|
+
case quickActions_1.QuickAction.Clear: {
|
|
303
|
+
const sessionResult = this.#chatSessionManagementService.getSession(params.tabId);
|
|
304
|
+
this.#telemetryController.emitChatMetric({
|
|
305
|
+
name: types_1.ChatTelemetryEventName.RunCommand,
|
|
306
|
+
data: {
|
|
307
|
+
cwsprChatCommandType: params.quickAction,
|
|
308
|
+
},
|
|
309
|
+
});
|
|
310
|
+
this.#telemetryController.removeConversation(params.tabId);
|
|
311
|
+
sessionResult.data?.clear();
|
|
312
|
+
return {};
|
|
313
|
+
}
|
|
314
|
+
case quickActions_1.QuickAction.Help:
|
|
315
|
+
this.#telemetryController.emitChatMetric({
|
|
316
|
+
name: types_1.ChatTelemetryEventName.RunCommand,
|
|
317
|
+
data: {
|
|
318
|
+
cwsprChatCommandType: params.quickAction,
|
|
319
|
+
},
|
|
320
|
+
});
|
|
321
|
+
return {
|
|
322
|
+
messageId: (0, uuid_1.v4)(),
|
|
323
|
+
body: constants_1.HELP_MESSAGE,
|
|
324
|
+
};
|
|
325
|
+
default:
|
|
326
|
+
return {};
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
async #getInlineChatTriggerContext(params) {
|
|
330
|
+
let triggerContext = await this.#triggerContext.getNewTriggerContext(params);
|
|
331
|
+
return triggerContext;
|
|
332
|
+
}
|
|
333
|
+
async #getTriggerContext(params, metric) {
|
|
334
|
+
const lastMessageTrigger = this.#telemetryController.getLastMessageTrigger(params.tabId);
|
|
335
|
+
let triggerContext;
|
|
336
|
+
// this is the only way we can detect a follow up action
|
|
337
|
+
// we can reuse previous trigger information
|
|
338
|
+
if (lastMessageTrigger?.followUpActions?.has(params.prompt?.prompt ?? '')) {
|
|
339
|
+
await this.#telemetryController.emitInteractWithMessageMetric(params.tabId, {
|
|
340
|
+
cwsprChatMessageId: lastMessageTrigger.messageId,
|
|
341
|
+
cwsprChatInteractionType: types_1.ChatInteractionType.ClickFollowUp,
|
|
342
|
+
});
|
|
343
|
+
triggerContext = lastMessageTrigger;
|
|
344
|
+
}
|
|
345
|
+
else {
|
|
346
|
+
triggerContext = await this.#triggerContext.getNewTriggerContext(params);
|
|
347
|
+
triggerContext.triggerType = this.#telemetryController.getCurrentTrigger(params.tabId) ?? 'click';
|
|
348
|
+
}
|
|
349
|
+
metric.mergeWith({
|
|
350
|
+
cwsprChatUserIntent: triggerContext?.userIntent,
|
|
351
|
+
cwsprChatProgrammingLanguage: triggerContext?.programmingLanguage?.languageName,
|
|
352
|
+
cwsprChatRequestLength: params.prompt?.prompt?.length ?? 0,
|
|
353
|
+
cwsprChatTriggerInteraction: triggerContext?.triggerType,
|
|
354
|
+
cwsprChatHasCodeSnippet: triggerContext.hasCodeSnippet ?? false,
|
|
355
|
+
cwsprChatActiveEditorTotalCharacters: triggerContext.totalEditorCharacters ?? 0,
|
|
356
|
+
});
|
|
357
|
+
return triggerContext;
|
|
358
|
+
}
|
|
359
|
+
async #processSendMessageResponse(response, metric, partialResultToken) {
|
|
360
|
+
const requestId = response.$metadata.requestId;
|
|
361
|
+
const chatEventParser = new chatEventParser_1.ChatEventParser(requestId, metric);
|
|
362
|
+
for await (const chatEvent of response.sendMessageResponse) {
|
|
363
|
+
const result = chatEventParser.processPartialEvent(chatEvent);
|
|
364
|
+
// terminate early when there is an error
|
|
365
|
+
if (!result.success) {
|
|
366
|
+
return result;
|
|
367
|
+
}
|
|
368
|
+
if (!(0, utils_2.isNullish)(partialResultToken)) {
|
|
369
|
+
await this.#features.lsp.sendProgress(protocol_1.chatRequestType, partialResultToken, result.data.chatResult);
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
metric.mergeWith({
|
|
373
|
+
cwsprChatFullResponseLatency: metric.getTimeElapsed(),
|
|
374
|
+
cwsprChatFollowUpCount: chatEventParser.totalEvents.followupPromptEvent,
|
|
375
|
+
cwsprChatReferencesCount: chatEventParser.totalEvents.codeReferenceEvent,
|
|
376
|
+
cwsprChatSourceLinkCount: chatEventParser.totalEvents.supplementaryWebLinksEvent,
|
|
377
|
+
cwsprChatResponseLength: chatEventParser.body?.length ?? 0,
|
|
378
|
+
});
|
|
379
|
+
return chatEventParser.getResult();
|
|
380
|
+
}
|
|
381
|
+
async #processSendMessageResponseForInlineChat(response, metric, partialResultToken) {
|
|
382
|
+
const requestId = response.$metadata.requestId;
|
|
383
|
+
const chatEventParser = new chatEventParser_1.ChatEventParser(requestId, metric);
|
|
384
|
+
for await (const chatEvent of response.sendMessageResponse) {
|
|
385
|
+
const result = chatEventParser.processPartialEvent(chatEvent);
|
|
386
|
+
// terminate early when there is an error
|
|
387
|
+
if (!result.success) {
|
|
388
|
+
return result;
|
|
389
|
+
}
|
|
390
|
+
if (!(0, utils_2.isNullish)(partialResultToken)) {
|
|
391
|
+
await this.#features.lsp.sendProgress(protocol_1.chatRequestType, partialResultToken, result.data.chatResult);
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
return chatEventParser.getResult();
|
|
395
|
+
}
|
|
396
|
+
updateConfiguration = (newConfig) => {
|
|
397
|
+
this.#customizationArn = newConfig.customizationArn;
|
|
398
|
+
this.#log(`Chat configuration updated to use ${this.#customizationArn}`);
|
|
399
|
+
/*
|
|
400
|
+
The flag enableTelemetryEventsToDestination is set to true temporarily. It's value will be determined through destination
|
|
401
|
+
configuration post all events migration to STE. It'll be replaced by qConfig['enableTelemetryEventsToDestination'] === true
|
|
402
|
+
*/
|
|
403
|
+
// const enableTelemetryEventsToDestination = true
|
|
404
|
+
// this.#telemetryService.updateEnableTelemetryEventsToDestination(enableTelemetryEventsToDestination)
|
|
405
|
+
const updatedOptOutPreference = newConfig.optOutTelemetryPreference;
|
|
406
|
+
this.#telemetryService.updateOptOutPreference(updatedOptOutPreference);
|
|
407
|
+
this.#log(`Chat configuration telemetry preference to ${updatedOptOutPreference}`);
|
|
408
|
+
};
|
|
409
|
+
#log(...messages) {
|
|
410
|
+
this.#features.logging.log(messages.join(' '));
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
exports.AgenticChatController = AgenticChatController;
|
|
414
|
+
//# sourceMappingURL=agenticChatController.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agenticChatController.js","sourceRoot":"","sources":["../../../src/language-server/agenticChat/agenticChatController.ts"],"names":[],"mappings":"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"}
|