claude-flow 3.10.45 → 3.10.46

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-flow",
3
- "version": "3.10.45",
3
+ "version": "3.10.46",
4
4
  "description": "Ruflo - Enterprise AI agent orchestration for Claude Code. Deploy 60+ specialized agents in coordinated swarms with self-learning, fault-tolerant consensus, vector memory, and MCP integration",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",
@@ -497,7 +497,11 @@ const startCommand = {
497
497
  catch (err) {
498
498
  spinner.fail('MCP swarm_init failed — swarm metadata saved locally only');
499
499
  output.writeln(output.dim(` Error: ${err instanceof Error ? err.message : String(err)}`));
500
- output.writeln(output.dim(' The MCP server may not be running. Start it with: claude mcp add claude-flow npx claude-flow@v3alpha mcp start'));
500
+ // #2370: the old hint referenced the deprecated `claude-flow@v3alpha`
501
+ // dist-tag which now resolves to a pre-rename package. Use the current
502
+ // `ruflo@latest` and force a fresh fetch with `-y` so npx doesn't pick
503
+ // a stale local install.
504
+ output.writeln(output.dim(' The MCP server may not be running. Start it with: claude mcp add claude-flow -- npx -y ruflo@latest mcp start'));
501
505
  }
502
506
  // Persist swarm state to disk so `swarm status` can read it
503
507
  const swarmDir = path.join(process.cwd(), '.swarm');
@@ -751,7 +751,15 @@ function detectExistingRufloMCP(targetDir) {
751
751
  // 'claude-flow', a second `ruflo init` must still recognise the existing install.
752
752
  if (parsed.mcpServers && typeof parsed.mcpServers === 'object') {
753
753
  const servers = parsed.mcpServers;
754
- if ('claude-flow' in servers || 'ruflo' in servers)
754
+ // #2369: also recognise the legacy dist-tag keys generated by
755
+ // pre-rename installs (claude-flow ≤ 2.x). Without these the
756
+ // detection walks parent dirs, doesn't match, and writes a NEW
757
+ // claude-flow-keyed config — both servers then run under
758
+ // different prefixes producing duplicate-tool noise.
759
+ if ('claude-flow' in servers ||
760
+ 'ruflo' in servers ||
761
+ 'claude-flow@alpha' in servers ||
762
+ 'claude-flow@v3alpha' in servers)
755
763
  return candidate;
756
764
  }
757
765
  // (b) #1840: Claude Code project-scoped registrations under
@@ -768,7 +776,11 @@ function detectExistingRufloMCP(targetDir) {
768
776
  if (!projectMcp || typeof projectMcp !== 'object')
769
777
  continue;
770
778
  const mcp = projectMcp;
771
- if (!('claude-flow' in mcp) && !('ruflo' in mcp))
779
+ // #2369: legacy dist-tag keys also count as already-registered.
780
+ if (!('claude-flow' in mcp) &&
781
+ !('ruflo' in mcp) &&
782
+ !('claude-flow@alpha' in mcp) &&
783
+ !('claude-flow@v3alpha' in mcp))
772
784
  continue;
773
785
  if (targetAncestors.has(normalizeProjectKey(projectKey))) {
774
786
  return `${candidate} (projects[${projectKey}])`;
@@ -795,6 +807,26 @@ function normalizeProjectKey(p) {
795
807
  async function writeMCPConfig(targetDir, options, result) {
796
808
  const mcpPath = path.join(targetDir, '.mcp.json');
797
809
  if (fs.existsSync(mcpPath) && !options.force) {
810
+ // #2369: an existing .mcp.json from a pre-rename install is the most
811
+ // common cause of "autopilot tools missing after init" reports. Parse
812
+ // the existing file and surface a loud, specific message naming the
813
+ // stale key so users know to either delete the file or re-run with
814
+ // --force. Without this they get a silent skip and no warning.
815
+ try {
816
+ const parsed = JSON.parse(fs.readFileSync(mcpPath, 'utf-8'));
817
+ const servers = parsed?.mcpServers;
818
+ if (servers && typeof servers === 'object') {
819
+ const staleKeys = ['claude-flow@alpha', 'claude-flow@v3alpha'].filter(k => k in servers);
820
+ if (staleKeys.length > 0) {
821
+ result.skipped.push(`.mcp.json (existing file uses deprecated key '${staleKeys[0]}' — autopilot/browser/wasm-agent tools will be missing; ` +
822
+ `delete .mcp.json and re-run, or re-run with --force to overwrite)`);
823
+ return;
824
+ }
825
+ }
826
+ }
827
+ catch {
828
+ // Existing file isn't valid JSON — fall through to the generic skip.
829
+ }
798
830
  result.skipped.push('.mcp.json');
799
831
  return;
800
832
  }
@@ -161,7 +161,14 @@ export declare class ContainerWorkerPool extends EventEmitter {
161
161
  */
162
162
  private execInContainer;
163
163
  /**
164
- * Build worker command for container execution
164
+ * Build worker command for container execution.
165
+ *
166
+ * #2371: the old command spawned `npx claude-flow@v3alpha daemon trigger`,
167
+ * which (a) referenced a deprecated dist-tag pointing at the pre-rename
168
+ * package, and (b) omitted `-y`, so npx could silently fall back to a
169
+ * locally-installed stale `claude-flow` without fetching the published
170
+ * version. Workers were running pre-autopilot / pre-browser builds.
171
+ * Use the current `ruflo@latest` and force a fresh resolution with `-y`.
165
172
  */
166
173
  private buildWorkerCommand;
167
174
  /**
@@ -444,12 +444,18 @@ export class ContainerWorkerPool extends EventEmitter {
444
444
  });
445
445
  }
446
446
  /**
447
- * Build worker command for container execution
447
+ * Build worker command for container execution.
448
+ *
449
+ * #2371: the old command spawned `npx claude-flow@v3alpha daemon trigger`,
450
+ * which (a) referenced a deprecated dist-tag pointing at the pre-rename
451
+ * package, and (b) omitted `-y`, so npx could silently fall back to a
452
+ * locally-installed stale `claude-flow` without fetching the published
453
+ * version. Workers were running pre-autopilot / pre-browser builds.
454
+ * Use the current `ruflo@latest` and force a fresh resolution with `-y`.
448
455
  */
449
456
  buildWorkerCommand(options) {
450
- // Use npx to run claude-flow daemon trigger
451
457
  return [
452
- 'npx', 'claude-flow@v3alpha',
458
+ 'npx', '-y', 'ruflo@latest',
453
459
  'daemon', 'trigger',
454
460
  '-w', options.workerType,
455
461
  '--headless',
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@claude-flow/cli",
3
- "version": "3.10.45",
3
+ "version": "3.10.46",
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",