@agent-beam/beam 0.2.30 → 0.2.31

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.
@@ -0,0 +1,279 @@
1
+ import { createHash } from "node:crypto";
2
+ import { readdir, readFile, stat } from "node:fs/promises";
3
+ import { basename, join, normalize, relative, sep } from "node:path";
4
+ import { risk, severityRank } from "./core.js";
5
+ import { isSignal, packageComboFindings, scanCode, typosquatOf } from "./package-risk-rules.js";
6
+ const CODE_EXT = /\.(?:js|cjs|mjs|jsx|ts|cts|mts|tsx|py|pyw|pth|sh|bash|zsh|ps1|bat|cmd)$/i;
7
+ const SHELL_EXT = /\.(?:sh|bash|zsh|ps1|bat|cmd)$/i;
8
+ const BINARY_EXT = /\.(?:node|exe|dll|so|dylib)$/i;
9
+ const SKIP_FILE = /\.d\.[cm]?ts$|\.map$/i;
10
+ const MAX_FILES = 2000;
11
+ const MAX_FILE_BYTES = 3 * 1024 * 1024;
12
+ const INSTALL_HOOKS = ["preinstall", "install", "postinstall"];
13
+ const NEW_PACKAGE_DAYS = 30;
14
+ // 0-100, like skillRiskScore. Each rule counts once per package. Critical findings and the
15
+ // malware-shaped pkg.* highs count in full; everything else (borrowed shell rules, CVEs below
16
+ // critical, mediums) is capped below the HIGH band, so a package full of ordinary noise can't
17
+ // look as bad as one with an actual malware shape.
18
+ const WEIGHT = { critical: 40, high: 20, medium: 8, info: 2 };
19
+ export function packageRiskScore(findings) {
20
+ const unique = [...new Map(findings.map(f => [f.id, f])).values()];
21
+ const full = unique.filter(f => f.severity === "critical" || (f.severity === "high" && f.id.startsWith("pkg."))).reduce((s, f) => s + WEIGHT[f.severity], 0);
22
+ const capped = Math.min(35, unique.filter(f => !(f.severity === "critical" || (f.severity === "high" && f.id.startsWith("pkg.")))).reduce((s, f) => s + WEIGHT[f.severity], 0));
23
+ const score = Math.min(100, Math.round(full + capped));
24
+ return { score, level: score >= 70 ? "CRITICAL" : score >= 40 ? "HIGH" : score >= 15 ? "MEDIUM" : "LOW" };
25
+ }
26
+ // Critical means a malware shape (or a critical known vulnerability): don't install without --force.
27
+ export const isPackageBlocked = (scan) => scan.findings.some(f => f.severity === "critical");
28
+ async function listFiles(root, dir = root, out = []) {
29
+ let entries;
30
+ try {
31
+ entries = await readdir(dir, { withFileTypes: true });
32
+ }
33
+ catch {
34
+ return out;
35
+ }
36
+ for (const entry of entries) {
37
+ if (out.length >= MAX_FILES)
38
+ break;
39
+ // Nested node_modules are separate packages, scanned on their own.
40
+ if (entry.isSymbolicLink() || entry.name === "node_modules" || entry.name === ".git" || entry.name === "__pycache__")
41
+ continue;
42
+ const full = join(dir, entry.name);
43
+ if (entry.isDirectory())
44
+ await listFiles(root, full, out);
45
+ else if (entry.isFile())
46
+ out.push(full);
47
+ }
48
+ return out;
49
+ }
50
+ // Files a lifecycle script runs: `node scripts/postinstall.js`, `node -e "require('./install')"`.
51
+ function installTargets(scripts, files) {
52
+ const out = new Set();
53
+ for (const command of Object.values(scripts)) {
54
+ const refs = [...command.matchAll(/\b(?:node|python3?|sh|bash)\s+(?:-\S+\s+)*["']?([\w./@-]+)/g), ...command.matchAll(/(?:require|import)\(\s*\\?["']([\w./@-]+)\\?["']\s*\)/g)].map(m => m[1]);
55
+ for (const ref of refs) {
56
+ const rel = normalize(ref).replace(/^[.][\\/]/, "");
57
+ const hit = [rel, `${rel}.js`, `${rel}.cjs`, `${rel}.mjs`, join(rel, "index.js")].find(c => files.has(c));
58
+ if (hit)
59
+ out.add(hit);
60
+ }
61
+ }
62
+ return out;
63
+ }
64
+ const DEP_SOURCE = /^(?:git\+|git:|github:|gitlab:|bitbucket:|https?:|file:)|^[\w-]+\/[\w.-]+(?:#.*)?$/;
65
+ /** Scan a package's files. Never executes anything; `files` are absolute paths under `root`. */
66
+ export async function scanPackageFiles(root, files, meta) {
67
+ const skipped = [];
68
+ const hash = createHash("sha256");
69
+ const perFile = [];
70
+ const packageFindings = [];
71
+ const rels = new Set(files.map(f => relative(root, f)));
72
+ let installScripts = {};
73
+ if (meta.ecosystem === "npm") {
74
+ let manifest = {};
75
+ try {
76
+ manifest = JSON.parse(await readFile(join(root, "package.json"), "utf8"));
77
+ }
78
+ catch { /* scanned without a manifest */ }
79
+ installScripts = Object.fromEntries(INSTALL_HOOKS.flatMap(h => (typeof manifest.scripts?.[h] === "string" ? [[h, manifest.scripts[h]]] : [])));
80
+ for (const [hook, command] of Object.entries(installScripts)) {
81
+ packageFindings.push({ id: "pkg.install_script", title: "Runs code when installed", severity: "medium", explanation: "npm runs this lifecycle script on every install. Many native and binary-downloading packages need one; it's also how most malicious npm packages get to run.", evidence: `${hook}: ${command}`.slice(0, 200), file: "package.json" });
82
+ // The script line itself is install-time code: `curl ... | sh` written straight into it.
83
+ perFile.push({ file: `package.json#scripts.${hook}`, findings: scanCode(command, { shell: true }) });
84
+ if (/\b(?:curl|wget|Invoke-WebRequest|iwr)\b/.test(command))
85
+ packageFindings.push({ id: "pkg.install_fetch", title: "Install script downloads from the network", severity: "high", explanation: "The lifecycle script itself fetches something on install, outside npm's integrity checks.", evidence: `${hook}: ${command}`.slice(0, 200), file: "package.json" });
86
+ }
87
+ for (const [dep, source] of Object.entries({ ...manifest.dependencies, ...manifest.optionalDependencies })) {
88
+ if (typeof source === "string" && DEP_SOURCE.test(source)) {
89
+ packageFindings.push({ id: "pkg.dependency_source", title: "Dependency from outside the registry", severity: "medium", explanation: "A dependency comes from a git repository, URL or local path, so it isn't a reviewed, immutable registry version.", evidence: `${dep}: ${source}`.slice(0, 200), file: "package.json" });
90
+ break;
91
+ }
92
+ }
93
+ }
94
+ const installTime = meta.ecosystem === "npm" ? installTargets(installScripts, rels) : new Set([...rels].filter(r => r === "setup.py"));
95
+ const binaries = [];
96
+ for (const path of files) {
97
+ const rel = relative(root, path);
98
+ if (BINARY_EXT.test(path)) {
99
+ binaries.push(rel);
100
+ continue;
101
+ }
102
+ if (!CODE_EXT.test(path) || SKIP_FILE.test(path))
103
+ continue;
104
+ let content;
105
+ try {
106
+ if ((await stat(path)).size > MAX_FILE_BYTES) {
107
+ skipped.push(`${rel} (over 3 MB)`);
108
+ continue;
109
+ }
110
+ content = await readFile(path, "utf8");
111
+ }
112
+ catch {
113
+ continue;
114
+ }
115
+ hash.update(`${rel}\0${content}\0`);
116
+ const findings = scanCode(content, { shell: installTime.has(rel) || SHELL_EXT.test(path) });
117
+ // A .pth file in site-packages is executed on every Python start when a line begins with "import".
118
+ if (/\.pth$/i.test(path) && /^import\s/m.test(content)) {
119
+ findings.push({ id: "pkg.pth_exec", title: "Runs code on every Python start", severity: "medium", explanation: "Lines starting with 'import' in a .pth file execute whenever any Python program starts, not just when this package is used.", evidence: content.split(/\r?\n/).find(l => /^import\s/.test(l)).slice(0, 200), line: 1 });
120
+ }
121
+ perFile.push({ file: rel, findings });
122
+ }
123
+ if (binaries.length)
124
+ packageFindings.push({ id: "pkg.native_binary", title: "Ships compiled binaries", severity: "info", explanation: "Compiled code can't be reviewed by reading it. Expected for native addons and tools like esbuild.", evidence: binaries.slice(0, 5).join(", ") + (binaries.length > 5 ? ` (+${binaries.length - 5} more)` : ""), file: binaries[0] });
125
+ if (meta.direct) {
126
+ const lookalike = typosquatOf(meta.name, meta.ecosystem);
127
+ if (lookalike)
128
+ packageFindings.push({ id: "pkg.typosquat", title: `Name is one typo away from "${lookalike}"`, severity: "high", explanation: `Check you meant ${lookalike}. Typosquats copy a popular package's name with one character changed, and AI agents often install names that are close to real ones.`, evidence: `${meta.name} ≈ ${lookalike}`, file: "(name)" });
129
+ }
130
+ if (meta.createdAt && Date.now() - Date.parse(meta.createdAt) < NEW_PACKAGE_DAYS * 86_400_000) {
131
+ packageFindings.push({ id: "pkg.new_package", title: "First published in the last 30 days", severity: "medium", explanation: "A new package has no track record yet. Malicious packages are usually caught and removed within days of publishing.", evidence: `first published ${meta.createdAt.slice(0, 10)}`, file: "(registry)" });
132
+ }
133
+ const ids = (f) => new Set([...f.findings.map(x => x.id), ...(installTime.has(f.file) || f.file.startsWith("package.json#") ? ["install"] : [])]);
134
+ const combos = packageComboFindings(perFile.map(f => ({ file: f.file, ids: ids(f) })), new Set(packageFindings.map(f => f.id)));
135
+ const findings = [...packageFindings, ...perFile.flatMap(f => f.findings.filter(x => !isSignal(x.id)).map(x => ({ ...x, file: f.file }))), ...combos]
136
+ .sort((a, b) => severityRank[b.severity] - severityRank[a.severity]);
137
+ return { ecosystem: meta.ecosystem, name: meta.name, version: meta.version, dir: root, hash: hash.digest("hex"), ...packageRiskScore(findings), risk: risk(findings), findings, filesScanned: perFile.length, skipped, installScripts };
138
+ }
139
+ /** An npm package folder (has package.json). */
140
+ export async function scanNpmPackage(dir, meta = {}) {
141
+ let manifest = {};
142
+ try {
143
+ manifest = JSON.parse(await readFile(join(dir, "package.json"), "utf8"));
144
+ }
145
+ catch { /* use the folder name */ }
146
+ return scanPackageFiles(dir, await listFiles(dir), { ecosystem: "npm", name: manifest.name ?? basename(dir), version: manifest.version ?? "", ...meta });
147
+ }
148
+ // METADATA in a wheel's .dist-info, PKG-INFO in a sdist: `Name:` and `Version:` headers.
149
+ async function pythonMeta(file) {
150
+ try {
151
+ const text = await readFile(file, "utf8");
152
+ const name = text.match(/^Name:\s*(.+)$/m)?.[1]?.trim(), version = text.match(/^Version:\s*(.+)$/m)?.[1]?.trim();
153
+ return name && version ? { name, version } : null;
154
+ }
155
+ catch {
156
+ return null;
157
+ }
158
+ }
159
+ /** An installed Python distribution: the files its .dist-info/RECORD lists, relative to site-packages. */
160
+ export async function scanDistInfo(sitePackages, distInfo, meta = {}) {
161
+ const info = await pythonMeta(join(sitePackages, distInfo, "METADATA"));
162
+ if (!info)
163
+ return null;
164
+ let record = "";
165
+ try {
166
+ record = await readFile(join(sitePackages, distInfo, "RECORD"), "utf8");
167
+ }
168
+ catch { /* no RECORD: scan the metadata folder only */ }
169
+ const files = [...new Set(record.split(/\r?\n/).map(l => l.split(",")[0].trim()).filter(Boolean))]
170
+ // `../../bin/tool` entries point outside site-packages; .pyc is compiled from the .py we scan anyway.
171
+ .filter(p => !p.startsWith("..") && !p.startsWith("/") && !/\.pyc$/.test(p))
172
+ .slice(0, MAX_FILES)
173
+ .map(p => join(sitePackages, p));
174
+ let direct = false;
175
+ try {
176
+ await stat(join(sitePackages, distInfo, "REQUESTED"));
177
+ direct = true;
178
+ }
179
+ catch { /* installed as a dependency */ }
180
+ return scanPackageFiles(sitePackages, files, { ecosystem: "pip", ...info, direct, ...meta });
181
+ }
182
+ /** An unpacked wheel or sdist folder. */
183
+ export async function scanPythonDist(dir, meta = {}) {
184
+ const files = await listFiles(dir);
185
+ const metaFile = files.find(f => /\.dist-info[\\/]METADATA$/.test(f)) ?? files.find(f => relative(dir, f) === "PKG-INFO");
186
+ const info = (metaFile && await pythonMeta(metaFile)) || { name: basename(dir), version: "" };
187
+ return scanPackageFiles(dir, files, { ecosystem: "pip", ...info, ...meta });
188
+ }
189
+ // Every installed npm package folder under a node_modules tree, including scoped packages,
190
+ // nested node_modules and pnpm's .pnpm store. Symlinks are skipped: pnpm's top-level entries
191
+ // link into .pnpm, which is walked directly, so each copy is scanned once.
192
+ export async function findNpmPackages(nodeModules, out = []) {
193
+ let entries;
194
+ try {
195
+ entries = await readdir(nodeModules, { withFileTypes: true });
196
+ }
197
+ catch {
198
+ return out;
199
+ }
200
+ for (const entry of entries) {
201
+ if (!entry.isDirectory() || entry.name === ".bin" || entry.name === ".cache")
202
+ continue;
203
+ const full = join(nodeModules, entry.name);
204
+ if (entry.name === ".pnpm") {
205
+ for (const store of await readdir(full, { withFileTypes: true }).catch(() => []))
206
+ if (store.isDirectory())
207
+ await findNpmPackages(join(full, store.name, "node_modules"), out);
208
+ }
209
+ else if (entry.name.startsWith("@")) {
210
+ for (const scoped of await readdir(full, { withFileTypes: true }).catch(() => []))
211
+ if (scoped.isDirectory())
212
+ await addNpmPackage(join(full, scoped.name), out);
213
+ }
214
+ else
215
+ await addNpmPackage(full, out);
216
+ }
217
+ return out;
218
+ }
219
+ async function addNpmPackage(dir, out) {
220
+ try {
221
+ await stat(join(dir, "package.json"));
222
+ }
223
+ catch {
224
+ return;
225
+ }
226
+ out.push(dir);
227
+ await findNpmPackages(join(dir, "node_modules"), out);
228
+ }
229
+ /** site-packages folders of the virtualenvs in a project (.venv, venv, env), or `dir` itself. */
230
+ export async function findSitePackages(dir) {
231
+ const out = [];
232
+ const hasDistInfo = async (d) => (await readdir(d).catch(() => [])).some(n => n.endsWith(".dist-info"));
233
+ if (await hasDistInfo(dir))
234
+ return [dir];
235
+ for (const venv of [".venv", "venv", "env"]) {
236
+ const windows = join(dir, venv, "Lib", "site-packages");
237
+ if (await hasDistInfo(windows))
238
+ out.push(windows);
239
+ for (const lib of await readdir(join(dir, venv, "lib")).catch(() => [])) {
240
+ const site = join(dir, venv, "lib", lib, "site-packages");
241
+ if (lib.startsWith("python") && await hasDistInfo(site))
242
+ out.push(site);
243
+ }
244
+ }
245
+ return out;
246
+ }
247
+ /** `beam packages scan`: everything installed under a project (node_modules and virtualenvs). */
248
+ export async function scanInstalledPackages(dir, onProgress) {
249
+ const roots = [];
250
+ // Direct dependencies get the typosquat check; they're what someone actually typed.
251
+ let direct = new Set();
252
+ try {
253
+ const manifest = JSON.parse(await readFile(join(dir, "package.json"), "utf8"));
254
+ direct = new Set(["dependencies", "devDependencies", "optionalDependencies", "peerDependencies"].flatMap(k => Object.keys(manifest[k] ?? {})));
255
+ }
256
+ catch { /* not an npm project */ }
257
+ const npmDirs = await findNpmPackages(join(dir, "node_modules"));
258
+ if (npmDirs.length)
259
+ roots.push(join(dir, "node_modules"));
260
+ const sites = await findSitePackages(dir);
261
+ roots.push(...sites);
262
+ const pyDists = (await Promise.all(sites.map(async (site) => (await readdir(site)).filter(n => n.endsWith(".dist-info")).map(d => [site, d])))).flat();
263
+ const total = npmDirs.length + pyDists.length;
264
+ const scans = [];
265
+ for (const pkgDir of npmDirs) {
266
+ // The installed name is the path after the last node_modules/ (one segment, or two when scoped).
267
+ const name = pkgDir.split(`node_modules${sep}`).pop().split(sep).join("/");
268
+ scans.push(await scanNpmPackage(pkgDir, { direct: direct.has(name) }));
269
+ onProgress?.(scans.length, total);
270
+ }
271
+ for (const [site, distInfo] of pyDists) {
272
+ const scan = await scanDistInfo(site, distInfo);
273
+ if (scan)
274
+ scans.push(scan);
275
+ onProgress?.(scans.length, total);
276
+ }
277
+ return { scans, roots };
278
+ }
279
+ //# sourceMappingURL=package-scan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-scan.js","sourceRoot":"","sources":["../src/package-scan.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import { type Vulnerability } from "./monitor-client.js";
2
+ import { type PackageEcosystem, type PackageScan } from "./package-scan.js";
3
+ export declare function parseSpec(spec: string, ecosystem: PackageEcosystem): {
4
+ name: string;
5
+ range?: string;
6
+ };
7
+ export type AddPackageOptions = {
8
+ pip?: boolean;
9
+ dev?: boolean;
10
+ global?: boolean;
11
+ force?: boolean;
12
+ scanOnly?: boolean;
13
+ cve?: boolean;
14
+ python?: string;
15
+ cwd?: string;
16
+ };
17
+ export type AddPackageResult = {
18
+ spec: string;
19
+ ecosystem: PackageEcosystem;
20
+ name: string;
21
+ version: string;
22
+ /** The requested package first, then its dependencies. */
23
+ scans: PackageScan[];
24
+ vulnerabilities: Vulnerability[];
25
+ notes: string[];
26
+ blocked: string[];
27
+ install?: {
28
+ command: string;
29
+ args: string[];
30
+ };
31
+ };
32
+ export declare function attachVulnerabilities(scans: PackageScan[], notes: string[]): Promise<Vulnerability[]>;
33
+ /** The command that installs exactly the scanned version with the project's own package manager. */
34
+ export declare function installCommand(ecosystem: PackageEcosystem, name: string, version: string, options?: AddPackageOptions): {
35
+ command: string;
36
+ args: string[];
37
+ };
38
+ export declare function addPackage(spec: string, options?: AddPackageOptions): Promise<AddPackageResult>;
39
+ /** Runs the install step from addPackage, streaming the package manager's own output to stderr. */
40
+ export declare function runInstall(install: {
41
+ command: string;
42
+ args: string[];
43
+ }, cwd?: string): Promise<void>;
@@ -0,0 +1,228 @@
1
+ // `beam add package`: fetch a package and its whole dependency tree into a throwaway folder
2
+ // without running any of it, scan every package, check known vulnerabilities when this machine
3
+ // is connected, and only then install the exact version that was scanned.
4
+ import { execFile, spawn } from "node:child_process";
5
+ import { createHash } from "node:crypto";
6
+ import { existsSync } from "node:fs";
7
+ import { mkdir, mkdtemp, readdir, rm, writeFile } from "node:fs/promises";
8
+ import { tmpdir } from "node:os";
9
+ import { join } from "node:path";
10
+ import { promisify } from "node:util";
11
+ import { risk } from "./core.js";
12
+ import { checkPackages, monitorAuth } from "./monitor-client.js";
13
+ import { normalizePipName } from "./package-risk-rules.js";
14
+ import { findNpmPackages, isPackageBlocked, packageRiskScore, scanNpmPackage, scanPythonDist } from "./package-scan.js";
15
+ const run = promisify(execFile);
16
+ const shell = process.platform === "win32";
17
+ // Registry names with an optional exact version, tag, caret, tilde or x-range. Git URLs, tarball
18
+ // URLs and paths are refused: they can't be pinned to what was scanned. Nothing here can start
19
+ // with "-", so a spec is never read as an option.
20
+ const NPM_SPEC = /^((?:@[a-z0-9][\w.-]*\/)?[a-z0-9][\w.-]*)(?:@([\w.^~*+-]+))?$/i;
21
+ const PIP_SPEC = /^([A-Za-z0-9][A-Za-z0-9._-]*)(?:\[[\w,.-]+\])?(?:(==|~=|>=|<=|!=)([\w.*+!-]+))?$/;
22
+ export function parseSpec(spec, ecosystem) {
23
+ if (ecosystem === "npm") {
24
+ const m = spec.match(NPM_SPEC);
25
+ if (!m)
26
+ throw new Error(`"${spec}" isn't an npm registry package (name or name@version). Git URLs, tarballs and paths can't be pinned to the scanned version.`);
27
+ return { name: m[1], range: m[2] };
28
+ }
29
+ const m = spec.match(PIP_SPEC);
30
+ if (!m)
31
+ throw new Error(`"${spec}" isn't a PyPI requirement (name, name==1.2.3, name>=1.2). Quote it if your shell split it.`);
32
+ return { name: m[1], range: m[2] ? `${m[2]}${m[3]}` : undefined };
33
+ }
34
+ const pythonCommand = (options) => options.python ?? (process.platform === "win32" ? "python" : "python3");
35
+ // First publish date, for the "brand-new package" signal. Best effort: a private registry or a
36
+ // slow network just means the check is skipped.
37
+ async function npmCreated(name) {
38
+ try {
39
+ const { stdout } = await run("npm", ["view", name, "time.created", "--json"], { timeout: 15_000, shell });
40
+ const value = JSON.parse(stdout);
41
+ return typeof value === "string" ? value : undefined;
42
+ }
43
+ catch {
44
+ return undefined;
45
+ }
46
+ }
47
+ async function pypiJson(name, version) {
48
+ try {
49
+ const response = await fetch(`https://pypi.org/pypi/${encodeURIComponent(name)}${version ? `/${encodeURIComponent(version)}` : ""}/json`, { signal: AbortSignal.timeout(15_000) });
50
+ return response.ok ? (await response.json()) : undefined;
51
+ }
52
+ catch {
53
+ return undefined;
54
+ }
55
+ }
56
+ async function pypiCreated(name) {
57
+ const uploads = Object.values((await pypiJson(name))?.releases ?? {}).flat().map(f => f.upload_time_iso_8601).filter((t) => Boolean(t)).sort();
58
+ return uploads[0];
59
+ }
60
+ // npm resolves the full tree into the staging folder. --ignore-scripts means no lifecycle script
61
+ // of any package runs; nothing is executed until the scan passes.
62
+ async function stageNpm(spec, name, staging) {
63
+ await writeFile(join(staging, "package.json"), JSON.stringify({ name: "beam-package-scan", private: true }));
64
+ try {
65
+ await run("npm", ["install", spec, "--ignore-scripts", "--no-audit", "--no-fund", "--package-lock=false", "--loglevel=error"], { cwd: staging, timeout: 300_000, maxBuffer: 16 * 1024 * 1024, shell });
66
+ }
67
+ catch (e) {
68
+ const stderr = e.stderr?.trim().split("\n").slice(-3).join("\n");
69
+ throw new Error(`npm couldn't fetch ${spec}${stderr ? `:\n${stderr}` : "."}`);
70
+ }
71
+ const top = join(staging, "node_modules", ...name.split("/"));
72
+ const createdAt = await npmCreated(name);
73
+ const first = await scanNpmPackage(top, { direct: true, createdAt });
74
+ const rest = [];
75
+ for (const dir of await findNpmPackages(join(staging, "node_modules")))
76
+ if (dir !== top)
77
+ rest.push(await scanNpmPackage(dir));
78
+ return { version: first.version, scans: [first, ...rest] };
79
+ }
80
+ // Wheels only, so pip never builds anything: building a source distribution runs its setup.py,
81
+ // which is exactly the code under suspicion. When the package has no wheel, its sdist is
82
+ // downloaded straight from PyPI (hash-checked) and unpacked, not built.
83
+ async function stagePip(spec, name, range, staging, options, notes) {
84
+ const python = pythonCommand(options);
85
+ const downloads = join(staging, "dl");
86
+ await mkdir(downloads);
87
+ let wheels = [];
88
+ let pipError;
89
+ try {
90
+ await run(python, ["-m", "pip", "download", spec, "--only-binary=:all:", "--dest", downloads, "--quiet", "--disable-pip-version-check", "--no-input"], { timeout: 300_000, maxBuffer: 16 * 1024 * 1024 });
91
+ wheels = (await readdir(downloads)).filter(f => f.endsWith(".whl"));
92
+ }
93
+ catch (e) {
94
+ if (e.code === "ENOENT")
95
+ throw new Error(`${python} wasn't found. Pass --python <path> to the interpreter you install into.`);
96
+ pipError = e.stderr?.trim().split("\n").pop();
97
+ }
98
+ const createdAt = await pypiCreated(name);
99
+ const scans = [];
100
+ const wanted = normalizePipName(name);
101
+ for (const wheel of wheels) {
102
+ const out = join(staging, "unpacked", wheel);
103
+ await mkdir(out, { recursive: true });
104
+ // -I: isolated mode, so nothing in the staging folder or the environment is imported.
105
+ await run(python, ["-I", "-m", "zipfile", "-e", join(downloads, wheel), out], { timeout: 120_000 });
106
+ const isTop = normalizePipName(wheel.split("-")[0]) === wanted;
107
+ scans.push(await scanPythonDist(out, isTop ? { direct: true, createdAt } : {}));
108
+ }
109
+ scans.sort((a, b) => Number(normalizePipName(b.name) === wanted) - Number(normalizePipName(a.name) === wanted));
110
+ if (scans[0] && normalizePipName(scans[0].name) === wanted)
111
+ return { version: scans[0].version, scans };
112
+ const exact = range?.startsWith("==") ? range.slice(2) : undefined;
113
+ if (range && !exact)
114
+ throw new Error(`${name} has no wheel for this Python, and its source distribution can only be fetched by exact version (${name}==x.y.z).`);
115
+ const release = await pypiJson(name, exact);
116
+ const sdist = release?.urls?.find(u => u.packagetype === "sdist");
117
+ if (!release?.info || !sdist)
118
+ throw new Error(`Couldn't find ${spec} on PyPI.`);
119
+ const archive = join(downloads, sdist.filename.replace(/[^\w.-]/g, "_"));
120
+ const response = await fetch(sdist.url, { signal: AbortSignal.timeout(120_000) });
121
+ if (!response.ok)
122
+ throw new Error(`PyPI responded with HTTP ${response.status} for ${sdist.filename}.`);
123
+ const bytes = Buffer.from(await response.arrayBuffer());
124
+ if (createHash("sha256").update(bytes).digest("hex") !== sdist.digests.sha256)
125
+ throw new Error(`${sdist.filename} doesn't match the hash PyPI publishes for it; not scanning it.`);
126
+ await writeFile(archive, bytes);
127
+ const out = join(staging, "unpacked", "sdist");
128
+ await mkdir(out, { recursive: true });
129
+ if (/\.zip$/i.test(archive))
130
+ await run(python, ["-I", "-m", "zipfile", "-e", archive, out], { timeout: 120_000 });
131
+ else
132
+ await run("tar", ["-xzf", archive, "-C", out], { timeout: 120_000 });
133
+ const [root] = await readdir(out);
134
+ const scan = await scanPythonDist(root ? join(out, root) : out, { version: release.info.version, direct: true, createdAt });
135
+ notes.push(`pip couldn't fetch wheels for ${spec} and all its dependencies${pipError ? ` (${pipError})` : ""}, so only ${name}'s source distribution was scanned. Its setup.py runs at install; its dependencies weren't checked.`);
136
+ return { version: release.info.version, scans: [scan] };
137
+ }
138
+ // Known vulnerabilities from the workspace's database, for every scanned package. Only names and
139
+ // versions are sent. Skipped (with a note) when the machine isn't connected.
140
+ export async function attachVulnerabilities(scans, notes) {
141
+ let identity;
142
+ try {
143
+ identity = await monitorAuth();
144
+ }
145
+ catch (e) {
146
+ notes.push(`Known-vulnerability check skipped: ${e.message}`);
147
+ return [];
148
+ }
149
+ if (!identity) {
150
+ notes.push("Known-vulnerability check skipped: run 'beam connect' (or set BEAM_APP_TOKEN) to also check CVEs.");
151
+ return [];
152
+ }
153
+ const packages = scans.filter(s => s.version).map(s => ({ ecosystem: s.ecosystem, name: s.name, version: s.version, file: `${s.name}@${s.version}` }));
154
+ if (!packages.length)
155
+ return [];
156
+ const response = await checkPackages(identity, packages);
157
+ if (!response.ok) {
158
+ notes.push(`Known-vulnerability check skipped: ${response.message}`);
159
+ return [];
160
+ }
161
+ const vulns = response.result.vulnerabilities;
162
+ const severity = (s) => (s === "critical" ? "critical" : s === "high" ? "high" : s === "low" ? "info" : "medium");
163
+ for (const scan of scans) {
164
+ const own = vulns.filter(v => v.ecosystem === scan.ecosystem && v.name === scan.name && v.version === scan.version);
165
+ if (!own.length)
166
+ continue;
167
+ // Actively exploited (CISA KEV) counts as critical whatever its CVSS rating.
168
+ scan.findings.unshift(...own.map(v => ({ id: `cve.${v.id}`, title: `Known vulnerability ${v.id}: ${v.title}`, severity: v.kev ? "critical" : severity(v.severity), explanation: v.patched ? `Fixed in ${v.patched}. ${v.url}` : `No fixed version yet. ${v.url}`, evidence: `${v.name} ${v.version} matches ${v.vulnerable}`, file: "(advisory)" })));
169
+ Object.assign(scan, packageRiskScore(scan.findings), { risk: risk(scan.findings) });
170
+ }
171
+ return vulns;
172
+ }
173
+ function detectManager(cwd) {
174
+ if (existsSync(join(cwd, "pnpm-lock.yaml")))
175
+ return "pnpm";
176
+ if (existsSync(join(cwd, "yarn.lock")))
177
+ return "yarn";
178
+ if (existsSync(join(cwd, "bun.lock")) || existsSync(join(cwd, "bun.lockb")))
179
+ return "bun";
180
+ return "npm";
181
+ }
182
+ /** The command that installs exactly the scanned version with the project's own package manager. */
183
+ export function installCommand(ecosystem, name, version, options = {}) {
184
+ if (ecosystem === "pip")
185
+ return { command: pythonCommand(options), args: ["-m", "pip", "install", `${name}==${version}`, ...(options.global ? ["--user"] : [])] };
186
+ const pinned = `${name}@${version}`;
187
+ if (options.global)
188
+ return { command: "npm", args: ["install", "-g", pinned] };
189
+ const manager = detectManager(options.cwd ?? process.cwd());
190
+ const dev = options.dev ? [{ npm: "--save-dev", pnpm: "-D", yarn: "--dev", bun: "--dev" }[manager]] : [];
191
+ return { command: manager, args: [manager === "npm" ? "install" : "add", pinned, ...dev] };
192
+ }
193
+ export async function addPackage(spec, options = {}) {
194
+ const ecosystem = options.pip ? "pip" : "npm";
195
+ if (ecosystem === "pip" && options.dev)
196
+ throw new Error("--dev applies to npm packages only.");
197
+ const { name, range } = parseSpec(spec, ecosystem);
198
+ const notes = [];
199
+ const staging = await mkdtemp(join(tmpdir(), "beam-package-"));
200
+ try {
201
+ const { version, scans } = ecosystem === "npm" ? await stageNpm(spec, name, staging) : await stagePip(spec, name, range, staging, options, notes);
202
+ // The version comes from the downloaded package's own metadata, and on Windows the install runs
203
+ // through a shell: anything beyond a plain version string is refused.
204
+ if (!/^[\w.+!-]+$/.test(version))
205
+ throw new Error(`${name} reports an invalid version "${version.slice(0, 40)}"; not installing it.`);
206
+ const vulnerabilities = options.cve === false ? [] : await attachVulnerabilities(scans, notes);
207
+ // Staging paths are gone once this returns; report where each package sits in the tree instead.
208
+ for (const scan of scans)
209
+ scan.dir = `${scan.name}@${scan.version}`;
210
+ const blocked = scans.filter(isPackageBlocked).map(s => `${s.name}@${s.version}`);
211
+ const result = { spec, ecosystem, name, version, scans, vulnerabilities, notes, blocked };
212
+ if (!options.scanOnly && (!blocked.length || options.force))
213
+ result.install = installCommand(ecosystem, name, version, options);
214
+ return result;
215
+ }
216
+ finally {
217
+ await rm(staging, { recursive: true, force: true });
218
+ }
219
+ }
220
+ /** Runs the install step from addPackage, streaming the package manager's own output to stderr. */
221
+ export function runInstall(install, cwd = process.cwd()) {
222
+ return new Promise((resolve, reject) => {
223
+ const child = spawn(install.command, install.args, { cwd, stdio: ["ignore", process.stderr, process.stderr], shell });
224
+ child.on("error", reject);
225
+ child.on("exit", code => (code === 0 ? resolve() : reject(new Error(`${install.command} ${install.args.join(" ")} exited with code ${code}.`))));
226
+ });
227
+ }
228
+ //# sourceMappingURL=packages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"packages.js","sourceRoot":"","sources":["../src/packages.ts"],"names":[],"mappings":"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"}
package/dist/sdk.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import type { MonitorSeverity } from "./monitor-client.js";
2
2
  export interface AppMonitorOptions {
3
- /** The app's token from the dashboard (App monitoring > Apps). Default: BEAM_APP_TOKEN. */
3
+ /** The app's token from the dashboard (App monitoring > Settings, apps and alerts). Default: BEAM_APP_TOKEN. */
4
4
  token?: string;
5
5
  /** Default: BEAM_DASHBOARD_URL, else https://app.agentbeam.com. Must be https (localhost excepted). */
6
6
  dashboardUrl?: string;
@@ -0,0 +1,2 @@
1
+ import type { Command } from "commander";
2
+ export declare function registerShareCommands(program: Command): void;