mirror of
https://github.com/lone-cloud/gerbil
synced 2026-06-03 09:33:10 -07:00
rename the project to gerbil
This commit is contained in:
parent
773685c300
commit
4d1fec114d
18 changed files with 150 additions and 148 deletions
2
.github/copilot-instructions.md
vendored
2
.github/copilot-instructions.md
vendored
|
|
@ -1,4 +1,4 @@
|
|||
# Copilot Instructions for FriendlyKobold
|
||||
# Copilot Instructions for Gerbil
|
||||
|
||||
### General Coding
|
||||
|
||||
|
|
|
|||
84
.github/workflows/aur-release.yml
vendored
84
.github/workflows/aur-release.yml
vendored
|
|
@ -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
|
||||
|
|
|
|||
2
.github/workflows/release.yml
vendored
2
.github/workflows/release.yml
vendored
|
|
@ -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 }}
|
||||
|
|
|
|||
47
README.md
47
README.md
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -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>
|
||||
|
|
|
|||
22
package.json
22
package.json
|
|
@ -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": [
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
)}
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
)}
|
||||
|
||||
|
|
|
|||
|
|
@ -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`;
|
||||
},
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
88
yarn.lock
88
yarn.lock
|
|
@ -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"
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue