mirror of
https://github.com/CherryHQ/cherry-studio.git
synced 2025-12-25 03:10:08 +08:00
- Refactored MCPService to streamline command handling for 'npx' and 'uvx', removing unnecessary installation checks and directly retrieving binary paths. - Updated getBinaryPath and isBinaryExists functions to be asynchronous, enhancing their reliability in checking binary existence and paths. - Cleaned up imports and removed unused dependencies for better code clarity.
50 lines
1.5 KiB
TypeScript
50 lines
1.5 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 getBinaryPath(name: string): Promise<string> {
|
|
let cmd = process.platform === 'win32' ? `${name}.exe` : name
|
|
const binariesDir = path.join(os.homedir(), '.cherrystudio', 'bin')
|
|
const binariesDirExists = await fs.existsSync(binariesDir)
|
|
cmd = binariesDirExists ? path.join(binariesDir, name) : name
|
|
return cmd
|
|
}
|
|
|
|
export async function isBinaryExists(name: string): Promise<boolean> {
|
|
const cmd = await getBinaryPath(name)
|
|
return await fs.existsSync(cmd)
|
|
}
|