@aws/lsp-codewhisperer 0.0.28 → 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.
- package/CHANGELOG.md +40 -0
- package/README.md +3 -0
- package/out/client/token/codewhisperer.d.ts +1 -1
- package/out/constants.d.ts +3 -0
- package/out/constants.js +4 -1
- package/out/constants.js.map +1 -1
- package/out/index.d.ts +1 -0
- package/out/index.js +2 -0
- package/out/index.js.map +1 -1
- package/out/language-server/agenticChat/agenticChatController.d.ts +37 -0
- package/out/language-server/agenticChat/agenticChatController.js +361 -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 +92 -0
- package/out/language-server/agenticChat/qAgenticChatServer.js.map +1 -0
- package/out/language-server/amazonQServiceManager/AmazonQTokenServiceManager.d.ts +90 -0
- package/out/language-server/amazonQServiceManager/AmazonQTokenServiceManager.js +466 -0
- package/out/language-server/amazonQServiceManager/AmazonQTokenServiceManager.js.map +1 -0
- package/out/language-server/amazonQServiceManager/BaseAmazonQServiceManager.d.ts +5 -0
- package/out/language-server/amazonQServiceManager/BaseAmazonQServiceManager.js +3 -0
- package/out/language-server/amazonQServiceManager/BaseAmazonQServiceManager.js.map +1 -0
- package/out/language-server/amazonQServiceManager/errors.d.ts +28 -0
- package/out/language-server/amazonQServiceManager/errors.js +70 -0
- package/out/language-server/amazonQServiceManager/errors.js.map +1 -0
- package/out/language-server/amazonQServiceManager/qDeveloperProfiles.js +7 -7
- package/out/language-server/amazonQServiceManager/qDeveloperProfiles.js.map +1 -1
- 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 +1 -1
- package/out/language-server/chat/chatController.js +17 -1
- package/out/language-server/chat/chatController.js.map +1 -1
- package/out/language-server/chat/chatSessionManagementService.d.ts +3 -8
- package/out/language-server/chat/chatSessionManagementService.js +5 -57
- package/out/language-server/chat/chatSessionManagementService.js.map +1 -1
- package/out/language-server/chat/chatSessionService.d.ts +2 -3
- package/out/language-server/chat/chatSessionService.js +7 -21
- 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 +14 -1
- package/out/language-server/chat/contexts/documentContext.js.map +1 -1
- package/out/language-server/chat/contexts/triggerContext.d.ts +1 -1
- package/out/language-server/chat/contexts/triggerContext.js +3 -2
- package/out/language-server/chat/contexts/triggerContext.js.map +1 -1
- package/out/language-server/chat/telemetry/chatTelemetryController.js +88 -81
- package/out/language-server/chat/telemetry/chatTelemetryController.js.map +1 -1
- package/out/language-server/codeWhispererSecurityScanServer.d.ts +2 -4
- package/out/language-server/codeWhispererSecurityScanServer.js +24 -11
- package/out/language-server/codeWhispererSecurityScanServer.js.map +1 -1
- package/out/language-server/codeWhispererServer.d.ts +1 -1
- package/out/language-server/codeWhispererServer.js +92 -38
- package/out/language-server/codeWhispererServer.js.map +1 -1
- package/out/language-server/codeWhispererService.d.ts +8 -1
- package/out/language-server/codeWhispererService.js +39 -16
- package/out/language-server/codeWhispererService.js.map +1 -1
- package/out/language-server/configuration/qConfigurationServer.d.ts +5 -9
- package/out/language-server/configuration/qConfigurationServer.js +23 -35
- package/out/language-server/configuration/qConfigurationServer.js.map +1 -1
- package/out/language-server/netTransformServer.js +2 -2
- package/out/language-server/netTransformServer.js.map +1 -1
- package/out/language-server/proxy-server.d.ts +1 -0
- package/out/language-server/proxy-server.js +8 -17
- package/out/language-server/proxy-server.js.map +1 -1
- package/out/language-server/qChatServer.d.ts +2 -4
- package/out/language-server/qChatServer.js +30 -16
- package/out/language-server/qChatServer.js.map +1 -1
- package/out/language-server/securityScan/constants.d.ts +3 -0
- package/out/language-server/securityScan/constants.js +7 -0
- package/out/language-server/securityScan/constants.js.map +1 -0
- package/out/language-server/securityScan/securityScanHandler.d.ts +5 -5
- package/out/language-server/securityScan/securityScanHandler.js +22 -12
- package/out/language-server/securityScan/securityScanHandler.js.map +1 -1
- package/out/language-server/telemetry/codeDiffTracker.d.ts +1 -1
- package/out/language-server/telemetry/codeDiffTracker.js +1 -1
- package/out/language-server/telemetry/codeDiffTracker.js.map +1 -1
- package/out/language-server/telemetryService.d.ts +7 -5
- package/out/language-server/telemetryService.js +29 -20
- package/out/language-server/telemetryService.js.map +1 -1
- package/out/language-server/testUtils.d.ts +3 -0
- package/out/language-server/testUtils.js +12 -1
- package/out/language-server/testUtils.js.map +1 -1
- package/out/language-server/utils.d.ts +2 -0
- package/out/language-server/utils.js +11 -0
- package/out/language-server/utils.js.map +1 -1
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,45 @@
|
|
|
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
|
+
|
|
17
|
+
## [0.0.29](https://github.com/aws/language-servers/compare/lsp-codewhisperer/v0.0.28...lsp-codewhisperer/v0.0.29) (2025-03-26)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
### Features
|
|
21
|
+
|
|
22
|
+
* abort all inflight requests when resetCodewhispererService is invoked ([#848](https://github.com/aws/language-servers/issues/848)) ([681889b](https://github.com/aws/language-servers/commit/681889bd40a0fb84ea624f177b07ef579864303a))
|
|
23
|
+
* added auth listener to reset the service manager state in case of bearer token signout ([#842](https://github.com/aws/language-servers/issues/842)) ([780be3f](https://github.com/aws/language-servers/commit/780be3fdb92917e58524472ea5967f405f802db5))
|
|
24
|
+
* **amazonq:** accept extra context for Q Inline Suggestions ([4a508df](https://github.com/aws/language-servers/commit/4a508dfcba714301145089263bdce8b8f18ec03b))
|
|
25
|
+
* **amazonq:** add eu-central-1 endpoint ([83133d6](https://github.com/aws/language-servers/commit/83133d61815c5acfba7ead1c87d0aaef206e72d4))
|
|
26
|
+
* **amazonq:** add regionalization support to security scan server ([#859](https://github.com/aws/language-servers/issues/859)) ([9945398](https://github.com/aws/language-servers/commit/99453989934849eddf1029763c22208cdb13be74))
|
|
27
|
+
* **amazonq:** add regionalization support to Telemetry service ([6937c7f](https://github.com/aws/language-servers/commit/6937c7fa53c94f23dab323d0cd92970edafd4452))
|
|
28
|
+
* **amazonq:** add support for setting profile to null ([b02906d](https://github.com/aws/language-servers/commit/b02906d04fad42f09e32d44120c4dd32cb2a649c))
|
|
29
|
+
* **amazonq:** attach profileArn to API calls when available ([00fe7e2](https://github.com/aws/language-servers/commit/00fe7e2d1327b519042480b8216d663a48dced54))
|
|
30
|
+
* **amazonq:** Cancel inflight updateProfile requests ([#861](https://github.com/aws/language-servers/issues/861)) ([a4a4309](https://github.com/aws/language-servers/commit/a4a4309ef1f7c0978aa44a4063d1e8160ad53bb6))
|
|
31
|
+
* **amazonq:** centralize access to Q Service SDK instance and add support for Q Developer profiles ([#814](https://github.com/aws/language-servers/issues/814)) ([5f11549](https://github.com/aws/language-servers/commit/5f11549bb37acf3788c991a4ceeb38a7b17f1324))
|
|
32
|
+
* **amazonq:** integrate q service manager with configuration server ([#852](https://github.com/aws/language-servers/issues/852)) ([c0e3290](https://github.com/aws/language-servers/commit/c0e32905e5940a79f59b19913aac9f989e85f8fe))
|
|
33
|
+
* **amazonq:** intergrate regionalization support into Q Chat server ([#853](https://github.com/aws/language-servers/issues/853)) ([394104c](https://github.com/aws/language-servers/commit/394104c3702055f55ababbbfb056bf7904f5115e))
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
### Bug Fixes
|
|
37
|
+
|
|
38
|
+
* **amazonq:** await for recordMetric in CodeDiff tracker ([ee04afc](https://github.com/aws/language-servers/commit/ee04afc7775e83bfa3868b4b661cf59ff3c7f949))
|
|
39
|
+
* **amazonq:** handle exceptions in TelemetryService ([e8f6375](https://github.com/aws/language-servers/commit/e8f637524fe878c26c72f506de4abea86b481fde))
|
|
40
|
+
* **amazonq:** specify code analysis scope and scan name when running scans ([#858](https://github.com/aws/language-servers/issues/858)) ([a925297](https://github.com/aws/language-servers/commit/a925297aabc89334f4f9eed6c13146f4fd20b164))
|
|
41
|
+
* update @aws/language-server-runtimes to 0.2.48 ([e1f620a](https://github.com/aws/language-servers/commit/e1f620ac2b59b4f61daff842a9f29ded1b8fa04e))
|
|
42
|
+
|
|
3
43
|
## [0.0.28](https://github.com/aws/language-servers/compare/lsp-codewhisperer/v0.0.27...lsp-codewhisperer/v0.0.28) (2025-03-18)
|
|
4
44
|
|
|
5
45
|
|
package/README.md
CHANGED
|
@@ -91,3 +91,6 @@ const params: InitializeParams = {
|
|
|
91
91
|
}
|
|
92
92
|
}
|
|
93
93
|
```
|
|
94
|
+
|
|
95
|
+
### Extra context for Q Inline Suggestions
|
|
96
|
+
In cases when the client runs in a specific environment that requires customized suggestions, the server supports a `aws.q.inlineSuggestions.extraContext` workspace configuration. This extra context will be passed to the left file content of the request in the beginning of the file.
|
|
@@ -2,7 +2,7 @@ import { AWSError } from 'aws-sdk';
|
|
|
2
2
|
import { ServiceConfigurationOptions } from 'aws-sdk/lib/service';
|
|
3
3
|
import CodeWhispererClient = require('./codewhispererbearertokenclient');
|
|
4
4
|
import { SDKInitializator } from '@aws/language-server-runtimes/server-interface';
|
|
5
|
-
interface RequestExtras {
|
|
5
|
+
export interface RequestExtras {
|
|
6
6
|
readonly service: AWS.Service;
|
|
7
7
|
readonly operation: string;
|
|
8
8
|
readonly params?: any;
|
package/out/constants.d.ts
CHANGED
|
@@ -2,4 +2,7 @@ export declare const DEFAULT_AWS_Q_ENDPOINT_URL = "https://codewhisperer.us-east
|
|
|
2
2
|
export declare const DEFAULT_AWS_Q_REGION = "us-east-1";
|
|
3
3
|
export declare const AWS_Q_ENDPOINTS: {
|
|
4
4
|
"us-east-1": string;
|
|
5
|
+
'eu-central-1': string;
|
|
5
6
|
};
|
|
7
|
+
export declare const AWS_Q_REGION_ENV_VAR = "AWS_Q_REGION";
|
|
8
|
+
export declare const AWS_Q_ENDPOINT_URL_ENV_VAR = "AWS_Q_ENDPOINT_URL";
|
package/out/constants.js
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.AWS_Q_ENDPOINTS = exports.DEFAULT_AWS_Q_REGION = exports.DEFAULT_AWS_Q_ENDPOINT_URL = void 0;
|
|
3
|
+
exports.AWS_Q_ENDPOINT_URL_ENV_VAR = exports.AWS_Q_REGION_ENV_VAR = exports.AWS_Q_ENDPOINTS = exports.DEFAULT_AWS_Q_REGION = exports.DEFAULT_AWS_Q_ENDPOINT_URL = void 0;
|
|
4
4
|
exports.DEFAULT_AWS_Q_ENDPOINT_URL = 'https://codewhisperer.us-east-1.amazonaws.com/';
|
|
5
5
|
exports.DEFAULT_AWS_Q_REGION = 'us-east-1';
|
|
6
6
|
exports.AWS_Q_ENDPOINTS = {
|
|
7
7
|
[exports.DEFAULT_AWS_Q_REGION]: exports.DEFAULT_AWS_Q_ENDPOINT_URL,
|
|
8
|
+
'eu-central-1': 'https://q.eu-central-1.amazonaws.com/',
|
|
8
9
|
};
|
|
10
|
+
exports.AWS_Q_REGION_ENV_VAR = 'AWS_Q_REGION';
|
|
11
|
+
exports.AWS_Q_ENDPOINT_URL_ENV_VAR = 'AWS_Q_ENDPOINT_URL';
|
|
9
12
|
//# sourceMappingURL=constants.js.map
|
package/out/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,0BAA0B,GAAG,gDAAgD,CAAA;AAC7E,QAAA,oBAAoB,GAAG,WAAW,CAAA;AAElC,QAAA,eAAe,GAAG;IAC3B,CAAC,4BAAoB,CAAC,EAAE,kCAA0B;
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,0BAA0B,GAAG,gDAAgD,CAAA;AAC7E,QAAA,oBAAoB,GAAG,WAAW,CAAA;AAElC,QAAA,eAAe,GAAG;IAC3B,CAAC,4BAAoB,CAAC,EAAE,kCAA0B;IAClD,cAAc,EAAE,uCAAuC;CAC1D,CAAA;AAEY,QAAA,oBAAoB,GAAG,cAAc,CAAA;AACrC,QAAA,0BAA0B,GAAG,oBAAoB,CAAA"}
|
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":"
|
|
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":"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"}
|
|
@@ -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
|