blitzstrike 2.4.172 → 2.4.173

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,16 @@ 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.173] — 2026-10-11
9
+
10
+ ### Added — goal tracking + prove_goal (completion signal)
11
+
12
+ - New `goals` engine + 3 tools: `goal_set` (register free-text goals + optional
13
+ quantitative condition), `prove_goal` (mark met with evidence + reason), and
14
+ `goal_status` (list goals + `all_met` — the task's completion signal).
15
+ - A goal with a quantitative condition must have its measured value verified before
16
+ proving it met; the task is complete only when `all_met` is true.
17
+
8
18
  ## [2.4.172] — 2026-10-11
9
19
 
10
20
  ### Added — operation constraint registry (deterministic red lines)
package/dist/index.js CHANGED
@@ -63918,6 +63918,37 @@ function checkConstraint(action, target) {
63918
63918
  return { allowed: true, mode: "denylist", matched: null, reason: "denylist mode: no deny rule matches — default allow" };
63919
63919
  }
63920
63920
 
63921
+ // src/goals.ts
63922
+ var goals = [];
63923
+ var counter2 = 0;
63924
+ function nextId2() {
63925
+ counter2 += 1;
63926
+ return `G-${String(counter2).padStart(3, "0")}`;
63927
+ }
63928
+ function setGoals(texts) {
63929
+ for (const t of texts) {
63930
+ const text = typeof t === "string" ? t : t.text;
63931
+ const condition = typeof t === "string" ? undefined : t.condition;
63932
+ const now = new Date().toISOString();
63933
+ goals.push({ id: nextId2(), text, condition, status: "pending", created: now, updated: now });
63934
+ }
63935
+ return [...goals];
63936
+ }
63937
+ function proveGoal(id, evidence, reason) {
63938
+ const g = goals.find((x) => x.id === id);
63939
+ if (!g)
63940
+ return { ok: false, error: `no goal '${id}'` };
63941
+ g.status = "met";
63942
+ g.met_evidence = evidence;
63943
+ g.met_reason = reason;
63944
+ g.updated = new Date().toISOString();
63945
+ return { ok: true, goal: { ...g } };
63946
+ }
63947
+ function goalStatus() {
63948
+ const met = goals.filter((g) => g.status === "met").length;
63949
+ return { goals: [...goals], all_met: goals.length > 0 && met === goals.length, met, total: goals.length };
63950
+ }
63951
+
63921
63952
  // src/sibling-scan.ts
63922
63953
  var SIBLING_SUFFIXES = [
63923
63954
  "export",
@@ -65854,6 +65885,35 @@ ${statusLine}` : statusLine },
65854
65885
  }, async ({ id }) => {
65855
65886
  return { content: [{ type: "text", text: JSON.stringify({ removed: clearConstraint(id), id }) }] };
65856
65887
  });
65888
+ server.registerTool("goal_set", {
65889
+ title: "Register engagement goals",
65890
+ description: "GOALS: register one or more free-text goals (each with an optional quantitative condition like 'coverage >= 80%'). goal_status then tracks which are met; the task is COMPLETE only when all_met is true. Use before planning routes so every route traces back to a goal.",
65891
+ inputSchema: {
65892
+ goals: array(object2({ text: string2(), condition: string2().optional() })).describe("Goals to register (text + optional quantitative condition)")
65893
+ }
65894
+ }, async ({ goals }) => {
65895
+ setGoals(goals);
65896
+ return { content: [{ type: "text", text: JSON.stringify(goalStatus()) }] };
65897
+ });
65898
+ server.registerTool("prove_goal", {
65899
+ title: "Mark a goal met with evidence",
65900
+ description: "GOALS: mark a goal met, citing the evidence that proved it + a reason. Before proving a goal with a QUANTITATIVE condition, verify the measured value (coverage %, findings count, privilege) actually meets it — never stamp a goal met early. When the last pending goal is proven, the task is complete.",
65901
+ inputSchema: {
65902
+ id: string2().describe("Goal id (G-XXX) from goal_status"),
65903
+ evidence: string2().describe("Evidence id / artifact that proved this goal (e.g. finding id, coverage value)"),
65904
+ reason: string2().describe("Why this goal is met")
65905
+ }
65906
+ }, async ({ id, evidence, reason }) => {
65907
+ const r = proveGoal(id, evidence, reason);
65908
+ return { content: [{ type: "text", text: JSON.stringify({ ...r, ...goalStatus() }) }] };
65909
+ });
65910
+ server.registerTool("goal_status", {
65911
+ title: "List goals + completion state",
65912
+ description: "GOALS: return every goal with its status + all_met flag (true when every goal is met — the task's completion signal). Check this before declaring the engagement complete; any pending goal means the work is not done.",
65913
+ inputSchema: {}
65914
+ }, async () => {
65915
+ return { content: [{ type: "text", text: JSON.stringify(goalStatus()) }] };
65916
+ });
65857
65917
  server.registerTool("hunting_doctrine", {
65858
65918
  title: "High-ROI hunting doctrine (sibling rule, A→B, follow-the-money)",
65859
65919
  description: "Return the hunting doctrine — the high-ROI heuristics the agent applies while selecting targets/endpoints/classes: the Sibling Rule (check every sibling endpoint — ~30% of paid IDOR/auth bugs), A→B Signal Method, impact-first, follow-the-money, less-saturated classes, new==unreviewed, two-account IDOR test, PoC escalation, credential-proof, CI/CD + SAML/SSO attack surface, 20-minute rotation, plus the always-rejected kill-list. Use when deciding WHAT to hunt next.",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "blitzstrike",
3
- "version": "2.4.172",
3
+ "version": "2.4.173",
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": {