blitzstrike 1.0.52 → 1.0.53
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 +16 -0
- package/dist/index.js +59 -2
- package/package.json +1 -1
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
|
+
## [1.0.53] — 2026-09-13
|
|
9
|
+
|
|
10
|
+
### Added — Autonomous Security Engine (phase 13: model router)
|
|
11
|
+
|
|
12
|
+
- **Model Router** (`src/mission/router.ts`, §21):
|
|
13
|
+
- Pure routing layer — never calls a model. Deterministic by default.
|
|
14
|
+
- `routeTask()` — maps an agent type to a model tier (`large`/`medium`/`small`)
|
|
15
|
+
only when a provider is configured; otherwise routes to `none`.
|
|
16
|
+
- `AGENT_TIER` — §21 mapping (planning/source/review → large; attack execution
|
|
17
|
+
→ medium; verification → small).
|
|
18
|
+
- `loadRouterConfig()` — reads `BLITZSTRIKE_MODEL_PROVIDER` / `_LARGE` /
|
|
19
|
+
`_MEDIUM` / `_SMALL` env vars.
|
|
20
|
+
- `routingPlan()` — full plan (all `none` when deterministic).
|
|
21
|
+
- Mission Control records the routing decision (tier) per task and the overall
|
|
22
|
+
routing plan in the mission `decision_log`.
|
|
23
|
+
|
|
8
24
|
## [1.0.52] — 2026-09-13
|
|
9
25
|
|
|
10
26
|
### Added — Autonomous Security Engine (phase 12: browser automation agent)
|
package/dist/index.js
CHANGED
|
@@ -19085,6 +19085,55 @@ var init_memory2 = __esm(() => {
|
|
|
19085
19085
|
init_memory();
|
|
19086
19086
|
});
|
|
19087
19087
|
|
|
19088
|
+
// src/mission/router.ts
|
|
19089
|
+
function isModelConfigured(config) {
|
|
19090
|
+
return Boolean(config?.provider);
|
|
19091
|
+
}
|
|
19092
|
+
function routeTask(agent, config) {
|
|
19093
|
+
if (!isModelConfigured(config)) {
|
|
19094
|
+
return { agent, tier: "none", model: null, deterministic: true };
|
|
19095
|
+
}
|
|
19096
|
+
const tier = AGENT_TIER[agent] ?? "medium";
|
|
19097
|
+
const key = `model_${tier}`;
|
|
19098
|
+
const model = config?.[key] ?? null;
|
|
19099
|
+
return { agent, tier, model, deterministic: model === null };
|
|
19100
|
+
}
|
|
19101
|
+
function loadRouterConfig(env = process.env) {
|
|
19102
|
+
return {
|
|
19103
|
+
provider: env.BLITZSTRIKE_MODEL_PROVIDER || undefined,
|
|
19104
|
+
model_large: env.BLITZSTRIKE_MODEL_LARGE || undefined,
|
|
19105
|
+
model_medium: env.BLITZSTRIKE_MODEL_MEDIUM || undefined,
|
|
19106
|
+
model_small: env.BLITZSTRIKE_MODEL_SMALL || undefined
|
|
19107
|
+
};
|
|
19108
|
+
}
|
|
19109
|
+
function routingPlan(config) {
|
|
19110
|
+
if (!isModelConfigured(config)) {
|
|
19111
|
+
const out = {};
|
|
19112
|
+
for (const k of Object.keys(AGENT_TIER))
|
|
19113
|
+
out[k] = "none";
|
|
19114
|
+
return out;
|
|
19115
|
+
}
|
|
19116
|
+
return { ...AGENT_TIER };
|
|
19117
|
+
}
|
|
19118
|
+
var AGENT_TIER;
|
|
19119
|
+
var init_router = __esm(() => {
|
|
19120
|
+
AGENT_TIER = {
|
|
19121
|
+
commander: "large",
|
|
19122
|
+
source: "large",
|
|
19123
|
+
analysis: "large",
|
|
19124
|
+
reviewer: "large",
|
|
19125
|
+
recon: "medium",
|
|
19126
|
+
web: "medium",
|
|
19127
|
+
api: "medium",
|
|
19128
|
+
auth: "medium",
|
|
19129
|
+
mobile: "medium",
|
|
19130
|
+
cloud: "medium",
|
|
19131
|
+
reporter: "medium",
|
|
19132
|
+
validator: "small",
|
|
19133
|
+
browser: "small"
|
|
19134
|
+
};
|
|
19135
|
+
});
|
|
19136
|
+
|
|
19088
19137
|
// src/mission/control.ts
|
|
19089
19138
|
import { existsSync as existsSync8, statSync as statSync4 } from "node:fs";
|
|
19090
19139
|
function scopeAllowed(mission) {
|
|
@@ -19164,6 +19213,11 @@ async function runMission(mission) {
|
|
|
19164
19213
|
let m = { ...mission, status: "running" };
|
|
19165
19214
|
m.tasks = buildInitialTasks(m);
|
|
19166
19215
|
m.graph = loadEscalationGraph(m.graph);
|
|
19216
|
+
const routerCfg = loadRouterConfig();
|
|
19217
|
+
m.decision_log = [
|
|
19218
|
+
...m.decision_log,
|
|
19219
|
+
{ at: new Date().toISOString(), agent: "router", decision: isModelConfigured(routerCfg) ? `model routing active: ${JSON.stringify(routingPlan(routerCfg))}` : "deterministic (no model provider configured)" }
|
|
19220
|
+
];
|
|
19167
19221
|
m = saveMission(m);
|
|
19168
19222
|
const scope = m.scope.join(",");
|
|
19169
19223
|
let iterations = 0;
|
|
@@ -19193,20 +19247,22 @@ async function runMission(mission) {
|
|
|
19193
19247
|
const results = await Promise.all(batch.map((t) => executeTask(t, m, scope)));
|
|
19194
19248
|
for (const r of results) {
|
|
19195
19249
|
const decision = r.ok ? `${r.task.agent_type} completed (${Object.keys(r.output).length} output fields, ${r.hypotheses.length} hypotheses)` : `${r.task.agent_type} failed: ${r.error ?? "unknown"}`;
|
|
19250
|
+
const route = routeTask(r.task.agent_type, routerCfg);
|
|
19251
|
+
const logEntry = (entryDecision) => ({ at: new Date().toISOString(), agent: r.task.agent_type, decision: entryDecision, tier: route.tier });
|
|
19196
19252
|
if (r.ok) {
|
|
19197
19253
|
m = {
|
|
19198
19254
|
...m,
|
|
19199
19255
|
tasks: setTask(m.tasks, r.task.task_id, { status: "success", result: r.output }),
|
|
19200
19256
|
hypotheses: mergeHypotheses(m.hypotheses, r.hypotheses),
|
|
19201
19257
|
graph: mergeGraphs(m.graph, r.graph),
|
|
19202
|
-
decision_log: [...m.decision_log,
|
|
19258
|
+
decision_log: [...m.decision_log, logEntry(decision)]
|
|
19203
19259
|
};
|
|
19204
19260
|
if (r.task.agent_type === "reporter") {
|
|
19205
19261
|
m = { ...m, report: r.output };
|
|
19206
19262
|
}
|
|
19207
19263
|
} else {
|
|
19208
19264
|
const rec = recoveryDecision(r.task, r.error ?? "unknown error");
|
|
19209
|
-
const stamp =
|
|
19265
|
+
const stamp = logEntry(decision);
|
|
19210
19266
|
if (rec.action === "retry") {
|
|
19211
19267
|
const retried = setTask(m.tasks, r.task.task_id, { status: "retry", error: r.error ?? null });
|
|
19212
19268
|
m = { ...m, tasks: retried, decision_log: [...m.decision_log, stamp] };
|
|
@@ -19274,6 +19330,7 @@ var init_control = __esm(() => {
|
|
|
19274
19330
|
init_coverage();
|
|
19275
19331
|
init_recovery();
|
|
19276
19332
|
init_memory2();
|
|
19333
|
+
init_router();
|
|
19277
19334
|
MODE_PROFILES = {
|
|
19278
19335
|
web: { agents: ["recon", "web", "api", "auth", "validator", "reviewer", "reporter"], verify: true, risk: "medium" },
|
|
19279
19336
|
api: { agents: ["recon", "api", "auth", "validator", "reviewer", "reporter"], verify: true, risk: "medium" },
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "blitzstrike",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.53",
|
|
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": {
|