99 lines
2.4 KiB
TypeScript
99 lines
2.4 KiB
TypeScript
|
|
import { ipcMain } from 'electron';
|
|
import * as fs from 'fs';
|
|
import * as path from 'path';
|
|
import * as os from 'os';
|
|
|
|
export class ElectronIPCLike {
|
|
private webContents: Electron.WebContents;
|
|
|
|
constructor(webContents: Electron.WebContents) {
|
|
this.webContents = webContents;
|
|
}
|
|
|
|
postMessage(message: { command: string; data: any }): void {
|
|
this.webContents.send('message', message);
|
|
}
|
|
|
|
onDidReceiveMessage(callback: (message: { command: string; data: any }) => void): void {
|
|
ipcMain.on('message', (event, message) => {
|
|
callback(message);
|
|
});
|
|
}
|
|
}
|
|
|
|
|
|
interface IStdioLaunchSignature {
|
|
type: 'STDIO';
|
|
commandString: string;
|
|
cwd: string;
|
|
}
|
|
|
|
interface ISSELaunchSignature {
|
|
type:'SSE';
|
|
url: string;
|
|
oauth: string;
|
|
}
|
|
|
|
export type ILaunchSigature = IStdioLaunchSignature | ISSELaunchSignature;
|
|
|
|
export function refreshConnectionOption(envPath: string) {
|
|
const defaultOption = {
|
|
type:'STDIO',
|
|
command: 'mcp',
|
|
args: ['run', 'main.py'],
|
|
cwd: '../server'
|
|
};
|
|
|
|
fs.writeFileSync(envPath, JSON.stringify(defaultOption, null, 4));
|
|
|
|
return defaultOption;
|
|
}
|
|
|
|
function getEnvPath() {
|
|
const homepath = os.homedir();
|
|
const envPathDir = path.join(homepath, '.openmcp', 'desktop');
|
|
if (!fs.existsSync(envPathDir)) {
|
|
fs.mkdirSync(envPathDir, { recursive: true });
|
|
}
|
|
return path.join(envPathDir, '.env');
|
|
}
|
|
|
|
export function getInitConnectionOption() {
|
|
const envPath = getEnvPath();
|
|
|
|
if (!fs.existsSync(envPath)) {
|
|
return refreshConnectionOption(envPath);
|
|
}
|
|
|
|
try {
|
|
const option = JSON.parse(fs.readFileSync(envPath, 'utf-8'));
|
|
return option;
|
|
|
|
} catch (error) {
|
|
return refreshConnectionOption(envPath);
|
|
}
|
|
}
|
|
|
|
export function updateConnectionOption(data: any) {
|
|
const envPath = getEnvPath();
|
|
|
|
if (data.connectionType === 'STDIO') {
|
|
const connectionItem = {
|
|
type: 'STDIO',
|
|
command: data.command,
|
|
args: data.args,
|
|
cwd: data.cwd.replace(/\\/g, '/')
|
|
};
|
|
|
|
fs.writeFileSync(envPath, JSON.stringify(connectionItem, null, 4));
|
|
} else {
|
|
const connectionItem = {
|
|
type: 'SSE',
|
|
url: data.url,
|
|
oauth: data.oauth
|
|
};
|
|
|
|
fs.writeFileSync(envPath, JSON.stringify(connectionItem, null, 4));
|
|
}
|
|
} |