From 140bff5b0bdd7dd3bcc28806f981ec71927d9e0c Mon Sep 17 00:00:00 2001 From: NoosMedia <148911160+noosmedia@users.noreply.github.com> Date: Sat, 18 Jul 2026 08:46:37 +0200 Subject: [PATCH 1/4] =?UTF-8?q?Linux-Unterst=C3=BCtzung=20distributionsneu?= =?UTF-8?q?tral=20beschreiben=20(#2)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/ISSUE_TEMPLATE/bug-report.yml | 8 ++++---- CHANGELOG.md | 19 +++++++++++++++++++ CONTRIBUTING.md | 4 ++-- README.md | 27 +++++++++++++++++---------- assets/kimi-work-linux.desktop.in | 4 ++-- install.sh | 2 +- package-lock.json | 4 ++-- package.json | 4 ++-- 8 files changed, 49 insertions(+), 23 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug-report.yml b/.github/ISSUE_TEMPLATE/bug-report.yml index 9553b31..28c8839 100644 --- a/.github/ISSUE_TEMPLATE/bug-report.yml +++ b/.github/ISSUE_TEMPLATE/bug-report.yml @@ -1,5 +1,5 @@ name: Fehlerbericht -description: Einen reproduzierbaren Fehler unter Linux Mint melden +description: Einen reproduzierbaren Fehler unter Linux melden title: "[Fehler]: " labels: [bug] body: @@ -7,10 +7,10 @@ body: attributes: value: Entfernen Sie persönliche Pfade, Kontodaten, Tokens, Cookies und private Dateiinhalte aus allen Angaben. - type: input - id: mint-version + id: distribution attributes: - label: Linux-Mint-Version - placeholder: Linux Mint 22.x + label: Linux-Distribution und Version + placeholder: Zum Beispiel Linux Mint 22.x, Ubuntu 24.04 oder Fedora 42 validations: required: true - type: input diff --git a/CHANGELOG.md b/CHANGELOG.md index 8da49db..d7c0785 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,24 @@ # Changelog +## 2.1.1, 2026-07-18 + +### Neu + +- Allgemeine Kompatibilitätsbeschreibung für glibc-basiertes Linux auf x86_64 mit systemd + +### Geändert + +- Linux Mint wird als geprüfte Referenz statt als einzige unterstützte Distribution genannt +- README, Installationshinweise, Desktop-Eintrag und Fehlerbericht wurden distributionsneutral formuliert + +### Behoben + +- Falsche Einschränkung der öffentlichen Dokumentation auf Linux Mint + +### Entfernt + +- Ausschließlicher Linux-Mint-Hinweis + ## 2.1.0, 2026-07-18 ### Neu diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index f188c16..c668793 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -6,7 +6,7 @@ Beiträge zu Kimi Work Linux sind willkommen. Verwenden Sie die passende GitHub-Issue-Vorlage und geben Sie Folgendes an: -- Linux-Mint-Version +- Linux-Distribution und Version - Desktop-Umgebung - Ausgabe von `uname -m` - Ausgabe von `node --version` und `npm --version` @@ -30,7 +30,7 @@ Entfernen Sie vor dem Absenden Benutzernamen, absolute persönliche Pfade, Konto - Keine Kimi-Binärdateien oder entpackten Kimi-Ressourcen einreichen. - Keine persönlichen Daten oder Zugangsdaten einreichen. - Keine Wine- oder Bottles-Abhängigkeiten hinzufügen. -- Änderungen müssen Linux Mint auf x86_64 berücksichtigen. +- Änderungen müssen glibc-basiertes Linux auf x86_64 mit systemd berücksichtigen. - Neue Abhängigkeiten müssen technisch notwendig und begründet sein. ## English diff --git a/README.md b/README.md index 5b54738..53c4e32 100644 --- a/README.md +++ b/README.md @@ -3,9 +3,9 @@ [![CI](https://github.com/noosmedia/kimi-work-linux/actions/workflows/ci.yml/badge.svg)](https://github.com/noosmedia/kimi-work-linux/actions/workflows/ci.yml) [![GitHub release](https://img.shields.io/github/v/release/noosmedia/kimi-work-linux)](https://github.com/noosmedia/kimi-work-linux/releases) [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE) -[![Platform](https://img.shields.io/badge/platform-Linux%20Mint%20x86__64-87cf3e)](#voraussetzungen) +[![Platform](https://img.shields.io/badge/platform-Linux%20x86__64-87cf3e)](#voraussetzungen) -Inoffizielle native Linux Mint Laufzeit für Kimi Work. Das Projekt erstellt Kimi Work lokal aus dem aktuellen offiziellen Windows-Paket mit Linux Electron, Node.js und nativen Linux-Modulen. Wine und Bottles werden nicht verwendet. +Inoffizielle native Linux-Laufzeit für Kimi Work. Das Projekt erstellt Kimi Work lokal aus dem aktuellen offiziellen Windows-Paket mit Linux Electron, Node.js und nativen Linux-Modulen. Wine und Bottles werden nicht verwendet. > [!IMPORTANT] > Dieses Projekt wird nicht von Moonshot AI entwickelt, unterstützt oder bestätigt. Es enthält und verteilt keine proprietären Kimi-Programmdateien. Das Originalpaket wird beim lokalen Aufbau direkt vom offiziellen Kimi-Endpunkt geladen. @@ -29,13 +29,14 @@ Inoffizielle native Linux Mint Laufzeit für Kimi Work. Das Projekt erstellt Kim | Kimi Work Linux | 2.1.0 | | Electron | 41.7.2 | | Kimi Node-Laufzeit | 24.15.0 | -| Plattform | Linux Mint x86_64 | +| Plattform | Linux x86_64 mit glibc und systemd | Neue Kimi-Versionen können interne Änderungen enthalten. Das Update-Skript prüft die verfügbare Version, bevor es eine neue Laufzeit erstellt. ## Voraussetzungen -- Linux Mint auf x86_64 +- Linux auf x86_64 +- glibc und systemd-Benutzerdienste - Node.js 22 oder neuer - npm - Git @@ -44,13 +45,15 @@ Neue Kimi-Versionen können interne Änderungen enthalten. Das Update-Skript pr - `build-essential`, `file`, `python3` und `tar` - systemd-Benutzerdienste -Die Systempakete installieren Sie unter Linux Mint mit: +Unter Debian, Ubuntu und Linux Mint installieren Sie die Systempakete mit: ```bash sudo apt update sudo apt install build-essential curl file git p7zip-full python3 tar ``` +Verwenden Sie auf anderen Distributionen die entsprechenden Pakete des jeweiligen Paketmanagers. Entscheidend sind die oben genannten Programme, glibc und funktionierende systemd-Benutzerdienste. + ## Installation ```bash @@ -123,7 +126,8 @@ Die Deinstallation entfernt die erzeugte Laufzeit und den Programmmenüeintrag. ## Einschränkungen -- Aktuell wird ausschließlich Linux Mint auf x86_64 unterstützt. +- Unterstützt werden glibc-basierte Linux-Distributionen auf x86_64 mit systemd-Benutzerdiensten. +- Die Referenzinstallation wurde unter Linux Mint geprüft. Weitere Distributionen benötigen noch praktische Rückmeldungen aus der Community. - Die Kimi-Oberfläche selbst ist derzeit nur auf Englisch und Chinesisch verfügbar. - Moonshot AI stellt keine offizielle Linux-Version bereit. - Ein zukünftiges Kimi-Update kann eine Anpassung dieses Projekts erfordern. @@ -140,21 +144,24 @@ Der Quellcode dieses Projekts steht unter der [MIT-Lizenz](LICENSE). Kimi, Kimi ## English -Unofficial native Linux Mint runtime for Kimi Work. It builds a local Linux application from the latest official Windows package using Linux Electron, Node.js and native Linux modules. Wine and Bottles are not used. +Unofficial native Linux runtime for Kimi Work. It builds a local Linux application from the latest official Windows package using Linux Electron, Node.js and native Linux modules. Wine and Bottles are not used. This repository contains no proprietary Kimi application files and no user data. During setup, the original package is downloaded directly from the official Kimi endpoint. ### Quick install ```bash -sudo apt update -sudo apt install build-essential curl file git p7zip-full python3 tar git clone https://github.com/noosmedia/kimi-work-linux.git cd kimi-work-linux ./install.sh ``` -Node.js 22 or newer and npm are required. +Linux x86_64 with glibc, systemd user services, Node.js 22 or newer, npm, curl, 7-Zip, `file`, Python 3, tar and C/C++ build tools are required. Debian, Ubuntu and Linux Mint users can install the system packages with: + +```bash +sudo apt update +sudo apt install build-essential curl file git p7zip-full python3 tar +``` ### Start diff --git a/assets/kimi-work-linux.desktop.in b/assets/kimi-work-linux.desktop.in index b4222e8..c60e237 100644 --- a/assets/kimi-work-linux.desktop.in +++ b/assets/kimi-work-linux.desktop.in @@ -3,8 +3,8 @@ Type=Application Version=1.0 Name=Kimi Work Linux Name[de]=Kimi Work Linux -Comment=Run Kimi Work on Linux Mint -Comment[de]=Kimi Work unter Linux Mint starten +Comment=Run Kimi Work natively on Linux +Comment[de]=Kimi Work nativ unter Linux starten Exec=bash "@PROJECT_DIR@/scripts/native-run.sh" Icon=kimi-work-linux Terminal=false diff --git a/install.sh b/install.sh index a41d706..1b32c76 100755 --- a/install.sh +++ b/install.sh @@ -14,7 +14,7 @@ done if [[ "${#missing_commands[@]}" -gt 0 ]]; then printf 'Fehler: Folgende Voraussetzungen fehlen: %s\n' "${missing_commands[*]}" >&2 - printf '%s\n' 'Installieren Sie unter Linux Mint mindestens: build-essential curl file p7zip-full python3 tar' >&2 + printf '%s\n' 'Installieren Sie die entsprechenden Pakete für C/C++-Bauwerkzeuge, curl, file, 7-Zip, Python 3 und tar.' >&2 printf '%s\n' 'Zusätzlich werden Node.js 22 oder neuer und npm benötigt.' >&2 exit 1 fi diff --git a/package-lock.json b/package-lock.json index 0bd176a..2a1ecab 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "kimi-work-linux", - "version": "2.1.0", + "version": "2.1.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "kimi-work-linux", - "version": "2.1.0", + "version": "2.1.1", "license": "MIT", "devDependencies": { "@electron/asar": "^4.2.0", diff --git a/package.json b/package.json index 91fa65b..cce130d 100644 --- a/package.json +++ b/package.json @@ -1,8 +1,8 @@ { "name": "kimi-work-linux", - "version": "2.1.0", + "version": "2.1.1", "private": true, - "description": "Unofficial native Linux Mint runtime for Kimi Work", + "description": "Unofficial native Linux runtime for Kimi Work", "license": "MIT", "homepage": "https://github.com/noosmedia/kimi-work-linux#readme", "repository": { From 45ce22ff2c64f9ab46011bb4bea866eb77bb5eda Mon Sep 17 00:00:00 2001 From: NoosMedia <148911160+noosmedia@users.noreply.github.com> Date: Sat, 18 Jul 2026 08:56:53 +0200 Subject: [PATCH 2/4] =?UTF-8?q?Aktuelle=20Kimi-Version=20und=20K3-Unterst?= =?UTF-8?q?=C3=BCtzung=20hervorheben=20(#7)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/README.md b/README.md index 87ac5aa..d8eb278 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,12 @@ Inoffizielle native Linux-Laufzeit für Kimi Work. Das Projekt erstellt Kimi Wor > [!IMPORTANT] > Dieses unabhängige Community-Projekt wird nicht von Moonshot AI entwickelt, unterstützt oder bestätigt. Das Kimi-Originalpaket wird beim lokalen Aufbau direkt vom offiziellen Endpunkt geladen. +## Aktuelle Kimi-Work-Version mit Kimi K3 + +Bei jeder vollständigen Installation wird die aktuell von Moonshot AI angebotene Kimi-Work-Version geladen. Der derzeit geprüfte Stand ist Kimi Work 3.1.2. + +[Kimi K3](https://www.kimi.com/blog/kimi-k3) ist das aktuelle Flaggschiffmodell von Moonshot AI und wird offiziell von Kimi Work ab Version 3.1.0 unterstützt. K3 kann in Kimi Work über die Modellauswahl verwendet werden. Verfügbarkeit und Nutzungskontingente richten sich nach dem angemeldeten Kimi-Konto. + ## Funktionen - Native Electron-Anwendung unter Linux @@ -18,12 +24,14 @@ Inoffizielle native Linux-Laufzeit für Kimi Work. Das Projekt erstellt Kimi Wor - Native Linux-Module für Kimi Daimon und Gateway - Start über das Programmmenü und als systemd-Benutzerdienst - Sicheres Update-Skript mit Versionsprüfung und atomarem Austausch +- Kimi K3 über die aktuelle Kimi-Work-Modellauswahl ## Unterstützter Stand | Komponente | Version | | --- | --- | | Kimi Work | 3.1.2 | +| Kimi-Modell | Kimi K3 verfügbar | | Kimi Work Linux | 2.1.1 | | Electron | 41.7.2 | | Kimi Node-Laufzeit | 24.15.0 | @@ -145,6 +153,8 @@ Unofficial native Linux runtime for Kimi Work. It builds a local Linux applicati During setup, the original Kimi package is downloaded directly from the official endpoint. +The setup downloads the latest Kimi Work version currently offered by Moonshot AI. The verified version is Kimi Work 3.1.2. [Kimi K3](https://www.kimi.com/blog/kimi-k3), Moonshot AI's current flagship model, is officially supported by Kimi Work 3.1.0 and later and is available through the model selector. Availability and usage quotas depend on the signed-in Kimi account. + ### Quick install ```bash From 3fc5f821cf3a3e336c6edbd6d2b4d7f032a9ce9e Mon Sep 17 00:00:00 2001 From: NoosMedia <148911160+noosmedia@users.noreply.github.com> Date: Sat, 18 Jul 2026 09:20:59 +0200 Subject: [PATCH 3/4] =?UTF-8?q?Native=20Linux-Fensterkn=C3=B6pfe=20aktivie?= =?UTF-8?q?ren=20(#9)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 19 ++++++++++ README.md | 3 +- package-lock.json | 4 +-- package.json | 2 +- scripts/native-setup.sh | 77 +++++++++++++++++++++++++++++++++++++++++ 5 files changed, 101 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d1fe864..b200831 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,24 @@ # Changelog +## 2.1.2, 2026-07-18 + +### Neu + +- Native Linux-Titelleiste mit Minimieren, Maximieren und Schließen +- Abgesicherter Titelleisten-Patch für bestehende und neu aufgebaute Laufzeiten + +### Geändert + +- Der native Aufbau aktiviert die Linux-Systemdekoration nach dem Entpacken der Kimi-Anwendung + +### Behoben + +- Fehlende Fensterknöpfe unter Linux + +### Entfernt + +- Keine Änderungen + ## 2.1.1, 2026-07-18 ### Neu diff --git a/README.md b/README.md index d8eb278..baa1496 100644 --- a/README.md +++ b/README.md @@ -25,6 +25,7 @@ Bei jeder vollständigen Installation wird die aktuell von Moonshot AI angeboten - Start über das Programmmenü und als systemd-Benutzerdienst - Sicheres Update-Skript mit Versionsprüfung und atomarem Austausch - Kimi K3 über die aktuelle Kimi-Work-Modellauswahl +- Native Linux-Fensterknöpfe für Minimieren, Maximieren und Schließen ## Unterstützter Stand @@ -32,7 +33,7 @@ Bei jeder vollständigen Installation wird die aktuell von Moonshot AI angeboten | --- | --- | | Kimi Work | 3.1.2 | | Kimi-Modell | Kimi K3 verfügbar | -| Kimi Work Linux | 2.1.1 | +| Kimi Work Linux | 2.1.2 | | Electron | 41.7.2 | | Kimi Node-Laufzeit | 24.15.0 | | Plattform | Linux x86_64 mit glibc und systemd | diff --git a/package-lock.json b/package-lock.json index 2a1ecab..f09dc02 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "kimi-work-linux", - "version": "2.1.1", + "version": "2.1.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "kimi-work-linux", - "version": "2.1.1", + "version": "2.1.2", "license": "MIT", "devDependencies": { "@electron/asar": "^4.2.0", diff --git a/package.json b/package.json index cce130d..e5db294 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "kimi-work-linux", - "version": "2.1.1", + "version": "2.1.2", "private": true, "description": "Unofficial native Linux runtime for Kimi Work", "license": "MIT", diff --git a/scripts/native-setup.sh b/scripts/native-setup.sh index 265cbbb..adf4018 100644 --- a/scripts/native-setup.sh +++ b/scripts/native-setup.sh @@ -12,6 +12,17 @@ OFFICIAL_DOWNLOAD_URL='https://appsupport.moonshot.cn/api/app/pkg/latest/windows NODE_VERSION='v24.15.0' NODE_ARCHIVE_NAME="node-${NODE_VERSION}-linux-x64.tar.gz" NODE_ARCHIVE_SHA='44836872d9aec49f1e6b52a9a922872db9a2b02d235a616a5681b6a85fec8d89' +PATCH_ONLY=false + +# Erlaubt eine abgesicherte Aktualisierung der vorhandenen Fenstertitelleiste. +if [[ "${1:-}" == '--patch-linux-titlebar-only' ]]; then + PATCH_ONLY=true + shift +fi +[[ "$#" -eq 0 ]] || { + printf 'Fehler: Unbekanntes Argument: %s\n' "$1" >&2 + exit 64 +} # Gibt Fehler vollständig aus und beendet den Aufbau. fail() { @@ -34,6 +45,71 @@ cleanup() { } trap cleanup EXIT +# Aktiviert unter Linux die native Titelleiste mit den drei Systemschaltflächen. +patch_linux_titlebar() { + local app_archive="$1" + local patch_dir="${temporary_dir}/linux-titlebar" + local source_dir="${patch_dir}/source" + local main_process_file="${source_dir}/out/main/index.js" + local patched_archive="${patch_dir}/app.asar" + + [[ -f "$app_archive" ]] || fail "Das Kimi Anwendungsarchiv fehlt: ${app_archive}" + rm -rf -- "$patch_dir" + mkdir -p "$source_dir" + "${PROJECT_DIR}/node_modules/.bin/asar" extract "$app_archive" "$source_dir" + [[ -f "$main_process_file" ]] || fail 'Der Kimi Hauptprozess für die Titelleistenanpassung fehlt.' + + # Ersetzt ausschließlich die zwei in Kimi 3.1.2 geprüften Fensteroptionen. + node - "$main_process_file" <<'NODE' +const fs = require('fs') + +const mainProcessFile = process.argv[2] +const source = fs.readFileSync(mainProcessFile, 'utf8') +const original = 'titleBarStyle: process.platform === "darwin" ? "hiddenInset" : "hidden",' +const replacement = 'titleBarStyle: process.platform === "darwin" ? "hiddenInset" : process.platform === "linux" ? "default" : "hidden",' +const count = (text, value) => text.split(value).length - 1 +const originalCount = count(source, original) +const replacementCount = count(source, replacement) + +if (replacementCount === 2 && originalCount === 0) { + process.stdout.write('Die Linux Titelleiste ist bereits aktiviert.\n') + process.exit(0) +} + +if (originalCount !== 2 || replacementCount !== 0) { + process.stderr.write( + `Fehler: Unerwartete Kimi Fensterkonfiguration. Erwartet wurden 2 unveränderte Fundstellen, gefunden wurden ${originalCount}.\n`, + ) + process.exit(1) +} + +const patched = source.split(original).join(replacement) +if (count(patched, replacement) !== 2 || count(patched, original) !== 0) { + process.stderr.write('Fehler: Die Linux Titelleiste konnte nicht eindeutig aktiviert werden.\n') + process.exit(1) +} + +fs.writeFileSync(mainProcessFile, patched) +process.stdout.write('Die native Linux Titelleiste wurde in 2 Kimi Fenstern aktiviert.\n') +NODE + + "${PROJECT_DIR}/node_modules/.bin/asar" pack "$source_dir" "$patched_archive" + "${PROJECT_DIR}/node_modules/.bin/asar" list "$patched_archive" \ + | grep -qx '/out/main/index.js' \ + || fail 'Das neu gepackte Kimi Archiv enthält keinen Hauptprozess.' + install -m 0644 "$patched_archive" "${app_archive}.tmp" + mv "${app_archive}.tmp" "$app_archive" +} + +# Passt auf ausdrücklichen internen Aufruf nur die vorhandene Laufzeit an. +if [[ "$PATCH_ONLY" == true ]]; then + systemctl --user is-active --quiet kimi-work-native.service \ + && fail 'Kimi Work muss vor der Titelleistenanpassung beendet werden.' + patch_linux_titlebar "${APP_DIR}/resources/app.asar" + printf '%s\n' 'Die vorhandene Kimi Linux Laufzeit wurde erfolgreich angepasst.' + exit 0 +fi + # Lädt das unveränderte aktuelle Kimi Originalpaket herunter. mkdir -p "$CACHE_DIR" installer_path="${CACHE_DIR}/kimi-work-latest.exe" @@ -70,6 +146,7 @@ new_app_dir="${temporary_dir}/app" cp -a "${PROJECT_DIR}/node_modules/electron/dist" "$new_app_dir" mv "${new_app_dir}/electron" "${new_app_dir}/kimi-desktop" install -m 0644 "${official_dir}/resources/app.asar" "${new_app_dir}/resources/app.asar" +patch_linux_titlebar "${new_app_dir}/resources/app.asar" resource_dir="${new_app_dir}/resources/resources" mkdir -p "${resource_dir}/runtime" "${resource_dir}/skills" From 1710b98599e339441b7ec1afedae07d26755b275 Mon Sep 17 00:00:00 2001 From: noosmedia <148911160+noosmedia@users.noreply.github.com> Date: Sat, 18 Jul 2026 09:34:10 +0200 Subject: [PATCH 4/4] =?UTF-8?q?Fenstergr=C3=B6=C3=9Fe=20unter=20Linux=20zu?= =?UTF-8?q?verl=C3=A4ssig=20synchronisieren?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 7 +- README.md | 2 + scripts/native-setup.sh | 137 +++++++++++++++++++++++++++++++++------- 3 files changed, 121 insertions(+), 25 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b200831..204a5c1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,15 +5,20 @@ ### Neu - Native Linux-Titelleiste mit Minimieren, Maximieren und Schließen -- Abgesicherter Titelleisten-Patch für bestehende und neu aufgebaute Laufzeiten +- Abgesicherter Fenster-Patch für bestehende und neu aufgebaute Laufzeiten +- Sofortige Inhaltsanpassung beim Maximieren und Ändern der Fenstergröße +- Nutzbare Mindestgröße von 900 × 650 Pixeln für normale Kimi-Fenster ### Geändert - Der native Aufbau aktiviert die Linux-Systemdekoration nach dem Entpacken der Kimi-Anwendung +- Die Inhaltsgröße wird sofort, im nächsten Ereigniszyklus und nach Abschluss der Größenänderung synchronisiert ### Behoben - Fehlende Fensterknöpfe unter Linux +- Verzögerte oder unvollständige Inhaltsanpassung nach Maximieren und manueller Größenänderung +- Unbrauchbar kleines Zusammenschieben der normalen Kimi-Fenster ### Entfernt diff --git a/README.md b/README.md index baa1496..6ae8f0f 100644 --- a/README.md +++ b/README.md @@ -26,6 +26,8 @@ Bei jeder vollständigen Installation wird die aktuell von Moonshot AI angeboten - Sicheres Update-Skript mit Versionsprüfung und atomarem Austausch - Kimi K3 über die aktuelle Kimi-Work-Modellauswahl - Native Linux-Fensterknöpfe für Minimieren, Maximieren und Schließen +- Sofortige Inhaltsanpassung beim Maximieren und Ändern der Fenstergröße +- Mindestgröße von 900 × 650 Pixeln für normale Kimi-Fenster ## Unterstützter Stand diff --git a/scripts/native-setup.sh b/scripts/native-setup.sh index adf4018..ba81d1a 100644 --- a/scripts/native-setup.sh +++ b/scripts/native-setup.sh @@ -14,8 +14,8 @@ NODE_ARCHIVE_NAME="node-${NODE_VERSION}-linux-x64.tar.gz" NODE_ARCHIVE_SHA='44836872d9aec49f1e6b52a9a922872db9a2b02d235a616a5681b6a85fec8d89' PATCH_ONLY=false -# Erlaubt eine abgesicherte Aktualisierung der vorhandenen Fenstertitelleiste. -if [[ "${1:-}" == '--patch-linux-titlebar-only' ]]; then +# Erlaubt eine abgesicherte Aktualisierung der vorhandenen Fensterintegration. +if [[ "${1:-}" == '--patch-linux-window-only' ]]; then PATCH_ONLY=true shift fi @@ -45,10 +45,10 @@ cleanup() { } trap cleanup EXIT -# Aktiviert unter Linux die native Titelleiste mit den drei Systemschaltflächen. -patch_linux_titlebar() { +# Aktiviert die native Titelleiste und synchronisiert den Inhalt mit der Fenstergröße. +patch_linux_window() { local app_archive="$1" - local patch_dir="${temporary_dir}/linux-titlebar" + local patch_dir="${temporary_dir}/linux-window" local source_dir="${patch_dir}/source" local main_process_file="${source_dir}/out/main/index.js" local patched_archive="${patch_dir}/app.asar" @@ -57,40 +57,129 @@ patch_linux_titlebar() { rm -rf -- "$patch_dir" mkdir -p "$source_dir" "${PROJECT_DIR}/node_modules/.bin/asar" extract "$app_archive" "$source_dir" - [[ -f "$main_process_file" ]] || fail 'Der Kimi Hauptprozess für die Titelleistenanpassung fehlt.' + [[ -f "$main_process_file" ]] || fail 'Der Kimi Hauptprozess für die Fensteranpassung fehlt.' - # Ersetzt ausschließlich die zwei in Kimi 3.1.2 geprüften Fensteroptionen. + # Ersetzt ausschließlich die in Kimi 3.1.2 geprüften Fensteroptionen und Ereignisse. node - "$main_process_file" <<'NODE' const fs = require('fs') const mainProcessFile = process.argv[2] -const source = fs.readFileSync(mainProcessFile, 'utf8') -const original = 'titleBarStyle: process.platform === "darwin" ? "hiddenInset" : "hidden",' -const replacement = 'titleBarStyle: process.platform === "darwin" ? "hiddenInset" : process.platform === "linux" ? "default" : "hidden",' +let patched = fs.readFileSync(mainProcessFile, 'utf8') const count = (text, value) => text.split(value).length - 1 -const originalCount = count(source, original) -const replacementCount = count(source, replacement) -if (replacementCount === 2 && originalCount === 0) { - process.stdout.write('Die Linux Titelleiste ist bereits aktiviert.\n') - process.exit(0) +const titlebarOriginal = + 'titleBarStyle: process.platform === "darwin" ? "hiddenInset" : "hidden",' +const titlebarReplacement = + 'titleBarStyle: process.platform === "darwin" ? "hiddenInset" : process.platform === "linux" ? "default" : "hidden",' +const titlebarOriginalCount = count(patched, titlebarOriginal) +const titlebarReplacementCount = count(patched, titlebarReplacement) + +if (titlebarOriginalCount === 2 && titlebarReplacementCount === 0) { + patched = patched.split(titlebarOriginal).join(titlebarReplacement) +} else if (titlebarOriginalCount !== 0 || titlebarReplacementCount !== 2) { + process.stderr.write( + `Fehler: Unerwartete Kimi Titelleistenkonfiguration. Original: ${titlebarOriginalCount}, Linux: ${titlebarReplacementCount}.\n`, + ) + process.exit(1) +} + +const resizeOriginal = ` setupResizeHandler() { + if (!this.baseWindow) { + return; + } + this.baseWindow.on("resized", () => { + this.contentSurface.updateViewBounds(); + this.kimiAgentBrowser.syncVisibility(); + }); + this.baseWindow.on("resize", () => { + this.contentSurface.updateViewBounds(); + this.kimiAgentBrowser.syncVisibility(); + }); + }` +const resizeReplacement = ` setupResizeHandler() { + if (!this.baseWindow) { + return; + } + let resizeRefreshPending = false; + let resizeSettleTimer; + const refreshContentBounds = () => { + if (!this.baseWindow) { + return; + } + this.contentSurface.updateViewBounds(); + this.kimiAgentBrowser.syncVisibility(); + }; + const scheduleContentBoundsRefresh = () => { + refreshContentBounds(); + if (!resizeRefreshPending) { + resizeRefreshPending = true; + setImmediate(() => { + resizeRefreshPending = false; + refreshContentBounds(); + }); + } + if (resizeSettleTimer) { + clearTimeout(resizeSettleTimer); + } + resizeSettleTimer = setTimeout(() => { + resizeSettleTimer = void 0; + refreshContentBounds(); + }, 80); + }; + for (const eventName of [ + "resize", + "resized", + "maximize", + "unmaximize", + "restore", + "enter-full-screen", + "leave-full-screen" + ]) { + this.baseWindow.on(eventName, scheduleContentBoundsRefresh); + } + }` +const resizeOriginalCount = count(patched, resizeOriginal) +const resizeReplacementCount = count(patched, resizeReplacement) + +if (resizeOriginalCount === 1 && resizeReplacementCount === 0) { + patched = patched.replace(resizeOriginal, resizeReplacement) +} else if (resizeOriginalCount !== 0 || resizeReplacementCount !== 1) { + process.stderr.write( + `Fehler: Unerwartete Kimi Größenlogik. Original: ${resizeOriginalCount}, Linux: ${resizeReplacementCount}.\n`, + ) + process.exit(1) } -if (originalCount !== 2 || replacementCount !== 0) { +const minimumSizeOriginal = ` minWidth: 400, + minHeight: 600,` +const minimumSizeReplacement = ` minWidth: process.platform === "linux" ? 900 : 400, + minHeight: process.platform === "linux" ? 650 : 600,` +const minimumSizeOriginalCount = count(patched, minimumSizeOriginal) +const minimumSizeReplacementCount = count(patched, minimumSizeReplacement) + +if (minimumSizeOriginalCount === 2 && minimumSizeReplacementCount === 0) { + patched = patched.split(minimumSizeOriginal).join(minimumSizeReplacement) +} else if (minimumSizeOriginalCount !== 0 || minimumSizeReplacementCount !== 2) { process.stderr.write( - `Fehler: Unerwartete Kimi Fensterkonfiguration. Erwartet wurden 2 unveränderte Fundstellen, gefunden wurden ${originalCount}.\n`, + `Fehler: Unerwartete Kimi Mindestgröße. Original: ${minimumSizeOriginalCount}, Linux: ${minimumSizeReplacementCount}.\n`, ) process.exit(1) } -const patched = source.split(original).join(replacement) -if (count(patched, replacement) !== 2 || count(patched, original) !== 0) { - process.stderr.write('Fehler: Die Linux Titelleiste konnte nicht eindeutig aktiviert werden.\n') +if ( + count(patched, titlebarReplacement) !== 2 || + count(patched, titlebarOriginal) !== 0 || + count(patched, resizeReplacement) !== 1 || + count(patched, resizeOriginal) !== 0 || + count(patched, minimumSizeReplacement) !== 2 || + count(patched, minimumSizeOriginal) !== 0 +) { + process.stderr.write('Fehler: Die Linux Fensteranpassung konnte nicht eindeutig geprüft werden.\n') process.exit(1) } fs.writeFileSync(mainProcessFile, patched) -process.stdout.write('Die native Linux Titelleiste wurde in 2 Kimi Fenstern aktiviert.\n') +process.stdout.write('Die native Linux Titelleiste, Größenanpassung und Mindestgröße wurden aktiviert.\n') NODE "${PROJECT_DIR}/node_modules/.bin/asar" pack "$source_dir" "$patched_archive" @@ -104,8 +193,8 @@ NODE # Passt auf ausdrücklichen internen Aufruf nur die vorhandene Laufzeit an. if [[ "$PATCH_ONLY" == true ]]; then systemctl --user is-active --quiet kimi-work-native.service \ - && fail 'Kimi Work muss vor der Titelleistenanpassung beendet werden.' - patch_linux_titlebar "${APP_DIR}/resources/app.asar" + && fail 'Kimi Work muss vor der Fensteranpassung beendet werden.' + patch_linux_window "${APP_DIR}/resources/app.asar" printf '%s\n' 'Die vorhandene Kimi Linux Laufzeit wurde erfolgreich angepasst.' exit 0 fi @@ -146,7 +235,7 @@ new_app_dir="${temporary_dir}/app" cp -a "${PROJECT_DIR}/node_modules/electron/dist" "$new_app_dir" mv "${new_app_dir}/electron" "${new_app_dir}/kimi-desktop" install -m 0644 "${official_dir}/resources/app.asar" "${new_app_dir}/resources/app.asar" -patch_linux_titlebar "${new_app_dir}/resources/app.asar" +patch_linux_window "${new_app_dir}/resources/app.asar" resource_dir="${new_app_dir}/resources/resources" mkdir -p "${resource_dir}/runtime" "${resource_dir}/skills"