blitzstrike 2.4.5 → 2.4.6
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 +9 -0
- package/dist/index.js +15 -17
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,15 @@ 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.6] — 2026-09-14
|
|
9
|
+
|
|
10
|
+
### Added — chrome-devtools-mcp auto-install (npx zero-install fallback)
|
|
11
|
+
|
|
12
|
+
- `drive_devtools` / `browser_devtools` now auto-fetch chrome-devtools-mcp via
|
|
13
|
+
`npx -y chrome-devtools-mcp@latest` when no global binary is present — no
|
|
14
|
+
manual `npm i -g` required. (burp-suite-mcp still can't be auto-installed:
|
|
15
|
+
it's a Java/GUI app that must be built + run manually.)
|
|
16
|
+
|
|
8
17
|
## [2.4.5] — 2026-09-14
|
|
9
18
|
|
|
10
19
|
### Added — responsible-disclosure header (X-HackerOne-Research)
|
package/dist/index.js
CHANGED
|
@@ -15300,7 +15300,7 @@ import { mkdirSync as mkdirSync4, writeFileSync as writeFileSync6, readFileSync
|
|
|
15300
15300
|
import { join as join16 } from "node:path";
|
|
15301
15301
|
import { homedir as homedir5 } from "node:os";
|
|
15302
15302
|
import { fileURLToPath as fileURLToPath9 } from "node:url";
|
|
15303
|
-
import { spawnSync as
|
|
15303
|
+
import { spawnSync as spawnSync3 } from "node:child_process";
|
|
15304
15304
|
function dirExists(p) {
|
|
15305
15305
|
try {
|
|
15306
15306
|
return statSync4(p).isDirectory();
|
|
@@ -15351,14 +15351,14 @@ function syncData() {
|
|
|
15351
15351
|
copyDir(localTemplates, templatesPath);
|
|
15352
15352
|
templatesSynced = true;
|
|
15353
15353
|
}
|
|
15354
|
-
const gitOk =
|
|
15354
|
+
const gitOk = spawnSync3("git", ["--version"]).status === 0;
|
|
15355
15355
|
if (gitOk && (!dirExists(payloadsPath) || countFiles(payloadsPath) === 0 || !dirExists(templatesPath) || countFiles(templatesPath) === 0)) {
|
|
15356
15356
|
const tmp = join16(DATA_ROOT2, ".tmp-clone");
|
|
15357
15357
|
if (dirExists(tmp))
|
|
15358
15358
|
rmSync4(tmp, { recursive: true, force: true });
|
|
15359
|
-
const r =
|
|
15359
|
+
const r = spawnSync3("git", ["clone", "--depth", "1", "--filter=blob:none", "--sparse", GITHUB_REPO, tmp], { timeout: 120000 });
|
|
15360
15360
|
if (r.status === 0) {
|
|
15361
|
-
const sparse =
|
|
15361
|
+
const sparse = spawnSync3("git", ["-C", tmp, "sparse-checkout", "set", "payloads", "templates"], { timeout: 120000 });
|
|
15362
15362
|
if (sparse.status === 0) {
|
|
15363
15363
|
if (!dirExists(payloadsPath) || countFiles(payloadsPath) === 0) {
|
|
15364
15364
|
copyDir(join16(tmp, "payloads"), payloadsPath);
|
|
@@ -15379,7 +15379,7 @@ function syncData() {
|
|
|
15379
15379
|
};
|
|
15380
15380
|
}
|
|
15381
15381
|
function copyDir(src, dst) {
|
|
15382
|
-
const r =
|
|
15382
|
+
const r = spawnSync3("cp", ["-r", src, dst], { timeout: 120000 });
|
|
15383
15383
|
if (r.status !== 0) {
|
|
15384
15384
|
manualCopy(src, dst);
|
|
15385
15385
|
}
|
|
@@ -15529,9 +15529,9 @@ import { readFileSync as readFileSync22, existsSync as existsSync10, writeFileSy
|
|
|
15529
15529
|
import { join as join19, dirname as dirname2 } from "node:path";
|
|
15530
15530
|
import { homedir as homedir6 } from "node:os";
|
|
15531
15531
|
import { fileURLToPath as fileURLToPath12 } from "node:url";
|
|
15532
|
-
import { spawnSync as
|
|
15532
|
+
import { spawnSync as spawnSync4 } from "node:child_process";
|
|
15533
15533
|
function which(cmd) {
|
|
15534
|
-
return
|
|
15534
|
+
return spawnSync4(`command -v ${cmd}`, { shell: true }).status === 0;
|
|
15535
15535
|
}
|
|
15536
15536
|
function installedCount() {
|
|
15537
15537
|
const tools = loadTools();
|
|
@@ -31587,7 +31587,7 @@ async function browserValidate(check, target, payload) {
|
|
|
31587
31587
|
}
|
|
31588
31588
|
|
|
31589
31589
|
// src/devtools.ts
|
|
31590
|
-
import { spawn as spawn2 } from "node:child_process";
|
|
31590
|
+
import { spawn as spawn2, spawnSync as spawnSync2 } from "node:child_process";
|
|
31591
31591
|
import { existsSync as existsSync4, readdirSync as readdirSync3 } from "node:fs";
|
|
31592
31592
|
import { join as join7 } from "node:path";
|
|
31593
31593
|
import { homedir as homedir3 } from "node:os";
|
|
@@ -31678,11 +31678,14 @@ function findChromium() {
|
|
|
31678
31678
|
}
|
|
31679
31679
|
return null;
|
|
31680
31680
|
}
|
|
31681
|
-
function
|
|
31681
|
+
function chromeDevtoolsCommand() {
|
|
31682
31682
|
for (const c of ["/usr/bin/chrome-devtools-mcp", "/usr/local/bin/chrome-devtools-mcp"]) {
|
|
31683
31683
|
if (existsSync4(c))
|
|
31684
31684
|
return { command: c, args: [] };
|
|
31685
31685
|
}
|
|
31686
|
+
const npx = spawnSync2("npx", ["--version"], { timeout: 8000 });
|
|
31687
|
+
if (npx.error === undefined)
|
|
31688
|
+
return { command: "npx", args: ["-y", "chrome-devtools-mcp@latest"] };
|
|
31686
31689
|
return null;
|
|
31687
31690
|
}
|
|
31688
31691
|
function parsePageId(text) {
|
|
@@ -31690,17 +31693,12 @@ function parsePageId(text) {
|
|
|
31690
31693
|
return m ? parseInt(m[1], 10) : 1;
|
|
31691
31694
|
}
|
|
31692
31695
|
async function driveChromeDevtools(target, timeoutMs = 25000) {
|
|
31693
|
-
const bin =
|
|
31696
|
+
const bin = chromeDevtoolsCommand();
|
|
31694
31697
|
if (!bin) {
|
|
31695
|
-
return { ok: false, error: "chrome-devtools-mcp not
|
|
31698
|
+
return { ok: false, error: "chrome-devtools-mcp not available (no global binary and no npx) — install Node/npm first" };
|
|
31696
31699
|
}
|
|
31697
31700
|
const chrome = findChromium();
|
|
31698
|
-
const args = [
|
|
31699
|
-
"--headless",
|
|
31700
|
-
"--isolated",
|
|
31701
|
-
"--chromeArg=--no-sandbox",
|
|
31702
|
-
"--chromeArg=--disable-gpu"
|
|
31703
|
-
];
|
|
31701
|
+
const args = [...bin.args, "--headless", "--isolated", "--chromeArg=--no-sandbox", "--chromeArg=--disable-gpu"];
|
|
31704
31702
|
if (chrome)
|
|
31705
31703
|
args.push(`--executablePath=${chrome}`);
|
|
31706
31704
|
const client = mcpClient(bin.command, args);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "blitzstrike",
|
|
3
|
-
"version": "2.4.
|
|
3
|
+
"version": "2.4.6",
|
|
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": {
|