@aws/lsp-codewhisperer 0.0.4 → 0.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (159) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/out/client/sigv4/service.json +1 -1
  3. package/out/client/token/bearer-token-service.json +1 -1
  4. package/out/index.d.ts +1 -0
  5. package/out/index.js +1 -0
  6. package/out/index.js.map +1 -1
  7. package/out/language-server/chat/chatController.d.ts +25 -0
  8. package/out/language-server/chat/chatController.js +117 -0
  9. package/out/language-server/chat/chatController.js.map +1 -0
  10. package/out/language-server/chat/chatController.test.d.ts +1 -0
  11. package/out/language-server/chat/chatController.test.js +240 -0
  12. package/out/language-server/chat/chatController.test.js.map +1 -0
  13. package/out/language-server/chat/chatEventParser.d.ts +24 -0
  14. package/out/language-server/chat/chatEventParser.js +84 -0
  15. package/out/language-server/chat/chatEventParser.js.map +1 -0
  16. package/out/language-server/chat/chatEventParser.test.d.ts +1 -0
  17. package/out/language-server/chat/chatEventParser.test.js +189 -0
  18. package/out/language-server/chat/chatEventParser.test.js.map +1 -0
  19. package/out/language-server/chat/chatSessionManagementService.d.ts +16 -0
  20. package/out/language-server/chat/chatSessionManagementService.js +92 -0
  21. package/out/language-server/chat/chatSessionManagementService.js.map +1 -0
  22. package/out/language-server/chat/chatSessionManagementService.test.d.ts +1 -0
  23. package/out/language-server/chat/chatSessionManagementService.test.js +73 -0
  24. package/out/language-server/chat/chatSessionManagementService.test.js.map +1 -0
  25. package/out/language-server/chat/chatSessionService.d.ts +13 -0
  26. package/out/language-server/chat/chatSessionService.js +63 -0
  27. package/out/language-server/chat/chatSessionService.js.map +1 -0
  28. package/out/language-server/chat/chatSessionService.test.d.ts +1 -0
  29. package/out/language-server/chat/chatSessionService.test.js +80 -0
  30. package/out/language-server/chat/chatSessionService.test.js.map +1 -0
  31. package/out/language-server/chat/contexts/documentContext.d.ts +17 -0
  32. package/out/language-server/chat/contexts/documentContext.js +59 -0
  33. package/out/language-server/chat/contexts/documentContext.js.map +1 -0
  34. package/out/language-server/chat/contexts/documentContext.test.d.ts +1 -0
  35. package/out/language-server/chat/contexts/documentContext.test.js +147 -0
  36. package/out/language-server/chat/contexts/documentContext.test.js.map +1 -0
  37. package/out/language-server/chat/contexts/utils.d.ts +10 -0
  38. package/out/language-server/chat/contexts/utils.js +71 -0
  39. package/out/language-server/chat/contexts/utils.js.map +1 -0
  40. package/out/language-server/chat/contexts/utils.test.d.ts +1 -0
  41. package/out/language-server/chat/contexts/utils.test.js +72 -0
  42. package/out/language-server/chat/contexts/utils.test.js.map +1 -0
  43. package/out/language-server/chat/utils.d.ts +4 -0
  44. package/out/language-server/chat/utils.js +34 -0
  45. package/out/language-server/chat/utils.js.map +1 -0
  46. package/out/language-server/codeWhispererSecurityScanServer.d.ts +1 -1
  47. package/out/language-server/codeWhispererSecurityScanServer.js +41 -26
  48. package/out/language-server/codeWhispererSecurityScanServer.js.map +1 -1
  49. package/out/language-server/codeWhispererServer.js +1 -1
  50. package/out/language-server/codeWhispererServer.js.map +1 -1
  51. package/out/language-server/languageDetection.d.ts +9 -2
  52. package/out/language-server/languageDetection.js +84 -20
  53. package/out/language-server/languageDetection.js.map +1 -1
  54. package/out/language-server/languageDetection.test.d.ts +1 -0
  55. package/out/language-server/languageDetection.test.js +31 -0
  56. package/out/language-server/languageDetection.test.js.map +1 -0
  57. package/out/language-server/proxy-server.d.ts +1 -0
  58. package/out/language-server/proxy-server.js +35 -1
  59. package/out/language-server/proxy-server.js.map +1 -1
  60. package/out/language-server/qChatServer.d.ts +3 -0
  61. package/out/language-server/qChatServer.js +31 -0
  62. package/out/language-server/qChatServer.js.map +1 -0
  63. package/out/language-server/qChatServer.test.d.ts +1 -0
  64. package/out/language-server/qChatServer.test.js +51 -0
  65. package/out/language-server/qChatServer.test.js.map +1 -0
  66. package/out/language-server/securityScan/securityScanDiagnosticsProvider.d.ts +2 -3
  67. package/out/language-server/securityScan/securityScanDiagnosticsProvider.js +5 -23
  68. package/out/language-server/securityScan/securityScanDiagnosticsProvider.js.map +1 -1
  69. package/out/language-server/securityScan/types.d.ts +8 -6
  70. package/out/language-server/testUtils.d.ts +1 -0
  71. package/out/language-server/testUtils.js +17 -1
  72. package/out/language-server/testUtils.js.map +1 -1
  73. package/out/language-server/types.d.ts +13 -0
  74. package/out/language-server/types.js +3 -0
  75. package/out/language-server/types.js.map +1 -0
  76. package/out/language-server/utils.d.ts +3 -0
  77. package/out/language-server/utils.js +19 -1
  78. package/out/language-server/utils.js.map +1 -1
  79. package/out/language-server/utils.test.d.ts +1 -0
  80. package/out/language-server/utils.test.js +33 -0
  81. package/out/language-server/utils.test.js.map +1 -0
  82. package/package.json +13 -4
  83. package/src.gen/@amzn/codewhisperer-streaming/LICENSE +201 -0
  84. package/src.gen/@amzn/codewhisperer-streaming/README.md +464 -0
  85. package/src.gen/@amzn/codewhisperer-streaming/api-extractor.json +4 -0
  86. package/src.gen/@amzn/codewhisperer-streaming/dist-cjs/CodeWhispererStreaming.js +17 -0
  87. package/src.gen/@amzn/codewhisperer-streaming/dist-cjs/CodeWhispererStreamingClient.js +42 -0
  88. package/src.gen/@amzn/codewhisperer-streaming/dist-cjs/commands/ExportResultArchiveCommand.js +42 -0
  89. package/src.gen/@amzn/codewhisperer-streaming/dist-cjs/commands/GenerateAssistantResponseCommand.js +42 -0
  90. package/src.gen/@amzn/codewhisperer-streaming/dist-cjs/commands/GenerateTaskAssistPlanCommand.js +42 -0
  91. package/src.gen/@amzn/codewhisperer-streaming/dist-cjs/commands/index.js +6 -0
  92. package/src.gen/@amzn/codewhisperer-streaming/dist-cjs/endpoints.js +165 -0
  93. package/src.gen/@amzn/codewhisperer-streaming/dist-cjs/extensionConfiguration.js +2 -0
  94. package/src.gen/@amzn/codewhisperer-streaming/dist-cjs/index.js +10 -0
  95. package/src.gen/@amzn/codewhisperer-streaming/dist-cjs/models/CodeWhispererStreamingServiceException.js +12 -0
  96. package/src.gen/@amzn/codewhisperer-streaming/dist-cjs/models/index.js +4 -0
  97. package/src.gen/@amzn/codewhisperer-streaming/dist-cjs/models/models_0.js +361 -0
  98. package/src.gen/@amzn/codewhisperer-streaming/dist-cjs/protocols/Aws_restJson1.js +458 -0
  99. package/src.gen/@amzn/codewhisperer-streaming/dist-cjs/runtimeConfig.browser.js +38 -0
  100. package/src.gen/@amzn/codewhisperer-streaming/dist-cjs/runtimeConfig.js +46 -0
  101. package/src.gen/@amzn/codewhisperer-streaming/dist-cjs/runtimeConfig.native.js +15 -0
  102. package/src.gen/@amzn/codewhisperer-streaming/dist-cjs/runtimeConfig.shared.js +22 -0
  103. package/src.gen/@amzn/codewhisperer-streaming/dist-cjs/runtimeExtensions.js +22 -0
  104. package/src.gen/@amzn/codewhisperer-streaming/dist-es/CodeWhispererStreaming.js +13 -0
  105. package/src.gen/@amzn/codewhisperer-streaming/dist-es/CodeWhispererStreamingClient.js +38 -0
  106. package/src.gen/@amzn/codewhisperer-streaming/dist-es/commands/ExportResultArchiveCommand.js +38 -0
  107. package/src.gen/@amzn/codewhisperer-streaming/dist-es/commands/GenerateAssistantResponseCommand.js +38 -0
  108. package/src.gen/@amzn/codewhisperer-streaming/dist-es/commands/GenerateTaskAssistPlanCommand.js +38 -0
  109. package/src.gen/@amzn/codewhisperer-streaming/dist-es/commands/index.js +3 -0
  110. package/src.gen/@amzn/codewhisperer-streaming/dist-es/endpoints.js +161 -0
  111. package/src.gen/@amzn/codewhisperer-streaming/dist-es/extensionConfiguration.js +1 -0
  112. package/src.gen/@amzn/codewhisperer-streaming/dist-es/index.js +5 -0
  113. package/src.gen/@amzn/codewhisperer-streaming/dist-es/models/CodeWhispererStreamingServiceException.js +8 -0
  114. package/src.gen/@amzn/codewhisperer-streaming/dist-es/models/index.js +1 -0
  115. package/src.gen/@amzn/codewhisperer-streaming/dist-es/models/models_0.js +328 -0
  116. package/src.gen/@amzn/codewhisperer-streaming/dist-es/protocols/Aws_restJson1.js +449 -0
  117. package/src.gen/@amzn/codewhisperer-streaming/dist-es/runtimeConfig.browser.js +33 -0
  118. package/src.gen/@amzn/codewhisperer-streaming/dist-es/runtimeConfig.js +41 -0
  119. package/src.gen/@amzn/codewhisperer-streaming/dist-es/runtimeConfig.native.js +11 -0
  120. package/src.gen/@amzn/codewhisperer-streaming/dist-es/runtimeConfig.shared.js +18 -0
  121. package/src.gen/@amzn/codewhisperer-streaming/dist-es/runtimeExtensions.js +18 -0
  122. package/src.gen/@amzn/codewhisperer-streaming/dist-types/CodeWhispererStreaming.d.ts +30 -0
  123. package/src.gen/@amzn/codewhisperer-streaming/dist-types/CodeWhispererStreamingClient.d.ts +169 -0
  124. package/src.gen/@amzn/codewhisperer-streaming/dist-types/commands/ExportResultArchiveCommand.d.ts +103 -0
  125. package/src.gen/@amzn/codewhisperer-streaming/dist-types/commands/GenerateAssistantResponseCommand.d.ts +294 -0
  126. package/src.gen/@amzn/codewhisperer-streaming/dist-types/commands/GenerateTaskAssistPlanCommand.d.ts +304 -0
  127. package/src.gen/@amzn/codewhisperer-streaming/dist-types/commands/index.d.ts +3 -0
  128. package/src.gen/@amzn/codewhisperer-streaming/dist-types/endpoints.d.ts +2 -0
  129. package/src.gen/@amzn/codewhisperer-streaming/dist-types/extensionConfiguration.d.ts +8 -0
  130. package/src.gen/@amzn/codewhisperer-streaming/dist-types/index.d.ts +5 -0
  131. package/src.gen/@amzn/codewhisperer-streaming/dist-types/models/CodeWhispererStreamingServiceException.d.ts +13 -0
  132. package/src.gen/@amzn/codewhisperer-streaming/dist-types/models/index.d.ts +1 -0
  133. package/src.gen/@amzn/codewhisperer-streaming/dist-types/models/models_0.d.ts +1173 -0
  134. package/src.gen/@amzn/codewhisperer-streaming/dist-types/protocols/Aws_restJson1.d.ts +29 -0
  135. package/src.gen/@amzn/codewhisperer-streaming/dist-types/runtimeConfig.browser.d.ts +39 -0
  136. package/src.gen/@amzn/codewhisperer-streaming/dist-types/runtimeConfig.d.ts +39 -0
  137. package/src.gen/@amzn/codewhisperer-streaming/dist-types/runtimeConfig.native.d.ts +38 -0
  138. package/src.gen/@amzn/codewhisperer-streaming/dist-types/runtimeConfig.shared.d.ts +17 -0
  139. package/src.gen/@amzn/codewhisperer-streaming/dist-types/runtimeExtensions.d.ts +17 -0
  140. package/src.gen/@amzn/codewhisperer-streaming/package.json +87 -0
  141. package/src.gen/@amzn/codewhisperer-streaming/src/CodeWhispererStreaming.ts +84 -0
  142. package/src.gen/@amzn/codewhisperer-streaming/src/CodeWhispererStreamingClient.ts +304 -0
  143. package/src.gen/@amzn/codewhisperer-streaming/src/commands/ExportResultArchiveCommand.ts +177 -0
  144. package/src.gen/@amzn/codewhisperer-streaming/src/commands/GenerateAssistantResponseCommand.ts +369 -0
  145. package/src.gen/@amzn/codewhisperer-streaming/src/commands/GenerateTaskAssistPlanCommand.ts +379 -0
  146. package/src.gen/@amzn/codewhisperer-streaming/src/commands/index.ts +4 -0
  147. package/src.gen/@amzn/codewhisperer-streaming/src/endpoints.ts +170 -0
  148. package/src.gen/@amzn/codewhisperer-streaming/src/extensionConfiguration.ts +12 -0
  149. package/src.gen/@amzn/codewhisperer-streaming/src/index.ts +8 -0
  150. package/src.gen/@amzn/codewhisperer-streaming/src/models/CodeWhispererStreamingServiceException.ts +22 -0
  151. package/src.gen/@amzn/codewhisperer-streaming/src/models/index.ts +2 -0
  152. package/src.gen/@amzn/codewhisperer-streaming/src/models/models_0.ts +1518 -0
  153. package/src.gen/@amzn/codewhisperer-streaming/src/protocols/Aws_restJson1.ts +740 -0
  154. package/src.gen/@amzn/codewhisperer-streaming/src/runtimeConfig.browser.ts +42 -0
  155. package/src.gen/@amzn/codewhisperer-streaming/src/runtimeConfig.native.ts +17 -0
  156. package/src.gen/@amzn/codewhisperer-streaming/src/runtimeConfig.shared.ts +24 -0
  157. package/src.gen/@amzn/codewhisperer-streaming/src/runtimeConfig.ts +55 -0
  158. package/src.gen/@amzn/codewhisperer-streaming/src/runtimeExtensions.ts +44 -0
  159. package/src.gen/@amzn/codewhisperer-streaming/typedoc.json +5 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.0.5] - 2024-05-15
4
+ - Create Chat server export it for consumption
5
+ - Fix duplicate hover message in security scan
6
+ - Clear security scan finding when a project is unloaded
7
+ - Fix the consumption of streaming client
8
+ - Add `json`, `yaml` and `java` to list of supported languages
9
+
3
10
  ## [0.0.4] - 2024-03-28
4
11
  - Integrate dependency graph with RunSecurityScan function
5
12
  - Add server for transform feature
@@ -192,7 +192,7 @@
192
192
  "type": "string",
193
193
  "max": 128,
194
194
  "min": 1,
195
- "pattern": "(python|javascript|java|csharp|typescript|c|cpp|go|kotlin|php|ruby|rust|scala|shell|sql)"
195
+ "pattern": "(python|javascript|java|csharp|typescript|c|cpp|go|kotlin|php|ruby|rust|scala|shell|sql|json|yaml|vue|tf|tsx|jsx)"
196
196
  },
197
197
  "Recommendation": {
198
198
  "type": "structure",
@@ -1036,7 +1036,7 @@
1036
1036
  "type": "string",
1037
1037
  "max": 128,
1038
1038
  "min": 1,
1039
- "pattern": "(python|javascript|java|csharp|typescript|c|cpp|go|kotlin|php|ruby|rust|scala|shell|sql|json|yaml|vue|tf)"
1039
+ "pattern": "(python|javascript|java|csharp|typescript|c|cpp|go|kotlin|php|ruby|rust|scala|shell|sql|json|yaml|vue|tf|tsx|jsx)"
1040
1040
  },
1041
1041
  "ProgressUpdates": {
1042
1042
  "type": "list",
package/out/index.d.ts CHANGED
@@ -1,2 +1,3 @@
1
1
  export * from './language-server/codeWhispererSecurityScanServer';
2
2
  export * from './language-server/codeWhispererServer';
3
+ export * from './language-server/qChatServer';
package/out/index.js CHANGED
@@ -16,4 +16,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./language-server/codeWhispererSecurityScanServer"), exports);
18
18
  __exportStar(require("./language-server/codeWhispererServer"), exports);
19
+ __exportStar(require("./language-server/qChatServer"), exports);
19
20
  //# sourceMappingURL=index.js.map
package/out/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,oFAAiE;AACjE,wEAAqD"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,oFAAiE;AACjE,wEAAqD;AACrD,gEAA6C"}
@@ -0,0 +1,25 @@
1
+ import { ChatParams } from '@aws/language-server-runtimes-types';
2
+ import { CancellationToken, Chat, ChatResult, EndChatParams, ResponseError, TabAddParams, TabRemoveParams } from '@aws/language-server-runtimes/server-interface';
3
+ import { Features, LspHandlers } from '../types';
4
+ import { ChatSessionManagementService } from './chatSessionManagementService';
5
+ type ChatHandlers = LspHandlers<Chat>;
6
+ export declare class ChatController implements ChatHandlers {
7
+ #private;
8
+ constructor(chatSessionManagementService: ChatSessionManagementService, features: Features);
9
+ onChatPrompt(params: ChatParams, token: CancellationToken): Promise<ChatResult | ResponseError<ChatResult>>;
10
+ onCodeInsertToCursorPosition(): void;
11
+ onCopyCodeToClipboard(): void;
12
+ onEndChat(params: EndChatParams, _token: CancellationToken): boolean;
13
+ onFollowUpClicked(): void;
14
+ onInfoLinkClick(): void;
15
+ onLinkClick(): void;
16
+ onSendFeedback(): void;
17
+ onQuickAction(): never;
18
+ onReady(): void;
19
+ onSourceLinkClick(): void;
20
+ onTabAdd(params: TabAddParams): void;
21
+ onTabChange(): void;
22
+ onTabRemove(params: TabRemoveParams): void;
23
+ onVote(): void;
24
+ }
25
+ export {};
@@ -0,0 +1,117 @@
1
+ "use strict";
2
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
3
+ if (kind === "m") throw new TypeError("Private method is not writable");
4
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
5
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
6
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
7
+ };
8
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
9
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
10
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
11
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
12
+ };
13
+ var _ChatController_instances, _ChatController_features, _ChatController_chatSessionManagementService, _ChatController_documentContextExtractor, _ChatController_extractEditorState, _ChatController_processAssistantResponse, _ChatController_log;
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.ChatController = void 0;
16
+ const protocol_1 = require("@aws/language-server-runtimes/protocol");
17
+ const server_interface_1 = require("@aws/language-server-runtimes/server-interface");
18
+ const chatEventParser_1 = require("./chatEventParser");
19
+ const documentContext_1 = require("./contexts/documentContext");
20
+ const utils_1 = require("./utils");
21
+ class ChatController {
22
+ constructor(chatSessionManagementService, features) {
23
+ _ChatController_instances.add(this);
24
+ _ChatController_features.set(this, void 0);
25
+ _ChatController_chatSessionManagementService.set(this, void 0);
26
+ _ChatController_documentContextExtractor.set(this, void 0);
27
+ __classPrivateFieldSet(this, _ChatController_features, features, "f");
28
+ __classPrivateFieldSet(this, _ChatController_chatSessionManagementService, chatSessionManagementService, "f");
29
+ __classPrivateFieldSet(this, _ChatController_documentContextExtractor, new documentContext_1.DocumentContextExtractor(), "f");
30
+ }
31
+ async onChatPrompt(params, token) {
32
+ const sessionResult = __classPrivateFieldGet(this, _ChatController_chatSessionManagementService, "f").getSession(params.tabId);
33
+ const { data: session } = sessionResult;
34
+ if (!session) {
35
+ __classPrivateFieldGet(this, _ChatController_instances, "m", _ChatController_log).call(this, 'Session not found for tabId', params.tabId);
36
+ return new server_interface_1.ResponseError(server_interface_1.ErrorCodes.InvalidParams, 'error' in sessionResult ? sessionResult.error : 'Unknown error');
37
+ }
38
+ token.onCancellationRequested(() => {
39
+ __classPrivateFieldGet(this, _ChatController_instances, "m", _ChatController_log).call(this, 'cancellation requested');
40
+ session.abortRequest();
41
+ });
42
+ const editorState = await __classPrivateFieldGet(this, _ChatController_instances, "m", _ChatController_extractEditorState).call(this, params.textDocument, params.cursorState);
43
+ const requestInput = (0, utils_1.convertChatParamsToRequestInput)(params, editorState);
44
+ if (!requestInput.success) {
45
+ __classPrivateFieldGet(this, _ChatController_instances, "m", _ChatController_log).call(this, requestInput.error);
46
+ return new server_interface_1.ResponseError(server_interface_1.ErrorCodes.InvalidParams, requestInput.error);
47
+ }
48
+ let response;
49
+ try {
50
+ __classPrivateFieldGet(this, _ChatController_instances, "m", _ChatController_log).call(this, 'Request from tab:', params.tabId, 'conversation id:', requestInput.data.conversationState?.conversationId ?? 'undefined');
51
+ response = await session.generateAssistantResponse(requestInput.data);
52
+ __classPrivateFieldGet(this, _ChatController_instances, "m", _ChatController_log).call(this, 'Response to tab:', params.tabId, JSON.stringify(response.$metadata));
53
+ }
54
+ catch (err) {
55
+ __classPrivateFieldGet(this, _ChatController_instances, "m", _ChatController_log).call(this, `Q api request error ${err instanceof Error ? err.message : 'unknown'}`);
56
+ return new server_interface_1.ResponseError(server_interface_1.ErrorCodes.InternalError, err instanceof Error ? err.message : 'Internal Server Error');
57
+ }
58
+ try {
59
+ const result = await __classPrivateFieldGet(this, _ChatController_instances, "m", _ChatController_processAssistantResponse).call(this, response, params.partialResultToken);
60
+ return result.success
61
+ ? result.data
62
+ : new server_interface_1.ResponseError(server_interface_1.ErrorCodes.InternalError, result.error, result.data);
63
+ }
64
+ catch (err) {
65
+ __classPrivateFieldGet(this, _ChatController_instances, "m", _ChatController_log).call(this, 'Error encountered during response streaming:', err instanceof Error ? err.message : 'unknown');
66
+ return new server_interface_1.ResponseError(server_interface_1.ErrorCodes.InternalError, err instanceof Error ? err.message : 'Internal Server Error');
67
+ }
68
+ }
69
+ onCodeInsertToCursorPosition() { }
70
+ onCopyCodeToClipboard() { }
71
+ onEndChat(params, _token) {
72
+ const { success } = __classPrivateFieldGet(this, _ChatController_chatSessionManagementService, "f").deleteSession(params.tabId);
73
+ return success;
74
+ }
75
+ onFollowUpClicked() { }
76
+ onInfoLinkClick() { }
77
+ onLinkClick() { }
78
+ onSendFeedback() { }
79
+ onQuickAction() {
80
+ throw new Error('Method not implemented.');
81
+ }
82
+ onReady() { }
83
+ onSourceLinkClick() { }
84
+ onTabAdd(params) {
85
+ __classPrivateFieldGet(this, _ChatController_chatSessionManagementService, "f").createSession(params.tabId);
86
+ }
87
+ onTabChange() { }
88
+ onTabRemove(params) {
89
+ __classPrivateFieldGet(this, _ChatController_chatSessionManagementService, "f").deleteSession(params.tabId);
90
+ }
91
+ onVote() { }
92
+ }
93
+ exports.ChatController = ChatController;
94
+ _ChatController_features = new WeakMap(), _ChatController_chatSessionManagementService = new WeakMap(), _ChatController_documentContextExtractor = new WeakMap(), _ChatController_instances = new WeakSet(), _ChatController_extractEditorState = async function _ChatController_extractEditorState(identifier, cursorState) {
95
+ if (!identifier || !Array.isArray(cursorState) || cursorState.length === 0) {
96
+ return;
97
+ }
98
+ const textDocument = await __classPrivateFieldGet(this, _ChatController_features, "f").workspace.getTextDocument(identifier.uri);
99
+ return textDocument && (await __classPrivateFieldGet(this, _ChatController_documentContextExtractor, "f").extractEditorState(textDocument, cursorState[0]));
100
+ }, _ChatController_processAssistantResponse = async function _ChatController_processAssistantResponse(response, partialResultToken) {
101
+ const chatEventParser = new chatEventParser_1.ChatEventParser(response.$metadata.requestId);
102
+ for await (const chatEvent of response.generateAssistantResponseResponse) {
103
+ __classPrivateFieldGet(this, _ChatController_instances, "m", _ChatController_log).call(this, 'Streaming partial chat event');
104
+ const chatResult = chatEventParser.processPartialEvent(chatEvent);
105
+ // terminate early when there is an error
106
+ if (!chatResult.success) {
107
+ return chatResult;
108
+ }
109
+ if (partialResultToken) {
110
+ __classPrivateFieldGet(this, _ChatController_features, "f").lsp.sendProgress(protocol_1.chatRequestType, partialResultToken, chatResult.data);
111
+ }
112
+ }
113
+ return chatEventParser.getChatResult();
114
+ }, _ChatController_log = function _ChatController_log(...messages) {
115
+ __classPrivateFieldGet(this, _ChatController_features, "f").logging.log(messages.join(' '));
116
+ };
117
+ //# sourceMappingURL=chatController.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chatController.js","sourceRoot":"","sources":["../../../src/language-server/chat/chatController.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,240 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const codewhisperer_streaming_1 = require("@amzn/codewhisperer-streaming");
4
+ const server_interface_1 = require("@aws/language-server-runtimes/server-interface");
5
+ const testing_1 = require("@aws/language-server-runtimes/testing");
6
+ const assert = require("assert");
7
+ const ts_sinon_1 = require("ts-sinon");
8
+ const testUtils_1 = require("../testUtils");
9
+ const chatController_1 = require("./chatController");
10
+ const chatSessionManagementService_1 = require("./chatSessionManagementService");
11
+ const chatSessionService_1 = require("./chatSessionService");
12
+ const documentContext_1 = require("./contexts/documentContext");
13
+ describe('ChatController', () => {
14
+ const mockTabId = 'tab-1';
15
+ const mockConversationId = 'mock-conversation-id';
16
+ const mockMessageId = 'mock-message-id';
17
+ const mockAssistantResponseList = [
18
+ {
19
+ assistantResponseEvent: {
20
+ content: 'Hello ',
21
+ },
22
+ },
23
+ {
24
+ assistantResponseEvent: {
25
+ content: 'World',
26
+ },
27
+ },
28
+ {
29
+ assistantResponseEvent: {
30
+ content: '!',
31
+ },
32
+ },
33
+ ];
34
+ const expectedCompleteChatResult = {
35
+ messageId: mockMessageId,
36
+ body: 'Hello World!',
37
+ canBeVoted: undefined,
38
+ codeReference: undefined,
39
+ followUp: undefined,
40
+ relatedContent: undefined,
41
+ };
42
+ const mockCancellationToken = {
43
+ isCancellationRequested: false,
44
+ onCancellationRequested: () => ({ dispose: () => null }),
45
+ };
46
+ let generateAssistantResponseStub;
47
+ let disposeStub;
48
+ let testFeatures;
49
+ let chatSessionManagementService;
50
+ let chatController;
51
+ beforeEach(() => {
52
+ generateAssistantResponseStub = ts_sinon_1.default
53
+ .stub(codewhisperer_streaming_1.CodeWhispererStreaming.prototype, 'generateAssistantResponse')
54
+ .callsFake(() => {
55
+ return new Promise(resolve => setTimeout(() => {
56
+ resolve({
57
+ conversationId: mockConversationId,
58
+ $metadata: {
59
+ requestId: mockMessageId,
60
+ },
61
+ generateAssistantResponseResponse: (0, testUtils_1.createIterableResponse)(mockAssistantResponseList),
62
+ });
63
+ }));
64
+ });
65
+ testFeatures = new testing_1.TestFeatures();
66
+ disposeStub = ts_sinon_1.default.stub(chatSessionService_1.ChatSessionService.prototype, 'dispose');
67
+ chatSessionManagementService = chatSessionManagementService_1.ChatSessionManagementService.getInstance().withCredentialsProvider(testFeatures.credentialsProvider);
68
+ chatController = new chatController_1.ChatController(chatSessionManagementService, testFeatures);
69
+ });
70
+ afterEach(() => {
71
+ generateAssistantResponseStub.restore();
72
+ disposeStub.restore();
73
+ chatSessionManagementService_1.ChatSessionManagementService.reset();
74
+ });
75
+ it('creates a session when a tab add notifcation is received', () => {
76
+ chatController.onTabAdd({ tabId: mockTabId });
77
+ const sessionResult = chatSessionManagementService.getSession(mockTabId);
78
+ ts_sinon_1.default.assert.match(sessionResult, {
79
+ success: true,
80
+ data: ts_sinon_1.default.match.instanceOf(chatSessionService_1.ChatSessionService),
81
+ });
82
+ });
83
+ it('deletes a session by tab id when a tab remove notifcation is received', () => {
84
+ chatController.onTabAdd({ tabId: mockTabId });
85
+ assert.ok(chatSessionManagementService.getSession(mockTabId).data instanceof chatSessionService_1.ChatSessionService);
86
+ chatController.onTabRemove({ tabId: mockTabId });
87
+ ts_sinon_1.default.assert.calledOnce(disposeStub);
88
+ const sessionResult = chatSessionManagementService.getSession(mockTabId);
89
+ ts_sinon_1.default.assert.match(sessionResult, {
90
+ success: false,
91
+ error: ts_sinon_1.default.match.string,
92
+ });
93
+ });
94
+ it('deletes a session by tab id a end chat request is received', () => {
95
+ chatController.onTabAdd({ tabId: mockTabId });
96
+ chatController.onEndChat({ tabId: mockTabId }, mockCancellationToken);
97
+ ts_sinon_1.default.assert.calledOnce(disposeStub);
98
+ const sessionResult = chatSessionManagementService.getSession(mockTabId);
99
+ ts_sinon_1.default.assert.match(sessionResult, {
100
+ success: false,
101
+ error: ts_sinon_1.default.match.string,
102
+ });
103
+ });
104
+ describe('onChatPrompt', () => {
105
+ beforeEach(() => {
106
+ chatController.onTabAdd({ tabId: mockTabId });
107
+ });
108
+ it('throw error if session is not found', async () => {
109
+ const result = await chatController.onChatPrompt({ tabId: 'XXXX', prompt: { prompt: 'Hello' } }, mockCancellationToken);
110
+ assert.ok(result instanceof server_interface_1.ResponseError);
111
+ });
112
+ it('read all the response streams and return compiled results', async () => {
113
+ const chatResultPromise = chatController.onChatPrompt({ tabId: mockTabId, prompt: { prompt: 'Hello' } }, mockCancellationToken);
114
+ const chatResult = await chatResultPromise;
115
+ ts_sinon_1.default.assert.callCount(testFeatures.lsp.sendProgress, 0);
116
+ assert.deepStrictEqual(chatResult, expectedCompleteChatResult);
117
+ });
118
+ it('read all the response streams and send progress as partial result is received', async () => {
119
+ const chatResultPromise = chatController.onChatPrompt({ tabId: mockTabId, prompt: { prompt: 'Hello' }, partialResultToken: 1 }, mockCancellationToken);
120
+ const chatResult = await chatResultPromise;
121
+ ts_sinon_1.default.assert.callCount(testFeatures.lsp.sendProgress, mockAssistantResponseList.length);
122
+ assert.deepStrictEqual(chatResult, expectedCompleteChatResult);
123
+ });
124
+ it('returns a ResponseError if request input is not valid', async () => {
125
+ const chatResultPromise = chatController.onChatPrompt({ tabId: mockTabId, prompt: {} }, mockCancellationToken);
126
+ const chatResult = await chatResultPromise;
127
+ assert.ok(chatResult instanceof server_interface_1.ResponseError);
128
+ });
129
+ it('returns a ResponseError if generateAssistantResponse returns an error', async () => {
130
+ generateAssistantResponseStub.callsFake(() => {
131
+ throw new Error('Error');
132
+ });
133
+ const chatResult = await chatController.onChatPrompt({ tabId: mockTabId, prompt: { prompt: 'Hello' } }, mockCancellationToken);
134
+ assert.ok(chatResult instanceof server_interface_1.ResponseError);
135
+ });
136
+ it('returns a ResponseError if response streams return an error event', async () => {
137
+ generateAssistantResponseStub.callsFake(() => {
138
+ return Promise.resolve({
139
+ conversationId: mockConversationId,
140
+ $metadata: {
141
+ requestId: mockMessageId,
142
+ },
143
+ generateAssistantResponseResponse: (0, testUtils_1.createIterableResponse)([
144
+ // ["Hello ", "World"]
145
+ ...mockAssistantResponseList.slice(0, 2),
146
+ { error: { message: 'some error' } },
147
+ // ["!"]
148
+ ...mockAssistantResponseList.slice(2),
149
+ ]),
150
+ });
151
+ });
152
+ const chatResult = await chatController.onChatPrompt({ tabId: mockTabId, prompt: { prompt: 'Hello' } }, mockCancellationToken);
153
+ assert.deepStrictEqual(chatResult, new server_interface_1.ResponseError(server_interface_1.ErrorCodes.InternalError, 'some error', {
154
+ ...expectedCompleteChatResult,
155
+ body: 'Hello World',
156
+ }));
157
+ });
158
+ it('returns a ResponseError if response streams return an invalid state event', async () => {
159
+ generateAssistantResponseStub.callsFake(() => {
160
+ return Promise.resolve({
161
+ conversationId: mockConversationId,
162
+ $metadata: {
163
+ requestId: mockMessageId,
164
+ },
165
+ generateAssistantResponseResponse: (0, testUtils_1.createIterableResponse)([
166
+ // ["Hello ", "World"]
167
+ ...mockAssistantResponseList.slice(0, 2),
168
+ { invalidStateEvent: { message: 'invalid state' } },
169
+ // ["!"]
170
+ ...mockAssistantResponseList.slice(2),
171
+ ]),
172
+ });
173
+ });
174
+ const chatResult = await chatController.onChatPrompt({ tabId: mockTabId, prompt: { prompt: 'Hello' } }, mockCancellationToken);
175
+ assert.deepStrictEqual(chatResult, new server_interface_1.ResponseError(server_interface_1.ErrorCodes.InternalError, 'invalid state', {
176
+ ...expectedCompleteChatResult,
177
+ body: 'Hello World',
178
+ }));
179
+ });
180
+ describe('#extractEditorState', () => {
181
+ const typescriptDocument = server_interface_1.TextDocument.create('file:///test.ts', 'typescript', 1, 'test');
182
+ let extractEditorStateStub;
183
+ const editorStateObject = {};
184
+ const mockCursorState = {
185
+ range: {
186
+ start: {
187
+ line: 1,
188
+ character: 1,
189
+ },
190
+ end: {
191
+ line: 1,
192
+ character: 1,
193
+ },
194
+ },
195
+ };
196
+ beforeEach(() => {
197
+ extractEditorStateStub = ts_sinon_1.default.stub(documentContext_1.DocumentContextExtractor.prototype, 'extractEditorState');
198
+ testFeatures.openDocument(typescriptDocument);
199
+ extractEditorStateStub.resolves(editorStateObject);
200
+ });
201
+ afterEach(() => {
202
+ extractEditorStateStub.restore();
203
+ });
204
+ it('leaves editor state as undefined if cursorState is not passed', async () => {
205
+ await chatController.onChatPrompt({
206
+ tabId: mockTabId,
207
+ prompt: { prompt: 'Hello' },
208
+ textDocument: { uri: 'file:///test.ts' },
209
+ cursorState: undefined,
210
+ }, mockCancellationToken);
211
+ const calledRequestInput = generateAssistantResponseStub.firstCall.firstArg;
212
+ assert.strictEqual(calledRequestInput.conversationState?.currentMessage?.userInputMessage?.userInputMessageContext
213
+ ?.editorState, undefined);
214
+ });
215
+ it('leaves editor state as undefined if document identified is not passed', async () => {
216
+ await chatController.onChatPrompt({
217
+ tabId: mockTabId,
218
+ prompt: { prompt: 'Hello' },
219
+ cursorState: [mockCursorState],
220
+ }, mockCancellationToken);
221
+ const calledRequestInput = generateAssistantResponseStub.firstCall.firstArg;
222
+ assert.strictEqual(calledRequestInput.conversationState?.currentMessage?.userInputMessage?.userInputMessageContext
223
+ ?.editorState, undefined);
224
+ });
225
+ it('parses editor state context and includes as requestInput if both cursor state and text document are found', async () => {
226
+ await chatController.onChatPrompt({
227
+ tabId: mockTabId,
228
+ prompt: { prompt: 'Hello' },
229
+ textDocument: { uri: 'file:///test.ts' },
230
+ cursorState: [mockCursorState],
231
+ }, mockCancellationToken);
232
+ const calledRequestInput = generateAssistantResponseStub.firstCall.firstArg;
233
+ // asserting object reference equality
234
+ assert.strictEqual(calledRequestInput.conversationState?.currentMessage?.userInputMessage?.userInputMessageContext
235
+ ?.editorState, editorStateObject);
236
+ });
237
+ });
238
+ });
239
+ });
240
+ //# sourceMappingURL=chatController.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chatController.test.js","sourceRoot":"","sources":["../../../src/language-server/chat/chatController.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { ChatResponseStream, Reference, SupplementaryWebLink } from '@amzn/codewhisperer-streaming';
2
+ import { ChatItemAction, ChatResult, ReferenceTrackerInformation, SourceLink } from '@aws/language-server-runtimes/protocol';
3
+ import { Result } from '../types';
4
+ export declare class ChatEventParser implements ChatResult {
5
+ error?: string;
6
+ messageId?: string;
7
+ body?: string;
8
+ canBeVoted?: boolean;
9
+ relatedContent?: {
10
+ title?: string;
11
+ content: SourceLink[];
12
+ };
13
+ followUp?: {
14
+ text?: string;
15
+ options?: ChatItemAction[];
16
+ };
17
+ codeReference?: ReferenceTrackerInformation[];
18
+ static getReferencedInformation(reference: Reference): string;
19
+ static mapRelatedData({ title, url, snippet }: SupplementaryWebLink): SourceLink;
20
+ static mapReferenceData(reference: Reference): ReferenceTrackerInformation;
21
+ constructor(messageId: string);
22
+ processPartialEvent(chatEvent: ChatResponseStream): Result<ChatResult, string>;
23
+ getChatResult(): Result<ChatResult, string>;
24
+ }
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ChatEventParser = void 0;
4
+ class ChatEventParser {
5
+ static getReferencedInformation(reference) {
6
+ return `Reference code under **${reference.licenseName}** license from repository \`${reference.repository}\``;
7
+ }
8
+ static mapRelatedData({ title = '', url = '', snippet }) {
9
+ return {
10
+ title,
11
+ url,
12
+ body: snippet,
13
+ };
14
+ }
15
+ static mapReferenceData(reference) {
16
+ return {
17
+ ...reference,
18
+ information: ChatEventParser.getReferencedInformation(reference),
19
+ };
20
+ }
21
+ constructor(messageId) {
22
+ this.messageId = messageId;
23
+ }
24
+ processPartialEvent(chatEvent) {
25
+ const { followupPromptEvent, supplementaryWebLinksEvent, codeReferenceEvent, assistantResponseEvent, error, invalidStateEvent, } = chatEvent;
26
+ if (error) {
27
+ this.error = error.message;
28
+ }
29
+ else if (invalidStateEvent) {
30
+ this.error = invalidStateEvent.message ?? invalidStateEvent.reason ?? 'Invalid state';
31
+ }
32
+ else if (assistantResponseEvent?.content) {
33
+ this.body = (this.body ?? '') + assistantResponseEvent.content;
34
+ }
35
+ else if (followupPromptEvent?.followupPrompt) {
36
+ const { content } = followupPromptEvent.followupPrompt;
37
+ this.followUp = {
38
+ ...this.followUp,
39
+ options: [
40
+ ...(this.followUp?.options ?? []),
41
+ {
42
+ pillText: content ?? '',
43
+ prompt: content ?? '',
44
+ },
45
+ ],
46
+ };
47
+ }
48
+ else if (supplementaryWebLinksEvent?.supplementaryWebLinks &&
49
+ supplementaryWebLinksEvent.supplementaryWebLinks.length > 0) {
50
+ const sourceLinks = supplementaryWebLinksEvent.supplementaryWebLinks.map(ChatEventParser.mapRelatedData);
51
+ this.relatedContent = {
52
+ ...this.relatedContent,
53
+ content: [...(this.relatedContent?.content ?? []), ...sourceLinks],
54
+ };
55
+ }
56
+ else if (codeReferenceEvent?.references && codeReferenceEvent.references.length > 0) {
57
+ const references = codeReferenceEvent.references.map(ChatEventParser.mapReferenceData);
58
+ this.codeReference = [...(this.codeReference ?? []), ...references];
59
+ }
60
+ return this.getChatResult();
61
+ }
62
+ getChatResult() {
63
+ const chatResult = {
64
+ messageId: this.messageId,
65
+ body: this.body,
66
+ canBeVoted: this.canBeVoted,
67
+ relatedContent: this.relatedContent,
68
+ followUp: this.followUp,
69
+ codeReference: this.codeReference,
70
+ };
71
+ return this.error
72
+ ? {
73
+ success: false,
74
+ data: chatResult,
75
+ error: this.error,
76
+ }
77
+ : {
78
+ success: true,
79
+ data: chatResult,
80
+ };
81
+ }
82
+ }
83
+ exports.ChatEventParser = ChatEventParser;
84
+ //# sourceMappingURL=chatEventParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chatEventParser.js","sourceRoot":"","sources":["../../../src/language-server/chat/chatEventParser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};