blitzstrike 1.0.41 → 1.0.42
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 +17 -0
- package/dist/index.js +92 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,23 @@ 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.42] — 2026-09-13
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- **Phase 7 — MCP Orchestration** (`src/orchestration.ts`, wired into `run_engagement`):
|
|
13
|
+
- A data-driven **state machine** (10 states: scope_check → plan → recon →
|
|
14
|
+
analyze → hypothesis → select_chain → validate → evidence → finding → report).
|
|
15
|
+
- A deterministic **planner** (`buildPlan`) that emits an ordered plan with
|
|
16
|
+
per-step tool, risk level, evidence requirements, and done/pending/blocked status.
|
|
17
|
+
- A **risk policy** (`actionPermitted`) that gates high-risk actions
|
|
18
|
+
(strike_verify, confirm_finding) behind scope.
|
|
19
|
+
- **§34 agent guidance** (`computeGuidance`) — every result now exposes
|
|
20
|
+
current_state / confidence / blocking_reason / required_evidence /
|
|
21
|
+
recommended_next_action / recommended_tool.
|
|
22
|
+
- `run_engagement` output now includes `state`, `plan`, `guidance`, and
|
|
23
|
+
`risk_policy` (no new MCP tools added — the surface was deepened, not widened).
|
|
24
|
+
|
|
8
25
|
## [1.0.41] — 2026-09-13
|
|
9
26
|
|
|
10
27
|
### Added
|
package/dist/index.js
CHANGED
|
@@ -30238,6 +30238,87 @@ function rejectFinding(finding, status, reason, evidence) {
|
|
|
30238
30238
|
};
|
|
30239
30239
|
}
|
|
30240
30240
|
|
|
30241
|
+
// src/orchestration.ts
|
|
30242
|
+
var STATE_MACHINE = [
|
|
30243
|
+
{ state: "scope_check", description: "Validate target against scope + risk policy.", recommended_tools: ["scope_check"], required_evidence: ["scope_decision"], next: ["plan"], confidence: "high" },
|
|
30244
|
+
{ state: "plan", description: "Derive the engagement plan from surface + scope.", recommended_tools: ["list_chains"], required_evidence: ["plan_steps"], next: ["recon"], confidence: "high" },
|
|
30245
|
+
{ state: "recon", description: "Map the attack surface (endpoints, tech, WAF).", recommended_tools: ["blitz_scan", "active_scan", "fofa_search", "detect_waf"], required_evidence: ["attack_surface"], next: ["analyze"], confidence: "medium" },
|
|
30246
|
+
{ state: "analyze", description: "Trace source→sink flows (interprocedural taint).", recommended_tools: ["eagle_eye2", "blitz_scan", "blitz_file"], required_evidence: ["sink_hits", "taint_flow"], next: ["hypothesis"], confidence: "medium" },
|
|
30247
|
+
{ state: "hypothesis", description: "Form defensible hypotheses (static finding).", recommended_tools: ["blitz_file", "enrich_scan"], required_evidence: ["static_finding"], next: ["select_chain"], blocking: "live_validation_required", confidence: "high" },
|
|
30248
|
+
{ state: "select_chain", description: "Match the hypothesis to an escalation chain.", recommended_tools: ["list_chains", "read_playbook"], required_evidence: ["matched_chain"], next: ["validate"], confidence: "high" },
|
|
30249
|
+
{ state: "validate", description: "Verify live with baseline + marker + negative control.", recommended_tools: ["strike_verify", "browser_validate"], required_evidence: ["baseline", "marker_reflection", "negative_control"], next: ["evidence"], confidence: "medium" },
|
|
30250
|
+
{ state: "evidence", description: "Attach hashable, provenance-bound evidence.", recommended_tools: ["finding_attach_evidence"], required_evidence: ["evidence_artifact"], next: ["finding"], confidence: "high" },
|
|
30251
|
+
{ state: "finding", description: "Confirm the finding (invariants enforced).", recommended_tools: ["confirm_finding"], required_evidence: ["confirmed_finding"], next: ["report"], confidence: "high" },
|
|
30252
|
+
{ state: "report", description: "Produce a reproducible report.", recommended_tools: ["report", "security-report"], required_evidence: ["report"], next: [], confidence: "high" }
|
|
30253
|
+
];
|
|
30254
|
+
function stateDefinition(state) {
|
|
30255
|
+
return STATE_MACHINE.find((s) => s.state === state);
|
|
30256
|
+
}
|
|
30257
|
+
var RISK_POLICY = [
|
|
30258
|
+
{ action: "scope_check", risk: "low", requires_scope: false, destructive: false },
|
|
30259
|
+
{ action: "blitz_scan", risk: "low", requires_scope: false, destructive: false },
|
|
30260
|
+
{ action: "blitz_file", risk: "low", requires_scope: false, destructive: false },
|
|
30261
|
+
{ action: "eagle_eye2", risk: "low", requires_scope: false, destructive: false },
|
|
30262
|
+
{ action: "enrich_scan", risk: "low", requires_scope: false, destructive: false },
|
|
30263
|
+
{ action: "detect_waf", risk: "low", requires_scope: false, destructive: false },
|
|
30264
|
+
{ action: "fofa_search", risk: "low", requires_scope: false, destructive: false },
|
|
30265
|
+
{ action: "list_chains", risk: "low", requires_scope: false, destructive: false },
|
|
30266
|
+
{ action: "read_playbook", risk: "low", requires_scope: false, destructive: false },
|
|
30267
|
+
{ action: "active_scan", risk: "medium", requires_scope: true, destructive: false },
|
|
30268
|
+
{ action: "browser_validate", risk: "medium", requires_scope: true, destructive: false },
|
|
30269
|
+
{ action: "strike_verify", risk: "high", requires_scope: true, destructive: false },
|
|
30270
|
+
{ action: "confirm_finding", risk: "high", requires_scope: true, destructive: false }
|
|
30271
|
+
];
|
|
30272
|
+
function riskOf(action) {
|
|
30273
|
+
return RISK_POLICY.find((r) => r.action === action) ?? null;
|
|
30274
|
+
}
|
|
30275
|
+
function actionPermitted(action, scopeAllowed, mode) {
|
|
30276
|
+
const rule = riskOf(action);
|
|
30277
|
+
if (!rule)
|
|
30278
|
+
return true;
|
|
30279
|
+
if (mode === "ctf" || mode === "offensive" || mode === "reverse-engineering")
|
|
30280
|
+
return true;
|
|
30281
|
+
if (rule.requires_scope && !scopeAllowed)
|
|
30282
|
+
return false;
|
|
30283
|
+
return true;
|
|
30284
|
+
}
|
|
30285
|
+
function buildPlan(scopeAllowed, mode, executedState) {
|
|
30286
|
+
const order = ["scope_check", "plan", "recon", "analyze", "hypothesis", "select_chain", "validate", "evidence", "finding", "report"];
|
|
30287
|
+
const executedIdx = order.indexOf(executedState);
|
|
30288
|
+
return order.map((state, i) => {
|
|
30289
|
+
const def = stateDefinition(state);
|
|
30290
|
+
const tool = def.recommended_tools[0] ?? "";
|
|
30291
|
+
const rule = riskOf(tool);
|
|
30292
|
+
const permitted = actionPermitted(tool, scopeAllowed, mode);
|
|
30293
|
+
const status = i <= executedIdx ? "done" : permitted ? "pending" : "blocked";
|
|
30294
|
+
return {
|
|
30295
|
+
order: i + 1,
|
|
30296
|
+
state,
|
|
30297
|
+
action: def.description,
|
|
30298
|
+
tool,
|
|
30299
|
+
evidence_required: def.required_evidence,
|
|
30300
|
+
risk: rule?.risk ?? "low",
|
|
30301
|
+
permitted,
|
|
30302
|
+
status
|
|
30303
|
+
};
|
|
30304
|
+
});
|
|
30305
|
+
}
|
|
30306
|
+
function computeGuidance(state, scopeAllowed) {
|
|
30307
|
+
const def = stateDefinition(state);
|
|
30308
|
+
const next = def.next[0];
|
|
30309
|
+
const nextDef = next ? stateDefinition(next) : null;
|
|
30310
|
+
const tool = nextDef?.recommended_tools[0] ?? "";
|
|
30311
|
+
const permitted = actionPermitted(tool, scopeAllowed, "bug-bounty");
|
|
30312
|
+
return {
|
|
30313
|
+
state,
|
|
30314
|
+
confidence: def.confidence,
|
|
30315
|
+
blocking_reason: !scopeAllowed && nextDef && riskOf(tool)?.requires_scope ? "scope_required" : def.blocking ?? null,
|
|
30316
|
+
required_evidence: def.required_evidence,
|
|
30317
|
+
recommended_next_action: nextDef?.description ?? "complete",
|
|
30318
|
+
recommended_tool: permitted ? tool : ""
|
|
30319
|
+
};
|
|
30320
|
+
}
|
|
30321
|
+
|
|
30241
30322
|
// src/orchestrator.ts
|
|
30242
30323
|
var _chainsCache = null;
|
|
30243
30324
|
function loadChains() {
|
|
@@ -30451,6 +30532,17 @@ function runEngagement(target, scope = "", mode = "bug-bounty", maxFiles = 2000,
|
|
|
30451
30532
|
}));
|
|
30452
30533
|
report.status = "COMPLETE";
|
|
30453
30534
|
report.note = "All findings are HYPOTHESES until verified live with strike_verify. " + "Apply each chain's negative_control before reporting. Confidence reflects static evidence only.";
|
|
30535
|
+
const executedState = "select_chain";
|
|
30536
|
+
const scopeAllowed = report.scope?.allowed ?? false;
|
|
30537
|
+
const plan = buildPlan(scopeAllowed, mode, executedState);
|
|
30538
|
+
report.state = executedState;
|
|
30539
|
+
report.state_description = stateDefinition(executedState).description;
|
|
30540
|
+
report.plan = plan;
|
|
30541
|
+
report.guidance = computeGuidance(executedState, scopeAllowed);
|
|
30542
|
+
report.risk_policy = {
|
|
30543
|
+
note: "High-risk actions (strike_verify, confirm_finding) require scope + are never run server-side automatically.",
|
|
30544
|
+
gated: plan.filter((p) => !p.permitted).map((p) => p.tool)
|
|
30545
|
+
};
|
|
30454
30546
|
if (remember) {
|
|
30455
30547
|
let captured = 0;
|
|
30456
30548
|
for (const mc of blitz.matched_chains) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "blitzstrike",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.42",
|
|
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": {
|