@4da/mcp-server 6.2.4 → 6.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +484 -0
- package/README.md +22 -6
- package/dist/db.d.ts +38 -0
- package/dist/db.js +78 -23
- package/dist/doctor.js +6 -3
- package/dist/embeddings.d.ts +1 -1
- package/dist/embeddings.js +16 -14
- package/dist/index.js +73 -103
- package/dist/live/advisory-groups.d.ts +68 -0
- package/dist/live/advisory-groups.js +131 -0
- package/dist/live/cache.js +11 -3
- package/dist/live/cargo-platform.d.ts +6 -0
- package/dist/live/cargo-platform.js +8 -2
- package/dist/live/changelog.js +38 -6
- package/dist/live/dependency-set.d.ts +9 -1
- package/dist/live/dependency-set.js +10 -2
- package/dist/live/fix-paths.d.ts +258 -9
- package/dist/live/fix-paths.js +790 -45
- package/dist/live/github-releases.js +3 -0
- package/dist/live/held-dependencies.d.ts +93 -0
- package/dist/live/held-dependencies.js +212 -0
- package/dist/live/held-targets.d.ts +30 -0
- package/dist/live/held-targets.js +107 -0
- package/dist/live/http-utils.js +13 -3
- package/dist/live/index.d.ts +7 -4
- package/dist/live/index.js +24 -19
- package/dist/live/install-state.js +6 -2
- package/dist/live/js-lockfile-readers.d.ts +8 -1
- package/dist/live/js-lockfile-readers.js +43 -6
- package/dist/live/lockfile-parents.d.ts +15 -0
- package/dist/live/lockfile-parents.js +85 -10
- package/dist/live/lockfile-parsers-pygo.d.ts +47 -2
- package/dist/live/lockfile-parsers-pygo.js +230 -12
- package/dist/live/lockfile-parsers-rbphp.d.ts +38 -0
- package/dist/live/lockfile-parsers-rbphp.js +123 -0
- package/dist/live/lockfile-parsers.d.ts +6 -0
- package/dist/live/lockfile-parsers.js +116 -4
- package/dist/live/lockfile-types.d.ts +28 -1
- package/dist/live/maintenance.d.ts +20 -4
- package/dist/live/maintenance.js +31 -2
- package/dist/live/malware.d.ts +20 -0
- package/dist/live/malware.js +31 -0
- package/dist/live/npm-packument.d.ts +4 -1
- package/dist/live/npm-packument.js +5 -2
- package/dist/live/offered-release.d.ts +53 -0
- package/dist/live/offered-release.js +117 -0
- package/dist/live/osv-ranges.d.ts +111 -0
- package/dist/live/osv-ranges.js +173 -14
- package/dist/live/osv-scanner.d.ts +87 -5
- package/dist/live/osv-scanner.js +310 -59
- package/dist/live/pinned-advisories.d.ts +2 -2
- package/dist/live/pinned-advisories.js +3 -3
- package/dist/live/pypi-advice.d.ts +36 -0
- package/dist/live/pypi-advice.js +158 -0
- package/dist/live/rate-limiter.d.ts +7 -0
- package/dist/live/rate-limiter.js +22 -1
- package/dist/live/release-metadata.d.ts +5 -0
- package/dist/live/resolution.d.ts +3 -0
- package/dist/live/resolution.js +6 -3
- package/dist/live/scan-coverage.d.ts +26 -0
- package/dist/live/scan-coverage.js +70 -0
- package/dist/live/semver-utils.d.ts +8 -0
- package/dist/live/semver-utils.js +26 -3
- package/dist/live/severity-scope.d.ts +26 -1
- package/dist/live/severity-scope.js +32 -0
- package/dist/live/shell-safe.d.ts +19 -0
- package/dist/live/shell-safe.js +36 -0
- package/dist/live/types.d.ts +134 -8
- package/dist/live/version-compare.d.ts +49 -0
- package/dist/live/version-compare.js +131 -0
- package/dist/live/withdrawn-releases.d.ts +50 -0
- package/dist/live/withdrawn-releases.js +125 -0
- package/dist/project-manifests.d.ts +7 -0
- package/dist/project-manifests.js +45 -5
- package/dist/project-scanner.js +6 -4
- package/dist/project-tree.d.ts +56 -0
- package/dist/project-tree.js +174 -5
- package/dist/schema-registry.d.ts +47 -4
- package/dist/schema-registry.js +76 -9
- package/dist/server-instructions.js +4 -2
- package/dist/setup.d.ts +8 -0
- package/dist/setup.js +21 -2
- package/dist/tool-dispatch.js +3 -3
- package/dist/tools/agent-memory.d.ts +5 -0
- package/dist/tools/agent-memory.js +9 -0
- package/dist/tools/briefing-task-scope.js +5 -2
- package/dist/tools/decision-memory.js +2 -0
- package/dist/tools/dependency-check-held.d.ts +44 -0
- package/dist/tools/dependency-check-held.js +98 -0
- package/dist/tools/dependency-check-signals.d.ts +19 -2
- package/dist/tools/dependency-check-signals.js +84 -13
- package/dist/tools/dependency-check-versions.d.ts +37 -4
- package/dist/tools/dependency-check-versions.js +48 -13
- package/dist/tools/dependency-check.d.ts +11 -1
- package/dist/tools/dependency-check.js +81 -29
- package/dist/tools/dependency-health.js +209 -45
- package/dist/tools/get-context.d.ts +3 -0
- package/dist/tools/get-context.js +4 -0
- package/dist/tools/project-scope.d.ts +8 -0
- package/dist/tools/project-scope.js +21 -0
- package/dist/tools/upgrade-impact-features.d.ts +37 -0
- package/dist/tools/upgrade-impact-features.js +176 -0
- package/dist/tools/upgrade-impact-literals.js +26 -4
- package/dist/tools/upgrade-impact-report.d.ts +5 -1
- package/dist/tools/upgrade-impact-report.js +26 -5
- package/dist/tools/upgrade-impact.js +10 -3
- package/dist/tools/upgrade-planner-fixpaths.d.ts +162 -5
- package/dist/tools/upgrade-planner-fixpaths.js +0 -0
- package/dist/tools/upgrade-planner.d.ts +59 -4
- package/dist/tools/upgrade-planner.js +237 -61
- package/dist/tools/vulnerability-scan-concise.d.ts +47 -2
- package/dist/tools/vulnerability-scan-concise.js +37 -3
- package/dist/tools/vulnerability-scan-format.d.ts +126 -24
- package/dist/tools/vulnerability-scan-format.js +193 -26
- package/dist/tools/vulnerability-scan.d.ts +224 -63
- package/dist/tools/vulnerability-scan.js +50 -15
- package/dist/tools/what-should-i-know.d.ts +6 -1
- package/dist/tools/what-should-i-know.js +72 -15
- package/package.json +2 -2
|
@@ -18,6 +18,17 @@ import { SEVERITY_RANK } from "../live/severity-scope.js";
|
|
|
18
18
|
const MAX_PACKAGES = 40;
|
|
19
19
|
const MAX_RECOMMENDATIONS = 25;
|
|
20
20
|
const IDS_PER_ROW = 3;
|
|
21
|
+
/** The withdrawn releases behind a row's fix: the checked target's, else its advisories' own line fixes. */
|
|
22
|
+
function withheldOf(checked, vulns) {
|
|
23
|
+
if (checked?.withheld && checked.withheld.length > 0)
|
|
24
|
+
return { withheld: checked.withheld, ...(checked.withheld_note ? { withheld_note: checked.withheld_note } : {}) };
|
|
25
|
+
if (checked)
|
|
26
|
+
return {};
|
|
27
|
+
const rows = vulns;
|
|
28
|
+
const withheld = [...new Set(rows.flatMap((v) => v.withheld ?? []))];
|
|
29
|
+
const notes = [...new Set(rows.map((v) => v.withheld_note).filter((n) => Boolean(n)))];
|
|
30
|
+
return withheld.length > 0 ? { withheld, ...(notes.length > 0 ? { withheld_note: notes.join("; ") } : {}) } : {};
|
|
31
|
+
}
|
|
21
32
|
/** One row per package version: worst graded severity, the fix that clears every fixable advisory. */
|
|
22
33
|
export function groupByPackage(rows, targets = {}) {
|
|
23
34
|
const groups = new Map();
|
|
@@ -31,17 +42,23 @@ export function groupByPackage(rows, targets = {}) {
|
|
|
31
42
|
const fixes = vulns.map((v) => v.fixed_version).filter((f) => Boolean(f));
|
|
32
43
|
const unfixed = vulns.length - fixes.length;
|
|
33
44
|
const checked = targets[`${worst.package}@${worst.current_version}`];
|
|
34
|
-
|
|
45
|
+
// fix_targets also carries the installed-advisories-only target, corrected by the registry
|
|
46
|
+
// when the highest fix is deprecated or yanked (audit H5); without an entry, the highest fix.
|
|
47
|
+
const fixed = checked ? checked.target : fixes.length > 0 ? maxVersion(fixes, worst.ecosystem) : null;
|
|
35
48
|
// Unknown (null) only when no advisory row knows; any direct row makes it direct.
|
|
36
49
|
const direct = vulns.some((v) => v.is_direct === true) ? true : vulns.some((v) => v.is_direct === null) ? null : false;
|
|
37
50
|
out.push({
|
|
38
51
|
package: worst.package,
|
|
39
52
|
current_version: worst.current_version,
|
|
40
53
|
severity: worst.severity,
|
|
54
|
+
...(worst.severity_from ? { severity_from: worst.severity_from } : {}),
|
|
55
|
+
// Any malicious-package record on this copy: the row says so (audit 6.2.5 D-3).
|
|
56
|
+
...(vulns.some((v) => v.malware === true) ? { malware: true } : {}),
|
|
41
57
|
advisories: vulns.length,
|
|
42
58
|
ids: vulns.slice(0, IDS_PER_ROW).map((v) => v.vuln_id),
|
|
43
59
|
fixed_version: fixed,
|
|
44
60
|
fix_checked: checked?.checked ?? "installed_advisories_only",
|
|
61
|
+
...withheldOf(checked, vulns),
|
|
45
62
|
...(unfixed > 0 ? { unfixed_advisories: unfixed } : {}),
|
|
46
63
|
is_direct: direct,
|
|
47
64
|
...(vulns.every((v) => v.is_dev) ? { is_dev: true } : {}),
|
|
@@ -65,24 +82,40 @@ export function conciseScanResult(full) {
|
|
|
65
82
|
const omittedPackages = packages.length - listed.length;
|
|
66
83
|
const omittedRecommendations = full.recommendations.length - recommendations.length;
|
|
67
84
|
return {
|
|
85
|
+
// Leads the answer when any dependency went unchecked ("NOT CHECKED: ...").
|
|
86
|
+
...(full.summary ? { summary: full.summary } : {}),
|
|
68
87
|
scan_time: full.scan_time,
|
|
69
88
|
project_root: full.project_root,
|
|
70
89
|
host_platform: full.host_platform,
|
|
71
90
|
ecosystems_scanned: full.ecosystems_scanned,
|
|
72
91
|
total_dependencies_scanned: full.total_dependencies_scanned,
|
|
92
|
+
...(full.dev_scope ? { dev_scope: full.dev_scope } : {}),
|
|
73
93
|
total_vulnerable_packages: full.total_vulnerable_packages,
|
|
74
94
|
...(full.coverage
|
|
75
95
|
? {
|
|
76
96
|
coverage: {
|
|
77
97
|
complete: false,
|
|
78
98
|
note: full.coverage.note,
|
|
99
|
+
...(full.coverage.unchecked_dependencies !== undefined
|
|
100
|
+
? {
|
|
101
|
+
unchecked_dependencies: full.coverage.unchecked_dependencies,
|
|
102
|
+
checked_dependencies: full.coverage.checked_dependencies,
|
|
103
|
+
osv_status: full.coverage.osv_status,
|
|
104
|
+
}
|
|
105
|
+
: {}),
|
|
79
106
|
lockfiles_not_scanned: full.coverage.lockfiles_not_scanned,
|
|
80
|
-
...(
|
|
107
|
+
...(full.coverage.unreadable_lockfiles ? { unreadable_lockfiles: full.coverage.unreadable_lockfiles } : {}),
|
|
108
|
+
...(full.coverage.partial_lockfiles ? { partial_lockfiles: full.coverage.partial_lockfiles } : {}),
|
|
109
|
+
...(full.coverage.refused_includes ? { refused_includes: full.coverage.refused_includes } : {}),
|
|
110
|
+
...(full.coverage.not_covered ? { not_covered: full.coverage.not_covered, not_covered_count: full.coverage.not_covered_count } : {}),
|
|
111
|
+
...(full.coverage.not_scanned ? { not_scanned: full.coverage.not_scanned } : {}),
|
|
112
|
+
...(full.coverage.unresolved_manifests ? { unresolved_manifests: full.coverage.unresolved_manifests } : {}),
|
|
81
113
|
},
|
|
82
114
|
}
|
|
83
115
|
: {}),
|
|
84
|
-
// Every listed advisory, before grouping and trimming.
|
|
116
|
+
// Every listed advisory, before grouping and trimming. Null when the scan is incomplete.
|
|
85
117
|
by_severity: full.by_severity,
|
|
118
|
+
...(full.found_in_checked_dependencies ? { found_in_checked_dependencies: full.found_in_checked_dependencies } : {}),
|
|
86
119
|
vulnerable_packages: listed,
|
|
87
120
|
...(omittedPackages > 0
|
|
88
121
|
? { vulnerable_packages_note: `Showing the ${listed.length} most severe of ${packages.length} vulnerable package versions; pass severity_filter (e.g. "high") or response_format: "detailed" for the rest.` }
|
|
@@ -104,6 +137,7 @@ export function conciseScanResult(full) {
|
|
|
104
137
|
lockfiles_read: full._meta.resolution.lockfiles.length,
|
|
105
138
|
resolved_at: full._meta.resolution.resolved_at,
|
|
106
139
|
privacy: full._meta.privacy,
|
|
140
|
+
...(full._meta.alias_severity ? { alias_severity: full._meta.alias_severity } : {}),
|
|
107
141
|
},
|
|
108
142
|
};
|
|
109
143
|
}
|
|
@@ -3,15 +3,18 @@
|
|
|
3
3
|
* recommendations, install drift, the shared severity grade, and resolution
|
|
4
4
|
* provenance. Split out of vulnerability-scan.ts, which keeps execution.
|
|
5
5
|
*/
|
|
6
|
-
import type { InstallDriftRecord, ResolutionProvenance, VulnerabilityScanResult } from "../live/types.js";
|
|
6
|
+
import type { AliasSeverityReport, InstallDriftRecord, ResolutionProvenance, VulnerabilityCoverage, VulnerabilityScanResult } from "../live/types.js";
|
|
7
7
|
import { type TreeDiscovery } from "../project-tree.js";
|
|
8
|
-
import type {
|
|
8
|
+
import type { LockfileProblem } from "../live/lockfile-types.js";
|
|
9
|
+
import { type FixTargetResult } from "../live/fix-paths.js";
|
|
9
10
|
/** What the formatter needs beyond the scan itself. */
|
|
10
11
|
export interface ScanContext {
|
|
11
12
|
resolution: ResolutionProvenance | null;
|
|
12
13
|
reResolvedThisCall: boolean;
|
|
13
14
|
drift: InstallDriftRecord[];
|
|
14
15
|
includeDev: boolean;
|
|
16
|
+
/** Installed copies that are dev-only (every path a dev one): left out without include_dev. */
|
|
17
|
+
devOnlyCopies?: number;
|
|
15
18
|
/** What the project-tree walk left out; null when the set did not come from a walk. */
|
|
16
19
|
discovery?: TreeDiscovery | null;
|
|
17
20
|
/** Manifests with no lockfile, whose ranged dependencies were not scanned. */
|
|
@@ -20,11 +23,13 @@ export interface ScanContext {
|
|
|
20
23
|
manifest: string;
|
|
21
24
|
ranges: number;
|
|
22
25
|
}>;
|
|
26
|
+
/** Lockfiles present that could not be read (conflict markers, invalid JSON, ...). */
|
|
27
|
+
problems?: LockfileProblem[];
|
|
23
28
|
/**
|
|
24
29
|
* Upgrade targets checked against every advisory of the package, keyed by
|
|
25
30
|
* fixTargetKey(); absent when the check could not run (offline, budget).
|
|
26
31
|
*/
|
|
27
|
-
verifiedTargets?: Map<string,
|
|
32
|
+
verifiedTargets?: Map<string, FixTargetResult>;
|
|
28
33
|
}
|
|
29
34
|
/** The key a verified target is stored under: one installed copy of a package. */
|
|
30
35
|
export declare function fixTargetKey(ecosystem: string, name: string, version: string): string;
|
|
@@ -34,7 +39,7 @@ export declare function fixTargetKey(ecosystem: string, name: string, version: s
|
|
|
34
39
|
* lockfile (declared ranges are not installs, so they are not sent to OSV).
|
|
35
40
|
*/
|
|
36
41
|
export declare function scanCoverage(ctx: ScanContext, relative: (dir: string) => string, detailed: boolean): {
|
|
37
|
-
complete:
|
|
42
|
+
complete: false;
|
|
38
43
|
note: string;
|
|
39
44
|
lockfiles_not_scanned: number;
|
|
40
45
|
skipped_lockfiles?: {
|
|
@@ -42,12 +47,84 @@ export declare function scanCoverage(ctx: ScanContext, relative: (dir: string) =
|
|
|
42
47
|
reason: "depth" | "project_limit";
|
|
43
48
|
}[] | undefined;
|
|
44
49
|
walk_truncated?: boolean | undefined;
|
|
50
|
+
unreadable_lockfiles?: {
|
|
51
|
+
path: string;
|
|
52
|
+
error: string;
|
|
53
|
+
}[] | undefined;
|
|
54
|
+
partial_lockfiles?: {
|
|
55
|
+
path: string;
|
|
56
|
+
skipped_entries: number;
|
|
57
|
+
reason: string;
|
|
58
|
+
}[] | undefined;
|
|
59
|
+
refused_includes?: {
|
|
60
|
+
path: string;
|
|
61
|
+
reason: string;
|
|
62
|
+
}[] | undefined;
|
|
63
|
+
not_covered?: {
|
|
64
|
+
path: string;
|
|
65
|
+
ecosystem: string;
|
|
66
|
+
}[] | undefined;
|
|
67
|
+
not_covered_count?: number | undefined;
|
|
68
|
+
not_scanned?: {
|
|
69
|
+
test_fixture_lockfiles: number;
|
|
70
|
+
dirs: string[];
|
|
71
|
+
} | undefined;
|
|
45
72
|
unresolved_manifests?: {
|
|
46
73
|
manifest: string;
|
|
47
74
|
declared_ranges: number;
|
|
48
75
|
fix: string;
|
|
49
76
|
}[] | undefined;
|
|
50
77
|
} | null;
|
|
78
|
+
/** The `coverage` block: everything the scan did not cover, the unchecked count first. */
|
|
79
|
+
export interface MergedCoverage {
|
|
80
|
+
complete: false;
|
|
81
|
+
note: string;
|
|
82
|
+
lockfiles_not_scanned: number;
|
|
83
|
+
skipped_lockfiles?: Array<{
|
|
84
|
+
path: string;
|
|
85
|
+
reason: string;
|
|
86
|
+
}>;
|
|
87
|
+
walk_truncated?: boolean;
|
|
88
|
+
unresolved_manifests?: Array<{
|
|
89
|
+
manifest: string;
|
|
90
|
+
declared_ranges: number;
|
|
91
|
+
fix: string;
|
|
92
|
+
}>;
|
|
93
|
+
/** Lockfiles that could not be read at all. */
|
|
94
|
+
unreadable_lockfiles?: Array<{
|
|
95
|
+
path: string;
|
|
96
|
+
error: string;
|
|
97
|
+
}>;
|
|
98
|
+
/** Lockfiles read except for `skipped_entries` entries (a line past the length cap). */
|
|
99
|
+
partial_lockfiles?: Array<{
|
|
100
|
+
path: string;
|
|
101
|
+
skipped_entries: number;
|
|
102
|
+
reason: string;
|
|
103
|
+
}>;
|
|
104
|
+
/** Requirements includes not read because they point outside the project. */
|
|
105
|
+
refused_includes?: Array<{
|
|
106
|
+
path: string;
|
|
107
|
+
reason: string;
|
|
108
|
+
}>;
|
|
109
|
+
not_covered?: Array<{
|
|
110
|
+
path: string;
|
|
111
|
+
ecosystem: string;
|
|
112
|
+
}>;
|
|
113
|
+
not_covered_count?: number;
|
|
114
|
+
not_scanned?: {
|
|
115
|
+
test_fixture_lockfiles: number;
|
|
116
|
+
dirs: string[];
|
|
117
|
+
};
|
|
118
|
+
unchecked_dependencies?: number;
|
|
119
|
+
checked_dependencies?: number;
|
|
120
|
+
osv_status?: string;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* One `coverage` block for everything the scan did not cover: lockfiles past
|
|
124
|
+
* the walk's bounds, manifests with no lockfile, and dependencies OSV.dev gave
|
|
125
|
+
* no answer for. The unchecked count leads the note.
|
|
126
|
+
*/
|
|
127
|
+
export declare function mergeCoverage(walk: ReturnType<typeof scanCoverage>, osv: VulnerabilityCoverage | null): MergedCoverage | null;
|
|
51
128
|
/**
|
|
52
129
|
* Collapse advisories that are the same finding under different identifiers.
|
|
53
130
|
*
|
|
@@ -55,7 +132,11 @@ export declare function scanCoverage(ctx: ScanContext, relative: (dir: string) =
|
|
|
55
132
|
* other in `aliases`. Reported separately they double the count and read as two
|
|
56
133
|
* problems: `quinn-proto` showed as "2 high" for a single memory-exhaustion
|
|
57
134
|
* bug. Keeps the entry with the most usable detail (a CVSS score, then a fix
|
|
58
|
-
* version) and folds the rest into its alias list.
|
|
135
|
+
* version) and folds the rest into its alias list. The kept entry carries the
|
|
136
|
+
* group's MOST severe grade, naming the record it came from (`severityFrom`),
|
|
137
|
+
* as every other tool does (advisory-groups.ts gradeAliasGroups): keeping the
|
|
138
|
+
* richest record's own grade showed CVE-2026-4277 as low here and critical in
|
|
139
|
+
* dependency_check (final release audit of 6.2.5).
|
|
59
140
|
*/
|
|
60
141
|
export declare function collapseAliases(vulns: VulnerabilityScanResult["vulnerabilities"]): import("../live/types.js").VulnerabilityEntry[];
|
|
61
142
|
/**
|
|
@@ -71,32 +152,25 @@ export declare function platformFilterNote(vulns: VulnerabilityScanResult["vulne
|
|
|
71
152
|
/** Shortest readable label for a manifest directory, relative to the scan root. */
|
|
72
153
|
export declare function relativeDir(dir: string, root: string): string;
|
|
73
154
|
export declare function formatScanResult(result: VulnerabilityScanResult, severityFilter: string | undefined, ctx: ScanContext): {
|
|
155
|
+
summary?: string | undefined;
|
|
74
156
|
scan_time: string;
|
|
75
157
|
project: string;
|
|
76
|
-
coverage?:
|
|
77
|
-
complete: boolean;
|
|
78
|
-
note: string;
|
|
79
|
-
lockfiles_not_scanned: number;
|
|
80
|
-
skipped_lockfiles?: {
|
|
81
|
-
path: string;
|
|
82
|
-
reason: "depth" | "project_limit";
|
|
83
|
-
}[] | undefined;
|
|
84
|
-
walk_truncated?: boolean | undefined;
|
|
85
|
-
unresolved_manifests?: {
|
|
86
|
-
manifest: string;
|
|
87
|
-
declared_ranges: number;
|
|
88
|
-
fix: string;
|
|
89
|
-
}[] | undefined;
|
|
90
|
-
} | undefined;
|
|
158
|
+
coverage?: MergedCoverage | undefined;
|
|
91
159
|
project_root: string;
|
|
92
160
|
workspaces_with_findings: string[];
|
|
93
161
|
host_platform: string;
|
|
94
162
|
ecosystems_scanned: string[];
|
|
95
163
|
total_dependencies_scanned: number;
|
|
96
|
-
|
|
164
|
+
dev_scope?: string | undefined;
|
|
165
|
+
total_vulnerable_packages: number | null;
|
|
97
166
|
platform_inactive_packages: number;
|
|
98
|
-
by_severity: import("../live/severity-scope.js").SeverityCounts;
|
|
99
|
-
advisory_by_severity: import("../live/severity-scope.js").SeverityCounts;
|
|
167
|
+
by_severity: import("../live/severity-scope.js").SeverityCounts | null;
|
|
168
|
+
advisory_by_severity: import("../live/severity-scope.js").SeverityCounts | null;
|
|
169
|
+
found_in_checked_dependencies?: {
|
|
170
|
+
note: string;
|
|
171
|
+
vulnerable_packages: number;
|
|
172
|
+
by_severity: import("../live/severity-scope.js").SeverityCounts;
|
|
173
|
+
} | undefined;
|
|
100
174
|
vulnerabilities: {
|
|
101
175
|
package: string;
|
|
102
176
|
current_version: string;
|
|
@@ -112,10 +186,14 @@ export declare function formatScanResult(result: VulnerabilityScanResult, severi
|
|
|
112
186
|
aliases: string[];
|
|
113
187
|
severity: "critical" | "high" | "low" | "medium" | "unknown";
|
|
114
188
|
advisory_severity: "critical" | "high" | "low" | "medium" | "unknown";
|
|
189
|
+
malware?: boolean | undefined;
|
|
190
|
+
severity_from?: string | undefined;
|
|
115
191
|
severity_note?: string | undefined;
|
|
116
192
|
cvss_score: number | null;
|
|
117
193
|
summary: string;
|
|
118
194
|
fixed_version: string | null;
|
|
195
|
+
withheld?: string[] | undefined;
|
|
196
|
+
withheld_note?: string | null | undefined;
|
|
119
197
|
published: string;
|
|
120
198
|
references: string[];
|
|
121
199
|
}[];
|
|
@@ -134,10 +212,14 @@ export declare function formatScanResult(result: VulnerabilityScanResult, severi
|
|
|
134
212
|
aliases: string[];
|
|
135
213
|
severity: "critical" | "high" | "low" | "medium" | "unknown";
|
|
136
214
|
advisory_severity: "critical" | "high" | "low" | "medium" | "unknown";
|
|
215
|
+
malware?: boolean | undefined;
|
|
216
|
+
severity_from?: string | undefined;
|
|
137
217
|
severity_note?: string | undefined;
|
|
138
218
|
cvss_score: number | null;
|
|
139
219
|
summary: string;
|
|
140
220
|
fixed_version: string | null;
|
|
221
|
+
withheld?: string[] | undefined;
|
|
222
|
+
withheld_note?: string | null | undefined;
|
|
141
223
|
published: string;
|
|
142
224
|
references: string[];
|
|
143
225
|
}[];
|
|
@@ -156,10 +238,14 @@ export declare function formatScanResult(result: VulnerabilityScanResult, severi
|
|
|
156
238
|
aliases: string[];
|
|
157
239
|
severity: "critical" | "high" | "low" | "medium" | "unknown";
|
|
158
240
|
advisory_severity: "critical" | "high" | "low" | "medium" | "unknown";
|
|
241
|
+
malware?: boolean | undefined;
|
|
242
|
+
severity_from?: string | undefined;
|
|
159
243
|
severity_note?: string | undefined;
|
|
160
244
|
cvss_score: number | null;
|
|
161
245
|
summary: string;
|
|
162
246
|
fixed_version: string | null;
|
|
247
|
+
withheld?: string[] | undefined;
|
|
248
|
+
withheld_note?: string | null | undefined;
|
|
163
249
|
published: string;
|
|
164
250
|
references: string[];
|
|
165
251
|
}[];
|
|
@@ -169,14 +255,23 @@ export declare function formatScanResult(result: VulnerabilityScanResult, severi
|
|
|
169
255
|
target: string | null;
|
|
170
256
|
checked: "all_advisories" | "installed_advisories_only";
|
|
171
257
|
note?: string;
|
|
258
|
+
withheld?: string[];
|
|
259
|
+
withheld_note?: string;
|
|
172
260
|
}>;
|
|
173
|
-
clean_dependencies: number;
|
|
261
|
+
clean_dependencies: number | null;
|
|
174
262
|
scan_duration_ms: number;
|
|
175
263
|
_meta: {
|
|
176
264
|
source: string;
|
|
177
265
|
cached: boolean;
|
|
178
266
|
osv_cached: boolean;
|
|
179
267
|
offline: boolean;
|
|
268
|
+
stale_osv_answers?: number | undefined;
|
|
269
|
+
alias_severity?: {
|
|
270
|
+
rated_from_alias: number;
|
|
271
|
+
unresolved: string[];
|
|
272
|
+
ungraded: string[];
|
|
273
|
+
note?: string | undefined;
|
|
274
|
+
} | undefined;
|
|
180
275
|
privacy: string;
|
|
181
276
|
relevance: string;
|
|
182
277
|
severity_rule: string;
|
|
@@ -192,3 +287,10 @@ export declare function formatScanResult(result: VulnerabilityScanResult, severi
|
|
|
192
287
|
};
|
|
193
288
|
};
|
|
194
289
|
};
|
|
290
|
+
/** `_meta.alias_severity`: how many records were graded from a GHSA alias, and which stay unknown, with why. */
|
|
291
|
+
export declare function aliasSeverityMeta(report: AliasSeverityReport): {
|
|
292
|
+
rated_from_alias: number;
|
|
293
|
+
unresolved: string[];
|
|
294
|
+
ungraded: string[];
|
|
295
|
+
note?: string | undefined;
|
|
296
|
+
};
|