+86
-1
@@ -325,3 +325,88 @@ #!/usr/bin/env node | ||
| console.log(chalk.bold.green('\n✓ MCP server configured!\n')); | ||
| // Windsurf — only if .windsurf/ exists | ||
| const windsurfDir = path.join(process.cwd(), '.windsurf'); | ||
| if (fs.existsSync(windsurfDir)) { | ||
| const wsConfigPath = path.join(windsurfDir, 'mcp.json'); | ||
| let wsConfig = {}; | ||
| if (fs.existsSync(wsConfigPath)) { | ||
| try { wsConfig = JSON.parse(fs.readFileSync(wsConfigPath, 'utf-8')); } catch {} | ||
| } | ||
| if (!wsConfig.mcpServers) wsConfig.mcpServers = {}; | ||
| wsConfig.mcpServers.mindswap = mcpEntry; | ||
| fs.writeFileSync(wsConfigPath, JSON.stringify(wsConfig, null, 2), 'utf-8'); | ||
| console.log(chalk.green(' ✓ ') + 'Windsurf — .windsurf/mcp.json'); | ||
| configured++; | ||
| } else { | ||
| console.log(chalk.dim(' ○ ') + 'Windsurf — skipped (no .windsurf/ directory)'); | ||
| } | ||
| // Cline — VS Code extension, uses .cline/mcp.json or cline_mcp_settings.json | ||
| const clineDir = path.join(process.cwd(), '.cline'); | ||
| if (fs.existsSync(clineDir)) { | ||
| const clineConfigPath = path.join(clineDir, 'mcp.json'); | ||
| let clineConfig = {}; | ||
| if (fs.existsSync(clineConfigPath)) { | ||
| try { clineConfig = JSON.parse(fs.readFileSync(clineConfigPath, 'utf-8')); } catch {} | ||
| } | ||
| if (!clineConfig.mcpServers) clineConfig.mcpServers = {}; | ||
| clineConfig.mcpServers.mindswap = mcpEntry; | ||
| fs.writeFileSync(clineConfigPath, JSON.stringify(clineConfig, null, 2), 'utf-8'); | ||
| console.log(chalk.green(' ✓ ') + 'Cline — .cline/mcp.json'); | ||
| configured++; | ||
| } else { | ||
| console.log(chalk.dim(' ○ ') + 'Cline — skipped (no .cline/ directory)'); | ||
| } | ||
| // Roo Code — uses .roo/mcp.json | ||
| const rooDir = path.join(process.cwd(), '.roo'); | ||
| if (fs.existsSync(rooDir)) { | ||
| const rooConfigPath = path.join(rooDir, 'mcp.json'); | ||
| let rooConfig = {}; | ||
| if (fs.existsSync(rooConfigPath)) { | ||
| try { rooConfig = JSON.parse(fs.readFileSync(rooConfigPath, 'utf-8')); } catch {} | ||
| } | ||
| if (!rooConfig.mcpServers) rooConfig.mcpServers = {}; | ||
| rooConfig.mcpServers.mindswap = mcpEntry; | ||
| fs.writeFileSync(rooConfigPath, JSON.stringify(rooConfig, null, 2), 'utf-8'); | ||
| console.log(chalk.green(' ✓ ') + 'Roo Code — .roo/mcp.json'); | ||
| configured++; | ||
| } else { | ||
| console.log(chalk.dim(' ○ ') + 'Roo Code — skipped (no .roo/ directory)'); | ||
| } | ||
| // Codex CLI — uses ~/.codex/config.json | ||
| const codexDir = path.join(os.homedir(), '.codex'); | ||
| if (fs.existsSync(codexDir)) { | ||
| const codexConfigPath = path.join(codexDir, 'config.json'); | ||
| let codexConfig = {}; | ||
| if (fs.existsSync(codexConfigPath)) { | ||
| try { codexConfig = JSON.parse(fs.readFileSync(codexConfigPath, 'utf-8')); } catch {} | ||
| } | ||
| if (!codexConfig.mcpServers) codexConfig.mcpServers = {}; | ||
| codexConfig.mcpServers.mindswap = mcpEntry; | ||
| fs.writeFileSync(codexConfigPath, JSON.stringify(codexConfig, null, 2), 'utf-8'); | ||
| console.log(chalk.green(' ✓ ') + 'Codex CLI — ~/.codex/config.json'); | ||
| configured++; | ||
| } else { | ||
| console.log(chalk.dim(' ○ ') + 'Codex CLI — skipped (no ~/.codex/ directory)'); | ||
| } | ||
| // Gemini CLI — uses ~/.gemini/config.json | ||
| const geminiDir = path.join(os.homedir(), '.gemini'); | ||
| if (fs.existsSync(geminiDir)) { | ||
| const geminiConfigPath = path.join(geminiDir, 'settings.json'); | ||
| let geminiConfig = {}; | ||
| if (fs.existsSync(geminiConfigPath)) { | ||
| try { geminiConfig = JSON.parse(fs.readFileSync(geminiConfigPath, 'utf-8')); } catch {} | ||
| } | ||
| if (!geminiConfig.mcpServers) geminiConfig.mcpServers = {}; | ||
| geminiConfig.mcpServers.mindswap = mcpEntry; | ||
| fs.writeFileSync(geminiConfigPath, JSON.stringify(geminiConfig, null, 2), 'utf-8'); | ||
| console.log(chalk.green(' ✓ ') + 'Gemini CLI — ~/.gemini/settings.json'); | ||
| configured++; | ||
| } else { | ||
| console.log(chalk.dim(' ○ ') + 'Gemini CLI — skipped (no ~/.gemini/ directory)'); | ||
| } | ||
| console.log(chalk.bold.green(`\n✓ MCP server configured for ${configured} tool${configured > 1 ? 's' : ''}!\n`)); | ||
| console.log(chalk.dim(' 3 tools available to AI:')); | ||
@@ -328,0 +413,0 @@ console.log(chalk.white(' mindswap_get_context ') + chalk.dim('— "What do I need to know?"')); |
+1
-1
| { | ||
| "name": "mindswap", | ||
| "version": "3.1.0", | ||
| "version": "3.1.1", | ||
| "description": "Your AI's black box recorder. Auto-track project state so any AI tool picks up where the last one stopped.", | ||
@@ -5,0 +5,0 @@ "main": "src/index.js", |
AI-detected potential code anomaly
Supply chain riskAI has identified unusual behaviors that may pose a security risk.
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
AI-detected potential code anomaly
Supply chain riskAI has identified unusual behaviors that may pose a security risk.
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
199612
1.95%4536
1.8%