blitzstrike 2.4.16 → 2.4.17

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 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.17] — 2026-09-14
9
+
10
+ ### Added — auto-provision toolchains + non-interactive installs
11
+
12
+ - Preflight now AUTO-PROVISIONS missing build toolchains (go, cargo, meson, ninja)
13
+ instead of only warning — `install-tools` installs them via apt before the
14
+ mass install, so `go install` / `meson build` / `ninja` no longer fail.
15
+ - All install commands now run with stdin closed (non-interactive) — prompts like
16
+ metasploit's "Overwrite? (y/N)" can no longer hang the run; `yes |` is piped
17
+ where an interactive confirm is required.
18
+
8
19
  ## [2.4.16] — 2026-09-14
9
20
 
10
21
  ### Added — auto-fallback install (toolchain provision + pip fallback)
package/dist/index.js CHANGED
@@ -7403,6 +7403,16 @@ 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 provisionMissingToolchains() {
7407
+ const missing = [];
7408
+ for (const [tc, inst] of Object.entries(TOOLCHAIN_INSTALL)) {
7409
+ if (hasCommand(tc))
7410
+ continue;
7411
+ missing.push(tc);
7412
+ spawnSync(inst, { shell: true, timeout: 300000, stdio: ["ignore", "pipe", "pipe"] });
7413
+ }
7414
+ return missing;
7415
+ }
7406
7416
  function hasCommand(cmd) {
7407
7417
  return spawnSync(`command -v ${cmd}`, { shell: true, timeout: 8000 }).status === 0;
7408
7418
  }
@@ -7425,11 +7435,11 @@ function provisionToolchain(cmd) {
7425
7435
  }
7426
7436
  function runInstallCommand(cmd, timeoutMs) {
7427
7437
  provisionToolchain(cmd);
7428
- let r = spawnSync(cmd, { shell: true, timeout: timeoutMs, cwd: TOOLS_DIR });
7438
+ let r = spawnSync(cmd, { shell: true, timeout: timeoutMs, cwd: TOOLS_DIR, stdio: ["ignore", "pipe", "pipe"] });
7429
7439
  let output = `${r.stdout?.toString() ?? ""}${r.stderr?.toString() ?? ""}`;
7430
7440
  if (r.status !== 0 && /--break-system-packages/.test(cmd)) {
7431
7441
  const alt = cmd.replace(/--break-system-packages/g, "--user");
7432
- const r2 = spawnSync(alt, { shell: true, timeout: timeoutMs, cwd: TOOLS_DIR });
7442
+ const r2 = spawnSync(alt, { shell: true, timeout: timeoutMs, cwd: TOOLS_DIR, stdio: ["ignore", "pipe", "pipe"] });
7433
7443
  if (r2.status === 0)
7434
7444
  r = r2;
7435
7445
  output = `${output}
@@ -7654,7 +7664,7 @@ function ensureToolAsync(name, timeoutMs = 300000) {
7654
7664
  }
7655
7665
  mkdirSync3(TOOLS_DIR, { recursive: true });
7656
7666
  provisionToolchain(cmd);
7657
- const inst = spawn(cmd, { shell: true, timeout: timeoutMs, cwd: TOOLS_DIR });
7667
+ const inst = spawn(cmd, { shell: true, timeout: timeoutMs, cwd: TOOLS_DIR, stdio: ["ignore", "pipe", "pipe"] });
7658
7668
  let out = "";
7659
7669
  inst.stdout?.on("data", (d) => {
7660
7670
  out += d.toString();
@@ -7670,7 +7680,7 @@ function ensureToolAsync(name, timeoutMs = 300000) {
7670
7680
  }
7671
7681
  if (/--break-system-packages/.test(cmd)) {
7672
7682
  const alt = cmd.replace(/--break-system-packages/g, "--user");
7673
- const r2 = spawn(alt, { shell: true, timeout: timeoutMs, cwd: TOOLS_DIR });
7683
+ const r2 = spawn(alt, { shell: true, timeout: timeoutMs, cwd: TOOLS_DIR, stdio: ["ignore", "pipe", "pipe"] });
7674
7684
  let out2 = "";
7675
7685
  r2.stdout?.on("data", (d) => {
7676
7686
  out2 += d.toString();
@@ -7724,7 +7734,9 @@ var init_catalog = __esm(() => {
7724
7734
  TOOLS_DIR = process.env.BLITZSTRIKE_TOOLS_DIR ?? join6(homedir3(), ".blitzstrike", "tools");
7725
7735
  TOOLCHAIN_INSTALL = {
7726
7736
  go: "apt-get install -y golang-go",
7727
- cargo: "apt-get install -y cargo"
7737
+ cargo: "apt-get install -y cargo",
7738
+ meson: "apt-get install -y meson",
7739
+ ninja: "apt-get install -y ninja-build"
7728
7740
  };
7729
7741
  _provisioned = new Set;
7730
7742
  });
@@ -16053,12 +16065,9 @@ async function runInstallTools(args) {
16053
16065
  }
16054
16066
  console.log(`Installing catalog tools${category ? ` (category: ${category})` : ""} — concurrency ${concurrency}
16055
16067
  `);
16056
- const chainMap = { go: "golang", java: "default-jdk", python3: "python3", pip3: "python3-pip", cargo: "cargo", make: "build-essential", meson: "meson", ninja: "ninja-build", gcc: "build-essential", git: "git" };
16057
- const missingChains = Object.keys(chainMap).filter((c) => spawnSync5(`command -v ${c}`, { shell: true }).status !== 0);
16058
- if (missingChains.length) {
16059
- console.log(`⚠ Missing toolchains: ${missingChains.join(", ")} (${missingChains.map((c) => chainMap[c]).join(", ")})`);
16060
- console.log(` Tools that need them will FAIL below. Install first, e.g.:
16061
- apt install -y ${missingChains.map((c) => chainMap[c]).join(" ")}
16068
+ const provisioned = provisionMissingToolchains();
16069
+ if (provisioned.length) {
16070
+ console.log(`Provisioned missing toolchains: ${provisioned.join(", ")}
16062
16071
  `);
16063
16072
  }
16064
16073
  const tools = loadTools();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "blitzstrike",
3
- "version": "2.4.16",
3
+ "version": "2.4.17",
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": {
@@ -2846,7 +2846,7 @@
2846
2846
  }
2847
2847
  ],
2848
2848
  "install": {
2849
- "linux": "curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/metasploit-framework-wrappers/msfupdate.erb | bash",
2849
+ "linux": "curl -sL https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/metasploit-framework-wrappers/msfupdate.erb -o /tmp/msfinstall && chmod +x /tmp/msfinstall && yes | /tmp/msfinstall",
2850
2850
  "darwin": "brew install metasploit",
2851
2851
  "win32": "manual"
2852
2852
  },