mobbdev 1.4.22 → 1.4.25
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/args/commands/upload_ai_blame.mjs +132 -28
- package/dist/index.mjs +285 -164
- package/package.json +1 -1
|
@@ -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();
|
|
@@ -4494,7 +4526,6 @@ var CliError = class extends Error {
|
|
|
4494
4526
|
|
|
4495
4527
|
// src/commands/AuthManager.ts
|
|
4496
4528
|
import crypto from "crypto";
|
|
4497
|
-
import os from "os";
|
|
4498
4529
|
import Debug10 from "debug";
|
|
4499
4530
|
import open from "open";
|
|
4500
4531
|
|
|
@@ -5441,6 +5472,48 @@ var languages = {
|
|
|
5441
5472
|
init_client_generates();
|
|
5442
5473
|
import { z as z11 } from "zod";
|
|
5443
5474
|
|
|
5475
|
+
// src/features/analysis/scm/shared/src/storedQuestionData/cpp/index.ts
|
|
5476
|
+
init_client_generates();
|
|
5477
|
+
|
|
5478
|
+
// src/features/analysis/scm/shared/src/storedQuestionData/cpp/commandInjection.ts
|
|
5479
|
+
var commandInjection = {
|
|
5480
|
+
isUnixShellCommandPart: {
|
|
5481
|
+
content: () => "Is the input data interpolated into a shell command (not the program name or shell structure)?",
|
|
5482
|
+
description: () => `\`system()\` / \`popen()\` hand the whole string to \`/bin/sh -c\`. Answer **yes** when the input is *data* placed into a fixed command, for example:
|
|
5483
|
+
|
|
5484
|
+
- \`sprintf(cmd, "grep %s file.txt", input); system(cmd);\`
|
|
5485
|
+
- \`sprintf(cmd, "ping -c 5 %s", input); system(cmd);\`
|
|
5486
|
+
|
|
5487
|
+
Answer **no** (the input is not plain data) when the input is:
|
|
5488
|
+
|
|
5489
|
+
1. The program/executable itself:
|
|
5490
|
+
- \`system(input);\`
|
|
5491
|
+
- \`sprintf(cmd, "%s -x", input);\`
|
|
5492
|
+
2. A command after a pipe or redirect:
|
|
5493
|
+
- \`sprintf(cmd, "cat file.txt | %s", input);\`
|
|
5494
|
+
3. A part of a non-Unix or cross-platform shell command.
|
|
5495
|
+
4. A part of embedded code in another language:
|
|
5496
|
+
- \`sprintf(cmd, "php -r \\"echo '%s';\\"", input);\`
|
|
5497
|
+
- \`sprintf(cmd, "awk '%s' file", input);\`
|
|
5498
|
+
5. A flag/option that controls a tool's behaviour:
|
|
5499
|
+
- \`sprintf(cmd, "git --upload-pack %s", input);\``,
|
|
5500
|
+
guidance: () => "If yes and the command can run without a shell, it is rewritten to a no-shell argument-vector call (`posix_spawn`); if it needs the shell, the tainted argument is escaped in place so the shell keeps working. If the answer is no (the input controls the program or shell structure), there is no safe automatic rewrite, so the fix is withheld and the sink is left for manual review."
|
|
5501
|
+
},
|
|
5502
|
+
executableLocationPath: {
|
|
5503
|
+
content: () => "What is the absolute path of the directory containing the executable?",
|
|
5504
|
+
description: () => `When \`system()\` is rewritten to an \`execv()\` argument-vector call, the program is run by its path with **no \`$PATH\` search**, so a relative program name (e.g. \`tail\`) cannot be resolved and a poisoned \`PATH\` cannot be used to run a look-alike binary.
|
|
5505
|
+
|
|
5506
|
+
Provide the absolute directory that contains the executable (e.g. \`/usr/bin\`); the fix prepends it to the bare program name to form an absolute path.`,
|
|
5507
|
+
guidance: () => "Only asked when the program name in the command has no `/`. A program that is already an absolute or relative path (contains `/`) is used as written."
|
|
5508
|
+
}
|
|
5509
|
+
};
|
|
5510
|
+
|
|
5511
|
+
// src/features/analysis/scm/shared/src/storedQuestionData/cpp/index.ts
|
|
5512
|
+
var vulnerabilities11 = {
|
|
5513
|
+
["CMDi" /* CmDi */]: commandInjection
|
|
5514
|
+
};
|
|
5515
|
+
var cpp_default = vulnerabilities11;
|
|
5516
|
+
|
|
5444
5517
|
// src/features/analysis/scm/shared/src/storedQuestionData/csharp/index.ts
|
|
5445
5518
|
init_client_generates();
|
|
5446
5519
|
|
|
@@ -5737,7 +5810,7 @@ var xxe = {
|
|
|
5737
5810
|
};
|
|
5738
5811
|
|
|
5739
5812
|
// src/features/analysis/scm/shared/src/storedQuestionData/csharp/index.ts
|
|
5740
|
-
var
|
|
5813
|
+
var vulnerabilities12 = {
|
|
5741
5814
|
["LOG_FORGING" /* LogForging */]: logForging,
|
|
5742
5815
|
["SSRF" /* Ssrf */]: ssrf2,
|
|
5743
5816
|
["XXE" /* Xxe */]: xxe,
|
|
@@ -5758,7 +5831,7 @@ var vulnerabilities11 = {
|
|
|
5758
5831
|
["SQL_Injection" /* SqlInjection */]: sqlInjection2,
|
|
5759
5832
|
["REQUEST_PARAMETERS_BOUND_VIA_INPUT" /* RequestParametersBoundViaInput */]: requestParametersBoundViaInput
|
|
5760
5833
|
};
|
|
5761
|
-
var csharp_default2 =
|
|
5834
|
+
var csharp_default2 = vulnerabilities12;
|
|
5762
5835
|
|
|
5763
5836
|
// src/features/analysis/scm/shared/src/storedQuestionData/go/index.ts
|
|
5764
5837
|
init_client_generates();
|
|
@@ -5791,18 +5864,18 @@ var websocketMissingOriginCheck = {
|
|
|
5791
5864
|
};
|
|
5792
5865
|
|
|
5793
5866
|
// src/features/analysis/scm/shared/src/storedQuestionData/go/index.ts
|
|
5794
|
-
var
|
|
5867
|
+
var vulnerabilities13 = {
|
|
5795
5868
|
["LOG_FORGING" /* LogForging */]: logForging2,
|
|
5796
5869
|
["MISSING_SSL_MINVERSION" /* MissingSslMinversion */]: missingSslMinversion,
|
|
5797
5870
|
["WEBSOCKET_MISSING_ORIGIN_CHECK" /* WebsocketMissingOriginCheck */]: websocketMissingOriginCheck
|
|
5798
5871
|
};
|
|
5799
|
-
var go_default2 =
|
|
5872
|
+
var go_default2 = vulnerabilities13;
|
|
5800
5873
|
|
|
5801
5874
|
// src/features/analysis/scm/shared/src/storedQuestionData/java/index.ts
|
|
5802
5875
|
init_client_generates();
|
|
5803
5876
|
|
|
5804
5877
|
// src/features/analysis/scm/shared/src/storedQuestionData/java/commandInjection.ts
|
|
5805
|
-
var
|
|
5878
|
+
var commandInjection2 = {
|
|
5806
5879
|
isUnixShellCommandPart: {
|
|
5807
5880
|
content: () => "Is the input part of Unix shell command?",
|
|
5808
5881
|
description: () => `For example:
|
|
@@ -6256,10 +6329,10 @@ var xxe2 = {
|
|
|
6256
6329
|
};
|
|
6257
6330
|
|
|
6258
6331
|
// src/features/analysis/scm/shared/src/storedQuestionData/java/index.ts
|
|
6259
|
-
var
|
|
6332
|
+
var vulnerabilities14 = {
|
|
6260
6333
|
["SQL_Injection" /* SqlInjection */]: sqlInjection3,
|
|
6261
6334
|
["CMDi_relative_path_command" /* CmDiRelativePathCommand */]: relativePathCommand,
|
|
6262
|
-
["CMDi" /* CmDi */]:
|
|
6335
|
+
["CMDi" /* CmDi */]: commandInjection2,
|
|
6263
6336
|
["CONFUSING_NAMING" /* ConfusingNaming */]: confusingNaming,
|
|
6264
6337
|
["ERROR_CONDTION_WITHOUT_ACTION" /* ErrorCondtionWithoutAction */]: errorConditionWithoutAction,
|
|
6265
6338
|
["XXE" /* Xxe */]: xxe2,
|
|
@@ -6284,7 +6357,7 @@ var vulnerabilities13 = {
|
|
|
6284
6357
|
["ERRONEOUS_STRING_COMPARE" /* ErroneousStringCompare */]: erroneousStringCompare,
|
|
6285
6358
|
["DUPLICATED_STRINGS" /* DuplicatedStrings */]: duplicatedStrings
|
|
6286
6359
|
};
|
|
6287
|
-
var java_default2 =
|
|
6360
|
+
var java_default2 = vulnerabilities14;
|
|
6288
6361
|
|
|
6289
6362
|
// src/features/analysis/scm/shared/src/storedQuestionData/js/index.ts
|
|
6290
6363
|
init_client_generates();
|
|
@@ -6299,7 +6372,7 @@ var csrf2 = {
|
|
|
6299
6372
|
};
|
|
6300
6373
|
|
|
6301
6374
|
// src/features/analysis/scm/shared/src/storedQuestionData/js/commandInjection.ts
|
|
6302
|
-
var
|
|
6375
|
+
var commandInjection3 = {
|
|
6303
6376
|
isCommandExecutable: {
|
|
6304
6377
|
content: () => "Commands can be intrinsically unsafe if they call out to other executables or run arbitary code",
|
|
6305
6378
|
description: () => `Does the command fall into one of the following categories:
|
|
@@ -6613,8 +6686,8 @@ var xss3 = {
|
|
|
6613
6686
|
};
|
|
6614
6687
|
|
|
6615
6688
|
// src/features/analysis/scm/shared/src/storedQuestionData/js/index.ts
|
|
6616
|
-
var
|
|
6617
|
-
["CMDi" /* CmDi */]:
|
|
6689
|
+
var vulnerabilities15 = {
|
|
6690
|
+
["CMDi" /* CmDi */]: commandInjection3,
|
|
6618
6691
|
["GRAPHQL_DEPTH_LIMIT" /* GraphqlDepthLimit */]: graphqlDepthLimit,
|
|
6619
6692
|
["INSECURE_RANDOMNESS" /* InsecureRandomness */]: insecureRandomness2,
|
|
6620
6693
|
["SSRF" /* Ssrf */]: ssrf4,
|
|
@@ -6636,7 +6709,7 @@ var vulnerabilities14 = {
|
|
|
6636
6709
|
["HARDCODED_DOMAIN_IN_HTML" /* HardcodedDomainInHtml */]: hardcodedDomainInHtml,
|
|
6637
6710
|
["CSRF" /* Csrf */]: csrf2
|
|
6638
6711
|
};
|
|
6639
|
-
var js_default =
|
|
6712
|
+
var js_default = vulnerabilities15;
|
|
6640
6713
|
|
|
6641
6714
|
// src/features/analysis/scm/shared/src/storedQuestionData/python/index.ts
|
|
6642
6715
|
init_client_generates();
|
|
@@ -6710,7 +6783,7 @@ var uncheckedLoopCondition3 = {
|
|
|
6710
6783
|
};
|
|
6711
6784
|
|
|
6712
6785
|
// src/features/analysis/scm/shared/src/storedQuestionData/python/index.ts
|
|
6713
|
-
var
|
|
6786
|
+
var vulnerabilities16 = {
|
|
6714
6787
|
["CSRF" /* Csrf */]: csrf2,
|
|
6715
6788
|
["LOG_FORGING" /* LogForging */]: logForging5,
|
|
6716
6789
|
["OPEN_REDIRECT" /* OpenRedirect */]: openRedirect3,
|
|
@@ -6719,7 +6792,7 @@ var vulnerabilities15 = {
|
|
|
6719
6792
|
["MISSING_ENCODING_FILE_OPEN" /* MissingEncodingFileOpen */]: missingEncoding,
|
|
6720
6793
|
["SSRF" /* Ssrf */]: ssrf5
|
|
6721
6794
|
};
|
|
6722
|
-
var python_default2 =
|
|
6795
|
+
var python_default2 = vulnerabilities16;
|
|
6723
6796
|
|
|
6724
6797
|
// src/features/analysis/scm/shared/src/storedQuestionData/xml/index.ts
|
|
6725
6798
|
init_client_generates();
|
|
@@ -6736,10 +6809,10 @@ A value too high will cause performance issues up to and including denial of ser
|
|
|
6736
6809
|
};
|
|
6737
6810
|
|
|
6738
6811
|
// src/features/analysis/scm/shared/src/storedQuestionData/xml/index.ts
|
|
6739
|
-
var
|
|
6812
|
+
var vulnerabilities17 = {
|
|
6740
6813
|
["WEAK_XML_SCHEMA_UNBOUNDED_OCCURRENCES" /* WeakXmlSchemaUnboundedOccurrences */]: unboundedOccurrences
|
|
6741
6814
|
};
|
|
6742
|
-
var xml_default2 =
|
|
6815
|
+
var xml_default2 = vulnerabilities17;
|
|
6743
6816
|
|
|
6744
6817
|
// src/features/analysis/scm/shared/src/storedQuestionData/yaml/index.ts
|
|
6745
6818
|
init_client_generates();
|
|
@@ -6772,12 +6845,12 @@ var writableFilesystemService = {
|
|
|
6772
6845
|
};
|
|
6773
6846
|
|
|
6774
6847
|
// src/features/analysis/scm/shared/src/storedQuestionData/yaml/index.ts
|
|
6775
|
-
var
|
|
6848
|
+
var vulnerabilities18 = {
|
|
6776
6849
|
["PORT_ALL_INTERFACES" /* PortAllInterfaces */]: portAllInterfaces,
|
|
6777
6850
|
["WRITABLE_FILESYSTEM_SERVICE" /* WritableFilesystemService */]: writableFilesystemService,
|
|
6778
6851
|
["NO_NEW_PRIVILEGES" /* NoNewPrivileges */]: noNewPrivileges
|
|
6779
6852
|
};
|
|
6780
|
-
var yaml_default =
|
|
6853
|
+
var yaml_default = vulnerabilities18;
|
|
6781
6854
|
|
|
6782
6855
|
// src/features/analysis/scm/shared/src/storedQuestionData/index.ts
|
|
6783
6856
|
var StoredQuestionDataItemZ = z11.object({
|
|
@@ -6792,6 +6865,7 @@ var languages2 = {
|
|
|
6792
6865
|
["CSharp" /* CSharp */]: csharp_default2,
|
|
6793
6866
|
["Python" /* Python */]: python_default2,
|
|
6794
6867
|
["Go" /* Go */]: go_default2,
|
|
6868
|
+
["Cpp" /* Cpp */]: cpp_default,
|
|
6795
6869
|
["YAML" /* Yaml */]: yaml_default
|
|
6796
6870
|
};
|
|
6797
6871
|
|
|
@@ -7842,16 +7916,42 @@ var URL_REFRESH_MS = 20 * 60 * 1e3;
|
|
|
7842
7916
|
var debug10 = Debug9("mobbdev:tracy-batch-upload");
|
|
7843
7917
|
|
|
7844
7918
|
// src/mcp/services/types.ts
|
|
7845
|
-
|
|
7919
|
+
import os from "os";
|
|
7920
|
+
function buildLoginUrl(baseUrl, loginId, machine, context) {
|
|
7846
7921
|
const url = new URL(`${baseUrl}/${loginId}`);
|
|
7847
|
-
url.searchParams.set("hostname", hostname);
|
|
7848
|
-
|
|
7849
|
-
|
|
7850
|
-
|
|
7851
|
-
|
|
7922
|
+
url.searchParams.set("hostname", machine.hostname);
|
|
7923
|
+
if (machine.computerUser) {
|
|
7924
|
+
url.searchParams.set("computerUser", machine.computerUser);
|
|
7925
|
+
}
|
|
7926
|
+
if (machine.clientVersion) {
|
|
7927
|
+
url.searchParams.set("clientVersion", machine.clientVersion);
|
|
7928
|
+
}
|
|
7929
|
+
if (context) {
|
|
7930
|
+
url.searchParams.set("trigger", context.trigger);
|
|
7931
|
+
url.searchParams.set("source", context.source);
|
|
7932
|
+
if (context.ide) {
|
|
7933
|
+
url.searchParams.set("ide", context.ide);
|
|
7934
|
+
}
|
|
7852
7935
|
}
|
|
7853
7936
|
return url.toString();
|
|
7854
7937
|
}
|
|
7938
|
+
function getComputerUser() {
|
|
7939
|
+
try {
|
|
7940
|
+
return os.userInfo().username || void 0;
|
|
7941
|
+
} catch {
|
|
7942
|
+
return void 0;
|
|
7943
|
+
}
|
|
7944
|
+
}
|
|
7945
|
+
function getLoginMachineInfo() {
|
|
7946
|
+
return {
|
|
7947
|
+
hostname: os.hostname(),
|
|
7948
|
+
computerUser: getComputerUser(),
|
|
7949
|
+
clientVersion: packageJson.version
|
|
7950
|
+
};
|
|
7951
|
+
}
|
|
7952
|
+
function buildLoginBrowserUrl(baseUrl, loginId, context) {
|
|
7953
|
+
return buildLoginUrl(baseUrl, loginId, getLoginMachineInfo(), context);
|
|
7954
|
+
}
|
|
7855
7955
|
|
|
7856
7956
|
// src/utils/ConfigStoreService.ts
|
|
7857
7957
|
import Configstore from "configstore";
|
|
@@ -8014,7 +8114,11 @@ var _AuthManager = class _AuthManager {
|
|
|
8014
8114
|
publicKey: this.publicKey.export({ format: "pem", type: "pkcs1" }).toString()
|
|
8015
8115
|
});
|
|
8016
8116
|
const webLoginUrl = `${this.resolvedWebAppUrl}${loginPath || "/cli-login"}`;
|
|
8017
|
-
const browserUrl =
|
|
8117
|
+
const browserUrl = buildLoginBrowserUrl(
|
|
8118
|
+
webLoginUrl,
|
|
8119
|
+
this.loginId,
|
|
8120
|
+
loginContext
|
|
8121
|
+
);
|
|
8018
8122
|
this.currentBrowserUrl = browserUrl;
|
|
8019
8123
|
return browserUrl;
|
|
8020
8124
|
} 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();
|
|
@@ -5233,6 +5265,48 @@ var languages = {
|
|
|
5233
5265
|
init_client_generates();
|
|
5234
5266
|
import { z as z4 } from "zod";
|
|
5235
5267
|
|
|
5268
|
+
// src/features/analysis/scm/shared/src/storedQuestionData/cpp/index.ts
|
|
5269
|
+
init_client_generates();
|
|
5270
|
+
|
|
5271
|
+
// src/features/analysis/scm/shared/src/storedQuestionData/cpp/commandInjection.ts
|
|
5272
|
+
var commandInjection = {
|
|
5273
|
+
isUnixShellCommandPart: {
|
|
5274
|
+
content: () => "Is the input data interpolated into a shell command (not the program name or shell structure)?",
|
|
5275
|
+
description: () => `\`system()\` / \`popen()\` hand the whole string to \`/bin/sh -c\`. Answer **yes** when the input is *data* placed into a fixed command, for example:
|
|
5276
|
+
|
|
5277
|
+
- \`sprintf(cmd, "grep %s file.txt", input); system(cmd);\`
|
|
5278
|
+
- \`sprintf(cmd, "ping -c 5 %s", input); system(cmd);\`
|
|
5279
|
+
|
|
5280
|
+
Answer **no** (the input is not plain data) when the input is:
|
|
5281
|
+
|
|
5282
|
+
1. The program/executable itself:
|
|
5283
|
+
- \`system(input);\`
|
|
5284
|
+
- \`sprintf(cmd, "%s -x", input);\`
|
|
5285
|
+
2. A command after a pipe or redirect:
|
|
5286
|
+
- \`sprintf(cmd, "cat file.txt | %s", input);\`
|
|
5287
|
+
3. A part of a non-Unix or cross-platform shell command.
|
|
5288
|
+
4. A part of embedded code in another language:
|
|
5289
|
+
- \`sprintf(cmd, "php -r \\"echo '%s';\\"", input);\`
|
|
5290
|
+
- \`sprintf(cmd, "awk '%s' file", input);\`
|
|
5291
|
+
5. A flag/option that controls a tool's behaviour:
|
|
5292
|
+
- \`sprintf(cmd, "git --upload-pack %s", input);\``,
|
|
5293
|
+
guidance: () => "If yes and the command can run without a shell, it is rewritten to a no-shell argument-vector call (`posix_spawn`); if it needs the shell, the tainted argument is escaped in place so the shell keeps working. If the answer is no (the input controls the program or shell structure), there is no safe automatic rewrite, so the fix is withheld and the sink is left for manual review."
|
|
5294
|
+
},
|
|
5295
|
+
executableLocationPath: {
|
|
5296
|
+
content: () => "What is the absolute path of the directory containing the executable?",
|
|
5297
|
+
description: () => `When \`system()\` is rewritten to an \`execv()\` argument-vector call, the program is run by its path with **no \`$PATH\` search**, so a relative program name (e.g. \`tail\`) cannot be resolved and a poisoned \`PATH\` cannot be used to run a look-alike binary.
|
|
5298
|
+
|
|
5299
|
+
Provide the absolute directory that contains the executable (e.g. \`/usr/bin\`); the fix prepends it to the bare program name to form an absolute path.`,
|
|
5300
|
+
guidance: () => "Only asked when the program name in the command has no `/`. A program that is already an absolute or relative path (contains `/`) is used as written."
|
|
5301
|
+
}
|
|
5302
|
+
};
|
|
5303
|
+
|
|
5304
|
+
// src/features/analysis/scm/shared/src/storedQuestionData/cpp/index.ts
|
|
5305
|
+
var vulnerabilities11 = {
|
|
5306
|
+
["CMDi" /* CmDi */]: commandInjection
|
|
5307
|
+
};
|
|
5308
|
+
var cpp_default = vulnerabilities11;
|
|
5309
|
+
|
|
5236
5310
|
// src/features/analysis/scm/shared/src/storedQuestionData/csharp/index.ts
|
|
5237
5311
|
init_client_generates();
|
|
5238
5312
|
|
|
@@ -5529,7 +5603,7 @@ var xxe = {
|
|
|
5529
5603
|
};
|
|
5530
5604
|
|
|
5531
5605
|
// src/features/analysis/scm/shared/src/storedQuestionData/csharp/index.ts
|
|
5532
|
-
var
|
|
5606
|
+
var vulnerabilities12 = {
|
|
5533
5607
|
["LOG_FORGING" /* LogForging */]: logForging,
|
|
5534
5608
|
["SSRF" /* Ssrf */]: ssrf2,
|
|
5535
5609
|
["XXE" /* Xxe */]: xxe,
|
|
@@ -5550,7 +5624,7 @@ var vulnerabilities11 = {
|
|
|
5550
5624
|
["SQL_Injection" /* SqlInjection */]: sqlInjection2,
|
|
5551
5625
|
["REQUEST_PARAMETERS_BOUND_VIA_INPUT" /* RequestParametersBoundViaInput */]: requestParametersBoundViaInput
|
|
5552
5626
|
};
|
|
5553
|
-
var csharp_default2 =
|
|
5627
|
+
var csharp_default2 = vulnerabilities12;
|
|
5554
5628
|
|
|
5555
5629
|
// src/features/analysis/scm/shared/src/storedQuestionData/go/index.ts
|
|
5556
5630
|
init_client_generates();
|
|
@@ -5583,18 +5657,18 @@ var websocketMissingOriginCheck = {
|
|
|
5583
5657
|
};
|
|
5584
5658
|
|
|
5585
5659
|
// src/features/analysis/scm/shared/src/storedQuestionData/go/index.ts
|
|
5586
|
-
var
|
|
5660
|
+
var vulnerabilities13 = {
|
|
5587
5661
|
["LOG_FORGING" /* LogForging */]: logForging2,
|
|
5588
5662
|
["MISSING_SSL_MINVERSION" /* MissingSslMinversion */]: missingSslMinversion,
|
|
5589
5663
|
["WEBSOCKET_MISSING_ORIGIN_CHECK" /* WebsocketMissingOriginCheck */]: websocketMissingOriginCheck
|
|
5590
5664
|
};
|
|
5591
|
-
var go_default2 =
|
|
5665
|
+
var go_default2 = vulnerabilities13;
|
|
5592
5666
|
|
|
5593
5667
|
// src/features/analysis/scm/shared/src/storedQuestionData/java/index.ts
|
|
5594
5668
|
init_client_generates();
|
|
5595
5669
|
|
|
5596
5670
|
// src/features/analysis/scm/shared/src/storedQuestionData/java/commandInjection.ts
|
|
5597
|
-
var
|
|
5671
|
+
var commandInjection2 = {
|
|
5598
5672
|
isUnixShellCommandPart: {
|
|
5599
5673
|
content: () => "Is the input part of Unix shell command?",
|
|
5600
5674
|
description: () => `For example:
|
|
@@ -6048,10 +6122,10 @@ var xxe2 = {
|
|
|
6048
6122
|
};
|
|
6049
6123
|
|
|
6050
6124
|
// src/features/analysis/scm/shared/src/storedQuestionData/java/index.ts
|
|
6051
|
-
var
|
|
6125
|
+
var vulnerabilities14 = {
|
|
6052
6126
|
["SQL_Injection" /* SqlInjection */]: sqlInjection3,
|
|
6053
6127
|
["CMDi_relative_path_command" /* CmDiRelativePathCommand */]: relativePathCommand,
|
|
6054
|
-
["CMDi" /* CmDi */]:
|
|
6128
|
+
["CMDi" /* CmDi */]: commandInjection2,
|
|
6055
6129
|
["CONFUSING_NAMING" /* ConfusingNaming */]: confusingNaming,
|
|
6056
6130
|
["ERROR_CONDTION_WITHOUT_ACTION" /* ErrorCondtionWithoutAction */]: errorConditionWithoutAction,
|
|
6057
6131
|
["XXE" /* Xxe */]: xxe2,
|
|
@@ -6076,7 +6150,7 @@ var vulnerabilities13 = {
|
|
|
6076
6150
|
["ERRONEOUS_STRING_COMPARE" /* ErroneousStringCompare */]: erroneousStringCompare,
|
|
6077
6151
|
["DUPLICATED_STRINGS" /* DuplicatedStrings */]: duplicatedStrings
|
|
6078
6152
|
};
|
|
6079
|
-
var java_default2 =
|
|
6153
|
+
var java_default2 = vulnerabilities14;
|
|
6080
6154
|
|
|
6081
6155
|
// src/features/analysis/scm/shared/src/storedQuestionData/js/index.ts
|
|
6082
6156
|
init_client_generates();
|
|
@@ -6091,7 +6165,7 @@ var csrf2 = {
|
|
|
6091
6165
|
};
|
|
6092
6166
|
|
|
6093
6167
|
// src/features/analysis/scm/shared/src/storedQuestionData/js/commandInjection.ts
|
|
6094
|
-
var
|
|
6168
|
+
var commandInjection3 = {
|
|
6095
6169
|
isCommandExecutable: {
|
|
6096
6170
|
content: () => "Commands can be intrinsically unsafe if they call out to other executables or run arbitary code",
|
|
6097
6171
|
description: () => `Does the command fall into one of the following categories:
|
|
@@ -6405,8 +6479,8 @@ var xss3 = {
|
|
|
6405
6479
|
};
|
|
6406
6480
|
|
|
6407
6481
|
// src/features/analysis/scm/shared/src/storedQuestionData/js/index.ts
|
|
6408
|
-
var
|
|
6409
|
-
["CMDi" /* CmDi */]:
|
|
6482
|
+
var vulnerabilities15 = {
|
|
6483
|
+
["CMDi" /* CmDi */]: commandInjection3,
|
|
6410
6484
|
["GRAPHQL_DEPTH_LIMIT" /* GraphqlDepthLimit */]: graphqlDepthLimit,
|
|
6411
6485
|
["INSECURE_RANDOMNESS" /* InsecureRandomness */]: insecureRandomness2,
|
|
6412
6486
|
["SSRF" /* Ssrf */]: ssrf4,
|
|
@@ -6428,7 +6502,7 @@ var vulnerabilities14 = {
|
|
|
6428
6502
|
["HARDCODED_DOMAIN_IN_HTML" /* HardcodedDomainInHtml */]: hardcodedDomainInHtml,
|
|
6429
6503
|
["CSRF" /* Csrf */]: csrf2
|
|
6430
6504
|
};
|
|
6431
|
-
var js_default =
|
|
6505
|
+
var js_default = vulnerabilities15;
|
|
6432
6506
|
|
|
6433
6507
|
// src/features/analysis/scm/shared/src/storedQuestionData/python/index.ts
|
|
6434
6508
|
init_client_generates();
|
|
@@ -6502,7 +6576,7 @@ var uncheckedLoopCondition3 = {
|
|
|
6502
6576
|
};
|
|
6503
6577
|
|
|
6504
6578
|
// src/features/analysis/scm/shared/src/storedQuestionData/python/index.ts
|
|
6505
|
-
var
|
|
6579
|
+
var vulnerabilities16 = {
|
|
6506
6580
|
["CSRF" /* Csrf */]: csrf2,
|
|
6507
6581
|
["LOG_FORGING" /* LogForging */]: logForging5,
|
|
6508
6582
|
["OPEN_REDIRECT" /* OpenRedirect */]: openRedirect3,
|
|
@@ -6511,7 +6585,7 @@ var vulnerabilities15 = {
|
|
|
6511
6585
|
["MISSING_ENCODING_FILE_OPEN" /* MissingEncodingFileOpen */]: missingEncoding,
|
|
6512
6586
|
["SSRF" /* Ssrf */]: ssrf5
|
|
6513
6587
|
};
|
|
6514
|
-
var python_default2 =
|
|
6588
|
+
var python_default2 = vulnerabilities16;
|
|
6515
6589
|
|
|
6516
6590
|
// src/features/analysis/scm/shared/src/storedQuestionData/xml/index.ts
|
|
6517
6591
|
init_client_generates();
|
|
@@ -6528,10 +6602,10 @@ A value too high will cause performance issues up to and including denial of ser
|
|
|
6528
6602
|
};
|
|
6529
6603
|
|
|
6530
6604
|
// src/features/analysis/scm/shared/src/storedQuestionData/xml/index.ts
|
|
6531
|
-
var
|
|
6605
|
+
var vulnerabilities17 = {
|
|
6532
6606
|
["WEAK_XML_SCHEMA_UNBOUNDED_OCCURRENCES" /* WeakXmlSchemaUnboundedOccurrences */]: unboundedOccurrences
|
|
6533
6607
|
};
|
|
6534
|
-
var xml_default2 =
|
|
6608
|
+
var xml_default2 = vulnerabilities17;
|
|
6535
6609
|
|
|
6536
6610
|
// src/features/analysis/scm/shared/src/storedQuestionData/yaml/index.ts
|
|
6537
6611
|
init_client_generates();
|
|
@@ -6564,12 +6638,12 @@ var writableFilesystemService = {
|
|
|
6564
6638
|
};
|
|
6565
6639
|
|
|
6566
6640
|
// src/features/analysis/scm/shared/src/storedQuestionData/yaml/index.ts
|
|
6567
|
-
var
|
|
6641
|
+
var vulnerabilities18 = {
|
|
6568
6642
|
["PORT_ALL_INTERFACES" /* PortAllInterfaces */]: portAllInterfaces,
|
|
6569
6643
|
["WRITABLE_FILESYSTEM_SERVICE" /* WritableFilesystemService */]: writableFilesystemService,
|
|
6570
6644
|
["NO_NEW_PRIVILEGES" /* NoNewPrivileges */]: noNewPrivileges
|
|
6571
6645
|
};
|
|
6572
|
-
var yaml_default =
|
|
6646
|
+
var yaml_default = vulnerabilities18;
|
|
6573
6647
|
|
|
6574
6648
|
// src/features/analysis/scm/shared/src/storedQuestionData/index.ts
|
|
6575
6649
|
var StoredQuestionDataItemZ = z4.object({
|
|
@@ -6584,6 +6658,7 @@ var languages2 = {
|
|
|
6584
6658
|
["CSharp" /* CSharp */]: csharp_default2,
|
|
6585
6659
|
["Python" /* Python */]: python_default2,
|
|
6586
6660
|
["Go" /* Go */]: go_default2,
|
|
6661
|
+
["Cpp" /* Cpp */]: cpp_default,
|
|
6587
6662
|
["YAML" /* Yaml */]: yaml_default
|
|
6588
6663
|
};
|
|
6589
6664
|
var storedQuestionData_default = languages2;
|
|
@@ -9598,48 +9673,65 @@ function getGithubSdk(params = {}) {
|
|
|
9598
9673
|
return false;
|
|
9599
9674
|
}
|
|
9600
9675
|
},
|
|
9601
|
-
async
|
|
9676
|
+
async listAuthenticatedUserReposPage(params2) {
|
|
9677
|
+
const {
|
|
9678
|
+
sort = { field: "updated", order: "desc" },
|
|
9679
|
+
perPage = 10,
|
|
9680
|
+
page = 1
|
|
9681
|
+
} = params2;
|
|
9682
|
+
const githubSort = sort.field === "name" ? "full_name" : sort.field === "created" ? "created" : "updated";
|
|
9602
9683
|
try {
|
|
9603
|
-
const
|
|
9604
|
-
|
|
9605
|
-
|
|
9606
|
-
|
|
9607
|
-
|
|
9608
|
-
|
|
9609
|
-
|
|
9610
|
-
|
|
9611
|
-
|
|
9612
|
-
|
|
9613
|
-
|
|
9614
|
-
|
|
9615
|
-
|
|
9616
|
-
|
|
9617
|
-
|
|
9618
|
-
|
|
9619
|
-
|
|
9620
|
-
|
|
9621
|
-
});
|
|
9622
|
-
}
|
|
9623
|
-
hasMore = githubRepos.data.length >= perPage;
|
|
9624
|
-
page++;
|
|
9625
|
-
}
|
|
9626
|
-
return allRepos;
|
|
9684
|
+
const githubRepos = await octokit.request(GET_USER_REPOS, {
|
|
9685
|
+
sort: githubSort,
|
|
9686
|
+
direction: sort.order,
|
|
9687
|
+
per_page: perPage,
|
|
9688
|
+
page
|
|
9689
|
+
});
|
|
9690
|
+
const items = githubRepos.data.map((repo) => ({
|
|
9691
|
+
repoName: repo.name,
|
|
9692
|
+
repoUrl: repo.html_url,
|
|
9693
|
+
repoOwner: repo.owner.login,
|
|
9694
|
+
repoLanguages: repo.language ? [repo.language] : [],
|
|
9695
|
+
repoIsPublic: !repo.private,
|
|
9696
|
+
repoUpdatedAt: repo.updated_at
|
|
9697
|
+
}));
|
|
9698
|
+
return {
|
|
9699
|
+
items,
|
|
9700
|
+
hasMore: githubRepos.data.length >= perPage
|
|
9701
|
+
};
|
|
9627
9702
|
} catch (e) {
|
|
9628
9703
|
if (e instanceof RequestError && e.status === 401) {
|
|
9629
9704
|
console.warn(
|
|
9630
9705
|
"GitHub API returned 401 Unauthorized when listing repos - token may be expired or lack repo scope"
|
|
9631
9706
|
);
|
|
9632
|
-
return [];
|
|
9707
|
+
return { items: [], hasMore: false };
|
|
9633
9708
|
}
|
|
9634
9709
|
if (e instanceof RequestError && e.status === 404) {
|
|
9635
9710
|
console.warn(
|
|
9636
9711
|
"GitHub API returned 404 Not Found when listing repos - user may not exist"
|
|
9637
9712
|
);
|
|
9638
|
-
return [];
|
|
9713
|
+
return { items: [], hasMore: false };
|
|
9639
9714
|
}
|
|
9640
9715
|
throw e;
|
|
9641
9716
|
}
|
|
9642
9717
|
},
|
|
9718
|
+
async getGithubRepoList() {
|
|
9719
|
+
const allRepos = [];
|
|
9720
|
+
let page = 1;
|
|
9721
|
+
const perPage = 100;
|
|
9722
|
+
let hasMore = true;
|
|
9723
|
+
while (hasMore) {
|
|
9724
|
+
const pageResult = await this.listAuthenticatedUserReposPage({
|
|
9725
|
+
sort: { field: "updated", order: "desc" },
|
|
9726
|
+
perPage,
|
|
9727
|
+
page
|
|
9728
|
+
});
|
|
9729
|
+
allRepos.push(...pageResult.items);
|
|
9730
|
+
hasMore = pageResult.hasMore;
|
|
9731
|
+
page++;
|
|
9732
|
+
}
|
|
9733
|
+
return allRepos;
|
|
9734
|
+
},
|
|
9643
9735
|
async getGithubRepoDefaultBranch(repoUrl) {
|
|
9644
9736
|
const { owner, repo } = parseGithubOwnerAndRepo(repoUrl);
|
|
9645
9737
|
const repos = await octokit.rest.repos.get({ repo, owner });
|
|
@@ -10699,23 +10791,25 @@ var GithubSCMLib = class extends SCMLib {
|
|
|
10699
10791
|
});
|
|
10700
10792
|
}
|
|
10701
10793
|
/**
|
|
10702
|
-
* Override searchRepos
|
|
10703
|
-
*
|
|
10704
|
-
*
|
|
10705
|
-
*
|
|
10706
|
-
* is requested, we fall back to fetching all repos and sorting in-memory.
|
|
10794
|
+
* Override searchRepos for efficient server-side pagination.
|
|
10795
|
+
* - With scmOrg: GitHub Search API (`org:…`)
|
|
10796
|
+
* - Without scmOrg: paginated `GET /user/repos`
|
|
10797
|
+
* - Name sort: in-memory over full list
|
|
10707
10798
|
*/
|
|
10708
10799
|
async searchRepos(params) {
|
|
10709
10800
|
this._validateAccessToken();
|
|
10710
10801
|
const sort = params.sort || { field: "updated", order: "desc" };
|
|
10711
|
-
if (
|
|
10802
|
+
if (sort.field === "name") {
|
|
10712
10803
|
return this.searchReposInMemory(params);
|
|
10713
10804
|
}
|
|
10805
|
+
if (!params.scmOrg) {
|
|
10806
|
+
return this.searchReposWithUserReposApi(params);
|
|
10807
|
+
}
|
|
10714
10808
|
return this.searchReposWithApi(params);
|
|
10715
10809
|
}
|
|
10716
10810
|
/**
|
|
10717
10811
|
* Search repos by fetching all and sorting/paginating in-memory.
|
|
10718
|
-
* Used when name sorting is requested
|
|
10812
|
+
* Used only when name sorting is requested.
|
|
10719
10813
|
*/
|
|
10720
10814
|
async searchReposInMemory(params) {
|
|
10721
10815
|
const repos = await this.getRepoList(params.scmOrg);
|
|
@@ -10743,6 +10837,24 @@ var GithubSCMLib = class extends SCMLib {
|
|
|
10743
10837
|
hasMore: nextOffset < sortedRepos.length
|
|
10744
10838
|
};
|
|
10745
10839
|
}
|
|
10840
|
+
/**
|
|
10841
|
+
* Paginated repo list for authenticated user when no GitHub org is configured.
|
|
10842
|
+
*/
|
|
10843
|
+
async searchReposWithUserReposApi(params) {
|
|
10844
|
+
const page = parseCursorSafe(params.cursor, 1);
|
|
10845
|
+
const perPage = params.limit || 10;
|
|
10846
|
+
const sort = params.sort || { field: "updated", order: "desc" };
|
|
10847
|
+
const pageResult = await this.githubSdk.listAuthenticatedUserReposPage({
|
|
10848
|
+
sort,
|
|
10849
|
+
perPage,
|
|
10850
|
+
page
|
|
10851
|
+
});
|
|
10852
|
+
return {
|
|
10853
|
+
results: pageResult.items,
|
|
10854
|
+
nextCursor: pageResult.hasMore ? String(page + 1) : void 0,
|
|
10855
|
+
hasMore: pageResult.hasMore
|
|
10856
|
+
};
|
|
10857
|
+
}
|
|
10746
10858
|
/**
|
|
10747
10859
|
* Search repos using GitHub Search API for efficient server-side pagination.
|
|
10748
10860
|
* Only supports date-based sorting (updated/created).
|
|
@@ -13124,7 +13236,6 @@ import { z as z31 } from "zod";
|
|
|
13124
13236
|
|
|
13125
13237
|
// src/commands/AuthManager.ts
|
|
13126
13238
|
import crypto from "crypto";
|
|
13127
|
-
import os3 from "os";
|
|
13128
13239
|
import Debug11 from "debug";
|
|
13129
13240
|
import open from "open";
|
|
13130
13241
|
|
|
@@ -15143,6 +15254,7 @@ async function prepareAndSendTracyRecords(client, rawRecords, workingDir, option
|
|
|
15143
15254
|
}
|
|
15144
15255
|
|
|
15145
15256
|
// src/mcp/services/types.ts
|
|
15257
|
+
import os3 from "os";
|
|
15146
15258
|
function detectIDE() {
|
|
15147
15259
|
const env3 = process.env;
|
|
15148
15260
|
if (env3["CURSOR_TRACE_ID"] || env3["CURSOR_SESSION_ID"]) return "cursor";
|
|
@@ -15163,16 +15275,41 @@ function createMcpLoginContext(trigger) {
|
|
|
15163
15275
|
ide: detectIDE()
|
|
15164
15276
|
};
|
|
15165
15277
|
}
|
|
15166
|
-
function buildLoginUrl(baseUrl, loginId,
|
|
15278
|
+
function buildLoginUrl(baseUrl, loginId, machine, context) {
|
|
15167
15279
|
const url = new URL(`${baseUrl}/${loginId}`);
|
|
15168
|
-
url.searchParams.set("hostname", hostname);
|
|
15169
|
-
|
|
15170
|
-
|
|
15171
|
-
|
|
15172
|
-
|
|
15280
|
+
url.searchParams.set("hostname", machine.hostname);
|
|
15281
|
+
if (machine.computerUser) {
|
|
15282
|
+
url.searchParams.set("computerUser", machine.computerUser);
|
|
15283
|
+
}
|
|
15284
|
+
if (machine.clientVersion) {
|
|
15285
|
+
url.searchParams.set("clientVersion", machine.clientVersion);
|
|
15286
|
+
}
|
|
15287
|
+
if (context) {
|
|
15288
|
+
url.searchParams.set("trigger", context.trigger);
|
|
15289
|
+
url.searchParams.set("source", context.source);
|
|
15290
|
+
if (context.ide) {
|
|
15291
|
+
url.searchParams.set("ide", context.ide);
|
|
15292
|
+
}
|
|
15173
15293
|
}
|
|
15174
15294
|
return url.toString();
|
|
15175
15295
|
}
|
|
15296
|
+
function getComputerUser() {
|
|
15297
|
+
try {
|
|
15298
|
+
return os3.userInfo().username || void 0;
|
|
15299
|
+
} catch {
|
|
15300
|
+
return void 0;
|
|
15301
|
+
}
|
|
15302
|
+
}
|
|
15303
|
+
function getLoginMachineInfo() {
|
|
15304
|
+
return {
|
|
15305
|
+
hostname: os3.hostname(),
|
|
15306
|
+
computerUser: getComputerUser(),
|
|
15307
|
+
clientVersion: packageJson.version
|
|
15308
|
+
};
|
|
15309
|
+
}
|
|
15310
|
+
function buildLoginBrowserUrl(baseUrl, loginId, context) {
|
|
15311
|
+
return buildLoginUrl(baseUrl, loginId, getLoginMachineInfo(), context);
|
|
15312
|
+
}
|
|
15176
15313
|
|
|
15177
15314
|
// src/commands/AuthManager.ts
|
|
15178
15315
|
var debug12 = Debug11("mobbdev:auth");
|
|
@@ -15317,7 +15454,11 @@ var _AuthManager = class _AuthManager {
|
|
|
15317
15454
|
publicKey: this.publicKey.export({ format: "pem", type: "pkcs1" }).toString()
|
|
15318
15455
|
});
|
|
15319
15456
|
const webLoginUrl = `${this.resolvedWebAppUrl}${loginPath || "/cli-login"}`;
|
|
15320
|
-
const browserUrl =
|
|
15457
|
+
const browserUrl = buildLoginBrowserUrl(
|
|
15458
|
+
webLoginUrl,
|
|
15459
|
+
this.loginId,
|
|
15460
|
+
loginContext
|
|
15461
|
+
);
|
|
15321
15462
|
this.currentBrowserUrl = browserUrl;
|
|
15322
15463
|
return browserUrl;
|
|
15323
15464
|
} catch (error) {
|
|
@@ -16355,8 +16496,8 @@ if (typeof __filename !== "undefined") {
|
|
|
16355
16496
|
}
|
|
16356
16497
|
var costumeRequire = createRequire(moduleUrl);
|
|
16357
16498
|
var getCheckmarxPath = () => {
|
|
16358
|
-
const
|
|
16359
|
-
const cxFileName =
|
|
16499
|
+
const os19 = type();
|
|
16500
|
+
const cxFileName = os19 === "Windows_NT" ? "cx.exe" : "cx";
|
|
16360
16501
|
try {
|
|
16361
16502
|
return costumeRequire.resolve(`.bin/${cxFileName}`);
|
|
16362
16503
|
} catch (e) {
|
|
@@ -19641,7 +19782,7 @@ function createLogger(config2) {
|
|
|
19641
19782
|
|
|
19642
19783
|
// src/features/claude_code/hook_logger.ts
|
|
19643
19784
|
var DD_RUM_TOKEN = true ? "pubf59c0182545bfb4c299175119f1abf9b" : "";
|
|
19644
|
-
var CLI_VERSION = true ? "1.4.
|
|
19785
|
+
var CLI_VERSION = true ? "1.4.25" : "unknown";
|
|
19645
19786
|
var NAMESPACE = "mobbdev-claude-code-hook-logs";
|
|
19646
19787
|
var claudeCodeVersion;
|
|
19647
19788
|
function buildDdTags() {
|
|
@@ -21166,7 +21307,7 @@ var logDebug = (message, data) => logger2.log(message, "debug", data);
|
|
|
21166
21307
|
var log = logger2.log.bind(logger2);
|
|
21167
21308
|
|
|
21168
21309
|
// src/mcp/services/McpGQLClient.ts
|
|
21169
|
-
import
|
|
21310
|
+
import os9 from "os";
|
|
21170
21311
|
init_client_generates();
|
|
21171
21312
|
init_configs();
|
|
21172
21313
|
|
|
@@ -21548,85 +21689,20 @@ var McpGQLClient = class extends GQLClient {
|
|
|
21548
21689
|
if (!userEmail) {
|
|
21549
21690
|
throw new Error("User email not found");
|
|
21550
21691
|
}
|
|
21551
|
-
const
|
|
21552
|
-
const
|
|
21553
|
-
|
|
21554
|
-
projectName
|
|
21555
|
-
});
|
|
21556
|
-
const orgAndProjectRes = await this._clientSdk.getLastOrgAndNamedProject({
|
|
21557
|
-
email: userEmail,
|
|
21558
|
-
projectName
|
|
21559
|
-
});
|
|
21560
|
-
logDebug("[GraphQL] getLastOrgAndNamedProject successful", {
|
|
21561
|
-
result: orgAndProjectRes
|
|
21562
|
-
});
|
|
21563
|
-
if (!orgAndProjectRes.user?.[0]?.userOrganizationsAndUserOrganizationRoles?.[0]?.organization?.id) {
|
|
21692
|
+
const orgRes = await this._clientSdk.getLastOrg({ email: userEmail });
|
|
21693
|
+
const organizationId = orgRes.user?.[0]?.userOrganizationsAndUserOrganizationRoles?.[0]?.organization?.id;
|
|
21694
|
+
if (!organizationId) {
|
|
21564
21695
|
throw new Error(
|
|
21565
|
-
`The user with email:${userEmail}
|
|
21696
|
+
`The user with email:${userEmail} is not associated with any organization`
|
|
21566
21697
|
);
|
|
21567
21698
|
}
|
|
21568
|
-
const
|
|
21569
|
-
const projectId =
|
|
21570
|
-
if (projectId) {
|
|
21571
|
-
|
|
21572
|
-
projectId,
|
|
21573
|
-
projectName
|
|
21574
|
-
});
|
|
21575
|
-
return projectId;
|
|
21576
|
-
}
|
|
21577
|
-
logDebug("[GraphQL] Project not found, creating new project", {
|
|
21578
|
-
organizationId: organization.id,
|
|
21579
|
-
projectName
|
|
21580
|
-
});
|
|
21581
|
-
try {
|
|
21582
|
-
const createdProject = await this._clientSdk.CreateProject({
|
|
21583
|
-
organizationId: organization.id,
|
|
21584
|
-
projectName
|
|
21585
|
-
});
|
|
21586
|
-
logDebug("[GraphQL] CreateProject successful", {
|
|
21587
|
-
result: createdProject
|
|
21588
|
-
});
|
|
21589
|
-
return createdProject.createProject.projectId;
|
|
21590
|
-
} catch (createError) {
|
|
21591
|
-
const errorMessage3 = createError instanceof Error ? createError.message : String(createError);
|
|
21592
|
-
const isConstraintViolation = errorMessage3.includes(
|
|
21593
|
-
"duplicate key value violates unique constraint"
|
|
21594
|
-
) && errorMessage3.includes("project_name_organization_id_key");
|
|
21595
|
-
if (isConstraintViolation) {
|
|
21596
|
-
logDebug(
|
|
21597
|
-
"[GraphQL] Project creation failed due to constraint violation, retrying fetch",
|
|
21598
|
-
{
|
|
21599
|
-
organizationId: organization.id,
|
|
21600
|
-
projectName,
|
|
21601
|
-
error: errorMessage3
|
|
21602
|
-
}
|
|
21603
|
-
);
|
|
21604
|
-
const retryOrgAndProjectRes = await this._clientSdk.getLastOrgAndNamedProject({
|
|
21605
|
-
email: userEmail,
|
|
21606
|
-
projectName
|
|
21607
|
-
});
|
|
21608
|
-
const retryProjectId = retryOrgAndProjectRes.user?.[0]?.userOrganizationsAndUserOrganizationRoles?.[0]?.organization?.projects?.[0]?.id;
|
|
21609
|
-
if (retryProjectId) {
|
|
21610
|
-
logDebug(
|
|
21611
|
-
"[GraphQL] Successfully found existing project after constraint violation",
|
|
21612
|
-
{
|
|
21613
|
-
projectId: retryProjectId,
|
|
21614
|
-
projectName
|
|
21615
|
-
}
|
|
21616
|
-
);
|
|
21617
|
-
return retryProjectId;
|
|
21618
|
-
}
|
|
21619
|
-
logError(
|
|
21620
|
-
"[GraphQL] Failed to find project even after constraint violation retry",
|
|
21621
|
-
{
|
|
21622
|
-
organizationId: organization.id,
|
|
21623
|
-
projectName,
|
|
21624
|
-
retryResult: retryOrgAndProjectRes
|
|
21625
|
-
}
|
|
21626
|
-
);
|
|
21627
|
-
}
|
|
21628
|
-
throw createError;
|
|
21699
|
+
const mvsRes = await this._clientSdk.getMvsProject({ organizationId });
|
|
21700
|
+
const projectId = mvsRes.getMvsProject?.projectId;
|
|
21701
|
+
if (!projectId) {
|
|
21702
|
+
throw new Error("Failed to resolve the MVS project");
|
|
21629
21703
|
}
|
|
21704
|
+
logDebug("[GraphQL] Resolved MVS project", { projectId });
|
|
21705
|
+
return projectId;
|
|
21630
21706
|
} catch (e) {
|
|
21631
21707
|
logError("[GraphQL] getProjectId failed", {
|
|
21632
21708
|
error: e,
|
|
@@ -21723,6 +21799,26 @@ var McpGQLClient = class extends GQLClient {
|
|
|
21723
21799
|
logDebug("[GraphQL] No auto-applied fixes to update status");
|
|
21724
21800
|
}
|
|
21725
21801
|
}
|
|
21802
|
+
/** Best-effort: a telemetry failure must never break a scan/fix, so errors are swallowed. */
|
|
21803
|
+
async logMvsEvent(params) {
|
|
21804
|
+
try {
|
|
21805
|
+
await this._clientSdk.LogMvsEvent({
|
|
21806
|
+
eventType: params.eventType,
|
|
21807
|
+
fixReportId: params.fixReportId ?? null,
|
|
21808
|
+
projectId: params.projectId ?? null,
|
|
21809
|
+
repoUrl: params.repoUrl ?? null,
|
|
21810
|
+
riskCount: params.riskCount ?? null,
|
|
21811
|
+
computerName: os9.hostname(),
|
|
21812
|
+
computerUser: getComputerUser() ?? null,
|
|
21813
|
+
clientVersion: packageJson.version
|
|
21814
|
+
});
|
|
21815
|
+
} catch (error) {
|
|
21816
|
+
logDebug("[GraphQL] logMvsEvent failed (ignored)", {
|
|
21817
|
+
eventType: params.eventType,
|
|
21818
|
+
error: error.message
|
|
21819
|
+
});
|
|
21820
|
+
}
|
|
21821
|
+
}
|
|
21726
21822
|
async getMvsAutoFixSettings() {
|
|
21727
21823
|
try {
|
|
21728
21824
|
const envOverride = process.env["MVS_AUTO_FIX"];
|
|
@@ -21996,7 +22092,7 @@ async function createAuthenticatedMcpGQLClient({
|
|
|
21996
22092
|
// src/mcp/services/McpUsageService/host.ts
|
|
21997
22093
|
import { execSync as execSync2 } from "child_process";
|
|
21998
22094
|
import fs15 from "fs";
|
|
21999
|
-
import
|
|
22095
|
+
import os10 from "os";
|
|
22000
22096
|
import path25 from "path";
|
|
22001
22097
|
var IDEs = ["cursor", "windsurf", "webstorm", "vscode", "claude"];
|
|
22002
22098
|
var runCommand = (cmd) => {
|
|
@@ -22011,7 +22107,7 @@ var gitInfo = {
|
|
|
22011
22107
|
email: runCommand("git config user.email")
|
|
22012
22108
|
};
|
|
22013
22109
|
var getClaudeWorkspacePaths = () => {
|
|
22014
|
-
const home =
|
|
22110
|
+
const home = os10.homedir();
|
|
22015
22111
|
const claudeIdePath = path25.join(home, ".claude", "ide");
|
|
22016
22112
|
const workspacePaths = [];
|
|
22017
22113
|
if (!fs15.existsSync(claudeIdePath)) {
|
|
@@ -22040,7 +22136,7 @@ var getClaudeWorkspacePaths = () => {
|
|
|
22040
22136
|
return workspacePaths;
|
|
22041
22137
|
};
|
|
22042
22138
|
var getMCPConfigPaths = (hostName) => {
|
|
22043
|
-
const home =
|
|
22139
|
+
const home = os10.homedir();
|
|
22044
22140
|
const currentDir = process.env["WORKSPACE_FOLDER_PATHS"] || process.env["PWD"] || process.cwd();
|
|
22045
22141
|
switch (hostName.toLowerCase()) {
|
|
22046
22142
|
case "cursor":
|
|
@@ -22130,7 +22226,7 @@ var readMCPConfig = (hostName) => {
|
|
|
22130
22226
|
};
|
|
22131
22227
|
var getRunningProcesses = () => {
|
|
22132
22228
|
try {
|
|
22133
|
-
return
|
|
22229
|
+
return os10.platform() === "win32" ? execSync2("tasklist", { encoding: "utf8" }) : execSync2("ps aux", { encoding: "utf8" });
|
|
22134
22230
|
} catch {
|
|
22135
22231
|
return "";
|
|
22136
22232
|
}
|
|
@@ -22205,7 +22301,7 @@ var versionCommands = {
|
|
|
22205
22301
|
}
|
|
22206
22302
|
};
|
|
22207
22303
|
var getProcessInfo = (pid) => {
|
|
22208
|
-
const platform2 =
|
|
22304
|
+
const platform2 = os10.platform();
|
|
22209
22305
|
try {
|
|
22210
22306
|
if (platform2 === "linux" || platform2 === "darwin") {
|
|
22211
22307
|
const output = execSync2(`ps -o pid=,ppid=,comm= -p ${pid}`, {
|
|
@@ -22324,7 +22420,7 @@ var getHostInfo = (additionalMcpList) => {
|
|
|
22324
22420
|
const config2 = allConfigs[ide] || null;
|
|
22325
22421
|
const ideName = ide.charAt(0).toUpperCase() + ide.slice(1) || "Unknown";
|
|
22326
22422
|
let ideVersion = "Unknown";
|
|
22327
|
-
const platform2 =
|
|
22423
|
+
const platform2 = os10.platform();
|
|
22328
22424
|
const cmds = versionCommands[ideName]?.[platform2] ?? [];
|
|
22329
22425
|
for (const cmd of cmds) {
|
|
22330
22426
|
try {
|
|
@@ -22357,14 +22453,14 @@ var getHostInfo = (additionalMcpList) => {
|
|
|
22357
22453
|
|
|
22358
22454
|
// src/mcp/services/McpUsageService/McpUsageService.ts
|
|
22359
22455
|
import fetch6 from "node-fetch";
|
|
22360
|
-
import
|
|
22456
|
+
import os12 from "os";
|
|
22361
22457
|
import { v4 as uuidv42, v5 as uuidv5 } from "uuid";
|
|
22362
22458
|
init_configs();
|
|
22363
22459
|
|
|
22364
22460
|
// src/mcp/services/McpUsageService/system.ts
|
|
22365
22461
|
init_configs();
|
|
22366
22462
|
import fs16 from "fs";
|
|
22367
|
-
import
|
|
22463
|
+
import os11 from "os";
|
|
22368
22464
|
import path26 from "path";
|
|
22369
22465
|
var MAX_DEPTH = 2;
|
|
22370
22466
|
var patterns = ["mcp", "claude"];
|
|
@@ -22399,8 +22495,8 @@ var searchDir = async (dir, depth = 0) => {
|
|
|
22399
22495
|
};
|
|
22400
22496
|
var findSystemMCPConfigs = async () => {
|
|
22401
22497
|
try {
|
|
22402
|
-
const home =
|
|
22403
|
-
const platform2 =
|
|
22498
|
+
const home = os11.homedir();
|
|
22499
|
+
const platform2 = os11.platform();
|
|
22404
22500
|
const knownDirs = platform2 === "win32" ? [
|
|
22405
22501
|
path26.join(home, ".cursor"),
|
|
22406
22502
|
path26.join(home, "Documents"),
|
|
@@ -22472,7 +22568,7 @@ var McpUsageService = class {
|
|
|
22472
22568
|
generateHostId() {
|
|
22473
22569
|
const stored = configStore.get(this.configKey);
|
|
22474
22570
|
if (stored?.mcpHostId) return stored.mcpHostId;
|
|
22475
|
-
const interfaces =
|
|
22571
|
+
const interfaces = os12.networkInterfaces();
|
|
22476
22572
|
const macs = [];
|
|
22477
22573
|
for (const iface of Object.values(interfaces)) {
|
|
22478
22574
|
if (!iface) continue;
|
|
@@ -22480,7 +22576,7 @@ var McpUsageService = class {
|
|
|
22480
22576
|
if (net.mac && net.mac !== "00:00:00:00:00:00") macs.push(net.mac);
|
|
22481
22577
|
}
|
|
22482
22578
|
}
|
|
22483
|
-
const macString = macs.length ? macs.sort().join(",") : `${
|
|
22579
|
+
const macString = macs.length ? macs.sort().join(",") : `${os12.hostname()}-${uuidv42()}`;
|
|
22484
22580
|
const hostId = uuidv5(macString, uuidv5.DNS);
|
|
22485
22581
|
logDebug("[UsageService] Generated new host ID", { hostId });
|
|
22486
22582
|
return hostId;
|
|
@@ -22503,7 +22599,7 @@ var McpUsageService = class {
|
|
|
22503
22599
|
mcpHostId,
|
|
22504
22600
|
organizationId,
|
|
22505
22601
|
mcpVersion: packageJson.version,
|
|
22506
|
-
mcpOsName:
|
|
22602
|
+
mcpOsName: os12.platform(),
|
|
22507
22603
|
mcps: JSON.stringify(mcps),
|
|
22508
22604
|
status,
|
|
22509
22605
|
userName: user.name,
|
|
@@ -24824,7 +24920,7 @@ For a complete security audit workflow, use the \`full-security-audit\` prompt.
|
|
|
24824
24920
|
|
|
24825
24921
|
// src/mcp/services/McpDetectionService/CursorMcpDetectionService.ts
|
|
24826
24922
|
import * as fs19 from "fs";
|
|
24827
|
-
import * as
|
|
24923
|
+
import * as os14 from "os";
|
|
24828
24924
|
import * as path28 from "path";
|
|
24829
24925
|
|
|
24830
24926
|
// src/mcp/services/McpDetectionService/BaseMcpDetectionService.ts
|
|
@@ -24835,11 +24931,11 @@ import * as path27 from "path";
|
|
|
24835
24931
|
|
|
24836
24932
|
// src/mcp/services/McpDetectionService/McpDetectionServiceUtils.ts
|
|
24837
24933
|
import * as fs17 from "fs";
|
|
24838
|
-
import * as
|
|
24934
|
+
import * as os13 from "os";
|
|
24839
24935
|
|
|
24840
24936
|
// src/mcp/services/McpDetectionService/VscodeMcpDetectionService.ts
|
|
24841
24937
|
import * as fs20 from "fs";
|
|
24842
|
-
import * as
|
|
24938
|
+
import * as os15 from "os";
|
|
24843
24939
|
import * as path29 from "path";
|
|
24844
24940
|
|
|
24845
24941
|
// src/mcp/tools/checkForNewAvailableFixes/CheckForNewAvailableFixesTool.ts
|
|
@@ -27545,6 +27641,7 @@ var PatchApplicationService = class {
|
|
|
27545
27641
|
// src/mcp/services/ScanFiles.ts
|
|
27546
27642
|
init_client_generates();
|
|
27547
27643
|
init_GitService();
|
|
27644
|
+
import os16 from "os";
|
|
27548
27645
|
init_configs();
|
|
27549
27646
|
|
|
27550
27647
|
// src/mcp/services/FileOperations.ts
|
|
@@ -27818,7 +27915,12 @@ var executeSecurityScan = async ({
|
|
|
27818
27915
|
isFullScan: !!isAllDetectionRulesScan,
|
|
27819
27916
|
sha,
|
|
27820
27917
|
scanContext,
|
|
27821
|
-
fileCount
|
|
27918
|
+
fileCount,
|
|
27919
|
+
// MVS device attribution: a developer appears in the MVS Developers grid
|
|
27920
|
+
// from scanning alone (no fresh login needed).
|
|
27921
|
+
computerName: os16.hostname(),
|
|
27922
|
+
computerUser: getComputerUser(),
|
|
27923
|
+
clientVersion: packageJson.version
|
|
27822
27924
|
};
|
|
27823
27925
|
logInfo(`[${scanContext}] Submitting vulnerability report`);
|
|
27824
27926
|
logDebug(`[${scanContext}] Submit vulnerability report variables`, {
|
|
@@ -28943,6 +29045,7 @@ var _ScanAndFixVulnerabilitiesService = class _ScanAndFixVulnerabilitiesService
|
|
|
28943
29045
|
isExpired: this.storedFixReportId ? this.isFixReportIdExpired() : null
|
|
28944
29046
|
});
|
|
28945
29047
|
let fixReportId = this.storedFixReportId;
|
|
29048
|
+
let didScan = false;
|
|
28946
29049
|
if (!fixReportId || isRescan || this.isFixReportIdExpired()) {
|
|
28947
29050
|
logInfo("Scanning files");
|
|
28948
29051
|
this.reset();
|
|
@@ -28954,6 +29057,7 @@ var _ScanAndFixVulnerabilitiesService = class _ScanAndFixVulnerabilitiesService
|
|
|
28954
29057
|
scanContext: ScanContext.USER_REQUEST
|
|
28955
29058
|
});
|
|
28956
29059
|
fixReportId = scanResult.fixReportId;
|
|
29060
|
+
didScan = true;
|
|
28957
29061
|
} else {
|
|
28958
29062
|
logInfo("Using stored fixReportId");
|
|
28959
29063
|
}
|
|
@@ -28966,6 +29070,23 @@ var _ScanAndFixVulnerabilitiesService = class _ScanAndFixVulnerabilitiesService
|
|
|
28966
29070
|
limit: effectiveLimit
|
|
28967
29071
|
});
|
|
28968
29072
|
logInfo(`Found ${fixes.totalCount} fixes`);
|
|
29073
|
+
if (fixReportId && effectiveOffset === 0 && fixes.totalCount > 0) {
|
|
29074
|
+
if (didScan) {
|
|
29075
|
+
await this.gqlClient.logMvsEvent({
|
|
29076
|
+
eventType: "RISK_DETECTED",
|
|
29077
|
+
fixReportId,
|
|
29078
|
+
riskCount: fixes.totalCount
|
|
29079
|
+
});
|
|
29080
|
+
}
|
|
29081
|
+
await this.gqlClient.logMvsEvent({
|
|
29082
|
+
eventType: "FIXES_VIEWED",
|
|
29083
|
+
fixReportId,
|
|
29084
|
+
// Count of fixes shown, so the Event Log row mirrors Fixable Issues
|
|
29085
|
+
// Detected ("N issues"). Not summed into the Fixable Issues KPI,
|
|
29086
|
+
// which only counts RISK_DETECTED.
|
|
29087
|
+
riskCount: fixes.totalCount
|
|
29088
|
+
});
|
|
29089
|
+
}
|
|
28969
29090
|
if (fixes.totalCount > 0) {
|
|
28970
29091
|
this.storedFixReportId = fixReportId;
|
|
28971
29092
|
this.fixReportIdTimestamp = Date.now();
|
|
@@ -29762,18 +29883,18 @@ async function getGrpcClient(port, csrf3) {
|
|
|
29762
29883
|
|
|
29763
29884
|
// src/features/codeium_intellij/parse_intellij_logs.ts
|
|
29764
29885
|
import fs27 from "fs";
|
|
29765
|
-
import
|
|
29886
|
+
import os17 from "os";
|
|
29766
29887
|
import path35 from "path";
|
|
29767
29888
|
function getLogsDir() {
|
|
29768
29889
|
if (process.platform === "darwin") {
|
|
29769
|
-
return path35.join(
|
|
29890
|
+
return path35.join(os17.homedir(), "Library/Logs/JetBrains");
|
|
29770
29891
|
} else if (process.platform === "win32") {
|
|
29771
29892
|
return path35.join(
|
|
29772
|
-
process.env["LOCALAPPDATA"] || path35.join(
|
|
29893
|
+
process.env["LOCALAPPDATA"] || path35.join(os17.homedir(), "AppData/Local"),
|
|
29773
29894
|
"JetBrains"
|
|
29774
29895
|
);
|
|
29775
29896
|
} else {
|
|
29776
|
-
return path35.join(
|
|
29897
|
+
return path35.join(os17.homedir(), ".cache/JetBrains");
|
|
29777
29898
|
}
|
|
29778
29899
|
}
|
|
29779
29900
|
function parseIdeLogDir(ideLogDir) {
|
|
@@ -29996,11 +30117,11 @@ function processChatStepCodeAction(step) {
|
|
|
29996
30117
|
|
|
29997
30118
|
// src/features/codeium_intellij/install_hook.ts
|
|
29998
30119
|
import fsPromises5 from "fs/promises";
|
|
29999
|
-
import
|
|
30120
|
+
import os18 from "os";
|
|
30000
30121
|
import path36 from "path";
|
|
30001
30122
|
import chalk14 from "chalk";
|
|
30002
30123
|
function getCodeiumHooksPath() {
|
|
30003
|
-
return path36.join(
|
|
30124
|
+
return path36.join(os18.homedir(), ".codeium", "hooks.json");
|
|
30004
30125
|
}
|
|
30005
30126
|
async function readCodeiumHooks() {
|
|
30006
30127
|
const hooksPath = getCodeiumHooksPath();
|