@axiomatic-labs/claudeflow 2.12.263 → 2.12.265

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.
Files changed (2) hide show
  1. package/lib/install.js +19 -1
  2. package/package.json +1 -1
package/lib/install.js CHANGED
@@ -104,7 +104,10 @@ async function run() {
104
104
  } catch {
105
105
  // File doesn't exist or is invalid JSON — start fresh with empty servers
106
106
  }
107
+ // Spread first so user-added fields (env with API keys, cwd, etc.) survive.
108
+ // Only command/args are CLI-canonical and get overridden.
107
109
  mcpConfig.mcpServers.playwright = {
110
+ ...mcpConfig.mcpServers.playwright,
108
111
  command: "npx",
109
112
  args: [
110
113
  "@playwright/mcp@latest",
@@ -598,7 +601,9 @@ function configureMcpServers(hasUv) {
598
601
  '--project-from-cwd',
599
602
  ];
600
603
  ui.step(mcpConfig.mcpServers.serena ? 'Refreshing Serena MCP configuration...' : 'Adding Serena MCP for semantic code analysis...');
604
+ // Spread first so user-added fields (env with API keys, cwd, etc.) survive.
601
605
  mcpConfig.mcpServers.serena = {
606
+ ...mcpConfig.mcpServers.serena,
602
607
  type: 'stdio',
603
608
  command: serenaCommand,
604
609
  args: serenaArgs,
@@ -609,7 +614,9 @@ function configureMcpServers(hasUv) {
609
614
 
610
615
  // context7 MCP
611
616
  ui.step(mcpConfig.mcpServers.context7 ? 'Refreshing context7 MCP configuration...' : 'Adding context7 MCP for library documentation...');
617
+ // Spread first so user-added fields (env with API keys, cwd, etc.) survive.
612
618
  mcpConfig.mcpServers.context7 = {
619
+ ...mcpConfig.mcpServers.context7,
613
620
  type: 'stdio',
614
621
  command: 'npx',
615
622
  args: ['-y', '@upstash/context7-mcp@latest'],
@@ -639,8 +646,19 @@ function commandExists(cmd) {
639
646
  }
640
647
 
641
648
  function indexSerenaProject(projectRoot) {
642
- ui.step('Indexing project for Serena...');
643
649
  const statusPath = path.join(projectRoot, '.claudeflow', 'tmp', 'tooling', 'serena-status.json');
650
+
651
+ // Idempotent reinstall: skip indexing if a previous install already indexed
652
+ // the project successfully. To force a reindex, delete the marker file.
653
+ try {
654
+ const existing = JSON.parse(fs.readFileSync(statusPath, 'utf8'));
655
+ if (existing && existing.indexed === true) {
656
+ ui.success('Serena project index already present (delete .claudeflow/tmp/tooling/serena-status.json to force reindex)');
657
+ return;
658
+ }
659
+ } catch {}
660
+
661
+ ui.step('Indexing project for Serena...');
644
662
  const attempts = [
645
663
  { command: 'uvx', args: ['--from', SERENA_REPO, 'serena', 'project', 'index', projectRoot] },
646
664
  { command: 'uv', args: ['run', '--with', SERENA_REPO, 'serena', 'project', 'index', projectRoot] },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@axiomatic-labs/claudeflow",
3
- "version": "2.12.263",
3
+ "version": "2.12.265",
4
4
  "description": "Claudeflow — AI-powered development toolkit for Claude Code. Skills, agents, hooks, and quality gates that ship production apps.",
5
5
  "bin": {
6
6
  "claudeflow": "./bin/cli.js"