blitzstrike 2.4.15 → 2.4.16
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 +11 -0
- package/dist/index.js +63 -5
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,17 @@ 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.16] — 2026-09-14
|
|
9
|
+
|
|
10
|
+
### Added — auto-fallback install (toolchain provision + pip fallback)
|
|
11
|
+
|
|
12
|
+
- `go install` / `cargo install` tools now auto-provision the missing toolchain
|
|
13
|
+
(`apt-get install golang-go` / `cargo`) before installing — no more
|
|
14
|
+
"go: not found" / "cargo: not found" failures (provisioned once per run).
|
|
15
|
+
- `pip install --break-system-packages` now falls back to `pip install --user`
|
|
16
|
+
when the flag is unsupported (pip < 23.0 on older distros) — no more
|
|
17
|
+
"no such option: --break-system-packages".
|
|
18
|
+
|
|
8
19
|
## [2.4.15] — 2026-09-14
|
|
9
20
|
|
|
10
21
|
### Fixed — detection → verification loop now unmissable
|
package/dist/index.js
CHANGED
|
@@ -7403,6 +7403,40 @@ import { join as join6 } from "node:path";
|
|
|
7403
7403
|
import { fileURLToPath as fileURLToPath3 } from "node:url";
|
|
7404
7404
|
import { homedir as homedir3 } from "node:os";
|
|
7405
7405
|
import { spawnSync, spawn } from "node:child_process";
|
|
7406
|
+
function hasCommand(cmd) {
|
|
7407
|
+
return spawnSync(`command -v ${cmd}`, { shell: true, timeout: 8000 }).status === 0;
|
|
7408
|
+
}
|
|
7409
|
+
function requiredToolchain(cmd) {
|
|
7410
|
+
if (/^\s*go\s+install\b/.test(cmd))
|
|
7411
|
+
return "go";
|
|
7412
|
+
if (/^\s*cargo\s+(install|build)\b/.test(cmd))
|
|
7413
|
+
return "cargo";
|
|
7414
|
+
return null;
|
|
7415
|
+
}
|
|
7416
|
+
function provisionToolchain(cmd) {
|
|
7417
|
+
const tc = requiredToolchain(cmd);
|
|
7418
|
+
if (!tc || hasCommand(tc) || _provisioned.has(tc))
|
|
7419
|
+
return;
|
|
7420
|
+
_provisioned.add(tc);
|
|
7421
|
+
const inst = TOOLCHAIN_INSTALL[tc];
|
|
7422
|
+
if (!inst)
|
|
7423
|
+
return;
|
|
7424
|
+
spawnSync(inst, { shell: true, timeout: 300000 });
|
|
7425
|
+
}
|
|
7426
|
+
function runInstallCommand(cmd, timeoutMs) {
|
|
7427
|
+
provisionToolchain(cmd);
|
|
7428
|
+
let r = spawnSync(cmd, { shell: true, timeout: timeoutMs, cwd: TOOLS_DIR });
|
|
7429
|
+
let output = `${r.stdout?.toString() ?? ""}${r.stderr?.toString() ?? ""}`;
|
|
7430
|
+
if (r.status !== 0 && /--break-system-packages/.test(cmd)) {
|
|
7431
|
+
const alt = cmd.replace(/--break-system-packages/g, "--user");
|
|
7432
|
+
const r2 = spawnSync(alt, { shell: true, timeout: timeoutMs, cwd: TOOLS_DIR });
|
|
7433
|
+
if (r2.status === 0)
|
|
7434
|
+
r = r2;
|
|
7435
|
+
output = `${output}
|
|
7436
|
+
${r2.stdout?.toString() ?? ""}${r2.stderr?.toString() ?? ""}`;
|
|
7437
|
+
}
|
|
7438
|
+
return { status: r.status, output };
|
|
7439
|
+
}
|
|
7406
7440
|
function loadTools() {
|
|
7407
7441
|
if (_toolsCache)
|
|
7408
7442
|
return _toolsCache;
|
|
@@ -7519,14 +7553,14 @@ function ensureTool(name) {
|
|
|
7519
7553
|
return { name: t.name, installed: false, action: "none", note: `no install command for ${platform}` };
|
|
7520
7554
|
}
|
|
7521
7555
|
mkdirSync3(TOOLS_DIR, { recursive: true });
|
|
7522
|
-
const
|
|
7523
|
-
const ok =
|
|
7556
|
+
const { status, output } = runInstallCommand(cmd, 300000);
|
|
7557
|
+
const ok = status === 0;
|
|
7524
7558
|
return {
|
|
7525
7559
|
name: t.name,
|
|
7526
7560
|
installed: ok,
|
|
7527
7561
|
action: "install",
|
|
7528
7562
|
command: cmd,
|
|
7529
|
-
output:
|
|
7563
|
+
output: output.slice(-400)
|
|
7530
7564
|
};
|
|
7531
7565
|
}
|
|
7532
7566
|
function toolForHint(hint) {
|
|
@@ -7619,6 +7653,7 @@ function ensureToolAsync(name, timeoutMs = 300000) {
|
|
|
7619
7653
|
return;
|
|
7620
7654
|
}
|
|
7621
7655
|
mkdirSync3(TOOLS_DIR, { recursive: true });
|
|
7656
|
+
provisionToolchain(cmd);
|
|
7622
7657
|
const inst = spawn(cmd, { shell: true, timeout: timeoutMs, cwd: TOOLS_DIR });
|
|
7623
7658
|
let out = "";
|
|
7624
7659
|
inst.stdout?.on("data", (d) => {
|
|
@@ -7629,7 +7664,25 @@ function ensureToolAsync(name, timeoutMs = 300000) {
|
|
|
7629
7664
|
});
|
|
7630
7665
|
inst.on("error", (e) => resolve({ name: t.name, installed: false, action: "install", error: String(e) }));
|
|
7631
7666
|
inst.on("close", (icode) => {
|
|
7632
|
-
|
|
7667
|
+
if (icode === 0) {
|
|
7668
|
+
resolve({ name: t.name, installed: true, action: "install", command: cmd, output: out.slice(-400) });
|
|
7669
|
+
return;
|
|
7670
|
+
}
|
|
7671
|
+
if (/--break-system-packages/.test(cmd)) {
|
|
7672
|
+
const alt = cmd.replace(/--break-system-packages/g, "--user");
|
|
7673
|
+
const r2 = spawn(alt, { shell: true, timeout: timeoutMs, cwd: TOOLS_DIR });
|
|
7674
|
+
let out2 = "";
|
|
7675
|
+
r2.stdout?.on("data", (d) => {
|
|
7676
|
+
out2 += d.toString();
|
|
7677
|
+
});
|
|
7678
|
+
r2.stderr?.on("data", (d) => {
|
|
7679
|
+
out2 += d.toString();
|
|
7680
|
+
});
|
|
7681
|
+
r2.on("error", (e) => resolve({ name: t.name, installed: false, action: "install", error: String(e) }));
|
|
7682
|
+
r2.on("close", (i2) => resolve({ name: t.name, installed: i2 === 0, action: "install", command: alt, output: out2.slice(-400) }));
|
|
7683
|
+
return;
|
|
7684
|
+
}
|
|
7685
|
+
resolve({ name: t.name, installed: false, action: "install", command: cmd, output: out.slice(-400) });
|
|
7633
7686
|
});
|
|
7634
7687
|
});
|
|
7635
7688
|
});
|
|
@@ -7664,11 +7717,16 @@ async function installAllTools(opts = {}) {
|
|
|
7664
7717
|
results
|
|
7665
7718
|
};
|
|
7666
7719
|
}
|
|
7667
|
-
var ROOT2, TOOLS_DIR, _toolsCache = null, _skillsCache = null;
|
|
7720
|
+
var ROOT2, TOOLS_DIR, TOOLCHAIN_INSTALL, _provisioned, _toolsCache = null, _skillsCache = null;
|
|
7668
7721
|
var init_catalog = __esm(() => {
|
|
7669
7722
|
init_manuals();
|
|
7670
7723
|
ROOT2 = join6(fileURLToPath3(new URL(".", import.meta.url)), "..");
|
|
7671
7724
|
TOOLS_DIR = process.env.BLITZSTRIKE_TOOLS_DIR ?? join6(homedir3(), ".blitzstrike", "tools");
|
|
7725
|
+
TOOLCHAIN_INSTALL = {
|
|
7726
|
+
go: "apt-get install -y golang-go",
|
|
7727
|
+
cargo: "apt-get install -y cargo"
|
|
7728
|
+
};
|
|
7729
|
+
_provisioned = new Set;
|
|
7672
7730
|
});
|
|
7673
7731
|
|
|
7674
7732
|
// src/burp-mcp.ts
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "blitzstrike",
|
|
3
|
-
"version": "2.4.
|
|
3
|
+
"version": "2.4.16",
|
|
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": {
|