blitzstrike 2.4.9 → 2.4.10

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,22 @@ 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.10] — 2026-09-14
9
+
10
+ ### Added — auto-install external MCP servers to every agent
11
+
12
+ - chrome-devtools-mcp is now flagged `installable` in the catalog: `install-tools`
13
+ / `install_all_tools` provision it (npm i -g) instead of skipping all MCP
14
+ servers. burp-suite-mcp stays skipped (GUI/daemon — build + run manually).
15
+ - `blitzstrike install` (register to every agent) now also auto-installs
16
+ chrome-devtools-mcp so all agents can drive a real browser immediately.
17
+
18
+ ### Fixed — doctor git stderr leak
19
+
20
+ - `validateRelease` suppresses git/npm stderr, so `blitzstrike doctor` no longer
21
+ prints a stray `fatal: not a git repository` / `No tags can describe` line when
22
+ run outside a git checkout.
23
+
8
24
  ## [2.4.9] — 2026-09-14
9
25
 
10
26
  ### Added — evidence-first enforcement (findings are never born empty)
package/dist/index.js CHANGED
@@ -7633,9 +7633,9 @@ function ensureToolAsync(name, timeoutMs = 120000) {
7633
7633
  }
7634
7634
  async function installAllTools(opts = {}) {
7635
7635
  const tools = loadTools();
7636
- const mcp = tools.filter((t) => t.category === "mcp-server").map((t) => t.name);
7636
+ const skippedMcp = tools.filter((t) => t.category === "mcp-server" && t.installable !== true).map((t) => t.name);
7637
7637
  const cat = opts.category?.toLowerCase();
7638
- const targets = tools.filter((t) => t.category !== "mcp-server" && (!cat || t.category === cat));
7638
+ const targets = tools.filter((t) => (t.category !== "mcp-server" || t.installable === true) && (!cat || t.category === cat));
7639
7639
  const concurrency = Math.max(1, opts.concurrency ?? 4);
7640
7640
  const results = [];
7641
7641
  let idx = 0;
@@ -7657,7 +7657,7 @@ async function installAllTools(opts = {}) {
7657
7657
  installed,
7658
7658
  already_installed: already,
7659
7659
  failed,
7660
- skipped_mcp_servers: mcp,
7660
+ skipped_mcp_servers: skippedMcp,
7661
7661
  results
7662
7662
  };
7663
7663
  }
@@ -15579,13 +15579,13 @@ function validateRelease() {
15579
15579
  checks.push({ name: "CHANGELOG version", ok: false, detail: "CHANGELOG.md not found" });
15580
15580
  }
15581
15581
  try {
15582
- const tag = execSync4("git describe --tags --abbrev=0", { cwd: ROOT8, encoding: "utf8" }).trim();
15582
+ const tag = execSync4("git describe --tags --abbrev=0", { cwd: ROOT8, encoding: "utf8", stdio: ["ignore", "pipe", "ignore"] }).trim();
15583
15583
  checks.push({ name: "Git tag", ok: tag === `v${VERSION}`, detail: tag, soft: true });
15584
15584
  } catch {
15585
- checks.push({ name: "Git tag", ok: true, detail: "unavailable (no git)", soft: true });
15585
+ checks.push({ name: "Git tag", ok: true, detail: "unavailable (no git/tags)", soft: true });
15586
15586
  }
15587
15587
  try {
15588
- const published = execSync4("npm view blitzstrike version", { encoding: "utf8", timeout: 8000 }).trim();
15588
+ const published = execSync4("npm view blitzstrike version", { encoding: "utf8", timeout: 8000, stdio: ["ignore", "pipe", "ignore"] }).trim();
15589
15589
  checks.push({ name: "npm registry version", ok: published === VERSION, detail: published, soft: true });
15590
15590
  } catch {
15591
15591
  checks.push({ name: "npm registry version", ok: true, detail: "unavailable (offline)", soft: true });
@@ -15958,6 +15958,11 @@ Agent-specific formats: see docs/installation.md`);
15958
15958
  console.log(`
15959
15959
  Registered with ${ok}/${installed.length} agent(s).`);
15960
15960
  console.log("Restart your agent, then call `run_engagement` or any `blitzstrike` tool.");
15961
+ console.log(`
15962
+ External MCP servers:`);
15963
+ const devtools = ensureTool("chrome-devtools-mcp");
15964
+ console.log(` ${devtools.installed ? "OK " : "FAIL"} chrome-devtools-mcp ${devtools.installed ? "installed (browser MCP ready for all agents)" : devtools.command ?? "install failed"}`);
15965
+ console.log(` SKIP burp-suite-mcp GUI/daemon — build manually (PortSwigger/mcp-server) + load in Burp (connect, not install)`);
15961
15966
  }
15962
15967
  async function runInstallTools(args) {
15963
15968
  const getArg = (flag) => {
@@ -15975,9 +15980,9 @@ async function runInstallTools(args) {
15975
15980
  await Promise.resolve().then(() => init_catalog());
15976
15981
  if (dryRun) {
15977
15982
  const tools = loadTools();
15978
- const mcp = tools.filter((t) => t.category === "mcp-server");
15979
- const targets = tools.filter((t) => t.category !== "mcp-server" && (!category || t.category === category.toLowerCase()));
15980
- console.log(`Dry run — would attempt ${targets.length} tool(s); ${mcp.length} MCP server(s) skipped (connect, not install):`);
15983
+ const mcp = tools.filter((t) => t.category === "mcp-server" && t.installable !== true);
15984
+ const targets = tools.filter((t) => (t.category !== "mcp-server" || t.installable === true) && (!category || t.category === category.toLowerCase()));
15985
+ console.log(`Dry run — would attempt ${targets.length} tool(s); ${mcp.length} MCP server(s) skipped (GUI/daemon — connect, not install):`);
15981
15986
  for (const t of targets)
15982
15987
  console.log(` ${t.category.padEnd(11)} ${t.name}`);
15983
15988
  return;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "blitzstrike",
3
- "version": "2.4.9",
3
+ "version": "2.4.10",
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": {