Quetzal 0.6.0
- Linux 一键安装:
curl -fsSL https://quetzal.plutokeating.beer/install | bash(cli/install.sh,官网构建时复制为/install)。认出发行版与包管理器(apt / dnf / yum / pacman / zypper / apk / xbps),缺的 git / curl / tar / CA 证书用系统自己的包管理器装,Node.js 22.13+ 没有就经 nvm 装(Alpine 用 apk,直连 nodejs.org 不通自动切 npmmirror);npm 包装进~/quetzal/npm独立前缀,~/.local/bin/quetzal命令固定用安装时的 node;守护:systemd 用户服务并确保loginctl enable-linger(没登录也运行),没有 systemd 的机器(Alpine / Void、容器、未开 systemd 的 WSL)退回自带守护循环 +crontab @reboot+ 桌面自启动项,不装任何服务框架;有桌面时应用列表里多一个「Quetzal」(光团图标,Chromium 系浏览器以独立窗口打开控制台,任务栏显示 Quetzal 图标);终端界面中英双语(简繁中文显示中文)、彩色、带半格字符画的光团与进度转圈;选项--lan --no-open --no-desktop --home --version --cn/--no-cn --lang,--uninstall [--purge]卸载。在 debian-slim、ubuntu(非 root + sudo)、fedora、archlinux、alpine 容器里验证。官网下载页的 Linux 命令改为这一行并加复制按钮,文档同步。 - One-line Linux install:
curl -fsSL https://quetzal.plutokeating.beer/install | bash(cli/install.sh, copied to/installby the website build). It detects the distribution and package manager (apt / dnf / yum / pacman / zypper / apk / xbps), installs missing git / curl / tar / CA certificates with the system's own package manager, installs Node.js 22.13+ via nvm when absent (apk on Alpine; falls back to the npmmirror mirror when nodejs.org is unreachable); the npm package goes into the private prefix~/quetzal/npmand the~/.local/bin/quetzalcommand pins the Node chosen at install time; supervision is a systemd user service withloginctl enable-lingerensured (runs without a login), and machines without systemd (Alpine / Void, containers, WSL without systemd) fall back to a built-in supervisor loop +crontab @reboot+ a desktop autostart entry, with no service framework installed; with a desktop, a Quetzal entry (orb icon) appears in the app list and Chromium-family browsers open the console as its own window with the Quetzal icon in the taskbar; the terminal UI is bilingual (Chinese for Simplified / Traditional locales), colored, with a half-block orb and spinners; options--lan --no-open --no-desktop --home --version --cn/--no-cn --lang, and--uninstall [--purge]. Verified in debian-slim, ubuntu (non-root + sudo), fedora, archlinux and alpine containers. The download page's Linux command is now this line with a copy button; docs updated. - 守护开关:控制台「控制 → 服务」新增「开机自启 · 崩溃或意外退出后自动重启」一个开关。网关方法
supervision/setSupervision,由身体适配器实现(接口新增可选的supervision):Linux 适配器操作 systemd 用户服务(关 = disable +Restart=no覆盖片段,立即生效)或一键安装脚本的守护循环(关 =state/supervise.off标志让循环暂停 + 删开机项);Termux 适配器操作 runit 的down文件与 Termux:Boot 开机脚本。没有守护者的身体(手动部署)不显示开关。 - Supervision switch: Control → Service in the console gains one switch, "start at boot · restart after a crash or unexpected exit". Gateway methods
supervision/setSupervision, implemented by the body adapter (new optionalsupervisionon the interface): the Linux adapter drives the systemd user service (off = disable + aRestart=nodrop-in, effective immediately) or the one-line installer's supervisor loop (off = thestate/supervise.offflag pauses the loop + boot entries removed); the Termux adapter drives runit'sdownfile and the Termux:Boot script. Bodies without a supervisor (manual deployments) show no switch. - Linux 桌面版控制台:
flutter build linux的原生 GTK 窗口(console/linux/,应用 idxyz.quetzal.console,可执行文件quetzal-console),发版时由新增的linux-consolejob 在 ubuntu-22.04 上构建并附加quetzal-<版本>-linux-x64-console.tar.gz;一键安装脚本在有桌面的机器上下载同版本的包到~/quetzal/console/,桌面项改为xyz.quetzal.console.desktop(与 Wayland app_id 一致),应用列表、任务栏、Alt-Tab 都是 Quetzal 自己的图标,不再依赖任何浏览器;没有包时退回浏览器。桌面版连本机网关免配对码(与网页版同一条GET /auth/local);quetzal open优先启动它。 - Linux desktop console: a native GTK window from
flutter build linux(console/linux/, app idxyz.quetzal.console, executablequetzal-console), built by the newlinux-consolerelease job on ubuntu-22.04 and attached asquetzal-<version>-linux-x64-console.tar.gz; on machines with a desktop the one-line installer downloads the package of the same version into~/quetzal/console/, the desktop entry becomesxyz.quetzal.console.desktop(matching the Wayland app_id), and the app list, taskbar and Alt-Tab all show Quetzal's own icon with no browser involved; without a package it falls back to the browser. The desktop build logs in to the local gateway without a pairing code (the sameGET /auth/localas the web version);quetzal openprefers it. - 架构:原生控制台发 x86_64 与 arm64 两个包(发版工作流用 GitHub 的 arm 运行器构建);龙芯(loongarch64)、RISC-V、armv6l 这些官方 Node 不出二进制的架构,一键安装脚本从 Node.js 项目的 unofficial-builds 直接下载对应的 Node 22 到
~/quetzal/node/(nvm 不认识它们),运行基座与网页控制台在这些机器上照常可用,桌面项退回浏览器打开(Flutter 上游尚不支持 LoongArch,原生窗口待其支持)。 - Architectures: the native console ships for x86_64 and arm64 (the release workflow builds the latter on GitHub's arm runners); on architectures without official Node binaries, such as LoongArch (loongarch64), RISC-V and armv6l, the one-line installer downloads the matching Node 22 from the Node.js project's unofficial-builds into
~/quetzal/node/(nvm does not know these architectures), so the runtime and the web console work there as usual, and the app-list entry falls back to the browser (upstream Flutter does not support LoongArch yet; the native window will follow once it does). - 控制台桌面外壳:修复每隔几秒闪一下「不在线」横幅(重连时旧 WebSocket 的监听没有注销,旧连接迟到的关闭事件把新连接误判为断开,循环重连);列表栏与「她此刻」之间的分隔线可以拖动(宽度记在本机);窗口不够宽时先压两侧到最小再收起「她此刻」(导航栏多一个「此刻」按钮点开对话框),主区不再被挤成一条;窗口从窄变宽时收起手机外壳推入的页面,桌面外壳接着同一个会话显示。
- Console desktop shell: fixed the "offline" banner flashing every few seconds (on reconnect the old WebSocket's listener was never cancelled, so its late close event marked the new connection as lost and reconnected again, in a loop); the dividers next to the list pane and the "right now" pane are draggable (widths remembered locally); when the window is too narrow both side panes shrink to their minimum and then the "right now" pane collapses (a "now" button in the rail opens it as a dialog), so the main area is never squeezed to a sliver; widening a narrow window dismisses the pages the phone shell had pushed and the desktop shell continues with the same conversation.
Full Changelog: v0.5.0...v0.6.0