@claude-flow/cli 3.63.1 → 3.63.2

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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "manifest": {
3
- "version": "3.63.1",
3
+ "version": "3.63.2",
4
4
  "files": {
5
5
  "auto-memory-hook.mjs": "631fac9d518835e2852a406888316bbbddddb49e7ed8e406d2e971f46833df9a",
6
6
  "hook-handler.cjs": "24502a3bcb78770971147940515c992e35b6736ae14ee2dc54e07d4cdef6a1d8",
@@ -9,6 +9,6 @@
9
9
  "router.cjs": "16648b3c0d73b6681ac2d8d13def6a68286c57f5a11004de5b19a0fa088c833d"
10
10
  }
11
11
  },
12
- "signature": "xx5ziGPJmfDIIK6zGzfFYPrIIFKubOUKaPkojpTDZgqzgA7CDabpDtIOQQxJd4qEpK3EPZOprwRT6h94FeuNAA==",
12
+ "signature": "6+Obx8HZs73gmcPZ6JJH6sBZf3OGb1DC5p5p0K8QhMAAr1QwhKu2uNPv36NmjpsbOTJ0MpidudSRt4fP/ToVBA==",
13
13
  "algorithm": "ed25519"
14
14
  }
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
3
  "generation": 7,
4
- "generatedAt": "2026-10-26T03:10:50.719Z",
5
- "gitSha": "631c1557",
4
+ "generatedAt": "2026-10-26T14:15:30.738Z",
5
+ "gitSha": "a52ae16e",
6
6
  "catalog": {
7
7
  "agents": 177,
8
8
  "tools": 444,
@@ -61,11 +61,33 @@ export function validateUrl(rawUrl) {
61
61
  function isPrivateOrLoopback(host) {
62
62
  if (host === 'localhost' || host === 'localhost.localdomain')
63
63
  return true;
64
- // IPv6 loopback
65
- if (host === '::1' || host === '[::1]')
66
- return true;
64
+ // Node's URL parser keeps brackets in `.hostname` for every IPv6 literal
65
+ // (e.g. "[::1]", "[fc00::1]", "[::ffff:7f00:1]"). Strip them once so every
66
+ // check below operates on the bare address — without this, the fc00::/7
67
+ // and fe80::/10 checks further down never match anything (they test
68
+ // `startsWith('fc'/'fe80:')` against a string starting with "["), and an
69
+ // IPv4-mapped-IPv6 literal (`::ffff:a.b.c.d`, which Node normalizes to a
70
+ // canonical `::ffff:xxxx:yyyy` hex form) sails through both the IPv4 and
71
+ // IPv6 branches untested — a live SSRF bypass (e.g. `::ffff:127.0.0.1` or
72
+ // `::ffff:169.254.169.254` reaching loopback / cloud-metadata targets).
73
+ const bare = host.startsWith('[') && host.endsWith(']') ? host.slice(1, -1) : host;
74
+ if (bare === '::1')
75
+ return true; // IPv6 loopback
76
+ // IPv4-mapped IPv6 — decode back to dotted-decimal and recurse into the
77
+ // IPv4 check below so it inherits every existing private/loopback/
78
+ // link-local/CGNAT rule instead of needing its own copy.
79
+ const mappedHex = bare.match(/^::ffff:([0-9a-f]{1,4}):([0-9a-f]{1,4})$/);
80
+ if (mappedHex) {
81
+ const hi = parseInt(mappedHex[1], 16);
82
+ const lo = parseInt(mappedHex[2], 16);
83
+ const decoded = `${(hi >> 8) & 0xff}.${hi & 0xff}.${(lo >> 8) & 0xff}.${lo & 0xff}`;
84
+ return isPrivateOrLoopback(decoded);
85
+ }
86
+ const mappedDecimal = bare.match(/^::ffff:(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})$/);
87
+ if (mappedDecimal)
88
+ return isPrivateOrLoopback(mappedDecimal[1]);
67
89
  // IPv4 numeric checks
68
- const m = host.match(/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/);
90
+ const m = bare.match(/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/);
69
91
  if (m) {
70
92
  const a = Number(m[1]);
71
93
  const b = Number(m[2]);
@@ -85,12 +107,18 @@ function isPrivateOrLoopback(host) {
85
107
  return true; // CGNAT
86
108
  return false;
87
109
  }
88
- // IPv6 bracketed addresses and other special forms — be conservative and
89
- // accept only public-looking literals. Reject obvious private/local forms.
90
- if (host.startsWith('fc') || host.startsWith('fd'))
110
+ // IPv6 special forms — be conservative and accept only public-looking
111
+ // literals. Reject obvious private/local forms.
112
+ if (bare.startsWith('fc') || bare.startsWith('fd'))
91
113
  return true; // fc00::/7 ULA
92
- if (host.startsWith('fe80:'))
114
+ if (bare.startsWith('fe80:'))
93
115
  return true; // link-local
116
+ // KNOWN LIMITATION (pre-existing, not introduced by the bracket-stripping /
117
+ // IPv4-mapped-IPv6 fix above; flagged by an independent adversarial review):
118
+ // `::` (IPv6 unspecified/"any", the analog of 0.0.0.0, which the IPv4 branch
119
+ // above does block), IPv6 multicast (ff00::/8), and NAT64 (64:ff9b::/96) are
120
+ // not covered. Left as a follow-up hardening item rather than scope-creeping
121
+ // this patch.
94
122
  return false;
95
123
  }
96
124
  export function validateHeaders(headers) {
File without changes
@@ -159,14 +159,14 @@ export declare const SpawnAgentSchema: z.ZodObject<{
159
159
  timeout: z.ZodOptional<z.ZodNumber>;
160
160
  }, "strip", z.ZodTypeAny, {
161
161
  type: "coder" | "reviewer" | "tester" | "planner" | "researcher" | "security-architect" | "security-auditor" | "memory-specialist" | "swarm-specialist" | "integration-architect" | "performance-engineer" | "core-architect" | "test-architect" | "queen-coordinator" | "project-coordinator";
162
- id?: string | undefined;
163
162
  config?: Record<string, unknown> | undefined;
164
163
  timeout?: number | undefined;
164
+ id?: string | undefined;
165
165
  }, {
166
166
  type: "coder" | "reviewer" | "tester" | "planner" | "researcher" | "security-architect" | "security-auditor" | "memory-specialist" | "swarm-specialist" | "integration-architect" | "performance-engineer" | "core-architect" | "test-architect" | "queen-coordinator" | "project-coordinator";
167
- id?: string | undefined;
168
167
  config?: Record<string, unknown> | undefined;
169
168
  timeout?: number | undefined;
169
+ id?: string | undefined;
170
170
  }>;
171
171
  /**
172
172
  * Task input schema
@@ -181,13 +181,13 @@ export declare const TaskInputSchema: z.ZodObject<{
181
181
  taskId: string;
182
182
  content: string;
183
183
  agentType: "coder" | "reviewer" | "tester" | "planner" | "researcher" | "security-architect" | "security-auditor" | "memory-specialist" | "swarm-specialist" | "integration-architect" | "performance-engineer" | "core-architect" | "test-architect" | "queen-coordinator" | "project-coordinator";
184
- priority?: "low" | "medium" | "high" | "critical" | undefined;
184
+ priority?: "critical" | "high" | "medium" | "low" | undefined;
185
185
  metadata?: Record<string, unknown> | undefined;
186
186
  }, {
187
187
  taskId: string;
188
188
  content: string;
189
189
  agentType: "coder" | "reviewer" | "tester" | "planner" | "researcher" | "security-architect" | "security-auditor" | "memory-specialist" | "swarm-specialist" | "integration-architect" | "performance-engineer" | "core-architect" | "test-architect" | "queen-coordinator" | "project-coordinator";
190
- priority?: "low" | "medium" | "high" | "critical" | undefined;
190
+ priority?: "critical" | "high" | "medium" | "low" | undefined;
191
191
  metadata?: Record<string, unknown> | undefined;
192
192
  }>;
193
193
  /**
@@ -234,16 +234,16 @@ export declare const ExecutorConfigSchema: z.ZodObject<{
234
234
  cwd: z.ZodOptional<z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>>;
235
235
  allowSudo: z.ZodDefault<z.ZodBoolean>;
236
236
  }, "strip", z.ZodTypeAny, {
237
- timeout: number;
238
237
  allowedCommands: string[];
238
+ timeout: number;
239
239
  maxBuffer: number;
240
240
  allowSudo: boolean;
241
241
  blockedPatterns?: string[] | undefined;
242
242
  cwd?: string | undefined;
243
243
  }, {
244
244
  allowedCommands: string[];
245
- timeout?: number | undefined;
246
245
  blockedPatterns?: string[] | undefined;
246
+ timeout?: number | undefined;
247
247
  maxBuffer?: number | undefined;
248
248
  cwd?: string | undefined;
249
249
  allowSudo?: boolean | undefined;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@claude-flow/cli",
3
- "version": "3.63.1",
3
+ "version": "3.63.2",
4
4
  "type": "module",
5
5
  "description": "Ruflo CLI - Enterprise AI agent orchestration with 60+ specialized agents, swarm coordination, MCP server, self-learning hooks, and vector memory for Claude Code",
6
6
  "main": "dist/src/index.js",