@axiomatic-labs/claudeflow 2.10.254 → 2.10.255

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 +25 -13
  2. package/package.json +1 -1
package/lib/install.js CHANGED
@@ -77,22 +77,34 @@ async function run() {
77
77
  fs.copyFileSync(srcSettings, dstSettings);
78
78
  }
79
79
 
80
- // Generate .mcp.json with project-specific CDP port
80
+ // Upsert playwright entry in .mcp.json with project-specific CDP port.
81
+ // IMPORTANT: read existing .mcp.json first and merge — never overwrite
82
+ // wholesale. Users may have custom MCP servers (claude-in-chrome, Linear,
83
+ // GitHub, etc) that must be preserved across install/update runs. Only
84
+ // the three template-managed entries (playwright, serena, context7) are
85
+ // allowed to be mutated by the installer.
81
86
  const cdpHash = require('crypto').createHash('sha1').update(cwd).digest();
82
87
  const cdpPort = 9200 + (cdpHash.readUInt16BE(2) % 100);
83
- const mcpConfig = {
84
- mcpServers: {
85
- playwright: {
86
- command: "npx",
87
- args: [
88
- "@playwright/mcp@latest",
89
- "--cdp-endpoint", `http://localhost:${cdpPort}`,
90
- "--caps", "vision,devtools",
91
- ],
92
- },
93
- },
88
+ const mcpPath = path.join(cwd, '.mcp.json');
89
+ let mcpConfig = { mcpServers: {} };
90
+ try {
91
+ const existing = fs.readFileSync(mcpPath, 'utf8');
92
+ mcpConfig = JSON.parse(existing);
93
+ if (!mcpConfig.mcpServers || typeof mcpConfig.mcpServers !== 'object') {
94
+ mcpConfig.mcpServers = {};
95
+ }
96
+ } catch {
97
+ // File doesn't exist or is invalid JSON — start fresh with empty servers
98
+ }
99
+ mcpConfig.mcpServers.playwright = {
100
+ command: "npx",
101
+ args: [
102
+ "@playwright/mcp@latest",
103
+ "--cdp-endpoint", `http://localhost:${cdpPort}`,
104
+ "--caps", "vision,devtools",
105
+ ],
94
106
  };
95
- fs.writeFileSync(path.join(cwd, '.mcp.json'), JSON.stringify(mcpConfig, null, 2) + '\n');
107
+ fs.writeFileSync(mcpPath, JSON.stringify(mcpConfig, null, 2) + '\n');
96
108
 
97
109
  // Copy all template-managed skills from the ZIP, including subskills.
98
110
  const srcSkills = path.join(srcClaude, 'skills');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@axiomatic-labs/claudeflow",
3
- "version": "2.10.254",
3
+ "version": "2.10.255",
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"