blitzstrike 2.4.98 → 2.4.100
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 +22 -0
- package/dist/index.js +61 -50
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,28 @@ All notable changes to Blitz Strike are documented here.
|
|
|
5
5
|
The format follows [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/).
|
|
7
7
|
|
|
8
|
+
## [2.4.100] — 2026-09-17
|
|
9
|
+
|
|
10
|
+
### Fixed — data-file resolution was `process.cwd()`-dependent (broke under npx)
|
|
11
|
+
|
|
12
|
+
- `watchlist()` / `watchlistCveMatches()` resolved `intelligence/watchlist.json`
|
|
13
|
+
via `process.cwd()`; `run_enterprise_benchmark()` resolved `bench/enterprise`
|
|
14
|
+
fixtures the same way. When the MCP server / compiled binary runs from any
|
|
15
|
+
directory other than the package root (the `npx blitzstrike` case), both threw
|
|
16
|
+
`ENOENT`. Now both resolve via `import.meta.url` (module-relative), matching
|
|
17
|
+
every other data loader (`patterns.ts`, `chains.json`, `tools-catalog.json`).
|
|
18
|
+
Verified: `watchlist()` and the enterprise fixtures load from an arbitrary cwd.
|
|
19
|
+
|
|
20
|
+
## [2.4.99] — 2026-09-17
|
|
21
|
+
|
|
22
|
+
### Fixed — grounding completeness for the CVE watchlist class tags
|
|
23
|
+
|
|
24
|
+
- The CVE watchlist's `class` tags (`auth_bypass`, `infoleak`) did not resolve
|
|
25
|
+
to a detector pattern. Added synonyms (`auth bypass`/`authentication bypass`
|
|
26
|
+
→ `type_juggling`; `infoleak`/`info|information disclosure|exposure|leak` →
|
|
27
|
+
`hardcoded_secret`). Every one of the 18 CVE class tags now resolves to a
|
|
28
|
+
grounded pattern (locked by a regression check).
|
|
29
|
+
|
|
8
30
|
## [2.4.98] — 2026-09-17
|
|
9
31
|
|
|
10
32
|
### Added — fingerprint-first CVE matching wired into live_recon
|
package/dist/index.js
CHANGED
|
@@ -17287,7 +17287,7 @@ document.getElementById('out').innerHTML = u;
|
|
|
17287
17287
|
// src/variants.ts
|
|
17288
17288
|
import { readFileSync as readFileSync21 } from "node:fs";
|
|
17289
17289
|
import { join as join21, dirname as dirname5 } from "node:path";
|
|
17290
|
-
import { fileURLToPath as
|
|
17290
|
+
import { fileURLToPath as fileURLToPath12 } from "node:url";
|
|
17291
17291
|
function loadVariants() {
|
|
17292
17292
|
try {
|
|
17293
17293
|
const doc = JSON.parse(readFileSync21(join21(__dirname5, "..", "intelligence", "variants.json"), "utf8"));
|
|
@@ -17344,7 +17344,7 @@ function variantCoverageText() {
|
|
|
17344
17344
|
var __dirname5, CROSS_FILE_ONLY;
|
|
17345
17345
|
var init_variants = __esm(() => {
|
|
17346
17346
|
init_complex_bugs();
|
|
17347
|
-
__dirname5 = dirname5(
|
|
17347
|
+
__dirname5 = dirname5(fileURLToPath12(import.meta.url));
|
|
17348
17348
|
CROSS_FILE_ONLY = new Set(["priv_esc"]);
|
|
17349
17349
|
});
|
|
17350
17350
|
|
|
@@ -17352,7 +17352,7 @@ var init_variants = __esm(() => {
|
|
|
17352
17352
|
import { mkdirSync as mkdirSync10, writeFileSync as writeFileSync9, readFileSync as readFileSync27, readdirSync as readdirSync7, statSync as statSync4, rmSync as rmSync5 } from "node:fs";
|
|
17353
17353
|
import { join as join26 } from "node:path";
|
|
17354
17354
|
import { homedir as homedir10 } from "node:os";
|
|
17355
|
-
import { fileURLToPath as
|
|
17355
|
+
import { fileURLToPath as fileURLToPath15 } from "node:url";
|
|
17356
17356
|
import { spawnSync as spawnSync4 } from "node:child_process";
|
|
17357
17357
|
function dirExists(p) {
|
|
17358
17358
|
try {
|
|
@@ -17392,8 +17392,8 @@ function syncData() {
|
|
|
17392
17392
|
data_root: DATA_ROOT2
|
|
17393
17393
|
};
|
|
17394
17394
|
}
|
|
17395
|
-
const localPayloads = join26(
|
|
17396
|
-
const localTemplates = join26(
|
|
17395
|
+
const localPayloads = join26(ROOT8, "payloads");
|
|
17396
|
+
const localTemplates = join26(ROOT8, "templates");
|
|
17397
17397
|
let payloadsSynced = false;
|
|
17398
17398
|
let templatesSynced = false;
|
|
17399
17399
|
if (!hasPayloads && dirExists(localPayloads)) {
|
|
@@ -17448,9 +17448,9 @@ function manualCopy(src, dst) {
|
|
|
17448
17448
|
writeFileSync9(d, readFileSync27(s));
|
|
17449
17449
|
}
|
|
17450
17450
|
}
|
|
17451
|
-
var
|
|
17451
|
+
var ROOT8, DATA_ROOT2, GITHUB_REPO = "https://github.com/shinthink/blitzstrike.git";
|
|
17452
17452
|
var init_sync = __esm(() => {
|
|
17453
|
-
|
|
17453
|
+
ROOT8 = join26(fileURLToPath15(new URL(".", import.meta.url)), "..");
|
|
17454
17454
|
DATA_ROOT2 = process.env.BLITZSTRIKE_DATA ?? join26(homedir10(), ".blitzstrike", "data");
|
|
17455
17455
|
});
|
|
17456
17456
|
|
|
@@ -17498,13 +17498,13 @@ var init_update = __esm(() => {
|
|
|
17498
17498
|
// src/release.ts
|
|
17499
17499
|
import { readFileSync as readFileSync29, existsSync as existsSync16 } from "node:fs";
|
|
17500
17500
|
import { join as join27 } from "node:path";
|
|
17501
|
-
import { fileURLToPath as
|
|
17501
|
+
import { fileURLToPath as fileURLToPath16 } from "node:url";
|
|
17502
17502
|
import { execSync as execSync4 } from "node:child_process";
|
|
17503
17503
|
function validateRelease() {
|
|
17504
17504
|
const checks = [];
|
|
17505
17505
|
checks.push({ name: "package.json version", ok: true, detail: VERSION });
|
|
17506
17506
|
try {
|
|
17507
|
-
const changelog = readFileSync29(join27(
|
|
17507
|
+
const changelog = readFileSync29(join27(ROOT9, "CHANGELOG.md"), "utf8");
|
|
17508
17508
|
const m = changelog.match(/^##\s+\[([0-9]+\.[0-9]+\.[0-9]+)\]/m);
|
|
17509
17509
|
const changelogVersion = m?.[1] ?? null;
|
|
17510
17510
|
checks.push({
|
|
@@ -17516,7 +17516,7 @@ function validateRelease() {
|
|
|
17516
17516
|
checks.push({ name: "CHANGELOG version", ok: false, detail: "CHANGELOG.md not found" });
|
|
17517
17517
|
}
|
|
17518
17518
|
try {
|
|
17519
|
-
const tag = execSync4("git describe --tags --abbrev=0", { cwd:
|
|
17519
|
+
const tag = execSync4("git describe --tags --abbrev=0", { cwd: ROOT9, encoding: "utf8", stdio: ["ignore", "pipe", "ignore"] }).trim();
|
|
17520
17520
|
checks.push({ name: "Git tag", ok: tag === `v${VERSION}`, detail: tag, soft: true });
|
|
17521
17521
|
} catch {
|
|
17522
17522
|
checks.push({ name: "Git tag", ok: true, detail: "unavailable (no git/tags)", soft: true });
|
|
@@ -17536,22 +17536,22 @@ function validateRelease() {
|
|
|
17536
17536
|
return { version: VERSION, checks, consistent: checks.filter((c) => !c.soft).every((c) => c.ok) };
|
|
17537
17537
|
}
|
|
17538
17538
|
function lockfilePresent() {
|
|
17539
|
-
return existsSync16(join27(
|
|
17539
|
+
return existsSync16(join27(ROOT9, "package-lock.json")) || existsSync16(join27(ROOT9, "bun.lock")) || existsSync16(join27(ROOT9, "bun.lockb"));
|
|
17540
17540
|
}
|
|
17541
|
-
var
|
|
17541
|
+
var ROOT9;
|
|
17542
17542
|
var init_release = __esm(() => {
|
|
17543
17543
|
init_version();
|
|
17544
|
-
|
|
17544
|
+
ROOT9 = join27(fileURLToPath16(new URL(".", import.meta.url)), "..");
|
|
17545
17545
|
});
|
|
17546
17546
|
|
|
17547
17547
|
// src/dependency.ts
|
|
17548
17548
|
import { readFileSync as readFileSync30 } from "node:fs";
|
|
17549
17549
|
import { join as join28 } from "node:path";
|
|
17550
|
-
import { fileURLToPath as
|
|
17550
|
+
import { fileURLToPath as fileURLToPath17 } from "node:url";
|
|
17551
17551
|
function checkDependencies() {
|
|
17552
17552
|
let pkg = {};
|
|
17553
17553
|
try {
|
|
17554
|
-
pkg = JSON.parse(readFileSync30(join28(
|
|
17554
|
+
pkg = JSON.parse(readFileSync30(join28(ROOT10, "package.json"), "utf8"));
|
|
17555
17555
|
} catch {
|
|
17556
17556
|
return { install_scripts: [], git_dependencies: [], total_dependencies: 0, safe: false };
|
|
17557
17557
|
}
|
|
@@ -17572,16 +17572,16 @@ function checkDependencies() {
|
|
|
17572
17572
|
safe: installScripts.length === 0 && gitDependencies.length === 0
|
|
17573
17573
|
};
|
|
17574
17574
|
}
|
|
17575
|
-
var
|
|
17575
|
+
var ROOT10;
|
|
17576
17576
|
var init_dependency = __esm(() => {
|
|
17577
|
-
|
|
17577
|
+
ROOT10 = join28(fileURLToPath17(new URL(".", import.meta.url)), "..");
|
|
17578
17578
|
});
|
|
17579
17579
|
|
|
17580
17580
|
// src/cli.ts
|
|
17581
17581
|
import { readFileSync as readFileSync31, existsSync as existsSync17, writeFileSync as writeFileSync10, mkdirSync as mkdirSync11 } from "node:fs";
|
|
17582
17582
|
import { join as join29, dirname as dirname6 } from "node:path";
|
|
17583
17583
|
import { homedir as homedir11 } from "node:os";
|
|
17584
|
-
import { fileURLToPath as
|
|
17584
|
+
import { fileURLToPath as fileURLToPath18 } from "node:url";
|
|
17585
17585
|
import { spawnSync as spawnSync5 } from "node:child_process";
|
|
17586
17586
|
function which(cmd) {
|
|
17587
17587
|
return spawnSync5("sh", ["-c", 'command -v "$1" >/dev/null 2>&1', "sh", cmd]).status === 0;
|
|
@@ -17624,7 +17624,7 @@ async function runDoctor() {
|
|
|
17624
17624
|
detail: h1 ? `X-HackerOne-Research: ${h1}` : "H1_USERNAME not set",
|
|
17625
17625
|
fix: h1 ? undefined : "export H1_USERNAME=<your-hackerone-username> (adds X-HackerOne-Research to outbound requests)"
|
|
17626
17626
|
});
|
|
17627
|
-
const dataOk = existsSync17(join29(
|
|
17627
|
+
const dataOk = existsSync17(join29(ROOT11, "chains.json")) && existsSync17(join29(ROOT11, "tools-catalog.json"));
|
|
17628
17628
|
issues.push({
|
|
17629
17629
|
name: "Data layers (chains + tools-catalog)",
|
|
17630
17630
|
status: dataOk ? "ok" : "fail",
|
|
@@ -17675,14 +17675,14 @@ BlitzStrike — ${verdict}`);
|
|
|
17675
17675
|
function resolveCommand() {
|
|
17676
17676
|
if (which("blitzstrike"))
|
|
17677
17677
|
return { command: "blitzstrike", args: ["serve", "--mcp"] };
|
|
17678
|
-
const src = join29(
|
|
17678
|
+
const src = join29(ROOT11, "src", "index.ts");
|
|
17679
17679
|
if (which("bun") && existsSync17(src))
|
|
17680
17680
|
return { command: "bun", args: ["run", src, "serve", "--mcp"] };
|
|
17681
17681
|
if (which("npx"))
|
|
17682
17682
|
return { command: "npx", args: ["-y", "blitzstrike", "serve", "--mcp"] };
|
|
17683
17683
|
if (which("bunx"))
|
|
17684
17684
|
return { command: "bunx", args: ["blitzstrike", "serve", "--mcp"] };
|
|
17685
|
-
const dist = join29(
|
|
17685
|
+
const dist = join29(ROOT11, "dist", "index.js");
|
|
17686
17686
|
if (existsSync17(dist))
|
|
17687
17687
|
return { command: "bun", args: [dist, "serve", "--mcp"] };
|
|
17688
17688
|
return { command: "npx", args: ["-y", "blitzstrike", "serve", "--mcp"] };
|
|
@@ -17722,7 +17722,7 @@ function opencodeWrite(p) {
|
|
|
17722
17722
|
};
|
|
17723
17723
|
}
|
|
17724
17724
|
function copyOpenCodeAgents() {
|
|
17725
|
-
const srcDir = join29(
|
|
17725
|
+
const srcDir = join29(ROOT11, "opencode-agents");
|
|
17726
17726
|
const dstDir = join29(homedir11(), ".config", "opencode", "agents");
|
|
17727
17727
|
if (!existsSync17(srcDir))
|
|
17728
17728
|
return;
|
|
@@ -17966,13 +17966,13 @@ Failed (${failedList.length}) — reason per tool:`);
|
|
|
17966
17966
|
Common causes: missing toolchain, pip/git network failures, or very heavy builds. ` + `Re-run after installing the missing toolchain — failed tools are skipped, not fatal.`);
|
|
17967
17967
|
}
|
|
17968
17968
|
}
|
|
17969
|
-
var
|
|
17969
|
+
var ROOT11;
|
|
17970
17970
|
var init_cli = __esm(() => {
|
|
17971
17971
|
init_catalog();
|
|
17972
17972
|
init_release();
|
|
17973
17973
|
init_dependency();
|
|
17974
17974
|
init_mcp_status();
|
|
17975
|
-
|
|
17975
|
+
ROOT11 = join29(fileURLToPath18(new URL(".", import.meta.url)), "..");
|
|
17976
17976
|
});
|
|
17977
17977
|
|
|
17978
17978
|
// node_modules/zod/v3/helpers/util.js
|
|
@@ -32695,7 +32695,7 @@ async function nvdLookup(cveId) {
|
|
|
32695
32695
|
init_scanner();
|
|
32696
32696
|
import { readFileSync as readFileSync11, existsSync as existsSync8, statSync as statSync2 } from "node:fs";
|
|
32697
32697
|
import { join as join13 } from "node:path";
|
|
32698
|
-
import { fileURLToPath as
|
|
32698
|
+
import { fileURLToPath as fileURLToPath7 } from "node:url";
|
|
32699
32699
|
|
|
32700
32700
|
// src/memory.ts
|
|
32701
32701
|
import { readFileSync as readFileSync2, appendFileSync, mkdirSync, existsSync, writeFileSync } from "node:fs";
|
|
@@ -34489,6 +34489,14 @@ var ALIASES = {
|
|
|
34489
34489
|
"hardcoded credential": "hardcoded_secret",
|
|
34490
34490
|
"hardcoded secret": "hardcoded_secret",
|
|
34491
34491
|
"credential leak": "hardcoded_secret",
|
|
34492
|
+
"auth bypass": "type_juggling",
|
|
34493
|
+
"authentication bypass": "type_juggling",
|
|
34494
|
+
auth_bypass: "type_juggling",
|
|
34495
|
+
infoleak: "hardcoded_secret",
|
|
34496
|
+
"info leak": "hardcoded_secret",
|
|
34497
|
+
"information leak": "hardcoded_secret",
|
|
34498
|
+
"information disclosure": "hardcoded_secret",
|
|
34499
|
+
"information exposure": "hardcoded_secret",
|
|
34492
34500
|
"hard coded credentials": "hardcoded_secret",
|
|
34493
34501
|
"priv esc": "priv_esc",
|
|
34494
34502
|
privesc: "priv_esc",
|
|
@@ -36072,6 +36080,8 @@ import { execFileSync } from "node:child_process";
|
|
|
36072
36080
|
import { resolve4, Resolver } from "node:dns/promises";
|
|
36073
36081
|
import { readFileSync as readFileSync10 } from "node:fs";
|
|
36074
36082
|
import { join as join12 } from "node:path";
|
|
36083
|
+
import { fileURLToPath as fileURLToPath6 } from "node:url";
|
|
36084
|
+
var ROOT4 = join12(fileURLToPath6(new URL(".", import.meta.url)), "..");
|
|
36075
36085
|
var BLOCKING_KEYWORDS = /internet positif|kominfo|\.go\.id\b|pemblokiran|ditutup|dilarang|akses dibatasi|blocked|restricted|illegal|advertencia|coljuegos|regulat|forbidden|this (site|website) has been (blocked|banned)/i;
|
|
36076
36086
|
var HOSTNAME_RE = /^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?(\.[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)*$/i;
|
|
36077
36087
|
function isValidHostname(host) {
|
|
@@ -36145,7 +36155,7 @@ async function resolveCheck(host) {
|
|
|
36145
36155
|
};
|
|
36146
36156
|
}
|
|
36147
36157
|
function loadWatchlist() {
|
|
36148
|
-
const raw = readFileSync10(join12(
|
|
36158
|
+
const raw = readFileSync10(join12(ROOT4, "intelligence", "watchlist.json"), "utf8");
|
|
36149
36159
|
const data = JSON.parse(raw);
|
|
36150
36160
|
return { cwe_frequency: data.cwe_frequency ?? [], cve_watchlist: data.cve_watchlist ?? [] };
|
|
36151
36161
|
}
|
|
@@ -36768,7 +36778,7 @@ function loadChains() {
|
|
|
36768
36778
|
if (_chainsCache)
|
|
36769
36779
|
return _chainsCache;
|
|
36770
36780
|
try {
|
|
36771
|
-
const dir = join13(
|
|
36781
|
+
const dir = join13(fileURLToPath7(new URL(".", import.meta.url)), "..");
|
|
36772
36782
|
const path = join13(dir, "chains.json");
|
|
36773
36783
|
const raw = JSON.parse(readFileSync11(path, "utf8"));
|
|
36774
36784
|
_chainsCache = raw.chains ?? [];
|
|
@@ -37551,7 +37561,7 @@ var CHAIN_ID_TO_ESCALATION = {
|
|
|
37551
37561
|
};
|
|
37552
37562
|
function loadChainLinks() {
|
|
37553
37563
|
try {
|
|
37554
|
-
const dir = join13(
|
|
37564
|
+
const dir = join13(fileURLToPath7(new URL(".", import.meta.url)), "..");
|
|
37555
37565
|
const data = JSON.parse(readFileSync11(join13(dir, "intelligence", "chain_links.json"), "utf8"));
|
|
37556
37566
|
return data.links ?? [];
|
|
37557
37567
|
} catch {
|
|
@@ -37710,9 +37720,9 @@ function compactState(phase, findings) {
|
|
|
37710
37720
|
// src/tasks.ts
|
|
37711
37721
|
import { mkdirSync as mkdirSync6, readFileSync as readFileSync12, writeFileSync as writeFileSync3 } from "node:fs";
|
|
37712
37722
|
import { join as join14 } from "node:path";
|
|
37713
|
-
import { fileURLToPath as
|
|
37723
|
+
import { fileURLToPath as fileURLToPath8 } from "node:url";
|
|
37714
37724
|
function tasksDir() {
|
|
37715
|
-
return join14(
|
|
37725
|
+
return join14(fileURLToPath8(new URL(".", import.meta.url)), "..", ".blitzstrike", "tasks");
|
|
37716
37726
|
}
|
|
37717
37727
|
function taskPath(id) {
|
|
37718
37728
|
return join14(tasksDir(), `${id}.json`);
|
|
@@ -58378,9 +58388,9 @@ function analyzePatchFiles(oldPath, newPath, language) {
|
|
|
58378
58388
|
// src/frameworks.ts
|
|
58379
58389
|
import { readFileSync as readFileSync18, existsSync as existsSync9 } from "node:fs";
|
|
58380
58390
|
import { join as join17 } from "node:path";
|
|
58381
|
-
import { fileURLToPath as
|
|
58382
|
-
var
|
|
58383
|
-
var INTEL2 = join17(
|
|
58391
|
+
import { fileURLToPath as fileURLToPath9 } from "node:url";
|
|
58392
|
+
var ROOT5 = join17(fileURLToPath9(new URL(".", import.meta.url)), "..");
|
|
58393
|
+
var INTEL2 = join17(ROOT5, "intelligence");
|
|
58384
58394
|
var cache = null;
|
|
58385
58395
|
function load3() {
|
|
58386
58396
|
if (cache)
|
|
@@ -59079,8 +59089,8 @@ async function validateLeakedKey(input) {
|
|
|
59079
59089
|
// src/hackbot-arena.ts
|
|
59080
59090
|
import { readFileSync as readFileSync19 } from "node:fs";
|
|
59081
59091
|
import { join as join19, dirname as dirname3 } from "node:path";
|
|
59082
|
-
import { fileURLToPath as
|
|
59083
|
-
var __dirname3 = dirname3(
|
|
59092
|
+
import { fileURLToPath as fileURLToPath10 } from "node:url";
|
|
59093
|
+
var __dirname3 = dirname3(fileURLToPath10(import.meta.url));
|
|
59084
59094
|
function load4() {
|
|
59085
59095
|
try {
|
|
59086
59096
|
return JSON.parse(readFileSync19(join19(__dirname3, "..", "intelligence", "hackbot-arena.json"), "utf8"));
|
|
@@ -59247,8 +59257,8 @@ function listSeverityMap() {
|
|
|
59247
59257
|
// src/datarefresh.ts
|
|
59248
59258
|
import { readFileSync as readFileSync20 } from "node:fs";
|
|
59249
59259
|
import { join as join20, dirname as dirname4 } from "node:path";
|
|
59250
|
-
import { fileURLToPath as
|
|
59251
|
-
var __dirname4 = dirname4(
|
|
59260
|
+
import { fileURLToPath as fileURLToPath11 } from "node:url";
|
|
59261
|
+
var __dirname4 = dirname4(fileURLToPath11(import.meta.url));
|
|
59252
59262
|
function loadJson2(rel) {
|
|
59253
59263
|
try {
|
|
59254
59264
|
return JSON.parse(readFileSync20(join20(__dirname4, "..", rel), "utf8"));
|
|
@@ -59288,11 +59298,11 @@ init_variants();
|
|
|
59288
59298
|
// src/benchmark.ts
|
|
59289
59299
|
import { readFileSync as readFileSync22, readdirSync as readdirSync5, writeFileSync as writeFileSync6, rmSync as rmSync3, mkdirSync as mkdirSync7 } from "node:fs";
|
|
59290
59300
|
import { join as join22 } from "node:path";
|
|
59291
|
-
import { fileURLToPath as
|
|
59301
|
+
import { fileURLToPath as fileURLToPath13 } from "node:url";
|
|
59292
59302
|
import { tmpdir as tmpdir3, homedir as homedir8 } from "node:os";
|
|
59293
59303
|
init_complex_bugs();
|
|
59294
|
-
var
|
|
59295
|
-
var CORPUS = join22(
|
|
59304
|
+
var ROOT6 = join22(fileURLToPath13(new URL(".", import.meta.url)), "..");
|
|
59305
|
+
var CORPUS = join22(ROOT6, "bench", "corpus");
|
|
59296
59306
|
var CAPTURED_CORPUS_DIR = process.env.BLITZSTRIKE_CORPUS_DIR ?? join22(homedir8(), ".blitzstrike", "corpus");
|
|
59297
59307
|
function parseCorpusFile(path) {
|
|
59298
59308
|
let text;
|
|
@@ -61599,15 +61609,16 @@ solc = "0.8.20"
|
|
|
61599
61609
|
// src/enterprise-benchmark.ts
|
|
61600
61610
|
import { existsSync as existsSync15, readFileSync as readFileSync26, readdirSync as readdirSync6, statSync as statSync3 } from "node:fs";
|
|
61601
61611
|
import { join as join25, resolve } from "node:path";
|
|
61612
|
+
import { fileURLToPath as fileURLToPath14 } from "node:url";
|
|
61602
61613
|
init_complex_bugs();
|
|
61603
|
-
var
|
|
61614
|
+
var ROOT7 = resolve(fileURLToPath14(new URL(".", import.meta.url)), "..", "bench", "enterprise");
|
|
61604
61615
|
var ENTERPRISE_FIXTURES = [
|
|
61605
|
-
{ id: "php-laravel", dir: join25(
|
|
61606
|
-
{ id: "js-express", dir: join25(
|
|
61607
|
-
{ id: "py-django", dir: join25(
|
|
61608
|
-
{ id: "java-spring", dir: join25(
|
|
61609
|
-
{ id: "wp-batch-route", dir: join25(
|
|
61610
|
-
{ id: "php-complex", dir: join25(
|
|
61616
|
+
{ id: "php-laravel", dir: join25(ROOT7, "php-laravel"), expected_vulns: 4 },
|
|
61617
|
+
{ id: "js-express", dir: join25(ROOT7, "js-express"), expected_vulns: 2 },
|
|
61618
|
+
{ id: "py-django", dir: join25(ROOT7, "py-django"), expected_vulns: 2 },
|
|
61619
|
+
{ id: "java-spring", dir: join25(ROOT7, "java-spring"), expected_vulns: 2 },
|
|
61620
|
+
{ id: "wp-batch-route", dir: join25(ROOT7, "wp-batch-route"), expected_vulns: 3 },
|
|
61621
|
+
{ id: "php-complex", dir: join25(ROOT7, "php-complex"), expected_vulns: 4 }
|
|
61611
61622
|
];
|
|
61612
61623
|
function sourceFiles(root) {
|
|
61613
61624
|
const out = [];
|
|
@@ -63849,11 +63860,11 @@ async function serve() {
|
|
|
63849
63860
|
init_cli();
|
|
63850
63861
|
import { readFileSync as readFileSync32, existsSync as existsSync18 } from "node:fs";
|
|
63851
63862
|
import { join as join30 } from "node:path";
|
|
63852
|
-
import { fileURLToPath as
|
|
63853
|
-
var
|
|
63863
|
+
import { fileURLToPath as fileURLToPath19 } from "node:url";
|
|
63864
|
+
var ROOT12 = join30(fileURLToPath19(new URL(".", import.meta.url)), "..");
|
|
63854
63865
|
function readVersion() {
|
|
63855
63866
|
try {
|
|
63856
|
-
const p = join30(
|
|
63867
|
+
const p = join30(ROOT12, "package.json");
|
|
63857
63868
|
if (existsSync18(p))
|
|
63858
63869
|
return JSON.parse(readFileSync32(p, "utf8")).version ?? "1.0.0";
|
|
63859
63870
|
} catch {}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "blitzstrike",
|
|
3
|
-
"version": "2.4.
|
|
3
|
+
"version": "2.4.100",
|
|
4
4
|
"description": "Blitz Strike — a universal MCP security-audit toolbelt. BLITZ sweeps the attack surface, EAGLE-EYE traces source-to-sink, STRIKE verifies live. 57 attack chains, 130-tool catalog, intelligence data layer. One server, every agent.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|