mirror of
https://github.com/CherryHQ/cherry-studio.git
synced 2025-12-29 23:12:38 +08:00
* refactor(MCPService, process): enhance registry URL handling and improve getBinaryPath function - Updated MCPService to conditionally set the NPM_CONFIG_REGISTRY based on server name, improving flexibility for auto-install scenarios. - Modified getBinaryPath function to handle optional name parameter, returning a default path when no name is provided, enhancing usability. * refactor(MCPService, utils): add directory existence check for registry file - Introduced makeSureDirExists utility function to ensure the specified directory exists, enhancing robustness. - Updated MCPService to utilize this function when setting the registry URL for the mcp-auto-install server, improving error handling. * feat:change MCP_REGISTRY_PATH * refactor(MCPService): streamline environment variable setup for mcp-auto-install - Updated MCPService to conditionally set NPM_CONFIG_REGISTRY and MCP_REGISTRY_PATH in a more concise manner. - Enhanced readability by removing redundant code while maintaining functionality. --------- Co-authored-by: lizhixuan <zhixuan.li@banosuperapp.com>
60 lines
1.7 KiB
TypeScript
60 lines
1.7 KiB
TypeScript
import { spawn } from 'child_process'
|
|
import log from 'electron-log'
|
|
import fs from 'fs'
|
|
import os from 'os'
|
|
import path from 'path'
|
|
|
|
import { getResourcePath } from '.'
|
|
|
|
export function runInstallScript(scriptPath: string): Promise<void> {
|
|
return new Promise<void>((resolve, reject) => {
|
|
const installScriptPath = path.join(getResourcePath(), 'scripts', scriptPath)
|
|
log.info(`Running script at: ${installScriptPath}`)
|
|
|
|
const nodeProcess = spawn(process.execPath, [installScriptPath], {
|
|
env: { ...process.env, ELECTRON_RUN_AS_NODE: '1' }
|
|
})
|
|
|
|
nodeProcess.stdout.on('data', (data) => {
|
|
log.info(`Script output: ${data}`)
|
|
})
|
|
|
|
nodeProcess.stderr.on('data', (data) => {
|
|
log.error(`Script error: ${data}`)
|
|
})
|
|
|
|
nodeProcess.on('close', (code) => {
|
|
if (code === 0) {
|
|
log.info('Script completed successfully')
|
|
resolve()
|
|
} else {
|
|
log.error(`Script exited with code ${code}`)
|
|
reject(new Error(`Process exited with code ${code}`))
|
|
}
|
|
})
|
|
})
|
|
}
|
|
|
|
export async function getBinaryName(name: string): Promise<string> {
|
|
if (process.platform === 'win32') {
|
|
return `${name}.exe`
|
|
}
|
|
return name
|
|
}
|
|
|
|
export async function getBinaryPath(name?: string): Promise<string> {
|
|
if (!name) {
|
|
return path.join(os.homedir(), '.cherrystudio', 'bin')
|
|
}
|
|
|
|
const binaryName = await getBinaryName(name)
|
|
const binariesDir = path.join(os.homedir(), '.cherrystudio', 'bin')
|
|
const binariesDirExists = await fs.existsSync(binariesDir)
|
|
return binariesDirExists ? path.join(binariesDir, binaryName) : binaryName
|
|
}
|
|
|
|
export async function isBinaryExists(name: string): Promise<boolean> {
|
|
const cmd = await getBinaryPath(name)
|
|
return await fs.existsSync(cmd)
|
|
}
|