From c00b97a3f6340e270d054d1130bc7e929925c8cb Mon Sep 17 00:00:00 2001 From: Egor Date: Thu, 28 Aug 2025 13:44:06 -0700 Subject: [PATCH] more sillytavern integration fixes --- package.json | 2 +- .../screens/Interface/ServerTab.tsx | 2 +- src/main/ipc.ts | 9 +++- src/main/managers/SillyTavernManager.ts | 54 +++++++++---------- yarn.lock | 10 ++-- 5 files changed, 39 insertions(+), 38 deletions(-) diff --git a/package.json b/package.json index cf448f1..b3388a2 100644 --- a/package.json +++ b/package.json @@ -55,7 +55,7 @@ "@eslint/js": "^9.34.0", "@types/node": "^24.3.0", "@types/react": "^19.1.12", - "@types/react-dom": "^19.1.8", + "@types/react-dom": "^19.1.9", "@typescript-eslint/eslint-plugin": "^8.41.0", "@typescript-eslint/parser": "^8.41.0", "@vitejs/plugin-react": "^5.0.2", diff --git a/src/components/screens/Interface/ServerTab.tsx b/src/components/screens/Interface/ServerTab.tsx index 7a92e1a..9730e6a 100644 --- a/src/components/screens/Interface/ServerTab.tsx +++ b/src/components/screens/Interface/ServerTab.tsx @@ -29,7 +29,7 @@ export const ServerTab = ({ justifyContent: 'center', }} > - + Waiting for the KoboldCpp server to start... diff --git a/src/main/ipc.ts b/src/main/ipc.ts index 40060b9..f54a1b0 100644 --- a/src/main/ipc.ts +++ b/src/main/ipc.ts @@ -43,13 +43,18 @@ export class IPCHandlers { error?: string; }> { try { + const finalArgs = [...args]; const frontendPreference = (await this.configManager.get( 'frontendPreference' )) as FrontendPreference | undefined; + if (frontendPreference !== 'koboldcpp' && !finalArgs.includes('--cli')) { + finalArgs.push('--cli'); + } + if (frontendPreference === 'sillytavern') { try { - await this.sillyTavernManager.startFrontend(args); + await this.sillyTavernManager.startFrontend(finalArgs); } catch (error) { this.logManager.logError( 'Failed to setup SillyTavern:', @@ -58,7 +63,7 @@ export class IPCHandlers { } } - return await this.koboldManager.launchKoboldCpp(args); + return await this.koboldManager.launchKoboldCpp(finalArgs); } catch (error) { this.logManager.logError('Error in enhanced launch:', error as Error); return { diff --git a/src/main/managers/SillyTavernManager.ts b/src/main/managers/SillyTavernManager.ts index ea4a49e..bacd04b 100644 --- a/src/main/managers/SillyTavernManager.ts +++ b/src/main/managers/SillyTavernManager.ts @@ -77,6 +77,17 @@ export class SillyTavernManager { } } + private getSillyTavernBaseArgs(): string[] { + return [ + 'sillytavern', + '--listen', + '--browserLaunchEnabled', + 'false', + '--securityOverride', + 'true', + ]; + } + async isNpxAvailable(): Promise { try { const testProcess = spawn('npx', ['--version'], { stdio: 'pipe' }); @@ -114,7 +125,7 @@ export class SillyTavernManager { 'SillyTavern settings not found, starting SillyTavern briefly to generate config...' ); - const spawnArgs = ['sillytavern', '--browserLaunchEnabled', 'false']; + const spawnArgs = this.getSillyTavernBaseArgs(); this.windowManager.sendKoboldOutput( `Running command: npx ${spawnArgs.join(' ')}` @@ -143,7 +154,7 @@ export class SillyTavernManager { initProcess.kill('SIGTERM'); } cleanupAndResolve(); - }, 20000); + }, 90000); initProcess.on('exit', (code: number | null, signal: string | null) => { clearTimeout(timeout); @@ -156,6 +167,7 @@ export class SillyTavernManager { initProcess.on('error', (error) => { clearTimeout(timeout); + if (!hasResolved) { hasResolved = true; this.logManager.logError( @@ -172,9 +184,7 @@ export class SillyTavernManager { if (initProcess.stdout) { initProcess.stdout.on('data', (data: Buffer) => { const output = data.toString(); - this.windowManager.sendKoboldOutput( - `[SillyTavern stdout]: ${output.trim()}` - ); + if (output.includes('SillyTavern is listening')) { setTimeout(() => { if (!initProcess.killed && !hasResolved) { @@ -189,21 +199,17 @@ export class SillyTavernManager { if (initProcess.stderr) { initProcess.stderr.on('data', (data: Buffer) => { const output = data.toString(); - this.windowManager.sendKoboldOutput( - `[SillyTavern stderr]: ${output.trim()}` - ); + this.windowManager.sendKoboldOutput(output.trim()); }); } setTimeout(() => { if (!initProcess.killed && !hasResolved) { this.windowManager.sendKoboldOutput( - 'SillyTavern initialization taking longer than expected, proceeding...' + 'SillyTavern initialization taking longer than expected, please wait...' ); - initProcess.kill('SIGTERM'); - cleanupAndResolve(); } - }, 10000); + }, 30000); }); } @@ -329,17 +335,13 @@ export class SillyTavernManager { }); } - getDefaultSillyTavernConfig(): SillyTavernConfig { - return { - name: 'sillytavern', - port: SILLYTAVERN.PORT, - proxyPort: SILLYTAVERN.PROXY_PORT, - }; - } - async startFrontend(args: string[]): Promise { try { - const config = this.getDefaultSillyTavernConfig(); + const config = { + name: 'sillytavern', + port: SILLYTAVERN.PORT, + proxyPort: SILLYTAVERN.PROXY_PORT, + }; const { host: koboldHost, port: koboldPort } = this.parseKoboldConfig(args); @@ -357,14 +359,9 @@ export class SillyTavernManager { ); const sillyTavernArgs = [ - 'sillytavern', + ...this.getSillyTavernBaseArgs(), '--port', config.port.toString(), - '--listen', - '--browserLaunchEnabled', - 'false', - '--dataRoot', - this.getSillyTavernSettingsPath().replace('/settings.json', ''), ]; this.sillyTavernProcess = spawn('npx', sillyTavernArgs, { @@ -381,8 +378,7 @@ export class SillyTavernManager { if (this.sillyTavernProcess.stderr) { this.sillyTavernProcess.stderr.on('data', (data: Buffer) => { - const output = data.toString(); - this.windowManager.sendKoboldOutput(output, true); + this.windowManager.sendKoboldOutput(data.toString(), true); }); } diff --git a/yarn.lock b/yarn.lock index 047c40e..0ff8d24 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1324,12 +1324,12 @@ __metadata: languageName: node linkType: hard -"@types/react-dom@npm:^19.1.8": - version: 19.1.8 - resolution: "@types/react-dom@npm:19.1.8" +"@types/react-dom@npm:^19.1.9": + version: 19.1.9 + resolution: "@types/react-dom@npm:19.1.9" peerDependencies: "@types/react": ^19.0.0 - checksum: 10c0/561f9679c99e93adba8ecdf7d5ad69cc9d5e35837fa996246a83713f0ce498fc5b871f9a2a3342c7d440fc02159abe10f29c4a4004527d5d38b2e84f21840793 + checksum: 10c0/34c8dda86c1590b3ef0e7ecd38f9663a66ba2dd69113ba74fb0adc36b83bbfb8c94c1487a2505282a5f7e5e000d2ebf36f4c0fd41b3b672f5178fd1d4f1f8f58 languageName: node linkType: hard @@ -3603,7 +3603,7 @@ __metadata: "@mantine/hooks": "npm:^8.2.7" "@types/node": "npm:^24.3.0" "@types/react": "npm:^19.1.12" - "@types/react-dom": "npm:^19.1.8" + "@types/react-dom": "npm:^19.1.9" "@typescript-eslint/eslint-plugin": "npm:^8.41.0" "@typescript-eslint/parser": "npm:^8.41.0" "@vitejs/plugin-react": "npm:^5.0.2"