@claude-flow/cli 3.44.0 → 3.45.0

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.44.0",
3
+ "version": "3.45.0",
4
4
  "files": {
5
5
  "auto-memory-hook.mjs": "85fe05c757421c52137c0bc8545a0896bab6b4714538c2a11d1d0835bfcc8c1c",
6
6
  "hook-handler.cjs": "209d9fafe10e17d1be0866727f6f9cf9ac66f9a0793f1c793a4f58319e8e4583",
@@ -9,6 +9,6 @@
9
9
  "router.js": "b6998397e7883191b62229ccdc66fb87f1ccca1d5b2039ecb8c1e686d1ad81f8"
10
10
  }
11
11
  },
12
- "signature": "vl9y84CRx7XaIXMi3iD1q3UVqeUvGsvpwjXkhMuA42myuVhCbgtnSNM9W8M3Pv9Odqy5qucwwDsz7MB7mUqDBg==",
12
+ "signature": "IO42tJDeyKIl8l7ewYgoPdlZqQdsESvjIJr3KoAHDYHTi7gMCElwEyah4jx/RC6+Lq2zXv8XSOd/cgHI2U5zAg==",
13
13
  "algorithm": "ed25519"
14
14
  }
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
3
  "generation": 6,
4
- "generatedAt": "2026-09-23T18:40:54.000Z",
5
- "gitSha": "0a96fb88",
4
+ "generatedAt": "2026-09-24T22:48:10.625Z",
5
+ "gitSha": "aab1d625",
6
6
  "catalog": {
7
7
  "agents": 167,
8
8
  "tools": 418,
@@ -12,6 +12,15 @@ interface HealthCheck {
12
12
  fix?: string;
13
13
  }
14
14
  export declare function checkMemoryPersistenceDriver(): Promise<HealthCheck>;
15
+ /**
16
+ * #3392: pure verdict for "does the @claude-flow/memory the CLI loads satisfy
17
+ * the range the CLI declares?". `npx @claude-flow/cli@latest` reuses one npx
18
+ * cache directory across CLI versions, and npm keeps an already-installed
19
+ * dependency that still satisfies a caret range, so a stale memory could
20
+ * survive a CLI upgrade with no error. Exported for unit testing.
21
+ */
22
+ export declare function evaluateMemoryPackageVersion(declared: string | null, installed: string | null): HealthCheck;
23
+ export declare function checkMemoryPackageVersion(): Promise<HealthCheck>;
15
24
  export declare const doctorCommand: Command;
16
25
  export default doctorCommand;
17
26
  //# sourceMappingURL=doctor.d.ts.map
@@ -13,7 +13,8 @@ import { execSync, exec } from 'child_process';
13
13
  import { promisify } from 'util';
14
14
  import { decodeKey, isEncryptionEnabled } from '../encryption/vault.js';
15
15
  import { isEncryptedBlob } from '../encryption/vault.js';
16
- import { resolveMemoryPackageFromProject, readMemoryPackageVersion, recordMemoryPackagePath, } from '../init/memory-package-resolver.js';
16
+ import * as semver from 'semver';
17
+ import { resolveMemoryPackageFromProject, resolveMemoryPackageFromCli, readMemoryPackageVersion, recordMemoryPackagePath, } from '../init/memory-package-resolver.js';
17
18
  // Promisified exec with proper shell and env inheritance for cross-platform support
18
19
  const execAsync = promisify(exec);
19
20
  /**
@@ -1045,6 +1046,70 @@ async function checkLearningBridge() {
1045
1046
  fix: 'npm i -D @claude-flow/memory (optional dep appears absent — likely --omit=optional install)',
1046
1047
  };
1047
1048
  }
1049
+ /**
1050
+ * #3392: pure verdict for "does the @claude-flow/memory the CLI loads satisfy
1051
+ * the range the CLI declares?". `npx @claude-flow/cli@latest` reuses one npx
1052
+ * cache directory across CLI versions, and npm keeps an already-installed
1053
+ * dependency that still satisfies a caret range, so a stale memory could
1054
+ * survive a CLI upgrade with no error. Exported for unit testing.
1055
+ */
1056
+ export function evaluateMemoryPackageVersion(declared, installed) {
1057
+ const NAME = '@claude-flow/memory version';
1058
+ if (!declared) {
1059
+ return { name: NAME, status: 'warn', message: 'could not read the @claude-flow/memory range declared by @claude-flow/cli' };
1060
+ }
1061
+ if (!installed) {
1062
+ return {
1063
+ name: NAME,
1064
+ status: 'warn',
1065
+ message: `@claude-flow/memory is not resolvable from the CLI (declared ${declared}) — memory features fall back to degraded paths`,
1066
+ fix: `npm install @claude-flow/memory@${declared} --include=optional`,
1067
+ };
1068
+ }
1069
+ if (!semver.validRange(declared) || !semver.valid(installed)) {
1070
+ return { name: NAME, status: 'warn', message: `cannot compare installed ${installed} against declared ${declared}` };
1071
+ }
1072
+ if (semver.satisfies(installed, declared, { includePrerelease: true })) {
1073
+ return { name: NAME, status: 'pass', message: `v${installed} satisfies declared ${declared}` };
1074
+ }
1075
+ // warn, not fail: a dev/hoisted layout can legitimately differ, and doctor's
1076
+ // exit code must not depend on which copy a package manager happened to hoist.
1077
+ return {
1078
+ name: NAME,
1079
+ status: 'warn',
1080
+ message: `installed v${installed} does not satisfy declared ${declared} — a stale cached copy is running, so fixes shipped in a newer @claude-flow/memory are silently absent`,
1081
+ fix: `rm -rf "$(npm config get cache)/_npx" && npx @claude-flow/cli@latest doctor # or: npm install @claude-flow/memory@${declared}`,
1082
+ };
1083
+ }
1084
+ export async function checkMemoryPackageVersion() {
1085
+ try {
1086
+ // Walk up from this module to the CLI package root (npx cache, global,
1087
+ // project-local and monorepo dev all resolve the same way).
1088
+ let declared = null;
1089
+ let dir = dirname(fileURLToPath(import.meta.url));
1090
+ for (let i = 0; i < 8 && declared === null; i++) {
1091
+ const pj = join(dir, 'package.json');
1092
+ if (existsSync(pj)) {
1093
+ try {
1094
+ const pkg = JSON.parse(readFileSync(pj, 'utf-8'));
1095
+ if (pkg.name === '@claude-flow/cli') {
1096
+ declared = pkg.optionalDependencies?.['@claude-flow/memory'] ?? pkg.dependencies?.['@claude-flow/memory'] ?? null;
1097
+ break;
1098
+ }
1099
+ }
1100
+ catch { /* keep walking */ }
1101
+ }
1102
+ dir = dirname(dir);
1103
+ }
1104
+ // Resolve exactly as the CLI's own runtime does (its module context),
1105
+ // not from process.cwd() — that would report the project's copy instead.
1106
+ const distPath = resolveMemoryPackageFromCli();
1107
+ return evaluateMemoryPackageVersion(declared, distPath ? readMemoryPackageVersion(distPath) : null);
1108
+ }
1109
+ catch (err) {
1110
+ return { name: '@claude-flow/memory version', status: 'warn', message: `check failed: ${err instanceof Error ? err.message : String(err)}` };
1111
+ }
1112
+ }
1048
1113
  // Check API keys
1049
1114
  async function checkApiKeys() {
1050
1115
  const keys = ['ANTHROPIC_API_KEY', 'CLAUDE_API_KEY', 'OPENAI_API_KEY'];
@@ -2393,6 +2458,7 @@ export const doctorCommand = {
2393
2458
  checkMemoryStructuralIntegrity, // #2737 — bounded, native quick_check on every default run
2394
2459
  checkMemoryPersistenceDriver, // #2968/#3321 — read-only native capability probe
2395
2460
  checkLearningBridge, // #2545 — can the auto-memory hook actually load @claude-flow/memory?
2461
+ checkMemoryPackageVersion, // #3392 — loaded @claude-flow/memory must satisfy the CLI's declared range
2396
2462
  checkApiKeys,
2397
2463
  checkMcpServers,
2398
2464
  checkMcpSchemaOverhead, // #2726 — fixed tools/list prompt cost
@@ -2430,11 +2496,13 @@ export const doctorCommand = {
2430
2496
  checkMemoryDatabase, // existing: exists + statable (unchanged)
2431
2497
  checkMemoryIntegrity, // #2677 check 1: sql.js open + PRAGMA integrity_check
2432
2498
  checkMemoryPersistenceDriver, // #2968/#3321: read-only native capability probe
2499
+ checkMemoryPackageVersion, // #3392: loaded memory package satisfies the declared range
2433
2500
  checkMemoryContent, // #2677 check 2: memory_entries content coverage
2434
2501
  checkMemoryEmbeddingCoverage, // #2677 check 3: vector coverage on populated rows
2435
2502
  checkMemoryReflexionCoverage, // #2677 check 6: episodes are retrievable
2436
2503
  checkMemoryCritiqueCoverage, // #2677 check 6: feedback carries lessons
2437
2504
  ],
2505
+ 'memory-package': checkMemoryPackageVersion, // #3392
2438
2506
  'learning': checkLearningBridge, // #2545
2439
2507
  'learning-bridge': checkLearningBridge, // #2545
2440
2508
  'api': checkApiKeys,
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;
162
163
  config?: Record<string, unknown> | undefined;
163
164
  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;
167
168
  config?: Record<string, unknown> | undefined;
168
169
  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?: "critical" | "high" | "medium" | "low" | undefined;
184
+ priority?: "low" | "medium" | "high" | "critical" | 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?: "critical" | "high" | "medium" | "low" | undefined;
190
+ priority?: "low" | "medium" | "high" | "critical" | 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
- allowedCommands: string[];
238
237
  timeout: number;
238
+ allowedCommands: string[];
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
- blockedPatterns?: string[] | undefined;
246
245
  timeout?: number | undefined;
246
+ blockedPatterns?: string[] | 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.44.0",
3
+ "version": "3.45.0",
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",
@@ -125,11 +125,11 @@
125
125
  "ws": "^8.21.0",
126
126
  "yaml": "^2.8.0",
127
127
  "zod": "^3.22.0",
128
- "@claude-flow/memory": "^3.0.0-alpha.23"
128
+ "@claude-flow/memory": "3.0.0-alpha.25"
129
129
  },
130
130
  "optionalDependencies": {
131
131
  "@agntcy/slim-bindings": "2.0.0-alpha.5",
132
- "@claude-flow/memory": "^3.0.0-alpha.23",
132
+ "@claude-flow/memory": "3.0.0-alpha.25",
133
133
  "@metaharness/darwin": "~0.10.2",
134
134
  "@metaharness/flywheel": "~0.1.10",
135
135
  "@metaharness/radio": "~0.1.0",