mobbdev 1.4.23 → 1.4.26

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.
@@ -138,10 +138,16 @@ function getSdk(client, withWrapper = defaultWrapper) {
138
138
  },
139
139
  SkillVerdictsByMd5(variables, requestHeaders, signal) {
140
140
  return withWrapper((wrappedRequestHeaders) => client.request({ document: SkillVerdictsByMd5Document, variables, requestHeaders: { ...requestHeaders, ...wrappedRequestHeaders }, signal }), "SkillVerdictsByMd5", "query", variables);
141
+ },
142
+ LogMvsEvent(variables, requestHeaders, signal) {
143
+ return withWrapper((wrappedRequestHeaders) => client.request({ document: LogMvsEventDocument, variables, requestHeaders: { ...requestHeaders, ...wrappedRequestHeaders }, signal }), "LogMvsEvent", "mutation", variables);
144
+ },
145
+ getMvsProject(variables, requestHeaders, signal) {
146
+ return withWrapper((wrappedRequestHeaders) => client.request({ document: GetMvsProjectDocument, variables, requestHeaders: { ...requestHeaders, ...wrappedRequestHeaders }, signal }), "getMvsProject", "mutation", variables);
141
147
  }
142
148
  };
143
149
  }
144
- var AiBlameInferenceType, FixQuestionInputType, Language, ManifestAction, Effort_To_Apply_Fix_Enum, Fix_Rating_Tag_Enum, Fix_Report_State_Enum, Fix_State_Enum, IssueLanguage_Enum, IssueType_Enum, Pr_Status_Enum, Project_Role_Type_Enum, Vulnerability_Report_Issue_Category_Enum, Vulnerability_Report_Issue_State_Enum, Vulnerability_Report_Issue_Tag_Enum, Vulnerability_Report_Vendor_Enum, Vulnerability_Severity_Enum, FixDetailsFragmentDoc, FixReportSummaryFieldsFragmentDoc, MeDocument, GetLastOrgAndNamedProjectDocument, GetLastOrgDocument, GetEncryptedApiTokenDocument, FixReportStateDocument, GetVulnerabilityReportPathsDocument, GetAnalysisSubscriptionDocument, GetAnalysisDocument, GetFixesDocument, GetVulByNodesMetadataDocument, GetFalsePositiveDocument, UpdateScmTokenDocument, UploadS3BucketInfoDocument, GetTracyDiffUploadUrlDocument, AnalyzeCommitForExtensionAiBlameDocument, GetAiBlameInferenceDocument, GetAiBlameAttributionPromptDocument, GetPromptSummaryDocument, UploadAiBlameInferencesInitDocument, FinalizeAiBlameInferencesUploadDocument, UploadTracyRecordsDocument, GetTracyRawDataUploadUrlDocument, DigestVulnerabilityReportDocument, SubmitVulnerabilityReportDocument, CreateCommunityUserDocument, CreateCliLoginDocument, PerformCliLoginDocument, SetQuarantineEnabledDocument, CreateProjectDocument, ValidateRepoUrlDocument, GitReferenceDocument, AutoPrAnalysisDocument, GetFixWithAnswersDocument, GetFixReportsByRepoUrlDocument, GetReportFixesDocument, GetLatestReportByRepoUrlDocument, UpdateDownloadedFixDataDocument, GetUserMvsAutoFixDocument, StreamBlameAiAnalysisRequestsDocument, StreamCommitBlameRequestsDocument, ScanSkillDocument, SkillVerdictsByMd5Document, defaultWrapper;
150
+ var AiBlameInferenceType, FixQuestionInputType, Language, ManifestAction, Effort_To_Apply_Fix_Enum, Fix_Rating_Tag_Enum, Fix_Report_State_Enum, Fix_State_Enum, IssueLanguage_Enum, IssueType_Enum, Pr_Status_Enum, Project_Role_Type_Enum, Vulnerability_Report_Issue_Category_Enum, Vulnerability_Report_Issue_State_Enum, Vulnerability_Report_Issue_Tag_Enum, Vulnerability_Report_Vendor_Enum, Vulnerability_Severity_Enum, FixDetailsFragmentDoc, FixReportSummaryFieldsFragmentDoc, MeDocument, GetLastOrgAndNamedProjectDocument, GetLastOrgDocument, GetEncryptedApiTokenDocument, FixReportStateDocument, GetVulnerabilityReportPathsDocument, GetAnalysisSubscriptionDocument, GetAnalysisDocument, GetFixesDocument, GetVulByNodesMetadataDocument, GetFalsePositiveDocument, UpdateScmTokenDocument, UploadS3BucketInfoDocument, GetTracyDiffUploadUrlDocument, AnalyzeCommitForExtensionAiBlameDocument, GetAiBlameInferenceDocument, GetAiBlameAttributionPromptDocument, GetPromptSummaryDocument, UploadAiBlameInferencesInitDocument, FinalizeAiBlameInferencesUploadDocument, UploadTracyRecordsDocument, GetTracyRawDataUploadUrlDocument, DigestVulnerabilityReportDocument, SubmitVulnerabilityReportDocument, CreateCommunityUserDocument, CreateCliLoginDocument, PerformCliLoginDocument, SetQuarantineEnabledDocument, CreateProjectDocument, ValidateRepoUrlDocument, GitReferenceDocument, AutoPrAnalysisDocument, GetFixWithAnswersDocument, GetFixReportsByRepoUrlDocument, GetReportFixesDocument, GetLatestReportByRepoUrlDocument, UpdateDownloadedFixDataDocument, GetUserMvsAutoFixDocument, StreamBlameAiAnalysisRequestsDocument, StreamCommitBlameRequestsDocument, ScanSkillDocument, SkillVerdictsByMd5Document, LogMvsEventDocument, GetMvsProjectDocument, defaultWrapper;
145
151
  var init_client_generates = __esm({
146
152
  "src/features/analysis/scm/generates/client_generates.ts"() {
147
153
  "use strict";
@@ -1077,7 +1083,7 @@ var init_client_generates = __esm({
1077
1083
  }
1078
1084
  `;
1079
1085
  SubmitVulnerabilityReportDocument = `
1080
- mutation SubmitVulnerabilityReport($fixReportId: String!, $repoUrl: String!, $reference: String!, $projectId: String!, $scanSource: String!, $sha: String, $experimentalEnabled: Boolean, $vulnerabilityReportFileName: String, $pullRequest: Int, $isFullScan: Boolean, $scanContext: String!, $fileCount: Int) {
1086
+ mutation SubmitVulnerabilityReport($fixReportId: String!, $repoUrl: String!, $reference: String!, $projectId: String!, $scanSource: String!, $sha: String, $experimentalEnabled: Boolean, $vulnerabilityReportFileName: String, $pullRequest: Int, $isFullScan: Boolean, $scanContext: String!, $fileCount: Int, $computerName: String, $computerUser: String, $clientVersion: String) {
1081
1087
  submitVulnerabilityReport(
1082
1088
  fixReportId: $fixReportId
1083
1089
  repoUrl: $repoUrl
@@ -1091,6 +1097,9 @@ var init_client_generates = __esm({
1091
1097
  scanSource: $scanSource
1092
1098
  scanContext: $scanContext
1093
1099
  fileCount: $fileCount
1100
+ computerName: $computerName
1101
+ computerUser: $computerUser
1102
+ clientVersion: $clientVersion
1094
1103
  ) {
1095
1104
  __typename
1096
1105
  ... on VulnerabilityReport {
@@ -1365,6 +1374,29 @@ var init_client_generates = __esm({
1365
1374
  scannedAt
1366
1375
  }
1367
1376
  }
1377
+ }
1378
+ `;
1379
+ LogMvsEventDocument = `
1380
+ mutation LogMvsEvent($eventType: String!, $fixReportId: String, $projectId: String, $repoUrl: String, $riskCount: Int, $computerName: String, $computerUser: String, $clientVersion: String) {
1381
+ logMvsEvent(
1382
+ eventType: $eventType
1383
+ fixReportId: $fixReportId
1384
+ projectId: $projectId
1385
+ repoUrl: $repoUrl
1386
+ riskCount: $riskCount
1387
+ computerName: $computerName
1388
+ computerUser: $computerUser
1389
+ clientVersion: $clientVersion
1390
+ ) {
1391
+ status
1392
+ }
1393
+ }
1394
+ `;
1395
+ GetMvsProjectDocument = `
1396
+ mutation getMvsProject($organizationId: String!) {
1397
+ getMvsProject(organizationId: $organizationId) {
1398
+ projectId
1399
+ }
1368
1400
  }
1369
1401
  `;
1370
1402
  defaultWrapper = (action, _operationName, _operationType, _variables) => action();
@@ -1625,7 +1657,8 @@ var init_issue = __esm({
1625
1657
  category: z4.nativeEnum(Vulnerability_Report_Issue_Category_Enum),
1626
1658
  extraData: z4.object({
1627
1659
  missing_files: z4.string().array().nullish(),
1628
- error_files: z4.string().array().nullish()
1660
+ error_files: z4.string().array().nullish(),
1661
+ ai_cost_limit_exceeded: z4.string().nullish()
1629
1662
  }),
1630
1663
  vulnerabilityReportIssueTags: z4.array(
1631
1664
  z4.object({
@@ -2166,7 +2199,8 @@ var init_types = __esm({
2166
2199
  extraData: z7.object({
2167
2200
  missing_files: z7.string().array().nullish(),
2168
2201
  large_files: z7.string().array().nullish(),
2169
- error_files: z7.string().array().nullish()
2202
+ error_files: z7.string().array().nullish(),
2203
+ ai_cost_limit_exceeded: z7.string().nullish()
2170
2204
  })
2171
2205
  }).array()
2172
2206
  })
@@ -2205,7 +2239,8 @@ var init_types = __esm({
2205
2239
  extraData: z7.object({
2206
2240
  missing_files: z7.string().array().nullish(),
2207
2241
  large_files: z7.string().array().nullish(),
2208
- error_files: z7.string().array().nullish()
2242
+ error_files: z7.string().array().nullish(),
2243
+ ai_cost_limit_exceeded: z7.string().nullish()
2209
2244
  }),
2210
2245
  fix: ReportFixesQueryFixZ.nullable(),
2211
2246
  falsePositive: z7.object({
@@ -4494,7 +4529,6 @@ var CliError = class extends Error {
4494
4529
 
4495
4530
  // src/commands/AuthManager.ts
4496
4531
  import crypto from "crypto";
4497
- import os from "os";
4498
4532
  import Debug10 from "debug";
4499
4533
  import open from "open";
4500
4534
 
@@ -7015,6 +7049,7 @@ import { fetch as fetch2, ProxyAgent } from "undici";
7015
7049
 
7016
7050
  // src/features/analysis/scm/gitlab/gitlab.ts
7017
7051
  import querystring3 from "querystring";
7052
+ import { setTimeout as delay } from "timers/promises";
7018
7053
  import {
7019
7054
  createRequesterFn
7020
7055
  } from "@gitbeaker/requester-utils";
@@ -7781,7 +7816,7 @@ async function sanitizeDataWithCounts(obj, options) {
7781
7816
  }
7782
7817
 
7783
7818
  // src/utils/with-timeout.ts
7784
- import { setTimeout as delay } from "timers/promises";
7819
+ import { setTimeout as delay2 } from "timers/promises";
7785
7820
 
7786
7821
  // src/features/analysis/graphql/s3-raw-data-upload.ts
7787
7822
  import { setTimeout as sleep2 } from "timers/promises";
@@ -7885,16 +7920,42 @@ var URL_REFRESH_MS = 20 * 60 * 1e3;
7885
7920
  var debug10 = Debug9("mobbdev:tracy-batch-upload");
7886
7921
 
7887
7922
  // src/mcp/services/types.ts
7888
- function buildLoginUrl(baseUrl, loginId, hostname, context) {
7923
+ import os from "os";
7924
+ function buildLoginUrl(baseUrl, loginId, machine, context) {
7889
7925
  const url = new URL(`${baseUrl}/${loginId}`);
7890
- url.searchParams.set("hostname", hostname);
7891
- url.searchParams.set("trigger", context.trigger);
7892
- url.searchParams.set("source", context.source);
7893
- if (context.ide) {
7894
- url.searchParams.set("ide", context.ide);
7926
+ url.searchParams.set("hostname", machine.hostname);
7927
+ if (machine.computerUser) {
7928
+ url.searchParams.set("computerUser", machine.computerUser);
7929
+ }
7930
+ if (machine.clientVersion) {
7931
+ url.searchParams.set("clientVersion", machine.clientVersion);
7932
+ }
7933
+ if (context) {
7934
+ url.searchParams.set("trigger", context.trigger);
7935
+ url.searchParams.set("source", context.source);
7936
+ if (context.ide) {
7937
+ url.searchParams.set("ide", context.ide);
7938
+ }
7895
7939
  }
7896
7940
  return url.toString();
7897
7941
  }
7942
+ function getComputerUser() {
7943
+ try {
7944
+ return os.userInfo().username || void 0;
7945
+ } catch {
7946
+ return void 0;
7947
+ }
7948
+ }
7949
+ function getLoginMachineInfo() {
7950
+ return {
7951
+ hostname: os.hostname(),
7952
+ computerUser: getComputerUser(),
7953
+ clientVersion: packageJson.version
7954
+ };
7955
+ }
7956
+ function buildLoginBrowserUrl(baseUrl, loginId, context) {
7957
+ return buildLoginUrl(baseUrl, loginId, getLoginMachineInfo(), context);
7958
+ }
7898
7959
 
7899
7960
  // src/utils/ConfigStoreService.ts
7900
7961
  import Configstore from "configstore";
@@ -8057,7 +8118,11 @@ var _AuthManager = class _AuthManager {
8057
8118
  publicKey: this.publicKey.export({ format: "pem", type: "pkcs1" }).toString()
8058
8119
  });
8059
8120
  const webLoginUrl = `${this.resolvedWebAppUrl}${loginPath || "/cli-login"}`;
8060
- const browserUrl = loginContext ? buildLoginUrl(webLoginUrl, this.loginId, os.hostname(), loginContext) : `${webLoginUrl}/${this.loginId}?hostname=${os.hostname()}`;
8121
+ const browserUrl = buildLoginBrowserUrl(
8122
+ webLoginUrl,
8123
+ this.loginId,
8124
+ loginContext
8125
+ );
8061
8126
  this.currentBrowserUrl = browserUrl;
8062
8127
  return browserUrl;
8063
8128
  } catch (error) {
package/dist/index.mjs CHANGED
@@ -138,10 +138,16 @@ function getSdk(client, withWrapper = defaultWrapper) {
138
138
  },
139
139
  SkillVerdictsByMd5(variables, requestHeaders, signal) {
140
140
  return withWrapper((wrappedRequestHeaders) => client.request({ document: SkillVerdictsByMd5Document, variables, requestHeaders: { ...requestHeaders, ...wrappedRequestHeaders }, signal }), "SkillVerdictsByMd5", "query", variables);
141
+ },
142
+ LogMvsEvent(variables, requestHeaders, signal) {
143
+ return withWrapper((wrappedRequestHeaders) => client.request({ document: LogMvsEventDocument, variables, requestHeaders: { ...requestHeaders, ...wrappedRequestHeaders }, signal }), "LogMvsEvent", "mutation", variables);
144
+ },
145
+ getMvsProject(variables, requestHeaders, signal) {
146
+ return withWrapper((wrappedRequestHeaders) => client.request({ document: GetMvsProjectDocument, variables, requestHeaders: { ...requestHeaders, ...wrappedRequestHeaders }, signal }), "getMvsProject", "mutation", variables);
141
147
  }
142
148
  };
143
149
  }
144
- var AiBlameInferenceType, FixQuestionInputType, Language, ManifestAction, Effort_To_Apply_Fix_Enum, Fix_Rating_Tag_Enum, Fix_Report_State_Enum, Fix_State_Enum, IssueLanguage_Enum, IssueType_Enum, Pr_Status_Enum, Project_Role_Type_Enum, Vulnerability_Report_Issue_Category_Enum, Vulnerability_Report_Issue_State_Enum, Vulnerability_Report_Issue_Tag_Enum, Vulnerability_Report_Vendor_Enum, Vulnerability_Severity_Enum, FixDetailsFragmentDoc, FixReportSummaryFieldsFragmentDoc, MeDocument, GetLastOrgAndNamedProjectDocument, GetLastOrgDocument, GetEncryptedApiTokenDocument, FixReportStateDocument, GetVulnerabilityReportPathsDocument, GetAnalysisSubscriptionDocument, GetAnalysisDocument, GetFixesDocument, GetVulByNodesMetadataDocument, GetFalsePositiveDocument, UpdateScmTokenDocument, UploadS3BucketInfoDocument, GetTracyDiffUploadUrlDocument, AnalyzeCommitForExtensionAiBlameDocument, GetAiBlameInferenceDocument, GetAiBlameAttributionPromptDocument, GetPromptSummaryDocument, UploadAiBlameInferencesInitDocument, FinalizeAiBlameInferencesUploadDocument, UploadTracyRecordsDocument, GetTracyRawDataUploadUrlDocument, DigestVulnerabilityReportDocument, SubmitVulnerabilityReportDocument, CreateCommunityUserDocument, CreateCliLoginDocument, PerformCliLoginDocument, SetQuarantineEnabledDocument, CreateProjectDocument, ValidateRepoUrlDocument, GitReferenceDocument, AutoPrAnalysisDocument, GetFixWithAnswersDocument, GetFixReportsByRepoUrlDocument, GetReportFixesDocument, GetLatestReportByRepoUrlDocument, UpdateDownloadedFixDataDocument, GetUserMvsAutoFixDocument, StreamBlameAiAnalysisRequestsDocument, StreamCommitBlameRequestsDocument, ScanSkillDocument, SkillVerdictsByMd5Document, defaultWrapper;
150
+ var AiBlameInferenceType, FixQuestionInputType, Language, ManifestAction, Effort_To_Apply_Fix_Enum, Fix_Rating_Tag_Enum, Fix_Report_State_Enum, Fix_State_Enum, IssueLanguage_Enum, IssueType_Enum, Pr_Status_Enum, Project_Role_Type_Enum, Vulnerability_Report_Issue_Category_Enum, Vulnerability_Report_Issue_State_Enum, Vulnerability_Report_Issue_Tag_Enum, Vulnerability_Report_Vendor_Enum, Vulnerability_Severity_Enum, FixDetailsFragmentDoc, FixReportSummaryFieldsFragmentDoc, MeDocument, GetLastOrgAndNamedProjectDocument, GetLastOrgDocument, GetEncryptedApiTokenDocument, FixReportStateDocument, GetVulnerabilityReportPathsDocument, GetAnalysisSubscriptionDocument, GetAnalysisDocument, GetFixesDocument, GetVulByNodesMetadataDocument, GetFalsePositiveDocument, UpdateScmTokenDocument, UploadS3BucketInfoDocument, GetTracyDiffUploadUrlDocument, AnalyzeCommitForExtensionAiBlameDocument, GetAiBlameInferenceDocument, GetAiBlameAttributionPromptDocument, GetPromptSummaryDocument, UploadAiBlameInferencesInitDocument, FinalizeAiBlameInferencesUploadDocument, UploadTracyRecordsDocument, GetTracyRawDataUploadUrlDocument, DigestVulnerabilityReportDocument, SubmitVulnerabilityReportDocument, CreateCommunityUserDocument, CreateCliLoginDocument, PerformCliLoginDocument, SetQuarantineEnabledDocument, CreateProjectDocument, ValidateRepoUrlDocument, GitReferenceDocument, AutoPrAnalysisDocument, GetFixWithAnswersDocument, GetFixReportsByRepoUrlDocument, GetReportFixesDocument, GetLatestReportByRepoUrlDocument, UpdateDownloadedFixDataDocument, GetUserMvsAutoFixDocument, StreamBlameAiAnalysisRequestsDocument, StreamCommitBlameRequestsDocument, ScanSkillDocument, SkillVerdictsByMd5Document, LogMvsEventDocument, GetMvsProjectDocument, defaultWrapper;
145
151
  var init_client_generates = __esm({
146
152
  "src/features/analysis/scm/generates/client_generates.ts"() {
147
153
  "use strict";
@@ -1077,7 +1083,7 @@ var init_client_generates = __esm({
1077
1083
  }
1078
1084
  `;
1079
1085
  SubmitVulnerabilityReportDocument = `
1080
- mutation SubmitVulnerabilityReport($fixReportId: String!, $repoUrl: String!, $reference: String!, $projectId: String!, $scanSource: String!, $sha: String, $experimentalEnabled: Boolean, $vulnerabilityReportFileName: String, $pullRequest: Int, $isFullScan: Boolean, $scanContext: String!, $fileCount: Int) {
1086
+ mutation SubmitVulnerabilityReport($fixReportId: String!, $repoUrl: String!, $reference: String!, $projectId: String!, $scanSource: String!, $sha: String, $experimentalEnabled: Boolean, $vulnerabilityReportFileName: String, $pullRequest: Int, $isFullScan: Boolean, $scanContext: String!, $fileCount: Int, $computerName: String, $computerUser: String, $clientVersion: String) {
1081
1087
  submitVulnerabilityReport(
1082
1088
  fixReportId: $fixReportId
1083
1089
  repoUrl: $repoUrl
@@ -1091,6 +1097,9 @@ var init_client_generates = __esm({
1091
1097
  scanSource: $scanSource
1092
1098
  scanContext: $scanContext
1093
1099
  fileCount: $fileCount
1100
+ computerName: $computerName
1101
+ computerUser: $computerUser
1102
+ clientVersion: $clientVersion
1094
1103
  ) {
1095
1104
  __typename
1096
1105
  ... on VulnerabilityReport {
@@ -1365,6 +1374,29 @@ var init_client_generates = __esm({
1365
1374
  scannedAt
1366
1375
  }
1367
1376
  }
1377
+ }
1378
+ `;
1379
+ LogMvsEventDocument = `
1380
+ mutation LogMvsEvent($eventType: String!, $fixReportId: String, $projectId: String, $repoUrl: String, $riskCount: Int, $computerName: String, $computerUser: String, $clientVersion: String) {
1381
+ logMvsEvent(
1382
+ eventType: $eventType
1383
+ fixReportId: $fixReportId
1384
+ projectId: $projectId
1385
+ repoUrl: $repoUrl
1386
+ riskCount: $riskCount
1387
+ computerName: $computerName
1388
+ computerUser: $computerUser
1389
+ clientVersion: $clientVersion
1390
+ ) {
1391
+ status
1392
+ }
1393
+ }
1394
+ `;
1395
+ GetMvsProjectDocument = `
1396
+ mutation getMvsProject($organizationId: String!) {
1397
+ getMvsProject(organizationId: $organizationId) {
1398
+ projectId
1399
+ }
1368
1400
  }
1369
1401
  `;
1370
1402
  defaultWrapper = (action, _operationName, _operationType, _variables) => action();
@@ -1853,7 +1885,8 @@ var init_issue = __esm({
1853
1885
  category: z9.nativeEnum(Vulnerability_Report_Issue_Category_Enum),
1854
1886
  extraData: z9.object({
1855
1887
  missing_files: z9.string().array().nullish(),
1856
- error_files: z9.string().array().nullish()
1888
+ error_files: z9.string().array().nullish(),
1889
+ ai_cost_limit_exceeded: z9.string().nullish()
1857
1890
  }),
1858
1891
  vulnerabilityReportIssueTags: z9.array(
1859
1892
  z9.object({
@@ -2211,7 +2244,8 @@ var init_types = __esm({
2211
2244
  extraData: z11.object({
2212
2245
  missing_files: z11.string().array().nullish(),
2213
2246
  large_files: z11.string().array().nullish(),
2214
- error_files: z11.string().array().nullish()
2247
+ error_files: z11.string().array().nullish(),
2248
+ ai_cost_limit_exceeded: z11.string().nullish()
2215
2249
  })
2216
2250
  }).array()
2217
2251
  })
@@ -2250,7 +2284,8 @@ var init_types = __esm({
2250
2284
  extraData: z11.object({
2251
2285
  missing_files: z11.string().array().nullish(),
2252
2286
  large_files: z11.string().array().nullish(),
2253
- error_files: z11.string().array().nullish()
2287
+ error_files: z11.string().array().nullish(),
2288
+ ai_cost_limit_exceeded: z11.string().nullish()
2254
2289
  }),
2255
2290
  fix: ReportFixesQueryFixZ.nullable(),
2256
2291
  falsePositive: z11.object({
@@ -10915,6 +10950,7 @@ var GithubSCMLib = class extends SCMLib {
10915
10950
 
10916
10951
  // src/features/analysis/scm/gitlab/gitlab.ts
10917
10952
  import querystring3 from "querystring";
10953
+ import { setTimeout as delay } from "timers/promises";
10918
10954
  import {
10919
10955
  createRequesterFn
10920
10956
  } from "@gitbeaker/requester-utils";
@@ -11576,6 +11612,9 @@ async function processBody(response) {
11576
11612
  }
11577
11613
  return await response.text();
11578
11614
  }
11615
+ var GITLAB_RETRYABLE_STATUSES = /* @__PURE__ */ new Set([429, 502, 503, 504]);
11616
+ var GITLAB_REQUEST_MAX_ATTEMPTS = 4;
11617
+ var GITLAB_REQUEST_BASE_BACKOFF_MS = 1e3;
11579
11618
  async function brokerRequestHandler(endpoint, options) {
11580
11619
  const { prefixUrl, searchParams } = options || {};
11581
11620
  let baseUrl;
@@ -11588,24 +11627,42 @@ async function brokerRequestHandler(endpoint, options) {
11588
11627
  rejectUnauthorized: false
11589
11628
  }
11590
11629
  }) : void 0;
11591
- const response = await undiciFetch(url, {
11592
- headers: options?.headers,
11593
- method: options?.method,
11594
- body: options?.body ? String(options?.body) : void 0,
11595
- dispatcher
11596
- }).catch((e) => {
11597
- if (e.name === "TimeoutError" || e.name === "AbortError") {
11598
- throw new Error("Query timeout was reached");
11630
+ let lastError;
11631
+ for (let attempt = 1; attempt <= GITLAB_REQUEST_MAX_ATTEMPTS; attempt++) {
11632
+ let response;
11633
+ try {
11634
+ response = await undiciFetch(url, {
11635
+ headers: options?.headers,
11636
+ method: options?.method,
11637
+ body: options?.body ? String(options?.body) : void 0,
11638
+ dispatcher
11639
+ });
11640
+ } catch (e) {
11641
+ if (e.name === "TimeoutError" || e.name === "AbortError") {
11642
+ lastError = new Error("Query timeout was reached");
11643
+ } else {
11644
+ throw e;
11645
+ }
11599
11646
  }
11600
- throw e;
11601
- });
11602
- if (response.ok)
11603
- return {
11604
- body: await processBody(response),
11605
- headers: Object.fromEntries(response.headers.entries()),
11606
- status: response.status
11607
- };
11608
- throw new Error(`gitbeaker: ${response.statusText}`);
11647
+ if (response) {
11648
+ if (response.ok) {
11649
+ return {
11650
+ body: await processBody(response),
11651
+ headers: Object.fromEntries(response.headers.entries()),
11652
+ status: response.status
11653
+ };
11654
+ }
11655
+ if (!GITLAB_RETRYABLE_STATUSES.has(response.status)) {
11656
+ throw new Error(`gitbeaker: ${response.statusText}`);
11657
+ }
11658
+ lastError = new Error(`gitbeaker: ${response.statusText}`);
11659
+ }
11660
+ if (attempt === GITLAB_REQUEST_MAX_ATTEMPTS) break;
11661
+ const retryAfter = Number(response?.headers.get("retry-after"));
11662
+ const waitMs = Number.isFinite(retryAfter) && retryAfter > 0 ? retryAfter * 1e3 : GITLAB_REQUEST_BASE_BACKOFF_MS * 2 ** (attempt - 1);
11663
+ await delay(waitMs);
11664
+ }
11665
+ throw lastError ?? new Error("gitbeaker: request failed");
11609
11666
  }
11610
11667
  async function listGitlabProjectMembers({
11611
11668
  repoUrl,
@@ -13204,7 +13261,6 @@ import { z as z31 } from "zod";
13204
13261
 
13205
13262
  // src/commands/AuthManager.ts
13206
13263
  import crypto from "crypto";
13207
- import os3 from "os";
13208
13264
  import Debug11 from "debug";
13209
13265
  import open from "open";
13210
13266
 
@@ -14885,12 +14941,12 @@ async function uploadAiBlameCommandHandler(args) {
14885
14941
  }
14886
14942
 
14887
14943
  // src/utils/with-timeout.ts
14888
- import { setTimeout as delay } from "timers/promises";
14944
+ import { setTimeout as delay2 } from "timers/promises";
14889
14945
  function withTimeout(promise, ms, label) {
14890
14946
  const ac = new AbortController();
14891
14947
  return Promise.race([
14892
14948
  promise.finally(() => ac.abort()),
14893
- delay(ms, void 0, { signal: ac.signal }).then(() => {
14949
+ delay2(ms, void 0, { signal: ac.signal }).then(() => {
14894
14950
  throw new Error(`${label} timed out after ${ms}ms`);
14895
14951
  })
14896
14952
  ]);
@@ -15223,6 +15279,7 @@ async function prepareAndSendTracyRecords(client, rawRecords, workingDir, option
15223
15279
  }
15224
15280
 
15225
15281
  // src/mcp/services/types.ts
15282
+ import os3 from "os";
15226
15283
  function detectIDE() {
15227
15284
  const env3 = process.env;
15228
15285
  if (env3["CURSOR_TRACE_ID"] || env3["CURSOR_SESSION_ID"]) return "cursor";
@@ -15243,16 +15300,41 @@ function createMcpLoginContext(trigger) {
15243
15300
  ide: detectIDE()
15244
15301
  };
15245
15302
  }
15246
- function buildLoginUrl(baseUrl, loginId, hostname, context) {
15303
+ function buildLoginUrl(baseUrl, loginId, machine, context) {
15247
15304
  const url = new URL(`${baseUrl}/${loginId}`);
15248
- url.searchParams.set("hostname", hostname);
15249
- url.searchParams.set("trigger", context.trigger);
15250
- url.searchParams.set("source", context.source);
15251
- if (context.ide) {
15252
- url.searchParams.set("ide", context.ide);
15305
+ url.searchParams.set("hostname", machine.hostname);
15306
+ if (machine.computerUser) {
15307
+ url.searchParams.set("computerUser", machine.computerUser);
15308
+ }
15309
+ if (machine.clientVersion) {
15310
+ url.searchParams.set("clientVersion", machine.clientVersion);
15311
+ }
15312
+ if (context) {
15313
+ url.searchParams.set("trigger", context.trigger);
15314
+ url.searchParams.set("source", context.source);
15315
+ if (context.ide) {
15316
+ url.searchParams.set("ide", context.ide);
15317
+ }
15253
15318
  }
15254
15319
  return url.toString();
15255
15320
  }
15321
+ function getComputerUser() {
15322
+ try {
15323
+ return os3.userInfo().username || void 0;
15324
+ } catch {
15325
+ return void 0;
15326
+ }
15327
+ }
15328
+ function getLoginMachineInfo() {
15329
+ return {
15330
+ hostname: os3.hostname(),
15331
+ computerUser: getComputerUser(),
15332
+ clientVersion: packageJson.version
15333
+ };
15334
+ }
15335
+ function buildLoginBrowserUrl(baseUrl, loginId, context) {
15336
+ return buildLoginUrl(baseUrl, loginId, getLoginMachineInfo(), context);
15337
+ }
15256
15338
 
15257
15339
  // src/commands/AuthManager.ts
15258
15340
  var debug12 = Debug11("mobbdev:auth");
@@ -15397,7 +15479,11 @@ var _AuthManager = class _AuthManager {
15397
15479
  publicKey: this.publicKey.export({ format: "pem", type: "pkcs1" }).toString()
15398
15480
  });
15399
15481
  const webLoginUrl = `${this.resolvedWebAppUrl}${loginPath || "/cli-login"}`;
15400
- const browserUrl = loginContext ? buildLoginUrl(webLoginUrl, this.loginId, os3.hostname(), loginContext) : `${webLoginUrl}/${this.loginId}?hostname=${os3.hostname()}`;
15482
+ const browserUrl = buildLoginBrowserUrl(
15483
+ webLoginUrl,
15484
+ this.loginId,
15485
+ loginContext
15486
+ );
15401
15487
  this.currentBrowserUrl = browserUrl;
15402
15488
  return browserUrl;
15403
15489
  } catch (error) {
@@ -16435,8 +16521,8 @@ if (typeof __filename !== "undefined") {
16435
16521
  }
16436
16522
  var costumeRequire = createRequire(moduleUrl);
16437
16523
  var getCheckmarxPath = () => {
16438
- const os17 = type();
16439
- const cxFileName = os17 === "Windows_NT" ? "cx.exe" : "cx";
16524
+ const os19 = type();
16525
+ const cxFileName = os19 === "Windows_NT" ? "cx.exe" : "cx";
16440
16526
  try {
16441
16527
  return costumeRequire.resolve(`.bin/${cxFileName}`);
16442
16528
  } catch (e) {
@@ -19721,7 +19807,7 @@ function createLogger(config2) {
19721
19807
 
19722
19808
  // src/features/claude_code/hook_logger.ts
19723
19809
  var DD_RUM_TOKEN = true ? "pubf59c0182545bfb4c299175119f1abf9b" : "";
19724
- var CLI_VERSION = true ? "1.4.23" : "unknown";
19810
+ var CLI_VERSION = true ? "1.4.26" : "unknown";
19725
19811
  var NAMESPACE = "mobbdev-claude-code-hook-logs";
19726
19812
  var claudeCodeVersion;
19727
19813
  function buildDdTags() {
@@ -21246,7 +21332,7 @@ var logDebug = (message, data) => logger2.log(message, "debug", data);
21246
21332
  var log = logger2.log.bind(logger2);
21247
21333
 
21248
21334
  // src/mcp/services/McpGQLClient.ts
21249
- import crypto2 from "crypto";
21335
+ import os9 from "os";
21250
21336
  init_client_generates();
21251
21337
  init_configs();
21252
21338
 
@@ -21628,85 +21714,20 @@ var McpGQLClient = class extends GQLClient {
21628
21714
  if (!userEmail) {
21629
21715
  throw new Error("User email not found");
21630
21716
  }
21631
- const shortEmailHash = crypto2.createHash("sha256").update(userEmail).digest("hex").slice(0, 8).toUpperCase();
21632
- const projectName = `MCP Scans ${shortEmailHash}`;
21633
- logDebug("[GraphQL] Calling getLastOrgAndNamedProject query", {
21634
- projectName
21635
- });
21636
- const orgAndProjectRes = await this._clientSdk.getLastOrgAndNamedProject({
21637
- email: userEmail,
21638
- projectName
21639
- });
21640
- logDebug("[GraphQL] getLastOrgAndNamedProject successful", {
21641
- result: orgAndProjectRes
21642
- });
21643
- if (!orgAndProjectRes.user?.[0]?.userOrganizationsAndUserOrganizationRoles?.[0]?.organization?.id) {
21717
+ const orgRes = await this._clientSdk.getLastOrg({ email: userEmail });
21718
+ const organizationId = orgRes.user?.[0]?.userOrganizationsAndUserOrganizationRoles?.[0]?.organization?.id;
21719
+ if (!organizationId) {
21644
21720
  throw new Error(
21645
- `The user with email:${userEmail} is not associated with any organization`
21721
+ `The user with email:${userEmail} is not associated with any organization`
21646
21722
  );
21647
21723
  }
21648
- const organization = orgAndProjectRes.user?.[0]?.userOrganizationsAndUserOrganizationRoles?.[0]?.organization;
21649
- const projectId = organization?.projects?.[0]?.id;
21650
- if (projectId) {
21651
- logDebug("[GraphQL] Found existing project", {
21652
- projectId,
21653
- projectName
21654
- });
21655
- return projectId;
21656
- }
21657
- logDebug("[GraphQL] Project not found, creating new project", {
21658
- organizationId: organization.id,
21659
- projectName
21660
- });
21661
- try {
21662
- const createdProject = await this._clientSdk.CreateProject({
21663
- organizationId: organization.id,
21664
- projectName
21665
- });
21666
- logDebug("[GraphQL] CreateProject successful", {
21667
- result: createdProject
21668
- });
21669
- return createdProject.createProject.projectId;
21670
- } catch (createError) {
21671
- const errorMessage3 = createError instanceof Error ? createError.message : String(createError);
21672
- const isConstraintViolation = errorMessage3.includes(
21673
- "duplicate key value violates unique constraint"
21674
- ) && errorMessage3.includes("project_name_organization_id_key");
21675
- if (isConstraintViolation) {
21676
- logDebug(
21677
- "[GraphQL] Project creation failed due to constraint violation, retrying fetch",
21678
- {
21679
- organizationId: organization.id,
21680
- projectName,
21681
- error: errorMessage3
21682
- }
21683
- );
21684
- const retryOrgAndProjectRes = await this._clientSdk.getLastOrgAndNamedProject({
21685
- email: userEmail,
21686
- projectName
21687
- });
21688
- const retryProjectId = retryOrgAndProjectRes.user?.[0]?.userOrganizationsAndUserOrganizationRoles?.[0]?.organization?.projects?.[0]?.id;
21689
- if (retryProjectId) {
21690
- logDebug(
21691
- "[GraphQL] Successfully found existing project after constraint violation",
21692
- {
21693
- projectId: retryProjectId,
21694
- projectName
21695
- }
21696
- );
21697
- return retryProjectId;
21698
- }
21699
- logError(
21700
- "[GraphQL] Failed to find project even after constraint violation retry",
21701
- {
21702
- organizationId: organization.id,
21703
- projectName,
21704
- retryResult: retryOrgAndProjectRes
21705
- }
21706
- );
21707
- }
21708
- throw createError;
21724
+ const mvsRes = await this._clientSdk.getMvsProject({ organizationId });
21725
+ const projectId = mvsRes.getMvsProject?.projectId;
21726
+ if (!projectId) {
21727
+ throw new Error("Failed to resolve the MVS project");
21709
21728
  }
21729
+ logDebug("[GraphQL] Resolved MVS project", { projectId });
21730
+ return projectId;
21710
21731
  } catch (e) {
21711
21732
  logError("[GraphQL] getProjectId failed", {
21712
21733
  error: e,
@@ -21803,6 +21824,26 @@ var McpGQLClient = class extends GQLClient {
21803
21824
  logDebug("[GraphQL] No auto-applied fixes to update status");
21804
21825
  }
21805
21826
  }
21827
+ /** Best-effort: a telemetry failure must never break a scan/fix, so errors are swallowed. */
21828
+ async logMvsEvent(params) {
21829
+ try {
21830
+ await this._clientSdk.LogMvsEvent({
21831
+ eventType: params.eventType,
21832
+ fixReportId: params.fixReportId ?? null,
21833
+ projectId: params.projectId ?? null,
21834
+ repoUrl: params.repoUrl ?? null,
21835
+ riskCount: params.riskCount ?? null,
21836
+ computerName: os9.hostname(),
21837
+ computerUser: getComputerUser() ?? null,
21838
+ clientVersion: packageJson.version
21839
+ });
21840
+ } catch (error) {
21841
+ logDebug("[GraphQL] logMvsEvent failed (ignored)", {
21842
+ eventType: params.eventType,
21843
+ error: error.message
21844
+ });
21845
+ }
21846
+ }
21806
21847
  async getMvsAutoFixSettings() {
21807
21848
  try {
21808
21849
  const envOverride = process.env["MVS_AUTO_FIX"];
@@ -22076,7 +22117,7 @@ async function createAuthenticatedMcpGQLClient({
22076
22117
  // src/mcp/services/McpUsageService/host.ts
22077
22118
  import { execSync as execSync2 } from "child_process";
22078
22119
  import fs15 from "fs";
22079
- import os9 from "os";
22120
+ import os10 from "os";
22080
22121
  import path25 from "path";
22081
22122
  var IDEs = ["cursor", "windsurf", "webstorm", "vscode", "claude"];
22082
22123
  var runCommand = (cmd) => {
@@ -22091,7 +22132,7 @@ var gitInfo = {
22091
22132
  email: runCommand("git config user.email")
22092
22133
  };
22093
22134
  var getClaudeWorkspacePaths = () => {
22094
- const home = os9.homedir();
22135
+ const home = os10.homedir();
22095
22136
  const claudeIdePath = path25.join(home, ".claude", "ide");
22096
22137
  const workspacePaths = [];
22097
22138
  if (!fs15.existsSync(claudeIdePath)) {
@@ -22120,7 +22161,7 @@ var getClaudeWorkspacePaths = () => {
22120
22161
  return workspacePaths;
22121
22162
  };
22122
22163
  var getMCPConfigPaths = (hostName) => {
22123
- const home = os9.homedir();
22164
+ const home = os10.homedir();
22124
22165
  const currentDir = process.env["WORKSPACE_FOLDER_PATHS"] || process.env["PWD"] || process.cwd();
22125
22166
  switch (hostName.toLowerCase()) {
22126
22167
  case "cursor":
@@ -22210,7 +22251,7 @@ var readMCPConfig = (hostName) => {
22210
22251
  };
22211
22252
  var getRunningProcesses = () => {
22212
22253
  try {
22213
- return os9.platform() === "win32" ? execSync2("tasklist", { encoding: "utf8" }) : execSync2("ps aux", { encoding: "utf8" });
22254
+ return os10.platform() === "win32" ? execSync2("tasklist", { encoding: "utf8" }) : execSync2("ps aux", { encoding: "utf8" });
22214
22255
  } catch {
22215
22256
  return "";
22216
22257
  }
@@ -22285,7 +22326,7 @@ var versionCommands = {
22285
22326
  }
22286
22327
  };
22287
22328
  var getProcessInfo = (pid) => {
22288
- const platform2 = os9.platform();
22329
+ const platform2 = os10.platform();
22289
22330
  try {
22290
22331
  if (platform2 === "linux" || platform2 === "darwin") {
22291
22332
  const output = execSync2(`ps -o pid=,ppid=,comm= -p ${pid}`, {
@@ -22404,7 +22445,7 @@ var getHostInfo = (additionalMcpList) => {
22404
22445
  const config2 = allConfigs[ide] || null;
22405
22446
  const ideName = ide.charAt(0).toUpperCase() + ide.slice(1) || "Unknown";
22406
22447
  let ideVersion = "Unknown";
22407
- const platform2 = os9.platform();
22448
+ const platform2 = os10.platform();
22408
22449
  const cmds = versionCommands[ideName]?.[platform2] ?? [];
22409
22450
  for (const cmd of cmds) {
22410
22451
  try {
@@ -22437,14 +22478,14 @@ var getHostInfo = (additionalMcpList) => {
22437
22478
 
22438
22479
  // src/mcp/services/McpUsageService/McpUsageService.ts
22439
22480
  import fetch6 from "node-fetch";
22440
- import os11 from "os";
22481
+ import os12 from "os";
22441
22482
  import { v4 as uuidv42, v5 as uuidv5 } from "uuid";
22442
22483
  init_configs();
22443
22484
 
22444
22485
  // src/mcp/services/McpUsageService/system.ts
22445
22486
  init_configs();
22446
22487
  import fs16 from "fs";
22447
- import os10 from "os";
22488
+ import os11 from "os";
22448
22489
  import path26 from "path";
22449
22490
  var MAX_DEPTH = 2;
22450
22491
  var patterns = ["mcp", "claude"];
@@ -22479,8 +22520,8 @@ var searchDir = async (dir, depth = 0) => {
22479
22520
  };
22480
22521
  var findSystemMCPConfigs = async () => {
22481
22522
  try {
22482
- const home = os10.homedir();
22483
- const platform2 = os10.platform();
22523
+ const home = os11.homedir();
22524
+ const platform2 = os11.platform();
22484
22525
  const knownDirs = platform2 === "win32" ? [
22485
22526
  path26.join(home, ".cursor"),
22486
22527
  path26.join(home, "Documents"),
@@ -22552,7 +22593,7 @@ var McpUsageService = class {
22552
22593
  generateHostId() {
22553
22594
  const stored = configStore.get(this.configKey);
22554
22595
  if (stored?.mcpHostId) return stored.mcpHostId;
22555
- const interfaces = os11.networkInterfaces();
22596
+ const interfaces = os12.networkInterfaces();
22556
22597
  const macs = [];
22557
22598
  for (const iface of Object.values(interfaces)) {
22558
22599
  if (!iface) continue;
@@ -22560,7 +22601,7 @@ var McpUsageService = class {
22560
22601
  if (net.mac && net.mac !== "00:00:00:00:00:00") macs.push(net.mac);
22561
22602
  }
22562
22603
  }
22563
- const macString = macs.length ? macs.sort().join(",") : `${os11.hostname()}-${uuidv42()}`;
22604
+ const macString = macs.length ? macs.sort().join(",") : `${os12.hostname()}-${uuidv42()}`;
22564
22605
  const hostId = uuidv5(macString, uuidv5.DNS);
22565
22606
  logDebug("[UsageService] Generated new host ID", { hostId });
22566
22607
  return hostId;
@@ -22583,7 +22624,7 @@ var McpUsageService = class {
22583
22624
  mcpHostId,
22584
22625
  organizationId,
22585
22626
  mcpVersion: packageJson.version,
22586
- mcpOsName: os11.platform(),
22627
+ mcpOsName: os12.platform(),
22587
22628
  mcps: JSON.stringify(mcps),
22588
22629
  status,
22589
22630
  userName: user.name,
@@ -24904,7 +24945,7 @@ For a complete security audit workflow, use the \`full-security-audit\` prompt.
24904
24945
 
24905
24946
  // src/mcp/services/McpDetectionService/CursorMcpDetectionService.ts
24906
24947
  import * as fs19 from "fs";
24907
- import * as os13 from "os";
24948
+ import * as os14 from "os";
24908
24949
  import * as path28 from "path";
24909
24950
 
24910
24951
  // src/mcp/services/McpDetectionService/BaseMcpDetectionService.ts
@@ -24915,11 +24956,11 @@ import * as path27 from "path";
24915
24956
 
24916
24957
  // src/mcp/services/McpDetectionService/McpDetectionServiceUtils.ts
24917
24958
  import * as fs17 from "fs";
24918
- import * as os12 from "os";
24959
+ import * as os13 from "os";
24919
24960
 
24920
24961
  // src/mcp/services/McpDetectionService/VscodeMcpDetectionService.ts
24921
24962
  import * as fs20 from "fs";
24922
- import * as os14 from "os";
24963
+ import * as os15 from "os";
24923
24964
  import * as path29 from "path";
24924
24965
 
24925
24966
  // src/mcp/tools/checkForNewAvailableFixes/CheckForNewAvailableFixesTool.ts
@@ -27625,6 +27666,7 @@ var PatchApplicationService = class {
27625
27666
  // src/mcp/services/ScanFiles.ts
27626
27667
  init_client_generates();
27627
27668
  init_GitService();
27669
+ import os16 from "os";
27628
27670
  init_configs();
27629
27671
 
27630
27672
  // src/mcp/services/FileOperations.ts
@@ -27898,7 +27940,12 @@ var executeSecurityScan = async ({
27898
27940
  isFullScan: !!isAllDetectionRulesScan,
27899
27941
  sha,
27900
27942
  scanContext,
27901
- fileCount
27943
+ fileCount,
27944
+ // MVS device attribution: a developer appears in the MVS Developers grid
27945
+ // from scanning alone (no fresh login needed).
27946
+ computerName: os16.hostname(),
27947
+ computerUser: getComputerUser(),
27948
+ clientVersion: packageJson.version
27902
27949
  };
27903
27950
  logInfo(`[${scanContext}] Submitting vulnerability report`);
27904
27951
  logDebug(`[${scanContext}] Submit vulnerability report variables`, {
@@ -29023,6 +29070,7 @@ var _ScanAndFixVulnerabilitiesService = class _ScanAndFixVulnerabilitiesService
29023
29070
  isExpired: this.storedFixReportId ? this.isFixReportIdExpired() : null
29024
29071
  });
29025
29072
  let fixReportId = this.storedFixReportId;
29073
+ let didScan = false;
29026
29074
  if (!fixReportId || isRescan || this.isFixReportIdExpired()) {
29027
29075
  logInfo("Scanning files");
29028
29076
  this.reset();
@@ -29034,6 +29082,7 @@ var _ScanAndFixVulnerabilitiesService = class _ScanAndFixVulnerabilitiesService
29034
29082
  scanContext: ScanContext.USER_REQUEST
29035
29083
  });
29036
29084
  fixReportId = scanResult.fixReportId;
29085
+ didScan = true;
29037
29086
  } else {
29038
29087
  logInfo("Using stored fixReportId");
29039
29088
  }
@@ -29046,6 +29095,23 @@ var _ScanAndFixVulnerabilitiesService = class _ScanAndFixVulnerabilitiesService
29046
29095
  limit: effectiveLimit
29047
29096
  });
29048
29097
  logInfo(`Found ${fixes.totalCount} fixes`);
29098
+ if (fixReportId && effectiveOffset === 0 && fixes.totalCount > 0) {
29099
+ if (didScan) {
29100
+ await this.gqlClient.logMvsEvent({
29101
+ eventType: "RISK_DETECTED",
29102
+ fixReportId,
29103
+ riskCount: fixes.totalCount
29104
+ });
29105
+ }
29106
+ await this.gqlClient.logMvsEvent({
29107
+ eventType: "FIXES_VIEWED",
29108
+ fixReportId,
29109
+ // Count of fixes shown, so the Event Log row mirrors Fixable Issues
29110
+ // Detected ("N issues"). Not summed into the Fixable Issues KPI,
29111
+ // which only counts RISK_DETECTED.
29112
+ riskCount: fixes.totalCount
29113
+ });
29114
+ }
29049
29115
  if (fixes.totalCount > 0) {
29050
29116
  this.storedFixReportId = fixReportId;
29051
29117
  this.fixReportIdTimestamp = Date.now();
@@ -29842,18 +29908,18 @@ async function getGrpcClient(port, csrf3) {
29842
29908
 
29843
29909
  // src/features/codeium_intellij/parse_intellij_logs.ts
29844
29910
  import fs27 from "fs";
29845
- import os15 from "os";
29911
+ import os17 from "os";
29846
29912
  import path35 from "path";
29847
29913
  function getLogsDir() {
29848
29914
  if (process.platform === "darwin") {
29849
- return path35.join(os15.homedir(), "Library/Logs/JetBrains");
29915
+ return path35.join(os17.homedir(), "Library/Logs/JetBrains");
29850
29916
  } else if (process.platform === "win32") {
29851
29917
  return path35.join(
29852
- process.env["LOCALAPPDATA"] || path35.join(os15.homedir(), "AppData/Local"),
29918
+ process.env["LOCALAPPDATA"] || path35.join(os17.homedir(), "AppData/Local"),
29853
29919
  "JetBrains"
29854
29920
  );
29855
29921
  } else {
29856
- return path35.join(os15.homedir(), ".cache/JetBrains");
29922
+ return path35.join(os17.homedir(), ".cache/JetBrains");
29857
29923
  }
29858
29924
  }
29859
29925
  function parseIdeLogDir(ideLogDir) {
@@ -30076,11 +30142,11 @@ function processChatStepCodeAction(step) {
30076
30142
 
30077
30143
  // src/features/codeium_intellij/install_hook.ts
30078
30144
  import fsPromises5 from "fs/promises";
30079
- import os16 from "os";
30145
+ import os18 from "os";
30080
30146
  import path36 from "path";
30081
30147
  import chalk14 from "chalk";
30082
30148
  function getCodeiumHooksPath() {
30083
- return path36.join(os16.homedir(), ".codeium", "hooks.json");
30149
+ return path36.join(os18.homedir(), ".codeium", "hooks.json");
30084
30150
  }
30085
30151
  async function readCodeiumHooks() {
30086
30152
  const hooksPath = getCodeiumHooksPath();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mobbdev",
3
- "version": "1.4.23",
3
+ "version": "1.4.26",
4
4
  "description": "Automated secure code remediation tool",
5
5
  "repository": "git+https://github.com/mobb-dev/bugsy.git",
6
6
  "main": "dist/index.mjs",