minor terminal output copy updates

This commit is contained in:
lone-cloud 2025-12-02 21:20:29 -08:00
parent 29c2ad7608
commit 51495e48d4
5 changed files with 33 additions and 24 deletions

View file

@ -1,7 +1,7 @@
{ {
"name": "gerbil", "name": "gerbil",
"productName": "Gerbil", "productName": "Gerbil",
"version": "1.14.1", "version": "1.15.0",
"description": "Run Large Language Models locally", "description": "Run Large Language Models locally",
"main": "out/main/index.js", "main": "out/main/index.js",
"homepage": "./", "homepage": "./",
@ -60,7 +60,7 @@
"eslint-plugin-sonarjs": "^3.0.5", "eslint-plugin-sonarjs": "^3.0.5",
"globals": "^16.5.0", "globals": "^16.5.0",
"jiti": "^2.6.1", "jiti": "^2.6.1",
"prettier": "^3.7.3", "prettier": "^3.7.4",
"rollup-plugin-visualizer": "^6.0.5", "rollup-plugin-visualizer": "^6.0.5",
"typescript": "^5.9.3", "typescript": "^5.9.3",
"vite": "^7.2.6" "vite": "^7.2.6"

View file

@ -40,7 +40,10 @@ export const StatusBar = ({ maxDataPoints = 60 }: StatusBarProps) => {
const tunnelUrl = useMemo(() => { const tunnelUrl = useMemo(() => {
if (!tunnelBaseUrl) return null; if (!tunnelBaseUrl) return null;
if (frontendPreference === 'sillytavern' || frontendPreference === 'openwebui') { if (
frontendPreference === 'sillytavern' ||
frontendPreference === 'openwebui'
) {
return tunnelBaseUrl; return tunnelBaseUrl;
} }
return getTunnelInterfaceUrl(tunnelBaseUrl, { return getTunnelInterfaceUrl(tunnelBaseUrl, {
@ -48,7 +51,12 @@ export const StatusBar = ({ maxDataPoints = 60 }: StatusBarProps) => {
imageGenerationFrontendPreference, imageGenerationFrontendPreference,
isImageGenerationMode, isImageGenerationMode,
}); });
}, [tunnelBaseUrl, frontendPreference, imageGenerationFrontendPreference, isImageGenerationMode]); }, [
tunnelBaseUrl,
frontendPreference,
imageGenerationFrontendPreference,
isImageGenerationMode,
]);
useEffect(() => { useEffect(() => {
if (!systemMonitoringEnabled) { if (!systemMonitoringEnabled) {
@ -90,7 +98,8 @@ export const StatusBar = ({ maxDataPoints = 60 }: StatusBarProps) => {
}, [maxDataPoints, systemMonitoringEnabled]); }, [maxDataPoints, systemMonitoringEnabled]);
useEffect(() => { useEffect(() => {
const cleanup = window.electronAPI.kobold.onTunnelUrlChanged(setTunnelBaseUrl); const cleanup =
window.electronAPI.kobold.onTunnelUrlChanged(setTunnelBaseUrl);
return cleanup; return cleanup;
}, []); }, []);
@ -134,7 +143,11 @@ export const StatusBar = ({ maxDataPoints = 60 }: StatusBarProps) => {
color={copied ? 'teal' : undefined} color={copied ? 'teal' : undefined}
onClick={copy} onClick={copy}
> >
{copied ? <Check size="1.25rem" /> : <Globe size="1.25rem" />} {copied ? (
<Check size="1.25rem" />
) : (
<Globe size="1.25rem" />
)}
</ActionIcon> </ActionIcon>
</Tooltip> </Tooltip>
)} )}

View file

@ -39,7 +39,7 @@ function spawnPreLaunchCommands(commands: string[]) {
for (const command of commands) { for (const command of commands) {
if (!command.trim()) continue; if (!command.trim()) continue;
sendKoboldOutput(`[PRE-LAUNCH] Running: ${command}\n`); sendKoboldOutput(`Running: ${command}\n`);
try { try {
const child = spawn(shell, [shellFlag, command], { const child = spawn(shell, [shellFlag, command], {
@ -51,35 +51,31 @@ function spawnPreLaunchCommands(commands: string[]) {
preLaunchProcesses.add(child); preLaunchProcesses.add(child);
child.stdout?.on('data', (data) => { child.stdout?.on('data', (data) => {
sendKoboldOutput(`[PRE-LAUNCH] ${data.toString()}`, true); sendKoboldOutput(data.toString(), true);
}); });
child.stderr?.on('data', (data) => { child.stderr?.on('data', (data) => {
sendKoboldOutput(`[PRE-LAUNCH] ${data.toString()}`, true); sendKoboldOutput(data.toString(), true);
}); });
child.on('error', (error) => { child.on('error', (error) => {
sendKoboldOutput( sendKoboldOutput(`Failed to run "${command}": ${error.message}\n`);
`[PRE-LAUNCH ERROR] Failed to run "${command}": ${error.message}\n`
);
preLaunchProcesses.delete(child); preLaunchProcesses.delete(child);
}); });
child.on('exit', (code, signal) => { child.on('exit', (code, signal) => {
preLaunchProcesses.delete(child); preLaunchProcesses.delete(child);
if (code !== 0 && code !== null) { if (code !== 0 && code !== null) {
sendKoboldOutput( sendKoboldOutput(`Command "${command}" exited with code ${code}\n`);
`[PRE-LAUNCH] Command "${command}" exited with code ${code}\n`
);
} else if (signal) { } else if (signal) {
sendKoboldOutput( sendKoboldOutput(
`[PRE-LAUNCH] Command "${command}" terminated with signal ${signal}\n` `Command "${command}" terminated with signal ${signal}\n`
); );
} }
}); });
} catch (error) { } catch (error) {
sendKoboldOutput( sendKoboldOutput(
`[PRE-LAUNCH ERROR] Failed to start "${command}": ${error instanceof Error ? error.message : String(error)}\n` `Failed to start "${command}": ${error instanceof Error ? error.message : String(error)}\n`
); );
} }
} }

View file

@ -50,7 +50,7 @@ export const startTunnel = async () => {
tunnel.on('error', (error) => { tunnel.on('error', (error) => {
logError(`Tunnel error: ${error.message}`, error); logError(`Tunnel error: ${error.message}`, error);
sendKoboldOutput(`[TUNNEL ERROR] ${error.message}`); sendKoboldOutput(`Tunnel error: ${error.message}`);
}); });
tunnel.on('exit', (code, signal) => { tunnel.on('exit', (code, signal) => {
@ -66,7 +66,7 @@ export const startTunnel = async () => {
} catch (error) { } catch (error) {
const errorMessage = error instanceof Error ? error.message : String(error); const errorMessage = error instanceof Error ? error.message : String(error);
logError(`Failed to start tunnel: ${errorMessage}`, error as Error); logError(`Failed to start tunnel: ${errorMessage}`, error as Error);
sendKoboldOutput(`[TUNNEL ERROR] ${errorMessage}`); sendKoboldOutput(`Failed to start tunnel: ${errorMessage}`);
activeTunnel = null; activeTunnel = null;
return null; return null;
} }

View file

@ -3746,7 +3746,7 @@ __metadata:
jiti: "npm:^2.6.1" jiti: "npm:^2.6.1"
lucide-react: "npm:^0.555.0" lucide-react: "npm:^0.555.0"
mime-types: "npm:^3.0.2" mime-types: "npm:^3.0.2"
prettier: "npm:^3.7.3" prettier: "npm:^3.7.4"
react: "npm:^19.2.0" react: "npm:^19.2.0"
react-dom: "npm:^19.2.0" react-dom: "npm:^19.2.0"
react-error-boundary: "npm:^6.0.0" react-error-boundary: "npm:^6.0.0"
@ -5516,12 +5516,12 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"prettier@npm:^3.7.3": "prettier@npm:^3.7.4":
version: 3.7.3 version: 3.7.4
resolution: "prettier@npm:3.7.3" resolution: "prettier@npm:3.7.4"
bin: bin:
prettier: bin/prettier.cjs prettier: bin/prettier.cjs
checksum: 10c0/ee86bb06121c74dadc54f30b6f99aff6288966d9b842ce501d6991e20d20c6ce2d45028651b3b0955ca6e5fa89c1bee1e72b6f810243a93cef8bc69737972ef7 checksum: 10c0/9675d2cd08eacb1faf1d1a2dbfe24bfab6a912b059fc9defdb380a408893d88213e794a40a2700bd29b140eb3172e0b07c852853f6e22f16f3374659a1a13389
languageName: node languageName: node
linkType: hard linkType: hard