blitzstrike 1.0.57 → 1.0.58

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,19 @@ 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
+ ## [1.0.58] — 2026-09-13
9
+
10
+ ### Fixed — total-verification pass
11
+
12
+ - **Backward-compat mission load** — `loadMission` now normalizes old persisted
13
+ missions (missing the P14 budget fields: `max_tokens`, `max_cost_usd`,
14
+ `per_task_budget`, `started_at`, `used_tokens`/`used_cost_usd`, and P9
15
+ `failed_approaches`) so `blitzstrike mission resume <old-id>` no longer crashes.
16
+ - **Scope gate** — now rejects ANY non-local target without an authorized scope
17
+ (previously the `https://` regex let a bare host like `example.com` slip past
18
+ the upfront gate). Non-local + no scope → `scope_required`.
19
+ - README CLI section now lists the `mission` and `benchmark` commands.
20
+
8
21
  ## [1.0.57] — 2026-09-13
9
22
 
10
23
  ### Added — Autonomous Security Engine (phase 18: documentation & examples)
package/README.md CHANGED
@@ -136,6 +136,8 @@ blitzstrike serve --mcp # start MCP server over stdio (default)
136
136
  blitzstrike doctor # health check: runtime + 130-tool catalog + creds
137
137
  blitzstrike install # write MCP config to detected clients (Claude/Cursor/OpenCode)
138
138
  blitzstrike install --dry-run # preview the config without writing
139
+ blitzstrike mission <target> # run an autonomous mission (source or web)
140
+ blitzstrike benchmark # run the autonomous benchmark (--full for whole corpus)
139
141
  blitzstrike sync-data # fetch heavy datasets (payloads + templates) on-demand
140
142
  blitzstrike update # check for a newer version + refresh the data cache
141
143
  blitzstrike version # print version
package/dist/index.js CHANGED
@@ -36491,11 +36491,56 @@ function loadMission(id) {
36491
36491
  if (!existsSync7(path))
36492
36492
  return null;
36493
36493
  try {
36494
- return JSON.parse(readFileSync17(path, "utf8"));
36494
+ const raw = JSON.parse(readFileSync17(path, "utf8"));
36495
+ return normalizeMission(raw);
36495
36496
  } catch {
36496
36497
  return null;
36497
36498
  }
36498
36499
  }
36500
+ function normalizeMission(raw) {
36501
+ const b = raw.budget ?? {};
36502
+ const budget = {
36503
+ max_time_seconds: b.max_time_seconds ?? 3600,
36504
+ max_tasks: b.max_tasks ?? 200,
36505
+ max_requests: b.max_requests ?? 1000,
36506
+ max_tokens: b.max_tokens ?? 2000000,
36507
+ max_cost_usd: b.max_cost_usd ?? 5,
36508
+ max_parallel_workers: b.max_parallel_workers ?? 4,
36509
+ risk: b.risk ?? "medium",
36510
+ per_task_budget: b.per_task_budget ?? { max_time_seconds: 60, max_requests: 50 },
36511
+ started_at: b.started_at ?? Date.now(),
36512
+ used_tasks: b.used_tasks ?? 0,
36513
+ used_requests: b.used_requests ?? 0,
36514
+ used_tokens: b.used_tokens ?? 0,
36515
+ used_cost_usd: b.used_cost_usd ?? 0
36516
+ };
36517
+ return {
36518
+ id: raw.id ?? "MSN-unknown",
36519
+ target: raw.target ?? "",
36520
+ scope: raw.scope ?? [],
36521
+ mode: raw.mode ?? "source",
36522
+ status: raw.status ?? "initialized",
36523
+ started_at: raw.started_at ?? new Date().toISOString(),
36524
+ updated_at: raw.updated_at ?? new Date().toISOString(),
36525
+ budget,
36526
+ discovered_assets: raw.discovered_assets ?? [],
36527
+ technologies: raw.technologies ?? [],
36528
+ endpoints: raw.endpoints ?? [],
36529
+ identities: raw.identities ?? [],
36530
+ hypotheses: raw.hypotheses ?? [],
36531
+ findings: raw.findings ?? [],
36532
+ attack_chains: raw.attack_chains ?? [],
36533
+ evidence: raw.evidence ?? [],
36534
+ tasks: raw.tasks ?? [],
36535
+ graph: raw.graph ?? { nodes: [], edges: [] },
36536
+ coverage: { dimensions: raw.coverage?.dimensions ?? {} },
36537
+ memory_refs: raw.memory_refs ?? [],
36538
+ termination_reason: raw.termination_reason ?? null,
36539
+ decision_log: raw.decision_log ?? [],
36540
+ failed_approaches: raw.failed_approaches ?? [],
36541
+ report: raw.report
36542
+ };
36543
+ }
36499
36544
  function listMissions() {
36500
36545
  if (!existsSync7(DIR))
36501
36546
  return [];
@@ -37630,7 +37675,7 @@ async function executeTask(task, mission, scope) {
37630
37675
  }
37631
37676
  }
37632
37677
  async function runMission(mission) {
37633
- if (/^https?:\/\//i.test(mission.target) && !scopeAllowed(mission)) {
37678
+ if (!scopeAllowed(mission)) {
37634
37679
  return saveMission({ ...mission, status: "terminated", termination_reason: "scope_required" });
37635
37680
  }
37636
37681
  let m = { ...mission, status: "running" };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "blitzstrike",
3
- "version": "1.0.57",
3
+ "version": "1.0.58",
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": {