@aws/lsp-codewhisperer 0.0.69 → 0.0.71

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 (137) hide show
  1. package/CHANGELOG.md +56 -0
  2. package/out/language-server/agenticChat/agenticChatController.js +53 -28
  3. package/out/language-server/agenticChat/agenticChatController.js.map +1 -1
  4. package/out/language-server/agenticChat/constants/constants.d.ts +1 -1
  5. package/out/language-server/agenticChat/constants/constants.js +2 -1
  6. package/out/language-server/agenticChat/constants/constants.js.map +1 -1
  7. package/out/language-server/agenticChat/constants/toolConstants.d.ts +1 -1
  8. package/out/language-server/agenticChat/constants/toolConstants.js +2 -2
  9. package/out/language-server/agenticChat/constants/toolConstants.js.map +1 -1
  10. package/out/language-server/agenticChat/context/agenticChatTriggerContext.js +1 -1
  11. package/out/language-server/agenticChat/context/agenticChatTriggerContext.js.map +1 -1
  12. package/out/language-server/agenticChat/qAgenticChatServer.d.ts +1 -1
  13. package/out/language-server/agenticChat/qAgenticChatServer.js +7 -8
  14. package/out/language-server/agenticChat/qAgenticChatServer.js.map +1 -1
  15. package/out/language-server/agenticChat/tools/chatDb/chatDb.d.ts +1 -0
  16. package/out/language-server/agenticChat/tools/chatDb/chatDb.js +3 -3
  17. package/out/language-server/agenticChat/tools/chatDb/chatDb.js.map +1 -1
  18. package/out/language-server/agenticChat/tools/executeBash.d.ts +3 -1
  19. package/out/language-server/agenticChat/tools/executeBash.js +28 -24
  20. package/out/language-server/agenticChat/tools/executeBash.js.map +1 -1
  21. package/out/language-server/agenticChat/tools/mcp/mcpEventHandler.js +258 -165
  22. package/out/language-server/agenticChat/tools/mcp/mcpEventHandler.js.map +1 -1
  23. package/out/language-server/agenticChat/tools/mcp/mcpManager.d.ts +42 -17
  24. package/out/language-server/agenticChat/tools/mcp/mcpManager.js +254 -78
  25. package/out/language-server/agenticChat/tools/mcp/mcpManager.js.map +1 -1
  26. package/out/language-server/agenticChat/tools/mcp/mcpTypes.d.ts +3 -1
  27. package/out/language-server/agenticChat/tools/mcp/mcpTypes.js.map +1 -1
  28. package/out/language-server/agenticChat/tools/mcp/mcpUtils.js +36 -16
  29. package/out/language-server/agenticChat/tools/mcp/mcpUtils.js.map +1 -1
  30. package/out/language-server/agenticChat/tools/qCodeAnalysis/{qCodeReview.d.ts → codeReview.d.ts} +4 -3
  31. package/out/language-server/agenticChat/tools/qCodeAnalysis/{qCodeReview.js → codeReview.js} +179 -127
  32. package/out/language-server/agenticChat/tools/qCodeAnalysis/codeReview.js.map +1 -0
  33. package/out/language-server/agenticChat/tools/qCodeAnalysis/{qCodeReviewConstants.d.ts → codeReviewConstants.d.ts} +8 -6
  34. package/out/language-server/agenticChat/tools/qCodeAnalysis/{qCodeReviewConstants.js → codeReviewConstants.js} +32 -20
  35. package/out/language-server/agenticChat/tools/qCodeAnalysis/codeReviewConstants.js.map +1 -0
  36. package/out/language-server/agenticChat/tools/qCodeAnalysis/codeReviewErrors.d.ts +12 -0
  37. package/out/language-server/agenticChat/tools/qCodeAnalysis/codeReviewErrors.js +32 -0
  38. package/out/language-server/agenticChat/tools/qCodeAnalysis/codeReviewErrors.js.map +1 -0
  39. package/out/language-server/agenticChat/tools/qCodeAnalysis/{qCodeReviewSchemas.d.ts → codeReviewSchemas.d.ts} +6 -6
  40. package/out/language-server/agenticChat/tools/qCodeAnalysis/{qCodeReviewSchemas.js → codeReviewSchemas.js} +15 -15
  41. package/out/language-server/agenticChat/tools/qCodeAnalysis/codeReviewSchemas.js.map +1 -0
  42. package/out/language-server/agenticChat/tools/qCodeAnalysis/{qCodeReviewTypes.d.ts → codeReviewTypes.d.ts} +22 -1
  43. package/out/language-server/agenticChat/tools/qCodeAnalysis/codeReviewTypes.js +15 -0
  44. package/out/language-server/agenticChat/tools/qCodeAnalysis/codeReviewTypes.js.map +1 -0
  45. package/out/language-server/agenticChat/tools/qCodeAnalysis/{qCodeReviewUtils.d.ts → codeReviewUtils.d.ts} +16 -14
  46. package/out/language-server/agenticChat/tools/qCodeAnalysis/{qCodeReviewUtils.js → codeReviewUtils.js} +38 -46
  47. package/out/language-server/agenticChat/tools/qCodeAnalysis/codeReviewUtils.js.map +1 -0
  48. package/out/language-server/agenticChat/tools/qCodeAnalysis/displayFindings.d.ts +89 -0
  49. package/out/language-server/agenticChat/tools/qCodeAnalysis/displayFindings.js +138 -0
  50. package/out/language-server/agenticChat/tools/qCodeAnalysis/displayFindings.js.map +1 -0
  51. package/out/language-server/agenticChat/tools/qCodeAnalysis/displayFindingsConstants.d.ts +14 -0
  52. package/out/language-server/agenticChat/tools/qCodeAnalysis/displayFindingsConstants.js +40 -0
  53. package/out/language-server/agenticChat/tools/qCodeAnalysis/displayFindingsConstants.js.map +1 -0
  54. package/out/language-server/agenticChat/tools/qCodeAnalysis/displayFindingsSchemas.d.ts +177 -0
  55. package/out/language-server/agenticChat/tools/qCodeAnalysis/displayFindingsSchemas.js +93 -0
  56. package/out/language-server/agenticChat/tools/qCodeAnalysis/displayFindingsSchemas.js.map +1 -0
  57. package/out/language-server/agenticChat/tools/qCodeAnalysis/displayFindingsTypes.d.ts +27 -0
  58. package/out/language-server/agenticChat/tools/qCodeAnalysis/displayFindingsTypes.js +12 -0
  59. package/out/language-server/agenticChat/tools/qCodeAnalysis/displayFindingsTypes.js.map +1 -0
  60. package/out/language-server/agenticChat/tools/qCodeAnalysis/displayFindingsUtils.d.ts +17 -0
  61. package/out/language-server/agenticChat/tools/qCodeAnalysis/displayFindingsUtils.js +33 -0
  62. package/out/language-server/agenticChat/tools/qCodeAnalysis/displayFindingsUtils.js.map +1 -0
  63. package/out/language-server/agenticChat/tools/toolServer.js +30 -10
  64. package/out/language-server/agenticChat/tools/toolServer.js.map +1 -1
  65. package/out/language-server/agenticChat/utils/commandParser.d.ts +17 -0
  66. package/out/language-server/agenticChat/utils/commandParser.js +85 -0
  67. package/out/language-server/agenticChat/utils/commandParser.js.map +1 -0
  68. package/out/language-server/chat/chatController.js +77 -0
  69. package/out/language-server/chat/chatController.js.map +1 -1
  70. package/out/language-server/chat/chatSessionService.js +19 -5
  71. package/out/language-server/chat/chatSessionService.js.map +1 -1
  72. package/out/language-server/chat/constants.d.ts +1 -0
  73. package/out/language-server/chat/constants.js +2 -1
  74. package/out/language-server/chat/constants.js.map +1 -1
  75. package/out/language-server/chat/telemetry/chatTelemetryController.d.ts +4 -2
  76. package/out/language-server/chat/telemetry/chatTelemetryController.js +13 -2
  77. package/out/language-server/chat/telemetry/chatTelemetryController.js.map +1 -1
  78. package/out/language-server/chat/utils.js +6 -0
  79. package/out/language-server/chat/utils.js.map +1 -1
  80. package/out/language-server/configuration/qConfigurationServer.d.ts +2 -1
  81. package/out/language-server/configuration/qConfigurationServer.js.map +1 -1
  82. package/out/language-server/inline-completion/auto-trigger/autoTrigger.js +2 -1
  83. package/out/language-server/inline-completion/auto-trigger/autoTrigger.js.map +1 -1
  84. package/out/language-server/inline-completion/codeWhispererServer.js +48 -143
  85. package/out/language-server/inline-completion/codeWhispererServer.js.map +1 -1
  86. package/out/language-server/inline-completion/telemetry.d.ts +9 -0
  87. package/out/language-server/inline-completion/telemetry.js +109 -0
  88. package/out/language-server/inline-completion/telemetry.js.map +1 -0
  89. package/out/language-server/netTransform/validation.d.ts +5 -0
  90. package/out/language-server/netTransform/validation.js +9 -2
  91. package/out/language-server/netTransform/validation.js.map +1 -1
  92. package/out/language-server/workspaceContext/artifactManager.d.ts +1 -0
  93. package/out/language-server/workspaceContext/artifactManager.js +55 -19
  94. package/out/language-server/workspaceContext/artifactManager.js.map +1 -1
  95. package/out/language-server/workspaceContext/workspaceContextServer.js +2 -0
  96. package/out/language-server/workspaceContext/workspaceContextServer.js.map +1 -1
  97. package/out/language-server/workspaceContext/workspaceFolderManager.d.ts +3 -0
  98. package/out/language-server/workspaceContext/workspaceFolderManager.js +24 -5
  99. package/out/language-server/workspaceContext/workspaceFolderManager.js.map +1 -1
  100. package/out/shared/amazonQServiceManager/AmazonQTokenServiceManager.d.ts +1 -0
  101. package/out/shared/amazonQServiceManager/AmazonQTokenServiceManager.js +16 -7
  102. package/out/shared/amazonQServiceManager/AmazonQTokenServiceManager.js.map +1 -1
  103. package/out/shared/amazonQServiceManager/qDeveloperProfiles.js +48 -5
  104. package/out/shared/amazonQServiceManager/qDeveloperProfiles.js.map +1 -1
  105. package/out/shared/codeWhispererService.js +1 -0
  106. package/out/shared/codeWhispererService.js.map +1 -1
  107. package/out/shared/languageDetection.d.ts +14 -0
  108. package/out/shared/languageDetection.js +20 -0
  109. package/out/shared/languageDetection.js.map +1 -1
  110. package/out/shared/localProjectContextController.js +1 -3
  111. package/out/shared/localProjectContextController.js.map +1 -1
  112. package/out/shared/models/constants.js +2 -1
  113. package/out/shared/models/constants.js.map +1 -1
  114. package/out/shared/supplementalContextUtil/crossFileContextUtil.d.ts +4 -4
  115. package/out/shared/supplementalContextUtil/crossFileContextUtil.js +112 -18
  116. package/out/shared/supplementalContextUtil/crossFileContextUtil.js.map +1 -1
  117. package/out/shared/supplementalContextUtil/supplementalContextUtil.d.ts +1 -1
  118. package/out/shared/supplementalContextUtil/supplementalContextUtil.js +2 -2
  119. package/out/shared/supplementalContextUtil/supplementalContextUtil.js.map +1 -1
  120. package/out/shared/telemetry/telemetryService.js +36 -17
  121. package/out/shared/telemetry/telemetryService.js.map +1 -1
  122. package/out/shared/telemetry/types.d.ts +19 -1
  123. package/out/shared/telemetry/types.js +8 -1
  124. package/out/shared/telemetry/types.js.map +1 -1
  125. package/out/shared/utils.d.ts +12 -0
  126. package/out/shared/utils.js +53 -3
  127. package/out/shared/utils.js.map +1 -1
  128. package/package.json +4 -4
  129. package/out/language-server/agenticChat/tools/qCodeAnalysis/qCodeReview.js.map +0 -1
  130. package/out/language-server/agenticChat/tools/qCodeAnalysis/qCodeReviewConstants.js.map +0 -1
  131. package/out/language-server/agenticChat/tools/qCodeAnalysis/qCodeReviewErrors.d.ts +0 -12
  132. package/out/language-server/agenticChat/tools/qCodeAnalysis/qCodeReviewErrors.js +0 -32
  133. package/out/language-server/agenticChat/tools/qCodeAnalysis/qCodeReviewErrors.js.map +0 -1
  134. package/out/language-server/agenticChat/tools/qCodeAnalysis/qCodeReviewSchemas.js.map +0 -1
  135. package/out/language-server/agenticChat/tools/qCodeAnalysis/qCodeReviewTypes.js +0 -3
  136. package/out/language-server/agenticChat/tools/qCodeAnalysis/qCodeReviewTypes.js.map +0 -1
  137. package/out/language-server/agenticChat/tools/qCodeAnalysis/qCodeReviewUtils.js.map +0 -1
@@ -1,38 +1,39 @@
1
1
  "use strict";
2
2
  /* eslint-disable import/no-nodejs-modules */
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.QCodeReview = void 0;
5
- const qCodeReviewConstants_1 = require("./qCodeReviewConstants");
6
- const qCodeReviewUtils_1 = require("./qCodeReviewUtils");
7
- const qCodeReviewSchemas_1 = require("./qCodeReviewSchemas");
4
+ exports.CodeReview = void 0;
5
+ const codeReviewConstants_1 = require("./codeReviewConstants");
6
+ const codeReviewUtils_1 = require("./codeReviewUtils");
7
+ const codeReviewSchemas_1 = require("./codeReviewSchemas");
8
8
  const crypto_1 = require("crypto");
9
9
  const crypto = require("crypto");
10
10
  const path = require("path");
11
11
  const JSZip = require("jszip");
12
12
  const fs_1 = require("fs");
13
- const qCodeReviewErrors_1 = require("./qCodeReviewErrors");
13
+ const codeReviewErrors_1 = require("./codeReviewErrors");
14
+ const codeReviewTypes_1 = require("./codeReviewTypes");
14
15
  const lsp_core_1 = require("@aws/lsp-core");
15
- class QCodeReview {
16
+ class CodeReview {
16
17
  static CUSTOMER_CODE_BASE_PATH = 'customerCodeBaseFolder';
17
18
  static CODE_ARTIFACT_PATH = 'code_artifact';
18
19
  static CUSTOMER_CODE_ZIP_NAME = 'customerCode.zip';
19
20
  static CODE_DIFF_PATH = 'code_artifact/codeDiff/customerCodeDiff.diff';
20
21
  static RULE_ARTIFACT_PATH = '.amazonq/rules';
21
- static MAX_POLLING_ATTEMPTS = 30;
22
- static MID_POLLING_ATTEMPTS = 15;
23
- static POLLING_INTERVAL_MS = 10000;
22
+ static MAX_POLLING_ATTEMPTS = 90; // 90 * POLLING_INTERVAL_MS (10000) = 15 mins
23
+ static MID_POLLING_ATTEMPTS = 20;
24
+ static POLLING_INTERVAL_MS = 10000; // 10 seconds
24
25
  static UPLOAD_INTENT = 'AGENTIC_CODE_REVIEW';
25
26
  static SCAN_SCOPE = 'AGENTIC';
26
27
  static MAX_FINDINGS_COUNT = 50;
27
28
  static ERROR_MESSAGES = {
28
29
  MISSING_CLIENT: 'CodeWhisperer client not available',
29
- MISSING_ARTIFACTS: `Missing fileLevelArtifacts and folderLevelArtifacts for ${qCodeReviewConstants_1.Q_CODE_REVIEW_TOOL_NAME} tool. Ask user to provide a specific file / folder / workspace which has code that can be scanned.`,
30
- MISSING_FILES_TO_SCAN: `There are no valid files to scan. Ask user to provide a specific file / folder / workspace which has code that can be scanned.`,
31
- UPLOAD_FAILED: `Failed to upload artifact for code review in ${qCodeReviewConstants_1.Q_CODE_REVIEW_TOOL_NAME} tool.`,
32
- START_CODE_ANALYSIS_FAILED: (jobId) => `Failed to start code analysis in ${qCodeReviewConstants_1.Q_CODE_REVIEW_TOOL_NAME} tool for jobId - ${jobId}`,
30
+ MISSING_ARTIFACTS: `Missing fileLevelArtifacts and folderLevelArtifacts for ${codeReviewConstants_1.CODE_REVIEW_TOOL_NAME} tool. Ask user to provide a specific file / folder / workspace which has code that can be scanned.`,
31
+ MISSING_FILES_TO_SCAN: `There are no valid files to scan in the input. Use other available tools to find the correct path to the files, otherwise ask user to provide a specific file which has code that can be scanned.`,
32
+ UPLOAD_FAILED: `Failed to upload artifact for code review in ${codeReviewConstants_1.CODE_REVIEW_TOOL_NAME} tool.`,
33
+ START_CODE_ANALYSIS_FAILED: (scanName, errorMessage) => `Failed to start code analysis for scanName - ${scanName} due to - ${errorMessage}`,
33
34
  CODE_ANALYSIS_FAILED: (jobId, message) => `Code analysis failed for jobId - ${jobId} due to ${message}`,
34
35
  SCAN_FAILED: 'Code scan failed',
35
- TIMEOUT: (attempts) => `Code scan timed out after ${attempts} attempts. Ask user to provide a smaller size of code to scan.`,
36
+ TIMEOUT: `Code review timed out. Ask user to provide a smaller size of code to scan.`,
36
37
  };
37
38
  credentialsProvider;
38
39
  logging;
@@ -41,25 +42,27 @@ class QCodeReview {
41
42
  codeWhispererClient;
42
43
  cancellationToken;
43
44
  writableStream;
45
+ toolStartTime = 0;
44
46
  constructor(features) {
45
47
  this.credentialsProvider = features.credentialsProvider;
46
48
  this.logging = features.logging;
47
49
  this.telemetry = features.telemetry;
48
50
  this.workspace = features.workspace;
49
51
  }
50
- static toolName = qCodeReviewConstants_1.Q_CODE_REVIEW_TOOL_NAME;
51
- static toolDescription = qCodeReviewConstants_1.Q_CODE_REVIEW_TOOL_DESCRIPTION;
52
- static inputSchema = qCodeReviewSchemas_1.Q_CODE_REVIEW_INPUT_SCHEMA;
52
+ static toolName = codeReviewConstants_1.CODE_REVIEW_TOOL_NAME;
53
+ static toolDescription = codeReviewConstants_1.CODE_REVIEW_TOOL_DESCRIPTION;
54
+ static inputSchema = codeReviewSchemas_1.CODE_REVIEW_INPUT_SCHEMA;
53
55
  /**
54
- * Main execution method for the QCodeReview tool
56
+ * Main execution method for the CodeReview tool
55
57
  * @param input User input parameters for code review
56
58
  * @param context Execution context containing clients and tokens
57
59
  * @returns Output containing code review results or error message
58
60
  */
59
61
  async execute(input, context) {
62
+ this.toolStartTime = Date.now();
60
63
  let chatStreamWriter;
61
64
  try {
62
- this.logging.info(`Executing ${qCodeReviewConstants_1.Q_CODE_REVIEW_TOOL_NAME}: ${JSON.stringify(input)}`);
65
+ this.logging.info(`Executing ${codeReviewConstants_1.CODE_REVIEW_TOOL_NAME}: ${JSON.stringify(input)}`);
63
66
  // 1. Validate input
64
67
  const setup = await this.validateInputAndSetup(input, context);
65
68
  this.checkCancellation();
@@ -73,10 +76,10 @@ class QCodeReview {
73
76
  this.checkCancellation();
74
77
  await chatStreamWriter?.write('Reviewing your code...');
75
78
  // 4. Wait for scan to complete
76
- await this.pollForCompletion(analysisResult.jobId, setup.scanName, setup.artifactType, chatStreamWriter);
79
+ await this.pollForCompletion(analysisResult.jobId, setup, uploadResult, chatStreamWriter);
77
80
  this.checkCancellation();
78
81
  // 5. Process scan result
79
- const results = await this.processResults(setup, uploadResult.isCodeDiffPresent, analysisResult.jobId);
82
+ const results = await this.processResults(setup, uploadResult, analysisResult.jobId);
80
83
  return {
81
84
  output: {
82
85
  kind: 'json',
@@ -89,15 +92,7 @@ class QCodeReview {
89
92
  if (error instanceof lsp_core_1.CancellationError) {
90
93
  throw error;
91
94
  }
92
- return {
93
- output: {
94
- kind: 'json',
95
- success: false,
96
- content: {
97
- errorMessage: error.message,
98
- },
99
- },
100
- };
95
+ throw new Error(error.message);
101
96
  }
102
97
  finally {
103
98
  await chatStreamWriter?.close();
@@ -115,18 +110,25 @@ class QCodeReview {
115
110
  this.writableStream = context.writableStream;
116
111
  this.codeWhispererClient = context.codeWhispererClient;
117
112
  if (!this.codeWhispererClient) {
118
- throw new Error(QCodeReview.ERROR_MESSAGES.MISSING_CLIENT);
113
+ throw new Error(CodeReview.ERROR_MESSAGES.MISSING_CLIENT);
119
114
  }
120
115
  // parse input
121
- const validatedInput = qCodeReviewSchemas_1.Z_Q_CODE_REVIEW_INPUT_SCHEMA.parse(input);
116
+ const validatedInput = codeReviewSchemas_1.Z_CODE_REVIEW_INPUT_SCHEMA.parse(input);
122
117
  const fileArtifacts = validatedInput.fileLevelArtifacts || [];
123
118
  const folderArtifacts = validatedInput.folderLevelArtifacts || [];
124
119
  const ruleArtifacts = validatedInput.ruleArtifacts || [];
125
120
  if (fileArtifacts.length === 0 && folderArtifacts.length === 0) {
126
- qCodeReviewUtils_1.QCodeReviewUtils.emitMetric('MissingFilesOrFolders', {}, qCodeReviewConstants_1.Q_CODE_REVIEW_TOOL_NAME, this.logging, this.telemetry, this.credentialsProvider.getConnectionMetadata()?.sso?.startUrl);
127
- throw new qCodeReviewErrors_1.QCodeReviewValidationError(QCodeReview.ERROR_MESSAGES.MISSING_ARTIFACTS);
121
+ codeReviewUtils_1.CodeReviewUtils.emitMetric({
122
+ reason: codeReviewTypes_1.FailedMetricName.MissingFileOrFolder,
123
+ result: 'Failed',
124
+ reasonDesc: CodeReview.ERROR_MESSAGES.MISSING_ARTIFACTS,
125
+ metadata: {
126
+ credentialStartUrl: this.credentialsProvider.getConnectionMetadata()?.sso?.startUrl,
127
+ },
128
+ }, this.logging, this.telemetry);
129
+ throw new codeReviewErrors_1.CodeReviewValidationError(CodeReview.ERROR_MESSAGES.MISSING_ARTIFACTS);
128
130
  }
129
- const isFullReviewRequest = validatedInput.scopeOfReview?.toUpperCase() === qCodeReviewConstants_1.FULL_REVIEW;
131
+ const isFullReviewRequest = validatedInput.scopeOfReview?.toUpperCase() === codeReviewConstants_1.FULL_REVIEW;
130
132
  const artifactType = fileArtifacts.length > 0 ? 'FILE' : 'FOLDER';
131
133
  // Setting java as default language
132
134
  // TODO: Remove requirement of programming language
@@ -149,11 +151,11 @@ class QCodeReview {
149
151
  * @returns Upload result with uploadId or error message
150
152
  */
151
153
  async prepareAndUploadArtifacts(setup) {
152
- const { zipBuffer, md5Hash, isCodeDiffPresent } = await this.prepareFilesAndFoldersForUpload(setup.fileArtifacts, setup.folderArtifacts, setup.ruleArtifacts, setup.isFullReviewRequest);
154
+ const { zipBuffer, md5Hash, isCodeDiffPresent, programmingLanguages } = await this.prepareFilesAndFoldersForUpload(setup.fileArtifacts, setup.folderArtifacts, setup.ruleArtifacts, setup.isFullReviewRequest);
153
155
  const uploadUrlResponse = await this.codeWhispererClient.createUploadUrl({
154
156
  contentLength: zipBuffer.length,
155
157
  contentMd5: md5Hash,
156
- uploadIntent: QCodeReview.UPLOAD_INTENT,
158
+ uploadIntent: CodeReview.UPLOAD_INTENT,
157
159
  uploadContext: {
158
160
  codeAnalysisUploadContext: {
159
161
  codeScanName: setup.scanName,
@@ -161,22 +163,27 @@ class QCodeReview {
161
163
  },
162
164
  });
163
165
  if (!uploadUrlResponse.uploadUrl || !uploadUrlResponse.uploadId) {
164
- qCodeReviewUtils_1.QCodeReviewUtils.emitMetric('createUploadUrlFailed', {
165
- codeScanName: setup.scanName,
166
- contentLength: zipBuffer.length,
167
- uploadIntent: QCodeReview.UPLOAD_INTENT,
168
- response: uploadUrlResponse,
169
- }, qCodeReviewConstants_1.Q_CODE_REVIEW_TOOL_NAME, this.logging, this.telemetry, this.credentialsProvider.getConnectionMetadata()?.sso?.startUrl);
170
- throw new qCodeReviewErrors_1.QCodeReviewValidationError(QCodeReview.ERROR_MESSAGES.UPLOAD_FAILED);
166
+ codeReviewUtils_1.CodeReviewUtils.emitMetric({
167
+ reason: codeReviewTypes_1.FailedMetricName.CreateUploadUrlFailed,
168
+ result: 'Failed',
169
+ reasonDesc: CodeReview.ERROR_MESSAGES.UPLOAD_FAILED,
170
+ metadata: {
171
+ artifactType: setup.artifactType,
172
+ codewhispererCodeScanJobId: setup.scanName,
173
+ codewhispererCodeScanSrcZipFileBytes: zipBuffer.length,
174
+ credentialStartUrl: this.credentialsProvider.getConnectionMetadata()?.sso?.startUrl,
175
+ programmingLanguages: programmingLanguages,
176
+ },
177
+ }, this.logging, this.telemetry);
178
+ throw new codeReviewErrors_1.CodeReviewValidationError(CodeReview.ERROR_MESSAGES.UPLOAD_FAILED);
171
179
  }
172
- await qCodeReviewUtils_1.QCodeReviewUtils.uploadFileToPresignedUrl(uploadUrlResponse.uploadUrl, zipBuffer, uploadUrlResponse.requestHeaders || {}, this.logging);
173
- qCodeReviewUtils_1.QCodeReviewUtils.emitMetric('uploadArtifactSuccess', {
174
- codeScanName: setup.scanName,
175
- codeArtifactId: uploadUrlResponse.uploadId,
180
+ await codeReviewUtils_1.CodeReviewUtils.uploadFileToPresignedUrl(uploadUrlResponse.uploadUrl, zipBuffer, uploadUrlResponse.requestHeaders || {}, this.logging);
181
+ return {
182
+ uploadId: uploadUrlResponse.uploadId,
183
+ isCodeDiffPresent,
176
184
  artifactSize: zipBuffer.length,
177
- artifactType: setup.artifactType,
178
- }, qCodeReviewConstants_1.Q_CODE_REVIEW_TOOL_NAME, this.logging, this.telemetry, this.credentialsProvider.getConnectionMetadata()?.sso?.startUrl);
179
- return { uploadId: uploadUrlResponse.uploadId, isCodeDiffPresent };
185
+ programmingLanguages: programmingLanguages,
186
+ };
180
187
  }
181
188
  /**
182
189
  * Initiates code analysis with the uploaded artifacts
@@ -188,21 +195,27 @@ class QCodeReview {
188
195
  const createResponse = await this.codeWhispererClient.startCodeAnalysis({
189
196
  artifacts: { SourceCode: uploadResult.uploadId },
190
197
  programmingLanguage: { languageName: setup.programmingLanguage },
191
- clientToken: qCodeReviewUtils_1.QCodeReviewUtils.generateClientToken(),
198
+ clientToken: codeReviewUtils_1.CodeReviewUtils.generateClientToken(),
192
199
  codeScanName: setup.scanName,
193
- scope: QCodeReview.SCAN_SCOPE,
200
+ scope: CodeReview.SCAN_SCOPE,
194
201
  codeDiffMetadata: uploadResult.isCodeDiffPresent ? { codeDiffPath: '/code_artifact/codeDiff/' } : undefined,
195
202
  });
196
203
  if (!createResponse.jobId) {
197
- qCodeReviewUtils_1.QCodeReviewUtils.emitMetric('startCodeAnalysisFailed', {
198
- artifacts: { SourceCode: uploadResult.uploadId },
199
- programmingLanguage: { languageName: setup.programmingLanguage },
200
- codeScanName: setup.scanName,
201
- scope: QCodeReview.SCAN_SCOPE,
202
- artifactType: setup.artifactType,
203
- response: createResponse,
204
- }, qCodeReviewConstants_1.Q_CODE_REVIEW_TOOL_NAME, this.logging, this.telemetry, this.credentialsProvider.getConnectionMetadata()?.sso?.startUrl);
205
- throw new qCodeReviewErrors_1.QCodeReviewInternalError(QCodeReview.ERROR_MESSAGES.START_CODE_ANALYSIS_FAILED(createResponse.jobId));
204
+ codeReviewUtils_1.CodeReviewUtils.emitMetric({
205
+ reason: codeReviewTypes_1.FailedMetricName.CodeScanFailed,
206
+ result: 'Failed',
207
+ reasonDesc: CodeReview.ERROR_MESSAGES.START_CODE_ANALYSIS_FAILED(setup.scanName, createResponse.errorMessage),
208
+ metadata: {
209
+ artifactType: setup.artifactType,
210
+ codewhispererCodeScanJobId: setup.scanName,
211
+ codewhispererCodeScanSrcZipFileBytes: uploadResult.artifactSize,
212
+ credentialStartUrl: this.credentialsProvider.getConnectionMetadata()?.sso?.startUrl,
213
+ customRules: setup.ruleArtifacts.length,
214
+ programmingLanguages: Array.from(uploadResult.programmingLanguages),
215
+ scope: setup.isFullReviewRequest ? codeReviewConstants_1.FULL_REVIEW : codeReviewConstants_1.CODE_DIFF_REVIEW,
216
+ },
217
+ }, this.logging, this.telemetry);
218
+ throw new codeReviewErrors_1.CodeReviewInternalError(CodeReview.ERROR_MESSAGES.START_CODE_ANALYSIS_FAILED(setup.scanName, createResponse.errorMessage));
206
219
  }
207
220
  this.logging.info(`Code scan created with job ID: ${createResponse.jobId}`);
208
221
  return {
@@ -217,38 +230,56 @@ class QCodeReview {
217
230
  * @param artifactType Type of artifact being scanned (FILE or FOLDER)
218
231
  * @param chatStreamWriter Stream writer for sending progress updates
219
232
  */
220
- async pollForCompletion(jobId, scanName, artifactType, chatStreamWriter) {
233
+ async pollForCompletion(jobId, setup, uploadResult, chatStreamWriter) {
221
234
  let status = 'Pending';
222
235
  let attemptCount = 0;
223
- while (status === 'Pending' && attemptCount < QCodeReview.MAX_POLLING_ATTEMPTS) {
236
+ while (status === 'Pending' && attemptCount < CodeReview.MAX_POLLING_ATTEMPTS) {
224
237
  this.logging.info(`Code scan status: ${status}, waiting...`);
225
- await new Promise(resolve => setTimeout(resolve, QCodeReview.POLLING_INTERVAL_MS));
238
+ await new Promise(resolve => setTimeout(resolve, CodeReview.POLLING_INTERVAL_MS));
226
239
  const statusResponse = await this.getCodeAnalysisStatus(jobId);
227
240
  status = statusResponse.status;
228
241
  attemptCount++;
229
242
  if (statusResponse.errorMessage) {
230
- qCodeReviewUtils_1.QCodeReviewUtils.emitMetric('codeAnalysisFailed', {
231
- codeScanName: scanName,
232
- codeReviewId: jobId,
233
- status,
234
- artifactType,
235
- message: statusResponse.errorMessage,
236
- }, qCodeReviewConstants_1.Q_CODE_REVIEW_TOOL_NAME, this.logging, this.telemetry, this.credentialsProvider.getConnectionMetadata()?.sso?.startUrl);
237
- throw new qCodeReviewErrors_1.QCodeReviewInternalError(QCodeReview.ERROR_MESSAGES.CODE_ANALYSIS_FAILED(jobId, statusResponse.errorMessage));
243
+ codeReviewUtils_1.CodeReviewUtils.emitMetric({
244
+ reason: codeReviewTypes_1.FailedMetricName.CodeScanFailed,
245
+ result: 'Failed',
246
+ reasonDesc: CodeReview.ERROR_MESSAGES.CODE_ANALYSIS_FAILED(jobId, statusResponse.errorMessage),
247
+ metadata: {
248
+ artifactType: setup.artifactType,
249
+ codewhispererCodeScanJobId: jobId,
250
+ codewhispererCodeScanSrcZipFileBytes: uploadResult.artifactSize,
251
+ credentialStartUrl: this.credentialsProvider.getConnectionMetadata()?.sso?.startUrl,
252
+ customRules: setup.ruleArtifacts.length,
253
+ programmingLanguages: Array.from(uploadResult.programmingLanguages),
254
+ scope: setup.isFullReviewRequest ? codeReviewConstants_1.FULL_REVIEW : codeReviewConstants_1.CODE_DIFF_REVIEW,
255
+ status: status,
256
+ },
257
+ }, this.logging, this.telemetry);
258
+ throw new codeReviewErrors_1.CodeReviewInternalError(CodeReview.ERROR_MESSAGES.CODE_ANALYSIS_FAILED(jobId, statusResponse.errorMessage));
238
259
  }
239
- if (attemptCount == QCodeReview.MID_POLLING_ATTEMPTS) {
260
+ if (attemptCount == CodeReview.MID_POLLING_ATTEMPTS) {
240
261
  await chatStreamWriter?.write('Still reviewing your code, it is taking just a bit longer than usual...');
241
262
  }
242
263
  this.checkCancellation('Command execution cancelled while waiting for scan to complete');
243
264
  }
244
265
  if (status === 'Pending') {
245
- qCodeReviewUtils_1.QCodeReviewUtils.emitMetric('codeAnalysisTimeout', {
246
- codeScanName: scanName,
247
- codeReviewId: jobId,
248
- status: 'Timeout',
249
- maxAttempts: QCodeReview.MAX_POLLING_ATTEMPTS,
250
- }, qCodeReviewConstants_1.Q_CODE_REVIEW_TOOL_NAME, this.logging, this.telemetry, this.credentialsProvider.getConnectionMetadata()?.sso?.startUrl);
251
- throw new qCodeReviewErrors_1.QCodeReviewTimeoutError(QCodeReview.ERROR_MESSAGES.TIMEOUT(QCodeReview.MAX_POLLING_ATTEMPTS));
266
+ codeReviewUtils_1.CodeReviewUtils.emitMetric({
267
+ reason: codeReviewTypes_1.FailedMetricName.CodeScanTimeout,
268
+ result: 'Failed',
269
+ reasonDesc: CodeReview.ERROR_MESSAGES.TIMEOUT,
270
+ metadata: {
271
+ artifactType: setup.artifactType,
272
+ codewhispererCodeScanJobId: jobId,
273
+ codewhispererCodeScanSrcZipFileBytes: uploadResult.artifactSize,
274
+ credentialStartUrl: this.credentialsProvider.getConnectionMetadata()?.sso?.startUrl,
275
+ customRules: setup.ruleArtifacts.length,
276
+ maxAttempts: CodeReview.MAX_POLLING_ATTEMPTS,
277
+ programmingLanguages: Array.from(uploadResult.programmingLanguages),
278
+ scope: setup.isFullReviewRequest ? codeReviewConstants_1.FULL_REVIEW : codeReviewConstants_1.CODE_DIFF_REVIEW,
279
+ status: status,
280
+ },
281
+ }, this.logging, this.telemetry);
282
+ throw new codeReviewErrors_1.CodeReviewTimeoutError(CodeReview.ERROR_MESSAGES.TIMEOUT);
252
283
  }
253
284
  this.logging.info(`Code scan completed with status: ${status}`);
254
285
  }
@@ -259,19 +290,29 @@ class QCodeReview {
259
290
  * @param jobId ID of the code analysis job
260
291
  * @returns Processed results with findings grouped by file
261
292
  */
262
- async processResults(setup, isCodeDiffPresent, jobId) {
263
- const { totalFindings, findingsExceededLimit } = await this.collectFindings(jobId, setup.isFullReviewRequest, isCodeDiffPresent, setup.programmingLanguage);
264
- qCodeReviewUtils_1.QCodeReviewUtils.emitMetric('codeAnalysisSucces', {
265
- codeScanName: setup.scanName,
266
- codeReviewId: jobId,
267
- findingsCount: totalFindings.length,
268
- }, qCodeReviewConstants_1.Q_CODE_REVIEW_TOOL_NAME, this.logging, this.telemetry, this.credentialsProvider.getConnectionMetadata()?.sso?.startUrl);
269
- const aggregatedCodeScanIssueList = this.aggregateFindingsByFile(findingsExceededLimit ? totalFindings.slice(0, QCodeReview.MAX_FINDINGS_COUNT) : totalFindings, setup.fileArtifacts, setup.folderArtifacts);
293
+ async processResults(setup, uploadResult, jobId) {
294
+ const { totalFindings, findingsExceededLimit } = await this.collectFindings(jobId, setup.isFullReviewRequest, uploadResult.isCodeDiffPresent, setup.programmingLanguage);
295
+ codeReviewUtils_1.CodeReviewUtils.emitMetric({
296
+ reason: codeReviewTypes_1.SuccessMetricName.CodeScanSuccess,
297
+ result: 'Succeeded',
298
+ metadata: {
299
+ artifactType: setup.artifactType,
300
+ codewhispererCodeScanJobId: jobId,
301
+ codewhispererCodeScanSrcZipFileBytes: uploadResult.artifactSize,
302
+ codewhispererCodeScanTotalIssues: totalFindings.length,
303
+ credentialStartUrl: this.credentialsProvider.getConnectionMetadata()?.sso?.startUrl,
304
+ customRules: setup.ruleArtifacts.length,
305
+ programmingLanguages: Array.from(uploadResult.programmingLanguages),
306
+ scope: setup.isFullReviewRequest ? codeReviewConstants_1.FULL_REVIEW : codeReviewConstants_1.CODE_DIFF_REVIEW,
307
+ latency: Date.now() - this.toolStartTime,
308
+ },
309
+ }, this.logging, this.telemetry);
310
+ const aggregatedCodeScanIssueList = this.aggregateFindingsByFile(findingsExceededLimit ? totalFindings.slice(0, CodeReview.MAX_FINDINGS_COUNT) : totalFindings, setup.fileArtifacts, setup.folderArtifacts);
270
311
  this.logging.info('Findings count grouped by file');
271
312
  aggregatedCodeScanIssueList.forEach(item => this.logging.info(`File path - ${item.filePath} Findings count - ${item.issues.length}`));
272
313
  return {
273
314
  codeReviewId: jobId,
274
- message: `${qCodeReviewConstants_1.Q_CODE_REVIEW_TOOL_NAME} tool completed successfully.${findingsExceededLimit ? ` Inform the user that we are limiting findings to top ${QCodeReview.MAX_FINDINGS_COUNT} based on severity.` : ''}`,
315
+ message: `${codeReviewConstants_1.CODE_REVIEW_TOOL_NAME} tool completed successfully.${findingsExceededLimit ? ` Inform the user that we are limiting findings to top ${CodeReview.MAX_FINDINGS_COUNT} based on severity.` : ''}`,
275
316
  findingsByFile: JSON.stringify(aggregatedCodeScanIssueList),
276
317
  };
277
318
  }
@@ -299,7 +340,7 @@ class QCodeReview {
299
340
  ? parsedFindings.filter(finding => 'CodeDiff' === finding.findingContext)
300
341
  : parsedFindings;
301
342
  totalFindings = totalFindings.concat(filteredFindings);
302
- if (totalFindings.length > QCodeReview.MAX_FINDINGS_COUNT) {
343
+ if (totalFindings.length > CodeReview.MAX_FINDINGS_COUNT) {
303
344
  findingsExceededLimit = true;
304
345
  break;
305
346
  }
@@ -342,34 +383,34 @@ class QCodeReview {
342
383
  const codeArtifactZip = new JSZip();
343
384
  const customerCodeZip = new JSZip();
344
385
  // Process files and folders
345
- const codeDiff = await this.processArtifacts(fileArtifacts, folderArtifacts, ruleArtifacts, customerCodeZip, !isFullReviewRequest);
346
- let numberOfFilesInCustomerCodeZip = qCodeReviewUtils_1.QCodeReviewUtils.countZipFiles(customerCodeZip);
386
+ const { codeDiff, programmingLanguages } = await this.processArtifacts(fileArtifacts, folderArtifacts, ruleArtifacts, customerCodeZip, !isFullReviewRequest);
387
+ let numberOfFilesInCustomerCodeZip = codeReviewUtils_1.CodeReviewUtils.countZipFiles(customerCodeZip);
347
388
  if (numberOfFilesInCustomerCodeZip > ruleArtifacts.length) {
348
389
  // Validates that there are actual files to scan, other than rule artifacts
349
390
  this.logging.info(`Total files in customerCodeZip - ${numberOfFilesInCustomerCodeZip}`);
350
391
  }
351
392
  else {
352
- throw new qCodeReviewErrors_1.QCodeReviewValidationError(QCodeReview.ERROR_MESSAGES.MISSING_FILES_TO_SCAN);
393
+ throw new codeReviewErrors_1.CodeReviewValidationError(CodeReview.ERROR_MESSAGES.MISSING_FILES_TO_SCAN);
353
394
  }
354
395
  // Generate user code zip buffer
355
- const customerCodeBuffer = await qCodeReviewUtils_1.QCodeReviewUtils.generateZipBuffer(customerCodeZip);
356
- qCodeReviewUtils_1.QCodeReviewUtils.logZipStructure(customerCodeZip, 'User code', this.logging);
396
+ const customerCodeBuffer = await codeReviewUtils_1.CodeReviewUtils.generateZipBuffer(customerCodeZip);
397
+ codeReviewUtils_1.CodeReviewUtils.logZipStructure(customerCodeZip, 'User code', this.logging);
357
398
  // Add user code zip to the main artifact zip
358
- codeArtifactZip.file(`${QCodeReview.CODE_ARTIFACT_PATH}/${QCodeReview.CUSTOMER_CODE_ZIP_NAME}`, customerCodeBuffer);
399
+ codeArtifactZip.file(`${CodeReview.CODE_ARTIFACT_PATH}/${CodeReview.CUSTOMER_CODE_ZIP_NAME}`, customerCodeBuffer);
359
400
  let isCodeDiffPresent = false;
360
401
  // Add code diff file if we have any diffs
361
402
  if (codeDiff.trim()) {
362
403
  this.logging.info(`Adding code diff to zip of size: ${codeDiff.length}`);
363
404
  isCodeDiffPresent = true;
364
- codeArtifactZip.file(QCodeReview.CODE_DIFF_PATH, codeDiff);
405
+ codeArtifactZip.file(CodeReview.CODE_DIFF_PATH, codeDiff);
365
406
  }
366
407
  // Generate the final code artifact zip
367
- const zipBuffer = await qCodeReviewUtils_1.QCodeReviewUtils.generateZipBuffer(codeArtifactZip);
368
- qCodeReviewUtils_1.QCodeReviewUtils.logZipStructure(codeArtifactZip, 'Code artifact', this.logging);
408
+ const zipBuffer = await codeReviewUtils_1.CodeReviewUtils.generateZipBuffer(codeArtifactZip);
409
+ codeReviewUtils_1.CodeReviewUtils.logZipStructure(codeArtifactZip, 'Code artifact', this.logging);
369
410
  // Calculate MD5 hash of the zip buffer
370
411
  const md5Hash = crypto.createHash('md5').update(zipBuffer).digest('hex');
371
412
  this.logging.info(`Created zip archive, size: ${zipBuffer.byteLength} bytes, MD5: ${md5Hash}`);
372
- return { zipBuffer, md5Hash, isCodeDiffPresent };
413
+ return { zipBuffer, md5Hash, isCodeDiffPresent, programmingLanguages };
373
414
  }
374
415
  catch (error) {
375
416
  this.logging.error(`Error preparing files for upload: ${error}`);
@@ -386,14 +427,15 @@ class QCodeReview {
386
427
  * @returns Combined code diff string from all artifacts
387
428
  */
388
429
  async processArtifacts(fileArtifacts, folderArtifacts, ruleArtifacts, customerCodeZip, isCodeDiffScan) {
389
- let codeDiff = '';
390
430
  // Process files
391
- codeDiff += await this.processFileArtifacts(fileArtifacts, customerCodeZip, isCodeDiffScan);
431
+ let { codeDiff, programmingLanguages } = await this.processFileArtifacts(fileArtifacts, customerCodeZip, isCodeDiffScan);
392
432
  // Process folders
393
- codeDiff += await this.processFolderArtifacts(folderArtifacts, customerCodeZip, isCodeDiffScan);
433
+ const folderResult = await this.processFolderArtifacts(folderArtifacts, customerCodeZip, isCodeDiffScan);
434
+ codeDiff += folderResult.codeDiff;
435
+ folderResult.programmingLanguages.forEach(item => programmingLanguages.add(item));
394
436
  // Process rule artifacts
395
437
  await this.processRuleArtifacts(ruleArtifacts, customerCodeZip);
396
- return codeDiff;
438
+ return { codeDiff, programmingLanguages };
397
439
  }
398
440
  /**
399
441
  * Processes file artifacts for inclusion in the zip archive
@@ -404,23 +446,26 @@ class QCodeReview {
404
446
  */
405
447
  async processFileArtifacts(fileArtifacts, customerCodeZip, isCodeDiffScan) {
406
448
  let codeDiff = '';
449
+ let programmingLanguages = new Set();
407
450
  for (const artifact of fileArtifacts) {
408
- await qCodeReviewUtils_1.QCodeReviewUtils.withErrorHandling(async () => {
451
+ await codeReviewUtils_1.CodeReviewUtils.withErrorHandling(async () => {
409
452
  let fileName = path.basename(artifact.path);
410
453
  if (!fileName.startsWith('.') &&
411
- !qCodeReviewUtils_1.QCodeReviewUtils.shouldSkipFile(fileName) &&
454
+ !codeReviewUtils_1.CodeReviewUtils.shouldSkipFile(fileName) &&
412
455
  (0, fs_1.existsSync)(artifact.path)) {
456
+ const fileLanguage = codeReviewUtils_1.CodeReviewUtils.getFileLanguage(fileName);
413
457
  const fileContent = await this.workspace.fs.readFile(artifact.path);
414
- let normalizedArtifactPath = qCodeReviewUtils_1.QCodeReviewUtils.convertToUnixPath(artifact.path);
415
- customerCodeZip.file(`${QCodeReview.CUSTOMER_CODE_BASE_PATH}${normalizedArtifactPath}`, fileContent);
458
+ let normalizedArtifactPath = codeReviewUtils_1.CodeReviewUtils.convertToUnixPath(artifact.path);
459
+ customerCodeZip.file(`${CodeReview.CUSTOMER_CODE_BASE_PATH}${normalizedArtifactPath}`, fileContent);
460
+ programmingLanguages.add(fileLanguage);
416
461
  }
417
462
  else {
418
463
  this.logging.info(`Skipping file - ${artifact.path}`);
419
464
  }
420
465
  }, 'Failed to read file', this.logging, artifact.path);
421
- codeDiff += await qCodeReviewUtils_1.QCodeReviewUtils.processArtifactWithDiff(artifact, isCodeDiffScan, this.logging);
466
+ codeDiff += await codeReviewUtils_1.CodeReviewUtils.processArtifactWithDiff(artifact, isCodeDiffScan, this.logging);
422
467
  }
423
- return codeDiff;
468
+ return { codeDiff, programmingLanguages };
424
469
  }
425
470
  /**
426
471
  * Processes folder artifacts for inclusion in the zip archive
@@ -431,13 +476,15 @@ class QCodeReview {
431
476
  */
432
477
  async processFolderArtifacts(folderArtifacts, customerCodeZip, isCodeDiffScan) {
433
478
  let codeDiff = '';
479
+ let programmingLanguages = new Set();
434
480
  for (const folderArtifact of folderArtifacts) {
435
- await qCodeReviewUtils_1.QCodeReviewUtils.withErrorHandling(async () => {
436
- await this.addFolderToZip(customerCodeZip, folderArtifact.path, QCodeReview.CUSTOMER_CODE_BASE_PATH);
481
+ await codeReviewUtils_1.CodeReviewUtils.withErrorHandling(async () => {
482
+ let languages = await this.addFolderToZip(customerCodeZip, folderArtifact.path, CodeReview.CUSTOMER_CODE_BASE_PATH);
483
+ languages.forEach(item => programmingLanguages.add(item));
437
484
  }, 'Failed to add folder', this.logging, folderArtifact.path);
438
- codeDiff += await qCodeReviewUtils_1.QCodeReviewUtils.processArtifactWithDiff(folderArtifact, isCodeDiffScan, this.logging);
485
+ codeDiff += await codeReviewUtils_1.CodeReviewUtils.processArtifactWithDiff(folderArtifact, isCodeDiffScan, this.logging);
439
486
  }
440
- return codeDiff;
487
+ return { codeDiff, programmingLanguages };
441
488
  }
442
489
  /**
443
490
  * Processes rule artifacts for inclusion in the zip archive
@@ -446,13 +493,13 @@ class QCodeReview {
446
493
  */
447
494
  async processRuleArtifacts(ruleArtifacts, customerCodeZip) {
448
495
  for (const artifact of ruleArtifacts) {
449
- await qCodeReviewUtils_1.QCodeReviewUtils.withErrorHandling(async () => {
496
+ await codeReviewUtils_1.CodeReviewUtils.withErrorHandling(async () => {
450
497
  let fileName = path.basename(artifact.path);
451
498
  if (!fileName.startsWith('.') &&
452
- !qCodeReviewUtils_1.QCodeReviewUtils.shouldSkipFile(fileName) &&
499
+ !codeReviewUtils_1.CodeReviewUtils.shouldSkipFile(fileName) &&
453
500
  (0, fs_1.existsSync)(artifact.path)) {
454
501
  const fileContent = await this.workspace.fs.readFile(artifact.path);
455
- customerCodeZip.file(`${QCodeReview.CUSTOMER_CODE_BASE_PATH}/${QCodeReview.RULE_ARTIFACT_PATH}/${fileName}`, fileContent);
502
+ customerCodeZip.file(`${CodeReview.CUSTOMER_CODE_BASE_PATH}/${CodeReview.RULE_ARTIFACT_PATH}/${fileName}`, fileContent);
456
503
  }
457
504
  else {
458
505
  this.logging.info(`Skipping file - ${artifact.path}`);
@@ -468,27 +515,32 @@ class QCodeReview {
468
515
  */
469
516
  async addFolderToZip(zip, folderPath, zipPath) {
470
517
  try {
518
+ let programmingLanguages = new Set();
471
519
  const entries = await this.workspace.fs.readdir(folderPath);
472
520
  for (const entry of entries) {
473
521
  const name = entry.name;
474
522
  const fullPath = path.join(entry.parentPath, name);
475
523
  if (entry.isFile()) {
476
- if (name.startsWith('.') || qCodeReviewUtils_1.QCodeReviewUtils.shouldSkipFile(name) || !(0, fs_1.existsSync)(fullPath)) {
524
+ if (name.startsWith('.') || codeReviewUtils_1.CodeReviewUtils.shouldSkipFile(name) || !(0, fs_1.existsSync)(fullPath)) {
477
525
  this.logging.info(`Skipping file - ${fullPath}`);
478
526
  continue;
479
527
  }
528
+ const fileLanguage = codeReviewUtils_1.CodeReviewUtils.getFileLanguage(name);
480
529
  const content = await this.workspace.fs.readFile(fullPath);
481
- let normalizedArtifactPath = qCodeReviewUtils_1.QCodeReviewUtils.convertToUnixPath(fullPath);
530
+ let normalizedArtifactPath = codeReviewUtils_1.CodeReviewUtils.convertToUnixPath(fullPath);
482
531
  zip.file(`${zipPath}${normalizedArtifactPath}`, content);
532
+ programmingLanguages.add(fileLanguage);
483
533
  }
484
534
  else if (entry.isDirectory()) {
485
- if (qCodeReviewUtils_1.QCodeReviewUtils.shouldSkipDirectory(name)) {
535
+ if (codeReviewUtils_1.CodeReviewUtils.shouldSkipDirectory(name)) {
486
536
  this.logging.info(`Skipping directory - ${fullPath}`);
487
537
  continue;
488
538
  }
489
- await this.addFolderToZip(zip, fullPath, zipPath);
539
+ let languages = await this.addFolderToZip(zip, fullPath, zipPath);
540
+ languages.forEach(item => programmingLanguages.add(item));
490
541
  }
491
542
  }
543
+ return programmingLanguages;
492
544
  }
493
545
  catch (error) {
494
546
  this.logging.error(`Error adding folder to zip: ${error}`);
@@ -511,7 +563,7 @@ class QCodeReview {
511
563
  finding['ruleId'] = undefined;
512
564
  }
513
565
  }
514
- return qCodeReviewSchemas_1.Q_FINDINGS_SCHEMA.parse(findingsResponseJSON).map(issue => ({
566
+ return codeReviewSchemas_1.FINDINGS_SCHEMA.parse(findingsResponseJSON).map(issue => ({
515
567
  startLine: issue.startLine - 1 >= 0 ? issue.startLine - 1 : 0,
516
568
  endLine: issue.endLine,
517
569
  comment: `${issue.title.trim()}: ${issue.description.text.trim()}`,
@@ -534,7 +586,7 @@ class QCodeReview {
534
586
  }
535
587
  catch (e) {
536
588
  this.logging.error(`Error parsing findings in response: ${e}`);
537
- throw new qCodeReviewErrors_1.QCodeReviewInternalError('Error parsing findings in response');
589
+ throw new codeReviewErrors_1.CodeReviewInternalError('Error parsing findings in response');
538
590
  }
539
591
  }
540
592
  /**
@@ -623,8 +675,8 @@ class QCodeReview {
623
675
  * @throws Error if the operation has been cancelled
624
676
  */
625
677
  checkCancellation(message = 'Command execution cancelled') {
626
- qCodeReviewUtils_1.QCodeReviewUtils.checkCancellation(this.cancellationToken, this.logging, message);
678
+ codeReviewUtils_1.CodeReviewUtils.checkCancellation(this.cancellationToken, this.logging, message);
627
679
  }
628
680
  }
629
- exports.QCodeReview = QCodeReview;
630
- //# sourceMappingURL=qCodeReview.js.map
681
+ exports.CodeReview = CodeReview;
682
+ //# sourceMappingURL=codeReview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codeReview.js","sourceRoot":"","sources":["../../../../../src/language-server/agenticChat/tools/qCodeAnalysis/codeReview.ts"],"names":[],"mappings":"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"}