mobbdev 1.3.5 → 1.4.0
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.d.mts +32 -32
- package/dist/args/commands/upload_ai_blame.mjs +49 -6
- package/dist/index.mjs +1725 -270
- package/package.json +4 -1
|
@@ -56,32 +56,22 @@ declare const PromptItemZ: z.ZodObject<{
|
|
|
56
56
|
name: string;
|
|
57
57
|
parameters: string;
|
|
58
58
|
result: string;
|
|
59
|
-
accepted?: boolean | undefined;
|
|
60
59
|
rawArguments?: string | undefined;
|
|
60
|
+
accepted?: boolean | undefined;
|
|
61
61
|
mcpServer?: string | undefined;
|
|
62
62
|
mcpToolName?: string | undefined;
|
|
63
63
|
}, {
|
|
64
64
|
name: string;
|
|
65
65
|
parameters: string;
|
|
66
66
|
result: string;
|
|
67
|
-
accepted?: boolean | undefined;
|
|
68
67
|
rawArguments?: string | undefined;
|
|
68
|
+
accepted?: boolean | undefined;
|
|
69
69
|
mcpServer?: string | undefined;
|
|
70
70
|
mcpToolName?: string | undefined;
|
|
71
71
|
}>>;
|
|
72
72
|
}, "strip", z.ZodTypeAny, {
|
|
73
73
|
type: "USER_PROMPT" | "AI_RESPONSE" | "TOOL_EXECUTION" | "AI_THINKING" | "MCP_TOOL_CALL";
|
|
74
|
-
tool?: {
|
|
75
|
-
name: string;
|
|
76
|
-
parameters: string;
|
|
77
|
-
result: string;
|
|
78
|
-
accepted?: boolean | undefined;
|
|
79
|
-
rawArguments?: string | undefined;
|
|
80
|
-
mcpServer?: string | undefined;
|
|
81
|
-
mcpToolName?: string | undefined;
|
|
82
|
-
} | undefined;
|
|
83
74
|
date?: Date | undefined;
|
|
84
|
-
text?: string | undefined;
|
|
85
75
|
attachedFiles?: {
|
|
86
76
|
relativePath: string;
|
|
87
77
|
startLine?: number | undefined;
|
|
@@ -90,19 +80,19 @@ declare const PromptItemZ: z.ZodObject<{
|
|
|
90
80
|
inputCount: number;
|
|
91
81
|
outputCount: number;
|
|
92
82
|
} | undefined;
|
|
93
|
-
|
|
94
|
-
type: "USER_PROMPT" | "AI_RESPONSE" | "TOOL_EXECUTION" | "AI_THINKING" | "MCP_TOOL_CALL";
|
|
83
|
+
text?: string | undefined;
|
|
95
84
|
tool?: {
|
|
96
85
|
name: string;
|
|
97
86
|
parameters: string;
|
|
98
87
|
result: string;
|
|
99
|
-
accepted?: boolean | undefined;
|
|
100
88
|
rawArguments?: string | undefined;
|
|
89
|
+
accepted?: boolean | undefined;
|
|
101
90
|
mcpServer?: string | undefined;
|
|
102
91
|
mcpToolName?: string | undefined;
|
|
103
92
|
} | undefined;
|
|
93
|
+
}, {
|
|
94
|
+
type: "USER_PROMPT" | "AI_RESPONSE" | "TOOL_EXECUTION" | "AI_THINKING" | "MCP_TOOL_CALL";
|
|
104
95
|
date?: Date | undefined;
|
|
105
|
-
text?: string | undefined;
|
|
106
96
|
attachedFiles?: {
|
|
107
97
|
relativePath: string;
|
|
108
98
|
startLine?: number | undefined;
|
|
@@ -111,6 +101,16 @@ declare const PromptItemZ: z.ZodObject<{
|
|
|
111
101
|
inputCount: number;
|
|
112
102
|
outputCount: number;
|
|
113
103
|
} | undefined;
|
|
104
|
+
text?: string | undefined;
|
|
105
|
+
tool?: {
|
|
106
|
+
name: string;
|
|
107
|
+
parameters: string;
|
|
108
|
+
result: string;
|
|
109
|
+
rawArguments?: string | undefined;
|
|
110
|
+
accepted?: boolean | undefined;
|
|
111
|
+
mcpServer?: string | undefined;
|
|
112
|
+
mcpToolName?: string | undefined;
|
|
113
|
+
} | undefined;
|
|
114
114
|
}>;
|
|
115
115
|
type PromptItem = z.infer<typeof PromptItemZ>;
|
|
116
116
|
declare const PromptItemArrayZ: z.ZodArray<z.ZodObject<{
|
|
@@ -149,32 +149,22 @@ declare const PromptItemArrayZ: z.ZodArray<z.ZodObject<{
|
|
|
149
149
|
name: string;
|
|
150
150
|
parameters: string;
|
|
151
151
|
result: string;
|
|
152
|
-
accepted?: boolean | undefined;
|
|
153
152
|
rawArguments?: string | undefined;
|
|
153
|
+
accepted?: boolean | undefined;
|
|
154
154
|
mcpServer?: string | undefined;
|
|
155
155
|
mcpToolName?: string | undefined;
|
|
156
156
|
}, {
|
|
157
157
|
name: string;
|
|
158
158
|
parameters: string;
|
|
159
159
|
result: string;
|
|
160
|
-
accepted?: boolean | undefined;
|
|
161
160
|
rawArguments?: string | undefined;
|
|
161
|
+
accepted?: boolean | undefined;
|
|
162
162
|
mcpServer?: string | undefined;
|
|
163
163
|
mcpToolName?: string | undefined;
|
|
164
164
|
}>>;
|
|
165
165
|
}, "strip", z.ZodTypeAny, {
|
|
166
166
|
type: "USER_PROMPT" | "AI_RESPONSE" | "TOOL_EXECUTION" | "AI_THINKING" | "MCP_TOOL_CALL";
|
|
167
|
-
tool?: {
|
|
168
|
-
name: string;
|
|
169
|
-
parameters: string;
|
|
170
|
-
result: string;
|
|
171
|
-
accepted?: boolean | undefined;
|
|
172
|
-
rawArguments?: string | undefined;
|
|
173
|
-
mcpServer?: string | undefined;
|
|
174
|
-
mcpToolName?: string | undefined;
|
|
175
|
-
} | undefined;
|
|
176
167
|
date?: Date | undefined;
|
|
177
|
-
text?: string | undefined;
|
|
178
168
|
attachedFiles?: {
|
|
179
169
|
relativePath: string;
|
|
180
170
|
startLine?: number | undefined;
|
|
@@ -183,19 +173,19 @@ declare const PromptItemArrayZ: z.ZodArray<z.ZodObject<{
|
|
|
183
173
|
inputCount: number;
|
|
184
174
|
outputCount: number;
|
|
185
175
|
} | undefined;
|
|
186
|
-
|
|
187
|
-
type: "USER_PROMPT" | "AI_RESPONSE" | "TOOL_EXECUTION" | "AI_THINKING" | "MCP_TOOL_CALL";
|
|
176
|
+
text?: string | undefined;
|
|
188
177
|
tool?: {
|
|
189
178
|
name: string;
|
|
190
179
|
parameters: string;
|
|
191
180
|
result: string;
|
|
192
|
-
accepted?: boolean | undefined;
|
|
193
181
|
rawArguments?: string | undefined;
|
|
182
|
+
accepted?: boolean | undefined;
|
|
194
183
|
mcpServer?: string | undefined;
|
|
195
184
|
mcpToolName?: string | undefined;
|
|
196
185
|
} | undefined;
|
|
186
|
+
}, {
|
|
187
|
+
type: "USER_PROMPT" | "AI_RESPONSE" | "TOOL_EXECUTION" | "AI_THINKING" | "MCP_TOOL_CALL";
|
|
197
188
|
date?: Date | undefined;
|
|
198
|
-
text?: string | undefined;
|
|
199
189
|
attachedFiles?: {
|
|
200
190
|
relativePath: string;
|
|
201
191
|
startLine?: number | undefined;
|
|
@@ -204,6 +194,16 @@ declare const PromptItemArrayZ: z.ZodArray<z.ZodObject<{
|
|
|
204
194
|
inputCount: number;
|
|
205
195
|
outputCount: number;
|
|
206
196
|
} | undefined;
|
|
197
|
+
text?: string | undefined;
|
|
198
|
+
tool?: {
|
|
199
|
+
name: string;
|
|
200
|
+
parameters: string;
|
|
201
|
+
result: string;
|
|
202
|
+
rawArguments?: string | undefined;
|
|
203
|
+
accepted?: boolean | undefined;
|
|
204
|
+
mcpServer?: string | undefined;
|
|
205
|
+
mcpToolName?: string | undefined;
|
|
206
|
+
} | undefined;
|
|
207
207
|
}>, "many">;
|
|
208
208
|
type PromptItemArray = z.infer<typeof PromptItemArrayZ>;
|
|
209
209
|
/**
|
|
@@ -129,10 +129,13 @@ function getSdk(client, withWrapper = defaultWrapper) {
|
|
|
129
129
|
},
|
|
130
130
|
ScanSkill(variables, requestHeaders, signal) {
|
|
131
131
|
return withWrapper((wrappedRequestHeaders) => client.request({ document: ScanSkillDocument, variables, requestHeaders: { ...requestHeaders, ...wrappedRequestHeaders }, signal }), "ScanSkill", "mutation", variables);
|
|
132
|
+
},
|
|
133
|
+
SkillVerdictsByMd5(variables, requestHeaders, signal) {
|
|
134
|
+
return withWrapper((wrappedRequestHeaders) => client.request({ document: SkillVerdictsByMd5Document, variables, requestHeaders: { ...requestHeaders, ...wrappedRequestHeaders }, signal }), "SkillVerdictsByMd5", "query", variables);
|
|
132
135
|
}
|
|
133
136
|
};
|
|
134
137
|
}
|
|
135
|
-
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, CreateProjectDocument, ValidateRepoUrlDocument, GitReferenceDocument, AutoPrAnalysisDocument, GetFixReportsByRepoUrlDocument, GetReportFixesDocument, GetLatestReportByRepoUrlDocument, UpdateDownloadedFixDataDocument, GetUserMvsAutoFixDocument, StreamBlameAiAnalysisRequestsDocument, StreamCommitBlameRequestsDocument, ScanSkillDocument, defaultWrapper;
|
|
138
|
+
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, CreateProjectDocument, ValidateRepoUrlDocument, GitReferenceDocument, AutoPrAnalysisDocument, GetFixReportsByRepoUrlDocument, GetReportFixesDocument, GetLatestReportByRepoUrlDocument, UpdateDownloadedFixDataDocument, GetUserMvsAutoFixDocument, StreamBlameAiAnalysisRequestsDocument, StreamCommitBlameRequestsDocument, ScanSkillDocument, SkillVerdictsByMd5Document, defaultWrapper;
|
|
136
139
|
var init_client_generates = __esm({
|
|
137
140
|
"src/features/analysis/scm/generates/client_generates.ts"() {
|
|
138
141
|
"use strict";
|
|
@@ -326,6 +329,7 @@ var init_client_generates = __esm({
|
|
|
326
329
|
IssueType_Enum2["SystemExitShouldReraise"] = "SYSTEM_EXIT_SHOULD_RERAISE";
|
|
327
330
|
IssueType_Enum2["SystemInformationLeak"] = "SYSTEM_INFORMATION_LEAK";
|
|
328
331
|
IssueType_Enum2["SystemInformationLeakExternal"] = "SYSTEM_INFORMATION_LEAK_EXTERNAL";
|
|
332
|
+
IssueType_Enum2["TaintedNumericCast"] = "TAINTED_NUMERIC_CAST";
|
|
329
333
|
IssueType_Enum2["TarSlip"] = "TAR_SLIP";
|
|
330
334
|
IssueType_Enum2["TrustBoundaryViolation"] = "TRUST_BOUNDARY_VIOLATION";
|
|
331
335
|
IssueType_Enum2["TypeConfusion"] = "TYPE_CONFUSION";
|
|
@@ -1264,6 +1268,18 @@ var init_client_generates = __esm({
|
|
|
1264
1268
|
cached
|
|
1265
1269
|
summary
|
|
1266
1270
|
}
|
|
1271
|
+
}
|
|
1272
|
+
`;
|
|
1273
|
+
SkillVerdictsByMd5Document = `
|
|
1274
|
+
query SkillVerdictsByMd5($md5s: [String!]!) {
|
|
1275
|
+
skillVerdictsByMd5(md5s: $md5s) {
|
|
1276
|
+
md5
|
|
1277
|
+
verdict
|
|
1278
|
+
summary
|
|
1279
|
+
scannerName
|
|
1280
|
+
scannerVersion
|
|
1281
|
+
scannedAt
|
|
1282
|
+
}
|
|
1267
1283
|
}
|
|
1268
1284
|
`;
|
|
1269
1285
|
defaultWrapper = (action, _operationName, _operationType, _variables) => action();
|
|
@@ -1758,7 +1774,8 @@ var init_getIssueType = __esm({
|
|
|
1758
1774
|
["DJANGO_BLANK_FIELD_NEEDS_NULL_OR_DEFAULT" /* DjangoBlankFieldNeedsNullOrDefault */]: "Django Blank Field Needs Null or Default",
|
|
1759
1775
|
["REDUNDANT_NIL_ERROR_CHECK" /* RedundantNilErrorCheck */]: "Redundant Nil Error Check",
|
|
1760
1776
|
["MISSING_WORKFLOW_PERMISSIONS" /* MissingWorkflowPermissions */]: "Missing Workflow Permissions",
|
|
1761
|
-
["EXCESSIVE_SECRETS_EXPOSURE" /* ExcessiveSecretsExposure */]: "Excessive Secrets Exposure"
|
|
1777
|
+
["EXCESSIVE_SECRETS_EXPOSURE" /* ExcessiveSecretsExposure */]: "Excessive Secrets Exposure",
|
|
1778
|
+
["TAINTED_NUMERIC_CAST" /* TaintedNumericCast */]: "Tainted Numeric Cast"
|
|
1762
1779
|
};
|
|
1763
1780
|
issueTypeZ = z5.nativeEnum(IssueType_Enum);
|
|
1764
1781
|
getIssueTypeFriendlyString = (issueType) => {
|
|
@@ -4924,7 +4941,8 @@ var fixDetailsData = {
|
|
|
4924
4941
|
["DJANGO_BLANK_FIELD_NEEDS_NULL_OR_DEFAULT" /* DjangoBlankFieldNeedsNullOrDefault */]: void 0,
|
|
4925
4942
|
["REDUNDANT_NIL_ERROR_CHECK" /* RedundantNilErrorCheck */]: void 0,
|
|
4926
4943
|
["MISSING_WORKFLOW_PERMISSIONS" /* MissingWorkflowPermissions */]: void 0,
|
|
4927
|
-
["EXCESSIVE_SECRETS_EXPOSURE" /* ExcessiveSecretsExposure */]: void 0
|
|
4944
|
+
["EXCESSIVE_SECRETS_EXPOSURE" /* ExcessiveSecretsExposure */]: void 0,
|
|
4945
|
+
["TAINTED_NUMERIC_CAST" /* TaintedNumericCast */]: void 0
|
|
4928
4946
|
};
|
|
4929
4947
|
|
|
4930
4948
|
// src/features/analysis/scm/shared/src/commitDescriptionMarkup.ts
|
|
@@ -6369,6 +6387,17 @@ var openRedirect3 = {
|
|
|
6369
6387
|
}
|
|
6370
6388
|
};
|
|
6371
6389
|
|
|
6390
|
+
// src/features/analysis/scm/shared/src/storedQuestionData/python/ssrf.ts
|
|
6391
|
+
var ssrf5 = {
|
|
6392
|
+
domainsAllowlist: {
|
|
6393
|
+
content: () => "Allowed URL prefixes",
|
|
6394
|
+
description: () => `The security risk of this issue is the ability of an attacker to provide input that shoots HTTP requests from your server to arbitrary URLs, including internal ones, like \`https://admin.mycompany.com\`
|
|
6395
|
+
|
|
6396
|
+
To eliminate the risk and fix the issue, check out your app logic and make a whitelist of URLs this API should be allowed to call.`,
|
|
6397
|
+
guidance: () => ""
|
|
6398
|
+
}
|
|
6399
|
+
};
|
|
6400
|
+
|
|
6372
6401
|
// src/features/analysis/scm/shared/src/storedQuestionData/python/uncheckedLoopCondition.ts
|
|
6373
6402
|
var uncheckedLoopCondition3 = {
|
|
6374
6403
|
loopLimit: {
|
|
@@ -6390,7 +6419,8 @@ var vulnerabilities14 = {
|
|
|
6390
6419
|
["OPEN_REDIRECT" /* OpenRedirect */]: openRedirect3,
|
|
6391
6420
|
["UNCHECKED_LOOP_CONDITION" /* UncheckedLoopCondition */]: uncheckedLoopCondition3,
|
|
6392
6421
|
["DUPLICATED_STRINGS" /* DuplicatedStrings */]: duplicatedStrings2,
|
|
6393
|
-
["MISSING_ENCODING_FILE_OPEN" /* MissingEncodingFileOpen */]: missingEncoding
|
|
6422
|
+
["MISSING_ENCODING_FILE_OPEN" /* MissingEncodingFileOpen */]: missingEncoding,
|
|
6423
|
+
["SSRF" /* Ssrf */]: ssrf5
|
|
6394
6424
|
};
|
|
6395
6425
|
var python_default2 = vulnerabilities14;
|
|
6396
6426
|
|
|
@@ -6601,6 +6631,15 @@ var BitbucketParseResultZ = z21.object({
|
|
|
6601
6631
|
repoName: z21.string(),
|
|
6602
6632
|
hostname: z21.literal(BITBUCKET_HOSTNAME)
|
|
6603
6633
|
});
|
|
6634
|
+
var UserWorkspacePermissionsRepositoriesResponseZ = z21.object({
|
|
6635
|
+
values: z21.array(
|
|
6636
|
+
z21.object({
|
|
6637
|
+
repository: z21.object({
|
|
6638
|
+
full_name: z21.string().optional()
|
|
6639
|
+
}).optional()
|
|
6640
|
+
})
|
|
6641
|
+
).optional()
|
|
6642
|
+
});
|
|
6604
6643
|
|
|
6605
6644
|
// src/features/analysis/scm/bitbucket/BitbucketSCMLib.ts
|
|
6606
6645
|
import { setTimeout as setTimeout3 } from "timers/promises";
|
|
@@ -7209,6 +7248,10 @@ var GQLClient = class {
|
|
|
7209
7248
|
async scanSkill(variables) {
|
|
7210
7249
|
return await this._clientSdk.ScanSkill(variables);
|
|
7211
7250
|
}
|
|
7251
|
+
// T-467 — batched verdict lookup for the client-side quarantine check.
|
|
7252
|
+
async skillVerdictsByMd5(md5s) {
|
|
7253
|
+
return await this._clientSdk.SkillVerdictsByMd5({ md5s });
|
|
7254
|
+
}
|
|
7212
7255
|
};
|
|
7213
7256
|
|
|
7214
7257
|
// src/features/analysis/graphql/tracy-batch-upload.ts
|
|
@@ -7320,13 +7363,13 @@ function maskString(str, showStart = 2, showEnd = 2) {
|
|
|
7320
7363
|
}
|
|
7321
7364
|
return str.slice(0, showStart) + "*".repeat(str.length - showStart - showEnd) + str.slice(-showEnd);
|
|
7322
7365
|
}
|
|
7323
|
-
async function sanitizeDataWithCounts(obj) {
|
|
7366
|
+
async function sanitizeDataWithCounts(obj, options) {
|
|
7324
7367
|
const counts = {
|
|
7325
7368
|
detections: { total: 0, high: 0, medium: 0, low: 0 }
|
|
7326
7369
|
};
|
|
7327
7370
|
const MAX_SCAN_LENGTH = 1e5;
|
|
7328
7371
|
const sanitizeString = async (str) => {
|
|
7329
|
-
if (str.length > MAX_SCAN_LENGTH) {
|
|
7372
|
+
if (!options?.noSizeLimit && str.length > MAX_SCAN_LENGTH) {
|
|
7330
7373
|
return str;
|
|
7331
7374
|
}
|
|
7332
7375
|
let result = str;
|