mirror of
https://github.com/openswarm-ai/openswarm.git
synced 2026-09-11 12:17:45 +02:00
[shawn] chore: drop dead Instagram MCP CLI bridge from electron/main.js
getInstagramMcpPackageRoot, resolveNodeForMcpCli, and runInstagramBuddyCli were orphaned when Instagram MCP was vendored into backend/apps/instagram_mcp. runInstagramBuddyCli had zero callers and was the only caller of the other two. Removes 102 lines of dead code; node --check still passes.
This commit is contained in:
@@ -281,108 +281,6 @@ function getBundledNodePath() {
|
||||
return fs.existsSync(candidate) ? candidate : null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Directory containing package.json + dist/index.js + node_modules for
|
||||
* instagram-mcp-buddy (dev: monorepo root; packaged: extraResources/instagram-mcp).
|
||||
*/
|
||||
function getInstagramMcpPackageRoot() {
|
||||
const base = isPackaged ? process.resourcesPath : path.join(__dirname, '..');
|
||||
return path.join(base, 'instagram-mcp');
|
||||
}
|
||||
|
||||
/**
|
||||
* Resolve a Node binary for spawning instagram-mcp-buddy. Prefer the same
|
||||
* bundled Node shipped for 9Router/MCP so Finder-launched Mac apps work
|
||||
* without a user PATH; fall back to OPENSWARM_NODE_PATH, login-shell resolution
|
||||
* (dev), then `node` on PATH.
|
||||
*/
|
||||
function resolveNodeForMcpCli() {
|
||||
const bundled = getBundledNodePath();
|
||||
if (bundled && fs.existsSync(bundled)) return bundled;
|
||||
const fromEnv = process.env.OPENSWARM_NODE_PATH;
|
||||
if (fromEnv && fs.existsSync(fromEnv)) return fromEnv;
|
||||
if (!isPackaged && process.platform !== 'win32') {
|
||||
try {
|
||||
const shell = process.env.SHELL || '/bin/zsh';
|
||||
const p = execFileSync(shell, ['-lc', 'command -v node'], {
|
||||
encoding: 'utf8',
|
||||
timeout: 8000,
|
||||
env: { ...process.env, HOME: os.homedir() },
|
||||
}).trim().split(/\r?\n/).filter(Boolean).pop();
|
||||
if (p && fs.existsSync(p)) return p;
|
||||
} catch (_) { /* fall through */ }
|
||||
for (const c of ['/opt/homebrew/bin/node', '/usr/local/bin/node']) {
|
||||
if (fs.existsSync(c)) return c;
|
||||
}
|
||||
}
|
||||
if (!isPackaged && process.platform === 'win32') {
|
||||
try {
|
||||
const p = execFileSync('where', ['node'], { encoding: 'utf8', timeout: 8000 }).trim().split(/\r?\n/).filter(Boolean)[0];
|
||||
if (p && fs.existsSync(p)) return p;
|
||||
} catch (_) { /* fall through */ }
|
||||
}
|
||||
return process.platform === 'win32' ? 'node.exe' : 'node';
|
||||
}
|
||||
|
||||
/**
|
||||
* Run instagram-mcp-buddy connect|logout non-interactively. Prefers the workspace
|
||||
* build at ../instagram-mcp/dist/index.js when present (dev / source tree);
|
||||
* otherwise `npx -y instagram-mcp-buddy` so packaged apps work without shipping
|
||||
* the subfolder. Inherits a shell-expanded PATH on macOS (see getShellPath).
|
||||
*
|
||||
* @param {'connect'|'logout'} subcommand
|
||||
* @param {Record<string, string>} [extraEnv] merged into child env (e.g. INSTAGRAM_MCP_ENABLE_* from MCP config)
|
||||
* @returns {Promise<Record<string, unknown>>}
|
||||
*/
|
||||
function runInstagramBuddyCli(subcommand, extraEnv = {}) {
|
||||
return new Promise((resolve, reject) => {
|
||||
const igPkgRoot = getInstagramMcpPackageRoot();
|
||||
const localScript = path.join(igPkgRoot, 'dist', 'index.js');
|
||||
const pathMerged = [getShellPath(), process.env.PATH || ''].filter(Boolean).join(path.delimiter);
|
||||
const env = { ...process.env, ...extraEnv, PATH: pathMerged };
|
||||
|
||||
let cmd;
|
||||
let args;
|
||||
let shell = false;
|
||||
/** cwd for module resolution (instagram-mcp-buddy needs package node_modules). */
|
||||
let cwd = isPackaged ? process.resourcesPath : path.join(__dirname, '..');
|
||||
|
||||
if (fs.existsSync(localScript)) {
|
||||
cmd = resolveNodeForMcpCli();
|
||||
args = [localScript, subcommand];
|
||||
cwd = igPkgRoot;
|
||||
} else {
|
||||
cmd = 'npx';
|
||||
args = ['-y', 'instagram-mcp-buddy', subcommand];
|
||||
if (process.platform === 'win32') shell = true;
|
||||
}
|
||||
|
||||
const child = spawn(cmd, args, { env, cwd, windowsHide: true, shell });
|
||||
let out = '';
|
||||
let err = '';
|
||||
child.stdout.on('data', (d) => { out += d.toString(); });
|
||||
child.stderr.on('data', (d) => { err += d.toString(); });
|
||||
child.on('error', (e) => reject(e));
|
||||
child.on('close', (code) => {
|
||||
if (code !== 0) {
|
||||
const msg = (err || '').trim() || (out || '').trim() || `instagram-mcp-buddy ${subcommand} exited ${code}`;
|
||||
reject(new Error(msg));
|
||||
return;
|
||||
}
|
||||
const line = out.trim().split(/\r?\n/).filter(Boolean).pop();
|
||||
if (!line) {
|
||||
reject(new Error(`instagram-mcp-buddy ${subcommand}: empty stdout`));
|
||||
return;
|
||||
}
|
||||
try {
|
||||
resolve(JSON.parse(line));
|
||||
} catch (e) {
|
||||
reject(new Error(`instagram-mcp-buddy ${subcommand}: invalid JSON: ${line.slice(0, 200)}`));
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// Never wall-clock times out: cold-Defender Windows can take minutes.
|
||||
function waitForBackend(port, opts = {}) {
|
||||
const proc = opts.process || null;
|
||||
|
||||
Reference in New Issue
Block a user