rename the project to gerbil

This commit is contained in:
Egor 2025-08-30 12:11:59 -07:00
parent 773685c300
commit 4d1fec114d
18 changed files with 150 additions and 148 deletions

View file

@ -1,4 +1,4 @@
# Copilot Instructions for FriendlyKobold
# Copilot Instructions for Gerbil
### General Coding

View file

@ -50,7 +50,7 @@ jobs:
const version = tag.replace(/^v/, '');
const authorName = packageJson.author.name;
const authorEmail = packageJson.author.email;
const appImageUrl = `https://github.com/lone-cloud/friendly-kobold/releases/download/${tag}/Friendly.Kobold-${version}.AppImage`;
const appImageUrl = `https://github.com/lone-cloud/gerbil/releases/download/${tag}/Friendly.Kobold-${version}.AppImage`;
core.setOutput('version', version);
core.setOutput('tag', tag);
@ -97,7 +97,7 @@ jobs:
# Download AppImage with retry
for attempt in $(seq 1 $max_attempts); do
echo "Attempt $attempt: Downloading AppImage..."
if curl -L -o "friendly-kobold-${{ steps.release_info.outputs.version }}.AppImage" "${{ steps.release_info.outputs.appimage_url }}"; then
if curl -L -o "gerbil-${{ steps.release_info.outputs.version }}.AppImage" "${{ steps.release_info.outputs.appimage_url }}"; then
echo "✅ AppImage downloaded successfully"
break
else
@ -113,7 +113,7 @@ jobs:
# Download desktop file with retry
for attempt in $(seq 1 $max_attempts); do
echo "Attempt $attempt: Downloading desktop file..."
if curl -L -o "friendly-kobold.desktop" "https://raw.githubusercontent.com/lone-cloud/friendly-kobold/${{ inputs.tag }}/assets/friendly-kobold.desktop"; then
if curl -L -o "gerbil.desktop" "https://raw.githubusercontent.com/lone-cloud/gerbil/${{ inputs.tag }}/assets/gerbil.desktop"; then
echo "✅ Desktop file downloaded successfully"
break
else
@ -127,15 +127,15 @@ jobs:
done
# Verify file sizes
appimage_size=$(stat -c%s "friendly-kobold-${{ steps.release_info.outputs.version }}.AppImage")
appimage_size=$(stat -c%s "gerbil-${{ steps.release_info.outputs.version }}.AppImage")
echo "AppImage size: $appimage_size bytes"
if [ $appimage_size -lt 50000000 ]; then # Less than 50MB is suspicious
echo "❌ AppImage seems too small ($appimage_size bytes), possible download issue"
exit 1
fi
SHA256_APPIMAGE=$(sha256sum "friendly-kobold-${{ steps.release_info.outputs.version }}.AppImage" | cut -d' ' -f1)
SHA256_DESKTOP=$(sha256sum "friendly-kobold.desktop" | cut -d' ' -f1)
SHA256_APPIMAGE=$(sha256sum "gerbil-${{ steps.release_info.outputs.version }}.AppImage" | cut -d' ' -f1)
SHA256_DESKTOP=$(sha256sum "gerbil.desktop" | cut -d' ' -f1)
echo "sha256_appimage=$SHA256_APPIMAGE" >> $GITHUB_OUTPUT
echo "sha256_desktop=$SHA256_DESKTOP" >> $GITHUB_OUTPUT
@ -147,62 +147,62 @@ jobs:
run: |
cat > PKGBUILD << 'EOF'
# Maintainer: ${{ steps.release_info.outputs.author_name }} <${{ steps.release_info.outputs.author_email }}>
pkgname=friendly-kobold
pkgname=gerbil
pkgver=${{ steps.release_info.outputs.version }}
pkgrel=${{ inputs.pkgrel || '1' }}
pkgdesc="A desktop app for running Large Language Models locally"
arch=('x86_64')
url="https://github.com/lone-cloud/friendly-kobold"
url="https://github.com/lone-cloud/gerbil"
license=('AGPL-3.0-or-later')
depends=('gtk3' 'nss')
optdepends=('alsa-lib: Audio support for sound effects'
'libxss: Screen saver detection support')
provides=('friendly-kobold')
conflicts=('friendly-kobold-git')
source=("friendly-kobold-${pkgver}.AppImage::${{ steps.release_info.outputs.appimage_url }}"
"friendly-kobold.desktop::https://raw.githubusercontent.com/lone-cloud/friendly-kobold/${{ steps.release_info.outputs.tag }}/assets/friendly-kobold.desktop")
provides=('gerbil')
conflicts=('gerbil-git')
source=("gerbil-${pkgver}.AppImage::${{ steps.release_info.outputs.appimage_url }}"
"gerbil.desktop::https://raw.githubusercontent.com/lone-cloud/gerbil/${{ steps.release_info.outputs.tag }}/assets/gerbil.desktop")
sha256sums=('${{ steps.sha_calc.outputs.sha256_appimage }}'
'${{ steps.sha_calc.outputs.sha256_desktop }}')
prepare() {
chmod +x "friendly-kobold-${pkgver}.AppImage"
"./friendly-kobold-${pkgver}.AppImage" --appimage-extract
chmod +x "gerbil-${pkgver}.AppImage"
"./gerbil-${pkgver}.AppImage" --appimage-extract
}
package() {
# Install the application
install -dm755 "${pkgdir}/opt/friendly-kobold"
cp -r squashfs-root/* "${pkgdir}/opt/friendly-kobold/"
install -dm755 "${pkgdir}/opt/gerbil"
cp -r squashfs-root/* "${pkgdir}/opt/gerbil/"
# Fix permissions on extracted files
chmod -R 755 "${pkgdir}/opt/friendly-kobold/"
chmod -R 755 "${pkgdir}/opt/gerbil/"
# Create executable wrapper
install -dm755 "${pkgdir}/usr/bin"
cat > "${pkgdir}/usr/bin/friendly-kobold" << 'WRAPPER'
cat > "${pkgdir}/usr/bin/gerbil" << 'WRAPPER'
#!/bin/bash
exec "/opt/friendly-kobold/Friendly Kobold" "$@"
exec "/opt/gerbil/Gerbil" "$@"
WRAPPER
chmod +x "${pkgdir}/usr/bin/friendly-kobold"
chmod +x "${pkgdir}/usr/bin/gerbil"
# Install desktop file from assets
install -dm755 "${pkgdir}/usr/share/applications"
cp "${srcdir}/friendly-kobold.desktop" "${pkgdir}/usr/share/applications/"
cp "${srcdir}/gerbil.desktop" "${pkgdir}/usr/share/applications/"
# Install icon to hicolor theme directory and pixmaps as fallback
install -dm755 "${pkgdir}/usr/share/icons/hicolor/512x512/apps"
install -dm755 "${pkgdir}/usr/share/pixmaps"
# Try different possible icon locations
if [ -f "${pkgdir}/opt/friendly-kobold/resources/assets/icon.png" ]; then
cp "${pkgdir}/opt/friendly-kobold/resources/assets/icon.png" "${pkgdir}/usr/share/icons/hicolor/512x512/apps/friendly-kobold.png"
cp "${pkgdir}/opt/friendly-kobold/resources/assets/icon.png" "${pkgdir}/usr/share/pixmaps/friendly-kobold.png"
elif [ -f "${pkgdir}/opt/friendly-kobold/assets/icon.png" ]; then
cp "${pkgdir}/opt/friendly-kobold/assets/icon.png" "${pkgdir}/usr/share/icons/hicolor/512x512/apps/friendly-kobold.png"
cp "${pkgdir}/opt/friendly-kobold/assets/icon.png" "${pkgdir}/usr/share/pixmaps/friendly-kobold.png"
elif [ -f "${pkgdir}/opt/friendly-kobold/icon.png" ]; then
cp "${pkgdir}/opt/friendly-kobold/icon.png" "${pkgdir}/usr/share/icons/hicolor/512x512/apps/friendly-kobold.png"
cp "${pkgdir}/opt/friendly-kobold/icon.png" "${pkgdir}/usr/share/pixmaps/friendly-kobold.png"
if [ -f "${pkgdir}/opt/gerbil/resources/assets/icon.png" ]; then
cp "${pkgdir}/opt/gerbil/resources/assets/icon.png" "${pkgdir}/usr/share/icons/hicolor/512x512/apps/gerbil.png"
cp "${pkgdir}/opt/gerbil/resources/assets/icon.png" "${pkgdir}/usr/share/pixmaps/gerbil.png"
elif [ -f "${pkgdir}/opt/gerbil/assets/icon.png" ]; then
cp "${pkgdir}/opt/gerbil/assets/icon.png" "${pkgdir}/usr/share/icons/hicolor/512x512/apps/gerbil.png"
cp "${pkgdir}/opt/gerbil/assets/icon.png" "${pkgdir}/usr/share/pixmaps/gerbil.png"
elif [ -f "${pkgdir}/opt/gerbil/icon.png" ]; then
cp "${pkgdir}/opt/gerbil/icon.png" "${pkgdir}/usr/share/icons/hicolor/512x512/apps/gerbil.png"
cp "${pkgdir}/opt/gerbil/icon.png" "${pkgdir}/usr/share/pixmaps/gerbil.png"
else
echo "Warning: Could not find icon.png in expected locations"
fi
@ -213,31 +213,31 @@ jobs:
run: |
# Create .SRCINFO file (required for AUR)
cat > .SRCINFO << 'EOF'
pkgbase = friendly-kobold
pkgbase = gerbil
pkgdesc = A desktop app for running Large Language Models locally
pkgver = ${{ steps.release_info.outputs.version }}
pkgrel = ${{ inputs.pkgrel || '1' }}
url = https://github.com/lone-cloud/friendly-kobold
url = https://github.com/lone-cloud/gerbil
arch = x86_64
license = AGPL-3.0-or-later
depends = gtk3
depends = nss
optdepends = alsa-lib: Audio support for sound effects
optdepends = libxss: Screen saver detection support
provides = friendly-kobold
conflicts = friendly-kobold-git
source = friendly-kobold-${{ steps.release_info.outputs.version }}.AppImage::${{ steps.release_info.outputs.appimage_url }}
source = friendly-kobold.desktop::https://raw.githubusercontent.com/lone-cloud/friendly-kobold/${{ steps.release_info.outputs.tag }}/assets/friendly-kobold.desktop
provides = gerbil
conflicts = gerbil-git
source = gerbil-${{ steps.release_info.outputs.version }}.AppImage::${{ steps.release_info.outputs.appimage_url }}
source = gerbil.desktop::https://raw.githubusercontent.com/lone-cloud/gerbil/${{ steps.release_info.outputs.tag }}/assets/gerbil.desktop
sha256sums = ${{ steps.sha_calc.outputs.sha256_appimage }}
sha256sums = ${{ steps.sha_calc.outputs.sha256_desktop }}
pkgname = friendly-kobold
pkgname = gerbil
EOF
- name: Publish to AUR
uses: KSXGitHub/github-actions-deploy-aur@v2.7.2
with:
pkgname: friendly-kobold
pkgname: gerbil
pkgbuild: ./PKGBUILD
commit_username: ${{ steps.release_info.outputs.author_name }}
commit_email: ${{ steps.release_info.outputs.author_email }}
@ -249,16 +249,16 @@ jobs:
run: |
echo "## AUR Release Summary" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "📦 **Package**: friendly-kobold" >> $GITHUB_STEP_SUMMARY
echo "📦 **Package**: gerbil" >> $GITHUB_STEP_SUMMARY
echo "🔖 **Version**: ${{ steps.release_info.outputs.version }}" >> $GITHUB_STEP_SUMMARY
echo "🔗 **AUR Page**: https://aur.archlinux.org/packages/friendly-kobold" >> $GITHUB_STEP_SUMMARY
echo "🔗 **AUR Page**: https://aur.archlinux.org/packages/gerbil" >> $GITHUB_STEP_SUMMARY
echo "✅ **Status**: Successfully published to AUR" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "### Installation" >> $GITHUB_STEP_SUMMARY
echo '```bash' >> $GITHUB_STEP_SUMMARY
echo "# Using yay" >> $GITHUB_STEP_SUMMARY
echo "yay -S friendly-kobold" >> $GITHUB_STEP_SUMMARY
echo "yay -S gerbil" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "# Using paru" >> $GITHUB_STEP_SUMMARY
echo "paru -S friendly-kobold" >> $GITHUB_STEP_SUMMARY
echo "paru -S gerbil" >> $GITHUB_STEP_SUMMARY
echo '```' >> $GITHUB_STEP_SUMMARY

View file

@ -118,7 +118,7 @@ jobs:
- name: Create Release
run: |
gh release create ${{ steps.tag.outputs.tag }} \
--title "FriendlyKobold ${{ steps.tag.outputs.tag }}" \
--title "Gerbil ${{ steps.tag.outputs.tag }}" \
--generate-notes
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View file

@ -1,7 +1,8 @@
# Friendly Kobold
# Gerbil
A desktop app for running Large Language Models locally. <!-- markdownlint-disable MD033 -->
<img src="src/assets/icon.png" alt="FriendlyKobold Icon" width="32" height="32">
A simple desktop app to easily run Large Language Models locally through KoboldCpp.
<img src="src/assets/icon.png" alt="Gerbil Icon" width="32" height="32">
<!-- markdownlint-enable MD033 -->
@ -20,12 +21,12 @@ A desktop app for running Large Language Models locally. <!-- markdownlint-disab
### Pre-built Binaries
Download the latest release for your platform from the [GitHub Releases page](https://github.com/lone-cloud/friendly-kobold/releases/latest):
Download the latest release for your platform from the [GitHub Releases page](https://github.com/lone-cloud/gerbil/releases/latest):
- **Windows**: `Friendly.Kobold-Portable-X.X.X.exe` (portable executable)
- **Windows**: `Friendly.Kobold-Setup-X.X.X.exe` (installer executable)
- **macOS**: `Friendly.Kobold-X.X.X.dmg` (disk image)
- **Linux**: `Friendly.Kobold-X.X.X.AppImage` (portable application)
- **Windows**: `Gerbil-Portable-X.X.X.exe` (portable executable)
- **Windows**: `Gerbil-Setup-X.X.X.exe` (installer executable)
- **macOS**: `Gerbil-X.X.X.dmg` (disk image)
- **Linux**: `Gerbil-X.X.X.AppImage` (portable application)
#### Linux - AUR (Arch Linux)
@ -33,18 +34,18 @@ For Arch Linux users, install from the AUR using your preferred AUR helper:
```bash
# Using yay
yay -S friendly-kobold
yay -S gerbil
# Using paru
paru -S friendly-kobold
paru -S gerbil
# Manual installation
git clone https://aur.archlinux.org/friendly-kobold.git
cd friendly-kobold
git clone https://aur.archlinux.org/gerbil.git
cd gerbil
makepkg -si
```
The AUR package automatically handles installation, desktop integration, and system updates. This is the ideal way to run Friendly Kobold on Linux.
The AUR package automatically handles installation, desktop integration, and system updates. This is the ideal way to run Gerbil on Linux.
## Screenshots
@ -80,11 +81,11 @@ Not all koboldcpp features have currently been ported over to the UI. As a worka
## CLI Mode
The `--cli` argument allows you to use the Friendly Kobold binary as a proxy to the downloaded KoboldCpp binary. This enables you to run KoboldCpp from the command line using the same binary that the GUI has downloaded.
The `--cli` argument allows you to use the Gerbil binary as a proxy to the downloaded KoboldCpp binary. This enables you to run KoboldCpp from the command line using the same binary that the GUI has downloaded.
### Considerations
You might want to run CLI Mode if you're looking to use a different frontend, such as OpenWebUI, than the ones bundled (eg. KoboldAI Lite, Stable UI) with KoboldCpp AND you're looking to minimize any resource utilization of this app. Note that at the time of this writing, Friendly Kobold only takes about ~200MB of RAM and ~100MB of VRAM for its Chromium-based UI. When running in CLI Mode, Friendly Kobold will still take about 1/3 of those RAM and VRAM numbers.
You might want to run CLI Mode if you're looking to use a different frontend, such as OpenWebUI, than the ones bundled (eg. KoboldAI Lite, Stable UI) with KoboldCpp AND you're looking to minimize any resource utilization of this app. Note that at the time of this writing, Gerbil only takes about ~200MB of RAM and ~100MB of VRAM for its Chromium-based UI. When running in CLI Mode, Gerbil will still take about 1/3 of those RAM and VRAM numbers.
### Usage
@ -92,25 +93,25 @@ You might want to run CLI Mode if you're looking to use a different frontend, su
```bash
# Basic usage - launch KoboldCpp launcher with no arguments
friendly-kobold --cli
gerbil --cli
# Pass arguments to KoboldCpp
friendly-kobold --cli --help
friendly-kobold --cli --port 5001 --model /path/to/model.gguf
gerbil --cli --help
gerbil --cli --port 5001 --model /path/to/model.gguf
# Any KoboldCpp arguments are supported
friendly-kobold --cli --model /path/to/model.gguf --port 5001 --host 0.0.0.0 --multiuser 2
gerbil --cli --model /path/to/model.gguf --port 5001 --host 0.0.0.0 --multiuser 2
# CLI inception (friendly kobold CLI calling KoboldCpp CLI mode)
# CLI inception (Gerbil CLI calling KoboldCpp CLI mode)
# This is the ideal way to run a custom frontend
friendly-kobold --cli --cli --model /path/to/model.gguf --gpulayers 57 --contextsize 8192 --port 5001 --multiuser 1 --flashattention --usemmap --usevulkan
gerbil --cli --cli --model /path/to/model.gguf --gpulayers 57 --contextsize 8192 --port 5001 --multiuser 1 --flashattention --usemmap --usevulkan
```
**Windows:**
CLI mode will only work correctly on Windows if you install Friendly Kobold using the Setup.exe from the github releases. Otherwise there is currently a technical limitation with the Windows portable .exe which will cause it to not display the terminal output correctly nor will it be killable through the standard terminal (Ctrl+C) commands.
CLI mode will only work correctly on Windows if you install Gerbil using the Setup.exe from the github releases. Otherwise there is currently a technical limitation with the Windows portable .exe which will cause it to not display the terminal output correctly nor will it be killable through the standard terminal (Ctrl+C) commands.
You can use the CLI mode on Windows in exactly the same way as in the Linux/macOS examples above, except you'll be calling the "Friendly Kobold.exe". Note that it will not be on your system PATH by default, so you'll need to manually specify the full path to it when callig it from the Windows terminal.
You can use the CLI mode on Windows in exactly the same way as in the Linux/macOS examples above, except you'll be calling the "Gerbil.exe". Note that it will not be on your system PATH by default, so you'll need to manually specify the full path to it when callig it from the Windows terminal.
## For Local Dev

View file

@ -1,9 +1,9 @@
[Desktop Entry]
Name=Friendly Kobold
Name=Gerbil
Comment=A desktop app for running Large Language Models locally
Exec=friendly-kobold %U
Exec=gerbil %U
Terminal=false
Type=Application
Icon=friendly-kobold
Icon=gerbil
Categories=Utility;
StartupWMClass=Friendly Kobold
StartupWMClass=Gerbil

View file

@ -8,7 +8,7 @@
http-equiv="Content-Security-Policy"
content="default-src 'self'; connect-src 'self' http: https:; script-src 'self' blob:; worker-src 'self' blob:; style-src 'self' 'unsafe-inline' data:; frame-src 'self' http: https:;"
/>
<title>Friendly Kobold</title>
<title>Gerbil</title>
</head>
<body>
<div id="root"></div>

View file

@ -1,6 +1,6 @@
{
"name": "friendly-kobold",
"productName": "Friendly Kobold",
"name": "gerbil",
"productName": "Gerbil",
"version": "1.0.0",
"description": "A desktop app for running Large Language Models locally",
"main": "out/main/index.js",
@ -11,9 +11,9 @@
},
"volta": {
"node": "22.18.0",
"yarn": "4.9.3"
"yarn": "4.9.4"
},
"packageManager": "yarn@4.9.3",
"packageManager": "yarn@4.9.4",
"scripts": {
"dev": "electron-vite dev",
"build": "electron-vite build",
@ -93,8 +93,8 @@
"zustand": "^5.0.8"
},
"build": {
"appId": "com.friendly-kobold.app",
"productName": "Friendly Kobold",
"appId": "com.gerbil.app",
"productName": "Gerbil",
"compression": "normal",
"icon": "src/assets/icon.png",
"publish": null,
@ -110,8 +110,8 @@
],
"extraFiles": [
{
"from": "assets/friendly-kobold.desktop",
"to": "assets/friendly-kobold.desktop",
"from": "assets/gerbil.desktop",
"to": "assets/gerbil.desktop",
"filter": [
"**/*"
]
@ -171,7 +171,7 @@
"allowToChangeInstallationDirectory": true,
"createDesktopShortcut": true,
"createStartMenuShortcut": true,
"shortcutName": "Friendly Kobold"
"shortcutName": "Gerbil"
},
"portable": {
"artifactName": "${productName}-Portable-${version}.${ext}"
@ -181,10 +181,10 @@
"category": "Utility",
"desktop": {
"entry": {
"Name": "Friendly Kobold",
"Name": "Gerbil",
"Comment": "A desktop app for running Large Language Models locally",
"Categories": "Utility;",
"StartupWMClass": "Friendly Kobold"
"StartupWMClass": "Gerbil"
}
},
"target": [

View file

@ -38,7 +38,7 @@ try {
console.log(`✅ Release ${tagName} created successfully!`);
console.log(`📦 GitHub Actions will now build and publish the release.`);
console.log(
`🔗 Check the progress at: https://github.com/lone-cloud/friendly-kobold/actions`
`🔗 Check the progress at: https://github.com/lone-cloud/gerbil/actions`
);
} catch (error: unknown) {
const errorMessage = error instanceof Error ? error.message : String(error);

View file

@ -84,7 +84,7 @@ export const AppHeader = ({
<Group gap="sm" align="center">
<Image
src={iconUrl}
alt="Friendly Kobold"
alt="Gerbil"
w={28}
h={28}
style={{
@ -105,7 +105,7 @@ export const AppHeader = ({
onClick={handleLogoClick}
/>
<Title order={4} fw={500}>
Friendly Kobold
Gerbil
</Title>
</Group>
)}

View file

@ -23,7 +23,7 @@ export const WelcomeScreen = ({ onGetStarted }: WelcomeScreenProps) => (
<Stack gap="lg" align="center">
<Stack gap="md" align="center">
<Title order={1} ta="center">
Friendly Kobold
Gerbil
</Title>
<Text size="lg" c="dimmed" ta="center" maw={600}>
A desktop app for running Large Language Models locally
@ -117,14 +117,14 @@ export const WelcomeScreen = ({ onGetStarted }: WelcomeScreenProps) => (
onClick={(e) => {
e.preventDefault();
window.electronAPI.app.openExternal(
'https://github.com/lone-cloud/friendly-kobold'
'https://github.com/lone-cloud/gerbil'
);
}}
size="sm"
c="dimmed"
>
<Group gap={4} align="center">
<span>About Friendly Kobold</span>
<span>About Gerbil</span>
<ExternalLink size={12} />
</Group>
</Anchor>

View file

@ -132,7 +132,8 @@ export const GeneralTab = () => {
</Text>
{isNpxAvailable && (
<Text size="sm" c="dimmed" mb="md">
Choose which frontend interface to use for interacting with models
Choose which frontend interface to use for interacting with AI
models
</Text>
)}

View file

@ -1,5 +1,5 @@
export const APP_NAME = 'friendly-kobold';
export const PRODUCT_NAME = 'Friendly Kobold';
export const APP_NAME = 'gerbil';
export const PRODUCT_NAME = 'Gerbil';
export const CONFIG_FILE_NAME = 'config.json';
@ -20,7 +20,7 @@ export const GITHUB_API = {
BASE_URL: 'https://api.github.com',
KOBOLDCPP_REPO: 'LostRuins/koboldcpp',
KOBOLDCPP_ROCM_REPO: 'YellowRoseCx/koboldcpp-rocm',
FRIENDLY_KOBOLD_REPO: 'lone-cloud/friendly-kobold',
GERBIL_REPO: 'lone-cloud/gerbil',
get LATEST_RELEASE_URL() {
return `${this.BASE_URL}/repos/${this.KOBOLDCPP_REPO}/releases/latest`;
},

View file

@ -21,7 +21,7 @@ export const useAppUpdateChecker = () => {
const currentVersion = await window.electronAPI.app.getVersion();
const response = await fetch(
`${GITHUB_API.BASE_URL}/repos/${GITHUB_API.FRIENDLY_KOBOLD_REPO}/releases/latest`
`${GITHUB_API.BASE_URL}/repos/${GITHUB_API.GERBIL_REPO}/releases/latest`
);
if (!response.ok) {

View file

@ -13,7 +13,7 @@ import { PRODUCT_NAME, CONFIG_FILE_NAME } from '@/constants';
import { homedir } from 'os';
import { ensureDir } from '@/utils/fs';
export class FriendlyKoboldApp {
export class GerbilApp {
private windowManager: WindowManager;
private koboldManager: KoboldCppManager;
private configManager: ConfigManager;
@ -97,7 +97,7 @@ export class FriendlyKoboldApp {
await this.ensureInstallDirectory();
if (process.platform === 'linux') {
app.setAppUserModelId('com.friendly-kobold.app');
app.setAppUserModelId('com.gerbil.app');
}
this.windowManager.setupApplicationMenu();

View file

@ -20,10 +20,10 @@ if (isCliMode) {
});
} else {
import('./gui').then((guiModule) => {
const app = new guiModule.FriendlyKoboldApp();
const app = new guiModule.GerbilApp();
app.initialize().catch((error: unknown) => {
// eslint-disable-next-line no-console
console.error('Failed to initialize FriendlyKobold:', error);
console.error('Failed to initialize Gerbil:', error);
});
});
}

View file

@ -29,12 +29,12 @@ export class LogManager {
),
transports: [
new winston.transports.DailyRotateFile({
filename: join(logsDir, 'friendly-kobold-%DATE%.log'),
filename: join(logsDir, 'gerbil-%DATE%.log'),
datePattern: 'YYYY-MM-DD',
maxSize: '10m',
maxFiles: '5d',
createSymlink: true,
symlinkName: 'friendly-kobold.log',
symlinkName: 'gerbil.log',
}),
],
});
@ -79,7 +79,7 @@ export class LogManager {
}
public getLogFilePath(): string {
return join(app.getPath('userData'), 'logs', 'friendly-kobold.log');
return join(app.getPath('userData'), 'logs', 'gerbil.log');
}
public getLogsDirectory(): string {

View file

@ -2,7 +2,7 @@
<html>
<head>
<meta charset="UTF-8" />
<title>About Friendly Kobold</title>
<title>About Gerbil</title>
<style>
body {
font-family:
@ -116,7 +116,7 @@
</head>
<body>
<div class="container">
<h1>Friendly Kobold</h1>
<h1>Gerbil</h1>
<div class="version-info" id="version-info">
<!-- Version information will be injected here -->
</div>
@ -142,7 +142,7 @@
// Send IPC message directly since this is a simple modal
if (window.electronAPI && window.electronAPI.app) {
window.electronAPI.app.openExternal(
'https://github.com/lone-cloud/friendly-kobold'
'https://github.com/lone-cloud/gerbil'
);
}
}

View file

@ -3570,50 +3570,6 @@ __metadata:
languageName: node
linkType: hard
"friendly-kobold@workspace:.":
version: 0.0.0-use.local
resolution: "friendly-kobold@workspace:."
dependencies:
"@eslint/js": "npm:^9.34.0"
"@mantine/core": "npm:^8.2.7"
"@mantine/hooks": "npm:^8.2.7"
"@types/node": "npm:^24.3.0"
"@types/react": "npm:^19.1.12"
"@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"
axios: "npm:^1.11.0"
cross-env: "npm:^10.0.0"
electron: "npm:^37.4.0"
electron-builder: "npm:^26.0.12"
electron-vite: "npm:^4.0.0"
eslint: "npm:^9.34.0"
eslint-plugin-import: "npm:^2.32.0"
eslint-plugin-no-comments: "npm:^1.1.10"
eslint-plugin-react: "npm:^7.37.5"
eslint-plugin-react-hooks: "npm:^5.2.0"
eslint-plugin-react-refresh: "npm:^0.4.20"
eslint-plugin-sonarjs: "npm:^3.0.5"
execa: "npm:^9.6.0"
globals: "npm:^16.3.0"
husky: "npm:^9.1.7"
jiti: "npm:^2.5.1"
lint-staged: "npm:^16.1.5"
lucide-react: "npm:^0.542.0"
prettier: "npm:^3.6.2"
react: "npm:^19.1.1"
react-dom: "npm:^19.1.1"
rollup-plugin-visualizer: "npm:^6.0.3"
systeminformation: "npm:^5.27.8"
typescript: "npm:^5.9.2"
vite: "npm:^7.1.3"
winston: "npm:^3.17.0"
winston-daily-rotate-file: "npm:^5.0.0"
zustand: "npm:^5.0.8"
languageName: unknown
linkType: soft
"fs-extra@npm:^10.0.0, fs-extra@npm:^10.1.0":
version: 10.1.0
resolution: "fs-extra@npm:10.1.0"
@ -3745,6 +3701,50 @@ __metadata:
languageName: node
linkType: hard
"gerbil@workspace:.":
version: 0.0.0-use.local
resolution: "gerbil@workspace:."
dependencies:
"@eslint/js": "npm:^9.34.0"
"@mantine/core": "npm:^8.2.7"
"@mantine/hooks": "npm:^8.2.7"
"@types/node": "npm:^24.3.0"
"@types/react": "npm:^19.1.12"
"@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"
axios: "npm:^1.11.0"
cross-env: "npm:^10.0.0"
electron: "npm:^37.4.0"
electron-builder: "npm:^26.0.12"
electron-vite: "npm:^4.0.0"
eslint: "npm:^9.34.0"
eslint-plugin-import: "npm:^2.32.0"
eslint-plugin-no-comments: "npm:^1.1.10"
eslint-plugin-react: "npm:^7.37.5"
eslint-plugin-react-hooks: "npm:^5.2.0"
eslint-plugin-react-refresh: "npm:^0.4.20"
eslint-plugin-sonarjs: "npm:^3.0.5"
execa: "npm:^9.6.0"
globals: "npm:^16.3.0"
husky: "npm:^9.1.7"
jiti: "npm:^2.5.1"
lint-staged: "npm:^16.1.5"
lucide-react: "npm:^0.542.0"
prettier: "npm:^3.6.2"
react: "npm:^19.1.1"
react-dom: "npm:^19.1.1"
rollup-plugin-visualizer: "npm:^6.0.3"
systeminformation: "npm:^5.27.8"
typescript: "npm:^5.9.2"
vite: "npm:^7.1.3"
winston: "npm:^3.17.0"
winston-daily-rotate-file: "npm:^5.0.0"
zustand: "npm:^5.0.8"
languageName: unknown
linkType: soft
"get-caller-file@npm:^2.0.5":
version: 2.0.5
resolution: "get-caller-file@npm:2.0.5"